Imported Upstream version 1.22.4 upstream/1.22.4
authorJinWang An <jinwang.an@samsung.com>
Wed, 1 Dec 2021 08:01:25 +0000 (17:01 +0900)
committerJinWang An <jinwang.an@samsung.com>
Wed, 1 Dec 2021 08:01:25 +0000 (17:01 +0900)
1058 files changed:
.tarball-version [new file with mode: 0644]
.version [new file with mode: 0644]
AUTHORS [new file with mode: 0644]
BUG-REPORT
ChangeLog
FOR-RELEASE
INSTALL
INSTALL.REPO
INSTALL.extra [new file with mode: 0644]
INSTALL.gen [deleted file]
LICENSES
MANIFEST
MORE.STUFF
Makefile [deleted file]
Makefile.am [new file with mode: 0644]
Makefile.ccpg [deleted file]
Makefile.comm [deleted file]
Makefile.cpg [deleted file]
Makefile.dev [deleted file]
Makefile.in
Makefile.init [deleted file]
Makefile.lib [deleted file]
Makefile.man [deleted file]
Makefile.sub [deleted file]
NEWS
PROBLEMS
PROJECTS
README
README.MinGW
REVISION [deleted file]
THANKS [new file with mode: 0644]
TODO
VERSION [deleted file]
acinclude.m4 [new file with mode: 0644]
aclocal.m4
arch/djgpp/README
arch/djgpp/config.bat
arch/djgpp/config.sed
arch/djgpp/config.site
arch/djgpp/t-groff.bat
arch/mingw/Makefile.sub [deleted file]
arch/mingw/grap2graph.cmd
arch/mingw/mingw.am [new file with mode: 0644]
arch/misc/Makefile.sub [deleted file]
arch/misc/misc.am [new file with mode: 0644]
arch/misc/shdeps.sh
build-aux/compile [new file with mode: 0755]
build-aux/config.guess [new file with mode: 0755]
build-aux/config.rpath [new file with mode: 0755]
build-aux/config.sub [new file with mode: 0755]
build-aux/depcomp [new file with mode: 0755]
build-aux/git-version-gen [new file with mode: 0755]
build-aux/install-sh [new file with mode: 0755]
build-aux/missing [new file with mode: 0755]
build-aux/prefix-gnulib-mk [new file with mode: 0755]
build-aux/test-driver [new file with mode: 0755]
build-aux/ylwrap [new file with mode: 0755]
config.guess [deleted file]
config.rpath [deleted file]
config.sub [deleted file]
configure
configure.ac
contrib/chem/ChangeLog
contrib/chem/Makefile.sub [deleted file]
contrib/chem/README.txt
contrib/chem/chem.1.man [new file with mode: 0644]
contrib/chem/chem.am [new file with mode: 0644]
contrib/chem/chem.man [deleted file]
contrib/chem/chem.pic
contrib/chem/chem.pl
contrib/chem/examples/122/README.txt
contrib/chem/examples/122/ch2a_ethyl.chem
contrib/chem/examples/122/ch2b_benzene.chem
contrib/chem/examples/122/ch2c_benzene_right.chem
contrib/chem/examples/122/ch4a_stick.chem
contrib/chem/examples/122/ch4b_methyl_acetate.chem
contrib/chem/examples/122/ch4c_colon.chem
contrib/chem/examples/122/ch4d_HCl.H2O.chem
contrib/chem/examples/122/ch4e_CaSO4.2H2O.chem
contrib/chem/examples/122/ch4f_C.chem
contrib/chem/examples/122/ch4g_BP.chem
contrib/chem/examples/122/ch4h_methacrylate.chem
contrib/chem/examples/122/ch4i_cyclo.chem
contrib/chem/examples/122/ch4j_ring4.chem
contrib/chem/examples/122/ch4k_ring3.chem
contrib/chem/examples/122/ch4l_vertex.chem
contrib/chem/examples/122/ch4m_double.chem
contrib/chem/examples/122/ch4n_triple.chem
contrib/chem/examples/122/ch4o_aromatic.chem
contrib/chem/examples/122/ch4p_cholestanol.chem
contrib/chem/examples/122/ch4q_rings.chem
contrib/chem/examples/122/ch4r_spiro.chem
contrib/chem/examples/122/ch4s_heteroatoms.chem
contrib/chem/examples/122/ch4t_polycyclic.chem
contrib/chem/examples/122/ch4u_nicotine.chem
contrib/chem/examples/122/ch4v_histidine.chem
contrib/chem/examples/122/ch4w_lsd.chem
contrib/chem/examples/122/ch4x_anisole.chem
contrib/chem/examples/122/ch4y_reserpine.chem
contrib/chem/examples/122/ch4z1_eqn_glutamic.chem
contrib/chem/examples/122/ch4z2_text.chem
contrib/chem/examples/122/ch5a_size.chem
contrib/chem/examples/122/ch6a_pic.chem
contrib/chem/examples/122/ch6b_dna.chem
contrib/chem/examples/122/chAa_polymer.chem
contrib/chem/examples/122/chAb_vinyl_chloro.chem
contrib/chem/examples/122/chAc_morphine.chem
contrib/chem/examples/122/chAd_chlorophyll.chem
contrib/chem/examples/122/chAe_chair.chem
contrib/chem/examples/122/chAf_arrow.chem
contrib/chem/examples/122/chAg_circle.chem
contrib/chem/examples/122/chAh_brackets.chem
contrib/chem/examples/122/chAi_poly_vinyl_chloride.chem
contrib/chem/examples/122/chBa_jump.chem
contrib/chem/examples/122/chBb_bonds.chem
contrib/chem/examples/122/chBc_rings.chem
contrib/chem/examples/README.txt
contrib/chem/examples/atp.chem
contrib/chem/examples/cholesterin.chem
contrib/chem/examples/ethamivan.chem
contrib/chem/examples/lsd.chem
contrib/chem/examples/morphine.chem
contrib/chem/examples/penicillin.chem
contrib/chem/examples/reserpine.chem
contrib/eqn2graph/Makefile.sub [deleted file]
contrib/eqn2graph/eqn2graph.1.man [new file with mode: 0644]
contrib/eqn2graph/eqn2graph.am [new file with mode: 0644]
contrib/eqn2graph/eqn2graph.man [deleted file]
contrib/eqn2graph/eqn2graph.sh
contrib/gdiffmk/ChangeLog
contrib/gdiffmk/Makefile.sub [deleted file]
contrib/gdiffmk/README
contrib/gdiffmk/gdiffmk.1.man [new file with mode: 0644]
contrib/gdiffmk/gdiffmk.am [new file with mode: 0644]
contrib/gdiffmk/gdiffmk.man [deleted file]
contrib/gdiffmk/gdiffmk.sh
contrib/gdiffmk/tests/baseline
contrib/gdiffmk/tests/baseline.10
contrib/gdiffmk/tests/baseline.6
contrib/gdiffmk/tests/baseline.6a [new file with mode: 0644]
contrib/gdiffmk/tests/baseline.7
contrib/gdiffmk/tests/baseline.8
contrib/gdiffmk/tests/baseline.9
contrib/gdiffmk/tests/baseline.9a [new file with mode: 0644]
contrib/gdiffmk/tests/gdiffmk_tests.sh [new file with mode: 0755]
contrib/gdiffmk/tests/runtests.in [deleted file]
contrib/gdiffmk/tests/runtests.sh [new file with mode: 0755]
contrib/glilypond/ChangeLog
contrib/glilypond/ChangeLog.0x
contrib/glilypond/Makefile.sub [deleted file]
contrib/glilypond/README.txt
contrib/glilypond/args.pl
contrib/glilypond/examples/example.groff [new file with mode: 0644]
contrib/glilypond/glilypond.1.man [new file with mode: 0644]
contrib/glilypond/glilypond.am [new file with mode: 0644]
contrib/glilypond/glilypond.man [deleted file]
contrib/glilypond/glilypond.pl
contrib/glilypond/oop_fh.pl
contrib/glilypond/subs.pl
contrib/gperl/ChangeLog
contrib/gperl/Makefile.sub [deleted file]
contrib/gperl/gperl.1.man [new file with mode: 0644]
contrib/gperl/gperl.am [new file with mode: 0644]
contrib/gperl/gperl.man [deleted file]
contrib/gperl/gperl.pl
contrib/gpinyin/ChangeLog
contrib/gpinyin/Makefile.sub [deleted file]
contrib/gpinyin/gpinyin.1.man [new file with mode: 0644]
contrib/gpinyin/gpinyin.am [new file with mode: 0644]
contrib/gpinyin/gpinyin.man [deleted file]
contrib/gpinyin/gpinyin.pl
contrib/gpinyin/subs.pl
contrib/grap2graph/Makefile.sub [deleted file]
contrib/grap2graph/grap2graph.1.man [new file with mode: 0644]
contrib/grap2graph/grap2graph.am [new file with mode: 0644]
contrib/grap2graph/grap2graph.man [deleted file]
contrib/grap2graph/grap2graph.sh
contrib/groff_filenames/ChangeLog
contrib/groff_filenames/Makefile.sub [deleted file]
contrib/groff_filenames/groff_filenames.5.man [new file with mode: 0644]
contrib/groff_filenames/groff_filenames.am [new file with mode: 0644]
contrib/groff_filenames/groff_filenames.man [deleted file]
contrib/groffer/ChangeLog
contrib/groffer/Makefile.sub [deleted file]
contrib/groffer/README
contrib/groffer/README_PERL
contrib/groffer/groffer.1.man [new file with mode: 0644]
contrib/groffer/groffer.am [new file with mode: 0644]
contrib/groffer/groffer.man [deleted file]
contrib/groffer/groffer.pl
contrib/groffer/main_subs.pl
contrib/groffer/man.pl
contrib/groffer/roff2.1.man [new file with mode: 0644]
contrib/groffer/roff2.man [deleted file]
contrib/groffer/roff2.pl
contrib/groffer/split_env.sh
contrib/groffer/subs.pl
contrib/groffer/version.sh
contrib/hdtbl/ChangeLog
contrib/hdtbl/Makefile.sub [deleted file]
contrib/hdtbl/examples/chess_board.roff
contrib/hdtbl/examples/col_rowspan_colors.roff
contrib/hdtbl/examples/color_boxes.roff
contrib/hdtbl/examples/color_nested_tables.roff
contrib/hdtbl/examples/color_table_cells.roff
contrib/hdtbl/examples/color_transitions.roff
contrib/hdtbl/examples/common.roff
contrib/hdtbl/examples/fonts_n.in
contrib/hdtbl/examples/fonts_x.in
contrib/hdtbl/examples/mixed_pickles.roff
contrib/hdtbl/examples/rainbow.roff
contrib/hdtbl/examples/short_reference.roff
contrib/hdtbl/examples/test-hdtbl.sh.in [new file with mode: 0644]
contrib/hdtbl/groff_hdtbl.7.man [new file with mode: 0644]
contrib/hdtbl/groff_hdtbl.man [deleted file]
contrib/hdtbl/hdmisc.tmac [deleted file]
contrib/hdtbl/hdmisc.tmac-u [new file with mode: 0644]
contrib/hdtbl/hdtbl.am [new file with mode: 0644]
contrib/hdtbl/hdtbl.tmac [deleted file]
contrib/hdtbl/hdtbl.tmac-u [new file with mode: 0644]
contrib/mm/ChangeLog
contrib/mm/Makefile.sim
contrib/mm/Makefile.sub [deleted file]
contrib/mm/NOTES
contrib/mm/README
contrib/mm/examples/README
contrib/mm/examples/letter.mm [new file with mode: 0644]
contrib/mm/groff_mm.7.man [new file with mode: 0644]
contrib/mm/groff_mm.man [deleted file]
contrib/mm/groff_mmse.7.man [new file with mode: 0644]
contrib/mm/groff_mmse.man [deleted file]
contrib/mm/m.tmac
contrib/mm/mm.am [new file with mode: 0644]
contrib/mm/mm/0.MT
contrib/mm/mm/4.MT
contrib/mm/mm/5.MT
contrib/mm/mm/ms.cov
contrib/mm/mmroff.1.man [new file with mode: 0644]
contrib/mm/mmroff.man [deleted file]
contrib/mm/mmroff.pl
contrib/mm/mse.tmac
contrib/mm/refer-mm.tmac
contrib/mom/BUGS
contrib/mom/ChangeLog
contrib/mom/Makefile.sub [deleted file]
contrib/mom/NEWS
contrib/mom/TODO
contrib/mom/copyright
contrib/mom/examples/README-fr.txt [new file with mode: 0644]
contrib/mom/examples/README.txt
contrib/mom/examples/elvis_syntax
contrib/mom/examples/elvis_syntax.new
contrib/mom/examples/letter.mom
contrib/mom/examples/mom-pdf.mom
contrib/mom/examples/mom.vim
contrib/mom/examples/mon_premier_doc.mom [new file with mode: 0644]
contrib/mom/examples/sample_docs.mom
contrib/mom/examples/slide-demo.mom [new file with mode: 0644]
contrib/mom/examples/test-mom.sh.in [new file with mode: 0644]
contrib/mom/examples/typesetting.mom
contrib/mom/groff_mom.7.man [new file with mode: 0644]
contrib/mom/groff_mom.man [deleted file]
contrib/mom/mom.am [new file with mode: 0644]
contrib/mom/momdoc/appendices.html
contrib/mom/momdoc/color.html
contrib/mom/momdoc/cover.html
contrib/mom/momdoc/definitions.html
contrib/mom/momdoc/docelement.html
contrib/mom/momdoc/docprocessing.html
contrib/mom/momdoc/goodies.html
contrib/mom/momdoc/graphical.html
contrib/mom/momdoc/headfootpage.html
contrib/mom/momdoc/images.html
contrib/mom/momdoc/inlines.html
contrib/mom/momdoc/intro.html
contrib/mom/momdoc/letters.html
contrib/mom/momdoc/macrolist.html
contrib/mom/momdoc/rectoverso.html
contrib/mom/momdoc/refer.html
contrib/mom/momdoc/reserved.html
contrib/mom/momdoc/stylesheet.css
contrib/mom/momdoc/tables-of-contents.html
contrib/mom/momdoc/toc.html
contrib/mom/momdoc/typesetting.html
contrib/mom/momdoc/using.html
contrib/mom/momdoc/version-2.html
contrib/mom/om.tmac
contrib/pdfmark/ChangeLog
contrib/pdfmark/Makefile.sub [deleted file]
contrib/pdfmark/PROBLEMS
contrib/pdfmark/README
contrib/pdfmark/TODO
contrib/pdfmark/cover.ms
contrib/pdfmark/pdfmark.am [new file with mode: 0644]
contrib/pdfmark/pdfmark.ms
contrib/pdfmark/pdfmark.tmac
contrib/pdfmark/pdfroff.1.man [new file with mode: 0644]
contrib/pdfmark/pdfroff.man [deleted file]
contrib/pdfmark/pdfroff.sh
contrib/pdfmark/spdf.tmac
contrib/pic2graph/Makefile.sub [deleted file]
contrib/pic2graph/pic2graph.1.man [new file with mode: 0644]
contrib/pic2graph/pic2graph.am [new file with mode: 0644]
contrib/pic2graph/pic2graph.man [deleted file]
contrib/pic2graph/pic2graph.sh
doc/Makefile.in [deleted file]
doc/Makefile.sub [deleted file]
doc/automake.mom [new file with mode: 0644]
doc/doc.am [new file with mode: 0644]
doc/fdl.texi
doc/fixinfo.sh
doc/gnu.eps
doc/grnexmpl.me
doc/groff.info [deleted file]
doc/groff.info-1 [deleted file]
doc/groff.info-2 [deleted file]
doc/groff.texi [new file with mode: 0644]
doc/groff.texinfo [deleted file]
doc/meintro.me
doc/meintro_fr.me
doc/meref.me
doc/pic.ms
doc/texinfo.tex [deleted file]
doc/webpage.ms
font/devX100-12/Makefile.sub [deleted file]
font/devX100-12/devX100-12.am [new file with mode: 0644]
font/devX100/Makefile.sub [deleted file]
font/devX100/devX100.am [new file with mode: 0644]
font/devX75-12/Makefile.sub [deleted file]
font/devX75-12/devX75-12.am [new file with mode: 0644]
font/devX75/Makefile.sub [deleted file]
font/devX75/devX75.am [new file with mode: 0644]
font/devascii/Makefile.sub [deleted file]
font/devascii/devascii.am [new file with mode: 0644]
font/devcp1047/Makefile.sub [deleted file]
font/devcp1047/devcp1047.am [new file with mode: 0644]
font/devdvi/CWI
font/devdvi/Makefile.sub [deleted file]
font/devdvi/devdvi.am [new file with mode: 0644]
font/devdvi/generate/Makefile
font/devhtml/Makefile.sub [deleted file]
font/devhtml/devhtml.am [new file with mode: 0644]
font/devlatin1/Makefile.sub [deleted file]
font/devlatin1/devlatin1.am [new file with mode: 0644]
font/devlbp/Makefile.sub [deleted file]
font/devlbp/devlbp.am [new file with mode: 0644]
font/devlj4/Makefile.sub [deleted file]
font/devlj4/devlj4.am [new file with mode: 0644]
font/devlj4/generate/Makefile
font/devlj4/generate/special.awk
font/devlj4/generate/text.map
font/devpdf/Foundry.in
font/devpdf/Makefile.sub [deleted file]
font/devpdf/devpdf.am [new file with mode: 0644]
font/devpdf/util/BuildFoundries.pl
font/devps/Makefile.sub [deleted file]
font/devps/devps.am [new file with mode: 0644]
font/devps/generate/Makefile
font/devps/generate/make-zapfdr
font/devps/generate/symbol.sed
font/devps/prologue.ps
font/devutf8/Makefile.sub [deleted file]
font/devutf8/NOTES
font/devutf8/devutf8.am [new file with mode: 0644]
font/scripts/gendesc.sh [new file with mode: 0755]
font/scripts/genfonts.sh [new file with mode: 0755]
font/scripts/scripts.am [new file with mode: 0644]
font/util/make-Rproto
gendef.sh
gnulib_m4/00gnulib.m4 [new file with mode: 0644]
gnulib_m4/absolute-header.m4 [new file with mode: 0644]
gnulib_m4/alloca.m4 [new file with mode: 0644]
gnulib_m4/asm-underscore.m4 [new file with mode: 0644]
gnulib_m4/errno_h.m4 [new file with mode: 0644]
gnulib_m4/exponentd.m4 [new file with mode: 0644]
gnulib_m4/exponentf.m4 [new file with mode: 0644]
gnulib_m4/exponentl.m4 [new file with mode: 0644]
gnulib_m4/extensions.m4 [new file with mode: 0644]
gnulib_m4/extern-inline.m4 [new file with mode: 0644]
gnulib_m4/float_h.m4 [new file with mode: 0644]
gnulib_m4/fpieee.m4 [new file with mode: 0644]
gnulib_m4/fprintf-posix.m4 [new file with mode: 0644]
gnulib_m4/frexp.m4 [new file with mode: 0644]
gnulib_m4/frexpl.m4 [new file with mode: 0644]
gnulib_m4/fseterr.m4 [new file with mode: 0644]
gnulib_m4/gnulib-cache.m4 [new file with mode: 0644]
gnulib_m4/gnulib-common.m4 [new file with mode: 0644]
gnulib_m4/gnulib-comp.m4 [new file with mode: 0644]
gnulib_m4/host-cpu-c-abi.m4 [new file with mode: 0644]
gnulib_m4/include_next.m4 [new file with mode: 0644]
gnulib_m4/intmax_t.m4 [new file with mode: 0644]
gnulib_m4/inttypes_h.m4 [new file with mode: 0644]
gnulib_m4/isnand.m4 [new file with mode: 0644]
gnulib_m4/isnanf.m4 [new file with mode: 0644]
gnulib_m4/isnanl.m4 [new file with mode: 0644]
gnulib_m4/ldexpl.m4 [new file with mode: 0644]
gnulib_m4/libunistring-base.m4 [new file with mode: 0644]
gnulib_m4/limits-h.m4 [new file with mode: 0644]
gnulib_m4/longlong.m4 [new file with mode: 0644]
gnulib_m4/math_h.m4 [new file with mode: 0644]
gnulib_m4/memchr.m4 [new file with mode: 0644]
gnulib_m4/mmap-anon.m4 [new file with mode: 0644]
gnulib_m4/multiarch.m4 [new file with mode: 0644]
gnulib_m4/nocrash.m4 [new file with mode: 0644]
gnulib_m4/non-recursive-gnulib-prefix-hack.m4 [new file with mode: 0644]
gnulib_m4/off_t.m4 [new file with mode: 0644]
gnulib_m4/printf-frexp.m4 [new file with mode: 0644]
gnulib_m4/printf-frexpl.m4 [new file with mode: 0644]
gnulib_m4/printf.m4 [new file with mode: 0644]
gnulib_m4/signbit.m4 [new file with mode: 0644]
gnulib_m4/size_max.m4 [new file with mode: 0644]
gnulib_m4/snprintf.m4 [new file with mode: 0644]
gnulib_m4/ssize_t.m4 [new file with mode: 0644]
gnulib_m4/stddef_h.m4 [new file with mode: 0644]
gnulib_m4/stdint.m4 [new file with mode: 0644]
gnulib_m4/stdint_h.m4 [new file with mode: 0644]
gnulib_m4/stdio_h.m4 [new file with mode: 0644]
gnulib_m4/string_h.m4 [new file with mode: 0644]
gnulib_m4/sys_types_h.m4 [new file with mode: 0644]
gnulib_m4/vasnprintf.m4 [new file with mode: 0644]
gnulib_m4/vsnprintf.m4 [new file with mode: 0644]
gnulib_m4/warn-on-use.m4 [new file with mode: 0644]
gnulib_m4/wchar_h.m4 [new file with mode: 0644]
gnulib_m4/wchar_t.m4 [new file with mode: 0644]
gnulib_m4/wctype_h.m4 [new file with mode: 0644]
gnulib_m4/wcwidth.m4 [new file with mode: 0644]
gnulib_m4/wint_t.m4 [new file with mode: 0644]
gnulib_m4/xsize.m4 [new file with mode: 0644]
install-sh [deleted file]
lib/alloca.in.h [new file with mode: 0644]
lib/arg-nonnull.h [new file with mode: 0644]
lib/asnprintf.c [new file with mode: 0644]
lib/c++defs.h [new file with mode: 0644]
lib/errno.in.h [new file with mode: 0644]
lib/float+.h [new file with mode: 0644]
lib/float.c [new file with mode: 0644]
lib/float.in.h [new file with mode: 0644]
lib/fprintf.c [new file with mode: 0644]
lib/fpucw.h [new file with mode: 0644]
lib/frexp.c [new file with mode: 0644]
lib/frexpl.c [new file with mode: 0644]
lib/fseterr.c [new file with mode: 0644]
lib/fseterr.h [new file with mode: 0644]
lib/gnulib.mk [new file with mode: 0644]
lib/isnan.c [new file with mode: 0644]
lib/isnand-nolibm.h [new file with mode: 0644]
lib/isnand.c [new file with mode: 0644]
lib/isnanf-nolibm.h [new file with mode: 0644]
lib/isnanf.c [new file with mode: 0644]
lib/isnanl-nolibm.h [new file with mode: 0644]
lib/isnanl.c [new file with mode: 0644]
lib/itold.c [new file with mode: 0644]
lib/limits.in.h [new file with mode: 0644]
lib/localcharset.c [new file with mode: 0644]
lib/localcharset.h [new file with mode: 0644]
lib/math.c [new file with mode: 0644]
lib/math.in.h [new file with mode: 0644]
lib/memchr.c [new file with mode: 0644]
lib/memchr.valgrind [new file with mode: 0644]
lib/printf-args.c [new file with mode: 0644]
lib/printf-args.h [new file with mode: 0644]
lib/printf-frexp.c [new file with mode: 0644]
lib/printf-frexp.h [new file with mode: 0644]
lib/printf-frexpl.c [new file with mode: 0644]
lib/printf-frexpl.h [new file with mode: 0644]
lib/printf-parse.c [new file with mode: 0644]
lib/printf-parse.h [new file with mode: 0644]
lib/signbitd.c [new file with mode: 0644]
lib/signbitf.c [new file with mode: 0644]
lib/signbitl.c [new file with mode: 0644]
lib/size_max.h [new file with mode: 0644]
lib/snprintf.c [new file with mode: 0644]
lib/stddef.in.h [new file with mode: 0644]
lib/stdint.in.h [new file with mode: 0644]
lib/stdio-impl.h [new file with mode: 0644]
lib/stdio.in.h [new file with mode: 0644]
lib/streq.h [new file with mode: 0644]
lib/string.in.h [new file with mode: 0644]
lib/sys_types.in.h [new file with mode: 0644]
lib/unitypes.in.h [new file with mode: 0644]
lib/uniwidth.in.h [new file with mode: 0644]
lib/uniwidth/cjk.h [new file with mode: 0644]
lib/uniwidth/width.c [new file with mode: 0644]
lib/vasnprintf.c [new file with mode: 0644]
lib/vasnprintf.h [new file with mode: 0644]
lib/verify.h [new file with mode: 0644]
lib/vsnprintf.c [new file with mode: 0644]
lib/warn-on-use.h [new file with mode: 0644]
lib/wchar.in.h [new file with mode: 0644]
lib/wctype-h.c [new file with mode: 0644]
lib/wctype.in.h [new file with mode: 0644]
lib/wcwidth.c [new file with mode: 0644]
lib/xsize.c [new file with mode: 0644]
lib/xsize.h [new file with mode: 0644]
m4/codeset.m4
m4/fcntl-o.m4
m4/glibc21.m4
m4/groff.m4
m4/iconv.m4
m4/lib-ld.m4
m4/lib-link.m4
m4/lib-prefix.m4
m4/localcharset.m4
makevarescape.sed [new file with mode: 0644]
man/Makefile.sub [deleted file]
man/ditroff.7.man [new file with mode: 0644]
man/ditroff.man [deleted file]
man/groff.7.man [new file with mode: 0644]
man/groff.man [deleted file]
man/groff_char.7.man [new file with mode: 0644]
man/groff_char.man [deleted file]
man/groff_diff.7.man [new file with mode: 0644]
man/groff_diff.man [deleted file]
man/groff_font.5.man [new file with mode: 0644]
man/groff_font.man [deleted file]
man/groff_out.5.man [new file with mode: 0644]
man/groff_out.man [deleted file]
man/groff_tmac.5.man [new file with mode: 0644]
man/groff_tmac.man [deleted file]
man/man.am [new file with mode: 0644]
man/roff.7.man [new file with mode: 0644]
man/roff.man [deleted file]
mdate.pl [new file with mode: 0755]
mdate.sh [deleted file]
mkinstalldirs [deleted file]
src/devices/grodvi/Makefile.sub [deleted file]
src/devices/grodvi/dvi.cpp
src/devices/grodvi/grodvi.1.man [new file with mode: 0644]
src/devices/grodvi/grodvi.am [new file with mode: 0644]
src/devices/grodvi/grodvi.man [deleted file]
src/devices/grohtml/Makefile.sub [deleted file]
src/devices/grohtml/grohtml.1.man [new file with mode: 0644]
src/devices/grohtml/grohtml.am [new file with mode: 0644]
src/devices/grohtml/grohtml.man [deleted file]
src/devices/grohtml/html-table.cpp
src/devices/grohtml/html-table.h
src/devices/grohtml/html-text.cpp
src/devices/grohtml/html-text.h
src/devices/grohtml/html.h
src/devices/grohtml/output.cpp
src/devices/grohtml/post-html.cpp
src/devices/grolbp/Makefile.sub [deleted file]
src/devices/grolbp/charset.h
src/devices/grolbp/grolbp.1.man [new file with mode: 0644]
src/devices/grolbp/grolbp.am [new file with mode: 0644]
src/devices/grolbp/grolbp.man [deleted file]
src/devices/grolbp/lbp.cpp
src/devices/grolbp/lbp.h
src/devices/grolj4/Makefile.sub [deleted file]
src/devices/grolj4/grolj4.1.man [new file with mode: 0644]
src/devices/grolj4/grolj4.am [new file with mode: 0644]
src/devices/grolj4/grolj4.man [deleted file]
src/devices/grolj4/lj4.cpp
src/devices/grolj4/lj4_font.5.man [new file with mode: 0644]
src/devices/grolj4/lj4_font.man [deleted file]
src/devices/gropdf/Makefile.sub [deleted file]
src/devices/gropdf/gropdf.1.man [new file with mode: 0644]
src/devices/gropdf/gropdf.am [new file with mode: 0644]
src/devices/gropdf/gropdf.man [deleted file]
src/devices/gropdf/gropdf.pl
src/devices/gropdf/pdfmom.1.man [new file with mode: 0644]
src/devices/gropdf/pdfmom.man [deleted file]
src/devices/gropdf/pdfmom.pl
src/devices/grops/Makefile.sub [deleted file]
src/devices/grops/grops.1.man [new file with mode: 0644]
src/devices/grops/grops.am [new file with mode: 0644]
src/devices/grops/grops.man [deleted file]
src/devices/grops/ps.cpp
src/devices/grops/ps.h
src/devices/grops/psfig.diff
src/devices/grops/psrm.cpp
src/devices/grotty/Makefile.sub [deleted file]
src/devices/grotty/grotty.1.man [new file with mode: 0644]
src/devices/grotty/grotty.am [new file with mode: 0644]
src/devices/grotty/grotty.man [deleted file]
src/devices/grotty/tty.cpp
src/devices/xditview/ChangeLog
src/devices/xditview/Dvi.c
src/devices/xditview/DviP.h
src/devices/xditview/Makefile.sub [deleted file]
src/devices/xditview/README
src/devices/xditview/TODO
src/devices/xditview/ad2c
src/devices/xditview/device.c
src/devices/xditview/draw.c
src/devices/xditview/draw.h [new file with mode: 0644]
src/devices/xditview/font.c
src/devices/xditview/font.h [new file with mode: 0644]
src/devices/xditview/gxditview.1.man [new file with mode: 0644]
src/devices/xditview/gxditview.man [deleted file]
src/devices/xditview/lex.c
src/devices/xditview/lex.h [new file with mode: 0644]
src/devices/xditview/page.c
src/devices/xditview/page.h [new file with mode: 0644]
src/devices/xditview/parse.c
src/devices/xditview/parse.h [new file with mode: 0644]
src/devices/xditview/xditview.am [new file with mode: 0644]
src/include/DviChar.h
src/include/Makefile.sub [deleted file]
src/include/assert.h
src/include/cmap.h
src/include/color.h
src/include/config.hin
src/include/cset.h
src/include/curtime.h [new file with mode: 0644]
src/include/device.h
src/include/driver.h
src/include/errarg.h
src/include/error.h
src/include/font.h
src/include/geometry.h
src/include/getopt.h
src/include/getopt_int.h
src/include/gettext.h
src/include/html-strings.h
src/include/htmlhint.h
src/include/include.am [new file with mode: 0644]
src/include/index.h
src/include/itable.h
src/include/lf.h [new file with mode: 0644]
src/include/lib.h
src/include/localcharset.h
src/include/macropath.h
src/include/nonposix.h
src/include/paper.h
src/include/posix.h
src/include/printer.h
src/include/ptable.h
src/include/refid.h
src/include/relocate.h
src/include/search.h
src/include/searchpath.h
src/include/stringclass.h
src/include/symbol.h
src/include/unicode.h
src/libs/gnulib/Makefile.am [deleted file]
src/libs/gnulib/Makefile.in [deleted file]
src/libs/gnulib/aclocal.m4 [deleted file]
src/libs/gnulib/build-aux/compile [deleted file]
src/libs/gnulib/build-aux/config.guess [deleted file]
src/libs/gnulib/build-aux/config.sub [deleted file]
src/libs/gnulib/build-aux/depcomp [deleted file]
src/libs/gnulib/build-aux/install-sh [deleted file]
src/libs/gnulib/build-aux/missing [deleted file]
src/libs/gnulib/build-aux/snippet/arg-nonnull.h [deleted file]
src/libs/gnulib/build-aux/snippet/c++defs.h [deleted file]
src/libs/gnulib/build-aux/snippet/warn-on-use.h [deleted file]
src/libs/gnulib/config.h.in [deleted file]
src/libs/gnulib/configure [deleted file]
src/libs/gnulib/configure.ac [deleted file]
src/libs/gnulib/lib/Makefile.am [deleted file]
src/libs/gnulib/lib/Makefile.in [deleted file]
src/libs/gnulib/lib/config.charset [deleted file]
src/libs/gnulib/lib/intprops.h [deleted file]
src/libs/gnulib/lib/inttypes.in.h [deleted file]
src/libs/gnulib/lib/localcharset.c [deleted file]
src/libs/gnulib/lib/localcharset.h [deleted file]
src/libs/gnulib/lib/ref-add.sin [deleted file]
src/libs/gnulib/lib/ref-del.sin [deleted file]
src/libs/gnulib/lib/stdbool.in.h [deleted file]
src/libs/gnulib/lib/stddef.in.h [deleted file]
src/libs/gnulib/lib/stdint.in.h [deleted file]
src/libs/gnulib/lib/streq.h [deleted file]
src/libs/gnulib/lib/unitypes.in.h [deleted file]
src/libs/gnulib/lib/uniwidth.in.h [deleted file]
src/libs/gnulib/lib/uniwidth/cjk.h [deleted file]
src/libs/gnulib/lib/uniwidth/width.c [deleted file]
src/libs/gnulib/lib/verify.h [deleted file]
src/libs/gnulib/lib/wchar.in.h [deleted file]
src/libs/gnulib/lib/wctype-h.c [deleted file]
src/libs/gnulib/lib/wctype.in.h [deleted file]
src/libs/gnulib/lib/wcwidth.c [deleted file]
src/libs/gnulib/m4/00gnulib.m4 [deleted file]
src/libs/gnulib/m4/Makefile.am [deleted file]
src/libs/gnulib/m4/Makefile.in [deleted file]
src/libs/gnulib/m4/codeset.m4 [deleted file]
src/libs/gnulib/m4/configmake.m4 [deleted file]
src/libs/gnulib/m4/extensions.m4 [deleted file]
src/libs/gnulib/m4/extern-inline.m4 [deleted file]
src/libs/gnulib/m4/fcntl-o.m4 [deleted file]
src/libs/gnulib/m4/glibc21.m4 [deleted file]
src/libs/gnulib/m4/gnulib-cache.m4 [deleted file]
src/libs/gnulib/m4/gnulib-common.m4 [deleted file]
src/libs/gnulib/m4/gnulib-comp.m4 [deleted file]
src/libs/gnulib/m4/gnulib-tool.m4 [deleted file]
src/libs/gnulib/m4/include_next.m4 [deleted file]
src/libs/gnulib/m4/inttypes-pri.m4 [deleted file]
src/libs/gnulib/m4/inttypes.m4 [deleted file]
src/libs/gnulib/m4/libunistring-base.m4 [deleted file]
src/libs/gnulib/m4/localcharset.m4 [deleted file]
src/libs/gnulib/m4/longlong.m4 [deleted file]
src/libs/gnulib/m4/multiarch.m4 [deleted file]
src/libs/gnulib/m4/onceonly.m4 [deleted file]
src/libs/gnulib/m4/stdbool.m4 [deleted file]
src/libs/gnulib/m4/stddef_h.m4 [deleted file]
src/libs/gnulib/m4/stdint.m4 [deleted file]
src/libs/gnulib/m4/warn-on-use.m4 [deleted file]
src/libs/gnulib/m4/wchar_h.m4 [deleted file]
src/libs/gnulib/m4/wchar_t.m4 [deleted file]
src/libs/gnulib/m4/wctype_h.m4 [deleted file]
src/libs/gnulib/m4/wcwidth.m4 [deleted file]
src/libs/gnulib/m4/wint_t.m4 [deleted file]
src/libs/libbib/Makefile.sub [deleted file]
src/libs/libbib/common.cpp
src/libs/libbib/index.cpp
src/libs/libbib/libbib.am [new file with mode: 0644]
src/libs/libbib/linear.cpp
src/libs/libbib/map.c
src/libs/libbib/search.cpp
src/libs/libdriver/Makefile.sub [deleted file]
src/libs/libdriver/input.cpp
src/libs/libdriver/libdriver.am [new file with mode: 0644]
src/libs/libdriver/printer.cpp
src/libs/libgroff/Makefile.sub [deleted file]
src/libs/libgroff/assert.cpp
src/libs/libgroff/change_lf.cpp
src/libs/libgroff/cmap.cpp
src/libs/libgroff/color.cpp
src/libs/libgroff/config.charset
src/libs/libgroff/cset.cpp
src/libs/libgroff/curtime.cpp [new file with mode: 0644]
src/libs/libgroff/device.cpp
src/libs/libgroff/errarg.cpp
src/libs/libgroff/error.cpp
src/libs/libgroff/fatal.cpp
src/libs/libgroff/filename.cpp
src/libs/libgroff/fmod.c
src/libs/libgroff/font.cpp
src/libs/libgroff/fontfile.cpp
src/libs/libgroff/geometry.cpp
src/libs/libgroff/getcwd.c
src/libs/libgroff/getopt.c
src/libs/libgroff/getopt1.c
src/libs/libgroff/glyphuni.cpp
src/libs/libgroff/htmlhint.cpp
src/libs/libgroff/hypot.cpp
src/libs/libgroff/iftoa.c
src/libs/libgroff/invalid.cpp
src/libs/libgroff/itoa.c
src/libs/libgroff/lf.cpp
src/libs/libgroff/libgroff.am [new file with mode: 0644]
src/libs/libgroff/lineno.cpp
src/libs/libgroff/localcharset.c
src/libs/libgroff/macropath.cpp
src/libs/libgroff/make-uniuni
src/libs/libgroff/matherr.c
src/libs/libgroff/maxfilename.cpp
src/libs/libgroff/maxpathname.cpp
src/libs/libgroff/mksdir.cpp
src/libs/libgroff/mkstemp.cpp
src/libs/libgroff/nametoindex.cpp
src/libs/libgroff/new.cpp
src/libs/libgroff/paper.cpp
src/libs/libgroff/prime.cpp
src/libs/libgroff/progname.c
src/libs/libgroff/ptable.cpp
src/libs/libgroff/putenv.c
src/libs/libgroff/quotearg.c
src/libs/libgroff/ref-add.sin
src/libs/libgroff/ref-del.sin
src/libs/libgroff/relocatable.h
src/libs/libgroff/relocate.cpp
src/libs/libgroff/searchpath.cpp
src/libs/libgroff/spawnvp.c
src/libs/libgroff/strcasecmp.c
src/libs/libgroff/strerror.c
src/libs/libgroff/string.cpp
src/libs/libgroff/strncasecmp.c
src/libs/libgroff/strsave.cpp
src/libs/libgroff/strtol.c
src/libs/libgroff/symbol.cpp
src/libs/libgroff/tmpfile.cpp
src/libs/libgroff/tmpname.cpp
src/libs/libgroff/unicode.cpp
src/libs/libgroff/uniglyph.cpp
src/libs/libgroff/uniuni.cpp
src/libs/libxutil/DviChar.c
src/libs/libxutil/Makefile.sub [deleted file]
src/libs/libxutil/XFontName.c
src/libs/libxutil/libxutil.am [new file with mode: 0644]
src/libs/libxutil/xmalloc.c
src/libs/snprintf/snprintf.c [deleted file]
src/preproc/eqn/Makefile.sub [deleted file]
src/preproc/eqn/TODO
src/preproc/eqn/box.cpp
src/preproc/eqn/box.h
src/preproc/eqn/delim.cpp
src/preproc/eqn/eqn.1.man [new file with mode: 0644]
src/preproc/eqn/eqn.am [new file with mode: 0644]
src/preproc/eqn/eqn.cpp
src/preproc/eqn/eqn.h
src/preproc/eqn/eqn.hpp [new file with mode: 0644]
src/preproc/eqn/eqn.man [deleted file]
src/preproc/eqn/eqn.y [deleted file]
src/preproc/eqn/eqn.ypp [new file with mode: 0644]
src/preproc/eqn/eqn_tab.h [deleted file]
src/preproc/eqn/lex.cpp
src/preproc/eqn/limit.cpp
src/preproc/eqn/list.cpp
src/preproc/eqn/main.cpp
src/preproc/eqn/mark.cpp
src/preproc/eqn/neqn.1.man [new file with mode: 0644]
src/preproc/eqn/neqn.man [deleted file]
src/preproc/eqn/neqn.sh
src/preproc/eqn/other.cpp
src/preproc/eqn/over.cpp
src/preproc/eqn/pbox.h
src/preproc/eqn/pile.cpp
src/preproc/eqn/script.cpp
src/preproc/eqn/special.cpp
src/preproc/eqn/sqrt.cpp
src/preproc/eqn/text.cpp
src/preproc/grn/Makefile.sub [deleted file]
src/preproc/grn/README
src/preproc/grn/grn.1.man [new file with mode: 0644]
src/preproc/grn/grn.am [new file with mode: 0644]
src/preproc/grn/grn.man [deleted file]
src/preproc/grn/hdb.cpp
src/preproc/grn/hgraph.cpp
src/preproc/grn/hpoint.cpp
src/preproc/grn/main.cpp
src/preproc/html/Makefile.sub [deleted file]
src/preproc/html/html.am [new file with mode: 0644]
src/preproc/html/pre-html.cpp
src/preproc/html/pre-html.h
src/preproc/html/pushback.cpp
src/preproc/html/pushback.h
src/preproc/pic/Makefile.sub [deleted file]
src/preproc/pic/TODO
src/preproc/pic/common.cpp
src/preproc/pic/common.h
src/preproc/pic/lex.cpp
src/preproc/pic/main.cpp
src/preproc/pic/object.cpp
src/preproc/pic/object.h
src/preproc/pic/output.h
src/preproc/pic/pic.1.man [new file with mode: 0644]
src/preproc/pic/pic.am [new file with mode: 0644]
src/preproc/pic/pic.cpp
src/preproc/pic/pic.h
src/preproc/pic/pic.hpp [new file with mode: 0644]
src/preproc/pic/pic.man [deleted file]
src/preproc/pic/pic.y [deleted file]
src/preproc/pic/pic.ypp [new file with mode: 0644]
src/preproc/pic/pic_tab.h [deleted file]
src/preproc/pic/position.h
src/preproc/pic/tex.cpp
src/preproc/pic/text.h
src/preproc/pic/troff.cpp
src/preproc/preconv/Makefile.sub [deleted file]
src/preproc/preconv/preconv.1.man [new file with mode: 0644]
src/preproc/preconv/preconv.am [new file with mode: 0644]
src/preproc/preconv/preconv.cpp
src/preproc/preconv/preconv.man [deleted file]
src/preproc/refer/Makefile.sub [deleted file]
src/preproc/refer/TODO
src/preproc/refer/command.cpp
src/preproc/refer/command.h
src/preproc/refer/label.cpp
src/preproc/refer/label.hpp [new file with mode: 0644]
src/preproc/refer/label.y [deleted file]
src/preproc/refer/label.ypp [new file with mode: 0644]
src/preproc/refer/ref.cpp
src/preproc/refer/ref.h
src/preproc/refer/refer.1.man [new file with mode: 0644]
src/preproc/refer/refer.am [new file with mode: 0644]
src/preproc/refer/refer.cpp
src/preproc/refer/refer.h
src/preproc/refer/refer.man [deleted file]
src/preproc/refer/token.cpp
src/preproc/refer/token.h
src/preproc/soelim/Makefile.sub [deleted file]
src/preproc/soelim/soelim.1.man [new file with mode: 0644]
src/preproc/soelim/soelim.am [new file with mode: 0644]
src/preproc/soelim/soelim.cpp
src/preproc/soelim/soelim.man [deleted file]
src/preproc/tbl/Makefile.sub [deleted file]
src/preproc/tbl/main.cpp
src/preproc/tbl/table.cpp
src/preproc/tbl/table.h
src/preproc/tbl/tbl.1.man [new file with mode: 0644]
src/preproc/tbl/tbl.am [new file with mode: 0644]
src/preproc/tbl/tbl.man [deleted file]
src/roff/groff/Makefile.sub [deleted file]
src/roff/groff/groff.1.man [new file with mode: 0644]
src/roff/groff/groff.am [new file with mode: 0644]
src/roff/groff/groff.cpp
src/roff/groff/groff.man [deleted file]
src/roff/groff/pipeline.c
src/roff/groff/pipeline.h
src/roff/grog/Makefile.sub [deleted file]
src/roff/grog/grog.1.man [new file with mode: 0644]
src/roff/grog/grog.am [new file with mode: 0644]
src/roff/grog/grog.man [deleted file]
src/roff/grog/grog.pl
src/roff/grog/subs.pl
src/roff/nroff/Makefile.sub [deleted file]
src/roff/nroff/nroff.1.man [new file with mode: 0644]
src/roff/nroff/nroff.am [new file with mode: 0644]
src/roff/nroff/nroff.man [deleted file]
src/roff/nroff/nroff.sh
src/roff/troff/Makefile.sub [deleted file]
src/roff/troff/TODO
src/roff/troff/charinfo.h
src/roff/troff/column.cpp
src/roff/troff/dictionary.cpp
src/roff/troff/dictionary.h
src/roff/troff/div.cpp
src/roff/troff/div.h
src/roff/troff/env.cpp
src/roff/troff/env.h
src/roff/troff/hvunits.h
src/roff/troff/input.cpp
src/roff/troff/input.h
src/roff/troff/mtsm.cpp
src/roff/troff/mtsm.h
src/roff/troff/node.cpp
src/roff/troff/node.h
src/roff/troff/number.cpp
src/roff/troff/reg.cpp
src/roff/troff/reg.h
src/roff/troff/request.h
src/roff/troff/token.h
src/roff/troff/troff.1.man [new file with mode: 0644]
src/roff/troff/troff.am [new file with mode: 0644]
src/roff/troff/troff.h
src/roff/troff/troff.man [deleted file]
src/utils/addftinfo/Makefile.sub [deleted file]
src/utils/addftinfo/addftinfo.1.man [new file with mode: 0644]
src/utils/addftinfo/addftinfo.am [new file with mode: 0644]
src/utils/addftinfo/addftinfo.cpp
src/utils/addftinfo/addftinfo.man [deleted file]
src/utils/addftinfo/guess.cpp
src/utils/addftinfo/guess.h
src/utils/afmtodit/Makefile.sub [deleted file]
src/utils/afmtodit/afmtodit.1.man [new file with mode: 0644]
src/utils/afmtodit/afmtodit.am [new file with mode: 0644]
src/utils/afmtodit/afmtodit.man [deleted file]
src/utils/afmtodit/afmtodit.pl
src/utils/afmtodit/afmtodit.tables
src/utils/afmtodit/make-afmtodit-tables
src/utils/hpftodit/Makefile.sub [deleted file]
src/utils/hpftodit/hpftodit.1.man [new file with mode: 0644]
src/utils/hpftodit/hpftodit.am [new file with mode: 0644]
src/utils/hpftodit/hpftodit.cpp
src/utils/hpftodit/hpftodit.man [deleted file]
src/utils/hpftodit/hpuni.cpp
src/utils/indxbib/Makefile.sub [deleted file]
src/utils/indxbib/indxbib.1.man [new file with mode: 0644]
src/utils/indxbib/indxbib.am [new file with mode: 0644]
src/utils/indxbib/indxbib.cpp
src/utils/indxbib/indxbib.man [deleted file]
src/utils/indxbib/signal.c
src/utils/lkbib/Makefile.sub [deleted file]
src/utils/lkbib/lkbib.1.man [new file with mode: 0644]
src/utils/lkbib/lkbib.am [new file with mode: 0644]
src/utils/lkbib/lkbib.cpp
src/utils/lkbib/lkbib.man [deleted file]
src/utils/lookbib/Makefile.sub [deleted file]
src/utils/lookbib/lookbib.1.man [new file with mode: 0644]
src/utils/lookbib/lookbib.am [new file with mode: 0644]
src/utils/lookbib/lookbib.cpp
src/utils/lookbib/lookbib.man [deleted file]
src/utils/pfbtops/Makefile.sub [deleted file]
src/utils/pfbtops/pfbtops.1.man [new file with mode: 0644]
src/utils/pfbtops/pfbtops.am [new file with mode: 0644]
src/utils/pfbtops/pfbtops.c
src/utils/pfbtops/pfbtops.man [deleted file]
src/utils/tfmtodit/Makefile.sub [deleted file]
src/utils/tfmtodit/tfmtodit.1.man [new file with mode: 0644]
src/utils/tfmtodit/tfmtodit.am [new file with mode: 0644]
src/utils/tfmtodit/tfmtodit.cpp
src/utils/tfmtodit/tfmtodit.man [deleted file]
src/utils/xtotroff/Makefile.in [deleted file]
src/utils/xtotroff/Makefile.sub [deleted file]
src/utils/xtotroff/xtotroff.1.man [new file with mode: 0644]
src/utils/xtotroff/xtotroff.am [new file with mode: 0644]
src/utils/xtotroff/xtotroff.c
src/utils/xtotroff/xtotroff.man [deleted file]
stamp-h.in [deleted file]
test-groff.in
tmac/62bit.tmac
tmac/LOCALIZATION
tmac/Makefile.sub [deleted file]
tmac/TESTING-HINTS
tmac/TODO
tmac/X.tmac
tmac/Xps.tmac
tmac/a4.tmac
tmac/an-ext.tmac
tmac/an-old.tmac
tmac/an.tmac
tmac/andoc.tmac
tmac/composite.tmac
tmac/cp1047.tmac
tmac/cs.tmac
tmac/de.tmac
tmac/den.tmac
tmac/devtag.tmac
tmac/doc-common [deleted file]
tmac/doc-common-u [new file with mode: 0644]
tmac/doc-ditroff [deleted file]
tmac/doc-ditroff-u [new file with mode: 0644]
tmac/doc-nroff [deleted file]
tmac/doc-nroff-u [new file with mode: 0644]
tmac/doc-old.tmac [deleted file]
tmac/doc-old.tmac-u [new file with mode: 0644]
tmac/doc-syms [deleted file]
tmac/doc-syms-u [new file with mode: 0644]
tmac/doc.tmac [deleted file]
tmac/doc.tmac-u [new file with mode: 0644]
tmac/dvi.tmac
tmac/e.tmac [deleted file]
tmac/e.tmac-u [new file with mode: 0644]
tmac/fr.tmac
tmac/groff_man.7.man [new file with mode: 0644]
tmac/groff_man.man [deleted file]
tmac/groff_mdoc.7.man [new file with mode: 0644]
tmac/groff_mdoc.man [deleted file]
tmac/groff_me.7.man [new file with mode: 0644]
tmac/groff_me.man [deleted file]
tmac/groff_ms.7.man [new file with mode: 0644]
tmac/groff_ms.man [deleted file]
tmac/groff_trace.7.man [new file with mode: 0644]
tmac/groff_trace.man [deleted file]
tmac/groff_www.7.man [new file with mode: 0644]
tmac/groff_www.man [deleted file]
tmac/hyphen.cs
tmac/hyphen.den
tmac/hyphen.det
tmac/hyphen.fr
tmac/hyphen.sv
tmac/hyphen.us
tmac/hyphenex.cs
tmac/hyphenex.det [deleted file]
tmac/hyphenex.pl
tmac/hyphenex.us
tmac/ja.tmac
tmac/papersize.tmac
tmac/pdf.tmac
tmac/pdfpic.tmac [new file with mode: 0644]
tmac/pspic.tmac
tmac/ptx.tmac
tmac/refer-me.tmac
tmac/refer-ms.tmac
tmac/refer.tmac
tmac/s.tmac
tmac/strip.sed
tmac/sv.tmac
tmac/tmac.am [new file with mode: 0644]
tmac/trace.tmac
tmac/trans.tmac
tmac/troffrc
tmac/tty-char.tmac
tmac/tty.tmac
tmac/www.tmac [deleted file]
tmac/www.tmac.in [new file with mode: 0644]
tmac/zh.tmac [new file with mode: 0644]

diff --git a/.tarball-version b/.tarball-version
new file mode 100644 (file)
index 0000000..2a0ba77
--- /dev/null
@@ -0,0 +1 @@
+1.22.4
diff --git a/.version b/.version
new file mode 100644 (file)
index 0000000..2a0ba77
--- /dev/null
+++ b/.version
@@ -0,0 +1 @@
+1.22.4
diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..e69de29
index 3da7964485892b8bc8c0d723e20b48e1a0cbb1ba..0a246462df1f98573c5365e10c67f8cd9946febb 100644 (file)
@@ -1,76 +1,76 @@
-# Copyright (C) 1999-201 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
 #
-# This file is part of `groff'.
+# This file is part of 'groff'.
 #
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' 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.
 #
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see
+# along with this program.  If not, see
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 
                           Groff Bug Report
 
-Please read the PROBLEMS file before sending in a bug report.
+Please read the PROBLEMS file before submitting a bug report.
 
 Please fill in all fields, even if you think they are not relevant.
 
-Please delete the text in brackets before sending it in.
+Please delete the text in brackets before submitting it.
 
 Please report separate bugs separately.
 
-Send the completed form to bug-groff@gnu.org
+Place the completed form in a new bug report at
+http://savannah.gnu.org/bugs/?group=groff.
 
 GROFF VERSION:
-[The version of groff you are using.  For example, `1.05']
+[The version of groff you are using.  For example, '1.22.4']
 
 MACHINE:
-[The machine you are using.  For example, `Sun SPARCstation 2']
+[The machine you are using.  For example, 'Sun SPARCstation 2']
 
 OS:
-[The operating system you are using.  For example, `SunOS 4.1.1']
+[The operating system you are using.  For example, 'SunOS 4.1.1']
 
 COMPILER:
-[The compiler you are used to compile groff.  For example, `g++ 1.40.3']
+[The compiler you used to compile groff.  For example, 'g++ 1.40.3']
 
 INPUT FILES:
 [Include all the files necessary to reproduce the problem that are not
 part of the standard groff distribution.  This includes font
 description files, DESC files and macro files (with the exception of
-the -ms and -mm macros: we have them).  Send them as a shell archive or
-as a uuencoded, compressed tar file.
+the -ms and -mm macros: we have them).  Attach them to the bug report.
 
 It's easier for us if you can provide an example that doesn't depend on
 any macro package, but obviously if you're reporting a problem with a
 macro package that won't be possible.  Also a short example is more
 convenient than a long one, but don't worry if you can't find a short
-example.  Don't say something like ``any file that X'': Always send a
+example.  Don't say something like "any file that X": Always include a
 definite example.]
 
 COMMAND LINE:
 [The command line that we should run in order to observe the bug.  For
-example, `gtroff -Tps bug.tr'.  If the command line uses -ms or -mm,
+example, 'gtroff -Tps bug.tr'.  If the command line uses -ms or -mm,
 say whether these refer to the groff versions or the Unix versions of
 the macros.]
 
 DESCRIPTION OF INCORRECT BEHAVIOUR:
-[What goes wrong when that command line is run?  For example, `gtroff
-gets a segmentation fault', or `The output looks bad because the bar
+[What goes wrong when that command line is run?  For example, 'gtroff
+gets a segmentation fault', or 'The output looks bad because the bar
 over the x is too long and is too far over to the left.'  If you get an
 error message, include it here without modification: Don't edit it to
 make it more readable.]
 
 SUGGESTED FIX [optional]:
-[If you can suggest a fix for the problem, include a context diff here. 
-But don't delay sending in a bug report in the hope of finding a fix. 
+[If you can suggest a fix for the problem, include a context diff here.
+But don't delay submitting a bug report in the hope of finding a fix.
 Guesses about the cause of the bug are not usually helpful.]
 
 ##### Emacs settings
index e881f1780fcd461c76eb6eb94a4e9e2789fddc02..835d26c38215b618e5f2e0a8633bccad23c0f4ec 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+2018-12-18 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Fix 'dvi' and 'pdf' texinfo doc generation.
+
+       GNU make has a built-in variable 'TEXI2DVI' but it is not the case
+       of all 'make' implementations, which causes 'make doc' to fail
+       with an unclear message although 'texi2dvi' is available.  Also,
+       'texi2dvi' is invoked inconditionnally.
+
+       * m4/groff.m4 (GROFF_TEXI2DVI): new macro to detect properly the
+       presence of 'texi2dvi'.
+
+       * configure.ac: use 'GROFF_TEXI2DVI' and define automake conditional
+       'HAVE_TEXI2DVI'.
+
+       * doc/doc.am:
+       - Define TEXI2DVI to 'texi2dvi'.
+       - Print an error message if 'texi2dvi' is not available.
+
+2018-12-08 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Install texinfo doc on 'make install-pdf' and 'make install-html'
+
+       * doc/doc.am:
+       - Use automake 'install-pdf-local' and 'install-html-local' rules
+       to install groff.pdf and groff.html
+       - New rules 'uninstall_pdf' and 'uninstall_html'.
+       - Use $(RM) instead of 'rm'.
+       - Don't try to build doc if 'BUILD_INFODOC' is not set.
+       * INSTALL.REPO: document texinfo build and installation.
+
+2018-12-10 Ingo Schwarze <schwarze@openbsd.org>
+
+       * Makefile.am: Remove the unused variables PREFIXMAN5 and PREFIXMAN7.
+
+       They caused installation failures on Solaris 9.
+
+2018-12-08 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Remove gnulib's hypot module.
+
+       The removal of 'GROFF_NEED_DECLARATION([hypot])' in 'configure.ac'
+       was correct as the test was buggy, but there is no need to use
+       gnulib's hypot module as previously we did not need to provide a
+       replacement function.
+
+       * bootstrap.conf: do it.
+
+2018-12-08  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Problem running gropdf on big endian (Sparc)
+
+       * src/devices/gropdf/gropdf.pl: Prior to perl v5.9 the 'L<'
+       template for 'unpack' was unavailable. Solaris 10 uses v5.8.4
+       so safer to use the template 'V' rather than 'L<'.
+
+2018-12-08 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Use gnulib's 'hypot' module.
+
+       In 'configure.ac', the macro call
+       'GROFF_NEED_DECLARATION([hypot])' checks whether the function
+       'hypot' is correctly declared in 'math.h', but the test is buggy
+       and may yields false results.
+
+       * bootsrap.conf: add 'hypot' module.
+
+       * configure.ac: Remove GROFF_NEED_DECLARATION([hypot]).
+
+       * src/libs/libgroff/hypot.cpp: remove declaration of hypot.
+
+2018-12-07  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Problem running gropdf on big endian (Sparc)
+
+       * src/devices/gropdf/gropdf.pl: When loading a binary (.pfb)
+       font for embedding always use little endian to unpack chunk
+       headers.
+
+2018-12-05  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Skip mom tests if needed config is missing.
+
+       * contrib/mom/examples/test-mom.sh.in: exit 77 if URW fonts are
+       not available.
+
+       * contrib/mom/mom.am: distribute inconditionnally test-mom.in.
+
+       * m4/groff.m4 (GROFF_URW_FONTS): check if 'awk' and 'gs' are
+       available, and replace non-portable 'grep' command by awk script.
+
+2018-12-01  Colin Watson  <cjwatson@debian.org>
+
+       Fix error handling in tests of mom examples
+
+       * contrib/mom/examples/test-mom.sh.in (check_number_pages): Correct
+       error message.
+       (check_has_images): Correct shell syntax error.
+
+2018-11-26  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Document .sp behaviour in -me doc -- French translation
+
+       * doc/meintro_fr.me: translation of commit
+       7a83f7f5003e24f020306f09f4d497e04e82cb14.
+
+       Fixes bug https://savannah.gnu.org/bugs/?54958.
+
+2018-11-24  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Fix tarball generation: script 'makevarescape.sed' was missing.
+
+       * Makefile.am (EXTRA_DIST): add it.
+
+2018-11-24  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Add automatic tests on mom examples
+
+       * m4/groff.m4 (GROFF_PDFTOOLS): check presence of some pdf tools.
+       * configure.ac: use 'GROFF_PDFTOOLS', add new AM conditional.
+       * contrib/mom/examples/test-mom.sh.in: new file that use 'pdfinfo'
+       and 'pdfimages' to make some basic checks on mom examples.
+
+2018-11-21  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       tmac/sv.tmac: Set Swedish hyphenation flags to 32.
+
+       This permits hyphenation after the first character but continues
+       prohibiting it before the last character of a word, in
+       congruence with the TeX-based hyphenation patterns we use.
+
+       Fixes <https://savannah.gnu.org/bugs/index.php?55066>.
+
+2018-11-19  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Fix build on environment where /etc/papersize contains comments
+
+       Issue introduced on commit efea81c75f831ddc6717c2ef25556e0f49d1f679.
+
+       * m4/groff.m4 (GROFF_PAGE): remove comments and get the 1st string
+       of '/etc/papersize'.
+
+2018-11-12  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * m4/groff.m4 (GROFF_PAGE): Try /etc/papersize first.
+
+       Fixes <https://savannah.gnu.org/bugs/index.php?53271>.
+
+2018-11-12  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * bootstrap.conf: Bump Autoconf dependency to 2.68.  We need it
+       to support our bug-reporting URL, which contains a "?".
+       Strictly, Autoconf 2.65 is fine, but 2.66 and 2.67 broke this.
+       Even 2.69 is over 6 years old now.
+
+       See <https://savannah.gnu.org/support/?107450>.
+
+2018-11-12  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * m4/groff.m4 (GROFF_PAGE): Quote shell variables that are under
+       external control and may contain embedded whitespace.  A test
+       shows that our configure script is now robust in this way, but
+       our Automake files are not, starting with
+       src/utils/afmtodit/afmtodit.am.
+
+2018-11-12  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * makevarescape.sed:
+         - Escape plain spaces and double-quotes (ASCII 32 and 34) so
+           that bad things don't happen if they are embedded in a Make
+           variable expanded in a man page @THUS@ _and_ given as an
+           argument to a macro that distinguishes its parameters, such
+           as .IR.
+         - Add discretionary breaks after groups of slashes not
+           preceded by a space; e.g., transform "/usr/bin/groff" into
+           "/usr/\:bin/\:groff".  Will also work on URLs
+           {"https://\:example.com/\:page.html"} in case we need that.
+
+2018-11-11  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       Undocument Werner and Ted as groff maintainers.
+
+       * README:
+       * doc/pic.ms:
+       * src/roff/grog/grog.pl:
+       * src/roff/nroff/nroff.sh: Werner (and Ted) retired from the
+       role some time ago and Bertrand Garrigues has stepped up; see
+       https://lists.gnu.org/archive/html/groff/2017-09/msg00048.html.
+       I'll let him document his maintainer status as and where he
+       prefers.
+
+2018-11-11  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       Stop spelling "Unix" as "UNIX".
+
+       Per AT&T Bell Labs veterans Doug McIlroy and Meg McRoberts,
+       spelling "Unix" in full caps was a contrivance insisted upon by
+       AT&T lawyers, and not a practice used in the Unix manuals
+       themselves or the Bell Labs Technical Journal.  See
+         https://lists.gnu.org/archive/html/groff/2015-01/msg00026.html
+       and
+         https://lists.gnu.org/archive/html/groff/2015-01/msg00029.html
+       for support.
+
+       There are instances I did _not_ change; they may require further
+       review.
+               ChangeLog.*
+               NEWS
+                       One reference relevant to mdoc; see below.
+               doc/meintro{,_fr}.me
+                       These documents also give the small caps
+                       treatment to groff, troff, and nroff, suggesting
+                       a separate changeset.
+               src/preproc/pic/pic.ypp
+                       Contains a comment referring to "Compaq Tru64
+                       UNIX"; not worth the candle IMO.
+               tmac/s.tmac:
+                       {ms macro package} Leaving UX macro definition
+                       alone until/unless it can be established that
+                       this doesn't change the rendering of historical
+                       documents in an objectionable way.
+               tmac/doc-syms-u:
+               tmac/doc-old.tmac-u:
+               tmac/doc-common-u:
+               tmac/groff_mdoc.7.man:
+                       {mdoc macro package} Similar; mdoc defines many
+                       strings that spit out "UNIX" (albeit not with a
+                       font size change).
+
+       * MORE.STUFF:
+       * NEWS:
+       * README.MinGW:
+       * contrib/groffer/README:
+       * contrib/pdfmark/pdfmark.ms:
+       * contrib/pdfmark/pdfroff.1.man:
+       * doc/groff.texi:
+       * doc/webpage.ms:
+       * m4/groff.m4:
+       * man/groff_diff.7.man:
+       * man/groff_tmac.5.man:
+       * man/roff.7.man:
+       * src/preproc/html/pre-html.cpp:
+       * src/roff/troff/troff.1.man: Change "UNIX" to "Unix",
+       discarding markup as necessary.
+
+2018-11-10  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       man pages: Escape interpolated Make variables.
+
+       * makevarescape.sed: Transform - to \-, ~ to \(ti, and so forth,
+       {with an extra layer of backslashes--see below} so that Makefile
+       variables containing ASCII characters that do not represent
+       themselves literally in *roff (see groff_char(7)) are correctly
+       interpolated into man page text.
+
+       * Makefile.am (.man): Transform Makefile variables with the
+       above script when interpolating them into man page text.
+
+       Note that while the script, combined with this target, will
+       transform ` to \(ga, including grave accents in Makefile
+       variables is likely to fail when the shell lexes the argument to
+       echo within the old-style command substitution ``.  Testing
+       shows that grave accents should work[1] if POSIX-style command
+       substitution $() is done instead.  However, $() is less
+       portable.  (Triple-escaping grave accents \\\` inside the
+       interpolated Makefile variable will work, but is not attempted
+       at present.)
+
+       Note also that the amount of backslash-escaping in the sed
+       script is excessive (and incorrect) for normal purposes, but
+       required here because a command substitution is being nested
+       inside yet another invocation of sed.
+
+       {1} For this target; no assurances about the good behavior of
+       unusual characters in Makefile variables in other aspects of the
+       groff build are offered.
+
+       Fixes <https://savannah.gnu.org/bugs/index.php?55004>.
+
+2018-11-06  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * src/utils/lookbib/lookbib.cpp: Doesn't make much sense to mark
+       Version_string as a C extern if you're just going to hide it in
+       a throwaway scope again.  Remove braces, exposing it.
+
+       "lookbib -v" now reports a version number, instead of "(null)".
+
+       Fixes <https://savannah.gnu.org/bugs/index.php?54972>.
+
+2018-11-06  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * src/libs/libgroff/error.cpp (do_error_with_file_and_line):
+       If:
+         a program name is known;
+       but
+         no file is being processed or the line number is negative,
+       then there was no space between the program name (with colon),
+       and the succeeding diagnostic message.
+
+       Example: lookbib:fatal error: no databases
+
+       Fixes <https://savannah.gnu.org/bugs/index.php?54971>.
+
+2018-11-05  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       Make strip.sed operate only if given permission.
+
+       * tmac/strip.sed: Do nothing whatsoever to any input file that
+       lacks a line matching "%beginstrip%".  This implements a
+       contract between the macro file writer and the stripper script
+       {roff input is not parseable with crude weaponry like regular
+       expressions}.  In practice, most of the changes performed by the
+       script were already in a block enforcing this.  My changes:
+       - Stop unconditionally inserting a roff comment noting the
+         reader of stripping at line 2.  Instead, replace the line
+         matching "%beginstrip%" with this comment if and only if it
+         is present.
+       - Stop deleting lines containing only the empty request if
+         they occur before "%beginstrip%".
+       - Tweak the wording of the roff comment.
+       - Remove comment within the sed script; see
+         https://lists.gnu.org/archive/html/groff/2017-11/msg00057.html
+         and the sed section of "Limitations of Usual Tools" in the
+         GNU Autoconf Manual.
+
+       Invalidates <https://savannah.gnu.org/bugs/index.php?53784>.
+
+2018-11-04  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * tmac/an-old.tmac: When emitting diagnostics, report the name
+       of the macro file complaining, and the name and line number of
+       the input file at the time of trouble.  Thanks to Bjarni Ingi
+       Gislason for part of the patch.
+
+       Fixes <https://savannah.gnu.org/bugs/?54175> and continues the
+       long process of fixing <https://savannah.gnu.org/bugs/?52463>.
+
+2018-11-04  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * doc/meintro_fr.me: Add encoding hint to top of file so preconv
+       works correctly even if the build environment's encoding is not
+       UTF-8.  Adapted from Bjarni Ingi Gislason's patch.  Also add
+       long-form Emacs coding declaration at end of file.  Vim's
+       auto-detection seems to be fine, so did not update its modeline.
+
+       Fixes <https://savannah.gnu.org/bugs/index.php?54530>.
+
+2018-11-04  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * tmac/groff_man.7.man: Reorganize and largely rewrite to more
+       precisely document the macro package's behavior and to be more
+       helpful and accessible to man page writers who may never read
+       any other groff documentation.
+
+2018-10-25  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       Clarify meaning of \p escape.  Also make more explicit that line
+       adjustment for the .brp request and \p escape depends on the
+       current adjustment mode.
+
+       * doc/groff.texi: Clarify that \p has effect at the next word
+       boundary.  Thanks to Dave <barx> for pointing out the issue and
+       providing elucidating language.
+
+       * man/groff.7.man: Similar, but terser.
+
+       Fixes https://savannah.gnu.org/bugs/index.php?54894.
+
+2018-10-04  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Savannah bug # 54812
+
+       * font/devpdf/util/BuildFoundries.pl: If a font is not found
+       report list of paths searched.
+
+       Fix https://savannah.gnu.org/bugs/?54812
+
+2018-10-10  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Update 'gnulib' submodule.
+
+       * gnulib: now points on dce8759f0f0236a860a3e68b63c5e99cc6f168f9
+       from 'gnulib' repository.  This fixes build error with glibc 2.28
+       (see https://bugzilla.redhat.com/show_bug.cgi?id=1595702).
+
+2018-10-04  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Savannah bug # 54779
+
+       * font/devpdf/Foundry.in: Recent ghostscript changed name
+       used for embedding groff font HNBI
+
+       Fix https://savannah.gnu.org/bugs/?54779
+
+2018-08-27  Ingo Schwarze  <schwarze@openbsd.org>
+
+       * tmac/groff_www.7.man: Do not use .URL, .MTO, .FTP.
+
+2018-08-21  Ingo Schwarze  <schwarze@openbsd.org>
+
+       Improve terminal rendering for a few special characters:
+
+       * tmac/tty.tmac: add \[.j] (dotless j)
+       * tmac/tty-char.tmac: for \[a.], fall back to "."
+       * tmac/tty-char.tmac: add playing card suits
+
+2018-08-16  Ingo Schwarze  <schwarze@openbsd.org>
+
+       * src/preproc/preconv/preconv.1.man: add -D to the SYNOPSIS
+
+2018-08-09  Ingo Schwarze  <schwarze@openbsd.org>
+
+       * Makefile.am: correctly calculate MAJOR_VERSION etc.
+
+2018-06-19  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Fixes to gropdf
+
+       * src/devices/gropdf/gropdf.pl: Make default line width 0.4pt
+       to match grops. Use 'S' operator (stroke) rather than 's' (close
+       and stroke) when Dl command received. Improve switching between
+       text and graphic modes.
+
+2018-07-01 Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       [me] paragraph with umlaut incorrectly rendered
+
+       * tmac/e.tmac-u: workaround done by Werner LEMBERG <wl@gnu.org>.
+
+       Fix https://savannah.gnu.org/bugs/?42191
+
+2018-06-19  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Add gropdf new features to NEWS file.
+
+       * NEWS: new features.
+
+2018-05-29  Werner LEMBERG  <wl@gnu.org>
+
+       [dvi] Fix glyph map for `cmitt10'.
+
+       Problem reported by Pali Rohár <pali.rohar@gmail.com>.
+
+         http://lists.gnu.org/archive/html/groff/2018-05/msg00088.html
+
+       * font/devdvi/texitt.map: New file.  This is identical to
+       `textt.map' except the dollar glyph, which gets replaced by the
+       pound glyph.
+
+       * font/devdvi/generate/Makefile (CWI): Use `texitt.map'.
+
+       * font/devdvi/CWI: Regenerated.
+
+2018-05-07  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       Improve diagnostics on bad hyphenation requests.
+
+       * src/roff/troff/env.cpp: Add new HYPHEN_* symbols to anonymous
+       enum.
+
+       * src/roff/troff/env.cpp (hyphenate_request):
+         - Warn about hyphenation request values that are completely
+           out of range.
+         - Report bad hyphenation request value in diagnostic messages.
+
+2018-04-28  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       grap2graph: Parallelize changes with pic2graph.
+
+       * contrib/grap2graph/grap2graph.sh:
+         - Refactor temp directory handling.
+         - Handle embedded whitespace in temp dir.
+         - Adapt to old convert(1) programs.
+
+       * contrib/grap2graph/grap2graph.1.man: Make editorial/style
+       changes and minor corrections.
+
+2018-04-26  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       eqn2graph: Remove -unsafe option.
+
+       * contrib/eqn2graph/eqn2graph.sh: Unrecognize "-unsafe" option
+       and eliminate $groff_opts variable.  As far as I can tell, this
+       option had no effect because (1) pic is not run on the input
+       stream (no -p argument to groff); (2) eqn doesn't support
+       "shelling out" as pic does; and (3) there is no way to embed
+       *roff requests inside a sequence of eqn commands.  If I'm wrong,
+       let me know.
+
+       * contrib/eqn2graph/eqn2graph.1.man: Undocument "-unsafe"
+       option.
+
+2018-04-26  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       eqn2graph: Parallelize changes with pic2graph.
+
+       * contrib/eqn2graph/eqn2graph.sh:
+         - Refactor temp directory handling.
+         - Handle embedded whitespace in temp dir.
+         - Adapt to old convert(1) programs.
+
+       * contrib/eqn2graph/eqn2graph.1.man: Make editorial/style
+       changes and minor corrections.
+
+2018-04-25  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       pic2graph: Refactor temp directory handling.
+
+       * contrib/pic2graph/pic2graph.sh: Issue a diagnostic and give up
+       if the user's desired temporary directory does not exist.  Also
+       document the Bashism $RANDOM and work around its absence.
+
+2018-04-25  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       pic2graph: Handle embedded whitespace in temp dir.
+
+       * contrib/pic2graph/pic2graph.sh: Quote shell variables having
+       to do with the temporary directory's location; without
+       quotation, temporary directory names with embedded whitespace
+       are wrongly handled.
+
+2018-04-24  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * doc/groff.texi: Bump end of copyright range to 2018.  Werner
+       added substantial text this year about hyphenation.
+
+2018-04-24  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       Set version to 1.22.4 in the few places that hard-code it.
+
+       * arch/mingw/grap2graph.cmd:
+       * contrib/groffer/version.sh:
+       * doc/groff.texi:
+       * doc/webpage.ms: Bump from 1.22.3 to 1.22.4.
+
+2018-04-24  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Restrict scaling factors to 3dp and better handle CR/LF in import.
+
+       * src/devices/gropdf/gropdf.pl: Restrict scaling factors to 3dp
+       rounded. If pdf imported with pdfpic uses CR/LF line termination
+       ibclude XObject Image, length of stream out by 1.
+
+2018-04-23  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       man pages: Shorten version footer.
+
+       * **/*.man: Replace "Groff Version" with "groff" in the fourth
+       argument to .TH in all man pages.  This suffices to keep that
+       part of the footer from overrunning the date, even in dirty
+       trees on 80-column terminals.
+
+       Fixes https://savannah.gnu.org/bugs/index.php?53721.
+
+2018-04-23  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       pic2graph(1): Make editorial/style changes and minor
+       corrections.
+
+2018-04-23  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       pic2graph: Adapt to old convert(1) programs.
+
+       * contrib/pic2graph/pic2graph.sh: Grep convert's -help output
+       for the string "-trim".  If it is not found, the old method for
+       image trimming documented in pic2graph's man page, "-crop 0x0",
+       is used.  I am motivated by the fact that the warning about this
+       in our man page is very old (10 years or more), and I wanted to
+       get rid of it.
+
+       pic2graph emits a warning when performing this fallback, in the
+       event the ImageMagick and/or GraphicsMagick teams surprise the
+       world again.
+
+       * contrib/pic2graph/pic2graph.1.man: Remove BUGS section, the
+       entire contents of which was dedicated to convert's change in
+       behavior.
+
+2018-04-22  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       groff_man(7): Expand command synopsis section.
+
+       This section now explains in detail how to write (and read) a
+       command synopsis.
+
+2018-04-12  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Make PDFPIC behave the same whether -Tps or -Tpdf used.
+
+       Previously the -Tpdf version did not cause a break nor position
+       to the line beneath the imported picture, whilst the -Tps
+       version did.
+
+       * tmac/pdfpic.tmac: Corrected behavior.
+
+       * NEWS: Explain the change of behaviour and how to reinstate
+       the previous behaviour using register PDFPIC_NOSPACE or the
+       environment variable GROFF_PDFPIC_NOSPACE.
+
+2018-03-27  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Define a short version for data installation dir name.
+
+       This is the full version stripped of any characters after the
+       third digit.  Used for installation of font, macro and various
+       data (by default in /usr/local/share/groff).  The various programs
+       and scripts still use the full version from gnulib script
+       'git-version-gen' .
+
+       * configure.ac (SHORT_VERSION): short version definition.
+
+       * Makefile.am: use 'SHORT_VERSION' for 'docdir' and 'datasubdir'
+       definitions.
+
+2018-03-11  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Remove doc/automake_migration_tests.txt
+
+       Automake migration was completed long time ago and this file is no
+       longer needed.
+
+2018-03-11  Colin Watson  <cjwatson@debian.org>
+
+       Switch to Gnulib implementation of snprintf
+
+       This is more actively maintained, straightforward to integrate now
+       that we have Gnulib integration, and simplifies groff's overall
+       licensing.
+
+       * bootstrap.conf (gnulib_modules): Add `snprintf' and `vsnprintf'.
+       * configure.ac: Remove local checks for `snprintf' and `vsnprintf'.
+       * Makefile.am: Remove various comments related to local checks for
+       `snprintf' and `vsnprintf'.
+       * src/include/lib.h: Remove declarations of `snprintf' and
+       `vsnprintf'.
+       * src/libs/libgroff/libgroff.am (EXTRA_DIST): Remove
+       `src/libs/snprintf/snprintf.c'.
+       * src/libs/snprintf/snprintf.c: Remove.
+
+       * LICENSES: Remove section about `src/libs/snprintf/snprintf.c'.
+       * MANIFEST: Remove entry for `src/libs/libxutil'.
+
+2018-03-09  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       PDF must not open in presentation mode.
+
+       * src/devices/gropdf/gropdf.pl: When GROPDF_NOSLIDE=1
+       passed do not set pdf to presentation mode.
+
+2018-03-09  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Allow a "." to signify a missing parameter in .pdftransition
+
+       * src/devices/gropdf/gropdf.1.man: Explain the .pdftransition
+       macro (and underlying '\X' command) accepts a "." to specify
+       a parameter retains its current value.
+
+2018-03-09  Colin Watson  <cjwatson@debian.org>
+
+       man pages: fix incorrect cross-referenced section
+
+       * man/roff.7.man (FILE NAME EXTENSIONS): Correct reference to
+       groff_filenames(5).
+
+2018-03-09  Colin Watson  <cjwatson@debian.org>
+
+       mdate.sh: rewrite in Perl
+
+       groff already requires perl to build.  This version is much shorter
+       and easier to understand than the shell/awk version: we don't have
+       to worry about convincing ls to produce output that we can parse,
+       and we don't have to play games with the way that the same field may
+       contain either the year or the time depending on how old the file
+       is.
+
+       While I'm at it, this version also adds `SOURCE_DATE_EPOCH' support
+       for reproducible builds: when `SOURCE_DATE_EPOCH' is set, files are
+       considered to have been last modified at that time.
+
+       * mdate.sh: Rewrite in Perl, moving to ...
+       * mdate.pl: ... this new file.
+       * Makefile.am (EXTRA_DIST, .man): Update references.
+
+2018-03-09  Colin Watson  <cjwatson@debian.org>
+
+       Remove #! lines from non-executable files
+
+       These are always invoked by the build system (either in-tree or via
+       the installed Makefiles) using the necessary program, so the #!
+       lines were unnecessary.  They were harmless except that they caused
+       Debian's `lintian` tool to complain about installed non-executable
+       scripts.
+
+       * font/devlj4/generate/special.awk: Remove #! line.
+       * font/devps/generate/symbol.sed: Likewise.
+
+2018-03-09  Colin Watson  <cjwatson@debian.org>
+
+       doc: stop generating W3C validation icons
+
+       Debian's `lintian' tool says:
+
+         These badges may be displayed to tell readers that care has been
+         taken to make a page compliant with W3C standards.  Unfortunately,
+         downloading the image from www.w3.org might expose the reader's IP
+         address to potential tracking.
+
+       I think the risk is a small one, but I also don't think the badges
+       are especially valuable, so it doesn't seem like much to ask to just
+       drop them at least for groff's own documentation.
+
+       * doc/doc.am (.ms.html, doc/pic.html): Remove `-P-V' option.
+
+2018-03-01  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Place pdf in presentation mode if new commands used.
+
+       * src/devices/gropdf/gropdf: The new commands which
+       control page transitions should result in the pdf being
+       opened in presentation mode.
+
+2018-03-02  Werner LEMBERG  <wl@gnu.org>
+
+       Hyphenation exceptions in pattern files now obey `.hy' (#53196).
+
+       * src/roff/troff/env.cpp (hyphen_trie::read_patterns_file): Mark
+       `\hyphenation' entries with a trailing space.
+       (hyphen_trie::insert_hyphenation): Updated.
+       (hyphenate): Make `\hyphenation' entries obey `.hy' restrictions.
+
+       * doc/groff.texi (.hy): Updated.
+
+2018-03-01  Werner LEMBERG  <wl@gnu.org>
+
+       Adjust `.hy' values.
+
+       In most cases hyphenation constraints were too strict.  The now
+       selected values reflect the parameters used for the generation of
+       the (TeX) hyphenation patterns.
+
+       * tmac/an-old.tmac, tmac/cs.tmac, tmac/de.tmac, tmac/doc-common-u,
+       tmac/e.tmac-u, tmac/fr.tmac, tmac/s.tmac, tmac/sv.tmac: Fix `.hy',
+       `\n[HY]', and `\n[doc-hyphen-flags]' values.
+
+       * doc/groff.texi, tmac/groff_man.7.man, tmac/groff_ms.7.man, NEWS:
+       Updated.
+
+2018-03-01  Werner LEMBERG  <wl@gnu.org>
+
+       Fix some problems related to hyphenation.
+
+       Introduce values 16 (allow hyphenation before last character) and 32
+       (allow hyphenation after first character) to the `hy' request
+       (#48904).
+
+       Really fix problem reported in issue #48904.
+
+       Fix #53243, which is a regression introduced in 2016-09-09.
+
+       * src/roff/troff/env.cpp (HYPHEN_LAST_CHAR, HYPHEN_FIRST_CHAR): New
+       enumeration values.
+       (hyphenate_request): Check for contradicting values.
+       (environment::hyphenate_line): Fix minimum word length considered
+       for hyphenation.
+       (environment::print_env): Updated.
+       (hyphenate): Fix and extend logic.  The original patch to handle
+       #48904 was bad.
+
+       * doc/groff.texi, man/groff_diff.7.man, NEWS: Updated.
+
+2018-03-01  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Add page transitions to pdfs created with gropdf.
+
+       * src/devices/gropdf.pl: Handle new '\X' commands to support page
+       transitions in presentation mode pdfs. These commands are a subset
+       of the commands used in present.tmac allowing slideshows to be
+       directly produced from -Tpdf without using postscript -> gpresent.pl
+       -> ghostscript.
+
+       * tmac/pdf.tmac: New macros '.pdfpause' and '.pdftransition' to
+       support page transitions.
+
+       * src/devices/gropdf.1.man: Document the '\X' commands supported.
+
+2018-03-01  Werner LEMBERG  <wl@gnu.org>
+
+       Use $(AM_V_GEN) and $(AM_V_P) to silence even more file generation.
+
+       * font/devpdf/devpdf.am (BuildFoundries, DESC, Foundry,
+       build_font_files): Do it.
+
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       Use $(GROFF_V) to silence documentation creation.
+
+       * Makefile.am (GROFF_V): Define.
+
+       * doc/doc.am (.me.txt, .me.ps, .ms.html, .ms.txt, .ms.ps, pic.html,
+       webpage.html): Use $(GROFF_V).
+
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       Use $(AM_V_GEN) to silence file generation.
+
+       * Makefile.am (.man), contrib/eqn2graph/eqn2graph.am (eqn2graph),
+       contrib/grap2graph/grap2graph.am (grap2graph), contrib/pic2graph.am
+       (pic2graph), src/devices/gropdf/gropdf.am (gropdf, pdfmom),
+       src/preproc/eqn/eqn.am (neqn), src/roff/grog/grog.am (grog),
+       src/roff/nroff/nroff.am (nroff), src/utils/afmtodit/afmtodit.am
+       (afmtodit), font/devascii/devascii.am (DEVASCIIFONTSFILES, DESC),
+       font/devcp1047/devcp1047.am (DEVCP1047FONTSFILES, DESC),
+       font/devhtml/devhtml.am (DEVHTMLFONTSFILES, DESC),
+       font/devlatin1/devlatin1.am (DEVLATIN1FONTSFILES, DESC),
+       font/devutf8/devutf8.am (DEVUTF8FONTSFILES, DESC),
+       font/devps/devps.am (DESC, prologue, zapfdr.pfa, symbolsl.pfa),
+       font/devdvi/devdvi.am (DESC), font/devlbp/devlbp.am (DESC),
+       font/devlj4/devlj4.am (DESC): Do it.
+
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * configure.ac: Activate silent Makefile rules.
+
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       Minor compilation warnings.
+
+       * src/devices/xditview/draw.c: Don't declare `MaxFontPosition'.
+
+       * src/roff/troff/input.cpp (psbb_locator::context_args): Avoid
+       shadowing of `buf'.
+
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * src/roff/troff/env.cpp: s/HYPHEN_/HYPHEN_NOT/ for clarification.
+
+2018-02-26  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Update installation doc.
+
+       * INSTALL.REPO: mention that 'pkg-config' is a dependency.
+
+       * INSTALL.extra: add dependency 'makeinfo' and optional
+       dependencies 'pkg-config' and 'uchardet'.
+
+       * TESTS: move to doc/automake_migration_tests.txt
+
+       * INSTALL.gen: remove, this file is redundant with the 'INSTALL'
+       file from gnulib.
+
+2018-02-02  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Update 'gnulib' submodule.
+
+       * gnulib: now points on cf56f8f618c48cfadd2499ced58574633d12f129
+       from 'gnulib' repository.
+
+2018-02-02  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Use gnulib script 'git-version-gen' to define groff's version
+
+       * bootstrap.conf: add 'git-version-gen' script.
+
+       * configure.ac: suppress 'GROFF_VERSION_STRING' and replace it by
+       the script.  If the current commit corresponds to a tag, then the
+       version is simply the tag name.  Otherwise the version has the
+       format: <tag>-<nb_commits_from_latest_tag>-<commit sha1>.  The
+       version is now stored in '.version'.
+
+       * REVISION: removed.
+
+       * VERSION: removed.
+
+       * Makefile.am: define 'MAJOR_VERSION', 'MINOR_VERSION' and
+       'REVISION'.
+
+       * src/libs/libgroff/libgroff.am: use 'MAJOR_VERSION',
+       'MINOR_VERSION' and 'REVISION', add dependency on '.version'.
+
+       * src/roff/troff/troff.am: ditto.
+
+       * contrib/mom/om.tmac-u (short_revision): new string that extracts
+       the first digit of the revision, to be used when checking groff
+       version.
+
+2018-01-18  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       On reflection using an array for Filter is not optimal.
+
+       * src/devices/gropdf.pl: revert single line from commit
+       18fd1fd0bf05eb9a5ba0d2be1a655a044662a8bf.
+
+2018-01-17  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       All values should be 3 decimals
+
+       * src/devices/gropdf.pl: for values approaching zero values
+       in the for 0.nnnnnnE-nn could be written, not valid syntax for
+       PDF. Make all values rounded to 3 decimals, becomes 0.000.
+
+       Also changed stream Filter dictionary entry to an array.
+
+2018-01-14  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Fix tarball generation ('make distcheck'  failed)
+
+       * src/devices/xditview/xditview.am: add .h created by commit
+       382ab4af269a1dea422c8f9bb5c67a065d026deb to EXTRA_DIST
+
+       * contrib/mm/mm.am: restore distribution of files removed by
+       commit 445bf58765b759546e238a235651eb0bf5b34325.
+
+2018-01-13  Ingo Schwarze <schwarze@openbsd.org>
+
+       Makefile.am: Re-add -F and -M flags needed to build out of src.
+
+2018-01-13  Ingo Schwarze <schwarze@openbsd.org>
+
+       [mdoc]: rewrite the implementation of the .Lk macro
+
+       * tmac/doc.tmac-u (Lk): Rewrite.
+
+       The old implementation was written before the big mdoc
+       rewrite for groff-1.17.  In contrast to most other macros,
+       it was never updated to use the new techniques.
+       This new implementation makes .Lk callable, makes trailing
+       punctuation work in the normal way, and makes the style of
+       the implementation consistent with other macros.
+
+       It also removes the feature of automatically switching
+       between in-line and displayed rendering depending on the
+       length of the link because that was inconsistent across
+       output modes and counter-intuitive, resulting in ugly
+       output for many existing real-world manual pages.
+       It now always renders in-line.  Use .D1 Lk where desired.
+
+       Merging http://savannah.gnu.org/bugs/?52849
+       OK wl@gnu, jmc@openbsd, bentley@openbsd
+
+2017-12-14  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       man pages: Comment compatibility-mode switching.
+
+       The '.do' and '.cp' requests (both groffisms) are some of the
+       more obscure features of groff's own man page corpus.
+       Consequently, they get cargo-culted around, within and outside
+       groff.  Thanks to Werner Lemberg for the discussion, which
+       revealed (to me) that groff ships with compatibility mode on by
+       default on Solaris 10 and 11.
+
+       Fix bug https://savannah.gnu.org/bugs/?52444.
+
+2017-11-30  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * src/roff/troff/input.cpp:
+       Make writers to stderr identify themselves.
+
+       * font/devpdf/util/BuildFoundries.pl:
+       Same; also refactor all diagnostics into Notice(), Warn(), and
+       Die() functions, which delegate their common message-printing to
+       Msg().
+
+       Fix part of bug https://savannah.gnu.org/bugs/?52463.
+
+2017-11-21  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       man pages: Fix compatibility-mode problems.
+
+       * contrib/gperl/gperl.1.man: Use idiomatic .BI macro instead of
+         leading an input line with a font escape followed by a dot,
+         the interpretation of which differs based on compatibility
+         mode.
+
+       * src/preproc/soelim/soelim.1.man: Make .mso request only after
+         compatibility mode is turned off.
+
+2017-11-19  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * Makefile.am: Protect arguments to "tr" from globbing.
+
+       Prevents errors from tr during man page generation and possible
+       incorrect program prefixing in those pages if, for example, some
+       doofus has directories called "A", "B", ...  hanging around in
+       the build tree.
+
+2017-11-18  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * tmac/groff_mdoc.7.man: Use unstripped symbol names.
+
+       Fix bug https://savannah.gnu.org/bugs/?52442.
+
+2017-11-18  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * src/include/.gitignore: Ignore config.hin~ files.
+
+2017-11-18  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       test-groff.in: Enable backtraces and all warnings by default.
+
+       Fix bug https://savannah.gnu.org/bugs/?51482.
+
+2017-11-18  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * tmac/**: Migrate macro package diagnostics away from `quotes'.
+
+2017-11-15  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * src/libs/libgroff/new.cpp: Quieten compiler warning.
+
+       Define sized version of overloaded delete operator.  Duplicate
+       code from unsized delete operator because simply calling through
+       to it provokes another warning, -Wdelete-incomplete.
+
+       Fix rest of https://savannah.gnu.org/bugs/?52335.
+
+2017-11-12  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Better handle glyphs in font positions > 255
+
+       * src/devices/gropdf/gropdf.pl: Improve handling
+       when glyphs above 255 are used.
+
+2017-11-12  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       gropdf should load ALL 'download' files
+
+       * src/devices/gropdf/gropdf.pl: only the first 'download' file
+       found was loaded, it should load all found.
+
+2017-11-12  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * src/libs/libxutil/DviChar.c: Initialize "buckets" field of
+       structs.
+
+       Resolves missing-field-initializers warnings.
+
+2017-11-12  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * tmac/strip.sed: Stop rewriting symbol names.  A substitution
+       originally intended to strip the "doc-" prefix off of mdoc macro
+       and string names unintentionally caught some mom stuff.
+       Harmlessly in this instance, but with potentially surprising
+       future effects.  Remove (only) this substitution per discussion
+       in
+       https://lists.gnu.org/archive/html/groff/2017-11/msg00055.html
+       et sequentia.
+
+2017-11-11  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       * src/devices/grolbp/lbp.cpp (lbp_printer::setfillmode): Address
+         misleading indentation warning.
+
+       * src/roff/troff/mtsm.cpp (mtsm::push_state, mtsm::pop_state):
+         Same.  Only flush standard error if we just wrote to it,
+         instead of unconditionally.
+
+       Fix bug https://savannah.gnu.org/bugs/?51483.
+
+2017-11-11  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * src/utils/xtotroff/xtotroff.c: Mark private function static.
+
+2017-11-11  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * src/libs/libxutil/xmalloc.c: Quieten gcc warning.  Mollify
+       -Wmissing-prototypes for xmalloc() in single-function file.
+
+2017-11-11  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       gxditview: Migrate extern declarations to headers.
+
+       Also mark some private functions as static.
+
+2017-11-11  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       src: Declare function protypes where necessary.
+
+       Fix bug https://savannah.gnu.org/bugs/?51513.
+
+2017-11-10  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       mom: Abort early with diagnostic in compatibility mode.
+
+       Fix bug https://savannah.gnu.org/bugs/?52333.
+
+2017-11-10  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * contrib/**: Migrate diagnostics away from `quotes'.
+
+2017-11-09  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * src/**: Migrate diagnostics away from `these quotes'.
+
+       Fix bug https://savannah.gnu.org/bugs/?52374.
+
+2017-11-07  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * tmac/strip.sed: Remove nilpotent capture from address.
+
+2017-11-05  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       `preconv': fix usage of lib `uchardet'.
+
+       * src/preproc/preconv/preconv.cpp (detect_file_encoding): Fix
+       usage of uchardet 0.0.1, which may fail but return an empty string
+       instead of a null pointer, and fix some incorrect error
+       managements that might cause memory leaks.
+
+2017-11-05  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * font/devpdf/devpdf.am: Silence warning from grep during clean.
+
+2017-11-04  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * Makefile.am: Drop unnecessary -F and -M flags from pdfmom
+       call.
+
+2017-11-02  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       man/groff_diff.7.man: Correct the explanation of the request
+       ".itc"--it was backwards.
+
+       Fix bug https://savannah.gnu.org/bugs/?51502.
+
+2017-11-02  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       test-groff.in: Recognize additional contrib tmacs.
+
+       Fix bug https://savannah.gnu.org/bugs/?51598.
+
+2017-11-02  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * Makefile.am: Force build to generate test-groff script.
+
+2017-11-02  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * font/devpdf/devpdf.am: Silence warning from grep during build.
+
+2017-11-02  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * doc/doc.am: Fix build of pic.html from clean tree.
+
+2017-11-02  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * m4/groff.m4: Kill whitespace in macro diagnostic.
+
+2017-11-01  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       src/roff/grog/subs.pl: Fix typo in usage message.
+
+       Fix bug https://savannah.gnu.org/bugs/?51540.
+
+2017-10-28  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       m.tmac: Fix some formatting and textual issues.
+       * Protect full stops in strings \*[Letns!{1,2,10,11}].
+       * Remove extraneous whitespace from string \*[Pg_type!1].
+
+       Fix bug https://savannah.gnu.org/bugs/?51610.
+
+2017-10-22  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       refer-mm.tmac: Protect full stop in abbreviation of "ed.".
+
+       Fix bug https://savannah.gnu.org/bugs/?51611.
+
+2017-10-22  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * src/preproc/html/pre-html.cpp: Fix grammar in usage message.
+       When used attributively, e.g. as an adjectival phrase,
+       "command-line" should be hyphenated.
+
+2017-10-22  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       pdfpic: Suppress warning if in compatibility mode.
+
+       Fix bug https://savannah.gnu.org/bugs/?51945.
+
+2017-10-22  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       www.tmac: Rename font 'C' to 'CR'; define 'CR'.
+
+       The font name 'C' ('CW') is not a part of groff's fonts.
+
+       Fix bug https://savannah.gnu.org/bugs/?51417.
+       Also see https://savannah.gnu.org/bugs/?51426.
+
+2017-10-04  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Fix build on MacOS X
+
+       See https://savannah.gnu.org/bugs/?49651
+
+2017-09-11  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Build from git: Make `configure' fail if `yacc' is not found.
+
+       * m4/groff.m4 (GROFF_PROG_YACC): look for (in this order) `byacc',
+       `bison -y', `yacc'.  Set `YACC' to `missing' is nothing is found
+       and generate an error.  Don't generate an error if build is not
+       done from git as tarball already distribute files generated by
+       `yacc'.
+
+2017-09-02  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Update `gnulib' submodule with latest version.
+
+       * gnulib: now points on 07a187be7f66d3ced66587405f18205971c762e9
+       from `gnulib' repository.
+
+2017-09-02  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Fix .gitignore files for in-source build.
+
+       Fix bug https://savannah.gnu.org/bugs/?51415.
+
+2017-09-01  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Fix build on MacOS X
+
+       * Makefile.am: define `SED' command with LANG and LC_ALL set to C.
+       * contrib/mm/mm.am: use it.
+       * doc/doc.am: Ditto.
+
+       Fix bug https://savannah.gnu.org/bugs/?49649
+
+2017-08-30  Colin Watson <cjwatson@debian.org>
+
+       `BuildFoundries' should not be installed.
+
+       * font/devpdf/devpdf.am: remove installation of generated script
+       `BuildFoundries'.
+
+2017-08-30  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       pic2graph.1.man: Fix wrong macro for e-mail addresses.
+
+       Fix bug https://savannah.gnu.org/bugs/?51110.
+
+2017-08-30  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       groff_diff(7): Remove a repeated word.
+
+       Fix bug https://savannah.gnu.org/bugs/?51077.
+
+2017-08-30  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       groff_tmac(5): Fix double dot before request.
+
+       Fix bug https://savannah.gnu.org/bugs/?51070.
+
+2017-08-28  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       groff.texi: remove repeated words.
+
+       Fix bug https://savannah.gnu.org/bugs/?51046.
+
+2017-08-28  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       groff_man(7) manual page: Fix explanation of the ".itc" request.
+
+       See bug at https://savannah.gnu.org/bugs/?51043.
+
+2017-08-28  Ingo Schwarze  <schwarze@usta.de>
+
+       groff_man(7) manual page: recommendations for escape sequences.
+
+       See bug at https://savannah.gnu.org/bugs/?51021.
+
+2017-08-28  Ingo Schwarze  <schwarze@usta.de>
+
+       groff_char(7) manual: fix table "7-bit Character Codes"
+
+       See bug at https://savannah.gnu.org/bugs/?51020.
+
+2017-08-28  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Fix troff.1 misleading definition of -w all.
+
+       See bug at https://savannah.gnu.org/bugs/?47784.  Suggested by Kaz
+       Kylheku <kaz@kylheku.com>.
+
+2017-08-25  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       `preconv --version' crashes.
+
+       See bug at: https://savannah.gnu.org/bugs/?51587.
+
+       * src/preproc/preconv/preconv.cpp: Add a missing comma in the
+       argument list of "printf".
+
+2017-08-25  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       Fix bug: `.itc' request breaks subsequent `.it' requests.
+
+       See bug at: https://savannah.gnu.org/bugs/?51376.  Using `.itc'
+       lets all later uses of `.it' behave like `.itc', that is,
+       interrupted text line ending with \c is not counted as a separate
+       line.
+
+       * env.cpp: Restore input_trap state to normal when '.it' is
+       called.
+
+2017-08-25  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       Fix a part of a virtual (pseudo) structure in "tty.tmac".
+
+       * tmac/tty.tmac: Fix warning:  ".../git/groff/tmac/tty.tmac:19:
+       warning: unbalanced .el request"
+
+2017-08-25  Ingo Schwarze  <schwarze@usta.de>
+
+       `tty-char.tmac': focus on meaning rather than graphical shape
+
+       * tmac/tty-char.tmac: add ASCII renderings for six missing
+       mathematical symbols
+
+2017-08-22  Ingo Schwarze  <schwarze@usta.de>
+
+       `tty-char.tmac': focus on meaning rather than graphical shape
+
+       * tmac/tty-char.tmac: Switch the policy from trying to imitate the
+       characters' graphical shapes, which resulted in unintelligible
+       renderings in many cases, to transliterations conveying the
+       characters' meanings.  One benefit is making these characters
+       usable for portable manual pages.
+
+2017-08-21  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       'gropdf' does not correctly load new ghostscript fonts
+
+       See bug at: https://savannah.gnu.org/bugs/?50989. Since ghostscript
+       9.21 the fonts supplied have changed from .pfb to .pfa type (with a
+       raw binary section). These failed to be properly loaded.
+
+       * src/devices/gropdf/gropdf: Changes to handle raw binary section in
+       a .pfa type font.
+
+2017-08-18  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       `pdfmom' man page incorrectly displayed.
+
+       * src/devices/gropdf/pdfmom.1.man: Remove `]' character mistakenly
+       added at the beginning of the file.
+
+2017-08-18  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Incorrect font name for CBI in Foundry.in.
+
+2017-08-15  Ingo Schwarze  <schwarze@usta.de>
+
+       Fix build if `configure' check for `fprintf-posix' fails.
+
+       See bug at: https://savannah.gnu.org/bugs/?51554.  If tests for
+       posix compliance of fprintf from `gnulib_m4/fprintf-posix.m4'
+       fail, a replacement function of `fprintf' is used.  Consequently,
+       all executables that use this function must link against the
+       gnulib (`libgnu.a').  The bug was introduced by commit
+       fa41eeba06987a12bc0434f8b51896d4618a3997.
+
+       * src/devices/xditview/xditview.am
+       * src/preproc/eqn/eqn.am
+       * src/preproc/pic/pic.am
+       * src/preproc/preconv/preconv.am
+       * src/preproc/refer/refer.am
+       * src/preproc/soelim/soelim.am
+       * src/preproc/tbl/tbl.am
+       * src/utils/addftinfo/addftinfo.am
+       * src/utils/hpftodit/hpftodit.am
+       * src/utils/indxbib/indxbib.am
+       * src/utils/lkbib/lkbib.am
+       * src/utils/lookbib/lookbib.am
+       * src/utils/pfbtops/pfbtops.am
+       * src/utils/tfmtodit/tfmtodit.am
+       * src/utils/xtotroff/xtotroff.am: link against libgnu.a
+
+       * INSTALL.REPO: recommend the autoconf and automake versions used
+       during automake migration rather than the minimum versions.
+
+2017-08-04  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       See bug at: https://savannah.gnu.org/bugs/?51568
+
+       * src/devices/gropdf/gropdf: Further 'fix' to handle those octal
+       characters. See comment #5 - thank you Bjarni.
+
+2017-07-31  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       See bug at: https://savannah.gnu.org/bugs/?51568
+       
+       * src/devices/gropdf/gropdf: previous 'fix' was too narrow, all
+       '\' characters should be escaped. Also there was an unwanted 
+       interaction with code in routine 'do_t'. Sometimes, do_C, when 
+       the named glyph is mapped to a chr < 32, this is encoded as octal
+       \nnn, so in this case the '\' must not be escaped.
+       
+2017-07-25  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       If input text contained string which could be interpreted as
+       escaped octal (\ddd) a pdf viewer would interpret as an octal
+       character.  See bug at: https://savannah.gnu.org/bugs/?51568
+       
+       * src/devices/gropdf/gropdf: protect text which resembles \ddd
+       by escaping with extra '\'.
+       
+2017-07-12  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Use uchardet library in `preconv' to detect input file encoding
+
+       * m4/groff.m4 (GROFF_UCHARDET): new macro that use pkg-config to
+       check if uchardet library is available and define new option
+       `--with-uchardet':
+       - If `yes' is passed and uchardet is not found, configure fails.
+       - If `no' is passed we don't use uchardet and don't display any
+       warning.
+       - If `auto' (or any other option) is passed of if --with-uchardet
+       is not passed, we use uchardet if available, otherwise the build
+       goes on but a warning is displayed at the end of the configuration
+       phase.
+
+       * configure.ac: use pkg-config and `GROFF_UCHARDET' to detect the
+       presence of uchardet library.
+
+       * src/preproc/preconv/preconv.am: link against uchardet library if
+       available.
+
+       * src/preproc/preconv/preconv.cpp (detect_file_encoding): new
+       function that uses uchardet library to detect input file encoding.
+       (do_file): `detect_file_encoding'.
+
+       * src/preproc/preconv/preconv.1.man: update `preconv'
+       documentation.
+
+       See https://savannah.gnu.org/bugs/?51330
+
+2017-07-12  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Add gnulib module fprintf-posix
+
+       * bootstrap.conf: do it.
+
+       * Fix compilation in some files that needed inclusion of
+       `config.h'.
+
+       See https://savannah.gnu.org/bugs/?51330
+
+2017-05-09  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Package `ghostscript' 9.21 renamed some fonts installed in
+       `/usr/share/ghostscript/9.21/Resource/Font', e.g. URWGothicL-Demi
+       renamed to URWGothic-Demi, and droped the installation of URW
+       fonts in `/usr/share/fonts/type1/gsfonts/', breaking font
+       generation in `font/devpdf/util/BuildFoundries.pl'.
+
+       * m4/groff.m4 (GROFF_URW_FONTS_PATH): New option
+       `--with-urw-fonts-dir' to pass a custom path to URW fonts.
+       (GROFF_URW_FONTS): search the presence of URW fonts by checking if
+       file `a010013l.pfb' exists in the paths given by `gs -h', in the
+       default paths used in `Foundry.in' and in the path given with
+       option `--with-urw-fonts-dir'.
+       (GROFF_URW_FONTS_CHECK): print a warning at the end of the
+       configuration phase if no URW fonts were found.
+
+       * configure.ac: call new macros `GROFF_URW_FONTS_PATH',
+       `GROFF_URW_FONTS' and `GROFF_URW_FONTS_CHECK'.
+
+       * font/devpdf/Foundry.in: add new basic fonts names and pass
+       custom URW fonts path `urwfontsdir'.
+
+       * font/devpdf/devpdf.am: subsitute `urwfontsdir' in `Foundry'
+       generation.
+
+       Fixes https://savannah.gnu.org/bugs/?50786
+
+2017-05-04  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Fixes for gropdf
+       
+       * src/devices/gropdf/gropdf.pl: Escape '(' and ')' if
+       used in a bookmark, and ignore relative move 'h' if 
+       followed by absolute move 'H' in groff intermediate output.
+       
+2017-04-29  Ingo Schwarze  <schwarze@usta.de>
+
+       groff_char(7): improve description of ASCII characters
+
+       * man/groff_char.7.man: improve description of ASCII
+       characters that do not render as themselves
+
+       See https://savannah.gnu.org/bugs/?50898
+
+2017-04-28  Osamu Sayama
+
+       lkbib with empty file dumps core
+
+       * src/libs/libbib/index.cpp: Test if argument to malloc(3)
+       is zero.
+
+       See https://savannah.gnu.org/bugs/?48433
+
+2017-04-28  David Gilman
+
+       Typo in groff.texi
+
+       * doc/groff.texi: Dp instead of DP used
+
+       https://savannah.gnu.org/bugs/index.php?42251
+
+2017-04-28  Rich Burridge
+
+       "grops -c a" dumps core
+
+       * src/devices/grops/ps.cpp: conversion specifier %s changed
+       to %1 (errprint() uses special syntax different from
+       printf(3))
+
+       https://savannah.gnu.org/bugs/?42190
+
+2017-04-28  Bjarni Ingi Gislason  <bjarniig@rhi.hi.is>
+
+       Macro "itc" is needed to make escape "\c" useful
+
+       * tmac/an-old.tmac: .it changed to .itc
+
+       https://savannah.gnu.org/bugs/?42907
+
+2017-04-28  Bjarni Ingi Gislason  <bjarniig@rhi.hi.is>
+
+       First italic correction (\,) is absent in macros IR and IB
+
+       * tmac/an-old.tmac: Italic correction added
+
+       https://savannah.gnu.org/bugs/?42906
+
+2017-04-13  Ingo Schwarze  <schwarze@usta.de>
+
+       * tmac/doc.tmac-u: Make .Lk with more than two arguments
+       mdoc(7) conform
+
+       Use the second and following arguments as the link text.
+
+       Do not mark up the following colon with \fI.
+
+       Handle any number of trailing delimiters.
+
+       Problem reported by Anthony Bentley <bentley@openbsd.org>,
+       fixed by Ingo Schwarze <schwarze@usta.de>.
+
+       https://savannah.gnu.org/bugs/?50789
+
+2017-04-12  Werner LEMBERG  <wl@gnu.org>
+
+       Update German hyphenation patterns.
+
+       * tmac/de.tmac: Add more hcode values.
+       No longer use `hyphenex.det'.
+       * tmac/hyphen.den, tmac/hyphen.det: Updated to `dehyph-exptl-0.41'.
+       * tmac/hyphenex.det: Removed, no longer needed.
+       * tmac/tmac.am (TMACNORMALFILES): Updated.
+
+2017-04-10  Ingo Schwarze  <schwarze@usta.de>
+
+       * tmac/doc.tmac-u: Punctuation handling of .Lk fixed
+
+       The implementation of the groff_mdoc(7) .Lk (hyperlink) macro
+       contains code to make sure that the second argument is not
+       punctuation before treating it as a link text, but the test
+       can never lead to the result "punctuation" because the
+       initialization of the global variable doc-width was missing
+       before the call to doc-get-arg-type.  Consequently, even "."
+       was not recognized as punctuation.
+
+       Problem reported by Anthony Bentley <bentley@openbsd.org>,
+       fixed by Ingo Schwarze <schwarze@usta.de>.
+
+       https://savannah.gnu.org/bugs/?50771
+
+2017-04-07  Werner LEMBERG  <wl@gnu.org>
+
+       * tmac/hyphenex.us: Updated to current release from TeXLive.
+
+2017-02-23  Bertrand Garrigues  <bertrand.garrigues@laposte.net>
+
+       * bootstrap: update with latest version from gnulib.
+       * gnulib: update the git submodule with latest version (commit
+       4084b3a1094372b960ce4a97634e08f4538c8bdd from gnulib).
+
+2017-02-18  Colin Watson  <cjwatson@debian.org>
+
+       * src/preproc/eqn/main.cpp: Define EQ and EN if they are not already
+       defined, to appease "groff -wmac".
+       * src/preproc/pic/main.cpp: Likewise for PS and PE.
+
+       Fixes: http://bugs.debian.org/495713
+
+2017-02-16  Ingo Schwarze  <schwarze@usta.de>
+
+       mdoc %T: use typographic quotes
+
+       * tmac/doc.tmac-u: Changed \*[q] to \*[Lq] and \*[Rq]
+
+       Citing Anthony J. Bentley:
+
+       The below patch causes -mdoc to generate typographic quotes
+       around a %T (reference title) instead of straight quotes.
+
+       I also submitted similar diffs to mandoc and heirloom troff
+       (which haven't been committed yet).  It would be nice for
+       the major implementations not to differ here, and the change
+       is trivial. 
+
+       It's worth noting that groff's refer(1) already uses typographic
+       quotes around %T with my -ms documents.
+
+       https://savannah.gnu.org/bugs/?43553
+       http://comments.gmane.org/gmane.comp.tools.mdocml.devel/723 
+       https://github.com/n-t-roff/heirloom-doctools/pull/6
+
+2017-02-16  Ingo Schwarze  <schwarze@usta.de>
+
+       mdoc \*[Lq], \*[Rq]: map to \[lq], \[rq] for all terminal
+       devices
+
+       * tmac/doc-nroff-u: .ds Lq \[lq], .ds Rq \[rq]
+
+       If you use \[lq] and \[rq] directly in your document, the
+       quotes already render nicely for all terminal devices:
+       as U+201C and U+201D for devutf8 and as ASCII 0x22 (") for
+       devascii and devlatin1.
+       So it is not quite clear why doc-nroff should avoid
+       \[lq] and \[rq] when resolving \[Lq] and \[Rq] for devascii
+       and devlatin1. Quite to the contrary, many people seem to
+       consider "``" and "''" ugly renderings because they look
+       unbalanced.
+
+       See
+
+       https://savannah.gnu.org/bugs/?43554
+
+2017-02-16  Bjarni Ingi Gislason  <bjarniig@rhi.hi.is>
+
+       Use the traditional (portable) method of using a backslash
+       after '\{'
+
+       * contrib/mm/m.tmac, tmac/e.tmac-u,
+         tmac/s.tmac: Add '\' after "\{"
+
+       See
+
+       https://savannah.gnu.org/bugs/?49917
+
+2017-02-16  Bjarni Ingi Gislason  <bjarniig@rhi.hi.is>
+
+       Use explicit \s±n after a variable string instead of \s0
+
+       * tmac/e.tmac-u: Change \s0 to \s+3
+
+       See
+
+       https://savannah.gnu.org/bugs/?49915
+
+2016-12-29  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Remove duplicate '-e' from gropdf manual.
+       
+       * src/devices/gropdf/gropdf.1.man: Remove first '-e'.
+       
+2016-11-25  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Remove incorrect info from gropdf manual.
+       
+       * src/devices/gropdf/gropdf.1.man: Remove references
+       to postscript.
+       
+2016-11-22  George HELFFRICH  <ghfbsd@gmail.com>
+
+       [me]: Fix alignment of `(c' macro (#43306).
+
+       * tmac/e.tmac-u ((c): Properly initialize environment.
+
+2016-11-20  George HELFFRICH  <ghfbsd@gmail.com>
+
+       [me] Fix vertical spacing of `(b' macro (#42217).
+
+       * tmac/e.tmac-u (@k): Apply pre-spacing conditionally.
+       ()b): Updated.
+
+2016-11-19  George HELFFRICH  <ghfbsd@gmail.com>
+
+       [me] Fix remaining bugs with line numbering (#49650).
+
+       * tmac/e.tmac-u (nm): Redefine.
+       (.n1, .n2): Update so all environments affected.
+       (.ip): Fix double numbering.
+       (.)c, .)l): Restore numbering after diversion included.
+
+2016-11-01  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       gropdf remaps characters to position 13 (#48986).
+       
+       * src/devices/gropdf/gropdf: Do not remap anything to chr(13).
+
+2016-11-01  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       pdfmom was not including $preconv in the initial groff run.
+       
+       * src/devices/gropdf/pdfmom.pl: Include $preconv in first 
+       groff run which resolves forward pdf references.
+
+2016-10-05  Ingo Schwarze  <schwarze@usta.de>
+
+       * tmac/doc.tmac-u: Simplify behaviour of .Bl -tag
+       * tmac/groff_mdoc.7.man: Update documentation to the new
+       behaviour of .Bl -tag
+
+       If an mdoc(7) .Bl -tag macro lacks the -width argument, the
+       body indentation is calculated separately for each child .It
+       macro.  Neither the Heirloom nor the mandoc(1) implementation
+       of the mdoc(7) language show such behaviour; both use a
+       constant default width for the whole list in that case.
+
+       Apart from doubts whether lists with variable indentation are
+       typographically sound in the first place, support for variable
+       widths in groff is so restricted that it's practically
+       useless.  For each .It, the width will be the default width of
+       whatever happens to be the leading macro after the .It, or of
+       .No if .It is not followed by a macro.
+
+       See
+
+       https://savannah.gnu.org/bugs/index.php?49272
+
+       and
+
+       http://lists.gnu.org/archive/html/groff/2016-10/msg00006.html
+
+
+2016-09-09  Werner LEMBERG  <wl@gnu.org>
+
+       * tmac/sv.tmac: Fix `.hy' settings (#48904).
+
+       The Swedish patterns allow hyphenation after the first character and
+       before the last two characters, not vice versa.
+
+2016-09-09  Werner LEMBERG  <wl@gnu.org>
+
+       troff: Fix hyphenation (#48904).
+
+       This commit fixes two bugs present from the very beginning: troff
+       (a) didn't allow to hyphenate words shorter than 4 characters
+       (ignoring `.hy' settings), and (b) never tried to hyphenate after
+       the first character due to wrong handling of the `.hy' settings.
+
+       * src/roff/troff/env.cpp (environment::hyphenate_line): Use
+       hyphenation flags to determine the minimum word length considered
+       for hyphenation.
+       (hyphenate): Fix handling of `HYPHEN_FIRST_CHARS'.
+
+2016-07-29  Colin Watson  <cjwatson@debian.org>
+
+       Implement `SOURCE_DATE_EPOCH' for reproducible builds.
+
+       * src/include/curtime.h: New file.
+       * src/libs/libgroff/curtime.cpp: New file.
+       * src/libs/libgroff/libgroff.am (libgroff_a_SOURCES): Add
+       src/libs/libgroff/curtime.cpp.
+
+       * src/roff/troff/input.cpp (init_registers): Use `current_time'
+       instead of `time(0)'.
+       * src/devices/grohtml/post-html.cpp
+       (html_printer::do_file_components): Likewise.
+       (html_printer::~html_printer): Likewise.
+       * src/devices/grops/ps.cpp (ps_printer::~ps_printer): Likewise.
+       * src/devices/gropdf/gropdf.pl: Use `$ENV{SOURCE_DATE_EPOCH}` if
+       available in preference to `time`.
+
+       * doc/groff.texi (Environment): Document `SOURCE_DATE_EPOCH'.
+       * src/devices/grohtml/grohtml.1.man (ENVIRONMENT): Likewise.
+       * src/devices/gropdf/gropdf.1.man (ENVIRONMENT): Likewise.
+       * src/devices/grops/grops.1.man (ENVIRONMENT): Likewise.
+
+2016-04-19  Carsten Kunze  <carsten.kunze@arcor.de>
+
+       eqn: Fix problem with explicite spacing before unary operator
+
+       * src/preproc/eqn/list.cpp (list_box::compute_metrics): Change
+       item spacing type from BINARY to ORDINARY also when previous
+       type is SUPPRESS_TYPE.
+
+       As reported in
+
+       http://lists.gnu.org/archive/html/groff/2016-04/msg00024.html
+
+       by Douglas McIlroy <doug@cs.dartmouth.edu>
+
+       an implicite space is added between an unary operator and it's
+       operand when an explicite space is put before the unary
+       operator.  Unary operators are initially set up as binary.
+       Depending on the preceding element their type can be changed
+       to unary.  This did not happen when an explicite space ('~' or
+       '^') had been before that operator.
+
+2016-02-16  Bálint Réczey  <balint@balintreczey.hu>
+
+       Fix many malloc/new vs. free/delete/delete[] mismatches (#47164)
+
+       * src/devices/grops/ps.cpp (ps_font::~ps_font,
+       ps_printer::define_encoding): Use `free'.
+       * src/devices/grops/psrm.cpp (resource::~resource,
+       resource_manager::output_prolog, resource_manager::supply_resource,
+       resource_manager::read_download_file): Ditto.
+
+       * src/include/ptable.h (PTABLE::~PTABLE, PTABLE::define): Ditto.
+
+       * src/libs/libgroff/searchpath.cpp
+       (search_path::open_file_cautious): Ditto.
+
+       * src/libs/libgroff/string.cpp: Include `stdlib.h'.
+       (string::extract): Use `malloc'.
+
+       * src/preproc/eqn/box.cpp (quoted_text_box::~quoted_text_box): Use
+       `free'.
+
+       * src/preproc/eqn/lex.cpp (definition::~definition,
+       macro_input::~macro_input, top_input::~top_input, do_definition):
+       Ditto.
+
+       * src/preproc/eqn/main.cpp (main): Ditto.
+
+       * src/preproc/eqn/other.cpp: Include `stdlib.h'.
+       (size_box::~size_box, font_box::~font_box): Use `free'.
+
+       * src/preproc/eqn/text.cpp: Include `stdlib.h'.
+       (box::set_spacing_type, special_char_box::~special_char_box,
+       split_text): Use `free'.
+
+       * src/preproc/grn/main.cpp (conv): Use `free'.
+
+       * src/preproc/html/pre-html.cpp (get_resolution): Ditto.
+
+       * src/preproc/pic/lex.cpp (macro_input::~macro_input,
+       argument_macro_input::~argument_macro_input, for_input::~for_input):
+       Ditto.
+
+       * src/preproc/pic/main.cpp (do_picture): Ditto.
+
+       * src/preproc/pic/object.cpp: Include `stdlib.h'.
+       (text_piece::~text_piece, string_list::~string_list): Use `free'.
+
+       * src/preproc/pic/pic.ypp (placeless_element, element, text, label,
+       expr_not_lower_than): Ditto.
+
+       * src/preproc/pic/troff.cpp (troff_output::reset_color): Ditto.
+
+       * src/preproc/preconv/preconv.cpp (check_coding_tag): Ditto.
+
+       * src/preproc/soelim/soelim.cpp (do_file): Ditto.
+
+       * src/preproc/tbl/table.cpp (text_entry::~text_entry): Ditto.
+
+       * src/roff/groff/groff.cpp (possible_command::~possible_command,
+       possible_command::set_name): Ditto.
+
+       * src/roff/troff/env.cpp (hyphen_trie::read_patterns_file): Ditto.
+
+       * src/roff/troff/node.cpp (suppress_node::tprint): Ditto.
+
+2016-02-16  Bálint Réczey  <balint@balintreczey.hu>
+
+       Use `malloc' in `strsave'; use `free' for returned pointers (#47164).
+
+       * src/libs/libgroff/font.cpp (text_file::~text_file): Use `free'.
+
+       * src/libs/libgroff/searchpath.cpp (search_path::open_file): Use
+       `free'.
+
+       * src/libs/libgroff/strsave.cpp: Include `stdlib.h'.
+       (strsave): Use `malloc'.
+
+2016-02-16  Bálint Réczey  <balint@balintreczey.hu>
+
+       Simplify memory allocation (#47162).
+
+       Many invalid memory accesses were caught by UBSAN (e.g., invalid
+       memory access in `small_temp_iterator::operator new') while
+       bootstrapping hardened1-linux-amd64 Debian port in the `free_list'
+       handling because it doesn't properly handle the padding between
+       array elements.
+
+       Some places were already #if 0-d out anyway.
+
+       * src/roff/troff/input.cpp (small_temp_iterator): Remove class.
+       (make_temp_iterator): Use `temp_iterator' only.
+
+       * src/devices/grotty/tty.cpp (tty_glyph): Remove `free_list', `new',
+       and `delete'.
+
+       * src/include/color.h, src/include/color.cpp (color): Ditto.
+
+       * src/roff/troff/env.cpp (tab): Ditto.
+
+       * src/roff/troff/node.cpp (glyph_node): Ditto.
+
+2016-02-15  Bálint Réczey  <balint@balintreczey.hu>
+
+       [pre-grohtml] Fix out-of-bounds array access (#47161).
+
+       * src/preproc/html/pre-html.cpp (char_buffer::write_upto_newline):
+       Implement it.
+
+2016-02-15  Bálint Réczey  <balint@balintreczey.hu>
+
+       Don't use `memcpy' with NULL input or output argument (#47160).
+
+       * src/libs/libgroff/string.cpp (string::string, string::operator=):
+       Implement it.
+
+       * src/roff/troff/input.cpp (temp_iterator::temp_iterator): Implement
+       it.
+
+2016-02-04  Carsten Kunze  <carsten.kunze@arcor.de>
+
+       * tmac/s.tmac: Bugfix of previous commit simplified (and
+       introduced redundancy removed) by use of .par*start for .QS and
+       .QE.  This is consistent since any other paragraph macro is
+       using .par*start.
+
+2016-02-02  Carsten Kunze  <carsten.kunze@arcor.de>
+
+       * tmac/s.tmac: Macros .QS and .QE changed to insert vertical
+       inter-paragraph space.  A paragraph bracketed with .QS/.QE
+       should appear identical to a .QP paragraph followed by .LP.
+
+       * tmac/groff_ms.7.man, doc/groff.texi: Documentation of macros
+       .QS and .QE added and .QP information improved (effect of
+       registers QI and PD).
+
+       See also discussion at groff@gnu.org, thread starting at
+
+       http://lists.gnu.org/archive/html/groff/2016-01/msg00033.html
+
+       Issue reported by Douglas McIlroy <doug@cs.dartmouth.edu>
+
+2015-12-26  Carsten Kunze  <carsten.kunze@arcor.de>
+
+       * contrib/mm/m.tmac: Disable macro misc@tag in case output
+         type is not HTML.
+
+       This macro did cause unwanted space in case a MM macros .H
+       had been followed immediately by .DS.
+
+       (See also discussion at groff@gnu.org, thread starting at
+       http://lists.gnu.org/archive/html/groff/2015-12/msg00033.html)
+
+       Bug reported by Damian McGuckin <damianm@esi.com.au>.
+
+2015-12-14  Werner LEMBERG  <wl@gnu.org>
+
+       * src/preproc/eqn/text.cpp (entity_table): s/lamda/lambda/.
+
+       Bug reported by Brian McGuinness <mcguinne@fdu.edu>.
+
+2015-10-27  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       gropdf was choking on -I flag passed by groff, now uses
+       these directories to search for included pdfs.
+       
+       * src/devices/gropdf/gropdf.pl: Handle -I flag, avoid
+         unitialised values.
+       
+       * src/roff/groff/groff.1.man: Include 'X pdf: pdfpic'
+       
+       * src/devices/gropdf/gropdf.1.man: Document -I flag
+       
+2015-09-10  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * src/roff/grog/subs.pl: fix comments
+
+2015-09-03  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * tmac/troffrc: Add .mso for file `pdfpic.tmac'.
+
+2015-08-28  Bertrand Garrigues  <bertrand.garrigues@laposte.net>
+
+       * Makefile.am:
+       - Use only the naming `.section.man' for all man.pages.
+       - Replace `.man.n' by `.man' only, such that no `.n' is
+       generated.
+       - For example, the source `groff.7.man' is transformed into
+       `groff.7' in the same directory and then is by installing just
+       copied into one of the suitable installed man directory.
+
+2015-08-27  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * tmac/pfdpic.tmac: Add tmac file for macro `PDFPIC'.
+
+       * tmac/tmac.am: Add new `pdfpic.tmac' file.
+
+       * man/groff_tmac.5.man: Add definition for the new tmac.
+
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * all man-pages *.man: Rename man-pages such that the man section
+       number before the final `.man'.
+
+       * all *.am: Include renaming.
+
+       * Makefile.am: Reset `.man.n' by `.[157].man.n' with SUFFIXES
+       `.[157].man .n'.
+
+2015-08-20  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * Makefile.am: Fix definition of man[157]_MANS.
+
+2015-08-13  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * all *.am: Correct Emacs mode `End:' instead of `End.'.
+
+2015-08-09  Werner LEMBERG  <wl@gnu.org>
+
+       Revert previous commit, since it doesn't work correctly yet.
+
+2015-08-07  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       Add section name to all man-page names.
+
+       * Makefile.am: In `install-prefix-man' and `uninstall-prefix-man'
+       change `sed' commands.  Correct saving in man[157]_MANS.
+
+       * all *.man in source tree: Rename `manpage.man' to
+       `manpage.[157].man'.
+
+       * all makefile.am in source tree: Add new man-page file name.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * Makefile.am, arch/mingw/mingw.am, arch/misc/misc.am,
+       * contrib/eqn2graph/eqn2graph.am, contrib/grap2graph/grap2graph,
+       * contrib/pic2graph/pic2graph.am, doc/doc.am,
+       * font/devX100/devX100.am, font/devX100-12/devX100-12.am,
+       * font/devX75/devX75.am, font/devX75-12/devX75-12.am,
+       * font/devascii/devascii.am, font/devcp1047/devcp1047.am,
+       * font/devdvi/devdvi.am, font/devhtml/devhtml.am,
+       * font/devlatin1/devlatin1.am, font/devlbp/devlbp.am,
+       * font/devlj4/devlj4.am, font/devpdf/devpdf.am,
+       * font/devps/devps.am, font/devutf8/devutf8.am,
+       * font/scripts/scripts.am, man/man.am,
+       * src/devices/grodvi/grodvi.am, src/devices/grohtml/grohtml.am,
+       * src/devices/grolbp/grolbp.am, src/devices/grolj4/grolj4.am,
+       * src/devices/gropdf/gropdf.am, src/devices/grops/grops.am,
+       * src/devices/grotty/grotty.am,
+       * src/include/include.am, src/libs/libbib/libbib.am,
+       * src/libs/libdriver/libdriver.am, src/libs/libgroff/libgroff.am,
+       * src/libs/libxutil/libxutil.am, src/preproc/grn/grn.am,
+       * src/preproc/html/html.am, src/preproc/pic/pic.am,
+       * src/preproc/preconv/preconv.am, src/preproc/tbl/tbl.am
+       * src/preproc/refer/refer.am, src/preproc/soelim/soelim.am,
+       * src/roff/groff/groff.am, src/roff/grog/grog.am,
+       * src/roff/nroff/nroff.am, src/roff/troff/troff.am,
+       * src/utils/addftinfo/addftinfo.am,
+       * src/utils/afmtodit/afmtodit.am, src/utils/hpftodit/hpftodit.am,
+       * src/utils/indxbib/indxbib.am, src/utils/lkbib/lkbib.am,
+       * src/utils/lookbib/lookbib.am, src/utils/pfbtops/pfbtops.am,
+       * src/utils/tfmtodit/tfmtodit.am, src/utils/xtotroff/xtotroff.am,
+       * tmac/tmac.am:
+       Add `Last update'.  Setup Emacs mode.
+
+2015-07-29  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * src/roff/grog/subs.pl: Add -T for all `grog' output, also using
+       -Tps when no option -T is given in the arguments.
+
+       * src/roff/grog/grog.man: Add information about -T output.
+
+2015-07-23  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * man/groff.man: Add last update.  Add link on Wikipedia on groff.
+       Add link of groff tutorial by Laha.
+
+2015-07-19  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * src/roff/grog/*.pl: Add last update.
+
+       * src/roff/grog/subs.pl: Remove call to Perl INC::System::Simple,
+       use backticks instead.
+       Define &err().
+       Reorder some extensions.
+       Distinguish between .TH at first command for man and later on for
+       ms.
+
+2015-07-01 Peter Bray <pdb_ml@yahoo.com.au>
+
+       Fix Savannah bug #44784.
+
+       Compatibility Mode rendering of groff manual pages
+
+       * m4/groff.m4 (GROFF_WITH_COMPATIBILITY_WRAPPERS): New macro to
+       implement 'configure' option
+       '--with-compatibility-wrappers=<value>'.  With this option the
+       user can control how groff compatibility wrappers for
+       vendor-provided non-GNU macro sets are installed.
+
+       * configure.ac: Use new macro GROFF_WITH_COMPATIBILITY_WRAPPERS.
+
+       * Makefile.am: Define tmac_*_prefix if 'compatibility_wrappers' is
+       set to 'yes'.
+
+       * tmac/tmac.am: Use 'compatibility_wrappers' to control the
+       installation:
+
+       - If set to `no', the groff-provided macro set are installed in
+       <prefix>/share/groff/<version>/tmac/ with the original macro set
+       name.
+
+       - If set to `yes', the groff-provided macro set are installed in
+       <prefix>/share/groff/<version>/tmac/ with a prefix of
+       $(tmac_prefix) (which is usually `g') and the generated
+       compatibility wrappers are installed in
+       <prefix>/lib/groff/site-tmac, with the original macro set name.
+
+       - If set to `manual', the groff-provided macro set are installed
+       in <prefix>/share/groff/<version>/tmac/ with the original macro
+       set name and the generated compatibility wrappers are installed in
+       <prefix>/lib/groff/site-tmac, with a name of
+       <macro><wrapper_suffix> (which is usually `-os').
+
+2015-06-17  Werner LEMBERG  <wl@gnu.org>
+
+       * tmac/tty.tmac: Fix mapping of \[bu] character for -Tutf8.
+
+       Problem reported by carsten.kunze@arcor.de.
+
+2015-06-15  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       pdfmom should use $RT_SEP as path separator.
+
+       * src/devices/gropdf/gropdf.am: Use @RT_SEP@ as path separator.
+
+       * src/devices/gropdf/pdfmom.pl: As above but also fix typo in regex
+       for grep.
+
+2015-05-08  Eli Zaretskii  <eliz@gnu.org>
+
+       [groff] Make relocation really work.
+
+       See
+
+         https://lists.gnu.org/archive/html/groff/2015-05/msg00000.html
+
+       * src/roff/groff/groff.cpp: Include `relocate.h'.
+       (main): Use `relocatep'.
+
+2015-05-03  Bertrand Garrigues  <bertrand.garrigues@laposte.net>
+
+       Fix Savannah bug #44768 (Solaris 10 compatibility issues).
+
+       * m4/groff.m4 (GROFF_DIFF_D): new macro to check if `diff' has
+       option -D, and search for `gdiff' if not (new variable DIFF_PROG
+       will contain the `diff' program to be used).
+
+       * m4/groff.m4 (GROFF_HAVE_TEST_EF_OPTION): new macro to check if
+       `test' supports the option -ef (created new variable
+       HAVE_TEST_EF_OPTION).
+
+       * m4/groff.m4 (GROFF_BASH): new macro to search for `bash' (new
+       variable BASH_PROG will contain the full path to `bash' or
+       `/bin/sh' if `bash' was not found).
+
+       * configure.ac: use the 3 new macros defined in m4/groff.m4.
+
+       * contrib/gdiffmk/gdiffmk.am: set HAVE_TEST_EF_OPTION, BASH_PROG,
+       DIFF_PROG in the generated script `gdiffmk'.
+
+       * contrib/gdiffmk/gdiffmk.sh:
+       - Fix incorrect space after '!' in sed script regex.
+       - `test -ef' is not portable: If `bash' is not available and the
+       shell does not support `test -ef', the option to pass a third
+       argument as the output file is disabled.
+       - Report an error if `diff' does not support -D option.
+       - GNU diff and Solaris diff support -D, but #ifndef / #endif are
+       treated differently (GNU adds a '!' in the #endif): modify the
+       regexs in the sed script accordingly.
+
+2015-05-01  Werner LEMBERG  <wl@gnu.org>
+
+       * tmac/tmac.am (TMACNORMALFILES): Add `zh.tmac'.
+
+2015-04-30  Darcy SHEN  <sadhen1992@gmail.com>
+
+       Fix Savannah bug #44941.
+
+       * tmac/zh.tmac: New file to support basic Chinese (both simplified
+       and traditional).
+
+2015-04-22  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Fix Savannah bug #44891.
+
+       * src/devices/gropdf/gropdf.pl: If module Compress::Zlib is not
+       available fall back to producing uncompressed PDF and output a
+       warning.
+
+2015-04-22  Bjarni Ingi Gislason  <bjarniig@rhi.hi.is>
+
+       Fix Savannah bug #44894.
+
+       * tmac/strip.sed: Add a `generated file' warning.
+
+2015-04-21  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       Fix Savannah bug #44890.
+       Patch by Peter Bray.
+
+       * font/devpdf/devpdf.am: Don't use 'find -maxdepth'.
+
+2015-03-07  Ingo Schwarze  <schwarze@openbsd.org>
+
+       [mdoc] Fix Savannah bug #44733.
+
+       Prevent mdoc(7) Bl with trailing -width or -offset from picking up
+       old args.
+
+       * tmac/doc.tmac-u (doc-do-Bl-args): When checking whether there is
+       another argument to a Bl macro, do not inspect the argument list
+       because it is never cleaned and may contain arguments from previous
+       macro invocations.  Instead, inspect the argument count which is
+       always up to date.
+
+2015-04-10  Daiki Ueno  <ueno@gnu.org>
+
+       Fix link error on NetBSD 6.
+
+       Reported by carsten.kunze@arcor.de in:
+       <https://lists.gnu.org/archive/html/groff/2015-04/msg00000.html>.
+       The problem can also be reproduced if gl_cv_func_wcwidth_works=no
+       is passed to configure.
+
+       * src/preproc/grn/grn.am (grn_LDADD): Change the link order of
+       libgroff.a and lib/libgnu.a according to dependency.
+       * src/roff/troff/troff.am (troff_LDADD): Likewise.
+
+2015-04-08  Werner LEMBERG  <wl@gnu.org>
+
+       Fix Savannah bug #44767.
+       Patch by Peter Bray.
+
+       * src/roff/grog/grog.am (grog): Correctly substitute `grog_dir'.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+       Fix Savannah bug #44708 (2/2).
+
+       Make man pages work in compatibility mode.
+       Also fix some minor typos.
+
+       * contrib/pic2graph/pic2graph.man, man/ditroff.man, man/groff.man,
+       man/groff_diff.man, man/groff_out.man, man/groff_tmac.man,
+       man/roff.man, src/devices/grodvi/grodvi.man,
+       src/devices/grohtml/grohtml.man, src/devices/grolbp/grolbp.man,
+       src/devices/grolj4/grolj4.man, src/devices/grolj4/lj4_font.man,
+       src/devices/gropdf/gropdf.man, src/devices/gropdf/pdfmom.man,
+       src/devices/grops/grops.man, src/devices/grotty/grotty.man,
+       src/devices/xditview/xditview.man, src/preproc/eqn/eqn.man,
+       src/preproc/eqn/neqn.man, src/preproc/grn/grn.man,
+       src/preproc/pic/pic.man, src/preproc/preconv/preconv.man,
+       src/preproc/refer/refer.man, src/preproc/soelim/soelim.man,
+       src/preproc/tbl/tbl.man, src/roff/groff/groff.man,
+       src/roff/grog/grog.man, src/roff/nroff/nroff.man,
+       src/roff/troff/troff.man, src/utils/addftinto/addftinfo.man,
+       src/utils/afmtodit/afmtodit.man, src/utils/hpftodit/hpftodit.man,
+       src/utils/indxbib/indxbib.man, src/utils/lkbib/lkbib.man,
+       src/utils/lookbib/lookbib.man, src/utils/pfbtops/pfbtops.man,
+       src/utils/tfmtodit/tfmtodit.man, src/utils/xtotroff/xtotroff.man,
+       tmac/groff_man.man, tmac/groff_trace.man: Do it.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+       Fix Savannah bug #44708 (1/2).
+
+       * tmac/andoc.tmac (reload_doc, reload_man): Don't use `de1',
+       otherwise we can't manipulate the compatibility flag within the
+       macro.
+
+       * tmac/doc-common-u (Dt): Remove invalid leading whitespace.
+
+2015-03-11  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       * src/devices/gropdf/gropdf.pl: Was not handling the final glyph
+       correctly in the "standard" fonts which are not embedded. They
+       actually have 257 glyphs (0-256) not 256 as I'd assumed, so the
+       remappiing code needs to be applied for them as well as the
+       embedded downloadable fonts.
+
+2015-03-11  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       * src/devices/gropdf/gropdf.pl: Fix problem remappiing
+       ellipsis (affects all glyphs > 255).
+
+2015-03-07  Werner LEMBERG  <wl@gnu.org>
+
+       * tmac/tmac.am (TMACSPECIALFILES): Removed.  No longer used.
+
+2015-03-07  Ingo Schwarze  <schwarze@openbsd.org>
+
+       * tmac/doc-common-u (Dd): Avoid warning `unbalanced .el request'.
+
+2015-02-12  Werner LEMBERG  <wl@gnu.org>
+
+       Minor fixes due to renaming `groff.texinfo' to `groff.texi'.
+
+       * doc/doc.am (SUFFIXES): Update.
+       * m4/groff.m4 (GROFF_MAKEINFO): Update.
+
+2015-01-30  Bertrand Garrigues  <bertrand.garrigues@laposte.net>
+
+       Automake migration and Gnulib integration.
+
+       Gnulib:
+       - Added gnulib as a git submodule.
+       - Integrated bootstrap scripts from gnulib.
+       - Gnulib m4 directory is now in `gnulib_m4', while Gnulib's .c
+       files are located in `lib'.  `gnulib_m4' and `lib' are generated
+       and distributed.
+
+       Automake:
+       - Removed Makefiles from the old build system.
+       - Converted Makefile.in into Makefile.am.
+       - Converted Makefile.sub files in all directories to a .am file.
+       - Removed configure, src/include/config.hin (now generated).
+       - Removed various helper scripts (config.guess, config.rpath...),
+       now installed by bootstrap in `build-aux'.
+       - Moved aclocal.m4 to acinclude.m4 (aclocal.m4 is now generated).
+       - Makefile in non-recursive style.
+       - Updated INSTALL.REPO (INSTALL is now a symlink to
+       gnulib/doc/INSTALL, original INSTALL file moved to INSTALL.extra)
+       - Added (empty) THANKS, AUTHORS files.
+       - Added a document on the usage of automake in groff in
+       doc/automake.pdf.
+
+       Additional features:
+       - Out-of-source build is supported.
+       - Parallel build is possible (make -j).
+       - Automatic targets from Automake: `make dist', `make distcheck'.
+       - 'make check' is available for automatic testing, gdiffmk's test
+       was plugged to this target.
+       - Auto-detect if make has builtin variable `RM'.
+
+2015-01-14  Ingo Schwarze  <schwarze@openbsd.org>
+
+       Fix Savannah bug #43905.
+
+       * src/libs/libgroff/glyphuni.cpp (glyph_to_unicode_list),
+       * src/libs/libgroff/uniglyph.cpp (unicode_to_glyph_list): Remove
+       double entries for `rk', `lk', `lt', `rt', `rb', and `lb'.
+
+2014-12-16  Werner LEMBERG  <wl@gnu.org>
+
+       Update Unicode-to-Unicode mapping to version 7.0.0.
+
+       * src/libs/libgroff/make-uniuni: Update emitted copyright.
+
+       * src/libs/libgroff/uniuni.cpp: Regenerated.
+
+2014-11-29  Werner LEMBERG  <wl@gnu.org>
+
+       Fix previous commit.
+
+       We forgot to test whether the patch works if compiling from
+       scratch...
+
+       Problem reported by Bertrand Garrigues
+       <bertrand.garrigues@laposte.net>.
+
+       * src/include/lib.h (interpret_lf_args, normalize_for_lf): Move
+       declarations to...
+       * src/include/lf.h: This new file.
+
+       * src/libs/libgroff/lf.cpp, src/preproc/pic/pic.h,
+       src/preproc/preconv/preconv.cpp, src/preproc/refer/refer.h,
+       src/preproc/soelim/soelim.cpp, src/preproc/tbl/table.h: Include
+       `lf.h'.
+       Make `lib.h' the first included header file.
+
+       * src/preproc/eqn/eqn.h: Don't include `stringclass.h'.
+       * src/preproc/eqn/main.cpp: Include `stringclass.h' and `lf.h'.
+
+       * src/roff/groff/groff.cpp: Make `lib.h' the first included header
+       file.
+
+2014-11-10  Eli Zaretskii  <eliz@gnu.org>
+
+       Improve native Windows port.
+
+       This patch fixes two issues.
+
+         . Handle backslashes in `.lf' arguments for MSDOS and Windows.
+         . Fix file name quoting for the groff pipeline.
+
+       * src/preproc/soelim/soelim.cpp (do_file):
+       * src/preproc/refer/refer.cpp (do_file):
+       * src/preproc/preconv/preconv.cpp (do_file):
+       * src/preproc/pic/main.cpp (do_file):
+       * src/preproc/eqn/main.cpp (do_file): Call `normalize_for_lf' to
+       convert backslashes in the file name being processed to forward
+       slashes.
+
+       * src/include/lib.h (normalize_for_lf): Add prototype.
+
+       * src/preproc/eqn/eqn.h:
+       * src/preproc/pic/pic.h:
+       * src/preproc/refer/refer.h:
+       * src/preproc/tbl/table.h: Include stringclass.h before lib.h.
+
+       * src/libs/libgroff/lf.cpp (normalize_for_lf): New function.
+
+       * src/roff/groff/groff.cpp: Include stringclass.h before lib.h.
+       (append_arg_to_string) [_WIN32 && !__CYGWIN__]: Use only "..." for
+       quoting in native Windows builds.
+
+2014-11-18  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       My commit '3fe78135c9fe666dadffde2a822b0535d8db6feb' introduced
+       problem in subroutine `TextWid'.  Octal char `\nnn' returns width of
+       4 char string rather than width of single character.
+
+       * src/devices/gropdf/gropdf.pl: Change `TextWid' to recognise octal
+       escaped characters (\nnn).
+
+2014-11-07  Deri James  <deri@chuzzlewit.myzen.co.uk>
+
+       See bug #43555.
+
+       * src/devices/gropdf/gropdf.pl: Correct Date Format.
+
 2014-11-04  Werner LEMBERG  <wl@gnu.org>
 
        * src/libs/gnulib/*: Regenerate autotool files.
@@ -1418,7 +3852,7 @@ Version 1.22.3 released
        ($(SHPROGDIRS):): Add to existing rule.
        ($(OTHERDIRS):): Depend on $(SHPROGDIRS).
 
-2013-12-08  Eric S. Raymond <esr@thyrsus.com>
+2013-12-08  Eric S. Raymond  <esr@thyrsus.com>
 
        Repository fully converted to git.
 
@@ -2869,7 +5303,7 @@ ________________________________________________________________________
 
 ##### License
 
-Copyright 2011-2014 Free Software Foundation, Inc.
+Copyright 2011-2018 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -2881,3 +5315,4 @@ Local Variables:
 mode: change-log
 version-control: never
 End:
+vim:set autoindent:
index 53f0782ad0f731fc012d0d68d09918584b7a2c35..1d9ae0b30636a585c43c177c9ed29edb09c12f51 100644 (file)
@@ -1,4 +1,4 @@
-    Copyright 2013-2014 Free Software Foundation, Inc.
+    Copyright 2013-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
diff --git a/INSTALL b/INSTALL
index 1d3c3df2e18bf8cb22609ff813fa8542ec82095b..8865734f81b136629e961c230380423899c75794 100644 (file)
--- a/INSTALL
+++ b/INSTALL
-    Copyright 1997-2014 Free Software Foundation, Inc.
+Installation Instructions
+*************************
+
+   Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
+Foundation, Inc.
+
+   Copying and distribution of this file, with or without modification,
+are permitted in any medium without royalty provided the copyright
+notice and this notice are preserved.  This file is offered as-is,
+without warranty of any kind.
+
+Basic Installation
+==================
+
+   Briefly, the shell command './configure && make && make install'
+should configure, build, and install this package.  The following
+more-detailed instructions are generic; see the 'README' file for
+instructions specific to this package.  Some packages provide this
+'INSTALL' file but do not implement all of the features documented
+below.  The lack of an optional feature in a given package is not
+necessarily a bug.  More recommendations for GNU packages can be found
+in *note Makefile Conventions: (standards)Makefile Conventions.
+
+   The 'configure' shell script attempts to guess correct values for
+various system-dependent variables used during compilation.  It uses
+those values to create a 'Makefile' in each directory of the package.
+It may also create one or more '.h' files containing system-dependent
+definitions.  Finally, it creates a shell script 'config.status' that
+you can run in the future to recreate the current configuration, and a
+file 'config.log' containing compiler output (useful mainly for
+debugging 'configure').
+
+   It can also use an optional file (typically called 'config.cache' and
+enabled with '--cache-file=config.cache' or simply '-C') that saves the
+results of its tests to speed up reconfiguring.  Caching is disabled by
+default to prevent problems with accidental use of stale cache files.
+
+   If you need to do unusual things to compile the package, please try
+to figure out how 'configure' could check whether to do them, and mail
+diffs or instructions to the address given in the 'README' so they can
+be considered for the next release.  If you are using the cache, and at
+some point 'config.cache' contains results you don't want to keep, you
+may remove or edit it.
+
+   The file 'configure.ac' (or 'configure.in') is used to create
+'configure' by a program called 'autoconf'.  You need 'configure.ac' if
+you want to change it or regenerate 'configure' using a newer version of
+'autoconf'.
+
+   The simplest way to compile this package is:
+
+  1. 'cd' to the directory containing the package's source code and type
+     './configure' to configure the package for your system.
+
+     Running 'configure' might take a while.  While running, it prints
+     some messages telling which features it is checking for.
+
+  2. Type 'make' to compile the package.
+
+  3. Optionally, type 'make check' to run any self-tests that come with
+     the package, generally using the just-built uninstalled binaries.
+
+  4. Type 'make install' to install the programs and any data files and
+     documentation.  When installing into a prefix owned by root, it is
+     recommended that the package be configured and built as a regular
+     user, and only the 'make install' phase executed with root
+     privileges.
+
+  5. Optionally, type 'make installcheck' to repeat any self-tests, but
+     this time using the binaries in their final installed location.
+     This target does not install anything.  Running this target as a
+     regular user, particularly if the prior 'make install' required
+     root privileges, verifies that the installation completed
+     correctly.
+
+  6. You can remove the program binaries and object files from the
+     source code directory by typing 'make clean'.  To also remove the
+     files that 'configure' created (so you can compile the package for
+     a different kind of computer), type 'make distclean'.  There is
+     also a 'make maintainer-clean' target, but that is intended mainly
+     for the package's developers.  If you use it, you may have to get
+     all sorts of other programs in order to regenerate files that came
+     with the distribution.
+
+  7. Often, you can also type 'make uninstall' to remove the installed
+     files again.  In practice, not all packages have tested that
+     uninstallation works correctly, even though it is required by the
+     GNU Coding Standards.
+
+  8. Some packages, particularly those that use Automake, provide 'make
+     distcheck', which can by used by developers to test that all other
+     targets like 'make install' and 'make uninstall' work correctly.
+     This target is generally not run by end users.
+
+Compilers and Options
+=====================
 
-    Copying and distribution of this file, with or without modification,
-    are permitted in any medium without royalty provided the copyright
-    notice and this notice are preserved.
+   Some systems require unusual options for compilation or linking that
+the 'configure' script does not know about.  Run './configure --help'
+for details on some of the pertinent environment variables.
+
+   You can give 'configure' initial values for configuration parameters
+by setting variables in the command line or in the environment.  Here is
+an example:
+
+     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
+
+   *Note Defining Variables::, for more details.
+
+Compiling For Multiple Architectures
+====================================
+
+   You can compile the package for more than one kind of computer at the
+same time, by placing the object files for each architecture in their
+own directory.  To do this, you can use GNU 'make'.  'cd' to the
+directory where you want the object files and executables to go and run
+the 'configure' script.  'configure' automatically checks for the source
+code in the directory that 'configure' is in and in '..'.  This is known
+as a "VPATH" build.
+
+   With a non-GNU 'make', it is safer to compile the package for one
+architecture at a time in the source code directory.  After you have
+installed the package for one architecture, use 'make distclean' before
+reconfiguring for another architecture.
+
+   On MacOS X 10.5 and later systems, you can create libraries and
+executables that work on multiple system types--known as "fat" or
+"universal" binaries--by specifying multiple '-arch' options to the
+compiler but only a single '-arch' option to the preprocessor.  Like
+this:
+
+     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+                 CPP="gcc -E" CXXCPP="g++ -E"
+
+   This is not guaranteed to produce working output in all cases, you
+may have to build one architecture at a time and combine the results
+using the 'lipo' tool if you have problems.
+
+Installation Names
+==================
+
+   By default, 'make install' installs the package's commands under
+'/usr/local/bin', include files under '/usr/local/include', etc.  You
+can specify an installation prefix other than '/usr/local' by giving
+'configure' the option '--prefix=PREFIX', where PREFIX must be an
+absolute file name.
+
+   You can specify separate installation prefixes for
+architecture-specific files and architecture-independent files.  If you
+pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
+PREFIX as the prefix for installing programs and libraries.
+Documentation and other data files still use the regular prefix.
+
+   In addition, if you use an unusual directory layout you can give
+options like '--bindir=DIR' to specify different values for particular
+kinds of files.  Run 'configure --help' for a list of the directories
+you can set and what kinds of files go in them.  In general, the default
+for these options is expressed in terms of '${prefix}', so that
+specifying just '--prefix' will affect all of the other directory
+specifications that were not explicitly provided.
+
+   The most portable way to affect installation locations is to pass the
+correct locations to 'configure'; however, many packages provide one or
+both of the following shortcuts of passing variable assignments to the
+'make install' command line to change installation locations without
+having to reconfigure or recompile.
+
+   The first method involves providing an override variable for each
+affected directory.  For example, 'make install
+prefix=/alternate/directory' will choose an alternate location for all
+directory configuration variables that were expressed in terms of
+'${prefix}'.  Any directories that were specified during 'configure',
+but not in terms of '${prefix}', must each be overridden at install time
+for the entire installation to be relocated.  The approach of makefile
+variable overrides for each directory variable is required by the GNU
+Coding Standards, and ideally causes no recompilation.  However, some
+platforms have known limitations with the semantics of shared libraries
+that end up requiring recompilation when using this method, particularly
+noticeable in packages that use GNU Libtool.
+
+   The second method involves providing the 'DESTDIR' variable.  For
+example, 'make install DESTDIR=/alternate/directory' will prepend
+'/alternate/directory' before all installation names.  The approach of
+'DESTDIR' overrides is not required by the GNU Coding Standards, and
+does not work on platforms that have drive letters.  On the other hand,
+it does better at avoiding recompilation issues, and works well even
+when some directory options were not specified in terms of '${prefix}'
+at 'configure' time.
+
+Optional Features
+=================
 
-This file contains information that supplements the generic
-installation instructions in file `INSTALL.gen'.
+   If the package supports it, you can cause programs to be installed
+with an extra prefix or suffix on their names by giving 'configure' the
+option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
 
+   Some packages pay attention to '--enable-FEATURE' options to
+'configure', where FEATURE indicates an optional part of the package.
+They may also pay attention to '--with-PACKAGE' options, where PACKAGE
+is something like 'gnu-as' or 'x' (for the X Window System).  The
+'README' should mention any '--enable-' and '--with-' options that the
+package recognizes.
 
-Normal Installation
-===================
+   For packages that use the X Window System, 'configure' can usually
+find the X include and library files automatically, but if it doesn't,
+you can use the 'configure' options '--x-includes=DIR' and
+'--x-libraries=DIR' to specify their locations.
 
-The simplest way to compile groff is:
+   Some packages offer the ability to configure how verbose the
+execution of 'make' will be.  For these packages, running './configure
+--enable-silent-rules' sets the default to minimal output, which can be
+overridden with 'make V=1'; while running './configure
+--disable-silent-rules' sets the default to verbose, which can be
+overridden with 'make V=0'.
 
-  1. `cd' to the directory containing groff's source code and type
-     `./configure' to configure groff for your system.  If you are
-     using `csh' on an old version of System V, you might need to type
-     `sh ./configure' instead to prevent `csh' from trying to execute
-     `configure' itself.
+Particular systems
+==================
 
-     Running `configure' takes awhile.  While running, it prints some
-     messages telling which features it is checking for.
+   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU CC
+is not installed, it is recommended to use the following options in
+order to use an ANSI C compiler:
 
-  2. Type `make' to compile groff.
+     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
 
-  3. Type `sudo make install' to install the groff programs and any
-     data files and documentation.  `make install' is the only step for
-     which you need `root' access; this is done by `sudo'.
+and if that doesn't work, install pre-built binaries of GCC for HP-UX.
 
-  4. You can remove the groff binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile groff for
-     a different kind of computer), type `make distclean'.
+   HP-UX 'make' updates targets which have the same time stamps as their
+prerequisites, which makes it generally unusable when shipped generated
+files such as 'configure' are involved.  Use GNU 'make' instead.
 
+   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
+parse its '<wchar.h>' header file.  The option '-nodtk' can be used as a
+workaround.  If GNU CC is not installed, it is therefore recommended to
+try
 
-External Installation
-=====================
+     ./configure CC="cc"
 
-It is also possible to perform the whole installation process outside
-of the source code directory.  In this case a whole external build
-directory structure is created without changing any parts of the source
-code tree.  This is useful if the source code is read-only or if
-several different installations, such as for multiple architectures,
-should be constructed.
+and if that doesn't work, try
 
-As an example we assume that the source code of the `groff' code is in
-`/usr/local/src/groff', and that the build process should be done
-within the directory `/home/my/groff.compile'.
+     ./configure CC="cc -nodtk"
 
-  0. Create `/home/my/groff.compile' and change to that directory.
+   On Solaris, don't put '/usr/ucb' early in your 'PATH'.  This
+directory contains several dysfunctional programs; working variants of
+these programs are available in '/usr/bin'.  So, if you need '/usr/ucb'
+in your 'PATH', put it _after_ '/usr/bin'.
 
-  1. Call `/usr/local/src/groff/configure' in that directory to
-     configure groff for your system.  If you are using `csh' on an old
-     version of System V, you might need to type `sh
-     /usr/local/src/groff/configure' instead.
+   On Haiku, software installed for all users goes in '/boot/common',
+not '/usr/local'.  It is recommended to use the following options:
 
-  2. Type `make' to compile groff in that directory.
+     ./configure --prefix=/boot/common
 
-  3. Type `sudo make install' to install the groff programs and any
-     data files and documentation.
+Specifying the System Type
+==========================
 
-  4. You can remove the groff binaries and object files from the
-     build directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.
+   There may be some features 'configure' cannot figure out
+automatically, but needs to determine by the type of machine the package
+will run on.  Usually, assuming the package is built to be run on the
+_same_ architectures, 'configure' can figure that out, but if it prints
+a message saying it cannot guess the machine type, give it the
+'--build=TYPE' option.  TYPE can either be a short name for the system
+type, such as 'sun4', or a canonical name which has the form:
 
+     CPU-COMPANY-SYSTEM
 
-Special Platforms
-=================
-
-For instructions how to build groff with DJGPP tools for MS-DOS and
-MS-Windows, see the file arch/djgpp/README.
+where SYSTEM can have one of these forms:
 
-For instructions how to build groff with the MinGW tools for
-MS-Windows, see the file README.MinGW.
+     OS
+     KERNEL-OS
 
+   See the file 'config.sub' for the possible values of each field.  If
+'config.sub' isn't included in this package, then this package doesn't
+need to know the machine type.
 
-Miscellaneous
-=============
+   If you are _building_ compiler tools for cross-compiling, you should
+use the option '--target=TYPE' to select the type of system they will
+produce code for.
 
-groff is written in C++, so you need a C++ compiler.  The C++ source
-files use a suffix of `.cpp', so your C++ compiler must be able to
-handle this.  If you don't already have a C++ compiler, we suggest gcc
-2.7.1 or later (gcc version 2 includes GNU C++ as well as GNU C).  From
-gcc 2.5, it is no longer necessary to install libg++: the C++ header
-files needed by groff are created by the gcc installation process.  To
-override configure's choice of C++ compiler, you can set the CXX
-environment variable.
+   If you want to _use_ a cross compiler, that generates code for a
+platform different from the build platform, you should specify the
+"host" platform (i.e., that on which the generated programs will
+eventually be run) with '--host=TYPE'.
 
-If you have a library that provides a faster malloc than your system's
-usual malloc, it is good idea to include it in LIBS.  For example,
-using the malloc that comes with GNU Emacs version 20 can give a
-worthwhile (and sometimes spectacular) performance improvement.
+Sharing Defaults
+================
 
-Many programs within the `groff' system are written in the Perl
-language.  So you need a `perl' program with the least version of
-`v5.6.1'.
+   If you want to set default values for 'configure' scripts to share,
+you can create a site shell script called 'config.site' that gives
+default values for variables like 'CC', 'cache_file', and 'prefix'.
+'configure' looks for 'PREFIX/share/config.site' if it exists, then
+'PREFIX/etc/config.site' if it exists.  Or, you can set the
+'CONFIG_SITE' environment variable to the location of the site script.
+A warning: not all 'configure' scripts look for a site script.
 
+Defining Variables
+==================
 
-If you want A4 or letter paper format and the configure script produces
-an incorrect guess, say
+   Variables not defined in a site shell script can be set in the
+environment passed to 'configure'.  However, some packages may run
+configure again during the build, and the customized values of these
+variables may be lost.  In order to avoid this problem, you should set
+them in the 'configure' command line, using 'VAR=value'.  For example:
 
-  PAGE=xxx ./configure
+     ./configure CC=/usr/local2/bin/gcc
 
-where `xxx' should be either `A4' or `letter'.  Note that this only
-affects the paper selection of some device drivers like grops (which
-can be still overridden on the command line).  For compatibility with
-ditroff, the default page length in gtroff is always 11 inches.  The
-page length can be changed with the `pl' request.
+causes the specified 'gcc' to be used as the C compiler (unless it is
+overridden in the site shell script).
 
-When you have built groff but not installed yet, you can use the
-test-groff script to try groff out on one of the man pages.  (Use the
-.n files not the .man files.)  The test-groff script sets up environment
-variables to allow groff to run without being installed.  For example,
-you could do
+Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
+Autoconf limitation.  Until the limitation is lifted, you can use this
+workaround:
 
-  ./test-groff -man -Tascii src/roff/groff/groff.n | less
+     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
 
-to display the groff(1) man page with the `less' pager.
+'configure' Invocation
+======================
 
-To get a DVI, PDF, or HTML version of the groff texinfo manual, say
-`make groff.dvi', `make groff.pdf', or `make groff.html', respectively,
-in the `doc' subdirectory (after configuring the groff package).  Note
-that you need texinfo version 4.8 as a prerequisite.
+   'configure' recognizes the following options to control how it
+operates.
 
-If you have problems, read the PROBLEMS file.  If this doesn't help
-and you need support, please contact the `groff' mailing list.  If you
-think that you have found a bug, please submit a report in our bug
-tracker at
+'--help'
+'-h'
+     Print a summary of all of the options to 'configure', and exit.
 
-  https://savannah.gnu.org/projects/groff
+'--help=short'
+'--help=recursive'
+     Print a summary of the options unique to this package's
+     'configure', and exit.  The 'short' variant lists options used only
+     in the top level, while the 'recursive' variant lists options also
+     present in any nested packages.
 
-Alternative, but less preferable, you may send a bug report using the
-form in the file BUG-REPORT.
+'--version'
+'-V'
+     Print the version of Autoconf used to generate the 'configure'
+     script, and exit.
 
-##### Emacs settings
-Local Variables:
-mode: text
-End:
+'--cache-file=FILE'
+     Enable the cache: use and save the results of the tests in FILE,
+     traditionally 'config.cache'.  FILE defaults to '/dev/null' to
+     disable caching.
+
+'--config-cache'
+'-C'
+     Alias for '--cache-file=config.cache'.
+
+'--quiet'
+'--silent'
+'-q'
+     Do not print messages saying which checks are being made.  To
+     suppress all normal output, redirect it to '/dev/null' (any error
+     messages will still be shown).
+
+'--srcdir=DIR'
+     Look for the package's source code in directory DIR.  Usually
+     'configure' can determine that directory automatically.
+
+'--prefix=DIR'
+     Use DIR as the installation prefix.  *note Installation Names:: for
+     more details, including other options available for fine-tuning the
+     installation locations.
+
+'--no-create'
+'-n'
+     Run the configure checks, but stop before creating any output
+     files.
+
+'configure' also accepts some other, not widely useful, options.  Run
+'configure --help' for more details.
index 4cd6557ec25608fffbd23cfc635e3b7e8260c194..490f9d71c3078ca507b0ba3fa0dc1dbd3eec0b1d 100644 (file)
@@ -1,35 +1,82 @@
-    Copyright 2013-2014 Free Software Foundation, Inc.
+    Copyright 2013-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without
     modification, are permitted in any medium without royalty provided
     the copyright notice and this notice are preserved.
 
 This file contains information that supplements the generic
-installation instructions in file `INSTALL.gen'.  It is meant for
+installation instructions in file `INSTALL'.  It is meant for
 people building directly from the development repository, rather than
 a release or snapshot tarball.
 
 If you want to start compiling the `groff' system with an existing
-script `configure' you won't need the information in this file.
+script `configure' you won't need the information in this file. You
+need them only if you want to build groff from the git repository.
 
-But if you want to use the `GNU autotools' (`aclocal', `autoreconf')
-for creating the following and some more files:
+1. Initial build
+----------------
 
-    aclocal.m4
-    configure
-    Makefile
+You will need autoconf version and 2.65 or higher and automake version
+1.12.2 or higher. These minimal versions are set in the bootstrap.conf
+file.
 
-To update file `aclocal.m4', run the shell command
+On operating systems supporting concurrent installation of multiple
+versions of the autotools, set the following environment variables:
 
-    $ aclocal -I m4
+  export AUTOMAKE_VERSION=1.14
+  export AUTOCONF_VERSION=2.69
 
-To recreate the files `configure' and `Makefile', use the shell
-command
+You will also need to have `pkg-config' installed on your system.
 
-    $ autoreconf -I m4
+First invoke the bootstrap script:
 
-The option `-I m4' is necessary.  It refers to the subdirectory `m4'
-that has files with m4 macro definitions needed by the `autotools'.
+    $ ./bootstrap
+
+This will:
+  
+  - clone the gnulib repository as a git submodule in 'gnulib', add
+    the needed gnulib sources files in 'lib', add the needed gnulib m4
+    macros in 'gnulib_m4'
+
+  - Invoke autoreconf that will call all the `GNU autotools'
+    (`aclocal', `autoconf', `automake') in the right order for
+    creating the following files:
+
+    -- INSTALL (a symlink to gnulib's INSTALL file)
+    -- Makefile.in
+    -- aclocal.m4
+    -- autom4te.cache/
+    -- build-aux/ (that contains all the helper scripts) 
+    -- configure
+    -- src/include/config.hin
+
+Note that aclocal.m4 is generated and the groff m4 macros are included
+via the acinclude.m4 file.
+  
+At this point you can invoke the `configure' script (that generates
+the `config.status' script; it is the `config.status' script generates
+the Makefile) and call 'make' to build the groff project. You can do
+it in the source tree:
+
+    $ ./configure
+    $ make
+
+You can also build groff in an out of source build tree, which is cleaner:
+
+    $ mkdir build
+    $ cd build
+    $ ../configure
+    $ make
+
+Note that parallel build is also supported and make can be invoked
+with the -j option, which will greatly speed up the build.
+
+When the build is finished you can install the whole groff
+installation with:
+
+    $ make install
+
+Notes:
 
 If you use an old `autoreconf' version < 2.69, there might be an error
 warning like:
@@ -44,23 +91,51 @@ warning like:
 Just ignore this.  It doesn't occur in the actual versions of
 `autoreconf'.
 
-You may even use the shell command
+Troff errors of the types
+
+  can't transparently output node at top level
+    and
+  can't translate character code n to special character 'c' in transparent throughput
+
+may safely be ignored.
+
+A few sanity checks can be done with the command:
+
+    $ make check
+
+This will perform some tests on the generated examples.  However,
+these checks are for the moment quite limited.
+
+The groff texinfo manual can be generated in pdf and html formats
+with:
+
+    $ make doc
+
+and installed with:
+
+    $ make install-doc
+
+
+2. Modification of autotools files
+----------------------------------
+
+Previously, when groff used `autoconf' only and not `automake', you
+had to invoke manually the autotools, depending on what you
+modified. For example, to change the file `aclocal.m4', you had to run
+the shell command 'aclocal -I m4', to recreate the files `configure'
+and `Makefile', you had to use the command 'autoreconf -I m4'.
+
+Now, as groff uses `automake', you don't need to run `autoreconf'. If
+you make some changes in Makefile.am or configure.ac, all the files
+that need to be updated will be regenerated when you execute `make'.
 
-    $ autoconf -I m4
 
-instead of `autoreconf', but that will ignore some features.  So
-`autoreconf' is better.
 
-`automake' is not used currently, however, we plan to convert the
-build system accordingly.  If you have experience in creating
-`Makefile.am' files we would be glad if you could help us in the
-conversion process.  Please contact the groff mailing list.
+3. Quick start on the usage of `automake' in groff
+--------------------------------------------------
 
-After the use of the `GNU autotools', the usual compilation should
-work.  If the run of `configure' produces error reports you have
-produced errors in the `autotools' modification.
+A little document explaining the basics of automake and its usage in
+groff is available in doc/automake.mom. It is currently not
+automatically generated, to build it:
 
-##### Emacs settings
-Local Variables:
-mode: text
-End:
+pdfmom automake.mom > automake.pdf
diff --git a/INSTALL.extra b/INSTALL.extra
new file mode 100644 (file)
index 0000000..d7bb2fd
--- /dev/null
@@ -0,0 +1,150 @@
+    Copyright 1997-2018 Free Software Foundation, Inc.
+
+    Copying and distribution of this file, with or without modification,
+    are permitted in any medium without royalty provided the copyright
+    notice and this notice are preserved.
+
+This file contains information that supplements the generic
+installation instructions in file `INSTALL'.
+
+
+Normal Installation
+===================
+
+The simplest way to compile groff is:
+
+  1. `cd' to the directory containing groff's source code and type
+     `./configure' to configure groff for your system.  If you are
+     using `csh' on an old version of System V, you might need to type
+     `sh ./configure' instead to prevent `csh' from trying to execute
+     `configure' itself.
+
+     Running `configure' takes awhile.  While running, it prints some
+     messages telling which features it is checking for.
+
+  2. Type `make' to compile groff.
+
+  3. Type `sudo make install' to install the groff programs and any
+     data files and documentation.  `make install' is the only step for
+     which you need `root' access; this is done by `sudo'.
+
+  4. You can remove the groff binaries and object files from the
+     source code directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile groff for
+     a different kind of computer), type `make distclean'.
+
+
+External Installation
+=====================
+
+It is also possible to perform the whole installation process outside
+of the source code directory.  In this case a whole external build
+directory structure is created without changing any parts of the source
+code tree.  This is useful if the source code is read-only or if
+several different installations, such as for multiple architectures,
+should be constructed.
+
+As an example we assume that the source code of the `groff' code is in
+`/usr/local/src/groff', and that the build process should be done
+within the directory `/home/my/groff.compile'.
+
+  0. Create `/home/my/groff.compile' and change to that directory.
+
+  1. Call `/usr/local/src/groff/configure' in that directory to
+     configure groff for your system.  If you are using `csh' on an old
+     version of System V, you might need to type `sh
+     /usr/local/src/groff/configure' instead.
+
+  2. Type `make' to compile groff in that directory.
+
+  3. Type `sudo make install' to install the groff programs and any
+     data files and documentation.
+
+  4. You can remove the groff binaries and object files from the
+     build directory by typing `make clean'.  To also remove the
+     files that `configure' created (so you can compile the package for
+     a different kind of computer), type `make distclean'.
+
+
+Special Platforms
+=================
+
+For instructions how to build groff with DJGPP tools for MS-DOS and
+MS-Windows, see the file arch/djgpp/README.
+
+For instructions how to build groff with the MinGW tools for
+MS-Windows, see the file README.MinGW.
+
+
+Dependencies
+============
+
+groff is written in C++, so you need a C++ compiler.  The C++ source
+files use a suffix of `.cpp', so your C++ compiler must be able to
+handle this.  If you don't already have a C++ compiler, we suggest gcc
+2.7.1 or later (gcc version 2 includes GNU C++ as well as GNU C).  From
+gcc 2.5, it is no longer necessary to install libg++: the C++ header
+files needed by groff are created by the gcc installation process.  To
+override configure's choice of C++ compiler, you can set the CXX
+environment variable.
+
+If you have a library that provides a faster malloc than your system's
+usual malloc, it is good idea to include it in LIBS.  For example,
+using the malloc that comes with GNU Emacs version 20 can give a
+worthwhile (and sometimes spectacular) performance improvement.
+
+Many programs within the `groff' system are written in the Perl
+language.  So you need a `perl' program with the least version of
+`v5.6.1'.
+
+In order to build the documentation you would need `makeinfo' from the
+'texinfo' package, in fact `configure' will fail if this program is
+not found unless you pass the option `with-doc=no'.
+
+The `uchardet' library is an optional dependency of the `preconv'
+program: if this library is found by `configure' it will be
+automatically used by `preconv'.  In order to discover the presence of
+the `uchardet' library you would also need to have the `pkg-config'
+program installed on your system.
+
+
+Miscellaneous
+=============
+
+If you want A4 or letter paper format and the configure script produces
+an incorrect guess, say
+
+  PAGE=xxx ./configure
+
+where `xxx' should be either `A4' or `letter'.  Note that this only
+affects the paper selection of some device drivers like grops (which
+can be still overridden on the command line).  For compatibility with
+ditroff, the default page length in gtroff is always 11 inches.  The
+page length can be changed with the `pl' request.
+
+When you have built groff but not installed yet, you can use the
+test-groff script to try groff out on one of the man pages.  (Use the
+.n files not the .man files.)  The test-groff script sets up environment
+variables to allow groff to run without being installed.  For example,
+you could do
+
+  ./test-groff -man -Tascii src/roff/groff/groff.n | less
+
+to display the groff(1) man page with the `less' pager.
+
+To get a DVI, PDF, or HTML version of the groff texinfo manual, say
+`make groff.dvi', `make groff.pdf', or `make groff.html', respectively,
+in the `doc' subdirectory (after configuring the groff package).  Note
+that you need texinfo version 4.8 as a prerequisite.
+
+If you have problems, read the PROBLEMS file.  If this doesn't help
+and you need support, please contact the `groff' mailing list.  If you
+think that you have found a bug, please submit a report in our bug
+tracker at
+
+  https://savannah.gnu.org/projects/groff
+
+##### Emacs settings
+Local Variables:
+mode: text
+End:
diff --git a/INSTALL.gen b/INSTALL.gen
deleted file mode 100644 (file)
index 2099840..0000000
+++ /dev/null
@@ -1,370 +0,0 @@
-Installation Instructions
-*************************
-
-Copyright (C) 1994-1996, 1999-2002, 2004-2013 Free Software Foundation,
-Inc.
-
-   Copying and distribution of this file, with or without modification,
-are permitted in any medium without royalty provided the copyright
-notice and this notice are preserved.  This file is offered as-is,
-without warranty of any kind.
-
-Basic Installation
-==================
-
-   Briefly, the shell command `./configure && make && make install'
-should configure, build, and install this package.  The following
-more-detailed instructions are generic; see the `README' file for
-instructions specific to this package.  Some packages provide this
-`INSTALL' file but do not implement all of the features documented
-below.  The lack of an optional feature in a given package is not
-necessarily a bug.  More recommendations for GNU packages can be found
-in *note Makefile Conventions: (standards)Makefile Conventions.
-
-   The `configure' shell script attempts to guess correct values for
-various system-dependent variables used during compilation.  It uses
-those values to create a `Makefile' in each directory of the package.
-It may also create one or more `.h' files containing system-dependent
-definitions.  Finally, it creates a shell script `config.status' that
-you can run in the future to recreate the current configuration, and a
-file `config.log' containing compiler output (useful mainly for
-debugging `configure').
-
-   It can also use an optional file (typically called `config.cache'
-and enabled with `--cache-file=config.cache' or simply `-C') that saves
-the results of its tests to speed up reconfiguring.  Caching is
-disabled by default to prevent problems with accidental use of stale
-cache files.
-
-   If you need to do unusual things to compile the package, please try
-to figure out how `configure' could check whether to do them, and mail
-diffs or instructions to the address given in the `README' so they can
-be considered for the next release.  If you are using the cache, and at
-some point `config.cache' contains results you don't want to keep, you
-may remove or edit it.
-
-   The file `configure.ac' (or `configure.in') is used to create
-`configure' by a program called `autoconf'.  You need `configure.ac' if
-you want to change it or regenerate `configure' using a newer version
-of `autoconf'.
-
-   The simplest way to compile this package is:
-
-  1. `cd' to the directory containing the package's source code and type
-     `./configure' to configure the package for your system.
-
-     Running `configure' might take a while.  While running, it prints
-     some messages telling which features it is checking for.
-
-  2. Type `make' to compile the package.
-
-  3. Optionally, type `make check' to run any self-tests that come with
-     the package, generally using the just-built uninstalled binaries.
-
-  4. Type `make install' to install the programs and any data files and
-     documentation.  When installing into a prefix owned by root, it is
-     recommended that the package be configured and built as a regular
-     user, and only the `make install' phase executed with root
-     privileges.
-
-  5. Optionally, type `make installcheck' to repeat any self-tests, but
-     this time using the binaries in their final installed location.
-     This target does not install anything.  Running this target as a
-     regular user, particularly if the prior `make install' required
-     root privileges, verifies that the installation completed
-     correctly.
-
-  6. You can remove the program binaries and object files from the
-     source code directory by typing `make clean'.  To also remove the
-     files that `configure' created (so you can compile the package for
-     a different kind of computer), type `make distclean'.  There is
-     also a `make maintainer-clean' target, but that is intended mainly
-     for the package's developers.  If you use it, you may have to get
-     all sorts of other programs in order to regenerate files that came
-     with the distribution.
-
-  7. Often, you can also type `make uninstall' to remove the installed
-     files again.  In practice, not all packages have tested that
-     uninstallation works correctly, even though it is required by the
-     GNU Coding Standards.
-
-  8. Some packages, particularly those that use Automake, provide `make
-     distcheck', which can by used by developers to test that all other
-     targets like `make install' and `make uninstall' work correctly.
-     This target is generally not run by end users.
-
-Compilers and Options
-=====================
-
-   Some systems require unusual options for compilation or linking that
-the `configure' script does not know about.  Run `./configure --help'
-for details on some of the pertinent environment variables.
-
-   You can give `configure' initial values for configuration parameters
-by setting variables in the command line or in the environment.  Here
-is an example:
-
-     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
-
-   *Note Defining Variables::, for more details.
-
-Compiling For Multiple Architectures
-====================================
-
-   You can compile the package for more than one kind of computer at the
-same time, by placing the object files for each architecture in their
-own directory.  To do this, you can use GNU `make'.  `cd' to the
-directory where you want the object files and executables to go and run
-the `configure' script.  `configure' automatically checks for the
-source code in the directory that `configure' is in and in `..'.  This
-is known as a "VPATH" build.
-
-   With a non-GNU `make', it is safer to compile the package for one
-architecture at a time in the source code directory.  After you have
-installed the package for one architecture, use `make distclean' before
-reconfiguring for another architecture.
-
-   On MacOS X 10.5 and later systems, you can create libraries and
-executables that work on multiple system types--known as "fat" or
-"universal" binaries--by specifying multiple `-arch' options to the
-compiler but only a single `-arch' option to the preprocessor.  Like
-this:
-
-     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-                 CPP="gcc -E" CXXCPP="g++ -E"
-
-   This is not guaranteed to produce working output in all cases, you
-may have to build one architecture at a time and combine the results
-using the `lipo' tool if you have problems.
-
-Installation Names
-==================
-
-   By default, `make install' installs the package's commands under
-`/usr/local/bin', include files under `/usr/local/include', etc.  You
-can specify an installation prefix other than `/usr/local' by giving
-`configure' the option `--prefix=PREFIX', where PREFIX must be an
-absolute file name.
-
-   You can specify separate installation prefixes for
-architecture-specific files and architecture-independent files.  If you
-pass the option `--exec-prefix=PREFIX' to `configure', the package uses
-PREFIX as the prefix for installing programs and libraries.
-Documentation and other data files still use the regular prefix.
-
-   In addition, if you use an unusual directory layout you can give
-options like `--bindir=DIR' to specify different values for particular
-kinds of files.  Run `configure --help' for a list of the directories
-you can set and what kinds of files go in them.  In general, the
-default for these options is expressed in terms of `${prefix}', so that
-specifying just `--prefix' will affect all of the other directory
-specifications that were not explicitly provided.
-
-   The most portable way to affect installation locations is to pass the
-correct locations to `configure'; however, many packages provide one or
-both of the following shortcuts of passing variable assignments to the
-`make install' command line to change installation locations without
-having to reconfigure or recompile.
-
-   The first method involves providing an override variable for each
-affected directory.  For example, `make install
-prefix=/alternate/directory' will choose an alternate location for all
-directory configuration variables that were expressed in terms of
-`${prefix}'.  Any directories that were specified during `configure',
-but not in terms of `${prefix}', must each be overridden at install
-time for the entire installation to be relocated.  The approach of
-makefile variable overrides for each directory variable is required by
-the GNU Coding Standards, and ideally causes no recompilation.
-However, some platforms have known limitations with the semantics of
-shared libraries that end up requiring recompilation when using this
-method, particularly noticeable in packages that use GNU Libtool.
-
-   The second method involves providing the `DESTDIR' variable.  For
-example, `make install DESTDIR=/alternate/directory' will prepend
-`/alternate/directory' before all installation names.  The approach of
-`DESTDIR' overrides is not required by the GNU Coding Standards, and
-does not work on platforms that have drive letters.  On the other hand,
-it does better at avoiding recompilation issues, and works well even
-when some directory options were not specified in terms of `${prefix}'
-at `configure' time.
-
-Optional Features
-=================
-
-   If the package supports it, you can cause programs to be installed
-with an extra prefix or suffix on their names by giving `configure' the
-option `--program-prefix=PREFIX' or `--program-suffix=SUFFIX'.
-
-   Some packages pay attention to `--enable-FEATURE' options to
-`configure', where FEATURE indicates an optional part of the package.
-They may also pay attention to `--with-PACKAGE' options, where PACKAGE
-is something like `gnu-as' or `x' (for the X Window System).  The
-`README' should mention any `--enable-' and `--with-' options that the
-package recognizes.
-
-   For packages that use the X Window System, `configure' can usually
-find the X include and library files automatically, but if it doesn't,
-you can use the `configure' options `--x-includes=DIR' and
-`--x-libraries=DIR' to specify their locations.
-
-   Some packages offer the ability to configure how verbose the
-execution of `make' will be.  For these packages, running `./configure
---enable-silent-rules' sets the default to minimal output, which can be
-overridden with `make V=1'; while running `./configure
---disable-silent-rules' sets the default to verbose, which can be
-overridden with `make V=0'.
-
-Particular systems
-==================
-
-   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU
-CC is not installed, it is recommended to use the following options in
-order to use an ANSI C compiler:
-
-     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
-
-and if that doesn't work, install pre-built binaries of GCC for HP-UX.
-
-   HP-UX `make' updates targets which have the same time stamps as
-their prerequisites, which makes it generally unusable when shipped
-generated files such as `configure' are involved.  Use GNU `make'
-instead.
-
-   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
-parse its `<wchar.h>' header file.  The option `-nodtk' can be used as
-a workaround.  If GNU CC is not installed, it is therefore recommended
-to try
-
-     ./configure CC="cc"
-
-and if that doesn't work, try
-
-     ./configure CC="cc -nodtk"
-
-   On Solaris, don't put `/usr/ucb' early in your `PATH'.  This
-directory contains several dysfunctional programs; working variants of
-these programs are available in `/usr/bin'.  So, if you need `/usr/ucb'
-in your `PATH', put it _after_ `/usr/bin'.
-
-   On Haiku, software installed for all users goes in `/boot/common',
-not `/usr/local'.  It is recommended to use the following options:
-
-     ./configure --prefix=/boot/common
-
-Specifying the System Type
-==========================
-
-   There may be some features `configure' cannot figure out
-automatically, but needs to determine by the type of machine the package
-will run on.  Usually, assuming the package is built to be run on the
-_same_ architectures, `configure' can figure that out, but if it prints
-a message saying it cannot guess the machine type, give it the
-`--build=TYPE' option.  TYPE can either be a short name for the system
-type, such as `sun4', or a canonical name which has the form:
-
-     CPU-COMPANY-SYSTEM
-
-where SYSTEM can have one of these forms:
-
-     OS
-     KERNEL-OS
-
-   See the file `config.sub' for the possible values of each field.  If
-`config.sub' isn't included in this package, then this package doesn't
-need to know the machine type.
-
-   If you are _building_ compiler tools for cross-compiling, you should
-use the option `--target=TYPE' to select the type of system they will
-produce code for.
-
-   If you want to _use_ a cross compiler, that generates code for a
-platform different from the build platform, you should specify the
-"host" platform (i.e., that on which the generated programs will
-eventually be run) with `--host=TYPE'.
-
-Sharing Defaults
-================
-
-   If you want to set default values for `configure' scripts to share,
-you can create a site shell script called `config.site' that gives
-default values for variables like `CC', `cache_file', and `prefix'.
-`configure' looks for `PREFIX/share/config.site' if it exists, then
-`PREFIX/etc/config.site' if it exists.  Or, you can set the
-`CONFIG_SITE' environment variable to the location of the site script.
-A warning: not all `configure' scripts look for a site script.
-
-Defining Variables
-==================
-
-   Variables not defined in a site shell script can be set in the
-environment passed to `configure'.  However, some packages may run
-configure again during the build, and the customized values of these
-variables may be lost.  In order to avoid this problem, you should set
-them in the `configure' command line, using `VAR=value'.  For example:
-
-     ./configure CC=/usr/local2/bin/gcc
-
-causes the specified `gcc' to be used as the C compiler (unless it is
-overridden in the site shell script).
-
-Unfortunately, this technique does not work for `CONFIG_SHELL' due to
-an Autoconf limitation.  Until the limitation is lifted, you can use
-this workaround:
-
-     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
-
-`configure' Invocation
-======================
-
-   `configure' recognizes the following options to control how it
-operates.
-
-`--help'
-`-h'
-     Print a summary of all of the options to `configure', and exit.
-
-`--help=short'
-`--help=recursive'
-     Print a summary of the options unique to this package's
-     `configure', and exit.  The `short' variant lists options used
-     only in the top level, while the `recursive' variant lists options
-     also present in any nested packages.
-
-`--version'
-`-V'
-     Print the version of Autoconf used to generate the `configure'
-     script, and exit.
-
-`--cache-file=FILE'
-     Enable the cache: use and save the results of the tests in FILE,
-     traditionally `config.cache'.  FILE defaults to `/dev/null' to
-     disable caching.
-
-`--config-cache'
-`-C'
-     Alias for `--cache-file=config.cache'.
-
-`--quiet'
-`--silent'
-`-q'
-     Do not print messages saying which checks are being made.  To
-     suppress all normal output, redirect it to `/dev/null' (any error
-     messages will still be shown).
-
-`--srcdir=DIR'
-     Look for the package's source code in directory DIR.  Usually
-     `configure' can determine that directory automatically.
-
-`--prefix=DIR'
-     Use DIR as the installation prefix.  *note Installation Names::
-     for more details, including other options available for fine-tuning
-     the installation locations.
-
-`--no-create'
-`-n'
-     Run the configure checks, but stop before creating any output
-     files.
-
-`configure' also accepts some other, not widely useful, options.  Run
-`configure --help' for more details.
index b6c163dbd103de1b483d79d466d40a7d758158ff..8512b9e987574bf4252e67ec90d857c1e970e0b6 100644 (file)
--- a/LICENSES
+++ b/LICENSES
@@ -1,4 +1,4 @@
-    Copyright 2003-2014 Free Software Foundation, Inc.
+    Copyright 2003-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -36,16 +36,6 @@ hasn't been assigned to the FSF).
   Source Files
   ------------
 
-  . The file `src/libs/snprintf/snprintf.c', written by Mark Martinec
-    <mark.martinec@ijs.si>.
-
-    Please look into snprintf.c for the copyright message.
-
-    The complete snprintf package together with documentation is available
-    from
-
-      http://www.ijs.si/software/snprintf/    .
-
   . The `grn' preprocessor, written by Barry Roitblat <barry@rentonww.com>
     and David Slattengren <slatteng@Xinet.COM>.  These files have been part
     of the original Berkeley ditroff distribution, without AT&T code, and
@@ -152,23 +142,16 @@ hasn't been assigned to the FSF).
     See the file itself for a copyright notice.
 
   . The files `tmac/hyphen.det' and `tmac/hyphen.den' contain the same
-    patterns as the files `dehyphn.tex' and `dehypht.tex' (for TeX), which
-    can be found at
+    patterns as the files `dehypht-x-2017-03-31.pat' and
+    `dehyphn-x-2017-03-31.pat' (for TeX), respectively, which can be found
+    at
 
-      http://dante.ctan.org/CTAN/language/hyphenation/dehyphn.tex
-      http://dante.ctan.org/CTAN/language/hyphenation/dehypht.tex    .
+      http://ctan.org/tex-archive/language/hyphenation/dehyph-exptl
 
-    The patterns have been converted to a format groff can understand.
+    The patterns have been converted to latin-1.
 
     See the files themselves for a copyright notice.
 
-  . The file `tmac/hyphenex.det' is identical to the file `dehyphtex.tex',
-    which can be found at
-
-      http://dante.ctan.org/CTAN/language/hyphenation/dehyphtex.tex    .
-
-    See the file itself for a copyright notice.
-
   . The file `tmac/hyphen.cs' contains the same patterns as the file
     `czhyphen.tex' (for TeX), which can be found in the archive
 
index 2bec20fe920e99aa6e503f93f1f20c03f5baf933..7ca4fc8d0b7f8ce9104b9ff49c46012e793cb7c8 100644 (file)
--- a/MANIFEST
+++ b/MANIFEST
@@ -1,4 +1,4 @@
-    Copyright 2001-2014 Free Software Foundation, Inc.
+    Copyright 2001-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -101,7 +101,6 @@ the groff source distribution.
   libdriver     Parser for intermediate output and postprocessor code.
   libgroff      Library for general support functions used everywhere.
   libxutil      Utility functions for xditview and xtotroff.
-  snprintf      An implementation of snprintf() and friends.
 
 ./src/preproc   Preprocessors.
   eqn           Mathematical formulae.
index 25ecf0d95042755224dd602ca9a97f8c633060ae..506dd0a98db057d990f01630b4aa1b1a3c656390 100644 (file)
@@ -1,4 +1,4 @@
-    Copyright 2000-2014 Free Software Foundation, Inc.
+    Copyright 2000-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -219,7 +219,7 @@ miscellaneous
 
   o `AJM Header' is a set of troff macros used in production of the
     Australian Journal of Management.  They use the Memorandum Macros (mm)
-    of AT&T, and so should be invoked with the UNIX troff -mm flag; they
+    of AT&T, and so should be invoked with the Unix troff -mm flag; they
     should also work with the GNU troff -mm flag.
 
 . Various contributed stuff like additional font files, macro packages, and
diff --git a/Makefile b/Makefile
deleted file mode 100644 (file)
index 05ef002..0000000
--- a/Makefile
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.init
-#
-SHELL=/bin/sh
-
-.PHONY: all
-all:
-       $(SHELL) configure
-       $(MAKE) all
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/Makefile.am b/Makefile.am
new file mode 100644 (file)
index 0000000..d18c49b
--- /dev/null
@@ -0,0 +1,941 @@
+# Copyright (C) 1989-2018 Free Software Foundation, Inc.
+# Original Makefile.in written by James Clark (jjc@jclark.com)
+# Migrated to Automake by Bertrand Garrigues
+#
+# Last update: 2017-11-02
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+# Makefile.am
+#
+
+# The variables that are listed in the following comments will be
+# automatically set by automake in the generated Makefile.in
+
+# SHELL
+
+# PACKAGE_TARNAME
+
+# srcdir
+
+# top_srcdir
+
+# VPATH
+
+# top_builddir
+
+# HOST
+# `HOST' is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+
+# `RT_SEP' is the operating system's native PATH SEPARATOR CHAR, which
+# is to be used in runtime PATHs compiled into groff executables.
+RT_SEP=@GROFF_PATH_SEPARATOR@
+
+# `SH_SEP' is a alternative PATH SEPARATOR CHAR, to be used in shell
+# scripts and makefile rules; it may be the same as `RT_SEP', but,
+# particularly in some Microsoft environments, it may differ.
+SH_SEP=@PATH_SEPARATOR@
+
+# GLIBC2
+# `GLIBC21' is yes if the host operating system uses GNU libc 2.1 or newer,
+# otherwise no.
+
+
+# VERSION is set by automake, based on what is passed to AC_INIT.
+
+# PAGE
+# Define `page' to be letter if your PostScript printer uses 8.5x11
+# paper (USA) and define it to be A4, if it uses A4 paper (rest of the
+# world).
+
+# GHOSTSCRIPT
+# The name of the ghostscript program. Normally, gs, on GNU/Linux
+# but it might be different on MS-DOS/MS-WIN32 systems.
+
+# ALT_GHOSTSCRIPT_PROGS
+# `ALT_GHOSTSCRIPT_PROGS' specifies a list alternative names,
+# which can be tried if `GHOSTSCRIPT' cannot be found at run time.
+
+# ALT_AWK_PROGS
+# Similarly, `ALT_AWK_PROGS' specifies a list of alternative names,
+# which can be tried at run time, to identify the awk program.
+
+# BROKEN_SPOOLER_FLAGS
+# Normally the Postscript driver, grops, produces output that conforms
+# to version 3.0 of the Adobe Document Structuring Conventions.
+# Unfortunately some spoolers and previewers can't handle such output.
+# The BROKEN_SPOOLER_FLAGS variable tells grops what it should do to
+# make its output acceptable to such programs.  This variable controls
+# only the default behaviour of grops; the behaviour can be changed at
+# runtime by the grops -b option (and so by groff -P-b).
+# Use a value of 0 if your spoolers and previewers are able to handle
+# conforming PostScript correctly.
+# Add 1 if no %%{Begin,End}DocumentSetup comments should be generated;
+# this is needed for early versions of TranScript that get confused by
+# anything between the %%EndProlog line and the first %%Page: comment.
+# Add 2 if lines in included files beginning with %! should be
+# stripped out; this is needed for the OpenWindows 2.0 pageview previewer.
+# Add 4 if %%Page, %%Trailer and %%EndProlog comments should be
+# stripped out of included files; this is needed for spoolers that
+# don't understand the %%{Begin,End}Document comments. I suspect this
+# includes early versions of TranScript.
+# Add 8 if the first line of the PostScript output should be %!PS-Adobe-2.0
+# rather than %!PS-Adobe-3.0; this is needed when using Sun's Newsprint
+# with a printer that requires page reversal.
+
+
+# `DEVICE' is the default device.
+DEVICE=ps
+
+# XDEVIDIRS
+# `XDEVDIRS' is either `font/devX{75,100}{,-12}' or empty.
+
+# XPROGDIRS
+# `XPROGDIRS' is either `src/devices/xditview src/utils/xtotroff' or empty.
+
+# XLIBDIRS
+# `XLIBDIRS' is either `src/libs/libxutil' or empty.
+
+# `TTYDEVDIRS' is either `font/devascii font/devlatin1' (for
+# ASCII) or `font/devcp1047' (for EBCDIC) plus font/devutf8.
+TTYDEVDIRS=@TTYDEVDIRS@ font/devutf8
+
+# OTHERDEVDIRS
+# `OTHERDEVDIRS' is either `font/devlj4 font/devlbp' (for ASCII) or
+# empty (for EBCDIC).
+
+# PSPRINT
+# `PSPRINT' is the command to use for printing a PostScript file,
+# for example `lpr'.
+
+# DVIPRINT
+# `DVIPRINT' is the command to use for printing a TeX dvi file,
+# for example `lpr -d'.
+
+# g
+# Prefix for names of programs that have Unix counterparts.
+# For example, if `g' is `g' then troff will be installed as
+# gtroff.  This doesn't affect programs like grops or groff that have
+# no Unix counterparts.  Note that the groff versions of eqn and tbl
+# will not work with Unix troff.
+
+# prefix
+# exec_prefix
+# Common prefix for installation directories.
+# Used in definitions of exec_prefix, datasubdir, fontpath, manroot.
+# This must already exist when you do make install.
+
+# bindir
+# `bindir' says where to install executables.
+
+# libdir
+# `libdir' says where to install platform-dependent data.
+
+# libprogramdir
+# `libprogramdir' is $(libdir)/groff
+
+# `datasubdir' says where to install platform-independent data files.
+# datadir
+# datarootdir
+dataprogramdir=$(datadir)/groff
+datasubdir=$(dataprogramdir)/$(SHORT_VERSION)
+
+# infodir
+# `infodir' says where to install info files.
+
+# docdir
+# `docdir' says where to install documentation files.  The default
+# location is ${datarootdir}/doc/${PACKAGE}, but we add the version
+docdir=$(datarootdir)/doc/${PACKAGE}-$(SHORT_VERSION)
+
+# `exampledir' says where to install example files.
+exampledir=$(docdir)/examples
+
+# `htmldocdir' says where to install documentation in HTML format.
+htmldocdir=$(docdir)/html
+
+# `pdfdocdir' says where to install documentation in PDF format.
+pdfdocdir=$(docdir)/pdf
+
+# `fontdir' says where to install dev*/*.
+fontdir=$(datasubdir)/font
+
+# `oldfontdir' says where to install old font sets (as dev*/*).
+oldfontdir=$(datasubdir)/oldfont
+
+# `localfontdir' says where local fonts will be installed (as dev*/*).
+localfontdir=$(dataprogramdir)/site-font
+
+# `legacyfontdir' is for compatibility with non-GNU troff.
+legacyfontdir=/usr/lib/font
+
+# `fontpath' says where to look for dev*/*.
+fontpath=$(localfontdir)$(RT_SEP)$(fontdir)$(RT_SEP)$(legacyfontdir)
+
+# `tmacdir' says where to install macros.
+tmacdir=$(datasubdir)/tmac
+
+# `systemtmacdir' says where to install platform-dependent macros.
+systemtmacdir=$(libprogramdir)/site-tmac
+
+# `localtmacdir' says where local files will be installed.
+localtmacdir=$(dataprogramdir)/site-tmac
+
+# appresdir
+# `appresdir' says where to install the application resource file for
+# gxditview.
+
+# groffer_dir
+# glilypond_dir
+# grog_dir
+# gpinyin_dir
+
+# `tmacpath' says where to look for macro files.
+# The current directory will be prepended in unsafe mode only; the home
+# directory will be always added.
+# `troffrc' and `troffrc-end' (and `eqnrc') are searched neither in the
+# current nor in the home directory.
+tmacpath=$(systemtmacdir)$(RT_SEP)$(localtmacdir)$(RT_SEP)$(tmacdir)
+
+# sys_tmac_prefix
+# `sys_tmac_prefix' is prefix (if any) for system macro packages.
+
+# pnmtops_nosetpage
+# `pnmtops_nosetpage' is the command to be run to generate an eps
+# file.  Some versions of pnmtops provide the -nosetpage option.
+# We detect this and use it if present.
+
+# tmac_wrap
+# `tmac_wrap' is list of system macro packages that should be made
+# available to groff by creating a corresponding macro package
+# in the groff macro directory that references the system macro
+# package.
+
+# compatibility_wrappers
+# (groff compatibility wrappers for vendor-provided non-GNU macro sets)
+#
+# `compatibility_wrappers' controls the creation and installation of
+# compatibility wrappers for the macro sets named in `tmac_wrap'.
+# Its value must be one of:
+#   `yes'    install compatibility wrappers as the original macro set name
+#            (that is, the default implementation of that macro set), and
+#            install the groff implementation with a prefix (usually g).
+#   `no'     do not install compatibility wrappers; only install the groff
+#            implementation of each macro set.
+#   `manual' install the compatibility wrappers as `<macro>-os' and install
+#            the groff implementation of each macro set as the default
+#            implementation of that macro set.
+
+# Don't make this empty.
+wrapper_suffix_default="-os"
+
+wrapper_suffix=`if test $(compatibility_wrappers) = manual; then echo $(wrapper_suffix_default); fi`
+
+# When `compatibility_wrappers' is `yes', if there is a groff implementation
+# of a macro set listed in $(tmac_wrap), then the groff implementation will be
+# installed with a prefix of $(tmac_prefix) via the collision detection
+# variables $(tmac_m_prefix), $(tmac_s_prefix), and $(tmac_an_prefix).
+
+# Don't make this empty.
+tmac_prefix=g
+
+# The groff -mm macros will be available as -m$(tmac_m_prefix)m.
+tmac_m_prefix=\
+ `if test $(compatibility_wrappers) = yes; then \
+    for i in $(tmac_wrap) ""; do \
+      case "$$i" in m) echo $(tmac_prefix);; esac; \
+    done; \
+  fi`
+
+# The groff -ms macros will be available as -m$(tmac_s_prefix)s.
+tmac_s_prefix=\
+ `if test $(compatibility_wrappers) = yes; then \
+    for i in $(tmac_wrap) ""; do \
+      case "$$i" in s) echo $(tmac_prefix);; esac; \
+    done; \
+  fi`
+
+# The groff -man macros will be available as -m$(tmac_an_prefix)an.
+tmac_an_prefix=\
+ `if test $(compatibility_wrappers) = yes; then \
+    for i in $(tmac_wrap) ""; do \
+      case "$$i" in an) echo $(tmac_prefix);; esac; \
+    done; \
+  fi`
+
+# Extension to be used for refer index files.  Index files are not
+# sharable between different architectures, so you might want to use
+# different suffixes for different architectures.  Choose an extension
+# that doesn't conflict with refer or any other indexing program.
+indexext=.i
+
+# Directory containing the default index for refer.
+indexdir=/usr/dict/papers
+
+# The filename (without suffix) of the default index for refer.
+indexname=Ind
+
+# common_words_file is a file containing a list of common words.
+# If your system provides /usr/lib/eign it will be copied onto this,
+# otherwise the supplied eign file will be used.
+common_words_file=$(datasubdir)/eign
+
+# mandir
+# `manroot' is the root of the man page directory tree.
+manroot=$(mandir)
+
+# `man1ext' is the man section for user commands.
+man1ext=1
+man1dir=$(manroot)/man$(man1ext)
+
+# `man5ext' is the man section for file formats.
+man5ext=5
+man5dir=$(manroot)/man$(man5ext)
+
+# `man7ext' is the man section for macros.
+man7ext=7
+man7dir=$(manroot)/man$(man7ext)
+
+# doc_dist_target_ok
+# `dist' target is disallowed in some `configure' combinations.
+
+# The configure script checks whether the user wants the info documentation.
+# For the repo version this mechanism also suppresses building via `makeinfo'.
+# make_infodoc
+# make_install_infodoc
+# make_uninstall_infodoc
+
+# The configure script checks whether all necessary utility programs for
+# grohtml are available -- only then we can build the HTML documentation.
+# make_htmldoc
+# make_install_htmldoc
+# make_uninstall_htmldoc
+
+# make_htmlexamples
+# make_install_htmlexamples
+# make_uninstall_htmlexamples
+
+# The configure script also checks whether all necessary utility programs
+# for pdfroff are available -- only then we can build PDF documentation.
+# make_pdfdoc
+# make_install_pdfdoc
+# make_uninstall_pdfdoc
+
+# make_pdfexamples
+# make_install_pdfexamples
+# make_uninstall_pdfexamples
+
+# `other' documentation, e.g., `meref.me' and `pic.ms', as well as their
+# generated counterparts..
+# make_otherdoc
+# make_install_otherdoc
+# make_uninstall_otherdoc
+
+# `examples' -- a generic switch, but the generated examples are furtherly
+# subdivided to catch HTML and PDF production availability.
+# make_examples
+# make_install_examples
+# make_uninstall_examples
+
+# Windows `.cmd' files
+# make_winscripts
+# make_install_winscripts
+# make_uninstall_winscripts
+
+# All the previous installation directories, when used, are prefixed with
+# $(DESTDIR) during install and uninstall, to support staged installations.
+
+# config.h might set the following defines:
+#
+# WORDS_BIGENDIAN              if your target platform is big-endian
+# IS_EBCDIC_HOST               if the host's encoding is EBCDIC
+#
+# HAVE_DIRECT_H                if you have <direct.h>
+# HAVE_DIRENT_H                if you have <dirent.h>
+# HAVE_CC_INTTYPES_H           if you have a C++ <inttypes.h>
+# HAVE_PROCESS_H               if you have <process.h>
+# HAVE_LIMITS_H                if you have <limits.h>
+# HAVE_CC_LIMITS_H             if you have a C++ <limits.h>
+# HAVE_MATH_H                  if you have <math.h>
+# HAVE_CC_OSFCN_H              if you have a C++ <osfcn.h>
+# HAVE_STDDEF_H                if you have <stddef.h>
+# HAVE_STDLIB_H                if you have <stdlib.h>
+# HAVE_STRING_H                if you have <string.h>
+# HAVE_STRINGS_H               if you have <strings.h>
+# HAVE_SYS_DIR_H               if you have <sys/dir.h>
+# HAVE_SYS_PARAM_H             if you have <sys/param.h>
+# HAVE_SYS_STAT_H              if you have <sys/stat.h>
+# HAVE_SYS_TIME_H              if you have <sys/time.h>
+# HAVE_SYS_TYPES_H             if you have <sys/types.h>
+# HAVE_UNISTD_H                if you have <unistd.h>
+#
+# HAVE_FMOD                    if you have fmod()
+# HAVE_GETCWD                  if you have getcwd()
+# HAVE_GETTIMEOFDAY            if you have gettimeofday()
+# HAVE_ICONV                   if you have iconv()
+# HAVE_ISATTY                  if you have isatty()
+# HAVE_KILL                    if you have kill()
+# HAVE_LANGINFO_CODESET        if you have nl_langinfo()
+# HAVE_MKSTEMP         if you have mkstemp()
+# HAVE_MMAP                    if you have mmap()
+# HAVE_PUTENV                  if you have putenv()
+# HAVE_RENAME                  if you have rename()
+# HAVE_SETLOCALE               if you have setlocale()
+# HAVE_STRCASECMP              if you have strcasecmp()
+# HAVE_STRNCASECMP             if you have strncasecmp()
+# HAVE_STRERROR                if you have strerror()
+# HAVE_STRSEP                  if you have strsep()
+# HAVE_STRTOL                  if you have strtol()
+# HAVE_SYMLINK         if you have symlink()
+#
+# NEED_DECLARATION_GETTIMEOFTODAY
+#                              if your C++ <sys/time.h> doesn't declare
+#                              gettimeofday()
+# NEED_DECLARATION_HYPOT       if your C++ <math.h> doesn't declare hypot()
+# NEED_DECLARATION_PCLOSE      if your C++ <stdio.h> doesn't declare pclose()
+# NEED_DECLARATION_POPEN       if your C++ <stdio.h> doesn't declare popen()
+# NEED_DECLARATION_PUTENV      if your C++ <stdlib.h> doesn't declare
+#                              putenv()
+# NEED_DECLARATION_RAND        if your C++ <stdlib.h> doesn't declare rand()
+# NEED_DECLARATION_SRAND       if your C++ <stdlib.h> doesn't declare srand()
+# NEED_DECLARATION_STRCASECMP  if your C++ <string.h> doesn't declare
+#                              strcasecmp()
+# NEED_DECLARATION_STRNCASECMP
+#                              if your C++ <string.h> doesn't declare
+#                              strncasecmp()
+# NEED_DECLARATION_VFPRINTF    if your C++ <stdio.h> doesn't declare
+#                              vfprintf()
+#
+# HAVE_DECL_GETC_UNLOCKED      if you have getc_unlocked()
+# HAVE_DECL_SYS_SIGLIST        if you have sys_siglist[]
+#
+# HAVE_STRUCT_EXCEPTION        if <math.h> defines struct exception
+# HAVE_SYS_NERR                if you have sysnerr in <errno.h> or <stdio.h>
+# HAVE_SYS_ERRLIST             if you have sys_errlist in <errno.h> or
+#                              <stdio.h>
+# ICONV_CONST=const            if declaration of iconv() needs const
+# LONG_FOR_TIME_T              if localtime() takes a long * not a time_t *
+# RETSIGTYPE=int               if signal handlers return int not void
+# RET_TYPE_SRAND_IS_VOID       if srand() returns void not int
+#
+# WCOREFLAG=0200               if the 0200 bit of the status returned by
+#                              wait() indicates whether a core image was
+#                              produced for a process that was terminated
+#                              by a signal
+#
+# HAVE_WORKING_O_NOATIME      define if <fcntl.h>'s O_NOATIME flag works
+# HAVE_WORKING_O_NOFOLLOW     define if <fcntl.h>'s O_NOFOLLOW flag works
+#
+# uintmax_t=<value>            define to `unsigned long' or `unsigned long
+#                              long' if <inttypes.h> does not exist
+#
+# TRADITIONAL_CPP              if your C++ compiler uses a traditional
+#                              (Reiser) preprocessor
+# ARRAY_DELETE_NEEDS_SIZE      if your C++ doesn't understand `delete []'
+#
+# PAGE=A4                      if the printer's page size is A4
+# GHOSTSCRIPT=gs               the name (and directory if required) of the
+#                              ghostscript program
+
+# Include
+#
+#   {fmod,getcwd,mkstemp,putenv,strcasecmp,
+#    strerror,strncasecmp,strtol}.$(OBJEXT)
+#
+# LIBOBJS
+# in LIBOBJS if your C library is missing the corresponding function.
+
+# `CCC' is the compiler for C++ (.cpp) files.
+CCC=@CXX@
+# CC
+# CFLAGS
+# CPPFLAGS
+# LDFLAGS
+
+# X_CFLAGS
+# X_LIBS
+# X_EXTRA_LIBS
+# X_PRE_LIBS
+
+# YACC
+
+# GREP
+# EGREP
+
+# MAKEINFO
+
+# EXEEXT
+# OBJEXT
+# LIBEXT
+# LIBS
+# LIBM
+# LIBICONV
+# RANLIB
+# INSTALL
+# INSTALL_PROGRAM
+# INSTALL_SCRIPT
+# INSTALL_DATA
+# INSTALL_INFO
+# LN_S
+
+AR=ar
+ETAGS=etags
+ETAGSFLAGS=
+# Flag that tells etags to assume C++.
+ETAGSCCFLAG=-C
+# Full path to perl.
+# PERL
+# PERLVERSION
+# Sed command with which to edit sh scripts.
+# SH_SCRIPT_SED_CMD
+# Sed script to deal with OS dependencies in sh scripts.
+SH_DEPS_SED_SCRIPT=$(top_builddir)/shdeps.sed
+
+# On some platforms we need to set LANG and LC_ALL to C for sed
+SED=\
+  LANG=C \
+  LC_ALL=C \
+  sed
+
+# The program to create directory hierarchies.
+# mkinstalldirs is now in gnulib/build-aux
+
+PURIFY=purify
+PURIFYCCFLAGS=
+#PURIFYCCFLAGS=-g++=yes \
+#  -collector=`dirname \`$(CCC) -print-libgcc-file-name\``/ld
+
+# Add groff and gnulib m4 macros
+ACLOCAL_AMFLAGS = -I m4 -I gnulib_m4
+
+# Common preprocessor flags: gnulib includes, common includes in
+# src/include, and config.h that is generated in the build tree
+AM_CPPFLAGS = \
+  -I$(top_srcdir)/src/include \
+  -I$(top_srcdir)/lib \
+  -I$(top_builddir)/src/include \
+  -I$(top_builddir)/lib
+
+# Define a custom string for rules that call groff in make's silence mode.
+GROFF_V = $(GROFF_V_@AM_V@)
+GROFF_V_ = $(GROFF_V_@AM_DEFAULT_V@)
+GROFF_V_0 = @echo "  GROFF   " $@;
+
+# The following Automake variables will be overloaded by the various
+# .am files
+bin_PROGRAMS =
+nobase_bin_PROGRAMS =
+bin_SCRIPTS =
+dist_bin_SCRIPTS =
+MOSTLYCLEANFILES =
+MOSTLYCLEANADD =
+noinst_LIBRARIES =
+BUILT_SOURCES =
+CLEANFILES =
+# gnulib asks to include this file
+EXTRA_DIST = gnulib_m4/gnulib-cache.m4
+FONTFILES =
+PREFIXMAN1 =
+man1_MANS =
+man5_MANS =
+man7_MANS =
+
+# for lex/yacc
+AM_YFLAGS = -d -v
+
+SUFFIXES =
+
+# tests launched by make check
+check_SCRIPTS =
+check_PROGRAMS =
+TESTS =
+AM_TESTS_ENVIRONMENT = \
+  abs_top_srcdir=$(abs_top_srcdir) \
+  abs_top_builddir=$(abs_top_builddir) \
+  export abs_top_srcdir abs_top_builddir;
+
+# We use Automake's Uniform Naming Scheme.
+#
+# prefixexecbin_PROGRAMS is the list of programs that may have a
+# NAMEPREFIX if an existing non-GNU troff system was detected.
+#
+# This is done by the m4 macro GROFF_G that checks for the presence of
+# GNU Troff built-in \n[.g] macro. If a Unix Troff binary was
+# detected, the following programs and scripts names will have a 'g'
+# prefix: chem, tbl, eqn, neqn, pic, soleimm grn, refer, lookbib,
+# troff, nroff. Also, PROG_PREFIX will be set to 'g' in the generated
+# header defs.h so that these programs could be called correctly.
+#
+# prefixexecbindir is used to temporary install these programs. They
+# are then moved to bindir during the install-exec-hook.  Same thing
+# for the scripts.
+NAMEPREFIX=$(g)
+prefixexecbin_PROGRAMS =
+prefixexecbin_SCRIPTS =
+if USEPROGRAMPREFIX
+# We use datadir because the uninstall rule for the PROGRAMS attempt
+# to cd into prefixexecbindir, and thus if prefixexecbindir is removed
+# two consecutive uninstall would fail
+prefixexecbindir = $(datadir)
+else
+prefixexecbindir = $(bindir)
+endif
+
+# Path to binaries and flags used by contribs and doc to generated doc.
+# These may be overridden if cross-compiling.
+GROFFBIN = $(abs_top_builddir)/groff
+GROFF_BIN_PATH = $(abs_top_builddir)
+PDFMOMBIN = $(abs_top_builddir)/pdfmom
+# The second directories are needed for the case "cd build; ../configure".
+FFLAG=-F$(abs_top_builddir)/font -F$(abs_top_srcdir)/font
+TFLAG=-M$(abs_top_builddir)/tmac -M$(abs_top_srcdir)/tmac
+
+# make builtin variable RM
+if MAKE_DONT_HAVE_RM
+RM = rm -f
+endif
+
+# 'VERSION' is generated by gnulib script git-version-gen, using the
+# command 'git describe':
+#
+# - From a git repository: if the current commit corresponds to a
+#   tag, then 'VERSION' is simply the tag (e.g. 1.22.3).  Otherwise
+#   'VERSION' has the following format:
+#     <tag>-<nb_commits>-<commit>
+#
+#   With:
+#     . tag: the most recent tag reachable from the current commit
+#     . nb_commits: number of commits between the most recent tag and
+#       the current commit.
+#     . current commit, abbreviated.
+#   For example: 1.22.3.real.434-5aafd
+#   The version is stored in .version.
+#
+# - From a tarball, the version is taken from .tarball-version
+#
+# REVISION is the full revision given by git-version-gen, which can
+# have non-alphanumeric symbols.
+#
+# Also see configure.ac for the related SHORT_VERSION macro.
+
+MAJOR_VERSION = `echo $(VERSION) | cut -d . -f 1`
+MINOR_VERSION = `echo $(VERSION) | cut -d . -f 2`
+REVISION      = `echo $(VERSION) | cut -d . -f 3`
+
+# Non-recursive makefile system. See Automake manual '7.3 An
+# Alternative Approach to Subdirectories'. We use a single Makefile.am
+# that includes other .am files, rather than using SUBDIRS.  Note that
+# relative paths in the following .am files are relative to the top
+# source directory.
+
+include $(top_srcdir)/lib/gnulib.mk
+include $(top_srcdir)/arch/mingw/mingw.am
+include $(top_srcdir)/arch/misc/misc.am
+include $(top_srcdir)/contrib/chem/chem.am
+include $(top_srcdir)/contrib/eqn2graph/eqn2graph.am
+include $(top_srcdir)/contrib/gdiffmk/gdiffmk.am
+include $(top_srcdir)/contrib/glilypond/glilypond.am
+include $(top_srcdir)/contrib/gperl/gperl.am
+include $(top_srcdir)/contrib/gpinyin/gpinyin.am
+include $(top_srcdir)/contrib/grap2graph/grap2graph.am
+include $(top_srcdir)/contrib/groff_filenames/groff_filenames.am
+include $(top_srcdir)/contrib/groffer/groffer.am
+include $(top_srcdir)/contrib/hdtbl/hdtbl.am
+include $(top_srcdir)/contrib/mm/mm.am
+include $(top_srcdir)/contrib/mom/mom.am
+include $(top_srcdir)/contrib/pdfmark/pdfmark.am
+include $(top_srcdir)/contrib/pic2graph/pic2graph.am
+include $(top_srcdir)/doc/doc.am
+include $(top_srcdir)/font/devX100/devX100.am
+include $(top_srcdir)/font/devX100-12/devX100-12.am
+include $(top_srcdir)/font/devX75/devX75.am
+include $(top_srcdir)/font/devX75-12/devX75-12.am
+include $(top_srcdir)/font/devascii/devascii.am
+include $(top_srcdir)/font/devcp1047/devcp1047.am
+include $(top_srcdir)/font/devdvi/devdvi.am
+include $(top_srcdir)/font/devhtml/devhtml.am
+include $(top_srcdir)/font/devlatin1/devlatin1.am
+include $(top_srcdir)/font/devlbp/devlbp.am
+include $(top_srcdir)/font/devlj4/devlj4.am
+include $(top_srcdir)/font/devpdf/devpdf.am
+include $(top_srcdir)/font/devps/devps.am
+include $(top_srcdir)/font/devutf8/devutf8.am
+include $(top_srcdir)/font/scripts/scripts.am
+include $(top_srcdir)/man/man.am
+include $(top_srcdir)/src/include/include.am
+include $(top_srcdir)/src/libs/libbib/libbib.am
+include $(top_srcdir)/src/libs/libdriver/libdriver.am
+include $(top_srcdir)/src/libs/libgroff/libgroff.am
+include $(top_srcdir)/src/libs/libxutil/libxutil.am
+include $(top_srcdir)/src/devices/grodvi/grodvi.am
+include $(top_srcdir)/src/devices/grohtml/grohtml.am
+include $(top_srcdir)/src/devices/grolbp/grolbp.am
+include $(top_srcdir)/src/devices/grolj4/grolj4.am
+include $(top_srcdir)/src/devices/gropdf/gropdf.am
+include $(top_srcdir)/src/devices/grops/grops.am
+include $(top_srcdir)/src/devices/grotty/grotty.am
+include $(top_srcdir)/src/devices/xditview/xditview.am
+include $(top_srcdir)/src/preproc/eqn/eqn.am
+include $(top_srcdir)/src/preproc/grn/grn.am
+include $(top_srcdir)/src/preproc/html/html.am
+include $(top_srcdir)/src/preproc/pic/pic.am
+include $(top_srcdir)/src/preproc/preconv/preconv.am
+include $(top_srcdir)/src/preproc/refer/refer.am
+include $(top_srcdir)/src/preproc/soelim/soelim.am
+include $(top_srcdir)/src/preproc/tbl/tbl.am
+include $(top_srcdir)/src/roff/groff/groff.am
+include $(top_srcdir)/src/roff/grog/grog.am
+include $(top_srcdir)/src/roff/nroff/nroff.am
+include $(top_srcdir)/src/roff/troff/troff.am
+include $(top_srcdir)/src/utils/addftinfo/addftinfo.am
+include $(top_srcdir)/src/utils/afmtodit/afmtodit.am
+include $(top_srcdir)/src/utils/hpftodit/hpftodit.am
+include $(top_srcdir)/src/utils/indxbib/indxbib.am
+include $(top_srcdir)/src/utils/lkbib/lkbib.am
+include $(top_srcdir)/src/utils/lookbib/lookbib.am
+include $(top_srcdir)/src/utils/pfbtops/pfbtops.am
+include $(top_srcdir)/src/utils/tfmtodit/tfmtodit.am
+include $(top_srcdir)/src/utils/xtotroff/xtotroff.am
+include $(top_srcdir)/tmac/tmac.am
+
+# Adding defs.h to BUILT_SOURCES will ensure that it will be built on
+# make all or make check before all other targets. However, if another
+# target is built from a clean build tree, (for example make groff)
+# the files in BUILT_SOURCES will not be built first. That is why
+# additional dependencies where added in the .am files that lists
+# objects that use defs (for exmaple in groff.am:
+# src/roff/groff/groff.$(OBJEXT): defs.h)
+BUILT_SOURCES += defs.h
+
+# Force generation of test-groff even though we don't ship it.
+BUILT_SOURCES += test-groff
+
+# if there is a name prefix we install the man pages by hand
+all: generate_man_files
+install-data-hook: install-prefix-man
+uninstall-hook: uninstall-prefix-man
+if USEPROGRAMPREFIX
+generate_man_files: $(PREFIXMAN1)
+install-prefix-man:
+       for f in $(PREFIXMAN1); do \
+         cp -f $$f $(DESTDIR)$(man1dir)/$(NAMEPREFIX)`basename $$f`; \
+       done
+uninstall-prefix-man:
+       for f in $(PREFIXMAN1); do \
+         rm -f $(DESTDIR)$(man1dir)/$(NAMEPREFIX)`basename $$f`; \
+       done
+else
+man1_MANS += $(PREFIXMAN1)
+install-prefix-man:
+uninstall-prefix-man:
+generate_man_files:
+endif
+
+# Hook to create the 'current' symlink
+install-data-hook: create_current_symlink
+create_current_symlink:
+       cd $(DESTDIR)$(dataprogramdir); \
+         rm -f current; \
+         $(LN_S) $(SHORT_VERSION) current
+
+# Hook to move the binaries that potentially have a prefix from
+# prefixexecbindir to bindir.
+install-exec-hook: move_binaries_with_prefix
+move_binaries_with_prefix:
+if USEPROGRAMPREFIX
+       if test -n "$(NAMEPREFIX)"; then \
+          for f in $(prefixexecbin_PROGRAMS) $(prefixexecbin_SCRIPTS); do \
+             mv -f $(DESTDIR)$(prefixexecbindir)/$$f$(EXEEXT) \
+                $(DESTDIR)$(bindir)/$(NAMEPREFIX)$$f$(EXEEXT); \
+          done \
+       fi
+endif
+
+# Always create the site-font directory as a guide to the user.
+install-data-hook: install_site_font
+install_site_font:
+       -test -d $(DESTDIR)$(localfontdir) \
+         || $(mkinstalldirs) $(DESTDIR)$(localfontdir)
+
+# Create systemtmacdir if not present
+install-data-hook: install_tmacdir
+install_tmacdir:
+       -test -d $(DESTDIR)$(systemtmacdir) \
+         || $(mkinstalldirs) $(DESTDIR)$(systemtmacdir)
+
+# directories specific to groff
+uninstall-hook: uninstall_groffdirs
+uninstall_groffdirs:
+       if test -d $(DESTDIR)$(datasubdir); then \
+         rm -rf $(DESTDIR)$(fontdir); \
+         rm -rf $(DESTDIR)$(oldfontdir); \
+         rmdir $(DESTDIR)$(datasubdir); \
+       fi
+       if test -d $(DESTDIR)$(dataprogramdir); then \
+         if test -h $(DESTDIR)$(dataprogramdir)/current; then \
+           rm -f $(DESTDIR)$(dataprogramdir)/current; \
+         fi; \
+         if test -d $(DESTDIR)$(localfontdir); then \
+           rm -f $(DESTDIR)$(localfontdir)/*; \
+           rmdir $(DESTDIR)$(localfontdir); \
+         fi; \
+         rmdir $(DESTDIR)$(dataprogramdir); \
+       fi
+       if test -d $(DESTDIR)$(grog_dir); then \
+         rmdir $(DESTDIR)$(grog_dir); \
+       fi
+       if test -d $(DESTDIR)$(libprogramdir); then \
+         if test -d $(DESTDIR)$(systemtmacdir); then \
+           rm -f $(DESTDIR)$(systemtmacdir)/*; \
+           rmdir $(DESTDIR)$(systemtmacdir); \
+         fi; \
+         rmdir $(DESTDIR)$(libprogramdir); \
+       fi
+       if test -d $(DESTDIR)$(docdir); then \
+         if test -d $(DESTDIR)$(exampledir); then \
+           rmdir $(DESTDIR)$(exampledir); \
+         fi; \
+         if test -d $(DESTDIR)$(htmldocdir); then \
+           rmdir $(DESTDIR)$(htmldocdir); \
+         fi; \
+         rmdir $(DESTDIR)$(docdir); \
+       fi
+
+# Uninstall program that have a 'g' prefix
+uninstall-hook: uninstall_binaries_with_prefix
+uninstall_binaries_with_prefix:
+if USEPROGRAMPREFIX
+       if test -n "$(NAMEPREFIX)"; then \
+          for f in $(prefixexecbin_PROGRAMS) $(prefixexecbin_SCRIPTS); do \
+             rm -f $(DESTDIR)$(bindir)/$(NAMEPREFIX)$$f$(EXEEXT); \
+          done; \
+       fi
+endif
+
+# Other files that should be present in the distribution tarball.
+EXTRA_DIST += \
+  BUG-REPORT \
+  ChangeLog.115 \
+  ChangeLog.116 \
+  ChangeLog.117 \
+  ChangeLog.118 \
+  ChangeLog.119 \
+  ChangeLog.120 \
+  ChangeLog.121 \
+  FDL \
+  FOR-RELEASE \
+  gendef.sh \
+  INSTALL.REPO \
+  INSTALL.extra \
+  LICENSES \
+  MANIFEST \
+  mdate.pl \
+  MORE.STUFF \
+  PROBLEMS \
+  PROJECTS \
+  README.MinGW \
+  arch/djgpp \
+  font/util/make-Rproto \
+  makevarescape.sed
+
+MOSTLYCLEANFILES += $(prefixexecbin_SCRIPTS) $(bin_SCRIPTS) \
+  $(man1_MANS) $(man5_MANS) $(man7_MANS) \
+  $(PREFIXMAN1) \
+  test-groff
+
+# Suffix rule to build .1, .5 and .7 files from .1.man, .5.man and
+# .7.man files.  The brackets around the @ are used to prevent the
+# substitution of the variable by automake.
+#
+# The sed script transforms - to \-, ~ to \(ti, and so forth, (with an
+# extra layer of backslashes--see below) so that Makefile variables
+# containing ASCII characters that do not represent themselves literally
+# in *roff (see groff_char(7)) are correctly interpolated into man page
+# text.
+#
+# Note that while the script, combined with this target, will transform
+# ` to \(ga, including grave accents in Makefile variables is likely to
+# fail when the shell lexes the argument to echo within the old-style
+# command substitution `` below.  Testing shows that grave accents
+# should work* if POSIX-style command substitution $() is done instead.
+# However, $() is less portable.  (Triple-escaping grave accents \\\`
+# inside the interpolated Makefile variable will work, but is not
+# attempted here.)
+#
+# Note also that the amount of backslash-escaping in the sed script is
+# excessive (and incorrect) for normal purposes, but required here
+# because a command substitution is being nested inside yet another
+# invocation of sed.
+#
+# * For this target; no assurances about the good behavior of unusual
+#   characters in Makefile variables in other aspects of the groff build
+#   are offered.
+makevarescape=$(top_srcdir)/makevarescape.sed
+
+SUFFIXES += .man
+.man:
+       $(AM_V_GEN)rm -f $@ \
+       && $(MKDIR_P) `dirname $@` \
+       && LC_ALL=C \
+        sed -e "s|[@]APPRESDIR[@]|`echo $(appresdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]BINDIR[@]|`echo $(bindir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]COMMON_WORDS_FILE[@]|`echo $(common_words_file) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]DATASUBDIR[@]|`echo $(datasubdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]DEFAULT_INDEX[@]|`echo $(indexdir)/$(indexname) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]DEFAULT_INDEX_NAME[@]|`echo $(indexname) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]DEVICE[@]|$(DEVICE)|g" \
+            -e "s|[@]DOCDIR[@]|`echo $(docdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]EXAMPLEDIR[@]|`echo $(exampledir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]FONTDIR[@]|`echo $(fontdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]g[@]|$(g)|g" \
+            -e "s![@]G[@]!`echo $(g) | tr '[a-z]' '[A-Z]'`!g" \
+            -e "s|[@]HTMLDOCDIR[@]|`echo $(htmldocdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]INDEX_SUFFIX[@]|$(indexext)|g" \
+            -e "s|[@]LEGACYFONTDIR[@]|`echo $(legacyfontdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]LOCALFONTDIR[@]|`echo $(localfontdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]LOCALMACRODIR[@]|`echo $(localtmacdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]MACRODIR[@]|`echo $(tmacdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]MAN1EXT[@]|$(man1ext)|g" \
+            -e "s|[@]MAN5EXT[@]|$(man5ext)|g" \
+            -e "s|[@]MAN7EXT[@]|$(man7ext)|g" \
+            -e "s|[@]MDATE[@]|`$(PERL) $(top_srcdir)/mdate.pl $<`|g" \
+            -e "s|[@]OLDFONTDIR[@]|`echo $(oldfontdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]PDFDOCDIR[@]|`echo $(pdfdocdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]SYSTEMMACRODIR[@]|`echo $(systemtmacdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]TMAC_AN_PREFIX[@]|$(tmac_an_prefix)|g" \
+            -e "s|[@]TMAC_M_PREFIX[@]|$(tmac_m_prefix)|g" \
+            -e "s|[@]TMAC_MDIR[@]|$(tmacdir)/mm|g" \
+            -e "s|[@]TMAC_S_PREFIX[@]|$(tmac_s_prefix)|g" \
+            -e "s|[@]VERSION[@]|$(VERSION)|g" \
+            $< \
+            >$@
+
+# Version files - see script 'build-aux/git-gen-version'
+EXTRA_DIST += $(top_srcdir)/.version
+BUILT_SOURCES += $(top_srcdir)/.version
+$(top_srcdir)/.version:
+       echo $(VERSION) > $@-t && mv $@-t $@
+dist-hook:
+       echo $(VERSION) > $(distdir)/.tarball-version
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/Makefile.ccpg b/Makefile.ccpg
deleted file mode 100644 (file)
index 12931b4..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.ccpg
-#
-MAKEFILEPARTS=\
-  $(top_srcdir)/Makefile.comm \
-  $(top_builddir)/Makefile.cfg \
-  $(srcdir)/Makefile.sub \
-  $(top_srcdir)/Makefile.ccpg \
-  Makefile.dep
-
-all: $(PROG) $(MANPAGES)
-
-$(PROG): $(OBJS) $(XLIBS)
-       $(LINK.cpp) -o $@ $(OBJS) $(XLIBS) $(EXTRA_LDFLAGS) $(LIBS) $(MLIB)
-
-install_bin: install_prog
-install_prog: $(PROG)
-install_data: install_man
-install_man: $(MANPAGES)
-uninstall_sub: uninstall_prog uninstall_man
-depend: depend_src
-depend.temp: $(GENSRCS) $(YTABC)
-distfiles: $(YTABC)
-TAGS: TAGS_src
-TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
-Makefile: $(MAKEFILEPARTS)
-Makefile.dep:
-       touch Makefile.dep
-$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION \
-               $(top_srcdir)/REVISION
-
-pure: $(PROG).pure
-
-$(PROG).pure: $(OBJS) $(XLIBS)
-       $(PURIFY) $(PURIFYCCFLAGS) \
-         $(LINK.cpp) -o $@ $(OBJS) $(XLIBS) $(LIBS) $(MLIB)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/Makefile.comm b/Makefile.comm
deleted file mode 100644 (file)
index 75efc22..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.comm
-#
-INCLUDES=-I. -I$(srcdir) \
-  -I$(top_builddir)/src/include -I$(top_srcdir)/src/include \
-  -I$(top_builddir)/src/libs/gnulib/lib
-ALL_CCFLAGS=$(INCLUDES) $(CCDEFINES) $(CCFLAGS) $(CPPFLAGS)
-COMPILE.cpp=$(CCC) $(ALL_CCFLAGS) -c
-ALL_CFLAGS=$(INCLUDES) $(CDEFINES) $(CFLAGS) $(CPPFLAGS)
-COMPILE.c=$(CC) $(ALL_CFLAGS) -c
-LINK.cpp=$(CCC) $(CCFLAGS) $(LDFLAGS)
-LINK.c=$(CC) $(CFLAGS) $(LDFLAGS)
-LIBGROFF=$(top_builddir)/src/libs/libgroff/libgroff.$(LIBEXT)
-LIBBIB=$(top_builddir)/src/libs/libbib/libbib.$(LIBEXT)
-LIBDRIVER=$(top_builddir)/src/libs/libdriver/libdriver.$(LIBEXT)
-LIBXUTIL=$(top_builddir)/src/libs/libxutil/libxutil.$(LIBEXT)
-LIBGNU=$(top_builddir)/src/libs/gnulib/lib/libgnu.$(LIBEXT)
-MLIB=
-XLIBS=
-YTABH=
-YTABC=
-GRAM=
-LIBCLEAN=
-MOSTLYCLEANADD=
-MOSTLYCLEANDIRADD=
-MOSTLYCLEANNOTSRCDIRADD=
-MOSTLYCLEANFILES=$(MANCLEAN) $(PROG) $(OBJS) $(GENSRCS) $(GENHDRS) \
-  depend.temp core y.output $(MOSTLYCLEANADD)
-CLEANFILES=$(LIBCLEAN)
-DISTCLEANFILES=TAGS Makefile Makefile.dep
-REALCLEANFILES=$(YTABC) $(YTABH)
-NAMEPREFIX=
-HDRS=
-MANPAGES=$(MAN1) $(MAN5) $(MAN7)
-MANCLEAN=$(MANPAGES)
-fontsubdir=$(fontdir)/dev$(DEV)
-oldfontsubdir=$(oldfontdir)/dev$(DEV)
-
-all do_install install_bin install_data TAGS depend distfiles uninstall_sub:
-
-do_install: install_bin install_data
-uninstall: uninstall_sub
-pure:
-fonts:
-
-.PHONY: all clean distclean mostlyclean realclean extraclean depend distfiles
-.PHONY: install install_bin install_data
-.PHONY: uninstall uninstall_sub
-.PHONY: pure fonts
-
-mostlyclean:
-       rm -f $(MOSTLYCLEANFILES)
-       -rm -rf $(MOSTLYCLEANDIRADD)
-       -@if test "`cd $(srcdir); pwd`" != "`pwd`"; then \
-         rm -f $(MOSTLYCLEANNOTSRCDIRADD); \
-       fi
-
-clean: mostlyclean
-       rm -f $(CLEANFILES)
-
-distclean: clean
-       rm -f $(DISTCLEANFILES)
-       -@if test "`cd $(srcdir); pwd`" != "`pwd`"; then \
-         rm -f $(YTABC) $(YTABH); \
-       fi
-
-realclean: distclean
-       rm -f $(REALCLEANFILES)
-
-extraclean: distclean
-       rm -f \#* *~ =* core junk grot temp tmp tem *.new *.old *.orig
-
-.SUFFIXES:
-.SUFFIXES: .o .obj .cpp .c .y .man .n
-
-.cpp.o:
-       $(COMPILE.cpp) $(EXTRA_CCFLAGS) $<
-
-.c.o:
-       $(COMPILE.c) $(EXTRA_CFLAGS) $<
-
-.cpp.obj:
-       $(COMPILE.cpp) $(EXTRA_CCFLAGS) $<
-
-.c.obj:
-       $(COMPILE.c) $(EXTRA_CFLAGS) $<
-
-.y.cpp:
-       if test -n "$(YTABH)"; then \
-         $(YACC) $(YACCFLAGS) -d $<; \
-       else \
-         $(YACC) $(YACCFLAGS) $<; \
-       fi
-       -test -f y.tab.h && mv y.tab.h y_tab.h
-       -test -f y.tab.c && mv y.tab.c y_tab.c
-       sed "s/^#line \(.*\) \"y.tab.c\"/#line \1 \"$(YTABC)\"/" \
-         < y_tab.c > $(YTABC)
-       rm -f y_tab.c
-       test -z "$(YTABH)" || mv y_tab.h $(YTABH)
-
-# The next rule is needed for make of Solaris 2.5.1 to override its
-# built-in .y.o rule (which takes precedence over the .y.cpp rule above).
-.y.o:
-       if test -n "$(YTABH)"; then \
-         $(YACC) $(YACCFLAGS) -d $<; \
-       else \
-         $(YACC) $(YACCFLAGS) $<; \
-       fi
-       -test -f y.tab.h && mv y.tab.h y_tab.h
-       -test -f y.tab.c && mv y.tab.c y_tab.c
-       mv y_tab.c $(YTABC)
-       test -z "$(YTABH)" || mv y_tab.h $(YTABH)
-       $(COMPILE.cpp) $(EXTRA_CCFLAGS) $(YTABC)
-
-.man.n:
-       @echo Making $@ from $<
-       @rm -f $@
-       @LC_ALL=C \
-        sed -e "s|@APPRESDIR@|$(appresdir)|g" \
-            -e "s|@BINDIR@|$(bindir)|g" \
-            -e "s|@BROKEN_SPOOLER_FLAGS@|$(BROKEN_SPOOLER_FLAGS)|g" \
-            -e "s|@COMMON_WORDS_FILE@|$(common_words_file)|g" \
-            -e "s|@DATASUBDIR@|$(datasubdir)|g" \
-            -e "s|@DEFAULT_INDEX@|$(indexdir)/$(indexname)|g" \
-            -e "s|@DEFAULT_INDEX_NAME@|$(indexname)|g" \
-            -e "s|@DEVICE@|$(DEVICE)|g" \
-            -e "s|@DOCDIR@|$(docdir)|g" \
-            -e "s|@EXAMPLEDIR@|$(exampledir)|g" \
-            -e "s|@FONTDIR@|$(fontdir)|g" \
-            -e "s|@g@|$(g)|g" \
-            -e "s!@G@!`echo $(g) | tr [a-z] [A-Z]`!g" \
-            -e "s|@HTMLDOCDIR@|$(htmldocdir)|g" \
-            -e "s|@INDEX_SUFFIX@|$(indexext)|g" \
-            -e "s|@LEGACYFONTDIR@|$(legacyfontdir)|g" \
-            -e "s|@LOCALFONTDIR@|$(localfontdir)|g" \
-            -e "s|@LOCALMACRODIR@|$(localtmacdir)|g" \
-            -e "s|@MACRODIR@|$(tmacdir)|g" \
-            -e "s|@MAN1EXT@|$(man1ext)|g" \
-            -e "s|@MAN5EXT@|$(man5ext)|g" \
-            -e "s|@MAN7EXT@|$(man7ext)|g" \
-            -e "s|@MDATE@|`$(SHELL) $(top_srcdir)/mdate.sh $<`|g" \
-            -e "s|@OLDFONTDIR@|$(oldfontdir)|g" \
-            -e "s|@PDFDOCDIR@|$(pdfdocdir)|g" \
-            -e "s|@SYSTEMMACRODIR@|$(systemtmacdir)|g" \
-            -e "s|@TMAC_AN_PREFIX@|$(tmac_an_prefix)|g" \
-            -e "s|@TMAC_M_PREFIX@|$(tmac_m_prefix)|g" \
-            -e "s|@TMAC_MDIR@|$(tmacdir)/mm|g" \
-            -e "s|@TMAC_S_PREFIX@|$(tmac_s_prefix)|g" \
-            -e "s|@VERSION@|$(version)$(revision)|g" \
-        $< >$@
-
-.PHONY: install_man
-install_man:
-       -test -d $(DESTDIR)$(manroot) || $(mkinstalldirs) $(DESTDIR)$(manroot)
-       -test -d $(DESTDIR)$(man1dir) || $(mkinstalldirs) $(DESTDIR)$(man1dir)
-       @-pages="$(MAN1)"; \
-        for p in $$pages; do \
-          prog=`basename $$p .n`; \
-          target=$(DESTDIR)$(man1dir)/$(NAMEPREFIX)$$prog.$(man1ext); \
-          rm -f $$target; \
-          echo $(INSTALL_DATA) $$p $$target; \
-          $(INSTALL_DATA) $$p $$target; \
-       done
-       -test -d $(DESTDIR)$(man5dir) || $(mkinstalldirs) $(DESTDIR)$(man5dir)
-       @-pages="$(MAN5)"; \
-        for p in $$pages; do \
-          target=$(DESTDIR)$(man5dir)/`basename $$p .n`.$(man5ext); \
-          rm -f $$target; \
-          echo $(INSTALL_DATA) $$p $$target; \
-          $(INSTALL_DATA) $$p $$target; \
-       done
-       -test -d $(DESTDIR)$(man7dir) || $(mkinstalldirs) $(DESTDIR)$(man7dir)
-       @-pages="$(MAN7)"; \
-        for p in $$pages; do \
-          target=$(DESTDIR)$(man7dir)/`basename $$p .n`.$(man7ext); \
-          rm -f $$target; \
-          echo $(INSTALL_DATA) $$p $$target; \
-          $(INSTALL_DATA) $$p $$target; \
-       done
-
-.PHONY: uninstall_man
-uninstall_man:
-       @-pages="$(MAN1)"; \
-        for p in $$pages; do \
-          target=$(DESTDIR)$(man1dir)/$(NAMEPREFIX); \
-          target=$$target`basename $$p .n`.$(man1ext); \
-          echo rm -f $$target; \
-          rm -f $$target; \
-        done
-       @-pages="$(MAN5)"; \
-        for p in $$pages; do \
-          target=$(DESTDIR)$(man5dir)/`basename $$p .n`.$(man5ext); \
-          echo rm -f $$target; \
-          rm -f $$target; \
-        done
-       @-pages="$(MAN7)"; \
-        for p in $$pages; do \
-          target=$(DESTDIR)$(man7dir)/`basename $$p .n`.$(man7ext); \
-          echo rm -f $$target; \
-          rm -f $$target; \
-       done
-
-.PHONY: install_prog
-install_prog:
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       rm -f $(DESTDIR)$(bindir)/$(NAMEPREFIX)$(PROG)
-       $(INSTALL_PROGRAM) $(PROG) $(DESTDIR)$(bindir)/$(NAMEPREFIX)$(PROG)
-
-.PHONY: uninstall_prog
-uninstall_prog:
-       rm -f $(DESTDIR)$(bindir)/$(NAMEPREFIX)$(PROG)
-
-.PHONY: install_dev
-install_dev:
-       -test -d $(DESTDIR)$(datadir) \
-         || $(mkinstalldirs) $(DESTDIR)$(datadir)
-       -test -d $(DESTDIR)$(dataprogramdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(dataprogramdir)
-       -test -d $(DESTDIR)$(datasubdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(datasubdir)
-       -test -d $(DESTDIR)$(fontdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(fontdir)
-       -test -d $(DESTDIR)$(fontsubdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)
-       -if test -d $(srcdir)/generate; then \
-         test -d $(DESTDIR)$(fontsubdir)/generate \
-           || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/generate; \
-       fi
-       -if test -d $(srcdir)/enc; then \
-         test -d $(DESTDIR)$(fontsubdir)/enc \
-           || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/enc; \
-       fi
-       -if test -d $(srcdir)/map; then \
-         test -d $(DESTDIR)$(fontsubdir)/map \
-           || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/map; \
-       fi
-       -if test -d $(srcdir)/util; then \
-         test -d $(DESTDIR)$(fontsubdir)/util \
-           || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/util; \
-       fi
-       -if test -d $(srcdir)/old; then \
-         test -d $(DESTDIR)$(oldfontdir) \
-           || $(mkinstalldirs) $(DESTDIR)$(oldfontdir); \
-         test -d $(DESTDIR)$(oldfontsubdir) \
-           || $(mkinstalldirs) $(DESTDIR)$(oldfontsubdir); \
-       fi
-       -test -z "$(DEVFILES)" \
-         || for f in ""$(DEVFILES); do \
-              rm -f $(DESTDIR)$(fontsubdir)/$$f; \
-              if test -f $$f; then \
-                $(INSTALL_DATA) $$f $(DESTDIR)$(fontsubdir)/$$f; \
-              else \
-                $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(fontsubdir)/$$f; \
-              fi; \
-            done
-       -test -z "$(OLDDEVFILES)" \
-         || for f in ""$(OLDDEVFILES); do \
-              rm -f $(DESTDIR)$(oldfontsubdir)/$$f; \
-              $(INSTALL_DATA) $(srcdir)/old/$$f \
-                $(DESTDIR)$(oldfontsubdir)/$$f; \
-            done
-       -test -z "$(DEVSCRIPTS)" \
-         || for f in ""$(DEVSCRIPTS); do \
-              rm -f $(DESTDIR)$(fontsubdir)/$$f; \
-              if test -f $$f; then \
-                $(INSTALL_SCRIPT) $$f $(DESTDIR)$(fontsubdir)/$$f; \
-              else \
-                $(INSTALL_SCRIPT) $(srcdir)/$$f $(DESTDIR)$(fontsubdir)/$$f; \
-              fi; \
-            done
-
-.PHONY: uninstall_dev
-uninstall_dev:
-       -test -z "$(DEVFILES)$(DEVSCRIPTS)" \
-         || for f in ""$(DEVFILES) $(DEVSCRIPTS); do \
-              rm -f $(DESTDIR)$(fontsubdir)/$$f; \
-            done
-       -test -z "$(OLDDEVFILES)" \
-         || for f in ""$(OLDDEVFILES); do \
-              rm -f $(DESTDIR)$(oldfontsubdir)/$$f; \
-            done
-       -d=$(DESTDIR)$(fontsubdir)/generate;\
-         if test -d $$d; then rmdir $$d; fi
-       -d=$(DESTDIR)$(fontsubdir)/enc;\
-         if test -d $$d; then rmdir $$d; fi
-       -d=$(DESTDIR)$(fontsubdir)/map;\
-         if test -d $$d; then rmdir $$d; fi
-       -d=$(DESTDIR)$(fontsubdir)/util;\
-         if test -d $$d; then rmdir $$d; fi
-       -test -d $(DESTDIR)$(fontsubdir) $$ \
-         rmdir $(DESTDIR)$(fontsubdir)
-       -d=$(DESTDIR)$(oldfontsubdir);\
-         if test -d $$d; then rmdir $$d; fi
-
-.PHONY: depend_src
-depend_src: depend.temp
-       mv depend.temp Makefile.dep
-
-depend.temp: FORCE
-       > depend.temp
-       if test -f "$(srcdir)/$(YTABC)"; then \
-         ytabc="$(srcdir)/$(YTABC)"; \
-       else \
-         ytabc="$(YTABC)"; \
-       fi; \
-       test -z "$(CCSRCS)$(YTABC)" \
-         || $(CCC) $(ALL_CCFLAGS) $(EXTRA_CCFLAGS) -MM $(CCSRCS) $$ytabc \
-            >>depend.temp
-       test -z "$(CSRCS)" \
-         || $(CC) $(ALL_CFLAGS) $(EXTRA_CFLAGS) -MM $(CSRCS) >>depend.temp
-       test -z "$(YTABH)" \
-         || (sed -e 's|$(YTABH)|$(YTABC)|g' depend.temp >depend1.temp; \
-             mv depend1.temp depend.temp)
-
-.PHONY: TAGS_src
-TAGS_src:
-       $(ETAGS) $(ETAGSFLAGS) $(CCSRCS) $(CSRCS)
-       test -z "$(GRAM)$(HDRS)" \
-         || $(ETAGS) $(ETAGSFLAGS) -a $(ETAGSCCFLAG) $(GRAM) $(HDRS)
-
-# This rule is only considered for the subdir_Makefile target.
-Makefile:
-       echo srcdir=$(srcdir) >Makefile
-       echo VPATH=$(VPATH) >>Makefile
-       cat $(MAKEFILEPARTS) /dev/null >>Makefile
-
-FORCE:
-
-.NOEXPORT:
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/Makefile.cpg b/Makefile.cpg
deleted file mode 100644 (file)
index 6a2332a..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.cpg
-#
-MAKEFILEPARTS=\
-  $(top_srcdir)/Makefile.comm \
-  $(top_builddir)/Makefile.cfg \
-  $(srcdir)/Makefile.sub \
-  $(top_srcdir)/Makefile.cpg \
-  Makefile.dep
-
-all: $(PROG) $(MANPAGES)
-
-$(PROG): $(OBJS) $(XLIBS)
-       $(LINK.c) -o $@ $(OBJS) $(XLIBS) $(EXTRA_LDFLAGS) $(LIBS) $(MLIB)
-
-install_bin: install_prog
-install_prog: $(PROG)
-install_data: install_man
-install_man: $(MANPAGES)
-uninstall_sub: uninstall_prog uninstall_man
-depend: depend_src
-depend.temp: $(GENSRCS) $(YTABC)
-distfiles: $(YTABC)
-TAGS: TAGS_src
-TAGS_src: $(CCSRCS) $(CSRCS) $(GRAM) $(HDRS)
-Makefile: $(MAKEFILEPARTS)
-Makefile.dep:
-       touch Makefile.dep
-$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION \
-               $(top_srcdir)/REVISION
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/Makefile.dev b/Makefile.dev
deleted file mode 100644 (file)
index 43be225..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#   Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.dev
-#
-all: $(DEVFILES) $(DEVSCRIPTS)
-install_data: install_dev
-uninstall_sub: uninstall_dev
-install_dev: $(DEVFILES) $(DEVSCRIPTS)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index bc156ce35e6468d413c308953508029cf25b75cd..505e9c30871865517fdd500aae48777848cb8202 100644 (file)
@@ -1,5 +1,24 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#   Written by James Clark (jjc@jclark.com)
+# Makefile.in generated by automake 1.16.1 from Makefile.am.
+# @configure_input@
+
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
+
+# This Makefile.in is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+@SET_MAKE@
+
+# Copyright (C) 1989-2018 Free Software Foundation, Inc.
+# Original Makefile.in written by James Clark (jjc@jclark.com)
+# Migrated to Automake by Bertrand Garrigues
+#
+# Last update: 2017-11-02
 #
 # This file is part of groff.
 #
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
-# Makefile.in
+# Makefile.am
 #
-SHELL=@SHELL@
-
-PACKAGE_TARNAME=@PACKAGE_TARNAME@
-
-srcdir=@srcdir@
-top_srcdir=@abs_top_srcdir@
-VPATH=@srcdir@
-top_builddir=@abs_top_builddir@
 
-# `HOST' is the canonical host specification,
-#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-HOST=@host@
+# The variables that are listed in the following comments will be
+# automatically set by automake in the generated Makefile.in
 
-# `RT_SEP' is the operating system's native PATH SEPARATOR CHAR, which
-# is to be used in runtime PATHs compiled into groff executables.
-RT_SEP=@GROFF_PATH_SEPARATOR@
-
-# `SH_SEP' is a alternative PATH SEPARATOR CHAR, to be used in shell
-# scripts and makefile rules; it may be the same as `RT_SEP', but,
-# particularly in some Microsoft environments, it may differ.
-SH_SEP=@PATH_SEPARATOR@
+# SHELL
 
-# `GLIBC21' is yes if the host operating system uses GNU libc 2.1 or newer,
-# otherwise no.
-GLIBC21=@GLIBC21@
+# PACKAGE_TARNAME
 
-version=`cat $(top_srcdir)/VERSION`
-# No additional number if revision is zero.
-revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
+# srcdir
 
-# Define `page' to be letter if your PostScript printer uses 8.5x11
-# paper (USA) and define it to be A4, if it uses A4 paper (rest of the
-# world).
-PAGE=@PAGE@
+# top_srcdir
 
-# The name of the ghostscript program. Normally, gs, on GNU/Linux
-# but it might be different on MS-DOS/MS-WIN32 systems.
-GHOSTSCRIPT=@GHOSTSCRIPT@
+# VPATH
 
-# `ALT_GHOSTSCRIPT_PROGS' specifies a list alternative names,
-# which can be tried if `GHOSTSCRIPT' cannot be found at run time.
-ALT_GHOSTSCRIPT_PROGS=@ALT_GHOSTSCRIPT_PROGS@
+# top_builddir
 
-# Similarly, `ALT_AWK_PROGS' specifies a list of alternative names,
-# which can be tried at run time, to identify the awk program.
-ALT_AWK_PROGS=@ALT_AWK_PROGS@
+# HOST
+# `HOST' is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
 
-# Normally the Postscript driver, grops, produces output that conforms
-# to version 3.0 of the Adobe Document Structuring Conventions.
-# Unfortunately some spoolers and previewers can't handle such output.
-# The BROKEN_SPOOLER_FLAGS variable tells grops what it should do to
-# make its output acceptable to such programs.  This variable controls
-# only the default behaviour of grops; the behaviour can be changed at
-# runtime by the grops -b option (and so by groff -P-b).
-# Use a value of 0 if your spoolers and previewers are able to handle
-# conforming PostScript correctly.
-# Add 1 if no %%{Begin,End}DocumentSetup comments should be generated;
-# this is needed for early versions of TranScript that get confused by
-# anything between the %%EndProlog line and the first %%Page: comment.
-# Add 2 if lines in included files beginning with %! should be
-# stripped out; this is needed for the OpenWindows 2.0 pageview previewer.
-# Add 4 if %%Page, %%Trailer and %%EndProlog comments should be
-# stripped out of included files; this is needed for spoolers that
-# don't understand the %%{Begin,End}Document comments. I suspect this
-# includes early versions of TranScript.
-# Add 8 if the first line of the PostScript output should be %!PS-Adobe-2.0
-# rather than %!PS-Adobe-3.0; this is needed when using Sun's Newsprint
-# with a printer that requires page reversal.
-BROKEN_SPOOLER_FLAGS=@BROKEN_SPOOLER_FLAGS@
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#
+# This file 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 3 of the License, or
+# (at your option) any later version.
+#
+# This file 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 file.  If not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by:
+# gnulib-tool --import --local-dir=gl \
+#  --lib=libgnu \
+#  --source-base=lib \
+#  --m4-base=gnulib_m4 \
+#  --doc-base=doc \
+#  --tests-base=tests \
+#  --aux-dir=build-aux \
+#  --makefile-name=gnulib.mk \
+#  --no-conditional-dependencies \
+#  --no-libtool \
+#  --macro-prefix=gl \
+#  fprintf-posix \
+#  git-version-gen \
+#  havelib \
+#  non-recursive-gnulib-prefix-hack \
+#  snprintf \
+#  vsnprintf \
+#  wcwidth
 
-# `DEVICE' is the default device.
-DEVICE=ps
+# Automake rules for 'chem'
 
-# `XDEVDIRS' is either `font/devX{75,100}{,-12}' or empty.
-XDEVDIRS=@XDEVDIRS@
+# File position: <groff-source>/contrib/chem/chem.am
 
-# `XPROGDIRS' is either `src/devices/xditview src/utils/xtotroff' or empty.
-XPROGDIRS=@XPROGDIRS@
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Moved to automake by Bertrand Garrigues
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of 'chem' which is part of 'groff'.
+#
+# 'groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License (GPL) version 2 as
+# published by the Free Software Foundation.
+#
+# 'groff' 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.
+#
+# The GPL2 license text is available in the internet at
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
 
-# `XLIBDIRS' is either `src/libs/libxutil' or empty.
-XLIBDIRS=@XLIBDIRS@
+########################################################################
 
-# `TTYDEVDIRS' is either `font/devascii font/devlatin1' (for
-# ASCII) or `font/devcp1047' (for EBCDIC) plus font/devutf8.
-TTYDEVDIRS=@TTYDEVDIRS@ font/devutf8
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+# eqn2graph.am
+#
 
-# `OTHERDEVDIRS' is either `font/devlj4 font/devlbp' (for ASCII) or
-# empty (for EBCDIC).
-OTHERDEVDIRS=@OTHERDEVDIRS@
+# Automake rules for 'gdiffmk' (integration into the groff source tree)
+#
+# File position: <groff-source>/contrib/gdiffmk/gdiffmk.am
+#
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
+# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
+# Automake migration by Bertrand Garrigues
+#
+# Last update: 20 Aug 2015
+#
+# This file is part of the gdiffmk utility, which is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
 
-# `PSPRINT' is the command to use for printing a PostScript file,
-# for example `lpr'.
-PSPRINT=@PSPRINT@
+# groff 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, see <http://www.gnu.org/licenses/>.
 
-# `DVIPRINT' is the command to use for printing a TeX dvi file,
-# for example `lpr -d'.
-DVIPRINT=@DVIPRINT@
+# Automake rules for 'glilypond'
 
-# Prefix for names of programs that have Unix counterparts.
-# For example, if `g' is `g' then troff will be installed as
-# gtroff.  This doesn't affect programs like grops or groff that have
-# no Unix counterparts.  Note that the groff versions of eqn and tbl
-# will not work with Unix troff.
-g=@g@
+# File position: <groff-source>/contrib/lilypond/glilypond.am
 
-# Common prefix for installation directories.
-# Used in definitions of exec_prefix, datasubdir, fontpath, manroot.
-# This must already exist when you do make install.
-prefix=@prefix@
-exec_prefix=@exec_prefix@
+# Copyright (C) 2013-2018 Free Software Foundation, Inc.
+# Written by Werner Lemberg <wl@gnu.org> and
+# Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
 
-# `bindir' says where to install executables.
-bindir=@bindir@
+# Last update: 22 Aug 2015
 
-# `libdir' says where to install platform-dependent data.
-libdir=@libdir@
-libprogramdir=$(libdir)/groff
+# This file is part of 'glilypond' which is part of 'groff'.
 
-# `datasubdir' says where to install platform-independent data files.
-datadir=@datadir@
-datarootdir=@datarootdir@
-dataprogramdir=$(datadir)/groff
-datasubdir=$(dataprogramdir)/$(version)$(revision)
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
 
-# `infodir' says where to install info files.
-infodir=@infodir@
+# 'groff' 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.
 
-# `docdir' says where to install documentation files.
-docdir=@docdir@
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# `exampledir' says where to install example files.
-exampledir=$(docdir)/examples
+# Automake rules for 'gperl' (preprocessor for added Perl parts)
 
-# `htmldocdir' says where to install documentation in HTML format.
-htmldocdir=$(docdir)/html
+# File position: <groff-source>/contrib/gperl/gperl.am
 
-# `pdfdocdir' says where to install documentation in PDF format.
-pdfdocdir=$(docdir)/pdf
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
 
-# `fontdir' says where to install dev*/*.
-fontdir=$(datasubdir)/font
+# Last update: 22 Aug 2015
 
-# `oldfontdir' says where to install old font sets (as dev*/*).
-oldfontdir=$(datasubdir)/oldfont
+# This file is part of 'gperl' which is part of 'groff'.
 
-# `localfontdir' says where local fonts will be installed (as dev*/*).
-localfontdir=$(dataprogramdir)/site-font
+# 'groff' 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.
 
-# `legacyfontdir' is for compatibility with non-GNU troff.
-legacyfontdir=/usr/lib/font
+# 'groff' 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.
 
-# `fontpath' says where to look for dev*/*.
-fontpath=$(localfontdir)$(RT_SEP)$(fontdir)$(RT_SEP)$(legacyfontdir)
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
 
-# `tmacdir' says where to install macros.
-tmacdir=$(datasubdir)/tmac
+########################################################################
 
-# `systemtmacdir' says where to install platform-dependent macros.
-systemtmacdir=$(libprogramdir)/site-tmac
+# Automake rules for 'gpinyin' (preprocessor for added Perl parts)
 
-# `localtmacdir' says where local files will be installed.
-localtmacdir=$(dataprogramdir)/site-tmac
+# File position: <groff-source>/contrib/gpinyin/gpinyin.am
 
-# `appresdir' says where to install the application resource file for
-# gxditview.
-appresdir=@appresdir@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Moved to automake by Bertrand Garrigues
 
-glilypond_dir=@glilypond_dir@
-gpinyin_dir=@gpinyin_dir@
-groffer_dir=@groffer_dir@
-grog_dir=@grog_dir@
-libprogramdir=@libprogramdir@
-referdir=@referdir@
+# Last update: 22 Aug 2015
 
-# `tmacpath' says where to look for macro files.
-# The current directory will be prepended in unsafe mode only; the home
-# directory will be always added.
-# `troffrc' and `troffrc-end' (and `eqnrc') are searched neither in the
-# current nor in the home directory.
-tmacpath=$(systemtmacdir)$(RT_SEP)$(localtmacdir)$(RT_SEP)$(tmacdir)
+# This file is part of 'gpinyin' which is part of 'groff'.
 
-# `sys_tmac_prefix' is prefix (if any) for system macro packages.
-sys_tmac_prefix=@sys_tmac_prefix@
+# 'groff' 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.
 
-# `pnmtops_nosetpage' is the command to be run to generate an eps
-# file.  Some versions of pnmtops provide the -nosetpage option.
-# We detect this and use it if present.
-pnmtops_nosetpage=@pnmtops_nosetpage@
+# 'groff' 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.
 
-# `tmac_wrap' is list of system macro packages that should be made
-# available to groff by creating a corresponding macro package
-# in the groff macro directory that references the system macro
-# package.
-tmac_wrap=@tmac_wrap@
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
 
-# If there is a groff version of a macro package listed in $(tmac_wrap),
-# then the groff version will be installed with a prefix of this.
-# Don't make this empty.
-tmac_prefix=g
+########################################################################
 
-# The groff -mm macros will be available as -m$(tmac_m_prefix)m.
-tmac_m_prefix=\
- `for i in $(tmac_wrap) ""; do case "$$i" in m) echo $(tmac_prefix);; esac; done`
-# The groff -ms macros will be available as -m$(tmac_s_prefix)s.
-tmac_s_prefix=\
- `for i in $(tmac_wrap) ""; do case "$$i" in s) echo $(tmac_prefix);; esac; done`
-# The groff -man macros will be available as -m$(tmac_an_prefix)an.
-tmac_an_prefix=\
- `for i in $(tmac_wrap) ""; do case "$$i" in an) echo $(tmac_prefix);; esac; done`
+# Copyright (C) 2003-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+# grap2graph.am
+#
 
-# Extension to be used for refer index files.  Index files are not
-# sharable between different architectures, so you might want to use
-# different suffixes for different architectures.  Choose an extension
-# that doesn't conflict with refer or any other indexing program.
-indexext=.i
+# Automake rules for 'groff_filenames'
 
-# Directory containing the default index for refer.
-indexdir=/usr/dict/papers
+# File position: <groff-source>/contrib/groff_filenames/groff_filenames.am
 
-# The filename (without suffix) of the default index for refer.
-indexname=Ind
+# Copyright (C) 2013-2018 Free Software Foundation, Inc.
 
-# common_words_file is a file containing a list of common words.
-# If your system provides /usr/lib/eign it will be copied onto this,
-# otherwise the supplied eign file will be used.
-common_words_file=$(datasubdir)/eign
+# Last update: 22 Aug 2015
 
-# `manroot' is the root of the man page directory tree.
-mandir=@mandir@
-manroot=$(mandir)
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
 
-# `man1ext' is the man section for user commands.
-man1ext=1
-man1dir=$(manroot)/man$(man1ext)
+# This file is part of 'groff'.
 
-# `man5ext' is the man section for file formats.
-man5ext=5
-man5dir=$(manroot)/man$(man5ext)
+# 'groff' 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.
 
-# `man7ext' is the man section for macros.
-man7ext=7
-man7dir=$(manroot)/man$(man7ext)
+# 'groff' 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.
 
-# `dist' target is disallowed in some `configure' combinations.
-doc_dist_target_ok=@doc_dist_target_ok@
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-# The configure script checks whether the user wants the info documentation.
-# For the repo version this mechanism also suppresses building via `makeinfo'.
-make_infodoc=@make_infodoc@
-make_install_infodoc=@make_install_infodoc@
-make_uninstall_infodoc=@make_uninstall_infodoc@
+########################################################################
 
-# The configure script checks whether all necessary utility programs for
-# grohtml are available -- only then we can build the HTML documentation.
-make_htmldoc=@make_htmldoc@
-make_install_htmldoc=@make_install_htmldoc@
-make_uninstall_htmldoc=@make_uninstall_htmldoc@
+# Automake rules for 'groffer'
 
-make_htmlexamples=@make_htmlexamples@
-make_install_htmlexamples=@make_install_htmlexamples@
-make_uninstall_htmlexamples=@make_uninstall_htmlexamples@
+# File position: <groff-source>/contrib/groffer/groffer.am
 
-# However, there may always be some prebuild HTML documentation
-make_install_shipped_htmldoc=@make_install_shipped_htmldoc@
-make_uninstall_shipped_htmldoc=@make_uninstall_shipped_htmldoc@
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Written by Werner Lemberg <wl@gnu.org> and
+# Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
 
-# The configure script also checks whether all necessary utility programs
-# for pdfroff are available -- only then we can build PDF documentation.
-make_pdfdoc=@make_pdfdoc@
-make_install_pdfdoc=@make_install_pdfdoc@
-make_uninstall_pdfdoc=@make_uninstall_pdfdoc@
+# Last update: 22 Aug 2015
 
-make_pdfexamples=@make_pdfexamples@
-make_install_pdfexamples=@make_install_pdfexamples@
-make_uninstall_pdfexamples=@make_uninstall_pdfexamples@
+# This file is part of 'groffer' which is part of 'groff'.
 
-# `other' documentation, e.g., `meref.me' and `pic.ms', as well as their
-# generated counterparts..
-make_otherdoc=@make_otherdoc@
-make_install_otherdoc=@make_install_otherdoc@
-make_uninstall_otherdoc=@make_uninstall_otherdoc@
+# 'groff' 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.
 
-# `examples' -- a generic switch, but the generated examples are furtherly
-# subdivided to catch HTML and PDF production availability.
-make_examples=@make_examples@
-make_install_examples=@make_install_examples@
-make_uninstall_examples=@make_uninstall_examples@
+# 'groff' 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.
 
-# Windows `.cmd' files
-make_winscripts=@make_winscripts@
-make_install_winscripts=@make_install_winscripts@
-make_uninstall_winscripts=@make_uninstall_winscripts@
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
 
-# All the previous installation directories, when used, are prefixed with
-# $(DESTDIR) during install and uninstall, to support staged installations.
+########################################################################
 
-# DEFINES should include the following:
-#
-# -DWORDS_BIGENDIAN            if your target platform is big-endian
-# -DIS_EBCDIC_HOST             if the host's encoding is EBCDIC
-#
-# -DHAVE_DIRECT_H              if you have <direct.h>
-# -DHAVE_DIRENT_H              if you have <dirent.h>
-# -DHAVE_CC_INTTYPES_H         if you have a C++ <inttypes.h>
-# -DHAVE_PROCESS_H             if you have <process.h>
-# -DHAVE_LIMITS_H              if you have <limits.h>
-# -DHAVE_CC_LIMITS_H           if you have a C++ <limits.h>
-# -DHAVE_MATH_H                        if you have <math.h>
-# -DHAVE_CC_OSFCN_H            if you have a C++ <osfcn.h>
-# -DHAVE_STDDEF_H              if you have <stddef.h>
-# -DHAVE_STDLIB_H              if you have <stdlib.h>
-# -DHAVE_STRING_H              if you have <string.h>
-# -DHAVE_STRINGS_H             if you have <strings.h>
-# -DHAVE_SYS_DIR_H             if you have <sys/dir.h>
-# -DHAVE_SYS_PARAM_H           if you have <sys/param.h>
-# -DHAVE_SYS_STAT_H            if you have <sys/stat.h>
-# -DHAVE_SYS_TIME_H            if you have <sys/time.h>
-# -DHAVE_SYS_TYPES_H           if you have <sys/types.h>
-# -DHAVE_UNISTD_H              if you have <unistd.h>
-#
-# -DHAVE_FMOD                  if you have fmod()
-# -DHAVE_GETCWD                        if you have getcwd()
-# -DHAVE_GETTIMEOFDAY          if you have gettimeofday()
-# -DHAVE_ICONV                 if you have iconv()
-# -DHAVE_ISATTY                        if you have isatty()
-# -DHAVE_KILL                  if you have kill()
-# -DHAVE_LANGINFO_CODESET      if you have nl_langinfo()
-# -DHAVE_MKSTEMP               if you have mkstemp()
-# -DHAVE_MMAP                  if you have mmap()
-# -DHAVE_PUTENV                        if you have putenv()
-# -DHAVE_RENAME                        if you have rename()
-# -DHAVE_SETLOCALE             if you have setlocale()
-# -DHAVE_SNPRINTF              if you have snprintf()
-# -DHAVE_STRCASECMP            if you have strcasecmp()
-# -DHAVE_STRNCASECMP           if you have strncasecmp()
-# -DHAVE_STRERROR              if you have strerror()
-# -DHAVE_STRSEP                        if you have strsep()
-# -DHAVE_STRTOL                        if you have strtol()
-# -DHAVE_SYMLINK               if you have symlink()
-# -DHAVE_VSNPRINTF             if you have vsnprintf()
-#
-# -DNEED_DECLARATION_GETTIMEOFTODAY
-#                              if your C++ <sys/time.h> doesn't declare
-#                              gettimeofday()
-# -DNEED_DECLARATION_HYPOT     if your C++ <math.h> doesn't declare hypot()
-# -DNEED_DECLARATION_PCLOSE    if your C++ <stdio.h> doesn't declare pclose()
-# -DNEED_DECLARATION_POPEN     if your C++ <stdio.h> doesn't declare popen()
-# -DNEED_DECLARATION_PUTENV    if your C++ <stdlib.h> doesn't declare
-#                              putenv()
-# -DNEED_DECLARATION_RAND      if your C++ <stdlib.h> doesn't declare rand()
-# -DNEED_DECLARATION_SNPRINTF  if your C++ <stdio.h> doesn't declare
-#                              snprintf()
-# -DNEED_DECLARATION_SRAND     if your C++ <stdlib.h> doesn't declare srand()
-# -DNEED_DECLARATION_STRCASECMP        if your C++ <string.h> doesn't declare
-#                              strcasecmp()
-# -DNEED_DECLARATION_STRNCASECMP
-#                              if your C++ <string.h> doesn't declare
-#                              strncasecmp()
-# -DNEED_DECLARATION_VFPRINTF  if your C++ <stdio.h> doesn't declare
-#                              vfprintf()
-# -DNEED_DECLARATION_VSNPRINTF if your C++ <stdio.h> doesn't declare
-#                              vsnprintf()
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
+#      Written by Werner Lemberg (wl@gnu.org)
+#      Automake migration by Bertrand Garrigues
 #
-# -DHAVE_DECL_GETC_UNLOCKED    if you have getc_unlocked()
-# -DHAVE_DECL_SYS_SIGLIST      if you have sys_siglist[]
 #
-# -DHAVE_STRUCT_EXCEPTION      if <math.h> defines struct exception
-# -DHAVE_SYS_NERR              if you have sysnerr in <errno.h> or <stdio.h>
-# -DHAVE_SYS_ERRLIST           if you have sys_errlist in <errno.h> or
-#                              <stdio.h>
-# -DICONV_CONST=const          if declaration of iconv() needs const
-# -DLONG_FOR_TIME_T            if localtime() takes a long * not a time_t *
-# -DRETSIGTYPE=int             if signal handlers return int not void
-# -DRET_TYPE_SRAND_IS_VOID     if srand() returns void not int
+# This file is part of groff.
 #
-# -DWCOREFLAG=0200             if the 0200 bit of the status returned by
-#                              wait() indicates whether a core image was
-#                              produced for a process that was terminated
-#                              by a signal
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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.
 #
-# -DHAVE_WORKING_O_NOATIME      define if <fcntl.h>'s O_NOATIME flag works
-# -DHAVE_WORKING_O_NOFOLLOW     define if <fcntl.h>'s O_NOFOLLOW flag works
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+
+# Copyright 1991-2018 Free Software Foundation, Inc.
 #
-# -Duintmax_t=<value>          define to `unsigned long' or `unsigned long
-#                              long' if <inttypes.h> does not exist
+# Last update: 22 Aug 2015
 #
-# -DTRADITIONAL_CPP            if your C++ compiler uses a traditional
-#                              (Reiser) preprocessor
-# -DARRAY_DELETE_NEEDS_SIZE    if your C++ doesn't understand `delete []'
+# This file is part of groff.
 #
-# -DPAGE=A4                    if the the printer's page size is A4
-# -DGHOSTSCRIPT=gs             the name (and directory if required) of the
-#                              ghostscript program
+# groff 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 3 of the License, or
+# (at your option) any later version.
 #
-DEFINES=@DEFS@
-
-# Include
+# groff 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.
 #
-#   {fmod,getcwd,mkstemp,putenv,snprintf,strcasecmp,
-#    strerror,strncasecmp,strtol}.$(OBJEXT)
+# You should have received a copy of the GNU General Public License
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
+#
+# mm.am
 #
-# in LIBOBJS if your C library is missing the corresponding function.
-# vsnprintf is defined in the snprintf.$(OBJEXT) module.
-LIBOBJS=@LIBOBJS@
-
-# `CCC' is the compiler for C++ (.cpp) files.
-CCC=@CXX@
-CC=@CC@
-# CCDEFINES are definitions for C++ compilations.
-CCDEFINES=$(DEFINES)
-# CDEFINES are definitions for C compilations.
-CDEFINES=$(DEFINES)
-
-CCFLAGS=@CXXFLAGS@
-CFLAGS=@CFLAGS@
-CPPFLAGS=@CPPFLAGS@
-LDFLAGS=@LDFLAGS@
-
-X_CFLAGS=@X_CFLAGS@
-X_LIBS=@X_LIBS@
-X_EXTRA_LIBS=@X_EXTRA_LIBS@
-X_PRE_LIBS=@X_PRE_LIBS@
-
-YACC=@YACC@
-YACCFLAGS=-v
-
-GREP=@GREP@
-EGREP=@EGREP@
-
-MAKEINFO=@MAKEINFO@
-
-EXEEXT=@EXEEXT@
-OBJEXT=@OBJEXT@
-LIBEXT=@LIBEXT@
-LIBS=@LIBS@
-LIBM=@LIBM@
-LIBICONV=@LIBICONV@
-RANLIB=@RANLIB@
-INSTALL=@INSTALL@
-INSTALL_PROGRAM=@INSTALL_PROGRAM@
-INSTALL_SCRIPT=@INSTALL_SCRIPT@
-INSTALL_DATA=@INSTALL_DATA@
-INSTALL_INFO=@INSTALL_INFO@
-LN_S=@LN_S@
-AR=ar
-ETAGS=etags
-ETAGSFLAGS=
-# Flag that tells etags to assume C++.
-ETAGSCCFLAG=-C
-# Full path to perl.
-PERL=@PERL@
-PERLVERSION=@PERLVERSION@
-# Sed command with which to edit sh scripts.
-SH_SCRIPT_SED_CMD=@SH_SCRIPT_SED_CMD@
-# Sed script to deal with OS dependencies in sh scripts.
-SH_DEPS_SED_SCRIPT=$(top_builddir)/arch/misc/shdeps.sed
-
-# The program to create directory hierarchies.
-mkinstalldirs= $(SHELL) $(top_srcdir)/mkinstalldirs
-
-PURIFY=purify
-PURIFYCCFLAGS=
-#PURIFYCCFLAGS=-g++=yes \
-#  -collector=`dirname \`$(CCC) -print-libgcc-file-name\``/ld
 
-# Passing down MAKEOVERRIDES prevents $(MAKE) from containing a second
-# copy of $(MDEFINES) when making individual directories; this could
-# cause the argument list to become too long on some systems.
-MDEFINES=\
-  "ALT_AWK_PROGS=$(ALT_AWK_PROGS)" \
-  "ALT_GHOSTSCRIPT_PROGS=$(ALT_GHOSTSCRIPT_PROGS)" \
-  "AR=$(AR)" \
-  "BROKEN_SPOOLER_FLAGS=$(BROKEN_SPOOLER_FLAGS)" \
-  "CC=$(CC)" \
-  "CCC=$(CCC)" \
-  "CCDEFINES=$(CCDEFINES)" \
-  "CCFLAGS=$(CCFLAGS)" \
-  "CDEFINES=$(CDEFINES)" \
-  "CFLAGS=$(CFLAGS)" \
-  "CPPFLAGS=$(CPPFLAGS)" \
-  "DEVICE=$(DEVICE)" \
-  "DVIPRINT=$(DVIPRINT)" \
-  "EGREP=$(EGREP)" \
-  "ETAGS=$(ETAGS)" \
-  "ETAGSCCFLAG=$(ETAGSCCFLAG)" \
-  "ETAGSFLAGS=$(ETAGSFLAGS)" \
-  "EXEEXT=$(EXEEXT)" \
-  "GLIBC21=$(GLIBC21)" \
-  "GREP=$(GREP)" \
-  "HOST=$(HOST)" \
-  "INSTALL_DATA=$(INSTALL_DATA)" \
-  "INSTALL_INFO=$(INSTALL_INFO)" \
-  "INSTALL_PROGRAM=$(INSTALL_PROGRAM)" \
-  "INSTALL_SCRIPT=$(INSTALL_SCRIPT)" \
-  "LDFLAGS=$(LDFLAGS)" \
-  "LIBEXT=$(LIBEXT)" \
-  "LIBICONV=$(LIBICONV)" \
-  "LIBM=$(LIBM)" \
-  "LIBOBJS=$(LIBOBJS)" \
-  "LIBS=$(LIBS)" \
-  "MAKEINFO=$(MAKEINFO)" \
-  "MAKEOVERRIDES=$(MAKEOVERRIDES)" \
-  "OBJEXT=$(OBJEXT)" \
-  "OTHERDEVDIRS=$(OTHERDEVDIRS)" \
-  "PAGE=$(PAGE)" \
-  "PERL=$(PERL)" \
-  "PERLVERSION=$(PERLVERSION)" \
-  "GHOSTSCRIPT=$(GHOSTSCRIPT)" \
-  "PSPRINT=$(PSPRINT)" \
-  "PURIFY=$(PURIFY)" \
-  "PURIFYCCFLAGS=$(PURIFYCCFLAGS)" \
-  "RANLIB=$(RANLIB)" \
-  "RT_SEP=$(RT_SEP)" \
-  "SH_SEP=$(SH_SEP)" \
-  "SHELL=$(SHELL)" \
-  "SH_SCRIPT_SED_CMD=$(SH_SCRIPT_SED_CMD)" \
-  "SH_DEPS_SED_SCRIPT=$(SH_DEPS_SED_SCRIPT)" \
-  "TTYDEVDIRS=$(TTYDEVDIRS)" \
-  "XDEVDIRS=$(XDEVDIRS)" \
-  "XLIBDIRS=$(XLIBDIRS)" \
-  "XPROGDIRS=$(XPROGDIRS)" \
-  "X_CFLAGS=$(X_CFLAGS)" \
-  "X_LIBS=$(X_LIBS)" \
-  "X_EXTRA_LIBS=$(X_EXTRA_LIBS)" \
-  "X_PRE_LIBS=$(X_PRE_LIBS)" \
-  "YACC=$(YACC)" \
-  "YACCFLAGS=$(YACCFLAGS)" \
-  "appresdir=$(appresdir)" \
-  "groffer_dir=$(groffer_dir)" \
-  "gpinyin_dir=$(gpinyin_dir)" \
-  "glilypond_dir=$(glilypond_dir)" \
-  "grog_dir=$(grog_dir)" \
-  "referdir=$(referdir)" \
-  "bindir=$(bindir)" \
-  "common_words_file=$(common_words_file)" \
-  "datadir=$(datadir)" \
-  "dataprogramdir=$(dataprogramdir)" \
-  "datasubdir=$(datasubdir)" \
-  "docdir=$(docdir)" \
-  "exampledir=$(exampledir)" \
-  "exec_prefix=$(exec_prefix)" \
-  "fontdir=$(fontdir)" \
-  "fontpath=$(fontpath)" \
-  "g=$(g)" \
-  "htmldocdir=$(htmldocdir)" \
-  "pdfdocdir=$(pdfdocdir)" \
-  "indexdir=$(indexdir)" \
-  "indexext=$(indexext)" \
-  "indexname=$(indexname)" \
-  "infodir=$(infodir)" \
-  "legacyfontdir=$(legacyfontdir)" \
-  "libdir=$(libdir)" \
-  "libprogramdir=$(libprogramdir)" \
-  "localfontdir=$(localfontdir)" \
-  "localtmacdir=$(localtmacdir)" \
-  "make_infodoc=$(make_infodoc)" \
-  "make_install_infodoc=$(make_install_infodoc)" \
-  "make_uninstall_infodoc=$(make_uninstall_infodoc)" \
-  "make_htmldoc=$(make_htmldoc)" \
-  "make_install_htmldoc=$(make_install_htmldoc)" \
-  "make_uninstall_htmldoc=$(make_uninstall_htmldoc)" \
-  "make_htmlexamples=$(make_htmlexamples)" \
-  "make_install_htmlexamples=$(make_install_htmlexamples)" \
-  "make_uninstall_htmlexamples=$(make_uninstall_htmlexamples)" \
-  "make_install_shipped_htmldoc=$(make_install_shipped_htmldoc)" \
-  "make_uninstall_shipped_htmldoc=$(make_uninstall_shipped_htmldoc)" \
-  "make_pdfdoc=$(make_pdfdoc)" \
-  "make_install_pdfdoc=$(make_install_pdfdoc)" \
-  "make_uninstall_pdfdoc=$(make_uninstall_pdfdoc)" \
-  "make_pdfexamples=$(make_pdfexamples)" \
-  "make_install_pdfexamples=$(make_install_pdfexamples)" \
-  "make_uninstall_pdfexamples=$(make_uninstall_pdfexamples)" \
-  "make_otherdoc=$(make_otherdoc)" \
-  "make_install_otherdoc=$(make_install_otherdoc)" \
-  "make_uninstall_otherdoc=$(make_uninstall_otherdoc)" \
-  "make_examples=$(make_examples)" \
-  "make_install_examples=$(make_install_examples)" \
-  "make_uninstall_examples=$(make_uninstall_examples)" \
-  "make_winscripts=$(make_winscripts)" \
-  "make_install_winscripts=$(make_install_winscripts)" \
-  "make_uninstall_winscripts=$(make_uninstall_winscripts)" \
-  "man1dir=$(man1dir)" \
-  "man1ext=$(man1ext)" \
-  "man5dir=$(man5dir)" \
-  "man5ext=$(man5ext)" \
-  "man7dir=$(man7dir)" \
-  "man7ext=$(man7ext)" \
-  "manroot=$(manroot)" \
-  "mkinstalldirs=$(mkinstalldirs)" \
-  "oldfontdir=$(oldfontdir)" \
-  "pnmtops_nosetpage=$(pnmtops_nosetpage)" \
-  "prefix=$(prefix)" \
-  "revision=$(revision)" \
-  "sys_tmac_prefix=$(sys_tmac_prefix)" \
-  "systemtmacdir=$(systemtmacdir)" \
-  "tmac_an_prefix=$(tmac_an_prefix)" \
-  "tmac_m_prefix=$(tmac_m_prefix)" \
-  "tmac_s_prefix=$(tmac_s_prefix)" \
-  "tmac_wrap=$(tmac_wrap)" \
-  "tmacdir=$(tmacdir)" \
-  "tmacpath=$(tmacpath)" \
-  "top_builddir=$(top_builddir)" \
-  "top_srcdir=$(top_srcdir)" \
-  "version=$(version)"
-
-MAKE_K_FLAG=`for f in x $(MAKEFLAGS); do \
-               case $$f in \
-                 *=* | --[!k]*);; \
-                 *k*) echo ' -k ';; \
-               esac; \
-             done`
-
-INCDIRS=\
-  src/include
-LIBDIRS=\
-  src/libs/libgroff \
-  src/libs/libdriver \
-  src/libs/libbib \
-  $(XLIBDIRS)
-ALLLIBDIRS=\
-  src/libs/libgroff \
-  src/libs/libdriver \
-  src/libs/libbib \
-  src/libs/libxutil
-CCPROGDIRS=\
-  src/roff/groff \
-  src/roff/troff \
-  src/preproc/preconv \
-  src/preproc/tbl \
-  src/preproc/pic \
-  src/preproc/eqn \
-  src/preproc/grn \
-  src/preproc/refer \
-  src/preproc/soelim \
-  src/preproc/html \
-  src/devices/grops \
-  src/devices/grotty \
-  src/devices/grodvi \
-  src/devices/grolj4 \
-  src/devices/grohtml \
-  src/devices/grolbp \
-  src/utils/tfmtodit \
-  src/utils/hpftodit \
-  src/utils/lookbib \
-  src/utils/indxbib \
-  src/utils/lkbib \
-  src/utils/addftinfo
-CPROGDIRS=\
-  src/utils/pfbtops
-SHPROGDIRS=\
-  src/devices/gropdf
-PROGDEPDIRS=\
-  arch/misc
-PROGDIRS=\
-  $(PROGDEPDIRS) \
-  $(CCPROGDIRS) \
-  $(CPROGDIRS) \
-  $(SHPROGDIRS) \
-  $(XPROGDIRS)
-ALLPROGDIRS=\
-  $(PROGDEPDIRS) \
-  $(CCPROGDIRS) \
-  $(CPROGDIRS) \
-  $(SHPROGDIRS) \
-  src/devices/xditview \
-  src/utils/xtotroff
-DEVDIRS=\
-  font/devps \
-  font/devdvi \
-  font/devhtml
-ALLTTYDEVDIRS=\
-  font/devascii \
-  font/devlatin1 \
-  font/devutf8 \
-  font/devcp1047
-# `doc' must be processed before `contrib/pdfmark',
-# pdf stuff must be processed before `contrib/mom',
-# devpdf fonts depends on `afmtodit'
-OTHERDIRS=\
-  src/utils/afmtodit \
-  font/devpdf \
-  arch/mingw \
-  contrib/chem \
-  contrib/eqn2graph \
-  contrib/gdiffmk \
-  contrib/glilypond \
-  contrib/gperl \
-  contrib/gpinyin \
-  contrib/grap2graph \
-  contrib/groff_filenames \
-  contrib/groffer \
-  contrib/hdtbl \
-  contrib/mm \
-  contrib/pdfmark \
-  contrib/pic2graph \
-  contrib/mom \
-  doc \
-  man \
-  src/roff/grog \
-  src/roff/nroff \
-  tmac
-
-# OTHERDIRS is handled specially in the `$(TARGETS)' rule to avoid
-# dependency problems with parallel builds.
-ALLDIRS=\
-  $(INCDIRS) \
-  $(LIBDIRS) \
-  $(PROGDIRS) \
-  $(DEVDIRS) \
-  $(XDEVDIRS) \
-  $(OTHERDEVDIRS) \
-  $(TTYDEVDIRS)
-# $(OTHERDIRS)
-EXTRADIRS=\
-  font/devps/generate \
-  font/devdvi/generate \
-  font/devlj4/generate \
-  doc
-NOMAKEDIRS=\
-  m4 \
-  arch/djgpp \
-  contrib/chem/examples \
-  contrib/chem/examples/122 \
-  contrib/hdtbl/examples \
-  contrib/mm/examples \
-  contrib/mm/mm \
-  contrib/mom/examples \
-  contrib/mom/momdoc \
-  contrib/gdiffmk/tests \
-  src/libs/snprintf \
-  src/libs/gnulib/lib \
-  src/libs/gnulib/lib/uniwidth \
-  src/libs/gnulib/m4 \
-  src/libs/gnulib/build-aux \
-  src/libs/gnulib/build-aux/snippet \
-  src/libs/gnulib \
-  font/devps/old \
-  font/devpdf/util \
-  font/util
-GNULIBDIRS=\
-  src/libs/gnulib
-DISTDIRS=\
-  $(INCDIRS) \
-  $(ALLLIBDIRS) \
-  $(ALLPROGDIRS) \
-  $(DEVDIRS) \
-  $(XDEVDIRS) \
-  $(OTHERDEVDIRS) \
-  $(ALLTTYDEVDIRS) \
-  $(OTHERDIRS) \
-  $(EXTRADIRS) \
-  $(NOMAKEDIRS) \
-  $(GNULIBDIRS)
-TARGETS=\
-  all \
-  install_bin install_data \
-  clean distclean mostlyclean realclean extraclean \
-  distfiles \
-  TAGS \
-  depend \
-  uninstall_sub \
-  fonts
-
-# This ENVSETUP gork is required by the DJGPP build on Windows 9X,
-# where Make needs to be case-sensitive to find files like BI and VERSION.
-ENVSETUP=\
-       if test -f $(srcdir)/makefile.ccpg* && \
-          test -f $(srcdir)/Makefile.ccpg*; then \
-         FNCASE=y; export FNCASE; \
-       else :; \
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#      Written by Werner Lemberg (wl@gnu.org)
+#      Automake migration by Bertrand Garrigues
+#
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2005-2018 Free Software Foundation, Inc.
+#      Written by Keith Marshall (keith.d.marshall@ntlworld.com)
+#      Automake migration by Bertrand Garrigues
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+# pic2graph.am
+#
+
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#      Original Makefile.sub written by Werner Lemberg <wl@gnu.org>
+#      Automake migration by 
+#      Bertrand Garrigues <bertrand.garrigues@laposte.net>
+#
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+#      Original Makefile.sub written
+#      by Deri James <deri@chuzzlewit.demon.co.uk>
+#      Automake migration by Bertrand Garrigues
+#
+# Last update: 2017-11-02
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or (at your
+# option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2015-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Automake rules for 'include'
+#
+# File position: <groff-source>/src/include/include.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+# Automake rules for 'libbib'
+#
+# File position: <groff-source>/src/libs/libbib/libbib.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+# Automake rules for 'libdriver'
+#
+# File position: <groff-source>/src/libs/libdriver/libdriver.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Automake rules for 'libxutil'
+#
+# File position: <groff-source>/src/libs/libxutil/libxutil.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+#  Original Makefile.sub written by Deri James <deri@chuzzlewit.demon.co.uk>.
+#  Automake migration by Bertrand Garrigues
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 1993-2018 Free Software Foundation, Inc.
+#
+#   Original Makefile.sub rewritten by 
+#   Bernd Warken <groff-bernd.warken-72@web.de>
+#   and Werner LEMBERG <wl@gnu.org>
+#
+#   Automake migration by 
+#   Bertrand Garrigues <bertrand.garrigues@laposte.net>
+#
+# Latest update: 22 Aug 2015
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+########################################################################
+
+# grog.am for 'grog'
+#
+# File position: <groff-source>/src/roff/grog/grog.am
+#
+# Copyright (C) 1993-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of 'grog' which is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Automake rules for 'src utils addftinfo'
+#
+# File position: <groff-source>/src/utils/addftinfo/addftinfo.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+# Automake rules for 'src utils afmtodit'
+#
+# File position: <groff-source>/src/utils/afmtodit/afmtdodit.am
+#
+# Copyright (C) 2013-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+########################################################################
+
+# Automake rules for 'src utils hpftodit'
+#
+# File position: <groff-source>/src/utils/hpftodit/hpftodit.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+
+
+
+
+VPATH = @srcdir@
+am__is_gnu_make = { \
+  if test -z '$(MAKELEVEL)'; then \
+    false; \
+  elif test -n '$(MAKE_HOST)'; then \
+    true; \
+  elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \
+    true; \
+  else \
+    false; \
+  fi; \
+}
+am__make_running_with_option = \
+  case $${target_option-} in \
+      ?) ;; \
+      *) echo "am__make_running_with_option: internal error: invalid" \
+              "target option '$${target_option-}' specified" >&2; \
+         exit 1;; \
+  esac; \
+  has_opt=no; \
+  sane_makeflags=$$MAKEFLAGS; \
+  if $(am__is_gnu_make); then \
+    sane_makeflags=$$MFLAGS; \
+  else \
+    case $$MAKEFLAGS in \
+      *\\[\ \  ]*) \
+        bs=\\; \
+        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
+          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
+    esac; \
+  fi; \
+  skip_next=no; \
+  strip_trailopt () \
+  { \
+    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
+  }; \
+  for flg in $$sane_makeflags; do \
+    test $$skip_next = yes && { skip_next=no; continue; }; \
+    case $$flg in \
+      *=*|--*) continue;; \
+        -*I) strip_trailopt 'I'; skip_next=yes;; \
+      -*I?*) strip_trailopt 'I';; \
+        -*O) strip_trailopt 'O'; skip_next=yes;; \
+      -*O?*) strip_trailopt 'O';; \
+        -*l) strip_trailopt 'l'; skip_next=yes;; \
+      -*l?*) strip_trailopt 'l';; \
+      -[dEDm]) skip_next=yes;; \
+      -[JT]) skip_next=yes;; \
+    esac; \
+    case $$flg in \
+      *$$target_option*) has_opt=yes; break;; \
+    esac; \
+  done; \
+  test $$has_opt = yes
+am__make_dryrun = (target_option=n; $(am__make_running_with_option))
+am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
+pkgdatadir = $(datadir)/@PACKAGE@
+pkgincludedir = $(includedir)/@PACKAGE@
+pkglibdir = $(libdir)/@PACKAGE@
+pkglibexecdir = $(libexecdir)/@PACKAGE@
+am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
+install_sh_DATA = $(install_sh) -c -m 644
+install_sh_PROGRAM = $(install_sh) -c
+install_sh_SCRIPT = $(install_sh) -c
+INSTALL_HEADER = $(INSTALL_DATA)
+transform = $(program_transform_name)
+NORMAL_INSTALL = :
+PRE_INSTALL = :
+POST_INSTALL = :
+NORMAL_UNINSTALL = :
+PRE_UNINSTALL = :
+POST_UNINSTALL = :
+build_triplet = @build@
+host_triplet = @host@
+bin_PROGRAMS = grodvi$(EXEEXT) post-grohtml$(EXEEXT) grolbp$(EXEEXT) \
+       grolj4$(EXEEXT) grops$(EXEEXT) grotty$(EXEEXT) $(am__EXEEXT_1) \
+       pre-grohtml$(EXEEXT) preconv$(EXEEXT) groff$(EXEEXT) \
+       addftinfo$(EXEEXT) hpftodit$(EXEEXT) lkbib$(EXEEXT) \
+       pfbtops$(EXEEXT) tfmtodit$(EXEEXT) $(am__EXEEXT_2)
+nobase_bin_PROGRAMS =
+check_PROGRAMS =
+prefixexecbin_PROGRAMS = eqn$(EXEEXT) grn$(EXEEXT) pic$(EXEEXT) \
+       refer$(EXEEXT) soelim$(EXEEXT) tbl$(EXEEXT) troff$(EXEEXT) \
+       indxbib$(EXEEXT) lookbib$(EXEEXT)
+@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__append_1 = lib/uniwidth/width.c
+@BUILD_WINSCRIPTS_TRUE@am__append_2 = $(WINSCRIPTS)
+@BUILD_WINSCRIPTS_FALSE@am__append_3 = $(WINSCRIPTS)
+@BUILD_EXAMPLES_FALSE@am__append_4 = $(HDTBLEXAMPLEFILES) 
+@BUILD_EXAMPLES_TRUE@am__append_5 = $(hdtbl_TESTS)
+@BUILD_EXAMPLES_TRUE@am__append_6 = $(hdtbl_TESTS)
+@BUILD_EXAMPLES_FALSE@am__append_7 = $(MOMEXAMPLEFILES)
+@BUILD_PDFEXAMPLES_TRUE@@HAVE_PDFTOOLS_TRUE@am__append_8 = $(mom_TESTS)
+@BUILD_PDFEXAMPLES_TRUE@@HAVE_PDFTOOLS_TRUE@am__append_9 = $(mom_TESTS)
+@BUILD_PDFDOC_TRUE@am__append_10 = $(PDFDOCFILES)
+@BUILD_PDFDOC_FALSE@am__append_11 = $(PDFDOCFILES)
+@BUILD_OTHERDOC_TRUE@am__append_12 = $(PROCESSEDDOCFILES)
+@BUILD_OTHERDOC_FALSE@am__append_13 = $(DOCFILES)
+@BUILD_PDFDOC_TRUE@am__append_14 = doc/automake.pdf
+@BUILD_EXAMPLES_TRUE@am__append_15 = $(PROCESSEDEXAMPLEFILES)
+@BUILD_EXAMPLES_FALSE@am__append_16 = $(EXAMPLEFILES)
+@BUILD_INFODOC_TRUE@am__append_17 = doc/groff.info doc/groff.info-2 doc/groff.info-2
+@WITHOUT_X11_FALSE@am__append_18 = libxutil.a
+@WITHOUT_X11_TRUE@am__append_19 = $(GXDITVIEWSOURCES)
+@WITHOUT_X11_FALSE@am__append_20 = gxditview
+@WITHOUT_X11_FALSE@am__append_21 = $(XDITVIEW_GENHDRS)
+@WITHOUT_X11_FALSE@am__append_22 = src/devices/xditview/gxditview.1
+@WITHOUT_X11_FALSE@am__append_23 = xtotroff
+@WITHOUT_X11_FALSE@am__append_24 = src/utils/xtotroff/xtotroff.1
+@USEPROGRAMPREFIX_FALSE@am__append_25 = $(PREFIXMAN1)
+subdir = .
+ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
+am__aclocal_m4_deps = $(top_srcdir)/gnulib_m4/00gnulib.m4 \
+       $(top_srcdir)/gnulib_m4/absolute-header.m4 \
+       $(top_srcdir)/gnulib_m4/alloca.m4 \
+       $(top_srcdir)/gnulib_m4/asm-underscore.m4 \
+       $(top_srcdir)/gnulib_m4/errno_h.m4 \
+       $(top_srcdir)/gnulib_m4/exponentd.m4 \
+       $(top_srcdir)/gnulib_m4/exponentf.m4 \
+       $(top_srcdir)/gnulib_m4/exponentl.m4 \
+       $(top_srcdir)/gnulib_m4/extensions.m4 \
+       $(top_srcdir)/gnulib_m4/extern-inline.m4 \
+       $(top_srcdir)/gnulib_m4/float_h.m4 \
+       $(top_srcdir)/gnulib_m4/fpieee.m4 \
+       $(top_srcdir)/gnulib_m4/fprintf-posix.m4 \
+       $(top_srcdir)/gnulib_m4/frexp.m4 \
+       $(top_srcdir)/gnulib_m4/frexpl.m4 \
+       $(top_srcdir)/gnulib_m4/fseterr.m4 \
+       $(top_srcdir)/gnulib_m4/gnulib-common.m4 \
+       $(top_srcdir)/gnulib_m4/gnulib-comp.m4 \
+       $(top_srcdir)/gnulib_m4/host-cpu-c-abi.m4 \
+       $(top_srcdir)/gnulib_m4/include_next.m4 \
+       $(top_srcdir)/gnulib_m4/intmax_t.m4 \
+       $(top_srcdir)/gnulib_m4/inttypes_h.m4 \
+       $(top_srcdir)/gnulib_m4/isnand.m4 \
+       $(top_srcdir)/gnulib_m4/isnanf.m4 \
+       $(top_srcdir)/gnulib_m4/isnanl.m4 \
+       $(top_srcdir)/gnulib_m4/ldexpl.m4 \
+       $(top_srcdir)/gnulib_m4/libunistring-base.m4 \
+       $(top_srcdir)/gnulib_m4/limits-h.m4 \
+       $(top_srcdir)/gnulib_m4/longlong.m4 \
+       $(top_srcdir)/gnulib_m4/math_h.m4 \
+       $(top_srcdir)/gnulib_m4/memchr.m4 \
+       $(top_srcdir)/gnulib_m4/mmap-anon.m4 \
+       $(top_srcdir)/gnulib_m4/multiarch.m4 \
+       $(top_srcdir)/gnulib_m4/nocrash.m4 \
+       $(top_srcdir)/gnulib_m4/non-recursive-gnulib-prefix-hack.m4 \
+       $(top_srcdir)/gnulib_m4/off_t.m4 \
+       $(top_srcdir)/gnulib_m4/printf-frexp.m4 \
+       $(top_srcdir)/gnulib_m4/printf-frexpl.m4 \
+       $(top_srcdir)/gnulib_m4/printf.m4 \
+       $(top_srcdir)/gnulib_m4/signbit.m4 \
+       $(top_srcdir)/gnulib_m4/size_max.m4 \
+       $(top_srcdir)/gnulib_m4/snprintf.m4 \
+       $(top_srcdir)/gnulib_m4/ssize_t.m4 \
+       $(top_srcdir)/gnulib_m4/stddef_h.m4 \
+       $(top_srcdir)/gnulib_m4/stdint.m4 \
+       $(top_srcdir)/gnulib_m4/stdint_h.m4 \
+       $(top_srcdir)/gnulib_m4/stdio_h.m4 \
+       $(top_srcdir)/gnulib_m4/string_h.m4 \
+       $(top_srcdir)/gnulib_m4/sys_types_h.m4 \
+       $(top_srcdir)/gnulib_m4/vasnprintf.m4 \
+       $(top_srcdir)/gnulib_m4/vsnprintf.m4 \
+       $(top_srcdir)/gnulib_m4/warn-on-use.m4 \
+       $(top_srcdir)/gnulib_m4/wchar_h.m4 \
+       $(top_srcdir)/gnulib_m4/wchar_t.m4 \
+       $(top_srcdir)/gnulib_m4/wctype_h.m4 \
+       $(top_srcdir)/gnulib_m4/wcwidth.m4 \
+       $(top_srcdir)/gnulib_m4/wint_t.m4 \
+       $(top_srcdir)/gnulib_m4/xsize.m4 $(top_srcdir)/acinclude.m4 \
+       $(top_srcdir)/m4/ax_compare_version.m4 \
+       $(top_srcdir)/m4/ax_prog_perl_version.m4 \
+       $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/fcntl-o.m4 \
+       $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/groff.m4 \
+       $(top_srcdir)/m4/iconv.m4 $(top_srcdir)/m4/lib-ld.m4 \
+       $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.m4 \
+       $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/configure.ac
+am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
+       $(ACLOCAL_M4)
+DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \
+       $(am__configure_deps) $(dist_bin_SCRIPTS) \
+       $(am__dist_chemexample_DATA_DIST) $(dist_chempic_DATA) \
+       $(dist_devlj4font_DATA) $(dist_devlj4fontgen_DATA) \
+       $(dist_devpsfont_DATA) $(dist_devpsgen_DATA) \
+       $(am__dist_docexamples_DATA_DIST) $(dist_glilypond_DATA) \
+       $(dist_gpinyin_DATA) $(dist_grog_DATA) \
+       $(am__dist_hdtblexample_DATA_DIST) $(dist_localtmac_DATA) \
+       $(dist_mm_DATA) $(dist_mmexample_DATA) \
+       $(am__dist_momexample_DATA_DIST) $(dist_momtmac_DATA) \
+       $(dist_olddevpsfont_DATA) $(am__dist_otherdoc_DATA_DIST) \
+       $(dist_pdfmarktmac_DATA) $(dist_tmac_DATA) $(dist_tmacmm_DATA) \
+       $(am__DIST_COMMON)
+am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
+ configure.lineno config.status.lineno
+mkinstalldirs = $(install_sh) -d
+CONFIG_HEADER = $(top_builddir)/src/include/config.h
+CONFIG_CLEAN_FILES = test-groff
+CONFIG_CLEAN_VPATH_FILES =
+@WITHOUT_X11_FALSE@am__EXEEXT_1 = gxditview$(EXEEXT)
+@WITHOUT_X11_FALSE@am__EXEEXT_2 = xtotroff$(EXEEXT)
+am__installdirs = "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" \
+       "$(DESTDIR)$(prefixexecbindir)" "$(DESTDIR)$(bindir)" \
+       "$(DESTDIR)$(bindir)" "$(DESTDIR)$(prefixexecbindir)" \
+       "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" \
+       "$(DESTDIR)$(man7dir)" "$(DESTDIR)$(devX10012fontdir)" \
+       "$(DESTDIR)$(devX100fontdir)" "$(DESTDIR)$(devX7512fontdir)" \
+       "$(DESTDIR)$(devX75fontdir)" "$(DESTDIR)$(devasciifontdir)" \
+       "$(DESTDIR)$(devcp1047fontdir)" "$(DESTDIR)$(devdvifontdir)" \
+       "$(DESTDIR)$(devdvigendir)" "$(DESTDIR)$(devhtmlfontdir)" \
+       "$(DESTDIR)$(devlatin1fontdir)" "$(DESTDIR)$(devlbpfontdir)" \
+       "$(DESTDIR)$(devpdffontdir)" "$(DESTDIR)$(devpdffontencdir)" \
+       "$(DESTDIR)$(devpdffontmapdir)" "$(DESTDIR)$(devutf8fontdir)" \
+       "$(DESTDIR)$(chemexampledir)" "$(DESTDIR)$(chempicdir)" \
+       "$(DESTDIR)$(devlj4fontdir)" "$(DESTDIR)$(devlj4fontgendir)" \
+       "$(DESTDIR)$(devpsfontdir)" "$(DESTDIR)$(devpsgendir)" \
+       "$(DESTDIR)$(docexamplesdir)" "$(DESTDIR)$(glilyponddir)" \
+       "$(DESTDIR)$(gpinyindir)" "$(DESTDIR)$(grogdir)" \
+       "$(DESTDIR)$(hdtblexampledir)" "$(DESTDIR)$(localtmacdir)" \
+       "$(DESTDIR)$(mmdir)" "$(DESTDIR)$(mmexampledir)" \
+       "$(DESTDIR)$(momexampledir)" "$(DESTDIR)$(momtmacdir)" \
+       "$(DESTDIR)$(olddevpsfontdir)" "$(DESTDIR)$(otherdocdir)" \
+       "$(DESTDIR)$(pdfmarktmacdir)" "$(DESTDIR)$(tmacdir)" \
+       "$(DESTDIR)$(tmacmmdir)" "$(DESTDIR)$(grofferdir)" \
+       "$(DESTDIR)$(groffoptsdir)" "$(DESTDIR)$(hdtbltmacdir)" \
+       "$(DESTDIR)$(htmlpicdir)" "$(DESTDIR)$(momhtmldir)" \
+       "$(DESTDIR)$(chemexampledir)" "$(DESTDIR)$(chemexample122dir)" \
+       "$(DESTDIR)$(devlj4fontdir)" "$(DESTDIR)$(devpsfontdir)" \
+       "$(DESTDIR)$(docexamplesdir)" "$(DESTDIR)$(docpdfdocdir)" \
+       "$(DESTDIR)$(hdtblexampledir)" "$(DESTDIR)$(htmlexamplesdir)" \
+       "$(DESTDIR)$(mdocdir)" "$(DESTDIR)$(momprocessedexampledir)" \
+       "$(DESTDIR)$(otherdocdir)" "$(DESTDIR)$(pdfmarkpdfdocdir)" \
+       "$(DESTDIR)$(tmacdir)"
+PROGRAMS = $(bin_PROGRAMS) $(nobase_bin_PROGRAMS) \
+       $(prefixexecbin_PROGRAMS)
+LIBRARIES = $(noinst_LIBRARIES)
+AM_V_AR = $(am__v_AR_@AM_V@)
+am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
+am__v_AR_0 = @echo "  AR      " $@;
+am__v_AR_1 = 
+lib_libgnu_a_AR = $(AR) $(ARFLAGS)
+am__DEPENDENCIES_1 =
+am__lib_libgnu_a_SOURCES_DIST = lib/localcharset.c lib/math.c \
+       lib/printf-frexp.c lib/printf-frexpl.c lib/size_max.h \
+       lib/uniwidth/width.c lib/wctype-h.c lib/xsize.h lib/xsize.c
+am__dirstamp = $(am__leading_dot)dirstamp
+@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__objects_1 = lib/uniwidth/width.$(OBJEXT)
+am_lib_libgnu_a_OBJECTS = lib/localcharset.$(OBJEXT) \
+       lib/math.$(OBJEXT) lib/printf-frexp.$(OBJEXT) \
+       lib/printf-frexpl.$(OBJEXT) $(am__objects_1) \
+       lib/wctype-h.$(OBJEXT) lib/xsize.$(OBJEXT)
+lib_libgnu_a_OBJECTS = $(am_lib_libgnu_a_OBJECTS)
+libbib_a_AR = $(AR) $(ARFLAGS)
+libbib_a_LIBADD =
+am_libbib_a_OBJECTS = src/libs/libbib/common.$(OBJEXT) \
+       src/libs/libbib/index.$(OBJEXT) \
+       src/libs/libbib/linear.$(OBJEXT) \
+       src/libs/libbib/search.$(OBJEXT) src/libs/libbib/map.$(OBJEXT)
+libbib_a_OBJECTS = $(am_libbib_a_OBJECTS)
+libdriver_a_AR = $(AR) $(ARFLAGS)
+libdriver_a_LIBADD =
+am_libdriver_a_OBJECTS = src/libs/libdriver/input.$(OBJEXT) \
+       src/libs/libdriver/printer.$(OBJEXT)
+libdriver_a_OBJECTS = $(am_libdriver_a_OBJECTS)
+libgroff_a_AR = $(AR) $(ARFLAGS)
+libgroff_a_LIBADD =
+am_libgroff_a_OBJECTS = src/libs/libgroff/libgroff_a-assert.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-change_lf.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-cmap.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-color.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-cset.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-curtime.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-device.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-errarg.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-error.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-fatal.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-filename.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-font.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-fontfile.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-geometry.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-getopt.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-getopt1.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-glyphuni.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-htmlhint.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-hypot.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-iftoa.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-invalid.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-itoa.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-lf.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-lineno.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-localcharset.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-macropath.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-matherr.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-maxfilename.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-maxpathname.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-mksdir.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-nametoindex.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-new.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-paper.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-prime.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-progname.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-ptable.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-quotearg.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-relocate.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-searchpath.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-spawnvp.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-string.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-strsave.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-symbol.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-tmpfile.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-tmpname.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-unicode.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-uniglyph.$(OBJEXT) \
+       src/libs/libgroff/libgroff_a-uniuni.$(OBJEXT)
+nodist_libgroff_a_OBJECTS =  \
+       src/libs/libgroff/libgroff_a-version.$(OBJEXT)
+libgroff_a_OBJECTS = $(am_libgroff_a_OBJECTS) \
+       $(nodist_libgroff_a_OBJECTS)
+libxutil_a_AR = $(AR) $(ARFLAGS)
+libxutil_a_LIBADD =
+am__libxutil_a_SOURCES_DIST = src/libs/libxutil/DviChar.c \
+       src/libs/libxutil/XFontName.c src/libs/libxutil/xmalloc.c
+@WITHOUT_X11_FALSE@am_libxutil_a_OBJECTS = src/libs/libxutil/libxutil_a-DviChar.$(OBJEXT) \
+@WITHOUT_X11_FALSE@    src/libs/libxutil/libxutil_a-XFontName.$(OBJEXT) \
+@WITHOUT_X11_FALSE@    src/libs/libxutil/libxutil_a-xmalloc.$(OBJEXT)
+libxutil_a_OBJECTS = $(am_libxutil_a_OBJECTS)
+am_addftinfo_OBJECTS = src/utils/addftinfo/addftinfo.$(OBJEXT) \
+       src/utils/addftinfo/guess.$(OBJEXT)
+addftinfo_OBJECTS = $(am_addftinfo_OBJECTS)
+addftinfo_DEPENDENCIES = libgroff.a lib/libgnu.a
+am_eqn_OBJECTS = src/preproc/eqn/eqn-main.$(OBJEXT) \
+       src/preproc/eqn/eqn-lex.$(OBJEXT) \
+       src/preproc/eqn/eqn-box.$(OBJEXT) \
+       src/preproc/eqn/eqn-limit.$(OBJEXT) \
+       src/preproc/eqn/eqn-list.$(OBJEXT) \
+       src/preproc/eqn/eqn-over.$(OBJEXT) \
+       src/preproc/eqn/eqn-text.$(OBJEXT) \
+       src/preproc/eqn/eqn-script.$(OBJEXT) \
+       src/preproc/eqn/eqn-mark.$(OBJEXT) \
+       src/preproc/eqn/eqn-other.$(OBJEXT) \
+       src/preproc/eqn/eqn-delim.$(OBJEXT) \
+       src/preproc/eqn/eqn-sqrt.$(OBJEXT) \
+       src/preproc/eqn/eqn-pile.$(OBJEXT) \
+       src/preproc/eqn/eqn-special.$(OBJEXT) \
+       src/preproc/eqn/eqn-eqn.$(OBJEXT)
+eqn_OBJECTS = $(am_eqn_OBJECTS)
+eqn_DEPENDENCIES = $(am__DEPENDENCIES_1) libgroff.a lib/libgnu.a
+am_grn_OBJECTS = src/preproc/grn/hdb.$(OBJEXT) \
+       src/preproc/grn/hpoint.$(OBJEXT) \
+       src/preproc/grn/hgraph.$(OBJEXT) \
+       src/preproc/grn/main.$(OBJEXT)
+grn_OBJECTS = $(am_grn_OBJECTS)
+grn_DEPENDENCIES = libgroff.a lib/libgnu.a $(am__DEPENDENCIES_1)
+am_grodvi_OBJECTS = src/devices/grodvi/dvi.$(OBJEXT)
+grodvi_OBJECTS = $(am_grodvi_OBJECTS)
+grodvi_DEPENDENCIES = libdriver.a libgroff.a lib/libgnu.a \
+       $(am__DEPENDENCIES_1)
+am_groff_OBJECTS = src/roff/groff/groff.$(OBJEXT) \
+       src/roff/groff/pipeline.$(OBJEXT)
+groff_OBJECTS = $(am_groff_OBJECTS)
+groff_DEPENDENCIES = libgroff.a lib/libgnu.a $(am__DEPENDENCIES_1)
+am_grolbp_OBJECTS = src/devices/grolbp/lbp.$(OBJEXT)
+grolbp_OBJECTS = $(am_grolbp_OBJECTS)
+grolbp_DEPENDENCIES = $(am__DEPENDENCIES_1) libdriver.a libgroff.a \
+       lib/libgnu.a
+am_grolj4_OBJECTS = src/devices/grolj4/lj4.$(OBJEXT)
+grolj4_OBJECTS = $(am_grolj4_OBJECTS)
+grolj4_DEPENDENCIES = $(am__DEPENDENCIES_1) libdriver.a libgroff.a \
+       lib/libgnu.a
+am_grops_OBJECTS = src/devices/grops/ps.$(OBJEXT) \
+       src/devices/grops/psrm.$(OBJEXT)
+grops_OBJECTS = $(am_grops_OBJECTS)
+grops_DEPENDENCIES = $(am__DEPENDENCIES_1) libdriver.a libgroff.a \
+       lib/libgnu.a
+am_grotty_OBJECTS = src/devices/grotty/tty.$(OBJEXT)
+grotty_OBJECTS = $(am_grotty_OBJECTS)
+grotty_DEPENDENCIES = $(am__DEPENDENCIES_1) libdriver.a libgroff.a \
+       lib/libgnu.a
+am__gxditview_SOURCES_DIST = src/devices/xditview/device.c \
+       src/devices/xditview/draw.c src/devices/xditview/draw.h \
+       src/devices/xditview/Dvi.c src/devices/xditview/font.c \
+       src/devices/xditview/font.h src/devices/xditview/lex.c \
+       src/devices/xditview/lex.h src/devices/xditview/page.c \
+       src/devices/xditview/page.h src/devices/xditview/parse.c \
+       src/devices/xditview/parse.h src/devices/xditview/xditview.c \
+       src/devices/xditview/device.h src/devices/xditview/DviP.h \
+       src/devices/xditview/Menu.h src/devices/xditview/Dvi.h
+am__objects_2 = src/devices/xditview/gxditview-device.$(OBJEXT) \
+       src/devices/xditview/gxditview-draw.$(OBJEXT) \
+       src/devices/xditview/gxditview-Dvi.$(OBJEXT) \
+       src/devices/xditview/gxditview-font.$(OBJEXT) \
+       src/devices/xditview/gxditview-lex.$(OBJEXT) \
+       src/devices/xditview/gxditview-page.$(OBJEXT) \
+       src/devices/xditview/gxditview-parse.$(OBJEXT) \
+       src/devices/xditview/gxditview-xditview.$(OBJEXT)
+@WITHOUT_X11_FALSE@am_gxditview_OBJECTS = $(am__objects_2)
+am__objects_3 =
+@WITHOUT_X11_FALSE@nodist_gxditview_OBJECTS = $(am__objects_3)
+gxditview_OBJECTS = $(am_gxditview_OBJECTS) \
+       $(nodist_gxditview_OBJECTS)
+@WITHOUT_X11_FALSE@gxditview_DEPENDENCIES = $(am__DEPENDENCIES_1) \
+@WITHOUT_X11_FALSE@    $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+@WITHOUT_X11_FALSE@    $(am__DEPENDENCIES_1) libxutil.a \
+@WITHOUT_X11_FALSE@    lib/libgnu.a
+am_hpftodit_OBJECTS = src/utils/hpftodit/hpftodit.$(OBJEXT) \
+       src/utils/hpftodit/hpuni.$(OBJEXT)
+hpftodit_OBJECTS = $(am_hpftodit_OBJECTS)
+hpftodit_DEPENDENCIES = libgroff.a $(am__DEPENDENCIES_1) lib/libgnu.a
+am_indxbib_OBJECTS = src/utils/indxbib/indxbib.$(OBJEXT) \
+       src/utils/indxbib/signal.$(OBJEXT)
+indxbib_OBJECTS = $(am_indxbib_OBJECTS)
+indxbib_DEPENDENCIES = libbib.a libgroff.a $(am__DEPENDENCIES_1) \
+       lib/libgnu.a
+am_lkbib_OBJECTS = src/utils/lkbib/lkbib.$(OBJEXT)
+lkbib_OBJECTS = $(am_lkbib_OBJECTS)
+lkbib_DEPENDENCIES = libbib.a libgroff.a $(am__DEPENDENCIES_1) \
+       lib/libgnu.a
+am_lookbib_OBJECTS = src/utils/lookbib/lookbib.$(OBJEXT)
+lookbib_OBJECTS = $(am_lookbib_OBJECTS)
+lookbib_DEPENDENCIES = libbib.a libgroff.a $(am__DEPENDENCIES_1) \
+       lib/libgnu.a
+am_pfbtops_OBJECTS = src/utils/pfbtops/pfbtops.$(OBJEXT)
+pfbtops_OBJECTS = $(am_pfbtops_OBJECTS)
+pfbtops_DEPENDENCIES = libgroff.a $(am__DEPENDENCIES_1) lib/libgnu.a
+am_pic_OBJECTS = src/preproc/pic/pic-pic.$(OBJEXT) \
+       src/preproc/pic/pic-lex.$(OBJEXT) \
+       src/preproc/pic/pic-main.$(OBJEXT) \
+       src/preproc/pic/pic-object.$(OBJEXT) \
+       src/preproc/pic/pic-common.$(OBJEXT) \
+       src/preproc/pic/pic-troff.$(OBJEXT) \
+       src/preproc/pic/pic-tex.$(OBJEXT)
+pic_OBJECTS = $(am_pic_OBJECTS)
+pic_DEPENDENCIES = libgroff.a $(am__DEPENDENCIES_1) lib/libgnu.a
+am_post_grohtml_OBJECTS = src/devices/grohtml/post-html.$(OBJEXT) \
+       src/devices/grohtml/html-table.$(OBJEXT) \
+       src/devices/grohtml/html-text.$(OBJEXT) \
+       src/devices/grohtml/output.$(OBJEXT)
+post_grohtml_OBJECTS = $(am_post_grohtml_OBJECTS)
+post_grohtml_DEPENDENCIES = $(am__DEPENDENCIES_1) libdriver.a \
+       libgroff.a lib/libgnu.a
+am_pre_grohtml_OBJECTS = src/preproc/html/pre-html.$(OBJEXT) \
+       src/preproc/html/pushback.$(OBJEXT)
+pre_grohtml_OBJECTS = $(am_pre_grohtml_OBJECTS)
+pre_grohtml_DEPENDENCIES = libgroff.a lib/libgnu.a \
+       $(am__DEPENDENCIES_1)
+am_preconv_OBJECTS = src/preproc/preconv/preconv-preconv.$(OBJEXT)
+preconv_OBJECTS = $(am_preconv_OBJECTS)
+preconv_DEPENDENCIES = libgroff.a $(am__DEPENDENCIES_1) \
+       $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) lib/libgnu.a
+am_refer_OBJECTS = src/preproc/refer/refer-command.$(OBJEXT) \
+       src/preproc/refer/refer-ref.$(OBJEXT) \
+       src/preproc/refer/refer-refer.$(OBJEXT) \
+       src/preproc/refer/refer-token.$(OBJEXT) \
+       src/preproc/refer/refer-label.$(OBJEXT)
+refer_OBJECTS = $(am_refer_OBJECTS)
+refer_DEPENDENCIES = libbib.a libgroff.a $(am__DEPENDENCIES_1) \
+       lib/libgnu.a
+am_soelim_OBJECTS = src/preproc/soelim/soelim.$(OBJEXT)
+soelim_OBJECTS = $(am_soelim_OBJECTS)
+soelim_DEPENDENCIES = libgroff.a $(am__DEPENDENCIES_1) lib/libgnu.a
+am_tbl_OBJECTS = src/preproc/tbl/main.$(OBJEXT) \
+       src/preproc/tbl/table.$(OBJEXT)
+tbl_OBJECTS = $(am_tbl_OBJECTS)
+tbl_DEPENDENCIES = libgroff.a $(am__DEPENDENCIES_1) lib/libgnu.a
+am_tfmtodit_OBJECTS = src/utils/tfmtodit/tfmtodit.$(OBJEXT)
+tfmtodit_OBJECTS = $(am_tfmtodit_OBJECTS)
+tfmtodit_DEPENDENCIES = libgroff.a $(am__DEPENDENCIES_1) lib/libgnu.a
+am_troff_OBJECTS = src/roff/troff/dictionary.$(OBJEXT) \
+       src/roff/troff/div.$(OBJEXT) src/roff/troff/env.$(OBJEXT) \
+       src/roff/troff/input.$(OBJEXT) src/roff/troff/mtsm.$(OBJEXT) \
+       src/roff/troff/node.$(OBJEXT) src/roff/troff/number.$(OBJEXT) \
+       src/roff/troff/reg.$(OBJEXT)
+nodist_troff_OBJECTS = src/roff/troff/majorminor.$(OBJEXT)
+troff_OBJECTS = $(am_troff_OBJECTS) $(nodist_troff_OBJECTS)
+troff_DEPENDENCIES = libgroff.a lib/libgnu.a $(am__DEPENDENCIES_1)
+am__xtotroff_SOURCES_DIST = src/utils/xtotroff/xtotroff.c
+@WITHOUT_X11_FALSE@am_xtotroff_OBJECTS = src/utils/xtotroff/xtotroff-xtotroff.$(OBJEXT)
+xtotroff_OBJECTS = $(am_xtotroff_OBJECTS)
+@WITHOUT_X11_FALSE@xtotroff_DEPENDENCIES = libxutil.a libgroff.a \
+@WITHOUT_X11_FALSE@    $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+@WITHOUT_X11_FALSE@    $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_1) \
+@WITHOUT_X11_FALSE@    lib/libgnu.a
+am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
+am__vpath_adj = case $$p in \
+    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
+    *) f=$$p;; \
+  esac;
+am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`;
+am__install_max = 40
+am__nobase_strip_setup = \
+  srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'`
+am__nobase_strip = \
+  for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||"
+am__nobase_list = $(am__nobase_strip_setup); \
+  for p in $$list; do echo "$$p $$p"; done | \
+  sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \
+  $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \
+    if (++n[$$2] == $(am__install_max)) \
+      { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \
+    END { for (dir in files) print dir, files[dir] }'
+am__base_list = \
+  sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \
+  sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g'
+am__uninstall_files_from_dir = { \
+  test -z "$$files" \
+    || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \
+    || { echo " ( cd '$$dir' && rm -f" $$files ")"; \
+         $(am__cd) "$$dir" && rm -f $$files; }; \
+  }
+SCRIPTS = $(bin_SCRIPTS) $(dist_bin_SCRIPTS) $(prefixexecbin_SCRIPTS)
+AM_V_P = $(am__v_P_@AM_V@)
+am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
+am__v_P_0 = false
+am__v_P_1 = :
+AM_V_GEN = $(am__v_GEN_@AM_V@)
+am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
+am__v_GEN_0 = @echo "  GEN     " $@;
+am__v_GEN_1 = 
+AM_V_at = $(am__v_at_@AM_V@)
+am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
+am__v_at_0 = @
+am__v_at_1 = 
+DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src/include
+depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
+am__maybe_remake_depfiles = depfiles
+am__depfiles_remade = lib/$(DEPDIR)/asnprintf.Po \
+       lib/$(DEPDIR)/float.Po lib/$(DEPDIR)/fprintf.Po \
+       lib/$(DEPDIR)/frexp.Po lib/$(DEPDIR)/frexpl.Po \
+       lib/$(DEPDIR)/fseterr.Po lib/$(DEPDIR)/isnan.Po \
+       lib/$(DEPDIR)/isnand.Po lib/$(DEPDIR)/isnanf.Po \
+       lib/$(DEPDIR)/isnanl.Po lib/$(DEPDIR)/itold.Po \
+       lib/$(DEPDIR)/localcharset.Po lib/$(DEPDIR)/math.Po \
+       lib/$(DEPDIR)/memchr.Po lib/$(DEPDIR)/printf-args.Po \
+       lib/$(DEPDIR)/printf-frexp.Po lib/$(DEPDIR)/printf-frexpl.Po \
+       lib/$(DEPDIR)/printf-parse.Po lib/$(DEPDIR)/signbitd.Po \
+       lib/$(DEPDIR)/signbitf.Po lib/$(DEPDIR)/signbitl.Po \
+       lib/$(DEPDIR)/snprintf.Po lib/$(DEPDIR)/vasnprintf.Po \
+       lib/$(DEPDIR)/vsnprintf.Po lib/$(DEPDIR)/wctype-h.Po \
+       lib/$(DEPDIR)/wcwidth.Po lib/$(DEPDIR)/xsize.Po \
+       lib/uniwidth/$(DEPDIR)/width.Po \
+       src/devices/grodvi/$(DEPDIR)/dvi.Po \
+       src/devices/grohtml/$(DEPDIR)/html-table.Po \
+       src/devices/grohtml/$(DEPDIR)/html-text.Po \
+       src/devices/grohtml/$(DEPDIR)/output.Po \
+       src/devices/grohtml/$(DEPDIR)/post-html.Po \
+       src/devices/grolbp/$(DEPDIR)/lbp.Po \
+       src/devices/grolj4/$(DEPDIR)/lj4.Po \
+       src/devices/grops/$(DEPDIR)/ps.Po \
+       src/devices/grops/$(DEPDIR)/psrm.Po \
+       src/devices/grotty/$(DEPDIR)/tty.Po \
+       src/devices/xditview/$(DEPDIR)/gxditview-Dvi.Po \
+       src/devices/xditview/$(DEPDIR)/gxditview-device.Po \
+       src/devices/xditview/$(DEPDIR)/gxditview-draw.Po \
+       src/devices/xditview/$(DEPDIR)/gxditview-font.Po \
+       src/devices/xditview/$(DEPDIR)/gxditview-lex.Po \
+       src/devices/xditview/$(DEPDIR)/gxditview-page.Po \
+       src/devices/xditview/$(DEPDIR)/gxditview-parse.Po \
+       src/devices/xditview/$(DEPDIR)/gxditview-xditview.Po \
+       src/libs/libbib/$(DEPDIR)/common.Po \
+       src/libs/libbib/$(DEPDIR)/index.Po \
+       src/libs/libbib/$(DEPDIR)/linear.Po \
+       src/libs/libbib/$(DEPDIR)/map.Po \
+       src/libs/libbib/$(DEPDIR)/search.Po \
+       src/libs/libdriver/$(DEPDIR)/input.Po \
+       src/libs/libdriver/$(DEPDIR)/printer.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-assert.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-change_lf.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-cmap.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-color.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-cset.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-curtime.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-device.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-errarg.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-error.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-fatal.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-filename.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-font.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-fontfile.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-geometry.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt1.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-glyphuni.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-htmlhint.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-hypot.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-iftoa.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-invalid.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-itoa.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-lf.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-lineno.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-localcharset.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-macropath.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-matherr.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-maxfilename.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-maxpathname.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-mksdir.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-nametoindex.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-new.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-paper.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-prime.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-progname.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-ptable.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-quotearg.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-relocate.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-searchpath.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-spawnvp.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-string.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-strsave.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-symbol.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpfile.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpname.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-unicode.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-uniglyph.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-uniuni.Po \
+       src/libs/libgroff/$(DEPDIR)/libgroff_a-version.Po \
+       src/libs/libxutil/$(DEPDIR)/libxutil_a-DviChar.Po \
+       src/libs/libxutil/$(DEPDIR)/libxutil_a-XFontName.Po \
+       src/libs/libxutil/$(DEPDIR)/libxutil_a-xmalloc.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-box.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-delim.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-eqn.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-lex.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-limit.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-list.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-main.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-mark.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-other.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-over.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-pile.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-script.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-special.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-sqrt.Po \
+       src/preproc/eqn/$(DEPDIR)/eqn-text.Po \
+       src/preproc/grn/$(DEPDIR)/hdb.Po \
+       src/preproc/grn/$(DEPDIR)/hgraph.Po \
+       src/preproc/grn/$(DEPDIR)/hpoint.Po \
+       src/preproc/grn/$(DEPDIR)/main.Po \
+       src/preproc/html/$(DEPDIR)/pre-html.Po \
+       src/preproc/html/$(DEPDIR)/pushback.Po \
+       src/preproc/pic/$(DEPDIR)/pic-common.Po \
+       src/preproc/pic/$(DEPDIR)/pic-lex.Po \
+       src/preproc/pic/$(DEPDIR)/pic-main.Po \
+       src/preproc/pic/$(DEPDIR)/pic-object.Po \
+       src/preproc/pic/$(DEPDIR)/pic-pic.Po \
+       src/preproc/pic/$(DEPDIR)/pic-tex.Po \
+       src/preproc/pic/$(DEPDIR)/pic-troff.Po \
+       src/preproc/preconv/$(DEPDIR)/preconv-preconv.Po \
+       src/preproc/refer/$(DEPDIR)/refer-command.Po \
+       src/preproc/refer/$(DEPDIR)/refer-label.Po \
+       src/preproc/refer/$(DEPDIR)/refer-ref.Po \
+       src/preproc/refer/$(DEPDIR)/refer-refer.Po \
+       src/preproc/refer/$(DEPDIR)/refer-token.Po \
+       src/preproc/soelim/$(DEPDIR)/soelim.Po \
+       src/preproc/tbl/$(DEPDIR)/main.Po \
+       src/preproc/tbl/$(DEPDIR)/table.Po \
+       src/roff/groff/$(DEPDIR)/groff.Po \
+       src/roff/groff/$(DEPDIR)/pipeline.Po \
+       src/roff/troff/$(DEPDIR)/dictionary.Po \
+       src/roff/troff/$(DEPDIR)/div.Po \
+       src/roff/troff/$(DEPDIR)/env.Po \
+       src/roff/troff/$(DEPDIR)/input.Po \
+       src/roff/troff/$(DEPDIR)/majorminor.Po \
+       src/roff/troff/$(DEPDIR)/mtsm.Po \
+       src/roff/troff/$(DEPDIR)/node.Po \
+       src/roff/troff/$(DEPDIR)/number.Po \
+       src/roff/troff/$(DEPDIR)/reg.Po \
+       src/utils/addftinfo/$(DEPDIR)/addftinfo.Po \
+       src/utils/addftinfo/$(DEPDIR)/guess.Po \
+       src/utils/hpftodit/$(DEPDIR)/hpftodit.Po \
+       src/utils/hpftodit/$(DEPDIR)/hpuni.Po \
+       src/utils/indxbib/$(DEPDIR)/indxbib.Po \
+       src/utils/indxbib/$(DEPDIR)/signal.Po \
+       src/utils/lkbib/$(DEPDIR)/lkbib.Po \
+       src/utils/lookbib/$(DEPDIR)/lookbib.Po \
+       src/utils/pfbtops/$(DEPDIR)/dummy.Po \
+       src/utils/pfbtops/$(DEPDIR)/pfbtops.Po \
+       src/utils/tfmtodit/$(DEPDIR)/tfmtodit.Po \
+       src/utils/xtotroff/$(DEPDIR)/xtotroff-xtotroff.Po
+am__mv = mv -f
+AM_V_lt = $(am__v_lt_@AM_V@)
+am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
+am__v_lt_0 = --silent
+am__v_lt_1 = 
+COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
+       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
+AM_V_CC = $(am__v_CC_@AM_V@)
+am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
+am__v_CC_0 = @echo "  CC      " $@;
+am__v_CC_1 = 
+CCLD = $(CC)
+LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
+AM_V_CCLD = $(am__v_CCLD_@AM_V@)
+am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
+am__v_CCLD_0 = @echo "  CCLD    " $@;
+am__v_CCLD_1 = 
+CXXCOMPILE = $(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
+       $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS)
+AM_V_CXX = $(am__v_CXX_@AM_V@)
+am__v_CXX_ = $(am__v_CXX_@AM_DEFAULT_V@)
+am__v_CXX_0 = @echo "  CXX     " $@;
+am__v_CXX_1 = 
+CXXLD = $(CXX)
+CXXLINK = $(CXXLD) $(AM_CXXFLAGS) $(CXXFLAGS) $(AM_LDFLAGS) $(LDFLAGS) \
+       -o $@
+AM_V_CXXLD = $(am__v_CXXLD_@AM_V@)
+am__v_CXXLD_ = $(am__v_CXXLD_@AM_DEFAULT_V@)
+am__v_CXXLD_0 = @echo "  CXXLD   " $@;
+am__v_CXXLD_1 = 
+am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \
+                  -e s/c++$$/h++/ -e s/c$$/h/
+YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS)
+AM_V_YACC = $(am__v_YACC_@AM_V@)
+am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@)
+am__v_YACC_0 = @echo "  YACC    " $@;
+am__v_YACC_1 = 
+YLWRAP = $(top_srcdir)/build-aux/ylwrap
+SOURCES = $(lib_libgnu_a_SOURCES) $(EXTRA_lib_libgnu_a_SOURCES) \
+       $(libbib_a_SOURCES) $(libdriver_a_SOURCES) \
+       $(libgroff_a_SOURCES) $(nodist_libgroff_a_SOURCES) \
+       $(libxutil_a_SOURCES) $(addftinfo_SOURCES) $(eqn_SOURCES) \
+       $(grn_SOURCES) $(grodvi_SOURCES) $(groff_SOURCES) \
+       $(grolbp_SOURCES) $(grolj4_SOURCES) $(grops_SOURCES) \
+       $(grotty_SOURCES) $(gxditview_SOURCES) \
+       $(nodist_gxditview_SOURCES) $(hpftodit_SOURCES) \
+       $(indxbib_SOURCES) $(lkbib_SOURCES) $(lookbib_SOURCES) \
+       $(pfbtops_SOURCES) $(nodist_EXTRA_pfbtops_SOURCES) \
+       $(pic_SOURCES) $(post_grohtml_SOURCES) $(pre_grohtml_SOURCES) \
+       $(preconv_SOURCES) $(refer_SOURCES) $(soelim_SOURCES) \
+       $(tbl_SOURCES) $(tfmtodit_SOURCES) $(troff_SOURCES) \
+       $(nodist_troff_SOURCES) $(xtotroff_SOURCES)
+DIST_SOURCES = $(am__lib_libgnu_a_SOURCES_DIST) \
+       $(EXTRA_lib_libgnu_a_SOURCES) $(libbib_a_SOURCES) \
+       $(libdriver_a_SOURCES) $(libgroff_a_SOURCES) \
+       $(am__libxutil_a_SOURCES_DIST) $(addftinfo_SOURCES) \
+       $(eqn_SOURCES) $(grn_SOURCES) $(grodvi_SOURCES) \
+       $(groff_SOURCES) $(grolbp_SOURCES) $(grolj4_SOURCES) \
+       $(grops_SOURCES) $(grotty_SOURCES) \
+       $(am__gxditview_SOURCES_DIST) $(hpftodit_SOURCES) \
+       $(indxbib_SOURCES) $(lkbib_SOURCES) $(lookbib_SOURCES) \
+       $(pfbtops_SOURCES) $(pic_SOURCES) $(post_grohtml_SOURCES) \
+       $(pre_grohtml_SOURCES) $(preconv_SOURCES) $(refer_SOURCES) \
+       $(soelim_SOURCES) $(tbl_SOURCES) $(tfmtodit_SOURCES) \
+       $(troff_SOURCES) $(am__xtotroff_SOURCES_DIST)
+am__can_run_installinfo = \
+  case $$AM_UPDATE_INFO_DIR in \
+    n|no|NO) false;; \
+    *) (install-info --version) >/dev/null 2>&1;; \
+  esac
+NROFF = nroff
+MANS = $(man1_MANS) $(man5_MANS) $(man7_MANS)
+am__dist_chemexample_DATA_DIST = contrib/chem/examples/atp.chem \
+       contrib/chem/examples/cholesterin.chem \
+       contrib/chem/examples/ethamivan.chem \
+       contrib/chem/examples/lsd.chem \
+       contrib/chem/examples/morphine.chem \
+       contrib/chem/examples/penicillin.chem \
+       contrib/chem/examples/reserpine.chem
+am__dist_docexamples_DATA_DIST = doc/webpage.ms doc/groff.css \
+       doc/grnexmpl.g doc/grnexmpl.me
+am__dist_hdtblexample_DATA_DIST = contrib/hdtbl/examples/common.roff \
+       contrib/hdtbl/examples/chess_board.roff \
+       contrib/hdtbl/examples/color_boxes.roff \
+       contrib/hdtbl/examples/color_nested_tables.roff \
+       contrib/hdtbl/examples/color_table_cells.roff \
+       contrib/hdtbl/examples/color_transitions.roff \
+       contrib/hdtbl/examples/col_rowspan_colors.roff \
+       contrib/hdtbl/examples/mixed_pickles.roff \
+       contrib/hdtbl/examples/rainbow.roff \
+       contrib/hdtbl/examples/short_reference.roff
+am__dist_momexample_DATA_DIST = contrib/mom/examples/letter.mom \
+       contrib/mom/examples/mom-pdf.mom \
+       contrib/mom/examples/mon_premier_doc.mom \
+       contrib/mom/examples/sample_docs.mom \
+       contrib/mom/examples/typesetting.mom \
+       contrib/mom/examples/README.txt \
+       contrib/mom/examples/README-fr.txt \
+       contrib/mom/examples/elvis_syntax \
+       contrib/mom/examples/elvis_syntax.new \
+       contrib/mom/examples/penguin.ps \
+       contrib/mom/examples/penguin.pdf contrib/mom/examples/mom.vim \
+       contrib/mom/examples/slide-demo.mom
+am__dist_otherdoc_DATA_DIST = doc/meref.me doc/meintro.me \
+       doc/meintro_fr.me doc/pic.ms
+DATA = $(devX10012font_DATA) $(devX100font_DATA) $(devX7512font_DATA) \
+       $(devX75font_DATA) $(devasciifont_DATA) $(devcp1047font_DATA) \
+       $(devdvifont_DATA) $(devdvigen_DATA) $(devhtmlfont_DATA) \
+       $(devlatin1font_DATA) $(devlbpfont_DATA) $(devpdffont_DATA) \
+       $(devpdffontenc_DATA) $(devpdffontmap_DATA) \
+       $(devutf8font_DATA) $(dist_chemexample_DATA) \
+       $(dist_chempic_DATA) $(dist_devlj4font_DATA) \
+       $(dist_devlj4fontgen_DATA) $(dist_devpsfont_DATA) \
+       $(dist_devpsgen_DATA) $(dist_docexamples_DATA) \
+       $(dist_glilypond_DATA) $(dist_gpinyin_DATA) $(dist_grog_DATA) \
+       $(dist_hdtblexample_DATA) $(dist_localtmac_DATA) \
+       $(dist_mm_DATA) $(dist_mmexample_DATA) $(dist_momexample_DATA) \
+       $(dist_momtmac_DATA) $(dist_olddevpsfont_DATA) \
+       $(dist_otherdoc_DATA) $(dist_pdfmarktmac_DATA) \
+       $(dist_tmac_DATA) $(dist_tmacmm_DATA) $(groffer_DATA) \
+       $(groffopts_DATA) $(hdtbltmac_DATA) $(htmlpic_DATA) \
+       $(momhtml_DATA) $(nodist_chemexample_DATA) \
+       $(nodist_chemexample122_DATA) $(nodist_devlj4font_DATA) \
+       $(nodist_devpsfont_DATA) $(nodist_docexamples_DATA) \
+       $(nodist_docpdfdoc_DATA) $(nodist_hdtblexample_DATA) \
+       $(nodist_htmlexamples_DATA) $(nodist_mdoc_DATA) \
+       $(nodist_momprocessedexample_DATA) $(nodist_otherdoc_DATA) \
+       $(nodist_pdfmarkpdfdoc_DATA) $(nodist_tmac_DATA)
+HEADERS = $(nodist_noinst_HEADERS)
+am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
+# Read a list of newline-separated strings from the standard input,
+# and print each of them once, without duplicates.  Input order is
+# *not* preserved.
+am__uniquify_input = $(AWK) '\
+  BEGIN { nonempty = 0; } \
+  { items[$$0] = 1; nonempty = 1; } \
+  END { if (nonempty) { for (i in items) print i; }; } \
+'
+# Make sure the list of sources is unique.  This is necessary because,
+# e.g., the same source file might be shared among _SOURCES variables
+# for different programs/libraries.
+am__define_uniq_tagged_files = \
+  list='$(am__tagged_files)'; \
+  unique=`for i in $$list; do \
+    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
+  done | $(am__uniquify_input)`
+CTAGS = ctags
+CSCOPE = cscope
+AM_RECURSIVE_TARGETS = cscope check recheck
+am__tty_colors_dummy = \
+  mgn= red= grn= lgn= blu= brg= std=; \
+  am__color_tests=no
+am__tty_colors = { \
+  $(am__tty_colors_dummy); \
+  if test "X$(AM_COLOR_TESTS)" = Xno; then \
+    am__color_tests=no; \
+  elif test "X$(AM_COLOR_TESTS)" = Xalways; then \
+    am__color_tests=yes; \
+  elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \
+    am__color_tests=yes; \
+  fi; \
+  if test $$am__color_tests = yes; then \
+    red='\e[0;31m'; \
+    grn='\e[0;32m'; \
+    lgn='\e[1;32m'; \
+    blu='\e[1;34m'; \
+    mgn='\e[0;35m'; \
+    brg='\e[1m'; \
+    std='\e[m'; \
+  fi; \
+}
+am__recheck_rx = ^[    ]*:recheck:[    ]*
+am__global_test_result_rx = ^[         ]*:global-test-result:[         ]*
+am__copy_in_global_log_rx = ^[         ]*:copy-in-global-log:[         ]*
+# A command that, given a newline-separated list of test names on the
+# standard input, print the name of the tests that are to be re-run
+# upon "make recheck".
+am__list_recheck_tests = $(AWK) '{ \
+  recheck = 1; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+        { \
+          if ((getline line2 < ($$0 ".log")) < 0) \
+           recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \
+        { \
+          recheck = 0; \
+          break; \
+        } \
+      else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \
+        { \
+          break; \
+        } \
+    }; \
+  if (recheck) \
+    print $$0; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# A command that, given a newline-separated list of test names on the
+# standard input, create the global log from their .trs and .log files.
+am__create_global_log = $(AWK) ' \
+function fatal(msg) \
+{ \
+  print "fatal: making $@: " msg | "cat >&2"; \
+  exit 1; \
+} \
+function rst_section(header) \
+{ \
+  print header; \
+  len = length(header); \
+  for (i = 1; i <= len; i = i + 1) \
+    printf "="; \
+  printf "\n\n"; \
+} \
+{ \
+  copy_in_global_log = 1; \
+  global_test_result = "RUN"; \
+  while ((rc = (getline line < ($$0 ".trs"))) != 0) \
+    { \
+      if (rc < 0) \
+         fatal("failed to read from " $$0 ".trs"); \
+      if (line ~ /$(am__global_test_result_rx)/) \
+        { \
+          sub("$(am__global_test_result_rx)", "", line); \
+          sub("[       ]*$$", "", line); \
+          global_test_result = line; \
+        } \
+      else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \
+        copy_in_global_log = 0; \
+    }; \
+  if (copy_in_global_log) \
+    { \
+      rst_section(global_test_result ": " $$0); \
+      while ((rc = (getline line < ($$0 ".log"))) != 0) \
+      { \
+        if (rc < 0) \
+          fatal("failed to read from " $$0 ".log"); \
+        print line; \
+      }; \
+      printf "\n"; \
+    }; \
+  close ($$0 ".trs"); \
+  close ($$0 ".log"); \
+}'
+# Restructured Text title.
+am__rst_title = { sed 's/.*/   &   /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; }
+# Solaris 10 'make', and several other traditional 'make' implementations,
+# pass "-e" to $(SHELL), and POSIX 2008 even requires this.  Work around it
+# by disabling -e (using the XSI extension "set +e") if it's set.
+am__sh_e_setup = case $$- in *e*) set +e;; esac
+# Default flags passed to test drivers.
+am__common_driver_flags = \
+  --color-tests "$$am__color_tests" \
+  --enable-hard-errors "$$am__enable_hard_errors" \
+  --expect-failure "$$am__expect_failure"
+# To be inserted before the command running the test.  Creates the
+# directory for the log if needed.  Stores in $dir the directory
+# containing $f, in $tst the test, in $log the log.  Executes the
+# developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and
+# passes TESTS_ENVIRONMENT.  Set up options for the wrapper that
+# will run the test scripts (or their associated LOG_COMPILER, if
+# thy have one).
+am__check_pre = \
+$(am__sh_e_setup);                                     \
+$(am__vpath_adj_setup) $(am__vpath_adj)                        \
+$(am__tty_colors);                                     \
+srcdir=$(srcdir); export srcdir;                       \
+case "$@" in                                           \
+  */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;;   \
+    *) am__odir=.;;                                    \
+esac;                                                  \
+test "x$$am__odir" = x"." || test -d "$$am__odir"      \
+  || $(MKDIR_P) "$$am__odir" || exit $$?;              \
+if test -f "./$$f"; then dir=./;                       \
+elif test -f "$$f"; then dir=;                         \
+else dir="$(srcdir)/"; fi;                             \
+tst=$$dir$$f; log='$@';                                \
+if test -n '$(DISABLE_HARD_ERRORS)'; then              \
+  am__enable_hard_errors=no;                           \
+else                                                   \
+  am__enable_hard_errors=yes;                          \
+fi;                                                    \
+case " $(XFAIL_TESTS) " in                             \
+  *[\ \        ]$$f[\ \        ]* | *[\ \      ]$$dir$$f[\ \   ]*) \
+    am__expect_failure=yes;;                           \
+  *)                                                   \
+    am__expect_failure=no;;                            \
+esac;                                                  \
+$(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT)
+# A shell command to get the names of the tests scripts with any registered
+# extension removed (i.e., equivalently, the names of the test logs, with
+# the '.log' extension removed).  The result is saved in the shell variable
+# '$bases'.  This honors runtime overriding of TESTS and TEST_LOGS.  Sadly,
+# we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)",
+# since that might cause problem with VPATH rewrites for suffix-less tests.
+# See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'.
+am__set_TESTS_bases = \
+  bases='$(TEST_LOGS)'; \
+  bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \
+  bases=`echo $$bases`
+RECHECK_LOGS = $(TEST_LOGS)
+TEST_SUITE_LOG = test-suite.log
+TEST_EXTENSIONS = @EXEEXT@ .test
+LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS)
+am__set_b = \
+  case '$@' in \
+    */*) \
+      case '$*' in \
+        */*) b='$*';; \
+          *) b=`echo '$@' | sed 's/\.log$$//'`; \
+       esac;; \
+    *) \
+      b='$*';; \
+  esac
+am__test_logs1 = $(TESTS:=.log)
+am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log)
+TEST_LOGS = $(am__test_logs2:.test.log=.log)
+TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver
+TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \
+       $(TEST_LOG_FLAGS)
+am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/test-groff.in \
+       $(top_srcdir)/arch/mingw/mingw.am \
+       $(top_srcdir)/arch/misc/misc.am \
+       $(top_srcdir)/build-aux/compile \
+       $(top_srcdir)/build-aux/config.guess \
+       $(top_srcdir)/build-aux/config.rpath \
+       $(top_srcdir)/build-aux/config.sub \
+       $(top_srcdir)/build-aux/depcomp \
+       $(top_srcdir)/build-aux/install-sh \
+       $(top_srcdir)/build-aux/missing \
+       $(top_srcdir)/build-aux/test-driver \
+       $(top_srcdir)/build-aux/ylwrap \
+       $(top_srcdir)/contrib/chem/chem.am \
+       $(top_srcdir)/contrib/eqn2graph/eqn2graph.am \
+       $(top_srcdir)/contrib/gdiffmk/gdiffmk.am \
+       $(top_srcdir)/contrib/glilypond/glilypond.am \
+       $(top_srcdir)/contrib/gperl/gperl.am \
+       $(top_srcdir)/contrib/gpinyin/gpinyin.am \
+       $(top_srcdir)/contrib/grap2graph/grap2graph.am \
+       $(top_srcdir)/contrib/groff_filenames/groff_filenames.am \
+       $(top_srcdir)/contrib/groffer/groffer.am \
+       $(top_srcdir)/contrib/hdtbl/hdtbl.am \
+       $(top_srcdir)/contrib/mm/mm.am \
+       $(top_srcdir)/contrib/mom/mom.am \
+       $(top_srcdir)/contrib/pdfmark/pdfmark.am \
+       $(top_srcdir)/contrib/pic2graph/pic2graph.am \
+       $(top_srcdir)/doc/doc.am \
+       $(top_srcdir)/font/devX100-12/devX100-12.am \
+       $(top_srcdir)/font/devX100/devX100.am \
+       $(top_srcdir)/font/devX75-12/devX75-12.am \
+       $(top_srcdir)/font/devX75/devX75.am \
+       $(top_srcdir)/font/devascii/devascii.am \
+       $(top_srcdir)/font/devcp1047/devcp1047.am \
+       $(top_srcdir)/font/devdvi/devdvi.am \
+       $(top_srcdir)/font/devhtml/devhtml.am \
+       $(top_srcdir)/font/devlatin1/devlatin1.am \
+       $(top_srcdir)/font/devlbp/devlbp.am \
+       $(top_srcdir)/font/devlj4/devlj4.am \
+       $(top_srcdir)/font/devpdf/devpdf.am \
+       $(top_srcdir)/font/devps/devps.am \
+       $(top_srcdir)/font/devutf8/devutf8.am \
+       $(top_srcdir)/font/scripts/scripts.am \
+       $(top_srcdir)/lib/gnulib.mk $(top_srcdir)/man/man.am \
+       $(top_srcdir)/src/devices/grodvi/grodvi.am \
+       $(top_srcdir)/src/devices/grohtml/grohtml.am \
+       $(top_srcdir)/src/devices/grolbp/grolbp.am \
+       $(top_srcdir)/src/devices/grolj4/grolj4.am \
+       $(top_srcdir)/src/devices/gropdf/gropdf.am \
+       $(top_srcdir)/src/devices/grops/grops.am \
+       $(top_srcdir)/src/devices/grotty/grotty.am \
+       $(top_srcdir)/src/devices/xditview/xditview.am \
+       $(top_srcdir)/src/include/config.hin \
+       $(top_srcdir)/src/include/include.am \
+       $(top_srcdir)/src/libs/libbib/libbib.am \
+       $(top_srcdir)/src/libs/libdriver/libdriver.am \
+       $(top_srcdir)/src/libs/libgroff/libgroff.am \
+       $(top_srcdir)/src/libs/libxutil/libxutil.am \
+       $(top_srcdir)/src/preproc/eqn/eqn.am \
+       $(top_srcdir)/src/preproc/grn/grn.am \
+       $(top_srcdir)/src/preproc/html/html.am \
+       $(top_srcdir)/src/preproc/pic/pic.am \
+       $(top_srcdir)/src/preproc/preconv/preconv.am \
+       $(top_srcdir)/src/preproc/refer/refer.am \
+       $(top_srcdir)/src/preproc/soelim/soelim.am \
+       $(top_srcdir)/src/preproc/tbl/tbl.am \
+       $(top_srcdir)/src/roff/groff/groff.am \
+       $(top_srcdir)/src/roff/grog/grog.am \
+       $(top_srcdir)/src/roff/nroff/nroff.am \
+       $(top_srcdir)/src/roff/troff/troff.am \
+       $(top_srcdir)/src/utils/addftinfo/addftinfo.am \
+       $(top_srcdir)/src/utils/afmtodit/afmtodit.am \
+       $(top_srcdir)/src/utils/hpftodit/hpftodit.am \
+       $(top_srcdir)/src/utils/indxbib/indxbib.am \
+       $(top_srcdir)/src/utils/lkbib/lkbib.am \
+       $(top_srcdir)/src/utils/lookbib/lookbib.am \
+       $(top_srcdir)/src/utils/pfbtops/pfbtops.am \
+       $(top_srcdir)/src/utils/tfmtodit/tfmtodit.am \
+       $(top_srcdir)/src/utils/xtotroff/xtotroff.am \
+       $(top_srcdir)/tmac/tmac.am AUTHORS COPYING ChangeLog INSTALL \
+       NEWS README THANKS TODO build-aux/compile \
+       build-aux/config.guess build-aux/config.rpath \
+       build-aux/config.sub build-aux/depcomp build-aux/install-sh \
+       build-aux/missing build-aux/ylwrap src/preproc/eqn/eqn.cpp \
+       src/preproc/eqn/eqn.hpp src/preproc/pic/pic.cpp \
+       src/preproc/pic/pic.hpp src/preproc/refer/label.cpp \
+       src/preproc/refer/label.hpp
+DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
+distdir = $(PACKAGE)-$(VERSION)
+top_distdir = $(distdir)
+am__remove_distdir = \
+  if test -d "$(distdir)"; then \
+    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
+      && rm -rf "$(distdir)" \
+      || { sleep 5 && rm -rf "$(distdir)"; }; \
+  else :; fi
+am__post_remove_distdir = $(am__remove_distdir)
+DIST_ARCHIVES = $(distdir).tar.gz
+GZIP_ENV = --best
+DIST_TARGETS = dist-gzip
+distuninstallcheck_listfiles = find . -type f -print
+am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
+  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
+distcleancheck_listfiles = find . -type f -print
+ACLOCAL = @ACLOCAL@
+ALLOCA = @ALLOCA@
+ALLOCA_H = @ALLOCA_H@
+ALT_AWK_PROGS = @ALT_AWK_PROGS@
+ALT_GHOSTSCRIPT_PROGS = @ALT_GHOSTSCRIPT_PROGS@
+AMTAR = @AMTAR@
+AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
+APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
+# CC
+# CFLAGS
+# CPPFLAGS
+# LDFLAGS
+
+# X_CFLAGS
+# X_LIBS
+# X_EXTRA_LIBS
+# X_PRE_LIBS
+
+# YACC
+
+# GREP
+# EGREP
+
+# MAKEINFO
+
+# EXEEXT
+# OBJEXT
+# LIBEXT
+# LIBS
+# LIBM
+# LIBICONV
+# RANLIB
+# INSTALL
+# INSTALL_PROGRAM
+# INSTALL_SCRIPT
+# INSTALL_DATA
+# INSTALL_INFO
+# LN_S
+AR = ar
+ARFLAGS = @ARFLAGS@
+AUTOCONF = @AUTOCONF@
+AUTOHEADER = @AUTOHEADER@
+AUTOMAKE = @AUTOMAKE@
+AWK = @AWK@
+BASH_PROG = @BASH_PROG@
+BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
+BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
+BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
+BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
+BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
+BROKEN_SPOOLER_FLAGS = @BROKEN_SPOOLER_FLAGS@
+CC = @CC@
+CCDEPMODE = @CCDEPMODE@
+CFLAGS = @CFLAGS@
+CPP = @CPP@
+CPPFLAGS = @CPPFLAGS@
+CXX = @CXX@
+CXXCPP = @CXXCPP@
+CXXDEPMODE = @CXXDEPMODE@
+CXXFLAGS = @CXXFLAGS@
+CYGPATH_W = @CYGPATH_W@
+DEFS = @DEFS@
+DEPDIR = @DEPDIR@
+DIFF_PROG = @DIFF_PROG@
+DVIPRINT = @DVIPRINT@
+ECHO_C = @ECHO_C@
+ECHO_N = @ECHO_N@
+ECHO_T = @ECHO_T@
+EGREP = @EGREP@
+EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@
+EMULTIHOP_VALUE = @EMULTIHOP_VALUE@
+ENOLINK_HIDDEN = @ENOLINK_HIDDEN@
+ENOLINK_VALUE = @ENOLINK_VALUE@
+EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@
+EOVERFLOW_VALUE = @EOVERFLOW_VALUE@
+ERRNO_H = @ERRNO_H@
+EXEEXT = @EXEEXT@
+FLOAT_H = @FLOAT_H@
+GDIFF = @GDIFF@
+GHOSTSCRIPT = @GHOSTSCRIPT@
+GLIBC21 = @GLIBC21@
+GNULIB_ACOSF = @GNULIB_ACOSF@
+GNULIB_ACOSL = @GNULIB_ACOSL@
+GNULIB_ASINF = @GNULIB_ASINF@
+GNULIB_ASINL = @GNULIB_ASINL@
+GNULIB_ATAN2F = @GNULIB_ATAN2F@
+GNULIB_ATANF = @GNULIB_ATANF@
+GNULIB_ATANL = @GNULIB_ATANL@
+GNULIB_BTOWC = @GNULIB_BTOWC@
+GNULIB_CBRT = @GNULIB_CBRT@
+GNULIB_CBRTF = @GNULIB_CBRTF@
+GNULIB_CBRTL = @GNULIB_CBRTL@
+GNULIB_CEIL = @GNULIB_CEIL@
+GNULIB_CEILF = @GNULIB_CEILF@
+GNULIB_CEILL = @GNULIB_CEILL@
+GNULIB_COPYSIGN = @GNULIB_COPYSIGN@
+GNULIB_COPYSIGNF = @GNULIB_COPYSIGNF@
+GNULIB_COPYSIGNL = @GNULIB_COPYSIGNL@
+GNULIB_COSF = @GNULIB_COSF@
+GNULIB_COSHF = @GNULIB_COSHF@
+GNULIB_COSL = @GNULIB_COSL@
+GNULIB_DPRINTF = @GNULIB_DPRINTF@
+GNULIB_EXP2 = @GNULIB_EXP2@
+GNULIB_EXP2F = @GNULIB_EXP2F@
+GNULIB_EXP2L = @GNULIB_EXP2L@
+GNULIB_EXPF = @GNULIB_EXPF@
+GNULIB_EXPL = @GNULIB_EXPL@
+GNULIB_EXPLICIT_BZERO = @GNULIB_EXPLICIT_BZERO@
+GNULIB_EXPM1 = @GNULIB_EXPM1@
+GNULIB_EXPM1F = @GNULIB_EXPM1F@
+GNULIB_EXPM1L = @GNULIB_EXPM1L@
+GNULIB_FABSF = @GNULIB_FABSF@
+GNULIB_FABSL = @GNULIB_FABSL@
+GNULIB_FCLOSE = @GNULIB_FCLOSE@
+GNULIB_FDOPEN = @GNULIB_FDOPEN@
+GNULIB_FFLUSH = @GNULIB_FFLUSH@
+GNULIB_FFSL = @GNULIB_FFSL@
+GNULIB_FFSLL = @GNULIB_FFSLL@
+GNULIB_FGETC = @GNULIB_FGETC@
+GNULIB_FGETS = @GNULIB_FGETS@
+GNULIB_FLOOR = @GNULIB_FLOOR@
+GNULIB_FLOORF = @GNULIB_FLOORF@
+GNULIB_FLOORL = @GNULIB_FLOORL@
+GNULIB_FMA = @GNULIB_FMA@
+GNULIB_FMAF = @GNULIB_FMAF@
+GNULIB_FMAL = @GNULIB_FMAL@
+GNULIB_FMOD = @GNULIB_FMOD@
+GNULIB_FMODF = @GNULIB_FMODF@
+GNULIB_FMODL = @GNULIB_FMODL@
+GNULIB_FOPEN = @GNULIB_FOPEN@
+GNULIB_FPRINTF = @GNULIB_FPRINTF@
+GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@
+GNULIB_FPURGE = @GNULIB_FPURGE@
+GNULIB_FPUTC = @GNULIB_FPUTC@
+GNULIB_FPUTS = @GNULIB_FPUTS@
+GNULIB_FREAD = @GNULIB_FREAD@
+GNULIB_FREOPEN = @GNULIB_FREOPEN@
+GNULIB_FREXP = @GNULIB_FREXP@
+GNULIB_FREXPF = @GNULIB_FREXPF@
+GNULIB_FREXPL = @GNULIB_FREXPL@
+GNULIB_FSCANF = @GNULIB_FSCANF@
+GNULIB_FSEEK = @GNULIB_FSEEK@
+GNULIB_FSEEKO = @GNULIB_FSEEKO@
+GNULIB_FTELL = @GNULIB_FTELL@
+GNULIB_FTELLO = @GNULIB_FTELLO@
+GNULIB_FWRITE = @GNULIB_FWRITE@
+GNULIB_GETC = @GNULIB_GETC@
+GNULIB_GETCHAR = @GNULIB_GETCHAR@
+GNULIB_GETDELIM = @GNULIB_GETDELIM@
+GNULIB_GETLINE = @GNULIB_GETLINE@
+GNULIB_HYPOT = @GNULIB_HYPOT@
+GNULIB_HYPOTF = @GNULIB_HYPOTF@
+GNULIB_HYPOTL = @GNULIB_HYPOTL@
+GNULIB_ILOGB = @GNULIB_ILOGB@
+GNULIB_ILOGBF = @GNULIB_ILOGBF@
+GNULIB_ILOGBL = @GNULIB_ILOGBL@
+GNULIB_ISFINITE = @GNULIB_ISFINITE@
+GNULIB_ISINF = @GNULIB_ISINF@
+GNULIB_ISNAN = @GNULIB_ISNAN@
+GNULIB_ISNAND = @GNULIB_ISNAND@
+GNULIB_ISNANF = @GNULIB_ISNANF@
+GNULIB_ISNANL = @GNULIB_ISNANL@
+GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
+GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
+GNULIB_LDEXPF = @GNULIB_LDEXPF@
+GNULIB_LDEXPL = @GNULIB_LDEXPL@
+GNULIB_LOG = @GNULIB_LOG@
+GNULIB_LOG10 = @GNULIB_LOG10@
+GNULIB_LOG10F = @GNULIB_LOG10F@
+GNULIB_LOG10L = @GNULIB_LOG10L@
+GNULIB_LOG1P = @GNULIB_LOG1P@
+GNULIB_LOG1PF = @GNULIB_LOG1PF@
+GNULIB_LOG1PL = @GNULIB_LOG1PL@
+GNULIB_LOG2 = @GNULIB_LOG2@
+GNULIB_LOG2F = @GNULIB_LOG2F@
+GNULIB_LOG2L = @GNULIB_LOG2L@
+GNULIB_LOGB = @GNULIB_LOGB@
+GNULIB_LOGBF = @GNULIB_LOGBF@
+GNULIB_LOGBL = @GNULIB_LOGBL@
+GNULIB_LOGF = @GNULIB_LOGF@
+GNULIB_LOGL = @GNULIB_LOGL@
+GNULIB_MBRLEN = @GNULIB_MBRLEN@
+GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
+GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@
+GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@
+GNULIB_MBSCHR = @GNULIB_MBSCHR@
+GNULIB_MBSCSPN = @GNULIB_MBSCSPN@
+GNULIB_MBSINIT = @GNULIB_MBSINIT@
+GNULIB_MBSLEN = @GNULIB_MBSLEN@
+GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@
+GNULIB_MBSNLEN = @GNULIB_MBSNLEN@
+GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
+GNULIB_MBSPBRK = @GNULIB_MBSPBRK@
+GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@
+GNULIB_MBSRCHR = @GNULIB_MBSRCHR@
+GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
+GNULIB_MBSSEP = @GNULIB_MBSSEP@
+GNULIB_MBSSPN = @GNULIB_MBSSPN@
+GNULIB_MBSSTR = @GNULIB_MBSSTR@
+GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@
+GNULIB_MEMCHR = @GNULIB_MEMCHR@
+GNULIB_MEMMEM = @GNULIB_MEMMEM@
+GNULIB_MEMPCPY = @GNULIB_MEMPCPY@
+GNULIB_MEMRCHR = @GNULIB_MEMRCHR@
+GNULIB_MODF = @GNULIB_MODF@
+GNULIB_MODFF = @GNULIB_MODFF@
+GNULIB_MODFL = @GNULIB_MODFL@
+GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@
+GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@
+GNULIB_OVERRIDES_WINT_T = @GNULIB_OVERRIDES_WINT_T@
+GNULIB_PCLOSE = @GNULIB_PCLOSE@
+GNULIB_PERROR = @GNULIB_PERROR@
+GNULIB_POPEN = @GNULIB_POPEN@
+GNULIB_POWF = @GNULIB_POWF@
+GNULIB_PRINTF = @GNULIB_PRINTF@
+GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@
+GNULIB_PUTC = @GNULIB_PUTC@
+GNULIB_PUTCHAR = @GNULIB_PUTCHAR@
+GNULIB_PUTS = @GNULIB_PUTS@
+GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@
+GNULIB_REMAINDER = @GNULIB_REMAINDER@
+GNULIB_REMAINDERF = @GNULIB_REMAINDERF@
+GNULIB_REMAINDERL = @GNULIB_REMAINDERL@
+GNULIB_REMOVE = @GNULIB_REMOVE@
+GNULIB_RENAME = @GNULIB_RENAME@
+GNULIB_RENAMEAT = @GNULIB_RENAMEAT@
+GNULIB_RINT = @GNULIB_RINT@
+GNULIB_RINTF = @GNULIB_RINTF@
+GNULIB_RINTL = @GNULIB_RINTL@
+GNULIB_ROUND = @GNULIB_ROUND@
+GNULIB_ROUNDF = @GNULIB_ROUNDF@
+GNULIB_ROUNDL = @GNULIB_ROUNDL@
+GNULIB_SCANF = @GNULIB_SCANF@
+GNULIB_SIGNBIT = @GNULIB_SIGNBIT@
+GNULIB_SINF = @GNULIB_SINF@
+GNULIB_SINHF = @GNULIB_SINHF@
+GNULIB_SINL = @GNULIB_SINL@
+GNULIB_SNPRINTF = @GNULIB_SNPRINTF@
+GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@
+GNULIB_SQRTF = @GNULIB_SQRTF@
+GNULIB_SQRTL = @GNULIB_SQRTL@
+GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@
+GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@
+GNULIB_STPCPY = @GNULIB_STPCPY@
+GNULIB_STPNCPY = @GNULIB_STPNCPY@
+GNULIB_STRCASESTR = @GNULIB_STRCASESTR@
+GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@
+GNULIB_STRDUP = @GNULIB_STRDUP@
+GNULIB_STRERROR = @GNULIB_STRERROR@
+GNULIB_STRERROR_R = @GNULIB_STRERROR_R@
+GNULIB_STRNCAT = @GNULIB_STRNCAT@
+GNULIB_STRNDUP = @GNULIB_STRNDUP@
+GNULIB_STRNLEN = @GNULIB_STRNLEN@
+GNULIB_STRPBRK = @GNULIB_STRPBRK@
+GNULIB_STRSEP = @GNULIB_STRSEP@
+GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@
+GNULIB_STRSTR = @GNULIB_STRSTR@
+GNULIB_STRTOK_R = @GNULIB_STRTOK_R@
+GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@
+GNULIB_TANF = @GNULIB_TANF@
+GNULIB_TANHF = @GNULIB_TANHF@
+GNULIB_TANL = @GNULIB_TANL@
+GNULIB_TMPFILE = @GNULIB_TMPFILE@
+GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
+GNULIB_TRUNC = @GNULIB_TRUNC@
+GNULIB_TRUNCF = @GNULIB_TRUNCF@
+GNULIB_TRUNCL = @GNULIB_TRUNCL@
+GNULIB_VASPRINTF = @GNULIB_VASPRINTF@
+GNULIB_VDPRINTF = @GNULIB_VDPRINTF@
+GNULIB_VFPRINTF = @GNULIB_VFPRINTF@
+GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@
+GNULIB_VFSCANF = @GNULIB_VFSCANF@
+GNULIB_VPRINTF = @GNULIB_VPRINTF@
+GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@
+GNULIB_VSCANF = @GNULIB_VSCANF@
+GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@
+GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@
+GNULIB_WCPCPY = @GNULIB_WCPCPY@
+GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
+GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
+GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
+GNULIB_WCSCAT = @GNULIB_WCSCAT@
+GNULIB_WCSCHR = @GNULIB_WCSCHR@
+GNULIB_WCSCMP = @GNULIB_WCSCMP@
+GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
+GNULIB_WCSCPY = @GNULIB_WCSCPY@
+GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
+GNULIB_WCSDUP = @GNULIB_WCSDUP@
+GNULIB_WCSFTIME = @GNULIB_WCSFTIME@
+GNULIB_WCSLEN = @GNULIB_WCSLEN@
+GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
+GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
+GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
+GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
+GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
+GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
+GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
+GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
+GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
+GNULIB_WCSSPN = @GNULIB_WCSSPN@
+GNULIB_WCSSTR = @GNULIB_WCSSTR@
+GNULIB_WCSTOK = @GNULIB_WCSTOK@
+GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
+GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
+GNULIB_WCTOB = @GNULIB_WCTOB@
+GNULIB_WCTRANS = @GNULIB_WCTRANS@
+GNULIB_WCTYPE = @GNULIB_WCTYPE@
+GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
+GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
+GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
+GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
+GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
+GNULIB_WMEMSET = @GNULIB_WMEMSET@
+GREP = @GREP@
+GROFF_PATH_SEPARATOR = @GROFF_PATH_SEPARATOR@
+HAVE_ACOSF = @HAVE_ACOSF@
+HAVE_ACOSL = @HAVE_ACOSL@
+HAVE_ASINF = @HAVE_ASINF@
+HAVE_ASINL = @HAVE_ASINL@
+HAVE_ATAN2F = @HAVE_ATAN2F@
+HAVE_ATANF = @HAVE_ATANF@
+HAVE_ATANL = @HAVE_ATANL@
+HAVE_BTOWC = @HAVE_BTOWC@
+HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@
+HAVE_CBRT = @HAVE_CBRT@
+HAVE_CBRTF = @HAVE_CBRTF@
+HAVE_CBRTL = @HAVE_CBRTL@
+HAVE_COPYSIGN = @HAVE_COPYSIGN@
+HAVE_COPYSIGNL = @HAVE_COPYSIGNL@
+HAVE_COSF = @HAVE_COSF@
+HAVE_COSHF = @HAVE_COSHF@
+HAVE_COSL = @HAVE_COSL@
+HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@
+HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@
+HAVE_DECL_ASINL = @HAVE_DECL_ASINL@
+HAVE_DECL_ATANL = @HAVE_DECL_ATANL@
+HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@
+HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@
+HAVE_DECL_CEILF = @HAVE_DECL_CEILF@
+HAVE_DECL_CEILL = @HAVE_DECL_CEILL@
+HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@
+HAVE_DECL_COSL = @HAVE_DECL_COSL@
+HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@
+HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@
+HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@
+HAVE_DECL_EXPL = @HAVE_DECL_EXPL@
+HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@
+HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@
+HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@
+HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@
+HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@
+HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@
+HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@
+HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@
+HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@
+HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@
+HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@
+HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@
+HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@
+HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@
+HAVE_DECL_LOGB = @HAVE_DECL_LOGB@
+HAVE_DECL_LOGL = @HAVE_DECL_LOGL@
+HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@
+HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@
+HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@
+HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@
+HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@
+HAVE_DECL_RINTF = @HAVE_DECL_RINTF@
+HAVE_DECL_ROUND = @HAVE_DECL_ROUND@
+HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@
+HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@
+HAVE_DECL_SINL = @HAVE_DECL_SINL@
+HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@
+HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@
+HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@
+HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@
+HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@
+HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@
+HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@
+HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@
+HAVE_DECL_TANL = @HAVE_DECL_TANL@
+HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@
+HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@
+HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@
+HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@
+HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
+HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
+HAVE_DPRINTF = @HAVE_DPRINTF@
+HAVE_EXPF = @HAVE_EXPF@
+HAVE_EXPL = @HAVE_EXPL@
+HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@
+HAVE_EXPM1 = @HAVE_EXPM1@
+HAVE_EXPM1F = @HAVE_EXPM1F@
+HAVE_FABSF = @HAVE_FABSF@
+HAVE_FABSL = @HAVE_FABSL@
+HAVE_FEATURES_H = @HAVE_FEATURES_H@
+HAVE_FFSL = @HAVE_FFSL@
+HAVE_FFSLL = @HAVE_FFSLL@
+HAVE_FMA = @HAVE_FMA@
+HAVE_FMAF = @HAVE_FMAF@
+HAVE_FMAL = @HAVE_FMAL@
+HAVE_FMODF = @HAVE_FMODF@
+HAVE_FMODL = @HAVE_FMODL@
+HAVE_FREXPF = @HAVE_FREXPF@
+HAVE_FSEEKO = @HAVE_FSEEKO@
+HAVE_FTELLO = @HAVE_FTELLO@
+HAVE_HYPOTF = @HAVE_HYPOTF@
+HAVE_HYPOTL = @HAVE_HYPOTL@
+HAVE_ILOGB = @HAVE_ILOGB@
+HAVE_ILOGBF = @HAVE_ILOGBF@
+HAVE_ILOGBL = @HAVE_ILOGBL@
+HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
+HAVE_ISNAND = @HAVE_ISNAND@
+HAVE_ISNANF = @HAVE_ISNANF@
+HAVE_ISNANL = @HAVE_ISNANL@
+HAVE_ISWBLANK = @HAVE_ISWBLANK@
+HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
+HAVE_LDEXPF = @HAVE_LDEXPF@
+HAVE_LOG10F = @HAVE_LOG10F@
+HAVE_LOG10L = @HAVE_LOG10L@
+HAVE_LOG1P = @HAVE_LOG1P@
+HAVE_LOG1PF = @HAVE_LOG1PF@
+HAVE_LOG1PL = @HAVE_LOG1PL@
+HAVE_LOGBF = @HAVE_LOGBF@
+HAVE_LOGBL = @HAVE_LOGBL@
+HAVE_LOGF = @HAVE_LOGF@
+HAVE_LOGL = @HAVE_LOGL@
+HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
+HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@
+HAVE_MBRLEN = @HAVE_MBRLEN@
+HAVE_MBRTOWC = @HAVE_MBRTOWC@
+HAVE_MBSINIT = @HAVE_MBSINIT@
+HAVE_MBSLEN = @HAVE_MBSLEN@
+HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
+HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
+HAVE_MEMCHR = @HAVE_MEMCHR@
+HAVE_MEMPCPY = @HAVE_MEMPCPY@
+HAVE_MODFF = @HAVE_MODFF@
+HAVE_MODFL = @HAVE_MODFL@
+HAVE_PCLOSE = @HAVE_PCLOSE@
+HAVE_POPEN = @HAVE_POPEN@
+HAVE_POWF = @HAVE_POWF@
+HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@
+HAVE_REMAINDER = @HAVE_REMAINDER@
+HAVE_REMAINDERF = @HAVE_REMAINDERF@
+HAVE_RENAMEAT = @HAVE_RENAMEAT@
+HAVE_RINT = @HAVE_RINT@
+HAVE_RINTL = @HAVE_RINTL@
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@
+HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
+HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
+HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
+HAVE_SINF = @HAVE_SINF@
+HAVE_SINHF = @HAVE_SINHF@
+HAVE_SINL = @HAVE_SINL@
+HAVE_SQRTF = @HAVE_SQRTF@
+HAVE_SQRTL = @HAVE_SQRTL@
+HAVE_STDINT_H = @HAVE_STDINT_H@
+HAVE_STPCPY = @HAVE_STPCPY@
+HAVE_STPNCPY = @HAVE_STPNCPY@
+HAVE_STRCASESTR = @HAVE_STRCASESTR@
+HAVE_STRCHRNUL = @HAVE_STRCHRNUL@
+HAVE_STRPBRK = @HAVE_STRPBRK@
+HAVE_STRSEP = @HAVE_STRSEP@
+HAVE_STRVERSCMP = @HAVE_STRVERSCMP@
+HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
+HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
+HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
+HAVE_TANF = @HAVE_TANF@
+HAVE_TANHF = @HAVE_TANHF@
+HAVE_TANL = @HAVE_TANL@
+HAVE_TEST_EF_OPTION = @HAVE_TEST_EF_OPTION@
+HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
+HAVE_VASPRINTF = @HAVE_VASPRINTF@
+HAVE_VDPRINTF = @HAVE_VDPRINTF@
+HAVE_WCHAR_H = @HAVE_WCHAR_H@
+HAVE_WCHAR_T = @HAVE_WCHAR_T@
+HAVE_WCPCPY = @HAVE_WCPCPY@
+HAVE_WCPNCPY = @HAVE_WCPNCPY@
+HAVE_WCRTOMB = @HAVE_WCRTOMB@
+HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
+HAVE_WCSCAT = @HAVE_WCSCAT@
+HAVE_WCSCHR = @HAVE_WCSCHR@
+HAVE_WCSCMP = @HAVE_WCSCMP@
+HAVE_WCSCOLL = @HAVE_WCSCOLL@
+HAVE_WCSCPY = @HAVE_WCSCPY@
+HAVE_WCSCSPN = @HAVE_WCSCSPN@
+HAVE_WCSDUP = @HAVE_WCSDUP@
+HAVE_WCSFTIME = @HAVE_WCSFTIME@
+HAVE_WCSLEN = @HAVE_WCSLEN@
+HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
+HAVE_WCSNCAT = @HAVE_WCSNCAT@
+HAVE_WCSNCMP = @HAVE_WCSNCMP@
+HAVE_WCSNCPY = @HAVE_WCSNCPY@
+HAVE_WCSNLEN = @HAVE_WCSNLEN@
+HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
+HAVE_WCSPBRK = @HAVE_WCSPBRK@
+HAVE_WCSRCHR = @HAVE_WCSRCHR@
+HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
+HAVE_WCSSPN = @HAVE_WCSSPN@
+HAVE_WCSSTR = @HAVE_WCSSTR@
+HAVE_WCSTOK = @HAVE_WCSTOK@
+HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
+HAVE_WCSXFRM = @HAVE_WCSXFRM@
+HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
+HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
+HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
+HAVE_WINT_T = @HAVE_WINT_T@
+HAVE_WMEMCHR = @HAVE_WMEMCHR@
+HAVE_WMEMCMP = @HAVE_WMEMCMP@
+HAVE_WMEMCPY = @HAVE_WMEMCPY@
+HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
+HAVE_WMEMSET = @HAVE_WMEMSET@
+HOST_CPU = @HOST_CPU@
+HOST_CPU_C_ABI = @HOST_CPU_C_ABI@
+INCLUDE_NEXT = @INCLUDE_NEXT@
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+INSTALL_INFO = @INSTALL_INFO@
+INSTALL_PROGRAM = @INSTALL_PROGRAM@
+INSTALL_SCRIPT = @INSTALL_SCRIPT@
+INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
+LDFLAGS = @LDFLAGS@
+LIBC = @LIBC@
+LIBEXT = @LIBEXT@
+LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
+LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
+LIBICONV = @LIBICONV@
+LIBM = @LIBM@
+LIBOBJS = @LIBOBJS@
+LIBS = @LIBS@
+LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
+LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
+LIMITS_H = @LIMITS_H@
+LN_S = @LN_S@
+LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
+LP = @LP@
+LPQ = @LPQ@
+LPR = @LPR@
+LTLIBICONV = @LTLIBICONV@
+LTLIBOBJS = @LTLIBOBJS@
+MAKEINFO = @MAKEINFO@
+MKDIR_P = @MKDIR_P@
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@
+NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@
+NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
+NEXT_ERRNO_H = @NEXT_ERRNO_H@
+NEXT_FLOAT_H = @NEXT_FLOAT_H@
+NEXT_LIMITS_H = @NEXT_LIMITS_H@
+NEXT_MATH_H = @NEXT_MATH_H@
+NEXT_STDDEF_H = @NEXT_STDDEF_H@
+NEXT_STDINT_H = @NEXT_STDINT_H@
+NEXT_STDIO_H = @NEXT_STDIO_H@
+NEXT_STRING_H = @NEXT_STRING_H@
+NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@
+NEXT_WCHAR_H = @NEXT_WCHAR_H@
+NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
+OBJEXT = @OBJEXT@
+OTHERDEVDIRS = @OTHERDEVDIRS@
+PACKAGE = @PACKAGE@
+PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
+PACKAGE_NAME = @PACKAGE_NAME@
+PACKAGE_STRING = @PACKAGE_STRING@
+PACKAGE_TARNAME = @PACKAGE_TARNAME@
+PACKAGE_URL = @PACKAGE_URL@
+PACKAGE_VERSION = @PACKAGE_VERSION@
+PAGE = @PAGE@
+PATH_SEPARATOR = @PATH_SEPARATOR@
+PDFFONTS = @PDFFONTS@
+PDFIMAGES = @PDFIMAGES@
+PDFINFO = @PDFINFO@
+PERL = @PERL@
+PERL_VERSION = @PERL_VERSION@
+PKG_CONFIG = @PKG_CONFIG@
+PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@
+PKG_CONFIG_PATH = @PKG_CONFIG_PATH@
+PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
+PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
+PROG_TEXI2DVI = @PROG_TEXI2DVI@
+PSPRINT = @PSPRINT@
+PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
+RANLIB = @RANLIB@
+REPLACE_ACOSF = @REPLACE_ACOSF@
+REPLACE_ASINF = @REPLACE_ASINF@
+REPLACE_ATAN2F = @REPLACE_ATAN2F@
+REPLACE_ATANF = @REPLACE_ATANF@
+REPLACE_BTOWC = @REPLACE_BTOWC@
+REPLACE_CBRTF = @REPLACE_CBRTF@
+REPLACE_CBRTL = @REPLACE_CBRTL@
+REPLACE_CEIL = @REPLACE_CEIL@
+REPLACE_CEILF = @REPLACE_CEILF@
+REPLACE_CEILL = @REPLACE_CEILL@
+REPLACE_COSF = @REPLACE_COSF@
+REPLACE_COSHF = @REPLACE_COSHF@
+REPLACE_DPRINTF = @REPLACE_DPRINTF@
+REPLACE_EXP2 = @REPLACE_EXP2@
+REPLACE_EXP2L = @REPLACE_EXP2L@
+REPLACE_EXPF = @REPLACE_EXPF@
+REPLACE_EXPM1 = @REPLACE_EXPM1@
+REPLACE_EXPM1F = @REPLACE_EXPM1F@
+REPLACE_FABSL = @REPLACE_FABSL@
+REPLACE_FCLOSE = @REPLACE_FCLOSE@
+REPLACE_FDOPEN = @REPLACE_FDOPEN@
+REPLACE_FFLUSH = @REPLACE_FFLUSH@
+REPLACE_FLOOR = @REPLACE_FLOOR@
+REPLACE_FLOORF = @REPLACE_FLOORF@
+REPLACE_FLOORL = @REPLACE_FLOORL@
+REPLACE_FMA = @REPLACE_FMA@
+REPLACE_FMAF = @REPLACE_FMAF@
+REPLACE_FMAL = @REPLACE_FMAL@
+REPLACE_FMOD = @REPLACE_FMOD@
+REPLACE_FMODF = @REPLACE_FMODF@
+REPLACE_FMODL = @REPLACE_FMODL@
+REPLACE_FOPEN = @REPLACE_FOPEN@
+REPLACE_FPRINTF = @REPLACE_FPRINTF@
+REPLACE_FPURGE = @REPLACE_FPURGE@
+REPLACE_FREOPEN = @REPLACE_FREOPEN@
+REPLACE_FREXP = @REPLACE_FREXP@
+REPLACE_FREXPF = @REPLACE_FREXPF@
+REPLACE_FREXPL = @REPLACE_FREXPL@
+REPLACE_FSEEK = @REPLACE_FSEEK@
+REPLACE_FSEEKO = @REPLACE_FSEEKO@
+REPLACE_FTELL = @REPLACE_FTELL@
+REPLACE_FTELLO = @REPLACE_FTELLO@
+REPLACE_GETDELIM = @REPLACE_GETDELIM@
+REPLACE_GETLINE = @REPLACE_GETLINE@
+REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@
+REPLACE_HYPOT = @REPLACE_HYPOT@
+REPLACE_HYPOTF = @REPLACE_HYPOTF@
+REPLACE_HYPOTL = @REPLACE_HYPOTL@
+REPLACE_ILOGB = @REPLACE_ILOGB@
+REPLACE_ILOGBF = @REPLACE_ILOGBF@
+REPLACE_ILOGBL = @REPLACE_ILOGBL@
+REPLACE_ISFINITE = @REPLACE_ISFINITE@
+REPLACE_ISINF = @REPLACE_ISINF@
+REPLACE_ISNAN = @REPLACE_ISNAN@
+REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
+REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
+REPLACE_ITOLD = @REPLACE_ITOLD@
+REPLACE_LDEXPL = @REPLACE_LDEXPL@
+REPLACE_LOG = @REPLACE_LOG@
+REPLACE_LOG10 = @REPLACE_LOG10@
+REPLACE_LOG10F = @REPLACE_LOG10F@
+REPLACE_LOG10L = @REPLACE_LOG10L@
+REPLACE_LOG1P = @REPLACE_LOG1P@
+REPLACE_LOG1PF = @REPLACE_LOG1PF@
+REPLACE_LOG1PL = @REPLACE_LOG1PL@
+REPLACE_LOG2 = @REPLACE_LOG2@
+REPLACE_LOG2F = @REPLACE_LOG2F@
+REPLACE_LOG2L = @REPLACE_LOG2L@
+REPLACE_LOGB = @REPLACE_LOGB@
+REPLACE_LOGBF = @REPLACE_LOGBF@
+REPLACE_LOGBL = @REPLACE_LOGBL@
+REPLACE_LOGF = @REPLACE_LOGF@
+REPLACE_LOGL = @REPLACE_LOGL@
+REPLACE_MBRLEN = @REPLACE_MBRLEN@
+REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
+REPLACE_MBSINIT = @REPLACE_MBSINIT@
+REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
+REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
+REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
+REPLACE_MEMCHR = @REPLACE_MEMCHR@
+REPLACE_MEMMEM = @REPLACE_MEMMEM@
+REPLACE_MODF = @REPLACE_MODF@
+REPLACE_MODFF = @REPLACE_MODFF@
+REPLACE_MODFL = @REPLACE_MODFL@
+REPLACE_NAN = @REPLACE_NAN@
+REPLACE_NULL = @REPLACE_NULL@
+REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@
+REPLACE_PERROR = @REPLACE_PERROR@
+REPLACE_POPEN = @REPLACE_POPEN@
+REPLACE_PRINTF = @REPLACE_PRINTF@
+REPLACE_REMAINDER = @REPLACE_REMAINDER@
+REPLACE_REMAINDERF = @REPLACE_REMAINDERF@
+REPLACE_REMAINDERL = @REPLACE_REMAINDERL@
+REPLACE_REMOVE = @REPLACE_REMOVE@
+REPLACE_RENAME = @REPLACE_RENAME@
+REPLACE_RENAMEAT = @REPLACE_RENAMEAT@
+REPLACE_ROUND = @REPLACE_ROUND@
+REPLACE_ROUNDF = @REPLACE_ROUNDF@
+REPLACE_ROUNDL = @REPLACE_ROUNDL@
+REPLACE_SIGNBIT = @REPLACE_SIGNBIT@
+REPLACE_SIGNBIT_USING_GCC = @REPLACE_SIGNBIT_USING_GCC@
+REPLACE_SINF = @REPLACE_SINF@
+REPLACE_SINHF = @REPLACE_SINHF@
+REPLACE_SNPRINTF = @REPLACE_SNPRINTF@
+REPLACE_SPRINTF = @REPLACE_SPRINTF@
+REPLACE_SQRTF = @REPLACE_SQRTF@
+REPLACE_SQRTL = @REPLACE_SQRTL@
+REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@
+REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@
+REPLACE_STPNCPY = @REPLACE_STPNCPY@
+REPLACE_STRCASESTR = @REPLACE_STRCASESTR@
+REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@
+REPLACE_STRDUP = @REPLACE_STRDUP@
+REPLACE_STRERROR = @REPLACE_STRERROR@
+REPLACE_STRERROR_R = @REPLACE_STRERROR_R@
+REPLACE_STRNCAT = @REPLACE_STRNCAT@
+REPLACE_STRNDUP = @REPLACE_STRNDUP@
+REPLACE_STRNLEN = @REPLACE_STRNLEN@
+REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@
+REPLACE_STRSTR = @REPLACE_STRSTR@
+REPLACE_STRTOK_R = @REPLACE_STRTOK_R@
+REPLACE_TANF = @REPLACE_TANF@
+REPLACE_TANHF = @REPLACE_TANHF@
+REPLACE_TMPFILE = @REPLACE_TMPFILE@
+REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
+REPLACE_TRUNC = @REPLACE_TRUNC@
+REPLACE_TRUNCF = @REPLACE_TRUNCF@
+REPLACE_TRUNCL = @REPLACE_TRUNCL@
+REPLACE_VASPRINTF = @REPLACE_VASPRINTF@
+REPLACE_VDPRINTF = @REPLACE_VDPRINTF@
+REPLACE_VFPRINTF = @REPLACE_VFPRINTF@
+REPLACE_VPRINTF = @REPLACE_VPRINTF@
+REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@
+REPLACE_VSPRINTF = @REPLACE_VSPRINTF@
+REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
+REPLACE_WCSFTIME = @REPLACE_WCSFTIME@
+REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
+REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
+REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
+REPLACE_WCTOB = @REPLACE_WCTOB@
+REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
+
+# On some platforms we need to set LANG and LC_ALL to C for sed
+SED = \
+  LANG=C \
+  LC_ALL=C \
+  sed
+
+SET_MAKE = @SET_MAKE@
+SHELL = @SHELL@
+SHORT_VERSION = @SHORT_VERSION@
+SH_SCRIPT_SED_CMD = @SH_SCRIPT_SED_CMD@
+SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
+SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
+STDDEF_H = @STDDEF_H@
+STDINT_H = @STDINT_H@
+STRIP = @STRIP@
+
+# XDEVIDIRS
+# `XDEVDIRS' is either `font/devX{75,100}{,-12}' or empty.
+
+# XPROGDIRS
+# `XPROGDIRS' is either `src/devices/xditview src/utils/xtotroff' or empty.
+
+# XLIBDIRS
+# `XLIBDIRS' is either `src/libs/libxutil' or empty.
+
+# `TTYDEVDIRS' is either `font/devascii font/devlatin1' (for
+# ASCII) or `font/devcp1047' (for EBCDIC) plus font/devutf8.
+TTYDEVDIRS = @TTYDEVDIRS@ font/devutf8
+UCHARDET_CFLAGS = @UCHARDET_CFLAGS@
+UCHARDET_LIBS = @UCHARDET_LIBS@
+UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@
+VERSION = @VERSION@
+WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
+WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@
+WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@
+WINT_T_SUFFIX = @WINT_T_SUFFIX@
+XDEVDIRS = @XDEVDIRS@
+XLIBDIRS = @XLIBDIRS@
+XMKMF = @XMKMF@
+XPMTOPPM = @XPMTOPPM@
+XPROGDIRS = @XPROGDIRS@
+X_CFLAGS = @X_CFLAGS@
+X_EXTRA_LIBS = @X_EXTRA_LIBS@
+X_LIBS = @X_LIBS@
+X_PRE_LIBS = @X_PRE_LIBS@
+YACC = @YACC@
+abs_builddir = @abs_builddir@
+abs_srcdir = @abs_srcdir@
+abs_top_builddir = @abs_top_builddir@
+abs_top_srcdir = @abs_top_srcdir@
+ac_ct_AWK = @ac_ct_AWK@
+ac_ct_CC = @ac_ct_CC@
+ac_ct_CXX = @ac_ct_CXX@
+ac_ct_GHOSTSCRIPT = @ac_ct_GHOSTSCRIPT@
+am__include = @am__include@
+am__leading_dot = @am__leading_dot@
+am__quote = @am__quote@
+am__tar = @am__tar@
+am__untar = @am__untar@
+appresdir = @appresdir@
+bindir = @bindir@
+build = @build@
+build_alias = @build_alias@
+build_cpu = @build_cpu@
+build_os = @build_os@
+build_vendor = @build_vendor@
+builddir = @builddir@
+compatibility_wrappers = @compatibility_wrappers@
+datadir = @datadir@
+datarootdir = @datarootdir@
+doc_dist_target_ok = @doc_dist_target_ok@
+
+# infodir
+# `infodir' says where to install info files.
+
+# docdir
+# `docdir' says where to install documentation files.  The default
+# location is ${datarootdir}/doc/${PACKAGE}, but we add the version
+docdir = $(datarootdir)/doc/${PACKAGE}-$(SHORT_VERSION)
+dvidir = @dvidir@
+exec_prefix = @exec_prefix@
+g = @g@
+gl_LIBOBJS = @gl_LIBOBJS@
+gl_LTLIBOBJS = @gl_LTLIBOBJS@
+glilypond_dir = @glilypond_dir@
+gltests_LIBOBJS = @gltests_LIBOBJS@
+gltests_LTLIBOBJS = @gltests_LTLIBOBJS@
+gltests_WITNESS = @gltests_WITNESS@
+gpinyin_dir = @gpinyin_dir@
+groff_have_urw_fonts = @groff_have_urw_fonts@
+groffer_dir = @groffer_dir@
+grog_dir = @grog_dir@
+host = @host@
+host_alias = @host_alias@
+host_cpu = @host_cpu@
+host_os = @host_os@
+host_vendor = @host_vendor@
+htmldir = @htmldir@
+includedir = @includedir@
+infodir = @infodir@
+install_sh = @install_sh@
+libdir = @libdir@
+libexecdir = @libexecdir@
+libprogramdir = @libprogramdir@
+localedir = @localedir@
+localstatedir = @localstatedir@
+make_examples = @make_examples@
+make_htmldoc = @make_htmldoc@
+make_htmlexamples = @make_htmlexamples@
+make_infodoc = @make_infodoc@
+make_install_examples = @make_install_examples@
+make_install_htmldoc = @make_install_htmldoc@
+make_install_htmlexamples = @make_install_htmlexamples@
+make_install_infodoc = @make_install_infodoc@
+make_install_otherdoc = @make_install_otherdoc@
+make_install_pdfdoc = @make_install_pdfdoc@
+make_install_pdfexamples = @make_install_pdfexamples@
+make_install_shipped_htmldoc = @make_install_shipped_htmldoc@
+make_otherdoc = @make_otherdoc@
+make_pdfdoc = @make_pdfdoc@
+make_pdfexamples = @make_pdfexamples@
+make_uninstall_examples = @make_uninstall_examples@
+make_uninstall_htmldoc = @make_uninstall_htmldoc@
+make_uninstall_htmlexamples = @make_uninstall_htmlexamples@
+make_uninstall_infodoc = @make_uninstall_infodoc@
+make_uninstall_otherdoc = @make_uninstall_otherdoc@
+make_uninstall_pdfdoc = @make_uninstall_pdfdoc@
+make_uninstall_pdfexamples = @make_uninstall_pdfexamples@
+make_uninstall_shipped_htmldoc = @make_uninstall_shipped_htmldoc@
+make_winscripts = @make_winscripts@
+makeinfo_version_numeric = @makeinfo_version_numeric@
+mandir = @mandir@
+mkdir_p = @mkdir_p@
+oldincludedir = @oldincludedir@
+pdfdir = @pdfdir@
+pnmcrop = @pnmcrop@
+pnmcut = @pnmcut@
+pnmtopng = @pnmtopng@
+pnmtops = @pnmtops@
+pnmtops_nosetpage = @pnmtops_nosetpage@
+prefix = @prefix@
+program_transform_name = @program_transform_name@
+psdir = @psdir@
+psselect = @psselect@
+referdir = @referdir@
+sbindir = @sbindir@
+sharedstatedir = @sharedstatedir@
+srcdir = @srcdir@
+sys_tmac_prefix = @sys_tmac_prefix@
+sysconfdir = @sysconfdir@
+target_alias = @target_alias@
+tmac_wrap = @tmac_wrap@
+top_build_prefix = @top_build_prefix@
+top_builddir = @top_builddir@
+top_srcdir = @top_srcdir@
+urwfontsdir = @urwfontsdir@
+
+# `RT_SEP' is the operating system's native PATH SEPARATOR CHAR, which
+# is to be used in runtime PATHs compiled into groff executables.
+RT_SEP = @GROFF_PATH_SEPARATOR@
+
+# `SH_SEP' is a alternative PATH SEPARATOR CHAR, to be used in shell
+# scripts and makefile rules; it may be the same as `RT_SEP', but,
+# particularly in some Microsoft environments, it may differ.
+SH_SEP = @PATH_SEPARATOR@
+
+# GLIBC2
+# `GLIBC21' is yes if the host operating system uses GNU libc 2.1 or newer,
+# otherwise no.
+
+# VERSION is set by automake, based on what is passed to AC_INIT.
+
+# PAGE
+# Define `page' to be letter if your PostScript printer uses 8.5x11
+# paper (USA) and define it to be A4, if it uses A4 paper (rest of the
+# world).
+
+# GHOSTSCRIPT
+# The name of the ghostscript program. Normally, gs, on GNU/Linux
+# but it might be different on MS-DOS/MS-WIN32 systems.
+
+# ALT_GHOSTSCRIPT_PROGS
+# `ALT_GHOSTSCRIPT_PROGS' specifies a list alternative names,
+# which can be tried if `GHOSTSCRIPT' cannot be found at run time.
+
+# ALT_AWK_PROGS
+# Similarly, `ALT_AWK_PROGS' specifies a list of alternative names,
+# which can be tried at run time, to identify the awk program.
+
+# BROKEN_SPOOLER_FLAGS
+# Normally the Postscript driver, grops, produces output that conforms
+# to version 3.0 of the Adobe Document Structuring Conventions.
+# Unfortunately some spoolers and previewers can't handle such output.
+# The BROKEN_SPOOLER_FLAGS variable tells grops what it should do to
+# make its output acceptable to such programs.  This variable controls
+# only the default behaviour of grops; the behaviour can be changed at
+# runtime by the grops -b option (and so by groff -P-b).
+# Use a value of 0 if your spoolers and previewers are able to handle
+# conforming PostScript correctly.
+# Add 1 if no %%{Begin,End}DocumentSetup comments should be generated;
+# this is needed for early versions of TranScript that get confused by
+# anything between the %%EndProlog line and the first %%Page: comment.
+# Add 2 if lines in included files beginning with %! should be
+# stripped out; this is needed for the OpenWindows 2.0 pageview previewer.
+# Add 4 if %%Page, %%Trailer and %%EndProlog comments should be
+# stripped out of included files; this is needed for spoolers that
+# don't understand the %%{Begin,End}Document comments. I suspect this
+# includes early versions of TranScript.
+# Add 8 if the first line of the PostScript output should be %!PS-Adobe-2.0
+# rather than %!PS-Adobe-3.0; this is needed when using Sun's Newsprint
+# with a printer that requires page reversal.
+
+# `DEVICE' is the default device.
+DEVICE = ps
+
+# OTHERDEVDIRS
+# `OTHERDEVDIRS' is either `font/devlj4 font/devlbp' (for ASCII) or
+# empty (for EBCDIC).
+
+# PSPRINT
+# `PSPRINT' is the command to use for printing a PostScript file,
+# for example `lpr'.
+
+# DVIPRINT
+# `DVIPRINT' is the command to use for printing a TeX dvi file,
+# for example `lpr -d'.
+
+# g
+# Prefix for names of programs that have Unix counterparts.
+# For example, if `g' is `g' then troff will be installed as
+# gtroff.  This doesn't affect programs like grops or groff that have
+# no Unix counterparts.  Note that the groff versions of eqn and tbl
+# will not work with Unix troff.
+
+# prefix
+# exec_prefix
+# Common prefix for installation directories.
+# Used in definitions of exec_prefix, datasubdir, fontpath, manroot.
+# This must already exist when you do make install.
+
+# bindir
+# `bindir' says where to install executables.
+
+# libdir
+# `libdir' says where to install platform-dependent data.
+
+# libprogramdir
+# `libprogramdir' is $(libdir)/groff
+
+# `datasubdir' says where to install platform-independent data files.
+# datadir
+# datarootdir
+dataprogramdir = $(datadir)/groff
+datasubdir = $(dataprogramdir)/$(SHORT_VERSION)
+
+# `exampledir' says where to install example files.
+exampledir = $(docdir)/examples
+
+# `htmldocdir' says where to install documentation in HTML format.
+htmldocdir = $(docdir)/html
+
+# `pdfdocdir' says where to install documentation in PDF format.
+pdfdocdir = $(docdir)/pdf
+
+# `fontdir' says where to install dev*/*.
+fontdir = $(datasubdir)/font
+
+# `oldfontdir' says where to install old font sets (as dev*/*).
+oldfontdir = $(datasubdir)/oldfont
+
+# `localfontdir' says where local fonts will be installed (as dev*/*).
+localfontdir = $(dataprogramdir)/site-font
+
+# `legacyfontdir' is for compatibility with non-GNU troff.
+legacyfontdir = /usr/lib/font
+
+# `fontpath' says where to look for dev*/*.
+fontpath = $(localfontdir)$(RT_SEP)$(fontdir)$(RT_SEP)$(legacyfontdir)
+
+# `tmacdir' says where to install macros.
+tmacdir = $(datasubdir)/tmac
+
+# `systemtmacdir' says where to install platform-dependent macros.
+systemtmacdir = $(libprogramdir)/site-tmac
+
+# `localtmacdir' says where local files will be installed.
+localtmacdir = $(dataprogramdir)/site-tmac
+
+# appresdir
+# `appresdir' says where to install the application resource file for
+# gxditview.
+
+# groffer_dir
+# glilypond_dir
+# grog_dir
+# gpinyin_dir
+
+# `tmacpath' says where to look for macro files.
+# The current directory will be prepended in unsafe mode only; the home
+# directory will be always added.
+# `troffrc' and `troffrc-end' (and `eqnrc') are searched neither in the
+# current nor in the home directory.
+tmacpath = $(systemtmacdir)$(RT_SEP)$(localtmacdir)$(RT_SEP)$(tmacdir)
+
+# sys_tmac_prefix
+# `sys_tmac_prefix' is prefix (if any) for system macro packages.
+
+# pnmtops_nosetpage
+# `pnmtops_nosetpage' is the command to be run to generate an eps
+# file.  Some versions of pnmtops provide the -nosetpage option.
+# We detect this and use it if present.
+
+# tmac_wrap
+# `tmac_wrap' is list of system macro packages that should be made
+# available to groff by creating a corresponding macro package
+# in the groff macro directory that references the system macro
+# package.
+
+# compatibility_wrappers
+# (groff compatibility wrappers for vendor-provided non-GNU macro sets)
+#
+# `compatibility_wrappers' controls the creation and installation of
+# compatibility wrappers for the macro sets named in `tmac_wrap'.
+# Its value must be one of:
+#   `yes'    install compatibility wrappers as the original macro set name
+#            (that is, the default implementation of that macro set), and
+#            install the groff implementation with a prefix (usually g).
+#   `no'     do not install compatibility wrappers; only install the groff
+#            implementation of each macro set.
+#   `manual' install the compatibility wrappers as `<macro>-os' and install
+#            the groff implementation of each macro set as the default
+#            implementation of that macro set.
+
+# Don't make this empty.
+wrapper_suffix_default = "-os"
+wrapper_suffix = `if test $(compatibility_wrappers) = manual; then echo $(wrapper_suffix_default); fi`
+
+# When `compatibility_wrappers' is `yes', if there is a groff implementation
+# of a macro set listed in $(tmac_wrap), then the groff implementation will be
+# installed with a prefix of $(tmac_prefix) via the collision detection
+# variables $(tmac_m_prefix), $(tmac_s_prefix), and $(tmac_an_prefix).
+
+# Don't make this empty.
+tmac_prefix = g
+
+# The groff -mm macros will be available as -m$(tmac_m_prefix)m.
+tmac_m_prefix = \
+ `if test $(compatibility_wrappers) = yes; then \
+    for i in $(tmac_wrap) ""; do \
+      case "$$i" in m) echo $(tmac_prefix);; esac; \
+    done; \
+  fi`
+
+
+# The groff -ms macros will be available as -m$(tmac_s_prefix)s.
+tmac_s_prefix = \
+ `if test $(compatibility_wrappers) = yes; then \
+    for i in $(tmac_wrap) ""; do \
+      case "$$i" in s) echo $(tmac_prefix);; esac; \
+    done; \
+  fi`
+
+
+# The groff -man macros will be available as -m$(tmac_an_prefix)an.
+tmac_an_prefix = \
+ `if test $(compatibility_wrappers) = yes; then \
+    for i in $(tmac_wrap) ""; do \
+      case "$$i" in an) echo $(tmac_prefix);; esac; \
+    done; \
+  fi`
+
+
+# Extension to be used for refer index files.  Index files are not
+# sharable between different architectures, so you might want to use
+# different suffixes for different architectures.  Choose an extension
+# that doesn't conflict with refer or any other indexing program.
+indexext = .i
+
+# Directory containing the default index for refer.
+indexdir = /usr/dict/papers
+
+# The filename (without suffix) of the default index for refer.
+indexname = Ind
+
+# common_words_file is a file containing a list of common words.
+# If your system provides /usr/lib/eign it will be copied onto this,
+# otherwise the supplied eign file will be used.
+common_words_file = $(datasubdir)/eign
+
+# mandir
+# `manroot' is the root of the man page directory tree.
+manroot = $(mandir)
+
+# `man1ext' is the man section for user commands.
+man1ext = 1
+man1dir = $(manroot)/man$(man1ext)
+
+# `man5ext' is the man section for file formats.
+man5ext = 5
+man5dir = $(manroot)/man$(man5ext)
+
+# `man7ext' is the man section for macros.
+man7ext = 7
+man7dir = $(manroot)/man$(man7ext)
+
+# doc_dist_target_ok
+# `dist' target is disallowed in some `configure' combinations.
+
+# The configure script checks whether the user wants the info documentation.
+# For the repo version this mechanism also suppresses building via `makeinfo'.
+# make_infodoc
+# make_install_infodoc
+# make_uninstall_infodoc
+
+# The configure script checks whether all necessary utility programs for
+# grohtml are available -- only then we can build the HTML documentation.
+# make_htmldoc
+# make_install_htmldoc
+# make_uninstall_htmldoc
+
+# make_htmlexamples
+# make_install_htmlexamples
+# make_uninstall_htmlexamples
+
+# The configure script also checks whether all necessary utility programs
+# for pdfroff are available -- only then we can build PDF documentation.
+# make_pdfdoc
+# make_install_pdfdoc
+# make_uninstall_pdfdoc
+
+# make_pdfexamples
+# make_install_pdfexamples
+# make_uninstall_pdfexamples
+
+# `other' documentation, e.g., `meref.me' and `pic.ms', as well as their
+# generated counterparts..
+# make_otherdoc
+# make_install_otherdoc
+# make_uninstall_otherdoc
+
+# `examples' -- a generic switch, but the generated examples are furtherly
+# subdivided to catch HTML and PDF production availability.
+# make_examples
+# make_install_examples
+# make_uninstall_examples
+
+# Windows `.cmd' files
+# make_winscripts
+# make_install_winscripts
+# make_uninstall_winscripts
+
+# All the previous installation directories, when used, are prefixed with
+# $(DESTDIR) during install and uninstall, to support staged installations.
+
+# config.h might set the following defines:
+#
+# WORDS_BIGENDIAN              if your target platform is big-endian
+# IS_EBCDIC_HOST               if the host's encoding is EBCDIC
+#
+# HAVE_DIRECT_H                if you have <direct.h>
+# HAVE_DIRENT_H                if you have <dirent.h>
+# HAVE_CC_INTTYPES_H           if you have a C++ <inttypes.h>
+# HAVE_PROCESS_H               if you have <process.h>
+# HAVE_LIMITS_H                if you have <limits.h>
+# HAVE_CC_LIMITS_H             if you have a C++ <limits.h>
+# HAVE_MATH_H                  if you have <math.h>
+# HAVE_CC_OSFCN_H              if you have a C++ <osfcn.h>
+# HAVE_STDDEF_H                if you have <stddef.h>
+# HAVE_STDLIB_H                if you have <stdlib.h>
+# HAVE_STRING_H                if you have <string.h>
+# HAVE_STRINGS_H               if you have <strings.h>
+# HAVE_SYS_DIR_H               if you have <sys/dir.h>
+# HAVE_SYS_PARAM_H             if you have <sys/param.h>
+# HAVE_SYS_STAT_H              if you have <sys/stat.h>
+# HAVE_SYS_TIME_H              if you have <sys/time.h>
+# HAVE_SYS_TYPES_H             if you have <sys/types.h>
+# HAVE_UNISTD_H                if you have <unistd.h>
+#
+# HAVE_FMOD                    if you have fmod()
+# HAVE_GETCWD                  if you have getcwd()
+# HAVE_GETTIMEOFDAY            if you have gettimeofday()
+# HAVE_ICONV                   if you have iconv()
+# HAVE_ISATTY                  if you have isatty()
+# HAVE_KILL                    if you have kill()
+# HAVE_LANGINFO_CODESET        if you have nl_langinfo()
+# HAVE_MKSTEMP         if you have mkstemp()
+# HAVE_MMAP                    if you have mmap()
+# HAVE_PUTENV                  if you have putenv()
+# HAVE_RENAME                  if you have rename()
+# HAVE_SETLOCALE               if you have setlocale()
+# HAVE_STRCASECMP              if you have strcasecmp()
+# HAVE_STRNCASECMP             if you have strncasecmp()
+# HAVE_STRERROR                if you have strerror()
+# HAVE_STRSEP                  if you have strsep()
+# HAVE_STRTOL                  if you have strtol()
+# HAVE_SYMLINK         if you have symlink()
+#
+# NEED_DECLARATION_GETTIMEOFTODAY
+#                              if your C++ <sys/time.h> doesn't declare
+#                              gettimeofday()
+# NEED_DECLARATION_HYPOT       if your C++ <math.h> doesn't declare hypot()
+# NEED_DECLARATION_PCLOSE      if your C++ <stdio.h> doesn't declare pclose()
+# NEED_DECLARATION_POPEN       if your C++ <stdio.h> doesn't declare popen()
+# NEED_DECLARATION_PUTENV      if your C++ <stdlib.h> doesn't declare
+#                              putenv()
+# NEED_DECLARATION_RAND        if your C++ <stdlib.h> doesn't declare rand()
+# NEED_DECLARATION_SRAND       if your C++ <stdlib.h> doesn't declare srand()
+# NEED_DECLARATION_STRCASECMP  if your C++ <string.h> doesn't declare
+#                              strcasecmp()
+# NEED_DECLARATION_STRNCASECMP
+#                              if your C++ <string.h> doesn't declare
+#                              strncasecmp()
+# NEED_DECLARATION_VFPRINTF    if your C++ <stdio.h> doesn't declare
+#                              vfprintf()
+#
+# HAVE_DECL_GETC_UNLOCKED      if you have getc_unlocked()
+# HAVE_DECL_SYS_SIGLIST        if you have sys_siglist[]
+#
+# HAVE_STRUCT_EXCEPTION        if <math.h> defines struct exception
+# HAVE_SYS_NERR                if you have sysnerr in <errno.h> or <stdio.h>
+# HAVE_SYS_ERRLIST             if you have sys_errlist in <errno.h> or
+#                              <stdio.h>
+# ICONV_CONST=const            if declaration of iconv() needs const
+# LONG_FOR_TIME_T              if localtime() takes a long * not a time_t *
+# RETSIGTYPE=int               if signal handlers return int not void
+# RET_TYPE_SRAND_IS_VOID       if srand() returns void not int
+#
+# WCOREFLAG=0200               if the 0200 bit of the status returned by
+#                              wait() indicates whether a core image was
+#                              produced for a process that was terminated
+#                              by a signal
+#
+# HAVE_WORKING_O_NOATIME      define if <fcntl.h>'s O_NOATIME flag works
+# HAVE_WORKING_O_NOFOLLOW     define if <fcntl.h>'s O_NOFOLLOW flag works
+#
+# uintmax_t=<value>            define to `unsigned long' or `unsigned long
+#                              long' if <inttypes.h> does not exist
+#
+# TRADITIONAL_CPP              if your C++ compiler uses a traditional
+#                              (Reiser) preprocessor
+# ARRAY_DELETE_NEEDS_SIZE      if your C++ doesn't understand `delete []'
+#
+# PAGE=A4                      if the printer's page size is A4
+# GHOSTSCRIPT=gs               the name (and directory if required) of the
+#                              ghostscript program
+
+# Include
+#
+#   {fmod,getcwd,mkstemp,putenv,strcasecmp,
+#    strerror,strncasecmp,strtol}.$(OBJEXT)
+#
+# LIBOBJS
+# in LIBOBJS if your C library is missing the corresponding function.
+
+# `CCC' is the compiler for C++ (.cpp) files.
+CCC = @CXX@
+ETAGS = etags
+ETAGSFLAGS = 
+# Flag that tells etags to assume C++.
+ETAGSCCFLAG = -C
+# Full path to perl.
+# PERL
+# PERLVERSION
+# Sed command with which to edit sh scripts.
+# SH_SCRIPT_SED_CMD
+# Sed script to deal with OS dependencies in sh scripts.
+SH_DEPS_SED_SCRIPT = $(top_builddir)/shdeps.sed
+
+# The program to create directory hierarchies.
+# mkinstalldirs is now in gnulib/build-aux
+PURIFY = purify
+PURIFYCCFLAGS = 
+#PURIFYCCFLAGS=-g++=yes \
+#  -collector=`dirname \`$(CCC) -print-libgcc-file-name\``/ld
+
+# Add groff and gnulib m4 macros
+ACLOCAL_AMFLAGS = -I m4 -I gnulib_m4
+
+# Common preprocessor flags: gnulib includes, common includes in
+# src/include, and config.h that is generated in the build tree
+AM_CPPFLAGS = \
+  -I$(top_srcdir)/src/include \
+  -I$(top_srcdir)/lib \
+  -I$(top_builddir)/src/include \
+  -I$(top_builddir)/lib
+
+
+# Define a custom string for rules that call groff in make's silence mode.
+GROFF_V = $(GROFF_V_@AM_V@)
+GROFF_V_ = $(GROFF_V_@AM_DEFAULT_V@)
+GROFF_V_0 = @echo "  GROFF   " $@;
+bin_SCRIPTS = $(am__append_2) eqn2graph gdiffmk glilypond gperl \
+       gpinyin grap2graph groffer $(ROFF2PROGS) mmroff pdfroff \
+       pic2graph gropdf pdfmom grog afmtodit
+dist_bin_SCRIPTS = 
+MOSTLYCLEANFILES = lib/core lib/*.stackdump lib/alloca.h \
+       lib/alloca.h-t lib/errno.h lib/errno.h-t lib/float.h \
+       lib/float.h-t lib/limits.h lib/limits.h-t lib/math.h \
+       lib/math.h-t lib/stddef.h lib/stddef.h-t lib/stdint.h \
+       lib/stdint.h-t lib/stdio.h lib/stdio.h-t lib/string.h \
+       lib/string.h-t lib/sys/types.h lib/sys/types.h-t \
+       lib/unitypes.h lib/unitypes.h-t lib/uniwidth.h \
+       lib/uniwidth.h-t lib/wchar.h lib/wchar.h-t lib/wctype.h \
+       lib/wctype.h-t shdeps.sed $(CHEM_GENEXAMPLES) \
+       $(nodist_chemexample122_DATA) contrib/chem/README $(ROFF2MAN) \
+       $(HDTBLGENFILES) $(HDTBLPROCESSEDEXAMPLEFILES) \
+       $(HDTBLSTRIPFILES) $(am__append_6) $(am__append_9) \
+       $(MOMPROCESSEDEXAMPLEFILES) penguin.ps penguin.pdf \
+       $(am__append_10) $(am__append_12) $(am__append_14) \
+       $(am__append_15) doc/examples.stamp $(am__append_17) gnu.eps \
+       $(DEVASCIIFONTSFILES) font/devascii/DESC \
+       $(DEVCP1047FONTSFILES) font/devcp1047/DESC font/devdvi/DESC \
+       $(DEVHTMLFONTSFILES) font/devhtml/DESC $(DEVLATIN1FONTSFILES) \
+       font/devlatin1/DESC font/devlbp/DESC font/devlj4/DESC \
+       font/devpdf/download font/devpdf/DESC font/devpdf/Foundry \
+       font/devpdf/build_font_files font/devpdf/util/BuildFoundries \
+       $(DEVPSFONTFILES_GENERATED) $(DEVUTF8FONTSFILES) \
+       font/devutf8/DESC groff_opts.tmp $(GROFF_OPTS_OUTPUT) \
+       $(TMACMDOCFILES) tmac/www.tmac $(TMACSTRIPFILES) \
+       tmac/stamp-wrap tmac/*-wrap $(prefixexecbin_SCRIPTS) \
+       $(bin_SCRIPTS) $(man1_MANS) $(man5_MANS) $(man7_MANS) \
+       $(PREFIXMAN1) test-groff
+MOSTLYCLEANADD = 
+# No GNU Make output.
+noinst_LIBRARIES = lib/libgnu.a libbib.a libdriver.a libgroff.a \
+       $(am__append_18)
+
+# Case of out-of-source build: we must create the 'man' directory.
+
+# Non-recursive makefile system. See Automake manual '7.3 An
+# Alternative Approach to Subdirectories'. We use a single Makefile.am
+# that includes other .am files, rather than using SUBDIRS.  Note that
+# relative paths in the following .am files are relative to the top
+# source directory.
+
+# Adding defs.h to BUILT_SOURCES will ensure that it will be built on
+# make all or make check before all other targets. However, if another
+# target is built from a clean build tree, (for example make groff)
+# the files in BUILT_SOURCES will not be built first. That is why
+# additional dependencies where added in the .am files that lists
+# objects that use defs (for exmaple in groff.am:
+# src/roff/groff/groff.$(OBJEXT): defs.h)
+
+# Force generation of test-groff even though we don't ship it.
+BUILT_SOURCES = $(ALLOCA_H) $(ERRNO_H) $(FLOAT_H) $(LIMITS_H) \
+       lib/math.h $(STDDEF_H) $(STDINT_H) lib/stdio.h lib/string.h \
+       lib/sys/types.h $(LIBUNISTRING_UNITYPES_H) \
+       $(LIBUNISTRING_UNIWIDTH_H) lib/wchar.h lib/wctype.h man defs.h \
+       test-groff $(top_srcdir)/.version
+CLEANFILES = defs.h src/libs/libgroff/version.cpp charset.alias \
+       ref-add.sed ref-del.sed $(am__append_21) \
+       src/preproc/eqn/eqn.hpp src/preproc/eqn/eqn.cpp \
+       src/preproc/eqn/eqn.output src/preproc/pic/pic.cpp \
+       src/preproc/pic/pic.hpp src/preproc/pic/pic.output \
+       src/preproc/refer/label.cpp src/preproc/refer/label.hpp \
+       src/preproc/refer/label.output src/roff/troff/majorminor.cpp
+# gnulib asks to include this file
+
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
+# Original Makefile.sub written by Keith Marshall
+#   (keith.d.marshall@ntlworld.com).
+# Adapted to Automake by Bertrand Garrigues (bertrand.garrigues@laposte.net).
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# pdf doc, written in mom and therefore using contrib/mom/mom.am
+# definitions
+
+# File used by contrib/hdtbl and contrib/pdfmark. It is distributed in
+# doc.eps. We try in priority to use the file in 'doc'.
+
+# TODO: these .c files could be removed (use gnulib instead).
+
+# Other files that should be present in the distribution tarball.
+
+# Version files - see script 'build-aux/git-gen-version'
+EXTRA_DIST = gnulib_m4/gnulib-cache.m4 lib/alloca.in.h lib/errno.in.h \
+       lib/float.c lib/float.in.h lib/itold.c lib/fprintf.c \
+       lib/fpucw.h lib/frexp.c lib/frexp.c lib/frexpl.c lib/fseterr.c \
+       lib/fseterr.h lib/stdio-impl.h \
+       $(top_srcdir)/build-aux/git-version-gen \
+       $(top_srcdir)/build-aux/config.rpath lib/float+.h lib/isnan.c \
+       lib/isnand-nolibm.h lib/isnand.c lib/float+.h lib/isnan.c \
+       lib/isnanf-nolibm.h lib/isnanf.c lib/float+.h lib/isnan.c \
+       lib/isnanl-nolibm.h lib/isnanl.c lib/limits.in.h \
+       lib/localcharset.h lib/math.in.h lib/memchr.c \
+       lib/memchr.valgrind $(top_srcdir)/build-aux/prefix-gnulib-mk \
+       lib/printf-frexp.h lib/printf-frexp.c lib/printf-frexpl.h \
+       lib/float+.h lib/signbitd.c lib/signbitf.c lib/signbitl.c \
+       lib/arg-nonnull.h lib/c++defs.h lib/warn-on-use.h \
+       lib/snprintf.c lib/stddef.in.h lib/stdint.in.h lib/stdio.in.h \
+       lib/streq.h lib/string.in.h lib/sys_types.in.h \
+       lib/unitypes.in.h lib/localcharset.h lib/uniwidth.in.h \
+       lib/uniwidth/cjk.h lib/asnprintf.c lib/float+.h \
+       lib/printf-args.c lib/printf-args.h lib/printf-parse.c \
+       lib/printf-parse.h lib/vasnprintf.c lib/vasnprintf.h \
+       lib/verify.h lib/vsnprintf.c lib/wchar.in.h lib/wctype.in.h \
+       lib/wcwidth.c $(am__append_3) arch/misc/shdeps.sh \
+       contrib/chem/ChangeLog contrib/chem/chem.1.man \
+       contrib/chem/chem.pic contrib/chem/chem.pl \
+       contrib/chem/README.txt contrib/chem/examples/README.txt \
+       contrib/chem/examples/122/README.txt \
+       contrib/eqn2graph/eqn2graph.1.man \
+       contrib/eqn2graph/eqn2graph.sh contrib/gdiffmk/gdiffmk.1.man \
+       contrib/gdiffmk/ChangeLog contrib/gdiffmk/README \
+       contrib/gdiffmk/gdiffmk.sh \
+       contrib/gdiffmk/tests/gdiffmk_tests.sh \
+       contrib/gdiffmk/tests/runtests.sh \
+       contrib/gdiffmk/tests/baseline \
+       contrib/gdiffmk/tests/baseline.6 \
+       contrib/gdiffmk/tests/baseline.6a \
+       contrib/gdiffmk/tests/baseline.7 \
+       contrib/gdiffmk/tests/baseline.8 \
+       contrib/gdiffmk/tests/baseline.9 \
+       contrib/gdiffmk/tests/baseline.9a \
+       contrib/gdiffmk/tests/baseline.10 contrib/gdiffmk/tests/file1 \
+       contrib/gdiffmk/tests/file2 contrib/glilypond/ChangeLog \
+       contrib/glilypond/ChangeLog.0x \
+       contrib/glilypond/glilypond.1.man \
+       contrib/glilypond/glilypond.pl contrib/glilypond/README.txt \
+       contrib/glilypond/examples/example.groff \
+       contrib/gperl/ChangeLog contrib/gperl/gperl.1.man \
+       contrib/gperl/gperl.pl contrib/gpinyin/ChangeLog \
+       contrib/gpinyin/gpinyin.1.man contrib/gpinyin/gpinyin.pl \
+       $(grap2graph_srcdir)/grap2graph.sh \
+       $(grap2graph_srcdir)/grap2graph.1.man \
+       contrib/groff_filenames/ChangeLog \
+       contrib/groff_filenames/groff_filenames.5.man $(GROFFER_PERL) \
+       $(GROFFER_REST) contrib/groffer/ChangeLog \
+       contrib/groffer/README contrib/groffer/README_PERL \
+       contrib/hdtbl/examples/fonts_n.in \
+       contrib/hdtbl/examples/fonts_x.in \
+       contrib/hdtbl/examples/test-hdtbl.sh.in $(am__append_4) \
+       contrib/hdtbl/ChangeLog contrib/hdtbl/TODO \
+       contrib/hdtbl/groff_hdtbl.7.man contrib/hdtbl/hdtbl.tmac-u \
+       contrib/hdtbl/hdmisc.tmac-u contrib/mm/ChangeLog \
+       contrib/mm/examples contrib/mm/Makefile.sim contrib/mm/mm \
+       contrib/mm/NOTES contrib/mm/README contrib/mm/groff_mm.7.man \
+       contrib/mm/groff_mmse.7.man contrib/mm/mmroff.1.man \
+       contrib/mm/mmroff.pl $(am__append_7) \
+       contrib/mom/examples/test-mom.sh.in $(MOMHTMLDOCFILES) \
+       $(MOMEXAMPLEFILES) contrib/mom/BUGS contrib/mom/ChangeLog \
+       contrib/mom/NEWS contrib/mom/TODO contrib/mom/copyright \
+       contrib/mom/groff_mom.7.man $(am__append_11) \
+       contrib/pdfmark/cover.ms contrib/pdfmark/pdfmark.ms \
+       contrib/pdfmark/ChangeLog contrib/pdfmark/README \
+       contrib/pdfmark/PROBLEMS contrib/pdfmark/TODO \
+       contrib/pdfmark/pdfroff.1.man contrib/pdfmark/pdfroff.sh \
+       contrib/pic2graph/pic2graph.sh \
+       contrib/pic2graph/pic2graph.1.man $(am__append_13) \
+       doc/automake.mom $(am__append_16) doc/gnu.xpm doc/fixinfo.sh \
+       doc/txi-en.tex doc/groff.texi doc/fdl.texi doc/gnu.xpm \
+       $(DEVX100FONTS) $(DEVX10012FONTS) $(DEVX75FONTS) \
+       $(DEVX7512FONTS) font/devascii/R.proto \
+       font/devascii/DESC.proto font/devcp1047/R.proto \
+       font/devcp1047/DESC.proto $(DEVDVIFONTFILES) $(DEVDVIGENFILES) \
+       font/devdvi/DESC.in font/devhtml/R.proto \
+       font/devhtml/DESC.proto font/devhtml/R.in \
+       font/devlatin1/R.proto font/devlatin1/DESC.proto \
+       $(DEVLBPFONTFILES) font/devlbp/DESC.in font/devlj4/DESC.in \
+       font/devpdf/DESC.in font/devpdf/Foundry.in \
+       font/devpdf/util/BuildFoundries.pl font/devps/symbolmap \
+       font/devps/DESC.in font/devps/prologue.ps \
+       font/devps/psstrip.sed font/devps/symbol.afm \
+       font/devps/symbolsl.ps font/devps/zapfdr.afm \
+       font/devps/zapfdr.ps font/devps/generate/freeeuro.sfd \
+       font/devps/generate/make-zapfdr \
+       font/devps/generate/symbolsl.awk \
+       font/devps/generate/sfdtopfa.pe font/devps/generate/zapfdr.sed \
+       font/devutf8/R.proto font/devutf8/DESC.proto \
+       font/devutf8/NOTES font/devutf8/R.in $(GENFONTSSH) \
+       $(GENDESCSH) man/groff_font.5.man man/groff_out.5.man \
+       man/groff_tmac.5.man man/ditroff.7.man man/groff_char.7.man \
+       man/groff_diff.7.man man/groff.7.man man/roff.7.man \
+       src/libs/libgroff/mkstemp.cpp src/libs/libgroff/fmod.c \
+       src/libs/libgroff/getcwd.c src/libs/libgroff/putenv.c \
+       src/libs/libgroff/strcasecmp.c src/libs/libgroff/strerror.c \
+       src/libs/libgroff/strncasecmp.c src/libs/libgroff/strtol.c \
+       src/libs/libgroff/config.charset src/libs/libgroff/ref-add.sin \
+       src/libs/libgroff/ref-del.sin src/libs/libgroff/make-uniuni \
+       src/devices/grodvi/grodvi.1.man \
+       src/devices/grohtml/grohtml.1.man \
+       src/devices/grolbp/grolbp.1.man \
+       src/devices/grolj4/grolj4.1.man \
+       src/devices/grolj4/lj4_font.5.man src/devices/gropdf/TODO \
+       src/devices/gropdf/gropdf.pl src/devices/gropdf/pdfmom.pl \
+       src/devices/gropdf/gropdf.1.man \
+       src/devices/gropdf/pdfmom.1.man src/devices/grops/grops.1.man \
+       src/devices/grops/psfig.diff src/devices/grops/TODO \
+       src/devices/grotty/grotty.1.man src/devices/grotty/TODO \
+       $(am__append_19) src/devices/xditview/ad2c \
+       src/devices/xditview/ChangeLog src/devices/xditview/DESC.in \
+       src/devices/xditview/FontMap \
+       src/devices/xditview/GXditview-color.ad \
+       src/devices/xditview/GXditview.ad src/devices/xditview/README \
+       src/devices/xditview/TODO src/devices/xditview/gray1.bm \
+       src/devices/xditview/gray2.bm src/devices/xditview/gray3.bm \
+       src/devices/xditview/gray4.bm src/devices/xditview/gray5.bm \
+       src/devices/xditview/gray6.bm src/devices/xditview/gray7.bm \
+       src/devices/xditview/gray8.bm src/devices/xditview/xdit.bm \
+       src/devices/xditview/xdit_mask.bm \
+       src/devices/xditview/gxditview.1.man src/preproc/eqn/TODO \
+       src/preproc/eqn/neqn.sh src/preproc/eqn/eqn.1.man \
+       src/preproc/eqn/neqn.1.man src/preproc/grn/README \
+       src/preproc/grn/grn.1.man src/preproc/pic/pic.1.man \
+       src/preproc/pic/TODO src/preproc/preconv/preconv.1.man \
+       src/preproc/refer/TODO src/preproc/refer/refer.1.man \
+       src/preproc/soelim/TODO src/preproc/soelim/soelim.1.man \
+       src/preproc/tbl/tbl.1.man src/roff/groff/groff.1.man \
+       src/roff/grog/grog.1.man src/roff/grog/grog.pl \
+       src/roff/nroff/nroff.1.man src/roff/nroff/nroff.sh \
+       src/roff/troff/column.cpp src/roff/troff/troff.1.man \
+       src/roff/troff/TODO src/utils/addftinfo/addftinfo.1.man \
+       src/utils/afmtodit/afmtodit.1.man \
+       src/utils/afmtodit/afmtodit.pl \
+       src/utils/afmtodit/afmtodit.tables \
+       src/utils/afmtodit/make-afmtodit-tables \
+       src/utils/hpftodit/hpftodit.1.man \
+       src/utils/indxbib/indxbib.1.man src/utils/indxbib/eign \
+       src/utils/lkbib/lkbib.1.man src/utils/lookbib/lookbib.1.man \
+       src/utils/pfbtops/pfbtops.1.man \
+       src/utils/tfmtodit/tfmtodit.1.man \
+       src/utils/xtotroff/xtotroff.1.man tmac/fixmacros.sed \
+       tmac/groff_ms.7.man tmac/groff_man.7.man tmac/groff_me.7.man \
+       tmac/groff_mdoc.7.man tmac/groff_trace.7.man \
+       tmac/groff_www.7.man tmac/hyphenex.pl tmac/LOCALIZATION \
+       tmac/man.ultrix tmac/psfig.tmac tmac/ptx.tmac tmac/strip.sed \
+       tmac/TESTING-HINTS tmac/TODO tmac/www.tmac.in BUG-REPORT \
+       ChangeLog.115 ChangeLog.116 ChangeLog.117 ChangeLog.118 \
+       ChangeLog.119 ChangeLog.120 ChangeLog.121 FDL FOR-RELEASE \
+       gendef.sh INSTALL.REPO INSTALL.extra LICENSES MANIFEST \
+       mdate.pl MORE.STUFF PROBLEMS PROJECTS README.MinGW arch/djgpp \
+       font/util/make-Rproto makevarescape.sed $(top_srcdir)/.version
+FONTFILES = 
+PREFIXMAN1 = src/preproc/eqn/eqn.1 src/preproc/eqn/neqn.1 \
+       src/preproc/grn/grn.1 src/preproc/pic/pic.1 \
+       src/preproc/refer/refer.1 src/preproc/soelim/soelim.1 \
+       src/preproc/tbl/tbl.1 src/roff/nroff/nroff.1 \
+       src/roff/troff/troff.1 src/utils/indxbib/indxbib.1 \
+       src/utils/lookbib/lookbib.1
+man1_MANS = contrib/chem/chem.1 contrib/eqn2graph/eqn2graph.1 \
+       contrib/gdiffmk/gdiffmk.1 contrib/glilypond/glilypond.1 \
+       contrib/gperl/gperl.1 contrib/gpinyin/gpinyin.1 \
+       contrib/grap2graph/grap2graph.1 contrib/groffer/groffer.1 \
+       contrib/groffer/roff2dvi.1 contrib/groffer/roff2html.1 \
+       contrib/groffer/roff2pdf.1 contrib/groffer/roff2ps.1 \
+       contrib/groffer/roff2text.1 contrib/groffer/roff2x.1 \
+       contrib/mm/mmroff.1 contrib/pdfmark/pdfroff.1 \
+       contrib/pic2graph/pic2graph.1 src/devices/grodvi/grodvi.1 \
+       src/devices/grohtml/grohtml.1 src/devices/grolbp/grolbp.1 \
+       src/devices/grolj4/grolj4.1 src/devices/gropdf/gropdf.1 \
+       src/devices/gropdf/pdfmom.1 src/devices/grops/grops.1 \
+       src/devices/grotty/grotty.1 $(am__append_22) \
+       src/preproc/preconv/preconv.1 src/roff/groff/groff.1 \
+       src/roff/grog/grog.1 src/utils/addftinfo/addftinfo.1 \
+       src/utils/afmtodit/afmtodit.1 src/utils/hpftodit/hpftodit.1 \
+       src/utils/lkbib/lkbib.1 src/utils/pfbtops/pfbtops.1 \
+       src/utils/tfmtodit/tfmtodit.1 $(am__append_24) \
+       $(am__append_25)
+man5_MANS = contrib/groff_filenames/groff_filenames.5 man/groff_font.5 \
+       man/groff_out.5 man/groff_tmac.5 src/devices/grolj4/lj4_font.5
+man7_MANS = contrib/hdtbl/groff_hdtbl.7 contrib/mm/groff_mm.7 \
+       contrib/mm/groff_mmse.7 contrib/mom/groff_mom.7 man/ditroff.7 \
+       man/groff_char.7 man/groff_diff.7 man/groff.7 man/roff.7 \
+       tmac/groff_ms.7 tmac/groff_man.7 tmac/groff_me.7 \
+       tmac/groff_mdoc.7 tmac/groff_trace.7 tmac/groff_www.7
+
+# for lex/yacc
+AM_YFLAGS = -d -v
+
+# Rule to generate ps and roff files
+
+# Rule to generated .pdf files from .mom files
+SUFFIXES = .roff .in .ps .mom .pdf .me .ms .ps .html .txt .texi .dvi \
+       .pdf .xhtml .man
+
+# tests launched by make check
+check_SCRIPTS = 
+TESTS = contrib/gdiffmk/tests/gdiffmk_tests.sh $(am__append_5) \
+       $(am__append_8)
+AM_TESTS_ENVIRONMENT = \
+  abs_top_srcdir=$(abs_top_srcdir) \
+  abs_top_builddir=$(abs_top_builddir) \
+  export abs_top_srcdir abs_top_builddir;
+
+
+# We use Automake's Uniform Naming Scheme.
+#
+# prefixexecbin_PROGRAMS is the list of programs that may have a
+# NAMEPREFIX if an existing non-GNU troff system was detected.
+#
+# This is done by the m4 macro GROFF_G that checks for the presence of
+# GNU Troff built-in \n[.g] macro. If a Unix Troff binary was
+# detected, the following programs and scripts names will have a 'g'
+# prefix: chem, tbl, eqn, neqn, pic, soleimm grn, refer, lookbib,
+# troff, nroff. Also, PROG_PREFIX will be set to 'g' in the generated
+# header defs.h so that these programs could be called correctly.
+#
+# prefixexecbindir is used to temporary install these programs. They
+# are then moved to bindir during the install-exec-hook.  Same thing
+# for the scripts.
+NAMEPREFIX = $(g)
+prefixexecbin_SCRIPTS = chem neqn nroff
+@USEPROGRAMPREFIX_FALSE@prefixexecbindir = $(bindir)
+# We use datadir because the uninstall rule for the PROGRAMS attempt
+# to cd into prefixexecbindir, and thus if prefixexecbindir is removed
+# two consecutive uninstall would fail
+@USEPROGRAMPREFIX_TRUE@prefixexecbindir = $(datadir)
+
+# Path to binaries and flags used by contribs and doc to generated doc.
+# These may be overridden if cross-compiling.
+GROFFBIN = $(abs_top_builddir)/groff
+GROFF_BIN_PATH = $(abs_top_builddir)
+PDFMOMBIN = $(abs_top_builddir)/pdfmom
+# The second directories are needed for the case "cd build; ../configure".
+FFLAG = -F$(abs_top_builddir)/font -F$(abs_top_srcdir)/font
+TFLAG = -M$(abs_top_builddir)/tmac -M$(abs_top_srcdir)/tmac
+
+# make builtin variable RM
+@MAKE_DONT_HAVE_RM_TRUE@RM = rm -f
+
+# 'VERSION' is generated by gnulib script git-version-gen, using the
+# command 'git describe':
+#
+# - From a git repository: if the current commit corresponds to a
+#   tag, then 'VERSION' is simply the tag (e.g. 1.22.3).  Otherwise
+#   'VERSION' has the following format:
+#     <tag>-<nb_commits>-<commit>
+#
+#   With:
+#     . tag: the most recent tag reachable from the current commit
+#     . nb_commits: number of commits between the most recent tag and
+#       the current commit.
+#     . current commit, abbreviated.
+#   For example: 1.22.3.real.434-5aafd
+#   The version is stored in .version.
+#
+# - From a tarball, the version is taken from .tarball-version
+#
+# REVISION is the full revision given by git-version-gen, which can
+# have non-alphanumeric symbols.
+#
+# Also see configure.ac for the related SHORT_VERSION macro.
+MAJOR_VERSION = `echo $(VERSION) | cut -d . -f 1`
+MINOR_VERSION = `echo $(VERSION) | cut -d . -f 2`
+REVISION = `echo $(VERSION) | cut -d . -f 3`
+lib_libgnu_a_SOURCES = lib/localcharset.c lib/math.c \
+       lib/printf-frexp.c lib/printf-frexpl.c lib/size_max.h \
+       $(am__append_1) lib/wctype-h.c lib/xsize.h lib/xsize.c
+lib_libgnu_a_LIBADD = $(gl_LIBOBJS)
+lib_libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
+EXTRA_lib_libgnu_a_SOURCES = lib/float.c lib/itold.c lib/fprintf.c \
+       lib/frexp.c lib/frexp.c lib/frexpl.c lib/fseterr.c lib/isnan.c \
+       lib/isnand.c lib/isnan.c lib/isnanf.c lib/isnan.c lib/isnanl.c \
+       lib/memchr.c lib/printf-frexp.c lib/signbitd.c lib/signbitf.c \
+       lib/signbitl.c lib/snprintf.c lib/asnprintf.c \
+       lib/printf-args.c lib/printf-parse.c lib/vasnprintf.c \
+       lib/vsnprintf.c lib/wcwidth.c
+
+# Use this preprocessor expression to decide whether #include_next works.
+# Do not rely on a 'configure'-time test for this, since the expression
+# might appear in an installed header, which is used by some other compiler.
+HAVE_INCLUDE_NEXT = lib/(__GNUC__ lib/|| lib/60000000 lib/<= lib/__DECC_VER)
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+ARG_NONNULL_H = $(top_srcdir)/lib/arg-nonnull.h
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+CXXDEFS_H = $(top_srcdir)/lib/c++defs.h
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+WARN_ON_USE_H = $(top_srcdir)/lib/warn-on-use.h
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+# mingw.am
+#
+WINSCRIPTS = \
+  arch/mingw/afmtodit.cmd \
+  arch/mingw/chem.cmd \
+  arch/mingw/gperl.cmd \
+  arch/mingw/gpinyin.cmd \
+  arch/mingw/grap2graph.cmd \
+  arch/mingw/groffer.cmd \
+  arch/mingw/grog.cmd \
+  arch/mingw/gropdf.cmd \
+  arch/mingw/mmroff.cmd \
+  arch/mingw/neqn.cmd \
+  arch/mingw/pdfmom.cmd \
+  arch/mingw/roff2dvi.cmd \
+  arch/mingw/roff2html.cmd \
+  arch/mingw/roff2pdf.cmd \
+  arch/mingw/roff2ps.cmd \
+  arch/mingw/roff2text.cmd \
+  arch/mingw/roff2x.cmd
+
+chem_srcdir = $(top_srcdir)/contrib/chem
+
+# Files installed in $(datasubdir)/pic
+chempicdir = $(datasubdir)/pic
+dist_chempic_DATA = contrib/chem/chem.pic
+CHEM_GENEXAMPLES = contrib/chem/examples/README
+CHEM_EXAMPLES = \
+  contrib/chem/examples/atp.chem \
+  contrib/chem/examples/cholesterin.chem \
+  contrib/chem/examples/ethamivan.chem \
+  contrib/chem/examples/lsd.chem \
+  contrib/chem/examples/morphine.chem \
+  contrib/chem/examples/penicillin.chem \
+  contrib/chem/examples/reserpine.chem
+
+
+# Files installed in $(exampledir)/chem
+@BUILD_EXAMPLES_TRUE@chemexampledir = $(exampledir)/chem
+@BUILD_EXAMPLES_TRUE@nodist_chemexample_DATA = $(CHEM_GENEXAMPLES)
+@BUILD_EXAMPLES_TRUE@dist_chemexample_DATA = $(CHEM_EXAMPLES)
+
+# Files installed in $(exampledir)/chem/122. All the .chem files in 122 are 
+# lazily installed by the local install target
+@BUILD_EXAMPLES_TRUE@chemexample122dir = $(chemexampledir)/122
+@BUILD_EXAMPLES_TRUE@nodist_chemexample122_DATA = contrib/chem/examples/122/README
+eqn2graph_srcdir = $(top_srcdir)/contrib/eqn2graph
+
+########################################################################
+gdiffmk_srcdir = $(top_srcdir)/contrib/gdiffmk
+
+########################################################################
+glilypond_srcdir = $(top_srcdir)/contrib/glilypond
+
+# files going to lib directory '$(glilypond_dir)'
+# TODO glilypond_dir is subsitued by configure.ac, check if this could be removed
+glilyponddir = $(glilypond_dir)
+dist_glilypond_DATA = \
+  contrib/glilypond/subs.pl \
+  contrib/glilypond/oop_fh.pl \
+  contrib/glilypond/args.pl
+
+gpinyin_srcdir = $(top_srcdir)/contrib/gpinyin
+gpinyindir = $(gpinyin_dir)
+dist_gpinyin_DATA = contrib/gpinyin/subs.pl
+grap2graph_srcdir = $(top_srcdir)/contrib/grap2graph
+groffer_srcdir = $(top_srcdir)/contrib/groffer
+# generated programs
+ROFF2PROGS = \
+  roff2dvi \
+  roff2html \
+  roff2pdf \
+  roff2ps \
+  roff2text \
+  roff2x
+
+
+# Generated man templates
+ROFF2MAN = \
+  contrib/groffer/roff2dvi.1.man \
+  contrib/groffer/roff2html.1.man \
+  contrib/groffer/roff2pdf.1.man \
+  contrib/groffer/roff2ps.1.man \
+  contrib/groffer/roff2text.1.man \
+  contrib/groffer/roff2x.1.man
+
+GROFFER_PERL = \
+  contrib/groffer/main_subs.pl \
+  contrib/groffer/man.pl \
+  contrib/groffer/split_env.sh \
+  contrib/groffer/subs.pl
+
+GROFFER_REST = \
+  contrib/groffer/roff2.1.man \
+  contrib/groffer/version.sh \
+  contrib/groffer/groffer.1.man \
+  contrib/groffer/groffer.pl \
+  contrib/groffer/roff2.pl
+
+
+# groffer_dir is set by a m4 macro
+grofferdir = $(groffer_dir)
+groffer_DATA = $(GROFFER_PERL) contrib/groffer/version.sh
+hdtbl_srcdir = $(top_srcdir)/contrib/hdtbl
+hdtbl_builddir = $(top_builddir)/contrib/hdtbl
+
+# Groff command used to generate .ps files
+HDTBL_TFLAG = -M$(hdtbl_srcdir) -M$(hdtbl_builddir)
+HDTBL_PFLAG = -t -p -e -U
+HDTBLGROFF = \
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  $(GROFFBIN) $(FFLAG) $(TFLAG) $(HDTBL_TFLAG) $(HDTBL_PFLAG)
+
+
+# Files installed in $(tmacdir).
+# These files are generated with 'strip.sed' from their unstripped source file
+# equivalent (e.g. hdtbl.tmac is generated from hdtbl.tmac-u)
+HDTBLSTRIPFILES = \
+  contrib/hdtbl/hdtbl.tmac \
+  contrib/hdtbl/hdmisc.tmac
+
+hdtbltmacdir = $(tmacdir)
+hdtbltmac_DATA = $(HDTBLSTRIPFILES)
+
+# Files installed in $(exampledir)/hdtbl.  HDTBLEXAMPLEFILES are
+# located in the source tree, while HDTBLPROCESSEDEXAMPLEFILES are
+# generated in the build tree.
+
+# These files are handled by the '.in.roff' rule.
+HDTBLGENFILES = \
+  contrib/hdtbl/examples/fonts_n.roff \
+  contrib/hdtbl/examples/fonts_x.roff
+
+HDTBLEXAMPLEFILES = \
+  contrib/hdtbl/examples/common.roff \
+  contrib/hdtbl/examples/chess_board.roff \
+  contrib/hdtbl/examples/color_boxes.roff \
+  contrib/hdtbl/examples/color_nested_tables.roff \
+  contrib/hdtbl/examples/color_table_cells.roff \
+  contrib/hdtbl/examples/color_transitions.roff \
+  contrib/hdtbl/examples/col_rowspan_colors.roff \
+  contrib/hdtbl/examples/mixed_pickles.roff \
+  contrib/hdtbl/examples/rainbow.roff \
+  contrib/hdtbl/examples/short_reference.roff
+
+HDTBLPROCESSEDEXAMPLEFILES = \
+  contrib/hdtbl/examples/chess_board.ps \
+  contrib/hdtbl/examples/color_boxes.ps \
+  contrib/hdtbl/examples/color_nested_tables.ps \
+  contrib/hdtbl/examples/color_table_cells.ps \
+  contrib/hdtbl/examples/color_transitions.ps \
+  contrib/hdtbl/examples/col_rowspan_colors.ps \
+  contrib/hdtbl/examples/fonts_n.ps \
+  contrib/hdtbl/examples/fonts_x.ps \
+  contrib/hdtbl/examples/mixed_pickles.ps \
+  contrib/hdtbl/examples/rainbow.ps \
+  contrib/hdtbl/examples/short_reference.ps
+
+hdtblexampledir = $(exampledir)/hdtbl
+@BUILD_EXAMPLES_TRUE@dist_hdtblexample_DATA = $(HDTBLEXAMPLEFILES)
+@BUILD_EXAMPLES_TRUE@nodist_hdtblexample_DATA = \
+@BUILD_EXAMPLES_TRUE@  $(HDTBLGENFILES) \
+@BUILD_EXAMPLES_TRUE@  $(HDTBLPROCESSEDEXAMPLEFILES) \
+@BUILD_EXAMPLES_TRUE@  gnu.eps
+
+@BUILD_EXAMPLES_TRUE@hdtbl_TESTS = contrib/hdtbl/examples/test-hdtbl.sh
+mm_srcdir = $(top_srcdir)/contrib/mm
+mm_builddir = $(top_builddir)/contrib/mm
+
+# Files installed in $(tmacdir)/mm
+MMFILES = \
+  contrib/mm/mm/0.MT \
+  contrib/mm/mm/5.MT \
+  contrib/mm/mm/4.MT \
+  contrib/mm/mm/ms.cov \
+  contrib/mm/mm/se_ms.cov
+
+mmdir = $(tmacdir)/mm
+dist_mm_DATA = $(MMFILES)
+
+# Files installed in $(tmacdir)
+tmacmmdir = $(tmacdir)
+dist_tmacmm_DATA = contrib/mm/refer-mm.tmac
+MMEXAMPLEFILES = \
+  contrib/mm/examples/letter.mm
+
+mmexampledir = $(exampledir)/mm
+dist_mmexample_DATA = $(MMEXAMPLEFILES)
+
+# Local configuration files with default values.
+MMLOCALE = \
+  locale \
+  se_locale
+
+mom_srcdir = $(top_srcdir)/contrib/mom
+
+# pdfmom command used to generated .pdf
+MOM_TFLAG = -M$(mom_srcdir)
+MOM_KFLAG = -k -p -e -t
+MOMPDFMOM = \
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  PDFMOM_BIN_PATH="$(top_builddir)" \
+  $(PDFMOMBIN) $(FFLAG) $(TFLAG) $(MOM_TFLAG) $(MOM_KFLAG)
+
+
+# Files installed in $(tmacdir).
+# MOMNORMALFILES are located in the source tree.
+MOMNORMALFILES = \
+  contrib/mom/mom.tmac \
+  contrib/mom/om.tmac
+
+momtmacdir = $(tmacdir)
+dist_momtmac_DATA = $(MOMNORMALFILES)
+
+# Files installed in htmldocdir/mom
+@INSTALL_SHIPPED_HTML_TRUE@MOMHTMLDOCFILES = \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/stylesheet.css \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/appendices.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/color.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/cover.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/definitions.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/docelement.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/docprocessing.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/goodies.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/graphical.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/headfootpage.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/images.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/inlines.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/intro.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/letters.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/macrolist.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/rectoverso.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/refer.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/reserved.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/tables-of-contents.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/toc.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/typesetting.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/using.html \
+@INSTALL_SHIPPED_HTML_TRUE@  contrib/mom/momdoc/version-2.html
+
+@INSTALL_SHIPPED_HTML_TRUE@momhtmldir = $(htmldocdir)/mom
+@INSTALL_SHIPPED_HTML_TRUE@momhtml_DATA = $(MOMHTMLDOCFILES)
+
+# Files installed in $(examplesdir)/mom.  MOMEXAMPLEFILES are located
+# in the source tree, while MOMPROCESSEDEXAMPLEFILES are generated in
+# the build tree.
+MOMEXAMPLEFILES = \
+  contrib/mom/examples/letter.mom \
+  contrib/mom/examples/mom-pdf.mom \
+  contrib/mom/examples/mon_premier_doc.mom \
+  contrib/mom/examples/sample_docs.mom \
+  contrib/mom/examples/typesetting.mom \
+  contrib/mom/examples/README.txt \
+  contrib/mom/examples/README-fr.txt \
+  contrib/mom/examples/elvis_syntax \
+  contrib/mom/examples/elvis_syntax.new \
+  contrib/mom/examples/penguin.ps \
+  contrib/mom/examples/penguin.pdf \
+  contrib/mom/examples/mom.vim \
+  contrib/mom/examples/slide-demo.mom
+
+@BUILD_EXAMPLES_TRUE@momexampledir = $(exampledir)/mom
+@BUILD_EXAMPLES_TRUE@dist_momexample_DATA = $(MOMEXAMPLEFILES)
+@BUILD_PDFEXAMPLES_TRUE@MOMPROCESSEDEXAMPLEFILES = \
+@BUILD_PDFEXAMPLES_TRUE@  contrib/mom/examples/letter.pdf \
+@BUILD_PDFEXAMPLES_TRUE@  contrib/mom/examples/mom-pdf.pdf \
+@BUILD_PDFEXAMPLES_TRUE@  contrib/mom/examples/mon_premier_doc.pdf \
+@BUILD_PDFEXAMPLES_TRUE@  contrib/mom/examples/sample_docs.pdf \
+@BUILD_PDFEXAMPLES_TRUE@  contrib/mom/examples/typesetting.pdf \
+@BUILD_PDFEXAMPLES_TRUE@  contrib/mom/examples/slide-demo.pdf
+
+@BUILD_PDFEXAMPLES_TRUE@momprocessedexampledir = $(exampledir)/mom
+@BUILD_PDFEXAMPLES_TRUE@nodist_momprocessedexample_DATA = $(MOMPROCESSEDEXAMPLEFILES)
+
+# Small test suite on mom examples
+@BUILD_PDFEXAMPLES_TRUE@@HAVE_PDFTOOLS_TRUE@mom_TESTS = contrib/mom/examples/tests-mom.sh
+
+# For this list of files we add a symlink from $(exampledir)/mom to $(pdfdocdir)
+PDFDOCFILE = mom-pdf.pdf
+pdfmark_srcdir = $(top_srcdir)/contrib/pdfmark
+pdfmark_builddir = $(top_builddir)/contrib/pdfmark
+
+# Files installed in $(tmacdir)
+TMACFILES = \
+  contrib/pdfmark/pdfmark.tmac \
+  contrib/pdfmark/spdf.tmac
+
+pdfmarktmacdir = $(tmacdir)
+dist_pdfmarktmac_DATA = $(TMACFILES)
+
+# Files installed in $(pdfdocdir)
+PDFDOCFILES = \
+  contrib/pdfmark/pdfmark.pdf
+
+@BUILD_PDFDOC_TRUE@pdfmarkpdfdocdir = $(pdfdocdir)
+@BUILD_PDFDOC_TRUE@nodist_pdfmarkpdfdoc_DATA = $(PDFDOCFILES)
+PDFMARK_PFLAG = -dpaper=$(PAGE) -P-p$(PAGE)
+PDFMARK_TFLAG = -M$(pdfmark_srcdir)
+PDFROFF = \
+  GROFF_TMPDIR=. \
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_DIR="$(GROFF_BIN_DIR)" \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  ./pdfroff --keep-temporary-files \
+  $(FFLAG) $(TFLAG) $(PDFMARK_TFLAG) $(PDFMARK_PFLAG)
+
+pic2graph_srcdir = $(top_srcdir)/contrib/pic2graph
+doc_srcdir = $(abs_top_srcdir)/doc
+doc_builddir = $(abs_top_builddir)/doc
+DOC_SED = $(SED) -e "s;[@]VERSION[@];$(VERSION);"
+DOC_GROFF_ONLY = \
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  $(GROFFBIN) -I$(abs_top_builddir) -M $(doc_srcdir) \
+       $(TFLAG) $(FFLAG) -Upet -ww 
+
+DOC_GROFF = $(DOC_SED) $< | $(DOC_GROFF_ONLY)
+
+# Other doc, installed in $(docdir)
+# Files located in the source tree
+@BUILD_OTHERDOC_TRUE@DOCFILES = \
+@BUILD_OTHERDOC_TRUE@  doc/meref.me \
+@BUILD_OTHERDOC_TRUE@  doc/meintro.me \
+@BUILD_OTHERDOC_TRUE@  doc/meintro_fr.me \
+@BUILD_OTHERDOC_TRUE@  doc/pic.ms
+
+# Files generated in the build tree
+@BUILD_OTHERDOC_TRUE@PROCESSEDDOCFILES = \
+@BUILD_OTHERDOC_TRUE@  doc/meref.ps \
+@BUILD_OTHERDOC_TRUE@  doc/meintro.ps \
+@BUILD_OTHERDOC_TRUE@  doc/meintro_fr.ps \
+@BUILD_OTHERDOC_TRUE@  doc/pic.ps
+
+@BUILD_OTHERDOC_TRUE@otherdocdir = $(docdir)
+@BUILD_OTHERDOC_TRUE@dist_otherdoc_DATA = $(DOCFILES)
+@BUILD_OTHERDOC_TRUE@nodist_otherdoc_DATA = $(PROCESSEDDOCFILES)
+@BUILD_PDFDOC_TRUE@docpdfdocdir = $(pdfdocdir)
+@BUILD_PDFDOC_TRUE@nodist_docpdfdoc_DATA = doc/automake.pdf
+
+# GNU PIC html documentation, installed in $(htmldocdir)
+# Other pic*.html files are installed by the local rule
+@BUILD_HTML_TRUE@HTMLDOCFILES = \
+@BUILD_HTML_TRUE@  doc/pic.html
+
+@BUILD_HTML_TRUE@htmlpicdir = $(htmldocdir)
+@BUILD_HTML_TRUE@htmlpic_DATA = $(HTMLDOCFILES)
+@BUILD_HTML_TRUE@HTMLDOCFILESALL = pic*.html
+@BUILD_HTML_TRUE@HTMLDOCIMAGEFILES = pic*
+
+# Examples files, installed in $(exampledir)
+
+# source tree files
+EXAMPLEFILES = \
+  doc/webpage.ms \
+  doc/groff.css \
+  doc/grnexmpl.g \
+  doc/grnexmpl.me
+
+
+# Generated in the build tree
+@BUILD_EXAMPLES_TRUE@PROCESSEDEXAMPLEFILES = \
+@BUILD_EXAMPLES_TRUE@  doc/webpage.ps \
+@BUILD_EXAMPLES_TRUE@  doc/grnexmpl.ps
+
+@BUILD_EXAMPLES_TRUE@docexamplesdir = $(exampledir)
+@BUILD_EXAMPLES_TRUE@dist_docexamples_DATA = $(EXAMPLEFILES)
+@BUILD_EXAMPLES_TRUE@nodist_docexamples_DATA = $(PROCESSEDEXAMPLEFILES)
+
+# webpage.html is generated, webpage*.html files are installed by the local rule.
+@BUILD_HTMLEXAMPLES_TRUE@HTMLEXAMPLEFILES = doc/webpage.html
+@BUILD_HTMLEXAMPLES_TRUE@HTMLEXAMPLEFILESALL = webpage*.html
+@BUILD_HTMLEXAMPLES_TRUE@HTMLEXAMPLEIMAGEFILES = webpage*
+@BUILD_HTMLEXAMPLES_TRUE@htmlexamplesdir = $(exampledir)
+@BUILD_HTMLEXAMPLES_TRUE@nodist_htmlexamples_DATA = $(HTMLEXAMPLEFILES)
+imagedir = img
+htmldocimagedir = $(htmldocdir)/img
+exampleimagedir = $(exampledir)/img
+@BUILD_INFODOC_TRUE@groffinfodir = $(infodir)
+@BUILD_INFODOC_TRUE@groffpdfdir = $(infodir)
+
+# GNU Make has a built-in variable TEXI2DVI but it is not the case of
+# all 'make' implementation.  As it default to 'texi2dvi' we simply
+# redefine it here.
+TEXI2DVI = texi2dvi
+texi2dvi_missing = no
+DEVX100FONTS = \
+  font/devX100/DESC \
+  font/devX100/TR \
+  font/devX100/TI \
+  font/devX100/TB \
+  font/devX100/TBI \
+  font/devX100/CR \
+  font/devX100/CI \
+  font/devX100/CB \
+  font/devX100/CBI \
+  font/devX100/HR \
+  font/devX100/HI \
+  font/devX100/HB \
+  font/devX100/HBI \
+  font/devX100/NR \
+  font/devX100/NI \
+  font/devX100/NB \
+  font/devX100/NBI \
+  font/devX100/S
+
+@WITHOUT_X11_FALSE@devX100fontdir = $(fontdir)/devX100
+@WITHOUT_X11_FALSE@devX100font_DATA = $(DEVX100FONTS)
+DEVX10012FONTS = \
+  font/devX100-12/DESC \
+  font/devX100-12/TR \
+  font/devX100-12/TI \
+  font/devX100-12/TB \
+  font/devX100-12/TBI \
+  font/devX100-12/CR \
+  font/devX100-12/CI \
+  font/devX100-12/CB \
+  font/devX100-12/CBI \
+  font/devX100-12/HR \
+  font/devX100-12/HI \
+  font/devX100-12/HB \
+  font/devX100-12/HBI \
+  font/devX100-12/NR \
+  font/devX100-12/NI \
+  font/devX100-12/NB \
+  font/devX100-12/NBI \
+  font/devX100-12/S
+
+@WITHOUT_X11_FALSE@devX10012fontdir = $(fontdir)/devX100-12
+@WITHOUT_X11_FALSE@devX10012font_DATA = $(DEVX10012FONTS)
+DEVX75FONTS = \
+  font/devX75/DESC \
+  font/devX75/TR \
+  font/devX75/TI \
+  font/devX75/TB \
+  font/devX75/TBI \
+  font/devX75/CR \
+  font/devX75/CI \
+  font/devX75/CB \
+  font/devX75/CBI \
+  font/devX75/HR \
+  font/devX75/HI \
+  font/devX75/HB \
+  font/devX75/HBI \
+  font/devX75/NR \
+  font/devX75/NI \
+  font/devX75/NB \
+  font/devX75/NBI \
+  font/devX75/S
+
+@WITHOUT_X11_FALSE@devX75fontdir = $(fontdir)/devX75
+@WITHOUT_X11_FALSE@devX75font_DATA = $(DEVX75FONTS)
+DEVX7512FONTS = \
+  font/devX75-12/DESC \
+  font/devX75-12/TR \
+  font/devX75-12/TI \
+  font/devX75-12/TB \
+  font/devX75-12/TBI \
+  font/devX75-12/CR \
+  font/devX75-12/CI \
+  font/devX75-12/CB \
+  font/devX75-12/CBI \
+  font/devX75-12/HR \
+  font/devX75-12/HI \
+  font/devX75-12/HB \
+  font/devX75-12/HBI \
+  font/devX75-12/NR \
+  font/devX75-12/NI \
+  font/devX75-12/NB \
+  font/devX75-12/NBI \
+  font/devX75-12/S
+
+@WITHOUT_X11_FALSE@devX7512fontdir = $(fontdir)/devX75-12
+@WITHOUT_X11_FALSE@devX7512font_DATA = $(DEVX7512FONTS)
+devascii_srcdir = $(top_srcdir)/font/devascii
+DEVASCIIFONTS = R I B BI
+DEVASCIIFONTSFILES = \
+  font/devascii/R font/devascii/I font/devascii/B font/devascii/BI
+
+DEVASCIIRES = 240
+DEVASCIICPI = 10
+DEVASCIILPI = 6
+devasciifontdir = $(fontdir)/devascii
+devasciifont_DATA = $(DEVASCIIFONTSFILES) font/devascii/DESC
+devcp1047_srcdir = $(top_srcdir)/font/devcp1047
+DEVCP1047FONTS = R I B BI
+DEVCP1047FONTSFILES = \
+  font/devcp1047/R font/devcp1047/I font/devcp1047/B font/devcp1047/BI
+
+DEVCP1047RES = 240
+DEVCP1047CPI = 10
+DEVCP1047LPI = 6
+devcp1047fontdir = $(fontdir)/devcp1047
+devcp1047font_DATA = $(DEVCP1047FONTSFILES) font/devcp1047/DESC
+devdvi_srcdir = $(top_srcdir)/font/devdvi
+DEVDVIFONTFILES = \
+  font/devdvi/TR \
+  font/devdvi/TI \
+  font/devdvi/TB \
+  font/devdvi/TBI \
+  font/devdvi/CW \
+  font/devdvi/CWI \
+  font/devdvi/HR \
+  font/devdvi/HI \
+  font/devdvi/HB \
+  font/devdvi/HBI \
+  font/devdvi/TREC \
+  font/devdvi/TIEC \
+  font/devdvi/TBEC \
+  font/devdvi/TBIEC \
+  font/devdvi/CWEC \
+  font/devdvi/CWIEC \
+  font/devdvi/HREC \
+  font/devdvi/HIEC \
+  font/devdvi/HBEC \
+  font/devdvi/HBIEC \
+  font/devdvi/TRTC \
+  font/devdvi/TITC \
+  font/devdvi/TBTC \
+  font/devdvi/TBITC \
+  font/devdvi/CWTC \
+  font/devdvi/CWITC \
+  font/devdvi/HRTC \
+  font/devdvi/HITC \
+  font/devdvi/HBTC \
+  font/devdvi/HBITC \
+  font/devdvi/MI \
+  font/devdvi/S \
+  font/devdvi/EX \
+  font/devdvi/SA \
+  font/devdvi/SB \
+  font/devdvi/SC
+
+devdvifontdir = $(fontdir)/devdvi
+devdvifont_DATA = $(DEVDVIFONTFILES) font/devdvi/DESC
+DEVDVIGENFILES = \
+  font/devdvi/generate/Makefile \
+  font/devdvi/generate/msam.map \
+  font/devdvi/generate/msbm.map \
+  font/devdvi/generate/texb.map \
+  font/devdvi/generate/texex.map \
+  font/devdvi/generate/texi.map \
+  font/devdvi/generate/texmi.map \
+  font/devdvi/generate/texr.map \
+  font/devdvi/generate/texsy.map \
+  font/devdvi/generate/textt.map \
+  font/devdvi/generate/textex.map \
+  font/devdvi/generate/ec.map \
+  font/devdvi/generate/tc.map \
+  font/devdvi/generate/CompileFonts
+
+devdvigendir = $(fontdir)/devdvi/generate
+devdvigen_DATA = $(DEVDVIGENFILES)
+devhtml_srcdir = $(top_srcdir)/font/devhtml
+DEVHTMLFONTS = R I B BI CR CI CB CBI S
+DEVHTMLFONTSFILES = \
+  font/devhtml/R \
+  font/devhtml/I \
+  font/devhtml/B \
+  font/devhtml/BI \
+  font/devhtml/CR \
+  font/devhtml/CI \
+  font/devhtml/CB \
+  font/devhtml/CBI \
+  font/devhtml/S
+
+DEVHTMLRES = 240
+DEVHTMLCPI = 10
+DEVHTMLLPI = 6
+devhtmlfontdir = $(fontdir)/devhtml
+devhtmlfont_DATA = $(DEVHTMLFONTSFILES) font/devhtml/DESC
+devlatin1_srcdir = $(top_srcdir)/font/devlatin1
+DEVLATIN1FONTS = R I B BI
+DEVLATIN1FONTSFILES = \
+  font/devlatin1/R font/devlatin1/I font/devlatin1/B font/devlatin1/BI
+
+DEVLATIN1RES = 240
+DEVLATIN1CPI = 10
+DEVLATIN1LPI = 6
+devlatin1fontdir = $(fontdir)/devlatin1
+devlatin1font_DATA = $(DEVLATIN1FONTSFILES) font/devlatin1/DESC
+LBPPRINT = $(PSPRINT)
+devlbp_srcdir = $(top_srcdir)/font/devlbp
+DEVLBPFONTFILES = \
+  font/devlbp/HB \
+  font/devlbp/HBI \
+  font/devlbp/HI \
+  font/devlbp/HR \
+  font/devlbp/HNB \
+  font/devlbp/HNBI \
+  font/devlbp/HNI \
+  font/devlbp/HNR \
+  font/devlbp/TB \
+  font/devlbp/TBI \
+  font/devlbp/TI \
+  font/devlbp/TR \
+  font/devlbp/CR \
+  font/devlbp/CB \
+  font/devlbp/CI \
+  font/devlbp/ER \
+  font/devlbp/EB \
+  font/devlbp/EI
+
+devlbpfontdir = $(fontdir)/devlbp
+devlbpfont_DATA = $(DEVLBPFONTFILES) font/devlbp/DESC
+devlj4_srcdir = $(top_srcdir)/font/devlj4
+LJ4RES = 1200
+LJ4PRINT = $(PSPRINT)
+DEVLJ4FONTFILES = \
+  font/devlj4/AB \
+  font/devlj4/ABI \
+  font/devlj4/AI \
+  font/devlj4/AR \
+  font/devlj4/ALBB \
+  font/devlj4/ALBR \
+  font/devlj4/AOB \
+  font/devlj4/AOI \
+  font/devlj4/AOR \
+  font/devlj4/CB \
+  font/devlj4/CBI \
+  font/devlj4/CI \
+  font/devlj4/CR \
+  font/devlj4/GB \
+  font/devlj4/GBI \
+  font/devlj4/GI \
+  font/devlj4/GR \
+  font/devlj4/LGB \
+  font/devlj4/LGI \
+  font/devlj4/LGR \
+  font/devlj4/OB \
+  font/devlj4/OBI \
+  font/devlj4/OI \
+  font/devlj4/OR \
+  font/devlj4/TB \
+  font/devlj4/TBI \
+  font/devlj4/TI \
+  font/devlj4/TR \
+  font/devlj4/TNRB \
+  font/devlj4/TNRBI \
+  font/devlj4/TNRI \
+  font/devlj4/TNRR \
+  font/devlj4/UB \
+  font/devlj4/UBI \
+  font/devlj4/UI \
+  font/devlj4/UR \
+  font/devlj4/UCB \
+  font/devlj4/UCBI \
+  font/devlj4/UCI \
+  font/devlj4/UCR \
+  font/devlj4/CLARENDON \
+  font/devlj4/CORONET \
+  font/devlj4/MARIGOLD \
+  font/devlj4/S \
+  font/devlj4/SYMBOL \
+  font/devlj4/WINGDINGS
+
+devlj4fontdir = $(fontdir)/devlj4
+dist_devlj4font_DATA = $(DEVLJ4FONTFILES)
+nodist_devlj4font_DATA = font/devlj4/DESC
+DEVLJ4GENFILES = \
+  font/devlj4/generate/Makefile \
+  font/devlj4/generate/special.map \
+  font/devlj4/generate/symbol.map \
+  font/devlj4/generate/text.map \
+  font/devlj4/generate/wingdings.map \
+  font/devlj4/generate/special.awk
+
+devlj4fontgendir = $(devlj4fontdir)/generate
+dist_devlj4fontgen_DATA = $(DEVLJ4GENFILES)
+devpdf_srcdir = $(top_srcdir)/font/devpdf
+GROFF_FONT_FILES = `cd $(top_builddir)/font/devpdf \
+  && grep -ls internalname [A-CEG-Z]*`
+
+ENC_FILES = `cd $(top_builddir)/font/devpdf; ls enc/*`
+MAP_FILES = `cd $(top_builddir)/font/devpdf; ls map/*`
+devpdffontdir = $(fontdir)/devpdf
+devpdffont_DATA = \
+  font/devpdf/DESC \
+  font/devpdf/Foundry
+
+devpdffontencdir = $(devpdffontdir)/enc
+devpdffontenc_DATA = font/devpdf/enc/text.enc
+devpdffontmapdir = $(devpdffontdir)/map
+DEVPDFFONTMAP_1 = \
+  font/devpdf/map/dingbats.map \
+  font/devpdf/map/symbolchars \
+  font/devpdf/map/textmap
+
+DEVPDFFONTMAP_2 = font/devpdf/map/symbolmap
+devpdffontmap_DATA = $(DEVPDFFONTMAP_1) $(DEVPDFFONTMAP_2)
+devps_srcdir = $(top_srcdir)/font/devps
+devps_builddir = $(top_builddir)/font/devps
+DEVPSFONTFILES = \
+  font/devps/S \
+  font/devps/SS \
+  font/devps/ZD \
+  font/devps/ZDR \
+  font/devps/ZCMI \
+  font/devps/AB \
+  font/devps/ABI \
+  font/devps/AI \
+  font/devps/AR \
+  font/devps/BMB \
+  font/devps/BMBI \
+  font/devps/BMI \
+  font/devps/BMR \
+  font/devps/CB \
+  font/devps/CBI \
+  font/devps/CI \
+  font/devps/CR \
+  font/devps/HB \
+  font/devps/HBI \
+  font/devps/HI \
+  font/devps/HR \
+  font/devps/HNB \
+  font/devps/HNBI \
+  font/devps/HNI \
+  font/devps/HNR \
+  font/devps/NB \
+  font/devps/NBI \
+  font/devps/NI \
+  font/devps/NR \
+  font/devps/PB \
+  font/devps/PBI \
+  font/devps/PI \
+  font/devps/PR \
+  font/devps/TB \
+  font/devps/TBI \
+  font/devps/TI \
+  font/devps/TR \
+  font/devps/EURO \
+  font/devps/freeeuro.pfa \
+  font/devps/freeeuro.afm \
+  font/devps/text.enc \
+  font/devps/download
+
+DEVPSFONTFILES_GENERATED = \
+  font/devps/DESC \
+  font/devps/prologue \
+  font/devps/zapfdr.pfa \
+  font/devps/symbolsl.pfa
+
+devpsfontdir = $(fontdir)/devps
+dist_devpsfont_DATA = $(DEVPSFONTFILES) 
+nodist_devpsfont_DATA = $(DEVPSFONTFILES_GENERATED)
+
+# these files will be installed in oldfontdir
+OLDDEVPSFONTFILES = \
+  font/devps/old/S \
+  font/devps/old/SS \
+  font/devps/old/CB \
+  font/devps/old/CBI \
+  font/devps/old/CI \
+  font/devps/old/CR \
+  font/devps/old/HB \
+  font/devps/old/HBI \
+  font/devps/old/HI \
+  font/devps/old/HR \
+  font/devps/old/HNB \
+  font/devps/old/HNBI \
+  font/devps/old/HNI \
+  font/devps/old/HNR \
+  font/devps/old/NB \
+  font/devps/old/NBI \
+  font/devps/old/NI \
+  font/devps/old/NR \
+  font/devps/old/PB \
+  font/devps/old/PBI \
+  font/devps/old/PI \
+  font/devps/old/PR \
+  font/devps/old/TB \
+  font/devps/old/TBI \
+  font/devps/old/TI \
+  font/devps/old/TR \
+  font/devps/old/symbol.afm \
+  font/devps/old/symbolsl.afm \
+  font/devps/old/zapfdr.afm \
+  font/devps/old/zapfdr.ps
+
+olddevpsfontdir = $(oldfontdir)/devps
+dist_olddevpsfont_DATA = $(OLDDEVPSFONTFILES)
+
+# Files installed in $(devfontdir)/generate
+DEVPSGENFILES = \
+  font/devps/generate/Makefile \
+  font/devps/generate/dingbats.map \
+  font/devps/generate/dingbats.rmap \
+  font/devps/generate/lgreekmap \
+  font/devps/generate/symbolchars \
+  font/devps/generate/symbolsl.afm \
+  font/devps/generate/textmap
+
+DEVPSGENSCRIPTS = \
+  font/devps/generate/afmname \
+  font/devps/generate/symbol.sed
+
+devpsgendir = $(devpsfontdir)/generate
+dist_devpsgen_DATA = $(DEVPSGENFILES) $(DEVPSGENSCRIPTS)
+devutf8_srcdir = $(top_srcdir)/font/devutf8
+DEVUTF8FONTS = R I B BI
+DEVUTF8FONTSFILES = \
+  font/devutf8/R font/devutf8/I font/devutf8/B font/devutf8/BI
+
+DEVUTF8RES = 240
+DEVUTF8CPI = 10
+DEVUTF8LPI = 6
+devutf8fontdir = $(fontdir)/devutf8
+devutf8font_DATA = $(DEVUTF8FONTSFILES) font/devutf8/DESC
+
+# Scripts for font files generation
+GENFONTSSH = $(top_srcdir)/font/scripts/genfonts.sh
+GENDESCSH = $(top_srcdir)/font/scripts/gendesc.sh
+nodist_noinst_HEADERS = defs.h
+libbib_a_SOURCES = \
+  src/libs/libbib/common.cpp \
+  src/libs/libbib/index.cpp \
+  src/libs/libbib/linear.cpp \
+  src/libs/libbib/search.cpp \
+  src/libs/libbib/map.c
+
+libdriver_a_SOURCES = \
+  src/libs/libdriver/input.cpp \
+  src/libs/libdriver/printer.cpp
+
+libgroff_srcdir = $(top_srcdir)/src/libs/libgroff
+libgroff_a_CPPFLAGS = \
+  $(AM_CPPFLAGS) \
+  -D__GETOPT_PREFIX=groff_ \
+  -DENABLE_RELOCATABLE=1 \
+  -DLIBDIR=\"$(libdir)\"
+
+
+# Build from OBJS
+libgroff_a_SOURCES = \
+  src/libs/libgroff/assert.cpp \
+  src/libs/libgroff/change_lf.cpp \
+  src/libs/libgroff/cmap.cpp \
+  src/libs/libgroff/color.cpp \
+  src/libs/libgroff/cset.cpp\
+  src/libs/libgroff/curtime.cpp \
+  src/libs/libgroff/device.cpp \
+  src/libs/libgroff/errarg.cpp \
+  src/libs/libgroff/error.cpp \
+  src/libs/libgroff/fatal.cpp \
+  src/libs/libgroff/filename.cpp \
+  src/libs/libgroff/font.cpp \
+  src/libs/libgroff/fontfile.cpp \
+  src/libs/libgroff/geometry.cpp \
+  src/libs/libgroff/getopt.c \
+  src/libs/libgroff/getopt1.c \
+  src/libs/libgroff/glyphuni.cpp \
+  src/libs/libgroff/htmlhint.cpp \
+  src/libs/libgroff/hypot.cpp \
+  src/libs/libgroff/iftoa.c \
+  src/libs/libgroff/invalid.cpp \
+  src/libs/libgroff/itoa.c \
+  src/libs/libgroff/lf.cpp \
+  src/libs/libgroff/lineno.cpp \
+  src/libs/libgroff/localcharset.c \
+  src/libs/libgroff/macropath.cpp \
+  src/libs/libgroff/matherr.c \
+  src/libs/libgroff/maxfilename.cpp \
+  src/libs/libgroff/maxpathname.cpp \
+  src/libs/libgroff/mksdir.cpp \
+  src/libs/libgroff/nametoindex.cpp \
+  src/libs/libgroff/new.cpp \
+  src/libs/libgroff/paper.cpp \
+  src/libs/libgroff/prime.cpp \
+  src/libs/libgroff/progname.c \
+  src/libs/libgroff/ptable.cpp \
+  src/libs/libgroff/quotearg.c \
+  src/libs/libgroff/relocate.cpp \
+  src/libs/libgroff/searchpath.cpp \
+  src/libs/libgroff/spawnvp.c \
+  src/libs/libgroff/string.cpp \
+  src/libs/libgroff/strsave.cpp \
+  src/libs/libgroff/symbol.cpp \
+  src/libs/libgroff/tmpfile.cpp \
+  src/libs/libgroff/tmpname.cpp \
+  src/libs/libgroff/unicode.cpp \
+  src/libs/libgroff/uniglyph.cpp \
+  src/libs/libgroff/uniuni.cpp \
+  src/libs/libgroff/relocatable.h
+
+nodist_libgroff_a_SOURCES = src/libs/libgroff/version.cpp
+
+# Data for localcharset.c.  Taken from libiconv/libcharset.
+LIBGROFF_PACKAGE = groff
+@WITHOUT_X11_FALSE@libxutil_a_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS)
+@WITHOUT_X11_FALSE@libxutil_a_SOURCES = \
+@WITHOUT_X11_FALSE@  src/libs/libxutil/DviChar.c \
+@WITHOUT_X11_FALSE@  src/libs/libxutil/XFontName.c \
+@WITHOUT_X11_FALSE@  src/libs/libxutil/xmalloc.c
+
+grodvi_SOURCES = src/devices/grodvi/dvi.cpp
+grodvi_LDADD = \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a $(LIBM)
+
+post_grohtml_SOURCES = \
+  src/devices/grohtml/post-html.cpp \
+  src/devices/grohtml/html-table.cpp \
+  src/devices/grohtml/html-text.cpp \
+  src/devices/grohtml/output.cpp \
+  src/devices/grohtml/html.h \
+  src/devices/grohtml/html-text.h \
+  src/devices/grohtml/html-table.h
+
+post_grohtml_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a 
+
+grolbp_SOURCES = \
+  src/devices/grolbp/lbp.cpp \
+  src/devices/grolbp/lbp.h \
+  src/devices/grolbp/charset.h
+
+grolbp_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+
+grolj4_SOURCES = src/devices/grolj4/lj4.cpp
+grolj4_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+
+gropdf_dir = $(top_srcdir)/src/devices/gropdf
+grops_SOURCES = \
+  src/devices/grops/ps.cpp \
+  src/devices/grops/psrm.cpp \
+  src/devices/grops/ps.h
+
+grops_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+
+grotty_SOURCES = src/devices/grotty/tty.cpp
+grotty_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+
+GXDITVIEWSOURCES = \
+  src/devices/xditview/device.c \
+  src/devices/xditview/draw.c \
+  src/devices/xditview/draw.h \
+  src/devices/xditview/Dvi.c \
+  src/devices/xditview/font.c \
+  src/devices/xditview/font.h \
+  src/devices/xditview/lex.c \
+  src/devices/xditview/lex.h \
+  src/devices/xditview/page.c \
+  src/devices/xditview/page.h \
+  src/devices/xditview/parse.c \
+  src/devices/xditview/parse.h \
+  src/devices/xditview/xditview.c \
+  src/devices/xditview/device.h \
+  src/devices/xditview/DviP.h \
+  src/devices/xditview/Menu.h \
+  src/devices/xditview/Dvi.h
+
+@WITHOUT_X11_FALSE@xditview_srcdir = $(top_srcdir)/src/devices/xditview
+@WITHOUT_X11_FALSE@gxditview_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) -Dlint \
+@WITHOUT_X11_FALSE@  -I$(top_builddir)/src/devices/xditview
+
+@WITHOUT_X11_FALSE@gxditview_LDADD = $(X_LIBS) $(X_PRE_LIBS) -lXaw -lXmu -lXt -lX11 \
+@WITHOUT_X11_FALSE@  $(X_EXTRA_LIBS) $(LIBM) libxutil.a lib/libgnu.a
+
+@WITHOUT_X11_FALSE@XDITVIEW_GENHDRS = src/devices/xditview/GXditview-ad.h
+@WITHOUT_X11_FALSE@gxditview_SOURCES = $(GXDITVIEWSOURCES)
+@WITHOUT_X11_FALSE@nodist_gxditview_SOURCES = $(XDITVIEW_GENHDRS)
+eqn_CPPFLAGS = \
+  $(AM_CPPFLAGS) \
+  -I $(top_srcdir)/src/preproc/eqn \
+  -I $(top_builddir)/src/preproc/eqn
+
+eqn_LDADD = $(LIBM) libgroff.a lib/libgnu.a
+eqn_SOURCES = \
+  src/preproc/eqn/main.cpp \
+  src/preproc/eqn/lex.cpp \
+  src/preproc/eqn/box.cpp \
+  src/preproc/eqn/limit.cpp \
+  src/preproc/eqn/list.cpp \
+  src/preproc/eqn/over.cpp \
+  src/preproc/eqn/text.cpp \
+  src/preproc/eqn/script.cpp \
+  src/preproc/eqn/mark.cpp \
+  src/preproc/eqn/other.cpp \
+  src/preproc/eqn/delim.cpp \
+  src/preproc/eqn/sqrt.cpp \
+  src/preproc/eqn/pile.cpp \
+  src/preproc/eqn/special.cpp \
+  src/preproc/eqn/eqn.ypp \
+  src/preproc/eqn/box.h \
+  src/preproc/eqn/pbox.h \
+  src/preproc/eqn/eqn.h
+
+grn_SOURCES = \
+  src/preproc/grn/hdb.cpp \
+  src/preproc/grn/hpoint.cpp \
+  src/preproc/grn/hgraph.cpp \
+  src/preproc/grn/main.cpp \
+  src/preproc/grn/gprint.h
+
+grn_LDADD = libgroff.a lib/libgnu.a $(LIBM)
+pre_grohtml_LDADD = libgroff.a lib/libgnu.a $(LIBM)
+pre_grohtml_SOURCES = \
+  src/preproc/html/pre-html.cpp \
+  src/preproc/html/pushback.cpp \
+  src/preproc/html/pre-html.h \
+  src/preproc/html/pushback.h
+
+pic_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+pic_SOURCES = \
+  src/preproc/pic/pic.ypp \
+  src/preproc/pic/lex.cpp \
+  src/preproc/pic/main.cpp \
+  src/preproc/pic/object.cpp \
+  src/preproc/pic/common.cpp \
+  src/preproc/pic/troff.cpp \
+  src/preproc/pic/tex.cpp \
+  src/preproc/pic/pic.h \
+  src/preproc/pic/position.h \
+  src/preproc/pic/text.h \
+  src/preproc/pic/common.h \
+  src/preproc/pic/output.h \
+  src/preproc/pic/object.h
+
+pic_CPPFLAGS = $(AM_CPPFLAGS) \
+  -I $(top_srcdir)/src/preproc/pic \
+  -I $(top_builddir)/src/preproc/pic
+
+preconv_LDADD = libgroff.a $(LIBM) $(LIBICONV) $(UCHARDET_LIBS) lib/libgnu.a
+preconv_SOURCES = src/preproc/preconv/preconv.cpp
+preconv_CPPFLAGS = $(AM_CPPFLAGS) $(UCHARDET_CFLAGS)
+refer_CPPFLAGS = $(AM_CPPFLAGS) -I $(top_srcdir)/src/preproc/refer
+refer_LDADD = libbib.a libgroff.a $(LIBM) lib/libgnu.a
+refer_SOURCES = \
+  src/preproc/refer/command.cpp \
+  src/preproc/refer/ref.cpp \
+  src/preproc/refer/refer.cpp \
+  src/preproc/refer/token.cpp \
+  src/preproc/refer/label.ypp \
+  src/preproc/refer/refer.h \
+  src/preproc/refer/ref.h \
+  src/preproc/refer/token.h \
+  src/preproc/refer/command.h
+
+soelim_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+soelim_SOURCES = src/preproc/soelim/soelim.cpp
+tbl_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+tbl_SOURCES = \
+  src/preproc/tbl/main.cpp \
+  src/preproc/tbl/table.cpp \
+  src/preproc/tbl/table.h
+
+groff_LDADD = \
+  libgroff.a \
+  lib/libgnu.a \
+  $(LIBM)
+
+groff_SOURCES = \
+  src/roff/groff/groff.cpp \
+  src/roff/groff/pipeline.c \
+  src/roff/groff/pipeline.h
+
+GROFF_OPTS_OUTPUT = \
+  groff_opts_no_arg.txt \
+  groff_opts_with_arg.txt
+
+groffoptsdir = $(libprogramdir)
+groffopts_DATA = $(GROFF_OPTS_OUTPUT)
+grog_srcdir = $(top_srcdir)/src/roff/grog
+GROG = src/roff/grog/subs.pl
+
+# grog_dir is defined by a m4 macro
+grogdir = $(grog_dir)
+dist_grog_DATA = $(GROG)
+nroff_srcdir = $(top_srcdir)/src/roff/nroff
+troff_LDADD = libgroff.a lib/libgnu.a $(LIBM)
+troff_SOURCES = \
+  src/roff/troff/dictionary.cpp \
+  src/roff/troff/div.cpp \
+  src/roff/troff/env.cpp \
+  src/roff/troff/input.cpp \
+  src/roff/troff/mtsm.cpp \
+  src/roff/troff/node.cpp \
+  src/roff/troff/number.cpp \
+  src/roff/troff/reg.cpp \
+  src/roff/troff/env.h \
+  src/roff/troff/node.h \
+  src/roff/troff/troff.h \
+  src/roff/troff/div.h \
+  src/roff/troff/reg.h \
+  src/roff/troff/dictionary.h \
+  src/roff/troff/input.h \
+  src/roff/troff/mtsm.h \
+  src/roff/troff/token.h \
+  src/roff/troff/charinfo.h \
+  src/roff/troff/request.h \
+  src/roff/troff/hvunits.h
+
+nodist_troff_SOURCES = src/roff/troff/majorminor.cpp
+addftinfo_LDADD = libgroff.a lib/libgnu.a
+addftinfo_SOURCES = \
+  src/utils/addftinfo/addftinfo.cpp \
+  src/utils/addftinfo/guess.cpp \
+  src/utils/addftinfo/guess.h
+
+afmtodit_srcdir = $(top_srcdir)/src/utils/afmtodit
+hpftodit_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+hpftodit_SOURCES = \
+  src/utils/hpftodit/hpftodit.cpp \
+  src/utils/hpftodit/hpuni.cpp
+
+indxbib_srcdir = $(top_srcdir)/src/utils/indxbib
+indxbib_SOURCES = \
+  src/utils/indxbib/indxbib.cpp \
+  src/utils/indxbib/signal.c
+
+indxbib_LDADD = libbib.a libgroff.a $(LIBM) lib/libgnu.a
+lkbib_LDADD = libbib.a libgroff.a $(LIBM) lib/libgnu.a
+lkbib_SOURCES = src/utils/lkbib/lkbib.cpp
+lookbib_LDADD = libbib.a libgroff.a $(LIBM) lib/libgnu.a
+lookbib_SOURCES = src/utils/lookbib/lookbib.cpp
+pfbtops_SOURCES = src/utils/pfbtops/pfbtops.c
+pfbtops_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+# We use the following trick to force the use of C++ compiler
+# See the Automake manual, "Libtool Convenience Libraries"
+nodist_EXTRA_pfbtops_SOURCES = src/utils/pfbtops/dummy.cpp
+tfmtodit_SOURCES = src/utils/tfmtodit/tfmtodit.cpp
+tfmtodit_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+@WITHOUT_X11_FALSE@xtotroff_SOURCES = src/utils/xtotroff/xtotroff.c
+@WITHOUT_X11_FALSE@XLIBS = $(LIBXUTIL) $(LIBGROFF)
+@WITHOUT_X11_FALSE@xtotroff_LDADD = libxutil.a libgroff.a $(X_LIBS) $(X_PRE_LIBS) \
+@WITHOUT_X11_FALSE@  -lXaw -lXt -lX11 $(X_EXTRA_LIBS) $(LIBM) lib/libgnu.a
+
+@WITHOUT_X11_FALSE@xtotroff_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS)
+
+# Copyright (C) 1989-2018 Free Software Foundation, Inc.
+#      Written by James Clark (jjc@jclark.com)
+#      Automake migration by Bertrand Garrigues
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or (at your
+# option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+tmac_srcdir = $(top_srcdir)/tmac
+tmac_builddir = $(top_builddir)/tmac
+TMACNORMALFILES = \
+  tmac/man.tmac \
+  tmac/mandoc.tmac \
+  tmac/andoc.tmac \
+  tmac/an-old.tmac \
+  tmac/an-ext.tmac \
+  tmac/ms.tmac \
+  tmac/me.tmac \
+  tmac/mdoc.tmac \
+  tmac/pic.tmac \
+  tmac/a4.tmac \
+  tmac/papersize.tmac \
+  tmac/62bit.tmac \
+  tmac/ec.tmac \
+  tmac/safer.tmac \
+  tmac/trace.tmac \
+  tmac/ps.tmac \
+  tmac/psold.tmac \
+  tmac/pdfpic.tmac \
+  tmac/pspic.tmac \
+  tmac/psatk.tmac \
+  tmac/pdf.tmac \
+  tmac/dvi.tmac \
+  tmac/tty.tmac \
+  tmac/tty-char.tmac \
+  tmac/latin1.tmac \
+  tmac/latin2.tmac \
+  tmac/latin5.tmac \
+  tmac/latin9.tmac \
+  tmac/cp1047.tmac \
+  tmac/unicode.tmac \
+  tmac/X.tmac \
+  tmac/Xps.tmac \
+  tmac/lj4.tmac \
+  tmac/lbp.tmac \
+  tmac/html.tmac \
+  tmac/html-end.tmac \
+  tmac/devtag.tmac \
+  tmac/europs.tmac \
+  tmac/composite.tmac \
+  tmac/fallbacks.tmac \
+  tmac/eqnrc \
+  tmac/refer.tmac \
+  tmac/refer-me.tmac \
+  tmac/refer-ms.tmac \
+  tmac/troffrc \
+  tmac/troffrc-end \
+  tmac/trans.tmac \
+  tmac/hyphen.us \
+  tmac/hyphenex.us \
+  tmac/fr.tmac \
+  tmac/hyphen.fr \
+  tmac/sv.tmac \
+  tmac/hyphen.sv \
+  tmac/de.tmac \
+  tmac/den.tmac \
+  tmac/hyphen.det \
+  tmac/hyphen.den \
+  tmac/cs.tmac \
+  tmac/hyphen.cs \
+  tmac/hyphenex.cs \
+  tmac/ja.tmac \
+  tmac/zh.tmac
+
+NORMALFILES = `echo $(TMACNORMALFILES) | sed -e "s|tmac/||g"`
+
+# TMACSTRIPFILES are built from their unstripped version (-u)
+TMACSTRIPFILES = tmac/e.tmac tmac/doc.tmac tmac/doc-old.tmac
+
+# Files installed in tmacdir
+dist_tmac_DATA = $(TMACNORMALFILES) tmac/an.tmac tmac/s.tmac
+nodist_tmac_DATA = $(TMACSTRIPFILES) tmac/www.tmac
+TMACMDOCFILES = \
+  tmac/doc-common \
+  tmac/doc-ditroff \
+  tmac/doc-nroff \
+  tmac/doc-syms
+
+MDOCFILES = `echo $(TMACMDOCFILES) | sed -e "s|tmac/||g"`
+mdocdir = $(tmacdir)/mdoc
+# Files installed in mdocdir
+nodist_mdoc_DATA = $(TMACMDOCFILES)
+
+# Installed in localtmacdir
+dist_localtmac_DATA = tmac/man.local tmac/mdoc.local
+
+# Suffix rule to build .1, .5 and .7 files from .1.man, .5.man and
+# .7.man files.  The brackets around the @ are used to prevent the
+# substitution of the variable by automake.
+#
+# The sed script transforms - to \-, ~ to \(ti, and so forth, (with an
+# extra layer of backslashes--see below) so that Makefile variables
+# containing ASCII characters that do not represent themselves literally
+# in *roff (see groff_char(7)) are correctly interpolated into man page
+# text.
+#
+# Note that while the script, combined with this target, will transform
+# ` to \(ga, including grave accents in Makefile variables is likely to
+# fail when the shell lexes the argument to echo within the old-style
+# command substitution `` below.  Testing shows that grave accents
+# should work* if POSIX-style command substitution $() is done instead.
+# However, $() is less portable.  (Triple-escaping grave accents \\\`
+# inside the interpolated Makefile variable will work, but is not
+# attempted here.)
+#
+# Note also that the amount of backslash-escaping in the sed script is
+# excessive (and incorrect) for normal purposes, but required here
+# because a command substitution is being nested inside yet another
+# invocation of sed.
+#
+# * For this target; no assurances about the good behavior of unusual
+#   characters in Makefile variables in other aspects of the groff build
+#   are offered.
+makevarescape = $(top_srcdir)/makevarescape.sed
+all: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) all-am
+
+.SUFFIXES:
+.SUFFIXES: .roff .in .ps .mom .pdf .me .ms .ps .html .txt .texi .dvi .pdf .xhtml .man .c .cpp .log .o .obj .test .test$(EXEEXT) .trs .ypp
+am--refresh: Makefile
+       @:
+$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am $(top_srcdir)/lib/gnulib.mk $(top_srcdir)/arch/mingw/mingw.am $(top_srcdir)/arch/misc/misc.am $(top_srcdir)/contrib/chem/chem.am $(top_srcdir)/contrib/eqn2graph/eqn2graph.am $(top_srcdir)/contrib/gdiffmk/gdiffmk.am $(top_srcdir)/contrib/glilypond/glilypond.am $(top_srcdir)/contrib/gperl/gperl.am $(top_srcdir)/contrib/gpinyin/gpinyin.am $(top_srcdir)/contrib/grap2graph/grap2graph.am $(top_srcdir)/contrib/groff_filenames/groff_filenames.am $(top_srcdir)/contrib/groffer/groffer.am $(top_srcdir)/contrib/hdtbl/hdtbl.am $(top_srcdir)/contrib/mm/mm.am $(top_srcdir)/contrib/mom/mom.am $(top_srcdir)/contrib/pdfmark/pdfmark.am $(top_srcdir)/contrib/pic2graph/pic2graph.am $(top_srcdir)/doc/doc.am $(top_srcdir)/font/devX100/devX100.am $(top_srcdir)/font/devX100-12/devX100-12.am $(top_srcdir)/font/devX75/devX75.am $(top_srcdir)/font/devX75-12/devX75-12.am $(top_srcdir)/font/devascii/devascii.am $(top_srcdir)/font/devcp1047/devcp1047.am $(top_srcdir)/font/devdvi/devdvi.am $(top_srcdir)/font/devhtml/devhtml.am $(top_srcdir)/font/devlatin1/devlatin1.am $(top_srcdir)/font/devlbp/devlbp.am $(top_srcdir)/font/devlj4/devlj4.am $(top_srcdir)/font/devpdf/devpdf.am $(top_srcdir)/font/devps/devps.am $(top_srcdir)/font/devutf8/devutf8.am $(top_srcdir)/font/scripts/scripts.am $(top_srcdir)/man/man.am $(top_srcdir)/src/include/include.am $(top_srcdir)/src/libs/libbib/libbib.am $(top_srcdir)/src/libs/libdriver/libdriver.am $(top_srcdir)/src/libs/libgroff/libgroff.am $(top_srcdir)/src/libs/libxutil/libxutil.am $(top_srcdir)/src/devices/grodvi/grodvi.am $(top_srcdir)/src/devices/grohtml/grohtml.am $(top_srcdir)/src/devices/grolbp/grolbp.am $(top_srcdir)/src/devices/grolj4/grolj4.am $(top_srcdir)/src/devices/gropdf/gropdf.am $(top_srcdir)/src/devices/grops/grops.am $(top_srcdir)/src/devices/grotty/grotty.am $(top_srcdir)/src/devices/xditview/xditview.am $(top_srcdir)/src/preproc/eqn/eqn.am $(top_srcdir)/src/preproc/grn/grn.am $(top_srcdir)/src/preproc/html/html.am $(top_srcdir)/src/preproc/pic/pic.am $(top_srcdir)/src/preproc/preconv/preconv.am $(top_srcdir)/src/preproc/refer/refer.am $(top_srcdir)/src/preproc/soelim/soelim.am $(top_srcdir)/src/preproc/tbl/tbl.am $(top_srcdir)/src/roff/groff/groff.am $(top_srcdir)/src/roff/grog/grog.am $(top_srcdir)/src/roff/nroff/nroff.am $(top_srcdir)/src/roff/troff/troff.am $(top_srcdir)/src/utils/addftinfo/addftinfo.am $(top_srcdir)/src/utils/afmtodit/afmtodit.am $(top_srcdir)/src/utils/hpftodit/hpftodit.am $(top_srcdir)/src/utils/indxbib/indxbib.am $(top_srcdir)/src/utils/lkbib/lkbib.am $(top_srcdir)/src/utils/lookbib/lookbib.am $(top_srcdir)/src/utils/pfbtops/pfbtops.am $(top_srcdir)/src/utils/tfmtodit/tfmtodit.am $(top_srcdir)/src/utils/xtotroff/xtotroff.am $(top_srcdir)/tmac/tmac.am $(am__configure_deps)
+       @for dep in $?; do \
+         case '$(am__configure_deps)' in \
+           *$$dep*) \
+             echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \
+             $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \
+               && exit 0; \
+             exit 1;; \
+         esac; \
+       done; \
+       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \
+       $(am__cd) $(top_srcdir) && \
+         $(AUTOMAKE) --gnu Makefile
+Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
+       @case '$?' in \
+         *config.status*) \
+           echo ' $(SHELL) ./config.status'; \
+           $(SHELL) ./config.status;; \
+         *) \
+           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \
+           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \
+       esac;
+$(top_srcdir)/lib/gnulib.mk $(top_srcdir)/arch/mingw/mingw.am $(top_srcdir)/arch/misc/misc.am $(top_srcdir)/contrib/chem/chem.am $(top_srcdir)/contrib/eqn2graph/eqn2graph.am $(top_srcdir)/contrib/gdiffmk/gdiffmk.am $(top_srcdir)/contrib/glilypond/glilypond.am $(top_srcdir)/contrib/gperl/gperl.am $(top_srcdir)/contrib/gpinyin/gpinyin.am $(top_srcdir)/contrib/grap2graph/grap2graph.am $(top_srcdir)/contrib/groff_filenames/groff_filenames.am $(top_srcdir)/contrib/groffer/groffer.am $(top_srcdir)/contrib/hdtbl/hdtbl.am $(top_srcdir)/contrib/mm/mm.am $(top_srcdir)/contrib/mom/mom.am $(top_srcdir)/contrib/pdfmark/pdfmark.am $(top_srcdir)/contrib/pic2graph/pic2graph.am $(top_srcdir)/doc/doc.am $(top_srcdir)/font/devX100/devX100.am $(top_srcdir)/font/devX100-12/devX100-12.am $(top_srcdir)/font/devX75/devX75.am $(top_srcdir)/font/devX75-12/devX75-12.am $(top_srcdir)/font/devascii/devascii.am $(top_srcdir)/font/devcp1047/devcp1047.am $(top_srcdir)/font/devdvi/devdvi.am $(top_srcdir)/font/devhtml/devhtml.am $(top_srcdir)/font/devlatin1/devlatin1.am $(top_srcdir)/font/devlbp/devlbp.am $(top_srcdir)/font/devlj4/devlj4.am $(top_srcdir)/font/devpdf/devpdf.am $(top_srcdir)/font/devps/devps.am $(top_srcdir)/font/devutf8/devutf8.am $(top_srcdir)/font/scripts/scripts.am $(top_srcdir)/man/man.am $(top_srcdir)/src/include/include.am $(top_srcdir)/src/libs/libbib/libbib.am $(top_srcdir)/src/libs/libdriver/libdriver.am $(top_srcdir)/src/libs/libgroff/libgroff.am $(top_srcdir)/src/libs/libxutil/libxutil.am $(top_srcdir)/src/devices/grodvi/grodvi.am $(top_srcdir)/src/devices/grohtml/grohtml.am $(top_srcdir)/src/devices/grolbp/grolbp.am $(top_srcdir)/src/devices/grolj4/grolj4.am $(top_srcdir)/src/devices/gropdf/gropdf.am $(top_srcdir)/src/devices/grops/grops.am $(top_srcdir)/src/devices/grotty/grotty.am $(top_srcdir)/src/devices/xditview/xditview.am $(top_srcdir)/src/preproc/eqn/eqn.am $(top_srcdir)/src/preproc/grn/grn.am $(top_srcdir)/src/preproc/html/html.am $(top_srcdir)/src/preproc/pic/pic.am $(top_srcdir)/src/preproc/preconv/preconv.am $(top_srcdir)/src/preproc/refer/refer.am $(top_srcdir)/src/preproc/soelim/soelim.am $(top_srcdir)/src/preproc/tbl/tbl.am $(top_srcdir)/src/roff/groff/groff.am $(top_srcdir)/src/roff/grog/grog.am $(top_srcdir)/src/roff/nroff/nroff.am $(top_srcdir)/src/roff/troff/troff.am $(top_srcdir)/src/utils/addftinfo/addftinfo.am $(top_srcdir)/src/utils/afmtodit/afmtodit.am $(top_srcdir)/src/utils/hpftodit/hpftodit.am $(top_srcdir)/src/utils/indxbib/indxbib.am $(top_srcdir)/src/utils/lkbib/lkbib.am $(top_srcdir)/src/utils/lookbib/lookbib.am $(top_srcdir)/src/utils/pfbtops/pfbtops.am $(top_srcdir)/src/utils/tfmtodit/tfmtodit.am $(top_srcdir)/src/utils/xtotroff/xtotroff.am $(top_srcdir)/tmac/tmac.am $(am__empty):
+
+$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
+       $(SHELL) ./config.status --recheck
+
+$(top_srcdir)/configure:  $(am__configure_deps)
+       $(am__cd) $(srcdir) && $(AUTOCONF)
+$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
+       $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
+$(am__aclocal_m4_deps):
+
+src/include/config.h: src/include/stamp-h1
+       @test -f $@ || rm -f src/include/stamp-h1
+       @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) src/include/stamp-h1
+
+src/include/stamp-h1: $(top_srcdir)/src/include/config.hin $(top_builddir)/config.status
+       @rm -f src/include/stamp-h1
+       cd $(top_builddir) && $(SHELL) ./config.status src/include/config.h
+$(top_srcdir)/src/include/config.hin:  $(am__configure_deps) 
+       ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
+       rm -f src/include/stamp-h1
+       touch $@
+
+distclean-hdr:
+       -rm -f src/include/config.h src/include/stamp-h1
+test-groff: $(top_builddir)/config.status $(srcdir)/test-groff.in
+       cd $(top_builddir) && $(SHELL) ./config.status $@
+install-binPROGRAMS: $(bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p \
+         ; then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' \
+           -e 's|.*|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+             echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+             $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+           } \
+       ; done
+
+uninstall-binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' \
+       `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-binPROGRAMS:
+       -test -z "$(bin_PROGRAMS)" || rm -f $(bin_PROGRAMS)
+
+clean-checkPROGRAMS:
+       -test -z "$(check_PROGRAMS)" || rm -f $(check_PROGRAMS)
+install-nobase_binPROGRAMS: $(nobase_bin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       @list='$(nobase_bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p \
+         ; then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' \
+           -e 's|[^/]*$$||; s|^$$|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+         case $$type in \
+         d) echo " $(MKDIR_P) '$(DESTDIR)$(bindir)/$$dir'"; \
+            $(MKDIR_P) "$(DESTDIR)$(bindir)/$$dir" || exit $$?;; \
+         f) \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+             echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+             $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+           } \
+         ;; esac \
+       ; done
+
+uninstall-nobase_binPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nobase_bin_PROGRAMS)'; test -n "$(bindir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' \
+             -e 'x;s,[^/]*$$,,;G;s,\n,,' \
+       `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(bindir)" && rm -f $$files
+
+clean-nobase_binPROGRAMS:
+       -test -z "$(nobase_bin_PROGRAMS)" || rm -f $(nobase_bin_PROGRAMS)
+install-prefixexecbinPROGRAMS: $(prefixexecbin_PROGRAMS)
+       @$(NORMAL_INSTALL)
+       @list='$(prefixexecbin_PROGRAMS)'; test -n "$(prefixexecbindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(prefixexecbindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(prefixexecbindir)" || exit 1; \
+       fi; \
+       for p in $$list; do echo "$$p $$p"; done | \
+       sed 's/$(EXEEXT)$$//' | \
+       while read p p1; do if test -f $$p \
+         ; then echo "$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n;h' \
+           -e 's|.*|.|' \
+           -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \
+       sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) files[d] = files[d] " " $$1; \
+           else { print "f", $$3 "/" $$4, $$1; } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+           if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+           test -z "$$files" || { \
+             echo " $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(prefixexecbindir)$$dir'"; \
+             $(INSTALL_PROGRAM_ENV) $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(prefixexecbindir)$$dir" || exit $$?; \
+           } \
+       ; done
+
+uninstall-prefixexecbinPROGRAMS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(prefixexecbin_PROGRAMS)'; test -n "$(prefixexecbindir)" || list=; \
+       files=`for p in $$list; do echo "$$p"; done | \
+         sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \
+             -e 's/$$/$(EXEEXT)/' \
+       `; \
+       test -n "$$list" || exit 0; \
+       echo " ( cd '$(DESTDIR)$(prefixexecbindir)' && rm -f" $$files ")"; \
+       cd "$(DESTDIR)$(prefixexecbindir)" && rm -f $$files
+
+clean-prefixexecbinPROGRAMS:
+       -test -z "$(prefixexecbin_PROGRAMS)" || rm -f $(prefixexecbin_PROGRAMS)
+
+clean-noinstLIBRARIES:
+       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
+lib/$(am__dirstamp):
+       @$(MKDIR_P) lib
+       @: > lib/$(am__dirstamp)
+lib/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) lib/$(DEPDIR)
+       @: > lib/$(DEPDIR)/$(am__dirstamp)
+lib/localcharset.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/math.$(OBJEXT): lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/printf-frexp.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/printf-frexpl.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/uniwidth/$(am__dirstamp):
+       @$(MKDIR_P) lib/uniwidth
+       @: > lib/uniwidth/$(am__dirstamp)
+lib/uniwidth/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) lib/uniwidth/$(DEPDIR)
+       @: > lib/uniwidth/$(DEPDIR)/$(am__dirstamp)
+lib/uniwidth/width.$(OBJEXT): lib/uniwidth/$(am__dirstamp) \
+       lib/uniwidth/$(DEPDIR)/$(am__dirstamp)
+lib/wctype-h.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/xsize.$(OBJEXT): lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/float.$(OBJEXT): lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/itold.$(OBJEXT): lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/fprintf.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/frexp.$(OBJEXT): lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/frexpl.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/fseterr.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/isnan.$(OBJEXT): lib/$(am__dirstamp) lib/$(DEPDIR)/$(am__dirstamp)
+lib/isnand.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/isnanf.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/isnanl.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/memchr.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/signbitd.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/signbitf.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/signbitl.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/snprintf.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/asnprintf.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/printf-args.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/printf-parse.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/vasnprintf.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/vsnprintf.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+lib/wcwidth.$(OBJEXT): lib/$(am__dirstamp) \
+       lib/$(DEPDIR)/$(am__dirstamp)
+
+lib/libgnu.a: $(lib_libgnu_a_OBJECTS) $(lib_libgnu_a_DEPENDENCIES) $(EXTRA_lib_libgnu_a_DEPENDENCIES) lib/$(am__dirstamp)
+       $(AM_V_at)-rm -f lib/libgnu.a
+       $(AM_V_AR)$(lib_libgnu_a_AR) lib/libgnu.a $(lib_libgnu_a_OBJECTS) $(lib_libgnu_a_LIBADD)
+       $(AM_V_at)$(RANLIB) lib/libgnu.a
+src/libs/libbib/$(am__dirstamp):
+       @$(MKDIR_P) src/libs/libbib
+       @: > src/libs/libbib/$(am__dirstamp)
+src/libs/libbib/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/libs/libbib/$(DEPDIR)
+       @: > src/libs/libbib/$(DEPDIR)/$(am__dirstamp)
+src/libs/libbib/common.$(OBJEXT): src/libs/libbib/$(am__dirstamp) \
+       src/libs/libbib/$(DEPDIR)/$(am__dirstamp)
+src/libs/libbib/index.$(OBJEXT): src/libs/libbib/$(am__dirstamp) \
+       src/libs/libbib/$(DEPDIR)/$(am__dirstamp)
+src/libs/libbib/linear.$(OBJEXT): src/libs/libbib/$(am__dirstamp) \
+       src/libs/libbib/$(DEPDIR)/$(am__dirstamp)
+src/libs/libbib/search.$(OBJEXT): src/libs/libbib/$(am__dirstamp) \
+       src/libs/libbib/$(DEPDIR)/$(am__dirstamp)
+src/libs/libbib/map.$(OBJEXT): src/libs/libbib/$(am__dirstamp) \
+       src/libs/libbib/$(DEPDIR)/$(am__dirstamp)
+
+libbib.a: $(libbib_a_OBJECTS) $(libbib_a_DEPENDENCIES) $(EXTRA_libbib_a_DEPENDENCIES) 
+       $(AM_V_at)-rm -f libbib.a
+       $(AM_V_AR)$(libbib_a_AR) libbib.a $(libbib_a_OBJECTS) $(libbib_a_LIBADD)
+       $(AM_V_at)$(RANLIB) libbib.a
+src/libs/libdriver/$(am__dirstamp):
+       @$(MKDIR_P) src/libs/libdriver
+       @: > src/libs/libdriver/$(am__dirstamp)
+src/libs/libdriver/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/libs/libdriver/$(DEPDIR)
+       @: > src/libs/libdriver/$(DEPDIR)/$(am__dirstamp)
+src/libs/libdriver/input.$(OBJEXT):  \
+       src/libs/libdriver/$(am__dirstamp) \
+       src/libs/libdriver/$(DEPDIR)/$(am__dirstamp)
+src/libs/libdriver/printer.$(OBJEXT):  \
+       src/libs/libdriver/$(am__dirstamp) \
+       src/libs/libdriver/$(DEPDIR)/$(am__dirstamp)
+
+libdriver.a: $(libdriver_a_OBJECTS) $(libdriver_a_DEPENDENCIES) $(EXTRA_libdriver_a_DEPENDENCIES) 
+       $(AM_V_at)-rm -f libdriver.a
+       $(AM_V_AR)$(libdriver_a_AR) libdriver.a $(libdriver_a_OBJECTS) $(libdriver_a_LIBADD)
+       $(AM_V_at)$(RANLIB) libdriver.a
+src/libs/libgroff/$(am__dirstamp):
+       @$(MKDIR_P) src/libs/libgroff
+       @: > src/libs/libgroff/$(am__dirstamp)
+src/libs/libgroff/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/libs/libgroff/$(DEPDIR)
+       @: > src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-assert.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-change_lf.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-cmap.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-color.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-cset.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-curtime.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-device.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-errarg.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-error.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-fatal.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-filename.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-font.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-fontfile.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-geometry.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-getopt.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-getopt1.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-glyphuni.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-htmlhint.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-hypot.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-iftoa.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-invalid.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-itoa.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-lf.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-lineno.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-localcharset.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-macropath.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-matherr.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-maxfilename.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-maxpathname.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-mksdir.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-nametoindex.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-new.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-paper.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-prime.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-progname.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-ptable.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-quotearg.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-relocate.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-searchpath.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-spawnvp.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-string.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-strsave.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-symbol.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-tmpfile.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-tmpname.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-unicode.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-uniglyph.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-uniuni.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+src/libs/libgroff/libgroff_a-version.$(OBJEXT):  \
+       src/libs/libgroff/$(am__dirstamp) \
+       src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+
+libgroff.a: $(libgroff_a_OBJECTS) $(libgroff_a_DEPENDENCIES) $(EXTRA_libgroff_a_DEPENDENCIES) 
+       $(AM_V_at)-rm -f libgroff.a
+       $(AM_V_AR)$(libgroff_a_AR) libgroff.a $(libgroff_a_OBJECTS) $(libgroff_a_LIBADD)
+       $(AM_V_at)$(RANLIB) libgroff.a
+src/libs/libxutil/$(am__dirstamp):
+       @$(MKDIR_P) src/libs/libxutil
+       @: > src/libs/libxutil/$(am__dirstamp)
+src/libs/libxutil/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/libs/libxutil/$(DEPDIR)
+       @: > src/libs/libxutil/$(DEPDIR)/$(am__dirstamp)
+src/libs/libxutil/libxutil_a-DviChar.$(OBJEXT):  \
+       src/libs/libxutil/$(am__dirstamp) \
+       src/libs/libxutil/$(DEPDIR)/$(am__dirstamp)
+src/libs/libxutil/libxutil_a-XFontName.$(OBJEXT):  \
+       src/libs/libxutil/$(am__dirstamp) \
+       src/libs/libxutil/$(DEPDIR)/$(am__dirstamp)
+src/libs/libxutil/libxutil_a-xmalloc.$(OBJEXT):  \
+       src/libs/libxutil/$(am__dirstamp) \
+       src/libs/libxutil/$(DEPDIR)/$(am__dirstamp)
+
+libxutil.a: $(libxutil_a_OBJECTS) $(libxutil_a_DEPENDENCIES) $(EXTRA_libxutil_a_DEPENDENCIES) 
+       $(AM_V_at)-rm -f libxutil.a
+       $(AM_V_AR)$(libxutil_a_AR) libxutil.a $(libxutil_a_OBJECTS) $(libxutil_a_LIBADD)
+       $(AM_V_at)$(RANLIB) libxutil.a
+src/utils/addftinfo/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/addftinfo
+       @: > src/utils/addftinfo/$(am__dirstamp)
+src/utils/addftinfo/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/addftinfo/$(DEPDIR)
+       @: > src/utils/addftinfo/$(DEPDIR)/$(am__dirstamp)
+src/utils/addftinfo/addftinfo.$(OBJEXT):  \
+       src/utils/addftinfo/$(am__dirstamp) \
+       src/utils/addftinfo/$(DEPDIR)/$(am__dirstamp)
+src/utils/addftinfo/guess.$(OBJEXT):  \
+       src/utils/addftinfo/$(am__dirstamp) \
+       src/utils/addftinfo/$(DEPDIR)/$(am__dirstamp)
+
+addftinfo$(EXEEXT): $(addftinfo_OBJECTS) $(addftinfo_DEPENDENCIES) $(EXTRA_addftinfo_DEPENDENCIES) 
+       @rm -f addftinfo$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(addftinfo_OBJECTS) $(addftinfo_LDADD) $(LIBS)
+src/preproc/eqn/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/eqn
+       @: > src/preproc/eqn/$(am__dirstamp)
+src/preproc/eqn/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/eqn/$(DEPDIR)
+       @: > src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-main.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-lex.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-box.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-limit.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-list.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-over.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-text.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-script.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-mark.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-other.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-delim.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-sqrt.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-pile.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn-special.$(OBJEXT):  \
+       src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/eqn/eqn.hpp: src/preproc/eqn/eqn.cpp
+       @if test ! -f $@; then rm -f src/preproc/eqn/eqn.cpp; else :; fi
+       @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) src/preproc/eqn/eqn.cpp; else :; fi
+src/preproc/eqn/eqn-eqn.$(OBJEXT): src/preproc/eqn/$(am__dirstamp) \
+       src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+
+eqn$(EXEEXT): $(eqn_OBJECTS) $(eqn_DEPENDENCIES) $(EXTRA_eqn_DEPENDENCIES) 
+       @rm -f eqn$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(eqn_OBJECTS) $(eqn_LDADD) $(LIBS)
+src/preproc/grn/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/grn
+       @: > src/preproc/grn/$(am__dirstamp)
+src/preproc/grn/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/grn/$(DEPDIR)
+       @: > src/preproc/grn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/grn/hdb.$(OBJEXT): src/preproc/grn/$(am__dirstamp) \
+       src/preproc/grn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/grn/hpoint.$(OBJEXT): src/preproc/grn/$(am__dirstamp) \
+       src/preproc/grn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/grn/hgraph.$(OBJEXT): src/preproc/grn/$(am__dirstamp) \
+       src/preproc/grn/$(DEPDIR)/$(am__dirstamp)
+src/preproc/grn/main.$(OBJEXT): src/preproc/grn/$(am__dirstamp) \
+       src/preproc/grn/$(DEPDIR)/$(am__dirstamp)
+
+grn$(EXEEXT): $(grn_OBJECTS) $(grn_DEPENDENCIES) $(EXTRA_grn_DEPENDENCIES) 
+       @rm -f grn$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(grn_OBJECTS) $(grn_LDADD) $(LIBS)
+src/devices/grodvi/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grodvi
+       @: > src/devices/grodvi/$(am__dirstamp)
+src/devices/grodvi/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grodvi/$(DEPDIR)
+       @: > src/devices/grodvi/$(DEPDIR)/$(am__dirstamp)
+src/devices/grodvi/dvi.$(OBJEXT): src/devices/grodvi/$(am__dirstamp) \
+       src/devices/grodvi/$(DEPDIR)/$(am__dirstamp)
+
+grodvi$(EXEEXT): $(grodvi_OBJECTS) $(grodvi_DEPENDENCIES) $(EXTRA_grodvi_DEPENDENCIES) 
+       @rm -f grodvi$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(grodvi_OBJECTS) $(grodvi_LDADD) $(LIBS)
+src/roff/groff/$(am__dirstamp):
+       @$(MKDIR_P) src/roff/groff
+       @: > src/roff/groff/$(am__dirstamp)
+src/roff/groff/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/roff/groff/$(DEPDIR)
+       @: > src/roff/groff/$(DEPDIR)/$(am__dirstamp)
+src/roff/groff/groff.$(OBJEXT): src/roff/groff/$(am__dirstamp) \
+       src/roff/groff/$(DEPDIR)/$(am__dirstamp)
+src/roff/groff/pipeline.$(OBJEXT): src/roff/groff/$(am__dirstamp) \
+       src/roff/groff/$(DEPDIR)/$(am__dirstamp)
+
+groff$(EXEEXT): $(groff_OBJECTS) $(groff_DEPENDENCIES) $(EXTRA_groff_DEPENDENCIES) 
+       @rm -f groff$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(groff_OBJECTS) $(groff_LDADD) $(LIBS)
+src/devices/grolbp/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grolbp
+       @: > src/devices/grolbp/$(am__dirstamp)
+src/devices/grolbp/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grolbp/$(DEPDIR)
+       @: > src/devices/grolbp/$(DEPDIR)/$(am__dirstamp)
+src/devices/grolbp/lbp.$(OBJEXT): src/devices/grolbp/$(am__dirstamp) \
+       src/devices/grolbp/$(DEPDIR)/$(am__dirstamp)
+
+grolbp$(EXEEXT): $(grolbp_OBJECTS) $(grolbp_DEPENDENCIES) $(EXTRA_grolbp_DEPENDENCIES) 
+       @rm -f grolbp$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(grolbp_OBJECTS) $(grolbp_LDADD) $(LIBS)
+src/devices/grolj4/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grolj4
+       @: > src/devices/grolj4/$(am__dirstamp)
+src/devices/grolj4/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grolj4/$(DEPDIR)
+       @: > src/devices/grolj4/$(DEPDIR)/$(am__dirstamp)
+src/devices/grolj4/lj4.$(OBJEXT): src/devices/grolj4/$(am__dirstamp) \
+       src/devices/grolj4/$(DEPDIR)/$(am__dirstamp)
+
+grolj4$(EXEEXT): $(grolj4_OBJECTS) $(grolj4_DEPENDENCIES) $(EXTRA_grolj4_DEPENDENCIES) 
+       @rm -f grolj4$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(grolj4_OBJECTS) $(grolj4_LDADD) $(LIBS)
+src/devices/grops/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grops
+       @: > src/devices/grops/$(am__dirstamp)
+src/devices/grops/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grops/$(DEPDIR)
+       @: > src/devices/grops/$(DEPDIR)/$(am__dirstamp)
+src/devices/grops/ps.$(OBJEXT): src/devices/grops/$(am__dirstamp) \
+       src/devices/grops/$(DEPDIR)/$(am__dirstamp)
+src/devices/grops/psrm.$(OBJEXT): src/devices/grops/$(am__dirstamp) \
+       src/devices/grops/$(DEPDIR)/$(am__dirstamp)
+
+grops$(EXEEXT): $(grops_OBJECTS) $(grops_DEPENDENCIES) $(EXTRA_grops_DEPENDENCIES) 
+       @rm -f grops$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(grops_OBJECTS) $(grops_LDADD) $(LIBS)
+src/devices/grotty/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grotty
+       @: > src/devices/grotty/$(am__dirstamp)
+src/devices/grotty/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grotty/$(DEPDIR)
+       @: > src/devices/grotty/$(DEPDIR)/$(am__dirstamp)
+src/devices/grotty/tty.$(OBJEXT): src/devices/grotty/$(am__dirstamp) \
+       src/devices/grotty/$(DEPDIR)/$(am__dirstamp)
+
+grotty$(EXEEXT): $(grotty_OBJECTS) $(grotty_DEPENDENCIES) $(EXTRA_grotty_DEPENDENCIES) 
+       @rm -f grotty$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(grotty_OBJECTS) $(grotty_LDADD) $(LIBS)
+src/devices/xditview/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/xditview
+       @: > src/devices/xditview/$(am__dirstamp)
+src/devices/xditview/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/xditview/$(DEPDIR)
+       @: > src/devices/xditview/$(DEPDIR)/$(am__dirstamp)
+src/devices/xditview/gxditview-device.$(OBJEXT):  \
+       src/devices/xditview/$(am__dirstamp) \
+       src/devices/xditview/$(DEPDIR)/$(am__dirstamp)
+src/devices/xditview/gxditview-draw.$(OBJEXT):  \
+       src/devices/xditview/$(am__dirstamp) \
+       src/devices/xditview/$(DEPDIR)/$(am__dirstamp)
+src/devices/xditview/gxditview-Dvi.$(OBJEXT):  \
+       src/devices/xditview/$(am__dirstamp) \
+       src/devices/xditview/$(DEPDIR)/$(am__dirstamp)
+src/devices/xditview/gxditview-font.$(OBJEXT):  \
+       src/devices/xditview/$(am__dirstamp) \
+       src/devices/xditview/$(DEPDIR)/$(am__dirstamp)
+src/devices/xditview/gxditview-lex.$(OBJEXT):  \
+       src/devices/xditview/$(am__dirstamp) \
+       src/devices/xditview/$(DEPDIR)/$(am__dirstamp)
+src/devices/xditview/gxditview-page.$(OBJEXT):  \
+       src/devices/xditview/$(am__dirstamp) \
+       src/devices/xditview/$(DEPDIR)/$(am__dirstamp)
+src/devices/xditview/gxditview-parse.$(OBJEXT):  \
+       src/devices/xditview/$(am__dirstamp) \
+       src/devices/xditview/$(DEPDIR)/$(am__dirstamp)
+src/devices/xditview/gxditview-xditview.$(OBJEXT):  \
+       src/devices/xditview/$(am__dirstamp) \
+       src/devices/xditview/$(DEPDIR)/$(am__dirstamp)
+
+gxditview$(EXEEXT): $(gxditview_OBJECTS) $(gxditview_DEPENDENCIES) $(EXTRA_gxditview_DEPENDENCIES) 
+       @rm -f gxditview$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(gxditview_OBJECTS) $(gxditview_LDADD) $(LIBS)
+src/utils/hpftodit/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/hpftodit
+       @: > src/utils/hpftodit/$(am__dirstamp)
+src/utils/hpftodit/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/hpftodit/$(DEPDIR)
+       @: > src/utils/hpftodit/$(DEPDIR)/$(am__dirstamp)
+src/utils/hpftodit/hpftodit.$(OBJEXT):  \
+       src/utils/hpftodit/$(am__dirstamp) \
+       src/utils/hpftodit/$(DEPDIR)/$(am__dirstamp)
+src/utils/hpftodit/hpuni.$(OBJEXT):  \
+       src/utils/hpftodit/$(am__dirstamp) \
+       src/utils/hpftodit/$(DEPDIR)/$(am__dirstamp)
+
+hpftodit$(EXEEXT): $(hpftodit_OBJECTS) $(hpftodit_DEPENDENCIES) $(EXTRA_hpftodit_DEPENDENCIES) 
+       @rm -f hpftodit$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(hpftodit_OBJECTS) $(hpftodit_LDADD) $(LIBS)
+src/utils/indxbib/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/indxbib
+       @: > src/utils/indxbib/$(am__dirstamp)
+src/utils/indxbib/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/indxbib/$(DEPDIR)
+       @: > src/utils/indxbib/$(DEPDIR)/$(am__dirstamp)
+src/utils/indxbib/indxbib.$(OBJEXT):  \
+       src/utils/indxbib/$(am__dirstamp) \
+       src/utils/indxbib/$(DEPDIR)/$(am__dirstamp)
+src/utils/indxbib/signal.$(OBJEXT): src/utils/indxbib/$(am__dirstamp) \
+       src/utils/indxbib/$(DEPDIR)/$(am__dirstamp)
+
+indxbib$(EXEEXT): $(indxbib_OBJECTS) $(indxbib_DEPENDENCIES) $(EXTRA_indxbib_DEPENDENCIES) 
+       @rm -f indxbib$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(indxbib_OBJECTS) $(indxbib_LDADD) $(LIBS)
+src/utils/lkbib/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/lkbib
+       @: > src/utils/lkbib/$(am__dirstamp)
+src/utils/lkbib/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/lkbib/$(DEPDIR)
+       @: > src/utils/lkbib/$(DEPDIR)/$(am__dirstamp)
+src/utils/lkbib/lkbib.$(OBJEXT): src/utils/lkbib/$(am__dirstamp) \
+       src/utils/lkbib/$(DEPDIR)/$(am__dirstamp)
+
+lkbib$(EXEEXT): $(lkbib_OBJECTS) $(lkbib_DEPENDENCIES) $(EXTRA_lkbib_DEPENDENCIES) 
+       @rm -f lkbib$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(lkbib_OBJECTS) $(lkbib_LDADD) $(LIBS)
+src/utils/lookbib/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/lookbib
+       @: > src/utils/lookbib/$(am__dirstamp)
+src/utils/lookbib/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/lookbib/$(DEPDIR)
+       @: > src/utils/lookbib/$(DEPDIR)/$(am__dirstamp)
+src/utils/lookbib/lookbib.$(OBJEXT):  \
+       src/utils/lookbib/$(am__dirstamp) \
+       src/utils/lookbib/$(DEPDIR)/$(am__dirstamp)
+
+lookbib$(EXEEXT): $(lookbib_OBJECTS) $(lookbib_DEPENDENCIES) $(EXTRA_lookbib_DEPENDENCIES) 
+       @rm -f lookbib$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(lookbib_OBJECTS) $(lookbib_LDADD) $(LIBS)
+src/utils/pfbtops/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/pfbtops
+       @: > src/utils/pfbtops/$(am__dirstamp)
+src/utils/pfbtops/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/pfbtops/$(DEPDIR)
+       @: > src/utils/pfbtops/$(DEPDIR)/$(am__dirstamp)
+src/utils/pfbtops/pfbtops.$(OBJEXT):  \
+       src/utils/pfbtops/$(am__dirstamp) \
+       src/utils/pfbtops/$(DEPDIR)/$(am__dirstamp)
+src/utils/pfbtops/dummy.$(OBJEXT): src/utils/pfbtops/$(am__dirstamp) \
+       src/utils/pfbtops/$(DEPDIR)/$(am__dirstamp)
+
+pfbtops$(EXEEXT): $(pfbtops_OBJECTS) $(pfbtops_DEPENDENCIES) $(EXTRA_pfbtops_DEPENDENCIES) 
+       @rm -f pfbtops$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(pfbtops_OBJECTS) $(pfbtops_LDADD) $(LIBS)
+src/preproc/pic/pic.hpp: src/preproc/pic/pic.cpp
+       @if test ! -f $@; then rm -f src/preproc/pic/pic.cpp; else :; fi
+       @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) src/preproc/pic/pic.cpp; else :; fi
+src/preproc/pic/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/pic
+       @: > src/preproc/pic/$(am__dirstamp)
+src/preproc/pic/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/pic/$(DEPDIR)
+       @: > src/preproc/pic/$(DEPDIR)/$(am__dirstamp)
+src/preproc/pic/pic-pic.$(OBJEXT): src/preproc/pic/$(am__dirstamp) \
+       src/preproc/pic/$(DEPDIR)/$(am__dirstamp)
+src/preproc/pic/pic-lex.$(OBJEXT): src/preproc/pic/$(am__dirstamp) \
+       src/preproc/pic/$(DEPDIR)/$(am__dirstamp)
+src/preproc/pic/pic-main.$(OBJEXT): src/preproc/pic/$(am__dirstamp) \
+       src/preproc/pic/$(DEPDIR)/$(am__dirstamp)
+src/preproc/pic/pic-object.$(OBJEXT): src/preproc/pic/$(am__dirstamp) \
+       src/preproc/pic/$(DEPDIR)/$(am__dirstamp)
+src/preproc/pic/pic-common.$(OBJEXT): src/preproc/pic/$(am__dirstamp) \
+       src/preproc/pic/$(DEPDIR)/$(am__dirstamp)
+src/preproc/pic/pic-troff.$(OBJEXT): src/preproc/pic/$(am__dirstamp) \
+       src/preproc/pic/$(DEPDIR)/$(am__dirstamp)
+src/preproc/pic/pic-tex.$(OBJEXT): src/preproc/pic/$(am__dirstamp) \
+       src/preproc/pic/$(DEPDIR)/$(am__dirstamp)
+
+pic$(EXEEXT): $(pic_OBJECTS) $(pic_DEPENDENCIES) $(EXTRA_pic_DEPENDENCIES) 
+       @rm -f pic$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(pic_OBJECTS) $(pic_LDADD) $(LIBS)
+src/devices/grohtml/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grohtml
+       @: > src/devices/grohtml/$(am__dirstamp)
+src/devices/grohtml/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/devices/grohtml/$(DEPDIR)
+       @: > src/devices/grohtml/$(DEPDIR)/$(am__dirstamp)
+src/devices/grohtml/post-html.$(OBJEXT):  \
+       src/devices/grohtml/$(am__dirstamp) \
+       src/devices/grohtml/$(DEPDIR)/$(am__dirstamp)
+src/devices/grohtml/html-table.$(OBJEXT):  \
+       src/devices/grohtml/$(am__dirstamp) \
+       src/devices/grohtml/$(DEPDIR)/$(am__dirstamp)
+src/devices/grohtml/html-text.$(OBJEXT):  \
+       src/devices/grohtml/$(am__dirstamp) \
+       src/devices/grohtml/$(DEPDIR)/$(am__dirstamp)
+src/devices/grohtml/output.$(OBJEXT):  \
+       src/devices/grohtml/$(am__dirstamp) \
+       src/devices/grohtml/$(DEPDIR)/$(am__dirstamp)
+
+post-grohtml$(EXEEXT): $(post_grohtml_OBJECTS) $(post_grohtml_DEPENDENCIES) $(EXTRA_post_grohtml_DEPENDENCIES) 
+       @rm -f post-grohtml$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(post_grohtml_OBJECTS) $(post_grohtml_LDADD) $(LIBS)
+src/preproc/html/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/html
+       @: > src/preproc/html/$(am__dirstamp)
+src/preproc/html/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/html/$(DEPDIR)
+       @: > src/preproc/html/$(DEPDIR)/$(am__dirstamp)
+src/preproc/html/pre-html.$(OBJEXT): src/preproc/html/$(am__dirstamp) \
+       src/preproc/html/$(DEPDIR)/$(am__dirstamp)
+src/preproc/html/pushback.$(OBJEXT): src/preproc/html/$(am__dirstamp) \
+       src/preproc/html/$(DEPDIR)/$(am__dirstamp)
+
+pre-grohtml$(EXEEXT): $(pre_grohtml_OBJECTS) $(pre_grohtml_DEPENDENCIES) $(EXTRA_pre_grohtml_DEPENDENCIES) 
+       @rm -f pre-grohtml$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(pre_grohtml_OBJECTS) $(pre_grohtml_LDADD) $(LIBS)
+src/preproc/preconv/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/preconv
+       @: > src/preproc/preconv/$(am__dirstamp)
+src/preproc/preconv/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/preconv/$(DEPDIR)
+       @: > src/preproc/preconv/$(DEPDIR)/$(am__dirstamp)
+src/preproc/preconv/preconv-preconv.$(OBJEXT):  \
+       src/preproc/preconv/$(am__dirstamp) \
+       src/preproc/preconv/$(DEPDIR)/$(am__dirstamp)
+
+preconv$(EXEEXT): $(preconv_OBJECTS) $(preconv_DEPENDENCIES) $(EXTRA_preconv_DEPENDENCIES) 
+       @rm -f preconv$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(preconv_OBJECTS) $(preconv_LDADD) $(LIBS)
+src/preproc/refer/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/refer
+       @: > src/preproc/refer/$(am__dirstamp)
+src/preproc/refer/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/refer/$(DEPDIR)
+       @: > src/preproc/refer/$(DEPDIR)/$(am__dirstamp)
+src/preproc/refer/refer-command.$(OBJEXT):  \
+       src/preproc/refer/$(am__dirstamp) \
+       src/preproc/refer/$(DEPDIR)/$(am__dirstamp)
+src/preproc/refer/refer-ref.$(OBJEXT):  \
+       src/preproc/refer/$(am__dirstamp) \
+       src/preproc/refer/$(DEPDIR)/$(am__dirstamp)
+src/preproc/refer/refer-refer.$(OBJEXT):  \
+       src/preproc/refer/$(am__dirstamp) \
+       src/preproc/refer/$(DEPDIR)/$(am__dirstamp)
+src/preproc/refer/refer-token.$(OBJEXT):  \
+       src/preproc/refer/$(am__dirstamp) \
+       src/preproc/refer/$(DEPDIR)/$(am__dirstamp)
+src/preproc/refer/label.hpp: src/preproc/refer/label.cpp
+       @if test ! -f $@; then rm -f src/preproc/refer/label.cpp; else :; fi
+       @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) src/preproc/refer/label.cpp; else :; fi
+src/preproc/refer/refer-label.$(OBJEXT):  \
+       src/preproc/refer/$(am__dirstamp) \
+       src/preproc/refer/$(DEPDIR)/$(am__dirstamp)
+
+refer$(EXEEXT): $(refer_OBJECTS) $(refer_DEPENDENCIES) $(EXTRA_refer_DEPENDENCIES) 
+       @rm -f refer$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(refer_OBJECTS) $(refer_LDADD) $(LIBS)
+src/preproc/soelim/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/soelim
+       @: > src/preproc/soelim/$(am__dirstamp)
+src/preproc/soelim/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/soelim/$(DEPDIR)
+       @: > src/preproc/soelim/$(DEPDIR)/$(am__dirstamp)
+src/preproc/soelim/soelim.$(OBJEXT):  \
+       src/preproc/soelim/$(am__dirstamp) \
+       src/preproc/soelim/$(DEPDIR)/$(am__dirstamp)
+
+soelim$(EXEEXT): $(soelim_OBJECTS) $(soelim_DEPENDENCIES) $(EXTRA_soelim_DEPENDENCIES) 
+       @rm -f soelim$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(soelim_OBJECTS) $(soelim_LDADD) $(LIBS)
+src/preproc/tbl/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/tbl
+       @: > src/preproc/tbl/$(am__dirstamp)
+src/preproc/tbl/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/preproc/tbl/$(DEPDIR)
+       @: > src/preproc/tbl/$(DEPDIR)/$(am__dirstamp)
+src/preproc/tbl/main.$(OBJEXT): src/preproc/tbl/$(am__dirstamp) \
+       src/preproc/tbl/$(DEPDIR)/$(am__dirstamp)
+src/preproc/tbl/table.$(OBJEXT): src/preproc/tbl/$(am__dirstamp) \
+       src/preproc/tbl/$(DEPDIR)/$(am__dirstamp)
+
+tbl$(EXEEXT): $(tbl_OBJECTS) $(tbl_DEPENDENCIES) $(EXTRA_tbl_DEPENDENCIES) 
+       @rm -f tbl$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(tbl_OBJECTS) $(tbl_LDADD) $(LIBS)
+src/utils/tfmtodit/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/tfmtodit
+       @: > src/utils/tfmtodit/$(am__dirstamp)
+src/utils/tfmtodit/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/tfmtodit/$(DEPDIR)
+       @: > src/utils/tfmtodit/$(DEPDIR)/$(am__dirstamp)
+src/utils/tfmtodit/tfmtodit.$(OBJEXT):  \
+       src/utils/tfmtodit/$(am__dirstamp) \
+       src/utils/tfmtodit/$(DEPDIR)/$(am__dirstamp)
+
+tfmtodit$(EXEEXT): $(tfmtodit_OBJECTS) $(tfmtodit_DEPENDENCIES) $(EXTRA_tfmtodit_DEPENDENCIES) 
+       @rm -f tfmtodit$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(tfmtodit_OBJECTS) $(tfmtodit_LDADD) $(LIBS)
+src/roff/troff/$(am__dirstamp):
+       @$(MKDIR_P) src/roff/troff
+       @: > src/roff/troff/$(am__dirstamp)
+src/roff/troff/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/roff/troff/$(DEPDIR)
+       @: > src/roff/troff/$(DEPDIR)/$(am__dirstamp)
+src/roff/troff/dictionary.$(OBJEXT): src/roff/troff/$(am__dirstamp) \
+       src/roff/troff/$(DEPDIR)/$(am__dirstamp)
+src/roff/troff/div.$(OBJEXT): src/roff/troff/$(am__dirstamp) \
+       src/roff/troff/$(DEPDIR)/$(am__dirstamp)
+src/roff/troff/env.$(OBJEXT): src/roff/troff/$(am__dirstamp) \
+       src/roff/troff/$(DEPDIR)/$(am__dirstamp)
+src/roff/troff/input.$(OBJEXT): src/roff/troff/$(am__dirstamp) \
+       src/roff/troff/$(DEPDIR)/$(am__dirstamp)
+src/roff/troff/mtsm.$(OBJEXT): src/roff/troff/$(am__dirstamp) \
+       src/roff/troff/$(DEPDIR)/$(am__dirstamp)
+src/roff/troff/node.$(OBJEXT): src/roff/troff/$(am__dirstamp) \
+       src/roff/troff/$(DEPDIR)/$(am__dirstamp)
+src/roff/troff/number.$(OBJEXT): src/roff/troff/$(am__dirstamp) \
+       src/roff/troff/$(DEPDIR)/$(am__dirstamp)
+src/roff/troff/reg.$(OBJEXT): src/roff/troff/$(am__dirstamp) \
+       src/roff/troff/$(DEPDIR)/$(am__dirstamp)
+src/roff/troff/majorminor.$(OBJEXT): src/roff/troff/$(am__dirstamp) \
+       src/roff/troff/$(DEPDIR)/$(am__dirstamp)
+
+troff$(EXEEXT): $(troff_OBJECTS) $(troff_DEPENDENCIES) $(EXTRA_troff_DEPENDENCIES) 
+       @rm -f troff$(EXEEXT)
+       $(AM_V_CXXLD)$(CXXLINK) $(troff_OBJECTS) $(troff_LDADD) $(LIBS)
+src/utils/xtotroff/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/xtotroff
+       @: > src/utils/xtotroff/$(am__dirstamp)
+src/utils/xtotroff/$(DEPDIR)/$(am__dirstamp):
+       @$(MKDIR_P) src/utils/xtotroff/$(DEPDIR)
+       @: > src/utils/xtotroff/$(DEPDIR)/$(am__dirstamp)
+src/utils/xtotroff/xtotroff-xtotroff.$(OBJEXT):  \
+       src/utils/xtotroff/$(am__dirstamp) \
+       src/utils/xtotroff/$(DEPDIR)/$(am__dirstamp)
+
+xtotroff$(EXEEXT): $(xtotroff_OBJECTS) $(xtotroff_DEPENDENCIES) $(EXTRA_xtotroff_DEPENDENCIES) 
+       @rm -f xtotroff$(EXEEXT)
+       $(AM_V_CCLD)$(LINK) $(xtotroff_OBJECTS) $(xtotroff_LDADD) $(LIBS)
+install-binSCRIPTS: $(bin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n' \
+           -e 'h;s|.*|.|' \
+           -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+             if (++n[d] == $(am__install_max)) { \
+               print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+           else { print "f", d "/" $$4, $$1 } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+            if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+            test -z "$$files" || { \
+              echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+              $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+            } \
+       ; done
+
+uninstall-binSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+       files=`for p in $$list; do echo "$$p"; done | \
+              sed -e 's,.*/,,;$(transform)'`; \
+       dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
+install-dist_binSCRIPTS: $(dist_bin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n' \
+           -e 'h;s|.*|.|' \
+           -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+             if (++n[d] == $(am__install_max)) { \
+               print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+           else { print "f", d "/" $$4, $$1 } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+            if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+            test -z "$$files" || { \
+              echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(bindir)$$dir'"; \
+              $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \
+            } \
+       ; done
+
+uninstall-dist_binSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_bin_SCRIPTS)'; test -n "$(bindir)" || exit 0; \
+       files=`for p in $$list; do echo "$$p"; done | \
+              sed -e 's,.*/,,;$(transform)'`; \
+       dir='$(DESTDIR)$(bindir)'; $(am__uninstall_files_from_dir)
+install-prefixexecbinSCRIPTS: $(prefixexecbin_SCRIPTS)
+       @$(NORMAL_INSTALL)
+       @list='$(prefixexecbin_SCRIPTS)'; test -n "$(prefixexecbindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(prefixexecbindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(prefixexecbindir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         if test -f "$$d$$p"; then echo "$$d$$p"; echo "$$p"; else :; fi; \
+       done | \
+       sed -e 'p;s,.*/,,;n' \
+           -e 'h;s|.*|.|' \
+           -e 'p;x;s,.*/,,;$(transform)' | sed 'N;N;N;s,\n, ,g' | \
+       $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1; } \
+         { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \
+           if ($$2 == $$4) { files[d] = files[d] " " $$1; \
+             if (++n[d] == $(am__install_max)) { \
+               print "f", d, files[d]; n[d] = 0; files[d] = "" } } \
+           else { print "f", d "/" $$4, $$1 } } \
+         END { for (d in files) print "f", d, files[d] }' | \
+       while read type dir files; do \
+            if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \
+            test -z "$$files" || { \
+              echo " $(INSTALL_SCRIPT) $$files '$(DESTDIR)$(prefixexecbindir)$$dir'"; \
+              $(INSTALL_SCRIPT) $$files "$(DESTDIR)$(prefixexecbindir)$$dir" || exit $$?; \
+            } \
+       ; done
+
+uninstall-prefixexecbinSCRIPTS:
+       @$(NORMAL_UNINSTALL)
+       @list='$(prefixexecbin_SCRIPTS)'; test -n "$(prefixexecbindir)" || exit 0; \
+       files=`for p in $$list; do echo "$$p"; done | \
+              sed -e 's,.*/,,;$(transform)'`; \
+       dir='$(DESTDIR)$(prefixexecbindir)'; $(am__uninstall_files_from_dir)
+
+mostlyclean-compile:
+       -rm -f *.$(OBJEXT)
+       -rm -f lib/*.$(OBJEXT)
+       -rm -f lib/uniwidth/*.$(OBJEXT)
+       -rm -f src/devices/grodvi/*.$(OBJEXT)
+       -rm -f src/devices/grohtml/*.$(OBJEXT)
+       -rm -f src/devices/grolbp/*.$(OBJEXT)
+       -rm -f src/devices/grolj4/*.$(OBJEXT)
+       -rm -f src/devices/grops/*.$(OBJEXT)
+       -rm -f src/devices/grotty/*.$(OBJEXT)
+       -rm -f src/devices/xditview/*.$(OBJEXT)
+       -rm -f src/libs/libbib/*.$(OBJEXT)
+       -rm -f src/libs/libdriver/*.$(OBJEXT)
+       -rm -f src/libs/libgroff/*.$(OBJEXT)
+       -rm -f src/libs/libxutil/*.$(OBJEXT)
+       -rm -f src/preproc/eqn/*.$(OBJEXT)
+       -rm -f src/preproc/grn/*.$(OBJEXT)
+       -rm -f src/preproc/html/*.$(OBJEXT)
+       -rm -f src/preproc/pic/*.$(OBJEXT)
+       -rm -f src/preproc/preconv/*.$(OBJEXT)
+       -rm -f src/preproc/refer/*.$(OBJEXT)
+       -rm -f src/preproc/soelim/*.$(OBJEXT)
+       -rm -f src/preproc/tbl/*.$(OBJEXT)
+       -rm -f src/roff/groff/*.$(OBJEXT)
+       -rm -f src/roff/troff/*.$(OBJEXT)
+       -rm -f src/utils/addftinfo/*.$(OBJEXT)
+       -rm -f src/utils/hpftodit/*.$(OBJEXT)
+       -rm -f src/utils/indxbib/*.$(OBJEXT)
+       -rm -f src/utils/lkbib/*.$(OBJEXT)
+       -rm -f src/utils/lookbib/*.$(OBJEXT)
+       -rm -f src/utils/pfbtops/*.$(OBJEXT)
+       -rm -f src/utils/tfmtodit/*.$(OBJEXT)
+       -rm -f src/utils/xtotroff/*.$(OBJEXT)
+
+distclean-compile:
+       -rm -f *.tab.c
+
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/asnprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/float.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/fprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/frexp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/frexpl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/fseterr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/isnan.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/isnand.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/isnanf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/isnanl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/itold.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/localcharset.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/math.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/memchr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/printf-args.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/printf-frexp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/printf-frexpl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/printf-parse.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/signbitd.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/signbitf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/signbitl.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/snprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/vasnprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/vsnprintf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/wctype-h.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/wcwidth.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/$(DEPDIR)/xsize.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@lib/uniwidth/$(DEPDIR)/width.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/grodvi/$(DEPDIR)/dvi.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/grohtml/$(DEPDIR)/html-table.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/grohtml/$(DEPDIR)/html-text.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/grohtml/$(DEPDIR)/output.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/grohtml/$(DEPDIR)/post-html.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/grolbp/$(DEPDIR)/lbp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/grolj4/$(DEPDIR)/lj4.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/grops/$(DEPDIR)/ps.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/grops/$(DEPDIR)/psrm.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/grotty/$(DEPDIR)/tty.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/xditview/$(DEPDIR)/gxditview-Dvi.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/xditview/$(DEPDIR)/gxditview-device.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/xditview/$(DEPDIR)/gxditview-draw.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/xditview/$(DEPDIR)/gxditview-font.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/xditview/$(DEPDIR)/gxditview-lex.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/xditview/$(DEPDIR)/gxditview-page.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/xditview/$(DEPDIR)/gxditview-parse.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/devices/xditview/$(DEPDIR)/gxditview-xditview.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libbib/$(DEPDIR)/common.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libbib/$(DEPDIR)/index.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libbib/$(DEPDIR)/linear.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libbib/$(DEPDIR)/map.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libbib/$(DEPDIR)/search.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libdriver/$(DEPDIR)/input.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libdriver/$(DEPDIR)/printer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-assert.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-change_lf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-cmap.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-color.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-cset.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-curtime.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-device.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-errarg.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-error.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-fatal.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-filename.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-font.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-fontfile.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-geometry.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt1.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-glyphuni.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-htmlhint.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-hypot.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-iftoa.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-invalid.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-itoa.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-lf.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-lineno.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-localcharset.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-macropath.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-matherr.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-maxfilename.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-maxpathname.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-mksdir.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-nametoindex.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-new.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-paper.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-prime.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-progname.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-ptable.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-quotearg.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-relocate.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-searchpath.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-spawnvp.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-string.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-strsave.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-symbol.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpfile.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpname.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-unicode.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-uniglyph.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-uniuni.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libgroff/$(DEPDIR)/libgroff_a-version.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libxutil/$(DEPDIR)/libxutil_a-DviChar.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libxutil/$(DEPDIR)/libxutil_a-XFontName.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/libs/libxutil/$(DEPDIR)/libxutil_a-xmalloc.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-box.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-delim.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-eqn.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-lex.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-limit.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-list.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-main.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-mark.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-other.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-over.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-pile.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-script.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-special.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-sqrt.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/eqn/$(DEPDIR)/eqn-text.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/grn/$(DEPDIR)/hdb.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/grn/$(DEPDIR)/hgraph.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/grn/$(DEPDIR)/hpoint.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/grn/$(DEPDIR)/main.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/html/$(DEPDIR)/pre-html.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/html/$(DEPDIR)/pushback.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/pic/$(DEPDIR)/pic-common.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/pic/$(DEPDIR)/pic-lex.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/pic/$(DEPDIR)/pic-main.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/pic/$(DEPDIR)/pic-object.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/pic/$(DEPDIR)/pic-pic.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/pic/$(DEPDIR)/pic-tex.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/pic/$(DEPDIR)/pic-troff.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/preconv/$(DEPDIR)/preconv-preconv.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/refer/$(DEPDIR)/refer-command.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/refer/$(DEPDIR)/refer-label.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/refer/$(DEPDIR)/refer-ref.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/refer/$(DEPDIR)/refer-refer.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/refer/$(DEPDIR)/refer-token.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/soelim/$(DEPDIR)/soelim.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/tbl/$(DEPDIR)/main.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/preproc/tbl/$(DEPDIR)/table.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/roff/groff/$(DEPDIR)/groff.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/roff/groff/$(DEPDIR)/pipeline.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/roff/troff/$(DEPDIR)/dictionary.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/roff/troff/$(DEPDIR)/div.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/roff/troff/$(DEPDIR)/env.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/roff/troff/$(DEPDIR)/input.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/roff/troff/$(DEPDIR)/majorminor.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/roff/troff/$(DEPDIR)/mtsm.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/roff/troff/$(DEPDIR)/node.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/roff/troff/$(DEPDIR)/number.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/roff/troff/$(DEPDIR)/reg.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/addftinfo/$(DEPDIR)/addftinfo.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/addftinfo/$(DEPDIR)/guess.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/hpftodit/$(DEPDIR)/hpftodit.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/hpftodit/$(DEPDIR)/hpuni.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/indxbib/$(DEPDIR)/indxbib.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/indxbib/$(DEPDIR)/signal.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/lkbib/$(DEPDIR)/lkbib.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/lookbib/$(DEPDIR)/lookbib.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/pfbtops/$(DEPDIR)/dummy.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/pfbtops/$(DEPDIR)/pfbtops.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/tfmtodit/$(DEPDIR)/tfmtodit.Po@am__quote@ # am--include-marker
+@AMDEP_TRUE@@am__include@ @am__quote@src/utils/xtotroff/$(DEPDIR)/xtotroff-xtotroff.Po@am__quote@ # am--include-marker
+
+$(am__depfiles_remade):
+       @$(MKDIR_P) $(@D)
+       @echo '# dummy' >$@-t && $(am__mv) $@-t $@
+
+am--depfiles: $(am__depfiles_remade)
+
+.c.o:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
+
+.c.obj:
+@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+src/libs/libgroff/libgroff_a-getopt.o: src/libs/libgroff/getopt.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-getopt.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt.Tpo -c -o src/libs/libgroff/libgroff_a-getopt.o `test -f 'src/libs/libgroff/getopt.c' || echo '$(srcdir)/'`src/libs/libgroff/getopt.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/getopt.c' object='src/libs/libgroff/libgroff_a-getopt.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-getopt.o `test -f 'src/libs/libgroff/getopt.c' || echo '$(srcdir)/'`src/libs/libgroff/getopt.c
+
+src/libs/libgroff/libgroff_a-getopt.obj: src/libs/libgroff/getopt.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-getopt.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt.Tpo -c -o src/libs/libgroff/libgroff_a-getopt.obj `if test -f 'src/libs/libgroff/getopt.c'; then $(CYGPATH_W) 'src/libs/libgroff/getopt.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/getopt.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/getopt.c' object='src/libs/libgroff/libgroff_a-getopt.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-getopt.obj `if test -f 'src/libs/libgroff/getopt.c'; then $(CYGPATH_W) 'src/libs/libgroff/getopt.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/getopt.c'; fi`
+
+src/libs/libgroff/libgroff_a-getopt1.o: src/libs/libgroff/getopt1.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-getopt1.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt1.Tpo -c -o src/libs/libgroff/libgroff_a-getopt1.o `test -f 'src/libs/libgroff/getopt1.c' || echo '$(srcdir)/'`src/libs/libgroff/getopt1.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt1.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/getopt1.c' object='src/libs/libgroff/libgroff_a-getopt1.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-getopt1.o `test -f 'src/libs/libgroff/getopt1.c' || echo '$(srcdir)/'`src/libs/libgroff/getopt1.c
+
+src/libs/libgroff/libgroff_a-getopt1.obj: src/libs/libgroff/getopt1.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-getopt1.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt1.Tpo -c -o src/libs/libgroff/libgroff_a-getopt1.obj `if test -f 'src/libs/libgroff/getopt1.c'; then $(CYGPATH_W) 'src/libs/libgroff/getopt1.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/getopt1.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt1.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt1.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/getopt1.c' object='src/libs/libgroff/libgroff_a-getopt1.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-getopt1.obj `if test -f 'src/libs/libgroff/getopt1.c'; then $(CYGPATH_W) 'src/libs/libgroff/getopt1.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/getopt1.c'; fi`
+
+src/libs/libgroff/libgroff_a-iftoa.o: src/libs/libgroff/iftoa.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-iftoa.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-iftoa.Tpo -c -o src/libs/libgroff/libgroff_a-iftoa.o `test -f 'src/libs/libgroff/iftoa.c' || echo '$(srcdir)/'`src/libs/libgroff/iftoa.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-iftoa.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-iftoa.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/iftoa.c' object='src/libs/libgroff/libgroff_a-iftoa.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-iftoa.o `test -f 'src/libs/libgroff/iftoa.c' || echo '$(srcdir)/'`src/libs/libgroff/iftoa.c
+
+src/libs/libgroff/libgroff_a-iftoa.obj: src/libs/libgroff/iftoa.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-iftoa.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-iftoa.Tpo -c -o src/libs/libgroff/libgroff_a-iftoa.obj `if test -f 'src/libs/libgroff/iftoa.c'; then $(CYGPATH_W) 'src/libs/libgroff/iftoa.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/iftoa.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-iftoa.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-iftoa.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/iftoa.c' object='src/libs/libgroff/libgroff_a-iftoa.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-iftoa.obj `if test -f 'src/libs/libgroff/iftoa.c'; then $(CYGPATH_W) 'src/libs/libgroff/iftoa.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/iftoa.c'; fi`
+
+src/libs/libgroff/libgroff_a-itoa.o: src/libs/libgroff/itoa.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-itoa.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-itoa.Tpo -c -o src/libs/libgroff/libgroff_a-itoa.o `test -f 'src/libs/libgroff/itoa.c' || echo '$(srcdir)/'`src/libs/libgroff/itoa.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-itoa.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-itoa.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/itoa.c' object='src/libs/libgroff/libgroff_a-itoa.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-itoa.o `test -f 'src/libs/libgroff/itoa.c' || echo '$(srcdir)/'`src/libs/libgroff/itoa.c
+
+src/libs/libgroff/libgroff_a-itoa.obj: src/libs/libgroff/itoa.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-itoa.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-itoa.Tpo -c -o src/libs/libgroff/libgroff_a-itoa.obj `if test -f 'src/libs/libgroff/itoa.c'; then $(CYGPATH_W) 'src/libs/libgroff/itoa.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/itoa.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-itoa.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-itoa.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/itoa.c' object='src/libs/libgroff/libgroff_a-itoa.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-itoa.obj `if test -f 'src/libs/libgroff/itoa.c'; then $(CYGPATH_W) 'src/libs/libgroff/itoa.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/itoa.c'; fi`
+
+src/libs/libgroff/libgroff_a-localcharset.o: src/libs/libgroff/localcharset.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-localcharset.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-localcharset.Tpo -c -o src/libs/libgroff/libgroff_a-localcharset.o `test -f 'src/libs/libgroff/localcharset.c' || echo '$(srcdir)/'`src/libs/libgroff/localcharset.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-localcharset.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-localcharset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/localcharset.c' object='src/libs/libgroff/libgroff_a-localcharset.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-localcharset.o `test -f 'src/libs/libgroff/localcharset.c' || echo '$(srcdir)/'`src/libs/libgroff/localcharset.c
+
+src/libs/libgroff/libgroff_a-localcharset.obj: src/libs/libgroff/localcharset.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-localcharset.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-localcharset.Tpo -c -o src/libs/libgroff/libgroff_a-localcharset.obj `if test -f 'src/libs/libgroff/localcharset.c'; then $(CYGPATH_W) 'src/libs/libgroff/localcharset.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/localcharset.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-localcharset.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-localcharset.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/localcharset.c' object='src/libs/libgroff/libgroff_a-localcharset.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-localcharset.obj `if test -f 'src/libs/libgroff/localcharset.c'; then $(CYGPATH_W) 'src/libs/libgroff/localcharset.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/localcharset.c'; fi`
+
+src/libs/libgroff/libgroff_a-matherr.o: src/libs/libgroff/matherr.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-matherr.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-matherr.Tpo -c -o src/libs/libgroff/libgroff_a-matherr.o `test -f 'src/libs/libgroff/matherr.c' || echo '$(srcdir)/'`src/libs/libgroff/matherr.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-matherr.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-matherr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/matherr.c' object='src/libs/libgroff/libgroff_a-matherr.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-matherr.o `test -f 'src/libs/libgroff/matherr.c' || echo '$(srcdir)/'`src/libs/libgroff/matherr.c
+
+src/libs/libgroff/libgroff_a-matherr.obj: src/libs/libgroff/matherr.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-matherr.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-matherr.Tpo -c -o src/libs/libgroff/libgroff_a-matherr.obj `if test -f 'src/libs/libgroff/matherr.c'; then $(CYGPATH_W) 'src/libs/libgroff/matherr.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/matherr.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-matherr.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-matherr.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/matherr.c' object='src/libs/libgroff/libgroff_a-matherr.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-matherr.obj `if test -f 'src/libs/libgroff/matherr.c'; then $(CYGPATH_W) 'src/libs/libgroff/matherr.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/matherr.c'; fi`
+
+src/libs/libgroff/libgroff_a-progname.o: src/libs/libgroff/progname.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-progname.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-progname.Tpo -c -o src/libs/libgroff/libgroff_a-progname.o `test -f 'src/libs/libgroff/progname.c' || echo '$(srcdir)/'`src/libs/libgroff/progname.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-progname.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-progname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/progname.c' object='src/libs/libgroff/libgroff_a-progname.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-progname.o `test -f 'src/libs/libgroff/progname.c' || echo '$(srcdir)/'`src/libs/libgroff/progname.c
+
+src/libs/libgroff/libgroff_a-progname.obj: src/libs/libgroff/progname.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-progname.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-progname.Tpo -c -o src/libs/libgroff/libgroff_a-progname.obj `if test -f 'src/libs/libgroff/progname.c'; then $(CYGPATH_W) 'src/libs/libgroff/progname.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/progname.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-progname.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-progname.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/progname.c' object='src/libs/libgroff/libgroff_a-progname.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-progname.obj `if test -f 'src/libs/libgroff/progname.c'; then $(CYGPATH_W) 'src/libs/libgroff/progname.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/progname.c'; fi`
+
+src/libs/libgroff/libgroff_a-quotearg.o: src/libs/libgroff/quotearg.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-quotearg.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-quotearg.Tpo -c -o src/libs/libgroff/libgroff_a-quotearg.o `test -f 'src/libs/libgroff/quotearg.c' || echo '$(srcdir)/'`src/libs/libgroff/quotearg.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-quotearg.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-quotearg.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/quotearg.c' object='src/libs/libgroff/libgroff_a-quotearg.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-quotearg.o `test -f 'src/libs/libgroff/quotearg.c' || echo '$(srcdir)/'`src/libs/libgroff/quotearg.c
+
+src/libs/libgroff/libgroff_a-quotearg.obj: src/libs/libgroff/quotearg.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-quotearg.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-quotearg.Tpo -c -o src/libs/libgroff/libgroff_a-quotearg.obj `if test -f 'src/libs/libgroff/quotearg.c'; then $(CYGPATH_W) 'src/libs/libgroff/quotearg.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/quotearg.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-quotearg.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-quotearg.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/quotearg.c' object='src/libs/libgroff/libgroff_a-quotearg.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-quotearg.obj `if test -f 'src/libs/libgroff/quotearg.c'; then $(CYGPATH_W) 'src/libs/libgroff/quotearg.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/quotearg.c'; fi`
+
+src/libs/libgroff/libgroff_a-spawnvp.o: src/libs/libgroff/spawnvp.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-spawnvp.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-spawnvp.Tpo -c -o src/libs/libgroff/libgroff_a-spawnvp.o `test -f 'src/libs/libgroff/spawnvp.c' || echo '$(srcdir)/'`src/libs/libgroff/spawnvp.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-spawnvp.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-spawnvp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/spawnvp.c' object='src/libs/libgroff/libgroff_a-spawnvp.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-spawnvp.o `test -f 'src/libs/libgroff/spawnvp.c' || echo '$(srcdir)/'`src/libs/libgroff/spawnvp.c
+
+src/libs/libgroff/libgroff_a-spawnvp.obj: src/libs/libgroff/spawnvp.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libgroff/libgroff_a-spawnvp.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-spawnvp.Tpo -c -o src/libs/libgroff/libgroff_a-spawnvp.obj `if test -f 'src/libs/libgroff/spawnvp.c'; then $(CYGPATH_W) 'src/libs/libgroff/spawnvp.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/spawnvp.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-spawnvp.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-spawnvp.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libgroff/spawnvp.c' object='src/libs/libgroff/libgroff_a-spawnvp.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libgroff/libgroff_a-spawnvp.obj `if test -f 'src/libs/libgroff/spawnvp.c'; then $(CYGPATH_W) 'src/libs/libgroff/spawnvp.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/spawnvp.c'; fi`
+
+src/libs/libxutil/libxutil_a-DviChar.o: src/libs/libxutil/DviChar.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libxutil/libxutil_a-DviChar.o -MD -MP -MF src/libs/libxutil/$(DEPDIR)/libxutil_a-DviChar.Tpo -c -o src/libs/libxutil/libxutil_a-DviChar.o `test -f 'src/libs/libxutil/DviChar.c' || echo '$(srcdir)/'`src/libs/libxutil/DviChar.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libxutil/$(DEPDIR)/libxutil_a-DviChar.Tpo src/libs/libxutil/$(DEPDIR)/libxutil_a-DviChar.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libxutil/DviChar.c' object='src/libs/libxutil/libxutil_a-DviChar.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libxutil/libxutil_a-DviChar.o `test -f 'src/libs/libxutil/DviChar.c' || echo '$(srcdir)/'`src/libs/libxutil/DviChar.c
+
+src/libs/libxutil/libxutil_a-DviChar.obj: src/libs/libxutil/DviChar.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libxutil/libxutil_a-DviChar.obj -MD -MP -MF src/libs/libxutil/$(DEPDIR)/libxutil_a-DviChar.Tpo -c -o src/libs/libxutil/libxutil_a-DviChar.obj `if test -f 'src/libs/libxutil/DviChar.c'; then $(CYGPATH_W) 'src/libs/libxutil/DviChar.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libxutil/DviChar.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libxutil/$(DEPDIR)/libxutil_a-DviChar.Tpo src/libs/libxutil/$(DEPDIR)/libxutil_a-DviChar.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libxutil/DviChar.c' object='src/libs/libxutil/libxutil_a-DviChar.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libxutil/libxutil_a-DviChar.obj `if test -f 'src/libs/libxutil/DviChar.c'; then $(CYGPATH_W) 'src/libs/libxutil/DviChar.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libxutil/DviChar.c'; fi`
+
+src/libs/libxutil/libxutil_a-XFontName.o: src/libs/libxutil/XFontName.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libxutil/libxutil_a-XFontName.o -MD -MP -MF src/libs/libxutil/$(DEPDIR)/libxutil_a-XFontName.Tpo -c -o src/libs/libxutil/libxutil_a-XFontName.o `test -f 'src/libs/libxutil/XFontName.c' || echo '$(srcdir)/'`src/libs/libxutil/XFontName.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libxutil/$(DEPDIR)/libxutil_a-XFontName.Tpo src/libs/libxutil/$(DEPDIR)/libxutil_a-XFontName.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libxutil/XFontName.c' object='src/libs/libxutil/libxutil_a-XFontName.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libxutil/libxutil_a-XFontName.o `test -f 'src/libs/libxutil/XFontName.c' || echo '$(srcdir)/'`src/libs/libxutil/XFontName.c
+
+src/libs/libxutil/libxutil_a-XFontName.obj: src/libs/libxutil/XFontName.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libxutil/libxutil_a-XFontName.obj -MD -MP -MF src/libs/libxutil/$(DEPDIR)/libxutil_a-XFontName.Tpo -c -o src/libs/libxutil/libxutil_a-XFontName.obj `if test -f 'src/libs/libxutil/XFontName.c'; then $(CYGPATH_W) 'src/libs/libxutil/XFontName.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libxutil/XFontName.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libxutil/$(DEPDIR)/libxutil_a-XFontName.Tpo src/libs/libxutil/$(DEPDIR)/libxutil_a-XFontName.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libxutil/XFontName.c' object='src/libs/libxutil/libxutil_a-XFontName.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libxutil/libxutil_a-XFontName.obj `if test -f 'src/libs/libxutil/XFontName.c'; then $(CYGPATH_W) 'src/libs/libxutil/XFontName.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libxutil/XFontName.c'; fi`
+
+src/libs/libxutil/libxutil_a-xmalloc.o: src/libs/libxutil/xmalloc.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libxutil/libxutil_a-xmalloc.o -MD -MP -MF src/libs/libxutil/$(DEPDIR)/libxutil_a-xmalloc.Tpo -c -o src/libs/libxutil/libxutil_a-xmalloc.o `test -f 'src/libs/libxutil/xmalloc.c' || echo '$(srcdir)/'`src/libs/libxutil/xmalloc.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libxutil/$(DEPDIR)/libxutil_a-xmalloc.Tpo src/libs/libxutil/$(DEPDIR)/libxutil_a-xmalloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libxutil/xmalloc.c' object='src/libs/libxutil/libxutil_a-xmalloc.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libxutil/libxutil_a-xmalloc.o `test -f 'src/libs/libxutil/xmalloc.c' || echo '$(srcdir)/'`src/libs/libxutil/xmalloc.c
+
+src/libs/libxutil/libxutil_a-xmalloc.obj: src/libs/libxutil/xmalloc.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/libs/libxutil/libxutil_a-xmalloc.obj -MD -MP -MF src/libs/libxutil/$(DEPDIR)/libxutil_a-xmalloc.Tpo -c -o src/libs/libxutil/libxutil_a-xmalloc.obj `if test -f 'src/libs/libxutil/xmalloc.c'; then $(CYGPATH_W) 'src/libs/libxutil/xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libxutil/xmalloc.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/libs/libxutil/$(DEPDIR)/libxutil_a-xmalloc.Tpo src/libs/libxutil/$(DEPDIR)/libxutil_a-xmalloc.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/libs/libxutil/xmalloc.c' object='src/libs/libxutil/libxutil_a-xmalloc.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libxutil_a_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/libs/libxutil/libxutil_a-xmalloc.obj `if test -f 'src/libs/libxutil/xmalloc.c'; then $(CYGPATH_W) 'src/libs/libxutil/xmalloc.c'; else $(CYGPATH_W) '$(srcdir)/src/libs/libxutil/xmalloc.c'; fi`
+
+src/devices/xditview/gxditview-device.o: src/devices/xditview/device.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-device.o -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-device.Tpo -c -o src/devices/xditview/gxditview-device.o `test -f 'src/devices/xditview/device.c' || echo '$(srcdir)/'`src/devices/xditview/device.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-device.Tpo src/devices/xditview/$(DEPDIR)/gxditview-device.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/device.c' object='src/devices/xditview/gxditview-device.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-device.o `test -f 'src/devices/xditview/device.c' || echo '$(srcdir)/'`src/devices/xditview/device.c
+
+src/devices/xditview/gxditview-device.obj: src/devices/xditview/device.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-device.obj -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-device.Tpo -c -o src/devices/xditview/gxditview-device.obj `if test -f 'src/devices/xditview/device.c'; then $(CYGPATH_W) 'src/devices/xditview/device.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/device.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-device.Tpo src/devices/xditview/$(DEPDIR)/gxditview-device.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/device.c' object='src/devices/xditview/gxditview-device.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-device.obj `if test -f 'src/devices/xditview/device.c'; then $(CYGPATH_W) 'src/devices/xditview/device.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/device.c'; fi`
+
+src/devices/xditview/gxditview-draw.o: src/devices/xditview/draw.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-draw.o -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-draw.Tpo -c -o src/devices/xditview/gxditview-draw.o `test -f 'src/devices/xditview/draw.c' || echo '$(srcdir)/'`src/devices/xditview/draw.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-draw.Tpo src/devices/xditview/$(DEPDIR)/gxditview-draw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/draw.c' object='src/devices/xditview/gxditview-draw.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-draw.o `test -f 'src/devices/xditview/draw.c' || echo '$(srcdir)/'`src/devices/xditview/draw.c
+
+src/devices/xditview/gxditview-draw.obj: src/devices/xditview/draw.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-draw.obj -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-draw.Tpo -c -o src/devices/xditview/gxditview-draw.obj `if test -f 'src/devices/xditview/draw.c'; then $(CYGPATH_W) 'src/devices/xditview/draw.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/draw.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-draw.Tpo src/devices/xditview/$(DEPDIR)/gxditview-draw.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/draw.c' object='src/devices/xditview/gxditview-draw.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-draw.obj `if test -f 'src/devices/xditview/draw.c'; then $(CYGPATH_W) 'src/devices/xditview/draw.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/draw.c'; fi`
+
+src/devices/xditview/gxditview-Dvi.o: src/devices/xditview/Dvi.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-Dvi.o -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-Dvi.Tpo -c -o src/devices/xditview/gxditview-Dvi.o `test -f 'src/devices/xditview/Dvi.c' || echo '$(srcdir)/'`src/devices/xditview/Dvi.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-Dvi.Tpo src/devices/xditview/$(DEPDIR)/gxditview-Dvi.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/Dvi.c' object='src/devices/xditview/gxditview-Dvi.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-Dvi.o `test -f 'src/devices/xditview/Dvi.c' || echo '$(srcdir)/'`src/devices/xditview/Dvi.c
+
+src/devices/xditview/gxditview-Dvi.obj: src/devices/xditview/Dvi.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-Dvi.obj -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-Dvi.Tpo -c -o src/devices/xditview/gxditview-Dvi.obj `if test -f 'src/devices/xditview/Dvi.c'; then $(CYGPATH_W) 'src/devices/xditview/Dvi.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/Dvi.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-Dvi.Tpo src/devices/xditview/$(DEPDIR)/gxditview-Dvi.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/Dvi.c' object='src/devices/xditview/gxditview-Dvi.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-Dvi.obj `if test -f 'src/devices/xditview/Dvi.c'; then $(CYGPATH_W) 'src/devices/xditview/Dvi.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/Dvi.c'; fi`
+
+src/devices/xditview/gxditview-font.o: src/devices/xditview/font.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-font.o -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-font.Tpo -c -o src/devices/xditview/gxditview-font.o `test -f 'src/devices/xditview/font.c' || echo '$(srcdir)/'`src/devices/xditview/font.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-font.Tpo src/devices/xditview/$(DEPDIR)/gxditview-font.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/font.c' object='src/devices/xditview/gxditview-font.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-font.o `test -f 'src/devices/xditview/font.c' || echo '$(srcdir)/'`src/devices/xditview/font.c
+
+src/devices/xditview/gxditview-font.obj: src/devices/xditview/font.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-font.obj -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-font.Tpo -c -o src/devices/xditview/gxditview-font.obj `if test -f 'src/devices/xditview/font.c'; then $(CYGPATH_W) 'src/devices/xditview/font.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/font.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-font.Tpo src/devices/xditview/$(DEPDIR)/gxditview-font.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/font.c' object='src/devices/xditview/gxditview-font.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-font.obj `if test -f 'src/devices/xditview/font.c'; then $(CYGPATH_W) 'src/devices/xditview/font.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/font.c'; fi`
+
+src/devices/xditview/gxditview-lex.o: src/devices/xditview/lex.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-lex.o -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-lex.Tpo -c -o src/devices/xditview/gxditview-lex.o `test -f 'src/devices/xditview/lex.c' || echo '$(srcdir)/'`src/devices/xditview/lex.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-lex.Tpo src/devices/xditview/$(DEPDIR)/gxditview-lex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/lex.c' object='src/devices/xditview/gxditview-lex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-lex.o `test -f 'src/devices/xditview/lex.c' || echo '$(srcdir)/'`src/devices/xditview/lex.c
+
+src/devices/xditview/gxditview-lex.obj: src/devices/xditview/lex.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-lex.obj -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-lex.Tpo -c -o src/devices/xditview/gxditview-lex.obj `if test -f 'src/devices/xditview/lex.c'; then $(CYGPATH_W) 'src/devices/xditview/lex.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/lex.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-lex.Tpo src/devices/xditview/$(DEPDIR)/gxditview-lex.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/lex.c' object='src/devices/xditview/gxditview-lex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-lex.obj `if test -f 'src/devices/xditview/lex.c'; then $(CYGPATH_W) 'src/devices/xditview/lex.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/lex.c'; fi`
+
+src/devices/xditview/gxditview-page.o: src/devices/xditview/page.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-page.o -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-page.Tpo -c -o src/devices/xditview/gxditview-page.o `test -f 'src/devices/xditview/page.c' || echo '$(srcdir)/'`src/devices/xditview/page.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-page.Tpo src/devices/xditview/$(DEPDIR)/gxditview-page.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/page.c' object='src/devices/xditview/gxditview-page.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-page.o `test -f 'src/devices/xditview/page.c' || echo '$(srcdir)/'`src/devices/xditview/page.c
+
+src/devices/xditview/gxditview-page.obj: src/devices/xditview/page.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-page.obj -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-page.Tpo -c -o src/devices/xditview/gxditview-page.obj `if test -f 'src/devices/xditview/page.c'; then $(CYGPATH_W) 'src/devices/xditview/page.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/page.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-page.Tpo src/devices/xditview/$(DEPDIR)/gxditview-page.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/page.c' object='src/devices/xditview/gxditview-page.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-page.obj `if test -f 'src/devices/xditview/page.c'; then $(CYGPATH_W) 'src/devices/xditview/page.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/page.c'; fi`
+
+src/devices/xditview/gxditview-parse.o: src/devices/xditview/parse.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-parse.o -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-parse.Tpo -c -o src/devices/xditview/gxditview-parse.o `test -f 'src/devices/xditview/parse.c' || echo '$(srcdir)/'`src/devices/xditview/parse.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-parse.Tpo src/devices/xditview/$(DEPDIR)/gxditview-parse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/parse.c' object='src/devices/xditview/gxditview-parse.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-parse.o `test -f 'src/devices/xditview/parse.c' || echo '$(srcdir)/'`src/devices/xditview/parse.c
+
+src/devices/xditview/gxditview-parse.obj: src/devices/xditview/parse.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-parse.obj -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-parse.Tpo -c -o src/devices/xditview/gxditview-parse.obj `if test -f 'src/devices/xditview/parse.c'; then $(CYGPATH_W) 'src/devices/xditview/parse.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/parse.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-parse.Tpo src/devices/xditview/$(DEPDIR)/gxditview-parse.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/parse.c' object='src/devices/xditview/gxditview-parse.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-parse.obj `if test -f 'src/devices/xditview/parse.c'; then $(CYGPATH_W) 'src/devices/xditview/parse.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/parse.c'; fi`
+
+src/devices/xditview/gxditview-xditview.o: src/devices/xditview/xditview.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-xditview.o -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-xditview.Tpo -c -o src/devices/xditview/gxditview-xditview.o `test -f 'src/devices/xditview/xditview.c' || echo '$(srcdir)/'`src/devices/xditview/xditview.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-xditview.Tpo src/devices/xditview/$(DEPDIR)/gxditview-xditview.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/xditview.c' object='src/devices/xditview/gxditview-xditview.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-xditview.o `test -f 'src/devices/xditview/xditview.c' || echo '$(srcdir)/'`src/devices/xditview/xditview.c
+
+src/devices/xditview/gxditview-xditview.obj: src/devices/xditview/xditview.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/devices/xditview/gxditview-xditview.obj -MD -MP -MF src/devices/xditview/$(DEPDIR)/gxditview-xditview.Tpo -c -o src/devices/xditview/gxditview-xditview.obj `if test -f 'src/devices/xditview/xditview.c'; then $(CYGPATH_W) 'src/devices/xditview/xditview.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/xditview.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/devices/xditview/$(DEPDIR)/gxditview-xditview.Tpo src/devices/xditview/$(DEPDIR)/gxditview-xditview.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/devices/xditview/xditview.c' object='src/devices/xditview/gxditview-xditview.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(gxditview_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/devices/xditview/gxditview-xditview.obj `if test -f 'src/devices/xditview/xditview.c'; then $(CYGPATH_W) 'src/devices/xditview/xditview.c'; else $(CYGPATH_W) '$(srcdir)/src/devices/xditview/xditview.c'; fi`
+
+src/utils/xtotroff/xtotroff-xtotroff.o: src/utils/xtotroff/xtotroff.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtotroff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/utils/xtotroff/xtotroff-xtotroff.o -MD -MP -MF src/utils/xtotroff/$(DEPDIR)/xtotroff-xtotroff.Tpo -c -o src/utils/xtotroff/xtotroff-xtotroff.o `test -f 'src/utils/xtotroff/xtotroff.c' || echo '$(srcdir)/'`src/utils/xtotroff/xtotroff.c
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/utils/xtotroff/$(DEPDIR)/xtotroff-xtotroff.Tpo src/utils/xtotroff/$(DEPDIR)/xtotroff-xtotroff.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/utils/xtotroff/xtotroff.c' object='src/utils/xtotroff/xtotroff-xtotroff.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtotroff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/utils/xtotroff/xtotroff-xtotroff.o `test -f 'src/utils/xtotroff/xtotroff.c' || echo '$(srcdir)/'`src/utils/xtotroff/xtotroff.c
+
+src/utils/xtotroff/xtotroff-xtotroff.obj: src/utils/xtotroff/xtotroff.c
+@am__fastdepCC_TRUE@   $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtotroff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT src/utils/xtotroff/xtotroff-xtotroff.obj -MD -MP -MF src/utils/xtotroff/$(DEPDIR)/xtotroff-xtotroff.Tpo -c -o src/utils/xtotroff/xtotroff-xtotroff.obj `if test -f 'src/utils/xtotroff/xtotroff.c'; then $(CYGPATH_W) 'src/utils/xtotroff/xtotroff.c'; else $(CYGPATH_W) '$(srcdir)/src/utils/xtotroff/xtotroff.c'; fi`
+@am__fastdepCC_TRUE@   $(AM_V_at)$(am__mv) src/utils/xtotroff/$(DEPDIR)/xtotroff-xtotroff.Tpo src/utils/xtotroff/$(DEPDIR)/xtotroff-xtotroff.Po
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='src/utils/xtotroff/xtotroff.c' object='src/utils/xtotroff/xtotroff-xtotroff.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(xtotroff_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o src/utils/xtotroff/xtotroff-xtotroff.obj `if test -f 'src/utils/xtotroff/xtotroff.c'; then $(CYGPATH_W) 'src/utils/xtotroff/xtotroff.c'; else $(CYGPATH_W) '$(srcdir)/src/utils/xtotroff/xtotroff.c'; fi`
+
+.cpp.o:
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
+@am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
+@am__fastdepCXX_TRUE@  $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ $<
+
+.cpp.obj:
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
+@am__fastdepCXX_TRUE@  $(CXXCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
+@am__fastdepCXX_TRUE@  $(am__mv) $$depbase.Tpo $$depbase.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXXCOMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
+
+src/libs/libgroff/libgroff_a-assert.o: src/libs/libgroff/assert.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-assert.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-assert.Tpo -c -o src/libs/libgroff/libgroff_a-assert.o `test -f 'src/libs/libgroff/assert.cpp' || echo '$(srcdir)/'`src/libs/libgroff/assert.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-assert.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-assert.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/assert.cpp' object='src/libs/libgroff/libgroff_a-assert.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-assert.o `test -f 'src/libs/libgroff/assert.cpp' || echo '$(srcdir)/'`src/libs/libgroff/assert.cpp
+
+src/libs/libgroff/libgroff_a-assert.obj: src/libs/libgroff/assert.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-assert.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-assert.Tpo -c -o src/libs/libgroff/libgroff_a-assert.obj `if test -f 'src/libs/libgroff/assert.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/assert.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/assert.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-assert.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-assert.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/assert.cpp' object='src/libs/libgroff/libgroff_a-assert.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-assert.obj `if test -f 'src/libs/libgroff/assert.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/assert.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/assert.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-change_lf.o: src/libs/libgroff/change_lf.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-change_lf.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-change_lf.Tpo -c -o src/libs/libgroff/libgroff_a-change_lf.o `test -f 'src/libs/libgroff/change_lf.cpp' || echo '$(srcdir)/'`src/libs/libgroff/change_lf.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-change_lf.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-change_lf.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/change_lf.cpp' object='src/libs/libgroff/libgroff_a-change_lf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-change_lf.o `test -f 'src/libs/libgroff/change_lf.cpp' || echo '$(srcdir)/'`src/libs/libgroff/change_lf.cpp
+
+src/libs/libgroff/libgroff_a-change_lf.obj: src/libs/libgroff/change_lf.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-change_lf.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-change_lf.Tpo -c -o src/libs/libgroff/libgroff_a-change_lf.obj `if test -f 'src/libs/libgroff/change_lf.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/change_lf.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/change_lf.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-change_lf.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-change_lf.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/change_lf.cpp' object='src/libs/libgroff/libgroff_a-change_lf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-change_lf.obj `if test -f 'src/libs/libgroff/change_lf.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/change_lf.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/change_lf.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-cmap.o: src/libs/libgroff/cmap.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-cmap.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-cmap.Tpo -c -o src/libs/libgroff/libgroff_a-cmap.o `test -f 'src/libs/libgroff/cmap.cpp' || echo '$(srcdir)/'`src/libs/libgroff/cmap.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-cmap.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-cmap.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/cmap.cpp' object='src/libs/libgroff/libgroff_a-cmap.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-cmap.o `test -f 'src/libs/libgroff/cmap.cpp' || echo '$(srcdir)/'`src/libs/libgroff/cmap.cpp
+
+src/libs/libgroff/libgroff_a-cmap.obj: src/libs/libgroff/cmap.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-cmap.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-cmap.Tpo -c -o src/libs/libgroff/libgroff_a-cmap.obj `if test -f 'src/libs/libgroff/cmap.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/cmap.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/cmap.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-cmap.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-cmap.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/cmap.cpp' object='src/libs/libgroff/libgroff_a-cmap.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-cmap.obj `if test -f 'src/libs/libgroff/cmap.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/cmap.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/cmap.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-color.o: src/libs/libgroff/color.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-color.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-color.Tpo -c -o src/libs/libgroff/libgroff_a-color.o `test -f 'src/libs/libgroff/color.cpp' || echo '$(srcdir)/'`src/libs/libgroff/color.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-color.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-color.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/color.cpp' object='src/libs/libgroff/libgroff_a-color.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-color.o `test -f 'src/libs/libgroff/color.cpp' || echo '$(srcdir)/'`src/libs/libgroff/color.cpp
+
+src/libs/libgroff/libgroff_a-color.obj: src/libs/libgroff/color.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-color.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-color.Tpo -c -o src/libs/libgroff/libgroff_a-color.obj `if test -f 'src/libs/libgroff/color.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/color.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/color.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-color.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-color.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/color.cpp' object='src/libs/libgroff/libgroff_a-color.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-color.obj `if test -f 'src/libs/libgroff/color.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/color.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/color.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-cset.o: src/libs/libgroff/cset.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-cset.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-cset.Tpo -c -o src/libs/libgroff/libgroff_a-cset.o `test -f 'src/libs/libgroff/cset.cpp' || echo '$(srcdir)/'`src/libs/libgroff/cset.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-cset.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-cset.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/cset.cpp' object='src/libs/libgroff/libgroff_a-cset.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-cset.o `test -f 'src/libs/libgroff/cset.cpp' || echo '$(srcdir)/'`src/libs/libgroff/cset.cpp
+
+src/libs/libgroff/libgroff_a-cset.obj: src/libs/libgroff/cset.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-cset.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-cset.Tpo -c -o src/libs/libgroff/libgroff_a-cset.obj `if test -f 'src/libs/libgroff/cset.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/cset.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/cset.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-cset.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-cset.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/cset.cpp' object='src/libs/libgroff/libgroff_a-cset.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-cset.obj `if test -f 'src/libs/libgroff/cset.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/cset.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/cset.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-curtime.o: src/libs/libgroff/curtime.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-curtime.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-curtime.Tpo -c -o src/libs/libgroff/libgroff_a-curtime.o `test -f 'src/libs/libgroff/curtime.cpp' || echo '$(srcdir)/'`src/libs/libgroff/curtime.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-curtime.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-curtime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/curtime.cpp' object='src/libs/libgroff/libgroff_a-curtime.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-curtime.o `test -f 'src/libs/libgroff/curtime.cpp' || echo '$(srcdir)/'`src/libs/libgroff/curtime.cpp
+
+src/libs/libgroff/libgroff_a-curtime.obj: src/libs/libgroff/curtime.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-curtime.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-curtime.Tpo -c -o src/libs/libgroff/libgroff_a-curtime.obj `if test -f 'src/libs/libgroff/curtime.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/curtime.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/curtime.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-curtime.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-curtime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/curtime.cpp' object='src/libs/libgroff/libgroff_a-curtime.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-curtime.obj `if test -f 'src/libs/libgroff/curtime.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/curtime.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/curtime.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-device.o: src/libs/libgroff/device.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-device.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-device.Tpo -c -o src/libs/libgroff/libgroff_a-device.o `test -f 'src/libs/libgroff/device.cpp' || echo '$(srcdir)/'`src/libs/libgroff/device.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-device.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-device.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/device.cpp' object='src/libs/libgroff/libgroff_a-device.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-device.o `test -f 'src/libs/libgroff/device.cpp' || echo '$(srcdir)/'`src/libs/libgroff/device.cpp
+
+src/libs/libgroff/libgroff_a-device.obj: src/libs/libgroff/device.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-device.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-device.Tpo -c -o src/libs/libgroff/libgroff_a-device.obj `if test -f 'src/libs/libgroff/device.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/device.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/device.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-device.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-device.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/device.cpp' object='src/libs/libgroff/libgroff_a-device.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-device.obj `if test -f 'src/libs/libgroff/device.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/device.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/device.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-errarg.o: src/libs/libgroff/errarg.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-errarg.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-errarg.Tpo -c -o src/libs/libgroff/libgroff_a-errarg.o `test -f 'src/libs/libgroff/errarg.cpp' || echo '$(srcdir)/'`src/libs/libgroff/errarg.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-errarg.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-errarg.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/errarg.cpp' object='src/libs/libgroff/libgroff_a-errarg.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-errarg.o `test -f 'src/libs/libgroff/errarg.cpp' || echo '$(srcdir)/'`src/libs/libgroff/errarg.cpp
+
+src/libs/libgroff/libgroff_a-errarg.obj: src/libs/libgroff/errarg.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-errarg.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-errarg.Tpo -c -o src/libs/libgroff/libgroff_a-errarg.obj `if test -f 'src/libs/libgroff/errarg.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/errarg.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/errarg.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-errarg.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-errarg.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/errarg.cpp' object='src/libs/libgroff/libgroff_a-errarg.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-errarg.obj `if test -f 'src/libs/libgroff/errarg.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/errarg.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/errarg.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-error.o: src/libs/libgroff/error.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-error.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-error.Tpo -c -o src/libs/libgroff/libgroff_a-error.o `test -f 'src/libs/libgroff/error.cpp' || echo '$(srcdir)/'`src/libs/libgroff/error.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-error.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-error.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/error.cpp' object='src/libs/libgroff/libgroff_a-error.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-error.o `test -f 'src/libs/libgroff/error.cpp' || echo '$(srcdir)/'`src/libs/libgroff/error.cpp
+
+src/libs/libgroff/libgroff_a-error.obj: src/libs/libgroff/error.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-error.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-error.Tpo -c -o src/libs/libgroff/libgroff_a-error.obj `if test -f 'src/libs/libgroff/error.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/error.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/error.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-error.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-error.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/error.cpp' object='src/libs/libgroff/libgroff_a-error.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-error.obj `if test -f 'src/libs/libgroff/error.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/error.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/error.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-fatal.o: src/libs/libgroff/fatal.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-fatal.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-fatal.Tpo -c -o src/libs/libgroff/libgroff_a-fatal.o `test -f 'src/libs/libgroff/fatal.cpp' || echo '$(srcdir)/'`src/libs/libgroff/fatal.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-fatal.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-fatal.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/fatal.cpp' object='src/libs/libgroff/libgroff_a-fatal.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-fatal.o `test -f 'src/libs/libgroff/fatal.cpp' || echo '$(srcdir)/'`src/libs/libgroff/fatal.cpp
+
+src/libs/libgroff/libgroff_a-fatal.obj: src/libs/libgroff/fatal.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-fatal.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-fatal.Tpo -c -o src/libs/libgroff/libgroff_a-fatal.obj `if test -f 'src/libs/libgroff/fatal.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/fatal.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/fatal.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-fatal.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-fatal.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/fatal.cpp' object='src/libs/libgroff/libgroff_a-fatal.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-fatal.obj `if test -f 'src/libs/libgroff/fatal.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/fatal.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/fatal.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-filename.o: src/libs/libgroff/filename.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-filename.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-filename.Tpo -c -o src/libs/libgroff/libgroff_a-filename.o `test -f 'src/libs/libgroff/filename.cpp' || echo '$(srcdir)/'`src/libs/libgroff/filename.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-filename.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-filename.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/filename.cpp' object='src/libs/libgroff/libgroff_a-filename.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-filename.o `test -f 'src/libs/libgroff/filename.cpp' || echo '$(srcdir)/'`src/libs/libgroff/filename.cpp
+
+src/libs/libgroff/libgroff_a-filename.obj: src/libs/libgroff/filename.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-filename.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-filename.Tpo -c -o src/libs/libgroff/libgroff_a-filename.obj `if test -f 'src/libs/libgroff/filename.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/filename.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/filename.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-filename.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-filename.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/filename.cpp' object='src/libs/libgroff/libgroff_a-filename.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-filename.obj `if test -f 'src/libs/libgroff/filename.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/filename.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/filename.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-font.o: src/libs/libgroff/font.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-font.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-font.Tpo -c -o src/libs/libgroff/libgroff_a-font.o `test -f 'src/libs/libgroff/font.cpp' || echo '$(srcdir)/'`src/libs/libgroff/font.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-font.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-font.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/font.cpp' object='src/libs/libgroff/libgroff_a-font.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-font.o `test -f 'src/libs/libgroff/font.cpp' || echo '$(srcdir)/'`src/libs/libgroff/font.cpp
+
+src/libs/libgroff/libgroff_a-font.obj: src/libs/libgroff/font.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-font.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-font.Tpo -c -o src/libs/libgroff/libgroff_a-font.obj `if test -f 'src/libs/libgroff/font.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/font.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/font.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-font.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-font.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/font.cpp' object='src/libs/libgroff/libgroff_a-font.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-font.obj `if test -f 'src/libs/libgroff/font.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/font.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/font.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-fontfile.o: src/libs/libgroff/fontfile.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-fontfile.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-fontfile.Tpo -c -o src/libs/libgroff/libgroff_a-fontfile.o `test -f 'src/libs/libgroff/fontfile.cpp' || echo '$(srcdir)/'`src/libs/libgroff/fontfile.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-fontfile.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-fontfile.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/fontfile.cpp' object='src/libs/libgroff/libgroff_a-fontfile.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-fontfile.o `test -f 'src/libs/libgroff/fontfile.cpp' || echo '$(srcdir)/'`src/libs/libgroff/fontfile.cpp
+
+src/libs/libgroff/libgroff_a-fontfile.obj: src/libs/libgroff/fontfile.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-fontfile.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-fontfile.Tpo -c -o src/libs/libgroff/libgroff_a-fontfile.obj `if test -f 'src/libs/libgroff/fontfile.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/fontfile.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/fontfile.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-fontfile.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-fontfile.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/fontfile.cpp' object='src/libs/libgroff/libgroff_a-fontfile.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-fontfile.obj `if test -f 'src/libs/libgroff/fontfile.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/fontfile.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/fontfile.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-geometry.o: src/libs/libgroff/geometry.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-geometry.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-geometry.Tpo -c -o src/libs/libgroff/libgroff_a-geometry.o `test -f 'src/libs/libgroff/geometry.cpp' || echo '$(srcdir)/'`src/libs/libgroff/geometry.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-geometry.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-geometry.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/geometry.cpp' object='src/libs/libgroff/libgroff_a-geometry.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-geometry.o `test -f 'src/libs/libgroff/geometry.cpp' || echo '$(srcdir)/'`src/libs/libgroff/geometry.cpp
+
+src/libs/libgroff/libgroff_a-geometry.obj: src/libs/libgroff/geometry.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-geometry.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-geometry.Tpo -c -o src/libs/libgroff/libgroff_a-geometry.obj `if test -f 'src/libs/libgroff/geometry.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/geometry.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/geometry.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-geometry.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-geometry.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/geometry.cpp' object='src/libs/libgroff/libgroff_a-geometry.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-geometry.obj `if test -f 'src/libs/libgroff/geometry.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/geometry.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/geometry.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-glyphuni.o: src/libs/libgroff/glyphuni.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-glyphuni.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-glyphuni.Tpo -c -o src/libs/libgroff/libgroff_a-glyphuni.o `test -f 'src/libs/libgroff/glyphuni.cpp' || echo '$(srcdir)/'`src/libs/libgroff/glyphuni.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-glyphuni.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-glyphuni.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/glyphuni.cpp' object='src/libs/libgroff/libgroff_a-glyphuni.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-glyphuni.o `test -f 'src/libs/libgroff/glyphuni.cpp' || echo '$(srcdir)/'`src/libs/libgroff/glyphuni.cpp
+
+src/libs/libgroff/libgroff_a-glyphuni.obj: src/libs/libgroff/glyphuni.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-glyphuni.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-glyphuni.Tpo -c -o src/libs/libgroff/libgroff_a-glyphuni.obj `if test -f 'src/libs/libgroff/glyphuni.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/glyphuni.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/glyphuni.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-glyphuni.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-glyphuni.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/glyphuni.cpp' object='src/libs/libgroff/libgroff_a-glyphuni.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-glyphuni.obj `if test -f 'src/libs/libgroff/glyphuni.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/glyphuni.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/glyphuni.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-htmlhint.o: src/libs/libgroff/htmlhint.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-htmlhint.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-htmlhint.Tpo -c -o src/libs/libgroff/libgroff_a-htmlhint.o `test -f 'src/libs/libgroff/htmlhint.cpp' || echo '$(srcdir)/'`src/libs/libgroff/htmlhint.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-htmlhint.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-htmlhint.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/htmlhint.cpp' object='src/libs/libgroff/libgroff_a-htmlhint.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-htmlhint.o `test -f 'src/libs/libgroff/htmlhint.cpp' || echo '$(srcdir)/'`src/libs/libgroff/htmlhint.cpp
+
+src/libs/libgroff/libgroff_a-htmlhint.obj: src/libs/libgroff/htmlhint.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-htmlhint.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-htmlhint.Tpo -c -o src/libs/libgroff/libgroff_a-htmlhint.obj `if test -f 'src/libs/libgroff/htmlhint.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/htmlhint.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/htmlhint.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-htmlhint.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-htmlhint.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/htmlhint.cpp' object='src/libs/libgroff/libgroff_a-htmlhint.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-htmlhint.obj `if test -f 'src/libs/libgroff/htmlhint.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/htmlhint.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/htmlhint.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-hypot.o: src/libs/libgroff/hypot.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-hypot.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-hypot.Tpo -c -o src/libs/libgroff/libgroff_a-hypot.o `test -f 'src/libs/libgroff/hypot.cpp' || echo '$(srcdir)/'`src/libs/libgroff/hypot.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-hypot.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-hypot.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/hypot.cpp' object='src/libs/libgroff/libgroff_a-hypot.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-hypot.o `test -f 'src/libs/libgroff/hypot.cpp' || echo '$(srcdir)/'`src/libs/libgroff/hypot.cpp
+
+src/libs/libgroff/libgroff_a-hypot.obj: src/libs/libgroff/hypot.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-hypot.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-hypot.Tpo -c -o src/libs/libgroff/libgroff_a-hypot.obj `if test -f 'src/libs/libgroff/hypot.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/hypot.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/hypot.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-hypot.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-hypot.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/hypot.cpp' object='src/libs/libgroff/libgroff_a-hypot.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-hypot.obj `if test -f 'src/libs/libgroff/hypot.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/hypot.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/hypot.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-invalid.o: src/libs/libgroff/invalid.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-invalid.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-invalid.Tpo -c -o src/libs/libgroff/libgroff_a-invalid.o `test -f 'src/libs/libgroff/invalid.cpp' || echo '$(srcdir)/'`src/libs/libgroff/invalid.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-invalid.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-invalid.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/invalid.cpp' object='src/libs/libgroff/libgroff_a-invalid.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-invalid.o `test -f 'src/libs/libgroff/invalid.cpp' || echo '$(srcdir)/'`src/libs/libgroff/invalid.cpp
+
+src/libs/libgroff/libgroff_a-invalid.obj: src/libs/libgroff/invalid.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-invalid.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-invalid.Tpo -c -o src/libs/libgroff/libgroff_a-invalid.obj `if test -f 'src/libs/libgroff/invalid.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/invalid.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/invalid.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-invalid.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-invalid.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/invalid.cpp' object='src/libs/libgroff/libgroff_a-invalid.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-invalid.obj `if test -f 'src/libs/libgroff/invalid.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/invalid.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/invalid.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-lf.o: src/libs/libgroff/lf.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-lf.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-lf.Tpo -c -o src/libs/libgroff/libgroff_a-lf.o `test -f 'src/libs/libgroff/lf.cpp' || echo '$(srcdir)/'`src/libs/libgroff/lf.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-lf.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-lf.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/lf.cpp' object='src/libs/libgroff/libgroff_a-lf.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-lf.o `test -f 'src/libs/libgroff/lf.cpp' || echo '$(srcdir)/'`src/libs/libgroff/lf.cpp
+
+src/libs/libgroff/libgroff_a-lf.obj: src/libs/libgroff/lf.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-lf.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-lf.Tpo -c -o src/libs/libgroff/libgroff_a-lf.obj `if test -f 'src/libs/libgroff/lf.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/lf.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/lf.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-lf.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-lf.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/lf.cpp' object='src/libs/libgroff/libgroff_a-lf.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-lf.obj `if test -f 'src/libs/libgroff/lf.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/lf.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/lf.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-lineno.o: src/libs/libgroff/lineno.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-lineno.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-lineno.Tpo -c -o src/libs/libgroff/libgroff_a-lineno.o `test -f 'src/libs/libgroff/lineno.cpp' || echo '$(srcdir)/'`src/libs/libgroff/lineno.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-lineno.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-lineno.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/lineno.cpp' object='src/libs/libgroff/libgroff_a-lineno.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-lineno.o `test -f 'src/libs/libgroff/lineno.cpp' || echo '$(srcdir)/'`src/libs/libgroff/lineno.cpp
+
+src/libs/libgroff/libgroff_a-lineno.obj: src/libs/libgroff/lineno.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-lineno.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-lineno.Tpo -c -o src/libs/libgroff/libgroff_a-lineno.obj `if test -f 'src/libs/libgroff/lineno.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/lineno.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/lineno.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-lineno.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-lineno.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/lineno.cpp' object='src/libs/libgroff/libgroff_a-lineno.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-lineno.obj `if test -f 'src/libs/libgroff/lineno.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/lineno.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/lineno.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-macropath.o: src/libs/libgroff/macropath.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-macropath.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-macropath.Tpo -c -o src/libs/libgroff/libgroff_a-macropath.o `test -f 'src/libs/libgroff/macropath.cpp' || echo '$(srcdir)/'`src/libs/libgroff/macropath.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-macropath.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-macropath.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/macropath.cpp' object='src/libs/libgroff/libgroff_a-macropath.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-macropath.o `test -f 'src/libs/libgroff/macropath.cpp' || echo '$(srcdir)/'`src/libs/libgroff/macropath.cpp
+
+src/libs/libgroff/libgroff_a-macropath.obj: src/libs/libgroff/macropath.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-macropath.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-macropath.Tpo -c -o src/libs/libgroff/libgroff_a-macropath.obj `if test -f 'src/libs/libgroff/macropath.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/macropath.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/macropath.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-macropath.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-macropath.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/macropath.cpp' object='src/libs/libgroff/libgroff_a-macropath.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-macropath.obj `if test -f 'src/libs/libgroff/macropath.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/macropath.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/macropath.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-maxfilename.o: src/libs/libgroff/maxfilename.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-maxfilename.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-maxfilename.Tpo -c -o src/libs/libgroff/libgroff_a-maxfilename.o `test -f 'src/libs/libgroff/maxfilename.cpp' || echo '$(srcdir)/'`src/libs/libgroff/maxfilename.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-maxfilename.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-maxfilename.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/maxfilename.cpp' object='src/libs/libgroff/libgroff_a-maxfilename.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-maxfilename.o `test -f 'src/libs/libgroff/maxfilename.cpp' || echo '$(srcdir)/'`src/libs/libgroff/maxfilename.cpp
+
+src/libs/libgroff/libgroff_a-maxfilename.obj: src/libs/libgroff/maxfilename.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-maxfilename.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-maxfilename.Tpo -c -o src/libs/libgroff/libgroff_a-maxfilename.obj `if test -f 'src/libs/libgroff/maxfilename.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/maxfilename.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/maxfilename.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-maxfilename.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-maxfilename.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/maxfilename.cpp' object='src/libs/libgroff/libgroff_a-maxfilename.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-maxfilename.obj `if test -f 'src/libs/libgroff/maxfilename.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/maxfilename.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/maxfilename.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-maxpathname.o: src/libs/libgroff/maxpathname.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-maxpathname.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-maxpathname.Tpo -c -o src/libs/libgroff/libgroff_a-maxpathname.o `test -f 'src/libs/libgroff/maxpathname.cpp' || echo '$(srcdir)/'`src/libs/libgroff/maxpathname.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-maxpathname.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-maxpathname.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/maxpathname.cpp' object='src/libs/libgroff/libgroff_a-maxpathname.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-maxpathname.o `test -f 'src/libs/libgroff/maxpathname.cpp' || echo '$(srcdir)/'`src/libs/libgroff/maxpathname.cpp
+
+src/libs/libgroff/libgroff_a-maxpathname.obj: src/libs/libgroff/maxpathname.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-maxpathname.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-maxpathname.Tpo -c -o src/libs/libgroff/libgroff_a-maxpathname.obj `if test -f 'src/libs/libgroff/maxpathname.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/maxpathname.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/maxpathname.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-maxpathname.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-maxpathname.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/maxpathname.cpp' object='src/libs/libgroff/libgroff_a-maxpathname.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-maxpathname.obj `if test -f 'src/libs/libgroff/maxpathname.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/maxpathname.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/maxpathname.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-mksdir.o: src/libs/libgroff/mksdir.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-mksdir.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-mksdir.Tpo -c -o src/libs/libgroff/libgroff_a-mksdir.o `test -f 'src/libs/libgroff/mksdir.cpp' || echo '$(srcdir)/'`src/libs/libgroff/mksdir.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-mksdir.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-mksdir.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/mksdir.cpp' object='src/libs/libgroff/libgroff_a-mksdir.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-mksdir.o `test -f 'src/libs/libgroff/mksdir.cpp' || echo '$(srcdir)/'`src/libs/libgroff/mksdir.cpp
+
+src/libs/libgroff/libgroff_a-mksdir.obj: src/libs/libgroff/mksdir.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-mksdir.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-mksdir.Tpo -c -o src/libs/libgroff/libgroff_a-mksdir.obj `if test -f 'src/libs/libgroff/mksdir.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/mksdir.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/mksdir.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-mksdir.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-mksdir.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/mksdir.cpp' object='src/libs/libgroff/libgroff_a-mksdir.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-mksdir.obj `if test -f 'src/libs/libgroff/mksdir.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/mksdir.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/mksdir.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-nametoindex.o: src/libs/libgroff/nametoindex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-nametoindex.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-nametoindex.Tpo -c -o src/libs/libgroff/libgroff_a-nametoindex.o `test -f 'src/libs/libgroff/nametoindex.cpp' || echo '$(srcdir)/'`src/libs/libgroff/nametoindex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-nametoindex.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-nametoindex.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/nametoindex.cpp' object='src/libs/libgroff/libgroff_a-nametoindex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-nametoindex.o `test -f 'src/libs/libgroff/nametoindex.cpp' || echo '$(srcdir)/'`src/libs/libgroff/nametoindex.cpp
+
+src/libs/libgroff/libgroff_a-nametoindex.obj: src/libs/libgroff/nametoindex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-nametoindex.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-nametoindex.Tpo -c -o src/libs/libgroff/libgroff_a-nametoindex.obj `if test -f 'src/libs/libgroff/nametoindex.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/nametoindex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/nametoindex.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-nametoindex.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-nametoindex.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/nametoindex.cpp' object='src/libs/libgroff/libgroff_a-nametoindex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-nametoindex.obj `if test -f 'src/libs/libgroff/nametoindex.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/nametoindex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/nametoindex.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-new.o: src/libs/libgroff/new.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-new.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-new.Tpo -c -o src/libs/libgroff/libgroff_a-new.o `test -f 'src/libs/libgroff/new.cpp' || echo '$(srcdir)/'`src/libs/libgroff/new.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-new.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-new.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/new.cpp' object='src/libs/libgroff/libgroff_a-new.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-new.o `test -f 'src/libs/libgroff/new.cpp' || echo '$(srcdir)/'`src/libs/libgroff/new.cpp
+
+src/libs/libgroff/libgroff_a-new.obj: src/libs/libgroff/new.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-new.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-new.Tpo -c -o src/libs/libgroff/libgroff_a-new.obj `if test -f 'src/libs/libgroff/new.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/new.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/new.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-new.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-new.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/new.cpp' object='src/libs/libgroff/libgroff_a-new.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-new.obj `if test -f 'src/libs/libgroff/new.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/new.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/new.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-paper.o: src/libs/libgroff/paper.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-paper.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-paper.Tpo -c -o src/libs/libgroff/libgroff_a-paper.o `test -f 'src/libs/libgroff/paper.cpp' || echo '$(srcdir)/'`src/libs/libgroff/paper.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-paper.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-paper.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/paper.cpp' object='src/libs/libgroff/libgroff_a-paper.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-paper.o `test -f 'src/libs/libgroff/paper.cpp' || echo '$(srcdir)/'`src/libs/libgroff/paper.cpp
+
+src/libs/libgroff/libgroff_a-paper.obj: src/libs/libgroff/paper.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-paper.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-paper.Tpo -c -o src/libs/libgroff/libgroff_a-paper.obj `if test -f 'src/libs/libgroff/paper.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/paper.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/paper.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-paper.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-paper.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/paper.cpp' object='src/libs/libgroff/libgroff_a-paper.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-paper.obj `if test -f 'src/libs/libgroff/paper.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/paper.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/paper.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-prime.o: src/libs/libgroff/prime.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-prime.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-prime.Tpo -c -o src/libs/libgroff/libgroff_a-prime.o `test -f 'src/libs/libgroff/prime.cpp' || echo '$(srcdir)/'`src/libs/libgroff/prime.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-prime.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-prime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/prime.cpp' object='src/libs/libgroff/libgroff_a-prime.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-prime.o `test -f 'src/libs/libgroff/prime.cpp' || echo '$(srcdir)/'`src/libs/libgroff/prime.cpp
+
+src/libs/libgroff/libgroff_a-prime.obj: src/libs/libgroff/prime.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-prime.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-prime.Tpo -c -o src/libs/libgroff/libgroff_a-prime.obj `if test -f 'src/libs/libgroff/prime.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/prime.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/prime.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-prime.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-prime.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/prime.cpp' object='src/libs/libgroff/libgroff_a-prime.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-prime.obj `if test -f 'src/libs/libgroff/prime.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/prime.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/prime.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-ptable.o: src/libs/libgroff/ptable.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-ptable.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-ptable.Tpo -c -o src/libs/libgroff/libgroff_a-ptable.o `test -f 'src/libs/libgroff/ptable.cpp' || echo '$(srcdir)/'`src/libs/libgroff/ptable.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-ptable.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-ptable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/ptable.cpp' object='src/libs/libgroff/libgroff_a-ptable.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-ptable.o `test -f 'src/libs/libgroff/ptable.cpp' || echo '$(srcdir)/'`src/libs/libgroff/ptable.cpp
+
+src/libs/libgroff/libgroff_a-ptable.obj: src/libs/libgroff/ptable.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-ptable.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-ptable.Tpo -c -o src/libs/libgroff/libgroff_a-ptable.obj `if test -f 'src/libs/libgroff/ptable.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/ptable.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/ptable.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-ptable.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-ptable.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/ptable.cpp' object='src/libs/libgroff/libgroff_a-ptable.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-ptable.obj `if test -f 'src/libs/libgroff/ptable.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/ptable.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/ptable.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-relocate.o: src/libs/libgroff/relocate.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-relocate.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-relocate.Tpo -c -o src/libs/libgroff/libgroff_a-relocate.o `test -f 'src/libs/libgroff/relocate.cpp' || echo '$(srcdir)/'`src/libs/libgroff/relocate.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-relocate.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-relocate.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/relocate.cpp' object='src/libs/libgroff/libgroff_a-relocate.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-relocate.o `test -f 'src/libs/libgroff/relocate.cpp' || echo '$(srcdir)/'`src/libs/libgroff/relocate.cpp
+
+src/libs/libgroff/libgroff_a-relocate.obj: src/libs/libgroff/relocate.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-relocate.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-relocate.Tpo -c -o src/libs/libgroff/libgroff_a-relocate.obj `if test -f 'src/libs/libgroff/relocate.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/relocate.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/relocate.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-relocate.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-relocate.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/relocate.cpp' object='src/libs/libgroff/libgroff_a-relocate.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-relocate.obj `if test -f 'src/libs/libgroff/relocate.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/relocate.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/relocate.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-searchpath.o: src/libs/libgroff/searchpath.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-searchpath.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-searchpath.Tpo -c -o src/libs/libgroff/libgroff_a-searchpath.o `test -f 'src/libs/libgroff/searchpath.cpp' || echo '$(srcdir)/'`src/libs/libgroff/searchpath.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-searchpath.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-searchpath.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/searchpath.cpp' object='src/libs/libgroff/libgroff_a-searchpath.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-searchpath.o `test -f 'src/libs/libgroff/searchpath.cpp' || echo '$(srcdir)/'`src/libs/libgroff/searchpath.cpp
+
+src/libs/libgroff/libgroff_a-searchpath.obj: src/libs/libgroff/searchpath.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-searchpath.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-searchpath.Tpo -c -o src/libs/libgroff/libgroff_a-searchpath.obj `if test -f 'src/libs/libgroff/searchpath.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/searchpath.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/searchpath.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-searchpath.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-searchpath.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/searchpath.cpp' object='src/libs/libgroff/libgroff_a-searchpath.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-searchpath.obj `if test -f 'src/libs/libgroff/searchpath.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/searchpath.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/searchpath.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-string.o: src/libs/libgroff/string.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-string.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-string.Tpo -c -o src/libs/libgroff/libgroff_a-string.o `test -f 'src/libs/libgroff/string.cpp' || echo '$(srcdir)/'`src/libs/libgroff/string.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-string.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-string.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/string.cpp' object='src/libs/libgroff/libgroff_a-string.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-string.o `test -f 'src/libs/libgroff/string.cpp' || echo '$(srcdir)/'`src/libs/libgroff/string.cpp
+
+src/libs/libgroff/libgroff_a-string.obj: src/libs/libgroff/string.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-string.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-string.Tpo -c -o src/libs/libgroff/libgroff_a-string.obj `if test -f 'src/libs/libgroff/string.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/string.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/string.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-string.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-string.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/string.cpp' object='src/libs/libgroff/libgroff_a-string.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-string.obj `if test -f 'src/libs/libgroff/string.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/string.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/string.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-strsave.o: src/libs/libgroff/strsave.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-strsave.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-strsave.Tpo -c -o src/libs/libgroff/libgroff_a-strsave.o `test -f 'src/libs/libgroff/strsave.cpp' || echo '$(srcdir)/'`src/libs/libgroff/strsave.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-strsave.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-strsave.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/strsave.cpp' object='src/libs/libgroff/libgroff_a-strsave.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-strsave.o `test -f 'src/libs/libgroff/strsave.cpp' || echo '$(srcdir)/'`src/libs/libgroff/strsave.cpp
+
+src/libs/libgroff/libgroff_a-strsave.obj: src/libs/libgroff/strsave.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-strsave.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-strsave.Tpo -c -o src/libs/libgroff/libgroff_a-strsave.obj `if test -f 'src/libs/libgroff/strsave.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/strsave.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/strsave.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-strsave.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-strsave.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/strsave.cpp' object='src/libs/libgroff/libgroff_a-strsave.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-strsave.obj `if test -f 'src/libs/libgroff/strsave.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/strsave.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/strsave.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-symbol.o: src/libs/libgroff/symbol.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-symbol.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-symbol.Tpo -c -o src/libs/libgroff/libgroff_a-symbol.o `test -f 'src/libs/libgroff/symbol.cpp' || echo '$(srcdir)/'`src/libs/libgroff/symbol.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-symbol.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-symbol.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/symbol.cpp' object='src/libs/libgroff/libgroff_a-symbol.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-symbol.o `test -f 'src/libs/libgroff/symbol.cpp' || echo '$(srcdir)/'`src/libs/libgroff/symbol.cpp
+
+src/libs/libgroff/libgroff_a-symbol.obj: src/libs/libgroff/symbol.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-symbol.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-symbol.Tpo -c -o src/libs/libgroff/libgroff_a-symbol.obj `if test -f 'src/libs/libgroff/symbol.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/symbol.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/symbol.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-symbol.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-symbol.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/symbol.cpp' object='src/libs/libgroff/libgroff_a-symbol.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-symbol.obj `if test -f 'src/libs/libgroff/symbol.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/symbol.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/symbol.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-tmpfile.o: src/libs/libgroff/tmpfile.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-tmpfile.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpfile.Tpo -c -o src/libs/libgroff/libgroff_a-tmpfile.o `test -f 'src/libs/libgroff/tmpfile.cpp' || echo '$(srcdir)/'`src/libs/libgroff/tmpfile.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpfile.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpfile.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/tmpfile.cpp' object='src/libs/libgroff/libgroff_a-tmpfile.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-tmpfile.o `test -f 'src/libs/libgroff/tmpfile.cpp' || echo '$(srcdir)/'`src/libs/libgroff/tmpfile.cpp
+
+src/libs/libgroff/libgroff_a-tmpfile.obj: src/libs/libgroff/tmpfile.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-tmpfile.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpfile.Tpo -c -o src/libs/libgroff/libgroff_a-tmpfile.obj `if test -f 'src/libs/libgroff/tmpfile.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/tmpfile.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/tmpfile.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpfile.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpfile.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/tmpfile.cpp' object='src/libs/libgroff/libgroff_a-tmpfile.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-tmpfile.obj `if test -f 'src/libs/libgroff/tmpfile.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/tmpfile.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/tmpfile.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-tmpname.o: src/libs/libgroff/tmpname.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-tmpname.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpname.Tpo -c -o src/libs/libgroff/libgroff_a-tmpname.o `test -f 'src/libs/libgroff/tmpname.cpp' || echo '$(srcdir)/'`src/libs/libgroff/tmpname.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpname.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpname.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/tmpname.cpp' object='src/libs/libgroff/libgroff_a-tmpname.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-tmpname.o `test -f 'src/libs/libgroff/tmpname.cpp' || echo '$(srcdir)/'`src/libs/libgroff/tmpname.cpp
+
+src/libs/libgroff/libgroff_a-tmpname.obj: src/libs/libgroff/tmpname.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-tmpname.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpname.Tpo -c -o src/libs/libgroff/libgroff_a-tmpname.obj `if test -f 'src/libs/libgroff/tmpname.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/tmpname.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/tmpname.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpname.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpname.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/tmpname.cpp' object='src/libs/libgroff/libgroff_a-tmpname.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-tmpname.obj `if test -f 'src/libs/libgroff/tmpname.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/tmpname.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/tmpname.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-unicode.o: src/libs/libgroff/unicode.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-unicode.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-unicode.Tpo -c -o src/libs/libgroff/libgroff_a-unicode.o `test -f 'src/libs/libgroff/unicode.cpp' || echo '$(srcdir)/'`src/libs/libgroff/unicode.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-unicode.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-unicode.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/unicode.cpp' object='src/libs/libgroff/libgroff_a-unicode.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-unicode.o `test -f 'src/libs/libgroff/unicode.cpp' || echo '$(srcdir)/'`src/libs/libgroff/unicode.cpp
+
+src/libs/libgroff/libgroff_a-unicode.obj: src/libs/libgroff/unicode.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-unicode.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-unicode.Tpo -c -o src/libs/libgroff/libgroff_a-unicode.obj `if test -f 'src/libs/libgroff/unicode.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/unicode.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-unicode.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-unicode.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/unicode.cpp' object='src/libs/libgroff/libgroff_a-unicode.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-unicode.obj `if test -f 'src/libs/libgroff/unicode.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/unicode.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/unicode.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-uniglyph.o: src/libs/libgroff/uniglyph.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-uniglyph.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-uniglyph.Tpo -c -o src/libs/libgroff/libgroff_a-uniglyph.o `test -f 'src/libs/libgroff/uniglyph.cpp' || echo '$(srcdir)/'`src/libs/libgroff/uniglyph.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-uniglyph.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-uniglyph.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/uniglyph.cpp' object='src/libs/libgroff/libgroff_a-uniglyph.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-uniglyph.o `test -f 'src/libs/libgroff/uniglyph.cpp' || echo '$(srcdir)/'`src/libs/libgroff/uniglyph.cpp
+
+src/libs/libgroff/libgroff_a-uniglyph.obj: src/libs/libgroff/uniglyph.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-uniglyph.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-uniglyph.Tpo -c -o src/libs/libgroff/libgroff_a-uniglyph.obj `if test -f 'src/libs/libgroff/uniglyph.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/uniglyph.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/uniglyph.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-uniglyph.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-uniglyph.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/uniglyph.cpp' object='src/libs/libgroff/libgroff_a-uniglyph.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-uniglyph.obj `if test -f 'src/libs/libgroff/uniglyph.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/uniglyph.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/uniglyph.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-uniuni.o: src/libs/libgroff/uniuni.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-uniuni.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-uniuni.Tpo -c -o src/libs/libgroff/libgroff_a-uniuni.o `test -f 'src/libs/libgroff/uniuni.cpp' || echo '$(srcdir)/'`src/libs/libgroff/uniuni.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-uniuni.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-uniuni.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/uniuni.cpp' object='src/libs/libgroff/libgroff_a-uniuni.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-uniuni.o `test -f 'src/libs/libgroff/uniuni.cpp' || echo '$(srcdir)/'`src/libs/libgroff/uniuni.cpp
+
+src/libs/libgroff/libgroff_a-uniuni.obj: src/libs/libgroff/uniuni.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-uniuni.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-uniuni.Tpo -c -o src/libs/libgroff/libgroff_a-uniuni.obj `if test -f 'src/libs/libgroff/uniuni.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/uniuni.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/uniuni.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-uniuni.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-uniuni.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/uniuni.cpp' object='src/libs/libgroff/libgroff_a-uniuni.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-uniuni.obj `if test -f 'src/libs/libgroff/uniuni.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/uniuni.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/uniuni.cpp'; fi`
+
+src/libs/libgroff/libgroff_a-version.o: src/libs/libgroff/version.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-version.o -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-version.Tpo -c -o src/libs/libgroff/libgroff_a-version.o `test -f 'src/libs/libgroff/version.cpp' || echo '$(srcdir)/'`src/libs/libgroff/version.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-version.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-version.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/version.cpp' object='src/libs/libgroff/libgroff_a-version.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-version.o `test -f 'src/libs/libgroff/version.cpp' || echo '$(srcdir)/'`src/libs/libgroff/version.cpp
+
+src/libs/libgroff/libgroff_a-version.obj: src/libs/libgroff/version.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/libs/libgroff/libgroff_a-version.obj -MD -MP -MF src/libs/libgroff/$(DEPDIR)/libgroff_a-version.Tpo -c -o src/libs/libgroff/libgroff_a-version.obj `if test -f 'src/libs/libgroff/version.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/version.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/version.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/libs/libgroff/$(DEPDIR)/libgroff_a-version.Tpo src/libs/libgroff/$(DEPDIR)/libgroff_a-version.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/libs/libgroff/version.cpp' object='src/libs/libgroff/libgroff_a-version.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(libgroff_a_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/libs/libgroff/libgroff_a-version.obj `if test -f 'src/libs/libgroff/version.cpp'; then $(CYGPATH_W) 'src/libs/libgroff/version.cpp'; else $(CYGPATH_W) '$(srcdir)/src/libs/libgroff/version.cpp'; fi`
+
+src/preproc/eqn/eqn-main.o: src/preproc/eqn/main.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-main.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-main.Tpo -c -o src/preproc/eqn/eqn-main.o `test -f 'src/preproc/eqn/main.cpp' || echo '$(srcdir)/'`src/preproc/eqn/main.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-main.Tpo src/preproc/eqn/$(DEPDIR)/eqn-main.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/main.cpp' object='src/preproc/eqn/eqn-main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-main.o `test -f 'src/preproc/eqn/main.cpp' || echo '$(srcdir)/'`src/preproc/eqn/main.cpp
+
+src/preproc/eqn/eqn-main.obj: src/preproc/eqn/main.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-main.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-main.Tpo -c -o src/preproc/eqn/eqn-main.obj `if test -f 'src/preproc/eqn/main.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/main.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/main.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-main.Tpo src/preproc/eqn/$(DEPDIR)/eqn-main.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/main.cpp' object='src/preproc/eqn/eqn-main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-main.obj `if test -f 'src/preproc/eqn/main.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/main.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/main.cpp'; fi`
+
+src/preproc/eqn/eqn-lex.o: src/preproc/eqn/lex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-lex.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-lex.Tpo -c -o src/preproc/eqn/eqn-lex.o `test -f 'src/preproc/eqn/lex.cpp' || echo '$(srcdir)/'`src/preproc/eqn/lex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-lex.Tpo src/preproc/eqn/$(DEPDIR)/eqn-lex.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/lex.cpp' object='src/preproc/eqn/eqn-lex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-lex.o `test -f 'src/preproc/eqn/lex.cpp' || echo '$(srcdir)/'`src/preproc/eqn/lex.cpp
+
+src/preproc/eqn/eqn-lex.obj: src/preproc/eqn/lex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-lex.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-lex.Tpo -c -o src/preproc/eqn/eqn-lex.obj `if test -f 'src/preproc/eqn/lex.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/lex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/lex.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-lex.Tpo src/preproc/eqn/$(DEPDIR)/eqn-lex.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/lex.cpp' object='src/preproc/eqn/eqn-lex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-lex.obj `if test -f 'src/preproc/eqn/lex.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/lex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/lex.cpp'; fi`
+
+src/preproc/eqn/eqn-box.o: src/preproc/eqn/box.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-box.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-box.Tpo -c -o src/preproc/eqn/eqn-box.o `test -f 'src/preproc/eqn/box.cpp' || echo '$(srcdir)/'`src/preproc/eqn/box.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-box.Tpo src/preproc/eqn/$(DEPDIR)/eqn-box.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/box.cpp' object='src/preproc/eqn/eqn-box.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-box.o `test -f 'src/preproc/eqn/box.cpp' || echo '$(srcdir)/'`src/preproc/eqn/box.cpp
+
+src/preproc/eqn/eqn-box.obj: src/preproc/eqn/box.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-box.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-box.Tpo -c -o src/preproc/eqn/eqn-box.obj `if test -f 'src/preproc/eqn/box.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/box.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/box.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-box.Tpo src/preproc/eqn/$(DEPDIR)/eqn-box.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/box.cpp' object='src/preproc/eqn/eqn-box.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-box.obj `if test -f 'src/preproc/eqn/box.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/box.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/box.cpp'; fi`
+
+src/preproc/eqn/eqn-limit.o: src/preproc/eqn/limit.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-limit.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-limit.Tpo -c -o src/preproc/eqn/eqn-limit.o `test -f 'src/preproc/eqn/limit.cpp' || echo '$(srcdir)/'`src/preproc/eqn/limit.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-limit.Tpo src/preproc/eqn/$(DEPDIR)/eqn-limit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/limit.cpp' object='src/preproc/eqn/eqn-limit.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-limit.o `test -f 'src/preproc/eqn/limit.cpp' || echo '$(srcdir)/'`src/preproc/eqn/limit.cpp
+
+src/preproc/eqn/eqn-limit.obj: src/preproc/eqn/limit.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-limit.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-limit.Tpo -c -o src/preproc/eqn/eqn-limit.obj `if test -f 'src/preproc/eqn/limit.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/limit.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/limit.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-limit.Tpo src/preproc/eqn/$(DEPDIR)/eqn-limit.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/limit.cpp' object='src/preproc/eqn/eqn-limit.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-limit.obj `if test -f 'src/preproc/eqn/limit.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/limit.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/limit.cpp'; fi`
+
+src/preproc/eqn/eqn-list.o: src/preproc/eqn/list.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-list.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-list.Tpo -c -o src/preproc/eqn/eqn-list.o `test -f 'src/preproc/eqn/list.cpp' || echo '$(srcdir)/'`src/preproc/eqn/list.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-list.Tpo src/preproc/eqn/$(DEPDIR)/eqn-list.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/list.cpp' object='src/preproc/eqn/eqn-list.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-list.o `test -f 'src/preproc/eqn/list.cpp' || echo '$(srcdir)/'`src/preproc/eqn/list.cpp
+
+src/preproc/eqn/eqn-list.obj: src/preproc/eqn/list.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-list.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-list.Tpo -c -o src/preproc/eqn/eqn-list.obj `if test -f 'src/preproc/eqn/list.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/list.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/list.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-list.Tpo src/preproc/eqn/$(DEPDIR)/eqn-list.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/list.cpp' object='src/preproc/eqn/eqn-list.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-list.obj `if test -f 'src/preproc/eqn/list.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/list.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/list.cpp'; fi`
+
+src/preproc/eqn/eqn-over.o: src/preproc/eqn/over.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-over.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-over.Tpo -c -o src/preproc/eqn/eqn-over.o `test -f 'src/preproc/eqn/over.cpp' || echo '$(srcdir)/'`src/preproc/eqn/over.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-over.Tpo src/preproc/eqn/$(DEPDIR)/eqn-over.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/over.cpp' object='src/preproc/eqn/eqn-over.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-over.o `test -f 'src/preproc/eqn/over.cpp' || echo '$(srcdir)/'`src/preproc/eqn/over.cpp
+
+src/preproc/eqn/eqn-over.obj: src/preproc/eqn/over.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-over.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-over.Tpo -c -o src/preproc/eqn/eqn-over.obj `if test -f 'src/preproc/eqn/over.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/over.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/over.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-over.Tpo src/preproc/eqn/$(DEPDIR)/eqn-over.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/over.cpp' object='src/preproc/eqn/eqn-over.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-over.obj `if test -f 'src/preproc/eqn/over.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/over.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/over.cpp'; fi`
+
+src/preproc/eqn/eqn-text.o: src/preproc/eqn/text.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-text.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-text.Tpo -c -o src/preproc/eqn/eqn-text.o `test -f 'src/preproc/eqn/text.cpp' || echo '$(srcdir)/'`src/preproc/eqn/text.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-text.Tpo src/preproc/eqn/$(DEPDIR)/eqn-text.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/text.cpp' object='src/preproc/eqn/eqn-text.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-text.o `test -f 'src/preproc/eqn/text.cpp' || echo '$(srcdir)/'`src/preproc/eqn/text.cpp
+
+src/preproc/eqn/eqn-text.obj: src/preproc/eqn/text.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-text.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-text.Tpo -c -o src/preproc/eqn/eqn-text.obj `if test -f 'src/preproc/eqn/text.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/text.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/text.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-text.Tpo src/preproc/eqn/$(DEPDIR)/eqn-text.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/text.cpp' object='src/preproc/eqn/eqn-text.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-text.obj `if test -f 'src/preproc/eqn/text.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/text.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/text.cpp'; fi`
+
+src/preproc/eqn/eqn-script.o: src/preproc/eqn/script.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-script.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-script.Tpo -c -o src/preproc/eqn/eqn-script.o `test -f 'src/preproc/eqn/script.cpp' || echo '$(srcdir)/'`src/preproc/eqn/script.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-script.Tpo src/preproc/eqn/$(DEPDIR)/eqn-script.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/script.cpp' object='src/preproc/eqn/eqn-script.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-script.o `test -f 'src/preproc/eqn/script.cpp' || echo '$(srcdir)/'`src/preproc/eqn/script.cpp
+
+src/preproc/eqn/eqn-script.obj: src/preproc/eqn/script.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-script.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-script.Tpo -c -o src/preproc/eqn/eqn-script.obj `if test -f 'src/preproc/eqn/script.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/script.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/script.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-script.Tpo src/preproc/eqn/$(DEPDIR)/eqn-script.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/script.cpp' object='src/preproc/eqn/eqn-script.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-script.obj `if test -f 'src/preproc/eqn/script.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/script.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/script.cpp'; fi`
+
+src/preproc/eqn/eqn-mark.o: src/preproc/eqn/mark.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-mark.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-mark.Tpo -c -o src/preproc/eqn/eqn-mark.o `test -f 'src/preproc/eqn/mark.cpp' || echo '$(srcdir)/'`src/preproc/eqn/mark.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-mark.Tpo src/preproc/eqn/$(DEPDIR)/eqn-mark.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/mark.cpp' object='src/preproc/eqn/eqn-mark.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-mark.o `test -f 'src/preproc/eqn/mark.cpp' || echo '$(srcdir)/'`src/preproc/eqn/mark.cpp
+
+src/preproc/eqn/eqn-mark.obj: src/preproc/eqn/mark.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-mark.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-mark.Tpo -c -o src/preproc/eqn/eqn-mark.obj `if test -f 'src/preproc/eqn/mark.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/mark.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/mark.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-mark.Tpo src/preproc/eqn/$(DEPDIR)/eqn-mark.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/mark.cpp' object='src/preproc/eqn/eqn-mark.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-mark.obj `if test -f 'src/preproc/eqn/mark.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/mark.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/mark.cpp'; fi`
+
+src/preproc/eqn/eqn-other.o: src/preproc/eqn/other.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-other.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-other.Tpo -c -o src/preproc/eqn/eqn-other.o `test -f 'src/preproc/eqn/other.cpp' || echo '$(srcdir)/'`src/preproc/eqn/other.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-other.Tpo src/preproc/eqn/$(DEPDIR)/eqn-other.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/other.cpp' object='src/preproc/eqn/eqn-other.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-other.o `test -f 'src/preproc/eqn/other.cpp' || echo '$(srcdir)/'`src/preproc/eqn/other.cpp
+
+src/preproc/eqn/eqn-other.obj: src/preproc/eqn/other.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-other.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-other.Tpo -c -o src/preproc/eqn/eqn-other.obj `if test -f 'src/preproc/eqn/other.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/other.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/other.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-other.Tpo src/preproc/eqn/$(DEPDIR)/eqn-other.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/other.cpp' object='src/preproc/eqn/eqn-other.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-other.obj `if test -f 'src/preproc/eqn/other.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/other.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/other.cpp'; fi`
+
+src/preproc/eqn/eqn-delim.o: src/preproc/eqn/delim.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-delim.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-delim.Tpo -c -o src/preproc/eqn/eqn-delim.o `test -f 'src/preproc/eqn/delim.cpp' || echo '$(srcdir)/'`src/preproc/eqn/delim.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-delim.Tpo src/preproc/eqn/$(DEPDIR)/eqn-delim.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/delim.cpp' object='src/preproc/eqn/eqn-delim.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-delim.o `test -f 'src/preproc/eqn/delim.cpp' || echo '$(srcdir)/'`src/preproc/eqn/delim.cpp
+
+src/preproc/eqn/eqn-delim.obj: src/preproc/eqn/delim.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-delim.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-delim.Tpo -c -o src/preproc/eqn/eqn-delim.obj `if test -f 'src/preproc/eqn/delim.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/delim.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/delim.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-delim.Tpo src/preproc/eqn/$(DEPDIR)/eqn-delim.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/delim.cpp' object='src/preproc/eqn/eqn-delim.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-delim.obj `if test -f 'src/preproc/eqn/delim.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/delim.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/delim.cpp'; fi`
+
+src/preproc/eqn/eqn-sqrt.o: src/preproc/eqn/sqrt.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-sqrt.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-sqrt.Tpo -c -o src/preproc/eqn/eqn-sqrt.o `test -f 'src/preproc/eqn/sqrt.cpp' || echo '$(srcdir)/'`src/preproc/eqn/sqrt.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-sqrt.Tpo src/preproc/eqn/$(DEPDIR)/eqn-sqrt.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/sqrt.cpp' object='src/preproc/eqn/eqn-sqrt.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-sqrt.o `test -f 'src/preproc/eqn/sqrt.cpp' || echo '$(srcdir)/'`src/preproc/eqn/sqrt.cpp
+
+src/preproc/eqn/eqn-sqrt.obj: src/preproc/eqn/sqrt.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-sqrt.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-sqrt.Tpo -c -o src/preproc/eqn/eqn-sqrt.obj `if test -f 'src/preproc/eqn/sqrt.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/sqrt.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/sqrt.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-sqrt.Tpo src/preproc/eqn/$(DEPDIR)/eqn-sqrt.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/sqrt.cpp' object='src/preproc/eqn/eqn-sqrt.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-sqrt.obj `if test -f 'src/preproc/eqn/sqrt.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/sqrt.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/sqrt.cpp'; fi`
+
+src/preproc/eqn/eqn-pile.o: src/preproc/eqn/pile.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-pile.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-pile.Tpo -c -o src/preproc/eqn/eqn-pile.o `test -f 'src/preproc/eqn/pile.cpp' || echo '$(srcdir)/'`src/preproc/eqn/pile.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-pile.Tpo src/preproc/eqn/$(DEPDIR)/eqn-pile.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/pile.cpp' object='src/preproc/eqn/eqn-pile.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-pile.o `test -f 'src/preproc/eqn/pile.cpp' || echo '$(srcdir)/'`src/preproc/eqn/pile.cpp
+
+src/preproc/eqn/eqn-pile.obj: src/preproc/eqn/pile.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-pile.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-pile.Tpo -c -o src/preproc/eqn/eqn-pile.obj `if test -f 'src/preproc/eqn/pile.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/pile.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/pile.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-pile.Tpo src/preproc/eqn/$(DEPDIR)/eqn-pile.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/pile.cpp' object='src/preproc/eqn/eqn-pile.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-pile.obj `if test -f 'src/preproc/eqn/pile.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/pile.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/pile.cpp'; fi`
+
+src/preproc/eqn/eqn-special.o: src/preproc/eqn/special.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-special.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-special.Tpo -c -o src/preproc/eqn/eqn-special.o `test -f 'src/preproc/eqn/special.cpp' || echo '$(srcdir)/'`src/preproc/eqn/special.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-special.Tpo src/preproc/eqn/$(DEPDIR)/eqn-special.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/special.cpp' object='src/preproc/eqn/eqn-special.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-special.o `test -f 'src/preproc/eqn/special.cpp' || echo '$(srcdir)/'`src/preproc/eqn/special.cpp
+
+src/preproc/eqn/eqn-special.obj: src/preproc/eqn/special.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-special.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-special.Tpo -c -o src/preproc/eqn/eqn-special.obj `if test -f 'src/preproc/eqn/special.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/special.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/special.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-special.Tpo src/preproc/eqn/$(DEPDIR)/eqn-special.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/special.cpp' object='src/preproc/eqn/eqn-special.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-special.obj `if test -f 'src/preproc/eqn/special.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/special.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/special.cpp'; fi`
+
+src/preproc/eqn/eqn-eqn.o: src/preproc/eqn/eqn.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-eqn.o -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-eqn.Tpo -c -o src/preproc/eqn/eqn-eqn.o `test -f 'src/preproc/eqn/eqn.cpp' || echo '$(srcdir)/'`src/preproc/eqn/eqn.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-eqn.Tpo src/preproc/eqn/$(DEPDIR)/eqn-eqn.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/eqn.cpp' object='src/preproc/eqn/eqn-eqn.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-eqn.o `test -f 'src/preproc/eqn/eqn.cpp' || echo '$(srcdir)/'`src/preproc/eqn/eqn.cpp
+
+src/preproc/eqn/eqn-eqn.obj: src/preproc/eqn/eqn.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/eqn/eqn-eqn.obj -MD -MP -MF src/preproc/eqn/$(DEPDIR)/eqn-eqn.Tpo -c -o src/preproc/eqn/eqn-eqn.obj `if test -f 'src/preproc/eqn/eqn.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/eqn.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/eqn.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/eqn/$(DEPDIR)/eqn-eqn.Tpo src/preproc/eqn/$(DEPDIR)/eqn-eqn.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/eqn/eqn.cpp' object='src/preproc/eqn/eqn-eqn.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(eqn_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/eqn/eqn-eqn.obj `if test -f 'src/preproc/eqn/eqn.cpp'; then $(CYGPATH_W) 'src/preproc/eqn/eqn.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/eqn/eqn.cpp'; fi`
+
+src/preproc/pic/pic-pic.o: src/preproc/pic/pic.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-pic.o -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-pic.Tpo -c -o src/preproc/pic/pic-pic.o `test -f 'src/preproc/pic/pic.cpp' || echo '$(srcdir)/'`src/preproc/pic/pic.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-pic.Tpo src/preproc/pic/$(DEPDIR)/pic-pic.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/pic.cpp' object='src/preproc/pic/pic-pic.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-pic.o `test -f 'src/preproc/pic/pic.cpp' || echo '$(srcdir)/'`src/preproc/pic/pic.cpp
+
+src/preproc/pic/pic-pic.obj: src/preproc/pic/pic.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-pic.obj -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-pic.Tpo -c -o src/preproc/pic/pic-pic.obj `if test -f 'src/preproc/pic/pic.cpp'; then $(CYGPATH_W) 'src/preproc/pic/pic.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/pic.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-pic.Tpo src/preproc/pic/$(DEPDIR)/pic-pic.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/pic.cpp' object='src/preproc/pic/pic-pic.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-pic.obj `if test -f 'src/preproc/pic/pic.cpp'; then $(CYGPATH_W) 'src/preproc/pic/pic.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/pic.cpp'; fi`
+
+src/preproc/pic/pic-lex.o: src/preproc/pic/lex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-lex.o -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-lex.Tpo -c -o src/preproc/pic/pic-lex.o `test -f 'src/preproc/pic/lex.cpp' || echo '$(srcdir)/'`src/preproc/pic/lex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-lex.Tpo src/preproc/pic/$(DEPDIR)/pic-lex.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/lex.cpp' object='src/preproc/pic/pic-lex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-lex.o `test -f 'src/preproc/pic/lex.cpp' || echo '$(srcdir)/'`src/preproc/pic/lex.cpp
+
+src/preproc/pic/pic-lex.obj: src/preproc/pic/lex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-lex.obj -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-lex.Tpo -c -o src/preproc/pic/pic-lex.obj `if test -f 'src/preproc/pic/lex.cpp'; then $(CYGPATH_W) 'src/preproc/pic/lex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/lex.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-lex.Tpo src/preproc/pic/$(DEPDIR)/pic-lex.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/lex.cpp' object='src/preproc/pic/pic-lex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-lex.obj `if test -f 'src/preproc/pic/lex.cpp'; then $(CYGPATH_W) 'src/preproc/pic/lex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/lex.cpp'; fi`
+
+src/preproc/pic/pic-main.o: src/preproc/pic/main.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-main.o -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-main.Tpo -c -o src/preproc/pic/pic-main.o `test -f 'src/preproc/pic/main.cpp' || echo '$(srcdir)/'`src/preproc/pic/main.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-main.Tpo src/preproc/pic/$(DEPDIR)/pic-main.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/main.cpp' object='src/preproc/pic/pic-main.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-main.o `test -f 'src/preproc/pic/main.cpp' || echo '$(srcdir)/'`src/preproc/pic/main.cpp
+
+src/preproc/pic/pic-main.obj: src/preproc/pic/main.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-main.obj -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-main.Tpo -c -o src/preproc/pic/pic-main.obj `if test -f 'src/preproc/pic/main.cpp'; then $(CYGPATH_W) 'src/preproc/pic/main.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/main.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-main.Tpo src/preproc/pic/$(DEPDIR)/pic-main.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/main.cpp' object='src/preproc/pic/pic-main.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-main.obj `if test -f 'src/preproc/pic/main.cpp'; then $(CYGPATH_W) 'src/preproc/pic/main.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/main.cpp'; fi`
+
+src/preproc/pic/pic-object.o: src/preproc/pic/object.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-object.o -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-object.Tpo -c -o src/preproc/pic/pic-object.o `test -f 'src/preproc/pic/object.cpp' || echo '$(srcdir)/'`src/preproc/pic/object.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-object.Tpo src/preproc/pic/$(DEPDIR)/pic-object.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/object.cpp' object='src/preproc/pic/pic-object.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-object.o `test -f 'src/preproc/pic/object.cpp' || echo '$(srcdir)/'`src/preproc/pic/object.cpp
+
+src/preproc/pic/pic-object.obj: src/preproc/pic/object.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-object.obj -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-object.Tpo -c -o src/preproc/pic/pic-object.obj `if test -f 'src/preproc/pic/object.cpp'; then $(CYGPATH_W) 'src/preproc/pic/object.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/object.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-object.Tpo src/preproc/pic/$(DEPDIR)/pic-object.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/object.cpp' object='src/preproc/pic/pic-object.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-object.obj `if test -f 'src/preproc/pic/object.cpp'; then $(CYGPATH_W) 'src/preproc/pic/object.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/object.cpp'; fi`
+
+src/preproc/pic/pic-common.o: src/preproc/pic/common.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-common.o -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-common.Tpo -c -o src/preproc/pic/pic-common.o `test -f 'src/preproc/pic/common.cpp' || echo '$(srcdir)/'`src/preproc/pic/common.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-common.Tpo src/preproc/pic/$(DEPDIR)/pic-common.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/common.cpp' object='src/preproc/pic/pic-common.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-common.o `test -f 'src/preproc/pic/common.cpp' || echo '$(srcdir)/'`src/preproc/pic/common.cpp
+
+src/preproc/pic/pic-common.obj: src/preproc/pic/common.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-common.obj -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-common.Tpo -c -o src/preproc/pic/pic-common.obj `if test -f 'src/preproc/pic/common.cpp'; then $(CYGPATH_W) 'src/preproc/pic/common.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/common.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-common.Tpo src/preproc/pic/$(DEPDIR)/pic-common.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/common.cpp' object='src/preproc/pic/pic-common.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-common.obj `if test -f 'src/preproc/pic/common.cpp'; then $(CYGPATH_W) 'src/preproc/pic/common.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/common.cpp'; fi`
+
+src/preproc/pic/pic-troff.o: src/preproc/pic/troff.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-troff.o -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-troff.Tpo -c -o src/preproc/pic/pic-troff.o `test -f 'src/preproc/pic/troff.cpp' || echo '$(srcdir)/'`src/preproc/pic/troff.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-troff.Tpo src/preproc/pic/$(DEPDIR)/pic-troff.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/troff.cpp' object='src/preproc/pic/pic-troff.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-troff.o `test -f 'src/preproc/pic/troff.cpp' || echo '$(srcdir)/'`src/preproc/pic/troff.cpp
+
+src/preproc/pic/pic-troff.obj: src/preproc/pic/troff.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-troff.obj -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-troff.Tpo -c -o src/preproc/pic/pic-troff.obj `if test -f 'src/preproc/pic/troff.cpp'; then $(CYGPATH_W) 'src/preproc/pic/troff.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/troff.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-troff.Tpo src/preproc/pic/$(DEPDIR)/pic-troff.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/troff.cpp' object='src/preproc/pic/pic-troff.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-troff.obj `if test -f 'src/preproc/pic/troff.cpp'; then $(CYGPATH_W) 'src/preproc/pic/troff.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/troff.cpp'; fi`
+
+src/preproc/pic/pic-tex.o: src/preproc/pic/tex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-tex.o -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-tex.Tpo -c -o src/preproc/pic/pic-tex.o `test -f 'src/preproc/pic/tex.cpp' || echo '$(srcdir)/'`src/preproc/pic/tex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-tex.Tpo src/preproc/pic/$(DEPDIR)/pic-tex.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/tex.cpp' object='src/preproc/pic/pic-tex.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-tex.o `test -f 'src/preproc/pic/tex.cpp' || echo '$(srcdir)/'`src/preproc/pic/tex.cpp
+
+src/preproc/pic/pic-tex.obj: src/preproc/pic/tex.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/pic/pic-tex.obj -MD -MP -MF src/preproc/pic/$(DEPDIR)/pic-tex.Tpo -c -o src/preproc/pic/pic-tex.obj `if test -f 'src/preproc/pic/tex.cpp'; then $(CYGPATH_W) 'src/preproc/pic/tex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/tex.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/pic/$(DEPDIR)/pic-tex.Tpo src/preproc/pic/$(DEPDIR)/pic-tex.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/pic/tex.cpp' object='src/preproc/pic/pic-tex.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(pic_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/pic/pic-tex.obj `if test -f 'src/preproc/pic/tex.cpp'; then $(CYGPATH_W) 'src/preproc/pic/tex.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/pic/tex.cpp'; fi`
+
+src/preproc/preconv/preconv-preconv.o: src/preproc/preconv/preconv.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(preconv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/preconv/preconv-preconv.o -MD -MP -MF src/preproc/preconv/$(DEPDIR)/preconv-preconv.Tpo -c -o src/preproc/preconv/preconv-preconv.o `test -f 'src/preproc/preconv/preconv.cpp' || echo '$(srcdir)/'`src/preproc/preconv/preconv.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/preconv/$(DEPDIR)/preconv-preconv.Tpo src/preproc/preconv/$(DEPDIR)/preconv-preconv.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/preconv/preconv.cpp' object='src/preproc/preconv/preconv-preconv.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(preconv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/preconv/preconv-preconv.o `test -f 'src/preproc/preconv/preconv.cpp' || echo '$(srcdir)/'`src/preproc/preconv/preconv.cpp
+
+src/preproc/preconv/preconv-preconv.obj: src/preproc/preconv/preconv.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(preconv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/preconv/preconv-preconv.obj -MD -MP -MF src/preproc/preconv/$(DEPDIR)/preconv-preconv.Tpo -c -o src/preproc/preconv/preconv-preconv.obj `if test -f 'src/preproc/preconv/preconv.cpp'; then $(CYGPATH_W) 'src/preproc/preconv/preconv.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/preconv/preconv.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/preconv/$(DEPDIR)/preconv-preconv.Tpo src/preproc/preconv/$(DEPDIR)/preconv-preconv.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/preconv/preconv.cpp' object='src/preproc/preconv/preconv-preconv.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(preconv_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/preconv/preconv-preconv.obj `if test -f 'src/preproc/preconv/preconv.cpp'; then $(CYGPATH_W) 'src/preproc/preconv/preconv.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/preconv/preconv.cpp'; fi`
+
+src/preproc/refer/refer-command.o: src/preproc/refer/command.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/refer/refer-command.o -MD -MP -MF src/preproc/refer/$(DEPDIR)/refer-command.Tpo -c -o src/preproc/refer/refer-command.o `test -f 'src/preproc/refer/command.cpp' || echo '$(srcdir)/'`src/preproc/refer/command.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/refer/$(DEPDIR)/refer-command.Tpo src/preproc/refer/$(DEPDIR)/refer-command.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/refer/command.cpp' object='src/preproc/refer/refer-command.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/refer/refer-command.o `test -f 'src/preproc/refer/command.cpp' || echo '$(srcdir)/'`src/preproc/refer/command.cpp
+
+src/preproc/refer/refer-command.obj: src/preproc/refer/command.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/refer/refer-command.obj -MD -MP -MF src/preproc/refer/$(DEPDIR)/refer-command.Tpo -c -o src/preproc/refer/refer-command.obj `if test -f 'src/preproc/refer/command.cpp'; then $(CYGPATH_W) 'src/preproc/refer/command.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/refer/command.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/refer/$(DEPDIR)/refer-command.Tpo src/preproc/refer/$(DEPDIR)/refer-command.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/refer/command.cpp' object='src/preproc/refer/refer-command.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/refer/refer-command.obj `if test -f 'src/preproc/refer/command.cpp'; then $(CYGPATH_W) 'src/preproc/refer/command.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/refer/command.cpp'; fi`
+
+src/preproc/refer/refer-ref.o: src/preproc/refer/ref.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/refer/refer-ref.o -MD -MP -MF src/preproc/refer/$(DEPDIR)/refer-ref.Tpo -c -o src/preproc/refer/refer-ref.o `test -f 'src/preproc/refer/ref.cpp' || echo '$(srcdir)/'`src/preproc/refer/ref.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/refer/$(DEPDIR)/refer-ref.Tpo src/preproc/refer/$(DEPDIR)/refer-ref.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/refer/ref.cpp' object='src/preproc/refer/refer-ref.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/refer/refer-ref.o `test -f 'src/preproc/refer/ref.cpp' || echo '$(srcdir)/'`src/preproc/refer/ref.cpp
+
+src/preproc/refer/refer-ref.obj: src/preproc/refer/ref.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/refer/refer-ref.obj -MD -MP -MF src/preproc/refer/$(DEPDIR)/refer-ref.Tpo -c -o src/preproc/refer/refer-ref.obj `if test -f 'src/preproc/refer/ref.cpp'; then $(CYGPATH_W) 'src/preproc/refer/ref.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/refer/ref.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/refer/$(DEPDIR)/refer-ref.Tpo src/preproc/refer/$(DEPDIR)/refer-ref.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/refer/ref.cpp' object='src/preproc/refer/refer-ref.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/refer/refer-ref.obj `if test -f 'src/preproc/refer/ref.cpp'; then $(CYGPATH_W) 'src/preproc/refer/ref.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/refer/ref.cpp'; fi`
+
+src/preproc/refer/refer-refer.o: src/preproc/refer/refer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/refer/refer-refer.o -MD -MP -MF src/preproc/refer/$(DEPDIR)/refer-refer.Tpo -c -o src/preproc/refer/refer-refer.o `test -f 'src/preproc/refer/refer.cpp' || echo '$(srcdir)/'`src/preproc/refer/refer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/refer/$(DEPDIR)/refer-refer.Tpo src/preproc/refer/$(DEPDIR)/refer-refer.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/refer/refer.cpp' object='src/preproc/refer/refer-refer.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/refer/refer-refer.o `test -f 'src/preproc/refer/refer.cpp' || echo '$(srcdir)/'`src/preproc/refer/refer.cpp
+
+src/preproc/refer/refer-refer.obj: src/preproc/refer/refer.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/refer/refer-refer.obj -MD -MP -MF src/preproc/refer/$(DEPDIR)/refer-refer.Tpo -c -o src/preproc/refer/refer-refer.obj `if test -f 'src/preproc/refer/refer.cpp'; then $(CYGPATH_W) 'src/preproc/refer/refer.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/refer/refer.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/refer/$(DEPDIR)/refer-refer.Tpo src/preproc/refer/$(DEPDIR)/refer-refer.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/refer/refer.cpp' object='src/preproc/refer/refer-refer.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/refer/refer-refer.obj `if test -f 'src/preproc/refer/refer.cpp'; then $(CYGPATH_W) 'src/preproc/refer/refer.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/refer/refer.cpp'; fi`
+
+src/preproc/refer/refer-token.o: src/preproc/refer/token.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/refer/refer-token.o -MD -MP -MF src/preproc/refer/$(DEPDIR)/refer-token.Tpo -c -o src/preproc/refer/refer-token.o `test -f 'src/preproc/refer/token.cpp' || echo '$(srcdir)/'`src/preproc/refer/token.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/refer/$(DEPDIR)/refer-token.Tpo src/preproc/refer/$(DEPDIR)/refer-token.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/refer/token.cpp' object='src/preproc/refer/refer-token.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/refer/refer-token.o `test -f 'src/preproc/refer/token.cpp' || echo '$(srcdir)/'`src/preproc/refer/token.cpp
+
+src/preproc/refer/refer-token.obj: src/preproc/refer/token.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/refer/refer-token.obj -MD -MP -MF src/preproc/refer/$(DEPDIR)/refer-token.Tpo -c -o src/preproc/refer/refer-token.obj `if test -f 'src/preproc/refer/token.cpp'; then $(CYGPATH_W) 'src/preproc/refer/token.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/refer/token.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/refer/$(DEPDIR)/refer-token.Tpo src/preproc/refer/$(DEPDIR)/refer-token.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/refer/token.cpp' object='src/preproc/refer/refer-token.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/refer/refer-token.obj `if test -f 'src/preproc/refer/token.cpp'; then $(CYGPATH_W) 'src/preproc/refer/token.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/refer/token.cpp'; fi`
+
+src/preproc/refer/refer-label.o: src/preproc/refer/label.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/refer/refer-label.o -MD -MP -MF src/preproc/refer/$(DEPDIR)/refer-label.Tpo -c -o src/preproc/refer/refer-label.o `test -f 'src/preproc/refer/label.cpp' || echo '$(srcdir)/'`src/preproc/refer/label.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/refer/$(DEPDIR)/refer-label.Tpo src/preproc/refer/$(DEPDIR)/refer-label.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/refer/label.cpp' object='src/preproc/refer/refer-label.o' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/refer/refer-label.o `test -f 'src/preproc/refer/label.cpp' || echo '$(srcdir)/'`src/preproc/refer/label.cpp
+
+src/preproc/refer/refer-label.obj: src/preproc/refer/label.cpp
+@am__fastdepCXX_TRUE@  $(AM_V_CXX)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -MT src/preproc/refer/refer-label.obj -MD -MP -MF src/preproc/refer/$(DEPDIR)/refer-label.Tpo -c -o src/preproc/refer/refer-label.obj `if test -f 'src/preproc/refer/label.cpp'; then $(CYGPATH_W) 'src/preproc/refer/label.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/refer/label.cpp'; fi`
+@am__fastdepCXX_TRUE@  $(AM_V_at)$(am__mv) src/preproc/refer/$(DEPDIR)/refer-label.Tpo src/preproc/refer/$(DEPDIR)/refer-label.Po
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     $(AM_V_CXX)source='src/preproc/refer/label.cpp' object='src/preproc/refer/refer-label.obj' libtool=no @AMDEPBACKSLASH@
+@AMDEP_TRUE@@am__fastdepCXX_FALSE@     DEPDIR=$(DEPDIR) $(CXXDEPMODE) $(depcomp) @AMDEPBACKSLASH@
+@am__fastdepCXX_FALSE@ $(AM_V_CXX@am__nodep@)$(CXX) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(refer_CPPFLAGS) $(CPPFLAGS) $(AM_CXXFLAGS) $(CXXFLAGS) -c -o src/preproc/refer/refer-label.obj `if test -f 'src/preproc/refer/label.cpp'; then $(CYGPATH_W) 'src/preproc/refer/label.cpp'; else $(CYGPATH_W) '$(srcdir)/src/preproc/refer/label.cpp'; fi`
+
+.ypp.cpp:
+       $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE)
+install-man1: $(man1_MANS)
+       @$(NORMAL_INSTALL)
+       @list1='$(man1_MANS)'; \
+       list2=''; \
+       test -n "$(man1dir)" \
+         && test -n "`echo $$list1$$list2`" \
+         || exit 0; \
+       echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \
+       $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \
+       { for i in $$list1; do echo "$$i"; done;  \
+       if test -n "$$list2"; then \
+         for i in $$list2; do echo "$$i"; done \
+           | sed -n '/\.1[a-z]*$$/p'; \
+       fi; \
+       } | while read p; do \
+         if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; echo "$$p"; \
+       done | \
+       sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+       sed 'N;N;s,\n, ,g' | { \
+       list=; while read file base inst; do \
+         if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+           echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \
+           $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \
+         fi; \
+       done; \
+       for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+       while read files; do \
+         test -z "$$files" || { \
+           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \
+           $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \
+       done; }
+
+uninstall-man1:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man1_MANS)'; test -n "$(man1dir)" || exit 0; \
+       files=`{ for i in $$list; do echo "$$i"; done; \
+       } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+       dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir)
+install-man5: $(man5_MANS)
+       @$(NORMAL_INSTALL)
+       @list1='$(man5_MANS)'; \
+       list2=''; \
+       test -n "$(man5dir)" \
+         && test -n "`echo $$list1$$list2`" \
+         || exit 0; \
+       echo " $(MKDIR_P) '$(DESTDIR)$(man5dir)'"; \
+       $(MKDIR_P) "$(DESTDIR)$(man5dir)" || exit 1; \
+       { for i in $$list1; do echo "$$i"; done;  \
+       if test -n "$$list2"; then \
+         for i in $$list2; do echo "$$i"; done \
+           | sed -n '/\.5[a-z]*$$/p'; \
+       fi; \
+       } | while read p; do \
+         if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; echo "$$p"; \
+       done | \
+       sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+       sed 'N;N;s,\n, ,g' | { \
+       list=; while read file base inst; do \
+         if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+           echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
+           $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst" || exit $$?; \
+         fi; \
+       done; \
+       for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+       while read files; do \
+         test -z "$$files" || { \
+           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man5dir)'"; \
+           $(INSTALL_DATA) $$files "$(DESTDIR)$(man5dir)" || exit $$?; }; \
+       done; }
+
+uninstall-man5:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man5_MANS)'; test -n "$(man5dir)" || exit 0; \
+       files=`{ for i in $$list; do echo "$$i"; done; \
+       } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^5][0-9a-z]*$$,5,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+       dir='$(DESTDIR)$(man5dir)'; $(am__uninstall_files_from_dir)
+install-man7: $(man7_MANS)
+       @$(NORMAL_INSTALL)
+       @list1='$(man7_MANS)'; \
+       list2=''; \
+       test -n "$(man7dir)" \
+         && test -n "`echo $$list1$$list2`" \
+         || exit 0; \
+       echo " $(MKDIR_P) '$(DESTDIR)$(man7dir)'"; \
+       $(MKDIR_P) "$(DESTDIR)$(man7dir)" || exit 1; \
+       { for i in $$list1; do echo "$$i"; done;  \
+       if test -n "$$list2"; then \
+         for i in $$list2; do echo "$$i"; done \
+           | sed -n '/\.7[a-z]*$$/p'; \
+       fi; \
+       } | while read p; do \
+         if test -f $$p; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; echo "$$p"; \
+       done | \
+       sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \
+       sed 'N;N;s,\n, ,g' | { \
+       list=; while read file base inst; do \
+         if test "$$base" = "$$inst"; then list="$$list $$file"; else \
+           echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man7dir)/$$inst'"; \
+           $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man7dir)/$$inst" || exit $$?; \
+         fi; \
+       done; \
+       for i in $$list; do echo "$$i"; done | $(am__base_list) | \
+       while read files; do \
+         test -z "$$files" || { \
+           echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man7dir)'"; \
+           $(INSTALL_DATA) $$files "$(DESTDIR)$(man7dir)" || exit $$?; }; \
+       done; }
+
+uninstall-man7:
+       @$(NORMAL_UNINSTALL)
+       @list='$(man7_MANS)'; test -n "$(man7dir)" || exit 0; \
+       files=`{ for i in $$list; do echo "$$i"; done; \
+       } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^7][0-9a-z]*$$,7,;x' \
+             -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \
+       dir='$(DESTDIR)$(man7dir)'; $(am__uninstall_files_from_dir)
+install-devX10012fontDATA: $(devX10012font_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devX10012font_DATA)'; test -n "$(devX10012fontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devX10012fontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devX10012fontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devX10012fontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devX10012fontdir)" || exit $$?; \
+       done
+
+uninstall-devX10012fontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devX10012font_DATA)'; test -n "$(devX10012fontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devX10012fontdir)'; $(am__uninstall_files_from_dir)
+install-devX100fontDATA: $(devX100font_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devX100font_DATA)'; test -n "$(devX100fontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devX100fontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devX100fontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devX100fontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devX100fontdir)" || exit $$?; \
+       done
+
+uninstall-devX100fontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devX100font_DATA)'; test -n "$(devX100fontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devX100fontdir)'; $(am__uninstall_files_from_dir)
+install-devX7512fontDATA: $(devX7512font_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devX7512font_DATA)'; test -n "$(devX7512fontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devX7512fontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devX7512fontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devX7512fontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devX7512fontdir)" || exit $$?; \
+       done
+
+uninstall-devX7512fontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devX7512font_DATA)'; test -n "$(devX7512fontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devX7512fontdir)'; $(am__uninstall_files_from_dir)
+install-devX75fontDATA: $(devX75font_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devX75font_DATA)'; test -n "$(devX75fontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devX75fontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devX75fontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devX75fontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devX75fontdir)" || exit $$?; \
+       done
+
+uninstall-devX75fontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devX75font_DATA)'; test -n "$(devX75fontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devX75fontdir)'; $(am__uninstall_files_from_dir)
+install-devasciifontDATA: $(devasciifont_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devasciifont_DATA)'; test -n "$(devasciifontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devasciifontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devasciifontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devasciifontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devasciifontdir)" || exit $$?; \
+       done
+
+uninstall-devasciifontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devasciifont_DATA)'; test -n "$(devasciifontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devasciifontdir)'; $(am__uninstall_files_from_dir)
+install-devcp1047fontDATA: $(devcp1047font_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devcp1047font_DATA)'; test -n "$(devcp1047fontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devcp1047fontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devcp1047fontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devcp1047fontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devcp1047fontdir)" || exit $$?; \
+       done
+
+uninstall-devcp1047fontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devcp1047font_DATA)'; test -n "$(devcp1047fontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devcp1047fontdir)'; $(am__uninstall_files_from_dir)
+install-devdvifontDATA: $(devdvifont_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devdvifont_DATA)'; test -n "$(devdvifontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devdvifontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devdvifontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devdvifontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devdvifontdir)" || exit $$?; \
+       done
+
+uninstall-devdvifontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devdvifont_DATA)'; test -n "$(devdvifontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devdvifontdir)'; $(am__uninstall_files_from_dir)
+install-devdvigenDATA: $(devdvigen_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devdvigen_DATA)'; test -n "$(devdvigendir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devdvigendir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devdvigendir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devdvigendir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devdvigendir)" || exit $$?; \
+       done
+
+uninstall-devdvigenDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devdvigen_DATA)'; test -n "$(devdvigendir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devdvigendir)'; $(am__uninstall_files_from_dir)
+install-devhtmlfontDATA: $(devhtmlfont_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devhtmlfont_DATA)'; test -n "$(devhtmlfontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devhtmlfontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devhtmlfontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devhtmlfontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devhtmlfontdir)" || exit $$?; \
+       done
+
+uninstall-devhtmlfontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devhtmlfont_DATA)'; test -n "$(devhtmlfontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devhtmlfontdir)'; $(am__uninstall_files_from_dir)
+install-devlatin1fontDATA: $(devlatin1font_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devlatin1font_DATA)'; test -n "$(devlatin1fontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devlatin1fontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devlatin1fontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devlatin1fontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devlatin1fontdir)" || exit $$?; \
+       done
+
+uninstall-devlatin1fontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devlatin1font_DATA)'; test -n "$(devlatin1fontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devlatin1fontdir)'; $(am__uninstall_files_from_dir)
+install-devlbpfontDATA: $(devlbpfont_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devlbpfont_DATA)'; test -n "$(devlbpfontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devlbpfontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devlbpfontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devlbpfontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devlbpfontdir)" || exit $$?; \
+       done
+
+uninstall-devlbpfontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devlbpfont_DATA)'; test -n "$(devlbpfontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devlbpfontdir)'; $(am__uninstall_files_from_dir)
+install-devpdffontDATA: $(devpdffont_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devpdffont_DATA)'; test -n "$(devpdffontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devpdffontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devpdffontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devpdffontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devpdffontdir)" || exit $$?; \
+       done
+
+uninstall-devpdffontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devpdffont_DATA)'; test -n "$(devpdffontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devpdffontdir)'; $(am__uninstall_files_from_dir)
+install-devpdffontencDATA: $(devpdffontenc_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devpdffontenc_DATA)'; test -n "$(devpdffontencdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devpdffontencdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devpdffontencdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devpdffontencdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devpdffontencdir)" || exit $$?; \
+       done
+
+uninstall-devpdffontencDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devpdffontenc_DATA)'; test -n "$(devpdffontencdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devpdffontencdir)'; $(am__uninstall_files_from_dir)
+install-devpdffontmapDATA: $(devpdffontmap_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devpdffontmap_DATA)'; test -n "$(devpdffontmapdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devpdffontmapdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devpdffontmapdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devpdffontmapdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devpdffontmapdir)" || exit $$?; \
+       done
+
+uninstall-devpdffontmapDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devpdffontmap_DATA)'; test -n "$(devpdffontmapdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devpdffontmapdir)'; $(am__uninstall_files_from_dir)
+install-devutf8fontDATA: $(devutf8font_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(devutf8font_DATA)'; test -n "$(devutf8fontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devutf8fontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devutf8fontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devutf8fontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devutf8fontdir)" || exit $$?; \
+       done
+
+uninstall-devutf8fontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(devutf8font_DATA)'; test -n "$(devutf8fontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devutf8fontdir)'; $(am__uninstall_files_from_dir)
+install-dist_chemexampleDATA: $(dist_chemexample_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_chemexample_DATA)'; test -n "$(chemexampledir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(chemexampledir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(chemexampledir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(chemexampledir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(chemexampledir)" || exit $$?; \
+       done
+
+uninstall-dist_chemexampleDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_chemexample_DATA)'; test -n "$(chemexampledir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(chemexampledir)'; $(am__uninstall_files_from_dir)
+install-dist_chempicDATA: $(dist_chempic_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_chempic_DATA)'; test -n "$(chempicdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(chempicdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(chempicdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(chempicdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(chempicdir)" || exit $$?; \
+       done
+
+uninstall-dist_chempicDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_chempic_DATA)'; test -n "$(chempicdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(chempicdir)'; $(am__uninstall_files_from_dir)
+install-dist_devlj4fontDATA: $(dist_devlj4font_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_devlj4font_DATA)'; test -n "$(devlj4fontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devlj4fontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devlj4fontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devlj4fontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devlj4fontdir)" || exit $$?; \
+       done
+
+uninstall-dist_devlj4fontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_devlj4font_DATA)'; test -n "$(devlj4fontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devlj4fontdir)'; $(am__uninstall_files_from_dir)
+install-dist_devlj4fontgenDATA: $(dist_devlj4fontgen_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_devlj4fontgen_DATA)'; test -n "$(devlj4fontgendir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devlj4fontgendir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devlj4fontgendir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devlj4fontgendir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devlj4fontgendir)" || exit $$?; \
+       done
+
+uninstall-dist_devlj4fontgenDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_devlj4fontgen_DATA)'; test -n "$(devlj4fontgendir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devlj4fontgendir)'; $(am__uninstall_files_from_dir)
+install-dist_devpsfontDATA: $(dist_devpsfont_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_devpsfont_DATA)'; test -n "$(devpsfontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devpsfontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devpsfontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devpsfontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devpsfontdir)" || exit $$?; \
+       done
+
+uninstall-dist_devpsfontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_devpsfont_DATA)'; test -n "$(devpsfontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devpsfontdir)'; $(am__uninstall_files_from_dir)
+install-dist_devpsgenDATA: $(dist_devpsgen_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_devpsgen_DATA)'; test -n "$(devpsgendir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devpsgendir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devpsgendir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devpsgendir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devpsgendir)" || exit $$?; \
+       done
+
+uninstall-dist_devpsgenDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_devpsgen_DATA)'; test -n "$(devpsgendir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devpsgendir)'; $(am__uninstall_files_from_dir)
+install-dist_docexamplesDATA: $(dist_docexamples_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_docexamples_DATA)'; test -n "$(docexamplesdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(docexamplesdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(docexamplesdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docexamplesdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(docexamplesdir)" || exit $$?; \
+       done
+
+uninstall-dist_docexamplesDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_docexamples_DATA)'; test -n "$(docexamplesdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(docexamplesdir)'; $(am__uninstall_files_from_dir)
+install-dist_glilypondDATA: $(dist_glilypond_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_glilypond_DATA)'; test -n "$(glilyponddir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(glilyponddir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(glilyponddir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(glilyponddir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(glilyponddir)" || exit $$?; \
+       done
+
+uninstall-dist_glilypondDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_glilypond_DATA)'; test -n "$(glilyponddir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(glilyponddir)'; $(am__uninstall_files_from_dir)
+install-dist_gpinyinDATA: $(dist_gpinyin_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_gpinyin_DATA)'; test -n "$(gpinyindir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(gpinyindir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(gpinyindir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(gpinyindir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(gpinyindir)" || exit $$?; \
+       done
+
+uninstall-dist_gpinyinDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_gpinyin_DATA)'; test -n "$(gpinyindir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(gpinyindir)'; $(am__uninstall_files_from_dir)
+install-dist_grogDATA: $(dist_grog_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_grog_DATA)'; test -n "$(grogdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(grogdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(grogdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(grogdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(grogdir)" || exit $$?; \
+       done
+
+uninstall-dist_grogDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_grog_DATA)'; test -n "$(grogdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(grogdir)'; $(am__uninstall_files_from_dir)
+install-dist_hdtblexampleDATA: $(dist_hdtblexample_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_hdtblexample_DATA)'; test -n "$(hdtblexampledir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(hdtblexampledir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(hdtblexampledir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hdtblexampledir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(hdtblexampledir)" || exit $$?; \
+       done
+
+uninstall-dist_hdtblexampleDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_hdtblexample_DATA)'; test -n "$(hdtblexampledir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(hdtblexampledir)'; $(am__uninstall_files_from_dir)
+install-dist_localtmacDATA: $(dist_localtmac_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_localtmac_DATA)'; test -n "$(localtmacdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(localtmacdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(localtmacdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(localtmacdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(localtmacdir)" || exit $$?; \
+       done
+
+uninstall-dist_localtmacDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_localtmac_DATA)'; test -n "$(localtmacdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(localtmacdir)'; $(am__uninstall_files_from_dir)
+install-dist_mmDATA: $(dist_mm_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_mm_DATA)'; test -n "$(mmdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(mmdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(mmdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mmdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(mmdir)" || exit $$?; \
+       done
+
+uninstall-dist_mmDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_mm_DATA)'; test -n "$(mmdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(mmdir)'; $(am__uninstall_files_from_dir)
+install-dist_mmexampleDATA: $(dist_mmexample_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_mmexample_DATA)'; test -n "$(mmexampledir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(mmexampledir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(mmexampledir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mmexampledir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(mmexampledir)" || exit $$?; \
+       done
+
+uninstall-dist_mmexampleDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_mmexample_DATA)'; test -n "$(mmexampledir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(mmexampledir)'; $(am__uninstall_files_from_dir)
+install-dist_momexampleDATA: $(dist_momexample_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_momexample_DATA)'; test -n "$(momexampledir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(momexampledir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(momexampledir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(momexampledir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(momexampledir)" || exit $$?; \
+       done
+
+uninstall-dist_momexampleDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_momexample_DATA)'; test -n "$(momexampledir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(momexampledir)'; $(am__uninstall_files_from_dir)
+install-dist_momtmacDATA: $(dist_momtmac_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_momtmac_DATA)'; test -n "$(momtmacdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(momtmacdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(momtmacdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(momtmacdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(momtmacdir)" || exit $$?; \
+       done
+
+uninstall-dist_momtmacDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_momtmac_DATA)'; test -n "$(momtmacdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(momtmacdir)'; $(am__uninstall_files_from_dir)
+install-dist_olddevpsfontDATA: $(dist_olddevpsfont_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_olddevpsfont_DATA)'; test -n "$(olddevpsfontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(olddevpsfontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(olddevpsfontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(olddevpsfontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(olddevpsfontdir)" || exit $$?; \
+       done
+
+uninstall-dist_olddevpsfontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_olddevpsfont_DATA)'; test -n "$(olddevpsfontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(olddevpsfontdir)'; $(am__uninstall_files_from_dir)
+install-dist_otherdocDATA: $(dist_otherdoc_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_otherdoc_DATA)'; test -n "$(otherdocdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(otherdocdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(otherdocdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(otherdocdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(otherdocdir)" || exit $$?; \
+       done
+
+uninstall-dist_otherdocDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_otherdoc_DATA)'; test -n "$(otherdocdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(otherdocdir)'; $(am__uninstall_files_from_dir)
+install-dist_pdfmarktmacDATA: $(dist_pdfmarktmac_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_pdfmarktmac_DATA)'; test -n "$(pdfmarktmacdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(pdfmarktmacdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(pdfmarktmacdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfmarktmacdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfmarktmacdir)" || exit $$?; \
+       done
+
+uninstall-dist_pdfmarktmacDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_pdfmarktmac_DATA)'; test -n "$(pdfmarktmacdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(pdfmarktmacdir)'; $(am__uninstall_files_from_dir)
+install-dist_tmacDATA: $(dist_tmac_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_tmac_DATA)'; test -n "$(tmacdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(tmacdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(tmacdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(tmacdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(tmacdir)" || exit $$?; \
+       done
+
+uninstall-dist_tmacDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_tmac_DATA)'; test -n "$(tmacdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(tmacdir)'; $(am__uninstall_files_from_dir)
+install-dist_tmacmmDATA: $(dist_tmacmm_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(dist_tmacmm_DATA)'; test -n "$(tmacmmdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(tmacmmdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(tmacmmdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(tmacmmdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(tmacmmdir)" || exit $$?; \
+       done
+
+uninstall-dist_tmacmmDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(dist_tmacmm_DATA)'; test -n "$(tmacmmdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(tmacmmdir)'; $(am__uninstall_files_from_dir)
+install-grofferDATA: $(groffer_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(groffer_DATA)'; test -n "$(grofferdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(grofferdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(grofferdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(grofferdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(grofferdir)" || exit $$?; \
+       done
+
+uninstall-grofferDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(groffer_DATA)'; test -n "$(grofferdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(grofferdir)'; $(am__uninstall_files_from_dir)
+install-groffoptsDATA: $(groffopts_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(groffopts_DATA)'; test -n "$(groffoptsdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(groffoptsdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(groffoptsdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(groffoptsdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(groffoptsdir)" || exit $$?; \
+       done
+
+uninstall-groffoptsDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(groffopts_DATA)'; test -n "$(groffoptsdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(groffoptsdir)'; $(am__uninstall_files_from_dir)
+install-hdtbltmacDATA: $(hdtbltmac_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(hdtbltmac_DATA)'; test -n "$(hdtbltmacdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(hdtbltmacdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(hdtbltmacdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hdtbltmacdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(hdtbltmacdir)" || exit $$?; \
+       done
+
+uninstall-hdtbltmacDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(hdtbltmac_DATA)'; test -n "$(hdtbltmacdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(hdtbltmacdir)'; $(am__uninstall_files_from_dir)
+install-htmlpicDATA: $(htmlpic_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(htmlpic_DATA)'; test -n "$(htmlpicdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(htmlpicdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(htmlpicdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmlpicdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(htmlpicdir)" || exit $$?; \
+       done
+
+uninstall-htmlpicDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(htmlpic_DATA)'; test -n "$(htmlpicdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(htmlpicdir)'; $(am__uninstall_files_from_dir)
+install-momhtmlDATA: $(momhtml_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(momhtml_DATA)'; test -n "$(momhtmldir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(momhtmldir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(momhtmldir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(momhtmldir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(momhtmldir)" || exit $$?; \
+       done
+
+uninstall-momhtmlDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(momhtml_DATA)'; test -n "$(momhtmldir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(momhtmldir)'; $(am__uninstall_files_from_dir)
+install-nodist_chemexampleDATA: $(nodist_chemexample_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_chemexample_DATA)'; test -n "$(chemexampledir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(chemexampledir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(chemexampledir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(chemexampledir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(chemexampledir)" || exit $$?; \
+       done
+
+uninstall-nodist_chemexampleDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_chemexample_DATA)'; test -n "$(chemexampledir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(chemexampledir)'; $(am__uninstall_files_from_dir)
+install-nodist_chemexample122DATA: $(nodist_chemexample122_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_chemexample122_DATA)'; test -n "$(chemexample122dir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(chemexample122dir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(chemexample122dir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(chemexample122dir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(chemexample122dir)" || exit $$?; \
+       done
+
+uninstall-nodist_chemexample122DATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_chemexample122_DATA)'; test -n "$(chemexample122dir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(chemexample122dir)'; $(am__uninstall_files_from_dir)
+install-nodist_devlj4fontDATA: $(nodist_devlj4font_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_devlj4font_DATA)'; test -n "$(devlj4fontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devlj4fontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devlj4fontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devlj4fontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devlj4fontdir)" || exit $$?; \
+       done
+
+uninstall-nodist_devlj4fontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_devlj4font_DATA)'; test -n "$(devlj4fontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devlj4fontdir)'; $(am__uninstall_files_from_dir)
+install-nodist_devpsfontDATA: $(nodist_devpsfont_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_devpsfont_DATA)'; test -n "$(devpsfontdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(devpsfontdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(devpsfontdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(devpsfontdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(devpsfontdir)" || exit $$?; \
+       done
+
+uninstall-nodist_devpsfontDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_devpsfont_DATA)'; test -n "$(devpsfontdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(devpsfontdir)'; $(am__uninstall_files_from_dir)
+install-nodist_docexamplesDATA: $(nodist_docexamples_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_docexamples_DATA)'; test -n "$(docexamplesdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(docexamplesdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(docexamplesdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docexamplesdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(docexamplesdir)" || exit $$?; \
+       done
+
+uninstall-nodist_docexamplesDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_docexamples_DATA)'; test -n "$(docexamplesdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(docexamplesdir)'; $(am__uninstall_files_from_dir)
+install-nodist_docpdfdocDATA: $(nodist_docpdfdoc_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_docpdfdoc_DATA)'; test -n "$(docpdfdocdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(docpdfdocdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(docpdfdocdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(docpdfdocdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(docpdfdocdir)" || exit $$?; \
+       done
+
+uninstall-nodist_docpdfdocDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_docpdfdoc_DATA)'; test -n "$(docpdfdocdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(docpdfdocdir)'; $(am__uninstall_files_from_dir)
+install-nodist_hdtblexampleDATA: $(nodist_hdtblexample_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_hdtblexample_DATA)'; test -n "$(hdtblexampledir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(hdtblexampledir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(hdtblexampledir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(hdtblexampledir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(hdtblexampledir)" || exit $$?; \
+       done
+
+uninstall-nodist_hdtblexampleDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_hdtblexample_DATA)'; test -n "$(hdtblexampledir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(hdtblexampledir)'; $(am__uninstall_files_from_dir)
+install-nodist_htmlexamplesDATA: $(nodist_htmlexamples_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_htmlexamples_DATA)'; test -n "$(htmlexamplesdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(htmlexamplesdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(htmlexamplesdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmlexamplesdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(htmlexamplesdir)" || exit $$?; \
+       done
+
+uninstall-nodist_htmlexamplesDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_htmlexamples_DATA)'; test -n "$(htmlexamplesdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(htmlexamplesdir)'; $(am__uninstall_files_from_dir)
+install-nodist_mdocDATA: $(nodist_mdoc_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_mdoc_DATA)'; test -n "$(mdocdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(mdocdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(mdocdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(mdocdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(mdocdir)" || exit $$?; \
+       done
+
+uninstall-nodist_mdocDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_mdoc_DATA)'; test -n "$(mdocdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(mdocdir)'; $(am__uninstall_files_from_dir)
+install-nodist_momprocessedexampleDATA: $(nodist_momprocessedexample_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_momprocessedexample_DATA)'; test -n "$(momprocessedexampledir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(momprocessedexampledir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(momprocessedexampledir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(momprocessedexampledir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(momprocessedexampledir)" || exit $$?; \
+       done
+
+uninstall-nodist_momprocessedexampleDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_momprocessedexample_DATA)'; test -n "$(momprocessedexampledir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(momprocessedexampledir)'; $(am__uninstall_files_from_dir)
+install-nodist_otherdocDATA: $(nodist_otherdoc_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_otherdoc_DATA)'; test -n "$(otherdocdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(otherdocdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(otherdocdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(otherdocdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(otherdocdir)" || exit $$?; \
+       done
+
+uninstall-nodist_otherdocDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_otherdoc_DATA)'; test -n "$(otherdocdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(otherdocdir)'; $(am__uninstall_files_from_dir)
+install-nodist_pdfmarkpdfdocDATA: $(nodist_pdfmarkpdfdoc_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_pdfmarkpdfdoc_DATA)'; test -n "$(pdfmarkpdfdocdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(pdfmarkpdfdocdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(pdfmarkpdfdocdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfmarkpdfdocdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfmarkpdfdocdir)" || exit $$?; \
+       done
+
+uninstall-nodist_pdfmarkpdfdocDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_pdfmarkpdfdoc_DATA)'; test -n "$(pdfmarkpdfdocdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(pdfmarkpdfdocdir)'; $(am__uninstall_files_from_dir)
+install-nodist_tmacDATA: $(nodist_tmac_DATA)
+       @$(NORMAL_INSTALL)
+       @list='$(nodist_tmac_DATA)'; test -n "$(tmacdir)" || list=; \
+       if test -n "$$list"; then \
+         echo " $(MKDIR_P) '$(DESTDIR)$(tmacdir)'"; \
+         $(MKDIR_P) "$(DESTDIR)$(tmacdir)" || exit 1; \
+       fi; \
+       for p in $$list; do \
+         if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
+         echo "$$d$$p"; \
+       done | $(am__base_list) | \
+       while read files; do \
+         echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(tmacdir)'"; \
+         $(INSTALL_DATA) $$files "$(DESTDIR)$(tmacdir)" || exit $$?; \
+       done
+
+uninstall-nodist_tmacDATA:
+       @$(NORMAL_UNINSTALL)
+       @list='$(nodist_tmac_DATA)'; test -n "$(tmacdir)" || list=; \
+       files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \
+       dir='$(DESTDIR)$(tmacdir)'; $(am__uninstall_files_from_dir)
+
+ID: $(am__tagged_files)
+       $(am__define_uniq_tagged_files); mkid -fID $$unique
+tags: tags-am
+TAGS: tags
+
+tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       set x; \
+       here=`pwd`; \
+       $(am__define_uniq_tagged_files); \
+       shift; \
+       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
+         test -n "$$unique" || unique=$$empty_fix; \
+         if test $$# -gt 0; then \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             "$$@" $$unique; \
+         else \
+           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
+             $$unique; \
+         fi; \
+       fi
+ctags: ctags-am
+
+CTAGS: ctags
+ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
+       $(am__define_uniq_tagged_files); \
+       test -z "$(CTAGS_ARGS)$$unique" \
+         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
+            $$unique
+
+GTAGS:
+       here=`$(am__cd) $(top_builddir) && pwd` \
+         && $(am__cd) $(top_srcdir) \
+         && gtags -i $(GTAGS_ARGS) "$$here"
+cscope: cscope.files
+       test ! -s cscope.files \
+         || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
+clean-cscope:
+       -rm -f cscope.files
+cscope.files: clean-cscope cscopelist
+cscopelist: cscopelist-am
+
+cscopelist-am: $(am__tagged_files)
+       list='$(am__tagged_files)'; \
+       case "$(srcdir)" in \
+         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
+         *) sdir=$(subdir)/$(srcdir) ;; \
+       esac; \
+       for i in $$list; do \
+         if test -f "$$i"; then \
+           echo "$(subdir)/$$i"; \
+         else \
+           echo "$$sdir/$$i"; \
+         fi; \
+       done >> $(top_builddir)/cscope.files
+
+distclean-tags:
+       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
+       -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
+
+# Recover from deleted '.trs' file; this should ensure that
+# "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create
+# both 'foo.log' and 'foo.trs'.  Break the recipe in two subshells
+# to avoid problems with "make -n".
+.log.trs:
+       rm -f $< $@
+       $(MAKE) $(AM_MAKEFLAGS) $<
+
+# Leading 'am--fnord' is there to ensure the list of targets does not
+# expand to empty, as could happen e.g. with make check TESTS=''.
+am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck)
+am--force-recheck:
+       @:
+
+$(TEST_SUITE_LOG): $(TEST_LOGS)
+       @$(am__set_TESTS_bases); \
+       am__f_ok () { test -f "$$1" && test -r "$$1"; }; \
+       redo_bases=`for i in $$bases; do \
+                     am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \
+                   done`; \
+       if test -n "$$redo_bases"; then \
+         redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \
+         redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \
+         if $(am__make_dryrun); then :; else \
+           rm -f $$redo_logs && rm -f $$redo_results || exit 1; \
+         fi; \
+       fi; \
+       if test -n "$$am__remaking_logs"; then \
+         echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \
+              "recursion detected" >&2; \
+       elif test -n "$$redo_logs"; then \
+         am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \
+       fi; \
+       if $(am__make_dryrun); then :; else \
+         st=0;  \
+         errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \
+         for i in $$redo_bases; do \
+           test -f $$i.trs && test -r $$i.trs \
+             || { echo "$$errmsg $$i.trs" >&2; st=1; }; \
+           test -f $$i.log && test -r $$i.log \
+             || { echo "$$errmsg $$i.log" >&2; st=1; }; \
+         done; \
+         test $$st -eq 0 || exit 1; \
+       fi
+       @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \
+       ws='[   ]'; \
+       results=`for b in $$bases; do echo $$b.trs; done`; \
+       test -n "$$results" || results=/dev/null; \
+       all=`  grep "^$$ws*:test-result:"           $$results | wc -l`; \
+       pass=` grep "^$$ws*:test-result:$$ws*PASS"  $$results | wc -l`; \
+       fail=` grep "^$$ws*:test-result:$$ws*FAIL"  $$results | wc -l`; \
+       skip=` grep "^$$ws*:test-result:$$ws*SKIP"  $$results | wc -l`; \
+       xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \
+       xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \
+       error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \
+       if test `expr $$fail + $$xpass + $$error` -eq 0; then \
+         success=true; \
+       else \
+         success=false; \
+       fi; \
+       br='==================='; br=$$br$$br$$br$$br; \
+       result_count () \
+       { \
+           if test x"$$1" = x"--maybe-color"; then \
+             maybe_colorize=yes; \
+           elif test x"$$1" = x"--no-color"; then \
+             maybe_colorize=no; \
+           else \
+             echo "$@: invalid 'result_count' usage" >&2; exit 4; \
+           fi; \
+           shift; \
+           desc=$$1 count=$$2; \
+           if test $$maybe_colorize = yes && test $$count -gt 0; then \
+             color_start=$$3 color_end=$$std; \
+           else \
+             color_start= color_end=; \
+           fi; \
+           echo "$${color_start}# $$desc $$count$${color_end}"; \
+       }; \
+       create_testsuite_report () \
+       { \
+         result_count $$1 "TOTAL:" $$all   "$$brg"; \
+         result_count $$1 "PASS: " $$pass  "$$grn"; \
+         result_count $$1 "SKIP: " $$skip  "$$blu"; \
+         result_count $$1 "XFAIL:" $$xfail "$$lgn"; \
+         result_count $$1 "FAIL: " $$fail  "$$red"; \
+         result_count $$1 "XPASS:" $$xpass "$$red"; \
+         result_count $$1 "ERROR:" $$error "$$mgn"; \
+       }; \
+       {                                                               \
+         echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" |       \
+           $(am__rst_title);                                           \
+         create_testsuite_report --no-color;                           \
+         echo;                                                         \
+         echo ".. contents:: :depth: 2";                               \
+         echo;                                                         \
+         for b in $$bases; do echo $$b; done                           \
+           | $(am__create_global_log);                                 \
+       } >$(TEST_SUITE_LOG).tmp || exit 1;                             \
+       mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG);                     \
+       if $$success; then                                              \
+         col="$$grn";                                                  \
+        else                                                           \
+         col="$$red";                                                  \
+         test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG);               \
+       fi;                                                             \
+       echo "$${col}$$br$${std}";                                      \
+       echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}";   \
+       echo "$${col}$$br$${std}";                                      \
+       create_testsuite_report --maybe-color;                          \
+       echo "$$col$$br$$std";                                          \
+       if $$success; then :; else                                      \
+         echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}";         \
+         if test -n "$(PACKAGE_BUGREPORT)"; then                       \
+           echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \
+         fi;                                                           \
+         echo "$$col$$br$$std";                                        \
+       fi;                                                             \
+       $$success || exit 1
+
+check-TESTS: $(check_PROGRAMS) $(check_SCRIPTS)
+       @list='$(RECHECK_LOGS)';           test -z "$$list" || rm -f $$list
+       @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       trs_list=`for i in $$bases; do echo $$i.trs; done`; \
+       log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \
+       exit $$?;
+recheck: all $(check_PROGRAMS) $(check_SCRIPTS)
+       @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+       @set +e; $(am__set_TESTS_bases); \
+       bases=`for i in $$bases; do echo $$i; done \
+                | $(am__list_recheck_tests)` || exit 1; \
+       log_list=`for i in $$bases; do echo $$i.log; done`; \
+       log_list=`echo $$log_list`; \
+       $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \
+               am__force_recheck=am--force-recheck \
+               TEST_LOGS="$$log_list"; \
+       exit $$?
+contrib/gdiffmk/tests/gdiffmk_tests.sh.log: contrib/gdiffmk/tests/gdiffmk_tests.sh
+       @p='contrib/gdiffmk/tests/gdiffmk_tests.sh'; \
+       b='contrib/gdiffmk/tests/gdiffmk_tests.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+contrib/hdtbl/examples/test-hdtbl.sh.log: contrib/hdtbl/examples/test-hdtbl.sh
+       @p='contrib/hdtbl/examples/test-hdtbl.sh'; \
+       b='contrib/hdtbl/examples/test-hdtbl.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+contrib/mom/examples/tests-mom.sh.log: contrib/mom/examples/tests-mom.sh
+       @p='contrib/mom/examples/tests-mom.sh'; \
+       b='contrib/mom/examples/tests-mom.sh'; \
+       $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+.test.log:
+       @p='$<'; \
+       $(am__set_b); \
+       $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+       --log-file $$b.log --trs-file $$b.trs \
+       $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+       "$$tst" $(AM_TESTS_FD_REDIRECT)
+@am__EXEEXT_TRUE@.test$(EXEEXT).log:
+@am__EXEEXT_TRUE@      @p='$<'; \
+@am__EXEEXT_TRUE@      $(am__set_b); \
+@am__EXEEXT_TRUE@      $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \
+@am__EXEEXT_TRUE@      --log-file $$b.log --trs-file $$b.trs \
+@am__EXEEXT_TRUE@      $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \
+@am__EXEEXT_TRUE@      "$$tst" $(AM_TESTS_FD_REDIRECT)
+
+distdir: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) distdir-am
+
+distdir-am: $(DISTFILES)
+       $(am__remove_distdir)
+       test -d "$(distdir)" || mkdir "$(distdir)"
+       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
+       list='$(DISTFILES)'; \
+         dist_files=`for file in $$list; do echo $$file; done | \
+         sed -e "s|^$$srcdirstrip/||;t" \
+             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
+       case $$dist_files in \
+         */*) $(MKDIR_P) `echo "$$dist_files" | \
+                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
+                          sort -u` ;; \
+       esac; \
+       for file in $$dist_files; do \
+         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
+         if test -d $$d/$$file; then \
+           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
+           if test -d "$(distdir)/$$file"; then \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
+             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
+             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
+           fi; \
+           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
+         else \
+           test -f "$(distdir)/$$file" \
+           || cp -p $$d/$$file "$(distdir)/$$file" \
+           || exit 1; \
+         fi; \
+       done
+       $(MAKE) $(AM_MAKEFLAGS) \
+         top_distdir="$(top_distdir)" distdir="$(distdir)" \
+         dist-hook
+       -test -n "$(am__skip_mode_fix)" \
+       || find "$(distdir)" -type d ! -perm -755 \
+               -exec chmod u+rwx,go+rx {} \; -o \
+         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
+         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
+       || chmod -R a+r "$(distdir)"
+dist-gzip: distdir
+       tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz
+       $(am__post_remove_distdir)
+
+dist-bzip2: distdir
+       tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
+       $(am__post_remove_distdir)
+
+dist-lzip: distdir
+       tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
+       $(am__post_remove_distdir)
+
+dist-xz: distdir
+       tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
+       $(am__post_remove_distdir)
+
+dist-tarZ: distdir
+       @echo WARNING: "Support for distribution archives compressed with" \
+                      "legacy program 'compress' is deprecated." >&2
+       @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
+       $(am__post_remove_distdir)
+
+dist-shar: distdir
+       @echo WARNING: "Support for shar distribution archives is" \
+                      "deprecated." >&2
+       @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
+       shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz
+       $(am__post_remove_distdir)
+
+dist-zip: distdir
+       -rm -f $(distdir).zip
+       zip -rq $(distdir).zip $(distdir)
+       $(am__post_remove_distdir)
+
+dist dist-all:
+       $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
+       $(am__post_remove_distdir)
+
+# This target untars the dist file and tries a VPATH configuration.  Then
+# it guarantees that the distribution is self-contained by making another
+# tarfile.
+distcheck: dist
+       case '$(DIST_ARCHIVES)' in \
+       *.tar.gz*) \
+         eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\
+       *.tar.bz2*) \
+         bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
+       *.tar.lz*) \
+         lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
+       *.tar.xz*) \
+         xz -dc $(distdir).tar.xz | $(am__untar) ;;\
+       *.tar.Z*) \
+         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
+       *.shar.gz*) \
+         eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\
+       *.zip*) \
+         unzip $(distdir).zip ;;\
+       esac
+       chmod -R a-w $(distdir)
+       chmod u+w $(distdir)
+       mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst
+       chmod a-w $(distdir)
+       test -d $(distdir)/_build || exit 0; \
+       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
+         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
+         && am__cwd=`pwd` \
+         && $(am__cd) $(distdir)/_build/sub \
+         && ../../configure \
+           $(AM_DISTCHECK_CONFIGURE_FLAGS) \
+           $(DISTCHECK_CONFIGURE_FLAGS) \
+           --srcdir=../.. --prefix="$$dc_install_base" \
+         && $(MAKE) $(AM_MAKEFLAGS) \
+         && $(MAKE) $(AM_MAKEFLAGS) dvi \
+         && $(MAKE) $(AM_MAKEFLAGS) check \
+         && $(MAKE) $(AM_MAKEFLAGS) install \
+         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
+         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
+         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
+               distuninstallcheck \
+         && chmod -R a-w "$$dc_install_base" \
+         && ({ \
+              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
+              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
+                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
+             } || { rm -rf "$$dc_destdir"; exit 1; }) \
+         && rm -rf "$$dc_destdir" \
+         && $(MAKE) $(AM_MAKEFLAGS) dist \
+         && rm -rf $(DIST_ARCHIVES) \
+         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
+         && cd "$$am__cwd" \
+         || exit 1
+       $(am__post_remove_distdir)
+       @(echo "$(distdir) archives ready for distribution: "; \
+         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
+         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
+distuninstallcheck:
+       @test -n '$(distuninstallcheck_dir)' || { \
+         echo 'ERROR: trying to run $@ with an empty' \
+              '$$(distuninstallcheck_dir)' >&2; \
+         exit 1; \
+       }; \
+       $(am__cd) '$(distuninstallcheck_dir)' || { \
+         echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
+         exit 1; \
+       }; \
+       test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
+          || { echo "ERROR: files left after uninstall:" ; \
+               if test -n "$(DESTDIR)"; then \
+                 echo "  (check DESTDIR support)"; \
+               fi ; \
+               $(distuninstallcheck_listfiles) ; \
+               exit 1; } >&2
+distcleancheck: distclean
+       @if test '$(srcdir)' = . ; then \
+         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
+         exit 1 ; \
+       fi
+       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
+         || { echo "ERROR: files left in build directory after distclean:" ; \
+              $(distcleancheck_listfiles) ; \
+              exit 1; } >&2
+check-am: all-am
+       $(MAKE) $(AM_MAKEFLAGS) $(check_PROGRAMS) $(check_SCRIPTS)
+       $(MAKE) $(AM_MAKEFLAGS) check-TESTS
+check: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) check-am
+all-am: Makefile $(PROGRAMS) $(LIBRARIES) $(SCRIPTS) $(MANS) $(DATA) \
+               $(HEADERS)
+installdirs:
+       for dir in "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(prefixexecbindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(bindir)" "$(DESTDIR)$(prefixexecbindir)" "$(DESTDIR)$(man1dir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man7dir)" "$(DESTDIR)$(devX10012fontdir)" "$(DESTDIR)$(devX100fontdir)" "$(DESTDIR)$(devX7512fontdir)" "$(DESTDIR)$(devX75fontdir)" "$(DESTDIR)$(devasciifontdir)" "$(DESTDIR)$(devcp1047fontdir)" "$(DESTDIR)$(devdvifontdir)" "$(DESTDIR)$(devdvigendir)" "$(DESTDIR)$(devhtmlfontdir)" "$(DESTDIR)$(devlatin1fontdir)" "$(DESTDIR)$(devlbpfontdir)" "$(DESTDIR)$(devpdffontdir)" "$(DESTDIR)$(devpdffontencdir)" "$(DESTDIR)$(devpdffontmapdir)" "$(DESTDIR)$(devutf8fontdir)" "$(DESTDIR)$(chemexampledir)" "$(DESTDIR)$(chempicdir)" "$(DESTDIR)$(devlj4fontdir)" "$(DESTDIR)$(devlj4fontgendir)" "$(DESTDIR)$(devpsfontdir)" "$(DESTDIR)$(devpsgendir)" "$(DESTDIR)$(docexamplesdir)" "$(DESTDIR)$(glilyponddir)" "$(DESTDIR)$(gpinyindir)" "$(DESTDIR)$(grogdir)" "$(DESTDIR)$(hdtblexampledir)" "$(DESTDIR)$(localtmacdir)" "$(DESTDIR)$(mmdir)" "$(DESTDIR)$(mmexampledir)" "$(DESTDIR)$(momexampledir)" "$(DESTDIR)$(momtmacdir)" "$(DESTDIR)$(olddevpsfontdir)" "$(DESTDIR)$(otherdocdir)" "$(DESTDIR)$(pdfmarktmacdir)" "$(DESTDIR)$(tmacdir)" "$(DESTDIR)$(tmacmmdir)" "$(DESTDIR)$(grofferdir)" "$(DESTDIR)$(groffoptsdir)" "$(DESTDIR)$(hdtbltmacdir)" "$(DESTDIR)$(htmlpicdir)" "$(DESTDIR)$(momhtmldir)" "$(DESTDIR)$(chemexampledir)" "$(DESTDIR)$(chemexample122dir)" "$(DESTDIR)$(devlj4fontdir)" "$(DESTDIR)$(devpsfontdir)" "$(DESTDIR)$(docexamplesdir)" "$(DESTDIR)$(docpdfdocdir)" "$(DESTDIR)$(hdtblexampledir)" "$(DESTDIR)$(htmlexamplesdir)" "$(DESTDIR)$(mdocdir)" "$(DESTDIR)$(momprocessedexampledir)" "$(DESTDIR)$(otherdocdir)" "$(DESTDIR)$(pdfmarkpdfdocdir)" "$(DESTDIR)$(tmacdir)"; do \
+         test -z "$$dir" || $(MKDIR_P) "$$dir"; \
+       done
+install: $(BUILT_SOURCES)
+       $(MAKE) $(AM_MAKEFLAGS) install-am
+install-exec: install-exec-am
+install-data: install-data-am
+uninstall: uninstall-am
+
+install-am: all-am
+       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
+
+installcheck: installcheck-am
+install-strip:
+       if test -z '$(STRIP)'; then \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+             install; \
+       else \
+         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
+           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
+           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
+       fi
+mostlyclean-generic:
+       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
+       -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS)
+       -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs)
+       -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG)
+
+clean-generic:
+       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
+
+distclean-generic:
+       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
+       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
+       -rm -f lib/$(DEPDIR)/$(am__dirstamp)
+       -rm -f lib/$(am__dirstamp)
+       -rm -f lib/uniwidth/$(DEPDIR)/$(am__dirstamp)
+       -rm -f lib/uniwidth/$(am__dirstamp)
+       -rm -f src/devices/grodvi/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/devices/grodvi/$(am__dirstamp)
+       -rm -f src/devices/grohtml/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/devices/grohtml/$(am__dirstamp)
+       -rm -f src/devices/grolbp/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/devices/grolbp/$(am__dirstamp)
+       -rm -f src/devices/grolj4/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/devices/grolj4/$(am__dirstamp)
+       -rm -f src/devices/grops/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/devices/grops/$(am__dirstamp)
+       -rm -f src/devices/grotty/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/devices/grotty/$(am__dirstamp)
+       -rm -f src/devices/xditview/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/devices/xditview/$(am__dirstamp)
+       -rm -f src/libs/libbib/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/libs/libbib/$(am__dirstamp)
+       -rm -f src/libs/libdriver/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/libs/libdriver/$(am__dirstamp)
+       -rm -f src/libs/libgroff/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/libs/libgroff/$(am__dirstamp)
+       -rm -f src/libs/libxutil/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/libs/libxutil/$(am__dirstamp)
+       -rm -f src/preproc/eqn/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/preproc/eqn/$(am__dirstamp)
+       -rm -f src/preproc/grn/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/preproc/grn/$(am__dirstamp)
+       -rm -f src/preproc/html/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/preproc/html/$(am__dirstamp)
+       -rm -f src/preproc/pic/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/preproc/pic/$(am__dirstamp)
+       -rm -f src/preproc/preconv/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/preproc/preconv/$(am__dirstamp)
+       -rm -f src/preproc/refer/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/preproc/refer/$(am__dirstamp)
+       -rm -f src/preproc/soelim/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/preproc/soelim/$(am__dirstamp)
+       -rm -f src/preproc/tbl/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/preproc/tbl/$(am__dirstamp)
+       -rm -f src/roff/groff/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/roff/groff/$(am__dirstamp)
+       -rm -f src/roff/troff/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/roff/troff/$(am__dirstamp)
+       -rm -f src/utils/addftinfo/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/utils/addftinfo/$(am__dirstamp)
+       -rm -f src/utils/hpftodit/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/utils/hpftodit/$(am__dirstamp)
+       -rm -f src/utils/indxbib/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/utils/indxbib/$(am__dirstamp)
+       -rm -f src/utils/lkbib/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/utils/lkbib/$(am__dirstamp)
+       -rm -f src/utils/lookbib/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/utils/lookbib/$(am__dirstamp)
+       -rm -f src/utils/pfbtops/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/utils/pfbtops/$(am__dirstamp)
+       -rm -f src/utils/tfmtodit/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/utils/tfmtodit/$(am__dirstamp)
+       -rm -f src/utils/xtotroff/$(DEPDIR)/$(am__dirstamp)
+       -rm -f src/utils/xtotroff/$(am__dirstamp)
+
+maintainer-clean-generic:
+       @echo "This command is intended for maintainers to use"
+       @echo "it deletes files that may require special tools to rebuild."
+       -rm -f src/preproc/eqn/eqn.cpp
+       -rm -f src/preproc/eqn/eqn.hpp
+       -rm -f src/preproc/pic/pic.cpp
+       -rm -f src/preproc/pic/pic.hpp
+       -rm -f src/preproc/refer/label.cpp
+       -rm -f src/preproc/refer/label.hpp
+       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
+@BUILD_INFODOC_FALSE@install-html-local:
+@BUILD_INFODOC_FALSE@install-pdf-local:
+clean: clean-am
+
+clean-am: clean-binPROGRAMS clean-checkPROGRAMS clean-generic \
+       clean-local clean-nobase_binPROGRAMS clean-noinstLIBRARIES \
+       clean-prefixexecbinPROGRAMS mostlyclean-am
+
+distclean: distclean-am
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+               -rm -f lib/$(DEPDIR)/asnprintf.Po
+       -rm -f lib/$(DEPDIR)/float.Po
+       -rm -f lib/$(DEPDIR)/fprintf.Po
+       -rm -f lib/$(DEPDIR)/frexp.Po
+       -rm -f lib/$(DEPDIR)/frexpl.Po
+       -rm -f lib/$(DEPDIR)/fseterr.Po
+       -rm -f lib/$(DEPDIR)/isnan.Po
+       -rm -f lib/$(DEPDIR)/isnand.Po
+       -rm -f lib/$(DEPDIR)/isnanf.Po
+       -rm -f lib/$(DEPDIR)/isnanl.Po
+       -rm -f lib/$(DEPDIR)/itold.Po
+       -rm -f lib/$(DEPDIR)/localcharset.Po
+       -rm -f lib/$(DEPDIR)/math.Po
+       -rm -f lib/$(DEPDIR)/memchr.Po
+       -rm -f lib/$(DEPDIR)/printf-args.Po
+       -rm -f lib/$(DEPDIR)/printf-frexp.Po
+       -rm -f lib/$(DEPDIR)/printf-frexpl.Po
+       -rm -f lib/$(DEPDIR)/printf-parse.Po
+       -rm -f lib/$(DEPDIR)/signbitd.Po
+       -rm -f lib/$(DEPDIR)/signbitf.Po
+       -rm -f lib/$(DEPDIR)/signbitl.Po
+       -rm -f lib/$(DEPDIR)/snprintf.Po
+       -rm -f lib/$(DEPDIR)/vasnprintf.Po
+       -rm -f lib/$(DEPDIR)/vsnprintf.Po
+       -rm -f lib/$(DEPDIR)/wctype-h.Po
+       -rm -f lib/$(DEPDIR)/wcwidth.Po
+       -rm -f lib/$(DEPDIR)/xsize.Po
+       -rm -f lib/uniwidth/$(DEPDIR)/width.Po
+       -rm -f src/devices/grodvi/$(DEPDIR)/dvi.Po
+       -rm -f src/devices/grohtml/$(DEPDIR)/html-table.Po
+       -rm -f src/devices/grohtml/$(DEPDIR)/html-text.Po
+       -rm -f src/devices/grohtml/$(DEPDIR)/output.Po
+       -rm -f src/devices/grohtml/$(DEPDIR)/post-html.Po
+       -rm -f src/devices/grolbp/$(DEPDIR)/lbp.Po
+       -rm -f src/devices/grolj4/$(DEPDIR)/lj4.Po
+       -rm -f src/devices/grops/$(DEPDIR)/ps.Po
+       -rm -f src/devices/grops/$(DEPDIR)/psrm.Po
+       -rm -f src/devices/grotty/$(DEPDIR)/tty.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-Dvi.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-device.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-draw.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-font.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-lex.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-page.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-parse.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-xditview.Po
+       -rm -f src/libs/libbib/$(DEPDIR)/common.Po
+       -rm -f src/libs/libbib/$(DEPDIR)/index.Po
+       -rm -f src/libs/libbib/$(DEPDIR)/linear.Po
+       -rm -f src/libs/libbib/$(DEPDIR)/map.Po
+       -rm -f src/libs/libbib/$(DEPDIR)/search.Po
+       -rm -f src/libs/libdriver/$(DEPDIR)/input.Po
+       -rm -f src/libs/libdriver/$(DEPDIR)/printer.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-assert.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-change_lf.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-cmap.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-color.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-cset.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-curtime.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-device.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-errarg.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-error.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-fatal.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-filename.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-font.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-fontfile.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-geometry.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt1.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-glyphuni.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-htmlhint.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-hypot.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-iftoa.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-invalid.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-itoa.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-lf.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-lineno.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-localcharset.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-macropath.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-matherr.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-maxfilename.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-maxpathname.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-mksdir.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-nametoindex.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-new.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-paper.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-prime.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-progname.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-ptable.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-quotearg.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-relocate.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-searchpath.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-spawnvp.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-string.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-strsave.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-symbol.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpfile.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpname.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-unicode.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-uniglyph.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-uniuni.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-version.Po
+       -rm -f src/libs/libxutil/$(DEPDIR)/libxutil_a-DviChar.Po
+       -rm -f src/libs/libxutil/$(DEPDIR)/libxutil_a-XFontName.Po
+       -rm -f src/libs/libxutil/$(DEPDIR)/libxutil_a-xmalloc.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-box.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-delim.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-eqn.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-lex.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-limit.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-list.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-main.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-mark.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-other.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-over.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-pile.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-script.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-special.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-sqrt.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-text.Po
+       -rm -f src/preproc/grn/$(DEPDIR)/hdb.Po
+       -rm -f src/preproc/grn/$(DEPDIR)/hgraph.Po
+       -rm -f src/preproc/grn/$(DEPDIR)/hpoint.Po
+       -rm -f src/preproc/grn/$(DEPDIR)/main.Po
+       -rm -f src/preproc/html/$(DEPDIR)/pre-html.Po
+       -rm -f src/preproc/html/$(DEPDIR)/pushback.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-common.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-lex.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-main.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-object.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-pic.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-tex.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-troff.Po
+       -rm -f src/preproc/preconv/$(DEPDIR)/preconv-preconv.Po
+       -rm -f src/preproc/refer/$(DEPDIR)/refer-command.Po
+       -rm -f src/preproc/refer/$(DEPDIR)/refer-label.Po
+       -rm -f src/preproc/refer/$(DEPDIR)/refer-ref.Po
+       -rm -f src/preproc/refer/$(DEPDIR)/refer-refer.Po
+       -rm -f src/preproc/refer/$(DEPDIR)/refer-token.Po
+       -rm -f src/preproc/soelim/$(DEPDIR)/soelim.Po
+       -rm -f src/preproc/tbl/$(DEPDIR)/main.Po
+       -rm -f src/preproc/tbl/$(DEPDIR)/table.Po
+       -rm -f src/roff/groff/$(DEPDIR)/groff.Po
+       -rm -f src/roff/groff/$(DEPDIR)/pipeline.Po
+       -rm -f src/roff/troff/$(DEPDIR)/dictionary.Po
+       -rm -f src/roff/troff/$(DEPDIR)/div.Po
+       -rm -f src/roff/troff/$(DEPDIR)/env.Po
+       -rm -f src/roff/troff/$(DEPDIR)/input.Po
+       -rm -f src/roff/troff/$(DEPDIR)/majorminor.Po
+       -rm -f src/roff/troff/$(DEPDIR)/mtsm.Po
+       -rm -f src/roff/troff/$(DEPDIR)/node.Po
+       -rm -f src/roff/troff/$(DEPDIR)/number.Po
+       -rm -f src/roff/troff/$(DEPDIR)/reg.Po
+       -rm -f src/utils/addftinfo/$(DEPDIR)/addftinfo.Po
+       -rm -f src/utils/addftinfo/$(DEPDIR)/guess.Po
+       -rm -f src/utils/hpftodit/$(DEPDIR)/hpftodit.Po
+       -rm -f src/utils/hpftodit/$(DEPDIR)/hpuni.Po
+       -rm -f src/utils/indxbib/$(DEPDIR)/indxbib.Po
+       -rm -f src/utils/indxbib/$(DEPDIR)/signal.Po
+       -rm -f src/utils/lkbib/$(DEPDIR)/lkbib.Po
+       -rm -f src/utils/lookbib/$(DEPDIR)/lookbib.Po
+       -rm -f src/utils/pfbtops/$(DEPDIR)/dummy.Po
+       -rm -f src/utils/pfbtops/$(DEPDIR)/pfbtops.Po
+       -rm -f src/utils/tfmtodit/$(DEPDIR)/tfmtodit.Po
+       -rm -f src/utils/xtotroff/$(DEPDIR)/xtotroff-xtotroff.Po
+       -rm -f Makefile
+distclean-am: clean-am distclean-compile distclean-generic \
+       distclean-hdr distclean-local distclean-tags
+
+@BUILD_INFODOC_FALSE@dvi: dvi-am
+
+dvi-am:
+
+@BUILD_INFODOC_FALSE@html: html-am
+
+html-am:
+
+info: info-am
+
+info-am:
+
+install-data-am: install-data-local install-devX10012fontDATA \
+       install-devX100fontDATA install-devX7512fontDATA \
+       install-devX75fontDATA install-devasciifontDATA \
+       install-devcp1047fontDATA install-devdvifontDATA \
+       install-devdvigenDATA install-devhtmlfontDATA \
+       install-devlatin1fontDATA install-devlbpfontDATA \
+       install-devpdffontDATA install-devpdffontencDATA \
+       install-devpdffontmapDATA install-devutf8fontDATA \
+       install-dist_chemexampleDATA install-dist_chempicDATA \
+       install-dist_devlj4fontDATA install-dist_devlj4fontgenDATA \
+       install-dist_devpsfontDATA install-dist_devpsgenDATA \
+       install-dist_docexamplesDATA install-dist_glilypondDATA \
+       install-dist_gpinyinDATA install-dist_grogDATA \
+       install-dist_hdtblexampleDATA install-dist_localtmacDATA \
+       install-dist_mmDATA install-dist_mmexampleDATA \
+       install-dist_momexampleDATA install-dist_momtmacDATA \
+       install-dist_olddevpsfontDATA install-dist_otherdocDATA \
+       install-dist_pdfmarktmacDATA install-dist_tmacDATA \
+       install-dist_tmacmmDATA install-grofferDATA \
+       install-groffoptsDATA install-hdtbltmacDATA \
+       install-htmlpicDATA install-man install-momhtmlDATA \
+       install-nodist_chemexample122DATA \
+       install-nodist_chemexampleDATA install-nodist_devlj4fontDATA \
+       install-nodist_devpsfontDATA install-nodist_docexamplesDATA \
+       install-nodist_docpdfdocDATA install-nodist_hdtblexampleDATA \
+       install-nodist_htmlexamplesDATA install-nodist_mdocDATA \
+       install-nodist_momprocessedexampleDATA \
+       install-nodist_otherdocDATA install-nodist_pdfmarkpdfdocDATA \
+       install-nodist_tmacDATA
+       @$(NORMAL_INSTALL)
+       $(MAKE) $(AM_MAKEFLAGS) install-data-hook
+install-dvi: install-dvi-am
+
+install-dvi-am:
+
+install-exec-am: install-binPROGRAMS install-binSCRIPTS \
+       install-dist_binSCRIPTS install-nobase_binPROGRAMS \
+       install-prefixexecbinPROGRAMS install-prefixexecbinSCRIPTS
+       @$(NORMAL_INSTALL)
+       $(MAKE) $(AM_MAKEFLAGS) install-exec-hook
+install-html: install-html-am
+
+install-html-am: install-html-local
+
+install-info: install-info-am
+
+install-info-am:
+
+install-man: install-man1 install-man5 install-man7
+
+install-pdf: install-pdf-am
+
+install-pdf-am: install-pdf-local
+
+install-ps: install-ps-am
+
+install-ps-am:
+
+installcheck-am:
+
+maintainer-clean: maintainer-clean-am
+       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
+       -rm -rf $(top_srcdir)/autom4te.cache
+               -rm -f lib/$(DEPDIR)/asnprintf.Po
+       -rm -f lib/$(DEPDIR)/float.Po
+       -rm -f lib/$(DEPDIR)/fprintf.Po
+       -rm -f lib/$(DEPDIR)/frexp.Po
+       -rm -f lib/$(DEPDIR)/frexpl.Po
+       -rm -f lib/$(DEPDIR)/fseterr.Po
+       -rm -f lib/$(DEPDIR)/isnan.Po
+       -rm -f lib/$(DEPDIR)/isnand.Po
+       -rm -f lib/$(DEPDIR)/isnanf.Po
+       -rm -f lib/$(DEPDIR)/isnanl.Po
+       -rm -f lib/$(DEPDIR)/itold.Po
+       -rm -f lib/$(DEPDIR)/localcharset.Po
+       -rm -f lib/$(DEPDIR)/math.Po
+       -rm -f lib/$(DEPDIR)/memchr.Po
+       -rm -f lib/$(DEPDIR)/printf-args.Po
+       -rm -f lib/$(DEPDIR)/printf-frexp.Po
+       -rm -f lib/$(DEPDIR)/printf-frexpl.Po
+       -rm -f lib/$(DEPDIR)/printf-parse.Po
+       -rm -f lib/$(DEPDIR)/signbitd.Po
+       -rm -f lib/$(DEPDIR)/signbitf.Po
+       -rm -f lib/$(DEPDIR)/signbitl.Po
+       -rm -f lib/$(DEPDIR)/snprintf.Po
+       -rm -f lib/$(DEPDIR)/vasnprintf.Po
+       -rm -f lib/$(DEPDIR)/vsnprintf.Po
+       -rm -f lib/$(DEPDIR)/wctype-h.Po
+       -rm -f lib/$(DEPDIR)/wcwidth.Po
+       -rm -f lib/$(DEPDIR)/xsize.Po
+       -rm -f lib/uniwidth/$(DEPDIR)/width.Po
+       -rm -f src/devices/grodvi/$(DEPDIR)/dvi.Po
+       -rm -f src/devices/grohtml/$(DEPDIR)/html-table.Po
+       -rm -f src/devices/grohtml/$(DEPDIR)/html-text.Po
+       -rm -f src/devices/grohtml/$(DEPDIR)/output.Po
+       -rm -f src/devices/grohtml/$(DEPDIR)/post-html.Po
+       -rm -f src/devices/grolbp/$(DEPDIR)/lbp.Po
+       -rm -f src/devices/grolj4/$(DEPDIR)/lj4.Po
+       -rm -f src/devices/grops/$(DEPDIR)/ps.Po
+       -rm -f src/devices/grops/$(DEPDIR)/psrm.Po
+       -rm -f src/devices/grotty/$(DEPDIR)/tty.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-Dvi.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-device.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-draw.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-font.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-lex.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-page.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-parse.Po
+       -rm -f src/devices/xditview/$(DEPDIR)/gxditview-xditview.Po
+       -rm -f src/libs/libbib/$(DEPDIR)/common.Po
+       -rm -f src/libs/libbib/$(DEPDIR)/index.Po
+       -rm -f src/libs/libbib/$(DEPDIR)/linear.Po
+       -rm -f src/libs/libbib/$(DEPDIR)/map.Po
+       -rm -f src/libs/libbib/$(DEPDIR)/search.Po
+       -rm -f src/libs/libdriver/$(DEPDIR)/input.Po
+       -rm -f src/libs/libdriver/$(DEPDIR)/printer.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-assert.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-change_lf.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-cmap.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-color.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-cset.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-curtime.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-device.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-errarg.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-error.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-fatal.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-filename.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-font.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-fontfile.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-geometry.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-getopt1.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-glyphuni.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-htmlhint.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-hypot.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-iftoa.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-invalid.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-itoa.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-lf.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-lineno.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-localcharset.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-macropath.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-matherr.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-maxfilename.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-maxpathname.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-mksdir.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-nametoindex.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-new.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-paper.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-prime.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-progname.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-ptable.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-quotearg.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-relocate.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-searchpath.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-spawnvp.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-string.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-strsave.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-symbol.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpfile.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-tmpname.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-unicode.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-uniglyph.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-uniuni.Po
+       -rm -f src/libs/libgroff/$(DEPDIR)/libgroff_a-version.Po
+       -rm -f src/libs/libxutil/$(DEPDIR)/libxutil_a-DviChar.Po
+       -rm -f src/libs/libxutil/$(DEPDIR)/libxutil_a-XFontName.Po
+       -rm -f src/libs/libxutil/$(DEPDIR)/libxutil_a-xmalloc.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-box.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-delim.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-eqn.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-lex.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-limit.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-list.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-main.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-mark.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-other.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-over.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-pile.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-script.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-special.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-sqrt.Po
+       -rm -f src/preproc/eqn/$(DEPDIR)/eqn-text.Po
+       -rm -f src/preproc/grn/$(DEPDIR)/hdb.Po
+       -rm -f src/preproc/grn/$(DEPDIR)/hgraph.Po
+       -rm -f src/preproc/grn/$(DEPDIR)/hpoint.Po
+       -rm -f src/preproc/grn/$(DEPDIR)/main.Po
+       -rm -f src/preproc/html/$(DEPDIR)/pre-html.Po
+       -rm -f src/preproc/html/$(DEPDIR)/pushback.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-common.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-lex.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-main.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-object.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-pic.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-tex.Po
+       -rm -f src/preproc/pic/$(DEPDIR)/pic-troff.Po
+       -rm -f src/preproc/preconv/$(DEPDIR)/preconv-preconv.Po
+       -rm -f src/preproc/refer/$(DEPDIR)/refer-command.Po
+       -rm -f src/preproc/refer/$(DEPDIR)/refer-label.Po
+       -rm -f src/preproc/refer/$(DEPDIR)/refer-ref.Po
+       -rm -f src/preproc/refer/$(DEPDIR)/refer-refer.Po
+       -rm -f src/preproc/refer/$(DEPDIR)/refer-token.Po
+       -rm -f src/preproc/soelim/$(DEPDIR)/soelim.Po
+       -rm -f src/preproc/tbl/$(DEPDIR)/main.Po
+       -rm -f src/preproc/tbl/$(DEPDIR)/table.Po
+       -rm -f src/roff/groff/$(DEPDIR)/groff.Po
+       -rm -f src/roff/groff/$(DEPDIR)/pipeline.Po
+       -rm -f src/roff/troff/$(DEPDIR)/dictionary.Po
+       -rm -f src/roff/troff/$(DEPDIR)/div.Po
+       -rm -f src/roff/troff/$(DEPDIR)/env.Po
+       -rm -f src/roff/troff/$(DEPDIR)/input.Po
+       -rm -f src/roff/troff/$(DEPDIR)/majorminor.Po
+       -rm -f src/roff/troff/$(DEPDIR)/mtsm.Po
+       -rm -f src/roff/troff/$(DEPDIR)/node.Po
+       -rm -f src/roff/troff/$(DEPDIR)/number.Po
+       -rm -f src/roff/troff/$(DEPDIR)/reg.Po
+       -rm -f src/utils/addftinfo/$(DEPDIR)/addftinfo.Po
+       -rm -f src/utils/addftinfo/$(DEPDIR)/guess.Po
+       -rm -f src/utils/hpftodit/$(DEPDIR)/hpftodit.Po
+       -rm -f src/utils/hpftodit/$(DEPDIR)/hpuni.Po
+       -rm -f src/utils/indxbib/$(DEPDIR)/indxbib.Po
+       -rm -f src/utils/indxbib/$(DEPDIR)/signal.Po
+       -rm -f src/utils/lkbib/$(DEPDIR)/lkbib.Po
+       -rm -f src/utils/lookbib/$(DEPDIR)/lookbib.Po
+       -rm -f src/utils/pfbtops/$(DEPDIR)/dummy.Po
+       -rm -f src/utils/pfbtops/$(DEPDIR)/pfbtops.Po
+       -rm -f src/utils/tfmtodit/$(DEPDIR)/tfmtodit.Po
+       -rm -f src/utils/xtotroff/$(DEPDIR)/xtotroff-xtotroff.Po
+       -rm -f Makefile
+maintainer-clean-am: distclean-am maintainer-clean-generic \
+       maintainer-clean-local
+
+mostlyclean: mostlyclean-am
+
+mostlyclean-am: mostlyclean-compile mostlyclean-generic \
+       mostlyclean-local
+
+@BUILD_INFODOC_FALSE@pdf: pdf-am
+
+pdf-am:
+
+ps: ps-am
+
+ps-am:
+
+uninstall-am: uninstall-binPROGRAMS uninstall-binSCRIPTS \
+       uninstall-devX10012fontDATA uninstall-devX100fontDATA \
+       uninstall-devX7512fontDATA uninstall-devX75fontDATA \
+       uninstall-devasciifontDATA uninstall-devcp1047fontDATA \
+       uninstall-devdvifontDATA uninstall-devdvigenDATA \
+       uninstall-devhtmlfontDATA uninstall-devlatin1fontDATA \
+       uninstall-devlbpfontDATA uninstall-devpdffontDATA \
+       uninstall-devpdffontencDATA uninstall-devpdffontmapDATA \
+       uninstall-devutf8fontDATA uninstall-dist_binSCRIPTS \
+       uninstall-dist_chemexampleDATA uninstall-dist_chempicDATA \
+       uninstall-dist_devlj4fontDATA uninstall-dist_devlj4fontgenDATA \
+       uninstall-dist_devpsfontDATA uninstall-dist_devpsgenDATA \
+       uninstall-dist_docexamplesDATA uninstall-dist_glilypondDATA \
+       uninstall-dist_gpinyinDATA uninstall-dist_grogDATA \
+       uninstall-dist_hdtblexampleDATA uninstall-dist_localtmacDATA \
+       uninstall-dist_mmDATA uninstall-dist_mmexampleDATA \
+       uninstall-dist_momexampleDATA uninstall-dist_momtmacDATA \
+       uninstall-dist_olddevpsfontDATA uninstall-dist_otherdocDATA \
+       uninstall-dist_pdfmarktmacDATA uninstall-dist_tmacDATA \
+       uninstall-dist_tmacmmDATA uninstall-grofferDATA \
+       uninstall-groffoptsDATA uninstall-hdtbltmacDATA \
+       uninstall-htmlpicDATA uninstall-local uninstall-man \
+       uninstall-momhtmlDATA uninstall-nobase_binPROGRAMS \
+       uninstall-nodist_chemexample122DATA \
+       uninstall-nodist_chemexampleDATA \
+       uninstall-nodist_devlj4fontDATA uninstall-nodist_devpsfontDATA \
+       uninstall-nodist_docexamplesDATA \
+       uninstall-nodist_docpdfdocDATA \
+       uninstall-nodist_hdtblexampleDATA \
+       uninstall-nodist_htmlexamplesDATA uninstall-nodist_mdocDATA \
+       uninstall-nodist_momprocessedexampleDATA \
+       uninstall-nodist_otherdocDATA \
+       uninstall-nodist_pdfmarkpdfdocDATA uninstall-nodist_tmacDATA \
+       uninstall-prefixexecbinPROGRAMS uninstall-prefixexecbinSCRIPTS
+       @$(NORMAL_INSTALL)
+       $(MAKE) $(AM_MAKEFLAGS) uninstall-hook
+uninstall-man: uninstall-man1 uninstall-man5 uninstall-man7
+
+.MAKE: all check check-am install install-am install-data-am \
+       install-exec-am install-strip uninstall-am
+
+.PHONY: CTAGS GTAGS TAGS all all-am am--depfiles am--refresh check \
+       check-TESTS check-am clean clean-binPROGRAMS \
+       clean-checkPROGRAMS clean-cscope clean-generic clean-local \
+       clean-nobase_binPROGRAMS clean-noinstLIBRARIES \
+       clean-prefixexecbinPROGRAMS cscope cscopelist-am ctags \
+       ctags-am dist dist-all dist-bzip2 dist-gzip dist-hook \
+       dist-lzip dist-shar dist-tarZ dist-xz dist-zip distcheck \
+       distclean distclean-compile distclean-generic distclean-hdr \
+       distclean-local distclean-tags distcleancheck distdir \
+       distuninstallcheck dvi dvi-am html html-am info info-am \
+       install install-am install-binPROGRAMS install-binSCRIPTS \
+       install-data install-data-am install-data-hook \
+       install-data-local install-devX10012fontDATA \
+       install-devX100fontDATA install-devX7512fontDATA \
+       install-devX75fontDATA install-devasciifontDATA \
+       install-devcp1047fontDATA install-devdvifontDATA \
+       install-devdvigenDATA install-devhtmlfontDATA \
+       install-devlatin1fontDATA install-devlbpfontDATA \
+       install-devpdffontDATA install-devpdffontencDATA \
+       install-devpdffontmapDATA install-devutf8fontDATA \
+       install-dist_binSCRIPTS install-dist_chemexampleDATA \
+       install-dist_chempicDATA install-dist_devlj4fontDATA \
+       install-dist_devlj4fontgenDATA install-dist_devpsfontDATA \
+       install-dist_devpsgenDATA install-dist_docexamplesDATA \
+       install-dist_glilypondDATA install-dist_gpinyinDATA \
+       install-dist_grogDATA install-dist_hdtblexampleDATA \
+       install-dist_localtmacDATA install-dist_mmDATA \
+       install-dist_mmexampleDATA install-dist_momexampleDATA \
+       install-dist_momtmacDATA install-dist_olddevpsfontDATA \
+       install-dist_otherdocDATA install-dist_pdfmarktmacDATA \
+       install-dist_tmacDATA install-dist_tmacmmDATA install-dvi \
+       install-dvi-am install-exec install-exec-am install-exec-hook \
+       install-grofferDATA install-groffoptsDATA \
+       install-hdtbltmacDATA install-html install-html-am \
+       install-html-local install-htmlpicDATA install-info \
+       install-info-am install-man install-man1 install-man5 \
+       install-man7 install-momhtmlDATA install-nobase_binPROGRAMS \
+       install-nodist_chemexample122DATA \
+       install-nodist_chemexampleDATA install-nodist_devlj4fontDATA \
+       install-nodist_devpsfontDATA install-nodist_docexamplesDATA \
+       install-nodist_docpdfdocDATA install-nodist_hdtblexampleDATA \
+       install-nodist_htmlexamplesDATA install-nodist_mdocDATA \
+       install-nodist_momprocessedexampleDATA \
+       install-nodist_otherdocDATA install-nodist_pdfmarkpdfdocDATA \
+       install-nodist_tmacDATA install-pdf install-pdf-am \
+       install-pdf-local install-prefixexecbinPROGRAMS \
+       install-prefixexecbinSCRIPTS install-ps install-ps-am \
+       install-strip installcheck installcheck-am installdirs \
+       maintainer-clean maintainer-clean-generic \
+       maintainer-clean-local mostlyclean mostlyclean-compile \
+       mostlyclean-generic mostlyclean-local pdf pdf-am ps ps-am \
+       recheck tags tags-am uninstall uninstall-am \
+       uninstall-binPROGRAMS uninstall-binSCRIPTS \
+       uninstall-devX10012fontDATA uninstall-devX100fontDATA \
+       uninstall-devX7512fontDATA uninstall-devX75fontDATA \
+       uninstall-devasciifontDATA uninstall-devcp1047fontDATA \
+       uninstall-devdvifontDATA uninstall-devdvigenDATA \
+       uninstall-devhtmlfontDATA uninstall-devlatin1fontDATA \
+       uninstall-devlbpfontDATA uninstall-devpdffontDATA \
+       uninstall-devpdffontencDATA uninstall-devpdffontmapDATA \
+       uninstall-devutf8fontDATA uninstall-dist_binSCRIPTS \
+       uninstall-dist_chemexampleDATA uninstall-dist_chempicDATA \
+       uninstall-dist_devlj4fontDATA uninstall-dist_devlj4fontgenDATA \
+       uninstall-dist_devpsfontDATA uninstall-dist_devpsgenDATA \
+       uninstall-dist_docexamplesDATA uninstall-dist_glilypondDATA \
+       uninstall-dist_gpinyinDATA uninstall-dist_grogDATA \
+       uninstall-dist_hdtblexampleDATA uninstall-dist_localtmacDATA \
+       uninstall-dist_mmDATA uninstall-dist_mmexampleDATA \
+       uninstall-dist_momexampleDATA uninstall-dist_momtmacDATA \
+       uninstall-dist_olddevpsfontDATA uninstall-dist_otherdocDATA \
+       uninstall-dist_pdfmarktmacDATA uninstall-dist_tmacDATA \
+       uninstall-dist_tmacmmDATA uninstall-grofferDATA \
+       uninstall-groffoptsDATA uninstall-hdtbltmacDATA uninstall-hook \
+       uninstall-htmlpicDATA uninstall-local uninstall-man \
+       uninstall-man1 uninstall-man5 uninstall-man7 \
+       uninstall-momhtmlDATA uninstall-nobase_binPROGRAMS \
+       uninstall-nodist_chemexample122DATA \
+       uninstall-nodist_chemexampleDATA \
+       uninstall-nodist_devlj4fontDATA uninstall-nodist_devpsfontDATA \
+       uninstall-nodist_docexamplesDATA \
+       uninstall-nodist_docpdfdocDATA \
+       uninstall-nodist_hdtblexampleDATA \
+       uninstall-nodist_htmlexamplesDATA uninstall-nodist_mdocDATA \
+       uninstall-nodist_momprocessedexampleDATA \
+       uninstall-nodist_otherdocDATA \
+       uninstall-nodist_pdfmarkpdfdocDATA uninstall-nodist_tmacDATA \
+       uninstall-prefixexecbinPROGRAMS uninstall-prefixexecbinSCRIPTS
+
+.PRECIOUS: Makefile
+
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_ALLOCA_H_TRUE@lib/alloca.h: lib/alloca.in.h $(top_builddir)/config.status
+@GL_GENERATE_ALLOCA_H_TRUE@    $(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_ALLOCA_H_TRUE@    { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+@GL_GENERATE_ALLOCA_H_TRUE@      cat $(top_srcdir)/lib/alloca.in.h; \
+@GL_GENERATE_ALLOCA_H_TRUE@    } > $@-t && \
+@GL_GENERATE_ALLOCA_H_TRUE@    mv -f $@-t $@
+@GL_GENERATE_ALLOCA_H_FALSE@lib/alloca.h: $(top_builddir)/config.status
+@GL_GENERATE_ALLOCA_H_FALSE@   rm -f $@
+
+# We need the following in order to create <errno.h> when the system
+# doesn't have one that is POSIX compliant.
+@GL_GENERATE_ERRNO_H_TRUE@lib/errno.h: lib/errno.in.h $(top_builddir)/config.status
+@GL_GENERATE_ERRNO_H_TRUE@     $(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_ERRNO_H_TRUE@     { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+@GL_GENERATE_ERRNO_H_TRUE@       sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_ERRNO_H_TRUE@           -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@           -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_ERRNO_H_TRUE@           -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_ERRNO_H_TRUE@           -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@           -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@           -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@           -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@           -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@           -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@           -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
+@GL_GENERATE_ERRNO_H_TRUE@           < $(top_srcdir)/lib/errno.in.h; \
+@GL_GENERATE_ERRNO_H_TRUE@     } > $@-t && \
+@GL_GENERATE_ERRNO_H_TRUE@     mv $@-t $@
+@GL_GENERATE_ERRNO_H_FALSE@lib/errno.h: $(top_builddir)/config.status
+@GL_GENERATE_ERRNO_H_FALSE@    rm -f $@
+
+# We need the following in order to create <float.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_FLOAT_H_TRUE@lib/float.h: lib/float.in.h $(top_builddir)/config.status
+@GL_GENERATE_FLOAT_H_TRUE@     $(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_FLOAT_H_TRUE@     { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+@GL_GENERATE_FLOAT_H_TRUE@       sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_FLOAT_H_TRUE@           -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_FLOAT_H_TRUE@           -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_FLOAT_H_TRUE@           -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_FLOAT_H_TRUE@           -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
+@GL_GENERATE_FLOAT_H_TRUE@           -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
+@GL_GENERATE_FLOAT_H_TRUE@           < $(top_srcdir)/lib/float.in.h; \
+@GL_GENERATE_FLOAT_H_TRUE@     } > $@-t && \
+@GL_GENERATE_FLOAT_H_TRUE@     mv $@-t $@
+@GL_GENERATE_FLOAT_H_FALSE@lib/float.h: $(top_builddir)/config.status
+@GL_GENERATE_FLOAT_H_FALSE@    rm -f $@
+
+# We need the following in order to create <limits.h> when the system
+# doesn't have one that is compatible with GNU.
+@GL_GENERATE_LIMITS_H_TRUE@lib/limits.h: lib/limits.in.h $(top_builddir)/config.status
+@GL_GENERATE_LIMITS_H_TRUE@    $(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_LIMITS_H_TRUE@    { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+@GL_GENERATE_LIMITS_H_TRUE@      sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_LIMITS_H_TRUE@          -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_LIMITS_H_TRUE@          -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_LIMITS_H_TRUE@          -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_LIMITS_H_TRUE@          -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \
+@GL_GENERATE_LIMITS_H_TRUE@          < $(top_srcdir)/lib/limits.in.h; \
+@GL_GENERATE_LIMITS_H_TRUE@    } > $@-t && \
+@GL_GENERATE_LIMITS_H_TRUE@    mv $@-t $@
+@GL_GENERATE_LIMITS_H_FALSE@lib/limits.h: $(top_builddir)/config.status
+@GL_GENERATE_LIMITS_H_FALSE@   rm -f $@
+
+# We need the following in order to create <math.h> when the system
+# doesn't have one that works with the given compiler.
+lib/math.h: lib/math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \
+             -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \
+             -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \
+             -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \
+             -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \
+             -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \
+             -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \
+             -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \
+             -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \
+             -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \
+             -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \
+             -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \
+             -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \
+             -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \
+             -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \
+             -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \
+             -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \
+             -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \
+             -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \
+             -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \
+             -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \
+             -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \
+             -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \
+             -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \
+             -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \
+             -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \
+             -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \
+             -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \
+             -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \
+             -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \
+             -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \
+             -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \
+             -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \
+             -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \
+             -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \
+             -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \
+             -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \
+             -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \
+             -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \
+             -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \
+             -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \
+             -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \
+             -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \
+             -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \
+             -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \
+             < $(top_srcdir)/lib/math.in.h | \
+         sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \
+             -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \
+             -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \
+             -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \
+             -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \
+             -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \
+             -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \
+             -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \
+             -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \
+             -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \
+             -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \
+             -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \
+             -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \
+             -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \
+             -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \
+             -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \
+             -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \
+             -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \
+             -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \
+             -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \
+             -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \
+             -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \
+             -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \
+             -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \
+             -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \
+             -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \
+             -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \
+             -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \
+             -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \
+             -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \
+             -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \
+             -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \
+             -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \
+             -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \
+             -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \
+             -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \
+             -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \
+             -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \
+             -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \
+             -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \
+             -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \
+             -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \
+             -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \
+             -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \
+             -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \
+             -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \
+             -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \
+             -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \
+             -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \
+             -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \
+             -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \
+         | \
+         sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \
+             -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \
+             -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \
+             -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \
+             -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \
+             -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \
+             -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \
+             -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \
+             -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \
+             -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \
+             -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \
+             -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \
+             -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \
+             -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \
+             -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \
+             -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \
+             -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \
+             -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \
+             -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \
+             -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \
+             -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \
+             -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \
+             -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \
+             -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \
+             -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \
+             -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \
+             -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \
+             -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \
+             -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \
+             -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \
+             -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \
+             -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \
+             -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \
+             -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \
+             -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \
+             -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \
+             -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \
+             -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \
+             -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \
+             -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \
+             -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \
+             -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \
+             -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \
+             -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \
+             -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \
+             -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \
+             -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \
+             -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \
+             -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \
+             -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \
+             -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \
+             -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \
+             -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \
+             -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \
+             -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \
+             -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \
+             -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \
+             -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \
+             -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \
+             -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \
+             -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \
+             -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \
+             -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \
+             -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \
+             -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \
+             -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \
+             -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \
+             -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \
+             -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \
+             -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \
+             -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \
+             -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \
+             -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \
+             -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \
+             -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \
+             -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \
+             -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \
+             -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \
+             -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \
+             -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \
+             -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \
+             -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \
+             -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \
+             -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \
+             -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \
+             -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \
+             -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \
+             -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \
+             -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \
+             -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \
+             -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \
+             -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \
+             -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \
+             -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \
+             -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \
+             -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \
+         | \
+         sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \
+             -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \
+             -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \
+             -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \
+             -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \
+             -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \
+             -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \
+             -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \
+             -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \
+             -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \
+             -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \
+             -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \
+             -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \
+             -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \
+             -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \
+             -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \
+             -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \
+             -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \
+             -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \
+             -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \
+             -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \
+             -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \
+             -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \
+             -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \
+             -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \
+             -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \
+             -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \
+             -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \
+             -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \
+             -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \
+             -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \
+             -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \
+             -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \
+             -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \
+             -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \
+             -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \
+             -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \
+             -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \
+             -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \
+             -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
+             -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \
+             -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \
+             -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \
+             -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \
+             -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \
+             -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \
+             -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \
+             -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \
+             -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \
+             -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \
+             -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \
+             -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \
+             -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \
+             -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \
+             -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \
+             -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \
+             -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \
+             -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \
+             -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \
+             -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \
+             -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \
+             -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \
+             -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \
+             -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \
+             -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \
+             -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \
+             -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \
+             -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \
+             -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \
+             -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \
+             -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \
+             -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \
+             -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \
+             -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \
+             -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \
+             -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \
+             -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_STDDEF_H_TRUE@lib/stddef.h: lib/stddef.in.h $(top_builddir)/config.status
+@GL_GENERATE_STDDEF_H_TRUE@    $(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_STDDEF_H_TRUE@    { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+@GL_GENERATE_STDDEF_H_TRUE@      sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+@GL_GENERATE_STDDEF_H_TRUE@          < $(top_srcdir)/lib/stddef.in.h; \
+@GL_GENERATE_STDDEF_H_TRUE@    } > $@-t && \
+@GL_GENERATE_STDDEF_H_TRUE@    mv $@-t $@
+@GL_GENERATE_STDDEF_H_FALSE@lib/stddef.h: $(top_builddir)/config.status
+@GL_GENERATE_STDDEF_H_FALSE@   rm -f $@
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+@GL_GENERATE_STDINT_H_TRUE@lib/stdint.h: lib/stdint.in.h $(top_builddir)/config.status
+@GL_GENERATE_STDINT_H_TRUE@    $(AM_V_GEN)rm -f $@-t $@ && \
+@GL_GENERATE_STDINT_H_TRUE@    { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+@GL_GENERATE_STDINT_H_TRUE@      sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
+@GL_GENERATE_STDINT_H_TRUE@          < $(top_srcdir)/lib/stdint.in.h; \
+@GL_GENERATE_STDINT_H_TRUE@    } > $@-t && \
+@GL_GENERATE_STDINT_H_TRUE@    mv $@-t $@
+@GL_GENERATE_STDINT_H_FALSE@lib/stdint.h: $(top_builddir)/config.status
+@GL_GENERATE_STDINT_H_FALSE@   rm -f $@
+
+# We need the following in order to create <stdio.h> when the system
+# doesn't have one that works with the given compiler.
+lib/stdio.h: lib/stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
+             -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \
+             -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \
+             -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \
+             -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \
+             -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \
+             -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \
+             -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \
+             -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \
+             -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \
+             -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \
+             -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \
+             -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \
+             -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \
+             -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \
+             -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \
+             -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \
+             -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \
+             -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \
+             -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \
+             -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \
+             -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \
+             -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \
+             -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \
+             -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \
+             -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \
+             -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \
+             -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \
+             -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \
+             -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \
+             -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \
+             -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \
+             -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \
+             -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \
+             -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \
+             -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \
+             -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \
+             -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \
+             -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \
+             -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \
+             -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \
+             -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \
+             -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \
+             -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \
+             -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \
+             -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \
+             -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \
+             -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \
+             < $(top_srcdir)/lib/stdio.in.h | \
+         sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
+             -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \
+             -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \
+             -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
+             -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
+             -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
+             -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
+             -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
+             -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
+             -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \
+             -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \
+             -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \
+             -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \
+             -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \
+             -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
+             -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
+             -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
+             -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
+             -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \
+             -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
+             -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+             -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
+             -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
+             -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
+             -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
+             -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
+             -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
+             -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
+             -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \
+             -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
+             -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
+             -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
+             -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \
+             -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
+             -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \
+             -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \
+             -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \
+             -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
+             -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
+             -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \
+             -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
+             -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \
+             -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
+             -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
+             -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
+             -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
+             -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
+             -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
+             -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+lib/string.h: lib/string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+             -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \
+             -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
+             -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
+             -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
+             -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \
+             -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \
+             -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \
+             -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \
+             -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \
+             -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \
+             -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \
+             -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \
+             -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \
+             -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \
+             -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \
+             -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \
+             -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \
+             -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \
+             -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \
+             -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \
+             -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \
+             -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \
+             -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \
+             -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \
+             -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \
+             -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \
+             -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \
+             -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \
+             -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \
+             -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \
+             -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \
+             -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \
+             -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \
+             -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
+             -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
+             -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
+             -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
+             -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
+             < $(top_srcdir)/lib/string.in.h | \
+         sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \
+             -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
+             -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
+             -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+             -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
+             -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+             -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+             -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+             -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+             -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+             -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+             -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+             -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+             -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+             -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+             -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+             -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+             -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+             -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+             -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+             -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+             -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+             -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+             -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
+             -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+             -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+             -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+             -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+             -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+             -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+             -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+             -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+             -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+             -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+             -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+             < $(top_srcdir)/lib/string.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <sys/types.h> when the system
+# doesn't have one that works with the given compiler.
+lib/sys/types.h: lib/sys_types.in.h $(top_builddir)/config.status
+       $(AM_V_at)$(MKDIR_P) lib/sys
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
+             -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+             -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
+             < $(top_srcdir)/lib/sys_types.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+lib/unitypes.h: lib/unitypes.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         cat $(top_srcdir)/lib/unitypes.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+
+lib/uniwidth.h: lib/uniwidth.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         cat $(top_srcdir)/lib/uniwidth.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+lib/wchar.h: lib/wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
+             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+             -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+             -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
+             -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
+             -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
+             -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
+             -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
+             -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
+             -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
+             -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
+             -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
+             -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
+             -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
+             -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
+             -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
+             -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
+             -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
+             -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
+             -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
+             -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
+             -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
+             -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
+             -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
+             -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
+             -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
+             -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
+             -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
+             -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
+             -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
+             -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
+             -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
+             -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
+             -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
+             -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
+             -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
+             -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
+             -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
+             -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
+             -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
+             -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
+             -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
+             -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
+             -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \
+             < $(top_srcdir)/lib/wchar.in.h | \
+         sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+             -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
+             -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
+             -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
+             -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
+             -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
+             -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
+             -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
+             -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
+             -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
+             -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
+             -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
+             -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
+             -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
+             -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
+             -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
+             -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
+             -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
+             -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
+             -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
+             -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
+             -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
+             -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
+             -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
+             -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
+             -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
+             -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
+             -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
+             -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
+             -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \
+             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+         | \
+         sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+             -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+             -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
+             -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+
+# We need the following in order to create <wctype.h> when the system
+# doesn't have one that works with the given compiler.
+lib/wctype.h: lib/wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+             -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+             -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
+             -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
+             -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
+             -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
+             -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
+             -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
+             -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
+             -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+             -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
+             -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
+             -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+             -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
+             -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+             -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(top_srcdir)/lib/wctype.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+
+mostlyclean-local: mostlyclean-generic
+       @for dir in '' $(MOSTLYCLEANDIRS); do \
+         if test -n "$$dir" && test -d $$dir; then \
+           echo "rmdir $$dir"; rmdir $$dir; \
+         fi; \
+       done; \
+       :
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+shdeps.sed: $(top_srcdir)/arch/misc/shdeps.sh
+       $(SHELL) $(top_srcdir)/arch/misc/shdeps.sh "$(RT_SEP)" "$(SH_SEP)" "$(bindir)" > $@
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+# This is strangly built but not installed
+all: contrib/chem/README
+
+contrib/chem/README: $(chem_srcdir)/README.txt
+       $(AM_V_GEN)$(MKDIR_P) contrib/chem/ \
+       && sed -e "s|[@]g[@]|$(g)|g" $? >$@
+
+contrib/chem/examples/README: $(chem_srcdir)/examples/README.txt
+       $(AM_V_GEN)$(MKDIR_P) contrib/chem/examples \
+       && sed -e "s|[@]g[@]|$(g)|g" $? >$@
+
+contrib/chem/examples/122/README: $(chem_srcdir)/examples/122/README.txt
+       $(AM_V_GEN)$(MKDIR_P) contrib/chem/examples/122 \
+       && sed -e "s|[@]g[@]|$(g)|g" $? >$@
+
+chem: $(chem_srcdir)/chem.pl $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f "$(SH_DEPS_SED_SCRIPT)" \
+              -e "s|[@]g[@]|$(g)|g" \
+              -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+              -e "s|[@]MACRODIR[@]|$(DESTDIR)$(tmacdir)|g" \
+              -e "s|[@]PICDIR[@]|$(DESTDIR)$(datasubdir)/pic|g" \
+              -e "s|[@]VERSION[@]|$(VERSION)|g" \
+              -e "$(SH_SCRIPT_SED_CMD)" \
+              $(chem_srcdir)/chem.pl \
+              >$@ \
+       && chmod +x $@
+
+install-data-local: install_chem_extra
+install_chem_extra:
+@BUILD_EXAMPLES_TRUE@  -test -d $(DESTDIR)$(chemexample122dir) \
+@BUILD_EXAMPLES_TRUE@          || $(mkinstalldirs) $(DESTDIR)$(chemexample122dir);
+@BUILD_EXAMPLES_TRUE@  for i in $(chem_srcdir)/examples/122/*.chem; do \
+@BUILD_EXAMPLES_TRUE@    n=`echo $$i | sed 's|$(chem_srcdir)/examples/122/||g'`; \
+@BUILD_EXAMPLES_TRUE@    $(INSTALL_DATA) $$i $(DESTDIR)$(chemexample122dir)/$$n; \
+@BUILD_EXAMPLES_TRUE@  done
+
+uninstall-local: uninstall_chem_extra
+uninstall_chem_extra:
+@BUILD_EXAMPLES_TRUE@  $(RM) $(DESTDIR)$(exampledir)/chem/122/*
+@BUILD_EXAMPLES_TRUE@  -rmdir $(DESTDIR)$(exampledir)/chem/122
+@BUILD_EXAMPLES_TRUE@  $(RM) $(DESTDIR)$(exampledir)/chem/*
+@BUILD_EXAMPLES_TRUE@  -rmdir $(DESTDIR)$(exampledir)/chem
+       -rmdir $(DESTDIR)$(datasubdir)/pic
+
+dist-hook: dist_chem
+dist_chem:
+       chmod u+w $(distdir)/contrib/chem/examples/122
+       for i in $(chem_srcdir)/examples/122/*.chem; do \
+         cp -f $$i $(distdir)/contrib/chem/examples/122; \
+       done
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+eqn2graph: $(top_srcdir)/contrib/eqn2graph/eqn2graph.sh
+       $(AM_V_GEN)sed -e "s|[@]g[@]|$(g)|g" \
+           -e "s|[@]VERSION[@]|$(VERSION)|" \
+           -e $(SH_SCRIPT_SED_CMD) $(eqn2graph_srcdir)/eqn2graph.sh \
+           >$@ \
+       && chmod +x $@
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+gdiffmk: $(gdiffmk_srcdir)/gdiffmk.sh
+       $(AM_V_GEN)sed -e "s|[@]BINDIR[@]|$(bindir)|g" \
+           -e "s|[@]VERSION[@]|$(VERSION)|g" \
+           -e "s|[@]HAVE_TEST_EF_OPTION[@]|$(HAVE_TEST_EF_OPTION)|g" \
+           -e "s|[@]BASH_PROG[@]|$(BASH_PROG)|g" \
+           -e "s|[@]DIFF_PROG[@]|$(DIFF_PROG)|g" \
+           -e $(SH_SCRIPT_SED_CMD)  $(gdiffmk_srcdir)/gdiffmk.sh \
+           >$@ \
+       && chmod +x $@
+
+clean-local: clean_gdiffmk_check
+clean_gdiffmk_check:
+       if test -d $(top_builddir)/contrib/gdiffmk/tests; then \
+         cd $(top_builddir)/contrib/gdiffmk/tests && \
+         $(abs_top_srcdir)/contrib/gdiffmk/tests/runtests.sh clean; \
+       fi
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+# create perl executable 'glilypond', being stored into 'bindir'
+glilypond: $(glilypond_srcdir)/glilypond.pl shdeps.sed
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f "$(SH_DEPS_SED_SCRIPT)" \
+              -e "s|[@]g[@]|$(g)|g" \
+              -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+              -e "s|[@]glilypond_dir[@]|$(DESTDIR)$(glilypond_dir)|g" \
+              -e "s|[@]VERSION[@]|$(VERSION)|g" \
+              $(glilypond_srcdir)/glilypond.pl \
+              >$@ \
+       && chmod +x $@
+
+uninstall_groffdirs: uninstall-glilypond-hook
+uninstall-glilypond-hook:
+       if test -d $(DESTDIR)$(glilyponddir); then \
+         rmdir $(DESTDIR)$(glilyponddir); \
+       fi
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+gperl: $(top_srcdir)/contrib/gperl/gperl.pl shdeps.sed
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f "$(SH_DEPS_SED_SCRIPT)" \
+              -e "s|[@]g[@]|$(g)|g" \
+              -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+              -e "s|[@]VERSION[@]|$(VERSION)|g" \
+              -e "$(SH_SCRIPT_SED_CMD)" \
+              $(top_srcdir)/contrib/gperl/gperl.pl \
+              >$@ \
+       && chmod +x $@
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+gpinyin: contrib/gpinyin/gpinyin.pl
+       $(AM_V_GEN)sed -f "$(SH_DEPS_SED_SCRIPT)" \
+           -e "s|[@]g[@]|$(g)|g" \
+           -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+           -e "s|[@]gpinyin_dir[@]|$(DESTIR)$(gpinyin_dir)|" \
+           -e "s|[@]VERSION[@]|$(VERSION)|g" \
+           -e "$(SH_SCRIPT_SED_CMD)" \
+           $(gpinyin_srcdir)/gpinyin.pl \
+           >$@ \
+       && chmod +x $@
+
+uninstall_groffdirs: uninstall-gpinyin-hook
+uninstall-gpinyin-hook:
+       if test -d $(DESTDIR)$(gpinyindir); then \
+         rmdir $(DESTDIR)$(gpinyindir); \
+       fi
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+grap2graph: $(grap2graph_srcdir)/grap2graph.sh
+       $(AM_V_GEN)sed -e "s|[@]g[@]|$(g)|g" \
+           -e "s|[@]VERSION[@]|$(VERSION)|" \
+           -e $(SH_SCRIPT_SED_CMD) $(grap2graph_srcdir)/grap2graph.sh \
+           >$@ \
+       && chmod +x $@
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+$(ROFF2PROGS): $(groffer_srcdir)/roff2.pl
+       cp $(groffer_srcdir)/roff2.pl $@
+
+# we take roff2.man and replace the @ROFF2MODE@ by the type of file
+# (dvi, pdf, html etc ...)
+$(ROFF2MAN):  $(groffer_srcdir)/roff2.1.man
+       $(AM_V_GEN)$(MKDIR_P) contrib/groffer \
+       && FILEMODE=`echo $@ | sed 's|contrib/groffer/roff2\([a-z][a-z]*\)\.1\.man|\1|g'` \
+       && sed -e 's/[@]ROFF2MODE[@]/'"$$FILEMODE"'/g' \
+              $(groffer_srcdir)/roff2.1.man \
+              > $@;
+
+groffer: $(GROFFER_PERL) $(GROFFER_REST) $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)sed -f "$(SH_DEPS_SED_SCRIPT)" \
+          -e "s|[@]g[@]|$(g)|g" \
+          -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+          -e "s|[@]libdir[@]|$(DESTDIR)$(libdir)|g" \
+          -e "s|[@]groffer_dir[@]|$(DESTDIR)$(groffer_dir)|g" \
+          -e "s|[@]VERSION[@]|$(VERSION)|g" \
+          -e "$(SH_SCRIPT_SED_CMD)" \
+          $(groffer_srcdir)/groffer.pl \
+          >$@ \
+       && chmod +x $@;
+
+uninstall_groffdirs: uninstall-groffer-hook
+uninstall-groffer-hook:
+       if test -d $(DESTDIR)$(grofferdir); then \
+         rmdir $(DESTDIR)$(grofferdir); \
+       fi
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+$(hdtblexample_DATA): $(HDTBLSTRIPFILES)
+@BUILD_EXAMPLES_TRUE@contrib/hdtbl/examples/test-hdtbl.sh: $(top_builddir)/config.status \
+@BUILD_EXAMPLES_TRUE@  $(HDTBLPROCESSEDEXAMPLEFILES) $(top_srcdir)/contrib/hdtbl/examples/test-hdtbl.sh.in
+@BUILD_EXAMPLES_TRUE@  sed -e "s|[@]abs_top_builddir[@]|$(abs_top_builddir)|g" \
+@BUILD_EXAMPLES_TRUE@      -e "s|[@]GHOSTSCRIPT[@]|$(GHOSTSCRIPT)|g" \
+@BUILD_EXAMPLES_TRUE@          $(top_srcdir)/contrib/hdtbl/examples/test-hdtbl.sh.in > $@
+@BUILD_EXAMPLES_TRUE@  chmod +x $@
+
+.roff.ps:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(HDTBLGROFF) -Tps \
+            -dfontpath=$(top_srcdir)/font \
+            -dsopath=$(hdtbl_srcdir)/ \
+            -mhdtbl $< >$@
+.in.roff:
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && sed -e "s|[@]fontdir[@]|$(fontdir)|" \
+              -e "s|[@]EGREP[@]|$(EGREP)|" $< >$@
+
+$(HDTBLPROCESSEDEXAMPLEFILES): gnu.eps groff troff pic tbl \
+  contrib/hdtbl/examples/common.roff
+
+$(HDTBLSTRIPFILES): $(top_srcdir)/tmac/strip.sed
+       @$(MKDIR_P) `dirname $@`
+       sed -f $(top_srcdir)/tmac/strip.sed $(hdtbl_srcdir)/`basename $@`-u > $@;
+
+uninstall_groffdirs: uninstall-hdtbl-hook
+uninstall-hdtbl-hook:
+       if test -d $(DESTDIR)$(hdtblexampledir); then \
+         rmdir $(DESTDIR)$(hdtblexampledir); \
+       fi
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+mmroff: $(mm_srcdir)/mmroff.pl
+       $(AM_V_GEN)$(SED) -e 's;/usr/bin/perl;$(PERL);' \
+           $(mm_srcdir)/mmroff.pl \
+           >$@ \
+       && chmod +x $@
+
+# Special installation rules for m.tmac, mse.tmac, mmse.tmac, mm.tmac
+# and MMLOCALE
+install-data-local: install_mm
+install_mm:
+       -test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
+       -test -d $(DESTDIR)$(mmdir) || $(mkinstalldirs) $(DESTDIR)$(mmdir)
+       $(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m
+       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
+       $(INSTALL_DATA) $(mm_srcdir)/m.tmac \
+         $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
+       $(SED) -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
+         $(mm_srcdir)/mse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac
+       @$(SED) -e "s;^.mso mse.tmac;.mso $(tmac_m_prefix)mse.tmac;g" \
+         $(mm_srcdir)/mmse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac
+       @$(SED) -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
+         $(mm_srcdir)/mm.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac
+       @for f in $(MMLOCALE); do \
+         test -f $(DESTDIR)$(tmacdir)/mm/$$f \
+           || touch $(DESTDIR)$(tmacdir)/mm/$$f; \
+       done
+uninstall-local: uninstall_mm
+uninstall_mm:
+       if test -d $(DESTDIR)$(mmexampledir); then \
+         rmdir $(DESTDIR)$(mmexampledir); \
+       fi
+       -for f in $(MMLOCALE); do \
+         test -s $(DESTDIR)$(tmacdir)/mm/$$f \
+           || $(RM) $(DESTDIR)$(tmacdir)/mm/$$f; \
+       done
+       $(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m
+       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
+       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac
+       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac
+       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac
+       -rmdir $(DESTDIR)$(tmacdir)/mm
+
+# Special distribution rule: we copy all .tmac files from contrib/mm
+dist-hook: dist_mm
+dist_mm:
+       chmod u+w $(distdir)/contrib/mm/
+       for i in $(mm_srcdir)/*.tmac; do \
+         cp -f $$i $(distdir)/contrib/mm/; \
+       done
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+# vim: set filetype=automake:
+@BUILD_PDFEXAMPLES_TRUE@@HAVE_PDFTOOLS_TRUE@contrib/mom/examples/tests-mom.sh: $(top_builddir)/config.status \
+@BUILD_PDFEXAMPLES_TRUE@@HAVE_PDFTOOLS_TRUE@   $(MOMPROCESSEDEXAMPLEFILES)  $(top_srcdir)/contrib/mom/examples/test-mom.sh.in
+@BUILD_PDFEXAMPLES_TRUE@@HAVE_PDFTOOLS_TRUE@   sed -e "s|[@]abs_top_builddir[@]|$(abs_top_builddir)|g" \
+@BUILD_PDFEXAMPLES_TRUE@@HAVE_PDFTOOLS_TRUE@            -e "s|[@]groff_have_urw_fonts[@]|$(groff_have_urw_fonts)|g" \
+@BUILD_PDFEXAMPLES_TRUE@@HAVE_PDFTOOLS_TRUE@           $(top_srcdir)/contrib/mom/examples/test-mom.sh.in > $@
+@BUILD_PDFEXAMPLES_TRUE@@HAVE_PDFTOOLS_TRUE@   chmod +x $@
+.mom.pdf:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && LC_ALL=C $(MOMPDFMOM) $< >$@
+
+$(MOMPROCESSEDEXAMPLEFILES): $(MOMNORMALFILES) \
+  groff troff gropdf pdfmom penguin.ps penguin.pdf \
+  gnu.eps font/devpdf/build_font_files
+
+penguin.ps:
+       cp $(mom_srcdir)/examples/penguin.ps $@
+penguin.pdf:
+       cp $(mom_srcdir)/examples/penguin.pdf $@
+
+install-data-hook: install_mom
+install_mom:
+@BUILD_PDFEXAMPLES_TRUE@       for f in $(PDFDOCFILE); do \
+@BUILD_PDFEXAMPLES_TRUE@         $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
+@BUILD_PDFEXAMPLES_TRUE@         ln -s $(exampledir)/mom/$$f $(DESTDIR)$(pdfdocdir)/$$f; \
+@BUILD_PDFEXAMPLES_TRUE@       done
+
+uninstall_groffdirs: uninstall_mom
+uninstall_mom:
+       for f in $(PDFDOCFILE); do \
+         $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
+       done
+       if test -d $(DESTDIR)$(exampledir)/mom; then \
+         rmdir $(DESTDIR)$(exampledir)/mom; \
+       fi
+       if test -d $(DESTDIR)$(htmldocdir)/mom; then \
+         rmdir $(DESTDIR)$(htmldocdir)/mom; \
+       fi
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+# vim: set filetype=automake:
+
+contrib/pdfmark/pdfmark.pdf: contrib/pdfmark/pdfmark.ms
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(PDFROFF) -mspdf --stylesheet=$(pdfmark_srcdir)/cover.ms \
+            $(top_srcdir)/contrib/pdfmark/pdfmark.ms >$@
+
+# The pdf files use the local script to generate.
+$(PDFDOCFILES): pdfroff groff troff gropdf 
+$(PDFDOCFILES): $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA) gnu.eps
+
+pdfroff: contrib/pdfmark/pdfroff.sh $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)sed -f $(SH_DEPS_SED_SCRIPT) \
+           -e "s|[@]VERSION[@]|$(VERSION)|" \
+           -e "s|[@]GROFF_AWK_INTERPRETERS[@]|$(ALT_AWK_PROGS)|" \
+           -e "s|[@]GROFF_GHOSTSCRIPT_INTERPRETERS[@]|$(ALT_GHOSTSCRIPT_PROGS)|" \
+           -e "s|[@]GROFF_BIN_DIR[@]|$(bindir)|" $(pdfmark_srcdir)/pdfroff.sh \
+           >$@ \
+       && chmod +x $@
+
+mostlyclean-local: mostlyclean_pdfmark
+mostlyclean_pdfmark:
+       rm -rf $(top_builddir)/pdfroff-*
+
+uninstall_groffdirs: uninstall-pdfmark-hook
+uninstall-pdfmark-hook:
+@BUILD_PDFDOC_TRUE@    if test -d $(DESTDIR)$(pdfmarkpdfdocdir); then \
+@BUILD_PDFDOC_TRUE@      rmdir $(DESTDIR)$(pdfmarkpdfdocdir); \
+@BUILD_PDFDOC_TRUE@    fi
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+pic2graph: $(pic2graph_srcdir)/pic2graph.sh
+       $(AM_V_GEN)sed -e "s|[@]g[@]|$(g)|g" \
+           -e "s|[@]VERSION[@]|$(VERSION)|" \
+           -e $(SH_SCRIPT_SED_CMD) $(pic2graph_srcdir)/pic2graph.sh \
+           >$@ \
+       && chmod +x $@
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+doc/automake.pdf: doc/automake.mom \
+  groff troff gropdf pdfmom font/devpdf/build_font_files \
+  contrib/mom/om.tmac
+
+# For simplicity, we always call preconv, grn, and eqn.
+.me.txt:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(DOC_GROFF) -k -Tutf8 -ge -me >$@
+.me.ps:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(DOC_GROFF) -k -Tps -ge -me >$@
+
+.ms.html:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(DOC_GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
+                       -P-D$(imagedir) -Thtml -ms >$@
+.ms.txt:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(DOC_GROFF) -Tascii -ms -mwww >$@
+.ms.ps:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(DOC_GROFF) -Tps -ms -mwww >$@
+
+$(PROCESSEDEXAMPLEFILES): $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS) gnu.eps
+$(PROCESSEDEXAMPLEFILES): $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA) $(hdtbltmac_DATA)
+$(PROCESSEDEXAMPLEFILES): $(dist_tmac_DATA) $(nodist_tmac_DATA)
+$(PROCESSEDDOCFILES): $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS) gnu.eps
+
+doc/pic.html: tmac/www.tmac
+doc/pic.html: $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS)
+doc/pic.html: doc/examples.stamp
+doc/pic.html: $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA)
+doc/pic.html: $(doc_srcdir)/pic.ms $(devhtmlfont_DATA)
+       $(GROFF_V)$(MKDIR_P) $(doc_builddir) \
+       && cd $(doc_builddir) \
+       && $(DOC_SED) $(doc_srcdir)/pic.ms \
+          | $(DOC_GROFF_ONLY) -P-p -P-Ipic -P-D$(imagedir) -P-jpic \
+                              -Thtml -ms > pic.html
+
+doc/examples.stamp: doc/groff.css
+       @$(MKDIR_P) $(doc_builddir)
+       test -f $(doc_builddir)/groff.css || cp $(doc_srcdir)/groff.css $(doc_builddir)
+       echo timestamp > $@
+
+doc/webpage.html: $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS)
+doc/webpage.html: doc/examples.stamp $(devhtmlfont_DATA)
+doc/webpage.html: $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA) 
+doc/webpage.html: $(doc_srcdir)/webpage.ms gnu.eps $(doc_srcdir)/groff.css
+       $(GROFF_V)$(MKDIR_P) doc \
+       && cd $(doc_builddir) \
+       && $(DOC_SED) $(doc_srcdir)/webpage.ms \
+          | $(DOC_GROFF_ONLY) -P-jwebpage -P-nrpb -P-Iwebpage \
+                              -P-D$(imagedir) -Thtml -ms > webpage.html
+
+doc/grnexmpl.ps: doc/grnexmpl.me doc/grnexmpl.g
+
+# Note that we remove groff.css only if out-of-source build tree
+mostlyclean-local: mostlyclean_doc
+mostlyclean_doc:
+@BUILD_HTML_TRUE@      if test -d $(doc_builddir); then \
+@BUILD_HTML_TRUE@        cd $(doc_builddir) && \
+@BUILD_HTML_TRUE@        for f in $(HTMLDOCFILESALL); do \
+@BUILD_HTML_TRUE@          $(RM) $$f; \
+@BUILD_HTML_TRUE@        done; \
+@BUILD_HTML_TRUE@      fi
+@BUILD_HTML_TRUE@      if test -d $(doc_builddir)/$(imagedir); then \
+@BUILD_HTML_TRUE@        cd $(doc_builddir)/$(imagedir) && \
+@BUILD_HTML_TRUE@        for f in $(HTMLDOCIMAGEFILES); do \
+@BUILD_HTML_TRUE@          $(RM) $$f; \
+@BUILD_HTML_TRUE@        done; \
+@BUILD_HTML_TRUE@      fi
+       if test $(top_builddir) != $(top_srcdir); then \
+         $(RM) $(top_builddir)/doc/groff.css; \
+       fi
+
+@BUILD_HTMLEXAMPLES_TRUE@      if test -d $(doc_builddir); then \
+@BUILD_HTMLEXAMPLES_TRUE@        cd $(doc_builddir) && \
+@BUILD_HTMLEXAMPLES_TRUE@        for f in $(HTMLEXAMPLEFILESALL); do \
+@BUILD_HTMLEXAMPLES_TRUE@          $(RM) $$f; \
+@BUILD_HTMLEXAMPLES_TRUE@        done; \
+@BUILD_HTMLEXAMPLES_TRUE@      fi
+@BUILD_HTMLEXAMPLES_TRUE@      if test -d $(doc_builddir)/$(imagedir); then \
+@BUILD_HTMLEXAMPLES_TRUE@        cd $(doc_builddir)/$(imagedir) && \
+@BUILD_HTMLEXAMPLES_TRUE@        for f in $(HTMLEXAMPLEIMAGEFILES); do \
+@BUILD_HTMLEXAMPLES_TRUE@          $(RM) $$f; \
+@BUILD_HTMLEXAMPLES_TRUE@        done; \
+@BUILD_HTMLEXAMPLES_TRUE@      fi
+
+install-data-hook: install_doc_htmldoc
+install_doc_htmldoc:
+@BUILD_HTML_TRUE@      cd $(doc_builddir) && \
+@BUILD_HTML_TRUE@      for f in `ls $(HTMLDOCFILESALL)`; do \
+@BUILD_HTML_TRUE@        $(RM) $(DESTDIR)$(htmldocdir)/$$f; \
+@BUILD_HTML_TRUE@        $(INSTALL_DATA) $$f $(DESTDIR)$(htmldocdir)/$$f; \
+@BUILD_HTML_TRUE@      done
+@BUILD_HTML_TRUE@      -test -d $(DESTDIR)$(htmldocimagedir) \
+@BUILD_HTML_TRUE@        || $(mkinstalldirs) $(DESTDIR)$(htmldocimagedir)
+@BUILD_HTML_TRUE@      $(RM) $(DESTDIR)$(htmldocimagedir)/$(HTMLDOCIMAGEFILES)
+@BUILD_HTML_TRUE@      $(INSTALL_DATA) $(doc_builddir)/$(imagedir)/$(HTMLDOCIMAGEFILES) \
+@BUILD_HTML_TRUE@        $(DESTDIR)$(htmldocimagedir)
+
+install-data-hook: install_doc_examples
+install_doc_examples: gnu.eps
+# Prefer gnu.eps in builddir over srcdir.
+@BUILD_EXAMPLES_TRUE@  d=.; test -f "gnu.eps" || d=$(doc_srcdir); \
+@BUILD_EXAMPLES_TRUE@    $(RM) $(DESTDIR)$(exampledir)/gnu.eps; \
+@BUILD_EXAMPLES_TRUE@    $(INSTALL_DATA) $$d/gnu.eps $(DESTDIR)$(exampledir)/gnu.eps
+@BUILD_HTMLEXAMPLES_TRUE@      cd $(doc_builddir) && \
+@BUILD_HTMLEXAMPLES_TRUE@      for f in `ls $(HTMLEXAMPLEFILESALL)`; do \
+@BUILD_HTMLEXAMPLES_TRUE@        $(RM) $(DESTDIR)$(exampledir)/$$f; \
+@BUILD_HTMLEXAMPLES_TRUE@        $(INSTALL_DATA) $$f $(DESTDIR)$(exampledir)/$$f; \
+@BUILD_HTMLEXAMPLES_TRUE@      done
+@BUILD_HTMLEXAMPLES_TRUE@      -test -d $(DESTDIR)$(exampleimagedir) \
+@BUILD_HTMLEXAMPLES_TRUE@        || $(mkinstalldirs) $(DESTDIR)$(exampleimagedir)
+@BUILD_HTMLEXAMPLES_TRUE@      $(RM) $(DESTDIR)$(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES)
+@BUILD_HTMLEXAMPLES_TRUE@      $(INSTALL_DATA) $(doc_builddir)/$(imagedir)/$(HTMLEXAMPLEIMAGEFILES) \
+@BUILD_HTMLEXAMPLES_TRUE@        $(DESTDIR)$(exampleimagedir)
+
+uninstall-hook: uninstall_doc_examples uninstall_doc_htmldoc uninstall_mom
+uninstall_doc_examples:
+@BUILD_EXAMPLES_TRUE@  $(RM) -f $(DESTDIR)$(exampledir)/gnu.eps
+@BUILD_HTMLEXAMPLES_TRUE@      -test -d $(DESTDIR)$(docexamplesdir) && \
+@BUILD_HTMLEXAMPLES_TRUE@      cd $(DESTDIR)$(docexamplesdir) && \
+@BUILD_HTMLEXAMPLES_TRUE@      for f in $(HTMLEXAMPLEFILESALL); do \
+@BUILD_HTMLEXAMPLES_TRUE@        $(RM) $$f; \
+@BUILD_HTMLEXAMPLES_TRUE@      done
+@BUILD_HTMLEXAMPLES_TRUE@      -test -d $(DESTDIR)$(docexamplesdir)/$(imagedir) && \
+@BUILD_HTMLEXAMPLES_TRUE@      cd $(DESTDIR)$(docexamplesdir)/$(imagedir) && \
+@BUILD_HTMLEXAMPLES_TRUE@      for f in $(HTMLEXAMPLEIMAGEFILES); do \
+@BUILD_HTMLEXAMPLES_TRUE@        $(RM) $$f; \
+@BUILD_HTMLEXAMPLES_TRUE@      done
+@BUILD_HTMLEXAMPLES_TRUE@      -rmdir $(DESTDIR)$(docexamplesdir)/$(imagedir)
+@BUILD_HTMLEXAMPLES_TRUE@      -rmdir $(DESTDIR)$(docexamplesdir)
+
+uninstall_doc_htmldoc:
+@BUILD_HTML_TRUE@      -test -d $(DESTDIR)$(htmldocdir) && \
+@BUILD_HTML_TRUE@      cd $(DESTDIR)$(htmldocdir) && \
+@BUILD_HTML_TRUE@      for f in $(HTMLDOCFILESALL); do \
+@BUILD_HTML_TRUE@        $(RM) $$f; \
+@BUILD_HTML_TRUE@      done
+@BUILD_HTML_TRUE@      -test -d $(DESTDIR)$(htmldocdir)/$(imagedir) && \
+@BUILD_HTML_TRUE@      cd $(DESTDIR)$(htmldocdir)/$(imagedir) && \
+@BUILD_HTML_TRUE@      for f in $(HTMLDOCIMAGEFILES); do \
+@BUILD_HTML_TRUE@        $(RM) $$f; \
+@BUILD_HTML_TRUE@      done
+@BUILD_HTML_TRUE@      -rmdir $(DESTDIR)$(htmldocdir)/$(imagedir)
+@BUILD_HTML_TRUE@      -rmdir $(DESTDIR)$(htmldocdir)
+
+# Texinfo doc
+#
+# Users who want to print out the groff manual are expected to have a
+# working TeX installation.  Note that texi2dvi properly honours the
+# `MAKEINFO' environment variable.
+#
+# We can't use automake's facilities because the make dist target attempts to 
+# generate a pdf version of groff.texi by invoking texi2dvi without the -e 
+# option, which is needed to build this file.
+# info_TEXINFOS = doc/groff.texi
+# doc_groff_TEXINFOS = doc/fdl.texi
+#
+# Note that GNU standards require to install only info doc. Info doc
+# can still be disabled by passing 
+# --with-doc=<something else than info or yes> 
+# to configure
+
+all: build_infodoc
+@BUILD_INFODOC_TRUE@build_infodoc: doc/groff.info
+@BUILD_INFODOC_TRUE@doc/groff.info: $(doc_srcdir)/groff.texi
+@BUILD_INFODOC_TRUE@   @$(MKDIR_P) $(doc_builddir)
+@BUILD_INFODOC_TRUE@   LANG=C \
+@BUILD_INFODOC_TRUE@   LC_ALL=C \
+@BUILD_INFODOC_TRUE@   $(MAKEINFO) -o doc/groff.info --enable-encoding -I$(doc_srcdir) $(doc_srcdir)/groff.texi
+@BUILD_INFODOC_FALSE@build_infodoc:
+# Rules to generate various doc files from .texi files.
+.texi.txt:
+       @$(MKDIR_P) $(doc_builddir)
+       LANG=C \
+       LC_ALL=C \
+       $(MAKEINFO) --enable-encoding -I$(doc_srcdir) --plaintext -o $@ $<
+
+.texi.dvi:
+@HAVE_TEXI2DVI_TRUE@   @$(MKDIR_P) $(doc_builddir)
+@HAVE_TEXI2DVI_TRUE@   LANG=C \
+@HAVE_TEXI2DVI_TRUE@   LC_ALL=C \
+@HAVE_TEXI2DVI_TRUE@   TEXINPUTS="$(top_srcdir)/build-aux:$(TEXINPUTS)" \
+@HAVE_TEXI2DVI_TRUE@   MAKEINFO='$(MAKEINFO) -I $(doc_srcdir)' \
+@HAVE_TEXI2DVI_TRUE@   $(TEXI2DVI) -e --batch --build-dir=doc/`basename $@`.t2d -o $@ $<
+@HAVE_TEXI2DVI_FALSE@  @echo "Program texi2dvi is missing, cannot generate dvi doc"; \
+@HAVE_TEXI2DVI_FALSE@  exit 1
+
+.texi.pdf:
+@HAVE_TEXI2DVI_TRUE@   @$(MKDIR_P) $(doc_builddir)
+@HAVE_TEXI2DVI_TRUE@   LANG=C \
+@HAVE_TEXI2DVI_TRUE@   LC_ALL=C \
+@HAVE_TEXI2DVI_TRUE@   TEXINPUTS="$(top_srcdir)/build-aux:$(TEXINPUTS)" \
+@HAVE_TEXI2DVI_TRUE@   MAKEINFO='$(MAKEINFO) -I $(doc_srcdir)' \
+@HAVE_TEXI2DVI_TRUE@   $(TEXI2DVI) -e --batch --pdf --build-dir=doc/`basename $@`.t2p -o $@ $<
+@HAVE_TEXI2DVI_FALSE@  @echo "Program texi2dvi is missing, cannot generate pdf doc"; \
+@HAVE_TEXI2DVI_FALSE@  exit 1
+
+# This will generate both html split into several files and html doc
+# in a single file. If texinfo version < 5.0, we process the resulting
+# (mono) .html file with fixinfo.sh du to a problem with blockquote
+# closing (for example 5.6.1 Setting Registers, the 'Request'
+# blockquote is not properly closed, see fixinfo.sh for more details
+.texi.html:
+       @$(MKDIR_P) $(doc_builddir)/
+       LANG=C \
+       LC_ALL=C \
+       $(MAKEINFO) --html -I $(doc_srcdir) \
+         -o doc/`basename $@`.node $<
+       LANG=C \
+       LC_ALL=C \
+       $(MAKEINFO) --html -I $(doc_srcdir) --no-split \
+         -o $@ $<
+       if test "$(makeinfo_version_numeric)" -lt 5000; then \
+         echo "patching $@ with fixinfo.sh"; \
+         $(SHELL) $(doc_srcdir)/fixinfo.sh \
+           doc/`basename $@`.mono/`basename $@`; \
+       fi
+
+# Targets to make all the doc in all formats. These doc are not built
+# by default. pdf, dvi, ps, html and their install equivalent
+# install-pdf, install-dvi, install-ps, install-html are standard
+# Automake targets.
+
+@BUILD_INFODOC_TRUE@doc: doc_all
+@BUILD_INFODOC_TRUE@doc_all: doc_txt dvi pdf html
+@BUILD_INFODOC_TRUE@doc_txt: doc/groff.txt
+@BUILD_INFODOC_TRUE@dvi: doc_dvi
+@BUILD_INFODOC_TRUE@doc_dvi: doc/groff.dvi
+@BUILD_INFODOC_TRUE@pdf: doc_pdf
+@BUILD_INFODOC_TRUE@doc_pdf: doc/groff.pdf
+@BUILD_INFODOC_TRUE@html: doc_html
+@BUILD_INFODOC_TRUE@doc_html: doc/groff.html
+@BUILD_INFODOC_TRUE@install-doc: install-pdf install-html
+
+distclean-local: clean_infodoc clean_otherdoc
+maintainer-clean-local: clean_infodoc clean_otherdoc
+clean_infodoc:
+       -$(RM) $(doc_builddir)/groff.info*
+       -$(RM) $(doc_builddir)/groff.pdf
+       -$(RM) $(doc_builddir)/groff.dvi
+       -$(RM) -r $(doc_builddir)/groff.html.*
+clean_otherdoc:
+       -cd $(doc_builddir) && \
+         $(RM) -r *.pdf *.html *.txt *.dvi *.t2p *.t2d
+
+install-data-local: install_infodoc
+@BUILD_INFODOC_TRUE@install_infodoc: doc/groff.info
+@BUILD_INFODOC_TRUE@   -test -d $(DESTDIR)$(infodir) || $(mkinstalldirs) $(DESTDIR)$(infodir)
+@BUILD_INFODOC_TRUE@     for p in doc/groff.info `ls doc/groff.info*`; do \
+@BUILD_INFODOC_TRUE@       f=`basename $$p`; \
+@BUILD_INFODOC_TRUE@       $(RM) $(DESTDIR)$(infodir)/$$f; \
+@BUILD_INFODOC_TRUE@       $(INSTALL_DATA) $$p $(DESTDIR)$(infodir)/$$f; \
+@BUILD_INFODOC_TRUE@     done
+@BUILD_INFODOC_TRUE@   $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) \
+@BUILD_INFODOC_TRUE@     $(DESTDIR)$(infodir)/groff.info
+@BUILD_INFODOC_TRUE@install-pdf-local: doc/groff.pdf
+@BUILD_INFODOC_TRUE@   -test -d $(DESTDIR)$(pdfdocdir) || $(mkinstalldirs) $(DESTDIR)$(pdfdocdir)
+@BUILD_INFODOC_TRUE@   cp $(top_builddir)/doc/groff.pdf $(DESTDIR)$(pdfdocdir)
+@BUILD_INFODOC_TRUE@install-html-local: doc/groff.html
+@BUILD_INFODOC_TRUE@   -test -d $(DESTDIR)$(htmldocdir)/groff.html.mono || $(mkinstalldirs) $(DESTDIR)$(htmldocdir)/groff.html.mono
+@BUILD_INFODOC_TRUE@   cp -r $(top_builddir)/doc/groff.html $(DESTDIR)$(htmldocdir)/groff.html.mono
+@BUILD_INFODOC_TRUE@   cp -r $(top_builddir)/doc/groff.html.node $(DESTDIR)$(htmldocdir)
+@BUILD_INFODOC_FALSE@install_infodoc:
+
+uninstall-local: uninstall_infodoc uninstall-pdf uninstall-html
+uninstall_doc: uninstall-local
+uninstall-doc: uninstall-local
+uninstall_infodoc:
+@BUILD_INFODOC_TRUE@   -$(INSTALL_INFO) --remove --info-dir=$(DESTDIR)$(infodir) \
+@BUILD_INFODOC_TRUE@     $(DESTDIR)$(infodir)/groff.info
+@BUILD_INFODOC_TRUE@   -for f in `ls $(DESTDIR)$(infodir)/groff.info*`; do \
+@BUILD_INFODOC_TRUE@     $(RM) $$f; \
+@BUILD_INFODOC_TRUE@   done
+uninstall-pdf:
+@BUILD_INFODOC_TRUE@   -$(RM) -f $(DESTDIR)$(pdfdocdir)/groff.pdf 
+uninstall-html:
+@BUILD_INFODOC_TRUE@   -$(RM) -r $(DESTDIR)$(htmldocdir)/groff.html.*
+gnu.eps:
+       echo $(XPMTOPPM)
+       if test -f $(top_srcdir)/doc/gnu.eps; then \
+         cp $(top_srcdir)/doc/gnu.eps . ; \
+       elif test -f $(top_builddir)/doc/gnu.eps; then \
+         cp $(top_builddir)/doc/gnu.eps . ; \
+       else \
+         if test ""$(XPMTOPPM) != "found"; then \
+           echo "Program xpmtoppm is missing, can't generate gnu.eps" ; \
+           exit 1; \
+         fi; \
+         if test ""$(pnmtops) != "found"; then \
+           echo "Program pnmtops is missing, can't generate gnu.eps" ; \
+           exit 1; \
+         fi; \
+         if test "$(pnmtops_nosetpage)" != "pnmtops -nosetpage"; then \
+           echo "Program pnmtops can't handle -nosetpage, can't generate gnu.eps" ; \
+           exit 1; \
+         fi; \
+         xpmtoppm $(top_srcdir)/doc/gnu.xpm | pnmdepth 15 \
+           | $(pnmtops_nosetpage) -noturn -rle >$@ ; \
+       fi
+
+# Copy gnu.eps in 'doc' directory
+dist-hook: dist-gnueps
+dist-gnueps:
+       chmod u+w $(distdir)/doc
+       cp -f gnu.eps $(distdir)/doc
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+$(DEVASCIIFONTSFILES): $(devascii_srcdir)/R.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(RM) $@ \
+       && $(SHELL) $(GENFONTSSH) $(devascii_srcdir)/R.proto \
+            $(DEVASCIIRES) $(DEVASCIICPI) `basename $@` > $@
+
+font/devascii/DESC: $(devascii_srcdir)/DESC.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(SHELL) $(GENDESCSH) $(devascii_srcdir)/DESC.proto \
+            $(DEVASCIIRES) $(DEVASCIICPI) $(DEVASCIILPI) \
+            $(DEVASCIIFONTS) > $@
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+$(DEVCP1047FONTSFILES): $(devcp1047_srcdir)/R.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(RM) $@ \
+       && $(SHELL) $(GENFONTSSH) $(devcp1047_srcdir)/R.proto \
+            $(DEVCP1047RES) $(DEVCP1047CPI) `basename $@` > $@
+
+font/devcp1047/DESC: $(devcp1047_srcdir)/DESC.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(SHELL) $(GENDESCSH) $(devcp1047_srcdir)/DESC.proto \
+            $(DEVCP1047RES) $(DEVCP1047CPI) $(DEVCP1047LPI) \
+            $(DEVCP1047FONTS) > $@
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+font/devdvi/DESC: $(devdvi_srcdir)/DESC.in
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && cat $(devdvi_srcdir)/DESC.in >$@ \
+       && if test "$(PAGE)" = A4; then \
+            echo "papersize a4" >>$@; \
+          else \
+            echo "papersize letter" >>$@; \
+          fi \
+       && (test -z '$(DVIPRINT)' \
+           || echo print '$(DVIPRINT)' >>$@)
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+$(DEVHTMLFONTSFILES): $(devhtml_srcdir)/R.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(RM) $@ \
+       && $(SHELL) $(GENFONTSSH) $(devhtml_srcdir)/R.proto \
+            $(DEVHTMLRES) $(DEVHTMLCPI) `basename $@` > $@
+
+font/devhtml/DESC: $(devhtml_srcdir)/DESC.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(SHELL) $(GENDESCSH) $(devhtml_srcdir)/DESC.proto \
+            $(DEVHTMLRES) $(DEVHTMLCPI) $(DEVHTMLLPI) $(DEVHTMLFONTS) > $@ \
+       && echo "image_generator $(GHOSTSCRIPT)" >> $@
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+$(DEVLATIN1FONTSFILES): $(devlatin1_srcdir)/R.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(RM) $@ \
+       && $(SHELL) $(GENFONTSSH) $(devlatin1_srcdir)/R.proto \
+            $(DEVLATIN1RES) $(DEVLATIN1CPI) `basename $@` > $@
+
+font/devlatin1/DESC: $(devlatin1_srcdir)/DESC.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(SHELL) $(GENDESCSH) $(devlatin1_srcdir)/DESC.proto \
+            $(DEVLATIN1RES) $(DEVLATIN1CPI) $(DEVLATIN1LPI) \
+            $(DEVLATIN1FONTS) > $@
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+font/devlbp/DESC: $(devlbp_srcdir)/DESC.in
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && cat $(devlbp_srcdir)/DESC.in >$@ \
+       && if test "$(PAGE)" = A4; then \
+            echo "papersize a4" >>$@; \
+          else \
+            echo "papersize letter" >>$@; \
+          fi \
+       && (test -z '$(LBPPRINT)' \
+           || echo print '$(LBPPRINT)' >>$@)
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+font/devlj4/DESC: $(devlj4_srcdir)/DESC.in
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && echo "res $(LJ4RES)" >$@ \
+       && echo "unitwidth `expr 7620000 / $(LJ4RES)`" >>$@ \
+       && cat $(devlj4_srcdir)/DESC.in >>$@ \
+       && if test "$(PAGE)" = A4; then \
+            echo "papersize a4" >>$@; \
+          else \
+            echo "papersize letter" >>$@; \
+          fi \
+       && (test -z '$(LJ4PRINT)' \
+           || echo print '$(LJ4PRINT)' >>$@)
+
+fonts: devlj4_fonts
+devlj4_fonts: hpftodit font/devlj4/DESC
+       $(MAKE) -f $(devlj4_srcdir)/generate/Makefile \
+         srcdir=$(devlj4_srcdir)/generate \
+         HPFTODIT=$(top_builddir)/hpftodit
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+font/devpdf/enc/text.enc:
+       @$(MKDIR_P) $(top_builddir)/font/devpdf/enc
+       cp -f $(top_srcdir)/font/devps/text.enc \
+         $(top_builddir)/font/devpdf/enc
+
+font/devpdf/map/symbolmap:
+       @$(MKDIR_P) $(top_builddir)/font/devpdf/map
+       @cp -f $(top_srcdir)/font/devps/symbolmap \
+         $(top_builddir)/font/devpdf/map
+
+$(DEVPDFFONTMAP_1):
+       @$(MKDIR_P) $(top_builddir)/font/devpdf/map
+       @cp -f $(top_srcdir)/font/devps/generate/`basename $@` \
+         $(top_builddir)/font/devpdf/map
+
+font/devpdf/util/BuildFoundries: shdeps.sed \
+  $(devpdf_srcdir)/util/BuildFoundries.pl
+       $(AM_V_GEN)$(MKDIR_P) $(top_builddir)/font/devpdf/util \
+       && $(RM) $(top_builddir)/font/devpdf/util/BuildFoundries \
+       && if test -n "$(PERL)"; then \
+            sed -f $(SH_DEPS_SED_SCRIPT) \
+                -e "s|/usr/bin/perl|$(PERL)|" \
+                -e "s|[@]GROFF_GHOSTSCRIPT_INTERPRETERS[@]|$(GHOSTSCRIPT)|" \
+                -e "s|[@]VERSION[@]|$(VERSION)|" \
+                -e "s|[@]GROFF_FONT_DIR[@]|$(fontdir)|" \
+                $(devpdf_srcdir)/util/BuildFoundries.pl \
+                >$(top_builddir)/font/devpdf/util/BuildFoundries; \
+          else \
+            sed -f $(SH_DEPS_SED_SCRIPT) \
+                -e "s|[@]VERSION[@]|$(VERSION)|" \
+                -e "s|[@]GROFF_FONT_DIR[@]|$(fontdir)|" \
+                $(devpdf_srcdir)/util/BuildFoundries.pl \
+                >$(top_builddir)/font/devpdf/util/BuildFoundries; \
+          fi \
+       && chmod +x $(top_builddir)/font/devpdf/util/BuildFoundries
+
+font/devpdf/DESC: $(devpdf_srcdir)/DESC.in
+       $(AM_V_GEN)$(MKDIR_P) $(top_builddir)/font/devpdf \
+       && $(RM) $(top_builddir)/font/devpdf/DESC \
+       && cat $(devpdf_srcdir)/DESC.in >$(top_builddir)/font/devpdf/DESC \
+       && if test "$(PAGE)" = A4; then \
+            echo "papersize a4" >>$(top_builddir)/font/devpdf/DESC; \
+          else \
+            echo "papersize letter" >>$(top_builddir)/font/devpdf/DESC; \
+          fi
+
+font/devpdf/Foundry:
+       $(AM_V_GEN)$(RM) $(top_builddir)/font/devpdf/Foundry \
+       && sed "s|[@]urwfontsdir[@]|$(urwfontsdir)|" \
+              $(devpdf_srcdir)/Foundry.in >$(top_builddir)/$@
+
+all: font/devpdf/build_font_files
+
+# PATH: path to find afmtodit. We add $(abs_top_builddir) because
+# afmtodit is built in the top builddir.
+font/devpdf/build_font_files: afmtodit font/devpdf/DESC \
+  $(devpdffontenc_DATA) $(devpdffontmap_DATA) $(devpdffont_DATA) \
+  font/devpdf/util/BuildFoundries
+       @if $(AM_V_P); then \
+         set -x; \
+       else \
+         echo "  GEN      $(top_builddir)/font/devpdf/download"; \
+       fi \
+       && $(RM) $@ \
+       && $(MKDIR_P) $(top_builddir)/font/devpdf \
+       && echo "# foundry      ps name psfile" > $(top_builddir)/font/devpdf/download \
+       && PATH="$(abs_top_builddir)$(GROFF_PATH_SEPARATOR)$(abs_top_builddir)/build-aux$(GROFF_PATH_SEPARATOR)$(PATH)" \
+            $(abs_top_builddir)/font/devpdf/util/BuildFoundries \
+              $(abs_top_builddir)/font/devpdf \
+              '$(abs_top_srcdir)/font/devps : $(abs_top_builddir)/font/devps' \
+              >> $(top_builddir)/font/devpdf/download \
+       && touch $@
+
+mostlyclean-local: mostlyclean_devpdf_extra
+mostlyclean_devpdf_extra:
+       @echo Cleaning font/devpdf
+       rm -rf $(top_builddir)/font/devpdf/enc \
+         $(top_builddir)/font/devpdf/map;
+       if test -d $(top_builddir)/font/devpdf; then \
+         for f in $(GROFF_FONT_FILES); do \
+           rm -f $(top_builddir)/font/devpdf/$$f; \
+         done; \
+       fi
+
+install-data-local: install_devpdf
+install_devpdf:
+       @echo Installing devpdf files
+       -@test -d $(DESTDIR)$(devpdffontdir) \
+         || $(mkinstalldirs) $(DESTDIR)$(devpdffontdir)
+       @for f in $(GROFF_FONT_FILES); do \
+         $(RM) $(DESTDIR)$(devpdffontdir)/$$f; \
+         if test -f $$f; then \
+           $(INSTALL_DATA) $$f $(DESTDIR)$(devpdffontdir)/$$f; \
+         else \
+           $(INSTALL_DATA) $(top_builddir)/font/devpdf/$$f \
+             $(DESTDIR)$(devpdffontdir)/$$f; \
+         fi; \
+       done
+       $(INSTALL_DATA) $(top_builddir)/font/devpdf/download \
+         $(DESTDIR)$(devpdffontdir)/
+
+uninstall_groffdirs: uninstall_devpdf
+uninstall_devpdf:
+       @echo Uninstalling devpdf files
+       if test -d $(DESTDIR)$(devpdffontdir); then \
+         for f in $(GROFF_FONT_FILES); do \
+           rm -f $(DESTDIR)$(devpdffontdir)/$$f; \
+         done; \
+         if test -d $(DESTDIR)$(devpdffontencdir); then \
+           rmdir $(DESTDIR)$(devpdffontencdir); \
+         fi; \
+         if test -d $(DESTDIR)$(devpdffontmapdir); then \
+           rmdir $(DESTDIR)$(devpdffontmapdir); \
+         fi; \
+         rm -f $(DESTDIR)$(devpdffontdir)/download; \
+         rmdir $(DESTDIR)$(devpdffontdir); \
        fi
 
-do=all
-dodirs=$(ALLDIRS) $(OTHERDIRS) dot
-# Default target for subdir_Makefile
-subdir=src/roff/troff
-
-$(TARGETS):
-       @$(ENVSETUP); $(MAKE) $(MAKE_K_FLAG) do=$@ $(ALLDIRS)
-       @$(ENVSETUP); $(MAKE) $(MAKE_K_FLAG) do=$@ $(OTHERDIRS) dot
-
-clean: clean-gnulib
-clean-gnulib:
-       @$(ENVSETUP); cd src/libs/gnulib; $(MAKE) $(MAKE_K_FLAG) clean
-
-distclean: distclean-gnulib
-distclean-gnulib:
-       @$(ENVSETUP); cd src/libs/gnulib; $(MAKE) $(MAKE_K_FLAG) distclean
-       rm -rf src/libs/gnulib/autom4te.cache
-
-dot: FORCE
-       @$(ENVSETUP); \
-       $(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$(srcdir) VPATH=$(srcdir) \
-         -f $(top_srcdir)/Makefile.comm \
-         -f $(top_srcdir)/Makefile.sub $(do)
-
-$(LIBDIRS): FORCE $(INCDIRS) $(PROGDEPDIRS) $(GNULIBDIRS)
-       @$(ENVSETUP); \
-       if test $(srcdir) = .; then \
-         srcdir=.; \
-       else \
-         srcdir=$(top_srcdir)/$@; \
-       fi; \
-       test -d $@ || $(mkinstalldirs) $@; \
-       cd $@; \
-       test -f Makefile.dep || touch Makefile.dep; \
-       $(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-         -f $(top_srcdir)/Makefile.comm \
-         -f $$srcdir/Makefile.sub \
-         -f $(top_srcdir)/Makefile.lib \
-         -f Makefile.dep $(do)
-
-$(CPROGDIRS) $(XPROGDIRS): FORCE $(LIBDIRS)
-       @$(ENVSETUP); \
-       if test $(srcdir) = .; then \
-         srcdir=.; \
-       else \
-         srcdir=$(top_srcdir)/$@; \
-       fi; \
-       test -d $@ || $(mkinstalldirs) $@; \
-       cd $@; \
-       test -f Makefile.dep || touch Makefile.dep; \
-       $(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-         -f $(top_srcdir)/Makefile.comm \
-         -f $$srcdir/Makefile.sub \
-         -f $(top_srcdir)/Makefile.cpg \
-         -f Makefile.dep $(do)
-
-$(CCPROGDIRS): FORCE $(LIBDIRS)
-       @$(ENVSETUP); \
-       if test $(srcdir) = .; then \
-         srcdir=.; \
-       else \
-         srcdir=$(top_srcdir)/$@; \
-       fi; \
-       test -d $@ || $(mkinstalldirs) $@; \
-       cd $@; \
-       test -f Makefile.dep || touch Makefile.dep; \
-       $(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-         -f $(top_srcdir)/Makefile.comm \
-         -f $$srcdir/Makefile.sub \
-         -f $(top_srcdir)/Makefile.ccpg \
-         -f Makefile.dep $(do)
-
-$(DEVDIRS) $(XDEVDIRS) $(OTHERDEVDIRS) $(TTYDEVDIRS): FORCE \
-               $(PROGDEPDIRS) $(CCPROGDIRS) $(CPROGDIRS)
-       @$(ENVSETUP); \
-       if test $(srcdir) = .; then \
-         srcdir=.; \
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+font/devps/DESC: $(devps_srcdir)/DESC.in
+       $(AM_V_GEN)$(MKDIR_P) font/devps \
+       && cat $(devps_srcdir)/DESC.in >$@ \
+       && echo broken $(BROKEN_SPOOLER_FLAGS) >>$@ \
+       && if test "$(PAGE)" = A4; then \
+            echo "papersize a4" >>$@; \
+          else \
+            echo "papersize letter" >>$@; \
+          fi \
+       && (test -z '$(PSPRINT)' \
+           || echo print '$(PSPRINT)' >>$@)
+
+fonts: devps_fonts
+# We add top_builddir to the PATH in case the only afmtodit available is
+# the one in the current build.
+devps_fonts: afmtodit font/devps/DESC
+       PATH=$(top_builddir)$(GROFF_PATH_SEPARATOR)$(PATH) \
+         $(MAKE) -f $(devps_srcdir)/generate/Makefile \
+         srcdir=$(devps_srcdir)/generate DESC=$(devps_srcdir)/DESC.in
+
+font/devps/prologue: $(devps_srcdir)/prologue.ps
+       $(AM_V_GEN)$(MKDIR_P) font/devps \
+       && $(RM) $@ \
+       && sed -f $(devps_srcdir)/psstrip.sed $? >$@
+font/devps/zapfdr.pfa: $(devps_srcdir)/zapfdr.ps
+       $(AM_V_GEN)$(MKDIR_P) font/devps \
+       && $(RM) $@ \
+       && sed -f $(devps_srcdir)/psstrip.sed $? >$@
+font/devps/symbolsl.pfa: $(devps_srcdir)/symbolsl.ps
+       $(AM_V_GEN)$(MKDIR_P) font/devps \
+       && $(RM) $@ \
+       && sed -f $(devps_srcdir)/psstrip.sed $? >$@
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+$(DEVUTF8FONTSFILES): $(devutf8_srcdir)/R.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(RM) $@ \
+       && $(SHELL) $(GENFONTSSH) $(devutf8_srcdir)/R.proto \
+            $(DEVUTF8RES) $(DEVUTF8CPI) `basename $@` > $@
+
+font/devutf8/DESC: $(devutf8_srcdir)/DESC.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(SHELL) $(GENDESCSH) $(devutf8_srcdir)/DESC.proto \
+            $(DEVUTF8RES) $(DEVUTF8CPI) $(DEVUTF8LPI) $(DEVUTF8FONTS) > $@
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+man:
+       $(MKDIR_P) $(top_builddir)/man
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+defs.h: config.status
+       @$(SHELL) $(top_srcdir)/gendef.sh defs.h \
+       "PROG_PREFIX=\"$(g)\"" \
+       "DEVICE=\"$(DEVICE)\"" \
+       "INSTALLPATH=\"$(prefix)\"" \
+       "BINPATH=\"$(bindir)\"" \
+       "FONTPATH=\"$(fontpath)\"" \
+       "MACROPATH=\"$(tmacpath)\"" \
+       "INDEX_SUFFIX=\"$(indexext)\"" \
+       "COMMON_WORDS_FILE=\"$(common_words_file)\"" \
+       "DEFAULT_INDEX_DIR=\"$(indexdir)\"" \
+       "DEFAULT_INDEX_NAME=\"$(indexname)\"" \
+       "DEFAULT_INDEX=\"$(indexdir)/$(indexname)\""
+
+dist-hook: dist_include
+dist_include:
+       chmod u+w $(distdir)/src/include
+       cp -f $(top_srcdir)/src/include/*.h $(distdir)/src/include
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+src/libs/libbib/index.$(OBJEXT): defs.h
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+# .o files have a 'libgroff_a-' prefix because we set libgroff_a_CPPFLAGS
+src/libs/libgroff/libgroff_a-device.$(OBJEXT): defs.h
+src/libs/libgroff/libgroff_a-fontfile.$(OBJEXT): defs.h
+src/libs/libgroff/libgroff_a-macropath.$(OBJEXT): defs.h
+src/libs/libgroff/libgroff_a-relocate.$(OBJEXT): defs.h
+
+src/libs/libgroff/version.cpp: $(top_srcdir)/.version
+       @echo Making version.cpp
+       @echo const char \*version_string = \"$(MAJOR_VERSION).$(MINOR_VERSION)\"\; >$@
+       @echo const char \*revision_string = \"$(REVISION)\"\; >>$@
+       @echo extern \"C\" { >>$@
+       @echo const char \*Version_string = \"$(VERSION)\"\; >>$@
+       @echo } >>$@ \
+         | sed -e 's/\.0\"/\"/' >>$@
+
+all: charset.alias ref-add.sed ref-del.sed
+
+charset.alias: $(libgroff_srcdir)/config.charset
+       $(SHELL) $(libgroff_srcdir)/config.charset '$(HOST)' > t-$@
+       mv t-$@ $@
+
+ref-add.sed : $(libgroff_srcdir)/ref-add.sin
+       sed -e '/^#/d' \
+           -e 's/@''PACKAGE''@/$(LIBGROFF_PACKAGE)/g' $(libgroff_srcdir)/ref-add.sin > t-$@
+       mv t-$@ $@
+
+ref-del.sed : $(libgroff_srcdir)/ref-del.sin
+       sed -e '/^#/d' \
+           -e 's/@''PACKAGE''@/$(LIBGROFF_PACKAGE)/g' $(libgroff_srcdir)/ref-del.sin > t-$@
+       mv t-$@ $@
+
+install-data-local: install_charset_data
+install_charset_data:
+       -test $(GLIBC21) != no || $(mkinstalldirs) $(DESTDIR)$(libdir)
+       if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+         sed -f ref-add.sed $(DESTDIR)$(libdir)/charset.alias \
+           > $(DESTDIR)$(libdir)/t-charset.alias; \
+         $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
+           $(DESTDIR)$(libdir)/charset.alias; \
+         rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
        else \
-         srcdir=$(top_srcdir)/$@; \
-       fi; \
-       test -d $@ || $(mkinstalldirs) $@; \
-       cd $@; \
-       $(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-         -f $(top_srcdir)/Makefile.comm \
-         -f $$srcdir/Makefile.sub \
-         -f $(top_srcdir)/Makefile.dev $(do)
-
-$(GNULIBDIRS): FORCE
-       @$(ENVSETUP); \
-       if test $(srcdir) = .; then \
-         srcdir=.; \
+         if test $(GLIBC21) = no; then \
+           sed -f ref-add.sed charset.alias \
+             > $(DESTDIR)$(libdir)/t-charset.alias; \
+           $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
+             $(DESTDIR)$(libdir)/charset.alias; \
+           rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
+         fi; \
+       fi
+
+uninstall-local: uninstall_charset_data
+uninstall_charset_data:
+       -if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+         sed -f ref-del.sed $(DESTDIR)$(libdir)/charset.alias \
+           > $(DESTDIR)$(libdir)/t-charset.alias; \
+         if grep '^# Packages using this file: $$' \
+                 $(DESTDIR)$(libdir)/t-charset.alias > /dev/null; then \
+           rm -f $(DESTDIR)$(libdir)/charset.alias; \
+         else \
+           $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
+             $(DESTDIR)$(libdir)/charset.alias; \
+         fi; \
+         rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
+       fi
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+gropdf: $(gropdf_dir)/gropdf.pl $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f $(SH_DEPS_SED_SCRIPT) \
+              -e "s|[@]VERSION[@]|$(VERSION)|" \
+              -e "s|[@]PERL[@]|$(PERL)|" \
+              -e "s|[@]GROFF_FONT_DIR[@]|$(fontpath)|" \
+              -e "s|[@]RT_SEP[@]|$(RT_SEP)|" $(gropdf_dir)/gropdf.pl \
+              >$@ \
+       && chmod +x $@
+
+pdfmom: $(gropdf_dir)/pdfmom.pl $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f $(SH_DEPS_SED_SCRIPT) \
+              -e "s|[@]VERSION[@]|$(VERSION)|" \
+              -e "s|[@]RT_SEP[@]|$(RT_SEP)|" \
+              -e "s|[@]PERL[@]|$(PERL)|" $(gropdf_dir)/pdfmom.pl \
+              >$@ \
+       && chmod +x $@
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+# Because we defined gxditview_CPPFLAGS, automake renames all the xditview's 
+# objects, adding an "gxditview-" prefix. 
+@WITHOUT_X11_FALSE@src/devices/xditview/gxditview-device.$(OBJEXT): defs.h
+@WITHOUT_X11_FALSE@src/devices/xditview/gxditview-xditview.$(OBJEXT): $(XDITVIEW_GENHDRS)
+
+@WITHOUT_X11_FALSE@src/devices/xditview/GXditview-ad.h: $(xditview_srcdir)/GXditview.ad
+@WITHOUT_X11_FALSE@    @echo Making $@
+@WITHOUT_X11_FALSE@    $(SHELL) $(xditview_srcdir)/ad2c $(xditview_srcdir)/GXditview.ad > $@
+
+# Custom installation of GXditview.ad and GXditview-color.ad
+install-data-local: install_xditview
+uninstall-local: uninstall_xditview
+
+@WITHOUT_X11_TRUE@install_xditview:
+@WITHOUT_X11_TRUE@uninstall_xditview:
+@WITHOUT_X11_FALSE@install_xditview: $(xditview_srcdir)/GXditview.ad $(xditview_srcdir)/GXditview-color.ad
+@WITHOUT_X11_FALSE@    -test -d $(DESTDIR)$(appresdir) \
+@WITHOUT_X11_FALSE@      || $(mkinstalldirs) $(DESTDIR)$(appresdir)
+@WITHOUT_X11_FALSE@    if test -f $(DESTDIR)$(appresdir)/GXditview; then \
+@WITHOUT_X11_FALSE@      mv $(DESTDIR)$(appresdir)/GXditview \
+@WITHOUT_X11_FALSE@        $(DESTDIR)$(appresdir)/GXditview.old; \
+@WITHOUT_X11_FALSE@    fi
+@WITHOUT_X11_FALSE@    if test -f $(DESTDIR)$(appresdir)/GXditview-color; then \
+@WITHOUT_X11_FALSE@      mv $(DESTDIR)$(appresdir)/GXditview-color \
+@WITHOUT_X11_FALSE@        $(DESTDIR)$(appresdir)/GXditview-color.old; \
+@WITHOUT_X11_FALSE@    fi
+@WITHOUT_X11_FALSE@    $(INSTALL_DATA) $(xditview_srcdir)/GXditview.ad \
+@WITHOUT_X11_FALSE@      $(DESTDIR)$(appresdir)/GXditview
+@WITHOUT_X11_FALSE@    $(INSTALL_DATA) $(xditview_srcdir)/GXditview-color.ad \
+@WITHOUT_X11_FALSE@      $(DESTDIR)$(appresdir)/GXditview-color
+
+@WITHOUT_X11_FALSE@uninstall_xditview:
+@WITHOUT_X11_FALSE@    rm -f $(DESTDIR)$(appresdir)/GXditview
+@WITHOUT_X11_FALSE@    rm -f $(DESTDIR)$(appresdir)/GXditview-color
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+src/preproc/eqn/eqn-lex.$(OBJEXT): src/preproc/eqn/eqn.hpp
+
+neqn: $(top_srcdir)/src/preproc/eqn/neqn.sh $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -e 's/[@]g[@]/$(g)/g' \
+              -f $(SH_DEPS_SED_SCRIPT) \
+              -e $(SH_SCRIPT_SED_CMD) \
+              $(top_srcdir)/src/preproc/eqn/neqn.sh \
+              >$@ \
+       && chmod +x $@
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+src/preproc/grn/main.$(OBJEXT): defs.h
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+src/preproc/html/pre-html.$(OBJEXT): defs.h
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+src/preproc/pic/pic-lex.$(OBJEXT): src/preproc/pic/pic.hpp
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+# As refer_CPPFLAGS was set, all the .o have a 'refer-' prefix
+src/preproc/refer/refer-command.$(OBJEXT): defs.h
+src/preproc/refer/refer-ref.$(OBJEXT): defs.h
+src/preproc/refer/refer-refer.$(OBJEXT): defs.h
+src/preproc/refer/refer-token.$(OBJEXT): defs.h
+src/preproc/refer/refer-label.$(OBJEXT): defs.h
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+src/roff/groff/groff.$(OBJEXT): defs.h
+
+groff_opts.tmp: src/roff/groff/groff.cpp
+       @$(GREP) -e ':.*:.*:' $? | sed -e 's/[ \t",]//g' > $@
+       @echo -n 'groff options: '
+       @cat $@
+
+groff_opts_no_arg.txt: groff_opts.tmp
+       @sed -e 's/[a-zA-Z]://g' $? > $@
+       @echo -n 'no arg: '
+       @cat $@
+
+groff_opts_with_arg.txt: groff_opts_no_arg.txt
+       @rm -f $@
+       @sed "s/[`cat $?`:]//g" groff_opts.tmp > $@
+       @echo -n 'with arg: '
+       @cat $@
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+# Perl version works for all parts of 'groff'.
+
+grog: $(grog_srcdir)/grog.pl $(GROG) $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f "$(SH_DEPS_SED_SCRIPT)" \
+              -e "1s|^\(#! \).*perl|\\1$(PERL)|" \
+              -e "s|[@]g[@]|$(g)|g" \
+              -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+              -e "s|[@]libdir[@]|$(DESTDIR)$(libdir)|g" \
+              -e "s|[@]EGREP[@]|$(EGREP)|g" \
+              -e "s|[@]VERSION[@]|$(VERSION)|" \
+              -e "s|[@]grog_dir[@]|$(grog_dir)|" \
+              -e "$(SH_SCRIPT_SED_CMD)" \
+              $(grog_srcdir)/grog.pl \
+              >$@ \
+       && chmod +x $@
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+nroff: $(nroff_srcdir)/nroff.sh $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)rm -f $@ \
+       && sed -f $(SH_DEPS_SED_SCRIPT) \
+              -e $(SH_SCRIPT_SED_CMD) \
+              -e "s|[@]VERSION[@]|$(VERSION)|" \
+              $(nroff_srcdir)/nroff.sh \
+              >$@ \
+       && chmod +x $@
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+src/roff/troff/input.$(OBJEXT): defs.h
+
+src/roff/troff/majorminor.cpp: $(top_srcdir)/.version
+       @echo Making $@
+       @$(RM) $@
+       @echo const char \*major_version = \"$(MAJOR_VERSION)\"\; >$@
+       @echo const char \*minor_version = \"$(MINOR_VERSION)\"\; >>$@
+       @echo const char \*revision = \"$(REVISION)\"\; >>$@
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+afmtodit: $(afmtodit_srcdir)/afmtodit.pl $(afmtodit_srcdir)/afmtodit.tables
+       $(AM_V_GEN)if test -n "$(PERL)"; then \
+         sed -e "s|/usr/bin/perl|$(PERL)|" \
+             -e "s|[@]VERSION[@]|$(VERSION)|" \
+             -e "s|[@]FONTDIR[@]|$(fontdir)|" \
+             -e "/[@]afmtodit.tables[@]/ r $(afmtodit_srcdir)/afmtodit.tables" \
+             -e "/[@]afmtodit.tables[@]/ d" \
+             $(afmtodit_srcdir)/afmtodit.pl \
+             >afmtodit; \
        else \
-         srcdir=$(top_srcdir)/$@; \
-       fi; \
-       test -d $@ || $(mkinstalldirs) $@; \
-       case $(do) in \
-       all) \
-         cd $@; \
-         args=`$(top_builddir)/config.status --config`; \
-         test -f Makefile \
-           || eval $$srcdir/configure "$$args" --srcdir=$$srcdir; \
-         $(MAKE) ACLOCAL=: AUTOCONF=: AUTOHEADER=: AUTOMAKE=: $(do) ;; \
-       esac
+         sed -e "s|[@]VERSION[@]|$(VERSION)|" \
+             -e "s|[@]FONTDIR[@]|$(fontdir)|" \
+             -e "/[@]afmtodit.tables[@]/ r $(afmtodit_srcdir)/afmtodit.tables" \
+             -e "/[@]afmtodit.tables[@]/ d" \
+             $(afmtodit_srcdir)/afmtodit.pl \
+             >afmtodit; \
+       fi \
+       && chmod +x afmtodit
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
 
-$(OTHERDIRS): $(PROGDEPDIRS) $(CCPROGDIRS) $(CPROGDIRS) $(SHPROGDIRS)
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+src/utils/indxbib/indxbib.$(OBJEXT): defs.h
 
-$(INCDIRS) $(PROGDEPDIRS) $(SHPROGDIRS) $(OTHERDIRS): FORCE
-       @$(ENVSETUP); \
-       if test $(srcdir) = .; then \
-         srcdir=.; \
+install-data-local: install_indxbib
+install_indxbib: $(indxbib_srcdir)/eign
+       -test -d $(DESTDIR)$(datadir) \
+         || $(mkinstalldirs) $(DESTDIR)$(datadir)
+       -test -d $(DESTDIR)$(dataprogramdir) \
+         || $(mkinstalldirs) $(DESTDIR)$(dataprogramdir)
+       -test -d $(DESTDIR)$(datasubdir) \
+         || $(mkinstalldirs) $(DESTDIR)$(datasubdir)
+       if test -f /usr/lib/eign; then \
+         rm -f $(DESTDIR)$(common_words_file); \
+         ln -s /usr/lib/eign $(DESTDIR)$(common_words_file) 2>/dev/null \
+           || ln /usr/lib/eign $(DESTDIR)$(common_words_file) 2>/dev/null \
+           || cp /usr/lib/eign $(DESTDIR)$(common_words_file); \
        else \
-         srcdir=$(top_srcdir)/$@; \
-       fi; \
-       test -d $@ || $(mkinstalldirs) $@; \
-       cd $@; \
-       $(MAKE) $(MAKE_K_FLAG) $(MDEFINES) srcdir=$$srcdir VPATH=$$srcdir \
-         -f $(top_srcdir)/Makefile.comm \
-         -f $$srcdir/Makefile.sub \
-         -f $(top_srcdir)/Makefile.man $(do)
-
-.PHONY: dist
-dist:
-       if test "${doc_dist_target_ok}" != yes; then \
-         echo "The \`dist' target is not applicable to this configuration"; \
-         exit 1; \
+         rm -f $(DESTDIR)$(common_words_file); \
+         $(INSTALL_DATA) $(indxbib_srcdir)/eign $(DESTDIR)$(common_words_file); \
        fi
-       -rm -fr tmp
-       rm -f groff-$(version)$(revision).tar.gz
-       mkdir tmp
-       for d in $(DISTDIRS); do \
-         $(mkinstalldirs) tmp/$$d; \
-       done
-       cp Makefile tmp
-       -cp * tmp 2>/dev/null
-       -for d in $(DISTDIRS); do \
-         (cd tmp/$$d; \
-          cp $(top_srcdir)/$$d/* . 2>/dev/null;); \
-       done
-       cd tmp; $(MAKE) srcdir=. VPATH=. distfiles
-       cd tmp; $(MAKE) srcdir=. VPATH=. extraclean
-       for d in $(EXTRADIRS); do \
-         (cd tmp/$$d; \
-          if test -f Makefile; then \
-            $(MAKE) extraclean; \
-          else \
-            $(MAKE) -f $(top_builddir)/$$d/Makefile extraclean; \
-          fi); \
-       done
-       for d in $(GNULIBDIRS); do \
-         (cd tmp/$$d; \
-          if test -f config.status; then \
-            ./config.status; \
-          fi; \
-          if test -f Makefile; then \
-            $(MAKE) distclean; \
-          else \
-            $(MAKE) -f $(top_builddir)/$$d/Makefile distclean; \
-          fi; \
-          rm -rf autom4te.cache); \
-       done
-       rm -f tmp/Makefile
-       cp Makefile.init tmp/Makefile
-       mv tmp groff-$(version)$(revision)
-       tar cfh - groff-$(version)$(revision) \
-         | gzip -c >groff-$(version)$(revision).tar.gz
-       rm -fr groff-$(version)$(revision)
-
-# $(PROGDIRS): libgroff
-# grops grotty grodvi: libdriver
-# refer lookbib indxbib lkbib: libbib
-# $(LIBDIRS) $(PROGDIRS): include
-
-.PHONY: $(ALLDIRS) dot $(TARGETS) FORCE
-
-# Create a Makefile in $(subdir).  This is useful for development since it
-# avoids running make recursively.
-subdir_Makefile: Makefile.cfg
-       $(MAKE) do=Makefile $(subdir)
-
-Makefile.cfg: Makefile
-       >Makefile.cfg
-       for var in $(MDEFINES); do \
-         echo "$$var" >>Makefile.cfg; \
-       done
-
-Makefile: Makefile.in
-       $(SHELL) config.status
-
-.PHONY: install
-install:
-       -test -d $(DESTDIR)$(prefix) \
-         || $(mkinstalldirs) $(DESTDIR)$(prefix)
-       @$(ENVSETUP); $(MAKE) $(MAKE_K_FLAG) $(MDEFINES) \
-         do=do_install $(dodirs)
-       cd $(DESTDIR)$(dataprogramdir); \
-         rm -f current; \
-         $(LN_S) $(version)$(revision) current
-
-.PHONY: uninstall
-uninstall: uninstall_sub uninstall_dirs
-
-.PHONY: uninstall_dirs
-# Use `rmdir' here so that the directories are only removed if they are empty.
-uninstall_dirs:
-       rm -f $(DESTDIR)$(dataprogramdir)/current
-       -rmdir \
-         $(DESTDIR)$(man1dir) \
-         $(DESTDIR)$(man5dir) \
-         $(DESTDIR)$(man7dir) \
-         $(DESTDIR)$(manroot) \
-         $(DESTDIR)$(tmacdir) \
-         $(DESTDIR)$(systemtmacdir) \
-         $(DESTDIR)$(localtmacdir) \
-         $(DESTDIR)$(fontdir) \
-         $(DESTDIR)$(localfontdir) \
-         $(DESTDIR)$(oldfontdir) \
-         $(DESTDIR)$(bindir) \
-         $(DESTDIR)$(datasubdir) \
-         $(DESTDIR)$(dataprogramdir) \
-         $(DESTDIR)$(libprogramdir) \
-         $(DESTDIR)$(libdir) \
-         $(DESTDIR)$(infodir) \
-         $(DESTDIR)$(exampledir) \
-         $(DESTDIR)$(htmldocdir) \
-         $(DESTDIR)$(pdfdocdir) \
-         $(DESTDIR)$(docdir) \
-         $(DESTDIR)$(datadir)/doc/groff \
-         $(DESTDIR)$(datadir)/doc \
-         $(DESTDIR)$(datadir) 2>/dev/null || :
-
-.PHONY: check
-check:
-       @echo There is no validation suite for this package.
-
-#check: site.exp docheck
-#.PHONY: docheck
-
-#docheck:
-#      if $(SHELL) -c "runtest --version" > /dev/null 2>&1; then \
-#        runtest; \
-#      else \
-#        echo "WARNING: could not find \`runtest'" 1>&2; \
-#      fi
-
-# This snippet has been taken from the automake package.
-
-#site.exp:
-#      @echo "Making a new site.exp file..."
-#      @echo "## these variables are automatically generated by make ##" >site.tmp
-#      @echo "# Do not edit here.  If you wish to override these values" >>site.tmp
-#      @echo "# edit the last section" >>site.tmp
-#      @echo "set tool groff" >>site.tmp
-#      @echo "set srcdir $(srcdir)/testsuite" >>site.tmp
-#      @echo "set objdir `pwd`" >> site.tmp
-#      @echo "## All variables above are generated by configure.  Do not edit! ##" >> site.tmp
-#      @test ! -f site.exp \
-#        || sed '1,/^## All variables above are.*##/ d' site.exp >> site.tmp
-#      @rm -f site.bak
-#      @test ! -f site.exp || mv site.exp site.bak
-#      @mv site.tmp site.exp
-
-FORCE:
 
-.NOEXPORT:
+uninstall-local: uninstall_indxbib
+uninstall_indxbib:
+       rm -f $(DESTDIR)$(common_words_file)
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+src/utils/lkbib/lkbib.$(OBJEXT): defs.h
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+
+dist-hook: tmac-dist-hook
+tmac-dist-hook:
+       chmod u+w $(distdir)/tmac
+       for f in $(TMACMDOCFILES) $(TMACSTRIPFILES); do \
+         cp -f $(top_srcdir)/$$f-u $(distdir)/tmac; \
+       done
+
+$(TMACMDOCFILES) $(TMACSTRIPFILES): 
+       $(MKDIR_P) $(top_builddir)/tmac
+       for f in $(TMACMDOCFILES) $(TMACSTRIPFILES); do \
+          sed -f $(tmac_srcdir)/strip.sed $(top_srcdir)/$$f-u > $(top_builddir)/$$f; \
+       done
+
+tmac/www.tmac: tmac/www.tmac.in
+       $(MKDIR_P) $(top_builddir)/tmac
+       sed -e "s;[@]PNMTOPS_NOSETPAGE[@];$(pnmtops_nosetpage);g" \
+         $(tmac_srcdir)/www.tmac.in > $(top_builddir)/tmac/www.tmac
+
+# The installation of groff compatibility wrappers for vendor-provided
+# non-GNU macro sets is controlled by 'compatibility_wrappers' (see the
+# commentary surrounding m4/groff.m4's
+# GROFF_WITH_COMPATIBILITY_WRAPPERS).  Collision detection variables of
+# the form 'tmac_<macro>_prefix' are defined in Makefile.am, to assist
+# in the installation of groff-provided macro sets.
+#
+# When 'compatibility_wrappers' is 'no', one step is performed:
+#   - the groff-provided macro set implementations are installed in
+#     <prefix>/share/groff/<version>/tmac/ with the original macro set
+#     name
+#
+# When 'compatibility_wrappers' is 'yes', two steps are performed:
+#   - the groff-provided macro set implementations are installed in
+#     <prefix>/share/groff/<version>/tmac/ with a prefix of
+#     $(tmac_prefix) (which is usually 'g', via the appropriate
+#     collision detection variable)
+#   - the generated compatibility wrappers are installed in
+#     <prefix>/lib/groff/site-tmac, with the original macro set name
+#
+# When 'compatibility_wrappers' is 'manual', two steps are performed:
+#   - the groff-provided macro set implementations are installed in
+#     <prefix>/share/groff/<version>/tmac/ with the original macro set
+#     name
+#   - the generated compatibility wrappers are installed in
+#     <prefix>/lib/groff/site-tmac, with a name of
+#     <macro><wrapper_suffix>, (which is usually '-os', see
+#     'wrapper_suffix_default' in Makefile.am)
+
+all: tmac/stamp-wrap
+
+# Generate groff compatibility wrappers for all non-GNU OS provided
+# macro sets.
+tmac/stamp-wrap:
+       $(MKDIR_P) $(top_builddir)/tmac;
+       if test -n "$(tmac_wrap)"; then \
+         for m in ""$(tmac_wrap); do \
+           $(RM) $(top_builddir)/tmac/$$m-wrap; \
+           if test "$$m" = an; then \
+             echo .do mso andoc.tmac >>$(top_builddir)/tmac/$$m-wrap; \
+           fi; \
+           echo .cp 1 >>$(top_builddir)/tmac/$$m-wrap; \
+           echo .so $(sys_tmac_prefix)$$m >>$(top_builddir)/tmac/$$m-wrap; \
+         done; \
+       fi
+       touch $@
+
+# Install groff compatibility wrappers into
+# <prefix>/lib/groff/site-tmac.
+install-data-local: install_tmac_wrap
+install_tmac_wrap:
+       $(MKDIR_P) $(DESTDIR)$(systemtmacdir);
+       if test "$(compatibility_wrappers)" != "no"; then \
+         if test -n "$(tmac_wrap)"; then \
+           for m in ""$(tmac_wrap); do \
+             $(INSTALL_DATA) $(tmac_builddir)/$$m-wrap \
+                $(DESTDIR)$(systemtmacdir)/$$m$(wrapper_suffix).tmac; \
+           done; \
+         fi; \
+       fi
+
+# Rename the groff implementations of colliding macro sets to have a
+# prefix.
+install-data-hook: install_tmac_wrap_hook
+install_tmac_wrap_hook:
+       if test "$(compatibility_wrappers)" = "yes"; then \
+         if test -n "$(tmac_wrap)"; then \
+           if test -f $(DESTDIR)$(tmacdir)/s.tmac -a -n "$(tmac_s_prefix)"; \
+           then \
+             mv $(DESTDIR)$(tmacdir)/s.tmac \
+                $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac; \
+           fi; \
+           if test -f $(DESTDIR)$(tmacdir)/an.tmac -a -n "$(tmac_an_prefix)"; \
+           then \
+             mv $(DESTDIR)$(tmacdir)/an.tmac \
+                $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac; \
+           fi; \
+         fi; \
+       fi
+
+# Uninstall groff compatibility wrappers & renamed groff implementation
+# macro sets.
+uninstall_groffdirs: uninstall_tmac_hook
+uninstall_tmac_hook:
+       if test -n "$(tmac_wrap)"; then \
+         if test "$(compatibility_wrappers)" != "no"; then \
+           for m in ""$(tmac_wrap); do \
+             $(RM) $(DESTDIR)$(systemtmacdir)/$$m$(wrapper_suffix).tmac; \
+           done; \
+         fi; \
+         $(RM) -f $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac; \
+         $(RM) -f $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac; \
+       fi
+       if test -d $(DESTDIR)$(mdocdir); then \
+         rmdir $(DESTDIR)$(mdocdir); \
+       fi
+       if test -d $(DESTDIR)$(tmacdir); then \
+         rmdir $(DESTDIR)$(tmacdir); \
+       fi
+       if test -d $(DESTDIR)$(localtmacdir); then \
+         rmdir $(DESTDIR)$(localtmacdir); \
+       fi
 
 ########################################################################
-# Emacs settings
+# Editor settings
 ########################################################################
 #
 # Local Variables:
-# mode: makefile
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
+
+# if there is a name prefix we install the man pages by hand
+all: generate_man_files
+install-data-hook: install-prefix-man
+uninstall-hook: uninstall-prefix-man
+@USEPROGRAMPREFIX_TRUE@generate_man_files: $(PREFIXMAN1)
+@USEPROGRAMPREFIX_TRUE@install-prefix-man:
+@USEPROGRAMPREFIX_TRUE@        for f in $(PREFIXMAN1); do \
+@USEPROGRAMPREFIX_TRUE@          cp -f $$f $(DESTDIR)$(man1dir)/$(NAMEPREFIX)`basename $$f`; \
+@USEPROGRAMPREFIX_TRUE@        done
+@USEPROGRAMPREFIX_TRUE@uninstall-prefix-man:
+@USEPROGRAMPREFIX_TRUE@        for f in $(PREFIXMAN1); do \
+@USEPROGRAMPREFIX_TRUE@          rm -f $(DESTDIR)$(man1dir)/$(NAMEPREFIX)`basename $$f`; \
+@USEPROGRAMPREFIX_TRUE@        done
+@USEPROGRAMPREFIX_FALSE@install-prefix-man:
+@USEPROGRAMPREFIX_FALSE@uninstall-prefix-man:
+@USEPROGRAMPREFIX_FALSE@generate_man_files:
+
+# Hook to create the 'current' symlink
+install-data-hook: create_current_symlink
+create_current_symlink:
+       cd $(DESTDIR)$(dataprogramdir); \
+         rm -f current; \
+         $(LN_S) $(SHORT_VERSION) current
+
+# Hook to move the binaries that potentially have a prefix from
+# prefixexecbindir to bindir.
+install-exec-hook: move_binaries_with_prefix
+move_binaries_with_prefix:
+@USEPROGRAMPREFIX_TRUE@        if test -n "$(NAMEPREFIX)"; then \
+@USEPROGRAMPREFIX_TRUE@           for f in $(prefixexecbin_PROGRAMS) $(prefixexecbin_SCRIPTS); do \
+@USEPROGRAMPREFIX_TRUE@              mv -f $(DESTDIR)$(prefixexecbindir)/$$f$(EXEEXT) \
+@USEPROGRAMPREFIX_TRUE@                 $(DESTDIR)$(bindir)/$(NAMEPREFIX)$$f$(EXEEXT); \
+@USEPROGRAMPREFIX_TRUE@           done \
+@USEPROGRAMPREFIX_TRUE@        fi
+
+# Always create the site-font directory as a guide to the user.
+install-data-hook: install_site_font
+install_site_font:
+       -test -d $(DESTDIR)$(localfontdir) \
+         || $(mkinstalldirs) $(DESTDIR)$(localfontdir)
+
+# Create systemtmacdir if not present
+install-data-hook: install_tmacdir
+install_tmacdir:
+       -test -d $(DESTDIR)$(systemtmacdir) \
+         || $(mkinstalldirs) $(DESTDIR)$(systemtmacdir)
+
+# directories specific to groff
+uninstall-hook: uninstall_groffdirs
+uninstall_groffdirs:
+       if test -d $(DESTDIR)$(datasubdir); then \
+         rm -rf $(DESTDIR)$(fontdir); \
+         rm -rf $(DESTDIR)$(oldfontdir); \
+         rmdir $(DESTDIR)$(datasubdir); \
+       fi
+       if test -d $(DESTDIR)$(dataprogramdir); then \
+         if test -h $(DESTDIR)$(dataprogramdir)/current; then \
+           rm -f $(DESTDIR)$(dataprogramdir)/current; \
+         fi; \
+         if test -d $(DESTDIR)$(localfontdir); then \
+           rm -f $(DESTDIR)$(localfontdir)/*; \
+           rmdir $(DESTDIR)$(localfontdir); \
+         fi; \
+         rmdir $(DESTDIR)$(dataprogramdir); \
+       fi
+       if test -d $(DESTDIR)$(grog_dir); then \
+         rmdir $(DESTDIR)$(grog_dir); \
+       fi
+       if test -d $(DESTDIR)$(libprogramdir); then \
+         if test -d $(DESTDIR)$(systemtmacdir); then \
+           rm -f $(DESTDIR)$(systemtmacdir)/*; \
+           rmdir $(DESTDIR)$(systemtmacdir); \
+         fi; \
+         rmdir $(DESTDIR)$(libprogramdir); \
+       fi
+       if test -d $(DESTDIR)$(docdir); then \
+         if test -d $(DESTDIR)$(exampledir); then \
+           rmdir $(DESTDIR)$(exampledir); \
+         fi; \
+         if test -d $(DESTDIR)$(htmldocdir); then \
+           rmdir $(DESTDIR)$(htmldocdir); \
+         fi; \
+         rmdir $(DESTDIR)$(docdir); \
+       fi
+
+# Uninstall program that have a 'g' prefix
+uninstall-hook: uninstall_binaries_with_prefix
+uninstall_binaries_with_prefix:
+@USEPROGRAMPREFIX_TRUE@        if test -n "$(NAMEPREFIX)"; then \
+@USEPROGRAMPREFIX_TRUE@           for f in $(prefixexecbin_PROGRAMS) $(prefixexecbin_SCRIPTS); do \
+@USEPROGRAMPREFIX_TRUE@              rm -f $(DESTDIR)$(bindir)/$(NAMEPREFIX)$$f$(EXEEXT); \
+@USEPROGRAMPREFIX_TRUE@           done; \
+@USEPROGRAMPREFIX_TRUE@        fi
+.man:
+       $(AM_V_GEN)rm -f $@ \
+       && $(MKDIR_P) `dirname $@` \
+       && LC_ALL=C \
+        sed -e "s|[@]APPRESDIR[@]|`echo $(appresdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]BINDIR[@]|`echo $(bindir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]COMMON_WORDS_FILE[@]|`echo $(common_words_file) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]DATASUBDIR[@]|`echo $(datasubdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]DEFAULT_INDEX[@]|`echo $(indexdir)/$(indexname) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]DEFAULT_INDEX_NAME[@]|`echo $(indexname) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]DEVICE[@]|$(DEVICE)|g" \
+            -e "s|[@]DOCDIR[@]|`echo $(docdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]EXAMPLEDIR[@]|`echo $(exampledir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]FONTDIR[@]|`echo $(fontdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]g[@]|$(g)|g" \
+            -e "s![@]G[@]!`echo $(g) | tr '[a-z]' '[A-Z]'`!g" \
+            -e "s|[@]HTMLDOCDIR[@]|`echo $(htmldocdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]INDEX_SUFFIX[@]|$(indexext)|g" \
+            -e "s|[@]LEGACYFONTDIR[@]|`echo $(legacyfontdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]LOCALFONTDIR[@]|`echo $(localfontdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]LOCALMACRODIR[@]|`echo $(localtmacdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]MACRODIR[@]|`echo $(tmacdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]MAN1EXT[@]|$(man1ext)|g" \
+            -e "s|[@]MAN5EXT[@]|$(man5ext)|g" \
+            -e "s|[@]MAN7EXT[@]|$(man7ext)|g" \
+            -e "s|[@]MDATE[@]|`$(PERL) $(top_srcdir)/mdate.pl $<`|g" \
+            -e "s|[@]OLDFONTDIR[@]|`echo $(oldfontdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]PDFDOCDIR[@]|`echo $(pdfdocdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]SYSTEMMACRODIR[@]|`echo $(systemtmacdir) | sed -f $(makevarescape)`|g" \
+            -e "s|[@]TMAC_AN_PREFIX[@]|$(tmac_an_prefix)|g" \
+            -e "s|[@]TMAC_M_PREFIX[@]|$(tmac_m_prefix)|g" \
+            -e "s|[@]TMAC_MDIR[@]|$(tmacdir)/mm|g" \
+            -e "s|[@]TMAC_S_PREFIX[@]|$(tmac_s_prefix)|g" \
+            -e "s|[@]VERSION[@]|$(VERSION)|g" \
+            $< \
+            >$@
+$(top_srcdir)/.version:
+       echo $(VERSION) > $@-t && mv $@-t $@
+dist-hook:
+       echo $(VERSION) > $(distdir)/.tarball-version
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
 # End:
+
+# Tell versions [3.59,3.63) of GNU make to not export all variables.
+# Otherwise a system limit (for SysV at least) may be exceeded.
+.NOEXPORT:
diff --git a/Makefile.init b/Makefile.init
deleted file mode 100644 (file)
index 05ef002..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.init
-#
-SHELL=/bin/sh
-
-.PHONY: all
-all:
-       $(SHELL) configure
-       $(MAKE) all
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/Makefile.lib b/Makefile.lib
deleted file mode 100644 (file)
index 221537e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.lib
-#
-LIBCLEAN=lib$(LIB).$(LIBEXT)
-MAKEFILEPARTS=\
-  $(top_srcdir)/Makefile.comm \
-  $(top_builddir)/Makefile.cfg \
-  $(srcdir)/Makefile.sub \
-  $(top_srcdir)/Makefile.lib \
-  Makefile.dep
-
-all: lib$(LIB).$(LIBEXT)
-
-lib$(LIB).$(LIBEXT): $(OBJS)
-       $(AR) r $@ $?
-       $(RANLIB) $@
-
-depend: depend_src
-depend.temp: $(GENSRCS)
-TAGS: $(CCSRCS) $(CSRCS)
-Makefile: $(MAKEFILEPARTS)
-Makefile.dep:
-       touch Makefile.dep
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/Makefile.man b/Makefile.man
deleted file mode 100644 (file)
index 8761dab..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# Copyright (C) 1992-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.man
-#
-all: $(MANPAGES)
-install_data: install_man
-install_man: $(MANPAGES)
-uninstall_sub: uninstall_man
-$(top_builddir)/stamp-h $(MANPAGES): $(top_srcdir)/VERSION \
-               $(top_srcdir)/REVISION
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/Makefile.sub b/Makefile.sub
deleted file mode 100644 (file)
index 9d6b193..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-DISTCLEANFILES=\
-  Makefile \
-  config.cache \
-  config.log \
-  config.status \
-  groff.log \
-  groff.sum \
-  src/include/config.h \
-  site.bak \
-  site.exp \
-  stamp-h \
-  test-groff
-
-MOSTLYCLEANADD=\
-  Makefile.cfg \
-  conftest*
-
-M4MACROS=\
-  $(srcdir)/m4/ax_compare_version.m4 \
-  $(srcdir)/m4/ax_prog_perl_version.m4 \
-  $(srcdir)/m4/codeset.m4 \
-  $(srcdir)/m4/fcntl-o.m4 \
-  $(srcdir)/m4/glibc21.m4 \
-  $(srcdir)/m4/groff.m4 \
-  $(srcdir)/m4/iconv.m4 \
-  $(srcdir)/m4/lib-ld.m4 \
-  $(srcdir)/m4/lib-link.m4 \
-  $(srcdir)/m4/lib-prefix.m4 \
-  $(srcdir)/m4/localcharset.m4
-
-distfiles: configure
-
-$(srcdir)/configure: configure.ac $(srcdir)/aclocal.m4
-       cd $(srcdir) && autoconf && rm -rf autom4te.cache
-
-$(srcdir)/aclocal.m4: $(M4MACROS)
-       cd $(srcdir) && aclocal -I m4
-
-config.status: configure
-       $(SHELL) config.status --recheck
-
-# autoheader might not change config.hin, so touch a stamp file.
-$(srcdir)/config.hin: stamp-h.in
-$(srcdir)/stamp-h.in: configure.ac $(srcdir)/aclocal.m4
-       cd $(srcdir) && autoheader
-       echo timestamp > $(srcdir)/stamp-h.in
-
-config.h: stamp-h
-stamp-h: config.hin config.status
-       $(SHELL) config.status
-
-# Always create the site-font directory as a guide to the user.
-install_data:
-       -test -d $(DESTDIR)$(localfontdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(localfontdir)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/NEWS b/NEWS
index eeb4090610c20633cfd128f587fbf9f7fd7ee2bd..1adb2a1006defa69d8eef906d99ff14600f49e7c 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -1,4 +1,4 @@
-    Copyright (C) 1992-2014 Free Software Foundation, Inc.
+    Copyright (C) 1992-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -7,6 +7,86 @@
 This file describes recent user-visible changes in groff.  Bug fixes are not
 described.  There are more details in the man and info pages.
 
+
+VERSION 1.22.4
+==============
+
+Troff
+-----
+
+o The `hy' request has been extended.  Value 16 enables hyphenation before
+  the last character, and value 32 enables hyphenation after the first
+  character.
+
+
+PDFPIC
+------
+
+o PDFPIC has been corrected so the behaviour is the same whether you use the
+  PostScript or PDF drivers.  However, this means that any documents which
+  were written using the old behaviour will not be rendered correctly if
+  using the PDF driver with the new version.
+
+  The change would mean that documents which relied on the previous
+  behaviour are likely to have a gap underneath the image which was not
+  there before.  If you see this effect there are three ways you can restore
+  the previous behaviour:
+
+  Add the line ".nr PDFPIC_NOSPACE 1" to the document before the first call
+  to .PDFPIC.
+
+  If it is just a single document which exhibits this behaviour you can run
+  groff adding "-rPDFPIC_NOSPACE=1" to the command line.
+
+  If you have many documents which rely on the previous behaviour you can
+  set an environment variable "export GROFF_PDFPIC_NOSPACE=1" which will
+  restore the previous behaviour for all runs.
+
+  Note that this change has no effect if you were using .PDFPIC with the
+  PostScript driver--only if you used it with the PDF driver.
+
+
+Gropdf
+------
+
+o Type 1 font loading is fixed to handle newer Ghostscript versions.
+
+o Handling of glyphs above position 255 is improved to allow many more
+  glyphs to be used.
+
+o New macros .pdftransition and .pdfpause are introduced to allow creation
+  of presentation slides.  Partially backward-compatible with present.tmac,
+  specifically the PAUSE, BLOCKS and BLOCKE commands.  Supports all the
+  transition types introduced in PDF v1.5 (see the gropdf man page).
+
+
+Miscellaneous
+-------------
+
+o A new 'configure' option --with-compatibility-wrappers controls how groff
+  compatibility wrappers for vendor-provided non-GNU macro sets are
+  installed (see ./configure --help).
+
+o eqn2graph, grap2graph, and pic2graph now attempt to adapt to very old
+  installed versions of the ImageMagick and GraphicsMagick programs
+  "convert".  They search the output of convert's "-help" option, and use
+  "-trim" if that string is found; otherwise, the old "-crop 0x0" method
+  (which produces incompatible results on versions that _do_ support
+  "-trim") is used.  The programs emit a warning to standard error if the
+  search fails and the old method is used.
+
+o eqn2graph no longer supports the "-unsafe" option.  It did nothing.
+
+o groffer now supports the output of XHTML.  Use the "--xhtml" or
+  "--mode=xhtml" command-line options to generate it.
+
+o Much work has been done, and is ongoing, to make groff's man pages better
+  examples for man page writers to follow.  groff_man(7) itself has been
+  expanded and largely rewritten to more precisely document the macro
+  package's behavior and to be more helpful and accessible to man page
+  writers who may never read any other groff documentation.
+
+
 VERSION 1.22.3
 ==============
 
@@ -48,7 +128,7 @@ Gpinyin
 -------
 
 o Another preprocessor from Bernd Warken to pretty-print Pinyin syllables
-  like `guo2wang2' as `guówáng'.
+  like `guo2wang2' as `guówáng'.
 
 
 Pdfroff
@@ -72,8 +152,11 @@ o The pdfroff utility script now activates its `--no-toc-relocation' option
 Macro Packages
 --------------
 
+o New default values for hyphenation.  The previous values were too strict,
+  suppressing some hyphenation points unnecessarily.
+
 o The -mom macro package now has full support for eqn, pic, and tbl, as well
-  as captioning and labelling of pdf images and preprocessor output.  Lists
+  as captioning and labelling of PDF images and preprocessor output.  Lists
   of Figures, Equations, and Tables can now be autogenerated.  PDF_IMAGE has
   a new FRAME option.
 
@@ -1243,7 +1326,7 @@ o The escapes `\%', `\&', `\)', and `\:' no longer cause an error in \X;
   single space characters.
 
 o The default tab distance in nroff mode is now 0.8i to be compatible
-  with UNIX troff.
+  with Unix troff.
 
 o Using the latin-1 input character 0xAD (soft hyphen) for the `shc'
   request was a bad idea.  Instead, it is now translated to `\%', and
@@ -1283,7 +1366,7 @@ o The PSPIC macro has been extended to work with DVI output (`pspic.tmac' is
 o The trace.tmac package now traces calls to `am' also.  Additionally, it
   works in compatibility mode.
 
-o `troff.1' has been split.  Differences to UNIX troff are now documented
+o `troff.1' has been split.  Differences to Unix troff are now documented
   in the new man page `groff_diff.7'.
 
 o `groff_mwww.7' has been renamed to `groff_www.7'.  The file mwww.tmac
@@ -1377,8 +1460,8 @@ Eqn2graph
 ---------
 
 o A new script contributed by Eric S. Raymond <esr@thyrsus.com>.  It
-  converts an EQN diagram into a cropped image.  Since it uses gs and the PNM
-  library, virtually all graphics formats are available for output.
+  converts an EQN diagram into a cropped image.  Since it uses gs and the
+  PNM library, virtually all graphics formats are available for output.
 
 Groffer
 -------
@@ -1600,6 +1683,8 @@ o The mdoc package has been completely rewritten, using the full power of
 
   Great care has been taken to assure backwards compatibility.  If you
   encounter any abnormal results, please report them to bug-groff@gnu.org.
+  [2018 UPDATE: This address no longer accepts bug reports; please use the
+  GNU Savannah bug tracker at http://savannah.gnu.org/bugs/?group=groff.]
 
 o A new command line option for the `man' macros (similar to the `mdoc'
   package) has been implemented: `-rcR=1' (now the default in nroff mode)
@@ -1956,9 +2041,9 @@ configure script).
 Documentation
 -------------
 
-Three new man pages are available: groff_tmac.5 (documenting how troff macros
-are accessed and where they are found), groff.7 (a short reference of the GNU
-roff language), and roff.7 (a general survey on GNU troff).
+Three new man pages are available: groff_tmac.5 (documenting how troff
+macros are accessed and where they are found), groff.7 (a short reference of
+the GNU roff language), and roff.7 (a general survey on GNU troff).
 
 Miscellaneous
 -------------
@@ -1980,10 +2065,10 @@ Bug fixes only; no user-visible changes.
 VERSION 1.12
 ============
 
-Finally, there are new maintainers for groff.  Mailing lists and a development
-repository are available also. See the file README for details.  Not all
-reported bugs could be fixed, so please send mails again if something is
-still not working.
+Finally, there are new maintainers for groff.  Mailing lists and a
+development repository are available also. See the file README for details.
+Not all reported bugs could be fixed, so please send mails again if
+something is still not working.
 
 Most of the installation problems should have vanished now (most
 notably the $(tmac_wrap) bug).
@@ -2715,8 +2800,8 @@ containing the hyphenation patterns.
 
 There is a `\C'xxx'' escape sequence equivalent to `\[xxx]'.
 
-Characters ", ', ), ], *, \(dg are now initially transparent for the purposes
-of end of sentence recognition.
+Characters ", ', ), ], *, \(dg are now initially transparent for the
+purposes of end of sentence recognition.
 
 There is an anti-recursion feature in the `char' request, so you can
 say `.char \(bu \s+2\(bu\s-2'.
@@ -2796,5 +2881,7 @@ definitions.
 Local Variables:
 version-control: never
 coding: latin-1
+fill-column: 76
 mode: text
 End:
+# vim: set autoindent textwidth=76:
index 4bc0aeb98a3ce6ed20597dfea14741a874553aa6..8710a125d288c973c289950f2809798f2b321be8 100644 (file)
--- a/PROBLEMS
+++ b/PROBLEMS
@@ -1,4 +1,4 @@
-    Copyright 1989-2014 Free Software Foundation, Inc.
+    Copyright 1989-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -965,6 +965,53 @@ Use
 
   ./configure CXX=g++-4.2
 
+----------------------------------------------------------------------
+
+* When compiling on NetBSD, make issues warnings like
+
+  Warning: line 28: Unable to locate font(s)
+  URWGothicL-Demi,a010015l.pfb on the given path(s)
+
+  and
+
+  Warning: line 77: Failed to create groff font 'U-AB' by running
+  afmtodit
+
+In this case install the package "urw-fonts":
+
+  pkgin install urw-fonts
+
+and make the font path known to ghostscript, e.g. with (ksh):
+
+  export GS_LIB=/usr/pkg/share/fonts/urw
+
+----------------------------------------------------------------------
+
+* Currently (December 2015) building groff fails on NetBSD and
+  FreeBSD with the message:
+
+  make[1]: don't know how to make contrib/chem/chem.1. Stop
+
+The reason is a bug in the make(1) tool used on those systems related
+to .SUFFIXES lines.
+
+A temporary workaround is to change the Makefile line
+
+  .SUFFIXES: .roff .in .ps .mom .pdf .me .ms .ps .html .txt .texi \
+    .dvi .pdf .xhtml .man .c .cpp .log .o .obj .sed .sin \
+    .test .test$(EXEEXT) .trs .ypp
+
+into
+
+  .SUFFIXES: .man .roff .in .ps .mom .pdf .me .ms .ps .html .txt \
+    .texi .dvi .pdf .xhtml .c .cpp .log .o .obj .sed .sin \
+    .test .test$(EXEEXT) .trs .ypp
+
+(put .man at begin of the list).
+
+The bug is reported to the maintainer of the make(1) tool of those
+systems.
+
 ##### Emacs settings
 Local Variables:
 mode: text
index df6357b19e05ae5273589eb4a0c6a316220e449c..98f2fa7ed895a69d90863ffde4c4af496a78828f 100644 (file)
--- a/PROJECTS
+++ b/PROJECTS
@@ -1,4 +1,4 @@
-# Copyright (C) 1999-2014 Free Software Foundation, Inc.
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
 #
 # This file is part of `groffer' which is part of `groff'.
 #
@@ -13,7 +13,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see
+# along with this program.  If not, see
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 Here are some things that would be useful additions to groff:
@@ -40,7 +40,7 @@ Here are some things that would be useful additions to groff:
   (like pm and -mpm)
 
 If you want to work on one of these, you should probably post to
-gnu.groff.bug (or send email to bug-groff@gnu.org) to see if anyone else
+gnu.groff.bug (or send email to groff@gnu.org) to see if anyone else
 has gotten there first.
 
 
diff --git a/README b/README
index 951fedb0e83267bfe9b113e33fc7ccde0c05d71e..44fa8a6829399d7060fb898a7dbd6bae98d170f3 100644 (file)
--- a/README
+++ b/README
@@ -1,4 +1,4 @@
-    Copyright (C) 1989-2014 Free Software Foundation, Inc.
+    Copyright (C) 1989-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without
     modification, are permitted in any medium without royalty provided
@@ -78,10 +78,6 @@ Additionally, producing `PDF' output directly with the `gropdf' device needs
 a working installation of `perl'.  The same is true for some other
 preprocessors like `chem'.
 
-In Linux Debian, the installation of `texinfo' is dangerous.  For it
-creates a file `install-info' that blocks the system installation.  So
-the created `/usr/local/bin/install-info' must be renamed.
-
 The `groff' configure script searches for the X11 headers and
 libraries `Xaw' and `Xmu'.  So the corresponding developer packages of
 your system must be installed, otherwise `groff' does not install
@@ -93,18 +89,16 @@ page at
 
   https://savannah.gnu.org/projects/groff
 
-Alternatively, but less preferable, you may use the form in the file
-`BUG-REPORT'; the idea of this is to make sure that FSF has all the
-information it needs to fix the bug.  At the very least, read the
-`BUG-REPORT' form and make sure that you supply all the information
-that it asks for.  Even if you are not sure that something is a bug,
-report it using `BUG-REPORT': this enables us to determine whether it
-really is a bug or not.
+You may use the form in the file `BUG-REPORT'; the idea of this is to
+make sure that FSF has all the information it needs to fix the bug.
+At the very least, read the `BUG-REPORT' form and make sure that you
+supply all the information that it asks for.  Even if you are not sure
+that something is a bug, report it: this enables us to determine whether
+it really is a bug.
 
 Three mailing lists are available:
 
-  bug-groff@gnu.org          for reporting bugs and following bug
-                             reports
+  bug-groff@gnu.org          for following bug reports
   groff@gnu.org              for general discussion of groff
   groff-commit@gnu.org       a read-only list to follow commits
                              to the git repository
@@ -121,9 +115,7 @@ Alternatively, you may subscribe by visiting the web pages at
 Each of these web pages also provides a link to a browseable archive of
 postings to the corresponding mailing list.
 
-GNU `groff' was written by James Clark <jjc@jclark.com>.  It is now
-maintained by Ted Harding <ted.harding@nessie.mcc.ac.uk> and Werner
-Lemberg <wl@gnu.org>.
+GNU `groff' was written by James Clark <jjc@jclark.com>.
 
 
 ##### Emacs settings
index 107fee7fc80d7a693bce7c0904e1360e2ff83386..2cbc35ea1c6f4266ab560ae0cc989c000196399c 100644 (file)
@@ -1,4 +1,4 @@
-    Copyright (C) 2003-2014 Free Software Foundation, Inc.
+    Copyright (C) 2003-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -31,7 +31,7 @@
   MinGW.
 
   Additionally, if you wish to compile groff with support for its HTML (and
-  XHTML) output capability, some additional tools are required as decribed in
+  XHTML) output capability, some additional tools are required as described in
   the section PREREQUISITES FOR HTML OUTPUT later in this file.
 
 
   In the case of building with MinGW, the default behaviour of configure is
   not appropriate for the following reasons.
 
-  o The MSYS environment creates a virtual UNIX-like file system, with its
+  o The MSYS environment creates a virtual Unix-like file system, with its
     root mapped to the actual MS-Windows directory where MSYS itself is
     installed; /usr is also mapped to this MSYS installation directory.
 
 
   o Knowledge of the MSYS virtual file system is not imparted to groff; it
     expects the compiled-in path to its components to be a fully qualified
-    MS-Windows path name (although UNIX-style slashes are permitted, and
+    MS-Windows path name (although Unix-style slashes are permitted, and
     preferred to the MS-Windows style backslashes, to demarcate the directory
     hierarchy).  Thus, when configuring groff, if
     --prefix=<win32-install-path> is not correctly specified, then the
     ./configure --prefix=D:/MSYS/1.0/local ...
 
   Note that the backslash characters, which appear in the native MS-Windows
-  form of the path name, are replaced by UNIX-style slashes in the argument to
+  form of the path name, are replaced by Unix-style slashes in the argument to
   configure; this is the preferred syntax.
 
   Also note that the MS-Windows device designator (D: in this instance) is
   -------------------------
 
   The runtime environment, provided to groff by MSYS, is essentially the same
-  as would be provided under a UNIX or GNU/Linux operating system; thus, any
+  as would be provided under a Unix or GNU/Linux operating system; thus, any
   environment variables which may be used to customize the groff runtime
-  environment have similar effects under MSYS, as they would in UNIX or
+  environment have similar effects under MSYS, as they would in Unix or
   GNU/Linux, with the exception that any variable specifying a path should
   adopt the same syntax as a native MS-Windows PATH specification.
 
   creating temporary files.  When these conditions arise, groff fails with a
   `permission denied' error, as soon as it tries to create any temporary file.
 
-  To specify the location for creating temporary files, the standard UNIX or
+  To specify the location for creating temporary files, the standard Unix or
   GNU/Linux implementation of groff provides the GROFF_TMPDIR or TMPDIR
   environment variables, whereas MS-Windows applications generally use TMP or
   TEMP; furthermore, the MS-Windows implementations of Ghostscript apparently
   ----------------
 
   There are two known issues, observed when running groff in the MinGW/MSYS
-  environment, which would not affect groff in its native UNIX environment:
+  environment, which would not affect groff in its native Unix environment:
 
   o Running groff with the working directory set to a subdirectory of a
     network share, where the user does not have write permission in the root
       cat | groff ...
 
     in which case <Ctrl-D> terminates the standard input stream, in just the
-    same way it does on a UNIX system; the cat executable provided with MSYS
+    same way it does on a Unix system; the cat executable provided with MSYS
     does seem to trap the end-of-file condition, and properly signals groff
     that the input stream has terminated.
 
diff --git a/REVISION b/REVISION
deleted file mode 100644 (file)
index 00750ed..0000000
--- a/REVISION
+++ /dev/null
@@ -1 +0,0 @@
-3
diff --git a/THANKS b/THANKS
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/TODO b/TODO
index 91697b0ceadc6cc76475bd724e8da5e7a0939bf2..b0987824f0ac84e7eb84a4cac066c5c8b090aa7e 100644 (file)
--- a/TODO
+++ b/TODO
@@ -1,4 +1,4 @@
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2018 Free Software Foundation, Inc.
 #
 # This file is part of `groffer' which is part of `groff'.
 #
@@ -13,7 +13,7 @@
 # General Public License for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see
+# along with this program.  If not, see
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 Unicode input:
diff --git a/VERSION b/VERSION
deleted file mode 100644 (file)
index 71f7f51..0000000
--- a/VERSION
+++ /dev/null
@@ -1 +0,0 @@
-1.22
diff --git a/acinclude.m4 b/acinclude.m4
new file mode 100644 (file)
index 0000000..000c5fc
--- /dev/null
@@ -0,0 +1,25 @@
+# generated automatically by aclocal 1.14 -*- Autoconf -*-
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
+# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
+# PARTICULAR PURPOSE.
+
+m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
+m4_include([m4/ax_compare_version.m4])
+m4_include([m4/ax_prog_perl_version.m4])
+m4_include([m4/codeset.m4])
+m4_include([m4/fcntl-o.m4])
+m4_include([m4/glibc21.m4])
+m4_include([m4/groff.m4])
+m4_include([m4/iconv.m4])
+m4_include([m4/lib-ld.m4])
+m4_include([m4/lib-link.m4])
+m4_include([m4/lib-prefix.m4])
+m4_include([m4/localcharset.m4])
index 77cb968a4931fec24cf6a96c359777f9b369384b..74c41d5f081e7d909b3aebc59f711177708d3aef 100644 (file)
@@ -1,6 +1,6 @@
-# generated automatically by aclocal 1.14 -*- Autoconf -*-
+# generated automatically by aclocal 1.16.1 -*- Autoconf -*-
 
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
 
 # This file is free software; the Free Software Foundation
 # gives unlimited permission to copy and/or distribute it,
 # PARTICULAR PURPOSE.
 
 m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-m4_include([m4/ax_compare_version.m4])
-m4_include([m4/ax_prog_perl_version.m4])
-m4_include([m4/codeset.m4])
-m4_include([m4/fcntl-o.m4])
-m4_include([m4/glibc21.m4])
-m4_include([m4/groff.m4])
-m4_include([m4/iconv.m4])
-m4_include([m4/lib-ld.m4])
-m4_include([m4/lib-link.m4])
-m4_include([m4/lib-prefix.m4])
-m4_include([m4/localcharset.m4])
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
+[m4_warning([this file was generated for autoconf 2.69.
+You have another version of autoconf.  It may work, but is not guaranteed to.
+If you have problems, you may need to regenerate the build system entirely.
+To do so, use the procedure documented by the package, typically 'autoreconf'.])])
+
+# pkg.m4 - Macros to locate and utilise pkg-config.   -*- Autoconf -*-
+# serial 11 (pkg-config-0.29.1)
+
+dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>.
+dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com>
+dnl
+dnl This program is free software; you can redistribute it and/or modify
+dnl it under the terms of the GNU General Public License as published by
+dnl the Free Software Foundation; either version 2 of the License, or
+dnl (at your option) any later version.
+dnl
+dnl This program is distributed in the hope that it will be useful, but
+dnl WITHOUT ANY WARRANTY; without even the implied warranty of
+dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+dnl General Public License for more details.
+dnl
+dnl You should have received a copy of the GNU General Public License
+dnl along with this program; if not, write to the Free Software
+dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA
+dnl 02111-1307, USA.
+dnl
+dnl As a special exception to the GNU General Public License, if you
+dnl distribute this file as part of a program that contains a
+dnl configuration script generated by Autoconf, you may include it under
+dnl the same distribution terms that you use for the rest of that
+dnl program.
+
+dnl PKG_PREREQ(MIN-VERSION)
+dnl -----------------------
+dnl Since: 0.29
+dnl
+dnl Verify that the version of the pkg-config macros are at least
+dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's
+dnl installed version of pkg-config, this checks the developer's version
+dnl of pkg.m4 when generating configure.
+dnl
+dnl To ensure that this macro is defined, also add:
+dnl m4_ifndef([PKG_PREREQ],
+dnl     [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])])
+dnl
+dnl See the "Since" comment for each macro you use to see what version
+dnl of the macros you require.
+m4_defun([PKG_PREREQ],
+[m4_define([PKG_MACROS_VERSION], [0.29.1])
+m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1,
+    [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])])
+])dnl PKG_PREREQ
+
+dnl PKG_PROG_PKG_CONFIG([MIN-VERSION])
+dnl ----------------------------------
+dnl Since: 0.16
+dnl
+dnl Search for the pkg-config tool and set the PKG_CONFIG variable to
+dnl first found in the path. Checks that the version of pkg-config found
+dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is
+dnl used since that's the first version where most current features of
+dnl pkg-config existed.
+AC_DEFUN([PKG_PROG_PKG_CONFIG],
+[m4_pattern_forbid([^_?PKG_[A-Z_]+$])
+m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$])
+m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$])
+AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility])
+AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path])
+AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path])
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       AC_PATH_TOOL([PKG_CONFIG], [pkg-config])
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=m4_default([$1], [0.9.0])
+       AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version])
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               AC_MSG_RESULT([yes])
+       else
+               AC_MSG_RESULT([no])
+               PKG_CONFIG=""
+       fi
+fi[]dnl
+])dnl PKG_PROG_PKG_CONFIG
+
+dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------------------------------
+dnl Since: 0.18
+dnl
+dnl Check to see whether a particular set of modules exists. Similar to
+dnl PKG_CHECK_MODULES(), but does not set variables or print errors.
+dnl
+dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+dnl only at the first occurence in configure.ac, so if the first place
+dnl it's called might be skipped (such as if it is within an "if", you
+dnl have to call PKG_CHECK_EXISTS manually
+AC_DEFUN([PKG_CHECK_EXISTS],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+if test -n "$PKG_CONFIG" && \
+    AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then
+  m4_default([$2], [:])
+m4_ifvaln([$3], [else
+  $3])dnl
+fi])
+
+dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES])
+dnl ---------------------------------------------
+dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting
+dnl pkg_failed based on the result.
+m4_define([_PKG_CONFIG],
+[if test -n "$$1"; then
+    pkg_cv_[]$1="$$1"
+ elif test -n "$PKG_CONFIG"; then
+    PKG_CHECK_EXISTS([$3],
+                     [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes ],
+                    [pkg_failed=yes])
+ else
+    pkg_failed=untried
+fi[]dnl
+])dnl _PKG_CONFIG
+
+dnl _PKG_SHORT_ERRORS_SUPPORTED
+dnl ---------------------------
+dnl Internal check to see if pkg-config supports short errors.
+AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi[]dnl
+])dnl _PKG_SHORT_ERRORS_SUPPORTED
+
+
+dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl --------------------------------------------------------------
+dnl Since: 0.4.0
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES might not happen, you should be sure to include an
+dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac
+AC_DEFUN([PKG_CHECK_MODULES],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl
+AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl
+
+pkg_failed=no
+AC_MSG_CHECKING([for $1])
+
+_PKG_CONFIG([$1][_CFLAGS], [cflags], [$2])
+_PKG_CONFIG([$1][_LIBS], [libs], [$2])
+
+m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS
+and $1[]_LIBS to avoid the need to call pkg-config.
+See the pkg-config man page for more details.])
+
+if test $pkg_failed = yes; then
+       AC_MSG_RESULT([no])
+        _PKG_SHORT_ERRORS_SUPPORTED
+        if test $_pkg_short_errors_supported = yes; then
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1`
+        else 
+               $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD
+
+       m4_default([$4], [AC_MSG_ERROR(
+[Package requirements ($2) were not met:
+
+$$1_PKG_ERRORS
+
+Consider adjusting the PKG_CONFIG_PATH environment variable if you
+installed software in a non-standard prefix.
+
+_PKG_TEXT])[]dnl
+        ])
+elif test $pkg_failed = untried; then
+       AC_MSG_RESULT([no])
+       m4_default([$4], [AC_MSG_FAILURE(
+[The pkg-config script could not be found or is too old.  Make sure it
+is in your PATH or set the PKG_CONFIG environment variable to the full
+path to pkg-config.
+
+_PKG_TEXT
+
+To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl
+        ])
+else
+       $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS
+       $1[]_LIBS=$pkg_cv_[]$1[]_LIBS
+        AC_MSG_RESULT([yes])
+       $3
+fi[]dnl
+])dnl PKG_CHECK_MODULES
+
+
+dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND],
+dnl   [ACTION-IF-NOT-FOUND])
+dnl ---------------------------------------------------------------------
+dnl Since: 0.29
+dnl
+dnl Checks for existence of MODULES and gathers its build flags with
+dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags
+dnl and VARIABLE-PREFIX_LIBS from --libs.
+dnl
+dnl Note that if there is a possibility the first call to
+dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to
+dnl include an explicit call to PKG_PROG_PKG_CONFIG in your
+dnl configure.ac.
+AC_DEFUN([PKG_CHECK_MODULES_STATIC],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+_save_PKG_CONFIG=$PKG_CONFIG
+PKG_CONFIG="$PKG_CONFIG --static"
+PKG_CHECK_MODULES($@)
+PKG_CONFIG=$_save_PKG_CONFIG[]dnl
+])dnl PKG_CHECK_MODULES_STATIC
+
+
+dnl PKG_INSTALLDIR([DIRECTORY])
+dnl -------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable pkgconfigdir as the location where a module
+dnl should install pkg-config .pc files. By default the directory is
+dnl $libdir/pkgconfig, but the default can be changed by passing
+dnl DIRECTORY. The user can override through the --with-pkgconfigdir
+dnl parameter.
+AC_DEFUN([PKG_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+    [pkg-config installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([pkgconfigdir],
+    [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],,
+    [with_pkgconfigdir=]pkg_default)
+AC_SUBST([pkgconfigdir], [$with_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_INSTALLDIR
+
+
+dnl PKG_NOARCH_INSTALLDIR([DIRECTORY])
+dnl --------------------------------
+dnl Since: 0.27
+dnl
+dnl Substitutes the variable noarch_pkgconfigdir as the location where a
+dnl module should install arch-independent pkg-config .pc files. By
+dnl default the directory is $datadir/pkgconfig, but the default can be
+dnl changed by passing DIRECTORY. The user can override through the
+dnl --with-noarch-pkgconfigdir parameter.
+AC_DEFUN([PKG_NOARCH_INSTALLDIR],
+[m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])])
+m4_pushdef([pkg_description],
+    [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@])
+AC_ARG_WITH([noarch-pkgconfigdir],
+    [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],,
+    [with_noarch_pkgconfigdir=]pkg_default)
+AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir])
+m4_popdef([pkg_default])
+m4_popdef([pkg_description])
+])dnl PKG_NOARCH_INSTALLDIR
+
+
+dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE,
+dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND])
+dnl -------------------------------------------
+dnl Since: 0.28
+dnl
+dnl Retrieves the value of the pkg-config variable for the given module.
+AC_DEFUN([PKG_CHECK_VAR],
+[AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl
+AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl
+
+_PKG_CONFIG([$1], [variable="][$3]["], [$2])
+AS_VAR_COPY([$1], [pkg_cv_][$1])
+
+AS_VAR_IF([$1], [""], [$5], [$4])dnl
+])dnl PKG_CHECK_VAR
+
+dnl PKG_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl   [ACTION-IF-FOUND],[ACTION-IF-NOT-FOUND],
+dnl   [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------
+dnl
+dnl Prepare a "--with-" configure option using the lowercase
+dnl [VARIABLE-PREFIX] name, merging the behaviour of AC_ARG_WITH and
+dnl PKG_CHECK_MODULES in a single macro.
+AC_DEFUN([PKG_WITH_MODULES],
+[
+m4_pushdef([with_arg], m4_tolower([$1]))
+
+m4_pushdef([description],
+           [m4_default([$5], [build with ]with_arg[ support])])
+
+m4_pushdef([def_arg], [m4_default([$6], [auto])])
+m4_pushdef([def_action_if_found], [AS_TR_SH([with_]with_arg)=yes])
+m4_pushdef([def_action_if_not_found], [AS_TR_SH([with_]with_arg)=no])
+
+m4_case(def_arg,
+            [yes],[m4_pushdef([with_without], [--without-]with_arg)],
+            [m4_pushdef([with_without],[--with-]with_arg)])
+
+AC_ARG_WITH(with_arg,
+     AS_HELP_STRING(with_without, description[ @<:@default=]def_arg[@:>@]),,
+    [AS_TR_SH([with_]with_arg)=def_arg])
+
+AS_CASE([$AS_TR_SH([with_]with_arg)],
+            [yes],[PKG_CHECK_MODULES([$1],[$2],$3,$4)],
+            [auto],[PKG_CHECK_MODULES([$1],[$2],
+                                        [m4_n([def_action_if_found]) $3],
+                                        [m4_n([def_action_if_not_found]) $4])])
+
+m4_popdef([with_arg])
+m4_popdef([description])
+m4_popdef([def_arg])
+
+])dnl PKG_WITH_MODULES
+
+dnl PKG_HAVE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl   [DESCRIPTION], [DEFAULT])
+dnl -----------------------------------------------
+dnl
+dnl Convenience macro to trigger AM_CONDITIONAL after PKG_WITH_MODULES
+dnl check._[VARIABLE-PREFIX] is exported as make variable.
+AC_DEFUN([PKG_HAVE_WITH_MODULES],
+[
+PKG_WITH_MODULES([$1],[$2],,,[$3],[$4])
+
+AM_CONDITIONAL([HAVE_][$1],
+               [test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"])
+])dnl PKG_HAVE_WITH_MODULES
+
+dnl PKG_HAVE_DEFINE_WITH_MODULES(VARIABLE-PREFIX, MODULES,
+dnl   [DESCRIPTION], [DEFAULT])
+dnl ------------------------------------------------------
+dnl
+dnl Convenience macro to run AM_CONDITIONAL and AC_DEFINE after
+dnl PKG_WITH_MODULES check. HAVE_[VARIABLE-PREFIX] is exported as make
+dnl and preprocessor variable.
+AC_DEFUN([PKG_HAVE_DEFINE_WITH_MODULES],
+[
+PKG_HAVE_WITH_MODULES([$1],[$2],[$3],[$4])
+
+AS_IF([test "$AS_TR_SH([with_]m4_tolower([$1]))" = "yes"],
+        [AC_DEFINE([HAVE_][$1], 1, [Enable ]m4_tolower([$1])[ support])])
+])dnl PKG_HAVE_DEFINE_WITH_MODULES
+
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_AUTOMAKE_VERSION(VERSION)
+# ----------------------------
+# Automake X.Y traces this macro to ensure aclocal.m4 has been
+# generated from the m4 files accompanying Automake X.Y.
+# (This private macro should not be called outside this file.)
+AC_DEFUN([AM_AUTOMAKE_VERSION],
+[am__api_version='1.16'
+dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
+dnl require some minimum version.  Point them to the right macro.
+m4_if([$1], [1.16.1], [],
+      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
+])
+
+# _AM_AUTOCONF_VERSION(VERSION)
+# -----------------------------
+# aclocal traces this macro to find the Autoconf version.
+# This is a private macro too.  Using m4_define simplifies
+# the logic in aclocal, which can simply ignore this definition.
+m4_define([_AM_AUTOCONF_VERSION], [])
+
+# AM_SET_CURRENT_AUTOMAKE_VERSION
+# -------------------------------
+# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
+# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
+AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
+[AM_AUTOMAKE_VERSION([1.16.1])dnl
+m4_ifndef([AC_AUTOCONF_VERSION],
+  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
+_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
+
+# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
+# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
+# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
+#
+# Of course, Automake must honor this variable whenever it calls a
+# tool from the auxiliary directory.  The problem is that $srcdir (and
+# therefore $ac_aux_dir as well) can be either absolute or relative,
+# depending on how configure is run.  This is pretty annoying, since
+# it makes $ac_aux_dir quite unusable in subdirectories: in the top
+# source directory, any form will work fine, but in subdirectories a
+# relative path needs to be adjusted first.
+#
+# $ac_aux_dir/missing
+#    fails when called from a subdirectory if $ac_aux_dir is relative
+# $top_srcdir/$ac_aux_dir/missing
+#    fails if $ac_aux_dir is absolute,
+#    fails when called from a subdirectory in a VPATH build with
+#          a relative $ac_aux_dir
+#
+# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
+# are both prefixed by $srcdir.  In an in-source build this is usually
+# harmless because $srcdir is '.', but things will broke when you
+# start a VPATH build or use an absolute $srcdir.
+#
+# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
+# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
+#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
+# and then we would define $MISSING as
+#   MISSING="\${SHELL} $am_aux_dir/missing"
+# This will work as long as MISSING is not called from configure, because
+# unfortunately $(top_srcdir) has no meaning in configure.
+# However there are other variables, like CC, which are often used in
+# configure, and could therefore not use this "fixed" $ac_aux_dir.
+#
+# Another solution, used here, is to always expand $ac_aux_dir to an
+# absolute PATH.  The drawback is that using absolute paths prevent a
+# configured tree to be moved without reconfiguration.
+
+AC_DEFUN([AM_AUX_DIR_EXPAND],
+[AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+])
+
+# AM_CONDITIONAL                                            -*- Autoconf -*-
+
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_CONDITIONAL(NAME, SHELL-CONDITION)
+# -------------------------------------
+# Define a conditional.
+AC_DEFUN([AM_CONDITIONAL],
+[AC_PREREQ([2.52])dnl
+ m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
+       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
+AC_SUBST([$1_TRUE])dnl
+AC_SUBST([$1_FALSE])dnl
+_AM_SUBST_NOTMAKE([$1_TRUE])dnl
+_AM_SUBST_NOTMAKE([$1_FALSE])dnl
+m4_define([_AM_COND_VALUE_$1], [$2])dnl
+if $2; then
+  $1_TRUE=
+  $1_FALSE='#'
+else
+  $1_TRUE='#'
+  $1_FALSE=
+fi
+AC_CONFIG_COMMANDS_PRE(
+[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
+  AC_MSG_ERROR([[conditional "$1" was never defined.
+Usually this means the macro was only invoked conditionally.]])
+fi])])
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+
+# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
+# written in clear, in which case automake, when reading aclocal.m4,
+# will think it sees a *use*, and therefore will trigger all it's
+# C support machinery.  Also note that it means that autoscan, seeing
+# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
+
+
+# _AM_DEPENDENCIES(NAME)
+# ----------------------
+# See how the compiler implements dependency checking.
+# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
+# We try a few techniques and use that to set a single cache variable.
+#
+# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
+# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
+# dependency, and given that the user is not expected to run this macro,
+# just rely on AC_PROG_CC.
+AC_DEFUN([_AM_DEPENDENCIES],
+[AC_REQUIRE([AM_SET_DEPDIR])dnl
+AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
+AC_REQUIRE([AM_MAKE_INCLUDE])dnl
+AC_REQUIRE([AM_DEP_TRACK])dnl
+
+m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
+      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
+      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
+      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
+      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
+      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
+                    [depcc="$$1"   am_compiler_list=])
+
+AC_CACHE_CHECK([dependency style of $depcc],
+               [am_cv_$1_dependencies_compiler_type],
+[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_$1_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
+  fi
+  am__universal=false
+  m4_case([$1], [CC],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac],
+    [CXX],
+    [case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac])
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_$1_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_$1_dependencies_compiler_type=none
+fi
+])
+AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
+AM_CONDITIONAL([am__fastdep$1], [
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
+])
+
+
+# AM_SET_DEPDIR
+# -------------
+# Choose a directory name for dependency files.
+# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
+AC_DEFUN([AM_SET_DEPDIR],
+[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
+])
+
+
+# AM_DEP_TRACK
+# ------------
+AC_DEFUN([AM_DEP_TRACK],
+[AC_ARG_ENABLE([dependency-tracking], [dnl
+AS_HELP_STRING(
+  [--enable-dependency-tracking],
+  [do not reject slow dependency extractors])
+AS_HELP_STRING(
+  [--disable-dependency-tracking],
+  [speeds up one-time build])])
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
+AC_SUBST([AMDEPBACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
+AC_SUBST([am__nodep])dnl
+_AM_SUBST_NOTMAKE([am__nodep])dnl
+])
+
+# Generate code to set up dependency tracking.              -*- Autoconf -*-
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_OUTPUT_DEPENDENCY_COMMANDS
+# ------------------------------
+AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
+[{
+  # Older Autoconf quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  # TODO: see whether this extra hack can be removed once we start
+  # requiring Autoconf 2.70 or later.
+  AS_CASE([$CONFIG_FILES],
+          [*\'*], [eval set x "$CONFIG_FILES"],
+          [*], [set x $CONFIG_FILES])
+  shift
+  # Used to flag and report bootstrapping failures.
+  am_rc=0
+  for am_mf
+  do
+    # Strip MF so we end up with the name of the file.
+    am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile which includes
+    # dependency-tracking related rules and includes.
+    # Grep'ing the whole file directly is not great: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+      || continue
+    am_dirpart=`AS_DIRNAME(["$am_mf"])`
+    am_filepart=`AS_BASENAME(["$am_mf"])`
+    AM_RUN_LOG([cd "$am_dirpart" \
+      && sed -e '/# am--include-marker/d' "$am_filepart" \
+        | $MAKE -f - am--depfiles]) || am_rc=$?
+  done
+  if test $am_rc -ne 0; then
+    AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments
+    for automatic dependency tracking.  Try re-running configure with the
+    '--disable-dependency-tracking' option to at least be able to build
+    the package (albeit without support for automatic dependency tracking).])
+  fi
+  AS_UNSET([am_dirpart])
+  AS_UNSET([am_filepart])
+  AS_UNSET([am_mf])
+  AS_UNSET([am_rc])
+  rm -f conftest-deps.mk
+}
+])# _AM_OUTPUT_DEPENDENCY_COMMANDS
+
+
+# AM_OUTPUT_DEPENDENCY_COMMANDS
+# -----------------------------
+# This macro should only be invoked once -- use via AC_REQUIRE.
+#
+# This code is only required when automatic dependency tracking is enabled.
+# This creates each '.Po' and '.Plo' makefile fragment that we'll need in
+# order to bootstrap the dependency handling code.
+AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
+[AC_CONFIG_COMMANDS([depfiles],
+     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
+     [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])])
+
+# Do all the work for Automake.                             -*- Autoconf -*-
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This macro actually does too much.  Some checks are only needed if
+# your package does certain things.  But this isn't really a big deal.
+
+dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
+m4_define([AC_PROG_CC],
+m4_defn([AC_PROG_CC])
+[_AM_PROG_CC_C_O
+])
+
+# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
+# AM_INIT_AUTOMAKE([OPTIONS])
+# -----------------------------------------------
+# The call with PACKAGE and VERSION arguments is the old style
+# call (pre autoconf-2.50), which is being phased out.  PACKAGE
+# and VERSION should now be passed to AC_INIT and removed from
+# the call to AM_INIT_AUTOMAKE.
+# We support both call styles for the transition.  After
+# the next Automake release, Autoconf can make the AC_INIT
+# arguments mandatory, and then we can depend on a new Autoconf
+# release and drop the old call support.
+AC_DEFUN([AM_INIT_AUTOMAKE],
+[AC_PREREQ([2.65])dnl
+dnl Autoconf wants to disallow AM_ names.  We explicitly allow
+dnl the ones we care about.
+m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
+AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
+AC_REQUIRE([AC_PROG_INSTALL])dnl
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+AC_SUBST([CYGPATH_W])
+
+# Define the identity of the package.
+dnl Distinguish between old-style and new-style calls.
+m4_ifval([$2],
+[AC_DIAGNOSE([obsolete],
+             [$0: two- and three-arguments forms are deprecated.])
+m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
+ AC_SUBST([PACKAGE], [$1])dnl
+ AC_SUBST([VERSION], [$2])],
+[_AM_SET_OPTIONS([$1])dnl
+dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
+m4_if(
+  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
+  [ok:ok],,
+  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
+ AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
+ AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
+
+_AM_IF_OPTION([no-define],,
+[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
+ AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
+
+# Some tools Automake needs.
+AC_REQUIRE([AM_SANITY_CHECK])dnl
+AC_REQUIRE([AC_ARG_PROGRAM])dnl
+AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
+AM_MISSING_PROG([AUTOCONF], [autoconf])
+AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
+AM_MISSING_PROG([AUTOHEADER], [autoheader])
+AM_MISSING_PROG([MAKEINFO], [makeinfo])
+AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
+AC_REQUIRE([AC_PROG_MKDIR_P])dnl
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
+AC_REQUIRE([AC_PROG_AWK])dnl
+AC_REQUIRE([AC_PROG_MAKE_SET])dnl
+AC_REQUIRE([AM_SET_LEADING_DOT])dnl
+_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
+             [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
+                            [_AM_PROG_TAR([v7])])])
+_AM_IF_OPTION([no-dependencies],,
+[AC_PROVIDE_IFELSE([AC_PROG_CC],
+                 [_AM_DEPENDENCIES([CC])],
+                 [m4_define([AC_PROG_CC],
+                            m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_CXX],
+                 [_AM_DEPENDENCIES([CXX])],
+                 [m4_define([AC_PROG_CXX],
+                            m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJC],
+                 [_AM_DEPENDENCIES([OBJC])],
+                 [m4_define([AC_PROG_OBJC],
+                            m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
+AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
+                 [_AM_DEPENDENCIES([OBJCXX])],
+                 [m4_define([AC_PROG_OBJCXX],
+                            m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
+])
+AC_REQUIRE([AM_SILENT_RULES])dnl
+dnl The testsuite driver may need to know about EXEEXT, so add the
+dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
+dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
+AC_CONFIG_COMMANDS_PRE(dnl
+[m4_provide_if([_AM_COMPILER_EXEEXT],
+  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
+  fi
+fi
+dnl The trailing newline in this macro's definition is deliberate, for
+dnl backward compatibility and to allow trailing 'dnl'-style comments
+dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841.
+])
+
+dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
+dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
+dnl mangled by Autoconf and run in a shell conditional statement.
+m4_define([_AC_COMPILER_EXEEXT],
+m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
+
+# When config.status generates a header, we must update the stamp-h file.
+# This file resides in the same directory as the config header
+# that is generated.  The stamp files are numbered to have different names.
+
+# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
+# loop where config.status creates the headers, so we can generate
+# our stamp files there.
+AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
+[# Compute $1's index in $config_headers.
+_am_arg=$1
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_SH
+# ------------------
+# Define $install_sh.
+AC_DEFUN([AM_PROG_INSTALL_SH],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+if test x"${install_sh+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+AC_SUBST([install_sh])])
+
+# Copyright (C) 2003-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# Check whether the underlying file-system supports filenames
+# with a leading dot.  For instance MS-DOS doesn't.
+AC_DEFUN([AM_SET_LEADING_DOT],
+[rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+AC_SUBST([am__leading_dot])])
+
+# Check to see how 'make' treats includes.                 -*- Autoconf -*-
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MAKE_INCLUDE()
+# -----------------
+# Check whether make has an 'include' directive that can support all
+# the idioms we need for our automatic dependency tracking code.
+AC_DEFUN([AM_MAKE_INCLUDE],
+[AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive])
+cat > confinc.mk << 'END'
+am__doit:
+       @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+  AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out])
+  AS_CASE([$?:`cat confinc.out 2>/dev/null`],
+      ['0:this is the am__doit target'],
+      [AS_CASE([$s],
+          [BSD], [am__include='.include' am__quote='"'],
+          [am__include='include' am__quote=''])])
+  if test "$am__include" != "#"; then
+    _am_result="yes ($s style)"
+    break
+  fi
+done
+rm -f confinc.* confmf.*
+AC_MSG_RESULT([${_am_result}])
+AC_SUBST([am__include])])
+AC_SUBST([am__quote])])
+
+# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
+
+# Copyright (C) 1997-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_MISSING_PROG(NAME, PROGRAM)
+# ------------------------------
+AC_DEFUN([AM_MISSING_PROG],
+[AC_REQUIRE([AM_MISSING_HAS_RUN])
+$1=${$1-"${am_missing_run}$2"}
+AC_SUBST($1)])
+
+# AM_MISSING_HAS_RUN
+# ------------------
+# Define MISSING if not defined so far and test if it is modern enough.
+# If it is, set am_missing_run to use it, otherwise, to nothing.
+AC_DEFUN([AM_MISSING_HAS_RUN],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([missing])dnl
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
+else
+  am_missing_run=
+  AC_MSG_WARN(['missing' script is too old or missing])
+fi
+])
+
+# Helper functions for option handling.                     -*- Autoconf -*-
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_MANGLE_OPTION(NAME)
+# -----------------------
+AC_DEFUN([_AM_MANGLE_OPTION],
+[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
+
+# _AM_SET_OPTION(NAME)
+# --------------------
+# Set option NAME.  Presently that only means defining a flag for this option.
+AC_DEFUN([_AM_SET_OPTION],
+[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
+
+# _AM_SET_OPTIONS(OPTIONS)
+# ------------------------
+# OPTIONS is a space-separated list of Automake options.
+AC_DEFUN([_AM_SET_OPTIONS],
+[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
+
+# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
+# -------------------------------------------
+# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
+AC_DEFUN([_AM_IF_OPTION],
+[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_CC_C_O
+# ---------------
+# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
+# to automatically call this.
+AC_DEFUN([_AM_PROG_CC_C_O],
+[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
+AC_REQUIRE_AUX_FILE([compile])dnl
+AC_LANG_PUSH([C])dnl
+AC_CACHE_CHECK(
+  [whether $CC understands -c and -o together],
+  [am_cv_prog_cc_c_o],
+  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i])
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+AC_LANG_POP([C])])
+
+# For backward compatibility.
+AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_RUN_LOG(COMMAND)
+# -------------------
+# Run COMMAND, save the exit status in ac_status, and log it.
+# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
+AC_DEFUN([AM_RUN_LOG],
+[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
+   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
+   (exit $ac_status); }])
+
+# Check to make sure that the build environment is sane.    -*- Autoconf -*-
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SANITY_CHECK
+# ---------------
+AC_DEFUN([AM_SANITY_CHECK],
+[AC_MSG_CHECKING([whether build environment is sane])
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[[\\\"\#\$\&\'\`$am_lf]]*)
+    AC_MSG_ERROR([unsafe absolute working directory name]);;
+esac
+case $srcdir in
+  *[[\\\"\#\$\&\'\`$am_lf\ \   ]]*)
+    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$[*]" = "X"; then
+       # -L didn't work.
+       set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$[*]" != "X $srcdir/configure conftest.file" \
+       && test "$[*]" != "X conftest.file $srcdir/configure"; then
+
+       # If neither matched, then we have a broken ls.  This can happen
+       # if, for instance, CONFIG_SHELL is bash and it inherits a
+       # broken ls alias from the environment.  This has actually
+       # happened.  Such a system could not be considered "sane".
+       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment])
+     fi
+     if test "$[2]" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   test "$[2]" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   AC_MSG_ERROR([newly created file is older than distributed files!
+Check your system clock])
+fi
+AC_MSG_RESULT([yes])
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+AC_CONFIG_COMMANDS_PRE(
+  [AC_MSG_CHECKING([that generated files are newer than configure])
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   AC_MSG_RESULT([done])])
+rm -f conftest.file
+])
+
+# Copyright (C) 2009-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_SILENT_RULES([DEFAULT])
+# --------------------------
+# Enable less verbose build rules; with the default set to DEFAULT
+# ("yes" being less verbose, "no" or empty being verbose).
+AC_DEFUN([AM_SILENT_RULES],
+[AC_ARG_ENABLE([silent-rules], [dnl
+AS_HELP_STRING(
+  [--enable-silent-rules],
+  [less verbose build output (undo: "make V=1")])
+AS_HELP_STRING(
+  [--disable-silent-rules],
+  [verbose build output (undo: "make V=0")])dnl
+])
+case $enable_silent_rules in @%:@ (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
+esac
+dnl
+dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
+dnl do not support nested variable expansions.
+dnl See automake bug#9928 and bug#10237.
+am_make=${MAKE-make}
+AC_CACHE_CHECK([whether $am_make supports nested variables],
+   [am_cv_make_support_nested_variables],
+   [if AS_ECHO([['TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+       @$(TRUE)
+.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi])
+if test $am_cv_make_support_nested_variables = yes; then
+  dnl Using '$V' instead of '$(V)' breaks IRIX make.
+  AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AC_SUBST([AM_V])dnl
+AM_SUBST_NOTMAKE([AM_V])dnl
+AC_SUBST([AM_DEFAULT_V])dnl
+AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
+AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
+AM_BACKSLASH='\'
+AC_SUBST([AM_BACKSLASH])dnl
+_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
+])
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# AM_PROG_INSTALL_STRIP
+# ---------------------
+# One issue with vendor 'install' (even GNU) is that you can't
+# specify the program used to strip binaries.  This is especially
+# annoying in cross-compiling environments, where the build's strip
+# is unlikely to handle the host's binaries.
+# Fortunately install-sh will honor a STRIPPROG variable, so we
+# always use install-sh in "make install-strip", and initialize
+# STRIPPROG with the value of the STRIP variable (set by the user).
+AC_DEFUN([AM_PROG_INSTALL_STRIP],
+[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
+if test "$cross_compiling" != no; then
+  AC_CHECK_TOOL([STRIP], [strip], :)
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+AC_SUBST([INSTALL_STRIP_PROGRAM])])
+
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_SUBST_NOTMAKE(VARIABLE)
+# ---------------------------
+# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
+# This macro is traced by Automake.
+AC_DEFUN([_AM_SUBST_NOTMAKE])
+
+# AM_SUBST_NOTMAKE(VARIABLE)
+# --------------------------
+# Public sister of _AM_SUBST_NOTMAKE.
+AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
+
+# Check how to create a tarball.                            -*- Autoconf -*-
+
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
+#
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# _AM_PROG_TAR(FORMAT)
+# --------------------
+# Check how to create a tarball in format FORMAT.
+# FORMAT should be one of 'v7', 'ustar', or 'pax'.
+#
+# Substitute a variable $(am__tar) that is a command
+# writing to stdout a FORMAT-tarball containing the directory
+# $tardir.
+#     tardir=directory && $(am__tar) > result.tar
+#
+# Substitute a variable $(am__untar) that extract such
+# a tarball read from stdin.
+#     $(am__untar) < result.tar
+#
+AC_DEFUN([_AM_PROG_TAR],
+[# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AC_SUBST([AMTAR], ['$${TAR-tar}'])
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
+
+m4_if([$1], [v7],
+  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
+
+  [m4_case([$1],
+    [ustar],
+     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
+      # There is notably a 21 bits limit for the UID and the GID.  In fact,
+      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
+      # and bug#13588).
+      am_max_uid=2097151 # 2^21 - 1
+      am_max_gid=$am_max_uid
+      # The $UID and $GID variables are not portable, so we need to resort
+      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
+      # below are definitely unexpected, so allow the users to see them
+      # (that is, avoid stderr redirection).
+      am_uid=`id -u || echo unknown`
+      am_gid=`id -g || echo unknown`
+      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
+      if test $am_uid -le $am_max_uid; then
+         AC_MSG_RESULT([yes])
+      else
+         AC_MSG_RESULT([no])
+         _am_tools=none
+      fi
+      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
+      if test $am_gid -le $am_max_gid; then
+         AC_MSG_RESULT([yes])
+      else
+        AC_MSG_RESULT([no])
+        _am_tools=none
+      fi],
+
+  [pax],
+    [],
+
+  [m4_fatal([Unknown tar format])])
+
+  AC_MSG_CHECKING([how to create a $1 tar archive])
+
+  # Go ahead even if we have the value already cached.  We do so because we
+  # need to set the values for the 'am__tar' and 'am__untar' variables.
+  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
+
+  for _am_tool in $_am_tools; do
+    case $_am_tool in
+    gnutar)
+      for _am_tar in tar gnutar gtar; do
+        AM_RUN_LOG([$_am_tar --version]) && break
+      done
+      am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
+      am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
+      am__untar="$_am_tar -xf -"
+      ;;
+    plaintar)
+      # Must skip GNU tar: if it does not support --format= it doesn't create
+      # ustar tarball either.
+      (tar --version) >/dev/null 2>&1 && continue
+      am__tar='tar chf - "$$tardir"'
+      am__tar_='tar chf - "$tardir"'
+      am__untar='tar xf -'
+      ;;
+    pax)
+      am__tar='pax -L -x $1 -w "$$tardir"'
+      am__tar_='pax -L -x $1 -w "$tardir"'
+      am__untar='pax -r'
+      ;;
+    cpio)
+      am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
+      am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
+      am__untar='cpio -i -H $1 -d'
+      ;;
+    none)
+      am__tar=false
+      am__tar_=false
+      am__untar=false
+      ;;
+    esac
+
+    # If the value was cached, stop now.  We just wanted to have am__tar
+    # and am__untar set.
+    test -n "${am_cv_prog_tar_$1}" && break
+
+    # tar/untar a dummy directory, and stop if the command works.
+    rm -rf conftest.dir
+    mkdir conftest.dir
+    echo GrepMe > conftest.dir/file
+    AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
+    rm -rf conftest.dir
+    if test -s conftest.tar; then
+      AM_RUN_LOG([$am__untar <conftest.tar])
+      AM_RUN_LOG([cat conftest.dir/file])
+      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
+    fi
+  done
+  rm -rf conftest.dir
+
+  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
+  AC_MSG_RESULT([$am_cv_prog_tar_$1])])
+
+AC_SUBST([am__tar])
+AC_SUBST([am__untar])
+]) # _AM_PROG_TAR
+
+m4_include([gnulib_m4/00gnulib.m4])
+m4_include([gnulib_m4/absolute-header.m4])
+m4_include([gnulib_m4/alloca.m4])
+m4_include([gnulib_m4/asm-underscore.m4])
+m4_include([gnulib_m4/errno_h.m4])
+m4_include([gnulib_m4/exponentd.m4])
+m4_include([gnulib_m4/exponentf.m4])
+m4_include([gnulib_m4/exponentl.m4])
+m4_include([gnulib_m4/extensions.m4])
+m4_include([gnulib_m4/extern-inline.m4])
+m4_include([gnulib_m4/float_h.m4])
+m4_include([gnulib_m4/fpieee.m4])
+m4_include([gnulib_m4/fprintf-posix.m4])
+m4_include([gnulib_m4/frexp.m4])
+m4_include([gnulib_m4/frexpl.m4])
+m4_include([gnulib_m4/fseterr.m4])
+m4_include([gnulib_m4/gnulib-common.m4])
+m4_include([gnulib_m4/gnulib-comp.m4])
+m4_include([gnulib_m4/host-cpu-c-abi.m4])
+m4_include([gnulib_m4/include_next.m4])
+m4_include([gnulib_m4/intmax_t.m4])
+m4_include([gnulib_m4/inttypes_h.m4])
+m4_include([gnulib_m4/isnand.m4])
+m4_include([gnulib_m4/isnanf.m4])
+m4_include([gnulib_m4/isnanl.m4])
+m4_include([gnulib_m4/ldexpl.m4])
+m4_include([gnulib_m4/libunistring-base.m4])
+m4_include([gnulib_m4/limits-h.m4])
+m4_include([gnulib_m4/longlong.m4])
+m4_include([gnulib_m4/math_h.m4])
+m4_include([gnulib_m4/memchr.m4])
+m4_include([gnulib_m4/mmap-anon.m4])
+m4_include([gnulib_m4/multiarch.m4])
+m4_include([gnulib_m4/nocrash.m4])
+m4_include([gnulib_m4/non-recursive-gnulib-prefix-hack.m4])
+m4_include([gnulib_m4/off_t.m4])
+m4_include([gnulib_m4/printf-frexp.m4])
+m4_include([gnulib_m4/printf-frexpl.m4])
+m4_include([gnulib_m4/printf.m4])
+m4_include([gnulib_m4/signbit.m4])
+m4_include([gnulib_m4/size_max.m4])
+m4_include([gnulib_m4/snprintf.m4])
+m4_include([gnulib_m4/ssize_t.m4])
+m4_include([gnulib_m4/stddef_h.m4])
+m4_include([gnulib_m4/stdint.m4])
+m4_include([gnulib_m4/stdint_h.m4])
+m4_include([gnulib_m4/stdio_h.m4])
+m4_include([gnulib_m4/string_h.m4])
+m4_include([gnulib_m4/sys_types_h.m4])
+m4_include([gnulib_m4/vasnprintf.m4])
+m4_include([gnulib_m4/vsnprintf.m4])
+m4_include([gnulib_m4/warn-on-use.m4])
+m4_include([gnulib_m4/wchar_h.m4])
+m4_include([gnulib_m4/wchar_t.m4])
+m4_include([gnulib_m4/wctype_h.m4])
+m4_include([gnulib_m4/wcwidth.m4])
+m4_include([gnulib_m4/wint_t.m4])
+m4_include([gnulib_m4/xsize.m4])
+m4_include([acinclude.m4])
index 0fe7f26d0be4c98d8450310e8da34a573251f6a9..48993dc076ba62cb58c0f7dd8a490c873e93f78d 100644 (file)
@@ -1,12 +1,12 @@
-    Copyright (C) 2000-2014 Free Software Foundation, Inc.
+    Copyright (C) 2000-2018 Free Software Foundation, Inc.
 
-    Copying and distribution of this file, with or without modification,
-    are permitted in any medium without royalty provided the copyright
-    notice and this notice are preserved.
+    Copying and distribution of this file, with or without
+    modification, are permitted in any medium without royalty provided
+    the copyright notice and this notice are preserved.
 
 This is a port of GNU Groff to DJGPP v2.03 or later.
 Groff is the GNU version of document formatting tools related to
-`troff'.
+'troff'.
 
 This README file describes how to build and install Groff on MS-DOS or
 MS-Windows systems using the DJGPP port of GNU C/C++ compiler and
@@ -19,8 +19,8 @@ I.  Installing the pre-compiled binary package
     1. Unzip the file groNNNb.zip (where NNN is the version number)
        preserving the directory structure (-d switch to PKUNZIP) from
        the main DJGPP installation directory.  If you will use Groff
-       on Windows 9X or Windows2000, use an unzip program which
-       supports long filenames.
+       on Windows 9x, Windows 2000, or later, use an unzip program
+       which supports long filenames.
 
     2. Groff binaries were configured so that they will look for their
        standard directories under the directory pointed to by the
@@ -34,7 +34,7 @@ I.  Installing the pre-compiled binary package
         GROFF_TYPESETTER=ascii
         GROFF_FONT_PATH=%DJDIR%/share/groff/<version>/font
 
-       <version> is something like `1.16.1' or `1.17'.
+       <version> is something like '1.16.1' or '1.17'.
 
        In addition, you can set the variable GROFF_TMPDIR to point to
        a directory where you want Groff to create temporary files it
@@ -48,7 +48,7 @@ I.  Installing the pre-compiled binary package
        installed.
 
        Note that the GROFF_TYPESETTER variable sets the default Groff
-       device to be `ascii', which is suitable for formatting man
+       device to be 'ascii', which is suitable for formatting man
        pages to be viewed on the terminal.  Use the -T switch to
        generate output for other devices (e.g., -Tps for PostScript).
 
@@ -72,7 +72,7 @@ I.  Installing the pre-compiled binary package
        under construction, so some sections are empty.
 
        If you want to add a Groff entry to the main Info menu in the
-       file DIR, chdir to the `info' subdirectory of the main Groff
+       file DIR, chdir to the 'info' subdirectory of the main Groff
        installation directory and run this command:
 
          install-info --dir-file=dir groff.info
@@ -84,14 +84,14 @@ I.  Installing the pre-compiled binary package
 
                   groff -man -s foo.1 > foo.man
 
-       where `foo.1' is the troff source of the man page and `foo.man'
+       where 'foo.1' is the troff source of the man page and 'foo.man'
        is the formatted page.  If you need to view the man page, say
        this:
 
                   groff -man -s foo.1 | less
 
-       You can also use the DJGPP clone of the Unix `man' command, in
-       which case `man' runs the above command for you automatically.
+       You can also use the DJGPP clone of the Unix 'man' command, in
+       which case 'man' runs the above command for you automatically.
 
        Here's how you print man pages on a PostScript printer:
 
@@ -103,20 +103,20 @@ I.  Installing the pre-compiled binary package
 
        Printing the documents produced by Groff is possible either by
        redirecting Groff's standard output to the local printer
-       device, like shown above, or by using the `-l' switch to Groff.
+       device, like shown above, or by using the '-l' switch to Groff.
        The latter possibility causes Groff to pipe its output to a
        program whose name and arguments appear in the files named
-       `DESC' in each of the `devFOO' subdirectories of the
+       'DESC' in each of the 'devFOO' subdirectories of the
        %DJDIR%/share/groff/<version>/font directory; for example, the
        file devps/DESC is used by "groff -Tps".  The relevant line in
        these files begins with the word "print".
 
-       As configured, when invoked with the `-l' switch, Groff will
-       call `cat' (from GNU Textutils) to pipe its output to the
+       As configured, when invoked with the '-l' switch, Groff will
+       call 'cat' (from GNU Textutils) to pipe its output to the
        default printer device for -Tps, -Tlbp and -Tlj4 options, and
-       it will call `dvilj4' (from the dvljNNNb.zip package) for -Tdvi
+       it will call 'dvilj4' (from the dvljNNNb.zip package) for -Tdvi
        option.  If you don't have these programs installed, you can
-       edit the respective `DESC' files to replace these commands with
+       edit the respective 'DESC' files to replace these commands with
        something else.  The replacement program must be able to read
        its standard input and send its output to whatever printer you
        want.  The "print" entry is assumed to be a shell command, so
@@ -149,7 +149,7 @@ I.  Installing the pre-compiled binary package
                  - egrep
                  - sed
 
-       The `afmtodit' and `mmroff' utilities are Perl scripts, so you
+       The 'afmtodit' and 'mmroff' utilities are Perl scripts, so you
        will need a Perl port to run them.
 
        All of these ports should be available from the DJGPP sites.
@@ -171,8 +171,8 @@ I.  Installing the pre-compiled binary package
 
     8. The package does not include the directories under
        share/groff/<version>/font whose names begin with "devX": these
-       are needed on X-Windows for running the gxditview program, which
-       is not supported by this port.
+       are needed on the X Window System for running the gxditview
+       program, which is not supported by this port.
 
     9. Due to 8+3 limitations of DOS filesystems, several files were
        renamed:
@@ -215,22 +215,22 @@ II. Building Groff from sources
        Special considerations apply if you have GCC 2.8.1 installed,
        and cannot upgrade to a later version.  See paragraph 4 below.
 
-       After you install these tools, make sure you have a ``symlink''
-       to bash.exe called sh.exe and a ``symlink'' to gawk.exe called
+       After you install these tools, make sure you have a "symlink"
+       to bash.exe called sh.exe and a "symlink" to gawk.exe called
        awk.exe.  If not, go to the DJGPP bin/ subdirectory and type
        the following words of wisdom from the DOS prompt:
 
                      ln -s bash.exe sh.exe
                      ln -s gawk.exe awk.exe
 
-       (`ln' is part of GNU Fileutils, see above.)
+       ('ln' is part of GNU Fileutils, see above.)
 
     2. Unzip the source distribution groXYZs.zip (where XYZ is the
        version number) preserving the directory structure (-d switch
        to PKUNZIP) from the main DJGPP installation directory.  (If
-       you are building Groff on Windows 9X or Windows 2000, use an
-       unzip program which supports long filenames.)  This creates
-       directory gnu/groff-X.YZ and unzips the sources there.
+       you are building Groff on Windows 9x, Windows 2000, or later,
+       use an unzip program which supports long filenames.)  This
+       creates directory gnu/groff-X.YZ and unzips the sources there.
 
        If you are building from the official GNU distribution, unpack
        the .tar.gz archive like this:
@@ -286,7 +286,7 @@ II. Building Groff from sources
 
        The problem with redefining NULL should not happen with DJGPP
        v2.03 or later.  But if you still see compilation errors which
-       say "`NULL' undeclared", comment out the line in _G_config.h
+       say "'NULL' undeclared", comment out the line in _G_config.h
        that says this:
 
           #undef NULL
@@ -313,7 +313,7 @@ II. Building Groff from sources
        read it to make yourself familiar with the programs.)
 
        Note that the batch file sets a lot of environment variables;
-       if you get ``Out of environment space'' messages, launch a
+       if you get "Out of environment space" messages, launch a
        subsidiary COMMAND.COM with plenty of environment space, like
        so:
 
@@ -330,7 +330,7 @@ II. Building Groff from sources
        be installed under the top DJGPP installation directory.
 
        Alternatively, you could instruct Make explicitly where to
-       install the package by setting the `prefix' variable.  For
+       install the package by setting the 'prefix' variable.  For
        example:
 
                make install prefix=c:/groff
@@ -341,7 +341,7 @@ II. Building Groff from sources
        will need to format them.  Use the commands shown in chapter I,
        section 5 above to do that, and redirect its output to the
        appropriate catN subdirectory.  Alternatively, you could format
-       the pages when you need to view them (the DJGPP clone of `man'
+       the pages when you need to view them (the DJGPP clone of 'man'
        will automatically format them).
 
        Consult the installation instructions for pre-compiled binaries
@@ -349,10 +349,13 @@ II. Building Groff from sources
 
     8. You can safely delete the directories under
        share/groff/<version>/font whose names begin with "devX": these
-       are needed on X-Windows which is not supported by this port.
+       are used by the X Window System client 'gxditview', which is
+       not supported by this port.
 
 
-##### Emacs settings
+##### Editor settings
 Local Variables:
 mode: text
+fill-column: 70
 End:
+vim: set autoindent textwidth=70:
index 48eca861eba03aa5dadb99d5973e40068660b73c..8657ff622c02f3c6e2e380c3087d725c74721e0d 100644 (file)
@@ -1,4 +1,4 @@
-Rem Copyright (C) 2000-2014 Free Software Foundation, Inc.\r
+Rem Copyright (C) 2000-2018 Free Software Foundation, Inc.\r
 Rem\r
 Rem This configure script is free software; the Free Software Foundation\r
 Rem gives unlimited permission to copy, distribute and modify it.\r
@@ -31,7 +31,7 @@ if not "%CONFIG_SITE%" == "%XSRC%/arch/djgpp/config.site" goto SmallEnv
 \r
 Rem This is required because DOS/Windows are case-insensitive\r
 Rem to file names, and "make install" will do nothing if Make\r
-Rem finds a file called `install'.\r
+Rem finds a file called 'install'.\r
 if exist INSTALL ren INSTALL INSTALL.txt\r
 \r
 Rem Set HOSTNAME so it shows in config.status\r
index d12473c29d83a4000a735216a3591b30ec6bce07..9e4a50f114744894eacebd2f4f4c02786c677b26 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2018 Free Software Foundation, Inc.
 #
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
index 2925419a4003d28e6d82a46ba9a5a6c727431f44..c1e5650d20da7a396e59636a95e66d34049974ed 100644 (file)
@@ -1,6 +1,6 @@
 #! /bin/sh
 
-# Copyright (C) 2000-2014 Free Software Foundation, Inc.
+# Copyright (C) 2000-2018 Free Software Foundation, Inc.
 #
 # This configure script is free software; the Free Software Foundation
 # gives unlimited permission to copy, distribute and modify it.
@@ -34,5 +34,5 @@ LPR=${LPR='cat >>PRN'}
 DVIPRINT=${DVIPRINT='dvilj4 - >>PRN'}
 PERL=${PERL='/usr/bin/perl'}
 
-# Force `cp' to be used instead of "ln -s".
+# Force "cp" to be used instead of "ln -s".
 ac_cv_prog_LN_S="cp -p"
index 1e3a0cd022aa4e5cf23bc1a10cafa65a71ded4fe..c78fccfa1c06bddb872cc09f1b0bbd10d015ff9f 100644 (file)
@@ -1,4 +1,4 @@
-Rem Copyright (C) 2000-201 Free Software Foundation, Inc.\r
+Rem Copyright (C) 2000-2018 Free Software Foundation, Inc.\r
 Rem\r
 Rem This file is part of groff.\r
 Rem\r
diff --git a/arch/mingw/Makefile.sub b/arch/mingw/Makefile.sub
deleted file mode 100644 (file)
index 4c1e957..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-WINSCRIPTS=\
-  afmtodit.cmd \
-  chem.cmd \
-  gperl.cmd \
-  gpinyin.cmd \
-  grap2graph.cmd \
-  groffer.cmd \
-  grog.cmd \
-  gropdf.cmd \
-  mmroff.cmd \
-  neqn.cmd \
-  pdfmom.cmd \
-  roff2dvi.cmd \
-  roff2html.cmd \
-  roff2pdf.cmd \
-  roff2ps.cmd \
-  roff2text.cmd \
-  roff2x.cmd
-
-RM=rm -f
-
-all: $(make_winscripts)
-install_data: $(make_install_winscripts)
-uninstall_sub: $(make_uninstall_winscripts)
-
-winscripts: $(WINSCRIPTS)
-
-install_winscripts: $(WINSCRIPTS)
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       for f in $(WINSCRIPTS); do \
-         $(RM) $(DESTDIR)$(bindir)/$$f; \
-         $(INSTALL_SCRIPT) $(srcdir)/$$f $(DESTDIR)$(bindir)/$$f; \
-       done
-
-uninstall_winscripts:
-       -for f in $(WINSCRIPTS); do \
-         $(RM) $(DESTDIR)$(bindir)/$$f; \
-       done
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 84f4085838068ef9868e56bc1a393dfd838d3655..6b26cc9a34ef8661d4a22115e41262a29baa2ee9 100644 (file)
@@ -75,7 +75,7 @@ rm -rf %tdir%
 goto end\r
 \r
 :version\r
-echo GNU grap2graph (groff) version 1.22.3\r
+echo GNU grap2graph (groff) version 1.22.4\r
 goto end\r
 \r
 :usage\r
diff --git a/arch/mingw/mingw.am b/arch/mingw/mingw.am
new file mode 100644 (file)
index 0000000..389453c
--- /dev/null
@@ -0,0 +1,52 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+# mingw.am
+#
+WINSCRIPTS=\
+  arch/mingw/afmtodit.cmd \
+  arch/mingw/chem.cmd \
+  arch/mingw/gperl.cmd \
+  arch/mingw/gpinyin.cmd \
+  arch/mingw/grap2graph.cmd \
+  arch/mingw/groffer.cmd \
+  arch/mingw/grog.cmd \
+  arch/mingw/gropdf.cmd \
+  arch/mingw/mmroff.cmd \
+  arch/mingw/neqn.cmd \
+  arch/mingw/pdfmom.cmd \
+  arch/mingw/roff2dvi.cmd \
+  arch/mingw/roff2html.cmd \
+  arch/mingw/roff2pdf.cmd \
+  arch/mingw/roff2ps.cmd \
+  arch/mingw/roff2text.cmd \
+  arch/mingw/roff2x.cmd
+
+if BUILD_WINSCRIPTS
+bin_SCRIPTS += $(WINSCRIPTS)
+else
+EXTRA_DIST += $(WINSCRIPTS)
+endif
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/arch/misc/Makefile.sub b/arch/misc/Makefile.sub
deleted file mode 100644 (file)
index db61b43..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# Copyright (C) 2004-2014 Free Software Foundation, Inc.
-#      Written by Keith Marshall (keith.d.marshall@ntlworld.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-
-MOSTLYCLEANADD=shdeps.sed
-
-all: shdeps.sed
-
-shdeps.sed: $(srcdir)/shdeps.sh
-       $(SHELL) $(srcdir)/shdeps.sh "$(RT_SEP)" "$(SH_SEP)" "$(bindir)" > $@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/arch/misc/misc.am b/arch/misc/misc.am
new file mode 100644 (file)
index 0000000..2c3a1c8
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
+# Original Makefile.sub written by Keith Marshall
+#   (keith.d.marshall@ntlworld.com).
+# Adapted to Automake by Bertrand Garrigues (bertrand.garrigues@laposte.net).
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+EXTRA_DIST += arch/misc/shdeps.sh
+MOSTLYCLEANFILES += shdeps.sed
+
+shdeps.sed: $(top_srcdir)/arch/misc/shdeps.sh
+       $(SHELL) $(top_srcdir)/arch/misc/shdeps.sh "$(RT_SEP)" "$(SH_SEP)" "$(bindir)" > $@
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index 9a94381624729ae338df9df965be2cb598084948..c38a859760bb7f7c4559b49522c204023c6f6276 100644 (file)
@@ -1,29 +1,29 @@
 #! /bin/sh
-# shdeps.sh: Generate OS dependency fixups, for `groff' shell scripts
+# shdeps.sh: Generate OS dependency fixups, for 'groff' shell scripts
 #
-# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
 #      Written by Keith Marshall (keith.d.marshall@ntlworld.com)
 #
-# Invoked only by `make', as:
+# Invoked only by 'make', as:
 #    $(SHELL) shdeps.sh "$(RT_SEP)" "$(SH_SEP)" "$(bindir)" > shdeps.sed
-# 
+#
 # This file is part of groff.
-# 
+#
 # groff 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 3 of the License, or
 # (at your option) any later version.
-# 
+#
 # groff 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 cat << ETX
-# shdeps.sed: Script generated automatically by \`make' -- do not modify!
+# shdeps.sed: Script generated automatically by 'make' -- do not modify!
 
 /^$/N
 /@GROFF_BIN_PATH_SETUP@/c\\
@@ -31,10 +31,10 @@ ETX
 
 if [ "$1$2" = "::" ]
 then
-  # `PATH_SEPARATOR' is `:' both at `groff' run time, and in `make',
+  # 'PATH_SEPARATOR' is ':' both at 'groff' run time, and in 'make',
   # implying an implementation which is completely POSIX compliant.
-  # Simply apply the `GROFF_BIN_PATH' and `PATH_SEPARATOR' values
-  # determined by `configure', in all cases.
+  # Simply apply the 'GROFF_BIN_PATH' and 'PATH_SEPARATOR' values
+  # determined by 'configure', in all cases.
 
   cat << ETX
 \\
@@ -43,13 +43,13 @@ GROFF_RUNTIME="\${GROFF_BIN_PATH=$3}:"
 ETX
 
 else
-  # `PATH_SEPARATOR' is NOT always `:',
+  # 'PATH_SEPARATOR' is NOT always ':',
   # which suggests an implementation for a Microsoft platform.
-  # We need to choose the `GROFF_BIN_PATH' format and `PATH_SEPARATOR'
+  # We need to choose the 'GROFF_BIN_PATH' format and 'PATH_SEPARATOR'
   # which will suit the user's choice of shell.
   #
-  # Note that some Windows users may specify the `--prefix' path
-  # using backslash characters, instead of `/', preferred by POSIX,
+  # Note that some Windows users may specify the '--prefix' path
+  # using backslash characters, instead of '/', preferred by POSIX,
   # so we will also fix that up.
 
   POSIX_BINDIR=`echo $3 | tr '\\\\' /`
diff --git a/build-aux/compile b/build-aux/compile
new file mode 100755 (executable)
index 0000000..99e5052
--- /dev/null
@@ -0,0 +1,348 @@
+#! /bin/sh
+# Wrapper for compilers which do not understand '-c -o'.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+nl='
+'
+
+# We need space, tab and new line, in precisely that order.  Quoting is
+# there to prevent tools from complaining about whitespace usage.
+IFS=" ""       $nl"
+
+file_conv=
+
+# func_file_conv build_file lazy
+# Convert a $build file to $host form and store it in $file
+# Currently only supports Windows hosts. If the determined conversion
+# type is listed in (the comma separated) LAZY, no conversion will
+# take place.
+func_file_conv ()
+{
+  file=$1
+  case $file in
+    / | /[!/]*) # absolute file, and not a UNC file
+      if test -z "$file_conv"; then
+       # lazily determine how to convert abs files
+       case `uname -s` in
+         MINGW*)
+           file_conv=mingw
+           ;;
+         CYGWIN*)
+           file_conv=cygwin
+           ;;
+         *)
+           file_conv=wine
+           ;;
+       esac
+      fi
+      case $file_conv/,$2, in
+       *,$file_conv,*)
+         ;;
+       mingw/*)
+         file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
+         ;;
+       cygwin/*)
+         file=`cygpath -m "$file" || echo "$file"`
+         ;;
+       wine/*)
+         file=`winepath -w "$file" || echo "$file"`
+         ;;
+      esac
+      ;;
+  esac
+}
+
+# func_cl_dashL linkdir
+# Make cl look for libraries in LINKDIR
+func_cl_dashL ()
+{
+  func_file_conv "$1"
+  if test -z "$lib_path"; then
+    lib_path=$file
+  else
+    lib_path="$lib_path;$file"
+  fi
+  linker_opts="$linker_opts -LIBPATH:$file"
+}
+
+# func_cl_dashl library
+# Do a library search-path lookup for cl
+func_cl_dashl ()
+{
+  lib=$1
+  found=no
+  save_IFS=$IFS
+  IFS=';'
+  for dir in $lib_path $LIB
+  do
+    IFS=$save_IFS
+    if $shared && test -f "$dir/$lib.dll.lib"; then
+      found=yes
+      lib=$dir/$lib.dll.lib
+      break
+    fi
+    if test -f "$dir/$lib.lib"; then
+      found=yes
+      lib=$dir/$lib.lib
+      break
+    fi
+    if test -f "$dir/lib$lib.a"; then
+      found=yes
+      lib=$dir/lib$lib.a
+      break
+    fi
+  done
+  IFS=$save_IFS
+
+  if test "$found" != yes; then
+    lib=$lib.lib
+  fi
+}
+
+# func_cl_wrapper cl arg...
+# Adjust compile command to suit cl
+func_cl_wrapper ()
+{
+  # Assume a capable shell
+  lib_path=
+  shared=:
+  linker_opts=
+  for arg
+  do
+    if test -n "$eat"; then
+      eat=
+    else
+      case $1 in
+       -o)
+         # configure might choose to run compile as 'compile cc -o foo foo.c'.
+         eat=1
+         case $2 in
+           *.o | *.[oO][bB][jJ])
+             func_file_conv "$2"
+             set x "$@" -Fo"$file"
+             shift
+             ;;
+           *)
+             func_file_conv "$2"
+             set x "$@" -Fe"$file"
+             shift
+             ;;
+         esac
+         ;;
+       -I)
+         eat=1
+         func_file_conv "$2" mingw
+         set x "$@" -I"$file"
+         shift
+         ;;
+       -I*)
+         func_file_conv "${1#-I}" mingw
+         set x "$@" -I"$file"
+         shift
+         ;;
+       -l)
+         eat=1
+         func_cl_dashl "$2"
+         set x "$@" "$lib"
+         shift
+         ;;
+       -l*)
+         func_cl_dashl "${1#-l}"
+         set x "$@" "$lib"
+         shift
+         ;;
+       -L)
+         eat=1
+         func_cl_dashL "$2"
+         ;;
+       -L*)
+         func_cl_dashL "${1#-L}"
+         ;;
+       -static)
+         shared=false
+         ;;
+       -Wl,*)
+         arg=${1#-Wl,}
+         save_ifs="$IFS"; IFS=','
+         for flag in $arg; do
+           IFS="$save_ifs"
+           linker_opts="$linker_opts $flag"
+         done
+         IFS="$save_ifs"
+         ;;
+       -Xlinker)
+         eat=1
+         linker_opts="$linker_opts $2"
+         ;;
+       -*)
+         set x "$@" "$1"
+         shift
+         ;;
+       *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
+         func_file_conv "$1"
+         set x "$@" -Tp"$file"
+         shift
+         ;;
+       *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
+         func_file_conv "$1" mingw
+         set x "$@" "$file"
+         shift
+         ;;
+       *)
+         set x "$@" "$1"
+         shift
+         ;;
+      esac
+    fi
+    shift
+  done
+  if test -n "$linker_opts"; then
+    linker_opts="-link$linker_opts"
+  fi
+  exec "$@" $linker_opts
+  exit 1
+}
+
+eat=
+
+case $1 in
+  '')
+     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+     exit 1;
+     ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: compile [--help] [--version] PROGRAM [ARGS]
+
+Wrapper for compilers which do not understand '-c -o'.
+Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
+arguments, and rename the output as expected.
+
+If you are trying to build a whole package this is not the
+right script to run: please start by reading the file 'INSTALL'.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "compile $scriptversion"
+    exit $?
+    ;;
+  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \
+  icl | *[/\\]icl | icl.exe | *[/\\]icl.exe )
+    func_cl_wrapper "$@"      # Doesn't return...
+    ;;
+esac
+
+ofile=
+cfile=
+
+for arg
+do
+  if test -n "$eat"; then
+    eat=
+  else
+    case $1 in
+      -o)
+       # configure might choose to run compile as 'compile cc -o foo foo.c'.
+       # So we strip '-o arg' only if arg is an object.
+       eat=1
+       case $2 in
+         *.o | *.obj)
+           ofile=$2
+           ;;
+         *)
+           set x "$@" -o "$2"
+           shift
+           ;;
+       esac
+       ;;
+      *.c)
+       cfile=$1
+       set x "$@" "$1"
+       shift
+       ;;
+      *)
+       set x "$@" "$1"
+       shift
+       ;;
+    esac
+  fi
+  shift
+done
+
+if test -z "$ofile" || test -z "$cfile"; then
+  # If no '-o' option was seen then we might have been invoked from a
+  # pattern rule where we don't need one.  That is ok -- this is a
+  # normal compilation that the losing compiler can handle.  If no
+  # '.c' file was seen then we are probably linking.  That is also
+  # ok.
+  exec "$@"
+fi
+
+# Name of file we expect compiler to create.
+cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
+
+# Create the lock directory.
+# Note: use '[/\\:.-]' here to ensure that we don't use the same name
+# that we are using for the .o file.  Also, base the name on the expected
+# object file name, since that is what matters with a parallel build.
+lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
+while true; do
+  if mkdir "$lockdir" >/dev/null 2>&1; then
+    break
+  fi
+  sleep 1
+done
+# FIXME: race condition here if user kills between mkdir and trap.
+trap "rmdir '$lockdir'; exit 1" 1 2 15
+
+# Run the compile.
+"$@"
+ret=$?
+
+if test -f "$cofile"; then
+  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
+elif test -f "${cofile}bj"; then
+  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
+fi
+
+rmdir "$lockdir"
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/config.guess b/build-aux/config.guess
new file mode 100755 (executable)
index 0000000..b33c9e8
--- /dev/null
@@ -0,0 +1,1486 @@
+#! /bin/sh
+# Attempt to guess a canonical system name.
+#   Copyright 1992-2018 Free Software Foundation, Inc.
+
+timestamp='2018-08-29'
+
+# This file 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 3 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, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+#
+# Originally written by Per Bothner; maintained since 2000 by Ben Elliston.
+#
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+#
+# Please send patches to <config-patches@gnu.org>.
+
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION]
+
+Output the configuration name of the system \`$me' is run on.
+
+Options:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.guess ($timestamp)
+
+Originally written by Per Bothner.
+Copyright 1992-2018 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help" >&2
+       exit 1 ;;
+    * )
+       break ;;
+  esac
+done
+
+if test $# != 0; then
+  echo "$me: too many arguments$help" >&2
+  exit 1
+fi
+
+# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
+# compiler to aid in system detection is discouraged as it requires
+# temporary files to be created and, as you can see below, it is a
+# headache to deal with in a portable fashion.
+
+# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
+# use `HOST_CC' if defined, but it is deprecated.
+
+# Portable tmp directory creation inspired by the Autoconf team.
+
+tmp=
+# shellcheck disable=SC2172
+trap 'test -z "$tmp" || rm -fr "$tmp"' 1 2 13 15
+trap 'exitcode=$?; test -z "$tmp" || rm -fr "$tmp"; exit $exitcode' 0
+
+set_cc_for_build() {
+    : "${TMPDIR=/tmp}"
+    # shellcheck disable=SC2039
+    { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
+       { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } ||
+       { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } ||
+       { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; }
+    dummy=$tmp/dummy
+    case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in
+       ,,)    echo "int x;" > "$dummy.c"
+              for driver in cc gcc c89 c99 ; do
+                  if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then
+                      CC_FOR_BUILD="$driver"
+                      break
+                  fi
+              done
+              if test x"$CC_FOR_BUILD" = x ; then
+                  CC_FOR_BUILD=no_compiler_found
+              fi
+              ;;
+       ,,*)   CC_FOR_BUILD=$CC ;;
+       ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
+    esac
+}
+
+# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
+# (ghazi@noc.rutgers.edu 1994-08-24)
+if test -f /.attbin/uname ; then
+       PATH=$PATH:/.attbin ; export PATH
+fi
+
+UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
+UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
+UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
+UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
+
+case "$UNAME_SYSTEM" in
+Linux|GNU|GNU/*)
+       # If the system lacks a compiler, then just pick glibc.
+       # We could probably try harder.
+       LIBC=gnu
+
+       set_cc_for_build
+       cat <<-EOF > "$dummy.c"
+       #include <features.h>
+       #if defined(__UCLIBC__)
+       LIBC=uclibc
+       #elif defined(__dietlibc__)
+       LIBC=dietlibc
+       #else
+       LIBC=gnu
+       #endif
+       EOF
+       eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`"
+
+       # If ldd exists, use it to detect musl libc.
+       if command -v ldd >/dev/null && \
+               ldd --version 2>&1 | grep -q ^musl
+       then
+           LIBC=musl
+       fi
+       ;;
+esac
+
+# Note: order is significant - the case branches are not exclusive.
+
+case "$UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION" in
+    *:NetBSD:*:*)
+       # NetBSD (nbsd) targets should (where applicable) match one or
+       # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
+       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
+       # switched to ELF, *-*-netbsd* would select the old
+       # object file format.  This provides both forward
+       # compatibility and a consistent mechanism for selecting the
+       # object file format.
+       #
+       # Note: NetBSD doesn't particularly care about the vendor
+       # portion of the name.  We always set it to "unknown".
+       sysctl="sysctl -n hw.machine_arch"
+       UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \
+           "/sbin/$sysctl" 2>/dev/null || \
+           "/usr/sbin/$sysctl" 2>/dev/null || \
+           echo unknown)`
+       case "$UNAME_MACHINE_ARCH" in
+           armeb) machine=armeb-unknown ;;
+           arm*) machine=arm-unknown ;;
+           sh3el) machine=shl-unknown ;;
+           sh3eb) machine=sh-unknown ;;
+           sh5el) machine=sh5le-unknown ;;
+           earmv*)
+               arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'`
+               endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'`
+               machine="${arch}${endian}"-unknown
+               ;;
+           *) machine="$UNAME_MACHINE_ARCH"-unknown ;;
+       esac
+       # The Operating System including object format, if it has switched
+       # to ELF recently (or will in the future) and ABI.
+       case "$UNAME_MACHINE_ARCH" in
+           earm*)
+               os=netbsdelf
+               ;;
+           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
+               set_cc_for_build
+               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
+                       | grep -q __ELF__
+               then
+                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
+                   # Return netbsd for either.  FIX?
+                   os=netbsd
+               else
+                   os=netbsdelf
+               fi
+               ;;
+           *)
+               os=netbsd
+               ;;
+       esac
+       # Determine ABI tags.
+       case "$UNAME_MACHINE_ARCH" in
+           earm*)
+               expr='s/^earmv[0-9]/-eabi/;s/eb$//'
+               abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"`
+               ;;
+       esac
+       # The OS release
+       # Debian GNU/NetBSD machines have a different userland, and
+       # thus, need a distinct triplet. However, they do not need
+       # kernel version information, so it can be replaced with a
+       # suitable tag, in the style of linux-gnu.
+       case "$UNAME_VERSION" in
+           Debian*)
+               release='-gnu'
+               ;;
+           *)
+               release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2`
+               ;;
+       esac
+       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
+       # contains redundant information, the shorter form:
+       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
+       echo "$machine-${os}${release}${abi-}"
+       exit ;;
+    *:Bitrig:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
+       echo "$UNAME_MACHINE_ARCH"-unknown-bitrig"$UNAME_RELEASE"
+       exit ;;
+    *:OpenBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
+       echo "$UNAME_MACHINE_ARCH"-unknown-openbsd"$UNAME_RELEASE"
+       exit ;;
+    *:LibertyBSD:*:*)
+       UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'`
+       echo "$UNAME_MACHINE_ARCH"-unknown-libertybsd"$UNAME_RELEASE"
+       exit ;;
+    *:MidnightBSD:*:*)
+       echo "$UNAME_MACHINE"-unknown-midnightbsd"$UNAME_RELEASE"
+       exit ;;
+    *:ekkoBSD:*:*)
+       echo "$UNAME_MACHINE"-unknown-ekkobsd"$UNAME_RELEASE"
+       exit ;;
+    *:SolidBSD:*:*)
+       echo "$UNAME_MACHINE"-unknown-solidbsd"$UNAME_RELEASE"
+       exit ;;
+    macppc:MirBSD:*:*)
+       echo powerpc-unknown-mirbsd"$UNAME_RELEASE"
+       exit ;;
+    *:MirBSD:*:*)
+       echo "$UNAME_MACHINE"-unknown-mirbsd"$UNAME_RELEASE"
+       exit ;;
+    *:Sortix:*:*)
+       echo "$UNAME_MACHINE"-unknown-sortix
+       exit ;;
+    *:Redox:*:*)
+       echo "$UNAME_MACHINE"-unknown-redox
+       exit ;;
+    mips:OSF1:*.*)
+        echo mips-dec-osf1
+        exit ;;
+    alpha:OSF1:*:*)
+       case $UNAME_RELEASE in
+       *4.0)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+               ;;
+       *5.*)
+               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
+               ;;
+       esac
+       # According to Compaq, /usr/sbin/psrinfo has been available on
+       # OSF/1 and Tru64 systems produced since 1995.  I hope that
+       # covers most systems running today.  This code pipes the CPU
+       # types through head -n 1, so we only detect the type of CPU 0.
+       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
+       case "$ALPHA_CPU_TYPE" in
+           "EV4 (21064)")
+               UNAME_MACHINE=alpha ;;
+           "EV4.5 (21064)")
+               UNAME_MACHINE=alpha ;;
+           "LCA4 (21066/21068)")
+               UNAME_MACHINE=alpha ;;
+           "EV5 (21164)")
+               UNAME_MACHINE=alphaev5 ;;
+           "EV5.6 (21164A)")
+               UNAME_MACHINE=alphaev56 ;;
+           "EV5.6 (21164PC)")
+               UNAME_MACHINE=alphapca56 ;;
+           "EV5.7 (21164PC)")
+               UNAME_MACHINE=alphapca57 ;;
+           "EV6 (21264)")
+               UNAME_MACHINE=alphaev6 ;;
+           "EV6.7 (21264A)")
+               UNAME_MACHINE=alphaev67 ;;
+           "EV6.8CB (21264C)")
+               UNAME_MACHINE=alphaev68 ;;
+           "EV6.8AL (21264B)")
+               UNAME_MACHINE=alphaev68 ;;
+           "EV6.8CX (21264D)")
+               UNAME_MACHINE=alphaev68 ;;
+           "EV6.9A (21264/EV69A)")
+               UNAME_MACHINE=alphaev69 ;;
+           "EV7 (21364)")
+               UNAME_MACHINE=alphaev7 ;;
+           "EV7.9 (21364A)")
+               UNAME_MACHINE=alphaev79 ;;
+       esac
+       # A Pn.n version is a patched version.
+       # A Vn.n version is a released version.
+       # A Tn.n version is a released field test version.
+       # A Xn.n version is an unreleased experimental baselevel.
+       # 1.2 uses "1.2" for uname -r.
+       echo "$UNAME_MACHINE"-dec-osf"`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`"
+       # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
+       exitcode=$?
+       trap '' 0
+       exit $exitcode ;;
+    Amiga*:UNIX_System_V:4.0:*)
+       echo m68k-unknown-sysv4
+       exit ;;
+    *:[Aa]miga[Oo][Ss]:*:*)
+       echo "$UNAME_MACHINE"-unknown-amigaos
+       exit ;;
+    *:[Mm]orph[Oo][Ss]:*:*)
+       echo "$UNAME_MACHINE"-unknown-morphos
+       exit ;;
+    *:OS/390:*:*)
+       echo i370-ibm-openedition
+       exit ;;
+    *:z/VM:*:*)
+       echo s390-ibm-zvmoe
+       exit ;;
+    *:OS400:*:*)
+       echo powerpc-ibm-os400
+       exit ;;
+    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
+       echo arm-acorn-riscix"$UNAME_RELEASE"
+       exit ;;
+    arm*:riscos:*:*|arm*:RISCOS:*:*)
+       echo arm-unknown-riscos
+       exit ;;
+    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
+       echo hppa1.1-hitachi-hiuxmpp
+       exit ;;
+    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
+       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
+       if test "`(/bin/universe) 2>/dev/null`" = att ; then
+               echo pyramid-pyramid-sysv3
+       else
+               echo pyramid-pyramid-bsd
+       fi
+       exit ;;
+    NILE*:*:*:dcosx)
+       echo pyramid-pyramid-svr4
+       exit ;;
+    DRS?6000:unix:4.0:6*)
+       echo sparc-icl-nx6
+       exit ;;
+    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
+       case `/usr/bin/uname -p` in
+           sparc) echo sparc-icl-nx7; exit ;;
+       esac ;;
+    s390x:SunOS:*:*)
+       echo "$UNAME_MACHINE"-ibm-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
+       exit ;;
+    sun4H:SunOS:5.*:*)
+       echo sparc-hal-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+       exit ;;
+    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
+       echo sparc-sun-solaris2"`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
+       exit ;;
+    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
+       echo i386-pc-auroraux"$UNAME_RELEASE"
+       exit ;;
+    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
+       UNAME_REL="`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'`"
+       case `isainfo -b` in
+           32)
+               echo i386-pc-solaris2"$UNAME_REL"
+               ;;
+           64)
+               echo x86_64-pc-solaris2"$UNAME_REL"
+               ;;
+       esac
+       exit ;;
+    sun4*:SunOS:6*:*)
+       # According to config.sub, this is the proper way to canonicalize
+       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
+       # it's likely to be more like Solaris than SunOS4.
+       echo sparc-sun-solaris3"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+       exit ;;
+    sun4*:SunOS:*:*)
+       case "`/usr/bin/arch -k`" in
+           Series*|S4*)
+               UNAME_RELEASE=`uname -v`
+               ;;
+       esac
+       # Japanese Language versions have a version number like `4.1.3-JL'.
+       echo sparc-sun-sunos"`echo "$UNAME_RELEASE"|sed -e 's/-/_/'`"
+       exit ;;
+    sun3*:SunOS:*:*)
+       echo m68k-sun-sunos"$UNAME_RELEASE"
+       exit ;;
+    sun*:*:4.2BSD:*)
+       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+       test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3
+       case "`/bin/arch`" in
+           sun3)
+               echo m68k-sun-sunos"$UNAME_RELEASE"
+               ;;
+           sun4)
+               echo sparc-sun-sunos"$UNAME_RELEASE"
+               ;;
+       esac
+       exit ;;
+    aushp:SunOS:*:*)
+       echo sparc-auspex-sunos"$UNAME_RELEASE"
+       exit ;;
+    # The situation for MiNT is a little confusing.  The machine name
+    # can be virtually everything (everything which is not
+    # "atarist" or "atariste" at least should have a processor
+    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
+    # to the lowercase version "mint" (or "freemint").  Finally
+    # the system name "TOS" denotes a system which is actually not
+    # MiNT.  But MiNT is downward compatible to TOS, so this should
+    # be no problem.
+    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint"$UNAME_RELEASE"
+       exit ;;
+    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
+       echo m68k-atari-mint"$UNAME_RELEASE"
+       exit ;;
+    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
+       echo m68k-atari-mint"$UNAME_RELEASE"
+       exit ;;
+    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
+       echo m68k-milan-mint"$UNAME_RELEASE"
+       exit ;;
+    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
+       echo m68k-hades-mint"$UNAME_RELEASE"
+       exit ;;
+    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
+       echo m68k-unknown-mint"$UNAME_RELEASE"
+       exit ;;
+    m68k:machten:*:*)
+       echo m68k-apple-machten"$UNAME_RELEASE"
+       exit ;;
+    powerpc:machten:*:*)
+       echo powerpc-apple-machten"$UNAME_RELEASE"
+       exit ;;
+    RISC*:Mach:*:*)
+       echo mips-dec-mach_bsd4.3
+       exit ;;
+    RISC*:ULTRIX:*:*)
+       echo mips-dec-ultrix"$UNAME_RELEASE"
+       exit ;;
+    VAX*:ULTRIX*:*:*)
+       echo vax-dec-ultrix"$UNAME_RELEASE"
+       exit ;;
+    2020:CLIX:*:* | 2430:CLIX:*:*)
+       echo clipper-intergraph-clix"$UNAME_RELEASE"
+       exit ;;
+    mips:*:*:UMIPS | mips:*:*:RISCos)
+       set_cc_for_build
+       sed 's/^        //' << EOF > "$dummy.c"
+#ifdef __cplusplus
+#include <stdio.h>  /* for printf() prototype */
+       int main (int argc, char *argv[]) {
+#else
+       int main (argc, argv) int argc; char *argv[]; {
+#endif
+       #if defined (host_mips) && defined (MIPSEB)
+       #if defined (SYSTYPE_SYSV)
+         printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_SVR4)
+         printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0);
+       #endif
+       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
+         printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0);
+       #endif
+       #endif
+         exit (-1);
+       }
+EOF
+       $CC_FOR_BUILD -o "$dummy" "$dummy.c" &&
+         dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` &&
+         SYSTEM_NAME=`"$dummy" "$dummyarg"` &&
+           { echo "$SYSTEM_NAME"; exit; }
+       echo mips-mips-riscos"$UNAME_RELEASE"
+       exit ;;
+    Motorola:PowerMAX_OS:*:*)
+       echo powerpc-motorola-powermax
+       exit ;;
+    Motorola:*:4.3:PL8-*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
+       echo powerpc-harris-powermax
+       exit ;;
+    Night_Hawk:Power_UNIX:*:*)
+       echo powerpc-harris-powerunix
+       exit ;;
+    m88k:CX/UX:7*:*)
+       echo m88k-harris-cxux7
+       exit ;;
+    m88k:*:4*:R4*)
+       echo m88k-motorola-sysv4
+       exit ;;
+    m88k:*:3*:R3*)
+       echo m88k-motorola-sysv3
+       exit ;;
+    AViiON:dgux:*:*)
+       # DG/UX returns AViiON for all architectures
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
+       if [ "$UNAME_PROCESSOR" = mc88100 ] || [ "$UNAME_PROCESSOR" = mc88110 ]
+       then
+           if [ "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx ] || \
+              [ "$TARGET_BINARY_INTERFACE"x = x ]
+           then
+               echo m88k-dg-dgux"$UNAME_RELEASE"
+           else
+               echo m88k-dg-dguxbcs"$UNAME_RELEASE"
+           fi
+       else
+           echo i586-dg-dgux"$UNAME_RELEASE"
+       fi
+       exit ;;
+    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
+       echo m88k-dolphin-sysv3
+       exit ;;
+    M88*:*:R3*:*)
+       # Delta 88k system running SVR3
+       echo m88k-motorola-sysv3
+       exit ;;
+    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
+       echo m88k-tektronix-sysv3
+       exit ;;
+    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
+       echo m68k-tektronix-bsd
+       exit ;;
+    *:IRIX*:*:*)
+       echo mips-sgi-irix"`echo "$UNAME_RELEASE"|sed -e 's/-/_/g'`"
+       exit ;;
+    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
+       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
+       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
+    i*86:AIX:*:*)
+       echo i386-ibm-aix
+       exit ;;
+    ia64:AIX:*:*)
+       if [ -x /usr/bin/oslevel ] ; then
+               IBM_REV=`/usr/bin/oslevel`
+       else
+               IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+       fi
+       echo "$UNAME_MACHINE"-ibm-aix"$IBM_REV"
+       exit ;;
+    *:AIX:2:3)
+       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
+               set_cc_for_build
+               sed 's/^                //' << EOF > "$dummy.c"
+               #include <sys/systemcfg.h>
+
+               main()
+                       {
+                       if (!__power_pc())
+                               exit(1);
+                       puts("powerpc-ibm-aix3.2.5");
+                       exit(0);
+                       }
+EOF
+               if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"`
+               then
+                       echo "$SYSTEM_NAME"
+               else
+                       echo rs6000-ibm-aix3.2.5
+               fi
+       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
+               echo rs6000-ibm-aix3.2.4
+       else
+               echo rs6000-ibm-aix3.2
+       fi
+       exit ;;
+    *:AIX:*:[4567])
+       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
+       if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then
+               IBM_ARCH=rs6000
+       else
+               IBM_ARCH=powerpc
+       fi
+       if [ -x /usr/bin/lslpp ] ; then
+               IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc |
+                          awk -F: '{ print $3 }' | sed s/[0-9]*$/0/`
+       else
+               IBM_REV="$UNAME_VERSION.$UNAME_RELEASE"
+       fi
+       echo "$IBM_ARCH"-ibm-aix"$IBM_REV"
+       exit ;;
+    *:AIX:*:*)
+       echo rs6000-ibm-aix
+       exit ;;
+    ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*)
+       echo romp-ibm-bsd4.4
+       exit ;;
+    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
+       echo romp-ibm-bsd"$UNAME_RELEASE"   # 4.3 with uname added to
+       exit ;;                             # report: romp-ibm BSD 4.3
+    *:BOSX:*:*)
+       echo rs6000-bull-bosx
+       exit ;;
+    DPX/2?00:B.O.S.:*:*)
+       echo m68k-bull-sysv3
+       exit ;;
+    9000/[34]??:4.3bsd:1.*:*)
+       echo m68k-hp-bsd
+       exit ;;
+    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
+       echo m68k-hp-bsd4.4
+       exit ;;
+    9000/[34678]??:HP-UX:*:*)
+       HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+       case "$UNAME_MACHINE" in
+           9000/31?)            HP_ARCH=m68000 ;;
+           9000/[34]??)         HP_ARCH=m68k ;;
+           9000/[678][0-9][0-9])
+               if [ -x /usr/bin/getconf ]; then
+                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
+                   sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
+                   case "$sc_cpu_version" in
+                     523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0
+                     528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1
+                     532)                      # CPU_PA_RISC2_0
+                       case "$sc_kernel_bits" in
+                         32) HP_ARCH=hppa2.0n ;;
+                         64) HP_ARCH=hppa2.0w ;;
+                         '') HP_ARCH=hppa2.0 ;;   # HP-UX 10.20
+                       esac ;;
+                   esac
+               fi
+               if [ "$HP_ARCH" = "" ]; then
+                   set_cc_for_build
+                   sed 's/^            //' << EOF > "$dummy.c"
+
+               #define _HPUX_SOURCE
+               #include <stdlib.h>
+               #include <unistd.h>
+
+               int main ()
+               {
+               #if defined(_SC_KERNEL_BITS)
+                   long bits = sysconf(_SC_KERNEL_BITS);
+               #endif
+                   long cpu  = sysconf (_SC_CPU_VERSION);
+
+                   switch (cpu)
+                       {
+                       case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+                       case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+                       case CPU_PA_RISC2_0:
+               #if defined(_SC_KERNEL_BITS)
+                           switch (bits)
+                               {
+                               case 64: puts ("hppa2.0w"); break;
+                               case 32: puts ("hppa2.0n"); break;
+                               default: puts ("hppa2.0"); break;
+                               } break;
+               #else  /* !defined(_SC_KERNEL_BITS) */
+                           puts ("hppa2.0"); break;
+               #endif
+                       default: puts ("hppa1.0"); break;
+                       }
+                   exit (0);
+               }
+EOF
+                   (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"`
+                   test -z "$HP_ARCH" && HP_ARCH=hppa
+               fi ;;
+       esac
+       if [ "$HP_ARCH" = hppa2.0w ]
+       then
+           set_cc_for_build
+
+           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
+           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
+           # generating 64-bit code.  GNU and HP use different nomenclature:
+           #
+           # $ CC_FOR_BUILD=cc ./config.guess
+           # => hppa2.0w-hp-hpux11.23
+           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
+           # => hppa64-hp-hpux11.23
+
+           if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) |
+               grep -q __LP64__
+           then
+               HP_ARCH=hppa2.0w
+           else
+               HP_ARCH=hppa64
+           fi
+       fi
+       echo "$HP_ARCH"-hp-hpux"$HPUX_REV"
+       exit ;;
+    ia64:HP-UX:*:*)
+       HPUX_REV=`echo "$UNAME_RELEASE"|sed -e 's/[^.]*.[0B]*//'`
+       echo ia64-hp-hpux"$HPUX_REV"
+       exit ;;
+    3050*:HI-UX:*:*)
+       set_cc_for_build
+       sed 's/^        //' << EOF > "$dummy.c"
+       #include <unistd.h>
+       int
+       main ()
+       {
+         long cpu = sysconf (_SC_CPU_VERSION);
+         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
+            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
+            results, however.  */
+         if (CPU_IS_PA_RISC (cpu))
+           {
+             switch (cpu)
+               {
+                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
+                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
+                 default: puts ("hppa-hitachi-hiuxwe2"); break;
+               }
+           }
+         else if (CPU_IS_HP_MC68K (cpu))
+           puts ("m68k-hitachi-hiuxwe2");
+         else puts ("unknown-hitachi-hiuxwe2");
+         exit (0);
+       }
+EOF
+       $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` &&
+               { echo "$SYSTEM_NAME"; exit; }
+       echo unknown-hitachi-hiuxwe2
+       exit ;;
+    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*)
+       echo hppa1.1-hp-bsd
+       exit ;;
+    9000/8??:4.3bsd:*:*)
+       echo hppa1.0-hp-bsd
+       exit ;;
+    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
+       echo hppa1.0-hp-mpeix
+       exit ;;
+    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*)
+       echo hppa1.1-hp-osf
+       exit ;;
+    hp8??:OSF1:*:*)
+       echo hppa1.0-hp-osf
+       exit ;;
+    i*86:OSF1:*:*)
+       if [ -x /usr/sbin/sysversion ] ; then
+           echo "$UNAME_MACHINE"-unknown-osf1mk
+       else
+           echo "$UNAME_MACHINE"-unknown-osf1
+       fi
+       exit ;;
+    parisc*:Lites*:*:*)
+       echo hppa1.1-hp-lites
+       exit ;;
+    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
+       echo c1-convex-bsd
+       exit ;;
+    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
+       if getsysinfo -f scalar_acc
+       then echo c32-convex-bsd
+       else echo c2-convex-bsd
+       fi
+       exit ;;
+    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
+       echo c34-convex-bsd
+       exit ;;
+    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
+       echo c38-convex-bsd
+       exit ;;
+    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
+       echo c4-convex-bsd
+       exit ;;
+    CRAY*Y-MP:*:*:*)
+       echo ymp-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*[A-Z]90:*:*:*)
+       echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \
+       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
+             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
+             -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*TS:*:*:*)
+       echo t90-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*T3E:*:*:*)
+       echo alphaev5-cray-unicosmk"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    CRAY*SV1:*:*:*)
+       echo sv1-cray-unicos"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    *:UNICOS/mp:*:*)
+       echo craynv-cray-unicosmp"$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'
+       exit ;;
+    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
+       FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz`
+       FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+       FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'`
+       echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    5000:UNIX_System_V:4.*:*)
+       FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'`
+       FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'`
+       echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
+       exit ;;
+    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
+       echo "$UNAME_MACHINE"-pc-bsdi"$UNAME_RELEASE"
+       exit ;;
+    sparc*:BSD/OS:*:*)
+       echo sparc-unknown-bsdi"$UNAME_RELEASE"
+       exit ;;
+    *:BSD/OS:*:*)
+       echo "$UNAME_MACHINE"-unknown-bsdi"$UNAME_RELEASE"
+       exit ;;
+    arm:FreeBSD:*:*)
+       UNAME_PROCESSOR=`uname -p`
+       set_cc_for_build
+       if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_PCS_VFP
+       then
+           echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabi
+       else
+           echo "${UNAME_PROCESSOR}"-unknown-freebsd"`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`"-gnueabihf
+       fi
+       exit ;;
+    *:FreeBSD:*:*)
+       UNAME_PROCESSOR=`/usr/bin/uname -p`
+       case "$UNAME_PROCESSOR" in
+           amd64)
+               UNAME_PROCESSOR=x86_64 ;;
+           i386)
+               UNAME_PROCESSOR=i586 ;;
+       esac
+       echo "$UNAME_PROCESSOR"-unknown-freebsd"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
+       exit ;;
+    i*:CYGWIN*:*)
+       echo "$UNAME_MACHINE"-pc-cygwin
+       exit ;;
+    *:MINGW64*:*)
+       echo "$UNAME_MACHINE"-pc-mingw64
+       exit ;;
+    *:MINGW*:*)
+       echo "$UNAME_MACHINE"-pc-mingw32
+       exit ;;
+    *:MSYS*:*)
+       echo "$UNAME_MACHINE"-pc-msys
+       exit ;;
+    i*:PW*:*)
+       echo "$UNAME_MACHINE"-pc-pw32
+       exit ;;
+    *:Interix*:*)
+       case "$UNAME_MACHINE" in
+           x86)
+               echo i586-pc-interix"$UNAME_RELEASE"
+               exit ;;
+           authenticamd | genuineintel | EM64T)
+               echo x86_64-unknown-interix"$UNAME_RELEASE"
+               exit ;;
+           IA64)
+               echo ia64-unknown-interix"$UNAME_RELEASE"
+               exit ;;
+       esac ;;
+    i*:UWIN*:*)
+       echo "$UNAME_MACHINE"-pc-uwin
+       exit ;;
+    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
+       echo x86_64-unknown-cygwin
+       exit ;;
+    prep*:SunOS:5.*:*)
+       echo powerpcle-unknown-solaris2"`echo "$UNAME_RELEASE"|sed -e 's/[^.]*//'`"
+       exit ;;
+    *:GNU:*:*)
+       # the GNU system
+       echo "`echo "$UNAME_MACHINE"|sed -e 's,[-/].*$,,'`-unknown-$LIBC`echo "$UNAME_RELEASE"|sed -e 's,/.*$,,'`"
+       exit ;;
+    *:GNU/*:*:*)
+       # other systems with GNU libc and userland
+       echo "$UNAME_MACHINE-unknown-`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"``echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`-$LIBC"
+       exit ;;
+    *:Minix:*:*)
+       echo "$UNAME_MACHINE"-unknown-minix
+       exit ;;
+    aarch64:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    aarch64_be:Linux:*:*)
+       UNAME_MACHINE=aarch64_be
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    alpha:Linux:*:*)
+       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
+         EV5)   UNAME_MACHINE=alphaev5 ;;
+         EV56)  UNAME_MACHINE=alphaev56 ;;
+         PCA56) UNAME_MACHINE=alphapca56 ;;
+         PCA57) UNAME_MACHINE=alphapca56 ;;
+         EV6)   UNAME_MACHINE=alphaev6 ;;
+         EV67)  UNAME_MACHINE=alphaev67 ;;
+         EV68*) UNAME_MACHINE=alphaev68 ;;
+       esac
+       objdump --private-headers /bin/sh | grep -q ld.so.1
+       if test "$?" = 0 ; then LIBC=gnulibc1 ; fi
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    arc:Linux:*:* | arceb:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    arm*:Linux:*:*)
+       set_cc_for_build
+       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
+           | grep -q __ARM_EABI__
+       then
+           echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       else
+           if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
+               | grep -q __ARM_PCS_VFP
+           then
+               echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabi
+           else
+               echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"eabihf
+           fi
+       fi
+       exit ;;
+    avr32*:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    cris:Linux:*:*)
+       echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
+       exit ;;
+    crisv32:Linux:*:*)
+       echo "$UNAME_MACHINE"-axis-linux-"$LIBC"
+       exit ;;
+    e2k:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    frv:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    hexagon:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    i*86:Linux:*:*)
+       echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+       exit ;;
+    ia64:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    k1om:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    m32r*:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    m68*:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    mips:Linux:*:* | mips64:Linux:*:*)
+       set_cc_for_build
+       sed 's/^        //' << EOF > "$dummy.c"
+       #undef CPU
+       #undef ${UNAME_MACHINE}
+       #undef ${UNAME_MACHINE}el
+       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
+       CPU=${UNAME_MACHINE}el
+       #else
+       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
+       CPU=${UNAME_MACHINE}
+       #else
+       CPU=
+       #endif
+       #endif
+EOF
+       eval "`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU'`"
+       test "x$CPU" != x && { echo "$CPU-unknown-linux-$LIBC"; exit; }
+       ;;
+    mips64el:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    openrisc*:Linux:*:*)
+       echo or1k-unknown-linux-"$LIBC"
+       exit ;;
+    or32:Linux:*:* | or1k*:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    padre:Linux:*:*)
+       echo sparc-unknown-linux-"$LIBC"
+       exit ;;
+    parisc64:Linux:*:* | hppa64:Linux:*:*)
+       echo hppa64-unknown-linux-"$LIBC"
+       exit ;;
+    parisc:Linux:*:* | hppa:Linux:*:*)
+       # Look for CPU level
+       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
+         PA7*) echo hppa1.1-unknown-linux-"$LIBC" ;;
+         PA8*) echo hppa2.0-unknown-linux-"$LIBC" ;;
+         *)    echo hppa-unknown-linux-"$LIBC" ;;
+       esac
+       exit ;;
+    ppc64:Linux:*:*)
+       echo powerpc64-unknown-linux-"$LIBC"
+       exit ;;
+    ppc:Linux:*:*)
+       echo powerpc-unknown-linux-"$LIBC"
+       exit ;;
+    ppc64le:Linux:*:*)
+       echo powerpc64le-unknown-linux-"$LIBC"
+       exit ;;
+    ppcle:Linux:*:*)
+       echo powerpcle-unknown-linux-"$LIBC"
+       exit ;;
+    riscv32:Linux:*:* | riscv64:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    s390:Linux:*:* | s390x:Linux:*:*)
+       echo "$UNAME_MACHINE"-ibm-linux-"$LIBC"
+       exit ;;
+    sh64*:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    sh*:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    sparc:Linux:*:* | sparc64:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    tile*:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    vax:Linux:*:*)
+       echo "$UNAME_MACHINE"-dec-linux-"$LIBC"
+       exit ;;
+    x86_64:Linux:*:*)
+       echo "$UNAME_MACHINE"-pc-linux-"$LIBC"
+       exit ;;
+    xtensa*:Linux:*:*)
+       echo "$UNAME_MACHINE"-unknown-linux-"$LIBC"
+       exit ;;
+    i*86:DYNIX/ptx:4*:*)
+       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
+       # earlier versions are messed up and put the nodename in both
+       # sysname and nodename.
+       echo i386-sequent-sysv4
+       exit ;;
+    i*86:UNIX_SV:4.2MP:2.*)
+       # Unixware is an offshoot of SVR4, but it has its own version
+       # number series starting with 2...
+       # I am not positive that other SVR4 systems won't match this,
+       # I just have to hope.  -- rms.
+       # Use sysv4.2uw... so that sysv4* matches it.
+       echo "$UNAME_MACHINE"-pc-sysv4.2uw"$UNAME_VERSION"
+       exit ;;
+    i*86:OS/2:*:*)
+       # If we were able to find `uname', then EMX Unix compatibility
+       # is probably installed.
+       echo "$UNAME_MACHINE"-pc-os2-emx
+       exit ;;
+    i*86:XTS-300:*:STOP)
+       echo "$UNAME_MACHINE"-unknown-stop
+       exit ;;
+    i*86:atheos:*:*)
+       echo "$UNAME_MACHINE"-unknown-atheos
+       exit ;;
+    i*86:syllable:*:*)
+       echo "$UNAME_MACHINE"-pc-syllable
+       exit ;;
+    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
+       echo i386-unknown-lynxos"$UNAME_RELEASE"
+       exit ;;
+    i*86:*DOS:*:*)
+       echo "$UNAME_MACHINE"-pc-msdosdjgpp
+       exit ;;
+    i*86:*:4.*:*)
+       UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'`
+       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
+               echo "$UNAME_MACHINE"-univel-sysv"$UNAME_REL"
+       else
+               echo "$UNAME_MACHINE"-pc-sysv"$UNAME_REL"
+       fi
+       exit ;;
+    i*86:*:5:[678]*)
+       # UnixWare 7.x, OpenUNIX and OpenServer 6.
+       case `/bin/uname -X | grep "^Machine"` in
+           *486*)           UNAME_MACHINE=i486 ;;
+           *Pentium)        UNAME_MACHINE=i586 ;;
+           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
+       esac
+       echo "$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}{$UNAME_VERSION}"
+       exit ;;
+    i*86:*:3.2:*)
+       if test -f /usr/options/cb.name; then
+               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
+               echo "$UNAME_MACHINE"-pc-isc"$UNAME_REL"
+       elif /bin/uname -X 2>/dev/null >/dev/null ; then
+               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
+               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
+               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
+                       && UNAME_MACHINE=i586
+               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
+                       && UNAME_MACHINE=i686
+               echo "$UNAME_MACHINE"-pc-sco"$UNAME_REL"
+       else
+               echo "$UNAME_MACHINE"-pc-sysv32
+       fi
+       exit ;;
+    pc:*:*:*)
+       # Left here for compatibility:
+       # uname -m prints for DJGPP always 'pc', but it prints nothing about
+       # the processor, so we play safe by assuming i586.
+       # Note: whatever this is, it MUST be the same as what config.sub
+       # prints for the "djgpp" host, or else GDB configure will decide that
+       # this is a cross-build.
+       echo i586-pc-msdosdjgpp
+       exit ;;
+    Intel:Mach:3*:*)
+       echo i386-pc-mach3
+       exit ;;
+    paragon:*:*:*)
+       echo i860-intel-osf1
+       exit ;;
+    i860:*:4.*:*) # i860-SVR4
+       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
+         echo i860-stardent-sysv"$UNAME_RELEASE" # Stardent Vistra i860-SVR4
+       else # Add other i860-SVR4 vendors below as they are discovered.
+         echo i860-unknown-sysv"$UNAME_RELEASE"  # Unknown i860-SVR4
+       fi
+       exit ;;
+    mini*:CTIX:SYS*5:*)
+       # "miniframe"
+       echo m68010-convergent-sysv
+       exit ;;
+    mc68k:UNIX:SYSTEM5:3.51m)
+       echo m68k-convergent-sysv
+       exit ;;
+    M680?0:D-NIX:5.3:*)
+       echo m68k-diab-dnix
+       exit ;;
+    M68*:*:R3V[5678]*:*)
+       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
+    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
+       OS_REL=''
+       test -r /etc/.relid \
+       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+         && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+         && { echo i486-ncr-sysv4; exit; } ;;
+    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
+       OS_REL='.3'
+       test -r /etc/.relid \
+           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
+       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
+           && { echo i486-ncr-sysv4.3"$OS_REL"; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
+           && { echo i586-ncr-sysv4.3"$OS_REL"; exit; }
+       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
+           && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;;
+    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
+       echo m68k-unknown-lynxos"$UNAME_RELEASE"
+       exit ;;
+    mc68030:UNIX_System_V:4.*:*)
+       echo m68k-atari-sysv4
+       exit ;;
+    TSUNAMI:LynxOS:2.*:*)
+       echo sparc-unknown-lynxos"$UNAME_RELEASE"
+       exit ;;
+    rs6000:LynxOS:2.*:*)
+       echo rs6000-unknown-lynxos"$UNAME_RELEASE"
+       exit ;;
+    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
+       echo powerpc-unknown-lynxos"$UNAME_RELEASE"
+       exit ;;
+    SM[BE]S:UNIX_SV:*:*)
+       echo mips-dde-sysv"$UNAME_RELEASE"
+       exit ;;
+    RM*:ReliantUNIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    RM*:SINIX-*:*:*)
+       echo mips-sni-sysv4
+       exit ;;
+    *:SINIX-*:*:*)
+       if uname -p 2>/dev/null >/dev/null ; then
+               UNAME_MACHINE=`(uname -p) 2>/dev/null`
+               echo "$UNAME_MACHINE"-sni-sysv4
+       else
+               echo ns32k-sni-sysv
+       fi
+       exit ;;
+    PENTIUM:*:4.0*:*)  # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+                       # says <Richard.M.Bartel@ccMail.Census.GOV>
+       echo i586-unisys-sysv4
+       exit ;;
+    *:UNIX_System_V:4*:FTX*)
+       # From Gerald Hewes <hewes@openmarket.com>.
+       # How about differentiating between stratus architectures? -djm
+       echo hppa1.1-stratus-sysv4
+       exit ;;
+    *:*:*:FTX*)
+       # From seanf@swdc.stratus.com.
+       echo i860-stratus-sysv4
+       exit ;;
+    i*86:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo "$UNAME_MACHINE"-stratus-vos
+       exit ;;
+    *:VOS:*:*)
+       # From Paul.Green@stratus.com.
+       echo hppa1.1-stratus-vos
+       exit ;;
+    mc68*:A/UX:*:*)
+       echo m68k-apple-aux"$UNAME_RELEASE"
+       exit ;;
+    news*:NEWS-OS:6*:*)
+       echo mips-sony-newsos6
+       exit ;;
+    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
+       if [ -d /usr/nec ]; then
+               echo mips-nec-sysv"$UNAME_RELEASE"
+       else
+               echo mips-unknown-sysv"$UNAME_RELEASE"
+       fi
+       exit ;;
+    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
+       echo powerpc-be-beos
+       exit ;;
+    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
+       echo powerpc-apple-beos
+       exit ;;
+    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
+       echo i586-pc-beos
+       exit ;;
+    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
+       echo i586-pc-haiku
+       exit ;;
+    x86_64:Haiku:*:*)
+       echo x86_64-unknown-haiku
+       exit ;;
+    SX-4:SUPER-UX:*:*)
+       echo sx4-nec-superux"$UNAME_RELEASE"
+       exit ;;
+    SX-5:SUPER-UX:*:*)
+       echo sx5-nec-superux"$UNAME_RELEASE"
+       exit ;;
+    SX-6:SUPER-UX:*:*)
+       echo sx6-nec-superux"$UNAME_RELEASE"
+       exit ;;
+    SX-7:SUPER-UX:*:*)
+       echo sx7-nec-superux"$UNAME_RELEASE"
+       exit ;;
+    SX-8:SUPER-UX:*:*)
+       echo sx8-nec-superux"$UNAME_RELEASE"
+       exit ;;
+    SX-8R:SUPER-UX:*:*)
+       echo sx8r-nec-superux"$UNAME_RELEASE"
+       exit ;;
+    SX-ACE:SUPER-UX:*:*)
+       echo sxace-nec-superux"$UNAME_RELEASE"
+       exit ;;
+    Power*:Rhapsody:*:*)
+       echo powerpc-apple-rhapsody"$UNAME_RELEASE"
+       exit ;;
+    *:Rhapsody:*:*)
+       echo "$UNAME_MACHINE"-apple-rhapsody"$UNAME_RELEASE"
+       exit ;;
+    *:Darwin:*:*)
+       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
+       set_cc_for_build
+       if test "$UNAME_PROCESSOR" = unknown ; then
+           UNAME_PROCESSOR=powerpc
+       fi
+       if test "`echo "$UNAME_RELEASE" | sed -e 's/\..*//'`" -le 10 ; then
+           if [ "$CC_FOR_BUILD" != no_compiler_found ]; then
+               if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
+                      (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+                      grep IS_64BIT_ARCH >/dev/null
+               then
+                   case $UNAME_PROCESSOR in
+                       i386) UNAME_PROCESSOR=x86_64 ;;
+                       powerpc) UNAME_PROCESSOR=powerpc64 ;;
+                   esac
+               fi
+               # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc
+               if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \
+                      (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \
+                      grep IS_PPC >/dev/null
+               then
+                   UNAME_PROCESSOR=powerpc
+               fi
+           fi
+       elif test "$UNAME_PROCESSOR" = i386 ; then
+           # Avoid executing cc on OS X 10.9, as it ships with a stub
+           # that puts up a graphical alert prompting to install
+           # developer tools.  Any system running Mac OS X 10.7 or
+           # later (Darwin 11 and later) is required to have a 64-bit
+           # processor. This is not true of the ARM version of Darwin
+           # that Apple uses in portable devices.
+           UNAME_PROCESSOR=x86_64
+       fi
+       echo "$UNAME_PROCESSOR"-apple-darwin"$UNAME_RELEASE"
+       exit ;;
+    *:procnto*:*:* | *:QNX:[0123456789]*:*)
+       UNAME_PROCESSOR=`uname -p`
+       if test "$UNAME_PROCESSOR" = x86; then
+               UNAME_PROCESSOR=i386
+               UNAME_MACHINE=pc
+       fi
+       echo "$UNAME_PROCESSOR"-"$UNAME_MACHINE"-nto-qnx"$UNAME_RELEASE"
+       exit ;;
+    *:QNX:*:4*)
+       echo i386-pc-qnx
+       exit ;;
+    NEO-*:NONSTOP_KERNEL:*:*)
+       echo neo-tandem-nsk"$UNAME_RELEASE"
+       exit ;;
+    NSE-*:NONSTOP_KERNEL:*:*)
+       echo nse-tandem-nsk"$UNAME_RELEASE"
+       exit ;;
+    NSR-*:NONSTOP_KERNEL:*:*)
+       echo nsr-tandem-nsk"$UNAME_RELEASE"
+       exit ;;
+    NSV-*:NONSTOP_KERNEL:*:*)
+       echo nsv-tandem-nsk"$UNAME_RELEASE"
+       exit ;;
+    NSX-*:NONSTOP_KERNEL:*:*)
+       echo nsx-tandem-nsk"$UNAME_RELEASE"
+       exit ;;
+    *:NonStop-UX:*:*)
+       echo mips-compaq-nonstopux
+       exit ;;
+    BS2000:POSIX*:*:*)
+       echo bs2000-siemens-sysv
+       exit ;;
+    DS/*:UNIX_System_V:*:*)
+       echo "$UNAME_MACHINE"-"$UNAME_SYSTEM"-"$UNAME_RELEASE"
+       exit ;;
+    *:Plan9:*:*)
+       # "uname -m" is not consistent, so use $cputype instead. 386
+       # is converted to i386 for consistency with other x86
+       # operating systems.
+       # shellcheck disable=SC2154
+       if test "$cputype" = 386; then
+           UNAME_MACHINE=i386
+       else
+           UNAME_MACHINE="$cputype"
+       fi
+       echo "$UNAME_MACHINE"-unknown-plan9
+       exit ;;
+    *:TOPS-10:*:*)
+       echo pdp10-unknown-tops10
+       exit ;;
+    *:TENEX:*:*)
+       echo pdp10-unknown-tenex
+       exit ;;
+    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
+       echo pdp10-dec-tops20
+       exit ;;
+    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
+       echo pdp10-xkl-tops20
+       exit ;;
+    *:TOPS-20:*:*)
+       echo pdp10-unknown-tops20
+       exit ;;
+    *:ITS:*:*)
+       echo pdp10-unknown-its
+       exit ;;
+    SEI:*:*:SEIUX)
+       echo mips-sei-seiux"$UNAME_RELEASE"
+       exit ;;
+    *:DragonFly:*:*)
+       echo "$UNAME_MACHINE"-unknown-dragonfly"`echo "$UNAME_RELEASE"|sed -e 's/[-(].*//'`"
+       exit ;;
+    *:*VMS:*:*)
+       UNAME_MACHINE=`(uname -p) 2>/dev/null`
+       case "$UNAME_MACHINE" in
+           A*) echo alpha-dec-vms ; exit ;;
+           I*) echo ia64-dec-vms ; exit ;;
+           V*) echo vax-dec-vms ; exit ;;
+       esac ;;
+    *:XENIX:*:SysV)
+       echo i386-pc-xenix
+       exit ;;
+    i*86:skyos:*:*)
+       echo "$UNAME_MACHINE"-pc-skyos"`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'`"
+       exit ;;
+    i*86:rdos:*:*)
+       echo "$UNAME_MACHINE"-pc-rdos
+       exit ;;
+    i*86:AROS:*:*)
+       echo "$UNAME_MACHINE"-pc-aros
+       exit ;;
+    x86_64:VMkernel:*:*)
+       echo "$UNAME_MACHINE"-unknown-esx
+       exit ;;
+    amd64:Isilon\ OneFS:*:*)
+       echo x86_64-unknown-onefs
+       exit ;;
+esac
+
+echo "$0: unable to guess system type" >&2
+
+case "$UNAME_MACHINE:$UNAME_SYSTEM" in
+    mips:Linux | mips64:Linux)
+       # If we got here on MIPS GNU/Linux, output extra information.
+       cat >&2 <<EOF
+
+NOTE: MIPS GNU/Linux systems require a C compiler to fully recognize
+the system type. Please install a C compiler and try again.
+EOF
+       ;;
+esac
+
+cat >&2 <<EOF
+
+This script (version $timestamp), has failed to recognize the
+operating system you are using. If your script is old, overwrite *all*
+copies of config.guess and config.sub with the latest versions from:
+
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess
+and
+  https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+
+If $0 has already been updated, send the following data and any
+information you think might be pertinent to config-patches@gnu.org to
+provide the necessary information to handle your system.
+
+config.guess timestamp = $timestamp
+
+uname -m = `(uname -m) 2>/dev/null || echo unknown`
+uname -r = `(uname -r) 2>/dev/null || echo unknown`
+uname -s = `(uname -s) 2>/dev/null || echo unknown`
+uname -v = `(uname -v) 2>/dev/null || echo unknown`
+
+/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
+/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
+
+hostinfo               = `(hostinfo) 2>/dev/null`
+/bin/universe          = `(/bin/universe) 2>/dev/null`
+/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
+/bin/arch              = `(/bin/arch) 2>/dev/null`
+/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
+/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
+
+UNAME_MACHINE = "$UNAME_MACHINE"
+UNAME_RELEASE = "$UNAME_RELEASE"
+UNAME_SYSTEM  = "$UNAME_SYSTEM"
+UNAME_VERSION = "$UNAME_VERSION"
+EOF
+
+exit 1
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/config.rpath b/build-aux/config.rpath
new file mode 100755 (executable)
index 0000000..fc5913d
--- /dev/null
@@ -0,0 +1,684 @@
+#! /bin/sh
+# Output a system dependent set of variables, describing how to set the
+# run time search path of shared libraries in an executable.
+#
+#   Copyright 1996-2018 Free Software Foundation, Inc.
+#   Taken from GNU libtool, 2001
+#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
+#
+#   This file is free software; the Free Software Foundation gives
+#   unlimited permission to copy and/or distribute it, with or without
+#   modifications, as long as this notice is preserved.
+#
+# The first argument passed to this file is the canonical host specification,
+#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or
+#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
+# should be set by the caller.
+#
+# The set of defined variables is at the end of this script.
+
+# Known limitations:
+# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
+#   than 256 bytes, otherwise the compiler driver will dump core. The only
+#   known workaround is to choose shorter directory names for the build
+#   directory and/or the installation directory.
+
+# All known linkers require a '.a' archive for static linking (except MSVC,
+# which needs '.lib').
+libext=a
+shrext=.so
+
+host="$1"
+host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
+host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
+host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
+
+# Code taken from libtool.m4's _LT_CC_BASENAME.
+
+for cc_temp in $CC""; do
+  case $cc_temp in
+    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
+    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
+    \-*) ;;
+    *) break;;
+  esac
+done
+cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
+
+# Code taken from libtool.m4's _LT_COMPILER_PIC.
+
+wl=
+if test "$GCC" = yes; then
+  wl='-Wl,'
+else
+  case "$host_os" in
+    aix*)
+      wl='-Wl,'
+      ;;
+    mingw* | cygwin* | pw32* | os2* | cegcc*)
+      ;;
+    hpux9* | hpux10* | hpux11*)
+      wl='-Wl,'
+      ;;
+    irix5* | irix6* | nonstopux*)
+      wl='-Wl,'
+      ;;
+    linux* | k*bsd*-gnu | kopensolaris*-gnu)
+      case $cc_basename in
+        ecc*)
+          wl='-Wl,'
+          ;;
+        icc* | ifort*)
+          wl='-Wl,'
+          ;;
+        lf95*)
+          wl='-Wl,'
+          ;;
+        nagfor*)
+          wl='-Wl,-Wl,,'
+          ;;
+        pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
+          wl='-Wl,'
+          ;;
+        ccc*)
+          wl='-Wl,'
+          ;;
+        xl* | bgxl* | bgf* | mpixl*)
+          wl='-Wl,'
+          ;;
+        como)
+          wl='-lopt='
+          ;;
+        *)
+          case `$CC -V 2>&1 | sed 5q` in
+            *Sun\ F* | *Sun*Fortran*)
+              wl=
+              ;;
+            *Sun\ C*)
+              wl='-Wl,'
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+    newsos6)
+      ;;
+    *nto* | *qnx*)
+      ;;
+    osf3* | osf4* | osf5*)
+      wl='-Wl,'
+      ;;
+    rdos*)
+      ;;
+    solaris*)
+      case $cc_basename in
+        f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
+          wl='-Qoption ld '
+          ;;
+        *)
+          wl='-Wl,'
+          ;;
+      esac
+      ;;
+    sunos4*)
+      wl='-Qoption ld '
+      ;;
+    sysv4 | sysv4.2uw2* | sysv4.3*)
+      wl='-Wl,'
+      ;;
+    sysv4*MP*)
+      ;;
+    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
+      wl='-Wl,'
+      ;;
+    unicos*)
+      wl='-Wl,'
+      ;;
+    uts4*)
+      ;;
+  esac
+fi
+
+# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
+
+hardcode_libdir_flag_spec=
+hardcode_libdir_separator=
+hardcode_direct=no
+hardcode_minus_L=no
+
+case "$host_os" in
+  cygwin* | mingw* | pw32* | cegcc*)
+    # FIXME: the MSVC++ port hasn't been tested in a loooong time
+    # When not using gcc, we currently assume that we are using
+    # Microsoft Visual C++.
+    if test "$GCC" != yes; then
+      with_gnu_ld=no
+    fi
+    ;;
+  interix*)
+    # we just hope/assume this is gcc and not c89 (= MSVC++)
+    with_gnu_ld=yes
+    ;;
+  openbsd*)
+    with_gnu_ld=no
+    ;;
+esac
+
+ld_shlibs=yes
+if test "$with_gnu_ld" = yes; then
+  # Set some defaults for GNU ld with shared library support. These
+  # are reset later if shared libraries are not supported. Putting them
+  # here allows them to be overridden if necessary.
+  # Unlike libtool, we use -rpath here, not --rpath, since the documented
+  # option of GNU ld is called -rpath, not --rpath.
+  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+  case "$host_os" in
+    aix[3-9]*)
+      # On AIX/PPC, the GNU linker is very broken
+      if test "$host_cpu" != ia64; then
+        ld_shlibs=no
+      fi
+      ;;
+    amigaos*)
+      case "$host_cpu" in
+        powerpc)
+          ;;
+        m68k)
+          hardcode_libdir_flag_spec='-L$libdir'
+          hardcode_minus_L=yes
+          ;;
+      esac
+      ;;
+    beos*)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    cygwin* | mingw* | pw32* | cegcc*)
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec='-L$libdir'
+      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    haiku*)
+      ;;
+    interix[3-9]*)
+      hardcode_direct=no
+      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+      ;;
+    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    netbsd*)
+      ;;
+    solaris*)
+      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
+        ld_shlibs=no
+      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
+      case `$LD -v 2>&1` in
+        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
+          ld_shlibs=no
+          ;;
+        *)
+          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
+          else
+            ld_shlibs=no
+          fi
+          ;;
+      esac
+      ;;
+    sunos4*)
+      hardcode_direct=yes
+      ;;
+    *)
+      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+  esac
+  if test "$ld_shlibs" = no; then
+    hardcode_libdir_flag_spec=
+  fi
+else
+  case "$host_os" in
+    aix3*)
+      # Note: this linker hardcodes the directories in LIBPATH if there
+      # are no directories specified by -L.
+      hardcode_minus_L=yes
+      if test "$GCC" = yes; then
+        # Neither direct hardcoding nor static linking is supported with a
+        # broken collect2.
+        hardcode_direct=unsupported
+      fi
+      ;;
+    aix[4-9]*)
+      if test "$host_cpu" = ia64; then
+        # On IA64, the linker does run time linking by default, so we don't
+        # have to do anything special.
+        aix_use_runtimelinking=no
+      else
+        aix_use_runtimelinking=no
+        # Test if we are trying to use run time linking or normal
+        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
+        # need to do runtime linking.
+        case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
+          for ld_flag in $LDFLAGS; do
+            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
+              aix_use_runtimelinking=yes
+              break
+            fi
+          done
+          ;;
+        esac
+      fi
+      hardcode_direct=yes
+      hardcode_libdir_separator=':'
+      if test "$GCC" = yes; then
+        case $host_os in aix4.[012]|aix4.[012].*)
+          collect2name=`${CC} -print-prog-name=collect2`
+          if test -f "$collect2name" && \
+            strings "$collect2name" | grep resolve_lib_name >/dev/null
+          then
+            # We have reworked collect2
+            :
+          else
+            # We have old collect2
+            hardcode_direct=unsupported
+            hardcode_minus_L=yes
+            hardcode_libdir_flag_spec='-L$libdir'
+            hardcode_libdir_separator=
+          fi
+          ;;
+        esac
+      fi
+      # Begin _LT_AC_SYS_LIBPATH_AIX.
+      echo 'int main () { return 0; }' > conftest.c
+      ${CC} ${LDFLAGS} conftest.c -o conftest
+      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      if test -z "$aix_libpath"; then
+        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
+}'`
+      fi
+      if test -z "$aix_libpath"; then
+        aix_libpath="/usr/lib:/lib"
+      fi
+      rm -f conftest.c conftest
+      # End _LT_AC_SYS_LIBPATH_AIX.
+      if test "$aix_use_runtimelinking" = yes; then
+        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+      else
+        if test "$host_cpu" = ia64; then
+          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
+        else
+          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
+        fi
+      fi
+      ;;
+    amigaos*)
+      case "$host_cpu" in
+        powerpc)
+          ;;
+        m68k)
+          hardcode_libdir_flag_spec='-L$libdir'
+          hardcode_minus_L=yes
+          ;;
+      esac
+      ;;
+    bsdi[45]*)
+      ;;
+    cygwin* | mingw* | pw32* | cegcc*)
+      # When not using gcc, we currently assume that we are using
+      # Microsoft Visual C++.
+      # hardcode_libdir_flag_spec is actually meaningless, as there is
+      # no search path for DLLs.
+      hardcode_libdir_flag_spec=' '
+      libext=lib
+      ;;
+    darwin* | rhapsody*)
+      hardcode_direct=no
+      if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
+        :
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    dgux*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    freebsd2.[01]*)
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    freebsd* | dragonfly*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    hpux9*)
+      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+      hardcode_libdir_separator=:
+      hardcode_direct=yes
+      # hardcode_minus_L: Not really in the search PATH,
+      # but as the default location of the library.
+      hardcode_minus_L=yes
+      ;;
+    hpux10*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        hardcode_direct=yes
+        # hardcode_minus_L: Not really in the search PATH,
+        # but as the default location of the library.
+        hardcode_minus_L=yes
+      fi
+      ;;
+    hpux11*)
+      if test "$with_gnu_ld" = no; then
+        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
+        hardcode_libdir_separator=:
+        case $host_cpu in
+          hppa*64*|ia64*)
+            hardcode_direct=no
+            ;;
+          *)
+            hardcode_direct=yes
+            # hardcode_minus_L: Not really in the search PATH,
+            # but as the default location of the library.
+            hardcode_minus_L=yes
+            ;;
+        esac
+      fi
+      ;;
+    irix5* | irix6* | nonstopux*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    netbsd*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      hardcode_direct=yes
+      ;;
+    newsos6)
+      hardcode_direct=yes
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    *nto* | *qnx*)
+      ;;
+    openbsd*)
+      if test -f /usr/libexec/ld.so; then
+        hardcode_direct=yes
+        if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
+          hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+        else
+          case "$host_os" in
+            openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
+              hardcode_libdir_flag_spec='-R$libdir'
+              ;;
+            *)
+              hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
+              ;;
+          esac
+        fi
+      else
+        ld_shlibs=no
+      fi
+      ;;
+    os2*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_minus_L=yes
+      ;;
+    osf3*)
+      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      hardcode_libdir_separator=:
+      ;;
+    osf4* | osf5*)
+      if test "$GCC" = yes; then
+        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
+      else
+        # Both cc and cxx compiler support -rpath directly
+        hardcode_libdir_flag_spec='-rpath $libdir'
+      fi
+      hardcode_libdir_separator=:
+      ;;
+    solaris*)
+      hardcode_libdir_flag_spec='-R$libdir'
+      ;;
+    sunos4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      hardcode_direct=yes
+      hardcode_minus_L=yes
+      ;;
+    sysv4)
+      case $host_vendor in
+        sni)
+          hardcode_direct=yes # is this really true???
+          ;;
+        siemens)
+          hardcode_direct=no
+          ;;
+        motorola)
+          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
+          ;;
+      esac
+      ;;
+    sysv4.3*)
+      ;;
+    sysv4*MP*)
+      if test -d /usr/nec; then
+        ld_shlibs=yes
+      fi
+      ;;
+    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
+      ;;
+    sysv5* | sco3.2v5* | sco5v6*)
+      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
+      hardcode_libdir_separator=':'
+      ;;
+    uts4*)
+      hardcode_libdir_flag_spec='-L$libdir'
+      ;;
+    *)
+      ld_shlibs=no
+      ;;
+  esac
+fi
+
+# Check dynamic linker characteristics
+# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
+# Unlike libtool.m4, here we don't care about _all_ names of the library, but
+# only about the one the linker finds when passed -lNAME. This is the last
+# element of library_names_spec in libtool.m4, or possibly two of them if the
+# linker has special search rules.
+library_names_spec=      # the last element of library_names_spec in libtool.m4
+libname_spec='lib$name'
+case "$host_os" in
+  aix3*)
+    library_names_spec='$libname.a'
+    ;;
+  aix[4-9]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  amigaos*)
+    case "$host_cpu" in
+      powerpc*)
+        library_names_spec='$libname$shrext' ;;
+      m68k)
+        library_names_spec='$libname.a' ;;
+    esac
+    ;;
+  beos*)
+    library_names_spec='$libname$shrext'
+    ;;
+  bsdi[45]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  cygwin* | mingw* | pw32* | cegcc*)
+    shrext=.dll
+    library_names_spec='$libname.dll.a $libname.lib'
+    ;;
+  darwin* | rhapsody*)
+    shrext=.dylib
+    library_names_spec='$libname$shrext'
+    ;;
+  dgux*)
+    library_names_spec='$libname$shrext'
+    ;;
+  freebsd[23].*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
+  freebsd* | dragonfly*)
+    library_names_spec='$libname$shrext'
+    ;;
+  gnu*)
+    library_names_spec='$libname$shrext'
+    ;;
+  haiku*)
+    library_names_spec='$libname$shrext'
+    ;;
+  hpux9* | hpux10* | hpux11*)
+    case $host_cpu in
+      ia64*)
+        shrext=.so
+        ;;
+      hppa*64*)
+        shrext=.sl
+        ;;
+      *)
+        shrext=.sl
+        ;;
+    esac
+    library_names_spec='$libname$shrext'
+    ;;
+  interix[3-9]*)
+    library_names_spec='$libname$shrext'
+    ;;
+  irix5* | irix6* | nonstopux*)
+    library_names_spec='$libname$shrext'
+    case "$host_os" in
+      irix5* | nonstopux*)
+        libsuff= shlibsuff=
+        ;;
+      *)
+        case $LD in
+          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
+          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
+          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
+          *) libsuff= shlibsuff= ;;
+        esac
+        ;;
+    esac
+    ;;
+  linux*oldld* | linux*aout* | linux*coff*)
+    ;;
+  linux* | k*bsd*-gnu | kopensolaris*-gnu)
+    library_names_spec='$libname$shrext'
+    ;;
+  knetbsd*-gnu)
+    library_names_spec='$libname$shrext'
+    ;;
+  netbsd*)
+    library_names_spec='$libname$shrext'
+    ;;
+  newsos6)
+    library_names_spec='$libname$shrext'
+    ;;
+  *nto* | *qnx*)
+    library_names_spec='$libname$shrext'
+    ;;
+  openbsd*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
+  os2*)
+    libname_spec='$name'
+    shrext=.dll
+    library_names_spec='$libname.a'
+    ;;
+  osf3* | osf4* | osf5*)
+    library_names_spec='$libname$shrext'
+    ;;
+  rdos*)
+    ;;
+  solaris*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sunos4*)
+    library_names_spec='$libname$shrext$versuffix'
+    ;;
+  sysv4 | sysv4.3*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sysv4*MP*)
+    library_names_spec='$libname$shrext'
+    ;;
+  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
+    library_names_spec='$libname$shrext'
+    ;;
+  tpf*)
+    library_names_spec='$libname$shrext'
+    ;;
+  uts4*)
+    library_names_spec='$libname$shrext'
+    ;;
+esac
+
+sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
+escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
+shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
+escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
+
+LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
+
+# How to pass a linker flag through the compiler.
+wl="$escaped_wl"
+
+# Static library suffix (normally "a").
+libext="$libext"
+
+# Shared library suffix (normally "so").
+shlibext="$shlibext"
+
+# Format of library name prefix.
+libname_spec="$escaped_libname_spec"
+
+# Library names that the linker finds when passed -lNAME.
+library_names_spec="$escaped_library_names_spec"
+
+# Flag to hardcode \$libdir into a binary during linking.
+# This must work even if \$libdir does not exist.
+hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
+
+# Whether we need a single -rpath flag with a separated argument.
+hardcode_libdir_separator="$hardcode_libdir_separator"
+
+# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
+# resulting binary.
+hardcode_direct="$hardcode_direct"
+
+# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
+# resulting binary.
+hardcode_minus_L="$hardcode_minus_L"
+
+EOF
diff --git a/build-aux/config.sub b/build-aux/config.sub
new file mode 100755 (executable)
index 0000000..b51fb8c
--- /dev/null
@@ -0,0 +1,1790 @@
+#! /bin/sh
+# Configuration validation subroutine script.
+#   Copyright 1992-2018 Free Software Foundation, Inc.
+
+timestamp='2018-08-29'
+
+# This file 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 3 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, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that
+# program.  This Exception is an additional permission under section 7
+# of the GNU General Public License, version 3 ("GPLv3").
+
+
+# Please send patches to <config-patches@gnu.org>.
+#
+# Configuration subroutine to validate and canonicalize a configuration type.
+# Supply the specified configuration type as an argument.
+# If it is invalid, we print an error message on stderr and exit with code 1.
+# Otherwise, we print the canonical config type on stdout and succeed.
+
+# You can get the latest version of this script from:
+# https://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub
+
+# This file is supposed to be the same for all GNU packages
+# and recognize all the CPU types, system types and aliases
+# that are meaningful with *any* GNU software.
+# Each package is responsible for reporting which valid configurations
+# it does not support.  The user should be able to distinguish
+# a failure to support a valid configuration from a meaningless
+# configuration.
+
+# The goal of this file is to map all the various variations of a given
+# machine specification into a single specification in the form:
+#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
+# or in some cases, the newer four-part form:
+#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
+# It is wrong to echo any other type of specification.
+
+me=`echo "$0" | sed -e 's,.*/,,'`
+
+usage="\
+Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS
+
+Canonicalize a configuration name.
+
+Options:
+  -h, --help         print this help, then exit
+  -t, --time-stamp   print date of last modification, then exit
+  -v, --version      print version number, then exit
+
+Report bugs and patches to <config-patches@gnu.org>."
+
+version="\
+GNU config.sub ($timestamp)
+
+Copyright 1992-2018 Free Software Foundation, Inc.
+
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
+
+help="
+Try \`$me --help' for more information."
+
+# Parse command line
+while test $# -gt 0 ; do
+  case $1 in
+    --time-stamp | --time* | -t )
+       echo "$timestamp" ; exit ;;
+    --version | -v )
+       echo "$version" ; exit ;;
+    --help | --h* | -h )
+       echo "$usage"; exit ;;
+    -- )     # Stop option processing
+       shift; break ;;
+    - )        # Use stdin as input.
+       break ;;
+    -* )
+       echo "$me: invalid option $1$help"
+       exit 1 ;;
+
+    *local*)
+       # First pass through any local machine types.
+       echo "$1"
+       exit ;;
+
+    * )
+       break ;;
+  esac
+done
+
+case $# in
+ 0) echo "$me: missing argument$help" >&2
+    exit 1;;
+ 1) ;;
+ *) echo "$me: too many arguments$help" >&2
+    exit 1;;
+esac
+
+# Split fields of configuration type
+IFS="-" read -r field1 field2 field3 field4 <<EOF
+$1
+EOF
+
+# Separate into logical components for further validation
+case $1 in
+       *-*-*-*-*)
+               echo Invalid configuration \`"$1"\': more than four components >&2
+               exit 1
+               ;;
+       *-*-*-*)
+               basic_machine=$field1-$field2
+               os=$field3-$field4
+               ;;
+       *-*-*)
+               # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two
+               # parts
+               maybe_os=$field2-$field3
+               case $maybe_os in
+                       nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc \
+                       | linux-newlib* | linux-musl* | linux-uclibc* | uclinux-uclibc* \
+                       | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \
+                       | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \
+                       | storm-chaos* | os2-emx* | rtmk-nova*)
+                               basic_machine=$field1
+                               os=$maybe_os
+                               ;;
+                       android-linux)
+                               basic_machine=$field1-unknown
+                               os=linux-android
+                               ;;
+                       *)
+                               basic_machine=$field1-$field2
+                               os=$field3
+                               ;;
+               esac
+               ;;
+       *-*)
+               # A lone config we happen to match not fitting any patern
+               case $field1-$field2 in
+                       decstation-3100)
+                               basic_machine=mips-dec
+                               os=
+                               ;;
+                       *-*)
+                               # Second component is usually, but not always the OS
+                               case $field2 in
+                                       # Prevent following clause from handling this valid os
+                                       sun*os*)
+                                               basic_machine=$field1
+                                               os=$field2
+                                               ;;
+                                       # Manufacturers
+                                       dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \
+                                       | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \
+                                       | unicom* | ibm* | next | hp | isi* | apollo | altos* \
+                                       | convergent* | ncr* | news | 32* | 3600* | 3100* \
+                                       | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \
+                                       | ultra | tti* | harris | dolphin | highlevel | gould \
+                                       | cbm | ns | masscomp | apple | axis | knuth | cray \
+                                       | microblaze* | sim | cisco \
+                                       | oki | wec | wrs | winbond)
+                                               basic_machine=$field1-$field2
+                                               os=
+                                               ;;
+                                       *)
+                                               basic_machine=$field1
+                                               os=$field2
+                                               ;;
+                               esac
+                       ;;
+               esac
+               ;;
+       *)
+               # Convert single-component short-hands not valid as part of
+               # multi-component configurations.
+               case $field1 in
+                       386bsd)
+                               basic_machine=i386-pc
+                               os=bsd
+                               ;;
+                       a29khif)
+                               basic_machine=a29k-amd
+                               os=udi
+                               ;;
+                       adobe68k)
+                               basic_machine=m68010-adobe
+                               os=scout
+                               ;;
+                       alliant)
+                               basic_machine=fx80-alliant
+                               os=
+                               ;;
+                       altos | altos3068)
+                               basic_machine=m68k-altos
+                               os=
+                               ;;
+                       am29k)
+                               basic_machine=a29k-none
+                               os=bsd
+                               ;;
+                       amdahl)
+                               basic_machine=580-amdahl
+                               os=sysv
+                               ;;
+                       amiga)
+                               basic_machine=m68k-unknown
+                               os=
+                               ;;
+                       amigaos | amigados)
+                               basic_machine=m68k-unknown
+                               os=amigaos
+                               ;;
+                       amigaunix | amix)
+                               basic_machine=m68k-unknown
+                               os=sysv4
+                               ;;
+                       apollo68)
+                               basic_machine=m68k-apollo
+                               os=sysv
+                               ;;
+                       apollo68bsd)
+                               basic_machine=m68k-apollo
+                               os=bsd
+                               ;;
+                       aros)
+                               basic_machine=i386-pc
+                               os=aros
+                               ;;
+                       aux)
+                               basic_machine=m68k-apple
+                               os=aux
+                               ;;
+                       balance)
+                               basic_machine=ns32k-sequent
+                               os=dynix
+                               ;;
+                       blackfin)
+                               basic_machine=bfin-unknown
+                               os=linux
+                               ;;
+                       cegcc)
+                               basic_machine=arm-unknown
+                               os=cegcc
+                               ;;
+                       convex-c1)
+                               basic_machine=c1-convex
+                               os=bsd
+                               ;;
+                       convex-c2)
+                               basic_machine=c2-convex
+                               os=bsd
+                               ;;
+                       convex-c32)
+                               basic_machine=c32-convex
+                               os=bsd
+                               ;;
+                       convex-c34)
+                               basic_machine=c34-convex
+                               os=bsd
+                               ;;
+                       convex-c38)
+                               basic_machine=c38-convex
+                               os=bsd
+                               ;;
+                       cray)
+                               basic_machine=j90-cray
+                               os=unicos
+                               ;;
+                       crds | unos)
+                               basic_machine=m68k-crds
+                               os=
+                               ;;
+                       da30)
+                               basic_machine=m68k-da30
+                               os=
+                               ;;
+                       decstation | pmax | pmin | dec3100 | decstatn)
+                               basic_machine=mips-dec
+                               os=
+                               ;;
+                       delta88)
+                               basic_machine=m88k-motorola
+                               os=sysv3
+                               ;;
+                       dicos)
+                               basic_machine=i686-pc
+                               os=dicos
+                               ;;
+                       djgpp)
+                               basic_machine=i586-pc
+                               os=msdosdjgpp
+                               ;;
+                       ebmon29k)
+                               basic_machine=a29k-amd
+                               os=ebmon
+                               ;;
+                       es1800 | OSE68k | ose68k | ose | OSE)
+                               basic_machine=m68k-ericsson
+                               os=ose
+                               ;;
+                       gmicro)
+                               basic_machine=tron-gmicro
+                               os=sysv
+                               ;;
+                       go32)
+                               basic_machine=i386-pc
+                               os=go32
+                               ;;
+                       h8300hms)
+                               basic_machine=h8300-hitachi
+                               os=hms
+                               ;;
+                       h8300xray)
+                               basic_machine=h8300-hitachi
+                               os=xray
+                               ;;
+                       h8500hms)
+                               basic_machine=h8500-hitachi
+                               os=hms
+                               ;;
+                       harris)
+                               basic_machine=m88k-harris
+                               os=sysv3
+                               ;;
+                       hp300)
+                               basic_machine=m68k-hp
+                               ;;
+                       hp300bsd)
+                               basic_machine=m68k-hp
+                               os=bsd
+                               ;;
+                       hp300hpux)
+                               basic_machine=m68k-hp
+                               os=hpux
+                               ;;
+                       hppaosf)
+                               basic_machine=hppa1.1-hp
+                               os=osf
+                               ;;
+                       hppro)
+                               basic_machine=hppa1.1-hp
+                               os=proelf
+                               ;;
+                       i386mach)
+                               basic_machine=i386-mach
+                               os=mach
+                               ;;
+                       vsta)
+                               basic_machine=i386-pc
+                               os=vsta
+                               ;;
+                       isi68 | isi)
+                               basic_machine=m68k-isi
+                               os=sysv
+                               ;;
+                       m68knommu)
+                               basic_machine=m68k-unknown
+                               os=linux
+                               ;;
+                       magnum | m3230)
+                               basic_machine=mips-mips
+                               os=sysv
+                               ;;
+                       merlin)
+                               basic_machine=ns32k-utek
+                               os=sysv
+                               ;;
+                       mingw64)
+                               basic_machine=x86_64-pc
+                               os=mingw64
+                               ;;
+                       mingw32)
+                               basic_machine=i686-pc
+                               os=mingw32
+                               ;;
+                       mingw32ce)
+                               basic_machine=arm-unknown
+                               os=mingw32ce
+                               ;;
+                       monitor)
+                               basic_machine=m68k-rom68k
+                               os=coff
+                               ;;
+                       morphos)
+                               basic_machine=powerpc-unknown
+                               os=morphos
+                               ;;
+                       moxiebox)
+                               basic_machine=moxie-unknown
+                               os=moxiebox
+                               ;;
+                       msdos)
+                               basic_machine=i386-pc
+                               os=msdos
+                               ;;
+                       msys)
+                               basic_machine=i686-pc
+                               os=msys
+                               ;;
+                       mvs)
+                               basic_machine=i370-ibm
+                               os=mvs
+                               ;;
+                       nacl)
+                               basic_machine=le32-unknown
+                               os=nacl
+                               ;;
+                       ncr3000)
+                               basic_machine=i486-ncr
+                               os=sysv4
+                               ;;
+                       netbsd386)
+                               basic_machine=i386-pc
+                               os=netbsd
+                               ;;
+                       netwinder)
+                               basic_machine=armv4l-rebel
+                               os=linux
+                               ;;
+                       news | news700 | news800 | news900)
+                               basic_machine=m68k-sony
+                               os=newsos
+                               ;;
+                       news1000)
+                               basic_machine=m68030-sony
+                               os=newsos
+                               ;;
+                       necv70)
+                               basic_machine=v70-nec
+                               os=sysv
+                               ;;
+                       nh3000)
+                               basic_machine=m68k-harris
+                               os=cxux
+                               ;;
+                       nh[45]000)
+                               basic_machine=m88k-harris
+                               os=cxux
+                               ;;
+                       nindy960)
+                               basic_machine=i960-intel
+                               os=nindy
+                               ;;
+                       mon960)
+                               basic_machine=i960-intel
+                               os=mon960
+                               ;;
+                       nonstopux)
+                               basic_machine=mips-compaq
+                               os=nonstopux
+                               ;;
+                       os400)
+                               basic_machine=powerpc-ibm
+                               os=os400
+                               ;;
+                       OSE68000 | ose68000)
+                               basic_machine=m68000-ericsson
+                               os=ose
+                               ;;
+                       os68k)
+                               basic_machine=m68k-none
+                               os=os68k
+                               ;;
+                       paragon)
+                               basic_machine=i860-intel
+                               os=osf
+                               ;;
+                       parisc)
+                               basic_machine=hppa-unknown
+                               os=linux
+                               ;;
+                       pw32)
+                               basic_machine=i586-unknown
+                               os=pw32
+                               ;;
+                       rdos | rdos64)
+                               basic_machine=x86_64-pc
+                               os=rdos
+                               ;;
+                       rdos32)
+                               basic_machine=i386-pc
+                               os=rdos
+                               ;;
+                       rom68k)
+                               basic_machine=m68k-rom68k
+                               os=coff
+                               ;;
+                       sa29200)
+                               basic_machine=a29k-amd
+                               os=udi
+                               ;;
+                       sei)
+                               basic_machine=mips-sei
+                               os=seiux
+                               ;;
+                       sequent)
+                               basic_machine=i386-sequent
+                               os=
+                               ;;
+                       sps7)
+                               basic_machine=m68k-bull
+                               os=sysv2
+                               ;;
+                       st2000)
+                               basic_machine=m68k-tandem
+                               os=
+                               ;;
+                       stratus)
+                               basic_machine=i860-stratus
+                               os=sysv4
+                               ;;
+                       sun2)
+                               basic_machine=m68000-sun
+                               os=
+                               ;;
+                       sun2os3)
+                               basic_machine=m68000-sun
+                               os=sunos3
+                               ;;
+                       sun2os4)
+                               basic_machine=m68000-sun
+                               os=sunos4
+                               ;;
+                       sun3)
+                               basic_machine=m68k-sun
+                               os=
+                               ;;
+                       sun3os3)
+                               basic_machine=m68k-sun
+                               os=sunos3
+                               ;;
+                       sun3os4)
+                               basic_machine=m68k-sun
+                               os=sunos4
+                               ;;
+                       sun4)
+                               basic_machine=sparc-sun
+                               os=
+                               ;;
+                       sun4os3)
+                               basic_machine=sparc-sun
+                               os=sunos3
+                               ;;
+                       sun4os4)
+                               basic_machine=sparc-sun
+                               os=sunos4
+                               ;;
+                       sun4sol2)
+                               basic_machine=sparc-sun
+                               os=solaris2
+                               ;;
+                       sun386 | sun386i | roadrunner)
+                               basic_machine=i386-sun
+                               os=
+                               ;;
+                       sv1)
+                               basic_machine=sv1-cray
+                               os=unicos
+                               ;;
+                       symmetry)
+                               basic_machine=i386-sequent
+                               os=dynix
+                               ;;
+                       t3e)
+                               basic_machine=alphaev5-cray
+                               os=unicos
+                               ;;
+                       t90)
+                               basic_machine=t90-cray
+                               os=unicos
+                               ;;
+                       toad1)
+                               basic_machine=pdp10-xkl
+                               os=tops20
+                               ;;
+                       tpf)
+                               basic_machine=s390x-ibm
+                               os=tpf
+                               ;;
+                       udi29k)
+                               basic_machine=a29k-amd
+                               os=udi
+                               ;;
+                       ultra3)
+                               basic_machine=a29k-nyu
+                               os=sym1
+                               ;;
+                       v810 | necv810)
+                               basic_machine=v810-nec
+                               os=none
+                               ;;
+                       vaxv)
+                               basic_machine=vax-dec
+                               os=sysv
+                               ;;
+                       vms)
+                               basic_machine=vax-dec
+                               os=vms
+                               ;;
+                       vxworks960)
+                               basic_machine=i960-wrs
+                               os=vxworks
+                               ;;
+                       vxworks68)
+                               basic_machine=m68k-wrs
+                               os=vxworks
+                               ;;
+                       vxworks29k)
+                               basic_machine=a29k-wrs
+                               os=vxworks
+                               ;;
+                       xbox)
+                               basic_machine=i686-pc
+                               os=mingw32
+                               ;;
+                       ymp)
+                               basic_machine=ymp-cray
+                               os=unicos
+                               ;;
+                       *)
+                               basic_machine=$1
+                               os=
+                               ;;
+               esac
+               ;;
+esac
+
+# Decode 1-component or ad-hoc basic machines
+case $basic_machine in
+       # Here we handle the default manufacturer of certain CPU types.  It is in
+       # some cases the only manufacturer, in others, it is the most popular.
+       w89k)
+               cpu=hppa1.1
+               vendor=winbond
+               ;;
+       op50n)
+               cpu=hppa1.1
+               vendor=oki
+               ;;
+       op60c)
+               cpu=hppa1.1
+               vendor=oki
+               ;;
+       ibm*)
+               cpu=i370
+               vendor=ibm
+               ;;
+       orion105)
+               cpu=clipper
+               vendor=highlevel
+               ;;
+       mac | mpw | mac-mpw)
+               cpu=m68k
+               vendor=apple
+               ;;
+       pmac | pmac-mpw)
+               cpu=powerpc
+               vendor=apple
+               ;;
+
+       # Recognize the various machine names and aliases which stand
+       # for a CPU type and a company and sometimes even an OS.
+       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
+               cpu=m68000
+               vendor=att
+               ;;
+       3b*)
+               cpu=we32k
+               vendor=att
+               ;;
+       bluegene*)
+               cpu=powerpc
+               vendor=ibm
+               os=cnk
+               ;;
+       decsystem10* | dec10*)
+               cpu=pdp10
+               vendor=dec
+               os=tops10
+               ;;
+       decsystem20* | dec20*)
+               cpu=pdp10
+               vendor=dec
+               os=tops20
+               ;;
+       delta | 3300 | motorola-3300 | motorola-delta \
+             | 3300-motorola | delta-motorola)
+               cpu=m68k
+               vendor=motorola
+               ;;
+       dpx2*)
+               cpu=m68k
+               vendor=bull
+               os=sysv3
+               ;;
+       encore | umax | mmax)
+               cpu=ns32k
+               vendor=encore
+               ;;
+       elxsi)
+               cpu=elxsi
+               vendor=elxsi
+               os=${os:-bsd}
+               ;;
+       fx2800)
+               cpu=i860
+               vendor=alliant
+               ;;
+       genix)
+               cpu=ns32k
+               vendor=ns
+               ;;
+       h3050r* | hiux*)
+               cpu=hppa1.1
+               vendor=hitachi
+               os=hiuxwe2
+               ;;
+       hp3k9[0-9][0-9] | hp9[0-9][0-9])
+               cpu=hppa1.0
+               vendor=hp
+               ;;
+       hp9k2[0-9][0-9] | hp9k31[0-9])
+               cpu=m68000
+               vendor=hp
+               ;;
+       hp9k3[2-9][0-9])
+               cpu=m68k
+               vendor=hp
+               ;;
+       hp9k6[0-9][0-9] | hp6[0-9][0-9])
+               cpu=hppa1.0
+               vendor=hp
+               ;;
+       hp9k7[0-79][0-9] | hp7[0-79][0-9])
+               cpu=hppa1.1
+               vendor=hp
+               ;;
+       hp9k78[0-9] | hp78[0-9])
+               # FIXME: really hppa2.0-hp
+               cpu=hppa1.1
+               vendor=hp
+               ;;
+       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
+               # FIXME: really hppa2.0-hp
+               cpu=hppa1.1
+               vendor=hp
+               ;;
+       hp9k8[0-9][13679] | hp8[0-9][13679])
+               cpu=hppa1.1
+               vendor=hp
+               ;;
+       hp9k8[0-9][0-9] | hp8[0-9][0-9])
+               cpu=hppa1.0
+               vendor=hp
+               ;;
+       i*86v32)
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=sysv32
+               ;;
+       i*86v4*)
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=sysv4
+               ;;
+       i*86v)
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=sysv
+               ;;
+       i*86sol2)
+               cpu=`echo "$1" | sed -e 's/86.*/86/'`
+               vendor=pc
+               os=solaris2
+               ;;
+       j90 | j90-cray)
+               cpu=j90
+               vendor=cray
+               os=${os:-unicos}
+               ;;
+       iris | iris4d)
+               cpu=mips
+               vendor=sgi
+               case $os in
+                   irix*)
+                       ;;
+                   *)
+                       os=irix4
+                       ;;
+               esac
+               ;;
+       miniframe)
+               cpu=m68000
+               vendor=convergent
+               ;;
+       *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*)
+               cpu=m68k
+               vendor=atari
+               os=mint
+               ;;
+       news-3600 | risc-news)
+               cpu=mips
+               vendor=sony
+               os=newsos
+               ;;
+       next | m*-next)
+               cpu=m68k
+               vendor=next
+               case $os in
+                   nextstep* )
+                       ;;
+                   ns2*)
+                     os=nextstep2
+                       ;;
+                   *)
+                     os=nextstep3
+                       ;;
+               esac
+               ;;
+       np1)
+               cpu=np1
+               vendor=gould
+               ;;
+       op50n-* | op60c-*)
+               cpu=hppa1.1
+               vendor=oki
+               os=proelf
+               ;;
+       pa-hitachi)
+               cpu=hppa1.1
+               vendor=hitachi
+               os=hiuxwe2
+               ;;
+       pbd)
+               cpu=sparc
+               vendor=tti
+               ;;
+       pbb)
+               cpu=m68k
+               vendor=tti
+               ;;
+       pc532)
+               cpu=ns32k
+               vendor=pc532
+               ;;
+       pn)
+               cpu=pn
+               vendor=gould
+               ;;
+       power)
+               cpu=power
+               vendor=ibm
+               ;;
+       ps2)
+               cpu=i386
+               vendor=ibm
+               ;;
+       rm[46]00)
+               cpu=mips
+               vendor=siemens
+               ;;
+       rtpc | rtpc-*)
+               cpu=romp
+               vendor=ibm
+               ;;
+       sde)
+               cpu=mipsisa32
+               vendor=sde
+               os=${os:-elf}
+               ;;
+       simso-wrs)
+               cpu=sparclite
+               vendor=wrs
+               os=vxworks
+               ;;
+       tower | tower-32)
+               cpu=m68k
+               vendor=ncr
+               ;;
+       vpp*|vx|vx-*)
+               cpu=f301
+               vendor=fujitsu
+               ;;
+       w65)
+               cpu=w65
+               vendor=wdc
+               ;;
+       w89k-*)
+               cpu=hppa1.1
+               vendor=winbond
+               os=proelf
+               ;;
+       none)
+               cpu=none
+               vendor=none
+               ;;
+       leon|leon[3-9])
+               cpu=sparc
+               vendor=$basic_machine
+               ;;
+       leon-*|leon[3-9]-*)
+               cpu=sparc
+               vendor=`echo "$basic_machine" | sed 's/-.*//'`
+               ;;
+
+       *-*)
+               IFS="-" read -r cpu vendor <<EOF
+$basic_machine
+EOF
+               ;;
+       # We use `pc' rather than `unknown'
+       # because (1) that's what they normally are, and
+       # (2) the word "unknown" tends to confuse beginning users.
+       i*86 | x86_64)
+               cpu=$basic_machine
+               vendor=pc
+               ;;
+       # These rules are duplicated from below for sake of the special case above;
+       # i.e. things that normalized to x86 arches should also default to "pc"
+       pc98)
+               cpu=i386
+               vendor=pc
+               ;;
+       x64 | amd64)
+               cpu=x86_64
+               vendor=pc
+               ;;
+       # Recognize the basic CPU types without company name.
+       *)
+               cpu=$basic_machine
+               vendor=unknown
+               ;;
+esac
+
+unset -v basic_machine
+
+# Decode basic machines in the full and proper CPU-Company form.
+case $cpu-$vendor in
+       # Here we handle the default manufacturer of certain CPU types in cannonical form. It is in
+       # some cases the only manufacturer, in others, it is the most popular.
+       craynv-unknown)
+               vendor=cray
+               os=${os:-unicosmp}
+               ;;
+       c90-unknown | c90-cray)
+               vendor=cray
+               os=${os:-unicos}
+               ;;
+       fx80-unknown)
+               vendor=alliant
+               ;;
+       romp-unknown)
+               vendor=ibm
+               ;;
+       mmix-unknown)
+               vendor=knuth
+               ;;
+       microblaze-unknown | microblazeel-unknown)
+               vendor=xilinx
+               ;;
+       rs6000-unknown)
+               vendor=ibm
+               ;;
+       vax-unknown)
+               vendor=dec
+               ;;
+       pdp11-unknown)
+               vendor=dec
+               ;;
+       we32k-unknown)
+               vendor=att
+               ;;
+       cydra-unknown)
+               vendor=cydrome
+               ;;
+       i370-ibm*)
+               vendor=ibm
+               ;;
+       orion-unknown)
+               vendor=highlevel
+               ;;
+       xps-unknown | xps100-unknown)
+               cpu=xps100
+               vendor=honeywell
+               ;;
+
+       # Here we normalize CPU types with a missing or matching vendor
+       dpx20-unknown | dpx20-bull)
+               cpu=rs6000
+               vendor=bull
+               os=${os:-bosx}
+               ;;
+
+       # Here we normalize CPU types irrespective of the vendor
+       amd64-*)
+               cpu=x86_64
+               ;;
+       blackfin-*)
+               cpu=bfin
+               os=linux
+               ;;
+       c54x-*)
+               cpu=tic54x
+               ;;
+       c55x-*)
+               cpu=tic55x
+               ;;
+       c6x-*)
+               cpu=tic6x
+               ;;
+       e500v[12]-*)
+               cpu=powerpc
+               os=$os"spe"
+               ;;
+       mips3*-*)
+               cpu=mips64
+               ;;
+       ms1-*)
+               cpu=mt
+               ;;
+       m68knommu-*)
+               cpu=m68k
+               os=linux
+               ;;
+       m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*)
+               cpu=s12z
+               ;;
+       openrisc-*)
+               cpu=or32
+               ;;
+       parisc-*)
+               cpu=hppa
+               os=linux
+               ;;
+       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
+               cpu=i586
+               ;;
+       pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*)
+               cpu=i686
+               ;;
+       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
+               cpu=i686
+               ;;
+       pentium4-*)
+               cpu=i786
+               ;;
+       pc98-*)
+               cpu=i386
+               ;;
+       ppc-* | ppcbe-*)
+               cpu=powerpc
+               ;;
+       ppcle-* | powerpclittle-*)
+               cpu=powerpcle
+               ;;
+       ppc64-*)
+               cpu=powerpc64
+               ;;
+       ppc64le-* | powerpc64little-*)
+               cpu=powerpc64le
+               ;;
+       sb1-*)
+               cpu=mipsisa64sb1
+               ;;
+       sb1el-*)
+               cpu=mipsisa64sb1el
+               ;;
+       sh5e[lb]-*)
+               cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'`
+               ;;
+       spur-*)
+               cpu=spur
+               ;;
+       strongarm-* | thumb-*)
+               cpu=arm
+               ;;
+       tx39-*)
+               cpu=mipstx39
+               ;;
+       tx39el-*)
+               cpu=mipstx39el
+               ;;
+       x64-*)
+               cpu=x86_64
+               ;;
+       xscale-* | xscalee[bl]-*)
+               cpu=`echo "$cpu" | sed 's/^xscale/arm/'`
+               ;;
+
+       # Recognize the cannonical CPU Types that limit and/or modify the
+       # company names they are paired with.
+       cr16-*)
+               os=${os:-elf}
+               ;;
+       crisv32-* | etraxfs*-*)
+               cpu=crisv32
+               vendor=axis
+               ;;
+       cris-* | etrax*-*)
+               cpu=cris
+               vendor=axis
+               ;;
+       crx-*)
+               os=${os:-elf}
+               ;;
+       neo-tandem)
+               cpu=neo
+               vendor=tandem
+               ;;
+       nse-tandem)
+               cpu=nse
+               vendor=tandem
+               ;;
+       nsr-tandem)
+               cpu=nsr
+               vendor=tandem
+               ;;
+       nsv-tandem)
+               cpu=nsv
+               vendor=tandem
+               ;;
+       nsx-tandem)
+               cpu=nsx
+               vendor=tandem
+               ;;
+       s390-*)
+               cpu=s390
+               vendor=ibm
+               ;;
+       s390x-*)
+               cpu=s390x
+               vendor=ibm
+               ;;
+       tile*-*)
+               os=${os:-linux-gnu}
+               ;;
+
+       *)
+               # Recognize the cannonical CPU types that are allowed with any
+               # company name.
+               case $cpu in
+                       1750a | 580 \
+                       | a29k \
+                       | aarch64 | aarch64_be \
+                       | abacus \
+                       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \
+                       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \
+                       | alphapca5[67] | alpha64pca5[67] \
+                       | am33_2.0 \
+                       | arc | arceb \
+                       | arm  | arm[lb]e | arme[lb] | armv* \
+                       | avr | avr32 \
+                       | asmjs \
+                       | ba \
+                       | be32 | be64 \
+                       | bfin | bs2000 \
+                       | c[123]* | c30 | [cjt]90 | c4x \
+                       | c8051 | clipper | craynv | csky | cydra \
+                       | d10v | d30v | dlx | dsp16xx \
+                       | e2k | elxsi | epiphany \
+                       | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \
+                       | h8300 | h8500 \
+                       | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
+                       | hexagon \
+                       | i370 | i*86 | i860 | i960 | ia16 | ia64 \
+                       | ip2k | iq2000 \
+                       | k1om \
+                       | le32 | le64 \
+                       | lm32 \
+                       | m32c | m32r | m32rle \
+                       | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k | v70 | w65 \
+                       | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip \
+                       | m88110 | m88k | maxq | mb | mcore | mep | metag \
+                       | microblaze | microblazeel \
+                       | mips | mipsbe | mipseb | mipsel | mipsle \
+                       | mips16 \
+                       | mips64 | mips64el \
+                       | mips64octeon | mips64octeonel \
+                       | mips64orion | mips64orionel \
+                       | mips64r5900 | mips64r5900el \
+                       | mips64vr | mips64vrel \
+                       | mips64vr4100 | mips64vr4100el \
+                       | mips64vr4300 | mips64vr4300el \
+                       | mips64vr5000 | mips64vr5000el \
+                       | mips64vr5900 | mips64vr5900el \
+                       | mipsisa32 | mipsisa32el \
+                       | mipsisa32r2 | mipsisa32r2el \
+                       | mipsisa32r6 | mipsisa32r6el \
+                       | mipsisa64 | mipsisa64el \
+                       | mipsisa64r2 | mipsisa64r2el \
+                       | mipsisa64r6 | mipsisa64r6el \
+                       | mipsisa64sb1 | mipsisa64sb1el \
+                       | mipsisa64sr71k | mipsisa64sr71kel \
+                       | mipsr5900 | mipsr5900el \
+                       | mipstx39 | mipstx39el \
+                       | mmix \
+                       | mn10200 | mn10300 \
+                       | moxie \
+                       | mt \
+                       | msp430 \
+                       | nds32 | nds32le | nds32be \
+                       | nfp \
+                       | nios | nios2 | nios2eb | nios2el \
+                       | none | np1 | ns16k | ns32k \
+                       | open8 \
+                       | or1k* \
+                       | or32 \
+                       | orion \
+                       | pdp10 | pdp11 | pj | pjl | pn | power \
+                       | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \
+                       | pru \
+                       | pyramid \
+                       | riscv | riscv32 | riscv64 \
+                       | rl78 | romp | rs6000 | rx \
+                       | score \
+                       | sh | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \
+                       | sh[1234]e[lb] |  sh[12345][lb]e | sh[23]ele | sh64 | sh64le \
+                       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \
+                       | sparclite \
+                       | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \
+                       | spu \
+                       | tahoe \
+                       | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \
+                       | tron \
+                       | ubicom32 \
+                       | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \
+                       | vax \
+                       | visium \
+                       | wasm32 \
+                       | we32k \
+                       | x86 | x86_64 | xc16x | xgate | xps100 \
+                       | xstormy16 | xtensa* \
+                       | ymp \
+                       | z8k | z80)
+                               ;;
+
+                       *)
+                               echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2
+                               exit 1
+                               ;;
+               esac
+               ;;
+esac
+
+# Here we canonicalize certain aliases for manufacturers.
+case $vendor in
+       digital*)
+               vendor=dec
+               ;;
+       commodore*)
+               vendor=cbm
+               ;;
+       *)
+               ;;
+esac
+
+# Decode manufacturer-specific aliases for certain operating systems.
+
+if [ x$os != x ]
+then
+case $os in
+       # First match some system type aliases that might get confused
+       # with valid system types.
+       # solaris* is a basic system type, with this one exception.
+       auroraux)
+               os=auroraux
+               ;;
+       bluegene*)
+               os=cnk
+               ;;
+       solaris1 | solaris1.*)
+               os=`echo $os | sed -e 's|solaris1|sunos4|'`
+               ;;
+       solaris)
+               os=solaris2
+               ;;
+       unixware*)
+               os=sysv4.2uw
+               ;;
+       gnu/linux*)
+               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
+               ;;
+       # es1800 is here to avoid being matched by es* (a different OS)
+       es1800*)
+               os=ose
+               ;;
+       # Some version numbers need modification
+       chorusos*)
+               os=chorusos
+               ;;
+       isc)
+               os=isc2.2
+               ;;
+       sco6)
+               os=sco5v6
+               ;;
+       sco5)
+               os=sco3.2v5
+               ;;
+       sco4)
+               os=sco3.2v4
+               ;;
+       sco3.2.[4-9]*)
+               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
+               ;;
+       sco3.2v[4-9]* | sco5v6*)
+               # Don't forget version if it is 3.2v4 or newer.
+               ;;
+       scout)
+               # Don't match below
+               ;;
+       sco*)
+               os=sco3.2v2
+               ;;
+       psos*)
+               os=psos
+               ;;
+       # Now accept the basic system types.
+       # The portable systems comes first.
+       # Each alternative MUST end in a * to match a version number.
+       # sysv* is not here because it comes later, after sysvr4.
+       gnu* | bsd* | mach* | minix* | genix* | ultrix* | irix* \
+            | *vms* | esix* | aix* | cnk* | sunos | sunos[34]*\
+            | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \
+            | sym* | kopensolaris* | plan9* \
+            | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \
+            | aos* | aros* | cloudabi* | sortix* \
+            | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \
+            | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \
+            | knetbsd* | mirbsd* | netbsd* \
+            | bitrig* | openbsd* | solidbsd* | libertybsd* \
+            | ekkobsd* | kfreebsd* | freebsd* | riscix* | lynxos* \
+            | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \
+            | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \
+            | udi* | eabi* | lites* | ieee* | go32* | aux* | hcos* \
+            | chorusrdb* | cegcc* | glidix* \
+            | cygwin* | msys* | pe* | moss* | proelf* | rtems* \
+            | midipix* | mingw32* | mingw64* | linux-gnu* | linux-android* \
+            | linux-newlib* | linux-musl* | linux-uclibc* \
+            | uxpv* | beos* | mpeix* | udk* | moxiebox* \
+            | interix* | uwin* | mks* | rhapsody* | darwin* \
+            | openstep* | oskit* | conix* | pw32* | nonstopux* \
+            | storm-chaos* | tops10* | tenex* | tops20* | its* \
+            | os2* | vos* | palmos* | uclinux* | nucleus* \
+            | morphos* | superux* | rtmk* | windiss* \
+            | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \
+            | skyos* | haiku* | rdos* | toppers* | drops* | es* \
+            | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \
+            | midnightbsd*)
+       # Remember, each alternative MUST END IN *, to match a version number.
+               ;;
+       qnx*)
+               case $cpu in
+                   x86 | i*86)
+                       ;;
+                   *)
+                       os=nto-$os
+                       ;;
+               esac
+               ;;
+       hiux*)
+               os=hiuxwe2
+               ;;
+       nto-qnx*)
+               ;;
+       nto*)
+               os=`echo $os | sed -e 's|nto|nto-qnx|'`
+               ;;
+       sim | xray | os68k* | v88r* \
+           | windows* | osx | abug | netware* | os9* \
+           | macos* | mpw* | magic* | mmixware* | mon960* | lnews*)
+               ;;
+       linux-dietlibc)
+               os=linux-dietlibc
+               ;;
+       linux*)
+               os=`echo $os | sed -e 's|linux|linux-gnu|'`
+               ;;
+       lynx*178)
+               os=lynxos178
+               ;;
+       lynx*5)
+               os=lynxos5
+               ;;
+       lynx*)
+               os=lynxos
+               ;;
+       mac*)
+               os=`echo "$os" | sed -e 's|mac|macos|'`
+               ;;
+       opened*)
+               os=openedition
+               ;;
+       os400*)
+               os=os400
+               ;;
+       sunos5*)
+               os=`echo "$os" | sed -e 's|sunos5|solaris2|'`
+               ;;
+       sunos6*)
+               os=`echo "$os" | sed -e 's|sunos6|solaris3|'`
+               ;;
+       wince*)
+               os=wince
+               ;;
+       utek*)
+               os=bsd
+               ;;
+       dynix*)
+               os=bsd
+               ;;
+       acis*)
+               os=aos
+               ;;
+       atheos*)
+               os=atheos
+               ;;
+       syllable*)
+               os=syllable
+               ;;
+       386bsd)
+               os=bsd
+               ;;
+       ctix* | uts*)
+               os=sysv
+               ;;
+       nova*)
+               os=rtmk-nova
+               ;;
+       ns2)
+               os=nextstep2
+               ;;
+       nsk*)
+               os=nsk
+               ;;
+       # Preserve the version number of sinix5.
+       sinix5.*)
+               os=`echo $os | sed -e 's|sinix|sysv|'`
+               ;;
+       sinix*)
+               os=sysv4
+               ;;
+       tpf*)
+               os=tpf
+               ;;
+       triton*)
+               os=sysv3
+               ;;
+       oss*)
+               os=sysv3
+               ;;
+       svr4*)
+               os=sysv4
+               ;;
+       svr3)
+               os=sysv3
+               ;;
+       sysvr4)
+               os=sysv4
+               ;;
+       # This must come after sysvr4.
+       sysv*)
+               ;;
+       ose*)
+               os=ose
+               ;;
+       *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+               os=mint
+               ;;
+       zvmoe)
+               os=zvmoe
+               ;;
+       dicos*)
+               os=dicos
+               ;;
+       pikeos*)
+               # Until real need of OS specific support for
+               # particular features comes up, bare metal
+               # configurations are quite functional.
+               case $cpu in
+                   arm*)
+                       os=eabi
+                       ;;
+                   *)
+                       os=elf
+                       ;;
+               esac
+               ;;
+       nacl*)
+               ;;
+       ios)
+               ;;
+       none)
+               ;;
+       *-eabi)
+               ;;
+       *)
+               echo Invalid configuration \`"$1"\': system \`"$os"\' not recognized 1>&2
+               exit 1
+               ;;
+esac
+else
+
+# Here we handle the default operating systems that come with various machines.
+# The value should be what the vendor currently ships out the door with their
+# machine or put another way, the most popular os provided with the machine.
+
+# Note that if you're going to try to match "-MANUFACTURER" here (say,
+# "-sun"), then you have to tell the case statement up towards the top
+# that MANUFACTURER isn't an operating system.  Otherwise, code above
+# will signal an error saying that MANUFACTURER isn't an operating
+# system, and we'll never get to this point.
+
+case $cpu-$vendor in
+       score-*)
+               os=elf
+               ;;
+       spu-*)
+               os=elf
+               ;;
+       *-acorn)
+               os=riscix1.2
+               ;;
+       arm*-rebel)
+               os=linux
+               ;;
+       arm*-semi)
+               os=aout
+               ;;
+       c4x-* | tic4x-*)
+               os=coff
+               ;;
+       c8051-*)
+               os=elf
+               ;;
+       clipper-intergraph)
+               os=clix
+               ;;
+       hexagon-*)
+               os=elf
+               ;;
+       tic54x-*)
+               os=coff
+               ;;
+       tic55x-*)
+               os=coff
+               ;;
+       tic6x-*)
+               os=coff
+               ;;
+       # This must come before the *-dec entry.
+       pdp10-*)
+               os=tops20
+               ;;
+       pdp11-*)
+               os=none
+               ;;
+       *-dec | vax-*)
+               os=ultrix4.2
+               ;;
+       m68*-apollo)
+               os=domain
+               ;;
+       i386-sun)
+               os=sunos4.0.2
+               ;;
+       m68000-sun)
+               os=sunos3
+               ;;
+       m68*-cisco)
+               os=aout
+               ;;
+       mep-*)
+               os=elf
+               ;;
+       mips*-cisco)
+               os=elf
+               ;;
+       mips*-*)
+               os=elf
+               ;;
+       or32-*)
+               os=coff
+               ;;
+       *-tti)  # must be before sparc entry or we get the wrong os.
+               os=sysv3
+               ;;
+       sparc-* | *-sun)
+               os=sunos4.1.1
+               ;;
+       pru-*)
+               os=elf
+               ;;
+       *-be)
+               os=beos
+               ;;
+       *-ibm)
+               os=aix
+               ;;
+       *-knuth)
+               os=mmixware
+               ;;
+       *-wec)
+               os=proelf
+               ;;
+       *-winbond)
+               os=proelf
+               ;;
+       *-oki)
+               os=proelf
+               ;;
+       *-hp)
+               os=hpux
+               ;;
+       *-hitachi)
+               os=hiux
+               ;;
+       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
+               os=sysv
+               ;;
+       *-cbm)
+               os=amigaos
+               ;;
+       *-dg)
+               os=dgux
+               ;;
+       *-dolphin)
+               os=sysv3
+               ;;
+       m68k-ccur)
+               os=rtu
+               ;;
+       m88k-omron*)
+               os=luna
+               ;;
+       *-next)
+               os=nextstep
+               ;;
+       *-sequent)
+               os=ptx
+               ;;
+       *-crds)
+               os=unos
+               ;;
+       *-ns)
+               os=genix
+               ;;
+       i370-*)
+               os=mvs
+               ;;
+       *-gould)
+               os=sysv
+               ;;
+       *-highlevel)
+               os=bsd
+               ;;
+       *-encore)
+               os=bsd
+               ;;
+       *-sgi)
+               os=irix
+               ;;
+       *-siemens)
+               os=sysv4
+               ;;
+       *-masscomp)
+               os=rtu
+               ;;
+       f30[01]-fujitsu | f700-fujitsu)
+               os=uxpv
+               ;;
+       *-rom68k)
+               os=coff
+               ;;
+       *-*bug)
+               os=coff
+               ;;
+       *-apple)
+               os=macos
+               ;;
+       *-atari*)
+               os=mint
+               ;;
+       *-wrs)
+               os=vxworks
+               ;;
+       *)
+               os=none
+               ;;
+esac
+fi
+
+# Here we handle the case where we know the os, and the CPU type, but not the
+# manufacturer.  We pick the logical manufacturer.
+case $vendor in
+       unknown)
+               case $os in
+                       riscix*)
+                               vendor=acorn
+                               ;;
+                       sunos*)
+                               vendor=sun
+                               ;;
+                       cnk*|-aix*)
+                               vendor=ibm
+                               ;;
+                       beos*)
+                               vendor=be
+                               ;;
+                       hpux*)
+                               vendor=hp
+                               ;;
+                       mpeix*)
+                               vendor=hp
+                               ;;
+                       hiux*)
+                               vendor=hitachi
+                               ;;
+                       unos*)
+                               vendor=crds
+                               ;;
+                       dgux*)
+                               vendor=dg
+                               ;;
+                       luna*)
+                               vendor=omron
+                               ;;
+                       genix*)
+                               vendor=ns
+                               ;;
+                       clix*)
+                               vendor=intergraph
+                               ;;
+                       mvs* | opened*)
+                               vendor=ibm
+                               ;;
+                       os400*)
+                               vendor=ibm
+                               ;;
+                       ptx*)
+                               vendor=sequent
+                               ;;
+                       tpf*)
+                               vendor=ibm
+                               ;;
+                       vxsim* | vxworks* | windiss*)
+                               vendor=wrs
+                               ;;
+                       aux*)
+                               vendor=apple
+                               ;;
+                       hms*)
+                               vendor=hitachi
+                               ;;
+                       mpw* | macos*)
+                               vendor=apple
+                               ;;
+                       *mint | mint[0-9]* | *MiNT | MiNT[0-9]*)
+                               vendor=atari
+                               ;;
+                       vos*)
+                               vendor=stratus
+                               ;;
+               esac
+               ;;
+esac
+
+echo "$cpu-$vendor-$os"
+exit
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "timestamp='"
+# time-stamp-format: "%:y-%02m-%02d"
+# time-stamp-end: "'"
+# End:
diff --git a/build-aux/depcomp b/build-aux/depcomp
new file mode 100755 (executable)
index 0000000..65cbf70
--- /dev/null
@@ -0,0 +1,791 @@
+#! /bin/sh
+# depcomp - compile a program generating dependencies as side-effects
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1999-2018 Free Software Foundation, Inc.
+
+# 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, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
+
+case $1 in
+  '')
+    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
+    exit 1;
+    ;;
+  -h | --h*)
+    cat <<\EOF
+Usage: depcomp [--help] [--version] PROGRAM [ARGS]
+
+Run PROGRAMS ARGS to compile a file, generating dependencies
+as side-effects.
+
+Environment variables:
+  depmode     Dependency tracking mode.
+  source      Source file read by 'PROGRAMS ARGS'.
+  object      Object file output by 'PROGRAMS ARGS'.
+  DEPDIR      directory where to store dependencies.
+  depfile     Dependency file to output.
+  tmpdepfile  Temporary file to use when outputting dependencies.
+  libtool     Whether libtool is used (yes/no).
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v | --v*)
+    echo "depcomp $scriptversion"
+    exit $?
+    ;;
+esac
+
+# Get the directory component of the given path, and save it in the
+# global variables '$dir'.  Note that this directory component will
+# be either empty or ending with a '/' character.  This is deliberate.
+set_dir_from ()
+{
+  case $1 in
+    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
+      *) dir=;;
+  esac
+}
+
+# Get the suffix-stripped basename of the given path, and save it the
+# global variable '$base'.
+set_base_from ()
+{
+  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
+}
+
+# If no dependency file was actually created by the compiler invocation,
+# we still have to create a dummy depfile, to avoid errors with the
+# Makefile "include basename.Plo" scheme.
+make_dummy_depfile ()
+{
+  echo "#dummy" > "$depfile"
+}
+
+# Factor out some common post-processing of the generated depfile.
+# Requires the auxiliary global variable '$tmpdepfile' to be set.
+aix_post_process_depfile ()
+{
+  # If the compiler actually managed to produce a dependency file,
+  # post-process it.
+  if test -f "$tmpdepfile"; then
+    # Each line is of the form 'foo.o: dependency.h'.
+    # Do two passes, one to just change these to
+    #   $object: dependency.h
+    # and one to simply output
+    #   dependency.h:
+    # which is needed to avoid the deleted-header problem.
+    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
+      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
+    } > "$depfile"
+    rm -f "$tmpdepfile"
+  else
+    make_dummy_depfile
+  fi
+}
+
+# A tabulation character.
+tab='  '
+# A newline character.
+nl='
+'
+# Character ranges might be problematic outside the C locale.
+# These definitions help.
+upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
+lower=abcdefghijklmnopqrstuvwxyz
+digits=0123456789
+alpha=${upper}${lower}
+
+if test -z "$depmode" || test -z "$source" || test -z "$object"; then
+  echo "depcomp: Variables source, object and depmode must be set" 1>&2
+  exit 1
+fi
+
+# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
+depfile=${depfile-`echo "$object" |
+  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
+tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
+
+rm -f "$tmpdepfile"
+
+# Avoid interferences from the environment.
+gccflag= dashmflag=
+
+# Some modes work just like other modes, but use different flags.  We
+# parameterize here, but still list the modes in the big case below,
+# to make depend.m4 easier to write.  Note that we *cannot* use a case
+# here, because this file can only contain one case statement.
+if test "$depmode" = hp; then
+  # HP compiler uses -M and no extra arg.
+  gccflag=-M
+  depmode=gcc
+fi
+
+if test "$depmode" = dashXmstdout; then
+  # This is just like dashmstdout with a different argument.
+  dashmflag=-xM
+  depmode=dashmstdout
+fi
+
+cygpath_u="cygpath -u -f -"
+if test "$depmode" = msvcmsys; then
+  # This is just like msvisualcpp but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvisualcpp
+fi
+
+if test "$depmode" = msvc7msys; then
+  # This is just like msvc7 but w/o cygpath translation.
+  # Just convert the backslash-escaped backslashes to single forward
+  # slashes to satisfy depend.m4
+  cygpath_u='sed s,\\\\,/,g'
+  depmode=msvc7
+fi
+
+if test "$depmode" = xlc; then
+  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
+  gccflag=-qmakedep=gcc,-MF
+  depmode=gcc
+fi
+
+case "$depmode" in
+gcc3)
+## gcc 3 implements dependency tracking that does exactly what
+## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
+## it if -MD -MP comes after the -MF stuff.  Hmm.
+## Unfortunately, FreeBSD c89 acceptance of flags depends upon
+## the command line argument order; so add the flags where they
+## appear in depend2.am.  Note that the slowdown incurred here
+## affects only configure: in makefiles, %FASTDEP% shortcuts this.
+  for arg
+  do
+    case $arg in
+    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
+    *)  set fnord "$@" "$arg" ;;
+    esac
+    shift # fnord
+    shift # $arg
+  done
+  "$@"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  mv "$tmpdepfile" "$depfile"
+  ;;
+
+gcc)
+## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
+## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
+## (see the conditional assignment to $gccflag above).
+## There are various ways to get dependency output from gcc.  Here's
+## why we pick this rather obscure method:
+## - Don't want to use -MD because we'd like the dependencies to end
+##   up in a subdir.  Having to rename by hand is ugly.
+##   (We might end up doing this anyway to support other compilers.)
+## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
+##   -MM, not -M (despite what the docs say).  Also, it might not be
+##   supported by the other compilers which use the 'gcc' depmode.
+## - Using -M directly means running the compiler twice (even worse
+##   than renaming).
+  if test -z "$gccflag"; then
+    gccflag=-MD,
+  fi
+  "$@" -Wp,"$gccflag$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The second -e expression handles DOS-style file names with drive
+  # letters.
+  sed -e 's/^[^:]*: / /' \
+      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
+## This next piece of magic avoids the "deleted header file" problem.
+## The problem is that when a header file which appears in a .P file
+## is deleted, the dependency causes make to die (because there is
+## typically no way to rebuild the header).  We avoid this by adding
+## dummy dependencies for each header file.  Too bad gcc doesn't do
+## this for us directly.
+## Some versions of gcc put a space before the ':'.  On the theory
+## that the space means something, we add a space to the output as
+## well.  hp depmode also adds that space, but also prefixes the VPATH
+## to the object.  Take care to not repeat it in the output.
+## Some versions of the HPUX 10.20 sed can't process this invocation
+## correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+sgi)
+  if test "$libtool" = yes; then
+    "$@" "-Wp,-MDupdate,$tmpdepfile"
+  else
+    "$@" -MDupdate "$tmpdepfile"
+  fi
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+
+  if test -f "$tmpdepfile"; then  # yes, the sourcefile depend on other files
+    echo "$object : \\" > "$depfile"
+    # Clip off the initial element (the dependent).  Don't try to be
+    # clever and replace this with sed code, as IRIX sed won't handle
+    # lines with more than a fixed number of characters (4096 in
+    # IRIX 6.2 sed, 8192 in IRIX 6.5).  We also remove comment lines;
+    # the IRIX cc adds comments like '#:fec' to the end of the
+    # dependency line.
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \
+      | tr "$nl" ' ' >> "$depfile"
+    echo >> "$depfile"
+    # The second pass generates a dummy entry for each header file.
+    tr ' ' "$nl" < "$tmpdepfile" \
+      | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \
+      >> "$depfile"
+  else
+    make_dummy_depfile
+  fi
+  rm -f "$tmpdepfile"
+  ;;
+
+xlc)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+aix)
+  # The C for AIX Compiler uses -M and outputs the dependencies
+  # in a .u file.  In older versions, this file always lives in the
+  # current directory.  Also, the AIX compiler puts '$object:' at the
+  # start of each line; $object doesn't have directory information.
+  # Version 6 uses the directory in both cases.
+  set_dir_from "$object"
+  set_base_from "$object"
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$base.u
+    tmpdepfile3=$dir.libs/$base.u
+    "$@" -Wc,-M
+  else
+    tmpdepfile1=$dir$base.u
+    tmpdepfile2=$dir$base.u
+    tmpdepfile3=$dir$base.u
+    "$@" -M
+  fi
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  aix_post_process_depfile
+  ;;
+
+tcc)
+  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
+  # FIXME: That version still under development at the moment of writing.
+  #        Make that this statement remains true also for stable, released
+  #        versions.
+  # It will wrap lines (doesn't matter whether long or short) with a
+  # trailing '\', as in:
+  #
+  #   foo.o : \
+  #    foo.c \
+  #    foo.h \
+  #
+  # It will put a trailing '\' even on the last line, and will use leading
+  # spaces rather than leading tabs (at least since its commit 0394caf7
+  # "Emit spaces for -MD").
+  "$@" -MD -MF "$tmpdepfile"
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
+  # We have to change lines of the first kind to '$object: \'.
+  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
+  # And for each line of the second kind, we have to emit a 'dep.h:'
+  # dummy dependency, to avoid the deleted-header problem.
+  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+## The order of this option in the case statement is important, since the
+## shell code in configure will try each of these formats in the order
+## listed in this file.  A plain '-MD' option would be understood by many
+## compilers, so we must ensure this comes after the gcc and icc options.
+pgcc)
+  # Portland's C compiler understands '-MD'.
+  # Will always output deps to 'file.d' where file is the root name of the
+  # source file under compilation, even if file resides in a subdirectory.
+  # The object file name does not affect the name of the '.d' file.
+  # pgcc 10.2 will output
+  #    foo.o: sub/foo.c sub/foo.h
+  # and will wrap long lines using '\' :
+  #    foo.o: sub/foo.c ... \
+  #     sub/foo.h ... \
+  #     ...
+  set_dir_from "$object"
+  # Use the source, not the object, to determine the base name, since
+  # that's sadly what pgcc will do too.
+  set_base_from "$source"
+  tmpdepfile=$base.d
+
+  # For projects that build the same source file twice into different object
+  # files, the pgcc approach of using the *source* file root name can cause
+  # problems in parallel builds.  Use a locking strategy to avoid stomping on
+  # the same $tmpdepfile.
+  lockdir=$base.d-lock
+  trap "
+    echo '$0: caught signal, cleaning up...' >&2
+    rmdir '$lockdir'
+    exit 1
+  " 1 2 13 15
+  numtries=100
+  i=$numtries
+  while test $i -gt 0; do
+    # mkdir is a portable test-and-set.
+    if mkdir "$lockdir" 2>/dev/null; then
+      # This process acquired the lock.
+      "$@" -MD
+      stat=$?
+      # Release the lock.
+      rmdir "$lockdir"
+      break
+    else
+      # If the lock is being held by a different process, wait
+      # until the winning process is done or we timeout.
+      while test -d "$lockdir" && test $i -gt 0; do
+        sleep 1
+        i=`expr $i - 1`
+      done
+    fi
+    i=`expr $i - 1`
+  done
+  trap - 1 2 13 15
+  if test $i -le 0; then
+    echo "$0: failed to acquire lock after $numtries attempts" >&2
+    echo "$0: check lockdir '$lockdir'" >&2
+    exit 1
+  fi
+
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  # Each line is of the form `foo.o: dependent.h',
+  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
+  # Do two passes, one to just change these to
+  # `$object: dependent.h' and one to simply `dependent.h:'.
+  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
+    | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+hp2)
+  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
+  # compilers, which have integrated preprocessors.  The correct option
+  # to use with these is +Maked; it writes dependencies to a file named
+  # 'foo.d', which lands next to the object file, wherever that
+  # happens to be.
+  # Much of this is similar to the tru64 case; see comments there.
+  set_dir_from  "$object"
+  set_base_from "$object"
+  if test "$libtool" = yes; then
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir.libs/$base.d
+    "$@" -Wc,+Maked
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    "$@" +Maked
+  fi
+  stat=$?
+  if test $stat -ne 0; then
+     rm -f "$tmpdepfile1" "$tmpdepfile2"
+     exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  if test -f "$tmpdepfile"; then
+    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
+    # Add 'dependent.h:' lines.
+    sed -ne '2,${
+               s/^ *//
+               s/ \\*$//
+               s/$/:/
+               p
+             }' "$tmpdepfile" >> "$depfile"
+  else
+    make_dummy_depfile
+  fi
+  rm -f "$tmpdepfile" "$tmpdepfile2"
+  ;;
+
+tru64)
+  # The Tru64 compiler uses -MD to generate dependencies as a side
+  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
+  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
+  # dependencies in 'foo.d' instead, so we check for that too.
+  # Subdirectories are respected.
+  set_dir_from  "$object"
+  set_base_from "$object"
+
+  if test "$libtool" = yes; then
+    # Libtool generates 2 separate objects for the 2 libraries.  These
+    # two compilations output dependencies in $dir.libs/$base.o.d and
+    # in $dir$base.o.d.  We have to check for both files, because
+    # one of the two compilations can be disabled.  We should prefer
+    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
+    # automatically cleaned when .libs/ is deleted, while ignoring
+    # the former would cause a distcleancheck panic.
+    tmpdepfile1=$dir$base.o.d          # libtool 1.5
+    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
+    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
+    "$@" -Wc,-MD
+  else
+    tmpdepfile1=$dir$base.d
+    tmpdepfile2=$dir$base.d
+    tmpdepfile3=$dir$base.d
+    "$@" -MD
+  fi
+
+  stat=$?
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+    exit $stat
+  fi
+
+  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
+  do
+    test -f "$tmpdepfile" && break
+  done
+  # Same post-processing that is required for AIX mode.
+  aix_post_process_depfile
+  ;;
+
+msvc7)
+  if test "$libtool" = yes; then
+    showIncludes=-Wc,-showIncludes
+  else
+    showIncludes=-showIncludes
+  fi
+  "$@" $showIncludes > "$tmpdepfile"
+  stat=$?
+  grep -v '^Note: including file: ' "$tmpdepfile"
+  if test $stat -ne 0; then
+    rm -f "$tmpdepfile"
+    exit $stat
+  fi
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  # The first sed program below extracts the file names and escapes
+  # backslashes for cygpath.  The second sed program outputs the file
+  # name when reading, but also accumulates all include files in the
+  # hold buffer in order to output them again at the end.  This only
+  # works with sed implementations that can handle large buffers.
+  sed < "$tmpdepfile" -n '
+/^Note: including file:  *\(.*\)/ {
+  s//\1/
+  s/\\/\\\\/g
+  p
+}' | $cygpath_u | sort -u | sed -n '
+s/ /\\ /g
+s/\(.*\)/'"$tab"'\1 \\/p
+s/.\(.*\) \\/\1:/
+H
+$ {
+  s/.*/'"$tab"'/
+  G
+  p
+}' >> "$depfile"
+  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
+  rm -f "$tmpdepfile"
+  ;;
+
+msvc7msys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+#nosideeffect)
+  # This comment above is used by automake to tell side-effect
+  # dependency tracking mechanisms from slower ones.
+
+dashmstdout)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout, regardless of -o.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove '-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  test -z "$dashmflag" && dashmflag=-M
+  # Require at least two characters before searching for ':'
+  # in the target name.  This is to cope with DOS-style filenames:
+  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
+  "$@" $dashmflag |
+    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
+  rm -f "$depfile"
+  cat < "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process this sed invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  tr ' ' "$nl" < "$tmpdepfile" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+dashXmstdout)
+  # This case only exists to satisfy depend.m4.  It is never actually
+  # run, as this mode is specially recognized in the preamble.
+  exit 1
+  ;;
+
+makedepend)
+  "$@" || exit $?
+  # Remove any Libtool call
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+  # X makedepend
+  shift
+  cleared=no eat=no
+  for arg
+  do
+    case $cleared in
+    no)
+      set ""; shift
+      cleared=yes ;;
+    esac
+    if test $eat = yes; then
+      eat=no
+      continue
+    fi
+    case "$arg" in
+    -D*|-I*)
+      set fnord "$@" "$arg"; shift ;;
+    # Strip any option that makedepend may not understand.  Remove
+    # the object too, otherwise makedepend will parse it as a source file.
+    -arch)
+      eat=yes ;;
+    -*|$object)
+      ;;
+    *)
+      set fnord "$@" "$arg"; shift ;;
+    esac
+  done
+  obj_suffix=`echo "$object" | sed 's/^.*\././'`
+  touch "$tmpdepfile"
+  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
+  rm -f "$depfile"
+  # makedepend may prepend the VPATH from the source file name to the object.
+  # No need to regex-escape $object, excess matching of '.' is harmless.
+  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
+  # Some versions of the HPUX 10.20 sed can't process the last invocation
+  # correctly.  Breaking it into two sed invocations is a workaround.
+  sed '1,2d' "$tmpdepfile" \
+    | tr ' ' "$nl" \
+    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
+    | sed -e 's/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile" "$tmpdepfile".bak
+  ;;
+
+cpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  # Remove '-o $object'.
+  IFS=" "
+  for arg
+  do
+    case $arg in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    *)
+      set fnord "$@" "$arg"
+      shift # fnord
+      shift # $arg
+      ;;
+    esac
+  done
+
+  "$@" -E \
+    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
+    | sed '$ s: \\$::' > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  cat < "$tmpdepfile" >> "$depfile"
+  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvisualcpp)
+  # Important note: in order to support this mode, a compiler *must*
+  # always write the preprocessed file to stdout.
+  "$@" || exit $?
+
+  # Remove the call to Libtool.
+  if test "$libtool" = yes; then
+    while test "X$1" != 'X--mode=compile'; do
+      shift
+    done
+    shift
+  fi
+
+  IFS=" "
+  for arg
+  do
+    case "$arg" in
+    -o)
+      shift
+      ;;
+    $object)
+      shift
+      ;;
+    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
+        set fnord "$@"
+        shift
+        shift
+        ;;
+    *)
+        set fnord "$@" "$arg"
+        shift
+        shift
+        ;;
+    esac
+  done
+  "$@" -E 2>/dev/null |
+  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
+  rm -f "$depfile"
+  echo "$object : \\" > "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
+  echo "$tab" >> "$depfile"
+  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
+  rm -f "$tmpdepfile"
+  ;;
+
+msvcmsys)
+  # This case exists only to let depend.m4 do its work.  It works by
+  # looking at the text of this script.  This case will never be run,
+  # since it is checked for above.
+  exit 1
+  ;;
+
+none)
+  exec "$@"
+  ;;
+
+*)
+  echo "Unknown depmode $depmode" 1>&2
+  exit 1
+  ;;
+esac
+
+exit 0
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/git-version-gen b/build-aux/git-version-gen
new file mode 100755 (executable)
index 0000000..6d073fc
--- /dev/null
@@ -0,0 +1,227 @@
+#!/bin/sh
+# Print a version string.
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 2007-2018 Free Software Foundation, Inc.
+#
+# 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 3 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, see <https://www.gnu.org/licenses/>.
+
+# This script is derived from GIT-VERSION-GEN from GIT: https://git-scm.com/.
+# It may be run two ways:
+# - from a git repository in which the "git describe" command below
+#   produces useful output (thus requiring at least one signed tag)
+# - from a non-git-repo directory containing a .tarball-version file, which
+#   presumes this script is invoked like "./git-version-gen .tarball-version".
+
+# In order to use intra-version strings in your project, you will need two
+# separate generated version string files:
+#
+# .tarball-version - present only in a distribution tarball, and not in
+#   a checked-out repository.  Created with contents that were learned at
+#   the last time autoconf was run, and used by git-version-gen.  Must not
+#   be present in either $(srcdir) or $(builddir) for git-version-gen to
+#   give accurate answers during normal development with a checked out tree,
+#   but must be present in a tarball when there is no version control system.
+#   Therefore, it cannot be used in any dependencies.  GNUmakefile has
+#   hooks to force a reconfigure at distribution time to get the value
+#   correct, without penalizing normal development with extra reconfigures.
+#
+# .version - present in a checked-out repository and in a distribution
+#   tarball.  Usable in dependencies, particularly for files that don't
+#   want to depend on config.h but do want to track version changes.
+#   Delete this file prior to any autoconf run where you want to rebuild
+#   files to pick up a version string change; and leave it stale to
+#   minimize rebuild time after unrelated changes to configure sources.
+#
+# As with any generated file in a VC'd directory, you should add
+# /.version to .gitignore, so that you don't accidentally commit it.
+# .tarball-version is never generated in a VC'd directory, so needn't
+# be listed there.
+#
+# Use the following line in your configure.ac, so that $(VERSION) will
+# automatically be up-to-date each time configure is run (and note that
+# since configure.ac no longer includes a version string, Makefile rules
+# should not depend on configure.ac for version updates).
+#
+# AC_INIT([GNU project],
+#         m4_esyscmd([build-aux/git-version-gen .tarball-version]),
+#         [bug-project@example])
+#
+# Then use the following lines in your Makefile.am, so that .version
+# will be present for dependencies, and so that .version and
+# .tarball-version will exist in distribution tarballs.
+#
+# EXTRA_DIST = $(top_srcdir)/.version
+# BUILT_SOURCES = $(top_srcdir)/.version
+# $(top_srcdir)/.version:
+#      echo $(VERSION) > $@-t && mv $@-t $@
+# dist-hook:
+#      echo $(VERSION) > $(distdir)/.tarball-version
+
+
+me=$0
+
+version="git-version-gen $scriptversion
+
+Copyright 2011 Free Software Foundation, Inc.
+There is NO warranty.  You may redistribute this software
+under the terms of the GNU General Public License.
+For more information about these matters, see the files named COPYING."
+
+usage="\
+Usage: $me [OPTION]... \$srcdir/.tarball-version [TAG-NORMALIZATION-SED-SCRIPT]
+Print a version string.
+
+Options:
+
+   --prefix PREFIX    prefix of git tags (default 'v')
+   --fallback VERSION
+                      fallback version to use if \"git --version\" fails
+
+   --help             display this help and exit
+   --version          output version information and exit
+
+Running without arguments will suffice in most cases."
+
+prefix=v
+fallback=
+
+while test $# -gt 0; do
+  case $1 in
+    --help) echo "$usage"; exit 0;;
+    --version) echo "$version"; exit 0;;
+    --prefix) shift; prefix=${1?};;
+    --fallback) shift; fallback=${1?};;
+    -*)
+      echo "$0: Unknown option '$1'." >&2
+      echo "$0: Try '--help' for more information." >&2
+      exit 1;;
+    *)
+      if test "x$tarball_version_file" = x; then
+        tarball_version_file="$1"
+      elif test "x$tag_sed_script" = x; then
+        tag_sed_script="$1"
+      else
+        echo "$0: extra non-option argument '$1'." >&2
+        exit 1
+      fi;;
+  esac
+  shift
+done
+
+if test "x$tarball_version_file" = x; then
+    echo "$usage"
+    exit 1
+fi
+
+tag_sed_script="${tag_sed_script:-s/x/x/}"
+
+nl='
+'
+
+# Avoid meddling by environment variable of the same name.
+v=
+v_from_git=
+
+# First see if there is a tarball-only version file.
+# then try "git describe", then default.
+if test -f $tarball_version_file
+then
+    v=`cat $tarball_version_file` || v=
+    case $v in
+        *$nl*) v= ;; # reject multi-line output
+        [0-9]*) ;;
+        *) v= ;;
+    esac
+    test "x$v" = x \
+        && echo "$0: WARNING: $tarball_version_file is missing or damaged" 1>&2
+fi
+
+if test "x$v" != x
+then
+    : # use $v
+# Otherwise, if there is at least one git commit involving the working
+# directory, and "git describe" output looks sensible, use that to
+# derive a version string.
+elif test "`git log -1 --pretty=format:x . 2>&1`" = x \
+    && v=`git describe --abbrev=4 --match="$prefix*" HEAD 2>/dev/null \
+          || git describe --abbrev=4 HEAD 2>/dev/null` \
+    && v=`printf '%s\n' "$v" | sed "$tag_sed_script"` \
+    && case $v in
+         $prefix[0-9]*) ;;
+         *) (exit 1) ;;
+       esac
+then
+    # Is this a new git that lists number of commits since the last
+    # tag or the previous older version that did not?
+    #   Newer: v6.10-77-g0f8faeb
+    #   Older: v6.10-g0f8faeb
+    vprefix=`expr "X$v" : 'X\(.*\)-g[^-]*$'` || vprefix=$v
+    case $vprefix in
+        *-*) : git describe is probably okay three part flavor ;;
+        *)
+            : git describe is older two part flavor
+            # Recreate the number of commits and rewrite such that the
+            # result is the same as if we were using the newer version
+            # of git describe.
+            vtag=`echo "$v" | sed 's/-.*//'`
+            commit_list=`git rev-list "$vtag"..HEAD 2>/dev/null` \
+                || { commit_list=failed;
+                     echo "$0: WARNING: git rev-list failed" 1>&2; }
+            numcommits=`echo "$commit_list" | wc -l`
+            v=`echo "$v" | sed "s/\(.*\)-\(.*\)/\1-$numcommits-\2/"`;
+            test "$commit_list" = failed && v=UNKNOWN
+            ;;
+    esac
+
+    # Change the penultimate "-" to ".", for version-comparing tools.
+    # Remove the "g" to save a byte.
+    v=`echo "$v" | sed 's/-\([^-]*\)-g\([^-]*\)$/.\1-\2/'`;
+    v_from_git=1
+elif test "x$fallback" = x || git --version >/dev/null 2>&1; then
+    v=UNKNOWN
+else
+    v=$fallback
+fi
+
+v=`echo "$v" |sed "s/^$prefix//"`
+
+# Test whether to append the "-dirty" suffix only if the version
+# string we're using came from git.  I.e., skip the test if it's "UNKNOWN"
+# or if it came from .tarball-version.
+if test "x$v_from_git" != x; then
+  # Don't declare a version "dirty" merely because a timestamp has changed.
+  git update-index --refresh > /dev/null 2>&1
+
+  dirty=`exec 2>/dev/null;git diff-index --name-only HEAD` || dirty=
+  case "$dirty" in
+      '') ;;
+      *) # Append the suffix only if there isn't one already.
+          case $v in
+            *-dirty) ;;
+            *) v="$v-dirty" ;;
+          esac ;;
+  esac
+fi
+
+# Omit the trailing newline, so that m4_esyscmd can use the result directly.
+printf %s "$v"
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/install-sh b/build-aux/install-sh
new file mode 100755 (executable)
index 0000000..8175c64
--- /dev/null
@@ -0,0 +1,518 @@
+#!/bin/sh
+# install - install a program, script, or datafile
+
+scriptversion=2018-03-11.20; # UTC
+
+# This originates from X11R5 (mit/util/scripts/install.sh), which was
+# later released in X11R6 (xc/config/util/install.sh) with the
+# following copyright and license.
+#
+# Copyright (C) 1994 X Consortium
+#
+# Permission is hereby granted, free of charge, to any person obtaining a copy
+# of this software and associated documentation files (the "Software"), to
+# deal in the Software without restriction, including without limitation the
+# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
+# sell copies of the Software, and to permit persons to whom the Software is
+# furnished to do so, subject to the following conditions:
+#
+# The above copyright notice and this permission notice shall be included in
+# all copies or substantial portions of the Software.
+#
+# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
+# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
+# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
+# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+#
+# Except as contained in this notice, the name of the X Consortium shall not
+# be used in advertising or otherwise to promote the sale, use or other deal-
+# ings in this Software without prior written authorization from the X Consor-
+# tium.
+#
+#
+# FSF changes to this file are in the public domain.
+#
+# Calling this script install-sh is preferred over install.sh, to prevent
+# 'make' implicit rules from creating a file called install from it
+# when there is no Makefile.
+#
+# This script is compatible with the BSD install script, but was written
+# from scratch.
+
+tab='  '
+nl='
+'
+IFS=" $tab$nl"
+
+# Set DOITPROG to "echo" to test this script.
+
+doit=${DOITPROG-}
+doit_exec=${doit:-exec}
+
+# Put in absolute file names if you don't have them in your path;
+# or use environment vars.
+
+chgrpprog=${CHGRPPROG-chgrp}
+chmodprog=${CHMODPROG-chmod}
+chownprog=${CHOWNPROG-chown}
+cmpprog=${CMPPROG-cmp}
+cpprog=${CPPROG-cp}
+mkdirprog=${MKDIRPROG-mkdir}
+mvprog=${MVPROG-mv}
+rmprog=${RMPROG-rm}
+stripprog=${STRIPPROG-strip}
+
+posix_mkdir=
+
+# Desired mode of installed file.
+mode=0755
+
+chgrpcmd=
+chmodcmd=$chmodprog
+chowncmd=
+mvcmd=$mvprog
+rmcmd="$rmprog -f"
+stripcmd=
+
+src=
+dst=
+dir_arg=
+dst_arg=
+
+copy_on_change=false
+is_target_a_directory=possibly
+
+usage="\
+Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
+   or: $0 [OPTION]... SRCFILES... DIRECTORY
+   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
+   or: $0 [OPTION]... -d DIRECTORIES...
+
+In the 1st form, copy SRCFILE to DSTFILE.
+In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
+In the 4th, create DIRECTORIES.
+
+Options:
+     --help     display this help and exit.
+     --version  display version info and exit.
+
+  -c            (ignored)
+  -C            install only if different (preserve the last data modification time)
+  -d            create directories instead of installing files.
+  -g GROUP      $chgrpprog installed files to GROUP.
+  -m MODE       $chmodprog installed files to MODE.
+  -o USER       $chownprog installed files to USER.
+  -s            $stripprog installed files.
+  -t DIRECTORY  install into DIRECTORY.
+  -T            report an error if DSTFILE is a directory.
+
+Environment variables override the default commands:
+  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
+  RMPROG STRIPPROG
+"
+
+while test $# -ne 0; do
+  case $1 in
+    -c) ;;
+
+    -C) copy_on_change=true;;
+
+    -d) dir_arg=true;;
+
+    -g) chgrpcmd="$chgrpprog $2"
+        shift;;
+
+    --help) echo "$usage"; exit $?;;
+
+    -m) mode=$2
+        case $mode in
+          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
+            echo "$0: invalid mode: $mode" >&2
+            exit 1;;
+        esac
+        shift;;
+
+    -o) chowncmd="$chownprog $2"
+        shift;;
+
+    -s) stripcmd=$stripprog;;
+
+    -t)
+        is_target_a_directory=always
+        dst_arg=$2
+        # Protect names problematic for 'test' and other utilities.
+        case $dst_arg in
+          -* | [=\(\)!]) dst_arg=./$dst_arg;;
+        esac
+        shift;;
+
+    -T) is_target_a_directory=never;;
+
+    --version) echo "$0 $scriptversion"; exit $?;;
+
+    --) shift
+        break;;
+
+    -*) echo "$0: invalid option: $1" >&2
+        exit 1;;
+
+    *)  break;;
+  esac
+  shift
+done
+
+# We allow the use of options -d and -T together, by making -d
+# take the precedence; this is for compatibility with GNU install.
+
+if test -n "$dir_arg"; then
+  if test -n "$dst_arg"; then
+    echo "$0: target directory not allowed when installing a directory." >&2
+    exit 1
+  fi
+fi
+
+if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
+  # When -d is used, all remaining arguments are directories to create.
+  # When -t is used, the destination is already specified.
+  # Otherwise, the last argument is the destination.  Remove it from $@.
+  for arg
+  do
+    if test -n "$dst_arg"; then
+      # $@ is not empty: it contains at least $arg.
+      set fnord "$@" "$dst_arg"
+      shift # fnord
+    fi
+    shift # arg
+    dst_arg=$arg
+    # Protect names problematic for 'test' and other utilities.
+    case $dst_arg in
+      -* | [=\(\)!]) dst_arg=./$dst_arg;;
+    esac
+  done
+fi
+
+if test $# -eq 0; then
+  if test -z "$dir_arg"; then
+    echo "$0: no input file specified." >&2
+    exit 1
+  fi
+  # It's OK to call 'install-sh -d' without argument.
+  # This can happen when creating conditional directories.
+  exit 0
+fi
+
+if test -z "$dir_arg"; then
+  if test $# -gt 1 || test "$is_target_a_directory" = always; then
+    if test ! -d "$dst_arg"; then
+      echo "$0: $dst_arg: Is not a directory." >&2
+      exit 1
+    fi
+  fi
+fi
+
+if test -z "$dir_arg"; then
+  do_exit='(exit $ret); exit $ret'
+  trap "ret=129; $do_exit" 1
+  trap "ret=130; $do_exit" 2
+  trap "ret=141; $do_exit" 13
+  trap "ret=143; $do_exit" 15
+
+  # Set umask so as not to create temps with too-generous modes.
+  # However, 'strip' requires both read and write access to temps.
+  case $mode in
+    # Optimize common cases.
+    *644) cp_umask=133;;
+    *755) cp_umask=22;;
+
+    *[0-7])
+      if test -z "$stripcmd"; then
+        u_plus_rw=
+      else
+        u_plus_rw='% 200'
+      fi
+      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
+    *)
+      if test -z "$stripcmd"; then
+        u_plus_rw=
+      else
+        u_plus_rw=,u+rw
+      fi
+      cp_umask=$mode$u_plus_rw;;
+  esac
+fi
+
+for src
+do
+  # Protect names problematic for 'test' and other utilities.
+  case $src in
+    -* | [=\(\)!]) src=./$src;;
+  esac
+
+  if test -n "$dir_arg"; then
+    dst=$src
+    dstdir=$dst
+    test -d "$dstdir"
+    dstdir_status=$?
+  else
+
+    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
+    # might cause directories to be created, which would be especially bad
+    # if $src (and thus $dsttmp) contains '*'.
+    if test ! -f "$src" && test ! -d "$src"; then
+      echo "$0: $src does not exist." >&2
+      exit 1
+    fi
+
+    if test -z "$dst_arg"; then
+      echo "$0: no destination specified." >&2
+      exit 1
+    fi
+    dst=$dst_arg
+
+    # If destination is a directory, append the input filename.
+    if test -d "$dst"; then
+      if test "$is_target_a_directory" = never; then
+        echo "$0: $dst_arg: Is a directory" >&2
+        exit 1
+      fi
+      dstdir=$dst
+      dstbase=`basename "$src"`
+      case $dst in
+       */) dst=$dst$dstbase;;
+       *)  dst=$dst/$dstbase;;
+      esac
+      dstdir_status=0
+    else
+      dstdir=`dirname "$dst"`
+      test -d "$dstdir"
+      dstdir_status=$?
+    fi
+  fi
+
+  case $dstdir in
+    */) dstdirslash=$dstdir;;
+    *)  dstdirslash=$dstdir/;;
+  esac
+
+  obsolete_mkdir_used=false
+
+  if test $dstdir_status != 0; then
+    case $posix_mkdir in
+      '')
+        # Create intermediate dirs using mode 755 as modified by the umask.
+        # This is like FreeBSD 'install' as of 1997-10-28.
+        umask=`umask`
+        case $stripcmd.$umask in
+          # Optimize common cases.
+          *[2367][2367]) mkdir_umask=$umask;;
+          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
+
+          *[0-7])
+            mkdir_umask=`expr $umask + 22 \
+              - $umask % 100 % 40 + $umask % 20 \
+              - $umask % 10 % 4 + $umask % 2
+            `;;
+          *) mkdir_umask=$umask,go-w;;
+        esac
+
+        # With -d, create the new directory with the user-specified mode.
+        # Otherwise, rely on $mkdir_umask.
+        if test -n "$dir_arg"; then
+          mkdir_mode=-m$mode
+        else
+          mkdir_mode=
+        fi
+
+        posix_mkdir=false
+        case $umask in
+          *[123567][0-7][0-7])
+            # POSIX mkdir -p sets u+wx bits regardless of umask, which
+            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
+            ;;
+          *)
+            # Note that $RANDOM variable is not portable (e.g. dash);  Use it
+            # here however when possible just to lower collision chance.
+            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
+
+            trap 'ret=$?; rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null; exit $ret' 0
+
+            # Because "mkdir -p" follows existing symlinks and we likely work
+            # directly in world-writeable /tmp, make sure that the '$tmpdir'
+            # directory is successfully created first before we actually test
+            # 'mkdir -p' feature.
+            if (umask $mkdir_umask &&
+                $mkdirprog $mkdir_mode "$tmpdir" &&
+                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1
+            then
+              if test -z "$dir_arg" || {
+                   # Check for POSIX incompatibilities with -m.
+                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
+                   # other-writable bit of parent directory when it shouldn't.
+                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
+                   test_tmpdir="$tmpdir/a"
+                   ls_ld_tmpdir=`ls -ld "$test_tmpdir"`
+                   case $ls_ld_tmpdir in
+                     d????-?r-*) different_mode=700;;
+                     d????-?--*) different_mode=755;;
+                     *) false;;
+                   esac &&
+                   $mkdirprog -m$different_mode -p -- "$test_tmpdir" && {
+                     ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"`
+                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
+                   }
+                 }
+              then posix_mkdir=:
+              fi
+              rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir"
+            else
+              # Remove any dirs left behind by ancient mkdir implementations.
+              rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null
+            fi
+            trap '' 0;;
+        esac;;
+    esac
+
+    if
+      $posix_mkdir && (
+        umask $mkdir_umask &&
+        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
+      )
+    then :
+    else
+
+      # The umask is ridiculous, or mkdir does not conform to POSIX,
+      # or it failed possibly due to a race condition.  Create the
+      # directory the slow way, step by step, checking for races as we go.
+
+      case $dstdir in
+        /*) prefix='/';;
+        [-=\(\)!]*) prefix='./';;
+        *)  prefix='';;
+      esac
+
+      oIFS=$IFS
+      IFS=/
+      set -f
+      set fnord $dstdir
+      shift
+      set +f
+      IFS=$oIFS
+
+      prefixes=
+
+      for d
+      do
+        test X"$d" = X && continue
+
+        prefix=$prefix$d
+        if test -d "$prefix"; then
+          prefixes=
+        else
+          if $posix_mkdir; then
+            (umask=$mkdir_umask &&
+             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
+            # Don't fail if two instances are running concurrently.
+            test -d "$prefix" || exit 1
+          else
+            case $prefix in
+              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
+              *) qprefix=$prefix;;
+            esac
+            prefixes="$prefixes '$qprefix'"
+          fi
+        fi
+        prefix=$prefix/
+      done
+
+      if test -n "$prefixes"; then
+        # Don't fail if two instances are running concurrently.
+        (umask $mkdir_umask &&
+         eval "\$doit_exec \$mkdirprog $prefixes") ||
+          test -d "$dstdir" || exit 1
+        obsolete_mkdir_used=true
+      fi
+    fi
+  fi
+
+  if test -n "$dir_arg"; then
+    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
+    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
+      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
+  else
+
+    # Make a couple of temp file names in the proper directory.
+    dsttmp=${dstdirslash}_inst.$$_
+    rmtmp=${dstdirslash}_rm.$$_
+
+    # Trap to clean up those temp files at exit.
+    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
+
+    # Copy the file name to the temp name.
+    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
+
+    # and set any options; do chmod last to preserve setuid bits.
+    #
+    # If any of these fail, we abort the whole thing.  If we want to
+    # ignore errors from any of these, just make sure not to ignore
+    # errors from the above "$doit $cpprog $src $dsttmp" command.
+    #
+    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
+    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
+    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
+    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
+
+    # If -C, don't bother to copy if it wouldn't change the file.
+    if $copy_on_change &&
+       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
+       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
+       set -f &&
+       set X $old && old=:$2:$4:$5:$6 &&
+       set X $new && new=:$2:$4:$5:$6 &&
+       set +f &&
+       test "$old" = "$new" &&
+       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
+    then
+      rm -f "$dsttmp"
+    else
+      # Rename the file to the real destination.
+      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
+
+      # The rename failed, perhaps because mv can't rename something else
+      # to itself, or perhaps because mv is so ancient that it does not
+      # support -f.
+      {
+        # Now remove or move aside any old file at destination location.
+        # We try this two ways since rm can't unlink itself on some
+        # systems and the destination file might be busy for other
+        # reasons.  In this case, the final cleanup might fail but the new
+        # file should still install successfully.
+        {
+          test ! -f "$dst" ||
+          $doit $rmcmd -f "$dst" 2>/dev/null ||
+          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
+            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
+          } ||
+          { echo "$0: cannot unlink or rename $dst" >&2
+            (exit 1); exit 1
+          }
+        } &&
+
+        # Now rename the file to the real destination.
+        $doit $mvcmd "$dsttmp" "$dst"
+      }
+    fi || exit 1
+
+    trap '' 0
+  fi
+done
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/missing b/build-aux/missing
new file mode 100755 (executable)
index 0000000..625aeb1
--- /dev/null
@@ -0,0 +1,215 @@
+#! /bin/sh
+# Common wrapper for a few potentially missing GNU programs.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+# Originally written by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
+
+# 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, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+if test $# -eq 0; then
+  echo 1>&2 "Try '$0 --help' for more information"
+  exit 1
+fi
+
+case $1 in
+
+  --is-lightweight)
+    # Used by our autoconf macros to check whether the available missing
+    # script is modern enough.
+    exit 0
+    ;;
+
+  --run)
+    # Back-compat with the calling convention used by older automake.
+    shift
+    ;;
+
+  -h|--h|--he|--hel|--help)
+    echo "\
+$0 [OPTION]... PROGRAM [ARGUMENT]...
+
+Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due
+to PROGRAM being missing or too old.
+
+Options:
+  -h, --help      display this help and exit
+  -v, --version   output version information and exit
+
+Supported PROGRAM values:
+  aclocal   autoconf  autoheader   autom4te  automake  makeinfo
+  bison     yacc      flex         lex       help2man
+
+Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
+'g' are ignored when checking the name.
+
+Send bug reports to <bug-automake@gnu.org>."
+    exit $?
+    ;;
+
+  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
+    echo "missing $scriptversion (GNU Automake)"
+    exit $?
+    ;;
+
+  -*)
+    echo 1>&2 "$0: unknown '$1' option"
+    echo 1>&2 "Try '$0 --help' for more information"
+    exit 1
+    ;;
+
+esac
+
+# Run the given program, remember its exit status.
+"$@"; st=$?
+
+# If it succeeded, we are done.
+test $st -eq 0 && exit 0
+
+# Also exit now if we it failed (or wasn't found), and '--version' was
+# passed; such an option is passed most likely to detect whether the
+# program is present and works.
+case $2 in --version|--help) exit $st;; esac
+
+# Exit code 63 means version mismatch.  This often happens when the user
+# tries to use an ancient version of a tool on a file that requires a
+# minimum version.
+if test $st -eq 63; then
+  msg="probably too old"
+elif test $st -eq 127; then
+  # Program was missing.
+  msg="missing on your system"
+else
+  # Program was found and executed, but failed.  Give up.
+  exit $st
+fi
+
+perl_URL=https://www.perl.org/
+flex_URL=https://github.com/westes/flex
+gnu_software_URL=https://www.gnu.org/software
+
+program_details ()
+{
+  case $1 in
+    aclocal|automake)
+      echo "The '$1' program is part of the GNU Automake package:"
+      echo "<$gnu_software_URL/automake>"
+      echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/autoconf>"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+    autoconf|autom4te|autoheader)
+      echo "The '$1' program is part of the GNU Autoconf package:"
+      echo "<$gnu_software_URL/autoconf/>"
+      echo "It also requires GNU m4 and Perl in order to run:"
+      echo "<$gnu_software_URL/m4/>"
+      echo "<$perl_URL>"
+      ;;
+  esac
+}
+
+give_advice ()
+{
+  # Normalize program name to check for.
+  normalized_program=`echo "$1" | sed '
+    s/^gnu-//; t
+    s/^gnu//; t
+    s/^g//; t'`
+
+  printf '%s\n' "'$1' is $msg."
+
+  configure_deps="'configure.ac' or m4 files included by 'configure.ac'"
+  case $normalized_program in
+    autoconf*)
+      echo "You should only need it if you modified 'configure.ac',"
+      echo "or m4 files included by it."
+      program_details 'autoconf'
+      ;;
+    autoheader*)
+      echo "You should only need it if you modified 'acconfig.h' or"
+      echo "$configure_deps."
+      program_details 'autoheader'
+      ;;
+    automake*)
+      echo "You should only need it if you modified 'Makefile.am' or"
+      echo "$configure_deps."
+      program_details 'automake'
+      ;;
+    aclocal*)
+      echo "You should only need it if you modified 'acinclude.m4' or"
+      echo "$configure_deps."
+      program_details 'aclocal'
+      ;;
+   autom4te*)
+      echo "You might have modified some maintainer files that require"
+      echo "the 'autom4te' program to be rebuilt."
+      program_details 'autom4te'
+      ;;
+    bison*|yacc*)
+      echo "You should only need it if you modified a '.y' file."
+      echo "You may want to install the GNU Bison package:"
+      echo "<$gnu_software_URL/bison/>"
+      ;;
+    lex*|flex*)
+      echo "You should only need it if you modified a '.l' file."
+      echo "You may want to install the Fast Lexical Analyzer package:"
+      echo "<$flex_URL>"
+      ;;
+    help2man*)
+      echo "You should only need it if you modified a dependency" \
+           "of a man page."
+      echo "You may want to install the GNU Help2man package:"
+      echo "<$gnu_software_URL/help2man/>"
+    ;;
+    makeinfo*)
+      echo "You should only need it if you modified a '.texi' file, or"
+      echo "any other file indirectly affecting the aspect of the manual."
+      echo "You might want to install the Texinfo package:"
+      echo "<$gnu_software_URL/texinfo/>"
+      echo "The spurious makeinfo call might also be the consequence of"
+      echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might"
+      echo "want to install GNU make:"
+      echo "<$gnu_software_URL/make/>"
+      ;;
+    *)
+      echo "You might have modified some files without having the proper"
+      echo "tools for further handling them.  Check the 'README' file, it"
+      echo "often tells you about the needed prerequisites for installing"
+      echo "this package.  You may also peek at any GNU archive site, in"
+      echo "case some other package contains this missing '$1' program."
+      ;;
+  esac
+}
+
+give_advice "$1" | sed -e '1s/^/WARNING: /' \
+                       -e '2,$s/^/         /' >&2
+
+# Propagate the correct exit status (expected to be 127 for a program
+# not found, 63 for a program that failed due to version mismatch).
+exit $st
+
+# Local variables:
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/prefix-gnulib-mk b/build-aux/prefix-gnulib-mk
new file mode 100755 (executable)
index 0000000..544654f
--- /dev/null
@@ -0,0 +1,229 @@
+eval '(exit $?0)' && eval 'exec perl -wS "$0" "$@"'
+  & eval 'exec perl -wS "$0" $argv:q'
+    if 0;
+
+use strict;
+use IO::File;
+use Getopt::Long;
+use File::Basename; # for dirname
+
+my $VERSION = '2012-01-21 17:13'; # UTC
+(my $ME = $0) =~ s|.*/||;
+
+my $prefix;
+my $lib_name;
+
+sub usage ($)
+{
+  my ($exit_code) = @_;
+  my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR);
+  if ($exit_code != 0)
+    {
+      print $STREAM "Try '$ME --help' for more information.\n";
+    }
+  else
+    {
+      print $STREAM <<EOF;
+Usage: $ME --lib-name=NAME FILE
+   or: $ME [--help|--version]
+Rewrite a gnulib-tool-generated FILE like lib/gnulib.mk to work with
+automake's subdir-objects.
+
+OPTIONS:
+
+This option must be specified:
+
+   --lib-name=NAME    library name, often "lib\$project"
+
+The following are optional:
+
+   --help             display this help and exit
+   --version          output version information and exit
+
+EOF
+    }
+  exit $exit_code;
+}
+
+# contents ($FILE_NAME)
+# ---------------------
+sub contents ($)
+{
+  my ($file) = @_;
+  local $/;                     # Turn on slurp-mode.
+  my $f = new IO::File "< $file" or die "$file";
+  my $contents = $f->getline or die "$file";
+  $f->close;
+  return $contents;
+}
+
+# prefix_word ($WORD)
+# -------------------
+# Do not prefix special words such as variable dereferences.  Also,
+# "Makefile" is really "Makefile", since precisely there is no
+# lib/Makefile.
+sub prefix_word ($)
+{
+  local ($_) = @_;
+  $_ = $prefix . $_
+    unless (/^-/ || m{^\$\(\w+\)} || $_ eq "Makefile" || $_ eq '\\'
+            || $_ eq '@ALLOCA@');
+  return $_;
+}
+
+
+# prefix_words ($TEXT)
+# --------------------
+sub prefix_words ($)
+{
+  local ($_) = @_;
+  s{(\S+)}{prefix_word($1)}gem;
+  return $_;
+}
+
+
+# prefix_assignment ($LHS-AND-ASSIGN-OP, $RHS)
+# --------------------------------------------
+sub prefix_assignment ($$)
+{
+  my ($lhs_and_assign_op, $rhs) = @_;
+  my $res;
+
+  # Some variables are initialized by gnulib.mk, and we don't want
+  # that.  Change '=' to '+='.
+  if ($lhs_and_assign_op =~ /^(GPERF|V_GPERF.*) =$/)
+    {
+      # Do not change the RHS, which specifies the GPERF program.
+    }
+  elsif ($lhs_and_assign_op =~
+      /^(SUBDIRS|EXTRA_DIST|BUILT_SOURCES|SUFFIXES|MOSTLYCLEANFILES
+         |CLEANFILES|DISTCLEANFILES|MAINTAINERCLEANFILES|AM_CFLAGS
+         |AM_CPPFLAGS|AM_GNU_GETTEXT)\ =/x)
+    {
+      $lhs_and_assign_op =~ s/=/+=/;
+    }
+  # We don't want to inherit gnulib's AUTOMAKE_OPTIONS, comment them.
+  elsif ($lhs_and_assign_op =~ /^AUTOMAKE_OPTIONS =/)
+    {
+      $lhs_and_assign_op =~ s/^/# /;
+    }
+  elsif ($lhs_and_assign_op =~ /^SUFFIXES /)
+    {
+      # Elide any SUFFIXES assignment or concatenation.
+      $lhs_and_assign_op =~ s/^/# /;
+    }
+  # The words are (probably) paths to files in lib/: prefix them.
+  else
+    {
+      $rhs = prefix_words($rhs)
+    }
+
+  # Variables which name depend on the location: libbison_a_SOURCES =>
+  # lib_libbison_a_SOURCES.
+  $lhs_and_assign_op =~ s/($lib_name)/lib_$1/g;
+
+  return $lhs_and_assign_op . $rhs;
+}
+
+# prefix $CONTENTS
+# ----------------
+# $CONTENTS is a Makefile content.  Post-process it so that each file-name
+# is prefixed with $prefix (e.g., "lib/").
+#
+# Relies heavily on the regularity of the file generated by gnulib-tool.
+sub prefix ($)
+{
+  # Work on $_.
+  local ($_) = @_;
+
+  # Prefix all the occurrence of files in rules.  If there is nothing
+  # after in the :, it's probably a phony target, or a suffix rule.
+  # Don't touch it.
+  s{^([-\w+/]+\.[-\w.]+ *: *\S.*)$}
+   {prefix_words($1)}gem;
+
+  # Prefix files in variables.
+  s{^([\w.]+\s*\+?=)(.*)$}
+   {prefix_assignment($1, $2)}gem;
+
+  # $(srcdir)/ is actually $(top_srcdir)/$prefix/.
+  # The trailing slash is required to avoid matching this rule:
+  #   test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile
+  s{\$\(srcdir\)/}{\$(top_srcdir)/$prefix}g;
+
+  # Sometimes, t-$@ is used instead of $@-t, which, of course, does
+  # not work when we have a $@ with a directory in it.
+  s{t-\$\@}{\$\@-t}g;
+
+  # Some AC_SUBST patterns remain and would better be Make macros.
+  s{\@(MKDIR_P)\@}{\$($1)}g;
+
+  # Adjust paths in mkdir.
+  s{(\$\(MKDIR_P\))\s*(\w+)}{$1 $prefix$2}g;
+
+  return $_;
+}
+
+# process ($IN)
+# -------------
+sub process ($)
+{
+  my ($file) = @_;
+  my ($bak) = "$file.bak";
+  rename ($file, $bak) or die "$ME: rename $file $bak failed: $!\n";
+  my $contents = contents ($bak);
+  $contents = prefix ($contents);
+  my $out = new IO::File(">$file")
+    or die "$ME: $file: failed to open for writing: $!\n";
+  print $out $contents;
+}
+
+{
+  GetOptions
+    (
+     'lib-name=s' => \$lib_name,
+     help => sub { usage 0 },
+     version => sub { print "$ME version $VERSION\n"; exit },
+    ) or usage 1;
+
+  my $fail = 0;
+  defined $lib_name
+    or (warn "$ME: no library name; use --lib-name=NAME\n"), $fail = 1;
+
+  # There must be exactly one argument.
+  @ARGV == 0
+    and (warn "$ME: missing FILE argument\n"), $fail = 1;
+  1 < @ARGV
+    and (warn "$ME: too many arguments:\n", join ("\n", @ARGV), "\n"),
+      $fail = 1;
+  $fail
+    and usage 1;
+
+  my $file = $ARGV[0];
+  $prefix = (dirname $file) . '/';
+  warn "prefix=$prefix\n";
+
+  process $file;
+}
+
+### Setup "GNU" style for perl-mode and cperl-mode.
+## Local Variables:
+## perl-indent-level: 2
+## perl-continued-statement-offset: 2
+## perl-continued-brace-offset: 0
+## perl-brace-offset: 0
+## perl-brace-imaginary-offset: 0
+## perl-label-offset: -2
+## cperl-indent-level: 2
+## cperl-brace-offset: 0
+## cperl-continued-brace-offset: 0
+## cperl-label-offset: -2
+## cperl-extra-newline-before-brace: t
+## cperl-merge-trailing-else: nil
+## cperl-continued-statement-offset: 2
+## eval: (add-hook 'before-save-hook 'time-stamp)
+## time-stamp-start: "my $VERSION = '"
+## time-stamp-format: "%:y-%02m-%02d %02H:%02M"
+## time-stamp-time-zone: "UTC0"
+## time-stamp-end: "'; # UTC"
+## End:
diff --git a/build-aux/test-driver b/build-aux/test-driver
new file mode 100755 (executable)
index 0000000..b8521a4
--- /dev/null
@@ -0,0 +1,148 @@
+#! /bin/sh
+# test-driver - basic testsuite driver script.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+#
+# 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, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+# Make unconditional expansion of undefined variables an error.  This
+# helps a lot in preventing typo-related bugs.
+set -u
+
+usage_error ()
+{
+  echo "$0: $*" >&2
+  print_usage >&2
+  exit 2
+}
+
+print_usage ()
+{
+  cat <<END
+Usage:
+  test-driver --test-name=NAME --log-file=PATH --trs-file=PATH
+              [--expect-failure={yes|no}] [--color-tests={yes|no}]
+              [--enable-hard-errors={yes|no}] [--]
+              TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS]
+The '--test-name', '--log-file' and '--trs-file' options are mandatory.
+END
+}
+
+test_name= # Used for reporting.
+log_file=  # Where to save the output of the test script.
+trs_file=  # Where to save the metadata of the test run.
+expect_failure=no
+color_tests=no
+enable_hard_errors=yes
+while test $# -gt 0; do
+  case $1 in
+  --help) print_usage; exit $?;;
+  --version) echo "test-driver $scriptversion"; exit $?;;
+  --test-name) test_name=$2; shift;;
+  --log-file) log_file=$2; shift;;
+  --trs-file) trs_file=$2; shift;;
+  --color-tests) color_tests=$2; shift;;
+  --expect-failure) expect_failure=$2; shift;;
+  --enable-hard-errors) enable_hard_errors=$2; shift;;
+  --) shift; break;;
+  -*) usage_error "invalid option: '$1'";;
+   *) break;;
+  esac
+  shift
+done
+
+missing_opts=
+test x"$test_name" = x && missing_opts="$missing_opts --test-name"
+test x"$log_file"  = x && missing_opts="$missing_opts --log-file"
+test x"$trs_file"  = x && missing_opts="$missing_opts --trs-file"
+if test x"$missing_opts" != x; then
+  usage_error "the following mandatory options are missing:$missing_opts"
+fi
+
+if test $# -eq 0; then
+  usage_error "missing argument"
+fi
+
+if test $color_tests = yes; then
+  # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'.
+  red='\e[0;31m' # Red.
+  grn='\e[0;32m' # Green.
+  lgn='\e[1;32m' # Light green.
+  blu='\e[1;34m' # Blue.
+  mgn='\e[0;35m' # Magenta.
+  std='\e[m'     # No color.
+else
+  red= grn= lgn= blu= mgn= std=
+fi
+
+do_exit='rm -f $log_file $trs_file; (exit $st); exit $st'
+trap "st=129; $do_exit" 1
+trap "st=130; $do_exit" 2
+trap "st=141; $do_exit" 13
+trap "st=143; $do_exit" 15
+
+# Test script is run here.
+"$@" >$log_file 2>&1
+estatus=$?
+
+if test $enable_hard_errors = no && test $estatus -eq 99; then
+  tweaked_estatus=1
+else
+  tweaked_estatus=$estatus
+fi
+
+case $tweaked_estatus:$expect_failure in
+  0:yes) col=$red res=XPASS recheck=yes gcopy=yes;;
+  0:*)   col=$grn res=PASS  recheck=no  gcopy=no;;
+  77:*)  col=$blu res=SKIP  recheck=no  gcopy=yes;;
+  99:*)  col=$mgn res=ERROR recheck=yes gcopy=yes;;
+  *:yes) col=$lgn res=XFAIL recheck=no  gcopy=yes;;
+  *:*)   col=$red res=FAIL  recheck=yes gcopy=yes;;
+esac
+
+# Report the test outcome and exit status in the logs, so that one can
+# know whether the test passed or failed simply by looking at the '.log'
+# file, without the need of also peaking into the corresponding '.trs'
+# file (automake bug#11814).
+echo "$res $test_name (exit status: $estatus)" >>$log_file
+
+# Report outcome to console.
+echo "${col}${res}${std}: $test_name"
+
+# Register the test result, and other relevant metadata.
+echo ":test-result: $res" > $trs_file
+echo ":global-test-result: $res" >> $trs_file
+echo ":recheck: $recheck" >> $trs_file
+echo ":copy-in-global-log: $gcopy" >> $trs_file
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/build-aux/ylwrap b/build-aux/ylwrap
new file mode 100755 (executable)
index 0000000..5943168
--- /dev/null
@@ -0,0 +1,247 @@
+#! /bin/sh
+# ylwrap - wrapper for lex/yacc invocations.
+
+scriptversion=2018-03-07.03; # UTC
+
+# Copyright (C) 1996-2018 Free Software Foundation, Inc.
+#
+# Written by Tom Tromey <tromey@cygnus.com>.
+#
+# 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, see <https://www.gnu.org/licenses/>.
+
+# As a special exception to the GNU General Public License, if you
+# distribute this file as part of a program that contains a
+# configuration script generated by Autoconf, you may include it under
+# the same distribution terms that you use for the rest of that program.
+
+# This file is maintained in Automake, please report
+# bugs to <bug-automake@gnu.org> or send patches to
+# <automake-patches@gnu.org>.
+
+get_dirname ()
+{
+  case $1 in
+    */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';;
+    # Otherwise,  we want the empty string (not ".").
+  esac
+}
+
+# guard FILE
+# ----------
+# The CPP macro used to guard inclusion of FILE.
+guard ()
+{
+  printf '%s\n' "$1"                                                    \
+    | sed                                                               \
+        -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'   \
+        -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g'                        \
+        -e 's/__*/_/g'
+}
+
+# quote_for_sed [STRING]
+# ----------------------
+# Return STRING (or stdin) quoted to be used as a sed pattern.
+quote_for_sed ()
+{
+  case $# in
+    0) cat;;
+    1) printf '%s\n' "$1";;
+  esac \
+    | sed -e 's|[][\\.*]|\\&|g'
+}
+
+case "$1" in
+  '')
+    echo "$0: No files given.  Try '$0 --help' for more information." 1>&2
+    exit 1
+    ;;
+  --basedir)
+    basedir=$2
+    shift 2
+    ;;
+  -h|--h*)
+    cat <<\EOF
+Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]...
+
+Wrapper for lex/yacc invocations, renaming files as desired.
+
+  INPUT is the input file
+  OUTPUT is one file PROG generates
+  DESIRED is the file we actually want instead of OUTPUT
+  PROGRAM is program to run
+  ARGS are passed to PROG
+
+Any number of OUTPUT,DESIRED pairs may be used.
+
+Report bugs to <bug-automake@gnu.org>.
+EOF
+    exit $?
+    ;;
+  -v|--v*)
+    echo "ylwrap $scriptversion"
+    exit $?
+    ;;
+esac
+
+
+# The input.
+input=$1
+shift
+# We'll later need for a correct munging of "#line" directives.
+input_sub_rx=`get_dirname "$input" | quote_for_sed`
+case $input in
+  [\\/]* | ?:[\\/]*)
+    # Absolute path; do nothing.
+    ;;
+  *)
+    # Relative path.  Make it absolute.
+    input=`pwd`/$input
+    ;;
+esac
+input_rx=`get_dirname "$input" | quote_for_sed`
+
+# Since DOS filename conventions don't allow two dots,
+# the DOS version of Bison writes out y_tab.c instead of y.tab.c
+# and y_tab.h instead of y.tab.h. Test to see if this is the case.
+y_tab_nodot=false
+if test -f y_tab.c || test -f y_tab.h; then
+  y_tab_nodot=true
+fi
+
+# The parser itself, the first file, is the destination of the .y.c
+# rule in the Makefile.
+parser=$1
+
+# A sed program to s/FROM/TO/g for all the FROM/TO so that, for
+# instance, we rename #include "y.tab.h" into #include "parse.h"
+# during the conversion from y.tab.c to parse.c.
+sed_fix_filenames=
+
+# Also rename header guards, as Bison 2.7 for instance uses its header
+# guard in its implementation file.
+sed_fix_header_guards=
+
+while test $# -ne 0; do
+  if test x"$1" = x"--"; then
+    shift
+    break
+  fi
+  from=$1
+  # Handle y_tab.c and y_tab.h output by DOS
+  if $y_tab_nodot; then
+    case $from in
+      "y.tab.c") from=y_tab.c;;
+      "y.tab.h") from=y_tab.h;;
+    esac
+  fi
+  shift
+  to=$1
+  shift
+  sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;"
+  sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;"
+done
+
+# The program to run.
+prog=$1
+shift
+# Make any relative path in $prog absolute.
+case $prog in
+  [\\/]* | ?:[\\/]*) ;;
+  *[\\/]*) prog=`pwd`/$prog ;;
+esac
+
+dirname=ylwrap$$
+do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret'
+trap "ret=129; $do_exit" 1
+trap "ret=130; $do_exit" 2
+trap "ret=141; $do_exit" 13
+trap "ret=143; $do_exit" 15
+mkdir $dirname || exit 1
+
+cd $dirname
+
+case $# in
+  0) "$prog" "$input" ;;
+  *) "$prog" "$@" "$input" ;;
+esac
+ret=$?
+
+if test $ret -eq 0; then
+  for from in *
+  do
+    to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"`
+    if test -f "$from"; then
+      # If $2 is an absolute path name, then just use that,
+      # otherwise prepend '../'.
+      case $to in
+        [\\/]* | ?:[\\/]*) target=$to;;
+        *) target=../$to;;
+      esac
+
+      # Do not overwrite unchanged header files to avoid useless
+      # recompilations.  Always update the parser itself: it is the
+      # destination of the .y.c rule in the Makefile.  Divert the
+      # output of all other files to a temporary file so we can
+      # compare them to existing versions.
+      if test $from != $parser; then
+        realtarget=$target
+        target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'`
+      fi
+
+      # Munge "#line" or "#" directives.  Don't let the resulting
+      # debug information point at an absolute srcdir.  Use the real
+      # output file name, not yy.lex.c for instance.  Adjust the
+      # include guards too.
+      sed -e "/^#/!b"                           \
+          -e "s|$input_rx|$input_sub_rx|"       \
+          -e "$sed_fix_filenames"               \
+          -e "$sed_fix_header_guards"           \
+        "$from" >"$target" || ret=$?
+
+      # Check whether files must be updated.
+      if test "$from" != "$parser"; then
+        if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then
+          echo "$to is unchanged"
+          rm -f "$target"
+        else
+          echo "updating $to"
+          mv -f "$target" "$realtarget"
+        fi
+      fi
+    else
+      # A missing file is only an error for the parser.  This is a
+      # blatant hack to let us support using "yacc -d".  If -d is not
+      # specified, don't fail when the header file is "missing".
+      if test "$from" = "$parser"; then
+        ret=1
+      fi
+    fi
+  done
+fi
+
+# Remove the directory.
+cd ..
+rm -rf $dirname
+
+exit $ret
+
+# Local Variables:
+# mode: shell-script
+# sh-indentation: 2
+# eval: (add-hook 'before-save-hook 'time-stamp)
+# time-stamp-start: "scriptversion="
+# time-stamp-format: "%:y-%02m-%02d.%02H"
+# time-stamp-time-zone: "UTC0"
+# time-stamp-end: "; # UTC"
+# End:
diff --git a/config.guess b/config.guess
deleted file mode 100755 (executable)
index 1f5c50c..0000000
+++ /dev/null
@@ -1,1420 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-03-23'
-
-# This file 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-#
-# Originally written by Per Bothner.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-#
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )        # Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-       for c in cc gcc c89 c99 ; do
-         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-            CC_FOR_BUILD="$c"; break ;
-         fi ;
-       done ;
-       if test x"$CC_FOR_BUILD" = x ; then
-         CC_FOR_BUILD=no_compiler_found ;
-       fi
-       ;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-       PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-case "${UNAME_SYSTEM}" in
-Linux|GNU|GNU/*)
-       # If the system lacks a compiler, then just pick glibc.
-       # We could probably try harder.
-       LIBC=gnu
-
-       eval $set_cc_for_build
-       cat <<-EOF > $dummy.c
-       #include <features.h>
-       #if defined(__UCLIBC__)
-       LIBC=uclibc
-       #elif defined(__dietlibc__)
-       LIBC=dietlibc
-       #else
-       LIBC=gnu
-       #endif
-       EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
-       ;;
-esac
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-       # NetBSD (nbsd) targets should (where applicable) match one or
-       # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
-       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-       # switched to ELF, *-*-netbsd* would select the old
-       # object file format.  This provides both forward
-       # compatibility and a consistent mechanism for selecting the
-       # object file format.
-       #
-       # Note: NetBSD doesn't particularly care about the vendor
-       # portion of the name.  We always set it to "unknown".
-       sysctl="sysctl -n hw.machine_arch"
-       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-       case "${UNAME_MACHINE_ARCH}" in
-           armeb) machine=armeb-unknown ;;
-           arm*) machine=arm-unknown ;;
-           sh3el) machine=shl-unknown ;;
-           sh3eb) machine=sh-unknown ;;
-           sh5el) machine=sh5le-unknown ;;
-           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-       esac
-       # The Operating System including object format, if it has switched
-       # to ELF recently, or will in the future.
-       case "${UNAME_MACHINE_ARCH}" in
-           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-               eval $set_cc_for_build
-               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-                       | grep -q __ELF__
-               then
-                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-                   # Return netbsd for either.  FIX?
-                   os=netbsd
-               else
-                   os=netbsdelf
-               fi
-               ;;
-           *)
-               os=netbsd
-               ;;
-       esac
-       # The OS release
-       # Debian GNU/NetBSD machines have a different userland, and
-       # thus, need a distinct triplet. However, they do not need
-       # kernel version information, so it can be replaced with a
-       # suitable tag, in the style of linux-gnu.
-       case "${UNAME_VERSION}" in
-           Debian*)
-               release='-gnu'
-               ;;
-           *)
-               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-               ;;
-       esac
-       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-       # contains redundant information, the shorter form:
-       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-       echo "${machine}-${os}${release}"
-       exit ;;
-    *:Bitrig:*:*)
-       UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
-       exit ;;
-    *:OpenBSD:*:*)
-       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-       exit ;;
-    *:ekkoBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-       exit ;;
-    *:SolidBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-       exit ;;
-    macppc:MirBSD:*:*)
-       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
-       exit ;;
-    *:MirBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-       exit ;;
-    alpha:OSF1:*:*)
-       case $UNAME_RELEASE in
-       *4.0)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-               ;;
-       *5.*)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-               ;;
-       esac
-       # According to Compaq, /usr/sbin/psrinfo has been available on
-       # OSF/1 and Tru64 systems produced since 1995.  I hope that
-       # covers most systems running today.  This code pipes the CPU
-       # types through head -n 1, so we only detect the type of CPU 0.
-       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-       case "$ALPHA_CPU_TYPE" in
-           "EV4 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "EV4.5 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "LCA4 (21066/21068)")
-               UNAME_MACHINE="alpha" ;;
-           "EV5 (21164)")
-               UNAME_MACHINE="alphaev5" ;;
-           "EV5.6 (21164A)")
-               UNAME_MACHINE="alphaev56" ;;
-           "EV5.6 (21164PC)")
-               UNAME_MACHINE="alphapca56" ;;
-           "EV5.7 (21164PC)")
-               UNAME_MACHINE="alphapca57" ;;
-           "EV6 (21264)")
-               UNAME_MACHINE="alphaev6" ;;
-           "EV6.7 (21264A)")
-               UNAME_MACHINE="alphaev67" ;;
-           "EV6.8CB (21264C)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8AL (21264B)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8CX (21264D)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.9A (21264/EV69A)")
-               UNAME_MACHINE="alphaev69" ;;
-           "EV7 (21364)")
-               UNAME_MACHINE="alphaev7" ;;
-           "EV7.9 (21364A)")
-               UNAME_MACHINE="alphaev79" ;;
-       esac
-       # A Pn.n version is a patched version.
-       # A Vn.n version is a released version.
-       # A Tn.n version is a released field test version.
-       # A Xn.n version is an unreleased experimental baselevel.
-       # 1.2 uses "1.2" for uname -r.
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-       exitcode=$?
-       trap '' 0
-       exit $exitcode ;;
-    Alpha\ *:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # Should we change UNAME_MACHINE based on the output of uname instead
-       # of the specific Alpha model?
-       echo alpha-pc-interix
-       exit ;;
-    21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
-       exit ;;
-    Amiga*:UNIX_System_V:4.0:*)
-       echo m68k-unknown-sysv4
-       exit ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-amigaos
-       exit ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-morphos
-       exit ;;
-    *:OS/390:*:*)
-       echo i370-ibm-openedition
-       exit ;;
-    *:z/VM:*:*)
-       echo s390-ibm-zvmoe
-       exit ;;
-    *:OS400:*:*)
-       echo powerpc-ibm-os400
-       exit ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-       echo arm-acorn-riscix${UNAME_RELEASE}
-       exit ;;
-    arm*:riscos:*:*|arm*:RISCOS:*:*)
-       echo arm-unknown-riscos
-       exit ;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-       echo hppa1.1-hitachi-hiuxmpp
-       exit ;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-       if test "`(/bin/universe) 2>/dev/null`" = att ; then
-               echo pyramid-pyramid-sysv3
-       else
-               echo pyramid-pyramid-bsd
-       fi
-       exit ;;
-    NILE*:*:*:dcosx)
-       echo pyramid-pyramid-svr4
-       exit ;;
-    DRS?6000:unix:4.0:6*)
-       echo sparc-icl-nx6
-       exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-       case `/usr/bin/uname -p` in
-           sparc) echo sparc-icl-nx7; exit ;;
-       esac ;;
-    s390x:SunOS:*:*)
-       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4H:SunOS:5.*:*)
-       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-       echo i386-pc-auroraux${UNAME_RELEASE}
-       exit ;;
-    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-       eval $set_cc_for_build
-       SUN_ARCH="i386"
-       # If there is a compiler, see if it is configured for 64-bit objects.
-       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-       # This test works for both compilers.
-       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-               grep IS_64BIT_ARCH >/dev/null
-           then
-               SUN_ARCH="x86_64"
-           fi
-       fi
-       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:6*:*)
-       # According to config.sub, this is the proper way to canonicalize
-       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-       # it's likely to be more like Solaris than SunOS4.
-       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:*:*)
-       case "`/usr/bin/arch -k`" in
-           Series*|S4*)
-               UNAME_RELEASE=`uname -v`
-               ;;
-       esac
-       # Japanese Language versions have a version number like `4.1.3-JL'.
-       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-       exit ;;
-    sun3*:SunOS:*:*)
-       echo m68k-sun-sunos${UNAME_RELEASE}
-       exit ;;
-    sun*:*:4.2BSD:*)
-       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-       case "`/bin/arch`" in
-           sun3)
-               echo m68k-sun-sunos${UNAME_RELEASE}
-               ;;
-           sun4)
-               echo sparc-sun-sunos${UNAME_RELEASE}
-               ;;
-       esac
-       exit ;;
-    aushp:SunOS:*:*)
-       echo sparc-auspex-sunos${UNAME_RELEASE}
-       exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-       exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-       exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-       exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-       echo m68k-milan-mint${UNAME_RELEASE}
-       exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-       echo m68k-hades-mint${UNAME_RELEASE}
-       exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-       echo m68k-unknown-mint${UNAME_RELEASE}
-       exit ;;
-    m68k:machten:*:*)
-       echo m68k-apple-machten${UNAME_RELEASE}
-       exit ;;
-    powerpc:machten:*:*)
-       echo powerpc-apple-machten${UNAME_RELEASE}
-       exit ;;
-    RISC*:Mach:*:*)
-       echo mips-dec-mach_bsd4.3
-       exit ;;
-    RISC*:ULTRIX:*:*)
-       echo mips-dec-ultrix${UNAME_RELEASE}
-       exit ;;
-    VAX*:ULTRIX*:*:*)
-       echo vax-dec-ultrix${UNAME_RELEASE}
-       exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-       echo clipper-intergraph-clix${UNAME_RELEASE}
-       exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-       int main (int argc, char *argv[]) {
-#else
-       int main (argc, argv) int argc; char *argv[]; {
-#endif
-       #if defined (host_mips) && defined (MIPSEB)
-       #if defined (SYSTYPE_SYSV)
-         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-       #endif
-       #if defined (SYSTYPE_SVR4)
-         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-       #endif
-       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-       #endif
-       #endif
-         exit (-1);
-       }
-EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c &&
-         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-         SYSTEM_NAME=`$dummy $dummyarg` &&
-           { echo "$SYSTEM_NAME"; exit; }
-       echo mips-mips-riscos${UNAME_RELEASE}
-       exit ;;
-    Motorola:PowerMAX_OS:*:*)
-       echo powerpc-motorola-powermax
-       exit ;;
-    Motorola:*:4.3:PL8-*)
-       echo powerpc-harris-powermax
-       exit ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-       echo powerpc-harris-powermax
-       exit ;;
-    Night_Hawk:Power_UNIX:*:*)
-       echo powerpc-harris-powerunix
-       exit ;;
-    m88k:CX/UX:7*:*)
-       echo m88k-harris-cxux7
-       exit ;;
-    m88k:*:4*:R4*)
-       echo m88k-motorola-sysv4
-       exit ;;
-    m88k:*:3*:R3*)
-       echo m88k-motorola-sysv3
-       exit ;;
-    AViiON:dgux:*:*)
-       # DG/UX returns AViiON for all architectures
-       UNAME_PROCESSOR=`/usr/bin/uname -p`
-       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-       then
-           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-              [ ${TARGET_BINARY_INTERFACE}x = x ]
-           then
-               echo m88k-dg-dgux${UNAME_RELEASE}
-           else
-               echo m88k-dg-dguxbcs${UNAME_RELEASE}
-           fi
-       else
-           echo i586-dg-dgux${UNAME_RELEASE}
-       fi
-       exit ;;
-    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
-       echo m88k-dolphin-sysv3
-       exit ;;
-    M88*:*:R3*:*)
-       # Delta 88k system running SVR3
-       echo m88k-motorola-sysv3
-       exit ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-       echo m88k-tektronix-sysv3
-       exit ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-       echo m68k-tektronix-bsd
-       exit ;;
-    *:IRIX*:*:*)
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-       exit ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-       echo i386-ibm-aix
-       exit ;;
-    ia64:AIX:*:*)
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
-       else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-       fi
-       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-       exit ;;
-    *:AIX:2:3)
-       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-               eval $set_cc_for_build
-               sed 's/^                //' << EOF >$dummy.c
-               #include <sys/systemcfg.h>
-
-               main()
-                       {
-                       if (!__power_pc())
-                               exit(1);
-                       puts("powerpc-ibm-aix3.2.5");
-                       exit(0);
-                       }
-EOF
-               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-               then
-                       echo "$SYSTEM_NAME"
-               else
-                       echo rs6000-ibm-aix3.2.5
-               fi
-       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-               echo rs6000-ibm-aix3.2.4
-       else
-               echo rs6000-ibm-aix3.2
-       fi
-       exit ;;
-    *:AIX:*:[4567])
-       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-               IBM_ARCH=rs6000
-       else
-               IBM_ARCH=powerpc
-       fi
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
-       else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-       fi
-       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-       exit ;;
-    *:AIX:*:*)
-       echo rs6000-ibm-aix
-       exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-       echo romp-ibm-bsd4.4
-       exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-       exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-       echo rs6000-bull-bosx
-       exit ;;
-    DPX/2?00:B.O.S.:*:*)
-       echo m68k-bull-sysv3
-       exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-       echo m68k-hp-bsd
-       exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-       echo m68k-hp-bsd4.4
-       exit ;;
-    9000/[34678]??:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       case "${UNAME_MACHINE}" in
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
-           9000/[678][0-9][0-9])
-               if [ -x /usr/bin/getconf ]; then
-                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                   sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                   case "${sc_cpu_version}" in
-                     523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                     528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                     532)                      # CPU_PA_RISC2_0
-                       case "${sc_kernel_bits}" in
-                         32) HP_ARCH="hppa2.0n" ;;
-                         64) HP_ARCH="hppa2.0w" ;;
-                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                       esac ;;
-                   esac
-               fi
-               if [ "${HP_ARCH}" = "" ]; then
-                   eval $set_cc_for_build
-                   sed 's/^            //' << EOF >$dummy.c
-
-               #define _HPUX_SOURCE
-               #include <stdlib.h>
-               #include <unistd.h>
-
-               int main ()
-               {
-               #if defined(_SC_KERNEL_BITS)
-                   long bits = sysconf(_SC_KERNEL_BITS);
-               #endif
-                   long cpu  = sysconf (_SC_CPU_VERSION);
-
-                   switch (cpu)
-                       {
-                       case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-                       case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-                       case CPU_PA_RISC2_0:
-               #if defined(_SC_KERNEL_BITS)
-                           switch (bits)
-                               {
-                               case 64: puts ("hppa2.0w"); break;
-                               case 32: puts ("hppa2.0n"); break;
-                               default: puts ("hppa2.0"); break;
-                               } break;
-               #else  /* !defined(_SC_KERNEL_BITS) */
-                           puts ("hppa2.0"); break;
-               #endif
-                       default: puts ("hppa1.0"); break;
-                       }
-                   exit (0);
-               }
-EOF
-                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-                   test -z "$HP_ARCH" && HP_ARCH=hppa
-               fi ;;
-       esac
-       if [ ${HP_ARCH} = "hppa2.0w" ]
-       then
-           eval $set_cc_for_build
-
-           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-           # generating 64-bit code.  GNU and HP use different nomenclature:
-           #
-           # $ CC_FOR_BUILD=cc ./config.guess
-           # => hppa2.0w-hp-hpux11.23
-           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-           # => hppa64-hp-hpux11.23
-
-           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-               grep -q __LP64__
-           then
-               HP_ARCH="hppa2.0w"
-           else
-               HP_ARCH="hppa64"
-           fi
-       fi
-       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-       exit ;;
-    ia64:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       echo ia64-hp-hpux${HPUX_REV}
-       exit ;;
-    3050*:HI-UX:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #include <unistd.h>
-       int
-       main ()
-       {
-         long cpu = sysconf (_SC_CPU_VERSION);
-         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-            results, however.  */
-         if (CPU_IS_PA_RISC (cpu))
-           {
-             switch (cpu)
-               {
-                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-                 default: puts ("hppa-hitachi-hiuxwe2"); break;
-               }
-           }
-         else if (CPU_IS_HP_MC68K (cpu))
-           puts ("m68k-hitachi-hiuxwe2");
-         else puts ("unknown-hitachi-hiuxwe2");
-         exit (0);
-       }
-EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-               { echo "$SYSTEM_NAME"; exit; }
-       echo unknown-hitachi-hiuxwe2
-       exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-       echo hppa1.1-hp-bsd
-       exit ;;
-    9000/8??:4.3bsd:*:*)
-       echo hppa1.0-hp-bsd
-       exit ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-       echo hppa1.0-hp-mpeix
-       exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-       echo hppa1.1-hp-osf
-       exit ;;
-    hp8??:OSF1:*:*)
-       echo hppa1.0-hp-osf
-       exit ;;
-    i*86:OSF1:*:*)
-       if [ -x /usr/sbin/sysversion ] ; then
-           echo ${UNAME_MACHINE}-unknown-osf1mk
-       else
-           echo ${UNAME_MACHINE}-unknown-osf1
-       fi
-       exit ;;
-    parisc*:Lites*:*:*)
-       echo hppa1.1-hp-lites
-       exit ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-       echo c1-convex-bsd
-       exit ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-       if getsysinfo -f scalar_acc
-       then echo c32-convex-bsd
-       else echo c2-convex-bsd
-       fi
-       exit ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-       echo c34-convex-bsd
-       exit ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-       echo c38-convex-bsd
-       exit ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-       echo c4-convex-bsd
-       exit ;;
-    CRAY*Y-MP:*:*:*)
-       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*[A-Z]90:*:*:*)
-       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-             -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*TS:*:*:*)
-       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*T3E:*:*:*)
-       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*SV1:*:*:*)
-       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    *:UNICOS/mp:*:*)
-       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-       FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-       echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-       exit ;;
-    5000:UNIX_System_V:4.*:*)
-       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-       echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-       exit ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-       exit ;;
-    sparc*:BSD/OS:*:*)
-       echo sparc-unknown-bsdi${UNAME_RELEASE}
-       exit ;;
-    *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-       exit ;;
-    *:FreeBSD:*:*)
-       UNAME_PROCESSOR=`/usr/bin/uname -p`
-       case ${UNAME_PROCESSOR} in
-           amd64)
-               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-           *)
-               echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-       esac
-       exit ;;
-    i*:CYGWIN*:*)
-       echo ${UNAME_MACHINE}-pc-cygwin
-       exit ;;
-    *:MINGW64*:*)
-       echo ${UNAME_MACHINE}-pc-mingw64
-       exit ;;
-    *:MINGW*:*)
-       echo ${UNAME_MACHINE}-pc-mingw32
-       exit ;;
-    *:MSYS*:*)
-       echo ${UNAME_MACHINE}-pc-msys
-       exit ;;
-    i*:windows32*:*)
-       # uname -m includes "-pc" on this system.
-       echo ${UNAME_MACHINE}-mingw32
-       exit ;;
-    i*:PW*:*)
-       echo ${UNAME_MACHINE}-pc-pw32
-       exit ;;
-    *:Interix*:*)
-       case ${UNAME_MACHINE} in
-           x86)
-               echo i586-pc-interix${UNAME_RELEASE}
-               exit ;;
-           authenticamd | genuineintel | EM64T)
-               echo x86_64-unknown-interix${UNAME_RELEASE}
-               exit ;;
-           IA64)
-               echo ia64-unknown-interix${UNAME_RELEASE}
-               exit ;;
-       esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-       echo i${UNAME_MACHINE}-pc-mks
-       exit ;;
-    8664:Windows_NT:*)
-       echo x86_64-pc-mks
-       exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-       # UNAME_MACHINE based on the output of uname instead of i386?
-       echo i586-pc-interix
-       exit ;;
-    i*:UWIN*:*)
-       echo ${UNAME_MACHINE}-pc-uwin
-       exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-       echo x86_64-unknown-cygwin
-       exit ;;
-    p*:CYGWIN*:*)
-       echo powerpcle-unknown-cygwin
-       exit ;;
-    prep*:SunOS:5.*:*)
-       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    *:GNU:*:*)
-       # the GNU system
-       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-       exit ;;
-    *:GNU/*:*:*)
-       # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
-       exit ;;
-    i*86:Minix:*:*)
-       echo ${UNAME_MACHINE}-pc-minix
-       exit ;;
-    aarch64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    aarch64_be:Linux:*:*)
-       UNAME_MACHINE=aarch64_be
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    alpha:Linux:*:*)
-       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-         EV5)   UNAME_MACHINE=alphaev5 ;;
-         EV56)  UNAME_MACHINE=alphaev56 ;;
-         PCA56) UNAME_MACHINE=alphapca56 ;;
-         PCA57) UNAME_MACHINE=alphapca56 ;;
-         EV6)   UNAME_MACHINE=alphaev6 ;;
-         EV67)  UNAME_MACHINE=alphaev67 ;;
-         EV68*) UNAME_MACHINE=alphaev68 ;;
-       esac
-       objdump --private-headers /bin/sh | grep -q ld.so.1
-       if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    arm*:Linux:*:*)
-       eval $set_cc_for_build
-       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-           | grep -q __ARM_EABI__
-       then
-           echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       else
-           if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-               | grep -q __ARM_PCS_VFP
-           then
-               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
-           else
-               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
-           fi
-       fi
-       exit ;;
-    avr32*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    cris:Linux:*:*)
-       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-       exit ;;
-    crisv32:Linux:*:*)
-       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-       exit ;;
-    frv:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    hexagon:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    i*86:Linux:*:*)
-       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
-       exit ;;
-    ia64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    m32r*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    m68*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    mips:Linux:*:* | mips64:Linux:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #undef CPU
-       #undef ${UNAME_MACHINE}
-       #undef ${UNAME_MACHINE}el
-       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=${UNAME_MACHINE}el
-       #else
-       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=${UNAME_MACHINE}
-       #else
-       CPU=
-       #endif
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
-       ;;
-    openrisc*:Linux:*:*)
-       echo or1k-unknown-linux-${LIBC}
-       exit ;;
-    or32:Linux:*:* | or1k*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    padre:Linux:*:*)
-       echo sparc-unknown-linux-${LIBC}
-       exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-${LIBC}
-       exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-       # Look for CPU level
-       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-         PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
-         PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
-         *)    echo hppa-unknown-linux-${LIBC} ;;
-       esac
-       exit ;;
-    ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-${LIBC}
-       exit ;;
-    ppc:Linux:*:*)
-       echo powerpc-unknown-linux-${LIBC}
-       exit ;;
-    ppc64le:Linux:*:*)
-       echo powerpc64le-unknown-linux-${LIBC}
-       exit ;;
-    ppcle:Linux:*:*)
-       echo powerpcle-unknown-linux-${LIBC}
-       exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-       echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
-       exit ;;
-    sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    sh*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    tile*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    vax:Linux:*:*)
-       echo ${UNAME_MACHINE}-dec-linux-${LIBC}
-       exit ;;
-    x86_64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    xtensa*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    i*86:DYNIX/ptx:4*:*)
-       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-       # earlier versions are messed up and put the nodename in both
-       # sysname and nodename.
-       echo i386-sequent-sysv4
-       exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-       # Unixware is an offshoot of SVR4, but it has its own version
-       # number series starting with 2...
-       # I am not positive that other SVR4 systems won't match this,
-       # I just have to hope.  -- rms.
-       # Use sysv4.2uw... so that sysv4* matches it.
-       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-       exit ;;
-    i*86:OS/2:*:*)
-       # If we were able to find `uname', then EMX Unix compatibility
-       # is probably installed.
-       echo ${UNAME_MACHINE}-pc-os2-emx
-       exit ;;
-    i*86:XTS-300:*:STOP)
-       echo ${UNAME_MACHINE}-unknown-stop
-       exit ;;
-    i*86:atheos:*:*)
-       echo ${UNAME_MACHINE}-unknown-atheos
-       exit ;;
-    i*86:syllable:*:*)
-       echo ${UNAME_MACHINE}-pc-syllable
-       exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-       echo i386-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    i*86:*DOS:*:*)
-       echo ${UNAME_MACHINE}-pc-msdosdjgpp
-       exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-       else
-               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-       fi
-       exit ;;
-    i*86:*:5:[678]*)
-       # UnixWare 7.x, OpenUNIX and OpenServer 6.
-       case `/bin/uname -X | grep "^Machine"` in
-           *486*)           UNAME_MACHINE=i486 ;;
-           *Pentium)        UNAME_MACHINE=i586 ;;
-           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-       esac
-       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-       exit ;;
-    i*86:*:3.2:*)
-       if test -f /usr/options/cb.name; then
-               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-       elif /bin/uname -X 2>/dev/null >/dev/null ; then
-               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-                       && UNAME_MACHINE=i586
-               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-       else
-               echo ${UNAME_MACHINE}-pc-sysv32
-       fi
-       exit ;;
-    pc:*:*:*)
-       # Left here for compatibility:
-       # uname -m prints for DJGPP always 'pc', but it prints nothing about
-       # the processor, so we play safe by assuming i586.
-       # Note: whatever this is, it MUST be the same as what config.sub
-       # prints for the "djgpp" host, or else GDB configury will decide that
-       # this is a cross-build.
-       echo i586-pc-msdosdjgpp
-       exit ;;
-    Intel:Mach:3*:*)
-       echo i386-pc-mach3
-       exit ;;
-    paragon:*:*:*)
-       echo i860-intel-osf1
-       exit ;;
-    i860:*:4.*:*) # i860-SVR4
-       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-       else # Add other i860-SVR4 vendors below as they are discovered.
-         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-       fi
-       exit ;;
-    mini*:CTIX:SYS*5:*)
-       # "miniframe"
-       echo m68010-convergent-sysv
-       exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-       echo m68k-convergent-sysv
-       exit ;;
-    M680?0:D-NIX:5.3:*)
-       echo m68k-diab-dnix
-       exit ;;
-    M68*:*:R3V[5678]*:*)
-       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-       OS_REL=''
-       test -r /etc/.relid \
-       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-         && { echo i486-ncr-sysv4; exit; } ;;
-    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-       OS_REL='.3'
-       test -r /etc/.relid \
-           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-       echo m68k-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-       echo m68k-atari-sysv4
-       exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-       echo sparc-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    rs6000:LynxOS:2.*:*)
-       echo rs6000-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-       echo powerpc-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-       echo mips-dde-sysv${UNAME_RELEASE}
-       exit ;;
-    RM*:ReliantUNIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
-    RM*:SINIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
-    *:SINIX-*:*:*)
-       if uname -p 2>/dev/null >/dev/null ; then
-               UNAME_MACHINE=`(uname -p) 2>/dev/null`
-               echo ${UNAME_MACHINE}-sni-sysv4
-       else
-               echo ns32k-sni-sysv
-       fi
-       exit ;;
-    PENTIUM:*:4.0*:*)  # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                       # says <Richard.M.Bartel@ccMail.Census.GOV>
-       echo i586-unisys-sysv4
-       exit ;;
-    *:UNIX_System_V:4*:FTX*)
-       # From Gerald Hewes <hewes@openmarket.com>.
-       # How about differentiating between stratus architectures? -djm
-       echo hppa1.1-stratus-sysv4
-       exit ;;
-    *:*:*:FTX*)
-       # From seanf@swdc.stratus.com.
-       echo i860-stratus-sysv4
-       exit ;;
-    i*86:VOS:*:*)
-       # From Paul.Green@stratus.com.
-       echo ${UNAME_MACHINE}-stratus-vos
-       exit ;;
-    *:VOS:*:*)
-       # From Paul.Green@stratus.com.
-       echo hppa1.1-stratus-vos
-       exit ;;
-    mc68*:A/UX:*:*)
-       echo m68k-apple-aux${UNAME_RELEASE}
-       exit ;;
-    news*:NEWS-OS:6*:*)
-       echo mips-sony-newsos6
-       exit ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-       if [ -d /usr/nec ]; then
-               echo mips-nec-sysv${UNAME_RELEASE}
-       else
-               echo mips-unknown-sysv${UNAME_RELEASE}
-       fi
-       exit ;;
-    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
-       echo powerpc-be-beos
-       exit ;;
-    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
-       echo powerpc-apple-beos
-       exit ;;
-    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
-       echo i586-pc-beos
-       exit ;;
-    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
-       echo i586-pc-haiku
-       exit ;;
-    x86_64:Haiku:*:*)
-       echo x86_64-unknown-haiku
-       exit ;;
-    SX-4:SUPER-UX:*:*)
-       echo sx4-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-5:SUPER-UX:*:*)
-       echo sx5-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-6:SUPER-UX:*:*)
-       echo sx6-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-7:SUPER-UX:*:*)
-       echo sx7-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-8:SUPER-UX:*:*)
-       echo sx8-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-8R:SUPER-UX:*:*)
-       echo sx8r-nec-superux${UNAME_RELEASE}
-       exit ;;
-    Power*:Rhapsody:*:*)
-       echo powerpc-apple-rhapsody${UNAME_RELEASE}
-       exit ;;
-    *:Rhapsody:*:*)
-       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-       exit ;;
-    *:Darwin:*:*)
-       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-       eval $set_cc_for_build
-       if test "$UNAME_PROCESSOR" = unknown ; then
-           UNAME_PROCESSOR=powerpc
-       fi
-       if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-           if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-               if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                   (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-                   grep IS_64BIT_ARCH >/dev/null
-               then
-                   case $UNAME_PROCESSOR in
-                       i386) UNAME_PROCESSOR=x86_64 ;;
-                       powerpc) UNAME_PROCESSOR=powerpc64 ;;
-                   esac
-               fi
-           fi
-       elif test "$UNAME_PROCESSOR" = i386 ; then
-           # Avoid executing cc on OS X 10.9, as it ships with a stub
-           # that puts up a graphical alert prompting to install
-           # developer tools.  Any system running Mac OS X 10.7 or
-           # later (Darwin 11 and later) is required to have a 64-bit
-           # processor. This is not true of the ARM version of Darwin
-           # that Apple uses in portable devices.
-           UNAME_PROCESSOR=x86_64
-       fi
-       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-       exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-       UNAME_PROCESSOR=`uname -p`
-       if test "$UNAME_PROCESSOR" = "x86"; then
-               UNAME_PROCESSOR=i386
-               UNAME_MACHINE=pc
-       fi
-       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-       exit ;;
-    *:QNX:*:4*)
-       echo i386-pc-qnx
-       exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
-       echo neo-tandem-nsk${UNAME_RELEASE}
-       exit ;;
-    NSE-*:NONSTOP_KERNEL:*:*)
-       echo nse-tandem-nsk${UNAME_RELEASE}
-       exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-       echo nsr-tandem-nsk${UNAME_RELEASE}
-       exit ;;
-    *:NonStop-UX:*:*)
-       echo mips-compaq-nonstopux
-       exit ;;
-    BS2000:POSIX*:*:*)
-       echo bs2000-siemens-sysv
-       exit ;;
-    DS/*:UNIX_System_V:*:*)
-       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-       exit ;;
-    *:Plan9:*:*)
-       # "uname -m" is not consistent, so use $cputype instead. 386
-       # is converted to i386 for consistency with other x86
-       # operating systems.
-       if test "$cputype" = "386"; then
-           UNAME_MACHINE=i386
-       else
-           UNAME_MACHINE="$cputype"
-       fi
-       echo ${UNAME_MACHINE}-unknown-plan9
-       exit ;;
-    *:TOPS-10:*:*)
-       echo pdp10-unknown-tops10
-       exit ;;
-    *:TENEX:*:*)
-       echo pdp10-unknown-tenex
-       exit ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-       echo pdp10-dec-tops20
-       exit ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-       echo pdp10-xkl-tops20
-       exit ;;
-    *:TOPS-20:*:*)
-       echo pdp10-unknown-tops20
-       exit ;;
-    *:ITS:*:*)
-       echo pdp10-unknown-its
-       exit ;;
-    SEI:*:*:SEIUX)
-       echo mips-sei-seiux${UNAME_RELEASE}
-       exit ;;
-    *:DragonFly:*:*)
-       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-       exit ;;
-    *:*VMS:*:*)
-       UNAME_MACHINE=`(uname -p) 2>/dev/null`
-       case "${UNAME_MACHINE}" in
-           A*) echo alpha-dec-vms ; exit ;;
-           I*) echo ia64-dec-vms ; exit ;;
-           V*) echo vax-dec-vms ; exit ;;
-       esac ;;
-    *:XENIX:*:SysV)
-       echo i386-pc-xenix
-       exit ;;
-    i*86:skyos:*:*)
-       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-       exit ;;
-    i*86:rdos:*:*)
-       echo ${UNAME_MACHINE}-pc-rdos
-       exit ;;
-    i*86:AROS:*:*)
-       echo ${UNAME_MACHINE}-pc-aros
-       exit ;;
-    x86_64:VMkernel:*:*)
-       echo ${UNAME_MACHINE}-unknown-esx
-       exit ;;
-esac
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/config.rpath b/config.rpath
deleted file mode 100755 (executable)
index b625621..0000000
+++ /dev/null
@@ -1,684 +0,0 @@
-#! /bin/sh
-# Output a system dependent set of variables, describing how to set the
-# run time search path of shared libraries in an executable.
-#
-#   Copyright 1996-2014 Free Software Foundation, Inc.
-#   Taken from GNU libtool, 2001
-#   Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996
-#
-#   This file is free software; the Free Software Foundation gives
-#   unlimited permission to copy and/or distribute it, with or without
-#   modifications, as long as this notice is preserved.
-#
-# The first argument passed to this file is the canonical host specification,
-#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld
-# should be set by the caller.
-#
-# The set of defined variables is at the end of this script.
-
-# Known limitations:
-# - On IRIX 6.5 with CC="cc", the run time search patch must not be longer
-#   than 256 bytes, otherwise the compiler driver will dump core. The only
-#   known workaround is to choose shorter directory names for the build
-#   directory and/or the installation directory.
-
-# All known linkers require a '.a' archive for static linking (except MSVC,
-# which needs '.lib').
-libext=a
-shrext=.so
-
-host="$1"
-host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
-host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
-host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
-
-# Code taken from libtool.m4's _LT_CC_BASENAME.
-
-for cc_temp in $CC""; do
-  case $cc_temp in
-    compile | *[\\/]compile | ccache | *[\\/]ccache ) ;;
-    distcc | *[\\/]distcc | purify | *[\\/]purify ) ;;
-    \-*) ;;
-    *) break;;
-  esac
-done
-cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'`
-
-# Code taken from libtool.m4's _LT_COMPILER_PIC.
-
-wl=
-if test "$GCC" = yes; then
-  wl='-Wl,'
-else
-  case "$host_os" in
-    aix*)
-      wl='-Wl,'
-      ;;
-    mingw* | cygwin* | pw32* | os2* | cegcc*)
-      ;;
-    hpux9* | hpux10* | hpux11*)
-      wl='-Wl,'
-      ;;
-    irix5* | irix6* | nonstopux*)
-      wl='-Wl,'
-      ;;
-    linux* | k*bsd*-gnu | kopensolaris*-gnu)
-      case $cc_basename in
-        ecc*)
-          wl='-Wl,'
-          ;;
-        icc* | ifort*)
-          wl='-Wl,'
-          ;;
-        lf95*)
-          wl='-Wl,'
-          ;;
-        nagfor*)
-          wl='-Wl,-Wl,,'
-          ;;
-        pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*)
-          wl='-Wl,'
-          ;;
-        ccc*)
-          wl='-Wl,'
-          ;;
-        xl* | bgxl* | bgf* | mpixl*)
-          wl='-Wl,'
-          ;;
-        como)
-          wl='-lopt='
-          ;;
-        *)
-          case `$CC -V 2>&1 | sed 5q` in
-            *Sun\ F* | *Sun*Fortran*)
-              wl=
-              ;;
-            *Sun\ C*)
-              wl='-Wl,'
-              ;;
-          esac
-          ;;
-      esac
-      ;;
-    newsos6)
-      ;;
-    *nto* | *qnx*)
-      ;;
-    osf3* | osf4* | osf5*)
-      wl='-Wl,'
-      ;;
-    rdos*)
-      ;;
-    solaris*)
-      case $cc_basename in
-        f77* | f90* | f95* | sunf77* | sunf90* | sunf95*)
-          wl='-Qoption ld '
-          ;;
-        *)
-          wl='-Wl,'
-          ;;
-      esac
-      ;;
-    sunos4*)
-      wl='-Qoption ld '
-      ;;
-    sysv4 | sysv4.2uw2* | sysv4.3*)
-      wl='-Wl,'
-      ;;
-    sysv4*MP*)
-      ;;
-    sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*)
-      wl='-Wl,'
-      ;;
-    unicos*)
-      wl='-Wl,'
-      ;;
-    uts4*)
-      ;;
-  esac
-fi
-
-# Code taken from libtool.m4's _LT_LINKER_SHLIBS.
-
-hardcode_libdir_flag_spec=
-hardcode_libdir_separator=
-hardcode_direct=no
-hardcode_minus_L=no
-
-case "$host_os" in
-  cygwin* | mingw* | pw32* | cegcc*)
-    # FIXME: the MSVC++ port hasn't been tested in a loooong time
-    # When not using gcc, we currently assume that we are using
-    # Microsoft Visual C++.
-    if test "$GCC" != yes; then
-      with_gnu_ld=no
-    fi
-    ;;
-  interix*)
-    # we just hope/assume this is gcc and not c89 (= MSVC++)
-    with_gnu_ld=yes
-    ;;
-  openbsd*)
-    with_gnu_ld=no
-    ;;
-esac
-
-ld_shlibs=yes
-if test "$with_gnu_ld" = yes; then
-  # Set some defaults for GNU ld with shared library support. These
-  # are reset later if shared libraries are not supported. Putting them
-  # here allows them to be overridden if necessary.
-  # Unlike libtool, we use -rpath here, not --rpath, since the documented
-  # option of GNU ld is called -rpath, not --rpath.
-  hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-  case "$host_os" in
-    aix[3-9]*)
-      # On AIX/PPC, the GNU linker is very broken
-      if test "$host_cpu" != ia64; then
-        ld_shlibs=no
-      fi
-      ;;
-    amigaos*)
-      case "$host_cpu" in
-        powerpc)
-          ;;
-        m68k)
-          hardcode_libdir_flag_spec='-L$libdir'
-          hardcode_minus_L=yes
-          ;;
-      esac
-      ;;
-    beos*)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    cygwin* | mingw* | pw32* | cegcc*)
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      hardcode_libdir_flag_spec='-L$libdir'
-      if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    haiku*)
-      ;;
-    interix[3-9]*)
-      hardcode_direct=no
-      hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-      ;;
-    gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    netbsd*)
-      ;;
-    solaris*)
-      if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then
-        ld_shlibs=no
-      elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*)
-      case `$LD -v 2>&1` in
-        *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*)
-          ld_shlibs=no
-          ;;
-        *)
-          if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-            hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`'
-          else
-            ld_shlibs=no
-          fi
-          ;;
-      esac
-      ;;
-    sunos4*)
-      hardcode_direct=yes
-      ;;
-    *)
-      if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-  esac
-  if test "$ld_shlibs" = no; then
-    hardcode_libdir_flag_spec=
-  fi
-else
-  case "$host_os" in
-    aix3*)
-      # Note: this linker hardcodes the directories in LIBPATH if there
-      # are no directories specified by -L.
-      hardcode_minus_L=yes
-      if test "$GCC" = yes; then
-        # Neither direct hardcoding nor static linking is supported with a
-        # broken collect2.
-        hardcode_direct=unsupported
-      fi
-      ;;
-    aix[4-9]*)
-      if test "$host_cpu" = ia64; then
-        # On IA64, the linker does run time linking by default, so we don't
-        # have to do anything special.
-        aix_use_runtimelinking=no
-      else
-        aix_use_runtimelinking=no
-        # Test if we are trying to use run time linking or normal
-        # AIX style linking. If -brtl is somewhere in LDFLAGS, we
-        # need to do runtime linking.
-        case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*)
-          for ld_flag in $LDFLAGS; do
-            if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then
-              aix_use_runtimelinking=yes
-              break
-            fi
-          done
-          ;;
-        esac
-      fi
-      hardcode_direct=yes
-      hardcode_libdir_separator=':'
-      if test "$GCC" = yes; then
-        case $host_os in aix4.[012]|aix4.[012].*)
-          collect2name=`${CC} -print-prog-name=collect2`
-          if test -f "$collect2name" && \
-            strings "$collect2name" | grep resolve_lib_name >/dev/null
-          then
-            # We have reworked collect2
-            :
-          else
-            # We have old collect2
-            hardcode_direct=unsupported
-            hardcode_minus_L=yes
-            hardcode_libdir_flag_spec='-L$libdir'
-            hardcode_libdir_separator=
-          fi
-          ;;
-        esac
-      fi
-      # Begin _LT_AC_SYS_LIBPATH_AIX.
-      echo 'int main () { return 0; }' > conftest.c
-      ${CC} ${LDFLAGS} conftest.c -o conftest
-      aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-      if test -z "$aix_libpath"; then
-        aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0  *\(.*\)$/\1/; p; }
-}'`
-      fi
-      if test -z "$aix_libpath"; then
-        aix_libpath="/usr/lib:/lib"
-      fi
-      rm -f conftest.c conftest
-      # End _LT_AC_SYS_LIBPATH_AIX.
-      if test "$aix_use_runtimelinking" = yes; then
-        hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-      else
-        if test "$host_cpu" = ia64; then
-          hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib'
-        else
-          hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath"
-        fi
-      fi
-      ;;
-    amigaos*)
-      case "$host_cpu" in
-        powerpc)
-          ;;
-        m68k)
-          hardcode_libdir_flag_spec='-L$libdir'
-          hardcode_minus_L=yes
-          ;;
-      esac
-      ;;
-    bsdi[45]*)
-      ;;
-    cygwin* | mingw* | pw32* | cegcc*)
-      # When not using gcc, we currently assume that we are using
-      # Microsoft Visual C++.
-      # hardcode_libdir_flag_spec is actually meaningless, as there is
-      # no search path for DLLs.
-      hardcode_libdir_flag_spec=' '
-      libext=lib
-      ;;
-    darwin* | rhapsody*)
-      hardcode_direct=no
-      if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then
-        :
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    dgux*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      ;;
-    freebsd2.[01]*)
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      ;;
-    freebsd* | dragonfly*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      ;;
-    hpux9*)
-      hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-      hardcode_libdir_separator=:
-      hardcode_direct=yes
-      # hardcode_minus_L: Not really in the search PATH,
-      # but as the default location of the library.
-      hardcode_minus_L=yes
-      ;;
-    hpux10*)
-      if test "$with_gnu_ld" = no; then
-        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-        hardcode_libdir_separator=:
-        hardcode_direct=yes
-        # hardcode_minus_L: Not really in the search PATH,
-        # but as the default location of the library.
-        hardcode_minus_L=yes
-      fi
-      ;;
-    hpux11*)
-      if test "$with_gnu_ld" = no; then
-        hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir'
-        hardcode_libdir_separator=:
-        case $host_cpu in
-          hppa*64*|ia64*)
-            hardcode_direct=no
-            ;;
-          *)
-            hardcode_direct=yes
-            # hardcode_minus_L: Not really in the search PATH,
-            # but as the default location of the library.
-            hardcode_minus_L=yes
-            ;;
-        esac
-      fi
-      ;;
-    irix5* | irix6* | nonstopux*)
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-    netbsd*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      hardcode_direct=yes
-      ;;
-    newsos6)
-      hardcode_direct=yes
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-    *nto* | *qnx*)
-      ;;
-    openbsd*)
-      if test -f /usr/libexec/ld.so; then
-        hardcode_direct=yes
-        if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then
-          hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-        else
-          case "$host_os" in
-            openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*)
-              hardcode_libdir_flag_spec='-R$libdir'
-              ;;
-            *)
-              hardcode_libdir_flag_spec='${wl}-rpath,$libdir'
-              ;;
-          esac
-        fi
-      else
-        ld_shlibs=no
-      fi
-      ;;
-    os2*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_minus_L=yes
-      ;;
-    osf3*)
-      hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      hardcode_libdir_separator=:
-      ;;
-    osf4* | osf5*)
-      if test "$GCC" = yes; then
-        hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir'
-      else
-        # Both cc and cxx compiler support -rpath directly
-        hardcode_libdir_flag_spec='-rpath $libdir'
-      fi
-      hardcode_libdir_separator=:
-      ;;
-    solaris*)
-      hardcode_libdir_flag_spec='-R$libdir'
-      ;;
-    sunos4*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      hardcode_direct=yes
-      hardcode_minus_L=yes
-      ;;
-    sysv4)
-      case $host_vendor in
-        sni)
-          hardcode_direct=yes # is this really true???
-          ;;
-        siemens)
-          hardcode_direct=no
-          ;;
-        motorola)
-          hardcode_direct=no #Motorola manual says yes, but my tests say they lie
-          ;;
-      esac
-      ;;
-    sysv4.3*)
-      ;;
-    sysv4*MP*)
-      if test -d /usr/nec; then
-        ld_shlibs=yes
-      fi
-      ;;
-    sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*)
-      ;;
-    sysv5* | sco3.2v5* | sco5v6*)
-      hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`'
-      hardcode_libdir_separator=':'
-      ;;
-    uts4*)
-      hardcode_libdir_flag_spec='-L$libdir'
-      ;;
-    *)
-      ld_shlibs=no
-      ;;
-  esac
-fi
-
-# Check dynamic linker characteristics
-# Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER.
-# Unlike libtool.m4, here we don't care about _all_ names of the library, but
-# only about the one the linker finds when passed -lNAME. This is the last
-# element of library_names_spec in libtool.m4, or possibly two of them if the
-# linker has special search rules.
-library_names_spec=      # the last element of library_names_spec in libtool.m4
-libname_spec='lib$name'
-case "$host_os" in
-  aix3*)
-    library_names_spec='$libname.a'
-    ;;
-  aix[4-9]*)
-    library_names_spec='$libname$shrext'
-    ;;
-  amigaos*)
-    case "$host_cpu" in
-      powerpc*)
-        library_names_spec='$libname$shrext' ;;
-      m68k)
-        library_names_spec='$libname.a' ;;
-    esac
-    ;;
-  beos*)
-    library_names_spec='$libname$shrext'
-    ;;
-  bsdi[45]*)
-    library_names_spec='$libname$shrext'
-    ;;
-  cygwin* | mingw* | pw32* | cegcc*)
-    shrext=.dll
-    library_names_spec='$libname.dll.a $libname.lib'
-    ;;
-  darwin* | rhapsody*)
-    shrext=.dylib
-    library_names_spec='$libname$shrext'
-    ;;
-  dgux*)
-    library_names_spec='$libname$shrext'
-    ;;
-  freebsd[23].*)
-    library_names_spec='$libname$shrext$versuffix'
-    ;;
-  freebsd* | dragonfly*)
-    library_names_spec='$libname$shrext'
-    ;;
-  gnu*)
-    library_names_spec='$libname$shrext'
-    ;;
-  haiku*)
-    library_names_spec='$libname$shrext'
-    ;;
-  hpux9* | hpux10* | hpux11*)
-    case $host_cpu in
-      ia64*)
-        shrext=.so
-        ;;
-      hppa*64*)
-        shrext=.sl
-        ;;
-      *)
-        shrext=.sl
-        ;;
-    esac
-    library_names_spec='$libname$shrext'
-    ;;
-  interix[3-9]*)
-    library_names_spec='$libname$shrext'
-    ;;
-  irix5* | irix6* | nonstopux*)
-    library_names_spec='$libname$shrext'
-    case "$host_os" in
-      irix5* | nonstopux*)
-        libsuff= shlibsuff=
-        ;;
-      *)
-        case $LD in
-          *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;;
-          *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;;
-          *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;;
-          *) libsuff= shlibsuff= ;;
-        esac
-        ;;
-    esac
-    ;;
-  linux*oldld* | linux*aout* | linux*coff*)
-    ;;
-  linux* | k*bsd*-gnu | kopensolaris*-gnu)
-    library_names_spec='$libname$shrext'
-    ;;
-  knetbsd*-gnu)
-    library_names_spec='$libname$shrext'
-    ;;
-  netbsd*)
-    library_names_spec='$libname$shrext'
-    ;;
-  newsos6)
-    library_names_spec='$libname$shrext'
-    ;;
-  *nto* | *qnx*)
-    library_names_spec='$libname$shrext'
-    ;;
-  openbsd*)
-    library_names_spec='$libname$shrext$versuffix'
-    ;;
-  os2*)
-    libname_spec='$name'
-    shrext=.dll
-    library_names_spec='$libname.a'
-    ;;
-  osf3* | osf4* | osf5*)
-    library_names_spec='$libname$shrext'
-    ;;
-  rdos*)
-    ;;
-  solaris*)
-    library_names_spec='$libname$shrext'
-    ;;
-  sunos4*)
-    library_names_spec='$libname$shrext$versuffix'
-    ;;
-  sysv4 | sysv4.3*)
-    library_names_spec='$libname$shrext'
-    ;;
-  sysv4*MP*)
-    library_names_spec='$libname$shrext'
-    ;;
-  sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*)
-    library_names_spec='$libname$shrext'
-    ;;
-  tpf*)
-    library_names_spec='$libname$shrext'
-    ;;
-  uts4*)
-    library_names_spec='$libname$shrext'
-    ;;
-esac
-
-sed_quote_subst='s/\(["`$\\]\)/\\\1/g'
-escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"`
-shlibext=`echo "$shrext" | sed -e 's,^\.,,'`
-escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"`
-
-LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF
-
-# How to pass a linker flag through the compiler.
-wl="$escaped_wl"
-
-# Static library suffix (normally "a").
-libext="$libext"
-
-# Shared library suffix (normally "so").
-shlibext="$shlibext"
-
-# Format of library name prefix.
-libname_spec="$escaped_libname_spec"
-
-# Library names that the linker finds when passed -lNAME.
-library_names_spec="$escaped_library_names_spec"
-
-# Flag to hardcode \$libdir into a binary during linking.
-# This must work even if \$libdir does not exist.
-hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec"
-
-# Whether we need a single -rpath flag with a separated argument.
-hardcode_libdir_separator="$hardcode_libdir_separator"
-
-# Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the
-# resulting binary.
-hardcode_direct="$hardcode_direct"
-
-# Set to yes if using the -LDIR flag during linking hardcodes DIR into the
-# resulting binary.
-hardcode_minus_L="$hardcode_minus_L"
-
-EOF
diff --git a/config.sub b/config.sub
deleted file mode 100755 (executable)
index d4c8338..0000000
+++ /dev/null
@@ -1,1805 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-09-26'
-
-# This file 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-
-
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright 1992-2014 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )        # Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit ;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
-  kopensolaris*-gnu* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  android-linux)
-    os=-linux-android
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-       -sun*os*)
-               # Prevent following clause from handling this invalid input.
-               ;;
-       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis | -knuth | -cray | -microblaze*)
-               os=
-               basic_machine=$1
-               ;;
-       -bluegene*)
-               os=-cnk
-               ;;
-       -sim | -cisco | -oki | -wec | -winbond)
-               os=
-               basic_machine=$1
-               ;;
-       -scout)
-               ;;
-       -wrs)
-               os=-vxworks
-               basic_machine=$1
-               ;;
-       -chorusos*)
-               os=-chorusos
-               basic_machine=$1
-               ;;
-       -chorusrdb)
-               os=-chorusrdb
-               basic_machine=$1
-               ;;
-       -hiux*)
-               os=-hiuxwe2
-               ;;
-       -sco6)
-               os=-sco5v6
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5)
-               os=-sco3.2v5
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco4)
-               os=-sco3.2v4
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2.[4-9]*)
-               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2v[4-9]*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5v6*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco*)
-               os=-sco3.2v2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -udk*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -isc)
-               os=-isc2.2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -clix*)
-               basic_machine=clipper-intergraph
-               ;;
-       -isc*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -lynx*178)
-               os=-lynxos178
-               ;;
-       -lynx*5)
-               os=-lynxos5
-               ;;
-       -lynx*)
-               os=-lynxos
-               ;;
-       -ptx*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-               ;;
-       -windowsnt*)
-               os=`echo $os | sed -e 's/windowsnt/winnt/'`
-               ;;
-       -psos*)
-               os=-psos
-               ;;
-       -mint | -mint[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-       # Recognize the basic CPU types without company name.
-       # Some are omitted here because they have special meanings below.
-       1750a | 580 \
-       | a29k \
-       | aarch64 | aarch64_be \
-       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-       | am33_2.0 \
-       | arc | arceb \
-       | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-       | avr | avr32 \
-       | be32 | be64 \
-       | bfin \
-       | c4x | c8051 | clipper \
-       | d10v | d30v | dlx | dsp16xx \
-       | epiphany \
-       | fido | fr30 | frv \
-       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-       | hexagon \
-       | i370 | i860 | i960 | ia64 \
-       | ip2k | iq2000 \
-       | k1om \
-       | le32 | le64 \
-       | lm32 \
-       | m32c | m32r | m32rle | m68000 | m68k | m88k \
-       | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
-       | mips | mipsbe | mipseb | mipsel | mipsle \
-       | mips16 \
-       | mips64 | mips64el \
-       | mips64octeon | mips64octeonel \
-       | mips64orion | mips64orionel \
-       | mips64r5900 | mips64r5900el \
-       | mips64vr | mips64vrel \
-       | mips64vr4100 | mips64vr4100el \
-       | mips64vr4300 | mips64vr4300el \
-       | mips64vr5000 | mips64vr5000el \
-       | mips64vr5900 | mips64vr5900el \
-       | mipsisa32 | mipsisa32el \
-       | mipsisa32r2 | mipsisa32r2el \
-       | mipsisa32r6 | mipsisa32r6el \
-       | mipsisa64 | mipsisa64el \
-       | mipsisa64r2 | mipsisa64r2el \
-       | mipsisa64r6 | mipsisa64r6el \
-       | mipsisa64sb1 | mipsisa64sb1el \
-       | mipsisa64sr71k | mipsisa64sr71kel \
-       | mipsr5900 | mipsr5900el \
-       | mipstx39 | mipstx39el \
-       | mn10200 | mn10300 \
-       | moxie \
-       | mt \
-       | msp430 \
-       | nds32 | nds32le | nds32be \
-       | nios | nios2 | nios2eb | nios2el \
-       | ns16k | ns32k \
-       | open8 | or1k | or1knd | or32 \
-       | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle \
-       | pyramid \
-       | riscv32 | riscv64 \
-       | rl78 | rx \
-       | score \
-       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-       | sh64 | sh64le \
-       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-       | spu \
-       | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-       | ubicom32 \
-       | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-       | we32k \
-       | x86 | xc16x | xstormy16 | xtensa \
-       | z8k | z80)
-               basic_machine=$basic_machine-unknown
-               ;;
-       c54x)
-               basic_machine=tic54x-unknown
-               ;;
-       c55x)
-               basic_machine=tic55x-unknown
-               ;;
-       c6x)
-               basic_machine=tic6x-unknown
-               ;;
-       leon|leon[3-9])
-               basic_machine=sparc-$basic_machine
-               ;;
-       m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
-               basic_machine=$basic_machine-unknown
-               os=-none
-               ;;
-       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-               ;;
-       ms1)
-               basic_machine=mt-unknown
-               ;;
-
-       strongarm | thumb | xscale)
-               basic_machine=arm-unknown
-               ;;
-       xgate)
-               basic_machine=$basic_machine-unknown
-               os=-none
-               ;;
-       xscaleeb)
-               basic_machine=armeb-unknown
-               ;;
-
-       xscaleel)
-               basic_machine=armel-unknown
-               ;;
-
-       # We use `pc' rather than `unknown'
-       # because (1) that's what they normally are, and
-       # (2) the word "unknown" tends to confuse beginning users.
-       i*86 | x86_64)
-         basic_machine=$basic_machine-pc
-         ;;
-       # Object if more than one company name word.
-       *-*-*)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-       # Recognize the basic CPU types with company name.
-       580-* \
-       | a29k-* \
-       | aarch64-* | aarch64_be-* \
-       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-       | avr-* | avr32-* \
-       | be32-* | be64-* \
-       | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* \
-       | c8051-* | clipper-* | craynv-* | cydra-* \
-       | d10v-* | d30v-* | dlx-* \
-       | elxsi-* \
-       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-       | h8300-* | h8500-* \
-       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-       | hexagon-* \
-       | i*86-* | i860-* | i960-* | ia64-* \
-       | ip2k-* | iq2000-* \
-       | k1om-* \
-       | le32-* | le64-* \
-       | lm32-* \
-       | m32c-* | m32r-* | m32rle-* \
-       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-       | microblaze-* | microblazeel-* \
-       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-       | mips16-* \
-       | mips64-* | mips64el-* \
-       | mips64octeon-* | mips64octeonel-* \
-       | mips64orion-* | mips64orionel-* \
-       | mips64r5900-* | mips64r5900el-* \
-       | mips64vr-* | mips64vrel-* \
-       | mips64vr4100-* | mips64vr4100el-* \
-       | mips64vr4300-* | mips64vr4300el-* \
-       | mips64vr5000-* | mips64vr5000el-* \
-       | mips64vr5900-* | mips64vr5900el-* \
-       | mipsisa32-* | mipsisa32el-* \
-       | mipsisa32r2-* | mipsisa32r2el-* \
-       | mipsisa32r6-* | mipsisa32r6el-* \
-       | mipsisa64-* | mipsisa64el-* \
-       | mipsisa64r2-* | mipsisa64r2el-* \
-       | mipsisa64r6-* | mipsisa64r6el-* \
-       | mipsisa64sb1-* | mipsisa64sb1el-* \
-       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-       | mipsr5900-* | mipsr5900el-* \
-       | mipstx39-* | mipstx39el-* \
-       | mmix-* \
-       | mt-* \
-       | msp430-* \
-       | nds32-* | nds32le-* | nds32be-* \
-       | nios-* | nios2-* | nios2eb-* | nios2el-* \
-       | none-* | np1-* | ns16k-* | ns32k-* \
-       | open8-* \
-       | or1k*-* \
-       | orion-* \
-       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-       | pyramid-* \
-       | rl78-* | romp-* | rs6000-* | rx-* \
-       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-       | sparclite-* \
-       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
-       | tahoe-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-       | tile*-* \
-       | tron-* \
-       | ubicom32-* \
-       | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-       | vax-* \
-       | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* \
-       | xstormy16-* | xtensa*-* \
-       | ymp-* \
-       | z8k-* | z80-*)
-               ;;
-       # Recognize the basic CPU types without company name, with glob match.
-       xtensa*)
-               basic_machine=$basic_machine-unknown
-               ;;
-       # Recognize the various machine names and aliases which stand
-       # for a CPU type and a company and sometimes even an OS.
-       386bsd)
-               basic_machine=i386-unknown
-               os=-bsd
-               ;;
-       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-               basic_machine=m68000-att
-               ;;
-       3b*)
-               basic_machine=we32k-att
-               ;;
-       a29khif)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       abacus)
-               basic_machine=abacus-unknown
-               ;;
-       adobe68k)
-               basic_machine=m68010-adobe
-               os=-scout
-               ;;
-       alliant | fx80)
-               basic_machine=fx80-alliant
-               ;;
-       altos | altos3068)
-               basic_machine=m68k-altos
-               ;;
-       am29k)
-               basic_machine=a29k-none
-               os=-bsd
-               ;;
-       amd64)
-               basic_machine=x86_64-pc
-               ;;
-       amd64-*)
-               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       amdahl)
-               basic_machine=580-amdahl
-               os=-sysv
-               ;;
-       amiga | amiga-*)
-               basic_machine=m68k-unknown
-               ;;
-       amigaos | amigados)
-               basic_machine=m68k-unknown
-               os=-amigaos
-               ;;
-       amigaunix | amix)
-               basic_machine=m68k-unknown
-               os=-sysv4
-               ;;
-       apollo68)
-               basic_machine=m68k-apollo
-               os=-sysv
-               ;;
-       apollo68bsd)
-               basic_machine=m68k-apollo
-               os=-bsd
-               ;;
-       aros)
-               basic_machine=i386-pc
-               os=-aros
-               ;;
-       aux)
-               basic_machine=m68k-apple
-               os=-aux
-               ;;
-       balance)
-               basic_machine=ns32k-sequent
-               os=-dynix
-               ;;
-       blackfin)
-               basic_machine=bfin-unknown
-               os=-linux
-               ;;
-       blackfin-*)
-               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       bluegene*)
-               basic_machine=powerpc-ibm
-               os=-cnk
-               ;;
-       c54x-*)
-               basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c55x-*)
-               basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c6x-*)
-               basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c90)
-               basic_machine=c90-cray
-               os=-unicos
-               ;;
-       cegcc)
-               basic_machine=arm-unknown
-               os=-cegcc
-               ;;
-       convex-c1)
-               basic_machine=c1-convex
-               os=-bsd
-               ;;
-       convex-c2)
-               basic_machine=c2-convex
-               os=-bsd
-               ;;
-       convex-c32)
-               basic_machine=c32-convex
-               os=-bsd
-               ;;
-       convex-c34)
-               basic_machine=c34-convex
-               os=-bsd
-               ;;
-       convex-c38)
-               basic_machine=c38-convex
-               os=-bsd
-               ;;
-       cray | j90)
-               basic_machine=j90-cray
-               os=-unicos
-               ;;
-       craynv)
-               basic_machine=craynv-cray
-               os=-unicosmp
-               ;;
-       cr16 | cr16-*)
-               basic_machine=cr16-unknown
-               os=-elf
-               ;;
-       crds | unos)
-               basic_machine=m68k-crds
-               ;;
-       crisv32 | crisv32-* | etraxfs*)
-               basic_machine=crisv32-axis
-               ;;
-       cris | cris-* | etrax*)
-               basic_machine=cris-axis
-               ;;
-       crx)
-               basic_machine=crx-unknown
-               os=-elf
-               ;;
-       da30 | da30-*)
-               basic_machine=m68k-da30
-               ;;
-       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-               basic_machine=mips-dec
-               ;;
-       decsystem10* | dec10*)
-               basic_machine=pdp10-dec
-               os=-tops10
-               ;;
-       decsystem20* | dec20*)
-               basic_machine=pdp10-dec
-               os=-tops20
-               ;;
-       delta | 3300 | motorola-3300 | motorola-delta \
-             | 3300-motorola | delta-motorola)
-               basic_machine=m68k-motorola
-               ;;
-       delta88)
-               basic_machine=m88k-motorola
-               os=-sysv3
-               ;;
-       dicos)
-               basic_machine=i686-pc
-               os=-dicos
-               ;;
-       djgpp)
-               basic_machine=i586-pc
-               os=-msdosdjgpp
-               ;;
-       dpx20 | dpx20-*)
-               basic_machine=rs6000-bull
-               os=-bosx
-               ;;
-       dpx2* | dpx2*-bull)
-               basic_machine=m68k-bull
-               os=-sysv3
-               ;;
-       ebmon29k)
-               basic_machine=a29k-amd
-               os=-ebmon
-               ;;
-       elxsi)
-               basic_machine=elxsi-elxsi
-               os=-bsd
-               ;;
-       encore | umax | mmax)
-               basic_machine=ns32k-encore
-               ;;
-       es1800 | OSE68k | ose68k | ose | OSE)
-               basic_machine=m68k-ericsson
-               os=-ose
-               ;;
-       fx2800)
-               basic_machine=i860-alliant
-               ;;
-       genix)
-               basic_machine=ns32k-ns
-               ;;
-       gmicro)
-               basic_machine=tron-gmicro
-               os=-sysv
-               ;;
-       go32)
-               basic_machine=i386-pc
-               os=-go32
-               ;;
-       h3050r* | hiux*)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       h8300hms)
-               basic_machine=h8300-hitachi
-               os=-hms
-               ;;
-       h8300xray)
-               basic_machine=h8300-hitachi
-               os=-xray
-               ;;
-       h8500hms)
-               basic_machine=h8500-hitachi
-               os=-hms
-               ;;
-       harris)
-               basic_machine=m88k-harris
-               os=-sysv3
-               ;;
-       hp300-*)
-               basic_machine=m68k-hp
-               ;;
-       hp300bsd)
-               basic_machine=m68k-hp
-               os=-bsd
-               ;;
-       hp300hpux)
-               basic_machine=m68k-hp
-               os=-hpux
-               ;;
-       hp3k9[0-9][0-9] | hp9[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hp9k2[0-9][0-9] | hp9k31[0-9])
-               basic_machine=m68000-hp
-               ;;
-       hp9k3[2-9][0-9])
-               basic_machine=m68k-hp
-               ;;
-       hp9k6[0-9][0-9] | hp6[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hp9k7[0-79][0-9] | hp7[0-79][0-9])
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k78[0-9] | hp78[0-9])
-               # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-               # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[0-9][13679] | hp8[0-9][13679])
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[0-9][0-9] | hp8[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hppa-next)
-               os=-nextstep3
-               ;;
-       hppaosf)
-               basic_machine=hppa1.1-hp
-               os=-osf
-               ;;
-       hppro)
-               basic_machine=hppa1.1-hp
-               os=-proelf
-               ;;
-       i370-ibm* | ibm*)
-               basic_machine=i370-ibm
-               ;;
-       i*86v32)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv32
-               ;;
-       i*86v4*)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv4
-               ;;
-       i*86v)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv
-               ;;
-       i*86sol2)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-solaris2
-               ;;
-       i386mach)
-               basic_machine=i386-mach
-               os=-mach
-               ;;
-       i386-vsta | vsta)
-               basic_machine=i386-unknown
-               os=-vsta
-               ;;
-       iris | iris4d)
-               basic_machine=mips-sgi
-               case $os in
-                   -irix*)
-                       ;;
-                   *)
-                       os=-irix4
-                       ;;
-               esac
-               ;;
-       isi68 | isi)
-               basic_machine=m68k-isi
-               os=-sysv
-               ;;
-       leon-*|leon[3-9]-*)
-               basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
-               ;;
-       m68knommu)
-               basic_machine=m68k-unknown
-               os=-linux
-               ;;
-       m68knommu-*)
-               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       m88k-omron*)
-               basic_machine=m88k-omron
-               ;;
-       magnum | m3230)
-               basic_machine=mips-mips
-               os=-sysv
-               ;;
-       merlin)
-               basic_machine=ns32k-utek
-               os=-sysv
-               ;;
-       microblaze*)
-               basic_machine=microblaze-xilinx
-               ;;
-       mingw64)
-               basic_machine=x86_64-pc
-               os=-mingw64
-               ;;
-       mingw32)
-               basic_machine=i686-pc
-               os=-mingw32
-               ;;
-       mingw32ce)
-               basic_machine=arm-unknown
-               os=-mingw32ce
-               ;;
-       miniframe)
-               basic_machine=m68000-convergent
-               ;;
-       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-       mips3*-*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-               ;;
-       mips3*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-               ;;
-       monitor)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       morphos)
-               basic_machine=powerpc-unknown
-               os=-morphos
-               ;;
-       moxiebox)
-               basic_machine=moxie-unknown
-               os=-moxiebox
-               ;;
-       msdos)
-               basic_machine=i386-pc
-               os=-msdos
-               ;;
-       ms1-*)
-               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-               ;;
-       msys)
-               basic_machine=i686-pc
-               os=-msys
-               ;;
-       mvs)
-               basic_machine=i370-ibm
-               os=-mvs
-               ;;
-       nacl)
-               basic_machine=le32-unknown
-               os=-nacl
-               ;;
-       ncr3000)
-               basic_machine=i486-ncr
-               os=-sysv4
-               ;;
-       netbsd386)
-               basic_machine=i386-unknown
-               os=-netbsd
-               ;;
-       netwinder)
-               basic_machine=armv4l-rebel
-               os=-linux
-               ;;
-       news | news700 | news800 | news900)
-               basic_machine=m68k-sony
-               os=-newsos
-               ;;
-       news1000)
-               basic_machine=m68030-sony
-               os=-newsos
-               ;;
-       news-3600 | risc-news)
-               basic_machine=mips-sony
-               os=-newsos
-               ;;
-       necv70)
-               basic_machine=v70-nec
-               os=-sysv
-               ;;
-       next | m*-next )
-               basic_machine=m68k-next
-               case $os in
-                   -nextstep* )
-                       ;;
-                   -ns2*)
-                     os=-nextstep2
-                       ;;
-                   *)
-                     os=-nextstep3
-                       ;;
-               esac
-               ;;
-       nh3000)
-               basic_machine=m68k-harris
-               os=-cxux
-               ;;
-       nh[45]000)
-               basic_machine=m88k-harris
-               os=-cxux
-               ;;
-       nindy960)
-               basic_machine=i960-intel
-               os=-nindy
-               ;;
-       mon960)
-               basic_machine=i960-intel
-               os=-mon960
-               ;;
-       nonstopux)
-               basic_machine=mips-compaq
-               os=-nonstopux
-               ;;
-       np1)
-               basic_machine=np1-gould
-               ;;
-       neo-tandem)
-               basic_machine=neo-tandem
-               ;;
-       nse-tandem)
-               basic_machine=nse-tandem
-               ;;
-       nsr-tandem)
-               basic_machine=nsr-tandem
-               ;;
-       op50n-* | op60c-*)
-               basic_machine=hppa1.1-oki
-               os=-proelf
-               ;;
-       openrisc | openrisc-*)
-               basic_machine=or32-unknown
-               ;;
-       os400)
-               basic_machine=powerpc-ibm
-               os=-os400
-               ;;
-       OSE68000 | ose68000)
-               basic_machine=m68000-ericsson
-               os=-ose
-               ;;
-       os68k)
-               basic_machine=m68k-none
-               os=-os68k
-               ;;
-       pa-hitachi)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       paragon)
-               basic_machine=i860-intel
-               os=-osf
-               ;;
-       parisc)
-               basic_machine=hppa-unknown
-               os=-linux
-               ;;
-       parisc-*)
-               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       pbd)
-               basic_machine=sparc-tti
-               ;;
-       pbb)
-               basic_machine=m68k-tti
-               ;;
-       pc532 | pc532-*)
-               basic_machine=ns32k-pc532
-               ;;
-       pc98)
-               basic_machine=i386-pc
-               ;;
-       pc98-*)
-               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium | p5 | k5 | k6 | nexgen | viac3)
-               basic_machine=i586-pc
-               ;;
-       pentiumpro | p6 | 6x86 | athlon | athlon_*)
-               basic_machine=i686-pc
-               ;;
-       pentiumii | pentium2 | pentiumiii | pentium3)
-               basic_machine=i686-pc
-               ;;
-       pentium4)
-               basic_machine=i786-pc
-               ;;
-       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumpro-* | p6-* | 6x86-* | athlon-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium4-*)
-               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pn)
-               basic_machine=pn-gould
-               ;;
-       power)  basic_machine=power-ibm
-               ;;
-       ppc | ppcbe)    basic_machine=powerpc-unknown
-               ;;
-       ppc-* | ppcbe-*)
-               basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppcle | powerpclittle | ppc-le | powerpc-little)
-               basic_machine=powerpcle-unknown
-               ;;
-       ppcle-* | powerpclittle-*)
-               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64)  basic_machine=powerpc64-unknown
-               ;;
-       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-               basic_machine=powerpc64le-unknown
-               ;;
-       ppc64le-* | powerpc64little-*)
-               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ps2)
-               basic_machine=i386-ibm
-               ;;
-       pw32)
-               basic_machine=i586-unknown
-               os=-pw32
-               ;;
-       rdos | rdos64)
-               basic_machine=x86_64-pc
-               os=-rdos
-               ;;
-       rdos32)
-               basic_machine=i386-pc
-               os=-rdos
-               ;;
-       rom68k)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       rm[46]00)
-               basic_machine=mips-siemens
-               ;;
-       rtpc | rtpc-*)
-               basic_machine=romp-ibm
-               ;;
-       s390 | s390-*)
-               basic_machine=s390-ibm
-               ;;
-       s390x | s390x-*)
-               basic_machine=s390x-ibm
-               ;;
-       sa29200)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       sb1)
-               basic_machine=mipsisa64sb1-unknown
-               ;;
-       sb1el)
-               basic_machine=mipsisa64sb1el-unknown
-               ;;
-       sde)
-               basic_machine=mipsisa32-sde
-               os=-elf
-               ;;
-       sei)
-               basic_machine=mips-sei
-               os=-seiux
-               ;;
-       sequent)
-               basic_machine=i386-sequent
-               ;;
-       sh)
-               basic_machine=sh-hitachi
-               os=-hms
-               ;;
-       sh5el)
-               basic_machine=sh5le-unknown
-               ;;
-       sh64)
-               basic_machine=sh64-unknown
-               ;;
-       sparclite-wrs | simso-wrs)
-               basic_machine=sparclite-wrs
-               os=-vxworks
-               ;;
-       sps7)
-               basic_machine=m68k-bull
-               os=-sysv2
-               ;;
-       spur)
-               basic_machine=spur-unknown
-               ;;
-       st2000)
-               basic_machine=m68k-tandem
-               ;;
-       stratus)
-               basic_machine=i860-stratus
-               os=-sysv4
-               ;;
-       strongarm-* | thumb-*)
-               basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       sun2)
-               basic_machine=m68000-sun
-               ;;
-       sun2os3)
-               basic_machine=m68000-sun
-               os=-sunos3
-               ;;
-       sun2os4)
-               basic_machine=m68000-sun
-               os=-sunos4
-               ;;
-       sun3os3)
-               basic_machine=m68k-sun
-               os=-sunos3
-               ;;
-       sun3os4)
-               basic_machine=m68k-sun
-               os=-sunos4
-               ;;
-       sun4os3)
-               basic_machine=sparc-sun
-               os=-sunos3
-               ;;
-       sun4os4)
-               basic_machine=sparc-sun
-               os=-sunos4
-               ;;
-       sun4sol2)
-               basic_machine=sparc-sun
-               os=-solaris2
-               ;;
-       sun3 | sun3-*)
-               basic_machine=m68k-sun
-               ;;
-       sun4)
-               basic_machine=sparc-sun
-               ;;
-       sun386 | sun386i | roadrunner)
-               basic_machine=i386-sun
-               ;;
-       sv1)
-               basic_machine=sv1-cray
-               os=-unicos
-               ;;
-       symmetry)
-               basic_machine=i386-sequent
-               os=-dynix
-               ;;
-       t3e)
-               basic_machine=alphaev5-cray
-               os=-unicos
-               ;;
-       t90)
-               basic_machine=t90-cray
-               os=-unicos
-               ;;
-       tile*)
-               basic_machine=$basic_machine-unknown
-               os=-linux-gnu
-               ;;
-       tx39)
-               basic_machine=mipstx39-unknown
-               ;;
-       tx39el)
-               basic_machine=mipstx39el-unknown
-               ;;
-       toad1)
-               basic_machine=pdp10-xkl
-               os=-tops20
-               ;;
-       tower | tower-32)
-               basic_machine=m68k-ncr
-               ;;
-       tpf)
-               basic_machine=s390x-ibm
-               os=-tpf
-               ;;
-       udi29k)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       ultra3)
-               basic_machine=a29k-nyu
-               os=-sym1
-               ;;
-       v810 | necv810)
-               basic_machine=v810-nec
-               os=-none
-               ;;
-       vaxv)
-               basic_machine=vax-dec
-               os=-sysv
-               ;;
-       vms)
-               basic_machine=vax-dec
-               os=-vms
-               ;;
-       vpp*|vx|vx-*)
-               basic_machine=f301-fujitsu
-               ;;
-       vxworks960)
-               basic_machine=i960-wrs
-               os=-vxworks
-               ;;
-       vxworks68)
-               basic_machine=m68k-wrs
-               os=-vxworks
-               ;;
-       vxworks29k)
-               basic_machine=a29k-wrs
-               os=-vxworks
-               ;;
-       w65*)
-               basic_machine=w65-wdc
-               os=-none
-               ;;
-       w89k-*)
-               basic_machine=hppa1.1-winbond
-               os=-proelf
-               ;;
-       xbox)
-               basic_machine=i686-pc
-               os=-mingw32
-               ;;
-       xps | xps100)
-               basic_machine=xps100-honeywell
-               ;;
-       xscale-* | xscalee[bl]-*)
-               basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
-               ;;
-       ymp)
-               basic_machine=ymp-cray
-               os=-unicos
-               ;;
-       z8k-*-coff)
-               basic_machine=z8k-unknown
-               os=-sim
-               ;;
-       z80-*-coff)
-               basic_machine=z80-unknown
-               os=-sim
-               ;;
-       none)
-               basic_machine=none-none
-               os=-none
-               ;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-       w89k)
-               basic_machine=hppa1.1-winbond
-               ;;
-       op50n)
-               basic_machine=hppa1.1-oki
-               ;;
-       op60c)
-               basic_machine=hppa1.1-oki
-               ;;
-       romp)
-               basic_machine=romp-ibm
-               ;;
-       mmix)
-               basic_machine=mmix-knuth
-               ;;
-       rs6000)
-               basic_machine=rs6000-ibm
-               ;;
-       vax)
-               basic_machine=vax-dec
-               ;;
-       pdp10)
-               # there are many clones, so DEC is not a safe bet
-               basic_machine=pdp10-unknown
-               ;;
-       pdp11)
-               basic_machine=pdp11-dec
-               ;;
-       we32k)
-               basic_machine=we32k-att
-               ;;
-       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-               basic_machine=sh-unknown
-               ;;
-       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-               basic_machine=sparc-sun
-               ;;
-       cydra)
-               basic_machine=cydra-cydrome
-               ;;
-       orion)
-               basic_machine=orion-highlevel
-               ;;
-       orion105)
-               basic_machine=clipper-highlevel
-               ;;
-       mac | mpw | mac-mpw)
-               basic_machine=m68k-apple
-               ;;
-       pmac | pmac-mpw)
-               basic_machine=powerpc-apple
-               ;;
-       *-unknown)
-               # Make sure to match an already-canonicalized machine name.
-               ;;
-       *)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-       *-digital*)
-               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-               ;;
-       *-commodore*)
-               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-               ;;
-       *)
-               ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-       # First match some system type aliases
-       # that might get confused with valid system types.
-       # -solaris* is a basic system type, with this one exception.
-       -auroraux)
-               os=-auroraux
-               ;;
-       -solaris1 | -solaris1.*)
-               os=`echo $os | sed -e 's|solaris1|sunos4|'`
-               ;;
-       -solaris)
-               os=-solaris2
-               ;;
-       -svr4*)
-               os=-sysv4
-               ;;
-       -unixware*)
-               os=-sysv4.2uw
-               ;;
-       -gnu/linux*)
-               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-               ;;
-       # First accept the basic system types.
-       # The portable systems comes first.
-       # Each alternative MUST END IN A *, to match a version number.
-       # -sysv* is not here because it comes later, after sysvr4.
-       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-             | -sym* | -kopensolaris* | -plan9* \
-             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* | -aros* \
-             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -bitrig* | -openbsd* | -solidbsd* \
-             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-             | -chorusos* | -chorusrdb* | -cegcc* \
-             | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-             | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-             | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
-       # Remember, each alternative MUST END IN *, to match a version number.
-               ;;
-       -qnx*)
-               case $basic_machine in
-                   x86-* | i*86-*)
-                       ;;
-                   *)
-                       os=-nto$os
-                       ;;
-               esac
-               ;;
-       -nto-qnx*)
-               ;;
-       -nto*)
-               os=`echo $os | sed -e 's|nto|nto-qnx|'`
-               ;;
-       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-               ;;
-       -mac*)
-               os=`echo $os | sed -e 's|mac|macos|'`
-               ;;
-       -linux-dietlibc)
-               os=-linux-dietlibc
-               ;;
-       -linux*)
-               os=`echo $os | sed -e 's|linux|linux-gnu|'`
-               ;;
-       -sunos5*)
-               os=`echo $os | sed -e 's|sunos5|solaris2|'`
-               ;;
-       -sunos6*)
-               os=`echo $os | sed -e 's|sunos6|solaris3|'`
-               ;;
-       -opened*)
-               os=-openedition
-               ;;
-       -os400*)
-               os=-os400
-               ;;
-       -wince*)
-               os=-wince
-               ;;
-       -osfrose*)
-               os=-osfrose
-               ;;
-       -osf*)
-               os=-osf
-               ;;
-       -utek*)
-               os=-bsd
-               ;;
-       -dynix*)
-               os=-bsd
-               ;;
-       -acis*)
-               os=-aos
-               ;;
-       -atheos*)
-               os=-atheos
-               ;;
-       -syllable*)
-               os=-syllable
-               ;;
-       -386bsd)
-               os=-bsd
-               ;;
-       -ctix* | -uts*)
-               os=-sysv
-               ;;
-       -nova*)
-               os=-rtmk-nova
-               ;;
-       -ns2 )
-               os=-nextstep2
-               ;;
-       -nsk*)
-               os=-nsk
-               ;;
-       # Preserve the version number of sinix5.
-       -sinix5.*)
-               os=`echo $os | sed -e 's|sinix|sysv|'`
-               ;;
-       -sinix*)
-               os=-sysv4
-               ;;
-       -tpf*)
-               os=-tpf
-               ;;
-       -triton*)
-               os=-sysv3
-               ;;
-       -oss*)
-               os=-sysv3
-               ;;
-       -svr4)
-               os=-sysv4
-               ;;
-       -svr3)
-               os=-sysv3
-               ;;
-       -sysvr4)
-               os=-sysv4
-               ;;
-       # This must come after -sysvr4.
-       -sysv*)
-               ;;
-       -ose*)
-               os=-ose
-               ;;
-       -es1800*)
-               os=-ose
-               ;;
-       -xenix)
-               os=-xenix
-               ;;
-       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-               os=-mint
-               ;;
-       -aros*)
-               os=-aros
-               ;;
-       -zvmoe)
-               os=-zvmoe
-               ;;
-       -dicos*)
-               os=-dicos
-               ;;
-       -nacl*)
-               ;;
-       -none)
-               ;;
-       *)
-               # Get rid of the `-' at the beginning of $os.
-               os=`echo $os | sed 's/[^-]*-//'`
-               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-               exit 1
-               ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-       score-*)
-               os=-elf
-               ;;
-       spu-*)
-               os=-elf
-               ;;
-       *-acorn)
-               os=-riscix1.2
-               ;;
-       arm*-rebel)
-               os=-linux
-               ;;
-       arm*-semi)
-               os=-aout
-               ;;
-       c4x-* | tic4x-*)
-               os=-coff
-               ;;
-       c8051-*)
-               os=-elf
-               ;;
-       hexagon-*)
-               os=-elf
-               ;;
-       tic54x-*)
-               os=-coff
-               ;;
-       tic55x-*)
-               os=-coff
-               ;;
-       tic6x-*)
-               os=-coff
-               ;;
-       # This must come before the *-dec entry.
-       pdp10-*)
-               os=-tops20
-               ;;
-       pdp11-*)
-               os=-none
-               ;;
-       *-dec | vax-*)
-               os=-ultrix4.2
-               ;;
-       m68*-apollo)
-               os=-domain
-               ;;
-       i386-sun)
-               os=-sunos4.0.2
-               ;;
-       m68000-sun)
-               os=-sunos3
-               ;;
-       m68*-cisco)
-               os=-aout
-               ;;
-       mep-*)
-               os=-elf
-               ;;
-       mips*-cisco)
-               os=-elf
-               ;;
-       mips*-*)
-               os=-elf
-               ;;
-       or32-*)
-               os=-coff
-               ;;
-       *-tti)  # must be before sparc entry or we get the wrong os.
-               os=-sysv3
-               ;;
-       sparc-* | *-sun)
-               os=-sunos4.1.1
-               ;;
-       *-be)
-               os=-beos
-               ;;
-       *-haiku)
-               os=-haiku
-               ;;
-       *-ibm)
-               os=-aix
-               ;;
-       *-knuth)
-               os=-mmixware
-               ;;
-       *-wec)
-               os=-proelf
-               ;;
-       *-winbond)
-               os=-proelf
-               ;;
-       *-oki)
-               os=-proelf
-               ;;
-       *-hp)
-               os=-hpux
-               ;;
-       *-hitachi)
-               os=-hiux
-               ;;
-       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-               os=-sysv
-               ;;
-       *-cbm)
-               os=-amigaos
-               ;;
-       *-dg)
-               os=-dgux
-               ;;
-       *-dolphin)
-               os=-sysv3
-               ;;
-       m68k-ccur)
-               os=-rtu
-               ;;
-       m88k-omron*)
-               os=-luna
-               ;;
-       *-next )
-               os=-nextstep
-               ;;
-       *-sequent)
-               os=-ptx
-               ;;
-       *-crds)
-               os=-unos
-               ;;
-       *-ns)
-               os=-genix
-               ;;
-       i370-*)
-               os=-mvs
-               ;;
-       *-next)
-               os=-nextstep3
-               ;;
-       *-gould)
-               os=-sysv
-               ;;
-       *-highlevel)
-               os=-bsd
-               ;;
-       *-encore)
-               os=-bsd
-               ;;
-       *-sgi)
-               os=-irix
-               ;;
-       *-siemens)
-               os=-sysv4
-               ;;
-       *-masscomp)
-               os=-rtu
-               ;;
-       f30[01]-fujitsu | f700-fujitsu)
-               os=-uxpv
-               ;;
-       *-rom68k)
-               os=-coff
-               ;;
-       *-*bug)
-               os=-coff
-               ;;
-       *-apple)
-               os=-macos
-               ;;
-       *-atari*)
-               os=-mint
-               ;;
-       *)
-               os=-none
-               ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-       *-unknown)
-               case $os in
-                       -riscix*)
-                               vendor=acorn
-                               ;;
-                       -sunos*)
-                               vendor=sun
-                               ;;
-                       -cnk*|-aix*)
-                               vendor=ibm
-                               ;;
-                       -beos*)
-                               vendor=be
-                               ;;
-                       -hpux*)
-                               vendor=hp
-                               ;;
-                       -mpeix*)
-                               vendor=hp
-                               ;;
-                       -hiux*)
-                               vendor=hitachi
-                               ;;
-                       -unos*)
-                               vendor=crds
-                               ;;
-                       -dgux*)
-                               vendor=dg
-                               ;;
-                       -luna*)
-                               vendor=omron
-                               ;;
-                       -genix*)
-                               vendor=ns
-                               ;;
-                       -mvs* | -opened*)
-                               vendor=ibm
-                               ;;
-                       -os400*)
-                               vendor=ibm
-                               ;;
-                       -ptx*)
-                               vendor=sequent
-                               ;;
-                       -tpf*)
-                               vendor=ibm
-                               ;;
-                       -vxsim* | -vxworks* | -windiss*)
-                               vendor=wrs
-                               ;;
-                       -aux*)
-                               vendor=apple
-                               ;;
-                       -hms*)
-                               vendor=hitachi
-                               ;;
-                       -mpw* | -macos*)
-                               vendor=apple
-                               ;;
-                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-                               vendor=atari
-                               ;;
-                       -vos*)
-                               vendor=stratus
-                               ;;
-               esac
-               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-               ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
index b16e5676268b268f8c8e38a638204b12ed1d8b83..783de816663f2ff71271c5047451354e9bc58b46 100755 (executable)
--- a/configure
+++ b/configure
@@ -1,8 +1,8 @@
 #! /bin/sh
 # Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for groff 1.22.3.
+# Generated by GNU Autoconf 2.69 for GNU Troff 1.22.4.
 #
-# Report bugs to <bug-groff@gnu.org>.
+# Report bugs to <http://savannah.gnu.org/bugs/?group=groff>.
 #
 #
 # Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
@@ -266,11 +266,11 @@ fi
     $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
     $as_echo "$0: be upgraded to zsh 4.3.4 or later."
   else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org and bug-groff@gnu.org
-$0: about your system, including any error possibly output
-$0: before this message. Then install a modern shell, or
-$0: manually run the script under such a shell if you do
-$0: have one."
+    $as_echo "$0: Please tell bug-autoconf@gnu.org and
+$0: http://savannah.gnu.org/bugs/?group=groff about your
+$0: system, including any error possibly output before this
+$0: message. Then install a modern shell, or manually run
+$0: the script under such a shell if you do have one."
   fi
   exit 1
 fi
@@ -578,12 +578,12 @@ MFLAGS=
 MAKEFLAGS=
 
 # Identity of this package.
-PACKAGE_NAME='groff'
-PACKAGE_TARNAME='groff-1.22.3'
-PACKAGE_VERSION='1.22.3'
-PACKAGE_STRING='groff 1.22.3'
-PACKAGE_BUGREPORT='bug-groff@gnu.org'
-PACKAGE_URL=''
+PACKAGE_NAME='GNU Troff'
+PACKAGE_TARNAME='groff'
+PACKAGE_VERSION='1.22.4'
+PACKAGE_STRING='GNU Troff 1.22.4'
+PACKAGE_BUGREPORT='http://savannah.gnu.org/bugs/?group=groff'
+PACKAGE_URL='http://www.gnu.org/software/groff/'
 
 ac_unique_file="src/roff/groff/groff.cpp"
 # Factoring default headers for most tests.
@@ -622,10 +622,49 @@ ac_includes_default="\
 # include <unistd.h>
 #endif"
 
-ac_header_list=
 ac_func_list=
-ac_subst_vars='LTLIBOBJS
-GLIBC21
+ac_header_list=
+ac_config_libobj_dir=lib
+ac_subst_vars='gltests_LTLIBOBJS
+gltests_LIBOBJS
+gl_LTLIBOBJS
+gl_LIBOBJS
+am__EXEEXT_FALSE
+am__EXEEXT_TRUE
+LTLIBOBJS
+HAVE_TEXI2DVI_FALSE
+HAVE_TEXI2DVI_TRUE
+HAVE_PDFTOOLS_FALSE
+HAVE_PDFTOOLS_TRUE
+INSTALL_SHIPPED_HTML_FALSE
+INSTALL_SHIPPED_HTML_TRUE
+BUILD_EXAMPLES_FALSE
+BUILD_EXAMPLES_TRUE
+BUILD_OTHERDOC_FALSE
+BUILD_OTHERDOC_TRUE
+BUILD_PDFEXAMPLES_FALSE
+BUILD_PDFEXAMPLES_TRUE
+BUILD_PDFDOC_FALSE
+BUILD_PDFDOC_TRUE
+BUILD_HTMLEXAMPLES_FALSE
+BUILD_HTMLEXAMPLES_TRUE
+BUILD_HTML_FALSE
+BUILD_HTML_TRUE
+BUILD_INFODOC_FALSE
+BUILD_INFODOC_TRUE
+USEPROGRAMPREFIX_FALSE
+USEPROGRAMPREFIX_TRUE
+MAKE_DONT_HAVE_RM_FALSE
+MAKE_DONT_HAVE_RM_TRUE
+WITHOUT_X11_FALSE
+WITHOUT_X11_TRUE
+BUILD_WINSCRIPTS_FALSE
+BUILD_WINSCRIPTS_TRUE
+groff_have_urw_fonts
+BASH_PROG
+HAVE_TEST_EF_OPTION
+DIFF_PROG
+GDIFF
 pnmtops_nosetpage
 make_uninstall_pdfexamples
 make_install_pdfexamples
@@ -650,37 +689,37 @@ ac_ct_GHOSTSCRIPT
 GHOSTSCRIPT
 ALT_GHOSTSCRIPT_PROGS
 GROFF_PATH_SEPARATOR
+compatibility_wrappers
 tmac_wrap
 sys_tmac_prefix
 g
 PAGE
 BROKEN_SPOOLER_FLAGS
+urwfontsdir
 LIBOBJS
 LIBEXT
 LTLIBICONV
 LIBICONV
 CXXCPP
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
 LIBM
 LIBC
 SH_SCRIPT_SED_CMD
+PDFIMAGES
+PDFFONTS
+PDFINFO
+UCHARDET_LIBS
+UCHARDET_CFLAGS
+PKG_CONFIG_LIBDIR
+PKG_CONFIG_PATH
+PKG_CONFIG
+XPMTOPPM
 LN_S
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
 INSTALL_INFO
-RANLIB
+PROG_TEXI2DVI
+makeinfo_version_numeric
 make_uninstall_infodoc
 make_install_infodoc
 make_infodoc
-MAKEINFO
 make_uninstall_examples
 make_install_examples
 make_examples
@@ -696,7 +735,6 @@ PSPRINT
 LPQ
 LP
 LPR
-AWK
 PERL_VERSION
 SED
 PERL
@@ -710,14 +748,710 @@ X_LIBS
 X_PRE_LIBS
 X_CFLAGS
 XMKMF
-make_uninstall_winscripts
-make_install_winscripts
 make_winscripts
 OTHERDEVDIRS
 TTYDEVDIRS
+LIBGNU_LTLIBDEPS
+LIBGNU_LIBDEPS
+gltests_WITNESS
+REPLACE_TOWLOWER
+REPLACE_ISWCNTRL
+HAVE_WCTYPE_H
+NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H
+NEXT_WCTYPE_H
+HAVE_ISWCNTRL
+REPLACE_ISWBLANK
+HAVE_WCTRANS_T
+HAVE_WCTYPE_T
+HAVE_ISWBLANK
+GNULIB_TOWCTRANS
+GNULIB_WCTRANS
+GNULIB_ISWCTYPE
+GNULIB_WCTYPE
+GNULIB_ISWBLANK
+HAVE_CRTDEFS_H
+HAVE_WINT_T
+NEXT_AS_FIRST_DIRECTIVE_WCHAR_H
+NEXT_WCHAR_H
+REPLACE_WCSFTIME
+REPLACE_WCSWIDTH
+REPLACE_WCWIDTH
+REPLACE_WCSNRTOMBS
+REPLACE_WCSRTOMBS
+REPLACE_WCRTOMB
+REPLACE_MBSNRTOWCS
+REPLACE_MBSRTOWCS
+REPLACE_MBRLEN
+REPLACE_MBRTOWC
+REPLACE_MBSINIT
+REPLACE_WCTOB
+REPLACE_BTOWC
+REPLACE_MBSTATE_T
+HAVE_DECL_WCWIDTH
+HAVE_DECL_WCTOB
+HAVE_WCSFTIME
+HAVE_WCSWIDTH
+HAVE_WCSTOK
+HAVE_WCSSTR
+HAVE_WCSPBRK
+HAVE_WCSSPN
+HAVE_WCSCSPN
+HAVE_WCSRCHR
+HAVE_WCSCHR
+HAVE_WCSDUP
+HAVE_WCSXFRM
+HAVE_WCSCOLL
+HAVE_WCSNCASECMP
+HAVE_WCSCASECMP
+HAVE_WCSNCMP
+HAVE_WCSCMP
+HAVE_WCSNCAT
+HAVE_WCSCAT
+HAVE_WCPNCPY
+HAVE_WCSNCPY
+HAVE_WCPCPY
+HAVE_WCSCPY
+HAVE_WCSNLEN
+HAVE_WCSLEN
+HAVE_WMEMSET
+HAVE_WMEMMOVE
+HAVE_WMEMCPY
+HAVE_WMEMCMP
+HAVE_WMEMCHR
+HAVE_WCSNRTOMBS
+HAVE_WCSRTOMBS
+HAVE_WCRTOMB
+HAVE_MBSNRTOWCS
+HAVE_MBSRTOWCS
+HAVE_MBRLEN
+HAVE_MBRTOWC
+HAVE_MBSINIT
+HAVE_BTOWC
+GNULIB_WCSFTIME
+GNULIB_WCSWIDTH
+GNULIB_WCSTOK
+GNULIB_WCSSTR
+GNULIB_WCSPBRK
+GNULIB_WCSSPN
+GNULIB_WCSCSPN
+GNULIB_WCSRCHR
+GNULIB_WCSCHR
+GNULIB_WCSDUP
+GNULIB_WCSXFRM
+GNULIB_WCSCOLL
+GNULIB_WCSNCASECMP
+GNULIB_WCSCASECMP
+GNULIB_WCSNCMP
+GNULIB_WCSCMP
+GNULIB_WCSNCAT
+GNULIB_WCSCAT
+GNULIB_WCPNCPY
+GNULIB_WCSNCPY
+GNULIB_WCPCPY
+GNULIB_WCSCPY
+GNULIB_WCSNLEN
+GNULIB_WCSLEN
+GNULIB_WMEMSET
+GNULIB_WMEMMOVE
+GNULIB_WMEMCPY
+GNULIB_WMEMCMP
+GNULIB_WMEMCHR
+GNULIB_WCWIDTH
+GNULIB_WCSNRTOMBS
+GNULIB_WCSRTOMBS
+GNULIB_WCRTOMB
+GNULIB_MBSNRTOWCS
+GNULIB_MBSRTOWCS
+GNULIB_MBRLEN
+GNULIB_MBRTOWC
+GNULIB_MBSINIT
+GNULIB_WCTOB
+GNULIB_BTOWC
+LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE
+LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE
+LIBUNISTRING_UNIWIDTH_H
+LIBUNISTRING_UNITYPES_H
+WINDOWS_STAT_INODES
+WINDOWS_64_BIT_OFF_T
+NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H
+NEXT_SYS_TYPES_H
+NEXT_AS_FIRST_DIRECTIVE_STRING_H
+NEXT_STRING_H
+NEXT_AS_FIRST_DIRECTIVE_STDIO_H
+NEXT_STDIO_H
+GL_GENERATE_STDINT_H_FALSE
+GL_GENERATE_STDINT_H_TRUE
+STDINT_H
+HAVE_SYS_INTTYPES_H
+HAVE_SYS_BITYPES_H
+HAVE_C99_STDINT_H
+WINT_T_SUFFIX
+WCHAR_T_SUFFIX
+SIG_ATOMIC_T_SUFFIX
+SIZE_T_SUFFIX
+PTRDIFF_T_SUFFIX
+HAVE_SIGNED_WINT_T
+HAVE_SIGNED_WCHAR_T
+HAVE_SIGNED_SIG_ATOMIC_T
+BITSIZEOF_WINT_T
+BITSIZEOF_WCHAR_T
+BITSIZEOF_SIG_ATOMIC_T
+BITSIZEOF_SIZE_T
+BITSIZEOF_PTRDIFF_T
+HAVE_STDINT_H
+NEXT_AS_FIRST_DIRECTIVE_STDINT_H
+NEXT_STDINT_H
+HAVE_SYS_TYPES_H
+HAVE_INTTYPES_H
+HAVE_WCHAR_H
+HAVE_UNSIGNED_LONG_LONG_INT
+HAVE_LONG_LONG_INT
+NEXT_AS_FIRST_DIRECTIVE_STDDEF_H
+NEXT_STDDEF_H
+GL_GENERATE_STDDEF_H_FALSE
+GL_GENERATE_STDDEF_H_TRUE
+STDDEF_H
+HAVE_WCHAR_T
+HAVE_MAX_ALIGN_T
+REPLACE_NULL
+UNDEFINE_STRTOK_R
+REPLACE_STRSIGNAL
+REPLACE_STRERROR_R
+REPLACE_STRERROR
+REPLACE_STRTOK_R
+REPLACE_STRCASESTR
+REPLACE_STRSTR
+REPLACE_STRNLEN
+REPLACE_STRNDUP
+REPLACE_STRNCAT
+REPLACE_STRDUP
+REPLACE_STRCHRNUL
+REPLACE_STPNCPY
+REPLACE_MEMMEM
+REPLACE_MEMCHR
+HAVE_STRVERSCMP
+HAVE_DECL_STRSIGNAL
+HAVE_DECL_STRERROR_R
+HAVE_DECL_STRTOK_R
+HAVE_STRCASESTR
+HAVE_STRSEP
+HAVE_STRPBRK
+HAVE_DECL_STRNLEN
+HAVE_DECL_STRNDUP
+HAVE_DECL_STRDUP
+HAVE_STRCHRNUL
+HAVE_STPNCPY
+HAVE_STPCPY
+HAVE_RAWMEMCHR
+HAVE_DECL_MEMRCHR
+HAVE_MEMPCPY
+HAVE_DECL_MEMMEM
+HAVE_MEMCHR
+HAVE_FFSLL
+HAVE_FFSL
+HAVE_EXPLICIT_BZERO
+HAVE_MBSLEN
+GNULIB_STRVERSCMP
+GNULIB_STRSIGNAL
+GNULIB_STRERROR_R
+GNULIB_STRERROR
+GNULIB_MBSTOK_R
+GNULIB_MBSSEP
+GNULIB_MBSSPN
+GNULIB_MBSPBRK
+GNULIB_MBSCSPN
+GNULIB_MBSCASESTR
+GNULIB_MBSPCASECMP
+GNULIB_MBSNCASECMP
+GNULIB_MBSCASECMP
+GNULIB_MBSSTR
+GNULIB_MBSRCHR
+GNULIB_MBSCHR
+GNULIB_MBSNLEN
+GNULIB_MBSLEN
+GNULIB_STRTOK_R
+GNULIB_STRCASESTR
+GNULIB_STRSTR
+GNULIB_STRSEP
+GNULIB_STRPBRK
+GNULIB_STRNLEN
+GNULIB_STRNDUP
+GNULIB_STRNCAT
+GNULIB_STRDUP
+GNULIB_STRCHRNUL
+GNULIB_STPNCPY
+GNULIB_STPCPY
+GNULIB_RAWMEMCHR
+GNULIB_MEMRCHR
+GNULIB_MEMPCPY
+GNULIB_MEMMEM
+GNULIB_MEMCHR
+GNULIB_FFSLL
+GNULIB_FFSL
+GNULIB_EXPLICIT_BZERO
+NEXT_AS_FIRST_DIRECTIVE_MATH_H
+NEXT_MATH_H
+LOCALCHARSET_TESTS_ENVIRONMENT
+GLIBC21
+GL_GENERATE_LIMITS_H_FALSE
+GL_GENERATE_LIMITS_H_TRUE
+LIMITS_H
+NEXT_AS_FIRST_DIRECTIVE_LIMITS_H
+NEXT_LIMITS_H
+HOST_CPU_C_ABI
+HOST_CPU
+REPLACE_TRUNCL
+REPLACE_TRUNCF
+REPLACE_TRUNC
+REPLACE_TANHF
+REPLACE_TANF
+REPLACE_SQRTL
+REPLACE_SQRTF
+REPLACE_SINHF
+REPLACE_SINF
+REPLACE_SIGNBIT_USING_GCC
+REPLACE_SIGNBIT
+REPLACE_ROUNDL
+REPLACE_ROUNDF
+REPLACE_ROUND
+REPLACE_REMAINDERL
+REPLACE_REMAINDERF
+REPLACE_REMAINDER
+REPLACE_NAN
+REPLACE_MODFL
+REPLACE_MODFF
+REPLACE_MODF
+REPLACE_LOGBL
+REPLACE_LOGBF
+REPLACE_LOGB
+REPLACE_LOG2L
+REPLACE_LOG2F
+REPLACE_LOG2
+REPLACE_LOG1PL
+REPLACE_LOG1PF
+REPLACE_LOG1P
+REPLACE_LOG10L
+REPLACE_LOG10F
+REPLACE_LOG10
+REPLACE_LOGL
+REPLACE_LOGF
+REPLACE_LOG
+REPLACE_LDEXPL
+REPLACE_ISNAN
+REPLACE_ISINF
+REPLACE_ISFINITE
+REPLACE_ILOGBL
+REPLACE_ILOGBF
+REPLACE_ILOGB
+REPLACE_HYPOTL
+REPLACE_HYPOTF
+REPLACE_HYPOT
+REPLACE_HUGE_VAL
+REPLACE_FREXPL
+REPLACE_FREXP
+REPLACE_FREXPF
+REPLACE_FMODL
+REPLACE_FMODF
+REPLACE_FMOD
+REPLACE_FMAL
+REPLACE_FMAF
+REPLACE_FMA
+REPLACE_FLOORL
+REPLACE_FLOORF
+REPLACE_FLOOR
+REPLACE_FABSL
+REPLACE_EXP2L
+REPLACE_EXP2
+REPLACE_EXPM1F
+REPLACE_EXPM1
+REPLACE_EXPF
+REPLACE_COSHF
+REPLACE_COSF
+REPLACE_CEILL
+REPLACE_CEILF
+REPLACE_CEIL
+REPLACE_CBRTL
+REPLACE_CBRTF
+REPLACE_ATAN2F
+REPLACE_ATANF
+REPLACE_ASINF
+REPLACE_ACOSF
+HAVE_DECL_TRUNCL
+HAVE_DECL_TRUNCF
+HAVE_DECL_TRUNC
+HAVE_DECL_TANL
+HAVE_DECL_SQRTL
+HAVE_DECL_SINL
+HAVE_DECL_ROUNDL
+HAVE_DECL_ROUNDF
+HAVE_DECL_ROUND
+HAVE_DECL_RINTF
+HAVE_DECL_REMAINDERL
+HAVE_DECL_REMAINDER
+HAVE_DECL_LOGB
+HAVE_DECL_LOG2L
+HAVE_DECL_LOG2F
+HAVE_DECL_LOG2
+HAVE_DECL_LOG10L
+HAVE_DECL_LOGL
+HAVE_DECL_LDEXPL
+HAVE_DECL_FREXPL
+HAVE_DECL_FLOORL
+HAVE_DECL_FLOORF
+HAVE_DECL_EXPM1L
+HAVE_DECL_EXP2L
+HAVE_DECL_EXP2F
+HAVE_DECL_EXP2
+HAVE_DECL_EXPL
+HAVE_DECL_COSL
+HAVE_DECL_COPYSIGNF
+HAVE_DECL_CEILL
+HAVE_DECL_CEILF
+HAVE_DECL_CBRTL
+HAVE_DECL_CBRTF
+HAVE_DECL_ATANL
+HAVE_DECL_ASINL
+HAVE_DECL_ACOSL
+HAVE_TANHF
+HAVE_TANL
+HAVE_TANF
+HAVE_SQRTL
+HAVE_SQRTF
+HAVE_SINHF
+HAVE_SINL
+HAVE_SINF
+HAVE_RINTL
+HAVE_RINT
+HAVE_REMAINDERF
+HAVE_REMAINDER
+HAVE_POWF
+HAVE_MODFL
+HAVE_MODFF
+HAVE_LOGBL
+HAVE_LOGBF
+HAVE_LOG1PL
+HAVE_LOG1PF
+HAVE_LOG1P
+HAVE_LOG10L
+HAVE_LOG10F
+HAVE_LOGL
+HAVE_LOGF
+HAVE_LDEXPF
+HAVE_ISNANL
+HAVE_ISNAND
+HAVE_ISNANF
+HAVE_ILOGBL
+HAVE_ILOGBF
+HAVE_ILOGB
+HAVE_HYPOTL
+HAVE_HYPOTF
+HAVE_FREXPF
+HAVE_FMODL
+HAVE_FMODF
+HAVE_FMAL
+HAVE_FMAF
+HAVE_FMA
+HAVE_FABSL
+HAVE_FABSF
+HAVE_EXPM1F
+HAVE_EXPM1
+HAVE_EXPL
+HAVE_EXPF
+HAVE_COSHF
+HAVE_COSL
+HAVE_COSF
+HAVE_COPYSIGNL
+HAVE_COPYSIGN
+HAVE_CBRTL
+HAVE_CBRTF
+HAVE_CBRT
+HAVE_ATAN2F
+HAVE_ATANL
+HAVE_ATANF
+HAVE_ASINL
+HAVE_ASINF
+HAVE_ACOSL
+HAVE_ACOSF
+GNULIB_TRUNCL
+GNULIB_TRUNCF
+GNULIB_TRUNC
+GNULIB_TANHF
+GNULIB_TANL
+GNULIB_TANF
+GNULIB_SQRTL
+GNULIB_SQRTF
+GNULIB_SINHF
+GNULIB_SINL
+GNULIB_SINF
+GNULIB_SIGNBIT
+GNULIB_ROUNDL
+GNULIB_ROUNDF
+GNULIB_ROUND
+GNULIB_RINTL
+GNULIB_RINTF
+GNULIB_RINT
+GNULIB_REMAINDERL
+GNULIB_REMAINDERF
+GNULIB_REMAINDER
+GNULIB_POWF
+GNULIB_MODFL
+GNULIB_MODFF
+GNULIB_MODF
+GNULIB_LOGBL
+GNULIB_LOGBF
+GNULIB_LOGB
+GNULIB_LOG2L
+GNULIB_LOG2F
+GNULIB_LOG2
+GNULIB_LOG1PL
+GNULIB_LOG1PF
+GNULIB_LOG1P
+GNULIB_LOG10L
+GNULIB_LOG10F
+GNULIB_LOG10
+GNULIB_LOGL
+GNULIB_LOGF
+GNULIB_LOG
+GNULIB_LDEXPL
+GNULIB_LDEXPF
+GNULIB_ISNANL
+GNULIB_ISNAND
+GNULIB_ISNANF
+GNULIB_ISNAN
+GNULIB_ISINF
+GNULIB_ISFINITE
+GNULIB_ILOGBL
+GNULIB_ILOGBF
+GNULIB_ILOGB
+GNULIB_HYPOTL
+GNULIB_HYPOTF
+GNULIB_HYPOT
+GNULIB_FREXPL
+GNULIB_FREXP
+GNULIB_FREXPF
+GNULIB_FMODL
+GNULIB_FMODF
+GNULIB_FMOD
+GNULIB_FMAL
+GNULIB_FMAF
+GNULIB_FMA
+GNULIB_FLOORL
+GNULIB_FLOORF
+GNULIB_FLOOR
+GNULIB_FABSL
+GNULIB_FABSF
+GNULIB_EXPM1L
+GNULIB_EXPM1F
+GNULIB_EXPM1
+GNULIB_EXP2L
+GNULIB_EXP2F
+GNULIB_EXP2
+GNULIB_EXPL
+GNULIB_EXPF
+GNULIB_COSHF
+GNULIB_COSL
+GNULIB_COSF
+GNULIB_COPYSIGNL
+GNULIB_COPYSIGNF
+GNULIB_COPYSIGN
+GNULIB_CEILL
+GNULIB_CEILF
+GNULIB_CEIL
+GNULIB_CBRTL
+GNULIB_CBRTF
+GNULIB_CBRT
+GNULIB_ATAN2F
+GNULIB_ATANL
+GNULIB_ATANF
+GNULIB_ASINL
+GNULIB_ASINF
+GNULIB_ACOSL
+GNULIB_ACOSF
+REPLACE_VSPRINTF
+REPLACE_VSNPRINTF
+REPLACE_VPRINTF
+REPLACE_VFPRINTF
+REPLACE_VDPRINTF
+REPLACE_VASPRINTF
+REPLACE_TMPFILE
+REPLACE_STDIO_WRITE_FUNCS
+REPLACE_STDIO_READ_FUNCS
+REPLACE_SPRINTF
+REPLACE_SNPRINTF
+REPLACE_RENAMEAT
+REPLACE_RENAME
+REPLACE_REMOVE
+REPLACE_PRINTF
+REPLACE_POPEN
+REPLACE_PERROR
+REPLACE_OBSTACK_PRINTF
+REPLACE_GETLINE
+REPLACE_GETDELIM
+REPLACE_FTELLO
+REPLACE_FTELL
+REPLACE_FSEEKO
+REPLACE_FSEEK
+REPLACE_FREOPEN
+REPLACE_FPURGE
+REPLACE_FPRINTF
+REPLACE_FOPEN
+REPLACE_FFLUSH
+REPLACE_FDOPEN
+REPLACE_FCLOSE
+REPLACE_DPRINTF
+HAVE_VDPRINTF
+HAVE_VASPRINTF
+HAVE_RENAMEAT
+HAVE_POPEN
+HAVE_PCLOSE
+HAVE_FTELLO
+HAVE_FSEEKO
+HAVE_DPRINTF
+HAVE_DECL_VSNPRINTF
+HAVE_DECL_SNPRINTF
+HAVE_DECL_OBSTACK_PRINTF
+HAVE_DECL_GETLINE
+HAVE_DECL_GETDELIM
+HAVE_DECL_FTELLO
+HAVE_DECL_FSEEKO
+HAVE_DECL_FPURGE
+GNULIB_VSPRINTF_POSIX
+GNULIB_VSNPRINTF
+GNULIB_VPRINTF_POSIX
+GNULIB_VPRINTF
+GNULIB_VFPRINTF_POSIX
+GNULIB_VFPRINTF
+GNULIB_VDPRINTF
+GNULIB_VSCANF
+GNULIB_VFSCANF
+GNULIB_VASPRINTF
+GNULIB_TMPFILE
+GNULIB_STDIO_H_SIGPIPE
+GNULIB_STDIO_H_NONBLOCKING
+GNULIB_SPRINTF_POSIX
+GNULIB_SNPRINTF
+GNULIB_SCANF
+GNULIB_RENAMEAT
+GNULIB_RENAME
+GNULIB_REMOVE
+GNULIB_PUTS
+GNULIB_PUTCHAR
+GNULIB_PUTC
+GNULIB_PRINTF_POSIX
+GNULIB_PRINTF
+GNULIB_POPEN
+GNULIB_PERROR
+GNULIB_PCLOSE
+GNULIB_OBSTACK_PRINTF_POSIX
+GNULIB_OBSTACK_PRINTF
+GNULIB_GETLINE
+GNULIB_GETDELIM
+GNULIB_GETCHAR
+GNULIB_GETC
+GNULIB_FWRITE
+GNULIB_FTELLO
+GNULIB_FTELL
+GNULIB_FSEEKO
+GNULIB_FSEEK
+GNULIB_FSCANF
+GNULIB_FREOPEN
+GNULIB_FREAD
+GNULIB_FPUTS
+GNULIB_FPUTC
+GNULIB_FPURGE
+GNULIB_FPRINTF_POSIX
+GNULIB_FPRINTF
+GNULIB_FOPEN
+GNULIB_FGETS
+GNULIB_FGETC
+GNULIB_FFLUSH
+GNULIB_FDOPEN
+GNULIB_FCLOSE
+GNULIB_DPRINTF
+HAVE_FEATURES_H
+GNULIB_OVERRIDES_WINT_T
+APPLE_UNIVERSAL_BUILD
+HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+REPLACE_ITOLD
+GL_GENERATE_FLOAT_H_FALSE
+GL_GENERATE_FLOAT_H_TRUE
+FLOAT_H
+NEXT_AS_FIRST_DIRECTIVE_FLOAT_H
+NEXT_FLOAT_H
+EOVERFLOW_VALUE
+EOVERFLOW_HIDDEN
+ENOLINK_VALUE
+ENOLINK_HIDDEN
+EMULTIHOP_VALUE
+EMULTIHOP_HIDDEN
+GL_GENERATE_ERRNO_H_FALSE
+GL_GENERATE_ERRNO_H_TRUE
+ERRNO_H
+NEXT_AS_FIRST_DIRECTIVE_ERRNO_H
+NEXT_ERRNO_H
+PRAGMA_COLUMNS
+PRAGMA_SYSTEM_HEADER
+INCLUDE_NEXT_AS_FIRST_DIRECTIVE
+INCLUDE_NEXT
+GL_GENERATE_ALLOCA_H_FALSE
+GL_GENERATE_ALLOCA_H_TRUE
+ALLOCA_H
+ALLOCA
+GL_COND_LIBTOOL_FALSE
+GL_COND_LIBTOOL_TRUE
+host_os
+host_vendor
+host_cpu
+host
+build_os
+build_vendor
+build_cpu
+build
+RANLIB
+ARFLAGS
+AR
+am__fastdepCXX_FALSE
+am__fastdepCXX_TRUE
+CXXDEPMODE
 ac_ct_CXX
 CXXFLAGS
 CXX
+AM_BACKSLASH
+AM_DEFAULT_VERBOSITY
+AM_DEFAULT_V
+AM_V
+am__fastdepCC_FALSE
+am__fastdepCC_TRUE
+CCDEPMODE
+am__nodep
+AMDEPBACKSLASH
+AMDEP_FALSE
+AMDEP_TRUE
+am__include
+DEPDIR
+am__untar
+am__tar
+AMTAR
+am__leading_dot
+SET_MAKE
+AWK
+mkdir_p
+MKDIR_P
+INSTALL_STRIP_PROGRAM
+STRIP
+install_sh
+MAKEINFO
+AUTOHEADER
+AUTOMAKE
+AUTOCONF
+ACLOCAL
+VERSION
+PACKAGE
+CYGPATH_W
+am__isrc
+INSTALL_DATA
+INSTALL_SCRIPT
+INSTALL_PROGRAM
 EGREP
 GREP
 CPP
@@ -728,6 +1462,7 @@ CPPFLAGS
 LDFLAGS
 CFLAGS
 CC
+SHORT_VERSION
 target_alias
 host_alias
 build_alias
@@ -770,17 +1505,23 @@ referdir
 grog_dir
 gpinyin_dir
 glilypond_dir
-libprogramdir'
+libprogramdir
+am__quote'
 ac_subst_files=''
 ac_user_opts='
 enable_option_checking
+enable_dependency_tracking
+enable_silent_rules
 with_x
 with_appresdir
 with_grofferdir
 with_doc
+with_uchardet
 with_gnu_ld
 enable_rpath
 with_libiconv_prefix
+with_urw_fonts_dir
+with_compatibility_wrappers
 with_alt_gs
 with_gs
 with_alt_awk
@@ -799,6 +1540,11 @@ CXX
 CXXFLAGS
 CCC
 XMKMF
+PKG_CONFIG
+PKG_CONFIG_PATH
+PKG_CONFIG_LIBDIR
+UCHARDET_CFLAGS
+UCHARDET_LIBS
 CXXCPP'
 
 
@@ -1340,7 +2086,7 @@ if test "$ac_init_help" = "long"; then
   # Omit some internal or obsolete options to make the list less imposing.
   # This message is too long to be a string in the A/UX 3.1 sh.
   cat <<_ACEOF
-\`configure' configures groff 1.22.3 to adapt to many kinds of systems.
+\`configure' configures GNU Troff 1.22.4 to adapt to many kinds of systems.
 
 Usage: $0 [OPTION]... [VAR=VALUE]...
 
@@ -1388,7 +2134,7 @@ Fine tuning of the installation directories:
   --infodir=DIR           info documentation [DATAROOTDIR/info]
   --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
   --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/groff-1.22.3]
+  --docdir=DIR            documentation root [DATAROOTDIR/doc/groff]
   --htmldir=DIR           html documentation [DOCDIR]
   --dvidir=DIR            dvi documentation [DOCDIR]
   --pdfdir=DIR            pdf documentation [DOCDIR]
@@ -1397,6 +2143,11 @@ _ACEOF
 
   cat <<\_ACEOF
 
+Program names:
+  --program-prefix=PREFIX            prepend PREFIX to installed program names
+  --program-suffix=SUFFIX            append SUFFIX to installed program names
+  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
+
 X features:
   --x-includes=DIR    X include files are in DIR
   --x-libraries=DIR   X library files are in DIR
@@ -1409,7 +2160,7 @@ fi
 
 if test -n "$ac_init_help"; then
   case $ac_init_help in
-     short | recursive ) echo "Configuration of groff 1.22.3:";;
+     short | recursive ) echo "Configuration of GNU Troff 1.22.4:";;
    esac
   cat <<\_ACEOF
 
@@ -1417,6 +2168,12 @@ Optional Features:
   --disable-option-checking  ignore unrecognized --enable/--with options
   --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
   --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
+  --enable-dependency-tracking
+                          do not reject slow dependency extractors
+  --disable-dependency-tracking
+                          speeds up one-time build
+  --enable-silent-rules   less verbose build output (undo: "make V=1")
+  --disable-silent-rules  verbose build output (undo: "make V=0")
   --disable-rpath         do not hardcode runtime library paths
 
 Optional Packages:
@@ -1426,13 +2183,38 @@ Optional Packages:
   --with-appresdir=DIR    X11 application resource files
   --with-grofferdir=DIR   groffer files location
   --with-doc[=TYPE]       choose which manuals (beside man pages) are
-                          desirable. TYPE can be `yes' or `no', or a
-                          comma-separated list of one or multiple of `html',
-                          `info', `other', `pdf', and `examples', to restrict
+                          desirable. TYPE can be 'yes' or 'no', or a
+                          comma-separated list of one or multiple of 'html',
+                          'info', 'other', 'pdf', and 'examples', to restrict
                           what is produced
+  --with-uchardet         Build 'preconv' with uchardet library for file
+                          encoding automatic detection [=auto|no|yes]
   --with-gnu-ld           assume the C compiler uses GNU ld [default=no]
   --with-libiconv-prefix[=DIR]  search for libiconv in DIR/include and DIR/lib
   --without-libiconv-prefix     don't search for libiconv in includedir and libdir
+  --with-urw-fonts-dir=DIR
+                          Search for URW fonts in this directory
+  --with-compatibility-wrappers[=VALUE]
+                          choose whether and how groff compatibility wrappers
+                          for vendor-provided non-GNU macro sets are
+                          installed. VALUE can be 'check', 'yes', 'no' or
+                          'manual'. 'check' (the default) checks for the
+                          existence of vendor-provided non-GNU macro sets, and
+                          implements the 'yes' or 'no' option accordingly.
+                          'yes' generates compatibility wrappers for
+                          vendor-provided non-GNU macro sets to allow their
+                          use with groff-based tools. The compatibility
+                          wrappers are installed with the original macro set
+                          name, while groff implementation of these macro sets
+                          are installed with a 'g' prefix. Thus use of the
+                          groff implementation of these macro sets requires
+                          use of the '-mg<macro>' option (example: -mgan).
+                          'no' only installs the groff implementation of macro
+                          sets. 'manual' generates compatibility wrappers for
+                          vendor-provided non-GNU macro sets as '<macro>-os'.
+                          Use of these groff compatibility wrappers (for
+                          vendor-provided non-GNU macro sets) requires the use
+                          of the '-m<macro>-os' option (example: -man-os).
   --with-alt-gs=LIST      alternative names for ghostscript executable
   --with-gs=PROG          actual [/path/]name of ghostscript executable
   --with-alt-awk=LIST     alternative names for awk executable
@@ -1450,12 +2232,23 @@ Some influential environment variables:
   CXX         C++ compiler command
   CXXFLAGS    C++ compiler flags
   XMKMF       Path to xmkmf, Makefile generator for X Window System
+  PKG_CONFIG  path to pkg-config utility
+  PKG_CONFIG_PATH
+              directories to add to pkg-config's search path
+  PKG_CONFIG_LIBDIR
+              path overriding pkg-config's built-in search path
+  UCHARDET_CFLAGS
+              C compiler flags for UCHARDET, overriding pkg-config
+  UCHARDET_LIBS
+              linker flags for UCHARDET, overriding pkg-config
   CXXCPP      C++ preprocessor
 
 Use these variables to override the choices made by `configure' or to help
 it to find libraries and programs with nonstandard names/locations.
 
-Report bugs to <bug-groff@gnu.org>.
+Report bugs to <http://savannah.gnu.org/bugs/?group=groff>.
+GNU Troff home page: <http://www.gnu.org/software/groff/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>.
 _ACEOF
 ac_status=$?
 fi
@@ -1518,7 +2311,7 @@ fi
 test -n "$ac_init_help" && exit $ac_status
 if $ac_init_version; then
   cat <<\_ACEOF
-groff configure 1.22.3
+GNU Troff configure 1.22.4
 generated by GNU Autoconf 2.69
 
 Copyright (C) 2012 Free Software Foundation, Inc.
@@ -1677,9 +2470,9 @@ $as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
 $as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
 $as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-( $as_echo "## -------------------------------- ##
-## Report this to bug-groff@gnu.org ##
-## -------------------------------- ##"
+( $as_echo "## -------------------------------------------------------- ##
+## Report this to http://savannah.gnu.org/bugs/?group=groff ##
+## -------------------------------------------------------- ##"
      ) | sed "s/^/$as_me: WARNING:     /" >&2
     ;;
 esac
@@ -1809,93 +2602,59 @@ fi
 
 } # ac_fn_cxx_try_compile
 
-# ac_fn_cxx_try_run LINENO
-# ------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_cxx_try_run ()
+# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
+# -------------------------------------------
+# Tests whether TYPE exists after having included INCLUDES, setting cache
+# variable VAR accordingly.
+ac_fn_c_check_type ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
+$as_echo_n "checking for $2... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_run
-
-# ac_fn_cxx_try_link LINENO
-# -------------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_link ()
+  eval "$3=no"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
 {
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-        test -z "$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-        test "$cross_compiling" = yes ||
-        test -x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
+if (sizeof ($2))
+        return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+if (sizeof (($2)))
+           return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
 
-       ac_retval=1
+else
+  eval "$3=yes"
 fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
   eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
 
-} # ac_fn_cxx_try_link
+} # ac_fn_c_check_type
 
 # ac_fn_c_try_link LINENO
 # -----------------------
@@ -2010,56 +2769,59 @@ $as_echo "$ac_res" >&6; }
 
 } # ac_fn_c_check_func
 
-# ac_fn_cxx_try_cpp LINENO
-# ------------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_cxx_try_cpp ()
+# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
+# --------------------------------------------
+# Tries to find the compile-time value of EXPR in a program that includes
+# INCLUDES, setting VAR accordingly. Returns whether the value could be
+# computed
+ac_fn_c_compute_int ()
 {
   as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } > conftest.i && {
-        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
-        test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_cxx_try_cpp
+  if test "$cross_compiling" = yes; then
+    # Depending upon the size, compute the lo and hi bounds.
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= 0)];
+test_array [0] = 0;
+return test_array [0];
 
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=0 ac_mid=0
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
 {
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid; break
+else
+  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
+                       if test $ac_lo -le $ac_mid; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 int
 main ()
 {
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
+static int test_array [1 - 2 * !(($2) < 0)];
+test_array [0] = 0;
+return test_array [0];
 
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
+  ac_hi=-1 ac_mid=-1
+  while :; do
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) >= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_lo=$ac_mid; break
 else
-  eval "$3=no"
+  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
+                       if test $ac_mid -le $ac_hi; then
+                         ac_lo= ac_hi=
+                         break
+                       fi
+                       as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  done
+else
+  ac_lo= ac_hi=
 fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+# Binary search between lo and hi bounds.
+while test "x$ac_lo" != "x$ac_hi"; do
+  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+static int test_array [1 - 2 * !(($2) <= $ac_mid)];
+test_array [0] = 0;
+return test_array [0];
 
-} # ac_fn_c_check_decl
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_hi=$ac_mid
+else
+  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+done
+case $ac_lo in #((
+?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
+'') ac_retval=1 ;;
+esac
+  else
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+static long int longval () { return $2; }
+static unsigned long int ulongval () { return $2; }
+#include <stdio.h>
+#include <stdlib.h>
+int
+main ()
+{
+
+  FILE *f = fopen ("conftest.val", "w");
+  if (! f)
+    return 1;
+  if (($2) < 0)
+    {
+      long int i = longval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%ld", i);
+    }
+  else
+    {
+      unsigned long int i = ulongval ();
+      if (i != ($2))
+       return 1;
+      fprintf (f, "%lu", i);
+    }
+  /* Do not output a trailing newline, as this causes \r\n confusion
+     on some platforms.  */
+  return ferror (f) || fclose (f) != 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
+else
+  ac_retval=1
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+rm -f conftest.val
+
+  fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_c_compute_int
+
+# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
+# ---------------------------------------------
+# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
+# accordingly.
+ac_fn_c_check_decl ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  as_decl_name=`echo $2|sed 's/ *(.*//'`
+  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
+$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
+if eval \${$3+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$4
+int
+main ()
+{
+#ifndef $as_decl_name
+#ifdef __cplusplus
+  (void) $as_decl_use;
+#else
+  (void) $as_decl_name;
+#endif
+#endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval "$3=yes"
+else
+  eval "$3=no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+eval ac_res=\$$3
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+
+} # ac_fn_c_check_decl
+
+# ac_fn_cxx_try_run LINENO
+# ------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
+# that executables *can* be run.
+ac_fn_cxx_try_run ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
+  { { case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_try") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: program exited with status $ac_status" >&5
+       $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=$ac_status
+fi
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_run
+
+# ac_fn_cxx_try_link LINENO
+# -------------------------
+# Try to link conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_link ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  rm -f conftest.$ac_objext conftest$ac_exeext
+  if { { ac_try="$ac_link"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_link") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && {
+        test -z "$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       } && test -s conftest$ac_exeext && {
+        test "$cross_compiling" = yes ||
+        test -x conftest$ac_exeext
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+       ac_retval=1
+fi
+  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
+  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
+  # interfere with the next link command; also delete a directory that is
+  # left behind by Apple's compiler.  We do this before executing the actions.
+  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_link
+
+# ac_fn_cxx_try_cpp LINENO
+# ------------------------
+# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
+ac_fn_cxx_try_cpp ()
+{
+  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
+  if { { ac_try="$ac_cpp conftest.$ac_ext"
+case "(($ac_try" in
+  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
+  *) ac_try_echo=$ac_try;;
+esac
+eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
+$as_echo "$ac_try_echo"; } >&5
+  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
+  ac_status=$?
+  if test -s conftest.err; then
+    grep -v '^ *+' conftest.err >conftest.er1
+    cat conftest.er1 >&5
+    mv -f conftest.er1 conftest.err
+  fi
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } > conftest.i && {
+        test -z "$ac_cxx_preproc_warn_flag$ac_cxx_werror_flag" ||
+        test ! -s conftest.err
+       }; then :
+  ac_retval=0
+else
+  $as_echo "$as_me: failed program was:" >&5
+sed 's/^/| /' conftest.$ac_ext >&5
+
+    ac_retval=1
+fi
+  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
+  as_fn_set_status $ac_retval
+
+} # ac_fn_cxx_try_cpp
 cat >config.log <<_ACEOF
 This file contains any messages produced by compilers while
 running configure, to aid debugging if configure makes a mistake.
 
-It was created by groff $as_me 1.22.3, which was
+It was created by GNU Troff $as_me 1.22.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   $ $0 $@
@@ -2376,10 +3406,25 @@ $as_echo "$as_me: creating cache $cache_file" >&6;}
   >$cache_file
 fi
 
-as_fn_append ac_header_list " stdlib.h"
+as_fn_append ac_func_list " vasnprintf"
+as_fn_append ac_header_list " features.h"
+as_fn_append ac_func_list " snprintf"
+as_fn_append ac_func_list " __fseterr"
+as_fn_append ac_header_list " limits.h"
 as_fn_append ac_header_list " unistd.h"
-as_fn_append ac_header_list " sys/param.h"
 as_fn_append ac_func_list " symlink"
+as_fn_append ac_header_list " math.h"
+as_fn_append ac_header_list " sys/mman.h"
+as_fn_append ac_func_list " mprotect"
+gl_printf_safe=yes
+as_fn_append ac_header_list " wchar.h"
+as_fn_append ac_header_list " stdint.h"
+as_fn_append ac_header_list " crtdefs.h"
+as_fn_append ac_func_list " iswcntrl"
+as_fn_append ac_header_list " wctype.h"
+as_fn_append ac_func_list " wcwidth"
+as_fn_append ac_header_list " stdlib.h"
+as_fn_append ac_header_list " sys/param.h"
 # Check that the precious variables saved in the cache have kept the same
 # value.
 ac_cache_corrupted=false
@@ -2450,10 +3495,52 @@ ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
 
 
+
+# SHORT_VERSION contains only the number of REVISION before the first '.',
+# e.g. if REVISION is '3.real.434-5aafd' then SHORT_VERSION is 'x.yy.3',
+# where x and yy are MAJOR_VERSION and MINOR_VERSION, respectively.
+SHORT_VERSION=1.22.4
+
+
+# Directories where the helper scripts should be found. This must be consistent
+# with the variable build_aux in bootstrap.conf
+ac_aux_dir=
+for ac_dir in build-aux "$srcdir"/build-aux; do
+  if test -f "$ac_dir/install-sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install-sh -c"
+    break
+  elif test -f "$ac_dir/install.sh"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/install.sh -c"
+    break
+  elif test -f "$ac_dir/shtool"; then
+    ac_aux_dir=$ac_dir
+    ac_install_sh="$ac_aux_dir/shtool install -c"
+    break
+  fi
+done
+if test -z "$ac_aux_dir"; then
+  as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5
+fi
+
+# These three variables are undocumented and unsupported,
+# and are intended to be withdrawn in a future Autoconf release.
+# They can cause serious problems if a builder's source tree is in a directory
+# whose full name contains unusual characters.
+ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
+ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
+ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
+
+
+
 ac_config_headers="$ac_config_headers src/include/config.h:src/include/config.hin"
 
 
 
+# Expand $ac_aux_dir to an absolute path.
+am_aux_dir=`cd "$ac_aux_dir" && pwd`
+
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -3243,19 +4330,78 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-
 ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
+$as_echo_n "checking how to run the C preprocessor... " >&6; }
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+  CPP=
+fi
+if test -z "$CPP"; then
   if ${ac_cv_prog_CPP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
@@ -3660,6 +4806,9 @@ $as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
 
 $as_echo "#define _MINIX 1" >>confdefs.h
 
+
+$as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h
+
   fi
 
 
@@ -3695,30 +4844,297 @@ $as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
 
   $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
 
+  $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h
+
   $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
 
+  $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h
+
+  $as_echo "#define _OPENBSD_SOURCE 1" >>confdefs.h
+
   $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
 
+  $as_echo "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h
+
+  $as_echo "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h
+
   $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
+$as_echo_n "checking whether _XOPEN_SOURCE should be defined... " >&6; }
+if ${ac_cv_should_define__xopen_source+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_should_define__xopen_source=no
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+          #include <wchar.h>
+          mbstate_t x;
+int
+main ()
+{
 
-# checks for programs
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+             #define _XOPEN_SOURCE 500
+             #include <wchar.h>
+             mbstate_t x;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_should_define__xopen_source=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
+$as_echo "$ac_cv_should_define__xopen_source" >&6; }
+  test $ac_cv_should_define__xopen_source = yes &&
+    $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h
+
+  $as_echo "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h
+
+
+
+am__api_version='1.16'
+
+# Find a good install program.  We prefer a C program (faster),
+# so one script is as good as another.  But avoid the broken or
+# incompatible versions:
+# SysV /etc/install, /usr/sbin/install
+# SunOS /usr/etc/install
+# IRIX /sbin/install
+# AIX /bin/install
+# AmigaOS /C/install, which installs bootblocks on floppy discs
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
+# AFS /usr/afsws/bin/install, which mishandles nonexistent args
+# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
+# OS/2's system install, which has a completely different semantic
+# ./install, which can be erroneously created by make from ./install.sh.
+# Reject install programs that cannot install multiple files.
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
+$as_echo_n "checking for a BSD-compatible install... " >&6; }
+if test -z "$INSTALL"; then
+if ${ac_cv_path_install+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    # Account for people who put trailing slashes in PATH elements.
+case $as_dir/ in #((
+  ./ | .// | /[cC]/* | \
+  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
+  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
+  /usr/ucb/* ) ;;
+  *)
+    # OSF1 and SCO ODT 3.0 have their own names for install.
+    # Don't use installbsd from OSF since it installs stuff as root
+    # by default.
+    for ac_prog in ginstall scoinst install; do
+      for ac_exec_ext in '' $ac_executable_extensions; do
+       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
+         if test $ac_prog = install &&
+           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # AIX install.  It has an incompatible calling convention.
+           :
+         elif test $ac_prog = install &&
+           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
+           # program-specific install script used by HP pwplus--don't use.
+           :
+         else
+           rm -rf conftest.one conftest.two conftest.dir
+           echo one > conftest.one
+           echo two > conftest.two
+           mkdir conftest.dir
+           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
+             test -s conftest.one && test -s conftest.two &&
+             test -s conftest.dir/conftest.one &&
+             test -s conftest.dir/conftest.two
+           then
+             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
+             break 3
+           fi
+         fi
+       fi
+      done
+    done
+    ;;
+esac
+
+  done
+IFS=$as_save_IFS
+
+rm -rf conftest.one conftest.two conftest.dir
+
+fi
+  if test "${ac_cv_path_install+set}" = set; then
+    INSTALL=$ac_cv_path_install
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for INSTALL within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    INSTALL=$ac_install_sh
+  fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
+$as_echo "$INSTALL" >&6; }
+
+# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
+# It thinks the first close brace ends the variable substitution.
+test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
+
+test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
+$as_echo_n "checking whether build environment is sane... " >&6; }
+# Reject unsafe characters in $srcdir or the absolute working directory
+# name.  Accept space and tab only in the latter.
+am_lf='
+'
+case `pwd` in
+  *[\\\"\#\$\&\'\`$am_lf]*)
+    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
+esac
+case $srcdir in
+  *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
+    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
+esac
+
+# Do 'set' in a subshell so we don't clobber the current shell's
+# arguments.  Must try -L first in case configure is actually a
+# symlink; some systems play weird games with the mod time of symlinks
+# (eg FreeBSD returns the mod time of the symlink's containing
+# directory).
+if (
+   am_has_slept=no
+   for am_try in 1 2; do
+     echo "timestamp, slept: $am_has_slept" > conftest.file
+     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
+     if test "$*" = "X"; then
+       # -L didn't work.
+       set X `ls -t "$srcdir/configure" conftest.file`
+     fi
+     if test "$*" != "X $srcdir/configure conftest.file" \
+       && test "$*" != "X conftest.file $srcdir/configure"; then
+
+       # If neither matched, then we have a broken ls.  This can happen
+       # if, for instance, CONFIG_SHELL is bash and it inherits a
+       # broken ls alias from the environment.  This has actually
+       # happened.  Such a system could not be considered "sane".
+       as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
+  alias in your environment" "$LINENO" 5
+     fi
+     if test "$2" = conftest.file || test $am_try -eq 2; then
+       break
+     fi
+     # Just in case.
+     sleep 1
+     am_has_slept=yes
+   done
+   test "$2" = conftest.file
+   )
+then
+   # Ok.
+   :
+else
+   as_fn_error $? "newly created file is older than distributed files!
+Check your system clock" "$LINENO" 5
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+# If we didn't sleep, we still need to ensure time stamps of config.status and
+# generated files are strictly newer.
+am_sleep_pid=
+if grep 'slept: no' conftest.file >/dev/null 2>&1; then
+  ( sleep 1 ) &
+  am_sleep_pid=$!
+fi
+
+rm -f conftest.file
+
+test "$program_prefix" != NONE &&
+  program_transform_name="s&^&$program_prefix&;$program_transform_name"
+# Use a double $ so make ignores it.
+test "$program_suffix" != NONE &&
+  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
+# Double any \ or $.
+# By default was `s,x,x', remove it if useless.
+ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
+program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
+
+if test x"${MISSING+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
+  *)
+    MISSING="\${SHELL} $am_aux_dir/missing" ;;
+  esac
+fi
+# Use eval to expand $SHELL
+if eval "$MISSING --is-lightweight"; then
+  am_missing_run="$MISSING "
+else
+  am_missing_run=
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
+$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
+fi
+
+if test x"${install_sh+set}" != xset; then
+  case $am_aux_dir in
+  *\ * | *\    *)
+    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
+  *)
+    install_sh="\${SHELL} $am_aux_dir/install-sh"
+  esac
+fi
+
+# Installed binaries are usually stripped using 'strip' when the user
+# run "make install-strip".  However 'strip' might not be the right
+# tool to use in cross-compilation environments, therefore Automake
+# will honor the 'STRIP' environment variable to overrule this program.
+if test "$cross_compiling" != no; then
+  if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
+set dummy ${ac_tool_prefix}strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+if ${ac_cv_prog_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
+  if test -n "$STRIP"; then
+  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -3727,7 +5143,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
+    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3737,10 +5153,10 @@ IFS=$as_save_IFS
 
 fi
 fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+STRIP=$ac_cv_prog_STRIP
+if test -n "$STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
+$as_echo "$STRIP" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
@@ -3748,17 +5164,17 @@ fi
 
 
 fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
+if test -z "$ac_cv_prog_STRIP"; then
+  ac_ct_STRIP=$STRIP
+  # Extract the first word of "strip", so it can be a program name with args.
+set dummy strip; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
+if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+  if test -n "$ac_ct_STRIP"; then
+  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -3767,7 +5183,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
+    ac_cv_prog_ac_ct_STRIP="strip"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3777,17 +5193,17 @@ IFS=$as_save_IFS
 
 fi
 fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
+ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
+if test -n "$ac_ct_STRIP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
+$as_echo "$ac_ct_STRIP" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_CC" = x; then
-    CC=""
+  if test "x$ac_ct_STRIP" = x; then
+    STRIP=":"
   else
     case $cross_compiling:$ac_tool_warned in
 yes:)
@@ -3795,65 +5211,69 @@ yes:)
 $as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
 ac_tool_warned=yes ;;
 esac
-    CC=$ac_ct_CC
+    STRIP=$ac_ct_STRIP
   fi
 else
-  CC="$ac_cv_prog_CC"
+  STRIP="$ac_cv_prog_STRIP"
 fi
 
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+fi
+INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
+$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
+if test -z "$MKDIR_P"; then
+  if ${ac_cv_path_mkdir+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
+    for ac_prog in mkdir gmkdir; do
+        for ac_exec_ext in '' $ac_executable_extensions; do
+          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
+          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
+            'mkdir (GNU coreutils) '* | \
+            'mkdir (coreutils) '* | \
+            'mkdir (fileutils) '4.1*)
+              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
+              break 3;;
+          esac
+        done
+       done
   done
 IFS=$as_save_IFS
 
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
 fi
 
-
+  test -d ./--version && rmdir ./--version
+  if test "${ac_cv_path_mkdir+set}" = set; then
+    MKDIR_P="$ac_cv_path_mkdir -p"
+  else
+    # As a last resort, use the slow shell script.  Don't cache a
+    # value for MKDIR_P within a source directory, because that will
+    # break other packages using the cache if that directory is
+    # removed, or if the value is a relative name.
+    MKDIR_P="$ac_install_sh -d"
   fi
 fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
+$as_echo "$MKDIR_P" >&6; }
+
+for ac_prog in gawk mawk nawk awk
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
+if ${ac_cv_prog_AWK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
+  if test -n "$AWK"; then
+  ac_cv_prog_AWK="$AWK" # Let the user override the test.
 else
-  ac_prog_rejected=no
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
@@ -3861,11 +5281,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
+    ac_cv_prog_AWK="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3873,37 +5289,456 @@ done
   done
 IFS=$as_save_IFS
 
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
 fi
 fi
+AWK=$ac_cv_prog_AWK
+if test -n "$AWK"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
+$as_echo "$AWK" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
+
+
+  test -n "$AWK" && break
+done
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
+$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
+set x ${MAKE-make}
+ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
+if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat >conftest.make <<\_ACEOF
+SHELL = /bin/sh
+all:
+       @echo '@@@%%%=$(MAKE)=@@@%%%'
+_ACEOF
+# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+case `${MAKE-make} -f conftest.make 2>/dev/null` in
+  *@@@%%%=?*=@@@%%%*)
+    eval ac_cv_prog_make_${ac_make}_set=yes;;
+  *)
+    eval ac_cv_prog_make_${ac_make}_set=no;;
+esac
+rm -f conftest.make
+fi
+if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+  SET_MAKE=
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
+  SET_MAKE="MAKE=${MAKE-make}"
+fi
+
+rm -rf .tst 2>/dev/null
+mkdir .tst 2>/dev/null
+if test -d .tst; then
+  am__leading_dot=.
+else
+  am__leading_dot=_
+fi
+rmdir .tst 2>/dev/null
+
+DEPDIR="${am__leading_dot}deps"
+
+ac_config_commands="$ac_config_commands depfiles"
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5
+$as_echo_n "checking whether ${MAKE-make} supports the include directive... " >&6; }
+cat > confinc.mk << 'END'
+am__doit:
+       @echo this is the am__doit target >confinc.out
+.PHONY: am__doit
+END
+am__include="#"
+am__quote=
+# BSD make does it like this.
+echo '.include "confinc.mk" # ignored' > confmf.BSD
+# Other make implementations (GNU, Solaris 10, AIX) do it like this.
+echo 'include confinc.mk # ignored' > confmf.GNU
+_am_result=no
+for s in GNU BSD; do
+  { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5
+   (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); }
+  case $?:`cat confinc.out 2>/dev/null` in #(
+  '0:this is the am__doit target') :
+    case $s in #(
+  BSD) :
+    am__include='.include' am__quote='"' ;; #(
+  *) :
+    am__include='include' am__quote='' ;;
+esac ;; #(
+  *) :
+     ;;
+esac
+  if test "$am__include" != "#"; then
+    _am_result="yes ($s style)"
+    break
+  fi
+done
+rm -f confinc.* confmf.*
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5
+$as_echo "${_am_result}" >&6; }
+
+# Check whether --enable-dependency-tracking was given.
+if test "${enable_dependency_tracking+set}" = set; then :
+  enableval=$enable_dependency_tracking;
+fi
+
+if test "x$enable_dependency_tracking" != xno; then
+  am_depcomp="$ac_aux_dir/depcomp"
+  AMDEPBACKSLASH='\'
+  am__nodep='_no'
+fi
+ if test "x$enable_dependency_tracking" != xno; then
+  AMDEP_TRUE=
+  AMDEP_FALSE='#'
+else
+  AMDEP_TRUE='#'
+  AMDEP_FALSE=
 fi
 
 
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
 fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=1;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+       @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+if test "`cd $srcdir && pwd`" != "`pwd`"; then
+  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
+  # is not polluted with repeated "-I."
+  am__isrc=' -I$(srcdir)'
+  # test to see if srcdir already configured
+  if test -f $srcdir/config.status; then
+    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
+  fi
+fi
+
+# test whether we have cygpath
+if test -z "$CYGPATH_W"; then
+  if (cygpath --version) >/dev/null 2>/dev/null; then
+    CYGPATH_W='cygpath -w'
+  else
+    CYGPATH_W=echo
+  fi
+fi
+
+
+# Define the identity of the package.
+ PACKAGE='groff'
+ VERSION='1.22.4'
+
+
+cat >>confdefs.h <<_ACEOF
+#define PACKAGE "$PACKAGE"
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define VERSION "$VERSION"
+_ACEOF
+
+# Some tools Automake needs.
+
+ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
+
+
+AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
+
+
+AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
+
+
+AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
+
+
+MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
+
+# For better backward compatibility.  To be removed once Automake 1.9.x
+# dies out for good.  For more background, see:
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
+# <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
+mkdir_p='$(MKDIR_P)'
+
+# We need awk for the "check" target (and possibly the TAP driver).  The
+# system "awk" is bad on some platforms.
+# Always define AMTAR for backward compatibility.  Yes, it's still used
+# in the wild :-(  We should find a proper way to deprecate it ...
+AMTAR='$${TAR-tar}'
+
+
+# We'll loop over all known methods to create a tar archive until one works.
+_am_tools='gnutar  pax cpio none'
+
+am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
+
+
+
+
+
+depcc="$CC"   am_compiler_list=
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CC_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CC_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
+
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CC_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
+
+  cd ..
+  rm -rf conftest.dir
+else
+  am_cv_CC_dependencies_compiler_type=none
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
+CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
+
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
+  am__fastdepCC_TRUE=
+  am__fastdepCC_FALSE='#'
+else
+  am__fastdepCC_TRUE='#'
+  am__fastdepCC_FALSE=
+fi
+
+
+
+# POSIX will say in a future version that running "rm -f" with no argument
+# is OK; and we want to be able to make that assumption in our Makefile
+# recipes.  So use an aggressive probe to check that the usage we want is
+# actually supported "in the wild" to an acceptable degree.
+# See automake bug#10828.
+# To make any issue more visible, cause the running configure to be aborted
+# by default if the 'rm' program in use doesn't match our expectations; the
+# user can still override this though.
+if rm -f && rm -fr && rm -rf; then : OK; else
+  cat >&2 <<'END'
+Oops!
+
+Your 'rm' program seems unable to run without file operands specified
+on the command line, even when the '-f' option is present.  This is contrary
+to the behaviour of most rm programs out there, and not conforming with
+the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
+
+Please tell bug-automake@gnu.org about your system, including the value
+of your $PATH and any error possibly output before this message.  This
+can help us improve future automake versions.
+
+END
+  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
+    echo 'Configuration will proceed anyway, since you have set the' >&2
+    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
+    echo >&2
+  else
+    cat >&2 <<'END'
+Aborting the configuration process, to ensure you take notice of the issue.
+
+You can download and install GNU coreutils to get an 'rm' implementation
+that behaves properly: <https://www.gnu.org/software/coreutils/>.
+
+If you want to complete the configuration process using your problematic
+'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
+to "yes", and re-run configure.
+
+END
+    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
+  fi
+fi
+
+
+# Check whether --enable-silent-rules was given.
+if test "${enable_silent_rules+set}" = set; then :
+  enableval=$enable_silent_rules;
+fi
+
+case $enable_silent_rules in # (((
+  yes) AM_DEFAULT_VERBOSITY=0;;
+   no) AM_DEFAULT_VERBOSITY=1;;
+    *) AM_DEFAULT_VERBOSITY=0;;
+esac
+am_make=${MAKE-make}
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
+$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
+if ${am_cv_make_support_nested_variables+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if $as_echo 'TRUE=$(BAR$(V))
+BAR0=false
+BAR1=true
+V=1
+am__doit:
+       @$(TRUE)
+.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
+  am_cv_make_support_nested_variables=yes
+else
+  am_cv_make_support_nested_variables=no
+fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
+$as_echo "$am_cv_make_support_nested_variables" >&6; }
+if test $am_cv_make_support_nested_variables = yes; then
+    AM_V='$(V)'
+  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
+else
+  AM_V=$AM_DEFAULT_VERBOSITY
+  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
+fi
+AM_BACKSLASH='\'
+
+
+# checks for programs
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 if ${ac_cv_prog_CC+:} false; then :
@@ -3919,7 +5754,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    ac_cv_prog_CC="${ac_tool_prefix}gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3939,15 +5774,11 @@ $as_echo "no" >&6; }
 fi
 
 
-    test -n "$CC" && break
-  done
 fi
-if test -z "$CC"; then
+if test -z "$ac_cv_prog_CC"; then
   ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+  # Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
 if ${ac_cv_prog_ac_ct_CC+:} false; then :
@@ -3963,7 +5794,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
+    ac_cv_prog_ac_ct_CC="gcc"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -3982,10 +5813,6 @@ else
 $as_echo "no" >&6; }
 fi
 
-
-  test -n "$ac_ct_CC" && break
-done
-
   if test "x$ac_ct_CC" = x; then
     CC=""
   else
@@ -3997,12 +5824,212 @@ ac_tool_warned=yes ;;
 esac
     CC=$ac_ct_CC
   fi
+else
+  CC="$ac_cv_prog_CC"
 fi
 
+if test -z "$CC"; then
+          if test -n "$ac_tool_prefix"; then
+    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
+set dummy ${ac_tool_prefix}cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="${ac_tool_prefix}cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
 
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+  fi
+fi
+if test -z "$CC"; then
+  # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+  ac_prog_rejected=no
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
+       ac_prog_rejected=yes
+       continue
+     fi
+    ac_cv_prog_CC="cc"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+if test $ac_prog_rejected = yes; then
+  # We found a bogon in the path, so make sure we never use it.
+  set dummy $ac_cv_prog_CC
+  shift
+  if test $# != 0; then
+    # We chose a different compiler from the bogus one.
+    # However, it has the same basename, so the bogon will be chosen
+    # first if we set CC to just the basename; use the full file name.
+    shift
+    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
+  fi
+fi
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+fi
+if test -z "$CC"; then
+  if test -n "$ac_tool_prefix"; then
+  for ac_prog in cl.exe
+  do
+    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
+set dummy $ac_tool_prefix$ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$CC"; then
+  ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+CC=$ac_cv_prog_CC
+if test -n "$CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
+$as_echo "$CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+    test -n "$CC" && break
+  done
+fi
+if test -z "$CC"; then
+  ac_ct_CC=$CC
+  for ac_prog in cl.exe
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_CC+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_CC"; then
+  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_CC="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+ac_ct_CC=$ac_cv_prog_ac_ct_CC
+if test -n "$ac_ct_CC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
+$as_echo "$ac_ct_CC" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$ac_ct_CC" && break
+done
+
+  if test "x$ac_ct_CC" = x; then
+    CC=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    CC=$ac_ct_CC
+  fi
+fi
+
+fi
+
+
+test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
 as_fn_error $? "no acceptable C compiler found in \$PATH
 See \`config.log' for more details" "$LINENO" 5; }
@@ -4243,6 +6270,65 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
+$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
+if ${am_cv_prog_cc_c_o+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+  # Make sure it works both with $CC and with simple cc.
+  # Following AC_PROG_CC_C_O, we do the test twice because some
+  # compilers refuse to overwrite an existing .o file with -o,
+  # though they will create one.
+  am_cv_prog_cc_c_o=yes
+  for am_i in 1 2; do
+    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
+   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } \
+         && test -f conftest2.$ac_objext; then
+      : OK
+    else
+      am_cv_prog_cc_c_o=no
+      break
+    fi
+  done
+  rm -f core conftest*
+  unset am_i
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
+$as_echo "$am_cv_prog_cc_c_o" >&6; }
+if test "$am_cv_prog_cc_c_o" != yes; then
+   # Losing compiler, so override with the script.
+   # FIXME: It is wrong to rewrite CC.
+   # But if we don't then we get into trouble of one sort or another.
+   # A longer-term fix would be to have automake use am__CC in this case,
+   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
+   CC="$am_aux_dir/compile $CC"
+fi
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -4500,1047 +6586,13112 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
+depcc="$CXX"  am_compiler_list=
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
+$as_echo_n "checking dependency style of $depcc... " >&6; }
+if ${am_cv_CXX_dependencies_compiler_type+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
+  # We make a subdir and do the tests there.  Otherwise we can end up
+  # making bogus files that we don't know about and never remove.  For
+  # instance it was reported that on HP-UX the gcc test will end up
+  # making a dummy file named 'D' -- because '-MD' means "put the output
+  # in D".
+  rm -rf conftest.dir
+  mkdir conftest.dir
+  # Copy depcomp to subdir because otherwise we won't find it if we're
+  # using a relative directory.
+  cp "$am_depcomp" conftest.dir
+  cd conftest.dir
+  # We will build objects and dependencies in a subdirectory because
+  # it helps to detect inapplicable dependency modes.  For instance
+  # both Tru64's cc and ICC support -MD to output dependencies as a
+  # side effect of compilation, but ICC will put the dependencies in
+  # the current directory while Tru64 will put them in the object
+  # directory.
+  mkdir sub
+
+  am_cv_CXX_dependencies_compiler_type=none
+  if test "$am_compiler_list" = ""; then
+     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
+  fi
+  am__universal=false
+  case " $depcc " in #(
+     *\ -arch\ *\ -arch\ *) am__universal=true ;;
+     esac
 
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+  for depmode in $am_compiler_list; do
+    # Setup a source with many dependencies, because some compilers
+    # like to wrap large dependency lists on column 80 (with \), and
+    # we should not choose a depcomp mode which is confused by this.
+    #
+    # We need to recreate these files for each test, as the compiler may
+    # overwrite some of them when testing with obscure command lines.
+    # This happens at least with the AIX C compiler.
+    : > sub/conftest.c
+    for i in 1 2 3 4 5 6; do
+      echo '#include "conftst'$i'.h"' >> sub/conftest.c
+      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
+      # Solaris 10 /bin/sh.
+      echo '/* dummy */' > sub/conftst$i.h
+    done
+    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
+
+    # We check with '-c' and '-o' for the sake of the "dashmstdout"
+    # mode.  It turns out that the SunPro C++ compiler does not properly
+    # handle '-M -o', and we need to detect this.  Also, some Intel
+    # versions had trouble with output in subdirs.
+    am__obj=sub/conftest.${OBJEXT-o}
+    am__minus_obj="-o $am__obj"
+    case $depmode in
+    gcc)
+      # This depmode causes a compiler race in universal mode.
+      test "$am__universal" = false || continue
+      ;;
+    nosideeffect)
+      # After this tag, mechanisms are not by side-effect, so they'll
+      # only be used when explicitly requested.
+      if test "x$enable_dependency_tracking" = xyes; then
+       continue
+      else
+       break
+      fi
+      ;;
+    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
+      # This compiler won't grok '-c -o', but also, the minuso test has
+      # not run yet.  These depmodes are late enough in the game, and
+      # so weak that their functioning should not be impacted.
+      am__obj=conftest.${OBJEXT-o}
+      am__minus_obj=
+      ;;
+    none) break ;;
+    esac
+    if depmode=$depmode \
+       source=sub/conftest.c object=$am__obj \
+       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
+       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
+         >/dev/null 2>conftest.err &&
+       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
+       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
+       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
+      # icc doesn't choke on unknown options, it will just issue warnings
+      # or remarks (even with -Werror).  So we grep stderr for any message
+      # that says an option was ignored or not supported.
+      # When given -MP, icc 7.0 and 7.1 complain thusly:
+      #   icc: Command line warning: ignoring option '-M'; no argument required
+      # The diagnosis changed in icc 8.0:
+      #   icc: Command line remark: option '-MP' not supported
+      if (grep 'ignoring option' conftest.err ||
+          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
+        am_cv_CXX_dependencies_compiler_type=$depmode
+        break
+      fi
+    fi
+  done
 
-   if test "$cross_compiling" = no; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking that C++ compiler can compile simple program" >&5
-$as_echo_n "checking that C++ compiler can compile simple program... " >&6; }
-   fi
-   if test "$cross_compiling" = yes; then :
-  :
+  cd ..
+  rm -rf conftest.dir
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+  am_cv_CXX_dependencies_compiler_type=none
+fi
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CXX_dependencies_compiler_type" >&5
+$as_echo "$am_cv_CXX_dependencies_compiler_type" >&6; }
+CXXDEPMODE=depmode=$am_cv_CXX_dependencies_compiler_type
 
+ if
+  test "x$enable_dependency_tracking" != xno \
+  && test "$am_cv_CXX_dependencies_compiler_type" = gcc3; then
+  am__fastdepCXX_TRUE=
+  am__fastdepCXX_FALSE='#'
+else
+  am__fastdepCXX_TRUE='#'
+  am__fastdepCXX_FALSE=
+fi
 
-int main() {
-  return 0;
-}
 
 
 
-_ACEOF
-if ac_fn_cxx_try_run "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      as_fn_error $? "a working C++ compiler is required" "$LINENO" 5
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
 
 
-   if test "$cross_compiling" = no; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking that C++ static constructors and destructors are called" >&5
-$as_echo_n "checking that C++ static constructors and destructors are called... " >&6; }
-   fi
-   if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
 
 
-extern "C" {
-  void _exit(int);
-}
 
-int i;
-struct A {
-  char dummy;
-  A() { i = 1; }
-  ~A() { if (i == 1) _exit(0); }
-};
-
-A a;
 
-int main()
-{
-  return 1;
-}
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5
+$as_echo_n "checking for Minix Amsterdam compiler... " >&6; }
+if ${gl_cv_c_amsterdam_compiler+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
 
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+#ifdef __ACK__
+Amsterdam
+#endif
 
 _ACEOF
-if ac_fn_cxx_try_run "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Amsterdam" >/dev/null 2>&1; then :
+  gl_cv_c_amsterdam_compiler=yes
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-      as_fn_error $? "a working C++ compiler is required" "$LINENO" 5
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+  gl_cv_c_amsterdam_compiler=no
 fi
+rm -f conftest*
 
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking that header files support C++" >&5
-$as_echo_n "checking that header files support C++... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5
+$as_echo "$gl_cv_c_amsterdam_compiler" >&6; }
 
-int
-main ()
-{
+      if test $gl_cv_c_amsterdam_compiler = yes; then
+    if test -z "$AR"; then
+      AR='cc -c.a'
+    fi
+    if test -z "$ARFLAGS"; then
+      ARFLAGS='-o'
+    fi
+  else
+                                                :
+  fi
 
+        if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$AR"; then
+  ac_cv_prog_AR="$AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_AR="${ac_tool_prefix}ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-fopen(0, 0);
+fi
+fi
+AR=$ac_cv_prog_AR
+if test -n "$AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
+$as_echo "$AR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
 
-  ;
-  return 0;
-}
+fi
+if test -z "$ac_cv_prog_AR"; then
+  ac_ct_AR=$AR
+  # Extract the first word of "ar", so it can be a program name with args.
+set dummy ar; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_AR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_AR"; then
+  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_AR="ar"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-_ACEOF
-if ac_fn_cxx_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+fi
+fi
+ac_ct_AR=$ac_cv_prog_ac_ct_AR
+if test -n "$ac_ct_AR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
+$as_echo "$ac_ct_AR" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
-      as_fn_error $? "header files do not support C++
-                  (if you are using a version of gcc/g++ earlier than 2.5,
-                  you should install libg++)" "$LINENO" 5
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether character set is EBCDIC" >&5
-$as_echo_n "checking whether character set is EBCDIC... " >&6; }
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
+  if test "x$ac_ct_AR" = x; then
+    AR="ar"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    AR=$ac_ct_AR
+  fi
+else
+  AR="$ac_cv_prog_AR"
+fi
 
+  if test -z "$ARFLAGS"; then
+    ARFLAGS='cr'
+  fi
 
-/* Treat any failure as ASCII for compatibility with existing art.
-   Use compile-time rather than run-time tests for cross-compiler
-   tolerance. */
-#if '0' != 240
-make an error "Character set is not EBCDIC"
-#endif
 
 
-int
-main ()
-{
+  if test -z "$RANLIB"; then
+    if test $gl_cv_c_amsterdam_compiler = yes; then
+      RANLIB=':'
+    else
+            if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
-  ;
-  return 0;
-}
+fi
+fi
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  groff_cv_ebcdic="yes"
-      TTYDEVDIRS="font/devcp1047"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
 
-$as_echo "#define IS_EBCDIC_HOST 1" >>confdefs.h
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
 else
-  groff_cv_ebcdic="no"
-     TTYDEVDIRS="font/devascii font/devlatin1"
-     OTHERDEVDIRS="font/devlj4 font/devlbp"
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
+fi
 
-if test "$groff_cv_ebcdic" = "yes"; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OS/390 Unix" >&5
-$as_echo_n "checking for OS/390 Unix... " >&6; }
-     case `uname` in
-     OS/390)
-       CFLAGS="$CFLAGS -D_ALL_SOURCE"
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; } ;;
-     *)
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; } ;;
-     esac
-   fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to install .cmd wrapper scripts for Windows" >&5
-$as_echo_n "checking whether to install .cmd wrapper scripts for Windows... " >&6; }
-   case "$host_os" in
-   *mingw*)
-     make_winscripts=winscripts
-     make_install_winscripts=install_winscripts
-     make_uninstall_winscripts=uninstall_winscripts
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; } ;;
-   *)
-     make_winscripts=
-     make_install_winscripts=
-     make_uninstall_winscripts=
-     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; } ;;
-   esac
+    fi
+  fi
 
 
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
-$as_echo_n "checking for X... " >&6; }
+# Make sure we can run config.sub.
+$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
+  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
+$as_echo_n "checking build system type... " >&6; }
+if ${ac_cv_build+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_build_alias=$build_alias
+test "x$ac_build_alias" = x &&
+  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
+test "x$ac_build_alias" = x &&
+  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
+ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
+  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
 
-# Check whether --with-x was given.
-if test "${with_x+set}" = set; then :
-  withval=$with_x;
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
+$as_echo "$ac_cv_build" >&6; }
+case $ac_cv_build in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
+esac
+build=$ac_cv_build
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_build
+shift
+build_cpu=$1
+build_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+build_os=$*
+IFS=$ac_save_IFS
+case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
 
-# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
-if test "x$with_x" = xno; then
-  # The user explicitly disabled X.
-  have_x=disabled
-else
-  case $x_includes,$x_libraries in #(
-    *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #(
-    *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then :
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
+$as_echo_n "checking host system type... " >&6; }
+if ${ac_cv_host+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  # One or both of the vars are not set, and there is no cached value.
-ac_x_includes=no ac_x_libraries=no
-rm -f -r conftest.dir
-if mkdir conftest.dir; then
-  cd conftest.dir
-  cat >Imakefile <<'_ACEOF'
-incroot:
-       @echo incroot='${INCROOT}'
-usrlibdir:
-       @echo usrlibdir='${USRLIBDIR}'
-libdir:
-       @echo libdir='${LIBDIR}'
-_ACEOF
-  if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
-    # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-    for ac_var in incroot usrlibdir libdir; do
-      eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
-    done
-    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
-    for ac_extension in a so sl dylib la dll; do
-      if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
-        test -f "$ac_im_libdir/libX11.$ac_extension"; then
-       ac_im_usrlibdir=$ac_im_libdir; break
-      fi
-    done
-    # Screen out bogus values from the imake configuration.  They are
-    # bogus both because they are the default anyway, and because
-    # using them would break gcc on systems where it needs fixed includes.
-    case $ac_im_incroot in
-       /usr/include) ac_x_includes= ;;
-       *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
-    esac
-    case $ac_im_usrlibdir in
-       /usr/lib | /usr/lib64 | /lib | /lib64) ;;
-       *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
-    esac
-  fi
-  cd ..
-  rm -f -r conftest.dir
+  if test "x$host_alias" = x; then
+  ac_cv_host=$ac_cv_build
+else
+  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
+    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
 fi
 
-# Standard set of common directories for X headers.
-# Check X11 before X11Rn because it is often a symlink to the current release.
-ac_x_header_dirs='
-/usr/X11/include
-/usr/X11R7/include
-/usr/X11R6/include
-/usr/X11R5/include
-/usr/X11R4/include
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
+$as_echo "$ac_cv_host" >&6; }
+case $ac_cv_host in
+*-*-*) ;;
+*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
+esac
+host=$ac_cv_host
+ac_save_IFS=$IFS; IFS='-'
+set x $ac_cv_host
+shift
+host_cpu=$1
+host_vendor=$2
+shift; shift
+# Remember, the first character of IFS is used to create $*,
+# except with old shells:
+host_os=$*
+IFS=$ac_save_IFS
+case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
 
-/usr/include/X11
-/usr/include/X11R7
-/usr/include/X11R6
-/usr/include/X11R5
-/usr/include/X11R4
 
-/usr/local/X11/include
-/usr/local/X11R7/include
-/usr/local/X11R6/include
-/usr/local/X11R5/include
-/usr/local/X11R4/include
 
-/usr/local/include/X11
-/usr/local/include/X11R7
-/usr/local/include/X11R6
-/usr/local/include/X11R5
-/usr/local/include/X11R4
 
-/usr/X386/include
-/usr/x386/include
-/usr/XFree86/include/X11
 
-/usr/include
-/usr/local/include
-/usr/unsupported/include
-/usr/athena/include
-/usr/local/x11r5/include
-/usr/lpp/Xamples/include
+  # IEEE behaviour is the default on all CPUs except Alpha and SH
+  # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4
+  # and the GCC 4.1.2 manual).
+  case "$host_cpu" in
+    alpha*)
+      # On Alpha systems, a compiler option provides the behaviour.
+      # See the ieee(3) manual page, also available at
+      # <https://backdrift.org/man/tru64/man3/ieee.3.html>
+      if test -n "$GCC"; then
+        # GCC has the option -mieee.
+        # For full IEEE compliance (rarely needed), use option -mieee-with-inexact.
+        CPPFLAGS="$CPPFLAGS -mieee"
+      else
+        # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact.
+        # For full IEEE compliance (rarely needed), use option -ieee_with_inexact.
+        CPPFLAGS="$CPPFLAGS -ieee"
+      fi
+      ;;
+    sh*)
+      if test -n "$GCC"; then
+        # GCC has the option -mieee.
+        CPPFLAGS="$CPPFLAGS -mieee"
+      fi
+      ;;
+  esac
 
-/usr/openwin/include
-/usr/openwin/share/include'
 
-if test "$ac_x_includes" = no; then
-  # Guess where to find include files, by looking for Xlib.h.
-  # First, try using that file with no special directory specified.
+
+  # Pre-early section.
+
+
+
+
+  # Code from module absolute-header:
+  # Code from module alloca-opt:
+  # Code from module errno:
+  # Code from module extensions:
+  # Code from module extern-inline:
+  # Code from module float:
+  # Code from module fpieee:
+
+  # Code from module fprintf-posix:
+  # Code from module fpucw:
+  # Code from module frexp-nolibm:
+  # Code from module frexpl-nolibm:
+  # Code from module fseterr:
+  # Code from module git-version-gen:
+  # Code from module havelib:
+  # Code from module host-cpu-c-abi:
+  # Code from module include_next:
+  # Code from module isnand-nolibm:
+  # Code from module isnanf-nolibm:
+  # Code from module isnanl-nolibm:
+  # Code from module limits-h:
+  # Code from module localcharset:
+  # Code from module math:
+  # Code from module memchr:
+  # Code from module multiarch:
+  # Code from module nocrash:
+  # Code from module non-recursive-gnulib-prefix-hack:
+  # Code from module printf-frexp:
+  # Code from module printf-frexpl:
+  # Code from module printf-safe:
+  # Code from module signbit:
+  # Code from module size_max:
+  # Code from module snippet/arg-nonnull:
+  # Code from module snippet/c++defs:
+  # Code from module snippet/warn-on-use:
+  # Code from module snprintf:
+  # Code from module ssize_t:
+  # Code from module stddef:
+  # Code from module stdint:
+  # Code from module stdio:
+  # Code from module streq:
+  # Code from module string:
+  # Code from module sys_types:
+  # Code from module unitypes:
+  # Code from module uniwidth/base:
+  # Code from module uniwidth/width:
+  # Code from module vasnprintf:
+  # Code from module verify:
+  # Code from module vsnprintf:
+  # Code from module wchar:
+  # Code from module wctype-h:
+  # Code from module wcwidth:
+  # Code from module xsize:
+
+
+
+
+
+
+          LIBC_FATAL_STDERR_=1
+  export LIBC_FATAL_STDERR_
+
+ac_fn_c_check_type "$LINENO" "size_t" "ac_cv_type_size_t" "$ac_includes_default"
+if test "x$ac_cv_type_size_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define size_t unsigned int
+_ACEOF
+
+fi
+
+# The Ultrix 4.2 mips builtin alloca declared by alloca.h only works
+# for constant arguments.  Useless!
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5
+$as_echo_n "checking for working alloca.h... " >&6; }
+if ${ac_cv_working_alloca_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <X11/Xlib.h>
+#include <alloca.h>
+int
+main ()
+{
+char *p = (char *) alloca (2 * sizeof (int));
+                         if (p) return 0;
+  ;
+  return 0;
+}
 _ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # We can compile using X headers with no special include directory.
-ac_x_includes=
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_working_alloca_h=yes
 else
-  for ac_dir in $ac_x_header_dirs; do
-  if test -r "$ac_dir/X11/Xlib.h"; then
-    ac_x_includes=$ac_dir
-    break
-  fi
-done
+  ac_cv_working_alloca_h=no
 fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-fi # $ac_x_includes = no
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_working_alloca_h" >&5
+$as_echo "$ac_cv_working_alloca_h" >&6; }
+if test $ac_cv_working_alloca_h = yes; then
 
-if test "$ac_x_libraries" = no; then
-  # Check for the libraries.
-  # See if we find them without any special options.
-  # Don't add to $LIBS permanently.
-  ac_save_LIBS=$LIBS
-  LIBS="-lX11 $LIBS"
+$as_echo "#define HAVE_ALLOCA_H 1" >>confdefs.h
+
+fi
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5
+$as_echo_n "checking for alloca... " >&6; }
+if ${ac_cv_func_alloca_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
-#include <X11/Xlib.h>
+#ifdef __GNUC__
+# define alloca __builtin_alloca
+#else
+# ifdef _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# else
+#  ifdef HAVE_ALLOCA_H
+#   include <alloca.h>
+#  else
+#   ifdef _AIX
+ #pragma alloca
+#   else
+#    ifndef alloca /* predefined by HP cc +Olibcalls */
+void *alloca (size_t);
+#    endif
+#   endif
+#  endif
+# endif
+#endif
+
 int
 main ()
 {
-XrmInitialize ()
+char *p = (char *) alloca (1);
+                                   if (p) return 0;
   ;
   return 0;
 }
 _ACEOF
 if ac_fn_c_try_link "$LINENO"; then :
-  LIBS=$ac_save_LIBS
-# We can link X programs with no special library path.
-ac_x_libraries=
+  ac_cv_func_alloca_works=yes
 else
-  LIBS=$ac_save_LIBS
-for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
-do
-  # Don't even attempt the hair of trying to link an X program!
-  for ac_extension in a so sl dylib la dll; do
-    if test -r "$ac_dir/libX11.$ac_extension"; then
-      ac_x_libraries=$ac_dir
-      break 2
-    fi
-  done
-done
+  ac_cv_func_alloca_works=no
 fi
 rm -f core conftest.err conftest.$ac_objext \
     conftest$ac_exeext conftest.$ac_ext
-fi # $ac_x_libraries = no
-
-case $ac_x_includes,$ac_x_libraries in #(
-  no,* | *,no | *\'*)
-    # Didn't find X, or a directory has "'" in its name.
-    ac_cv_have_x="have_x=no";; #(
-  *)
-    # Record where we found X for the cache.
-    ac_cv_have_x="have_x=yes\
-       ac_x_includes='$ac_x_includes'\
-       ac_x_libraries='$ac_x_libraries'"
-esac
 fi
-;; #(
-    *) have_x=yes;;
-  esac
-  eval "$ac_cv_have_x"
-fi # $with_x != no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_alloca_works" >&5
+$as_echo "$ac_cv_func_alloca_works" >&6; }
+
+if test $ac_cv_func_alloca_works = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
 
-if test "$have_x" != yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
-$as_echo "$have_x" >&6; }
-  no_x=yes
 else
-  # If each of the values was on the command line, it overrides each guess.
-  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
-  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
-  # Update the cache value to reflect the command line values.
-  ac_cv_have_x="have_x=yes\
-       ac_x_includes='$x_includes'\
-       ac_x_libraries='$x_libraries'"
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
-$as_echo "libraries $x_libraries, headers $x_includes" >&6; }
-fi
+  # The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
 
-if test "$no_x" = yes; then
-  # Not all programs may use this symbol, but it does not hurt to define it.
 
-$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
 
-  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
-else
-  if test -n "$x_includes"; then
-    X_CFLAGS="$X_CFLAGS -I$x_includes"
-  fi
 
-  # It would also be nice to do this for all -L options, not just this one.
-  if test -n "$x_libraries"; then
-    X_LIBS="$X_LIBS -L$x_libraries"
-    # For Solaris; some versions of Sun CC require a space after -R and
-    # others require no space.  Words are not sufficient . . . .
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
-$as_echo_n "checking whether -R must be followed by a space... " >&6; }
-    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
-    ac_xsave_c_werror_flag=$ac_c_werror_flag
-    ac_c_werror_flag=yes
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-int
-main ()
-{
+ALLOCA=\${LIBOBJDIR}alloca.$ac_objext
 
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-       X_LIBS="$X_LIBS -R$x_libraries"
+$as_echo "#define C_ALLOCA 1" >>confdefs.h
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether \`alloca.c' needs Cray hooks" >&5
+$as_echo_n "checking whether \`alloca.c' needs Cray hooks... " >&6; }
+if ${ac_cv_os_cray+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  LIBS="$ac_xsave_LIBS -R $x_libraries"
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
 
-int
-main ()
-{
-
-  ;
-  return 0;
-}
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-         X_LIBS="$X_LIBS -R $x_libraries"
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "webecray" >/dev/null 2>&1; then :
+  ac_cv_os_cray=yes
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
-$as_echo "neither works" >&6; }
+  ac_cv_os_cray=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+rm -f conftest*
+
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    ac_c_werror_flag=$ac_xsave_c_werror_flag
-    LIBS=$ac_xsave_LIBS
-  fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_os_cray" >&5
+$as_echo "$ac_cv_os_cray" >&6; }
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
 
-  # Check for system-dependent libraries X programs must link with.
-  # Do this before checking for the system-independent R6 libraries
-  # (-lICE), since we may need -lsocket or whatever for X linking.
+cat >>confdefs.h <<_ACEOF
+#define CRAY_STACKSEG_END $ac_func
+_ACEOF
 
-  if test "$ISC" = yes; then
-    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
-  else
-    # Martyn Johnson says this is needed for Ultrix, if the X
-    # libraries were built with DECnet support.  And Karl Berry says
-    # the Alpha needs dnet_stub (dnet does not exist).
-    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+    break
+fi
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char XOpenDisplay ();
-int
-main ()
-{
-return XOpenDisplay ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
+  done
+fi
 
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
-$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
-if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5
+$as_echo_n "checking stack direction for C alloca... " >&6; }
+if ${ac_cv_c_stack_direction+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+  if test "$cross_compiling" = yes; then :
+  ac_cv_c_stack_direction=0
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
+$ac_includes_default
+int
+find_stack_direction (int *addr, int depth)
+{
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
+}
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char dnet_ntoa ();
 int
-main ()
+main (int argc, char **argv)
 {
-return dnet_ntoa ();
-  ;
-  return 0;
+  return find_stack_direction (0, argc + !argv + 20) < 0;
 }
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dnet_dnet_ntoa=yes
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_stack_direction=1
 else
-  ac_cv_lib_dnet_dnet_ntoa=no
+  ac_cv_c_stack_direction=-1
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
-$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_stack_direction" >&5
+$as_echo "$ac_cv_c_stack_direction" >&6; }
+cat >>confdefs.h <<_ACEOF
+#define STACK_DIRECTION $ac_cv_c_stack_direction
+_ACEOF
 
-    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
-$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
-if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then :
+
+fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5
+$as_echo_n "checking whether the preprocessor supports include_next... " >&6; }
+if ${gl_cv_have_include_next+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-ldnet_stub  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
+  rm -rf conftestd1a conftestd1b conftestd2
+     mkdir conftestd1a conftestd1b conftestd2
+                                                  cat <<EOF > conftestd1a/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
 #endif
-char dnet_ntoa ();
-int
-main ()
-{
-return dnet_ntoa ();
-  ;
-  return 0;
-}
+EOF
+     cat <<EOF > conftestd1b/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include <stdio.h>
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+     gl_save_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <conftest.h>
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_dnet_stub_dnet_ntoa=yes
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_have_include_next=yes
 else
-  ac_cv_lib_dnet_stub_dnet_ntoa=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
-$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
-if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+  CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <conftest.h>
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_have_include_next=buggy
+else
+  gl_cv_have_include_next=no
 fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 
-    fi
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-    LIBS="$ac_xsave_LIBS"
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     CPPFLAGS="$gl_save_CPPFLAGS"
+     rm -rf conftestd1a conftestd1b conftestd2
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5
+$as_echo "$gl_cv_have_include_next" >&6; }
+  PRAGMA_SYSTEM_HEADER=
+  if test $gl_cv_have_include_next = yes; then
+    INCLUDE_NEXT=include_next
+    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    if test -n "$GCC"; then
+      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
+    fi
+  else
+    if test $gl_cv_have_include_next = buggy; then
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    else
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
+    fi
+  fi
 
-    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
-    # to get the SysV transport functions.
-    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
-    # needs -lnsl.
-    # The nsl library prevents programs from opening the X display
-    # on Irix 5.2, according to T.E. Dickey.
-    # The functions gethostbyname, getservbyname, and inet_addr are
-    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
-    ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
-if test "x$ac_cv_func_gethostbyname" = xyes; then :
 
-fi
 
-    if test $ac_cv_func_gethostbyname = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
-$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
-if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5
+$as_echo_n "checking whether system header files limit the line length... " >&6; }
+if ${gl_cv_pragma_columns+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lnsl  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
+#ifdef __TANDEM
+choke me
 #endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
+
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_nsl_gethostbyname=yes
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "choke me" >/dev/null 2>&1; then :
+  gl_cv_pragma_columns=yes
 else
-  ac_cv_lib_nsl_gethostbyname=no
+  gl_cv_pragma_columns=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
-$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
-if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+rm -f conftest*
+
+
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5
+$as_echo "$gl_cv_pragma_columns" >&6; }
+  if test $gl_cv_pragma_columns = yes; then
+    PRAGMA_COLUMNS="#pragma COLUMNS 10000"
+  else
+    PRAGMA_COLUMNS=
+  fi
 
-      if test $ac_cv_lib_nsl_gethostbyname = no; then
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
-$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
-if ${ac_cv_lib_bsd_gethostbyname+:} false; then :
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5
+$as_echo_n "checking for complete errno.h... " >&6; }
+if ${gl_cv_header_errno_h_complete+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lbsd  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
+#include <errno.h>
+#if !defined ETXTBSY
+booboo
 #endif
-char gethostbyname ();
-int
-main ()
-{
-return gethostbyname ();
-  ;
-  return 0;
-}
+#if !defined ENOMSG
+booboo
+#endif
+#if !defined EIDRM
+booboo
+#endif
+#if !defined ENOLINK
+booboo
+#endif
+#if !defined EPROTO
+booboo
+#endif
+#if !defined EMULTIHOP
+booboo
+#endif
+#if !defined EBADMSG
+booboo
+#endif
+#if !defined EOVERFLOW
+booboo
+#endif
+#if !defined ENOTSUP
+booboo
+#endif
+#if !defined ENETRESET
+booboo
+#endif
+#if !defined ECONNABORTED
+booboo
+#endif
+#if !defined ESTALE
+booboo
+#endif
+#if !defined EDQUOT
+booboo
+#endif
+#if !defined ECANCELED
+booboo
+#endif
+#if !defined EOWNERDEAD
+booboo
+#endif
+#if !defined ENOTRECOVERABLE
+booboo
+#endif
+#if !defined EILSEQ
+booboo
+#endif
+
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_bsd_gethostbyname=yes
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "booboo" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_complete=no
 else
-  ac_cv_lib_bsd_gethostbyname=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+  gl_cv_header_errno_h_complete=yes
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
-$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
-if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+rm -f conftest*
+
+
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5
+$as_echo "$gl_cv_header_errno_h_complete" >&6; }
+  if test $gl_cv_header_errno_h_complete = yes; then
+    ERRNO_H=''
+  else
 
-      fi
-    fi
 
-    # lieder@skyler.mavd.honeywell.com says without -lsocket,
-    # socket/setsockopt and other routines are undefined under SCO ODT
-    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
-    # on later versions), says Simon Leinen: it contains gethostby*
-    # variants that don't use the name server (or something).  -lsocket
-    # must be given before -lnsl if both are needed.  We assume that
-    # if connect needs -lnsl, so does gethostbyname.
-    ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
-if test "x$ac_cv_func_connect" = xyes; then :
 
-fi
 
-    if test $ac_cv_func_connect = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
-$as_echo_n "checking for connect in -lsocket... " >&6; }
-if ${ac_cv_lib_socket_connect+:} false; then :
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_errno_h='<'errno.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <errno.h>" >&5
+$as_echo_n "checking absolute name of <errno.h>... " >&6; }
+if ${gl_cv_next_errno_h+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char connect ();
-int
-main ()
-{
-return connect ();
-  ;
-  return 0;
-}
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <errno.h>
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_socket_connect=yes
-else
-  ac_cv_lib_socket_connect=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
-$as_echo "$ac_cv_lib_socket_connect" >&6; }
-if test "x$ac_cv_lib_socket_connect" = xyes; then :
-  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'errno.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_errno_h
+           gl_cv_next_errno_h='"'$gl_header'"'
+
+
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5
+$as_echo "$gl_cv_next_errno_h" >&6; }
+     fi
+     NEXT_ERRNO_H=$gl_cv_next_errno_h
 
-    fi
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'errno.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_errno_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive
 
-    # Guillermo Gomez says -lposix is necessary on A/UX.
-    ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
-if test "x$ac_cv_func_remove" = xyes; then :
 
+
+
+    ERRNO_H='errno.h'
+  fi
+
+   if test -n "$ERRNO_H"; then
+  GL_GENERATE_ERRNO_H_TRUE=
+  GL_GENERATE_ERRNO_H_FALSE='#'
+else
+  GL_GENERATE_ERRNO_H_TRUE='#'
+  GL_GENERATE_ERRNO_H_FALSE=
 fi
 
-    if test $ac_cv_func_remove = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
-$as_echo_n "checking for remove in -lposix... " >&6; }
-if ${ac_cv_lib_posix_remove+:} false; then :
+
+  if test -n "$ERRNO_H"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5
+$as_echo_n "checking for EMULTIHOP value... " >&6; }
+if ${gl_cv_header_errno_h_EMULTIHOP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lposix  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
+#include <errno.h>
+#ifdef EMULTIHOP
+yes
 #endif
-char remove ();
-int
-main ()
-{
-return remove ();
-  ;
-  return 0;
-}
+
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_posix_remove=yes
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_EMULTIHOP=yes
 else
-  ac_cv_lib_posix_remove=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+  gl_cv_header_errno_h_EMULTIHOP=no
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
-$as_echo "$ac_cv_lib_posix_remove" >&6; }
-if test "x$ac_cv_lib_posix_remove" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+rm -f conftest*
+
+      if test $gl_cv_header_errno_h_EMULTIHOP = no; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef EMULTIHOP
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_EMULTIHOP=hidden
 fi
+rm -f conftest*
 
-    fi
+        if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then
+                              if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP"        "
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug.  */
+#include <stdio.h>
+#include <stdlib.h>
+"; then :
 
-    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
-    ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
-if test "x$ac_cv_func_shmat" = xyes; then :
+fi
+
+        fi
+      fi
 
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5
+$as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; }
+    case $gl_cv_header_errno_h_EMULTIHOP in
+      yes | no)
+        EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE=
+        ;;
+      *)
+        EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP"
+        ;;
+    esac
 
-    if test $ac_cv_func_shmat = no; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
-$as_echo_n "checking for shmat in -lipc... " >&6; }
-if ${ac_cv_lib_ipc_shmat+:} false; then :
+
+  fi
+
+
+  if test -n "$ERRNO_H"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5
+$as_echo_n "checking for ENOLINK value... " >&6; }
+if ${gl_cv_header_errno_h_ENOLINK+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lipc  $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
+#include <errno.h>
+#ifdef ENOLINK
+yes
 #endif
-char shmat ();
-int
-main ()
-{
-return shmat ();
-  ;
-  return 0;
-}
+
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_ipc_shmat=yes
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_ENOLINK=yes
 else
-  ac_cv_lib_ipc_shmat=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
-$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
-if test "x$ac_cv_lib_ipc_shmat" = xyes; then :
-  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+  gl_cv_header_errno_h_ENOLINK=no
 fi
+rm -f conftest*
 
-    fi
-  fi
+      if test $gl_cv_header_errno_h_ENOLINK = no; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
-  # Check for libraries that X11R6 Xt/Xaw programs need.
-  ac_save_LDFLAGS=$LDFLAGS
-  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
-  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
-  # check for ICE first), but we must link in the order -lSM -lICE or
-  # we get undefined symbols.  So assume we have SM if we have ICE.
-  # These have to be linked with before -lX11, unlike the other
-  # libraries we check for below, so use a different variable.
-  # John Interrante, Karl Berry
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
-$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
-if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then :
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef ENOLINK
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_ENOLINK=hidden
+fi
+rm -f conftest*
+
+        if test $gl_cv_header_errno_h_ENOLINK = hidden; then
+                              if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK"        "
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug.  */
+#include <stdio.h>
+#include <stdlib.h>
+"; then :
+
+fi
+
+        fi
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5
+$as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; }
+    case $gl_cv_header_errno_h_ENOLINK in
+      yes | no)
+        ENOLINK_HIDDEN=0; ENOLINK_VALUE=
+        ;;
+      *)
+        ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK"
+        ;;
+    esac
+
+
+  fi
+
+
+  if test -n "$ERRNO_H"; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5
+$as_echo_n "checking for EOVERFLOW value... " >&6; }
+if ${gl_cv_header_errno_h_EOVERFLOW+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  ac_check_lib_save_LIBS=$LIBS
-LIBS="-lICE $X_EXTRA_LIBS $LIBS"
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
 /* end confdefs.h.  */
 
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
+#include <errno.h>
+#ifdef EOVERFLOW
+yes
 #endif
-char IceConnectionNumber ();
-int
-main ()
-{
-return IceConnectionNumber ();
-  ;
-  return 0;
-}
+
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  ac_cv_lib_ICE_IceConnectionNumber=yes
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_EOVERFLOW=yes
 else
-  ac_cv_lib_ICE_IceConnectionNumber=no
+  gl_cv_header_errno_h_EOVERFLOW=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-LIBS=$ac_check_lib_save_LIBS
+rm -f conftest*
+
+      if test $gl_cv_header_errno_h_EOVERFLOW = no; then
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef EOVERFLOW
+yes
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "yes" >/dev/null 2>&1; then :
+  gl_cv_header_errno_h_EOVERFLOW=hidden
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
-$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
-if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then :
-  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+rm -f conftest*
+
+        if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then
+                              if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW"        "
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug.  */
+#include <stdio.h>
+#include <stdlib.h>
+"; then :
+
 fi
 
-  LDFLAGS=$ac_save_LDFLAGS
+        fi
+      fi
 
 fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5
+$as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; }
+    case $gl_cv_header_errno_h_EOVERFLOW in
+      yes | no)
+        EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE=
+        ;;
+      *)
+        EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW"
+        ;;
+    esac
 
 
-   groff_no_x=$no_x
-   if test -z "$groff_no_x"; then
-     OLDCFLAGS=$CFLAGS
-     OLDLDFLAGS=$LDFLAGS
-     OLDLIBS=$LIBS
-     CFLAGS="$CFLAGS $X_CFLAGS"
-     LDFLAGS="$LDFLAGS $X_LIBS"
-     LIBS="$LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
+  fi
 
-     LIBS="$LIBS -lXaw"
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xaw library and header files" >&5
-$as_echo_n "checking for Xaw library and header files... " >&6; }
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
 
 
 
-#include <X11/Intrinsic.h>
-#include <X11/Xaw/Simple.h>
 
 
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5
+$as_echo_n "checking for stdint.h... " >&6; }
+if ${gl_cv_header_stdint_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+            #include <stdint.h>
 int
 main ()
 {
-
+uintmax_t i = (uintmax_t) -1; return !i;
   ;
   return 0;
 }
-
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_stdint_h=yes
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-       groff_no_x="yes"
+  gl_cv_header_stdint_h=no
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_h" >&5
+$as_echo "$gl_cv_header_stdint_h" >&6; }
+  if test $gl_cv_header_stdint_h = yes; then
 
-     LIBS="$LIBS -lXmu"
-     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xmu library and header files" >&5
-$as_echo_n "checking for Xmu library and header files... " >&6; }
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
+cat >>confdefs.h <<_ACEOF
+#define HAVE_STDINT_H_WITH_UINTMAX 1
+_ACEOF
 
+  fi
 
 
-#include <X11/Intrinsic.h>
-#include <X11/Xmu/Converters.h>
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5
+$as_echo_n "checking for inttypes.h... " >&6; }
+if ${gl_cv_header_inttypes_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
 
+#include <sys/types.h>
+#include <inttypes.h>
 
 int
 main ()
 {
-
+uintmax_t i = (uintmax_t) -1; return !i;
   ;
   return 0;
 }
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_inttypes_h=yes
+else
+  gl_cv_header_inttypes_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_inttypes_h" >&5
+$as_echo "$gl_cv_header_inttypes_h" >&6; }
+  if test $gl_cv_header_inttypes_h = yes; then
 
+cat >>confdefs.h <<_ACEOF
+#define HAVE_INTTYPES_H_WITH_UINTMAX 1
 _ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
+
+  fi
+
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports size specifiers as in C99" >&5
+$as_echo_n "checking whether printf supports size specifiers as in C99... " >&6; }
+if ${gl_cv_func_printf_sizes_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-       groff_no_x="yes"
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu* | gnu*)        gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4].*)       gl_cv_func_printf_sizes_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_sizes_c99="guessing no";;
+           darwin*)              gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_printf_sizes_c99="guessing no";;
+           openbsd*)             gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
+           solaris*)             gl_cv_func_printf_sizes_c99="guessing no";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_printf_sizes_c99="guessing no";;
+           netbsd*)              gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_printf_sizes_c99="guessing yes"
+else
+  gl_cv_func_printf_sizes_c99="guessing no"
 fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
+rm -f conftest*
 
-     CFLAGS=$OLDCFLAGS
-     LDFLAGS=$OLDLDFLAGS
-     LIBS=$OLDLIBS
-   fi
+                                 ;;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_sizes_c99="guessing no";;
+         esac
 
-   if test "x$groff_no_x" = "xyes"; then
-     { $as_echo "$as_me:${as_lineno-$LINENO}: gxditview and xtotroff won't be built" >&5
-$as_echo "$as_me: gxditview and xtotroff won't be built" >&6;}
-   else
-     XDEVDIRS="font/devX75 font/devX75-12 font/devX100 font/devX100-12"
-     XPROGDIRS="src/devices/xditview src/utils/xtotroff"
-     XLIBDIRS="src/libs/libxutil"
-   fi
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+# include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+# include <inttypes.h>
+#endif
+static char buf[100];
+int main ()
+{
+  int result = 0;
+#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX
+  buf[0] = '\0';
+  if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0
+      || strcmp (buf, "12345671 33") != 0)
+    result |= 1;
+#else
+  result |= 1;
+#endif
+  buf[0] = '\0';
+  if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0
+      || strcmp (buf, "12345672 33") != 0)
+    result |= 2;
+  buf[0] = '\0';
+  if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0
+      || strcmp (buf, "12345673 33") != 0)
+    result |= 4;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0
+      || strcmp (buf, "1.5 33") != 0)
+    result |= 8;
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_sizes_c99=yes
+else
+  gl_cv_func_printf_sizes_c99=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
 
 
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_sizes_c99" >&5
+$as_echo "$gl_cv_func_printf_sizes_c99" >&6; }
 
 
 
-# Check whether --with-appresdir was given.
-if test "${with_appresdir+set}" = set; then :
-  withval=$with_appresdir;
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports 'long double' arguments" >&5
+$as_echo_n "checking whether printf supports 'long double' arguments... " >&6; }
+if ${gl_cv_func_printf_long_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           beos*)  gl_cv_func_printf_long_double="guessing no";;
+                   # Guess yes on MSVC, no on mingw.
+           mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_printf_long_double="guessing yes"
+else
+  gl_cv_func_printf_long_double="guessing no"
 fi
+rm -f conftest*
 
-if test -z "$groff_no_x"; then
-     if test "x$with_appresdir" = "x"; then
-       if test "x$prefix" = "xNONE"; then
-         appresdir=$ac_default_prefix/lib/X11/app-defaults
-       else
-         appresdir=$prefix/lib/X11/app-defaults
-       fi
+                   ;;
+           *)      gl_cv_func_printf_long_double="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[10000];
+int main ()
+{
+  int result = 0;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.750000 33") != 0)
+    result |= 1;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.750000e+00 33") != 0)
+    result |= 2;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.75 33") != 0)
+    result |= 4;
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_long_double=yes
+else
+  gl_cv_func_printf_long_double=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_long_double" >&5
+$as_echo "$gl_cv_func_printf_long_double" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports infinite 'double' arguments" >&5
+$as_echo_n "checking whether printf supports infinite 'double' arguments... " >&6; }
+if ${gl_cv_func_printf_infinite+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu* | gnu*)        gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on FreeBSD >= 6.
+           freebsd[1-5].*)       gl_cv_func_printf_infinite="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_infinite="guessing no";;
+           darwin*)              gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on HP-UX >= 11.
+           hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";;
+           hpux*)                gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_printf_infinite="guessing no";;
+           netbsd*)              gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_printf_infinite="guessing yes"
+else
+  gl_cv_func_printf_infinite="guessing no"
+fi
+rm -f conftest*
+
+                                 ;;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_infinite="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static int
+strisnan (const char *string, size_t start_index, size_t end_index)
+{
+  if (start_index < end_index)
+    {
+      if (string[start_index] == '-')
+        start_index++;
+      if (start_index + 3 <= end_index
+          && memcmp (string + start_index, "nan", 3) == 0)
+        {
+          start_index += 3;
+          if (start_index == end_index
+              || (string[start_index] == '(' && string[end_index - 1] == ')'))
+            return 1;
+        }
+    }
+  return 0;
+}
+static int
+have_minus_zero ()
+{
+  static double plus_zero = 0.0;
+  double minus_zero = - plus_zero;
+  return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
+}
+static char buf[10000];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%f", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%f", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%f", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 2;
+  if (sprintf (buf, "%e", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 4;
+  if (sprintf (buf, "%e", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 4;
+  if (sprintf (buf, "%e", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 8;
+  if (sprintf (buf, "%g", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 16;
+  if (sprintf (buf, "%g", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 16;
+  if (sprintf (buf, "%g", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 32;
+  /* This test fails on HP-UX 10.20.  */
+  if (have_minus_zero ())
+    if (sprintf (buf, "%g", - zero) < 0
+        || strcmp (buf, "-0") != 0)
+    result |= 64;
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_infinite=yes
+else
+  gl_cv_func_printf_infinite=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_infinite" >&5
+$as_echo "$gl_cv_func_printf_infinite" >&6; }
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether byte ordering is bigendian" >&5
+$as_echo_n "checking whether byte ordering is bigendian... " >&6; }
+if ${ac_cv_c_bigendian+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+              not a universal capable compiler
+            #endif
+            typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+       # Check for potential -arch flags.  It is not universal unless
+       # there are at least two -arch flags with different values.
+       ac_arch=
+       ac_prev=
+       for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+        if test -n "$ac_prev"; then
+          case $ac_word in
+            i?86 | x86_64 | ppc | ppc64)
+              if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+                ac_arch=$ac_word
+              else
+                ac_cv_c_bigendian=universal
+                break
+              fi
+              ;;
+          esac
+          ac_prev=
+        elif test "x$ac_word" = "x-arch"; then
+          ac_prev=arch
+        fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+            #include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+                    && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+                    && LITTLE_ENDIAN)
+             bogus endian macros
+            #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+               #include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+                not big endian
+               #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+             bogus endian macros
+            #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+                not big endian
+               #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+                 { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+               short int ascii_ii[] =
+                 { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+               int use_ascii (int i) {
+                 return ascii_mm[i] + ascii_ii[i];
+               }
+               short int ebcdic_ii[] =
+                 { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+               short int ebcdic_mm[] =
+                 { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+               int use_ebcdic (int i) {
+                 return ebcdic_mm[i] + ebcdic_ii[i];
+               }
+               extern int foo;
+
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+             ac_cv_c_bigendian=yes
+           fi
+           if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+             if test "$ac_cv_c_bigendian" = unknown; then
+               ac_cv_c_bigendian=no
+             else
+               # finding both strings is unlikely to happen, but who knows?
+               ac_cv_c_bigendian=unknown
+             fi
+           fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+            /* Are we little or big endian?  From Harbison&Steele.  */
+            union
+            {
+              long int l;
+              char c[sizeof (long int)];
+            } u;
+            u.l = 1;
+            return u.c[sizeof (long int) - 1] == 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_bigendian" >&5
+$as_echo "$ac_cv_c_bigendian" >&6; }
+ case $ac_cv_c_bigendian in #(
+   yes)
+     $as_echo "#define WORDS_BIGENDIAN 1" >>confdefs.h
+;; #(
+   no)
+      ;; #(
+   universal)
+
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+     ;; #(
+   *)
+     as_fn_error $? "unknown endianness
+ presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;;
+ esac
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether long double and double are the same" >&5
+$as_echo_n "checking whether long double and double are the same... " >&6; }
+if ${gl_cv_long_double_equals_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <float.h>
+int
+main ()
+{
+typedef int check[sizeof (long double) == sizeof (double)
+                              && LDBL_MANT_DIG == DBL_MANT_DIG
+                              && LDBL_MAX_EXP == DBL_MAX_EXP
+                              && LDBL_MIN_EXP == DBL_MIN_EXP
+                              ? 1 : -1];
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_long_double_equals_double=yes
+else
+  gl_cv_long_double_equals_double=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_long_double_equals_double" >&5
+$as_echo "$gl_cv_long_double_equals_double" >&6; }
+  if test $gl_cv_long_double_equals_double = yes; then
+
+$as_echo "#define HAVE_SAME_LONG_DOUBLE_AS_DOUBLE 1" >>confdefs.h
+
+    HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
+  else
+    HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
+  fi
+
+
+
+
+
+
+
+         if test -n "$gl_printf_safe"; then
+
+$as_echo "#define CHECK_PRINTF_SAFE 1" >>confdefs.h
+
+  fi
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports infinite 'long double' arguments" >&5
+$as_echo_n "checking whether printf supports infinite 'long double' arguments... " >&6; }
+if ${gl_cv_func_printf_infinite_long_double+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test "$cross_compiling" = yes; then :
+  case "$host_cpu" in
+                                     # Guess no on ia64, x86_64, i386.
+               ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";;
+               *)
+                 case "$host_os" in
+                                         # Guess yes on glibc systems.
+                   *-gnu* | gnu*)        gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # Guess yes on FreeBSD >= 6.
+                   freebsd[1-5].*)       gl_cv_func_printf_infinite_long_double="guessing no";;
+                   freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # Guess yes on HP-UX >= 11.
+                   hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";;
+                   hpux*)                gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # Guess yes on MSVC, no on mingw.
+                   mingw*)               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_printf_infinite_long_double="guessing yes"
+else
+  gl_cv_func_printf_infinite_long_double="guessing no"
+fi
+rm -f conftest*
+
+                                         ;;
+                                         # If we don't know, assume the worst.
+                   *)                    gl_cv_func_printf_infinite_long_double="guessing no";;
+                 esac
+                 ;;
+             esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#include <stdlib.h>
+#if defined __MACH__ && defined __APPLE__
+/* Avoid a crash on Mac OS X.  */
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <mach/thread_status.h>
+#include <mach/exception.h>
+#include <mach/task.h>
+#include <pthread.h>
+/* The exception port on which our thread listens.  */
+static mach_port_t our_exception_port;
+/* The main function of the thread listening for exceptions of type
+   EXC_BAD_ACCESS.  */
+static void *
+mach_exception_thread (void *arg)
+{
+  /* Buffer for a message to be received.  */
+  struct {
+    mach_msg_header_t head;
+    mach_msg_body_t msgh_body;
+    char data[1024];
+  } msg;
+  mach_msg_return_t retval;
+  /* Wait for a message on the exception port.  */
+  retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg),
+                     our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+  if (retval != MACH_MSG_SUCCESS)
+    abort ();
+  exit (1);
+}
+static void
+nocrash_init (void)
+{
+  mach_port_t self = mach_task_self ();
+  /* Allocate a port on which the thread shall listen for exceptions.  */
+  if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port)
+      == KERN_SUCCESS) {
+    /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html.  */
+    if (mach_port_insert_right (self, our_exception_port, our_exception_port,
+                                MACH_MSG_TYPE_MAKE_SEND)
+        == KERN_SUCCESS) {
+      /* The exceptions we want to catch.  Only EXC_BAD_ACCESS is interesting
+         for us.  */
+      exception_mask_t mask = EXC_MASK_BAD_ACCESS;
+      /* Create the thread listening on the exception port.  */
+      pthread_attr_t attr;
+      pthread_t thread;
+      if (pthread_attr_init (&attr) == 0
+          && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0
+          && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) {
+        pthread_attr_destroy (&attr);
+        /* Replace the exception port info for these exceptions with our own.
+           Note that we replace the exception port for the entire task, not only
+           for a particular thread.  This has the effect that when our exception
+           port gets the message, the thread specific exception port has already
+           been asked, and we don't need to bother about it.
+           See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html.  */
+        task_set_exception_ports (self, mask, our_exception_port,
+                                  EXCEPTION_DEFAULT, MACHINE_THREAD_STATE);
+      }
+    }
+  }
+}
+#elif defined _WIN32 && ! defined __CYGWIN__
+/* Avoid a crash on native Windows.  */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winerror.h>
+static LONG WINAPI
+exception_filter (EXCEPTION_POINTERS *ExceptionInfo)
+{
+  switch (ExceptionInfo->ExceptionRecord->ExceptionCode)
+    {
+    case EXCEPTION_ACCESS_VIOLATION:
+    case EXCEPTION_IN_PAGE_ERROR:
+    case EXCEPTION_STACK_OVERFLOW:
+    case EXCEPTION_GUARD_PAGE:
+    case EXCEPTION_PRIV_INSTRUCTION:
+    case EXCEPTION_ILLEGAL_INSTRUCTION:
+    case EXCEPTION_DATATYPE_MISALIGNMENT:
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+      exit (1);
+    }
+  return EXCEPTION_CONTINUE_SEARCH;
+}
+static void
+nocrash_init (void)
+{
+  SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter);
+}
+#else
+/* Avoid a crash on POSIX systems.  */
+#include <signal.h>
+#include <unistd.h>
+/* A POSIX signal handler.  */
+static void
+exception_handler (int sig)
+{
+  _exit (1);
+}
+static void
+nocrash_init (void)
+{
+#ifdef SIGSEGV
+  signal (SIGSEGV, exception_handler);
+#endif
+#ifdef SIGBUS
+  signal (SIGBUS, exception_handler);
+#endif
+}
+#endif
+
+#include <float.h>
+#include <stdio.h>
+#include <string.h>
+static int
+strisnan (const char *string, size_t start_index, size_t end_index)
+{
+  if (start_index < end_index)
+    {
+      if (string[start_index] == '-')
+        start_index++;
+      if (start_index + 3 <= end_index
+          && memcmp (string + start_index, "nan", 3) == 0)
+        {
+          start_index += 3;
+          if (start_index == end_index
+              || (string[start_index] == '(' && string[end_index - 1] == ')'))
+            return 1;
+        }
+    }
+  return 0;
+}
+static char buf[10000];
+static long double zeroL = 0.0L;
+int main ()
+{
+  int result = 0;
+  nocrash_init();
+  if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lf", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+  if (sprintf (buf, "%Le", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Le", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Le", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+  if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lg", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+/* Representation of an 80-bit 'long double' as an initializer for a sequence
+   of 'unsigned int' words.  */
+# ifdef WORDS_BIGENDIAN
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
+       ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16),   \
+       (unsigned int) (mantlo) << 16                                        \
+     }
+# else
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { mantlo, manthi, exponent }
+# endif
+  { /* Quiet NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+  }
+  {
+    /* Signalling NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+  }
+  { /* Pseudo-NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) <= 0)
+      result |= 4;
+    if (sprintf (buf, "%Le", x.value) <= 0)
+      result |= 4;
+    if (sprintf (buf, "%Lg", x.value) <= 0)
+      result |= 4;
+  }
+  { /* Pseudo-Infinity.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) <= 0)
+      result |= 8;
+    if (sprintf (buf, "%Le", x.value) <= 0)
+      result |= 8;
+    if (sprintf (buf, "%Lg", x.value) <= 0)
+      result |= 8;
+  }
+  { /* Pseudo-Zero.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) <= 0)
+      result |= 16;
+    if (sprintf (buf, "%Le", x.value) <= 0)
+      result |= 16;
+    if (sprintf (buf, "%Lg", x.value) <= 0)
+      result |= 16;
+  }
+  { /* Unnormalized number.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) <= 0)
+      result |= 32;
+    if (sprintf (buf, "%Le", x.value) <= 0)
+      result |= 32;
+    if (sprintf (buf, "%Lg", x.value) <= 0)
+      result |= 32;
+  }
+  { /* Pseudo-Denormal.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) <= 0)
+      result |= 64;
+    if (sprintf (buf, "%Le", x.value) <= 0)
+      result |= 64;
+    if (sprintf (buf, "%Lg", x.value) <= 0)
+      result |= 64;
+  }
+#endif
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_infinite_long_double=yes
+else
+  gl_cv_func_printf_infinite_long_double=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_infinite_long_double" >&5
+$as_echo "$gl_cv_func_printf_infinite_long_double" >&6; }
+      ;;
+    *)
+      gl_cv_func_printf_infinite_long_double="irrelevant"
+      ;;
+  esac
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'a' and 'A' directives" >&5
+$as_echo_n "checking whether printf supports the 'a' and 'A' directives... " >&6; }
+if ${gl_cv_func_printf_directive_a+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc >= 2.5 systems.
+           *-gnu* | gnu*)
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+               #include <features.h>
+               #ifdef __GNU_LIBRARY__
+                #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__
+                 BZ2908
+                #endif
+               #endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "BZ2908" >/dev/null 2>&1; then :
+  gl_cv_func_printf_directive_a="guessing yes"
+else
+  gl_cv_func_printf_directive_a="guessing no"
+fi
+rm -f conftest*
+
+             ;;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_printf_directive_a="guessing no";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_directive_a="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0
+      || (strcmp (buf, "0x1.922p+1 33") != 0
+          && strcmp (buf, "0x3.244p+0 33") != 0
+          && strcmp (buf, "0x6.488p-1 33") != 0
+          && strcmp (buf, "0xc.91p-2 33") != 0))
+    result |= 1;
+  if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0
+      || (strcmp (buf, "-0X1.922P+1 33") != 0
+          && strcmp (buf, "-0X3.244P+0 33") != 0
+          && strcmp (buf, "-0X6.488P-1 33") != 0
+          && strcmp (buf, "-0XC.91P-2 33") != 0))
+    result |= 2;
+  /* This catches a FreeBSD 6.1 bug: it doesn't round.  */
+  if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0
+      || (strcmp (buf, "0x1.83p+0 33") != 0
+          && strcmp (buf, "0x3.05p-1 33") != 0
+          && strcmp (buf, "0x6.0ap-2 33") != 0
+          && strcmp (buf, "0xc.14p-3 33") != 0))
+    result |= 4;
+  /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round.  */
+  if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0
+      || (strcmp (buf, "0x2p+0 33") != 0
+          && strcmp (buf, "0x3p-1 33") != 0
+          && strcmp (buf, "0x6p-2 33") != 0
+          && strcmp (buf, "0xcp-3 33") != 0))
+    result |= 4;
+  /* This catches a FreeBSD 6.1 bug.  See
+     <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */
+  if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0
+      || buf[0] == '0')
+    result |= 8;
+  /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug.  */
+  if (sprintf (buf, "%.1a", 1.999) < 0
+      || (strcmp (buf, "0x1.0p+1") != 0
+          && strcmp (buf, "0x2.0p+0") != 0
+          && strcmp (buf, "0x4.0p-1") != 0
+          && strcmp (buf, "0x8.0p-2") != 0))
+    result |= 16;
+  /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a
+     glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>.  */
+  if (sprintf (buf, "%.1La", 1.999L) < 0
+      || (strcmp (buf, "0x1.0p+1") != 0
+          && strcmp (buf, "0x2.0p+0") != 0
+          && strcmp (buf, "0x4.0p-1") != 0
+          && strcmp (buf, "0x8.0p-2") != 0))
+    result |= 32;
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_directive_a=yes
+else
+  gl_cv_func_printf_directive_a=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_a" >&5
+$as_echo "$gl_cv_func_printf_directive_a" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'F' directive" >&5
+$as_echo_n "checking whether printf supports the 'F' directive... " >&6; }
+if ${gl_cv_func_printf_directive_f+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu* | gnu*)        gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on FreeBSD >= 6.
+           freebsd[1-5].*)       gl_cv_func_printf_directive_f="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_directive_f="guessing no";;
+           darwin*)              gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";;
+           solaris*)             gl_cv_func_printf_directive_f="guessing no";;
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_printf_directive_f="guessing yes"
+else
+  gl_cv_func_printf_directive_f="guessing no"
+fi
+rm -f conftest*
+
+                                 ;;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_directive_f="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0
+      || strcmp (buf, "1234567.000000 33") != 0)
+    result |= 1;
+  if (sprintf (buf, "%F", 1.0 / zero) < 0
+      || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0))
+    result |= 2;
+  /* This catches a Cygwin 1.5.x bug.  */
+  if (sprintf (buf, "%.F", 1234.0) < 0
+      || strcmp (buf, "1234") != 0)
+    result |= 4;
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_directive_f=yes
+else
+  gl_cv_func_printf_directive_f=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_f" >&5
+$as_echo "$gl_cv_func_printf_directive_f" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'n' directive" >&5
+$as_echo_n "checking whether printf supports the 'n' directive... " >&6; }
+if ${gl_cv_func_printf_directive_n+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                   # Guess no on native Windows.
+           mingw*) gl_cv_func_printf_directive_n="guessing no";;
+           *)      gl_cv_func_printf_directive_n="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef _MSC_VER
+/* See page about "Parameter Validation" on msdn.microsoft.com.  */
+static void cdecl
+invalid_parameter_handler (const wchar_t *expression,
+                           const wchar_t *function,
+                           const wchar_t *file, unsigned int line,
+                           uintptr_t dummy)
+{
+  exit (1);
+}
+#endif
+static char fmtstring[10];
+static char buf[100];
+int main ()
+{
+  int count = -1;
+#ifdef _MSC_VER
+  _set_invalid_parameter_handler (invalid_parameter_handler);
+#endif
+  /* Copy the format string.  Some systems (glibc with _FORTIFY_SOURCE=2)
+     support %n in format strings in read-only memory but not in writable
+     memory.  */
+  strcpy (fmtstring, "%d %n");
+  if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0
+      || strcmp (buf, "123 ") != 0
+      || count != 4)
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_directive_n=yes
+else
+  gl_cv_func_printf_directive_n=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_n" >&5
+$as_echo "$gl_cv_func_printf_directive_n" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'ls' directive" >&5
+$as_echo_n "checking whether printf supports the 'ls' directive... " >&6; }
+if ${gl_cv_func_printf_directive_ls+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           openbsd*)       gl_cv_func_printf_directive_ls="guessing no";;
+           irix*)          gl_cv_func_printf_directive_ls="guessing no";;
+           solaris*)       gl_cv_func_printf_directive_ls="guessing no";;
+           cygwin*)        gl_cv_func_printf_directive_ls="guessing no";;
+           beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";;
+                           # Guess yes on native Windows.
+           mingw*)         gl_cv_func_printf_directive_ls="guessing yes";;
+           *)              gl_cv_func_printf_directive_ls="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#include <string.h>
+int main ()
+{
+  int result = 0;
+  char buf[100];
+  /* Test whether %ls works at all.
+     This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on
+     Cygwin 1.5.  */
+  {
+    static const wchar_t wstring[] = { 'a', 'b', 'c', 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%ls", wstring) < 0
+        || strcmp (buf, "abc") != 0)
+      result |= 1;
+  }
+  /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an
+     assertion failure inside libc), but not on OpenBSD 4.0.  */
+  {
+    static const wchar_t wstring[] = { 'a', 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%ls", wstring) < 0
+        || strcmp (buf, "a") != 0)
+      result |= 2;
+  }
+  /* Test whether precisions in %ls are supported as specified in ISO C 99
+     section 7.19.6.1:
+       "If a precision is specified, no more than that many bytes are written
+        (including shift sequences, if any), and the array shall contain a
+        null wide character if, to equal the multibyte character sequence
+        length given by the precision, the function would need to access a
+        wide character one past the end of the array."
+     This test fails on Solaris 10.  */
+  {
+    static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%.2ls", wstring) < 0
+        || strcmp (buf, "ab") != 0)
+      result |= 8;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_directive_ls=yes
+else
+  gl_cv_func_printf_directive_ls=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_directive_ls" >&5
+$as_echo "$gl_cv_func_printf_directive_ls" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5
+$as_echo_n "checking whether printf supports POSIX/XSI format strings with positions... " >&6; }
+if ${gl_cv_func_printf_positions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
+                         gl_cv_func_printf_positions="guessing no";;
+           beos*)        gl_cv_func_printf_positions="guessing no";;
+                         # Guess no on native Windows.
+           mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
+           *)            gl_cv_func_printf_positions="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_positions=yes
+else
+  gl_cv_func_printf_positions=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_positions" >&5
+$as_echo "$gl_cv_func_printf_positions" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the grouping flag" >&5
+$as_echo_n "checking whether printf supports the grouping flag... " >&6; }
+if ${gl_cv_func_printf_flag_grouping+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           cygwin*)      gl_cv_func_printf_flag_grouping="guessing no";;
+           netbsd*)      gl_cv_func_printf_flag_grouping="guessing no";;
+                         # Guess no on native Windows.
+           mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";;
+           *)            gl_cv_func_printf_flag_grouping="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+int main ()
+{
+  if (sprintf (buf, "%'d %d", 1234567, 99) < 0
+      || buf[strlen (buf) - 1] != '9')
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_flag_grouping=yes
+else
+  gl_cv_func_printf_flag_grouping=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_grouping" >&5
+$as_echo "$gl_cv_func_printf_flag_grouping" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the left-adjust flag correctly" >&5
+$as_echo_n "checking whether printf supports the left-adjust flag correctly... " >&6; }
+if ${gl_cv_func_printf_flag_leftadjust+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                    # Guess yes on HP-UX 11.
+           hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
+                    # Guess no on HP-UX 10 and older.
+           hpux*)   gl_cv_func_printf_flag_leftadjust="guessing no";;
+                    # Guess yes on native Windows.
+           mingw*)  gl_cv_func_printf_flag_leftadjust="guessing yes";;
+                    # Guess yes otherwise.
+           *)       gl_cv_func_printf_flag_leftadjust="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+int main ()
+{
+  /* Check that a '-' flag is not annihilated by a negative width.  */
+  if (sprintf (buf, "a%-*sc", -3, "b") < 0
+      || strcmp (buf, "ab  c") != 0)
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_flag_leftadjust=yes
+else
+  gl_cv_func_printf_flag_leftadjust=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_leftadjust" >&5
+$as_echo "$gl_cv_func_printf_flag_leftadjust" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports the zero flag correctly" >&5
+$as_echo_n "checking whether printf supports the zero flag correctly... " >&6; }
+if ${gl_cv_func_printf_flag_zero+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
+                          # Guess yes on BeOS.
+           beos*)         gl_cv_func_printf_flag_zero="guessing yes";;
+                          # Guess no on native Windows.
+           mingw*)        gl_cv_func_printf_flag_zero="guessing no";;
+                          # If we don't know, assume the worst.
+           *)             gl_cv_func_printf_flag_zero="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0
+      || (strcmp (buf, "       inf") != 0
+          && strcmp (buf, "  infinity") != 0))
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_flag_zero=yes
+else
+  gl_cv_func_printf_flag_zero=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_flag_zero" >&5
+$as_echo "$gl_cv_func_printf_flag_zero" >&6; }
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports large precisions" >&5
+$as_echo_n "checking whether printf supports large precisions... " >&6; }
+if ${gl_cv_func_printf_precision+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           # Guess no only on Solaris, native Windows, and BeOS systems.
+           solaris*)     gl_cv_func_printf_precision="guessing no" ;;
+           mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;;
+           beos*)        gl_cv_func_printf_precision="guessing no" ;;
+           *)            gl_cv_func_printf_precision="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+static char buf[5000];
+int main ()
+{
+  int result = 0;
+#ifdef __BEOS__
+  /* On BeOS, this would crash and show a dialog box.  Avoid the crash.  */
+  return 1;
+#endif
+  if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3)
+    result |= 1;
+  if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5)
+    result |= 2;
+  if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5
+      || buf[0] != '1')
+    result |= 4;
+  if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5
+      || buf[0] != '1')
+    result |= 4;
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_precision=yes
+else
+  gl_cv_func_printf_precision=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_precision" >&5
+$as_echo "$gl_cv_func_printf_precision" >&6; }
+
+
+    gl_cv_c_multiarch=no
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+         not a universal capable compiler
+        #endif
+        typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+               arch=
+     prev=
+     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
+       if test -n "$prev"; then
+         case $word in
+           i?86 | x86_64 | ppc | ppc64)
+             if test -z "$arch" || test "$arch" = "$word"; then
+               arch="$word"
+             else
+               gl_cv_c_multiarch=yes
+             fi
+             ;;
+         esac
+         prev=
+       else
+         if test "x$word" = "x-arch"; then
+           prev=arch
+         fi
+       fi
+     done
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  if test $gl_cv_c_multiarch = yes; then
+    APPLE_UNIVERSAL_BUILD=1
+  else
+    APPLE_UNIVERSAL_BUILD=0
+  fi
+
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf survives out-of-memory conditions" >&5
+$as_echo_n "checking whether printf survives out-of-memory conditions... " >&6; }
+if ${gl_cv_func_printf_enomem+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      gl_cv_func_printf_enomem="guessing no"
+      if test "$cross_compiling" = no; then
+        if test $APPLE_UNIVERSAL_BUILD = 0; then
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#include <stdlib.h>
+#if defined __MACH__ && defined __APPLE__
+/* Avoid a crash on Mac OS X.  */
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <mach/thread_status.h>
+#include <mach/exception.h>
+#include <mach/task.h>
+#include <pthread.h>
+/* The exception port on which our thread listens.  */
+static mach_port_t our_exception_port;
+/* The main function of the thread listening for exceptions of type
+   EXC_BAD_ACCESS.  */
+static void *
+mach_exception_thread (void *arg)
+{
+  /* Buffer for a message to be received.  */
+  struct {
+    mach_msg_header_t head;
+    mach_msg_body_t msgh_body;
+    char data1024;
+  } msg;
+  mach_msg_return_t retval;
+  /* Wait for a message on the exception port.  */
+  retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg),
+                     our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+  if (retval != MACH_MSG_SUCCESS)
+    abort ();
+  exit (1);
+}
+static void
+nocrash_init (void)
+{
+  mach_port_t self = mach_task_self ();
+  /* Allocate a port on which the thread shall listen for exceptions.  */
+  if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port)
+      == KERN_SUCCESS) {
+    /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html.  */
+    if (mach_port_insert_right (self, our_exception_port, our_exception_port,
+                                MACH_MSG_TYPE_MAKE_SEND)
+        == KERN_SUCCESS) {
+      /* The exceptions we want to catch.  Only EXC_BAD_ACCESS is interesting
+         for us.  */
+      exception_mask_t mask = EXC_MASK_BAD_ACCESS;
+      /* Create the thread listening on the exception port.  */
+      pthread_attr_t attr;
+      pthread_t thread;
+      if (pthread_attr_init (&attr) == 0
+          && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0
+          && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) {
+        pthread_attr_destroy (&attr);
+        /* Replace the exception port info for these exceptions with our own.
+           Note that we replace the exception port for the entire task, not only
+           for a particular thread.  This has the effect that when our exception
+           port gets the message, the thread specific exception port has already
+           been asked, and we don't need to bother about it.
+           See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html.  */
+        task_set_exception_ports (self, mask, our_exception_port,
+                                  EXCEPTION_DEFAULT, MACHINE_THREAD_STATE);
+      }
+    }
+  }
+}
+#elif defined _WIN32 && ! defined __CYGWIN__
+/* Avoid a crash on native Windows.  */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winerror.h>
+static LONG WINAPI
+exception_filter (EXCEPTION_POINTERS *ExceptionInfo)
+{
+  switch (ExceptionInfo->ExceptionRecord->ExceptionCode)
+    {
+    case EXCEPTION_ACCESS_VIOLATION:
+    case EXCEPTION_IN_PAGE_ERROR:
+    case EXCEPTION_STACK_OVERFLOW:
+    case EXCEPTION_GUARD_PAGE:
+    case EXCEPTION_PRIV_INSTRUCTION:
+    case EXCEPTION_ILLEGAL_INSTRUCTION:
+    case EXCEPTION_DATATYPE_MISALIGNMENT:
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+      exit (1);
+    }
+  return EXCEPTION_CONTINUE_SEARCH;
+}
+static void
+nocrash_init (void)
+{
+  SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter);
+}
+#else
+/* Avoid a crash on POSIX systems.  */
+#include <signal.h>
+#include <unistd.h>
+/* A POSIX signal handler.  */
+static void
+exception_handler (int sig)
+{
+  _exit (1);
+}
+static void
+nocrash_init (void)
+{
+#ifdef SIGSEGV
+  signal (SIGSEGV, exception_handler);
+#endif
+#ifdef SIGBUS
+  signal (SIGBUS, exception_handler);
+#endif
+}
+#endif
+
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <errno.h>
+int main()
+{
+  struct rlimit limit;
+  int ret;
+  nocrash_init ();
+  /* Some printf implementations allocate temporary space with malloc.  */
+  /* On BSD systems, malloc() is limited by RLIMIT_DATA.  */
+#ifdef RLIMIT_DATA
+  if (getrlimit (RLIMIT_DATA, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_DATA, &limit) < 0)
+    return 77;
+#endif
+  /* On Linux systems, malloc() is limited by RLIMIT_AS.  */
+#ifdef RLIMIT_AS
+  if (getrlimit (RLIMIT_AS, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_AS, &limit) < 0)
+    return 77;
+#endif
+  /* Some printf implementations allocate temporary space on the stack.  */
+#ifdef RLIMIT_STACK
+  if (getrlimit (RLIMIT_STACK, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_STACK, &limit) < 0)
+    return 77;
+#endif
+  ret = printf ("%.5000000f", 1.0);
+  return !(ret == 5000002 || (ret < 0 && errno == ENOMEM));
+}
+
+_ACEOF
+          if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5
+  (eval $ac_link) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; } && test -s conftest$ac_exeext; then
+            (./conftest 2>&5
+             result=$?
+             $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $result" >&5
+             if test $result != 0 && test $result != 77; then result=1; fi
+             exit $result
+            ) >/dev/null 2>/dev/null
+            case $? in
+              0) gl_cv_func_printf_enomem="yes" ;;
+              77) gl_cv_func_printf_enomem="guessing no" ;;
+              *) gl_cv_func_printf_enomem="no" ;;
+            esac
+          else
+            gl_cv_func_printf_enomem="guessing no"
+          fi
+          rm -fr conftest*
+        else
+                                        gl_cv_func_printf_enomem="guessing no"
+        fi
+      fi
+      if test "$gl_cv_func_printf_enomem" = "guessing no"; then
+        case "$host_os" in
+                         # Guess yes on glibc systems.
+          *-gnu* | gnu*) gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on Solaris.
+          solaris*)      gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on AIX.
+          aix*)          gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on HP-UX/hppa.
+          hpux*)         case "$host_cpu" in
+                           hppa*) gl_cv_func_printf_enomem="guessing yes";;
+                           *)     gl_cv_func_printf_enomem="guessing no";;
+                         esac
+                         ;;
+                         # Guess yes on IRIX.
+          irix*)         gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on OSF/1.
+          osf*)          gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on BeOS.
+          beos*)         gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on Haiku.
+          haiku*)        gl_cv_func_printf_enomem="guessing yes";;
+                         # If we don't know, assume the worst.
+          *)             gl_cv_func_printf_enomem="guessing no";;
+        esac
+      fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_enomem" >&5
+$as_echo "$gl_cv_func_printf_enomem" >&6; }
+
+
+
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+  for ac_func in $ac_func_list
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
+$as_echo_n "checking for unsigned long long int... " >&6; }
+if ${ac_cv_type_unsigned_long_long_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_unsigned_long_long_int=yes
+     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;
+int
+main ()
+{
+/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  ac_cv_type_unsigned_long_long_int=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+     fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
+$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+
+$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
+$as_echo_n "checking for long long int... " >&6; }
+if ${ac_cv_type_long_long_int+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_type_long_long_int=yes
+      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+        if test $ac_cv_type_long_long_int = yes; then
+                                        if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+                 #ifndef LLONG_MAX
+                 # define HALF \
+                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                 # define LLONG_MAX (HALF - 1 + HALF)
+                 #endif
+int
+main ()
+{
+long long int n = 1;
+                 int i;
+                 for (i = 0; ; i++)
+                   {
+                     long long int m = n << i;
+                     if (m >> i != n)
+                       return 1;
+                     if (LLONG_MAX / 2 < m)
+                       break;
+                   }
+                 return 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+
+else
+  ac_cv_type_long_long_int=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+        fi
+      fi
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
+$as_echo "$ac_cv_type_long_long_int" >&6; }
+  if test $ac_cv_type_long_long_int = yes; then
+
+$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
+$as_echo_n "checking for wchar_t... " >&6; }
+if ${gt_cv_c_wchar_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+            wchar_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_c_wchar_t=yes
+else
+  gt_cv_c_wchar_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
+$as_echo "$gt_cv_c_wchar_t" >&6; }
+  if test $gt_cv_c_wchar_t = yes; then
+
+$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
+$as_echo_n "checking for wint_t... " >&6; }
+if ${gt_cv_c_wint_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+            wint_t foo = (wchar_t)'\0';
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_c_wint_t=yes
+else
+  gt_cv_c_wint_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
+$as_echo "$gt_cv_c_wint_t" >&6; }
+  if test $gt_cv_c_wint_t = yes; then
+
+$as_echo "#define HAVE_WINT_T 1" >>confdefs.h
+
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wint_t is too small" >&5
+$as_echo_n "checking whether wint_t is too small... " >&6; }
+if ${gl_cv_type_wint_t_too_small+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+              int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1];
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_wint_t_too_small=no
+else
+  gl_cv_type_wint_t_too_small=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wint_t_too_small" >&5
+$as_echo "$gl_cv_type_wint_t_too_small" >&6; }
+    if test $gl_cv_type_wint_t_too_small = yes; then
+      GNULIB_OVERRIDES_WINT_T=1
+    else
+      GNULIB_OVERRIDES_WINT_T=0
+    fi
+  else
+    GNULIB_OVERRIDES_WINT_T=0
+  fi
+
+
+
+
+
+  for ac_header in $ac_header_list
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
+"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+
+
+
+
+  if test $ac_cv_header_features_h = yes; then
+    HAVE_FEATURES_H=1
+  else
+    HAVE_FEATURES_H=0
+  fi
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5
+$as_echo_n "checking for intmax_t... " >&6; }
+if ${gt_cv_c_intmax_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+
+int
+main ()
+{
+intmax_t x = -1; return !x;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_c_intmax_t=yes
+else
+  gt_cv_c_intmax_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_intmax_t" >&5
+$as_echo "$gt_cv_c_intmax_t" >&6; }
+  if test $gt_cv_c_intmax_t = yes; then
+
+$as_echo "#define HAVE_INTMAX_T 1" >>confdefs.h
+
+  else
+
+    test $ac_cv_type_long_long_int = yes \
+      && ac_type='long long' \
+      || ac_type='long'
+
+cat >>confdefs.h <<_ACEOF
+#define intmax_t $ac_type
+_ACEOF
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5
+$as_echo_n "checking where to find the exponent in a 'double'... " >&6; }
+if ${gl_cv_cc_double_expbit0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+                                                                      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if defined arm || defined __arm || defined __arm__
+  mixed_endianness
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "mixed_endianness" >/dev/null 2>&1; then :
+  gl_cv_cc_double_expbit0="unknown"
+else
+
+                                                         :
+if ${ac_cv_c_bigendian+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_bigendian=unknown
+    # See if we're dealing with a universal compiler.
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __APPLE_CC__
+              not a universal capable compiler
+            #endif
+            typedef int dummy;
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+       # Check for potential -arch flags.  It is not universal unless
+       # there are at least two -arch flags with different values.
+       ac_arch=
+       ac_prev=
+       for ac_word in $CC $CFLAGS $CPPFLAGS $LDFLAGS; do
+        if test -n "$ac_prev"; then
+          case $ac_word in
+            i?86 | x86_64 | ppc | ppc64)
+              if test -z "$ac_arch" || test "$ac_arch" = "$ac_word"; then
+                ac_arch=$ac_word
+              else
+                ac_cv_c_bigendian=universal
+                break
+              fi
+              ;;
+          esac
+          ac_prev=
+        elif test "x$ac_word" = "x-arch"; then
+          ac_prev=arch
+        fi
+       done
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if sys/param.h defines the BYTE_ORDER macro.
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+            #include <sys/param.h>
+
+int
+main ()
+{
+#if ! (defined BYTE_ORDER && defined BIG_ENDIAN \
+                    && defined LITTLE_ENDIAN && BYTE_ORDER && BIG_ENDIAN \
+                    && LITTLE_ENDIAN)
+             bogus endian macros
+            #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+               #include <sys/param.h>
+
+int
+main ()
+{
+#if BYTE_ORDER != BIG_ENDIAN
+                not big endian
+               #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # See if <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris).
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#if ! (defined _LITTLE_ENDIAN || defined _BIG_ENDIAN)
+             bogus endian macros
+            #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # It does; now see whether it defined to _BIG_ENDIAN or not.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+
+int
+main ()
+{
+#ifndef _BIG_ENDIAN
+                not big endian
+               #endif
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_bigendian=yes
+else
+  ac_cv_c_bigendian=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+    fi
+    if test $ac_cv_c_bigendian = unknown; then
+      # Compile a test program.
+      if test "$cross_compiling" = yes; then :
+  # Try to guess by grepping values from an object file.
+        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+short int ascii_mm[] =
+                 { 0x4249, 0x4765, 0x6E44, 0x6961, 0x6E53, 0x7953, 0 };
+               short int ascii_ii[] =
+                 { 0x694C, 0x5454, 0x656C, 0x6E45, 0x6944, 0x6E61, 0 };
+               int use_ascii (int i) {
+                 return ascii_mm[i] + ascii_ii[i];
+               }
+               short int ebcdic_ii[] =
+                 { 0x89D3, 0xE3E3, 0x8593, 0x95C5, 0x89C4, 0x9581, 0 };
+               short int ebcdic_mm[] =
+                 { 0xC2C9, 0xC785, 0x95C4, 0x8981, 0x95E2, 0xA8E2, 0 };
+               int use_ebcdic (int i) {
+                 return ebcdic_mm[i] + ebcdic_ii[i];
+               }
+               extern int foo;
+
+int
+main ()
+{
+return use_ascii (foo) == use_ebcdic (foo);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  if grep BIGenDianSyS conftest.$ac_objext >/dev/null; then
+             ac_cv_c_bigendian=yes
+           fi
+           if grep LiTTleEnDian conftest.$ac_objext >/dev/null ; then
+             if test "$ac_cv_c_bigendian" = unknown; then
+               ac_cv_c_bigendian=no
+             else
+               # finding both strings is unlikely to happen, but who knows?
+               ac_cv_c_bigendian=unknown
+             fi
+           fi
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+$ac_includes_default
+int
+main ()
+{
+
+            /* Are we little or big endian?  From Harbison&Steele.  */
+            union
+            {
+              long int l;
+              char c[sizeof (long int)];
+            } u;
+            u.l = 1;
+            return u.c[sizeof (long int) - 1] == 1;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  ac_cv_c_bigendian=no
+else
+  ac_cv_c_bigendian=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+    fi
+fi
+:
+ case $ac_cv_c_bigendian in #(
+   yes)
+     gl_cv_cc_double_expbit0="word 0 bit 20";; #(
+   no)
+     gl_cv_cc_double_expbit0="word 1 bit 20" ;; #(
+   universal)
+
+$as_echo "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h
+
+     ;; #(
+   *)
+     gl_cv_cc_double_expbit0="unknown" ;;
+ esac
+
+
+fi
+rm -f conftest*
+
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { double value; unsigned int word[NWORDS]; } memory_double;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (double x)
+{
+  memory_double m;
+  size_t i;
+  /* Clear it first, in case sizeof (double) < sizeof (memory_double).  */
+  memset (&m, 0, sizeof (memory_double));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25);
+  add_to_ored_words (0.5);
+  add_to_ored_words (1.0);
+  add_to_ored_words (2.0);
+  add_to_ored_words (4.0);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_double_expbit0=`cat conftest.out`
+else
+  gl_cv_cc_double_expbit0="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5
+$as_echo "$gl_cv_cc_double_expbit0" >&6; }
+  case "$gl_cv_cc_double_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define DBL_EXPBIT0_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define DBL_EXPBIT0_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf returns a byte count as in C99" >&5
+$as_echo_n "checking whether snprintf returns a byte count as in C99... " >&6; }
+if ${gl_cv_func_snprintf_retval_c99+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu* | gnu*)        gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4].*)       gl_cv_func_snprintf_retval_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_retval_c99="guessing no";;
+           darwin*)              gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_snprintf_retval_c99="guessing no";;
+           openbsd*)             gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
+           solaris*)             gl_cv_func_printf_sizes_c99="guessing no";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_retval_c99="guessing no";;
+           aix*)                 gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_retval_c99="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_snprintf_retval_c99="guessing yes"
+else
+  gl_cv_func_snprintf_retval_c99="guessing no"
+fi
+rm -f conftest*
+
+                                 ;;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_retval_c99="guessing no";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char buf[100];
+int main ()
+{
+  strcpy (buf, "ABCDEF");
+  if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7)
+    return 1;
+  if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7)
+    return 2;
+  if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7)
+    return 3;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_retval_c99=yes
+else
+  gl_cv_func_snprintf_retval_c99=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_retval_c99" >&5
+$as_echo "$gl_cv_func_snprintf_retval_c99" >&6; }
+
+
+
+
+
+
+  for ac_func in snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb
+do :
+  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
+ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
+if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+done
+
+      ac_fn_c_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include <stdio.h>
+"
+if test "x$ac_cv_have_decl__snprintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL__SNPRINTF $ac_have_decl
+_ACEOF
+
+
+
+  case "$gl_cv_func_snprintf_retval_c99" in
+    *yes)
+
+$as_echo "#define HAVE_SNPRINTF_RETVAL_C99 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+  GNULIB_DPRINTF=0;
+  GNULIB_FCLOSE=0;
+  GNULIB_FDOPEN=0;
+  GNULIB_FFLUSH=0;
+  GNULIB_FGETC=0;
+  GNULIB_FGETS=0;
+  GNULIB_FOPEN=0;
+  GNULIB_FPRINTF=0;
+  GNULIB_FPRINTF_POSIX=0;
+  GNULIB_FPURGE=0;
+  GNULIB_FPUTC=0;
+  GNULIB_FPUTS=0;
+  GNULIB_FREAD=0;
+  GNULIB_FREOPEN=0;
+  GNULIB_FSCANF=0;
+  GNULIB_FSEEK=0;
+  GNULIB_FSEEKO=0;
+  GNULIB_FTELL=0;
+  GNULIB_FTELLO=0;
+  GNULIB_FWRITE=0;
+  GNULIB_GETC=0;
+  GNULIB_GETCHAR=0;
+  GNULIB_GETDELIM=0;
+  GNULIB_GETLINE=0;
+  GNULIB_OBSTACK_PRINTF=0;
+  GNULIB_OBSTACK_PRINTF_POSIX=0;
+  GNULIB_PCLOSE=0;
+  GNULIB_PERROR=0;
+  GNULIB_POPEN=0;
+  GNULIB_PRINTF=0;
+  GNULIB_PRINTF_POSIX=0;
+  GNULIB_PUTC=0;
+  GNULIB_PUTCHAR=0;
+  GNULIB_PUTS=0;
+  GNULIB_REMOVE=0;
+  GNULIB_RENAME=0;
+  GNULIB_RENAMEAT=0;
+  GNULIB_SCANF=0;
+  GNULIB_SNPRINTF=0;
+  GNULIB_SPRINTF_POSIX=0;
+  GNULIB_STDIO_H_NONBLOCKING=0;
+  GNULIB_STDIO_H_SIGPIPE=0;
+  GNULIB_TMPFILE=0;
+  GNULIB_VASPRINTF=0;
+  GNULIB_VFSCANF=0;
+  GNULIB_VSCANF=0;
+  GNULIB_VDPRINTF=0;
+  GNULIB_VFPRINTF=0;
+  GNULIB_VFPRINTF_POSIX=0;
+  GNULIB_VPRINTF=0;
+  GNULIB_VPRINTF_POSIX=0;
+  GNULIB_VSNPRINTF=0;
+  GNULIB_VSPRINTF_POSIX=0;
+    HAVE_DECL_FPURGE=1;
+  HAVE_DECL_FSEEKO=1;
+  HAVE_DECL_FTELLO=1;
+  HAVE_DECL_GETDELIM=1;
+  HAVE_DECL_GETLINE=1;
+  HAVE_DECL_OBSTACK_PRINTF=1;
+  HAVE_DECL_SNPRINTF=1;
+  HAVE_DECL_VSNPRINTF=1;
+  HAVE_DPRINTF=1;
+  HAVE_FSEEKO=1;
+  HAVE_FTELLO=1;
+  HAVE_PCLOSE=1;
+  HAVE_POPEN=1;
+  HAVE_RENAMEAT=1;
+  HAVE_VASPRINTF=1;
+  HAVE_VDPRINTF=1;
+  REPLACE_DPRINTF=0;
+  REPLACE_FCLOSE=0;
+  REPLACE_FDOPEN=0;
+  REPLACE_FFLUSH=0;
+  REPLACE_FOPEN=0;
+  REPLACE_FPRINTF=0;
+  REPLACE_FPURGE=0;
+  REPLACE_FREOPEN=0;
+  REPLACE_FSEEK=0;
+  REPLACE_FSEEKO=0;
+  REPLACE_FTELL=0;
+  REPLACE_FTELLO=0;
+  REPLACE_GETDELIM=0;
+  REPLACE_GETLINE=0;
+  REPLACE_OBSTACK_PRINTF=0;
+  REPLACE_PERROR=0;
+  REPLACE_POPEN=0;
+  REPLACE_PRINTF=0;
+  REPLACE_REMOVE=0;
+  REPLACE_RENAME=0;
+  REPLACE_RENAMEAT=0;
+  REPLACE_SNPRINTF=0;
+  REPLACE_SPRINTF=0;
+  REPLACE_STDIO_READ_FUNCS=0;
+  REPLACE_STDIO_WRITE_FUNCS=0;
+  REPLACE_TMPFILE=0;
+  REPLACE_VASPRINTF=0;
+  REPLACE_VDPRINTF=0;
+  REPLACE_VFPRINTF=0;
+  REPLACE_VPRINTF=0;
+  REPLACE_VSNPRINTF=0;
+  REPLACE_VSPRINTF=0;
+
+
+  GNULIB_ACOSF=0;
+  GNULIB_ACOSL=0;
+  GNULIB_ASINF=0;
+  GNULIB_ASINL=0;
+  GNULIB_ATANF=0;
+  GNULIB_ATANL=0;
+  GNULIB_ATAN2F=0;
+  GNULIB_CBRT=0;
+  GNULIB_CBRTF=0;
+  GNULIB_CBRTL=0;
+  GNULIB_CEIL=0;
+  GNULIB_CEILF=0;
+  GNULIB_CEILL=0;
+  GNULIB_COPYSIGN=0;
+  GNULIB_COPYSIGNF=0;
+  GNULIB_COPYSIGNL=0;
+  GNULIB_COSF=0;
+  GNULIB_COSL=0;
+  GNULIB_COSHF=0;
+  GNULIB_EXPF=0;
+  GNULIB_EXPL=0;
+  GNULIB_EXP2=0;
+  GNULIB_EXP2F=0;
+  GNULIB_EXP2L=0;
+  GNULIB_EXPM1=0;
+  GNULIB_EXPM1F=0;
+  GNULIB_EXPM1L=0;
+  GNULIB_FABSF=0;
+  GNULIB_FABSL=0;
+  GNULIB_FLOOR=0;
+  GNULIB_FLOORF=0;
+  GNULIB_FLOORL=0;
+  GNULIB_FMA=0;
+  GNULIB_FMAF=0;
+  GNULIB_FMAL=0;
+  GNULIB_FMOD=0;
+  GNULIB_FMODF=0;
+  GNULIB_FMODL=0;
+  GNULIB_FREXPF=0;
+  GNULIB_FREXP=0;
+  GNULIB_FREXPL=0;
+  GNULIB_HYPOT=0;
+  GNULIB_HYPOTF=0;
+  GNULIB_HYPOTL=0;
+  GNULIB_ILOGB=0;
+  GNULIB_ILOGBF=0;
+  GNULIB_ILOGBL=0;
+  GNULIB_ISFINITE=0;
+  GNULIB_ISINF=0;
+  GNULIB_ISNAN=0;
+  GNULIB_ISNANF=0;
+  GNULIB_ISNAND=0;
+  GNULIB_ISNANL=0;
+  GNULIB_LDEXPF=0;
+  GNULIB_LDEXPL=0;
+  GNULIB_LOG=0;
+  GNULIB_LOGF=0;
+  GNULIB_LOGL=0;
+  GNULIB_LOG10=0;
+  GNULIB_LOG10F=0;
+  GNULIB_LOG10L=0;
+  GNULIB_LOG1P=0;
+  GNULIB_LOG1PF=0;
+  GNULIB_LOG1PL=0;
+  GNULIB_LOG2=0;
+  GNULIB_LOG2F=0;
+  GNULIB_LOG2L=0;
+  GNULIB_LOGB=0;
+  GNULIB_LOGBF=0;
+  GNULIB_LOGBL=0;
+  GNULIB_MODF=0;
+  GNULIB_MODFF=0;
+  GNULIB_MODFL=0;
+  GNULIB_POWF=0;
+  GNULIB_REMAINDER=0;
+  GNULIB_REMAINDERF=0;
+  GNULIB_REMAINDERL=0;
+  GNULIB_RINT=0;
+  GNULIB_RINTF=0;
+  GNULIB_RINTL=0;
+  GNULIB_ROUND=0;
+  GNULIB_ROUNDF=0;
+  GNULIB_ROUNDL=0;
+  GNULIB_SIGNBIT=0;
+  GNULIB_SINF=0;
+  GNULIB_SINL=0;
+  GNULIB_SINHF=0;
+  GNULIB_SQRTF=0;
+  GNULIB_SQRTL=0;
+  GNULIB_TANF=0;
+  GNULIB_TANL=0;
+  GNULIB_TANHF=0;
+  GNULIB_TRUNC=0;
+  GNULIB_TRUNCF=0;
+  GNULIB_TRUNCL=0;
+    HAVE_ACOSF=1;
+  HAVE_ACOSL=1;
+  HAVE_ASINF=1;
+  HAVE_ASINL=1;
+  HAVE_ATANF=1;
+  HAVE_ATANL=1;
+  HAVE_ATAN2F=1;
+  HAVE_CBRT=1;
+  HAVE_CBRTF=1;
+  HAVE_CBRTL=1;
+  HAVE_COPYSIGN=1;
+  HAVE_COPYSIGNL=1;
+  HAVE_COSF=1;
+  HAVE_COSL=1;
+  HAVE_COSHF=1;
+  HAVE_EXPF=1;
+  HAVE_EXPL=1;
+  HAVE_EXPM1=1;
+  HAVE_EXPM1F=1;
+  HAVE_FABSF=1;
+  HAVE_FABSL=1;
+  HAVE_FMA=1;
+  HAVE_FMAF=1;
+  HAVE_FMAL=1;
+  HAVE_FMODF=1;
+  HAVE_FMODL=1;
+  HAVE_FREXPF=1;
+  HAVE_HYPOTF=1;
+  HAVE_HYPOTL=1;
+  HAVE_ILOGB=1;
+  HAVE_ILOGBF=1;
+  HAVE_ILOGBL=1;
+  HAVE_ISNANF=1;
+  HAVE_ISNAND=1;
+  HAVE_ISNANL=1;
+  HAVE_LDEXPF=1;
+  HAVE_LOGF=1;
+  HAVE_LOGL=1;
+  HAVE_LOG10F=1;
+  HAVE_LOG10L=1;
+  HAVE_LOG1P=1;
+  HAVE_LOG1PF=1;
+  HAVE_LOG1PL=1;
+  HAVE_LOGBF=1;
+  HAVE_LOGBL=1;
+  HAVE_MODFF=1;
+  HAVE_MODFL=1;
+  HAVE_POWF=1;
+  HAVE_REMAINDER=1;
+  HAVE_REMAINDERF=1;
+  HAVE_RINT=1;
+  HAVE_RINTL=1;
+  HAVE_SINF=1;
+  HAVE_SINL=1;
+  HAVE_SINHF=1;
+  HAVE_SQRTF=1;
+  HAVE_SQRTL=1;
+  HAVE_TANF=1;
+  HAVE_TANL=1;
+  HAVE_TANHF=1;
+  HAVE_DECL_ACOSL=1;
+  HAVE_DECL_ASINL=1;
+  HAVE_DECL_ATANL=1;
+  HAVE_DECL_CBRTF=1;
+  HAVE_DECL_CBRTL=1;
+  HAVE_DECL_CEILF=1;
+  HAVE_DECL_CEILL=1;
+  HAVE_DECL_COPYSIGNF=1;
+  HAVE_DECL_COSL=1;
+  HAVE_DECL_EXPL=1;
+  HAVE_DECL_EXP2=1;
+  HAVE_DECL_EXP2F=1;
+  HAVE_DECL_EXP2L=1;
+  HAVE_DECL_EXPM1L=1;
+  HAVE_DECL_FLOORF=1;
+  HAVE_DECL_FLOORL=1;
+  HAVE_DECL_FREXPL=1;
+  HAVE_DECL_LDEXPL=1;
+  HAVE_DECL_LOGL=1;
+  HAVE_DECL_LOG10L=1;
+  HAVE_DECL_LOG2=1;
+  HAVE_DECL_LOG2F=1;
+  HAVE_DECL_LOG2L=1;
+  HAVE_DECL_LOGB=1;
+  HAVE_DECL_REMAINDER=1;
+  HAVE_DECL_REMAINDERL=1;
+  HAVE_DECL_RINTF=1;
+  HAVE_DECL_ROUND=1;
+  HAVE_DECL_ROUNDF=1;
+  HAVE_DECL_ROUNDL=1;
+  HAVE_DECL_SINL=1;
+  HAVE_DECL_SQRTL=1;
+  HAVE_DECL_TANL=1;
+  HAVE_DECL_TRUNC=1;
+  HAVE_DECL_TRUNCF=1;
+  HAVE_DECL_TRUNCL=1;
+  REPLACE_ACOSF=0;
+  REPLACE_ASINF=0;
+  REPLACE_ATANF=0;
+  REPLACE_ATAN2F=0;
+  REPLACE_CBRTF=0;
+  REPLACE_CBRTL=0;
+  REPLACE_CEIL=0;
+  REPLACE_CEILF=0;
+  REPLACE_CEILL=0;
+  REPLACE_COSF=0;
+  REPLACE_COSHF=0;
+  REPLACE_EXPF=0;
+  REPLACE_EXPM1=0;
+  REPLACE_EXPM1F=0;
+  REPLACE_EXP2=0;
+  REPLACE_EXP2L=0;
+  REPLACE_FABSL=0;
+  REPLACE_FLOOR=0;
+  REPLACE_FLOORF=0;
+  REPLACE_FLOORL=0;
+  REPLACE_FMA=0;
+  REPLACE_FMAF=0;
+  REPLACE_FMAL=0;
+  REPLACE_FMOD=0;
+  REPLACE_FMODF=0;
+  REPLACE_FMODL=0;
+  REPLACE_FREXPF=0;
+  REPLACE_FREXP=0;
+  REPLACE_FREXPL=0;
+  REPLACE_HUGE_VAL=0;
+  REPLACE_HYPOT=0;
+  REPLACE_HYPOTF=0;
+  REPLACE_HYPOTL=0;
+  REPLACE_ILOGB=0;
+  REPLACE_ILOGBF=0;
+  REPLACE_ILOGBL=0;
+  REPLACE_ISFINITE=0;
+  REPLACE_ISINF=0;
+  REPLACE_ISNAN=0;
+  REPLACE_LDEXPL=0;
+  REPLACE_LOG=0;
+  REPLACE_LOGF=0;
+  REPLACE_LOGL=0;
+  REPLACE_LOG10=0;
+  REPLACE_LOG10F=0;
+  REPLACE_LOG10L=0;
+  REPLACE_LOG1P=0;
+  REPLACE_LOG1PF=0;
+  REPLACE_LOG1PL=0;
+  REPLACE_LOG2=0;
+  REPLACE_LOG2F=0;
+  REPLACE_LOG2L=0;
+  REPLACE_LOGB=0;
+  REPLACE_LOGBF=0;
+  REPLACE_LOGBL=0;
+  REPLACE_MODF=0;
+  REPLACE_MODFF=0;
+  REPLACE_MODFL=0;
+  REPLACE_NAN=0;
+  REPLACE_REMAINDER=0;
+  REPLACE_REMAINDERF=0;
+  REPLACE_REMAINDERL=0;
+  REPLACE_ROUND=0;
+  REPLACE_ROUNDF=0;
+  REPLACE_ROUNDL=0;
+  REPLACE_SIGNBIT=0;
+  REPLACE_SIGNBIT_USING_GCC=0;
+  REPLACE_SINF=0;
+  REPLACE_SINHF=0;
+  REPLACE_SQRTF=0;
+  REPLACE_SQRTL=0;
+  REPLACE_TANF=0;
+  REPLACE_TANHF=0;
+  REPLACE_TRUNC=0;
+  REPLACE_TRUNCF=0;
+  REPLACE_TRUNCL=0;
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp() can be used without linking with libm" >&5
+$as_echo_n "checking whether frexp() can be used without linking with libm... " >&6; }
+if ${gl_cv_func_frexp_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             double x;
+int
+main ()
+{
+int e; return frexp (x, &e) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_frexp_no_libm=yes
+else
+  gl_cv_func_frexp_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_no_libm" >&5
+$as_echo "$gl_cv_func_frexp_no_libm" >&6; }
+
+ac_fn_c_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default"
+if test "x$ac_cv_have_decl_alarm" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_ALARM $ac_have_decl
+_ACEOF
+
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+MicrosoftCompiler
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "MicrosoftCompiler" >/dev/null 2>&1; then :
+  gl_asmext='asm'
+     gl_c_asm_opt='-c -Fa'
+
+else
+  gl_asmext='s'
+     gl_c_asm_opt='-S'
+
+fi
+rm -f conftest*
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking host CPU and C ABI" >&5
+$as_echo_n "checking host CPU and C ABI... " >&6; }
+if ${gl_cv_host_cpu_c_abi+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case "$host_cpu" in
+
+       i[4567]86 )
+         gl_cv_host_cpu_c_abi=i386
+         ;;
+
+       x86_64 )
+         # On x86_64 systems, the C compiler may be generating code in one of
+         # these ABIs:
+         # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
+         # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
+         #   with native Windows (mingw, MSVC).
+         # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
+         # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if (defined __x86_64__ || defined __amd64__ \
+                     || defined _M_X64 || defined _M_AMD64)
+                 int ok;
+                #else
+                 error fail
+                #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __ILP32__ || defined _ILP32
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi=x86_64-x32
+else
+  gl_cv_host_cpu_c_abi=x86_64
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  gl_cv_host_cpu_c_abi=i386
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         ;;
+
+       alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] )
+         gl_cv_host_cpu_c_abi=alpha
+         ;;
+
+       arm* | aarch64 )
+         # Assume arm with EABI.
+         # On arm64 systems, the C compiler may be generating code in one of
+         # these ABIs:
+         # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
+         # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
+         # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __aarch64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __ILP32__ || defined _ILP32
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi=arm64-ilp32
+else
+  gl_cv_host_cpu_c_abi=arm64
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+else
+  # Don't distinguish little-endian and big-endian arm, since they
+            # don't require different machine code for simple operations and
+            # since the user can distinguish them through the preprocessor
+            # defines __ARMEL__ vs. __ARMEB__.
+            # But distinguish arm which passes floating-point arguments and
+            # return values in integer registers (r0, r1, ...) - this is
+            # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which
+            # passes them in float registers (s0, s1, ...) and double registers
+            # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer
+            # sets the preprocessor defines __ARM_PCS (for the first case) and
+            # __ARM_PCS_VFP (for the second case), but older GCC does not.
+            echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c
+            # Look for a reference to the register d0 in the .s file.
+            { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c'
+  { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_try\""; } >&5
+  (eval $ac_try) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; } >/dev/null 2>&1
+            if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then
+              gl_cv_host_cpu_c_abi=armhf
+            else
+              gl_cv_host_cpu_c_abi=arm
+            fi
+            rm -f conftest*
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         ;;
+
+       hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
+         # On hppa, the C compiler may be generating 32-bit code or 64-bit
+         # code. In the latter case, it defines _LP64 and __LP64__.
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef __LP64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi=hppa64
+else
+  gl_cv_host_cpu_c_abi=hppa
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         ;;
+
+       ia64* )
+         # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
+         # 32-bit code. In the latter case, it defines _ILP32.
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifdef _ILP32
+                 int ok;
+                #else
+                 error fail
+                #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi=ia64-ilp32
+else
+  gl_cv_host_cpu_c_abi=ia64
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         ;;
+
+       mips* )
+         # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
+         # at 32.
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
+                 int ok;
+                #else
+                 error fail
+                #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi=mips64
+else
+  # In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but
+            # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32.
+            # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but
+            # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32.
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if (_MIPS_SIM == _ABIN32)
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi=mipsn32
+else
+  gl_cv_host_cpu_c_abi=mips
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         ;;
+
+       powerpc* )
+         # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
+         # No need to distinguish them here; the caller may distinguish
+         # them based on the OS.
+         # On powerpc64 systems, the C compiler may still be generating
+         # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
+         # be generating 64-bit code.
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __powerpc64__ || defined _ARCH_PPC64
+                 int ok;
+                #else
+                 error fail
+                #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  # On powerpc64, there are two ABIs on Linux: The AIX compatible
+            # one and the ELFv2 one. The latter defines _CALL_ELF=2.
+            cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined _CALL_ELF && _CALL_ELF == 2
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi=powerpc64-elfv2
+else
+  gl_cv_host_cpu_c_abi=powerpc64
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+else
+  gl_cv_host_cpu_c_abi=powerpc
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         ;;
+
+       rs6000 )
+         gl_cv_host_cpu_c_abi=powerpc
+         ;;
+
+       riscv32 | riscv64 )
+         # There are 2 architectures (with variants): rv32* and rv64*.
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if __riscv_xlen == 64
+                  int ok;
+                #else
+                  error fail
+                #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  cpu=riscv64
+else
+  cpu=riscv32
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
+         # Size of 'long' and 'void *':
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __LP64__
+                  int ok;
+                #else
+                  error fail
+                #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  main_abi=lp64
+else
+  main_abi=ilp32
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         # Float ABIs:
+         # __riscv_float_abi_double:
+         #   'float' and 'double' are passed in floating-point registers.
+         # __riscv_float_abi_single:
+         #   'float' are passed in floating-point registers.
+         # __riscv_float_abi_soft:
+         #   No values are passed in floating-point registers.
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __riscv_float_abi_double
+                  int ok;
+                #else
+                  error fail
+                #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  float_abi=d
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __riscv_float_abi_single
+                     int ok;
+                   #else
+                     error fail
+                   #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  float_abi=f
+else
+  float_abi=''
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}"
+         ;;
+
+       s390* )
+         # On s390x, the C compiler may be generating 64-bit (= s390x) code
+         # or 31-bit (= s390) code.
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __LP64__ || defined __s390x__
+                  int ok;
+                #else
+                  error fail
+                #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi=s390x
+else
+  gl_cv_host_cpu_c_abi=s390
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         ;;
+
+       sparc | sparc64 )
+         # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
+         # C compiler still generates 32-bit code.
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __sparcv9 || defined __arch64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_host_cpu_c_abi=sparc64
+else
+  gl_cv_host_cpu_c_abi=sparc
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         ;;
+
+       *)
+         gl_cv_host_cpu_c_abi="$host_cpu"
+         ;;
+     esac
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi" >&5
+$as_echo "$gl_cv_host_cpu_c_abi" >&6; }
+
+    HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'`
+  HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi"
+
+
+
+  # This was
+  #   AC_DEFINE_UNQUOTED([__${HOST_CPU}__])
+  #   AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__])
+  # earlier, but KAI C++ 3.2d doesn't like this.
+  sed -e 's/-/_/g' >> confdefs.h <<EOF
+#ifndef __${HOST_CPU}__
+#define __${HOST_CPU}__ 1
+#endif
+#ifndef __${HOST_CPU_C_ABI}__
+#define __${HOST_CPU_C_ABI}__ 1
+#endif
+EOF
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5
+$as_echo_n "checking where to find the exponent in a 'float'... " >&6; }
+if ${gl_cv_cc_float_expbit0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  gl_cv_cc_float_expbit0="word 0 bit 23"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { float value; unsigned int word[NWORDS]; } memory_float;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (float x)
+{
+  memory_float m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (float) < sizeof (memory_float).  */
+  memset (&m, 0, sizeof (memory_float));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25f);
+  add_to_ored_words (0.5f);
+  add_to_ored_words (1.0f);
+  add_to_ored_words (2.0f);
+  add_to_ored_words (4.0f);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_float_expbit0=`cat conftest.out`
+else
+  gl_cv_cc_float_expbit0="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5
+$as_echo "$gl_cv_cc_float_expbit0" >&6; }
+  case "$gl_cv_cc_float_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_EXPBIT0_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_EXPBIT0_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_limits_h='<'limits.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <limits.h>" >&5
+$as_echo_n "checking absolute name of <limits.h>... " >&6; }
+if ${gl_cv_next_limits_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_limits_h = yes; then
+
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <limits.h>
+_ACEOF
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'limits.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_limits_h
+           gl_cv_next_limits_h='"'$gl_header'"'
+          else
+               gl_cv_next_limits_h='<'limits.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5
+$as_echo "$gl_cv_next_limits_h" >&6; }
+     fi
+     NEXT_LIMITS_H=$gl_cv_next_limits_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'limits.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_limits_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc." >&5
+$as_echo_n "checking whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.... " >&6; }
+if ${gl_cv_header_limits_width+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+             #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+            #endif
+            #include <limits.h>
+            long long llm = LLONG_MAX;
+            int wb = WORD_BIT;
+            int ullw = ULLONG_WIDTH;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_limits_width=yes
+else
+  gl_cv_header_limits_width=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_limits_width" >&5
+$as_echo "$gl_cv_header_limits_width" >&6; }
+  if test "$gl_cv_header_limits_width" = yes; then
+    LIMITS_H=
+  else
+    LIMITS_H=limits.h
+  fi
+
+   if test -n "$LIMITS_H"; then
+  GL_GENERATE_LIMITS_H_TRUE=
+  GL_GENERATE_LIMITS_H_FALSE='#'
+else
+  GL_GENERATE_LIMITS_H_TRUE='#'
+  GL_GENERATE_LIMITS_H_FALSE=
+fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
+$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
+if ${am_cv_langinfo_codeset+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <langinfo.h>
+int
+main ()
+{
+char* cs = nl_langinfo(CODESET); return !cs;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  am_cv_langinfo_codeset=yes
+else
+  am_cv_langinfo_codeset=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
+$as_echo "$am_cv_langinfo_codeset" >&6; }
+  if test $am_cv_langinfo_codeset = yes; then
+
+$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5
+$as_echo_n "checking for working fcntl.h... " >&6; }
+if ${gl_cv_header_working_fcntl_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  gl_cv_header_working_fcntl_h=cross-compiling
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+           #include <sys/stat.h>
+           #if HAVE_UNISTD_H
+           # include <unistd.h>
+           #else /* on Windows with MSVC */
+           # include <io.h>
+           # include <stdlib.h>
+           # defined sleep(n) _sleep ((n) * 1000)
+           #endif
+           #include <fcntl.h>
+           #ifndef O_NOATIME
+            #define O_NOATIME 0
+           #endif
+           #ifndef O_NOFOLLOW
+            #define O_NOFOLLOW 0
+           #endif
+           static int const constants[] =
+            {
+              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
+              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
+            };
+
+int
+main ()
+{
+
+            int result = !constants;
+            #if HAVE_SYMLINK
+            {
+              static char const sym[] = "conftest.sym";
+              if (symlink ("/dev/null", sym) != 0)
+                result |= 2;
+              else
+                {
+                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
+                  if (fd >= 0)
+                    {
+                      close (fd);
+                      result |= 4;
+                    }
+                }
+              if (unlink (sym) != 0 || symlink (".", sym) != 0)
+                result |= 2;
+              else
+                {
+                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
+                  if (fd >= 0)
+                    {
+                      close (fd);
+                      result |= 4;
+                    }
+                }
+              unlink (sym);
+            }
+            #endif
+            {
+              static char const file[] = "confdefs.h";
+              int fd = open (file, O_RDONLY | O_NOATIME);
+              if (fd < 0)
+                result |= 8;
+              else
+                {
+                  struct stat st0;
+                  if (fstat (fd, &st0) != 0)
+                    result |= 16;
+                  else
+                    {
+                      char c;
+                      sleep (1);
+                      if (read (fd, &c, 1) != 1)
+                        result |= 24;
+                      else
+                        {
+                          if (close (fd) != 0)
+                            result |= 32;
+                          else
+                            {
+                              struct stat st1;
+                              if (stat (file, &st1) != 0)
+                                result |= 40;
+                              else
+                                if (st0.st_atime != st1.st_atime)
+                                  result |= 64;
+                            }
+                        }
+                    }
+                }
+            }
+            return result;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_header_working_fcntl_h=yes
+else
+  case $? in #(
+        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
+        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
+        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
+         *) gl_cv_header_working_fcntl_h='no';;
+        esac
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5
+$as_echo "$gl_cv_header_working_fcntl_h" >&6; }
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WORKING_O_NOATIME $ac_val
+_ACEOF
+
+
+  case $gl_cv_header_working_fcntl_h in #(
+  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
+  *) ac_val=1;;
+  esac
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_WORKING_O_NOFOLLOW $ac_val
+_ACEOF
+
+
+ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default"
+if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
+_ACEOF
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5
+$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; }
+if ${ac_cv_gnu_library_2_1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+#ifdef __UCLIBC__
+ Lucky user
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky" >/dev/null 2>&1; then :
+  ac_cv_gnu_library_2_1=yes
+else
+  ac_cv_gnu_library_2_1=no
+fi
+rm -f conftest*
+
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
+$as_echo "$ac_cv_gnu_library_2_1" >&6; }
+
+    GLIBC21="$ac_cv_gnu_library_2_1"
+
+
+
+
+
+
+
+
+
+  GNULIB_EXPLICIT_BZERO=0;
+  GNULIB_FFSL=0;
+  GNULIB_FFSLL=0;
+  GNULIB_MEMCHR=0;
+  GNULIB_MEMMEM=0;
+  GNULIB_MEMPCPY=0;
+  GNULIB_MEMRCHR=0;
+  GNULIB_RAWMEMCHR=0;
+  GNULIB_STPCPY=0;
+  GNULIB_STPNCPY=0;
+  GNULIB_STRCHRNUL=0;
+  GNULIB_STRDUP=0;
+  GNULIB_STRNCAT=0;
+  GNULIB_STRNDUP=0;
+  GNULIB_STRNLEN=0;
+  GNULIB_STRPBRK=0;
+  GNULIB_STRSEP=0;
+  GNULIB_STRSTR=0;
+  GNULIB_STRCASESTR=0;
+  GNULIB_STRTOK_R=0;
+  GNULIB_MBSLEN=0;
+  GNULIB_MBSNLEN=0;
+  GNULIB_MBSCHR=0;
+  GNULIB_MBSRCHR=0;
+  GNULIB_MBSSTR=0;
+  GNULIB_MBSCASECMP=0;
+  GNULIB_MBSNCASECMP=0;
+  GNULIB_MBSPCASECMP=0;
+  GNULIB_MBSCASESTR=0;
+  GNULIB_MBSCSPN=0;
+  GNULIB_MBSPBRK=0;
+  GNULIB_MBSSPN=0;
+  GNULIB_MBSSEP=0;
+  GNULIB_MBSTOK_R=0;
+  GNULIB_STRERROR=0;
+  GNULIB_STRERROR_R=0;
+  GNULIB_STRSIGNAL=0;
+  GNULIB_STRVERSCMP=0;
+  HAVE_MBSLEN=0;
+    HAVE_EXPLICIT_BZERO=1;
+  HAVE_FFSL=1;
+  HAVE_FFSLL=1;
+  HAVE_MEMCHR=1;
+  HAVE_DECL_MEMMEM=1;
+  HAVE_MEMPCPY=1;
+  HAVE_DECL_MEMRCHR=1;
+  HAVE_RAWMEMCHR=1;
+  HAVE_STPCPY=1;
+  HAVE_STPNCPY=1;
+  HAVE_STRCHRNUL=1;
+  HAVE_DECL_STRDUP=1;
+  HAVE_DECL_STRNDUP=1;
+  HAVE_DECL_STRNLEN=1;
+  HAVE_STRPBRK=1;
+  HAVE_STRSEP=1;
+  HAVE_STRCASESTR=1;
+  HAVE_DECL_STRTOK_R=1;
+  HAVE_DECL_STRERROR_R=1;
+  HAVE_DECL_STRSIGNAL=1;
+  HAVE_STRVERSCMP=1;
+  REPLACE_MEMCHR=0;
+  REPLACE_MEMMEM=0;
+  REPLACE_STPNCPY=0;
+  REPLACE_STRCHRNUL=0;
+  REPLACE_STRDUP=0;
+  REPLACE_STRNCAT=0;
+  REPLACE_STRNDUP=0;
+  REPLACE_STRNLEN=0;
+  REPLACE_STRSTR=0;
+  REPLACE_STRCASESTR=0;
+  REPLACE_STRTOK_R=0;
+  REPLACE_STRERROR=0;
+  REPLACE_STRERROR_R=0;
+  REPLACE_STRSIGNAL=0;
+  UNDEFINE_STRTOK_R=0;
+
+
+
+
+
+
+  # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
+  # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
+  # irrelevant for anonymous mappings.
+  ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap"
+if test "x$ac_cv_func_mmap" = xyes; then :
+  gl_have_mmap=yes
+else
+  gl_have_mmap=no
+fi
+
+
+  # Try to allow MAP_ANONYMOUS.
+  gl_have_mmap_anonymous=no
+  if test $gl_have_mmap = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5
+$as_echo_n "checking for MAP_ANONYMOUS... " >&6; }
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <sys/mman.h>
+#ifdef MAP_ANONYMOUS
+    I cannot identify this map
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "I cannot identify this map" >/dev/null 2>&1; then :
+  gl_have_mmap_anonymous=yes
+fi
+rm -f conftest*
+
+    if test $gl_have_mmap_anonymous != yes; then
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <sys/mman.h>
+#ifdef MAP_ANON
+    I cannot identify this map
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "I cannot identify this map" >/dev/null 2>&1; then :
+
+$as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h
+
+         gl_have_mmap_anonymous=yes
+fi
+rm -f conftest*
+
+    fi
+    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5
+$as_echo "$gl_have_mmap_anonymous" >&6; }
+    if test $gl_have_mmap_anonymous = yes; then
+
+$as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h
+
+    fi
+  fi
+
+
+
+
+
+
+  if test $HAVE_MEMCHR = 1; then
+    # Detect platform-specific bugs in some versions of glibc:
+    # memchr should not dereference anything with length 0
+    #   https://bugzilla.redhat.com/show_bug.cgi?id=499689
+    # memchr should not dereference overestimated length after a match
+    #   https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+    #   https://sourceware.org/bugzilla/show_bug.cgi?id=10162
+    # Assume that memchr works on platforms that lack mprotect.
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5
+$as_echo_n "checking whether memchr works... " >&6; }
+if ${gl_cv_func_memchr_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                    # Guess yes on native Windows.
+            mingw*) gl_cv_func_memchr_works="guessing yes" ;;
+                    # Be pessimistic for now.
+            *)      gl_cv_func_memchr_works="guessing no" ;;
+          esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <string.h>
+#if HAVE_SYS_MMAN_H
+# include <fcntl.h>
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/mman.h>
+# ifndef MAP_FILE
+#  define MAP_FILE 0
+# endif
+#endif
+
+int
+main ()
+{
+
+  int result = 0;
+  char *fence = NULL;
+#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
+# if HAVE_MAP_ANONYMOUS
+  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
+  const int fd = -1;
+# else /* !HAVE_MAP_ANONYMOUS */
+  const int flags = MAP_FILE | MAP_PRIVATE;
+  int fd = open ("/dev/zero", O_RDONLY, 0666);
+  if (fd >= 0)
+# endif
+    {
+      int pagesize = getpagesize ();
+      char *two_pages =
+        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+                       flags, fd, 0);
+      if (two_pages != (char *)(-1)
+          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+        fence = two_pages + pagesize;
+    }
+#endif
+  if (fence)
+    {
+      if (memchr (fence, 0, 0))
+        result |= 1;
+      strcpy (fence - 9, "12345678");
+      if (memchr (fence - 9, 0, 79) != fence - 1)
+        result |= 2;
+      if (memchr (fence - 1, 0, 3) != fence - 1)
+        result |= 4;
+    }
+  return result;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_memchr_works=yes
+else
+  gl_cv_func_memchr_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_memchr_works" >&5
+$as_echo "$gl_cv_func_memchr_works" >&6; }
+    case "$gl_cv_func_memchr_works" in
+      *yes) ;;
+      *) REPLACE_MEMCHR=1 ;;
+    esac
+  fi
+
+ac_fn_c_check_decl "$LINENO" "snprintf" "ac_cv_have_decl_snprintf" "$ac_includes_default"
+if test "x$ac_cv_have_decl_snprintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_SNPRINTF $ac_have_decl
+_ACEOF
+
+
+    REPLACE_NULL=0;
+  HAVE_MAX_ALIGN_T=1;
+  HAVE_WCHAR_T=1;
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_type_long_long_int = yes; then
+    HAVE_LONG_LONG_INT=1
+  else
+    HAVE_LONG_LONG_INT=0
+  fi
+
+
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    HAVE_UNSIGNED_LONG_LONG_INT=1
+  else
+    HAVE_UNSIGNED_LONG_LONG_INT=0
+  fi
+
+
+
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+
+
+      if test $ac_cv_header_inttypes_h = yes; then
+    HAVE_INTTYPES_H=1
+  else
+    HAVE_INTTYPES_H=0
+  fi
+
+
+      if test $ac_cv_header_sys_types_h = yes; then
+    HAVE_SYS_TYPES_H=1
+  else
+    HAVE_SYS_TYPES_H=0
+  fi
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stdint_h='<'stdint.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5
+$as_echo_n "checking absolute name of <stdint.h>... " >&6; }
+if ${gl_cv_next_stdint_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_stdint_h = yes; then
+
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdint.h>
+_ACEOF
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'stdint.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_stdint_h
+           gl_cv_next_stdint_h='"'$gl_header'"'
+          else
+               gl_cv_next_stdint_h='<'stdint.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5
+$as_echo "$gl_cv_next_stdint_h" >&6; }
+     fi
+     NEXT_STDINT_H=$gl_cv_next_stdint_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdint.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdint_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_stdint_h = yes; then
+    HAVE_STDINT_H=1
+  else
+    HAVE_STDINT_H=0
+  fi
+
+
+    if test $ac_cv_header_stdint_h = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5
+$as_echo_n "checking whether stdint.h conforms to C99... " >&6; }
+if ${gl_cv_header_working_stdint_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_working_stdint_h=no
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
+#include <stdint.h>
+/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
+#if !(defined WCHAR_MIN && defined WCHAR_MAX)
+#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
+#endif
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#ifdef INT8_MAX
+int8_t a1 = INT8_MAX;
+int8_t a1min = INT8_MIN;
+#endif
+#ifdef INT16_MAX
+int16_t a2 = INT16_MAX;
+int16_t a2min = INT16_MIN;
+#endif
+#ifdef INT32_MAX
+int32_t a3 = INT32_MAX;
+int32_t a3min = INT32_MIN;
+#endif
+#ifdef INT64_MAX
+int64_t a4 = INT64_MAX;
+int64_t a4min = INT64_MIN;
+#endif
+#ifdef UINT8_MAX
+uint8_t b1 = UINT8_MAX;
+#else
+typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
+#endif
+#ifdef UINT16_MAX
+uint16_t b2 = UINT16_MAX;
+#endif
+#ifdef UINT32_MAX
+uint32_t b3 = UINT32_MAX;
+#endif
+#ifdef UINT64_MAX
+uint64_t b4 = UINT64_MAX;
+#endif
+int_least8_t c1 = INT8_C (0x7f);
+int_least8_t c1max = INT_LEAST8_MAX;
+int_least8_t c1min = INT_LEAST8_MIN;
+int_least16_t c2 = INT16_C (0x7fff);
+int_least16_t c2max = INT_LEAST16_MAX;
+int_least16_t c2min = INT_LEAST16_MIN;
+int_least32_t c3 = INT32_C (0x7fffffff);
+int_least32_t c3max = INT_LEAST32_MAX;
+int_least32_t c3min = INT_LEAST32_MIN;
+int_least64_t c4 = INT64_C (0x7fffffffffffffff);
+int_least64_t c4max = INT_LEAST64_MAX;
+int_least64_t c4min = INT_LEAST64_MIN;
+uint_least8_t d1 = UINT8_C (0xff);
+uint_least8_t d1max = UINT_LEAST8_MAX;
+uint_least16_t d2 = UINT16_C (0xffff);
+uint_least16_t d2max = UINT_LEAST16_MAX;
+uint_least32_t d3 = UINT32_C (0xffffffff);
+uint_least32_t d3max = UINT_LEAST32_MAX;
+uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
+uint_least64_t d4max = UINT_LEAST64_MAX;
+int_fast8_t e1 = INT_FAST8_MAX;
+int_fast8_t e1min = INT_FAST8_MIN;
+int_fast16_t e2 = INT_FAST16_MAX;
+int_fast16_t e2min = INT_FAST16_MIN;
+int_fast32_t e3 = INT_FAST32_MAX;
+int_fast32_t e3min = INT_FAST32_MIN;
+int_fast64_t e4 = INT_FAST64_MAX;
+int_fast64_t e4min = INT_FAST64_MIN;
+uint_fast8_t f1 = UINT_FAST8_MAX;
+uint_fast16_t f2 = UINT_FAST16_MAX;
+uint_fast32_t f3 = UINT_FAST32_MAX;
+uint_fast64_t f4 = UINT_FAST64_MAX;
+#ifdef INTPTR_MAX
+intptr_t g = INTPTR_MAX;
+intptr_t gmin = INTPTR_MIN;
+#endif
+#ifdef UINTPTR_MAX
+uintptr_t h = UINTPTR_MAX;
+#endif
+intmax_t i = INTMAX_MAX;
+uintmax_t j = UINTMAX_MAX;
+
+/* Check that SIZE_MAX has the correct type, if possible.  */
+#if 201112 <= __STDC_VERSION__
+int k = _Generic (SIZE_MAX, size_t: 0);
+#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \
+       || (0x5110 <= __SUNPRO_C && !__STDC__))
+extern size_t k;
+extern __typeof__ (SIZE_MAX) k;
+#endif
+
+#include <limits.h> /* for CHAR_BIT */
+#define TYPE_MINIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MAXIMUM(t) \
+  ((t) ((t) 0 < (t) -1 \
+        ? (t) -1 \
+        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+struct s {
+  int check_PTRDIFF:
+      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
+      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
+      ? 1 : -1;
+  /* Detect bug in FreeBSD 6.0 / ia64.  */
+  int check_SIG_ATOMIC:
+      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
+      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
+      ? 1 : -1;
+  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
+  int check_WCHAR:
+      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
+      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
+      ? 1 : -1;
+  /* Detect bug in mingw.  */
+  int check_WINT:
+      WINT_MIN == TYPE_MINIMUM (wint_t)
+      && WINT_MAX == TYPE_MAXIMUM (wint_t)
+      ? 1 : -1;
+
+  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
+  int check_UINT8_C:
+        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
+  int check_UINT16_C:
+        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
+
+  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
+#ifdef UINT8_MAX
+  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
+#endif
+#ifdef UINT16_MAX
+  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
+#endif
+#ifdef UINT32_MAX
+  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
+#endif
+#ifdef UINT64_MAX
+  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
+#endif
+  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
+  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
+  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
+  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
+  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
+  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
+  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
+  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
+  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
+  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
+  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
+};
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+                                                    if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                         # Guess yes on native Windows.
+                 mingw*) gl_cv_header_working_stdint_h="guessing yes" ;;
+                         # In general, assume it works.
+                 *)      gl_cv_header_working_stdint_h="guessing yes" ;;
+               esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
+#include <stdint.h>
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+
+int
+main ()
+{
+
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return mv - macro_values + 1;
+    }
+  return 0;
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_header_working_stdint_h=yes
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5
+$as_echo "$gl_cv_header_working_stdint_h" >&6; }
+  fi
+
+  HAVE_C99_STDINT_H=0
+  HAVE_SYS_BITYPES_H=0
+  HAVE_SYS_INTTYPES_H=0
+  STDINT_H=stdint.h
+  case "$gl_cv_header_working_stdint_h" in
+    *yes)
+      HAVE_C99_STDINT_H=1
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h predates C++11" >&5
+$as_echo_n "checking whether stdint.h predates C++11... " >&6; }
+if ${gl_cv_header_stdint_predates_cxx11_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_stdint_predates_cxx11_h=yes
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+
+intmax_t im = INTMAX_MAX;
+int32_t i32 = INT32_C (0x7fffffff);
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_stdint_predates_cxx11_h=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_predates_cxx11_h" >&5
+$as_echo "$gl_cv_header_stdint_predates_cxx11_h" >&6; }
+
+      if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then
+
+$as_echo "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h
+
+
+$as_echo "#define __STDC_LIMIT_MACROS 1" >>confdefs.h
+
+      fi
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5
+$as_echo_n "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; }
+if ${gl_cv_header_stdint_width+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_stdint_width=no
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+              /* Work if build is not clean.  */
+              #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1
+              #ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+               #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+              #endif
+              #include <stdint.h>
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+              int iw = UINTMAX_WIDTH;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_stdint_width=yes
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_stdint_width" >&5
+$as_echo "$gl_cv_header_stdint_width" >&6; }
+      if test "$gl_cv_header_stdint_width" = yes; then
+        STDINT_H=
+      fi
+      ;;
+    *)
+                  for ac_header in sys/inttypes.h sys/bitypes.h
+do :
+  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
+ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
+if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
+  cat >>confdefs.h <<_ACEOF
+#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+_ACEOF
+
+fi
+
+done
+
+      if test $ac_cv_header_sys_inttypes_h = yes; then
+        HAVE_SYS_INTTYPES_H=1
+      fi
+      if test $ac_cv_header_sys_bitypes_h = yes; then
+        HAVE_SYS_BITYPES_H=1
+      fi
+
+
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+  for gltype in ptrdiff_t size_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
+if eval \${gl_cv_bitsizeof_${gltype}+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+#include <limits.h>"; then :
+
+else
+  result=unknown
+fi
+
+       eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+                                                result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    cat >>confdefs.h <<_ACEOF
+#define BITSIZEOF_${GLTYPE} $result
+_ACEOF
+
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+
+
+  fi
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
+$as_echo_n "checking for bit size of $gltype... " >&6; }
+if eval \${gl_cv_bitsizeof_${gltype}+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+#include <limits.h>"; then :
+
+else
+  result=unknown
+fi
+
+       eval gl_cv_bitsizeof_${gltype}=\$result
+
+fi
+eval ac_res=\$gl_cv_bitsizeof_${gltype}
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+                                                result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    cat >>confdefs.h <<_ACEOF
+#define BITSIZEOF_${GLTYPE} $result
+_ACEOF
+
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+
+
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5
+$as_echo_n "checking whether $gltype is signed... " >&6; }
+if eval \${gl_cv_type_${gltype}_signed+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  result=yes
+else
+  result=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+       eval gl_cv_type_${gltype}_signed=\$result
+
+fi
+eval ac_res=\$gl_cv_type_${gltype}_signed
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    eval result=\$gl_cv_type_${gltype}_signed
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    if test "$result" = yes; then
+      cat >>confdefs.h <<_ACEOF
+#define HAVE_SIGNED_${GLTYPE} 1
+_ACEOF
+
+      eval HAVE_SIGNED_${GLTYPE}=1
+    else
+      eval HAVE_SIGNED_${GLTYPE}=0
+    fi
+  done
+
+
+  gl_cv_type_ptrdiff_t_signed=yes
+  gl_cv_type_size_t_signed=no
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+
+
+  for gltype in ptrdiff_t size_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
+if eval \${gl_cv_type_${gltype}_suffix+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+              extern $gltype foo;
+              extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    cat >>confdefs.h <<_ACEOF
+#define ${GLTYPE}_SUFFIX $result
+_ACEOF
+
+  done
+
+
+  fi
+
+
+  for gltype in sig_atomic_t wchar_t wint_t ; do
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
+$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
+if eval \${gl_cv_type_${gltype}_suffix+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+
+              extern $gltype foo;
+              extern $gltype1 foo;
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  eval gl_cv_type_${gltype}_suffix=\$glsuf
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done
+fi
+eval ac_res=\$gl_cv_type_${gltype}_suffix
+              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
+$as_echo "$ac_res" >&6; }
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    cat >>confdefs.h <<_ACEOF
+#define ${GLTYPE}_SUFFIX $result
+_ACEOF
+
+  done
+
+
+
+          if test $GNULIB_OVERRIDES_WINT_T = 1; then
+    BITSIZEOF_WINT_T=32
+  fi
+
+      ;;
+  esac
+
+
+
+  LIMITS_H='limits.h'
+   if test -n "$LIMITS_H"; then
+  GL_GENERATE_LIMITS_H_TRUE=
+  GL_GENERATE_LIMITS_H_FALSE='#'
+else
+  GL_GENERATE_LIMITS_H_TRUE='#'
+  GL_GENERATE_LIMITS_H_FALSE=
+fi
+
+
+
+
+
+
+
+   if test -n "$STDINT_H"; then
+  GL_GENERATE_STDINT_H_TRUE=
+  GL_GENERATE_STDINT_H_FALSE='#'
+else
+  GL_GENERATE_STDINT_H_TRUE='#'
+  GL_GENERATE_STDINT_H_FALSE=
+fi
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5
+$as_echo_n "checking for C/C++ restrict keyword... " >&6; }
+if ${ac_cv_c_restrict+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_restrict=no
+   # The order here caters to the fact that C++ does not require restrict.
+   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+typedef int *int_ptr;
+           int foo (int_ptr $ac_kw ip) { return ip[0]; }
+           int bar (int [$ac_kw]); /* Catch GCC bug 14050.  */
+           int bar (int ip[$ac_kw]) { return ip[0]; }
+
+int
+main ()
+{
+int s[1];
+           int *$ac_kw t = s;
+           t[0] = 0;
+           return foo (t) + bar (t);
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_restrict=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+     test "$ac_cv_c_restrict" != no && break
+   done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5
+$as_echo "$ac_cv_c_restrict" >&6; }
+
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no) $as_echo "#define restrict /**/" >>confdefs.h
+ ;;
+   *)  cat >>confdefs.h <<_ACEOF
+#define restrict $ac_cv_c_restrict
+_ACEOF
+ ;;
+ esac
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_string_h='<'string.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5
+$as_echo_n "checking absolute name of <string.h>... " >&6; }
+if ${gl_cv_next_string_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <string.h>
+_ACEOF
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'string.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_string_h
+           gl_cv_next_string_h='"'$gl_header'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5
+$as_echo "$gl_cv_next_string_h" >&6; }
+     fi
+     NEXT_STRING_H=$gl_cv_next_string_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'string.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_string_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default"
+if test "x$ac_cv_type_pid_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define pid_t int
+_ACEOF
+
+fi
+
+ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default"
+if test "x$ac_cv_type_mode_t" = xyes; then :
+
+else
+
+cat >>confdefs.h <<_ACEOF
+#define mode_t int
+_ACEOF
+
+fi
+
+
+
+    WINDOWS_64_BIT_OFF_T=0
+
+
+
+
+
+$as_echo "#define _USE_STD_STAT 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_sys_types_h='<'sys/types.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/types.h>" >&5
+$as_echo_n "checking absolute name of <sys/types.h>... " >&6; }
+if ${gl_cv_next_sys_types_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+_ACEOF
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'sys/types.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_sys_types_h
+           gl_cv_next_sys_types_h='"'$gl_header'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5
+$as_echo "$gl_cv_next_sys_types_h" >&6; }
+     fi
+     NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'sys/types.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_sys_types_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive
+
+
+
+
+
+
+
+
+
+
+
+
+    WINDOWS_STAT_INODES=0
+
+
+
+
+
+
+
+
+
+gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+
+
+  if test "$HAVE_LIBUNISTRING" = yes; then
+    LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"`
+    LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"`
+    LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"`
+  fi
+
+ac_fn_c_check_decl "$LINENO" "vsnprintf" "ac_cv_have_decl_vsnprintf" "$ac_includes_default"
+if test "x$ac_cv_have_decl_vsnprintf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_VSNPRINTF $ac_have_decl
+_ACEOF
+
+
+  GNULIB_BTOWC=0;
+  GNULIB_WCTOB=0;
+  GNULIB_MBSINIT=0;
+  GNULIB_MBRTOWC=0;
+  GNULIB_MBRLEN=0;
+  GNULIB_MBSRTOWCS=0;
+  GNULIB_MBSNRTOWCS=0;
+  GNULIB_WCRTOMB=0;
+  GNULIB_WCSRTOMBS=0;
+  GNULIB_WCSNRTOMBS=0;
+  GNULIB_WCWIDTH=0;
+  GNULIB_WMEMCHR=0;
+  GNULIB_WMEMCMP=0;
+  GNULIB_WMEMCPY=0;
+  GNULIB_WMEMMOVE=0;
+  GNULIB_WMEMSET=0;
+  GNULIB_WCSLEN=0;
+  GNULIB_WCSNLEN=0;
+  GNULIB_WCSCPY=0;
+  GNULIB_WCPCPY=0;
+  GNULIB_WCSNCPY=0;
+  GNULIB_WCPNCPY=0;
+  GNULIB_WCSCAT=0;
+  GNULIB_WCSNCAT=0;
+  GNULIB_WCSCMP=0;
+  GNULIB_WCSNCMP=0;
+  GNULIB_WCSCASECMP=0;
+  GNULIB_WCSNCASECMP=0;
+  GNULIB_WCSCOLL=0;
+  GNULIB_WCSXFRM=0;
+  GNULIB_WCSDUP=0;
+  GNULIB_WCSCHR=0;
+  GNULIB_WCSRCHR=0;
+  GNULIB_WCSCSPN=0;
+  GNULIB_WCSSPN=0;
+  GNULIB_WCSPBRK=0;
+  GNULIB_WCSSTR=0;
+  GNULIB_WCSTOK=0;
+  GNULIB_WCSWIDTH=0;
+  GNULIB_WCSFTIME=0;
+    HAVE_BTOWC=1;
+  HAVE_MBSINIT=1;
+  HAVE_MBRTOWC=1;
+  HAVE_MBRLEN=1;
+  HAVE_MBSRTOWCS=1;
+  HAVE_MBSNRTOWCS=1;
+  HAVE_WCRTOMB=1;
+  HAVE_WCSRTOMBS=1;
+  HAVE_WCSNRTOMBS=1;
+  HAVE_WMEMCHR=1;
+  HAVE_WMEMCMP=1;
+  HAVE_WMEMCPY=1;
+  HAVE_WMEMMOVE=1;
+  HAVE_WMEMSET=1;
+  HAVE_WCSLEN=1;
+  HAVE_WCSNLEN=1;
+  HAVE_WCSCPY=1;
+  HAVE_WCPCPY=1;
+  HAVE_WCSNCPY=1;
+  HAVE_WCPNCPY=1;
+  HAVE_WCSCAT=1;
+  HAVE_WCSNCAT=1;
+  HAVE_WCSCMP=1;
+  HAVE_WCSNCMP=1;
+  HAVE_WCSCASECMP=1;
+  HAVE_WCSNCASECMP=1;
+  HAVE_WCSCOLL=1;
+  HAVE_WCSXFRM=1;
+  HAVE_WCSDUP=1;
+  HAVE_WCSCHR=1;
+  HAVE_WCSRCHR=1;
+  HAVE_WCSCSPN=1;
+  HAVE_WCSSPN=1;
+  HAVE_WCSPBRK=1;
+  HAVE_WCSSTR=1;
+  HAVE_WCSTOK=1;
+  HAVE_WCSWIDTH=1;
+  HAVE_WCSFTIME=1;
+  HAVE_DECL_WCTOB=1;
+  HAVE_DECL_WCWIDTH=1;
+  REPLACE_MBSTATE_T=0;
+  REPLACE_BTOWC=0;
+  REPLACE_WCTOB=0;
+  REPLACE_MBSINIT=0;
+  REPLACE_MBRTOWC=0;
+  REPLACE_MBRLEN=0;
+  REPLACE_MBSRTOWCS=0;
+  REPLACE_MBSNRTOWCS=0;
+  REPLACE_WCRTOMB=0;
+  REPLACE_WCSRTOMBS=0;
+  REPLACE_WCSNRTOMBS=0;
+  REPLACE_WCWIDTH=0;
+  REPLACE_WCSWIDTH=0;
+  REPLACE_WCSFTIME=0;
+
+
+            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5
+$as_echo_n "checking whether <wchar.h> uses 'inline' correctly... " >&6; }
+if ${gl_cv_header_wchar_h_correct_inline+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  gl_cv_header_wchar_h_correct_inline=yes
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+       #define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+extern int zero (void);
+int main () { return zero(); }
+
+_ACEOF
+                              save_ac_compile="$ac_compile"
+     ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/`
+     if echo '#include "conftest.c"' >conftest1.c &&
+        { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+         #define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int zero (void) { return 0; }
+
+_ACEOF
+              ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/`
+       if echo '#include "conftest.c"' >conftest2.c &&
+          { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
+  (eval $ac_compile) 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then
+           :
+         else
+           gl_cv_header_wchar_h_correct_inline=no
+         fi
+       fi
+     fi
+     ac_compile="$save_ac_compile"
+     rm -f conftest12.c conftest12.$ac_objext conftest$ac_exeext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5
+$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; }
+  if test $gl_cv_header_wchar_h_correct_inline = no; then
+    as_fn_error $? "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+  - Add the flag -fgnu89-inline to CC and reconfigure, or
+  - Fix your include files, using parts of
+    <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+  - Use a gcc version older than 4.3, or
+  - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted." "$LINENO" 5
+  fi
+
+
+
+
+
+  if test $ac_cv_header_crtdefs_h = yes; then
+    HAVE_CRTDEFS_H=1
+  else
+    HAVE_CRTDEFS_H=0
+  fi
+
+
+
+  GNULIB_ISWBLANK=0;
+  GNULIB_WCTYPE=0;
+  GNULIB_ISWCTYPE=0;
+  GNULIB_WCTRANS=0;
+  GNULIB_TOWCTRANS=0;
+    HAVE_ISWBLANK=1;
+  HAVE_WCTYPE_T=1;
+  HAVE_WCTRANS_T=1;
+  REPLACE_ISWBLANK=0;
+
+
+
+
+
+
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for inline" >&5
+$as_echo_n "checking for inline... " >&6; }
+if ${ac_cv_c_inline+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_cv_c_inline=no
+for ac_kw in inline __inline__ __inline; do
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#ifndef __cplusplus
+typedef int foo_t;
+static $ac_kw foo_t static_foo () {return 0; }
+$ac_kw foo_t foo () {return 0; }
+#endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  ac_cv_c_inline=$ac_kw
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+  test "$ac_cv_c_inline" != no && break
+done
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_inline" >&5
+$as_echo "$ac_cv_c_inline" >&6; }
+
+case $ac_cv_c_inline in
+  inline | yes) ;;
+  *)
+    case $ac_cv_c_inline in
+      no) ac_val=;;
+      *) ac_val=$ac_cv_c_inline;;
+    esac
+    cat >>confdefs.h <<_ACEOF
+#ifndef __cplusplus
+#define inline $ac_val
+#endif
+_ACEOF
+    ;;
+esac
+
+
+   if false; then
+  GL_COND_LIBTOOL_TRUE=
+  GL_COND_LIBTOOL_FALSE='#'
+else
+  GL_COND_LIBTOOL_TRUE='#'
+  GL_COND_LIBTOOL_FALSE=
+fi
+
+  gl_cond_libtool=false
+  gl_libdeps=
+  gl_ltlibdeps=
+  gl_m4_base='gnulib_m4'
+
+
+
+
+
+
+
+
+
+  gl_source_base='lib'
+
+
+  if test $ac_cv_func_alloca_works = no; then
+    :
+  fi
+
+  # Define an additional variable used in the Makefile substitution.
+  if test $ac_cv_working_alloca_h = yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5
+$as_echo_n "checking for alloca as a compiler built-in... " >&6; }
+if ${gl_cv_rpl_alloca+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if defined __GNUC__ || defined _AIX || defined _MSC_VER
+        Need own alloca
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Need own alloca" >/dev/null 2>&1; then :
+  gl_cv_rpl_alloca=yes
+else
+  gl_cv_rpl_alloca=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5
+$as_echo "$gl_cv_rpl_alloca" >&6; }
+    if test $gl_cv_rpl_alloca = yes; then
+
+$as_echo "#define HAVE_ALLOCA 1" >>confdefs.h
+
+      ALLOCA_H=alloca.h
+    else
+                  ALLOCA_H=
+    fi
+  else
+    ALLOCA_H=alloca.h
+  fi
+
+   if test -n "$ALLOCA_H"; then
+  GL_GENERATE_ALLOCA_H_TRUE=
+  GL_GENERATE_ALLOCA_H_FALSE='#'
+else
+  GL_GENERATE_ALLOCA_H_TRUE='#'
+  GL_GENERATE_ALLOCA_H_FALSE=
+fi
+
+
+
+
+
+
+
+  FLOAT_H=
+  REPLACE_FLOAT_LDBL=0
+  case "$host_os" in
+    aix* | beos* | openbsd* | mirbsd* | irix*)
+      FLOAT_H=float.h
+      ;;
+    freebsd* | dragonfly*)
+      case "$host_cpu" in
+        i[34567]86 )
+          FLOAT_H=float.h
+          ;;
+        x86_64 )
+          # On x86_64 systems, the C compiler may still be generating
+          # 32-bit code.
+          cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __LP64__ || defined __x86_64__ || defined __amd64__
+                  int ok;
+                 #else
+                  error fail
+                 #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+
+else
+  FLOAT_H=float.h
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+          ;;
+      esac
+      ;;
+    linux*)
+      case "$host_cpu" in
+        powerpc*)
+          FLOAT_H=float.h
+          ;;
+      esac
+      ;;
+  esac
+  case "$host_os" in
+    aix* | freebsd* | dragonfly* | linux*)
+      if test -n "$FLOAT_H"; then
+        REPLACE_FLOAT_LDBL=1
+      fi
+      ;;
+  esac
+
+    REPLACE_ITOLD=0
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether conversion from 'int' to 'long double' works" >&5
+$as_echo_n "checking whether conversion from 'int' to 'long double' works... " >&6; }
+if ${gl_cv_func_itold_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host" in
+           sparc*-*-linux*)
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#if defined __LP64__ || defined __arch64__
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_itold_works="guessing no"
+else
+  gl_cv_func_itold_works="guessing yes"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+             ;;
+                   # Guess yes on native Windows.
+           mingw*) gl_cv_func_itold_works="guessing yes" ;;
+           *)      gl_cv_func_itold_works="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int i = -1;
+volatile long double ld;
+int main ()
+{
+  ld += i * 1.0L;
+  if (ld > 0)
+    return 1;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_itold_works=yes
+else
+  gl_cv_func_itold_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_itold_works" >&5
+$as_echo "$gl_cv_func_itold_works" >&6; }
+  case "$gl_cv_func_itold_works" in
+    *no)
+      REPLACE_ITOLD=1
+                  FLOAT_H=float.h
+      ;;
+  esac
+
+  if test -n "$FLOAT_H"; then
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_float_h='<'float.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <float.h>" >&5
+$as_echo_n "checking absolute name of <float.h>... " >&6; }
+if ${gl_cv_next_float_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <float.h>
+_ACEOF
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'float.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_float_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_float_h
+           gl_cv_next_float_h='"'$gl_header'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_float_h" >&5
+$as_echo "$gl_cv_next_float_h" >&6; }
+     fi
+     NEXT_FLOAT_H=$gl_cv_next_float_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'float.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_float_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive
+
+
+
+
+  fi
+
+   if test -n "$FLOAT_H"; then
+  GL_GENERATE_FLOAT_H_TRUE=
+  GL_GENERATE_FLOAT_H_FALSE='#'
+else
+  GL_GENERATE_FLOAT_H_TRUE='#'
+  GL_GENERATE_FLOAT_H_FALSE=
+fi
+
+
+
+  if test $REPLACE_FLOAT_LDBL = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS float.$ac_objext"
+
+  fi
+  if test $REPLACE_ITOLD = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS itold.$ac_objext"
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_cv_func_fprintf_posix=no
+  case "$gl_cv_func_printf_sizes_c99" in
+    *yes)
+      case "$gl_cv_func_printf_long_double" in
+        *yes)
+          case "$gl_cv_func_printf_infinite" in
+            *yes)
+              case "$gl_cv_func_printf_infinite_long_double" in
+                *yes)
+                  case "$gl_cv_func_printf_directive_a" in
+                    *yes)
+                      case "$gl_cv_func_printf_directive_f" in
+                        *yes)
+                          case "$gl_cv_func_printf_directive_n" in
+                            *yes)
+                              case "$gl_cv_func_printf_directive_ls" in
+                                *yes)
+                                  case "$gl_cv_func_printf_positions" in
+                                    *yes)
+                                      case "$gl_cv_func_printf_flag_grouping" in
+                                        *yes)
+                                          case "$gl_cv_func_printf_flag_leftadjust" in
+                                            *yes)
+                                              case "$gl_cv_func_printf_flag_zero" in
+                                                *yes)
+                                                  case "$gl_cv_func_printf_precision" in
+                                                    *yes)
+                                                      case "$gl_cv_func_printf_enomem" in
+                                                        *yes)
+                                                          # fprintf exists and is
+                                                          # already POSIX compliant.
+                                                          gl_cv_func_fprintf_posix=yes
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_fprintf_posix = no; then
+
+
+
+  case "$gl_cv_func_printf_infinite" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      case "$gl_cv_func_printf_infinite_long_double" in
+        *yes)
+          ;;
+        *)
+
+$as_echo "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h
+
+          ;;
+      esac
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_a" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h
+
+      for ac_func in nl_langinfo
+do :
+  ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo"
+if test "x$ac_cv_func_nl_langinfo" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_NL_LANGINFO 1
+_ACEOF
+
+fi
+done
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_f" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_directive_ls" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_grouping" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_leftadjust" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_flag_zero" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_precision" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+  case "$gl_cv_func_printf_enomem" in
+    *yes)
+      ;;
+    *)
+
+$as_echo "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h
+
+
+$as_echo "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h
+
+      ;;
+  esac
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext"
+
+  if test $ac_cv_func_vasnprintf = yes; then
+
+$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+else
+
+$as_echo "#define ptrdiff_t long" >>confdefs.h
+
+
+fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fprintf.$ac_objext"
+
+  REPLACE_FPRINTF=1
+
+$as_echo "#define REPLACE_FPRINTF_POSIX 1" >>confdefs.h
+
+  :
+
+  fi
+
+
+
+
+
+
+          GNULIB_FPRINTF_POSIX=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FPRINTF_POSIX 1" >>confdefs.h
+
+
+
+
+
+
+  if test $gl_cv_func_frexp_no_libm = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5
+$as_echo_n "checking whether frexp works... " >&6; }
+if ${gl_cv_func_frexp_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;;
+           mingw*) # Guess yes with MSVC, no with mingw.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Good
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Good" >/dev/null 2>&1; then :
+  gl_cv_func_frexp_works="guessing yes"
+else
+  gl_cv_func_frexp_works="guessing no"
+fi
+rm -f conftest*
+
+             ;;
+           *) gl_cv_func_frexp_works="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <math.h>
+#include <string.h>
+#if HAVE_DECL_ALARM
+# include <signal.h>
+# include <unistd.h>
+#endif
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   ICC 10.0 has a bug when optimizing the expression -zero.
+   The expression -DBL_MIN * DBL_MIN does not work when cross-compiling
+   to PowerPC on Mac OS X 10.5.  */
+#if defined __hpux || defined __sgi || defined __ICC
+static double
+compute_minus_zero (void)
+{
+  return -DBL_MIN * DBL_MIN;
+}
+# define minus_zero compute_minus_zero ()
+#else
+double minus_zero = -0.0;
+#endif
+int main()
+{
+  int result = 0;
+  int i;
+  volatile double x;
+  double zero = 0.0;
+#if HAVE_DECL_ALARM
+  /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite
+     number.  Let the test fail in this case.  */
+  signal (SIGALRM, SIG_DFL);
+  alarm (5);
+#endif
+  /* Test on denormalized numbers.  */
+  for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5)
+    ;
+  if (x > 0.0)
+    {
+      int exp;
+      double y = frexp (x, &exp);
+      /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022.
+         On NetBSD: y = 0.75. Correct: y = 0.5.  */
+      if (y != 0.5)
+        result |= 1;
+    }
+  /* Test on infinite numbers.  */
+  x = 1.0 / zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (y != x)
+      result |= 2;
+  }
+  /* Test on negative zero.  */
+  x = minus_zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (memcmp (&y, &x, sizeof x))
+      result |= 4;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_frexp_works=yes
+else
+  gl_cv_func_frexp_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_works" >&5
+$as_echo "$gl_cv_func_frexp_works" >&6; }
+
+    case "$gl_cv_func_frexp_works" in
+      *yes) gl_func_frexp_no_libm=yes ;;
+      *)    gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;;
+    esac
+  else
+    gl_func_frexp_no_libm=no
+        REPLACE_FREXP=1
+  fi
+  if test $gl_func_frexp_no_libm = yes; then
+
+$as_echo "#define HAVE_FREXP_IN_LIBC 1" >>confdefs.h
+
+  fi
+
+  if test $gl_func_frexp_no_libm != yes; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS frexp.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_FREXP=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FREXP 1" >>confdefs.h
+
+
+
+
+
+
+      ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_frexpl" = xyes; then :
+
+else
+  HAVE_DECL_FREXPL=0
+fi
+
+  if test $HAVE_DECL_FREXPL = 1; then
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used without linking with libm" >&5
+$as_echo_n "checking whether frexpl() can be used without linking with libm... " >&6; }
+if ${gl_cv_func_frexpl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             long double x;
+int
+main ()
+{
+int e; return frexpl (x, &e) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_frexpl_no_libm=yes
+else
+  gl_cv_func_frexpl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_no_libm" >&5
+$as_echo "$gl_cv_func_frexpl_no_libm" >&6; }
+
+    if test $gl_cv_func_frexpl_no_libm = yes; then
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5
+$as_echo_n "checking whether frexpl works... " >&6; }
+if ${gl_cv_func_frexpl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*)
+              gl_cv_func_frexpl_works="guessing no";;
+           *) gl_cv_func_frexpl_works="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <math.h>
+/* Override the values of <float.h>, like done in float.in.h.  */
+#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP DBL_MIN_EXP
+#endif
+#if defined __sgi && (LDBL_MANT_DIG >= 106)
+# if defined __GNUC__
+#  undef LDBL_MIN_EXP
+#  define LDBL_MIN_EXP DBL_MIN_EXP
+# endif
+#endif
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double frexpl (long double, int *);
+int main()
+{
+  int result = 0;
+  volatile long double x;
+  /* Test on finite numbers that fails on AIX 5.1.  */
+  x = 16.0L;
+  {
+    int exp = -9999;
+    frexpl (x, &exp);
+    if (exp != 5)
+      result |= 1;
+  }
+  /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl
+     function returns an invalid (incorrectly normalized) value: it returns
+               y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 }
+     but the correct result is
+          0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 }  */
+  x = 1.01L;
+  {
+    int exp = -9999;
+    long double y = frexpl (x, &exp);
+    if (!(exp == 1 && y == 0.505L))
+      result |= 2;
+  }
+  /* Test on large finite numbers.  This fails on BeOS at i = 16322, while
+     LDBL_MAX_EXP = 16384.
+     In the loop end test, we test x against Infinity, rather than comparing
+     i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L)
+      {
+        int exp = -9999;
+        frexpl (x, &exp);
+        if (exp != i)
+          {
+            result |= 4;
+            break;
+          }
+      }
+  }
+  /* Test on denormalized numbers.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
+      ;
+    if (x > 0.0L)
+      {
+        int exp;
+        long double y = frexpl (x, &exp);
+        /* On machines with IEEE854 arithmetic: x = 1.68105e-4932,
+           exp = -16382, y = 0.5.  On Mac OS X 10.5: exp = -16384, y = 0.5.  */
+        if (exp != LDBL_MIN_EXP - 1)
+          result |= 8;
+      }
+  }
+  /* Test on infinite numbers.  */
+  x = 1.0L / 0.0L;
+  {
+    int exp;
+    long double y = frexpl (x, &exp);
+    if (y != x)
+      result |= 16;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_frexpl_works=yes
+else
+  gl_cv_func_frexpl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_works" >&5
+$as_echo "$gl_cv_func_frexpl_works" >&6; }
+
+      case "$gl_cv_func_frexpl_works" in
+        *yes) gl_func_frexpl_no_libm=yes ;;
+        *)    gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;;
+      esac
+    else
+      gl_func_frexpl_no_libm=no
+            REPLACE_FREXPL=1
+    fi
+    if test $gl_func_frexpl_no_libm = yes; then
+
+$as_echo "#define HAVE_FREXPL_IN_LIBC 1" >>confdefs.h
+
+    fi
+  fi
+
+  if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS frexpl.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_FREXPL=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_FREXPL 1" >>confdefs.h
+
+
+
+
+
+
+  if test $ac_cv_func___fseterr = no; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS fseterr.$ac_objext"
+
+  fi
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(double) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(double) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnand_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnand
+             # define isnand(x) __builtin_isnan ((double)(x))
+             #else
+             # undef isnand
+             # define isnand(x) isnan ((double)(x))
+             #endif
+             double x;
+int
+main ()
+{
+return isnand (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnand_no_libm=yes
+else
+  gl_cv_func_isnand_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnand_no_libm" >&5
+$as_echo "$gl_cv_func_isnand_no_libm" >&6; }
+
+  gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm
+  if test $gl_cv_func_isnand_no_libm = yes; then
+
+$as_echo "#define HAVE_ISNAND_IN_LIBC 1" >>confdefs.h
+
+  fi
+
+  if test $gl_func_isnand_no_libm != yes; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS isnand.$ac_objext"
+
+
+
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(float) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnanf_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanf
+             # define isnanf(x) __builtin_isnanf ((float)(x))
+             #elif defined isnan
+             # undef isnanf
+             # define isnanf(x) isnan ((float)(x))
+             #endif
+             float x;
+int
+main ()
+{
+return isnanf (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanf_no_libm=yes
+else
+  gl_cv_func_isnanf_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_no_libm" >&5
+$as_echo "$gl_cv_func_isnanf_no_libm" >&6; }
+
+  if test $gl_cv_func_isnanf_no_libm = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) works" >&5
+$as_echo_n "checking whether isnan(float) works... " >&6; }
+if ${gl_cv_func_isnanf_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;;
+           mingw*) # Guess yes on mingw, no on MSVC.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __MINGW32__
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_isnanf_works="guessing yes"
+else
+  gl_cv_func_isnanf_works="guessing no"
+fi
+rm -f conftest*
+
+             ;;
+           *) gl_cv_func_isnanf_works="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanf
+# define isnanf(x) __builtin_isnanf ((float)(x))
+#elif defined isnan
+# undef isnanf
+# define isnanf(x) isnan ((float)(x))
+#endif
+/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0.  */
+#ifdef __DECC
+static float
+NaN ()
+{
+  static float zero = 0.0f;
+  return zero / zero;
+}
+#else
+# define NaN() (0.0f / 0.0f)
+#endif
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; float value; } memory_float;
+int main()
+{
+  int result = 0;
+
+  if (isnanf (1.0f / 0.0f))
+    result |= 1;
+
+  if (!isnanf (NaN ()))
+    result |= 2;
+
+#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
+  /* The isnanf function should be immune against changes in the sign bit and
+     in the mantissa bits.  The xor operation twiddles a bit that can only be
+     a sign bit or a mantissa bit.  */
+  if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0)
+    {
+      memory_float m;
+
+      m.value = NaN ();
+      /* Set the bits below the exponent to 01111...111.  */
+      m.word[0] &= -1U << FLT_EXPBIT0_BIT;
+      m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1;
+      if (!isnanf (m.value))
+        result |= 4;
+    }
+#endif
+
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_isnanf_works=yes
+else
+  gl_cv_func_isnanf_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanf_works" >&5
+$as_echo "$gl_cv_func_isnanf_works" >&6; }
+
+  fi
+  if test $gl_cv_func_isnanf_no_libm = yes \
+     && { case "$gl_cv_func_isnanf_works" in
+            *yes) true;;
+            *) false;;
+          esac
+        }; then
+    gl_func_isnanf_no_libm=yes
+
+$as_echo "#define HAVE_ISNANF_IN_LIBC 1" >>confdefs.h
+
+  else
+    gl_func_isnanf_no_libm=no
+  fi
+
+  if test $gl_func_isnanf_no_libm != yes; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS isnanf.$ac_objext"
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5
+$as_echo_n "checking where to find the exponent in a 'float'... " >&6; }
+if ${gl_cv_cc_float_expbit0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  gl_cv_cc_float_expbit0="word 0 bit 23"
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { float value; unsigned int word[NWORDS]; } memory_float;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (float x)
+{
+  memory_float m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (float) < sizeof (memory_float).  */
+  memset (&m, 0, sizeof (memory_float));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25f);
+  add_to_ored_words (0.5f);
+  add_to_ored_words (1.0f);
+  add_to_ored_words (2.0f);
+  add_to_ored_words (4.0f);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_float_expbit0=`cat conftest.out`
+else
+  gl_cv_cc_float_expbit0="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5
+$as_echo "$gl_cv_cc_float_expbit0" >&6; }
+  case "$gl_cv_cc_float_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_EXPBIT0_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_EXPBIT0_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnan(long double) can be used without linking with libm" >&5
+$as_echo_n "checking whether isnan(long double) can be used without linking with libm... " >&6; }
+if ${gl_cv_func_isnanl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanl
+             # define isnanl(x) __builtin_isnanl ((long double)(x))
+             #elif defined isnan
+             # undef isnanl
+             # define isnanl(x) isnan ((long double)(x))
+             #endif
+             long double x;
+int
+main ()
+{
+return isnanl (x);
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_isnanl_no_libm=yes
+else
+  gl_cv_func_isnanl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_no_libm" >&5
+$as_echo "$gl_cv_func_isnanl_no_libm" >&6; }
+
+  gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm
+  if test $gl_func_isnanl_no_libm = yes; then
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether isnanl works" >&5
+$as_echo_n "checking whether isnanl works... " >&6; }
+if ${gl_cv_func_isnanl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           mingw*) # Guess yes on mingw, no on MSVC.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __MINGW32__
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_func_isnanl_works="guessing yes"
+else
+  gl_cv_func_isnanl_works="guessing no"
+fi
+rm -f conftest*
+
+             ;;
+           *) gl_cv_func_isnanl_works="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <limits.h>
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanl
+# define isnanl(x) __builtin_isnanl ((long double)(x))
+#elif defined isnan
+# undef isnanl
+# define isnanl(x) isnan ((long double)(x))
+#endif
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; long double value; }
+        memory_long_double;
+/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the
+   runtime type conversion.  */
+#ifdef __sgi
+static long double NaNl ()
+{
+  double zero = 0.0;
+  return zero / zero;
+}
+#else
+# define NaNl() (0.0L / 0.0L)
+#endif
+int main ()
+{
+  int result = 0;
+
+  if (!isnanl (NaNl ()))
+    result |= 1;
+
+  {
+    memory_long_double m;
+    unsigned int i;
+
+    /* The isnanl function should be immune against changes in the sign bit and
+       in the mantissa bits.  The xor operation twiddles a bit that can only be
+       a sign bit or a mantissa bit (since the exponent never extends to
+       bit 31).  */
+    m.value = NaNl ();
+    m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
+    for (i = 0; i < NWORDS; i++)
+      m.word[i] |= 1;
+    if (!isnanl (m.value))
+      result |= 1;
+  }
+
+#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+/* Representation of an 80-bit 'long double' as an initializer for a sequence
+   of 'unsigned int' words.  */
+# ifdef WORDS_BIGENDIAN
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
+       ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16),   \
+       (unsigned int) (mantlo) << 16                                        \
+     }
+# else
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { mantlo, manthi, exponent }
+# endif
+  { /* Quiet NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  {
+    /* Signalling NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  /* isnanl should return something even for noncanonical values.  */
+  { /* Pseudo-NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
+    if (isnanl (x.value) && !isnanl (x.value))
+      result |= 4;
+  }
+  { /* Pseudo-Infinity.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
+    if (isnanl (x.value) && !isnanl (x.value))
+      result |= 8;
+  }
+  { /* Pseudo-Zero.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
+    if (isnanl (x.value) && !isnanl (x.value))
+      result |= 16;
+  }
+  { /* Unnormalized number.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
+    if (isnanl (x.value) && !isnanl (x.value))
+      result |= 32;
+  }
+  { /* Pseudo-Denormal.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
+    if (isnanl (x.value) && !isnanl (x.value))
+      result |= 64;
+  }
+#endif
+
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_isnanl_works=yes
+else
+  gl_cv_func_isnanl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_isnanl_works" >&5
+$as_echo "$gl_cv_func_isnanl_works" >&6; }
+
+    case "$gl_cv_func_isnanl_works" in
+      *yes) ;;
+      *)    gl_func_isnanl_no_libm=no ;;
+    esac
+  fi
+  if test $gl_func_isnanl_no_libm = yes; then
+
+$as_echo "#define HAVE_ISNANL_IN_LIBC 1" >>confdefs.h
+
+  fi
+
+  if test $gl_func_isnanl_no_libm != yes; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS isnanl.$ac_objext"
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5
+$as_echo_n "checking where to find the exponent in a 'long double'... " >&6; }
+if ${gl_cv_cc_long_double_expbit0+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+                              gl_cv_cc_long_double_expbit0="unknown"
+          case "$host_os" in
+            mingw*) # On native Windows (little-endian), we know the result
+                    # in two cases: mingw, MSVC.
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef __MINGW32__
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_cc_long_double_expbit0="word 2 bit 0"
+fi
+rm -f conftest*
+
+              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Known
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Known" >/dev/null 2>&1; then :
+  gl_cv_cc_long_double_expbit0="word 1 bit 20"
+fi
+rm -f conftest*
+
+              ;;
+          esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { long double value; unsigned int word[NWORDS]; }
+        memory_long_double;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (long double x)
+{
+  memory_long_double m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (long double) < sizeof (memory_long_double).  */
+  memset (&m, 0, sizeof (memory_long_double));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25L);
+  add_to_ored_words (0.5L);
+  add_to_ored_words (1.0L);
+  add_to_ored_words (2.0L);
+  add_to_ored_words (4.0L);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_long_double_expbit0=`cat conftest.out`
+else
+  gl_cv_cc_long_double_expbit0="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_expbit0" >&5
+$as_echo "$gl_cv_cc_long_double_expbit0" >&6; }
+  case "$gl_cv_cc_long_double_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define LDBL_EXPBIT0_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define LDBL_EXPBIT0_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+
+  fi
+
+
+
+
+
+
+
+
+
+    LOCALCHARSET_TESTS_ENVIRONMENT=
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_math_h='<'math.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <math.h>" >&5
+$as_echo_n "checking absolute name of <math.h>... " >&6; }
+if ${gl_cv_next_math_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_math_h = yes; then
+
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+_ACEOF
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'math.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_math_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_math_h
+           gl_cv_next_math_h='"'$gl_header'"'
+          else
+               gl_cv_next_math_h='<'math.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_math_h" >&5
+$as_echo "$gl_cv_next_math_h" >&6; }
+     fi
+     NEXT_MATH_H=$gl_cv_next_math_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'math.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_math_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_MATH_H=$gl_next_as_first_directive
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NAN macro works" >&5
+$as_echo_n "checking whether NAN macro works... " >&6; }
+if ${gl_cv_header_math_nan_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+int
+main ()
+{
+/* Solaris 10 has a broken definition of NAN.  Other platforms
+        fail to provide NAN, or provide it only in C99 mode; this
+        test only needs to fail when NAN is provided but wrong.  */
+         float f = 1.0f;
+#ifdef NAN
+         f = NAN;
+#endif
+         return f == 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_math_nan_works=yes
+else
+  gl_cv_header_math_nan_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_nan_works" >&5
+$as_echo "$gl_cv_header_math_nan_works" >&6; }
+  if test $gl_cv_header_math_nan_works = no; then
+    REPLACE_NAN=1
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether HUGE_VAL works" >&5
+$as_echo_n "checking whether HUGE_VAL works... " >&6; }
+if ${gl_cv_header_math_huge_val_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+int
+main ()
+{
+/* Solaris 10 has a broken definition of HUGE_VAL.  */
+         double d = HUGE_VAL;
+         return d == 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_header_math_huge_val_works=yes
+else
+  gl_cv_header_math_huge_val_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_math_huge_val_works" >&5
+$as_echo "$gl_cv_header_math_huge_val_works" >&6; }
+  if test $gl_cv_header_math_huge_val_works = no; then
+    REPLACE_HUGE_VAL=1
+  fi
+
+
+
+
+
+
+  if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS memchr.$ac_objext"
+
+
+  for ac_header in bp-sym.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default"
+if test "x$ac_cv_header_bp_sym_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_BP_SYM_H 1
+_ACEOF
+
+fi
+
+done
+
+
+  fi
+
+
+
+
+
+          GNULIB_MEMCHR=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h
+
+
+
+
+
+
+
+  if test $gl_cv_func_frexp_no_libm = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5
+$as_echo_n "checking whether frexp works... " >&6; }
+if ${gl_cv_func_frexp_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+           netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;;
+           mingw*) # Guess yes with MSVC, no with mingw.
+             cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#ifdef _MSC_VER
+ Good
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Good" >/dev/null 2>&1; then :
+  gl_cv_func_frexp_works="guessing yes"
+else
+  gl_cv_func_frexp_works="guessing no"
+fi
+rm -f conftest*
+
+             ;;
+           *) gl_cv_func_frexp_works="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <math.h>
+#include <string.h>
+#if HAVE_DECL_ALARM
+# include <signal.h>
+# include <unistd.h>
+#endif
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   ICC 10.0 has a bug when optimizing the expression -zero.
+   The expression -DBL_MIN * DBL_MIN does not work when cross-compiling
+   to PowerPC on Mac OS X 10.5.  */
+#if defined __hpux || defined __sgi || defined __ICC
+static double
+compute_minus_zero (void)
+{
+  return -DBL_MIN * DBL_MIN;
+}
+# define minus_zero compute_minus_zero ()
+#else
+double minus_zero = -0.0;
+#endif
+int main()
+{
+  int result = 0;
+  int i;
+  volatile double x;
+  double zero = 0.0;
+#if HAVE_DECL_ALARM
+  /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite
+     number.  Let the test fail in this case.  */
+  signal (SIGALRM, SIG_DFL);
+  alarm (5);
+#endif
+  /* Test on denormalized numbers.  */
+  for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5)
+    ;
+  if (x > 0.0)
+    {
+      int exp;
+      double y = frexp (x, &exp);
+      /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022.
+         On NetBSD: y = 0.75. Correct: y = 0.5.  */
+      if (y != 0.5)
+        result |= 1;
+    }
+  /* Test on infinite numbers.  */
+  x = 1.0 / zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (y != x)
+      result |= 2;
+  }
+  /* Test on negative zero.  */
+  x = minus_zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (memcmp (&y, &x, sizeof x))
+      result |= 4;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_frexp_works=yes
+else
+  gl_cv_func_frexp_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexp_works" >&5
+$as_echo "$gl_cv_func_frexp_works" >&6; }
+
+    case "$gl_cv_func_frexp_works" in
+      *yes)
+
+$as_echo "#define HAVE_FREXP_IN_LIBC 1" >>confdefs.h
+
+        ;;
+    esac
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexp can be used without linking with libm" >&5
+$as_echo_n "checking whether ldexp can be used without linking with libm... " >&6; }
+if ${gl_cv_func_ldexp_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             double x;
+             int y;
+int
+main ()
+{
+return ldexp (x, y) < 1;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_ldexp_no_libm=yes
+else
+  gl_cv_func_ldexp_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexp_no_libm" >&5
+$as_echo "$gl_cv_func_ldexp_no_libm" >&6; }
+  if test $gl_cv_func_ldexp_no_libm = yes; then
+
+$as_echo "#define HAVE_LDEXP_IN_LIBC 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used without linking with libm" >&5
+$as_echo_n "checking whether frexpl() can be used without linking with libm... " >&6; }
+if ${gl_cv_func_frexpl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             long double x;
+int
+main ()
+{
+int e; return frexpl (x, &e) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_frexpl_no_libm=yes
+else
+  gl_cv_func_frexpl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_no_libm" >&5
+$as_echo "$gl_cv_func_frexpl_no_libm" >&6; }
+
+  if test $gl_cv_func_frexpl_no_libm = yes; then
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5
+$as_echo_n "checking whether frexpl works... " >&6; }
+if ${gl_cv_func_frexpl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*)
+              gl_cv_func_frexpl_works="guessing no";;
+           *) gl_cv_func_frexpl_works="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <float.h>
+#include <math.h>
+/* Override the values of <float.h>, like done in float.in.h.  */
+#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP DBL_MIN_EXP
+#endif
+#if defined __sgi && (LDBL_MANT_DIG >= 106)
+# if defined __GNUC__
+#  undef LDBL_MIN_EXP
+#  define LDBL_MIN_EXP DBL_MIN_EXP
+# endif
+#endif
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double frexpl (long double, int *);
+int main()
+{
+  int result = 0;
+  volatile long double x;
+  /* Test on finite numbers that fails on AIX 5.1.  */
+  x = 16.0L;
+  {
+    int exp = -9999;
+    frexpl (x, &exp);
+    if (exp != 5)
+      result |= 1;
+  }
+  /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl
+     function returns an invalid (incorrectly normalized) value: it returns
+               y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 }
+     but the correct result is
+          0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 }  */
+  x = 1.01L;
+  {
+    int exp = -9999;
+    long double y = frexpl (x, &exp);
+    if (!(exp == 1 && y == 0.505L))
+      result |= 2;
+  }
+  /* Test on large finite numbers.  This fails on BeOS at i = 16322, while
+     LDBL_MAX_EXP = 16384.
+     In the loop end test, we test x against Infinity, rather than comparing
+     i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L)
+      {
+        int exp = -9999;
+        frexpl (x, &exp);
+        if (exp != i)
+          {
+            result |= 4;
+            break;
+          }
+      }
+  }
+  /* Test on denormalized numbers.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
+      ;
+    if (x > 0.0L)
+      {
+        int exp;
+        long double y = frexpl (x, &exp);
+        /* On machines with IEEE854 arithmetic: x = 1.68105e-4932,
+           exp = -16382, y = 0.5.  On Mac OS X 10.5: exp = -16384, y = 0.5.  */
+        if (exp != LDBL_MIN_EXP - 1)
+          result |= 8;
+      }
+  }
+  /* Test on infinite numbers.  */
+  x = 1.0L / 0.0L;
+  {
+    int exp;
+    long double y = frexpl (x, &exp);
+    if (y != x)
+      result |= 16;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_frexpl_works=yes
+else
+  gl_cv_func_frexpl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_frexpl_works" >&5
+$as_echo "$gl_cv_func_frexpl_works" >&6; }
+
+    case "$gl_cv_func_frexpl_works" in
+      *yes) gl_func_frexpl_no_libm=yes ;;
+      *)    gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;;
+    esac
+  else
+    gl_func_frexpl_no_libm=no
+        REPLACE_FREXPL=1
+  fi
+  if test $gl_func_frexpl_no_libm = yes; then
+
+$as_echo "#define HAVE_FREXPL_IN_LIBC 1" >>confdefs.h
+
+            ac_fn_c_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_frexpl" = xyes; then :
+
+else
+  HAVE_DECL_FREXPL=0
+fi
+
+  fi
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexpl() can be used without linking with libm" >&5
+$as_echo_n "checking whether ldexpl() can be used without linking with libm... " >&6; }
+if ${gl_cv_func_ldexpl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+             long double x;
+int
+main ()
+{
+return ldexpl (x, -1) > 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_ldexpl_no_libm=yes
+else
+  gl_cv_func_ldexpl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexpl_no_libm" >&5
+$as_echo "$gl_cv_func_ldexpl_no_libm" >&6; }
+
+  if test $gl_cv_func_ldexpl_no_libm = yes; then
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ldexpl works" >&5
+$as_echo_n "checking whether ldexpl works... " >&6; }
+if ${gl_cv_func_ldexpl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_ldexpl_works="guessing yes" ;;
+           *)               gl_cv_func_ldexpl_works="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <math.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double ldexpl (long double, int);
+int main()
+{
+  int result = 0;
+  {
+    volatile long double x = 1.0;
+    volatile long double y = ldexpl (x, -1);
+    if (y != 0.5L)
+      result |= 1;
+  }
+  {
+    volatile long double x = 1.73205L;
+    volatile long double y = ldexpl (x, 0);
+    if (y != x)
+      result |= 2;
+  }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_ldexpl_works=yes
+else
+  gl_cv_func_ldexpl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_ldexpl_works" >&5
+$as_echo "$gl_cv_func_ldexpl_works" >&6; }
+
+    case "$gl_cv_func_ldexpl_works" in
+      *yes)
+
+$as_echo "#define HAVE_LDEXPL_IN_LIBC 1" >>confdefs.h
+
+                        ac_fn_c_check_decl "$LINENO" "ldexpl" "ac_cv_have_decl_ldexpl" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_ldexpl" = xyes; then :
+
+else
+  HAVE_DECL_LDEXPL=0
+fi
+
+        ;;
+    esac
+  fi
+
+
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signbit macro" >&5
+$as_echo_n "checking for signbit macro... " >&6; }
+if ${gl_cv_func_signbit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;;
+                          # Guess yes on native Windows.
+           mingw*)        gl_cv_func_signbit="guessing yes" ;;
+                          # If we don't know, assume the worst.
+           *)             gl_cv_func_signbit="guessing no" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <math.h>
+/* If signbit is defined as a function, don't use it, since calling it for
+   'float' or 'long double' arguments would involve conversions.
+   If signbit is not declared at all but exists as a library function, don't
+   use it, since the prototype may not match.
+   If signbit is not declared at all but exists as a compiler built-in, don't
+   use it, since it's preferable to use __builtin_signbit* (no warnings,
+   no conversions).  */
+#ifndef signbit
+# error "signbit should be a macro"
+#endif
+#include <string.h>
+
+/* Global variables.
+   Needed because GCC 4 constant-folds __builtin_signbitl (literal)
+   but cannot constant-fold            __builtin_signbitl (variable).  */
+float vf;
+double vd;
+long double vl;
+int main ()
+{
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   So we use -p0f and -p0d instead.  */
+float p0f = 0.0f;
+float m0f = -p0f;
+double p0d = 0.0;
+double m0d = -p0d;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use another constant expression instead.
+   But that expression does not work on other platforms, such as when
+   cross-compiling to PowerPC on Mac OS X 10.5.  */
+long double p0l = 0.0L;
+#if defined __hpux || defined __sgi
+long double m0l = -LDBL_MIN * LDBL_MIN;
+#else
+long double m0l = -p0l;
+#endif
+  int result = 0;
+  if (signbit (vf)) /* link check */
+    vf++;
+  {
+    float plus_inf = 1.0f / p0f;
+    float minus_inf = -1.0f / p0f;
+    if (!(!signbit (255.0f)
+          && signbit (-255.0f)
+          && !signbit (p0f)
+          && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 1;
+  }
+  if (signbit (vd)) /* link check */
+    vd++;
+  {
+    double plus_inf = 1.0 / p0d;
+    double minus_inf = -1.0 / p0d;
+    if (!(!signbit (255.0)
+          && signbit (-255.0)
+          && !signbit (p0d)
+          && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 2;
+  }
+  if (signbit (vl)) /* link check */
+    vl++;
+  {
+    long double plus_inf = 1.0L / p0l;
+    long double minus_inf = -1.0L / p0l;
+    if (signbit (255.0L))
+      result |= 4;
+    if (!signbit (-255.0L))
+      result |= 4;
+    if (signbit (p0l))
+      result |= 8;
+    if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)))
+      result |= 16;
+    if (signbit (plus_inf))
+      result |= 32;
+    if (!signbit (minus_inf))
+      result |= 64;
+  }
+  return result;
+}
+
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_signbit=yes
+else
+  gl_cv_func_signbit=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit" >&5
+$as_echo "$gl_cv_func_signbit" >&6; }
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for signbit compiler built-ins" >&5
+$as_echo_n "checking for signbit compiler built-ins... " >&6; }
+if ${gl_cv_func_signbit_gcc+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_signbit_gcc="guessing yes" ;;
+                          # Guess yes on mingw, no on MSVC.
+           mingw*)        if test -n "$GCC"; then
+                            gl_cv_func_signbit_gcc="guessing yes"
+                          else
+                            gl_cv_func_signbit_gcc="guessing no"
+                          fi
+                          ;;
+                          # If we don't know, assume the worst.
+           *)             gl_cv_func_signbit_gcc="guessing no" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#if __GNUC__ >= 4
+# define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
+    __builtin_signbitf (x))
+#else
+# error "signbit should be three compiler built-ins"
+#endif
+#include <string.h>
+
+/* Global variables.
+   Needed because GCC 4 constant-folds __builtin_signbitl (literal)
+   but cannot constant-fold            __builtin_signbitl (variable).  */
+float vf;
+double vd;
+long double vl;
+int main ()
+{
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   So we use -p0f and -p0d instead.  */
+float p0f = 0.0f;
+float m0f = -p0f;
+double p0d = 0.0;
+double m0d = -p0d;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use another constant expression instead.
+   But that expression does not work on other platforms, such as when
+   cross-compiling to PowerPC on Mac OS X 10.5.  */
+long double p0l = 0.0L;
+#if defined __hpux || defined __sgi
+long double m0l = -LDBL_MIN * LDBL_MIN;
+#else
+long double m0l = -p0l;
+#endif
+  int result = 0;
+  if (signbit (vf)) /* link check */
+    vf++;
+  {
+    float plus_inf = 1.0f / p0f;
+    float minus_inf = -1.0f / p0f;
+    if (!(!signbit (255.0f)
+          && signbit (-255.0f)
+          && !signbit (p0f)
+          && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 1;
+  }
+  if (signbit (vd)) /* link check */
+    vd++;
+  {
+    double plus_inf = 1.0 / p0d;
+    double minus_inf = -1.0 / p0d;
+    if (!(!signbit (255.0)
+          && signbit (-255.0)
+          && !signbit (p0d)
+          && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 2;
+  }
+  if (signbit (vl)) /* link check */
+    vl++;
+  {
+    long double plus_inf = 1.0L / p0l;
+    long double minus_inf = -1.0L / p0l;
+    if (signbit (255.0L))
+      result |= 4;
+    if (!signbit (-255.0L))
+      result |= 4;
+    if (signbit (p0l))
+      result |= 8;
+    if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)))
+      result |= 16;
+    if (signbit (plus_inf))
+      result |= 32;
+    if (!signbit (minus_inf))
+      result |= 64;
+  }
+  return result;
+}
+
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_signbit_gcc=yes
+else
+  gl_cv_func_signbit_gcc=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_signbit_gcc" >&5
+$as_echo "$gl_cv_func_signbit_gcc" >&6; }
+      case "$gl_cv_func_signbit_gcc" in
+    *yes)
+      REPLACE_SIGNBIT_USING_GCC=1
+      ;;
+    *)
+      case "$gl_cv_func_signbit" in
+        *yes) ;;
+        *)
+                    REPLACE_SIGNBIT=1
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'float'" >&5
+$as_echo_n "checking where to find the sign bit in a 'float'... " >&6; }
+if ${gl_cv_cc_float_signbit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+                              gl_cv_cc_float_signbit="unknown"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdio.h>
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { float value; unsigned int word[NWORDS]; }
+        memory_float;
+static memory_float plus = { 1.0f };
+static memory_float minus = { -1.0f };
+int main ()
+{
+  size_t j, k, i;
+  unsigned int m;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  /* Find the different bit.  */
+  k = 0; m = 0;
+  for (j = 0; j < NWORDS; j++)
+    {
+      unsigned int x = plus.word[j] ^ minus.word[j];
+      if ((x & (x - 1)) || (x && m))
+        {
+          /* More than one bit difference.  */
+          fprintf (fp, "unknown");
+          fclose (fp);
+          return 2;
+        }
+      if (x)
+        {
+          k = j;
+          m = x;
+        }
+    }
+  if (m == 0)
+    {
+      /* No difference.  */
+      fprintf (fp, "unknown");
+      fclose (fp);
+      return 3;
+    }
+  /* Now m = plus.word[k] ^ ~minus.word[k].  */
+  if (plus.word[k] & ~minus.word[k])
+    {
+      /* Oh? The sign bit is set in the positive and cleared in the negative
+         numbers?  */
+      fprintf (fp, "unknown");
+      fclose (fp);
+      return 4;
+    }
+  for (i = 0; ; i++)
+    if ((m >> i) & 1)
+      break;
+  fprintf (fp, "word %d bit %d", (int) k, (int) i);
+  if (fclose (fp) != 0)
+    return 5;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_float_signbit=`cat conftest.out`
+else
+  gl_cv_cc_float_signbit="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_signbit" >&5
+$as_echo "$gl_cv_cc_float_signbit" >&6; }
+  case "$gl_cv_cc_float_signbit" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_SIGNBIT_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define FLT_SIGNBIT_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'double'" >&5
+$as_echo_n "checking where to find the sign bit in a 'double'... " >&6; }
+if ${gl_cv_cc_double_signbit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+                              gl_cv_cc_double_signbit="unknown"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdio.h>
+#define NWORDS \
+  ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { double value; unsigned int word[NWORDS]; }
+        memory_float;
+static memory_float plus = { 1.0 };
+static memory_float minus = { -1.0 };
+int main ()
+{
+  size_t j, k, i;
+  unsigned int m;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  /* Find the different bit.  */
+  k = 0; m = 0;
+  for (j = 0; j < NWORDS; j++)
+    {
+      unsigned int x = plus.word[j] ^ minus.word[j];
+      if ((x & (x - 1)) || (x && m))
+        {
+          /* More than one bit difference.  */
+          fprintf (fp, "unknown");
+          fclose (fp);
+          return 2;
+        }
+      if (x)
+        {
+          k = j;
+          m = x;
+        }
+    }
+  if (m == 0)
+    {
+      /* No difference.  */
+      fprintf (fp, "unknown");
+      fclose (fp);
+      return 3;
+    }
+  /* Now m = plus.word[k] ^ ~minus.word[k].  */
+  if (plus.word[k] & ~minus.word[k])
+    {
+      /* Oh? The sign bit is set in the positive and cleared in the negative
+         numbers?  */
+      fprintf (fp, "unknown");
+      fclose (fp);
+      return 4;
+    }
+  for (i = 0; ; i++)
+    if ((m >> i) & 1)
+      break;
+  fprintf (fp, "word %d bit %d", (int) k, (int) i);
+  if (fclose (fp) != 0)
+    return 5;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_double_signbit=`cat conftest.out`
+else
+  gl_cv_cc_double_signbit="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_signbit" >&5
+$as_echo "$gl_cv_cc_double_signbit" >&6; }
+  case "$gl_cv_cc_double_signbit" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define DBL_SIGNBIT_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define DBL_SIGNBIT_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'long double'" >&5
+$as_echo_n "checking where to find the sign bit in a 'long double'... " >&6; }
+if ${gl_cv_cc_long_double_signbit+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+                              gl_cv_cc_long_double_signbit="unknown"
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stddef.h>
+#include <stdio.h>
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { long double value; unsigned int word[NWORDS]; }
+        memory_float;
+static memory_float plus = { 1.0L };
+static memory_float minus = { -1.0L };
+int main ()
+{
+  size_t j, k, i;
+  unsigned int m;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  /* Find the different bit.  */
+  k = 0; m = 0;
+  for (j = 0; j < NWORDS; j++)
+    {
+      unsigned int x = plus.word[j] ^ minus.word[j];
+      if ((x & (x - 1)) || (x && m))
+        {
+          /* More than one bit difference.  */
+          fprintf (fp, "unknown");
+          fclose (fp);
+          return 2;
+        }
+      if (x)
+        {
+          k = j;
+          m = x;
+        }
+    }
+  if (m == 0)
+    {
+      /* No difference.  */
+      fprintf (fp, "unknown");
+      fclose (fp);
+      return 3;
+    }
+  /* Now m = plus.word[k] ^ ~minus.word[k].  */
+  if (plus.word[k] & ~minus.word[k])
+    {
+      /* Oh? The sign bit is set in the positive and cleared in the negative
+         numbers?  */
+      fprintf (fp, "unknown");
+      fclose (fp);
+      return 4;
+    }
+  for (i = 0; ; i++)
+    if ((m >> i) & 1)
+      break;
+  fprintf (fp, "word %d bit %d", (int) k, (int) i);
+  if (fclose (fp) != 0)
+    return 5;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_cc_long_double_signbit=`cat conftest.out`
+else
+  gl_cv_cc_long_double_signbit="unknown"
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+      rm -f conftest.out
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_signbit" >&5
+$as_echo "$gl_cv_cc_long_double_signbit" >&6; }
+  case "$gl_cv_cc_long_double_signbit" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word.*bit //'`
+
+cat >>confdefs.h <<_ACEOF
+#define LDBL_SIGNBIT_WORD $word
+_ACEOF
+
+
+cat >>confdefs.h <<_ACEOF
+#define LDBL_SIGNBIT_BIT $bit
+_ACEOF
+
+      ;;
+  esac
+
+
+          if test "$gl_cv_cc_float_signbit" = unknown; then
+                        ac_fn_c_check_decl "$LINENO" "copysignf" "ac_cv_have_decl_copysignf" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_copysignf" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGNF $ac_have_decl
+_ACEOF
+
+            if test "$ac_cv_have_decl_copysignf" = yes; then
+                            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysignf can be used without linking with libm" >&5
+$as_echo_n "checking whether copysignf can be used without linking with libm... " >&6; }
+if ${gl_cv_func_copysignf_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+                         float x, y;
+int
+main ()
+{
+return copysignf (x, y) < 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_copysignf_no_libm=yes
+else
+  gl_cv_func_copysignf_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignf_no_libm" >&5
+$as_echo "$gl_cv_func_copysignf_no_libm" >&6; }
+              if test $gl_cv_func_copysignf_no_libm = yes; then
+
+$as_echo "#define HAVE_COPYSIGNF_IN_LIBC 1" >>confdefs.h
+
+              fi
+            fi
+          fi
+          if test "$gl_cv_cc_double_signbit" = unknown; then
+                        ac_fn_c_check_decl "$LINENO" "copysign" "ac_cv_have_decl_copysign" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_copysign" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGN $ac_have_decl
+_ACEOF
+
+            if test "$ac_cv_have_decl_copysign" = yes; then
+                            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysign can be used without linking with libm" >&5
+$as_echo_n "checking whether copysign can be used without linking with libm... " >&6; }
+if ${gl_cv_func_copysign_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+                         double x, y;
+int
+main ()
+{
+return copysign (x, y) < 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_copysign_no_libm=yes
+else
+  gl_cv_func_copysign_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysign_no_libm" >&5
+$as_echo "$gl_cv_func_copysign_no_libm" >&6; }
+              if test $gl_cv_func_copysign_no_libm = yes; then
+
+$as_echo "#define HAVE_COPYSIGN_IN_LIBC 1" >>confdefs.h
+
+              fi
+            fi
+          fi
+          if test "$gl_cv_cc_long_double_signbit" = unknown; then
+                        ac_fn_c_check_decl "$LINENO" "copysignl" "ac_cv_have_decl_copysignl" "#include <math.h>
+"
+if test "x$ac_cv_have_decl_copysignl" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_COPYSIGNL $ac_have_decl
+_ACEOF
+
+            if test "$ac_cv_have_decl_copysignl" = yes; then
+                            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether copysignl can be used without linking with libm" >&5
+$as_echo_n "checking whether copysignl can be used without linking with libm... " >&6; }
+if ${gl_cv_func_copysignl_no_libm+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+                  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <math.h>
+                         long double x, y;
+int
+main ()
+{
+return copysignl (x, y) < 0;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  gl_cv_func_copysignl_no_libm=yes
+else
+  gl_cv_func_copysignl_no_libm=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_copysignl_no_libm" >&5
+$as_echo "$gl_cv_func_copysignl_no_libm" >&6; }
+              if test $gl_cv_func_copysignl_no_libm = yes; then
+
+$as_echo "#define HAVE_COPYSIGNL_IN_LIBC 1" >>confdefs.h
+
+              fi
+            fi
+          fi
+          ;;
+      esac
+      ;;
+  esac
+
+  if test $REPLACE_SIGNBIT = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS signbitf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS signbitd.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS signbitl.$ac_objext"
+
+  fi
+
+
+
+
+
+          GNULIB_SIGNBIT=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_SIGNBIT 1" >>confdefs.h
+
+
+
+
+  for ac_header in stdint.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDINT_H 1
+_ACEOF
+
+fi
+
+done
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5
+$as_echo_n "checking for SIZE_MAX... " >&6; }
+if ${gl_cv_size_max+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+    gl_cv_size_max=
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Found it" >/dev/null 2>&1; then :
+  gl_cv_size_max=yes
+fi
+rm -f conftest*
+
+    if test -z "$gl_cv_size_max"; then
+                        if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1"        "#include <stddef.h>
+#include <limits.h>"; then :
+
+else
+  size_t_bits_minus_1=
+fi
+
+      if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint"        "#include <stddef.h>"; then :
+
+else
+  fits_in_uint=
+fi
+
+      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
+        if test $fits_in_uint = 1; then
+                              cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+                 extern size_t foo;
+                 extern unsigned long foo;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  fits_in_uint=0
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+        fi
+                                if test $fits_in_uint = 1; then
+          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        else
+          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        fi
+      else
+                gl_cv_size_max='((size_t)~(size_t)0)'
+      fi
+    fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5
+$as_echo "$gl_cv_size_max" >&6; }
+  if test "$gl_cv_size_max" != yes; then
+
+cat >>confdefs.h <<_ACEOF
+#define SIZE_MAX $gl_cv_size_max
+_ACEOF
+
+  fi
+
+
+
+
+  gl_cv_func_snprintf_usable=no
+  for ac_func in snprintf
+do :
+  ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
+if test "x$ac_cv_func_snprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_SNPRINTF 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_snprintf = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf respects a size of 1" >&5
+$as_echo_n "checking whether snprintf respects a size of 1... " >&6; }
+if ${gl_cv_func_snprintf_size1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                   # Guess yes on native Windows.
+           mingw*) gl_cv_func_snprintf_size1="guessing yes" ;;
+           *)      gl_cv_func_snprintf_size1="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 1, "%d", 12345);
+  return buf[1] != 'E';
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_size1=yes
+else
+  gl_cv_func_snprintf_size1=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_size1" >&5
+$as_echo "$gl_cv_func_snprintf_size1" >&6; }
+
+    case "$gl_cv_func_snprintf_size1" in
+      *yes)
+
+        case "$gl_cv_func_snprintf_retval_c99" in
+          *yes)
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5
+$as_echo_n "checking whether printf supports POSIX/XSI format strings with positions... " >&6; }
+if ${gl_cv_func_printf_positions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
+                         gl_cv_func_printf_positions="guessing no";;
+           beos*)        gl_cv_func_printf_positions="guessing no";;
+                         # Guess no on native Windows.
+           mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
+           *)            gl_cv_func_printf_positions="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_positions=yes
+else
+  gl_cv_func_printf_positions=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_positions" >&5
+$as_echo "$gl_cv_func_printf_positions" >&6; }
+
+            case "$gl_cv_func_printf_positions" in
+              *yes)
+                gl_cv_func_snprintf_usable=yes
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_snprintf_usable = no; then
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS snprintf.$ac_objext"
+
+  if test $ac_cv_func_snprintf = yes; then
+    REPLACE_SNPRINTF=1
+  else
+
+    if test $ac_cv_have_decl_snprintf = yes; then
+                        REPLACE_SNPRINTF=1
+    fi
+  fi
+  :
+
+  fi
+
+  if test $ac_cv_have_decl_snprintf = no; then
+    HAVE_DECL_SNPRINTF=0
+  fi
+
+
+
+
+
+
+          GNULIB_SNPRINTF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_SNPRINTF 1" >>confdefs.h
+
+
+
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_SNPRINTF 1
+_ACEOF
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5
+$as_echo_n "checking for ssize_t... " >&6; }
+if ${gt_cv_ssize_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <sys/types.h>
+int
+main ()
+{
+int x = sizeof (ssize_t *) + sizeof (ssize_t);
+            return !x;
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gt_cv_ssize_t=yes
+else
+  gt_cv_ssize_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_ssize_t" >&5
+$as_echo "$gt_cv_ssize_t" >&6; }
+  if test $gt_cv_ssize_t = no; then
+
+$as_echo "#define ssize_t int" >>confdefs.h
+
+  fi
+
+
+
+
+  STDDEF_H=
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5
+$as_echo_n "checking for good max_align_t... " >&6; }
+if ${gl_cv_type_max_align_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+            unsigned int s = sizeof (max_align_t);
+            #if defined __GNUC__ || defined __IBM__ALIGNOF__
+            int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1];
+            int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1];
+            #endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_max_align_t=yes
+else
+  gl_cv_type_max_align_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_max_align_t" >&5
+$as_echo "$gl_cv_type_max_align_t" >&6; }
+  if test $gl_cv_type_max_align_t = no; then
+    HAVE_MAX_ALIGN_T=0
+    STDDEF_H=stddef.h
+  fi
+
+  if test $gt_cv_c_wchar_t = no; then
+    HAVE_WCHAR_T=0
+    STDDEF_H=stddef.h
+  fi
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5
+$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; }
+if ${gl_cv_decl_null_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+      int test[2 * (sizeof NULL == sizeof (void *)) -1];
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_decl_null_works=yes
+else
+  gl_cv_decl_null_works=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5
+$as_echo "$gl_cv_decl_null_works" >&6; }
+  if test $gl_cv_decl_null_works = no; then
+    REPLACE_NULL=1
+    STDDEF_H=stddef.h
+  fi
+
+
+   if test -n "$STDDEF_H"; then
+  GL_GENERATE_STDDEF_H_TRUE=
+  GL_GENERATE_STDDEF_H_FALSE='#'
+else
+  GL_GENERATE_STDDEF_H_TRUE='#'
+  GL_GENERATE_STDDEF_H_FALSE=
+fi
+
+  if test -n "$STDDEF_H"; then
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stddef_h='<'stddef.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5
+$as_echo_n "checking absolute name of <stddef.h>... " >&6; }
+if ${gl_cv_next_stddef_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stddef.h>
+_ACEOF
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'stddef.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_stddef_h
+           gl_cv_next_stddef_h='"'$gl_header'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5
+$as_echo "$gl_cv_next_stddef_h" >&6; }
+     fi
+     NEXT_STDDEF_H=$gl_cv_next_stddef_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stddef.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stddef_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive
+
+
+
+
+  fi
+
+
+
+
+  $as_echo "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_stdio_h='<'stdio.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdio.h>" >&5
+$as_echo_n "checking absolute name of <stdio.h>... " >&6; }
+if ${gl_cv_next_stdio_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdio.h>
+_ACEOF
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'stdio.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_stdio_h
+           gl_cv_next_stdio_h='"'$gl_header'"'
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5
+$as_echo "$gl_cv_next_stdio_h" >&6; }
+     fi
+     NEXT_STDIO_H=$gl_cv_next_stdio_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'stdio.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_stdio_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive
+
+
+
+
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5
+$as_echo_n "checking which flavor of printf attribute matches inttypes macros... " >&6; }
+if ${gl_cv_func_printf_attribute_flavor+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+       #define __STDC_FORMAT_MACROS 1
+       #include <stdio.h>
+       #include <inttypes.h>
+       /* For non-mingw systems, compilation will trivially succeed.
+          For mingw, compilation will succeed for older mingw (system
+          printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */
+       #if (defined _WIN32 && ! defined __CYGWIN__) && \
+         (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+       extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1];
+       #endif
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_printf_attribute_flavor=system
+else
+  gl_cv_func_printf_attribute_flavor=gnu
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5
+$as_echo "$gl_cv_func_printf_attribute_flavor" >&6; }
+  if test "$gl_cv_func_printf_attribute_flavor" = gnu; then
+
+$as_echo "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h
+
+  fi
+
+      GNULIB_FSCANF=1
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_FSCANF 1
+_ACEOF
+
+
+  GNULIB_SCANF=1
+
+
+cat >>confdefs.h <<_ACEOF
+#define GNULIB_SCANF 1
+_ACEOF
+
+
+  GNULIB_FGETC=1
+  GNULIB_GETC=1
+  GNULIB_GETCHAR=1
+  GNULIB_FGETS=1
+  GNULIB_FREAD=1
+
+
+      GNULIB_FPRINTF=1
+  GNULIB_PRINTF=1
+  GNULIB_VFPRINTF=1
+  GNULIB_VPRINTF=1
+  GNULIB_FPUTC=1
+  GNULIB_PUTC=1
+  GNULIB_PUTCHAR=1
+  GNULIB_FPUTS=1
+  GNULIB_PUTS=1
+  GNULIB_FWRITE=1
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+      if  { test "$HAVE_LIBUNISTRING" != yes \
+    || {
+
+
+
+            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
+            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
+                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
+                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 4
+                         }
+                    }
+               }
+
+
+
+
+       }
+  }; then
+    LIBUNISTRING_UNITYPES_H='unitypes.h'
+  else
+    LIBUNISTRING_UNITYPES_H=
+  fi
+
+
+
+
+      if  { test "$HAVE_LIBUNISTRING" != yes \
+    || {
+
+
+
+            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
+            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
+                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
+                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 4
+                         }
+                    }
+               }
+
+
+
+
+       }
+  }; then
+    LIBUNISTRING_UNIWIDTH_H='uniwidth.h'
+  else
+    LIBUNISTRING_UNIWIDTH_H=
+  fi
+
+
+
+
+       if  { test "$HAVE_LIBUNISTRING" != yes \
+    || {
+
+
+
+            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
+            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
+                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
+                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 8
+                         }
+                    }
+               }
+
+
+
+
+       }
+  }; then
+  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE=
+  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE='#'
+else
+  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE='#'
+  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE=
+fi
+
+
+
+
+  if test $ac_cv_func_vasnprintf = no; then
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext"
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext"
+
+  if test $ac_cv_func_vasnprintf = yes; then
+
+$as_echo "#define REPLACE_VASNPRINTF 1" >>confdefs.h
+
+  fi
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default"
+if test "x$ac_cv_type_ptrdiff_t" = xyes; then :
+
+else
+
+$as_echo "#define ptrdiff_t long" >>confdefs.h
+
+
+fi
+
+
+
+
+
+
+
+  fi
+
+
+
+  gl_cv_func_vsnprintf_usable=no
+  for ac_func in vsnprintf
+do :
+  ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
+if test "x$ac_cv_func_vsnprintf" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_VSNPRINTF 1
+_ACEOF
+
+fi
+done
+
+  if test $ac_cv_func_vsnprintf = yes; then
+
+
+
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf respects a size of 1" >&5
+$as_echo_n "checking whether snprintf respects a size of 1... " >&6; }
+if ${gl_cv_func_snprintf_size1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+  case "$host_os" in
+                   # Guess yes on native Windows.
+           mingw*) gl_cv_func_snprintf_size1="guessing yes" ;;
+           *)      gl_cv_func_snprintf_size1="guessing yes" ;;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 1, "%d", 12345);
+  return buf[1] != 'E';
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_snprintf_size1=yes
+else
+  gl_cv_func_snprintf_size1=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_snprintf_size1" >&5
+$as_echo "$gl_cv_func_snprintf_size1" >&6; }
+
+    case "$gl_cv_func_snprintf_size1" in
+      *yes)
+
+        case "$gl_cv_func_snprintf_retval_c99" in
+          *yes)
+
+
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5
+$as_echo_n "checking whether printf supports POSIX/XSI format strings with positions... " >&6; }
+if ${gl_cv_func_printf_positions+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+      if test "$cross_compiling" = yes; then :
+
+         case "$host_os" in
+           netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
+                         gl_cv_func_printf_positions="guessing no";;
+           beos*)        gl_cv_func_printf_positions="guessing no";;
+                         # Guess no on native Windows.
+           mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
+           *)            gl_cv_func_printf_positions="guessing yes";;
+         esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_printf_positions=yes
+else
+  gl_cv_func_printf_positions=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_positions" >&5
+$as_echo "$gl_cv_func_printf_positions" >&6; }
+
+            case "$gl_cv_func_printf_positions" in
+              *yes)
+                gl_cv_func_vsnprintf_usable=yes
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_vsnprintf_usable = no; then
+
+
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS vsnprintf.$ac_objext"
+
+  if test $ac_cv_func_vsnprintf = yes; then
+    REPLACE_VSNPRINTF=1
+  else
+
+    if test $ac_cv_have_decl_vsnprintf = yes; then
+                        REPLACE_VSNPRINTF=1
+    fi
+  fi
+  :
+
+  fi
+
+  if test $ac_cv_have_decl_vsnprintf = no; then
+    HAVE_DECL_VSNPRINTF=0
+  fi
+
+
+
+
+
+
+          GNULIB_VSNPRINTF=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_VSNPRINTF 1" >>confdefs.h
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_wchar_h='<'wchar.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5
+$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
+if ${gl_cv_next_wchar_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_wchar_h = yes; then
+
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <wchar.h>
+_ACEOF
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'wchar.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_wchar_h
+           gl_cv_next_wchar_h='"'$gl_header'"'
+          else
+               gl_cv_next_wchar_h='<'wchar.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5
+$as_echo "$gl_cv_next_wchar_h" >&6; }
+     fi
+     NEXT_WCHAR_H=$gl_cv_next_wchar_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'wchar.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_wchar_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+
+
+
+
+
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+  if test $ac_cv_func_iswcntrl = yes; then
+    HAVE_ISWCNTRL=1
+  else
+    HAVE_ISWCNTRL=0
+  fi
+
+
+
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+     if test $gl_cv_have_include_next = yes; then
+       gl_cv_next_wctype_h='<'wctype.h'>'
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5
+$as_echo_n "checking absolute name of <wctype.h>... " >&6; }
+if ${gl_cv_next_wctype_h+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+             if test $ac_cv_header_wctype_h = yes; then
+
+
+
+
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <wctype.h>
+_ACEOF
+                case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+
+  case "$host_os" in
+    mingw*)
+                                          gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+      gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo 'wctype.h' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+
+        gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
+  sed -n "$gl_absolute_header_sed"`
+
+           gl_header=$gl_cv_absolute_wctype_h
+           gl_cv_next_wctype_h='"'$gl_header'"'
+          else
+               gl_cv_next_wctype_h='<'wctype.h'>'
+             fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5
+$as_echo "$gl_cv_next_wctype_h" >&6; }
+     fi
+     NEXT_WCTYPE_H=$gl_cv_next_wctype_h
+
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'wctype.h'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=$gl_cv_next_wctype_h
+     fi
+     NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive
+
+
+
+
+  if test $ac_cv_header_wctype_h = yes; then
+    if test $ac_cv_func_iswcntrl = yes; then
+                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5
+$as_echo_n "checking whether iswcntrl works... " >&6; }
+if ${gl_cv_func_iswcntrl_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+          if test "$cross_compiling" = yes; then :
+               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <stdlib.h>
+                          #if __GNU_LIBRARY__ == 1
+                          Linux libc5 i18n is broken.
+                          #endif
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_func_iswcntrl_works="guessing yes"
+else
+  gl_cv_func_iswcntrl_works="guessing no"
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+               /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+                  included before <wchar.h>.
+                  BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+                  must be included before <wchar.h>.  */
+               #include <stddef.h>
+               #include <stdio.h>
+               #include <time.h>
+               #include <wchar.h>
+               #include <wctype.h>
+               int main () { return iswprint ('x') == 0; }
+
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_iswcntrl_works=yes
+else
+  gl_cv_func_iswcntrl_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5
+$as_echo "$gl_cv_func_iswcntrl_works" >&6; }
+    fi
+    HAVE_WCTYPE_H=1
+  else
+    HAVE_WCTYPE_H=0
+  fi
+
+
+  case "$gl_cv_func_iswcntrl_works" in
+    *yes) REPLACE_ISWCNTRL=0 ;;
+    *)    REPLACE_ISWCNTRL=1 ;;
+  esac
+
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+        :
+  fi
+
+  if test $REPLACE_ISWCNTRL = 1; then
+    REPLACE_TOWLOWER=1
+  else
+    for ac_func in towlower
+do :
+  ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower"
+if test "x$ac_cv_func_towlower" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_TOWLOWER 1
+_ACEOF
+
+fi
+done
+
+    if test $ac_cv_func_towlower = yes; then
+      REPLACE_TOWLOWER=0
+    else
+      ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+             included before <wchar.h>.
+             BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+             must be included before <wchar.h>.  */
+          #include <stddef.h>
+          #include <stdio.h>
+          #include <time.h>
+          #include <wchar.h>
+          #if HAVE_WCTYPE_H
+          # include <wctype.h>
+          #endif
+
+"
+if test "x$ac_cv_have_decl_towlower" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_TOWLOWER $ac_have_decl
+_ACEOF
+
+      if test $ac_cv_have_decl_towlower = yes; then
+                                REPLACE_TOWLOWER=1
+      else
+        REPLACE_TOWLOWER=0
+      fi
+    fi
+  fi
+
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
+        :
+  fi
+
+          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5
+$as_echo_n "checking for wctype_t... " >&6; }
+if ${gl_cv_type_wctype_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #if HAVE_WCTYPE_H
+            # include <wctype.h>
+            #endif
+            wctype_t a;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_wctype_t=yes
+else
+  gl_cv_type_wctype_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5
+$as_echo "$gl_cv_type_wctype_t" >&6; }
+  if test $gl_cv_type_wctype_t = no; then
+    HAVE_WCTYPE_T=0
+  fi
+
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5
+$as_echo_n "checking for wctrans_t... " >&6; }
+if ${gl_cv_type_wctrans_t+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #include <wctype.h>
+            wctrans_t a;
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  gl_cv_type_wctrans_t=yes
+else
+  gl_cv_type_wctrans_t=no
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5
+$as_echo "$gl_cv_type_wctrans_t" >&6; }
+  if test $gl_cv_type_wctrans_t = no; then
+    HAVE_WCTRANS_T=0
+  fi
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+  ac_fn_c_check_decl "$LINENO" "wcwidth" "ac_cv_have_decl_wcwidth" "
+/* AIX 3.2.5 declares wcwidth in <string.h>. */
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+
+"
+if test "x$ac_cv_have_decl_wcwidth" = xyes; then :
+  ac_have_decl=1
+else
+  ac_have_decl=0
+fi
+
+cat >>confdefs.h <<_ACEOF
+#define HAVE_DECL_WCWIDTH $ac_have_decl
+_ACEOF
+
+  if test $ac_cv_have_decl_wcwidth != yes; then
+    HAVE_DECL_WCWIDTH=0
+  fi
+
+  if test $ac_cv_func_wcwidth != yes; then
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcwidth is a macro" >&5
+$as_echo_n "checking whether wcwidth is a macro... " >&6; }
+if ${gl_cv_func_wcwidth_macro+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <wchar.h>
+#ifdef wcwidth
+ wchar_header_defines_wcwidth
+#endif
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "wchar_header_defines_wcwidth" >/dev/null 2>&1; then :
+  gl_cv_func_wcwidth_macro=yes
+else
+  gl_cv_func_wcwidth_macro=no
+fi
+rm -f conftest*
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcwidth_macro" >&5
+$as_echo "$gl_cv_func_wcwidth_macro" >&6; }
+  fi
+
+  if test $ac_cv_func_wcwidth = yes || test $gl_cv_func_wcwidth_macro = yes; then
+    HAVE_WCWIDTH=1
+                        { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcwidth works reasonably in UTF-8 locales" >&5
+$as_echo_n "checking whether wcwidth works reasonably in UTF-8 locales... " >&6; }
+if ${gl_cv_func_wcwidth_works+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+
+        if test "$cross_compiling" = yes; then :
+
+           case "$host_os" in
+                                        # Guess yes on glibc and AIX 7 systems.
+             *-gnu* | gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";;
+             *)                         gl_cv_func_wcwidth_works="guessing no";;
+           esac
+
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <locale.h>
+/* AIX 3.2.5 declares wcwidth in <string.h>. */
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#if !HAVE_DECL_WCWIDTH
+extern
+# ifdef __cplusplus
+"C"
+# endif
+int wcwidth (int);
+#endif
+int main ()
+{
+  int result = 0;
+  if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
+    {
+      if (wcwidth (0x0301) > 0)
+        result |= 1;
+      if (wcwidth (0x05B0) > 0)
+        result |= 2;
+      if (wcwidth (0x200B) > 0)
+        result |= 4;
+      if (wcwidth (0xFF1A) == 0)
+        result |= 8;
+    }
+  return result;
+}
+_ACEOF
+if ac_fn_c_try_run "$LINENO"; then :
+  gl_cv_func_wcwidth_works=yes
+else
+  gl_cv_func_wcwidth_works=no
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcwidth_works" >&5
+$as_echo "$gl_cv_func_wcwidth_works" >&6; }
+    case "$gl_cv_func_wcwidth_works" in
+      *yes) ;;
+      *no) REPLACE_WCWIDTH=1 ;;
+    esac
+  else
+    HAVE_WCWIDTH=0
+  fi
+
+  if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then
+
+
+
+
+
+
+
+
+  gl_LIBOBJS="$gl_LIBOBJS wcwidth.$ac_objext"
+
+
+
+  :
+
+  fi
+
+
+
+
+
+          GNULIB_WCWIDTH=1
+
+
+
+
+
+$as_echo "#define GNULIB_TEST_WCWIDTH 1" >>confdefs.h
+
+
+
+
+
+  for ac_header in stdint.h
+do :
+  ac_fn_c_check_header_mongrel "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default"
+if test "x$ac_cv_header_stdint_h" = xyes; then :
+  cat >>confdefs.h <<_ACEOF
+#define HAVE_STDINT_H 1
+_ACEOF
+
+fi
+
+done
+
+
+  # End of code from modules
+
+
+
+
+
+
+
+
+
+  gltests_libdeps=
+  gltests_ltlibdeps=
+
+
+
+
+
+
+
+
+
+  gl_source_base='tests'
+  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+
+  gl_module_indicator_condition=$gltests_WITNESS
+
+
+
+
+
+
+
+
+
+  LIBGNU_LIBDEPS="$gl_libdeps"
+
+  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
+
+
+
+
+   ac_ext=cpp
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
+
+   if test "$cross_compiling" = no; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking that C++ compiler can compile simple program" >&5
+$as_echo_n "checking that C++ compiler can compile simple program... " >&6; }
+   fi
+   if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+
+int main() {
+  return 0;
+}
+
+
+
+_ACEOF
+if ac_fn_cxx_try_run "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      as_fn_error $? "a working C++ compiler is required" "$LINENO" 5
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+   if test "$cross_compiling" = no; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking that C++ static constructors and destructors are called" >&5
+$as_echo_n "checking that C++ static constructors and destructors are called... " >&6; }
+   fi
+   if test "$cross_compiling" = yes; then :
+  :
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+
+extern "C" {
+  void _exit(int);
+}
+
+int i;
+struct A {
+  char dummy;
+  A() { i = 1; }
+  ~A() { if (i == 1) _exit(0); }
+};
+
+A a;
+
+int main()
+{
+  return 1;
+}
+
+
+
+_ACEOF
+if ac_fn_cxx_try_run "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      as_fn_error $? "a working C++ compiler is required" "$LINENO" 5
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+  conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking that header files support C++" >&5
+$as_echo_n "checking that header files support C++... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+
+#include <stdio.h>
+
+
+int
+main ()
+{
+
+
+fopen(0, 0);
+
+
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_cxx_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+      as_fn_error $? "header files do not support C++
+                  (if you are using a version of gcc/g++ earlier than 2.5,
+                  you should install libg++)" "$LINENO" 5
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+   ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether character set is EBCDIC" >&5
+$as_echo_n "checking whether character set is EBCDIC... " >&6; }
+   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+
+/* Treat any failure as ASCII for compatibility with existing art.
+   Use compile-time rather than run-time tests for cross-compiler
+   tolerance. */
+#if '0' != 240
+make an error "Character set is not EBCDIC"
+#endif
+
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_compile "$LINENO"; then :
+  groff_cv_ebcdic="yes"
+      TTYDEVDIRS="font/devcp1047"
+      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define IS_EBCDIC_HOST 1" >>confdefs.h
+
+else
+  groff_cv_ebcdic="no"
+     TTYDEVDIRS="font/devascii font/devlatin1"
+     OTHERDEVDIRS="font/devlj4 font/devlbp"
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
+
+
+if test "$groff_cv_ebcdic" = "yes"; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for OS/390 Unix" >&5
+$as_echo_n "checking for OS/390 Unix... " >&6; }
+     case `uname` in
+     OS/390)
+       CFLAGS="$CFLAGS -D_ALL_SOURCE"
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; } ;;
+     *)
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; } ;;
+     esac
+   fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to install .cmd wrapper scripts for Windows" >&5
+$as_echo_n "checking whether to install .cmd wrapper scripts for Windows... " >&6; }
+   case "$host_os" in
+   *mingw*)
+     make_winscripts=winscripts
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; } ;;
+   *)
+     make_winscripts=
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; } ;;
+   esac
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for X" >&5
+$as_echo_n "checking for X... " >&6; }
+
+
+# Check whether --with-x was given.
+if test "${with_x+set}" = set; then :
+  withval=$with_x;
+fi
+
+# $have_x is `yes', `no', `disabled', or empty when we do not yet know.
+if test "x$with_x" = xno; then
+  # The user explicitly disabled X.
+  have_x=disabled
+else
+  case $x_includes,$x_libraries in #(
+    *\'*) as_fn_error $? "cannot use X directory names containing '" "$LINENO" 5;; #(
+    *,NONE | NONE,*) if ${ac_cv_have_x+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  # One or both of the vars are not set, and there is no cached value.
+ac_x_includes=no ac_x_libraries=no
+rm -f -r conftest.dir
+if mkdir conftest.dir; then
+  cd conftest.dir
+  cat >Imakefile <<'_ACEOF'
+incroot:
+       @echo incroot='${INCROOT}'
+usrlibdir:
+       @echo usrlibdir='${USRLIBDIR}'
+libdir:
+       @echo libdir='${LIBDIR}'
+_ACEOF
+  if (export CC; ${XMKMF-xmkmf}) >/dev/null 2>/dev/null && test -f Makefile; then
+    # GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
+    for ac_var in incroot usrlibdir libdir; do
+      eval "ac_im_$ac_var=\`\${MAKE-make} $ac_var 2>/dev/null | sed -n 's/^$ac_var=//p'\`"
+    done
+    # Open Windows xmkmf reportedly sets LIBDIR instead of USRLIBDIR.
+    for ac_extension in a so sl dylib la dll; do
+      if test ! -f "$ac_im_usrlibdir/libX11.$ac_extension" &&
+        test -f "$ac_im_libdir/libX11.$ac_extension"; then
+       ac_im_usrlibdir=$ac_im_libdir; break
+      fi
+    done
+    # Screen out bogus values from the imake configuration.  They are
+    # bogus both because they are the default anyway, and because
+    # using them would break gcc on systems where it needs fixed includes.
+    case $ac_im_incroot in
+       /usr/include) ac_x_includes= ;;
+       *) test -f "$ac_im_incroot/X11/Xos.h" && ac_x_includes=$ac_im_incroot;;
+    esac
+    case $ac_im_usrlibdir in
+       /usr/lib | /usr/lib64 | /lib | /lib64) ;;
+       *) test -d "$ac_im_usrlibdir" && ac_x_libraries=$ac_im_usrlibdir ;;
+    esac
+  fi
+  cd ..
+  rm -f -r conftest.dir
+fi
+
+# Standard set of common directories for X headers.
+# Check X11 before X11Rn because it is often a symlink to the current release.
+ac_x_header_dirs='
+/usr/X11/include
+/usr/X11R7/include
+/usr/X11R6/include
+/usr/X11R5/include
+/usr/X11R4/include
+
+/usr/include/X11
+/usr/include/X11R7
+/usr/include/X11R6
+/usr/include/X11R5
+/usr/include/X11R4
+
+/usr/local/X11/include
+/usr/local/X11R7/include
+/usr/local/X11R6/include
+/usr/local/X11R5/include
+/usr/local/X11R4/include
+
+/usr/local/include/X11
+/usr/local/include/X11R7
+/usr/local/include/X11R6
+/usr/local/include/X11R5
+/usr/local/include/X11R4
+
+/usr/X386/include
+/usr/x386/include
+/usr/XFree86/include/X11
+
+/usr/include
+/usr/local/include
+/usr/unsupported/include
+/usr/athena/include
+/usr/local/x11r5/include
+/usr/lpp/Xamples/include
+
+/usr/openwin/include
+/usr/openwin/share/include'
+
+if test "$ac_x_includes" = no; then
+  # Guess where to find include files, by looking for Xlib.h.
+  # First, try using that file with no special directory specified.
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+_ACEOF
+if ac_fn_c_try_cpp "$LINENO"; then :
+  # We can compile using X headers with no special include directory.
+ac_x_includes=
+else
+  for ac_dir in $ac_x_header_dirs; do
+  if test -r "$ac_dir/X11/Xlib.h"; then
+    ac_x_includes=$ac_dir
+    break
+  fi
+done
+fi
+rm -f conftest.err conftest.i conftest.$ac_ext
+fi # $ac_x_includes = no
+
+if test "$ac_x_libraries" = no; then
+  # Check for the libraries.
+  # See if we find them without any special options.
+  # Don't add to $LIBS permanently.
+  ac_save_LIBS=$LIBS
+  LIBS="-lX11 $LIBS"
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+#include <X11/Xlib.h>
+int
+main ()
+{
+XrmInitialize ()
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  LIBS=$ac_save_LIBS
+# We can link X programs with no special library path.
+ac_x_libraries=
+else
+  LIBS=$ac_save_LIBS
+for ac_dir in `$as_echo "$ac_x_includes $ac_x_header_dirs" | sed s/include/lib/g`
+do
+  # Don't even attempt the hair of trying to link an X program!
+  for ac_extension in a so sl dylib la dll; do
+    if test -r "$ac_dir/libX11.$ac_extension"; then
+      ac_x_libraries=$ac_dir
+      break 2
+    fi
+  done
+done
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi # $ac_x_libraries = no
+
+case $ac_x_includes,$ac_x_libraries in #(
+  no,* | *,no | *\'*)
+    # Didn't find X, or a directory has "'" in its name.
+    ac_cv_have_x="have_x=no";; #(
+  *)
+    # Record where we found X for the cache.
+    ac_cv_have_x="have_x=yes\
+       ac_x_includes='$ac_x_includes'\
+       ac_x_libraries='$ac_x_libraries'"
+esac
+fi
+;; #(
+    *) have_x=yes;;
+  esac
+  eval "$ac_cv_have_x"
+fi # $with_x != no
+
+if test "$have_x" != yes; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $have_x" >&5
+$as_echo "$have_x" >&6; }
+  no_x=yes
+else
+  # If each of the values was on the command line, it overrides each guess.
+  test "x$x_includes" = xNONE && x_includes=$ac_x_includes
+  test "x$x_libraries" = xNONE && x_libraries=$ac_x_libraries
+  # Update the cache value to reflect the command line values.
+  ac_cv_have_x="have_x=yes\
+       ac_x_includes='$x_includes'\
+       ac_x_libraries='$x_libraries'"
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: libraries $x_libraries, headers $x_includes" >&5
+$as_echo "libraries $x_libraries, headers $x_includes" >&6; }
+fi
+
+if test "$no_x" = yes; then
+  # Not all programs may use this symbol, but it does not hurt to define it.
+
+$as_echo "#define X_DISPLAY_MISSING 1" >>confdefs.h
+
+  X_CFLAGS= X_PRE_LIBS= X_LIBS= X_EXTRA_LIBS=
+else
+  if test -n "$x_includes"; then
+    X_CFLAGS="$X_CFLAGS -I$x_includes"
+  fi
+
+  # It would also be nice to do this for all -L options, not just this one.
+  if test -n "$x_libraries"; then
+    X_LIBS="$X_LIBS -L$x_libraries"
+    # For Solaris; some versions of Sun CC require a space after -R and
+    # others require no space.  Words are not sufficient . . . .
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -R must be followed by a space" >&5
+$as_echo_n "checking whether -R must be followed by a space... " >&6; }
+    ac_xsave_LIBS=$LIBS; LIBS="$LIBS -R$x_libraries"
+    ac_xsave_c_werror_flag=$ac_c_werror_flag
+    ac_c_werror_flag=yes
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       X_LIBS="$X_LIBS -R$x_libraries"
+else
+  LIBS="$ac_xsave_LIBS -R $x_libraries"
+       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+         X_LIBS="$X_LIBS -R $x_libraries"
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: neither works" >&5
+$as_echo "neither works" >&6; }
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    ac_c_werror_flag=$ac_xsave_c_werror_flag
+    LIBS=$ac_xsave_LIBS
+  fi
+
+  # Check for system-dependent libraries X programs must link with.
+  # Do this before checking for the system-independent R6 libraries
+  # (-lICE), since we may need -lsocket or whatever for X linking.
+
+  if test "$ISC" = yes; then
+    X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl_s -linet"
+  else
+    # Martyn Johnson says this is needed for Ultrix, if the X
+    # libraries were built with DECnet support.  And Karl Berry says
+    # the Alpha needs dnet_stub (dnet does not exist).
+    ac_xsave_LIBS="$LIBS"; LIBS="$LIBS $X_LIBS -lX11"
+    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char XOpenDisplay ();
+int
+main ()
+{
+return XOpenDisplay ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet... " >&6; }
+if ${ac_cv_lib_dnet_dnet_ntoa+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_dnet_ntoa" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet"
+fi
+
+    if test $ac_cv_lib_dnet_dnet_ntoa = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for dnet_ntoa in -ldnet_stub" >&5
+$as_echo_n "checking for dnet_ntoa in -ldnet_stub... " >&6; }
+if ${ac_cv_lib_dnet_stub_dnet_ntoa+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-ldnet_stub  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char dnet_ntoa ();
+int
+main ()
+{
+return dnet_ntoa ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_dnet_stub_dnet_ntoa=yes
+else
+  ac_cv_lib_dnet_stub_dnet_ntoa=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_dnet_stub_dnet_ntoa" >&5
+$as_echo "$ac_cv_lib_dnet_stub_dnet_ntoa" >&6; }
+if test "x$ac_cv_lib_dnet_stub_dnet_ntoa" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -ldnet_stub"
+fi
+
+    fi
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+    LIBS="$ac_xsave_LIBS"
+
+    # msh@cis.ufl.edu says -lnsl (and -lsocket) are needed for his 386/AT,
+    # to get the SysV transport functions.
+    # Chad R. Larson says the Pyramis MIS-ES running DC/OSx (SVR4)
+    # needs -lnsl.
+    # The nsl library prevents programs from opening the X display
+    # on Irix 5.2, according to T.E. Dickey.
+    # The functions gethostbyname, getservbyname, and inet_addr are
+    # in -lbsd on LynxOS 3.0.1/i386, according to Lars Hecking.
+    ac_fn_c_check_func "$LINENO" "gethostbyname" "ac_cv_func_gethostbyname"
+if test "x$ac_cv_func_gethostbyname" = xyes; then :
+
+fi
+
+    if test $ac_cv_func_gethostbyname = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lnsl" >&5
+$as_echo_n "checking for gethostbyname in -lnsl... " >&6; }
+if ${ac_cv_lib_nsl_gethostbyname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lnsl  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_nsl_gethostbyname=yes
+else
+  ac_cv_lib_nsl_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_nsl_gethostbyname" >&5
+$as_echo "$ac_cv_lib_nsl_gethostbyname" >&6; }
+if test "x$ac_cv_lib_nsl_gethostbyname" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lnsl"
+fi
+
+      if test $ac_cv_lib_nsl_gethostbyname = no; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gethostbyname in -lbsd" >&5
+$as_echo_n "checking for gethostbyname in -lbsd... " >&6; }
+if ${ac_cv_lib_bsd_gethostbyname+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lbsd  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char gethostbyname ();
+int
+main ()
+{
+return gethostbyname ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_bsd_gethostbyname=yes
+else
+  ac_cv_lib_bsd_gethostbyname=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_bsd_gethostbyname" >&5
+$as_echo "$ac_cv_lib_bsd_gethostbyname" >&6; }
+if test "x$ac_cv_lib_bsd_gethostbyname" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lbsd"
+fi
+
+      fi
+    fi
+
+    # lieder@skyler.mavd.honeywell.com says without -lsocket,
+    # socket/setsockopt and other routines are undefined under SCO ODT
+    # 2.0.  But -lsocket is broken on IRIX 5.2 (and is not necessary
+    # on later versions), says Simon Leinen: it contains gethostby*
+    # variants that don't use the name server (or something).  -lsocket
+    # must be given before -lnsl if both are needed.  We assume that
+    # if connect needs -lnsl, so does gethostbyname.
+    ac_fn_c_check_func "$LINENO" "connect" "ac_cv_func_connect"
+if test "x$ac_cv_func_connect" = xyes; then :
+
+fi
+
+    if test $ac_cv_func_connect = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for connect in -lsocket" >&5
+$as_echo_n "checking for connect in -lsocket... " >&6; }
+if ${ac_cv_lib_socket_connect+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lsocket $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char connect ();
+int
+main ()
+{
+return connect ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_socket_connect=yes
+else
+  ac_cv_lib_socket_connect=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_socket_connect" >&5
+$as_echo "$ac_cv_lib_socket_connect" >&6; }
+if test "x$ac_cv_lib_socket_connect" = xyes; then :
+  X_EXTRA_LIBS="-lsocket $X_EXTRA_LIBS"
+fi
+
+    fi
+
+    # Guillermo Gomez says -lposix is necessary on A/UX.
+    ac_fn_c_check_func "$LINENO" "remove" "ac_cv_func_remove"
+if test "x$ac_cv_func_remove" = xyes; then :
+
+fi
+
+    if test $ac_cv_func_remove = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for remove in -lposix" >&5
+$as_echo_n "checking for remove in -lposix... " >&6; }
+if ${ac_cv_lib_posix_remove+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lposix  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char remove ();
+int
+main ()
+{
+return remove ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_posix_remove=yes
+else
+  ac_cv_lib_posix_remove=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_posix_remove" >&5
+$as_echo "$ac_cv_lib_posix_remove" >&6; }
+if test "x$ac_cv_lib_posix_remove" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lposix"
+fi
+
+    fi
+
+    # BSDI BSD/OS 2.1 needs -lipc for XOpenDisplay.
+    ac_fn_c_check_func "$LINENO" "shmat" "ac_cv_func_shmat"
+if test "x$ac_cv_func_shmat" = xyes; then :
+
+fi
+
+    if test $ac_cv_func_shmat = no; then
+      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shmat in -lipc" >&5
+$as_echo_n "checking for shmat in -lipc... " >&6; }
+if ${ac_cv_lib_ipc_shmat+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lipc  $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char shmat ();
+int
+main ()
+{
+return shmat ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_ipc_shmat=yes
+else
+  ac_cv_lib_ipc_shmat=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ipc_shmat" >&5
+$as_echo "$ac_cv_lib_ipc_shmat" >&6; }
+if test "x$ac_cv_lib_ipc_shmat" = xyes; then :
+  X_EXTRA_LIBS="$X_EXTRA_LIBS -lipc"
+fi
+
+    fi
+  fi
+
+  # Check for libraries that X11R6 Xt/Xaw programs need.
+  ac_save_LDFLAGS=$LDFLAGS
+  test -n "$x_libraries" && LDFLAGS="$LDFLAGS -L$x_libraries"
+  # SM needs ICE to (dynamically) link under SunOS 4.x (so we have to
+  # check for ICE first), but we must link in the order -lSM -lICE or
+  # we get undefined symbols.  So assume we have SM if we have ICE.
+  # These have to be linked with before -lX11, unlike the other
+  # libraries we check for below, so use a different variable.
+  # John Interrante, Karl Berry
+  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for IceConnectionNumber in -lICE" >&5
+$as_echo_n "checking for IceConnectionNumber in -lICE... " >&6; }
+if ${ac_cv_lib_ICE_IceConnectionNumber+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  ac_check_lib_save_LIBS=$LIBS
+LIBS="-lICE $X_EXTRA_LIBS $LIBS"
+cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+/* Override any GCC internal prototype to avoid an error.
+   Use char because int might match the return type of a GCC
+   builtin and then its argument prototype would still apply.  */
+#ifdef __cplusplus
+extern "C"
+#endif
+char IceConnectionNumber ();
+int
+main ()
+{
+return IceConnectionNumber ();
+  ;
+  return 0;
+}
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  ac_cv_lib_ICE_IceConnectionNumber=yes
+else
+  ac_cv_lib_ICE_IceConnectionNumber=no
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+LIBS=$ac_check_lib_save_LIBS
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_lib_ICE_IceConnectionNumber" >&5
+$as_echo "$ac_cv_lib_ICE_IceConnectionNumber" >&6; }
+if test "x$ac_cv_lib_ICE_IceConnectionNumber" = xyes; then :
+  X_PRE_LIBS="$X_PRE_LIBS -lSM -lICE"
+fi
+
+  LDFLAGS=$ac_save_LDFLAGS
+
+fi
+
+
+   groff_no_x=$no_x
+   if test -z "$groff_no_x"; then
+     OLDCFLAGS=$CFLAGS
+     OLDLDFLAGS=$LDFLAGS
+     OLDLIBS=$LIBS
+     CFLAGS="$CFLAGS $X_CFLAGS"
+     LDFLAGS="$LDFLAGS $X_LIBS"
+     LIBS="$LIBS $X_PRE_LIBS -lX11 $X_EXTRA_LIBS"
+
+     LIBS="$LIBS -lXaw"
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xaw library and header files" >&5
+$as_echo_n "checking for Xaw library and header files... " >&6; }
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+
+#include <X11/Intrinsic.h>
+#include <X11/Xaw/Simple.h>
+
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       groff_no_x="yes"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+     LIBS="$LIBS -lXmu"
+     { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Xmu library and header files" >&5
+$as_echo_n "checking for Xmu library and header files... " >&6; }
+     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+
+
+#include <X11/Intrinsic.h>
+#include <X11/Xmu/Converters.h>
+
+
+int
+main ()
+{
+
+  ;
+  return 0;
+}
+
+_ACEOF
+if ac_fn_c_try_link "$LINENO"; then :
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       groff_no_x="yes"
+fi
+rm -f core conftest.err conftest.$ac_objext \
+    conftest$ac_exeext conftest.$ac_ext
+
+     CFLAGS=$OLDCFLAGS
+     LDFLAGS=$OLDLDFLAGS
+     LIBS=$OLDLIBS
+   fi
+
+   if test "x$groff_no_x" = "xyes"; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: gxditview and xtotroff won't be built" >&5
+$as_echo "$as_me: gxditview and xtotroff won't be built" >&6;}
+   else
+     XDEVDIRS="font/devX75 font/devX75-12 font/devX100 font/devX100-12"
+     XPROGDIRS="src/devices/xditview src/utils/xtotroff"
+     XLIBDIRS="src/libs/libxutil"
+   fi
+
+
+
+
+
+# Check whether --with-appresdir was given.
+if test "${with_appresdir+set}" = set; then :
+  withval=$with_appresdir;
+fi
+
+if test -z "$groff_no_x"; then
+     if test "x$with_appresdir" = "x"; then
+       if test "x$prefix" = "xNONE"; then
+         appresdir=$ac_default_prefix/lib/X11/app-defaults
+       else
+         appresdir=$prefix/lib/X11/app-defaults
+       fi
+     else
+       appresdir=$with_appresdir
+     fi
+   fi
+
+libprogramdir=$libdir/groff
+
+
+# Check whether --with-grofferdir was given.
+if test "${with_grofferdir+set}" = set; then :
+  withval=$with_grofferdir;
+fi
+
+if test "x$with_grofferdir" = "x"; then
+    groffer_dir=$libprogramdir/groffer
+  else
+    groffer_dir=$with_grofferdir
+  fi
+
+glilypond_dir=$libprogramdir/glilypond
+
+gpinyin_dir=$libprogramdir/gpinyin
+
+grog_dir=$libprogramdir/grog
+
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
+$as_echo_n "checking for a sed that does not truncate output... " >&6; }
+if ${ac_cv_path_SED+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     { ac_script=; unset ac_script;}
+     if test -z "$SED"; then
+  ac_path_SED_found=false
+  # Loop through the user's path and test for each of PROGNAME-LIST
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_prog in sed gsed; do
+    for ac_exec_ext in '' $ac_executable_extensions; do
+      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_SED" || continue
+# Check for GNU ac_path_SED and select it if it is found.
+  # Check for GNU $ac_path_SED
+case `"$ac_path_SED" --version 2>&1` in
+*GNU*)
+  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+*)
+  ac_count=0
+  $as_echo_n 0123456789 >"conftest.in"
+  while :
+  do
+    cat "conftest.in" "conftest.in" >"conftest.tmp"
+    mv "conftest.tmp" "conftest.in"
+    cp "conftest.in" "conftest.nl"
+    $as_echo '' >> "conftest.nl"
+    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
+    as_fn_arith $ac_count + 1 && ac_count=$as_val
+    if test $ac_count -gt ${ac_path_SED_max-0}; then
+      # Best one so far, save it but keep looking for a better one
+      ac_cv_path_SED="$ac_path_SED"
+      ac_path_SED_max=$ac_count
+    fi
+    # 10*(2^10) chars as input seems more than enough
+    test $ac_count -gt 10 && break
+  done
+  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+esac
+
+      $ac_path_SED_found && break 3
+    done
+  done
+  done
+IFS=$as_save_IFS
+  if test -z "$ac_cv_path_SED"; then
+    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  fi
+else
+  ac_cv_path_SED=$SED
+fi
+
+fi
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
+$as_echo "$ac_cv_path_SED" >&6; }
+ SED="$ac_cv_path_SED"
+  rm -f conftest.sed
+
+PERLVERSION=v5.6.1
+   # Extract the first word of "perl", so it can be a program name with args.
+set dummy perl; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_PERL+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $PERL in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no"
+  ;;
+esac
+fi
+PERL=$ac_cv_path_PERL
+if test -n "$PERL"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
+$as_echo "$PERL" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+   if test "x$PERL" = "xno"; then
+     as_fn_error 1 "perl binary not found" "$LINENO" 5
+   fi
+
+
+
+
+    if test -n "$PERL"; then :
+
+        ax_perl_version="$PERLVERSION"
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl version" >&5
+$as_echo_n "checking for perl version... " >&6; }
+
+        perl_version=`$PERL --version 2>&1 \
+          | $SED -n -e '/This is perl/b inspect
+b
+: inspect
+s/.* (\{0,1\}v\([0-9]*\.[0-9]*\.[0-9]*\))\{0,1\} .*/\1/;p'`
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $perl_version" >&5
+$as_echo "$perl_version" >&6; }
+
+       PERL_VERSION=$perl_version
+
+
+
+
+
+  # Used to indicate true or false condition
+  ax_compare_version=false
+
+  # Convert the two version strings to be compared into a format that
+  # allows a simple string comparison.  The end result is that a version
+  # string of the form 1.12.5-r617 will be converted to the form
+  # 0001001200050617.  In other words, each number is zero padded to four
+  # digits, and non digits are removed.
+
+  ax_compare_version_A=`echo "$ax_perl_version" | sed -e 's/\([0-9]*\)/Z\1Z/g' \
+                     -e 's/Z\([0-9]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \
+                     -e 's/[^0-9]//g'`
+
+
+  ax_compare_version_B=`echo "$perl_version" | sed -e 's/\([0-9]*\)/Z\1Z/g' \
+                     -e 's/Z\([0-9]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \
+                     -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \
+                     -e 's/[^0-9]//g'`
+
+
+    ax_compare_version=`echo "x$ax_compare_version_A
+x$ax_compare_version_B" | sed 's/^ *//' | sort | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"`
+
+
+
+    if test "$ax_compare_version" = "true" ; then
+
+           :
+            true
+
+    else
+           :
+            \
+     as_fn_error 1 "perl version is too old" "$LINENO" 5
+
+  fi
+
+
+else
+
+        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find the perl interpreter" >&5
+$as_echo "$as_me: WARNING: could not find the perl interpreter" >&2;}
+        \
+     as_fn_error 1 "perl version is too old" "$LINENO" 5
+
+fi
+
+if test -z "$PSPRINT"; then
+     for ac_prog in lpr
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LPR+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LPR"; then
+  ac_cv_prog_LPR="$LPR" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_LPR="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LPR=$ac_cv_prog_LPR
+if test -n "$LPR"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LPR" >&5
+$as_echo "$LPR" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$LPR" && break
+done
+
+     for ac_prog in lp
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LP+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LP"; then
+  ac_cv_prog_LP="$LP" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_LP="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LP=$ac_cv_prog_LP
+if test -n "$LP"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LP" >&5
+$as_echo "$LP" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$LP" && break
+done
+
+     if test -n "$LPR" && test -n "$LP"; then
+       # HP-UX provides an lpr command that emulates lpr using lp,
+       # but it doesn't have lpq; in this case we want to use lp
+       # rather than lpr.
+       for ac_prog in lpq
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_LPQ+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$LPQ"; then
+  ac_cv_prog_LPQ="$LPQ" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_LPQ="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+fi
+fi
+LPQ=$ac_cv_prog_LPQ
+if test -n "$LPQ"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LPQ" >&5
+$as_echo "$LPQ" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+
+
+  test -n "$LPQ" && break
+done
+
+       test -n "$LPQ" || LPR=
+     fi
+     if test -n "$LPR"; then
+       PSPRINT="$LPR"
+     elif test -n "$LP"; then
+       PSPRINT="$LP"
+     fi
+   fi
+
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for command to use for printing PostScript files" >&5
+$as_echo_n "checking for command to use for printing PostScript files... " >&6; }
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PSPRINT" >&5
+$as_echo "$PSPRINT" >&6; }
+
+   # Figure out DVIPRINT from PSPRINT.
+   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for command to use for printing dvi files" >&5
+$as_echo_n "checking for command to use for printing dvi files... " >&6; }
+   if test -n "$PSPRINT" && test -z "$DVIPRINT"; then
+     if test "x$PSPRINT" = "xlpr"; then
+       DVIPRINT="lpr -d"
      else
-       appresdir=$with_appresdir
+       DVIPRINT="$PSPRINT"
      fi
    fi
 
-libprogramdir=$libdir/groff
-
-
-# Check whether --with-grofferdir was given.
-if test "${with_grofferdir+set}" = set; then :
-  withval=$with_grofferdir;
-fi
-
-if test "x$with_grofferdir" = "x"; then
-    groffer_dir=$libprogramdir/groffer
-  else
-    groffer_dir=$with_grofferdir
-  fi
-
-glilypond_dir=$libprogramdir/glilypond
-
-gpinyin_dir=$libprogramdir/gpinyin
-
-grog_dir=$libprogramdir/grog
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVIPRINT" >&5
+$as_echo "$DVIPRINT" >&6; }
+# GROFF_REFER
+referdir=$libprogramdir/refer
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5
-$as_echo_n "checking for a sed that does not truncate output... " >&6; }
-if ${ac_cv_path_SED+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
+$as_echo_n "checking for egrep... " >&6; }
+if ${ac_cv_path_EGREP+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-            ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
-     for ac_i in 1 2 3 4 5 6 7; do
-       ac_script="$ac_script$as_nl$ac_script"
-     done
-     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
-     { ac_script=; unset ac_script;}
-     if test -z "$SED"; then
-  ac_path_SED_found=false
+  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
+   then ac_cv_path_EGREP="$GREP -E"
+   else
+     if test -z "$EGREP"; then
+  ac_path_EGREP_found=false
   # Loop through the user's path and test for each of PROGNAME-LIST
   as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
+for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_prog in sed gsed; do
+    for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_SED" || continue
-# Check for GNU ac_path_SED and select it if it is found.
-  # Check for GNU $ac_path_SED
-case `"$ac_path_SED" --version 2>&1` in
+      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
+      as_fn_executable_p "$ac_path_EGREP" || continue
+# Check for GNU ac_path_EGREP and select it if it is found.
+  # Check for GNU $ac_path_EGREP
+case `"$ac_path_EGREP" --version 2>&1` in
 *GNU*)
-  ac_cv_path_SED="$ac_path_SED" ac_path_SED_found=:;;
+  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
 *)
   ac_count=0
   $as_echo_n 0123456789 >"conftest.in"
@@ -5549,14 +19700,14 @@ case `"$ac_path_SED" --version 2>&1` in
     cat "conftest.in" "conftest.in" >"conftest.tmp"
     mv "conftest.tmp" "conftest.in"
     cp "conftest.in" "conftest.nl"
-    $as_echo '' >> "conftest.nl"
-    "$ac_path_SED" -f conftest.sed < "conftest.nl" >"conftest.out" 2>/dev/null || break
+    $as_echo 'EGREP' >> "conftest.nl"
+    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
     diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
     as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_SED_max-0}; then
+    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
       # Best one so far, save it but keep looking for a better one
-      ac_cv_path_SED="$ac_path_SED"
-      ac_path_SED_max=$ac_count
+      ac_cv_path_EGREP="$ac_path_EGREP"
+      ac_path_EGREP_max=$ac_count
     fi
     # 10*(2^10) chars as input seems more than enough
     test $ac_count -gt 10 && break
@@ -5564,35 +19715,36 @@ case `"$ac_path_SED" --version 2>&1` in
   rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
 esac
 
-      $ac_path_SED_found && break 3
+      $ac_path_EGREP_found && break 3
     done
   done
   done
 IFS=$as_save_IFS
-  if test -z "$ac_cv_path_SED"; then
-    as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5
+  if test -z "$ac_cv_path_EGREP"; then
+    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
   fi
 else
-  ac_cv_path_SED=$SED
+  ac_cv_path_EGREP=$EGREP
 fi
 
+   fi
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5
-$as_echo "$ac_cv_path_SED" >&6; }
- SED="$ac_cv_path_SED"
-  rm -f conftest.sed
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
+$as_echo "$ac_cv_path_EGREP" >&6; }
+ EGREP="$ac_cv_path_EGREP"
 
-for ac_prog in gawk mawk nawk awk
+
+for ac_prog in byacc 'bison -y' yacc
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
+if ${ac_cv_prog_YACC+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
+  if test -n "$YACC"; then
+  ac_cv_prog_YACC="$YACC" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -5601,7 +19753,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AWK="$ac_prog"
+    ac_cv_prog_YACC="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5611,152 +19763,112 @@ IFS=$as_save_IFS
 
 fi
 fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
+YACC=$ac_cv_prog_YACC
+if test -n "$YACC"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
+$as_echo "$YACC" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$AWK" && break
+  test -n "$YACC" && break
 done
+test -n "$YACC" || YACC="missing"
 
-PERLVERSION=v5.6.1
-   # Extract the first word of "perl", so it can be a program name with args.
-set dummy perl; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_path_PERL+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  case $PERL in
-  [\\/]* | ?:[\\/]*)
-  ac_cv_path_PERL="$PERL" # Let the user override the test with a path.
-  ;;
-  *)
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_path_PERL="$as_dir/$ac_word$ac_exec_ext"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
+  if test "x$YACC" = "xmissing" -a -d ${srcdir}/.git; then
+    as_fn_error 1 "Could not find 'yacc' or 'bison'" "$LINENO" 5
   fi
-done
-  done
-IFS=$as_save_IFS
 
-  test -z "$ac_cv_path_PERL" && ac_cv_path_PERL="no"
-  ;;
-esac
-fi
-PERL=$ac_cv_path_PERL
-if test -n "$PERL"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PERL" >&5
-$as_echo "$PERL" >&6; }
+
+# Check whether --with-doc was given.
+if test "${with_doc+set}" = set; then :
+  withval=$with_doc; doc="$withval"
 else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
+  doc=yes
 fi
 
+  test "x$doc" = xno && doc=''
+  if test "x$doc" = xyes; then
+    doc_dist_target_ok=yes
+    docadd_html=yes
+    docadd_info=yes
+    docadd_other=yes
+    docadd_pdf=yes
+    docadd_examples=yes
+  else
+    # Don't use case/esac, verify input.
+    doc_dist_target_ok=no
+    docadd_html=no
+    docadd_info=no
+    docadd_other=no
+    docadd_pdf=no
+    docadd_examples=no
+    OFS=$IFS
+    IFS=','
+    set -- $doc
+    IFS=$OFS
+    for i
+    do
+      test "x$i" = xhtml     && { docadd_html=yes; continue; }
+      test "x$i" = xinfo     && { docadd_info=yes; continue; }
+      test "x$i" = xother    && { docadd_other=yes; continue; }
+      test "x$i" = xpdf      && { docadd_pdf=yes; continue; }
+      test "x$i" = xexamples && { docadd_examples=yes; continue; }
+      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid '--with-doc' argument: $i" >&5
+$as_echo "$as_me: WARNING: Invalid '--with-doc' argument: $i" >&2;}
+    done
+  fi
+  if test $docadd_html = yes; then
+    make_install_shipped_htmldoc=install_shipped_htmldoc
+    make_uninstall_shipped_htmldoc=uninstall_shipped_htmldoc
+  else
+    make_install_shipped_htmldoc=
+    make_uninstall_shipped_htmldoc=
+  fi
+  if test $docadd_other = yes; then
+    make_otherdoc=otherdoc
+    make_install_otherdoc=install_otherdoc
+    make_uninstall_otherdoc=uninstall_otherdoc
+  else
+    make_otherdoc=
+    make_install_otherdoc=
+    make_uninstall_otherdoc=
+  fi
+  if test $docadd_examples = yes; then
+    make_examples=examples
+    make_install_examples=install_examples
+    make_uninstall_examples=uninstall_examples
+  else
+    make_examples=
+    make_install_examples=
+    make_uninstall_examples=
+  fi
 
-   if test "x$PERL" = "xno"; then
-     as_fn_error 1 "perl binary not found" "$LINENO" 5
-   fi
-
-
-
-
-    if test -n "$PERL"; then :
-
-        ax_perl_version="$PERLVERSION"
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: checking for perl version" >&5
-$as_echo_n "checking for perl version... " >&6; }
-
-        perl_version=`$PERL --version 2>&1 \
-          | $SED -n -e '/This is perl/b inspect
-b
-: inspect
-s/.* (\{0,1\}v\([0-9]*\.[0-9]*\.[0-9]*\))\{0,1\} .*/\1/;p'`
-
-        { $as_echo "$as_me:${as_lineno-$LINENO}: result: $perl_version" >&5
-$as_echo "$perl_version" >&6; }
-
-       PERL_VERSION=$perl_version
-
-
-
-
-
-  # Used to indicate true or false condition
-  ax_compare_version=false
-
-  # Convert the two version strings to be compared into a format that
-  # allows a simple string comparison.  The end result is that a version
-  # string of the form 1.12.5-r617 will be converted to the form
-  # 0001001200050617.  In other words, each number is zero padded to four
-  # digits, and non digits are removed.
-
-  ax_compare_version_A=`echo "$ax_perl_version" | sed -e 's/\([0-9]*\)/Z\1Z/g' \
-                     -e 's/Z\([0-9]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \
-                     -e 's/[^0-9]//g'`
-
-
-  ax_compare_version_B=`echo "$perl_version" | sed -e 's/\([0-9]*\)/Z\1Z/g' \
-                     -e 's/Z\([0-9]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([0-9][0-9]\)Z/Z0\1Z/g' \
-                     -e 's/Z\([0-9][0-9][0-9]\)Z/Z0\1Z/g' \
-                     -e 's/[^0-9]//g'`
-
-
-    ax_compare_version=`echo "x$ax_compare_version_A
-x$ax_compare_version_B" | sed 's/^ *//' | sort | sed "s/x${ax_compare_version_A}/true/;s/x${ax_compare_version_B}/false/;1q"`
-
-
-
-    if test "$ax_compare_version" = "true" ; then
 
-           :
-            true
 
-    else
-           :
-            \
-     as_fn_error 1 "perl version is too old" "$LINENO" 5
 
-  fi
 
 
-else
 
-        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: could not find the perl interpreter" >&5
-$as_echo "$as_me: WARNING: could not find the perl interpreter" >&2;}
-        \
-     as_fn_error 1 "perl version is too old" "$LINENO" 5
 
-fi
 
-if test -z "$PSPRINT"; then
-     for ac_prog in lpr
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+# By default automake will set MAKEINFO to MAKEINFO = ${SHELL} <top
+  # src dir>/build-aux/missing makeinfo.As we need a more precise
+  # check of makeinfo version, we don't use it.
+  MAKEINFO=
+   if test $docadd_info = yes; then
+     missing=
+     # Extract the first word of "makeinfo", so it can be a program name with args.
+set dummy makeinfo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LPR+:} false; then :
+if ${ac_cv_prog_MAKEINFO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$LPR"; then
-  ac_cv_prog_LPR="$LPR" # Let the user override the test.
+  if test -n "$MAKEINFO"; then
+  ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -5765,7 +19877,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_LPR="$ac_prog"
+    ac_cv_prog_MAKEINFO="makeinfo"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5775,30 +19887,76 @@ IFS=$as_save_IFS
 
 fi
 fi
-LPR=$ac_cv_prog_LPR
-if test -n "$LPR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LPR" >&5
-$as_echo "$LPR" >&6; }
+MAKEINFO=$ac_cv_prog_MAKEINFO
+if test -n "$MAKEINFO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5
+$as_echo "$MAKEINFO" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$LPR" && break
-done
+     if test -z "$MAKEINFO"; then
+       missing="'makeinfo' is missing."
+     else
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for makeinfo version" >&5
+$as_echo_n "checking for makeinfo version... " >&6; }
+       # We need an additional level of quoting to make sed's regexps work.
+       makeinfo_version=`$MAKEINFO --version 2>&1 \
+        | sed -e 's/^.* \([^ ][^ ]*\)$/\1/' -e '1q'`
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $makeinfo_version" >&5
+$as_echo "$makeinfo_version" >&6; }
+       # Consider only the first two numbers in version number string.
+       makeinfo_version_major=`IFS=.; set x $makeinfo_version; echo 0${2}`
+       makeinfo_version_minor=`IFS=.; set x $makeinfo_version; echo 0${3}`
+       makeinfo_version_numeric=`
+         expr ${makeinfo_version_major}000 \+ ${makeinfo_version_minor}`
+       if test $makeinfo_version_numeric -lt 4008; then
+         missing="'makeinfo' is too old."
+       fi
+     fi
 
-     for ac_prog in lp
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+     if test -n "$missing"; then
+       infofile=doc/groff.info
+       test -f ${infofile} || infofile=${srcdir}/${infofile}
+       if test ! -f ${infofile} \
+       || test ${srcdir}/doc/groff.texi -nt ${infofile}; then
+        as_fn_error $? "$missing
+Get the 'texinfo' package version 4.8 or newer." "$LINENO" 5
+       else
+        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $missing
+Get the 'texinfo' package version 4.8 or newer if you want to convert
+'groff.texi' into a PDF or HTML document." >&5
+$as_echo "$as_me: WARNING: $missing
+Get the 'texinfo' package version 4.8 or newer if you want to convert
+'groff.texi' into a PDF or HTML document." >&2;}
+       fi
+     fi
+
+     make_infodoc=infodoc
+     make_install_infodoc=install_infodoc
+     make_uninstall_infodoc=uninstall_infodoc
+   else
+     make_infodoc=
+     make_install_infodoc=
+     make_uninstall_infodoc=
+     MAKEINFO=
+   fi
+
+
+
+
+
+# Extract the first word of "texi2dvi", so it can be a program name with args.
+set dummy texi2dvi; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LP+:} false; then :
+if ${ac_cv_prog_PROG_TEXI2DVI+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$LP"; then
-  ac_cv_prog_LP="$LP" # Let the user override the test.
+  if test -n "$PROG_TEXI2DVI"; then
+  ac_cv_prog_PROG_TEXI2DVI="$PROG_TEXI2DVI" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -5807,7 +19965,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_LP="$ac_prog"
+    ac_cv_prog_PROG_TEXI2DVI="found"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5815,36 +19973,35 @@ done
   done
 IFS=$as_save_IFS
 
+  test -z "$ac_cv_prog_PROG_TEXI2DVI" && ac_cv_prog_PROG_TEXI2DVI="missing"
 fi
 fi
-LP=$ac_cv_prog_LP
-if test -n "$LP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LP" >&5
-$as_echo "$LP" >&6; }
+PROG_TEXI2DVI=$ac_cv_prog_PROG_TEXI2DVI
+if test -n "$PROG_TEXI2DVI"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PROG_TEXI2DVI" >&5
+$as_echo "$PROG_TEXI2DVI" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$LP" && break
-done
+   if test "x$PROG_TEXI2DVI" = "xfound"; then
+      groff_have_texi2dvi=yes;
+   else
+      groff_have_texi2dvi=no;
+   fi
 
-     if test -n "$LPR" && test -n "$LP"; then
-       # HP-UX provides an lpr command that emulates lpr using lp,
-       # but it doesn't have lpq; in this case we want to use lp
-       # rather than lpr.
-       for ac_prog in lpq
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
+set dummy ${ac_tool_prefix}ranlib; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_LPQ+:} false; then :
+if ${ac_cv_prog_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$LPQ"; then
-  ac_cv_prog_LPQ="$LPQ" # Let the user override the test.
+  if test -n "$RANLIB"; then
+  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -5853,7 +20010,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_LPQ="$ac_prog"
+    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -5863,127 +20020,85 @@ IFS=$as_save_IFS
 
 fi
 fi
-LPQ=$ac_cv_prog_LPQ
-if test -n "$LPQ"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LPQ" >&5
-$as_echo "$LPQ" >&6; }
+RANLIB=$ac_cv_prog_RANLIB
+if test -n "$RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
+$as_echo "$RANLIB" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$LPQ" && break
-done
-
-       test -n "$LPQ" || LPR=
-     fi
-     if test -n "$LPR"; then
-       PSPRINT="$LPR"
-     elif test -n "$LP"; then
-       PSPRINT="$LP"
-     fi
-   fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for command to use for printing PostScript files" >&5
-$as_echo_n "checking for command to use for printing PostScript files... " >&6; }
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PSPRINT" >&5
-$as_echo "$PSPRINT" >&6; }
-
-   # Figure out DVIPRINT from PSPRINT.
-   { $as_echo "$as_me:${as_lineno-$LINENO}: checking for command to use for printing dvi files" >&5
-$as_echo_n "checking for command to use for printing dvi files... " >&6; }
-   if test -n "$PSPRINT" && test -z "$DVIPRINT"; then
-     if test "x$PSPRINT" = "xlpr"; then
-       DVIPRINT="lpr -d"
-     else
-       DVIPRINT="$PSPRINT"
-     fi
-   fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $DVIPRINT" >&5
-$as_echo "$DVIPRINT" >&6; }
-# GROFF_REFER
-referdir=$libprogramdir/refer
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
+fi
+if test -z "$ac_cv_prog_RANLIB"; then
+  ac_ct_RANLIB=$RANLIB
+  # Extract the first word of "ranlib", so it can be a program name with args.
+set dummy ranlib; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
+  if test -n "$ac_ct_RANLIB"; then
+  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
     for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
   done
 IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
+
+fi
+fi
+ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
+if test -n "$ac_ct_RANLIB"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
+$as_echo "$ac_ct_RANLIB" >&6; }
 else
-  ac_cv_path_EGREP=$EGREP
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
 
-   fi
+  if test "x$ac_ct_RANLIB" = x; then
+    RANLIB=":"
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    RANLIB=$ac_ct_RANLIB
+  fi
+else
+  RANLIB="$ac_cv_prog_RANLIB"
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
 
 
-for ac_prog in byacc 'bison -y'
+   ac_dir=`cd $ac_aux_dir; pwd`
+   ac_install_sh="$ac_dir/install-sh -c"
+if test $docadd_info = yes; then
+     for ac_prog in install-info
 do
   # Extract the first word of "$ac_prog", so it can be a program name with args.
 set dummy $ac_prog; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_YACC+:} false; then :
+if ${ac_cv_prog_INSTALL_INFO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$YACC"; then
-  ac_cv_prog_YACC="$YACC" # Let the user override the test.
+  if test -n "$INSTALL_INFO"; then
+  ac_cv_prog_INSTALL_INFO="$INSTALL_INFO" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -5992,7 +20107,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_YACC="$ac_prog"
+    ac_cv_prog_INSTALL_INFO="$ac_prog"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6002,85 +20117,70 @@ IFS=$as_save_IFS
 
 fi
 fi
-YACC=$ac_cv_prog_YACC
-if test -n "$YACC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $YACC" >&5
-$as_echo "$YACC" >&6; }
+INSTALL_INFO=$ac_cv_prog_INSTALL_INFO
+if test -n "$INSTALL_INFO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL_INFO" >&5
+$as_echo "$INSTALL_INFO" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$YACC" && break
+  test -n "$INSTALL_INFO" && break
 done
-test -n "$YACC" || YACC="yacc"
+test -n "$INSTALL_INFO" || INSTALL_INFO=":"
 
+   fi
 
-# Check whether --with-doc was given.
-if test "${with_doc+set}" = set; then :
-  withval=$with_doc; doc="$withval"
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
+$as_echo_n "checking whether ln -s works... " >&6; }
+LN_S=$as_ln_s
+if test "$LN_S" = "ln -s"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
 else
-  doc=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
+$as_echo "no, using $LN_S" >&6; }
 fi
 
-  test "x$doc" = xno && doc=''
-  if test "x$doc" = xyes; then
-    doc_dist_target_ok=yes
-    docadd_html=yes
-    docadd_info=yes
-    docadd_other=yes
-    docadd_pdf=yes
-    docadd_examples=yes
-  else
-    # Don't use case/esac, verify input.
-    doc_dist_target_ok=no
-    docadd_html=no
-    docadd_info=no
-    docadd_other=no
-    docadd_pdf=no
-    docadd_examples=no
-    OFS=$IFS
-    IFS=','
-    set -- $doc
-    IFS=$OFS
-    for i
-    do
-      test "x$i" = xhtml     && { docadd_html=yes; continue; }
-      test "x$i" = xinfo     && { docadd_info=yes; continue; }
-      test "x$i" = xother    && { docadd_other=yes; continue; }
-      test "x$i" = xpdf      && { docadd_pdf=yes; continue; }
-      test "x$i" = xexamples && { docadd_examples=yes; continue; }
-      { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid \`--with-doc' argument: $i" >&5
-$as_echo "$as_me: WARNING: Invalid \`--with-doc' argument: $i" >&2;}
-    done
-  fi
-  if test $docadd_html = yes; then
-    make_install_shipped_htmldoc=install_shipped_htmldoc
-    make_uninstall_shipped_htmldoc=uninstall_shipped_htmldoc
-  else
-    make_install_shipped_htmldoc=
-    make_uninstall_shipped_htmldoc=
-  fi
-  if test $docadd_other = yes; then
-    make_otherdoc=otherdoc
-    make_install_otherdoc=install_otherdoc
-    make_uninstall_otherdoc=uninstall_otherdoc
-  else
-    make_otherdoc=
-    make_install_otherdoc=
-    make_uninstall_otherdoc=
-  fi
-  if test $docadd_examples = yes; then
-    make_examples=examples
-    make_install_examples=install_examples
-    make_uninstall_examples=uninstall_examples
-  else
-    make_examples=
-    make_install_examples=
-    make_uninstall_examples=
+
+# Extract the first word of "xpmtoppm", so it can be a program name with args.
+set dummy xpmtoppm; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_XPMTOPPM+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  if test -n "$XPMTOPPM"; then
+  ac_cv_prog_XPMTOPPM="$XPMTOPPM" # Let the user override the test.
+else
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_XPMTOPPM="found"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
   fi
+done
+  done
+IFS=$as_save_IFS
 
+  test -z "$ac_cv_prog_XPMTOPPM" && ac_cv_prog_XPMTOPPM="missing"
+fi
+fi
+XPMTOPPM=$ac_cv_prog_XPMTOPPM
+if test -n "$XPMTOPPM"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XPMTOPPM" >&5
+$as_echo "$XPMTOPPM" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
 
 
@@ -6089,26 +20189,29 @@ $as_echo "$as_me: WARNING: Invalid \`--with-doc' argument: $i" >&2;}
 
 
 
-if test $docadd_info = yes; then
-     missing=
-     # Extract the first word of "makeinfo", so it can be a program name with args.
-set dummy makeinfo; ac_word=$2
+
+if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then
+       if test -n "$ac_tool_prefix"; then
+  # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args.
+set dummy ${ac_tool_prefix}pkg-config; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_MAKEINFO+:} false; then :
+if ${ac_cv_path_PKG_CONFIG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$MAKEINFO"; then
-  ac_cv_prog_MAKEINFO="$MAKEINFO" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+  case $PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
 do
   IFS=$as_save_IFS
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_MAKEINFO="makeinfo"
+    ac_cv_path_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6116,78 +20219,206 @@ done
   done
 IFS=$as_save_IFS
 
+  ;;
+esac
 fi
+PKG_CONFIG=$ac_cv_path_PKG_CONFIG
+if test -n "$PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5
+$as_echo "$PKG_CONFIG" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-MAKEINFO=$ac_cv_prog_MAKEINFO
-if test -n "$MAKEINFO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MAKEINFO" >&5
-$as_echo "$MAKEINFO" >&6; }
+
+
+fi
+if test -z "$ac_cv_path_PKG_CONFIG"; then
+  ac_pt_PKG_CONFIG=$PKG_CONFIG
+  # Extract the first word of "pkg-config", so it can be a program name with args.
+set dummy pkg-config; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  case $ac_pt_PKG_CONFIG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_ac_pt_PKG_CONFIG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG
+if test -n "$ac_pt_PKG_CONFIG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5
+$as_echo "$ac_pt_PKG_CONFIG" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
+  if test "x$ac_pt_PKG_CONFIG" = x; then
+    PKG_CONFIG=""
+  else
+    case $cross_compiling:$ac_tool_warned in
+yes:)
+{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
+$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
+ac_tool_warned=yes ;;
+esac
+    PKG_CONFIG=$ac_pt_PKG_CONFIG
+  fi
+else
+  PKG_CONFIG="$ac_cv_path_PKG_CONFIG"
+fi
 
-     if test -z "$MAKEINFO"; then
-       missing="\`makeinfo' is missing."
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking for makeinfo version" >&5
-$as_echo_n "checking for makeinfo version... " >&6; }
-       # We need an additional level of quoting to make sed's regexps work.
-       makeinfo_version=`$MAKEINFO --version 2>&1 \
-        | sed -e 's/^.* \([^ ][^ ]*\)$/\1/' -e '1q'`
-       { $as_echo "$as_me:${as_lineno-$LINENO}: result: $makeinfo_version" >&5
-$as_echo "$makeinfo_version" >&6; }
-       # Consider only the first two numbers in version number string.
-       makeinfo_version_major=`IFS=.; set x $makeinfo_version; echo 0${2}`
-       makeinfo_version_minor=`IFS=.; set x $makeinfo_version; echo 0${3}`
-       makeinfo_version_numeric=`
-         expr ${makeinfo_version_major}000 \+ ${makeinfo_version_minor}`
-       if test $makeinfo_version_numeric -lt 4008; then
-         missing="\`makeinfo' is too old."
-       fi
-     fi
+fi
+if test -n "$PKG_CONFIG"; then
+       _pkg_min_version=0.9.0
+       { $as_echo "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5
+$as_echo_n "checking pkg-config is at least version $_pkg_min_version... " >&6; }
+       if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+       else
+               { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+               PKG_CONFIG=""
+       fi
+fi
 
-     if test -n "$missing"; then
-       infofile=doc/groff.info
-       test -f ${infofile} || infofile=${srcdir}/${infofile}
-       if test ! -f ${infofile} \
-       || test ${srcdir}/doc/groff.texinfo -nt ${infofile}; then
-        as_fn_error $? "$missing
-Get the \`texinfo' package version 4.8 or newer." "$LINENO" 5
-       else
-        { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $missing
-Get the \`texinfo' package version 4.8 or newer if you want to convert
-\`groff.texinfo' into a PDF or HTML document." >&5
-$as_echo "$as_me: WARNING: $missing
-Get the \`texinfo' package version 4.8 or newer if you want to convert
-\`groff.texinfo' into a PDF or HTML document." >&2;}
-       fi
-     fi
+# Check whether --with-uchardet was given.
+if test "${with_uchardet+set}" = set; then :
+  withval=$with_uchardet;
+fi
 
-     make_infodoc=infodoc
-     make_install_infodoc=install_infodoc
-     make_uninstall_infodoc=uninstall_infodoc
-   else
-     make_infodoc=
-     make_install_infodoc=
-     make_uninstall_infodoc=
-     MAKEINFO=
-   fi
+   if test "x$with_uchardet" != "xno"; then :
+
+pkg_failed=no
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for UCHARDET" >&5
+$as_echo_n "checking for UCHARDET... " >&6; }
+
+if test -n "$UCHARDET_CFLAGS"; then
+    pkg_cv_UCHARDET_CFLAGS="$UCHARDET_CFLAGS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"uchardet >= 0.0.1\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "uchardet >= 0.0.1") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_UCHARDET_CFLAGS=`$PKG_CONFIG --cflags "uchardet >= 0.0.1" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
+if test -n "$UCHARDET_LIBS"; then
+    pkg_cv_UCHARDET_LIBS="$UCHARDET_LIBS"
+ elif test -n "$PKG_CONFIG"; then
+    if test -n "$PKG_CONFIG" && \
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"uchardet >= 0.0.1\""; } >&5
+  ($PKG_CONFIG --exists --print-errors "uchardet >= 0.0.1") 2>&5
+  ac_status=$?
+  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
+  test $ac_status = 0; }; then
+  pkg_cv_UCHARDET_LIBS=`$PKG_CONFIG --libs "uchardet >= 0.0.1" 2>/dev/null`
+                     test "x$?" != "x0" && pkg_failed=yes
+else
+  pkg_failed=yes
+fi
+ else
+    pkg_failed=untried
+fi
 
 
 
+if test $pkg_failed = yes; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
+if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then
+        _pkg_short_errors_supported=yes
+else
+        _pkg_short_errors_supported=no
+fi
+        if test $_pkg_short_errors_supported = yes; then
+               UCHARDET_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "uchardet >= 0.0.1" 2>&1`
+        else
+               UCHARDET_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "uchardet >= 0.0.1" 2>&1`
+        fi
+       # Put the nasty error message in config.log where it belongs
+       echo "$UCHARDET_PKG_ERRORS" >&5
+
+       if test "x$with_uchardet" = "xyes"; then
+                               { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Could not found uchardet library
+See \`config.log' for more details" "$LINENO" 5; }
+                             else
+                               { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: uchardet library not found, preconv \
+might not work properly" >&5
+$as_echo "$as_me: WARNING: uchardet library not found, preconv \
+might not work properly" >&2;}
+                             fi
+                             groff_have_uchardet=no
+elif test $pkg_failed = untried; then
+       { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+       if test "x$with_uchardet" = "xyes"; then
+                               { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Could not found uchardet library
+See \`config.log' for more details" "$LINENO" 5; }
+                             else
+                               { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: uchardet library not found, preconv \
+might not work properly" >&5
+$as_echo "$as_me: WARNING: uchardet library not found, preconv \
+might not work properly" >&2;}
+                             fi
+                             groff_have_uchardet=no
+else
+       UCHARDET_CFLAGS=$pkg_cv_UCHARDET_CFLAGS
+       UCHARDET_LIBS=$pkg_cv_UCHARDET_LIBS
+        { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+
+$as_echo "#define HAVE_UCHARDET 1" >>confdefs.h
+
+                             groff_have_uchardet=yes
+fi
+else
+  groff_have_uchardet=no
+
+fi
+# Extract the first word of "pdfinfo", so it can be a program name with args.
+set dummy pdfinfo; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
+if ${ac_cv_prog_PDFINFO+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
+  if test -n "$PDFINFO"; then
+  ac_cv_prog_PDFINFO="$PDFINFO" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -6196,7 +20427,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
+    ac_cv_prog_PDFINFO="found"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6204,30 +20435,28 @@ done
   done
 IFS=$as_save_IFS
 
+  test -z "$ac_cv_prog_PDFINFO" && ac_cv_prog_PDFINFO="missing"
 fi
 fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
+PDFINFO=$ac_cv_prog_PDFINFO
+if test -n "$PDFINFO"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFINFO" >&5
+$as_echo "$PDFINFO" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
+   # Extract the first word of "pdffonts", so it can be a program name with args.
+set dummy pdffonts; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
+if ${ac_cv_prog_PDFFONTS+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
+  if test -n "$PDFFONTS"; then
+  ac_cv_prog_PDFFONTS="$PDFFONTS" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -6236,7 +20465,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
+    ac_cv_prog_PDFFONTS="found"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6244,76 +20473,28 @@ done
   done
 IFS=$as_save_IFS
 
+  test -z "$ac_cv_prog_PDFFONTS" && ac_cv_prog_PDFFONTS="missing"
 fi
 fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
+PDFFONTS=$ac_cv_prog_PDFFONTS
+if test -n "$PDFFONTS"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFFONTS" >&5
+$as_echo "$PDFFONTS" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-ac_aux_dir=
-for ac_dir in "$srcdir" "$srcdir/.." "$srcdir/../.."; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in \"$srcdir\" \"$srcdir/..\" \"$srcdir/../..\"" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
 
-   ac_dir=`cd $ac_aux_dir; pwd`
-   ac_install_sh="$ac_dir/install-sh -c"
-if test $docadd_info = yes; then
-     for ac_prog in install-info
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
+   # Extract the first word of "pdfimages", so it can be a program name with args.
+set dummy pdfimages; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 $as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_INSTALL_INFO+:} false; then :
+if ${ac_cv_prog_PDFIMAGES+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test -n "$INSTALL_INFO"; then
-  ac_cv_prog_INSTALL_INFO="$INSTALL_INFO" # Let the user override the test.
+  if test -n "$PDFIMAGES"; then
+  ac_cv_prog_PDFIMAGES="$PDFIMAGES" # Let the user override the test.
 else
 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
 for as_dir in $PATH
@@ -6322,7 +20503,7 @@ do
   test -z "$as_dir" && as_dir=.
     for ac_exec_ext in '' $ac_executable_extensions; do
   if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_INSTALL_INFO="$ac_prog"
+    ac_cv_prog_PDFIMAGES="found"
     $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
     break 2
   fi
@@ -6330,126 +20511,24 @@ done
   done
 IFS=$as_save_IFS
 
+  test -z "$ac_cv_prog_PDFIMAGES" && ac_cv_prog_PDFIMAGES="missing"
 fi
 fi
-INSTALL_INFO=$ac_cv_prog_INSTALL_INFO
-if test -n "$INSTALL_INFO"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL_INFO" >&5
-$as_echo "$INSTALL_INFO" >&6; }
+PDFIMAGES=$ac_cv_prog_PDFIMAGES
+if test -n "$PDFIMAGES"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PDFIMAGES" >&5
+$as_echo "$PDFIMAGES" >&6; }
 else
   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
 $as_echo "no" >&6; }
 fi
 
 
-  test -n "$INSTALL_INFO" && break
-done
-test -n "$INSTALL_INFO" || INSTALL_INFO=":"
-
+   if test "x$PDFINFO" = "xfound" -a "x$PDFFONTS" = "xfound" -a "x$PDFIMAGES" = "xfound"; then
+      groff_have_pdftools=yes;
+   else
+      groff_have_pdftools=no;
    fi
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-         if test $ac_prog = install &&
-           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-           # AIX install.  It has an incompatible calling convention.
-           :
-         elif test $ac_prog = install &&
-           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-           # program-specific install script used by HP pwplus--don't use.
-           :
-         else
-           rm -rf conftest.one conftest.two conftest.dir
-           echo one > conftest.one
-           echo two > conftest.two
-           mkdir conftest.dir
-           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-             test -s conftest.one && test -s conftest.two &&
-             test -s conftest.dir/conftest.one &&
-             test -s conftest.dir/conftest.two
-           then
-             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-             break 3
-           fi
-         fi
-       fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5
-$as_echo_n "checking whether ln -s works... " >&6; }
-LN_S=$as_ln_s
-if test "$LN_S" = "ln -s"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no, using $LN_S" >&5
-$as_echo "no, using $LN_S" >&6; }
-fi
 
 
 # use a dummy substitution if no csh hack is necessary to avoid errors
@@ -6568,77 +20647,8 @@ extern "C" { void srand(unsigned int); }
 
 
 int
-main ()
-{
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: void" >&5
-$as_echo "void" >&6; }
-
-$as_echo "#define RET_TYPE_SRAND_IS_VOID 1" >>confdefs.h
-
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: int" >&5
-$as_echo "int" >&6; }
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gettimeofday must be declared" >&5
-$as_echo_n "checking whether gettimeofday must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_gettimeofday+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef gettimeofday
-  char *p = (char *) gettimeofday;
-#endif
-
+main ()
+{
 
   ;
   return 0;
@@ -6646,35 +20656,31 @@ main ()
 
 _ACEOF
 if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_gettimeofday=no
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: void" >&5
+$as_echo "void" >&6; }
+
+$as_echo "#define RET_TYPE_SRAND_IS_VOID 1" >>confdefs.h
+
 else
-  groff_cv_decl_needed_gettimeofday=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: int" >&5
+$as_echo "int" >&6; }
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_gettimeofday" >&5
-$as_echo "$groff_cv_decl_needed_gettimeofday" >&6; }
-   if test $groff_cv_decl_needed_gettimeofday = yes; then
-
-$as_echo "#define NEED_DECLARATION_GETTIMEOFDAY 1" >>confdefs.h
-
-   fi
    ac_ext=c
 ac_cpp='$CPP $CPPFLAGS'
 ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether hypot must be declared" >&5
-$as_echo_n "checking whether hypot must be declared... " >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether gettimeofday must be declared" >&5
+$as_echo_n "checking whether gettimeofday must be declared... " >&6; }
    ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
-   if ${groff_cv_decl_needed_hypot+:} false; then :
+   if ${groff_cv_decl_needed_gettimeofday+:} false; then :
   $as_echo_n "(cached) " >&6
 else
   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
@@ -6708,8 +20714,8 @@ main ()
 {
 
 
-#ifndef hypot
-  char *p = (char *) hypot;
+#ifndef gettimeofday
+  char *p = (char *) gettimeofday;
 #endif
 
 
@@ -6719,18 +20725,18 @@ main ()
 
 _ACEOF
 if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_hypot=no
+  groff_cv_decl_needed_gettimeofday=no
 else
-  groff_cv_decl_needed_hypot=yes
+  groff_cv_decl_needed_gettimeofday=yes
 fi
 rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
 fi
 
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_hypot" >&5
-$as_echo "$groff_cv_decl_needed_hypot" >&6; }
-   if test $groff_cv_decl_needed_hypot = yes; then
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_gettimeofday" >&5
+$as_echo "$groff_cv_decl_needed_gettimeofday" >&6; }
+   if test $groff_cv_decl_needed_gettimeofday = yes; then
 
-$as_echo "#define NEED_DECLARATION_HYPOT 1" >>confdefs.h
+$as_echo "#define NEED_DECLARATION_GETTIMEOFDAY 1" >>confdefs.h
 
    fi
    ac_ext=c
@@ -7031,79 +21037,6 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether snprintf must be declared" >&5
-$as_echo_n "checking whether snprintf must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_snprintf+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef snprintf
-  char *p = (char *) snprintf;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_snprintf=no
-else
-  groff_cv_decl_needed_snprintf=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_snprintf" >&5
-$as_echo "$groff_cv_decl_needed_snprintf" >&6; }
-   if test $groff_cv_decl_needed_snprintf = yes; then
-
-$as_echo "#define NEED_DECLARATION_SNPRINTF 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether srand must be declared" >&5
 $as_echo_n "checking whether srand must be declared... " >&6; }
    ac_ext=cpp
@@ -7396,79 +21329,6 @@ ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_c_compiler_gnu
 
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether vsnprintf must be declared" >&5
-$as_echo_n "checking whether vsnprintf must be declared... " >&6; }
-   ac_ext=cpp
-ac_cpp='$CXXCPP $CPPFLAGS'
-ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
-
-   if ${groff_cv_decl_needed_vsnprintf+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-
-#include <stdio.h>
-#ifdef HAVE_STRING_H
-#include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-#include <strings.h>
-#endif
-#ifdef HAVE_STDLIB_H
-#include <stdlib.h>
-#endif
-#ifdef HAVE_SYS_TIME_H
-#include <sys/time.h>
-#endif
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef HAVE_MATH_H
-#include <math.h>
-#endif
-
-
-int
-main ()
-{
-
-
-#ifndef vsnprintf
-  char *p = (char *) vsnprintf;
-#endif
-
-
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_cxx_try_compile "$LINENO"; then :
-  groff_cv_decl_needed_vsnprintf=no
-else
-  groff_cv_decl_needed_vsnprintf=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_cv_decl_needed_vsnprintf" >&5
-$as_echo "$groff_cv_decl_needed_vsnprintf" >&6; }
-   if test $groff_cv_decl_needed_vsnprintf = yes; then
-
-$as_echo "#define NEED_DECLARATION_VSNPRINTF 1" >>confdefs.h
-
-   fi
-   ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
 ac_ext=cpp
 ac_cpp='$CXXCPP $CPPFLAGS'
 ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
@@ -8203,77 +22063,6 @@ ac_compile='$CXX -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext >&5'
 ac_link='$CXX -o conftest$ac_exeext $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
 ac_compiler_gnu=$ac_cv_cxx_compiler_gnu
 
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
 
       if test "X$prefix" = "XNONE"; then
     acl_final_prefix="$ac_default_prefix"
 $as_echo "
          $am_cv_proto_iconv" >&6; }
 
-cat >>confdefs.h <<_ACEOF
-#define ICONV_CONST $am_cv_proto_iconv_arg1
-_ACEOF
-
-
-  fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-# we need LIBEXT
-LIBEXT=$acl_libext
-
-
-# checks for functions
-
-
-
-  for ac_header in $ac_header_list
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
+cat >>confdefs.h <<_ACEOF
+#define ICONV_CONST $am_cv_proto_iconv_arg1
 _ACEOF
 
-fi
 
-done
+  fi
+
+ac_ext=c
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
+ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
+ac_compiler_gnu=$ac_cv_c_compiler_gnu
+
 
+# we need LIBEXT
+LIBEXT=$acl_libext
 
 
+# checks for functions
 
 
 
@@ -9671,19 +23441,6 @@ esac
 
 fi
 
-ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf"
-if test "x$ac_cv_func_snprintf" = xyes; then :
-  $as_echo "#define HAVE_SNPRINTF 1" >>confdefs.h
-
-else
-  case " $LIBOBJS " in
-  *" snprintf.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
- ;;
-esac
-
-fi
-
 ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp"
 if test "x$ac_cv_func_strcasecmp" = xyes; then :
   $as_echo "#define HAVE_STRCASECMP 1" >>confdefs.h
@@ -9737,25 +23494,6 @@ esac
 fi
 
 
-# vsnprintf is in the same source file as snprintf
-for ac_func in vsnprintf
-do :
-  ac_fn_c_check_func "$LINENO" "vsnprintf" "ac_cv_func_vsnprintf"
-if test "x$ac_cv_func_vsnprintf" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_VSNPRINTF 1
-_ACEOF
-
-else
-  case " $LIBOBJS " in
-  *" snprintf.$ac_objext "* ) ;;
-  *) LIBOBJS="$LIBOBJS snprintf.$ac_objext"
- ;;
-esac
-
-fi
-done
-
 LIBS="$saved_libs"
 for ac_func in gettimeofday isatty kill rename setlocale strsep
 do :
@@ -10025,6 +23763,15 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
 fi
 
 
+# URW fonts extra dir
+
+# Check whether --with-urw-fonts-dir was given.
+if test "${with_urw_fonts_dir+set}" = set; then :
+  withval=$with_urw_fonts_dir; urwfontsdir="$withval"
+fi
+
+
+
 # other random stuff
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking default value for grops -b option" >&5
 $as_echo_n "checking default value for grops -b option... " >&6; }
@@ -10036,15 +23783,18 @@ $as_echo "$BROKEN_SPOOLER_FLAGS" >&6; }
 $as_echo_n "checking default paper size... " >&6; }
    groff_prefix=$prefix
    test "x$prefix" = "xNONE" && groff_prefix=$ac_default_prefix
+   if test -z "$PAGE" && test -r /etc/papersize; then
+     PAGE=`cat /etc/papersize | sed -e 's/^ *#.*//g' | tr -d "\n" | awk '{ print  }'`
+   fi
    if test -z "$PAGE"; then
      descfile=
-     if test -r $groff_prefix/share/groff/font/devps/DESC; then
+     if test -r "$groff_prefix"/share/groff/font/devps/DESC; then
        descfile=$groff_prefix/share/groff/font/devps/DESC
-     elif test -r $groff_prefix/lib/groff/font/devps/DESC; then
+     elif test -r "$groff_prefix"/lib/groff/font/devps/DESC; then
        descfile=$groff_prefix/lib/groff/font/devps/DESC
      else
-       for f in $groff_prefix/share/groff/*/font/devps/DESC; do
-        if test -r $f; then
+       for f in "$groff_prefix"/share/groff/*/font/devps/DESC; do
+        if test -r "$f"; then
           descfile=$f
           break
         fi
@@ -10052,9 +23802,9 @@ $as_echo_n "checking default paper size... " >&6; }
      fi
 
      if test -n "$descfile"; then
-       if grep '^paperlength[   ]\+841890' $descfile >/dev/null 2>&1; then
+       if grep '^paperlength[   ]\+841890' "$descfile" >/dev/null 2>&1; then
         PAGE=A4
-       elif grep '^papersize[   ]\+[aA]4' $descfile >/dev/null 2>&1; then
+       elif grep '^papersize[   ]\+[aA]4' "$descfile" >/dev/null 2>&1; then
         PAGE=A4
        fi
      fi
@@ -10070,7 +23820,7 @@ $as_echo_n "checking default paper size... " >&6; }
         dom=`(hostname) 2>/dev/null | grep '\.'`
        fi
      fi
-     # If the top-level domain is two letters and it's not `us' or `ca'
+     # If the top-level domain is two letters and it's not 'us' or 'ca'
      # then they probably use A4 paper.
      case "$dom" in
      *.[Uu][Ss]|*.[Cc][Aa])
@@ -10168,6 +23918,54 @@ $as_echo_n "checking which system macro packages should be made available... " >
    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $tmac_wrap" >&5
 $as_echo "$tmac_wrap" >&6; }
 
+
+# Check whether --with-compatibility-wrappers was given.
+if test "${with_compatibility_wrappers+set}" = set; then :
+  withval=$with_compatibility_wrappers; compatibility_wrappers="$withval"
+else
+  compatibility_wrappers="check"
+fi
+
+
+    if test "x$compatibility_wrappers" != "xcheck"  -a \
+            "x$compatibility_wrappers" != "xyes"    -a \
+            "x$compatibility_wrappers" != "xno"     -a \
+            "x$compatibility_wrappers" != "xmanual"
+    then
+         { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Invalid '--with-compatibility-wrappers' argument: '$compatibility_wrappers' - assuming 'check' requested." >&5
+$as_echo "$as_me: WARNING: Invalid '--with-compatibility-wrappers' argument: '$compatibility_wrappers' - assuming 'check' requested." >&2;}
+         compatibility_wrappers="check"
+    fi
+
+    if test "x$tmac_wrap" = "x"
+    then
+        # No Operating System Macro Sets Present
+        if   test "x$compatibility_wrappers" = "xcheck"
+        then
+            compatibility_wrappers="no"
+        elif test "x$compatibility_wrappers" = "xyes"
+        then
+            as_fn_error $? "No non-GNU macro sets found - cannot create and install compatibility wrappers" "$LINENO" 5
+        elif test "x$compatibility_wrappers" = "xno"
+        then
+            : # No action required
+        elif test "x$compatibility_wrappers" = "xmanual"
+        then
+            # 'manual' allows quiet conversion to 'no' to support
+            # cross-platform build instructions
+            compatibility_wrappers="no"
+        fi
+    else
+        # One or more Operating System Macro Sets Present
+        if   test "x$compatibility_wrappers" = "xcheck"
+        then
+            compatibility_wrappers="yes"
+        fi
+    fi
+
+    # Now compatibility_wrappers can only be yes, no or manual
+
+
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking separator character to use in groff search paths" >&5
 $as_echo_n "checking separator character to use in groff search paths... " >&6; }
    cp ${srcdir}/src/include/nonposix.h conftest.h
@@ -10370,7 +24168,7 @@ fi
 
 
       if test $pnmcut = missing; then
-       missing="$missing \`pnmcut'"
+       missing="$missing 'pnmcut'"
       fi;# Extract the first word of "pnmcrop", so it can be a program name with args.
 set dummy pnmcrop; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -10410,7 +24208,7 @@ fi
 
 
       if test $pnmcrop = missing; then
-       missing="$missing \`pnmcrop'"
+       missing="$missing 'pnmcrop'"
       fi;# Extract the first word of "pnmtopng", so it can be a program name with args.
 set dummy pnmtopng; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -10450,7 +24248,7 @@ fi
 
 
       if test $pnmtopng = missing; then
-       missing="$missing \`pnmtopng'"
+       missing="$missing 'pnmtopng'"
       fi;# Extract the first word of "psselect", so it can be a program name with args.
 set dummy psselect; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
@@ -10490,7 +24288,7 @@ fi
 
 
       if test $psselect = missing; then
-       missing="$missing \`psselect'"
+       missing="$missing 'psselect'"
       fi;# Extract the first word of "pnmtops", so it can be a program name with args.
 set dummy pnmtops; ac_word=$2
 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
 
 
       if test $pnmtops = missing; then
-       missing="$missing \`pnmtops'"
+       missing="$missing 'pnmtops'"
       fi;
 
-   test "$GHOSTSCRIPT" = "missing" && missing="$missing \`gs'"
+   test "$GHOSTSCRIPT" = "missing" && missing="$missing 'gs'"
 
    if test -z "$missing"; then
      if test $docadd_html = yes; then
@@ -10716,8 +24514,8 @@ make_pdfdoc=
 
 
    missing=""
-   test "$AWK" = missing && missing="\`awk'"
-   test "$GHOSTSCRIPT" = missing && missing="$missing \`gs'"
+   test "$AWK" = missing && missing="'awk'"
+   test "$GHOSTSCRIPT" = missing && missing="$missing 'gs'"
    if test -z "$missing"; then
      if test $docadd_pdf = yes; then
        make_pdfdoc=pdfdoc
@@ -10770,231 +24568,342 @@ $as_echo "no" >&6; }
      pnmtops_nosetpage="pnmtops"
    fi
 
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5
-$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; }
-if ${ac_cv_gnu_library_2_1+:} false; then :
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether make has builtin variable RM" >&5
+$as_echo_n "checking whether make has builtin variable RM... " >&6; }
+cat <<EOF > test_make_rm.mk
+all:
+       @if test -n "\$(RM)"; then \
+          echo "yes"; \
+       else \
+          echo "no"; \
+       fi
+EOF
+  groff_is_rm_defined=`make -sf test_make_rm.mk`
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_is_rm_defined" >&5
+$as_echo "$groff_is_rm_defined" >&6; }
+  rm -f test_make_rm.mk
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a diff program that supports option -D" >&5
+$as_echo_n "checking for a diff program that supports option -D... " >&6; }
+  groff_has_diff_d_option=no
+  DIFF_PROG=diff
+  diff -Dx /dev/null /dev/null >/dev/null 2>&1 && groff_has_diff_d_option=yes
+  if test "$groff_has_diff_d_option" = no; then
+    for ac_prog in gdiff
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_prog_GDIFF+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
-  Lucky GNU user
- #endif
-#endif
-#ifdef __UCLIBC__
- Lucky user
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Lucky" >/dev/null 2>&1; then :
-  ac_cv_gnu_library_2_1=yes
+  if test -n "$GDIFF"; then
+  ac_cv_prog_GDIFF="$GDIFF" # Let the user override the test.
 else
-  ac_cv_gnu_library_2_1=no
-fi
-rm -f conftest*
-
-
+as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_prog_GDIFF="$ac_prog"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
-$as_echo "$ac_cv_gnu_library_2_1" >&6; }
-
-    GLIBC21="$ac_cv_gnu_library_2_1"
-
-
-
-
-
-  for ac_func in $ac_func_list
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
 fi
-done
-
-
-
+GDIFF=$ac_cv_prog_GDIFF
+if test -n "$GDIFF"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GDIFF" >&5
+$as_echo "$GDIFF" >&6; }
+else
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
 
 
+  test -n "$GDIFF" && break
+done
 
+    if test -n "$GDIFF"; then
+      "$GDIFF" -Dx /dev/null /dev/null >/dev/null 2>&1 && groff_has_diff_d_option=yes
+      if test "$groff_has_diff_d_option" = yes; then
+        DIFF_PROG="$GDIFF"
+      fi
+    fi
+  fi
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $groff_has_diff_d_option" >&5
+$as_echo "$groff_has_diff_d_option" >&6; }
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether test supports option -ef" >&5
+$as_echo_n "checking whether test supports option -ef... " >&6; }
+  HAVE_TEST_EF_OPTION=no
+  test /dev/null -ef /dev/null > /dev/null 2>&1 && HAVE_TEST_EF_OPTION=yes
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $HAVE_TEST_EF_OPTION" >&5
+$as_echo "$HAVE_TEST_EF_OPTION" >&6; }
 
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5
-$as_echo_n "checking for working fcntl.h... " >&6; }
-if ${gl_cv_header_working_fcntl_h+:} false; then :
+for ac_prog in bash
+do
+  # Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
+$as_echo_n "checking for $ac_word... " >&6; }
+if ${ac_cv_path_BASH_PROG+:} false; then :
   $as_echo_n "(cached) " >&6
 else
-  if test "$cross_compiling" = yes; then :
-  gl_cv_header_working_fcntl_h=cross-compiling
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-           #include <sys/stat.h>
-           #if HAVE_UNISTD_H
-           # include <unistd.h>
-           #else /* on Windows with MSVC */
-           # include <io.h>
-           # include <stdlib.h>
-           # defined sleep(n) _sleep ((n) * 1000)
-           #endif
-           #include <fcntl.h>
-           #ifndef O_NOATIME
-            #define O_NOATIME 0
-           #endif
-           #ifndef O_NOFOLLOW
-            #define O_NOFOLLOW 0
-           #endif
-           static int const constants[] =
-            {
-              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
-            };
-
-int
-main ()
-{
-
-            int result = !constants;
-            #if HAVE_SYMLINK
-            {
-              static char const sym[] = "conftest.sym";
-              if (symlink ("/dev/null", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              if (unlink (sym) != 0 || symlink (".", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              unlink (sym);
-            }
-            #endif
-            {
-              static char const file[] = "confdefs.h";
-              int fd = open (file, O_RDONLY | O_NOATIME);
-              if (fd < 0)
-                result |= 8;
-              else
-                {
-                  struct stat st0;
-                  if (fstat (fd, &st0) != 0)
-                    result |= 16;
-                  else
-                    {
-                      char c;
-                      sleep (1);
-                      if (read (fd, &c, 1) != 1)
-                        result |= 24;
-                      else
-                        {
-                          if (close (fd) != 0)
-                            result |= 32;
-                          else
-                            {
-                              struct stat st1;
-                              if (stat (file, &st1) != 0)
-                                result |= 40;
-                              else
-                                if (st0.st_atime != st1.st_atime)
-                                  result |= 64;
-                            }
-                        }
-                    }
-                }
-            }
-            return result;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_header_working_fcntl_h=yes
+  case $BASH_PROG in
+  [\\/]* | ?:[\\/]*)
+  ac_cv_path_BASH_PROG="$BASH_PROG" # Let the user override the test with a path.
+  ;;
+  *)
+  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+    for ac_exec_ext in '' $ac_executable_extensions; do
+  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
+    ac_cv_path_BASH_PROG="$as_dir/$ac_word$ac_exec_ext"
+    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
+    break 2
+  fi
+done
+  done
+IFS=$as_save_IFS
+
+  ;;
+esac
+fi
+BASH_PROG=$ac_cv_path_BASH_PROG
+if test -n "$BASH_PROG"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $BASH_PROG" >&5
+$as_echo "$BASH_PROG" >&6; }
 else
-  case $? in #(
-        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
-        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
-        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
-         *) gl_cv_header_working_fcntl_h='no';;
-        esac
+  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
 fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
+
+
+  test -n "$BASH_PROG" && break
+done
+test -n "$BASH_PROG" || BASH_PROG="no"
+
+  if test x$BASH_PROG = xno; then
+     BASH_PROG=/bin/sh
+  fi
+
+
+    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5
+$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; }
+if ${ac_cv_gnu_library_2_1+:} false; then :
+  $as_echo_n "(cached) " >&6
+else
+  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+/* end confdefs.h.  */
+
+#include <features.h>
+#ifdef __GNU_LIBRARY__
+ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
+  Lucky GNU user
+ #endif
+#endif
+#ifdef __UCLIBC__
+ Lucky user
+#endif
+
+_ACEOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+  $EGREP "Lucky" >/dev/null 2>&1; then :
+  ac_cv_gnu_library_2_1=yes
+else
+  ac_cv_gnu_library_2_1=no
 fi
+rm -f conftest*
+
+
 
 fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5
-$as_echo "$gl_cv_header_working_fcntl_h" >&6; }
+{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
+$as_echo "$ac_cv_gnu_library_2_1" >&6; }
 
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
+    GLIBC21="$ac_cv_gnu_library_2_1"
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOATIME $ac_val
-_ACEOF
 
 
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOFOLLOW $ac_val
-_ACEOF
 
 
-ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default"
-if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then :
-  ac_have_decl=1
+
+
+
+
+
+# checks for presence of URW fonts (requires ghostscript, which is
+# checked in GROFF_HTML_PROGRAMS
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether URW fonts in pfb format are available" >&5
+$as_echo_n "checking whether URW fonts in pfb format are available... " >&6; }
+
+
+   groff_have_urw_fonts=no
+   if test "$AWK" = "missing" -o "$GHOSTSCRIPT" = "missing"; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: awk and gs are required, can't look for URW fonts" >&5
+$as_echo "$as_me: WARNING: awk and gs are required, can't look for URW fonts" >&2;}
+   else
+     _list_paths=`$GHOSTSCRIPT -h | $AWK 'BEGIN { found = 0 } /Search path:/ { found = 1 } /^ *\// { print $'0' }'| tr : ' '`
+     _list_paths="$_list_paths /usr/share/fonts/type1/gsfonts/ \
+               /opt/local/share/fonts/urw-fonts/"
+     if test -n "$urwfontsdir"; then
+       _list_paths="$ _list_paths $urwfontsdir"
+     fi
+     for k in $_list_paths; do
+       if test -f $k/a010013l.pfb; then
+         { $as_echo "$as_me:${as_lineno-$LINENO}: result: found in $k" >&5
+$as_echo "found in $k" >&6; }
+         groff_have_urw_fonts=yes
+         break
+       fi
+     done
+   fi
+   if test $groff_have_urw_fonts = no; then
+     { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+   fi
+
+
+
+ if test -n "$make_winscripts"; then
+  BUILD_WINSCRIPTS_TRUE=
+  BUILD_WINSCRIPTS_FALSE='#'
 else
-  ac_have_decl=0
+  BUILD_WINSCRIPTS_TRUE='#'
+  BUILD_WINSCRIPTS_FALSE=
 fi
 
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
-_ACEOF
 
+# If X11 is not available, don't build:
+# font/devX75
+# font/devX75-12
+# font/devX100
+# font/devX100-12
+# src/devices/xditview
+# src/utils/xtotroff
+# src/libs/libxutil
+ if test "x$groff_no_x" = "xyes"; then
+  WITHOUT_X11_TRUE=
+  WITHOUT_X11_FALSE='#'
+else
+  WITHOUT_X11_TRUE='#'
+  WITHOUT_X11_FALSE=
+fi
+
+
+# make builtin variable RM
+ if test "x$groff_is_rm_defined" = "xno"; then
+  MAKE_DONT_HAVE_RM_TRUE=
+  MAKE_DONT_HAVE_RM_FALSE='#'
+else
+  MAKE_DONT_HAVE_RM_TRUE='#'
+  MAKE_DONT_HAVE_RM_FALSE=
+fi
+
+
+# Some programs have a "g" prefix if an existing groff installation is detected
+ if test x$g = xg; then
+  USEPROGRAMPREFIX_TRUE=
+  USEPROGRAMPREFIX_FALSE='#'
+else
+  USEPROGRAMPREFIX_TRUE='#'
+  USEPROGRAMPREFIX_FALSE=
+fi
+
+
+ if test -n "$make_infodoc"; then
+  BUILD_INFODOC_TRUE=
+  BUILD_INFODOC_FALSE='#'
+else
+  BUILD_INFODOC_TRUE='#'
+  BUILD_INFODOC_FALSE=
+fi
 
+ if test -n "$make_htmldoc"; then
+  BUILD_HTML_TRUE=
+  BUILD_HTML_FALSE='#'
+else
+  BUILD_HTML_TRUE='#'
+  BUILD_HTML_FALSE=
+fi
 
+ if test -n "$make_htmlexamples"; then
+  BUILD_HTMLEXAMPLES_TRUE=
+  BUILD_HTMLEXAMPLES_FALSE='#'
+else
+  BUILD_HTMLEXAMPLES_TRUE='#'
+  BUILD_HTMLEXAMPLES_FALSE=
+fi
 
+ if test -n "$make_pdfdoc"; then
+  BUILD_PDFDOC_TRUE=
+  BUILD_PDFDOC_FALSE='#'
+else
+  BUILD_PDFDOC_TRUE='#'
+  BUILD_PDFDOC_FALSE=
+fi
 
+ if test -n "$make_pdfexamples"; then
+  BUILD_PDFEXAMPLES_TRUE=
+  BUILD_PDFEXAMPLES_FALSE='#'
+else
+  BUILD_PDFEXAMPLES_TRUE='#'
+  BUILD_PDFEXAMPLES_FALSE=
+fi
 
+ if test -n "$make_otherdoc"; then
+  BUILD_OTHERDOC_TRUE=
+  BUILD_OTHERDOC_FALSE='#'
+else
+  BUILD_OTHERDOC_TRUE='#'
+  BUILD_OTHERDOC_FALSE=
+fi
 
+ if test -n "$make_examples"; then
+  BUILD_EXAMPLES_TRUE=
+  BUILD_EXAMPLES_FALSE='#'
+else
+  BUILD_EXAMPLES_TRUE='#'
+  BUILD_EXAMPLES_FALSE=
+fi
 
+ if test -n "$make_install_shipped_htmldoc"; then
+  INSTALL_SHIPPED_HTML_TRUE=
+  INSTALL_SHIPPED_HTML_FALSE='#'
+else
+  INSTALL_SHIPPED_HTML_TRUE='#'
+  INSTALL_SHIPPED_HTML_FALSE=
+fi
 
+ if test "x$groff_have_pdftools" = "xyes" ; then
+  HAVE_PDFTOOLS_TRUE=
+  HAVE_PDFTOOLS_FALSE='#'
+else
+  HAVE_PDFTOOLS_TRUE='#'
+  HAVE_PDFTOOLS_FALSE=
+fi
 
-ac_config_files="$ac_config_files stamp-h"
+ if test "x$groff_have_texi2dvi" = "xyes" ; then
+  HAVE_TEXI2DVI_TRUE=
+  HAVE_TEXI2DVI_FALSE='#'
+else
+  HAVE_TEXI2DVI_TRUE='#'
+  HAVE_TEXI2DVI_FALSE=
+fi
 
-ac_config_files="$ac_config_files Makefile doc/Makefile src/utils/xtotroff/Makefile"
 
-ac_config_files="$ac_config_files contrib/gdiffmk/tests/runtests"
+ac_config_files="$ac_config_files Makefile"
 
 ac_config_files="$ac_config_files test-groff"
 
@@ -11107,8 +25016,187 @@ LIBOBJS=$ac_libobjs
 LTLIBOBJS=$ac_ltlibobjs
 
 
+{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
+$as_echo_n "checking that generated files are newer than configure... " >&6; }
+   if test -n "$am_sleep_pid"; then
+     # Hide warnings about reused PIDs.
+     wait $am_sleep_pid 2>/dev/null
+   fi
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
+$as_echo "done" >&6; }
+if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
+  as_fn_error $? "conditional \"AMDEP\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+ if test -n "$EXEEXT"; then
+  am__EXEEXT_TRUE=
+  am__EXEEXT_FALSE='#'
+else
+  am__EXEEXT_TRUE='#'
+  am__EXEEXT_FALSE=
+fi
+
+if test -z "${am__fastdepCXX_TRUE}" && test -z "${am__fastdepCXX_FALSE}"; then
+  as_fn_error $? "conditional \"am__fastdepCXX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
+  as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_ALLOCA_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_ERRNO_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_FLOAT_H_TRUE}" && test -z "${GL_GENERATE_FLOAT_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_FLOAT_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+
+if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+
+
+  # Tell AC_LIBSOURCES where to find source files like alloca.c.
+
+
+  # This hack originated in bison.  It is required when using non-recursive
+  # automake rules to build from gnulib-provided lib/ sources.  Hence, LIB_DIR
+  # is usually simply "lib".  Those rules use the list of names like "fchdir.o"
+  # and "strstr.o" in gl_LIBOBJS.  With non-recursive make, we must prefix each
+  # such file name with the "lib/" prefix.  See also build-aux/prefix-gnulib-mk.
+  gl_LIBOBJS=`echo "$gl_LIBOBJS" | sed -e 's, , lib/,g'`
+
+  # Listing the names of the variables to prefix is error-prone.
+  # Rather, adjust each AC_SUBST'd variable whose name ends in '_H'
+  # and whose value ends in '.h'.
+  for ac_var in $ac_subst_vars
+  do
+    eval "ac_val=\$$ac_var"
+    case $ac_var:$ac_val in
+      *_H:*.h) eval "$ac_var=lib/\$$ac_var";;
+    esac
+  done
+
+
+if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_LIMITS_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then
+  as_fn_error $? "conditional \"GL_GENERATE_STDINT_H\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE}"; then
+  as_fn_error $? "conditional \"LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
+    gl_libobjs=
+    gl_ltlibobjs=
+    if test -n "$gl_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gl_libobjs="$gl_libobjs $i.$ac_objext"
+        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+      done
+    fi
+    gl_LIBOBJS=$gl_libobjs
+
+    gl_LTLIBOBJS=$gl_ltlibobjs
 
 
+
+    gltests_libobjs=
+    gltests_ltlibobjs=
+    if test -n "$gltests_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
+        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+      done
+    fi
+    gltests_LIBOBJS=$gltests_libobjs
+
+    gltests_LTLIBOBJS=$gltests_ltlibobjs
+
+
+
+if test -z "${BUILD_WINSCRIPTS_TRUE}" && test -z "${BUILD_WINSCRIPTS_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_WINSCRIPTS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${WITHOUT_X11_TRUE}" && test -z "${WITHOUT_X11_FALSE}"; then
+  as_fn_error $? "conditional \"WITHOUT_X11\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${MAKE_DONT_HAVE_RM_TRUE}" && test -z "${MAKE_DONT_HAVE_RM_FALSE}"; then
+  as_fn_error $? "conditional \"MAKE_DONT_HAVE_RM\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${USEPROGRAMPREFIX_TRUE}" && test -z "${USEPROGRAMPREFIX_FALSE}"; then
+  as_fn_error $? "conditional \"USEPROGRAMPREFIX\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_INFODOC_TRUE}" && test -z "${BUILD_INFODOC_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_INFODOC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_HTML_TRUE}" && test -z "${BUILD_HTML_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_HTML\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_HTMLEXAMPLES_TRUE}" && test -z "${BUILD_HTMLEXAMPLES_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_HTMLEXAMPLES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_PDFDOC_TRUE}" && test -z "${BUILD_PDFDOC_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_PDFDOC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_PDFEXAMPLES_TRUE}" && test -z "${BUILD_PDFEXAMPLES_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_PDFEXAMPLES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_OTHERDOC_TRUE}" && test -z "${BUILD_OTHERDOC_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_OTHERDOC\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${BUILD_EXAMPLES_TRUE}" && test -z "${BUILD_EXAMPLES_FALSE}"; then
+  as_fn_error $? "conditional \"BUILD_EXAMPLES\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${INSTALL_SHIPPED_HTML_TRUE}" && test -z "${INSTALL_SHIPPED_HTML_FALSE}"; then
+  as_fn_error $? "conditional \"INSTALL_SHIPPED_HTML\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_PDFTOOLS_TRUE}" && test -z "${HAVE_PDFTOOLS_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_PDFTOOLS\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${HAVE_TEXI2DVI_TRUE}" && test -z "${HAVE_TEXI2DVI_FALSE}"; then
+  as_fn_error $? "conditional \"HAVE_TEXI2DVI\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+
 : "${CONFIG_STATUS=./config.status}"
 ac_write_fail=0
 ac_clean_files_save=$ac_clean_files
@@ -11505,7 +25593,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 # report actual input values of CONFIG_FILES etc. instead of their
 # values after options handling.
 ac_log="
-This file was extended by groff $as_me 1.22.3, which was
+This file was extended by GNU Troff $as_me 1.22.4, which was
 generated by GNU Autoconf 2.69.  Invocation command line was
 
   CONFIG_FILES    = $CONFIG_FILES
@@ -11532,6 +25620,7 @@ cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 # Files that config.status was made for.
 config_files="$ac_config_files"
 config_headers="$ac_config_headers"
+config_commands="$ac_config_commands"
 
 _ACEOF
 
@@ -11561,13 +25650,18 @@ $config_files
 Configuration headers:
 $config_headers
 
-Report bugs to <bug-groff@gnu.org>."
+Configuration commands:
+$config_commands
+
+Report bugs to <http://savannah.gnu.org/bugs/?group=groff>.
+GNU Troff home page: <http://www.gnu.org/software/groff/>.
+General help using GNU software: <http://www.gnu.org/gethelp/>."
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
 ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
 ac_cs_version="\\
-groff config.status 1.22.3
+GNU Troff config.status 1.22.4
 configured by $0, generated by GNU Autoconf 2.69,
   with options \\"\$ac_cs_config\\"
 
@@ -11578,6 +25672,7 @@ gives unlimited permission to copy, distribute and modify it."
 ac_pwd='$ac_pwd'
 srcdir='$srcdir'
 INSTALL='$INSTALL'
+MKDIR_P='$MKDIR_P'
 AWK='$AWK'
 test -n "\$AWK" || AWK=awk
 _ACEOF
@@ -11682,6 +25777,11 @@ _ASBOX
 
 _ACEOF
 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
+#
+# INIT-COMMANDS
+#
+AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"
+
 _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -11691,11 +25791,8 @@ for ac_config_target in $ac_config_targets
 do
   case $ac_config_target in
     "src/include/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/include/config.h:src/include/config.hin" ;;
-    "stamp-h") CONFIG_FILES="$CONFIG_FILES stamp-h" ;;
+    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
     "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;;
-    "src/utils/xtotroff/Makefile") CONFIG_FILES="$CONFIG_FILES src/utils/xtotroff/Makefile" ;;
-    "contrib/gdiffmk/tests/runtests") CONFIG_FILES="$CONFIG_FILES contrib/gdiffmk/tests/runtests" ;;
     "test-groff") CONFIG_FILES="$CONFIG_FILES test-groff" ;;
 
   *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
@@ -11710,6 +25807,7 @@ done
 if $ac_need_defaults; then
   test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
   test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
 fi
 
 # Have a temporary directory for convenience.  Make it in the build tree
@@ -12006,7 +26104,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
 fi # test -n "$CONFIG_HEADERS"
 
 
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    "
+eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
 shift
 for ac_tag
 do
@@ -12144,6 +26242,11 @@ ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
   [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
   *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
   esac
+  ac_MKDIR_P=$MKDIR_P
+  case $MKDIR_P in
+  [\\/$]* | ?:[\\/]* ) ;;
+  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
+  esac
 _ACEOF
 
 cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
@@ -12198,6 +26301,7 @@ s&@builddir@&$ac_builddir&;t t
 s&@abs_builddir@&$ac_abs_builddir&;t t
 s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
 s&@INSTALL@&$ac_INSTALL&;t t
+s&@MKDIR_P@&$ac_MKDIR_P&;t t
 $ac_datarootdir_hack
 "
 eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
@@ -12242,15 +26346,143 @@ $as_echo "$as_me: $ac_file is unchanged" >&6;}
       && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
       || as_fn_error $? "could not create -" "$LINENO" 5
   fi
+# Compute "$ac_file"'s index in $config_headers.
+_am_arg="$ac_file"
+_am_stamp_count=1
+for _am_header in $config_headers :; do
+  case $_am_header in
+    $_am_arg | $_am_arg:* )
+      break ;;
+    * )
+      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
+  esac
+done
+echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
+$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$_am_arg" : 'X\(//\)[^/]' \| \
+        X"$_am_arg" : 'X\(//\)$' \| \
+        X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$_am_arg" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`/stamp-h$_am_stamp_count
  ;;
 
-
+  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
+$as_echo "$as_me: executing $ac_file commands" >&6;}
+ ;;
   esac
 
 
   case $ac_file$ac_mode in
-    "stamp-h":F) echo timestamp > stamp-h ;;
-    "contrib/gdiffmk/tests/runtests":F) chmod +x contrib/gdiffmk/tests/runtests ;;
+    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
+  # Older Autoconf quotes --file arguments for eval, but not when files
+  # are listed without --file.  Let's play safe and only enable the eval
+  # if we detect the quoting.
+  # TODO: see whether this extra hack can be removed once we start
+  # requiring Autoconf 2.70 or later.
+  case $CONFIG_FILES in #(
+  *\'*) :
+    eval set x "$CONFIG_FILES" ;; #(
+  *) :
+    set x $CONFIG_FILES ;; #(
+  *) :
+     ;;
+esac
+  shift
+  # Used to flag and report bootstrapping failures.
+  am_rc=0
+  for am_mf
+  do
+    # Strip MF so we end up with the name of the file.
+    am_mf=`$as_echo "$am_mf" | sed -e 's/:.*$//'`
+    # Check whether this is an Automake generated Makefile which includes
+    # dependency-tracking related rules and includes.
+    # Grep'ing the whole file directly is not great: AIX grep has a line
+    # limit of 2048, but all sed's we know have understand at least 4000.
+    sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \
+      || continue
+    am_dirpart=`$as_dirname -- "$am_mf" ||
+$as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+        X"$am_mf" : 'X\(//\)[^/]' \| \
+        X"$am_mf" : 'X\(//\)$' \| \
+        X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X"$am_mf" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)[^/].*/{
+           s//\1/
+           q
+         }
+         /^X\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+    am_filepart=`$as_basename -- "$am_mf" ||
+$as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \
+        X"$am_mf" : 'X\(//\)$' \| \
+        X"$am_mf" : 'X\(/\)' \| . 2>/dev/null ||
+$as_echo X/"$am_mf" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\/\)$/{
+           s//\1/
+           q
+         }
+         /^X\/\(\/\).*/{
+           s//\1/
+           q
+         }
+         s/.*/./; q'`
+    { echo "$as_me:$LINENO: cd "$am_dirpart" \
+      && sed -e '/# am--include-marker/d' "$am_filepart" \
+        | $MAKE -f - am--depfiles" >&5
+   (cd "$am_dirpart" \
+      && sed -e '/# am--include-marker/d' "$am_filepart" \
+        | $MAKE -f - am--depfiles) >&5 2>&5
+   ac_status=$?
+   echo "$as_me:$LINENO: \$? = $ac_status" >&5
+   (exit $ac_status); } || am_rc=$?
+  done
+  if test $am_rc -ne 0; then
+    { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "Something went wrong bootstrapping makefile fragments
+    for automatic dependency tracking.  Try re-running configure with the
+    '--disable-dependency-tracking' option to at least be able to build
+    the package (albeit without support for automatic dependency tracking).
+See \`config.log' for more details" "$LINENO" 5; }
+  fi
+  { am_dirpart=; unset am_dirpart;}
+  { am_filepart=; unset am_filepart;}
+  { am_mf=; unset am_mf;}
+  { am_rc=; unset am_rc;}
+  rm -f conftest-deps.mk
+}
+ ;;
     "test-groff":F) chmod +x test-groff ;;
 
   esac
 echo "
 ${PACKAGE_NAME} version ${PACKAGE_VERSION}
 ----------------------------------------------------------------------
- Prefix            : ${prefix}
- Compiler          : ${CC} ${CFLAGS} ${CPPFLAGS}"
+ Prefix                          : ${prefix}
+ Compiler                        : ${CC} ${CFLAGS} ${CPPFLAGS}"
 if test "x$groff_no_x" = "xyes"; then
 echo "\
- X11 support       : no"
+ X11 support                     : no"
 else
 echo "\
- X11 support       : yes
- X11 resources dir : $appresdir"
+ X11 support                     : yes
+ X11 resources dir               : $appresdir"
 fi
 if test "x$doc" = x; then
 echo "\
- Doc build         : no"
+ Doc build                       : no"
 else
 echo "\
- Doc build         : ${doc} "
+ Doc build                       : ${doc} "
 fi
+echo "\
+ URW fonts for pdf               : $groff_have_urw_fonts
+ Use uchardet library for preconv: $groff_have_uchardet
+ pdftools for distcheck          : $groff_have_pdftools"
 echo "\
 ----------------------------------------------------------------------"
 
@@ -12322,13 +26558,13 @@ if test -z "$groff_no_x"; then
 
     $appresdir
 
-  (existing files will be saved by appending \`.old' to the file
+  (existing files will be saved by appending '.old' to the file
   name).
 
   To install them into a different directory, say,
-  \`/etc/X11/app-defaults', add
-  \`--with-appresdir=/etc/X11/app-defaults' to the configure script
-  command line options and rerun it (\`prefix' value has no effect on
+  '/etc/X11/app-defaults', add
+  '--with-appresdir=/etc/X11/app-defaults' to the configure script
+  command-line options and rerun it ('prefix' value has no effect on
   a --with-appresdir option).
 
   If the gxditview resources are installed in a directory that is not
@@ -12337,7 +26573,7 @@ if test -z "$groff_no_x"; then
   /usr/share/X11/app-defaults and /etc/X11/app-defaults), you will
   have to set the environment variable XFILESEARCHPATH to this
   path.  More details can be found in the X(7) manual page, or in \"X
-  Toolkit Intrinsics - C Language Interface manual\"
+  Toolkit Intrinsics - C Language Interface manual\".
        " >&5
 $as_echo "$as_me:
   The application resource files for gxditview (GXditview and
@@ -12345,13 +26581,13 @@ $as_echo "$as_me:
 
     $appresdir
 
-  (existing files will be saved by appending \`.old' to the file
+  (existing files will be saved by appending '.old' to the file
   name).
 
   To install them into a different directory, say,
-  \`/etc/X11/app-defaults', add
-  \`--with-appresdir=/etc/X11/app-defaults' to the configure script
-  command line options and rerun it (\`prefix' value has no effect on
+  '/etc/X11/app-defaults', add
+  '--with-appresdir=/etc/X11/app-defaults' to the configure script
+  command-line options and rerun it ('prefix' value has no effect on
   a --with-appresdir option).
 
   If the gxditview resources are installed in a directory that is not
@@ -12360,7 +26596,57 @@ $as_echo "$as_me:
   /usr/share/X11/app-defaults and /etc/X11/app-defaults), you will
   have to set the environment variable XFILESEARCHPATH to this
   path.  More details can be found in the X(7) manual page, or in \"X
-  Toolkit Intrinsics - C Language Interface manual\"
+  Toolkit Intrinsics - C Language Interface manual\".
        " >&6;}
      fi
    fi
+if test "$groff_have_urw_fonts" = no; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}:
+  No URW fonts in .pfb format were found on your system, URW fonts
+  generation for 'devpdf' will not work properly.  These fonts can be
+  downloaded here:
+
+    http://downloads.ghostscript.com/public/fonts/urw-base35-v1.10.zip
+
+  By default groff will search these fonts in the paths given by \`gs
+  -h' and in these 2 default directories:
+  '/usr/share/fonts/type1/gsfonts/' and
+  '/opt/local/share/fonts/urw-fonts/' (paths used by
+  font/devpdf/Foundry.in).  You can also pass the option
+  '--with-urw-fonts-dir=DIR' to 'configure' to set a custom path.  You
+  would need to re-run the 'configure' script after installing these
+  fonts.
+
+  " >&5
+$as_echo "$as_me:
+  No URW fonts in .pfb format were found on your system, URW fonts
+  generation for 'devpdf' will not work properly.  These fonts can be
+  downloaded here:
+
+    http://downloads.ghostscript.com/public/fonts/urw-base35-v1.10.zip
+
+  By default groff will search these fonts in the paths given by \`gs
+  -h' and in these 2 default directories:
+  '/usr/share/fonts/type1/gsfonts/' and
+  '/opt/local/share/fonts/urw-fonts/' (paths used by
+  font/devpdf/Foundry.in).  You can also pass the option
+  '--with-urw-fonts-dir=DIR' to 'configure' to set a custom path.  You
+  would need to re-run the 'configure' script after installing these
+  fonts.
+
+  " >&6;}
+  fi
+
+if test "x$groff_have_uchardet" = "xno" -a "x$with_uchardet" != "xno"; then
+  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING:
+  uchardet library was not found; preprocessor 'preconv', which uses it to detect
+  the input file encoding, might not work properly (to check how and in which
+  order 'preconv' tries to determine the file encoding, see its man page).
+  " >&5
+$as_echo "$as_me: WARNING:
+  uchardet library was not found; preprocessor 'preconv', which uses it to detect
+  the input file encoding, might not work properly (to check how and in which
+  order 'preconv' tries to determine the file encoding, see its man page).
+  " >&2;}
+  fi
+
index c77916556b448233fc74741515d29e2e7817aa17..28e75f175990e954e7c7abde9a20d0ac8b8e7756 100644 (file)
@@ -1,5 +1,5 @@
 # Autoconf configuration file for groff.
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
+# Copyright (C) 1989-2018 Free Software Foundation, Inc.
 #
 # This file is part of groff.
 #
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 # Process this file with autoconf to produce a configure script.
 
-dnl Use `VERSION' and `REVISION' files to get version.
-m4_define([GROFF_VERSION_DATA], m4_include([VERSION]))
-m4_define([GROFF_REVISION_DATA], m4_include([REVISION]))
-
-dnl Strip off newline characters.
-m4_define([GROFF_VERSION],
-          m4_substr(GROFF_VERSION_DATA,
-                    [0], m4_decr(m4_len(GROFF_VERSION_DATA))))
-m4_define([GROFF_REVISION],
-          m4_substr(GROFF_REVISION_DATA,
-                    [0], m4_decr(m4_len(GROFF_REVISION_DATA))))
-
-dnl Don't use revision if it is zero.
-m4_define([GROFF_VERSION_STRING],
-          m4_if(m4_eval(GROFF_REVISION[ > 0]),
-                [1],
-                GROFF_VERSION[.]GROFF_REVISION,
-                GROFF_VERSION))
-
-AC_INIT([groff],
-        GROFF_VERSION_STRING,
-        [bug-groff@gnu.org],
-        [groff-]GROFF_VERSION_STRING)
+AC_INIT([GNU Troff],
+        m4_esyscmd([build-aux/git-version-gen --prefix "" .tarball-version]),
+        http://savannah.gnu.org/bugs/?group=groff,
+        [groff])
+
 AC_PREREQ([2.62])
 
+# SHORT_VERSION contains only the number of REVISION before the first '.',
+# e.g. if REVISION is '3.real.434-5aafd' then SHORT_VERSION is 'x.yy.3',
+# where x and yy are MAJOR_VERSION and MINOR_VERSION, respectively.
+AC_SUBST([SHORT_VERSION],
+       m4_bregexp(AC_PACKAGE_VERSION,[^\(\w+\.\w+\.\w+\).*$],[\1]))
+
+# Directories where the helper scripts should be found. This must be consistent
+# with the variable build_aux in bootstrap.conf
+AC_CONFIG_AUX_DIR([build-aux])
+
 AC_CONFIG_HEADERS([src/include/config.h:src/include/config.hin])
 AC_CONFIG_SRCDIR([src/roff/groff/groff.cpp])
 
 AC_USE_SYSTEM_EXTENSIONS
 
+AM_INIT_AUTOMAKE([subdir-objects])
+
+AM_SILENT_RULES([yes])
+
 # checks for programs
 AC_PROG_CC
 AC_PROG_CXX
+gl_EARLY
+gl_INIT
 GROFF_CXX_CHECK
 GROFF_EBCDIC
 GROFF_OS390
@@ -72,11 +70,17 @@ AC_PROG_EGREP
 GROFF_PROG_YACC
 GROFF_DOC_CHECK
 GROFF_MAKEINFO
+GROFF_TEXI2DVI
 AC_PROG_RANLIB
 GROFF_INSTALL_SH
 GROFF_INSTALL_INFO
 AC_PROG_INSTALL
 AC_PROG_LN_S
+AC_PROG_MKDIR_P
+GROFF_PROG_XPMTOPPM
+PKG_PROG_PKG_CONFIG
+GROFF_UCHARDET
+GROFF_PDFTOOLS
 
 # use a dummy substitution if no csh hack is necessary to avoid errors
 # with non-GNU sed programs
@@ -92,17 +96,14 @@ GROFF_POSIX
 # checks for header stuff
 GROFF_SRAND
 GROFF_NEED_DECLARATION([gettimeofday])
-GROFF_NEED_DECLARATION([hypot])
 GROFF_NEED_DECLARATION([popen])
 GROFF_NEED_DECLARATION([pclose])
 GROFF_NEED_DECLARATION([putenv])
 GROFF_NEED_DECLARATION([rand])
-GROFF_NEED_DECLARATION([snprintf])
 GROFF_NEED_DECLARATION([srand])
 GROFF_NEED_DECLARATION([strcasecmp])
 GROFF_NEED_DECLARATION([strncasecmp])
 GROFF_NEED_DECLARATION([vfprintf])
-GROFF_NEED_DECLARATION([vsnprintf])
 GROFF_SYS_NERR
 GROFF_SYS_ERRLIST
 GROFF_OSFCN_H
@@ -134,10 +135,8 @@ AC_SUBST([LIBEXT],[$acl_libext])
 AC_FUNC_MMAP
 saved_libs="$LIBS"
 LIBS="$LIBS $LIBC $LIBM"
-AC_REPLACE_FUNCS([fmod getcwd putenv snprintf strcasecmp \
+AC_REPLACE_FUNCS([fmod getcwd putenv strcasecmp \
                   strerror strncasecmp strtol])
-# vsnprintf is in the same source file as snprintf
-AC_CHECK_FUNCS([vsnprintf], [], [AC_LIBOBJ([snprintf])])
 LIBS="$saved_libs"
 AC_CHECK_FUNCS([gettimeofday isatty kill rename setlocale strsep])
 GROFF_MKSTEMP
@@ -151,46 +150,90 @@ GROFF_TRADITIONAL_CPP
 # checks for operating system services
 GROFF_WCOREFLAG
 
+# URW fonts extra dir
+GROFF_URW_FONTS_PATH
+
 # other random stuff
 GROFF_BROKEN_SPOOLER_FLAGS
 GROFF_PAGE
 GROFF_G
 GROFF_TMAC
+GROFF_WITH_COMPATIBILITY_WRAPPERS
 GROFF_TARGET_PATH_SEPARATOR
 GROFF_HTML_PROGRAMS
 GROFF_PDFDOC_PROGRAMS
 GROFF_PNMTOPS_NOSETPAGE
+GROFF_MAKE_RM
+GROFF_DIFF_D
+GROFF_HAVE_TEST_EF_OPTION
+GROFF_BASH
 gl_GLIBC21
 gl_LOCALCHARSET
 
-AC_CONFIG_FILES([stamp-h], [echo timestamp > stamp-h])
-AC_CONFIG_FILES([Makefile doc/Makefile src/utils/xtotroff/Makefile])
-AC_CONFIG_FILES([contrib/gdiffmk/tests/runtests],
-                [chmod +x contrib/gdiffmk/tests/runtests])
+# checks for presence of URW fonts (requires ghostscript, which is
+# checked in GROFF_HTML_PROGRAMS
+GROFF_URW_FONTS
+
+AM_CONDITIONAL([BUILD_WINSCRIPTS], [test -n "$make_winscripts"])
+
+# If X11 is not available, don't build:
+# font/devX75 
+# font/devX75-12
+# font/devX100
+# font/devX100-12
+# src/devices/xditview 
+# src/utils/xtotroff
+# src/libs/libxutil
+AM_CONDITIONAL([WITHOUT_X11], [test "x$groff_no_x" = "xyes"])
+
+# make builtin variable RM
+AM_CONDITIONAL([MAKE_DONT_HAVE_RM], [test "x$groff_is_rm_defined" = "xno"])
+
+# Some programs have a "g" prefix if an existing groff installation is detected
+AM_CONDITIONAL([USEPROGRAMPREFIX], [test x$g = xg])
+
+AM_CONDITIONAL([BUILD_INFODOC], [test -n "$make_infodoc"])
+AM_CONDITIONAL([BUILD_HTML], [test -n "$make_htmldoc"])
+AM_CONDITIONAL([BUILD_HTMLEXAMPLES], [test -n "$make_htmlexamples"])
+AM_CONDITIONAL([BUILD_PDFDOC], [test -n "$make_pdfdoc"])
+AM_CONDITIONAL([BUILD_PDFEXAMPLES], [test -n "$make_pdfexamples"])
+AM_CONDITIONAL([BUILD_OTHERDOC], [test -n "$make_otherdoc"])
+AM_CONDITIONAL([BUILD_EXAMPLES], [test -n "$make_examples"])
+AM_CONDITIONAL([INSTALL_SHIPPED_HTML], [test -n "$make_install_shipped_htmldoc"])
+AM_CONDITIONAL([HAVE_PDFTOOLS], [test "x$groff_have_pdftools" = "xyes" ])
+AM_CONDITIONAL([HAVE_TEXI2DVI], [test "x$groff_have_texi2dvi" = "xyes" ])
+
+AC_CONFIG_FILES([Makefile])
 AC_CONFIG_FILES([test-groff], [chmod +x test-groff])
 AC_OUTPUT
 
 echo "
 ${PACKAGE_NAME} version ${PACKAGE_VERSION}
 ----------------------------------------------------------------------
- Prefix            : ${prefix}
- Compiler          : ${CC} ${CFLAGS} ${CPPFLAGS}"
+ Prefix                          : ${prefix}
+ Compiler                        : ${CC} ${CFLAGS} ${CPPFLAGS}"
 if test "x$groff_no_x" = "xyes"; then
 echo "\
- X11 support       : no"
+ X11 support                     : no"
 else
 echo "\
- X11 support       : yes
- X11 resources dir : $appresdir"
+ X11 support                     : yes
+ X11 resources dir               : $appresdir"
 fi
 if test "x$doc" = x; then
 echo "\
- Doc build         : no"
+ Doc build                       : no"
 else
 echo "\
- Doc build         : ${doc} "
+ Doc build                       : ${doc} "
 fi
+echo "\
+ URW fonts for pdf               : $groff_have_urw_fonts
+ Use uchardet library for preconv: $groff_have_uchardet
+ pdftools for distcheck          : $groff_have_pdftools"
 echo "\
 ----------------------------------------------------------------------"
 
 GROFF_APPRESDIR_CHECK
+GROFF_URW_FONTS_CHECK
+GROFF_UCHARDET_CHECK
index 4c3ddf3e879b4a6d9078ba2e7ff36162f248c00e..02f4c07727351efec14a1e511635281715d900f2 100644 (file)
@@ -1,3 +1,22 @@
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * chem.am (chem, README): Use $(AM_V_GEN) to silence file generation.
+
+2015-08-22  Bernd Warken  <bernd.warken@web.de>
+
+       * chem.1.man: Rename `chem.man'.
+
+       * chem.am: Include renaming.
+
+2015-08-05  Bernd Warken  <bernd.warken@web.de>
+
+       * chem.am: Add `Last update'.  Setup Emacs makefile-automake-mode.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+       * chem.man: Make it work in compatibility mode.
+       (EL): Fix typo.
+
 2014-09-25  Bernd Warken  <bernd.warken@web.de>
 
        * chem.pl: New chem version 1.0.5.
 ________________________________________________________________
 License
 
-Copyright (C) 2006-2014  Free Software Foundation, Inc.
+Copyright (C) 2006-2018  Free Software Foundation, Inc.
 Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
 Copying and distribution of this file, with or without
diff --git a/contrib/chem/Makefile.sub b/contrib/chem/Makefile.sub
deleted file mode 100644 (file)
index b13dc2e..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-# Makefile.sub for `chem'
-
-# File position: <groff-source>/contrib/chem/Makefile.sub
-
-# Copyright (C) 2006-2014  Free Software Foundation, Inc.
-# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `chem' which is part of `groff'.
-
-# `groff' is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License (GPL) version 2 as
-# published by the Free Software Foundation.
-
-# `groff' 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.
-
-# The GPL2 license text is available in the internet at
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-
-########################################################################
-
-MAN1=chem.n
-MOSTLYCLEANADD=\
-  chem \
-  chem.n \
-  README \
-  examples/README \
-  examples/122/README
-
-RM=rm -f
-
-all: README chem $(MAN1) $(make_examples)
-
-README: $(srcdir)/README.txt
-       sed -e "s|@g@|$(g)|g" $? >$@
-
-.PHONY: examples
-examples: examples/README examples/122/README
-
-examples/README: $(srcdir)/examples/README.txt
-       test -d examples || $(mkinstalldirs) examples;
-       sed -e "s|@g@|$(g)|g" $? >$@
-
-examples/122/README: $(srcdir)/examples/122/README.txt
-       test -d examples || $(mkinstalldirs) examples;
-       test -d examples/122 || $(mkinstalldirs) examples/122;
-       sed -e "s|@g@|$(g)|g" $? >$@;
-
-chem: $(srcdir)/chem.pl $(SH_DEPS_SED_SCRIPT)
-       $(RM) $@;
-       sed -f "$(SH_DEPS_SED_SCRIPT)" \
-           -e "s|@g@|$(g)|g" \
-           -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-           -e "s|@MACRODIR@|$(DESTDIR)$(tmacdir)|g" \
-           -e "s|@PICDIR@|$(DESTDIR)$(datasubdir)/pic|g" \
-           -e "s|@VERSION@|$(version)$(revision)|g" \
-           -e "$(SH_SCRIPT_SED_CMD)" \
-           $(srcdir)/chem.pl >$@;
-       chmod +x $@;
-
-.PHONY: install_always
-install_always: chem README $(srcdir)/chem.pic
-       test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir);
-       $(RM) $(DESTDIR)$(bindir)/$(g)chem;
-       $(INSTALL_SCRIPT) chem $(DESTDIR)$(bindir)/$(g)chem;
-       test -d $(DESTDIR)$(datasubdir)/pic \
-         || $(mkinstalldirs) $(DESTDIR)$(datasubdir)/pic;
-       $(RM) $(DESTDIR)$(datasubdir)/pic/chem.pic;
-       $(INSTALL_DATA) $(srcdir)/chem.pic \
-         $(DESTDIR)$(datasubdir)/pic/chem.pic;
-
-.PHONY: install_examples
-install_examples:
-       test -d $(DESTDIR)$(exampledir)/chem \
-         || $(mkinstalldirs) $(DESTDIR)$(exampledir)/chem;
-       test -d $(DESTDIR)$(exampledir)/chem/122 \
-         || $(mkinstalldirs) $(DESTDIR)$(exampledir)/chem/122;
-       find $(DESTDIR)$(exampledir)/chem -type f -exec rm -f '{}' ';'
-       $(INSTALL_DATA) examples/README $(DESTDIR)$(exampledir)/chem/README;
-       for i in $(srcdir)/examples/*.chem; do \
-         n=`echo $$i | sed 's|$(srcdir)/examples/||g'`; \
-         $(INSTALL_DATA) $$i $(DESTDIR)$(exampledir)/chem/$$n; \
-       done;
-       $(INSTALL_DATA) examples/122/README \
-         $(DESTDIR)$(exampledir)/chem/122/README;
-       for i in $(srcdir)/examples/122/*.chem; do \
-         n=`echo $$i | sed 's|$(srcdir)/examples/122/||g'`; \
-         $(INSTALL_DATA) $$i $(DESTDIR)$(exampledir)/chem/122/$$n; \
-       done
-
-.PHONY: install_data
-
-install_data: install_always $(make_install_examples)
-
-# uninstall_sub: uninstall_always $(make_uninstall_examples)
-
-.PHONY: uninstall_always
-uninstall_always:
-       $(RM) $(DESTDIR)$(bindir)/chem;
-       $(RM) $(DESTDIR)$(datasubdir)/pic/chem.pic;
-       -test -d $(DESTDIR)$(datasubdir)/pic && \
-         rmdir $(DESTDIR)$(datasubdir)/pic;
-
-.PHONY: uninstall_examples
-uninstall_examples:
-       $(RM) $(DESTDIR)$(exampledir)/chem/122/*;
-       -test -d $(DESTDIR)$(exampledir)/chem/122 && \
-         rmdir $(DESTDIR)$(exampledir)/chem/122;
-       $(RM) $(DESTDIR)$(exampledir)/chem/*;
-       -test -d $(DESTDIR)$(exampledir)/chem && \
-         rmdir $(DESTDIR)$(exampledir)/chem;
-
-.PHONY: uninstall_sub
-uninstall_sub: uninstall_always uninstall_examples
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index ef550f5bf5d5854d5a6c66574cf5ad9587235a8d..000c47032596f1c42b32fb6e996c320447a273e2 100644 (file)
@@ -1,39 +1,39 @@
-`chem' is a `roff' language to generate chemical structure diagrams.
-`@g@chem' is a `groff' preprocessor that produces output suitable for
-the `@g@pic' preprocessor.
+'chem' is a 'roff' language to generate chemical structure diagrams.
+'@g@chem' is a 'groff' preprocessor that produces output suitable for
+the '@g@pic' preprocessor.
 
-The original version of `chem' is an `awk' script written by Brian
+The original version of 'chem' is an 'awk' script written by Brian
 Kernighan <http://cm.bell-labs.com/cm/cs/who/bwk/index.html>.  The
-source files of the `awk' version of `chem' are available at
+source files of the 'awk' version of 'chem' are available at
 <http://cm.bell-labs.com/netlib/typesetting/chem.gz>.
 
-This project is a rewrite of `chem' in Perl for the GNU `roff' project
-`groff'.  It was written under Perl v5.8.8, but at least Perl v5.6 is
-needed to run the Perl version of `chem'.
+This project is a rewrite of 'chem' in Perl for the GNU 'roff' project
+'groff'.  It was written under Perl v5.8.8, but at least Perl v5.6 is
+needed to run the Perl version of 'chem'.
 
-In comparison to the original `awk' version of `chem', the Perl
+In comparison to the original 'awk' version of 'chem', the Perl
 version does the following changements:
 - the options -h, --help, -v, --version to output usage and version
 information are added.
-- remove some functions `inline', `shiftfields', and `set' and some
+- remove some functions 'inline', 'shiftfields', and 'set' and some
 variables that are used only once.
 
-The subdirectory `examples/' contains example files for chem.  They
-are written in the `chem' language.  The file names end with .chem.
+The subdirectory 'examples/' contains example files for chem.  They
+are written in the 'chem' language.  The file names end with .chem.
 
 
 ####### License
 
-Copyright (C) 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 2006-2018 Free Software Foundation, Inc.
 Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-This file is part of `chem', which is part of `groff'.
+This file is part of 'chem', which is part of 'groff'.
 
-`groff' is free software; you can redistribute it and/or modify it
-under the terms of the GNU General Public License (GPL) vbersion 2 as
+'groff' is free software; you can redistribute it and/or modify it
+under the terms of the GNU General Public License (GPL) version 2 as
 published by the Free Software Foundation.
 
-`groff' is distributed in the hope that it will be useful, but WITHOUT
+'groff' 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.
diff --git a/contrib/chem/chem.1.man b/contrib/chem/chem.1.man
new file mode 100644 (file)
index 0000000..d6574ce
--- /dev/null
@@ -0,0 +1,941 @@
+.TH @G@CHEM @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@chem \- groff preprocessor for producing chemical structure diagrams
+.
+.\" @g@chem.1 - man page for @g@chem (section 1).
+.\" Source file position:  <groff_source_top>/contrib/chem/chem.man
+.\" Installed position:    $prefix/share/man/man1/@g@chem.1
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2006-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of chem, which is part of groff, a free software
+.\" project.
+.\"
+.\" You can redistribute it and/or modify it under the terms of the GNU
+.\" General Public License version 2 (GPL2) as published by the Free
+.\" Software Foundation.
+.\"
+.\" The license text for GPL2 is available in the internet at
+.\" <http://www.gnu.org/licenses/gpl-2.0.html>.
+.
+.
+.\" ====================================================================
+.\" Setup
+.\" ====================================================================
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr chem_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Characters
+.\" ====================================================================
+.
+.\" Ellipsis ...
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
+.\" called with \*(EL
+.
+.
+.\" ====================================================================
+.SH "SYNOPSIS"
+.\" ====================================================================
+.
+.SY @g@chem
+.OP \-\-
+.RI [ filespec
+\*(EL]
+.YS
+.
+.SY @g@chem
+.B \-h
+.SY @g@chem
+.B \-\-help
+.YS
+.
+.SY @g@chem
+.B \-v
+.SY @g@chem
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I chem
+produces chemical structure diagrams.
+.
+Today's version is best suited for organic chemistry (bonds, rings).
+.
+The
+.B @g@chem
+program is a
+.B groff
+preprocessor like
+.BR @g@eqn ,
+.BR @g@pic ,
+.BR @g@tbl ,
+etc.
+.
+It generates
+.I pic
+output such that all
+.I chem
+parts are translated into diagrams of the
+.I pic
+language.
+.
+.
+.P
+A
+.I filespec
+argument is either a file name of an existing file or a minus
+character
+.BR \- ,
+meaning standard input.
+.
+If no argument is specified then standard input is taken
+automatically.
+.
+.B \-h
+and
+.B \-\-help
+display a usage message,
+whereas
+.B \-v
+and
+.B \-\-version
+display version information;
+all exit.
+.
+.
+.P
+The program
+.B @g@chem
+originates from the Perl source file
+.IR chem.pl .
+.
+It tells
+.B @g@pic
+to include a copy of the macro file
+.IR chem.pic .
+.
+Moreover the
+.I groff
+source file
+.I pic.tmac
+is loaded.
+.
+.
+.P
+In a style reminiscent of
+.I eqn
+and
+.IR pic ,
+the
+.I chem
+diagrams are written in a special language.
+.
+.
+.P
+A set of
+.I chem
+lines looks like this
+.
+.
+.IP
+.nf
+.ft B
+\&.cstart
+\fIchem data\fP
+\&.cend
+.ft
+.fi
+.
+.
+.P
+Lines containing the keywords
+.B .cstart
+and
+.B .cend
+start and end the input for
+.BR @g@chem ,
+respectively.
+.
+In
+.I pic
+context, i.e., after the call of
+.BR .PS ,
+.I chem
+input can optionally be started by the line
+.B \%begin\~chem
+and ended by the line with the single word
+.B end
+instead.
+.
+.
+.P
+Anything outside these initialization lines is copied through
+without modification;
+all data between the initialization lines is converted into
+.I pic
+commands to draw the diagram.
+.
+.
+.P
+As an example,
+.
+.IP
+.nf
+.ft B
+\&.cstart
+CH3
+bond
+CH3
+\&.cend
+.ft
+.fi
+.
+.
+.P
+prints two
+.B CH3
+groups with a bond between them.
+.
+.
+.P
+To actually view this, you must run
+.B @g@chem
+followed by
+.BR groffer :
+.
+.IP
+.B @g@chem [file \*(EL] | groffer
+.
+.P
+If you want to create just
+.B groff
+output, you must run
+.B @g@chem
+followed by
+.B groff
+with the option
+.B \-p
+for the activation of
+.BR @g@pic :
+.IP
+.B @g@chem [file \*(EL] | groff \-p \*(EL
+.
+.
+.\" ====================================================================
+.SH THE LANGUAGE
+.\" ====================================================================
+.
+The
+.I chem
+input language is rather small.  It provides rings of several styles
+and a way to glue them together as desired, bonds of several styles,
+moieties (e.g.,
+.BR C ,
+.BR NH3 ,
+\*(EL, and strings.
+.
+.
+.\" ====================================================================
+.SS Setting Variables
+.\" ====================================================================
+.
+There are some variables that can be set by commands.
+.
+Such commands have two possible forms, either
+.
+.RS
+.P
+.I "variable value"
+.RE
+.
+.P
+or
+.
+.RS
+.P
+.IB "variable " = " value"
+.RE
+.
+.P
+This sets the given
+.I variable
+to the argument
+.IR value .
+If more arguments are given only the last argument is taken, all other
+arguments are ignored.
+.
+.
+.P
+There are only a few variables to be set by these commands:
+.
+.TP
+.BI textht " arg"
+Set the height of the text to
+.IR arg ;
+default is 0.16.
+.
+.TP
+.BI cwid " arg"
+Set the character width to
+.IR arg ;
+default is 0.12.
+.
+.TP
+.BI db " arg"
+Set the bond length to
+.IR arg ;
+default is 0.2.
+.
+.TP
+.BI size " arg"
+Scale the diagram to make it look plausible at point size
+.IR arg ;
+default is 10 point.
+.
+.
+.\" ====================================================================
+.SS Bonds
+.\" ====================================================================
+.
+This
+.
+.RS
+.SY bond
+.RI [ direction ]
+.RI [ length\ n ]
+.RB [ from\ \c
+.IR Name | picstuff ]
+.YS
+.RE
+.
+.P
+draws a single bond in direction from nearest corner of
+.IR Name .
+.B bond
+can also be
+.BR "double bond" ,
+.BR "front bond" ,
+.BR "back bond" ,
+etc.
+.
+(We will get back to
+.I Name
+soon.)
+.
+.
+.P
+.I direction
+is the angle in degrees (0\~up, positive clockwise)
+or a direction word like
+.BR up ,
+.BR down ,
+.B sw
+(=\~southwest), etc.
+.
+If no direction is specified, the bond goes in the current direction
+(usually that of the last bond).
+.
+.
+.P
+Normally the bond begins at the last object placed;  this
+can be changed by naming a
+.B from
+place.
+.
+For instance, to make a simple alkyl chain:
+.
+.RS
+.TS
+tab (@);
+lb l.
+CH3
+bond@(this one goes right from the CH3)
+C@(at the right end of the bond)
+double bond up@(from the C)
+O@(at the end of the double bond)
+bond right from C
+CH3
+.TE
+.RE
+.
+.
+.P
+A length in inches may be specified to override the default length.
+.
+Other
+.I pic
+commands can be tacked on to the end of a bond command, to created
+dotted or dashed bonds or to specify a
+.B to
+place.
+.
+.
+.\" ====================================================================
+.SS Rings
+.\" ====================================================================
+.
+There are lots of rings, but only 5 and 6-sided rings get
+much support.
+.
+.B ring
+by itself is a 6-sided ring;
+.B benzene
+is the benzene ring with a circle inside.
+.B aromatic
+puts a circle into any kind of ring.
+.
+.RS
+.SY ring
+.RB [ \%pointing\  ( up | right | left | down )]
+.RB [ \%aromatic ]
+.RB [ put\ Mol\ at\ \fIn\/\fP ]
+.RB [ \%double\ \c
+.IR i , j\ \/\c
+.IR k , l\ \/\c
+\*(EL
+.RI [ picstuff ]
+.YS
+.RE
+.
+.
+.P
+The vertices of a ring are numbered 1, 2, \*(EL from the
+vertex that points in the natural compass direction.
+.
+So for a hexagonal ring with the point at the top, the top vertex
+is\~1, while if the ring has a point at the east side, that is
+vertex\~1.
+.
+This is expressed as
+.
+.IP
+.ft B
+.nf
+R1: ring pointing up
+R2: ring pointing right
+.fi
+.ft
+.
+.
+.P
+The ring vertices are named
+.BR .V1 ,
+\*(EL,
+.BI .V n\fR,\fP
+with
+.B .V1
+in the pointing direction.
+.
+So the corners of
+.B R1
+are
+.B R1.V1
+(the
+.IR top ),
+.BR R1.V2 ,
+.BR R1.V3 ,
+.B R1.V4
+(the
+.IR bottom ),
+etc., whereas for
+.BR R2 ,
+.B R2.V1
+is the rightmost vertex and
+.B R2.V4
+the leftmost.
+.
+These vertex names are used for connecting bonds or other rings.  For
+example,
+.
+.IP
+.ft B
+.nf
+R1: benzene pointing right
+R2: benzene pointing right with .V6 at R1.V2
+.fi
+.ft
+.P
+creates two benzene rings connected along a side.
+.
+.
+.P
+Interior double bonds are specified as
+.BI \%double\  n1 , n2\ n3 , n4\ \fR\*(EL;\fP
+each number pair adds an interior bond.
+.
+So the alternate form of a benzene ring is
+.
+.IP
+.B "ring double 1,2 3,4 5,6"
+.
+.
+.P
+Heterocycles (rings with something other than carbon at a vertex) are
+written as
+.BI put\  X\  at\  V\fR,\fP
+as in
+.
+.IP
+.B "R: ring put N at 1 put O at 2"
+.
+.
+.P
+In this heterocycle,
+.B R.N
+and
+.B R.O
+become synonyms for
+.B R.V1
+and
+.BR R.V2 .
+.
+.
+.P
+There are two 5-sided rings.
+.
+.B ring5
+is pentagonal with a side that matches the 6-sided ring; it has four
+natural directions.
+.
+A
+.B \%flatring
+is a 5-sided ring created by chopping one corner of a 6-sided ring so
+that it exactly matches the 6-sided rings.
+.
+.
+.P
+The description of a ring has to fit on a single line.
+.
+.
+.\" ====================================================================
+.SS Moieties and Strings
+.\" ====================================================================
+.
+A moiety is a string of characters beginning with a capital letter,
+such as N(C2H5)2.
+.
+Numbers are converted to subscripts (unless they appear to be
+fractional values, as in N2.5H).
+.
+The name of a moiety is determined from the moiety after special
+characters have been stripped out: e.g., N(C2H5)2) has the name NC2H52.
+.
+.
+.P
+Moieties can be specified in two kinds.
+.
+Normally a moiety is placed right after the last thing mentioned,
+separated by a semicolon surrounded by spaces, e.g.,
+.
+.IP
+.B "B1: bond ; OH"
+.
+.P
+Here the moiety is
+.BR OH ;
+it is set after a bond.
+.
+.
+.P
+As the second kind a moiety can be positioned as the first word in a
+.IR pic -like
+command, e.g.,
+.
+.IP
+.B "CH3 at C + (0.5,0.5)"
+.
+.P
+Here the moiety is
+.BR CH3 .
+It is placed at a position relative to
+.BR C ,
+a moiety used earlier in the chemical structure.
+.
+.
+.P
+So moiety names can be specified as
+.I chem
+positions everywhere in the
+.I chem
+code.
+.
+Beneath their printing moieties are names for places.
+.
+.
+.P
+The moiety
+.B BP
+is special.
+.
+It is not printed but just serves as a mark to be referred to in later
+.I chem
+commands.
+.
+For example,
+.
+.IP
+.B "bond ; BP"
+.
+.P
+sets a mark at the end of the bond.
+.
+This can be used then for specifying a place.
+.
+The name
+.B BP
+is derived from
+.I branch point
+(i.e., line crossing).
+.
+.
+.P
+A string within double quotes
+.B \(dq
+is interpreted as a part of a
+.I chem
+command.
+.
+It represents a string that should be printed (without the quotes).
+.
+Text within quotes \(dq\*(EL\(dq is treated more or less
+like a moiety except that no changes are made to the quoted part.
+.
+.
+.\" ====================================================================
+.SS Names
+.\" ====================================================================
+.
+In the alkyl chain above, notice that the carbon atom
+.B C
+was used both to draw something and as the name for a place.
+.
+A moiety always defines a name for a place;  you can use
+your own names for places instead, and indeed, for rings
+you will have to.
+.
+A name is just
+.
+.IP
+.IB Name :
+\*(EL
+.
+.
+.P
+.I Name
+is often the name of a moiety like
+.BR CH3 ,
+but it need not to be.
+.
+Any name that begins with a capital letter and which contains
+only letters and numbers is valid:
+.
+.RS
+.TP
+.B First:
+.B bond
+.TQ
+\&
+.B "bond 30 from First"
+.RE
+.
+.
+.\" ====================================================================
+.SS Miscellaneous
+.\" ====================================================================
+.
+The specific construction
+.RS
+.TP
+.BR bond\  \*(EL " ; moiety"
+.RE
+.P
+is equivalent to
+.IP
+.ft B
+.nf
+bond
+moiety
+.fi
+.ft
+.
+.
+.P
+Otherwise, each item has to be on a separate line (and only one line).
+Note that there must be whitespace after the semicolon which separates
+the commands.
+.
+.
+.P
+A period character
+.B .\&
+or a single quote
+.B '
+in the first column of a line signals a
+.I troff
+command, which is copied through as-is.
+.
+.
+.P
+A line whose first non-blank character is a hash character
+.RB ( # )
+is treated as a comment and thus ignored.
+.
+However, hash characters within a word are kept.
+.
+.
+.P
+A line whose first word is
+.B pic
+is copied through as-is after the word
+.B pic
+has been removed.
+.
+.
+.P
+The command
+.IP
+.B size
+.I n
+.P
+scales the diagram to make it look plausible at point size\~\c
+.I n
+(default is 10\~point).
+.
+.
+.P
+Anything else is assumed to be
+.I pic
+code, which is copied through with a label.
+.
+.
+.P
+Since
+.B @g@chem
+is a
+.B @g@pic
+preprocessor, it is possible to include
+.I pic
+statements in the middle of a diagram to draw things not provided for
+by
+.I chem
+itself.
+.
+Such
+.I pic
+statements should be included in
+.I chem
+code by adding
+.B pic
+as the first word of this line for clarity.
+.
+.
+.P
+The following
+.I pic
+commands are accepted as
+.I chem
+commands, so no
+.B pic
+command word is needed:
+.
+.IP
+.B define
+Start the definition of
+.I pic
+macro within
+.IR chem .
+.
+.RS
+.TP
+.B [
+Start a block composite.
+.
+.TP
+.B ]
+End a block composite.
+.
+.TP
+.B {
+Start a macro definition block.
+.
+.TP
+.B }
+End a macro definition block.
+.RE
+.
+.P
+The macro names from
+.B define
+statements are stored and their call is accepted as a
+.I chem
+command as well.
+.
+.
+.\" ====================================================================
+.SS WISH LIST
+.\" ====================================================================
+.
+.P
+This TODO list was collected by Brian Kernighan.
+.
+.
+.P
+Error checking is minimal; errors are usually detected and reported in
+an oblique fashion by
+.IR pic .
+.
+.
+.P
+There is no library or file inclusion mechanism, and there is no
+shorthand for repetitive structures.
+.
+.
+.P
+The extension mechanism is to create
+.I pic
+macros, but these are tricky to get right and don't have all the
+properties of built-in objects.
+.
+.
+.P
+There is no in-line chemistry yet (e.g., analogous to the $\*(EL$
+construct of eqn).
+.
+.
+.P
+There is no way to control entry point for bonds on groups.
+.
+Normally a bond connects to the carbon atom if entering from
+the top or bottom and otherwise to the nearest corner.
+.
+.
+.P
+Bonds from substituted atoms on heterocycles do not join at the proper
+place without adding a bit of
+.IR pic .
+.
+.
+.P
+There is no decent primitive for brackets.
+.
+.
+.P
+Text (quoted strings) doesn't work very well.
+.
+.
+.P
+A squiggle bond is needed.
+.
+.
+.\" ====================================================================
+.SH "FILES"
+.\" ====================================================================
+.
+.TP
+.I @DATASUBDIR@/pic/chem.pic
+A collection of
+.I pic
+macros needed by
+.BR @g@chem .
+.
+.TP
+.I @MACRODIR@/pic.tmac
+A macro file which redefines
+.B .PS
+and
+.B .PE
+to center
+.I pic
+diagrams.
+.
+.TP
+.IR @DOCDIR@/examples/chem/ * .chem
+Example files for
+.IR chem .
+.
+.TP
+.IR @DOCDIR@/examples/chem/122/ * .chem
+Example files from the classical
+.I chem
+article
+.I "CHEM \[en] A Program for Typesetting Chemical Structure Diagrams"
+[CSTR\~#122].
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+The GNU version of
+.B chem
+was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+It is based on the documentation of Brian Kernighan's original
+.I awk
+version of
+.I chem
+at
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:who/\:bwk/\:index.html
+.UE .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR \%groff (@MAN1EXT@),
+.BR \%@g@pic (@MAN1EXT@),
+.BR \%groffer (@MAN1EXT@).
+.
+.
+.P
+You can still get the original
+.UR http://\:cm.bell\-labs.com/\:netlib/\:typesetting/\:chem.gz
+chem awk source
+.UE .
+.
+Its
+.B README
+file was used for this manual page.
+.
+.
+.P
+The other classical document on
+.I chem
+is
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:122.ps.gz
+.I "CHEM \[en] A Program for Typesetting Chemical Structure Diagrams"
+[CSTR\~#122]
+.UE .
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[chem_C]
+.
+.
+.\" ====================================================================
+.\" Emacs settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/chem/chem.am b/contrib/chem/chem.am
new file mode 100644 (file)
index 0000000..89d16d9
--- /dev/null
@@ -0,0 +1,134 @@
+# Automake rules for 'chem'
+
+# File position: <groff-source>/contrib/chem/chem.am
+
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Moved to automake by Bertrand Garrigues
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of 'chem' which is part of 'groff'.
+#
+# 'groff' is free software; you can redistribute it and/or modify it
+# under the terms of the GNU General Public License (GPL) version 2 as
+# published by the Free Software Foundation.
+#
+# 'groff' 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.
+#
+# The GPL2 license text is available in the internet at
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+
+########################################################################
+
+chem_srcdir = $(top_srcdir)/contrib/chem
+prefixexecbin_SCRIPTS += chem
+
+# Files installed in $(datasubdir)/pic
+chempicdir = $(datasubdir)/pic
+dist_chempic_DATA = contrib/chem/chem.pic
+
+
+CHEM_GENEXAMPLES = contrib/chem/examples/README
+CHEM_EXAMPLES =  \
+  contrib/chem/examples/atp.chem \
+  contrib/chem/examples/cholesterin.chem \
+  contrib/chem/examples/ethamivan.chem \
+  contrib/chem/examples/lsd.chem \
+  contrib/chem/examples/morphine.chem \
+  contrib/chem/examples/penicillin.chem \
+  contrib/chem/examples/reserpine.chem
+
+if BUILD_EXAMPLES
+# Files installed in $(exampledir)/chem
+chemexampledir = $(exampledir)/chem
+nodist_chemexample_DATA = $(CHEM_GENEXAMPLES)
+dist_chemexample_DATA = $(CHEM_EXAMPLES)
+
+# Files installed in $(exampledir)/chem/122. All the .chem files in 122 are 
+# lazily installed by the local install target
+chemexample122dir = $(chemexampledir)/122
+nodist_chemexample122_DATA = contrib/chem/examples/122/README
+endif
+EXTRA_DIST += \
+  contrib/chem/ChangeLog \
+  contrib/chem/chem.1.man \
+  contrib/chem/chem.pic \
+  contrib/chem/chem.pl \
+  contrib/chem/README.txt \
+  contrib/chem/examples/README.txt \
+  contrib/chem/examples/122/README.txt
+
+man1_MANS += contrib/chem/chem.1
+MOSTLYCLEANFILES += $(CHEM_GENEXAMPLES) $(nodist_chemexample122_DATA) \
+  contrib/chem/README
+
+# This is strangly built but not installed
+all: contrib/chem/README
+
+contrib/chem/README: $(chem_srcdir)/README.txt
+       $(AM_V_GEN)$(MKDIR_P) contrib/chem/ \
+       && sed -e "s|[@]g[@]|$(g)|g" $? >$@
+
+contrib/chem/examples/README: $(chem_srcdir)/examples/README.txt
+       $(AM_V_GEN)$(MKDIR_P) contrib/chem/examples \
+       && sed -e "s|[@]g[@]|$(g)|g" $? >$@
+
+contrib/chem/examples/122/README: $(chem_srcdir)/examples/122/README.txt
+       $(AM_V_GEN)$(MKDIR_P) contrib/chem/examples/122 \
+       && sed -e "s|[@]g[@]|$(g)|g" $? >$@
+
+chem: $(chem_srcdir)/chem.pl $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f "$(SH_DEPS_SED_SCRIPT)" \
+              -e "s|[@]g[@]|$(g)|g" \
+              -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+              -e "s|[@]MACRODIR[@]|$(DESTDIR)$(tmacdir)|g" \
+              -e "s|[@]PICDIR[@]|$(DESTDIR)$(datasubdir)/pic|g" \
+              -e "s|[@]VERSION[@]|$(VERSION)|g" \
+              -e "$(SH_SCRIPT_SED_CMD)" \
+              $(chem_srcdir)/chem.pl \
+              >$@ \
+       && chmod +x $@
+
+install-data-local: install_chem_extra
+install_chem_extra:
+if BUILD_EXAMPLES
+       -test -d $(DESTDIR)$(chemexample122dir) \
+          || $(mkinstalldirs) $(DESTDIR)$(chemexample122dir);
+       for i in $(chem_srcdir)/examples/122/*.chem; do \
+         n=`echo $$i | sed 's|$(chem_srcdir)/examples/122/||g'`; \
+         $(INSTALL_DATA) $$i $(DESTDIR)$(chemexample122dir)/$$n; \
+       done
+endif
+
+uninstall-local: uninstall_chem_extra
+uninstall_chem_extra:
+if BUILD_EXAMPLES
+       $(RM) $(DESTDIR)$(exampledir)/chem/122/*
+       -rmdir $(DESTDIR)$(exampledir)/chem/122
+       $(RM) $(DESTDIR)$(exampledir)/chem/*
+       -rmdir $(DESTDIR)$(exampledir)/chem
+endif
+       -rmdir $(DESTDIR)$(datasubdir)/pic
+
+dist-hook: dist_chem
+dist_chem:
+       chmod u+w $(distdir)/contrib/chem/examples/122
+       for i in $(chem_srcdir)/examples/122/*.chem; do \
+         cp -f $$i $(distdir)/contrib/chem/examples/122; \
+       done
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/contrib/chem/chem.man b/contrib/chem/chem.man
deleted file mode 100644 (file)
index 33c0a21..0000000
+++ /dev/null
@@ -1,1008 +0,0 @@
-.TH @G@CHEM @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@chem \- groff preprocessor for producing chemical structure diagrams
-.
-.\" @g@chem.1 - man page for @g@chem (section 1).
-.\" Source file position:  <groff_source_top>/contrib/chem/chem.man
-.\" Installed position:    $prefix/share/man/man1/@g@chem.1
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2006-2014 Free Software Foundation, Inc.
-
-This file is part of chem, which is part of groff, a free software
-project.
-
-You can redistribute it and/or modify it under the terms of the GNU
-General Public License version 2 (GPL2) as published by the Free
-Software Foundation.
-
-The license text for GPL2 is available in the internet at
-.UR http://www.gnu.org/licenses/gpl-2.0.html
-.UE .
-..
-.
-.de au
-This file was written by Bernd Warken <groff-bernd.warken-72@web.de>.
-
-It is based on the documentation of Brian Kernighan's original awk
-version of chem at
-.UR http://cm.bell-labs.com/cm/cs/who/bwk/index.html
-.UE .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.\" Characters
-.\" --------------------------------------------------------------------
-.
-.\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
-.\" called with \*(EL
-.
-.\" Bullet
-.ie t .ds BU \[bu]
-.el .ds BU *
-.\" used in `.IP \*(BU 2m' (former .Topic)
-.
-.
-.\" --------------------------------------------------------------------
-.\" Macro definitions
-.
-.\" --------------------------------------------------------------------
-.\" .FONT (<font name> <text> [<font name> <text> ...])
-.\"
-.\"  in different fonts: R, I, B, CR, CI, CB
-.\"
-.de FONT
-.  if (\\n[.$] = 0) \{\
-.      \" compatibility to .ft
-.      nop \&\f[P]\&
-.      return
-.  \}
-.  ds result \&
-.  while (\\n[.$] >= 2) \{\
-.      as result \,\f[\\$1]\\$2
-.      if !"\\$1"P" .as result \f[P]
-.       \" the double-quote " after P above is now ignored in Emacs
-.      shift 2
-.  \}
-.  if (\\n[.$] = 1) .as result \,\f[\\$1]
-.\"  nh
-.  nop \\*[result]\&
-.\"  hy
-.  rm result
-..
-.
-.
-.\" End of macro definitions
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SYNOPSIS"
-.\" --------------------------------------------------------------------
-.
-.SY @g@chem
-.OP \fI\%option \*(EL\fP
-.OP \-\-
-.OP \fI\%filespec \*(EL\fP
-.YS
-.
-.SY @g@chem
-.B \-h
-|
-.B \-\-help
-.YS
-.
-.SY @g@chem
-.B \-v
-|
-.B \-\-version
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTION USAGE
-.\" --------------------------------------------------------------------
-.
-There are no other options than
-.BR \-h ,
-.BR \-\-help ,
-.BR \-v ,
-and
-.BR \%\-\-version ;
-these options provoke the printing of a version or usage information,
-respectively, and all
-.I filespec
-arguments are ignored.
-.
-A
-.I filespec
-argument is either a file name of an existing file or a minus
-character
-.BR \- ,
-meaning standard input.
-.
-If no argument is specified then standard input is taken
-automatically.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.I chem
-produces chemical structure diagrams.
-.
-Today's version is best suited for organic chemistry (bonds, rings).
-.
-The
-.B @g@chem
-program is a
-.B groff
-preprocessor like
-.BR @g@eqn ,
-.BR @g@pic ,
-.BR @g@tbl ,
-etc.
-.
-It generates
-.I pic
-output such that all
-.I chem
-parts are translated into diagrams of the
-.I pic
-language.
-.
-.
-.P
-The program
-.B @g@chem
-originates from the Perl source file
-.BR chem.pl .
-.
-It tells
-.B @g@pic
-to include a copy of the macro file
-.BR chem.pic .
-.
-Moreover the
-.I groff
-source file
-.B pic.tmac
-is loaded.
-.
-.
-.P
-In a style reminiscent of
-.I eqn
-and
-.IR pic ,
-the
-.I chem
-diagrams are written in a special language.
-.
-.
-.P
-A set of
-.I chem
-lines looks like this
-.
-.
-.IP
-.nf
-.ft B
-\&.cstart
-\fIchem data\fP
-\&.cend
-.ft
-.fi
-.
-.
-.P
-Lines containing the keywords
-.B .cstart
-and
-.B .cend
-start and end the input for
-.BR @g@chem ,
-respectively.
-.
-In
-.I pic
-context, i.e., after the call of
-.BR .PS ,
-.I chem
-input can optionally be started by the line
-.B \%begin\~chem
-and ended by the line with the single word
-.B end
-instead.
-.
-.
-.P
-Anything outside these initialization lines is copied through
-without modification;
-all data between the initialization lines is converted into
-.I pic
-commands to draw the diagram.
-.
-.
-.P
-As an example,
-.
-.IP
-.nf
-.ft B
-\&.cstart
-CH3
-bond
-CH3
-\&.cend
-.ft
-.fi
-.
-.
-.P
-prints two
-.B CH3
-groups with a bond between them.
-.
-.
-.P
-To actually view this, you must run
-.B @g@chem
-followed by
-.BR groffer :
-.
-.IP
-.B @g@chem [file \*(EL] | groffer
-.
-.P
-If you want to create just
-.B groff
-output, you must run
-.B @g@chem
-followed by
-.B groff
-with the option
-.B \-p
-for the activation of
-.BR @g@pic :
-.IP
-.B @g@chem [file \*(EL] | groff \-p \*(EL
-.
-.
-.\" --------------------------------------------------------------------
-.SH THE LANGUAGE
-.\" --------------------------------------------------------------------
-.
-The
-.I chem
-input language is rather small.  It provides rings of several styles
-and a way to glue them together as desired, bonds of several styles,
-moieties (e.g.,
-.BR C ,
-.BR NH3 ,
-\*(EL, and strings.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Setting Variables
-.\" --------------------------------------------------------------------
-.
-There are some variables that can be set by commands.
-.
-Such commands have two possible forms, either
-.
-.RS
-.P
-.I "variable value"
-.RE
-.
-.P
-or
-.
-.RS
-.P
-.IB "variable " = " value"
-.RE
-.
-.P
-This sets the given
-.I variable
-to the argument
-.IR value .
-If more arguments are given only the last argument is taken, all other
-arguments are ignored.
-.
-.
-.P
-There are only a few variables to be set by these commands:
-.
-.TP
-.BI textht " arg"
-Set the height of the text to
-.IR arg ;
-default is 0.16.
-.
-.TP
-.BI cwid " arg"
-Set the character width to
-.IR arg ;
-default is 0.12.
-.
-.TP
-.BI db " arg"
-Set the bond length to
-.IR arg ;
-default is 0.2.
-.
-.TP
-.BI size " arg"
-Scale the diagram to make it look plausible at point size
-.IR arg ;
-default is 10 point.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Bonds
-.\" --------------------------------------------------------------------
-.
-This
-.
-.RS
-.SY bond
-.RI [ direction ]
-.RI [ length\ n ]
-.RB [ from\ \c
-.IR Name | picstuff ]
-.YS
-.RE
-.
-.P
-draws a single bond in direction from nearest corner of
-.IR Name .
-.B bond
-can also be
-.BR "double bond" ,
-.BR "front bond" ,
-.BR "back bond" ,
-etc.
-.
-(We will get back to
-.I Name
-soon.)
-.
-.
-.P
-.I direction
-is the angle in degrees (0\~up, positive clockwise)
-or a direction word like
-.BR up ,
-.BR down ,
-.B sw
-(=\~southwest), etc.
-.
-If no direction is specified, the bond goes in the current direction
-(usually that of the last bond).
-.
-.
-.P
-Normally the bond begins at the last object placed;  this
-can be changed by naming a
-.B from
-place.
-.
-For instance, to make a simple alkyl chain:
-.
-.RS
-.TS
-tab (@);
-lb l.
-CH3
-bond@(this one goes right from the CH3)
-C@(at the right end of the bond)
-double bond up@(from the C)
-O@(at the end of the double bond)
-bond right from C
-CH3
-.TE
-.RE
-.
-.
-.P
-A length in inches may be specified to override the default length.
-.
-Other
-.I pic
-commands can be tacked on to the end of a bond command, to created
-dotted or dashed bonds or to specify a
-.B to
-place.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Rings
-.\" --------------------------------------------------------------------
-.
-There are lots of rings, but only 5 and 6-sided rings get
-much support.
-.
-.B ring
-by itself is a 6-sided ring;
-.B benzene
-is the benzene ring with a circle inside.
-.B aromatic
-puts a circle into any kind of ring.
-.
-.RS
-.SY ring
-.RB [ \%pointing\  ( up | right | left | down )]
-.RB [ \%aromatic ]
-.RB [ put\ Mol\ at\ \fIn\/\fP ]
-.RB [ \%double\ \c
-.IR i , j\ \c
-.IR k , l\ \c
-\*(EL
-.RI [ picstuff ]
-.YS
-.RE
-.
-.
-.P
-The vertices of a ring are numbered 1, 2, \*(EL from the
-vertex that points in the natural compass direction.
-.
-So for a hexagonal ring with the point at the top, the top vertex
-is\~1, while if the ring has a point at the east side, that is
-vertex\~1.
-.
-This is expressed as
-.
-.IP
-.ft B
-.nf
-R1: ring pointing up
-R2: ring pointing right
-.fi
-.ft
-.
-.
-.P
-The ring vertices are named
-.BR .V1 ,
-\*(EL,
-.BI .V n\fR,\fP
-with
-.B .V1
-in the pointing direction.
-.
-So the corners of
-.B R1
-are
-.B R1.V1
-(the
-.IR top ),
-.BR R1.V2 ,
-.BR R1.V3 ,
-.B R1.V4
-(the
-.IR bottom ),
-etc., whereas for
-.BR R2 ,
-.B R2.V1
-is the rightmost vertex and
-.B R2.V4
-the leftmost.
-.
-These vertex names are used for connecting bonds or other rings.  For
-example,
-.
-.IP
-.ft B
-.nf
-R1: benzene pointing right
-R2: benzene pointing right with .V6 at R1.V2
-.fi
-.ft
-.P
-creates two benzene rings connected along a side.
-.
-.
-.P
-Interior double bonds are specified as
-.BI \%double\  n1 , n2\ n3 , n4\ \fR\*(EL;\fP
-each number pair adds an interior bond.
-.
-So the alternate form of a benzene ring is
-.
-.IP
-.B "ring double 1,2 3,4 5,6"
-.
-.
-.P
-Heterocycles (rings with something other than carbon at a vertex) are
-written as
-.BI put\  X\  at\  V\fR,\fP
-as in
-.
-.IP
-.B "R: ring put N at 1 put O at 2"
-.
-.
-.P
-In this heterocycle,
-.B R.N
-and
-.B R.O
-become synonyms for
-.B R.V1
-and
-.BR R.V2 .
-.
-.
-.P
-There are two 5-sided rings.
-.
-.B ring5
-is pentagonal with a side that matches the 6-sided ring; it has four
-natural directions.
-.
-A
-.B \%flatring
-is a 5-sided ring created by chopping one corner of a 6-sided ring so
-that it exactly matches the 6-sided rings.
-.
-.
-.P
-The description of a ring has to fit on a single line.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Moieties and Strings
-.\" --------------------------------------------------------------------
-.
-A moiety is a string of characters beginning with a capital letter,
-such as N(C2H5)2.
-.
-Numbers are converted to subscripts (unless they appear to be
-fractional values, as in N2.5H).
-.
-The name of a moiety is determined from the moiety after special
-characters have been stripped out: e.g., N(C2H5)2) has the name NC2H52.
-.
-.
-.P
-Moieties can be specified in two kinds.
-.
-Normally a moiety is placed right after the last thing mentioned,
-separated by a semicolon surrounded by spaces, e.g.,
-.
-.IP
-.B "B1: bond ; OH"
-.
-.P
-Here the moiety is
-.BR OH ;
-it is set after a bond.
-.
-.
-.P
-As the second kind a moiety can be positioned as the first word in a
-.IR pic -like
-command, e.g.,
-.
-.IP
-.B "CH3 at C + (0.5,0.5)"
-.
-.P
-Here the moiety is
-.BR CH3 .
-It is placed at a position relative to
-.BR C ,
-a moiety used earlier in the chemical structure.
-.
-.
-.P
-So moiety names can be specified as
-.I chem
-positions everywhere in the
-.I chem
-code.
-.
-Beneath their printing moieties are names for places.
-.
-.
-.P
-The moiety
-.B BP
-is special.
-.
-It is not printed but just serves as a mark to be referred to in later
-.I chem
-commands.
-.
-For example,
-.
-.IP
-.B "bond ; BP"
-.
-.P
-sets a mark at the end of the bond.
-.
-This can be used then for specifying a place.
-.
-The name
-.B BP
-is derived from
-.I branch point
-(i.e., line crossing).
-.
-.
-.P
-A string within double quotes
-.B \(dq
-is interpreted as a part of a
-.I chem
-command.
-.
-It represents a string that should be printed (without the quotes).
-.
-Text within quotes \(dq\*(EL\(dq is treated more or less
-like a moiety except that no changes are made to the quoted part.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Names
-.\" --------------------------------------------------------------------
-.
-In the alkyl chain above, notice that the carbon atom
-.B C
-was used both to draw something and as the name for a place.
-.
-A moiety always defines a name for a place;  you can use
-your own names for places instead, and indeed, for rings
-you will have to.
-.
-A name is just
-.
-.IP
-.IB Name :
-\*(EL
-.
-.
-.P
-.I Name
-is often the name of a moiety like
-.BR CH3 ,
-but it need not to be.
-.
-Any name that begins with a capital letter and which contains
-only letters and numbers is valid:
-.
-.RS
-.TP
-.B First:
-.B bond
-.TQ
-\&
-.B "bond 30 from First"
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS Miscellaneous
-.\" --------------------------------------------------------------------
-.
-The specific construction
-.RS
-.TP
-.BR bond\  \*(EL " ; moiety"
-.RE
-.P
-is equivalent to
-.IP
-.ft B
-.nf
-bond
-moiety
-.fi
-.ft
-.
-.
-.P
-Otherwise, each item has to be on a separate line (and only one line).
-Note that there must be whitespace after the semicolon which separates
-the commands.
-.
-.
-.P
-A period character
-.B .\&
-or a single quote
-.B '
-in the first column of a line signals a
-.I troff
-command, which is copied through as-is.
-.
-.
-.P
-A line whose first non-blank character is a hash character
-.RB ( # )
-is treated as a comment and thus ignored.
-.
-However, hash characters within a word are kept.
-.
-.
-.P
-A line whose first word is
-.B pic
-is copied through as-is after the word
-.B pic
-has been removed.
-.
-.
-.P
-The command
-.IP
-.B size
-.I n
-.P
-scales the diagram to make it look plausible at point size\~\c
-.I n
-(default is 10\~point).
-.
-.
-.P
-Anything else is assumed to be
-.I pic
-code, which is copied through with a label.
-.
-.
-.P
-Since
-.B @g@chem
-is a
-.B @g@pic
-preprocessor, it is possible to include
-.I pic
-statements in the middle of a diagram to draw things not provided for
-by
-.I chem
-itself.
-.
-Such
-.I pic
-statements should be included in
-.I chem
-code by adding
-.B pic
-as the first word of this line for clarity.
-.
-.
-.P
-The following
-.I pic
-commands are accepted as
-.I chem
-commands, so no
-.B pic
-command word is needed:
-.
-.IP
-.B define
-Start the definition of
-.I pic
-macro within
-.IR chem .
-.
-.RS
-.TP
-.B [
-Start a block composite.
-.
-.TP
-.B ]
-End a block composite.
-.
-.TP
-.B {
-Start a macro definition block.
-.
-.TP
-.B }
-End a macro definition block.
-.RE
-.
-.P
-The macro names from
-.B define
-statements are stored and their call is accepted as a
-.I chem
-command as well.
-.
-.
-.\" --------------------------------------------------------------------
-.SS WISH LIST
-.\" --------------------------------------------------------------------
-.
-.P
-This TODO list was collected by Brian Kernighan.
-.
-.
-.P
-Error checking is minimal; errors are usually detected and reported in
-an oblique fashion by
-.IR pic .
-.
-.
-.P
-There is no library or file inclusion mechanism, and there is no
-shorthand for repetitive structures.
-.
-.
-.P
-The extension mechanism is to create
-.I pic
-macros, but these are tricky to get right and don't have all the
-properties of built-in objects.
-.
-.
-.P
-There is no in-line chemistry yet (e.g., analogous to the $\*(EL$
-construct of eqn).
-.
-.
-.P
-There is no way to control entry point for bonds on groups.
-.
-Normally a bond connects to the carbon atom if entering from
-the top or bottom and otherwise to the nearest corner.
-.
-.
-.P
-Bonds from substituted atoms on heterocycles do not join at the proper
-place without adding a bit of
-.IR pic .
-.
-.
-.P
-There is no decent primitive for brackets.
-.
-.
-.P
-Text (quoted strings) doesn't work very well.
-.
-.
-.P
-A squiggle bond is needed.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "FILES"
-.\" --------------------------------------------------------------------
-.
-.TP
-.B @DATASUBDIR@/pic/chem.pic
-A collection of
-.I pic
-macros needed by
-.BR @g@chem .
-.
-.TP
-.B @MACRODIR@/pic.tmac
-A macro file which redefines
-.B .PS
-and
-.BR .PE
-to center
-.I pic
-diagrams.
-.
-.TP
-.B @DOCDIR@/examples/chem/*.chem
-Example files for
-.IR chem .
-.
-.TP
-.B @DOCDIR@/examples/chem/122/*.chem
-Example files from the classical
-.I chem
-book
-.BR 122.ps .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "BUGS"
-.\" --------------------------------------------------------------------
-.
-Report bugs to the
-.MT bug-groff@\:gnu.org
-bug-groff mailing list
-.ME .
-.
-Include a complete, self-contained example that will allow the bug to
-be reproduced, and say which version of
-.I groff
-and
-.I chem
-you are using.
-.
-You can get both version numbers by calling
-.BR "@g@chem \-\-version" .
-.
-.
-.P
-You can also use the
-.MT groff@\:gnu.org
-groff mailing list
-.ME ,
-but you must first subscribe to this list.
-.
-You can do that by visiting the
-.UR http://\:lists.gnu.org/\:mailman/\:listinfo/\:groff
-groff mailing list web page
-.UE .
-.
-.
-.P
-See
-.BR \%groff (@MAN1EXT@)
-for information on availability.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR \%groff (@MAN1EXT@),
-.BR \%@g@pic (@MAN1EXT@),
-.BR \%groffer (@MAN1EXT@).
-.
-.
-.P
-You can still get the original
-.UR http://\:cm.bell-labs.com/\:netlib/\:typesetting/\:chem.gz
-chem awk source
-.UE .
-.
-Its
-.B README
-file was used for this manual page.
-.
-.
-.P
-The other classical document on
-.I chem
-is
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:122.ps.gz
-122.ps
-.UE .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 4ba066fc6cc33048df896950cb2b04c49a87997a..6f4ee815b2e2701039419cd3892f3f2daf21d2e3 100644 (file)
@@ -3,17 +3,17 @@
 # Source file position: <groff-source>/contrib/chem/chem.pic
 # Installed position: <prefix>/share/groff/<version>/pic
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Brian Kernighan <http://cm.bell-labs.com/cm/cs/who/bwk>,
 # modified by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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.
index 1a8b3cc797dccca49bd29535d621e978065df34d..883907b483f5d77b9df941803bed80c775dd5975 100755 (executable)
@@ -8,13 +8,13 @@
 my $Copyright = 'Copyright (C) 2006-2014 Free Software Foundation, Inc.';
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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.
@@ -57,7 +57,7 @@ my $File_pic_tmac;
 
 BEGIN {
   {
-    my $before_make;           # script before run of `make'
+    my $before_make;           # script before run of 'make'
     {
       my $at = '@';
       $before_make = 1 if '@VERSION@' eq "${at}VERSION${at}";
@@ -337,9 +337,9 @@ my $Line = '';
       return 1;
     }
     if ($line =~ /^[\.']\s*cstart\s*$/) {
-      # line: `.cstart'
+      # line: '.cstart'
       if ($is_chem) {
-       &error("additional `.cstart'; chem is already active.");
+       &error("additional '.cstart'; chem is already active.");
        return 1;
       }
       unless ($is_pic) {
@@ -352,10 +352,10 @@ my $Line = '';
     }
 ### main_line()
     if ($line =~ /^\s*begin\s+chem\s*$/) {
-      # line: `begin chem'
+      # line: 'begin chem'
       if ($is_pic) {
        if ($is_chem) {
-         &error("additional `begin chem'; chem is already active.");
+         &error("additional 'begin chem'; chem is already active.");
          return 1;
        }
        $is_chem = 'begin chem';
@@ -366,9 +366,9 @@ my $Line = '';
       return 1;
     }
     if ($line =~ /^[\.']\s*cend\s*/) {
-      # line `.cend'
+      # line '.cend'
       if ($is_chem) {
-       &error("you end chem with `.cend', but started it with `begin chem'.")
+       &error("you end chem with '.cend', but started it with 'begin chem'.")
          if $is_chem eq 'begin chem';
        if ($is_pic eq 'by chem') {
          &print_pe();
@@ -381,9 +381,9 @@ my $Line = '';
       return 1;
     }
     if ($line =~ /^\s*end\s*$/) {
-      # line: `end'
+      # line: 'end'
       if ($is_chem) {
-       &error("you end chem with `end', but started it with `.cstart'.")
+       &error("you end chem with 'end', but started it with '.cstart'.")
          if $is_chem eq '.cstart';
        if ($is_pic eq 'by chem') {
          &print_pe();
@@ -421,10 +421,10 @@ my $Line = '';
 
     if ($Words[0] eq 'textht') {
       if ($#Words == 0) {
-       &error("`textht' needs a single argument.");
+       &error("'textht' needs a single argument.");
        return 0;
       }
-      &error("only the last argument is taken for `textht', " .
+      &error("only the last argument is taken for 'textht', " .
             "all others are ignored.")
        unless $#Words <= 1 or ($#Words == 2 && $Words[1] =~ /^=/);
       $Params{'textht'} = $Words[$#Words];
@@ -433,10 +433,10 @@ my $Line = '';
 ### main_line()
     if ($Words[0] eq 'cwid') { # character width
       if ($#Words == 0) {
-       &error("`cwid' needs a single argument.");
+       &error("'cwid' needs a single argument.");
        return 0;
       }
-      &error("only the last argument is taken for `cwid', " .
+      &error("only the last argument is taken for 'cwid', " .
             "all others are ignored.")
        unless $#Words <= 1 or ($#Words == 2 && $Words[1] =~ /^=/);
       $Params{'cwid'} = $Words[$#Words];
@@ -444,10 +444,10 @@ my $Line = '';
     }
     if ($Words[0] eq 'db') {   # bond length
       if ($#Words == 0) {
-       &error("`db' needs a single argument.");
+       &error("'db' needs a single argument.");
        return 0;
       }
-      &error("only the last argument is taken for `db', " .
+      &error("only the last argument is taken for 'db', " .
             "all others are ignored.")
        unless $#Words <= 1 or ($#Words == 2 && $Words[1] =~ /^=/);
       $Params{'db'} = $Words[$#Words];
@@ -456,10 +456,10 @@ my $Line = '';
     if ($Words[0] eq 'size') { # size for all parts of the whole diagram
       my $size;
       if ($#Words == 0) {
-       &error("`size' needs a single argument.");
+       &error("'size' needs a single argument.");
        return 0;
       }
-      &error("only the last argument is taken for `size', " .
+      &error("only the last argument is taken for 'size', " .
             "all others are ignored.")
        unless $#Words <= 1 or ($#Words == 2 && $Words[1] =~ /^=/);
       if ($Words[$#Words] <= 4) {
@@ -578,7 +578,7 @@ my $Line = '';
     return 1 unless $line;
 #    print STDERR "# $Line\n";
 #    &error('This is not a chem command.  To include a command for pic, ' .
-#         "add `pic' as the first word to the command.");
+#           "add 'pic' as the first word to the command.");
     print $line, "\n";
     $Last_Type = $Types{'OTHER'};
     1;
@@ -636,7 +636,7 @@ sub bond {
   $moiety = '';
   for ($i = 1; $i <= $#Words; $i++) {
     if ($Words[$i] eq ';') {
-      &error("a colon `;' must be followed by a space and a single word.")
+      &error("a colon ';' must be followed by a space and a single word.")
        if $i != $#Words - 1;
       $moiety = $Words[$i + 1] if $#Words > $i;
       $#Words = $i - 1;
index fc4e9ae2405a89b230cb9b07d44de7e1ac375b03..4030a59fcce9da90a0675659dd52f2b5d55fbf59 100644 (file)
@@ -1,4 +1,4 @@
-This directory contains the examples for the `chem' language written
+This directory contains the examples for the 'chem' language written
 in the book:
 
     Computing Science Technical Report No. 122
@@ -8,60 +8,60 @@ in the book:
 The book is available in the internet at
 <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-Many of the examples had to be fixed.  Unfortunately, the `chem' akw
+Many of the examples had to be fixed.  Unfortunately, the 'chem' akw
 version does not run on many of these programs.  But the Perl version
-of `chem' works on all examples.
+of 'chem' works on all examples.
 
 Most examples do not use the modern chemical display.  They have C
 atoms added, whereas the modern method omits all C atoms and their
 directly appended H atoms.
 
 The examples are named and sorted by the chapter where they are found
-in the book.  For example, the file `ch4c_colon.chem' means a `chem'
-example in chapter 4; according to `c', it is the third example in
-this chapter; the name `colon' is used to describe the context of the
+in the book.  For example, the file 'ch4c_colon.chem' means a 'chem'
+example in chapter 4; according to 'c', it is the third example in
+this chapter; the name 'colon' is used to describe the context of the
 example.
 
 You can view the graphical display of the examples by calling
 
     groffer <file>
 
-`groffer' calls `chem' automatically.
+'groffer' calls 'chem' automatically.
 
 If you want to transform example files to a different format use the
-`roff2*' programs:
+'roff2*' programs:
 
-`roff2dvi' prints dvi format to standard output,
-`roff2html' generates html output,
-`roff2pdf' outputs pdf mode,
-`roff2ps' produces PostScript output,
-`roff2text' generates text output in the groff device `latin1',
-`roff2x' prints the output  in  the  groff  device  X  that  is
-         suitable  for programs  like `gxditview' or `xditview'.
+'roff2dvi' prints dvi format to standard output,
+'roff2html' generates html output,
+'roff2pdf' outputs pdf mode,
+'roff2ps' produces PostScript output,
+'roff2text' generates text output in the groff device 'latin1',
+'roff2x' prints the output  in  the  groff  device  X  that  is
+         suitable  for programs  like 'gxditview' or 'xditview'.
 
-To get a suitable `groff' output run
+To get a suitable 'groff' output run
 
     @g@chem <file> | groff -p ...
 
 
 ####### License
 
-Copyright (C) 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 2006-2018 Free Software Foundation, Inc.
 Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-This file is part of `chem', which is part of `groff'.
+This file is part of 'chem', which is part of 'groff'.
 
-`groff' is free software; you can redistribute it and/or modify it
+'groff' is free software; you can redistribute it and/or modify it
 under the terms of the GNU General Public License (GPL) version 2 as
 published by the Free Software Foundation.
 
-`groff' is distributed in the hope that it will be useful, but WITHOUT
+'groff' 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 The GPL2 license text is available in the internet at
 <http://www.gnu.org/licenses/gpl-2.0.html>.
index 2a32514da0b15e0d2b5344fdb07f4c45d3acb9b6..c0f0c2c73e1755b1ce02ae93a38b1a0078a67f0f 100644 (file)
@@ -2,28 +2,28 @@ ch2a_ethyl.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 1eacbc22033a5bb568025f3b1bbbe4dd0c75401a..0342d1fe2ec91cf9486cd10d012eba3ea75a2afa 100644 (file)
@@ -2,28 +2,28 @@ ch2b_benzene.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 463e67e00f60dd91216fcac7697e8b4132881170..5026ef64f8b55d04b60ced337d5f4ba2ef721b15 100644 (file)
@@ -2,26 +2,26 @@ ch2c_benzene_right.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 1964b02031f979ade2c85d26f56795f85504d2fd..732cbad47f79560e818e67d9370210115a877cf7 100644 (file)
@@ -2,28 +2,28 @@ ch4a_stick.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index ae44bd12aa19d70f6cd2ddbe9020b8732ad47187..cd5be9d59e4433bee4a64c87b65438f28ac1c872 100644 (file)
@@ -2,28 +2,28 @@ ch4b_methyl_acetate.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index cdf7927244d91e37458709691200e684dd1f3323..db50c031cbbde15ba6cdf67b0d8143e41d8ccd57 100644 (file)
@@ -2,28 +2,28 @@ ch4c_colon.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index b1bb1120d5560c997416549439146bddd622e285..71e4f880cf4eecb8b4450f6af916c782869055f4 100644 (file)
@@ -2,28 +2,28 @@ ch4d_HCl.H2O.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index f76ea379008e722e0f77a384d2764d390972b5d1..1f820c056b4bc1199f5dd5c4322a6a5f53a356cb 100644 (file)
@@ -2,28 +2,28 @@ ch4e_CaSO4.2H2O.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index c44b6a50362c4cf4f008705299c375b3442cfe6b..9b749c0d8e80f30c2a1e201f4b09a93e397d414f 100644 (file)
@@ -2,28 +2,28 @@ ch4f_C.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index f500e0ed6725a6265b2ec091eb4dc74f0e358a35..41b85823699883eabde570634f0335100b940aae 100644 (file)
@@ -2,28 +2,28 @@ ch4g_BP.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 7e34fdaeef1affe82370664526b282bc3d809215..63c90abe20bc92e33ea903f7c305c21298c43351 100644 (file)
@@ -2,28 +2,28 @@ ch4h_methacrylate.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 7641aa18ae9cd22d8d1e680db2597b493d46cb89..b4b8888de420c57a05191f86a2f68e0125e03780 100644 (file)
@@ -2,28 +2,28 @@ ch4i_cyclo.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 0b69348e5ff2a60d0f4cbf7bb561f722032e84eb..fcd94ad491cc175649e356811054f85e5b1c5749 100644 (file)
@@ -2,28 +2,28 @@ ch4j_ring4.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 14baafe5591e1c3e7a50858a05764ac29d4b31be..c51a52196c46be24209104de7516ab99adcf7fde 100644 (file)
@@ -2,28 +2,28 @@ ch4k_ring3.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 1594f4c8bf4f3249257674f65d258f76dcf1da7b..08f17682946da470a6c1ac9e168e4871d416bd59 100644 (file)
@@ -2,28 +2,28 @@ ch4l_vertex.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index c7b3da7a1e176615d4403ce6d0b0f09c33dd1a0f..e1202a82a3550e2b16c86f091a2e651cf999eecf 100644 (file)
@@ -2,28 +2,28 @@ ch4m_double.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 82ce6fb602336007b144f4ace700f8d5f74538bd..e622c46427cc527a1c547d2f1425578de2c0aff5 100644 (file)
@@ -2,28 +2,28 @@ ch4n_triple.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 2da5d25e29382653ec3ed73cd8146502e6942531..919f84cfeb8f4f568b22d7a25c866236f4666757 100644 (file)
@@ -2,26 +2,26 @@ ch4o_aromatic.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 8f2d112afd309dd478a92da443ab1ceacbf76dd6..717481f757f662df5b57907390fbfea1a98f09a3 100644 (file)
@@ -2,28 +2,28 @@ ch4p_cholestanol.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 0d4194356b9d4dd9e1a10cd48b0919353af7b34a..3bbf3e0d2415577c047046b9c84fae23d3df1d20 100644 (file)
@@ -2,28 +2,28 @@ ch4q_rings.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index e7df61420b7e3068ec9f29278fd3251dfba26d7d..a98509b974465a929966e7d47f0782b113ddd2c7 100644 (file)
@@ -2,28 +2,28 @@ ch4r_spiro.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 2a31aebe24e6cd92fa87bb8b3cbe66b3845bb107..13f935e672a977e5f97cf83ea425382bb0c3fde4 100644 (file)
@@ -2,28 +2,28 @@ ch4s_heteroatoms.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index ad79e0d805a57c1d923896c3c96ad32547889e61..7a50d82b420f3b4ce466b4616c6f78013ae82609 100644 (file)
@@ -2,28 +2,28 @@ ch4t_polycyclic.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 268128a4230ea0b9da0d1e531074a89ab9e28594..ee37e19da1cb2fe43b7b35cf999a8688a4724c1c 100644 (file)
@@ -2,28 +2,28 @@ ch4u_nicotine.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index a5b61c1940557feaef26304ee7a5dbd667fe10d5..b8cea2737239c221c2a9308f77ec6f42d4791fb0 100644 (file)
@@ -2,28 +2,28 @@ ch4v_histidine.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 0aa694109cba413dfb5e5907e7b11c2baea854da..cca2e128b659e78550d0566ead7fd0dc862a930d 100644 (file)
@@ -2,28 +2,28 @@ ch4w_lsd.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index ad0e57d5edb212401e99950919929a1510f8cb6f..a729a03d31e52b67ada768ff8f3829899c6a9613 100644 (file)
@@ -2,28 +2,28 @@ ch4x_anisole.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 2f6e41e10ccc4dc3b90d968a3317fc726928f1a1..4ff18fc3f6659cd3bdef5bc2dfb40dbd54d84cd5 100644 (file)
@@ -2,7 +2,7 @@ ch4y_reserpine.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
@@ -10,21 +10,21 @@ ch4y_reserpine.chem:
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 # Some corrections were added.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 7d0c4a23309d47ce7e3dba7407c61d58d0fc2a0f..685fc30086f396fedb35631eb774bdf55713d657 100644 (file)
@@ -5,7 +5,7 @@ delim $$
 .EN
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
@@ -13,21 +13,21 @@ delim $$
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 # Some corrections were added.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 215d219ba096c437595fee4e7b31b1598df3acbc..43971277530131284f64f160f4d81da3f6db2ed4 100644 (file)
@@ -2,28 +2,28 @@ ch4z2_text.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index be3f8c0d2fd0acd8e4cb9cc00daed2b7f35af3d1..5eeca02d2b2d3638834bf796edf0a54e0e007556 100644 (file)
@@ -2,28 +2,28 @@ ch5a_size.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index bbb6a7cb41b20b7bc286d4f525015c313f93bf0d..4351b0026b312db5207f44ef132544a8ea3b579c 100644 (file)
@@ -2,28 +2,28 @@ ch6a_pic.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 2fc25e528f8651317cf6e19e93b228e564bc82ad..73709b046017cd178658faae24bf82f848ec361a 100644 (file)
@@ -2,28 +2,28 @@ ch6b_dna.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 5e0a84986fc6c93b16868d10ce78ead14bc879cc..995fba438bb6b8f4e9a5aadae49fa0a764b60c5c 100644 (file)
@@ -2,28 +2,28 @@ chAa_polymer.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 26b4386547493914aee4479d3e4ea71692d62271..a7aa46cb933cf3541bd354a66ddc6b1b2585d04a 100644 (file)
@@ -2,28 +2,28 @@ chAb_vinyl_chloro.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 39e3d779303483ba4f6b50d2617f530c1cc8a971..5d43cdb2e5566ba96152eb8cf7d4da163b99a309 100644 (file)
@@ -2,28 +2,28 @@ chAc_morphine.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 5595474390eb5b4d7aa4f3eef362ca3731d503da..40e9fa21ce766076d20c96e37d308f617fb1b193 100644 (file)
@@ -2,28 +2,28 @@ chAd_chlorophyll.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 3e7d6683daa920d4cb7d552618f39334747aa157..30612a37a4f74d51a213a0b5c38efad067986454 100644 (file)
@@ -2,28 +2,28 @@ chAe_chair.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index a26584fefc2f0558dd5043a7f1238ff87da28765..83685b8645c368e8d5146b8fad936aa17d75245f 100644 (file)
@@ -5,28 +5,28 @@ delim $$
 .EN
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 90a612418b61d0afa14bddfc9d2eda0dd138dda0..6c702267d2b87d9f7dcf4563fc65bb731f4a08a1 100644 (file)
@@ -2,28 +2,28 @@ chAg_circle.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 0bda3c8f40b8d6a7b781280ba649f1e979c07aad..3db3581f0c984d3973fb24ee1dbe30a6b86a3c81 100644 (file)
@@ -5,28 +5,28 @@ delim $$
 .EN
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index f99679e4faf7985d5736e32be718d6dd27667090..71f9c6ad3e80c0c511ad3dc922792581757bfbbd 100644 (file)
@@ -3,28 +3,28 @@ chAi_poly_vinyl_chloride.chem:
 .ps -2
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 6e1af6ea7847b51a1b06b29624e63569bc79d7e6..db0e2da25e43d25201c1045b767b3d1d299e8abd 100644 (file)
@@ -2,28 +2,28 @@ chBa_jump.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 30ee3567b5186f157abde68a07e1ecdba597307d..acb02fc3d12a5423e1ddd802dc3fd817045bdac9 100644 (file)
@@ -2,28 +2,28 @@ chBb_bonds.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index 5e1dca4ebcfd5eb62a9ed8aaef4cd137fa68448b..c04623d02438d2196a12959d6ff41815ba1c3048 100644 (file)
@@ -2,28 +2,28 @@ chBc_rings.chem:
 .br
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 
 # This originates from Computing Science Technical Report No. 122
 #   CHEM - A Program for Typesetting Chemical Diagrams: User Manual
 #   by Jon L. Bentley, Lynn W. Jelinski, Brian W. Kernighan
 #   <http://cm.bell-labs.com/cm/cs/cstr/122.ps.gz>.
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index cd5a3ad2cf74f83ff2711de8dd9423a0195ea0a7..d00130e7a6f2c2cc230442ee10289f07042d2d65 100644 (file)
@@ -1,23 +1,23 @@
-This directory contains examples for the `chem' language.
+This directory contains examples for the 'chem' language.
 
 You can view the graphical display of the examples by calling
 
     groffer <file>
 
-`groffer' calls `chem' automatically.
+'groffer' calls 'chem' automatically.
 
 If you want to transform example files to a different format use the
-`roff2*' programs:
+'roff2*' programs:
 
-`roff2dvi' prints dvi format to standard output,
-`roff2html' generates html output,
-`roff2pdf' outputs pdf mode,
-`roff2ps' produces PostScript output,
-`roff2text' generates text output in the groff device `latin1',
-`roff2x' prints the output  in  the  groff  device  X  that  is
-         suitable  for programs  like `gxditview' or `xditview'.
+'roff2dvi' prints dvi format to standard output,
+'roff2html' generates html output,
+'roff2pdf' outputs pdf mode,
+'roff2ps' produces PostScript output,
+'roff2text' generates text output in the groff device 'latin1',
+'roff2x' prints the output  in  the  groff  device  X  that  is
+         suitable  for programs  like 'gxditview' or 'xditview'.
 
-To get a suitable `groff' output run
+To get a suitable 'groff' output run
 
     @g@chem <file> | groff -p ...
 
@@ -37,17 +37,17 @@ chemically.
 
 ####### License
 
-Copyright (C) 2006-2014 Free Software Foundation, Inc.
+Copyright (C) 2006-2018 Free Software Foundation, Inc.
 Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-This file is part of `chem', which is part of `groff'.
+This file is part of 'chem', which is part of 'groff'.
 
-`groff' is free software; you can redistribute it and/or modify it
+'groff' 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 3 of the License, or
 (at your option) any later version.
 
-`groff' is distributed in the hope that it will be useful, but WITHOUT
+'groff' 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.
index e2a4f7a9f4b1708bc21ff5c73a7dc77ffb09416e..dbc59f4281d628824c9cc100f2e431f6d2be193c 100644 (file)
@@ -1,7 +1,7 @@
 atp.chem:
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 #   ATP or C10_H16_N5_O13_P3 or
 #   [[[5-(6-aminopurin-9-yl)-3,4-dihydroxy-oxolan-2-yl]methoxy-hydroxy-
 #     phosphoryl]oxy-hydroxy-phosphoryl]oxyphosphonic acid
@@ -11,16 +11,16 @@ atp.chem:
 # Source file position: <groff-source>/contrib/chem/example/atp.chem
 # Installed position: <prefix>/share/doc/groff/example/chem/atp.chem
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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.
index 7e4416702336cb08206ae6834475bcf66a815c0a..d5dd046ec56e285e78a52bfda21145f62bfe5f4f 100644 (file)
@@ -1,7 +1,7 @@
 cholesterin.chem:
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 #   Cholesterin or C27_H46O or
 #   10,13-dimethyl-17-(6-methylheptan-2-yl)-2,3,4,5,6,9,11,12,14,15,16,17-
 #     dodecahydro-1H-cyclopenta[a]phenanthren-3-ol
@@ -9,22 +9,22 @@ cholesterin.chem:
 # Source file position: <groff-source>/contrib/chem/example/cholesterin.p
 # Installed position: <prefix>/share/doc/groff/example/chem/cholesterin.p
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 R1:    ring6
        bond -120 ; HO
index 47d9799893fea4f5c3db6294cb3b10e04cee4309..4de4c15e2fb886fa53c875c6cdb59d6cf550267f 100644 (file)
@@ -1,23 +1,23 @@
 ethamivan.chem:
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 #   Ethamivan or Analepticon or C12_H17_N_O3 or
 #   N,N-diethyl-4-hydroxy-3-methoxy-benzamide
 
 # Source file position: <groff-source>/contrib/chem/example/ethamivan.chem
 # Installed position: <prefix>/share/doc/groff/example/chem/ethamivan.chem
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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.
index 92f6272bedbf9deb388057f0dffc7c5899aded59..2f23dd8e90a2ed781be1eb4e4f23ff01ee9e82f0 100644 (file)
@@ -1,29 +1,29 @@
 lsd.chem:
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 #   LSD or Lysergic acid dethylamide or C20_H25_N3O or
 #   9,10-Didehydro-N,N-diethyl-6-methyl-ergoline-8-beta-carboxamide
 
 # Source file position: <groff-source>/contrib/chem/example/lsd.p
 # Installed position: <prefix>/share/doc/groff/example/chem/lsd.p
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 F:     flatring5 pointing left put N at 5 double 3,4
        H below F.N
index 67a72c939db5bff90df9a144bc937b72fd26c63e..e994ead16e014f5e9347d12158c5bec3b50e86ed 100644 (file)
@@ -1,7 +1,7 @@
 morphine.chem:
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 #    Morphine or C23_H31_N3O or
 #    N,N-diethyl-N'-(2-methoxyacridin-9-yl)-pentane-1,4-diamine
 
@@ -10,22 +10,22 @@ morphine.chem:
 # Source file position: <groff-source>/contrib/chem/example/morphine.chem
 # Installed position: <prefix>/share/doc/groff/example/chem/morphine.chem
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index f2d6607f1ccba66ba93c5ced9be56ca32fa79e06..afe27868d61dc5d47373ac9f5c37c1e2a45280f1 100644 (file)
@@ -1,7 +1,7 @@
 penicillin.chem:
 .cstart
 
-# Example file for `chem':
+# Example file for 'chem':
 #    Penicillin or C16_H18_N2_O4_S or
 #    3,3-dimethyl-6-oxo-7-(2-phenylacetyl)amino-2-thia-5-
 #      azabicyclo[3.2.0]heptane-4-carboxylic acid
@@ -11,22 +11,22 @@ penicillin.chem:
 # Source file position: <groff-source>/contrib/chem/example/morphine.chem
 # Installed position: <prefix>/share/doc/groff/example/chem/morphine.chem
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
index b6e4e92ce57ab2771c927469efdc2ee2c0d2e0b5..188ac9c728e3ed199f9ef52e8f1ae47f3f328938 100644 (file)
@@ -2,28 +2,28 @@ reserpine.chem:
 .PS
 begin chem
 
-# Example file for `chem':
+# Example file for 'chem':
 #   Reserpine or C33H40N2O9
 
 # Source file position: <groff-source>/contrib/chem/example/reserpine.chem
 # Installed position: <prefix>/share/doc/groff/example/chem/reserpine.chem
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `chem', which is part of `groff'.
+# This file is part of 'chem', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) version 2 as
 # published by the Free Software Foundation.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # The GPL2 license text is available in the internet at
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
diff --git a/contrib/eqn2graph/Makefile.sub b/contrib/eqn2graph/Makefile.sub
deleted file mode 100644 (file)
index 8f3a4b7..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright (C) 2002-2014
-#   Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-MAN1=eqn2graph.n
-MOSTLYCLEANADD=eqn2graph
-RM=rm -f
-
-all: eqn2graph
-
-eqn2graph: eqn2graph.sh
-       sed -e "s|@g@|$(g)|g" \
-           -e "s|@VERSION@|$(version)$(revision)|" \
-           -e $(SH_SCRIPT_SED_CMD) $(srcdir)/eqn2graph.sh >$@
-       chmod +x $@
-
-install_data: eqn2graph
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       $(RM) $(DESTDIR)$(bindir)/eqn2graph
-       $(INSTALL_SCRIPT) eqn2graph $(DESTDIR)$(bindir)/eqn2graph
-
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/eqn2graph
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/contrib/eqn2graph/eqn2graph.1.man b/contrib/eqn2graph/eqn2graph.1.man
new file mode 100644 (file)
index 0000000..8113227
--- /dev/null
@@ -0,0 +1,158 @@
+.TH EQN2GRAPH @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+eqn2graph \- convert an EQN equation into a cropped image
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" This documentation is released to the public domain.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY eqn2graph
+.OP \-format output-format
+.RI [ convert-arguments ]
+.YS
+.
+.SY eqn2graph
+.B \-\-help
+.YS
+.
+.SY eqn2graph
+.B \-v
+.SY eqn2graph
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I eqn2graph
+reads a one-line
+.IR @g@eqn (@MAN1EXT@)
+equation from the standard input and writes an image file,
+by default in Portable Network Graphics (PNG) format,
+to the standard output.
+.
+.
+.PP
+The input EQN code should
+.I not
+be preceded by the
+.B \&.EQ
+macro that normally precedes it within
+.IR groff (@MAN1EXT@)
+macros;
+nor do you need to have dollar-sign or other delimiters around the
+equation.
+.
+.
+.\" FIXME: How old?  This text hasn't been touched since 2008 at latest.
+.\" Older versions of
+.\" .I \%convert
+.\" will produce a black-on-white graphic; newer ones may produce a
+.\" black-on-transparent graphic.
+.
+.PP
+Arguments not recognized by
+.I eqn2graph
+are passed to the ImageMagick or GraphicsMagick program
+.IR \%convert (1).
+.
+.
+By specifying these, you can give your image a border,
+.\" Transparent backgrounds are the default in 2018.
+.\" force the background transparent,
+set the image's pixel density,
+or perform other useful transformations.
+.
+.
+.PP
+The output image is clipped using
+.IR \%convert 's
+.B \-trim
+option to the smallest possible bounding box that contains all the black
+pixels.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.TP
+.BI "\-format " output-format
+Write the image in
+.IR output-format ,
+which must be understood by
+.IR \%convert ;
+the default is PNG.
+.
+.
+.TP
+.B \-\-help
+Display a usage message and exit.
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Display version information and exit.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I \%GROFF_TMPDIR
+.TQ
+.I \%TMPDIR
+.TQ
+.I TMP
+.TQ
+.I TEMP
+These environment variables are searched in the given order to determine
+the directory where temporary files will be created.
+.
+If none are set,
+.I /tmp
+is used.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+.I eqn2graph
+was written by
+.MT esr@\:thyrsus.com
+Eric S.\& Raymond
+.ME ,
+based on a recipe for
+.IR pic2graph (@MAN1EXT@),
+by W.\& Richard Stevens.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR pic2graph (@MAN1EXT@),
+.IR grap2graph (@MAN1EXT@),
+.IR @g@eqn (@MAN1EXT@),
+.IR groff (@MAN1EXT@),
+.IR \%convert (1)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/eqn2graph/eqn2graph.am b/contrib/eqn2graph/eqn2graph.am
new file mode 100644 (file)
index 0000000..79a8ad1
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+# eqn2graph.am
+#
+
+eqn2graph_srcdir = $(top_srcdir)/contrib/eqn2graph
+bin_SCRIPTS += eqn2graph
+man1_MANS += contrib/eqn2graph/eqn2graph.1
+EXTRA_DIST += \
+  contrib/eqn2graph/eqn2graph.1.man \
+  contrib/eqn2graph/eqn2graph.sh
+
+eqn2graph: $(top_srcdir)/contrib/eqn2graph/eqn2graph.sh
+       $(AM_V_GEN)sed -e "s|[@]g[@]|$(g)|g" \
+           -e "s|[@]VERSION[@]|$(VERSION)|" \
+           -e $(SH_SCRIPT_SED_CMD) $(eqn2graph_srcdir)/eqn2graph.sh \
+           >$@ \
+       && chmod +x $@
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/contrib/eqn2graph/eqn2graph.man b/contrib/eqn2graph/eqn2graph.man
deleted file mode 100644 (file)
index 8d56768..0000000
+++ /dev/null
@@ -1,183 +0,0 @@
-.TH EQN2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-eqn2graph \- convert an EQN equation into a cropped image
-.
-.
-.\" This documentation is released to the public domain.
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B eqn2graph
-[
-.B \-unsafe
-]
-[
-.BI \-format\  fmt
-]
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-Reads an EQN equation (one line) as input; produces an image
-file (by default in Portable Network Graphics format) suitable for the
-Web as output.
-.
-.
-.P
-Your input EQN code should
-.I not
-have the \&.EQ/.EN preamble that normally precedes it within
-.BR groff (@MAN1EXT@)
-macros; nor do you need to have dollar-sign or other delimiters
-around the equation.
-.
-.
-.P
-The output image will be clipped to the smallest possible bounding box
-that contains all the black pixels.
-.
-Older versions of
-.BR convert (1)
-will produce a black-on-white graphic; newer ones may produce a
-black-on-transparent graphic.
-.
-By specifying command-line options to be passed to
-.BR convert (1)
-you can give it a border, force the background transparent, set the
-image's pixel density, or perform other useful transformations.
-.
-.
-.P
-This program uses
-.BR @g@eqn (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-and the ImageMagick
-.BR convert (1)
-program.
-.
-These programs must be installed on your system and accessible on your
-$PATH for
-.B eqn2graph
-to work.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.B \-unsafe
-Run
-.BR groff (@MAN1EXT@)
-in the `unsafe' mode enabling the PIC macro
-.B sh
-to execute arbitrary commands.
-.
-The default is to forbid this.
-.
-.TP
-.BI \-format\  fmt
-Specify an output format; the default is PNG (Portable Network Graphics).
-.
-Any format that
-.BR convert (1)
-can emit is supported.
-.
-.
-.PP
-Command-line switches and arguments not listed above are passed to
-.BR convert (1).
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'\fB@MACRODIR@/eqnrc'u+2n
-.B @MACRODIR@/eqnrc
-The
-.BR @g@eqn (@MAN1EXT@)
-initialization file.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.B GROFF_TMPDIR
-The directory in which temporary files will be created.
-.
-If this is not set
-.B eqn2graph
-searches the environment variables
-.BR \%TMPDIR ,
-.BR TMP ,
-and
-.B TEMP
-(in that order).
-.
-Otherwise, temporary files will be created in
-.BR /tmp .
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-Due to changes in the behavior of ImageMagick
-.BR convert (1)
-that are both forward and backward-incompatible,
-mismatches between your
-.B eqn2graph
-and
-.BR convert (1)
-versions may produce zero-sized or untrimmed output images.
-.
-For this version of
-.B eqn2graph
-you will need a version of
-.BR convert (1)
-that supports the
-.B \-trim
-option; older versions of
-.B eqn2graph
-used
-.BR \-crop\~0x0 ,
-which no longer has trimming behavior.
-.
-.
-.\" --------------------------------------------------------------------
-.ad l
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR pic2graph (@MAN1EXT@),
-.BR grap2graph (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR gs (1),
-.BR convert (1).
-.
-.
-.SH AUTHORS
-Eric S.\& Raymond <esr@thyrsus.com>.
-.
-This documentation is released to the public domain.
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index ee7cc5f8962efafa8b79de822ef9fd88860646b2..3e9c374863834df2d0e94cebbfd83a9e058e6a98 100644 (file)
@@ -7,8 +7,7 @@
 # In Unixland, the magic is in knowing what to string together...
 #
 # Take an eqn equation on stdin, emit cropped bitmap on stdout.
-# The pic markup should *not* be wrapped in .EQ/.EN, this script will do that.
-# A -U option on the command line enables gpic/groff "unsafe" mode.
+# The eqn markup should *not* be wrapped in .EQ/.EN, this script will do that.
 # A -format FOO option changes the image output format to any format
 # supported by convert(1).  All other options are passed to convert(1).
 # The default format is PNG.
 #
 # 1. None of the options of eqn(1) are relevant.
 #
-# 2. Only the -U option of groff(1) is relevant.
-#
-# 3. Many options of convert(1) are potentially relevant, (especially 
+# 2. Many options of convert(1) are potentially relevant, (especially
 # -density, -interlace, -transparency, -border, and -comment).
 #
-# Thus, we pass -U to groff(1), and everything else to convert(1).
+# Thus, we pass everything except -format to convert(1).
 #
-groff_opts=""
 convert_opts=""
+convert_trim_arg="-trim"
 format="png"
 
 while [ "$1" ]
 do
     case $1 in
-    -unsafe)
-       groff_opts="-U";;
     -format)
        format=$2
        shift;;
@@ -58,22 +53,45 @@ done
 
 # create temporary directory
 tmp=
-for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
-    test -z "$d" && continue
+for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp
+do
+    test -n "$d" && break
+done
+
+if ! test -d "$d"
+then
+    echo "$0: error: temporary directory \"$d\" does not exist or is" \
+        "not a directory" >&2
+    exit 1
+fi
+
+if ! tmp=`(umask 077 && mktemp -d -q "$d/eqn2graph-XXXXXX") 2> /dev/null`
+then
+    # mktemp failed--not installed or is a version that doesn't support those
+    # flags?  Fall back to older method which uses more predictable naming.
+    #
+    # $RANDOM is a Bashism.  The fallback of $PPID is not good pseudorandomness,
+    # but is supported by the stripped-down dash shell, for instance.
+    tmp="$d/eqn2graph$$-${RANDOM:-$PPID}"
+    (umask 077 && mkdir "$tmp") 2> /dev/null
+fi
 
-    tmp=`(umask 077 && mktemp -d -q "$d/eqn2graph-XXXXXX") 2> /dev/null` \
-    && test -n "$tmp" && test -d "$tmp" \
-    && break
+if ! test -d "$tmp"
+then
+    echo "$0: error: cannot create temporary directory \"$tmp\"" >&2
+    exit 1
+fi
 
-    tmp=$d/eqn2graph$$-$RANDOM
-    (umask 077 && mkdir $tmp) 2> /dev/null && break
-done;
-if test -z "$tmp"; then
-    echo "$0: cannot create temporary directory" >&2
-    { (exit 1); exit 1; }
+# See if the installed version of convert(1) is new enough to support the -trim
+# option.  Versions that didn't were described as "old" as early as 2008.
+is_convert_recent=`convert -help | grep -e -trim`
+if test -z "$is_convert_recent"
+then
+    echo "$0: warning: falling back to old '-crop 0x0' trim method" >&2
+    convert_trim_arg="-crop 0x0"
 fi
 
-trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' EXIT INT TERM
+trap 'exit_status=$?; rm -rf "$tmp" && exit $exit_status' EXIT INT TERM
 
 # Here goes:
 # 1. Add .EQ/.EN.
@@ -82,8 +100,9 @@ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' EXIT INT TERM
 # 4. Use convert(1) to crop the Postscript and turn it into a bitmap.
 read equation
 (echo ".EQ"; echo 'delim $$'; echo ".EN"; echo '$'"$equation"'$') | \
-       groff -e $groff_opts -Tps -P-pletter > $tmp/eqn2graph.ps \
-       && convert -trim $convert_opts $tmp/eqn2graph.ps $tmp/eqn2graph.$format \
-       && cat $tmp/eqn2graph.$format
+       groff -e -Tps -P-pletter > "$tmp"/eqn2graph.ps \
+       && convert $convert_trim_arg $convert_opts "$tmp"/eqn2graph.ps \
+          "$tmp"/eqn2graph.$format \
+       && cat "$tmp"/eqn2graph.$format
 
 # End
index 8d9e245884dac4b4573bd89d197e6b304e1fd4ba..5237cd4950fb238a9c6a87104e02112f66e18aba 100644 (file)
@@ -1,3 +1,63 @@
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * gdiffmk.am (gdiffmk): Use $(AM_V_GEN) to silence file generation.
+
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * gdiffmk.1.man: Rename `gdiffmk.man'.
+
+       * gdiffmk.am: Include renaming.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * gdiffmk.am: Add `Last update'.  Setup Emacs mode.
+
+2015-04-13  Mike Bianchi <MBianchi@Foveal.com>
+       More fixes to Savannah bug #44768.
+
+       * gdiffmk.sh:
+               replace
+                       for OPTION   with  while [ $# -gt 0 ]
+
+                       test -e ...  with  test -f
+
+                       use  ${DIFFCMD}  for the last  diff
+               add
+                       -s SEDCMD  option
+                       OPTION="$1"
+
+               many other cosmetic changes documented in the bug Discussion.
+               especially:
+                       capitalize variables  e.g.  CMD=`basename $0`
+
+       fix  make check  tests within gdiffmk
+       * tests/gdiffmk_tests.sh
+               add  set -e
+                       fails if ${abs_top_builddir} not set or incorrect
+
+       * tests/runtests.sh
+               add test 6a
+                       # Different values for addmark, changemark, deletemark
+                       # Alternate format of -a -c and -d flag arguments
+
+               add test 9a
+                       # Test -D  and  -M  options
+                       # Alternate format of -M argument.
+
+               add printout of failure count
+               add exit with failure exit_code if any test fails
+
+2015-04-10  Werner LEMBERG  <wl@gnu.org>
+
+       Fix Savannah bug #44768.
+
+       * gdiffmk.sh: Remove bash's $(...) with classic `...`.
+       Patch by Peter Bray.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org
+
+       * gdiffmk.man: Make it work in compatibility mode.
+
 2014-09-03  Bernd Warken  <groff-bernd.warken-72@web.de>
 
        * all `gdiffmk' source files: Add and improve the copying
 
        First import of gdiffmk files.
 
-Copyright 2004-2009, 2014
+Copyright 2004-2009, 2014-2015
   Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
@@ -108,5 +168,6 @@ notice and this notice are preserved.
 
 Local Variables:
 version-control: never
+mode: change-log
 coding: latin-1
 End:
diff --git a/contrib/gdiffmk/Makefile.sub b/contrib/gdiffmk/Makefile.sub
deleted file mode 100644 (file)
index 580a9ba..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-# Makefile.sub for `gdiffmk' (integration into the groff source tree)
-
-# File position: <groff-source>/contrib/gdiffmk/Makefile.sub
-
-# Copyright (C) 2004-2014 Free Software Foundation, Inc.
-# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-# This file is part of the gdiffmk utility, which is part of groff.
-
-# groff 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 3 of the License, or
-# (at your option) any later version.
-
-# groff 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, see <http://www.gnu.org/licenses/>.
-
-########################################################################
-
-MAN1=gdiffmk.n
-MOSTLYCLEANADD=gdiffmk tests/runtests
-RM=rm -f
-
-all: gdiffmk
-
-gdiffmk: gdiffmk.sh
-       sed -e "s|@BINDIR@|$(bindir)|g" \
-           -e "s|@VERSION@|$(version)$(revision)|g" \
-           -e $(SH_SCRIPT_SED_CMD)  $(srcdir)/gdiffmk.sh >$@
-       chmod +x $@
-
-install_data: gdiffmk
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       $(RM) $(DESTDIR)$(bindir)/gdiffmk
-       $(INSTALL_SCRIPT) gdiffmk $(DESTDIR)$(bindir)/gdiffmk
-
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/gdiffmk
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 7a6e84195038f501bbb9ebdea144a379adb959a4..d0b8e2111df09afd1a342aa654e66718cdaad247 100644 (file)
@@ -1,14 +1,14 @@
 gdiffmk is approximately a recreation of the original Bell Labs/AT&T diffmk
 command for troff/nroff documents, with enhancements.
 
-It should not be confused with `diffmk' commands that operate on XML.
+It should not be confused with 'diffmk' commands that operate on XML.
 
 The inspiration for this code was a Perl 2 version written in 1989 by Randal
 L. Schwartz.  See
   landfield.com/software/comp.sources.misc/archive-name/volume06/diffmk.p.gz
 
 The command also attempts to reproduce some of the functionality of the old
-`nrchbar' command.  See
+'nrchbar' command.  See
   open-systems.ufl.edu/mirrors/ftp.isc.org/usenet/comp.sources.unix/volume10/nrchbar.Z
 
 Thanks to Werner Lemberg for help in making the package more portable and
@@ -19,13 +19,13 @@ translates the output into something groff/troff/nroff can handle.
 
 Note the BUGS on the man page.
 
-The `tests' directory contains simple tests.  `runtests run' runs them and
-compares the output against baseline files.  Calling `runtests' without
+The 'tests' directory contains simple tests.  'runtests run' runs them and
+compares the output against baseline files.  Calling 'runtests' without
 argument gives the usage.
 
 ----------------------------------------------------------------------------
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
 
 This file is part of the gdiffmk utility, which is part of groff.
diff --git a/contrib/gdiffmk/gdiffmk.1.man b/contrib/gdiffmk/gdiffmk.1.man
new file mode 100644 (file)
index 0000000..1e20d47
--- /dev/null
@@ -0,0 +1,260 @@
+.TH GDIFFMK @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+gdiffmk \- mark differences between groff/nroff/troff files
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2004-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of gdiffmk, which is part of groff, the GNU roff
+.\" type-setting system.
+.\"
+.\" 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 3 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, see
+.\" <http://www.gnu.org/licenses/>.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY gdiffmk
+.OP \-a addmark
+.OP \-c changemark
+.OP \-d deletemark
+.RB [ \-D
+.RB [ \-B ]
+.RB [ \-M
+.IR "mark1 mark2" ]]
+.OP \-x diffcmd
+.OP \-\-
+.I file1
+.I file2
+.RI [ output ]
+.YS
+.
+.SY gdiffmk
+.B \-\-help
+.YS
+.
+.SY gdiffmk
+.B \-\-version
+.YS
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B gdiffmk
+compares two
+.BR groff (1),
+.BR nroff (1),
+or
+.BR troff (1)
+documents,
+.I file1
+and
+.IR file2 ,
+and creates an output which is
+.I file2
+with added \[lq]margin character\[rq] (.mc) commands that indicate the
+differences.
+.
+.
+.LP
+If the
+.I output
+filename is present,
+the output is written there.
+.
+If it is
+.B \-
+or absent the output is written to the standard output.
+.
+.
+.LP
+If the
+.I file1
+or
+.I file2
+argument is
+.B \-
+the standard input is read for that input.
+.
+Clearly both cannot be
+.BR \- .
+.
+.
+.LP
+Note that the output is not necessarily compatible with all macro packages
+and all preprocessors.
+.
+See section \(lqBugs\(rq below.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.TP
+.BI \-a addmark
+Use the
+.I addmark
+for source lines not in
+.I file1
+but present in
+.IR file2 .
+.
+Default:
+.BR + .
+.
+.TP
+.B \-B
+By default, the deleted texts marked by the
+.B \-D
+option end
+with an added troff break command,
+.BR .br ,
+to ensure that the deletions are marked properly.
+.
+This is the only way to guarantee that deletions and small
+changes get flagged.
+.
+This option directs the program not to insert these breaks; it makes
+no sense to use it without
+.BR \-D .
+.
+.TP
+.BI \-c changemark
+Use the
+.I changemark
+for changed source lines.
+.
+Default:
+.BR | .
+.
+.TP
+.BI \-d deletemark
+Use the
+.I deletemark
+for deleted source lines.
+.
+Default:
+.BR * .
+.
+.TP
+.B \-D
+Show the deleted portions from changed and deleted text.
+.
+Default delimiting marks:
+.BR "[[" " \&.\|.\|.\& " "]]" .
+.
+.TP
+.BI \-M "mark1 mark2"
+Change the delimiting marks for the
+.B \-D
+option.
+.
+It makes no sense to use this option without
+.BR \-D .
+.
+.TP
+.BI \-x diffcmd
+Use the
+.I diffcmd
+command to perform the comparison of
+.I file1
+and
+.IR file2 .
+.
+In particular,
+.I diffcmd
+should accept the GNU
+.B diff
+.BI \-D name
+option.
+.
+Default:
+.BR diff (1).
+.
+.TP
+.B \-\-
+All the following arguments are treated as file names,
+even if they begin with
+.BR \- .
+.
+.TP
+.B \-\-help
+Print a usage message on standard error output and exit.
+.
+.TP
+.B \-\-version
+Print version information on the standard output and exit.
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+.
+The output is not necessarily compatible with all macro packages
+and all preprocessors.
+.
+A workaround that is often successful against preprocessor problems is
+to run
+.B gdiffmk
+on the output of all the preprocessors instead of the input source.
+.
+.
+.LP
+.B gdiffmk
+relies on the
+.BI \-D name
+option of GNU
+.BR diff (1)
+to make a merged \[lq]#ifdef\[rq] output format.
+.
+It hasn't been tested whether other versions of
+.BR diff (1)
+do support this option.
+.
+See also the
+.BI \-x diffcmd
+option.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.B gdiffmk
+was written and is maintained by
+.MT MBianchi@\:Foveal.com
+Mike Bianchi
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR groff (@MAN1EXT@),
+.BR nroff (@MAN1EXT@),
+.BR gtroff (@MAN1EXT@),
+.BR diff (@MAN1EXT@)
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/gdiffmk/gdiffmk.am b/contrib/gdiffmk/gdiffmk.am
new file mode 100644 (file)
index 0000000..325948e
--- /dev/null
@@ -0,0 +1,75 @@
+# Automake rules for 'gdiffmk' (integration into the groff source tree)
+#
+# File position: <groff-source>/contrib/gdiffmk/gdiffmk.am
+#
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
+# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
+# Automake migration by Bertrand Garrigues
+#
+# Last update: 20 Aug 2015
+#
+# This file is part of the gdiffmk utility, which is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+########################################################################
+gdiffmk_srcdir = $(top_srcdir)/contrib/gdiffmk
+bin_SCRIPTS += gdiffmk
+TESTS += contrib/gdiffmk/tests/gdiffmk_tests.sh
+man1_MANS += contrib/gdiffmk/gdiffmk.1
+EXTRA_DIST += \
+  contrib/gdiffmk/gdiffmk.1.man \
+  contrib/gdiffmk/ChangeLog \
+  contrib/gdiffmk/README \
+  contrib/gdiffmk/gdiffmk.sh \
+  contrib/gdiffmk/tests/gdiffmk_tests.sh \
+  contrib/gdiffmk/tests/runtests.sh \
+  contrib/gdiffmk/tests/baseline \
+  contrib/gdiffmk/tests/baseline.6 \
+  contrib/gdiffmk/tests/baseline.6a \
+  contrib/gdiffmk/tests/baseline.7 \
+  contrib/gdiffmk/tests/baseline.8 \
+  contrib/gdiffmk/tests/baseline.9 \
+  contrib/gdiffmk/tests/baseline.9a \
+  contrib/gdiffmk/tests/baseline.10 \
+  contrib/gdiffmk/tests/file1 \
+  contrib/gdiffmk/tests/file2
+
+gdiffmk: $(gdiffmk_srcdir)/gdiffmk.sh
+       $(AM_V_GEN)sed -e "s|[@]BINDIR[@]|$(bindir)|g" \
+           -e "s|[@]VERSION[@]|$(VERSION)|g" \
+           -e "s|[@]HAVE_TEST_EF_OPTION[@]|$(HAVE_TEST_EF_OPTION)|g" \
+           -e "s|[@]BASH_PROG[@]|$(BASH_PROG)|g" \
+           -e "s|[@]DIFF_PROG[@]|$(DIFF_PROG)|g" \
+           -e $(SH_SCRIPT_SED_CMD)  $(gdiffmk_srcdir)/gdiffmk.sh \
+           >$@ \
+       && chmod +x $@
+
+clean-local: clean_gdiffmk_check
+clean_gdiffmk_check:
+       if test -d $(top_builddir)/contrib/gdiffmk/tests; then \
+         cd $(top_builddir)/contrib/gdiffmk/tests && \
+         $(abs_top_srcdir)/contrib/gdiffmk/tests/runtests.sh clean; \
+       fi
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/contrib/gdiffmk/gdiffmk.man b/contrib/gdiffmk/gdiffmk.man
deleted file mode 100644 (file)
index 87c2175..0000000
+++ /dev/null
@@ -1,288 +0,0 @@
-.\"-*- nroff -*-
-.TH GDIFFMK @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-.
-.\" gdiffmk \- mark differences between groff/nroff/troff files
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2004-2014 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff, a
-free software project.
-
-You can redistribute and/or modify gdiffmk under the terms of the GNU
-General Public License as published by the Free Software Foundation,
-either version 3 of the License, or (at your option) any later
-version.
-
-gdiffmk 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, see <http://www.gnu.org/licenses/>.
-..
-.
-.de au
-This document was written and is maintained by
-.MT MBianchi@Foveal.com
-Mike Bianchi
-.MT .
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fBgdiffmk 'u
-.ti \niu
-.B gdiffmk
-.de OP
-.  ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.  el .RB "[\ " "\\$1" "\ ]"
-..
-.OP \-a \%addmark
-.OP \-c \%changemark
-.OP \-d \%deletemark
-[\ \c
-.B \-D
-.OP \-B
-.OP \-M "mark1 mark2"
-]
-.OP \-x \%diffcmd
-.OP \-\-
-.OP \-\-help
-.OP \%\-\-version
-.I \%file1
-.I \%file2
-[\ \c
-.IR \%output \ \c
-]
-.br
-.ad \na
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B gdiffmk
-compares two
-.BR groff (1),
-.BR nroff (1),
-or
-.BR troff (1)
-documents,
-.I file1
-and
-.IR file2 ,
-and creates an output which is
-.I file2
-with added `margin character' (.mc) commands that indicate the differences.
-.
-.
-.LP
-If the
-.I output
-filename is present,
-the output is written there.
-.
-If it is
-.B \-
-or absent the output is written to the standard output.
-.
-.
-.LP
-If the
-.I file1
-or
-.I file2
-argument is
-.B \-
-the standard input is read for that input.
-.
-Clearly both cannot be
-.BR \- .
-.
-.
-.LP
-Note that the output is not necessarily compatible with all macro packages
-and all preprocessors.
-.
-See the
-.B BUGS
-section below.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI \-a addmark
-Use the
-.I addmark
-for source lines not in
-.I file1
-but present in
-.IR file2 .
-.
-Default:
-.BR + .
-.
-.TP
-.B \-B
-By default, the deleted texts marked by the
-.B \-D
-option end
-with an added troff break command,
-.BR .br ,
-to ensure that the deletions are marked properly.
-.
-This is the only way to guarantee that deletions and small
-changes get flagged.
-.
-This option directs the program not to insert these breaks; it makes
-no sense to use it without
-.BR \-D .
-.
-.TP
-.BI \-c changemark
-Use the
-.I changemark
-for changed source lines.
-.
-Default:
-.BR | .
-.
-.TP
-.BI \-d deletemark
-Use the
-.I deletemark
-for deleted source lines.
-.
-Default:
-.BR * .
-.
-.TP
-.B \-D
-Show the deleted portions from changed and deleted text.
-.
-Default delimiting marks:
-.BR "[[" " \&.\|.\|.\& " "]]" .
-.
-.TP
-.BI \-M "mark1 mark2"
-Change the delimiting marks for the
-.B \-D
-option.
-.
-It makes no sense to use this option without
-.BR \-D .
-.
-.TP
-.BI \-x diffcmd
-Use the
-.I diffcmd
-command to perform the comparison of
-.I file1
-and
-.IR file2 .
-.
-In particular,
-.I diffcmd
-should accept the GNU
-.B diff
-.BI \-D name
-option.
-.
-Default:
-.BR diff (1).
-.
-.TP
-.B \-\-
-All the following arguments are treated as file names,
-even if they begin with
-.BR \- .
-.
-.TP
-.B \-\-help
-Print a usage message on standard error output and exit.
-.
-.TP
-.B \-\-version
-Print version information on the standard output and exit.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-The output is not necessarily compatible with all macro packages
-and all preprocessors.
-.
-A workaround that is often successful against preprocessor problems is
-to run
-.B gdiffmk
-on the output of all the preprocessors instead of the input source.
-.
-.
-.LP
-.B gdiffmk
-relies on the
-.BI \-D name
-option of GNU
-.BR diff (1)
-to make a merged `#ifdef' output format.
-.
-It hasn't been tested whether other versions of
-.BR diff (1)
-do support this option.
-.
-See also the
-.BI \-x diffcmd
-option.
-.
-.
-.LP
-Report bugs to
-.MT bug-groff@gnu.org
-.ME .
-.
-Include a complete, self-contained example that will allow the bug to
-be reproduced, and say which version of
-.B gdiffmk
-you are using.
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYRIGHT
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff (@MAN1EXT@),
-.BR nroff (@MAN1EXT@),
-.BR gtroff (@MAN1EXT@),
-.BR diff (@MAN1EXT@)
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index e66f3eb5e0b6e47fe498e49b2824f89338c48c52..5ce931e12a8ae103d13280cf1656682f9ff88cbc 100644 (file)
@@ -1,6 +1,7 @@
-#! /bin/sh
-# Copyright (C) 2004-2014 Free Software Foundation, Inc.
+#!@BASH_PROG@
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
 # Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
+# Thanks to Peter Bray for debugging.
 
 # This file is part of the gdiffmk utility, which is part of groff.
 
 # License for more details.
 
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 # This file is part of GNU gdiffmk.
 
 
-cmd=$( basename $0 )
+CMD=`basename $0`
 
 Usage () {
-       if test "$#" -gt 0
+       if test $# -gt 0
        then
-               echo >&2 "${cmd}:  $@"
+               echo >&2 "${CMD}:  $@"
        fi
        echo >&2 "\
 
-Usage:  ${cmd} [ OPTIONS ] FILE1 FILE2 [ OUTPUT ]
+Usage:  ${CMD} [ OPTIONS ] FILE1 FILE2 [ OUTPUT ]
 Place difference marks into the new version of a groff/nroff/troff document.
-FILE1 and FILE2 are compared, using \`diff', and FILE2 is output with
-groff \`.mc' requests added to indicate how it is different from FILE1.
+FILE1 and FILE2 are compared, using 'diff', and FILE2 is output with
+groff '.mc' requests added to indicate how it is different from FILE1.
 
-  FILE1   Previous version of the groff file.  \`-' means standard input.
-  FILE2   Current version of the groff file.   \`-' means standard input.
+  FILE1   Previous version of the groff file.  '-' means standard input.
+  FILE2   Current version of the groff file.   '-' means standard input.
           Either FILE1 or FILE2 can be standard input, but not both.
-  OUTPUT  Copy of FILE2 with \`.mc' commands added.
-          \`-' means standard output (the default).
+  OUTPUT  Copy of FILE2 with '.mc' commands added.
+          '-' means standard output (the default).
+          If the shell's 'test' does not support option -ef, OUTPUT
+          can only be the standard output.
 
 OPTIONS:
-  -a ADDMARK     Mark for added groff source lines.    Default: \`+'.
-  -c CHANGEMARK  Mark for changed groff source lines.  Default: \`|'.
-  -d DELETEMARK  Mark for deleted groff source lines.  Default: \`*'.
+  -a ADDMARK     Mark for added groff source lines.    Default: '+'.
+  -c CHANGEMARK  Mark for changed groff source lines.  Default: '|'.
+  -d DELETEMARK  Mark for deleted groff source lines.  Default: '*'.
 
   -D             Show the deleted portions from changed and deleted text.
-                  Default delimiting marks:  \`[[' .... \`]]'.
-  -B             By default, the deleted texts marked by the \`-D' option end
-                  with an added troff \`.br' command.  This option prevents
-                  the added \`.br'.
-  -M MARK1 MARK2 Change the delimiting marks for the \`-D' option.
+                  Default delimiting marks:  '[[' .... ']]'.
+  -B             By default, the deleted texts marked by the '-D' option end
+                  with an added troff '.br' command.  This option prevents
+                  the added '.br'.
+  -M MARK1 MARK2 Change the delimiting marks for the '-D' option.
 
   -x DIFFCMD     Use a different diff(1) command;
-                  one that accepts the \`-Dname' option, such as GNU diff.
+                  one that accepts the '-Dname' option, such as GNU diff.
+  -s SEDCMD      Use a different sed(1) command;
+                  such as GNU sed.
   --version      Print version information on the standard output and exit.
   --help         Print this message on the standard error.
 "
@@ -65,7 +70,7 @@ Exit () {
        shift
        for arg
        do
-               echo >&2 "${cmd}:  $1"
+               echo >&2 "${CMD}:  $1"
                shift
        done
        exit ${exitcode}
@@ -82,13 +87,13 @@ FileRead () {
                ;;
        esac
 
-       if test ! -e "$2"
+       if test ! -f "$2"
        then
-               Exit $1 "File \`$2' not found."
+               Exit $1 "File '$2' not found."
        fi
        if test ! -r "$2"
        then
-               Exit $1 "File \`$2' not readable."
+               Exit $1 "File '$2' not readable."
        fi
 }
 
@@ -104,14 +109,15 @@ FileCreate () {
                ;;
        esac
 
-       if ! touch "$2" 2>/dev/null
+       touch "$2" 2>/dev/null
+       if test $? -ne 0
        then
-               if test ! -e "$2"
+               if test ! -f "$2"
                then
-                       Exit $1 "File \`$2' not created; " \
-                         "Cannot write directory \`$( dirname "$2" )'."
+                       Exit $1 "File '$2' not created; " \
+                         "Cannot write directory '`dirname "$2"`'."
                fi
-               Exit $1 "File \`$2' not writeable."
+               Exit $1 "File '$2' not writeable."
        fi
 }
 
@@ -122,11 +128,19 @@ WouldClobber () {
                ;;
        esac
 
-       if test "$1" -ef "$3"
+       # BASH_PROG is set to /bin/sh if bash was not found
+       if test "$HAVE_TEST_EF_OPTION" = "no" -a "$BASH_PROG" = "/bin/sh"
        then
                Exit 3 \
-                 "The $2 and OUTPUT arguments both point to the same file," \
-                 "\`$1', and it would be overwritten."
+               "Your shell does support test -ef, [OUTPUT] can only be the" \
+               "standard  output."
+       else
+               if test "$1" -ef "$3"
+               then
+                       Exit 3 \
+                       "The $2 and OUTPUT arguments both point to the same file," \
+                       "'$1', and it would be overwritten."
+               fi
        fi
 }
 
@@ -146,56 +160,64 @@ RequiresArgument () {
                ;;
        esac
 
-       if test "$#" -lt 2
+       if test $# -lt 2
        then
-               Exit 255 "Option \`$1' requires a value."
+               Exit 255 "Option '$1' requires a value."
        fi
 
        echo "$2"
        return 0
 }
 
-badoption=
-DIFFCMD=diff
+HAVE_TEST_EF_OPTION=@HAVE_TEST_EF_OPTION@
+BASH_PROG=@BASH_PROG@
+BADOPTION=
+DIFFCMD=@DIFF_PROG@
+SEDCMD=sed
 D_option=
 br=.br
-for OPTION
+while [ $# -gt 0 ]
 do
+       OPTION="$1"
        case "${OPTION}" in
        -a*)
-               ADDMARK=$( RequiresArgument "${OPTION}" $2 )            &&
+               ADDMARK=`RequiresArgument "${OPTION}" "$2"`             &&
                        shift
                ;;
        -c*)
-               CHANGEMARK=$( RequiresArgument "${OPTION}" $2 )         &&
+               CHANGEMARK=`RequiresArgument "${OPTION}" "$2"`          &&
                        shift
                ;;
        -d*)
-               DELETEMARK=$( RequiresArgument "${OPTION}" $2 )         &&
+               DELETEMARK=`RequiresArgument "${OPTION}" "$2"`          &&
                        shift
                ;;
        -D )
                D_option=D_option
                ;;
        -M* )
-               MARK1=$( RequiresArgument "${OPTION}" $2 )              &&
+               MARK1=`RequiresArgument "${OPTION}" "$2"`               &&
                        shift
                if [ $# -lt 2 ]
                then
-                       Usage "Option \`-M' is missing the MARK2 value."
+                       Usage "Option '-M' is missing the MARK2 value."
                fi
-               MARK2=$2
+               MARK2="$2"
                shift
                ;;
        -B )
                br=.
                ;;
+       -s* )
+               SEDCMD=`RequiresArgument "${OPTION}" "$2"`              &&
+                       shift
+               ;;
        -x* )
-               DIFFCMD=$( RequiresArgument "${OPTION}" $2 )            &&
+               DIFFCMD=`RequiresArgument "${OPTION}" "$2"`             &&
                        shift
                ;;
        --version)
-               echo "GNU ${cmd} (groff) version @VERSION@"
+               echo "GNU ${CMD} (groff) version @VERSION@"
                exit 0
                ;;
        --help)
@@ -210,7 +232,7 @@ do
                break
                ;;
        -*)
-               badoption="${cmd}:  invalid option \`$1'"
+               BADOPTION="${CMD}:  invalid option '$1'"
                ;;
        *)
                break
@@ -220,32 +242,33 @@ do
 done
 
 ${DIFFCMD} -Dx /dev/null /dev/null >/dev/null 2>&1  ||
-       Usage "The \`${DIFFCMD}' program does not accept"       \
-               "the required \`-Dname' option.
-Use GNU diff instead.  See the \`-x DIFFCMD' option."
+       Usage "The '${DIFFCMD}' program does not accept"        \
+               "the required '-Dname' option.
+Use GNU diff instead.  See the '-x DIFFCMD' option.  You can also
+install GNU diff as gdiff on your system"
 
-if test -n "${badoption}"
+if test -n "${BADOPTION}"
 then
-       Usage "${badoption}"
+       Usage "${BADOPTION}"
 fi
 
-if test "$#" -lt 2  -o  "$#" -gt 3
+if test $# -lt 2  -o  $# -gt 3
 then
        Usage "Incorrect number of arguments."
 fi
 
-if test "1$1" = 1-  -a  "2$2" = 2-
+if test "1$1" = "1-"  -a  "2$2" = "2-"
 then
-       Usage "Both FILE1 and FILE2 are \`-'."
+       Usage "Both FILE1 and FILE2 are '-'."
 fi
 
-FILE1=$1
-FILE2=$2
+FILE1="$1"
+FILE2="$2"
 
 FileRead 1 "${FILE1}"
 FileRead 2 "${FILE2}"
 
-if test "$#" = 3
+if test $# = 3
 then
        case "$3" in
        -)
@@ -262,24 +285,24 @@ then
        esac
 fi
 
-#      To make a very unlikely label even more unlikely ...
-label=__diffmk_$$__
+#      To make a very unlikely LABEL even more unlikely ...
+LABEL=__diffmk_$$__
 
-sed_script='
-               /^#ifdef '"${label}"'/,/^#endif \/\* '"${label}"'/ {
-                 /^#ifdef '"${label}"'/          s/.*/.mc '"${ADDMARK}"'/
-                 /^#endif \/\* '"${label}"'/     s/.*/.mc/
+SED_SCRIPT='
+               /^#ifdef '"${LABEL}"'/,/^#endif \/\* '"${LABEL}"'/ {
+                 /^#ifdef '"${LABEL}"'/          s/.*/.mc '"${ADDMARK}"'/
+                 /^#endif \/\* '"${LABEL}"'/     s/.*/.mc/
                  p
                  d
                }
-               /^#ifndef '"${label}"'/,/^#endif \/\* [!not ]*'"${label}"'/ {
-                 /^#else \/\* '"${label}"'/,/^#endif \/\* '"${label}"'/ {
-                   /^#else \/\* '"${label}"'/    s/.*/.mc '"${CHANGEMARK}"'/
-                   /^#endif \/\* '"${label}"'/   s/.*/.mc/
+               /^#ifndef '"${LABEL}"'/,/^#endif \/\* [!not ]*'"${LABEL}"'/ {
+                 /^#else \/\* '"${LABEL}"'/,/^#endif \/\* '"${LABEL}"'/ {
+                   /^#else \/\* '"${LABEL}"'/    s/.*/.mc '"${CHANGEMARK}"'/
+                   /^#endif \/\* '"${LABEL}"'/   s/.*/.mc/
                    p
                    d
                  }
-                 /^#endif \/\* \(not\|!\) '"${label}"'/ {
+                 /^#endif \/\* [!not ]*'"${LABEL}"'/ {
                   s/.*/.mc '"${DELETEMARK}"'/p
                   a\
 .mc
@@ -291,27 +314,27 @@ sed_script='
 
 if [ ${D_option} ]
 then
-       sed_script='
-               /^#ifdef '"${label}"'/,/^#endif \/\* '"${label}"'/ {
-                 /^#ifdef '"${label}"'/          s/.*/.mc '"${ADDMARK}"'/
-                 /^#endif \/\* '"${label}"'/     s/.*/.mc/
+       SED_SCRIPT='
+               /^#ifdef '"${LABEL}"'/,/^#endif \/\* '"${LABEL}"'/ {
+                 /^#ifdef '"${LABEL}"'/          s/.*/.mc '"${ADDMARK}"'/
+                 /^#endif \/\* '"${LABEL}"'/     s/.*/.mc/
                  p
                  d
                }
-               /^#ifndef '"${label}"'/,/^#endif \/\* [!not ]*'"${label}"'/ {
-                 /^#ifndef '"${label}"'/ {
+               /^#ifndef '"${LABEL}"'/,/^#endif \/\* [!not ]*'"${LABEL}"'/ {
+                 /^#ifndef '"${LABEL}"'/ {
                   i\
 '"${MARK1}"'
                   d
                  }
-                 /^#else \/\* '"${label}"'/ ! {
-                  /^#endif \/\* [!not ]*'"${label}"'/ ! {
+                 /^#else \/\* '"${LABEL}"'/ !{
+                  /^#endif \/\* [!not ]*'"${LABEL}"'/ !{
                    p
                    d
                   }
                  }
-                 /^#else \/\* '"${label}"'/,/^#endif \/\* '"${label}"'/ {
-                   /^#else \/\* '"${label}"'/ {
+                 /^#else \/\* '"${LABEL}"'/,/^#endif \/\* '"${LABEL}"'/ {
+                   /^#else \/\* '"${LABEL}"'/ {
                     i\
 '"${MARK2}"'\
 '"${br}"'
@@ -320,11 +343,11 @@ then
 .mc '"${CHANGEMARK}"'
                     d
                    }
-                   /^#endif \/\* '"${label}"'/   s/.*/.mc/
+                   /^#endif \/\* '"${LABEL}"'/   s/.*/.mc/
                    p
                    d
                  }
-                 /^#endif \/\* \(not\|!\) '"${label}"'/ {
+                 /^#endif \/\* [!not ]*'"${LABEL}"'/ {
                   i\
 '"${MARK2}"'\
 '"${br}"'
@@ -338,15 +361,7 @@ then
        '
 fi
 
-diff -D"${label}" -- ${FILE1} ${FILE2}  |
-       sed -n "${sed_script}"
+${DIFFCMD} -D"${LABEL}" -- "${FILE1}" "${FILE2}"  |
+       ${SEDCMD} -n "${SED_SCRIPT}"
 
 # EOF
-
-
-########################################################################
-# Emacs settings
-#
-# Local Variables:
-# mode: text
-# End:
index 4414ef96346391a4db5a60adb1806a278bd4f943..6b329926ae878cd6fc9a7ea03ff15d830f11fdf8 100644 (file)
@@ -1,24 +1,3 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
 .ll 25
 .pl 20
 .nf
@@ -36,8 +15,3 @@ file1 and file2 #3
 .mc
 file1 and file2 #4
 file1 and file2 #5
-.
-.\" Emacs setup
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index aacead6460127d3b91dada174f6147b31bdd7c68..b523f4520005f89dd5d06cd09f86ed0e5cd7ce4c 100644 (file)
@@ -1,24 +1,3 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
 .ll 25
 .pl 20
 .nf
@@ -45,8 +24,3 @@ file1 only
 .mc
 file1 and file2 #4
 file1 and file2 #5
-.
-.\" Emacs setup
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index abca50e51057cb3c292a3769beda4b10a6d7a41e..3156961b4a219d9027464c25f97991958e8dad66 100644 (file)
@@ -1,24 +1,3 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
 .ll 25
 .pl 20
 .nf
@@ -36,8 +15,3 @@ file1 and file2 #3
 .mc
 file1 and file2 #4
 file1 and file2 #5
-.
-.\" Emacs setup
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/gdiffmk/tests/baseline.6a b/contrib/gdiffmk/tests/baseline.6a
new file mode 100644 (file)
index 0000000..3156961
--- /dev/null
@@ -0,0 +1,17 @@
+.ll 25
+.pl 20
+.nf
+file1 and file2 #1
+.mc C
+file2 only
+file2 only
+.mc
+file1 and file2 #2
+.mc A
+file2 only
+.mc
+file1 and file2 #3
+.mc D
+.mc
+file1 and file2 #4
+file1 and file2 #5
index 9d2c8dcb50b970fb960eb47eb2d1a3b0872f1d01..df23363b277ce907ba267903138ea3bff691cf8c 100644 (file)
@@ -1,2 +1,2 @@
 gdiffmk:  The FILE2 and OUTPUT arguments both point to the same file,
-gdiffmk:  `tmp_file.7', and it would be overwritten.
+gdiffmk:  'tmp_file.7', and it would be overwritten.
index d6b7fea5d4f502e82b8d1865846ed24f916b5683..9846dd583cb0ec1d9da2339a25ae25e03a48d37d 100644 (file)
@@ -1,24 +1,3 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
 .ll 25
 .pl 20
 .nf
@@ -45,8 +24,3 @@ file1 only
 .mc
 file1 and file2 #4
 file1 and file2 #5
-.
-.\" Emacs setup
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 3af875565ca1261c3ee68056783b462724e7644c..50fe57d6d2b121cc8aef5e35dc6b1684e74a5e56 100644 (file)
@@ -1,24 +1,3 @@
-.ig \"-*- nroff -*-
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
-
-This file is part of the gdiffmk utility, which is part of groff.
-Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
 .ll 25
 .pl 20
 .nf
@@ -45,8 +24,3 @@ file1 only
 .mc
 file1 and file2 #4
 file1 and file2 #5
-.
-.\" Emacs setup
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/gdiffmk/tests/baseline.9a b/contrib/gdiffmk/tests/baseline.9a
new file mode 100644 (file)
index 0000000..50fe57d
--- /dev/null
@@ -0,0 +1,26 @@
+.ll 25
+.pl 20
+.nf
+file1 and file2 #1
+<<<<
+file1 only
+>>>>
+.br
+.mc |
+file2 only
+file2 only
+.mc
+file1 and file2 #2
+.mc +
+file2 only
+.mc
+file1 and file2 #3
+<<<<
+file1 only
+file1 only
+>>>>
+.br
+.mc *
+.mc
+file1 and file2 #4
+file1 and file2 #5
diff --git a/contrib/gdiffmk/tests/gdiffmk_tests.sh b/contrib/gdiffmk/tests/gdiffmk_tests.sh
new file mode 100755 (executable)
index 0000000..e74d594
--- /dev/null
@@ -0,0 +1,9 @@
+#!/bin/sh
+
+# Execute runtests.sh in the builddir 
+
+set -e
+
+mkdir -p ${abs_top_builddir}/contrib/gdiffmk/tests
+cd ${abs_top_builddir}/contrib/gdiffmk/tests
+${abs_top_srcdir}/contrib/gdiffmk/tests/runtests.sh run
diff --git a/contrib/gdiffmk/tests/runtests.in b/contrib/gdiffmk/tests/runtests.in
deleted file mode 100644 (file)
index 714ce48..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-#! /bin/sh
-#
-#      A very simple function test for gdiffmk.sh.
-#
-# Copyright (C) 2004, 2005, 2009 Free Software Foundation, Inc.
-# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
-
-# This file is part of the gdiffmk utility, which is part of groff.
-
-# groff 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 3 of the License, or
-# (at your option) any later version.
-
-# groff 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, see <http://www.gnu.org/licenses/>.
-# This file is part of GNU gdiffmk.
-
-srcdir=@srcdir@
-
-command=../gdiffmk
-
-#      Test the number of arguments and the first argument.
-case $#-$1 in
-1-clean )
-       rm -fv result* tmp_file*
-       exit 0
-       ;;
-1-run )
-       ;;
-* )
-       echo >&2 "$0 [ clean | run ]
-Run a few simple tests on \`${command}'."'
-
-clean  Remove the result? and tmp_file? files.
-run    Run the tests.
-'
-       exit 255
-       ;;
-esac
-
-function TestResult {
-       if cmp -s $1 $2
-       then
-               echo $2 PASSED
-       else
-               echo ''
-               echo $2 TEST FAILED
-               diff $1 $2
-               echo ''
-       fi
-}
-
-tmpfile=/tmp/$$
-trap 'rm -f ${tmpfile}' 0 1 2 3 15
-
-#      Run tests.
-
-#      3 file arguments
-ResultFile=result.1
-${command}  ${srcdir}/file1  ${srcdir}/file2 ${ResultFile} 2>${tmpfile}
-cat ${tmpfile} >>${ResultFile}
-TestResult ${srcdir}/baseline ${ResultFile}
-
-#      OUTPUT to stdout by default
-ResultFile=result.2
-${command}  ${srcdir}/file1  ${srcdir}/file2  >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline ${ResultFile}
-
-#      OUTPUT to stdout via  -  argument
-ResultFile=result.3
-${command}  ${srcdir}/file1  ${srcdir}/file2 - >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline ${ResultFile}
-
-#      FILE1 from standard input via  -  argument
-ResultFile=result.4
-${command}  - ${srcdir}/file2 <${srcdir}/file1  >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline ${ResultFile}
-
-#      FILE2 from standard input via  -  argument
-ResultFile=result.5
-${command}  ${srcdir}/file1 - <${srcdir}/file2  >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline ${ResultFile}
-
-#      Different values for addmark, changemark, deletemark
-ResultFile=result.6
-${command}  -aA -cC -dD  ${srcdir}/file1 ${srcdir}/file2  >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline.6 ${ResultFile}
-
-#      Test for accidental file overwrite.
-ResultFile=result.7
-cp ${srcdir}/file2 tmp_file.7
-${command}  -aA -dD -cC  ${srcdir}/file1 tmp_file.7  tmp_file.7        \
-                                                       >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline.7 ${ResultFile}
-
-#      Test -D option
-ResultFile=result.8
-${command}  -D  ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline.8 ${ResultFile}
-
-#      Test -D  and  -M  options
-ResultFile=result.9
-${command}  -D  -M '<<<<' '>>>>'                               \
-                       ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline.9 ${ResultFile}
-
-#      Test -D  and  -B  options
-ResultFile=result.10
-${command}  -D  -B  ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
-TestResult ${srcdir}/baseline.10 ${ResultFile}
-
-#      EOF
diff --git a/contrib/gdiffmk/tests/runtests.sh b/contrib/gdiffmk/tests/runtests.sh
new file mode 100755 (executable)
index 0000000..0f7c3b6
--- /dev/null
@@ -0,0 +1,154 @@
+#! /bin/sh
+#
+#      A very simple function test for gdiffmk.sh.
+#
+# Copyright (C) 2004-2018 Free Software Foundation, Inc.
+# Written by Mike Bianchi <MBianchi@Foveal.com <mailto:MBianchi@Foveal.com>>
+
+# This file is part of the gdiffmk utility, which is part of groff.
+
+# groff 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 3 of the License, or
+# (at your option) any later version.
+
+# groff 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, see <http://www.gnu.org/licenses/>.
+# This file is part of GNU gdiffmk.
+
+# abs_top_srcdir and abs_top_builddir are set by AM_TESTS_ENVIRONMENT
+# (defined in Makefile.am) when running make check
+
+srcdir=${abs_top_srcdir}/contrib/gdiffmk/tests
+
+command=${abs_top_builddir}/gdiffmk
+
+#      Test the number of arguments and the first argument.
+case "$#-$1" in
+1-clean )
+       rm -fv result* tmp_file*
+       exit 0
+       ;;
+1-run )
+       ;;
+* )
+       echo >&2 "$0 [ clean | run ]
+Run a few simple tests on '${command}'."'
+
+clean  Remove the result? and tmp_file? files.
+run    Run the tests.
+'
+       exit 255
+       ;;
+esac
+
+exit_code=0    #  Success
+failure_count=0
+TestResult () {
+       if cmp -s $1 $2
+       then
+               echo $2 PASSED
+       else
+               echo ''
+               echo $2 TEST FAILED
+               diff $1 $2
+               echo ''
+               exit_code=1     #  Failure
+               failure_count=`expr ${failure_count} + 1`
+       fi
+}
+
+tmpfile=/tmp/$$
+trap 'rm -f ${tmpfile}' 0 1 2 3 15
+
+#      Run tests.
+
+#      3 file arguments
+ResultFile=result.1
+${command}  ${srcdir}/file1  ${srcdir}/file2 ${ResultFile} 2>${tmpfile}
+cat ${tmpfile} >>${ResultFile}
+TestResult ${srcdir}/baseline ${ResultFile}
+
+
+#      OUTPUT to stdout by default
+ResultFile=result.2
+${command}  ${srcdir}/file1  ${srcdir}/file2  >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline ${ResultFile}
+
+
+#      OUTPUT to stdout via  -  argument
+ResultFile=result.3
+${command}  ${srcdir}/file1  ${srcdir}/file2 - >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline ${ResultFile}
+
+
+#      FILE1 from standard input via  -  argument
+ResultFile=result.4
+${command}  - ${srcdir}/file2 <${srcdir}/file1  >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline ${ResultFile}
+
+
+#      FILE2 from standard input via  -  argument
+ResultFile=result.5
+${command}  ${srcdir}/file1 - <${srcdir}/file2  >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline ${ResultFile}
+
+
+#      Different values for addmark, changemark, deletemark
+ResultFile=result.6
+${command}  -aA -cC -dD  ${srcdir}/file1 ${srcdir}/file2  >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.6 ${ResultFile}
+
+
+#      Different values for addmark, changemark, deletemark
+#      Alternate format of -a -c and -d flag arguments
+ResultFile=result.6a
+${command}  -a A -c C -d D  ${srcdir}/file1 ${srcdir}/file2  >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.6a ${ResultFile}
+
+
+#      Test for accidental file overwrite.
+ResultFile=result.7
+cp ${srcdir}/file2 tmp_file.7
+${command}  -aA -dD -cC  ${srcdir}/file1 tmp_file.7  tmp_file.7        \
+                                                       >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.7 ${ResultFile}
+
+
+#      Test -D option
+ResultFile=result.8
+${command}  -D  ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.8 ${ResultFile}
+
+
+#      Test -D  and  -M  options
+ResultFile=result.9
+${command}  -D  -M '<<<<' '>>>>'                               \
+                       ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.9 ${ResultFile}
+
+
+#      Test -D  and  -M  options
+#      Alternate format of -M argument.
+ResultFile=result.9a
+${command}  -D  -M'<<<<' '>>>>'                                \
+                       ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.9a ${ResultFile}
+
+
+#      Test -D  and  -B  options
+ResultFile=result.10
+${command}  -D  -B  ${srcdir}/file1 ${srcdir}/file2 >${ResultFile} 2>&1
+TestResult ${srcdir}/baseline.10 ${ResultFile}
+
+
+echo failure_count ${failure_count}
+
+exit ${exit_code}
+
+#      EOF
index 7cf64763b7939d03802a994a59b8beb86369e63f..16e193feea990b0cbbd42d2f5a3aae19078ee583 100644 (file)
@@ -1,3 +1,50 @@
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * glilypond.am (glilypond): Use $(AM_V_GEN) to silence file generation.
+
+2017-10-22  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * args.pl: Fix grammar in usage message.
+
+       When used attributively, e.g. as an adjectival phrase,
+       "command-line" should be hyphenated.
+
+2015-09-10  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * glilypond.pl, args.pl, subs.pl: New default `eps_func' as `pdf'.
+
+2015-09-10  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * glilypond.1.man: New default `pdf2eps'.  Several fixes.
+
+       * subs.pl: Replace `.PSPIC' by `$P_PIC'.  Set new default sub on
+       top.
+
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * glilypond.1.man: Rename `glilypond.man'.
+
+       * glilypond.am: Include renaming.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * glilypond.am: Add `Last update'.  Setup Emacs mode.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+       * glilypond.man: Make it work in compatibility mode.
+       (EL): Fix typo.
+
+2015-03-20  Ralph Corderoy  <ralph@inputplus.co.uk>
+
+       * glilypond.pl: Minor syntax fixes.
+
+2015-03-20  Werner LEMBERG  <wl@gnu.org>
+
+       * glilypond.pl <read files or stdin>: Fix typo.
+
+       Problem reported by Grégoire Babey <gibux@gmx.ch>.
+
 2014-09-03  Bernd Warken  <groff-bernd.warken-72@web.de>
 
        * glilypond.pl: New version 1.3.1
 
 ########################################################################
 
-Copyright 2013-201 Free Software Foundation, Inc.
+Copyright 2013-2018 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -183,5 +230,5 @@ notice and this notice are preserved.
 
 Local Variables:
 version-control: never
-coding: utf-8
+mode: change-log
 End:
index cf8cd9e722212ec05cf6fa8355658ebd9112ed7d..10f45e7f639efe86c79669e78edf1c793df3ee2f 100644 (file)
@@ -89,7 +89,7 @@
        * groff_lilypond.pl: Program written in Perl, version v0.1
        * groff_lilypond.man: Corresponding man-page
 
-Copyright 2013  Free Software Foundation, Inc.
+Copyright 2013-2018 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff --git a/contrib/glilypond/Makefile.sub b/contrib/glilypond/Makefile.sub
deleted file mode 100644 (file)
index f843271..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-# Makefile.sub for `glilypond'
-
-# File position: <groff-source>/contrib/lilypond/Makefile.sub
-
-# Copyright (C) 2013-2014  Free Software Foundation, Inc.
-# Written by Werner Lemberg <wl@gnu.org> and
-# Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `glilypond' which is part of `groff'.
-
-# `groff' 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 3 of the License, or
-# (at your option) any later version.
-
-# `groff' 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, see <http://www.gnu.org/licenses/>.
-
-########################################################################
-
-MAN1=glilypond.n
-
-MOSTLYCLEANADD=glilypond $(MAN1)
-
-all: glilypond
-
-# files going to lib directory `$(glilypond_dir)'
-
-GLILYPOND_LIB=\
-  $(srcdir)/subs.pl \
-  $(srcdir)/oop_fh.pl \
-  $(srcdir)/args.pl
-
-GLILYPOND_LIB_=`echo $(GLILYPOND_LIB) | sed 's|$(srcdir)/||g'`
-
-RM=rm -f
-
-# create perl executable `glilypond', being stored into `bindir'
-
-glilypond: $(srcdir)/glilypond.pl
-       $(RM) $@
-       sed -f "$(SH_DEPS_SED_SCRIPT)" \
-           -e "s|@g@|$(g)|g" \
-           -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-           -e "s|@glilypond_dir@|$(DESTDIR)$(glilypond_dir)|g" \
-           -e "s|@VERSION@|$(version)$(revision)|g" \
-           $(srcdir)/glilypond.pl >$@
-       chmod +x $@
-
-install_data: glilypond $(GLILYPOND_LIB)
-       -test -d $(DESTDIR)$(bindir) \
-         || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       $(RM) $(DESTDIR)$(bindir)/glilypond
-       $(INSTALL_SCRIPT) glilypond $(DESTDIR)$(bindir)/glilypond
-       -test -d $(DESTDIR)$(glilypond_dir) \
-         || $(mkinstalldirs) $(DESTDIR)$(glilypond_dir)
-       for f in $(GLILYPOND_LIB_); do \
-         $(RM) $(DESTDIR)$(glilypond_dir)/$$f; \
-         $(INSTALL_SCRIPT) $(srcdir)/$$f $(DESTDIR)$(glilypond_dir)/$$f; \
-       done
-
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/glilypond
-       -for f in $(GLILYPOND_LIB_); do \
-         $(RM) $(DESTDIR)$(glilypond_dir)/$$f; \
-       done
-       -test -d $(DESTDIR)$(glilypond_dir) && \
-         rmdir $(DESTDIR)$(glilypond_dir)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 404e87de79fba6917f6f36d51f5bb3f2b3090ad7..0b976f10f3be905f49d234ec0b85bcef80386848 100644 (file)
@@ -1,4 +1,4 @@
-    Copyright (C) 2013-201 Free Software Foundation, Inc.
+    Copyright (C) 2013-2018 Free Software Foundation, Inc.
 
     Written by Bernd Warken <groff-bernd.warken-72@web.de>
 
@@ -6,34 +6,34 @@
     are permitted in any medium without royalty provided the copyright
     notice and this notice are preserved.
 
-    This file is part of `glilypond', which is part of `groff'.
+    This file is part of 'glilypond', which is part of 'groff'.
 
 
 ########################################################################
 
-In order to run `glilypond', your system must have installed Perl of at
-least version `v5.6'.
+In order to run 'glilypond', your system must have installed Perl of at
+least version 'v5.6'.
 
 
 ########################################################################
 
-In order to have this program installed by `make', the creation of a
+In order to have this program installed by 'make', the creation of a
 libdir (library directory) must be programmed in some system files.
 The following actions must be taken:
 
 1) <groff_src_dir>/m4/groff.m4:
-Add `AC_DEFUN([GROFF_GROFFERDIR_DEFAULT])'.
+Add 'AC_DEFUN([GROFF_GROFFERDIR_DEFAULT])'.
 
 2) <groff_src_dir>/configure.ac:
-Add `GROFF_GROFFERDIR_DEFAULT'.
+Add 'GROFF_GROFFERDIR_DEFAULT'.
 
 3) <groff_src_dir>/Makefile.in:
-Add several informations of `glilypond_dir'
+Add several informations of 'glilypond_dir'
 
-With that, the program `autoconf' can be run in order to update the
+With that, the program 'autoconf' can be run in order to update the
 configure files and Makefile's.
 
-Now `$glilypond_dir' can be used as libdir.
+Now '$glilypond_dir' can be used as libdir.
 
 
 ########################################################################
index 485195c4fc4c925688b87bc24d1b5a207d05f95f..038b00431969d353342d090d75298cf68f3ec889 100644 (file)
@@ -3,29 +3,31 @@
 ########################################################################
 
 my $License = q*
-groff_lilypond - integrate `lilypond' into `groff' files
+groff_lilypond - integrate 'lilypond' into 'groff' files
 
-Source file position: `<groff-source>/contrib/glilypond/args.pl'
-Installed position: `<prefix>/lib/groff/glilypond'
+Source file position: '<groff-source>/contrib/glilypond/args.pl'
+Installed position: '<prefix>/lib/groff/glilypond'
 
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2018 Free Software Foundation, Inc.
   Written by Bernd Warken <groff-bernd.warken-72@web.de>
 
-This file is part of `GNU groff'.
+Last update: 10 Sep 2015
 
-  `GNU groff' 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 3 of the License, or (at your
+This file is part of 'GNU groff'.
+
+  'GNU groff' 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 3 of the License, or (at your
 option) any later version.
 
-  `GNU groff' is distributed in the hope that it will be useful, but
+  'GNU groff' 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
+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 `groff', see the files `COPYING' and `LICENSE' in the top
-directory of the `groff' source package.  If not, see
+  You should have received a copy of the 'GNU General Public License'
+along with 'groff', see the files 'COPYING' and 'LICENSE' in the top
+directory of the 'groff' source package.  If not, see
 <http://www.gnu.org/licenses/>.
 *;
 
@@ -110,7 +112,7 @@ my @files = EMPTYARRAY;
 
 
 #----------
-# first run for command line arguments
+# first run for command-line arguments
 #----------
 
 # global variables for first run
@@ -122,8 +124,8 @@ my $has_arg = FALSE;
 
 
 # Split short option collections and transfer these to suitable long
-# options from above.  Note that `-v' now means `--verbose' in version
-# `v1.1', earlier versions had `--version' for `-v'.
+# options from above.  Note that '-v' now means '--verbose' in version
+# 'v1.1', earlier versions had '--version' for '-v'.
 
 my %short_opts =
   (
@@ -153,7 +155,7 @@ $long_opts[3] =
    '--o' => '--output',
    '--p' => '--prefix',                # and --file_prefix
    '--t' => '--temp_dir',
-   '--u' => '--help',          # '--usage' is mapped to `--help'
+   '--u' => '--help',          # '--usage' is mapped to '--help'
   };
 
 $long_opts[4] =
@@ -177,13 +179,13 @@ my $split_short = sub {
 
   my @chars = split //, $1;    # omit leading dash
 
-     # if result is TRUE: run `next SPLIT' afterwards
+     # if result is TRUE: run 'next SPLIT' afterwards
 
    CHARS: while ( @chars ) {
        my $c = shift @chars;
 
        unless ( exists $short_opts{$c} ) {
-        $stderr->print( "Unknown short option `-$c'." );
+        $stderr->print( "Unknown short option '-$c'." );
         next CHARS;
        }
 
@@ -206,12 +208,12 @@ my $split_short = sub {
           # in this arg, the rest of characters in @chars
           push @splitted_args, join "", @chars;
           @chars = EMPTYARRAY;
-          return TRUE;         # use `next SPLIT' afterwards
+          return TRUE;         # use 'next SPLIT' afterwards
         }
 
         # optarg is the next argument
         $has_arg = $transopt;
-        return TRUE;           # use `next SPLIT' afterwards
+        return TRUE;           # use 'next SPLIT' afterwards
        }                       # end of if %opts_with_arg
      }                         # end of while CHARS
      return FALSE;             # do not do anything
@@ -253,7 +255,7 @@ my $split_long = sub {
                      $from_arg . '.' ) if ( defined($optarg) );
       push @splitted_args, $transopt;
       $Args->{'verbose'} = TRUE if ( $transopt eq '--verbose' );
-      return TRUE;             # use `next SPLIT' afterwards
+      return TRUE;             # use 'next SPLIT' afterwards
     }                          # end of if %opts_noarg
 
     # test on option with arg
@@ -263,18 +265,18 @@ my $split_long = sub {
       # test on optarg in arg
       if ( defined($optarg) ) {
        push @splitted_args, $1;
-       return TRUE; # use `next SPLIT' afterwards
+       return TRUE; # use 'next SPLIT' afterwards
       } # end of if optarg in arg
 
       # has optarg in next arg
       $has_arg = $transopt;
-      return TRUE; # use `next SPLIT' afterwards
+      return TRUE; # use 'next SPLIT' afterwards
     } # end of if %opts_with_arg
 
     # not with and without option, so is not permitted
-    $stderr->print( "`" . $transopt .
-                   "' is unknown long option from `" . $from_arg . "'" );
-    return TRUE; # use `next SPLIT' afterwards
+    $stderr->print( "'" . $transopt .
+                   "' is unknown long option from '" . $from_arg . "'" );
+    return TRUE; # use 'next SPLIT' afterwards
   } # end of for N
   return FALSE; # do nothing
 }; # end of split_long()
@@ -287,7 +289,7 @@ sub run_first {
 
  SPLIT: foreach (@ARGV) {
     # Transform long and short options into some given long options.
-    # Split long opts with arg into 2 args (no `=').
+    # Split long opts with arg into 2 args (no '=').
     # Transform short option collections into given long options.
     chomp;
 
@@ -302,12 +304,12 @@ sub run_first {
       next SPLIT;
     }
 
-    if ( $_ eq '-' ) {         # file arg `-'
+    if ( $_ eq '-' ) {         # file arg '-'
       push @files, $_;
       next SPLIT;
     }
 
-    if ( $_ eq '--' ) {                # POSIX arg `--'
+    if ( $_ eq '--' ) {                # POSIX arg '--'
       push @splitted_args, $_;
       $double_minus = TRUE;
       next SPLIT;
@@ -337,7 +339,7 @@ sub run_first {
   }                            # end of foreach SPLIT
 
                                # all args are considered
-  $stderr->print( "Option `$has_arg' needs an argument." )
+  $stderr->print( "Option '$has_arg' needs an argument." )
     if ( $has_arg );
 
 
@@ -351,7 +353,7 @@ sub run_first {
 # open or ignore verbose output
 #----------
 sub install_verbose {
-  if ( $Args->{'verbose'} ) { # `--verbose' was used
+  if ( $Args->{'verbose'} ) { # '--verbose' was used
     # make verbose output into $v
     my $s = $v->get(); # get content of string so far as array ref, close
 
@@ -363,11 +365,11 @@ sub install_verbose {
       }
     }
     # verbose output is now active (into STDERR)
-    $v->print( "Option `-v' means `--verbose'." );
-    $v->print( "Version information is printed by option `--version'." );
+    $v->print( "Option '-v' means '--verbose'." );
+    $v->print( "Version information is printed by option '--version'." );
     $v->print( "#" x 72 );
 
-  } else { # `--verbose' was not used
+  } else { # '--verbose' was not used
     # do not be verbose, make verbose invisible
 
     $v->close(); # close and ignore the string content
@@ -376,7 +378,7 @@ sub install_verbose {
     # this is either into /dev/null or in an ignored string
 
   } # end if-else about verbose
-  # `$v->print' works now in any case
+  # '$v->print' works now in any case
 
   $v->print( "Verbose output was chosen." );
 
@@ -384,20 +386,20 @@ sub install_verbose {
   $v->print( $Globals->{'prog'} . " is" . $s .
             " installed." );
 
-  $v->print( 'The command line options are:' );
+  $v->print( 'The command-line options are:' );
 
   $s = "  options:";
-  $s .= " `" . $_ . "'" for ( @ARGV );
+  $s .= " '" . $_ . "'" for ( @ARGV );
   $v->print( $s );
 
   $s = "  file names:";
-  $s .= " `" . $_ . "'\n" for ( @files );
+  $s .= " '" . $_ . "'\n" for ( @files );
   $v->print( $s );
 } # end install_verbose()
 
 
 #----------
-# second run of command line arguments
+# second run of command-line arguments
 #----------
 sub run_second {
     # Second run of args with new @ARGV from the former splitting.
@@ -408,12 +410,12 @@ sub run_second {
 
   ARGS: for my $arg ( @ARGV ) {
 
-      # ignore `--', file names are handled later on
+      # ignore '--', file names are handled later on
       last ARGS if ( $arg eq '--' );
 
       if ( $has_arg ) {
        unless ( exists $opts_with_arg{$has_arg} ) {
-         $stderr->print( "`\%opts_with_args' does not have key `" .
+         $stderr->print( "'\%opts_with_args' does not have key '" .
                            $has_arg . "'." );
          next ARGS;
        }
@@ -434,14 +436,14 @@ sub run_second {
       }
 
       # not a suitable option
-      $stderr->print( "Wrong option `" . $arg . "'." );
+      $stderr->print( "Wrong option '" . $arg . "'." );
       next ARGS;
 
     } # end of for ARGS:
 
 
     if ( $has_arg ) { # after last argument
-      die "Option `$has_arg' needs an argument.";
+      die "Option '$has_arg' needs an argument.";
     }
 
   }; # end of second run
@@ -450,40 +452,40 @@ sub run_second {
 sub handle_args {
   # handling the output of args
 
-  if ( $Args->{'output'} ) { # `--output' was set in the arguments
+  if ( $Args->{'output'} ) { # '--output' was set in the arguments
     my $out_path = &path2abs($Args->{'output'});
     die "Output file name $Args->{'output'} cannot be used."
       unless ( $out_path );
 
     my ( $file, $dir );
     ( $file, $dir ) = File::Basename::fileparse($out_path)
-      or die "Could not handle output file path `" . $out_path . "': " .
-       "directory name `" . $dir . "' and file name `" . $file . "'.";
+      or die "Could not handle output file path '" . $out_path . "': " .
+       "directory name '" . $dir . "' and file name '" . $file . "'.";
 
-    die "Could not find output directory for `" . $Args->{'output'} . "'"
+    die "Could not find output directory for '" . $Args->{'output'} . "'"
       unless ( $dir );
-    die "Could not find output file: `" . $Args->{'output'} .
+    die "Could not find output file: '" . $Args->{'output'} .
       "'" unless ( $file );
 
     if ( -d $dir ) {
-      die "Could not write to output directory `" . $dir . "'."
+      die "Could not write to output directory '" . $dir . "'."
        unless ( -w $dir );
     } else {
       $dir = &make_dir($dir);
-      die "Could not create output directory in: `" . $out_path . "'."
+      die "Could not create output directory in: '" . $out_path . "'."
        unless ( $dir );
     }
 
     # now $dir is a writable directory
 
     if ( -e $out_path ) {
-      die "Could not write to output file `" . $out_path . "'."
+      die "Could not write to output file '" . $out_path . "'."
        unless ( -w $out_path );
     }
 
     $out = new FH_FILE( $out_path );
-    $v->print( "Output goes to file `" . $out_path . "'." );
-  } else { # `--output' was not set
+    $v->print( "Output goes to file '" . $out_path . "'." );
+  } else { # '--output' was not set
     $out = new FH_STDOUT();
   }
   # no $out is the right behavior for standard output
diff --git a/contrib/glilypond/examples/example.groff b/contrib/glilypond/examples/example.groff
new file mode 100644 (file)
index 0000000..59d53f6
--- /dev/null
@@ -0,0 +1,51 @@
+.\" --------------------------------------------------------------------
+.\" Legalese
+.\" --------------------------------------------------------------------
+.
+.ig
+glilypond - integrate 'lilypond' parts into 'groff' files
+
+Source file position:  <groff_source_top>/contrib/glilypond.man
+Installed position:    <prefix>/share/man/man1/glilypond.1
+
+This file was written by Bernd Warken <groff\-bernd.warken\-72@web.de>.
+.
+Copyright (C) 2013-2018 Free Software Foundation, Inc.
+
+Last update: 10 Sep 2015
+
+This file is part of glilypond, which is part of GNU groff, a free
+software project.
+
+You can redistribute it and/or modify it under the terms of the GNU
+General Public License version 2 as published by the Free Software
+Foundation.
+
+The license text is available in the internet at
+.UR http://\%www.gnu.org/\%licenses/\%gpl-2.0.html
+.UE .
+..
+.
+.\" --------------------------------------------------------------------
+.\" Groff Part
+.\" --------------------------------------------------------------------
+.
+before
+.lilypond start
+\version "2.14.2"
+\relative c' {
+  \key c \minor
+  c d e f
+  g(
+  <ees c'>)
+  <d f gis b>-.
+  <ees g bes>-.
+}
+\paper {
+   oddHeaderMarkup = #f
+   evenHeaderMarkup = #f
+   oddFooterMarkup = #f
+   evenFooterMarkup = #f
+}
+.lilypond end
+after
diff --git a/contrib/glilypond/glilypond.1.man b/contrib/glilypond/glilypond.1.man
new file mode 100644 (file)
index 0000000..2a02689
--- /dev/null
@@ -0,0 +1,967 @@
+.TH glilypond @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+glilypond \- integrate lilypond parts into groff
+.
+.\" glilypond - integrate 'lilypond' parts into 'groff' files
+.\" Source file position:  <groff_source_top>/contrib/glilypond.man
+.\" Installed position:    <prefix>/share/man/man1/glilypond.1
+.
+.\" TODO: This page needs a thorough edit by a native English speaker.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2013-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of glilypond, which is part of GNU groff, a free
+.\" software project.
+.\"
+.\" You can redistribute it and/or modify it under the terms of the GNU
+.\" General Public License version 2 (GPL2) as published by the Free
+.\" Software Foundation.
+.\"
+.\" The license text is available in the internet at
+.\" <http://www.gnu.org/licenses/gpl-2.0.html>.
+.
+.
+.\" ====================================================================
+.\" Characters
+.\" ====================================================================
+.
+.\" Ellipsis ...
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
+.\" called with \*(EL
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY glilypond
+.RB [{ \-\-ly2eps | \-\-pdf2eps }]
+.RB [ \-e
+.IR directory ]
+.OP \-k
+.RB [ \-o
+.IR output-file ]
+.RB [ \-p
+.IR filename-prefix ]
+.RB [ \-t
+.IR tdir ]
+.RB [{ \-v | \-V }]
+.OP \-
+.OP \-\-
+.RI [ filespec
+\*(EL]
+.SY glilypond
+.RB [{ \-\-ly2eps | \-\-pdf2eps }]
+.RB [ \-\-eps_dir
+.IR directory ]
+.OP \-\-keep_all
+.RB [ \-\-output
+.IR output-file ]
+.RB [ \-\-prefix
+.IR filename-prefix ]
+.RB [ \-\-temp_dir
+.IR tdir ]
+.OP \-\-verbose
+.OP \-
+.OP \-\-
+.RI [ filespec
+\*(EL]
+.YS
+.
+.SY glilypond
+.B \-?
+.SY glilypond
+.B \-h
+.SY glilypond
+.B \-\-help
+.SY glilypond
+.B \-\-usage
+.YS
+.
+.SY glilypond
+.B \-l
+.SY glilypond
+.B \-\-license
+.YS
+.
+.SY glilypond
+.B \-\-version
+.YS
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B glilypond
+transforms sheet music written in the
+.I lilypond
+language into the
+.BR groff (@MAN7EXT@)
+language using the
+.B .PSPIC
+request, such that
+.BR groff (@MAN1EXT@)
+can transform it into a format that can be displayed directly.
+.
+.B .PDFPIC
+is available, but does on yet work with lilypond.
+.
+.
+.P
+Files in
+.I groff
+language and
+.I "standard input"
+can be provided as arguments.
+.
+.
+.\" ====================================================================
+.SH "WORKING GLILYPOND"
+.\" ====================================================================
+.
+Together with
+.BR .PSPIC ,
+.B glilypond can work only for
+.I troff
+devices without
+.I PDF
+and
+.I X
+devices.
+.
+.
+.P
+I.e., the following
+.B groff
+devices work,
+.BR \-Tps ,
+.BR \-Tdvi ,
+.BR \-Thtml ,
+and
+.BR \-Txhtml .
+.
+.
+.P
+I'm not sure about the
+.B ldp
+and
+.B lj4
+devices.
+.
+.
+.P
+In
+.BR groffer ,
+it is easier to use the following device options, either
+.
+.BR \-\-ps ,
+.BR \-\-div ,
+.BR \-\-html ,
+or
+.BR \-\-xhtml .
+.
+.
+.P
+Unfortunately, the
+.B groff
+option
+.B \-Tpdf
+does not work and the
+.B groffer
+default
+.I PDF
+works neither.
+.
+.
+.P
+But
+.B groffer
+has an additional
+.IR "pdf mode" ,
+not available in
+.BR groff .
+.
+It is based on the
+.I ps mode
+in
+.B groff
+and is called through
+.B groffer \-\-pdf2
+.IR roff-file-with-lilypond .
+.
+.
+.\" ====================================================================
+.SH "OPTION OVERVIEW"
+.\" ====================================================================
+.
+.\" ====================================================================
+.SS "Breaking Options"
+.\" ====================================================================
+.
+.nh
+.nf
+.TP
+.BR \-? | \-h | \-\-help | \-\-usage
+Print help or usage information, then leave the program.
+.
+.TP
+.B \-\-version
+Print version information.
+.
+.TP
+.BR \-l | \-\-license
+Print license information.
+.fi
+.hy
+.
+.
+.\" ====================================================================
+.SS "Options for building EPS Files"
+.\" ====================================================================
+.
+.TP
+.OP \-\-ly2eps
+Here the
+.B lilypond
+program creates
+.I eps
+files directly.
+.
+This is the default.
+.
+.
+.TP
+.OP \-\-pdf2eps
+The program
+.B glilypond
+generates a
+.I PDF
+file using
+.BR lilypond .
+.
+Then the
+.I eps
+file is generated by
+.B pdf2ps
+and
+.BR ps2eps R .
+.
+.
+.\" ====================================================================
+.SS "Directories and Files"
+.\" ====================================================================
+.
+.TP
+.BR \-e | \-\-eps_dir "\fI directory_name\fP"
+Normally all
+.I EPS
+files are sent to the temporary directory.
+.
+With this option, you can generate your own directory, in which all useful
+.I EPS
+files are send.
+.
+So at last, the temporary directory can be removed.
+.
+.
+.TP
+.BR \-p | \-\-prefix "\fI begin_of_name\fP"
+Normally all temporary files get names that start with the
+.BI ly \*(EL
+prefix.
+.
+With this option, you can freely change this prefix.
+.
+.
+.TP
+.BR \-k | \-\-keep_all
+Normally all temporary files without the
+.I eps
+files are deleted.
+.
+With this option, all generated files either by the
+.B lilypond
+program or other format transposers are kept.
+.
+.
+.TP
+.BR \-t | \-\-temp_dir "\fI dir\fP"
+With this option, you call a directory that is the base for the
+temporary directory.
+.
+This directory name is used as is without any extensions.
+.
+If this directory does not exist it is be created.
+.
+The temporary directory is created by Perl's security operations
+directly under this directory.
+.
+In this temporary directory, the temporary files are stored.
+.
+.
+.\" ====================================================================
+.SS "Output"
+.\" ====================================================================
+.
+.TP
+.BR \-o | \-\-output "\fI file_name\fP"
+Normally all
+.I groff
+output of this program is sent to
+.BR STDOUT .
+.
+With this option, that can be changed, such that the output is stored
+into a file named in the option argument
+.IR file_name .
+.
+.
+.TP
+.BR \-v | \-V | \-\-verbose
+A lot more of information is sent to STDERR.
+.
+.
+.\" ====================================================================
+.SS "Short Option Collections"
+.\" ====================================================================
+.
+The argument handling of options
+.
+.
+.P
+.I "Short options"
+are arguments that start with a single dash
+.BR \- .
+.
+Such an argument can consist of arbitrary many options without option
+argument, composed as a collection of option characters following the
+single dash.
+.
+.
+.P
+Such a collection can be terminated by an option character that
+expects an option argument.
+.
+If this option character is not the last character of the argument,
+the following final part of the argument is the option argument.
+.
+If it is the last character of the argument, the next argument is
+taken as the option argument.
+.
+.
+.P
+This is the standard for
+.I POSIX
+and
+.I GNU
+option management.
+.
+.
+.P
+For example,
+.
+.TP
+.BI \-kVe " some_dir"
+is a collection of the short options
+.B \-k
+and
+.B \-V
+without option argument, followed by the short option
+.B \-e
+with option argument that is the following part of the argument
+.IR some_dir .
+.
+So this argument could also be written as several arguments
+.B \-k \-V \-e
+.IR some_dir .
+.
+.
+.\" ====================================================================
+.SS "Handling of Long Options"
+.\" ====================================================================
+.
+Arguments that start with a double dash
+.B \-\-
+are so-called
+.I "long options" R .
+.
+Each double dash argument can only have a single long option.
+.
+.
+.P
+.I "Long options"
+have or have not an option argument.
+.
+An option argument can be the next argument or can be appended with an
+equal sign
+.B =
+to the same argument as the long option.
+.
+.
+.TP
+.B \-\-help
+is a long option without an option argument.
+.
+.TP
+.BI \-\-eps_dir " some_dir"
+.TQ
+.BI \-\-eps_dir= some_dir
+is the long option
+.B \-\-eps_dir
+with the option argument
+.IR some_dir .
+.
+.
+.P
+Moreover the program allows abbreviations of long options, as much as
+possible.
+.
+.
+.P
+The
+.I "long option"
+.B \-\-keep_all
+can be abbreviated from
+.B \-\-keep_al
+up to
+.B \-\-k
+because the program does not have another
+.I "long option"
+whose name starts with the character
+.BR k .
+.
+.
+.P
+On the other hand, the option
+.B \-\-version
+cannot be abbreviated further than
+.B \-\-vers
+because there is also the
+.I long option
+.B \-\-verbose
+that can be abbreviated up to
+.BR \-\-verb .
+.
+.
+.P
+An option argument can also be appended to an abbreviation.
+.
+So is
+.BI \-\-e= some_dir
+the same as
+.B \-\-eps_dir
+.IR some_dir .
+.
+.
+.P
+Moreover the program allows an arbitrary usage of upper and lower case
+in the option name.
+.
+This is
+.I Perl
+style.
+.
+.
+.P
+For example, the
+.I "long option"
+.B \-\-keep_all
+can as well be written as
+.B \-\-Keep_All
+or even as an abbreviation like
+.BR \-\-KeE .
+.
+.
+.\" ====================================================================
+.SH FILESPEC ARGUMENTS
+.\" ====================================================================
+.
+An argument that is not an option or an option argument is called a
+.I filespec
+argument.
+.
+.
+.P
+Without any
+.I filespec
+argument,
+.I "standard input"
+is read.
+.
+.
+.P
+Each
+.I filespec
+argument must either be the name of a readable file or a dash
+.B \-
+for
+.IR "standard input" .
+.
+Each input must be written in the
+.I roff
+or
+.I groff
+language and can include
+.I lilypond
+parts.
+.
+.
+.P
+Normally arguments starting with a dash
+.B \-
+are interpreted as an option.
+.
+But if you use an argument that consists only of a doubled dash
+.B \-\- R ,
+all following arguments are taken as
+.I filespec
+argument, even if such an argument starts with a dash.
+.
+This is handled according to the
+.I GNU
+standard.
+.
+.
+.\" ====================================================================
+.SH "THE LILYPOND PARTS IN ROFF INPUT"
+.\" ====================================================================
+.
+.\" ====================================================================
+.SS "Integrated Lilypond Codes"
+.\" ====================================================================
+.
+A
+.I lilypond
+part within a structure written in the
+.I groff
+language is the whole part between the marks
+.RS
+.EX
+.B ".lilypond start"
+.EE
+.RE
+and
+.RS
+.EX
+.B ".lilypond end"
+.EE
+.RE
+.
+.
+.P
+A
+.I groff
+input can have several of these
+.I lilypond
+parts.
+.
+.
+.P
+When processing such a
+.I lilypond
+part between
+.B ".lilypond start"
+and
+.B ".lilypond end"
+we say that the
+.B glilypond
+program is in
+.IR "lilypond mode" .
+.
+.
+.P
+These
+.I lilypond
+parts are sent into temporary
+.I lilypond
+files with the file name extension
+.BR .ly .
+.
+These files are transformed later on into
+.I EPS
+files.
+.
+.
+.\" ====================================================================
+.SS "Inclusion of ly-Files"
+.\" ====================================================================
+.
+An additional command line for file inclusion of
+.I lilypond
+files is given by
+.EX
+.BI ".lilypond include" " file_name"
+.EE
+in
+.I groff
+input.
+.
+For each such
+.I include
+command, one file of
+.I lilypond
+code can be included into the
+.I groff
+code.
+.
+Arbitrarily many of these commands can be included in the
+.I groff
+input.
+.
+.
+.P
+These include commands can only be used outside the
+.I lilypond
+parts.
+.
+Within the
+.IR "lilypond mode" ,
+this inclusion is not possible.
+.
+So
+.B ".lilypond include"
+may not be used in
+.IR "lilypond mode" ,
+i.e.\& between
+.B ".lilypond start"
+and
+.BR ".lilypond end" .
+.
+.
+These included
+.IR ly -files
+are also transformed into
+.I EPS
+files.
+.
+.
+.\" ====================================================================
+.SH "GENERATED FILES"
+.\" ====================================================================
+.
+By the transformation process of
+.I lilypond
+parts into
+.I EPS
+files, there are many files generated.
+.
+By default, these files are regarded as temporary files and as such
+stored in a temporary directory.
+.
+.
+.P
+This process can be changed by command-line options.
+.
+.
+.\" ====================================================================
+.SS "Command Line Options for Directories"
+.\" ====================================================================
+.
+The temporary directory for this program is either created
+automatically or can be named by the option
+.BR \-t | \-\-temp_dir
+.IR dir .
+.
+.
+.P
+Moreover, the
+.I EPS
+files that are later on referred by
+.B .PSPIC
+command in the final
+.I groff
+output can be stored in a different directory that can be set by the
+command-line option
+.BR \-e | \-\-eps_dir
+.IR directory_name .
+.
+With this option, the temporary directory can be removed completely at
+the end of the program.
+.
+.
+.P
+The beginning of the names of the temporary files can be set by the
+command-line option
+.OP \-p | \-\-prefix
+.IR begin_of_name .
+.
+.
+.P
+All of the temporary files except the
+.I EPS
+files are deleted finally.
+.
+This can be changed by setting the command-line option
+.OP \-k | \-\-keep_files .
+.
+With this, all temporary files and directories are kept, not deleted.
+.
+.
+.P
+These
+.I EPS
+files are stored in a temporary or
+.I EPS
+directory.
+.
+But they cannot be deleted by the transformation process because they
+are needed for the display which can take a long time.
+.
+.
+.\" ====================================================================
+.SH "TRANSFORMATION PROCESSES FOR GENERATING EPS FILES"
+.\" ====================================================================
+.
+.\" ====================================================================
+.SS "Mode pdf2eps"
+.\" ====================================================================
+.
+This mode is the actual default and can also be chosen by the option
+.BR \-\-pdf2eps .
+.
+.
+.P
+In this mode, the
+.B .ly
+files are transformed by the
+.BR lilypond (1)
+program into
+.I PDF
+files, using
+.RS
+.EX
+.BI "lilypond \-\-pdf \-\-output=" file-name
+.EE
+.RE
+for each
+.B .ly
+file.
+.
+The
+.I file-name
+must be provided without the extension
+.BR .pdf .
+.
+By this process, a file
+.IB file-name .pdf
+is generated.
+.
+.
+.P
+The next step is to transform these
+.I PDF
+files into a
+.I PS
+file.
+.
+This is done by the
+.BR pdf2ps (1)
+program using
+.RS
+.EX
+\fR$ \fP \fBpdf2ps\fP \fIfile-name\fP \fB.pdf\fP \fIfile-name\fP \fB.ps\fP
+.EE
+.RE
+.
+.
+The next step creates an
+.I EPS
+file from the
+.I PS
+file.
+.
+This is done by the
+.BR ps2eps (1)
+program using
+.RS
+.EX
+.RB "$ " "ps2eps " \fIfile-name\fP ".ps"
+.EE
+.RE
+.
+.
+.P
+By that, a file
+.IB file-name .eps
+is created for each
+.I lilypond
+part in the
+.I groff
+file or standard input.
+.
+.
+.P
+The last step to be done is replacing all
+.I lilypond
+parts by the
+.I groff
+command
+.RS
+.EX
+.BI ".PSPIC " file-name .eps
+.EE
+.RE
+.
+.
+.\" ====================================================================
+.SS "Mode ly2eps"
+.\" ====================================================================
+.
+In earlier time, this mode was the default.
+.
+But now it does not work any more, so accept the new default
+.BR pdf2eps .
+.
+For testing, this mode can also be chosen by the
+.B glilypond
+option
+.BR \-\-ly2eps .
+.
+.
+.P
+In this mode, the
+.B .ly
+files are transformed by the
+.B lilypond
+program into many files of different formats, including
+.I eps
+files, using
+.RS
+.EX
+.BI "$ lilypond \-\-ps \-dbackend=eps \-dgs\-load\-fonts \-\-output=" file\-name
+.EE
+.RE
+for each
+.B .ly
+file.
+.
+The output
+.I file\-name
+must be provided without an extension, its directory is temporary.
+.
+.
+.P
+There are many
+.I EPS
+files created.
+.
+One having the complete transformed
+.B ly
+file, named
+.IB file\-name .eps \fR.\fP
+.
+.
+.P
+Moreover there are
+.I EPS
+files for each page, named
+.IB file\-name \- digit .eps \fR.\fP
+.
+.
+.P
+The last step to be done is replacing all
+.I lilypond
+parts by the collection of the corresponding
+.I EPS
+page files.
+.
+This is done by
+.I groff
+commands
+.EX
+.BI ".PSPIC " file-name \- digit .eps
+.EE
+.
+.
+.\" ====================================================================
+.SH "THE GENERATED NEW ROFF STRUCTURE"
+.\" ====================================================================
+.
+The new
+.BR groff (@MAN7EXT@)
+structure generated by
+.B glilypond
+is either
+.
+.TP
+1)
+sent to standard output and can there be saved into a file or piped into
+.BR groff (@MAN1EXT@)
+or
+.BR groffer (@MAN1EXT@)
+or
+.
+.TP
+2)
+stored into a file by given the option
+.BR \-o\ \~| \~\-\-output
+.I file_name
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.B glilypond
+was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.TP
+.BR groff (@MAN1EXT@)
+describes the usage of the
+.I groff
+command and contains pointers to further documentation of the
+.I groff
+system.
+.
+.
+.TP
+.BR groff_tmac (@MAN5EXT@)
+describes the
+.B .PSPIC
+request.
+.
+.
+.TP
+.BR lilypond (1)
+briefly describes the
+.B lilypond
+command and contains pointers to further documentation.
+.
+.
+.TP
+.BR pdf2ps (1)
+transforms a
+.I PDF
+file into a
+.I PostScript
+format.
+.
+.
+.TP
+.BR ps2eps (1)
+transforms a
+.I PS
+file into an
+.I EPS
+format.
+.
+.
+.\" ====================================================================
+.\" Emacs settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/glilypond/glilypond.am b/contrib/glilypond/glilypond.am
new file mode 100644 (file)
index 0000000..4dd88fe
--- /dev/null
@@ -0,0 +1,76 @@
+# Automake rules for 'glilypond'
+
+# File position: <groff-source>/contrib/lilypond/glilypond.am
+
+# Copyright (C) 2013-2018 Free Software Foundation, Inc.
+# Written by Werner Lemberg <wl@gnu.org> and
+# Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
+
+# Last update: 22 Aug 2015
+
+# This file is part of 'glilypond' which is part of 'groff'.
+
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+########################################################################
+glilypond_srcdir = $(top_srcdir)/contrib/glilypond
+bin_SCRIPTS += glilypond
+man1_MANS += contrib/glilypond/glilypond.1
+
+# files going to lib directory '$(glilypond_dir)'
+# TODO glilypond_dir is subsitued by configure.ac, check if this could be removed
+glilyponddir = $(glilypond_dir)
+dist_glilypond_DATA = \
+  contrib/glilypond/subs.pl \
+  contrib/glilypond/oop_fh.pl \
+  contrib/glilypond/args.pl
+
+EXTRA_DIST += \
+  contrib/glilypond/ChangeLog \
+  contrib/glilypond/ChangeLog.0x \
+  contrib/glilypond/glilypond.1.man \
+  contrib/glilypond/glilypond.pl \
+  contrib/glilypond/README.txt \
+  contrib/glilypond/examples/example.groff
+
+
+# create perl executable 'glilypond', being stored into 'bindir'
+glilypond: $(glilypond_srcdir)/glilypond.pl shdeps.sed
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f "$(SH_DEPS_SED_SCRIPT)" \
+              -e "s|[@]g[@]|$(g)|g" \
+              -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+              -e "s|[@]glilypond_dir[@]|$(DESTDIR)$(glilypond_dir)|g" \
+              -e "s|[@]VERSION[@]|$(VERSION)|g" \
+              $(glilypond_srcdir)/glilypond.pl \
+              >$@ \
+       && chmod +x $@
+
+uninstall_groffdirs: uninstall-glilypond-hook
+uninstall-glilypond-hook:
+       if test -d $(DESTDIR)$(glilyponddir); then \
+         rmdir $(DESTDIR)$(glilyponddir); \
+       fi
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/contrib/glilypond/glilypond.man b/contrib/glilypond/glilypond.man
deleted file mode 100644 (file)
index 74bc2d5..0000000
+++ /dev/null
@@ -1,869 +0,0 @@
-.TH glilypond @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-glilypond \(em integrate lilypond parts into groff
-.
-.\" This .SH was moved to this place in order to appease `apropos'.
-.
-.\" glilypond - integrate `lilypond' parts into `groff' files
-.\" Source file position:  <groff_source_top>/contrib/glilypond.man
-.\" Installed position:    <prefix>/share/man/man1/glilypond.1
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2013-2014 Free Software Foundation, Inc.
-
-This file is part of glilypond, which is part of GNU groff, a free
-software project.
-
-You can redistribute it and/or modify it under the terms of the GNU
-General Public License version 2 (GPL2) as published by the Free
-Software Foundation.
-
-The license text is available in the internet at
-.UR http://\%www.gnu.org/\%licenses/\%gpl-2.0.html
-.UE .
-..
-.
-.de au
-This document was written by
-.MT groff\-bernd.warken\-72@web.de
-Bernd Warken
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Characters
-.\" --------------------------------------------------------------------
-.
-.\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
-.\" called with \*(EL
-.
-.ad l
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY glilypond
-.OP \& options
-.OP \-
-.OP \-\-
-.OP \& "\%filespec \*(EL"
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B glilypond
-transforms sheet music written in the
-.I lilypond
-language into the
-.BR groff (@MAN7EXT@)
-language using the
-.B .PSPIC
-request, such that
-.BR groff (@MAN1EXT@)
-can transform it into a format that can be displayed directly.
-.
-.
-.P
-Files in
-.I groff
-language and
-.I "standard input"
-can be provided as arguments.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "OPTION OVERVIEW"
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.SS "Breaking Options"
-.\" --------------------------------------------------------------------
-.
-.nh
-.nf
-.TP
-.BR \-? | \-h | \-\-help | \-\-usage
-Print help or usage information, then leave the program.
-.
-.TP
-.B \-\-version
-Print version information.
-.
-.TP
-.BR \-l | \-\-license
-Print license information.
-.fi
-.hy
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Options for building EPS Files"
-.\" --------------------------------------------------------------------
-.
-.TP
-.OP \-\-ly2eps
-Here the
-.B lilypond
-program creates
-.I eps
-files directly.
-.
-This is the default.
-.
-.
-.TP
-.OP \-\-pdf2eps
-The program
-.B glilypond
-generates a
-.I pdf
-file using
-.BR lilypond .
-.
-Then the
-.I eps
-file is generated by
-.B pdf2ps
-and
-.BR ps2eps R .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Directories and Files"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BR \-e | \-\-eps_dir "\fI directory_name\fP"
-Normally all
-.I EPS
-files are sent to the temporary directory.
-.
-With this option, you can generate your own directory, in which all useful
-.I EPS
-files are send.
-.
-So at last, the temporary directory can be removed.
-.
-.
-.TP
-.BR -p | --prefix "\fI begin_of_name\fP"
-Normally all temporary files get names that start with the
-.BI ly \*(EL
-prefix.
-.
-With this option, you can freely change this prefix.
-.
-.
-.TP
-.BR -k | --keep_all
-Normally all temporary files without the
-.I eps
-files are deleted.
-.
-With this option, all generated files either by the
-.B lilypond
-program or other format transposers are kept.
-.
-.
-.TP
-.BR -t | --temp_dir "\fI dir\fP"
-With this option, you call a directory that is the base for the
-temporary directory.
-.
-This directory name is used as is without any extensions.
-.
-If this directory does not exist it is be created.
-.
-The temporary directory is created by Perl's security operations
-directly under this directory.
-.
-In this temporary directory, the temporary files are stored.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Output"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BR -o | --output "\fI file_name\fP"
-Normally all
-.I groff
-output of this program is sent to
-.BR STDOUT R .
-.
-With this option, that can be changed, such that the output is stored
-into a file named in the option argument
-.IR file_name .
-.
-.
-.TP
-.BR -v | -V | --verbose
-A lot more of information is sent to STDERR.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Short Option Collections"
-.\" --------------------------------------------------------------------
-.
-The argument handling of options
-.
-.
-.P
-.I "Short options"
-are arguments that start with a single dash
-.BR \- .
-.
-Such an argument can consist of arbitrary many options without option
-argument, composed as a collection of option characters following the
-single dash.
-.
-.
-.P
-Such a collection can be terminated by an option character that
-expects an option argument.
-.
-If this option character is not the last character of the argument,
-the following final part of the argument is the option argument.
-.
-If it is the last character of the argument, the next argument is
-taken as the option argument.
-.
-.
-.P
-This is the standard for
-.I POSIX
-and
-.I GNU
-option management.
-.
-.
-.P
-For example,
-.
-.TP
-.BI \-kVe " some_dir"
-is a collection of the short options
-.B \-k
-and
-.B \-V
-without option argument, followed by the short option
-.B \-e
-with option argument that is the following part of the argument
-.IR some_dir .
-.
-So this argument could also be written as several arguments
-.B \-k \-V \-e
-.IR some_dir .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Handling of Long Options"
-.\" --------------------------------------------------------------------
-.
-Arguments that start with a double dash
-.B \-\-
-are so-called
-.I "long options" R .
-.
-Each double dash argument can only have a single long option.
-.
-.
-.P
-.I "Long options"
-have or have not an option argument.
-.
-An option argument can be the next argument or can be appended with an
-equal sign
-.B =
-to the same argument as the long option.
-.
-.
-.TP
-.B \-\-help
-is a long option without an option argument.
-.
-.TP
-.BI \-\-eps_dir " some_dir"
-.TQ
-.BI \-\-eps_dir= some_dir
-is the long option
-.B \-\-eps_dir
-with the option argument
-.IR some_dir .
-.
-.
-.P
-Moreover the program allows abbreviations of long options, as much as
-possible.
-.
-.
-.P
-The
-.I "long option"
-.B \-\-keep_all
-can be abbreviated from
-.B \-\-keep_al
-up to
-.B \-\-k
-because the program does not have another
-.I "long option"
-whose name starts with the character
-.BR k .
-.
-.
-.P
-On the other hand, the option
-.B \-\-version
-cannot be abbreviated further than
-.B \-\-vers
-because there is also the
-.I long option
-.B \-\-verbose
-that can be abbreviated up to
-.BR \-\-verb .
-.
-.
-.P
-An option argument can also be appended to an abbreviation.
-.
-So is
-.BI \-\-e= some_dir
-the same as
-.B \-\-eps_dir
-.IR some_dir .
-.
-.
-.P
-Moreover the program allows an arbitrary usage of upper and lower case
-in the option name.
-.
-This is
-.I Perl
-style.
-.
-.
-.P
-For example, the
-.I "long option"
-.B \-\-keep_all
-can as well be written as
-.B \-\-Keep_All
-or even as an abbreviation like
-.BR \-\-KeE .
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILESPEC ARGUMENTS
-.\" --------------------------------------------------------------------
-.
-An argument that is not an option or an option argument is called a
-.I filespec
-argument.
-.
-.
-.P
-Without any
-.I filespec
-argument,
-.I "standard input"
-is read.
-.
-.
-.P
-Each
-.I filespec
-argument must either be the name of a readable file or a dash
-.B \-
-for
-.IR "standard input" .
-.
-Each input must be written in the
-.I roff
-or
-.I groff
-language and can include
-.I lilypond
-parts.
-.
-.
-.P
-Normally arguments starting with a dash
-.B \-
-are interpreted as an option.
-.
-But if you use an argument that consists only of a doubled dash
-.B \-\- R ,
-all following arguments are taken as
-.I filespec
-argument, even if such an argument starts with a dash.
-.
-This is handled according to the
-.I GNU
-standard.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "THE LILYPOND PARTS IN ROFF INPUT"
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.SS "Integrated Lilypond Codes"
-.\" --------------------------------------------------------------------
-.
-A
-.I lilypond
-part within a structure written in the
-.I groff
-language is the whole part between the marks
-.RS
-.EX
-.B ".lilypond start"
-.EE
-.RE
-and
-.RS
-.EX
-.B ".lilypond end"
-.EE
-.RE
-.
-.
-.P
-A
-.I groff
-input can have several of these
-.I lilypond
-parts.
-.
-.
-.P
-When processing such a
-.I lilypond
-part between
-.B ".lilypond start"
-and
-.B ".lilypond end"
-we say that the
-.B glilypond
-program is in
-.IR "lilypond mode" .
-.
-.
-.P
-These
-.I lilypond
-parts are sent into temporary
-.I lilypond
-files with the file name extension
-.BR .ly .
-.
-These files are transformed later on into
-.I EPS
-files.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Inclusion of ly-Files"
-.\" --------------------------------------------------------------------
-.
-An additional command line for file inclusion of
-.I lilypond
-files is given by
-.EX
-.BI ".lilypond include" " file_name"
-.EE
-in
-.I groff
-input.
-.
-For each such
-.I include
-command, one file of
-.I lilypond
-code can be included into the
-.I groff
-code.
-.
-Arbitrarily many of these commands can be included in the
-.I groff
-input.
-.
-.
-.P
-These include commands can only be used outside the
-.I lilypond
-parts.
-.
-Within the
-.IR "lilypond mode" ,
-this inclusion is not possible.
-.
-So
-.B ".lilypond include"
-may not be used in
-.IR "lilypond mode" ,
-i.e.\& between
-.B ".lilypond start"
-and
-.BR ".lilypond end" .
-.
-.
-These included
-.IR ly -files
-are also transformed into
-.I EPS
-files.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "GENERATED FILES"
-.\" --------------------------------------------------------------------
-.
-By the transformation process of
-.I lilypond
-parts into
-.I EPS
-files, there are many files generated.
-.
-By default, these files are regarded as temporary files and as such
-stored in a temporary directory.
-.
-.
-.P
-This process can be changed by command line options.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Command Line Options for Directories"
-.\" --------------------------------------------------------------------
-.
-The temporary directory for this program is either created
-automatically or can be named by the option
-.BR -t | --temp_dir
-.IR dir .
-.
-.
-.P
-Moreover, the
-.I EPS
-files that are later on referred by
-.B .PSPIC
-command in the final
-.I groff
-output can be stored in a different directory that can be set by the
-command line option
-.BR -e | --eps_dir
-.IR directory_name .
-.
-With this option, the temporary directory can be removed completely at
-the end of the program.
-.
-.
-.P
-The beginning of the names of the temporary files can be set by the
-command line option
-.OP -p | --prefix
-.IR begin_of_name .
-.
-.
-.P
-All of the temporary files except the
-.I EPS
-files are deleted finally.
-.
-This can be changed by setting the command line option
-.OP -k | --keep_files .
-.
-With this, all temporary files and directories are kept, not deleted.
-.
-.
-.P
-These
-.I EPS
-files are stored in a temporary or
-.I EPS
-directory.
-.
-But they cannot be deleted by the transformation process because they
-are needed for the display which can take a long time.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "TRANSFORMATION PROCESSES FOR GENERATING EPS FILES"
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.SS "Mode ly2eps"
-.\" --------------------------------------------------------------------
-.
-This mode is the default.
-.
-It can also be chosen by the option
-.BR --ly2eps .
-.
-.
-.P
-In this mode, the
-.B .ly
-files are transformed by the
-.B lilypond
-program into many files of different formats, including
-.I eps
-files, using
-.RS
-.EX
-.BI "$ lilypond \-\-ps \-dbackend=eps \-dgs\-load\-fonts \-\-output=" file\-name
-.EE
-.RE
-for each
-.B .ly
-file.
-.
-The output
-.I file\-name
-must be provided without an extension, its directory is temporary.
-.
-.
-.P
-There are many
-.I EPS
-files created.
-.
-One having the complete transformed
-.B ly
-file, named
-.IB file\-name .eps \fR.\fP
-.
-.
-.P
-Moreover there are
-.I EPS
-files for each page, named
-.IB file\-name \- digit .eps \fR.\fP
-.
-.
-.P
-The last step to be done is replacing all
-.I lilypond
-parts by the collection of the corresponding
-.I EPS
-page files.
-.
-This is done by
-.I groff
-commands
-.EX
-.BI ".PSPIC " file-name \- digit .eps
-.EE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Mode pdf2eps"
-.\" --------------------------------------------------------------------
-.
-This mode can be chosen by the option
-.BR --pdf2eps .
-.
-.
-.P
-In this mode, the
-.B .ly
-files are transformed by the
-.BR lilypond (1)
-program into
-.I pdf
-files, using
-.RS
-.EX
-.BI "lilypond \-\-pdf \-\-output=" file-name
-.EE
-.RE
-for each
-.B .ly
-file.
-.
-The
-.I file-name
-must be provided without the extension
-.BR .pdf .
-.
-By this process, a file
-.IB file-name .pdf
-is generated.
-.
-.
-.P
-The next step is to transform these
-.I PDF
-files into a
-.I PS
-file.
-.
-This is done by the
-.BR pdf2ps (1)
-program using
-.RS
-.EX
-\fR$ \fP \fBpdf2ps\fP \fIfile-name\fP \fB.pdf\fP \fIfile-name\fP \fB.ps\fP
-.EE
-.RE
-.
-.
-The next step creates an
-.I EPS
-file from the
-.I PS
-file.
-.
-This is done by the
-.BR ps2eps (1)
-program using
-.RS
-.EX
-.RB "$ " "ps2eps " \fIfile-name\fP ".ps"
-.EE
-.RE
-.
-.
-.P
-By that, a file
-.IB file-name .eps
-is created for each
-.I lilypond
-part in the
-.I groff
-file or standard input.
-.
-.
-.P
-The last step to be done is replacing all
-.I lilypond
-parts by the
-.I groff
-command
-.RS
-.EX
-.BI ".PSPIC " file-name .eps
-.EE
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "THE GENERATED NEW ROFF STRUCTURE"
-.\" --------------------------------------------------------------------
-.
-The new
-.BR groff (@MAN7EXT@)
-structure generated by
-.B glilypond
-is either
-.
-.TP
-1)
-sent to standard output and can there be saved into a file or piped into
-.BR groff (@MAN1EXT@)
-or
-.BR groffer (@MAN1EXT@)
-or
-.
-.TP
-2)
-stored into a file by given the option
-.BR \-o\ \~| \~\-\-output
-.I file_name
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BR groff (@MAN1EXT@)
-the usage of the groff program and pointers to the documentation and
-availability of the
-.I groff
-system.
-.
-The main source of information for the
-.I groff
-system is the
-.I groff
-.BR info (1)
-file.
-.
-.
-.TP
-.BR groff (@MAN7EXT@)
-documents the
-.I groff
-language.
-.
-.
-.TP
-.BR groff_tmac (@MAN5EXT@)
-contains documentation of the
-.B .PSPIC
-request.
-.
-.
-.TP
-.BR lilypond (1)
-The documentation of the
-.B lilypond
-program.
-.
-The main source of information for the
-.I lilypond
-language is the
-.I lilypond
-.BR info (1)
-file.
-.
-.
-.TP
-.BR pdf2ps (1)
-transform a
-.I PDF
-file into a
-.I Postscript
-format.
-.
-.
-.TP
-.BR ps2eps (1)
-transform a
-.I PS
-file into an
-.I EPS
-format.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 6f8dd838b4906adab2adec21137f216254ca32db..868801b22746445cf5c83fcd99f264f3a3159bbb 100755 (executable)
@@ -6,14 +6,14 @@ package main;
 # debugging
 ########################################################################
 
-# See `Mastering Perl', chapter 4.
+# See 'Mastering Perl', chapter 4.
 
 # use strict;
 # use warnings;
 # use diagnostics;
 
 use Carp;
-$SIG[__DIE__] = sub { &Carp::croak; };
+$SIG{__DIE__} = sub { &Carp::croak; };
 
 use Data::Dumper;
 
@@ -26,31 +26,33 @@ our $Legalese;
 {
   use constant VERSION => 'v1.3.1'; # version of glilypond
 
-### This constant `LICENSE' is the license for this file `GPL' >= 2
+### This constant 'LICENSE' is the license for this file 'GPL' >= 2
   use constant LICENSE => q*
-glilypond - integrate `lilypond' into `groff' files
+glilypond - integrate 'lilypond' into 'groff' files
 
-Source file position: `<groff-source>/contrib/glilypond/glilypond.pl'
-Installed position: `<prefix>/bin/glilypond'
+Source file position: '<groff-source>/contrib/glilypond/glilypond.pl'
+Installed position: '<prefix>/bin/glilypond'
 
-Copyright (C) 2013-2014 Free Software Foundation, Inc.
+Copyright (C) 2013-2018 Free Software Foundation, Inc.
   Written by Bernd Warken <groff-bernd.warken-72@web.de>
 
-This file is part of `GNU groff'.
+Last update: 10 Sep 2015
 
-  `GNU groff' 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
+This file is part of 'GNU groff'.
+
+  'GNU groff' 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.
 
-  `GNU groff' is distributed in the hope that it will be useful, but
+  'GNU groff' 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
+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 `groff', see the files `COPYING' and `LICENSE' in the top
-directory of the `groff' source package.  If not, see
+  You should have received a copy of the 'GNU General Public License'
+along with 'groff', see the files 'COPYING' and 'LICENSE' in the top
+directory of the 'groff' source package.  If not, see
 <http://www.gnu.org/licenses/>.
 *;
 
@@ -102,8 +104,8 @@ BEGIN {
   {
     ( my $volume, my $directory, $Globals->{'prog'} ) =
       File::Spec->splitpath($0);
-    # $Globals->{'prog'} is `glilypond' when installed,
-    # `glilypond.pl' when not
+    # $Globals->{'prog'} is 'glilypond' when installed,
+    # 'glilypond.pl' when not
   }
 
 
@@ -114,7 +116,7 @@ BEGIN {
 
   {
     {
-      # script before run of `make'
+      # script before run of 'make'
       my $at = '@';
       $Globals->{'before_make'} = TRUE if '@VERSION@' eq "${at}VERSION${at}";
     }
@@ -134,7 +136,7 @@ BEGIN {
 
     unshift(@INC, $glilypond_libdir);
 
-    umask 0077; # octal output: `printf "%03o", umask;'
+    umask 0077; # octal output: 'printf "%03o", umask;'
   }
 
   require 'subs.pl';
@@ -150,7 +152,7 @@ require 'oop_fh.pl';
 our $stdout = new FH_STDOUT();
 our $stderr = new FH_STDERR();
 
-# verbose printing, not clear wether this will be set by `--verbose',
+# verbose printing, not clear wether this will be set by '--verbose',
 # so store this now into a string, which can be gotten later on, when
 # it will become either STDERR or /dev/null
 our $v = new FH_STRING();
@@ -162,41 +164,41 @@ our $out;
 
 
 ########################################################################
-# Args: command line arguments
+# Args: command-line arguments
 ########################################################################
 
-# command line arguments are handled in 2 runs:
-# 1) split short option collections, `=' optargs, and transfer abbrevs
+# command-line arguments are handled in 2 runs:
+# 1) split short option collections, '=' optargs, and transfer abbrevs
 # 2) handle the transferred options with subs
 
 our $Args =
   {
-   'eps_dir' => EMPTYSTRING, # can be overwritten by `--eps_dir'
+   'eps_dir' => EMPTYSTRING, # can be overwritten by '--eps_dir'
 
-   # `eps-func' has 2 possible values:
-   # 1) `ly' from `--ly2eps' (default)
-   # 2) `pdf' `--pdf2eps'
-   'eps_func' => 'ly',
+   # 'eps-func' has 2 possible values:
+   # 1) 'pdf' '--pdf2eps' (default)
+   # 2) 'ly' from '--ly2eps'
+   'eps_func' => 'pdf',
 
    # files names of temporary files start with this string,
-   # can be overwritten by `--prefix'
+   # can be overwritten by '--prefix'
    'prefix' => 'ly',
 
    # delete or do not delete temporary files
    'keep_all' => FALSE,
 
-   # the roff output goes normally to STDOUT, can be a file with `--output'
+   # the roff output goes normally to STDOUT, can be a file with '--output'
    'output' => EMPTYSTRING,
 
-   # temporary directory, can be overwritten by `--temp_dir',
+   # temporary directory, can be overwritten by '--temp_dir',
    # empty for default of the program
    'temp_dir' => EMPTYSTRING,
 
-   # regulates verbose output (on STDERR), overwritten by `--verbose'
+   # regulates verbose output (on STDERR), overwritten by '--verbose'
    'verbose' => FALSE,
   };
 
-{ # `Args'
+{ # 'Args'
   require 'args.pl';
   &run_first();
   &install_verbose();
@@ -204,7 +206,7 @@ our $Args =
   &handle_args();
 }
 
-# end `Args'
+# end 'Args'
 
 
 ########################################################################
@@ -223,25 +225,25 @@ our $Temp =
    'temp_dir' => EMPTYSTRING,
   };
 
-{ # `Temp'
+{ # 'Temp'
 
   if ( $Args->{'temp_dir'} ) {
 
     #----------
-    # temporary directory was set by `--temp_dir'
+    # temporary directory was set by '--temp_dir'
     #----------
 
     my $dir = $Args->{'temp_dir'};
 
     $dir = &path2abs($dir);
     $dir = &make_dir($dir) or
-      die "The directory `$dir' cannot be used temporarily: $!";
+      die "The directory '$dir' cannot be used temporarily: $!";
 
 
-    # now `$dir' is a writable directory
+    # now '$dir' is a writable directory
 
     opendir( my $dh, $dir ) or
-      die "Could not open temporary directory `$dir': $!";
+      die "Could not open temporary directory '$dir': $!";
     my $file_name;
     my $found = FALSE;
     my $prefix = $Args->{'prefix'};
@@ -275,7 +277,7 @@ our $Temp =
     $Temp->{'temp_dir'} = $dir;
 
 
-  } else { # $Args->{'temp_dir'} not given by `--temp_dir'
+  } else { # $Args->{'temp_dir'} not given by '--temp_dir'
 
     #----------
     # temporary directory was not set
@@ -288,7 +290,7 @@ our $Temp =
        my $tmpdir = File::Spec->tmpdir();
        push @tempdirs, $tmpdir if ( $tmpdir && -d $tmpdir && -w $tmpdir );
 
-       my $root_dir = File::Spec->rootdir(); # `/' in Unix
+       my $root_dir = File::Spec->rootdir(); # '/' in Unix
        my $root_tmp = File::Spec->catdir($root_dir, 'tmp');
        push @tempdirs, $root_tmp
          if ( $root_tmp ne $tmpdir && -d $root_tmp && -w $root_tmp );
@@ -298,7 +300,7 @@ our $Temp =
        my $home_tmp = File::Spec->catdir($home, 'tmp');
        push @tempdirs, $home_tmp if ( -d $home_tmp && -w $home_tmp );
 
-       # `/var/tmp' in Unix
+       # '/var/tmp' in Unix
        my $var_tmp = File::Spec->catdir('', 'var', 'tmp');
        push @tempdirs, $var_tmp if ( -d $var_tmp && -w $var_tmp );
       }
@@ -306,8 +308,8 @@ our $Temp =
 
       my @path_extension = qw( groff ); # TEMPDIR/groff/USER/lilypond/<NUMBER>
       {
-       # `$<' is UID of actual user,
-       # `getpwuid' gets user name in scalar context
+       # '$<' is UID of actual user,
+       # 'getpwuid' gets user name in scalar context
        my $user = getpwuid($<);
        push @path_extension, $user if ( $user );
 
@@ -317,7 +319,7 @@ our $Temp =
 
     TEMPS: foreach ( @tempdirs ) {
 
-       my $dir; # final directory name in `while' loop
+       my $dir; # final directory name in 'while' loop
        $dir = &path2abs($_);
        next TEMPS unless ( $dir );
 
@@ -355,8 +357,8 @@ our $Temp =
 
   } # end temporary directory
 
-  $v->print( "Temporary directory: `" . $Temp->{'temp_dir'} . "'\n" );
-  $v->print( "file_prefix: `" . $Args->{'prefix'} . "'" );
+  $v->print( "Temporary directory: '" . $Temp->{'temp_dir'} . "'\n" );
+  $v->print( "file_prefix: '" . $Args->{'prefix'} . "'" );
 
 
   #----------
@@ -364,7 +366,7 @@ our $Temp =
   #----------
 
   my $make_dir = FALSE;
-  if ( $Args->{'eps_dir'} ) { # set by `--eps_dir'
+  if ( $Args->{'eps_dir'} ) { # set by '--eps_dir'
     my $dir = $Args->{'eps_dir'};
 
     $dir = &path2abs($dir);
@@ -372,7 +374,7 @@ our $Temp =
     if ( -e $dir ) {
       goto EMPTY unless ( -w $dir );
 
-      # `$dir' is writable
+      # '$dir' is writable
       if ( -d $dir ) {
        my $upper_dir = $dir;
 
@@ -401,12 +403,12 @@ our $Temp =
        }
        $make_dir = TRUE;
        $Temp->{'eps_dir'} = $dir;
-      } else { # `$dir' is not a dir, so unlink it to create it as dir
-       if ( unlink $dir ) { # could remove `$dir'
+      } else { # '$dir' is not a dir, so unlink it to create it as dir
+       if ( unlink $dir ) { # could remove '$dir'
          $Temp->{'eps_dir'} = $dir;
          $make_dir = TRUE;
        } else { # could not remove
-         stderr->print(  "Could not use EPS dir `" . $dir .
+         $stderr->print( "Could not use EPS dir '" . $dir .
                          "', use temp dir." );
        } # end of unlink
       } # end test of -d $dir
@@ -415,17 +417,17 @@ our $Temp =
     } # end of if -e $dir
 
 
-    if ( $make_dir ) { # make directory `$dir'
+    if ( $make_dir ) { # make directory '$dir'
       my $made = FALSE;
       $dir = &make_dir($dir) and $made = TRUE;
 
       if ( $made ) {
        $Temp->{'eps_dir'} = $dir;
-       $v->print( "Directory for useful EPS files is `" . $dir . "'." );
+       $v->print( "Directory for useful EPS files is '" . $dir . "'." );
       } else {
-       $v->print( "The EPS directory `" . $dir . "' cannot be used: $!" );
+       $v->print( "The EPS directory '" . $dir . "' cannot be used: $!" );
       }
-    } else { # `--eps_dir' was not set, so take the temporary directory
+    } else { # '--eps_dir' was not set, so take the temporary directory
       $Temp->{'eps_dir'} = $Args->{'temp_dir'};
     } # end of make dir
   }
@@ -434,10 +436,10 @@ our $Temp =
     # EPS-dir not set or available, use temp dir,
     # but leave $Temp->{'}eps_dir'} empty
     $v->print( "Directory for useful EPS files is the " .
-      "temporary directory `" . $Temp->{'temp_dir'} . "'." );
+      "temporary directory '" . $Temp->{'temp_dir'} . "'." );
   }
 
-} # end `Temp'
+} # end 'Temp'
 
 
 ########################################################################
@@ -447,32 +449,32 @@ our $Temp =
 our $Read =
   {
    'file_numbered' => EMPTYSTRING,
-   'file_ly' => EMPTYSTRING, # `$file_numbered.ly'
+   'file_ly' => EMPTYSTRING, # '$file_numbered.ly'
   };
 
 { # read files or stdin
 
   my $ly_number = 0; # number of lilypond file
 
-  # `$Args->{'prefix'}_[0-9]'
+  # '$Args->{'prefix'}_[0-9]'
 
   my $lilypond_mode = FALSE;
 
-  my $arg1; # first argument for `.lilypond'
-  my $arg2; # argument for `.lilypond include'
+  my $arg1; # first argument for '.lilypond'
+  my $arg2; # argument for '.lilypond include'
 
   my $path_ly; # path of ly-file
 
 
-  my $check_file = sub { # for argument of `.lilypond include'
+  my $check_file = sub { # for argument of '.lilypond include'
     my $file = shift; # argument is a file name
     $file = &path2abs($file);
     unless ( $file ) {
-      die "Line `.lilypond include' without argument";
+      die "Line '.lilypond include' without argument";
       return '';
     }
     unless ( -f $file && -r $file ) {
-      die "Argument `$file' in `.lilypond include' is not a readable file";
+      die "Argument '$file' in '.lilypond include' is not a readable file";
     }
 
     return $file;
@@ -493,7 +495,7 @@ our $Read =
      'pdf' => \&create_pdf2eps, # lilypond creates PDF file
     );
 
-  # about lines starting with `.lilypond'
+  # about lines starting with '.lilypond'
 
   my $ly;
   my $fh_include_file;
@@ -501,21 +503,21 @@ our $Read =
     (
 
      'start' => sub {
-       $v->print( "\nline: `.lilypond start'" );
-       die "Line `.lilypond stop' expected." if ( $lilypond_mode );
+       $v->print( "\nline: '.lilypond start'" );
+       die "Line '.lilypond stop' expected." if ( $lilypond_mode );
 
        $lilypond_mode = TRUE;
        &$increase_ly_number;
 
-       $v->print( "ly-file: `" . $path_ly . "'" );
+       $v->print( "ly-file: '" . $path_ly . "'" );
 
        $ly = new FH_FILE($path_ly);
      },
 
 
      'end' => sub {
-       $v->print( "line: `.lilypond end'\n" );
-       die "Expected line `.lilypond start'." unless ( $lilypond_mode );
+       $v->print( "line: '.lilypond end'\n" );
+       die "Expected line '.lilypond start'." unless ( $lilypond_mode );
 
        $lilypond_mode = FALSE;
        $ly->close();
@@ -528,7 +530,7 @@ our $Read =
      },
 
 
-     'include' => sub { # `.lilypond include file...'
+     'include' => sub { # '.lilypond include file...'
 
        # this may not be used within lilypond mode
        next LILYPOND if ( $lilypond_mode );
@@ -540,13 +542,13 @@ our $Read =
        # file can be read now
 
 
-       # `$fh_write_ly' must be opened
+       # '$fh_write_ly' must be opened
        &$increase_ly_number;
 
        $ly = new FH_FILE($path_ly);
 
        my $include = new FH_READ_FILE($file);
-       my $res = $include->read-all(); # is a refernce to an array
+       my $res = $include->read_all(); # is a reference to an array
        foreach ( @$res ) {
         chomp;
         $ly->print($_);
@@ -556,9 +558,9 @@ our $Read =
        if ( exists $eps_subs{ $Args->{'eps_func'} } ) {
         $eps_subs{ $Args->{'eps_func'} }->();
        } else {
-        die "Wrong argument for \$eps_subs: `" . $Args->{'eps_func'} . "'";
+        die "Wrong argument for \$eps_subs: '" . $Args->{'eps_func'} . "'";
        }
-     }, # end `.lilypond include'
+     }, # end '.lilypond include'
 
     ); # end definition %lilypond_args
 
@@ -596,16 +598,16 @@ our $Read =
                  )
                  \s*
                //x;
-      my $arg1 = $1; # `start', `end' or `include'
+      my $arg1 = $1; # 'start', 'end' or 'include'
       $args =~ s/["'`]//g;
-      my $arg2 = $args; # file argument for `.lilypond include'
+      my $arg2 = $args; # file argument for '.lilypond include'
 
       if ( exists $lilypond_args{$arg1} ) {
        $lilypond_args{$arg1}->($arg2);
        next;
       } else {
-       # not a suitable argument of `.lilypond'
-       $stderr->print( "Unknown command: `$arg1' `$arg2':  `$line'" );
+       # not a suitable argument of '.lilypond'
+       $stderr->print( "Unknown command: '$arg1' '$arg2':  '$line'" );
       }
 
       next LILYPOND;
@@ -613,7 +615,7 @@ our $Read =
 
 
     if ( $lilypond_mode ) { # do lilypond-mode
-      # see `.lilypond start'
+      # see '.lilypond start'
       $ly->print( $line );
       next LILYPOND;
     } # do lilypond-mode
@@ -624,7 +626,7 @@ our $Read =
               [.']
               \s*
               lilypond
-            /x ) { # not a `.lilypond' line
+            /x ) { # not a '.lilypond' line
       $out->print($line);
       next LILYPOND;
     }
@@ -643,7 +645,7 @@ END {
 
   if ( $Args->{'keep_all'} ) {
     # With --keep_all, no temporary files are removed.
-    $v->print( "keep_all: `TRUE'" );
+    $v->print( "keep_all: 'TRUE'" );
     $v->print( "No temporary files will be deleted:" );
 
     opendir my $dh_temp, $Temp->{'temp_dir'} or
@@ -669,7 +671,7 @@ END {
   } else { # keep_all is not set
     # Remove all temporary files except the eps files.
 
-    $v->print( "keep_all: `FALSE'" );
+    $v->print( "keep_all: 'FALSE'" );
     $v->print( "All temporary files except *.eps will be deleted" );
 
 
@@ -679,7 +681,7 @@ END {
       if ( &is_subdir( $Temp->{'eps_dir'}, $Temp->{'temp_dir'} ) ) {
        $v->print( "EPS dir is subdir of temp dir, so keep both." );
       } else { # remove temp dir
-       $v->print( "Try to remove temporary directory `" .
+       $v->print( "Try to remove temporary directory '" .
          $Temp->{'temp_dir'} ."':" );
        if ( File::Path::remove_tree($Temp->{'temp_dir'}) ) {
          # remove succeeds
@@ -706,10 +708,10 @@ END {
               ^
               $Args->{'prefix'}
               _
-            /x ) { # this includes `PREFIX_temp*'
+            /x ) { # this includes 'PREFIX_temp*'
          my $file = File::Spec->catfile( $Temp->{'temp_dir'},  $_ );
-         $v->print( "Remove `" . $file . "'" );
-         unlink $file or $stderr->print( "Could not remove `$file': $!" );
+         $v->print( "Remove '" . $file . "'" );
+         unlink $file or $stderr->print( "Could not remove '$file': $!" );
          next;
        } # end if prefix
        next;
@@ -721,11 +723,11 @@ END {
 
   if ( $Temp->{'eps_dir'} ) {
     # EPS files in $Temp->{'eps_dir'} are always kept
-    $v->print( "As EPS directrory is set as `" .
+    $v->print( "As EPS directrory is set as '" .
       $Temp->{'eps_dir'} . "', no EPS files there will be deleted." );
 
     opendir my $dh_temp, $Temp->{'eps_dir'} or
-      die "Cannot open `" . $Temp->{'eps_dir'} . ": $!";
+      die "Cannot open '" . $Temp->{'eps_dir'} . ": $!";
     for ( sort readdir $dh_temp ) {
       next if ( /         # omit files starting with a dot
                  ^
index f6b721461df41f5d7e4b05a1ea38f5279d5a1f58..73da6a2f70da90470fa0999dcb741b4fdb001a78 100644 (file)
@@ -3,29 +3,29 @@ my $License = q*
 # Legalese
 ########################################################################
 
-Source file position: `<groff-source>/contrib/glilypond/oop_fh.pl'
-Installed position: `<prefix>/lib/groff/glilypond/oop_fh.pl'
+Source file position: '<groff-source>/contrib/glilypond/oop_fh.pl'
+Installed position: '<prefix>/lib/groff/glilypond/oop_fh.pl'
 
-Copyright (C) 2013-2013  Free Software Foundation, Inc.
+Copyright (C) 2013-2013 Free Software Foundation, Inc.
   Written by Bernd Warken <groff-bernd.warken-72@web.de>
 
-This file is part of `glilypond', which is part of `GNU groff'.
+This file is part of 'glilypond', which is part of 'GNU groff'.
 
-glilypond - integrate `lilypond' into `groff' files
+glilypond - integrate 'lilypond' into 'groff' files
 
-  `GNU groff' 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 3 of the License, or (at your
+  'GNU groff' 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 3 of the License, or (at your
 option) any later version.
 
-  `GNU groff' is distributed in the hope that it will be useful, but
+  'GNU groff' 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
+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 `groff', see the files `COPYING' and `LICENSE' in the top
-directory of the `groff' source package.  If not, see
+  You should have received a copy of the 'GNU General Public License'
+along with 'groff', see the files 'COPYING' and 'LICENSE' in the top
+directory of the 'groff' source package.  If not, see
 <http://www.gnu.org/licenses/>.
 *;
 
@@ -135,7 +135,7 @@ use integer;
       die "$file is a directory" if ( -d $file );
     }
     open $self->{'fh'}, ">", $self->{'file'}
-      or die "could not open file `$file' for writing: $!";
+      or die "could not open file '$file' for writing: $!";
     $self->{'opened'} = main::TRUE;
   }
 
@@ -230,7 +230,7 @@ use integer;
 
   sub new {
     my ( $pkg, $file ) = @_;
-    die "File `$file' cannot be read." unless ( -f $file && -r $file );
+    die "File '$file' cannot be read." unless ( -f $file && -r $file );
     bless {
           'fh' => undef,
           'file' => $file,
@@ -251,7 +251,7 @@ use integer;
       die "$file is a directory" if ( -d $file );
     }
     open $self->{'fh'}, "<", $self->{'file'}
-      or die "could not read file `$file': $!";
+      or die "could not read file '$file': $!";
     $self->{'opened'} = main::TRUE;
   }
 
index aa70dfea8a15eaeb915249b8368b8dab9f3590e5..bcc7b7018d31906abed36a25b8c2569141d12ce9 100644 (file)
@@ -3,29 +3,31 @@ my $License = q*
 # Legalese
 ########################################################################
 
-Subroutines for `glilypond'.
+Subroutines for 'glilypond'.
 
-Source file position: `<groff-source>/contrib/glilypond/subs.pl'
-Installed position: `<prefix>/lib/groff/glilypond/subs.pl'
+Source file position: '<groff-source>/contrib/glilypond/subs.pl'
+Installed position: '<prefix>/lib/groff/glilypond/subs.pl'
 
-Copyright (C) 2013-201 Free Software Foundation, Inc.
+Copyright (C) 2013-2018 Free Software Foundation, Inc.
   Written by Bernd Warken <groff-bernd.warken-72@web.de>
 
-This file is part of `glilypond', which is part of `GNU groff'.
+Last update: 10 Sep 2015
 
-  `GNU groff' 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 3 of the License, or (at your
+This file is part of 'glilypond', which is part of 'GNU groff'.
+
+  'GNU groff' 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 3 of the License, or (at your
 option) any later version.
 
-  `GNU groff' is distributed in the hope that it will be useful, but
+  'GNU groff' 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
+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 `groff', see the files `COPYING' and `LICENSE' in the top
-directory of the `groff' source package.  If not, see
+  You should have received a copy of the 'GNU General Public License'
+along with 'groff', see the files 'COPYING' and 'LICENSE' in the top
+directory of the 'groff' source package.  If not, see
 <http://www.gnu.org/licenses/>.
 *;
 
@@ -40,17 +42,20 @@ use integer;
 use utf8;
 use feature 'state';
 
+my $P_PIC;
+# $P_PIC = '.PDFPIC';
+$P_PIC = '.PSPIC';
 
 ########################################################################
 # subs for using several times
 ########################################################################
 
-sub create_ly2eps {                   # `--ly2eps' default
+sub create_ly2eps {                   # '--ly2eps' default
   our ( $out, $Read, $Temp );
 
   my $prefix = $Read->{'file_numbered'};   # with dir change to temp dir
 
-  # `$ lilypond --ps -dbackend=eps -dgs-load-fonts \
+  # '$ lilypond --ps -dbackend=eps -dgs-load-fonts \
   #      output=file_without_extension file.ly'
   # extensions are added automatically
   my $opts = '--ps -dbackend=eps -dinclude-eps-fonts -dgs-load-fonts ' .
@@ -58,13 +63,13 @@ sub create_ly2eps {                # `--ly2eps' default
   &run_lilypond("$opts");
 
   Cwd::chdir $Temp->{'cwd'} or
-      die "Could not change to former directory `" .
+      die "Could not change to former directory '" .
        $Temp->{'cwd'} . "': $!";
 
   my $eps_dir = $Temp->{'eps_dir'};
   my $dir = $Temp->{'temp_dir'};
   opendir( my $dh, $dir ) or
-    die "could not open temporary directory `$dir': $!";
+    die "could not open temporary directory '$dir': $!";
 
   my $re = qr<
               ^
@@ -89,14 +94,14 @@ sub create_ly2eps {                # `--ly2eps' default
          $file_path = File::Spec->catfile($eps_dir, $_);
        }
       }
-      $out->print( '.PSPIC ' . $file_path );
+      $out->print( $P_PIC . ' ' . $file_path );
     }
   }                            # end while readdir
   closedir( $dh );
 }                              # end sub create_ly2eps()
 
 
-sub create_pdf2eps {                  # `--pdf2eps'
+sub create_pdf2eps {                  # '--pdf2eps'
   our ( $v, $stdout, $stderr, $out, $Read, $Temp );
 
   my $prefix = $Read->{'file_numbered'};   # with dir change to temp dir
@@ -108,25 +113,25 @@ sub create_pdf2eps {                     # `--pdf2eps'
 
   # pdf2ps in temp dir
   my $temp_file = &next_temp_file;
-  $v->print( "\n##### run of `pdf2ps'" );
-  # `$ pdf2ps file.pdf file.ps'
+  $v->print( "\n##### run of 'pdf2ps'" );
+  # '$ pdf2ps file.pdf file.ps'
   my $output = `pdf2ps $file_pdf $file_ps 2> $temp_file`;
   die 'Program pdf2ps does not work.' if ( $? );
   &shell_handling($output, $temp_file);
-  $v->print( "##### end run of `pdf2ps'\n" );
+  $v->print( "##### end run of 'pdf2ps'\n" );
 
   # ps2eps in temp dir
   $temp_file = &next_temp_file;
-  $v->print( "\n##### run of `ps2eps'" );
-  # `$ ps2eps file.ps'
+  $v->print( "\n##### run of 'ps2eps'" );
+  # '$ ps2eps file.ps'
   $output = `ps2eps $file_ps 2> $temp_file`;
   die 'Program ps2eps does not work.' if ( $? );
   &shell_handling($output, $temp_file);
-  $v->print( "##### end run of `ps2eps'\n" );
+  $v->print( "##### end run of 'ps2eps'\n" );
 
   # change back to former dir
   Cwd::chdir $Temp->{'cwd'} or
-      die "Could not change to former directory `" .
+      die "Could not change to former directory '" .
        $Temp->{'cwd'} . "': $!";
 
   # handling of .eps file
@@ -144,7 +149,7 @@ sub create_pdf2eps {                       # `--pdf2eps'
     } # end Temp->{'eps_dir'}
   }
   # print into groff output
-  $out->print( '.PSPIC ' . $eps_path );
+  $out->print( $P_PIC . ' ' . $eps_path );
 }                              # end sub create_pdf2eps()
 
 
@@ -206,13 +211,13 @@ sub make_dir {                    # make directory or check if it exists
     next DIRPARTS if ( -d $dir_grow );
 
     if ( -e $dir_grow ) {  # exists, but not a dir, so must be removed
-      die "Couldn't create dir `$dir_arg', it is blocked by `$dir_grow'."
+      die "Couldn't create dir '$dir_arg', it is blocked by '$dir_grow'."
        unless ( -w $dir_grow );
 
       # now it's writable, but not a dir, so it can be removed
       unlink ( $dir_grow ) or
-       die "Couldn't remove `$dir_grow', " .
-         "so I cannot create dir `$dir_arg': $!";
+       die "Couldn't remove '$dir_grow', " .
+         "so I cannot create dir '$dir_arg': $!";
     }
 
     # $dir_grow does no longer exist, so the former dir must be writable
@@ -220,24 +225,24 @@ sub make_dir {                    # make directory or check if it exists
     pop @dir_grow;
     $dir_grow = File::Spec->catdir(@dir_grow);
 
-    die "`$dir_grow' is not writable, " .
-      "so directory `$dir_arg' can't be createdd."
+    die "'$dir_grow' is not writable, " .
+      "so directory '$dir_arg' can't be createdd."
        unless ( -w $dir_grow );
 
-    # former directory is writable, so `$dir_arg' can be created
+    # former directory is writable, so '$dir_arg' can be created
 
     File::Path::make_path( $dir_arg,
                           {
                            mask => oct('0700'),
                            verbose => $Args->{'verbose'},
                           }
-                        )      #  `mkdir -P'
-       or die "Could not create directory `$dir_arg': $!";
+                        )      #  'mkdir -P'
+       or die "Could not create directory '$dir_arg': $!";
 
     last DIRPARTS;
   }
 
-  die "`$dir_arg' is not a writable directory"
+  die "'$dir_arg' is not a writable directory"
     unless ( -d $dir_arg && -w $dir_arg );
 
   return $dir_arg;
@@ -252,7 +257,7 @@ sub next_temp_file {
   my $temp_basename = $Args->{'prefix'} . '_temp_' . $number;
   my $temp_file = File::Spec->catfile( $Temp->{'temp_dir'} ,
                                       $temp_basename );
-  $v->print( "next temporary file: `$temp_file'" );
+  $v->print( "next temporary file: '$temp_file'" );
   return $temp_file;
 }                              # end sub next_temp_file()
 
@@ -273,7 +278,7 @@ sub path2abs {
 
   die "path2abs(): argument is empty." unless ( $path );
 
-  # Perl does not support shell `~' for home dir
+  # Perl does not support shell '~' for home dir
   if ( $path =~ /
                  ^
                  ~
@@ -323,7 +328,7 @@ sub path2abs {
 
 
 sub run_lilypond {
-  # arg is the options collection for `lilypond' to run
+  # arg is the options collection for 'lilypond' to run
   # either from ly or pdf
 
   our ( $Temp, $v );
@@ -336,16 +341,16 @@ sub run_lilypond {
 
   # change to temp dir
   Cwd::chdir $Temp->{'temp_dir'} or
-      die "Could not change to temporary directory `" .
+      die "Could not change to temporary directory '" .
        $Temp->{'temp_dir'} . "': $!";
 
-  $v->print( "\n##### run of `lilypond " . $opts . "'" );
+  $v->print( "\n##### run of 'lilypond " . $opts . "'" );
   $output = `lilypond $opts 2>$temp_file`;
-  die "Program lilypond does not work, see `$temp_file': $?"
+  die "Program lilypond does not work, see '$temp_file': $?"
     if ( $? );
   chomp $output;
   &shell_handling($output, $temp_file);
-  $v->print( "##### end run of `lilypond'\n" );
+  $v->print( "##### end run of 'lilypond'\n" );
 
   # stay in temp dir
 } # end sub run_lilypond()
@@ -389,19 +394,19 @@ sub string2array {
 } # end string2array()
 
 
-sub usage {                    # for `--help'
+sub usage {                    # for '--help'
   our ( $Globals, $Args );
 
   my $p = $Globals->{'prog'};
   my $usage = EMPTYSTRING;
   $usage = '###### usage:' . "\n" if ( $Args->{'verbose'} );
   $usage .= qq*Options for $p:
-Read a `roff' file or standard input and transform `lilypond' parts
-(everything between `.lilypond start' and `.lilypond end') into
-`EPS'-files that can be read by groff using `.PSPIC'.
+Read a 'roff' file or standard input and transform 'lilypond' parts
+(everything between '.lilypond start' and '.lilypond end') into
+'EPS'-files that can be read by groff using '.PSPIC'.
 
-There is also a command `.lilypond include <file_name>' that can
-include a complete `lilypond' file into the `groff' document.
+There is also a command '.lilypond include <file_name>' that can
+include a complete 'lilypond' file into the 'groff' document.
 
 
 # Breaking options:
@@ -413,10 +418,10 @@ $p --license               # the license is GPL >= 3
 # Normal options:
 $p [options] [--] [filename ...]
 
-There are 2 options for influencing the way how the `EPS' files for the
-`roff' display are generated:
---ly2eps           `lilypond' generates `EPS' files directly (default)
---pdf2eps          `lilypond' generates a `PDF' file that is transformed
+There are 2 options for influencing the way how the 'EPS' files for the
+'roff' display are generated:
+--ly2eps           'lilypond' generates 'EPS' files directly (default)
+--pdf2eps          'lilypond' generates a 'PDF' file that is transformed
 
 -k|--keep_all      do not delete any temporary files
 -v|--verbose       print much information to STDERR
@@ -438,7 +443,7 @@ The directories set are created when they do not exist.
 } # end sub usage()
 
 
-sub version { # for `--version'
+sub version { # for '--version'
   our ( $Globals, $Legalese, $stdout, $Args );
   my $end;
   if ( $Globals->{'groff_version'} ) {
@@ -449,8 +454,8 @@ sub version { # for `--version'
 
   my $output = EMPTYSTRING;
   $output = "###### version:\n" if ( $Args->{'verbose'} );
-  $output .= "`" . $Globals->{'prog'} . "' version `" .
-    $Legalese->{'version'} . "' is part of `GNU groff'" . $end;
+  $output .= "'" . $Globals->{'prog'} . "' version '" .
+    $Legalese->{'version'} . "' is part of 'GNU groff'" . $end;
 
   $stdout->print($output);
 } # end sub version()
index 4da5ffe82fad66f667faa963b49819a19ad176a0..21862882f6467e4cbd3b6980fcac4de2cf226b23 100644 (file)
@@ -1,3 +1,22 @@
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * gperl.am (gperl): Use $(AM_V_GEN) to silence file generation.
+
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * gperl.1.man: Rename `gperl.man'.
+
+       * gperl.am: Include renaming.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * gperl.am: Add `Last update'.  Setup Emacs mode.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+       * gperl.man: Make it work in compatibility mode.
+       (EL): Fix typo.
+
 2014-10-11  Bernd Warken  <groff-bernd.warken-72@web.de>
 
        * gperl.pl: Version 1.2.6
@@ -66,8 +85,7 @@
 ________________________________________________________________________
 License
 
-Copyright (C) 2014
-       Free Software Foundation, Inc.
+Copyright (C) 2014-2018 Free Software Foundation, Inc.
 Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
 Copying and distribution of this file, with or without
diff --git a/contrib/gperl/Makefile.sub b/contrib/gperl/Makefile.sub
deleted file mode 100644 (file)
index 4e8fd07..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-# Makefile.sub for `gperl' (preprocessor for added Perl parts)
-
-# File position: <groff-source>/contrib/gperl/Makefile.sub
-
-# Copyright (C) 2014  Free Software Foundation, Inc.
-# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `gperl' which is part of `groff'.
-
-# `groff' 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.
-
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-
-########################################################################
-
-MAN1=gperl.n
-
-MOSTLYCLEANADD=gperl $(MAN1)
-
-# not all make programs have $(RM) predefined.
-RM=rm -f
-
-all: gperl
-
-gperl: gperl.pl
-       sed -f "$(SH_DEPS_SED_SCRIPT)" \
-            -e "s|@g@|$(g)|g" \
-           -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-           -e "s|@VERSION@|$(version)$(revision)|g" \
-           -e "$(SH_SCRIPT_SED_CMD)" \
-           $(srcdir)/gperl.pl >$@; \
-       chmod +x $@
-
-.PHONY: install_data
-install_data: gperl
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       $(RM) $(DESTDIR)$(bindir)/gperl
-       $(INSTALL_SCRIPT) gperl $(DESTDIR)$(bindir)/gperl
-
-.PHONY: uninstall_sub
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/gperl
-
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/contrib/gperl/gperl.1.man b/contrib/gperl/gperl.1.man
new file mode 100644 (file)
index 0000000..ba5cac4
--- /dev/null
@@ -0,0 +1,508 @@
+.TH GPERL @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+gperl \- groff preprocessor for Perl parts in roff files
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2014-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of gperl, which is part of groff, a free software
+.\" project.
+.\"
+.\" You can redistribute it and/or modify it under the terms of the GNU
+.\" General Public License as published by the Free Software Foundation,
+.\" version 2.
+.\"
+.\" The license text is available in the internet at
+.\" <http://www.gnu.org/licenses/gpl-2.0.html>.
+.
+.\" ====================================================================
+.\" Characters
+.\" ====================================================================
+.
+.\" Ellipsis ...
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
+.\" called with \*(EL
+.
+.\" Bullet
+.ie t .ds BU \(bu
+.el .ds BU *
+.\" used in '.IP \*(BU 2m' (former .Topic)
+.
+.
+.\" ====================================================================
+.SH "SYNOPSIS"
+.\" ====================================================================
+.
+.SY gperl
+.RI [ filespec
+\*(EL]
+.YS
+.
+.SY gperl
+.B \-h
+.SY gperl
+.B \-\-help
+.YS
+.
+.SY gperl
+.B \-v
+.SY gperl
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This is a preprocessor for
+.BR \%groff (@MAN1EXT@).
+.
+It allows the use of
+.BR perl (7)
+code in
+.BR groff (7)
+files.
+.
+The result of a
+.I Perl part
+can be stored in groff
+.I strings
+or
+.I numerical registers
+based on the arguments at a final line of a
+.IR "Perl part" .
+.
+.
+.\" ====================================================================
+.SH "OPTIONS"
+.\" ====================================================================
+.
+So far, there are only
+.I filespec
+or
+.I breaking
+options.
+.
+.
+.P
+.I filespec
+are file names or the minus character
+.B \-
+character for standard input.
+.
+As usual, the argument
+.B \-\-
+can be used in order to let all following arguments mean file names,
+even if the names begin with a minus character
+.BR \- .
+.
+.
+.P
+An option is
+.IR breaking ,
+when the program just writes the information that was asked for and
+then stops.
+.
+All other arguments will be ignored by that.
+.
+These
+.I breaking
+options are here
+.
+.TP
+.B \-h\~\fR|\fB\~\-\-help
+Print help information with a short explanation of options to
+standard output.
+.
+.
+.TP
+.B \-v\~\fR|\fB\~\-\-version
+Print version information to standard output.
+.
+.
+.\" ====================================================================
+.SH "PERL PARTS"
+.\" ====================================================================
+.
+.I Perl
+parts in
+.I groff files
+are enclosed by two
+.B .Perl
+requests with different arguments, a
+.I starting
+and an
+.I ending
+command.
+.
+.
+.\" ====================================================================
+.SS "Starting Perl Mode"
+.\" ====================================================================
+.
+The starting
+.I Perl request
+can either be without arguments, or by a request that has the term
+.B start
+as its only argument.
+.RS
+.IP \*(BU 2m
+.B .Perl
+.IP \*(BU 2m
+.B .Perl start
+.RE
+.
+.
+.\" ====================================================================
+.SS "Ending Perl Mode without Storage"
+.\" ====================================================================
+.
+A
+.B .Perl
+command line with an argument different from
+.B start
+finishes a running
+.IR "Perl part" .
+.
+Of course, it would be reasonable to add the argument
+.BR stop ;
+that's possible, but not necessary.
+.
+.RS
+.IP \*(BU 2m
+.B .Perl stop
+.IP \*(BU 2m
+.BI .Perl " other_than_start"
+.RE
+.
+The argument
+.I other_than_start
+can additionally be used as a
+.I groff
+string variable name for storage \(em see next section.
+.
+.
+.\" ====================================================================
+.SS "Ending Perl Mode with Storage"
+.\" ====================================================================
+.
+A useful feature of
+.B gperl
+is to store one or more results from the
+.IR "Perl mode" .
+.
+.
+.P
+The output of a
+.I Perl part
+can be got with backticks
+.BR \[ga]...\[ga] .
+.
+.
+.P
+This program collects all printing to STDOUT (normal standard output)
+by the Perl
+.B print
+program.
+.
+This pseudo-printing output can have several lines, due to printed
+line breaks with
+.BR \(rsn .
+.
+By that, the output of a Perl run should be stored into a Perl array,
+with a single line for each array member.
+.
+.
+.P
+This Perl array output can be stored by
+.B gperl
+in either
+.TP
+.I groff strings
+by creating a groff command
+.B .ds
+.
+.TP
+.I groff number register
+by creating a groff command
+.B .rn
+.
+.
+.P
+The storage modes can be determined by arguments of a final stopping
+.B .Perl
+command.
+.
+Each argument
+.B .ds
+changes the mode into
+.I groff string
+and
+.B .nr
+changes the mode into
+.I groff number register
+for all following output parts.
+.
+.
+.P
+By default, all output is saved as strings, so
+.B .ds
+is not really needed before the first
+.B .nr
+command.
+.
+That suits to
+.BR \%groff (@MAN7EXT@),
+because every output can be saved as
+.I groff
+string, but the number registers can be very restrictive.
+.
+.
+.P
+In
+.IR "string mode" ,
+.B gperl
+generates a
+.I groff string
+storage line
+.RS
+.EX
+.BI .ds " var_name content"
+.EE
+.RE
+.
+In
+.I number register mode
+the following groff command is generated
+.RS
+.EX
+.BI .nr " var_name content"
+.EE
+.RE
+.
+.
+.P
+We present argument collections in the following.
+.
+You can add as first argument for all
+.BR stop .
+.
+We omit this additional element.
+.
+.
+.P
+.TP
+.BI ".Perl .ds " var_name
+This will store 1 output line into the groff string named
+.I var_name
+by the automatically created command
+.RS
+.RS
+.EX
+.BI .ds " var_name output"
+.EE
+.RE
+.RE
+.
+.
+.TP
+.BI .Perl " var_name"
+If
+.I var_name
+is different from
+.B start
+this is equivalent to the former command, because the string mode is
+string with
+.B .ds
+command.
+default.
+.
+.
+.TP
+.BI .Perl " var_name1 var_name2"
+This will store 2 output lines into groff string names
+.I var_name1
+and
+.IR var_name2 ,
+because the default mode
+.B .ds
+is active, such that no
+.B .ds
+argument is needed.
+.
+Of course, this is equivalent to
+.RS
+.RS
+.EX
+.BI ".Perl .ds " "var_name1 var_name2"
+.EE
+.RE
+and
+.RS
+.EX
+.BI ".Perl .ds " "var_name1 " ".ds" " var_name2"
+.EE
+.RE
+.RE
+.
+.
+.TP
+.BI ".Perl .nr" " var_name1 varname2"
+stores both variables as number register variables.
+.
+.B gperl
+generates
+.RS
+.EX
+.BI .nr " var_name1 output_line1"
+.BI .nr " var_name2 output_line2"
+.EE
+.RE
+.
+.
+.TP
+.BI ".Perl .nr " var_name1 " .ds " var_name2
+stores the 1st argument as
+.I number register
+and the second as
+.I string
+by
+.RS
+.EX
+.BI .nr " var_name1 output_line1"
+.BI .ds " var_name2 output_line2"
+.EE
+.RE
+.
+.
+.\" ====================================================================
+.SS "Printing towards STDERR is without Storage"
+.\" ====================================================================
+.
+The printing towards
+.IR STDERR ,
+(standard error) works as usual.
+.
+All error information goes to the real normal
+.IR "standard error" ,
+without other automatic storage.
+.
+.
+.\" ====================================================================
+.SH "EXAMPLES"
+.\" ====================================================================
+.
+A possible
+.I Perl part
+in a
+.I roff file
+could look like that:
+.RS
+.EX
+before
+\&.Perl start
+my $result = 'some data';
+print $result;
+\&.Perl stop .ds string_var
+after
+.EE
+.RE
+.
+.
+.P
+This stores the result
+.B \(rqsome data\(rq
+into the
+.I roff string
+called
+.BR string_var ,
+such that the following line is printed:
+.RS
+.EX
+\&.ds string_var some data
+.EE
+.RE
+by
+.B gperl
+as food for the coming
+.B groff
+run.
+.
+.
+.P
+A
+.I Perl part
+with several outputs is:
+.RS
+.EX
+\&.Perl start
+print \(rqfirst\(rsn\(rq;
+print \(rqsecond line\(rsn\(rq;
+print \(rq3\(rsn\(rq;
+\&.Perl var1 var2 .nr var3
+.EE
+.RE
+.
+This stores 3 printed lines into 3
+.I groff
+strings.
+.BR var1 , var2 , var3 .
+.
+So the following
+.I groff
+command lines are created:
+.RS
+.EX
+\&.ds var1 first
+\&.ds var2 second line
+\&.nr var3 3
+.EE
+.RE
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.B gperl
+was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.P
+Man pages related to
+.I groff
+are
+.BR \%groff (@MAN1EXT@),
+.BR \%groff (@MAN7EXT@),
+.BR \%grog (@MAN1EXT@),
+and
+.BR \%groffer (@MAN1EXT@).
+.
+.
+.P
+Documents related to
+.I Perl
+are
+.BR \%perl (@MAN1EXT@),
+.BR \%perl (@MAN7EXT@).
+.
+.
+.\" ====================================================================
+.\" Emacs settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/gperl/gperl.am b/contrib/gperl/gperl.am
new file mode 100644 (file)
index 0000000..5689386
--- /dev/null
@@ -0,0 +1,56 @@
+# Automake rules for 'gperl' (preprocessor for added Perl parts)
+
+# File position: <groff-source>/contrib/gperl/gperl.am
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
+
+# Last update: 22 Aug 2015
+
+# This file is part of 'gperl' which is part of 'groff'.
+
+# 'groff' 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.
+
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+
+########################################################################
+
+bin_SCRIPTS += gperl
+man1_MANS += contrib/gperl/gperl.1
+EXTRA_DIST += \
+  contrib/gperl/ChangeLog \
+  contrib/gperl/gperl.1.man \
+  contrib/gperl/gperl.pl
+
+gperl: $(top_srcdir)/contrib/gperl/gperl.pl shdeps.sed
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f "$(SH_DEPS_SED_SCRIPT)" \
+              -e "s|[@]g[@]|$(g)|g" \
+              -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+              -e "s|[@]VERSION[@]|$(VERSION)|g" \
+              -e "$(SH_SCRIPT_SED_CMD)" \
+              $(top_srcdir)/contrib/gperl/gperl.pl \
+              >$@ \
+       && chmod +x $@
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/contrib/gperl/gperl.man b/contrib/gperl/gperl.man
deleted file mode 100644 (file)
index 3600f4d..0000000
+++ /dev/null
@@ -1,523 +0,0 @@
-.TH GPERL @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-gperl \- groff preprocessor for Perl parts in roff files
-.
-.\" The .SH was moved to this place in order to appease `apropos'.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de au
-This file was written by
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME .
-..
-.
-.de co
-Copyright \[co] 2014 Free Software Foundation, Inc.
-.
-.P
-This file is part of
-.IR \%gperl ,
-which is part of
-.IR \%groff ,
-a free software project.
-.
-You can redistribute it and/or modify it under the terms of the
-.nh
-.B "GNU General Public License"
-.hy
-as published by the
-.nh
-.BR "Free Software Foundation" ,
-.hy
-version\~2.
-.
-.P
-The license text is available in the internet at
-.UR http://www.gnu.org/licenses/gpl-2.0.html
-.UE .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Characters
-.\" --------------------------------------------------------------------
-.
-.\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
-.\" called with \*(EL
-.
-.\" Bullet
-.ie t .ds BU \[bu]
-.el .ds BU *
-.\" used in `.IP \*(BU 2m' (former .Topic)
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SYNOPSIS"
-.\" --------------------------------------------------------------------
-.
-.SY gperl
-.OP \-
-.OP \-\-
-.OP \& "\%filespec \*(EL"
-.YS
-.
-.BR "gperl -h" | --help
-.br
-.BR "gperl -v" | --version
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This is a preprocesor for
-.BR \%groff (@MAN1EXT@).
-.
-It allows to add
-.BR perl (7)
-code into
-.BR groff (7)
-files.
-.
-The result of a
-.I Perl part
-can be stored in groff
-.I strings
-or
-.I numerical registers
-based on the arguments at a final line of a
-.IR "Perl part" .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "OPTIONS"
-.\" --------------------------------------------------------------------
-.
-So far, there are only
-.I filespec
-or
-.I breaking
-options.
-.
-.
-.P
-.I filespec
-are file names or the minus character
-.B \-
-character for standard input.
-.
-As usual, the argument
-.B \-\-
-can be used in order to let all fowllowing arguments mean file names,
-even if the names begin with a minus character
-.BR \- .
-.
-.
-.P
-An option is
-.IR breaking ,
-when the program just writes the information that was asked for and
-then stops.
-.
-All other arguments will be ignored by that.
-.
-These
-.I breaking
-options are heree
-.
-.TP
-.B -h\~\fR|\fB\~--help
-Print help information with a short explanation of options to
-standard output.
-.
-.
-.TP
-.B -v\~\fR|\fB\~--version
-Print version information to standard output.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "PERL PARTS"
-.\" --------------------------------------------------------------------
-.
-.I Perl
-parts in
-.I groff files
-are enclosed by two
-.B .Perl
-requests with different arguments, a
-.I starting
-and an
-.I ending
-command.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Starting Perl Mode"
-.\" --------------------------------------------------------------------
-.
-The starting
-.I Perl request
-can either be without arguments, or by a request that has the term
-.B start
-as its only argument.
-.RS
-.IP \*(BU 2m
-.B \&.Perl
-.IP \*(BU 2m
-.B \&.Perl start
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Ending Perl Mode without Storage"
-.\" --------------------------------------------------------------------
-.
-A
-.B .Perl
-command line with an argument different from
-.B start
-finishes a running
-.IR "Perl part" .
-.
-Of course, it would be reasonable to add the argument
-.BR stop ;
-that's possible, but not necessary.
-.
-.RS
-.IP \*(BU 2m
-.B \&.Perl stop
-.IP \*(BU 2m
-.BI \&.Perl " other_than_start"
-.RE
-.
-The argument
-.I other_than_start
-can additionally be used as a
-.I groff
-string variable name for storage \[em] see next section.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Ending Perl Mode with Storage"
-.\" --------------------------------------------------------------------
-.
-A useful feature of
-.B gperl
-is to store one or more results from the
-.IR "Perl mode" .
-.
-.
-.P
-The output of a
-.I Perl part
-can be got with backticks
-.BR `...` .
-.
-.
-.P
-This program collects all printing to STDOUT (normal standard output)
-by the Perl
-.B print
-program.
-.
-This pseudo-printing output can have several lines, due to printed
-line breaks with
-.BR \[rs]n .
-.
-By that, the output of a Perl run should be stored into a Perl array,
-with a single line for each array member.
-.
-.
-.P
-This Perl array output can be stored by
-.B gperl
-in either
-.TP
-.I groff strings
-by creating a groff command
-.B .ds
-.
-.TP
-.I groff number register
-by creating a groff command
-.B .rn
-.
-.
-.P
-The storage modes can be determined by arguments of a final stopping
-.B .Perl
-command.
-.
-Each argument
-.B .ds
-changes the mode into
-.I groff string
-and
-.B .nr
-changes the mode into
-.I groff number register
-for all following output parts.
-.
-.
-.P
-By default, all output is saved as strings, so
-.B .ds
-is not really needed before the first
-.B .nr
-command.
-.
-That suits to
-.BR \%groff (@MAN7EXT@),
-because every output can be saved as
-.I groff
-string, but the number registers can be very restrictive.
-.
-.
-.P
-In
-.IR "string mode" ,
-.B gperl
-generates a
-.I groff string
-storage line
-.RS
-.EX
-\&\fB.ds \fIvar_name content
-.EE
-.RE
-.
-In
-.I number register mode
-the following groff command is generated
-.RS
-.EX
-\&\fB.nr \fIvar_name content
-.EE
-.RE
-.
-.
-.P
-We present argument collections in the following.
-.
-You can add as first argument for all
-.BR stop .
-.
-We omit this additional element. 
-.
-.
-.P
-.TP
-.BI ".Perl .ds " var_name
-This will store 1 output line into the groff string named
-.I var_name
-by the automatically created command
-.RS
-.RS
-.EX
-.BI .ds " var_name output"
-.EE
-.RE
-.RE
-.
-.
-.TP
-.BI .Perl " var_name"
-If
-.I var_name
-is different from
-.B start
-this is equivalent to the former command, because the string mode is
-string with
-.B .ds
-command.
-default.
-.
-.
-.TP
-.BI .Perl " var_name1 var_name2"
-This will store 2 output lines into groff string names
-.I var_name1
-and
-.IR var_name2 ,
-because the default mode
-.B .ds
-is active, such that no
-.B .ds
-argument is needed.
-.
-Of course, this is equivalent to
-.RS
-.RS
-.EX
-.BI ".Perl .ds " "var_name1 var_name2"
-.EE
-.RE
-and
-.RS
-.EX
-.BI ".Perl .ds " "var_name1 " ".ds" " var_name2"
-.EE
-.RE
-.RE
-.
-.
-.TP
-.BI ".Perl .nr" " var_name1 varname2"
-stores both variables as number register variables.
-.
-.B gperl
-generates
-.RS
-.EX
-.BI .nr " var_name1 output_line1"
-.BI .nr " var_name2 output_line2"
-.EE
-.RE
-.
-.
-.TP
-.BI ".Perl .nr " var_name1 " .ds " var_name2
-stores the 1st argument as
-.I number register
-and the second as
-.I string
-by
-.RS
-.EX
-.BI .nr " var_name1 output_line1"
-.BI .ds " var_name2 output_line2"
-.EE
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Printing towards STDERR is without Storage"
-.\" --------------------------------------------------------------------
-.
-The printing towards
-.IR STDERR ,
-(standard error) works as usual.
-.
-All error information goes to the real normal
-.IR "standard error" ,
-without other automatical storage.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "EXAMPLES"
-.\" --------------------------------------------------------------------
-.
-A possible
-.I Perl part
-in a
-.I roff file
-could look like that:
-.RS
-.EX
-before
-\&.Perl start
-my $result = 'some data';
-print $result;
-\&.Perl stop .ds string_var
-after
-.EE
-.RE
-.
-.
-.P
-This stores the result
-.B \[rq]some data\[rq]
-into the
-.I roff string
-called
-.BR string_var ,
-such that the following line is printed:
-.RS
-.EX
-\&.ds string_var some data
-.EE
-.RE
-by
-.B gperl
-as food for the coming
-.B groff
-run.
-.
-.
-.P
-A
-.I Perl part
-with several outputs is:
-.RS
-.EX
-\&.Perl start
-print \[rq]first\[rs]n\[rq];
-print \[rq]second line\[rs]n\[rq];
-print \[rq]3\[rs]n\[rq];
-\&.Perl var1 var2 .nr var3 
-.EE
-.RE
-.
-This stores 3 printed lines into 3
-.I groff
-strings.
-.BR var1 , var2 , var3 .
-.
-So the following
-.I groff
-command lines are created:
-.RS
-.EX
-\&.ds var1 first
-\&.ds var2 second line
-\&.nr var3 3
-.EE
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.P
-Man\-pages related to
-.I groff
-are
-.BR \%groff (@MAN1EXT@),
-.BR \%groff (@MAN7EXT@),
-.BR \%grog (@MAN1EXT@),
-and
-.BR \%groffer (@MAN1EXT@).
-.
-.
-.P
-Documents related to
-.I Perl
-are
-.BR \%perl (@MAN1EXT@),
-.BR \%perl (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 4571f6495b18c945819daa51c686c8c79208b686..fdb93fff261426aefb0a56f8bcc97fa92255d540 100755 (executable)
@@ -5,20 +5,20 @@
 # Source file position: <groff-source>/contrib/gperl/gperl.pl
 # Installed position: <prefix>/bin/gperl
 
-# Copyright (C) 2014  Free Software Foundation, Inc.
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
 my $version = '1.2.6';
 
-# This file is part of `gperl', which is part of `groff'.
+# This file is part of 'gperl', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' 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.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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.
@@ -38,7 +38,7 @@ use File::Temp qw/ tempfile tempdir /;
 # needed for temporary dir
 use File::Spec;
 
-# for `copy' and `move'
+# for 'copy' and 'move'
 use File::Copy;
 
 # for fileparse, dirname and basename
@@ -65,7 +65,7 @@ our $File_split_env_sh;
 our $File_version_sh;
 our $Groff_Version;
 
-my $before_make;               # script before run of `make'
+my $before_make;               # script before run of 'make'
 {
   my $at = '@';
   $before_make = 1 if '@VERSION@' eq "${at}VERSION${at}";
@@ -91,15 +91,15 @@ if ($before_make) {
 
 foreach (@ARGV) {
   if ( /^(-h|--h|--he|--hel|--help)$/ ) {
-    print q(Usage for the `gperl' program:);
+    print q(Usage for the 'gperl' program:);
     print 'gperl [-] [--] [filespec...] normal file name arguments';
     print 'gperl [-h|--help]        gives usage information';
     print 'gperl [-v|--version]     displays the version number';
-    print q(This program is a `groff' preprocessor that handles Perl ) .
-      q(parts in `roff' files.);
+    print q(This program is a 'groff' preprocessor that handles Perl ) .
+      q(parts in 'roff' files.);
     exit;
   } elsif ( /^(-v|--v|--ve|--ver|--vers|--versi|--versio|--version)$/ ) {
-    print q(`gperl' version ) . $version;
+    print q('gperl' version ) . $version;
     exit;
   }
 }
@@ -138,7 +138,7 @@ foreach (<>) {
   my $line = $_;
   my $is_dot_Perl = $line =~ /^[.']\s*Perl(|\s+.*)$/;
 
-  unless ( $is_dot_Perl ) {    # not a `.Perl' line
+  unless ( $is_dot_Perl ) {    # not a '.Perl' line
     if ( $perl_mode ) {                # is running in Perl mode
       print OUT $line;
     } else {                   # normal line, not Perl-related
@@ -149,7 +149,7 @@ foreach (<>) {
 
 
   ##########
-  # now the line is a `.Perl' line
+  # now the line is a '.Perl' line
 
   my $args = $line;
   $args =~ s/\s+$//;   # remove final spaces
@@ -160,11 +160,11 @@ foreach (<>) {
   ##########
   # start Perl mode
   if ( @args == 0 || @args == 1 && $args[0] eq 'start' ) {
-    # For `.Perl' no args or first arg `start' means opening `Perl' mode.
+    # For '.Perl' no args or first arg 'start' means opening 'Perl' mode.
     # Everything else means an ending command.
     if ( $perl_mode ) {
-      # `.Perl' was started twice, ignore
-      print STDERR q(`.Perl' starter was run several times);
+      # '.Perl' was started twice, ignore
+      print STDERR q('.Perl' starter was run several times);
       next;
     } else {   # new Perl start
       $perl_mode = 1;
@@ -183,15 +183,15 @@ foreach (<>) {
     next;
   }
 
-  $perl_mode = 0;      # `Perl' stop calling is correct
-  close OUT;           # close the storing of `Perl' commands
+  $perl_mode = 0;      # 'Perl' stop calling is correct
+  close OUT;           # close the storing of 'Perl' commands
 
   ##########
-  # run this `Perl' part, later on about storage of the result
+  # run this 'Perl' part, later on about storage of the result
   # array stores prints with \n
   my @print_res = `perl $out_file`;
 
-  # remove `stop' arg if exists
+  # remove 'stop' arg if exists
   shift @args if ( $args[0] eq 'stop' );
 
   if ( @args == 0 ) {
index b2d95b7fcb653b6e9acfbbb7b83118a43bf9b521..c7ec8d5f4ddd56a38910cb06459d584dcc1d5526 100644 (file)
@@ -1,3 +1,22 @@
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * gpinyin.am (gpinyin): Use $(AM_V_GEN) to silence file generation.
+
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * gpinyin.1.man: Rename `gpinyin.man'.
+
+       * gpinyin.am: include renaming.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * gpinyin.am: Add `Last update'.  Setup Emacs mode.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+       * gpinyin.man: Make it work in compatibility mode.
+       (EL): Fix typo.
+
 2014-10-11  Werner LEMBERG  <wl@gnu.org>
 
        * Makefile.sub (gpinyin): Handle `gpinyin_dir'.
@@ -55,8 +74,7 @@
 ________________________________________________________________________
 License
 
-Copyright (C) 2014
-       Free Software Foundation, Inc.
+Copyright (C) 2014-2018 Free Software Foundation, Inc.
 Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
 Copying and distribution of this file, with or without
diff --git a/contrib/gpinyin/Makefile.sub b/contrib/gpinyin/Makefile.sub
deleted file mode 100644 (file)
index 4c499de..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-# Makefile.sub for `gpinyin' (preprocessor for added Perl parts)
-
-# File position: <groff-source>/contrib/gpinyin/Makefile.sub
-
-# Copyright (C) 2014  Free Software Foundation, Inc.
-# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `gpinyin' which is part of `groff'.
-
-# `groff' 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.
-
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-
-########################################################################
-
-MAN1=gpinyin.n
-
-MOSTLYCLEANADD=gpinyin $(MAN1)
-
-# not all make programs have $(RM) predefined.
-RM=rm -f
-
-all: gpinyin
-
-gpinyin: gpinyin.pl
-       sed -f "$(SH_DEPS_SED_SCRIPT)" \
-           -e "s|@g@|$(g)|g" \
-           -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-           -e "s|@gpinyin_dir@|$(DESTIR)$(gpinyin_dir)|" \
-           -e "s|@VERSION@|$(version)$(revision)|g" \
-           -e "$(SH_SCRIPT_SED_CMD)" \
-           $(srcdir)/gpinyin.pl >$@; \
-       chmod +x $@
-
-.PHONY: install_data
-install_data: gpinyin subs.pl
-       test -d $(DESTDIR)$(bindir) || \
-         $(mkinstalldirs) $(DESTDIR)$(bindir); \
-       $(RM) $(DESTDIR)$(bindir)/gpinyin; \
-       $(INSTALL_SCRIPT) gpinyin $(DESTDIR)$(bindir)/gpinyin; \
-       test -d $(DESTDIR)$(gpinyin_dir) || \
-         $(mkinstalldirs) $(DESTDIR)$(gpinyin_dir); \
-       $(RM) $(DESTDIR)$(gpinyin_dir)/subs.pl; \
-       $(INSTALL_SCRIPT) $(srcdir)/subs.pl \
-         $(DESTDIR)$(gpinyin_dir)/subs.pl
-
-.PHONY: uninstall_sub
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/gpinyin; \
-       $(RM) $(DESTDIR)$(gpinyin_dir)/subs.pl;
-       -test -d $(DESTDIR)$(gpinyin_dir) && \
-         rmdir $(DESTDIR)$(gpinyin_dir)
-
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/contrib/gpinyin/gpinyin.1.man b/contrib/gpinyin/gpinyin.1.man
new file mode 100644 (file)
index 0000000..db634fd
--- /dev/null
@@ -0,0 +1,345 @@
+'\" t
+.TH GPINYIN @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+gpinyin \- use Hanyu Pinyin Chinese in roff
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2014-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of gpinyin, which is part of groff, a free
+.\" software project.
+.\"
+.\" You can redistribute it and/or modify it under the terms of the GNU
+.\" General Public License version 2 as published by the Free Software
+.\" Foundation.
+.\"
+.\" The license text is available in the internet at
+.\" <http://www.gnu.org/licenses/gpl-2.0.html>.
+.
+.\" ====================================================================
+.\" Local definitions
+.\" ====================================================================
+.
+.\" Define a string for the TeX logo.
+.ie t .ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+.el   .ds TeX TeX
+.
+.\" Define a string for an ellipsis.
+.ie t .ds EL \f[S]\N'188'\f[P]\"
+.el .ds EL \&.\|.\|.\&\"
+.
+.
+.\" ====================================================================
+.SH "SYNOPSIS"
+.\" ====================================================================
+.
+.SY gpinyin
+.RI [ input-file
+\*(EL]
+.YS
+.
+.SY gpinyin
+.B \-h
+.SY gpinyin
+.B \-\-help
+.YS
+.
+.SY gpinyin
+.B \-v
+.SY gpinyin
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B gpinyin
+is a preprocessor for
+.BR \%groff (@MAN1EXT@)
+that facilitates use of the Hanyu Pinyin
+.BR groff (7)
+files.
+.
+Pinyin is a method for writing the Chinese language with the Latin
+alphabet.
+.
+The Chinese language consists of more than four hundred syllables,
+each with one of five different tones.
+.
+In Pinyin,
+a syllable is written in the Latin alphabet and a numeric tone indicator
+can be appended to each syllable.
+.
+.
+.P
+Each
+.I input-file
+is a file name or the hyphen-minus character \[lq]\-\[rq] to indicate
+that standard input should be read.
+.
+As usual,
+the argument \[lq]\-\-\[rq] can be used in order to force interpretation
+of all remaining arguments as file names,
+even if an
+.I input-file
+argument begins with the hyphen-minus character.
+.
+.
+.\" ====================================================================
+.SS "Pinyin Sections"
+.\" ====================================================================
+.
+Pinyin sections in
+.I groff
+files are enclosed by two
+.B .pinyin
+requests with different arguments.
+.
+The starting request is
+.RS
+.EX
+\&.pinyin start
+.EE
+.RE
+or
+.RS
+.EX
+\&.pinyin begin
+.EE
+.RE
+and the ending request is
+.RS
+.EX
+\&.pinyin stop
+.EE
+.RE
+or
+.RS
+.EX
+\&.pinyin end
+.EE
+.RE
+\&.
+.
+.
+.\" ====================================================================
+.SS "Syllables"
+.\" ====================================================================
+.
+The spoken Chinese language is based on about 411
+.IR syllables ;
+see
+.UR http://\:en.wikipedia.org/\:wiki/\:Pinyin_table
+.UE .
+.
+.
+.P
+In Pinyin,
+each syllable consists of one to six letters from the Latin alphabet;
+these letters comprise the fifty-two upper- and lowercase letters from
+the ASCII character set,
+plus the letter \[lq]U\[rq] with dieresis (umlaut) in both cases\[em]in
+other words,
+the members of the set \[lq][a\[en]zA\[en]Z\[:u]\[:U]]\[rq].
+.
+.
+.P
+In
+.I groff
+input,
+all ASCII letters are written as themselves.
+.
+The \[lq]u with dieresis\[rq] can be written as
+\[lq]\e[:u]\[rq]
+in lowercase or
+\[lq]\e[:U]\[rq]
+in uppercase.
+.
+Within
+.B .pinyin
+sections,
+.I gpinyin
+supports the form
+\[lq]ue\[rq]
+for lowercase and the forms
+\[lq]Ue\[rq]
+and
+\[lq]UE\[rq]
+for uppercase.
+.
+.
+.\" ====================================================================
+.SS "Tones"
+.\" ====================================================================
+.
+Each syllable has exactly one of five
+.IR tones .
+.
+The fifth tone is not explicitly written at all,
+but each of the first through fourth tones is indicated with a diacritic
+above a specific vowel within the syllable.
+.
+.
+.P
+In a
+.I gpinyin
+source file,
+these tones are written by adding a numeral in the range 0 to 5 after
+the syllable.
+.
+The tone numbers 1 to 4 are transformed into accents above vowels in the
+output.
+.
+The tone numbers 0 and 5 are synonymous.
+.
+.
+.P
+The following table summarizes the tones.
+.
+Some output devices will not be able to render every output example.
+.
+.
+.P
+.if t .ne 8 \" Try to keep the table on one page for printed output.
+.TS
+l l l l l.
+Tone   Description     Diacritic       Example Input   Example Output
+_
+first  flat    \[a-]   ma1     m\[u0061_0304]
+second rising  \[aa]   ma2     m\[u0061_0301]
+third  falling-rising  \[ah]   ma3     m\[u0061_030C]
+fourth falling \[ga]   ma4     m\[u0061_0300]
+fifth  neutral (none)  ma0     ma
+\^     \^      \^      ma5     \^
+.TE
+.
+.
+.P
+The neutral tone number can be omitted from a word-final syllable,
+but not otherwise.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.TP
+.B \-h
+.TQ
+.B \-\-help
+Print usage information and exit.
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Print version information and exit.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+.B gpinyin
+was written by
+.MT <groff\-bernd.warken\-72@\:web.de>
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+Useful documents on the World Wide Web related to Pinyin include
+.RS 4n
+.br
+.UR http://\:en.wikipedia.org/\:wiki/\:Pinyin
+\[lq]Pinyin\[rq] (Wikipedia)
+.UE ,
+.
+.br
+.UR http://\:en.wikipedia.org/\:wiki/\:Pinyin_table
+\[lq]Pinyin table\[rq] (Wikipedia)
+.UE ,
+.
+.\" XXX: dead link
+.\".br
+.\".UR http://\:www.sino.uni\-heidelberg.de/\:course_resources/\:s02/\:\
+.\"py\-vowels.htm
+.\".I Unicode vowels for Pinyin
+.\".UE ,
+.\".
+.br
+.UR http://\:www.foolsworkshop.com/\:ptou/\:index.html
+.I Pinyin to Unicode
+.UE ,
+.
+.br
+.UR http://\:www.mandarintools.com/
+.I On-line Chinese Tools
+.UE ,
+.
+.br
+.UR http://\:www.pinyin.info/\:index.html
+.I Pinyin.info: a guide to the writing of Mandarin Chinese in \
+romanization
+.UE ,
+.
+.br
+.UR http://\:www.pinyin.info/\:rules/\:where.html
+\[lq]Where do the tone marks go?\[rq] (Pinyin.info)
+.UE ,
+.
+.br
+.UR http://\:git.savannah.gnu.org/\:gitweb/\:\
+?p=cjk.git;a=blob_plain;f=doc/\:pinyin.txt;hb=HEAD
+pinyin.txt from the CJK macro package for \*[TeX]
+.UE ,
+.br
+.RS -4n
+and
+.RE
+.
+.br
+.UR http://\:git.savannah.gnu.org/\:gitweb/\:\
+?p=cjk.git;a=blob_plain;f=texinput/p\:inyin.sty;hb=HEAD
+pinyin.sty from the CJK macro package for \*[TeX]
+.UE .
+.
+.RE
+.
+.P
+.BR \%groff (@MAN1EXT@),
+.BR \%grog (@MAN1EXT@),
+and
+.BR \%groffer (@MAN1EXT@)
+explain how to view
+.I roff
+documents.
+.
+.
+.P
+.BR \%groff (@MAN7EXT@)
+and
+.BR \%groff_char (@MAN7EXT@)
+are comprehensive references covering the language elements of GNU
+.I roff
+and the available glyph repertoire,
+respectively.
+.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/gpinyin/gpinyin.am b/contrib/gpinyin/gpinyin.am
new file mode 100644 (file)
index 0000000..a46e17f
--- /dev/null
@@ -0,0 +1,65 @@
+# Automake rules for 'gpinyin' (preprocessor for added Perl parts)
+
+# File position: <groff-source>/contrib/gpinyin/gpinyin.am
+
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Moved to automake by Bertrand Garrigues
+
+# Last update: 22 Aug 2015
+
+# This file is part of 'gpinyin' which is part of 'groff'.
+
+# 'groff' 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.
+
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+
+########################################################################
+
+gpinyin_srcdir = $(top_srcdir)/contrib/gpinyin
+bin_SCRIPTS += gpinyin
+gpinyindir = $(gpinyin_dir)
+dist_gpinyin_DATA = contrib/gpinyin/subs.pl
+man1_MANS += contrib/gpinyin/gpinyin.1
+EXTRA_DIST += \
+  contrib/gpinyin/ChangeLog \
+  contrib/gpinyin/gpinyin.1.man \
+  contrib/gpinyin/gpinyin.pl
+
+gpinyin: contrib/gpinyin/gpinyin.pl
+       $(AM_V_GEN)sed -f "$(SH_DEPS_SED_SCRIPT)" \
+           -e "s|[@]g[@]|$(g)|g" \
+           -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+           -e "s|[@]gpinyin_dir[@]|$(DESTIR)$(gpinyin_dir)|" \
+           -e "s|[@]VERSION[@]|$(VERSION)|g" \
+           -e "$(SH_SCRIPT_SED_CMD)" \
+           $(gpinyin_srcdir)/gpinyin.pl \
+           >$@ \
+       && chmod +x $@
+
+uninstall_groffdirs: uninstall-gpinyin-hook
+uninstall-gpinyin-hook:
+       if test -d $(DESTDIR)$(gpinyindir); then \
+         rmdir $(DESTDIR)$(gpinyindir); \
+       fi
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/contrib/gpinyin/gpinyin.man b/contrib/gpinyin/gpinyin.man
deleted file mode 100644 (file)
index 79371e6..0000000
+++ /dev/null
@@ -1,414 +0,0 @@
-.TH GPINYIN @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-gpinyin \- Chinese European-like writing within groff
-.
-.SH "SYNOPSIS"
-.\" The .SH was moved to this place in order to appease `apropos'.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2014 Free Software Foundation, Inc.
-
-This file is part of gpinyin, which is part of groff, a free software
-project.
-
-You can redistribute it and/or modify it under the terms of the GNU
-General Public License version 2 as published by the Free Software
-Foundation.
-
-The license text is available in the internet at
-.UR http://www.gnu.org/licenses/gpl-2.0.html
-.UE .
-..
-.
-.de au
-This file was written by Bernd Warken <groff-bernd.warken-72@web.de>.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Characters
-.\" --------------------------------------------------------------------
-.
-.ie t .ds EL \f[S]\N'188'\f[P]
-.el .ds EL \&.\|.\|.\&\
-.\" ie t .char \[Ellipsis] \f[S]\N'188'\f[P]
-.\" el .char \[Ellipsis] \&.\|.\|.\&\
-.\" called with \[Ellipsis]
-.
-.
-.\" --------------------------------------------------------------------
-.\" SH "SYNOPSIS"
-.\" --------------------------------------------------------------------
-.
-.SY gpinyin
-.OP \-
-.OP \-\-
-.OP \& "\%filespec \*(EL"
-.YS
-.
-.BR "gpinyin -h" | --help
-.br
-.BR "gpinyin -v" | --version
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This is a preprocesor for
-.BR \%groff (@MAN1EXT@).
-.
-It allows to add the Chinese European-like language
-.I Pinyin
-into
-.BR groff (7)
-files.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "OPTIONS"
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.SS "Breaking Options"
-.\" --------------------------------------------------------------------
-.
-An option is
-.IR breaking ,
-when the program just writes the information that was asked for and
-then stops.
-.
-All other arguments will be ignored by that.
-.
-The
-.I breaking
-options are here
-.
-.TP
-.B -h\~\fR|\fB\~--help
-Print help information with a short explanation of options to standard
-output.
-.
-.
-.TP
-.B -v\~\fR|\fB\~--version
-Print version information to standard output.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Filespec Options"
-.\" --------------------------------------------------------------------
-.
-So far, there are only
-.I filespec
-and
-.I breaking
-options.
-.
-.
-.P
-.I filespec
-arguments are file names or the minus sign
-.B \-
-for standard input.
-.
-As usual, the argument
-.B \-\-
-can be used in order to let all following arguments mean file names,
-even if the names begin with a minus character
-.BR \- .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "PINYIN PARTS"
-.\" --------------------------------------------------------------------
-.
-.I Pinyin
-parts in
-.I groff files
-are enclosed by two
-.B .pinyin
-requests with different arguments.
-.
-The starting request is
-.RS
-.EX
-\e.pinyin start
-.EE
-.RE
-or
-.RS
-.EX
-\e.pinyin begin
-.EE
-.RE
-and the ending request is
-.RS
-.EX
-\e.pinyin stop
-.EE
-.RE
-or
-.RS
-.EX
-\e.pinyin end
-.EE
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "PINYIN DETAILS"
-.\" --------------------------------------------------------------------
-.
-.I Pinyin
-is used for writing the Chinese language in a European-like
-(romanization) way.
-.
-The Chinese language consists of more than 400 syllables, each with
-one of 5 different tones.
-.
-In
-.IR Pinyin ,
-such toned syllables can be appended to word-like connections.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Syllables"
-.\" --------------------------------------------------------------------
-.
-The Chinese language is based on about 411 defined
-.IR syllables ,
-see
-.UR http://en.wikipedia.org/wiki/Pinyin_table
-.UE .
-.
-.
-.P
-In
-.IR Pinyin ,
-each syllable consists of 1 to 6 European-like letters, the normal
-ASCII characters in upper and lower case, the only unusual characters
-are the
-.BR "U dieresis " ( umlaut )
-in both cases, i.e.
-.BR [a-zA-ZüÜ] .
-.
-.
-.P
-In the
-.B groff gpinyin
-input,
-all ASCII letters are written as usual.
-.
-But the
-.BR u / U
-.B dieresis
-can be written as either as
-.B \e[\[aq]u] or
-.B ue
-in lower case or
-.BR \e[\[aq]U] ,
-.BR Ue ,
-.B UE
-in upper case.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Tones"
-.\" --------------------------------------------------------------------
-.
-Each syllable has exactly one of 5 defined
-.IR tones .
-.
-The 5th tone is not written at all, but each tone 1 to 4 is written
-as an accent above a defined vowel within the syllable.
-.
-.
-.P
-In the source file, these tones are written by adding a number 0 to 5
-after the syllable name.
-.
-.
-.P
-In each writing, the tone numbers 1 to 4 are transformed into accents
-above vowels.
-.
-.
-.P
-The 1st tone is the horizontal macron
-.BR \e[a\-]
-.B \[a-] ,
-similar to a minus or sub character, but on top of the vowel.
-.
-In each source file, write the 1st tone as
-.IB "syllable" 1\fR.
-.
-.
-.P
-The 2nd tone is the accute accent
-.B \e[aa]
-.BR \[aa] .
-.
-In each source file, write the 2nd tone as
-.IB "syllable" 2\fR.
-.
-.
-.P
-The 3rd tone is the caron sign,
-.BR \e[ah]
-.B \[ah] ,
-which looks a bit like a small
-.B v
-above the vowel.
-.
-In each source file, write the 3rd tone as
-.IB "syllable" 3\fR.
-.
-.
-.P
-The 4th tone is the grave accent
-.B \e[ga]
-.BR \[ga] .
-.
-In each source file, write the 4th tone as
-.IB "syllable" 4\fR.
-.
-.
-.P
-The 5th tone is the no-tone.
-.
-The numbers 0 and 5 can be used for the
-.BR ( no-tone ).
-.
-The
-.B no-tone
-number can be omitted, when the syllable is the end of some word.
-.
-But within a word of syllables, one of the
-.B no-tone
-numbers 0 or 5 must be written.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BR \%groff (@MAN1EXT@)
-.TQ
-.BR \%grog (@MAN1EXT@)
-.TQ
-.BR \%groffer (@MAN1EXT@)
-Man\-pages with section
-.B 1
-related to
-.IR groff .
-.
-They can be called with either
-.RS
-.RS
-.EX
-.BI man " name"
-.BI groffer "name"
-.EE
-.RE
-.RE
-.
-.
-.TP
-.BR \%groff (@MAN7EXT@)
-.TQ
-.BR \%groff_char (@MAN7EXT@)
-Man\-pages with section
-.B 7
-related to
-.IR groff .
-.
-They can be called with either
-.RS
-.RS
-.EX
-.BI "man 7" " name"
-.BI "groffer 7" " name"
-.EE
-.RE
-.RE
-.
-.
-.P
-Internet documents related to
-.I pinyin
-are
-.RS
-.br
-.UR http://\:en.wikipedia.org/\:wiki/\:Pinyin
-.I Wikipedia pinyin
-.UE ,
-.
-.br
-.UR http://\:en.wikipedia.org/\:wiki/\:Pinyin_table
-.I Pinyin Table
-.UE ,
-.
-.br
-.UR http://\;www.sino.uni-heidelberg.de/\:course_resources/\:s02/\:\
-py-vowels.htm
-.I Unicode vowels for Pinyin 
-.UE ,
-.
-.br
-.UR http://\:www.foolsworkshop.com/\:ptou/\:index.html
-.IR pinyin to Unicode
-.UE ,
-.
-.br
-.UR http://\:www.mandarintools.com/
-.I Online Chinese Tools
-.UE ,
-.
-.br
-.UR http://\:www.pinyin.info/\:index.html
-.I Main pinyin website
-.UE ,
-.
-.br
-.UR http://\:www.pinyin.info/\:rules/\:where.html
-.I Where do the tone marks go?
-.UE ,
-.
-.br
-.UR http://\:git.savannah.gnu.org/\:gitweb/\:\
-?p=cjk.git;a=blob_plain;f=doc/\:pinyin.txt;hb=HEAD
-.I Pinyin for TeX 1
-.UE ,
-.
-.br
-.UR http://\:git.savannah.gnu.org/\:gitweb/\:\
-?p=cjk.git;a=blob_plain;f=texinput/p\:inyin.sty;hb=HEAD
-.I Pinyin for TeX 2
-.UE .
-.
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" coding: latin-1
-.\" End:
index ea874d61483d68638dfc2afb3212295a1e48eafc..e4bb5a315cba3e8831044e63bf4b102815974a1e 100755 (executable)
@@ -1,24 +1,24 @@
 #! /usr/bin/env perl
 
-# gpinyin - European-like Chinese writing `pinyin' into `groff'
+# gpinyin - European-like Chinese writing 'pinyin' into 'groff'
 
 # Source file position: <groff-source>/contrib/gpinyin/gpinyin.pl
 # Installed position: <prefix>/bin/gpinyin
 
-# Copyright (C) 2014  Free Software Foundation, Inc.
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
 my $version = '1.0.4';
 
-# This file is part of `gpinyin', which is part of `groff'.
+# This file is part of 'gpinyin', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' 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.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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.
@@ -38,7 +38,7 @@ use File::Temp qw/ tempfile tempdir /;
 # needed for temporary dir
 use File::Spec;
 
-# for `copy' and `move'
+# for 'copy' and 'move'
 use File::Copy;
 
 # for fileparse, dirname and basename
@@ -65,7 +65,7 @@ our $File_split_env_sh;
 our $File_version_sh;
 our $Groff_Version;
 
-my $before_make;               # script before run of `make'
+my $before_make;               # script before run of 'make'
 {
   my $at = '@';
   $before_make = 1 if '@VERSION@' eq "${at}VERSION${at}";
@@ -96,15 +96,15 @@ require 'subs.pl';
 
 foreach (@ARGV) {
   if ( /^(-h|--h|--he|--hel|--help)$/ ) {
-    print q(Usage for the `gpinyin' program:);
+    print q(Usage for the 'gpinyin' program:);
     print 'gpinyin [-] [--] [filespec...] normal file name arguments';
     print 'gpinyin [-h|--help]            gives usage information';
     print 'gpinyin [-v|--version]         displays the version number';
-    print q(This program is a `groff' preprocessor that handles ) .
-      q(pinyin parts in `roff' files.);
+    print q(This program is a 'groff' preprocessor that handles ) .
+      q(pinyin parts in 'roff' files.);
     exit;
   } elsif (/^(-v|--v|--ve|--ver|--vers|--versi|--versio|--version)$/) {
-    print q(`gpinyin' version ) . $version;
+    print q('gpinyin' version ) . $version;
     exit;
   }
 }
@@ -136,8 +136,8 @@ foreach (<>) {      # get line from input
   # .pinyin start or begin line
   if ( $line =~ /^[.']\s*pinyin\s+(start|begin)$/ ) {
     if ( $pinyin_mode ) {
-      # `.pinyin' was started twice, ignore
-      &err( q[`.pinyin' starter was run several times] );
+      # '.pinyin' was started twice, ignore
+      &err( q['.pinyin' starter was run several times] );
     } else {   # new pinyin start
       $pinyin_mode = 1;
     }
@@ -176,7 +176,7 @@ foreach (<>) {      # get line from input
 
 
 ########################################################################
-# end of file without stopping `pinyin' mode
+# end of file without stopping 'pinyin' mode
 if ( $pinyin_mode ) {
   &finish_pinyin_mode( \@output_n, \@output_t );
 }
index 08e919f35042dc1f5aa6ede894ab25ab65e9f0e8..1b10869825a2db8e0af8eb8b138a96293572adae 100755 (executable)
@@ -1,22 +1,22 @@
 #! /usr/bin/env perl
 
-# gpinyin - European-like Chinese writing `pinyin' into `groff'
+# gpinyin - European-like Chinese writing 'pinyin' into 'groff'
 
 # Source file position: <groff-source>/contrib/gpinyin/gpinyin.pl
 # Installed position: <prefix>/bin/gpinyin
 
-# Copyright (C) 2014  Free Software Foundation, Inc.
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `gpinyin', which is part of `groff'.
+# This file is part of 'gpinyin', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' 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.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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.
@@ -312,7 +312,7 @@ sub handle_line {
 
     # this is a word, maybe composed of several syllables
     my $punctuation = $1 if ( $word =~ s/([,.?!:;]*)$// );
-    # `$word' is now without punctuation
+    # '$word' is now without punctuation
 
     my %outword = &handle_word($word);
     next unless ( %outword );
@@ -477,7 +477,7 @@ sub handle_syll {
   }
 
 #  unless ( $vowel =~ /^[aeiouAEIOU]$/ ) {
-#    print STDERR q(The argument `) . $vowel . q(' is not a vowel!);
+#    print STDERR q(The argument ') . $vowel . q(' is not a vowel!);
 #    return {};
 #  }
 
diff --git a/contrib/grap2graph/Makefile.sub b/contrib/grap2graph/Makefile.sub
deleted file mode 100644 (file)
index 97761fe..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (C) 2003-2014  Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-MAN1=grap2graph.n
-MOSTLYCLEANADD=grap2graph
-RM=rm -f
-
-all: grap2graph
-
-grap2graph: grap2graph.sh
-       sed -e "s|@g@|$(g)|g" \
-           -e "s|@VERSION@|$(version)$(revision)|" \
-           -e $(SH_SCRIPT_SED_CMD) $(srcdir)/grap2graph.sh >$@
-       chmod +x $@
-
-install_data: grap2graph
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       $(RM) $(DESTDIR)$(bindir)/grap2graph
-       $(INSTALL_SCRIPT) grap2graph $(DESTDIR)$(bindir)/grap2graph
-
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/grap2graph
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/contrib/grap2graph/grap2graph.1.man b/contrib/grap2graph/grap2graph.1.man
new file mode 100644 (file)
index 0000000..bf13d6d
--- /dev/null
@@ -0,0 +1,175 @@
+.TH GRAP2GRAPH @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+grap2graph \- convert a GRAP diagram into a cropped image
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" This documentation is released to the public domain.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY grap2graph
+.OP \-unsafe
+.OP \-format output-format
+.RI [ convert-arguments ]
+.YS
+.
+.SY grap2graph
+.B \-\-help
+.YS
+.
+.SY grap2graph
+.B \-v
+.SY grap2graph
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I grap2graph
+reads a
+.IR grap (1)
+program from the standard input and writes an image file,
+by default in Portable Network Graphics (PNG) format,
+to the standard output.
+.
+.
+.PP
+The input GRAP code should
+.I not
+be wrapped with the
+.B \&.G1
+and
+.B \&.G2
+macros that normally guard it within
+.IR groff (@MAN1EXT@)
+documents.
+.
+.
+.\" FIXME: How old?  This text hasn't been touched since 2008 at latest.
+.\" Older versions of
+.\" .I \%convert
+.\" will produce a black-on-white graphic; newer ones may produce a
+.\" black-on-transparent graphic.
+.
+.PP
+Arguments not recognized by
+.I grap2graph
+are passed to the ImageMagick or GraphicsMagick program
+.IR \%convert (1).
+.
+.
+By specifying these, you can give your image a border,
+.\" Transparent backgrounds are the default in 2018.
+.\" force the background transparent,
+set the image's pixel density,
+or perform other useful transformations.
+.
+.
+.PP
+The output image is clipped using
+.IR \%convert 's
+.B \-trim
+option to the smallest possible bounding box that contains all the black
+pixels.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.TP
+.BI "\-format " output-format
+Write the image in
+.IR output-format ,
+which must be understood by
+.IR \%convert ;
+the default is PNG.
+.
+.
+.TP
+.B \-\-help
+Display a usage message and exit.
+.
+.
+.TP
+.B \-unsafe
+Run
+.I groff
+in
+.I unsafe
+mode, enabling the PIC command
+.B sh
+to execute arbitrary Unix shell commands.
+.
+The
+.I groff
+default is to forbid this.
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Display version information and exit.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I \%GROFF_TMPDIR
+.TQ
+.I \%TMPDIR
+.TQ
+.I TMP
+.TQ
+.I TEMP
+These environment variables are searched in the given order to determine
+the directory where temporary files will be created.
+.
+If none are set,
+.I /tmp
+is used.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+.B grap2graph
+was written by
+.MT esr@\:thyrsus.com
+Eric S.\& Raymond
+.ME ,
+based on a recipe for
+.IR pic2graph (@MAN1EXT@),
+by W.\& Richard Stevens.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR pic2graph (@MAN1EXT@),
+.IR eqn2graph (@MAN1EXT@),
+.IR grap (1),
+.IR @g@pic (@MAN1EXT@),
+.IR groff (@MAN1EXT@),
+.IR \%convert (1)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/grap2graph/grap2graph.am b/contrib/grap2graph/grap2graph.am
new file mode 100644 (file)
index 0000000..f00ebfd
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright (C) 2003-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+# grap2graph.am
+#
+
+grap2graph_srcdir = $(top_srcdir)/contrib/grap2graph
+bin_SCRIPTS += grap2graph
+man1_MANS += contrib/grap2graph/grap2graph.1
+EXTRA_DIST += \
+  $(grap2graph_srcdir)/grap2graph.sh \
+  $(grap2graph_srcdir)/grap2graph.1.man
+
+grap2graph: $(grap2graph_srcdir)/grap2graph.sh
+       $(AM_V_GEN)sed -e "s|[@]g[@]|$(g)|g" \
+           -e "s|[@]VERSION[@]|$(VERSION)|" \
+           -e $(SH_SCRIPT_SED_CMD) $(grap2graph_srcdir)/grap2graph.sh \
+           >$@ \
+       && chmod +x $@
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/contrib/grap2graph/grap2graph.man b/contrib/grap2graph/grap2graph.man
deleted file mode 100644 (file)
index d35888a..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-.TH GRAP2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grap2graph \- convert a grap diagram into a cropped bitmap image
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B grap2graph
-[
-.B \-unsafe
-]
-[
-.BI \-resolution\  M\fR\^|\^\fPMxN
-]
-[
-.BI \-format\  fmt
-]
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-Reads a grap program as input; produces an image file (by default in
-Portable Network Graphics format) suitable for the Web as output.
-.
-For a description of the grap language, see
-.BR grap (1).
-.
-.
-.P
-Your graph specification should \fInot\fR be wrapped with the \&.G1 and
-\&.G2 macros that normally guard it within
-.BR groff (@MAN1EXT@)
-macros.
-.
-.
-.P
-The output image will be a black-on-white graphic clipped to the
-smallest possible bounding box that contains all the black pixels.
-.
-By specifying command-line options to be passed to
-.BR convert (1)
-you can give it a border, set the background transparent, set the
-image's pixel density, or perform other useful transformations.
-.
-.
-.P
-This program uses
-.BR grap (1),
-.BR @g@pic (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-and the ImageMagick
-.BR convert (1)
-program.
-.
-These programs must be installed on your system and accessible on your
-$PATH for \fBgrap2graph\fR to work.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.B \-unsafe
-Run
-.BR @g@pic (@MAN1EXT@)
-and
-.BR groff (@MAN1EXT@)
-in the `unsafe' mode enabling the PIC macro
-.B sh
-to execute arbitrary commands.
-.
-The default is to forbid this.
-.
-.TP
-.BI \-format\  fmt
-Specify an output format; the default is PNG (Portable Network Graphics).
-.
-Any format that
-.BR convert (1)
-can emit is supported.
-.
-.
-.PP
-Command-line switches and arguments not listed above are passed to
-.BR convert (1).
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.B GROFF_TMPDIR
-The directory in which temporary files will be created.
-.
-If this is not set
-.B grap2graph
-searches the environment variables
-.BR \%TMPDIR ,
-.BR TMP ,
-and
-.B TEMP
-(in that order).
-.
-Otherwise, temporary files will be created in
-.BR /tmp .
-.
-.
-.\" --------------------------------------------------------------------
-.na
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR pic2graph (@MAN1EXT@),
-.BR eqn2graph (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR gs (1),
-.BR convert (1).
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.
-This documentation is released to the public domain.
-.
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.
-This document was written by
-.MT esr@thyrsus.com
-Eric S.\& Raymond
-.ME .
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 58544e13355f3d869dc6855940b15c66d587ddfa..29df25bb136a6356d2010df7ac853cf883a0ce6a 100644 (file)
@@ -7,7 +7,7 @@
 # In Unixland, the magic is in knowing what to string together...
 #
 # Take grap description on stdin, emit cropped bitmap on stdout.
-# The pic markup should *not* be wrapped in .G1/.G2, this script will do that.
+# The grap markup should *not* be wrapped in .G1/.G2, this script will do that.
 # A -U option on the command line enables gpic/groff "unsafe" mode.
 # A -format FOO option changes the image output format to any format
 # supported by convert(1).  All other options are passed to convert(1).
@@ -30,6 +30,7 @@
 #
 groff_opts=""
 convert_opts=""
+convert_trim_arg="-trim"
 format="png"
 
 while [ "$1" ]
@@ -54,22 +55,45 @@ done
 
 # create temporary directory
 tmp=
-for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
-    test -z "$d" && continue
+for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp
+do
+    test -n "$d" && break
+done
+
+if ! test -d "$d"
+then
+    echo "$0: error: temporary directory \"$d\" does not exist or is" \
+        "not a directory" >&2
+    exit 1
+fi
 
-    tmp=`(umask 077 && mktemp -d -q "$d/grap2graph-XXXXXX") 2> /dev/null` \
-    && test -n "$tmp" && test -d "$tmp" \
-    && break
+if ! tmp=`(umask 077 && mktemp -d -q "$d/grap2graph-XXXXXX") 2> /dev/null`
+then
+    # mktemp failed--not installed or is a version that doesn't support those
+    # flags?  Fall back to older method which uses more predictable naming.
+    #
+    # $RANDOM is a Bashism.  The fallback of $PPID is not good pseudorandomness,
+    # but is supported by the stripped-down dash shell, for instance.
+    tmp="$d/grap2graph$$-${RANDOM:-$PPID}"
+    (umask 077 && mkdir "$tmp") 2> /dev/null
+fi
+
+if ! test -d "$tmp"
+then
+    echo "$0: error: cannot create temporary directory \"$tmp\"" >&2
+    exit 1
+fi
 
-    tmp=$d/grap2graph$$-$RANDOM
-    (umask 077 && mkdir $tmp) 2> /dev/null && break
-done;
-if test -z "$tmp"; then
-    echo "$0: cannot create temporary directory" >&2
-    { (exit 1); exit 1; }
+# See if the installed version of convert(1) is new enough to support the -trim
+# option.  Versions that didn't were described as "old" as early as 2008.
+is_convert_recent=`convert -help | grep -e -trim`
+if test -z "$is_convert_recent"
+then
+    echo "$0: warning: falling back to old '-crop 0x0' trim method" >&2
+    convert_trim_arg="-crop 0x0"
 fi
 
-trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' EXIT INT TERM
+trap 'exit_status=$?; rm -rf "$tmp" && exit $exit_status' EXIT INT TERM
 
 # Here goes:
 # 1. Add .G1/.G2.
@@ -77,7 +101,7 @@ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' EXIT INT TERM
 # 3. Process through groff(1) with pic preprocessing to emit Postscript.
 # 4. Use convert(1) to crop the Postscript and turn it into a bitmap.
 (echo ".G1"; cat; echo ".G2") | grap | groff -p $groff_opts -Tps -P-pletter | \
-    convert -trim -crop 0x0 $convert_opts - $tmp/grap2graph.$format \
-    && cat $tmp/grap2graph.$format
+    convert -trim $convert_opts - "$tmp"/grap2graph.$format \
+    && cat "$tmp"/grap2graph.$format
 
 # End
index 1410ec6036dceca7e4a9b49b01d4a6be611037d5..09ec3a851033f018ca1f1e147cd19beddfa4f979 100644 (file)
@@ -1,3 +1,27 @@
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * groff_filenames.5.man: Use section 5 within this man-page.
+
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * groff_filenames.5.man: Rename `groff_filenames.1.man'.
+
+       * groff_filenames.am: Include section changing.
+
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * groff_filenames.1.man: Rename `groff_filenames.man'.
+
+       * groff_filenames.am: Include renaming.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * groff_filenames.am: Add `Last update'.  Setup Emacs mode.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+       * groff_filenames.man: Make it work in compatibility mode.
+
 2014-09-03  Bernd Warken  <groff-bernd.warken-72@web.de>
 
        * groff_filenames.man, Makefile.sub: Repair copying and Emacs
@@ -71,8 +95,7 @@
 
 ########################################################################
 
-Copyright 2013
-  Free Software Foundation, Inc.
+Copyright 2013-2018 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -80,5 +103,6 @@ notice and this notice are preserved.
 
 Local Variables:
 version-control: never
+mode: change-log
 coding: utf-8
 End:
diff --git a/contrib/groff_filenames/Makefile.sub b/contrib/groff_filenames/Makefile.sub
deleted file mode 100644 (file)
index bc6b955..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# Makefile.sub for `groff_filenames' (integration into the `groff' source tree)
-
-# File position: <groff-source>/contrib/groff_filenames/Makefile.sub
-
-# Copyright (C) 2013-2014  Free Software Foundation, Inc.
-#
-# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `groff'.
-
-# `groff' 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.
-
-# `groff' 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, see <http://www.gnu.org/licenses/>.
-
-########################################################################
-
-MAN7=\
-  groff_filenames.n
-
-MOSTLYCLEANADD=$(MAN7)
-
-########################################################################
-##### Emacs settings
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/contrib/groff_filenames/groff_filenames.5.man b/contrib/groff_filenames/groff_filenames.5.man
new file mode 100644 (file)
index 0000000..8f87abe
--- /dev/null
@@ -0,0 +1,656 @@
+.TH GROFF_FILENAMES @MAN5EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_filenames \- filename extensions for roff and groff
+.
+.\" ad l
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2013-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, a free software project.  You can
+.\" redistribute it and/or modify it under the terms of the GNU General
+.\" Public License version 2 (GPL2) as published by the Free Software
+.\" Foundation (FSF).
+.\"
+.\" The license text can be found in the internet at
+.\" <http://www.gnu.org/licenses>.
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+Since the evolution of
+.I roff
+in the 1970s, a whole bunch of filename extensions for
+.I roff
+files were used.
+.
+.
+.P
+The
+.I roff
+extensions refer to preprocessors or macro packages.
+.
+These extensions are fixed in all
+.IR Unix \-like
+operating systems.
+.
+.
+.P
+Later on,
+.B groff
+added some more extensions.
+.
+This
+.I man page
+is about these filename extensions.
+.
+.
+.\" ====================================================================
+.SH COMPRESSION OF ROFF FILES
+.\" ====================================================================
+.
+Each
+.I roff
+file can be optionally
+.IR compressed .
+.
+That means that the
+.I total filename
+ends with a
+.IR "compressor name" .
+.
+So the whole filename has the structure
+.IR <name> . <extension>[ . <compression>] .
+.
+.
+.P
+Best-known are the
+.I compressor extensions
+.BR .Z ,
+.BR .gz ,
+and
+.BR .bzip2 .
+.
+Relatively new is
+.BR .xz .
+.
+.
+.P
+From now on, we will ignore the
+.I compressions
+and only comment the structure
+.IB <name> . <extension>\fR.\fP
+.
+.
+.\" ====================================================================
+.SH MAN PAGES
+.\" ====================================================================
+.
+The
+.I Unix manual pages
+are widely called
+.IR "man pages" .
+.
+The
+.I man page
+style is the best known part of the
+.I roff
+language.
+.
+.
+.P
+The extensions for
+.I man
+should be better documented.
+.
+So this is documented here.
+.
+.
+.P
+Files written in the
+.I man
+language use the following extension:
+.BI *. <section>[<group>] \fR.\fP
+.
+.
+.\" ====================================================================
+.SS Man page Sections
+.\" ====================================================================
+.
+The traditional
+.I man page <section>
+is a digit from
+.B 1
+to
+.BR 8 .
+.
+.
+.TP
+.IB <name> .1
+.TQ
+.IB <name> .2
+.TQ
+.IB <name> .3
+.TQ
+.IB <name> .4
+.TQ
+.IB <name> .5
+.TQ
+.IB <name> .6
+.TQ
+.IB <name> .7
+.TQ
+.IB <name> .8
+Classic man page
+.IR sections .
+.
+.
+.P
+.\" NOTE: There was once a feeble attempt in this direction, but it
+.\" hasn't been true in any sense for a long time.
+.\"Linux added the section number
+.\".B 9
+.\"for kernel man pages.
+.\".
+.\".
+.\".TP
+.\".IB <name> .9
+.\".I Linux
+.\"kernel man pages
+.\".
+.\".
+.P
+In older commercial
+.I Unix
+systems, the 3 characters
+.BR l ,
+.BR n ,
+and
+.B o
+were also used as
+.I section
+names.
+.
+This is today
+.IR deprecated ,
+but there are still documents in this format.
+.
+.
+.TP
+.IB <name> .l
+.TQ
+.IB <name> .n
+.TQ
+.IB <name> .o
+.I Deprecated
+man page sections, which stood for \[lq]local\[rq], \[lq]new\[rq], and
+\[lq]old\[rq], respectively.
+.
+.
+.\" ====================================================================
+.SS Man page Group Extensions
+.\" ====================================================================
+.
+The
+.I <group>
+extension in
+.BI . <section>[<group>]
+is optional, but it can be any string of word characters.
+.
+Usually programmers use a group name that is already used, e.g.\&
+.B x
+for
+X Window System
+documents or
+.B tcl
+to refer to the
+.I Tcl
+programming language.
+.
+.
+.P
+Examples:
+.
+.
+.TP
+.B groff.1
+is the man page for
+.B groff
+in
+.I section
+.B 1
+without a
+.I group
+.
+.
+.TP
+.B xargs.1posix.gz
+is the man page for the program
+.B xargs
+in
+.I section
+.B 1
+and
+.I group
+.BR posix ;
+moreover it is
+.I compressed
+with
+.B gz
+.RB ( gzip ).
+.
+.
+.TP
+.B config.5ssl
+.I "OpenSSL CONF"
+library configuration files from
+.I section
+.B 5
+with
+.I group
+.BR ssl .
+.
+.
+.TP
+.B dpkg\-reconfigure.8cdebconf
+man page for the program
+.B dpkg\-reconfigure
+in
+.I section
+.B 8
+and
+.I group
+.BR cdebconf .
+.
+.
+.\" ====================================================================
+.SS Source of man pages
+.\" ====================================================================
+.
+There are 2
+.I roff
+languages for writing man pages:
+.B man
+and
+.BR mdoc .
+.
+.
+.P
+The names of these 2 styles are taken as
+.I extensions
+for the source code files of man pages in the
+.I groff
+package.
+.
+.
+.TP
+.IB <name> .man
+.I traditional
+Unix-like man page format within groff source files.
+.
+.
+.TP
+.IB <name> . n
+A temporary man page file produced from a
+.IB name .man
+man page by a run of
+.B make
+within the
+.B groff
+source package.
+.
+.
+.TP
+.IB <name> .mdoc
+Man page format in BSD.
+.
+.
+.TP
+.IB <name> .1b
+Man page format in
+.IR "heirloom roff ".
+.
+.
+.TP
+.IB <name> .mandoc
+Files using this extension recognize both man page formats in
+.B groff
+and other processors.
+.
+.
+.\" ====================================================================
+.SH TRADITIONAL TROFF EXTENSIONS
+.\" ====================================================================
+.
+.\" ====================================================================
+.SS Files Using Macro Packages
+.\" ====================================================================
+.
+The
+.I "classical roff"
+languages were interpreted by the traditional
+.B "troff"
+and
+.B "nroff"
+programs.
+.
+.
+.P
+There were several
+.I roff
+languages, each represented by a
+.IR "macro-package" .
+.
+Each of these provided a suitable file name
+.IR extension :
+.
+.
+.TP
+.IB <name> .me
+.I roff
+file using the
+.B me
+.IR "macro package" .
+.
+.
+.TP
+.IB <name> .mm
+.I roff
+file using the
+.B mm
+.I macro package
+.
+.
+.TP
+.IB <name> .ms
+.I roff
+file using the
+.B ms
+.I macro package
+.
+.
+.P
+All of these classical
+.I roff
+languages and their extensions are still very active in
+.BR groff .
+.
+.
+.\" ====================================================================
+.SS Source Code for Macro Packages (TMAC Files)
+.\" ====================================================================
+.
+In traditional
+.I roff
+the source code for the macro packages was stored in
+.I TMAC
+files.
+.
+Their file names have the form:
+.
+.
+.TP
+.BI tmac. <package> \fR,\fP
+.I <package>
+is the name of the macro package without the leading
+.B m
+character, which is reintegrated by the option
+.BR -m .
+.
+.
+.P
+For example,
+.B tmac.an
+is the source for the
+.B man
+macro package.
+.
+.
+.P
+In the
+.B groff
+source, more suitable file names were integrated, see later on.
+.
+.
+.\" ====================================================================
+.SS Preprocessors
+.\" ====================================================================
+.
+Moreover, the following
+.I preprocessors
+were used as filename extension:
+.
+.
+.TP
+.IB <name> .chem
+for the integration of chemical formulas
+.
+.
+.TP
+.IB <name> .eqn
+for the mathematical use of equations
+.
+.
+.TP
+.IB <name> .pic
+graphical tool
+.
+.
+.TP
+.IB <name> .tbl
+for tables with
+.I tbl
+.
+.
+.TP
+.IB <name> .ref
+for files using the
+.B prefer
+.I preprocessor
+.
+.
+.\" ====================================================================
+.SS Classical Roff Files
+.\" ====================================================================
+.
+.TP
+.IB <name> .t
+.TQ
+.IB <name> .tr
+for files using the
+.I roff
+language of any kind
+.
+.
+.\" ====================================================================
+.SH NEW GROFF EXTENSIONS
+.\" ====================================================================
+.
+.I "GNU roff"
+.B groff
+is the actual
+.I roff
+standard, both for classical
+.I roff
+and new extensions.
+.
+So even the used new extensions in the source code should be regarded
+as actual standard.
+.
+The following extensions are used instead of classical
+.B .t
+or
+.BR .tr :
+.
+.
+.TP
+.IB <name> .groff
+.TQ
+.IB <name> .roff
+general ending for files using the
+.I groff language
+.
+.
+.\" ====================================================================
+.SS Source Code for Macro Packages (TMAC Files)
+.\" ====================================================================
+.
+As the classical form
+.BI tmac. <package_without_m> \fR,\fP
+of the
+.I TMAC
+file names is quite strange,
+.
+.I groff
+added the following structures:
+.
+.
+.TP
+.IB <package_without_m> .tmac
+.TQ
+.BI m <package> .tmac
+.TQ
+.BI groff_m <package> .tmac
+.
+.
+.\" ====================================================================
+.SS Files Using new Macro Packages
+.\" ====================================================================
+.
+.I Groff
+uses the following new macro packages:
+.
+.
+.TP
+.IB <name> .mmse
+file with swedish
+.B mm
+.I macros
+for
+.B groff
+.
+.
+.TP
+.IB <name> .mom
+files written in the
+.I "groff macro package"
+.B mom
+.
+.
+.TP
+.IB <name> .www
+files written in
+.BR HTML -like
+.I groff
+.IR macros .
+.
+.
+.\" ====================================================================
+.SS Preprocessors and Postprocessors
+.\" ====================================================================
+.
+.TP
+.IB <name> .hdtbl
+Heidelberger tables, an alternative to the preprocessor
+.IR tbl .
+.
+See
+.BR groff_hdtbl (@MAN7EXT@).
+.
+.
+.TP
+.IB <name> .grap
+files written for the graphical
+.B grap
+processor.
+.
+.
+.TP
+.IB <name> .grn
+for including
+.BR gremlin (@MAN1EXT@),
+pictures, see
+.BR grn (@MAN1EXT@).
+.
+.
+.TP
+.IB <name> .pdfroff
+transform this file with
+.B pdfroff
+of the
+.I groff
+system
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+This document was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.
+.TP
+History and future
+.BR roff (@MAN7EXT@),
+.BR man\-pages (@MAN7EXT@),
+.BR groff_diff (@MAN7EXT@),
+.BR groff (@MAN7EXT@)
+.
+.
+.TP
+.I Compression
+.BR uncompress (1posix),
+.BR gzip2 (@MAN1EXT@),
+.BR bzip2 (@MAN1EXT@),
+.BR xz (@MAN1EXT@)
+.
+.
+.P
+A man page of the naming form
+.IB name ( n )
+can be read in text mode by
+.RS
+.EX
+.BI man " n name"
+.EE
+.RE
+or in graphical mode (PDF) by
+.RS
+.EX
+.BI groffer " n name"
+.EE
+.RE
+.
+.
+.P
+.UR https://\:github.com/\:n\-t\-roff/\:heirloom\-doctools
+.I Gunnar Ritter's Heirloom roff project
+.UE .
+.
+You can get this package with the shell command:
+.RS
+.EX
+\(Do \fBgit clone https://github.com/n\-t\-roff/heirloom\-doctools\fP
+.EE
+.RE
+.
+.
+.\" ====================================================================
+.\" Emacs settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/groff_filenames/groff_filenames.am b/contrib/groff_filenames/groff_filenames.am
new file mode 100644 (file)
index 0000000..52b88fa
--- /dev/null
@@ -0,0 +1,43 @@
+# Automake rules for 'groff_filenames'
+
+# File position: <groff-source>/contrib/groff_filenames/groff_filenames.am
+
+# Copyright (C) 2013-2018 Free Software Foundation, Inc.
+
+# Last update: 22 Aug 2015
+
+# Written by Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
+
+# This file is part of 'groff'.
+
+# 'groff' 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.
+
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+########################################################################
+
+man5_MANS += contrib/groff_filenames/groff_filenames.5
+EXTRA_DIST += \
+  contrib/groff_filenames/ChangeLog \
+  contrib/groff_filenames/groff_filenames.5.man
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/contrib/groff_filenames/groff_filenames.man b/contrib/groff_filenames/groff_filenames.man
deleted file mode 100644 (file)
index 82b8019..0000000
+++ /dev/null
@@ -1,665 +0,0 @@
-.TH GROFF_FILENAMES @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_filenames \(em filename extensions for roff and groff
-.
-.\" The .SH was moved to this place in order to appease `apropos'.
-.
-.\" ad l
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2013-2014 Free Software Foundation, Inc.
-
-This file is part of groff, a free software project.  You can
-redistribute it and/or modify it under the terms of the GNU General
-Public License version 2 (GPL2) as published by the Free Software
-Foundation (FSF).
-
-The license text can be found in the internet at
-.UR http://www.gnu.org/licenses
-.UE .
-..
-.
-.de au
-This file was written by
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-Since the evolution of
-.I roff
-in the 1970s, a whole bunch of filename extensions for
-.I roff
-files were used.
-.
-.
-.P
-The
-.I roff
-extensions refer to preprocessors or macro packages.
-.
-These extensions are fixed in all
-.IR Unix \-like
-operating systems.
-.
-.
-.P
-Later on,
-.B groff
-added some more extensions.
-.
-We will now write a
-.I man\-page about these filename extensions.
-.
-.
-.\" --------------------------------------------------------------------
-.SH COMPRESSION OF ROFF FILES
-.\" --------------------------------------------------------------------
-.
-Each
-.I roff
-file can be optionally
-.IR compressed .
-.
-That means that the
-.I total filename
-ends with a
-.IR "compressor name" .
-.
-So the whole filename has the structure
-.IR <name> \f[CB].\fP <extension>[ \f[CB].\fP <compression>] .
-.
-.
-.P
-Mostly known are the
-.I compressor extensions
-.BR .Z ,
-.BR .gz ,
-and
-.BR .bzip2 .
-.
-Relatively new is
-.BR .xz .
-.
-.
-.P
-From now on, we will ignore the
-.I compressions
-and only comment the structure
-.IB <name> . <extension>\fR.\fP
-.
-.
-.\" --------------------------------------------------------------------
-.SH MAN\-PAGES
-.\" --------------------------------------------------------------------
-.
-The
-.I Unix manual pages
-are shortly named
-.IR "man\-pages" .
-.
-The
-.I man\-page
-style is the best known part of the
-.I roff
-language.
-.
-.
-.P
-The extensions for
-.I man
-should be better documented.
-.
-So this is documented here.
-.
-.
-.P
-Files written in the
-.I man
-language use the following extension:
-.BI *. <section>[<group>] \fR.\fP
-.
-.
-.\" --------------------------------------------------------------------
-.SS Man-page Sections
-.\" --------------------------------------------------------------------
-.
-The traditional
-.I man\-page <section>
-is a digit from
-.B 1
-to
-.BR 8 .
-.
-.
-.TP
-.IB <name> .1
-.TQ
-.IB <name> .2
-.TQ
-.IB <name> .3
-.TQ
-.IB <name> .4
-.TQ
-.IB <name> .5
-.TQ
-.IB <name> .6
-.TQ
-.IB <name> .7
-.TQ
-.IB <name> .8
-Classic man\-page
-.IR sections .
-.
-.
-.P
-Linux added the section number
-.B 9
-for kernel man\-pages.
-.
-.
-.TP
-.IB <name> .9
-.I Linux
-kernel man-pages
-.
-.
-.P
-In older commercial
-.I Unix
-systems, the 3 characters
-.BR l ,
-.BR n ,
-and
-.B o
-were also used as
-.I section
-names.
-.
-This is today
-.IR deprecated ,
-but there are still documents in this format.
-.
-.
-.TP
-.IB <name> .l
-.TQ
-.IB <name> .n
-.TQ
-.IB <name> .o
-.I Deprecated
-old
-.IR "man\-page sections" .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Man\-page Group Extensions
-.\" --------------------------------------------------------------------
-.
-The
-.I <group>
-extension in
-.BI . <section>[<group>]
-is optional, but it can be any string of word characters.
-.
-Usually programmers use a group name that is already used, e.g.
-.B x
-for
-.I "X Window System"
-documents or
-.B tk
-to refer to the
-.I tk
-programming language.
-.
-.
-.P
-Examples:
-.
-.
-.TP
-.B groff.1
-is the man-page for
-.B groff
-in
-.I section
-.B 1
-without a
-.I group
-.
-.
-.TP
-.B xargs.1posix.gz
-is the man\-page for the program
-.B xargs
-in
-.I section
-.B 1
-and
-.I group
-.BR posix ;
-moreover it is
-.I compressed
-with
-.B gz
-.RB ( gzip ).
-.
-.
-.TP
-.B config.5ssl
-.I "OpenSSL CONF"
-library configuration files from
-.I section
-.B 5
-with
-.I group
-.BR ssl .
-.
-.
-.TP
-.B dpkg-reconfigure.8cdebconf
-man\-page for the program
-.B dpkg\-reconfigure
-in
-.I section
-.B 8
-and
-.I group
-.BR cdebconf .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Source of Man\-pages
-.\" --------------------------------------------------------------------
-.
-There are 2
-.I roff
-languages for writing man\-pages:
-.B man
-and
-.BR mdoc .
-.
-.
-.P
-The names of these 2 styles are taken as
-.I extensions
-for the source code files of man\-pages in the
-.I groff
-package.
-.
-.
-.TP
-.IB <name> .man
-.I traditional
-Unix\-like man\-page format within groff source files.
-.
-.
-.TP
-.IB <name> .n
-A temporary man-page file produced from a
-.IB name .man
-man\-page by a run of
-.B make
-within the
-.B groff
-source package.
-.
-.
-.TP
-.IB <name> .mdoc
-Man-page format in BSD.
-.
-.
-.TP
-.IB <name> .1b
-Man-page format in
-.IR "heirloom roff ".
-.
-.
-.TP
-.IB <name> .mandoc
-Files using this extension recognize both man\-page formats in
-.B groff
-and other processors.
-.
-.
-.\" --------------------------------------------------------------------
-.SH TRADITIONAL TROFF EXTENSIONS
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.SS Files Using Macro Packages
-.\" --------------------------------------------------------------------
-.
-The
-.I "classical roff"
-languages were interpreted by the traditional
-.B "troff"
-and
-.B "nroff"
-programs.
-.
-.
-.P
-There were several
-.I roff
-languages, each represented by a
-.IR "macro-package" .
-.
-Each of these provided a suitable file name
-.IR extension :
-.
-.
-.TP
-.IB <name> .me
-.I roff
-file using the
-.B me
-.IR "macro package" .
-.
-.
-.TP
-.IB <name> .mm
-.I roff
-file using the
-.B mm
-.I macro package
-.
-.
-.TP
-.IB <name> .ms
-.I roff
-file using the
-.B ms
-.I macro package
-.
-.
-.P
-All of these classical
-.I roff
-languages and their extensions are still very active in
-.BR groff .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Source Code for Macro Packages (TMAC Files)
-.\" --------------------------------------------------------------------
-.
-In traditional
-.I roff
-the source code for the macro packages was stored in
-.I TMAC
-files.
-.
-Their file names have the form:
-.
-.
-.TP
-.BI tmac. <package> \fR,\fP
-.I <package>
-is the name of the macro package without the leading
-.B m
-character, which is reintegrated by the option
-.BR -m .
-.
-.
-.P
-For example,
-.B tmac.an
-is the source for the
-.B man
-macro package.
-.
-.
-.P
-In the
-.B groff
-source, more suitable file names were integrated, see later on.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Preprocessors
-.\" --------------------------------------------------------------------
-.
-Moreover, the following
-.I preprocessors
-were used as filename extension:
-.
-.
-.TP
-.IB <name> .chem
-for the integration of chemical formulas
-.
-.
-.TP
-.IB <name> .eqn
-for the mathematical use of equations
-.
-.
-.TP
-.IB <name> .pic
-graphical tool
-.
-.
-.TP
-.IB <name> .tbl
-for tables with
-.I tbl
-.
-.
-.TP
-.IB <name> .ref
-for files using the
-.B prefer
-.I preprocessor
-.
-.
-.\" --------------------------------------------------------------------
-.SS Classical Roff Files
-.\" --------------------------------------------------------------------
-.
-.TP
-.IB <name> .t
-.TQ
-.IB <name> .tr
-for files using the
-.I roff
-language of any kind
-.
-.
-.\" --------------------------------------------------------------------
-.SH NEW GROFF EXTENSIONS
-.\" --------------------------------------------------------------------
-.
-.I "GNU roff"
-.B groff
-is the actual
-.I roff
-standard, both for classical
-.I roff
-and new extensions.
-.
-So even the used new extensions in the source code should be regarded
-as actual standard.
-.
-The following extensions are used instead of classical
-.B .t
-or
-.BR .tr :
-.
-.
-.TP
-.IB <name> .groff
-.TQ
-.IB <name> .roff
-general ending for files using the
-.I groff language
-.
-.
-.\" --------------------------------------------------------------------
-.SS Source Code for Macro Packages (TMAC Files)
-.\" --------------------------------------------------------------------
-.
-As the classical form
-.BI tmac. <package_without_m> \fR,\fP
-of the
-.I TMAC
-file names is quite strange,
-.
-.I groff
-added the following structures:
-.
-.
-.TP
-.IB <package_without_m> .tmac
-.TQ
-.BI m <package> .tmac
-.TQ
-.BI groff_m <package> .tmac
-.
-.
-.\" --------------------------------------------------------------------
-.SS Files Using new Macro Packages
-.\" --------------------------------------------------------------------
-.
-.I Groff
-uses the following new macro packages:
-.
-.
-.TP
-.IB <name> .mmse
-file with swedish
-.B mm
-.I macros
-for
-.B groff
-.
-.
-.TP
-.IB <name> .mom
-files written in the
-.I "groff macro package"
-.B mom
-.
-.
-.TP
-.IB <name> .www
-files written in
-.BR HTML \-like
-.I groff
-.IR macros .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Preprocessors and Postprocessors
-.\" --------------------------------------------------------------------
-.
-.TP
-.IB <name> .hdtbl
-a new
-.I tbl
-format.
-.
-See
-.BR groff_hdtbl (@MAN7EXT@).
-.
-.
-.TP
-.IB <name> .grap
-files written for the graphical
-.B grap
-processor.
-.
-.
-.TP
-.IB <name> .grn
-for including
-.BR gremlin (@MAN1EXT@),
-pictures, see
-.BR grn (@MAN1EXT@).
-.
-.
-.TP
-.IB <name> .pdfroff
-transform this file with
-.B pdfroff
-of the
-.I groff
-system
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.
-.TP
-History and future
-.BR roff (@MAN7EXT@),
-.BR man\-pages (@MAN7EXT@),
-.BR groff_diff (@MAN7EXT@),
-.BR groff (@MAN7EXT@)
-.
-.
-.TP
-.I Compression
-.BR uncompress (1posix),
-.BR gzip2 (@MAN1EXT@),
-.BR bzip2 (@MAN1EXT@),
-.BR xz (@MAN1EXT@)
-.
-.
-.P
-A man-page of the naming form
-.IB name ( n )
-can be read in text mode by
-.RS
-.EX
-.BI man " n name"
-.EE
-.RE
-or in graphical mode (PDF) by
-.RS
-.EX
-.BI groffer " n name"
-.EE
-.RE
-.
-.
-.P
-.UR https://\:github.com/\:n-t-roff/\:heirloom-doctools
-.I Gunnar Ritter\[aq]s Heirloom roff project
-.UE .
-.
-You can get this package with the shell command:
-.RS
-.EX
-\[Do] git clone https://github.com/n-t-roff/heirloom-doctools
-.EE
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index a411b774fdb855986bc7c341bab1c5cb1a453c62..3aef914fe112741dccca07b3e1b15b1063c387f8 100644 (file)
@@ -1,3 +1,58 @@
+2018-04-24  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * version.sh: Bump groffer version to 2.3.0, reflecting Bernd's
+         addition of the xhtml device/mode feature in 2015.  This
+         change extended the interface of the groffer
+         program--backwards-compatibly--e.g., by adding the '--xhtml'
+         option.
+
+2018-04-24  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * version.sh (_GROFF_VERSION_PRESET): Set to 1.22.4.
+
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * groffer.am (groffer): Use $(AM_V_GEN) to silence file generation.
+
+2015-08-27  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * *.pl: Add device (mode) `xhtml'.
+
+       * groffer.1.man: Add documentation for device `xhtml'.
+
+2015-08-27  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * groffer.1.man: Correct the documentation for `--viewer'.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * groffer.1.man: Rename `groffer.man'.
+
+       * roff2.1.man: Rename `roff2.man'.
+
+       * groffer.am: Include renamings.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * groffer.am: Add `Last update'.  Setup Emacs mode.
+
+2015-04-04  Werner LEMBERG  <wl@gnu.org>
+
+       * roff2.man (EL): Fix typo.
+
+2015-04-04  Werner LEMBERG  <wl@gnu.org>
+
+       * roff2.man: Make it work in compatibility mode.
+
+2015-04-04  Werner LEMBERG  <wl@gnu.org>
+
+       * groffer.man: Make it work in compatibility mode.
+       (EL): Fix typo.
+
+2015-03-20  Werner LEMBERG  <wl@gnu.org>
+
+       * subs.pl (where_is_prog): Fix typo.
+
 2014-11-04  Werner LEMBERG  <wl@gnu.org>
 
        * version.sh (_GROFF_VERSION_PRESET): Set to 1.22.3.
 ________________________________________________________________
 License
 
-Copyright (C) 2006-2009, 2011-2014
-       Free Software Foundation, Inc.
+Copyright (C) 2006-2018 Free Software Foundation, Inc.
 Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
 Copying and distribution of this file, with or without
diff --git a/contrib/groffer/Makefile.sub b/contrib/groffer/Makefile.sub
deleted file mode 100644 (file)
index 05e00d2..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-# Makefile.sub for `groffer' (integration into the `groff' source tree)
-
-# File position: <groff-source>/contrib/groffer/Makefile.sub
-
-# Copyright (C) 2001-2014  Free Software Foundation, Inc.
-# Written by Werner Lemberg <wl@gnu.org> and
-# Bernd Warken <groff-bernd.warken-72@web.de>.
-
-# This file is part of `groffer' which is part of `groff'.
-
-# `groff' 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.
-
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-
-########################################################################
-
-ROFF2MODES=dvi html pdf ps text x
-ROFF2PROGS=`echo $(ROFF2MODES) | sed 's/[a-z][a-z]*/roff2&/g'`
-ROFF2MAN=`echo $(ROFF2MODES) | sed 's/[a-z][a-z]*/roff2&.man/g'`
-ROFF2N=`echo $(ROFF2MODES) | sed 's/[a-z][a-z]*/roff2&.n/g'`
-
-MAN1=groffer.n \
-     roff2dvi.n \
-     roff2html.n \
-     roff2pdf.n \
-     roff2ps.n \
-     roff2text.n \
-     roff2x.n
-
-MOSTLYCLEANADD=groffer $(MAN1) $(ROFF2MAN) $(ROFF2N) $(ROFF2PROGS)
-
-RM=rm -f
-
-all: groffer
-
-GROFFER_PERL=subs.pl \
-             main_subs.pl \
-             man.pl \
-             split_env.sh
-GROFFER_REST=roff2.man \
-             version.sh \
-             groffer.man \
-             groffer.pl \
-             roff2.pl
-
-groffer: $(GROFFER_PERL) $(GROFFER_REST) $(SH_DEPS_SED_SCRIPT)
-       sed -f "$(SH_DEPS_SED_SCRIPT)" \
-           -e "s|@g@|$(g)|g" \
-           -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-           -e "s|@libdir@|$(DESTDIR)$(libdir)|g" \
-           -e "s|@groffer_dir@|$(DESTDIR)$(groffer_dir)|g" \
-           -e "s|@VERSION@|$(version)$(revision)|g" \
-           -e "$(SH_SCRIPT_SED_CMD)" \
-            $(srcdir)/groffer.pl >$@; \
-       for f in $(ROFF2PROGS); do \
-         cp $(srcdir)/roff2.pl $$f; \
-       done; \
-       chmod +x $@
-       for m in $(ROFF2MODES); do \
-         cat $(srcdir)/roff2.man \
-           | sed 's/@ROFF2MODE@/'"$$m"'/g' > roff2$${m}.man; \
-       done
-
-install_data: groffer
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       $(RM) $(DESTDIR)$(bindir)/groffer
-       $(INSTALL_SCRIPT) groffer $(DESTDIR)$(bindir)/groffer
-       for f in $(ROFF2PROGS); do \
-         $(RM) $(DESTDIR)$(bindir)/$$f; \
-         $(INSTALL_SCRIPT) $$f $(DESTDIR)$(bindir)/$$f; \
-       done
-       -test -d $(DESTDIR)$(groffer_dir) \
-         || $(mkinstalldirs) $(DESTDIR)$(groffer_dir)
-       $(RM) $(DESTDIR)$(groffer_dir)/version.sh
-       $(INSTALL_DATA) $(srcdir)/version.sh $(DESTDIR)$(groffer_dir)/version.sh
-       for f in $(GROFFER_PERL); do \
-         $(RM) $(DESTDIR)$(groffer_dir)/$$f; \
-       done
-       for f in $(GROFFER_PERL); do \
-         $(INSTALL_SCRIPT) $(srcdir)/$$f $(DESTDIR)$(groffer_dir)/$$f; \
-       done;
-
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/groffer
-       -for f in $(ROFF2PROGS); do $(RM) $(DESTDIR)$(bindir)/$$f; done
-       -for f in $(GROFFER_PERL) version.sh; do \
-         $(RM) $(DESTDIR)$(groffer_dir)/$$f;\
-       done
-       -test -d $(DESTDIR)$(libdir)/groff/groffer && \
-         rmdir $(DESTDIR)$(libdir)/groff/groffer
-
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index e2b3efd177d404be2cdd9d65ec99d5ec80913149..2d638f3aed60ee97a478a4433158cb7035ed77e9 100644 (file)
@@ -1,26 +1,26 @@
 README
 
-The `groffer' program is the easiest way to read documents written in
-some `roff' language, such as the `man pages', the manual pages in
-many operating systems.  All `roff' preprocessors, such as `chem' or
-`glilypond', are detected and executed automatically.
+The 'groffer' program is the easiest way to read documents written in
+some 'roff' language, such as the 'man pages', the manual pages in
+many operating systems.  All 'roff' preprocessors, such as 'chem' or
+'glilypond', are detected and executed automatically.
 
 
 Input
 
-Input comes from either standard input or command line parameters that
+Input comes from either standard input or command-line parameters that
 represent names of exisiting roff files or standardized specifications
 for searching man pages.  All of these can be compressed in a format
-that is decompressible by `gzip' or `bzip2', including `.gz', `bz2',
-and `.Z'.
+that is decompressible by 'gzip' or 'bzip2', including '.gz', 'bz2',
+and '.Z'.
 
-`groffer' has many built-in `man' functionalities to find and read the
-manual pages on UNIX and similar operating systems.  It accepts the
-information from an installed `man' program, but tries to find a man
+'groffer' has many built-in 'man' functionalities to find and read the
+manual pages on Unix and similar operating systems.  It accepts the
+information from an installed 'man' program, but tries to find a man
 path by itself.
 
-`groffer' bundles all filespec parameters into a single output file in
-the same way as `groff'.  The disadvantage of this is that all file
+'groffer' bundles all filespec parameters into a single output file in
+the same way as 'groff'.  The disadvantage of this is that all file
 name arguments must use the same groff language.  To change this, the
 option parsing must be revised for large parts.  It seems that this
 would create incompatibilities, so the actual option strategy is kept.
@@ -28,9 +28,9 @@ would create incompatibilities, so the actual option strategy is kept.
 
 Output
 
-All input is first sent to `grog' to determine the necessary `groff'
-command and then to `groff' together with all necessary preprocessors.
-So no special `groff' arguments must be given.  But all `groff'
+All input is first sent to 'grog' to determine the necessary 'groff'
+command and then to 'groff' together with all necessary preprocessors.
+So no special 'groff' arguments must be given.  But all 'groff'
 options can be specified when this seems to be appropriate.
 
 The following displaying modes for the output are available:
@@ -38,67 +38,70 @@ The following displaying modes for the output are available:
 -- a PDF viewer,
 -- a Postcript viewer,
 -- a web browser,
--- the X `roff' viewer `gxditview',
+-- the X 'roff' viewer 'gxditview',
 -- a DVI viewer,
 -- a pager in a text terminal (tty).
-- Generate `groff' output on stdout without a viewer.
-- Generate the `groff intermediate output' on standard output without
+- Generate 'groff' output on stdout without a viewer.
+- Generate the 'groff intermediate output' on standard output without
   postprocessing.
-- Output the source code without any `groff' processing.
-- There are some information outputs without `groff' processing, such
-  as by option `-V' and the `man' like `whatis' and `apropos'
+- Output the source code without any 'groff' processing.
+- There are some information outputs without 'groff' processing, such
+  as by option '-V' and the 'man' like 'whatis' and 'apropos'
   outputs.
 
 By default, the program creates a PDF file; on non-X text terminals,
-the `tty' text mode with a pager is tried by default.
+the 'tty' text mode with a pager is tried by default.
 
 
 File access
 
-The Perl version of groffer now use umask of 077.  This is a very
+The Perl version of groffer now uses a umask of 077.  This is a very
 strict security issue.  It allows only access of the temporary files
 by the file owner.
 
 
 Compatibility
 
-`groffer' is compatible to the `man' program.  It supports `.so'
+'groffer' is compatible to the 'man' program.  It supports '.so'
 requests based on the man path and compressed files.  That's more than
-`groff' does.
+'groff' does.
 
 
-Mailing lists
+Reporting bugs
 
-For reporting bugs of `groffer', groff's free mailing list
-<bug-groff@gnu.org> can be used.
+For reporting bugs of 'groffer', groff's bug-tracking tool at
+http://savannah.gnu.org/bugs/?group=groff can be used.
 
-For a general discussion, the mailing list <groff@gnu.org> is more
+
+Mailing list
+
+For a general discussion, the mailing list <groff@gnu.org> is
 useful, but one has to subscribe to this list at
 http://lists.gnu.org/mailman/listinfo/groff.
 
-See the `README' file in the top directory of the `groff' source
-package for more details on these mailing lists.
+See the 'README' file in the top directory of the 'groff' source
+package for more details on this mailing list.
 
 
 ####### License
 
-Copyright (C) 2003-201 Free Software Foundation, Inc.
+Copyright (C) 2003-2018 Free Software Foundation, Inc.
 Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-This file is part of `groffer', which is part of `groff'.
+This file is part of 'groffer', which is part of 'groff'.
 
-`groff' is free software; you can redistribute it and/or modify it
+'groff' 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.
 
-`groff' is distributed in the hope that it will be useful, but WITHOUT
+'groff' 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, see
+along with this program.  If not, see
 <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 
index 72667904dfc87b4ca948b7ebc9b1b72b77bf79e0..0e0e86dc94c864324f3ac2078903fdaf3f414a89 100644 (file)
@@ -1,6 +1,6 @@
 README_PERL
 
-`groffer' is written in the programming language Perl.
+'groffer' is written in the programming language Perl.
 
 
 Compatibility
@@ -8,37 +8,37 @@ Compatibility
 It was written in Linux, but due to Free Software under GNU it is
 available for each operating system.
 
-For testing, `groffer.pl' may be used directly without a Makefile.  By
-`make', this file will be transformed into the file `groffer' that will
+For testing, 'groffer.pl' may be used directly without a Makefile.  By
+'make', this file will be transformed into the file 'groffer' that will
 be installed.
 
 
 Temporary files
 
-The `file' and `so' temporaries are numbered and the files with .so
+The 'file' and 'so' temporaries are numbered and the files with .so
 request are copied.  All .so requests are handled; this is an
-extension to `man' that deals only with the first .so request.
+extension to 'man' that deals only with the first .so request.
 
 
 ####### License
 
-Copyright (C) 2003-201 Free Software Foundation, Inc.
+Copyright (C) 2003-2018 Free Software Foundation, Inc.
 Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-This file is part of `groffer', which is part of `groff'.
+This file is part of 'groffer', which is part of 'groff'.
 
-`groff' is free software; you can redistribute it and/or modify it
+'groff' 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.
 
-`groff' is distributed in the hope that it will be useful, but WITHOUT
+'groff' 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, see
+along with this program.  If not, see
 <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 
diff --git a/contrib/groffer/groffer.1.man b/contrib/groffer/groffer.1.man
new file mode 100644 (file)
index 0000000..5eec6bf
--- /dev/null
@@ -0,0 +1,3822 @@
+.TH GROFFER @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groffer \- display groff files and man pages on X and tty
+.
+.
+.\"*********************************************************************
+.\"
+.\" This man page doesn't use extended groff syntax!
+.\" XXX: Yes, it does--"\~" is ubiquitous.  "\/" and "\," also occur.
+.\" Formatting it with and without groff's option '-C' should always
+.\" give the same result.
+.\"
+.\"*********************************************************************
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2001-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groffer, which is part of groff, a free
+.\" software project.
+.\"
+.\" You can redistribute it and/or modify it under the terms of the GNU
+.\" General Public License version 2 as published by the Free Software
+.\" Foundation.
+.\"
+.\" The license text is available in the internet at
+.\" <http://www.gnu.org/licenses/gpl-2.0.html>.
+.
+.
+.\" ====================================================================
+.\" Characters
+.\" ====================================================================
+.
+.\" Ellipsis ...
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
+.\" called with \*(EL
+.
+.\" Bullet
+.ie t .ds BU \(bu
+.el .ds BU *
+.\" used in '.IP \*(BU 2m' (former .Topic)
+.
+.
+.\" ====================================================================
+.SH "SYNOPSIS"
+.\" ====================================================================
+.
+.SY groffer
+.RI [ mode-option
+\*(EL]
+.RI [ groff-option
+\*(EL]
+.RI [ man-option
+\*(EL]
+.RI [ X-option
+\*(EL]
+.OP \-\-
+.RI [ filespec
+\*(EL]
+.YS
+.
+.SY groffer
+.B \-h
+.SY groffer
+.B \-\-help
+.YS
+.
+.SY groffer
+.B \-v
+.SY groffer
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+The
+.B \%groffer
+program is the easiest way to use
+.BR \%groff (@MAN1EXT@).
+It can display arbitrary documents written in the
+.I \%groff
+language, see
+.BR \%groff (@MAN7EXT@),
+or other
+.I \%roff
+languages, see
+.BR \%roff (@MAN7EXT@),
+that are compatible to the original
+.I \%troff
+language.
+.
+It finds and runs all necessary
+.I groff
+preprocessors, such as
+.BR @g@chem .
+.
+.
+.P
+The
+.B \%groffer
+program also includes many of the features for finding and displaying
+the \%\f(CRUnix\fP manual pages
+.nh
+.RI ( man\~pages ),
+.hy
+such that it can be used as a replacement for a
+.BR \%man (1)
+program.
+.
+Moreover, compressed files that can be handled by
+.BR \%gzip (1)
+or
+.BR \%bzip2 (1)
+are decompressed on-the-fly.
+.
+.
+.P
+The normal usage is quite simple by supplying a file name or name of a
+.I \%man\~page
+without further options.
+.
+But the option handling has many possibilities for creating special
+behaviors.
+.
+This can be done either in configuration files, with the shell
+environment variable
+.IR \%GROFFER_OPT ,
+or on the command line.
+.
+.
+.P
+The output can be generated and viewed in several different ways
+available for
+.IR \%groff .
+.
+This includes the
+X Window System-based
+.I \%groff
+program
+.BR \%gxditview (@MAN1EXT@),
+each
+.IR \%PostScript ,
+.IR \%PDF ,
+or
+.I \%DVI
+display program, a web browser by generating
+.I \%HTML
+or
+.I \%XHTML
+in
+.IR \%www\~mode ,
+or several
+.I \%text\~modes
+in text terminals.
+.
+.
+.P
+Most of the options that must be named when running
+.B \%groff
+directly are determined automatically for
+.BR \%groffer ,
+due to the internal usage of the
+.BR \%grog (@MAN1EXT@)
+program.
+.
+But all parts can also be controlled manually by arguments.
+.
+.
+.P
+Several file names can be specified on the command-line arguments.
+.
+They are transformed into a single document in the normal way of
+.BR \%groff .
+.
+.
+.P
+Option handling is done in \f(CRGNU\fP style.
+.
+Options and file names can be mixed freely.
+.
+The option
+.RB \[lq] \-\- \[rq]
+closes the option handling, all following arguments are treated as
+file names.
+.
+Long options can be abbreviated in several ways.
+.
+.
+.\" ====================================================================
+.SH "OPTION OVERVIEW"
+.\" ====================================================================
+.
+.TP
+.I breaking options
+.RS
+.P
+.SY
+.OP \-h\~\fR|\fB\~\-\-help
+.OP \-v\~\fR|\fB\~\-\-version
+.YS
+.RE
+.
+.
+.TP
+.I \%groffer mode options
+.RS
+.P
+.SY
+.OP \-\-auto
+.OP \-\-default
+.OP \-\-default\-modes mode1,mode2,\*(EL
+.OP \-\-dvi
+.OP \-\-groff
+.OP \-\-html
+.OP \-\-latin1
+.OP \-\-mode display_mode
+.OP \-\-pdf
+.OP \-\-pdf2
+.OP \-\-ps
+.OP \-\-source
+.OP \-\-text
+.OP \-\-to\-stdout
+.OP \-\-tty
+.OP \-\-utf8
+.OP \-\-viewer prog
+.OP \-\-www
+.OP \-\-xhtml
+.OP \-\-x\~\fR|\fB\~\-\-X\fP
+.YS
+.RE
+.
+.
+.TP
+.I options related to \%groff
+.RS
+.P
+.SY
+.OP \-T\~\fR|\fB\~\-\-device device
+.OP \-Z\~\fR|\fB\~\-\-intermediate\-output\~\fR|\fB\~\-\-ditroff
+.YS
+.P
+All further
+.B \%groff
+short options are accepted.
+.RE
+.
+.
+.TP
+.I options for man\~pages
+.RS
+.P
+.SY
+.OP \-\-apropos
+.OP \-\-apropos\-data
+.OP \-\-apropos\-devel
+.OP \-\-apropos\-progs
+.OP \-\-man
+.OP \-\-no\-man
+.OP \-\-no\-special
+.OP \-\-whatis
+.YS
+.RE
+.
+.
+.TP
+.I long options taken over from GNU man
+.RS
+.P
+.SY
+.OP \-\-all
+.OP \-\-ascii
+.OP \-\-ditroff
+.OP \-\-extension suffix
+.OP \-\-locale language
+.OP \-\-local\-file
+.OP \-\-location\~\fR|\fB\~\-\-where
+.OP \-\-manpath dir1:dir2:\*(EL
+.OP \-\-no\-location
+.OP \-\-pager program
+.OP \-\-sections sec1:sec2:\*(EL
+.OP \-\-systems sys1,sys2,\*(EL
+.OP \-\-troff\-device device
+.YS
+.P
+Further long options of \f(CRGNU\fP
+.B man
+are accepted as well.
+.RE
+.
+.
+.TP
+.I options mapped to X Window System Toolkit Intrinsics options
+.RS
+.P
+.SY
+.OP \-\-bd\~\fR|\fB\~\-\-bordercolor pixels
+.OP \-\-bg\~\fR|\fB\~\-\-background color
+.OP \-\-bw\~\fR|\fB\~\-\-borderwidth pixels
+.OP \-\-display X-display
+.OP \-\-fg\~\fR|\fB\~\-\-foreground color
+.OP \-\-fn\~\fR|\fB\~\-\-ft\~\fR|\fB\~\-\-font font_name
+.OP \-\-geometry size_pos
+.OP \-\-resolution value
+.OP \-\-rv
+.OP \-\-title string
+.OP \-\-xrm X\-resource
+.YS
+.RE
+.
+.
+.TP
+.I options for development
+.RS
+.P
+.SY
+.OP \-\-debug
+.OP \-\-debug\-filenames
+.OP \-\-debug\-grog
+.OP \-\-debug\-keep
+.OP \-\-debug\-params
+.OP \-\-debug\-tmpdir
+.OP \-\-do\-nothing
+.OP \-\-print text
+.OP \-V
+.YS
+.RE
+.
+.
+.TP
+.I \%filespec arguments
+.RS
+.P
+The
+.I \%filespec
+parameters are all arguments that are neither an option nor an option
+argument.
+.
+They usually mean a file name or a
+.I man page
+searching scheme.
+.
+.
+.P
+In the following, the term
+.I section_extension
+is used.
+.
+It means a word that consists of a
+.I man section
+that is optionally followed by an
+.IR extension .
+.
+The name of a
+.I man section
+is a single character from
+.BR \%[1\(en9on] ,
+the
+.I extension
+is some word.
+.
+The
+.I extension
+is mostly lacking.
+.
+.
+.P
+No
+.I \%filespec
+parameters means standard input.
+.
+.
+.TP 10m
+.B \-
+stands for standard input (can occur several times).
+.
+.
+.TP
+.I filename
+the path name of an existing file.
+.
+.
+.TP
+.BI man: name ( section_extension )
+.TQ
+.BI man: name . section_extension
+.TQ
+.IB name ( section_extension )
+.TQ
+.IB name . section_extension
+.TQ
+.I "section_extension name"
+search the \%man\~page
+.I \%name
+in the section with optional extension
+.IR section_extension .
+.
+.
+.TP
+.BI man: name
+\%man\~page in the lowest
+.I \%man\~section
+that has
+.IR \%name .
+.
+.
+.TP
+.I name
+if
+.I \%name
+is not an existing file search for the man\~page
+.I \%name
+in the lowest man\~section.
+.
+.RE
+.
+.
+.\" ====================================================================
+.SH "OPTION DETAILS"
+.\" ====================================================================
+.
+The
+.B \%groffer
+program can usually be run with very few options.
+.
+But for special purposes, it supports many options.
+.
+These can be classified in 5 option classes.
+.
+.
+.P
+All short options of
+.B \%groffer
+are compatible with the short options of
+.BR \%groff (@MAN1EXT@).
+.
+All long options of
+.B \%groffer
+are compatible with the long options of
+.BR \%man (1).
+.
+.
+.P
+Arguments for long option names can be abbreviated in several ways.
+.
+First, the argument is checked whether it can be prolonged as is.
+.
+Furthermore, each minus sign
+.B \-
+is considered as a starting point for a new abbreviation.
+.
+This leads to a set of multiple abbreviations for a single argument.
+.
+For example,
+.B \-\-de\-n\-f
+can be used as an abbreviation for
+.BR \-\-debug\-not\-func ,
+but
+.B \-\-de\-n
+works as well.
+.
+If the abbreviation of the argument leads to several resulting options
+an error is raised.
+.
+.
+.P
+These abbreviations are only allowed in the environment variable
+.IR \%GROFFER_OPT ,
+but not in the configuration files.
+.
+In configuration, all long options must be exact.
+.
+.
+.\" ====================================================================
+.SS "groffer breaking Options"
+.\" ====================================================================
+.
+As soon as one of these options is found on the command line it is
+executed, printed to standard output, and the running
+.B \%groffer
+is terminated thereafter.
+.
+All other arguments are ignored.
+.
+.
+.TP
+.B \-h\~\fR|\fB\~\-\-help
+Print help information with a short explanation of options to
+standard output.
+.
+.
+.TP
+.B \-v\~\fR|\fB\~\-\-version
+Print version information to standard output.
+.
+.
+.\" ====================================================================
+.SS "groffer Mode Options"
+.\" ====================================================================
+.
+The display mode and the viewer programs are determined by these
+options.
+.
+If none of these mode and viewer options is specified
+.B \%groffer
+tries to find a suitable display mode automatically.
+.
+The default modes are
+.IR "mode pdf" ,
+.IR "mode ps" ,
+.IR "mode html" ,
+.IR "mode xhtml" ,
+.IR "mode x" ,
+and
+.I "mode dvi"
+in the X Window System with different viewers and
+.I mode tty
+with device
+.I utf8
+under
+.B less
+on a terminal; other modes are tested if the programs for the main
+default mode do not exist.
+.
+.
+.P
+In the X Window System, many programs create their own window when
+called.
+.
+.B \%groffer
+can run these viewers as an independent program in the background.
+.
+As this does not work in text mode on a terminal (tty) there must be a
+way to know which viewers are X Window System-based graphical
+programs.
+.
+The
+.B \%groffer
+script has a small amount of information on some viewer names.
+.
+If a viewer argument of the command\-line chooses an element that is
+recognized as an X Window System-based program in this list, it is
+treated as a viewer that can run in the background.
+.
+Unrecognized viewers are not run in the background.
+.
+.
+.P
+For each mode, you are free to choose whatever viewer you want.
+.
+That need not be some graphical viewer suitable for this mode.
+.
+There is a chance to view the output source; for example, the
+combination of the options
+.B \-\-mode=ps
+and
+.B \-\-viewer=less
+shows the content of the
+.I PostScript
+output, the source code, with the pager
+.BR less .
+.
+.
+.TP
+.B \-\-auto
+Equivalent to
+.BR \-\-mode=auto .
+.
+.
+.TP
+.B \-\-default
+Reset all configuration from previously processed command-line options
+to the default values.
+.
+This is useful to wipe out all former options of the configuration, in
+.IR \%GROFFER_OPT ,
+and restart option processing using only the rest of the command line.
+.
+.
+.TP
+.BI \-\-default\-modes \ mode1,mode2,\*(EL
+Set the sequence of modes for
+.I \%auto\~mode
+to the comma separated list given in the argument.
+.
+See
+.B \-\-mode
+for details on modes.
+Display in the default manner; actually, this means to try the modes
+.IR x ,
+.IR ps ,
+and
+.I \%tty
+in this sequence.
+.
+.
+.
+.TP
+.B \-\-dvi
+Equivalent to
+.BR \-\-mode=\%dvi .
+.
+Known
+.I \%DVI
+viewers for the X Window System include
+.BR \%xdvi (1)
+and
+.BR \%dvilx (1).
+.
+.
+.TP
+.B \-\-groff
+Equivalent to
+.BR \-\-mode=groff .
+.
+.
+.TP
+.B \-\-html
+Equivalent to
+.BR \-\-mode=html .
+.
+.
+.TP
+.BI \-\-mode \ value
+.
+Set the display mode.
+.
+The following mode values are recognized:
+.
+.RS
+.
+.TP
+.B auto
+Select the automatic determination of the display mode.
+.
+The sequence of modes that are tried can be set with the
+.B \-\-default\-modes
+option.
+.
+Useful for restoring the
+.I \%default\~mode
+when a different mode was specified before.
+.
+.
+.TP
+.B dvi
+Display formatted input in a
+.I \%DVI
+viewer program.
+.
+By default, the formatted input is displayed with the
+.BR \%xdvi (1)
+program.
+.
+.
+.TP
+.B groff
+After the file determination, switch
+.B \%groffer
+to process the input like
+.BR \%groff (@MAN1EXT@)
+would do.
+.
+This disables the
+.I \%groffer
+viewing features.
+.
+.
+.TP
+.B html
+Translate the input into HTML format and display the result in a web
+browser program.
+.
+By default, the existence of a sequence of standard web browsers is
+tested, starting with
+.BR \%konqueror (1)
+and
+.BR \%mozilla (1).
+The text HTML viewer is
+.BR \%lynx (1).
+.
+By default, the existence of a sequence of standard web browsers is
+tested, starting with
+.BR \%konqueror (1)
+and
+.BR \%mozilla (1).
+The text HTML viewer is
+.BR \%lynx (1).
+.
+.
+.TP
+.B pdf
+Transform
+.I roff input files
+into a
+.I PDF file
+by using the
+.B groff (@MAN1EXT@)
+device
+.BR -Tpdf .
+.
+This is the default
+.B PDF
+generator.
+.
+The generated
+.I PDF file
+is displayed with suitable viewer programs, such as
+.BR okular (1).
+.
+.
+.TP
+.B pdf2
+This is the traditional
+.IR "pdf mode" .
+.
+Sometimes this mode produces more correct output than the default
+.BR "PDF mode" .
+.
+By default, the input is formatted by
+.B \%groff
+using the PostScript device, then it is transformed into the PDF file
+format using
+.BR \%gs (1),
+or
+.BR ps2pdf (1).
+.
+If that's not possible, the
+.I PostScript mode (ps)
+is used instead.
+.
+Finally it is displayed using different viewer programs.
+.
+.
+.TP
+.B ps
+Display formatted input in a PostScript viewer program.
+.
+By default, the formatted input is displayed in one of many viewer
+programs.
+.
+.
+.TP
+.B text
+Format in a
+.I \%groff\~text\~mode
+and write the result to standard output without a pager or viewer
+program.
+.
+The text device,
+.I \%latin1
+by default, can be chosen with option
+.BR \-T .
+.
+.
+.TP
+.B tty
+Format in a
+.I \%groff\~text\~mode
+and write the result to standard output using a text pager program,
+even when in the X Window System.
+.
+.
+.TP
+.B www
+Equivalent to
+.BR \-\-mode=html .
+.
+.
+.TP
+.B x
+Display the formatted input in a native
+.I roff
+viewer.
+.
+By default, the formatted input is displayed with the
+.BR \%gxditview (@MAN1EXT@)
+program being distributed together with
+.BR \%groff .
+But the legacy X Window System application
+.BR \%xditview (1)
+can also be chosen with the option
+.BR \-\-viewer .
+The default resolution is
+.BR 75dpi ,
+but
+.B 100dpi
+are also possible.
+.
+The default
+.I groff
+device
+for the resolution of
+.B 75dpi
+is
+.BR X75\-12 ,
+for
+.B 100dpi
+it is
+.BR X100 .
+.
+The corresponding
+.I "groff intermediate output"
+for the actual device is generated and the result is displayed.
+.
+For a resolution of
+.BR 100dpi ,
+the default width of the geometry of the display program is chosen to
+.BR 850dpi .
+.
+.
+.TP
+.B X
+Equivalent to
+.BR \-\-mode=x .
+.
+.
+.TP
+.B xhtml
+Translate the input into
+.I XHTML
+format, which is an
+.I XML
+version of
+.IR HTML .
+.
+Then display the result in a web browser program, mostly the known
+.IR "HTML viewers" .
+.
+.
+.P
+The following modes do not use the
+.I \%groffer
+viewing features.
+.
+They are only interesting for advanced applications.
+.
+.
+.TP
+.B groff
+Generate device output with plain
+.I \%groff
+without using the special viewing features of
+.IR \%groffer .
+If no device was specified by option
+.B \-T
+the
+.I \%groff
+default
+.B \%ps
+is assumed.
+.
+.
+.TP
+.B source
+Output the roff source code of the input files without further
+processing.
+.
+.
+.RE
+.
+.
+.TP
+.B \-\-pdf
+Equivalent to
+.BR \-\-mode=pdf .
+.TQ
+.B \-\-pdf2
+Equivalent to
+.BR \-\-mode=pdf2 .
+.
+.
+.TP
+.B \-\-ps
+Equivalent to
+.BR \-\-mode=ps .
+.
+Common PostScript viewers include
+.BR \%okular (1),
+.BR \%evince (1),
+.BR \%gv (1),
+.BR \%ghostview (1),
+and
+.BR \%gs (1),
+.
+In each case, arguments can be provided additionally.
+.
+.
+.TP
+.B \-\-source
+Equivalent to
+.BR \-\-mode=source .
+.
+.
+.TP
+.B \-\-text
+Equivalent to
+.BR \-\-mode=text .
+.
+.
+.TP
+.B \-\-to\-stdout
+The file for the chosen mode is generated and its content is printed
+to standard output.
+.
+It will not be displayed in graphical mode.
+.
+.
+.TP
+.B \-\-tty
+Equivalent to
+.BR \-\-mode=tty .
+The standard pager is
+.BR less (1).
+This option is equivalent to
+.I man
+option
+.BR \-\-pager=\,\fIprog\fP .
+The option argument can be a file name or a program to be searched in
+.IR $PATH ;
+arguments can be provided additionally.
+.
+.
+.TP
+.BI \-\-viewer \ prog
+Choose a viewer program for actual device or mode.
+.
+This can be a file name or a program to be searched in
+.IR $PATH ;
+arguments can be provided additionally.
+.
+.
+.TP
+.B \-\-www
+Equivalent to
+.BR \-\-mode=html .
+.
+.
+.TP
+.B \-\-X\~\fR|\fB\~\-\-x
+Equivalent to
+.BR \-\-mode=x .
+Suitable viewer programs are
+.BR \%gxditview (@MAN1EXT@)
+which is the default and
+.BR \%xditview (1).
+.
+.
+.TP
+.B \-\-
+Signals the end of option processing; all remaining arguments are
+interpreted as
+.I \%filespec
+parameters.
+.
+.
+.P
+Besides these,
+.B \%groffer
+accepts all short options that are valid for the
+.BR \%groff (@MAN1EXT@)
+program.
+.
+All
+.RB \%non- groffer
+options are sent unmodified via
+.B \%grog
+to
+.BR \%groff .
+.
+So postprocessors, macro packages, compatibility with
+.I classical
+.IR \%troff ,
+and much more can be manually specified.
+.
+.
+.\" ====================================================================
+.SS "Options related to groff"
+.\" ====================================================================
+.
+All short options of
+.B \%groffer
+are compatible with the short options of
+.BR \%groff (@MAN1EXT@).
+.
+The following of
+.B \%groff
+options have either an additional special meaning within
+.B \%groffer
+or make sense for normal usage.
+.
+.
+.P
+Because of the special outputting behavior of the
+.B \%groff
+option
+.B \-Z
+.B \%groffer
+was designed to be switched into
+.IR \%groff\~mode ;
+the
+.I \%groffer
+viewing features are disabled there.
+.
+The other
+.B \%groff
+options do not switch the mode, but allow to customize the formatting
+process.
+.
+.
+.TP
+.B \-\-a
+This generates an ASCII approximation of output in the
+.IR \%text\~modes .
+.
+That could be important when the text pager has problems with control
+sequences in
+.IR "tty mode" .
+.
+.
+.TP
+.BI \-\-m \ file
+Add
+.I \%file
+as a
+.I \%groff
+macro file.
+.
+This is useful in case it cannot be recognized automatically.
+.
+.
+.TP
+.BI \-\-P \ opt_or_arg
+Send the argument
+.I \%opt_or_arg
+as an option or option argument to the actual
+.B \%groff
+postprocessor.
+.
+.
+.TP
+.B \-\-T \fIdevname\fR\~\fR|\fB\~\-\-device \fIdevname\fR
+.
+This option determines
+.BR \%groff 's
+output device.
+.
+The most important devices are the text output devices for referring
+to the different character sets, such as
+.BR \%ascii ,
+.BR \%utf8 ,
+.BR \%latin1 ,
+.BR \%utf8 ,
+and others.
+.
+Each of these arguments switches
+.B \%groffer
+into a
+.I \%text\~mode
+using this device, to
+.I \%mode\~tty
+if the actual mode is not a
+.IR \%text\~mode .
+.
+The following
+.I \%devname
+arguments are mapped to the corresponding
+.B \%groffer
+.B \-\-mode=\,\fIdevname\fR
+option:
+.BR \%dvi ,
+.BR \%html ,
+.BR \%xhtml ,
+and
+.BR \%ps .
+All
+.B \%X*
+arguments are mapped to
+.IR \%mode\~x .
+Each other
+.I \%devname
+argument switches to
+.I \%mode\~groff
+using this device.
+.
+.
+.TP
+.B \-\-X
+is equivalent to
+.BR "groff \-X" .
+It displays the
+.I groff intermediate output
+with
+.BR gxditview .
+As the quality is relatively bad this option is deprecated; use
+.B \-\-X
+instead because the
+.I \%x\~mode
+uses an
+.IR X *
+device for a better display.
+.
+.
+.TP
+.B \-Z\~\fR|\fB\~\-\-intermediate-output\~\fR|\fB\~\-\-ditroff
+Switch into
+.I \%groff\~mode
+and format the input with the
+.I \%groff intermediate output
+without postprocessing; see
+.BR \%groff_out (@MAN5EXT@).
+This is equivalent to option
+.B \-\-ditroff
+of
+.IR \%man ,
+which can be used as well.
+.
+.
+.P
+All other
+.B \%groff
+options are supported by
+.BR \%groffer ,
+but they are just transparently transferred to
+.B \%groff
+without any intervention.
+.
+The options that are not explicitly handled by
+.B \%groffer
+are transparently passed to
+.BR \%groff .
+.
+Therefore these transparent options are not documented here, but in
+.BR \%groff (@MAN1EXT@).
+Due to the automatism in
+.BR \%groffer ,
+none of these
+.B \%groff
+options should be needed, except for advanced usage.
+.
+.
+.\" ====================================================================
+.SS "Options for man\~pages"
+.\" ====================================================================
+.
+.TP
+.B \-\-apropos
+Start the
+.BR \%apropos (1)
+command or facility of
+.BR \%man (1)
+for searching the
+.I \%filespec
+arguments within all
+.I \%man\~page
+descriptions.
+.
+Each
+.I \%filespec
+argument is taken for search as it is;
+.I section
+specific parts are not handled, such that
+.B 7 groff
+searches for the two arguments
+.B 7
+and
+.BR groff ,
+with a large result; for the
+.I \%filespec
+.B groff.7
+nothing will be found.
+.
+The
+.I language
+locale is handled only when the called programs do support this; the
+GNU
+.B apropos
+and
+.B man \-k
+do not.
+.
+The display differs from the
+.B \%apropos
+program by the following concepts:
+.RS
+.IP \*(BU 2m
+Construct a
+.I \%groff
+frame similar to a
+.I \%man\~page
+to the output of
+.BR \%apropos ,
+.IP \*(BU 2m
+each
+.I \%filespec
+argument is searched on its own.
+.IP \*(BU 2m
+The restriction by
+.B \-\-sections
+is handled as well,
+.IP \*(BU 2m
+wildcard characters are allowed and handled without a further option.
+.RE
+.
+.
+.TP
+.B \-\-apropos\-data
+Show only the
+.B \%apropos
+descriptions for data documents, these are the
+.BR \%man (7)
+.IR sections\~4 ", " 5 ", and " 7 .
+.
+Direct
+.I section
+declarations are ignored, wildcards are accepted.
+.
+.
+.TP
+.B \-\-apropos\-devel
+Show only the
+.B \%apropos
+descriptions for development documents, these are the
+.BR man (7)
+.IR sections\~2 ", " 3 ", and " 9 .
+.
+Direct
+.I section
+declarations are ignored, wildcards are accepted.
+.
+.
+.TP
+.B \-\-apropos\-progs
+Show only the
+.B \%apropos
+descriptions for documents on programs, these are the
+.BR \%man (7)
+.IR sections\~1 ", " 6 ", and " 8 .
+.
+Direct
+.I section
+declarations are ignored, wildcards are accepted.
+.
+.
+.TP
+.B \-\-whatis
+For each
+.I \%filespec
+argument search all
+.I \%man\~pages
+and display their description \(em or say that it is not a
+.IR \%man\~page .
+This is written from anew, so it differs from
+.IR man 's
+.B whatis
+output by the following concepts
+.RS
+.IP \*(BU 2m
+each retrieved file name is added,
+.IP \*(BU 2m
+local files are handled as well,
+.IP \*(BU 2m
+the \fIlanguage\fP and \fIsystem\fP locale is supported,
+.IP \*(BU 2m
+the display is framed by a
+.I groff
+output format similar to a
+.IR \%man\~page ,
+.IP \*(BU 2m
+wildcard characters are allowed without a further option.
+.RE
+.
+.
+.P
+The following options were added to
+.B \%groffer
+for choosing whether the file name arguments are interpreted as names
+for local files or as a search pattern for
+.IR \%man\~pages .
+.
+The default is looking up for local files.
+.
+.
+.TP
+.B \-\-man
+Check the non-option command-line arguments
+.nh
+.RI ( filespecs )
+.hy
+first on being
+.IR \%man\~pages ,
+then whether they represent an existing file.
+.
+By default, a
+.I \%filespec
+is first tested whether it is an existing file.
+.
+.
+.TP
+.B \-\-no-man\~\fR|\fB\~\-\-local-file
+Do not check for
+.IR \%man\~pages .
+.
+.B \-\-local-file
+is the corresponding
+.B man
+option.
+.
+.
+.TP
+.B \-\-no-special
+Disable former calls of
+.BR \-\-all ,
+.BR \-\-apropos* ,
+and
+.BR \-\-whatis .
+.
+.
+.\" ====================================================================
+.SS "Long options taken over from GNU man"
+.\" ====================================================================
+.
+The long options of
+.B \%groffer
+were synchronized with the long options of \f(CRGNU\fP
+.BR man .
+.
+All long options of \f(CRGNU\fP
+.B man
+are recognized, but not all of these options are important to
+.BR \%groffer ,
+so most of them are just ignored.
+.
+These ignored
+.B man
+options are
+.BR \-\-catman ,
+.BR \-\-troff ,
+and
+.BR \-\-update .
+.
+.
+.P
+In the following, the
+.B man
+options that have a special meaning for
+.B \%groffer
+are documented.
+.
+.
+.P
+If your system has \f(CRGNU\fP
+.B man
+installed the full set of long and short options of the \f(CRGNU\fP
+.B man
+program can be passed via the environment variable
+.IR MANOPT ;
+see
+.BR \%man (1).
+.
+.
+.TP
+.B \-\-all
+In searching
+.IR \%man\~pages ,
+retrieve all suitable documents instead of only one.
+.
+.
+.TP
+.B \-7\~\fR|\fB\~\-\-ascii
+In
+.IR \%text\~modes ,
+display ASCII translation of special characters for critical environment.
+.
+This is equivalent to
+.BR "groff \%\-mtty_char" ;
+see
+.BR groff_tmac (@MAN5EXT@).
+.
+.
+.TP
+.B \-\-ditroff
+Produce
+.IR "groff intermediate output" .
+This is equivalent to
+.B \%groffer
+.BR \-Z .
+.
+.
+.TP
+.BI \-\-extension \ suffix
+Restrict
+.I \%man\~page
+search to file names that have
+.I \%suffix
+appended to their section element.
+.
+For example, in the file name
+.I \%/usr/share/man/man3/terminfo.3ncurses.gz
+the
+.I \%man\~page
+extension is
+.IR \%ncurses .
+.
+.
+.TP
+.BI \-\-locale \ language
+.
+Set the language for
+.IR \%man\~pages .
+.
+This has the same effect, but overwrites
+.IR $LANG .
+.
+.
+.TP
+.B \-\-location
+Print the location of the retrieved files to standard error.
+.
+.
+.TP
+.B \-\-no-location
+Do not display the location of retrieved files; this resets a former
+call to
+.BR \-\-location .
+.
+This was added by
+.BR \%groffer .
+.
+.
+.TP
+.BI \-\-manpath \ 'dir1:dir2:\*(EL'
+Use the specified search path for retrieving
+.I \%man\~pages
+instead of the program defaults.
+.
+If the argument is set to the empty string "" the search for
+.I \%man\~page
+is disabled.
+.
+.
+.TP
+.B \-\-pager
+Set the pager program in
+.IR \%tty\~mode ;
+default is
+.BR \%less .
+.
+This can be set with
+.BR \-\-viewer .
+.
+.
+.TP
+.BI \-\-sections \ sec1:sec2:\*(EL
+Restrict searching for
+.I \%man\~pages
+to the given
+.IR sections ,
+a colon-separated list.
+.
+.
+.TP
+.BI \-\-systems \ sys1,sys2,\*(EL
+Search for
+.I \%man\~pages
+for the given operating systems; the argument
+.I \%systems
+is a comma-separated list.
+.
+.
+.TP
+.B \-\-where
+Equivalent to
+.BR \-\-location .
+.
+.
+.\" ====================================================================
+.SS "X Window System Toolkit Intrinsics Options"
+.\" ====================================================================
+.
+The following long options were adapted from the corresponding
+X Window System Toolkit Intrinsics options.
+.
+.B \%groffer
+will pass them to the actual viewer program if it is an
+X Window System program.
+.
+Otherwise these options are ignored.
+.
+.
+.P
+Unfortunately these options use the old style of a single minus for
+long options.
+.
+For
+.B \%groffer
+that was changed to the standard with using a double minus for long
+options, for example,
+.B \%groffer
+uses the option
+.B \-\-font
+for the X Window System Toolkit Intrinsics option
+.BR \-font .
+.
+.
+.P
+See
+.BR X (7)
+and the manual
+.I "X Toolkit Intrinsics \(en C Language Interface"
+for more details on these options and their arguments.
+.
+.
+.TP
+.BI \-\-background \ color
+Set the background color of the viewer window.
+.
+.
+.TP
+.BI \-\-bd \ pixels
+This is equivalent to
+.BR \-\-bordercolor .
+.
+.
+.TP
+.BI \-\-bg \ color
+This is equivalent to
+.BR \-\-background .
+.
+.
+.TP
+.BI \-\-bw \ pixels
+This is equivalent to
+.BR \-\-borderwidth .
+.
+.
+.TP
+.BI \-\-bordercolor \ pixels
+Specifies the color of the border surrounding the viewer window.
+.
+.
+.TP
+.BI \-\-borderwidth \ pixels
+Specifies the width in pixels of the border surrounding the viewer
+window.
+.
+.
+.TP
+.BI \-\-display \ X-display
+Set the X Window System display on which the viewer program
+shall be started.
+.
+See section \(lqDisplay Names\(rq in
+.BR X (7)
+for the syntax of the argument.
+.
+.
+.TP
+.BI \-\-foreground \ color
+Set the foreground color of the viewer window.
+.
+.
+.TP
+.BI \-\-fg \ color
+This is equivalent to
+.BR \-\-foreground .
+.
+.
+.TP
+.BI \-\-fn \ font_name
+This is equivalent to
+.BR \-\-font .
+.
+.
+.TP
+.BI \-\-font \ font_name
+Set the font used by the viewer window.
+.
+The argument is an X Window System font name.
+.
+.
+.TP
+.BI \-\-ft \ font_name
+This is equivalent to
+.BR \-\-font .
+.
+.
+.TP
+.BI \-\-geometry \ size_pos
+Set the geometry of the display window, that means its size and its
+starting position.
+.
+See section \(lqGeometry Specifications\(rq in
+.BR X (7)
+for the syntax of the argument.
+.
+.
+.TP
+.BI \-\-resolution \ value
+Set X Window System resolution in dpi (dots per inch) in some
+viewer programs.
+.
+The only supported dpi values are
+.B 75
+and
+.BR 100 .
+.
+Actually, the default resolution for
+.B \%groffer
+is set to
+.BR 75dpi .
+The resolution also sets the default device in
+.IR "mode x" .
+.
+.
+.TP
+.B \-\-rv
+Reverse foreground and background color of the viewer window.
+.
+.
+.TP
+.BI \-\-title "\ 'some text'"
+Set the title for the viewer window.
+.
+.
+.TP
+.BI \-\-xrm \ 'resource'
+Set the X Window System server resource to the given value.
+.
+.
+.\" ====================================================================
+.SS "Options for Development"
+.\" ====================================================================
+.
+.TP
+.B \-\-debug
+Enable all debugging options
+.BR \-\-debug\-\,\fItype\fP .
+.
+The temporary files are kept and not deleted, the
+.B grog
+output is printed, the name of the temporary directory is printed, the
+displayed file names are printed, and the parameters are printed.
+.
+.
+.TP
+.B \-\-debug\-filenames
+Print the names of the files and
+.I \%man\~pages
+that are displayed by
+.BR \&groffer .
+.
+.
+.TP
+.B \-\-debug\-grog
+Print the output of all
+.B grog
+commands.
+.
+.
+.TP
+.B \-\-debug\-keep
+Enable two debugging informations.
+.
+Print the name of the temporary directory and keep the temporary
+files, do not delete them during the run of
+.BR \%groffer .
+.
+.
+.TP
+.B \-\-debug\-params
+Print the parameters, as obtained from the configuration files, from
+.IR \%GROFFER_OPT ,
+and the command-line arguments.
+.
+.
+.TP
+.B \-\-debug\-tmpdir
+Print the name of the temporary directory.
+.
+.
+.TP
+.B \-\-do-nothing
+This is like
+.BR \-\-version ,
+but without the output; no viewer is started.
+.
+This makes only sense in development.
+.
+.
+.TP
+.B \-\-print=\,\fItext\fR
+Just print the argument to standard error.
+.
+This is good for parameter check.
+.
+.
+.TP
+.B \-V
+This is an advanced option for debugging only.
+.
+Instead of displaying the formatted input, a lot of
+.I \%groffer
+specific information is printed to standard output:
+.
+.RS
+.IP \*(BU 2m
+the output file name in the temporary directory,
+.
+.IP \*(BU 2m
+the display mode of the actual
+.B \%groffer
+run,
+.
+.IP \*(BU 2m
+the display program for viewing the output with its arguments,
+.
+.IP \*(BU 2m
+the active parameters from the config files, the arguments in
+.IR \%GROFFER_OPT ,
+and the arguments of the command line,
+.
+.IP \*(BU 2m
+the pipeline that would be run by the
+.B \%groff
+program, but without executing it.
+.RE
+.
+.
+.P
+Other useful debugging options are the
+.B \%groff
+option
+.B \-Z
+and
+.BR \-\-mode=groff .
+.
+.
+.\" ====================================================================
+.SS "Filespec Arguments"
+.\" ====================================================================
+.
+A
+.I \%filespec
+parameter is an argument that is not an option or option argument.
+.
+In
+.BR \%groffer ,
+.I \%filespec
+parameters are a file name or a template for searching
+.IR \%man\~pages .
+.
+These input sources are collected and composed into a single output
+file such as
+.B \%groff
+does.
+.
+.
+.P
+The strange \%\f(CRPOSIX\fP behavior to regard all arguments behind
+the first non-option argument as
+.I \%filespec
+arguments is ignored.
+.
+The \f(CRGNU\fP behavior to recognize options even when mixed with
+.I \%filespec
+arguments is used throughout.
+.
+But, as usual, the double minus argument
+.B \-\-
+ends the option handling and interprets all following arguments as
+.I \%filespec
+arguments; so the \%\f(CRPOSIX\fP behavior can be easily adopted.
+.
+.
+.P
+The options
+.B \-\-apropos*
+have a special handling of
+.I filespec
+arguments.
+.
+Each argument is taken as a search scheme of its own.
+.
+Also a regexp (regular expression) can be used in the filespec.
+.
+For example,
+.B groffer \-\-apropos '^gro.f$'
+searches
+.B groff
+in the
+.I man\~page
+name, while
+.B groffer \-\-apropos groff
+searches
+.B groff
+somewhere in the name or description of the
+.IR man\~pages .
+.
+.
+.P
+All other parts of
+.IR groffer ,
+such as the normal display or the output with
+.B \-\-whatis
+have a different scheme for
+.IR filespecs .
+No regular expressions are used for the arguments.
+.
+The
+.I filespec
+arguments are handled by the following scheme.
+.
+.
+.P
+It is necessary to know that on each system the
+.I \%man\~pages
+are sorted according to their content into several sections.
+.
+The
+.I classical man sections
+have a single-character name, either a digit from
+.B 1
+to
+.B 9
+or one of the characters
+.B n
+or
+.BR o .
+.
+.
+.P
+This can optionally be followed by a string, the so-called
+.IR extension .
+The
+.I extension
+allows the storage of several
+.I man\~pages
+with the same name in the same
+.IR section .
+But the
+.I extension
+is only rarely used; usually it is omitted.
+.
+Then the
+.I extensions
+are searched automatically by alphabet.
+.
+.
+.P
+In the following, we use the name
+.I section_extension
+for a word that consists of a single character
+.I section
+name or a
+.I section
+character that is followed by an
+.IR extension .
+.
+Each
+.I \%filespec
+parameter can have one of the following forms in decreasing sequence.
+.
+.
+.IP \*(BU 2m
+No
+.I \%filespec
+parameters means that
+.B \%groffer
+waits for standard input.
+.
+The minus option
+.B \-
+always stands for standard input; it can occur several times.
+.
+If you want to look up a
+.I \%man\~page
+called
+.B \-
+use the argument
+.BR man:\- .
+.
+.
+.IP \*(BU 2m
+Next a
+.I \%filespec
+is tested whether it is the path name of an existing file.
+.
+Otherwise it is assumed to be a searching pattern for a
+.IR \%man\~page .
+.
+.
+.IP \*(BU 2m
+.BI \%man: name ( section_extension ) ,
+.BI \%man: name . section_extension,
+.IB \%name ( section_extension ) ,
+or
+.IB \%name . section_extension
+search the \%man\~page
+.I \%name
+in \%man\~section and possibly extension of
+.IR \%section_extension .
+.
+.
+.IP \*(BU 2m
+Now
+.BI \%man: name
+searches for a
+.I \%man\~page
+in the lowest
+.I \%man\~section
+that has a document called
+.IR \%name .
+.
+.
+.IP \*(BU 2m
+.I \%section_extension\~name
+is a pattern of 2 arguments that originates from a strange argument
+parsing of the
+.B man
+program.
+.
+Again, this searches the man page
+.I name
+with
+.IR \%section_extension ,
+a combination of a
+.I section
+character optionally followed by an
+.IR extension .
+.
+.
+.IP \*(BU 2m
+We are left with the argument
+.I \%name
+which is not an existing file.
+.
+So this searches for the
+.I \%man\~page
+called
+.I \%name
+in the lowest
+.I \%man\~section
+that has a document for this name.
+.
+.
+.P
+Several file name arguments can be supplied.
+.
+They are mixed by
+.B \%groff
+into a single document.
+.
+Note that the set of option arguments must fit to all of these file
+arguments.
+.
+So they should have at least the same style of the
+.I \%groff
+language.
+.
+.
+.\" ====================================================================
+.SH "OUTPUT MODES"
+.\" ====================================================================
+.
+By default, the
+.B \%groffer
+program collects all input into a single file, formats it with the
+.B \%groff
+program for a certain device, and then chooses a suitable viewer
+program.
+.
+The device and viewer process in
+.B \%groffer
+is called a
+.IR \%mode .
+.
+The mode and viewer of a running
+.B \%groffer
+program is selected automatically, but the user can also choose it
+with options.
+.
+.
+The modes are selected by option the arguments of
+.BR \-\-mode=\,\fIanymode .
+Additionally, each of this argument can be specified as an option of
+its own, such as
+.BR anymode .
+Most of these modes have a viewer program, which can be chosen by the
+option
+.BR \-\-viewer .
+.
+.
+.P
+Several different modes are offered: graphical modes for
+the X Window System,
+.IR \%text\~modes ,
+and some direct
+.I \%groff\~modes
+for debugging and development.
+.
+.
+.P
+By default,
+.B \%groffer
+first tries whether
+.I \%x\~mode
+is possible, then
+.IR \%ps\~mode ,
+and finally
+.IR \%tty\~mode .
+.
+This mode testing sequence for
+.I \%auto\~mode
+can be changed by specifying a comma separated list of modes with the
+option
+.B \-\-default\-modes.
+.
+.
+.P
+The searching for
+.I \%man\~pages
+and the decompression of the input are active in every mode.
+.
+.
+.\" ====================================================================
+.SS "Graphical Display Modes"
+.\" ====================================================================
+.
+The graphical display modes work mostly in the X Window System
+environment (or similar implementations within other windowing
+environments).
+.
+The environment variable
+.I \%DISPLAY
+and the option
+.B \-\-display
+are used for specifying the X Window System display to be used.
+.
+If this environment variable is empty,
+.B \%groffer
+assumes that the X Window System is not running and changes to a
+.IR \%text\~mode .
+.
+You can change this automatic behavior by the option
+.BR \-\-default\-modes .
+.
+.
+.P
+Known viewers for the graphical display modes and their standard
+X Window System viewer programs are
+.
+.IP \*(BU 2m
+in a PDF viewer
+.nh
+.RI ( \%pdf\~mode )
+.hy
+.
+.IP \*(BU 2m
+in a web browser
+.nh
+.RI ( html ,
+.RI ( xhtml ,
+or
+.IR \%www\~mode )
+.hy
+.RE
+.
+.IP \*(BU 2m
+in a PostScript viewer
+.nh
+.RI ( \%ps\~mode )
+.hy
+.
+.IP \*(BU 2m
+X Window System
+.I roff
+viewers such as
+.BR \%gxditview (@MAN1EXT@)
+or
+.BR \%xditview (1)
+(in
+.IR \%x\~mode )
+.
+.IP \*(BU 2m
+in a DVI viewer program
+.nh
+.RI ( \%dvi\~mode )
+.hy
+.
+.
+.P
+The
+.I \%pdf\~mode
+has a major advantage \(em it is the only graphical display mode that
+allows searching for text within the viewer; this can be a really
+important feature.
+.
+Unfortunately, it takes some time to transform the input into the PDF
+format, so it was not chosen as the major mode.
+.
+.
+.P
+These graphical viewers can be customized by options of the
+X Window System Toolkit Intrinsics.
+.
+But the
+.B \%groffer
+options use a leading double minus instead of the single minus used by
+the X Window System Toolkit Intrinsics.
+.
+.
+.\" ====================================================================
+.SS "Text modes"
+.\" ====================================================================
+.
+There are two modes for text output,
+.I \%mode\~text
+for plain output without a pager and
+.I \%mode\~tty
+for a text output on a text terminal using some pager program.
+.
+.
+.P
+If the variable
+.I \%DISPLAY
+is not set or empty,
+.B \%groffer
+assumes that it should use
+.IR \%tty\~\%mode .
+.
+.
+.P
+In the actual implementation, the
+.I groff
+output device
+.I \%latin1
+is chosen for
+.IR \%text\~modes .
+.
+This can be changed by specifying option
+.B \-T
+or
+.BR \%\-\-device .
+.
+.
+.P
+The pager to be used can be specified by one of the options
+.B \-\-pager
+and
+.BR \-\-viewer ,
+or by the environment variable
+.IR PAGER .
+If all of this is not used the
+.BR \%less (1)
+program with the option
+.B \-r
+for correctly displaying control sequences is used as the default
+pager.
+.
+.
+.\" ====================================================================
+.SS "Special Modes for Debugging and Development"
+.\" ====================================================================
+.
+These modes use the
+.I \%groffer
+file determination and decompression.
+.
+This is combined into a single input file that is fed directly into
+.B \%groff
+with different strategy without the
+.I \%groffer
+viewing facilities.
+.
+These modes are regarded as advanced, they are useful for debugging
+and development purposes.
+.
+.
+.P
+The
+.I \%source\~mode
+with option
+.B \-\-source
+just displays the decompressed input.
+.
+.
+.P
+Option
+.B \-\-to\-stdout
+does not display in a graphical mode.
+.
+It just generates the file for the chosen mode and then prints its
+content to standard output.
+.
+.
+.P
+The
+.I \%groff\~mode
+passes the input to
+.B \%groff
+using only some suitable options provided to
+.BR \%groffer .
+.
+This enables the user to save the generated output into a file or pipe
+it into another program.
+.
+.
+.P
+In
+.IR \%groff\~\%mode ,
+the option
+.B \-Z
+disables post-processing, thus producing the
+.nh
+.I groff intermediate
+.IR output .
+.hy
+.
+In this mode, the input is formatted, but not postprocessed; see
+.BR \%groff_out (@MAN5EXT@)
+for details.
+.
+.
+.P
+All
+.B \%groff
+short options are supported by
+.BR \%groffer .
+.
+.
+.\" ====================================================================
+.SH "MAN PAGE SEARCHING"
+.\" ====================================================================
+.
+The default behavior of
+.B \%groffer
+is to first test whether a file parameter represents a local file; if
+it is not an existing file name, it is assumed to represent the name
+of a
+.IR \%man\~page .
+The following options can be used to determine whether the arguments
+should be handled as file name or
+.I \%man\~page
+arguments.
+.
+.TP
+.B \-\-man
+forces to interpret all file parameters as
+.I \%filespecs
+for searching
+.IR \%man\~pages .
+.
+.TP
+.B \-\-no\-man
+.TQ
+.B \-\-local\-file
+disable the
+.I man
+searching; so only local files are displayed.
+.
+.
+.P
+If neither a local file nor a
+.I \%man\~page
+was retrieved for some file parameter a warning is issued on standard
+error, but processing is continued.
+.
+.
+.\" ====================================================================
+.SS "Search Algorithm"
+.\" ====================================================================
+.
+Let us now assume that a
+.I \%man\~page
+should be searched.
+.
+The
+.B \%groffer
+program provides a search facility for
+.IR \%man\~pages .
+.
+All long options, all environment variables, and most of the
+functionality of the \f(CRGNU\fP
+.BR \%man (1)
+program were implemented.
+.
+The search algorithm shall determine which file is displayed for a given
+.IR \%man\~page .
+The process can be modified by options and environment variables.
+.
+.
+.P
+The only
+.I man
+action that is omitted in
+.B \%groffer
+are the preformatted
+.IR \%man\~pages ,
+also called
+.IR cat\~pages .
+.
+With the excellent performance of the actual computers, the
+preformatted
+.I \%man\~pages
+aren't necessary any longer.
+.
+Additionally,
+.B \%groffer
+is a
+.I roff
+program; it wants to read
+.I roff
+source files and format them itself.
+.
+.
+.P
+The algorithm for retrieving the file for a
+.I \%man\~page
+needs first a set of directories.
+.
+This set starts with the so-called
+.I man\~path
+that is modified later on by adding names of
+.I operating system
+and
+.IR language .
+.
+This arising set is used for adding the section directories which
+contain the
+.I \%man\~page
+files.
+.
+.
+.P
+The
+.I man\~path
+is a list of directories that are separated by colon.
+.
+It is generated by the following methods.
+.
+.IP \*(BU 2m
+The environment variable
+.I \%MANPATH
+can be set.
+.
+.IP \*(BU 2m
+It can be read from the arguments of the environment variable
+.IR MANOPT .
+.
+.IP \*(BU 2m
+The
+.I man\~path
+can be manually specified by using the option
+.BR \-\-manpath .
+An empty argument disables the
+.I \%man\~page
+searching.
+.
+.IP \*(BU 2m
+When no
+.I man\~path
+was set the
+.BR \%manpath (1)
+program is tried to determine one.
+.
+.IP \*(BU 2m
+If this does not work a reasonable default path from
+.I $PATH
+is determined.
+.
+.
+.P
+We now have a starting set of directories.
+.
+The first way to change this set is by adding names of
+.I operating
+.IR systems .
+.
+This assumes that
+.I \%man\~pages
+for several
+.I operating systems
+are installed.
+.
+This is not always true.
+.
+The names of such
+.I operating systems
+can be provided by 3 methods.
+.
+.IP \*(BU 2m
+The environment variable
+.I \%SYSTEM
+has the lowest precedence.
+.
+.IP \*(BU 2m
+This can be overridden by an option in
+.IR MANOPT .
+.
+.IP \*(BU 2m
+This again is overridden by the command-line option
+.BR \-\-systems .
+.
+.
+.P
+Several names of
+.I operating systems
+can be given by appending their names, separated by a comma.
+.
+.
+.P
+The
+.I man\~path
+is changed by appending each
+.I system
+name as subdirectory at the end of each directory of the set.
+.
+No directory of the
+.I man\~path
+set is kept.
+.
+But if no
+.I system
+name is specified the
+.I man\~path
+is left unchanged.
+.
+.
+.P
+After this, the actual set of directories can be changed by
+.I language
+information.
+.
+This assumes that there exist
+.I man\~pages
+in different languages.
+.
+The wanted
+.I language
+can be chosen by several methods.
+.
+.IP \*(BU 2m
+Environment variable
+.IR LANG .
+.
+.IP \*(BU 2m
+This is overridden by
+.IR \%LC_MESSAGES .
+.
+.IP \*(BU 2m
+This is overridden by
+.IR LC_ALL .
+.
+.IP \*(BU 2m
+This can be overridden by providing an option in
+.IR MANOPT .
+.
+.IP \*(BU 2m
+All these environment variables are overridden by the command-line
+option
+.BR \-\-locale .
+.
+.
+.P
+The
+.I default language
+can be specified by specifying one of the pseudo-language parameters
+\f(CRC\fP or \f(CR\%POSIX\fP.
+.
+This is like deleting a formerly given
+.I language
+information.
+.
+The
+.I \%man\~pages
+in the
+.I default language
+are usually in English.
+.
+.
+.P
+Of course, the
+.I language
+name is determined by
+.BR man .
+In \f(CRGNU\fP
+.BR man ,
+it is specified in the \%\f(CRPOSIX\~1003.1\fP based format:
+.P
+.nh
+\fI<language>\/\fP[\f(CB_\fP\,\fI<territory>\/\fP[\f(CB.\fP\
+\fI<character-set>\/\fP[\f(CB,\fP\,\fI<version>\/\fP]]],
+.hy
+.P
+but the two-letter code in
+.nh
+.I <language>
+.hy
+is sufficient for most purposes.
+.
+If for a complicated
+.I language
+formulation no
+.I \%man\~pages
+are found
+.B \%groffer
+searches the country part consisting of these first two characters as
+well.
+.
+.
+.P
+The actual directory set is copied thrice.
+.
+The
+.I language
+name is appended as subdirectory to each directory in the first copy
+of the actual directory set (this is only done when a language
+information is given).
+.
+Then the 2-letter abbreviation of the
+.I language
+name is appended as subdirectories to the second copy of the directory
+set (this is only done when the given language name has more than 2
+letters).
+.
+The third copy of the directory set is kept unchanged (if no
+.I language
+information is given this is the kept directory set).
+.
+These maximally 3 copies are appended to get the new directory set.
+.
+.
+.P
+We now have a complete set of directories to work with.
+.
+In each of these directories, the
+.I man
+files are separated in
+.IR sections .
+.
+The name of a
+.I section
+is represented by a single character, a digit between
+.I 1
+and
+.IR 9 ,
+or the character
+.I o
+or
+.IR n ,
+in this order.
+.
+.
+.P
+For each available
+.IR section ,
+a subdirectory
+.BI man <section>
+exists containing all
+.I man
+files for this
+.IR section ,
+where
+.I <section>
+is a single character as described before.
+.
+Each
+.I man
+file in a
+.I section
+directory has the form
+.IR \%\f(CBman\fP<section>\f(CB/\fP<name>\f(CB.\fP<section>\
+[<extension>][\f(CB.\fP<compression>] ,
+where
+.I \%<extension>
+and
+.I \%<compression>
+are optional.
+.
+.I \%<name>
+is the name of the
+.I \%man\~page
+that is also specified as filespec argument on the command line.
+.
+.
+.P
+The
+.I extension
+is an addition to the section.
+.
+This postfix acts like a subsection.
+.
+An
+.I extension
+occurs only in the file name, not in name of the
+.I section
+subdirectory.
+.
+It can be specified on the command line.
+.
+.
+.P
+On the other hand, the
+.I compression
+is just an information on how the file is compressed.
+.
+This is not important for the user, such that it cannot be specified
+on the command line.
+.
+.
+.P
+There are 4 methods to specify a
+.I section
+on the command line:
+.
+.IP \*(BU 2m
+Environment variable
+.I \%MANSECT
+.
+.IP \*(BU 2m
+Command line option
+.B \-\-sections
+.
+.IP \*(BU 2m
+Appendix to the
+.I name
+argument in the form
+.I <name>.<section>
+.
+.IP \*(BU 2m
+Preargument before the
+.I name
+argument in the form
+.I <section> <name>
+.
+.
+.P
+It is also possible to specify several
+.I sections
+by appending the single characters separated by colons.
+.
+One can imagine that this means to restrict the
+.I \%man\~page
+search to only some
+.IR sections .
+.
+The multiple
+.I sections
+are only possible for
+.I \%MANSECT
+and
+.BR \-\-sections .
+.
+.
+.P
+If no
+.I section
+is specified all
+.I sections
+are searched one after the other in the given order, starting with
+.IR section\~1 ,
+until a suitable file is found.
+.
+.
+.P
+There are 4 methods to specify an
+.I extension
+on the command line.
+.
+But it is not necessary to provide the whole extension name, some
+abbreviation is good enough in most cases.
+.
+.IP \*(BU 2m
+Environment variable
+.I \%EXTENSION
+.
+.IP \*(BU 2m
+Command line option
+.B \-\-extension
+.
+.IP \*(BU 2m
+Appendix to the
+.I <name>.<section>
+argument in the form
+.I <name>.<section><extension>
+.
+.IP \*(BU 2m
+Preargument before the
+.I name
+argument in the form
+.I <section><extension> <name>
+.
+.
+.P
+For further details on
+.I \%man\~page
+searching, see
+.BR \%man (1).
+.
+.
+.\" ====================================================================
+.SS "Examples of man files"
+.\" ====================================================================
+.
+.TP
+.B /usr/share/man/man1/groff.1
+This is an uncompressed file for the
+.I \%man\~page
+\f(CRgroff\fP in
+.IR section\~1 .
+.
+It can be called by
+.EX
+\fIsh#\fR groffer\~groff
+.EE
+No
+.I section
+is specified here, so all
+.I sections
+should be searched, but as
+.I section\~1
+is searched first this file will be found first.
+.
+The file name is composed of the following components.
+.B /usr/share/man/
+must be part of the
+.IR \%man\~path ;
+the subdirectory
+.B man1/
+and the part
+.B .1
+stand for the
+.IR section ;
+.B groff
+is the name of the
+.IR \%man\~page .
+.
+.
+.TP
+.B /usr/local/share/man/man7/groff.7.gz
+The file name is composed of the following components.
+.B /usr/local/share/man
+must be part of the
+.IR \%man\~path ;
+the subdirectory
+.B man7/
+and the part
+.B .7
+stand for the
+.IR section ;
+.B groff
+is the name of the
+.IR \%man\~page ;
+the final part
+.B .gz
+stands for a compression with
+.BR gzip (1).
+As the
+.I section
+is not the first one it must be specified as well.
+.
+This can be done by one of the following commands.
+.EX
+\fIsh#\fR\~groffer\~groff.7
+\fIsh#\fR\~groffer\~7\~groff
+\fIsh#\fR\~groffer\~\-\-sections=7\~groff
+.EE
+.
+.TP
+.B /usr/local/man/man1/ctags.1emacs21.bz2
+Here
+.B /usr/local/man
+must be in
+.IR \%man\~path ;
+the subdirectory
+.B man1/
+and the file name part
+.B .1
+stand for
+.IR section\~1 ;
+the name of the
+.I \%man\~page
+is
+.BR ctags ;
+the section has an extension
+.BR emacs21 ;
+and the file is compressed as
+.B .bz2
+with
+.BR bzip2 (1).
+The file can be viewed with one of the following commands
+.EX
+\fIsh#\fR\~groffer\~ctags.1e
+\fIsh#\fR\~groffer\~1e\~ctags
+\fIsh#\fR\~groffer\~\-\-extension=e\~\-\-sections=1\~ctags
+.EE
+where \f(CRe\fP works as an abbreviation for the extension
+\f(CRemacs21\fP.
+.
+.
+.TP
+.B /usr/man/linux/de/man7/man.7.Z
+The directory
+.B /usr/man
+is now part of the
+.IR \%man\~path ;
+then there is a subdirectory for an
+.I operating system
+name
+.BR linux/ ;
+next comes a subdirectory
+.B de/
+for the German
+.IR language ;
+the
+.I section
+names
+.B man7
+and
+.B .7
+are known so far;
+.B man
+is the name of the
+.IR \%man\~page ;
+and
+.B .Z
+signifies the compression that can be handled by
+.BR gzip (1).
+We want now show how to provide several values for some options.
+.
+That is possible for
+.I sections
+and
+.I operating system
+names.
+.
+So we use as
+.I sections\~5
+and
+.I 7
+and as
+.I system
+names
+.I linux
+and
+.IR aix .
+The command is then
+.sp
+.EX
+\fIsh#\fR groffer\~\-\-locale=de\~\-\-sections=5:7\~\-\-systems=linux,aix\~man
+\fIsh#\fR LANG=de\~MANSECT=5:7\~SYSTEM=linux,aix\~groffer\~man
+.EE
+.
+.
+.\" ====================================================================
+.SH DECOMPRESSION
+.\" ====================================================================
+.
+The program has a decompression facility.
+.
+If standard input or a file that was retrieved from the command line
+parameters is compressed with a format that is supported by either
+.BR \%gzip (1)
+or
+.BR \%bzip2 (1)
+it is decompressed on-the-fly.
+.
+This includes the \f(CRGNU\fP
+.BR \%.gz ,
+.BR \%.bz2 ,
+and the traditional
+.B \%.Z
+compression.
+.
+The program displays the concatenation of all decompressed input in
+the sequence that was specified on the command line.
+.
+.
+.\" ====================================================================
+.SH "ENVIRONMENT"
+.\" ====================================================================
+.
+The
+.B \%groffer
+program supports many system variables, most of them by courtesy of
+other programs.
+.
+All environment variables of
+.BR \%groff (@MAN1EXT@)
+and \f(CRGNU\fP
+.BR \%man (1)
+and some standard system variables are honored.
+.
+.
+.\" ====================================================================
+.SS "Native groffer Variables"
+.\" ====================================================================
+.
+.TP
+.I \%GROFFER_OPT
+Store options for a run of
+.BR \%groffer .
+.
+The options specified in this variable are overridden by the options
+given on the command line.
+.
+The content of this variable is run through the shell builtin
+\[lq]eval\[rq],
+so arguments containing whitespace or special shell characters should
+be quoted.
+.
+Do not forget to export this variable, otherwise it does not exist
+during the run of
+.BR groffer .
+.
+.
+.\" ====================================================================
+.SS "System Variables"
+.\" ====================================================================
+.
+The following variables have a special meaning for
+.BR \%groffer .
+.
+.
+.TP
+.I \%DISPLAY
+If set, this variable indicates that the X Window System is running.
+.
+Testing this variable decides on whether graphical or text output is
+generated.
+.
+This variable should not be changed by the user carelessly, but it can
+be used to start the graphical
+.B \%groffer
+on a remote X Window System terminal.
+.
+For example, depending on your system,
+.B \%groffer
+can be started on the second monitor by the command
+.sp
+.EX
+\fIsh#\fR DISPLAY=:0.1\~groffer\~what.ever &
+.EE
+.
+.
+.TP
+.I \%LC_ALL
+.TQ
+.I \%LC_MESSAGES
+.TQ
+.I LANG
+If one of these variables is set (in the above sequence), its content
+is interpreted as the locale, the language to be used, especially when
+retrieving
+.IR \%man\~pages .
+.
+A locale name is typically of the form
+.nh
+.IR language [\c
+.B _\c
+.IR territory [\c
+.B .\c
+.IR codeset [\c
+.B @\c
+.IR modifier ]]],
+.hy
+where
+.I \%language
+is an ISO 639 language code,
+.I \%territory
+is an ISO 3166 country code, and
+.I \%codeset
+is a character set or encoding identifier like ISO-8859-1 or UTF-8;
+see
+.BR \%setlocale (3).
+.
+The locale values \f(CRC\fP and \%\f(CRPOSIX\fP
+stand for the default, i.e.\& the
+.I \%man\~page
+directories without a language prefix.
+.
+This is the same behavior as when all 3\~variables are unset.
+.
+.
+.TP
+.I \%PAGER
+This variable can be used to set the pager for the tty output.
+.
+For example, to disable the use of a pager completely set this
+variable to the
+.BR \%cat (1)
+program
+.sp
+.EX
+\fIsh#\fR PAGER=cat\~groffer\~anything
+.EE
+.sp
+.
+.TP
+.I PATH
+All programs within the
+.B \%groffer
+script are called without a fixed path.
+.
+Thus this environment variable determines the set of programs used
+within the run of
+.BR \%groffer .
+.
+.
+.\" ====================================================================
+.SS "Groff Variables"
+.\" ====================================================================
+.
+The
+.B \%groffer
+program internally calls
+.BR \%groff ,
+so all environment variables documented in
+.BR \%groff (@MAN1EXT@)
+are internally used within
+.B \%groffer
+as well.
+.
+The following variable has a direct meaning for the
+.B \%groffer
+program.
+.
+.TP
+.I \%GROFF_TMPDIR
+If the value of this variable is an existing, writable directory,
+.B \%groffer
+uses it for storing its temporary files, just as
+.B groff
+does.
+.
+See the
+.BR \%groff (@MAN1EXT@)
+man page for more details on the location of temporary files.
+.
+.
+.\" ====================================================================
+.SS "Man Variables"
+.\" ====================================================================
+.
+Parts of the functionality of the
+.B man
+program were implemented in
+.BR \%groffer ;
+support for all environment variables documented in
+.BR \%man (1)
+was added to
+.BR \%groffer ,
+but the meaning was slightly modified due to the different approach in
+.BR \%groffer ;
+but the user interface is the same.
+.
+The
+.B man
+environment variables can be overwritten by options provided with
+.IR MANOPT ,
+which in turn is overwritten by the command line.
+.
+.
+.TP
+.I \%EXTENSION
+Restrict the search for
+.I \%man\~pages
+to files having this extension.
+.
+This is overridden by option
+.BR \-\-extension ;
+see there for details.
+.
+.
+.TP
+.I MANOPT
+This variable contains options as a preset for
+.BR \%man (1).
+As not all of these are relevant for
+.B \%groffer
+only the essential parts of its value are extracted.
+.
+The options specified in this variable overwrite the values of the
+other environment variables that are specific to
+.IR man .
+.
+All options specified in this variable are overridden by the options
+given on the command line.
+.
+.
+.TP
+.I \%MANPATH
+If set, this variable contains the directories in which the
+.I \%man\~page
+trees are stored.
+.
+This is overridden by option
+.BR \%\-\-manpath .
+.
+.
+.TP
+.I \%MANSECT
+If this is a colon separated list of section names, the search for
+.I \%man\~pages
+is restricted to those manual sections in that order.
+.
+This is overridden by option
+.BR \-\-sections .
+.
+.
+.TP
+.I \%SYSTEM
+If this is set to a comma separated list of names these are interpreted
+as
+.I \%man\~page
+trees for different operating systems.
+.
+This variable can be overwritten by option
+.BR \-\-systems ;
+see there for details.
+.
+.
+.P
+The environment variable
+.I \%MANROFFSEQ
+is ignored by
+.B \%groffer
+because the necessary preprocessors are determined automatically.
+.
+.
+.\" ====================================================================
+.SH "CONFIGURATION FILES"
+.\" ====================================================================
+.
+The
+.B \%groffer
+program can be preconfigured by two configuration files.
+.
+.
+.TP
+.B \%/etc/groff/groffer.conf
+System-wide configuration file for
+.BR \%groffer .
+.
+.
+.TP
+.B \%$HOME/.groff/groffer.conf
+User-specific configuration file for
+.BR \%groffer ,
+where
+.I \%$HOME
+denotes the user's home directory.
+.
+This file is called after the system-wide configuration file to enable
+overriding by the user.
+.
+.
+.P
+Both files are handled for the configuration, but the configuration
+file in
+.B /etc
+comes first; it is overwritten by the configuration file in the home
+directory; both configuration files are overwritten by the environment
+variable
+.IR \%GROFFER_OPT ;
+everything is overwritten by the command line arguments.
+.
+.
+.P
+The configuration files contain options that should be called as
+default for every
+.B \%groffer
+run.
+.
+These options are written in lines such that each contains either a
+long option, a short option, or a short option cluster; each with or
+without an argument.
+.
+So each line with configuration information starts with a minus
+character
+.RB \[lq] \- \[rq];
+a line with a long option starts with two minus characters
+.RB \[lq] \-\- \[rq],
+a line with a short option or short option cluster starts with a
+single minus
+.RB \[lq] \- \[rq].
+.
+.
+.P
+The option names in the configuration files may not be abbreviated,
+they must be exact.
+.
+.
+.P
+The argument for a long option can be separated from the option name
+either by an equal sign
+.RB \[lq] = \[rq]
+or by whitespace, i.e.\& one or several space or tab characters.
+.
+An argument for a short option or short option cluster can be directly
+appended to the option name or separated by whitespace.
+.
+The end of an argument is the end of the line.
+.
+It is not allowed to use a shell environment variable in an option
+name or argument.
+.
+.
+.P
+It is not necessary to use quotes in an option or argument, except for
+empty arguments.
+.
+An empty argument can be provided by appending a pair of quotes to the
+separating equal sign or whitespace; with a short option, the
+separator can be omitted as well.
+.
+For a long option with a separating equal sign
+.RB \[lq] = \[rq],
+the pair of quotes can be omitted, thus ending the line with the
+separating equal sign.
+.
+All other quote characters are cancelled internally.
+.
+.
+.P
+In the configuration files, arbitrary whitespace is allowed at the
+beginning of each line, it is just ignored.
+.
+Each whitespace within a line is replaced by a single space character
+\[lq] \[rq] internally.
+.
+.
+.P
+All lines of the configuration lines that do not start
+with a minus character are ignored, such that comments starting with
+.RB \[lq] # \[rq]
+are possible.
+.
+So there are no shell commands in the configuration files.
+.
+.
+.P
+As an example, consider the following configuration file that can be
+used either in
+.B \%/etc/groff/groffer.conf
+or
+.B \%\s+2~\s0/.groff/groffer.conf .
+.
+.
+.P
+.ft CR
+.nh
+.nf
+# groffer configuration file
+#
+# groffer options that are used in each call of groffer
+\-\-foreground=DarkBlue
+\-\-resolution=100
+\-\-viewer=gxditview \-geometry 900x1200
+.fi
+.hy
+.ft
+.
+.
+.P
+The lines starting with
+.B #
+are just ignored, so they act as command lines.
+.
+This configuration sets four
+.B \%groffer
+options (the lines starting with
+.RB \[lq] \- \[rq]).
+This has the following effects:
+.
+.
+.IP \*(BU 2m
+Use a text color of
+.B \%DarkBlue
+in all viewers that support this, such as
+.BR \%gxditview .
+.
+.
+.IP \*(BU 2m
+Use a resolution of
+.B 100dpi
+in all viewers that support this, such as
+.BR \%gxditview .
+.
+By this, the default device in
+.I x mode
+is set to
+.BR X100 .
+.
+.
+.IP \*(BU 2m
+Force
+.BR \%gxditview (@MAN1EXT@)
+as the
+.I \%x-mode
+viewer using the geometry option for setting the width to
+.B 900px
+and the height to
+.BR 1200px .
+This geometry is suitable for a resolution of
+.BR 100dpi .
+.
+.
+.IP \*(BU 2m
+Use
+.BR \%xpdf (1)
+as the
+.I \%pdf-mode
+viewer with the argument
+.B \-Z
+.BR 150 .
+.
+.
+.\" ====================================================================
+.SH "EXAMPLES"
+.\" ====================================================================
+.
+The usage of
+.B \%groffer
+is very easy.
+.
+Usually, it is just called with a file name or
+.IR \%man\~page .
+.
+The following examples, however, show that
+.B \%groffer
+has much more fancy capabilities.
+.
+.sp
+.EX
+\fIsh#\fR\~groffer\~/usr/local/share/doc/groff/meintro.ms.gz
+.EE
+.sp
+Decompress, format and display the compressed file
+.B meintro.ms.gz
+in the directory
+.BR /usr/local/share/doc/groff ,
+using the standard viewer
+.B \%gxditview
+as graphical viewer when in the X Window System, or the
+.BR \%less (1)
+pager program otherwise.
+.
+.sp
+.EX
+\fIsh#\fR\~groffer\~groff
+.EE
+.sp
+If the file
+.B \%./groff
+exists use it as input.
+.
+Otherwise interpret the argument as a search for the
+.I \%man\~page
+named
+.B \%groff
+in the smallest possible
+.IR \%man\~section ,
+being section 1 in this case.
+.
+.sp
+.EX
+\fIsh#\fR\~groffer\~man:groff
+.EE
+.sp
+search for the
+.I \%man\~page
+of
+.B \%groff
+even when the file
+.B ./groff
+exists.
+.
+.sp
+.EX
+\fIsh#\fR\~groffer\~groff.7
+\fIsh#\fR\~groffer\~7\~groff
+.EE
+.sp
+search the
+.I \%man\~page
+of
+.B \%groff
+in
+.I \%man\~section
+.BR 7 .
+This section search works only for a digit or a single character from
+a small set.
+.
+.sp
+.EX
+\fIsh#\fR\~groffer\~fb.modes
+.EE
+.sp
+If the file
+.B ./fb.modes
+does not exist interpret this as a search for the
+.I \%man\~page
+of
+.BR fb.modes .
+As the extension
+.I \%modes
+is not a single character in classical section style the argument is
+not split to a search for
+.BR fb .
+.
+.sp
+.EX
+\fIsh#\fR\~groffer\~groff\~\(cqtroff(1)\(cq\~man:roff
+.EE
+.sp
+The arguments that are not existing files are looked-up as the
+following
+.IR \%man\~pages :
+.B \%groff
+(automatic search, should be found in \fIman\fP\~section\~1),
+.B \%troff
+(in section\~1),
+and
+.B \%roff
+(in the section with the lowest number, being\~7 in this case).
+.
+The quotes around
+.nh
+.I \(cqtroff(1)\(cq
+.hy
+are necessary because the parentheses are special shell characters;
+escaping them with a backslash character
+.I \(rs(
+and
+.I \(rs)
+would be possible, too.
+.
+The formatted files are concatenated and displayed in one piece.
+.
+.sp
+.EX
+\fIsh#\fR\~LANG=de\~groffer\~\-\-man\~\-\-viewer=galeon\~ls
+.EE
+.sp
+Retrieve the German
+.I \%man\~page
+(language
+.IR de )
+for the
+.B ls
+program, decompress it, format it to
+.I \%html
+or
+.I \%xhtml
+format
+.nh
+.RI ( \%www\~mode )
+.hy
+and view the result in the web browser
+.BR \%galeon .
+The option
+.B \-\-man
+guarantees that the
+.I \%man\~page
+is retrieved, even when a local file
+.B \%ls
+exists in the actual directory.
+.
+.
+.sp
+.EX
+\fIsh#\fR\~groffer\~\-\-source\~'man:roff(7)'
+.EE
+.sp
+Get the
+.I \%man\~page
+called
+.I \%roff
+in \fIman\fP\~section 7, decompress it, and print its unformatted
+content, its source code.
+.
+.
+.sp
+.EX
+\fIsh#\fR\~groffer\~\-\-de-p\~\-\-in\~\-\-ap
+.EE
+.sp
+This is a set of abbreviated arguments, it is determined as
+.br
+.sp
+.EX
+\fIsh#\fR\~groffer\~\-\-debug-params\~\-\-intermediate-output\~\-\-apropos
+.EE
+.sp
+.
+.sp
+.EX
+\fIsh#\fR\~cat\~file.gz\~|\~groffer\~-Z\~-mfoo
+.EE
+.sp
+.
+The file
+.B file.gz
+is sent to standard input, this is decompressed, and then this is
+transported to the
+.I \%groff intermediate output mode
+without post-processing
+.RB ( groff
+option
+.BR \-Z ),
+using macro package
+.I \%foo
+.RB ( groff
+option
+.BR \-m ).
+.
+.
+.sp
+.EX
+\fIsh#\fR\~echo\~'\(rsf(CBWOW!'\~|
+> groffer \-\-x \-\-bg red \-\-fg yellow \-\-geometry 200x100 \-
+.EE
+.sp
+.
+Display the word \f(CBWOW!\fP in a small window in constant-width
+bold font, using color yellow on red background.
+.
+.
+.\" ====================================================================
+.SH "COMPATIBILITY"
+.\" ====================================================================
+.
+The
+.B \%groffer
+program is written in Perl, the Perl version during writing was v5.8.8.
+.
+.
+.P
+.B \%groffer
+provides its own parser for command-line arguments that is compatible
+to both \%\f(CRPOSIX\fP
+.BR \%getopts (1)
+and \%\f(CRGNU\fP
+.BR \%getopt (1).
+It can handle option arguments and file names containing white space
+and a large set of special characters.
+.
+The following standard types of options are supported.
+.
+.
+.IP \*(BU 2m
+The option consisting of a single minus
+.B \-
+refers to standard input.
+.
+.
+.IP \*(BU 2m
+A single minus followed by characters refers to a single character
+option or a combination thereof; for example, the
+.B \%groffer
+short option combination
+.B \-Qmfoo
+is equivalent to
+.BR \-Q\~\-m\~foo .
+.
+.
+.IP \*(BU 2m
+Long options are options with names longer than one character; they
+are always preceded by a double minus.
+.
+An option argument can either go to the next command-line argument or
+be appended with an equal sign to the argument; for example,
+.B \-\-long=arg
+is equivalent to
+.BR \-\-long\~arg .
+.
+.
+.IP \*(BU 2m
+An argument of
+.B \-\-
+ends option parsing; all further command-line arguments are
+interpreted as
+.I \%filespec
+parameters, i.e.\& file names or constructs for searching
+.IR \%man\~pages ).
+.
+.
+.IP \*(BU 2m
+All command-line arguments that are neither options nor option
+arguments are interpreted as
+.I \%filespec
+parameters and stored until option parsing has finished.
+.
+For example, the command line
+.sp
+.EX
+\fIsh#\fR\~groffer file1 \-a \-o arg file2
+.EE
+.sp
+is equivalent to
+.sp
+.EX
+\fIsh#\fR\~groffer \-a \-o arg \-\- file1 file2
+.EE
+.sp
+.
+.P
+The free mixing of options and
+.I \%filespec
+parameters follows the GNU principle.
+.
+That does not fulfill the strange option behavior of \%\f(CRPOSIX\fP
+that ends option processing as soon as the first non-option argument
+has been reached.
+.
+The end of option processing can be forced by the option
+.RB \[lq] \-\- \[rq]
+anyway.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.B groffer
+was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.P
+.BR \%groff (@MAN1EXT@),
+.BR \%@g@troff (@MAN1EXT@)
+.RS
+Details on the options and environment variables available in
+.BR \%groff ;
+all of them can be used with
+.BR \%groffer .
+.RE
+.
+.
+.TP
+.BR \%grog (@MAN1EXT@)
+This program tries to guess the necessary
+.B \%groff
+command-line options from the input and the
+.B groffer
+options.
+.
+.
+.TP
+.BR \%groff (@MAN7EXT@)
+Documentation of the
+.I \%groff
+language.
+.
+.
+.TP
+.BR groff_char (@MAN7EXT@)
+Documentation on the
+.I \%groff
+characters, special characters, and glyphs..
+.
+.
+.TP
+.BR groff_tmac (@MAN5EXT@)
+Documentation on the
+.I \%groff
+macro files.
+.
+.
+.TP
+.BR groff_out (@MAN5EXT@)
+Documentation on the
+.I \%groff intermediate output
+before the run of a
+.IR postprocessor .
+.nh
+.RI ( ditroff
+output).
+.hy
+.
+This can be run by the
+.B groff
+or
+.B groffer
+option
+.BR -Z .
+.
+.
+.TP
+.BR \%man (1)
+The standard program to display
+.IR \%man\~pages .
+.
+The information there is only useful if it is the
+.I \%man\~page
+for GNU
+.BR man .
+Then it documents the options and environment variables that are
+supported by
+.BR \%groffer .
+.
+.
+.TP
+.BR \%gxditview (@MAN1EXT@)
+.TQ
+.BR \%xditview (1x)
+.RS
+Viewers for
+.BR \%groffer 's
+.IR \%x\~mode .
+.RE
+.
+.
+.TP
+.BR \%kpdf (1)
+.TQ
+.BR \%kghostview (1)
+.TQ
+.BR \%evince (1)
+.TQ
+.BR \%ggv (1)
+.TQ
+.BR \%gv (1)
+.TQ
+.BR \%ghostview (1)
+.TQ
+.BR \%gs (1)
+Viewers for
+.BR \%groffer 's
+.IR \%ps\~mode .
+.
+.
+.TP
+.BR \%kpdf (1)
+.TQ
+.BR \%acroread (1)
+.TQ
+.BR \%evince (1)
+.TQ
+.BR \%xpdf (1)
+.TQ
+.BR \%gpdf (1)
+.TQ
+.BR \%kghostview (1)
+.TQ
+.BR \%ggv (1)
+Viewers for
+.BR \%groffer 's
+.IR \%pdf\~mode .
+.
+.
+.P
+.BR \%kdvi (1),
+.BR \%xdvi (1),
+.BR \%dvilx (1)
+.RS
+Viewers for
+.BR \%groffer 's
+.IR \%dvi\~mode .
+.RE
+.
+.
+.TP
+.BR \%konqueror (1)
+.TQ
+.BR \%epiphany (1)
+.TQ
+.BR \%firefox (1)
+.TQ
+.BR \%mozilla (1)
+.TQ
+.BR \%netscape (1)
+.TQ
+.BR \%lynx (1)
+Web-browsers for
+.BR \%groffer 's
+.IR \%html ,
+.IR \%xhtml ,
+or
+.IR \%www\~mode .
+.
+.
+.TP
+.BR \%less (1)
+.TQ
+.BR more (1)
+Standard pager program for the
+.IR \%tty\~mode .
+.
+.
+.TP
+.BR \%gzip (1)
+.TQ
+.BR \%bzip2 (1)
+.TQ
+.BR \%xz (1)
+The decompression programs supported by
+.BR \%groffer .
+.
+.
+.\" ====================================================================
+.\" Emacs settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/groffer/groffer.am b/contrib/groffer/groffer.am
new file mode 100644 (file)
index 0000000..7f0665a
--- /dev/null
@@ -0,0 +1,120 @@
+# Automake rules for 'groffer'
+
+# File position: <groff-source>/contrib/groffer/groffer.am
+
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+# Written by Werner Lemberg <wl@gnu.org> and
+# Bernd Warken <groff-bernd.warken-72@web.de>.
+# Automake migration by Bertrand Garrigues
+
+# Last update: 22 Aug 2015
+
+# This file is part of 'groffer' which is part of 'groff'.
+
+# 'groff' 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.
+
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+
+########################################################################
+
+groffer_srcdir = $(top_srcdir)/contrib/groffer
+# generated programs
+ROFF2PROGS = \
+  roff2dvi \
+  roff2html \
+  roff2pdf \
+  roff2ps \
+  roff2text \
+  roff2x
+
+# Generated man templates
+ROFF2MAN = \
+  contrib/groffer/roff2dvi.1.man \
+  contrib/groffer/roff2html.1.man \
+  contrib/groffer/roff2pdf.1.man \
+  contrib/groffer/roff2ps.1.man \
+  contrib/groffer/roff2text.1.man \
+  contrib/groffer/roff2x.1.man
+
+GROFFER_PERL = \
+  contrib/groffer/main_subs.pl \
+  contrib/groffer/man.pl \
+  contrib/groffer/split_env.sh \
+  contrib/groffer/subs.pl
+
+GROFFER_REST = \
+  contrib/groffer/roff2.1.man \
+  contrib/groffer/version.sh \
+  contrib/groffer/groffer.1.man \
+  contrib/groffer/groffer.pl \
+  contrib/groffer/roff2.pl
+
+EXTRA_DIST += $(GROFFER_PERL) $(GROFFER_REST) \
+  contrib/groffer/ChangeLog  \
+  contrib/groffer/README \
+  contrib/groffer/README_PERL
+
+# groffer_dir is set by a m4 macro
+grofferdir = $(groffer_dir)
+bin_SCRIPTS += groffer $(ROFF2PROGS)
+groffer_DATA = $(GROFFER_PERL) contrib/groffer/version.sh
+man1_MANS += \
+  contrib/groffer/groffer.1 \
+  contrib/groffer/roff2dvi.1 \
+  contrib/groffer/roff2html.1 \
+  contrib/groffer/roff2pdf.1 \
+  contrib/groffer/roff2ps.1 \
+  contrib/groffer/roff2text.1 \
+  contrib/groffer/roff2x.1
+MOSTLYCLEANFILES += $(ROFF2MAN)
+
+$(ROFF2PROGS): $(groffer_srcdir)/roff2.pl
+       cp $(groffer_srcdir)/roff2.pl $@
+
+# we take roff2.man and replace the @ROFF2MODE@ by the type of file
+# (dvi, pdf, html etc ...)
+$(ROFF2MAN):  $(groffer_srcdir)/roff2.1.man
+       $(AM_V_GEN)$(MKDIR_P) contrib/groffer \
+       && FILEMODE=`echo $@ | sed 's|contrib/groffer/roff2\([a-z][a-z]*\)\.1\.man|\1|g'` \
+       && sed -e 's/[@]ROFF2MODE[@]/'"$$FILEMODE"'/g' \
+              $(groffer_srcdir)/roff2.1.man \
+              > $@;
+
+groffer: $(GROFFER_PERL) $(GROFFER_REST) $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)sed -f "$(SH_DEPS_SED_SCRIPT)" \
+          -e "s|[@]g[@]|$(g)|g" \
+          -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+          -e "s|[@]libdir[@]|$(DESTDIR)$(libdir)|g" \
+          -e "s|[@]groffer_dir[@]|$(DESTDIR)$(groffer_dir)|g" \
+          -e "s|[@]VERSION[@]|$(VERSION)|g" \
+          -e "$(SH_SCRIPT_SED_CMD)" \
+          $(groffer_srcdir)/groffer.pl \
+          >$@ \
+       && chmod +x $@;
+
+uninstall_groffdirs: uninstall-groffer-hook
+uninstall-groffer-hook:
+       if test -d $(DESTDIR)$(grofferdir); then \
+         rmdir $(DESTDIR)$(grofferdir); \
+       fi
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/contrib/groffer/groffer.man b/contrib/groffer/groffer.man
deleted file mode 100644 (file)
index 46b1104..0000000
+++ /dev/null
@@ -1,3910 +0,0 @@
-.TH GROFFER @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groffer \- display groff files and man\~pages on X and tty
-.
-.\" The .SH was moved to this place in order to appease `apropos'.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2001-2014 Free Software Foundation, Inc.
-
-This file is part of groffer, which is part of groff, a free software
-project.
-
-You can redistribute it and/or modify it under the terms of the GNU
-General Public License version 2 as published by the Free Software
-Foundation.
-
-The license text is available in the internet at
-.UR http://www.gnu.org/licenses/gpl-2.0.html
-.UE .
-..
-.
-.de au
-This file was written by
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Characters
-.\" --------------------------------------------------------------------
-.
-.\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
-.\" called with \*(EL
-.
-.\" Bullet
-.ie t .ds BU \[bu]
-.el .ds BU *
-.\" used in `.IP \*(BU 2m' (former .Topic)
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SYNOPSIS"
-.\" --------------------------------------------------------------------
-.
-.SY groffer
-.OP \-\-
-.OP \%filespec \*(EL
-.YS
-.
-.SY groffer
-.OP mode-option \*(EL
-.OP groff-options \*(EL
-.OP man-options \*(EL
-.OP X-options \*(EL
-.OP \-\-
-.OP \%filespec \*(EL
-.YS
-.
-.SY groffer
-.BR \-h " | " \-\-help
-.YS
-.
-.SY groffer
-.BR \-v " | " \-\-version
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program is the easiest way to use
-.BR \%groff (@MAN1EXT@).
-It can display arbitrary documents written in the
-.I \%groff
-language, see
-.BR \%groff (@MAN7EXT@),
-or other
-.I \%roff
-languages, see
-.BR \%roff (@MAN7EXT@),
-that are compatible to the original
-.I \%troff
-language.
-.
-It finds and runs all necessary
-.I groff
-preprocessors, such as
-.BR @g@chem .
-.
-.
-.P
-The
-.B \%groffer
-program also includes many of the features for finding and displaying
-the \%\f[CR]Unix\f[] manual pages
-.nh
-.RI ( man\~pages ),
-.hy
-such that it can be used as a replacement for a
-.BR \%man (1)
-program.
-.
-Moreover, compressed files that can be handled by
-.BR \%gzip (1)
-or
-.BR \%bzip2 (1)
-are decompressed on-the-fly.
-.
-.
-.P
-The normal usage is quite simple by supplying a file name or name of a
-.I \%man\~page
-without further options.
-.
-But the option handling has many possibilities for creating special
-behaviors.
-.
-This can be done either in configuration files, with the shell
-environment variable
-.SM
-.BR \%$GROFFER_OPT ,
-or on the command line.
-.
-.
-.P
-The output can be generated and viewed in several different ways
-available for
-.IR \%groff .
-.
-This includes the
-.I \%groff
-native \%\f[CR]X\~Window\f[] viewer
-.BR \%gxditview (@MAN1EXT@),
-each
-.IR \%Postcript ,
-.IR \%pdf ,
-or
-.I \%dvi
-display program, a web browser by generating
-.I \%html
-in
-.IR \%www\~mode ,
-or several
-.I \%text\~modes
-in text terminals.
-.
-.
-.P
-Most of the options that must be named when running
-.B \%groff
-directly are determined automatically for
-.BR \%groffer ,
-due to the internal usage of the
-.BR \%grog (@MAN1EXT@)
-program.
-.
-But all parts can also be controlled manually by arguments.
-.
-.
-.P
-Several file names can be specified on the command line arguments.
-.
-They are transformed into a single document in the normal way of
-.BR \%groff .
-.
-.
-.P
-Option handling is done in \f[CR]GNU\f[] style.
-.
-Options and file names can be mixed freely.
-.
-The option
-.RB ` \-\- '
-closes the option handling, all following arguments are treated as
-file names.
-.
-Long options can be abbreviated in several ways.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "OPTION OVERVIEW"
-.\" --------------------------------------------------------------------
-.
-.TP
-.I breaking options
-.RS
-.P
-.SY
-.OP \-h\~\fR|\fB\~\-\-help
-.OP \-v\~\fR|\fB\~\-\-version
-.YS
-.RE
-.
-.
-.TP
-.I \%groffer mode options
-.RS
-.P
-.SY
-.OP \-\-auto
-.OP \-\-default
-.OP \-\-default\-modes mode1,mode2,\*(EL
-.OP \-\-dvi
-.OP \-\-groff
-.OP \-\-html
-.OP \-\-latin1
-.OP \-\-mode display_mode
-.OP \-\-pdf
-.OP \-\-pdf2
-.OP \-\-ps
-.OP \-\-source
-.OP \-\-text
-.OP \-\-to\-stdout
-.OP \-\-tty
-.OP \-\-utf8
-.OP \-\-viewer prog
-.OP \-\-www
-.OP \-\-x\~\fR|\fB\~\-\-X
-.YS
-.RE
-.
-.
-.ig
-Replace these options by --viewer
-.OP \-\-dvi\-viewer prog
-.OP \-\-html\-viewer prog
-.OP \-\-pdf\-viewer prog
-.OP \-\-ps\-viewer prog
-.OP \-\-tty\-viewer prog
-.OP \-\-www\-viewer prog
-.OP \-\-x\-viewer\~\fR|\fB\~\-\-X\-viewer prog
-..
-.
-.
-.TP
-.I options related to \%groff
-.RS
-.P
-.SY
-.OP \-T\~\fR|\fB\~\-\-device device
-.OP \-Z\~\fR|\fB\~\-\-intermediate\-output\~\fR|\fB\~\-\-ditroff
-.YS
-.P
-All further
-.B \%groff
-short options are accepted.
-.RE
-.
-.
-.TP
-.I options for man\~pages
-.RS
-.P
-.SY
-.OP \-\-apropos
-.OP \-\-apropos\-data
-.OP \-\-apropos\-devel
-.OP \-\-apropos\-progs
-.OP \-\-man
-.OP \-\-no\-man
-.OP \-\-no\-special
-.OP \-\-whatis
-.YS
-.RE
-.
-.
-.TP
-.I long options taken over from GNU man
-.RS
-.P
-.SY
-.OP \-\-all
-.OP \-\-ascii
-.OP \-\-ditroff
-.OP \-\-extension suffix
-.OP \-\-locale language
-.OP \-\-local\-file
-.OP \-\-location\~\fR|\fB\~\-\-where
-.OP \-\-manpath dir1:dir2:\*(EL
-.OP \-\-no\-location
-.OP \-\-pager program
-.OP \-\-sections sec1:sec2:\*(EL
-.OP \-\-systems sys1,sys2,\*(EL
-.OP \-\-troff\-device device
-.YS
-.P
-Further long options of \f[CR]GNU\f[]
-.B man
-are accepted as well.
-.RE
-.
-.
-.TP
-.I X Window Toolkit options
-.RS
-.P
-.SY
-.OP \-\-bd\~\fR|\fB\~\-\-bordercolor pixels
-.OP \-\-bg\~\fR|\fB\~\-\-background color
-.OP \-\-bw\~\fR|\fB\~\-\-borderwidth pixels
-.OP \-\-display X-display
-.OP \-\-fg\~\fR|\fB\~\-\-foreground color
-.OP \-\-fn\~\fR|\fB\~\-\-ft\~\fR|\fB\~\-\-font font_name
-.OP \-\-geometry size_pos
-.OP \-\-resolution value
-.OP \-\-rv
-.OP \-\-title string
-.OP \-\-xrm X\-resource
-.YS
-.RE
-.
-.
-.TP
-.I options for development
-.RS
-.P
-.SY
-.OP \-\-debug
-.OP \-\-debug\-filenames
-.OP \-\-debug\-grog
-.OP \-\-debug\-keep
-.OP \-\-debug\-params
-.OP \-\-debug\-tmpdir
-.OP \-\-do\-nothing
-.OP \-\-print text
-.OP \-V
-.YS
-.RE
-.
-.
-.TP
-.I \%filespec arguments
-.RS
-.P
-The
-.I \%filespec
-parameters are all arguments that are neither an option nor an option
-argument.
-.
-They usually mean a file name or a
-.I man page
-searching scheme.
-.
-.
-.P
-In the following, the term
-.I section_extension
-is used.
-.
-It means a word that consists of a
-.I man section
-that is optionally followed by an
-.IR extension .
-.
-The name of a
-.I man section
-is a single character from
-.BR \%[1\[en]9on] ,
-the
-.I extension
-is some word.
-.
-The
-.I extension
-is mostly lacking.
-.
-.
-.P
-No
-.I \%filespec
-parameters means standard input.
-.
-.
-.TP 10m
-.B \-
-stands for standard input (can occur several times).
-.
-.
-.TP
-.I filename
-the path name of an existing file.
-.
-.
-.TP
-.BI man: name ( section_extension )
-.TQ
-.BI man: name . section_extension
-.TQ
-.IB name ( section_extension )
-.TQ
-.IB name . section_extension
-.TQ
-.I "section_extension name"
-search the \%man\~page
-.I \%name
-in the section with optional extension
-.IR section_extension .
-.
-.
-.TP
-.BI man: name
-\%man\~page in the lowest
-.I \%man\~section
-that has
-.IR \%name .
-.
-.
-.TP
-.I name
-if
-.I \%name
-is not an existing file search for the man\~page
-.I \%name
-in the lowest man\~section.
-.
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "OPTION DETAILS"
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program can usually be run with very few options.
-.
-But for special purposes, it supports many options.
-.
-These can be classified in 5 option classes.
-.
-.
-.P
-All short options of
-.B \%groffer
-are compatible with the short options of
-.BR \%groff (@MAN1EXT@).
-.
-All long options of
-.B \%groffer
-are compatible with the long options of
-.BR \%man (1).
-.
-.
-.P
-Arguments for long option names can be abbreviated in several ways.
-.
-First, the argument is checked whether it can be prolonged as is.
-.
-Furthermore, each minus sign
-.B \-
-is considered as a starting point for a new abbreviation.
-.
-This leads to a set of multiple abbreviations for a single argument.
-.
-For example,
-.B \-\-de\-n\-f
-can be used as an abbreviation for
-.BR \-\-debug\-not\-func ,
-but
-.B \-\-de\-n
-works as well.
-.
-If the abbreviation of the argument leads to several resulting options
-an error is raised.
-.
-.
-.P
-These abbreviations are only allowed in the environment variable
-.SM
-.BR \%$GROFFER_OPT ,
-but not in the configuration files.
-.
-In configuration, all long options must be exact.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "groffer breaking Options"
-.\" --------------------------------------------------------------------
-.
-As soon as one of these options is found on the command line it is
-executed, printed to standard output, and the running
-.B \%groffer
-is terminated thereafter.
-.
-All other arguments are ignored.
-.
-.
-.TP
-.B \-h\~\fR|\fB\~\-\-help
-Print help information with a short explanation of options to
-standard output.
-.
-.
-.TP
-.B \-v\~\fR|\fB\~\-\-version
-Print version information to standard output.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "groffer Mode Options"
-.\" --------------------------------------------------------------------
-.
-The display mode and the viewer programs are determined by these
-options.
-.
-If none of these mode and viewer options is specified
-.B \%groffer
-tries to find a suitable display mode automatically.
-.
-The default modes are
-.IR "mode pdf" ,
-.IR "mode ps" ,
-.IR "mode html" ,
-.IR "mode x" ,
-and
-.I "mode dvi"
-in \%\f[CR]X\~Window\f[] with different viewers and
-.I mode tty
-with device
-.I utf8
-under
-.B less
-on a terminal; other modes are tested if the programs for the main
-default mode do not exist.
-.
-.
-.P
-In \%\f[CR]X\~Window\f[], many programs create their own window when
-called.
-.
-.B \%groffer
-can run these viewers as an independent program in the background.
-.
-As this does not work in text mode on a terminal (tty) there must be a
-way to know which viewers are \%\f[CR]X\~Window\f[] graphical
-programs.
-.
-The
-.B \%groffer
-script has a small set of information on some viewer names.
-.
-If a viewer argument of the command\-line chooses an element that is
-kept as \%\f[CR]X\~Window\f[] program in this list it is treated as a
-viewer that can run in the background.
-.
-All other, unknown viewer calls are not run in the background.
-.
-.
-.P
-For each mode, you are free to choose whatever viewer you want.
-.
-That need not be some graphical viewer suitable for this mode.
-.
-There is a chance to view the output source; for example, the
-combination of the options
-.B \-\-mode=ps
-and
-.B \-\-viewer=less
-shows the content of the
-.I Postscript
-output, the source code, with the pager
-.BR less .
-.
-.
-.TP
-.B \-\-auto
-Equivalent to
-.BR \-\-mode=auto .
-.
-.
-.TP
-.B \-\-default
-Reset all configuration from previously processed command line options
-to the default values.
-.
-This is useful to wipe out all former options of the configuration, in
-.SM
-.BR \%$GROFFER_OPT ,
-and restart option processing using only the rest of the command line.
-.
-.
-.TP
-.BI \-\-default\-modes \ mode1,mode2,\*(EL
-Set the sequence of modes for
-.I \%auto\~mode
-to the comma separated list given in the argument.
-.
-See
-.B \-\-mode
-for details on modes.  Display in the default manner; actually, this
-means to try the modes
-.IR x ,
-.IR ps ,
-and
-.I \%tty
-in this sequence.
-.
-.
-.
-.TP
-.B \-\-dvi
-Equivalent to
-.BR \-\-mode=\%dvi .
-.TQ
-.BI \-\-viewer \ prog
-Choose a viewer program for
-.IR \%dvi\~mode .
-.
-This can be a file name or a program to be searched in
-.SM
-.BR $PATH .
-.
-Known \%\f[CR]X\~Window\f[]
-.I \%dvi
-viewers include
-.BR \%xdvi (1)
-and
-.BR \%dvilx (1).
-.
-In each case, arguments can be provided additionally.
-.
-.
-.TP
-.B \-\-groff
-Equivalent to
-.BR \-\-mode=groff .
-.
-.
-.TP
-.B \-\-html
-Equivalent to
-.BR \-\-mode=html .
-.TQ
-.B \-\-viewer
-Choose a web browser program for viewing in
-.IR \%html\~mode .
-.
-It can be the path name of an executable file or a program in
-.BR $PATH .
-.
-In each case, arguments can be provided additionally.
-.
-.
-.TP
-.BI \-\-mode \ value
-.
-Set the display mode.
-.
-The following mode values are recognized:
-.
-.RS
-.
-.TP
-.B auto
-Select the automatic determination of the display mode.
-.
-The sequence of modes that are tried can be set with the
-.B \-\-default\-modes
-option.
-.
-Useful for restoring the
-.I \%default\~mode
-when a different mode was specified before.
-.
-.
-.TP
-.B dvi
-Display formatted input in a
-.I \%dvi
-viewer program.
-.
-By default, the formatted input is displayed with the
-.BR \%xdvi (1)
-program.
-.
-.
-.TP
-.B groff
-After the file determination, switch
-.B \%groffer
-to process the input like
-.BR \%groff (@MAN1EXT@)
-would do.
-.
-This disables the
-.I \%groffer
-viewing features.
-.
-.
-.TP
-.B html
-Translate the input into html format and display the result in a web
-browser program.
-.
-By default, the existence of a sequence of standard web browsers is
-tested, starting with
-.BR \%konqueror (1)
-and
-.BR \%mozilla (1).
-The text html viewer is
-.BR \%lynx (1).
-.
-.
-.TP
-.B pdf
-Transform
-.I roff input files
-into a
-.I PDF file
-by using the
-.B groff (@MAN1EXT@)
-device
-.BR -Tpdf .
-.
-This is the default
-.B PDF
-generator.
-.
-The generated
-.I PDF file
-is displayed with suitable viewer programs, such as
-.BR okular (1).
-.
-.
-.TP
-.B pdf2
-This is the traditional
-.IR "pdf mode" .
-.
-Sometimes this mode produces more correct output than the default
-.BR "PDF mode" .
-.
-By default, the input is formatted by
-.B \%groff
-using the Postscript device, then it is transformed into the PDF file
-format using
-.BR \%gs (1),
-or
-.BR ps2pdf (1).
-.
-If that's not possible, the
-.I Postscript mode (ps)
-is used instead.
-.
-Finally it is displayed using different viewer programs.
-.
-.
-.TP
-.B ps
-Display formatted input in a Postscript viewer program.
-.
-By default, the formatted input is displayed in one of many viewer
-programs.
-.
-.
-.TP
-.B text
-Format in a
-.I \%groff\~text\~mode
-and write the result to standard output without a pager or viewer
-program.
-.
-The text device,
-.I \%latin1
-by default, can be chosen with option
-.BR \-T .
-.
-.
-.TP
-.B tty
-Format in a
-.I \%groff\~text\~mode
-and write the result to standard output using a text pager program,
-even when in \%\f[CR]X\~Window\f[].
-.
-.
-.TP
-.B www
-Equivalent to
-.BR \-\-mode=html .
-.
-.
-.TP
-.B x
-Display the formatted input in a native
-.I roff
-viewer.
-.
-By default, the formatted input is displayed with the
-.BR \%gxditview (@MAN1EXT@)
-program being distributed together with
-.BR \%groff .
-But the standard \%\f[CR]X\~Window\f[] tool
-.BR \%xditview (1)
-can also be chosen with the option
-.BR \-\-viewer .
-The default resolution is
-.BR 75dpi ,
-but
-.B 100dpi
-are also possible.
-.
-The default
-.I groff
-device
-for the resolution of
-.B 75dpi
-is
-.BR X75\-12 ,
-for
-.B 100dpi
-it is
-.BR X100 .
-.
-The corresponding
-.I "groff intermediate output"
-for the actual device is generated and the result is displayed.
-.
-For a resolution of
-.BR 100dpi ,
-the default width of the geometry of the display program is chosen to
-.BR 850dpi .
-.
-.
-.TP
-.B X
-Equivalent to
-.BR \-\-mode=x .
-.
-.
-.P
-The following modes do not use the
-.I \%groffer
-viewing features.
-.
-They are only interesting for advanced applications.
-.
-.
-.TP
-.B groff
-Generate device output with plain
-.I \%groff
-without using the special viewing features of
-.IR \%groffer .
-If no device was specified by option
-.B \-T
-the
-.I \%groff
-default
-.B \%ps
-is assumed.
-.
-.
-.TP
-.B source
-Output the roff source code of the input files without further
-processing.
-.
-.
-.RE
-.
-.
-.TP
-.B \-\-pdf
-Equivalent to
-.BR \-\-mode=pdf .
-.TQ
-.B \-\-pdf2
-Equivalent to
-.BR \-\-mode=pdf2 .
-.TQ
-.BI \-\-viewer \ prog
-Choose a viewer program for
-.IR \%pdf\~mode .
-.
-This can be a file name or a program to be searched in
-.SM
-.BR $PATH ;
-arguments can be provided additionally.
-.
-.
-.TP
-.B \-\-ps
-Equivalent to
-.BR \-\-mode=ps .
-.TQ
-.BI \-\-viewer \ prog
-Choose a viewer program for
-.IR \%ps\~mode .
-.
-This can be a file name or a program to be searched in
-.SM
-.BR $PATH .
-.
-Common Postscript viewers include
-.BR \%okular (1),
-.BR \%evince (1),
-.BR \%gv (1),
-.BR \%ghostview (1),
-and
-.BR \%gs (1),
-.
-In each case, arguments can be provided additionally.
-.
-.
-.TP
-.B \-\-source
-Equivalent to
-.BR \-\-mode=source .
-.
-.
-.TP
-.B \-\-text
-Equivalent to
-.BR \-\-mode=text .
-.
-.
-.TP
-.B \-\-to\-stdout
-The file for the chosen mode is generated and its content is printed
-to standard output.
-.
-It will not be displayed in graphical mode.
-.
-.
-.TP
-.B \-\-tty
-Equivalent to
-.BR \-\-mode=tty .
-.TQ
-.BI \-\-viewer \ prog
-Choose a text pager for mode
-.IR tty .
-The standard pager is
-.BR less (1).
-This option is equivalent to
-.I man
-option
-.BR \-\-pager=\,\fIprog\fP .
-The option argument can be a file name or a program to be searched in
-.SM
-.BR $PATH ;
-arguments can be provided additionally.
-.
-.
-.TP
-.B \-\-www
-Equivalent to
-.BR \-\-mode=html .
-.TQ
-.B \-\-viewer
-.IR prog .
-.
-.
-.TP
-.B \-\-X\~\fR|\fB\~\-\-x
-Equivalent to
-.BR \-\-mode=x .
-.TQ
-.BI \-\-viewer " prog"
-Choose a viewer program for
-.IR \%x\~mode .
-Suitable viewer programs are
-.BR \%gxditview (@MAN1EXT@)
-which is the default and
-.BR \%xditview (1).
-The argument can be any executable file or a program in
-.SM
-.BR $PATH ;
-arguments can be provided additionally.
-.
-.
-.TP
-.B \-\-
-Signals the end of option processing; all remaining arguments are
-interpreted as
-.I \%filespec
-parameters.
-.
-.
-.P
-Besides these,
-.B \%groffer
-accepts all short options that are valid for the
-.BR \%groff (@MAN1EXT@)
-program.
-.
-All
-.RB \%non- groffer
-options are sent unmodified via
-.B \%grog
-to
-.BR \%groff .
-.
-So postprocessors, macro packages, compatibility with
-.I classical
-.IR \%troff ,
-and much more can be manually specified.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Options related to groff"
-.\" --------------------------------------------------------------------
-.
-All short options of
-.B \%groffer
-are compatible with the short options of
-.BR \%groff (@MAN1EXT@).
-.
-The following of
-.B \%groff
-options have either an additional special meaning within
-.B \%groffer
-or make sense for normal usage.
-.
-.
-.P
-Because of the special outputting behavior of the
-.B \%groff
-option
-.B \-Z
-.B \%groffer
-was designed to be switched into
-.IR \%groff\~mode ;
-the
-.I \%groffer
-viewing features are disabled there.
-.
-The other
-.B \%groff
-options do not switch the mode, but allow to customize the formatting
-process.
-.
-.
-.TP
-.B \-\-a
-This generates an ascii approximation of output in the
-.IR \%text\~modes .
-.
-That could be important when the text pager has problems with control
-sequences in
-.IR "tty mode" .
-.
-.
-.TP
-.BI \-\-m \ file
-Add
-.I \%file
-as a
-.I \%groff
-macro file.
-.
-This is useful in case it cannot be recognized automatically.
-.
-.
-.TP
-.BI \-\-P \ opt_or_arg
-Send the argument
-.I \%opt_or_arg
-as an option or option argument to the actual
-.B \%groff
-postprocessor.
-.
-.
-.TP
-.B \-\-T \fIdevname\fR\~\fR|\fB\~\-\-device \fIdevname\fR
-.
-This option determines
-.BR \%groff 's
-output device.
-.
-The most important devices are the text output devices for referring
-to the different character sets, such as
-.BR \%ascii ,
-.BR \%utf8 ,
-.BR \%latin1 ,
-.BR \%utf8 ,
-and others.
-.
-Each of these arguments switches
-.B \%groffer
-into a
-.I \%text\~mode
-using this device, to
-.I \%mode\~tty
-if the actual mode is not a
-.IR \%text\~mode .
-.
-The following
-.I \%devname
-arguments are mapped to the corresponding
-.B \%groffer
-.B \-\-mode=\,\fIdevname\fR
-option:
-.BR \%dvi ,
-.BR \%html ,
-and
-.BR \%ps .
-All
-.B \%X*
-arguments are mapped to
-.IR \%mode\~x .
-Each other
-.I \%devname
-argument switches to
-.I \%mode\~groff
-using this device.
-.
-.
-.TP
-.B \-\-X
-is equivalent to
-.BR "groff \-X" .
-It displays the
-.I groff intermediate output
-with
-.BR gxditview .
-As the quality is relatively bad this option is deprecated; use
-.B \-\-X
-instead because the
-.I \%x\~mode
-uses an
-.IR X *
-device for a better display.
-.
-.
-.TP
-.B \-Z\~\fR|\fB\~\-\-intermediate-output\~\fR|\fB\~\-\-ditroff
-Switch into
-.I \%groff\~mode
-and format the input with the
-.I \%groff intermediate output
-without postprocessing; see
-.BR \%groff_out (@MAN5EXT@).
-This is equivalent to option
-.B \-\-ditroff
-of
-.IR \%man ,
-which can be used as well.
-.
-.
-.P
-All other
-.B \%groff
-options are supported by
-.BR \%groffer ,
-but they are just transparently transferred to
-.B \%groff
-without any intervention.
-.
-The options that are not explicitly handled by
-.B \%groffer
-are transparently passed to
-.BR \%groff .
-.
-Therefore these transparent options are not documented here, but in
-.BR \%groff (@MAN1EXT@).
-Due to the automatism in
-.BR \%groffer ,
-none of these
-.B \%groff
-options should be needed, except for advanced usage.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Options for man\~pages"
-.\" --------------------------------------------------------------------
-.
-.TP
-.B \-\-apropos
-Start the
-.BR \%apropos (1)
-command or facility of
-.BR \%man (1)
-for searching the
-.I \%filespec
-arguments within all
-.I \%man\~page
-descriptions.
-.
-Each
-.I \%filespec
-argument is taken for search as it is;
-.I section
-specific parts are not handled, such that
-.B 7 groff
-searches for the two arguments
-.B 7
-and
-.BR groff ,
-with a large result; for the
-.I \%filespec
-.B groff.7
-nothing will be found.
-.
-The
-.I language
-locale is handled only when the called programs do support this; the
-GNU
-.B apropos
-and
-.B man \-k
-do not.
-.
-The display differs from the
-.B \%apropos
-program by the following concepts:
-.RS
-.IP \*(BU 2m
-Construct a
-.I \%groff
-frame similar to a
-.I \%man\~page
-to the output of
-.BR \%apropos ,
-.IP \*(BU 2m
-each
-.I \%filespec
-argument is searched on its own.
-.IP \*(BU 2m
-The restriction by
-.B \-\-sections
-is handled as well,
-.IP \*(BU 2m
-wildcard characters are allowed and handled without a further option.
-.RE
-.
-.
-.TP
-.B \-\-apropos\-data
-Show only the
-.B \%apropos
-descriptions for data documents, these are the
-.BR \%man (7)
-.IR sections\~4 ", " 5 ", and " 7 .
-.
-Direct
-.I section
-declarations are ignored, wildcards are accepted.
-.
-.
-.TP
-.B \-\-apropos\-devel
-Show only the
-.B \%apropos
-descriptions for development documents, these are the
-.BR man (7)
-.IR sections\~2 ", " 3 ", and " 9 .
-.
-Direct
-.I section
-declarations are ignored, wildcards are accepted.
-.
-.
-.TP
-.B \-\-apropos\-progs
-Show only the
-.B \%apropos
-descriptions for documents on programs, these are the
-.BR \%man (7)
-.IR sections\~1 ", " 6 ", and " 8 .
-.
-Direct
-.I section
-declarations are ignored, wildcards are accepted.
-.
-.
-.TP
-.B \-\-whatis
-For each
-.I \%filespec
-argument search all
-.I \%man\~pages
-and display their description \[em] or say that it is not a
-.IR \%man\~page .
-This is written from anew, so it differs from
-.IR man 's
-.B whatis
-output by the following concepts
-.RS
-.IP \*(BU 2m
-each retrieved file name is added,
-.IP \*(BU 2m
-local files are handled as well,
-.IP \*(BU 2m
-the \fIlanguage\fP and \fIsystem\fP locale is supported,
-.IP \*(BU 2m
-the display is framed by a
-.I groff
-output format similar to a
-.IR \%man\~page ,
-.IP \*(BU 2m
-wildcard characters are allowed without a further option.
-.RE
-.
-.
-.P
-The following options were added to
-.B \%groffer
-for choosing whether the file name arguments are interpreted as names
-for local files or as a search pattern for
-.IR \%man\~pages .
-.
-The default is looking up for local files.
-.
-.
-.TP
-.B \-\-man
-Check the non-option command line arguments
-.nh
-.RI ( filespecs )
-.hy
-first on being
-.IR \%man\~pages ,
-then whether they represent an existing file.
-.
-By default, a
-.I \%filespec
-is first tested whether it is an existing file.
-.
-.
-.TP
-.B \-\-no-man\~\fR|\fB\~\-\-local-file
-Do not check for
-.IR \%man\~pages .
-.
-.B \-\-local-file
-is the corresponding
-.B man
-option.
-.
-.
-.TP
-.B \-\-no-special
-Disable former calls of
-.BR \-\-all ,
-.BR \-\-apropos* ,
-and
-.BR \-\-whatis .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Long options taken over from GNU man"
-.\" --------------------------------------------------------------------
-.
-The long options of
-.B \%groffer
-were synchronized with the long options of \f[CR]GNU\f[]
-.BR man .
-.
-All long options of \f[CR]GNU\f[]
-.B man
-are recognized, but not all of these options are important to
-.BR \%groffer ,
-so most of them are just ignored.
-.
-These ignored
-.B man
-options are
-.BR \-\-catman ,
-.BR \-\-troff ,
-and
-.BR \-\-update .
-.
-.
-.P
-In the following, the
-.B man
-options that have a special meaning for
-.B \%groffer
-are documented.
-.
-.
-.P
-If your system has \f[CR]GNU\f[]
-.B man
-installed the full set of long and short options of the \f[CR]GNU\f[]
-.B man
-program can be passed via the environment variable
-.SM
-.BR \%$MANOPT ;
-see
-.BR \%man (1).
-.
-.
-.TP
-.B \-\-all
-In searching
-.IR \%man\~pages ,
-retrieve all suitable documents instead of only one.
-.
-.
-.TP
-.B \-7\~\fR|\fB\~\-\-ascii
-In
-.IR \%text\~modes ,
-display ASCII translation of special characters for critical environment.
-.
-This is equivalent to
-.BR "groff \%\-mtty_char" ;
-see
-.BR groff_tmac (@MAN5EXT@).
-.
-.
-.TP
-.B \-\-ditroff
-Produce
-.IR "groff intermediate output" .
-This is equivalent to
-.B \%groffer
-.BR \-Z .
-.
-.
-.TP
-.BI \-\-extension \ suffix
-Restrict
-.I \%man\~page
-search to file names that have
-.I \%suffix
-appended to their section element.
-.
-For example, in the file name
-.I \%/usr/share/man/man3/terminfo.3ncurses.gz
-the
-.I \%man\~page
-extension is
-.IR \%ncurses .
-.
-.
-.TP
-.BI \-\-locale \ language
-.
-Set the language for
-.IR \%man\~pages .
-.
-This has the same effect, but overwrites
-.SM
-.BR $LANG .
-.
-.
-.TP
-.B \-\-location
-Print the location of the retrieved files to standard error.
-.
-.
-.TP
-.B \-\-no-location
-Do not display the location of retrieved files; this resets a former
-call to
-.BR \-\-location .
-.
-This was added by
-.BR \%groffer .
-.
-.
-.TP
-.BI \-\-manpath \ 'dir1:dir2:\*(EL'
-Use the specified search path for retrieving
-.I \%man\~pages
-instead of the program defaults.
-.
-If the argument is set to the empty string "" the search for
-.I \%man\~page
-is disabled.
-.
-.
-.TP
-.B \-\-pager
-Set the pager program in
-.IR \%tty\~mode ;
-default is
-.BR \%less .
-.
-This can be set with
-.BR \-\-viewer .
-.
-.
-.TP
-.BI \-\-sections \ sec1:sec2:\*(EL
-Restrict searching for
-.I \%man\~pages
-to the given
-.IR sections ,
-a colon-separated list.
-.
-.
-.TP
-.BI \-\-systems \ sys1,sys2,\*(EL
-Search for
-.I \%man\~pages
-for the given operating systems; the argument
-.I \%systems
-is a comma-separated list.
-.
-.
-.TP
-.B \-\-where
-Equivalent to
-.BR \-\-location .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "X\~\%Window\~\%Toolkit Options"
-.\" --------------------------------------------------------------------
-.
-The following long options were adapted from the corresponding
-\%\f[CR]X\~Window\~Toolkit\f[] options.
-.
-.B \%groffer
-will pass them to the actual viewer program if it is an
-\%\f[CR]X\~Window\f[] program.
-.
-Otherwise these options are ignored.
-.
-.
-.P
-Unfortunately these options use the old style of a single minus for
-long options.
-.
-For
-.B \%groffer
-that was changed to the standard with using a double minus for long
-options, for example,
-.B \%groffer
-uses the option
-.B \-\-font
-for the \%\f[CR]X\~Window\f[] option
-.BR \-font .
-.
-.
-.P
-See
-.BR X (7)
-and the documentation on the \%\f[CR]X\~Window\~Toolkit\f[] options
-for more details on these options and their arguments.
-.
-.
-.TP
-.BI \-\-background \ color
-Set the background color of the viewer window.
-.
-.
-.TP
-.BI \-\-bd \ pixels
-This is equivalent to
-.BR \-\-bordercolor .
-.
-.
-.TP
-.BI \-\-bg \ color
-This is equivalent to
-.BR \-\-background .
-.
-.
-.TP
-.BI \-\-bw \ pixels
-This is equivalent to
-.BR \-\-borderwidth .
-.
-.
-.TP
-.BI \-\-bordercolor \ pixels
-Specifies the color of the border surrounding the viewer window.
-.
-.
-.TP
-.BI \-\-borderwidth \ pixels
-Specifies the width in pixels of the border surrounding the viewer
-window.
-.
-.
-.TP
-.BI \-\-display \ X-display
-Set the \%\f[CR]X\~Window\f[] display on which the viewer program
-shall be started, see the \%\f[CR]X\~Window\f[] documentation for the
-syntax of the argument.
-.
-.
-.TP
-.BI \-\-foreground \ color
-Set the foreground color of the viewer window.
-.
-.
-.TP
-.BI \-\-fg \ color
-This is equivalent to
-.BR \-\-foreground .
-.
-.
-.TP
-.BI \-\-fn \ font_name
-This is equivalent to
-.BR \-\-font .
-.
-.
-.TP
-.BI \-\-font \ font_name
-Set the font used by the viewer window.
-.
-The argument is an \%\f[CR]X\~Window\f[] font name.
-.
-.
-.TP
-.BI \-\-ft \ font_name
-This is equivalent to
-.BR \-\-font .
-.
-.
-.TP
-.BI \-\-geometry \ size_pos
-Set the geometry of the display window, that means its size and its
-starting position.
-.
-See
-.BR \%X (7)
-for the syntax of the argument.
-.
-.
-.TP
-.BI \-\-resolution \ value
-Set \%\f[CR]X\~Window\f[] resolution in dpi (dots per inch) in some
-viewer programs.
-.
-The only supported dpi values are
-.B 75
-and
-.BR 100 .
-.
-Actually, the default resolution for
-.B \%groffer
-is set to
-.BR 75dpi .
-The resolution also sets the default device in
-.IR "mode x" .
-.
-.
-.TP
-.B \-\-rv
-Reverse foreground and background color of the viewer window.
-.
-.
-.TP
-.BI \-\-title "\ 'some text'"
-Set the title for the viewer window.
-.
-.
-.TP
-.BI \-\-xrm \ 'resource'
-Set \f[CR]\%X\~Window\f[] resource.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Options for Development"
-.\" --------------------------------------------------------------------
-.
-.TP
-.B \-\-debug
-Enable all debugging options
-.BR \-\-debug\-\,\fItype\fP .
-.
-The temporary files are kept and not deleted, the
-.B grog
-output is printed, the name of the temporary directory is printed, the
-displayed file names are printed, and the parameters are printed.
-.
-.
-.TP
-.B \-\-debug\-filenames
-Print the names of the files and
-.I \%man\~pages
-that are displayed by
-.BR \&groffer .
-.
-.
-.TP
-.B \-\-debug\-grog
-Print the output of all
-.B grog
-commands.
-.
-.
-.TP
-.B \-\-debug\-keep
-Enable two debugging informations.
-.
-Print the name of the temporary directory and keep the temporary
-files, do not delete them during the run of
-.BR \%groffer .
-.
-.
-.TP
-.B \-\-debug\-params
-Print the parameters, as obtained from the configuration files, from
-.SM
-.BR \%GROFFER_OPT ,
-and the command line arguments.
-.
-.
-.TP
-.B \-\-debug\-tmpdir
-Print the name of the temporary directory.
-.
-.
-.TP
-.B \-\-do-nothing
-This is like
-.BR \-\-version ,
-but without the output; no viewer is started.
-.
-This makes only sense in development.
-.
-.
-.TP
-.B \-\-print=\,\fItext\fR
-Just print the argument to standard error.
-.
-This is good for parameter check.
-.
-.
-.TP
-.B \-V
-This is an advanced option for debugging only.
-.
-Instead of displaying the formatted input, a lot of
-.I \%groffer
-specific information is printed to standard output:
-.
-.RS
-.IP \*(BU 2m
-the output file name in the temporary directory,
-.
-.IP \*(BU 2m
-the display mode of the actual
-.B \%groffer
-run,
-.
-.IP \*(BU 2m
-the display program for viewing the output with its arguments,
-.
-.IP \*(BU 2m
-the active parameters from the config files, the arguments in
-.SM
-.BR \%$GROFFER_OPT ,
-and the arguments of the command line,
-.
-.IP \*(BU 2m
-the pipeline that would be run by the
-.B \%groff
-program, but without executing it.
-.RE
-.
-.
-.P
-Other useful debugging options are the
-.B \%groff
-option
-.B \-Z
-and
-.BR \-\-mode=groff .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Filespec Arguments"
-.\" --------------------------------------------------------------------
-.
-A
-.I \%filespec
-parameter is an argument that is not an option or option argument.
-.
-In
-.BR \%groffer ,
-.I \%filespec
-parameters are a file name or a template for searching
-.IR \%man\~pages .
-.
-These input sources are collected and composed into a single output
-file such as
-.B \%groff
-does.
-.
-.
-.P
-The strange \%\f[CR]POSIX\f[] behavior to regard all arguments behind
-the first non-option argument as
-.I \%filespec
-arguments is ignored.
-.
-The \f[CR]GNU\f[] behavior to recognize options even when mixed with
-.I \%filespec
-arguments is used throughout.
-.
-But, as usual, the double minus argument
-.B \-\-
-ends the option handling and interprets all following arguments as
-.I \%filespec
-arguments; so the \%\f[CR]POSIX\f[] behavior can be easily adopted.
-.
-.
-.P
-The options
-.B \-\-apropos*
-have a special handling of
-.I filespec
-arguments.
-.
-Each argument is taken as a search scheme of its own.
-.
-Also a regexp (regular expression) can be used in the filespec.
-.
-For example,
-.B groffer \-\-apropos '^gro.f$'
-searches
-.B groff
-in the
-.I man\~page
-name, while
-.B groffer \-\-apropos groff
-searches
-.B groff
-somewhere in the name or description of the
-.IR man\~pages .
-.
-.
-.P
-All other parts of
-.IR groffer ,
-such as the normal display or the output with
-.B \-\-whatis
-have a different scheme for
-.IR filespecs .
-No regular expressions are used for the arguments.
-.
-The
-.I filespec
-arguments are handled by the following scheme.
-.
-.
-.P
-It is necessary to know that on each system the
-.I \%man\~pages
-are sorted according to their content into several sections.
-.
-The
-.I classical man sections
-have a single-character name, either a digit from
-.B 1
-to
-.B 9
-or one of the characters
-.B n
-or
-.BR o .
-.
-.
-.P
-This can optionally be followed by a string, the so-called
-.IR extension .
-The
-.I extension
-allows to store several
-.I man\~pages
-with the same name in the same
-.IR section .
-But the
-.I extension
-is only rarely used, usually it is omitted.
-.
-Then the
-.I extensions
-are searched automatically by alphabet.
-.
-.
-.P
-In the following, we use the name
-.I section_extension
-for a word that consists of a single character
-.I section
-name or a
-.I section
-character that is followed by an
-.IR extension .
-.
-Each
-.I \%filespec
-parameter can have one of the following forms in decreasing sequence.
-.
-.
-.IP \*(BU 2m
-No
-.I \%filespec
-parameters means that
-.B \%groffer
-waits for standard input.
-.
-The minus option
-.B \-
-always stands for standard input; it can occur several times.
-.
-If you want to look up a
-.I \%man\~page
-called
-.B \-
-use the argument
-.BR man:\- .
-.
-.
-.IP \*(BU 2m
-Next a
-.I \%filespec
-is tested whether it is the path name of an existing file.
-.
-Otherwise it is assumed to be a searching pattern for a
-.IR \%man\~page .
-.
-.
-.IP \*(BU 2m
-.BI \%man: name ( section_extension ) ,
-.BI \%man: name . section_extension,
-.IB \%name ( section_extension ) ,
-or
-.IB \%name . section_extension
-search the \%man\~page
-.I \%name
-in \%man\~section and possibly extension of
-.IR \%section_extension .
-.
-.
-.IP \*(BU 2m
-Now
-.BI \%man: name
-searches for a
-.I \%man\~page
-in the lowest
-.I \%man\~section
-that has a document called
-.IR \%name .
-.
-.
-.IP \*(BU 2m
-.I \%section_extension\~name
-is a pattern of 2 arguments that originates from a strange argument
-parsing of the
-.B man
-program.
-.
-Again, this searches the man page
-.I name
-with
-.IR \%section_extension ,
-a combination of a
-.I section
-character optionally followed by an
-.IR extension .
-.
-.
-.IP \*(BU 2m
-We are left with the argument
-.I \%name
-which is not an existing file.
-.
-So this searches for the
-.I \%man\~page
-called
-.I \%name
-in the lowest
-.I \%man\~section
-that has a document for this name.
-.
-.
-.P
-Several file name arguments can be supplied.
-.
-They are mixed by
-.B \%groff
-into a single document.
-.
-Note that the set of option arguments must fit to all of these file
-arguments.
-.
-So they should have at least the same style of the
-.I \%groff
-language.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "OUTPUT MODES"
-.\" --------------------------------------------------------------------
-.
-By default, the
-.B \%groffer
-program collects all input into a single file, formats it with the
-.B \%groff
-program for a certain device, and then chooses a suitable viewer
-program.
-.
-The device and viewer process in
-.B \%groffer
-is called a
-.IR \%mode .
-.
-The mode and viewer of a running
-.B \%groffer
-program is selected automatically, but the user can also choose it
-with options.
-.
-.
-The modes are selected by option the arguments of
-.BR \-\-mode=\,\fIanymode .
-Additionally, each of this argument can be specified as an option of
-its own, such as
-.BR anymode .
-Most of these modes have a viewer program, which can be chosen by the
-option
-.BR \-\-viewer .
-.
-.
-.P
-Several different modes are offered, graphical modes for
-\f[CR]\%X\~Window\f[],
-.IR \%text\~modes ,
-and some direct
-.I \%groff\~modes
-for debugging and development.
-.
-.
-.P
-By default,
-.B \%groffer
-first tries whether
-.I \%x\~mode
-is possible, then
-.IR \%ps\~mode ,
-and finally
-.IR \%tty\~mode .
-.
-This mode testing sequence for
-.I \%auto\~mode
-can be changed by specifying a comma separated list of modes with the
-option
-.B \-\-default\-modes.
-.
-.
-.P
-The searching for
-.I \%man\~pages
-and the decompression of the input are active in every mode.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Graphical Display Modes"
-.\" --------------------------------------------------------------------
-.
-The graphical display modes work mostly in the \%\f[CR]X\~Window\f[]
-environment (or similar implementations within other windowing
-environments).
-.
-The environment variable
-.SM
-.B \%$DISPLAY
-and the option
-.B \-\-display
-are used for specifying the \%\f[CR]X\~Window\f[] display to be used.
-.
-If this environment variable is empty
-.B \%groffer
-assumes that no \%\f[CR]X\~Window\f[] is running and changes to a
-.IR \%text\~mode .
-.
-You can change this automatic behavior by the option
-.BR \-\-default\-modes .
-.
-.
-.P
-Known viewers for the graphical display modes and their standard
-\%\f[CR]X\~Window\f[] viewer programs are
-.
-.IP \*(BU 2m
-in a PDF viewer
-.nh
-.RI ( \%pdf\~mode )
-.hy
-.
-.IP \*(BU 2m
-in a web browser
-.nh
-.RI ( html
-or
-.IR \%www\~mode )
-.hy
-.RE
-.
-.IP \*(BU 2m
-in a Postscript viewer
-.nh
-.RI ( \%ps\~mode )
-.hy
-.
-.IP \*(BU 2m
-\%\f[CR]X\~Window\f[]
-.I roff
-viewers such as
-.BR \%gxditview (@MAN1EXT@)
-or
-.BR \%xditview (1)
-(in
-.IR \%x\~mode )
-.
-.IP \*(BU 2m
-in a dvi viewer program
-.nh
-.RI ( \%dvi\~mode )
-.hy
-.
-.
-.P
-The
-.I \%pdf\~mode
-has a major advantage \[em] it is the only graphical display mode that
-allows to search for text within the viewer; this can be a really
-important feature.
-.
-Unfortunately, it takes some time to transform the input into the PDF
-format, so it was not chosen as the major mode.
-.
-.
-.P
-These graphical viewers can be customized by options of the
-\%\f[CR]X\~Window\~Toolkit\f[].
-.
-But the
-.B \%groffer
-options use a leading double minus instead of the single minus used by
-the \%\f[CR]X\~Window\~Toolkit\f[].
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Text modes"
-.\" --------------------------------------------------------------------
-.
-There are two modes for text output,
-.I \%mode\~text
-for plain output without a pager and
-.I \%mode\~tty
-for a text output on a text terminal using some pager program.
-.
-.
-.P
-If the variable
-.SM
-.B \%$DISPLAY
-is not set or empty,
-.B \%groffer
-assumes that it should use
-.IR \%tty\~\%mode .
-.
-.
-.P
-In the actual implementation, the
-.I groff
-output device
-.I \%latin1
-is chosen for
-.IR \%text\~modes .
-.
-This can be changed by specifying option
-.B \-T
-or
-.BR \%\-\-device .
-.
-.
-.P
-The pager to be used can be specified by one of the options
-.B \-\-pager
-and
-.BR \-\-viewer ,
-or by the environment variable
-.BR \%$PAGER .
-If all of this is not used the
-.BR \%less (1)
-program with the option
-.B \-r
-for correctly displaying control sequences is used as the default
-pager.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Special Modes for Debugging and Development"
-.\" --------------------------------------------------------------------
-.
-These modes use the
-.I \%groffer
-file determination and decompression.
-.
-This is combined into a single input file that is fed directly into
-.B \%groff
-with different strategy without the
-.I \%groffer
-viewing facilities.
-.
-These modes are regarded as advanced, they are useful for debugging
-and development purposes.
-.
-.
-.P
-The
-.I \%source\~mode
-with option
-.B \-\-source
-just displays the decompressed input.
-.
-.
-.P
-Option
-.B \-\-to\-stdout
-does not display in a graphical mode.
-.
-It just generates the file for the chosen mode and then prints its
-content to standard output.
-.
-.
-.P
-The
-.I \%groff\~mode
-passes the input to
-.B \%groff
-using only some suitable options provided to
-.BR \%groffer .
-.
-This enables the user to save the generated output into a file or pipe
-it into another program.
-.
-.
-.P
-In
-.IR \%groff\~\%mode ,
-the option
-.B \-Z
-disables post-processing, thus producing the
-.nh
-.I groff intermediate
-.IR output .
-.hy
-.
-In this mode, the input is formatted, but not postprocessed; see
-.BR \%groff_out (@MAN5EXT@)
-for details.
-.
-.
-.P
-All
-.B \%groff
-short options are supported by
-.BR \%groffer .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "MAN PAGE SEARCHING"
-.\" --------------------------------------------------------------------
-.
-The default behavior of
-.B \%groffer
-is to first test whether a file parameter represents a local file; if
-it is not an existing file name, it is assumed to represent the name
-of a
-.IR \%man\~page .
-The following options can be used to determine whether the arguments
-should be handled as file name or
-.I \%man\~page
-arguments.
-.
-.TP
-.B \-\-man
-forces to interpret all file parameters as
-.I \%filespecs
-for searching
-.IR \%man\~pages .
-.
-.TP
-.B \-\-no\-man
-.TQ
-.B \-\-local\-file
-disable the
-.I man
-searching; so only local files are displayed.
-.
-.
-.P
-If neither a local file nor a
-.I \%man\~page
-was retrieved for some file parameter a warning is issued on standard
-error, but processing is continued.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Search Algorithm"
-.\" --------------------------------------------------------------------
-.
-Let us now assume that a
-.I \%man\~page
-should be searched.
-.
-The
-.B \%groffer
-program provides a search facility for
-.IR \%man\~pages .
-.
-All long options, all environment variables, and most of the
-functionality of the \f[CR]GNU\fP
-.BR \%man (1)
-program were implemented.
-.
-The search algorithm shall determine which file is displayed for a given
-.IR \%man\~page .
-The process can be modified by options and environment variables.
-.
-.
-.P
-The only
-.I man
-action that is omitted in
-.B \%groffer
-are the preformatted
-.IR \%man\~pages ,
-also called
-.IR cat\~pages .
-.
-With the excellent performance of the actual computers, the
-preformatted
-.I \%man\~pages
-aren't necessary any longer.
-.
-Additionally,
-.B \%groffer
-is a
-.I roff
-program; it wants to read
-.I roff
-source files and format them itself.
-.
-.
-.P
-The algorithm for retrieving the file for a
-.I \%man\~page
-needs first a set of directories.
-.
-This set starts with the so-called
-.I man\~path
-that is modified later on by adding names of
-.I operating system
-and
-.IR language .
-.
-This arising set is used for adding the section directories which
-contain the
-.I \%man\~page
-files.
-.
-.
-.P
-The
-.I man\~path
-is a list of directories that are separated by colon.
-.
-It is generated by the following methods.
-.
-.IP \*(BU 2m
-The environment variable
-.SM
-.B \%$MANPATH
-can be set.
-.
-.IP \*(BU 2m
-It can be read from the arguments of the environment variable
-.SM
-.BR \%$MANOPT .
-.
-.IP \*(BU 2m
-The
-.I man\~path
-can be manually specified by using the option
-.BR \-\-manpath .
-An empty argument disables the
-.I \%man\~page
-searching.
-.
-.IP \*(BU 2m
-When no
-.I man\~path
-was set the
-.BR \%manpath (1)
-program is tried to determine one.
-.
-.IP \*(BU 2m
-If this does not work a reasonable default path from
-.SM
-.B $PATH
-is determined.
-.
-.
-.P
-We now have a starting set of directories.
-.
-The first way to change this set is by adding names of
-.I operating
-.IR systems .
-.
-This assumes that
-.I \%man\~pages
-for several
-.I operating systems
-are installed.
-.
-This is not always true.
-.
-The names of such
-.I operating systems
-can be provided by 3 methods.
-.
-.IP \*(BU 2m
-The environment variable
-.SM
-.B \%$SYSTEM
-has the lowest precedence.
-.
-.IP \*(BU 2m
-This can be overridden by an option in
-.SM
-.BR \%$MANOPT .
-.
-.IP \*(BU 2m
-This again is overridden by the command line option
-.BR \-\-systems .
-.
-.
-.P
-Several names of
-.I operating systems
-can be given by appending their names, separated by a comma.
-.
-.
-.P
-The
-.I man\~path
-is changed by appending each
-.I system
-name as subdirectory at the end of each directory of the set.
-.
-No directory of the
-.I man\~path
-set is kept.
-.
-But if no
-.I system
-name is specified the
-.I man\~path
-is left unchanged.
-.
-.
-.P
-After this, the actual set of directories can be changed by
-.I language
-information.
-.
-This assumes that there exist
-.I man\~pages
-in different languages.
-.
-The wanted
-.I language
-can be chosen by several methods.
-.
-.IP \*(BU 2m
-Environment variable
-.SM
-.BR $LANG .
-.
-.IP \*(BU 2m
-This is overridden by
-.SM
-.BR \%$LC_MESSAGES .
-.
-.IP \*(BU 2m
-This is overridden by
-.SM
-.BR $LC_ALL .
-.
-.IP \*(BU 2m
-This can be overridden by providing an option in
-.SM
-.BR \%$MANOPT .
-.
-.IP \*(BU 2m
-All these environment variables are overridden by the command line
-option
-.BR \-\-locale .
-.
-.
-.P
-The
-.I default language
-can be specified by specifying one of the pseudo-language parameters
-\f[CR]C\fP or \f[CR]\%POSIX\fP.
-.
-This is like deleting a formerly given
-.I language
-information.
-.
-The
-.I \%man\~pages
-in the
-.I default language
-are usually in English.
-.
-.
-.P
-Of course, the
-.I language
-name is determined by
-.BR man .
-In \f[CR]GNU\fP
-.BR man ,
-it is specified in the \%\f[CR]POSIX\~1003.1\fP based format:
-.P
-.nh
-\f[I]<language>\/\f[][\f[CB]_\f[]\,\f[I]<territory>\/\f[][\f[CB].\fP\
-\f[I]<character-set>\/\f[][\f[CB],\fP\,\f[I]<version>\/\fP]]],
-.hy
-.P
-but the two-letter code in
-.nh
-.I <language>
-.hy
-is sufficient for most purposes.
-.
-If for a complicated
-.I language
-formulation no
-.I \%man\~pages
-are found
-.B \%groffer
-searches the country part consisting of these first two characters as
-well.
-.
-.
-.P
-The actual directory set is copied thrice.
-.
-The
-.I language
-name is appended as subdirectory to each directory in the first copy
-of the actual directory set (this is only done when a language
-information is given).
-.
-Then the 2-letter abbreviation of the
-.I language
-name is appended as subdirectories to the second copy of the directory
-set (this is only done when the given language name has more than 2
-letters).
-.
-The third copy of the directory set is kept unchanged (if no
-.I language
-information is given this is the kept directory set).
-.
-These maximally 3 copies are appended to get the new directory set.
-.
-.
-.P
-We now have a complete set of directories to work with.
-.
-In each of these directories, the
-.I man
-files are separated in
-.IR sections .
-.
-The name of a
-.I section
-is represented by a single character, a digit between
-.I 1
-and
-.IR 9 ,
-or the character
-.I o
-or
-.IR n ,
-in this order.
-.
-.
-.P
-For each available
-.IR section ,
-a subdirectory
-.BI man <section>
-exists containing all
-.I man
-files for this
-.IR section ,
-where
-.I <section>
-is a single character as described before.
-.
-Each
-.I man
-file in a
-.I section
-directory has the form
-.IR \%\f[CB]man\fP<section>\f[CB]/\fP<name>\f[CB].\fP<section>\
-[<extension>][\f[CB].\fP<compression>] ,
-where
-.I \%<extension>
-and
-.I \%<compression>
-are optional.
-.
-.I \%<name>
-is the name of the
-.I \%man\~page
-that is also specified as filespec argument on the command line.
-.
-.
-.P
-The
-.I extension
-is an addition to the section.
-.
-This postfix acts like a subsection.
-.
-An
-.I extension
-occurs only in the file name, not in name of the
-.I section
-subdirectory.
-.
-It can be specified on the command line.
-.
-.
-.P
-On the other hand, the
-.I compression
-is just an information on how the file is compressed.
-.
-This is not important for the user, such that it cannot be specified
-on the command line.
-.
-.
-.P
-There are 4 methods to specify a
-.I section
-on the command line:
-.
-.IP \*(BU 2m
-Environment variable
-.SM
-.B \%$MANSECT
-.
-.IP \*(BU 2m
-Command line option
-.B \-\-sections
-.
-.IP \*(BU 2m
-Appendix to the
-.I name
-argument in the form
-.I <name>.<section>
-.
-.IP \*(BU 2m
-Preargument before the
-.I name
-argument in the form
-.I <section> <name>
-.
-.
-.P
-It is also possible to specify several
-.I sections
-by appending the single characters separated by colons.
-.
-One can imagine that this means to restrict the
-.I \%man\~page
-search to only some
-.IR sections .
-.
-The multiple
-.I sections
-are only possible for
-.SM
-.B \%$MANSECT
-and
-.BR \-\-sections .
-.
-.
-.P
-If no
-.I section
-is specified all
-.I sections
-are searched one after the other in the given order, starting with
-.IR section\~1 ,
-until a suitable file is found.
-.
-.
-.P
-There are 4 methods to specify an
-.I extension
-on the command line.
-.
-But it is not necessary to provide the whole extension name, some
-abbreviation is good enough in most cases.
-.
-.IP \*(BU 2m
-Environment variable
-.SM
-.B \%$EXTENSION
-.
-.IP \*(BU 2m
-Command line option
-.B \-\-extension
-.
-.IP \*(BU 2m
-Appendix to the
-.I <name>.<section>
-argument in the form
-.I <name>.<section><extension>
-.
-.IP \*(BU 2m
-Preargument before the
-.I name
-argument in the form
-.I <section><extension> <name>
-.
-.
-.P
-For further details on
-.I \%man\~page
-searching, see
-.BR \%man (1).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Examples of man files"
-.\" --------------------------------------------------------------------
-.
-.TP
-.B /usr/share/man/man1/groff.1
-This is an uncompressed file for the
-.I \%man\~page
-\f[CR]groff\fP in
-.IR section\~1 .
-.
-It can be called by
-.EX
-\fIsh#\fR groffer\~groff
-.EE
-No
-.I section
-is specified here, so all
-.I sections
-should be searched, but as
-.I section\~1
-is searched first this file will be found first.
-.
-The file name is composed of the following components.
-.B /usr/share/man/
-must be part of the
-.IR \%man\~path ;
-the subdirectory
-.B man1/
-and the part
-.B .1
-stand for the
-.IR section ;
-.B groff
-is the name of the
-.IR \%man\~page .
-.
-.
-.TP
-.B /usr/local/share/man/man7/groff.7.gz
-The file name is composed of the following components.
-.B /usr/local/share/man
-must be part of the
-.IR \%man\~path ;
-the subdirectory
-.B man7/
-and the part
-.B .7
-stand for the
-.IR section ;
-.B groff
-is the name of the
-.IR \%man\~page ;
-the final part
-.B .gz
-stands for a compression with
-.BR gzip (1).
-As the
-.I section
-is not the first one it must be specified as well.
-.
-This can be done by one of the following commands.
-.EX
-\fIsh#\fR\~groffer\~groff.7
-\fIsh#\fR\~groffer\~7\~groff
-\fIsh#\fR\~groffer\~\-\-sections=7\~groff
-.EE
-.
-.TP
-.B /usr/local/man/man1/ctags.1emacs21.bz2
-Here
-.B /usr/local/man
-must be in
-.IR \%man\~path ;
-the subdirectory
-.B man1/
-and the file name part
-.B .1
-stand for
-.IR section\~1 ;
-the name of the
-.I \%man\~page
-is
-.BR ctags ;
-the section has an extension
-.BR emacs21 ;
-and the file is compressed as
-.B .bz2
-with
-.BR bzip2 (1).
-The file can be viewed with one of the following commands
-.EX
-\fIsh#\fR\~groffer\~ctags.1e
-\fIsh#\fR\~groffer\~1e\~ctags
-\fIsh#\fR\~groffer\~\-\-extension=e\~\-\-sections=1\~ctags
-.EE
-where \f[CR]e\fP works as an abbreviation for the extension
-\f[CR]emacs21\fP.
-.
-.
-.TP
-.B /usr/man/linux/de/man7/man.7.Z
-The directory
-.B /usr/man
-is now part of the
-.IR \%man\~path ;
-then there is a subdirectory for an
-.I operating system
-name
-.BR linux/ ;
-next comes a subdirectory
-.B de/
-for the German
-.IR language ;
-the
-.I section
-names
-.B man7
-and
-.B .7
-are known so far;
-.B man
-is the name of the
-.IR \%man\~page ;
-and
-.B .Z
-signifies the compression that can be handled by
-.BR gzip (1).
-We want now show how to provide several values for some options.
-.
-That is possible for
-.I sections
-and
-.I operating system
-names.
-.
-So we use as
-.I sections\~5
-and
-.I 7
-and as
-.I system
-names
-.I linux
-and
-.IR aix .
-The command is then
-.sp
-.EX
-\fIsh#\fR groffer\~\-\-locale=de\~\-\-sections=5:7\~\-\-systems=linux,aix\~man
-\fIsh#\fR LANG=de\~MANSECT=5:7\~SYSTEM=linux,aix\~groffer\~man
-.EE
-.
-.
-.\" --------------------------------------------------------------------
-.SH DECOMPRESSION
-.\" --------------------------------------------------------------------
-.
-The program has a decompression facility.
-.
-If standard input or a file that was retrieved from the command line
-parameters is compressed with a format that is supported by either
-.BR \%gzip (1)
-or
-.BR \%bzip2 (1)
-it is decompressed on-the-fly.
-.
-This includes the \f[CR]GNU\fP
-.BR \%.gz ,
-.BR \%.bz2 ,
-and the traditional
-.B \%.Z
-compression.
-.
-The program displays the concatenation of all decompressed input in
-the sequence that was specified on the command line.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "ENVIRONMENT"
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program supports many system variables, most of them by courtesy of
-other programs.
-.
-All environment variables of
-.BR \%groff (@MAN1EXT@)
-and \f[CR]GNU\fP
-.BR \%man (1)
-and some standard system variables are honored.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Native groffer Variables"
-.\" --------------------------------------------------------------------
-.
-.TP
-.SM
-.B \%$GROFFER_OPT
-Store options for a run of
-.BR \%groffer .
-.
-The options specified in this variable are overridden by the options
-given on the command line.
-.
-The content of this variable is run through the shell builtin `eval';
-so arguments containing white-space or special shell characters should
-be quoted.
-.
-Do not forget to export this variable, otherwise it does not exist
-during the run of
-.BR groffer .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "System Variables"
-.\" --------------------------------------------------------------------
-.
-The following variables have a special meaning for
-.BR \%groffer .
-.
-.
-.TP
-.SM
-.B \%$DISPLAY
-If this variable is set this indicates that the \%\f[CR]X\~Window\fP
-system is running.
-.
-Testing this variable decides on whether graphical or text output is
-generated.
-.
-This variable should not be changed by the user carelessly, but it can
-be used to start the graphical
-.B \%groffer
-on a remote \%\f[CR]X\~Window\fP terminal.
-.
-For example, depending on your system,
-.B \%groffer
-can be started on the second monitor by the command
-.sp
-.EX
-\fIsh#\fR DISPLAY=:0.1\~groffer\~what.ever &
-.EE
-.
-.
-.TP
-.SM
-.B \%$LC_ALL
-.TQ
-.SM
-.B \%$LC_MESSAGES
-.TQ
-.SM
-.B $LANG
-If one of these variables is set (in the above sequence), its content
-is interpreted as the locale, the language to be used, especially when
-retrieving
-.IR \%man\~pages .
-.
-A locale name is typically of the form
-.nh
-.IR language [\c
-.B _\c
-.IR territory [\c
-.B .\c
-.IR codeset [\c
-.B @\c
-.IR modifier ]]],
-.hy
-where
-.I \%language
-is an ISO 639 language code,
-.I \%territory
-is an ISO 3166 country code, and
-.I \%codeset
-is a character set or encoding identifier like ISO-8859-1 or UTF-8;
-see
-.BR \%setlocale (3).
-.
-The locale values \f[CR]C\fP and \%\f[CR]POSIX\fP
-stand for the default, i.e.\& the
-.I \%man\~page
-directories without a language prefix.
-.
-This is the same behavior as when all 3\~variables are unset.
-.
-.
-.TP
-.SM
-.B \%$PAGER
-This variable can be used to set the pager for the tty output.
-.
-For example, to disable the use of a pager completely set this
-variable to the
-.BR \%cat (1)
-program
-.sp
-.EX
-\fIsh#\fR PAGER=cat\~groffer\~anything
-.EE
-.sp
-.
-.TP
-.SM
-.B $PATH
-All programs within the
-.B \%groffer
-script are called without a fixed path.
-.
-Thus this environment variable determines the set of programs used
-within the run of
-.BR \%groffer .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Groff Variables"
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program internally calls
-.BR \%groff ,
-so all environment variables documented in
-.BR \%groff (@MAN1EXT@)
-are internally used within
-.B \%groffer
-as well.
-.
-The following variable has a direct meaning for the
-.B \%groffer
-program.
-.
-.TP
-.SM
-.B \%$GROFF_TMPDIR
-If the value of this variable is an existing, writable directory,
-.B \%groffer
-uses it for storing its temporary files, just as
-.B groff
-does.
-.
-See the
-.BR \%groff (@MAN1EXT@)
-man page for more details on the location of temporary files.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Man Variables"
-.\" --------------------------------------------------------------------
-.
-Parts of the functionality of the
-.B man
-program were implemented in
-.BR \%groffer ;
-support for all environment variables documented in
-.BR \%man (1)
-was added to
-.BR \%groffer ,
-but the meaning was slightly modified due to the different approach in
-.BR \%groffer ;
-but the user interface is the same.
-.
-The
-.B man
-environment variables can be overwritten by options provided with
-.SM
-.BR \%$MANOPT ,
-which in turn is overwritten by the command line.
-.
-.
-.TP
-.SM
-.B \%$EXTENSION
-Restrict the search for
-.I \%man\~pages
-to files having this extension.
-.
-This is overridden by option
-.BR \-\-extension ;
-see there for details.
-.
-.
-.TP
-.SM
-.B \%$MANOPT
-This variable contains options as a preset for
-.BR \%man (1).
-As not all of these are relevant for
-.B \%groffer
-only the essential parts of its value are extracted.
-.
-The options specified in this variable overwrite the values of the
-other environment variables that are specific to
-.IR man .
-.
-All options specified in this variable are overridden by the options
-given on the command line.
-.
-.
-.TP
-.SM
-.B \%$MANPATH
-If set, this variable contains the directories in which the
-.I \%man\~page
-trees are stored.
-.
-This is overridden by option
-.BR \%\-\-manpath .
-.
-.
-.TP
-.SM
-.B \%$MANSECT
-If this is a colon separated list of section names, the search for
-.I \%man\~pages
-is restricted to those manual sections in that order.
-.
-This is overridden by option
-.BR \-\-sections .
-.
-.
-.TP
-.SM
-.B \%$SYSTEM
-If this is set to a comma separated list of names these are interpreted
-as
-.I \%man\~page
-trees for different operating systems.
-.
-This variable can be overwritten by option
-.BR \-\-systems ;
-see there for details.
-.
-.
-.P
-The environment variable
-.SM
-.B \%$MANROFFSEQ
-is ignored by
-.B \%groffer
-because the necessary preprocessors are determined automatically.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "CONFIGURATION FILES"
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program can be preconfigured by two configuration files.
-.
-.
-.TP
-.B \%/etc/groff/groffer.conf
-System-wide configuration file for
-.BR \%groffer .
-.
-.
-.TP
-.B \%$HOME/.groff/groffer.conf
-User-specific configuration file for
-.BR \%groffer ,
-where
-.SM
-.B \%$HOME
-denotes the user's home directory.
-.
-This file is called after the system-wide configuration file to enable
-overriding by the user.
-.
-.
-.P
-Both files are handled for the configuration, but the configuration
-file in
-.B /etc
-comes first; it is overwritten by the configuration file in the home
-directory; both configuration files are overwritten by the environment
-variable
-.SM
-.BR \%$GROFFER_OPT ;
-everything is overwritten by the command line arguments.
-.
-.
-.P
-The configuration files contain options that should be called as
-default for every
-.B \%groffer
-run.
-.
-These options are written in lines such that each contains either a
-long option, a short option, or a short option cluster; each with or
-without an argument.
-.
-So each line with configuration information starts with a minus
-character
-.RB ` \- ';
-a line with a long option starts with two minus characters
-.RB ` \-\- ',
-a line with a short option or short option cluster starts with a
-single minus
-.RB ` \- '.
-.
-.
-.P
-The option names in the configuration files may not be abbreviated,
-they must be exact.
-.
-.
-.P
-The argument for a long option can be separated from the option name
-either by an equal sign
-.RB ` = '
-or by whitespace, i.e.\& one or several space or tab characters.
-.
-An argument for a short option or short option cluster can be directly
-appended to the option name or separated by whitespace.
-.
-The end of an argument is the end of the line.
-.
-It is not allowed to use a shell environment variable in an option
-name or argument.
-.
-.
-.P
-It is not necessary to use quotes in an option or argument, except for
-empty arguments.
-.
-An empty argument can be provided by appending a pair of quotes to the
-separating equal sign or whitespace; with a short option, the
-separator can be omitted as well.
-.
-For a long option with a separating equal sign
-.RB ` = ',
-the pair of quotes can be omitted, thus ending the line with the
-separating equal sign.
-.
-All other quote characters are cancelled internally.
-.
-.
-.P
-In the configuration files, arbitrary whitespace is allowed at the
-beginning of each line, it is just ignored.
-.
-Each whitespace within a line is replaced by a single space character
-` ' internally.
-.
-.
-.P
-All lines of the configuration lines that do not start
-with a minus character are ignored, such that comments starting with
-.RB ` # '
-are possible.
-.
-So there are no shell commands in the configuration files.
-.
-.
-.P
-As an example, consider the following configuration file that can be
-used either in
-.B \%/etc/groff/groffer.conf
-or
-.B \%\s+2~\s0/.groff/groffer.conf .
-.
-.
-.P
-.ft CR
-.nh
-.nf
-# groffer configuration file
-#
-# groffer options that are used in each call of groffer
-\-\-foreground=DarkBlue
-\-\-resolution=100
-\-\-viewer=gxditview \-geometry 900x1200
-\-\-viewer xpdf \-Z 150
-.fi
-.hy
-.ft
-.
-.
-.P
-The lines starting with
-.B #
-are just ignored, so they act as command lines.
-.
-This configuration sets four
-.B \%groffer
-options (the lines starting with
-.RB ` \- ').
-This has the following effects:
-.
-.
-.IP \*(BU 2m
-Use a text color of
-.B \%DarkBlue
-in all viewers that support this, such as
-.BR \%gxditview .
-.
-.
-.IP \*(BU 2m
-Use a resolution of
-.B 100dpi
-in all viewers that support this, such as
-.BR \%gxditview .
-.
-By this, the default device in
-.I x mode
-is set to
-.BR X100 .
-.
-.
-.IP \*(BU 2m
-Force
-.BR \%gxditview (@MAN1EXT@)
-as the
-.I \%x-mode
-viewer using the geometry option for setting the width to
-.B 900px
-and the height to
-.BR 1200px .
-This geometry is suitable for a resolution of
-.BR 100dpi .
-.
-.
-.IP \*(BU 2m
-Use
-.BR \%xpdf (1)
-as the
-.I \%pdf-mode
-viewer with the argument
-.B \-Z
-.BR 150 .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "EXAMPLES"
-.\" --------------------------------------------------------------------
-.
-The usage of
-.B \%groffer
-is very easy.
-.
-Usually, it is just called with a file name or
-.IR \%man\~page .
-.
-The following examples, however, show that
-.B \%groffer
-has much more fancy capabilities.
-.
-.sp
-.EX
-\fIsh#\fR\~groffer\~/usr/local/share/doc/groff/meintro.ms.gz
-.EE
-.sp
-Decompress, format and display the compressed file
-.B meintro.ms.gz
-in the directory
-.BR /usr/local/share/doc/groff ,
-using the standard viewer
-.B \%gxditview
-as graphical viewer when in \%\f[CR]X\~Window\fP, or the
-.BR \%less (1)
-pager program when not in \%\f[CR]X\~Window\fP.
-.
-.sp
-.EX
-\fIsh#\fR\~groffer\~groff
-.EE
-.sp
-If the file
-.B \%./groff
-exists use it as input.
-.
-Otherwise interpret the argument as a search for the
-.I \%man\~page
-named
-.B \%groff
-in the smallest possible
-.IR \%man\~section ,
-being section 1 in this case.
-.
-.sp
-.EX
-\fIsh#\fR\~groffer\~man:groff
-.EE
-.sp
-search for the
-.I \%man\~page
-of
-.B \%groff
-even when the file
-.B ./groff
-exists.
-.
-.sp
-.EX
-\fIsh#\fR\~groffer\~groff.7
-\fIsh#\fR\~groffer\~7\~groff
-.EE
-.sp
-search the
-.I \%man\~page
-of
-.B \%groff
-in
-.I \%man\~section
-.BR 7 .
-This section search works only for a digit or a single character from
-a small set.
-.
-.sp
-.EX
-\fIsh#\fR\~groffer\~fb.modes
-.EE
-.sp
-If the file
-.B ./fb.modes
-does not exist interpret this as a search for the
-.I \%man\~page
-of
-.BR fb.modes .
-As the extension
-.I \%modes
-is not a single character in classical section style the argument is
-not split to a search for
-.BR fb .
-.
-.sp
-.EX
-\fIsh#\fR\~groffer\~groff\~\[cq]troff(1)\[cq]\~man:roff
-.EE
-.sp
-The arguments that are not existing files are looked-up as the
-following
-.IR \%man\~pages :
-.B \%groff
-(automatic search, should be found in \fIman\fP\~section\~1),
-.B \%troff
-(in section\~1),
-and
-.B \%roff
-(in the section with the lowest number, being\~7 in this case).
-.
-The quotes around
-.nh
-.I \[cq]troff(1)\[cq]
-.hy
-are necessary because the parentheses are special shell characters;
-escaping them with a backslash character
-.I \[rs](
-and
-.I \[rs])
-would be possible, too.
-.
-The formatted files are concatenated and displayed in one piece.
-.
-.sp
-.EX
-\fIsh#\fR\~LANG=de\~groffer\~\-\-man\~\-\-viewer=galeon\~ls
-.EE
-.sp
-Retrieve the German
-.I \%man\~page
-(language
-.IR de )
-for the
-.B ls
-program, decompress it, format it to
-.I \%html
-format
-.nh
-.RI ( \%www\~mode )
-.hy
-and view the result in the web browser
-.BR \%galeon .
-The option
-.B \-\-man
-guarantees that the
-.I \%man\~page
-is retrieved, even when a local file
-.B \%ls
-exists in the actual directory.
-.
-.
-.sp
-.EX
-\fIsh#\fR\~groffer\~\-\-source\~'man:roff(7)'
-.EE
-.sp
-Get the
-.I \%man\~page
-called
-.I \%roff
-in \fIman\fP\~section 7, decompress it, and print its unformatted
-content, its source code.
-.
-.
-.sp
-.EX
-\fIsh#\fR\~groffer\~\-\-de-p\~\-\-in\~\-\-ap
-.EE
-.sp
-This is a set of abbreviated arguments, it is determined as
-.br
-.sp
-.EX
-\fIsh#\fR\~groffer\~\-\-debug-params\~\-\-intermediate-output\~\-\-apropos
-.EE
-.sp
-.
-.sp
-.EX
-\fIsh#\fR\~cat\~file.gz\~|\~groffer\~-Z\~-mfoo
-.EE
-.sp
-.
-The file
-.B file.gz
-is sent to standard input, this is decompressed, and then this is
-transported to the
-.I \%groff intermediate output mode
-without post-processing
-.RB ( groff
-option
-.BR \-Z ),
-using macro package
-.I \%foo
-.RB ( groff
-option
-.BR \-m ).
-.
-.
-.sp
-.EX
-\fIsh#\fR\~echo\~'\[rs]f[CB]WOW!'\~|
-> groffer \-\-x \-\-bg red \-\-fg yellow \-\-geometry 200x100 \-
-.EE
-.sp
-.
-Display the word \f[CB]WOW!\fP in a small window in constant-width
-bold font, using color yellow on red background.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COMPATIBILITY"
-.\" --------------------------------------------------------------------
-.
-The
-.B \%groffer
-program is written in Perl, the Perl version during writing was v5.8.8.
-.
-.
-.P
-.B \%groffer
-provides its own parser for command line arguments that is compatible
-to both \%\f[CR]POSIX\fP
-.BR \%getopts (1)
-and \%\f[CR]GNU\fP
-.BR \%getopt (1).
-It can handle option arguments and file names containing white space
-and a large set of special characters.
-.
-The following standard types of options are supported.
-.
-.
-.IP \*(BU 2m
-The option consisting of a single minus
-.B \-
-refers to standard input.
-.
-.
-.IP \*(BU 2m
-A single minus followed by characters refers to a single character
-option or a combination thereof; for example, the
-.B \%groffer
-short option combination
-.B \-Qmfoo
-is equivalent to
-.BR \-Q\~\-m\~foo .
-.
-.
-.IP \*(BU 2m
-Long options are options with names longer than one character; they
-are always preceded by a double minus.
-.
-An option argument can either go to the next command line argument or
-be appended with an equal sign to the argument; for example,
-.B \-\-long=arg
-is equivalent to
-.BR \-\-long\~arg .
-.
-.
-.IP \*(BU 2m
-An argument of
-.B \-\-
-ends option parsing; all further command line arguments are
-interpreted as
-.I \%filespec
-parameters, i.e.\& file names or constructs for searching
-.IR \%man\~pages ).
-.
-.
-.IP \*(BU 2m
-All command line arguments that are neither options nor option
-arguments are interpreted as
-.I \%filespec
-parameters and stored until option parsing has finished.
-.
-For example, the command line
-.sp
-.EX
-\fIsh#\fR\~groffer file1 \-a \-o arg file2
-.EE
-.sp
-is equivalent to
-.sp
-.EX
-\fIsh#\fR\~groffer \-a \-o arg \-\- file1 file2
-.EE
-.sp
-.
-.P
-The free mixing of options and
-.I \%filespec
-parameters follows the GNU principle.
-.
-That does not fulfill the strange option behavior of \%\f[CR]POSIX\fP
-that ends option processing as soon as the first non-option argument
-has been reached.
-.
-The end of option processing can be forced by the option
-.RB ` \-\- '
-anyway.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "BUGS"
-.\" --------------------------------------------------------------------
-.
-Report bugs to the
-.MT bug-groff@gnu.org
-bug-groff mailing list
-.ME .
-.
-Include a complete, self-contained example that will allow the bug to
-be reproduced, and say which version of
-.B \%groffer
-you are using.
-.
-.
-.P
-You can also use the
-.MT groff@gnu.org
-groff mailing list
-.ME ,
-but you must first subscribe to this list.
-.
-You can do that by visiting the
-.UR http://\:lists.gnu.org/\:mailman/\:listinfo/\:groff
-groff mailing list web page
-.UE .
-.
-.
-.P
-See
-.BR \%groff (@MAN1EXT@)
-for information on availability.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.P
-.BR \%groff (@MAN1EXT@),
-.BR \%@g@troff (@MAN1EXT@)
-.RS
-Details on the options and environment variables available in
-.BR \%groff ;
-all of them can be used with
-.BR \%groffer .
-.RE
-.
-.
-.TP
-.BR \%grog (@MAN1EXT@)
-This program tries to guess the necessary
-.B \%groff
-command line options from the input and the
-.B groffer
-options.
-.
-.
-.TP
-.BR \%groff (@MAN7EXT@)
-Documentation of the
-.I \%groff
-language.
-.
-.
-.TP
-.BR groff_char (@MAN7EXT@)
-Documentation on the
-.I \%groff
-characters, special characters, and glyphs..
-.
-.
-.TP
-.BR groff_tmac (@MAN5EXT@)
-Documentation on the
-.I \%groff
-macro files.
-.
-.
-.TP
-.BR groff_out (@MAN5EXT@)
-Documentation on the
-.I \%groff intermediate output
-before the run of a
-.IR postprocessor .
-.nh
-.RI ( ditroff
-output).
-.hy
-.
-This can be run by the
-.B groff
-or
-.B groffer
-option
-.BR -Z .
-.
-.
-.TP
-.BR \%man (1)
-The standard program to display
-.IR \%man\~pages .
-.
-The information there is only useful if it is the
-.I \%man\~page
-for GNU
-.BR man .
-Then it documents the options and environment variables that are
-supported by
-.BR \%groffer .
-.
-.
-.TP
-.BR \%gxditview (@MAN1EXT@)
-.TQ
-.BR \%xditview (1x)
-.RS
-Viewers for
-.BR \%groffer 's
-.IR \%x\~mode .
-.RE
-.
-.
-.TP
-.BR \%kpdf (1)
-.TQ
-.BR \%kghostview (1)
-.TQ
-.BR \%evince (1)
-.TQ
-.BR \%ggv (1)
-.TQ
-.BR \%gv (1)
-.TQ
-.BR \%ghostview (1)
-.TQ
-.BR \%gs (1)
-Viewers for
-.BR \%groffer 's
-.IR \%ps\~mode .
-.
-.
-.TP
-.BR \%kpdf (1)
-.TQ
-.BR \%acroread (1)
-.TQ
-.BR \%evince (1)
-.TQ
-.BR \%xpdf (1)
-.TQ
-.BR \%gpdf (1)
-.TQ
-.BR \%kghostview (1)
-.TQ
-.BR \%ggv (1)
-Viewers for
-.BR \%groffer 's
-.IR \%pdf\~mode .
-.
-.
-.P
-.BR \%kdvi (1),
-.BR \%xdvi (1),
-.BR \%dvilx (1)
-.RS
-Viewers for
-.BR \%groffer 's
-.IR \%dvi\~mode .
-.RE
-.
-.
-.TP
-.BR \%konqueror (1)
-.TQ
-.BR \%epiphany (1)
-.TQ
-.BR \%firefox (1)
-.TQ
-.BR \%mozilla (1)
-.TQ
-.BR \%netscape (1)
-.TQ
-.BR \%lynx (1)
-Web-browsers for
-.BR \%groffer 's
-.I \%html
-or
-.IR \%www\~mode .
-.
-.
-.TP
-.BR \%less (1)
-.TQ
-.BR more (1)
-Standard pager program for the
-.IR \%tty\~mode .
-.
-.
-.TP
-.BR \%gzip (1)
-.TQ
-.BR \%bzip2 (1)
-.TQ
-.BR \%xz (1)
-The decompression programs supported by
-.BR \%groffer .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 4e2e575aee0f5038785b1ecdc042064aa902536b..697dacb8fd1345178b33741f6e29059dfece4dd5 100755 (executable)
@@ -5,25 +5,26 @@
 # Source file position: <groff-source>/contrib/groffer/groffer.pl
 # Installed position: <prefix>/bin/groffer
 
-# Copyright (C) 2006-2014
-#   Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `groffer', which is part of `groff'.
+# Last update: 27 Aug 2015
 
-# `groff' is free software; you can redistribute it and/or modify it
+# This file is part of 'groffer', which is part of 'groff'.
+
+# 'groff' 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.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see
+# along with this program.  If not, see
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 ########################################################################
@@ -38,7 +39,7 @@ use File::Temp qw/ tempfile tempdir /;
 # needed for temporary dir
 use File::Spec;
 
-# for `copy' and `move'
+# for 'copy' and 'move'
 use File::Copy;
 
 # for fileparse, dirname and basename
@@ -106,7 +107,7 @@ our $File_split_env_sh;
 our $File_version_sh;
 our $Groff_Version;
 
-my $before_make;               # script before run of `make'
+my $before_make;               # script before run of 'make'
 {
   my $at = '@';
   $before_make = 1 if '@VERSION@' eq "${at}VERSION${at}";
@@ -163,7 +164,8 @@ our @Conf_Files = (File::Spec->catfile(File::Spec->rootdir(),
                                      'groffer.conf')
                 );
 
-our @Default_Modes = ('pdf', 'pdf2', 'html', 'ps', 'x', 'dvi', 'tty');
+our @Default_Modes = ('pdf', 'pdf2', 'html', 'xhtml', 'ps', 'x', 'dvi',
+                     'tty');
 our $Default_Resolution = 100;
 our $Default_tty_Device = 'utf8';
 
@@ -181,6 +183,9 @@ our %Viewer_X = ('DVI' => ['kdvi', 'xdvi', 'dvilx'],
                'HTML' => ['konqueror', 'epiphany'. 'mozilla-firefox',
                           'firefox', 'mozilla', 'netscape', 'galeon',
                           'opera', 'amaya','arena', 'mosaic'],
+               'XHTML' => ['konqueror', 'epiphany'. 'mozilla-firefox',
+                          'firefox', 'mozilla', 'netscape', 'galeon',
+                          'opera', 'amaya','arena', 'mosaic'],
                'PDF' => ['okular', 'kpdf', 'acroread', 'evince',
                          'xpdf -z 150', 'gpdf', 'xpdf', 'zathura'.
                          'epdfview', 'qpdfview', 'apvlv', 'qpdfview',
index 90627ccefd8b7fd0bd9b181e5115e76e9bdd2f2e..a40e356a4547948f9a38acbedbe59cdabef3f394 100644 (file)
@@ -5,27 +5,29 @@
 # Source file position: <groff-source>/contrib/groffer/subs.pl
 # Installed position: <prefix>/lib/groff/groffer/subs.pl
 
-# Copyright (C) 2006-201 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `groffer', which is part of `groff'.
+# Last update: 27 Aug 2015
 
-# `groff' is free software; you can redistribute it and/or modify it
+# This file is part of 'groffer', which is part of 'groff'.
+
+# 'groff' 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.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see
+# along with this program.  If not, see
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 ########################################################################
-# This file contains the main functions formerly in `groff.pl'
+# This file contains the main functions formerly in 'groff.pl'
 
 use strict;
 use warnings;
@@ -66,7 +68,7 @@ sub main_set_options {
   'groff', 'help', 'intermediate-output', 'html', 'latin1', 'man',
   'no-location', 'no-man', 'no-special', 'pdf', 'pdf2', 'ps', 'rv',
   'source', 'text', 'to-stdout', 'text-device', 'tty', 'tty-device',
-  'utf8', 'version', 'whatis', 'where', 'www', 'x', 'X');
+  'utf8', 'version', 'whatis', 'where', 'www', 'x', 'X', 'xhtml');
 
 ### main_set_options()
   my @opts_groffer_long_arg =
@@ -75,10 +77,10 @@ sub main_set_options {
      # tty viewers are ignored
      'dvi-viewer-tty', 'html-viewer-tty', 'pdf-viewer-tty',
      'ps-viewer-tty', 'tty-viewer-tty', 'www-viewer-tty',
-     'X-viewer-tty', 'x-viewer-tty',
+     'X-viewer-tty', 'x-viewer-tty', 'xhtml-viewer-tty',,
      # viewers for modes are ignored
      'dvi-viewer', 'html-viewer', 'pdf-viewer', 'ps-viewer', 'tty-viewer',
-     'www-viewer', 'X-viewer', 'x-viewer',
+     'www-viewer', 'X-viewer', 'x-viewer', 'xhtml-viewer',
     );
 
   ##### groffer options inhereted from groff
@@ -132,9 +134,9 @@ sub main_set_options {
   'encoding', 'extension', 'locale');
 
 ### main_set_options()
-  ###### collections of command line options
+  ###### collections of command-line options
 
-  # There are two hashes that control the whole of the command line
+  # There are two hashes that control the whole of the command-line
   # options, one for short and one for long options.  Options without
   # and with arguments are mixed by advicing a value of 0 for an option
   # without argument and a value of 1 for an option with argument.
@@ -190,9 +192,11 @@ sub main_set_options {
                          '--where' => '--location',
                          '--www' => '--html',
                          '--X' => '--x',
+                         '--xhtml' => '--html',
                          # '--dvi-viewer' => '--viewer',
                          '--dvi-viewer-tty' => '--viewer',
                          '--html-viewer-tty' => '--viewer',
+                         '--xhtml-viewer-tty' => '--pager',
                          '--pdf-viewer-tty' => '--viewer',
                          '--ps-viewer-tty' => '--viewer',
                          '--tty-viewer' => '--pager',
@@ -344,14 +348,14 @@ sub main_config_params {  # handle configuration files
          next;
        }
        if ( $line =~ /^--[ =]/ ) {
-         warn "No option name in `$line' in configuration " .
+         warn "No option name in '$line' in configuration " .
            "file $f.\n";
          next;
        }
        push @Starting_Conf, $line;
        # -- or -
        if ($line =~ /^--?$/) {
-         warn "`$line' is not allowed in configuration files.\n";
+         warn "'$line' is not allowed in configuration files.\n";
          next; }
 ### main_config_params()
        if ($line =~ /^--/) {           # line is long option
@@ -365,7 +369,7 @@ sub main_config_params {    # handle configuration files
          } $name =~ s/[\'\"]//g;
          unless (exists $Opts_Cmdline_Long{$name}) {
            # option does not exist
-           warn "Option `$name' does not exist.\n";
+           warn "Option '$name' does not exist.\n";
            next LINE;
          }
          # option exists
@@ -373,13 +377,13 @@ sub main_config_params {  # handle configuration files
            if (defined $arg) {
              push @conf_args, $name, $arg;
              next LINE;
-           } else { warn "Option `$name' needs an argument in " .
+           } else { warn "Option '$name' needs an argument in " .
                       "configuration file $f\n";
                     next LINE;
                   }
          } else { # option has no arg
            if (defined $arg) {
-             warn "Option `$name' may not have an argument " .
+             warn "Option '$name' may not have an argument " .
                "in configuration file $f\n";
              next LINE;
            } else {
@@ -394,7 +398,7 @@ sub main_config_params {    # handle configuration files
            my $opt = "-$1";
            next if ($opt =~ /\'\"/);
            if ($opt =~ /- /) {
-             warn "Option `$conf_args[$#conf_args]' does not " .
+             warn "Option '$conf_args[$#conf_args]' does not " .
                "have an argument.\n";
              next LINE;
            }
@@ -411,7 +415,7 @@ sub main_config_params {    # handle configuration files
                next;
              }
            } else { # short option does not exist
-             warn "Wrong short option `-$opt' from " .
+             warn "Wrong short option '-$opt' from " .
                "configuration.  Rest of line ignored.\n";
              next LINE;
            }
@@ -430,7 +434,7 @@ sub main_config_params {    # handle configuration files
     chomp @GROFFER_OPT;
   }
 
-  # Handle command line parameters together with $GROFFER_OPT.
+  # Handle command-line parameters together with $GROFFER_OPT.
   # Options can be abbreviated, with each - as abbreviation place.
   {
     my @argv0 = (@GROFFER_OPT, @ARGV);
@@ -466,11 +470,11 @@ sub main_config_params {  # handle configuration files
       }
 
       if ($elt =~ /^--[ =]/) { # no option name
-       warn "No option name in `$elt' at $s[$j].\n";
+       warn "No option name in '$elt' at $s[$j].\n";
        next ELT;
       }
       if ($elt =~ /^---/) { # wrong with three minus
-       warn "Wrong option `$elt' at $s[$j].\n";
+       warn "Wrong option '$elt' at $s[$j].\n";
        next ELT;
       }
 
@@ -499,7 +503,7 @@ sub main_config_params {    # handle configuration files
          my $n0 = $1;
          if ( $Opts_Cmdline_Long_Str =~
               /\s(${match}[^-\s]*)\s.*\s(${match}[^-\s]*) / ) {
-           warn "Option name `--$abbrev' is not unique: " .
+           warn "Option name '--$abbrev' is not unique: " .
              "--$1 --$2 \n";
            next ELT;
          }
@@ -510,14 +514,14 @@ sub main_config_params {  # handle configuration files
          my $n0 = $1;
          if ( $Opts_Cmdline_Long_Str =~
               /\s(${match}[^\s]*)\s.*\s(${match}[^\s]*)\s/ ) {
-           warn "Option name `--$abbrev' is not unique: " .
+           warn "Option name '--$abbrev' is not unique: " .
              "--$1 --$2 \n";
            next ELT;
          }
          $name = $n0;
          $opt = "--$n0";
        } else {
-         warn "Option `--$abbrev' does not exist.\n";
+         warn "Option '--$abbrev' does not exist.\n";
          next ELT;
        }
 ### main_config_params()
@@ -528,7 +532,7 @@ sub main_config_params {    # handle configuration files
          } else { # $arg not defined, argument at next element
            if (($i == $n1) || ($i > $n)) {
              warn "No argument left for option " .
-               "`$elt' at $s[$j].\n";
+               "'$elt' at $s[$j].\n";
              next ELT; }
            # add argument as next element
            push @argv, "--$name", $argv0[$i];
@@ -537,7 +541,7 @@ sub main_config_params {    # handle configuration files
          }             # if (defined $arg)
        } else {        # option has no arg
          if (defined $arg) {
-           warn "Option `$abbrev' may not have an argument " .
+           warn "Option '$abbrev' may not have an argument " .
              "at $s[$j].\n";
            next ELT;
          } else {
@@ -563,7 +567,7 @@ sub main_config_params {    # handle configuration files
              } else { # argument at next element
                if (($i == $n1) || ($i > $n)) {
                  warn "No argument left for option " .
-                   "`$opt' at $s[$j].\n";
+                   "'$opt' at $s[$j].\n";
                  next ELT; }
 ### main_config_params()
                # add argument as next element
@@ -575,7 +579,7 @@ sub main_config_params {    # handle configuration files
              push @argv, $opt; next;
            }
          } else { # short option does not exist
-           warn "Wrong short option `$opt' at $s[$j].\n";
+           warn "Wrong short option '$opt' at $s[$j].\n";
            next ELT;
          }             # if (exists $Opts_Cmdline_Short{$opt})
        }               # while ($cluster)
@@ -657,6 +661,7 @@ sub main_parse_params {
                        'cp1047' => 'tty',
                        'dvi'=> 'dvi',
                        'html' => 'html',
+                       'xhtml' => 'html',
                        'latin1' => 'tty',
                        'lbp' => 'groff',
                        'lj4' => 'groff',
@@ -734,7 +739,7 @@ sub main_parse_params {
      '--locale' =>             # set language for man pages, arg
      # argument is xx[_territory[.codeset[@modifier]]] (ISO 639,...)
      sub { $Opt{'LANG'} = &_get_arg(); },
-     '--local-file' =>         # force local files; same as `--no-man'
+     '--local-file' =>         # force local files; same as '--no-man'
      sub { delete $Man{'ENABLE'}; delete $Man{'FORCE'}; },
      '--location' =>           # print file locations to stderr
      sub { $Opt{'LOCATION'} = 1; },
@@ -769,11 +774,11 @@ sub main_parse_params {
               delete $Opt{'MODE'};
             }
           } else {
-            warn "Unknown mode in `$arg' for --mode\n";
+            warn "Unknown mode in '$arg' for --mode\n";
           }
         },
 ### main_parse_params()
-     '--no-location' =>                # disable former call to `--location'
+     '--no-location' =>                # disable former call to '--location'
      sub { delete $Opt{'LOCATION'}; },
      '--no-man' =>             # disable search for man pages
      sub { delete $Man{'ENABLE'}; delete $Man{'FORCE'}; },
@@ -804,7 +809,7 @@ sub main_parse_params {
 ### main_parse_params()
      '--rv' => sub { $Opt{'RV'} = 1; },
      '--sections' =>           # specify sections for man pages, arg
-     # arg is a `:'-separated (colon) list of section names
+     # arg is a ':'-separated (colon) list of section names
      sub { my $arg = &_get_arg();
           my @arg = split /:/, $arg;
           my $s;
@@ -814,7 +819,7 @@ sub main_parse_params {
             if ($Man{'AUTO_SEC_CHARS'} =~ /$c/) {
               $s .= $c;
             } else {
-              warn "main_parse_params(): not a man section `$c';";
+              warn "main_parse_params(): not a man section '$c';";
             }
           }
           $Opt{'SECTIONS'} = $s; },
@@ -941,7 +946,7 @@ sub main_parse_params {
   }
 
   if ( $Opt{'WHATIS'} ) {
-    die "main_parse_params(): cannot handle both `whatis' and `apropos';"
+    die "main_parse_params(): cannot handle both 'whatis' and 'apropos';"
       if $Opt{'APROPOS'};
     $Man{'ALL'} = 1;
     delete $Opt{'APROPOS_SECTIONS'};
@@ -1016,7 +1021,7 @@ sub main_set_mode {
       $Display{'MODE'} = $Opt{'MODE'};
       return 1;
     }
-    $Display{'MODE'} = $Opt{'MODE'} if $Opt{'MODE'} =~ /^html$/;
+    $Display{'MODE'} = $Opt{'MODE'} if $Opt{'MODE'} =~ /^x?html$/;
     @modes = ($Opt{'MODE'});
   } else {                     # empty mode
     if ($Opt{'DEVICE'}) {
@@ -1118,7 +1123,7 @@ sub _get_prog_args {
     my %prog = &where_is_prog($opt);
     my $prog_ref = \%prog;
     unless (%prog) {
-      warn "_get_prog_args(): `$opt' is not an existing program;";
+      warn "_get_prog_args(): '$opt' is not an existing program;";
       return 0;
     }
 
@@ -1161,7 +1166,7 @@ sub _get_prog_args {
 #
 # Local function of main_set_mode().
 #
-# Return  : `0' if not a part of the list, `1' if found in the list.
+# Return  : '0' if not a part of the list, '1' if found in the list.
 #
 sub _get_first_prog {
   our %Display;
@@ -1193,7 +1198,7 @@ sub _get_first_prog {
 #
 # Arguments: 2
 #
-# Return  : `0' if not a part of the list, `1' if found in the list.
+# Return  : '0' if not a part of the list, '1' if found in the list.
 # Output  : none
 #
 # Globals in    : $Viewer_X{<MODE>}, $Viewer_tty{<MODE>}
@@ -1463,7 +1468,7 @@ sub main_do_fileargs {
        warn "main_do_fileargs: the argument $filespec is not a file;";
       }
       next FILESPEC;
-    } else {                   # neither `-' nor has dir
+    } else {                   # neither '-' nor has dir
       # check whether filespec is an existing file
       unless ( $Man{'FORCE'} ) {
        if (-f $filespec && -r $filespec) {
@@ -1499,7 +1504,7 @@ sub main_do_fileargs {
     $Filespec_Is_Man = 1;
 
 ### main_do_fileargs()
-    # test filespec with `man:...' or `...(...)' on man page
+    # test filespec with 'man:...' or '...(...)' on man page
 
     my @names = ($filespec);
     if ($filespec =~ /^man:(.*)$/) {
@@ -1805,7 +1810,7 @@ sub main_display {
       }
 
 ### main_display()
-      # mode is not 'text', but `tty'
+      # mode is not 'text', but 'tty'
       my %pager;
       my @p;
       push @p, $Opt{'PAGER'} if $Opt{'PAGER'};
@@ -1876,6 +1881,21 @@ sub main_display {
       next SWITCH;
     };
 
+    /^xhtml$/ and do {
+      if ($Opt{'DEVICE'} && $Opt{'DEVICE'} ne 'xhtml') {
+       warn "main_display(): " .
+         "wrong device for $Display{'MODE'} mode: $Opt{'DEVICE'};"
+      }
+      $modefile .= '.xhtml';
+      $groggy = `cat $tmp_cat | grog -Txhtml`;
+      die "main_display(): grog error;" if $?;
+      chomp $groggy;
+      print STDERR "grog output: $groggy\n" if $Debug{'GROG'};
+      &_do_display();
+      next SWITCH;
+    };
+
+
     /^pdf$/ and do {
       $modefile .= '.pdf';
       $groggy = `cat $tmp_cat | grog -Tpdf --ligatures`;
@@ -1946,7 +1966,7 @@ sub main_display {
        die "main_display(): grog error;" if $?;
        chomp $groggy;
        print STDERR "grog output: $groggy\n" if $Debug{'GROG'};
-      } elsif ($Opt{'DEVICE'} =~ /^(X.*|dvi|html|lbp|lj4|ps)$/) {
+      } elsif ($Opt{'DEVICE'} =~ /^(X.*|dvi|html|xhtml|lbp|lj4|ps)$/) {
        # these devices work with
        $groggy = `cat $tmp_cat | grog -T$Opt{'DEVICE'} -X`;
        die "main_display(): grog error;" if $?;
@@ -1965,7 +1985,7 @@ sub main_display {
     };
 
     /^.*$/ and do {
-      die "main_display(): unknown mode `$Display{'MODE'}';";
+      die "main_display(): unknown mode '$Display{'MODE'}';";
     };
 
   }                            # SWITCH
@@ -1978,7 +1998,7 @@ sub main_display {
 #
 # Perform the generation of the output and view the result.  If an
 # argument is given interpret it as a function name that is called in
-# the midst (actually only for `pdf').
+# the midst (actually only for 'pdf').
 #
 sub _do_display {
   our ( %Display, %Debug, %Opt );
@@ -2029,7 +2049,7 @@ sub _do_display {
 #############
 # _do_opt_V ()
 #
-# Check on option `-V'; if set print the corresponding output and leave.
+# Check on option '-V'; if set print the corresponding output and leave.
 #
 # Globals: @ARGV, $Display{MODE}, $Display{PROG},
 #          $Display{ARGS}, $groggy,  $modefile, $addopts
index 02a4afad77f10606d8be4e5afefe60b6957a2f0a..a79368cd1af9684c40346d5d6f887e1e37a71ca9 100644 (file)
@@ -5,23 +5,23 @@
 # Source file position: <groff-source>/contrib/groffer/man.pl
 # Installed position: <prefix>/lib/groff/groffer/man.pl
 
-# Copyright (C) 2006-201 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `groffer', which is part of `groff'.
+# This file is part of 'groffer', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' 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.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see
+# along with this program.  If not, see
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 ########################################################################
@@ -148,7 +148,7 @@ sub is_man {
   my $n = @_;
   die "is_man(): one argument is needed, you used $n;"
     unless $n == 1;
-  die "is_man(): the argument is not a hash reference `$_[0]';"
+  die "is_man(): the argument is not a hash reference '$_[0]';"
     if ref($_[0]) ne 'HASH';
   die 'is_man(): temporary directory is not set;' unless $main::tmpdir;
   die 'is_man(): man_setup() must be run first;' unless $main::Man{'IS_SETUP'};
@@ -207,11 +207,11 @@ sub man_get {
   my $n = @_;
   die "man_get(): one argument is needed, you used $n;"
     unless $n == 1;
-  die "man_get(): the argument is not a hash reference `$_[0]';"
+  die "man_get(): the argument is not a hash reference '$_[0]';"
     if ref($_[0]) ne 'HASH';
   die "man_get(): is_man() must be run first on the argument;"
     unless $main::Manspec;
-  die "man_get(): wrong hash reference `$_[0]', no 'name' key;"
+  die "man_get(): wrong hash reference '$_[0]', no 'name' key;"
     unless exists $_[0]->{'name'};
 
   my ($name, $sec, $ext, $f, $path);
@@ -334,15 +334,15 @@ sub man_get {
 #           $main::Man{SEC}, $main::Man{ALL}
 #   in/out: $main::Man{ENABLE}
 #
-# The precedence for the variables related to `man' is that of GNU
-# `man', i.e.
+# The precedence for the variables related to 'man' is that of GNU
+# 'man', i.e.
 #
 # $LANG; overridden by
 # $LC_MESSAGES; overridden by
 # $LC_ALL; this has the same precedence as
 # $MANPATH, $MANSEC, $PAGER, $SYSTEM; overridden by
 # $MANOPT; overridden by
-# the groffer command line options.
+# the groffer command-line options.
 #
 # $MANROFFSEQ is ignored because grog determines the preprocessors.
 #
@@ -462,7 +462,7 @@ sub man_setup {
 # Globals:
 #   in:     $main::Man{SYS}: a list of names of operating systems.
 #           $main::Man{LANG} and $main::Man{LANG2}: each a single name
-#   in/out: @{$main::Man{PATH}}: list of directories which shall have the `man?'
+#   in/out: @{$main::Man{PATH}}: list of directories which shall have the 'man?'
 #           subdirectories.
 #
 sub manpath_add_lang_sys {
@@ -512,7 +512,7 @@ sub manpath_add_lang_sys {
 #
 # Determine basic search path for man pages from $PATH.
 #
-# Return:    `1' if a valid man path was retrieved.
+# Return:    '1' if a valid man path was retrieved.
 # Output:    none
 # Globals:
 #   in:  $PATH
@@ -587,7 +587,7 @@ sub special_setup {
 ##########
 # whatis_filename(<filename>)
 #
-# Interpret <filename> as a man page and display its `whatis'
+# Interpret <filename> as a man page and display its 'whatis'
 # information as a fragment written in the groff language.
 #
 # Globals:  in: $main::Opt{'WHATIS'}, $main::Special_Setup, $main::Special_Filespec,
@@ -628,7 +628,7 @@ sub whatis_filename {
     }
   }
 
-  # traditional man style; grep the line containing `.TH' macro, if any
+  # traditional man style; grep the line containing '.TH' macro, if any
   my @catz = &cat_z($_[0]);
   my $res;
   my $test;
@@ -640,7 +640,7 @@ sub whatis_filename {
   }                            # foreach (@catz)
 ### whatis_filename()
   if ($test) {                 # traditional man style
-    # get the first line after the first `.SH' macro before the next `.SH'
+    # get the first line after the first '.SH' macro before the next '.SH'
     my $test1;
     foreach (@catz) {
       if ($test1) {
@@ -675,7 +675,7 @@ sub whatis_filename {
     return 1;
   }                            # if ($test)
 
-  # mdoc style (BSD doc); grep the line containing `.Nd' macro, if any
+  # mdoc style (BSD doc); grep the line containing '.Nd' macro, if any
   foreach (@catz) {
     if (/^[\.']\s*Nd\s/) {             # BSD doc style
       $res =~ s/^(.*)$/$name ($section) \\[em] $1/;
diff --git a/contrib/groffer/roff2.1.man b/contrib/groffer/roff2.1.man
new file mode 100644 (file)
index 0000000..6013b58
--- /dev/null
@@ -0,0 +1,229 @@
+.TH roff2@ROFF2MODE@ @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+roff2@ROFF2MODE@ \- transform roff code into @ROFF2MODE@ mode
+.
+.\" roff2@ROFF2MODE@.1 - man page for roff2@ROFF2MODE@ (section 1).
+.
+.\" Source file position: <groff_source_top>/contrib/groffer/roff2.man
+.\" Installed position:   $prefix/share/man/man1/roff2@ROFF2MODE@.1
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2006-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groffer, which is part of GNU groff, a free
+.\" software project.
+.\"
+.\" You can redistribute it and/or modify it under the terms of the GNU
+.\" General Public License version 2 (GPL2) as published by the Free
+.\" Software Foundation.
+.\"
+.\" The license text is available in the internet at
+.\" <http://www.gnu.org/licenses/gpl-2.0.html>.
+.
+.
+.\" ====================================================================
+.\" Characters
+.\" ====================================================================
+.
+.\" Ellipsis ...
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
+.\" called with \*(EL
+.
+.
+.\" ====================================================================
+.SH "SYNOPSIS"
+.\" ====================================================================
+.
+.SY roff2@ROFF2MODE@
+.RI [ groffer-option
+\*(EL]
+.OP \-\-
+.RI [ filespec
+\*(EL]
+.YS
+.
+.SY roff2@ROFF2MODE@
+.B \-h
+.SY roff2@ROFF2MODE@
+.B \-\-help
+.YS
+.
+.SY roff2@ROFF2MODE@
+.B \-v
+.SY roff2@ROFF2MODE@
+.B \-\-version
+.YS
+.
+.P
+The options
+.B \-v
+and
+.B \%\-\-version
+print the version information of the program to standard output and exit.
+.
+The options
+.B \-h
+and
+.B \-\-help
+print a usage information of the program to standard output and stop
+the program instantly.
+.
+.
+.P
+All other options are assumed to be
+.B \%groffer
+options.
+.
+They are internally passed to
+.BR \%groffer .
+They override the behavior of the program.
+.
+The options are optional, they can be omitted.
+.
+.
+.P
+The
+.I \%filespec
+arguments correspond to the
+.I \%filespec
+arguments of
+.BR \%groffer .
+So they are either the names of existing, readable files or
+.B \-
+for standard input, or the name of a man page or a
+.BR \%groffer (@MAN1EXT@)
+man page search pattern.
+.
+If no
+.I \%filespec
+is specified standard input is assumed automatically.
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.
+.B \%roff2@ROFF2MODE@
+transforms
+.I roff
+code into
+.ie '@ROFF2MODE@'x' \{\
+.  I X
+mode corresponding to the
+.  I groff
+devices
+.  BR X *;
+this mode is suitable for
+.  BR \%gxditview (@MAN1EXT@).
+.\}
+.el \{\
+.  I \%@ROFF2MODE@
+mode.
+.\}
+.
+Print the result to standard output.
+.
+.
+.P
+There are more of these programs for generating other formats of
+.I \%roff
+input.
+.
+.if !'@ROFF2MODE@'dvi' \{\
+.  TP
+.  BR \%roff2dvi (@MAN1EXT@)
+is for
+.  I dvi
+mode.
+.\}
+.
+.if !'@ROFF2MODE@'html' \{\
+.  TP
+.  BR \%roff2html (@MAN1EXT@)
+generates
+.  I HTML
+output.
+.\}
+.
+.if !'@ROFF2MODE@'pdf' \{\
+.  TP
+.  BR \%roff2pdf (@MAN1EXT@)
+outputs
+.  I pdf
+mode.
+.\}
+.
+.if !'@ROFF2MODE@'ps' \{\
+.  TP
+.  BR \%roff2ps (@MAN1EXT@)
+prints
+.  I \%PostScript
+format to standard output.
+.\}
+.
+.if !'@ROFF2MODE@'text' \{\
+.  TP
+.  BR \%roff2text (@MAN1EXT@)
+generates text output in the
+.  B groff
+device
+.  IR latin1 .
+.\}
+.
+.if !'@ROFF2MODE@'x' \{\
+.  TP
+.  BR \%roff2x (@MAN1EXT@)
+prints the output in the
+.  B groff
+device
+.  B X
+that is suitable for programs like
+.  BR \%gxditview (@MAN1EXT@)
+or
+.  BR \%xditview (1).
+.\}
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.B roff2@ROFF2MODE@
+was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR \%groff (@MAN1EXT@),
+.BR \%groffer (@MAN1EXT@),
+.if !'@ROFF2MODE@'dvi' \
+.  BR \%roff2dvi (@MAN1EXT@),
+.if !'@ROFF2MODE@'html' \
+.  BR \%roff2html (@MAN1EXT@),
+.if !'@ROFF2MODE@'pdf' \
+.  BR \%roff2pdf (@MAN1EXT@),
+.if !'@ROFF2MODE@'ps' \
+.  BR \%roff2ps (@MAN1EXT@),
+.if !'@ROFF2MODE@'text' \
+.  BR \%roff2text (@MAN1EXT@),
+.if !'@ROFF2MODE@'x' \
+.  BR \%roff2x (@MAN1EXT@),
+.BR \%gxditview (@MAN1EXT@).
+.
+.
+.\" ====================================================================
+.\" Emacs settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/groffer/roff2.man b/contrib/groffer/roff2.man
deleted file mode 100644 (file)
index 17d094b..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-.TH roff2@ROFF2MODE@ @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-roff2@ROFF2MODE@ \- transform roff code into @ROFF2MODE@ mode
-.
-.\" roff2@ROFF2MODE@.1 - man page for roff2@ROFF2MODE@ (section 1).
-.
-.\" Source file position: <groff_source_top>/contrib/groffer/roff2.man
-.\" Installed position:   $prefix/share/man/man1/roff2@ROFF2MODE@.1
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2006-2014 Free Software Foundation, Inc.
-
-This file is part of groffer, which is part of GNU groff, a free
-software project.
-
-You can redistribute it and/or modify it under the terms of the GNU
-General Public License version 2 (GPL2) as published by the Free
-Software Foundation.
-
-The license text is available in the internet at
-.UR http://www.gnu.org/licenses/gpl-2.0.html
-.UE .
-..
-.
-.de au
-This file was written by
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Characters
-.\" --------------------------------------------------------------------
-.
-.\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
-.\" called with \*(EL
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SYNOPSIS"
-.\" --------------------------------------------------------------------
-.
-.SY roff2@ROFF2MODE@
-.OP \& "\%groffer_option \*(EL"
-.OP \-\-
-.OP \& "\%filespec \*(EL"
-.YS
-.
-.SY roff2@ROFF2MODE@
-.BR \-h | \-\-help
-.YS
-.
-.SY roff2@ROFF2MODE@
-.BR \-v | \-\-version
-.YS
-.
-.P
-The options
-.B \-v
-and
-.B \%\-\-version
-print the version information of the program to standard output and exit.
-.
-The options
-.B \-h
-and
-.B \-\-help
-print a usage information of the program to standard output and stop
-the program instantly.
-.
-.
-.P
-All other options are assumed to be
-.B \%groffer
-options.
-.
-They are internally passed to
-.BR \%groffer .
-They override the behavior of the program.
-.
-The options are optional, they can be omitted.
-.
-.
-.P
-The
-.I \%filespec
-arguments correspond to the
-.I \%filespec
-arguments of
-.BR \%groffer .
-So they are either the names of existing, readable files or
-.B \-
-for standard input, or the name of a man page or a
-.BR \%groffer (@MAN1EXT@)
-man page search pattern.
-.
-If no
-.I \%filespec
-is specified standard input is assumed automatically.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.
-.B \%roff2@ROFF2MODE@
-transforms
-.I roff
-code into
-.ie '@ROFF2MODE@'x' \{\
-.  I X
-mode corresponding to the
-.  I groff
-devices
-.  BR X *;
-this mode is suitable for
-.  BR \%gxditview (@MAN1EXT@).
-.\}
-.el \{\
-.  I \%@ROFF2MODE@
-mode.
-.\}
-.
-Print the result to standard output.
-.
-.
-.P
-There are more of these programs for generating other formats of
-.I \%roff
-input.
-.
-.if !'@ROFF2MODE@'dvi' \{\
-.  TP
-.  BR \%roff2dvi (@MAN1EXT@)
-is for
-.  I dvi
-mode.
-.\}
-.
-.if !'@ROFF2MODE@'html' \{\
-.  TP
-.  BR \%roff2html (@MAN1EXT@)
-generates
-.  I html
-output.
-.\}
-.
-.if !'@ROFF2MODE@'pdf' \{\
-.  TP
-.  BR \%roff2pdf (@MAN1EXT@)
-outputs
-.  I pdf
-mode.
-.\}
-.
-.if !'@ROFF2MODE@'ps' \{\
-.  TP
-.  BR \%roff2ps (@MAN1EXT@)
-prints
-.  I \%PostScript
-format to standard output.
-.\}
-.
-.if !'@ROFF2MODE@'text' \{\
-.  TP
-.  BR \%roff2text (@MAN1EXT@)
-generates text output in the
-.  B groff
-device
-.  IR latin1 .
-.\}
-.
-.if !'@ROFF2MODE@'x' \{\
-.  TP
-.  BR \%roff2x (@MAN1EXT@)
-prints the output in the
-.  B groff
-device
-.  B X
-that is suitable for programs like
-.  BR \%gxditview (@MAN1EXT@)
-or
-.  BR \%xditview (1).
-.\}
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR \%groff (@MAN1EXT@),
-.BR \%groffer (@MAN1EXT@),
-.if !'@ROFF2MODE@'dvi' \
-.  BR \%roff2dvi (@MAN1EXT@),
-.if !'@ROFF2MODE@'html' \
-.  BR \%roff2html (@MAN1EXT@),
-.if !'@ROFF2MODE@'pdf' \
-.  BR \%roff2pdf (@MAN1EXT@),
-.if !'@ROFF2MODE@'ps' \
-.  BR \%roff2ps (@MAN1EXT@),
-.if !'@ROFF2MODE@'text' \
-.  BR \%roff2text (@MAN1EXT@),
-.if !'@ROFF2MODE@'x' \
-.  BR \%roff2x (@MAN1EXT@),
-.BR \%gxditview (@MAN1EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHOR"
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index d8dad3f21bd9187d1cdcf527df48306b0da0dbcb..cf5c5834da4b8092fc1237a401f05b3930d5035e 100755 (executable)
@@ -5,23 +5,23 @@
 # Source file position: <groff-source>/contrib/groffer/roff2.pl
 # Installed position: <prefix>/bin/roff2*
 
-# Copyright (C) 2006-201 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `groffer', which is part of `groff'.
+# This file is part of 'groffer', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' 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 3 of the License, or
 # (at your option) any later version.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see
+# along with this program.  If not, see
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 ########################################################################
@@ -197,12 +197,12 @@ usage: $Name [option]... [--] [filespec]...
 -h | --help     print usage information
 -v | --version  print version information
 
-All other options are arbitrary options of `groffer'; the options
+All other options are arbitrary options of 'groffer'; the options
 override the behavior of this program.
 
-filespec's are the same as in `groffer': either the names of existing,
-readable files or `-' for standard input or a search pattern for man
-pages.  No `filespec' assumes standard input automatically.
+filespec's are the same as in 'groffer': either the names of existing,
+readable files or '-' for standard input or a search pattern for man
+pages.  No 'filespec' assumes standard input automatically.
 EOF
 }
 
@@ -213,10 +213,10 @@ usage: $Name [option]... [--] [filespec]...
 -h | --help     print usage information
 -v | --version  print version information
 
-No other options are allowed because `groffer' is not available.
+No other options are allowed because 'groffer' is not available.
 
-The only `filespec's allowed are the names of existing, readable files
-or `-' for standard input.  No `filespec' assumes standard input
+The only 'filespec's allowed are the names of existing, readable files
+or '-' for standard input.  No 'filespec' assumes standard input
 automatically.
 EOF
 }
index 682f01173beb0f29e214d49881273e5e6bb6c940..b3b77e905f84527714aa4a621e2ab3608df88676 100644 (file)
@@ -5,23 +5,23 @@
 # Source file position: <groff-source>/contrib/groffer/split_env.sh
 # Installed position: <prefix>/lib/groff/groffer/split_env.sh
 
-# Copyright (C) 2006-2014 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `groffer', which is part of `groff'.
+# This file is part of 'groffer', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' 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 3 of the License, or
 # (at your option) any later version.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see
+# along with this program.  If not, see
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 ########################################################################
index 3c17a87f8b7c6cfc5239501e4969d2d9e28079af..a3d6b871b1e4a343eee369affd5df91afae01068 100644 (file)
@@ -5,23 +5,25 @@
 # Source file position: <groff-source>/contrib/groffer/subs.pl
 # Installed position: <prefix>/lib/groff/groffer/subs.pl
 
-# Copyright (C) 2006-201 Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `groffer', which is part of `groff'.
+# Last update: 27 Aug 2015
 
-# `groff' is free software; you can redistribute it and/or modify it
+# This file is part of 'groffer', which is part of 'groff'.
+
+# 'groff' 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.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see
+# along with this program.  If not, see
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 ########################################################################
@@ -46,7 +48,7 @@ sub cat_z {
     unless $n == 1;
 
   my $file = $_[0];
-  die "cat_z(): `$file' is not a readable file;" unless -f $file && -r $file;
+  die "cat_z(): '$file' is not a readable file;" unless -f $file && -r $file;
   return () if -z $file;
 
   my @res;
@@ -57,7 +59,7 @@ sub cat_z {
        @res = `bzip2 -c -d $file 2>$main::Dev_Null`;
        return @res;
       }
-      # if not compressed with gz, gzip will act like `cat'
+      # if not compressed with gz, gzip will act like 'cat'
       @res = `gzip -c -d -f $file 2>$main::Dev_Null`;
       return @res;
     }
@@ -525,8 +527,8 @@ on-the-fly with all formats that gzip can handle.
   "name.n"     man page "name" in section "n"
   "n name"     man page "name" in section "n"
   "name"       man page "name" in first section found
-where `section' is a single character out of [1-9on], optionally followed
-by some more letters that are called the `extension'.
+where 'section' is a single character out of [1-9on], optionally followed
+by some more letters that are called the 'extension'.
 
 -h --help         print this usage message.
 -T --device=name  pass to groff using output device "name".
@@ -556,7 +558,7 @@ The most important groffer long options are
 --help         display this helping output.
 --html         display in a web browser.
 --man          check file parameters first whether they are man pages.
---mode=auto|dvi|groff|html|pdf|ps|source|text|tty|utf8|www|x|X
+--mode=auto|dvi|groff|html|pdf|ps|source|text|tty|utf8|www|x|X|xhtml
                choose display mode.
 --no-man       disable man-page facility.
 --no-special   disable --all, --apropos*, and --whatis
@@ -572,6 +574,7 @@ The most important groffer long options are
 --whatis       display the file name and description of man pages
 --www          same as --html.
 --x --X                display with "gxditview" using an X* device.
+--xhtml                display html in XML mode using a web browser.
 
 The usual X Windows toolkit options transformed into GNU long options:
 --background=color, --bd=size, --bg=color, --bordercolor=color,
@@ -594,7 +597,7 @@ EOF
 # option.  The old options are only ignored:
 # --dvi-viewer=prog choose the viewer program for dvi mode.
 # --html-viewer=program
-#                  choose the web browser for html mode.
+#                  choose the web browser for html or xhtml mode.
 # --pdf-viewer=prog choose the viewer program for pdf mode.
 # --ps-viewer=prog  choose the viewer program for ps mode.
 # --tty-viewer=prog select a pager for tty mode; same as --pager.
@@ -656,7 +659,7 @@ EOF
 # in $PATH.
 #
 # Arguments : 1, <program> can have spaces and arguments.
-# Return    : a hash with `dir', `file', `fullname', `args' if
+# Return    : a hash with 'dir', 'file', 'fullname', 'args' if
 #             argument exists or is a program in $PATH, empty hash else.
 #
 sub where_is_prog {
@@ -749,7 +752,7 @@ sub where_is_prog {
     my @baseargs = ($n);
     while (@base) {
       my $base = join(' ', @base);
-      foreach my $d (@maon::Path) {
+      foreach my $d (@main::Path) {
        my $file = File::Spec->catfile($d, $base);
        if (-f $file && -x $file) {
          my $baseargs = join(' ', @baseargs);
index f696ef4dd35a90458d6473723ef3acdddc6a93d5..001598196c98d71fce1b43f60ddf16aef6c72fc3 100644 (file)
@@ -5,30 +5,30 @@
 # Source file position: <groff-source>/contrib/groffer/version.sh
 # Installed position: <prefix>/lib/groff/groffer/version.sh
 
-# Copyright (C) 2001-201 Free Software Foundation, Inc.
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
 # Written by Bernd Warken <groff-bernd.warken-72@web.de>.
 
-# This file is part of `groffer', which is part of `groff'.
+# This file is part of 'groffer', which is part of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' 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.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ########################################################################
 
 export _PROGRAM_VERSION;
-_PROGRAM_VERSION='2.2.5';
+_PROGRAM_VERSION='2.3.0';
 
 # this setting of the groff version is only used before make is run,
 # otherwise @VERSION@ will set it, see groffer.sh.
 export _GROFF_VERSION_PRESET;
-_GROFF_VERSION_PRESET='1.22.3';
+_GROFF_VERSION_PRESET='1.22.4';
index b9a5935c8c2c40292aacde918e3bfcefb837084e..431db457516cd32f48315763fd7542dfbe212652 100644 (file)
@@ -1,3 +1,144 @@
+2018-12-06  Ingo Schwarze  <schwarze@openbsd.org>
+
+       * examples/fonts_n.in, examples/fonts_x.in:
+         Make the shell script in the .pso request more portable:
+         1. POSIX requires "echo -n" to print "-n" followed by
+            a newline character, so use printf(1) instead.
+         2. According to POSIX, behaviour of tr(1) is undefined
+            if string2 contains fewer characters than string1,
+            and on Oracle Solaris, the excess characters in string1
+            are not translated.  So make sure string2 contains
+            a sufficient number of characters.
+
+2018-12-05  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Skip tests if needed config is missing.
+
+       * examples/test-hdtbl.sh.in: exit 77 (indicates automake
+       to skip the result) if 'gs' is missing.
+
+       * hdtbl.am: flag correctly test program generation.
+
+2018-11-25  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Clean hdtbl.am
+
+       * hdtbl.am (MOSTLYCLEANFILES): Remove 'hdmisc.tmac-s'
+       and 'hdtbl.tmac-s' (these files are no longer present).
+
+       Fixes https://savannah.gnu.org/bugs/index.php?55083, reported by
+       Bjarni Ingi Gislason <bjarniig@rhi.hi.is>.
+
+2018-11-13  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       Don't clean other people's unit tests.
+
+       * hdtbl.am: test-hdtbl.sh is generated from an .in file,
+       so while we can add it to $(TESTS), we shouldn't then add
+       $(TESTS) to $(MOSTLYCLEANFILES) or we will clobber all tests
+       that ever get defined.  This clobbered gdiffmk's test script on
+       in-tree builds.  Give it its own variable, $(hdtbl_TESTS).
+       Now it clobbers no more.
+
+       Fixes <https://savannah.gnu.org/bugs/index.php?55020>.
+
+2018-11-12  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * hdtbl.am: Remove examples/test-hdtbl.sh on 'make distclean'.
+
+2018-11-07  Bertrand Garrigues <bertrand.garrigues@laposte.net>
+
+       Add a sanity check on 2 examples.
+
+       * examples/test-hdtbl.sh.in: new test script that uses 'gs'
+       to check the number of pages of 'fonts_x.ps' and 'fonts_n.ps'.
+
+       * hdtbl.am: connect 'test-hdtbl.sh' to 'make check'
+
+2018-08-09  Ingo Schwarze  <schwarze@openbsd.org>
+
+       * examples/common.roff: Remove more dead code
+         since the date and time are no longer used.
+
+       Reported by Bjarni Ingi Gislason in Savannah bug #54461.
+
+2018-08-09  Ingo Schwarze  <schwarze@openbsd.org>
+
+       * examples/common.roff, examples/col_rowspan_colors.roff,
+         examples/short_reference.roff: do forgotten renamings .pv -> .t*pv
+
+       Fixing it improves the formatting of all hdtbl examples.
+       Reported by Bjarni Ingi Gislason in Savannah bug #54470.
+
+2018-08-04  Ingo Schwarze  <schwarze@openbsd.org>
+
+       * examples/*: delete the date and time macros
+       * examples/hdtbl.am: run groff without -U option
+
+2018-03-11  Colin Watson  <cjwatson@debian.org>
+
+       Remove unnecessary randomness from example output.
+
+       The examples don't need good randomness, as they're only
+       example output; removing the process ID from consideration
+       allows better integration with reproducible builds.
+
+       * examples/common.roff (random-s1): Remove process ID.
+
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * hdtbl.am (.roff.ps, .in.roff): Use $(GROFF_V) and $(AM_V_GEN).
+
+2017-11-30  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * examples/common.roff:
+       * examples/fonts_n.in:
+       * examples/fonts_x.in:
+       Make writers to stderr identify themselves.
+
+2017-11-19  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * examples/*.roff: Seed RNG.
+
+       * examples/col_rowspan_colors.roff:
+       * examples/color_boxes.roff:
+       * examples/color_nested_tables.roff:
+       * examples/color_table_cells.roff:
+       Support reproducible builds by seeding hdtbl's random
+       number generator (in examples/common.roff).
+
+       Fix issue https://savannah.gnu.org/bugs/?52462.
+
+2017-11-01  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       hdtbl.tmac-u: Fix ignored escape sequence.
+
+       The escape '\c' ignores everything after it, except "\R...".
+
+       Fix bug https://savannah.gnu.org/bugs/?51609.
+
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * groff_hdtbl.7.man: Rename `groff_hdtbl.man'.
+
+       * hdtbl.am: Include renaming.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * hdtbl.am: Add `Last update'.  Setup Emacs mode.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+       Fix Savannah bug #44798.
+
+       * examples/fonts_n.in, examples/fonts_x.in: Use @EGREP@.
+
+       * hdtbl.am (.in.roff): Handle @EGREP@.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+       * groff_hdtbl.man: Make it work in compatibility mode.
+
 2013-09-03  Bernd Warken  <groff-bernd.warken-72@web.de>
 
        * all files in groff_hdtbl: Copying and Emacs setup.
 
 2012-09-20  Werner LEMBERG  <wl@gnu.org>
 
-       Simplify enviroment handling.
+       Simplify environment handling.
 
        Suggested by Ivan Shmakov <oneingray@gmail.com>.
 
        * examples/common.roff, examples/fonts_n.in, examples/fonts_x.in:
        s/bash/sh/.
 
-2010-02-09  Werner LEMBEARG  <wl@gnu.org>
+2010-02-09  Werner LEMBERG  <wl@gnu.org>
 
        Make example compilation work again if srcdir != builddir.
 
 2006-10-23  Werner LEMBERG  <wl@gnu.org>
 
        * hdtbl.tmac (\n[t*#]): Initialize.
-       (TBL): Don't inialize `\*[width]'.
+       (TBL): Don't initialize `\*[width]'.
        Add validity checks for all keywords.
        (TD): Add validity checks for `rowspan' and `colspan' keywords.
        (t*cl): Add validity checks for cell widths.
 
 2006-06-04  Werner LEMBERG  <wl@gnu.org>
 
-       * hdbtl.tmac: Improve error messages.  In particular, handle
+       * hdtbl.tmac: Improve error messages.  In particular, handle
        singular and plural correctly by using a pseudo array `nth-{1,2,3}'.
 
        * examples/rainbow.roff: Add copyright notice.  Formatting.
        * Import of hdtbl 0.91 (with some further modifications).  Still
        many rough edges.
 
-Copyright 2006, 2008-2014
-  Free Software Foundation, Inc.
+________________________________________________________________________
+
+Copyright 2006-2018 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -319,5 +461,6 @@ notice and this notice are preserved.
 
 Local Variables:
 version-control: never
+mode: change-log
 coding: latin-1
 End:
diff --git a/contrib/hdtbl/Makefile.sub b/contrib/hdtbl/Makefile.sub
deleted file mode 100644 (file)
index 149311d..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-# Copyright (C) 2006-2014  Free Software Foundation, Inc.
-#      Written by Werner Lemberg (wl@gnu.org)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-
-# These may be overridden if cross-compiling.
-GROFFBIN=$(top_builddir)/src/roff/groff/groff
-GROFF_BIN_PATH=`echo $(groff_bin_dirs) | sed -e 's|  *|$(SH_SEP)|g'`
-
-groff_bin_dirs=\
-  $(top_builddir)/src/roff/groff \
-  $(top_builddir)/src/roff/troff \
-  $(top_builddir)/src/preproc/eqn \
-  $(top_builddir)/src/preproc/pic \
-  $(top_builddir)/src/preproc/tbl \
-  $(top_builddir)/src/devices/grops
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac -M$(srcdir)
-PFLAG=-t -p -e -U
-
-GROFF=\
-  GROFF_COMMAND_PREFIX= \
-  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-  $(GROFFBIN) $(FFLAG) $(TFLAG) $(PFLAG)
-
-MAN7=\
-  groff_hdtbl.n
-
-# These files are processed with `strip.sed'.
-STRIPFILES=\
-  hdtbl.tmac \
-  hdmisc.tmac
-
-# These files are handled by the `.in.roff' rule.
-GENFILES=\
-  examples/fonts_n.roff \
-  examples/fonts_x.roff
-
-EXAMPLEFILES=\
-  examples/common.roff \
-  examples/chess_board.roff \
-  examples/color_boxes.roff \
-  examples/color_nested_tables.roff \
-  examples/color_table_cells.roff \
-  examples/color_transitions.roff \
-  examples/col_rowspan_colors.roff \
-  examples/mixed_pickles.roff \
-  examples/rainbow.roff \
-  examples/short_reference.roff
-
-PROCESSEDEXAMPLEFILES=\
-  examples/chess_board.ps \
-  examples/color_boxes.ps \
-  examples/color_nested_tables.ps \
-  examples/color_table_cells.ps \
-  examples/color_transitions.ps \
-  examples/col_rowspan_colors.ps \
-  examples/fonts_n.ps \
-  examples/fonts_x.ps \
-  examples/mixed_pickles.ps \
-  examples/rainbow.ps \
-  examples/short_reference.ps
-
-EXAMPLEFILES_=`echo $(EXAMPLEFILES) | sed 's|examples/||g'`
-GENFILES_=`echo $(GENFILES) | sed 's|examples/||g'`
-PROCESSEDEXAMPLEFILES_=`echo $(PROCESSEDEXAMPLEFILES) | sed 's|examples/||g'`
-
-MOSTLYCLEANADD=\
-  gnu.eps \
-  $(PROCESSEDEXAMPLEFILES) \
-  $(GENFILES) \
-  examples/stamp \
-  stamp-strip \
-  hdmisc.tmac-s hdtbl.tmac-s
-
-RM=rm -f
-
-.SUFFIXES: .roff .in .ps
-
-.roff.ps:
-       $(GROFF) -Tps -dfontpath=$(top_srcdir)/font -dsopath=$(srcdir)/ \
-                -mhdtbl $< >$@
-
-.in.roff:
-       sed -e "s|@fontdir@|$(fontdir)|" $< >$@
-
-all: $(make_examples) stamp-strip
-
-.PHONY: examples
-examples: $(PROCESSEDEXAMPLEFILES)
-
-$(PROCESSEDEXAMPLEFILES): gnu.eps examples/stamp examples/common.roff
-
-gnu.eps:
-       if test -f $(top_srcdir)/doc/gnu.eps; then \
-         cp $(top_srcdir)/doc/gnu.eps . ; \
-       elif test -f $(top_builddir)/doc/gnu.eps; then \
-         cp $(top_builddir)/doc/gnu.eps . ; \
-       else \
-         xpmtoppm $(top_srcdir)/doc/gnu.xpm | pnmdepth 15 \
-           | $(pnmtops_nosetpage) -noturn -rle >$@ ; \
-       fi
-
-examples/stamp:
-       -test -d examples || $(mkinstalldirs) examples
-       touch $@
-
-stamp-strip: $(STRIPFILES)
-       for f in $(STRIPFILES); do \
-         $(RM) $$f-s; \
-         sed -f $(top_srcdir)/tmac/strip.sed $(srcdir)/$$f >$$f-s; \
-       done
-       touch $@
-
-$(GENFILES): examples/stamp
-
-install_data: install_always $(make_install_examples)
-
-install_always: $(STRIPFILES) $(GENFILES)
-       -test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
-       for f in $(STRIPFILES); do \
-         $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-         $(INSTALL_DATA) $$f-s $(DESTDIR)$(tmacdir)/$$f; \
-       done
-
-install_examples: install_always $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES) \
-                 gnu.eps stamp-strip
-       -test -d $(DESTDIR)$(exampledir)/hdtbl \
-         || $(mkinstalldirs) $(DESTDIR)$(exampledir)/hdtbl
-       for f in $(EXAMPLEFILES_); do \
-         $(RM) $(DESTDIR)$(exampledir)/hdtbl/$$f; \
-         $(INSTALL_DATA) $(srcdir)/examples/$$f \
-           $(DESTDIR)$(exampledir)/hdtbl/$$f; \
-       done
-       for f in $(PROCESSEDEXAMPLEFILES_) $(GENFILES_); do \
-         $(RM) $(DESTDIR)$(exampledir)/hdtbl/$$f; \
-         $(INSTALL_DATA) examples/$$f $(DESTDIR)$(exampledir)/hdtbl/$$f; \
-       done
-       $(INSTALL_DATA) gnu.eps $(DESTDIR)$(exampledir)/hdtbl/gnu.eps
-
-uninstall_sub: uninstall_always $(make_uninstall_examples)
-
-uninstall_always:
-       -for f in $(STRIPFILES); do $(RM) $(DESTDIR)$(tmacdir)/$$f; done
-
-uninstall_examples: uninstall_always
-       -for f in $(EXAMPLEFILES_) $(PROCESSEDEXAMPLEFILES_) $(GENFILES_); do \
-         $(RM) $(DESTDIR)$(exampledir)/hdtbl/$$f; \
-       done
-       $(RM) $(DESTDIR)$(exampledir)/hdtbl/gnu.eps
-       -test -d $(DESTDIR)$(exampledir)/hdtbl && \
-         rmdir $(DESTDIR)$(exampledir)/hdtbl
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index cca1c35cb59b8f04598cc9f7327cbdcf5fe963a2..ee5d36507fcef70e8401e6fe86de9b2af45a6193 100644 (file)
@@ -1,10 +1,9 @@
-.\" -*- mode: nroff -*-
 .ig
 chess_board.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2005-201 Free Software Foundation, Inc.
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -18,7 +17,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ..
 .
 .if !d sopath \
@@ -27,8 +26,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .so \*[sopath]examples/common.roff
 .
 .
-.time start
-.
 .nr *x 8
 .de r1
 .TR height=1.6c 
@@ -59,8 +56,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .PN 8 .TD ".nr *y +1" \\\\n(*y
 .TD
 .ETB
-.time
-.\"    466MHz Celeron CPU, 384MB RAM 
-.\"    WindowsXP/cygwin groff18.1:       1s
-.\"    WindowsXP/cygwin groff19.2:       4s
-.\"    Suse Linux 9.3 groff19.2:         1s
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 7f58b9183fa967fdad937bc62b47dcca2ce20301..9a42766059797c873a68de53d038ff6bef24bf49 100644 (file)
@@ -1,10 +1,9 @@
-.\" -*- mode: nroff -*-
 .ig
 col_rowspan_colors.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2005-201 Free Software Foundation, Inc.
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -18,7 +17,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ..
 .
 .if !d sopath \
@@ -26,8 +25,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .so \*[sopath]examples/common.roff
 .
-.time start
-.
+.\" Seed the random number generator for reproducible builds.
+.random-seed 131545532 19201711
 .de color#
 .nr # +1
 .random#
@@ -38,9 +37,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .nr # 0
 .color#
 .if \\n[t*cols\\n[t*#]]/2*2=\\n[t*cols\\n[t*#]] \{ .
-.   tmc \\n(.F:\\n(.c: cols was even (\\n[t*cols\\n[t*#]]), 
+.   tmc \\n(.F:\\n(.c: cols was even (\\n[t*cols\\n[t*#]]),
 .   nr t*cols\\n[t*#] +1
-.   tm  increased by one col to \\n[t*cols\\n[t*#]].
+.   tm1 " increased by one col to \\n[t*cols\\n[t*#]].
 .   t*cl \\*[width]
 .   ie "\\*[tal]"r" .nr in\\n[t*#] -\\*[width]\"    recalculate cell widths etc.
 .   el .if "\\*[tal]"c" .nr in\\n[t*#] -\\*[width]/2
@@ -55,7 +54,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .   color#
 .   ds html "".TR height=\\nW" ".TD colspan=\\nI bgc=c\\n#"
 .   color#
-.   as html " ".TD rowspan=\\nI bgc=c\\n#" 
+.   as html " ".TD rowspan=\\nI bgc=c\\n#"
 .   color#
 .   as html " ".TR height=\\nW" ".TD rowspan=\\nI bgc=c\\n#"
 .   color#
@@ -64,20 +63,24 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .t*P1 \\*[html]
 ..
 .
-.pv 1.2 1.2 "" x
+.t*pv 1.2 1.2 "" x
 .PN 10 Text before table.
 .in 1c
 .PN 8 Indented text before table.
 *** *** ***
 .TBL width=90% border=1n csp=1n cpd=1n bgc=wheat tal=c .TR .TD
-.TBL  border= cols=10 width=1c tal=c csp=0 cpd=0 \"cols must be odd
+.TBL  border= cols=11 width=1c tal=c csp=0 cpd=0 \"cols must be odd
 .CPTN val=b Randomly Colored Table Cells with Colspan/\%Rowspan
 .brt
-.ETB .ETB 
+.ETB .ETB
 .PN 15 Text after table.
-.time
-.date
-.\"    466MHz Celeron CPU, 384MB RAM 
-.\"    WindowsXP/cygwin groff18.1:      4s
-.\"    WindowsXP/cygwin groff19.2:      7s
-.\"    Suse Linux 9.3 groff19.2:        1s
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 0ce9507c84205a0ed807046a720b87b86a27fcea..ddb16669bd40be54339dfc946b718aab4798a069 100644 (file)
@@ -1,10 +1,9 @@
-.\" -*- mode: nroff -*-
 .ig
 color_boxes.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -18,7 +17,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ..
 .
 .if !d sopath \
@@ -26,7 +25,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .so \*[sopath]examples/common.roff
 .
-.time start
+.\" Seed the random number generator for reproducible builds.
+.random-seed 131545532 19201711
 .
 .H Horizontal Rules and Boxes .br with Randomly Colored Border and Background
 .PN 25 Text before horizontal rule.
@@ -44,8 +44,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .PN 15 Text after table.
 .TBL border=.5n bc=color1 bgc=color2 width=15c tal=c csp=.2n cpd=.3n .TR .TD .ETB
 .PN 25 Text after horizontal rule.
-.time
-.\"    466MHz Celeron CPU, 384MB RAM 
-.\"    WindowsXP/cygwin groff18.1:      10s
-.\"    WindowsXP/cygwin groff19.2:      14s
-.\"    Suse Linux 9.3 groff19.2:         1s
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index e469cf433219b67246e43405caf9e9c1664d0c44..cb0e9c42786638f1e47e0c1e5a4b2877441bc58b 100644 (file)
@@ -1,11 +1,10 @@
-.\" -*- mode: nroff -*-
 .ig
 
 color_nested_tables.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2005-201 Free Software Foundation, Inc.
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -19,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ..
 .
@@ -29,7 +28,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .so \*[sopath]examples/common.roff
 .
 .
-.time start
+.\" Seed the random number generator for reproducible builds.
+.random-seed 131545532 19201711
 .
 .PN 15 Text before first table.
 .nr # 0 1
@@ -41,12 +41,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .PN 39 .ETB
 .PN 15 Text after first table.
 .
-.time
-.
 .bp
 .
-.time start
-.
 .PN 15 Text before second table.
 *****
 .nr # 0 1
@@ -57,9 +53,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .PN 39 .ETB
 .PN 25 Text after second table.
 .
-.time
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
 .
-.\"    466MHz Celeron CPU, 384MB RAM 
-.\"    WindowsXP/cygwin groff18.1:      9/9s
-.\"    WindowsXP/cygwin groff19.2:    14/14s
-.\"    Suse Linux 9.3 groff19.2:        1/1s
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 7a482f3891e8647774bc6ab25cea4147e55bf908..2f84b286e1f6458ecedac0a24e018da139cdfe06 100644 (file)
@@ -1,11 +1,10 @@
-.\" -*- mode: nroff -*-
 .ig
 
 color_table_cells.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -19,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ..
 .
@@ -28,7 +27,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .so \*[sopath]examples/common.roff
 .
-.time start
+.\" Seed the random number generator for reproducible builds.
+.random-seed 131545532 19201711
 .
 .H Horizontal Rules and Randomly Colored Table Cells
 .PN 15 Text before HR.
@@ -46,8 +46,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .PN 10 Text after table.
 .TBL border=.5n bc=c1 bgc=c2 width=15c tal=c csp=.2n cpd=.3n .TR .TD .ETB
 .PN 15 Text after HR.
-.time
-.\"    466MHz Celeron CPU, 384MB RAM 
-.\"    WindowsXP/cygwin groff18.1:      14s
-.\"    WindowsXP/cygwin groff19.2:      18s
-.\"    Suse Linux 9.3 groff19.2:         1s
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 91db3561e31b385e70d5f6732f8373dbe867db2e..27c1400e173dfb0b2ef164f9ada6782eddc76896 100644 (file)
@@ -1,11 +1,10 @@
-.\" -*- mode: nroff -*-
 .ig
 
 color_transitions.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2005-201 Free Software Foundation, Inc.
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -19,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ..
 .
@@ -28,8 +27,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .so \*[sopath]examples/common.roff
 .
-.time start
-.
 .de ctab
 .nr #cc 0
 .PN 21 ".nr #cc +.05f" ".defcolor \En[t*#] rgb \\$1 \\$2 \\$3" ".TBL border= csp=0 cpd=.5n bgc=\\\\n[t*#] bc=" .TR .TD
@@ -53,8 +50,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .xTD ".ctab 0+\En[#cc]u 1f-\En[#cc]u 1f-\En[#cc]u"\"   cyan   -> red
 .ETB 
 .PN 30 After table.
-.time
-.\"    466MHz Celeron CPU, 384MB RAM 
-.\"    WindowsXP/cygwin groff18.1:      3s
-.\"    WindowsXP/cygwin groff19.2:     20s
-.\"    Suse Linux 9.3 groff19.2         3s
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index ddb6d4acaf3762ac095203e5f4177b4599f1db6b..fa45674e77a2908969093bea622183ef98c670df 100644 (file)
@@ -1,11 +1,10 @@
-.\"    -*-     mode: nroff     -*-
 .ig
 
 common.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2010-201 Free Software Foundation, Inc.
+Copyright (C) 2010-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -19,11 +18,12 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ..
 .
 .
+.ds common common.roff\"               name for diagnostic messages
 .mso hdtbl.tmac\"                      load table macros
 .
 .\"    ******************************************************************
@@ -31,12 +31,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .\"    ******************************************************************
 .
 .\"    ******************************************************************
-.\"    **      some of the following macros use system commands        **
-.\"    **      and are therefore `unsafe': they need the `-U' argument **
-.\"    **      when calling groff/troff                                **
-.\"    ******************************************************************
-.
-.\"    ******************************************************************
 .\"    **              Header macro for the examples                   **
 .\"    ******************************************************************
 .de H
@@ -59,40 +53,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .
 .\"    ******************************************************************
-.\"    **      Utility macro for the date, requires UNIX date.         **
-.\"    **      after return string *date contains the date in the      **
-.\"    **      standard form of the Unix date-command,                 **
-.\"    **      for example "Sun Dec  5 22:27:57     2004"              **
-.\"    ******************************************************************
-.de date
-.  pso sh -c "echo -n .ds *date\ ;date"
-.  tm \\*[*date] ***
-..
-.
-.
-.\"    ******************************************************************
-.\"    **      Utility macro for time measurement, requires UNIX date  **
-.\"    **      .time s[tart]|[end]                                     **
-.\"    **              .time start:                                    **
-.\"    **                      reg *time gets the start-time (seconds) **
-.\"    **              .time [end]:                                    **
-.\"    **                      reg *time gets the difference of the    **
-.\"    **                              end- and start-time (seconds)   **
-.\"    ******************************************************************
-.de time
-.  ds * \\$1\"
-.  substring * 0 0
-.  ie "\\*[*]"s" \
-.    pso sh -c "echo -n .nr *time 0+;date +%s"
-.  el \{\
-.   pso sh -c "echo -n .nr *time -;date +%s"
-.   nr *time 0-\\n[*time]
-.   tm elapsed time: \\n[*time] seconds
-.  \}
-..
-.
-.
-.\"    ******************************************************************
 .\"    **              Perform n-times all the arbitrary arguments     **
 .\"    **              .PN n a2 a3 ...                                 **
 .\"    **                      PN is nestable                          **
@@ -111,16 +71,16 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .\"    Utility macro:  .d2x decimal_number [base [string_name]]
 .\"
-.\"            Convert `decimal_number' to another base `base' (in the
-.\"            range 1..16) and store the result in string `string_name'.
-.\"            If `base' is missing or empty, convert to a hexadecimal
-.\"            number.  If `string_name' is missing or empty, return value
-.\"            in string `hex#', otherwise return the value in both
-.\"            `string_name' and `hex#'.
+.\"            Convert 'decimal_number' to another base 'base' (in the
+.\"            range 1..16) and store the result in string 'string_name'.
+.\"            If 'base' is missing or empty, convert to a hexadecimal
+.\"            number.  If 'string_name' is missing or empty, return value
+.\"            in string 'hex#', otherwise return the value in both
+.\"            'string_name' and 'hex#'.
 .\"
 .\"            The base value 1 is handled specially: The returned
-.\"            string contains the character `|' `decimal_number' times
-.\"            (for example, input value 4 yields `||||').
+.\"            string contains the character '|' 'decimal_number' times
+.\"            (for example, input value 4 yields '||||').
 .ds d2x-0 0\"
 .ds d2x-1 1\"
 .ds d2x-2 2\"
@@ -141,8 +101,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .de d2x
 .  if !\B\a\\$1\a \{\
-.    tm \\n[.F]:\\n[.c]: invalid or missing first argument
-.    tm1 "     usage: `.d2x decimal_number [base [string_name]]'
+.    tmc \\*[common]: \\n[.F]:\\n[.c]: d2x: invalid or missing first
+.    tm argument
+.    tm \\*[common]: usage: '.d2x decimal_number [base [string_name]]'
 .    return
 .  \}
 .
@@ -156,10 +117,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .  ie !"\\$2"" \{\
 .    ie !\B\a\\$2\a \
-.      tm \\n[.F]:\\n[.c]: invalid base `\\$2'
+.      tm \\*[common]: \\n[.F]:\\n[.c]: d2x: invalid base '\\$2'
 .    el \
 .      ie ((\\$2 < 1) : (\\$2 > 16)) \
-.        tm \\n[.F]:\\n[.c]: invalid base `\\$2'
+.        tm \\*[common]: \\n[.F]:\\n[.c]: d2x: invalid base '\\$2'
 .      el \
 .        nr b# \\$2
 .  \}\}
@@ -198,7 +159,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .  if !"\\$3"" \{\
 .    ie !\A\a\\$3\a \
-.      tm \\n[.F]:\\n[.c]: invalid string name `\\$3'
+.      tm \\*[common]: \\n[.F]:\\n[.c]: d2x: invalid string name '\\$3'
 .    el \
 .      ds \\$3 \\*[hex#]\"
 .  \}
@@ -209,46 +170,35 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .\"                    .random-seed seed1 seed2
 .\"
 .\"            Return pseudo-random numbers in the range 0..0xFFFFFF,
-.\"            represented as the concatenation of `#' and six
-.\"            hexadecimal digits, in the string `#random'.  The
-.\"            macro `random-seed' can be used to set seed values,
+.\"            represented as the concatenation of '#' and six
+.\"            hexadecimal digits, in the string '#random'.  The
+.\"            macro 'random-seed' can be used to set seed values,
 .\"            which should be integers in the range 1..2147483562 and
-.\"            1..2147483398 for `seed1' and `seed2', respectively
+.\"            1..2147483398 for 'seed1' and 'seed2', respectively
 .\"            (the macro applies a modulo operation to assure this
-.\"            range).  If `random-seed' isn't called the registers
-.\"            `seconds', `minutes', `hours', `dy', `mo', `year', and
-.\"            `$$' are used to compute it.
+.\"            range).  If 'random-seed' isn't called the registers
+.\"            start at some constant, arbitrary values.
 .\"
 .\"            The used generator is presented in L'Ecuyer's 1988 paper
-.\"            `Efficient and Portable Combined Random Number
+.\"            'Efficient and Portable Combined Random Number
 .\"            Generators', which combines two Multiplicative Linear
 .\"            Congruential Generators (MLCGs) to achieve a period of
 .\"            2.3*10^18.
-.af hours 00
-.af minutes 00
-.af seconds 00
-.af year 0000
-.af mo 00
-.af dy 00
-.
-.ds random-s1 \n[minutes]\n[seconds]\n[$$]\n[hours]\"
-.\" prevent overflow
-.substring random-s1 0 8
-.
-.nr random-s1 (\*[random-s1] % 2147483562)
-.nr random-s2 \n[dy]\n[year]\n[mo]
-.
+.\"
+.\"            Since this just generates example output,
+.\"            we don't need good randomness.
 .
 .de random-seed
 .  if !(\\n[.$] == 2) \{\
-.    tm1 "random-seed: Invalid number of arguments.
-.    tm1 "             usage: `.random-seed seed1 seed2'
+.    tm \\*[common]: random-seed: Invalid number of arguments.
+.    tm \\*[common]: usage: '.random-seed seed1 seed2'
 .    return
 .  \}
 .
 .  nr random-s1 (\\$1 % 2147483562)
 .  nr random-s2 (\\$2 % 2147483398)
 ..
+.random-seed 131545532 19201711
 .
 .
 .de random#
@@ -286,7 +236,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .nr v \n[.v]
 .nr p \n[.p]
 .nr o \n[.o]
-.pv 1.2 1.2 "" X
 .nr l 6.6i                             \"      set text width
 .ll \n[t*l]u
 .nr o 2c                               \"      set offset
@@ -339,4 +288,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .if "\n[.M]"" \
 .  fcolor white
 .
-.\" EOF
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index e94ca72ba0df820444f493f67fc832fa18d6937d..76d66613bbb49caef028f3fd427443c86c44e0b9 100644 (file)
@@ -1,11 +1,10 @@
-.\"    -*-     mode: groff     -*-
 .ig
 
 font_n.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -19,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ..
 .
@@ -29,21 +28,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .\"    **      .fontdump [font1 font2 ...]                             **
 .\"    **              Print glyphs of font1, font2, ..., versus       **
 .\"    **              character code.                                 **
-.\"    **              `all' as fontname prints all fonts in the       **
-.\"    **              specified string `fontpath'.                    **
+.\"    **              'all' as fontname prints all fonts in the       **
+.\"    **              specified string 'fontpath'.                    **
 .\"    **              without arg: glyphs and codes of active font.   **
 .\"    ******************************************************************
 .
+.ds fonts_n fonts_n.roff\"             name for diagnostic messages
+.
 .if !d sopath \
 .  ds sopath
 .
 .so \*[sopath]examples/common.roff
 .
-.time start
-.
 .if !d fontpath \
 .  ds fontpath @fontdir@
 .
+.tm \*[fonts_n]: listing fonts in \*[fontpath]/dev\*[.T]
+.
 .de fontdump
 .  ie \\n[.$] \
 .    ds *args \\$*
@@ -51,9 +52,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .    ds *args \\n[.fn]
 .
 .  pso sh -c \
-       "echo -n .ds *f\ ; \
+       "printf '%s' '.ds *f ' ; \
         ls \\*[fontpath]/dev\*[.T] \
-        | tr '[:cntrl:]' ' '"
+        | tr '[:cntrl:]' '[ *]'"
 .  \"  This dummy line is necessary; the preceding line eats it.
 .
 .  while !"\\*[*args]"" \{\
@@ -76,13 +77,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .    ie (\\n[.y] > 18) \
 .      if !F \\*[*$1] \{\
-.        tm \\n[.F]:\\n[.c]: Font \\*[*$1] not found.
-.        continue 
+.        tm \\*[fonts_n]: \\n[.F]:\\n[.c]: Font \\*[*$1] not found.
+.        continue
 .      \}
 .    el \{\
 .      if !\\n[t*index] \{\
-.        tm \\n[.F]:\\n[.c]: Font \\*[*$1] not found.
-.        continue 
+.        tm \\*[fonts_n]: \\n[.F]:\\n[.c]: Font \\*[*$1] not found.
+.        continue
 .      \}
 .
 .      nr * \\n[.f]
@@ -97,22 +98,22 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .    if \\n[t*cptn] \
 .      bp
 .
-.    tm listing font `\\*[*$1]'...
+.    tm \\*[fonts_n]: listing font '\\*[*$1]'...
 .
 .    TBL border=.1n bc=red cpd=0 csp=.1n bgc=
 .      CPTN groff font \\*[*$1] \
             .br \
-            val=b ".pso grep -e internalname \\*[fontpath]/dev\*[.T]/\\*[*$1]"
+            val=b ".pso @EGREP@ internalname \\*[fontpath]/dev\*[.T]/\\*[*$1]"
 .      TR 
 .        TD
 .          TBL cols=12 border=.1n bc=red csp=.1n cpd=.2n fgc=red4 bgc=beige \
                hal=c fsz='1.2 1.2' fst=\\*[*$1]
 .            nr c# 0-1 1
 .            nr y# 0-1 1
-.            TR fst=HB fgc=blue 
-.              TD 
+.            TR fst=HB fgc=blue
+.              TD
 .                nr x# 0-1 1
-.                \" following 4 `PN's instead of 4 while-loops as in
+.                \" following 4 'PN's instead of 4 while-loops as in
 .                \" font_x.roff; short and easy to write, but a little
 .                \" bit slower.
 .              PN 10 .TD \
@@ -141,10 +142,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .fontdump all
 .
-.time
-.date
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
 .
-.\"    466MHz Celeron CPU, 384MB RAM 
-.\"    WindowsXP/cygwin groff18.1:     115s
-.\"    WindowsXP/cygwin groff19.2:     450s
-.\"    Suse Linux 9.3 groff19.2:        76s
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 72e3f2453a52ac2f5bfe1fe429e69badf8d0d04e..081c8c760d4a8f05c39ad06bc0879acf48baf5e8 100644 (file)
@@ -1,11 +1,10 @@
-.\"    -*-     mode: nroff     -*-
 .ig
 
 font_x.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -19,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ..
 .
@@ -29,21 +28,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .\"    **      .fontdump [font1 font2 ...]                             **
 .\"    **              Print glyphs of font1, font2, ..., versus       **
 .\"    **              character code.                                 **
-.\"    **              `all' as fontname prints all fonts in the       **
-.\"    **              specified string `fontpath'.                    **
+.\"    **              'all' as fontname prints all fonts in the       **
+.\"    **              specified string 'fontpath'.                    **
 .\"    **              without arg: glyphs and codes of active font.   **
 .\"    ******************************************************************
 .
+.ds fonts_x fonts_x.roff\"             name for diagnostic messages
+.
 .if !d sopath \
 .  ds sopath
 .
 .so \*[sopath]examples/common.roff
 .
-.time start
-.
 .if !d fontpath \
 .  ds fontpath @fontdir@
 .
+.tm \*[fonts_x]: listing fonts in \*[fontpath]/dev\*[.T]
+.
 .de fontdump
 .  ie \\n[.$] \
 .    ds *args \\$*
@@ -51,9 +52,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .    ds *args \\n[.fn]
 .
 .  pso sh -c \
-       "echo -n .ds *f\ ; \
+       "printf '%s' '.ds *f ' ; \
         ls \\*[fontpath]/dev\*[.T] \
-        | tr '[:cntrl:]' ' '"
+        | tr '[:cntrl:]' '[ *]'"
 .  \"  This dummy line is necessary; the preceding line eats it.
 .
 .  while !"\\*[*args]"" \{\
@@ -76,12 +77,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .    ie (\\n[.y] > 18) \
 .      if !F \\*[*$1] \{\
-.        tm \\n[.F]:\\n[.c]: Font \\*[*$1] not found.
+.        tm \\*[fonts_x]: \\n[.F]:\\n[.c]: Font \\*[*$1] not found.
 .        continue
 .      \}
 .    el \{\
 .      if !\\n[t*index] \{\
-.        tm \\n[.F]:\\n[.c]: Font \\*[*$1] not found.
+.        tm \\*[fonts_x]: \\n[.F]:\\n[.c]: Font \\*[*$1] not found.
 .        continue
 .      \}
 .
@@ -97,12 +98,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .    if \\n[t*cptn] \
 .      bp
 .
-.    tm listing font `\\*[*$1]'...
+.    tm \\*[fonts_x]: listing font '\\*[*$1]'...
 .
 .    TBL border=.1n bc=red cpd=0 csp=.1n bgc=
 .      CPTN groff font \\*[*$1] \
             .br \
-            val=b ".pso grep -e internalname \\*[fontpath]/dev\*[.T]/\\*[*$1]"
+            val=b ".pso @EGREP@ internalname \\*[fontpath]/dev\*[.T]/\\*[*$1]"
 .      TR
 .        TD
 .          TBL cols=18 border=.1n bc=red csp=.1n cpd=.2n fgc=red4 bgc=beige \
@@ -152,10 +153,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .fontdump all
 .
-.time
-.date
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
 .
-.\"    466MHz Celeron CPU, 384MB RAM
-.\"    WindowsXP/cygwin groff18.1:     107s
-.\"    WindowsXP/cygwin groff19.2:     390s
-.\"    Suse Linux 9.3 groff19.2:        66s
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index a21a807dd9230ab1e8436e13ea21dab7393fdbfd..190c86081b47c292495369f983fd9f10db141f90 100644 (file)
@@ -1,11 +1,10 @@
-.\"    -*-     mode: nroff     -*-
 .ig
 
 mixed_pickles.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -19,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ..
 .
@@ -28,8 +27,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .so \*[sopath]examples/common.roff
 .
-.time start
-.
 .H Table with Mixed Content: \
    .br \
    EPS Image, eqn Equation, tbl Table, and pic Picture
@@ -96,9 +93,12 @@ ellipse "PostScript"
 .      ETB
 .ETB
 .
-.time
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
 .
-.\"    466MHz Celeron CPU, 384MB RAM 
-.\"    WindowsXP/cygwin groff18.1:       1s
-.\"    WindowsXP/cygwin groff19.2:       2s
-.\"    Suse Linux 9.3 groff19.2:         1s
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index e90f87286ae93252f775273998802a079b4ee7f4..8c2553f865dacb6283b9678d5caf194b8d15a4b4 100644 (file)
@@ -1,11 +1,10 @@
-.\" -*- mode: nroff -*-
 .ig
 
 rainbow.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2005-201 Free Software Foundation, Inc.
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -19,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ..
 .
@@ -28,8 +27,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .so \*[sopath]examples/common.roff
 .
-.time start
-.
 .nr *n 25
 .nr *# 0 1
 .
@@ -55,12 +52,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .PN 6*\n[*n] .ETB
 .
-.time end
-.
 .bp
 .
-.time start
-.
 .nr *n 25
 .nr *# 0 1
 .
@@ -86,9 +79,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .PN 6*\n[*n] .ETB
 .
-.time end
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
 .
-.\"    466MHz Celeron CPU, 384MB RAM 
-.\"    WindowsXP/cygwin groff18.1:     11/10s
-.\"    WindowsXP/cygwin groff19.2:     57/55s
-.\"    Suse Linux 9.3 groff19.2:         8/8s
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index fa784c08489cb92a18c15adec267a8190edba93a..e608769e9774d92595d2203f7b34e6e7909e4e65 100644 (file)
@@ -1,11 +1,10 @@
-.\" -*- mode: nroff -*-
 .ig
 
 short_reference.roff
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2005-2014 Free Software Foundation, Inc.
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
 written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -19,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ..
 .
@@ -28,9 +27,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .
 .so \*[sopath]examples/common.roff
 .
-.time start
-.
-.pv 1.2 1.2 "" x
+.t*pv 1.2 1.2 "" x
 .H Short Reference for the HDtbl-Macros
 This Short Reference describes the Heidelberger Table Macros
 using the macros themselves.
@@ -59,7 +56,7 @@ using the macros themselves.
 .TD \&.TR \&.TD \&.TH \%.ETB cell content
 .TD \&.TD \&.TH \&.TR \%.ETB cell content
 .TR 
-.TD \&.TH .TD Begin table data cell .TD \&.TR \&.TD \&.TH \%.ETB cell content
+.TD \&.TD .TD Begin table data cell .TD \&.TR \&.TD \&.TH \%.ETB cell content
 .TD \&.TD \&.TH \&.TR \%.ETB cell content
 .TR 
 .TD \&.ETB .TD Finish and print table .TD \&.TD \&.TH \%.ETB cell content
@@ -81,4 +78,13 @@ using the macros themselves.
 .TD color of border and cellseperatorlines .TD .ce X .TD .TD .ce X .TD .ce X .TD .ce X .TD
 .ETB
 .H ------ incomplete -------
-.time end
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/contrib/hdtbl/examples/test-hdtbl.sh.in b/contrib/hdtbl/examples/test-hdtbl.sh.in
new file mode 100644 (file)
index 0000000..5e81bf7
--- /dev/null
@@ -0,0 +1,47 @@
+#!/bin/sh
+#
+# Copyright (C) 2018- Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+# 
+# groff 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 3 of the License, or
+# (at your option) any later version.
+# 
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+
+# Test generated files 'font_n.ps' and 'font_x.ps'.  Both should have
+# 38 pages.
+
+builddir="@abs_top_builddir@"
+gs_program="@GHOSTSCRIPT@"
+ret=0
+
+if test "$gs_program" = "missing"; then
+   echo "ghostscript program missing, can't check hdtbl examples"
+   exit 77
+fi
+
+# $1 file, $2 expected number of pages
+check_number_pages()
+{
+    echo "Checking $1"
+    res=`$gs_program -o /dev/null/ -sDEVICE=bbox "$1" 2>&1 | grep HiResBoundingBox | wc -l`
+    if test $res != $2; then
+        echo "  Error: expected $2 pages, found $res pages"
+        ret=255
+    fi
+}
+
+check_number_pages $builddir/contrib/hdtbl/examples/fonts_n.ps 38
+check_number_pages $builddir/contrib/hdtbl/examples/fonts_x.ps 38
+
+exit $ret
diff --git a/contrib/hdtbl/groff_hdtbl.7.man b/contrib/hdtbl/groff_hdtbl.7.man
new file mode 100644 (file)
index 0000000..0ae39a3
--- /dev/null
@@ -0,0 +1,1295 @@
+.TH GROFF_HDTBL @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_hdtbl \- Heidelberger table macros for GNU roff
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_hdtbl_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2005-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this
+.\" document under the terms of the GNU Free Documentation License,
+.\" Version 1.3 or any later version published by the Free Software
+.\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
+.\" and with no Back-Cover Texts.
+.\"
+.\" A copy of the Free Documentation License is included as a file
+.\" called FDL in the main directory of the groff source package.
+.
+.
+.ig
+  Some simple formatting macros.  Note that we use '.ig' here and not a
+  comment to make 'mandb' 2.4.1 (and probably more recent versions also)
+  happy; otherwise the '.char' lines and the stuff which follows is included
+  in the 'whatis' database.
+..
+.
+.
+.char \[lB] \F[\n[.fam]]\f[R][
+.char \[rB] \F[\n[.fam]]\f[R]]
+.
+.char \[or] \F[\n[.fam]]\f[R]\||\|
+.char \[ell] \F[\n[.fam]]\f[R].\|.\|.
+.
+.char \[oq] \F[\n[.fam]]\f[R]\[oq]
+.char \[cq] \F[\n[.fam]]\f[R]\[cq]
+.
+.
+.ie F CR \{\
+.
+.  \" We have to solve the following problem.  In this code
+.  \"
+.  \"   foo
+.  \"   .CR bar
+.  \"   foo
+.  \"
+.  \" the space immediately after 'bar' should not be taken from the 'C'
+.  \" family.  At the same time, this
+.  \"
+.  \"   foo
+.  \"   .CR bar\c
+.  \"   foo
+.  \"
+.  \" should work also.  To fulfill both constraints we emit the
+.  \" family changing commands both as escapes and macro calls.
+.
+.  de make-C-macro
+.    de C\\$1
+.      ds old-fam \\\\n[.fam]
+.      fam C
+.      \\$2 \&\\\\$*\F[]\F[\\\\*[old-fam]]
+.      fam
+\\..
+.  .
+.
+.  make-C-macro R nop
+.  make-C-macro B B
+.  make-C-macro I I
+.
+.  de make-C-macro
+.    de C\\$1
+.      ds old-fam \\\\n[.fam]
+.      fam C
+.      \\$1 \\\\$@ \F[]\F[\\\\*[old-fam]]
+.      fam
+\\..
+.  .
+.
+.  make-C-macro BI
+.  make-C-macro IB
+.  make-C-macro RI
+.  make-C-macro IR
+.  make-C-macro BR
+.  make-C-macro RB
+.\}
+.el \{\
+.  ftr CR R
+.  ftr CI I
+.  ftr CB B
+.  ftr CBI BI
+.
+.  de CR
+.    nop \&\\$*
+.  .
+.  als CB B
+.  als CI I
+.
+.  als CBI BI
+.  als CIB IB
+.  als CRI RI
+.  als CIR IR
+.  als CBR BR
+.  als CRB RB
+.\}
+.
+.
+.
+.de XB
+.  B "\\$1"
+.  shift
+.  CR "\\$1\c"
+.  shift
+.  while \\n[.$] \{\
+.    nop ,
+.    CR "\\$1\c"
+.    shift
+.  \}
+.  br
+..
+.
+.
+.de XAA
+.  TQ
+.  CRI \\$@
+..
+.
+.
+.de XDEF
+.  br
+.  B Default:
+.  if !\\n[.$] \
+.    return
+.  CRI "\\$1" "\\$2"
+..
+.
+.
+.de XDEFR
+.  br
+.  B Default:
+.  CR "\[oq]\\$1\[cq]"
+.  nop (register
+.  CR "\[oq]\\$2\[cq]\c"
+.  nop ).
+..
+.
+.
+.de XDEFS
+.  br
+.  B Default:
+.  CR "\[oq]\\$1\[cq]"
+.  nop (string
+.  CR "\[oq]\\$2\[cq]\c"
+.  nop ).
+..
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+The
+.B hdtbl
+macros consist of four base and three optional macros, controlled by about
+twenty arguments.
+.
+The syntax is simple and similar to the
+.B HTML
+table model and nearly as flexible: You can write sequences of tokens (macro
+calls with their arguments and content data), separated by blanks and
+beginning with a macro call, into the same line to get compact and cleanly
+arrranged input.
+.
+An advantage of
+.B hdtbl
+is that the tables are constructed without calling a preprocessor; this
+means that
+.BR groff 's
+full macro capabilities are available.
+.
+On the other hand, table processing with
+.B hdtbl
+is much slower than using the
+.BR tbl (@MAN1EXT@)
+preprocessor.
+.
+A further advantage is that the HTML-like syntax of
+.B hdtbl
+will be easily converted to HTML; this is not implemented yet.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+In this and the next section, we present examples to help users
+understand the basic workflow of
+.BR hdtbl .
+.
+First of all, you must load the
+.I hdtbl.tmac
+file.
+.
+As with nearly all other groff macro packages, there are two possibilities
+to do so:
+.
+Either add the line
+.
+.PP
+.nf
+.nh
+.RS
+.CR .mso hdtbl.tmac
+.fi
+.hy
+.RE
+.
+.PP
+to your
+.I roff
+file before using any macros of the
+.B hdtbl
+package, or add the option
+.
+.PP
+.nf
+.nh
+.RS
+.CR \-m hdtbl
+.fi
+.hy
+.RE
+.
+.PP
+to the command line of groff (before the document file which contains
+.B hdtbl
+macros).
+.
+Then you can include on or more tables in your document, where each one
+must be started and ended with the
+.CR .TBL
+and
+.CR .ETB
+macros, respectively.
+.
+.
+.PP
+In this man page, we approximate the result of each example in the
+.I tty
+format to be as generic as possible since
+.B hdtbl
+currently only supports the PS and PDF output devices.
+.
+.
+.PP
+The simplest well-formed table consists of just single calls to the
+four base table macros in the right order.
+.
+Here we construct a table with only one cell.
+.
+.PP
+.RS
+.nf
+.nh
+.CR .TBL
+.CR .TR
+.CR .TD
+.CI contents of the table cell
+.CR .ETB
+.fi
+.hy
+.RE
+.
+.
+.PP
+A
+.I tty
+representation is
+.
+.PP
+.nf
+.nh
+.ft CR
+.RS
++------------------------------------------------------+
+| contents-of-the-table-cell                           |
++------------------------------------------------------+
+.RE
+.ft
+.hy
+.fi
+.
+.
+.PP
+Equivalent to the above is the following notation.
+.
+.PP
+.RS
+.nh
+.nf
+.CRI ".TBL .TR .TD \[dq]" "contents of the table cell" "\[dq] .ETB"
+.fi
+.hy
+.RE
+.
+.
+.PP
+By default, the formatted table is inserted into the surrounding text
+at the place of its definition.
+.
+If the vertical space isn't sufficient, it is placed at the top of
+the next page.
+.
+Tables can also be stored for later insertion.
+.
+.
+.PP
+Using
+.CIR \[oq]row-number * column-number\[cq]
+as the data for the table cells, a table with two rows and two columns
+can be written as
+.
+.
+.PP
+.RS
+.nf
+.nh
+.CR ".TBL cols=2"
+.CR ".  TR .TD 1*1 .TD 1*2"
+.CR ".  TR .TD 2*1 .TD 2*2"
+.CR ".ETB"
+.fi
+.hy
+.RE
+.
+.
+.PP
+A
+.I tty
+representation is
+.
+.
+.PP
+.nf
+.nh
+.ft CR
+.RS
++--------------------------+---------------------------+
+| 1*1                      | 1*2                       |
++--------------------------+---------------------------+
+| 2*1                      | 2*2                       |
++--------------------------+---------------------------+
+.RE
+.ft
+.hy
+.fi
+.
+.
+.PP
+Here we see a difference from HTML tables: The number of columns must be
+explicitly specified using the
+.CRI \[oq]cols= m\[cq]
+argument (or indirectly via the
+.CR \[oq]width\[cq]
+argument, see below).
+.
+.
+.PP
+The contents of a table cell is arbitrary; for example, it can be another
+table, without restriction to the nesting depth.
+.
+A given table layout can be either constructed with suitably nested tables
+or with proper arguments to
+.CR .TD
+and
+.CR .TH\c
+, controlling column and row spanning.
+.
+Note, however, that this table
+.
+.PP
+.RS
+.nf
+.nh
+.CR ".TBL"
+.CR ".  TR"
+.CR ".    TD"
+.CR ".      nop 1*1 1*2"
+.CR ".  TR"
+.CR ".    TD"
+.CR ".      TBL cols=2 border="
+.CR ".        TR"
+.CR ".          TD"
+.CR ".            nop 2*1"
+.CR ".          TD"
+.CR ".            nop 2*2"
+.CR ".      ETB"
+.CR ".ETB"
+.fi
+.hy
+.RE
+.
+.PP
+and this table
+.
+.PP
+.RS
+.nf
+.nh
+.CR ".TBL cols=2"
+.CR ".  TR"
+.CR ".    TD colspan=2"
+.CR ".      nop 1*1 1*2"
+.CR ".  TR"
+.CR ".    TD"
+.CR ".      nop 2*1"
+.CR ".    TD"
+.CR ".      nop 2*2"
+.CR ".ETB"
+.fi
+.hy
+.RE
+.
+.PP
+are similar but not identical (the use of
+.CR .nop
+is purely cosmetic to get proper indentation).
+.
+.
+.PP
+The first table looks like
+.
+.PP
+.nf
+.nh
+.ft CR
+.RS
++------------------------------------------------------+
+| 1*1 1*2                                              |
++------------------------------------------------------+
+|                                                      |
+| 2*1                         2*2                      |
+|                                                      |
++------------------------------------------------------+
+.RE
+.ft
+.hy
+.fi
+.
+.PP
+and the second one like
+.
+.PP
+.nf
+.nh
+.ft CR
+.RS
++------------------------------------------------------+
+| 1*1 1*2                                              |
++---------------------------+--------------------------+
+| 2*1                       | 2*2                      |
++---------------------------+--------------------------+
+.RE
+.ft
+.hy
+.fi
+.
+.PP
+Here the latter table in a more compact form.
+.
+.PP
+.RS
+.nf
+.nh
+.CR ".TBL cols=2 .TR \[dq].TD colspan=2\[dq] 1*1 1*2"
+.CR ".            TR .TD 2*1 .TD 2*2 .ETB"
+.fi
+.hy
+.RE
+.
+.
+.PP
+If a macro has one or more arguments (see below), and it is not starting a
+line, everything belonging to this macro including the macro itself must be
+enclosed in double quotes.
+.
+.
+.\" ====================================================================
+.SH MACROS AND ARGUMENTS
+.\" ====================================================================
+.
+The order of macro calls and other tokens follows the HTML model.
+.
+In the following list, valid predecessors and successors of all
+.B hdtbl
+macros are given, together with the possible arguments.
+.
+.PP
+Macro arguments are separated by blanks.
+.
+The order of arguments is arbitrary; they are of the form
+.
+.PP
+.RS
+.CRI key= value
+.RE
+.
+.PP
+or
+.
+.PP
+.RS
+.CRI key=\[aq] "value1 \[lB]value2 \[lB]\[ell]\[rB]\[rB]" \[aq]
+.RE
+.
+.PP
+with the only exception of the optional argument of the macro
+.CR .ETB\c
+, which is the string
+.CR \[oq]hold\[cq]\c
+\&.
+.
+Another possible form is
+.
+.PP
+.RS
+.CRI \[dq]key= "value1 \[lB]value2 \[lB]\[ell]\[rB]\[rB]" \[dq]
+.RE
+.
+.
+.PP
+However, this is limited to the case where the macro is the first one in the
+line and not already enclosed in double quotes.
+.
+.
+.PP
+Argument values specified below as\~\c
+.CI c
+are colors predefined by
+.B groff
+or colors defined by the user with the
+.CR .defcolor
+request.
+.
+Argument values\~\c
+.CI d
+are decimal numbers with or without decimal point.
+.
+Argument values\~\c
+.CI m
+are natural numbers.
+.
+Argument values\~\c
+.CI n
+are numerical values with the usual
+.B groff
+scaling indicators.
+.
+Some of the arguments are specific to one or two macros, but most of
+them can be specified with
+.CR .TBL\c
+,
+.CR .TR\c
+,
+.CR .TD\c
+, and
+.CR .TH\
+\&.
+.
+These common arguments are explained in the next subsection.
+.
+.
+.PP
+Most of the argument default values can be changed by the user by
+setting corresponding default registers or strings, as listed below.
+.
+.\"==================================================================
+.
+.TP
+.CBI ".TBL " \[lB]args\[rB]
+Begin a new table.
+.
+.IP
+.RS
+.XB predecessor: .TD .TH .ETB "cell contents"
+.XB successor: .CPTN .TR
+.XB arguments:
+.
+.RS
+.XAA border= \[lB]n\[rB]
+Thickness of the surrounding box border.
+.
+.CR \%\[oq]border=\[cq]
+(no value) means neither a surrounding box border nor any horizontal or
+vertical separator lines between the table rows and cells.
+.
+.CR \%\[oq]border=0\[cq]
+suppresses the surrounding box border, but still allows separator lines
+between cells and rows.
+.
+.XDEFR border=.1n t*b
+.
+.XAA bc= c
+Border color.
+.
+.XDEFS bc=red4 t*bc
+.
+.XAA cols= m
+Number of table columns.
+.
+This argument is necessary if more than one column is in the table and no
+.CR \[oq]width\[cq]
+arguments are present.
+.
+.XDEFR cols=1 t*cols
+.
+.XAA cpd= n
+Cell padding, i.e., the extra space between the cell space border and
+the cell contents.
+.
+.XDEFR cpd=.5n t*cpd
+.
+.XAA csp= n
+Cell spacing, i.e., the extra space between the table border or
+vertical or horizontal lines between cells and the cellspace.
+.
+.XDEFR csp=.5n t*csp
+.
+.XAA tal=l\[or]c\[or]r
+Horizontal alignment of the table, if it is smaller than the line width.
+.
+.CR \[oq]tal=l\[cq]\c
+: left alignment.
+.
+.CR \[oq]tal=c\[cq]\c
+: centered alignment.
+.
+.CR \[oq]tal=r\[cq]\c
+: right alignment.
+.
+.XDEFR tal=l t*tal
+.
+.XAA "width=\[aq]" "w1 \[lB]w2 \[lB]\[ell]\[rB]\[rB]" \[aq]
+Widths of table cells.
+.
+.CI w1\c
+.RI , ""
+.CI w2\c
+.RI , ""
+\[ell] are either numbers of type\~\c
+.CI n
+or natural numbers with the pseudo-scaling indicator
+.CR \[oq]%\[cq]\c
+, with the meaning \[lq]percent of the actual line length (or column length
+for inner tables, respectively)\[rq].
+.
+If there are less width values than table columns, the last width value is
+used for the remaining cells.
+.
+The argument
+.
+.RS
+.IP
+.CR width=\[aq]1.5i 10%\[aq]
+.RE
+.
+.IP
+for example indicates that the first column is 1.5\~inches wide; the
+remaining columns take 1/10 of the column length each.
+.
+.XDEF
+The table width equals the outer line length or column length; the columns
+have equal widths.
+.
+.XAA height= n
+Height of the table.
+.
+If the table with its contents is lower than\~\c
+.CI n\c
+.RI , ""
+the last row is stretched to this value.
+.RE
+.RE
+.
+.\"==================================================================
+.
+.TP
+.CBI ".CPTN " \[lB]args\[rB]
+Text of caption.
+.
+.IP
+The (optionally numbered) table caption.
+.
+.CR .CPTN
+is optional.
+.
+.IP
+.RS
+.XB predecessor: .TBL
+.XB successor: .TR
+.XB arguments:
+.
+.RS
+.XAA val=t\[or]b
+Vertical alignment of the table caption.
+.
+.CR \[oq]val=t\[cq]\c
+: The caption is placed above the table.
+.
+.CR \[oq]val=b\[cq]\c
+: The caption is placed below the table.
+.
+.XDEFS val=t t*cptn
+.RE
+.RE
+.
+.\"==================================================================
+.
+.TP
+.CBI ".TR " \[lB]args\[rB]
+Begin a new table row.
+.
+.IP
+.RS
+.XB predecessor: .TBL .CPTN .TD .TH .ETB "cell contents"
+.XB successor: .TD .TH
+.XB arguments:
+.
+.RS
+.XAA height= n
+The height of the row.
+.
+If a cell in the row is higher than\~\c
+.CI n\c
+.RI , ""
+this value is ignored;
+otherwise the row height is stretched to\~\c
+.CI n\c
+.RI . ""
+.RE
+.RE
+.
+.\"==================================================================
+.
+.TP
+.CBI ".TD " "\[lB]args \[lB]cell contents\[rB]\[rB]"
+Begin a table data cell.
+.TQ
+.CBI ".TH " "\[lB]args \[lB]cell contents\[rB]\[rB]"
+Begin a table header cell.
+.
+.IP
+Arguments and cell contents can be mixed.
+.
+The macro
+.CR .TH
+is not really necessary and differs from
+.CR .TD
+only in three default settings, similar to the
+.CR <TH>
+and
+.CR <TD>
+HTML tags: The contents of
+.CR .TH
+is horizontally and vertically centered and typeset in boldface.
+.
+.IP
+.RS
+.XB predecessor: .TR .TD .TH .ETB "cell contents"
+.XB successor: .TD .TH .TR .ETB "cell contents"
+.XB arguments:
+.
+.RS
+.XAA colspan= m
+The width of this cell is the sum of the widths of the\~\c
+.CI m
+cells above and below this row.
+.
+.XAA rowspan= m
+The height of this cell is the sum of the heights of the
+.CI m
+cells left and right of this column.
+.
+.IP
+.B Remark:
+Overlapping of column and row spanning, as in the following table fragment
+(the overlapping happens in the second cell in the second row), is invalid
+and causes incorrect results.
+.
+.RS
+.IP
+.nh
+.nf
+.CR ".TR .TD 1*1 \[dq].TD 1*2 rowspan=2\[dq] .TD 1*3"
+.CR ".TR \[dq].TD 2*1 colspan=2\[dq]         .TD 2*3"
+.fi
+.hy
+.RE
+.
+.PP
+A working example for headers and cells with
+.B colspan
+is
+.
+.PP
+.RS
+.nf
+.nh
+.CR .TBL cols=3
+.CR ".  TR" \[dq].TH colspan=2\[dq] header1+2 .TH header3
+.CR ".  TR" .TD 1*1 .TD 1*2 .TD 1*3
+.CR ".  TR" .TD 2*1 \[dq].TD colspan=2\[dq] 2*2+3
+.CR .ETB
+.fi
+.hy
+.RE
+.
+.PP
+This looks like
+.
+.PP
+.ft CR
+.if t \{\
+.  ne 7v
+.\}
+.RS
+.nf
+.nh
++------------------------------+---------------+
+|          header1+2           |    header3    |
++--------------+---------------+---------------+
+| 1*1          | 1*2           | 1*3           |
++--------------+---------------+---------------+
+| 2*1          | 2*2+3                         |
++--------------+-------------------------------+
+.RE
+.ft
+.hy
+.fi
+.
+.PP
+A working example with
+.B rowspan
+is
+.
+.PP
+.RS
+.nf
+.nh
+.CR .TBL cols=3
+.CR ".  TR"
+.CR ".  TD" 1*1
+.CR ".  TD" rowspan=2 1+2*2
+.CR ".  TD" 1*3
+.CR .
+.CR ".  TR"
+.CR ".  TD" 2*1
+.CR ".  TD" 2*3
+.CR .ETB
+.fi
+.hy
+.RE
+.
+.PP
+which looks like
+.
+.PP
+.ft CR
+.RS
+.nf
+.nh
++--------------+---------------+---------------+
+| 1*1          | 1+2*2         | 1*3           |
++--------------+               +---------------+
+| 2*1          |               | 2*3           |
++--------------+---------------+---------------+
+.hy
+.fi
+.RE
+.ft CR
+.
+.RE
+.RE
+.
+.\"==================================================================
+.
+.TP
+.CB ".ETB \[lB]hold\[rB]"
+End of the table.
+.
+.IP
+This macro finishes a table.
+.
+It causes one of the following actions.
+.
+.RS
+.IP \[bu] 3
+If the argument
+.CR \[oq]hold\[cq]
+is given, the table is held until it is freed by calling the macro
+.CR .t*free\c
+, which in turn prints the table immediately, either at the current position
+or at the top of the next page if its height is larger than the remaining
+space on the page.
+.
+.IP \[bu] 3
+Otherwise, if the table is higher than the remaining space on the page,
+it is printed at the top of the next page.
+.
+.IP \[bu] 3
+If neither of the two above constraints hold, the table is printed
+immediately at the place of its definition.
+.RE
+.
+.IP
+.RS
+.XB predecessor: .TD .TH .ETB "cell contents"
+.XB successor: .TBL .TR .TD .TH .ETB "cell contents"
+.XB arguments:
+.
+.RS
+.XAA hold
+Prevent the table from being printed until it is freed by calling the
+macro
+.CR .t*free\c
+\&.
+.
+This argument is ignored for inner (nested) tables.
+.RE
+.RE
+.
+.\"==================================================================
+.
+.TP
+.CBI ".t*free " \[lB]n\[rB]
+Free the next held table or
+.CI n\~\c
+.RI held ""
+tables.
+.
+Call this utility macro to print tables which are held by using the
+.CR \[oq]hold\[cq]
+argument of the
+.CR .ETB
+macro.
+.
+.
+.\" ====================================================================
+.SS "Arguments common to \f[CB].TBL\f[], \f[CB].TR\f[], \f[CB].TD\f[], and \f[CB].TH\f[]"
+.\" ====================================================================
+.
+The arguments described in this section can be specified with the
+.CR .TBL
+and
+.CR .TR
+macros, but they are eventually passed on to the table cells.
+.
+If omitted, the defaults take place, which the user can change by setting
+the corresponding default registers or strings, as documented below.
+.
+Setting an argument with the
+.CR .TBL
+macro has the same effect as setting it for all rows in the table.
+.
+Setting an argument with a
+.CR .TR
+macro has the same effect as setting it for all the
+.CR .TH
+or
+.CR .TD
+macro in this row.
+.
+.IP
+.XAA bgc= \[lB]c\[rB]
+The background color of the table cells.
+.
+This includes the area specified with the
+.CR \[oq]csp\[cq]
+argument.
+.
+The argument
+.CR \[oq]bgc=\[cq]
+(no value) suppresses a background color; this makes the background
+transparent.
+.
+.XDEFS bgc=bisque t*bgc
+.
+.XAA fgc= c
+The foreground color of the cell contents.
+.
+.XDEFS fgc=red4 t*fgc
+.
+.XAA ff= name
+The font family for the table.
+.
+.CI name
+is one of the groff font families, for example
+.CR A
+for the AvantGarde fonts or
+.CR HN
+for Helvetica-Narrow.
+.
+.XDEF
+The font family found before the table (string
+.CR \[oq]t*ff\[cq]\c
+).
+.
+.XAA fst= style
+The font style for the table.
+.
+One of
+.CR R\c
+,
+.CR B\c
+,
+.CR I\c
+, or
+.CR BI
+for roman,
+.BR bold ,
+.IR italic ,
+or \f[BI]bold italic\f[], respectively.
+.
+As with
+.BR roff 's
+.CR .ft
+request the
+.CR \[oq]fst\[cq]
+argument can be used to specify the font family and font style together, for
+example
+.CR \[oq]fst=HNBI\[cq]
+instead of
+.CR \[oq]ff=HN\[cq]
+and
+.CR \[oq]fst=BI\[cq]\c
+\&.
+.
+.XDEF
+The font style in use right before the table (string
+.CR \[oq]t*fst\[cq]\c
+).
+.
+.XAA "fsz=\[aq]" "d1 \[lB]d2\[rB]" \[aq]
+A decimal or fractional factor
+.CI d1\c
+.RI , ""
+by which the point size for the table is changed, and
+.CI d2\c
+.RI , ""
+by which the vertical line spacing is changed.
+.
+If
+.CI d2
+is omitted, value
+.CI d1
+is taken for both.
+.
+.XDEFS "fsz=\[aq]1.0 1.0\[aq]" t*fsz
+.
+.XAA hal=l\[or]c\[or]b\[or]r
+Horizontal alignment of the cell contents in the table.
+.
+.CR \[oq]hal=l\[cq]\c
+: left alignment.
+.
+.CR \[oq]hal=c\[cq]\c
+: centered alignment.
+.
+.CR \[oq]hal=b\[cq]\c
+: both (left and right) alignment.
+.
+.CR \[oq]hal=r\[cq]\c
+: right alignment.
+.
+.XDEFS hal=b t*hal
+.
+.XAA val=t\[or]m\[or]b
+Vertical alignment of the cell contents in the table for cells lower
+than the current row.
+.
+.CR \[oq]val=t\[cq]\c
+: alignment below the top of the cell.
+.
+.CR \[oq]val=m\[cq]\c
+: alignment in the middle of the cell.
+.
+.CR \[oq]val=b\[cq]\c
+: alignment above the cell bottom.
+.
+.XDEFS val=t t*val
+.
+.XAA hl=\[lB]s\[or]d\[rB]
+Horizontal line between the rows.
+.
+If specified with
+.CR .TD
+or
+.CR .TH
+this is a separator line to the cell below.
+.
+.CR \[oq]hl=\[cq]
+(no value): no separator line.
+.
+.CR \[oq]hl=s\[cq]\c
+: a single separator line between the rows.
+.
+.CR \[oq]hl=d\[cq]\c
+: a double separator line.
+.
+.IP
+The thickness of the separator lines is the half of the border thickness,
+but at least 0.1\~inches.
+.
+The distance between the double lines is equal to the line thickness.
+.
+.IP
+.B Remark:
+Together with
+.CR \[oq]border=0\[cq]
+for proper formatting the value of
+.CR \[oq]csp\[cq]
+must be at least .05\~inches for single separator lines and .15\~inches for
+double separator lines.
+.
+.XDEFS hl=s t*hl
+.
+.XAA vl=\[lB]s\[or]d\[rB]
+Vertical separator line between the cells.
+.
+If specified with
+.CR .TD
+or
+.CR .TH
+this is a separator line to the cell on the right.
+.
+.CR \[oq]vl=s\[cq]\c
+: a single separator line between the cells.
+.
+.CR \[oq]vl=d\[cq]\c
+: a double separator line.
+.
+.CR \[oq]vl=\[cq]
+(no value): no vertical cell separator lines.
+.
+For more information see the documentation of the
+.CR \[oq]hl\[cq]
+argument above.
+.
+.XDEFS vl=s t*vl
+.
+.
+.\" ====================================================================
+.SH HDTBL CUSTOMIZATION
+.\" ====================================================================
+.
+.PP
+Before creating the first table, you should configure default values
+to minimize the markup needed in each table.
+.
+The following example sets up defaults suitable for typical papers:
+.PP
+.RS
+.nf
+.CR ".ds t*bgc white\e\[dq] background color
+.CR ".ds t*fgc black\e\[dq] foreground color
+.CR ".ds t*bc black\e\[dq]  border color
+.CR ".nr t*cpd 0.1n\e\[dq]  cell padding
+.fi
+.RE
+.
+.
+.PP
+The file
+.B examples/common.roff
+provides another example setup
+in the \[lq]minimal Page setup\[rq] section.
+.
+.
+.PP
+A table which does not fit on a partially filled page is printed
+automatically on the top of the next page if you append the little
+utility macro
+.CR t*hm
+to the page header macro of your document's main macro package.
+.
+For example, say
+.
+.PP
+.RS
+.nf
+.CR ".am pg@top"
+.CR ".  t*hm"
+.CR ".."
+.fi
+.RE
+.
+.
+.PP
+if you use the
+.B ms
+macro package.
+.
+.
+.PP
+The macro
+.CR t*EM
+checks for held or kept tables,
+and for missing
+.CR ETB
+macros (table not closed).
+.
+You can append this macro
+to the \[lq]end\[rq] macro of your document's main macro package.
+.
+For example:
+.
+.PP
+.RS
+.nf
+.nh
+.CR ".am pg@end-text"
+.CR ".  t*EM"
+.CR ".."
+.fi
+.hy
+.RE
+.
+.PP
+If you use the
+.B ms
+macro package.
+.
+.
+.\" ====================================================================
+.SH BUGS AND SUGGESTIONS
+.\" ====================================================================
+.
+Please send your commments to the
+.MT groff@\:gnu.org
+groff mailing list
+.ME
+or directly to the author.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+The
+.B hdtbl
+macro package was written by
+.MT Joachim.Walsdorff@\:urz.uni\-heidelberg.de
+Joachim Walsdorff
+.ME .
+.
+.
+.\" ====================================================================
+.SH SEE ALSO
+.\" ====================================================================
+.TP
+.BR groff (1)
+provides an overview of GNU
+.I roff
+and details how to invoke
+.I groff
+at the command line.
+.TP
+.BR groff (7)
+summarizes the
+.I roff
+language and GNU extensions to it.
+.TP
+.BR tbl (1)
+describes the traditional
+.I roff
+preprocessor for tables.
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_hdtbl_C]
+.
+.
+.\" ====================================================================
+.\" Emacs settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
diff --git a/contrib/hdtbl/groff_hdtbl.man b/contrib/hdtbl/groff_hdtbl.man
deleted file mode 100644 (file)
index 74012ae..0000000
+++ /dev/null
@@ -1,1273 +0,0 @@
-.TH GROFF_HDTBL @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_hdtbl \- groff `hdtbl' macros for generation of tables
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2005-2014 Free Software Foundation, Inc.
-
-This file is part of groff, the groff.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHORS, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.de au
-This document was written by
-.MT Joachim.Walsdorff@urz.uni-heidelberg.de
-Joachim Walsdorff
-.ME .
-..
-.
-.
-.ig
-  Some simple formatting macros.  Note that we use `.ig' here and not a
-  comment to make `mandb' 2.4.1 (and probably more recent versions also)
-  happy; otherwise the `.char' lines and the stuff which follows is included
-  in the `whatis' database.
-..
-.
-.
-.char \[lB] \F[\n[.fam]]\f[R][
-.char \[rB] \F[\n[.fam]]\f[R]]
-.
-.char \[or] \F[\n[.fam]]\f[R]\||\|
-.char \[ell] \F[\n[.fam]]\f[R].\|.\|.
-.
-.char \[oq] \F[\n[.fam]]\f[R]\[oq]
-.char \[cq] \F[\n[.fam]]\f[R]\[cq]
-.
-.
-.ie F CR \{\
-.
-.  \" We have to solve the following problem.  In this code
-.  \"
-.  \"   foo
-.  \"   .CR bar
-.  \"   foo
-.  \"
-.  \" the space immediately after `bar' should not be taken from the `C'
-.  \" family.  At the same time, this
-.  \"
-.  \"   foo
-.  \"   .CR bar\c
-.  \"   foo
-.  \"
-.  \" should work also.  To fulfill both constraints we emit the
-.  \" family changing commands both as escapes and macro calls.
-.
-.  de make-C-macro
-.    de C\\$1
-.      ds old-fam \\\\n[.fam]
-.      fam C
-.      \\$2 \&\\\\$*\F[]\F[\\\\*[old-fam]]
-.      fam
-\\..
-.  .
-.
-.  make-C-macro R nop
-.  make-C-macro B B
-.  make-C-macro I I
-.
-.  de make-C-macro
-.    de C\\$1
-.      ds old-fam \\\\n[.fam]
-.      fam C
-.      \\$1 \\\\$@ \F[]\F[\\\\*[old-fam]]
-.      fam
-\\..
-.  .
-.
-.  make-C-macro BI
-.  make-C-macro IB
-.  make-C-macro RI
-.  make-C-macro IR
-.  make-C-macro BR
-.  make-C-macro RB
-.\}
-.el \{\
-.  ftr CR R
-.  ftr CI I
-.  ftr CB B
-.  ftr CBI BI
-.
-.  de CR
-.    nop \&\\$*
-.  .
-.  als CB B
-.  als CI I
-.
-.  als CBI BI
-.  als CIB IB
-.  als CRI RI
-.  als CIR IR
-.  als CBR BR
-.  als CRB RB
-.\}
-.
-.
-.de TQ
-.  br
-.  ns
-.  TP
-..
-.
-.
-.de XB
-.  B "\\$1"
-.  shift
-.  CR "\\$1\c"
-.  shift
-.  while \\n[.$] \{\
-.    nop ,
-.    CR "\\$1\c"
-.    shift
-.  \}
-.  br
-..
-.
-.
-.de XAA
-.  TQ
-.  CRI \\$@
-..
-.
-.
-.de XDEF
-.  br
-.  B Default:
-.  if !\\n[.$] \
-.    return
-.  CRI "\\$1" "\\$2"
-..
-.
-.
-.de XDEFR
-.  br
-.  B Default:
-.  CR "\[oq]\\$1\[cq]"
-.  nop (register
-.  CR "\[oq]\\$2\[cq]\c"
-.  nop ).
-..
-.
-.
-.de XDEFS
-.  br
-.  B Default:
-.  CR "\[oq]\\$1\[cq]"
-.  nop (string
-.  CR "\[oq]\\$2\[cq]\c"
-.  nop ).
-..
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.B hdtbl
-macros consist of four base and three optional macros, controlled by about
-twenty arguments.
-.
-The syntax is simple and similar to the
-.B HTML
-table model and nearly as flexible: You can write sequences of tokens (macro
-calls with their arguments and content data), separated by blanks and
-beginning with a macro call, into the same line to get compact and cleanly
-arrranged input.
-.
-An advantage of
-.B hdtbl
-is that the tables are constructed without calling a preprocessor; this
-means that
-.BR groff \[aq]s
-full macro capabilities are available.
-.
-On the other hand, table processing with
-.B hdtbl
-is much slower than using the
-.BR tbl (@MAN1EXT@)
-preprocessor.
-.
-A further advantage is that the HTML-like syntax of
-.B hdtbl
-will be easily converted to HTML; this is not implemented yet.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-In this and the next section, we present examples to help users
-understand the basic workflow of
-.BR hdtbl .
-.
-First of all, you must load the
-.I hdtbl.tmac
-file.
-.
-As with nearly all other groff macro packages, there are two possibilities
-to do so:
-.
-Either add the line
-.
-.PP
-.nf
-.nh
-.RS
-.CR .mso hdtbl.tmac
-.fi
-.hy
-.RE
-.
-.PP
-to your
-.I roff
-file before using any macros of the
-.B hdtbl
-package, or add the option
-.
-.PP
-.nf
-.nh
-.RS
-.CR \-m hdtbl
-.fi
-.hy
-.RE
-.
-.PP
-to the command line of groff (before the document file which contains
-.B hdtbl
-macros).
-.
-Then you can include on or more tables in your document, where each one
-must be started and ended with the
-.CR .TBL
-and
-.CR .ETB
-macros, respectively.
-.
-.
-.PP
-In this man page, we approximate the result of each example in the
-.I tty
-format to be as generic as possible since
-.B hdtbl
-currently only supports the PS and PDF output devices.
-.
-.
-.PP
-The simplest well-formed table consists of just single calls to the
-four base table macros in the right order.
-.
-Here we construct a table with only one cell.
-.
-.PP
-.RS
-.nf
-.nh
-.CR .TBL
-.CR .TR
-.CR .TD
-.CI contents of the table cell
-.CR .ETB
-.fi
-.hy
-.RE
-.
-.
-.PP
-A
-.I tty
-representation is
-.
-.PP
-.nf
-.nh
-.ft C
-.RS
-+------------------------------------------------------+
-| contents-of-the-table-cell                           |
-+------------------------------------------------------+
-.RE
-.ft
-.hy
-.fi
-.
-.
-.PP
-Equivalent to the above is the following notation.
-.
-.PP
-.RS
-.nh
-.nf
-.CRI ".TBL .TR .TD \[dq]" "contents of the table cell" "\[dq] .ETB"
-.fi
-.hy
-.RE
-.
-.
-.PP
-By default, the formatted table is inserted into the surrounding text
-at the place of its definition.
-.
-If the vertical space isn\[aq]t sufficient, it is placed at the top of
-the next page.
-.
-Tables can also be stored for later insertion.
-.
-.
-.PP
-Using
-.CIR \[oq]row-number * column-number\[cq]
-as the data for the table cells, a table with two rows and two columns
-can be written as
-.
-.
-.PP
-.RS
-.nf
-.nh
-.CR ".TBL cols=2"
-.CR ".  TR .TD 1*1 .TD 1*2"
-.CR ".  TR .TD 2*1 .TD 2*2"
-.CR ".ETB"
-.fi
-.hy
-.RE
-.
-.
-.PP
-A
-.I tty
-representation is
-.
-.
-.PP
-.nf
-.nh
-.ft C
-.RS
-+--------------------------+---------------------------+
-| 1*1                      | 1*2                       |
-+--------------------------+---------------------------+
-| 2*1                      | 2*2                       |
-+--------------------------+---------------------------+
-.RE
-.ft
-.hy
-.fi
-.
-.
-.PP
-Here we see a difference to HTML tables: The number of columns must be
-explicitly specified using the
-.CRI \[oq]cols= m\[cq]
-argument (or indirectly via the
-.CR \[oq]width\[cq]
-argument, see below).
-.
-.
-.PP
-The contents of a table cell is arbitrary; for example, it can be another
-table, without restriction to the nesting depth.
-.
-A given table layout can be either constructed with suitably nested tables
-or with proper arguments to
-.CR .TD
-and
-.CR .TH\c
-, controlling column and row spanning.
-.
-Note, however, that this table
-.
-.PP
-.RS
-.nf
-.nh
-.CR ".TBL"
-.CR ".  TR"
-.CR ".    TD"
-.CR ".      nop 1*1 1*2"
-.CR ".  TR"
-.CR ".    TD"
-.CR ".      TBL cols=2 border="
-.CR ".        TR"
-.CR ".          TD"
-.CR ".            nop 2*1"
-.CR ".          TD"
-.CR ".            nop 2*2"
-.CR ".      ETB"
-.CR ".ETB"
-.fi
-.hy
-.RE
-.
-.PP
-and this table
-.
-.PP
-.RS
-.nf
-.nh
-.CR ".TBL cols=2"
-.CR ".  TR"
-.CR ".    TD colspan=2"
-.CR ".      nop 1*1 1*2"
-.CR ".  TR"
-.CR ".    TD"
-.CR ".      nop 2*1"
-.CR ".    TD"
-.CR ".      nop 2*2"
-.CR ".ETB"
-.fi
-.hy
-.RE
-.
-.PP
-are similar but not identical (the use of
-.CR .nop
-is purely cosmetic to get proper indentation).
-.
-.
-.PP
-The first table looks like
-.
-.PP
-.nf
-.nh
-.ft C
-.RS
-+------------------------------------------------------+
-| 1*1 1*2                                              |
-+------------------------------------------------------+
-|                                                      |
-| 2*1                         2*2                      |
-|                                                      |
-+------------------------------------------------------+
-.RE
-.ft
-.hy
-.fi
-.
-.PP
-and the second one like
-.
-.PP
-.nf
-.nh
-.ft C
-.RS
-+------------------------------------------------------+
-| 1*1 1*2                                              |
-+---------------------------+--------------------------+
-| 2*1                       | 2*2                      |
-+---------------------------+--------------------------+
-.RE
-.ft
-.hy
-.fi
-.
-.PP
-Here the latter table in a more compact form.
-.
-.PP
-.RS
-.nf
-.nh
-.CR ".TBL cols=2 .TR \[dq].TD colspan=2\[dq] 1*1 1*2"
-.CR ".            TR .TD 2*1 .TD 2*2 .ETB"
-.fi
-.hy
-.RE
-.
-.
-.PP
-If a macro has one or more arguments (see below), and it is not starting a
-line, everything belonging to this macro including the macro itself must be
-enclosed in double quotes.
-.
-.
-.\" --------------------------------------------------------------------
-.SH MACROS AND ARGUMENTS
-.\" --------------------------------------------------------------------
-.
-The order of macro calls and other tokens follows the HTML model.
-.
-In the following list, valid predecessors and successors of all
-.B hdtbl
-macros are given, together with the possible arguments.
-.
-.PP
-Macro arguments are separated by blanks.
-.
-The order of arguments is arbitrary; they are of the form
-.
-.PP
-.RS
-.CRI key= value
-.RE
-.
-.PP
-or
-.
-.PP
-.RS
-.CRI key=\[aq] "value1 \[lB]value2 \[lB]\[ell]\[rB]\[rB]" \[aq]
-.RE
-.
-.PP
-with the only exception of the optional argument of the macro
-.CR .ETB\c
-, which is the string
-.CR \[oq]hold\[cq]\c
-\&.
-.
-Another possible form is
-.
-.PP
-.RS
-.CRI \[dq]key= "value1 \[lB]value2 \[lB]\[ell]\[rB]\[rB]" \[dq]
-.RE
-.
-.
-.PP
-However, this is limited to the case where the macro is the first one in the
-line and not already enclosed in double quotes.
-.
-.
-.PP
-Argument values specified below as\~\c
-.CI c
-are colors predefined by
-.B groff
-or colors defined by the user with the
-.CR .defcolor
-request.
-.
-Argument values\~\c
-.CI d
-are decimal numbers with or without decimal point.
-.
-Argument values\~\c
-.CI m
-are natural numbers.
-.
-Argument values\~\c
-.CI n
-are numerical values with the usual
-.B groff
-scaling indicators.
-.
-Some of the arguments are specific to one or two macros, but most of
-them can be specified with
-.CR .TBL\c
-,
-.CR .TR\c
-,
-.CR .TD\c
-, and
-.CR .TH\
-\&.
-.
-These common arguments are explained in the next subsection.
-.
-.
-.PP
-Most of the argument default values can be changed by the user by
-setting corresponding default registers or strings, as listed below.
-.
-.\"------------------------------------------------------------------
-.
-.TP
-.CBI ".TBL " \[lB]args\[rB]
-Begin a new table.
-.
-.IP
-.RS
-.XB predecessor: .TD .TH .ETB "cell contents"
-.XB successor: .CPTN .TR
-.XB arguments:
-.
-.RS
-.XAA border= \[lB]n\[rB]
-Thickness of the surrounding box border.
-.
-.CR \%\[oq]border=\[cq]
-(no value) means neither a surrounding box border nor any horizontal or
-vertical separator lines between the table rows and cells.
-.
-.CR \%\[oq]border=0\[cq]
-suppresses the surrounding box border, but still allows separator lines
-between cells and rows.
-.
-.XDEFR border=.1n t*b
-.
-.XAA bc= c
-Border color.
-.
-.XDEFS bc=red4 t*bc
-.
-.XAA cols= m
-Number of table columns.
-.
-This argument is necessary if more than one column is in the table and no
-.CR \[oq]width\[cq]
-arguments are present.
-.
-.XDEFR cols=1 t*cols
-.
-.XAA cpd= n
-Cell padding, i.e., the extra space between the cell space border and
-the cell contents.
-.
-.XDEFR cpd=.5n t*cpd
-.
-.XAA csp= n
-Cell spacing, i.e., the extra space between the table border or
-vertical or horizontal lines between cells and the cellspace.
-.
-.XDEFR csp=.5n t*csp
-.
-.XAA tal=l\[or]c\[or]r
-Horizontal alignment of the table, if it is smaller than the line width.
-.
-.CR \[oq]tal=l\[cq]\c
-: left alignment.
-.
-.CR \[oq]tal=c\[cq]\c
-: centered alignment.
-.
-.CR \[oq]tal=r\[cq]\c
-: right alignment.
-.
-.XDEFR tal=l t*tal
-.
-.XAA "width=\[aq]" "w1 \[lB]w2 \[lB]\[ell]\[rB]\[rB]" \[aq]
-Widths of table cells.
-.
-.CI w1\c
-,
-.CI w2\c
-, \[ell] are either numbers of type\~\c
-.CI n
-or natural numbers with the pseudo-scaling indicator
-.CR \[oq]%\[cq]\c
-, with the meaning \[lq]percent of the actual line length (or column length
-for inner tables, respectively)\[rq].
-.
-If there are less width values than table columns, the last width value is
-used for the remaining cells.
-.
-The argument
-.
-.RS
-.IP
-.CR width=\[aq]1.5i 10%\[aq]
-.RE
-.
-.IP
-for example indicates that the first column is 1.5\~inches wide; the
-remaining columns take 1/10 of the column length each.
-.
-.XDEF
-The table width equals the outer line length or column length; the columns
-have equal widths.
-.
-.XAA height= n
-Height of the table.
-.
-If the table with its contents is lower than\~\c
-.CI n\c
-, the last row is stretched to this value.
-.RE
-.RE
-.
-.\"------------------------------------------------------------------
-.
-.TP
-.CBI ".CPTN " \[lB]args\[rB]
-Text of caption.
-.
-.IP
-The (optionally numbered) table caption.
-.
-.CR .CPTN
-is optional.
-.
-.IP
-.RS
-.XB predecessor: .TBL
-.XB successor: .TR
-.XB arguments:
-.
-.RS
-.XAA val=t\[or]b
-Vertical alignment of the table caption.
-.
-.CR \[oq]val=t\[cq]\c
-: The caption is placed above the table.
-.
-.CR \[oq]val=b\[cq]\c
-: The caption is placed below the table.
-.
-.XDEFS val=t t*cptn
-.RE
-.RE
-.
-.\"------------------------------------------------------------------
-.
-.TP
-.CBI ".TR " \[lB]args\[rB]
-Begin a new table row.
-.
-.IP
-.RS
-.XB predecessor: .TBL .CPTN .TD .TH .ETB "cell contents"
-.XB successor: .TD .TH
-.XB arguments:
-.
-.RS
-.XAA height= n
-The height of the row.
-.
-If a cell in the row is higher than\~\c
-.CI n
-this value is ignored; otherwise the row height is stretched to\~\c
-.CI n\c
-\&.
-.RE
-.RE
-.
-.\"------------------------------------------------------------------
-.
-.TP
-.CBI ".TD " "\[lB]args \[lB]cell contents\[rB]\[rB]"
-Begin a table data cell.
-.TQ
-.CBI ".TH " "\[lB]args \[lB]cell contents\[rB]\[rB]"
-Begin a table header cell.
-.
-.IP
-Arguments and cell contents can be mixed.
-.
-The macro
-.CR .TH
-is not really necessary and differs from
-.CR .TD
-only in three default settings, similar to the
-.CR <TH>
-and
-.CR <TD>
-HTML tags: The contents of
-.CR .TH
-is horizontally and vertically centered and typeset in boldface.
-.
-.IP
-.RS
-.XB predecessor: .TR .TD .TH .ETB "cell contents"
-.XB successor: .TD .TH .TR .ETB "cell contents"
-.XB arguments:
-.
-.RS
-.XAA colspan= m
-The width of this cell is the sum of the widths of the\~\c
-.CI m
-cells above and below this row.
-.
-.XAA rowspan= m
-The height of this cell is the sum of the heights of the
-.CI m
-cells left and right of this column.
-.
-.IP
-.B Remark:
-Overlapping of column and row spanning, as in the following table fragment
-(the overlapping happens in the second cell in the second row), is invalid
-and causes incorrect results.
-.
-.RS
-.IP
-.nh
-.nf
-.CR ".TR .TD 1*1 \[dq].TD 1*2 rowspan=2\[dq] .TD 1*3"
-.CR ".TR \[dq].TD 2*1 colspan=2\[dq]         .TD 2*3"
-.fi
-.hy
-.RE
-.
-.PP
-A working example for headers and cells with
-.B colspan
-is
-.
-.PP
-.RS
-.nf
-.nh
-.CR .TBL cols=3
-.CR ".  TR" \[dq].TH colspan=2\[dq] header1+2 .TH header3
-.CR ".  TR" .TD 1*1 .TD 1*2 .TD 1*3
-.CR ".  TR" .TD 2*1 \[dq].TD colspan=2\[dq] 2*2+3
-.CR .ETB
-.fi
-.hy
-.RE
-.
-.PP
-This looks like
-.
-.PP
-.ft C
-.if t \{\
-.  ne 7v
-.\}
-.RS
-.nf
-.nh
-+------------------------------+---------------+
-|          header1+2           |    header3    |
-+--------------+---------------+---------------+
-| 1*1          | 1*2           | 1*3           |
-+--------------+---------------+---------------+
-| 2*1          | 2*2+3                         |
-+--------------+-------------------------------+
-.RE
-.ft
-.hy
-.fi
-.
-.PP
-A working example with
-.B rowspan
-is
-.
-.PP
-.RS
-.nf
-.nh
-.CR .TBL cols=3
-.CR ".  TR"
-.CR ".  TD" 1*1
-.CR ".  TD" rowspan=2 1+2*2
-.CR ".  TD" 1*3
-.CR .
-.CR ".  TR"
-.CR ".  TD" 2*1
-.CR ".  TD" 2*3
-.CR .ETB
-.fi
-.hy
-.RE
-.
-.PP
-which looks like
-.
-.PP
-.ft C
-.RS
-.nf
-.nh
-+--------------+---------------+---------------+
-| 1*1          | 1+2*2         | 1*3           |
-+--------------+               +---------------+
-| 2*1          |               | 2*3           |
-+--------------+---------------+---------------+
-.hy
-.fi
-.RE
-.ft C
-.
-.RE
-.RE
-.
-.\"------------------------------------------------------------------
-.
-.TP
-.CB ".ETB \[lB]hold\[rB]"
-End of the table.
-.
-.IP
-This macro finishes a table.
-.
-It causes one of the following actions.
-.
-.RS
-.IP \[bu] 3
-If the argument
-.CR \[oq]hold\[cq]
-is given, the table is held until it is freed by calling the macro
-.CR .t*free\c
-, which in turn prints the table immediately, either at the current position
-or at the top of the next page if its height is larger than the remaining
-space on the page.
-.
-.IP \[bu] 3
-Otherwise, if the table is higher than the remaining space on the page,
-it is printed at the top of the next page.
-.
-.IP \[bu] 3
-If none of the two above constraints hold, the table is printed immediately
-at the place of its definition.
-.RE
-.
-.IP
-.RS
-.XB predecessor: .TD .TH .ETB "cell contents"
-.XB successor: .TBL .TR .TD .TH .ETB "cell contents"
-.XB arguments:
-.
-.RS
-.XAA hold
-Prevent the table from being printed until it is freed by calling the
-macro
-.CR .t*free\c
-\&.
-.
-This argument is ignored for inner (nested) tables.
-.RE
-.RE
-.
-.\"------------------------------------------------------------------
-.
-.TP
-.CBI ".t*free " \[lB]n\[rB]
-Free the next held table or
-.CI n\c
-\~held tables.
-.
-Call this utility macro to print tables which are held by using the
-.CR \[oq]hold\[cq]
-argument of the
-.CR .ETB
-macro.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Arguments common to \f[CB].TBL\f[], \f[CB].TR\f[], \f[CB].TD\f[], and \f[CB].TH\f[]"
-.\" --------------------------------------------------------------------
-.
-The arguments described in this section can be specified with the
-.CR .TBL
-and
-.CR .TR
-macros, but they are eventually passed on to the table cells.
-.
-If omitted, the defaults take place, which the user can change by setting
-the corresponding default registers or strings, as documented below.
-.
-Setting an argument with the
-.CR .TBL
-macro has the same effect as setting it for all rows in the table.
-.
-Setting an argument with a
-.CR .TR
-macro has the same effect as setting it for all the
-.CR .TH
-or
-.CR .TD
-macro in this row.
-.
-.IP
-.XAA bgc= \[lB]c\[rB]
-The background color of the table cells.
-.
-This includes the area specified with the
-.CR \[oq]csp\[cq]
-argument.
-.
-The argument
-.CR \[oq]bgc=\[cq]
-(no value) suppresses a background color; this makes the background
-transparent.
-.
-.XDEFS bgc=bisque t*bgc
-.
-.XAA fgc= c
-The foreground color of the cell contents.
-.
-.XDEFS fgc=red4 t*fgc
-.
-.XAA ff= name
-The font family for the table.
-.
-.CI name
-is one of the groff font families, for example
-.CR A
-for the AvantGarde fonts or
-.CR HN
-for Helvetica-Narrow.
-.
-.XDEF
-The font family found before the table (string
-.CR \[oq]t*ff\[cq]\c
-).
-.
-.XAA fst= style
-The font style for the table.
-.
-One of
-.CR R\c
-,
-.CR I\c
-,
-.CR B\c
-, or
-.CR BI
-for roman,
-.BR bold ,
-.IR italic ,
-or \f[BI]bold italic\f[], respectively.
-.
-As with
-.BR roff 's
-.CR .ft
-request the
-.CR \[oq]fst\[cq]
-argument can be used to specify the font family and font style together, for
-example
-.CR \[oq]fst=HNBI\[cq]
-instead of
-.CR \[oq]ff=HN\[cq]
-and
-.CR \[oq]fst=BI\[cq]\c
-\&.
-.
-.XDEF
-The font style in use right before the table (string
-.CR \[oq]t*fst\[cq]\c
-).
-.
-.XAA "fsz=\[aq]" "d1 \[lB]d2\[rB]" \[aq]
-A decimal or fractional factor
-.CI d1\c
-, by which the point size for the table is changed, and
-.CI d2\c
-, by which the vertical line spacing is changed.
-.
-If
-.CI d2
-is omitted, value
-.CI d1
-is taken for both.
-.
-.XDEFS "fsz=\[aq]1.0 1.0\[aq]" t*fsz
-.
-.XAA hal=l\[or]c\[or]b\[or]r
-Horizontal alignment of the cell contents in the table.
-.
-.CR \[oq]hal=l\[cq]\c
-: left alignment.
-.
-.CR \[oq]hal=c\[cq]\c
-: centered alignment.
-.
-.CR \[oq]hal=b\[cq]\c
-: both (left and right) alignment.
-.
-.CR \[oq]hal=r\[cq]\c
-: right alignment.
-.
-.XDEFS hal=b t*hal
-.
-.XAA val=t\[or]m\[or]b
-Vertical alignment of the cell contents in the table for cells lower
-than the current row.
-.
-.CR \[oq]val=t\[cq]\c
-: alignment below the top of the cell.
-.
-.CR \[oq]val=m\[cq]\c
-: alignment in the middle of the cell.
-.
-.CR \[oq]val=b\[cq]\c
-: alignment above the cell bottom.
-.
-.XDEFS val=t t*val
-.
-.XAA hl=\[lB]s\[or]d\[rB]
-Horizontal line between the rows.
-.
-If specified with
-.CR .TD
-or
-.CR .TH
-this is a separator line to the cell below.
-.
-.CR \[oq]hl=\[cq]
-(no value): no separator line.
-.
-.CR \[oq]hl=s\[cq]\c
-: a single separator line between the rows.
-.
-.CR \[oq]hl=d\[cq]\c
-: a double separator line.
-.
-.IP
-The thickness of the separator lines is the half of the border thickness,
-but at least 0.1\~inches.
-.
-The distance between the double lines is equal to the line thickness.
-.
-.IP
-.B Remark:
-Together with
-.CR \[oq]border=0\[cq]
-for proper formatting the value of
-.CR \[oq]csp\[cq]
-must be at least .05\~inches for single separator lines and .15\~inches for
-double separator lines.
-.
-.XDEFS hl=s t*hl
-.
-.XAA vl=\[lB]s\[or]d\[rB]
-Vertical separator line between the cells.
-.
-If specified with
-.CR .TD
-or
-.CR .TH
-this is a separator line to the cell on the right.
-.
-.CR \[oq]vl=s\[cq]\c
-: a single separator line between the cells.
-.
-.CR \[oq]vl=d\[cq]\c
-: a double separator line.
-.
-.CR \[oq]vl=\[cq]
-(no value): no vertical cell separator lines.
-.
-For more information see the documentation of the
-.CR \[oq]hl\[cq]
-argument above.
-.
-.XDEFS vl=s t*vl
-.
-.
-.\" --------------------------------------------------------------------
-.SH HDTBL CUSTOMIZATION
-.\" --------------------------------------------------------------------
-.
-.PP
-Before creating the first table, you should configure default values
-to minimize the markup needed in each table.
-.
-The following example sets up defaults suitable for typical papers:
-.PP
-.RS
-.nf
-.CR ".ds t*bgc white\e\[dq] background color
-.CR ".ds t*fgc black\e\[dq] foreground color
-.CR ".ds t*bc black\e\[dq]  border color
-.CR ".nr t*cpd 0.1n\e\[dq]  cell padding
-.fi
-.RE
-.
-.
-.PP
-The file
-.B examples/common.roff
-provides another example setup
-in the ``minimal Page setup'' section.
-.
-.
-.PP
-A table which does not fit on a partially filled page is printed
-automatically on the top of the next page if you append the little
-utility macro
-.CR t*hm
-to the page header macro of your document's main macro package.
-.
-For example, say
-.
-.PP
-.RS
-.nf
-.CR ".am pg@top"
-.CR ".  t*hm"
-.CR ".."
-.fi
-.RE
-.
-.
-.PP
-if you use the
-.B ms
-macro package.
-.
-.
-.PP
-The macro
-.CR t*EM
-checks for held or kept tables,
-and for missing
-.CR ETB
-macros (table not closed).
-.
-You can append this macro
-to the ``end'' macro of your document's main macro package.
-.
-For example:
-.
-.PP
-.RS
-.nf
-.nh
-.CR ".am pg@end-text"
-.CR ".  t*EM"
-.CR ".."
-.fi
-.hy
-.RE
-.
-.PP
-If you use the
-.B ms
-macro package.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS AND SUGGESTIONS
-.\" --------------------------------------------------------------------
-.
-Please send your commments to the
-.MT groff@gnu.org
-groff mailing list
-.ME
-or directly to the author.
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" EOF
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/hdtbl/hdmisc.tmac b/contrib/hdtbl/hdmisc.tmac
deleted file mode 100644 (file)
index d0c57e0..0000000
+++ /dev/null
@@ -1,325 +0,0 @@
-.\"    -*-     mode: nroff     -*-
-.ig
-
-hdmisc.tmac
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2005-2014  Free Software Foundation, Inc.
-written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
-
-groff 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 3 of the License, or
-(at your option) any later version.
-
-groff 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, see <http://www.gnu.org/licenses/>.
-
-..
-.
-.
-.\" %beginstrip%
-.
-.if d t*getarg \
-.  nx
-.
-.
-.\"    ******************************************************************
-.\"    **      Some macros and default settings needed by hdtbl        **
-.\"    ******************************************************************
-.
-.
-.\"    Utility macro:  .getarg <key> ...
-.\"
-.\"            Get macro argument.  This macro searches <key> in the
-.\"            remaining arguments and assigns its value to a string
-.\"            register named <key>.  The following syntax forms are
-.\"            recognized.
-.\"
-.\"                    <key>=<val>     Assign <val> to string <key>.
-.\"                                    <val> must not contain spaces.
-.\"                    <key>='<val>'   Assign <val> to string <key>.
-.\"                                    <val> can contain spaces.
-.\"                    <key>=          Assign `=' to string <key>.
-.\"                    <key>           Assign `key' to string <key>.
-.\"
-.\"            After return, the string `args' contains the remaining
-.\"            arguments.
-.\"
-.\"            Example: With the definition of string `foo' as
-.\"
-.\"                    .ds foo aaa=xxx bbb ccc='yyy zzz' ddd= eee
-.\"
-.\"            a call to `getarg' with
-.\"
-.\"                    .getarg ccc \*[foo]
-.\"
-.\"            sets string `ccc' to value `yyy zzz'.  The string `args'
-.\"            now contains `aaa=xxx bbb ddd= eee'.  An additional call
-.\"            like
-.\"
-.\"                    .getarg ddd \*[args]
-.\"
-.\"            sets string `ddd' to value `=', and `args' contains
-.\"            `aaa=xxx bbb eee'.
-.de t*getarg
-.  ds \\$1
-.  ds args
-.
-.  if (\\n[.$] < 2) \
-.    return
-.
-.  ds $1 \\$1\"
-.  shift
-.
-.  length * \\*[$1]
-.  while \\n[.$] \{\
-.    ds * "\\$1\"
-.    ds ** "\\$1\"
-.    length ** \\*[**]
-.    shift
-.    if (\\n[*] > \\n[**]) \{\
-.      as args " "\\*[**]"\"                   value too short, repeat
-.      continue
-.    \}
-.    substring * 0 (\\n[*] - 1)
-.    \" The surrounding \? escapes emulate string comparison.
-.    ie !"\?\\*[$1]\?"\?\\*[*]\?" \{\
-.      as args " "\\*[**]"\"                   key not found, repeat
-.      continue
-.    \}
-.    el \{\
-.      ie "\?\\*[**]\?"\?\\*[$1]\?" \
-.        ds \\*[$1] \\*[$1]\"                  return key as string
-.      el \{\
-.        ie "\?\\*[**]\?"\?\\*[$1]=\?" \
-.          ds \\*[$1] =\"                      return `='
-.        el \{\
-.          substring ** (\\n[*] + 1) -1
-.          ds * \\*[**]\"
-.          substring * 0 0
-.
-.          \" check whether value starts with quote
-.          if "\?\\*[*]\?"\?'\?" \{\
-.            substring ** 1 -1
-.            ds * \\*[**]\"
-.            substring * -1 -1
-.
-.            \" search final quote
-.            ie "\?\\*[*]\?"\?'\?" \
-.              substring ** 0 -2
-.            el \{\
-.              as \\*[$1] \\*[**] \"           not found, append argument
-.
-.              while 1 \{\
-.                ds ** \\$1\"                  get next argument
-.                ds * \\$1\"
-.                shift
-.                substring * -1 -1
-.
-.                if "\?\\*[*]\?"\?'\?" \{\
-.                  substring ** 0 -2
-.                  break               \"      break if no final quote
-.                \}
-.
-.                as \\*[$1] \\*[**] \"         otherwise append and repeat
-.              \}
-.          \}\}
-.
-.          as \\*[$1] \\*[**]\"
-.        \}
-.
-.        as args " \\$@\"
-.    \}\}
-.
-.    return
-.  \}
-..
-.
-.
-.\"    Utility macro:  .index <string1> <string2>
-.\"
-.\"            Check whether <string2> is a substring of <string1> and
-.\"            return its position in number register `t*index', starting
-.\"            with 1.  If not found, return 0.  If <string2> is empty,
-.\"            set `t*index' to -999.
-.de t*index
-.  if "\\$2"" \{\
-.    nr t*index -999
-.    return
-.  \}
-.
-.  length ** \\$1\a
-.  length $2 \\$2
-.  nr * 0-1 1
-.
-.  while (\\n+[*] < \\n[**]) \{\
-.    ds * \\$1\a\"
-.    substring * \\n[*] (\\n[*] + \\n[$2] - 1)
-.    \" The surrounding \? escapes emulate string comparison.
-.    if "\?\\*[*]\?"\?\\$2\?" \
-.      break
-.  \}
-.
-.  ie (\\n[*] == \\n[**]) \
-.    nr t*index 0
-.  el \
-.    nr t*index (\\n[*] + 1)
-..
-.
-.
-.\"    ******************************************************************
-.\"    ********        non-accumulating space .t*SP [v]        **********
-.\"    **                                                              **
-.\"    **      nl vor erster Seite -1, oben auf Seite 0 resp. tH       **
-.\"    **      .k nach .sp oder .br 0,                                 **
-.\"    **              sonst Laenge der angefangenen Zeile             **
-.\"    **      Der Merker M# fuer vorangegangenes .t*SP wird in .HM am **
-.\"    **      Seitenanfang zurueckgesetzt.                            **
-.\"    **      ganz richtig ist .sp + .br = .br + .sp = .sp            **
-.\"    ******************************************************************
-.de t*SP
-.  if (\\n[nl] < 0) \
-.    br                        \"      start very first page
-.  nr * \\n[.p]                \"      save current page length
-.
-.  ie "\\$1"" \
-.    pl +1             \"      without arg increase page length by 1v
-.  el \
-.    pl +\\$1          \"      otherwise use \\$1
-.
-.  nr ** (\\n[.p] - \\n[*])    \" ** now holds arg for .t*SP in base units
-.  pl \\n[*]u          \"      restore page length
-.
-.  \" we do nothing at start of new page or column
-.  if ((\\n[nl] - \\n[tH]) & (\\n[nl] - \\n[<<]) : \\n[.k]) \{\
-.    ie ((\\n[.d] - \\n[M#]) : \\n[.k]) \{\
-.      sp \\n[**]u     \"      execute .sp
-.      nr S# \\n[**]   \"      store ** in S#
-.    \}
-.    el \{\
-.      if (\\n[**] - \\n[S#]) \{\
-.        sp (\\n[**]u - \\n[S#]u)\"    emit difference to previous .t*SP
-.        nr S# \\n[**] \"      store ** in S#
-.    \}\}
-.
-.    nr M# \\n[.d]     \"      store vertical position .d in M#
-.  \}
-..
-.
-.
-.\"    ******************************************************************
-.\"    **              Perform all arguments once                      **
-.\"    **                      P1 is nestable                          **
-.\"    ******************************************************************
-.de t*P1
-.  \" `while' command is about five times faster than recursion!
-.  while \\n[.$] \{\
-.    nop \\$1
-.    shift
-.  \}
-..
-.
-.
-.\"    ******************************************************************
-.\"    **      Hilfsmakro zum Einstellen von Schriftgroesse und        **
-.\"    **      Zeilenabstand, bezogen auf Anfangswerte \n[t*s]         **
-.\"    **      und \n[t*v] sowie fuer Hyphenation:                     **
-.\"    **              .pv s v hy# hart;  macht .br                    **
-.\"    **      Bei 4. Argument setzen der Register s und v und hy.     **
-.\"    **      Fuer angefangene Zeile die vorgefundenen Einstellungen  **
-.\"    **                                                              **
-.\"    **   Auxiliary macro to set internal registers for font size    **
-.\"    **   and line spacing, relative to initial values \n[t*s] and   **
-.\"    **   \n[t*v]. Optionally sets hyphenation. A fourth argument    **
-.\"    **   initializes internal registers to global default values.   **
-.\"    ******************************************************************
-.de t*pv
-.  br
-.
-.  if \\n[.$] \
-.    ps (\\n[t*s]u * \\$1z / 1z)
-.
-.  ie (\\n[.$] - 1) \
-.    vs (\\n[t*v]u * \\$2p / 1p)
-.  el \{\
-.    vs (\\n[t*v]u * \\$1p / 1p)
-.    return
-.  \}
-.
-.  if !""\\$3" \
-.    hy \\$3
-.
-.  if !""\\$4" \{\
-.    nr t*v \\n[.v]
-.    nr t*s \\n[.ps]
-.    nr t*hy \\n[.hy]
-.  \}
-..
-.
-.
-.\"    ******************************************************************
-.\"    **              Hilfsmakros pop/pops/popr (pop stackelement):   **
-.\"    **              pop or popr:    pop register                    **
-.\"    **              pops:           pop string                      **
-.\"    **              .pop[s|r] reg|string stackname                  **
-.\"    **                  reg|string: name of reg/string to get the   **
-.\"    **                       popped element                         **
-.\"    **                  stack: name of stack                        **
-.\"    ******************************************************************
-.de *pop
-.  ie "\\$1"pops" \
-.    ds \\$2 \\$4\"            pop first stackelement
-.  el \
-.    nr \\$2 \\$4
-.
-.  ds $3 \\$3\"                        remember stackname
-.  shift 4             \"      shift four args
-.
-.  ds \\*[$3] "\\$@\"          fill stack with remaining elements
-..
-.
-.de pop
-.  *pop \\$0 \\$1 \\$2 \\*[\\$2]
-..
-.
-.als popr pop
-.als pops pop
-.
-.
-.\"    ******************************************************************
-.\"    **              process diversion                               **
-.\"    ******************************************************************
-.de t*DI
-.  nr * \\n[.u]
-.  nf          \"      diversion is already formatted - output it unchanged
-.  \\$1                \"      output the diversion ...
-.  rm \\$1     \"      ... and remove it
-.  if \\n[*] \
-.    fi                \"      reactivate formatting
-..
-.
-.\"    ******************************************************************
-.\"    **              error checking at end                           **
-.\"    ******************************************************************
-.de t*EM
-.
-.  if !"\\*[t*kept]"" \{\
-.    tm1 "hdtbl: Not all tables have been printed.
-.    tm1 "       Add `.bp' at the end of your document.
-.  \}
-.  if !"\\*[t*held]"" \{\
-.    tm1 "hdtbl: There are held tables which haven't been printed.
-.    tm1 "       Add `.t*free' at the end of your document.
-.  \}
-.  if \\n[t*#] \
-.    tm hdtbl: Missing `.ETB' macro; last .TBL in \\*[t*FN] at line \\*[t*LN].
-..
-.
-.\" EOF
diff --git a/contrib/hdtbl/hdmisc.tmac-u b/contrib/hdtbl/hdmisc.tmac-u
new file mode 100644 (file)
index 0000000..33111eb
--- /dev/null
@@ -0,0 +1,333 @@
+.ig
+
+hdmisc.tmac
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
+written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
+
+groff 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 3 of the License, or
+(at your option) any later version.
+
+groff 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, see <http://www.gnu.org/licenses/>.
+
+..
+.
+.
+.\" %beginstrip%
+.
+.if d t*getarg \
+.  nx
+.
+.
+.\"    ******************************************************************
+.\"    **      Some macros and default settings needed by hdtbl        **
+.\"    ******************************************************************
+.
+.
+.\"    Utility macro:  .getarg <key> ...
+.\"
+.\"            Get macro argument.  This macro searches <key> in the
+.\"            remaining arguments and assigns its value to a string
+.\"            register named <key>.  The following syntax forms are
+.\"            recognized.
+.\"
+.\"                    <key>=<val>     Assign <val> to string <key>.
+.\"                                    <val> must not contain spaces.
+.\"                    <key>='<val>'   Assign <val> to string <key>.
+.\"                                    <val> can contain spaces.
+.\"                    <key>=          Assign '=' to string <key>.
+.\"                    <key>           Assign 'key' to string <key>.
+.\"
+.\"            After return, the string 'args' contains the remaining
+.\"            arguments.
+.\"
+.\"            Example: With the definition of string 'foo' as
+.\"
+.\"                    .ds foo aaa=xxx bbb ccc='yyy zzz' ddd= eee
+.\"
+.\"            a call to 'getarg' with
+.\"
+.\"                    .getarg ccc \*[foo]
+.\"
+.\"            sets string 'ccc' to value 'yyy zzz'.  The string 'args'
+.\"            now contains 'aaa=xxx bbb ddd= eee'.  An additional call
+.\"            like
+.\"
+.\"                    .getarg ddd \*[args]
+.\"
+.\"            sets string 'ddd' to value '=', and 'args' contains
+.\"            'aaa=xxx bbb eee'.
+.de t*getarg
+.  ds \\$1
+.  ds args
+.
+.  if (\\n[.$] < 2) \
+.    return
+.
+.  ds $1 \\$1\"
+.  shift
+.
+.  length * \\*[$1]
+.  while \\n[.$] \{\
+.    ds * "\\$1\"
+.    ds ** "\\$1\"
+.    length ** \\*[**]
+.    shift
+.    if (\\n[*] > \\n[**]) \{\
+.      as args " "\\*[**]"\"                   value too short, repeat
+.      continue
+.    \}
+.    substring * 0 (\\n[*] - 1)
+.    \" The surrounding \? escapes emulate string comparison.
+.    ie !"\?\\*[$1]\?"\?\\*[*]\?" \{\
+.      as args " "\\*[**]"\"                   key not found, repeat
+.      continue
+.    \}
+.    el \{\
+.      ie "\?\\*[**]\?"\?\\*[$1]\?" \
+.        ds \\*[$1] \\*[$1]\"                  return key as string
+.      el \{\
+.        ie "\?\\*[**]\?"\?\\*[$1]=\?" \
+.          ds \\*[$1] =\"                      return '='
+.        el \{\
+.          substring ** (\\n[*] + 1) -1
+.          ds * \\*[**]\"
+.          substring * 0 0
+.
+.          \" check whether value starts with quote
+.          if "\?\\*[*]\?"\?'\?" \{\
+.            substring ** 1 -1
+.            ds * \\*[**]\"
+.            substring * -1 -1
+.
+.            \" search final quote
+.            ie "\?\\*[*]\?"\?'\?" \
+.              substring ** 0 -2
+.            el \{\
+.              as \\*[$1] \\*[**] \"           not found, append argument
+.
+.              while 1 \{\
+.                ds ** \\$1\"                  get next argument
+.                ds * \\$1\"
+.                shift
+.                substring * -1 -1
+.
+.                if "\?\\*[*]\?"\?'\?" \{\
+.                  substring ** 0 -2
+.                  break               \"      break if no final quote
+.                \}
+.
+.                as \\*[$1] \\*[**] \"         otherwise append and repeat
+.              \}
+.          \}\}
+.
+.          as \\*[$1] \\*[**]\"
+.        \}
+.
+.        as args " \\$@\"
+.    \}\}
+.
+.    return
+.  \}
+..
+.
+.
+.\"    Utility macro:  .index <string1> <string2>
+.\"
+.\"            Check whether <string2> is a substring of <string1> and
+.\"            return its position in number register 't*index', starting
+.\"            with 1.  If not found, return 0.  If <string2> is empty,
+.\"            set 't*index' to -999.
+.de t*index
+.  if "\\$2"" \{\
+.    nr t*index -999
+.    return
+.  \}
+.
+.  length ** \\$1\a
+.  length $2 \\$2
+.  nr * 0-1 1
+.
+.  while (\\n+[*] < \\n[**]) \{\
+.    ds * \\$1\a\"
+.    substring * \\n[*] (\\n[*] + \\n[$2] - 1)
+.    \" The surrounding \? escapes emulate string comparison.
+.    if "\?\\*[*]\?"\?\\$2\?" \
+.      break
+.  \}
+.
+.  ie (\\n[*] == \\n[**]) \
+.    nr t*index 0
+.  el \
+.    nr t*index (\\n[*] + 1)
+..
+.
+.
+.\"    ******************************************************************
+.\"    ********        non-accumulating space .t*SP [v]        **********
+.\"    **                                                              **
+.\"    **      nl vor erster Seite -1, oben auf Seite 0 resp. tH       **
+.\"    **      .k nach .sp oder .br 0,                                 **
+.\"    **              sonst Laenge der angefangenen Zeile             **
+.\"    **      Der Merker M# fuer vorangegangenes .t*SP wird in .HM am **
+.\"    **      Seitenanfang zurueckgesetzt.                            **
+.\"    **      ganz richtig ist .sp + .br = .br + .sp = .sp            **
+.\"    ******************************************************************
+.de t*SP
+.  if (\\n[nl] < 0) \
+.    br                        \"      start very first page
+.  nr * \\n[.p]                \"      save current page length
+.
+.  ie "\\$1"" \
+.    pl +1             \"      without arg increase page length by 1v
+.  el \
+.    pl +\\$1          \"      otherwise use \\$1
+.
+.  nr ** (\\n[.p] - \\n[*])    \" ** now holds arg for .t*SP in base units
+.  pl \\n[*]u          \"      restore page length
+.
+.  \" we do nothing at start of new page or column
+.  if ((\\n[nl] - \\n[tH]) & (\\n[nl] - \\n[<<]) : \\n[.k]) \{\
+.    ie ((\\n[.d] - \\n[M#]) : \\n[.k]) \{\
+.      sp \\n[**]u     \"      execute .sp
+.      nr S# \\n[**]   \"      store ** in S#
+.    \}
+.    el \{\
+.      if (\\n[**] - \\n[S#]) \{\
+.        sp (\\n[**]u - \\n[S#]u)\"    emit difference to previous .t*SP
+.        nr S# \\n[**] \"      store ** in S#
+.    \}\}
+.
+.    nr M# \\n[.d]     \"      store vertical position .d in M#
+.  \}
+..
+.
+.
+.\"    ******************************************************************
+.\"    **              Perform all arguments once                      **
+.\"    **                      P1 is nestable                          **
+.\"    ******************************************************************
+.de t*P1
+.  \" 'while' command is about five times faster than recursion!
+.  while \\n[.$] \{\
+.    nop \\$1
+.    shift
+.  \}
+..
+.
+.
+.\"    ******************************************************************
+.\"    **      Hilfsmakro zum Einstellen von Schriftgroesse und        **
+.\"    **      Zeilenabstand, bezogen auf Anfangswerte \n[t*s]         **
+.\"    **      und \n[t*v] sowie fuer Hyphenation:                     **
+.\"    **              .t*pv s v hy# hart;  macht .br                  **
+.\"    **      Bei 4. Argument setzen der Register s und v und hy.     **
+.\"    **      Fuer angefangene Zeile die vorgefundenen Einstellungen  **
+.\"    **                                                              **
+.\"    **   Auxiliary macro to set internal registers for font size    **
+.\"    **   and line spacing, relative to initial values \n[t*s] and   **
+.\"    **   \n[t*v]. Optionally sets hyphenation. A fourth argument    **
+.\"    **   initializes internal registers to global default values.   **
+.\"    ******************************************************************
+.de t*pv
+.  br
+.
+.  if \\n[.$] \
+.    ps (\\n[t*s]u * \\$1z / 1z)
+.
+.  ie (\\n[.$] - 1) \
+.    vs (\\n[t*v]u * \\$2p / 1p)
+.  el \{\
+.    vs (\\n[t*v]u * \\$1p / 1p)
+.    return
+.  \}
+.
+.  if !""\\$3" \
+.    hy \\$3
+.
+.  if !""\\$4" \{\
+.    nr t*v \\n[.v]
+.    nr t*s \\n[.ps]
+.    nr t*hy \\n[.hy]
+.  \}
+..
+.
+.
+.\"    ******************************************************************
+.\"    **              Hilfsmakros pop/pops/popr (pop stackelement):   **
+.\"    **              pop or popr:    pop register                    **
+.\"    **              pops:           pop string                      **
+.\"    **              .pop[s|r] reg|string stackname                  **
+.\"    **                  reg|string: name of reg/string to get the   **
+.\"    **                       popped element                         **
+.\"    **                  stack: name of stack                        **
+.\"    ******************************************************************
+.de *pop
+.  ie "\\$1"pops" \
+.    ds \\$2 \\$4\"            pop first stackelement
+.  el \
+.    nr \\$2 \\$4
+.
+.  ds $3 \\$3\"                        remember stackname
+.  shift 4             \"      shift four args
+.
+.  ds \\*[$3] "\\$@\"          fill stack with remaining elements
+..
+.
+.de pop
+.  *pop \\$0 \\$1 \\$2 \\*[\\$2]
+..
+.
+.als popr pop
+.als pops pop
+.
+.
+.\"    ******************************************************************
+.\"    **              process diversion                               **
+.\"    ******************************************************************
+.de t*DI
+.  nr * \\n[.u]
+.  nf          \"      diversion is already formatted - output it unchanged
+.  \\$1                \"      output the diversion ...
+.  rm \\$1     \"      ... and remove it
+.  if \\n[*] \
+.    fi                \"      reactivate formatting
+..
+.
+.\"    ******************************************************************
+.\"    **              error checking at end                           **
+.\"    ******************************************************************
+.de t*EM
+.
+.  if !"\\*[t*kept]"" \{\
+.    tm1 "hdtbl: Not all tables have been printed.
+.    tm1 "       Add '.bp' at the end of your document.
+.  \}
+.  if !"\\*[t*held]"" \{\
+.    tm1 "hdtbl: There are held tables which haven't been printed.
+.    tm1 "       Add '.t*free' at the end of your document.
+.  \}
+.  if \\n[t*#] \
+.    tm hdtbl: Missing '.ETB' macro; last .TBL in \\*[t*FN] at line \\*[t*LN].
+..
+.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/contrib/hdtbl/hdtbl.am b/contrib/hdtbl/hdtbl.am
new file mode 100644 (file)
index 0000000..3537aa6
--- /dev/null
@@ -0,0 +1,153 @@
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
+#      Written by Werner Lemberg (wl@gnu.org)
+#      Automake migration by Bertrand Garrigues
+#
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+hdtbl_srcdir = $(top_srcdir)/contrib/hdtbl
+hdtbl_builddir = $(top_builddir)/contrib/hdtbl
+
+man7_MANS += contrib/hdtbl/groff_hdtbl.7
+
+# Groff command used to generate .ps files
+HDTBL_TFLAG = -M$(hdtbl_srcdir) -M$(hdtbl_builddir)
+HDTBL_PFLAG=-t -p -e -U
+HDTBLGROFF = \
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  $(GROFFBIN) $(FFLAG) $(TFLAG) $(HDTBL_TFLAG) $(HDTBL_PFLAG)
+
+# Files installed in $(tmacdir).
+# These files are generated with 'strip.sed' from their unstripped source file
+# equivalent (e.g. hdtbl.tmac is generated from hdtbl.tmac-u)
+HDTBLSTRIPFILES = \
+  contrib/hdtbl/hdtbl.tmac \
+  contrib/hdtbl/hdmisc.tmac
+hdtbltmacdir = $(tmacdir)
+hdtbltmac_DATA = $(HDTBLSTRIPFILES)
+
+# Files installed in $(exampledir)/hdtbl.  HDTBLEXAMPLEFILES are
+# located in the source tree, while HDTBLPROCESSEDEXAMPLEFILES are
+# generated in the build tree.
+
+# These files are handled by the '.in.roff' rule.
+HDTBLGENFILES = \
+  contrib/hdtbl/examples/fonts_n.roff \
+  contrib/hdtbl/examples/fonts_x.roff
+EXTRA_DIST += \
+  contrib/hdtbl/examples/fonts_n.in \
+  contrib/hdtbl/examples/fonts_x.in \
+  contrib/hdtbl/examples/test-hdtbl.sh.in
+
+HDTBLEXAMPLEFILES = \
+  contrib/hdtbl/examples/common.roff \
+  contrib/hdtbl/examples/chess_board.roff \
+  contrib/hdtbl/examples/color_boxes.roff \
+  contrib/hdtbl/examples/color_nested_tables.roff \
+  contrib/hdtbl/examples/color_table_cells.roff \
+  contrib/hdtbl/examples/color_transitions.roff \
+  contrib/hdtbl/examples/col_rowspan_colors.roff \
+  contrib/hdtbl/examples/mixed_pickles.roff \
+  contrib/hdtbl/examples/rainbow.roff \
+  contrib/hdtbl/examples/short_reference.roff
+
+HDTBLPROCESSEDEXAMPLEFILES = \
+  contrib/hdtbl/examples/chess_board.ps \
+  contrib/hdtbl/examples/color_boxes.ps \
+  contrib/hdtbl/examples/color_nested_tables.ps \
+  contrib/hdtbl/examples/color_table_cells.ps \
+  contrib/hdtbl/examples/color_transitions.ps \
+  contrib/hdtbl/examples/col_rowspan_colors.ps \
+  contrib/hdtbl/examples/fonts_n.ps \
+  contrib/hdtbl/examples/fonts_x.ps \
+  contrib/hdtbl/examples/mixed_pickles.ps \
+  contrib/hdtbl/examples/rainbow.ps \
+  contrib/hdtbl/examples/short_reference.ps
+
+hdtblexampledir = $(exampledir)/hdtbl
+
+if BUILD_EXAMPLES
+dist_hdtblexample_DATA = $(HDTBLEXAMPLEFILES)
+nodist_hdtblexample_DATA = \
+  $(HDTBLGENFILES) \
+  $(HDTBLPROCESSEDEXAMPLEFILES) \
+  gnu.eps
+else
+EXTRA_DIST += $(HDTBLEXAMPLEFILES) 
+endif
+$(hdtblexample_DATA): $(HDTBLSTRIPFILES)
+
+MOSTLYCLEANFILES += $(HDTBLGENFILES) $(HDTBLPROCESSEDEXAMPLEFILES) \
+  $(HDTBLSTRIPFILES)
+
+EXTRA_DIST += \
+  contrib/hdtbl/ChangeLog \
+  contrib/hdtbl/TODO \
+  contrib/hdtbl/groff_hdtbl.7.man \
+  contrib/hdtbl/hdtbl.tmac-u \
+  contrib/hdtbl/hdmisc.tmac-u
+
+if BUILD_EXAMPLES
+hdtbl_TESTS = contrib/hdtbl/examples/test-hdtbl.sh
+TESTS += $(hdtbl_TESTS)
+contrib/hdtbl/examples/test-hdtbl.sh: $(top_builddir)/config.status \
+       $(HDTBLPROCESSEDEXAMPLEFILES) $(top_srcdir)/contrib/hdtbl/examples/test-hdtbl.sh.in
+       sed -e "s|[@]abs_top_builddir[@]|$(abs_top_builddir)|g" \
+           -e "s|[@]GHOSTSCRIPT[@]|$(GHOSTSCRIPT)|g" \
+               $(top_srcdir)/contrib/hdtbl/examples/test-hdtbl.sh.in > $@
+       chmod +x $@
+MOSTLYCLEANFILES += $(hdtbl_TESTS)
+endif
+
+# Rule to generate ps and roff files
+SUFFIXES += .roff .in .ps
+
+.roff.ps:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(HDTBLGROFF) -Tps \
+            -dfontpath=$(top_srcdir)/font \
+            -dsopath=$(hdtbl_srcdir)/ \
+            -mhdtbl $< >$@
+.in.roff:
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && sed -e "s|[@]fontdir[@]|$(fontdir)|" \
+              -e "s|[@]EGREP[@]|$(EGREP)|" $< >$@
+
+
+$(HDTBLPROCESSEDEXAMPLEFILES): gnu.eps groff troff pic tbl \
+  contrib/hdtbl/examples/common.roff
+
+$(HDTBLSTRIPFILES): $(top_srcdir)/tmac/strip.sed
+       @$(MKDIR_P) `dirname $@`
+       sed -f $(top_srcdir)/tmac/strip.sed $(hdtbl_srcdir)/`basename $@`-u > $@;
+
+uninstall_groffdirs: uninstall-hdtbl-hook
+uninstall-hdtbl-hook:
+       if test -d $(DESTDIR)$(hdtblexampledir); then \
+         rmdir $(DESTDIR)$(hdtblexampledir); \
+       fi
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/contrib/hdtbl/hdtbl.tmac b/contrib/hdtbl/hdtbl.tmac
deleted file mode 100644 (file)
index 069f9ce..0000000
+++ /dev/null
@@ -1,1003 +0,0 @@
-.\"    -*- nroff -*-
-.ig
-
-hdtbl.tmac
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2005-2014  Free Software Foundation, Inc.
-written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
-
-groff 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 3 of the License, or
-(at your option) any later version.
-
-groff 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, see <http://www.gnu.org/licenses/>.
-
-..
-.
-.
-.\"    *****************************************************************
-.\"    *               hdtbl - Heidelberger table macros               *
-.\"    *                       Vers. 0.91 December 2005                *
-.\"    *****************************************************************
-.
-.if d TBL \
-.  nx
-.
-.mso hdmisc.tmac
-.mso 62bit.tmac
-.
-.
-.\"    *****************************************************************
-.\"    *               default values for some arguments               *
-.\"    *****************************************************************
-.
-.ds t*hl s\"
-.ds t*vl s\"
-.ds t*tal l\"
-.ds t*hal b\"
-.ds t*val t\"
-.ds t*ff \\n[.fam]\"
-.ds t*fst \\n[.f]\"
-.ds t*fsz 1 1\"
-.ds t*fgc red4\"
-.ds t*bgc bisque\"
-.ds t*bc red4\"
-.nr t*cpd .5n
-.nr t*csp .5n
-.nr t*b .1n
-.nr t*cols 1
-.nr t*v \n[.v]
-.nr t*s \n[.ps]
-.nr t*hy \n[.hy]
-.nr t*l \n[.ll]
-.
-.
-.\"                    defaults for table captions
-.nr t*cptn 0 1
-.ds t*cptn "".sp .4" \
-            ".t*pv 1.0 1.0" \
-            ".ad l" \
-            "\m[\\*[t*fgc]]Table \\n+[t*cptn]:\0\c\k*"\"
-.
-.
-.\" %beginstrip%
-.
-.\" for better error messages
-.ds nth-1 st\"
-.ds nth-2 nd\"
-.ds nth-3 rd\"
-.
-.\" initialization of various registers
-.nr t*# 0      \"      table nesting level
-.nr t*numb 0 1 \"      held table diversion #
-.
-.ds *#trc*
-.
-.
-.\"    *****************************************************************
-.\"    *       The four base macros and the two optional macros        *
-.\"    *****************************************************************
-.
-.ie n \
-.  ds g tty:\"
-.el \
-.  ds g ps: exec\"
-.
-.\"    TBL:    table start
-.\"            predecessor:    text, TD or ETB
-.\"            successor:      CPTN or TR
-.de TBL
-.  ds t*m\\n[t*#] \\n[.m]\"
-.  ie \\n[t*#] \
-.    br
-.  el \{\
-.    ds * \\n[.ev]\"
-.    ev t*tbl
-.    evc \\*[*]
-.    di t*tbl0
-.    sp .4                             \" XXX: hard-coded value
-.    nr t*i \\n[.i]
-.    ll -\\n[.i]u
-.    in 0
-.  \}
-.  nr t*# +1
-.
-.  \" Save current location for error checking at end
-.  ds t*FN \\[.F]
-.  ds t*LN \\[.c]
-.
-.  t*getarg cols \\$@\"        from here string `args' contains the rest of \\$@
-.  ie "\\*[cols]"" \
-.    nr t*cols\\n[t*#] \\n[t*cols]
-.  el \{\
-.    ie \B\a\\*[cols]\a \
-.      nr t*cols\\n[t*#] \\*[cols]
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid number of columns value `\\*[cols]'.
-.  \}
-.
-.  t*getarg cpd \\*[args]                 \"   cell padding
-.  ie "\\*[cpd]"" \
-.    nr t*cpd\\n[t*#] \\n[t*cpd]
-.  el \{\
-.    ie \B\a\\*[cpd]\a \
-.      nr t*cpd\\n[t*#] \\*[cpd]
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid cell padding value `\\*[cpd]'.
-.  \}
-.
-.  t*getarg csp \\*[args]                 \"   cell spacing
-.  ie "\\*[csp]"" \
-.    nr t*csp\\n[t*#] \\n[t*csp]
-.  el \{\
-.    ie \B\a\\*[csp]\a \
-.      nr t*csp\\n[t*#] \\*[csp]
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid cell spacing value `\\*[csp]'.
-.  \}
-.
-.  t*getarg border \\*[args]              \"   border thickness
-.  ie "\\*[border]"=" \
-.    nr t*b\\n[t*#] 0-1
-.  el \{\
-.    ie "\\*[border]"" \
-.      nr t*b\\n[t*#] \\n[t*b]
-.    el \{\
-.      ie \B\a\\*[border]\a \
-.        nr t*b\\n[t*#] \\*[border]
-.      el \
-.        tm \\n[.F]:\\n[.c]: Invalid border thickness value `\\*[border]'.
-.  \}\}
-.
-.  t*getarg bc \\*[args]                  \"   border color
-.  ds t*bc\\n[t*#] \\*[t*bc]\"
-.  if !"\\*[bc]"" \{\
-.    ie m\\*[bc] \
-.      ds t*bc\\n[t*#] \\*[bc]\"
-.    el \{\
-.      ie "\\*[bc]"=" \
-.        ds t*bc\\n[t*#] =\"
-.      el \
-.        tm \\n[.F]:\\n[.c]: Invalid border color `\\*[bc]'.
-.  \}\}
-.  ie "\\*[bc]"=" \
-.    ds t*bc\\n[t*#]
-.  el \{\
-.    ie "\\*[bc]"" \
-.      ds t*bc\\n[t*#] \\*[t*bc]\"
-.    el \
-.      ds t*bc\\n[t*#] \\*[bc]\"
-.  \}
-.
-.  t*getarg width \\*[args]               \"   table/col widths
-.  if "\\*[width]"=" \
-.    ds width
-.
-.  nr b/2\\n[t*#] (\\n[t*b\\n[t*#]] / 2)\"     shortcut
-.  nr cscp\\n[t*#] (\\n[t*csp\\n[t*#]] + \\n[t*cpd\\n[t*#]])\"  aux. register
-.
-.  t*getarg height \\*[args]              \"   table outline height
-.  ie "\\*[height]"" \
-.    nr t*height\\n[t*#] 0
-.  el \{\
-.    ie \B\a\\*[height]\a \
-.      nr t*height\\n[t*#] (\\*[height] \
-                            - ((2 * \\n[cscp\\n[t*#]]) \
-                                + (3 * \\n[b/2\\n[t*#]])))
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid height value `\\*[height]'.
-.  \}
-.
-.  t*cl \\*[width]                      \"     get cell widths and offsets
-.  t*args \\n[t*#]                      \"     look for common arguments
-.
-.  t*getarg tal \\*[args]                 \"   table horizontal alignment
-.  if "\\*[tal]"" \
-.    ds tal \\*[t*tal]\"
-.  ie "\\*[tal]"l" \
-.    nr in\\n[t*#] \\n[.i]
-.  el \{\
-.    ie "\\*[tal]"c" \
-.      nr in\\n[t*#] (\\n[.l] - \\n[ll\\n[t*#]]/2 + \\n[.i])
-.    el \{\
-.      ie "\\*[tal]"r" \
-.        nr in\\n[t*#] (\\n[.l] - \\n[ll\\n[t*#]] + \\n[.i])
-.      el \{\
-.        tmc \\n[.F]:\\n[.c]: Invalid horizontal table alignment `\\*[tal]':
-.        tm1 " must be `l', `c' or `r'.
-.  \}\}\}
-.
-.  nr t*r#\\n[t*#] 0                   \"      initialize row index
-.  mk toptbl\\n[t*#]
-.
-.  t*P1 \\*[args]
-..
-.
-.
-.\"    CPTN:   optional table caption
-.\"            predecessor:    TBL
-.\"            successor:      TR
-.de CPTN
-.  ft 1
-.
-.  if "\\$0"CPTN" \
-.    if \\n[t*r#\\n[t*#]] \{\
-.      tmc \\n[.F]:\\n[.c]: Invalid placement of `.CPTN';
-.      tm1 " must be called immediately after `.TBL'.
-.      return
-.    \}
-.
-.  t*getarg val \\$@
-.  ds args\\n[t*#] "\\*[args]\"
-.
-.  t*index "\\*[args]" .TR
-.  ie \\n[t*index] \{\
-.    ds *a\\n[t*#] "\\*[args]\"
-.    substring args\\n[t*#] 0 \\n[t*index]
-.    substring *a\\n[t*#] \\n[t*index]-2 -1
-.  \}
-.  el \
-.    ds *a\\n[t*#]
-.
-.  ie "\\*[val]"b" \{\
-.    de t*cptn\\n[t*#]
-.      *CPTN \\*[args\\n[t*#]]
-.      rm t*cptn\\n[t*#]
-\\..
-.  \}
-.  el \{\
-.    ll (\\n[ll\\n[t*#]]u + \\n[in\\n[t*#]]u)
-.    in \\n[in\\n[t*#]]u
-.    t*P1 \\*[t*cptn]
-'    in +\\n[*]u
-.    t*P1 \\*[args\\n[t*#]]
-.    t*pv 1 1
-.    in
-.    mk toptbl\\n[t*#]
-.  \}
-.
-.  t*P1 \\*[*a\\n[t*#]]
-..
-.
-.als *CPTN CPTN
-.
-.
-.\"    TR:     table row
-.\"            predecessor:    TBL, CPTN, text, TD or ETB
-.\"            successor:      TD
-.de TR
-.  ft 1
-.  if !\\n[t*#] \{\
-.    tm \\n[.F]:\\n[.c]: Table row (.TR) without preceding table start (.TBL).
-.    return
-.  \}
-.
-.  \" finish previous data cell, if any
-.  if \\n[t*r#\\n[t*#]] \
-.    t*dntr 1 \\n[c#\\*[#t#r]] \\n[t*cols\\n[t*#]] \\*[*#trc*]
-.
-.  nr t*r#\\n[t*#] +1                  \"      row number in this table
-.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"                table row identifier
-.                                      \"      (<level>*<row>)
-.  nr c#\\*[#t#r] 0 1                  \"      clear cell counter
-.  nr dntr\\*[#t#r] 0 1                        \"      clear accumulated row height
-.
-.  t*getarg height \\$@
-.  ie "\\*[height]"" \
-.    nr t*height\\*[#t#r] 0
-.  el \{\
-.    ie \B\a\\*[height]\a \
-.      nr t*height\\*[#t#r] \\*[height]
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid table row height `\\*[height]'.
-.  \}
-.
-.  \"  If there is a TR with height `height', the total height of the table
-.  \"  is too high by 3/2 b, independent of the number of TR with `height'.
-.  t*args \\*[#t#r] \\n[t*#]            \"     look for common arguments
-.
-.  t*P1 \\*[args]
-..
-.
-.
-.\"    TH:     optional table header cell
-.\"            predecessor:    text, TD or TR
-.\"            successor:      text, TD, TR, TBL or ETB
-.\"                                                            
-.\"            cell content bolded and horizontally and vertically centered,
-.\"            else like .TD
-.de TH
-.  ft 1
-.  t*getarg hal \\$@
-.  if "\\*[hal]"" \
-.    ds hal c\"
-.
-.  t*getarg val \\*[args]
-.  if "\\*[val]"" \
-.    ds val m\"
-.
-.  t*getarg fst \\*[args]
-.  if "\\*[fst]"" \
-.    ds fst B\"
-.
-.  TD hal=\\*[hal] val=\\*[val] fst=\\*[fst] \\*[args]
-..
-.
-.
-.\"    TD:     table data cell
-.\"            predecessor:    text, TD or TR
-.\"            successor:      text, TD, TR, TBL or ETB
-.de TD
-.  ft 1
-.  \" finish previous data cell -- note the use of \E
-.  t*dntr 0 \\n[c#\\*[#t#r]]-1 \En[c#\\*[#t#r]] \\*[*#trc*]
-.
-.  ds *#trc* \\*[#t#r]*\\n[c#\\*[#t#r]]\"      table cell identifier
-.                                      \"      (<level>*<row>*<column>)
-.
-.  t*getarg rowspan \\$@
-.  nr rowspan 1
-.  if !"\\*[rowspan]"" \{\
-.    ie \B\a\\*[rowspan]\a \{\
-.      nr rowspan (\\*[rowspan] >? 1)
-.      nr *rsp*\\*[*#trc*] (\\n[rowspan] - 1)
-.    \}
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid value of `rowspan' keyword.
-.  \}
-.
-.  t*getarg colspan \\*[args]
-.  nr colspan 1
-.  if !"\\*[colspan]"" \{\
-.    ie \B\a\\*[colspan]\a \
-.      nr colspan (\\*[colspan] >? 1)
-.    el \
-.      tm \\n[.F]:\\n[.c]: Invalid value of `colspan' keyword.
-.  \}
-.
-.  t*args \\*[#trc] \\*[#t#r]           \"  look for common arguments
-.
-.  nr in\\*[#trc] \\n[in\\n[t*#]*\\n[c#\\*[#t#r]]]
-.  nr *cl \\n[cll\\n[t*#]*\\n[c#\\*[#t#r]]]
-.  nr * 0 1
-.  nr *r \\n[t*r#\\n[t*#]]
-.
-.  if (\\n[rowspan] - 1) \
-.    while (\\n+[*] <= \\n[rowspan]) \{\
-.      nr rspan\\n[t*#]*\\n[*r]*\\n[c#\\*[#t#r]] \\n[colspan]
-.      if (\\n[*] > 1) \
-.        nr cspan\\n[t*#]*\\n[*r]*\\n[c#\\*[#t#r]] \\n[colspan]
-.      nr *r +1
-.    \}
-.
-.  nr * 1 1
-.  nr *c \\n[c#\\*[#t#r]]
-.
-.  if (\\n[colspan] - 1) \{\
-.    nr vline\\*[*#trc*] 0-1           \"      set `no vl' flag
-.
-.    while (\\n+[*] <= \\n[colspan]) \{\
-.      nr *c +1
-.      nr *cl +(2 * \\n[cscp\\n[t*#]] \
-                + \\n[b/2\\n[t*#]] \
-                + \\n[cll\\n[t*#]*\\n[*c]])
-.      nr c#\\*[#t#r] +1
-.    \}
-.  \}
-.
-.  if (\\n[c#\\n[t*#]*\\n[t*r#\\n[t*#]]] > \\n[t*cols\\n[t*#]]) \{\
-.    ds * are\"
-.    ds ** columns\"
-.    if (\\n[c#\\*[#t#r]] == 1) \{\
-.      ds * is\"
-.      ds ** column\"
-.    \}
-.    tmc \\n[.F]:\\n[.c]: There \\*[*] \\n[c#\\*[#t#r]] table \\*[**] (.TD)
-.
-.    ds * are\"
-.    if (\\n[t*cols\\n[t*#]] == 1) \
-.      ds * is\"
-.    tm1 " but only \\n[t*cols\\n[t*#]] \\*[*] expected.
-.
-.    ds *
-.    length * \\n[.F]:\\n[.c]:
-.
-.    while \\n-[*] \
-.      ds * " \\*[*]\"
-.
-.    tm1 "\\*[*] Remaining .TDs and its contents are ignored.
-.
-.    di *t*dummy*                \"    bypass superfluous input
-.    return
-.  \}
-.
-.  di t*\\*[#trc]                \"    open cell diversion and set locals
-.  in 0
-.  nr cll\\*[#trc] \\n[*cl]
-.  ll \\n[*cl]u
-.  nr *cl\\n[t*#] \\n[.l]
-.  gcolor \\*[t*fgc\\*[#trc]]
-.  ad \\*[t*hal\\*[#trc]]
-.  fam \\*[t*ff\\*[#trc]]
-.  ft \\*[t*fst\\*[#trc]]
-.  t*pv \\*[t*fsz\\*[#trc]]
-.
-.  t*P1 \\*[args]
-..
-.
-.
-.\"    ETB:    end of table
-.\"            predecessor:    text, TD or ETB
-.\"            successor:      text, TD, TR or TBL
-.de ETB
-.  ie \\n[t*#] \
-.    if !\\n[t*r#\\n[t*#]] \{\
-.      tmc \\n[.F]:\\n[.c]: Each table (.TBL)
-.      tm1 " should contain at least one table row (.TR)!
-.    \}
-.  el \{\
-.    tmc \\n[.F]:\\n[.c]: Table end (.ETB)
-.    tm1 " without corresponding table start (.TBL)!
-.  \}
-.
-.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"                refresh table row identifier
-.  t*dntr 2 \\n[c#\\*[#t#r]] \\n[t*cols\\n[t*#]] \\*[*#trc*]
-.
-.  t*divs                        \"    print this table
-.
-.  sp \\n[b/2\\n[t*#]]u
-.  t*cptn\\n[t*#]
-.  nr t*# -1
-.
-.  ll \\n[*cl\\n[t*#]]u          \"    restore ll outside this table
-.  in 0                          \"    reset indent
-.  gcolor \\*[t*m\\n[t*#]]       \"    reset previous fgc
-.
-.  t*getarg hold \\$@
-.  if !\\n[t*#] \{\
-.    sp .5
-.    di
-.    in \\n[t*i]u
-.    ie "\\*[hold]"" \{\
-.      ie (\\n[.t] - \\n[dn]) \
-.        t*DI t*tbl0
-.      el \{\
-.        rn t*tbl0 t*tbl\\n+[t*numb]
-.        ds t*kept \\*[t*kept] t*tbl\\n[t*numb] \\n[dn]\"
-.      \}
-.    \}
-.    el \{\
-.      rn t*tbl0 t*hold\\n+[t*numb]
-.      tm \\n[.F]:\\n[.c]: Table t*hold\\n[t*numb] held.
-.      ds t*held \\*[t*held] t*hold\\n[t*numb] \\n[dn]\"
-.    \}
-.
-.    ev                                \"      restore previous environment
-.  \}
-.
-.  t*P1 \\*[args]
-..
-.
-.
-.\"    *****************************************************************
-.\"    *       Following the definition of five utility macros         *
-.\"    *       special to hdtbl.                                       *
-.\"    *       Other utility macros common to hdtbl and hdgroff        *
-.\"    *       are defined in the file hdmisc.tmac.                    *
-.\"    *****************************************************************
-.
-.
-.\"    .t*free [n]
-.\"            print the next [n] held table[s].
-.\"             Don't call it within a table!
-.\"            If the table is higher than the remaining space
-.\"            on the page, the table is printed on the next page.
-.de t*free
-.  if "\\$0"CPTN" \
-.    if \\n[t*r#\\n[t*#]] \{\
-.      tmc \\n[.F]:\\n[.c]: Invalid placement of `.t*free' within a table;
-.      tm1 " it must be called outside of any table.
-.      return
-.    \}
-.
-.  if "\\*[t*held]"" \{\
-.    tm \\n[.F]:\\n[.c]: No held tables.
-.    return
-.  \}
-.
-.  nr ** (\\$1 >? 1) 1
-.  while !""\\*[t*held]" \{\
-.    pops * t*held
-.    popr * t*held
-.
-.    ie (\\n[.t] - \\n[*]) \{\
-.      ev t*tbl
-.      t*DI \\*[*]
-.      ev
-.    \}
-.    el \{\
-.      rn \\*[*] t*tbl\\n+[t*numb]
-.      ds t*kept \\*[t*kept] t*tbl\\n[t*numb] \\n[*]\"
-.    \}
-.
-.    if !(\\n-[**] - 1) \
-.      return
-.  \}
-..
-.
-.
-.\"    The main utility macro for tables:
-.\"            If a table is closed by ETB, this macro is called.  It
-.\"            processes one complete table, i.e., all the table cell
-.\"            diversions, paints the cell backgrounds, draws
-.\"            horizontal and vertical table lines and the table border.
-.\"
-.\"            Nested tables are processed from inside to outside.
-.
-.de t*divs
-.  ll (\\n[t*l]u + 1c)                 \"      avoid warning `can't break line'
-.  nf
-.
-.  nr b/2 \\n[b/2\\n[t*#]]             \"      some abbreviations
-.  nr cscp \\n[cscp\\n[t*#]]
-.  nr cscpb (\\n[b/2] + \\n[cscp])
-.
-.  nr topdiv (\\n[.d] + \\n[b/2] - \\n[cscp])\"        top of cell diversion
-.  nr cscpb2 (\\n[b/2] / 2 + \\n[cscp])
-.
-.  nr #r 0 1
-.  \" outer loop for rows
-.  while (\\n+[#r] <= \\n[t*r#\\n[t*#]]) \{\
-.    \" TODO: insert code here for multipage tables
-.    nr * (\\n[#r] - 1)
-.    nr topdiv +(\\n[dntr\\n[t*#]*\\n[*]] + \\n[cscp] + \\n[cscpb])
-.
-.    \" if table still smaller than specified table height, increase it
-.    if ((\\n[#r] == \\n[t*r#\\n[t*#]]) & \\n[t*height\\n[t*#]]) \
-.      nr dntr\\n[t*#]*\\n[#r] (\\n[cscpb] \
-                                + \\n[toptbl\\n[t*#]] \
-                                + \\n[t*height\\n[t*#]] \
-                                - (\\n[topdiv] >? \\n[dntr\\n[t*#]*\\n[#r]]))
-.
-.    nr #c 0 1
-.    \" inner loop for cells
-.    while (\\n+[#c] <= \\n[t*cols\\n[t*#]]) \{\
-.      ds #trc \\n[t*#]*\\n[#r]*\\n[#c]\"
-.      \" continue if the diversion is empty
-.      if !d t*\\*[#trc] \
-.        continue
-.
-.      sp |\\n[topdiv]u
-.      in (\\n[in\\n[t*#]]u + \\n[in\\*[#trc]]u)\"     cell offset
-.      nr $1 \\n[dntr\\n[t*#]*\\n[#r]] \"      cell height
-.
-.      \" if we have spanned rows, calculate resulting row height
-.      \" and position of lower horizontal line
-.      if \\n[*rsp*\\*[#trc]] \{\
-.        nr * \\n[#r] 1
-.        nr rspan\\*[#trc] 0-1         \"      set `no hl' flag
-.        nr corr (\\n[dn\\*[#trc]] - \\n[dntr\\n[t*#]*\\n[#r]])
-.
-.        \" clear row span flags in following rows and update row height
-.        while \\n[*rsp*\\*[#trc]] \{\
-.          nr *rsp*\\*[#trc] -1
-.          nr rspan\\n[t*#]*\\n+[*]*\\n[#c] 0
-.          nr ** (\\n[dntr\\n[t*#]*\\n[*]] + \\n[cscp] + \\n[cscpb])
-.          nr corr -\\n[**]
-.          nr $1 +\\n[**]
-.        \}
-.
-.        if (\\n-[*] == \\n[t*r#\\n[t*#]]) \
-.          nr $1 ((\\n[t*height\\n[t*#]] \
-                   - \\n[.d] \
-                   + \\n[toptbl\\n[t*#]] \
-                   + \\n[cscpb]) \
-                     >? \\n[$1])
-.        nr dntr\\n[t*#]*\\n[*] +(\\n[corr] >? 0)
-.      \}
-.
-.      \" paint cell background
-.      nr * (2 * \\n[t*cpd\\n[t*#]] + \\n[cll\\*[#trc]])\"     background width
-.      nr $1 (\\n[$1] >? \\n[dn\\*[#trc]])\"   cell height
-.
-.      if !"\\*[t*bgc\\*[#trc]]"=" \{\
-.        nop \h'\\n[t*csp\\n[t*#]]u'\
-\M[\\*[t*bgc\\*[#trc]]]\
-\v'(-.67v - \\n[t*cpd\\n[t*#]]u)'\
-\D'P \\n[*]u 0 \
-     0 (2u * \\n[t*cpd\\n[t*#]]u + \\n[$1]u) \
-     -\\n[*]u 0'\
-\M[]
-.        sp -1
-.      \}
-.
-.      \" ***   horizontal and vertical single or double lines   ***
-.      \" double and single lines have the same thickness;
-.      \" the double lines' distance is the line thickness.
-.      \"
-.      \" `border=x': horizontal/vertical lines x/2 thick, minimum .1n
-.      \" `border=0': no border; horizontal/vertical lines .1n thick
-.      \" `border=': neither border nor horizontal/vertical lines
-.
-.      nr *t (.1n >? \\n[b/2])         \"      thickness of hl/vl; min. .1n
-.      in +\\n[cscp]u
-.
-.      \" check for vertical and horizontal lines
-.      if (1 + \\n[t*b\\n[t*#]]) \{\
-.        if !"\\*[t*bc\\n[t*#]]"=" \{\
-.          \" draw horizontal line between this cell and the one below
-.          if (\\n[t*r#\\n[t*#]] - \\n[#r] + \\n[rspan\\*[#trc]]) \{\
-.            if !"\\*[t*hl\\*[#trc]]"=" \{\
-.              sp \\n[$1]u
-.              nr * (\\n[cscp] + \\n[cscpb] + \\n[cll\\*[#trc]])
-.              nop \X'\*[g] 1 setlinecap'\
-\h'(-\\n[cscpb2]u - \\n[*t]u)'\
-\v'(\\n[cscpb2]u - .67v)'\
-\m[\\*[t*bc\\n[t*#]]]\
-\D't \\n[*t]u'\c
-.
-.              ie "\\*[t*hl\\*[#trc]]"d" \
-.                nop \v'-\\n[*t]u'\
-\D'l \\n[*]u 0'\
-\v'(2u * \\n[*t]u)'\
-\D'l -\\n[*]u 0'\
-\D't 0'
-.              el \
-.                nop \D'l \\n[*]u 0'\
-\D't 0'
-.
-.              sp (-\\n[$1]u - 1v)
-.          \}\}
-.
-.          nr rspan\\*[#trc] 0
-.
-.          \" draw vertical line between this cell and the one to the right
-.          if (\\n[t*cols\\n[t*#]] - \\n[#c] + \\n[vline\\*[#trc]]) \{\
-.            if !"\\*[t*vl\\*[#trc]]"=" \{\
-.              nop \X'\*[g] 1 setlinecap'\
-\v'(-\\n[cscpb2]u - .67v)'\
-\m[\\*[t*bc\\n[t*#]]]\
-\h'(\\n[cscpb2]u - \\n[*t]u + \\n[cll\\*[#trc]]u)'\c
-.
-.              ie "\\*[t*vl\\*[#trc]]"d" \
-.                nop \h'-\\n[*t]u'\
-\D't \\n[*t]u'\
-\D'l 0 (2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
-\h'(2u * \\n[*t]u)'\
-\D'l 0 -(2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
-\D't 0'
-.              el \
-.                nop \D't \\n[*t]u'\
-\D'l 0 (2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
-\D't 0'
-.              sp -1
-.      \}\}\}\}
-.
-.      nr vline\\*[#trc] 0
-.
-.      \" vert. cell content alignment
-.      nr ** 0
-.
-.      ie "\\*[t*val\\*[#trc]]"m" \
-.        nr ** ((\\n[$1] - \\n[dn\\*[#trc]]) / 2)\"    val=m
-.      el \
-.        if "\\*[t*val\\*[#trc]]"b" \
-.          nr ** (\\n[$1] - \\n[dn\\*[#trc]])\"        val=b
-.
-.      sp \\n[**]u                     \"      vertical content position
-.
-.      \" finally output the diversion
-.      t*\\*[#trc]
-.      rm t*\\*[#trc]
-.    \}
-.  \}
-.
-.  \" draw the box border
-.  in \\n[in\\n[t*#]]u
-.  nr ** (\\n[topdiv] + \\n[dntr\\n[t*#]*\\n-[#r]])
-.
-.  if \\n[t*b\\n[t*#]] \{\
-.    sp |(\\n[toptbl\\n[t*#]]u + \\n[b/2]u)
-.    nr $1 (\\n[toptbl\\n[t*#]] - \\n[**] - \\n[cscp])
-.    nr * (\\n[ll\\n[t*#]] - \\n[t*b\\n[t*#]])
-.
-.    if !"\\*[t*bc\\n[t*#]]"=" \
-.      nop \X'\*[g] 0 setlinejoin 2 setlinecap'\
-\v'-.67v'\
-\h'-\\n[b/2]u'\
-\m[\\*[t*bc\\n[t*#]]]\
-\D't \\n[t*b\\n[t*#]]u'\
-\D'l \\n[*]u 0'\
-\D'l 0 -\\n[$1]u'\
-\D'l -\\n[*]u 0'\
-\D'l 0 \\n[$1]u'\
-\D't 0'
-.  \}
-.
-.  sp |(\\n[**]u + \\n[cscpb]u)
-.  fi
-..
-.
-.
-.\"    Utility macro:  .t*cl [width1 [width2 [...]]]
-.\"
-.\"            Calculate cell widths, table width, and cell offsets.
-.de t*cl
-.  nr t*cols\\n[t*#] (\\n[.$] >? \\n[t*cols\\n[t*#]])
-.  nr ll\\n[t*#] 0                     \"      accumulated cell widths
-.  nr ** (\\n[.l] / \\n[t*cols\\n[t*#]])\"     width for remaining cells
-.  nr * 0 1                            \"      counter
-.
-.  \" while-loop: Parse user arguments to get each cell's width.
-.  while (\\n[t*cols\\n[t*#]] >= \\n+[*]) \{\
-.    nr $\\n[*] \\n[**]
-.    if !"\\$[\\n[*]]"" \{\
-.      \" check for `%' pseudo scaling indicator
-.      ds * \\$\\n[*]\"
-.      substring * -1 -1
-.      ie "\\*[*]"%" \{\
-.        ds ** \\$[\\n[*]]\"
-.        substring ** 0 -2
-.        ie \B\a\\*[**]\a \
-.          nr $\\n[*] (\\*[**] * \\n[.l] / 100)
-.        el \
-.          tm \\n[.F]:\\n[.c]: Invalid relative cell width `\\*[**]%'.
-.      \}
-.      el \{\
-.        ie \B\a\\$[\\n[*]]\a \
-.          nr $\\n[*] \\$[\\n[*]]
-.        el \
-.          tm \\n[.F]:\\n[.c]: Invalid cell width `\\$[\\n[*]]'.
-.    \}\}
-.
-.    nr ll\\n[t*#] +\\n[$\\n[*]]
-.    nr ** \\n[$\\n[*]]
-.  \}
-.
-.  if (\\n[ll\\n[t*#]] > \\n[.l]) \
-.    tm \\n[.F]:\\n[.c]: Table width larger than column width.
-.
-.  nr ** (0 >? \\n[t*b\\n[t*#]])
-.  nr * 0 1
-.
-.  \" second while loop: Compute final cell widths.
-.  while (\\n[t*cols\\n[t*#]] >= \\n+[*]) \{\
-.    \" Remove border width, if any.
-.    if \\n[t*b\\n[t*#]] \{\
-.      \" cell_width := cell_width * (length - 1.5*border) / length
-.      nr #* (\\n[ll\\n[t*#]] - (3 * \\n[t*b\\n[t*#]] / 2))
-.      nr *** (\\n[ll\\n[t*#]] / 2)
-.      \" avoid multiplication overflow
-.      mult31by31 $\\n[*] #* ****
-.      add31to62 *** **** ****
-.      div62by31 **** ll\\n[t*#] $\\n[*]
-.    \}
-.
-.    \" Get cell widths without padding, spacing, and separator line.
-.    nr cll\\n[t*#]*\\n[*] (\\n[$\\n[*]] \
-                            - (2 * \\n[cscp\\n[t*#]]) \
-                            - \\n[b/2\\n[t*#]])
-.
-.    \" Check whether value is non-positive.
-.    if !\\n[cll\\n[t*#]*\\n[*]] \{\
-.      nr #* (\\n[ll\\n[t*#]] - (3 * \\n[t*b\\n[t*#]] / 2))
-.      nr *** (\\n[#*] / 2)
-.      nr *h (2 * \\n[cscp\\n[t*#]] + \\n[b/2\\n[t*#]])
-.      mult31by31 *h ll\\n[t*#] ****
-.      add31to62 *** **** ****
-.      div62by31 **** #* *h
-.      ds * \\n[*]th\"
-.      nr *** (\\n[*] % 10)
-.      if d nth-\\n[***] \
-.        ds * \\n[*]\\*[nth-\\n[***]]\"
-.      tmc \\n[.F]:\\n[.c]: The \\*[*] width value (\\$\\n[*]) is too small.
-.      tm1 " It should be greater than \\n[*h].
-.    \}
-.
-.    nr in\\n[t*#]*\\n[*] \\n[**]      \"      cell offset
-.    nr ** +\\n[$\\n[*]]
-.  \}
-..
-.
-.
-.\"    Utility macro:  .t*dntr <origin> <cell position> ? <cell ID>
-.\"
-.\"            Close TD diversion, make some calculations, and set
-.\"            some help strings and registers.  <origin> is 0, 1,
-.\"            or 2 if the call of .t*dntr occurs in .TD, .TR, or
-.\"            .ETB, respectively.
-.de t*dntr
-.  nr dn 0                             \"      reset diversion height
-.  br                                  \"      finish cell data
-.
-.  if "\\n[.z]"*t*dummy*" \
-.    return
-.
-.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"                refresh table row identifier
-.
-.  if \\n[c#\\*[#t#r]] \{\
-.    di                                        \"      close diversion
-.    nr dn\\$4 \\n[dn]                 \"      save height of this cell
-.    if !\\n[rspan\\*[#trc]] \{\
-.      \" update row height if not in a row span
-.      nr dntr\\*[#t#r] (\\n[dntr\\*[#t#r]] >? \\n[dn])
-.      if \\$2 \
-.        nr dntr\\*[#t#r] ((\\n[t*height\\*[#t#r]] \
-                            - (2 * \\n[cscp\\n[t*#]] + \\n[b/2\\n[t*#]])) \
-                            >? \\n[dntr\\*[#t#r]])
-.  \}\}
-.
-.  nr c#\\*[#t#r] +1
-.  nr * \\$2
-.
-.  \" update column span registers
-.  while (\\n+[*] <= \\$3) \{\
-.    if r cspan\\*[#t#r]*\\n[*] \
-.      nr c#\\*[#t#r] +\\n[cspan\\*[#t#r]*\\n[*]]
-.    nr cspan\\*[#t#r]*\\n[*] 0
-.  \}
-.
-.  ds #trc \\*[#t#r]*\\n[c#\\*[#t#r]]\"
-.
-.  \" only check for cell underflow if called by .TR or .ETB
-.  if (\\$1 & (\\n[c#\\*[#t#r]] <= \\n[t*cols\\n[t*#]])) \{\
-.    ds * are\"
-.    ds ** columns\"
-.    if (\\n-[c#\\*[#t#r]] == 1) \{\
-.      ds * is\"
-.      ds ** column\"
-.    \}
-.    tmc \\n[.F]:\\n[.c]: There \\*[*] only \\n[c#\\*[#t#r]] \\*[**]
-.
-.    nr * \\n[t*r#\\n[t*#]]
-.    ds * \\n[*]th\"
-.    nr *** (\\n[*] % 10)
-.    if d nth-\\n[***] \
-.      ds * \\n[*]\\*[nth-\\n[***]]\"
-.    tmc " in the \\*[*] row
-.
-.    ds * are\"
-.    if (\\n[t*cols\\n[t*#]] == 1) \
-.      ds * is\"
-.    tm1 " but \\n[t*cols\\n[t*#]] \\*[*] expected.
-.  \}
-..
-.
-.
-.\"    Utility-macro:  .t*args level_1 [level_2]
-.\"
-.\"            Get the arguments common to TBL, TR, and TD for the level
-.\"            in argument 1, using default values from the level in
-.\"            argument 2.  If argument 2 is missing, use the global
-.\"            default values.
-.\"
-.de t*args
-.  ds t*bgc\\$1 \\*[t*bgc\\$2]\"
-.  ds t*fgc\\$1 \\*[t*fgc\\$2]\"
-.  ds t*hl\\$1 \\*[t*hl\\$2]\"
-.  ds t*vl\\$1 \\*[t*vl\\$2]\"
-.  ds t*hal\\$1 \\*[t*hal\\$2]\"
-.  ds t*val\\$1 \\*[t*val\\$2]\"
-.  ds t*ff\\$1 \\*[t*ff\\$2]\"
-.  ds t*fst\\$1 \\*[t*fst\\$2]\"
-.  ds t*fsz\\$1 \\*[t*fsz\\$2]\"
-.
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg bgc \\*[args]         \"   background color
-.  if !"\\*[bgc]"" \{\
-.    ie m\\*[bgc] \
-.      ds t*bgc\\$1 \\*[bgc]\"
-.    el \{\
-.      ie "\\*[bgc]"=" \
-.        ds t*bgc\\$1 =\"
-.      el \
-.        tm \\n[.F]:\\n[.c]: Invalid background color `\\*[bgc]'.
-.  \}\}
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg fgc \\*[args]         \"   foreground color
-.  if !"\\*[fgc]"" \{\
-.    ie m\\*[fgc] \
-.      ds t*fgc\\$1 \\*[fgc]\"
-.    el \{\
-.      ie "\\*[fgc]"=" \
-.        ds t*fgc\\$1 =\"
-.      el \
-.        tm \\n[.F]:\\n[.c]: Invalid foreground color `\\*[fgc]'.
-.  \}\}
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg hl \\*[args]          \"   horizontal line between cells
-.  if !"\\*[hl]"" \
-.    ds t*hl\\$1 \\*[hl]\"
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg vl \\*[args]          \"   vertical line between cells
-.  if !"\\*[vl]"" \
-.    ds t*vl\\$1 \\*[vl]\"
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg hal \\*[args]         \"   horizontal table cell alignment
-.  if !"\\*[hal]"" \{\
-.    t*index bcrl \\*[hal]
-.    ie \\n[t*index] \
-.      ds t*hal\\$1 \\*[hal]\"
-.    el \{\
-.      tmc \\n[.F]:\\n[.c]: Invalid horizontal alignment `\\*[hal]':
-.      tm1 " must be `b', `c', `l' or `r'.
-.  \}\}
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg val \\*[args]         \"   vertical table cell alignment
-.  if !"\\*[val]"" \{\
-.    t*index tmb \\*[val]
-.    ie \\n[t*index] \
-.      ds t*val\\$1 \\*[val]\"
-.    el \{\
-.      tmc \\n[.F]:\\n[.c]: Invalid vertical alignment `\\*[val]':
-.      tm1 " must be `t', `m' or `b'.
-.  \}\}
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg ff \\*[args]          \"   font family
-.  if !"\\*[ff]"" \
-.    ds t*ff\\$1 \\*[ff]\"
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg fst \\*[args]         \"   font style
-.  if !"\\*[fst]"" \
-.    ds t*fst\\$1 \\*[fst]\"
-.  if "\\*[args]"" \
-.    return
-.
-.  t*getarg fsz \\*[args]         \"   font size and spacing factor
-.  if !"\\*[fsz]"" \
-.    ds t*fsz\\$1 \\*[fsz]\"
-..
-.
-.
-.\" Append to your page header macro ('pg@top' for MS)
-.\" to enable tables to span pages.
-.de t*hm
-.  ev t*tbl
-.  nr ** \\n[.t]
-.  while !""\\*[t*kept]" \{\
-.    pops * t*kept
-.    popr * t*kept
-.    if (\\n[*] - \\n[**]) \{\
-.      tm \\n[.F]:\\n[.c]: Table \\*[*] higher than page -- ignored!
-.      break
-.    \}
-.
-.    if (\\n[*] - \\n[.t]) \{\
-.      ds t*kept \\n[*] \\*[t*kept]\"
-.      ds t*kept \\*[*] \\*[t*kept]\"
-.      tmc \\n[.F]:\\n[.c]: Remaining table(s),
-.      tm1 " because not all fit onto this page.
-.      break
-.    \}
-.
-.    t*DI \\*[*]
-.  \}
-.  ev
-..
-.
-.\" EOF
diff --git a/contrib/hdtbl/hdtbl.tmac-u b/contrib/hdtbl/hdtbl.tmac-u
new file mode 100644 (file)
index 0000000..c39f52a
--- /dev/null
@@ -0,0 +1,1005 @@
+.ig
+
+hdtbl.tmac
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2005-2018 Free Software Foundation, Inc.
+written by Joachim Walsdorff <Joachim.Walsdorff@urz.uni-heidelberg.de>.
+
+groff 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 3 of the License, or
+(at your option) any later version.
+
+groff 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, see <http://www.gnu.org/licenses/>.
+
+..
+.
+.
+.\"    *****************************************************************
+.\"    *               hdtbl - Heidelberger table macros               *
+.\"    *                       Vers. 0.91 December 2005                *
+.\"    *****************************************************************
+.
+.if d TBL \
+.  nx
+.
+.mso hdmisc.tmac
+.mso 62bit.tmac
+.
+.
+.\"    *****************************************************************
+.\"    *               default values for some arguments               *
+.\"    *****************************************************************
+.
+.ds t*hl s\"
+.ds t*vl s\"
+.ds t*tal l\"
+.ds t*hal b\"
+.ds t*val t\"
+.ds t*ff \\n[.fam]\"
+.ds t*fst \\n[.f]\"
+.ds t*fsz 1 1\"
+.ds t*fgc red4\"
+.ds t*bgc bisque\"
+.ds t*bc red4\"
+.nr t*cpd .5n
+.nr t*csp .5n
+.nr t*b .1n
+.nr t*cols 1
+.nr t*v \n[.v]
+.nr t*s \n[.ps]
+.nr t*hy \n[.hy]
+.nr t*l \n[.ll]
+.
+.
+.\"                    defaults for table captions
+.nr t*cptn 0 1
+.ds t*cptn "".sp .4" \
+            ".t*pv 1.0 1.0" \
+            ".ad l" \
+            "\m[\\*[t*fgc]]Table \\n+[t*cptn]:\0\k*\c"\"
+.
+.
+.\" %beginstrip%
+.
+.\" for better error messages
+.ds nth-1 st\"
+.ds nth-2 nd\"
+.ds nth-3 rd\"
+.
+.\" initialization of various registers
+.nr t*# 0      \"      table nesting level
+.nr t*numb 0 1 \"      held table diversion #
+.
+.ds *#trc*
+.
+.
+.\"    *****************************************************************
+.\"    *       The four base macros and the two optional macros        *
+.\"    *****************************************************************
+.
+.ie n \
+.  ds g tty:\"
+.el \
+.  ds g ps: exec\"
+.
+.\"    TBL:    table start
+.\"            predecessor:    text, TD or ETB
+.\"            successor:      CPTN or TR
+.de TBL
+.  ds t*m\\n[t*#] \\n[.m]\"
+.  ie \\n[t*#] \
+.    br
+.  el \{\
+.    ds * \\n[.ev]\"
+.    ev t*tbl
+.    evc \\*[*]
+.    di t*tbl0
+.    sp .4                             \" XXX: hard-coded value
+.    nr t*i \\n[.i]
+.    ll -\\n[.i]u
+.    in 0
+.  \}
+.  nr t*# +1
+.
+.  \" Save current location for error checking at end
+.  ds t*FN \\[.F]\"
+.  ds t*LN \\[.c]\"
+.
+.  t*getarg cols \\$@\"        from here string 'args' contains the rest of \\$@
+.  ie "\\*[cols]"" \
+.    nr t*cols\\n[t*#] \\n[t*cols]
+.  el \{\
+.    ie \B\a\\*[cols]\a \
+.      nr t*cols\\n[t*#] \\*[cols]
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid number of columns value '\\*[cols]'.
+.  \}
+.
+.  t*getarg cpd \\*[args]                 \"   cell padding
+.  ie "\\*[cpd]"" \
+.    nr t*cpd\\n[t*#] \\n[t*cpd]
+.  el \{\
+.    ie \B\a\\*[cpd]\a \
+.      nr t*cpd\\n[t*#] \\*[cpd]
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid cell padding value '\\*[cpd]'.
+.  \}
+.
+.  t*getarg csp \\*[args]                 \"   cell spacing
+.  ie "\\*[csp]"" \
+.    nr t*csp\\n[t*#] \\n[t*csp]
+.  el \{\
+.    ie \B\a\\*[csp]\a \
+.      nr t*csp\\n[t*#] \\*[csp]
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid cell spacing value '\\*[csp]'.
+.  \}
+.
+.  t*getarg border \\*[args]              \"   border thickness
+.  ie "\\*[border]"=" \
+.    nr t*b\\n[t*#] 0-1
+.  el \{\
+.    ie "\\*[border]"" \
+.      nr t*b\\n[t*#] \\n[t*b]
+.    el \{\
+.      ie \B\a\\*[border]\a \
+.        nr t*b\\n[t*#] \\*[border]
+.      el \
+.        tm \\n[.F]:\\n[.c]: Invalid border thickness value '\\*[border]'.
+.  \}\}
+.
+.  t*getarg bc \\*[args]                  \"   border color
+.  ds t*bc\\n[t*#] \\*[t*bc]\"
+.  if !"\\*[bc]"" \{\
+.    ie m\\*[bc] \
+.      ds t*bc\\n[t*#] \\*[bc]\"
+.    el \{\
+.      ie "\\*[bc]"=" \
+.        ds t*bc\\n[t*#] =\"
+.      el \
+.        tm \\n[.F]:\\n[.c]: Invalid border color '\\*[bc]'.
+.  \}\}
+.  ie "\\*[bc]"=" \
+.    ds t*bc\\n[t*#]
+.  el \{\
+.    ie "\\*[bc]"" \
+.      ds t*bc\\n[t*#] \\*[t*bc]\"
+.    el \
+.      ds t*bc\\n[t*#] \\*[bc]\"
+.  \}
+.
+.  t*getarg width \\*[args]               \"   table/col widths
+.  if "\\*[width]"=" \
+.    ds width
+.
+.  nr b/2\\n[t*#] (\\n[t*b\\n[t*#]] / 2)\"     shortcut
+.  nr cscp\\n[t*#] (\\n[t*csp\\n[t*#]] + \\n[t*cpd\\n[t*#]])\"  aux. register
+.
+.  t*getarg height \\*[args]              \"   table outline height
+.  ie "\\*[height]"" \
+.    nr t*height\\n[t*#] 0
+.  el \{\
+.    ie \B\a\\*[height]\a \
+.      nr t*height\\n[t*#] (\\*[height] \
+                            - ((2 * \\n[cscp\\n[t*#]]) \
+                                + (3 * \\n[b/2\\n[t*#]])))
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid height value '\\*[height]'.
+.  \}
+.
+.  t*cl \\*[width]                      \"     get cell widths and offsets
+.  t*args \\n[t*#]                      \"     look for common arguments
+.
+.  t*getarg tal \\*[args]                 \"   table horizontal alignment
+.  if "\\*[tal]"" \
+.    ds tal \\*[t*tal]\"
+.  ie "\\*[tal]"l" \
+.    nr in\\n[t*#] \\n[.i]
+.  el \{\
+.    ie "\\*[tal]"c" \
+.      nr in\\n[t*#] (\\n[.l] - \\n[ll\\n[t*#]]/2 + \\n[.i])
+.    el \{\
+.      ie "\\*[tal]"r" \
+.        nr in\\n[t*#] (\\n[.l] - \\n[ll\\n[t*#]] + \\n[.i])
+.      el \{\
+.        tmc \\n[.F]:\\n[.c]: Invalid horizontal table alignment '\\*[tal]':
+.        tm1 " must be 'l', 'c' or 'r'.
+.  \}\}\}
+.
+.  nr t*r#\\n[t*#] 0                   \"      initialize row index
+.  mk toptbl\\n[t*#]
+.
+.  t*P1 \\*[args]
+..
+.
+.
+.\"    CPTN:   optional table caption
+.\"            predecessor:    TBL
+.\"            successor:      TR
+.de CPTN
+.  ft 1
+.
+.  if "\\$0"CPTN" \
+.    if \\n[t*r#\\n[t*#]] \{\
+.      tmc \\n[.F]:\\n[.c]: Invalid placement of '.CPTN';
+.      tm1 " must be called immediately after '.TBL'.
+.      return
+.    \}
+.
+.  t*getarg val \\$@
+.  ds args\\n[t*#] "\\*[args]\"
+.
+.  t*index "\\*[args]" .TR
+.  ie \\n[t*index] \{\
+.    ds *a\\n[t*#] "\\*[args]\"
+.    substring args\\n[t*#] 0 \\n[t*index]
+.    substring *a\\n[t*#] \\n[t*index]-2 -1
+.  \}
+.  el \
+.    ds *a\\n[t*#]
+.
+.  ie "\\*[val]"b" \{\
+.    de t*cptn\\n[t*#]
+.      *CPTN \\*[args\\n[t*#]]
+.      rm t*cptn\\n[t*#]
+\\..
+.  \}
+.  el \{\
+.    ll (\\n[ll\\n[t*#]]u + \\n[in\\n[t*#]]u)
+.    in \\n[in\\n[t*#]]u
+.    t*P1 \\*[t*cptn]
+'    in +\\n[*]u
+.    t*P1 \\*[args\\n[t*#]]
+.    t*pv 1 1
+.    in
+.    mk toptbl\\n[t*#]
+.  \}
+.
+.  t*P1 \\*[*a\\n[t*#]]
+..
+.
+.als *CPTN CPTN
+.
+.
+.\"    TR:     table row
+.\"            predecessor:    TBL, CPTN, text, TD or ETB
+.\"            successor:      TD
+.de TR
+.  ft 1
+.  if !\\n[t*#] \{\
+.    tm \\n[.F]:\\n[.c]: Table row (.TR) without preceding table start (.TBL).
+.    return
+.  \}
+.
+.  \" finish previous data cell, if any
+.  if \\n[t*r#\\n[t*#]] \
+.    t*dntr 1 \\n[c#\\*[#t#r]] \\n[t*cols\\n[t*#]] \\*[*#trc*]
+.
+.  nr t*r#\\n[t*#] +1                  \"      row number in this table
+.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"                table row identifier
+.                                      \"      (<level>*<row>)
+.  nr c#\\*[#t#r] 0 1                  \"      clear cell counter
+.  nr dntr\\*[#t#r] 0 1                        \"      clear accumulated row height
+.
+.  t*getarg height \\$@
+.  ie "\\*[height]"" \
+.    nr t*height\\*[#t#r] 0
+.  el \{\
+.    ie \B\a\\*[height]\a \
+.      nr t*height\\*[#t#r] \\*[height]
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid table row height '\\*[height]'.
+.  \}
+.
+.  \"  If there is a TR with height 'height', the total height of the table
+.  \"  is too high by 3/2 b, independent of the number of TR with 'height'.
+.  t*args \\*[#t#r] \\n[t*#]            \"     look for common arguments
+.
+.  t*P1 \\*[args]
+..
+.
+.
+.\"    TH:     optional table header cell
+.\"            predecessor:    text, TD or TR
+.\"            successor:      text, TD, TR, TBL or ETB
+.\"                                                            
+.\"            cell content bolded and horizontally and vertically centered,
+.\"            else like .TD
+.de TH
+.  ft 1
+.  t*getarg hal \\$@
+.  if "\\*[hal]"" \
+.    ds hal c\"
+.
+.  t*getarg val \\*[args]
+.  if "\\*[val]"" \
+.    ds val m\"
+.
+.  t*getarg fst \\*[args]
+.  if "\\*[fst]"" \
+.    ds fst B\"
+.
+.  TD hal=\\*[hal] val=\\*[val] fst=\\*[fst] \\*[args]
+..
+.
+.
+.\"    TD:     table data cell
+.\"            predecessor:    text, TD or TR
+.\"            successor:      text, TD, TR, TBL or ETB
+.de TD
+.  ft 1
+.  \" finish previous data cell -- note the use of \E
+.  t*dntr 0 \\n[c#\\*[#t#r]]-1 \En[c#\\*[#t#r]] \\*[*#trc*]
+.
+.  ds *#trc* \\*[#t#r]*\\n[c#\\*[#t#r]]\"      table cell identifier
+.                                      \"      (<level>*<row>*<column>)
+.
+.  t*getarg rowspan \\$@
+.  nr rowspan 1
+.  if !"\\*[rowspan]"" \{\
+.    ie \B\a\\*[rowspan]\a \{\
+.      nr rowspan (\\*[rowspan] >? 1)
+.      nr *rsp*\\*[*#trc*] (\\n[rowspan] - 1)
+.    \}
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid value of 'rowspan' keyword.
+.  \}
+.
+.  t*getarg colspan \\*[args]
+.  nr colspan 1
+.  if !"\\*[colspan]"" \{\
+.    ie \B\a\\*[colspan]\a \
+.      nr colspan (\\*[colspan] >? 1)
+.    el \
+.      tm \\n[.F]:\\n[.c]: Invalid value of 'colspan' keyword.
+.  \}
+.
+.  t*args \\*[#trc] \\*[#t#r]           \"  look for common arguments
+.
+.  nr in\\*[#trc] \\n[in\\n[t*#]*\\n[c#\\*[#t#r]]]
+.  nr *cl \\n[cll\\n[t*#]*\\n[c#\\*[#t#r]]]
+.  nr * 0 1
+.  nr *r \\n[t*r#\\n[t*#]]
+.
+.  if (\\n[rowspan] - 1) \
+.    while (\\n+[*] <= \\n[rowspan]) \{\
+.      nr rspan\\n[t*#]*\\n[*r]*\\n[c#\\*[#t#r]] \\n[colspan]
+.      if (\\n[*] > 1) \
+.        nr cspan\\n[t*#]*\\n[*r]*\\n[c#\\*[#t#r]] \\n[colspan]
+.      nr *r +1
+.    \}
+.
+.  nr * 1 1
+.  nr *c \\n[c#\\*[#t#r]]
+.
+.  if (\\n[colspan] - 1) \{\
+.    nr vline\\*[*#trc*] 0-1           \"      set 'no vl' flag
+.
+.    while (\\n+[*] <= \\n[colspan]) \{\
+.      nr *c +1
+.      nr *cl +(2 * \\n[cscp\\n[t*#]] \
+                + \\n[b/2\\n[t*#]] \
+                + \\n[cll\\n[t*#]*\\n[*c]])
+.      nr c#\\*[#t#r] +1
+.    \}
+.  \}
+.
+.  if (\\n[c#\\n[t*#]*\\n[t*r#\\n[t*#]]] > \\n[t*cols\\n[t*#]]) \{\
+.    ds * are\"
+.    ds ** columns\"
+.    if (\\n[c#\\*[#t#r]] == 1) \{\
+.      ds * is\"
+.      ds ** column\"
+.    \}
+.    tmc \\n[.F]:\\n[.c]: There \\*[*] \\n[c#\\*[#t#r]] table \\*[**] (.TD)
+.
+.    ds * are\"
+.    if (\\n[t*cols\\n[t*#]] == 1) \
+.      ds * is\"
+.    tm1 " but only \\n[t*cols\\n[t*#]] \\*[*] expected.
+.
+.    ds *
+.    length * \\n[.F]:\\n[.c]:
+.
+.    while \\n-[*] \
+.      ds * " \\*[*]\"
+.
+.    tm1 "\\*[*] Remaining .TDs and its contents are ignored.
+.
+.    di *t*dummy*                \"    bypass superfluous input
+.    return
+.  \}
+.
+.  di t*\\*[#trc]                \"    open cell diversion and set locals
+.  in 0
+.  nr cll\\*[#trc] \\n[*cl]
+.  ll \\n[*cl]u
+.  nr *cl\\n[t*#] \\n[.l]
+.  gcolor \\*[t*fgc\\*[#trc]]
+.  ad \\*[t*hal\\*[#trc]]
+.  fam \\*[t*ff\\*[#trc]]
+.  ft \\*[t*fst\\*[#trc]]
+.  t*pv \\*[t*fsz\\*[#trc]]
+.
+.  t*P1 \\*[args]
+..
+.
+.
+.\"    ETB:    end of table
+.\"            predecessor:    text, TD or ETB
+.\"            successor:      text, TD, TR or TBL
+.de ETB
+.  ie \\n[t*#] \
+.    if !\\n[t*r#\\n[t*#]] \{\
+.      tmc \\n[.F]:\\n[.c]: Each table (.TBL)
+.      tm1 " should contain at least one table row (.TR)!
+.    \}
+.  el \{\
+.    tmc \\n[.F]:\\n[.c]: Table end (.ETB)
+.    tm1 " without corresponding table start (.TBL)!
+.  \}
+.
+.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"                refresh table row identifier
+.  t*dntr 2 \\n[c#\\*[#t#r]] \\n[t*cols\\n[t*#]] \\*[*#trc*]
+.
+.  t*divs                        \"    print this table
+.
+.  sp \\n[b/2\\n[t*#]]u
+.  t*cptn\\n[t*#]
+.  nr t*# -1
+.
+.  ll \\n[*cl\\n[t*#]]u          \"    restore ll outside this table
+.  in 0                          \"    reset indent
+.  gcolor \\*[t*m\\n[t*#]]       \"    reset previous fgc
+.
+.  t*getarg hold \\$@
+.  if !\\n[t*#] \{\
+.    sp .5
+.    di
+.    in \\n[t*i]u
+.    ie "\\*[hold]"" \{\
+.      ie (\\n[.t] - \\n[dn]) \
+.        t*DI t*tbl0
+.      el \{\
+.        rn t*tbl0 t*tbl\\n+[t*numb]
+.        ds t*kept \\*[t*kept] t*tbl\\n[t*numb] \\n[dn]\"
+.      \}
+.    \}
+.    el \{\
+.      rn t*tbl0 t*hold\\n+[t*numb]
+.      tm \\n[.F]:\\n[.c]: Table t*hold\\n[t*numb] held.
+.      ds t*held \\*[t*held] t*hold\\n[t*numb] \\n[dn]\"
+.    \}
+.
+.    ev                                \"      restore previous environment
+.  \}
+.
+.  t*P1 \\*[args]
+..
+.
+.
+.\"    *****************************************************************
+.\"    *       Following the definition of five utility macros         *
+.\"    *       special to hdtbl.                                       *
+.\"    *       Other utility macros common to hdtbl and hdgroff        *
+.\"    *       are defined in the file hdmisc.tmac.                    *
+.\"    *****************************************************************
+.
+.
+.\"    .t*free [n]
+.\"            print the next [n] held table[s].
+.\"             Don't call it within a table!
+.\"            If the table is higher than the remaining space
+.\"            on the page, the table is printed on the next page.
+.de t*free
+.  if "\\$0"CPTN" \
+.    if \\n[t*r#\\n[t*#]] \{\
+.      tmc \\n[.F]:\\n[.c]: Invalid placement of '.t*free' within a table;
+.      tm1 " it must be called outside of any table.
+.      return
+.    \}
+.
+.  if "\\*[t*held]"" \{\
+.    tm \\n[.F]:\\n[.c]: No held tables.
+.    return
+.  \}
+.
+.  nr ** (\\$1 >? 1) 1
+.  while !""\\*[t*held]" \{\
+.    pops * t*held
+.    popr * t*held
+.
+.    ie (\\n[.t] - \\n[*]) \{\
+.      ev t*tbl
+.      t*DI \\*[*]
+.      ev
+.    \}
+.    el \{\
+.      rn \\*[*] t*tbl\\n+[t*numb]
+.      ds t*kept \\*[t*kept] t*tbl\\n[t*numb] \\n[*]\"
+.    \}
+.
+.    if !(\\n-[**] - 1) \
+.      return
+.  \}
+..
+.
+.
+.\"    The main utility macro for tables:
+.\"            If a table is closed by ETB, this macro is called.  It
+.\"            processes one complete table, i.e., all the table cell
+.\"            diversions, paints the cell backgrounds, draws
+.\"            horizontal and vertical table lines and the table border.
+.\"
+.\"            Nested tables are processed from inside to outside.
+.
+.de t*divs
+.  ll (\\n[t*l]u + 1c)                 \"      avoid warning 'can't break line'
+.  nf
+.
+.  nr b/2 \\n[b/2\\n[t*#]]             \"      some abbreviations
+.  nr cscp \\n[cscp\\n[t*#]]
+.  nr cscpb (\\n[b/2] + \\n[cscp])
+.
+.  nr topdiv (\\n[.d] + \\n[b/2] - \\n[cscp])\"        top of cell diversion
+.  nr cscpb2 (\\n[b/2] / 2 + \\n[cscp])
+.
+.  nr #r 0 1
+.  \" outer loop for rows
+.  while (\\n+[#r] <= \\n[t*r#\\n[t*#]]) \{\
+.    \" TODO: insert code here for multipage tables
+.    nr * (\\n[#r] - 1)
+.    nr topdiv +(\\n[dntr\\n[t*#]*\\n[*]] + \\n[cscp] + \\n[cscpb])
+.
+.    \" if table still smaller than specified table height, increase it
+.    if ((\\n[#r] == \\n[t*r#\\n[t*#]]) & \\n[t*height\\n[t*#]]) \
+.      nr dntr\\n[t*#]*\\n[#r] (\\n[cscpb] \
+                                + \\n[toptbl\\n[t*#]] \
+                                + \\n[t*height\\n[t*#]] \
+                                - (\\n[topdiv] >? \\n[dntr\\n[t*#]*\\n[#r]]))
+.
+.    nr #c 0 1
+.    \" inner loop for cells
+.    while (\\n+[#c] <= \\n[t*cols\\n[t*#]]) \{\
+.      ds #trc \\n[t*#]*\\n[#r]*\\n[#c]\"
+.      \" continue if the diversion is empty
+.      if !d t*\\*[#trc] \
+.        continue
+.
+.      sp |\\n[topdiv]u
+.      in (\\n[in\\n[t*#]]u + \\n[in\\*[#trc]]u)\"     cell offset
+.      nr $1 \\n[dntr\\n[t*#]*\\n[#r]] \"      cell height
+.
+.      \" if we have spanned rows, calculate resulting row height
+.      \" and position of lower horizontal line
+.      if \\n[*rsp*\\*[#trc]] \{\
+.        nr * \\n[#r] 1
+.        nr rspan\\*[#trc] 0-1         \"      set 'no hl' flag
+.        nr corr (\\n[dn\\*[#trc]] - \\n[dntr\\n[t*#]*\\n[#r]])
+.
+.        \" clear row span flags in following rows and update row height
+.        while \\n[*rsp*\\*[#trc]] \{\
+.          nr *rsp*\\*[#trc] -1
+.          nr rspan\\n[t*#]*\\n+[*]*\\n[#c] 0
+.          nr ** (\\n[dntr\\n[t*#]*\\n[*]] + \\n[cscp] + \\n[cscpb])
+.          nr corr -\\n[**]
+.          nr $1 +\\n[**]
+.        \}
+.
+.        if (\\n-[*] == \\n[t*r#\\n[t*#]]) \
+.          nr $1 ((\\n[t*height\\n[t*#]] \
+                   - \\n[.d] \
+                   + \\n[toptbl\\n[t*#]] \
+                   + \\n[cscpb]) \
+                     >? \\n[$1])
+.        nr dntr\\n[t*#]*\\n[*] +(\\n[corr] >? 0)
+.      \}
+.
+.      \" paint cell background
+.      nr * (2 * \\n[t*cpd\\n[t*#]] + \\n[cll\\*[#trc]])\"     background width
+.      nr $1 (\\n[$1] >? \\n[dn\\*[#trc]])\"   cell height
+.
+.      if !"\\*[t*bgc\\*[#trc]]"=" \{\
+.        nop \h'\\n[t*csp\\n[t*#]]u'\
+\M[\\*[t*bgc\\*[#trc]]]\
+\v'(-.67v - \\n[t*cpd\\n[t*#]]u)'\
+\D'P \\n[*]u 0 \
+     0 (2u * \\n[t*cpd\\n[t*#]]u + \\n[$1]u) \
+     -\\n[*]u 0'\
+\M[]
+.        sp -1
+.      \}
+.
+.      \" ***   horizontal and vertical single or double lines   ***
+.      \" double and single lines have the same thickness;
+.      \" the double lines' distance is the line thickness.
+.      \"
+.      \" 'border=x': horizontal/vertical lines x/2 thick, minimum .1n
+.      \" 'border=0': no border; horizontal/vertical lines .1n thick
+.      \" 'border=': neither border nor horizontal/vertical lines
+.
+.      nr *t (.1n >? \\n[b/2])         \"      thickness of hl/vl; min. .1n
+.      in +\\n[cscp]u
+.
+.      \" check for vertical and horizontal lines
+.      if (1 + \\n[t*b\\n[t*#]]) \{\
+.        if !"\\*[t*bc\\n[t*#]]"=" \{\
+.          \" draw horizontal line between this cell and the one below
+.          if (\\n[t*r#\\n[t*#]] - \\n[#r] + \\n[rspan\\*[#trc]]) \{\
+.            if !"\\*[t*hl\\*[#trc]]"=" \{\
+.              sp \\n[$1]u
+.              nr * (\\n[cscp] + \\n[cscpb] + \\n[cll\\*[#trc]])
+.              nop \X'\*[g] 1 setlinecap'\
+\h'(-\\n[cscpb2]u - \\n[*t]u)'\
+\v'(\\n[cscpb2]u - .67v)'\
+\m[\\*[t*bc\\n[t*#]]]\
+\D't \\n[*t]u'\c
+.
+.              ie "\\*[t*hl\\*[#trc]]"d" \
+.                nop \v'-\\n[*t]u'\
+\D'l \\n[*]u 0'\
+\v'(2u * \\n[*t]u)'\
+\D'l -\\n[*]u 0'\
+\D't 0'
+.              el \
+.                nop \D'l \\n[*]u 0'\
+\D't 0'
+.
+.              sp (-\\n[$1]u - 1v)
+.          \}\}
+.
+.          nr rspan\\*[#trc] 0
+.
+.          \" draw vertical line between this cell and the one to the right
+.          if (\\n[t*cols\\n[t*#]] - \\n[#c] + \\n[vline\\*[#trc]]) \{\
+.            if !"\\*[t*vl\\*[#trc]]"=" \{\
+.              nop \X'\*[g] 1 setlinecap'\
+\v'(-\\n[cscpb2]u - .67v)'\
+\m[\\*[t*bc\\n[t*#]]]\
+\h'(\\n[cscpb2]u - \\n[*t]u + \\n[cll\\*[#trc]]u)'\c
+.
+.              ie "\\*[t*vl\\*[#trc]]"d" \
+.                nop \h'-\\n[*t]u'\
+\D't \\n[*t]u'\
+\D'l 0 (2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
+\h'(2u * \\n[*t]u)'\
+\D'l 0 -(2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
+\D't 0'
+.              el \
+.                nop \D't \\n[*t]u'\
+\D'l 0 (2u * \\n[cscp]u + \\n[$1]u + (\\n[*t]u / 2u))'\
+\D't 0'
+.              sp -1
+.      \}\}\}\}
+.
+.      nr vline\\*[#trc] 0
+.
+.      \" vert. cell content alignment
+.      nr ** 0
+.
+.      ie "\\*[t*val\\*[#trc]]"m" \
+.        nr ** ((\\n[$1] - \\n[dn\\*[#trc]]) / 2)\"    val=m
+.      el \
+.        if "\\*[t*val\\*[#trc]]"b" \
+.          nr ** (\\n[$1] - \\n[dn\\*[#trc]])\"        val=b
+.
+.      sp \\n[**]u                     \"      vertical content position
+.
+.      \" finally output the diversion
+.      t*\\*[#trc]
+.      rm t*\\*[#trc]
+.    \}
+.  \}
+.
+.  \" draw the box border
+.  in \\n[in\\n[t*#]]u
+.  nr ** (\\n[topdiv] + \\n[dntr\\n[t*#]*\\n-[#r]])
+.
+.  if \\n[t*b\\n[t*#]] \{\
+.    sp |(\\n[toptbl\\n[t*#]]u + \\n[b/2]u)
+.    nr $1 (\\n[toptbl\\n[t*#]] - \\n[**] - \\n[cscp])
+.    nr * (\\n[ll\\n[t*#]] - \\n[t*b\\n[t*#]])
+.
+.    if !"\\*[t*bc\\n[t*#]]"=" \
+.      nop \X'\*[g] 0 setlinejoin 2 setlinecap'\
+\v'-.67v'\
+\h'-\\n[b/2]u'\
+\m[\\*[t*bc\\n[t*#]]]\
+\D't \\n[t*b\\n[t*#]]u'\
+\D'l \\n[*]u 0'\
+\D'l 0 -\\n[$1]u'\
+\D'l -\\n[*]u 0'\
+\D'l 0 \\n[$1]u'\
+\D't 0'
+.  \}
+.
+.  sp |(\\n[**]u + \\n[cscpb]u)
+.  fi
+..
+.
+.
+.\"    Utility macro:  .t*cl [width1 [width2 [...]]]
+.\"
+.\"            Calculate cell widths, table width, and cell offsets.
+.de t*cl
+.  nr t*cols\\n[t*#] (\\n[.$] >? \\n[t*cols\\n[t*#]])
+.  nr ll\\n[t*#] 0                     \"      accumulated cell widths
+.  nr ** (\\n[.l] / \\n[t*cols\\n[t*#]])\"     width for remaining cells
+.  nr * 0 1                            \"      counter
+.
+.  \" while-loop: Parse user arguments to get each cell's width.
+.  while (\\n[t*cols\\n[t*#]] >= \\n+[*]) \{\
+.    nr $\\n[*] \\n[**]
+.    if !"\\$[\\n[*]]"" \{\
+.      \" check for '%' pseudo scaling indicator
+.      ds * \\$\\n[*]\"
+.      substring * -1 -1
+.      ie "\\*[*]"%" \{\
+.        ds ** \\$[\\n[*]]\"
+.        substring ** 0 -2
+.        ie \B\a\\*[**]\a \
+.          nr $\\n[*] (\\*[**] * \\n[.l] / 100)
+.        el \
+.          tm \\n[.F]:\\n[.c]: Invalid relative cell width '\\*[**]%'.
+.      \}
+.      el \{\
+.        ie \B\a\\$[\\n[*]]\a \
+.          nr $\\n[*] \\$[\\n[*]]
+.        el \
+.          tm \\n[.F]:\\n[.c]: Invalid cell width '\\$[\\n[*]]'.
+.    \}\}
+.
+.    nr ll\\n[t*#] +\\n[$\\n[*]]
+.    nr ** \\n[$\\n[*]]
+.  \}
+.
+.  if (\\n[ll\\n[t*#]] > \\n[.l]) \
+.    tm \\n[.F]:\\n[.c]: Table width larger than column width.
+.
+.  nr ** (0 >? \\n[t*b\\n[t*#]])
+.  nr * 0 1
+.
+.  \" second while loop: Compute final cell widths.
+.  while (\\n[t*cols\\n[t*#]] >= \\n+[*]) \{\
+.    \" Remove border width, if any.
+.    if \\n[t*b\\n[t*#]] \{\
+.      \" cell_width := cell_width * (length - 1.5*border) / length
+.      nr #* (\\n[ll\\n[t*#]] - (3 * \\n[t*b\\n[t*#]] / 2))
+.      nr *** (\\n[ll\\n[t*#]] / 2)
+.      \" avoid multiplication overflow
+.      mult31by31 $\\n[*] #* ****
+.      add31to62 *** **** ****
+.      div62by31 **** ll\\n[t*#] $\\n[*]
+.    \}
+.
+.    \" Get cell widths without padding, spacing, and separator line.
+.    nr cll\\n[t*#]*\\n[*] (\\n[$\\n[*]] \
+                            - (2 * \\n[cscp\\n[t*#]]) \
+                            - \\n[b/2\\n[t*#]])
+.
+.    \" Check whether value is non-positive.
+.    if !\\n[cll\\n[t*#]*\\n[*]] \{\
+.      nr #* (\\n[ll\\n[t*#]] - (3 * \\n[t*b\\n[t*#]] / 2))
+.      nr *** (\\n[#*] / 2)
+.      nr *h (2 * \\n[cscp\\n[t*#]] + \\n[b/2\\n[t*#]])
+.      mult31by31 *h ll\\n[t*#] ****
+.      add31to62 *** **** ****
+.      div62by31 **** #* *h
+.      ds * \\n[*]th\"
+.      nr *** (\\n[*] % 10)
+.      if d nth-\\n[***] \
+.        ds * \\n[*]\\*[nth-\\n[***]]\"
+.      tmc \\n[.F]:\\n[.c]: The \\*[*] width value (\\$\\n[*]) is too small.
+.      tm1 " It should be greater than \\n[*h].
+.    \}
+.
+.    nr in\\n[t*#]*\\n[*] \\n[**]      \"      cell offset
+.    nr ** +\\n[$\\n[*]]
+.  \}
+..
+.
+.
+.\"    Utility macro:  .t*dntr <origin> <cell position> ? <cell ID>
+.\"
+.\"            Close TD diversion, make some calculations, and set
+.\"            some help strings and registers.  <origin> is 0, 1,
+.\"            or 2 if the call of .t*dntr occurs in .TD, .TR, or
+.\"            .ETB, respectively.
+.de t*dntr
+.  nr dn 0                             \"      reset diversion height
+.  br                                  \"      finish cell data
+.
+.  if "\\n[.z]"*t*dummy*" \
+.    return
+.
+.  ds #t#r \\n[t*#]*\\n[t*r#\\n[t*#]]\"                refresh table row identifier
+.
+.  if \\n[c#\\*[#t#r]] \{\
+.    di                                        \"      close diversion
+.    nr dn\\$4 \\n[dn]                 \"      save height of this cell
+.    if !\\n[rspan\\*[#trc]] \{\
+.      \" update row height if not in a row span
+.      nr dntr\\*[#t#r] (\\n[dntr\\*[#t#r]] >? \\n[dn])
+.      if \\$2 \
+.        nr dntr\\*[#t#r] ((\\n[t*height\\*[#t#r]] \
+                            - (2 * \\n[cscp\\n[t*#]] + \\n[b/2\\n[t*#]])) \
+                            >? \\n[dntr\\*[#t#r]])
+.  \}\}
+.
+.  nr c#\\*[#t#r] +1
+.  nr * \\$2
+.
+.  \" update column span registers
+.  while (\\n+[*] <= \\$3) \{\
+.    if r cspan\\*[#t#r]*\\n[*] \
+.      nr c#\\*[#t#r] +\\n[cspan\\*[#t#r]*\\n[*]]
+.    nr cspan\\*[#t#r]*\\n[*] 0
+.  \}
+.
+.  ds #trc \\*[#t#r]*\\n[c#\\*[#t#r]]\"
+.
+.  \" only check for cell underflow if called by .TR or .ETB
+.  if (\\$1 & (\\n[c#\\*[#t#r]] <= \\n[t*cols\\n[t*#]])) \{\
+.    ds * are\"
+.    ds ** columns\"
+.    if (\\n-[c#\\*[#t#r]] == 1) \{\
+.      ds * is\"
+.      ds ** column\"
+.    \}
+.    tmc \\n[.F]:\\n[.c]: There \\*[*] only \\n[c#\\*[#t#r]] \\*[**]
+.
+.    nr * \\n[t*r#\\n[t*#]]
+.    ds * \\n[*]th\"
+.    nr *** (\\n[*] % 10)
+.    if d nth-\\n[***] \
+.      ds * \\n[*]\\*[nth-\\n[***]]\"
+.    tmc " in the \\*[*] row
+.
+.    ds * are\"
+.    if (\\n[t*cols\\n[t*#]] == 1) \
+.      ds * is\"
+.    tm1 " but \\n[t*cols\\n[t*#]] \\*[*] expected.
+.  \}
+..
+.
+.
+.\"    Utility-macro:  .t*args level_1 [level_2]
+.\"
+.\"            Get the arguments common to TBL, TR, and TD for the level
+.\"            in argument 1, using default values from the level in
+.\"            argument 2.  If argument 2 is missing, use the global
+.\"            default values.
+.\"
+.de t*args
+.  ds t*bgc\\$1 \\*[t*bgc\\$2]\"
+.  ds t*fgc\\$1 \\*[t*fgc\\$2]\"
+.  ds t*hl\\$1 \\*[t*hl\\$2]\"
+.  ds t*vl\\$1 \\*[t*vl\\$2]\"
+.  ds t*hal\\$1 \\*[t*hal\\$2]\"
+.  ds t*val\\$1 \\*[t*val\\$2]\"
+.  ds t*ff\\$1 \\*[t*ff\\$2]\"
+.  ds t*fst\\$1 \\*[t*fst\\$2]\"
+.  ds t*fsz\\$1 \\*[t*fsz\\$2]\"
+.
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg bgc \\*[args]         \"   background color
+.  if !"\\*[bgc]"" \{\
+.    ie m\\*[bgc] \
+.      ds t*bgc\\$1 \\*[bgc]\"
+.    el \{\
+.      ie "\\*[bgc]"=" \
+.        ds t*bgc\\$1 =\"
+.      el \
+.        tm \\n[.F]:\\n[.c]: Invalid background color '\\*[bgc]'.
+.  \}\}
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg fgc \\*[args]         \"   foreground color
+.  if !"\\*[fgc]"" \{\
+.    ie m\\*[fgc] \
+.      ds t*fgc\\$1 \\*[fgc]\"
+.    el \{\
+.      ie "\\*[fgc]"=" \
+.        ds t*fgc\\$1 =\"
+.      el \
+.        tm \\n[.F]:\\n[.c]: Invalid foreground color '\\*[fgc]'.
+.  \}\}
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg hl \\*[args]          \"   horizontal line between cells
+.  if !"\\*[hl]"" \
+.    ds t*hl\\$1 \\*[hl]\"
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg vl \\*[args]          \"   vertical line between cells
+.  if !"\\*[vl]"" \
+.    ds t*vl\\$1 \\*[vl]\"
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg hal \\*[args]         \"   horizontal table cell alignment
+.  if !"\\*[hal]"" \{\
+.    t*index bcrl \\*[hal]
+.    ie \\n[t*index] \
+.      ds t*hal\\$1 \\*[hal]\"
+.    el \{\
+.      tmc \\n[.F]:\\n[.c]: Invalid horizontal alignment '\\*[hal]':
+.      tm1 " must be 'b', 'c', 'l' or 'r'.
+.  \}\}
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg val \\*[args]         \"   vertical table cell alignment
+.  if !"\\*[val]"" \{\
+.    t*index tmb \\*[val]
+.    ie \\n[t*index] \
+.      ds t*val\\$1 \\*[val]\"
+.    el \{\
+.      tmc \\n[.F]:\\n[.c]: Invalid vertical alignment '\\*[val]':
+.      tm1 " must be 't', 'm' or 'b'.
+.  \}\}
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg ff \\*[args]          \"   font family
+.  if !"\\*[ff]"" \
+.    ds t*ff\\$1 \\*[ff]\"
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg fst \\*[args]         \"   font style
+.  if !"\\*[fst]"" \
+.    ds t*fst\\$1 \\*[fst]\"
+.  if "\\*[args]"" \
+.    return
+.
+.  t*getarg fsz \\*[args]         \"   font size and spacing factor
+.  if !"\\*[fsz]"" \
+.    ds t*fsz\\$1 \\*[fsz]\"
+..
+.
+.
+.\" Append to your page header macro ('pg@top' for MS)
+.\" to enable tables to span pages.
+.de t*hm
+.  ev t*tbl
+.  nr ** \\n[.t]
+.  while !""\\*[t*kept]" \{\
+.    pops * t*kept
+.    popr * t*kept
+.    if (\\n[*] - \\n[**]) \{\
+.      tm \\n[.F]:\\n[.c]: Table \\*[*] higher than page -- ignored!
+.      break
+.    \}
+.
+.    if (\\n[*] - \\n[.t]) \{\
+.      ds t*kept \\n[*] \\*[t*kept]\"
+.      ds t*kept \\*[*] \\*[t*kept]\"
+.      tmc \\n[.F]:\\n[.c]: Remaining table(s),
+.      tm1 " because not all fit onto this page.
+.      break
+.    \}
+.
+.    t*DI \\*[*]
+.  \}
+.  ev
+..
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
index 7deef78adbcf71541dd514807093f8a610385202..6b0f41fc5df7c2a09b3aea8db9aacef2d47cc383 100644 (file)
@@ -1,3 +1,49 @@
+2018-03-01  Werner LEMBERG  <wl@gnu.org>
+
+       * m.tmac: Fix `.hy' value.
+
+       * groff_mm.7.man: Updated.
+
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * mm.am (mmroff): Use $(AM_V_GEN) to silence file generation.
+
+2017-11-02  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       examples/letter.mm: New; simple example of mm usage.
+       mm.am: Ship the file.
+
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * mmroff.1.man: Rename `mmroff.man'.
+
+       * groff_mm.7.man: Rename `groff_mm.man'.
+
+       * groff_mmse.7.man: Rename `groff_mmse.man'.
+
+       * mm.am: Include renamings.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * mm.am, Makefile.sim: Add `Last update'.  Setup Emacs mode.
+
+Thu Jul 16 11:52:03 2015  Carsten Kunze  <carsten.kunze@arcor.de>
+
+       Fix line length of `.DS' with indentation (#45452).
+
+       If `.DS' with first argument `1' or `I' is used the output should
+       use an indentation of `\n[Si]n'.  To make this work, the line length
+       within the `.DS' diversion must be set to zero, otherwise the
+       effective line length is too large.
+
+       * m.tmac (DS): Call `ds@set-new-ev' with correct indentation value.
+
+Fri Apr  3 16:33:22 2015  Werner LEMBERG  <wl@gnu.org>
+
+       Make man pages work in compatibility mode.
+
+       * groff_mm.man, groff_mmse.man, mmroff.man: Do it.
+
 Wed Sep  3 21:29:00 2014  Bernd Warken  <groff-bernd.warken-72@web.de>
 
        * all files in contrib/mm: Copying and Emacs setting.
@@ -949,8 +995,9 @@ Sun Jan 1 00:00:00 1991 Joergen Haegg (jh at efd.lth.se)
        * TP&PX supported
        * warnings for unimplemented macros
 
-Copyright 1991-2007, 2009-2014
-  Free Software Foundation, Inc.
+________________________________________________________________________
+
+Copyright 1991-2018 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -958,5 +1005,5 @@ notice and this notice are preserved.
 
 Local Variables:
 version-control: never
-coding: latin-1
+mode: change-log
 End:
index 5f4048a50f3bb79215f449ec53e84ad72bf917a5..518401cec30669cff32e5abd652734b073e8a854 100644 (file)
@@ -1,4 +1,6 @@
-# Copyright 1991-2014  Free S0ftware Foundation, Inc.
+# Copyright 1991-2018 Free Software Foundation, Inc.
+#
+# Last update: 5 Aug 2015
 #
 # This file is part of groff.
 #
@@ -13,7 +15,7 @@
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 # Makefile.sim
 #
@@ -79,9 +81,11 @@ uninstall: groff_mm.n groff_mmse.n
         $< >$@
 
 ########################################################################
-# Emacs settings
+# Editor settings
 ########################################################################
 #
 # Local Variables:
 # mode: makefile
+# fill-column: 72
 # End:
+# vim: set filetype=make textwidth=72:
diff --git a/contrib/mm/Makefile.sub b/contrib/mm/Makefile.sub
deleted file mode 100644 (file)
index d40eafd..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-# Copyright 1991-2014  Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-#
-PROG=mmroff
-MAN1=\
-  mmroff.n
-MAN7=\
-  groff_mm.n \
-  groff_mmse.n
-FILES=0.MT 5.MT 4.MT ms.cov se_ms.cov
-# Local configuration files with default values.
-LOCALE=locale se_locale
-MOSTLYCLEANADD=temp
-RM=rm -f
-
-all: mmroff
-
-install_bin: install_mmroff
-
-install_data: install_m
-       -test -d $(DESTDIR)$(tmacdir)/mm \
-         || $(mkinstalldirs) $(DESTDIR)$(tmacdir)/mm
-       for f in $(FILES); do \
-         $(RM) $(DESTDIR)$(tmacdir)/mm/$$f; \
-         $(INSTALL_DATA) $(srcdir)/mm/$$f $(DESTDIR)$(tmacdir)/mm/$$f; \
-       done
-       for f in $(LOCALE); do \
-         test -f $(DESTDIR)$(tmacdir)/mm/$$f \
-           || touch $(DESTDIR)$(tmacdir)/mm/$$f; \
-       done
-       $(INSTALL_DATA) $(srcdir)/refer-mm.tmac \
-         $(DESTDIR)$(tmacdir)/refer-mm.tmac
-
-install_m:
-       -test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
-       $(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m
-       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
-       $(INSTALL_DATA) $(srcdir)/m.tmac \
-         $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
-       @sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
-         $(srcdir)/mse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac
-       @sed -e "s;^.mso mse.tmac;.mso $(tmac_m_prefix)mse.tmac;g" \
-         $(srcdir)/mmse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac
-       @sed -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
-         $(srcdir)/mm.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac
-
-install_mmroff: mmroff
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       $(RM) $(DESTDIR)$(bindir)/mmroff
-       $(INSTALL_SCRIPT) mmroff $(DESTDIR)$(bindir)/mmroff
-
-mmroff: mmroff.pl
-       sed -e 's;/usr/bin/perl;$(PERL);' $(srcdir)/mmroff.pl >$@
-       chmod +x $@
-
-uninstall_sub:
-       -for f in $(FILES); do $(RM) $(DESTDIR)$(tmacdir)/mm/$$f; done
-       -for f in $(LOCALE); do \
-         test -s $(DESTDIR)$(tmacdir)/mm/$$f \
-           || $(RM) $(DESTDIR)$(tmacdir)/mm/$$f; \
-       done
-       $(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m
-       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
-       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac
-       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac
-       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac
-       $(RM) $(DESTDIR)$(tmacdir)/refer-mm.tmac
-       -test -d $(DESTDIR)$(tmacdir)/mm && \
-         rmdir $(DESTDIR)$(tmacdir)/mm
-       $(RM) $(DESTDIR)$(bindir)/mmroff
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 797887188c8c2b979002be8d9607b40ee77ede9a..c3cb3d1623c9d34d9f0407b64bb33a73be34c649 100644 (file)
@@ -1,4 +1,4 @@
-    Copyright (C) 1989-201 Free Software Foundation, Inc.
+    Copyright (C) 1989-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
index 3a86d8efdd41757461abd7abeab355df00f74be4..bd79b18570cc741348344a1b0f7ff9c0a0ba9b50 100644 (file)
@@ -1,4 +1,4 @@
-    Copyright (C) 1989-201 Free Software Foundation, Inc.
+    Copyright (C) 1989-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -9,8 +9,9 @@ This is mgm, a macro package for groff.
 It is supposed to be compatible with the DWB mm macros,
 and has several extensions.
 
-Send bug reports to bug-groff@gnu.org with a description of the problem
-and a sample of text which reproduces the error.
+Submit bug reports at http://savannah.gnu.org/bugs/?group=groff with a
+description of the problem and a sample of text which reproduces the
+error.
 
 Don't forget to mention the version of mgm (look in the beginning
 of m.tmac) and the version of groff.
index cfa1c0383c120d13515804413007ae971426cc6a..7c496b5da69c62b2b4a984bf5563eb8045f762c8 100644 (file)
@@ -1,5 +1,5 @@
     -*- text -*-
-    Copyright (C) 1989-201 Free Software Foundation, Inc.
+    Copyright (C) 1989-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -37,4 +37,4 @@ I've made sure that mgm is useful in several languages;
 all English output can be redefined.
 
 For Swedish localization, check the manual for groff_mse and the
-macro files `mse.tmac' and `sv.tmac'.
+macro files 'mse.tmac' and 'sv.tmac'.
diff --git a/contrib/mm/examples/letter.mm b/contrib/mm/examples/letter.mm
new file mode 100644 (file)
index 0000000..078546d
--- /dev/null
@@ -0,0 +1,33 @@
+.\" Set point size to 14.
+.S 14
+.\" Set paragraph type to "indented".
+.nr Pt 1
+                                                               1 November 2017
+.\" Set line spacing to double-spaced.
+.SP 2
+.\" Start display.
+.DS
+Mr. Ty Coon
+President of Vice, Intellectual Property and Licensing
+Very Big Corporation of America
+Silly Valley, CA 94043
+.\" End display.
+.DE
+Dear Mr. Coon,
+.\" Start new paragraph.
+.P
+I would like to request that your wholly-owned subsidiary, Yoyodyne, Inc.,
+disclaim all copyright interest in the program `Gnomovision' (which makes passes
+at compilers) written by Juliet Hacker prior to her employment with Yoyodyne.
+.P
+Our colleagues at the Software Freedom Conservancy have determined and informed
+us that Ms. Hacker's employment agreement is a contract of adhesion.
+.P
+Thank you for your prompt attention to this matter.
+.\" Set line spacing to single-spaced.
+.SP
+                                                               Sincerely yours,
+.\" Leave room for signature.
+.SP 2
+                                                               Tracy T. Jordan
+.\" vim: set noexpandtab textwidth=80:
diff --git a/contrib/mm/groff_mm.7.man b/contrib/mm/groff_mm.7.man
new file mode 100644 (file)
index 0000000..a95790c
--- /dev/null
@@ -0,0 +1,3995 @@
+'\" t
+.TH GROFF_MM @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_mm \- memorandum macros for GNU roff
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_mm_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY "groff \-m@TMAC_M_PREFIX@m"
+.RI [ option
+\&.\|.\|.\&]
+.RI [ file
+\&.\|.\|.\&]
+.SY "groff \-m m@TMAC_M_PREFIX@m"
+.RI [ option
+\&.\|.\|.\&]
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+The groff mm macros are intended to be compatible with the DWB mm macros
+with the following limitations:
+.
+.TP
+.B \(bu
+No Bell Labs localisms are implemented.
+.
+.TP
+.B \(bu
+The macros OK and PM are not implemented.
+.
+.TP
+.B \(bu
+groff mm does not support cut marks.
+.
+.
+.LP
+.B m@TMAC_M_PREFIX@m
+is intended to support easy localization.
+.
+Use
+.B m@TMAC_M_PREFIX@mse
+as an example how to adapt the output format to a national standard.
+.
+Localized strings are collected in the file
+.IR @MACRODIR@/ xx .tmac ,
+where
+.I xx
+denotes the two-letter code for the
+.IR language ,
+as defined in the ISO 639 standard.
+.
+For Swedish, this is \[oq]sv.tmac\[cq] \[en] not \[oq]se\[cq], which
+is the ISO 3166 two-letter code for the
+.I country
+(as used for the output format localization).
+.
+.
+.\"########################################################################
+.LP
+A file called
+.I locale
+or
+.RI country _locale
+is read after the initialization of the global variables.
+.
+It is therefore possible to localize the macros with a different company
+name and so on.
+.
+.
+.LP
+In this manual, square brackets are used to show optional arguments.
+.
+.
+.\" ====================================================================
+.SS "Number registers and strings"
+.\" ====================================================================
+.
+Many macros can be controlled by number registers and strings.
+.
+A number register is assigned with the
+.B nr
+command:
+.
+.RS
+.LP
+.BI .nr\  "XXX \fR[\fP\fB\[+-]\fP\fR]\fPn \fR[\fPi\fR]\fP\""
+.RE
+.
+.
+.LP
+.I XXX
+is the name of the register,
+.IR n \~is
+the value to be assigned, and
+.IR i \~is
+the increment value for auto-increment.
+.
+.IR n \~can
+have a plus or minus sign as a prefix if an increment
+or decrement of the current value is wanted.
+.
+(Auto-increment or auto-decrement occurs if the number register is
+used with a plus or minus sign,
+.BI \[rs]n+[ XXX ]
+or
+.BI \[rs]n\-[ XXX ]\fR.)\fP
+.
+.
+.LP
+Strings are defined with
+.BR ds .
+.
+.RS
+.LP
+\fB\&.ds\fP \fIYYY string\fP
+.RE
+.
+.
+.LP
+The string is assigned everything to the end of the line,
+even blanks.
+.
+Initial blanks in
+.I string
+should be prefixed with a double-quote.
+.
+(Strings are used in the text as
+.BI \[rs]*[ YYY ]\fR.)\fP
+.
+.
+.\" ====================================================================
+.SS "Special formatting of number registers"
+.\" ====================================================================
+.
+A number register is printed with normal digits if no format has been
+given.
+.
+Set the format with
+.BR af :
+.
+.RS
+.LP
+.BI .af\  "R c"
+.RE
+.
+.
+.LP
+.IR R \~is
+the name of the register,
+.IR c \~is
+the format.
+.
+.RS
+.LP
+.TS
+tab(@);
+lb lb
+l l.
+Form@Sequence
+1@0, 1, 2, 3, .\|.\|.
+001@000, 001, 002, 003, .\|.\|.
+i@0, i, ii, iii, iv, .\|.\|.
+I@0, I, II, III, IV, .\|.\|.
+a@0, a, b, c, .\|.\|., z, aa, ab, .\|.\|.
+A@0, A, B, C, .\|.\|., Z, AA, AB, .\|.\|.
+.TE
+.RE
+.
+.
+.\" ====================================================================
+.SS Fonts
+.\" ====================================================================
+.
+In
+.BR m@TMAC_M_PREFIX@m ,
+the fonts (or rather, font styles)
+.BR R \~(normal),
+.BR I \~(italic),
+and
+.BR B \~(bold)
+are hardwired to font positions
+.BR 1 ,
+.BR 2 ,
+and\~\c
+.BR 3 ,
+respectively.
+.
+Internally, font positions are used for backwards compatibility.
+.
+From a practical point of view it doesn't make a big difference
+\[en] a different font family can still be selected with a call to the
+.B .fam
+request or using
+.BR groff 's
+.B \-f
+command-line option.
+.
+On the other hand, if you want to replace just, say, font
+.BR B ,
+you have to replace the font at position\~2 (with a call to
+\[oq].fp\~2\~.\|.\|.\[cq]).
+.
+.
+.\" ====================================================================
+.SS Macros
+.\" ====================================================================
+.
+.TP
+.BI )E\  "level text"
+Add heading text
+.I text
+to the table of contents with
+.IR level ,
+which is either\~0 or in the range 1 to\~7.
+.
+See also
+.BR .H .
+.
+This macro is used for customized tables of contents.
+.
+.TP
+.BR 1C\  [ 1 ]
+Begin one-column processing.
+.
+A\~\c
+.B 1
+as an argument disables the page break.
+.
+Use wide footnotes, small footnotes may be overprinted.
+.
+.TP
+.B 2C
+Begin two-column processing.
+.
+Splits the page in two columns.
+.
+It is a special case of
+.BR MC .
+See also
+.BR 1C .
+.
+.TP
+.B AE
+Abstract end, see
+.BR AS .
+.
+.TP
+.BI AF\ \fR[\fP name-of-firm \fR]\fP
+Author's firm, should be called before
+.BR AU ,
+see also
+.BR COVER .
+.
+.TP
+.BI AL\  \fR[\fPtype\ \fR[\fPtext-indent\  \fR[\fP1\fR]]]\fP
+Start auto-increment list.
+.
+Items are numbered beginning with one.
+.
+The
+.I type
+argument controls the format of numbers.
+.
+.RS
+.IP
+.TS
+tab(@);
+lb lb
+l l.
+Arg@Description
+1@Arabic (the default)
+A@Upper-case letters (A\(enZ)
+a@Lower-case letters (a\(enz)
+I@Upper-case roman
+i@Lower-case roman
+.TE
+.RE
+.
+.IP
+.I text-indent
+sets the indentation and overrides
+.BR Li .
+A third argument prohibits printing of a blank line before each item.
+.
+.TP
+.BI APP\  "name text"
+Begin an appendix with name
+.IR name .
+.
+Automatic naming occurs if
+.I name
+is
+.BR \[dq]\[dq] .
+.
+The appendices start with\~\c
+.B A
+if automatic naming is used.
+.
+A new page is ejected, and a header is also produced if the number
+variable
+.B Aph
+is non-zero.
+.
+This is the default.
+.
+The appendix always appears in the \[oq]List of contents\[cq] with
+correct page numbers.
+.
+The name \[oq]APPENDIX\[cq] can be changed by setting the string
+.B App
+to the desired text.
+.
+The string
+.B Apptxt
+contains the current appendix text.
+.
+.TP
+.BI APPSK\  "name pages text"
+Same as
+.BR .APP ,
+but the page number is incremented with
+.IR pages .
+.
+This is used when diagrams or other non-formatted documents are
+included as appendices.
+.
+.TP
+.BI AS\  "\fR[\fParg \fR[\fPindent\fR]]\fP"
+Abstract start.
+.
+Indentation is specified in \[oq]ens\[cq], but scaling is allowed.
+.
+Argument
+.I arg
+controls where the abstract is printed.
+.
+.RS
+.TS
+tab(@);
+lb lb
+l lx.
+\fBArg@Placement\fP
+0@T{
+Abstract is printed on page\~1 and on the cover sheet if used in the
+released-paper style (\fBMT 4\fP),
+otherwise it is printed on page\~1 without a cover sheet.
+T}
+1@Abstract is only printed on the cover sheet (\fBMT 4\fP only).
+2@T{
+Abstract is printed only on the cover sheet (other than \fBMT 4\fP only).
+The cover sheet is printed without a need for \fBCS\fP.
+T}
+.TE
+.RE
+.
+.IP
+An abstract is not printed at all in external letters (\fBMT 5\fP).
+.
+The
+.I indent
+parameter controls the indentation of both margins, otherwise normal
+text indentation is used.
+.
+.TP
+.BI AST\  \fR[\fPtitle\fR]\fP
+Abstract title.
+.
+Default is \[oq]ABSTRACT\[cq].
+.
+Sets the text above the abstract text.
+.
+.TP
+.BI AT\  "title1 \fR[\fPtitle2 \fR[.\|.\|.]]\fP"
+Author's title.
+.
+.B AT
+must appear just after each
+.BR AU .
+.
+The title shows up after the name in the signature block.
+.
+.TP
+.BI AU\  "\fR[\fPname \fR[\fPinitials \fR[\fPloc \fR[\fPdept \fR[\fPext \fR[\fProom \fR[\fParg \fR[\fParg \fR[\fParg\fR]]]]]]]]]\fP"
+Author information.
+.
+Specifies the author of the memo or paper, and is printed on the cover
+sheet and on other similar places.
+.B AU
+must not appear before
+.BR TL .
+.
+The author information can contain initials, location, department,
+telephone extension, room number or name and up to three extra
+arguments.
+.
+.TP
+.BI AV\  \fR[\fPname\  \fR[\fP1\fR]]\fP
+Approval signature.
+.
+Generates an approval line with place for signature and date.
+.
+The string \[oq]APPROVED:\[cq] can be changed with variable
+.BR Letapp ;
+it is replaced with an empty lin if there is a second argument.
+.
+The string \[oq]Date\[cq] can be changed with variable
+.BR Letdate .
+.
+.TP
+.BI AVL\  \fR[\fPname\fR]\fP
+Letter signature.
+.
+Generates a line with place for signature.
+.
+.TP
+.BI B\  "\fR[\fPbold-text \fR[\fPprev-font-text \fR[\fPbold \fR[.\|.\|.]]]]\fP"
+Begin boldface.
+.
+No limit on the number of arguments.
+.
+All arguments are concatenated to one word; the first, third and so on
+is printed in boldface.
+.
+.TP
+.B B1
+Begin box (as the ms macro).
+.
+Draws a box around the text.
+.
+The text is indented one character, and the right margin is one
+character shorter.
+.
+.TP
+.B B2
+End box.
+.
+Finishes the box started with
+.BR B1 .
+.
+.TP
+.B BE
+End bottom block, see
+.BR BS .
+.
+.TP
+.BI BI\  "\fR[\fPbold-text \fR[\fPitalic-text \fR[\fPbold-text \fR[.\|.\|.]]]]\fP"
+Bold-italic.
+.
+No limit on the number of arguments,
+see\~\c
+.BR B .
+.
+.TP
+.BI BL\  \fR[\fPtext-indent\  \fR[\fP1\fR]]\fP
+Start bullet list.
+.
+Initializes a list with a bullet and a space in the beginning of each
+list item (see
+.BR LI ).
+.
+.I text-indent
+overrides the default indentation of the list items set by number register
+.BR Pi .
+.
+A third argument prohibits printing of a blank line before each item.
+.
+.TP
+.BI BR\  "\fR[\fPbold-text \fR[\fProman-text \fR[\fPbold-text \fR[.\|.\|.]]]]\fP"
+Bold-roman.
+No limit on the number of arguments.
+.
+.TP
+.B BS
+Bottom block start.
+.
+Begins the definition of a text block which is printed at the bottom
+of each page.
+.
+The block ends with
+.BR BE .
+.
+.TP
+.BI BVL\  "text-indent \fR[\fPmark-indent\ " \fR[\fP1\fR]]\fP
+Start of broken variable-item list.
+.
+Broken variable-item list has no fixed mark,
+it assumes that every
+.B LI
+has a mark instead.
+.
+The text always begins at the next line after the mark.
+.
+.I text-indent
+sets the indentation to the text, and
+.I mark-indent
+the distance from the current indentation to the mark.
+.
+A third argument prohibits printing of a blank line before each item.
+.
+.TP
+.BI COVER\  \fR[\fParg\fR]\fP
+Begin a coversheet definition.
+.
+It is important that
+.B .COVER
+appears before any normal text.
+.
+This macro uses
+.I arg
+to build the filename
+.IR @TMAC_MDIR@/ arg .cov .
+.
+Therefore it is possible to create unlimited types of cover sheets.
+.
+.I ms.cov
+is supposed to look like the ms cover sheet.
+.
+.B .COVER
+requires a
+.B .COVEND
+at the end of the cover definition.
+.
+Always use this order of the cover macros:
+.
+.RS
+.IP
+.nf
+\&.COVER
+\&.TL
+\&.AF
+\&.AU
+\&.AT
+\&.AS
+\&.AE
+\&.COVEND
+.fi
+.RE
+.
+.IP
+However, only
+.B .TL
+and
+.B .AU
+are required.
+.
+.TP
+.B COVEND
+Finish the cover description and print the cover page.
+.
+It is defined in the cover file.
+.
+.TP
+.B DE
+Display end.
+.
+Ends a block of text or display that begins with
+.B DS
+or
+.BR DF .
+.
+.TP
+.BI DF\  "\fR[\fPformat \fR[\fPfill \fR[\fPrindent\fR]]]\fP"
+Begin floating display (no nesting allowed).
+.
+A floating display is saved in a queue and is printed in the order entered.
+.IR Format ,
+.IR fill ,
+and
+.I rindent
+are the same as in
+.BR DS .
+Floating displays are controlled by the two number registers
+.B De
+and
+.BR Df .
+.
+.IP
+.B De register
+.
+.RS
+.IP
+.TS
+tab(@);
+l lx.
+0@T{
+Nothing special, this is the default.
+T}
+1@T{
+A page eject occurs after each printed display,
+giving only one display per page and no text following it.
+T}
+.TE
+.RE
+.
+.IP
+.B Df register
+.
+.RS
+.IP
+.TS
+tab(@);
+l lx.
+0@T{
+Displays are printed at the end of each section (when section-page
+numbering is active) or at the end of the document.
+T}
+1@T{
+A new display is printed on the current page if there is enough space,
+otherwise it is printed at the end of the document.
+T}
+2@T{
+One display is printed at the top of each page or column
+(in multi-column mode).
+T}
+3@T{
+Print one display if there is enough space for it,
+otherwise it is printed at the top of the next page or column.
+T}
+4@T{
+Print as many displays as possible in a new page or column.
+A page break occurs between each display if
+.B De
+is not zero.
+T}
+5@T{
+Fill the current page with displays and the rest beginning at a new page
+or column.
+(This is the default.)
+A page break occurs between each display
+if \fBDe\fP is not zero.
+T}
+.TE
+.RE
+.
+.TP
+.BI DL\  \fR[\fPtext-indent\  "\fR[\fP\fB1\fP \fR[\fP\fB1\fP\fR]]]\fP"
+Dash list start.
+.
+Begins a list where each item is printed after a dash.
+.
+.I text-indent
+changes the default indentation of the list items set by number
+register
+.BR Pi .
+.
+A second argument prevents an empty line between each list item.
+.
+See
+.BR LI .
+.
+A third argument prohibits printing of a blank line before each item.
+.
+.TP
+.BI DS\  "\fR[\fPformat \fR[\fPfill \fR[\fPrindent\fR]]]\fP"
+Static display start.
+.
+Begins collection of text until
+.BR DE .
+.
+The text is printed together on the same page, unless it is longer
+than the height of the page.
+.
+.B DS
+can be nested arbitrarily.
+.
+.IP
+.B format
+.
+.RS
+.IP
+.TS
+tab(@);
+l lx.
+\[dq]\[dq]@No indentation.
+none@No indentation.
+L@No indentation.
+I@T{
+Indent text with the value of number register
+.BR Si .
+T}
+C@Center each line.
+CB@Center the whole display as a block.
+R@Right-adjust the lines.
+RB@Right-adjust the whole display as a block.
+.TE
+.RE
+.
+.IP
+The values \[oq]L\[cq], \[oq]I\[cq], \[oq]C\[cq], and \[oq]CB\[cq] can
+also be specified as \[oq]0\[cq], \[oq]1\[cq], \[oq]2\[cq], and
+\[oq]3\[cq], respectively, for compatibility reasons.
+.
+.IP
+.B fill
+.
+.RS
+.IP
+.TS
+tab(@);
+l l.
+\[dq]\[dq]@Line-filling turned off.
+none@Line-filling turned off.
+N@Line-filling turned off.
+F@Line-filling turned on.
+.TE
+.RE
+.
+.IP
+\[oq]N\[cq] and \[oq]F\[cq] can also be specified as \[oq]0\[cq] and
+\[oq]1\[cq], respectively.
+.
+.IP
+By default, an empty line is printed before and after the display.
+.
+Setting number register
+.B Ds
+to\~0 prevents this.
+.
+.I rindent
+shortens the line length by that amount.
+.
+.TP
+.BI EC\  "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP"
+Equation title.
+.
+Sets a title for an equation.
+.
+The
+.I override
+argument changes the numbering.
+.
+.IP
+.B flag
+.
+.RS
+.IP
+.TS
+tab(@);
+l lx.
+none@T{
+.I override
+is a prefix to the number.
+T}
+0@T{
+.I override
+is a prefix to the number.
+T}
+1@T{
+.I override
+is a suffix to the number.
+T}
+2@T{
+.I override
+replaces the number.
+T}
+.TE
+.RE
+.
+.IP
+.B EC
+uses the number register
+.B Ec
+as a counter.
+.
+It is possible to use
+.B .af
+to change the format of the number.
+.
+If number register
+.B Of
+is\~1, the format of title uses a dash instead of a dot after the
+number.
+.
+.IP
+The string
+.B Le
+controls the title of the List of Equations;
+default is \[oq]LIST OF EQUATIONS\[cq].
+.
+The List of Equations is only printed if number register
+.B Le
+is\~1.
+.
+The default is\~0.
+.
+The string
+.B Liec
+contains the word \[oq]Equation\[cq], which is printed before the
+number.
+.
+If
+.I refname
+is used,
+then the equation number is saved with
+.BR .SETR ,
+and can be retrieved with \[oq]\fB.GETST\fP \fIrefname\fP\[cq].
+.
+.IP
+Special handling of the title occurs if
+.B EC
+is used inside
+.BR DS / DE ;
+it is not affected by the format of
+.BR DS .
+.
+.TP
+.BI EF\  \fR[\fParg\fR]\fP
+Even-page footer,
+printed just above the normal page footer on even pages.
+.
+See
+.BR PF .
+.
+.IP
+This macro defines string
+.BR EOPef .
+.
+.TP
+.BI EH\  \fR[\fParg\fR]\fP
+Even-page header,
+printed just below the normal page header on even pages.
+.
+See
+.BR PH .
+.
+.IP
+This macro defines string
+.BR TPeh .
+.
+.TP
+.B EN
+Equation end, see
+.BR EQ .
+.
+.TP
+.B EOP
+End-of-page user-defined macro.
+.
+This macro is called instead of the normal printing of the footer.
+.
+The macro is executed in a separate environment,
+without any trap active.
+.
+See
+.BR TP .
+.
+.IP
+.B Strings available to EOP
+.RS
+.TS
+tab(@);
+l l.
+EOPf@argument of \fBPF\fP
+EOPef@argument of \fBEF\fP
+EOPof@argument of \fBOF\fP
+.TE
+.RE
+.
+.TP
+.BI EPIC\  "\fR[\fP\fB\-L\fP\fR]\fP width height \fR[\fPname\fR]\fP"
+Draw a box with the given
+.I width
+and
+.IR height .
+.
+It also prints the text
+.I name
+or a default string if
+.I name
+is not specified.
+.
+This is used to include external pictures;
+just give the size of the picture.
+.
+.B \-L
+left-adjusts the picture;
+the default is to center.
+.
+See
+.BR PIC .
+.
+.TP
+.BI EQ\  \fR[\fPlabel\fR]\fP
+Equation start.
+.
+.BR EQ / EN
+are the delimiters for equations written for
+.BR @g@eqn (@MAN1EXT@).
+.
+.BR EQ / EN
+must be inside of a
+.BR DS / DE
+pair, except if
+.B EQ
+is used to set options for
+.B @g@eqn
+only.
+.
+The
+.I label
+argument appears at the right margin of the equation,
+centered vertically within the
+.BR DS / DE
+block,
+unless number register
+.B Eq
+is\~1.
+.
+Then the label appears at the left margin.
+.
+.IP
+If there are multiple
+.BR EQ / EN
+blocks within a single
+.BR DS / DE
+pair,
+only the last equation label (if any) is printed.
+.
+.TP
+.BI EX\  "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP"
+Exhibit title.
+.
+The arguments are the same as for
+.BR EC .
+.
+.B EX
+uses the number register
+.B Ex
+as a counter.
+.
+The string
+.B Lx
+controls the title of the List of Exhibits;
+default is \[oq]LIST OF EXHIBITS\[cq].
+.
+The List of Exhibits is only printed if number register
+.B Lx
+is\~1,
+which is the default.
+.
+The string
+.B Liex
+contains the word \[oq]Exhibit\[cq], which is printed before the
+number.
+.
+If
+.I refname
+is used, the exhibit number is saved with
+.BR .SETR ,
+and can be retrieved with \[oq]\fB.GETST\fP \fIrefname\fP\[cq].
+.
+.IP
+Special handling of the title occurs if
+.B EX
+is used inside
+.BR DS / DE ;
+it is not affected by the format of
+.BR DS .
+.
+.TP
+.BI FC\  \fR[\fPclosing\fR]\fP
+Print \[oq]Yours\~very\~truly,\[cq] as a formal closing of a letter or
+memorandum.
+.
+The argument replaces the default string.
+.
+The default is stored in string variable
+.BR Letfc .
+.
+.TP
+.BI FD\  \fR[\fParg\  \fR[\fP1\fR]]\fP
+Footnote default format.
+.
+Controls the hyphenation (hyphen),
+right margin justification (adjust),
+and indentation of footnote text (indent).
+.
+It can also change the label justification (ljust).
+.
+.RS
+.IP
+.TS
+tab(@);
+lb lb lb lb lb
+l l l l l.
+arg@hyphen@adjust@indent@ljust
+0@no@yes@yes@left
+1@yes@yes@yes@left
+2@no@no@yes@left
+3@yes@no@yes@left
+4@no@yes@no@left
+5@yes@yes@no@left
+6@no@no@no@left
+7@yes@no@no@left
+8@no@yes@yes@right
+9@yes@yes@yes@right
+10@no@no@yes@right
+11@yes@no@yes@right
+.TE
+.RE
+.
+.IP
+An argument greater than or equal to 11 is considered as value\~0.
+.
+Default for
+.B m@TMAC_M_PREFIX@m
+is 10.
+.
+.TP
+.B FE
+Footnote end.
+.
+.TP
+.BI FG\  "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP"
+Figure title.
+.
+The arguments are the same as for
+.BR EC .
+.B FG
+uses the number register
+.B Fg
+as a counter.
+.
+The string
+.B Lf
+controls the title of the List of Figures;
+default is \[oq]LIST OF FIGURES\[cq].
+.
+The List of Figures is only printed if number register
+.B Lf
+is\~1, which is the default.
+.
+The string
+.B Lifg
+contains the word \[oq]Figure\[cq], which is printed before the
+number.
+.
+If
+.I refname
+is used, then the figure number is saved with
+.BR .SETR ,
+and can be retrieved with \[oq]\fB.GETST\fP \fIrefname\fP\[cq].
+.
+.IP
+Special handling of the title occurs if
+.B FG
+is used inside
+.BR DS / DE ,
+it is not affected by the format of
+.BR DS .
+.
+.TP
+.BI FS\  \fR[\fPlabel\fR]\fP
+Footnote start.
+.
+The footnote is ended by
+.BR FE .
+.
+By default, footnotes are automatically numbered;
+the number is available in string\~\c
+.BR F .
+.
+Just add
+.B \[rs]*F
+in the text.
+.
+By adding
+.IR label ,
+it is possible to have other number or names on the footnotes.
+.
+Footnotes in displays are now possible.
+.
+An empty line separates footnotes;
+the height of the line is controlled by number register
+.BR Fs ,
+default value is\~1.
+.
+.TP
+.BI GETHN\  "refname \fR[\fPvarname\fR]\fP"
+Include the header number where the corresponding \[oq]\fBSETR\fP
+\fIrefname\fP\[cq] was placed.
+.
+This is displayed as \[oq]X.X.X.\[cq] in pass\~1.
+.
+See
+.BR INITR .
+.
+If
+.I varname
+is used,
+.B GETHN
+sets the string variable
+.I varname
+to the header number.
+.
+.TP
+.BI GETPN\  "refname \fR[\fPvarname\fR]\fP"
+Include the page number where the corresponding \[oq]\fBSETR\fP
+\fIrefname\fP\[cq] was placed.
+.
+This is displayed as \[oq]9999\[cq] in pass\~1.
+.
+See
+.BR INITR .
+.
+If
+.I varname
+is used,
+.B GETPN
+sets the stringvariable
+.I varname
+to the page number.
+.
+.TP
+.BI GETR\  refname
+Combine
+.B GETHN
+and
+.B GETPN
+with the text \[oq]chapter\[cq] and \[oq],\~page\[cq].
+.
+The string
+.B Qrf
+contains the text for the cross reference:
+.
+.RS
+.IP
+\&.ds Qrf See chapter \[rs]\[rs]*[Qrfh], page \[rs]\[rs]*[Qrfp].
+.RE
+.
+.IP
+.B Qrf
+may be changed to support other languages.
+.
+Strings
+.B Qrfh
+and
+.B Qrfp
+are set by
+.B GETR
+and contain the page and header number, respectively.
+.
+.TP
+.BI GETST\  "refname \fR[\fPvarname\fR]\fP"
+Include the string saved with the second argument to
+.BR .SETR .
+.
+This is a dummy string in pass\~1.
+.
+If
+.I varname
+is used,
+.B GETST
+sets it to the saved string.
+.
+See
+.BR INITR .
+.
+.TP
+.BI H\  "level \fR[\fPheading-text \fR[\fPheading-suffix\fR]]\fP"
+Numbered section heading.
+.
+Section headers can have a level between 1 and 14;
+level\~1 is the top level.
+.
+The text is given in
+.IR heading-text ,
+and must be surrounded by double quotes if it contains spaces.
+.
+.I heading-suffix
+is added to the header in the text but not in the table of contents.
+.
+This is normally used for footnote marks and similar things.
+.
+Don't use
+.B \[rs]*F
+in
+.IR heading-suffix ,
+it doesn't work.
+.
+A manual label must be used, see
+.BR FS .
+.sp
+A call to the paragraph macro\~\c
+.B P
+directly after\~\c
+.B H
+is ignored.
+.
+.BR H \~takes
+care of spacing and indentation.
+.
+.IP
+.B Page ejection before heading
+.
+.RS
+.IP
+Number register
+.B Ej
+controls page ejection before the heading.
+.
+By default, a level-one heading gets two blank lines before it;
+higher levels only get one.
+.
+A new page is ejected before each first-level heading if number
+register
+.B Ej
+is\~1.
+.
+All levels below or equal the value of
+.B Ej
+get a new page.
+.
+Default value for
+.B Ej
+is\~0.
+.RE
+.
+.IP
+.B Heading break level
+.
+.RS
+.IP
+A line break occurs after the heading if the heading level is less
+or equal to number register
+.BR Hb .
+.
+Default value is\~2.
+.RE
+.
+.IP
+.B Heading space level
+.
+.RS
+.IP
+A blank line is inserted after the heading if the heading level is
+less or equal to number register
+.BR Hs .
+.
+Default value is\~2.
+.
+.IP
+Text follows the heading on the same line if the level is greater than
+both
+.B Hb
+and
+.BR Hs .
+.RE
+.
+.IP
+.B Post-heading indent
+.
+.RS
+.IP
+Indentation of the text after the heading is controlled by number
+register
+.BR Hi .
+.
+Default value is\~0.
+.
+.IP
+.B Hi
+.TS
+tab(@);
+l lx.
+0@The text is left-justified.
+1@T{
+Indentation of the text follows the value of number
+register
+.B Pt ,
+see
+.BR P .
+T}
+2@T{
+The text is lined up with the first word of the heading.
+T}
+.TE
+.RE
+.
+.IP
+.B Centered section headings
+.
+.RS
+.IP
+All headings whose level is equal or below number register
+.B Hc
+and also less than or equal to
+.B Hb
+or
+.B Hs
+are centered.
+.RE
+.
+.IP
+.B Font control of the heading
+.
+.RS
+.IP
+The font of each heading level is controlled by string
+.BR HF .
+.
+It contains a font number or font name for each level.
+.
+Default value is
+.
+.RS
+.IP
+.B 2 2 2 2 2 2 2 2 2 2 2 2 2 2
+.RE
+.
+.IP
+(all headings in italic).
+.
+This could also be written as
+.
+.RS
+.IP
+.B I I I I I I I I I I I I I I
+.RE
+.
+.IP
+Note that some other implementations use
+.B 3\~3\~2\~2\~2\~2\~2
+as the default value.
+.
+All omitted values are presumed to have value\~1.
+.RE
+.
+.IP
+.B Point size control
+.
+.RS
+.IP
+String
+.B HP
+controls the point size of each heading,
+in the same way as
+.B HF
+controls the font.
+.
+A value of\~0 selects the default point size.
+.
+Default value is
+.
+.RS
+.IP
+.B 0 0 0 0 0 0 0 0 0 0 0 0 0 0
+.RE
+.
+.IP
+Beware that only the point size changes, not the vertical size.
+.
+The latter can be controlled by the user-specified macros
+.B HX
+and/or
+.BR HZ .
+.RE
+.
+.IP
+.B Heading counters
+.
+.RS
+.IP
+Fourteen number registers named
+.B H1
+up to
+.B H14
+contain the counter for each heading level.
+.
+The values are printed using Arabic numerals;
+this can be changed with the macro
+.B HM
+(see below).
+.
+All marks are concatenated before printing.
+.
+To avoid this,
+set number register
+.B Ht
+to\~1.
+.
+This only prints the current heading counter at each heading.
+.RE
+.
+.IP
+.B Automatic table of contents
+.
+.RS
+.IP
+All headings whose level is equal or below number register
+.B Cl
+are saved to be printed in the table of contents.
+.
+Default value is\~2.
+.RE
+.
+.IP
+.B Special control of the heading, user-defined macros
+.
+.RS
+.IP
+The following macros can be defined by the user to get a finer control
+of vertical spacing, fonts, or other features.
+.
+Argument
+.I level
+is the level-argument to\~\c
+.BR H ,
+but\~0 for unnumbered headings (see
+.BR HU ).
+.
+Argument
+.I rlevel
+is the real level;
+it is set to number register
+.B Hu
+for unnumbered headings.
+.
+Argument
+.I heading-text
+is the text argument to
+.B H
+and
+.BR HU .
+.
+.RS
+.TP
+.BI HX\  "level rlevel heading-text"
+This macro is called just before the printing of the heading.
+.
+The following registers are available for
+.BR HX .
+.
+Note that
+.B HX
+may alter
+.BR }0 ,
+.BR }2 ,
+and
+.BR ;3 .
+.
+.RS
+.TP
+.BR }0\  (string)
+Contains the heading mark plus two spaces if
+.I rlevel
+is non-zero,
+otherwise empty.
+.
+.TP
+.BR ;0\  (register)
+Contains the position of the text after the heading.
+.
+0\~means that the text should follow the heading on the same line,
+1\~means that a line break should occur before the text,
+and 2\~means that a blank line should separate the heading and the text.
+.
+.TP
+.BR }2\  (string)
+Contains two spaces if register
+.B ;0
+is\~0.
+.
+It is used to separate the heading from the text.
+.
+The string is empty if
+.B ;0
+is non-zero.
+.
+.TP
+.BR ;3\  (register)
+Contains the needed space in units after the heading.
+.
+Default is 2v.
+.
+Can be used to change things like numbering
+.RB ( }0 ),
+vertical spacing
+.RB ( }2 ),
+and the needed space after the heading.
+.RE
+.
+.TP
+.BI HY\  "dlevel rlevel heading-text"
+This macro is called after size and font calculations and
+might be used to change indentation.
+.
+.TP
+.BI HZ\  "dlevel rlevel heading-text"
+This macro is called after the printing of the heading,
+just before
+.B H
+or
+.B HU
+exits.
+.
+Can be used to change the page header according to the section heading.
+.RE
+.RE
+.
+.TP
+.BI HC\  \fR[\fPhyphenation-character\fR]\fP
+Set hyphenation character.
+.
+Default value is \[oq]\[rs]%\[cq].
+.
+Resets to the default if called without argument.
+.
+Hyphenation can be turned off by setting number register
+.B Hy
+to\~0 at the beginning of the file.
+.
+.TP
+.BI HM\  "\fR[\fParg1 \fR[\fParg2 \fR[.\|.\|.\& [\fParg14\fR]]]]\fP"
+Heading mark style.
+.
+Controls the type of marking for printing of the heading counters.
+.
+Default is\~1 for all levels.
+.
+.IP
+.B Argument
+.
+.TS
+tab(@);
+l l.
+1@Arabic numerals.
+0001@Arabic numerals with leading zeroes, one or more.
+A@upper-case alphabetic
+a@lower-case alphabetic
+I@upper-case roman numerals
+i@lower-case roman numerals
+\[dq]\[dq]@Arabic numerals.
+.TE
+.
+.TP
+.BI HU\  heading-text
+Unnumbered section header.
+.
+.B HU
+behaves like
+.B H
+at the level in number register
+.BR Hu .
+.
+See\~\c
+.BR H .
+.
+.TP
+.BI HX\  "dlevel rlevel heading-text"
+User-defined heading exit.
+.
+Called just before printing the header.
+.
+See\~\c
+.BR H .
+.
+.TP
+.BI HY\  "dlevel rlevel heading-text"
+User-defined heading exit.
+.
+Called just before printing the header.
+.
+See\~\c
+.BR H .
+.
+.TP
+.BI HZ\  "dlevel rlevel heading-text"
+User-defined heading exit.
+.
+Called just after printing the header.
+.
+See\~\c
+.BR H .
+.
+.TP
+.BI I\  "\fR[\fPitalic-text \fR[\fPprev-font-text \fR[\fPitalic-text \fR[.\|.\|.]]]]\fP"
+Italic.
+.
+Changes the font to italic if called without arguments.
+.
+With one argument it sets the word in italic.
+.
+With two arguments it concatenates them and sets the first
+word in italic and the second in the previous font.
+.
+There is no limit on the number of argument;
+all are concatenated.
+.
+.TP
+.BI IA\  "\fR[\fPaddressee-name \fR[\fPtitle\fR]]\fP"
+Begin specification of the addressee and addressee's address in
+letter style.
+.
+Several names can be specified with empty
+.BR IA / IE -pairs,
+but only one address.
+.
+See
+.BR LT .
+.
+.TP
+.BI IB\  "\fR[\fPitalic-text \fR[\fPbold-text \fR[\fPitalic-text \fR[.\|.\|.]]]]\fP"
+Italic-bold.
+.
+Even arguments are printed in italic, odd in boldface.
+.
+See\~\c
+.BR I .
+.
+.TP
+.B IE
+End the address specification after
+.BR IA .
+.
+.TP
+.BI INITI\  "type filename \fR[\fPmacro\fR]\fP"
+Initialize the new index system and set the filename to collect index
+lines in with
+.BR IND .
+.
+Argument
+.I type
+selects the type of index: page number, header marks or both.
+.
+The default is page numbers.
+.
+.IP
+It is also possible to create a macro that is responsible
+for formatting each row;
+just add the name of the macro as a third argument.
+.
+The macro is then called with the index as argument(s).
+.
+.IP
+.B type
+.
+.IP
+.TS
+tab(@);
+l lx.
+N@Page numbers
+H@Header marks
+B@T{
+Both page numbers and header marks,
+separated with a tab character.
+T}
+.TE
+.
+.TP
+.BI INITR\  filename
+Initialize the cross reference macros.
+.
+Cross references are written to stderr and are supposed to be
+redirected into file
+.RI filename .qrf .
+.
+Requires two passes with groff;
+this is handled by a separate program called
+.BR mmroff (@MAN1EXT@).
+.
+This program exists because
+.BR groff (@MAN1EXT@)
+by default deactivates the unsafe operations that are required by
+.BR INITR .
+.
+The first pass looks for cross references,
+and the second one includes them.
+.
+.B INITR
+can be used several times,
+but it is only the first occurrence of
+.B INITR
+that is active.
+.
+.IP
+See also
+.BR SETR ,
+.BR GETPN ,
+and
+.BR GETHN .
+.
+.TP
+.BI IND\  "arg1 \fR[\fParg2 \fR[.\|.\|.]]\fP"
+Write a line in the index file selected by
+.B INITI
+with all arguments and the page number or header mark separated by tabs.
+.
+.RS
+.IP
+.B Examples
+.
+.IP
+arg1\[rs]tpage number
+.br
+arg1\[rs]targ2\[rs]tpage number
+.br
+arg1\[rs]theader mark
+.br
+arg1\[rs]tpage number\[rs]theader mark
+.RE
+.
+.TP
+.B INDP
+Print the index by running the command specified by string variable
+.BR Indcmd ,
+which has \[oq]sort\ \-t\[rs]t\[cq] as the default value.
+.
+.B INDP
+reads the output from the command to form the index,
+by default in two columns (this can be changed by defining
+.BR TYIND ).
+.
+The index is printed with string variable
+.B Index
+as header,
+default is \[oq]INDEX\[cq].
+.
+One-column processing is reactivated after the list.
+.
+.B INDP
+calls the user-defined macros
+.BR TXIND ,
+.BR TYIND ,
+and
+.B TZIND
+if defined.
+.
+.B TXIND
+is called before printing the string \[oq]INDEX\[cq],
+.B TYIND
+is called instead of printing \[oq]INDEX\[cq], and
+.B TZIND
+is called after the printing and should take care of restoring to
+normal operation again.
+.
+.TP
+.B ISODATE \fR[\fP0\fR]\fP
+Change the predefined date string in
+.B DT
+to ISO-format, this is, \[oq]YYYY-MM-DD\[cq].
+.
+This can also be done by adding
+.B \-rIso=1
+on the command line.
+.
+Reverts to old date format if argument is\~\c
+.BR 0 .
+.
+.TP
+.BI IR\  "\fR[\fPitalic-text \fR[\fProman-text \fR[\fPitalic-text \fR[.\|.\|.]]]]\fP"
+Italic-roman.
+.
+Even arguments are printed in italic, odd in roman.
+.
+See\~\c
+.BR I .
+.
+.TP
+.BI LB\  "text-indent mark-indent pad type \fR[\fPmark \fR[\fPLI-space \fR[\fPLB-space\fR]]]\fP"
+List-begin macro.
+.
+This is the common macro used for all lists.
+.
+.I text-indent
+is the number of spaces to indent the text from the current indentation.
+.
+.IP
+.I pad
+and
+.I mark-indent
+control where to put the mark.
+.
+The mark is placed within the mark area, and
+.I mark-indent
+sets the number of spaces before this area.
+.
+By default it is\~0.
+.
+The mark area ends where the text begins.
+.
+The start of the text is still controlled by
+.IR text-indent .
+.
+.IP
+The mark is left-justified within the mark area if
+.I pad
+is\~0.
+.
+If
+.I pad
+is greater than\~0,
+.I mark-indent
+is ignored,
+and the mark is placed
+.I pad
+spaces before the text.
+.
+This right-justifies the mark.
+.
+.IP
+If
+.I type
+is\~0 the list either has a hanging indentation or,
+if argument
+.I mark
+is given,
+the string
+.I mark
+as a mark.
+.
+.IP
+If
+.I type
+is greater than\~0 automatic numbering occurs,
+using arabic numbers if
+.I mark
+is empty.
+.
+.I mark
+can then be any of \[oq]1\[cq], \[oq]A\[cq], \[oq]a\[cq], \[oq]I\[cq],
+or \[oq]i\[cq].
+.
+.IP
+.I type
+selects one of six possible ways to display the mark.
+.
+.IP
+.B type
+.
+.RS
+.IP
+.br
+.TS
+tab(@);
+l l.
+1@x.
+2@x)
+3@(x)
+4@[x]
+5@<x>
+6@{x}
+.TE
+.RE
+.
+.IP
+Every item in the list gets
+.I LI-space
+number of blank lines before them.
+.
+Default is\~1.
+.
+.IP
+.B LB
+itself prints
+.I LB-space
+blank lines.
+.
+Default is\~0.
+.
+.TP
+.BI LC\  \fR[\fPlist-level\fR]\fP
+List-status clear.
+.
+Terminates all current active lists down to
+.IR list-level ,
+or\~0 if no argument is given.
+.
+This is used by\~\c
+.B H
+to clear any active list.
+.
+.TP
+.B LE \fR[\fP1\fR]\fP
+List end.
+.
+Terminates the current list.
+.B LE
+outputs a blank line if an argument is given.
+.
+.TP
+.BI LI\  \fR[\fPmark\  \fR[\fP1\fR|\fP2\fR]]\fP
+List item preceding every item in a list.
+.
+Without argument,
+.B LI
+prints the mark determined by the current list type.
+.
+By giving
+.B LI
+one argument, it uses that as the mark instead.
+.
+Two arguments to
+.B LI
+makes
+.I mark
+a prefix to the current mark.
+.
+There is no separating space between the prefix and the mark if the
+second argument is \[oq]2\[cq] instead of \[oq]1\[cq].
+.
+This behaviour can also be achieved by setting number register
+.B Limsp
+to zero.
+.
+A zero length
+.I mark
+makes a hanging indentation instead.
+.
+.IP
+A blank line is printed before the list item by default.
+.
+This behaviour can be controlled by number register
+.BR Ls .
+.
+Pre-spacing occurs for each list level less than or equal to
+.BR Ls .
+.
+Default value is 99.
+.
+There is no nesting limit.
+.
+.IP
+The indentation can be changed through number register
+.BR Li .
+Default is\~6.
+.
+.IP
+All lists begin with a list initialization macro,
+.BR LB .
+.
+There are, however, seven predefined list types to make lists easier
+to use.
+.
+They all call
+.B LB
+with different default values.
+.
+.RS
+.IP
+.TS
+tab(@);
+l l.
+\fBAL\fP@Automatically Incremented List
+\fBML\fP@Marked List
+\fBVL\fP@Variable-Item List
+\fBBL\fP@Bullet List
+\fBDL\fP@Dash List
+\fBRL\fP@Reference List
+\fBBVL\fP@Broken Variable List.
+.TE
+.RE
+.
+.IP
+These lists are described at other places in this manual.
+.
+See also
+.BR LB .
+.
+.TP
+.BI LT\  \fR[\fIarg\/\fR]\fI
+Format a letter in one of four different styles depending
+on the argument.
+.
+Also see section \[lq]Internals\[rq] below.
+.
+.RS
+.IP
+.TS
+tab(@);
+lb lb
+l lx.
+Arg@Style
+BL@T{
+Blocked.
+Date line, return address, writer's address and closing
+begins at the center of the line.
+.
+All other lines begin at the left margin.
+T}
+SB@T{
+Semi-blocked.
+Same as blocked,
+except that the first line in every paragraph is indented five spaces.
+T}
+FB@T{
+Full-blocked.
+All lines begin at the left margin.
+T}
+SP@T{
+Simplified.
+Almost the same as the full-blocked style.
+Subject and the writer's identification are printed in all-capital.
+T}
+.TE
+.RE
+.
+.TP
+.BI LO\  "type \fR[\fParg\fR]\fP"
+Specify options in letter (see
+.BR .LT ).
+.
+This is a list of the standard options:
+.
+.RS
+.IP
+.TS
+tab(@);
+l lx.
+CN@T{
+Confidential notation.
+Prints \[oq]CONFIDENTIAL\[cq] on the second line below the date line.
+.
+Any argument replaces \[oq]CONFIDENTIAL\[cq].
+.
+See also string variable
+.BR LetCN .
+T}
+RN@T{
+Reference notation.
+Prints \[oq]In reference to:\[cq] and the argument two lines below the date line.
+See also string variable
+.BR LetRN .
+T}
+AT@T{
+Attention.
+Prints \[oq]ATTENTION:\[cq] and the argument below the inside address.
+See also string variable
+.BR LetAT .
+T}
+SA@T{
+Salutation.
+Prints \[cq]To Whom It May Concern:\[cq] or the argument if it was present.
+The salutation is printed two lines below the inside address.
+See also string variable
+.BR LetSA .
+T}
+SJ@T{
+Subject line.
+Prints the argument as subject prefixed with \[oq]SUBJECT:\[cq]
+two lines below the inside address,
+except in letter type \[oq]SP\[cq],
+where the subject is printed in all-capital without any prefix.
+See also string variable
+.BR LetSJ .
+T}
+.TE
+.RE
+.
+.TP
+.BI MC\  "column-size \fR[\fPcolumn-separation\fR]\fP"
+Begin multiple columns.
+.
+Return to normal with
+.BR 1C .
+.
+.B MC
+creates as many columns as the current line length permits.
+.
+.I column-size
+is the width of each column,
+and
+.I column-separation
+is the space between two columns.
+.
+Default separation is
+.IR column-size /15.
+.
+See also
+.BR 1C .
+.
+.TP
+.BI ML\  "mark \fR[\fPtext-indent\ " \fR[\fP1\fR]]\fP
+Marked list start.
+.
+The
+.I mark
+argument is printed before each list item.
+.
+.I text-indent
+sets the indent and overrides
+.BR Li .
+.
+A third argument prohibits printing of a blank line before each item.
+.
+.TP
+.BI MT\  "\fR[\fParg \fR[\fPaddressee\fR]]\fP"
+Memorandum type.
+.
+The argument
+.I arg
+is part of a filename in
+.IR @TMAC_MDIR@/ * .MT .
+.
+Memorandum types 0 to\~5 are supported, including type
+\[oq]string\[cq] (which gets internally mapped to type\~6).
+.
+.I addressee
+just sets a variable, used in the AT&T macros.
+.
+.IP
+.B arg
+.
+.RS
+.IP
+.TS
+tab(@);
+l l.
+0@Normal memorandum, no type printed.
+1@Memorandum with \[oq]MEMORANDUM FOR FILE\[cq] printed.
+2@Memorandum with \[oq]PROGRAMMER'S NOTES\[cq] printed.
+3@Memorandum with \[oq]ENGINEER'S NOTES\[cq] printed.
+4@Released paper style.
+5@External letter style.
+.TE
+.RE
+.
+.IP
+See also
+.BR COVER / COVEND ,
+a more flexible type of front page.
+.
+.TP
+.BI MOVE\  "y-pos \fR[\fPx-pos \fR[\fPline-length\fR]]\fP"
+Move to a position, setting page offset to
+.IR x-pos .
+.
+If
+.I line-length
+is not given, the difference between current and new page offset is
+used.
+.
+Use
+.B PGFORM
+without arguments to return to normal.
+.
+.TP
+.BI MULB\  "cw1 space1 \fR[\fPcw2 space2 \fR[\fPcw3 \fR.\|.\|.]]\fP"
+Begin a special multi-column mode.
+.
+All columns widths must be specified.
+.
+The space between the columns must be specified also.
+.
+The last column does not need any space definition.
+.
+.B MULB
+starts a diversion, and
+.B MULE
+ends the diversion and prints the columns.
+.
+The unit for the width and space arguments is \[oq]n\[cq], but
+.B MULB
+accepts all normal unit specifications like \[oq]c\[cq] and \[oq]i\[cq].
+.
+.B MULB
+operates in a separate environment.
+.
+.TP
+.B MULN
+Begin the next column.
+.
+This is the only way to switch the column.
+.
+.TP
+.B MULE
+End the multi-column mode and print the columns.
+.
+.TP
+.BI nP\  \fR[\fPtype\fR]\fP
+Print numbered paragraph with header level two.
+.
+See
+.BR .P .
+.
+.TP
+.B NCOL
+Force printing to the next column.
+.
+Don't use this together with the
+.B MUL*
+macros, see
+.BR 2C .
+.
+.TP
+.BI NS\  \fR[\fParg\  \fR[\fP1\fR]]\fP
+Print different types of notations.
+.
+The argument selects between the predefined type of notations.
+.
+If the second argument is available,
+then the argument becomes the entire notation.
+.
+If the argument doesn't select a predefined type,
+it is printed as \[oq]Copy (\fIarg\/\fP) to\[cq].
+.
+It is possible to add more standard notations,
+see the string variables
+.B Letns
+and
+.BR Letnsdef .
+.
+.RS
+.IP
+.TS
+tab(@);
+l l.
+\fBArg@Notation\fP
+\fInone\/\fP@Copy To
+\[dq]\[dq]@Copy To
+1@Copy To (with att.\&) to
+2@Copy To (without att.\&) to
+3@Att.
+4@Atts.
+5@Enc.
+6@Encs.
+7@Under separate cover
+8@Letter to
+9@Memorandum to
+10@Copy (with atts.\&) to
+11@Copy (without atts.\&) to
+12@Abstract Only to
+13@Complete Memorandum to
+14@CC
+.TE
+.RE
+.
+.TP
+.BI ND\  new-date
+New date.
+.
+Overrides the current date.
+.
+Date is not printed if
+.I new-date
+is an empty string.
+.
+.TP
+.BI OF\  \fR[\fParg\fR]\fP
+Odd-page footer, a line printed just above the normal footer.
+.
+See
+.B EF
+and
+.BR PF .
+.
+.IP
+This macro defines string
+.BR EOPof .
+.
+.TP
+.BI OH\  \fR[\fParg\fR]\fP
+Odd-page header, a line printed just below the normal header.
+.
+See
+.B EH
+and
+.BR PH .
+.
+.IP
+This macro defines string
+.BR TPoh .
+.
+.TP
+.B OP
+Make sure that the following text is printed at the top of an
+odd-numbered page.
+.
+Does not output an empty page if currently at the top of an odd page.
+.
+.TP
+.BI P\  \fR[\fPtype\fR]\fP
+Begin new paragraph.
+.
+.BR P \~without
+argument produces left\-justified text,
+even the first line of the paragraph.
+.
+This is the same as setting
+.I type
+to\~0.
+.
+If the argument is\~1,
+the first line of text following\~\c
+.B P
+is indented by the number of spaces in number register
+.BR Pi ,
+by default\~5.
+.
+.IP
+Instead of giving an argument to\~\c
+.B P
+it is possible to set the paragraph type in number register
+.BR Pt .
+.
+Using 0 and\~1 is the same as adding that value to
+.BR P .
+.
+A value of\~2 indents all paragraphs, except after headings, lists,
+and displays (this value can't be used as an argument to
+.B P
+itself).
+.
+.IP
+The space between two paragraphs is controlled by number register
+.BR Ps ,
+and is\~1 by default (one blank line).
+.
+.TP
+.BI PGFORM\  "\fR[\fPlinelength \fR[\fPpagelength \fR[\fPpageoffset\ " \fR[\fP1\fR]]]]\fP
+Set line length, page length, and/or page offset.
+.
+This macro can be used for special formatting,
+like letter heads and other.
+.
+It is normally the first command in a file,
+though it is not necessary.
+.
+.B PGFORM
+can be used without arguments to reset everything after a
+.B MOVE
+call.
+.
+A line break is done unless the fourth argument is given.
+.
+This can be used to avoid the page number on the first page
+while setting new width and length.
+.
+(It seems as if this macro sometimes doesn't work too well.
+.
+Use the command-line arguments to change
+line length, page length, and page offset instead.)
+.
+.TP
+.B PGNH
+No header is printed on the next page.
+.
+Used to get rid of the header in letters or other special texts.
+.
+This macro must be used before any text to inhibit the page header
+on the first page.
+.
+.TP
+.BI "PIC \fR[\fP\-B\fR] [\fP\-L\fR] [\fP\-C\fR] [\fP\-R\fR] [\fP\-I\ " "n\fR]\fP filename \fR[\fPwidth \fR[\fPheight\fR]]\fP"
+Include a PostScript file in the document.
+.
+The macro depends on
+.BR mmroff (@MAN1EXT@)
+and
+.BR INITR .
+.
+The arguments
+.BR \-L ,
+.BR \-C ,
+.BR \-R ,
+and
+.BI \-I\  n
+adjust the picture or indent it.
+.
+With no flag the picture is adjusted to the left.
+.
+Adding
+.B \-B
+draws a box around the picture.
+.
+The optional
+.I width
+and
+.I height
+can also be given to resize the picture.
+.
+.TP
+.B PE
+Picture end.
+.
+Ends a picture for
+.BR @g@pic (@MAN1EXT@).
+.
+.TP
+.BI PF\  \fR[\fParg\fR]\fP
+Page footer.
+.B PF
+sets the line to be printed at the bottom of each page.
+.
+Empty by default.
+.
+See
+.B PH
+for the argument specification.
+.
+.IP
+This macro defines string
+.BR EOPf .
+.
+.TP
+.BI PH\  \fR[\fParg\fR]\fP
+Page header, a line printed at the top of each page.
+.
+The argument should be specified as
+.
+.RS
+.IP
+.RI \[dq]' left-part ' center-part ' right-part '\[dq]
+.RE
+.
+.IP
+where
+.IR left-part ,
+.IR center-part ,
+and
+.I right-part
+are printed left-justified, centered, and right justified, respectively.
+.
+Within the argument to
+.BR PH ,
+the character \[oq]%\[cq] is changed to the current page number.
+.
+The default argument is
+.
+.RS
+.IP
+\[dq]''- % -''\[dq]
+.RE
+.
+.IP
+which gives the page number between two dashes.
+.
+.IP
+This macro defines string
+.BR TPh .
+.
+.TP
+.B PS
+Picture start (from pic).
+.
+Begins a picture for
+.BR @g@pic (@MAN1EXT@).
+.
+.TP
+.B PX
+Page header user-defined exit.
+.
+This macro is called just after the printing of the page header in
+.I no-space
+mode.
+.
+.TP
+.B R
+Roman.
+.
+Return to roman font, see also\~\c
+.BR I .
+.
+.TP
+.BI RB\  "\fR[\fProman-text \fR[\fPbold-text \fR[\fProman-text \fR[.\|.\|.]]]]\fP"
+Roman-bold.
+.
+Even arguments are printed in roman, odd in boldface.
+.
+See\~\c
+.BR I .
+.
+.TP
+.BI RD\  "\fR[\fPprompt \fR[\fPdiversion \fR[\fPstring\fR]]]\fP"
+Read from standard input to diversion and/or string.
+.
+The text is saved in a diversion named
+.IR diversion .
+.
+Recall the text by writing the name of the diversion after a dot
+on an empty line.
+.
+A string is also defined if
+.I string
+is given.
+.
+.I Diversion
+and/or
+.I prompt
+can be empty (\[dq]\[dq]).
+.
+.TP
+.B RF
+Reference end.
+.
+Ends a reference definition and returns to normal processing.
+.
+See
+.BR RS .
+.
+.TP
+.BI RI\  "\fR[\fProman-text \fR[\fPitalic-text \fR[\fProman-text \fR[.\|.\|.]]]]\fP"
+Print even arguments in roman, odd in italic.
+.
+See\~\c
+.BR I .
+.
+.TP
+.BI RL\  \fR[\fPtext-indent \fR[\fP1\fR]]\fP
+Reference list start.
+.
+Begins a list where each item is preceded with an automatically
+incremented number between square brackets.
+.
+.I text-indent
+changes the default indentation.
+.
+.TP
+.BI RP\  "\fR[\fParg1 \fR[\fParg2\fR]]\fP"
+Produce reference page.
+.
+This macro can be used if a reference page is wanted somewhere in the
+document.
+.
+It is not needed if
+.B TC
+is used to produce a table of contents.
+.
+The reference page is then printed automatically.
+.
+.IP
+The reference counter is not reset if
+.I arg1
+is\~1.
+.
+.IP
+.I arg2
+tells
+.B RP
+whether to eject a page or not.
+.
+.IP
+.B arg2
+.
+.RS
+.IP
+.TS
+tab(@);
+l lx.
+0@The reference page is printed on a separate page.
+1@Do not eject page after the list.
+2@Do not eject page before the list.
+3@Do not eject page before and after the list.
+.TE
+.RE
+.
+.IP
+The reference items are separated by a blank line.
+.
+Setting number register
+.B Ls
+to\~0 suppresses the line.
+.
+.IP
+The string
+.B Rp
+contains the reference page title and is set to \[oq]REFERENCES\[cq]
+by default.
+.
+The number register
+.B Rpe
+holds the default value for the second argument of
+.BR RP ;
+it is initially set to\~0.
+.
+.TP
+.BI RS\  \fR[\fPstring-name\fR]\fP
+Begin an automatically numbered reference definition.
+.
+Put the string
+.B \[rs]*(Rf
+where the reference mark should be and write the reference between
+.BR RS / RF
+at next new line after the reference mark.
+.
+The reference number is stored in number register
+.BR :R .
+.
+If
+.I string-name
+is given, a string with that name is defined and contains the current
+reference mark.
+.
+The string can be referenced as
+.BI \[rs]*[ string-name ]
+later in the text.
+.
+.TP
+.BI S\  "\fR[\fPsize \fR[\fPspacing\fR]]\fP"
+Set point size and vertical spacing.
+.
+If any argument is equal to \[oq]P\[cq], the previous value is used.
+.
+A \[oq]C\[cq] means current value, and \[oq]D\[cq] the default value.
+.
+If \[oq]+\[cq] or \[oq]\-\[cq] is used before the value,
+the current value is incremented or decremented, respectively.
+.
+.TP
+.BI SA\  \fR[\fParg\fR]\fP
+Set right-margin justification.
+.
+Justification is turned on by default.
+.
+No argument or value \[oq]0\[cq] turns off justification,
+and \[oq]1\[cq] turns on justification.
+.
+.TP
+.BI SETR\  "refname \fR[\fPstring\fR]\fP"
+Remember the current header and page number as
+.IR refname .
+.
+Saves
+.I string
+if
+.I string
+is defined.
+.
+.I string
+is retrieved with
+.BR .GETST .
+.
+See
+.BR INITR .
+.
+.TP
+.BI SG\  \fR[\fParg\  \fR[\fP1\fR]]\fP
+Signature line.
+.
+Prints the authors name(s) after the formal closing.
+.
+The argument is appended to the reference data, printed at either the
+first or last author.
+.
+The reference data is the location, department, and initials specified
+with
+.BR .AU .
+.
+It is printed at the first author if the second argument is given,
+otherwise at the last.
+.
+No reference data is printed if the author(s) is specified through
+.BR .WA / .WE .
+.
+See section \[lq]Internals\[rq] below.
+.
+.TP
+.BI SK\  \fR[\fPpages\fR]\fP
+Skip pages.
+.
+If
+.I pages
+is\~0 or omitted, a skip to the next page occurs unless it is already
+at the top of a page.
+.
+Otherwise it skips
+.I pages
+pages.
+.
+.TP
+.BI SM\  "string1 \fR[\fPstring2 \fR[\fPstring3\fR]]\fP"
+Make a string smaller.
+.
+If
+.I string2
+is given,
+.I string1
+is made smaller and
+.I string2
+stays at normal size,
+concatenated with
+.IR string1 .
+.
+With three arguments, everything is concatenated, but only
+.I string2
+is made smaller.
+.
+.TP
+.BI SP\  \fR[\fPlines\fR]\fP
+Space vertically.
+.
+.I lines
+can have any scaling factor, like \[oq]3i\[cq] or \[oq]8v\[cq].
+.
+Several
+.B SP
+calls in a line only produces the maximum number of lines, not the sum.
+.
+.B SP
+is ignored also until the first text line in a page.
+.
+Add
+.B \[rs]&
+before a call to
+.B SP
+to avoid this.
+.
+.TP
+.B TAB
+Reset tabs to every\ 5n.
+.
+Normally used to reset any previous tab positions.
+.
+.TP
+.BI TB\  "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP"
+Table title.
+.
+The arguments are the same as for
+.BR EC .
+.
+.B TB
+uses the number register
+.B Tb
+as a counter.
+.
+The string
+.B Lt
+controls the title of the List of Tables;
+default value is \[oq]LIST OF TABLES\[cq].
+.
+The List of Tables is only printed if number register
+.B Lt
+is\~1, which is the default.
+.
+The string
+.B Litb
+contains the word \[oq]TABLE\[cq], which is printed before the number.
+.
+.IP
+Special handling of the title occurs if
+.B TB
+is used inside
+.BR DS / DE ,
+it is not affected by the format of
+.BR DS .
+.
+.TP
+.BI TC\  "\fR[\fPslevel \fR[\fPspacing \fR[\fPtlevel \fR[\fPtab \fR[\fPh1 \fR[\fPh2 \fR[\fPh3 \fR[\fPh4 \fR[\fPh5\fR]]]]]]]]]\fP"
+Table of contents.
+.
+This macro is normally used as the last line of the document.
+.
+It generates a table of contents with headings up to the level
+controlled by number register
+.BR Cl .
+.
+Note that
+.B Cl
+controls the saving of headings, it has nothing to do with
+.BR TC .
+.
+Headings with a level less than or equal to
+.I slevel
+get
+.I spacing
+number of lines before them.
+.
+Headings with a level less than or equal to
+.I tlevel
+have their page numbers right\-justified with dots or spaces separating
+the text and the page number.
+.
+Spaces are used if
+.I tab
+is greater than zero, dots otherwise.
+.
+Other headings have the page number directly at the end of the heading
+text
+.RI ( ragged-right ).
+.
+.IP
+The rest of the arguments is printed, centered, before the table of
+contents.
+.
+.IP
+The user-defined macros
+.B TX
+and
+.B TY
+are used if
+.B TC
+is called with at most four arguments.
+.
+.B TX
+is called before the printing of the string \[oq]CONTENTS\[cq],
+and
+.B TY
+is called instead of printing \[oq]CONTENTS\[cq].
+.
+.IP
+Equivalent macros can be defined for list of figures, tables, equations
+and exhibits by defining
+.BI TX xx
+or
+.BI TY xx\fR,\fP
+where
+.I xx
+is \[oq]Fg\[cq], \[oq]TB\[cq], \[oq]EC\[cq], or \[oq]EX\[cq],
+respectively.
+.
+.IP
+String
+.B Ci
+can be set to control the indentations for each heading-level.
+.
+It must be scaled, like
+.
+.RS
+.IP
+\&.ds Ci .25i .5i .75i 1i 1i
+.RE
+.
+.IP
+By default, the indentation is controlled by the maximum length of
+headings in each level.
+.
+.IP
+The string variables
+.BR Lifg ,
+.BR Litb ,
+.BR Liex ,
+.BR Liec ,
+and
+.B Licon
+contain \[oq]Figure\[cq], \[oq]TABLE\[cq], \[oq]Exhibit\[cq],
+\[oq]Equation\[cq], and \[oq]CONTENTS\[cq], respectively.
+.
+These can be redefined to other languages.
+.
+.TP
+.B TE
+Table end.
+.
+See
+.BR TS .
+.
+.TP
+.B TH \fR[\fPN\fR]\fP
+Table header.
+.
+See
+.BR TS .
+.
+.B TH
+ends the header of the table.
+.
+This header is printed again if a page break occurs.
+.
+Argument \[oq]N\[cq] isn't implemented yet.
+.
+.TP
+.BI TL\  "\fR[\fPcharging-case-number \fR[\fPfiling-case-number\fR]]\fP"
+Begin title of memorandum.
+.
+All text up to the next
+.B AU
+is included in the title.
+.
+.I charging-case-number
+and
+.I filing-case-number
+are saved for use in the front page processing.
+.
+.TP
+.BI TM\  "\fR[\fPnum1 \fR[\fPnum2 \fR[.\|.\|.]]]\fP"
+Technical memorandum numbers used in
+.BR .MT .
+.
+An unlimited number of arguments may be given.
+.
+.TP
+.B TP
+Top-of-page user-defined macro.
+.
+This macro is called instead of the normal page header.
+.
+It is possible to get complete control over the header.
+.
+Note that the header and the footer are printed in a separate environment.
+.
+Line length is preserved, though.
+.
+See
+.BR EOP .
+.
+.IP
+.B strings available to TP
+.RS
+.TS
+tab(@);
+l l.
+TPh@argument of \fBPH\fP
+TPeh@argument of \fBEH\fP
+TPoh@argument of \fBOH\fP
+.TE
+.RE
+.
+.TP
+.B TS \fR[\fPH\fR]\fP
+Table start.
+.
+This is the start of a table specification to
+.BR @g@tbl (@MAN1EXT@).
+.
+.B TS
+ends with
+.BR TE .
+.
+Argument \[oq]H\[cq] tells
+.B m@TMAC_M_PREFIX@m
+that the table has a header.
+.
+See
+.BR TH .
+.
+.TP
+.B TX
+User-defined table of contents exit.
+.
+This macro is called just before
+.B TC
+prints the word \[oq]CONTENTS\[cq].
+.
+See
+.BR TC .
+.
+.TP
+.B TY
+User-defined table of contents exit.
+.
+This macro is called instead of printing \[oq]CONTENTS\[cq].
+.
+See
+.BR TC .
+.
+.TP
+.BI VERBON\  "\fR[\fPflag \fR[\fPpoint-size \fR[\fPfont\fR]]]\fP"
+Begin verbatim output using Courier font.
+.
+Usually for printing programs.
+.
+All characters have equal width.
+.
+The point size can be changed with the second argument.
+.
+By specifying a third argument it is possible to use another font
+instead of Courier.
+.
+.I flag
+controls several special features.
+.
+Its value is the sum of all wanted features.
+.
+.RS
+.IP
+.TS
+tab(@);
+lb lb
+l lx.
+Arg@Description
+1@T{
+Disable the escape character (\[rs]).
+This is normally turned on during verbose output.
+T}
+2@Add an empty line before the verbose text.
+4@Add an empty line after the verbose text.
+8@T{
+Print the verbose text with numbered lines.
+This adds four digit-sized spaces in the beginning of each line.
+Finer control is available with the string variable
+.BR Verbnm .
+It contains all arguments to the
+.BR troff (@MAN1EXT@)
+command
+.BR .nm ,
+normally \[oq]1\[cq].
+T}
+16@T{
+Indent the verbose text by \[oq]5n\[cq].
+.
+This is controlled by the number-variable
+.B Verbin
+(in units).
+T}
+.TE
+.RE
+.
+.TP
+.B VERBOFF
+End verbatim output.
+.
+.TP
+.BI VL\  "text-indent \fR[\fPmark-indent\ " \fR[\fP1\fR]]\fP
+Variable-item list.
+.
+It has no fixed mark, it assumes that every
+.B LI
+has a mark instead.
+.
+.I text-indent
+sets the indent to the text, and
+.I mark-indent
+the distance from the current indentation to the mark.
+.
+A third argument prohibits printing of a blank line before each item.
+.
+.TP
+.BI "VM \fR[\fP\-T\fR] [\fP" "top \fR[\fPbottom\fR]]\fP"
+Vertical margin.
+.
+Increase the top and bottom margin by
+.I top
+and
+.IR bottom ,
+respectively.
+.
+If option
+.B \-T
+is specified, set those margins to
+.I top
+and
+.IR bottom .
+.
+If no argument is given, reset the margin to zero, or to the default
+(\[oq]7v 5v\[cq]) if
+.B \-T
+is used.
+.
+It is highly recommended that macros
+.B TP
+and/or
+.B EOP
+are defined if using
+.B \-T
+and setting top and/or bottom margin to less than the default.
+.
+.TP
+.BI WA\  "\fR[\fPwriter-name \fR[\fPtitle\fR]]\fP"
+Begin specification of the writer and writer's address.
+.
+Several names can be specified with empty
+.BR WA / WE
+pairs, but only one address.
+.
+.TP
+.B WE
+End the address specification after
+.BR .WA .
+.
+.TP
+.BI WC\  "\fR[\fPformat1\fR] [\fPformat2\fR] [.\|.\|.]\fP"
+Footnote and display width control.
+.
+.RS
+.TS
+tab(@);
+l lx.
+N@T{
+Set default mode which is equal to using the options
+.BR \-WF ,
+.BR \-FF ,
+.BR \-WD ,
+and
+.BR FB .
+T}
+WF@T{
+Wide footnotes, wide also in two-column mode.
+T}
+-WF@Normal footnote width, follow column mode.
+FF@T{
+All footnotes gets the same width as the first footnote encountered.
+T}
+-FF@T{
+Normal footnotes, width follows \fBWF\fP and \fB-WF\fP.
+T}
+WD@T{
+Wide displays, wide also in two-column mode.
+T}
+-WD@T{
+Normal display width, follow column mode.
+T}
+FB@T{
+Floating displays generates a line break when printed on the current
+page.
+T}
+-FB@T{
+Floating displays does not generate line break.
+T}
+.TE
+.RE
+.
+.
+.\" ====================================================================
+.SS "Strings used in m@TMAC_M_PREFIX@m"
+.\" ====================================================================
+.
+.TP
+.B App
+A string containing the word \[oq]APPENDIX\[cq].
+.
+.TP
+.B Apptxt
+The current appendix text.
+.
+.TP
+.B EM
+Em dash string
+.
+.TP
+.B H1txt
+Updated by
+.B .H
+and
+.B .HU
+to the current heading text.
+.
+Also updated in table of contents & friends.
+.
+.TP
+.B HF
+Font list for headings, \[oq]2 2 2 2 2 2 2\[cq] by default.
+.
+Non-numeric font names may also be used.
+.
+.TP
+.B HP
+Point size list for headings.
+.
+By default, this is \[cq]0 0 0 0 0 0 0\[cq] which is the same as \[oq]10
+10 10 10 10 10 10\[cq].
+.
+.TP
+.B Index
+Contains the string \[oq]INDEX\[cq].
+.
+.TP
+.B Indcmd
+Contains the index command.
+.
+Default value is \[oq]sort\ \-t\[rs]t\[cq].
+.
+.TP
+.B Lifg
+String containing \[oq]Figure\[cq].
+.
+.TP
+.B Litb
+String containing \[oq]TABLE\[cq].
+.
+.TP
+.B Liex
+String containing \[oq]Exhibit\[cq].
+.
+.TP
+.B Liec
+String containing \[oq]Equation\[cq].
+.
+.TP
+.B Licon
+String containing \[oq]CONTENTS\[cq].
+.
+.TP
+.B Lf
+Contains the string \[oq]LIST OF FIGURES\[cq].
+.
+.TP
+.B Lt
+Contains the string \[oq]LIST OF TABLES\[cq].
+.
+.TP
+.B Lx
+Contains the string \[oq]LIST OF EXHIBITS\[cq].
+.
+.TP
+.B Le
+Contains the string \[oq]LIST OF EQUATIONS\[cq].
+.
+.TP
+.B Letfc
+Contains the string \[oq]Yours very truly,\[cq],
+used in
+.BR .FC .
+.
+.TP
+.B Letapp
+Contains the string \[oq]APPROVED:\[cq],
+used in
+.BR .AV .
+.
+.TP
+.B Letdate
+Contains the string \[oq]Date\[cq],
+used in
+.BR .AV .
+.
+.TP
+.B LetCN
+Contains the string \[oq]CONFIDENTIAL\[cq],
+used in
+.BR ".LO CN" .
+.
+.TP
+.B LetSA
+Contains the string \[oq]To Whom It May Concern:\[cq],
+used in
+.BR ".LO SA" .
+.
+.TP
+.B LetAT
+Contains the string \[oq]ATTENTION:\[cq],
+used in
+.BR ".LO AT" .
+.
+.TP
+.B LetSJ
+Contains the string \[oq]SUBJECT:\[cq],
+used in
+.BR ".LO SJ" .
+.
+.TP
+.B LetRN
+Contains the string \[oq]In reference to:\[cq],
+used in
+.BR ".LO RN" .
+.
+.TP
+.B Letns
+is an array containing the different strings used in
+.BR .NS .
+.
+It is really a number of string variables prefixed with
+.BR Letns! .
+.
+If the argument doesn't exist, it is included between
+.B ()
+with
+.B Letns!copy
+as a prefix and
+.B Letns!to
+as a suffix.
+.
+Observe the space after \[oq]Copy\[cq] and before \[oq]to\[cq].
+.
+.RS
+.IP
+.TS
+tab(@);
+lb lb
+l l.
+Name@Value
+Letns!0@Copy to
+Letns!1@Copy (with att.\&) to
+Letns!2@Copy (without att.\&) to
+Letns!3@Att.
+Letns!4@Atts.
+Letns!5@Enc.
+Letns!6@Encs.
+Letns!7@Under separate cover
+Letns!8@Letter to
+Letns!9@Memorandum to
+Letns!10@Copy (with atts.\&) to
+Letns!11@Copy (without atts.\&) to
+Letns!12@Abstract Only to
+Letns!13@Complete Memorandum to
+Letns!14@CC
+Letns!copy@Copy \fI(with trailing space)\fP
+Letns!to@ to \fI(note leading space)\fP
+.TE
+.RE
+.
+.TP
+.B Letnsdef
+Define the standard notation used when no argument is given to
+.BR .NS .
+.
+Default is\~0.
+.
+.TP
+.B "MO1 \(en MO12"
+Strings containing the month names \[oq]January\[cq] through
+\[oq]December\[cq].
+.
+.TP
+.B Qrf
+String containing \[oq]See chapter \[rs]\[rs]*[Qrfh], page
+\[rs]\[rs]n[Qrfp].\[cq].
+.
+.TP
+.B Rp
+Contains the string \[oq]REFERENCES\[cq].
+.
+.TP
+.B Tcst
+Contains the current status of the table of contents and list of
+figures, etc.
+.
+Empty outside of
+.BR .TC .
+.
+Useful in user-defined macros like
+.BR .TP .
+.
+.RS
+.IP
+.TS
+tab(@);
+lb lb
+l l.
+Value@Meaning
+co@Table of contents
+fg@List of figures
+tb@List of tables
+ec@List of equations
+ex@List of exhibits
+ap@Appendix
+.TE
+.RE
+.
+.TP
+.B Tm
+Contains the string \[oq]\[rs](tm\[cq], the trade mark symbol.
+.
+.TP
+.B Verbnm
+Argument to
+.B .nm
+in the
+.B .VERBON
+command.
+.
+Default is\~1.
+.
+.
+.\" ====================================================================
+.SS "Number variables used in m@TMAC_M_PREFIX@m"
+.\" ====================================================================
+.
+.TP
+.B Aph
+Print an appendix page for every new appendix  if this number variable
+is non-zero.
+.
+No output occurs if
+.B Aph
+is zero, but there is always an appendix entry in the \[oq]List of
+contents\[cq].
+.
+.TP
+.B Cl
+Contents level (in the range 0 to 14).
+.
+The contents is saved if a heading level is lower than or equal to the
+value of
+.BR Cl .
+.
+Default is\~2.
+.
+.TP
+.B Cp
+Eject page between list of table, list of figure, etc., if the value of
+.B Cp
+is zero.
+.
+Default is\~0.
+.
+.TP
+.B D
+Debug flag.
+.
+Values greater than zero produce debug information of increasing
+verbosity.
+.
+A value of\~1 gives information about the progress of formatting.
+.
+Default is\~0.
+.
+.TP
+.B De
+If set to\~1, eject after floating display is output.
+.
+Default is\~0.
+.
+.TP
+.B Dsp
+If defined, it controls the space output before and after static
+displays.
+.
+Otherwise the value of
+.B Lsp
+is used.
+.
+.TP
+.B Df
+Control floating keep output.
+.
+This is a number in the range 0 to 5, with a default value of\~5.
+.
+See
+.BR .DF .
+.
+.TP
+.B Ds
+If set to\~1, use the amount of space stored in register
+.B Lsp
+before and after display.
+.
+Default is\~1.
+.
+.TP
+.B Ej
+If set to\~1, eject page before each first-level heading.
+.
+Default is\~0.
+.
+.TP
+.B Eq
+Equation labels are left-adjusted if set to\~0 and right-adjusted if
+set to\~1.
+.
+Default is\~0.
+.
+.TP
+.B Fs
+Footnote spacing.
+.
+Default is\~1.
+.
+.TP
+.B "H1 \(en H7"
+Heading counters
+.
+.TP
+.B H1dot
+Append a dot after the level-one heading number if value is greater
+than zero.
+.
+Default is\~1.
+.
+.TP
+.B H1h
+A copy of number register
+.BR H1 ,
+but it is incremented just before the page break.
+.
+Useful in user-defined header macros.
+.
+.TP
+.B Hb
+Heading break level.
+.
+A number in the range 0 to 14, with a default value of\~2.
+.
+See\~\c
+.BR .H .
+.
+.TP
+.B Hc
+Heading centering level.
+.
+A number in the range 0 to 14, with a default value value of\~0.
+.
+See\~\c
+.BR .H .
+.
+.TP
+.B Hi
+Heading temporary indent.
+.
+A number in the range 0 to 2, with a default value of\~1.
+.
+.RS
+.IP
+.TS
+tab(@);
+l lx.
+0@no indentation, left margin
+1@T{
+indent to the right, similar to
+.RB \[oq] ".P 1" \[cq]
+T}
+2@T{
+indent to line up with text part of preceding heading
+T}
+.TE
+.RE
+.
+.TP
+.B Hps
+Heading pre-space level.
+.
+If the heading level is less than or equal to
+.BR Hps ,
+two lines precede the section heading instead of one.
+.
+Default is first level only.
+.
+The real amount of lines is controlled by the variables
+.B Hps1
+and
+.BR Hps2 .
+.
+.TP
+.B Hps1
+Number of lines preceding
+.B .H
+if the heading level is greater than
+.BR Hps .
+.
+Value is in units, default is 0.5.
+.
+.TP
+.B Hps2
+Number of lines preceding
+.B .H
+if the heading level is less than or equal to
+.BR Hps .
+.
+Value is in units, default is\~1.
+.
+.TP
+.B Hs
+Heading space level.
+.
+A number in the range 0 to 14, with a default value of\~2.
+.
+See\~\c
+.BR .H .
+.
+.TP
+.B Hss
+Number of lines following
+.B .H
+if the heading level is less than or equal to
+.BR Hs .
+.
+Value is in units, default is\~1.
+.
+.TP
+.B Ht
+Heading numbering type.
+.
+.RS
+.IP
+.TS
+tab(@);
+l l.
+0@multiple levels (1.1.1, 1.1.2, etc.)
+1@single level
+.TE
+.RE
+.IP
+Default is\~0.
+.
+.TP
+.B Hu
+Unnumbered heading level.
+.
+Default is\~2.
+.
+.TP
+.B Hy
+Hyphenation status of text body.
+.
+.RS
+.IP
+.TS
+7tab(@);
+l l.
+0@no hyphenation
+1@hyphenation on, set to value\~6
+.TE
+.RE
+.
+.IP
+Default is\~0.
+.
+.TP
+.B Iso
+Set this variable to\~1 on the command line to get an ISO-formatted
+date string (\fB\-rIso=1\fP).
+.
+Useless inside of a document.
+.
+.TP
+.B L
+Page length, only for command-line settings.
+.
+.TP
+.B Letwam
+Maximum lines in return-address, used in
+.BR .WA / .WE .
+.
+Default is\~14.
+.
+.TP
+.BR Lf ,\  Lt ,\  Lx ,\  Le
+Enable (1) or disable (0) the printing of List of figures,
+.
+List of tables, List of exhibits and List of equations, respectively.
+.
+Default values are Lf=1, Lt=1, Lx=1, and Le=0.
+.
+.TP
+.B Li
+List indentation, used by
+.BR .AL .
+.
+Default is\~6.
+.
+.TP
+.B Limsp
+A flag controlling the insertion of space between prefix and mark in
+automatic lists
+.RB ( .AL ).
+.
+.RS
+.IP
+.TS
+tab(@);
+l l.
+0@no space
+1@emit space
+.TE
+.RE
+.
+.TP
+.B Ls
+List space threshold.
+.
+If current list level is greater than
+.B Ls
+no spacing occurs around lists.
+.
+Default is\~99.
+.
+.TP
+.B Lsp
+The vertical space used by an empty line.
+.
+The default is 0.5v in troff mode and 1v in nroff mode.
+.
+.TP
+.B N
+Page numbering style.
+.
+.RS
+.IP
+.TS
+tab(@);
+l lx.
+0@normal header for all pages.
+1@T{
+header replaces footer on first page, header is empty.
+T}
+2@page header is removed on the first page.
+3@\[oq]section-page\[cq] numbering style enabled.
+4@page header is removed on the first page.
+5@T{
+\[oq]section-page\[cq] and \[oq]section-figure\[cq] numbering style enabled.
+T}
+.TE
+.RE
+.
+.IP
+Default is\~0.
+.
+See also the number registers
+.B Sectf
+and
+.BR Sectp .
+.
+.TP
+.B Np
+A flag to control whether paragraphs are numbered.
+.
+.RS
+.IP
+.TS
+tab(@);
+l l.
+0@not numbered
+1@numbered in first-level headings.
+.TE
+.RE
+.
+.IP
+Default is\~0.
+.
+.TP
+.B O
+Page offset, only for command-line settings.
+.
+.TP
+.B Of
+Format of figure, table, exhibit, and equation titles.
+.
+.RS
+.IP
+.TS
+tab(@);
+l l.
+0@\[dq]. \[dq]
+1@\[dq] - \[dq]
+.TE
+.RE
+.
+.IP
+Default is\~0.
+.
+.TP
+.B P
+Current page-number, normally the same as \[oq]%\[cq] unless
+\[oq]section-page\[cq] numbering style is enabled.
+.
+.TP
+.B Pi
+Paragraph indentation.
+.
+Default is\~5.
+.
+.TP
+.B Pgps
+A flag to control whether header and footer point size should follow
+the current settings or just change when the header and footer are
+defined.
+.
+.RS
+.IP
+.TS
+tab(@);
+l lx.
+0@T{
+Point size only changes to the current setting when
+.BR .PH ,
+.BR .PF ,
+.BR .OH ,
+.BR .EH ,
+.BR .OF ,
+or
+.B .OE
+is executed.
+T}
+1@T{
+Point size changes after every
+.BR .S .
+This is the default.
+T}
+.TE
+.RE
+.
+.TP
+.B Ps
+Paragraph spacing.
+Default is\~1.
+.
+.TP
+.B Pt
+Paragraph type.
+.
+.RS
+.IP
+.TS
+tab(@);
+l lx.
+0@left-justified
+1@indented paragraphs
+2@T{
+indented paragraphs except after
+.BR .H ,
+.BR .DE ,
+or
+.BR .LE .
+T}
+.TE
+.RE
+.
+.IP
+Default is\~0.
+.
+.TP
+.B Rpe
+Set default value for second argument of
+.BR .RP .
+.
+Default is\~0.
+.
+.TP
+.B Sectf
+A flag controlling \[oq]section-figures\[cq] numbering style.
+.
+A non-zero value enables this.
+.
+See also register\~\c
+.BR N .
+.
+.TP
+.B Sectp
+A flag controlling \[cq]section-page\[cq] numbering style.
+.
+A non-zero value enables this.
+.
+See also register\~\c
+.BR N .
+.
+.TP
+.B Si
+Display indentation.
+.
+Default is\~5.
+.
+.TP
+.B Verbin
+Indentation for
+.BR .VERBON .
+.
+Default is 5n.
+.
+.TP
+.B W
+Line length, only for command-line settings.
+.
+.TP
+.B .mgm
+Always\~1.
+.
+.
+.\" ====================================================================
+.SH INTERNALS
+.\" ====================================================================
+.
+The letter macros are using different submacros depending on the
+letter type.
+.
+The name of the submacro has the letter type as suffix.
+.
+It is therefore possible to define other letter types, either in the
+national macro-file, or as local additions.
+.
+.B .LT
+sets the number variables
+.B Pt
+and
+.B Pi
+to 0 and\~5, respectively.
+.
+The following strings and macros must be defined for a new letter type.
+.
+.TP
+.BI let@init_ type
+This macro is called directly by
+.BR .LT .
+.
+It is supposed to initialize variables and other stuff.
+.
+.TP
+.BI let@head_ type
+This macro prints the letter head,
+and is called instead of the normal page header.
+.
+It is supposed to remove the alias
+.BR let@header ,
+otherwise it is called for all pages.
+.
+.TP
+.BI let@sg_ "type name title n flag \fR[\fParg1 \fR[\fParg2 \fR[.\|.\|.]]]\fP"
+.B .SG
+is calling this macro only for letters;
+memorandums have its own processing.
+.
+.I name
+and
+.I title
+are specified through
+.BR .WA / .WB .
+.
+.IR n \~is
+the counter, 1-max, and
+.I flag
+is true for the last name.
+.
+Any other argument to
+.B .SG
+is appended.
+.
+.TP
+.BI let@fc_ "type closing"
+This macro is called by
+.BR .FC ,
+and has the formal closing as the argument.
+.
+.
+.LP
+.B .LO
+is implemented as a general option-macro.
+.
+It demands that a string named
+.BI Let type
+is defined, where
+.I type
+is the letter type.
+.
+.B .LO
+then assigns the argument to the string variable
+.BI let*lo- type\fR.\fP
+.
+.
+.\" ====================================================================
+.\".SH BUGS
+.\" ====================================================================
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @MACRODIR@/@TMAC_M_PREFIX@m.tmac
+.TP
+.IR @TMAC_MDIR@/ * .cov
+.TP
+.IR @TMAC_MDIR@/ * .MT
+.TP
+.I @TMAC_MDIR@/locale
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+The GNU version of the
+.I mm
+macro package was written by
+.MT jh@\:axis.se
+J\[:o]rgen H\[:a]gg
+.ME
+of Lund, Sweden.
+.
+.
+.na
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR @g@tbl (@MAN1EXT@),
+.BR @g@pic (@MAN1EXT@),
+.BR @g@eqn (@MAN1EXT@)
+.br
+.BR groff_mmse (@MAN7EXT@)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_mm_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" coding: latin-1
+.\" End:
+.\" vim:set filetype=groff:
diff --git a/contrib/mm/groff_mm.man b/contrib/mm/groff_mm.man
deleted file mode 100644 (file)
index a58ce5d..0000000
+++ /dev/null
@@ -1,3983 +0,0 @@
-'\" t
-.TH GROFF_MM @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_mm \- groff mm macros
-.
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.de au
-.MT jh@axis.se
-J\[:o]rgen H\[:a]gg, Lund, Sweden
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B groff
-.B \-m@TMAC_M_PREFIX@m
-[
-.IR options .\|.\|.\&
-]
-[
-.IR files .\|.\|.\&
-]
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The groff mm macros are intended to be compatible with the DWB mm macros
-with the following limitations:
-.
-.TP
-.B \(bu
-No Bell Labs localisms are implemented.
-.
-.TP
-.B \(bu
-The macros OK and PM are not implemented.
-.
-.TP
-.B \(bu
-groff mm does not support cut marks.
-.
-.
-.LP
-.B m@TMAC_M_PREFIX@m
-is intended to support easy localization.
-.
-Use
-.B m@TMAC_M_PREFIX@mse
-as an example how to adapt the output format to a national standard.
-.
-Localized strings are collected in the file
-.RI \[oq]@MACRODIR@/ xx .tmac\[cq],
-where
-.I xx
-denotes the two-letter code for the
-.IR language ,
-as defined in the ISO 639 standard.
-.
-For Swedish, this is \[oq]sv.tmac\[cq] \[en] not \[oq]se\[cq], which
-is the ISO 3166 two-letter code for the
-.I country
-(as used for the output format localization).
-.
-.
-.\"########################################################################
-.LP
-A file called
-.B locale
-or
-.IB country _locale
-is read after the initialization of the global variables.
-.
-It is therefore possible to localize the macros with a different company
-name and so on.
-.
-.
-.LP
-In this manual, square brackets are used to show optional arguments.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Number registers and strings"
-.\" --------------------------------------------------------------------
-.
-Many macros can be controlled by number registers and strings.
-.
-A number register is assigned with the
-.B nr
-command:
-.
-.RS
-.LP
-.BI .nr\  "XXX \fR[\fP\fB\[+-]\fP\fR]\fPn \fR[\fPi\fR]\fP\""
-.RE
-.
-.
-.LP
-.I XXX
-is the name of the register,
-.I n\c
-\~is the value to be assigned, and
-.I i\c
-\~is the increment value for auto-increment.
-.
-.I n\c
-\~can have a plus or minus sign as a prefix if an increment
-or decrement of the current value is wanted.
-.
-(Auto-increment or auto-decrement occurs if the number register is
-used with a plus or minus sign,
-.BI \[rs]n+[ XXX ]
-or
-.BI \[rs]n\-[ XXX ]\fR.)\fP
-.
-.
-.LP
-Strings are defined with
-.BR ds .
-.
-.RS
-.LP
-\fB\&.ds\fP \fIYYY string\fP
-.RE
-..
-
-.LP
-The string is assigned everything to the end of the line,
-even blanks.
-.
-Initial blanks in
-.I string
-should be prefixed with a double-quote.
-.
-(Strings are used in the text as
-.BI \[rs]*[ YYY ]\fR.)\fP
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Special formatting of number registers"
-.\" --------------------------------------------------------------------
-.
-A number register is printed with normal digits if no format has been
-given.
-.
-Set the format with
-.BR af :
-.
-.RS
-.LP
-.BI .af\  "R c"
-.RE
-.
-.
-.LP
-.I R\c
-\~is the name of the register,
-.I c\c
-\~is the format.
-.
-.RS
-.LP
-.TS
-tab(@);
-lb lb
-l l.
-Form@Sequence
-1@0, 1, 2, 3, .\|.\|.
-001@000, 001, 002, 003, .\|.\|.
-i@0, i, ii, iii, iv, .\|.\|.
-I@0, I, II, III, IV, .\|.\|.
-a@0, a, b, c, .\|.\|., z, aa, ab, .\|.\|.
-A@0, A, B, C, .\|.\|., Z, AA, AB, .\|.\|.
-.TE
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS Fonts
-.\" --------------------------------------------------------------------
-.
-In
-.BR m@TMAC_M_PREFIX@m ,
-the fonts (or rather, font styles)
-.B R\c
-\~(normal),
-.B I\c
-\~(italic), and
-.B B\c
-\~(bold) are hardwired to font positions
-.BR 1 ,
-.BR 2 ,
-and\~\c
-.BR 3 ,
-respectively.
-.
-Internally, font positions are used for backwards compatibility.
-.
-From a practical point of view it doesn\[aq]t make a big difference
-\[en] a different font family can still be selected with a call to the
-.B .fam
-request or using
-.BR groff \[aq]s
-.B \-f
-command line option.
-.
-On the other hand, if you want to replace just, say, font
-.BR B ,
-you have to replace the font at position\~2 (with a call to
-\[oq].fp\~2\~.\|.\|.\[cq]).
-.
-.
-.\" --------------------------------------------------------------------
-.SS Macros
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI )E\  "level text"
-Add heading text
-.I text
-to the table of contents with
-.IR level ,
-which is either\~0 or in the range 1 to\~7.
-.
-See also
-.BR .H .
-.
-This macro is used for customized tables of contents.
-.
-.TP
-.BR 1C\  [ 1 ]
-Begin one-column processing.
-.
-A\~\c
-.B 1
-as an argument disables the page break.
-.
-Use wide footnotes, small footnotes may be overprinted.
-.
-.TP
-.B 2C
-Begin two-column processing.
-.
-Splits the page in two columns.
-.
-It is a special case of
-.BR MC .
-See also
-.BR 1C .
-.
-.TP
-.B AE
-Abstract end, see
-.BR AS .
-.
-.TP
-.BI AF\ \fR[\fP name-of-firm \fR]\fP
-Author\[aq]s firm, should be called before
-.BR AU ,
-see also
-.BR COVER .
-.
-.TP
-.BI AL\  \fR[\fPtype\ \fR[\fPtext-indent\  \fR[\fP1\fR]]]\fP
-Start auto-increment list.
-.
-Items are numbered beginning with one.
-.
-The
-.I type
-argument controls the format of numbers.
-.
-.RS
-.IP
-.TS
-tab(@);
-lb lb
-l l.
-Arg@Description
-1@Arabic (the default)
-A@Upper-case letters (A\(enZ)
-a@Lower-case letters (a\(enz)
-I@Upper-case roman
-i@Lower-case roman
-.TE
-.RE
-.
-.IP
-.I text-indent
-sets the indentation and overrides
-.BR Li .
-A third argument prohibits printing of a blank line before each item.
-.
-.TP
-.BI APP\  "name text"
-Begin an appendix with name
-.IR name .
-.
-Automatic naming occurs if
-.I name
-is
-.BR \[dq]\[dq] .
-.
-The appendices start with\~\c
-.B A
-if automatic naming is used.
-.
-A new page is ejected, and a header is also produced if the number
-variable
-.B Aph
-is non-zero.
-.
-This is the default.
-.
-The appendix always appears in the \[oq]List of contents\[cq] with
-correct page numbers.
-.
-The name \[oq]APPENDIX\[cq] can be changed by setting the string
-.B App
-to the desired text.
-.
-The string
-.B Apptxt
-contains the current appendix text.
-.
-.TP
-.BI APPSK\  "name pages text"
-Same as
-.BR .APP ,
-but the page number is incremented with
-.IR pages .
-.
-This is used when diagrams or other non-formatted documents are
-included as appendices.
-.
-.TP
-.BI AS\  "\fR[\fParg \fR[\fPindent\fR]]\fP"
-Abstract start.
-.
-Indentation is specified in \[oq]ens\[cq], but scaling is allowed.
-.
-Argument
-.I arg
-controls where the abstract is printed.
-.
-.RS
-.TS
-tab(@);
-lb lb
-l lx.
-\fBArg@Placement\fP
-0@T{
-Abstract is printed on page\~1 and on the cover sheet if used in the
-released-paper style (\fBMT 4\fP),
-otherwise it is printed on page\~1 without a cover sheet.
-T}
-1@Abstract is only printed on the cover sheet (\fBMT 4\fP only).
-2@T{
-Abstract is printed only on the cover sheet (other than \fBMT 4\fP only).
-The cover sheet is printed without a need for \fBCS\fP.
-T}
-.TE
-.RE
-.
-.IP
-An abstract is not printed at all in external letters (\fBMT 5\fP).
-.
-The
-.I indent
-parameter controls the indentation of both margins, otherwise normal
-text indentation is used.
-.
-.TP
-.BI AST\  \fR[\fPtitle\fR]\fP
-Abstract title.
-.
-Default is \[oq]ABSTRACT\[cq].
-.
-Sets the text above the abstract text.
-.
-.TP
-.BI AT\  "title1 \fR[\fPtitle2 \fR[.\|.\|.]]\fP"
-Author\[aq]s title.
-.
-.B AT
-must appear just after each
-.BR AU .
-.
-The title shows up after the name in the signature block.
-.
-.TP
-.BI AU\  "\fR[\fPname \fR[\fPinitials \fR[\fPloc \fR[\fPdept \fR[\fPext \fR[\fProom \fR[\fParg \fR[\fParg \fR[\fParg\fR]]]]]]]]]\fP"
-Author information.
-.
-Specifies the author of the memo or paper, and is printed on the cover
-sheet and on other similar places.
-.B AU
-must not appear before
-.BR TL .
-.
-The author information can contain initials, location, department,
-telephone extension, room number or name and up to three extra
-arguments.
-.
-.TP
-.BI AV\  \fR[\fPname\  \fR[\fP1\fR]]\fP
-Approval signature.
-.
-Generates an approval line with place for signature and date.
-.
-The string \[oq]APPROVED:\[cq] can be changed with variable
-.BR Letapp ;
-it is replaced with an empty lin if there is a second argument.
-.
-The string \[oq]Date\[cq] can be changed with variable
-.BR Letdate .
-.
-.TP
-.BI AVL\  \fR[\fPname\fR]\fP
-Letter signature.
-.
-Generates a line with place for signature.
-.
-.TP
-.BI B\  "\fR[\fPbold-text \fR[\fPprev-font-text \fR[\fPbold \fR[.\|.\|.]]]]\fP"
-Begin boldface.
-.
-No limit on the number of arguments.
-.
-All arguments are concatenated to one word; the first, third and so on
-is printed in boldface.
-.
-.TP
-.B B1
-Begin box (as the ms macro).
-.
-Draws a box around the text.
-.
-The text is indented one character, and the right margin is one
-character shorter.
-.
-.TP
-.B B2
-End box.
-.
-Finishes the box started with
-.BR B1 .
-.
-.TP
-.B BE
-End bottom block, see
-.BR BS .
-.
-.TP
-.BI BI\  "\fR[\fPbold-text \fR[\fPitalic-text \fR[\fPbold-text \fR[.\|.\|.]]]]\fP"
-Bold-italic.
-.
-No limit on the number of arguments,
-see\~\c
-.BR B .
-.
-.TP
-.BI BL\  \fR[\fPtext-indent\  \fR[\fP1\fR]]\fP
-Start bullet list.
-.
-Initializes a list with a bullet and a space in the beginning of each
-list item (see
-.BR LI ).
-.
-.I text-indent
-overrides the default indentation of the list items set by number register
-.BR Pi .
-.
-A third argument prohibits printing of a blank line before each item.
-.
-.TP
-.BI BR\  "\fR[\fPbold-text \fR[\fProman-text \fR[\fPbold-text \fR[.\|.\|.]]]]\fP"
-Bold-roman.
-No limit on the number of arguments.
-.
-.TP
-.B BS
-Bottom block start.
-.
-Begins the definition of a text block which is printed at the bottom
-of each page.
-.
-The block ends with
-.BR BE .
-.
-.TP
-.BI BVL\  "text-indent \fR[\fPmark-indent\ " \fR[\fP1\fR]]\fP
-Start of broken variable-item list.
-.
-Broken variable-item list has no fixed mark,
-it assumes that every
-.B LI
-has a mark instead.
-.
-The text always begins at the next line after the mark.
-.
-.I text-indent
-sets the indentation to the text, and
-.I mark-indent
-the distance from the current indentation to the mark.
-.
-A third argument prohibits printing of a blank line before each item.
-.
-.TP
-.BI COVER\  \fR[\fParg\fR]\fP
-Begin a coversheet definition.
-.
-It is important that
-.B .COVER
-appears before any normal text.
-.
-This macro uses
-.I arg
-to build the filename
-\[oq]@TMAC_MDIR@/\fIarg\fP.cov\[cq].
-.
-Therefore it is possible to create unlimited types of cover sheets.
-.
-\[oq]ms.cov\[cq] is supposed to look like the ms cover sheet.
-.
-.B .COVER
-requires a
-.B .COVEND
-at the end of the cover definition.
-.
-Always use this order of the cover macros:
-.
-.RS
-.IP
-.nf
-\&.COVER
-\&.TL
-\&.AF
-\&.AU
-\&.AT
-\&.AS
-\&.AE
-\&.COVEND
-.fi
-.RE
-.
-.IP
-However, only
-.B .TL
-and
-.B .AU
-are required.
-.
-.TP
-.B COVEND
-Finish the cover description and print the cover page.
-.
-It is defined in the cover file.
-.
-.TP
-.B DE
-Display end.
-.
-Ends a block of text or display that begins with
-.B DS
-or
-.BR DF .
-.
-.TP
-.BI DF\  "\fR[\fPformat \fR[\fPfill \fR[\fPrindent\fR]]]\fP"
-Begin floating display (no nesting allowed).
-.
-A floating display is saved in a queue and is printed in the order entered.
-.IR Format ,
-.IR fill ,
-and
-.I rindent
-are the same as in
-.BR DS .
-Floating displays are controlled by the two number registers
-.B De
-and
-.BR Df .
-.
-.IP
-.B De register
-.
-.RS
-.IP
-.TS
-tab(@);
-l lx.
-0@T{
-Nothing special, this is the default.
-T}
-1@T{
-A page eject occurs after each printed display,
-giving only one display per page and no text following it.
-T}
-.TE
-.RE
-.
-.IP
-.B Df register
-.
-.RS
-.IP
-.TS
-tab(@);
-l lx.
-0@T{
-Displays are printed at the end of each section (when section-page
-numbering is active) or at the end of the document.
-T}
-1@T{
-A new display is printed on the current page if there is enough space,
-otherwise it is printed at the end of the document.
-T}
-2@T{
-One display is printed at the top of each page or column
-(in multi-column mode).
-T}
-3@T{
-Print one display if there is enough space for it,
-otherwise it is printed at the top of the next page or column.
-T}
-4@T{
-Print as many displays as possible in a new page or column.
-A page break occurs between each display if
-.B De
-is not zero.
-T}
-5@T{
-Fill the current page with displays and the rest beginning at a new page
-or column.
-(This is the default.)
-A page break occurs between each display
-if \fBDe\fP is not zero.
-T}
-.TE
-.RE
-.
-.TP
-.BI DL\  \fR[\fPtext-indent\  "\fR[\fP\fB1\fP \fR[\fP\fB1\fP\fR]]]\fP"
-Dash list start.
-.
-Begins a list where each item is printed after a dash.
-.
-.I text-indent
-changes the default indentation of the list items set by number
-register
-.BR Pi .
-.
-A second argument prevents an empty line between each list item.
-.
-See
-.BR LI .
-.
-A third argument prohibits printing of a blank line before each item.
-.
-.TP
-.BI DS\  "\fR[\fPformat \fR[\fPfill \fR[\fPrindent\fR]]]\fP"
-Static display start.
-.
-Begins collection of text until
-.BR DE .
-.
-The text is printed together on the same page, unless it is longer
-than the height of the page.
-.
-.B DS
-can be nested arbitrarily.
-.
-.IP
-.B format
-.
-.RS
-.IP
-.TS
-tab(@);
-l lx.
-\[dq]\[dq]@No indentation.
-none@No indentation.
-L@No indentation.
-I@T{
-Indent text with the value of number register
-.BR Si .
-T}
-C@Center each line.
-CB@Center the whole display as a block.
-R@Right-adjust the lines.
-RB@Right-adjust the whole display as a block.
-.TE
-.RE
-.
-.IP
-The values \[oq]L\[cq], \[oq]I\[cq], \[oq]C\[cq], and \[oq]CB\[cq] can
-also be specified as \[oq]0\[cq], \[oq]1\[cq], \[oq]2\[cq], and
-\[oq]3\[cq], respectively, for compatibility reasons.
-.
-.IP
-.B fill
-.
-.RS
-.IP
-.TS
-tab(@);
-l l.
-\[dq]\[dq]@Line-filling turned off.
-none@Line-filling turned off.
-N@Line-filling turned off.
-F@Line-filling turned on.
-.TE
-.RE
-.
-.IP
-\[oq]N\[cq] and \[oq]F\[cq] can also be specified as \[oq]0\[cq] and
-\[oq]1\[cq], respectively.
-.
-.IP
-By default, an empty line is printed before and after the display.
-.
-Setting number register
-.B Ds
-to\~0 prevents this.
-.
-.I rindent
-shortens the line length by that amount.
-.
-.TP
-.BI EC\  "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP"
-Equation title.
-.
-Sets a title for an equation.
-.
-The
-.I override
-argument changes the numbering.
-.
-.IP
-.B flag
-.
-.RS
-.IP
-.TS
-tab(@);
-l lx.
-none@T{
-.I override
-is a prefix to the number.
-T}
-0@T{
-.I override
-is a prefix to the number.
-T}
-1@T{
-.I override
-is a suffix to the number.
-T}
-2@T{
-.I override
-replaces the number.
-T}
-.TE
-.RE
-.
-.IP
-.B EC
-uses the number register
-.B Ec
-as a counter.
-.
-It is possible to use
-.B .af
-to change the format of the number.
-.
-If number register
-.B Of
-is\~1, the format of title uses a dash instead of a dot after the
-number.
-.
-.IP
-The string
-.B Le
-controls the title of the List of Equations;
-default is \[oq]LIST OF EQUATIONS\[cq].
-.
-The List of Equations is only printed if number register
-.B Le
-is\~1.
-.
-The default is\~0.
-.
-The string
-.B Liec
-contains the word \[oq]Equation\[cq], which is printed before the
-number.
-.
-If
-.I refname
-is used,
-then the equation number is saved with
-.BR .SETR ,
-and can be retrieved with \[oq]\fB.GETST\fP \fIrefname\fP\[cq].
-.
-.IP
-Special handling of the title occurs if
-.B EC
-is used inside
-.BR DS / DE ;
-it is not affected by the format of
-.BR DS .
-.
-.TP
-.BI EF\  \fR[\fParg\fR]\fP
-Even-page footer,
-printed just above the normal page footer on even pages.
-.
-See
-.BR PF .
-.
-.IP
-This macro defines string
-.BR EOPef .
-.
-.TP
-.BI EH\  \fR[\fParg\fR]\fP
-Even-page header,
-printed just below the normal page header on even pages.
-.
-See
-.BR PH .
-.
-.IP
-This macro defines string
-.BR TPeh .
-.
-.TP
-.B EN
-Equation end, see
-.BR EQ .
-.
-.TP
-.B EOP
-End-of-page user-defined macro.
-.
-This macro is called instead of the normal printing of the footer.
-.
-The macro is executed in a separate environment,
-without any trap active.
-.
-See
-.BR TP .
-.
-.IP
-.B Strings available to EOP
-.RS
-.TS
-tab(@);
-l l.
-EOPf@argument of \fBPF\fP
-EOPef@argument of \fBEF\fP
-EOPof@argument of \fBOF\fP
-.TE
-.RE
-.
-.TP
-.BI EPIC\  "\fR[\fP\fB\-L\fP\fR]\fP width height \fR[\fPname\fR]\fP"
-Draw a box with the given
-.I width
-and
-.IR height .
-.
-It also prints the text
-.I name
-or a default string if
-.I name
-is not specified.
-.
-This is used to include external pictures;
-just give the size of the picture.
-.
-.B \-L
-left-adjusts the picture;
-the default is to center.
-.
-See
-.BR PIC .
-.
-.TP
-.BI EQ\  \fR[\fPlabel\fR]\fP
-Equation start.
-.
-.BR EQ / EN
-are the delimiters for equations written for
-.BR @g@eqn (@MAN1EXT@).
-.
-.BR EQ / EN
-must be inside of a
-.BR DS / DE
-pair, except if
-.B EQ
-is used to set options for
-.B @g@eqn
-only.
-.
-The
-.I label
-argument appears at the right margin of the equation,
-centered vertically within the
-.BR DS / DE
-block,
-unless number register
-.B Eq
-is\~1.
-.
-Then the label appears at the left margin.
-.
-.IP
-If there are multiple
-.BR EQ / EN
-blocks within a single
-.BR DS / DE
-pair,
-only the last equation label (if any) is printed.
-.
-.TP
-.BI EX\  "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP"
-Exhibit title.
-.
-The arguments are the same as for
-.BR EC .
-.
-.B EX
-uses the number register
-.B Ex
-as a counter.
-.
-The string
-.B Lx
-controls the title of the List of Exhibits;
-default is \[oq]LIST OF EXHIBITS\[cq].
-.
-The List of Exhibits is only printed if number register
-.B Lx
-is\~1,
-which is the default.
-.
-The string
-.B Liex
-contains the word \[oq]Exhibit\[cq], which is printed before the
-number.
-.
-If
-.I refname
-is used, the exhibit number is saved with
-.BR .SETR ,
-and can be retrieved with \[oq]\fB.GETST\fP \fIrefname\fP\[cq].
-.
-.IP
-Special handling of the title occurs if
-.B EX
-is used inside
-.BR DS / DE ;
-it is not affected by the format of
-.BR DS .
-.
-.TP
-.BI FC\  \fR[\fPclosing\fR]\fP
-Print \[oq]Yours\~very\~truly,\[cq] as a formal closing of a letter or
-memorandum.
-.
-The argument replaces the default string.
-.
-The default is stored in string variable
-.BR Letfc .
-.
-.TP
-.BI FD\  \fR[\fParg\  \fR[\fP1\fR]]\fP
-Footnote default format.
-.
-Controls the hyphenation (hyphen),
-right margin justification (adjust),
-and indentation of footnote text (indent).
-.
-It can also change the label justification (ljust).
-.
-.RS
-.IP
-.TS
-tab(@);
-lb lb lb lb lb
-l l l l l.
-arg@hyphen@adjust@indent@ljust
-0@no@yes@yes@left
-1@yes@yes@yes@left
-2@no@no@yes@left
-3@yes@no@yes@left
-4@no@yes@no@left
-5@yes@yes@no@left
-6@no@no@no@left
-7@yes@no@no@left
-8@no@yes@yes@right
-9@yes@yes@yes@right
-10@no@no@yes@right
-11@yes@no@yes@right
-.TE
-.RE
-.
-.IP
-An argument greater than or equal to 11 is considered as value\~0.
-.
-Default for
-.B m@TMAC_M_PREFIX@m
-is 10.
-.
-.TP
-.B FE
-Footnote end.
-.
-.TP
-.BI FG\  "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP"
-Figure title.
-.
-The arguments are the same as for
-.BR EC .
-.B FG
-uses the number register
-.B Fg
-as a counter.
-.
-The string
-.B Lf
-controls the title of the List of Figures;
-default is \[oq]LIST OF FIGURES\[cq].
-.
-The List of Figures is only printed if number register
-.B Lf
-is\~1, which is the default.
-.
-The string
-.B Lifg
-contains the word \[oq]Figure\[cq], which is printed before the
-number.
-.
-If
-.I refname
-is used, then the figure number is saved with
-.BR .SETR ,
-and can be retrieved with \[oq]\fB.GETST\fP \fIrefname\fP\[cq].
-.
-.IP
-Special handling of the title occurs if
-.B FG
-is used inside
-.BR DS / DE ,
-it is not affected by the format of
-.BR DS .
-.
-.TP
-.BI FS\  \fR[\fPlabel\fR]\fP
-Footnote start.
-.
-The footnote is ended by
-.BR FE .
-.
-By default, footnotes are automatically numbered;
-the number is available in string\~\c
-.BR F .
-.
-Just add
-.B \[rs]*F
-in the text.
-.
-By adding
-.IR label ,
-it is possible to have other number or names on the footnotes.
-.
-Footnotes in displays are now possible.
-.
-An empty line separates footnotes;
-the height of the line is controlled by number register
-.BR Fs ,
-default value is\~1.
-.
-.TP
-.BI GETHN\  "refname \fR[\fPvarname\fR]\fP"
-Include the header number where the corresponding \[oq]\fBSETR\fP
-\fIrefname\fP\[cq] was placed.
-.
-This is displayed as \[oq]X.X.X.\[cq] in pass\~1.
-.
-See
-.BR INITR .
-.
-If
-.I varname
-is used,
-.B GETHN
-sets the string variable
-.I varname
-to the header number.
-.
-.TP
-.BI GETPN\  "refname \fR[\fPvarname\fR]\fP"
-Include the page number where the corresponding \[oq]\fBSETR\fP
-\fIrefname\fP\[cq] was placed.
-.
-This is displayed as \[oq]9999\[cq] in pass\~1.
-.
-See
-.BR INITR .
-.
-If
-.I varname
-is used,
-.B GETPN
-sets the stringvariable
-.I varname
-to the page number.
-.
-.TP
-.BI GETR\  refname
-Combine
-.B GETHN
-and
-.B GETPN
-with the text \[oq]chapter\[cq] and \[oq],\~page\[cq].
-.
-The string
-.B Qrf
-contains the text for the cross reference:
-.
-.RS
-.IP
-\&.ds Qrf See chapter \[rs]\[rs]*[Qrfh], page \[rs]\[rs]*[Qrfp].
-.RE
-.
-.IP
-.B Qrf
-may be changed to support other languages.
-.
-Strings
-.B Qrfh
-and
-.B Qrfp
-are set by
-.B GETR
-and contain the page and header number, respectively.
-.
-.TP
-.BI GETST\  "refname \fR[\fPvarname\fR]\fP"
-Include the string saved with the second argument to
-.BR .SETR .
-.
-This is a dummy string in pass\~1.
-.
-If
-.I varname
-is used,
-.B GETST
-sets it to the saved string.
-.
-See
-.BR INITR .
-.
-.TP
-.BI H\  "level \fR[\fPheading-text \fR[\fPheading-suffix\fR]]\fP"
-Numbered section heading.
-.
-Section headers can have a level between 1 and 14;
-level\~1 is the top level.
-.
-The text is given in
-.IR heading-text ,
-and must be surrounded by double quotes if it contains spaces.
-.
-.I heading-suffix
-is added to the header in the text but not in the table of contents.
-.
-This is normally used for footnote marks and similar things.
-.
-Don\[aq]t use
-.B \[rs]*F
-in
-.IR heading-suffix ,
-it doesn\[aq]t work.
-.
-A manual label must be used, see
-.BR FS .
-.sp
-A call to the paragraph macro\~\c
-.B P
-directly after\~\c
-.B H
-is ignored.
-.
-.B H\c
-\~takes care of spacing and indentation.
-.
-.IP
-.B Page ejection before heading
-.
-.RS
-.IP
-Number register
-.B Ej
-controls page ejection before the heading.
-.
-By default, a level-one heading gets two blank lines before it;
-higher levels only get one.
-.
-A new page is ejected before each first-level heading if number
-register
-.B Ej
-is\~1.
-.
-All levels below or equal the value of
-.B Ej
-get a new page.
-.
-Default value for
-.B Ej
-is\~0.
-.RE
-.
-.IP
-.B Heading break level
-.
-.RS
-.IP
-A line break occurs after the heading if the heading level is less
-or equal to number register
-.BR Hb .
-.
-Default value is\~2.
-.RE
-.
-.IP
-.B Heading space level
-.
-.RS
-.IP
-A blank line is inserted after the heading if the heading level is
-less or equal to number register
-.BR Hs .
-.
-Default value is\~2.
-.
-.IP
-Text follows the heading on the same line if the level is greater than
-both
-.B Hb
-and
-.BR Hs .
-.RE
-.
-.IP
-.B Post-heading indent
-.
-.RS
-.IP
-Indentation of the text after the heading is controlled by number
-register
-.BR Hi .
-.
-Default value is\~0.
-.
-.IP
-.B Hi
-.TS
-tab(@);
-l lx.
-0@The text is left-justified.
-1@T{
-Indentation of the text follows the value of number
-register
-.B Pt ,
-see
-.BR P .
-T}
-2@T{
-The text is lined up with the first word of the heading.
-T}
-.TE
-.RE
-.
-.IP
-.B Centered section headings
-.
-.RS
-.IP
-All headings whose level is equal or below number register
-.B Hc
-and also less than or equal to
-.B Hb
-or
-.B Hs
-are centered.
-.RE
-.
-.IP
-.B Font control of the heading
-.
-.RS
-.IP
-The font of each heading level is controlled by string
-.BR HF .
-.
-It contains a font number or font name for each level.
-.
-Default value is
-.
-.RS
-.IP
-.B 2 2 2 2 2 2 2 2 2 2 2 2 2 2
-.RE
-.
-.IP
-(all headings in italic).
-.
-This could also be written as
-.
-.RS
-.IP
-.B I I I I I I I I I I I I I I
-.RE
-.
-.IP
-Note that some other implementations use
-.B 3\~3\~2\~2\~2\~2\~2
-as the default value.
-.
-All omitted values are presumed to have value\~1.
-.RE
-.
-.IP
-.B Point size control
-.
-.RS
-.IP
-String
-.B HP
-controls the point size of each heading,
-in the same way as
-.B HF
-controls the font.
-.
-A value of\~0 selects the default point size.
-.
-Default value is
-.
-.RS
-.IP
-.B 0 0 0 0 0 0 0 0 0 0 0 0 0 0
-.RE
-.
-.IP
-Beware that only the point size changes, not the vertical size.
-.
-The latter can be controlled by the user-specified macros
-.B HX
-and/or
-.BR HZ .
-.RE
-.
-.IP
-.B Heading counters
-.
-.RS
-.IP
-Fourteen number registers named
-.B H1
-up to
-.B H14
-contain the counter for each heading level.
-.
-The values are printed using Arabic numerals;
-this can be changed with the macro
-.B HM
-(see below).
-.
-All marks are concatenated before printing.
-.
-To avoid this,
-set number register
-.B Ht
-to\~1.
-.
-This only prints the current heading counter at each heading.
-.RE
-.
-.IP
-.B Automatic table of contents
-.
-.RS
-.IP
-All headings whose level is equal or below number register
-.B Cl
-are saved to be printed in the table of contents.
-.
-Default value is\~2.
-.RE
-.
-.IP
-.B Special control of the heading, user-defined macros
-.
-.RS
-.IP
-The following macros can be defined by the user to get a finer control
-of vertical spacing, fonts, or other features.
-.
-Argument
-.I level
-is the level-argument to\~\c
-.BR H ,
-but\~0 for unnumbered headings (see
-.BR HU ).
-.
-Argument
-.I rlevel
-is the real level;
-it is set to number register
-.B Hu
-for unnumbered headings.
-.
-Argument
-.I heading-text
-is the text argument to
-.B H
-and
-.BR HU .
-.
-.RS
-.TP
-.BI HX\  "level rlevel heading-text"
-This macro is called just before the printing of the heading.
-.
-The following registers are available for
-.BR HX .
-.
-Note that
-.B HX
-may alter
-.BR }0 ,
-.BR }2 ,
-and
-.BR ;3 .
-.
-.RS
-.TP
-.BR }0\  (string)
-Contains the heading mark plus two spaces if
-.I rlevel
-is non-zero,
-otherwise empty.
-.
-.TP
-.BR ;0\  (register)
-Contains the position of the text after the heading.
-.
-0\~means that the text should follow the heading on the same line,
-1\~means that a line break should occur before the text,
-and 2\~means that a blank line should separate the heading and the text.
-.
-.TP
-.BR }2\  (string)
-Contains two spaces if register
-.B ;0
-is\~0.
-.
-It is used to separate the heading from the text.
-.
-The string is empty if
-.B ;0
-is non-zero.
-.
-.TP
-.BR ;3\  (register)
-Contains the needed space in units after the heading.
-.
-Default is 2v.
-.
-Can be used to change things like numbering
-.RB ( }0 ),
-vertical spacing
-.RB ( }2 ),
-and the needed space after the heading.
-.RE
-.
-.TP
-.BI HY\  "dlevel rlevel heading-text"
-This macro is called after size and font calculations and
-might be used to change indentation.
-.
-.TP
-.BI HZ\  "dlevel rlevel heading-text"
-This macro is called after the printing of the heading,
-just before
-.B H
-or
-.B HU
-exits.
-.
-Can be used to change the page header according to the section heading.
-.RE
-.RE
-.
-.TP
-.BI HC\  \fR[\fPhyphenation-character\fR]\fP
-Set hyphenation character.
-.
-Default value is \[oq]\[rs]%\[cq].
-.
-Resets to the default if called without argument.
-.
-Hyphenation can be turned off by setting number register
-.B Hy
-to\~0 at the beginning of the file.
-.
-.TP
-.BI HM\  "\fR[\fParg1 \fR[\fParg2 \fR[.\|.\|.\& [\fParg14\fR]]]]\fP"
-Heading mark style.
-.
-Controls the type of marking for printing of the heading counters.
-.
-Default is\~1 for all levels.
-.
-.IP
-.B Argument
-.
-.TS
-tab(@);
-l l.
-1@Arabic numerals.
-0001@Arabic numerals with leading zeroes, one or more.
-A@upper-case alphabetic
-a@lower-case alphabetic
-I@upper-case roman numerals
-i@lower-case roman numerals
-\[dq]\[dq]@Arabic numerals.
-.TE
-.
-.TP
-.BI HU\  heading-text
-Unnumbered section header.
-.
-.B HU
-behaves like
-.B H
-at the level in number register
-.BR Hu .
-.
-See\~\c
-.BR H .
-.
-.TP
-.BI HX\  "dlevel rlevel heading-text"
-User-defined heading exit.
-.
-Called just before printing the header.
-.
-See\~\c
-.BR H .
-.
-.TP
-.BI HY\  "dlevel rlevel heading-text"
-User-defined heading exit.
-.
-Called just before printing the header.
-.
-See\~\c
-.BR H .
-.
-.TP
-.BI HZ\  "dlevel rlevel heading-text"
-User-defined heading exit.
-.
-Called just after printing the header.
-.
-See\~\c
-.BR H .
-.
-.TP
-.BI I\  "\fR[\fPitalic-text \fR[\fPprev-font-text \fR[\fPitalic-text \fR[.\|.\|.]]]]\fP"
-Italic.
-.
-Changes the font to italic if called without arguments.
-.
-With one argument it sets the word in italic.
-.
-With two arguments it concatenates them and sets the first
-word in italic and the second in the previous font.
-.
-There is no limit on the number of argument;
-all are concatenated.
-.
-.TP
-.BI IA\  "\fR[\fPaddressee-name \fR[\fPtitle\fR]]\fP"
-Begin specification of the addressee and addressee\[aq]s address in
-letter style.
-.
-Several names can be specified with empty
-.BR IA / IE -pairs,
-but only one address.
-.
-See
-.BR LT .
-.
-.TP
-.BI IB\  "\fR[\fPitalic-text \fR[\fPbold-text \fR[\fPitalic-text \fR[.\|.\|.]]]]\fP"
-Italic-bold.
-.
-Even arguments are printed in italic, odd in boldface.
-.
-See\~\c
-.BR I .
-.
-.TP
-.B IE
-End the address specification after
-.BR IA .
-.
-.TP
-.BI INITI\  "type filename \fR[\fPmacro\fR]\fP"
-Initialize the new index system and set the filename to collect index
-lines in with
-.BR IND .
-.
-Argument
-.I type
-selects the type of index: page number, header marks or both.
-.
-The default is page numbers.
-.
-.IP
-It is also possible to create a macro that is responsible
-for formatting each row;
-just add the name of the macro as a third argument.
-.
-The macro is then called with the index as argument(s).
-.
-.IP
-.B type
-.
-.IP
-.TS
-tab(@);
-l lx.
-N@Page numbers
-H@Header marks
-B@T{
-Both page numbers and header marks,
-separated with a tab character.
-T}
-.TE
-.
-.TP
-.BI INITR\  filename
-Initialize the cross reference macros.
-.
-Cross references are written to stderr and are supposed to be
-redirected into file \[oq]\fIfilename\fR.qrf\[cq].
-.
-Requires two passes with groff;
-this is handled by a separate program called
-.BR mmroff (@MAN1EXT@).
-.
-This program exists because
-.BR groff (@MAN1EXT@)
-by default deactivates the unsafe operations that are required by
-.BR INITR .
-.
-The first pass looks for cross references,
-and the second one includes them.
-.
-.B INITR
-can be used several times,
-but it is only the first occurrence of
-.B INITR
-that is active.
-.
-.IP
-See also
-.BR SETR ,
-.BR GETPN ,
-and
-.BR GETHN .
-.
-.TP
-.BI IND\  "arg1 \fR[\fParg2 \fR[.\|.\|.]]\fP"
-Write a line in the index file selected by
-.B INITI
-with all arguments and the page number or header mark separated by tabs.
-.
-.RS
-.IP
-.B Examples
-.
-.IP
-arg1\[rs]tpage number
-.br
-arg1\[rs]targ2\[rs]tpage number
-.br
-arg1\[rs]theader mark
-.br
-arg1\[rs]tpage number\[rs]theader mark
-.RE
-.
-.TP
-.B INDP
-Print the index by running the command specified by string variable
-.BR Indcmd ,
-which has \[oq]sort\ \-t\[rs]t\[cq] as the default value.
-.
-.B INDP
-reads the output from the command to form the index,
-by default in two columns (this can be changed by defining
-.BR TYIND ).
-.
-The index is printed with string variable
-.B Index
-as header,
-default is \[oq]INDEX\[cq].
-.
-One-column processing is reactivated after the list.
-.
-.B INDP
-calls the user-defined macros
-.BR TXIND ,
-.BR TYIND ,
-and
-.B TZIND
-if defined.
-.
-.B TXIND
-is called before printing the string \[oq]INDEX\[cq],
-.B TYIND
-is called instead of printing \[oq]INDEX\[cq], and
-.B TZIND
-is called after the printing and should take care of restoring to
-normal operation again.
-.
-.TP
-.B ISODATE \fR[\fP0\fR]\fP
-Change the predefined date string in
-.B DT
-to ISO-format, this is, \[oq]YYYY-MM-DD\[cq].
-.
-This can also be done by adding
-.B \-rIso=1
-on the command line.
-.
-Reverts to old date format if argument is\~\c
-.BR 0 .
-.
-.TP
-.BI IR\  "\fR[\fPitalic-text \fR[\fProman-text \fR[\fPitalic-text \fR[.\|.\|.]]]]\fP"
-Italic-roman.
-.
-Even arguments are printed in italic, odd in roman.
-.
-See\~\c
-.BR I .
-.
-.TP
-.BI LB\  "text-indent mark-indent pad type \fR[\fPmark \fR[\fPLI-space \fR[\fPLB-space\fR]]]\fP"
-List-begin macro.
-.
-This is the common macro used for all lists.
-.
-.I text-indent
-is the number of spaces to indent the text from the current indentation.
-.
-.IP
-.I pad
-and
-.I mark-indent
-control where to put the mark.
-.
-The mark is placed within the mark area, and
-.I mark-indent
-sets the number of spaces before this area.
-.
-By default it is\~0.
-.
-The mark area ends where the text begins.
-.
-The start of the text is still controlled by
-.IR text-indent .
-.
-.IP
-The mark is left-justified within the mark area if
-.I pad
-is\~0.
-.
-If
-.I pad
-is greater than\~0,
-.I mark-indent
-is ignored,
-and the mark is placed
-.I pad
-spaces before the text.
-.
-This right-justifies the mark.
-.
-.IP
-If
-.I type
-is\~0 the list either has a hanging indentation or,
-if argument
-.I mark
-is given,
-the string
-.I mark
-as a mark.
-.
-.IP
-If
-.I type
-is greater than\~0 automatic numbering occurs,
-using arabic numbers if
-.I mark
-is empty.
-.
-.I mark
-can then be any of \[oq]1\[cq], \[oq]A\[cq], \[oq]a\[cq], \[oq]I\[cq],
-or \[oq]i\[cq].
-.
-.IP
-.I type
-selects one of six possible ways to display the mark.
-.
-.IP
-.B type
-.
-.RS
-.IP
-.br
-.TS
-tab(@);
-l l.
-1@x.
-2@x)
-3@(x)
-4@[x]
-5@<x>
-6@{x}
-.TE
-.RE
-.
-.IP
-Every item in the list gets
-.I LI-space
-number of blank lines before them.
-.
-Default is\~1.
-.
-.IP
-.B LB
-itself prints
-.I LB-space
-blank lines.
-.
-Default is\~0.
-.
-.TP
-.BI LC\  \fR[\fPlist-level\fR]\fP
-List-status clear.
-.
-Terminates all current active lists down to
-.IR list-level ,
-or\~0 if no argument is given.
-.
-This is used by\~\c
-.B H
-to clear any active list.
-.
-.TP
-.B LE \fR[\fP1\fR]\fP
-List end.
-.
-Terminates the current list.
-.B LE
-outputs a blank line if an argument is given.
-.
-.TP
-.BI LI\  \fR[\fPmark\  \fR[\fP1\fR|\fP2\fR]]\fP
-List item preceding every item in a list.
-.
-Without argument,
-.B LI
-prints the mark determined by the current list type.
-.
-By giving
-.B LI
-one argument, it uses that as the mark instead.
-.
-Two arguments to
-.B LI
-makes
-.I mark
-a prefix to the current mark.
-.
-There is no separating space between the prefix and the mark if the
-second argument is \[oq]2\[cq] instead of \[oq]1\[cq].
-.
-This behaviour can also be achieved by setting number register
-.B Limsp
-to zero.
-.
-A zero length
-.I mark
-makes a hanging indentation instead.
-.
-.IP
-A blank line is printed before the list item by default.
-.
-This behaviour can be controlled by number register
-.BR Ls .
-.
-Pre-spacing occurs for each list level less than or equal to
-.BR Ls .
-.
-Default value is 99.
-.
-There is no nesting limit.
-.
-.IP
-The indentation can be changed through number register
-.BR Li .
-Default is\~6.
-.
-.IP
-All lists begin with a list initialization macro,
-.BR LB .
-.
-There are, however, seven predefined list types to make lists easier
-to use.
-.
-They all call
-.B LB
-with different default values.
-.
-.RS
-.IP
-.TS
-tab(@);
-l l.
-\fBAL\fP@Automatically Incremented List
-\fBML\fP@Marked List
-\fBVL\fP@Variable-Item List
-\fBBL\fP@Bullet List
-\fBDL\fP@Dash List
-\fBRL\fP@Reference List
-\fBBVL\fP@Broken Variable List.
-.TE
-.RE
-.
-.IP
-These lists are described at other places in this manual.
-.
-See also
-.BR LB .
-.
-.TP
-.BI LT\  \fR[\fIarg\/\fR]\fI
-Format a letter in one of four different styles depending
-on the argument.
-.
-See also section
-.BR INTERNALS .
-.
-.RS
-.IP
-.TS
-tab(@);
-lb lb
-l lx.
-Arg@Style
-BL@T{
-Blocked.
-Date line, return address, writer\[aq]s address and closing
-begins at the center of the line.
-.
-All other lines begin at the left margin.
-T}
-SB@T{
-Semi-blocked.
-Same as blocked,
-except that the first line in every paragraph is indented five spaces.
-T}
-FB@T{
-Full-blocked.
-All lines begin at the left margin.
-T}
-SP@T{
-Simplified.
-Almost the same as the full-blocked style.
-Subject and the writer\[aq]s identification are printed in all-capital.
-T}
-.TE
-.RE
-.
-.TP
-.BI LO\  "type \fR[\fParg\fR]\fP"
-Specify options in letter (see
-.BR .LT ).
-.
-This is a list of the standard options:
-.
-.RS
-.IP
-.TS
-tab(@);
-l lx.
-CN@T{
-Confidential notation.
-Prints \[oq]CONFIDENTIAL\[cq] on the second line below the date line.
-.
-Any argument replaces \[oq]CONFIDENTIAL\[cq].
-.
-See also string variable
-.BR LetCN .
-T}
-RN@T{
-Reference notation.
-Prints \[oq]In reference to:\[cq] and the argument two lines below the date line.
-See also string variable
-.BR LetRN .
-T}
-AT@T{
-Attention.
-Prints \[oq]ATTENTION:\[cq] and the argument below the inside address.
-See also string variable
-.BR LetAT .
-T}
-SA@T{
-Salutation.
-Prints \[cq]To Whom It May Concern:\[cq] or the argument if it was present.
-The salutation is printed two lines below the inside address.
-See also string variable
-.BR LetSA .
-T}
-SJ@T{
-Subject line.
-Prints the argument as subject prefixed with \[oq]SUBJECT:\[cq]
-two lines below the inside address,
-except in letter type \[oq]SP\[cq],
-where the subject is printed in all-capital without any prefix.
-See also string variable
-.BR LetSJ .
-T}
-.TE
-.RE
-.
-.TP
-.BI MC\  "column-size \fR[\fPcolumn-separation\fR]\fP"
-Begin multiple columns.
-.
-Return to normal with
-.BR 1C .
-.
-.B MC
-creates as many columns as the current line length permits.
-.
-.I column-size
-is the width of each column,
-and
-.I column-separation
-is the space between two columns.
-.
-Default separation is
-.IR column-size /15.
-.
-See also
-.BR 1C .
-.
-.TP
-.BI ML\  "mark \fR[\fPtext-indent\ " \fR[\fP1\fR]]\fP
-Marked list start.
-.
-The
-.I mark
-argument is printed before each list item.
-.
-.I text-indent
-sets the indent and overrides
-.BR Li .
-.
-A third argument prohibits printing of a blank line before each item.
-.
-.TP
-.BI MT\  "\fR[\fParg \fR[\fPaddressee\fR]]\fP"
-Memorandum type.
-.
-The argument
-.I arg
-is part of a filename in \[oq]@TMAC_MDIR@/*.MT\[cq].
-.
-Memorandum types 0 to\~5 are supported, including type
-\[oq]string\[cq] (which gets internally mapped to type\~6).
-.
-.I addressee
-just sets a variable, used in the AT&T macros.
-.
-.IP
-.B arg
-.
-.RS
-.IP
-.TS
-tab(@);
-l l.
-0@Normal memorandum, no type printed.
-1@Memorandum with \[oq]MEMORANDUM FOR FILE\[cq] printed.
-2@Memorandum with \[oq]PROGRAMMER\[aq]S NOTES\[cq] printed.
-3@Memorandum with \[oq]ENGINEER\[aq]S NOTES\[cq] printed.
-4@Released paper style.
-5@External letter style.
-.TE
-.RE
-.
-.IP
-See also
-.BR COVER / COVEND ,
-a more flexible type of front page.
-.
-.TP
-.BI MOVE\  "y-pos \fR[\fPx-pos \fR[\fPline-length\fR]]\fP"
-Move to a position, setting page offset to
-.IR x-pos .
-.
-If
-.I line-length
-is not given, the difference between current and new page offset is
-used.
-.
-Use
-.B PGFORM
-without arguments to return to normal.
-.
-.TP
-.BI MULB\  "cw1 space1 \fR[\fPcw2 space2 \fR[\fPcw3 \fR.\|.\|.]]\fP"
-Begin a special multi-column mode.
-.
-All columns widths must be specified.
-.
-The space between the columns must be specified also.
-.
-The last column does not need any space definition.
-.
-.B MULB
-starts a diversion, and
-.B MULE
-ends the diversion and prints the columns.
-.
-The unit for the width and space arguments is \[oq]n\[cq], but
-.B MULB
-accepts all normal unit specifications like \[oq]c\[cq] and \[oq]i\[cq].
-.
-.B MULB
-operates in a separate environment.
-.
-.TP
-.B MULN
-Begin the next column.
-.
-This is the only way to switch the column.
-.
-.TP
-.B MULE
-End the multi-column mode and print the columns.
-.
-.TP
-.BI nP\  \fR[\fPtype\fR]\fP
-Print numbered paragraph with header level two.
-.
-See
-.BR .P .
-.
-.TP
-.B NCOL
-Force printing to the next column.
-.
-Don\[aq]t use this together with the
-.B MUL*
-macros, see
-.BR 2C .
-.
-.TP
-.BI NS\  \fR[\fParg\  \fR[\fP1\fR]]\fP
-Print different types of notations.
-.
-The argument selects between the predefined type of notations.
-.
-If the second argument is available,
-then the argument becomes the entire notation.
-.
-If the argument doesn\[aq]t select a predefined type,
-it is printed as \[oq]Copy (\fIarg\/\fP) to\[cq].
-.
-It is possible to add more standard notations,
-see the string variables
-.B Letns
-and
-.BR Letnsdef .
-.
-.RS
-.IP
-.TS
-tab(@);
-l l.
-\fBArg@Notation\fP
-\fInone\/\fP@Copy To
-\[dq]\[dq]@Copy To
-1@Copy To (with att.\&) to
-2@Copy To (without att.\&) to
-3@Att.
-4@Atts.
-5@Enc.
-6@Encs.
-7@Under separate cover
-8@Letter to
-9@Memorandum to
-10@Copy (with atts.\&) to
-11@Copy (without atts.\&) to
-12@Abstract Only to
-13@Complete Memorandum to
-14@CC
-.TE
-.RE
-.
-.TP
-.BI ND\  new-date
-New date.
-.
-Overrides the current date.
-.
-Date is not printed if
-.I new-date
-is an empty string.
-.
-.TP
-.BI OF\  \fR[\fParg\fR]\fP
-Odd-page footer, a line printed just above the normal footer.
-.
-See
-.B EF
-and
-.BR PF .
-.
-.IP
-This macro defines string
-.BR EOPof .
-.
-.TP
-.BI OH\  \fR[\fParg\fR]\fP
-Odd-page header, a line printed just below the normal header.
-.
-See
-.B EH
-and
-.BR PH .
-.
-.IP
-This macro defines string
-.BR TPoh .
-.
-.TP
-.B OP
-Make sure that the following text is printed at the top of an
-odd-numbered page.
-.
-Does not output an empty page if currently at the top of an odd page.
-.
-.TP
-.BI P\  \fR[\fPtype\fR]\fP
-Begin new paragraph.
-.
-.B P\c
-\~without argument produces left\-justified text,
-even the first line of the paragraph.
-.
-This is the same as setting
-.I type
-to\~0.
-.
-If the argument is\~1,
-the first line of text following\~\c
-.B P
-is indented by the number of spaces in number register
-.BR Pi ,
-by default\~5.
-.
-.IP
-Instead of giving an argument to\~\c
-.B P
-it is possible to set the paragraph type in number register
-.BR Pt .
-.
-Using 0 and\~1 is the same as adding that value to
-.BR P .
-.
-A value of\~2 indents all paragraphs, except after headings, lists,
-and displays (this value can\[aq]t be used as an argument to
-.B P
-itself).
-.
-.IP
-The space between two paragraphs is controlled by number register
-.BR Ps ,
-and is\~1 by default (one blank line).
-.
-.TP
-.BI PGFORM\  "\fR[\fPlinelength \fR[\fPpagelength \fR[\fPpageoffset\ " \fR[\fP1\fR]]]]\fP
-Set line length, page length, and/or page offset.
-.
-This macro can be used for special formatting,
-like letter heads and other.
-.
-It is normally the first command in a file,
-though it is not necessary.
-.
-.B PGFORM
-can be used without arguments to reset everything after a
-.B MOVE
-call.
-.
-A line break is done unless the fourth argument is given.
-.
-This can be used to avoid the page number on the first page
-while setting new width and length.
-.
-(It seems as if this macro sometimes doesn\[aq]t work too well.
-.
-Use the command line arguments to change
-line length, page length, and page offset instead.)
-.
-.TP
-.B PGNH
-No header is printed on the next page.
-.
-Used to get rid of the header in letters or other special texts.
-.
-This macro must be used before any text to inhibit the page header
-on the first page.
-.
-.TP
-.BI "PIC \fR[\fP\-B\fR] [\fP\-L\fR] [\fP\-C\fR] [\fP\-R\fR] [\fP\-I\ " "n\fR]\fP filename \fR[\fPwidth \fR[\fPheight\fR]]\fP"
-Include a PostScript file in the document.
-.
-The macro depends on
-.BR mmroff (@MAN1EXT@)
-and
-.BR INITR .
-.
-The arguments
-.BR \-L ,
-.BR \-C ,
-.BR \-R ,
-and
-.BI \-I\  n
-adjust the picture or indent it.
-.
-With no flag the picture is adjusted to the left.
-.
-Adding
-.B \-B
-draws a box around the picture.
-.
-The optional
-.I width
-and
-.I height
-can also be given to resize the picture.
-.
-.TP
-.B PE
-Picture end.
-.
-Ends a picture for
-.BR @g@pic (@MAN1EXT).
-.
-.TP
-.BI PF\  \fR[\fParg\fR]\fP
-Page footer.
-.B PF
-sets the line to be printed at the bottom of each page.
-.
-Empty by default.
-.
-See
-.B PH
-for the argument specification.
-.
-.IP
-This macro defines string
-.BR EOPf .
-.
-.TP
-.BI PH\  \fR[\fParg\fR]\fP
-Page header, a line printed at the top of each page.
-.
-The argument should be specified as
-.
-.RS
-.IP
-.RI \[dq]' left-part ' center-part ' right-part '\[dq]
-.RE
-.
-.IP
-where
-.IR left-part ,
-.IR center-part ,
-and
-.I right-part
-are printed left-justified, centered, and right justified, respectively.
-.
-Within the argument to
-.BR PH ,
-the character \[oq]%\[cq] is changed to the current page number.
-.
-The default argument is
-.
-.RS
-.IP
-\[dq]''- % -''\[dq]
-.RE
-.
-.IP
-which gives the page number between two dashes.
-.
-.IP
-This macro defines string
-.BR TPh .
-.
-.TP
-.B PS
-Picture start (from pic).
-.
-Begins a picture for
-.BR @g@pic (@MAN1EXT@).
-.
-.TP
-.B PX
-Page header user-defined exit.
-.
-This macro is called just after the printing of the page header in
-.I no-space
-mode.
-.
-.TP
-.B R
-Roman.
-.
-Return to roman font, see also\~\c
-.BR I .
-.
-.TP
-.BI RB\  "\fR[\fProman-text \fR[\fPbold-text \fR[\fProman-text \fR[.\|.\|.]]]]\fP"
-Roman-bold.
-.
-Even arguments are printed in roman, odd in boldface.
-.
-See\~\c
-.BR I .
-.
-.TP
-.BI RD\  "\fR[\fPprompt \fR[\fPdiversion \fR[\fPstring\fR]]]\fP"
-Read from standard input to diversion and/or string.
-.
-The text is saved in a diversion named
-.IR diversion .
-.
-Recall the text by writing the name of the diversion after a dot
-on an empty line.
-.
-A string is also defined if
-.I string
-is given.
-.
-.I Diversion
-and/or
-.I prompt
-can be empty (\[dq]\[dq]).
-.
-.TP
-.B RF
-Reference end.
-.
-Ends a reference definition and returns to normal processing.
-.
-See
-.BR RS .
-.
-.TP
-.BI RI\  "\fR[\fProman-text \fR[\fPitalic-text \fR[\fProman-text \fR[.\|.\|.]]]]\fP"
-Print even arguments in roman, odd in italic.
-.
-See\~\c
-.BR I .
-.
-.TP
-.BI RL\  \fR[\fPtext-indent \fR[\fP1\fR]]\fP
-Reference list start.
-.
-Begins a list where each item is preceded with an automatically
-incremented number between square brackets.
-.
-.I text-indent
-changes the default indentation.
-.
-.TP
-.BI RP\  "\fR[\fParg1 \fR[\fParg2\fR]]\fP"
-Produce reference page.
-.
-This macro can be used if a reference page is wanted somewhere in the
-document.
-.
-It is not needed if
-.B TC
-is used to produce a table of contents.
-.
-The reference page is then printed automatically.
-.
-.IP
-The reference counter is not reset if
-.I arg1
-is\~1.
-.
-.IP
-.I arg2
-tells
-.B RP
-whether to eject a page or not.
-.
-.IP
-.B arg2
-.
-.RS
-.IP
-.TS
-tab(@);
-l lx.
-0@The reference page is printed on a separate page.
-1@Do not eject page after the list.
-2@Do not eject page before the list.
-3@Do not eject page before and after the list.
-.TE
-.RE
-.
-.IP
-The reference items are separated by a blank line.
-.
-Setting number register
-.B Ls
-to\~0 suppresses the line.
-.
-.IP
-The string
-.B Rp
-contains the reference page title and is set to \[oq]REFERENCES\[cq]
-by default.
-.
-The number register
-.B Rpe
-holds the default value for the second argument of
-.BR RP ;
-it is initially set to\~0.
-.
-.TP
-.BI RS\  \fR[\fPstring-name\fR]\fP
-Begin an automatically numbered reference definition.
-.
-Put the string
-.B \[rs]*(Rf
-where the reference mark should be and write the reference between
-.BR RS / RF
-at next new line after the reference mark.
-.
-The reference number is stored in number register
-.BR :R .
-.
-If
-.I string-name
-is given, a string with that name is defined and contains the current
-reference mark.
-.
-The string can be referenced as
-.BI \[rs]*[ string-name ]
-later in the text.
-.
-.TP
-.BI S\  "\fR[\fPsize \fR[\fPspacing\fR]]\fP"
-Set point size and vertical spacing.
-.
-If any argument is equal to \[oq]P\[cq], the previous value is used.
-.
-A \[oq]C\[cq] means current value, and \[oq]D\[cq] the default value.
-.
-If \[oq]+\[cq] or \[oq]\-\[cq] is used before the value,
-the current value is incremented or decremented, respectively.
-.
-.TP
-.BI SA\  \fR[\fParg\fR]\fP
-Set right-margin justification.
-.
-Justification is turned on by default.
-.
-No argument or value \[oq]0\[cq] turns off justification,
-and \[oq]1\[cq] turns on justification.
-.
-.TP
-.BI SETR\  "refname \fR[\fPstring\fR]\fP"
-Remember the current header and page number as
-.IR refname .
-.
-Saves
-.I string
-if
-.I string
-is defined.
-.
-.I string
-is retrieved with
-.BR .GETST .
-.
-See
-.BR INITR .
-.
-.TP
-.BI SG\  \fR[\fParg\  \fR[\fP1\fR]]\fP
-Signature line.
-.
-Prints the authors name(s) after the formal closing.
-.
-The argument is appended to the reference data, printed at either the
-first or last author.
-.
-The reference data is the location, department, and initials specified
-with
-.BR .AU .
-.
-It is printed at the first author if the second argument is given,
-otherwise at the last.
-.
-No reference data is printed if the author(s) is specified through
-.BR .WA / .WE .
-.
-See section
-.BR INTERNALS .
-.
-.TP
-.BI SK\  \fR[\fPpages\fR]\fP
-Skip pages.
-.
-If
-.I pages
-is\~0 or omitted, a skip to the next page occurs unless it is already
-at the top of a page.
-.
-Otherwise it skips
-.I pages
-pages.
-.
-.TP
-.BI SM\  "string1 \fR[\fPstring2 \fR[\fPstring3\fR]]\fP"
-Make a string smaller.
-.
-If
-.I string2
-is given,
-.I string1
-is made smaller and
-.I string2
-stays at normal size,
-concatenated with
-.IR string1 .
-.
-With three arguments, everything is concatenated, but only
-.I string2
-is made smaller.
-.
-.TP
-.BI SP\  \fR[\fPlines\fR]\fP
-Space vertically.
-.
-.I lines
-can have any scaling factor, like \[oq]3i\[cq] or \[oq]8v\[cq].
-.
-Several
-.B SP
-calls in a line only produces the maximum number of lines, not the sum.
-.
-.B SP
-is ignored also until the first text line in a page.
-.
-Add
-.B \[rs]&
-before a call to
-.B SP
-to avoid this.
-.
-.TP
-.B TAB
-Reset tabs to every\ 5n.
-.
-Normally used to reset any previous tab positions.
-.
-.TP
-.BI TB\  "\fR[\fPtitle \fR[\fPoverride \fR[\fPflag \fR[\fPrefname\fR]]]]\fP"
-Table title.
-.
-The arguments are the same as for
-.BR EC .
-.
-.B TB
-uses the number register
-.B Tb
-as a counter.
-.
-The string
-.B Lt
-controls the title of the List of Tables;
-default value is \[oq]LIST OF TABLES\[cq].
-.
-The List of Tables is only printed if number register
-.B Lt
-is\~1, which is the default.
-.
-The string
-.B Litb
-contains the word \[oq]TABLE\[cq], which is printed before the number.
-.
-.IP
-Special handling of the title occurs if
-.B TB
-is used inside
-.BR DS / DE ,
-it is not affected by the format of
-.BR DS .
-.
-.TP
-.BI TC\  "\fR[\fPslevel \fR[\fPspacing \fR[\fPtlevel \fR[\fPtab \fR[\fPh1 \fR[\fPh2 \fR[\fPh3 \fR[\fPh4 \fR[\fPh5\fR]]]]]]]]]\fP"
-Table of contents.
-.
-This macro is normally used as the last line of the document.
-.
-It generates a table of contents with headings up to the level
-controlled by number register
-.BR Cl .
-.
-Note that
-.B Cl
-controls the saving of headings, it has nothing to do with
-.BR TC .
-.
-Headings with a level less than or equal to
-.I slevel
-get
-.I spacing
-number of lines before them.
-.
-Headings with a level less than or equal to
-.I tlevel
-have their page numbers right\-justified with dots or spaces separating
-the text and the page number.
-.
-Spaces are used if
-.I tab
-is greater than zero, dots otherwise.
-.
-Other headings have the page number directly at the end of the heading
-text
-.RI ( ragged-right ).
-.
-.IP
-The rest of the arguments is printed, centered, before the table of
-contents.
-.
-.IP
-The user-defined macros
-.B TX
-and
-.B TY
-are used if
-.B TC
-is called with at most four arguments.
-.
-.B TX
-is called before the printing of the string \[oq]CONTENTS\[cq],
-and
-.B TY
-is called instead of printing \[oq]CONTENTS\[cq].
-.
-.IP
-Equivalent macros can be defined for list of figures, tables, equations
-and exhibits by defining
-.BI TX xx
-or
-.BI TY xx\fR,\fP
-where
-.I xx
-is \[oq]Fg\[cq], \[oq]TB\[cq], \[oq]EC\[cq], or \[oq]EX\[cq],
-respectively.
-.
-.IP
-String
-.B Ci
-can be set to control the indentations for each heading-level.
-.
-It must be scaled, like
-.
-.RS
-.IP
-\&.ds Ci .25i .5i .75i 1i 1i
-.RE
-.
-.IP
-By default, the indentation is controlled by the maximum length of
-headings in each level.
-.
-.IP
-The string variables
-.BR Lifg ,
-.BR Litb ,
-.BR Liex ,
-.BR Liec ,
-and
-.B Licon
-contain \[oq]Figure\[cq], \[oq]TABLE\[cq], \[oq]Exhibit\[cq],
-\[oq]Equation\[cq], and \[oq]CONTENTS\[cq], respectively.
-.
-These can be redefined to other languages.
-.
-.TP
-.B TE
-Table end.
-.
-See
-.BR TS .
-.
-.TP
-.B TH \fR[\fPN\fR]\fP
-Table header.
-.
-See
-.BR TS .
-.
-.B TH
-ends the header of the table.
-.
-This header is printed again if a page break occurs.
-.
-Argument \[oq]N\[cq] isn\[aq]t implemented yet.
-.
-.TP
-.BI TL\  "\fR[\fPcharging-case-number \fR[\fPfiling-case-number\fR]]\fP"
-Begin title of memorandum.
-.
-All text up to the next
-.B AU
-is included in the title.
-.
-.I charging-case-number
-and
-.I filing-case-number
-are saved for use in the front page processing.
-.
-.TP
-.BI TM\  "\fR[\fPnum1 \fR[\fPnum2 \fR[.\|.\|.]]]\fP"
-Technical memorandum numbers used in
-.BR .MT .
-.
-An unlimited number of arguments may be given.
-.
-.TP
-.B TP
-Top-of-page user-defined macro.
-.
-This macro is called instead of the normal page header.
-.
-It is possible to get complete control over the header.
-.
-Note that the header and the footer are printed in a separate environment.
-.
-Line length is preserved, though.
-.
-See
-.BR EOP .
-.
-.IP
-.B strings available to TP
-.RS
-.TS
-tab(@);
-l l.
-TPh@argument of \fBPH\fP
-TPeh@argument of \fBEH\fP
-TPoh@argument of \fBOH\fP
-.TE
-.RE
-.
-.TP
-.B TS \fR[\fPH\fR]\fP
-Table start.
-.
-This is the start of a table specification to
-.BR @g@tbl (@MAN1EXT@).
-.
-.B TS
-ends with
-.BR TE .
-.
-Argument \[oq]H\[cq] tells
-.B m@TMAC_M_PREFIX@m
-that the table has a header.
-.
-See
-.BR TH .
-.
-.TP
-.B TX
-User-defined table of contents exit.
-.
-This macro is called just before
-.B TC
-prints the word \[oq]CONTENTS\[cq].
-.
-See
-.BR TC .
-.
-.TP
-.B TY
-User-defined table of contents exit.
-.
-This macro is called instead of printing \[oq]CONTENTS\[cq].
-.
-See
-.BR TC .
-.
-.TP
-.BI VERBON\  "\fR[\fPflag \fR[\fPpoint-size \fR[\fPfont\fR]]]\fP"
-Begin verbatim output using Courier font.
-.
-Usually for printing programs.
-.
-All characters have equal width.
-.
-The point size can be changed with the second argument.
-.
-By specifying a third argument it is possible to use another font
-instead of Courier.
-.
-.I flag
-controls several special features.
-.
-Its value is the sum of all wanted features.
-.
-.RS
-.IP
-.TS
-tab(@);
-lb lb
-l lx.
-Arg@Description
-1@T{
-Disable the escape character (\[rs]).
-This is normally turned on during verbose output.
-T}
-2@Add an empty line before the verbose text.
-4@Add an empty line after the verbose text.
-8@T{
-Print the verbose text with numbered lines.
-This adds four digit-sized spaces in the beginning of each line.
-Finer control is available with the string variable
-.BR Verbnm .
-It contains all arguments to the
-.BR troff (@MAN1EXT@)
-command
-.BR .nm ,
-normally \[oq]1\[cq].
-T}
-16@T{
-Indent the verbose text by \[oq]5n\[cq].
-.
-This is controlled by the number-variable
-.B Verbin
-(in units).
-T}
-.TE
-.RE
-.
-.TP
-.B VERBOFF
-End verbatim output.
-.
-.TP
-.BI VL\  "text-indent \fR[\fPmark-indent\ " \fR[\fP1\fR]]\fP
-Variable-item list.
-.
-It has no fixed mark, it assumes that every
-.B LI
-has a mark instead.
-.
-.I text-indent
-sets the indent to the text, and
-.I mark-indent
-the distance from the current indentation to the mark.
-.
-A third argument prohibits printing of a blank line before each item.
-.
-.TP
-.BI "VM \fR[\fP\-T\fR] [\fP" "top \fR[\fPbottom\fR]]\fP"
-Vertical margin.
-.
-Increase the top and bottom margin by
-.I top
-and
-.IR bottom ,
-respectively.
-.
-If option
-.B \-T
-is specified, set those margins to
-.I top
-and
-.IR bottom .
-.
-If no argument is given, reset the margin to zero, or to the default
-(\[oq]7v 5v\[cq]) if
-.B \-T
-is used.
-.
-It is highly recommended that macros
-.B TP
-and/or
-.B EOP
-are defined if using
-.B \-T
-and setting top and/or bottom margin to less than the default.
-.
-.TP
-.BI WA\  "\fR[\fPwriter-name \fR[\fPtitle\fR]]\fP"
-Begin specification of the writer and writer\[aq]s address.
-.
-Several names can be specified with empty
-.BR WA / WE
-pairs, but only one address.
-.
-.TP
-.B WE
-End the address specification after
-.BR .WA .
-.
-.TP
-.BI WC\  "\fR[\fPformat1\fR] [\fPformat2\fR] [.\|.\|.]\fP"
-Footnote and display width control.
-.
-.RS
-.TS
-tab(@);
-l lx.
-N@T{
-Set default mode which is equal to using the options
-.BR \-WF ,
-.BR \-FF ,
-.BR \-WD ,
-and
-.BR FB .
-T}
-WF@T{
-Wide footnotes, wide also in two-column mode.
-T}
--WF@Normal footnote width, follow column mode.
-FF@T{
-All footnotes gets the same width as the first footnote encountered.
-T}
--FF@T{
-Normal footnotes, width follows \fBWF\fP and \fB-WF\fP.
-T}
-WD@T{
-Wide displays, wide also in two-column mode.
-T}
--WD@T{
-Normal display width, follow column mode.
-T}
-FB@T{
-Floating displays generates a line break when printed on the current
-page.
-T}
--FB@T{
-Floating displays does not generate line break.
-T}
-.TE
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Strings used in m@TMAC_M_PREFIX@m"
-.\" --------------------------------------------------------------------
-.
-.TP
-.B App
-A string containing the word \[oq]APPENDIX\[cq].
-.
-.TP
-.B Apptxt
-The current appendix text.
-.
-.TP
-.B EM
-Em dash string
-.
-.TP
-.B H1txt
-Updated by
-.B .H
-and
-.B .HU
-to the current heading text.
-.
-Also updated in table of contents & friends.
-.
-.TP
-.B HF
-Font list for headings, \[oq]2 2 2 2 2 2 2\[cq] by default.
-.
-Non-numeric font names may also be used.
-.
-.TP
-.B HP
-Point size list for headings.
-.
-By default, this is \[cq]0 0 0 0 0 0 0\[cq] which is the same as \[oq]10
-10 10 10 10 10 10\[cq].
-.
-.TP
-.B Index
-Contains the string \[oq]INDEX\[cq].
-.
-.TP
-.B Indcmd
-Contains the index command.
-.
-Default value is \[oq]sort\ \-t\[rs]t\[cq].
-.
-.TP
-.B Lifg
-String containing \[oq]Figure\[cq].
-.
-.TP
-.B Litb
-String containing \[oq]TABLE\[cq].
-.
-.TP
-.B Liex
-String containing \[oq]Exhibit\[cq].
-.
-.TP
-.B Liec
-String containing \[oq]Equation\[cq].
-.
-.TP
-.B Licon
-String containing \[oq]CONTENTS\[cq].
-.
-.TP
-.B Lf
-Contains the string \[oq]LIST OF FIGURES\[cq].
-.
-.TP
-.B Lt
-Contains the string \[oq]LIST OF TABLES\[cq].
-.
-.TP
-.B Lx
-Contains the string \[oq]LIST OF EXHIBITS\[cq].
-.
-.TP
-.B Le
-Contains the string \[oq]LIST OF EQUATIONS\[cq].
-.
-.TP
-.B Letfc
-Contains the string \[oq]Yours very truly,\[cq],
-used in
-.BR .FC .
-.
-.TP
-.B Letapp
-Contains the string \[oq]APPROVED:\[cq],
-used in
-.BR .AV .
-.
-.TP
-.B Letdate
-Contains the string \[oq]Date\[cq],
-used in
-.BR .AV .
-.
-.TP
-.B LetCN
-Contains the string \[oq]CONFIDENTIAL\[cq],
-used in
-.BR ".LO CN" .
-.
-.TP
-.B LetSA
-Contains the string \[oq]To Whom It May Concern:\[cq],
-used in
-.BR ".LO SA" .
-.
-.TP
-.B LetAT
-Contains the string \[oq]ATTENTION:\[cq],
-used in
-.BR ".LO AT" .
-.
-.TP
-.B LetSJ
-Contains the string \[oq]SUBJECT:\[cq],
-used in
-.BR ".LO SJ" .
-.
-.TP
-.B LetRN
-Contains the string \[oq]In reference to:\[cq],
-used in
-.BR ".LO RN" .
-.
-.TP
-.B Letns
-is an array containing the different strings used in
-.BR .NS .
-.
-It is really a number of string variables prefixed with
-.BR Letns! .
-.
-If the argument doesn\[aq]t exist, it is included between
-.B ()
-with
-.B Letns!copy
-as a prefix and
-.B Letns!to
-as a suffix.
-.
-Observe the space after \[oq]Copy\[cq] and before \[oq]to\[cq].
-.
-.RS
-.IP
-.TS
-tab(@);
-lb lb
-l l.
-Name@Value
-Letns!0@Copy to
-Letns!1@Copy (with att.\&) to
-Letns!2@Copy (without att.\&) to
-Letns!3@Att.
-Letns!4@Atts.
-Letns!5@Enc.
-Letns!6@Encs.
-Letns!7@Under separate cover
-Letns!8@Letter to
-Letns!9@Memorandum to
-Letns!10@Copy (with atts.\&) to
-Letns!11@Copy (without atts.\&) to
-Letns!12@Abstract Only to
-Letns!13@Complete Memorandum to
-Letns!14@CC
-Letns!copy@Copy \[rs]"
-Letns!to@" to
-.TE
-.RE
-.
-.TP
-.B Letnsdef
-Define the standard notation used when no argument is given to
-.BR .NS .
-.
-Default is\~0.
-.
-.TP
-.B "MO1 \(en MO12"
-Strings containing the month names \[oq]January\[cq] through
-\[oq]December\[cq].
-.
-.TP
-.B Qrf
-String containing \[oq]See chapter \[rs]\[rs]*[Qrfh], page
-\[rs]\[rs]n[Qrfp].\[cq].
-.
-.TP
-.B Rp
-Contains the string \[oq]REFERENCES\[cq].
-.
-.TP
-.B Tcst
-Contains the current status of the table of contents and list of
-figures, etc.
-.
-Empty outside of
-.BR .TC .
-.
-Useful in user-defined macros like
-.BR .TP .
-.
-.RS
-.IP
-.TS
-tab(@);
-lb lb
-l l.
-Value@Meaning
-co@Table of contents
-fg@List of figures
-tb@List of tables
-ec@List of equations
-ex@List of exhibits
-ap@Appendix
-.TE
-.RE
-.
-.TP
-.B Tm
-Contains the string \[oq]\[rs](tm\[cq], the trade mark symbol.
-.
-.TP
-.B Verbnm
-Argument to
-.B .nm
-in the
-.B .VERBON
-command.
-.
-Default is\~1.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Number variables used in m@TMAC_M_PREFIX@m"
-.\" --------------------------------------------------------------------
-.
-.TP
-.B Aph
-Print an appendix page for every new appendix  if this number variable
-is non-zero.
-.
-No output occurs if
-.B Aph
-is zero, but there is always an appendix entry in the \[oq]List of
-contents\[cq].
-.
-.TP
-.B Cl
-Contents level (in the range 0 to 14).
-.
-The contents is saved if a heading level is lower than or equal to the
-value of
-.BR Cl .
-.
-Default is\~2.
-.
-.TP
-.B Cp
-Eject page between list of table, list of figure, etc., if the value of
-.B Cp
-is zero.
-.
-Default is\~0.
-.
-.TP
-.B D
-Debug flag.
-.
-Values greater than zero produce debug information of increasing
-verbosity.
-.
-A value of\~1 gives information about the progress of formatting.
-.
-Default is\~0.
-.
-.TP
-.B De
-If set to\~1, eject after floating display is output.
-.
-Default is\~0.
-.
-.TP
-.B Dsp
-If defined, it controls the space output before and after static
-displays.
-.
-Otherwise the value of
-.B Lsp
-is used.
-.
-.TP
-.B Df
-Control floating keep output.
-.
-This is a number in the range 0 to 5, with a default value of\~5.
-.
-See
-.BR .DF .
-.
-.TP
-.B Ds
-If set to\~1, use the amount of space stored in register
-.B Lsp
-before and after display.
-.
-Default is\~1.
-.
-.TP
-.B Ej
-If set to\~1, eject page before each first-level heading.
-.
-Default is\~0.
-.
-.TP
-.B Eq
-Equation labels are left-adjusted if set to\~0 and right-adjusted if
-set to\~1.
-.
-Default is\~0.
-.
-.TP
-.B Fs
-Footnote spacing.
-.
-Default is\~1.
-.
-.TP
-.B "H1 \(en H7"
-Heading counters
-.
-.TP
-.B H1dot
-Append a dot after the level-one heading number if value is greater
-than zero.
-.
-Default is\~1.
-.
-.TP
-.B H1h
-A copy of number register
-.BR H1 ,
-but it is incremented just before the page break.
-.
-Useful in user-defined header macros.
-.
-.TP
-.B Hb
-Heading break level.
-.
-A number in the range 0 to 14, with a default value of\~2.
-.
-See\~\c
-.BR .H .
-.
-.TP
-.B Hc
-Heading centering level.
-.
-A number in the range 0 to 14, with a default value value of\~0.
-.
-See\~\c
-.BR .H .
-.
-.TP
-.B Hi
-Heading temporary indent.
-.
-A number in the range 0 to 2, with a default value of\~1.
-.
-.RS
-.IP
-.TS
-tab(@);
-l lx.
-0@no indentation, left margin
-1@T{
-indent to the right, similar to
-.RB \[oq] ".P 1" \[cq]
-T}
-2@T{
-indent to line up with text part of preceding heading
-T}
-.TE
-.RE
-.
-.TP
-.B Hps
-Heading pre-space level.
-.
-If the heading level is less than or equal to
-.BR Hps ,
-two lines precede the section heading instead of one.
-.
-Default is first level only.
-.
-The real amount of lines is controlled by the variables
-.B Hps1
-and
-.BR Hps2 .
-.
-.TP
-.B Hps1
-Number of lines preceding
-.B .H
-if the heading level is greater than
-.BR Hps .
-.
-Value is in units, default is 0.5.
-.
-.TP
-.B Hps2
-Number of lines preceding
-.B .H
-if the heading level is less than or equal to
-.BR Hps .
-.
-Value is in units, default is\~1.
-.
-.TP
-.B Hs
-Heading space level.
-.
-A number in the range 0 to 14, with a default value of\~2.
-.
-See\~\c
-.BR .H .
-.
-.TP
-.B Hss
-Number of lines following
-.B .H
-if the heading level is less than or equal to
-.BR Hs .
-.
-Value is in units, default is\~1.
-.
-.TP
-.B Ht
-Heading numbering type.
-.
-.RS
-.IP
-.TS
-tab(@);
-l l.
-0@multiple levels (1.1.1, 1.1.2, etc.)
-1@single level
-.TE
-.RE
-.IP
-Default is\~0.
-.
-.TP
-.B Hu
-Unnumbered heading level.
-.
-Default is\~2.
-.
-.TP
-.B Hy
-Hyphenation status of text body.
-.
-.RS
-.IP
-.TS
-7tab(@);
-l l.
-0@no hyphenation
-1@hyphenation on, set to value\~14
-.TE
-.RE
-.
-.IP
-Default is\~0.
-.
-.TP
-.B Iso
-Set this variable to\~1 on the command line to get an ISO-formatted
-date string (\fB\-rIso=1\fP).
-.
-Useless inside of a document.
-.
-.TP
-.B L
-Page length, only for command line settings.
-.
-.TP
-.B Letwam
-Maximum lines in return-address, used in
-.BR .WA / .WE .
-.
-Default is\~14.
-.
-.TP
-.BR Lf ,\  Lt ,\  Lx ,\  Le
-Enable (1) or disable (0) the printing of List of figures,
-.
-List of tables, List of exhibits and List of equations, respectively.
-.
-Default values are Lf=1, Lt=1, Lx=1, and Le=0.
-.
-.TP
-.B Li
-List indentation, used by
-.BR .AL .
-.
-Default is\~6.
-.
-.TP
-.B Limsp
-A flag controlling the insertion of space between prefix and mark in
-automatic lists
-.RB ( .AL ).
-.
-.RS
-.IP
-.TS
-tab(@);
-l l.
-0@no space
-1@emit space
-.TE
-.RE
-.
-.TP
-.B Ls
-List space threshold.
-.
-If current list level is greater than
-.B Ls
-no spacing occurs around lists.
-.
-Default is\~99.
-.
-.TP
-.B Lsp
-The vertical space used by an empty line.
-.
-The default is 0.5v in troff mode and 1v in nroff mode.
-.
-.TP
-.B N
-Page numbering style.
-.
-.RS
-.IP
-.TS
-tab(@);
-l lx.
-0@normal header for all pages.
-1@T{
-header replaces footer on first page, header is empty.
-T}
-2@page header is removed on the first page.
-3@\[oq]section-page\[cq] numbering style enabled.
-4@page header is removed on the first page.
-5@T{
-\[oq]section-page\[cq] and \[oq]section-figure\[cq] numbering style enabled.
-T}
-.TE
-.RE
-.
-.IP
-Default is\~0.
-.
-See also the number registers
-.B Sectf
-and
-.BR Sectp .
-.
-.TP
-.B Np
-A flag to control whether paragraphs are numbered.
-.
-.RS
-.IP
-.TS
-tab(@);
-l l.
-0@not numbered
-1@numbered in first-level headings.
-.TE
-.RE
-.
-.IP
-Default is\~0.
-.
-.TP
-.B O
-Page offset, only for command line settings.
-.
-.TP
-.B Of
-Format of figure, table, exhibit, and equation titles.
-.
-.RS
-.IP
-.TS
-tab(@);
-l l.
-0@\[dq]. \[dq]
-1@\[dq] - \[dq]
-.TE
-.RE
-.
-.IP
-Default is\~0.
-.
-.TP
-.B P
-Current page-number, normally the same as \[oq]%\[cq] unless
-\[oq]section-page\[cq] numbering style is enabled.
-.
-.TP
-.B Pi
-Paragraph indentation.
-.
-Default is\~5.
-.
-.TP
-.B Pgps
-A flag to control whether header and footer point size should follow
-the current settings or just change when the header and footer are
-defined.
-.
-.RS
-.IP
-.TS
-tab(@);
-l lx.
-0@T{
-Point size only changes to the current setting when
-.BR .PH ,
-.BR .PF ,
-.BR .OH ,
-.BR .EH ,
-.BR .OF ,
-or
-.B .OE
-is executed.
-T}
-1@T{
-Point size changes after every
-.BR .S .
-This is the default.
-T}
-.TE
-.RE
-.
-.TP
-.B Ps
-Paragraph spacing.
-Default is\~1.
-.
-.TP
-.B Pt
-Paragraph type.
-.
-.RS
-.IP
-.TS
-tab(@);
-l lx.
-0@left-justified
-1@indented paragraphs
-2@T{
-indented paragraphs except after
-.BR .H ,
-.BR .DE ,
-or
-.BR .LE .
-T}
-.TE
-.RE
-.
-.IP
-Default is\~0.
-.
-.TP
-.B Rpe
-Set default value for second argument of
-.BR .RP .
-.
-Default is\~0.
-.
-.TP
-.B Sectf
-A flag controlling \[oq]section-figures\[cq] numbering style.
-.
-A non-zero value enables this.
-.
-See also register\~\c
-.BR N .
-.
-.TP
-.B Sectp
-A flag controlling \[cq]section-page\[cq] numbering style.
-.
-A non-zero value enables this.
-.
-See also register\~\c
-.BR N .
-.
-.TP
-.B Si
-Display indentation.
-.
-Default is\~5.
-.
-.TP
-.B Verbin
-Indentation for
-.BR .VERBON .
-.
-Default is 5n.
-.
-.TP
-.B W
-Line length, only for command line settings.
-.
-.TP
-.B .mgm
-Always\~1.
-.
-.
-.\" --------------------------------------------------------------------
-.SH INTERNALS
-.\" --------------------------------------------------------------------
-.
-The letter macros are using different submacros depending on the
-letter type.
-.
-The name of the submacro has the letter type as suffix.
-.
-It is therefore possible to define other letter types, either in the
-national macro-file, or as local additions.
-.
-.B .LT
-sets the number variables
-.B Pt
-and
-.B Pi
-to 0 and\~5, respectively.
-.
-The following strings and macros must be defined for a new letter type.
-.
-.TP
-.BI let@init_ type
-This macro is called directly by
-.BR .LT .
-.
-It is supposed to initialize variables and other stuff.
-.
-.TP
-.BI let@head_ type
-This macro prints the letter head,
-and is called instead of the normal page header.
-.
-It is supposed to remove the alias
-.BR let@header ,
-otherwise it is called for all pages.
-.
-.TP
-.BI let@sg_ "type name title n flag \fR[\fParg1 \fR[\fParg2 \fR[.\|.\|.]]]\fP"
-.B .SG
-is calling this macro only for letters;
-memorandums have its own processing.
-.
-.I name
-and
-.I title
-are specified through
-.BR .WA / .WB .
-.
-.I n\c
-\~is the counter, 1-max, and
-.I flag
-is true for the last name.
-.
-Any other argument to
-.B .SG
-is appended.
-.
-.TP
-.BI let@fc_ "type closing"
-This macro is called by
-.BR .FC ,
-and has the formal closing as the argument.
-.
-.
-.LP
-.B .LO
-is implemented as a general option-macro.
-.
-It demands that a string named
-.BI Let type
-is defined, where
-.I type
-is the letter type.
-.
-.B .LO
-then assigns the argument to the string variable
-.BI let*lo- type\fR.\fP
-.
-.
-.\" --------------------------------------------------------------------
-.\".SH BUGS
-.\" --------------------------------------------------------------------
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP
-.B @MACRODIR@/@TMAC_M_PREFIX@m.tmac
-.TP
-.B @TMAC_MDIR@/*.cov
-.TP
-.B @TMAC_MDIR@/*.MT
-.TP
-.B @TMAC_MDIR@/locale
-.
-.
-.na
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@)
-.br
-.BR groff_mmse (@MAN7EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHOR
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" coding: latin-1
-.\" End:
diff --git a/contrib/mm/groff_mmse.7.man b/contrib/mm/groff_mmse.7.man
new file mode 100644 (file)
index 0000000..814d54f
--- /dev/null
@@ -0,0 +1,178 @@
+.TH GROFF_MMSE @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAMN
+groff_mmse \- svenska \(rqmemorandum\(rq makro f\(:or GNU roff
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_mmse_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.\"
+.\" Skrivet av Jörgen Hägg, Lund, Sverige
+.\"
+.
+.mso sv.tmac
+.
+.
+.\" ====================================================================
+.SH SYNTAX
+.\" ====================================================================
+.
+.SY "groff \-m@TMAC_M_PREFIX@mse"
+.RI [ flaggor
+\&.\|.\|.\&]
+.RI [ filer
+\&.\|.\|.\&]
+.SY "groff \-m m@TMAC_M_PREFIX@mse"
+.RI [ flaggor
+\&.\|.\|.\&]
+.RI [ filer
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH BESKRIVNING
+.\" ====================================================================
+.
+.B m@TMAC_M_PREFIX@mse
+är en svensk variant av
+.BR m@TMAC_M_PREFIX@m .
+Alla texter är översatta.
+En A4 sida får text som är 13\~cm bred,
+3,5\~cm indragning samt är 28,5\~cm hög.
+Det finns stöd för brevuppställning enligt svensk standard
+för vänster och högerjusterad text.
+.
+.LP
+.B COVER
+kan använda
+.I se_ms
+som argument.
+Detta ger ett svenskt försättsblad.
+Se
+.BR groff_mm (@MAN7EXT@)
+för övriga detaljer.
+.
+.
+.\" ====================================================================
+.SH BREV
+.\" ====================================================================
+.
+Tillgängliga brevtyper:
+.
+.TP
+.B ".LT SVV"
+Vänsterställd löptext med adressat i position T0 (vänsterställt).
+.
+.TP
+.B ".LT SVH"
+Högerställd löptext med adressat i position T4 (passar
+fönsterkuvert).
+.
+.LP
+Följande extra LO-variabler används.
+.
+.TP
+.BI ".LO DNAMN\ " namn
+Anger dokumentets namn.
+.
+.TP
+.BI ".LO MDAT\ " datum
+Mottagarens datum, anges under
+.B Ert datum:
+.RB ( LetMDAT ).
+.
+.TP
+.BI ".LO BIL\ " sträng
+Anger bilaga, nummer eller sträng med
+.B Bilaga
+.RB ( LetBIL )
+som prefix.
+.
+.TP
+.BI ".LO KOMP\ " text
+Anger kompletteringsuppgift.
+.
+.TP
+.BI ".LO DBET\ " beteckning
+Anger dokumentbeteckning eller dokumentnummer.
+.
+.TP
+.BI ".LO BET\ " beteckning
+Anger beteckning (ärendebeteckning i form av diarienummer eller liknande).
+.
+.TP
+.BI ".LO SIDOR\ " antal
+Anger totala antalet sidor och skrivs ut efter sidnumret inom
+parenteser.
+.
+.LP
+Om makrot
+.B .TP
+är definierat anropas det efter utskrift av brevhuvudet.
+Där lägger man lämpligen in postadress och annat som brevfot.
+.
+.
+.\" ====================================================================
+.SH "SKRIVET AV"
+.\" ====================================================================
+.
+Jörgen Hägg, Lund, Sweden <Jorgen.Hagg@axis.se>
+.
+.
+.\" ====================================================================
+.SH FILER
+.\" ====================================================================
+.
+.TP
+.I @MACRODIR@/@TMAC_M_PREFIX@mse.tmac
+.TP
+.IR @TMAC_MDIR@/se_ * .cov
+.
+.
+.na
+.\" ====================================================================
+.SH "SE OCKSÅ"
+.\" ====================================================================
+.
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR @g@tbl (@MAN1EXT@),
+.BR @g@pic (@MAN1EXT@),
+.BR @g@eqn (@MAN1EXT@)
+.br
+.BR groff_mm (@MAN7EXT@)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_mmse_C]
+.
+.
+.\" Local Variables:
+.\" coding: latin-1
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/mm/groff_mmse.man b/contrib/mm/groff_mmse.man
deleted file mode 100644 (file)
index 635e3f0..0000000
+++ /dev/null
@@ -1,163 +0,0 @@
-.TH GROFF_MMSE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.
-.SH NAMN
-groff_mmse \- svenska mm makro för groff
-.
-.
-.ig
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\"
-.\" Skrivet av Jörgen Hägg, Lund, Sverige
-.\"
-.
-.mso sv.tmac
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNTAX
-.\" --------------------------------------------------------------------
-.
-.B groff
-.B \-m@TMAC_M_PREFIX@mse
-[
-.IR flaggor .\|.\|.\&
-]
-[
-.IR filer .\|.\|.\&
-]
-.
-.
-.\" --------------------------------------------------------------------
-.SH BESKRIVNING
-.\" --------------------------------------------------------------------
-.
-.B m@TMAC_M_PREFIX@mse
-är en svensk variant av
-.BR m@TMAC_M_PREFIX@m .
-Alla texter är översatta.
-En A4 sida får text som är 13\~cm bred,
-3,5\~cm indragning samt är 28,5\~cm hög.
-Det finns stöd för brevuppställning enligt svensk standard
-för vänster och högerjusterad text.
-.
-.LP
-.B COVER
-kan använda
-.I se_ms
-som argument.
-Detta ger ett svenskt försättsblad.
-Se
-.BR groff_mm (@MAN7EXT@)
-för övriga detaljer.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BREV
-.\" --------------------------------------------------------------------
-.
-Tillgängliga brevtyper:
-.
-.TP
-.B ".LT SVV"
-Vänsterställd löptext med adressat i position T0 (vänsterställt).
-.
-.TP
-.B ".LT SVH"
-Högerställd löptext med adressat i position T4 (passar
-fönsterkuvert).
-.
-.LP
-Följande extra LO-variabler används.
-.
-.TP
-.BI ".LO DNAMN\ " namn
-Anger dokumentets namn.
-.
-.TP
-.BI ".LO MDAT\ " datum
-Mottagarens datum, anges under
-.B Ert datum:
-.RB ( LetMDAT ).
-.
-.TP
-.BI ".LO BIL\ " sträng
-Anger bilaga, nummer eller sträng med
-.B Bilaga
-.RB ( LetBIL )
-som prefix.
-.
-.TP
-.BI ".LO KOMP\ " text
-Anger kompletteringsuppgift.
-.
-.TP
-.BI ".LO DBET\ " beteckning
-Anger dokumentbeteckning eller dokumentnummer.
-.
-.TP
-.BI ".LO BET\ " beteckning
-Anger beteckning (ärendebeteckning i form av diarienummer eller liknande).
-.
-.TP
-.BI ".LO SIDOR\ " antal
-Anger totala antalet sidor och skrivs ut efter sidnumret inom
-parenteser.
-.
-.LP
-Om makrot
-.B .TP
-är definierat anropas det efter utskrift av brevhuvudet.
-Där lägger man lämpligen in postadress och annat som brevfot.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SKRIVET AV"
-.\" --------------------------------------------------------------------
-.
-Jörgen Hägg, Lund, Sweden <Jorgen.Hagg@axis.se>
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILER
-.\" --------------------------------------------------------------------
-.
-.TP
-.B @MACRODIR@/@TMAC_M_PREFIX@mse.tmac
-.TP
-.B @TMAC_MDIR@/se_*.cov
-.
-.
-.na
-.\" --------------------------------------------------------------------
-.SH "SE OCKSÅ"
-.\" --------------------------------------------------------------------
-.
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@)
-.br
-.BR groff_mm (@MAN7EXT@)
-.
-.\" Local Variables:
-.\" coding: latin-1
-.\" mode: nroff
-.\" End:
index 4b7603974cc76cd3877dfac41fd31322bfed32b2..2851d6829d958ce7daff42a40d4476720c2f989d 100644 (file)
@@ -1,8 +1,6 @@
-.\" -*- nroff -*-
-.
 .ig
 
-Copyright (C) 1991-201 Free Software Foundation, Inc.
+Copyright (C) 1991-2018 Free Software Foundation, Inc.
 mgm is written by Jörgen Hägg <jh@axis.com>
 
 mgm is free software; you can redistribute it and/or modify it under
@@ -16,9 +14,10 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-Please send bug reports with examples to bug-groff@gnu.org.
+Please submit bug reports with examples at
+http://savannah.gnu.org/bugs/?group=groff.
 
 Naming convention stolen from mgs.
 Local names    module*name
@@ -318,8 +317,8 @@ Index               array!index
 .ds Letns!copy Copy \" space!
 .ds Letns!to " to
 .ds Letns!0 Copy to
-.ds Letns!1 Copy (with att.) to
-.ds Letns!2 Copy (without att.) to
+.ds Letns!1 Copy (with att.\&) to
+.ds Letns!2 Copy (without att.\&) to
 .ds Letns!3 Att.
 .ds Letns!4 Atts.
 .ds Letns!5 Enc.
@@ -327,15 +326,15 @@ Index             array!index
 .ds Letns!7 Under separate cover
 .ds Letns!8 Letter to
 .ds Letns!9 Memorandum to
-.ds Letns!10 Copy (with atts.) to
-.ds Letns!11 Copy (without atts.) to
+.ds Letns!10 Copy (with atts.\&) to
+.ds Letns!11 Copy (without atts.\&) to
 .ds Letns!12 Abstract Only to
 .ds Letns!13 Complete Memorandum to
 .ds Letns!14 CC:
 .\"
 .\" Text printed below the footer. Controlled by @copy_type (C).
 .ds Pg_type!0
-.ds Pg_type!1 OFFICIAL FILE COPY 
+.ds Pg_type!1 OFFICIAL FILE COPY
 .ds Pg_type!2 DATE FILE COPY
 .ds Pg_type!3 D\ R\ A\ F\ T
 .ds Pg_type!4 D\ R\ A\ F\ T
@@ -736,13 +735,19 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .\" Wrapper to cancel the side effect of .tag + .br generating
 .\" unwanted vertical space.
 .de misc@tag
+.\" This macro is currently used solely to give information to the
+.\" HTML postprocessor.  If for PostScript or PDF output macro .H
+.\" had been followed by .DS both .H post-space and .DS pre-space
+.\" had been output because of this macro.  So it is now enabled
+.\" only when postprocessor tags are required.
+.if '\*[.T]'html' \{\
 .\" retain temporary indentation and horizontal position
 .if !(\\n[.in]-\\n[.i]=0) .nr misc*ti \\n[.in]
 .nr misc*.k \\n[.k]
 .vpt 0
 .DEVTAG-\\$1 \\$2
 .br
-.if r misc*ti \{
+.if r misc*ti \{\
 .      ti \\n[misc*ti]u
 .      rr misc*ti
 .      sp -1
@@ -751,6 +756,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 \h'\\n[misc*.k]u'\c
 .rr misc*.k
 .vpt 1
+.\}
 ..
 .\" ######## module pict #################
 .nr pict*width 0
@@ -939,7 +945,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .als }2 hd*suf-space
 .aln ;3 hd*need
 .\"-------------
-.\" .hd@split varable index name val1 val2 ...
+.\" .hd@split variable index name val1 val2 ...
 .de hd@split
 .if \\$2>(\\n[.$]-3) .@error "\\$3 must have at least \\$2 values (\\*[\\$3]).
 .nr hd*sp-tmp \\$2+3
@@ -1018,7 +1024,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .\" May change hd*mark (}0), hd*suf-space (}2) and hd*need (;3)
 .\" Can also change Hps1/2.
 .if d HX .HX \\n[hd*level] \\n[hd*arg1] "\\$2\\$3"
-.\"-------------------------------------- 
+.\"--------------------------------------
 .\" pre-space
 .ie \\n[hd*level]<=\\n[Hps] .SP (u;\\n[Hps2])
 .el .SP (u;\\n[Hps1])
@@ -1055,12 +1061,12 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .      vs \\*[hd*new-ps]+2
 .\}
 .\"
-.\"---------- user macro HY ------------- 
+.\"---------- user macro HY -------------
 .\"    user macro to reset indents
 .if d HY .HY \\n[hd*level] \\n[hd*arg1] "\\$2\\$3"
 .\" HTML: mark beginning of heading
 .misc@tag NH \\n[hd*level]
-.\"-------------------------------------- 
+.\"--------------------------------------
 .nr hd*mark-size \w@\\*[hd*mark]@
 .if (\\n[hd*level]<=\\n[Hc])&\\n[hd*htype] .ce\" center if level<=Hc
 .\"
@@ -1116,8 +1122,8 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .while \\n+[hd*i]<15 .af H\\n[hd*i] \\$[\\n[hd*i]] 1
 ..
 .\"----------------------
-.\" set page-nr, called from header 
-.\" 
+.\" set page-nr, called from header
+.\"
 .de hd@set-page
 .\"
 .ie \\n[.$]>0 .nr P \\$1
@@ -1165,7 +1171,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .\"
 .if \\n[D]>2 .tm pg*foot-trap \\n[@pl]u-(\\n[pg*block-size]u+\\n[ft*note-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u) = \\n[pg*foot-trap]
 .\"
-.\" last-pos points to the position of the footer and bottom 
+.\" last-pos points to the position of the footer and bottom
 .\" block below foot-notes.
 .nr pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u)
 .if \\n[D]>2 .tm pg*last-pos \\n[@pl]u-(\\n[pg*block-size]u+\\n[pg*foot-margin]u+\\n[pg*footer-size]u+\\n[pg*extra-footer-size]u) = \\n[pg*last-pos]
@@ -1273,7 +1279,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .              PX
 .              rs
 .      \}
-.      \" check for pending footnotes 
+.      \" check for pending footnotes
 .      ft@check-old
 .      \"
 .      \" back to normal text processing
@@ -1283,7 +1289,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .      \" reset NCOL pointer at each new page.
 .      nr pg*last-ncol 0
 .      \" set multicolumn
-.      \" 
+.      \"
 .      pg@set-po
 .      \" print floating displays
 .      df@print-float 4
@@ -1291,7 +1297,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .      ns
 .\}
 .if \\n[pg*top-enabled]<0 .nr pg*top-enabled 1
-.nr hd*cur-bline \\n[nl]       \" .H needs to know if output has occured
+.nr hd*cur-bline \\n[nl]       \" .H needs to know if output has occurred
 .\}
 ..
 .\"---------------------------------------------------------
@@ -1453,7 +1459,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .ref@eot-print
 ..
 .\"-------------------------
-.\" set top and bottom margins 
+.\" set top and bottom margins
 .\" -T sets pg*footer-size and pg*header-size instead
 .de VM
 .ie '\\$1'-T' \{\
@@ -1480,7 +1486,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .pg@move-trap
 ..
 .\"---------------------
-.\" multicolumn output. 
+.\" multicolumn output.
 .de pg@set-po
 .if \\n[pg*cols-per-page]>1 \{\
 .      ll \\n[pg*column-size]u
@@ -1599,7 +1605,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .fam \\*[pg*mul-fam]
 .ft \\n[pg*mul-font]
 .fi
-.hy 14
+.hy 6
 .di pg*mul-div
 .MULN
 ..
@@ -1660,7 +1666,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 'fi
 .ie \\n[ft*adjust] 'ad
 .el 'na
-.ie \\n[ft*hyphen] 'hy 14
+.ie \\n[ft*hyphen] 'hy 6
 .el 'hy 0
 .ll \\n[@cur-ll]u
 .lt \\n[@cur-ll]u
@@ -1679,7 +1685,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .      ie \\$1>11 .nr ft*format 0
 .      el .nr ft*format \\$1
 .      \"
-.      nr ft*hyphen (\\n[ft*format]%2)*14
+.      nr ft*hyphen (\\n[ft*format]%2)*6
 .      nr ft*format \\n[ft*format]/2
 .      \"
 .      nr ft*adjust 1-(\\n[ft*format]%2)
@@ -1711,7 +1717,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .              nr ds*wide 0
 .              if r ft*df-save \{\
 .                      nr Df \\n[ft*df-save]
-.                      rm ft*df-save 
+.                      rm ft*df-save
 .              \}
 .      \}
 .      if '\\*[ft*x]'WD' \{\
@@ -2083,7 +2089,9 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 'in 0
 .di ds*div!\\n[ds*snr]
 .\"
-.ds@set-new-ev \\n[ds*old-ll]
+.nr ds*div-ll \\n[ds*old-ll]
+.if \\n[ds*format]=1 .nr ds*div-ll -\\n(Sin
+.ds@set-new-ev \\n[ds*div-ll]
 .nr df*float 0
 ..
 .\"--------------------------------------------
@@ -2390,7 +2398,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .SP .5
 ..
 .\" ####### module eq #######################################
-.\" 
+.\"
 .nr eq*number 0 1
 .ds eq*label
 .de EQ
@@ -2504,7 +2512,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .      \}
 .\}
 .am toc*list
-.\" .toc@set level headernumber text pagenr
+.\" .toc@set level headernumber text pagenumber
 .toc@set \\$1 "\\$2" "\\$3" \\$4
 \\..
 ..
@@ -2528,7 +2536,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .in \\n[toc*text]u
 .ti -\\n[toc*hl!\\$1]u
 .\"
-.\" length of headernum space
+.\" length of headernumber space
 .nr toc*i \\n[toc*hl!\\$1]-\w@\\$2@
 .\"
 .ll \\n[@ll]u-\w@\\$4@u-2m
@@ -2560,7 +2568,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .ll \\n[@ll]u
 ..
 .\"########################### module lix ############################
-.\" LIST OF figures, tables, exhibits and equations 
+.\" LIST OF figures, tables, exhibits and equations
 .nr lix*fg-nr 0 1
 .nr lix*tb-nr 0 1
 .nr lix*ec-nr 0 1
@@ -2692,7 +2700,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 ..
 .\"------------
 .\" print appended macro
-.\" lix@dsln type pagenumber text headernr
+.\" lix@dsln type pagenumber text headernumber
 .de lix@dsln
 .nr lix*i \\n[lix*wth\\$1]-\w@\\$4@
 .ne 4v
@@ -2860,7 +2868,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .\"-----------
 .\" called by end-of-text!
 .de ref@eot-print
-.\".if \\n[ref*flag] \{
+.\".if \\n[ref*flag] \{\
 .if d ref*mac \{\
 .      if \\n[D]>2 .tm Print references, called by eot
 .      nr ref*flag 0
@@ -2891,7 +2899,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .nr ref*flag 0 1
 ..
 .\"########################### module app ############################
-.\" 
+.\"
 .nr app*nr 0 1
 .af app*nr A
 .nr app*dnr 0 1
@@ -2937,7 +2945,7 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .      \}
 .      ds app*ind \\n+[app*nr]
 .      nr H1 \\n+[app*dnr]
-.      nr H1h \\n[app*dnr] 
+.      nr H1h \\n[app*dnr]
 .\}
 .\"    clear lower counters
 .nr app*i 1 1
@@ -3566,3 +3574,13 @@ in=\\n[.i] fi=\\n[.u] .d=\\n[.d] nl=\\n[nl] pg=\\n[%]
 .\"--------------------
 .\" Start with a clean slate
 .init@reset
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/contrib/mm/mm.am b/contrib/mm/mm.am
new file mode 100644 (file)
index 0000000..cdd5270
--- /dev/null
@@ -0,0 +1,127 @@
+# Copyright 1991-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+# mm.am
+#
+
+mm_srcdir = $(top_srcdir)/contrib/mm
+mm_builddir = $(top_builddir)/contrib/mm
+
+bin_SCRIPTS += mmroff
+
+man1_MANS += contrib/mm/mmroff.1
+man7_MANS += \
+  contrib/mm/groff_mm.7 \
+  contrib/mm/groff_mmse.7
+
+# Files installed in $(tmacdir)/mm
+MMFILES = \
+  contrib/mm/mm/0.MT \
+  contrib/mm/mm/5.MT \
+  contrib/mm/mm/4.MT \
+  contrib/mm/mm/ms.cov \
+  contrib/mm/mm/se_ms.cov
+mmdir = $(tmacdir)/mm
+dist_mm_DATA = $(MMFILES)
+
+# Files installed in $(tmacdir)
+tmacmmdir = $(tmacdir)
+dist_tmacmm_DATA = contrib/mm/refer-mm.tmac
+
+MMEXAMPLEFILES=\
+  contrib/mm/examples/letter.mm
+
+mmexampledir=$(exampledir)/mm
+dist_mmexample_DATA = $(MMEXAMPLEFILES)
+
+# Local configuration files with default values.
+MMLOCALE = \
+  locale \
+  se_locale
+
+EXTRA_DIST += \
+  contrib/mm/ChangeLog \
+  contrib/mm/examples \
+  contrib/mm/Makefile.sim \
+  contrib/mm/mm \
+  contrib/mm/NOTES \
+  contrib/mm/README \
+  contrib/mm/groff_mm.7.man \
+  contrib/mm/groff_mmse.7.man \
+  contrib/mm/mmroff.1.man \
+  contrib/mm/mmroff.pl
+
+
+mmroff: $(mm_srcdir)/mmroff.pl
+       $(AM_V_GEN)$(SED) -e 's;/usr/bin/perl;$(PERL);' \
+           $(mm_srcdir)/mmroff.pl \
+           >$@ \
+       && chmod +x $@
+
+# Special installation rules for m.tmac, mse.tmac, mmse.tmac, mm.tmac
+# and MMLOCALE
+install-data-local: install_mm
+install_mm:
+       -test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
+       -test -d $(DESTDIR)$(mmdir) || $(mkinstalldirs) $(DESTDIR)$(mmdir)
+       $(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m
+       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
+       $(INSTALL_DATA) $(mm_srcdir)/m.tmac \
+         $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
+       $(SED) -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
+         $(mm_srcdir)/mse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac
+       @$(SED) -e "s;^.mso mse.tmac;.mso $(tmac_m_prefix)mse.tmac;g" \
+         $(mm_srcdir)/mmse.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac
+       @$(SED) -e "s;^.mso m.tmac;.mso $(tmac_m_prefix)m.tmac;g" \
+         $(mm_srcdir)/mm.tmac > $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac
+       @for f in $(MMLOCALE); do \
+         test -f $(DESTDIR)$(tmacdir)/mm/$$f \
+           || touch $(DESTDIR)$(tmacdir)/mm/$$f; \
+       done
+uninstall-local: uninstall_mm
+uninstall_mm:
+       if test -d $(DESTDIR)$(mmexampledir); then \
+         rmdir $(DESTDIR)$(mmexampledir); \
+       fi
+       -for f in $(MMLOCALE); do \
+         test -s $(DESTDIR)$(tmacdir)/mm/$$f \
+           || $(RM) $(DESTDIR)$(tmacdir)/mm/$$f; \
+       done
+       $(RM) $(DESTDIR)$(tmacdir)/tmac.$(tmac_m_prefix)m
+       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)m.tmac
+       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mm.tmac
+       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mse.tmac
+       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_m_prefix)mmse.tmac
+       -rmdir $(DESTDIR)$(tmacdir)/mm
+
+# Special distribution rule: we copy all .tmac files from contrib/mm
+dist-hook: dist_mm
+dist_mm:
+       chmod u+w $(distdir)/contrib/mm/
+       for i in $(mm_srcdir)/*.tmac; do \
+         cp -f $$i $(distdir)/contrib/mm/; \
+       done
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+# vim: set filetype=automake:
index 966bf9400d7e8554fc398bd2746b5a523d1e651c..20952ecf9e67c9e85687f91391cabbe93975db4c 100644 (file)
@@ -1,7 +1,7 @@
 .\" -*- nroff -*-
 .ig
 
-Copyright (C) 1991-201 Free Software Foundation, Inc.
+Copyright (C) 1991-2018 Free Software Foundation, Inc.
 mgm is written by Jörgen Hägg <jh@axis.com>
 
 mgm is free software; you can redistribute it and/or modify it under
@@ -15,9 +15,10 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-Please send bug reports with examples to bug-groff@gnu.org.
+Please submit bug reports with examples at
+http://savannah.gnu.org/bugs/?group=groff.
 ..
 .
 .\"------------
index 85437d8bf1c3698ca207ab6e54a6abcd538df97f..a7224906ed0735b5721f10fc662eebaa2b106c2b 100644 (file)
@@ -1,7 +1,7 @@
 .\" -*- nroff -*-
 .ig
 
-Copyright (C) 1991-201 Free Software Foundation, Inc.
+Copyright (C) 1991-2018 Free Software Foundation, Inc.
 mgm is written by Jörgen Hägg <jh@axis.com>
 
 mgm is free software; you can redistribute it and/or modify it under
@@ -15,9 +15,10 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-Please send bug reports with examples to bug-groff@gnu.org.
+Please submit bug reports with examples at
+http://savannah.gnu.org/bugs/?group=groff.
 ..
 .
 .\"------------
index 77062e2949472ee7d807a9e7f850bca907855995..20d77950cf1ef24c366044f75c4f746bf2627689 100644 (file)
@@ -1,7 +1,7 @@
 .\" -*- nroff -*-
 .ig
 
-Copyright (C) 1991-201 Free Software Foundation, Inc.
+Copyright (C) 1991-2018 Free Software Foundation, Inc.
 mgm is written by Jörgen Hägg <jh@axis.com>
 
 mgm is free software; you can redistribute it and/or modify it under
@@ -15,9 +15,10 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-Please send bug reports with examples to bug-groff@gnu.org.
+Please submit bug reports with examples at
+http://savannah.gnu.org/bugs/?group=groff.
 ..
 .
 .\"------------
index d1e351f6d4870e1d469d237e8a52310cb8f1b15f..d771a81514d2a6d65fd9de4a9fd45897f55a796f 100644 (file)
@@ -1,7 +1,7 @@
 .\" -*- nroff -*-
 .ig
 
-Copyright (C) 1991-201 Free Software Foundation, Inc.
+Copyright (C) 1991-2018 Free Software Foundation, Inc.
 mgm is written by Jörgen Hägg <jh@axis.com>
 
 mgm is free software; you can redistribute it and/or modify it under
@@ -15,9 +15,10 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-Please send bug reports with examples to bug-groff@gnu.org.
+Please submit bug reports with examples at
+http://savannah.gnu.org/bugs/?group=groff.
 ..
 .
 .\"------------
diff --git a/contrib/mm/mmroff.1.man b/contrib/mm/mmroff.1.man
new file mode 100644 (file)
index 0000000..cd5c375
--- /dev/null
@@ -0,0 +1,112 @@
+.TH MMROFF @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+mmroff \- cross-reference preprocessor for GNU roff mm macro package
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr mmroff_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY mmroff
+.OP \-x
+.I groff-arguments
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I mmroff
+is a simple preprocessor for
+.IR groff ,
+used for expanding cross references in
+.IR m@TMAC_M_PREFIX@m ;
+see
+.IR groff_mm (@MAN7EXT@).
+.
+.I groff
+is executed twice, first with
+.B \-z
+and
+.B \-rRef=1
+to collect all cross references and then to do the real processing
+when the cross-reference file is up to date.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.TP
+.B \-x
+Just create the cross-reference file.
+.
+This can be used to refresh the cross-reference file; it isn't
+always needed to have accurate cross references and by using this
+option
+.I groff
+will only be run once.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+.B mmroff
+was written by
+.MT jh@\:axis.se
+Jörgen Hägg
+.ME
+of Lund, Sweden.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR groff_mm (@MAN7EXT@),
+.IR groff_mmse (@MAN7EXT@),
+.IR groff (@MAN1EXT@),
+.IR @g@troff (@MAN1EXT@),
+.IR @g@tbl (@MAN1EXT@),
+.IR @g@pic (@MAN1EXT@),
+.IR @g@eqn (@MAN1EXT@)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[mmroff_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" coding: latin-1
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/mm/mmroff.man b/contrib/mm/mmroff.man
deleted file mode 100644 (file)
index dbd50b9..0000000
+++ /dev/null
@@ -1,125 +0,0 @@
-.TH MMROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-mmroff \- cross reference preprocessor
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.de au
-This document was written by
-.MT jh@axis.se
-Jörgen Hägg, Lund, Sweden
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B mmroff
-[
-.I \-x
-]
-.I groff_arguments
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B mmroff
-is a simple preprocessor for
-.BR groff ,
-it is used for expanding cross references in
-.BR m@TMAC_M_PREFIX@m ,
-see
-.BR groff_mm (@MAN7EXT@).
-.
-.B groff
-is executed twice, first with
-.B \-z
-and
-.B \-rRef=1
-to collect all cross references and then to do the real processing
-when the cross reference file is up to date.
-.
-.
-.TP
-.B \-x
-Just create the cross reference file.
-.
-This can be used to refresh the cross reference file, it isn\[aq]t
-always needed to have accurate cross references and by using this
-option
-.B groff
-will only be run once.
-.
-.
-.\" --------------------------------------------------------------------
-.\".SH BUGS
-.\" --------------------------------------------------------------------
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP
-.B @MACRODIR@/@TMAC_M_PREFIX@m.tmac
-.TP
-.B @TMAC_MDIR@/*.cov
-.TP
-.B @TMAC_MDIR@/*.MT
-.TP
-.B @TMAC_MDIR@/locale
-.
-.
-.na
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff_mm (@MAN7EXT@),
-.BR groff_mmse (@MAN7EXT@),
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" coding: latin-1
-.\" End:
index beaf84f24037b080753c2acd53a156cc926aca32..685a588c59ec618ac28b134f6bbedcf6cab5c634 100644 (file)
@@ -1,6 +1,6 @@
 #! /usr/bin/perl
 # -*- Perl -*-
-# Copyright (C) 1989-201 Free Software Foundation, Inc.
+# Copyright (C) 1989-2018 Free Software Foundation, Inc.
 #
 # This file is part of groff.
 #
@@ -15,7 +15,7 @@
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 use strict;
 # runs groff in safe mode, that seems to be the default
index d175a51a19d61075b61cb591361db809c3ecc51e..7a9795ed734775ae2025b2ad5246644f453311cd 100644 (file)
@@ -1,7 +1,6 @@
-.\"     -*- nroff -*-
 .ig
 
-Copyright (C) 1991-201 Free Software Foundation, Inc.
+Copyright (C) 1991-2018 Free Software Foundation, Inc.
 mgm is written by Jörgen Hägg <jh@axis.com>
 
 mgm is free software; you can redistribute it and/or modify it under
@@ -15,9 +14,10 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
-Please send bug reports with examples to bug-groff@gnu.org.
+Please submit bug reports with examples at
+http://savannah.gnu.org/bugs/?group=groff.
 ..
 .
 .\"
@@ -27,7 +27,7 @@ Please send bug reports with examples to bug-groff@gnu.org.
 .ds @country se
 .
 .mso m.tmac
-.\" The two-letter code for Swedish is `sv', not `se' (this is Northern Sami)
+.\" The two-letter code for Swedish is 'sv', not 'se' (this is Northern Sami)
 .mso sv.tmac
 .
 .ISODATE
@@ -158,3 +158,13 @@ Datum:
 .sp |17
 ..
 .\"  -----------------------------------
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 0b84848deaa3edb191d9b63976f0849b3d137863..c27fa31e8c2e58ef09d42afc335c6ff424971300 100644 (file)
@@ -1,10 +1,8 @@
-.\" -*- mode: nroff; coding: iso-latin-1; -*-
-.\"
 .\" refer-mm.tmac
 .\"
 .\" Refer support for mm macros.
 .\"
-.\" Copyright (C) 2011-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2011-2018 Free Software Foundation, Inc.
 .\"   Written by Werner Lemberg (wl@gnu.org)
 .\"
 .\" This file is part of groff.
@@ -20,7 +18,7 @@
 .\" for more details.
 .\"
 .\" You should have received a copy of the GNU General Public License
-.\" along with this program. If not, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see <http://www.gnu.org/licenses/>.
 .\"
 .\" Please send comments to groff@gnu.org.
 .
@@ -59,7 +57,7 @@
 .ds ref*spec!A     ",  " "
 .ds ref*spec!B     """ " " "in \fI" ""    "\fP"
 .ds ref*spec!D     """ " " "("      ")"
-.ds ref*spec!E     ",  " " "ed. "
+.ds ref*spec!E     ",  " " "ed.\& "
 .ds ref*spec!G     """ " " "("      ")"
 .ds ref*spec!J     ",  " " "\fI"    ""    "\fP"
 .ds ref*spec!N     """ "(" ""       ")"
@@ -73,7 +71,7 @@
 .ds ref*spec!dflt  ",  " "
 .
 .\" For the bibliography section, we emulate the .RS/.RF mechanism of mm by
-.\" collecting references (enclosed with .]- and .][) in macro `ref*mac'.
+.\" collecting references (enclosed with .]- and .][) in macro 'ref*mac'.
 .\" This macro gets expanded while calling the .RP macro.
 .
 .de ref*][-first-pass
 .
 .mso refer.tmac
 .
-.\" EOF
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index c8e9738571d87dfeb0fb1fc6829bc1b5419cbfd5..4875fdfd9722314dd34156c0a90cd1e71d732ee8 100644 (file)
@@ -1,5 +1,5 @@
     -*- text -*-
-    Copyright 2004-201 Free Software Foundation, Inc.
+    Copyright 2004-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -16,12 +16,106 @@ suggestions, or contact me directly at:
 
 If writing me directly, please include the word "groff" or "mom" in
 the Subject line or you risk my spam filters nuking your message.
-Also, please--no html email.  That, too, gets nuked.
 
 --Peter Schaffter
 
 ====================================================================
 
+Version 2.4
+===========
+BIBLIOGRAPHY output broken.
+---Fixed---
+
+Version 2.3
+===========
+.PS/.PE not working at start of documents without a preceding .PP.
+---Fixed---
+
+Output of .PS/.PE not centered correctly (the default).
+---Fixed---
+
+Version 2.2-a
+=============
+Omitting postfixed digit from ROMAN/roman args to LIST not
+generating warning.
+---Fixed---
+
+FOOTERS causing infinite loop.
+---Fixed---
+
+Version 2.2
+===========
+COVERTITLE not picking up style params.
+---Fixed---
+
+FORCE_RECTO and BLANKPAGES not co-operating.
+---Fixed---
+
+TOC and LISTS_OF leading not being picked up and/or adjusted
+properly.
+---Fixed---
+
+PDF outline putting first doc ahead of TOC in PDF outline when
+TOC is auto-relocated and COVER has the BLANKPAGE arg.
+---Fixed---
+
+Version 2.1-b
+=============
+Toggling of pagination broken.
+---Fixed---
+
+HEADERS_AND_FOOTERS printing footer at top of second page instead of
+printing header unless FOOTER_ON_FIRST_PAGE is called.
+---Fixed---
+
+Version 2.1-a
+=============
+
+Some part-by-part formatting changes to headers not being recognized
+when global header options have been invoked.
+---Fixed---
+
+Version 2.1
+===========
+
+UNDERSCORE adding an extra space after underlined text.
+---Fixed---
+
+bug #44903: 2 column output misplaced
+---Fixed---
+
+PDF_IMAGE and FLOAT environments conflicting.
+---Fixed---
+
+DROPCAP picking up color from last call to .gcolor.
+---Fixed---
+
+PAD not working properly with mom's indent macros.
+---Fixed---
+
+Margin notes not respecting differing recto-verso margins.
+---Fixed---
+
+Graphical object macros not clearing fill/no-fill registers and
+modes.
+---Fixed---
+
+LIST ALPHA emitting a number register to output.
+---Fixed---
+
+HEADER_PLAIN and FOOTER_PLAIN broken.
+---Fixed---
+
+Version 2.0-c_1
+===============
+
+.TS with no H causing FN_OVERFLOW warning when there are footnotes
+on same page.
+---Fixed---
+
+PDF_TARGET "descriptive text" not printing.
+---Fixed---
+
 Version 2.0-c
 =============
 
@@ -209,7 +303,7 @@ START.
 ---Fixed---
 
 1st footnotes with overflow vanishing altogether with an
-"automatically ending diversion `FN_OVERFLOW' on exit" warning.
+"automatically ending diversion 'FN_OVERFLOW' on exit" warning.
 ---Fixed---
 
 Right hand margin notes vanishing when an RH margin note overflows
index f185371ac3c9cbd09a1b376e40154c12377d75b4..25c3f8cad2aff5befc5f3e27ae4906ecb916dc8e 100644 (file)
@@ -1,3 +1,98 @@
+2018-11-24
+
+       * version 2.4 release (see NEWS)
+
+2018-09-05
+
+       * improved grap support
+
+2018-03-04
+
+       * version 2.3 release (see NEWS)
+
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * mom.am (.mom.pdf): Use $(GROFF_V).
+
+2017-11-04  G. Branden Robinson <g.branden.robinson@gmail.com>
+
+       * mom.am: Drop unnecessary -M flag; build tree has what it needs.
+
+2017-10-29  Bjarni Ingi Gislason <bjarniig@rhi.hi.is>
+
+       om.tmac-u: Fix typo in register reference.
+
+       Fix bug https://savannah.gnu.org/bugs/?51608.
+
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * groff_mom.7.man: Rename `groff_mom.man'.
+
+       * mom.am: Include renaming.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * mom.am: Add `Last update'.  Setup Emacs mode.
+
+* Sun Jul 26 2015
+
+       o Fix to header part-by-part changes.
+
+* Mon Apr 27 2015
+
+       o version 2.1-a release (see NEWS)
+
+* Fri Apr 4 2015
+
+       o groff_mom.man: Make it work in compatibility mode.
+
+* Sat Feb 28 2015
+
+       o Added an ADJUST argument to QUOTE and BLOCKQUOTE to facilitate
+               optical centering tweaks
+
+* Sat Feb 21 2015
+
+       o Expanded scope of _STYLE macros to headers/footers and
+               page numbers
+
+* Thu Feb 5 2015
+
+       o Version 2.1 release (see NEWS)
+
+       o overhaul of control macro handling
+
+       o overhaul of cover and docheader management 
+
+       o general code cleanup to remove redundancies and reduce size of
+               om.tmac
+
+       o changes to example files to demonstrate new features
+
+       o copyrights updated in all files
+
+* Tue Jan 14 2015
+
+       o Added a new example in French, mon_premier_doc.mom
+
+       o Added README-fr.txt, a translation in French of the README.txt file
+
+       o Makefile.sub: generation of mon_premier_doc.mom, installation of
+         README-fr.txt
+
+* Sun Nov 30 2014
+
+       o Added auto underscoring, caps, and color to TOC header
+               (first-page titles)
+
+       o Added vertical page positioning control macros for TOC and
+               ENDNOTES headers (first-page titles)
+
+* Tue Nov 25 2014
+
+       o Tweak so collated, non-chapter docs with the same author
+               don't require .AUTHOR "" to skip printing author in docheader
+
 * Wed Oct 29 2014
 
        o Makefile.sub: KFLAG to run pdfmom with -k
@@ -1535,7 +1630,7 @@ ________________________________________________________________________
 
 ##### License
 
-Copyright 2004-201 Free Software Foundation, Inc.
+Copyright 2004-2018 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
diff --git a/contrib/mom/Makefile.sub b/contrib/mom/Makefile.sub
deleted file mode 100644 (file)
index 5109333..0000000
+++ /dev/null
@@ -1,230 +0,0 @@
-# -*- makefile -*-
-# Copyright (C) 2002-2014  Free Software Foundation, Inc.
-#      Written by Werner Lemberg (wl@gnu.org)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-
-# These may be overridden if cross-compiling.
-GROFFBIN=$(top_builddir)/src/roff/groff/groff
-GROFF_BIN_PATH=`echo $(groff_bin_dirs) | sed -e 's|  *|$(SH_SEP)|g'`
-PDFMOMBIN=$(top_builddir)/src/devices/gropdf/pdfmom
-
-groff_bin_dirs=\
-  $(top_builddir)/src/roff/groff \
-  $(top_builddir)/src/roff/troff \
-  $(top_builddir)/src/devices/grops \
-  $(top_builddir)/src/devices/gropdf
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac -M$(srcdir)
-KFLAG=-k
-
-GROFF=\
-  GROFF_COMMAND_PREFIX= \
-  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-  $(GROFFBIN) $(FFLAG) $(TFLAG)
-
-PDFMOM=\
-  GROFF_COMMAND_PREFIX= \
-  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-  PDFMOM_BIN_PATH="$(top_builddir)/src/devices/gropdf" \
-  $(PDFMOMBIN) $(FFLAG) $(TFLAG) $(KFLAG)
-
-MAN7=\
-  groff_mom.n
-
-NORMALFILES=\
-  mom.tmac
-
-# These files are processed with `strip.sed'.
-STRIPFILES=\
-  om.tmac
-
-HTMLDOCFILES=\
-  momdoc/stylesheet.css \
-  momdoc/appendices.html \
-  momdoc/color.html \
-  momdoc/cover.html \
-  momdoc/definitions.html \
-  momdoc/docelement.html \
-  momdoc/docprocessing.html \
-  momdoc/goodies.html \
-  momdoc/graphical.html \
-  momdoc/headfootpage.html \
-  momdoc/images.html \
-  momdoc/inlines.html \
-  momdoc/intro.html \
-  momdoc/letters.html \
-  momdoc/macrolist.html \
-  momdoc/rectoverso.html \
-  momdoc/refer.html \
-  momdoc/reserved.html \
-  momdoc/tables-of-contents.html \
-  momdoc/toc.html \
-  momdoc/typesetting.html \
-  momdoc/using.html \
-  momdoc/version-2.html
-
-EXAMPLEFILES=\
-  examples/letter.mom \
-  examples/mom-pdf.mom \
-  examples/sample_docs.mom \
-  examples/typesetting.mom \
-  examples/README.txt \
-  examples/elvis_syntax \
-  examples/elvis_syntax.new \
-  examples/penguin.ps \
-  examples/penguin.pdf \
-  examples/mom.vim
-
-PROCESSEDEXAMPLEFILES=\
-  examples/letter.pdf \
-  examples/mom-pdf.pdf \
-  examples/sample_docs.pdf \
-  examples/typesetting.pdf
-
-HTMLDOCFILES_=`echo $(HTMLDOCFILES) | sed 's|momdoc/||g'`
-EXAMPLEFILES_=`echo $(EXAMPLEFILES) | sed 's|examples/||g'`
-PROCESSEDEXAMPLEFILES_=`echo $(PROCESSEDEXAMPLEFILES) | sed 's|examples/||g'`
-PDFDOCFILE=mom-pdf.pdf
-
-MOSTLYCLEANADD=\
-  stamp-strip \
-  penguin.ps \
-  penguin.pdf \
-  $(PROCESSEDEXAMPLEFILES) \
-  examples/stamp \
-  om.tmac-s
-
-RM=rm -f
-
-#.SUFFIXES: .mom .ps
-#.mom.ps:
-#      $(GROFF) -Tps -mom $< >$@
-
-.SUFFIXES: .mom .pdf
-.mom.pdf:
-       LC_ALL=C $(PDFMOM) $< >$@
-
-all: stamp-strip $(make_pdfexamples)
-
-$(PROCESSEDEXAMPLEFILES): penguin.ps penguin.pdf examples/stamp
-
-pdfexamples: $(PROCESSEDEXAMPLEFILES)
-
-penguin.ps:
-       cp $(srcdir)/examples/penguin.ps .
-penguin.pdf:
-       cp $(srcdir)/examples/penguin.pdf .
-
-examples/stamp:
-       -test -d examples || $(mkinstalldirs) examples
-       touch $@
-
-install_data: install_always \
-             $(make_install_pdfdoc) $(make_install_shipped_htmldoc) \
-             $(make_install_examples)
-
-install_always: stamp-strip $(NORMALFILES)
-       -test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
-       for f in $(NORMALFILES); do \
-         $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-         $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(tmacdir)/$$f; \
-       done
-       for f in $(STRIPFILES); do \
-         $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-         $(INSTALL_DATA) $$f-s $(DESTDIR)$(tmacdir)/$$f; \
-       done
-
-install_pdfdoc:
-# Since this uses examples/, it's in install_pdfexamples
-
-install_shipped_htmldoc: install_always $(HTMLDOCFILES)
-       -test -d $(DESTDIR)$(htmldocdir)/mom \
-         || $(mkinstalldirs) $(DESTDIR)$(htmldocdir)/mom
-       for f in $(HTMLDOCFILES_); do \
-         $(RM) $(DESTDIR)$(htmldocdir)/mom/$$f; \
-         $(INSTALL_DATA) $(srcdir)/momdoc/$$f \
-           $(DESTDIR)$(htmldocdir)/mom/$$f; \
-       done
-
-
-install_examples: install_examples_always $(make_install_pdfexamples)
-
-install_examples_always: $(EXAMPLEFILES)
-       -test -d $(DESTDIR)$(exampledir)/mom \
-         || $(mkinstalldirs) $(DESTDIR)$(exampledir)/mom
-       for f in $(EXAMPLEFILES_); do \
-         $(RM) $(DESTDIR)$(exampledir)/mom/$$f; \
-         $(INSTALL_DATA) $(srcdir)/examples/$$f \
-           $(DESTDIR)$(exampledir)/mom/$$f; \
-       done
-
-install_pdfexamples: install_examples_always $(PROCESSEDEXAMPLEFILES)
-       for f in $(PROCESSEDEXAMPLEFILES_); do \
-         $(RM) $(DESTDIR)$(exampledir)/mom/$$f; \
-         $(INSTALL_DATA) examples/$$f $(DESTDIR)$(exampledir)/mom/$$f; \
-       done
-       -test -d $(DESTDIR)$(pdfdocdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(pdfdocdir)
-       for f in $(PDFDOCFILE); do \
-         $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
-         ln -s $(exampledir)/mom/$$f $(DESTDIR)$(pdfdocdir)/$$f; \
-       done
-
-stamp-strip: $(STRIPFILES)
-       for f in $(STRIPFILES); do \
-         $(RM) $$f-s; \
-         LANG=C LC_ALL=C \
-           sed -f $(top_srcdir)/tmac/strip.sed $(srcdir)/$$f >$$f-s; \
-       done
-       touch $@
-
-uninstall_sub: uninstall_always \
-               $(make_uninstall_pdfdoc) $(make_uninstall_shipped_htmldoc) \
-               $(make_uninstall_examples)
-
-uninstall_always:
-       -for f in $(NORMALFILES) $(STRIPFILES); do \
-         $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-       done
-
-uninstall_pdfdoc: uninstall_always
-# Since that used examples/, it's in uninstall_pdfexamples
-
-uninstall_shipped_htmldoc: uninstall_always
-       -for f in $(HTMLDOCFILES_); do \
-         $(RM) $(DESTDIR)$(htmldocdir)/mom/$$f; \
-       done
-       -test -d $(DESTDIR)$(htmldocdir)/mom && \
-         rmdir $(DESTDIR)$(htmldocdir)/mom
-
-uninstall_examples: uninstall_examples_always $(make_uninstall_pdfexamples)
-       -test -d $(DESTDIR)$(exampledir)/mom && \
-         rmdir $(DESTDIR)$(exampledir)/mom
-
-uninstall_examples_always:
-       -for f in $(EXAMPLEFILES_); do \
-         $(RM) $(DESTDIR)$(exampledir)/mom/$$f; \
-       done
-
-uninstall_pdfexamples: uninstall_examples_always
-       -for f in $(PDFDOCFILE); do \
-         $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
-       done
-       -for f in $(PROCESSEDEXAMPLEFILES_); do \
-         $(RM) $(DESTDIR)$(exampledir)/mom/$$f; \
-       done
index bccb5994992c69c324599cf90fabb0d273532d61..a5fd76bc40dcb57a6cdaa55a20cdc394fe3a9425 100644 (file)
@@ -1,10 +1,63 @@
     -*- text -*-
-    Copyright (C) 2004-2014  Free Software Foundation, Inc.
+    Copyright (C) 2004-2018  Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
     notice and this notice are preserved.
 
+Release 2.4
+-----------
+General bug fix release, with an overhaul of float, image, and
+pre-processor handling to correct inconsistencies in spacing,
+indents, labels, and captions.  Corrects page numbering issue in
+"Lists of..." when pre-processor material is floated and defered.
+
+Release 2.3
+-----------
+Addition of DOCTYPE SLIDES and associated macros
+  NEWSLIDE
+  PAUSE
+  TRANSITION for slide presentations processed with gropdf.
+Fixes and improvements to nested lists (ITEM now takes a spacing
+arg), indents (IB), NEWPAGE (aliased as NEWSLIDE).  Addition
+of CENTER_BLOCK (center blocks of type over whole line length
+regardless of indents).  Tighten up graphical object macros.
+Addition of macros to handle hanging punctuation.  .COLOR preferred
+to .gcolor in om.tmac.  Changes to HEADER to handle printing of both
+headers and footers when DOCTYPE SLIDES.
+
+Release 2.2
+-----------
+Addition of flex-spacing (flexible vertical whitespace).  Fixes and
+improvements to positioning of floats, images, and pre-processor
+material.  Addition of TARGET (PDF target) argument to floats,
+images, and pre-processor material.  Improvements to autolabelling.
+
+Release 2.1-b
+-------------
+Fix to handling of kern units.  Updated copyright info.
+
+Release 2.1-a
+-------------
+Expanded labelling facilities to include floats and
+quotes/blockquotes.  Improvements to TOC handling.
+
+Release 2.1
+-----------
+Expanded support for doc-covers, covers, and docheaders:
+  - control macros for formatting every element separately (title,
+    subtitle, author, etc.); formatting options include family,
+    font, size, color, quad, caps, smallcaps and underscoring
+  - (DOC_)COVERTEXT for setting blocks of type on cover pages
+  - (DOC_)COVER_IMAGE for putting full page or small images on cover
+    pages
+
+New <ELEMENT>_STYLE macros that allow grouping of style parameters
+for most document elements into a single macro using keyword/value
+pairs.
+
+Smallcaps, with the ability to control size, weight, and width.
+
 Release 2.0-c
 -------------
 Mom now has full support for eqn, pic, and tbl, as well as
index 09491881090e2868c60a5707b45c7e128cf17786..d558eb7c46a892df3b93f424064ce8ddad066ebe 100644 (file)
@@ -1,10 +1,10 @@
     -*- txt -*-
-    Copyright 2004-201 Free Software Foundation, Inc.
+    Copyright 2004-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
     notice and this notice are preserved.
 
-Version 2.0
-
-(nothing yet)
+- cutarounds
+- clickable footnote and endnote markers
+- indexing
index 15d8845d663b844ddf6026ec7e51798e5f322a41..aee4b03abe356d9500a0f8be0a44628ac6506dba 100644 (file)
@@ -9,7 +9,7 @@ K1L 6X6
 ========================================================================
 
 The groff macro file om.tmac and the html documentation pertaining to
-it are Copyright (C) 2004-2014 Peter Schaffter.
+it are Copyright (C) 2004-2018 Peter Schaffter.
 
 om.tmac is issued under the GNU General Public License, a full copy of
 which can be had at
diff --git a/contrib/mom/examples/README-fr.txt b/contrib/mom/examples/README-fr.txt
new file mode 100644 (file)
index 0000000..ddf572b
--- /dev/null
@@ -0,0 +1,120 @@
+     -*- mode: text; coding: utf-8; -*-
+    Copyright (C) 2014-2018 Free Software Foundation, Inc.
+
+    Copying and distribution of this file, with or without modification,
+    are permitted in any medium without royalty provided the copyright
+    notice and this notice are preserved.
+
+========================================================================
+
+Les fichiers dans ce répertoire vous permettent de voir mom en pleine
+action.
+
+Si vous avez téléchargé et décompressé une version de mom depuis sa
+page d'accueil, vous verrez qu'aucun exemple n'est accompagné du
+fichier PDF (.pdf) correspondant, comme c'est le cas sur les versions
+pré-compilées de groff, ou groff compilé à partir des sources.
+
+Je n'ai pas inclu les PDF parce que je voulais conserver l'archive mom
+aussi petite que possible. Pour générer les PDF, traitez les fichiers
+avec pdfmom(1).
+
+    pdfmom mom-pdf.mom > mom-pdf.pdf
+    pdfmom sample_docs.mom > sample_docs.pdf
+    pdfmom slide-demo.mom > slide-demo.pdf
+    pdfmom -k letter.mom > letter.pdf
+    pdfmom -k mon_premier_doc.mom > mon_premier_doc.pdf
+    pdfmom -k typesetting.mom > typesetting.pdf
+
+Les fichiers
+------------
+
+Tous les fichiers sont configurés pour le format lettre US, exceptés
+mom-pdf.mom et mon_premier_doc.mom, qui utilisent le format A4.
+
+***typesetting.mom**
+
+Le fichier typesetting.mom montre l'utilisation d'éléments de
+composition typographique: tabulations, tabulations intégrées dans des
+chaînes de caractères, remplissage de lignes, texte sur plusieurs
+colonnes et différents styles d'indentation; ainsi que certaines
+subtilités et réglages précis disponibles via des macros et des
+échappements en ligne ("inline escape", des commandes insérées
+directement dans le texte, par opposition aux macros).
+
+Comme ce fichier montre également l'utilisation d'une petite image au
+milieu d'un texte et que cette image est la mascotte favorite de tout
+le monde -- Tux, le fichier PDF de cette image, penguin.pdf, a été
+ajouté dans ce répertoire.
+
+***sample_docs.mom***
+
+Le fichier sample_docs.mom montre en exemple les trois styles de
+documents apportés par les macros de formattage de document de mom,
+ansi que l'utilisation de COLLATE. Il montre également certaines
+fonctionnalités PDF de mom dont l'écriture d'une ébauche de nouvelle
+ou des liens cliquables dans une table des matières.
+
+Le dernier exemple démontre, par un texte séparé en deux colonnes, la
+souplesse de mom pour la conception de document.
+
+Le PRINTSTYLE de ce fichier est TYPESET et vous donne une idée du
+comportement par défaut de mom pour la composition typographique de
+document.
+
+Si vous souhaitez voir comment mom traite le même fichier quand
+PRINTSTYLE est TYPEWRITE (c'est-à-dire dactylographié, avec espace
+double) remplacez .PRINTSTYLE TYPESET par .PRINTSTYLE TYPEWRITE au
+début du fichier.
+
+***letter.mom***
+
+Ceci est simplement l'exemple du tutorial de momdocs, prêt à être vu.
+
+***slide-demo.mom***
+
+Le fichier slide-demo.mom montre une présentation de diapositives
+avec des effets PAUSE et TRANSITION.  Le fichier .pdf généré avec
+pdfmom devrait être ouvert en mode Présentation d'un lecteur PDF
+(Okular, Evince, Acroread).  Notez que pas tous les effets de
+transition sont disponibles pour tous les lecteurs PDF.  
+
+***mon_premier_doc.mom***
+
+Le fichier mon_premier_doc.mom est un exemple simple en français
+montrant l'utilisation d'éléments de formattage courants: titres de
+section, paragraphes, listes, table des matières et liens PDF
+cliquables. Il doit être généré avec l'option -k du fait de la
+présence de caractères accentués.
+
+Un certain nombre de réglages ont également été changés pour ce
+document en français:  ATTRIBUTE_STRING est utilisé pour remplacer
+"by" par "par" en tête de document (là où le titre et l'auteur sont
+affichés). TOC_HEADER_STRING sert à modifier le titre de la table des
+matières en "Table des matières" plutôt que "Table of Content". Enfin,
+le paramètre de configuration INDENT_FIRST_PARAS est activé afin
+d'indenter le premier paragraphe de chaque section -- ceci est l'usage
+en typographie française.
+
+***mom-pdf.mom***
+
+Le manuel "Producing PDFs with mom and groff".
+
+***mom.vim***
+
+Les règles de coloration syntaxique vim sont baséés sur celles
+fournies par Christian V. J. Brüssow (cvjb@cvjb.de). Copiez le fichier
+mom.vim dans votre répertoire ~/.vim/syntax directory; ensuite,
+autorisez la coloration syntaxique si ce n'est pas encore le cas:
+
+  :syntax enable
+ou
+  :syntax on
+
+***elvis_syntax.new***
+
+Ceux qui utilisent elvis, le clone de vi, peuvent directement
+copier-coller le contenu de ce fichier dans leur elvis.syn. Tous les
+fichiers ayant l'extension .mom auront la coloration syntaxique.  Les
+règles dans elvis_syntax ne sont pas exhaustive, mais aideront
+beaucoup à rendre les fichiers mom plus lisibles.
index 0a7f74b46741a37802bef6459547a14b8f0b8688..633f089828cb7bd7e447cf03e3e0735753918e50 100644 (file)
@@ -1,5 +1,5 @@
-     -*- text -*-
-    Copyright (C) 2004-201 Free Software Foundation, Inc.
+    -*- mode: text; coding: utf-8; -*-
+    Copyright (C) 2004-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -18,16 +18,18 @@ I haven't included the PDF output because I want to keep the mom
 archive as lean as possible.  To view the PDF output, process the
 files with pdfmom(1).
 
-    pdfmom letter.mom > letter.pdf
     pdfmom mom-pdf.mom > mom-pdf.pdf
     pdfmom sample_docs.mom > sample_docs.pdf
-    pdfmom typesetting.mom > typesetting.pdf
+    pdfmom slide-demo.mom > slide-demo.pdf
+    pdfmom -k letter.mom > letter.pdf
+    pdfmom -k mon_premier_doc.mom > mon_premier_doc.pdf
+    pdfmom -k typesetting.mom > typesetting.pdf
 
 The files themselves
 --------------------
 
-All are set up for US letter papersize except mom-pdf.mom, which
-uses A4.
+All are set up for US letter papersize except mom-pdf.mom and
+mon_premier_doc.mom, which uses A4.
 
 ***typesetting.mom**
 
@@ -64,6 +66,29 @@ the file.
 This is just the tutorial example from the momdocs, ready for
 previewing.
 
+***slide-demo.mom***
+
+The file, slide-demo.mom, demonstrates a slide presentation with
+PAUSE and TRANSITION effects.  The .pdf created by pdfmom should be
+opened in Presentation Mode in a PDF reader (e.g. Okular, Evince,
+Acroread).  Note that not all transition effects are available in
+all PDF readers.
+
+***mon_premier_doc.mom***
+
+The file, mon_premier_doc.mom, is a simple example in French showing
+the use of common elements: section headings, paragraphs, lists, table
+of contents and clickable links.  It should be generated with option -k
+as there are some accented letters.
+
+A few settings were also changed for this French document:
+ATTRIBUTE_STRING is used to replace "by" by "par" in the document
+header (where the title and the author are displayed).
+TOC_HEADER_STRING is used to modity the Table of Content title to
+"Table des matières". And finally, INDENT_FIRST_PARAS is used to
+indent the first paragraph of a section -- this is the usual
+convention in French typesetting.
+
 ***mom-pdf.mom***
 
 The manual, Producing PDFs with mom and groff.
index 7b29a0449fdb04a37136b462771fe15cb9ff540f..68a0c35d7686fe769770d11674bbd9dd3debaa86 100644 (file)
@@ -1,4 +1,4 @@
-" Copyright (C) 2004-2014 Free Software Foundation, Inc.
+" Copyright (C) 2004-2018 Free Software Foundation, Inc.
 "
 " Copying and distribution of this file, with or without modification,
 " are permitted in any medium without royalty provided the copyright
index eb1aae7ce5d1272973cc7c22b1abe22ee8ac3371..fd63275b30e5e2d3193e38ed54d0ed4d394f61e5 100644 (file)
@@ -1,4 +1,4 @@
-" Copyright (C) 2004-201 Free Software Foundation, Inc.
+" Copyright (C) 2004-2018 Free Software Foundation, Inc.
 "
 " Copying and distribution of this file, with or without modification,
 " are permitted in any medium without royalty provided the copyright
index a6e19b6386a7ec403764f27fcc351f8fe3c8fd4d..1d1eac5a8170ce6576cfa48f2799caebeaf7ef7a 100644 (file)
@@ -1,6 +1,6 @@
-.\" -*- mode: troff; coding: utf-8; -*-
-.
-\# Copyright (C) 2004-201 Free Software Foundation, Inc.
+.\" -*- mode: text; coding: utf-8; -*-
+\#
+\# Copyright (C) 2004-2018 Free Software Foundation, Inc.
 \#
 \# Copying and distribution of this file, with or without modification,
 \# are permitted in any medium without royalty provided the copyright
@@ -40,3 +40,7 @@ legislation that would cripple or render illegal open source
 development.
 .CLOSING
 Sincerely,
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
index c0aea929f48f920d51d4ad12a8abf5eac04047ee..17c0b4cca37100216905e0388700fb6181e0c2c3 100644 (file)
@@ -1,5 +1,6 @@
-.\" -*- nroff -*-
-.\" Copyright (C) 2012-2014  Free Software Foundation, Inc.
+.\" -*- mode: text; coding: utf-8; -*-
+.\"
+.\" Copyright (C) 2012-2018 Free Software Foundation, Inc.
 .\"
 .\" This file is part of mom, which is part of groff, a free software
 .\" project.
@@ -8,68 +9,93 @@
 .\" GNU General Public License as published by the "Free Software
  \" Foundation", version\~2.
 .\"
-.\" The license text is available in the internet at
+.\" The license text is available on the internet at
 .\" <http://www.gnu.org/licenses/gpl-2.0.html>
 .\"
-.PAPER     A4
+.PAPER A4
 .\" Reference macros (metadata)
 .TITLE     "Producing PDFs" "with groff and mom"
 .PDF_TITLE "\*[$TITLE]
-.AUTHOR    "\v'-.5v'\*[UP 4p]Deri James" \
-           "\v'-.5v'\*[UP 8p]and" \
-           "\v'-.5v'\*[UP 11p]Peter Schaffter"
-.MISC      "This file is part of groff." \
-           ".sp .25v" \
-           "groff is free software; you can redistribute it" \
-           "and\*[FU3]/or modify it under the terms of the GNU" \
-           "General Public License as published by the" \
-           "Free Software Foundation, either version 3" \
-           "of the License, or (at your option) any later" \
-           "version." \
-           ".sp .25v" \
-           "You should have received a copy of the GNU" \
-           "General Public License along with this program." \
-           "If not, see:" \
-           ".sp .25v" \
-           ".IL 2P" \
-           ".PDF_WWW_LINK http://www.gnu.org/licenses/" \
-           ".IQ CLEAR"
-.COPYRIGHT "20\*[BU3]1\*[BU2]2 Free Software Foundation
+.COPYRIGHT "20\*[BU3]1\*[BU2]5, 20\*[BU3]1\*[BU2]7 Free Software Foundation
+.AUTHOR "Deri James" "\*[UP .5p]and" "Peter Schaffter"
+.\" Cover author style
+.COVER_AUTHOR_STYLE \
+  LEAD 15 \
+  SPACE -.5v
+.\" Docheader author style
+.AUTHOR_STYLE \
+ LEAD 14 \
+ SPACE -.75
 .ATTRIBUTE_STRING ""  \" Don't print 'by'
+.\"
 .PDF_BOOKMARKS_OPEN 2
-.\" Cover and page header
-.COVER       TITLE AUTHOR COPYRIGHT MISC
-.HEADER_LEFT "James, Schaffter"
-.\" Page, style, formatting
+.\" Formatting style, margins
 .PRINTSTYLE TYPESET
 .L_MARGIN   2.5c
 .R_MARGIN   2.5c
 .B_MARGIN   2.5c
-.\"
+.\" General defaults
 .FAM      H
 .FT       R
 .PT_SIZE  10.5
 .AUTOLEAD 3
-.PARA_INDENT 0  \" Because we're spacing paragraphs.
+.PARA_INDENT 0  \" No indent because we're spacing paragraphs.
+.\" Copyright notice
+.COVERTEXT
+.SP .5v
+.QUAD CENTER
+.HY off
+.IB 8P
+This file is part of groff.
+.SP .5v
+Groff is free software.  You can redistribute it
+and\*[FU3]/or modify it under the terms of the GNU
+General Public License as published by the
+Free Software Foundation, either version 3
+of the License, or (at your option) any later
+version.
+.SP .5v
+You should have received a copy of the GNU
+General Public License along with this program.
+If not, see:
+.SP .25v
+.PDF_LINK_COLOR 0.0 0.3 0.9
+.PDF_WWW_LINK http://www.gnu.org/licenses/
+.IQ CLEAR
+.HY
+.COVERTEXT end
+.\" Cover and page header
+.COVER TITLE AUTHOR COPYRIGHT COVERTEXT
+.HEADER_LEFT "James, Schaffter"
 .\"
 .COVER_LEAD     +3.5
 .DOCHEADER_LEAD +3.5
 .\" Color for code snippets
 .NEWCOLOUR dark-grey RGB #343434
 .\" Make QUOTE look like CODE
-.QUOTE_FAMILY C
-.QUOTE_FONT   B
-.QUOTE_SIZE   +1.5
-.QUOTE_COLOR  dark-grey
-.QUOTE_INDENT 9p
+.QUOTE_STYLE \
+  FAMILY C \
+  FONT   B \
+  SIZE   +1.5 \
+  COLOR  dark-grey \
+  INDENT 9p
 .\"
-.CODE_FONT  B
-.CODE_SIZE  115
-.CODE_COLOR dark-grey
-.CONDENSE   87
+.CODE_STYLE \
+  FONT  B \
+  SIZE  115 \
+  COLOR dark-grey
+.CONDENSE 87 \" Condense percentage used in COD
 .\"
-.HEADING_STYLE 1 NUMBER FONT B SIZE +1 BASELINE_ADJUST \n[.v]/5
-.HEADING_STYLE 2 NUMBER FONT I SIZE +.25 BASELINE_ADJUST \n[.v]/5
+.HEADING_STYLE 1 \
+  NUMBER \
+  FONT B \
+  SIZE +1 \
+  BASELINE_ADJUST \n[.v]/5
+.HEADING_STYLE 2 \
+  NUMBER \
+  FONT I \
+  SIZE +.25 \
+  BASELINE_ADJUST \n[.v]/5
 .\"
 .FOOTNOTE_SIZE -1
 .\" Character definitions for program names, opts, etc.
 .char \[gropdf]           \*[BD]gropdf\*[PREV]
 .char \[grops]            \*[BD]grops\*[PREV]
 .char \[man]              \*[BD]man\*[PREV]
-.char \[-mom]             \*[BD]-mom\*[PREV]
+.char \[-mom]             \*[BD]\-mom\*[PREV]
 .char \[mom]              \*[BD]mom\*[PREV]
-.char \[-mpdfmark]        \*[BD]-mpdfmark\*[PREV]
+.char \[-mpdfmark]        \*[BD]\-mpdfmark\*[PREV]
 .char \[ms]               \*[BD]ms\*[PREV]
 .char \[pdfmom]           \*[BD]pdfmom\*[PREV]
 .char \[pdfroff]          \*[BD]pdfroff\*[PREV]
-.char \[-P-e]             \*[BD]-P-e\*[PREV]
-.char \[-P-p<papersize>]  \*[BD]-P-p<papersize>\*[PREV]
+.char \[-P-e]             \*[BD]\-P\-e\*[PREV]
+.char \[-P-p<papersize>]  \*[BD]\-P\-p<papersize>\*[PREV]
 .char \[ps2pdf]           \*[BD]ps2pdf\*[PREV]
 .char \[psselect]         \*[BD]psselect\*[PREV]
-.char \[-T]               \*[BD]-T\*[PREV]
-.char \[-Tpdf]            \*[BD]-Tpdf\*[PREV]
-.char \[-Tps]             \*[BD]-Tps\*[PREV]
+.char \[-T]               \*[BD]\-T\*[PREV]
+.char \[-Tpdf]            \*[BD]\-Tpdf\*[PREV]
+.char \[-Tps]             \*[BD]\-Tps\*[PREV]
 .\" Strings for inline code
-.ds cod  "\E*[CODE]\&\E*[COND]
-.ds codx "\E*[CONDX]\E*[CODE off]\&
+.ds cod  \E*[CODE]\&\E*[COND]
+.ds codx \E*[CONDX]\E*[CODE off]\&
 .\" Paragraph spacing
-.de PP2
-. ALD .3v
-. PP
-..
+.PARA_SPACE .3v
 .\" Wrapper around QUOTE
 .de COD
 . QUOTE
 .SPACE_TOC_ITEMS
 .AUTO_RELOCATE_TOC
 .TOC_ENTRY_STYLE 2 FONT I
-.TOC_LEAD 14
+.TOC_LEAD 14.5 ADJUST
+.TOC_PADDING 1
 .\"
-.DOCHEADER_ADVANCE 5c \" Begin this distance down from top of page
+.DOCHEADER_ADVANCE 5c \" Begin docheader this distance down from top of page
 .\"
+.NO_SHIM
 .START
 .\"
+.SP .5c
 .HEADING 1 NAMED intro "Introduction"
 .PP
 .RW .12
@@ -135,7 +161,7 @@ or to remote web pages
 .PDF_LINK external PREFIX ( SUFFIX ), "external links"
 and the generation of a clickable document outline that appears in
 the Contents panel of most PDF viewers.
-.PP2
+.PP
 .RW .01
 Using \[groff] and \[mom] to produce PDF documents results in the
 automatic generation of clickable document outlines (discussed
@@ -151,13 +177,13 @@ when the document is viewed at the screen (see
 Groff provides more than one way to generate PDF documents from
 files formatted with the \[mom] macros.  One is to call \[groff]
 directly, either with
-.COD "groff [-Tps] -mom -m pdfmark doc.mom | ps2pdf - doc.pdf
+.COD "groff [\-Tps] \-mom \-m pdfmark doc.mom | ps2pdf \- doc.pdf
 which pipes output from the \[grops] PostScript driver through
 \[ps2pdf], or
-.COD "groff -Tpdf -mom doc.mom > doc.pdf
+.COD "groff \-Tpdf \-mom doc.mom > doc.pdf
 which uses the native PDF driver, \[gropdf].  Alternatively, one may
 call the wrapper
-.COD "pdfroff -mom -mpdfmark --no-toc doc.mom > doc.pdf
+.COD "pdfroff \-mom \-mpdfmark \-\-no-toc doc.mom > doc.pdf
 A fourth, preferred method is to use
 .PDF_LINK pdfmom SUFFIX , "\[pdfmom]"
 which is strongly recommended since it implements the full range
@@ -169,7 +195,7 @@ One reason to prefer using the native PDF driver (via \[pdfmom] or
   "paper and page setup macros"
 do not require a corresponding \[-P-p<papersize>] flag on the
 command line.
-.PP2
+.PP
 There are other minor differences between the methods, discussed
 .PDF_LINK pdf-diff SUFFIX . "here"
 .RW 0
@@ -179,7 +205,6 @@ Often, but not always, links in the body of a PDF document point
 to headings elsewhere in the same document.  Creating these links
 is a simple process.  First, identify the places to link to
 ("destinations"), then link to them from any place in the document.
-.NO_SHIM
 .HEADING 2 NAMED naming "Creating destination points at headings"
 .PP
 The first step in creating links to a heading is to give the
@@ -193,7 +218,7 @@ would, in addition to printing the head in the body of the document,
 identify the introduction by the unique id, "intro"\*[BU6].  This
 id, or name, can then be used to create links to the introduction
 from any part of the document.
-.PP2
+.PP
 Furthermore, \*[cod]NAMED\|<id>\*[codx] stores the text of the
 heading for use later on when linking to it (see
 .PDF_LINK internal SUFFIX ). +
@@ -209,13 +234,14 @@ just above the table in the source file.  As with
 \*[cod]HEADING\*[codx], \*[cod]<id>\*[codx] is any unique name.
 \*[cod]<text>\*[codx] is optional. \*[cod]<id>\*[codx] can now be linked
 to from anywhere in the document.
+.SP 2.5p
 .HEADING 2 NAMED internal "Creating internal links"
 .PP
 Internal links are clickable text areas that allow you to jump to
 named destinations within a document.  (See
 .PDF_LINK external "here"
 for a description of external links.)
-.PP2
+.PP
 Internal links are created with the macro \*[cod]PDF_LINK\*[codx],
 which takes the form
 .COD "\&.PDF_LINK <id> [PREFIX <text>] [SUFFIX <text>] \
@@ -225,23 +251,23 @@ the document (see
 .PDF_LINK naming +
 and
 .PDF_LINK target SUFFIX ). +
-.PP2
+.PP
 \*[cod]PREFIX\|<text>\*[codx] and \*[cod]SUFFIX\|<text>\*[codx], both or
 either of which are optional, are printed around the clickable area
 but do not form part of the link itself.
-.PP2
+.PP
 \*[cod]<hotlink text>\*[codx] is the text that should be clickable,
 identifiable in the PDF document by the colour assigned to links
 (see
 .PDF_LINK colour SUFFIX ). +
 .PDF_TARGET expando
-.PP2
+.PP
 If the hotlink text ends in \*[cod]\[dq]*\[dq]\*[codx]\*[BU9],
 the asterisk is replaced by the text of the destination
 point, assuming it's a heading.  If the hotlink text ends in
 \*[cod]\[dq]+\[dq]\*[codx]\*[BU9], the replacement text is surrounded
 by quotes.
-.PP2
+.PP
 Using our
 .PDF_LINK intro-ex SUFFIX , "HEADING example"
 .RW .1
@@ -256,7 +282,7 @@ In the text, the link would look like this:
 External links are clickable text areas whose destination is a
 URL.  Clicking on them causes a browser window to pop up with the
 destination address.
-.PP2
+.PP
 The format of the macro to create external links is similar to the
 one for creating internal links:
 .COD "\&.PDF_WWW_LINK <url> [PREFIX <text>] [SUFFIX <text>] [\[dq]<hotlink text>\[dq]]"
@@ -265,7 +291,7 @@ one for creating internal links:
 exactly the same meaning, as does \*[cod]<hotlink text>\*[codx],
 which furthermore accepts the same expandos, \*[cod]\[dq]+\[dq]\*[codx] and
 \*[cod]\[dq]*\[dq]\*[codx].
-.PP2
+.PP
 .RW .1
 If no hotlink text is given, then \*[cod]<url>\*[codx] is
 used as the text.  If hotlink text is given and ends in
@@ -303,7 +329,7 @@ both lead to mom using
 .PDF_LINK colour red
 .PDF_LINK_COLOR
 links.
-.PP2
+.PP
 The default colour can be restored by calling
 \*[cod]PDF_LINK_COLOR\*[codx] with no parameter.
 .FLOAT
@@ -317,24 +343,24 @@ be processed with
 \[oq]\[pdfmom]\~\[-Tps]\[cq].
 .IBQ
 .FLOAT off
-.NO_SHIM off
+.SP .5v
 .HEADING 1 NAMED outline "The PDF Outline"
 .PP
 Most PDF viewers provide a panel that displays a document's outline,
 similar to a table of contents.  Clicking on an entry navigates
 directly to the appropriate place in the document.
-.PP2
+.PP
 Mom generates PDF outlines the same way she populates
 her own table of contents: by intercepting calls to the
 \*[cod]HEADING\*[codx] macro, as well as to the various title
 and chapter macros used in namimg documents, and allocating each a
 hierarchic level.
-.PP2
+.PP
 Covers, titles/chapters, and the table of contents are all
 assigned to level 1\*[BU5].  Subsequent headings are assigned to
 n\*[UP 1p]+\*[DOWN 1p]\*[BU4]1, where n is the level given to
 \*[cod]HEADING\*[codx].
-.PP2
+.PP
 .RW .22
 The PDF outline can sensibly recover from skipped or omitted heading
 levels; the printed table of contents cannot.  Users are therefore
@@ -348,13 +374,13 @@ visible in the PDF outline.  Closed \%levels have at least one level
 beneath them that is not visible unless the closed link is clicked.
 It is common for only the first two levels to be open so the outline
 doesn't look cluttered.
-.PP2
+.PP
 To establish which levels should be open by default when a document
 loads, use
 .COD "\&.PDF_BOOKMARKS_OPEN n
 where \*[cod]n\*[codx] is a number specifying at which level all
 subsequent ones should be closed.
-.PP2
+.PP
 If, at any point in the document, you specify
 .COD "\&.PDF_BOOKMARKS_OPEN NO  \e\[dq] or any other text argument
 then all subsequent bookmarks will be closed until
@@ -368,6 +394,7 @@ Mom's default is to collect entries, so if the command is placed at
 the start of a document, it \%disables entry collection completely.
 Elsewhere, it suspends collection until you re-enable it with
 .COD "\&.PDF_BOOKMARKS  \e\[dq] i.e. with no parameter
+.SP -1
 .HEADING 2 NAMED pdf:title "The PDF window title"
 .PP
 While not strictly part of the PDF outline, the title of a document
@@ -385,7 +412,7 @@ can remove the window title by issuing
 .COD ".PDF_TITLE \[dq]\[dq] \e\[dq] ie. with a blank argument
 .IBQ
 .FLOAT off
-.NO_SHIM
+.SP .5v
 .HEADING 1 NAMED toc "Tables of Contents"
 .RLD .5v
 .HEADING 2 NAMED toc:gen "Generating a Table of Contents 
@@ -401,7 +428,7 @@ SUFFIX ). "mom documentation"
 When the file is processed and loaded in a viewer, entries in the
 Table of Contents will be clickable links.
 .RW 0
-.PP2
+.PP
 Whichever link colour is active at the end of the document, prior to
 \*[cod]TOC\*[codx], will be used for the \%Table of Contents
 links.
@@ -412,11 +439,11 @@ file, the Table of Contents is printed at the end of the document.
 When this is not desirable, the PostScript output from \[groff]
 must be processed with \[psselect] in order to place the TOC in the
 preferred location.
-.PP2
+.PP
 When using mom and \[groff]'s native pdf device (via \[pdfmom] or
 \[groff] \[-Tpdf]), positioning of the Table of Contents can be done
 within the source file.
-.PP2
+.PP
 The command to control the placement of the TOC is
 .COD "\&.AUTO_RELOCATE_TOC [<position>]
 where the optional \*[cod]<position>\*[codx] can be one of these
@@ -441,16 +468,13 @@ AFTER_COVER\*[SIZE]
 It is normally not necessary to supply a keyword, since
 \*[cod]AUTO_RELOCATE_TOC\*[codx] places the TOC after the DOC_COVER,
 if there is one, or the first COVER when no DOC_COVER is present.
-.NO_SHIM off
 In rare instances where it is desirable to place the TOC somewhere
 else in the document, there are two low-level commands,
-.SP .5v
-\*[FWD 6p]\*[cod].TOC_BEFORE_HERE\*[codx]
+\*[cod].TOC_BEFORE_HERE\*[codx]
 \ \*[SIZE -.5]and\*[SIZE]\ \"
 \*[cod].TOC_AFTER_HERE\*[codx]
-.SP .5v
 which place the TOC either before or after the current page.
-.PP2
+.PP
 These last two commands have a small catch: although the TOC will
 appear where specified, the \%"Contents" entry in the PDF outline,
 which observes a hierarchy of levels, will assign the TOC to
@@ -467,7 +491,6 @@ for creating PDF files with \[groff]: the original method, ie.
 passing the \[-Tps] and \[-mpdfmark] options to \[groff] (or using
 \[pdfroff], which does this for you); or the newer \[-Tpdf], which
 produces PDF files natively.
-.NO_SHIM
 .HEADING 2 NAMED fwd:ref "The problem of forward references"
 .PP
 .EW .2
@@ -483,7 +506,7 @@ with one of the expandos,
 Mom doesn't know what text to put in the expando because it has not
 yet been defined.  This means that \[groff] must be run multiple
 times to find the unknown text.
-.PP2
+.PP
 .EW .2
 The program \[pdfroff] exists to handle these multiple runs, but it
 imposes some limitations on the PDF features available with \[mom].
@@ -494,7 +517,7 @@ imposes some limitations on the PDF features available with \[mom].
 preferred, trouble-free way to generate PDF documents from a mom
 source file.  Like \[pdfroff], it is a frontend to \[groff] and
 accepts all the same options (see \[man]\~\[groff]).
-.PP2
+.PP
 .EW .2
 Called as-is, \[pdfmom] accepts all the same options as \[groff],
 and requires no additional flags.  PDF generation is performed by
@@ -505,10 +528,10 @@ If a \[-Tps] option is supplied, \[pdfmom] hands control over to
 \[pdfroff], and both \[groff] and \[pdfroff] options may given.
 The resulting PDF is produced from PostScript output fed into
 \[ghostscript].
-.COD "pdfmom -Tps [pdfroff opts [groff opts]] doc.mom > doc.pdf
+.COD "pdfmom \-Tps [pdfroff opts [groff opts]] doc.mom > doc.pdf
 For either invocation, it is not necessary to add \[-mom] or
 \[-mpdfmark], as these are implied.
-.PP2
+.PP
 If Encapsulated PostScript or plain PostScript images have been
 embedded in a document with
 .PDF_WWW_LINK http://www.schaffter.ca/mom/momdoc/images.html#pspic SUFFIX , \
@@ -516,6 +539,7 @@ embedded in a document with
 the \[-Tps] option must be used.  In most other cases, \[pdfmom]
 with no \[-T] flag is preferable.
 .HEADING 2 NAMED papersize "Setting papersize within a source file"
+.PP
 A significant convenience afforded by using \[pdfmom] (or \[groff]
 with the \[-Tpdf] flag) is that papersizes or page dimensions set
 within mom source files (see
@@ -529,7 +553,7 @@ unequal-sized pages.
 .PP
 Several features described in this manual are not available when
 using \[pdfmom] with the \[-Tps] option, or when using \[pdfroff], or
-\[groff]\~\[-Tps]\~\[-mpdfmark].
+\[groff]\~\[-Tps]\~\[-mpdfmark]:
 .SP .25v
 .QUAD LEFT
 .HYPHENATION off
@@ -553,7 +577,7 @@ only accepts colour definitions in decimal notation.
 .LIST OFF
 .IQ
 .HEADING 1 \
-"Comparison of -Tps\*[FU4]/\*[FU2]-mpdfmark with -Tpdf\*[FU4]/\*[FU2]-mom
+"Comparison of \-Tps\*[FU4]/\*[FU2]\-mpdfmark with \-Tpdf\*[FU4]/\*[FU2]\-mom
 .SP .25v
 .IB
 \[-Tps]\*[FU4]/\*[FU2]\[-mpdfmark]
@@ -583,15 +607,14 @@ is not compatible with
 .PDF_WWW_LINK \
   http://www.schaffter.ca/mom/momdoc/docprocessing.html#printstyle \
   "PRINTSTYLE TYPEWRITE"
-underlining (eg of italics)
+underlining (e.g., of italics)
 .ITEM
 generally produces larger files; these can be reduced by piping
 the output through \[ps2pdf]\*[B]
-.RLD .5v
 .FLOAT
 .QUAD LEFT
 .BR_AT_LINE_KERN
-.IQ
+.IL -2P
 .BOX-NOTE (\n[.l]u-6P) 3P
 .EW .3
 \*[BD]Note:\*[PREV] Owing to a known bug, PDF files piped
@@ -599,10 +622,13 @@ through \[ps2pdf] lose some of
 .EW 0
 their metadata, notably the window title set with
 \*[cod]PDF_TITLE\*[codx].
+.SP .75
 .FLOAT off
 .ITEM
-is newer code with less testing\c
-.EL
+is newer code with less testing
 .LIST OFF
-.IQ CLEAR
 .TOC
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
index 79ec75c4377d6943e9ad8ae870ddc3f3ce95abdd..340e2c82593654dbe77a210a72c76a9aed81fdf6 100644 (file)
@@ -1,4 +1,4 @@
-" Copyright (C) 2012-201 Free Software Foundation, Inc.
+" Copyright (C) 2012-2018 Free Software Foundation, Inc.
 "
 " Copying and distribution of this file, with or without modification,
 " are permitted in any medium without royalty provided the copyright
diff --git a/contrib/mom/examples/mon_premier_doc.mom b/contrib/mom/examples/mon_premier_doc.mom
new file mode 100644 (file)
index 0000000..ffb1b19
--- /dev/null
@@ -0,0 +1,140 @@
+.\" -*- mode: text; coding: utf-8; -*-
+\#
+\# Copyright (C) 2015-2018 Free Software Foundation, Inc.
+\#
+\# Copying and distribution of this file, with or without modification,
+\# are permitted in any medium without royalty provided the copyright
+\# notice and this notice are preserved.
+\#
+\# A very simple document with basic elements: headings, paragraphs,
+\# lists, table of contents and clickable links.
+\# 
+.TITLE "Mon Premier Document"
+.AUTHOR "Cicéron"
+.
+.DOCTYPE    DEFAULT
+.PRINTSTYLE TYPESET
+.
+.PAPER      A4
+.DOC_COVERTITLE "Mon Premier Document"
+.DOC_COVER DOC_COVERTITLE AUTHOR
+.COVER TITLE
+.ATTRIBUTE_STRING "par"
+.TOC_HEADER_STRING "Table des matières"
+.AUTO_RELOCATE_TOC
+.HEADING_STYLE 1 NUMBER
+.HEADING_STYLE 2 NUMBER
+.NO_SHIM
+.START
+\#
+.HEADING 1 "Les différentes versions"
+.PP
+Voir également le chapitre sur 
+.PDF_LINK evolution "les évolutions"
+possibles.
+.HEADING 2 "La version originale"
+.PP
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+Maecenas adipiscing ante non diam sodales hendrerit.
+.PP
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+Maecenas adipiscing ante non diam sodales hendrerit.
+.PP
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+\#
+.HEADING 2 "La version moderne"
+.PP
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+Maecenas adipiscing ante non diam sodales hendrerit.
+.PP
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+Maecenas adipiscing ante non diam sodales hendrerit.
+\#
+.HEADING 1 NAMED evolution "Les évolutions du Lorem"
+.PP
+Trois axes de progressions sont envisageables:
+.LIST
+.SHIFT_LIST 3m
+.ITEM
+Lorem ipsum dolor sit amet.
+.ITEM
+Consectetur adipiscing elit.
+.ITEM
+.PDF_TARGET sed_non_risus
+Sed non risus.
+.LIST OFF
+Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed non
+risus. Suspendisse lectus tortor, dignissim sit amet, adipiscing nec,
+ultricies sed, dolor. Cras elementum ultrices diam. Maecenas ligula
+massa, varius a, semper congue, euismod non, mi. Proin porttitor, orci
+nec nonummy molestie, enim est eleifend mi, non fermentum diam nisl
+sit amet erat. Duis semper. Duis arcu massa, scelerisque vitae,
+consequat in, pretium a, enim. Pellentesque congue. Ut in risus
+volutpat libero pharetra tempor. Cras vestibulum bibendum augue.
+Praesent egestas leo in pede. Praesent blandit odio eu enim.
+Pellentesque sed dui ut augue blandit sodales. Vestibulum ante ipsum
+primis in faucibus orci luctus et ultrices posuere cubilia Curae;
+Aliquam nibh. Mauris ac mauris sed pede pellentesque fermentum.
+Maecenas adipiscing ante non diam sodales hendrerit.
+\#
+.TOC_RV_SWITCH
+.TOC
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
index 35039734eefe91ad4a38cb752ed6ed1aff0dddee..5c25a2ab9e8e289b42ed46e48180ab166b371d6f 100644 (file)
@@ -1,4 +1,6 @@
-\# Copyright (C) 2004-2014  Free Software Foundation, Inc.
+.\" -*- mode: text; coding: utf-8; -*-
+\#
+\# Copyright (C) 2004-2018 Free Software Foundation, Inc.
 \#
 \# Copying and distribution of this file, with or without modification,
 \# are permitted in any medium without royalty provided the copyright
@@ -15,7 +17,7 @@
 \#
 \# Since the text throughout is greeked, and groff doesn't know how
 \# to hyphenate all that pseudo-latinate nonsense, I've inserted
-\# discretionary hyphens (\%) into a large number of the the words.
+\# discretionary hyphens (\%) into a large number of the words.
 \# Normally, this isn't necessary.
 \#
 \# The PRINTSTYLE is TYPESET.  If you'd like to see what mom does
 \# subheads and paraheads.  I've turned the feature on merely to
 \# demonstrate it.
 \#
-\# Reference macros (metadata)
+\# Information for the cover pages
+\#
+\# Title, subtitle and copyright for the document cover.
+\#
+.TITLE DOC_COVER \
+  "Sample mom documents"
+.SUBTITLE DOC_COVER \
+  "Three types of mom documents" \
+  "assembled and collated" \
+  "by mom's author"
+.COPYRIGHT DOC_COVER \
+  "2015 Peter Schaffter"
+\#
+\# What appears in the pdf viewer's window title
+\#
+.PDF_TITLE "Sample mom documents"
+\#
+\# Reference macros (metadata) for the first section of the collated
+\# document.
 \#
 .TITLE     "Lake Attica's Shores"
 .SUBTITLE  "A Romance Novel"
 .AUTHOR    "Rosemary Winspeare"
-.COPYRIGHT "2004 Alma Podborski"
-.PDF_TITLE "Sample mom documents"
+.COPYRIGHT "2015 Alma Podborski"
+\#
+\# What to put on the cover for the whole document (in mom-speak,
+\# the "doc cover").  The title, subtitle, and author are what were
+\# given to TITLE DOC_COVER, SUBTITLE DOC_COVER, and COPYRIGHT
+\# DOC_COVER.
 \#
-\# Additional information, for the cover
+.DOC_COVER TITLE SUBTITLE COPYRIGHT
 \#
-.DOC_COVERTITLE "Sample mom Documents"
-.MISC "Three types of mom documents" "assembled and collated by mom's author"
+\# What to put on the first document's title page (in mom-speak, the
+\# "cover").  In this case, we're using the metadata from TITLE,
+\# SUBTITLE, AUTHOR and COPYRIGHT, which will also be used to
+\# generate the docheader (minus the copyright).
+\#
+.COVER TITLE AUTHOR DOCTYPE COPYRIGHT
 \#
 \# Docstyle macros (templates)
 \#
 .DOCTYPE    NAMED "Outline"
-.PRINTSTYLE TYPESET   \" Or TYPEWRITE to preview "typewritten, double-spaced"
+.PRINTSTYLE TYPESET
 .PAPER      LETTER
 \#
-\# What to put on the cover and first title page
-\#
-.DOC_COVER DOC_COVERTITLE MISC 
-.COVER     TITLE AUTHOR DOCTYPE COPYRIGHT
-\#
-\# Style for nested heading levels
+\# Here we style the covers a bit.
+\#
+.DOC_COVER_TITLE_STYLE \
+  SIZE +8 \
+  SMALLCAPS \
+  UNDERLINE 1 3p 
+.DOC_COVER_SUBTITLE_STYLE \
+  FONT I \
+  SIZE +2 \
+  LEAD 18 \
+  SPACE .75v
+.DOC_COVER_COPYRIGHT_SIZE -.5
+\#
+.COVER_TITLE_SIZE +5
+.COVER_ATTRIBUTE_STYLE \
+  SIZE +2 \
+  SPACE .25v
+.COVER_AUTHOR_STYLE \
+  SIZE +2 \
+  LEAD 18
+.COVER_DOCTYPE_STYLE \
+  SIZE +4 \
+  UNDERLINE DOUBLE 1
+.COVER_COPYRIGHT_SIZE -.5
+\#
+\# Here we style the docheader a bit.
+\#
+.SUBTITLE_SPACE .25v
+.DOCTYPE_UNDERLINE 1 2p
+\#
+\# Styles for nested heading levels
 \#
 \# The first two instances of level-1 headings will be paragraph heads
 \# so we set the paragraph head style here, then change it when
 \# level-1 headings become main heads.
 \#
-.HEADING_STYLE 1 FONT BI SIZE +.25
-.HEADING_STYLE 2 FONT B SIZE +.5 BASELINE_ADJUST \n[.v]/8 \" ie 1/8 the leading
+.HEADING_STYLE 1 \
+  FONT BI \
+  SIZE +.75
+.HEADING_STYLE 2 \
+  FONT B \
+  SIZE +.5 \
+  BASELINE_ADJUST \n[.v]/8 \" ie 1/8 the leading
+\#
+.AUTO_RELOCATE_TOC \" Move table of contents to the top of the doc
+.SPACE_TOC_ITEMS   \" Prettify TOC spacing
 \#
-.AUTO_RELOCATE_TOC
-.SPACE_TOC_ITEMS
+\# Begin the document
 \#
 .START
+\#
 .PP
 .HEADING 1 PARAHEAD "A note on the setting"
 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
@@ -99,8 +160,15 @@ ut labore et do\%lo\%re magna ali\%quyam erat, sed diam voluptua.
 \#
 \# Change level-1 style and add numbering to levels 1 and 2
 \#
-.HEADING_STYLE 1 FONT B SIZE +1.5 CAPS UNDERSCORE .5 2p QUAD C \
-  NO_SPACE_AFTER BASELINE_ADJUST +0 NUMBER
+.HEADING_STYLE 1 \
+  FONT B \
+  SIZE +1.5 \
+  CAPS \
+  UNDERSCORE .5 2p \
+  QUAD C \
+  NO_SPACE_AFTER \
+  BASELINE_ADJUST +0 \
+  NUMBER
 .HEADING_STYLE 2 NUMBER
 \#
 .HEADING 1 "Part One"
@@ -168,32 +236,30 @@ gubergren, no sea takimata sanctus.
 .PP
 At vero eos et accusam et justo duo do\%lo\%res et ea rebum.  Stet clita
 kasd gubergren.  Sea takimata sanctus est lorem ipsum dolor
-sit amet.  Accusam et justo duo do\%lo\%res et ea rebum
-.SPREAD
+sit amet.  Accusam et justo duo do\%lo\%res et ea rebum.  Diam
+nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna.
 .RIGHT
 \*[BD]\&...end of sample outline\c
 .EL
 .COLLATE
 \#
-\# The .EL after the line "...end of sample outline" ensures that
-\# mom doesn't spring the page trap, which would deposit a header at
-\# the top of the next page.  COLLATE doesn't print a page header
-\# on the first page of a collated document, but if the page trap
-\# has already deposited one there, COLLATE can't undo it.
+\# The '\c /.EL' keeps mom from depositing a line break which,
+\# because "...end of sample outline" falls exactly on the last
+\# baseline of the page, would spring the page trap that sets a
+\# header at the top of the next page.  Since the next page is a
+\# title page, we don't want that.  Normally, this isn't required,
+\# although using it routinely before COLLATE is a good habit.
 \#
-\# Normally, this isn't necessary; here we require it because the
-\# line falls right at the bottom of the page.
-\#
-\# Please notice, too, the use of "\&" before "..."  Whenever an
-\# input line begins with either a period, an apostrophe or a space,
-\# you must precede it with \&, otherwise the line will disappear,
-\# even when, as here, there's an inline escape that starts the
-\# line.
+\# Notice, too, the use of "\&" before "..."  Whenever an input line
+\# begins with either a period, an apostrophe or a space, you must
+\# precede it with \&, otherwise the line will disappear, even when,
+\# as here, there's an inline escape beforehand.
 \#
 \# =====================================================================
 \#
-\# Next, two pages of a chapter, set in DRAFT style, showing the use
-\# of the EPIGRAPH BLOCK macro and the QUOTE macro.
+\# Next, a document composed of two pages of a chapter, set in DRAFT
+\# style, showing the use of the EPIGRAPH BLOCK macro and the QUOTE
+\# macro.
 \#
 \# You'll notice that the starting page number of this "draft" is 1 (in
 \# roman numerals).  COPYSTYLE DRAFT always numbers the first page of a
@@ -214,10 +280,23 @@ sit amet.  Accusam et justo duo do\%lo\%res et ea rebum
 .EPIGRAPH_FONT I       \" Epigraphs are normally set in roman
 .DRAFT_WITH_PAGENUMBER \" Draft/revision info usually goes in the header
 \#
-.COVER_MISC_FAMILY H
-.COVER_MISC_QUAD  RIGHT
+\# Style the title page
+\#
+.COVER_CHAPTER_SIZE +6
+.COVER_CHAPTER_TITLE_STYLE \
+  SIZE +5 \
+  SPACE .25v
+.COVER_MISC_SIZE -.25
+\#
+\# What goes on the title page
+\#
 .COVER CHAPTER+TITLE MISC
 \#
+\# Begin the document
+\#
+.CHAPTER_SIZE +3.5
+.CHAPTER_TITLE_SIZE +5
+.CHAPTER_TITLE_SPACE +3p
 .START
 .EPIGRAPH BLOCK
 Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam
@@ -225,7 +304,8 @@ nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna ali\%quyam erat,
 sed diam voluptua.
 .RIGHT
 \#
-\# If running PRINTSTYLE TYPEWRITE, add space before citation
+\# If running PRINTSTYLE TYPEWRITE, this adds space before
+\# attribution ("Joseph E. Blough")
 \#
 .if \n[#PRINT_STYLE]=1 .sp
 \#
@@ -317,24 +397,45 @@ do\%lo\%res et ea rebum.
 \# create a stylesheet, along with some of the control macros that
 \# can be used.
 \#
-.TITLE     "CONTROL EQUALS CHAOS"
+\# Style the title page
+\#
+.COVER_TITLE_CAPS
+.COVER_ATTRIBUTE_SPACE .5v
+.COVER_AUTHOR_STYLE \
+  SIZE    +1.5 \
+  LEAD 14 \
+  SPACE .25v
+.COVER_MISC_STYLE \
+  QUAD L \
+  SIZE +0
+.COVER_COPYRIGHT_SIZE +0
+\#
+\# What goes on the title page
+\#
+.COVER TITLE AUTHOR COPYRIGHT MISC
+\#
+.DOCTYPE    DEFAULT
+.COPYSTYLE  FINAL
+\#
+.TITLE     "Control Equals Chaos"
 .SUBTITLE  "\*[ALD1]The Psychological and Auditory \
 Impact of Serial vs. Aleatoric Music\*[RLD1]"
 .AUTHOR    "Joe Chang" "and" "Brad Hegel Connors"
-.COPYRIGHT "2004 J. Chang, B.H. Connors
-.MISC      "Submitted June 3, 2004" "\*[IT]Piano Quarterly\*[PREV]"
+.COPYRIGHT "2015 J. Chang, B.H. Connors
+.MISC      "Submitted June 3, 2015" "\*[IT]Piano Quarterly\*[PREV]"
 \#
-.DOCTYPE    DEFAULT
-.COPYSTYLE  FINAL
+\# Style the docheader
+\#
+.TITLE_CAPS
+.ATTRIBUTE_SPACE .33
+.AUTHOR_SIZE   +1
+.SUBTITLE_SIZE +2
 \#
 .L_MARGIN   6P
 .R_MARGIN   4P+6p
 .PT_SIZE    10
 .AUTOLEAD   1.5
 \#
-.AUTHOR_SIZE   +.5
-.SUBTITLE_SIZE +1
-\#
 .RECTO_VERSO
 .PAGENUM   1
 \#
@@ -350,27 +451,30 @@ Impact of Serial vs. Aleatoric Music\*[RLD1]"
 .if \n[#PRINT_STYLE]=2 \{\
 . PARA_INDENT  1P
 . QUOTE_INDENT 2
+. BLOCKQUOTE_INDENT 2
 .\}
 \#
-.HEADING_STYLE 1 QUAD L SIZE +0 NO_NUMBER NO_CAPS NO_UNDERSCORE \
-  NO_SPACE_AFTER BASELINE_ADJUST \n[.v]/8 \" ie 1/8 of the leading
+\# Style heading 1
 \#
-.BLOCKQUOTE_FAMILY   H
-.BLOCKQUOTE_SIZE     -2
-.BLOCKQUOTE_AUTOLEAD 2
+.HEADING_STYLE 1 \
+  QUAD L \
+  SIZE +0 \
+  NO_NUMBER \
+  NO_CAPS \
+  NO_UNDERSCORE \
+  NO_SPACE_AFTER \
+  BASELINE_ADJUST \n[.v]/8 \" ie 1/8 of the leading
 \#
-.COVERTITLE "\*[UP 3p]\E*[$TITLE]" \" Use $TITLE, but raise 3 points
+\# Style the blockquotes
 \#
-.COVER_LEAD           +2
-.COVER_AUTHOR_SIZE    +1.5
-.COVER_MISC_FAMILY    T
-.COVER_MISC_QUAD      L
-.COVER_MISC_SIZE      +0
-.COVER_COPYRIGHT_SIZE +0
+.BLOCKQUOTE_STYLE \
+  FAMILY   H \
+  SIZE     -2 \
+  AUTOLEAD 2
 \#
-.COVER COVERTITLE AUTHOR COPYRIGHT MISC
+.COLUMNS 2 1P+6p \" Set in two columns
 \#
-.COLUMNS 2 1P+6p
+\# Being the document
 \#
 .START
 .PP
@@ -579,7 +683,7 @@ sanctus est.
 Nonumy eirmod tempor invidunt, ut labore et do\%lo\%re magna ali\%quyam
 erat?  At vero eos et accusam et justo duo do\%lo\%res et ea.  Rebum stet
 clita kasd gubergren no sea takimata sanctus.  Est lorem ipsum dolor
-sit amet.  Sadipscing\c
+amet.  Sadipscing\c
 .FOOTNOTE
 Sadipscing diam nonumy eirmod tempor invidunt ut labore et do\%lo\%re magna
 ali\%quyam erat, sed diam voluptua.
@@ -603,3 +707,7 @@ takimata sanctus est.
 .FINIS
 .TOC_RV_SWITCH
 .TOC
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
diff --git a/contrib/mom/examples/slide-demo.mom b/contrib/mom/examples/slide-demo.mom
new file mode 100644 (file)
index 0000000..2dc4439
--- /dev/null
@@ -0,0 +1,396 @@
+.\" -*- mode: text; coding: utf-8; -*-
+.
+.\"----------------------------------------------------------------
+.\" Make first slide black.  Remove if printing to save ink.
+.po 0
+.ll 11i
+.DBX SOLID 0 \n[.l]u \n[.p]u
+.\"----------------------------------------------------------------
+.
+.\"----------------------------------------------------------------
+.\" Macro for code blocks
+.de CODE_BLOCK
+. ie \\n[.$] \{\
+.   CODE off
+.   QUOTE off
+.   CENTER_BLOCK off
+. \}
+. el \{\
+.   CENTER_BLOCK
+.   QUOTE
+.   CODE
+. \}
+..
+.\"----------------------------------------------------------------
+.
+.TITLE "Creating slide presentations with gropdf/mom"
+.PDF_TITLE "\*[$TITLE]"
+.
+.DOCTYPE SLIDES \
+  ASPECT 16:9 \
+  HEADER "Header left" "\*[$TITLE]" "Header right" \
+  FOOTER "" "" "\*S[+2]\*[SLIDE#]\*S[-2]" \
+  TRANSITION "Box 1 . O" \
+  PAUSE "Wipe 1"
+.
+.PARA_SPACE .75v
+.SS +3
+.HYPHENATION off
+.
+.NEWCOLOR darkred #aa0000
+.NEWCOLOR darkred1 #900000
+.NEWCOLOR blue1 #00007b
+.NEWCOLOR blue2 #00006f
+.NEWCOLOR code-grey GRAY 0.3
+.XCOLOR cyan4
+.XCOLOR green4
+.
+.HEADER_COLOR      darkred1
+.HEADER_RULE_COLOR blue1
+.FOOTER_RULE       off
+.
+.COVER_STYLE \
+  LEAD +8 \
+  COLOR white
+.HEADING_STYLE 1 \
+  COLOR blue2
+.CODE_STYLE \
+  FONT B \
+  SIZE 115 \
+  COLOR code-grey
+.QUOTE_STYLE \
+  QUAD LEFT
+.CONDENSE 90
+.
+.PDF_IMAGE_FRAME "" 1 blue1
+.
+.COVERTITLE \
+  "Creating slide presentations" \
+  "with" \
+  "gropdf and mom"
+.
+.COVER_START_POS 15P
+.COVER COVERTITLE
+.
+.STRING hand \*[darkred]\[rh]\*[black]
+.
+.START
+.
+.ADD_SPACE 9p
+.IB 8P
+.
+.HEADING 1 "PDF slides"
+.SP .5v
+.
+.PP
+PDF slides are a subset of mom's document processing macros
+formatted for presentation mode when viewed in a PDF reader.  In
+most respects, they behave identically to the default document type
+described in mom's html documentation\*[HANG .]
+.BR
+Differences in the formatting include\*[HANG :]
+.
+.PAUSE
+.LEFT
+.LIST
+.ITEM .2v
+the choice between two aspect ratios, 4:3 or 16:9
+.LIST USER \*[hand]
+.ITEM
+both fit on A4 or US letter paper sizes when printed
+.
+.PAUSE
+.LIST BACK
+.ITEM .2v
+type is set centered by default
+.LIST USER \*[hand]
+.ITEM
+this may be changed to left, right, or justified
+.
+.PAUSE
+.LIST BACK
+.ITEM .2v
+headers and/or footers must be explicitly instantiated
+.LIST USER \*[hand]
+.ITEM
+the left, centre, and right parts must be supplied
+by the user
+.
+.PAUSE
+.LIST BACK
+.ITEM .2v
+slide numbering (pagination) is disabled
+.LIST  USER \*[hand]
+.ITEM
+if slide numbering is desired, it must be put in the left,
+centre, or right part of a header or footer definition
+.QUIT_LISTS
+.
+.NEWSLIDE
+.
+.ADD_SPACE 9p
+.IB 2P
+.
+.DOC_QUAD CENTER
+.
+.HEADING 1 "Pauses and transitions"
+.SP .5v
+.
+.PP
+Slides made with mom take advantage of the pause and slide
+transition features provided in presentation mode by most
+contemporary PDF readers.
+.PAUSE
+.PP
+Pauses and transitions are dynamic and engaging, holding the
+viewer's attention while increasing the impact of the content.
+.PAUSE
+.PP
+With pauses, material on a slide can be revealed progressively
+with
+.BR
+a mouse click or by hitting
+.
+.LIST
+.ITEM .5v
+Next
+.ITEM 2p
+PgDown
+.ITEM 2p
+Spacebar
+.LIST off
+.
+.PAUSE
+.PP
+The manner in which new material is revealed and new slides
+are displayed can be tailored separately for effects like Fade,
+Dissolve, Wipe and others, and can be changed on the fly.
+.
+.NEWSLIDE
+.
+.PP
+Mom slides begin with the macro DOCTYPE SLIDES, where you choose
+the aspect ratio and transition effects, and set up headers and
+footers\*[HANG .]
+.PAUSE
+.PP
+You may find it convenient to provide a title for the slide
+presentation, as the top of the .mom file for these slides
+demonstrates\*[HANG :]
+.
+.SP -1v
+.CODE_BLOCK
+\*[COND]\&.TITLE "Creating slide presentations with gropdf/mom"
+\&.PDF_TITLE "\\*[$TITLE]"
+\&.\\"
+\&.DOCTYPE SLIDES \\
+ ASPECT 16:9 \\
+ HEADER "Header left" "\\*[$TITLE]" "Header right" \\
+ FOOTER "" "" "\\*S[+2]\\*[SLIDE#]\\*S[-2]" \\
+ TRANSITION "Box 1 . O" \\
+ PAUSE "Wipe 1"\*[CONDX]
+.CODE_BLOCK off
+.SP -.5v
+.
+.PAUSE
+.PP
+Afterwards, you may make any changes you like to the layout and
+style, then enter START.  Unlike other mom documents, PRINTSTYLE is
+not required\*[HANG .]
+.
+.NEWSLIDE
+.
+.ADD_SPACE 9p
+.IB -1P+6p
+.
+.HEADING 1 \
+  "The \s[-2]PAUSE\s[0] and \s[-2]NEWSLIDE\s[0] macros"
+.SP .5v
+.
+.PP
+Whenever you want a pause before revealing the next material on a
+slide, enter the macro PAUSE on a line by itself.  If you want a
+reveal effect that's different from the current one, you may pass
+PAUSE the parameters of the new effect\*[HANG :]
+.
+.SP -1v
+.PAUSE
+.
+.CODE_BLOCK
+\&.PAUSE "Dissolve .4"
+.CODE_BLOCK off
+.
+.PAUSE "Dissolve .4"
+Notice that this material dissolves in, whereas before, new material
+appeared from left to right.  \*[BU6]The new effect stays in force
+until you change it again\*[HANG .]
+.PAUSE "Wipe 1"
+.PP
+New slides are introduced with NEWSLIDE. \*[bu6]Transition effects
+and parameters may be given to NEWSLIDE\*[HANG :]
+.SP -1v
+.
+.CODE_BLOCK
+\&.NEWSLIDE "Blinds .5"
+.CODE_BLOCK off
+.
+.PAUSE
+The next slide in this presentation will appear with the Blinds
+effect\*[HANG .]
+.BR
+Consult man gropdf\c
+\*[FU2]\*[UP 1p](\*[DOWN 1p]\*[BU2]1\*[UP 1p]\*[BU1])\*[DOWN 1p]
+for all the pause/transition effects and their
+parameters.\*[BU6]\*[UP 2p]\s[-2]*\s[0]
+.SP 4p
+.FT I
+.PT_SIZE -2
+*Note that not all PDF \*[BU6]viewers support every effect\*[HANG .]
+.FT R
+.PT_SIZE +2
+.
+.NEWSLIDE "Blinds .5"
+.
+.ADD_SPACE 9p
+.
+.HEADING 1 "Macros and preprocessors"
+.SP .5v
+.
+.PP
+Slides can make full use of all mom's document processing and
+typesetting macros, including preprocessors and image insertion\*[HANG .]
+.
+.IBX CLEAR
+.LS -4
+.
+.PAD "\
+\*[FWD 4P+6p]\*[ST1]#\*[ST1X]\
+\*[FWD 1P]\*[ST2]#\*[ST2X]\
+\*[FWD 3P+6p]\*[ST3]#\*[ST3X]\
+\*[FWD 3P]\*[ST4]#\*[ST4X]\*[FWD 2P]"
+.
+.ST 1 L
+.ST 2 L
+.ST 3 L
+.ST 4 L
+.
+.PAUSE "Fade .5"
+.
+.TAB 1
+.PT_SIZE -1.5
+\*[BD]\*[blue2]\*[DOWN 6p]tbl
+.mk
+.PT_SIZE -1
+.COLOR blue2
+.TS H BOXED
+tab(^) allbox;
+c c
+n n.
+\*[darkred]\s[-.5]\*[DOWN .5p]Year^Mean Temp.\s[0]\*[blue2]
+_
+.TH
+\*[cyan4]\fB2015^28.3\*[blue2]
+\*[cyan4]1998^28.3\*[blue2]
+\*[cyan4]1997^28.3\*[blue2]
+\*[cyan4]2010^28.1\*[blue2]
+\*[cyan4]2002^28.1\*[blue2]
+\*[cyan4]2005^28.0\*[blue2]
+\*[cyan4]2014^27.9\*[blue2]
+\*[cyan4]2009^27.9\*[blue2]
+.TE
+.
+.rt
+.PAUSE
+.
+.TN
+.PT_SIZE +1
+\*[FWD 10p]\*[DOWN 6p]pic
+.COLOR green4
+.SP 3p
+.PS 2
+A: ellipse wid 0.5 ht 0.5
+  arrow color "green4" up 0.2 from A.n
+  arrow color "green4" up 0.2 right 0.2 from A.ne
+  arrow color "green4" right 0.2 from A.e
+  arrow color "green4" down 0.2 right 0.2 from A.se
+  arrow color "green4" down 0.2 from A.s
+  arrow color "green4" down 0.2 left 0.2 from A.sw
+  arrow color "green4" left 0.2 from A.w
+  arrow color "green4" up 0.2 left 0.2 from A.nw
+.PE
+.
+.rt
+.PAUSE
+.
+.TN
+.COLOR blue2
+\*[FWD 1p]\*[DOWN 6p]eqn
+.FAMILY T
+.PT_SIZE +3
+.LS
+.COLOR code-grey
+.SP 4P
+.EQ
+f sub X (x) ^=^ left {
+  rpile { 0 above 2x above 0 }
+  ~~lpile { x < 0 above 0 <= x <= 1 above x > 1 }
+.EN
+.
+.rt
+.PAUSE
+.
+.TN
+.FAMILY H
+.PT_SIZE -3
+.COLOR blue2
+\*[DOWN 6p]pdf image\*[black]\*[PREV]
+.SP 2P+6p
+.PDF_IMAGE -L penguin.pdf 81p 96p FRAME
+.TQ
+.
+.NEWSLIDE "Box 1 . O"
+.ADD_SPACE 9p
+.IB 10P
+.PT_SIZE +1.5
+.
+.HEADING 1 "Printing handouts"
+.SP .5v
+.
+.CODE_STYLE \
+  COLOR BLACK \
+  SIZE 120
+.PP
+Because slides contain pauses, they need a little help on their
+way to the printer or they stop printing at the first pause\*[HANG .]
+.PAUSE "Wipe 1"
+.PP
+Setting GROPDF_NOSLIDE=1 before invoking 
+\[oq]\*[FU4]\*[CODE]\*[COND]pdfmom\*[CONDX]\*[CODE off]\*[FU4]\[cq]
+or
+\[oq]\*[FU2]\*[CODE]\*[COND]groff\~-Tpdf\*[CONDX]\*[CODE off]\*[FU6]\[cq]
+disables the pauses\*[HANG :]
+.
+.SP -1v
+.
+.CODE_STYLE \
+  COLOR code-grey \
+  SIZE 110
+.CODE_BLOCK
+\*[COND]GROPDF_NOSLIDE=1 pdfmom <options> slide-file.mom\*[CONDX]
+.CODE_BLOCK off
+.
+.PAUSE
+The output may be piped directly to a printer or saved to a file\*[HANG .]
+.PAUSE
+.PP
+See mom's html documentation and the gropdf\c
+\*[FU2]\*[UP 1p](\*[DOWN 1p]\*[BU2]1\*[UP 1p]\*[BU1])\*[DOWN 1p]
+manpage for complete information concerning slide usage\*[HANG .]
+.
+.SP 9p
+.CENTER_BLOCK
+.nr dcl-ind -1 1
+.while \n[dcl-ind]<4 \{\
+. DCL SOLID \n+[dcl-ind]P 9p 9p blue2
+.\}
+.CENTER_BLOCK off
diff --git a/contrib/mom/examples/test-mom.sh.in b/contrib/mom/examples/test-mom.sh.in
new file mode 100644 (file)
index 0000000..0841b37
--- /dev/null
@@ -0,0 +1,79 @@
+#!/bin/sh
+#
+# Copyright (C) 2018- Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+# 
+# groff 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 3 of the License, or
+# (at your option) any later version.
+# 
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+
+builddir="@abs_top_builddir@"
+have_urw_fonts="@groff_have_urw_fonts@"
+examplesdir="$builddir/contrib/mom/examples"
+ret=0
+list="
+  letter.pdf
+  mom-pdf.pdf
+  mon_premier_doc.pdf
+  sample_docs.pdf
+  slide-demo.pdf
+  typesetting.pdf
+  "
+
+if test "$have_urw_fonts" != "yes"; then
+    echo "No URW fonts, mom examples cannot be correctly generated"
+    exit 77
+fi
+
+# $1: pdf file
+# $2: expected number of pages
+check_number_pages()
+{
+    echo "Checking number of pages of $1"
+    n_pages=`pdfinfo $1  | grep Pages | awk '{ print $2}'`
+    if test "$n_pages" != "$2"; then
+       echo "  Error: expected $2 pages, found $n_pages pages"
+       ret=255
+    fi
+}
+
+# $1 pdf file
+check_has_images()
+{
+    echo "Checking if $1 has images"
+    n_lines=`pdfimages -list $1 | wc -l `
+    if test $n_lines -le 2; then
+        echo " no images found"
+        ret=255
+    fi
+}
+
+for k in $list; do
+    if ! test -f $examplesdir/$k; then
+        echo "File $k not found"
+        exit 255
+    fi
+done
+
+check_number_pages "$examplesdir/letter.pdf" 1
+check_number_pages "$examplesdir/mom-pdf.pdf" 8
+check_number_pages "$examplesdir/mon_premier_doc.pdf" 5
+check_number_pages "$examplesdir/sample_docs.pdf" 12
+check_number_pages "$examplesdir/slide-demo.pdf" 27
+check_number_pages "$examplesdir/typesetting.pdf" 3
+
+check_has_images "$examplesdir/typesetting.pdf"
+check_has_images "$examplesdir/slide-demo.pdf"
+
+exit $ret
index 2c497bd10a5b45cc7e2f33877fae81be621ade33..a35b237ad887fbd9bc7d402cfbd7a48e66cbd1af 100644 (file)
@@ -1,6 +1,6 @@
-.\" -*- mode: troff; coding: utf-8; -*-
-.
-\# Copyright (C) 2004-2014  Free Software Foundation, Inc.
+.\" -*- mode: text; coding: utf-8; -*-
+\#
+\# Copyright 2004-2018 Free Software Foundation, Inc.
 \#
 \# Copying and distribution of this file, with or without modification,
 \# are permitted in any medium without royalty provided the copyright
@@ -37,7 +37,7 @@
 .SP |1i-1v     \" Advance 1 inch from top of paper to first baseline
 Example 1\*[BU 2]:
 .ALD .25v      \" Advance an extra 1/4 linespace
-.UNDERSCORE 3.75p "T\*[BU 4]asting notes using padding, string tabs \
+.UNDERSCORE 3.5p "T\*[BU 4]asting notes using padding, string tabs \
 and multi-columns"
 \#
 .SP            \" Add an extra line space
@@ -194,7 +194,7 @@ itself around the word "Massaging".  We circumvent this by using the
 groff inline escapes \[lq] and \[rq] (leftquote and rightquote).
 .COMMENT OFF
 \#
-.UNDERSCORE 3.75p "\[lq]Massaging\[rq] \*[BCK 1p]a passage of rag right text"
+.UNDERSCORE 3.5p "\[lq]Massaging\[rq] \*[BCK 1p]a passage of rag right text"
 .SP            \" Add an extra linespace
 \#
 .PT_SIZE 12.5
@@ -298,19 +298,21 @@ done the wrong.
 \#
 Example 3:
 .ALD .25v
-.UNDERSCORE 3.75p "A \*[BU2]recipe for enumerated lists using indents"
-.SP .75v        \" Add an extra half line space
-.FAM      T    \" New Century Schoolbook family
+.UNDERSCORE 3.5p "A \*[BU2]recipe for enumerated lists using indents"
+.SP .5v         \" Add an extra half line space
+.ie '\*[.T]'ps' \
+.FAM      N     \" New Century Schoolbook family
+.el .if '\*[.T]'pdf' \
+.FAM      U-N 
 .FT       R
-.PT_SIZE 12
-.LS      14
+.PT_SIZE 11
+.LS      13
 .HY            \" Turn hyphenation back on
 .JUSTIFY       \" Justify text
 This example demonstrates the use of left and hanging indents for
 simple enumerated lists.  Nested lists are possible, as the example
 shows; however, the more complex the nesting, the wiser it becomes
 to use (string) tabs, as seen in Example 4.
-.RLD .25v                  \" Move upwards 1/2 linespace
 .DBX .5 0 \n[.l]u 2P+9p   \" Draw box; \n[.l]u means "the current line length"
 .IB 6p                    \" Indent from both left and right margins
 .ALD 14p
@@ -318,7 +320,7 @@ to use (string) tabs, as seen in Example 4.
 enumerated lists automatically.  These examples merely show hanging
 indents and string tabs in use.
 \#
-.SP .25v
+.ALD 9p
 .JUSTIFY       \" Justify text
 .IL \w'\0.\0'  \" Establish a left indent equal to 2 figure spaces plus a period.
 .HI \w'\0.\0'  \" Establish a hanging indent equal to the left indent.
@@ -391,12 +393,15 @@ go back to the top level (numbered) list...
 \#
 Example 4:
 .ALD .25v
-.UNDERSCORE 3.75p "A \*[BU 2]recipe for nested lists using string tabs"
-.SP .75v
-.FAM T
+.UNDERSCORE 3.5p "A \*[BU 2]recipe for nested lists using string tabs"
+.SP .5v
+.ie '\*[.T]'ps' \
+.FAM N
+.el .if '\*[.T]'pdf' \
+.FAM U-N
 .FT  R
-.PT_SIZE 12
-.LS  14
+.PT_SIZE 11
+.LS  13
 .JUSTIFY
 Although setting up string tabs is a bit more complex than setting
 up indents, it's \*[BU 3]well worth the effort, especially for
@@ -500,14 +505,18 @@ structures easier than with the indent macros.
 .FT      B
 .PT_SIZE 12
 .LS      14
+.RLD 2p
 .LEFT
 \#
 Example 5:
 .ALD .25v
-.UNDERSCORE 3.75p "Word spacing"
+.UNDERSCORE 3.5p "Word spacing"
 .ALD 8p
-.FAM T
-.PT_SIZE 12
+.ie '\*[.T]'ps' \
+.FAM P          \" Palatino family
+.el .if '\*[.T]'pdf' \
+.FAM U-P
+.PT_SIZE 11
 .LS  14
 \#
 \# The "label" lines for the following are set in Helvetica
@@ -524,13 +533,13 @@ N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the
 .FT R
 .WS +2
 N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the party.
-.WS  +0
+.WS  DEFAULT
 .ALD 4p
 \f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU3]+\*[DOWN 1p]4\*S[+1]\*[PREV]
 .FT R
 .WS +4
 N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the party.
-.WS  +0
+.WS  DEFAULT
 .ALD 4p
 \f[HB]\*S[-1]Word spacing adjusted by \*[UP 1p]\*[BU3]+\*[DOWN 1p]6\*S[+1]\*[PREV]
 .FT R
@@ -547,11 +556,14 @@ N\*[BU1]o\*[BU1]w \*[BU1]is the time for all good men to come to the aid of the
 .LEFT
 Example 6:
 .ALD .25v
-.UNDERSCORE 3.75p "Line kerning"
+.UNDERSCORE 3.5p "Line kerning"
 .ALD 8p
-.FAM     T     \" Palatino family
+.ie '\*[.T]'ps' \
+.FAM P          \" Palatino family
+.el .if '\*[.T]'pdf' \
+.FAM     U-P
 .FT      R
-.PT_SIZE 12
+.PT_SIZE 11
 .LS      15
 \#
 \# Here, we set up some tabs so the examples can go into facing columns.
@@ -580,7 +592,6 @@ Example 6:
 \f[HB]\*S[-1]Line "tightened" \[en] .RW .3\*S[+1]\*[PREV]
 .RW .3
 "But this is \*[IT]important!\/"\*[PREV]she exclaimed.
-.RW 0
 .MCR
 .TB 2
 \f[HB]\*S[-1]Unkerned line\*S[+1]\*[PREV]
@@ -598,6 +609,7 @@ Example 6:
 .EW .3
 "But this is \*[IT]important!\/"\*[PREV]she exclaimed.
 .MCX 1.5v
+.EW 0
 \#
 .FAM     T
 .FT      B
@@ -607,7 +619,7 @@ Example 6:
 \#
 Example 7:
 .ALD .25v
-.UNDERSCORE 3.75p "Cutaround using left\*[FU 2]/right indents, \
+.UNDERSCORE 3.5p "Cutaround using left\*[FU 2]/right indents, \
 multi columns and a dropcap"
 .SP
 \#
@@ -689,3 +701,7 @@ Dolores et ea rebum stet clita kasd gubergren, no sea takimata
 sanctus.  Sadipscing elitr sed diam, nonumy eirmod tempor, invidunt
 ut labore et dolore magna aliquyam erat.  Sed diam voluptua, at vero
 eos et accusam et justo duo dolores et ea rebum.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
diff --git a/contrib/mom/groff_mom.7.man b/contrib/mom/groff_mom.7.man
new file mode 100644 (file)
index 0000000..6cb2bcd
--- /dev/null
@@ -0,0 +1,3401 @@
+.TH GROFF_MOM @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_mom \- groff \(lqmom\(rq macros; \(lqmom\(rq is a \(lqroff\(rq \
+language, part of \(lqgroff\(rq
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_mom_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2002-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of mom, which is part of groff, the GNU roff
+.\" type-setting system.
+.\"
+.\" 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 3 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, see
+.\" <http://www.gnu.org/licenses/>.
+.
+.
+.\" ====================================================================
+.\" Setup
+.\" ====================================================================
+.
+.ds Ellipsis \&.\|.\|.\&\"
+.
+.hw line-space
+.
+.
+.\" ====================================================================
+.\" .FONT (<font name> <text> [<font name> <text> ...])
+.\"
+.\" Print in different fonts: R, I, B, CR, CI, CB
+.\"
+.de FONT
+.  if (\\n[.$] = 0) \{\
+.      nop \&\f[P]\&
+.      return
+.  \}
+.  ds result \&
+.  while (\\n[.$] >= 2) \{\
+.      as result \,\f[\\$1]\\$2
+.      if !"\\$1"P" .as result \f[P]\""
+.      shift 2
+.  \}
+.  if (\\n[.$] = 1) .as result \,\f[\\$1]
+.  nh
+.  nop \\*[result]\&
+.  hy
+..
+.
+.
+.\" ====================================================================
+.SH "SYNOPSIS"
+.\" ====================================================================
+.
+.SY pdfmom
+.RB [ \-Tps
+.RI [ pdfroff-option
+\*[Ellipsis]]]
+.RI [ groff-option
+\*[Ellipsis]]
+.I file
+\*[Ellipsis]
+.YS
+.
+.SY groff
+.B \-mom
+.RI [ option
+\*[Ellipsis]]
+.I file
+\*[Ellipsis]
+.SY groff
+.B "\-m mom"
+.RI [ option
+\*[Ellipsis]]
+.I file
+\*[Ellipsis]
+.YS
+.
+.
+.\" ====================================================================
+.SH CALLING MOM
+.\" ====================================================================
+.
+.B mom
+is a macro set for
+.BR groff ,
+designed primarily to format documents for
+.I PDF
+and
+.I PostScript
+output.
+.
+.
+.P
+.B mom
+provides two categories of macros: macros for typesetting, and
+macros for document processing.
+.
+The typesetting macros provide access to groff's typesetting
+capabilities in ways that are simpler to master than groff's
+primitives.
+.
+The document processing macros provide highly customizable markup
+tags that allow the user to design and output professional-looking
+documents with a minimum of typesetting intervention.
+.
+.
+.P
+Files processed with
+.BR pdfmom (@MAN1EXT@)
+with or without the
+.RI \-T ps
+option, produce
+.I PDF
+documents.
+.
+The documents include a
+.I PDF
+outline that appears in the \[oq]Contents\[cq] panel of document
+viewers, and may contain clickable internal and external links.
+.
+.
+.P
+When
+.RI \-T ps
+is absent,
+.B groff's
+native
+.I PDF
+driver,
+.BR gropdf ,
+is used to generate the output.
+.
+When given, the output is still
+.IR PDF ,
+but processing is passed over to
+.BR pdfroff ,
+which uses
+.B groff's
+PostScript driver,
+.BR grops \&.
+Not all
+.I PDF
+features are available when
+.RI \-T ps
+is given; its primary use is to allow processing of files with
+embedded
+.I PostScript
+images.
+.
+.
+.P
+Files processed with
+.B groff \-mom
+(or
+.BI "\-m " mom\/\c
+) produce
+.I PostScript
+output by default.
+.
+.
+.P
+.B mom
+comes with her own very complete documentation in
+.I HTML
+format.
+.
+A separate
+.IR "PDF manual" ,
+.I Producing PDFs
+with groff and
+.BR mom ,
+covers full
+.B mom
+or
+.I PDF
+usage.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @MACRODIR@/\:om.tmac
+\[en] the main macro file
+.TQ
+.I @MACRODIR@/\:mom.tmac
+\[en] a wrapper file that calls om.tmac directly.
+.
+.TP
+.I @HTMLDOCDIR@/\:mom/\:toc.html
+\[en] entry point to the HTML documentation
+.
+.TP
+.I @PDFDOCDIR@/\:mom\-pdf.pdf
+\[en] the PDF manual,
+.I Producing PDFs with groff and mom
+.
+.TP
+.IR @EXAMPLEDIR@/\:mom/\: * .mom
+\[en] example files using mom
+.
+.
+.\" ====================================================================
+.SH DOCUMENTATION IN ALPHABETICAL ORDER
+.\" ====================================================================
+.
+.
+This part of the man page contains information just as in groff(7),
+.I mom macros
+and
+.I mom escape sequences
+in alphabetical order.
+.
+.
+.P
+The logical order of
+.I mom macros
+and
+.I mom escape sequences
+is very well documented in
+.
+.TP
+.I @HTMLDOCDIR@/\:mom/\:toc.html
+\[en] entry point to the HTML documentation
+.
+.
+.P
+That document is quite good for beginners, but other users should be
+happy to have some documentation in reference style.
+.
+.
+.P
+So we restrict this part to the alphabetical order of macros and
+escape sequences.
+.
+But, so far, we took all documentation details from the
+.I toc.html
+file, just in a more useful alphabetical order.
+.
+.
+So this part of the man page is nothing new, but only a logical
+arrangement.
+.
+.
+.\" ====================================================================
+.SH "QUICK REFERENCE"
+.\" ====================================================================
+.
+.\" ====================================================================
+.SS "Quick Reference of Inline Escape Sequences in alphabetical Order"
+.\" ====================================================================
+.
+.TP
+.FONT B \[rs]*[ I <colorname> B ]
+begin using an initialized colour inline
+.
+.
+.TP
+.FONT B \[rs]*[BCK I " n" B ]
+move backwards in a line
+.
+.
+.TP
+.B \[rs]*[BOLDER]
+invoke pseudo bold inline (related to macro
+.BR .SETBOLDER )
+.
+.
+.TP
+.B \[rs]*[BOLDERX]
+off pseudo bold inline (related to macro
+.BR .SETBOLDER )
+.
+.
+.TP
+.FONT B \[rs]*[BU I " n" B ]
+move characters pairs closer together inline (related to macro
+.BR \%.KERN )
+.
+.
+.TP
+.B \[rs]*[COND]
+invoke pseudo condensing inline (related to macro
+.BR \%.CONDENSE )
+.
+.
+.TP
+.B \[rs]*[CONDX]
+off pseudo condensing inline (related to macro
+.BR \%.CONDENSE )
+.
+.
+.TP
+.FONT B \[rs]*[CONDSUP] R \*[Ellipsis] B \[rs]*[CONDSUPX]
+pseudo-condensed superscript
+.
+.
+.TP
+.FONT B \[rs]*[DOWN I " n" B ]
+temporarily move downwards in a line
+.
+.
+.TP
+.B \[rs]*[EN\-MARK]
+mark initial line of a range of line numbers (for use with line
+numbered endnotes)
+.
+.
+.TP
+.B \[rs]*[EXT]
+invoke pseudo extending inline (related to macro
+.BR \%.EXTEND )
+.
+.
+.TP
+.B \[rs]*[EXTX]
+off pseudo condensing inline (related to macro
+.BR \%.EXTEND )
+.
+.
+.TP
+.FONT B \[rs]*[EXTSUP] R \*[Ellipsis] B \[rs]*[EXTSUPX]
+pseudo extended superscript
+.
+.
+.TP
+.FONT B \[rs]*[FU I " n" B ]
+move characters pairs further apart inline (related to macro
+.BR \%.KERN )
+.
+.
+.TP
+.FONT B \[rs]*[FWD I " n" B ]
+move forward in a line
+.
+.
+.TP
+.B \[rs]*[LEADER]
+insert leaders at the end of a line
+.
+.
+.TP
+.B \[rs]*[RULE]
+draw a full measure rule
+.
+.
+.TP
+.FONT B \[rs]*[SIZE I " n" B ]
+change the point size inline (related to macro
+.BR \%.PT_SIZE )
+.
+.
+.TP
+.B \[rs]*[SLANT]
+invoke pseudo italic inline (related to macro
+.BR \%.SETSLANT )
+.
+.
+.TP
+.B \[rs]*[SLANTX]
+off pseudo italic inline (related to macro
+.BR \%.SETSLANT )
+.
+.
+.TP
+.FONT B \[rs]*[ST I <n> B ] R \*[Ellipsis] B \[rs]*[ST I <n> B X]
+string tabs (mark tab positions inline)
+.
+.
+.TP
+.FONT B \[rs]*[SUP] R \*[Ellipsis] B \[rs]*[SUPX]
+superscript
+.
+.
+.TP
+.B \[rs]*[TB+]
+inline escape for
+.B .TN
+.RI ( "Tab Next" )
+.
+.
+.TP
+.FONT B \[rs]*[UL] R \*[Ellipsis] B \[rs]*[ULX]
+invoke underlining inline (fixed width fonts only)
+.
+.
+.TP
+.FONT B \[rs]*[UP I " n" B ]
+temporarily move upwards in a line
+.
+.
+.\" ====================================================================
+.SS "Quick Reference of Macros in alphabetical Order"
+.\" ====================================================================
+.
+.TP
+.B .AUTOLEAD
+set the linespacing relative to the point size
+.
+.
+.TP
+.B .B_MARGIN
+set a bottom margin
+.
+.
+.TP
+.B .BR
+break a justified line
+.
+.
+.TP
+.B .CENTER
+set line-by-line quad centre
+.
+.
+.TP
+.B .CONDENSE
+set the amount to pseudo condense
+.
+.
+.TP
+.B .EL
+break a line without advancing on the page
+.
+.
+.TP
+.B .EXTEND
+set the amount to pseudo extend
+.
+.
+.TP
+.B .FALLBACK_FONT
+establish a fallback font (for missing fonts)
+.
+.
+.TP
+.B .FAM
+alias to
+.B .FAMILY
+.
+.
+.TP
+.BI ".FAMILY " <family>
+set the
+.I family type
+.
+.
+.TP
+.B .FT
+set the font style (roman, italic, etc.)
+.
+.
+.TP
+.BI ".HI [" " <measure> " ]
+hanging indent
+.
+.
+.TP
+.B .HY
+automatic hyphenation on/off
+.
+.
+.TP
+.B .HY_SET
+set automatic hyphenation parameters
+.
+.
+.TP
+.BI ".IB [" " <left measure> <right measure> " ]
+indent both
+.
+.
+.TP
+.B .IBX [ CLEAR ]
+exit indent both
+.
+.
+.TP
+.BI ".IL [" " <measure> " ]
+indent left
+.
+.
+.TP
+.B .ILX [ CLEAR ]
+exit indent left
+.
+.
+.TP
+.B .IQ [ CLEAR ]
+quit any/all indents
+.
+.
+.TP
+.BI ".IR [" " <measure> " ]
+indent right
+.
+.
+.TP
+.B .IRX [ CLEAR ]
+exit indent right
+.
+.
+.TP
+.B .JUSTIFY
+justify text to both margins
+.
+.
+.TP
+.B .KERN
+automatic character pair kerning on/off
+.
+.
+.TP
+.B .L_MARGIN
+set a left margin (page offset)
+.
+.
+.TP
+.B .LEFT
+set line-by-line quad left
+.
+.
+.TP
+.B .LL
+set a line length
+.
+.
+.TP
+.B .LS
+set a linespacing (leading)
+.
+.
+.TP
+.B .PAGE
+set explicit page dimensions and margins
+.
+.
+.TP
+.B .PAGEWIDTH
+set a custom page width
+.
+.
+.TP
+.B .PAGELENGTH
+set a custom page length
+.
+.
+.TP
+.BI .PAPER " <paper_type>"
+set common paper sizes (letter, A4, etc)
+.
+.
+.TP
+.B .PT_SIZE
+set the point size
+.
+.
+.TP
+.B .QUAD
+"justify" text left, centre, or right
+.
+.
+.TP
+.B .R_MARGIN
+set a right margin
+.
+.
+.TP
+.B .RIGHT
+set line-by-line quad right
+.
+.
+.TP
+.B .SETBOLDER
+set the amount of emboldening
+.
+.
+.TP
+.B .SETSLANT
+set the degree of slant
+.
+.
+.TP
+.B .SPREAD
+force justify a line
+.
+.
+.TP
+.B .SS
+set the sentence space size
+.
+.
+.TP
+.B .T_MARGIN
+set a top margin
+.
+.
+.TP
+.BI ".TI [" " <measure> " ]
+temporary left indent
+.
+.
+.TP
+.B .WS
+set the minimum word space size
+.
+.
+.\" ====================================================================
+.SH "DOCUMENTATION OF DETAILS"
+.\" ====================================================================
+.
+.\" ====================================================================
+.SS "Details of Inline Escape Sequences in alphabetical Order"
+.\" ====================================================================
+.
+.TP
+.FONT B \[rs]*[ I <colorname> B ]
+begin using an initialized colour inline
+.
+.
+.TP
+.FONT B \[rs]*[BCK I " n" B ]
+move wards in a line
+.
+.
+.\" ======================================================================
+.\" BOLDER
+.\" ======================================================================
+.TP
+.B \[rs]*[BOLDER]
+.TQ
+.B \[rs]*[BOLDERX]
+Emboldening on/off
+.
+.RS
+.
+.P
+.B \[rs]*[BOLDER]
+begins emboldening type.
+.
+.B \[rs]*[BOLDERX]
+turns the feature off.
+.
+Both are inline escapes, therefore they should not appear as separate
+lines, but rather be embedded in text lines, like this:
+.RS
+.EX
+.FONT R "Not " B \[rs]*[BOLDER] R everything B \[rs]*[BOLDERX] R " is as it seems."
+.EE
+.RE
+.
+.P
+Alternatively, if you wanted the whole line emboldened, you should do
+.RS
+.EX
+.FONT B \[rs]*[BOLDER] R "Not everything is as it seems." B \[rs]*[BOLDERX]
+.EE
+.RE
+.
+Once
+.B \[rs]*[BOLDER]
+is invoked, it remains in effect until turned off.
+.
+.P
+Note: If you're using the document processing macros with
+.BR "\%.PRINTSTYLE \%TYPEWRITE" ,
+.B mom
+ignores
+.B \[rs]*[BOLDER]
+requests.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" BU
+.\" ======================================================================
+.TP
+.FONT B \[rs]*[BU I " n" B ]
+move characters pairs closer together inline (related to macro
+.BR \%.KERN )
+.
+.
+.\" ======================================================================
+.\" COND
+.\" ======================================================================
+.TP
+.B \[rs]*[COND]
+.TQ
+.B \[rs]*[CONDX]
+Pseudo-condensing on/off
+.
+.RS
+.
+.P
+.B \[rs]*[COND]
+begins pseudo-condensing type.
+.
+.B \[rs]*[CONDX]
+turns the feature off.
+.
+Both are inline escapes, therefore they should not appear as separate
+lines, but rather be embedded in text lines, like this:
+.RS
+.EX
+.FONT B \[rs]*[COND] I "Not everything is as it seems." B \[rs]*[CONDX]
+.EE
+.RE
+.B \%\[rs]*[COND]
+remains in effect until you turn it off with
+.BR \%\[rs]*[CONDX] .
+.
+.P
+IMPORTANT: You must turn
+.B \%\[rs]*[COND]
+off before making any changes to the point size of your type, either
+via the
+.B \%.PT_SIZE
+macro or with the
+.B \[rs]s
+inline escape.
+.
+If you wish the new point size to be pseudo-condensed, simply reinvoke
+.B \%\[rs]*[COND]
+afterwards.
+.
+Equally,
+.B \%\[rs]*[COND]
+must be turned off before changing the condense percentage with
+.BR \%.CONDENSE .
+.
+.P
+Note: If you're using the document processing macros with
+.BR "\%.PRINTSTYLE \%TYPEWRITE" ,
+.B mom
+ignores
+.B \%\[rs]*[COND]
+requests.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" CONDSUP
+.\" ======================================================================
+.TP
+.FONT B \[rs]*[CONDSUP] R \*[Ellipsis] B \[rs]*[CONDSUPX]
+pseudo-condensed superscript
+.
+.
+.\" ======================================================================
+.\" DOWN
+.\" ======================================================================
+.TP
+.FONT B \[rs]*[DOWN I " n" B ]
+temporarily move downwards in a line
+.
+.
+.\" ======================================================================
+.\" EN-MARK
+.\" ======================================================================
+.TP
+.B \[rs]*[EN\-MARK]
+mark initial line of a range of line numbers (for use with line
+numbered endnotes)
+.
+.
+.\" ======================================================================
+.\" EXT
+.\" ======================================================================
+.TP
+.B \[rs]*[EXT]
+.TQ
+.B \[rs]*[EXTX]
+Pseudo-extending on/off
+.
+.RS
+.
+.P
+.B \[rs]*[EXT]
+begins pseudo-extending type.
+.
+.B \[rs]*[EXTX]
+turns the feature off.
+.
+Both are inline escapes, therefore they should not appear as separate
+lines, but rather be embedded in text lines, like this:
+.RS
+.EX
+.FONT B \[rs]*[EXT] I "Not everything is as it seems." B \[rs]*[EXTX]
+.EE
+.RE
+.B \[rs]*[EXT]
+remains in effect until you turn it off with
+.BR \[rs]*[EXTX] .
+.
+.P
+IMPORTANT: You must turn
+.B \%\[rs]*[EXT]
+off before making any changes to the point size of your type, either
+via the
+.B \%.PT_SIZE
+macro or with the
+.B \[rs]s
+inline escape.
+.
+If you wish the new point size to be
+.IR \%pseudo-extended ,
+simply reinvoke
+.B \%\[rs]*[EXT]
+afterwards.
+.
+Equally,
+.B \%\[rs]*[EXT]
+must be turned off before changing the extend percentage with
+.BR \%.EXTEND .
+.
+.P
+Note: If you are using the document processing macros with
+.BR "\%.PRINTSTYLE \%TYPEWRITE" ,
+.B mom
+ignores
+.B \%\[rs]*[EXT]
+requests.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" EXTSUP
+.\" ======================================================================
+.TP
+.FONT B \[rs]*[EXTSUP] R \*[Ellipsis] B \[rs]*[EXTSUPX]
+pseudo extended superscript
+.
+.
+.\" ======================================================================
+.\" FU
+.\" ======================================================================
+.TP
+.FONT B \[rs]*[FU I " n" B ]
+move characters pairs further apart inline (related to macro
+.BR .KERN )
+.
+.
+.\" ======================================================================
+.\" FWD
+.\" ======================================================================
+.TP
+.FONT B \[rs]*[FWD I " n" B ]
+move forward in a line
+.
+.
+.\" ======================================================================
+.\" LEADER
+.\" ======================================================================
+.TP
+.B \[rs]*[LEADER]
+insert leaders at the end of a line
+.
+.
+.\" ======================================================================
+.\" RULE
+.\" ======================================================================
+.TP
+.B \[rs]*[RULE]
+draw a full measure rule
+.
+.
+.\" ======================================================================
+.\" PT_SIZE
+.\" ======================================================================
+.TP
+.FONT B \[rs]*[SIZE I " n" B ]
+change the point size inline (related to macro
+.BR \%.PT_SIZE )
+.
+.
+.\" ======================================================================
+.\" SLANT
+.\" ======================================================================
+.TP
+.B \[rs]*[SLANT]
+.TQ
+.B \[rs]*[SLANTX]
+Pseudo italic on/off
+.
+.RS
+.
+.P
+.B \%\[rs]*[SLANT]
+begins
+.I pseudo-italicizing
+.IR type .
+.
+.B \%\[rs]*[SLANTX]
+turns the feature off.
+.
+Both are
+.I inline
+.IR escapes ,
+therefore they should not appear as separate lines, but rather be
+embedded in text lines, like this:
+.RS
+.EX
+.FONT R "Not " B \[rs]*[SLANT] R everything B \[rs]*[SLANTX] R " is as it seems."
+.EE
+.RE
+.
+.P
+Alternatively, if you wanted the whole line
+.IR pseudo-italicized ,
+you'd do
+.RS
+.EX
+.FONT B \[rs]*[SLANT] R "Not everything is as it seems." B \[rs]*[SLANTX]
+.EE
+.RE
+.
+.P
+Once
+.B \[rs]*[SLANT]
+is invoked, it remains in effect until turned off.
+.
+.P
+Note: If you're using the document processing macros with
+.BR "\%.PRINTSTYLE \%TYPEWRITE" ,
+.B mom
+underlines pseudo-italics by default.
+.
+To change this behaviour, use the special macro
+.BR .SLANT_MEANS_SLANT .
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" ST
+.\" ======================================================================
+.TP
+.FONT B \[rs]*[ST I <number> B ] R \*[Ellipsis] B \[rs]*[ST I <number> B X]
+Mark positions of string tabs
+.
+.RS
+.P
+The
+.I quad
+direction must be
+.B LEFT
+or
+.B \%JUSTIFY
+(see
+.B \%.QUAD
+and
+.BR \%.JUSTIFY )
+or the
+.I no-fill mode
+set to
+.B LEFT
+in order for these inlines to function properly.
+.
+Please see
+.IR \%IMPORTANT ,
+below.
+.
+.P
+String tabs need to be marked off with inline escapes before being set
+up with the
+.B .ST
+macro.
+.
+Any input line may contain string tab markers.
+.
+.IR <number> ,
+above, means the numeric identifier of the tab.
+.
+.P
+The following shows a sample input line with string tab markers.
+.RS
+.EX
+.FONT B \[rs]*[ST1] R "Now is the time" B \[rs]*[ST1X] R " for all " B \[rs]*[ST2] R "good men" B \[rs]*ST2X] R " to come to the aid of the party."
+.EE
+.RE
+.
+.P
+String
+.I tab 1
+begins at the start of the line and ends after the word
+.IR \%time .
+.
+String
+.I tab 2
+starts at
+.I good
+and ends after
+.IR men .
+.
+.I Inline escapes
+(e.g.\&
+.I font
+or
+.I point size
+.IR changes ,
+or horizontal movements, including padding) are taken into account
+when
+.B mom
+determines the
+.I position
+and
+.I length
+of
+.I string
+.IR tabs .
+.
+.P
+Up to nineteen string tabs may be marked (not necessarily all on the
+same line, of course), and they must be numbered between 1 and 19.
+.
+.P
+Once string tabs have been marked in input lines, they have to be
+.I set
+with
+.BR .ST ,
+after which they may be called, by number, with
+.BR .TAB .
+.
+.P
+Note: Lines with string tabs marked off in them are normal input
+lines, i.e.\& they get printed, just like any input line.
+.
+If you want to set up string tabs without the line printing, use the
+.B \%.SILENT
+macro.
+.
+.P
+.I IMPORTANT:
+Owing to the way
+.B groff
+processes input lines and turns them into output lines, it is not
+possible for
+.B mom
+to
+.I guess
+the correct starting position of string tabs marked off in lines that
+are centered or set flush right.
+.
+.P
+Equally, she cannot guess the starting position if a line is fully
+justified and broken with
+.BR \%.SPREAD .
+.
+.P
+In other words, in order to use string tabs,
+.B LEFT
+must be active, or, if
+.B .QUAD LEFT
+or
+.B \%JUSTIFY
+are active, the line on which the
+.I string tabs
+are marked must be broken
+.I manually
+with
+.B .BR
+(but not
+.BR \%.SPREAD ).
+.
+.P
+To circumvent this behaviour, I recommend using the
+.B PAD
+to set up string tabs in centered or flush right lines.
+.
+Say, for example, you want to use a
+.I string tab
+to
+.I underscore
+the text of a centered line with a rule.
+.
+Rather than this,
+.RS
+.EX
+.B .CENTER
+.B \[rs]*[ST1]A line of text\[rs]*[ST1X]\[rs]c
+.B .EL
+.B .ST 1
+.B .TAB 1
+.B .PT_SIZE 24
+.B .ALD 3p
+.B \[rs]*[RULE]
+.B .RLD 3p
+.B .TQ
+.EE
+.RE
+you should do:
+.RS
+.EX
+.B .QUAD CENTER
+.B .PAD """#\[rs]*[ST1]A line of text\[rs]*[ST1X]#"""
+.B .EL
+.B .ST 1
+.B .TAB 1
+.B .PT_SIZE 24
+.B .ALD 3p
+.B \[rs]*[RULE] \[rs]" Note that you can't use \[rs]*[UP] or \[rs]*[DOWN] with \[rs]*[RULE]\""
+.B .RLD 3p
+.B .TQ
+.EE
+.RE
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" SUP
+.\" ======================================================================
+.TP
+.FONT B \[rs]*[SUP] R \*[Ellipsis] B \[rs]*[SUPX]
+superscript
+.
+.
+.\" ======================================================================
+.\" TB+
+.\" ======================================================================
+.TP
+.B \[rs]*[TB+]
+Inline escape for
+.B .TN
+.RI ( "Tab Next" )
+.
+.
+.\" ======================================================================
+.\" UL
+.\" ======================================================================
+.TP
+.FONT B \[rs]*[UL] R \*[Ellipsis] B \[rs]*[ULX]
+invoke underlining inline (fixed width fonts only)
+.
+.
+.\" ======================================================================
+.\" UP
+.\" ======================================================================
+.TP
+.FONT B \[rs]*[UP I " n" B ]
+temporarily move upwards in a line
+.
+.
+.\" ====================================================================
+.SS "Details of Macros in alphabetical Order"
+.\" ====================================================================
+.
+.\" ======================================================================
+.\" AUTOLEAD
+.\" ======================================================================
+.TP
+.B .AUTOLEAD
+set the linespacing relative to the point size
+.
+.
+.\" ======================================================================
+.\" Bottom Margin
+.\" ======================================================================
+.TP
+.BI .B_MARGIN " <bottom margin>"
+Bottom Margin
+.
+.RS
+.
+.P
+Requires a unit of measure
+.
+.P
+.B .B_MARGIN
+sets a nominal position at the bottom of the page beyond which you
+don't want your type to go.
+.
+When the bottom margin is reached,
+.B mom
+starts a new page.
+.
+.B .B_MARGIN requires a unit of measure.
+.
+Decimal fractions are allowed.
+.
+To set a nominal bottom margin of 3/4 inch, enter
+.RS
+.EX
+.B \&.B_MARGIN \&.75i
+.EE
+.RE
+.
+.P
+Obviously, if you haven't spaced the type on your pages so that the
+last lines fall perfectly at the bottom margin, the margin will vary
+from page to page.
+.
+Usually, but not always, the last line of type that fits on a page
+before the bottom margin causes mom to start a new page.
+.
+.P
+Occasionally, owing to a peculiarity in
+.IR groff ,
+an extra line will fall below the nominal bottom margin.
+.
+If you're using the document processing macros, this is unlikely to
+happen; the document processing macros are very hard-nosed about
+aligning bottom margins.
+.
+.P
+Note: The meaning of
+.B .B_MARGIN
+is slightly different when you're using the document processing
+macros.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" Fallback Font
+.\" ======================================================================
+.TP
+.BI \%.FALLBACK_FONT " <fallback font> " "[ ABORT | WARN ]"
+Fallback Font
+.
+.RS
+.
+.P
+In the event that you pass an invalid argument to
+.B \%.FAMILY
+(i.e.\& a non-existent
+.IR family ),
+.BR mom ,
+by default, uses the
+.IR "fallback font" ,
+.B Courier Medium Roman
+.RB ( CR ),
+in order to continue processing your file.
+.
+.P
+If you'd prefer another
+.IR "fallback font" ,
+pass
+.B \%.FALLBACK_FONT
+the full
+.I family+font name
+of the
+.I font
+you'd like.
+.
+For example, if you'd rather the
+.I fallback font
+were
+.BR "Times Roman Medium Roman" ,
+.RS
+.EX
+.B .FALLBACK_FONT TR
+.EE
+.RE
+would do the trick.
+.
+.P
+.B Mom
+issues a warning whenever a
+.I font style set
+with
+.B .FT
+does not exist, either because you haven't registered the style
+or because the
+.I font style
+does not exist in the current
+.I family set
+with
+.BR .FAMILY .
+.
+By default,
+.B \%mom
+then aborts, which allows you to correct the problem.
+.
+.P
+If you'd prefer that
+.B \%mom
+not abort on non-existent
+.IR fonts ,
+but rather continue processing using a
+.IR "fallback font" ,
+you can pass
+.B \%.FALLBACK_FONT
+the argument
+.BR WARN ,
+either by itself, or in conjunction with your chosen
+.IB "fallback font" .
+.
+.P
+Some examples of invoking
+.BR \%.FALLBACK_FONT :
+.
+.TP
+.B .FALLBACK_FONT WARN
+.B mom
+will issue a warning whenever you try to access a non-existent
+.I font
+but will continue processing your file with the default
+.IR "fallback font" ,
+.BR "Courier Medium Roman" .
+.
+.
+.TP
+.B .FALLBACK_FONT TR WARN
+.B \%mom
+will issue a warning whenever you try to access a non-existent
+.I font
+but will continue processing your file with a
+.I fallback font
+of
+.BR "Times Roman Medium Roman" ;
+additionally,
+.B TR
+will be the
+.I fallback font
+whenever you try to access a
+.I family
+that does not exist.
+.
+.TP
+.B .FALLBACK_FONT TR ABORT
+.B \%mom
+will abort whenever you try to access a non-existent
+.BR font ,
+and will use the
+.I fallback font
+.B TR
+whenever you try to access a
+.I family
+that does not exist.
+.
+If, for some reason, you want to revert to
+.BR ABORT ,
+just enter
+.B \%".FALLBACK_FONT ABORT"
+and
+.B mom
+will once again abort on
+.IR "font errors" .
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" FAM
+.\" ======================================================================
+.TP
+.BI .FAM " <family>"
+Type Family, alias of \fB.FAMILY\fR
+.
+.
+.\" ======================================================================
+.\" FAMILY
+.\" ======================================================================
+.TP
+.BI .FAMILY " <family>"
+Type Family, alias \fB.FAM\fR
+.
+.RS
+.
+.P
+.B .FAMILY
+takes one argument: the name of the
+.I family
+you want.
+.
+.I Groff
+comes with a small set of basic families, each identified by a 1-,
+2- or 3-letter mnemonic.
+.
+The standard families are:
+.RS
+.EX
+.B "A   = Avant Garde"
+.B "BM  = Bookman"
+.B "H   = Helvetica"
+.B "HN  = Helvetica Narrow"
+.B "N   = New Century Schoolbook"
+.B "P   = Palatino"
+.B "T   = Times Roman"
+.B "ZCM = Zapf Chancery"
+.EE
+.RE
+.
+.P
+The argument you pass to
+.B .FAMILY
+is the identifier at left, above.
+.
+For example, if you want
+.BR Helvetica ,
+enter
+.RS
+.EX
+.B .FAMILY H
+.EE
+.RE
+.
+.P
+Note: The font macro
+.RB ( .FT )
+lets you specify both the type
+.I family
+and the desired font with a single macro.
+.
+While this saves a few
+keystrokes, I recommend using
+.B .FAMILY for
+.IR family ,
+and
+.B .FT for
+.IR font ,
+except where doing so is genuinely inconvenient.
+.
+.BR ZCM ,
+for example,
+only exists in one style:
+.B Italic
+.RB ( I ).
+.
+.P
+Therefore,
+.RS
+.EX
+.B .FT ZCMI
+.EE
+.RE
+makes more sense than setting the
+.I family
+to
+.BR ZCM ,
+then setting the
+.I font
+to
+.IR I .
+.
+.P
+Additional note: If you are running a version of groff lower than
+1.19.2, you must follow all
+.B .FAMILY
+requests with a
+.B .FT
+request, otherwise
+.B mom
+will set all type up to the next
+.B .FT
+request in the fallback font.
+.
+.P
+If you are running a version of groff greater than or equal to 1.19.2,
+when you invoke the
+.B .FAMILY
+macro,
+.B mom
+.I remembers
+the font style
+.BR ( Roman ,
+.BR Italic ,
+etc) currently in use (if the font style exists in the new
+.IR family )
+and will continue to use the same font style in the new family.
+For example:
+.RS
+.EX
+.BI ".FAMILY BM " "\[rs]"" Bookman family"
+.BI ".FT I " "\[rs]"" Medium Italic"
+.I <some text> \[rs]" Bookman Medium Italic
+.BI ".FAMILY H " "\[rs]"" Helvetica family"
+.I <more text> \[rs]" Helvetica Medium Italic
+.EE
+.RE
+.
+.P
+However, if the font style does not exist in the new family,
+.B mom
+will set all subsequent type in the fallback font (by default,
+.B Courier Medium
+.BR Roman )
+until she encounters a
+.B .FT
+request that's valid for the
+.IR family .
+.
+.P
+For example, assuming you don't have the font
+.B Medium Condensed Roman
+.RB  ( mom
+extension
+.IR CD )
+in the
+.I Helvetica
+.IR family :
+.RS
+.EX
+.BI ".FAMILY UN " "\[rs]"" Univers family"
+.BI ".FT CD " "\[rs]"" Medium Condensed"
+.I <some text> \[rs]" Univers Medium Condensed
+.BI ".FAMILY H " "\[rs]"" Helvetica family"
+.I <more text> \[rs]" Courier Medium Roman!
+.EE
+.RE
+.
+.P
+In the above example, you must follow
+.B .FAMILY H
+with a
+.B .FT
+request that's valid for
+.BR Helvetica .
+.
+.P
+Please see the Appendices,
+.I Adding fonts to
+.IR groff ,
+for information on adding fonts and families to groff, as well as to
+see a list of the extensions
+.B mom
+provides to
+.IR groff 's
+basic
+.BR R ,
+.BR I ,
+.BR B ,
+.B BI
+styles.
+.
+.P
+Suggestion: When adding
+.I families to
+.IR groff ,
+I recommend following the established standard for the naming families
+and fonts.
+.
+For example, if you add the
+.B Garamond
+family, name the font files
+.RS
+.EX
+.B GARAMONDR
+.B GARAMONDI
+.B GARAMONDB
+.B GARAMONDBI
+.EE
+.RE
+.
+.B GARAMOND then becomes a valid
+.I family name
+you can pass to
+.BR .FAMILY .
+.
+(You could, of course, shorten
+.B GARAMOND
+to just
+.BR G ,
+or
+.BR GD .)
+.BR R ,
+.BR I ,
+.BR B ,
+and
+.B BI
+after
+.B GARAMOND
+are the
+.IR roman ,
+.IR italic ,
+.I bold
+and
+.I bold-italic
+fonts respectively.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" FONT
+.\" ======================================================================
+.TP
+.BI ".FONT R | B | BI | " "<any other valid font style>"
+Alias to
+.B .FT
+.
+.
+.\" ======================================================================
+.\" FT
+.\" ======================================================================
+.TP
+.BI ".FT R | B | BI | " "<any other valid font style>"
+Set font
+.
+.RS
+.
+.P
+By default,
+.I groff
+permits
+.B .FT
+to take one of four possible arguments specifying the desired font:
+.RS
+.EX
+.B R = (Medium) Roman
+.B I = (Medium) Italic
+.B B = Bold (Roman)
+.B BI = Bold Italic
+.EE
+.RE
+.
+.P
+For example, if your
+.I family
+is
+.BR Helvetica ,
+entering
+.RS
+.EX
+.B .FT B
+.EE
+.RE
+will give you the
+.I Helvetica bold
+.IR font .
+.
+If your
+.I family
+were
+.BR \%Palatino ,
+you'd get the
+.I \%Palatino bold
+.IR font .
+.
+.P
+.B Mom
+considerably extends the range of arguments you can pass to
+.BR .FT ,
+making it more convenient to add and access fonts of differing weights
+and shapes within the same family.
+.
+.P
+Have a look here for a list of the weight/style arguments
+.B mom
+allows.
+.
+Be aware, though, that you must have the fonts, correctly installed
+and named, in order to use the arguments.
+.
+(See
+.I Adding fonts to groff
+for instructions and information.)
+.
+Please also read the
+.I ADDITIONAL NOTE
+found in the description of the
+.B \%.FAMILY
+macro.
+.
+.P
+How
+.B mom
+reacts to an invalid argument to
+.B .FT
+depends on which version of groff you're using.
+.
+If your
+.I groff version
+is greater than or equal to 1.19.2,
+.B mom
+will issue a warning and, depending on how you've set up the fallback
+font, either continue processing using the fallback font, or abort
+(allowing you to correct the problem).  If your
+.I groff version
+is less than 1.19.2,
+.B mom
+will silently continue processing, using either the fallback font or
+the font that was in effect prior to the invalid
+.B .FT
+call.
+.
+.P
+.B .FT
+will also accept, as an argument, a full
+.I family
+and
+.I font
+.IR name .
+.
+.P
+For example,
+.RS
+.EX
+.B .FT HB
+.EE
+.RE
+will set subsequent type in
+.I Helvetica
+.IR Bold .
+.
+.P
+However, I strongly recommend keeping
+.I family
+and
+.I font
+separate except where doing so is genuinely inconvenient.
+.
+.P
+For inline control of
+.IR fonts ,
+see
+.I Inline
+.IR Escapes ,
+font control.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" Hanging Indent
+.\" ======================================================================
+.TP
+.BI "\%.HI [" " <measure> " ]
+Hanging indent \[em] the optional argument requires a unit of measure.
+.
+.RS
+.
+.P
+A hanging indent looks like this:
+.RS
+.EX
+\fB  The thousand injuries of Fortunato I had borne as best I
+    could, but when he ventured upon insult, I vowed
+    revenge.  You who so well know the nature of my soul
+    will not suppose, however, that I gave utterance to a
+    threat, at length I would be avenged\*[Ellipsis]
+.EE
+.RE
+.
+The first line of text
+.I hangs
+outside the
+.IR "left margin" .
+.
+.P
+In order to use
+.IR "hanging indents" ,
+you must first have a
+.I left indent
+active (set with either
+.B .IL
+or
+.BR .IB ).
+.
+.B Mom
+will not hang text outside the
+.I left margin set
+with
+.B \%.L_MARGIN
+or outside the
+.I left margin
+of a
+.IR \%tab .
+.
+.P
+The first time you invoke
+.BR .HI ,
+you must give it a
+.BR measure .
+.
+If you want the first line of a paragraph to
+.IR "hang by" ,
+say,
+.IR "1 pica" ,
+do
+.RS
+.EX
+.B ".IL 1P"
+.B ".HI 1P"
+.EE
+.RE
+.
+Subsequent invocations of
+.B \%.HI
+do not require you to supply a
+.IR measure ;
+.B mom
+keeps track of the last measure you gave it.
+.
+.P
+Generally speaking, you should invoke
+.B .HI
+immediately prior to the line you want hung (i.e.\& without any
+intervening control lines).
+.
+And because
+.I hanging indents
+affect only one line, there's no need to turn them off.
+.
+.P
+.I IMPORTANT:
+Unlike
+.BR IL ,
+.B IR
+and
+.BR IB ,
+measures given to
+.B .HI
+are NOT additive.
+.
+Each time you pass a measure to
+.B .HI ,
+the measure is treated literally.
+.
+.B
+.I Recipe:
+A numbered list using
+.I hanging indents
+.
+.P
+.I Note:
+.B mom
+has macros for setting lists.
+.
+This recipe exists to demonstrate the use of
+.I hanging indents
+only.
+.RS
+.EX
+.B ".PAGE 8.5i 11i 1i 1i 1i 1i"
+.B ".FAMILY  T"
+.B ".FT      R"
+.B ".PT_SIZE 12"
+.B ".LS      14"
+.B ".JUSTIFY"
+.B ".KERN"
+.B ".SS 0"
+.B ".IL \[rs]w'\[rs]0\[rs]0.'"
+.B ".HI \[rs]w'\[rs]0\[rs]0.'"
+\fB1.\[rs]0The most important point to be considered is whether the
+answer to the meaning of Life, the Universe, and Everything
+really is 42.  We have no-one's word on the subject except
+Mr.\& Adams'.
+.B .HI
+2.\[rs]0If the answer to the meaning of Life, the Universe,
+and Everything is indeed 42, what impact does this have on
+the politics of representation?  42 is, after all not a
+prime number.  Are we to infer that prime numbers don't
+deserve equal rights and equal access in the universe?
+.B .HI
+3.\[rs]0If 42 is deemed non-exclusionary, how do we present it
+as the answer and, at the same time, forestall debate on its
+exclusionary implications?
+.EE
+.RE
+.
+.P
+First, we invoke a left indent with a measure equal to the width of 2
+figures spaces plus a period (using the \[rs]w inline escape).
+.
+At this point, the left indent is active; text afterwards would
+normally be indented.
+.
+However, we invoke a hanging indent of exactly the same width, which
+hangs the first line (and first line only!\&) to the left of the indent
+by the same distance (in this case, that means \[lq]out to the left
+margin\[rq]).
+.
+Because we begin the first line with a number, a period, and a figure
+space, the actual text
+.RI ( "The most important point\*[Ellipsis]" )
+starts at exactly the same spot as the indented lines that follow.
+.
+.P
+Notice that subsequent invocations of
+.B .HI
+don't require a
+.I measure
+to be given.
+.
+.P
+Paste the example above into a file and preview it with
+.RS
+.EX
+.B pdfmom filename.mom | ps2pdf \- filename.pdf
+.EE
+.RE
+to see hanging indents in action.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" IB - INDENT BOTH
+.\" ======================================================================
+.TP
+.BI "\%.IB [" " <left measure> <right measure> " ]
+Indent both \[em] the optional argument requires a unit of measure
+.
+.RS
+.
+.P
+.B .IB
+allows you to set or invoke a left and a right indent at the same time.
+.
+.P
+At its first invocation, you must supply a measure for both indents;
+at subsequent invocations when you wish to supply a measure, both must
+be given again.
+.
+As with
+.B .IL
+and
+.BR .IR ,
+the measures are added to the values previously passed to the
+macro.
+.
+Hence, if you wish to change just one of the values, you must give an
+argument of zero to the other.
+.
+.P
+.I A word of advice:
+If you need to manipulate left and right indents separately, use a
+combination of
+.B .IL
+and
+.B .IR
+instead of
+.BR .IB .
+.
+You'll save yourself a lot of grief.
+.
+.P
+A
+.I minus sign
+may be prepended to the arguments to subtract from their current
+values.
+.
+The \[rs]w inline escape may be used to specify text-dependent
+measures, in which case no unit of measure is required.
+.
+For example,
+.RS
+.EX
+.B .IB \[rs]w\[aq]margarine\[aq] \[rs]w\[aq]jello\[aq]
+.EE
+.RE
+left indents text by the width of the word
+.I margarine
+and right indents by the width of
+.IR jello .
+.
+.P
+Like
+.B .IL
+and
+.BR .IR ,
+.B .IB
+with no argument indents by its last active values.
+.
+See the brief explanation of how mom handles indents for more details.
+.
+.P
+.I Note:
+Calling a
+.I tab
+(with
+.BR ".TAB <n>" )
+automatically cancels any active indents.
+.
+.P
+.I Additional note:
+Invoking
+.B .IB
+automatically turns off
+.B .IL
+and
+.BR .IR .
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" IL - INDENT LEFT
+.\" ======================================================================
+.TP
+.BI "\%.IL [" " <measure> " ]
+Indent left \[em] the optional argument requires a unit of measure
+.
+.RS
+.
+.P
+.B .IL
+indents text from the left margin of the page, or if you're in a
+.IR tab ,
+from the left edge of the
+.IR tab .
+.
+Once
+.I IL
+is on, the
+.I left indent
+is applied uniformly to every subsequent line of text, even if you
+change the line length.
+.
+.P
+The first time you invoke
+.BR .IL ,
+you must give it a measure.
+.
+Subsequent invocations with a measure add to the previous measure.
+.
+A minus sign may be prepended to the argument to subtract from the
+current measure.
+.
+The
+.B \[rs]w
+inline escape may be used to specify a text-dependent measure, in
+which case no unit of measure is required.
+.
+For example,
+.RS
+.EX
+.B .IL \[rs]w'margarine'
+.EE
+.RE
+indents text by the width of the word
+.IR margarine .
+.
+.P
+With no argument,
+.B .IL
+indents by its last active value.
+.
+See the brief explanation of how
+.B mom
+handles indents for more details.
+.
+.P
+.I Note:
+Calling a
+.I tab
+(with
+.BR ".TAB <n>" )
+automatically cancels any active indents.
+.
+.P
+.I Additional note:
+Invoking
+.B .IL
+automatically turns off
+.BR IB .
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" IQ - quit any/all indents
+.\" ======================================================================
+.TP
+.BI "\%.IQ [" " <measure> " ]
+IQ \[em] quit any/all indents
+.
+.RS
+.
+.P
+.I IMPORTANT NOTE:
+The original macro for quitting all indents was
+.BR .IX .
+.
+This usage has been deprecated in favour of
+.BR IQ .
+.
+.B .IX
+will continue to behave as before, but
+.B mom
+will issue a warning to
+.I stderr
+indicating that you should update your documents.
+.
+.P
+As a consequence of this change,
+.BR .ILX ,
+.B .IRX
+and
+.B .IBX
+may now also be invoked as
+.BR .ILQ ,
+.B .IRQ
+and
+.BR .IBQ .
+.
+Both forms are acceptable.
+.
+.P
+Without an argument, the macros to quit indents merely restore your
+original margins and line length.
+.
+The measures stored in the indent macros themselves are saved so you
+can call them again without having to supply a measure.
+.
+.P
+If you pass these macros the optional argument
+.BR CLEAR ,
+they not only restore your original left margin and line length, but
+also clear any values associated with a particular indent style.
+.
+The next time you need an indent of the same style, you have to supply
+a measure again.
+.
+.P
+.BR ".IQ CLEAR" ,
+as you'd suspect, quits and clears the values for all indent
+styles at once.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" IR - INDENT RIGHT
+.\" ======================================================================
+.TP
+.BI "\%.IR [" " <measure> " ]
+Indent right \[em] the optional argument requires a unit of measure
+.
+.RS
+.
+.P
+.B .IR
+indents text from the
+.I right margin
+of the page, or if you're in a
+.IR tab ,
+from the end of the
+.IR tab .
+.
+.P
+The first time you invoke
+.BR .IR ,
+you must give it a measure.
+.
+Subsequent invocations with a measure add to the previous indent
+measure.
+.
+A
+.I minus sign
+may be prepended to the argument to subtract from the current indent
+measure.
+.
+The \[rs]w inline escape may be used to specify a text-dependent
+measure, in which case no
+.I unit of measure
+is required.
+.
+For example,
+.RS
+.EX
+.B .IR \[rs]w'jello'
+.EE
+.RE
+indents text by the width of the word
+.IR jello .
+.
+.P
+With no argument,
+.B .IR
+indents by its last active value.
+.
+See the brief explanation of how
+.B mom
+handles indents for more details.
+.
+.P
+.I Note:
+Calling a
+.I tab
+(with
+.BR "\%.TAB <n>" )
+automatically cancels any active indents.
+.
+.P
+.I Additional note:
+Invoking
+.B .IR
+automatically turns off
+.BR IB .
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" Left Margin
+.\" ======================================================================
+.TP
+.BI .L_MARGIN " <left margin>"
+Left Margin
+.
+.RS
+.
+.P
+L_MARGIN establishes the distance from the left edge of the printer
+sheet at which you want your type to start.
+.
+It may be used any time, and remains in effect until you enter a new value.
+.
+.P
+Left indents and tabs are calculated from the value you pass to
+.BR .L_MARGIN ,
+hence it's always a good idea to invoke it before starting any serious
+typesetting.
+.
+A unit of measure is required.
+.
+Decimal fractions are allowed.
+.
+Therefore, to set the left margin at 3 picas (1/2 inch), you'd enter either
+.RS
+.EX
+.B .L_MARGIN 3P
+.EE
+.RE
+or
+.RS
+.EX
+.B .L_MARGIN .5i
+.EE
+.RE
+.
+.P
+If you use the macros
+.BR .PAGE ,
+.B .PAGEWIDTH
+or
+.B .PAPER
+without invoking
+.B .L_MARGIN
+(either before or afterwards),
+.B mom
+automatically sets
+.B .L_MARGIN
+to
+.IR "1 inch" .
+.
+.P
+Note:
+.B .L_MARGIN
+behaves in a special way when you're using the document processing
+macros.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" MCO - BEGIN MULTI-COLUMN SETTING
+.\" ======================================================================
+.TP
+.B .MCO
+Begin multi-column setting.
+.
+.RS
+.P
+.B .MCO
+.RI ( "Multi-Column On" )
+is the
+.I macro
+you use to begin
+.IR "multi-column setting" .
+.
+It marks the current baseline as the top of your columns, for use
+later with
+.BR .MCR .
+.
+See the introduction to columns for an explanation of
+.I multi-columns
+and some sample input.
+.
+.P
+.I Note:
+Do not confuse
+.B .MCO
+with the
+.B .COLUMNS
+macro in the document processing macros.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" MCR - RETURN TO TOP OF COLUMN
+.\" ======================================================================
+.TP
+.B \%.MCR
+Once you've turned
+.I multi-columns
+on (with
+.BR \%.MCO ),
+.BR .MCR ,
+at any time, returns you to the
+.IR "top of your columns".
+.
+.
+.\" ======================================================================
+.\" MCX - EXIT MULTI-COLUMNS
+.\" ======================================================================
+.TP
+.BI "\%.MCX [ " "<distance to advance below longest column>" " ]"
+Optional argument requires a unit of measure.
+.
+.RS
+.
+.P
+.B .MCX
+takes you out of any
+.I tab
+you were in (by silently invoking
+.BR .TQ )
+and advances to the bottom of the longest column.
+.
+.P
+Without an argument,
+.B .MCX
+advances
+.I 1 linespace
+below the longest column.
+.
+.P
+Linespace, in this instance, is the leading in effect at the moment
+.B .MCX
+is invoked.
+.
+.P
+If you pass the
+.I <distance>
+argument to
+.BR .MCX ,
+it advances
+.I 1 linespace
+below the longest column (see above)
+.I PLUS
+the distance specified by the argument.
+.
+The argument requires a unit of measure; therefore, to advance an
+extra 6 points below where
+.B \%.MCX
+would normally place you, you'd enter
+.RS
+.EX
+.B .MCX 6p
+.EE
+.RE
+.
+.P
+.I Note:
+If you wish to advance a precise distance below the baseline of the
+longest column, use
+.B .MCX
+with an argument of
+.B 0
+(zero; no
+.I unit of measure
+required) in conjunction with the
+.B \%.ALD
+macro, like this:
+.RS
+.EX
+.B .MCX 0
+.B .ALD 24p
+.EE
+.RE
+.
+The above advances to precisely
+.I 24 points
+below the baseline of the longest column.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" Start a new Page
+.\" ======================================================================
+.TP
+.B .NEWPAGE
+.
+.RS
+.
+.P
+Whenever you want to start a new page, use
+.BR .NEWPAGE ,
+by itself with no argument.
+.
+.B Mom
+will finish up processing the current page and move you to the top of
+a new one (subject to the top margin set with
+.BR .T_MARGIN ).
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" Page
+.\" ======================================================================
+.TP
+.BI ".PAGE " <width> " [ " <length> " [ " <lm> " [ " <rm> " [ " \
+             <tm> " [ " <bm> " ] ] ] ] ]"
+.
+.RS
+.
+.P
+All arguments require a unit of measure
+.
+.P
+.I IMPORTANT:
+If you're using the document processing macros,
+.B .PAGE
+must come after
+.BR .START .
+.
+Otherwise, it should go at the top of a document, prior to any text.
+.
+And remember, when you're using the document processing macros, top
+margin and bottom margin mean something slightly different than when
+you're using just the typesetting macros (see Top and bottom margins
+in document processing).
+.
+.P
+.B .PAGE
+lets you establish paper dimensions and page margins with a single
+macro.
+.
+The only required argument is page width.
+.
+The rest are
+optional, but they must appear in order and you can't skip over
+any.
+.
+.IR <lm> ,
+.IR <rm> ,
+.I <tm>
+and
+.I <bm>
+refer to the left, right, top and bottom margins respectively.
+.
+.P
+Assuming your page dimensions are 11 inches by 17 inches, and that's
+all you want to set, enter
+.RS
+.EX
+.B .PAGE 11i 17i
+.EE
+.RE
+.
+If you want to set the left margin as well, say, at 1 inch,
+.B PAGE
+would look like this:
+.RS
+.EX
+.B .PAGE 11i 17i 1i
+.EE
+.RE
+.
+.P
+Now suppose you also want to set the top margin, say, at 1\(en1/2 inches.
+.
+.I <tm>
+comes after
+.I <rm>
+in the optional arguments, but you can't skip over any arguments,
+therefore to set the top margin, you must also give a right margin.
+.
+The
+.B .PAGE
+macro would look like this:
+.RS
+.EX
+\f[CB].PAGE 11i 17i 1i 1i 1.5i
+                 |   |
+required right---+   +---top margin
+        margin\f[R]
+.EE
+.RE
+.
+.P
+Clearly,
+.B .PAGE
+is best used when you want a convenient way to tell
+.B mom
+just the dimensions of your printer sheet (width and length), or when
+you want to tell her everything about the page (dimensions and all the
+margins), for example
+.RS
+.EX
+.B .PAGE 8.5i 11i 45p 45p 45p 45p
+.EE
+.RE
+.
+This sets up an 8\(12 by 11 inch page with margins of 45 points
+(5/8-inch) all around.
+.
+.P
+Additionally, if you invoke
+.B .PAGE
+with a top margin argument, any macros you invoke after
+.B .PAGE
+will almost certainly move the baseline of the first line of text down
+by one linespace.
+.
+To compensate, do
+.RS
+.EX
+.B .RLD 1v
+.EE
+.RE
+immediately before entering any text, or, if it's feasible, make
+.B .PAGE
+the last macro you invoke prior to entering text.
+.
+.P
+Please read the
+.I Important note
+on page dimensions and papersize for information on ensuring groff
+respects your
+.B .PAGE
+dimensions and margins.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" Page Length
+.\" ======================================================================
+.TP
+.BI .PAGELENGTH " <length of printer sheet>"
+tells
+.B mom
+how long your printer sheet is.
+.
+It works just like
+.BR .PAGEWIDTH .
+.
+.RS
+.
+.P
+Therefore, to tell
+.B mom
+your printer sheet is 11 inches long, you enter
+.RS
+.EX
+.B .PAGELENGTH 11i
+.EE
+.RE
+.
+Please read the important note on page dimensions and papersize for
+information on ensuring groff respects your
+.IR PAGELENGTH .
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" Page Width
+.\" ======================================================================
+.TP
+.BI .PAGEWIDTH " <width of printer sheet>"
+.
+.RS
+.
+.P
+The argument to
+.B .PAGEWIDTH
+is the width of your printer sheet.
+.
+.P
+.B .PAGEWIDTH
+requires a unit of measure.
+.
+Decimal fractions are allowed.
+.
+Hence, to tell
+.B mom
+that the width of your printer sheet is 8\(12 inches, you enter
+.RS
+.EX
+\&.PAGEWIDTH 8.5i
+.EE
+.RE
+.
+.P
+Please read the Important note on page dimensions and papersize for
+information on ensuring groff respects your
+.IR PAGEWIDTH .
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" Paper
+.\" ======================================================================
+.TP
+.BI .PAPER " <paper type>"
+provides a convenient way to set the page dimensions for some common
+printer sheet sizes.
+.
+The argument
+.I <paper type>
+can be one of:
+.BR LETTER ,
+.BR LEGAL ,
+.BR STATEMENT ,
+.BR TABLOID ,
+.BR LEDGER ,
+.BR FOLIO ,
+.BR QUARTO ,
+.BR EXECUTIVE ,
+.BR 10x14 ,
+.BR A3 ,
+.BR A4 ,
+.BR A5 ,
+.BR B4 ,
+.BR B5 .
+.
+.
+.TP
+.B .PRINTSTYLE
+.
+.
+.\" ======================================================================
+.\" PT_SIZE - POINT SIZE OF TYPE
+.\" ======================================================================
+.TP
+.BI .PT_SIZE " <size of type in points>"
+Point size of type, does not require a
+.IR "unit of measure" .
+.
+.RS
+.
+.P
+.B \%.PT_SIZE
+.RI ( "Point Size" )
+takes one argument: the
+.I size of type
+in
+.IR points .
+.
+Unlike most other macros that establish the
+.I size
+or
+.I measure
+of something,
+.B \%.PT_SIZE
+does not require that you supply a
+.I unit of measure
+since it's a near universal convention that
+.I type size
+is measured in
+.IR points .
+.
+Therefore, to change the
+.I type size
+to, say,
+.IR "11 points" ,
+enter
+.RS
+.EX
+.B .PT_SIZE 11
+.EE
+.RE
+.
+.I Point sizes
+may be
+.I fractional
+(e.g.\&
+.I 10.25
+or
+.IR 12.5 ).
+.
+.P
+You can prepend a
+.I plus
+or a
+.I minus sign
+to the argument to
+.BR \%.PT_SIZE ,
+in which case the
+.I point size
+will be changed by
+.I +
+or
+.I \-
+the original value.
+.
+For example, if the
+.I point size
+is
+.I 12 ,
+and you want
+.I 14 ,
+you can do
+.RS
+.EX
+.B .PT_SIZE +2
+.EE
+.RE
+then later reset it to
+.I 12
+with
+.RS
+.EX
+.B .PT_SIZE \-2
+.EE
+.RE
+.
+The
+.I size of type
+can also be changed inline.
+.
+.P
+.I Note:
+It is unfortunate that the
+.B \%pic
+preprocessor has already taken the name, PS, and thus
+.IR mom 's
+macro for setting
+.I point sizes
+can't use it.
+.
+However, if you aren't using
+.BR pic ,
+you might want to alias
+.B \%.PT_SIZE
+as
+.BR .PS ,
+since there'd be no conflict.
+.
+For example
+.RS
+.EX
+.B .ALIAS PS PT_SIZE
+.EE
+.RE
+would allow you to set
+.I point sizes
+with
+.BR .PS .
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" Right Margin
+.\" ======================================================================
+.TP
+.BI .R_MARGIN " <right margin>"
+Right Margin
+.
+.RS
+.
+.P
+Requires a unit of measure.
+.
+.P
+IMPORTANT:
+.BR .R_MARGIN ,
+if used, must come after
+.BR .PAPER ,
+.BR .PAGEWIDTH ,
+.BR .L_MARGIN ,
+and/or
+.B .PAGE
+(if a right margin isn't given to PAGE).
+.
+The reason is that
+.B .R_MARGIN
+calculates line length from the overall page dimensions and the left margin.
+.
+.P
+Obviously, it can't make the calculation if it doesn't know the page
+width and the left margin.
+.
+.P
+.B .R_MARGIN
+establishes the amount of space you want between the end of typeset
+lines and the right hand edge of the printer sheet.
+.
+In other words, it sets the line length.
+.B .R_MARGIN
+requires a unit of measure.
+.
+Decimal fractions are allowed.
+.
+.P
+The line length macro (LL) can be used in place of
+.BR .R_MARGIN .
+.
+In either case, the last one invoked sets the line length.
+.
+The choice of which to use is up to you.
+.
+In some instances, you may find it easier to think of a section of
+type as having a right margin.
+.
+In others, giving a line length may make more sense.
+.
+.P
+For example, if you're setting a page of type you know should have
+6-pica margins left and right, it makes sense to enter a left and
+right margin, like this:
+.RS
+.EX
+.B .L_MARGIN 6P
+.B .R_MARGIN 6P
+.EE
+.RE
+.
+.P
+That way, you don't have to worry about calculating the line
+length.
+.
+On the other hand, if you know the line length for a patch of type
+should be 17 picas and 3 points, entering the line length with LL is
+much easier than calculating the right margin, e.g.\&
+.RS
+.EX
+.B .LL 17P+3p
+.EE
+.RE
+.
+.P
+If you use the macros
+.BR .PAGE ,
+.B .PAGEWIDTH
+or
+.B PAPER
+without invoking
+.B .R_MARGIN
+afterwards,
+.B mom
+automatically sets
+.B .R_MARGIN
+to
+.IR "1 inch" .
+.
+If you set a line length after these macros (with
+.BR .LL ),
+the line length calculated by
+.B .R_MARGIN
+is, of course, overridden.
+.
+.P
+Note:
+.B .R_MARGIN
+behaves in a special way when you're using the document processing
+macros.
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" ST - Set String Tabs
+.\" ======================================================================
+.TP
+.FONT B .ST I " <tab number> " B "L | R | C | J [ QUAD ]"
+.
+.RS
+.P
+After
+.I string tabs
+have been marked off on an input line (see
+.BR \[rs]*[ST]\*[Ellipsis]\[rs]*[STX] ),
+you need to
+.I set
+them by giving them a direction and, optionally, the
+.B \%QUAD
+argument.
+.
+.P
+In this respect,
+.B .ST
+is like
+.B \%.TAB_SET
+except that you don't have to give
+.B .ST
+an indent or a line length (that's already taken care of, inline,
+by
+.BR \[rs]*[ST]\*[Ellipsis]\[rs]*[STX] ).
+.
+.P
+If you want string
+.I tab 1
+to be
+.BR \%left ,
+enter
+.RS
+.EX
+.B .ST 1 L
+.EE
+.RE
+.
+If you want it to be
+.I \%left
+and
+.IR \%filled ,
+enter
+.RS
+.EX
+.B .ST 1 L \%QUAD
+.EE
+.RE
+.
+If you want it to be justified, enter
+.RS
+.EX
+.B .ST 1 J
+.EE
+.RE
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" TAB - Call Tabs
+.\" ======================================================================
+.TP
+.BI \%.TAB " <tab number>"
+After
+.I tabs
+have been defined (either with
+.B \%.TAB_SET
+or
+.BR .ST ),
+.B \%.TAB
+moves to whatever
+.I tab number
+you pass it as an argument.
+.
+.RS
+.
+.P
+For example,
+.RS
+.EX
+.B \%.TAB 3
+.EE
+.RE
+moves you to
+.IR "\%tab 3" .
+.
+.P
+Note:
+.B \%.TAB
+breaks the line preceding it and advances 1 linespace.
+.
+Hence,
+.RS
+.EX
+.B .TAB 1
+.B  A line of text in tab 1.
+.B .TAB 2
+.B  A line of text in tab 2.
+.EE
+.RE
+produces, on output
+.RS
+.EX
+.B "A line of text in tab 1."
+.B "                             A line of text in tab 2."
+.EE
+.RE
+.
+.P
+If you want the tabs to line up, use
+.B .TN
+.RI ( "Tab Next" )
+or, more conveniently, the inline escape \[rs]*[TB+]:
+.RS
+.EX
+\fB.TAB 1
+A line of text in tab 1.\[rs]*[TB+]
+A line of text in tab 2.
+.EE
+.RE
+which produces
+.RS
+.EX
+.B "A line of text in tab 1.   A line of text in tab 2."
+.EE
+.RE
+.
+.P
+If the text in your tabs runs to several lines, and you want the first
+lines of each tab to align, you must use the multi-column macros.
+.
+.P
+.I Additional note:
+Any indents in effect prior to calling a tab are automatically turned
+off by
+.BR TAB .
+.
+If you were happily zipping down the page with a left indent of
+.I 2 picas
+turned on, and you call a
+.I tab
+whose indent from the left margin is
+.IR "6 picas" ,
+your new distance from the
+.I left margin
+will be
+.IR "6 picas" ,
+not
+I 6 picas plus the 2 pica
+indent.
+.
+.P
+.I \%Tabs
+are not by nature columnar, which is to say that if the text inside a
+.I tab
+runs to several lines, calling another
+.I tab
+does not automatically move to the baseline of the first line in the
+.IR "previous tab" .
+.
+To demonstrate:
+.RS
+.EX
+\f[B]TAB 1
+Carrots
+Potatoes
+Broccoli
+\&.TAB 2
+$1.99/5 lbs
+$0.25/lb
+$0.99/bunch
+.EE
+.RE
+produces, on output
+.RS
+.EX
+\fBCarrots
+Potatoes
+Broccoli
+            $1.99/5 lbs
+            $0.25/lb
+            $0.99/bunch
+.EE
+.RE
+.
+.RE
+.
+.\" ======================================================================
+.\" TB - Call Tabs Alias
+.\" ======================================================================
+.TP
+.BI .TB " <tab number>"
+Alias to
+.B .TAB
+.
+.
+.\" ======================================================================
+.\" TI - TEMPORARY (LEFT) INDENT
+.\" ======================================================================
+.TP
+.BI "\%.TI [" " <measure> " ]
+Temporary left indent \[em] the optional argument requires a
+.I unit of measure
+.
+.RS
+.
+.P
+A temporary indent is one that applies only to the first line of text
+that comes after it.
+.
+Its chief use is indenting the first line of paragraphs.
+.RB ( Mom's
+.B .PP
+macro, for example, uses a
+.IR "temporary indent" .)
+.
+.P
+The first time you invoke
+.BR .TI ,
+you must give it a measure.
+.
+If you want to
+.I indent
+the first line of a paragraph by, say, 2 ems, do
+.RS
+.EX
+.B .TI 2m
+.EE
+.RE
+.
+.P
+Subsequent invocations of
+.B .TI
+do not require you to supply a measure;
+.B mom
+keeps track of the last measure you gave it.
+.
+.P
+Because
+.I temporary indents
+are temporary, there's no need to turn them off.
+.
+.P
+.I IMPORTANT:
+Unlike
+.BR .IL ,
+.B .IR
+and
+.BR IB ,
+measures given to
+.B .TI
+are NOT additive.
+.
+In the following example, the second
+.B \%".TI 2P"
+is exactly
+.IR "2 picas" .
+.RS
+.EX
+.B .TI 1P
+.B The beginning of a paragraph\*[Ellipsis]
+.B .TI 2P
+.B The beginning of another paragraph\*[Ellipsis]
+.EE
+.RE
+.
+.RE
+.
+.
+.
+.\" ======================================================================
+.\" TN - Tab Next
+.\" ======================================================================
+.TP
+.B .TN
+Tab Next
+.
+.RS
+.P
+Inline escape
+.B \[rs]*[TB+]
+.
+.P
+.B TN
+moves over to the
+.I next tab
+in numeric sequence
+.RI ( "tab n+1" )
+without advancing on the page.
+.
+See the
+.I NOTE
+in the description of the
+.B \%.TAB
+macro for an example of how
+.B TN
+works.
+.
+.P
+In
+.I \%tabs
+that aren't given the
+.B QUAD
+argument when they're set up with
+.B \%.TAB_SET
+or
+.BR ST ,
+you must terminate the line preceding
+.B .TN
+with the
+.B \[rs]c
+inline escape.
+.
+Conversely, if you did give a
+.B QUAD
+argument to
+.B \%.TAB_SET
+or
+.BR ST ,
+the
+.B \[rs]c must not be used.
+.
+.P
+If you find remembering whether to put in the
+.B \[rs]c
+bothersome, you may prefer to use the inline escape alternative
+to
+.BR .TN ,
+.BR \[rs]*[TB+] ,
+which works consistently regardless of the fill mode.
+.
+.P
+.I Note:
+You must put text in the input line immediately after
+.BR .TN .
+.
+Stacking of
+.BR .TN 's
+is not allowed.
+.
+In other words, you cannot do
+.RS
+.EX
+\fB.TAB 1
+Some text\[rs]c
+\&.TN
+Some more text\[rs]c
+\&.TN
+\&.TN
+Yet more text\fR
+.EE
+.RE
+.
+The above example, assuming
+.I tabs
+numbered from
+.I 1
+to
+.IR 4 ,
+should be entered
+.RS
+.EX
+\fB.TAB 1
+Some text\[rs]c
+\&.TN
+Some more text\[rs]c
+\&.TN
+\[rs]&\[rs]c
+\&.TN
+Yet more text
+.EE
+.RE
+.
+\[rs]& is a zero-width, non-printing character that
+.I groff
+recognizes as valid input, hence meets the requirement for input text
+following
+.BR .TN .
+.
+.RE
+.
+.
+.\" ======================================================================
+.\" Tab Quit
+.\" ======================================================================
+.TP
+.B .TQ
+.B TQ
+takes you out of whatever
+.I tab
+you were in, advances
+.IR "1 linespace" ,
+and restores the
+.IR "left margin" ,
+.IR "line length" ,
+.I quad direction
+and
+.I fill mode
+that were in effect prior to invoking any
+.IR tabs .
+.
+.
+.\" ======================================================================
+.\" Top Margin
+.\" ======================================================================
+.TP
+.BI .T_MARGIN " <top margin>"
+Top margin
+.
+.RS
+.
+.P
+Requires a unit of measure
+.
+.P
+.B .T_MARGIN
+establishes the distance from the top of the printer sheet at which
+you want your type to start.
+.
+It requires a unit of measure, and decimal fractions are allowed.
+.
+To set a top margin of 2\(12 centimetres, you'd enter
+.RS
+.EX
+.B .T_MARGIN 2.5c
+.EE
+.RE
+.
+.B .T_MARGIN
+calculates the vertical position of the first line of type on a page
+by treating the top edge of the printer sheet as a baseline.
+Therefore,
+.RS
+.EX
+.B .T_MARGIN 1.5i
+.EE
+.RE
+puts the baseline of the first line of type 1\(12 inches beneath the
+top of the page.
+.
+.P
+Note:
+.B .T_MARGIN
+means something slightly different when you're using the document
+processing macros.
+.
+See Top and bottom margins in document processing for an explanation.
+.
+.P
+IMPORTANT:
+.B .T_MARGIN
+does two things: it establishes the top margin for pages that come
+after it and it moves to that position on the current page.
+.
+Therefore,
+.B .T_MARGIN
+should only be used at the top of a file (prior to entering text) or
+after NEWPAGE, like this:
+.RS
+.EX
+.B .NEWPAGE
+.B .T_MARGIN 6P
+.I <text>
+.EE
+.RE
+.
+.RE
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.I mom
+was written by
+.MT peter@\:schaffter.ca
+Peter Schaffter
+.ME .
+.
+PDF support was provided by
+.MT deri@\:chuzzlewit.demon.co.uk
+Deri James
+.ME .
+.
+The alphabetical documentation of macros and escape sequences in this
+man page were written by the
+.I mom
+team.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR groff (@MAN1EXT@),
+.BR groff_mom (@MAN7EXT@),
+.
+.TP
+.I \%@HTMLDOCDIR@/\:mom/\:toc.html
+\[en] entry point to the HTML documentation
+.
+.TP
+.UR http://\:www.schaffter.ca/\:mom/\:momdoc/\:toc.html
+.UE
+\[en] HTML documentation online
+.
+.TP
+.UR http://\:www.schaffter.ca/\:mom/
+.UE
+\[en] the mom macros homepage
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_mom_C]
+.
+.
+.\" ====================================================================
+.\" Emacs settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/mom/groff_mom.man b/contrib/mom/groff_mom.man
deleted file mode 100644 (file)
index 4e787b0..0000000
+++ /dev/null
@@ -1,3416 +0,0 @@
-.TH GROFF_MOM @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_mom \- groff `mom' macros, `mom' is a `roff' language, part of `groff'
-.
-.\" The .SH was moved to this place in order to appease `apropos'.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2002-2014 Free Software Foundation, Inc.
-
-This file is part of groff, a free software project.
-
-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 3 of the License, or (at your option) any later
-version.
-
-You should have received a copy of the GNU General Public License
-along with groff, see the files COPYING and LICENSE in the top
-directory of the groff Text source package.
-
-Or read the manpage
-.BR gpl (1).
-You can also visit <http://www.gnu.org/licenses/>.
-..
-.
-.de au
-mom was written by
-.MT peter@schaffter.ca
-Peter Schaffter
-.ME
-and revised by
-.MT wl@gnu.org
-Werner Lemberg
-.ME .
-
-PDF support was provided by
-.MT deri@chuzzlewit.demon.co.uk
-Deri James
-.ME .
-
-The alphabetical documentation of macros and escape seqauences in this
-man\-page were written by the
-.I mom
-team.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.ds Ellipsis \&.\|.\|.\&\"
-.
-.hw line-space
-.
-.
-.\" --------------------------------------------------------------------
-.\" .FONT (<font name> <text> [<font name> <text> ...])
-.\"
-.\" Print in different fonts: R, I, B, CR, CI, CB
-.\"
-.de FONT
-.  if (\\n[.$] = 0) \{\
-.      nop \&\f[P]\&
-.      return
-.  \}
-.  ds result \&
-.  while (\\n[.$] >= 2) \{\
-.      as result \,\f[\\$1]\\$2
-.      if !"\\$1"P" .as result \f[P]\""
-.      shift 2
-.  \}
-.  if (\\n[.$] = 1) .as result \,\f[\\$1]
-.  nh
-.  nop \\*[result]\&
-.  hy
-..
-.
-.
-.do nr groff_mom_C \n[.C]
-.cp 0
-.
-.de TQ
-.br
-.ns
-.TP \\$1
-..
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SYNOPSIS"
-.\" --------------------------------------------------------------------
-.
-.SY pdfmom
-.OP \-Tps "\fR[pdfroff options]"
-[groff options]
-.I files \*[Ellipsis]
-.YS
-.
-.SY groff
-.OP \-mom
-.I files \*[Ellipsis]
-.YS
-.
-.SY groff
-.OP "\-m mom"
-.I files .\|.\|.
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH CALLING MOM
-.\" --------------------------------------------------------------------
-.
-.B mom
-is a macro set for
-.BR groff ,
-designed primarily to format documents for
-.I PDF
-and
-.I PostScript
-output.
-.
-.
-.P
-.B mom
-provides two categories of macros: macros for typesetting, and
-macros for document processing.
-.
-The typesetting macros provide access to groff\[aq]s typesetting
-capabilities in ways that are simpler to master than groff\[aq]s
-primitives.
-.
-The document processing macros provide highly customizable markup
-tags that allow the user to design and output professional-looking
-documents with a minimum of typesetting intervention.
-.
-.
-.P
-Files processed with
-.BR pdfmom (@MAN1EXT@)
-with or without the
-.RI \-T ps
-option, produce
-.I PDF
-documents.
-.
-The documents include a
-.I PDF
-outline that appears in the \[oq]Contents\[cq] panel of document
-viewers, and may contain clickable internal and external links.
-.
-.
-.P
-When
-.RI \-T ps
-is absent,
-.B groff\[aq]s
-native
-.I PDF
-driver,
-.BR gropdf ,
-is used to generate the output.
-.
-When given, the output is still
-.IR PDF ,
-but processing is passed over to
-.BR pdfroff ,
-which uses
-.B groff\[aq]s
-PostScript driver,
-.BR grops \&.
-Not all
-.I PDF
-features are available when
-.RI \-T ps
-is given; its primary use is to allow processing of files with
-embedded
-.I PostScript
-images.
-.
-.
-.P
-Files processed with
-.B groff \-mom
-(or
-.BI "\-m " mom\c
-) produce
-.I PostScript
-output by default.
-.
-.
-.P
-.B mom
-comes with her own very complete documentation in
-.I HTML
-format.
-.
-A separate
-.IR "PDF manual" ,
-.I Producing PDFs
-with groff and
-.BR mom ,
-covers full
-.B mom
-or
-.I PDF
-usage.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP
-.B om.tmac
-\[en] the main macro file
-.TQ
-.B mom.tmac
-\[en] a wrapper file that calls om.tmac directly.
-.
-.TP
-.B \%@HTMLDOCDIR@/\:mom/\:toc.html
-\[en] entry point to the HTML documentation
-.
-.TP
-.B \%@PDFDOCDIR@/\:mom-pdf.pdf
-\[en] the PDF manual,
-.I Producing PDFs with groff and mom
-.
-.TP
-.B @EXAMPLEDIR@/mom/*.mom
-\[en] example files using mom
-.
-.
-.\" --------------------------------------------------------------------
-.SH DOCUMENTATION IN ALPHABETICAL ORDER
-.\" --------------------------------------------------------------------
-.
-.
-This part of the man-page contains information just as in groff(7),
-.I mom macros
-and
-.I mom escape sequences
-in alphabetical order.
-.
-.
-.P
-The logical order of
-.I mom macros
-and
-.I mom escape sequences
-is very well documented in
-.
-.TP
-.B \%@HTMLDOCDIR@/\:mom/\:toc.html
-\[en] entry point to the HTML documentation
-.
-.
-.P
-That document is quite good for beginners, but other users should be
-happy to have some documentation in reference style.
-.
-.
-.P
-So we restrict this part to the alphabetical order of macros and
-escape sequences.
-.
-But, so far, we took all documentation details from the
-.I toc.html
-file, just in a more useful alphabetical order.
-.
-.
-So this part of the man-page is nothing new, but only a logical
-arrangement.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "QUICK REFERENCE"
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.SS "Quick Reference of Inline Escape Sequences in alphabetical Order"
-.\" --------------------------------------------------------------------
-.
-.TP
-.FONT B \[rs]*[ I <colorname> B ]
-begin using an initialized colour inline
-.
-.
-.TP
-.FONT B \[rs]*[BCK I " n" B ]
-move backwards in a line
-.
-.
-.TP
-.BI \[rs]*[BOLDER]
-invoke pseudo bold inline (related to macro
-.BR .SETBOLDER )
-.
-.
-.TP
-.BI \[rs]*[BOLDERX]
-off pseudo bold inline (related to macro
-.BR .SETBOLDER )
-.
-.
-.TP
-.FONT B \[rs]*[BU I " n" B ]
-move characters pairs closer together inline (related to macro
-.BR \%.KERN )
-.
-.
-.TP
-.BI \[rs]*[COND]
-invoke pseudo condensing inline (related to macro
-.BR \%.CONDENSE )
-.
-.
-.TP
-.BI \[rs]*[CONDX]
-off pseudo condensing inline (related to macro
-.BR \%.CONDENSE )
-.
-.
-.TP
-.FONT B \[rs]*[CONDSUP] R \*[Ellipsis] B \[rs]*[CONDSUPX]
-pseudo-condensed superscript
-.
-.
-.TP
-.FONT B \[rs]*[DOWN I " n" B ]
-temporarily move downwards in a line
-.
-.
-.TP
-.BI \[rs]*[EN-MARK]
-mark initial line of a range of line numbers (for use with line
-numbered endnotes)
-.
-.
-.TP
-.BI \[rs]*[EXT]
-invoke pseudo extending inline (related to macro
-.BR \%.EXTEND )
-.
-.
-.TP
-.BI \[rs]*[EXTX]
-off pseudo condensing inline (related to macro
-.BR \%.EXTEND )
-.
-.
-.TP
-.FONT B \[rs]*[EXTSUP] R \*[Ellipsis] B \[rs]*[EXTSUPX]
-pseudo extended superscript
-.
-.
-.TP
-.FONT B \[rs]*[FU I " n" B ]
-move characters pairs further apart inline (related to macro
-.BR \%.KERN )
-.
-.
-.TP
-.FONT B \[rs]*[FWD I " n" B ]
-move forward in a line
-.
-.
-.TP
-.BI \[rs]*[LEADER]
-insert leaders at the end of a line
-.
-.
-.TP
-.BI \[rs]*[RULE]
-draw a full measure rule
-.
-.
-.TP
-.FONT B \[rs]*[SIZE I " n" B ]
-change the point size inline (related to macro
-.BR \%.PT_SIZE )
-.
-.
-.TP
-.BI \[rs]*[SLANT]
-invoke pseudo italic inline (related to macro
-.BR \%.SETSLANT )
-.
-.
-.TP
-.BI \[rs]*[SLANTX]
-off pseudo italic inline (related to macro
-.BR \%.SETSLANT )
-.
-.
-.TP
-.FONT B \[rs]*[ST I <n> B ] R \*[Ellipsis] B \[rs]*[ST I <n> B X]
-string tabs (mark tab positions inline)
-.
-.
-.TP
-.FONT B \[rs]*[SUP] R \*[Ellipsis] B \[rs]*[SUPX]
-superscript
-.
-.
-.TP
-.B \[rs]*[TB+]
-inline escape for
-.B .TN
-.RI ( "Tab Next" )
-.
-.
-.TP
-.FONT B \[rs]*[UL] R \*[Ellipsis] B \[rs]*[ULX]
-invoke underlining inline (fixed width fonts only)
-.
-.
-.TP
-.FONT B \[rs]*[UP I " n" B ]
-temporarily move upwards in a line
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Quick Reference of Macros in alphabetical Order"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI .AUTOLEAD
-set the linespacing relative to the point size
-.
-.
-.TP
-.BI .B_MARGIN
-set a bottom margin
-.
-.
-.TP
-.BI .BR
-break a justified line
-.
-.
-.TP
-.BI .CENTER
-set line-by-line quad centre
-.
-.
-.TP
-.BI .CONDENSE
-set the amount to pseudo condense
-.
-.
-.TP
-.BI .EL
-break a line without advancing on the page
-.
-.
-.TP
-.BI .EXTEND
-set the amount to pseudo extend
-.
-.
-.TP
-.BI .FALLBACK_FONT
-establish a fallback font (for missing fonts)
-.
-.
-.TP
-.BI .FAM
-alias to
-.B .FAMILY
-.
-.
-.TP
-.BI ".FAMILY " <family>
-set the
-.I family type
-.
-.
-.TP
-.BI .FT
-set the font style (roman, italic, etc.)
-.
-.
-.TP
-.BI ".HI [" " <measure> " ]
-hanging indent
-.
-.
-.TP
-.BI .HY
-automatic hyphenation on/off
-.
-.
-.TP
-.BI .HY_SET
-set automatic hyphenation parameters
-.
-.
-.TP
-.BI ".IB [" " <left measure> <right measure> " ]
-indent both
-.
-.
-.TP
-.B .IBX [ CLEAR ]
-exit indent both
-.
-.
-.TP
-.BI ".IL [" " <measure> " ]
-indent left
-.
-.
-.TP
-.B .ILX [ CLEAR ]
-exit indent left
-.
-.
-.TP
-.B .IQ [ CLEAR ]
-quit any/all indents
-.
-.
-.TP
-.BI ".IR [" " <measure> " ]
-indent right
-.
-.
-.TP
-.B .IRX [ CLEAR ]
-exit indent right
-.
-.
-.TP
-.BI .JUSTIFY
-justify text to both margins
-.
-.
-.TP
-.BI .KERN
-automatic character pair kerning on/off
-.
-.
-.TP
-.BI .L_MARGIN
-set a left margin (page offset)
-.
-.
-.TP
-.BI .LEFT
-set line-by-line quad left
-.
-.
-.TP
-.BI .LL
-set a line length
-.
-.
-.TP
-.BI .LS
-set a linespacing (leading)
-.
-.
-.TP
-.BI .PAGE
-set explicit page dimensions and margins
-.
-.
-.TP
-.BI .PAGEWIDTH
-set a custom page width
-.
-.
-.TP
-.BI .PAGELENGTH
-set a custom page length
-.
-.
-.TP
-.BI .PAPER " <paper_type>"
-set common paper sizes (letter, A4, etc)
-.
-.
-.TP
-.BI .PT_SIZE
-set the point size
-.
-.
-.TP
-.BI .QUAD
-"justify" text left, centre, or right
-.
-.
-.TP
-.BI .R_MARGIN
-set a right margin
-.
-.
-.TP
-.BI .RIGHT
-set line-by-line quad right
-.
-.
-.TP
-.BI .SETBOLDER
-set the amount of emboldening
-.
-.
-.TP
-.BI .SETSLANT
-set the degree of slant
-.
-.
-.TP
-.BI .SPREAD
-force justify a line
-.
-.
-.TP
-.BI .SS
-set the sentence space size
-.
-.
-.TP
-.BI .T_MARGIN
-set a top margin
-.
-.
-.TP
-.BI ".TI [" " <measure> " ]
-temporary left indent
-.
-.
-.TP
-.BI .WS
-set the minimum word space size
-.
-.
-.\" --------------------------------------------------------------------
-.SH "DOCUMENTATION OF DETAILS"
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.SS "Details of Inline Escape Sequences in alphabetical Order"
-.\" --------------------------------------------------------------------
-.
-.TP
-.FONT B \[rs]*[ I <colorname> B ]
-begin using an initialized colour inline
-.
-.
-.TP
-.FONT B \[rs]*[BCK I " n" B ]
-move wards in a line
-.
-.
-.\" ======================================================================
-.\" BOLDER
-.\" ======================================================================
-.TP
-.B \[rs]*[BOLDER]
-.TQ
-.B \[rs]*[BOLDERX]
-Emboldening on/off
-.
-.RS
-.
-.P
-.B \[rs]*[BOLDER]
-begins emboldening type.
-.
-.B \[rs]*[BOLDERX]
-turns the feature off.
-.
-Both are inline escapes, therefore they should not appear as separate
-lines, but rather be embedded in text lines, like this:
-.RS
-.EX
-.FONT R "Not " B \[rs]*[BOLDER] R everything B \[rs]*[BOLDERX] R " is as it seems."
-.EE
-.RE
-.
-.P
-Alternatively, if you wanted the whole line emboldened, you should do
-.RS
-.EX
-.FONT B \[rs]*[BOLDER] R "Not everything is as it seems." B \[rs]*[BOLDERX]
-.EE
-.RE
-.
-Once
-.B \[rs]*[BOLDER]
-is invoked, it remains in effect until turned off.
-.
-.P
-Note: If you\[aq]re using the document processing macros with
-.BR "\%.PRINTSTYLE \%TYPEWRITE" ,
-.B mom
-ignores
-.B \[rs]*[BOLDER]
-requests.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" BU
-.\" ======================================================================
-.TP
-.FONT B \[rs]*[BU I " n" B ]
-move characters pairs closer together inline (related to macro
-.BR \%.KERN )
-.
-.
-.\" ======================================================================
-.\" COND
-.\" ======================================================================
-.TP
-.B \[rs]*[COND]
-.TQ
-.BI \[rs]*[CONDX]
-Pseudo-condensing on/off
-.
-.RS
-.
-.P
-.B \[rs]*[COND]
-begins pseudo-condensing type.
-.
-.B \[rs]*[CONDX]
-turns the feature off.
-.
-Both are inline escapes, therefore they should not appear as separate
-lines, but rather be embedded in text lines, like this:
-.RS
-.EX
-.FONT B \[rs]*[COND] I "Not everything is as it seems." B \[rs]*[CONDX]
-.EE
-.RE
-.B \%\[rs]*[COND]
-remains in effect until you turn it off with
-.BR \%\[rs]*[CONDX] .
-.
-.P
-IMPORTANT: You must turn
-.B \%\[rs]*[COND]
-off before making any changes to the point size of your type, either
-via the
-.B \%.PT_SIZE
-macro or with the
-.B \[rs]s
-inline escape.
-.
-If you wish the new point size to be pseudo-condensed, simply reinvoke
-.B \%\[rs]*[COND]
-afterwards.
-.
-Equally,
-.B \%\[rs]*[COND]
-must be turned off before changing the condense percentage with
-.BR \%.CONDENSE .
-.
-.P
-Note: If you\[aq]re using the document processing macros with
-.BR "\%.PRINTSTYLE \%TYPEWRITE" ,
-.B mom
-ignores
-.B \%\[rs]*[COND]
-requests.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" CONDSUP
-.\" ======================================================================
-.TP
-.FONT B \[rs]*[CONDSUP] R \*[Ellipsis] B \[rs]*[CONDSUPX]
-pseudo-condensed superscript
-.
-.
-.\" ======================================================================
-.\" DOWN
-.\" ======================================================================
-.TP
-.FONT B \[rs]*[DOWN I " n" B ]
-temporarily move downwards in a line
-.
-.
-.\" ======================================================================
-.\" EN-MARK
-.\" ======================================================================
-.TP
-.BI \[rs]*[EN-MARK]
-mark initial line of a range of line numbers (for use with line
-numbered endnotes)
-.
-.
-.\" ======================================================================
-.\" EXT
-.\" ======================================================================
-.TP
-.B \[rs]*[EXT]
-.TQ
-.B \[rs]*[EXTX]
-Pseudo-extending on/off
-.
-.RS
-.
-.P
-.B \[rs]*[EXT]
-begins pseudo-extending type.
-.
-.B \[rs]*[EXTX]
-turns the feature off.
-.
-Both are inline escapes, therefore they should not appear as separate
-lines, but rather be embedded in text lines, like this:
-.RS
-.EX
-.FONT B \[rs]*[EXT] I "Not everything is as it seems." B \[rs]*[EXTX]
-.EE
-.RE
-.B \[rs]*[EXT]
-remains in effect until you turn it off with
-.BR \[rs]*[EXTX] .
-.
-.P
-IMPORTANT: You must turn
-.B \%\[rs]*[EXT]
-off before making any changes to the point size of your type, either
-via the
-.B \%.PT_SIZE
-macro or with the
-.B \[rs]s
-inline escape.
-.
-If you wish the new point size to be
-.IR \%pseudo-extended ,
-simply reinvoke
-.B \%\[rs]*[EXT]
-afterwards.
-.
-Equally,
-.B \%\[rs]*[EXT]
-must be turned off before changing the extend percentage with
-.BR \%.EXTEND .
-.
-.P
-Note: If you are using the document processing macros with
-.BR "\%.PRINTSTYLE \%TYPEWRITE" ,
-.B mom
-ignores
-.B \%\[rs]*[EXT]
-requests.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" EXTSUP
-.\" ======================================================================
-.TP
-.FONT B \[rs]*[EXTSUP] R \*[Ellipsis] B \[rs]*[EXTSUPX]
-pseudo extended superscript
-.
-.
-.\" ======================================================================
-.\" FU
-.\" ======================================================================
-.TP
-.FONT B \[rs]*[FU I " n" B ]
-move characters pairs further apart inline (related to macro
-.BR .KERN )
-.
-.
-.\" ======================================================================
-.\" FWD
-.\" ======================================================================
-.TP
-.FONT B \[rs]*[FWD I " n" B ]
-move forward in a line
-.
-.
-.\" ======================================================================
-.\" LEADER
-.\" ======================================================================
-.TP
-.BI \[rs]*[LEADER]
-insert leaders at the end of a line
-.
-.
-.\" ======================================================================
-.\" RULE
-.\" ======================================================================
-.TP
-.BI \[rs]*[RULE]
-draw a full measure rule
-.
-.
-.\" ======================================================================
-.\" PT_SIZE
-.\" ======================================================================
-.TP
-.FONT B \[rs]*[SIZE I " n" B ]
-change the point size inline (related to macro
-.BR \%.PT_SIZE )
-.
-.
-.\" ======================================================================
-.\" SLANT
-.\" ======================================================================
-.TP
-.B \[rs]*[SLANT]
-.TQ
-.B \[rs]*[SLANTX]
-Pseudo italic on/off
-.
-.RS
-.
-.P
-.B \%\[rs]*[SLANT]
-begins
-.I pseudo-italicizing
-.IR type .
-.
-.B \%\[rs]*[SLANTX]
-turns the feature off.
-.
-Both are
-.I inline
-.IR escapes ,
-therefore they should not appear as separate lines, but rather be
-embedded in text lines, like this:
-.RS
-.EX
-.FONT R "Not " B \[rs]*[SLANT] R everything B \[rs]*[SLANTX] R " is as it seems."
-.EE
-.RE
-.
-.P
-Alternatively, if you wanted the whole line
-.IR pseudo-italicized ,
-you\[aq]d do
-.RS
-.EX
-.FONT B \[rs]*[SLANT] R "Not everything is as it seems." B \[rs]*[SLANTX]
-.EE
-.RE
-.
-.P
-Once
-.B \[rs]*[SLANT]
-is invoked, it remains in effect until turned off.
-.
-.P
-Note: If you\[aq]re using the document processing macros with
-.BR "\%.PRINTSTYLE \%TYPEWRITE" ,
-.B mom
-underlines pseudo-italics by default.
-.
-To change this behaviour, use the special macro
-.BR .SLANT_MEANS_SLANT .
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" ST
-.\" ======================================================================
-.TP
-.FONT B \[rs]*[ST I <number> B ] R \*[Ellipsis] B \[rs]*[ST I <number> B X]
-Mark positions of string tabs
-.
-.RS
-.P
-The
-.I quad
-direction must be
-.B LEFT
-or
-.B \%JUSTIFY
-(see
-.B \%.QUAD
-and
-.BR \%.JUSTIFY )
-or the
-.I no-fill mode
-set to
-.B LEFT
-in order for these inlines to function properly.
-.
-Please see
-.IR \%IMPORTANT ,
-below.
-.
-.P
-String tabs need to be marked off with inline escapes before being set
-up with the
-.B .ST
-macro.
-.
-Any input line may contain string tab markers.
-.
-.IR <number> ,
-above, means the numeric identifier of the tab.
-.
-.P
-The following shows a sample input line with string tab markers.
-.RS
-.EX
-.FONT B \[rs]*[ST1] R "Now is the time" B \[rs]*[ST1X] R " for all " B \[rs]*[ST2] R "good men" B \[rs]*ST2X] R " to come to the aid of the party."
-.EE
-.RE
-.
-.P
-String
-.I tab 1
-begins at the start of the line and ends after the word
-.IR \%time .
-.
-String
-.I tab 2
-starts at
-.I good
-and ends after
-.IR men .
-.
-.I Inline escapes
-(e.g.
-.I font
-or
-.I point size
-.IR changes ,
-or horizontal movements, including padding) are taken into account
-when
-.B mom
-determines the
-.I position
-and
-.I length
-of
-.I string
-.IR tabs .
-.
-.P
-Up to nineteen string tabs may be marked (not necessarily all on the
-same line, of course), and they must be numbered between 1 and 19.
-.
-.P
-Once string tabs have been marked in input lines, they have to be
-.I set
-with
-.BR .ST ,
-after which they may be called, by number, with
-.BR .TAB .
-.
-.P
-Note: Lines with string tabs marked off in them are normal input
-lines, i.e.\& they get printed, just like any input line.
-.
-If you want to set up string tabs without the line printing, use the
-.B \%.SILENT
-macro.
-.
-.P
-.I IMPORTANT:
-Owing to the way
-.B groff
-processes input lines and turns them into output lines, it is not
-possible for
-.B mom
-to
-.I guess
-the correct starting position of string tabs marked off in lines that
-are centered or set flush right.
-.
-.P
-Equally, she cannot guess the starting position if a line is fully
-justified and broken with
-.BR \%.SPREAD .
-.
-.P
-In other words, in order to use string tabs,
-.B LEFT
-must be active, or, if
-.B .QUAD LEFT
-or
-.B \%JUSTIFY
-are active, the line on which the
-.I string tabs
-are marked must be broken
-.I manually
-with
-.B .BR
-(but not
-.BR \%.SPREAD ).
-.
-.P
-To circumvent this behaviour, I recommend using the
-.B PAD
-to set up string tabs in centered or flush right lines.
-.
-Say, for example, you want to use a
-.I string tab
-to
-.I underscore
-the text of a centered line with a rule.
-.
-Rather than this,
-.RS
-.EX
-.B .CENTER
-.B \[rs]*[ST1]A line of text\[rs]*[ST1X]\[rs]c
-.B .EL
-.B .ST 1
-.B .TAB 1
-.B .PT_SIZE 24
-.B .ALD 3p
-.B \[rs]*[RULE]
-.B .RLD 3p
-.B .TQ
-.EE
-.RE
-you should do:
-.RS
-.EX
-.B .QUAD CENTER
-.B .PAD """#\[rs]*[ST1]A line of text\[rs]*[ST1X]#"""
-.B .EL
-.B .ST 1
-.B .TAB 1
-.B .PT_SIZE 24
-.B .ALD 3p
-.B \[rs]*[RULE] \[rs]" Note that you can\[aq]t use \[rs]*[UP] or \[rs]*[DOWN] with \[rs]*[RULE]\""
-.B .RLD 3p
-.B .TQ
-.EE
-.RE
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" SUP
-.\" ======================================================================
-.TP
-.FONT B \[rs]*[SUP] R \*[Ellipsis] B \[rs]*[SUPX]
-superscript
-.
-.
-.\" ======================================================================
-.\" TB+
-.\" ======================================================================
-.TP
-.B \[rs]*[TB+]
-Inline escape for
-.B .TN
-.RI ( "Tab Next" )
-.
-.
-.\" ======================================================================
-.\" UL
-.\" ======================================================================
-.TP
-.FONT B \[rs]*[UL] R \*[Ellipsis] B \[rs]*[ULX]
-invoke underlining inline (fixed width fonts only)
-.
-.
-.\" ======================================================================
-.\" UP
-.\" ======================================================================
-.TP
-.FONT B \[rs]*[UP I " n" B ]
-temporarily move upwards in a line
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Details of Macros in alphabetical Order"
-.\" --------------------------------------------------------------------
-.
-.\" ======================================================================
-.\" AUTOLEAD
-.\" ======================================================================
-.TP
-.BI .AUTOLEAD
-set the linespacing relative to the point size
-.
-.
-.\" ======================================================================
-.\" Bottom Margin
-.\" ======================================================================
-.TP
-.BI .B_MARGIN " <bottom margin>"
-Bottom Margin
-.
-.RS
-.
-.P
-Requires a unit of measure
-.
-.P
-.B .B_MARGIN
-sets a nominal position at the bottom of the page beyond which you
-don\[aq]t want your type to go.
-.
-When the bottom margin is reached,
-.B mom
-starts a new page.
-.
-.B .B_MARGIN requires a unit of measure.
-.
-Decimal fractions are allowed.
-.
-To set a nominal bottom margin of 3/4 inch, enter
-.RS
-.EX
-.B \&.B_MARGIN \&.75i
-.EE
-.RE
-.
-.P
-Obviously, if you haven\[aq]t spaced the type on your pages so that the
-last lines fall perfectly at the bottom margin, the margin will vary
-from page to page.
-.
-Usually, but not always, the last line of type that fits on a page
-before the bottom margin causes mom to start a new page.
-.
-.P
-Occasionally, owing to a peculiarity in
-.IR groff ,
-an extra line will fall below the nominal bottom margin.
-.
-If you\[aq]re using the document processing macros, this is unlikely to
-happen; the document processing macros are very hard-nosed about
-aligning bottom margins.
-.
-.P
-Note: The meaning of
-.B .B_MARGIN
-is slightly different when you\[aq]re using the document processing
-macros.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" Fallback Font
-.\" ======================================================================
-.TP
-.BI \%.FALLBACK_FONT " <fallback font> " "[ ABORT | WARN ]"
-Fallback Font
-.
-.RS
-.
-.P
-In the event that you pass an invalid argument to
-.B \%.FAMILY
-(i.e.\& a non-existent
-.IR family ),
-.BR mom ,
-by default, uses the
-.IR "fallback font" ,
-.B Courier Medium Roman
-.RB ( CR ),
-in order to continue processing your file.
-.
-.P
-If you\[aq]d prefer another
-.IR "fallback font" ,
-pass
-.B \%.FALLBACK_FONT
-the full
-.I family+font name
-of the
-.I font
-you\[aq]d like.
-.
-For example, if you\[aq]d rather the
-.I fallback font
-were
-.BR "Times Roman Medium Roman" ,
-.RS
-.EX
-.B .FALLBACK_FONT TR
-.EE
-.RE
-would do the trick.
-.
-.P
-.B Mom
-issues a warning whenever a
-.I font style set
-with
-.B .FT
-does not exist, either because you haven\[aq]t registered the style
-or because the
-.I font style
-does not exist in the current
-.I family set
-with
-.BR .FAMILY .
-.
-By default,
-.B \%mom
-then aborts, which allows you to correct the problem.
-.
-.P
-If you\[aq]d prefer that
-.B \%mom
-not abort on non-existent
-.IR fonts ,
-but rather continue processing using a
-.IR "fallback font" ,
-you can pass
-.B \%.FALLBACK_FONT
-the argument
-.BR WARN ,
-either by itself, or in conjunction with your chosen
-.IB "fallback font" .
-.
-.P
-Some examples of invoking
-.BR \%.FALLBACK_FONT :
-.
-.TP
-.B .FALLBACK_FONT WARN
-.B mom
-will issue a warning whenever you try to access a non-existent
-.I font
-but will continue processing your file with the default
-.IR "fallback font" ,
-.BR "Courier Medium Roman" .
-.
-.
-.TP
-.B .FALLBACK_FONT TR WARN
-.B \%mom
-will issue a warning whenever you try to access a non-existent
-.I font
-but will continue processing your file with a
-.I fallback font
-of
-.BR "Times Roman Medium Roman" ;
-additionally,
-.B TR
-will be the
-.I fallback font
-whenever you try to access a
-.I family
-that does not exist.
-.
-.TP
-.B .FALLBACK_FONT TR ABORT
-.B \%mom
-will abort whenever you try to access a non-existent
-.BR font ,
-and will use the
-.I fallback font
-.B TR
-whenever you try to access a
-.I family
-that does not exist.
-.
-If, for some reason, you want to revert to
-.BR ABORT ,
-just enter
-.B \%".FALLBACK_FONT ABORT"
-and
-.B mom
-will once again abort on
-.IR "font errors" .
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" FAM
-.\" ======================================================================
-.TP
-.BI .FAM " <family>"
-Type Family, alias of \fB.FAMILY\fR
-.
-.
-.\" ======================================================================
-.\" FAMILY
-.\" ======================================================================
-.TP
-.BI .FAMILY " <family>"
-Type Family, alias \fB.FAM\fR
-.
-.RS
-.
-.P
-.B .FAMILY
-takes one argument: the name of the
-.I family
-you want.
-.
-.I Groff
-comes with a small set of basic families, each identified by a 1-,
-2- or 3-letter mnemonic.
-.
-The standard families are:
-.RS
-.EX
-.B "A   = Avant Garde"
-.B "BM  = Bookman"
-.B "H   = Helvetica"
-.B "HN  = Helvetica Narrow"
-.B "N   = New Century Schoolbook"
-.B "P   = Palatino"
-.B "T   = Times Roman"
-.B "ZCM = Zapf Chancery"
-.EE
-.RE
-.
-.P
-The argument you pass to
-.B .FAMILY
-is the identifier at left, above.
-.
-For example, if you want
-.BR Helvetica ,
-enter
-.RS
-.EX
-.B .FAMILY H
-.EE
-.RE
-.
-.P
-Note: The font macro
-.RB ( .FT )
-lets you specify both the type
-.I family
-and the desired font with a single macro.
-.
-While this saves a few
-keystrokes, I recommend using
-.B .FAMILY for
-.IR family ,
-and
-.B .FT for
-.IR font ,
-except where doing so is genuinely inconvenient.
-.
-.BR ZCM ,
-for example,
-only exists in one style:
-.B Italic
-.RB ( I ).
-.
-.P
-Therefore,
-.RS
-.EX
-.B .FT ZCMI
-.EE
-.RE
-makes more sense than setting the
-.I family
-to
-.BR ZCM ,
-then setting the
-.I font
-to
-.IR I .
-.
-.P
-Additional note: If you are running a version of groff lower than
-1.19.2, you must follow all
-.B .FAMILY
-requests with a
-.B FT
-request, otherwise
-.B mom
-will set all type up to the next
-.B .FT
-request in the fallback font.
-.
-.P
-If you are running a version of groff greater than or equal to 1.19.2,
-when you invoke the
-.B .FAMILY
-macro,
-.B mom
-.I remembers
-the font style
-.BR ( Roman ,
-.BR Italic ,
-etc) currently in use (if the font style exists in the new
-.IR family )
-and will continue to use the same font style in the new family.
-For example:
-.RS
-.EX
-.BI ".FAMILY BM " "\[rs]"" Bookman family"
-.BI ".FT I " "\[rs]"" Medium Italic"
-.I <some text> \[rs]" Bookman Medium Italic
-.BI ".FAMILY H " "\[rs]"" Helvetica family"
-.I <more text> \[rs]" Helvetica Medium Italic
-.EE
-.RE
-.
-.P
-However, if the font style does not exist in the new family,
-.B mom
-will set all subsequent type in the fallback font (by default,
-.B Courier Medium
-.BR Roman )
-until she encounters a
-.B .FT
-request that\[aq]s valid for the
-.IR family .
-.
-.P
-For example, assuming you don\[aq]t have the font
-.B Medium Condensed Roman
-.RB  ( mom
-extension
-.IR CD )
-in the
-.I Helvetica
-.IR family :
-.RS
-.EX
-.BI ".FAMILY UN " "\[rs]"" Univers family"
-.BI ".FT CD " "\[rs]"" Medium Condensed"
-.I <some text> \[rs]" Univers Medium Condensed
-.BI ".FAMILY H " "\[rs]"" Helvetica family"
-.I <more text> \[rs]" Courier Medium Roman!
-.EE
-.RE
-.
-.P
-In the above example, you must follow
-.B .FAMILY H
-with a
-.B .FT
-request that\[aq]s valid for
-.BR Helvetica .
-.
-.P
-Please see the Appendices,
-.I Adding fonts to
-.IR groff ,
-for information on adding fonts and families to groff, as well as to
-see a list of the extensions
-.B mom
-provides to
-.IR groff \[aq]s
-basic
-.BR R ,
-.BR I ,
-.BR B ,
-.B BI
-styles.
-.
-.P
-Suggestion: When adding
-.I families to
-.IR groff ,
-I recommend following the established standard for the naming families
-and fonts.
-.
-For example, if you add the
-.B Garamond
-family, name the font files
-.RS
-.EX
-.B GARAMONDR
-.B GARAMONDI
-.B GARAMONDB
-.B GARAMONDBI
-.EE
-.RE
-.
-.B GARAMOND then becomes a valid
-.I family name
-you can pass to
-.BR .FAMILY .
-.
-(You could, of course, shorten
-.B GARAMOND
-to just
-.BR G ,
-or
-.BR GD .)
-.BR R ,
-.BR I ,
-.BR B ,
-and
-.B BI
-after
-.B GARAMOND
-are the
-.IR roman ,
-.IR italic ,
-.I bold
-and
-.I bold-italic
-fonts respectively.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" FONT
-.\" ======================================================================
-.TP
-.BI ".FONT R | B | BI | " "<any other valid font style>"
-Alias to
-.B .FT
-.
-.
-.\" ======================================================================
-.\" FT
-.\" ======================================================================
-.TP
-.BI ".FT R | B | BI | " "<any other valid font style>"
-Set font
-.
-.RS
-.
-.P
-By default,
-.I groff
-permits
-.B .FT
-to take one of four possible arguments specifying the desired font:
-.RS
-.EX
-.B R = (Medium) Roman
-.B I = (Medium) Italic
-.B B = Bold (Roman)
-.B BI = Bold Italic
-.EE
-.RE
-.
-.P
-For example, if your
-.I family
-is
-.BR Helvetica ,
-entering
-.RS
-.EX
-.B .FT B
-.EE
-.RE
-will give you the
-.I Helvetica bold
-.IR font .
-.
-If your
-.I family
-were
-.BR \%Palatino ,
-you\[aq]d get the
-.I \%Palatino bold
-.IR font .
-.
-.P
-.B Mom
-considerably extends the range of arguments you can pass to
-.BR .FT ,
-making it more convenient to add and access fonts of differing weights
-and shapes within the same family.
-.
-.P
-Have a look here for a list of the weight/style arguments
-.B mom
-allows.
-.
-Be aware, though, that you must have the fonts, correctly installed
-and named, in order to use the arguments.
-.
-(See
-.I Adding fonts to groff
-for instructions and information.)
-.
-Please also read the
-.I ADDITIONAL NOTE
-found in the description of the
-.B \%.FAMILY
-macro.
-.
-.P
-How
-.B mom
-reacts to an invalid argument to
-.B .FT
-depends on which version of groff you\[aq]re using.
-.
-If your
-.I groff version
-is greater than or equal to 1.19.2,
-.B mom
-will issue a warning and, depending on how you\[aq]ve set up the fallback
-font, either continue processing using the fallback font, or abort
-(allowing you to correct the problem).  If your
-.I groff version
-is less than 1.19.2,
-.B mom
-will silently continue processing, using either the fallback font or
-the font that was in effect prior to the invalid
-.B .FT
-call.
-.
-.P
-.B .FT
-will also accept, as an argument, a full
-.I family
-and
-.I font
-.IR name .
-.
-.P
-For example,
-.RS
-.EX
-.B .FT HB
-.EE
-.RE
-will set subsequent type in
-.I Helvetica
-.IR Bold .
-.
-.P
-However, I strongly recommend keeping
-.I family
-and
-.I font
-separate except where doing so is genuinely inconvenient.
-.
-.P
-For inline control of
-.IR fonts ,
-see
-.I Inline
-.IR Escapes ,
-font control.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" Hanging Indent
-.\" ======================================================================
-.TP
-.BI "\%.HI [" " <measure> " ]
-Hanging indent \[em] the optional argument requires a unit of measure.
-.
-.RS
-.
-.P
-A hanging indent looks like this:
-.RS
-.EX
-\fB  The thousand injuries of Fortunato I had borne as best I
-    could, but when he ventured upon insult, I vowed
-    revenge.  You who so well know the nature of my soul
-    will not suppose, however, that I gave utterance to a
-    threat, at length I would be avenged\*[Ellipsis]
-.EE
-.RE
-.
-The first line of text
-.I hangs
-outside the
-.IR "left margin" .
-.
-.P
-In order to use
-.IR "hanging indents" ,
-you must first have a
-.I left indent
-active (set with either
-.B .IL
-or
-.BR .IB ).
-.
-.B Mom
-will not hang text outside the
-.I left margin set
-with
-.B \%.L_MARGIN
-or outside the
-.I left margin
-of a
-.IR \%tab .
-.
-.P
-The first time you invoke
-.BR .HI ,
-you must give it a
-.BR measure .
-.
-If you want the first line of a paragraph to
-.IR "hang by" ,
-say,
-.IR "1 pica" ,
-do
-.RS
-.EX
-.B ".IL 1P"
-.B ".HI 1P"
-.EE
-.RE
-.
-Subsequent invocations of
-.B \%.HI
-do not require you to supply a
-.IR measure ;
-.B mom
-keeps track of the last measure you gave it.
-.
-.P
-Generally speaking, you should invoke
-.B .HI
-immediately prior to the line you want hung (i.e.\& without any
-intervening control lines).
-.
-And because
-.I hanging indents
-affect only one line, there\[aq]s no need to turn them off.
-.
-.P
-.I IMPORTANT:
-Unlike
-.BR IL ,
-.B IR
-and
-.BR IB ,
-measures given to
-.B .HI
-are NOT additive.
-.
-Each time you pass a measure to
-.B .HI ,
-the measure is treated literally.
-.
-.B
-.I Recipe:
-A numbered list using
-.I hanging indents
-.
-.P
-.I Note:
-.B mom
-has macros for setting lists.
-.
-This recipe exists to demonstrate the use of
-.I hanging indents
-only.
-.RS
-.EX
-.B ".PAGE 8.5i 11i 1i 1i 1i 1i"
-.B ".FAMILY  T"
-.B ".FT      R"
-.B ".PT_SIZE 12"
-.B ".LS      14"
-.B ".JUSTIFY"
-.B ".KERN"
-.B ".SS 0"
-.B ".IL \[rs]w'\[rs]0\[rs]0.'"
-.B ".HI \[rs]w'\[rs]0\[rs]0.'"
-\fB1.\[rs]0The most important point to be considered is whether the
-answer to the meaning of Life, the Universe, and Everything
-really is 42.  We have no-one\[aq]s word on the subject except
-Mr. Adams\[aq].
-.B .HI
-2.\[rs]0If the answer to the meaning of Life, the Universe,
-and Everything is indeed 42, what impact does this have on
-the politics of representation?  42 is, after all not a
-prime number.  Are we to infer that prime numbers don\[aq]t
-deserve equal rights and equal access in the universe?
-.B .HI
-3.\[rs]0If 42 is deemed non-exclusionary, how do we present it
-as the answer and, at the same time, forestall debate on its
-exclusionary implications?
-.EE
-.RE
-.
-.P
-First, we invoke a left indent with a measure equal to the width of 2
-figures spaces plus a period (using the \[rs]w inline escape).
-.
-At this point, the left indent is active; text afterwards would
-normally be indented.
-.
-However, we invoke a hanging indent of exactly the same width, which
-hangs the first line (and first line only!\&) to the left of the indent
-by the same distance (in this case, that means \[lq]out to the left
-margin\[rq]).
-.
-Because we begin the first line with a number, a period, and a figure
-space, the actual text
-.RI ( "The most important point\*[Ellipsis]" )
-starts at exactly the same spot as the indented lines that follow.
-.
-.P
-Notice that subsequent invocations of
-.B .HI
-don\[aq]t require a
-.I measure
-to be given.
-.
-.P
-Paste the example above into a file and preview it with
-.RS
-.EX
-.B pdfmom filename.mom | ps2pdf \- filename.pdf
-.EE
-.RE
-to see hanging indents in action.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" IB - INDENT BOTH
-.\" ======================================================================
-.TP
-.BI "\%.IB [" " <left measure> <right measure> " ]
-Indent both \[em] the optional argument requires a unit of measure
-.
-.RS
-.
-.P
-.B .IB
-allows you to set or invoke a left and a right indent at the same time.
-.
-.P
-At its first invocation, you must supply a measure for both indents;
-at subsequent invocations when you wish to supply a measure, both must
-be given again.
-.
-As with
-.B .IL
-and
-.BR .IR ,
-the measures are added to the values previously passed to the
-macro.
-.
-Hence, if you wish to change just one of the values, you must give an
-argument of zero to the other.
-.
-.P
-.I A word of advice:
-If you need to manipulate left and right indents separately, use a
-combination of
-.B .IL
-and
-.B .IR
-instead of
-.BR .IB .
-.
-You\[aq]ll save yourself a lot of grief.
-.
-.P
-A
-.I minus sign
-may be prepended to the arguments to subtract from their current
-values.
-.
-The \[rs]w inline escape may be used to specify text-dependent
-measures, in which case no unit of measure is required.
-.
-For example,
-.RS
-.EX
-.B .IB \[rs]w\[aq]margarine\[aq] \[rs]w\[aq]jello\[aq]
-.EE
-.RE
-left indents text by the width of the word
-.I margarine
-and right indents by the width of
-.IR jello .
-.
-.P
-Like
-.B .IL
-and
-.BR .IR ,
-.B .IB
-with no argument indents by its last active values.
-.
-See the brief explanation of how mom handles indents for more details.
-.
-.P
-.I Note:
-Calling a
-.I tab
-(with
-.BR ".TAB <n>" )
-automatically cancels any active indents.
-.
-.P
-.I Additional note:
-Invoking
-.B .IB
-automatically turns off
-.B .IL
-and
-.BR .IR .
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" IL - INDENT LEFT
-.\" ======================================================================
-.TP
-.BI "\%.IL [" " <measure> " ]
-Indent left \[em] the optional argument requires a unit of measure
-.
-.RS
-.
-.P
-.B .IL
-indents text from the left margin of the page, or if you\[aq]re in a
-.IR tab ,
-from the left edge of the
-.IR tab
-.
-Once
-.I IL
-is on, the
-.I left indent
-is applied uniformly to every subsequent line of text, even if you
-change the line length.
-.
-.P
-The first time you invoke
-.BR .IL ,
-you must give it a measure.
-.
-Subsequent invocations with a measure add to the previous measure.
-.
-A minus sign may be prepended to the argument to subtract from the
-current measure.
-.
-The
-.B \[rs]w
-inline escape may be used to specify a text-dependent measure, in
-which case no unit of measure is required.
-.
-For example,
-.RS
-.EX
-.B .IL \[rs]w'margarine'
-.EE
-.RE
-indents text by the width of the word
-.IR margarine .
-.
-.P
-With no argument,
-.B .IL
-indents by its last active value.
-.
-See the brief explanation of how
-.B mom
-handles indents for more details.
-.
-.P
-.I Note:
-Calling a
-.I tab
-(with
-.BR ".TAB <n>" )
-automatically cancels any active indents.
-.
-.P
-.I Additional note:
-Invoking
-.B .IL
-automatically turns off
-.BR IB .
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" IQ - quit any/all indents
-.\" ======================================================================
-.TP
-.BI "\%.IQ [" " <measure> " ]
-IQ \[em] quit any/all indents
-.
-.RS
-.
-.P
-.I IMPORTANT NOTE:
-The original macro for quitting all indents was
-.BR .IX .
-.
-This usage has been deprecated in favour of
-.BR IQ .
-.
-.B .IX
-will continue to behave as before, but
-.B mom
-will issue a warning to
-.I stderr
-indicating that you should update your documents.
-.
-.P
-As a consequence of this change,
-.BR .ILX ,
-.B .IRX
-and
-.B .IBX
-may now also be invoked as
-.BR .ILQ ,
-.B .IRQ
-and
-.BR .IBQ .
-.
-Both forms are acceptable.
-.
-.P
-Without an argument, the macros to quit indents merely restore your
-original margins and line length.
-.
-The measures stored in the indent macros themselves are saved so you
-can call them again without having to supply a measure.
-.
-.P
-If you pass these macros the optional argument
-.BR CLEAR ,
-they not only restore your original left margin and line length, but
-also clear any values associated with a particular indent style.
-.
-The next time you need an indent of the same style, you have to supply
-a measure again.
-.
-.P
-.BR ".IQ CLEAR" ,
-as you\[aq]d suspect, quits and clears the values for all indent
-styles at once.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" IR - INDENT RIGHT
-.\" ======================================================================
-.TP
-.BI "\%.IR [" " <measure> " ]
-Indent right \[em] the optional argument requires a unit of measure
-.
-.RS
-.
-.P
-.B .IR
-indents text from the
-.I right margin
-of the page, or if you\[aq]re in a
-.IR tab ,
-from the end of the
-.IR tab .
-.
-.P
-The first time you invoke
-.BR .IR ,
-you must give it a measure.
-.
-Subsequent invocations with a measure add to the previous indent
-measure.
-.
-A
-.I minus sign
-may be prepended to the argument to subtract from the current indent
-measure.
-.
-The \[rs]w inline escape may be used to specify a text-dependent
-measure, in which case no
-.I unit of measure
-is required.
-.
-For example,
-.RS
-.EX
-.B .IR \[rs]w'jello'
-.EE
-.RE
-indents text by the width of the word
-.IR jello .
-.
-.P
-With no argument,
-.B .IR
-indents by its last active value.
-.
-See the brief explanation of how
-.B mom
-handles indents for more details.
-.
-.P
-.I Note:
-Calling a
-.I tab
-(with
-.BR "\%.TAB <n>" )
-automatically cancels any active indents.
-.
-.P
-.I Additional note:
-Invoking
-.B .IR
-automatically turns off
-.BR IB .
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" Left Margin
-.\" ======================================================================
-.TP
-.BI .L_MARGIN " <left margin>"
-Left Margin
-.
-.RS
-.
-.P
-L_MARGIN establishes the distance from the left edge of the printer
-sheet at which you want your type to start.
-.
-It may be used any time, and remains in effect until you enter a new value.
-.
-.P
-Left indents and tabs are calculated from the value you pass to
-.BR .L_MARGIN ,
-hence it\[aq]s always a good idea to invoke it before starting any serious
-typesetting.
-.
-A unit of measure is required.
-.
-Decimal fractions are allowed.
-.
-Therefore, to set the left margin at 3 picas (1/2 inch), you\[aq]d enter either
-.RS
-.EX
-.B .L_MARGIN 3P
-.EE
-.RE
-or
-.RS
-.EX
-.B .L_MARGIN .5i
-.EE
-.RE
-.
-.P
-If you use the macros
-.BR .PAGE ,
-.B .PAGEWIDTH
-or
-.B .PAPER
-without invoking
-.B .L_MARGIN
-(either before or afterwards),
-.B mom
-automatically sets
-.B .L_MARGIN
-to
-.IR "1 inch" .
-.
-.P
-Note:
-.B .L_MARGIN
-behaves in a special way when you\[aq]re using the document processing
-macros.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" MCO - BEGIN MULTI-COLUMN SETTING
-.\" ======================================================================
-.TP
-.B .MCO
-Begin multi-column setting.
-.
-.RS
-.P
-.B .MCO
-.RI ( "Multi-Column On" )
-is the
-.I macro
-you use to begin
-.IR "multi-column setting" .
-.
-It marks the current baseline as the top of your columns, for use
-later with
-.BR .MCR .
-.
-See the introduction to columns for an explanation of
-.I multi-columns
-and some sample input.
-.
-.P
-.I Note:
-Do not confuse
-.B .MCO
-with the
-.B .COLUMNS
-macro in the document processing macros.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" MCR - RETURN TO TOP OF COLUMN
-.\" ======================================================================
-.TP
-.B \%.MCR
-Once you\[aq]ve turned
-.I multi-columns
-on (with
-.BR \%.MCO ),
-.BR .MCR ,
-at any time, returns you to the
-.IR "top of your columns".
-.
-.
-.\" ======================================================================
-.\" MCX - EXIT MULTI-COLUMNS
-.\" ======================================================================
-.TP
-.BI "\%.MCX [ " "<distance to advance below longest column>" " ]"
-Optional argument requires a unit of measure.
-.
-.RS
-.
-.P
-.B .MCX
-takes you out of any
-.I tab
-you were in (by silently invoking
-.BR .TQ )
-and advances to the bottom of the longest column.
-.
-.P
-Without an argument,
-.B .MCX
-advances
-.I 1 linespace
-below the longest column.
-.
-.P
-Linespace, in this instance, is the leading in effect at the moment
-.B .MCX
-is invoked.
-.
-.P
-If you pass the
-.I <distance>
-argument to
-.BR .MCX ,
-it advances
-.I 1 linespace
-below the longest column (see above)
-.I PLUS
-the distance specified by the argument.
-.
-The argument requires a unit of measure; therefore, to advance an
-extra 6 points below where
-.B \%.MCX
-would normally place you, you\[aq]d enter
-.RS
-.EX
-.B .MCX 6p
-.EE
-.RE
-.
-.P
-.I Note:
-If you wish to advance a precise distance below the baseline of the
-longest column, use
-.B .MCX
-with an argument of
-.B 0
-(zero; no
-.I unit of measure
-required) in conjunction with the
-.B \%.ALD
-macro, like this:
-.RS
-.EX
-.B .MCX 0
-.B .ALD 24p
-.EE
-.RE
-.
-The above advances to precisely
-.I 24 points
-below the baseline of the longest column.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" Start a new Page
-.\" ======================================================================
-.TP
-.B .NEWPAGE
-.
-.RS
-.
-.P
-Whenever you want to start a new page, use
-.BR .NEWPAGE ,
-by itself with no argument.
-.
-.B Mom
-will finish up processing the current page and move you to the top of
-a new one (subject to the top margin set with
-.BR .T_MARGIN ).
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" Page
-.\" ======================================================================
-.TP
-.BI ".PAGE " <width> " [ " <length> " [ " <lm> " [ " <rm> " [ " \
-             <tm> " [ " <bm> " ] ] ] ] ]"
-.
-.RS
-.
-.P
-All arguments require a unit of measure
-.
-.P
-.I IMPORTANT:
-If you\[aq]re using the document processing macros,
-.B .PAGE
-must come after
-.BR .START .
-.
-Otherwise, it should go at the top of a document, prior to any text.
-.
-And remember, when you\[aq]re using the document processing macros, top
-margin and bottom margin mean something slightly different than when
-you\[aq]re using just the typesetting macros (see Top and bottom margins
-in document processing).
-.
-.P
-.B .PAGE
-lets you establish paper dimensions and page margins with a single
-macro.
-.
-The only required argument is page width.
-.
-The rest are
-optional, but they must appear in order and you can\[aq]t skip over
-any.
-.
-.IR <lm> ,
-.IR <rm> ,
-.I <tm>
-and
-.I <bm>
-refer to the left, right, top and bottom margins respectively.
-.
-.P
-Assuming your page dimensions are 11 inches by 17 inches, and that\[aq]s
-all you want to set, enter
-.RS
-.EX
-.B .PAGE 11i 17i
-.EE
-.RE
-.
-If you want to set the left margin as well, say, at 1 inch,
-.B PAGE
-would look like this:
-.RS
-.EX
-.B .PAGE 11i 17i 1i
-.EE
-.RE
-.
-.P
-Now suppose you also want to set the top margin, say, at 1\(en1/2 inches.
-.
-.I <tm>
-comes after
-.I <rm>
-in the optional arguments, but you can\[aq]t skip over any arguments,
-therefore to set the top margin, you must also give a right margin.
-.
-The
-.B .PAGE
-macro would look like this:
-.RS
-.EX
-\f[CB].PAGE 11i 17i 1i 1i 1.5i
-                 |   |
-required right---+   +---top margin
-        margin\f[R]
-.EE
-.RE
-.
-.P
-Clearly,
-.B .PAGE
-is best used when you want a convenient way to tell
-.B mom
-just the dimensions of your printer sheet (width and length), or when
-you want to tell her everything about the page (dimensions and all the
-margins), for example
-.RS
-.EX
-.B .PAGE 8.5i 11i 45p 45p 45p 45p
-.EE
-.RE
-.
-This sets up an 8\(12 by 11 inch page with margins of 45 points
-(5/8-inch) all around.
-.
-.P
-Additionally, if you invoke
-.B .PAGE
-with a top margin argument, any macros you invoke after
-.B .PAGE
-will almost certainly move the baseline of the first line of text down
-by one linespace.
-.
-To compensate, do
-.RS
-.EX
-.B .RLD 1v
-.EE
-.RE
-immediately before entering any text, or, if it\[aq]s feasible, make
-.B .PAGE
-the last macro you invoke prior to entering text.
-.
-.P
-Please read the
-.I Important note
-on page dimensions and papersize for information on ensuring groff
-respects your
-.B .PAGE
-dimensions and margins.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" Page Length
-.\" ======================================================================
-.TP
-.BI .PAGELENGTH " <length of printer sheet>"
-tells
-.B mom
-how long your printer sheet is.
-.
-It works just like
-.BR .PAGEWIDTH .
-.
-.RS
-.
-.P
-Therefore, to tell
-.B mom
-your printer sheet is 11 inches long, you enter
-.RS
-.EX
-.B .PAGELENGTH 11i
-.EE
-.RE
-.
-Please read the important note on page dimensions and papersize for
-information on ensuring groff respects your
-.IR PAGELENGTH .
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" Page Width
-.\" ======================================================================
-.TP
-.BI .PAGEWIDTH " <width of printer sheet>"
-.
-.RS
-.
-.P
-The argument to
-.B .PAGEWIDTH
-is the width of your printer sheet.
-.
-.P
-.B .PAGEWIDTH
-requires a unit of measure.
-.
-Decimal fractions are allowed.
-.
-Hence, to tell
-.B mom
-that the width of your printer sheet is 8\(12 inches, you enter
-.RS
-.EX
-\&.PAGEWIDTH 8.5i
-.EE
-.RE
-.
-.P
-Please read the Important note on page dimensions and papersize for
-information on ensuring groff respects your
-.IR PAGEWIDTH .
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" Paper
-.\" ======================================================================
-.TP
-.BI .PAPER " <paper type>"
-provides a convenient way to set the page dimensions for some common
-printer sheet sizes.
-.
-The argument
-.I <paper type>
-can be one of:
-.BR LETTER ,
-.BR LEGAL ,
-.BR STATEMENT ,
-.BR TABLOID ,
-.BR LEDGER ,
-.BR FOLIO ,
-.BR QUARTO ,
-.BR EXECUTIVE ,
-.BR 10x14 ,
-.BR A3 ,
-.BR A4 ,
-.BR A5 ,
-.BR B4 ,
-.BR B5 .
-.
-.
-.TP
-.B .PRINTSTYLE
-.
-.
-.\" ======================================================================
-.\" PT_SIZE - POINT SIZE OF TYPE
-.\" ======================================================================
-.TP
-.BI .PT_SIZE " <size of type in points>"
-Point size of type, does not require a
-.IR "unit of measure" .
-.
-.RS
-.
-.P
-.B \%.PT_SIZE
-.RI ( "Point Size" )
-takes one argument: the
-.I size of type
-in
-.IR points .
-.
-Unlike most other macros that establish the
-.I size
-or
-.I measure
-of something,
-.B \%.PT_SIZE
-does not require that you supply a
-.I unit of measure
-since it\[aq]s a near universal convention that
-.I type size
-is measured in
-.IR points .
-.
-Therefore, to change the
-.I type size
-to, say,
-.IR "11 points" ,
-enter
-.RS
-.EX
-.B .PT_SIZE 11
-.EE
-.RE
-.
-.I Point sizes
-may be
-.I fractional
-(e.g.\&
-.I 10.25
-or
-.IR 12.5 ).
-.
-.P
-You can prepend a
-.I plus
-or a
-.I minus sign
-to the argument to
-.BR \%.PT_SIZE ,
-in which case the
-.I point size
-will be changed by
-.I +
-or
-.I \-
-the original value.
-.
-For example, if the
-.I point size
-is
-.I 12 ,
-and you want
-.I 14 ,
-you can do
-.RS
-.EX
-.B .PT_SIZE +2
-.EE
-.RE
-then later reset it to
-.I 12
-with
-.RS
-.EX
-.B .PT_SIZE \-2
-.EE
-.RE
-.
-The
-.I size of type
-can also be changed inline.
-.
-.P
-.I Note:
-It is unfortunate that the
-.B \%pic
-preprocessor has already taken the name, PS, and thus
-.IR mom \[aq]s
-macro for setting
-.I point sizes
-can\[aq]t use it.
-.
-However, if you aren\[aq]t using
-.BR pic ,
-you might want to alias
-.B \%.PT_SIZE
-as
-.BR .PS ,
-since there\[aq]d be no conflict.
-.
-For example
-.RS
-.EX
-.B .ALIAS PS PT_SIZE
-.EE
-.RE
-would allow you to set
-.I point sizes
-with
-.BR .PS .
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" Right Margin
-.\" ======================================================================
-.TP
-.BI .R_MARGIN " <right margin>"
-Right Margin
-.
-.RS
-.
-.P
-Requires a unit of measure.
-.
-.P
-IMPORTANT:
-.BR .R_MARGIN ,
-if used, must come after
-.BR .PAPER ,
-.BR .PAGEWIDTH ,
-.BR .L_MARGIN ,
-and/or
-.B .PAGE
-(if a right margin isn\[aq]t given to PAGE).
-.
-The reason is that
-.B .R_MARGIN
-calculates line length from the overall page dimensions and the left margin.
-.
-.P
-Obviously, it can\[aq]t make the calculation if it doesn\[aq]t know the page
-width and the left margin.
-.
-.P
-.B .R_MARGIN
-establishes the amount of space you want between the end of typeset
-lines and the right hand edge of the printer sheet.
-.
-In other words, it sets the line length.
-.B .R_MARGIN
-requires a unit of measure.
-.
-Decimal fractions are allowed.
-.
-.P
-The line length macro (LL) can be used in place of
-.BR .R_MARGIN .
-.
-In either case, the last one invoked sets the line length.
-.
-The choice of which to use is up to you.
-.
-In some instances, you may find it easier to think of a section of
-type as having a right margin.
-.
-In others, giving a line length may make more sense.
-.
-.P
-For example, if you\[aq]re setting a page of type you know should have
-6-pica margins left and right, it makes sense to enter a left and
-right margin, like this:
-.RS
-.EX
-.B .L_MARGIN 6P
-.B .R_MARGIN 6P
-.EE
-.RE
-.
-.P
-That way, you don\[aq]t have to worry about calculating the line
-length.
-.
-On the other hand, if you know the line length for a patch of type
-should be 17 picas and 3 points, entering the line length with LL is
-much easier than calculating the right margin, e.g.\&
-.RS
-.EX
-.B .LL 17P+3p
-.EE
-.RE
-.
-.P
-If you use the macros
-.BR .PAGE ,
-.B .PAGEWIDTH
-or
-.B PAPER
-without invoking
-.B .R_MARGIN
-afterwards,
-.B mom
-automatically sets
-.B .R_MARGIN
-to
-.IR "1 inch" .
-.
-If you set a line length after these macros (with
-.BR .LL ),
-the line length calculated by
-.B .R_MARGIN
-is, of course, overridden.
-.
-.P
-Note:
-.B .R_MARGIN
-behaves in a special way when you\[aq]re using the document processing
-macros.
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" ST - Set String Tabs
-.\" ======================================================================
-.TP
-.FONT B .ST I " <tab number> " B "L | R | C | J [ QUAD ]"
-.
-.RS
-.P
-After
-.I string tabs
-have been marked off on an input line (see
-.BR \[rs]*[ST]\*[Ellipsis]\[rs]*[STX] ),
-you need to
-.I set
-them by giving them a direction and, optionally, the
-.B \%QUAD
-argument.
-.
-.P
-In this respect,
-.B .ST
-is like
-.B \%.TAB_SET
-except that you don\[aq]t have to give
-.B .ST
-an indent or a line length (that\[aq]s already taken care of, inline,
-by
-.BR \[rs]*[ST]\*[Ellipsis]\[rs]*[STX] ).
-.
-.P
-If you want string
-.I tab 1
-to be
-.BR \%left ,
-enter
-.RS
-.EX
-.B .ST 1 L
-.EE
-.RE
-.
-If you want it to be
-.I \%left
-and
-.IR \%filled ,
-enter
-.RS
-.EX
-.B .ST 1 L \%QUAD
-.EE
-.RE
-.
-If you want it to be justified, enter
-.RS
-.EX
-.B .ST 1 J
-.EE
-.RE
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" TAB - Call Tabs
-.\" ======================================================================
-.TP
-.BI \%.TAB " <tab number>"
-After
-.I tabs
-have been defined (either with
-.B \%.TAB_SET
-or
-.BR .ST ),
-.B \%.TAB
-moves to whatever
-.I tab number
-you pass it as an argument.
-.
-.RS
-.
-.P
-For example,
-.RS
-.EX
-.B \%.TAB 3
-.EE
-.RE
-moves you to
-.IR "\%tab 3" .
-.
-.P
-Note:
-.B \%.TAB
-breaks the line preceding it and advances 1 linespace.
-.
-Hence,
-.RS
-.EX
-.B .TAB 1
-.B  A line of text in tab 1.
-.B .TAB 2
-.B  A line of text in tab 2.
-.EE
-.RE
-produces, on output
-.RS
-.EX
-.B "A line of text in tab 1."
-.B "                             A line of text in tab 2."
-.EE
-.RE
-.
-.P
-If you want the tabs to line up, use
-.B .TN
-.RI ( "Tab Next" )
-or, more conveniently, the inline escape \[rs]*[TB+]:
-.RS
-.EX
-\fB.TAB 1
-A line of text in tab 1.\[rs]*[TB+]
-A line of text in tab 2.
-.EE
-.RE
-which produces
-.RS
-.EX
-.B "A line of text in tab 1.   A line of text in tab 2."
-.EE
-.RE
-.
-.P
-If the text in your tabs runs to several lines, and you want the first
-lines of each tab to align, you must use the multi-column macros.
-.
-.P
-.I Additional note:
-Any indents in effect prior to calling a tab are automatically turned
-off by
-.BR TAB .
-.
-If you were happily zipping down the page with a left indent of
-.I 2 picas
-turned on, and you call a
-.I tab
-whose indent from the left margin is
-.IR "6 picas" ,
-your new distance from the
-.I left margin
-will be
-.IR "6 picas" ,
-not
-I 6 picas plus the 2 pica
-indent.
-.
-.P
-.I \%Tabs
-are not by nature columnar, which is to say that if the text inside a
-.I tab
-runs to several lines, calling another
-.I tab
-does not automatically move to the baseline of the first line in the
-.IR "previous tab" .
-.
-To demonstrate:
-.RS
-.EX
-\f[B]TAB 1
-Carrots
-Potatoes
-Broccoli
-\&.TAB 2
-$1.99/5 lbs
-$0.25/lb
-$0.99/bunch
-.EE
-.RE
-produces, on output
-.RS
-.EX
-\fBCarrots
-Potatoes
-Broccoli
-            $1.99/5 lbs
-            $0.25/lb
-            $0.99/bunch
-.EE
-.RE
-.
-.RE
-.
-.\" ======================================================================
-.\" TB - Call Tabs Alias
-.\" ======================================================================
-.TP
-.BI .TB " <tab number>"
-Alias to
-.B .TAB
-.
-.
-.\" ======================================================================
-.\" TI - TEMPORARY (LEFT) INDENT
-.\" ======================================================================
-.TP
-.BI "\%.TI [" " <measure> " ]
-Temporary left indent \[em] the optional argument requires a
-.I unit of measure
-.
-.RS
-.
-.P
-A temporary indent is one that applies only to the first line of text
-that comes after it.
-.
-Its chief use is indenting the first line of paragraphs.
-.RB ( Mom\[aq]s
-.B .PP
-macro, for example, uses a
-.IR "temporary indent" .)
-.
-.P
-The first time you invoke
-.BR .TI ,
-you must give it a measure.
-.
-If you want to
-.I indent
-the first line of a paragraph by, say, 2 ems, do
-.RS
-.EX
-.B .TI 2m
-.EE
-.RE
-.
-.P
-Subsequent invocations of
-.B .TI
-do not require you to supply a measure;
-.B mom
-keeps track of the last measure you gave it.
-.
-.P
-Because
-.I temporary indents
-are temporary, there\[aq]s no need to turn them off.
-.
-.P
-.I IMPORTANT:
-Unlike
-.BR .IL ,
-.B .IR
-and
-.BR IB ,
-measures given to
-.B .TI
-are NOT additive.
-.
-In the following example, the second
-.B \%".TI 2P"
-is exactly
-.IR "2 picas" .
-.RS
-.EX
-.B .TI 1P
-.B The beginning of a paragraph\*[Ellipsis]
-.B .TI 2P
-.B The beginning of another paragraph\*[Ellipsis]
-.EE
-.RE
-.
-.RE
-.
-.
-.
-.\" ======================================================================
-.\" TN - Tab Next
-.\" ======================================================================
-.TP
-.B .TN
-Tab Next
-.
-.RS
-.P
-Inline escape
-.B \[rs]*[TB+]
-.
-.P
-.B TN
-moves over to the
-.I next tab
-in numeric sequence
-.RI ( "tab n+1" )
-without advancing on the page.
-.
-See the
-.I NOTE
-in the description of the
-.B \%.TAB
-macro for an example of how
-.B TN
-works.
-.
-.P
-In
-.I \%tabs
-that aren\[aq]t given the
-.B QUAD
-argument when they\[aq]re set up with
-.B \%.TAB_SET
-or
-.BR ST ,
-you must terminate the line preceding
-.B .TN
-with the
-.B \[rs]c
-inline escape.
-.
-Conversely, if you did give a
-.B QUAD
-argument to
-.B \%.TAB_SET
-or
-.BR ST ,
-the
-.B \[rs]c must not be used.
-.
-.P
-If you find remembering whether to put in the
-.B \[rs]c
-bothersome, you may prefer to use the inline escape alternative
-to
-.BR .TN ,
-.BR \[rs]*[TB+] ,
-which works consistently regardless of the fill mode.
-.
-.P
-.I Note:
-You must put text in the input line immediately after
-.BR .TN .
-.
-Stacking of
-.BR .TN \[aq]s
-is not allowed.
-.
-In other words, you cannot do
-.RS
-.EX
-\fB.TAB 1
-Some text\[rs]c
-\&.TN
-Some more text\[rs]c
-\&.TN
-\&.TN
-Yet more text\fR
-.EE
-.RE
-.
-The above example, assuming
-.I tabs
-numbered from
-.I 1
-to
-.IR 4 ,
-should be entered
-.RS
-.EX
-\fB.TAB 1
-Some text\[rs]c
-\&.TN
-Some more text\[rs]c
-\&.TN
-\[rs]&\[rs]c
-\&.TN
-Yet more text
-.EE
-.RE
-.
-\[rs]& is a zero-width, non-printing character that
-.I groff
-recognizes as valid input, hence meets the requirement for input text
-following
-.BR .TN .
-.
-.RE
-.
-.
-.\" ======================================================================
-.\" Tab Quit
-.\" ======================================================================
-.TP
-.B .TQ
-.B TQ
-takes you out of whatever
-.I tab
-you were in, advances
-.IR "1 linespace" ,
-and restores the
-.IR "left margin" ,
-.IR "line length" ,
-.I quad direction
-and
-.I fill mode
-that were in effect prior to invoking any
-.IR tabs .
-.
-.
-.\" ======================================================================
-.\" Top Margin
-.\" ======================================================================
-.TP
-.BI .T_MARGIN " <top margin>"
-Top margin
-.
-.RS
-.
-.P
-Requires a unit of measure
-.
-.P
-.B .T_MARGIN
-establishes the distance from the top of the printer sheet at which
-you want your type to start.
-.
-It requires a unit of measure, and decimal fractions are allowed.
-.
-To set a top margin of 2\(12 centimetres, you\[aq]d enter
-.RS
-.EX
-.B .T_MARGIN 2.5c
-.EE
-.RE
-.
-.B .T_MARGIN
-calculates the vertical position of the first line of type on a page
-by treating the top edge of the printer sheet as a baseline.
-Therefore,
-.RS
-.EX
-.B .T_MARGIN 1.5i
-.EE
-.RE
-puts the baseline of the first line of type 1\(12 inches beneath the
-top of the page.
-.
-.P
-Note:
-.B .T_MARGIN
-means something slightly different when you\[aq]re using the document
-processing macros.
-.
-See Top and bottom margins in document processing for an explanation.
-.
-.P
-IMPORTANT:
-.B .T_MARGIN
-does two things: it establishes the top margin for pages that come
-after it and it moves to that position on the current page.
-.
-Therefore,
-.B .T_MARGIN
-should only be used at the top of a file (prior to entering text) or
-after NEWPAGE, like this:
-.RS
-.EX
-.B .NEWPAGE
-.B .T_MARGIN 6P
-.I <text>
-.EE
-.RE
-.
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff (@MAN1EXT@),
-.BR groff_mom (@MAN7EXT@),
-.
-.TP
-.B \%@HTMLDOCDIR@/\:mom/\:toc.html
-\[en] entry point to the HTML documentation
-.
-.TP
-.UR http://\:www.schaffter.ca/\:mom/\:momdoc/\:toc.html
-.UE
-\[en] HTML documentation online
-.
-.TP
-.UR http://\:www.schaffter.ca/\:mom/
-.UE
-\[en] the mom macros homepage
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-Please send bug reports to the
-.MT bug-groff@gnu.org
-groff-bug mailing list
-.ME
-or directly to the authors.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.cp \n[groff_mom_C]
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/contrib/mom/mom.am b/contrib/mom/mom.am
new file mode 100644 (file)
index 0000000..57ae357
--- /dev/null
@@ -0,0 +1,180 @@
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#      Written by Werner Lemberg (wl@gnu.org)
+#      Automake migration by Bertrand Garrigues
+#
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+mom_srcdir = $(top_srcdir)/contrib/mom
+
+# pdfmom command used to generated .pdf
+MOM_TFLAG = -M$(mom_srcdir)
+MOM_KFLAG = -k -p -e -t
+MOMPDFMOM = \
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  PDFMOM_BIN_PATH="$(top_builddir)" \
+  $(PDFMOMBIN) $(FFLAG) $(TFLAG) $(MOM_TFLAG) $(MOM_KFLAG)
+
+man7_MANS += contrib/mom/groff_mom.7
+
+# Files installed in $(tmacdir).
+# MOMNORMALFILES are located in the source tree.
+MOMNORMALFILES = \
+  contrib/mom/mom.tmac \
+  contrib/mom/om.tmac
+momtmacdir = $(tmacdir)
+dist_momtmac_DATA = $(MOMNORMALFILES)
+
+# Files installed in htmldocdir/mom
+if INSTALL_SHIPPED_HTML
+MOMHTMLDOCFILES=\
+  contrib/mom/momdoc/stylesheet.css \
+  contrib/mom/momdoc/appendices.html \
+  contrib/mom/momdoc/color.html \
+  contrib/mom/momdoc/cover.html \
+  contrib/mom/momdoc/definitions.html \
+  contrib/mom/momdoc/docelement.html \
+  contrib/mom/momdoc/docprocessing.html \
+  contrib/mom/momdoc/goodies.html \
+  contrib/mom/momdoc/graphical.html \
+  contrib/mom/momdoc/headfootpage.html \
+  contrib/mom/momdoc/images.html \
+  contrib/mom/momdoc/inlines.html \
+  contrib/mom/momdoc/intro.html \
+  contrib/mom/momdoc/letters.html \
+  contrib/mom/momdoc/macrolist.html \
+  contrib/mom/momdoc/rectoverso.html \
+  contrib/mom/momdoc/refer.html \
+  contrib/mom/momdoc/reserved.html \
+  contrib/mom/momdoc/tables-of-contents.html \
+  contrib/mom/momdoc/toc.html \
+  contrib/mom/momdoc/typesetting.html \
+  contrib/mom/momdoc/using.html \
+  contrib/mom/momdoc/version-2.html
+momhtmldir = $(htmldocdir)/mom
+momhtml_DATA = $(MOMHTMLDOCFILES)
+endif
+
+# Files installed in $(examplesdir)/mom.  MOMEXAMPLEFILES are located
+# in the source tree, while MOMPROCESSEDEXAMPLEFILES are generated in
+# the build tree.
+MOMEXAMPLEFILES=\
+  contrib/mom/examples/letter.mom \
+  contrib/mom/examples/mom-pdf.mom \
+  contrib/mom/examples/mon_premier_doc.mom \
+  contrib/mom/examples/sample_docs.mom \
+  contrib/mom/examples/typesetting.mom \
+  contrib/mom/examples/README.txt \
+  contrib/mom/examples/README-fr.txt \
+  contrib/mom/examples/elvis_syntax \
+  contrib/mom/examples/elvis_syntax.new \
+  contrib/mom/examples/penguin.ps \
+  contrib/mom/examples/penguin.pdf \
+  contrib/mom/examples/mom.vim \
+  contrib/mom/examples/slide-demo.mom
+if BUILD_EXAMPLES
+momexampledir = $(exampledir)/mom
+dist_momexample_DATA = $(MOMEXAMPLEFILES)
+else
+EXTRA_DIST += $(MOMEXAMPLEFILES)
+endif
+
+if BUILD_PDFEXAMPLES
+MOMPROCESSEDEXAMPLEFILES = \
+  contrib/mom/examples/letter.pdf \
+  contrib/mom/examples/mom-pdf.pdf \
+  contrib/mom/examples/mon_premier_doc.pdf \
+  contrib/mom/examples/sample_docs.pdf \
+  contrib/mom/examples/typesetting.pdf \
+  contrib/mom/examples/slide-demo.pdf
+momprocessedexampledir = $(exampledir)/mom
+nodist_momprocessedexample_DATA = $(MOMPROCESSEDEXAMPLEFILES)
+
+if HAVE_PDFTOOLS
+# Small test suite on mom examples
+mom_TESTS = contrib/mom/examples/tests-mom.sh
+TESTS += $(mom_TESTS)
+contrib/mom/examples/tests-mom.sh: $(top_builddir)/config.status \
+       $(MOMPROCESSEDEXAMPLEFILES)  $(top_srcdir)/contrib/mom/examples/test-mom.sh.in
+       sed -e "s|[@]abs_top_builddir[@]|$(abs_top_builddir)|g" \
+            -e "s|[@]groff_have_urw_fonts[@]|$(groff_have_urw_fonts)|g" \
+               $(top_srcdir)/contrib/mom/examples/test-mom.sh.in > $@
+       chmod +x $@
+MOSTLYCLEANFILES += $(mom_TESTS)
+endif
+endif
+EXTRA_DIST += contrib/mom/examples/test-mom.sh.in
+
+# For this list of files we add a symlink from $(exampledir)/mom to $(pdfdocdir)
+PDFDOCFILE = mom-pdf.pdf
+
+EXTRA_DIST += $(MOMHTMLDOCFILES) $(MOMEXAMPLEFILES) \
+  contrib/mom/BUGS \
+  contrib/mom/ChangeLog \
+  contrib/mom/NEWS \
+  contrib/mom/TODO \
+  contrib/mom/copyright \
+  contrib/mom/groff_mom.7.man
+
+MOSTLYCLEANFILES += \
+  $(MOMPROCESSEDEXAMPLEFILES) \
+  penguin.ps \
+  penguin.pdf
+
+# Rule to generated .pdf files from .mom files
+SUFFIXES += .mom .pdf
+.mom.pdf:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && LC_ALL=C $(MOMPDFMOM) $< >$@
+
+$(MOMPROCESSEDEXAMPLEFILES): $(MOMNORMALFILES) \
+  groff troff gropdf pdfmom penguin.ps penguin.pdf \
+  gnu.eps font/devpdf/build_font_files
+
+penguin.ps:
+       cp $(mom_srcdir)/examples/penguin.ps $@
+penguin.pdf:
+       cp $(mom_srcdir)/examples/penguin.pdf $@
+
+install-data-hook: install_mom
+install_mom:
+if BUILD_PDFEXAMPLES
+       for f in $(PDFDOCFILE); do \
+         $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
+         ln -s $(exampledir)/mom/$$f $(DESTDIR)$(pdfdocdir)/$$f; \
+       done
+endif
+
+uninstall_groffdirs: uninstall_mom
+uninstall_mom:
+       for f in $(PDFDOCFILE); do \
+         $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
+       done
+       if test -d $(DESTDIR)$(exampledir)/mom; then \
+         rmdir $(DESTDIR)$(exampledir)/mom; \
+       fi
+       if test -d $(DESTDIR)$(htmldocdir)/mom; then \
+         rmdir $(DESTDIR)$(htmldocdir)/mom; \
+       fi
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
+# vim: set filetype=automake:
index 32a9ce455ce0be2819148d92d21d10d06f4057ed..21a7a1575f0eb05aafc1fc49d3a84d25065153fb 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014  Free Software Foundation, Inc.
+Copyright (C) 2004-2018  Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -637,7 +637,7 @@ of the form
 <span class="pre-in-pp">
   internalname &lt;name&gt;
 </span>
-Usually, the internal name is helpfully descriptive, eg,
+Usually, the internal name is helpfully descriptive, e.g.,
 <br/>
 <span class="pre-in-pp">
   internalname Optima-Bold
@@ -832,15 +832,13 @@ helpful to everyone, groff newbies and old hands alike.
 
 <p>
 Mom&#8217;s macro file, om.tmac, uses long names, aliases, and a
-host of other groff goodies that have become part of the whole
-groff picture under the unflagging guidance of groff&#8217;s
-current maintainer, Werner Lemberg.  The function of nearly
-every macro, number register and string can be infered simply
-from its name.  The file is heavily commented.  A consistent, if
-idiosyncratic, indenting style is used as well, significantly
-improving readability.  Anyone wanting to futz around with
-mom&#8217;s macros should be able to do so with a minimum of head
-scratching.
+host of other groff goodies that have become part of the whole groff
+picture.  The function of nearly every macro, number register and
+string can be infered simply from its name.  The file is heavily
+commented.  A consistent, if idiosyncratic, indenting style is used
+as well, significantly improving readability.  Anyone wanting to
+futz around with mom&#8217;s macros should be able to do so with a
+minimum of head scratching.
 </p>
 
 <div class="box-tip">
@@ -902,4 +900,3 @@ typeset with mom and groff.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index e447110317e046293a61f21bd2e11063bc6a445a..c03ceb48441cad84dbf59507d2ba38e5bd49336c 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014  Free Software Foundation, Inc.
+Copyright (C) 2004-2018  Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -58,8 +58,8 @@ Afterward, any time you want text to be coloured, you either colour
 it with an
 <a href="definitions.html#inlines">inline escape</a>
 that contains the colour name (e.g. <kbd>\*[red]</kbd>
-or <kbd>\*[blue]</kbd>) or invoke the macro,
-<kbd><a href="#color">COLOR</a></kbd>,
+or <kbd>\*[blue]</kbd>) or invoke the macro
+<kbd><a href="#color">COLOR</a></kbd>
 with the name of the colour you want.
 </p>
 
@@ -222,13 +222,13 @@ could enter one of the following:
   .NEWCOLOR YELLOW #FFFF00         \"or ##FFFFFFFF0000 or "1 1 0"
   .NEWCOLOR YELLOW RGB #FFFF00     \"or ##FFFFFFFF0000 or "1 1 0"
   .NEWCOLOR YELLOW CYM #00FF00     \"or ##0000FFFF0000 or "0 1 0"
-  .NEWCOLOR YELLOW CYMK #00FF0000  \"or ##0000FFFF00000000 or "1 1 0"
+  .NEWCOLOR YELLOW CYMK #00FF0000  \"or ##0000FFFF00000000 or "0 0 1 0"
 </span>
 After you've told mom about a colour, you can then get her to set
 text in that colour either with the
 <a href="definitions.html#inlines">inline escape</a>,
 <a href="#color-inline"><kbd>\*[&lt;colorname&gt;]</kbd></a>,
-or the macro,
+or the macro
 <a href="#color">COLOR</a>.
 (See the
 <a href="#color-example">example</a>,
@@ -442,7 +442,7 @@ Once you've told mom about a colour (via
 <a href="#newcolor">NEWCOLOR</a>
 or
 <a href="#xcolor">XCOLOR</a>,
-you use either the macro, COLOR, or the
+you use either the macro COLOR or the
 <a href="definitions.html#inlines">inline escape</a>,
 <kbd>\*[&lt;colorname&gt;]</kbd>, to cause mom to
 set subsequent text in that colour.  See the
@@ -504,4 +504,3 @@ in the notes at the end of
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 3b49df8c8afd18a8d278f3c2ed14ebfb919c3601..e18a1c3470ef1e696689dd332669df31584704d9 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014  Free Software Foundation, Inc.
+Copyright (C) 2004-2018  Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -40,28 +40,42 @@ FDL in the main directory of the groff source package.
 
 <h1 class="docs">Creating cover pages</h1>
 
-<div style="width: 63%; margin: auto;">
+<div style="width: 66%; margin: auto;">
 <ul class="no-enumerator">
   <li><a href="#cover-intro">Introduction to cover pages</a>
   <ul style="margin-left: -.5em; list-style-type: disc;">
     <li><a href="#important-note">Important note</a></li>
     <li><a href="#desc">Description of cover pages</a></li>
-    <li><a href="#pagination">Headers/footers/pagination and cover pages</a></li>
+    <li><a href="#pagination">Headers/footers/pagination</a>
+      <ul style="margin-left: -1.25em; list-style-type: circle;">
+        <li><a href="#pagination">DOC_COVERS_COUNT_PAGES</a></li>
+        <li><a href="#pagination">COVERS_COUNT_PAGES</a></li>
+      </ul>
+    </li>
     <li><a href="#design">Designing your own cover pages</a></li>
+    <li><a href="#persistence">Persistence of data and formatting</a></li>
   </ul></li>
-  <li><a href="#index-covers">Cover and document cover macros</a>
+  <li><a href="#index-covers">Doc-cover and cover macros</a>
   <ul style="margin-left: -.5em; list-style-type: disc;">
-    <li><a href="#cover">COVER / DOC_COVER</a>
-    <ul style="margin-left: -.5em; list-style-type: circle;">
-      <li><a href="#required-arg">The required argument</a></li>
+    <li><a href="#cover">DOC_COVER / COVER</a>
+    <ul style="margin-left: -1.25em; list-style-type: circle;">
+      <li><a href="#cover-args">The argument list: saying what goes on doc-cover and cover pages</a></li>
+      <li><a href="#meanings">What the arguments mean</a></li>
       <li><a href="#chapter">How the CHAPTER argument and friends work</a></li>
-      <li><a href="#optional-args">The optional arguments</a></li>
-      <li><a href="#doctype">What the DOCTYPE argument means</a></li>
-      <li><a href="#blankpage">What the BLANKPAGE argument means</a></li>
     </ul></li>
+    <li><a href="#covertext">DOC_COVERTEXT / COVERTEXT</a>
+      <ul style="margin-left: -1.25em; list-style-type: circle;">
+        <li><a href="#placement">Placement</a></li>
+      </ul>
+    </li>
+    <li><a href="#coverimage">DOC_COVER_IMAGE / COVER_IMAGE</a>
+      <ul style="margin-left: -1.25em; list-style-type: circle;">
+        <li><a href="#positioning">Positioning of doc-cover and cover images</a></li>
+      </ul>
+    </li>
   </ul></li>
   <li><a href="#on-off">Enabling/disabling automatic generation of cover pages</a></li>
-  <li><a href="#cover-control">Control macros for covers and doc covers</a></li>
+  <li><a href="#cover-control">Control macros for covers and doc-covers</a></li>
 </ul>
 </div>
 
@@ -71,15 +85,15 @@ FDL in the main directory of the groff source package.
 
 <p>
 Though identical in treatment, mom provides two kinds of cover
-pages: document cover pages (&#8221;doc covers&#8221;), and section
+pages: document cover pages (&#8221;doc-covers&#8221;), and section
 cover pages (which I shall refer to simply as cover pages).
 </p>
 
 <p>
-A doc cover is what you&#8217;d most likely use at the start of a
+A doc-cover is what you&#8217;d most likely use at the start of a
 collated document, where you might want the name of the complete
 document, the author(s) and the copyright line to appear.  Another
-place you might use a doc cover is for a novel, where you want the
+place you might use a doc-cover is for a novel, where you want the
 title of the novel, not the chapter title or chapter number, as the
 first cover page.
 </p>
@@ -87,26 +101,26 @@ first cover page.
 <p>
 A cover is what you&#8217;d use for pages that separate sections
 of a collated document, ie title pages.  A cover page (but not a
-doc cover) in a collated document could, for example, simply read:
+doc-cover) in a collated document could, for example, simply read:
 &#8221;PART 1&#8221;.
 </p>
 
 <p>
 In non-collated documents (say, an essay) you can use either a cover
-or doc cover to generate the cover sheet.
+or doc-cover to generate the cover sheet.
 </p>
 
 <p>
-In addition, nothing prevents you from generating both a doc cover
+In addition, nothing prevents you from generating both a doc-cover
 and a cover for every document in a collated document.  Or you can
-selectively disable the automatic generation of either doc covers or
+selectively disable the automatic generation of either doc-covers or
 covers in a collated document on-the-fly.
 </p>
 
 <div id="important-note" class="box-important">
 <p class="tip">
 <span class="important">Important note:</span>
-Automatic generation of covers or doc covers after the first one(s)
+Automatic generation of covers or doc-covers after the first one(s)
 only takes place if you are working with collated documents.  Mom
 provides no mechanism for saying &#8221;print a section cover
 here even though I'm still working on the same (non-collated)
@@ -117,7 +131,7 @@ document.&#8221;
 <h3 id="desc" class="docs">Description of cover pages</h3>
 
 <p>
-By default, mom typesets covers and doc covers  identically to
+By default, mom typesets covers and doc-covers  identically to
 <a href="definitions.html#docheader">docheaders</a>
 (see
 <a href="docprocessing.html#docheader-control">How to change the look of docheaders</a>
@@ -127,51 +141,55 @@ differences are
 <ul style="margin-top: -.5em;  margin-bottom: -.5em;">
   <li>the position on the page where the information is output</li>
   <li>the (optional) addition of copyright and miscellaneous information</li>
-  <li>there&#8217;s no running text underneath</li>
+  <li>there&#8217;s no running text underneath, although you can add text
+      to a cover or doc-cover (for example, an Abstract) with
+      <a href="#covertext">COVERTEXT</a>
+   </li>
 </ul>
 
 <p>
 You tell mom what you want to appear on cover pages through the
 arguments you pass to
-<a href="#cover">COVER</a>
+<a href="#cover">DOC_COVER</a>
 and/or
-<a href="#cover">DOC_COVER</a>.
+<a href="#cover">COVER</a>.
 Provided you have already given mom the appropriate reference macros
-(eg
+(e.g.,
 <a href="docprocessing.html#title">TITLE</a>
 or
 <a href="docprocessing.html#author">AUTHOR</a>),
-she will output covers and doc covers identically to how she
+she will output covers and doc-covers identically to how she
 would output docheaders containing the same information.
 </p>
 
 <p>
-By default, mom starts covers and doc covers one-third of the way
+By default, mom starts covers and doc-covers one-third of the way
 down the page.  This can be changed through the use of the control
-macros COVER_ADVANCE / DOC_COVER_ADVANCE.
+macros DOC_COVER_START_POS / COVER_START_POS (or DOC_COVER_ADVANCE /
+COVER_ADVANCE).
 </p>
 
 <p>
 If you request copyright information (and have already given mom the
-reference macro,
-<a href="docprocessing.html#copyright">COPYRIGHT</a>),
+reference macro
+<a href="docprocessing.html#copyright">COPYRIGHT</a>)
 she sets it, by default, in a smaller
 <a href="definitions.html#ps">point size</a>
-in the bottom right hand corner of the cover or doc cover.  The
+in the bottom right hand corner of the cover or doc-cover.  The
 position, as well as all of the standard typesetting parameters, can be
 altered via control macros.
 </p>
 
 <p>
 Similarly, if you request miscellaneous information (and have
-already given mom the reference macro,
-<a href="docprocessing.html#misc">MISC</a>),
+already given mom the reference macro
+<a href="docprocessing.html#misc">MISC</a>)
 she sets it, by default, in a smaller point size in the bottom left
-hand corner of the cover or doc cover.  As with the copyright, the
+hand corner of the cover or doc-cover.  As with the copyright, the
 position and type specs can be altered via control macros.
 </p>
 
-<h3 id="pagination" class="docs">Headers/footers/pagination and cover pages</h3>
+<h3 id="pagination" class="docs">Headers/footers/pagination</h3>
 
 <p>
 Mom does not set any
@@ -179,81 +197,75 @@ Mom does not set any
 or
 <a href="definitions.html#footer">footers</a>
 on cover pages.  Neither does she set any page numbers.  From
-the point of view of pagination, covers and doc covers are by
+the point of view of pagination, covers and doc-covers are by
 default considered &#8221;null&#8221; pages.  If you wish them to
 be included in the pagination scheme (even though no page numbers
-appear), you must tell mom that&#8217;s what you want with the
-macros DOC_COVERS_COUNT_PAGES and/or COVERS_COUNT_PAGES.
+appear), you must tell mom that&#8217;s what you want by invoking
+<br/>
+<span class="pre-in-pp">
+  .DOC_COVERS_COUNT_PAGES
+</span>
+or
+<br/>
+<span class="pre-in-pp">
+  .COVERS_COUNT_PAGES
+</span>
 </p>
 
 <h3 id="design" class="docs">Designing your own cover pages</h3>
 
 <p>
 Finally, if you want to design your own cover page(s), you can
-always typeset them (using the
-<a href="typesetting.html#macros-typesetting">typesetting macros</a>),
-invoke
-<a href="typesetting.html#newpage"><kbd>.NEWPAGE</kbd></a>,
-set up your document (see
-<a href="docprocessing.html#docprocessing-tut">Tutorial &ndash; Setting up a mom document</a>),
-and lastly invoke
-<a href="docprocessing.html#start"><kbd>.START</kbd></a>.
-The cover page, and any typesetting commands on it, will have no
-effect on mom&#8217;s processing of the document after you invoke
-<kbd><a href="docprocessing.html#START">.START</a></kbd>.
+typeset them by hand inside a
+<a href="#covertext">COVERTEXT</a>
+block using mom&#8217;s typesetting macros to format the text.
+</p>
+
+<h3 id="persistence" class="docs">Persistence of data and formatting</h3>
+
+<p>
+Doc-cover and cover data&mdash;that is to say, the strings passed to
+reference macros that appear on doc-cover and cover
+pages&mdash;does not persist after
+<a href="docprocessing.html#start">START</a>,
+however the formatting of the various parts (TITLE, AUTHOR,
+COPYRIGHT, etc.) does.
 </p>
 
 <div class="macro-list-container">
 <h3 id="index-covers" class="macro-list">Cover and document cover macros</h3>
 <ul class="macro-list">
-  <li><a href="#cover">COVER and DOC_COVER</a>
+  <li><a href="#cover">DOC_COVER and COVER</a>
   <ul style="margin-left: -.5em; list-style-type: disc;">
-    <li><a href="#required-and-optional-args">Required and optional arguments</a></li>
+    <li><a href="#cover-args">The arguments: saying what goes on doc-cover and cover pages</a></li>
   </ul></li>
+  <li><a href="#covertext">DOC_COVERTEXT / COVERTEXT</a></li>
+  <li><a href="#coverimage">DOC_COVER_IMAGE / COVER_IMAGE</a></li>
   <li><a href="#on-off">Enabling/disabling automatic generation of cover pages</a>
   <ul style="margin-left: -.5em; list-style-type: disc;">
-    <li><a href="#covers">COVERS</a></li>
     <li><a href="#doc-covers">DOC_COVERS</a></li>
+    <li><a href="#covers">COVERS</a></li>
   </ul></li>
-  <li><a href="#cover-control">Control macros for covers and doc covers</a></li>
+  <li><a href="#cover-control">Control macros for doc-covers and covers</a></li>
 </ul>
 </div>
 
 <!-- -COVER- -->
 
 <div class="macro-id-overline">
-<h3 id="cover" class="macro-id">COVER and DOC_COVER</h3>
+<h3 id="cover" class="macro-id">DOC_COVER and COVER</h3>
 </div>
 
-<div class="box-macro-args">
-Macro: <b>COVER</b> <kbd class="macro-args">(see required and optional arguments, below)</kbd>
-</div>
-
-<div id="doc-cover" class="box-macro-args" style="margin-top: 1em;">
-Macro: <b>DOC_COVER</b> <kbd class="macro-args">(see required and optional arguments, below)</kbd>
-</div>
-
-<div id="required-and-optional-args" style="margin-top: 1em; padding-bottom: 3px; white-space: nowrap; overflow: auto;">
-<b><a href="#required-arg">Required argument:</a></b> <kbd class="macro-args">TITLE | DOCTITLE | COVERTITLE | CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE</kbd>
-</div>
-
-<div style="margin-top: .5em; padding-bottom: 3px; white-space: nowrap; overflow: auto;">
-<b><a href="#optional-args">Optional arguments:</a></b> <kbd class="macro-args">[ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC BLANKPAGE PDF_OUTLINE_LABEL &lt;label&gt; ]</kbd>
+<div id="doc-cover" class="box-macro-args">
+Macro: <b>DOC_COVER</b> <kbd class="macro-args">(see argument list, below)</kbd>
 </div>
 
-<div class="box-tip">
-<p class="tip">
-<span class="note">Note:</span>
-These macros should be placed in the style sheet section of your
-document setup (see
-<a href="docprocessing.html#docprocessing-tut">Tutorial &ndash; Setting up a mom document</a>),
-ie after PRINTSTYLE (and/or DOCTYPE and/or COPYSTYLE), but before
-START.
-</p>
+<div class="box-macro-args" style="margin-top: 1em;">
+Macro: <b>COVER</b> <kbd class="macro-args">(see argument list, below)</kbd>
 </div>
 
-<p style="margin-top: -.25em;">
-COVER and DOC_COVER behave identically.  The reason mom provides
+<p>
+DOC_COVER and COVER behave identically.  The reason mom provides
 two macros for cover page generation is so that you can have two
 different kinds of covers with different information on each.
 </p>
@@ -267,50 +279,166 @@ page that contained the name of the entire document, your (the
 author&#8217;s) name, and perhaps the copyright date.  Subsequently,
 you could use COVER, after each <kbd>.COLLATE</kbd> but before each
 <kbd><a href="docprocessing.html#start">.START</a></kbd>,
-to generate a cover page (or cover &#8221;sheet&#8221;, if you
-prefer) containing just the name of the section.
+to generate a cover page (title page, cover sheet) containing
+just the name of the section, for example, &#8220;Part 1&#8221;.
 </p>
 
-<h4 id="required-arg" class="docs" style="margin-top: -.5em;">The required argument</h4>
-
 <p>
-Both COVER and DOC_COVER, whenever invoked, require a first
-argument, as listed above.  This first argument will become the
-first bit of information mom prints on the cover or doc cover (ie
-the title).
+The arguments to <kbd>DOC_COVER</kbd> and <kbd>COVER</kbd> tell mom
+what you&#8217;d like on cover pages.  You may give as many or as
+few arguments as you need, in any order.  A very common setup would
+be:
+<br/>
+<span class="pre-in-pp">
+  .COVER TITLE AUTHOR COPYRIGHT
+</span>
 </p>
 
-<p>
-In order for the information to appear, you must, of course, have
-given mom the appropriate
-<a href="docprocessing.html#reference-macros">reference macro</a>.
-A list of first arguments with their equivalent reference macros follows.
+<h4 id="cover-args" class="docs" style="margin-top: -1em;">The argument list</h4>
+
+<p style="margin-top: 1em">
+The arguments to <kbd>COVER</kbd> and <kbd>DOC_COVER</kbd> tell mom
+what you want on the cover page:
+<br/>
+<span class="pre-in-pp">
+  TITLE | DOCTITLE | DOC_COVERTITLE | COVERTITLE
+  CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE
+  SUBTITLE
+  AUTHOR
+  DOCTYPE
+  DOC_COVERTEXT | COVERTEXT
+  DOC_COVER_IMAGE | COVER_IMAGE
+  COPYRIGHT
+  MISC
+  PDF_OUTLINE_LABEL "&lt;label&gt;"
+  BLANKPAGE
+</span>
 </p>
 
-<dl style="margin-top: -.5em;">
-  <dt class="no-italic"><kbd>TITLE</kbd></dt>
-  <dd>
-  &ndash; means the argument you gave to <a href="docprocessing.html#title">TITLE</a>
-  </dd>
-  <dt class="no-italic"><kbd>DOCTITLE</kbd></dt>
-  <dd>
-  &ndash; means the argument you gave to <a href="docprocessing.html#doc-title">DOCTITLE</a>
-  </dd>
-  <dt class="no-italic"><kbd>COVERTITLE</kbd></dt>
-  <dd>
-  &ndash; means the argument you gave to <a href="docprocessing.html#covertitle">COVERTITLE</a>
-  or
-  <a href="docprocessing.html#doc-covertitle">DOC_COVERTITLE</a>
-  </dd>
-  <dt class="no-italic"><kbd>CHAPTER, CHAPTER_TITLE, CHAPTER+TITLE</kbd></dt>
-  <dd>
-  &ndash; see below, <i>How the CHAPTER argument and friends work</i>
-  </dd>
-</dl>
+<h4 id="meanings" class="docs" style="margin-top: -1em;">What the arguments mean</h4>
+
+<dl>
+  <dt class="params">TITLE</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#title">TITLE</a>
+    </dd>
+  <dt class="params">DOCTITLE</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#doc-title">DOCTITLE</a>
+    </dd>
+  <dt class="params">DOC_COVERTITLE / COVERTITLE</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#doc-covertitle">DOC_COVERTITLE</a>
+      or
+      <a href="docprocessing.html#covertitle">COVERTITLE</a>
+    </dd>
+  <dt class="params">CHAPTER, CHAPTER_TITLE, CHAPTER+TITLE</dt>
+    <dd class="cover-args">&ndash; see below,
+      <a href="#chapter">How the CHAPTER argument and friends work</a>
+    </dd>
+  <dt class="params">SUBTITLE</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#subtitle">SUBTITLE</a>
+    </dd>
+  <dt class="params">AUTHOR</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#author">AUTHOR</a>
+    </dd>
+  <dt class="params">DOCTYPE</dt>
+    <dd class="cover-args">&ndash; the string you gave to
+      <a href="docprocessing.html#doctype">DOCTYPE NAMED</a>
+    </dd>
+  <dt class="params">DOC_COVERTEXT / COVERTEXT</dt>
+    <dd class="cover-args">&ndash; the block of type you entered for
+      <a href="#covertext">DOC_COVERTEXT</a>
+      or
+      <a href="#covertext">COVERTEXT</a>
+    </dd>
+  <dt class="params">DOC_COVER_IMAGE / COVER_IMAGE</dt>
+    <dd class="cover-args">&ndash; the image file you gave to
+      <a href="#covertext">DOC_COVER_IMAGE</a>
+      or
+      <a href="#covertext">COVER_IMAGE</a>
+    </dd>
+  <dt class="params">COPYRIGHT</dt>
+    <dd class="cover-args">&ndash; the string you gave to
+      <a href="docprocessing.html#copyright">COPYRIGHT</a>
+    </dd>
+  <dt class="params">MISC</dt>
+    <dd class="cover-args">&ndash; the string(s) you gave to
+      <a href="docprocessing.html#misc">MISC</a>
+    </dd>
+  <dt class="params">PDF_OUTLINE_LABEL &lt;label&gt;</dt>
+    <dd class="cover-args">
+      <span style="display:block; margin-left: 1em">
+      By default, mom identifies doc-covers in the outline panel of PDF
+      viewers with the prepended label, &#8220;Cover:&#8221;, and covers
+      with the label &#8220;Title Page:&#8221;.  If you would like
+      to change the label, give the <kbd>PDF_OUTLINE_LABEL</kbd>
+      argument to DOC_COVER or COVER along with the new label, in
+      quotation marks, as in this example:
+      <br/>
+      <kbd>&nbsp;&nbsp;.COVER TITLE AUTHOR COPYRIGHT PDF_LABEL "Cover Sheet: "</kbd>
+      </span>
+    </dd>
+  <dt class="params">BLANKPAGE</dt>
+    <dd class="cover-args">
+      <span style="display:block; margin-left: 1em">
+      If the final argument to DOC_COVER or COVER is <kbd>BLANKPAGE</kbd>,
+      mom will insert a blank page after the doc-cover or cover.  This is
+      particularly useful if you intend to print your document two-sided,
+      since, in two-sided printing, there may be instances where you do
+      not want text on the reverse side of cover or title pages
+      </span>
+      <span style="display:block; margin-left: 1em; margin-top: .5em">
+      If you enable
+      <a href="#pagination">DOC_COVERS_COUNT_PAGES</a>
+      and/or
+      <a href="#pagination">COVERS_COUNT_PAGES</a>,
+      the blank page will be taken into account in the pagination
+      scheme, though no page number appears on it.  Otherwise, blank
+      pages are invisible to mom's pagination.
+      </span>
+    </dd>
+<dl/>
 
-<h5 id="chapter" class="docs" style="margin-top: -.5em; text-transform: none;">How the CHAPTER argument and friends work</h5>
+<p>
+Please note that in all cases, if you have passed
+a reference macro one of the optional arguments
+<kbd>DOC_COVER</kbd> or <kbd>COVER</kbd> (e.g.
+<kbd>.TITLE&nbsp;DOC_COVER&nbsp;"Title"</kbd>), mom will print the
+appropriate string on the appropriate cover page.  Thus,
+<br/>
+<span class="pre-in-pp">
+  .TITLE DOC_COVER "Collected Essays"
+  .TITLE COVER "1985-2015"
+  .TITLE "Neo-liberalism: Who Did They Think They Were Fooling?"
+  .DOC_COVER TITLE
+  .COVER TITLE
+</span>
+will print &#8220;Collected Essays&#8221; on the doc-cover page,
+&#8220;1985-2015&#8221; on the cover page, and, assuming the
+docheader hasn&#8217;t been disabled, &#8220;Neo-liberalism: Who
+Did They Think They Were Fooling?&#8221; as the title in the
+docheader.
+</p>
 
 <p>
+Note that
+<br/>
+<span class="pre-in-pp">
+  .DOC_COVERTITLE "Collected Essays"
+  .COVERTITLE "1985-2015"
+  .TITLE "Neo-liberalism: Who Did They Think They Were Fooling?"
+  .DOC_COVER DOC_COVERTITLE
+  .COVER COVERTITLE
+</span>
+could be used to accomplish the same thing.
+</p>
+
+<h5 id="chapter" class="docs" style="margin-top: 0; text-transform: none;">How the CHAPTER argument and friends work</h5>
+
+<p style="margin-top: .75em">
 <span style="display: block; margin-bottom: -1.25em; font-weight: bold;">&bull;&nbsp;CHAPTER</span>
 <br/>
 The <kbd>CHAPTER</kbd> argument will print the
@@ -322,7 +450,7 @@ For example, assuming a vanilla setup for your chapter:
 <span class="pre-in-pp" style="color: #64614a;">
   .CHAPTER 1
   .CHAPTER_TITLE "The Bonny Blue Yonder"
-  <span style="color: #941614;">.COVER CHAPTER</span>  \"(or <span style="color: #941614;">.DOC_COVER CHAPTER</span>)
+  <span style="color: #941614;">.COVER CHAPTER</span>  \" (or <span style="color: #941614;">.DOC_COVER CHAPTER</span>)
 </span>
 will print (and only print)
 <br/>
@@ -371,72 +499,196 @@ will print
 </span>
 </p>
 
-<h4 id="optional-args" class="docs" style="margin-top: -1em;">The optional arguments</h4>
+<div class="macro-id-overline">
+<h3 id="covertext" class="macro-id">DOC_COVERTEXT and COVERTEXT</h3>
+</div>
+
+<div class="box-macro-args">
+Macro: <b>DOC_COVERTEXT</b> <kbd class="macro-args">&lt;toggle&gt;</kbd>
+</div>
+<div class="box-macro-args" style="margin-top: 1em;">
+Macro: <b>COVERTEXT</b> <kbd class="macro-args">&lt;toggle&gt;</kbd>
+</div>
+
+<p class="requires">
+&bull;&nbsp;Must come after
+<a href="#printstyle"><span class="normal">PRINTSTYLE</span></a>
+</p>
+
+<p>
+<kbd>DOC_COVERTEXT</kbd> and <kbd>COVERTEXT</kbd> allow you to add
+text to doc-covers and covers in addition to, or instead of, what is
+generated by mom from the arguments you give to
+<a href="#doccover">DOC_COVER</a>
+and
+<a href="#doccover">COVER</a>.
+</p>
+
+<p>
+Invoke <kbd>.DOC_COVERTEXT</kbd> or <kbd>.COVERTEXT</kbd> on a line
+by itself, follow it with the text and formatting you desire, and
+terminate the text block with <kbd>.DOC_COVERTEXT&nbsp;OFF</kbd> or
+<kbd>COVERTEXT&nbsp;OFF</kbd> (or <kbd>QUIT, END, DONE</kbd>, etc.).
+</p>
+
+<p>
+By default, cover text is set over the full line length of the
+document, using the style parameters of
+<a href="definitions.html#running">running text</a>.
+Therefore, as noted, these macros must come after PRINTSTYLE
+and any global style changes (margins, family, size, leading,
+etc.).  Formatting within a cover text block must be done
+&#8220;manually&#8221; with mom&#8217;s typesetting macros;
+<a href="docelement.html#pp">PP</a>
+is the only allowed document element tag.
+</p>
+
+<h4 id="placement" class="docs">Placement</h4>
 
 <p>
-The remainder of the arguments to COVER and
-DOC_COVER are optional.  They refer specifically to
-the information you gave the
-<a href="docprocessing.html#reference-macros">reference macros</a>
-bearing the same name as the arguments.  You may enter as many or as
-few as you like, in any order.
+If you do not instruct mom to put anything on doc-cover or cover
+pages except <kbd>DOC_COVERTEXT</kbd> or <kbd>COVERTEXT</kbd>, the
+cover text will begin at the document&#8217;s top margin.  You must
+use
+<a href="typesetting.html#space">SP</a>
+or
+<a href="typesetting.html#ald">ALD</a>
+to move it further down the page.  Equally, if only
+<kbd>COPYRIGHT</kbd> and/or <kbd>MISC</kbd> are to go on the pages,
+cover text begins at the top margin.  In all other cases, cover text
+begins below the last element on the page (excluding COPYRIGHT or
+MISC), separated by a blank line.
 </p>
 
-<h5 id="doctype" class="docs" style="text-transform: none; margin-top: -.5em;">What the DOCTYPE argument means</h5>
+<p>
+<kbd>DOC_COVERTEXT</kbd> and <kbd>COVERTEXT</kbd> are particularly
+useful for putting abstracts on cover pages, as technical reports
+often require.
+</p>
 
 <p>
-When you pass COVER or DOC_COVER
-the argument, <kbd>DOCTYPE</kbd>, it refers to the argument you gave
-to
-<a href="docprocessing.html#doctype">DOCTYPE</a>&nbsp;<kbd>NAMED</kbd>.
-For example, if, in your
-<a href="docprocessing.html#docstyle-macros">docstyle macros</a>
-you gave a
+Here's a simple recipe for setting an abstract:
 <br/>
 <span class="pre-in-pp">
-    .DOCTYPE NAMED "Abstract"
+  .COVERTEXT
+  .FT BI
+  .PT_SIZE 14
+  .LS 14
+  .CENTER
+  Abstract
+  .SP .5v
+  .FT R
+  .PT_SIZE 12
+  .IB 6P
+  .JUSTIFY
+  Text of Abstract...
+  .COVERTEXT OFF
 </span>
-the argument, <kbd>DOCTYPE</kbd>, given to the COVER or DOC_COVER
-macros, would mean that you wanted the word, Abstract, to appear on
-the cover or doc cover underneath the title and/or author(s), just
-as it would in the
-<a href="docprocessing.html#docheader">docheader</a>.
+Assuming you have told mom to put the title and author on the
+cover page, the abstract will appear beneath the author with a
+14-point bold-italic title, centered, with the text of the abstract
+medium-roman and justified, indented 6 picas from both margins.
 </p>
 
-<h5 id="blankpage" class="docs" style="text-transform: none; margin-top: -.5em;">What the BLANKPAGE argument means</h5>
+<div class="macro-id-overline">
+<h3 id="coverimage" class="macro-id">DOC_COVER_IMAGE and COVER_IMAGE</h3>
+</div>
+
+<div id="coverimage" class="box-macro-args">
+Macro: <b>DOC_COVER_IMAGE</b> <kbd class="macro-args">&lt;image&gt; &lt;width&gt; &lt;height&gt; [ -L | -C | -R | -I &lt;indent&gt; &lt;Y-pos&gt; [ &lt;X-pos&gt; ] ]</kbd>
+</div>
+
+<div id="coverimage" class="box-macro-args" style="margin-top: 1em;">
+Macro: <b>COVER_IMAGE</b> <kbd class="macro-args">&lt;image&gt; &lt;width&gt; &lt;height&gt; [ -L | -C | -R | -I &lt;indent&gt; &lt;Y-pos&gt; [ &lt;X-pos&gt; ] ]</kbd> 
+</div>
 
 <p>
-If the final argument to DOC_COVER or COVER is <kbd>BLANKPAGE</kbd>,
-mom will insert a blank page after the doc cover or cover.  This is
-particularly useful if you intend to print your document two-sided,
-since, in two-sided printing, there may be instances where you do
-not want text on the reverse side of cover or title pages.
+There are times you need a full page image on a cover, for example
+the jacket of a book.  Equally, there are times when you need a small
+image on the cover, perhaps a company logo.
 </p>
 
 <p>
-If you enable DOC_COVERS_COUNT_PAGES and/or COVERS_COUNT_PAGES, the
-blank page will be taken into account in the pagination scheme,
-though no page number appears on it.  Otherwise, blank pages are
-invisible to mom's pagination.
+DOC_COVER_IMAGE and COVER_IMAGE take the same arguments
+as PDF_IMAGE, and in the same order.  Consult
+<a href="images.html#pdf-image">PDF_IMAGE</a>
+for a desciption.
 </p>
 
-<h5 id="pdf-label" class="docs" style="text-transform: none; margin-top: -.5em;">What the PDF_OUTLINE_LABEL argument means</h5>
+<p>
+Two additional arguments allow you to place images using x-y
+coordinates.  Please note that if you use x-y coordinates for
+positioning, <b>Y-pos</b> comes before <b>X-pos</b> in the order of
+arguments.
+</p>
 
 <p>
-By default, mom identifies doccovers in the outline panel of PDF
-viewers with the prepended string, &#8220;Cover:&#8221;, and covers
-with the string &#8220;Title Page:&#8221;.  If you would like
-to change the strings, pass the <kbd>PDF_OUTLINE_LABEL</kbd>
-argument to COVER or DOCCOVER, along with the new string.
+Like PDF_IMAGE, the image file must be in PDF format.  Mom
+apologizes, but PostScript images are not supported for inclusion on
+covers.  See
+<a href="images.html#pdf">Image conversion and file processing</a>
+for instructions on converting various image types to PDF, and
+<a href="images.html#bounding-box">here</a>
+for instructions on obtaining image dimensions.
 </p>
 
-<!-- -ENABLING/DISABLING- -->
+<h4 id="positioning" class="docs">Positioning of doc-cover and cover images</h4>
 
-<div class="macro-id-overline">
+<p>
+With no arguments other than <kbd>&lt;file name&gt;</kbd>,
+<kbd>&lt;width&gt;</kbd>, and <kbd>&lt;height&gt;</kbd>,
+DOC_COVER_IMAGE and COVER_IMAGE place images flush with the top
+left corner of the printer sheet.  This allows placing full-page
+background images on covers.  For example, assuming a US-letter page
+size,
+<br/>
+<span class="pre-in-pp">
+  .DOC_COVER_IMAGE image.pdf 612p 792p
+  .DOC_COVER TITLE AUTHOR DOC_COVER_IMAGE
+</span>
+will fill the doc-cover page with &#8220;image.pdf&#8221; and set
+the title and author in their usual locations.
+</p>
+
+<p>
+For smaller images, the horizontal position is established
+with one of the <kbd>-L</kbd>, <kbd>-C</kbd>, <kbd>-R</kbd>, or
+<kbd>-I&nbsp;&lt;indent&gt;</kbd> arguments, just like
+<a href="images.html#pdf-image">PDF_IMAGE</a>.
+You may instead use the <kbd>X-pos</kbd> argument, provided that it
+is preceded by a <kbd>Y-pos</kbd> argument.  The values given to
+<kbd>-I</kbd>, <kbd>Y-pos</kbd> and <kbd>X-pos</kbd> must have a
+<a href="definitions.html#unitofmeasure">unit of measure</a>
+appended to them.
+</p>
+
+<p>
+Vertical positioning of smaller images requires the <kbd>Y-pos</kbd>
+argument (which is why it precedes <kbd>X-pos</kbd> in the order of
+arguments) otherwise the image will be flush with the top edge of
+the printer sheet
+</p>
+
+<p>
+The positioning of images does not effect the placement of type on
+doc-cover and cover pages.
+</p>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Tip:</span>
+The combination of
+<a href="#covertext">COVERTEXT</a>
+and COVER_IMAGE make it possible to design covers entirely to your
+own specifications.
+</p>
+</div>
+
+<div class="macro-id-overline" style="margin-top: .5em">
 <h3 id="on-off" class="macro-id">Enabling/disabling automatic generation of cover pages</h3>
 </div>
 
-<div id="covers" class="box-macro-args">
+<div id="covers" class="box-macro-args" style="margin-top: .5em">
 Macro: <b>COVERS</b> <kbd class="macro-args">&lt;toggle&gt;</kbd>
 </div>
 
@@ -449,7 +701,7 @@ By default, if you give mom a
 <a href="#cover">COVER</a>
 or
 <a href="#doc-cover">DOC_COVER</a>
-directive, she will print the cover or doc cover.  In a document
+directive, she will print the cover or doc-cover.  In a document
 that contains sections, articles or chapters formerly treated as
 &#8221;one-off&#8217;s&#8221; but now being
 <a href="rectoverso.html#collate-intro">collated</a>,
@@ -458,12 +710,11 @@ such behaviour may not be desirable.
 
 <p>
 Mom lets you selectively enable or disable the generation of covers
-and/or doc covers with the toggle macros, COVERS and DOC_COVERS.
+and/or doc-covers with the toggle macros, COVERS and DOC_COVERS.
 Because they&#8217;re toggle macros, simply invoking them by
-themselves enables automatic cover or doc cover generation, while
+themselves enables automatic cover or doc-cover generation, while
 invoking them with any argument at all (<kbd>OFF, QUIT, X</kbd>,
-etc) disables cover or doc cover generation.
-</p>
+etc) disables cover or doc-cover generation. </p>
 
 <div class="box-tip">
 <p class="tip">
@@ -482,10 +733,10 @@ instances of START.
 
 <div class="rule-short"><hr/></div>
 
-<h2 id="cover-control" class="macro-group">Control macros for covers and doc covers</h2>
+<h2 id="cover-control" class="macro-group">Control macros for doc-covers and covers</h2>
 
 <p>
-The default typographic appearance of the items on a cover or doc
+The default typographic appearance of the items on a doc-cover or
 cover is identical to that of the items in a
 <a href="definitions.html#docheader">docheader</a>.
 (See
@@ -501,111 +752,80 @@ which do not appear in docheaders, have the following default
 characteristics:
 </p>
 <ul style="margin-top: -.5em; margin-bottom: -.5em;">
-  <li>the COPYRIGHT line is set in the bottom right hand corner
-      of the page, 2
+  <li>the COPYRIGHT line is set flush with the document&#8217;s right
+      and bottom margins, 2
       <a href="definitions.html#ps">point sizes</a>
       smaller than the size of
       <a href="definitions.html#running">running text</a>
   </li>
-  <li>MISC lines are set in the bottom left hand
-      corner of the page, in the same family, font and point size
-      as the copyright line.
+  <li>MISC lines are set flush with the document&#8217;s left and bottom
+      margins, in the same family, font and point size as the
+      copyright line.
   </li>
 </ul>
 
 <p>
-The defaults for the entirety of covers and doc covers, and all the
+The defaults for the entirety of doc-covers and covers, and all the
 elements thereon, can be changed with control macros whose defaults
-and arguments are identical to the corresponding control macros
-governing docheaders.  The only difference is the name by which you
-invoke them.
-</p>
-
-<p>
-A complete list of cover and doc cover control macros follows.
-Please refer to
-<a href="docprocessing.html#index-docheader-control">docheader control</a>
-in order to get the defaults and any special instructions for usage.
-</p>
-
-<h3 id="index-cover-control" class="docs" style="margin-bottom: .25em;">Cover / doc cover control macros and defaults</h3>
-
-<div class="defaults-container" style="padding-bottom: 8px;">
-
-<span class="pre defaults">
-COVER_ADVANCE  DOC_COVER_ADVANCE -+
-COVER_FAMILY   DOC_COVER_FAMILY   | like
-COVER_LEAD     DOC_COVER_LEAD     | DOCHEADER_&lt;spec&gt;
-COVER_QUAD     DOC_COVER_QUAD    -+
-
-COVER_TITLE_FAMILY  DOC_COVER_TITLE_FAMILY -+
-COVER_TITLE_FONT    DOC_COVER_TITLE_FONT    | like
-COVER_TITLE_COLOR   DOC_COVER_TITLE_COLOR   | TITLE_&lt;spec&gt;
-COVER_TITLE_SIZE    DOC_COVER_TITLE_SIZE   -+
-
-COVER_CHAPTER_TITLE_FAMILY  DOC_COVER_CHAPTER_TITLE_FAMILY -+
-COVER_CHAPTER_TITLE_FONT    DOC_COVER_CHAPTER_TITLE_FONT    | like
-COVER_CHAPTER_TITLE_COLOR   DOC_COVER_CHAPTER_TITLE_COLOR   | CHAPTER_TITLE_&lt;spec&gt;
-COVER_CHAPTER_TITLE_SIZE    DOC_COVER_CHAPTER_TITLE_SIZE   -+
-
-COVER_SUBTITLE_FAMILY  DOC_COVER_SUBTITLE_FAMILY -+
-COVER_SUBTITLE_FONT    DOC_COVER_SUBTITLE_FONT    | like
-COVER_SUBTITLE_COLOR   DOC_COVER_SUBTITLE_COLOR   | SUBTITLE_&lt;spec&gt;
-COVER_SUBTITLE_SIZE    DOC_COVER_AUTHOR_SIZE     -+
-
-COVER_ATTRIBUTE_COLOR  DOC_COVER_ATTRIBUTE_COLOR - like ATTRIBUTE_COLOR
- - the macro, ATTRIBUTE_STRING, controls the attribution string
-   for both docheaders and cover pages; cover pages have no
-   separate ATTRIBUTE_STRING macro
-
-COVER_AUTHOR_FAMILY  DOC_COVER_AUTHOR_FAMILY -+
-COVER_AUTHOR_FONT    DOC_COVER_AUTHOR_FONT    | like
-COVER_AUTHOR_COLOR   DOC_COVER_AUTHOR_COLOR   | AUTHOR_&lt;spec&gt;
-COVER_AUTHOR_SIZE    DOC_COVER_AUTHOR_SIZE   -+
-
-COVER_DOCTYPE_FAMILY  DOC_COVER_DOCTYPE_FAMILY -+
-COVER_DOCTYPE_FONT    DOC_COVER_DOCTYPE_FONT    | like
-COVER_DOCTYPE_COLOR   DOC_COVER_DOCTYPE_COLOR   | DOCTYPE_&lt;spec&gt;
-COVER_DOCTYPE_SIZE    DOC_COVER_DOCTYPE_SIZE   -+
-
-COVER_COPYRIGHT_FAMILY  DOC_COVER_COPYRIGHT_FAMILY -+
-COVER_COPYRIGHT_FONT    DOC_COVER_COPYRIGHT_FONT    |
-COVER_COPYRIGHT_COLOR   DOC_COVER_COPYRIGHT_COLOR   | like any of the above
-COVER_COPYRIGHT_SIZE    DOC_COVER_COPYRIGHT_SIZE    |
-COVER_COPYRIGHT_QUAD    DOC_COVER_COPYRIGHT_QUAD   -+
-  - copyright quad sets both the position on the page and the quad
-    direction and can be either L (left) or R (right); default is right
-
-COVER_MISC_FAMILY  DOC_COVER_MISC_FAMILY -+
-COVER_MISC_FONT    DOC_COVER_MISC_FONT    |
-COVER_MISC_COLOR   DOC_COVER_MISC_COLOR   | like any of the above
-COVER_MISC_SIZE    DOC_COVER_MISC_SIZE    |
-COVER_MISC_QUAD    DOC_COVER_MISC_QUAD   -+
-  - misc quad sets both the position on the page and the quad
-    direction and can be either L (left) or R (right); default is left
-
-COVER_UNDERLINE    DOC_COVER_UNDERLINE - like DOCTYPE_UNDERLINE
-  - cover underline controls underlining of the argument given to
-    DOCTYPE NAMED "&lt;name&gt;" only
-
-COVER_COUNTS_PAGES DOC_COVER_COUNTS_PAGES
- - whether to consider cover pages in the pagination scheme; the
-   default is to ignore them
- - see Note
-</span>
-</div>
+and arguments are identical to the corresponding
+<a href="docprocessing.html#index-docheader-control">Control macros for docheaders</a>
+(q.v.)  The only difference is the name by which you invoke them.  Wherever
+<kbd>DOCHEADER</kbd> is used for overall changes, replace it
+with <kbd>DOC_COVER</kbd> or <kbd>COVER</kbd>.  For part-by-part
+changes, prepend <kbd>DOC_COVER_</kbd> or <kbd>COVER_</kbd> to the
+part/parameter.
+</p>
 
-<p style="margin-top: -2em;">
-<b>Note:</b>
+<p>
+Thus, to change the overall family, color, leading, quad and
+starting position of a doc-cover, you&#8217;d do
+<br/>
+<span class="pre-in-pp">
+  .DOC_COVER_FAMILY  H
+  .DOC_COVER_COLOR   blue
+  .DOC_COVER_LEAD    +2
+  .DOC_COVER_QUAD    L
+  .DOC_COVER_ADVANCE 3i \" or .DOC_COVER_START_POS 3i
+</span>
+To change the style parameters for selected parts of a cover, you
+might do something like this:
 <br/>
-COVER_COUNTS_PAGES and DOC_COVER_COUNTS_PAGES are toggle macros,
-hence invoking them by themselves means that mom will consider
-covers and doc covers in the pagination scheme; invoking them with
-any argument (<kbd>OFF, NO, X</kbd>, etc.) means they are ignored.
-The default is to ignore them.
+<span class="pre-in-pp">
+  .COVER_TITLE_FONT B
+  .COVER_TITLE_SIZE +4
+  .COVER_SUBTITLE_FONT I
+  .COVER_AUTHOR_FONT R
+  .COVER_AUTHOR_SPACE_BEFORE 6p
+  .COVER_DOCTYPE_COLOR red
+  .COVER_MISC_SIZE -1
+  .COVER_MISC_LEAD 12
+  .COVER_COPYRIGHT_SIZE -2
+  .COVER_COPYRIGHT_QUAD L
+  .COVER_MISC_QUAD R
+</span>
+Note in the above example that _COPYRIGHT_QUAD and _MISC_QUAD set
+both the horizontal position on the page and the quad direction,
+either L (or LEFT) or R (or RIGHT), and have no corresponding
+docheader control macro.
 </p>
 
-<div class="rule-long"><hr/></div>
+<div class="box-tip">
+<p class="tip-top">
+<span class="note">Tip:</span>
+As with the docheader control macros, <kbd>DOC_COVER_</kbd> and
+<kbd>COVER_</kbd> part/parameter style changes may be
+<a href="docprocessing.html#grouping">grouped</a>,
+for example
+</br>
+<span class="pre-in-pp">
+  .DOC_COVER_TITLE_STYLE \
+  FAMILY A \
+  FONT B \
+  SIZE +4 \
+  CAPS
+</span>
+</p>
+</div>
 
 <!-- Navigation links -->
 <table style="width: 100%; margin-top: 12px;">
@@ -622,4 +842,3 @@ The default is to ignore them.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index edc9a76005cb8325aca641cffae3e030b775b333..0d032fa27bf230b1538e6b6170f9ba7619fe77d0 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014  Free Software Foundation, Inc.
+Copyright (C) 2004-2018  Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -110,6 +110,7 @@ or concept you&#8217;re not familiar with.
         <a href="#numericargument">Numeric argument</a><br/>
         <a href="#outputline">Output line</a><br/>
         <a href="#primitives">Primitives</a><br/>
+        <a href="#preprocessor">Pre-processor</a><br/>
         <a href="#stringargument">String Argument</a><br/>
         <a href="#unitofmeasure">Unit of measure</a><br/>
         <a href="#zerowidthcharacter">Zero-width character</a><br/>
@@ -123,10 +124,12 @@ or concept you&#8217;re not familiar with.
     <tr><th class="definitions">Mom terms</th></tr>
     <tr>
       <td>
+        <a href="#baseline-grid">Baseline grid</a><br/>
         <a href="#blockquote">Blockquote</a><br/>
         <a href="#controlmacro">Control macro</a><br/>
         <a href="#docheader">Docheader</a><br/>
         <a href="#epigraph">Epigraph</a><br/>
+        <a href="#float">Float</a><br/>
         <a href="#footer">Footer</a><br/>
         <a href="#head">Head</a><br/>
         <a href="#header">Header</a><br/>
@@ -229,7 +232,7 @@ or concept you&#8217;re not familiar with.
   <dd>
   The collective name by which a collection of
   <a href="#font">fonts</a>
-  are known, eg Helvetica, Times Roman, Garamond.
+  are known, e.g., Helvetica, Times Roman, Garamond.
   </dd>
   
   <dt id="figurespace">Figure space/Digit space</dt>
@@ -240,11 +243,11 @@ or concept you&#8217;re not familiar with.
   say, columns or numbered lists.  In groff, the figure space is
   entered with <kbd>\0</kbd> (ie a backslash followed by a zero)
   </dd>
-  
-  <dt id="fixedwidthfont">Fixed width font</dt>
+
+  <dt id="fixedwidthfont">Fixed-width font</dt>
   <dd>
   A family or font in which every character occupies exactly the
-  same amount of vertical space on the line.  Courier is the
+  same amount of horizontal space on the line.  Courier is the
   best-known, if not the most elegant, fixed-width font.
   </dd>
 
@@ -267,7 +270,7 @@ or concept you&#8217;re not familiar with.
   <a href="#shape">shape</a>
   of type within a
   <a href="#family">family</a>,
-  eg light, medium, bold (which are weights), and roman, italic,
+  e.g., light, medium, bold (which are weights), and roman, italic,
   condensed (which are shapes).  By default, groff knows of four
   fonts within its default set of families: R (medium roman), I
   (medium italic), B (bold roman) and BI (bold italic).
@@ -662,7 +665,7 @@ or concept you&#8217;re not familiar with.
   when the groff device is ps. (&#8220;ps&#8221; means
   &#8220;PostScript&#8221;&mdash;the default device for
   which groff prepares output, and the device for which
-  mom was specifically designed.)
+  mom was originally designed.)
   </dd>
   
   <dt id="numericargument">Numeric argument</dt>
@@ -698,6 +701,17 @@ or concept you&#8217;re not familiar with.
   A line of text as it appears in output copy.
   </dd>
   
+  <dt id="preprocessor">Pre-processor</dt>
+  <dd>
+  Pre-processors are used by groff to generate tables (tbl),
+  diagrams (pic), and equations (eqn).  These pre-processors are
+  fully supported by mom.  In addition, the &#8220;refer&#8221;
+  pre-processor is used to generate bibliographies and lists of
+  cited works.  The PDF_IMAGE macro, which allows insertion of
+  graphics into a document, is not strictly a pre-processor but
+  behaves similarly to tbl, pic, and eqn.
+  </dd>
+  
   <dt id="primitives">Primitives</dt>
   <dd>
   The lowercase instructions, introduced with a period, that groff
@@ -782,7 +796,7 @@ or concept you&#8217;re not familiar with.
   
   <p>
   You can enter decimal values for any unit of measure.  Different
-  units may be combined by adding them together (eg 1.5i+2m,
+  units may be combined by adding them together (e.g., 1.5i+2m,
   which gives a measure of 1-1/2 inches plus 2 ems).
   </p>
   
@@ -828,20 +842,20 @@ or concept you&#8217;re not familiar with.
 
 <h3 id="mom-terms" class="docs">Mom terms</h3>
 <dl>
-  <dt id="blockquote">Blockquote</dt>
+  <dt id="baseline-grid">Baseline grid</dt>
   <dd>
-  Cited material other than
-  <a href="#quote">quotes</a>.
-  Typically set at a smaller point size than paragraph text,
-  indented from the left and right margins.  Blockquotes are
-  <a href="#filled">filled</a>.
+  Virtual guide lines spaced according to the
+  <a href="#leading">leading</a>
+  established for running text.  Adherence to the grid ensures that
+  text fills the page completely to the bottom margin.  Uncorrected
+  deviations from the grid result in bottom margins that fall short.
   </dd>
   
   <dt id="controlmacro">Control macro</dt>
   <dd>
   Macros used in
   <a href="docprocessing.html#docprocessing">document processing</a>
-  to control/alter the appearance of document elements (eg
+  to control/alter the appearance of document elements (e.g.,
   headings, quotes, footnotes,
   <a href="#header">headers</a>,
   etc.).
@@ -859,6 +873,14 @@ or concept you&#8217;re not familiar with.
   a chapter, story, or other document.
   </dd>
   
+  <dt id="float">Float</dt>
+  <dd>
+  A float is material intended to be kept together as a block.
+  Floated material that fits on a page in position is output on that
+  page.  Floats that do not fit in position are deferred to the top
+  of the next page.
+  </dd>
+  
   <dt id="footer">Footer/page footer</dt>
   <dd>
   Document information (frequently author and title) output in
@@ -898,7 +920,7 @@ or concept you&#8217;re not familiar with.
   <a href="#running">running text</a>,
   frequently set off by typographic symbols such as asterisks or
   daggers.  Used to indicate a shift in the content of a document
-  (eg a scene change in a short story).  Also commonly called a
+  (e.g., a scene change in a short story).  Also commonly called a
   scene break or a section break.
   </dd>
   
@@ -918,14 +940,14 @@ or concept you&#8217;re not familiar with.
   <dt id="pdfoutline">PDF outline</dt>
   <dd>
   The hierarchically-arranged navigation outline provided by most PDF
-  viewers (eg Okular, Evince), typically in a panel to the left of
+  viewers (e.g., Okular, Evince), typically in a panel to the left of
   the document window, and usually labeled &#8220;Contents&#8221;.
   </dd>
   
   <dt id="quote">Quote</dt>
   <dd>
   A quote, to mom, is a line-for-line setting
-  of quoted material (eg poetry, song lyrics, or a snippet of
+  of quoted material (e.g., poetry, song lyrics, or a snippet of
   programming code).  You don&#8217;t have to use
   <a href="typesetting.html#br"><kbd>BR</kbd></a>
   with quotes.
@@ -970,4 +992,3 @@ or concept you&#8217;re not familiar with.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified:-->
index 090352e71dcac9fb387358d5a6fd265b31189034..a6ef1c6e5084d1ff57e08e329421abf9cc896abf 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -53,6 +53,7 @@ FDL in the main directory of the groff source package.
       <li><a href="#quad">quad/justification</a></li>
       <li><a href="#underline">underline style, rule weight</a></li>
     </ul></li>
+    <li><a href="#grouping">Grouping control macros</a></li>
   </ul></li>
 </ul>
 </div>
@@ -369,7 +370,20 @@ Control macros that end in _QUAD take the same arguments as
 If mom gives the option to underline a document element, the weight
 of the underline and its distance from the
 <a href="definitions.html#baseline">baseline</a>
-are controlled by macros that end in _UNDERLINE.
+are controlled by macros that end in _UNDERSCORE or _UNDERLINE.
+These macros take the following arguments:
+<br/>
+<span class="pre-in-pp">
+  DOUBLE     - double underscore
+  &lt;weight&gt;   - the underscore weight (in points, no unit of measure required
+  &lt;distance&gt; - distance from baseline (unit of measure required)
+  &lt;rule gap&gt; - distance between double underscore rules (unit of measure required_
+</span>
+<kbd>DOUBLE</kbd> by itself will double-underscore the element.  The
+remaining arguments must be entered in the order given.  You may not
+skip over any of them, which means that if you only wish to change
+<kbd>&lt;rule gap&gt;</kbd>, you must still enter a
+<kbd>&lt;weight&gt;</kbd> and <kbd>&lt;distance&gt;</kbd> argument.
 </p>
 
 <p>
@@ -386,6 +400,63 @@ to
 as is the argument to _RULE_WEIGHT macros.
 </p>
 
+<h3 id="grouping" class="docs">Grouping control macros</h3>
+
+<p>
+As of version 2.1, it is possible to group control macros for a
+particular tag into a single <kbd>&lt;element&gt;_STYLE</kbd> macro.
+For example, rather than setting the family, size, and indent of
+<a href="#blockquote-intro">BLOCKQUOTES</a>
+with
+<br/>
+<span class="pre-in-pp">
+  .BLOCKQUOTE_FAMILY H
+  .BLOCKQUOTE_SIZE -2
+  .BLOCKQUOTE_INDENT 4P
+</span>
+you can enter the same style parameter changes with
+<br/>
+<span class="pre-in-pp">
+  .BLOCKQUOTE_STYLE \
+  FAMILY H \
+  SIZE -2 \
+  INDENT 4P
+</span>
+<kbd>&lt;element&gt;_STYLE</kbd> macros use
+&#8220;keyword/value&#8221; pairs (<kbd>FAMILY</kbd> is a keyword,
+<kbd>H</kbd> is a value), and may be entered entirely on one line,
+or, as the example shows, broken into several readable lines using
+the backslash.  The macro itself and all but the last keyword/value
+pair require the backslash when this style is used.
+</p>
+
+<p>
+Not all the control macros for a particular tag may be available
+with an <kbd>&lt;element&gt;_STYLE</kbd> macro.  Generally speaking,
+though, if a tag has control macros for
+<br/>
+<span class="pre-in-pp">
+  FAMILY FONT SIZE
+  LEAD AUTOLEAD
+  QUAD INDENT
+  COLOR
+  CAPS SMALLCAPS
+  UNDERLINE/UNDERSCORE
+</span>
+those parameters may be used within an
+<kbd>&lt;element&gt;_STYLE</kbd> macro.
+</p>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+If you need to reverse the sense of <kbd>CAPS</kbd>,
+<kbd>SMALLCAPS</kbd> or <kbd>UNDERSCORE/UNDERLINE</kbd>, which
+do not take a value after the keyword, use <kbd>NO_CAPS</kbd>,
+<kbd>NO_SMALLCAPS</kbd> and <kbd>NO_UNDERSCORE/NO_UNDERLINE</kbd>.
+</p>
+</div>
+
 <div class="rule-short"><hr/></div>
 
 <!-- ==================================================================== -->
@@ -469,11 +540,24 @@ or
 
 <div class="box-tip">
 <p class="tip">
-<span class="tip">Tip:</span>
+<span class="tip">Tips on vertical spacing around epigraphs:</span>
+If you wish to change the vertical position of an epigraph with
+<a href="typesetting.html#space">SPACE</a>/
+<a href="typesetting.html#ald">ALD</a>/
+<a href="typesetting.html#rld">RLD</a>,
+do so before invoking <kbd>.EPIGRAPH</kbd>, like this:
+<br/>
+<span class="pre-in-pp">
+  .SP -6p
+  .EPIGRAPH
+  A notable quote.
+  .EPIGRAPH OFF
+</span>
 If you&#8217;re setting a document in
 <a href="docprocessing.html#columns">columns</a>
-and you&#8217;d like to add or subtract space after the epigraph,
-the place to do it is inside the epigraph, like this:
+and you&#8217;d like to add or subtract space <i>after</i> the
+epigraph, which is centred over the top of both columns, the place
+to do it is inside the epigraph, like this:
 <br/>
 <span class="pre-in-pp">
   .EPIGRAPH
@@ -493,6 +577,10 @@ resulting in unbalanced columns.
 <p class="defaults">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following EPIGRAPH control macros may also be
+<a href="#grouping">grouped</a>
+using EPIGRAPH_STYLE.
 </p>
 
 <span class="pre defaults">
@@ -501,10 +589,7 @@ See
 .EPIGRAPH_SIZE      default = -1.5 (points)
 .EPIGRAPH_COLOR     default = black
 .EPIGRAPH_AUTOLEAD  default = 2 points
-
 (The next two apply to &#8220;block&#8221; style epigraphs only)
-
-.EPIGRAPH_QUAD      default = same as paragraphs
 .EPIGRAPH_INDENT*  (see Note on EPIGRAPH_INDENT, below)
 
 *Indent here refers to the indent from both the left and right margins
@@ -575,65 +660,27 @@ her to do so, use the control macro
 <a href="typesetting.html#printstyle">PRINTSTYLE TYPEWRITE</a>.)
 </p>
 
-<div class="box-tip">
-<p class="tip">
-<span class="tip">Tip:</span>
-If you want to add less than a full linespace between
-paragraphs, you may give the amount of space you&#8217;d like as an
-argument to
-<kbd>.PARA_SPACE</kbd>. 
-</span>
-Introducing a paragraph with <kbd>.PP2</kbd> will add a space equal
-to one-quarter of the prevailing linespace before the start of the
-paragraph.  Initial paragraphs, ie those at the start of a document,
-or after a heading or
-<a href="#linebreak-intro">linebreak</a>,
-should still be introduced with
-<kbd>.PP</kbd>.
-</div>
-
 <p>
 Note that mom does not provide widow or orphan control for
 paragraphs (ie even if only one line of a paragraph fits at the
 bottom of a page, she will set it on that page).  The reason for
 this is that writers of fiction often have single-line paragraphs
-(eg in dialogue).  Groff&#8217;s simplistic orphan control will
+(e.g., in dialogue).  Groff&#8217;s simplistic orphan control will
 break these one-liners&mdash;if they fall at the bottom of the
 page&mdash;to a new page, which is not what you want.
 </p>
 
 <div class="box-tip">
-<p class="tip-top">
+<p class="tip">
 <span class="tip">Tip:</span>
-The last thing you want while you&#8217;re writing and editing
-drafts of a document (particularly stories and chapters) is a
-text file cluttered up with <kbd>.PP</kbd>&#8217;s. The visual
-interruption in the flow of text is a serious obstacle to creativity
-and critiquing.
-</p>
-
-<p>
-I use the tab key on my keyboard to indent paragraphs by four spaces
-when I'm writing, producing a text file that looks pretty much like
-what you see on a printed page.  When it comes time to format and
-print the file, I run it through a sed script that (amongst other
-things) converts the intial four spaces into <kbd>.PP</kbd> (plus a
-new line) and pipes the output to groff for processing and printing.
-</p>
-
-<p class="tip-bottom">
-Another solution would be to insert a blank line between paragraphs
-of your text files.  The blank lines can then be sedded out at
-print time, as above (<kbd>.PP</kbd> plus a newline), or, more
-conveniently, you could use the <kbd>.blm</kbd>
-<a href="definitions.html#primitives">primitive</a>
-(blank line macro) to tell groff (and mom) that blank lines should
-be interpreted as PP&#8217;s.
+If you would prefer not to clutter up your files with
+<kbd>.PP</kbd>s, you can use groff&#8217;s &#8220;blank line
+macro&#8221; to instruct groff to interpret blank lines as
+<kbd>.PP</kbd>&#8217;s, like this:
 <br/>
 <span class="pre-in-pp">
   .blm PP
 </span>
-tells groff that blank lines are really the macro PP.
 </p>
 </div>
 
@@ -666,8 +713,11 @@ and
 The PP macro being so important, and representing, as it were, the
 basis of everything that goes on in a document, its control is
 managed in a manner somewhat different from other document element
-tags.
+tags.  As a result, the control macros for PP may not be
+<a href="#grouping">grouped</a>
+within a <kbd>_STYLE</kbd> macro.
 </p>
+
 <ol style="margin-top: .5em; padding-bottom: .5em;">
   <li><a href="#pp-family">Family control</a></li>
   <li><a href="#pp-font">Font control</a></li>
@@ -700,7 +750,7 @@ If you wish to change the family for regular text paragraphs only,
 invoke <kbd>.FAMILY</kbd> immediately after <kbd>.PP</kbd> in every
 paragraph whose family you wish to differ from the prevailing
 document family.  Alternatively, set the family and font for
-paragraphs with PP_FONT, giving it a complete family+font name, eg
+paragraphs with PP_FONT, giving it a complete family+font name, e.g.,
 <br/>
 <span class="pre-in-pp">
   PP_FONT TI
@@ -763,8 +813,8 @@ italic.  Neither persists past the end of the paragraph.
 
 <p>
 Mom has no special control macro for colourizing paragraphs.  If you
-wish a colourized paragraph, you must use the macro,
-<a href="color.html#color">COLOR</a>,
+wish a colourized paragraph, you must use the macro
+<a href="color.html#color">COLOR</a>
 or the
 <a href="definitions.html#inline">inline escape</a>,
 <a href="color.html#color-inline"><kbd>\*[&lt;colourname&gt;]</kbd></a>,
@@ -820,20 +870,23 @@ and
 
 <p>
 If you wish to change the leading of regular text paragraphs only,
-invoke <kbd>.LS</kbd> immediately after <kbd>.PP</kbd> in every
+invoke <kbd>.LS</kbd> immediately after <kbd>.PP</kbd> in any
 paragraph whose leading you wish to change.
 </p>
 
 <div class="box-tip">
 <p class="tip">
 <span class="note">Warning:</span>
-It is extremely unwise to change a paragraph&#8217;s leading with LS as
-it will, in all cases, screw up mom&#8217;s ability to balance
-the bottom margin of pages.  Should you absolutely need to change
-paragraph leading with LS, and subsequently want mom to get back on
-the right leading track, use the
+Changing a paragraph&#8217;s leading will almost certaininly screw
+up mom&#8217;s ability to balance the bottom margin of pages.
+Should you absolutely require a change of paragraph&#8217;s leading and
+need to get mom back on track leading-wise afterwards, use the
 <a href="docprocessing.html#shim">SHIM</a>
-macro.
+or
+<a href="docprocessing.html#shim">FLEX</a>
+macro, depending on which
+<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a>
+strategy you are using.
 </p>
 </div>
 
@@ -966,8 +1019,8 @@ that first paragraphs will once again not be indented.
 
 <p>
 By default, mom does not insert a blank line between
-paragraphs.  If you would like her to do so, invoke the macro,
-<kbd>.PARA_SPACE</kbd>, without an argument, either before or after
+paragraphs.  If you would like her to do so, invoke the macro
+<kbd>.PARA_SPACE</kbd> without an argument, either before or after
 <a href="docprocessing.html#start">START</a>.
 PARA_SPACE is a toggle macro, therefore passing it any argument
 (<b>OFF, QUIT, Q, X</b>...) cancels its effect, meaning that
@@ -991,6 +1044,15 @@ paragraphs
 </span>
 </p>
 
+<p style="margin-top: -1em" >
+If
+<a href="docprocessing.html#flex-vs-shim">flex-spacing</a>
+is enabled, additional flexible vertical whitespace can be inserted
+between spaced paragraphs with the
+<a href="docprocessing.html#flex">FLEX</a>
+macro.
+</p>
+
 <p>
 PARA_SPACE is not recommended for use with PRINTSTYLE TYPEWRITE
 unless you give PRINTSTYLE the <kbd>SINGLESPACE</kbd> option.
@@ -1044,7 +1106,7 @@ expect the blank line to appear.
 
 <p>
 Heads, subheads, and deeper levels of section headings are handled by 
-a single macro, HEADING, to which you pass an argument stating the
+a single macro HEADING to which you pass an argument stating the
 desired level.  <kbd>.HEADING 1 &quot;&lt;text&gt;&quot;</kbd>, for
 example, would be a main head; <kbd>.HEADING 2
 &quot;&lt;text&gt;&quot;</kbd> would be a subhead; etc.
@@ -1062,7 +1124,7 @@ bookmark for
 
 <p>
 Headings can also be numbered on a per-heading-level basis,
-hierarchically and concatenatively, eg
+hierarchically and concatenatively, e.g.,
 <br/>
 <span class="pre-in-pp">
   1.
@@ -1174,25 +1236,26 @@ each heading.
 
 <p>
 If, however, you disrupt the regular placement of text on
-mom&#8217;s baseline grid, HEADING adds as much whitespace to the
-blank line as is necessary to get things back on track.  The extra
-whitespace is always less than the current leading and therefore
-usually doesn't draw attention to itself.  This, along with a
-similar strategy for whitespace around quotes and blockquotes, is
-what allows mom to balance the bottom margins of pages effectively.
-The manual,
-<a href="http://www.schaffter.ca/mom/pdf/mom-pdf.pdf"><span class="book-title">Producing PDFs with groff and mom</span></a>,
-demonstrates this well: the inter-paragraph spacing is 1/3 of the
-leading, yet mom is able to produce a document with good page-rhythm
-and evenly balanced bottom margins.
+mom&#8217;s
+<a href="definitions.html#baseline-grid">baseline grid</a>,
+HEADING adds extra whitespace to the blank line according to the
+<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a>
+strategy in effect.  This, along with a similar strategy for
+whitespace around quotes, blockquotes, and
+<a href="definitions.html#float">floated</a>
+and
+<a href="definitions.html#preprocessor">pre-processor material</a>
+is what allows mom to balance the bottom
+margins of pages effectively.
 </p>
 
 <p>
-It occasionally happens that the extra whitespace becomes noticeable,
-typically when the amount of whitespace approaches the value of the
-current leading.  The result looks like two blank lines instead of
-one.  When this happens, a simple but effective fix is to reduce the
-space before the heading by backing up one line, either with
+It occasionally happens that the extra whitespace becomes
+noticeable.  This typically occurs when the amount of whitespace
+adjustment approaches the value of the current leading.  The result
+looks like two blank lines instead of one.  When this happens, a
+simple but effective fix is to reduce the space before the heading
+by backing up one line, either with
 <br/>
 <span class="pre-in-pp">
   .SPACE -1v
@@ -1203,30 +1266,21 @@ or
   .RLD -1v
 </span>
 This results in slightly less whitespace than normal, but the
-difference is usually not apparent.
-</p>
-
-<p class="tip-bottom">
-If you&#8217;d prefer that mom not add flexible whitespace to
-headings, invoke the macro
+difference is usually not apparent.  Alternatively, you may pass the
+<kbd>NO_SHIM</kbd> or <kbd>NO_FLEX</kbd> argument to
+<a href="#heading-style">HEADING_STYLE</a>
+to prevent shimming or flex-spacing of any particlar heading level
+either globally or selectively.  If shimming/flex-spacing is
+disabled selectively with
 <br/>
 <span class="pre-in-pp">
-  .NO_SHIM
+  .HEADING_STYLE &lt;n&gt; NO_SHIM | NO_FLEX
 </span>
-either in the style sheet section of your document (ie after
-PRINTSTYLE but before START), which will globally disable whitespace
-adjustment not only before headings, but around quotes and
-blockquotes as well, or on a per-instance basis.  <kbd>.NO_SHIM</kbd>
-is disabled by issuing
+it can be re-enabled for the heading level with
 <br/>
 <span class="pre-in-pp">
-  .NO_SHIM OFF
+  .HEADING_STYLE &lt;n&gt; SHIM | FLEX
 </span>
-Please note that <kbd>.NO_SHIM</kbd> also disables mom&#8217;s
-automatic shimming around quotes, blockquotes, after PDF images and
-floats, and
-<a href="docprocessing.html#shim">SHIM</a>
-macro itself.
 </p>
 </div>
 
@@ -1248,7 +1302,7 @@ A single blank line precedes all levels of heading.
 <h4 id="heading-style" class="docs" style="margin-bottom: -.5em">The HEADING_STYLE macro</h4>
 
 <p>
-Styling heads is accomplished with a single macro,
+Styling heads is accomplished with a single macro
 <br/>
 <span class="pre-in-pp">
   .HEADING_STYLE&nbsp;&lt;level&gt;
@@ -1270,9 +1324,13 @@ which may be given in any order:
   UNDERSCORE  &lt;weight&gt; &lt;gap&gt; | NO_UNDERSCORE \
   UNDERSCORE2 &lt;weight&gt; &lt;gap1&gt; &lt;gap2&gt; | NO_UNDERSCORE2 \
   CAPS | NO_CAPS \
+  SMALLCAPS | NO_SMALLCAPS \
   BASELINE_ADJUST &lt;amount to raise heading from the baseline&gt; \
+  NEEDS &lt;lines of text required beneath the heading &gt;
   SPACE_AFTER | NO_SPACE_AFTER \
-  NUMBER | NO_NUMBER
+  NUMBER | NO_NUMBER \
+  NO_SHIM | SHIM \
+  NO_FLEX | FLEX
 </span>
 </p>
 
@@ -1323,6 +1381,17 @@ requires no <kbd>+</kbd> or <kbd>-</kbd> sign, and must have a
 appended to it.
 </p>
 
+<p class="defaults" style="margin-bottom: 1em">
+<kbd>NEEDS</kbd> lets you reserve the number of lines of text
+required beneath a heading, including fractions thereof (e.g.,
+&#8220;1.5&#8221; for one line of text plus half a linespace).
+If a heading falls near the bottom margin and there isn&#8217;t
+sufficient room for both the heading and the reserved space, mom
+will break to a new page for the heading.  A
+<a href="definitions.html#unitofmeasure">unit of measure</a>
+should not be appended to the argument.
+</p>
+
 <p class="defaults" style="margin-bottom: 1em">
 <kbd>SPACE_AFTER</kbd> inserts a blank line equal to the current
 <a href="definitions.html#leading">leading</a> after a HEADING.
@@ -1345,6 +1414,15 @@ number to numbered headings and Table of Contents entries,
 <a href="#prefix-chapter-number">PREFIX_CHAPTER_NUMBER</a>.
 </p>
 
+<p class="defaults" style="margin-bottom: 1em">
+<kbd>SHIM</kbd> is not necessary if shimming is enabled
+globally, which it is by default; it exists to re-enable
+shimming for the heading level if you have previously passed
+HEADING_STYLE&nbsp;<kbd>&lt;n&gt;</kbd> a <kbd>NO_SHIM</kbd>
+argument.  The <kbd>FLEX</kbd> and <kbd>NO_FLEX</kbd> arguments work
+the same way if flex-spacing is enabled.
+</p>
+
 <p class="defaults" style="padding-bottom: .5em">
 The argument list is long, so you may want to break it into
 several lines by using the backslash character (<kbd>\</kbd>).
@@ -1358,7 +1436,7 @@ Here's an example of how you might style a level 1 heading:
   BASELINE_ADJUST 3p \
   NUMBER
 </span>
-This creates a level-1 heading style that's bold, centered,
+This creates a level-1 heading style that's bold, centred,
 underscored and numbered, raised by 3 points from the baseline.
 </p>
 </div>
@@ -1434,7 +1512,7 @@ numbered head element of each collated document).
 
 <p>
 PREFIX_CHAPTER_NUMBER can be disabled by passing it any argument
-other than a digit (eg <b>OFF, QUIT, END, X</b>, etc), although,
+other than a digit (e.g., <b>OFF, QUIT, END, X</b>, etc), although,
 as noted above, mom will keep, and&mdash;in the case of collated
 documents&mdash;increment the chapter number, allowing you to turn
 prefixing of chapter numbers to numbered head elements off and on
@@ -1449,8 +1527,8 @@ the chapter number, it&#8217;s use need not be restricted to
 You can use it with any document type.  Furthermore, even if
 your doctype isn&#8217;t <kbd>CHAPTER</kbd>, you can identify
 the document as a chapter for the purposes of numbering head
-elements by invoking the macro,
-<a href="docprocessing.html#chapter"><kbd>.CHAPTER</kbd></a>,
+elements by invoking the macro
+<a href="docprocessing.html#chapter"><kbd>.CHAPTER</kbd></a>
 with a
 <a href="definitions.html#numericargument">numeric argument</a>
 in your document setup. 
@@ -1503,7 +1581,7 @@ the changes with the
 <a href="#heading-style">HEADING_STYLE</a>
 macro.  The entire style need not be recreated, only those
 parameters that differed from mom's defaults.  Thus, if your HEADs
-were set flush left, instead of the oldstyle default, centered, but
+were set flush left, instead of the oldstyle default, centred, but
 otherwise kept mom's settings, you need only do
 <br/>
 <span class="pre-in-pp">
@@ -1514,7 +1592,7 @@ otherwise kept mom's settings, you need only do
 <div id="parahead" class="box-important">
 <p class="tip-top">
 <span class="important">Important:</span>
-The macro, PARAHEAD, is no longer available.  You must create paragraph
+The macro PARAHEAD is no longer available.  You must create paragraph
 heads using the
 <a href="#heading">HEADING</a>
 macro.  Mom will abort with an informational message whenever she
@@ -1639,7 +1717,7 @@ The former style defaults for HEAD were:
 <div class="box-tip">
 <p class="tip">
 <span class="note">Note:</span>
-The macro, NUMBER_HEADS, from pre-2.0 versions of mom, can still be
+The macro NUMBER_HEADS from pre-2.0 versions of mom, can still be
 used, though it is now a wrapper for
 <br/>
 <span class="pre-in-pp">
@@ -1680,7 +1758,7 @@ The former style defaults for SUBHEAD were:
 <div class="box-tip">
 <p class="tip">
 <span class="note">Note:</span>
-The macro, NUMBER_SUBHEADS, from pre-2.0 versions of mom, can still be
+The macro NUMBER_SUBHEADS from pre-2.0 versions of mom, can still be
 used, though it is now a wrapper for
 <br/>
 <span class="pre-in-pp">
@@ -1722,7 +1800,7 @@ The former style defaults for SUBSUBHEAD were:
 <div class="box-tip">
 <p class="tip">
 <span class="note">Note:</span>
-The macro, NUMBER_SUBSUBHEADS, from pre-2.0 versions of mom, can still be
+The macro NUMBER_SUBSUBHEADS from pre-2.0 versions of mom, can still be
 used, though it is now a wrapper for
 <br/>
 <span class="pre-in-pp">
@@ -1746,7 +1824,7 @@ Mom will alert you to this on stderr.
 <p>
 Linebreaks (&#8220;author linebreaks&#8221;, &#8220;section
 breaks&#8221;) are gaps in the vertical flow of running text that
-indicate a shift in content (eg a scene change in story).  They
+indicate a shift in content (e.g., a scene change in story).  They
 are frequently set off by typographic symbols, sometimes whimsical
 in nature.
 </p>
@@ -1806,7 +1884,7 @@ and a vertical adjustment factor.
 </p>
 
 <p>
-The first argument is any valid groff character (eg <kbd>*</kbd>
+The first argument is any valid groff character (e.g., <kbd>*</kbd>
 [an asterisk], <kbd>\[dg]</kbd> [a dagger], <kbd>\f[ZD]\N'141\fP</kbd>
 [an arbitrary character from Zapf Dingbats], <kbd>\l'4P'</kbd> [a
 4-pica long rule]). Mom sets the character centred on the current
@@ -1873,11 +1951,21 @@ or
 <h2 id="quote-intro" class="macro-group">Quotes (line for line, poetry or code)</h2>
 
 <ul style="margin-left: -.5em;">
+  <li><a href="#quote-description">Introduction</a>
+  <ul style="margin-left: -1.25em">
+    <li><a href="#quote-spacing">Quote spacing</a>
+    <ul style="margin-left: -1.25em">
+      <li><a href="#quote-spacing-notes">Notes on quote spacing</a></li>
+    </ul></li>
+    <li><a href="#no-shim">Disable shimming of quotes and blockquotes</a></li>
+    <li><a href="#float-quote">Keeping quotes and blockquotes together as a block</a></li>
+    <li><a href="#label-caption">Labelling/captioning quotes and blockquotes</a></li>
+  </ul></li>
   <li><a href="#quote">Tag: QUOTE</a></li>
   <li><a href="#quote-control">Quote control macros and defaults</a></li>
 </ul>
 
-<p>
+<p id="quote-decription">
 <a href="definitions.html#quote">Quotes</a>
 are always set in
 <a href="definitions.html#filled">nofill mode</a>,
@@ -1900,8 +1988,8 @@ or underlined
 indented from the left margin.  Obviously, she&#8217;s thinking
 &#8220;quotes from poetry or song lyrics&#8221;, but with the
 <a href="#quote-control">QUOTE control macros</a>
-you can change her defaults so QUOTE serves other needs, eg
-entering verbatim snippets of programming code, command line
+you can change her defaults so QUOTE serves other needs, e.g.,
+entering verbatim snippets of programming code, command-line
 instructions, and so on.  (See the
 <a href="#code">CODE</a>
 for a convenience macro to assist in including code snippets in
@@ -1927,58 +2015,36 @@ This behaviour can be changed with the control macro
 </p>
 
 <div class="box-tip">
-<h2 id="quote-spacing-notes" class="docs" style="padding-top: 9px; font-size: 100%;">Further notes on quote spacing</h2>
+<h3 id="quote-spacing-notes" class="docs" style="padding-top: 9px; font-size: 95%;">Notes on quote spacing</h3>
 
-<p clas"defaults">
+<p style="margin-top: .5em">
 If your quote (or blockquote) leading differs from the document
 leading, mom attempts to observe the same rules for vertical
 whitespace outlined above; however, she will also insert a small,
-flexible amount of extra whitespace around the quotes to make sure
-the whitespace is equal, top and bottom.  Since she does this
-on a quote by quote basis, rather than by figuring out how much
-extra whitespace is needed to adjust <i>all</i> quotes on a page,
-the spacing around multiple quotes on the same page will differ
-slightly, although each will be balanced between lines of normal
-<a href="definitions.html#running">running text</a>,
-top and bottom.  (The inability to scan an entire page and insert
-equalized whitespace at marked places is a limitation of groff,
-which, by and large, processes text on a line-per-line basis.)
+flexible amount of extra whitespace
+(<a href="docprocessing.html#shim-vs-flex">shim or flex-spacing</a>)
+around the quotes to make sure the whitespace is equal, top and
+bottom.  When shimming is enabled, this may result in multiple
+quotes or blockquotes on the same page being spaced slightly
+differently.
 </p>
 
-<h3 id="no-shim" class="docs">Disable shimming of quotes and blockquotes</h3>
-
-<p>
-If you don&#8217;t want the behaviour described above (ie you
-don&#8217;t want mom shimming 
-quotes and blockquotes), issue the macro
-<br/>
-<span class="pre-in-pp">
-  .NO_SHIM
-</span>
-in the style sheet section of your document (ie after PRINTSTYLE but
-before START), which will disable shimming globally, or on a
-per-instance basis prior to <kbd>.QUOTE</kbd> or <kbd>.BLOCKQUOTE</kbd>.
-</p>
-
-<p>
-If you&#8217;ve disabled shimming of quotes and blockquotes with
-<kbd>.NO_SHIM</kbd> and you want mom to return to her default
-behaviour in this matter, invoke <kbd>.NO_SHIM&nbsp;OFF</kbd> (or
-<kbd>QUIT, END, X</kbd>, etc).
-</p>
-
-<p>
-Please note that <kbd>NO_SHIM</kbd> disables shimming before
-headings, and the
-<a href="docprocessing.html#shim">SHIM</a>
-macro itself.
-</p>
+<h4 id="no-shim" class="docs">Disable shimming/flex-spacing of quotes and blockquotes</h4>
 
 <p class="tip-bottom">
-If you don&#8217;t provide mom with a QUOTE_AUTOLEAD, quotes are
-leaded at the default for normal running text, meaning that multiple
-quotes on the same page are all spaced identically.
+If you don&#8217;t want the behaviour
+described above (ie you don&#8217;t want mom putting additional shim
+or flex-spacing around quotes and
+blockquotes), put <kbd>.NO_SHIM</kbd> or/and <kbd>.NO_FLEX</kbd>
+in the style sheet section of your document (ie after PRINTSTYLE
+but before START), which will disable shimming or/and flex-spacing
+globally for all tags, or disable shimming/flex-spacing
+on a per-instance basis prior to <kbd>.QUOTE</kbd> or
+<kbd>.BLOCKQUOTE</kbd>, re-enabling it after the terminating
+<kbd>.QUOTE&nbsp;OFF</kbd> or <kbd>.BLOCKQUOTE&nbsp;OFF</kbd> with
+<kbd>.NO_SHIM&nbsp;OFF</kbd> or <kbd>.NO_FLEX&nbsp;OFF</kbd>.
 </p>
+
 </div>
 
 <h3 id="float-quote" class="docs">Keeping QUOTEs and BLOCKQUOTEs together as a block</h3>
@@ -2005,7 +2071,17 @@ the <kbd>FORCE</kbd> argument.
   .QUOTE END
   .FLOAT OFF
 </span>
+</p>
 
+<h3 id="label-caption" class="docs">Labelling/captioning quotes and blockquotes</h3>
+
+<p>
+Quotes and blockquotes may be labelled and/or captioned identically to
+<a href="images.html#floats-intro">floats</a>
+with the macros
+<a href="images.html#label">LABEL</a>
+and
+<a href="images.html#caption">CAPTION</a>.
 </p>
 
 <!-- -QUOTE- -->
@@ -2015,14 +2091,18 @@ the <kbd>FORCE</kbd> argument.
 </div>
 
 <div class="box-macro-args">
-Macro: <b>QUOTE</b> <kbd class="macro-args">toggle</kbd>
+Macro: <b>QUOTE</b> <kbd class="macro-args">[ ADJUST +|-&lt;space&gt; ] | &lt;anything&gt;</kbd>
 </div>
+<p class="requires">
+&bull;&nbsp;The argument to <kbd style="font-style: normal">ADJUST</kbd> requires a
+<a href="definitions.html#unitofmeasure">unit of measure</a>
+</p>
 
 <p>
-QUOTE is a toggle macro.  To begin a section
-of quoted text, invoke it with no argument, then type in your
-quote.  When you&#8217;re finished, invoke <kbd>.QUOTE</kbd> with any
-argument (eg <kbd>OFF, END, X, Q</kbd>...) to turn it off.  Example:
+QUOTE is a toggle macro.  To begin a section of quoted text, invoke
+it with no argument, then type in your quote.  When you&#8217;re
+finished, invoke <kbd>.QUOTE</kbd> with any argument (e.g., <kbd>OFF,
+END, X, Q</kbd>...) to turn it off.  Example:
 <br/>
 <span class="pre-in-pp">
   .QUOTE
@@ -2033,9 +2113,28 @@ argument (eg <kbd>OFF, END, X, Q</kbd>...) to turn it off.  Example:
   And bits of her tits in Brazil.
   .QUOTE END
 </span>
+Mom does her best to equalize whitespace around quotes and make
+sure the line following it falls on a valid baseline.  On occasion,
+you may need to tweak the quote placement slightly, which is done
+by passing <kbd>ADJUST</kbd> to QUOTE with a plus or minus value.
+The quote will be lowered (<kbd>+</kbd>) or raised (<kbd>-</kbd>)
+<i>within the space allotted for it</i> by the given amount.  For
+example, to lower a quote slightly within the space allotted for it,
+you&#8217;d do
+<br/>
+<span class="pre-in-pp">
+  .QUOTE ADJUST +3p
+  There was a soprano named Golda
+  Whose lovers grew colda and colda
+  For during love-making
+  She'd sing the earth-shaking
+  Love theme from Tristan und Isolde.
+  .QUOTE off
+</span>
 </p>
 
 <div class="defaults-container" style="background-color: #ded4bd; border: none;">
+
 <h3 id="quote-control" class="docs defaults">QUOTE control macros and defaults</h3>
 
 <ol style="margin-top: .5em; padding-bottom: .5em;">
@@ -2051,14 +2150,27 @@ argument (eg <kbd>OFF, END, X, Q</kbd>...) to turn it off.  Example:
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following QUOTE control macros may also be
+<a href="#grouping">grouped</a>
+using QUOTE_STYLE.  If you do so, <kbd>QUOTE_LEFT</kbd>, <kbd>QUOTE_CENTER</kbd>,
+and <kbd>QUOTE_RIGHT</kbd> must be entered as:
+<br/>
+<kbd>&nbsp;&nbsp;&nbsp;QUAD LEFT</kbd><br/>
+<kbd>&nbsp;&nbsp;&nbsp;QUAD CENTER</kbd><br/>
+<kbd>&nbsp;&nbsp;&nbsp;QUAD RIGHT</kbd>
 </p>
+
 <span class="pre defaults">
 .QUOTE_FAMILY   default = prevailing document family; default is Times Roman
 .QUOTE_FONT     default = italic; underlined in TYPEWRITE
 .QUOTE_SIZE     default = +0 (ie same size as paragraph text)
-.QUOTE_AUTOLEAD default = none; leading of quotes is the same as paragraphs
+<a id="quote-autolead">.QUOTE_AUTOLEAD default = none; leading of quotes is the same as paragraphs </a>
 .QUOTE_COLOR    default = black
 .QUOTE_INDENT  (see below, "Quote indent")
+.QUOTE_LEFT    -+  Quad direction of quote.
+.QUOTE_CENTER   |  LEFT observes QUOTE_INDENT;
+.QUOTE_RIGHT   -+  CENTER and RIGHT do not
 </span>
 </div>
 
@@ -2086,19 +2198,13 @@ and 1 (for
 </p>
 
 <div class="box-tip">
-<p class="tip-top">
+<p class="tip">
 <span class="note">Note:</span>
 If your PARA_INDENT is 0 (ie no indenting of the first line of
 paragraphs), you <i>must</i> set a QUOTE_INDENT yourself, with a
 unit of measure appended to the argument. Mom has no default for
 QUOTE_INDENT if paragraph first lines are not being indented.
 </p>
-
-<p class="tip-bottom">
-<span class="note">Additional note:</span>
-QUOTE_INDENT also sets the indent for
-<a href="#blockquote">blockquotes</a>.
-</p>
 </div>
 
 <h4 id="always-fullspace-quotes" class="docs" style="margin-top: -.25em;">2. Spacing above and below quotes (typeset only)</h4>
@@ -2112,7 +2218,7 @@ below quotes, invoke
 </span>
 with no argument.  If you wish to restore mom&#8217;s
 default behaviour regarding the spacing of quotes (see
-<a href="#quote-spacing">above</a>),
+<a href="#quote-spacing">Quote spacing</a>),
 invoke the macro with any argument (<kbd>OFF, QUIT, END, X</kbd>...)
 </p>
 
@@ -2154,11 +2260,12 @@ ITALIC_MEANS_ITALIC is enabled (see
 <h2 id="blockquote-intro" class="macro-group">Blockquotes (cited material)</h2>
 
 <ul style="margin-left: -.5em;">
+  <li><a href="#blockquote-description">Introduction</a>
   <li><a href="#blockquote">Tag: BLOCKQUOTE</a></li>
   <li><a href="#blockquote-control">BLOCKQUOTE control macros</a></li>
 </ul>
 
-<p>
+<p id="blockquote-description">
 <a href="definitions.html#blockquote">Blockquotes</a>
 are used to cite passages from another author&#8217;s work.  So that
 they stand out well from
@@ -2179,11 +2286,19 @@ left.
 Besides indenting blockquotes, mom further sets them off from
 running text with a small amount of vertical whitespace top and
 bottom.  (See
-<a href="#quote-spacing">above</a>
+<a href="#quote-spacing">Quote spacing</a>
 for a complete explanation of how this is managed, and how
 to control it.)
 </p>
 
+<p>
+Additional information concerning blockquotes, floats, and labelling
+blockquotes can be found in the sections
+<a href="#float-quote">Keeping quotes and blockquotes together as a block</a>,
+and
+<a href="#label-caption">Labelling/captioning quotes and blockquotes</a>.
+</p>
+
 <!-- -BLOCKQUOTE- -->
 
 <div class="macro-id-overline">
@@ -2191,18 +2306,23 @@ to control it.)
 </div>
 
 <div class="box-macro-args">
-Macro: <b>BLOCKQUOTE</b> <kbd class="macro-args">toggle</kbd>
+Macro: <b>BLOCKQUOTE</b>  <kbd class="macro-args">[ ADJUST +|-&lt;space&gt; ] | &lt;anything&gt;</kbd>
 </div>
 
 <p class="alias" style="margin-bottom: 0;">
 <i>Aliases: </i> <b>CITE, CITATION</b>
 </p>
 
+<p class="requires">
+&bull;&nbsp;The argument to <kbd style="font-style: normal">ADJUST</kbd> requires a
+<a href="definitions.html#unitofmeasure">unit of measure</a>
+</p>
+
 <p>
 BLOCKQUOTE is a toggle macro.  To begin a cited passage, invoke
 the tag with no argument, then type in your blockquote.  When
 you&#8217;re finished, invoke <kbd>.BLOCKQUOTE</kbd> with any
-argument (eg <kbd>OFF, END, X, Q</kbd>...) to turn it off.
+argument (e.g., <kbd>OFF, END, X, Q</kbd>...) to turn it off.
 Example:
 <br/>
 <span class="pre-in-pp">
@@ -2219,6 +2339,27 @@ introduce each paragraph&mdash;including the first&mdash;with
 <kbd><a href="#pp">.PP</a></kbd>.
 </p>
 
+<p>
+Mom does her best to equalize whitespace around blockquotes and make
+sure the line following it falls on a valid baseline.  On occasion,
+you may need to tweak the blockquote placement slightly, which is
+done by passing <kbd>ADJUST</kbd> to BLOCKQUOTE with a plus or minus
+value.  The blockquote will be lowered (<kbd>+</kbd>) or raised
+(<kbd>-</kbd>) <i>within the space allotted for it</i> by the given
+amount.  For example, to raise a blockquote slightly within the
+space allotted for it, you&#8217;d do
+<br/>
+<span class="pre-in-pp">
+  .BLOCKQUOTE ADJUST -3p
+  True! - nervous - very, very dreadfully nervous I had been and
+  am; but why will you say that I am mad?  The disease had sharpened
+  my senses - not destroyed - not dulled them.
+  .RIGHT
+  \[em]Edgar Allen Poe, The Tell-Tale Heart
+  .QUOTE off
+</span>
+</p>
+
 <div class="box-tip">
 <p class="tip">
 <span class="note">Note:</span>
@@ -2243,12 +2384,16 @@ tag, as well as in any of the control macros that begin or end with
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following BLOCKQUOTE control macros may also be
+<a href="#grouping">grouped</a>
+using BLOCKQUOTE_STYLE.
 </p>
 <span class="pre defaults">
 .BLOCKQUOTE_FAMILY   default = prevailing document family; default is Times Roman
 .BLOCKQUOTE_FONT     default = roman
 .BLOCKQUOTE_SIZE     default = -1 (point)
-.BLOCKQUOTE_AUTOLEAD default = none; leading of blockquotes is the same as paragraphs
+<a id="blockquote-autolead">.BLOCKQUOTE_AUTOLEAD default = none; leading of blockquotes is the same as paragraphs</a>
 .BLOCKQUOTE_COLOR    default = black
 .BLOCKQUOTE_QUAD     default = left
 .BLOCKQUOTE_INDENT  (see below)
@@ -2280,19 +2425,13 @@ and 1 (for
 </p>
 
 <div class="box-tip">
-<p class="tip-top">
+<p class="tip">
 <span class="note">Note:</span>
 If your PARA_INDENT is 0 (ie no indenting of the first line of
 paragraphs), you <i>must</i> set a BLOCKQUOTE_INDENT yourself, with
 a unit of measure appended to the argument.  Mom has no default for
 BLOCKQUOTE_INDENT if paragraph first lines are not being indented.
 </p>
-
-<p class="tip-bottom">
-<span class="note">Additional note:</span>
-BLOCKQUOTE_INDENT also sets the indent for
-<a href="#quote">quotes</a>.
-</p>
 </div>
 
 
@@ -2308,7 +2447,7 @@ below blockquotes, invoke
 </span>
 with no argument.  If you wish to restore mom&#8217;s default
 behaviour regarding the spacing of blockquotes (see
-<a href="#quote-spacing">above</a>),
+<a href="#quote-spacing">Quote spacing</a>),
 invoke the macro with any argument (<b>OFF, QUIT, END,
 X</b>...).
 </p>
@@ -2352,7 +2491,7 @@ Inline escape: <b><kbd>\*[CODE]</kbd></b>
 </p>
 
 <p>
-When you invoke the macro, <kbd>.CODE</kbd>, or insert <kbd>\*[CODE]</kbd> into
+When you invoke the macro <kbd>.CODE</kbd> or insert <kbd>\*[CODE]</kbd> into
 running text, mom switches to a
 <a href="definitions.html#fixedwidthfont">fixed-width font</a>
 (Courier, by default) and turns
@@ -2363,7 +2502,7 @@ off.
 <p>
 If your code includes the backslash character, which is
 groff&#8217;s escape character, you will have to change the
-escape character temporarily to something else with the macro,
+escape character temporarily to something else with the macro
 <a href="goodies.html#esc-char">ESC_CHAR</a>.
 Mom has no way of knowing what special characters you&#8217;re going
 to use in code snippets, therefore she cannot automatically replace
@@ -2380,11 +2519,17 @@ The correct order for changing the escape character inside
   .ESC_CHAR .
   .CODE OFF
 </span>
+Be aware that changing the escape character prevents subsequent
+macros, which require that the backslash be the escape character,
+from functioning correctly.  Therefore, do not introduce any macros
+into your CODE block without first restoring the escape character to
+its default.
 </p>
 
 <p>
 Alternatively, you can enter the backslash character as
-<kbd>\e</kbd>, which tells groff to print a literal backslash.
+<kbd>\e</kbd> or <kbd>\\</kbd> (two backslashes), which tells groff
+to print a literal backslash.
 </p>
 
 <div class="box-tip">
@@ -2408,7 +2553,7 @@ it as well, invoke <kbd>.CODE</kbd> with the argument,
 you want a break afterwards, you must supply it manually with
 <a href="typesetting.html#br">BR</a>
 unless what follows immediately is a macro that automatically causes
-a break (eg
+a break (e.g.,
 <a href="#pp">PP</a>).
 </p>
 
@@ -2422,19 +2567,21 @@ in conjunction with CODE, like this:
   .QUOTE
   .CODE
   $ echo "Hello, world" | sed -e 's/Hello,/Goodbye, cruel/'
-  .CODE OFF
   .QUOTE OFF
 </span>
 QUOTE takes care of breaking both the text and the code, as well as
 indenting the code and offsetting it from
 <a href="definitions.html#running">running text</a>
-with vertical whitespace.
+with vertical whitespace.  Notice that <kbd>.CODE</kbd>, above, has
+no corresponding <kbd>.CODE OFF</kbd>.  <kbd>.CODE</kbd> inside a QUOTE
+does not require a terminating <kbd>.CODE&nbsp;OFF</kbd>, which risks
+introducing unwanted vertical whitespace.
 </p>
 </div>
 
 <p>
 Passing any argument other than <kbd>BR</kbd>, <kbd>BREAK</kbd> or
-<kbd>SPREAD</kbd> to CODE (eg <kbd>OFF, QUIT, END, X,</kbd> etc.)
+<kbd>SPREAD</kbd> to CODE (e.g., <kbd>OFF, QUIT, END, X,</kbd> etc.)
 turns CODE off and returns the family, font, and smartquotes back to
 their former state.
 </p>
@@ -2454,8 +2601,9 @@ for short snippets, as in the following example.
 
 <p>
 <kbd>\*[CODE]</kbd> does not permit changing the escape character,
-so <kbd>\e</kbd> must be used.  Furthermore, if your code starts
-with a period, you must enter it as &#8220;<kbd>\&.</kbd>&#8221;.
+so <kbd>\e</kbd> or a doubled backslash must be used.  Furthermore,
+if your code starts with a period, you must enter it as
+&#8220;<kbd>\&.</kbd>&#8221;.
 <br/>
 <span class="pre-in-pp">
   Registers are created with the \*[CODE]\&.nr\*[CODE OFF] request.
@@ -2471,7 +2619,8 @@ with the parameters of
 <a href="definitions.html#running">running text</a>,
 you must terminate the block with &#8220;<kbd>\c</kbd>&#8221; and
 enter the punctuation at the beginning of the next input line.  If
-the punctuation mark is a period, you must precede it with
+the punctuation mark is a period or an apostrophe, you must precede
+it with
 &#8220;<kbd>\&amp;</kbd>&#8221;.
 <br/>
 <span class="pre-in-pp">
@@ -2482,8 +2631,9 @@ the punctuation mark is a period, you must precede it with
   \&.  As this demonstrates...
 </span>
 Use of <kbd>\*[CODE]</kbd> inline does not require the
-<kbd>\c</kbd>, however periods after <kbd>\*[CODE&nbsp;OFF]</kbd>
-still need to be introduced with <kbd>\&</kbd>, as in this example:
+<kbd>\c</kbd>, however periods and apostrophes after
+<kbd>\*[CODE&nbsp;OFF]</kbd> still need to be introduced with
+<kbd>\&</kbd>, as in this example:
 <br/>
 <span class="pre-in-pp">
   ...append the unit of measure \*[CODE]p\*[CODE&nbsp;OFF]\&. New sentence...
@@ -2506,6 +2656,10 @@ still need to be introduced with <kbd>\&</kbd>, as in this example:
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following CODE control macros may also be
+<a href="#grouping">grouped</a>
+using CODE_STYLE.
 </p>
 <span class="pre defaults">
 .CODE_FAMILY  default = Courier
@@ -2568,7 +2722,7 @@ digits and letters.
 <p>
 Setting lists with mom is easy.  First, you initialize a list with
 the LIST macro.  Then, for every item in the list, you invoke
-the macro, <kbd>.ITEM</kbd>, followed by the text of the item.
+the macro <kbd>.ITEM</kbd> followed by the text of the item.
 When a list is finished, you exit the list with
 <kbd>.LIST&nbsp;OFF</kbd> (or <kbd>QUIT, END, BACK,</kbd> etc.)
 </p>
@@ -2591,7 +2745,7 @@ left margin of running text that comes before it, like this:
   o a couple of hours at the piano
 </span>
 In other words, mom does not, by default, indent entire lists.
-Indenting a list is controlled by the macro,
+Indenting a list is controlled by the macro
 <a href="#shift-list">SHIFT_LIST</a>.
 (This is a design decision; there are too many instances where a
 default indent is not desirable.)  Equally, mom does not add any
@@ -2609,10 +2763,36 @@ intact.  The final <kbd>.LIST&nbsp;OFF</kbd> exits lists completely
 and returns you to the left margin of running text.
 </p>
 
+<p>
+If
+<kbd><a href="typesetting.html#quad">QUAD CENTER</a></kbd>
+is in effect when LIST is invoked, the list is set quad left but
+centred on the page as a block, based on the longest line of list
+text.  Equally, if <kbd>QUAD RIGHT</kbd> in in effect, the list is
+set flush left but quadded right as a block.  If you want a centred
+or right-quadded list in an otherwise left-quadded or justified
+document, simply invoke <kbd>.QUAD&nbsp;&lt;direction&gt;</kbd> 
+before the list and reset the quad afterwards.  Do not use
+<kbd><a href="typesetting.html#lrc">CENTER</a></kbd>
+or
+<kbd><a href="typesetting.html#lrc">RIGHT</a></kbd>.
+</p>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+Mom centres lists over the entire line length, disregarding
+<a href="typesetting.html#ib">IB</a>
+if it is in effect.  If there are lines in the list that exceed
+the the margins of IB, they must be broken manually with
+<kbd>.BR</kbd> if you wish to keep them within the indented margins.
+</p>
+</div>
+
 <p>
 Finally, lists can be used in documents created with either the
 <a href="docprocessing.html#top">document processing macros</a>
-or the
+or just the
 <a href="typesetting.html#top">typesetting macros</a>.
 </p>
 
@@ -2623,13 +2803,13 @@ or the
 </div>
 
 <div class="box-macro-args">
-Macro: <b>LIST</b> <kbd class="macro-args">[ BULLET | DASH | DIGIT | ALPHA | alpha | ROMAN&lt;n&gt; | roman&lt;n&gt; | USER &lt;string&gt;] [ &lt;separator&gt; | &lt;user-defined enumerator&gt; ] [ &lt;prefix&gt; ] [ &lt;off&gt; ]</kbd>
+Macro: <b>LIST</b> <kbd class="macro-args">[ BULLET | DASH | DIGIT | ALPHA | alpha | ROMAN&lt;n&gt; | roman&lt;n&gt; | USER &lt;user-defined enumerator&gt;  | PLAIN | VARIABLE &lt;character&gt;] [ &lt;separator&gt; ] [ &lt;prefix&gt; ] [ &lt;anything&gt; ]</kbd>
 </div>
 
 <p>
 Invoked by itself (ie with no argument), LIST
-initializes a list (with bullets as the default enumerator).
-Afterwards, each block of input text preceded by
+initializes a list with bullets as the default enumerator.
+Afterward,s each block of input text preceded by
 <kbd><a href="#item">.ITEM</a></kbd>,
 on a line by itself, is treated as a list item.
 </p>
@@ -2666,10 +2846,13 @@ uppercase letters), <kbd>alpha</kbd> (for lowercase letters),
 <p>
 The arguments, <kbd>ROMAN&lt;n&gt;</kbd> and
 <kbd>roman&lt;n&gt;</kbd>, are special.  You must append to them
-a digit (arabic, eg "1" or "9" or "17") saying how many items a
+a digit (arabic, e.g., "1" or "9" or "17") saying how many items a
 particular roman-numeralled LIST is going to have. Mom requires this
 information in order to align roman numerals sensibly, and will
 abort&mdash;with a message &mdash; if you don&#8217;t provide it.
+(For setting roman numeral and digit lists with the enumerators
+aligned flush right&mdash;the default is flush left&mdash;see
+<a href="#pad-list-digits">PAD_LIST_DIGITS</a>.)
 </p>
 
 <p>
@@ -2692,13 +2875,41 @@ up like this:
 </p>
 
 <p>
-The argument, <kbd>USER</kbd>, lets you make up your own enumerator,
-and must be followed by a second argument: what you&#8217;d like the
-enumerator to look like.
+The argument <kbd>VARIABLE&nbsp;&lt;character&gt;</kbd> lets
+you choose different enumerators for the items in a list.
+<kbd>&lt;character&gt;</kbd> is the widest enumerator to
+be used.  Thus, if you have a list enumerated by both bullets
+and em-dashes, you&#8217;d set it up with
+<br/>
+<span class="pre-in-pp">
+  .LIST VARIABLE \[em]
+</span>
+and select the enumerator you want with
+<br/>
+<span class="pre-in-pp">
+  .ITEM \[em]
+</span>
+or
+<br/>
+<span class="pre-in-pp">
+  .ITEM \[bu]
+</span>
+If your enumerator contains spaces, you must enclose the
+<kbd>&lt;character&gt;</kbd> argument in both LIST and ITEM in
+double-quotes,
+e.g.
+<br/>
+<span class="pre-in-pp">
+  .LIST VARIABLE "\*[UP 1p]\[bu]\*[DOWN 1p]"
+  .ITEM "\*[UP 1p]\[bu]\*[DOWN 1p]"
+</span>
 </p>
 
 <p>
-For example, if you want a list enumerated with <kbd>=&gt;</kbd>,
+The argument <kbd>USER</kbd> lets you make up your own enumerator,
+and must be followed by a second argument: what you&#8217;d like the
+enumerator to look like.  For example, if you want a list enumerated
+with <kbd>=&gt;</kbd>,
 <br/>
 <span class="pre-in-pp">
   .LIST USER =&gt;
@@ -2728,10 +2939,14 @@ of <kbd>\[sq]</kbd> slightly, you might do
 <span class="pre-in-pp">
   .LIST USER "\*[UP .25p]\[sq]\*[DOWN .25p]"
     or
-  .LIST USER \v'-.25p]\[sq]\[\v'.25p']
+  .LIST USER \v'-.25p'\[sq]\v'.25p'
 </span>
 </p>
 
+<p>
+The argument <kbd>PLAIN</kbd> initializes a list with no enumerator.
+</p>
+
 <div class="box-tip">
 <p class="tip">
 <span class="note">Note:</span>
@@ -2831,7 +3046,7 @@ which would produce
 Any single argument to <kbd>LIST</kbd> other than
 <kbd>BULLET</kbd>, <kbd>DASH</kbd>, <kbd>DIGIT</kbd>,
 <kbd>ALPHA</kbd>, <kbd>alpha</kbd>, <kbd>ROMAN&lt;n&gt;</kbd>,
-<kbd>roman&lt;n&gt;</kbd> or <kbd>USER</kbd> (eg
+<kbd>roman&lt;n&gt;</kbd> or <kbd>USER</kbd> (e.g.,
 <kbd>LIST&nbsp;OFF</kbd> or <kbd>LIST&nbsp;BACK</kbd>) takes you out
 of the current list.
 </p>
@@ -2883,10 +3098,7 @@ is created like this:
   Lorem ipsum dolor sit amet, consetetur sadipscing elitr,
   sed diam nonumy eirmod tempor invidunt ut labore.
 </span>
-</p>
-
-<p>
-Alternatively, you may use the single-purpose macro,
+Alternatively, you may use the single-purpose macro
 <kbd>.QUIT_LISTS</kbd>, to get yourself out of a list structure.  In
 the example above, the two <kbd>.LIST&nbsp;OFF</kbd> lines could be
 replaced with a single <kbd>.QUIT_LISTS</kbd>.
@@ -2897,8 +3109,12 @@ replaced with a single <kbd>.QUIT_LISTS</kbd>.
 </div>
 
 <div class="box-macro-args">
-Macro: <b>ITEM</b>
+Macro: <b>ITEM</b> <kbd class="macro-args">[&lt;enumerator&gt;] [&lt;space&gt;]</kbd>
 </div>
+<p class="requires">
+&bull;&nbsp;The argument to <kbd style="font-style: normal">&lt;space&gt;</kbd> requires a
+<a href="definitions.html#unitofmeasure">unit of measure</a>
+</p>
 
 <p>
 After you&#8217;ve initialized a list with
@@ -2908,6 +3124,17 @@ takes care of everything else with respect to setting the item
 appropriate to the list you&#8217;re in.
 </p>
 
+<p>
+If you&#8217;ve chosen the <kbd>VARIABLE</kbd> argument when
+invoking LIST, ITEM must be followed by an enumerator character.
+</p>
+
+<p>
+If you give ITEM a space argument, either by itself or after a
+variable enumerator character, the item will be spaced by the amount
+of the argument.
+</p>
+
 <p>
 In document processing, it is valid to have list items that contain
 multiple paragraphs.  Simply issue a
@@ -2935,7 +3162,12 @@ but rather
 <div class="defaults-container" style="background-color: #ded4bd; border: none;">
 <h3 id="list-control" class="docs defaults">LIST control macros and defaults</h3>
 
-<ol style="margin-top: .5em; padding-bottom: .5em;">
+<p style="margin-top: 0; margin-left: .5em">
+LIST control macros may not be
+<a href="#grouping">grouped</a>.
+</p>
+
+<ol style="margin-top: -.5em; padding-left: 1.5em; padding-bottom: .5em;">
   <li><a href="#shift-list">Indenting lists (SHIFT_LIST)</a></li>
   <li><a href="#reset-list">Resetting an initialized list&#8217;s enumerator (RESET_LIST)</a></li>
   <li><a href="#pad-list-digits">Padding digit enumerators (PAD_LIST_DIGITS)</a></li>
@@ -3040,7 +3272,7 @@ normal state of affairs for the alpha'ed list under
 </span>
 would be d), e) and f).  The solution, in such a case, is simply
 to reset the enumerator&mdash;before <kbd>.ITEM</kbd>&mdash;with
-the macro, <kbd>.RESET_LIST</kbd>.  By default, with no argument,
+the macro <kbd>.RESET_LIST</kbd>.  By default, with no argument,
 <kbd>.RESET_LIST</kbd> resets the enumerator to 1, A, a, I or i
 depending on the style of enumerator.  You may, if you wish, pass
 <kbd>.RESET_LIST</kbd> a
@@ -3062,7 +3294,7 @@ the right or the left of the single-numeral digits?
 </p>
 
 <p>
-If you want the extra space to the right, invoke the macro,
+If you want the extra space to the right, invoke the macro
 <kbd>.PAD_LIST_DIGITS</kbd> (with no argument), after
 <kbd>.LIST</kbd> and before <kbd>.ITEM</kbd>.  This will produce
 something like
@@ -3154,11 +3386,11 @@ When you turn line-numbering on, mom, by default
 
 <p>
 Mom expects that
-<kbd><a href="#quote">QUOTE</a></kbd>s
+<a href="#quote">QUOTE</a>s
 and
-<kbd><a href="#blockquote">BLOCKQUOTE</a></kbd>s
-will not be line-numbered, however control macros
-are provided to enable line numbering for either.
+<a href="#blockquote">BLOCKQUOTE</a>s
+will not be line-numbered, however control macros are provided to
+enable line numbering for either.
 See
 <a href="#number-quote-lines">Line numbering control macros for quotes and blockquotes</a>.
 </p>
@@ -3214,7 +3446,7 @@ you must, at a minimum, tell it what line number you want the
 <a href="definitions.html#outputline">output line</a>
 to have.  The optional arguments <kbd>which lines to number</kbd>
 and <kbd>gutter</kbd> allow you to state which lines should
-be numbered (eg every five or every ten lines), and the gutter to
+be numbered (e.g., every five or every ten lines), and the gutter to
 place between line numbers and
 <a href="definitions.html#running">running text</a>.
 </p>
@@ -3377,8 +3609,9 @@ desired result.
 
 <ol style="margin-top: .5em; padding-bottom: .5em;">
   <li><a href="#number-lines-general">Family/font/size/colour</a></li>
+  <li><a href="#number-lines-per-section">Reset line numbering after COLLATE</a></li>
   <li><a href="#number-quote-lines">Line numbering control for quotes and blockquotes</a>
-  <ul>
+  <ul style="padding-left: 1em">
     <li><a href="#number-quote-lines-global">Including QUOTEs and BLOCKQUOTEs in the line numbering scheme</a></li>
     <li><a href="#number-quote-lines-selective">Selectively enabling line numbering for QUOTEs and BLOCKQUOTEs</a></li>
     <li><a href="#number-quote-lines-gutter">Changing the line number gutter for QUOTEs and BLOCKQUOTEs</a></li>
@@ -3393,6 +3626,10 @@ desired result.
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following NUMBER_LINES control macros may also be
+<a href="#grouping">grouped</a>
+using LINENUMBER_STYLE.
 </p>
 <span class="pre defaults">
 .LINENUMBER_FAMILY default = prevailing family or document family; default is Times Roman
@@ -3402,7 +3639,22 @@ See
 </span>
 </div>
 
-<h4 id="number-quote-lines" class="docs" style="margin-top: -1.75em;">2. Line numbering control macros for QUOTE and BLOCKQUOTE</h4>
+<h4 id="number-lines-per-section" class="docs" style="margin-top: -1.75em;">2. Reset line numbering after COLLATE</h4>
+
+<p>
+After
+<a href="rectoverso.html#collate">COLLATE</a>,
+line numbering continues from where it left off.  If you would like
+each chapter or major document section to begin its line numbering
+at &#8220;1&#8221;, invoke
+<span class="pre-in-pp">
+  .NUMBER_LINES_PER_SECTION
+</span>
+after
+<a href="#number-lines"><kbd>.NUMBER_LINES</kbd></a>.
+</p>
+
+<h4 id="number-quote-lines" class="docs" style="margin-top: 0em;">3. Line numbering control macros for QUOTE and BLOCKQUOTE</h4>
 
 <h5 id="number-quote-lines-global" class="docs" style="font-size: 87%">&bull;&nbsp;Including QUOTEs and BLOCKQUOTEs in the line numbering scheme</h5>
 
@@ -3600,14 +3852,23 @@ assured mom is happy to oblige.
 
 <p>
 A small amount of vertical whitespace and a short horizontal rule
-separate footnotes from the document body.  The amount of whitespace
-varies slightly from page to page depending on the number of lines
-in the footnotes. Mom tries for a nice balance between too little
+separate footnotes from the document body.  When
+<a href="docprocessing.html#flex-vs-shim">shimming</a>
+is enabled, the amount of whitespace
+may vary slightly from page to page depending on the number of lines
+in the footnotes.  Mom tries for a nice balance between too little
 whitespace and too much, but when push comes to shove, she&#8217;ll
 usually opt for ample over cramped.  The last lines of footnotes are
 always flush with the document&#8217;s bottom margin.
 </p>
 
+<p>
+When 
+<a href="docprocessing.html#flex-vs-shim">flex-spacing</a>
+is enabled, the distance between the last line of text and the
+first footnote is always the same.
+</p>
+
 <p>
 If mom sees that a portion of a footnote cannot be fit on its page,
 she carries that portion over to the next page.  If an entire
@@ -3650,7 +3911,7 @@ they&#8217;ll know the entry belongs to the previous page).
 </p>
 
 <p>
-Very exceptionally, two footnotes may have to be deferred (eg one
+Very exceptionally, two footnotes may have to be deferred (e.g., one
 occurs on the second to last line of a page, and another on the last
 line).  In such a circumstance, mom does not add
 a blank after the second deferred footnote.  If you&#8217;d like a blank
@@ -3993,6 +4254,10 @@ should be entered normally.
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following FOOTNOTE control macros may also be
+<a href="#grouping">grouped</a>
+using FOOTNOTE_STYLE.
 </p>
 <span class="pre defaults">
 .FOOTNOTE_FAMILY    default = prevailing document family; default is Times Roman
@@ -4125,12 +4390,12 @@ footnotes either by single line numbers, or line ranges.  If
 what you want is a single line number, you need only invoke
 <kbd>.FOOTNOTE</kbd>, <i>without the terminating</i> <kbd>\c</kbd>,
 at the appropriate place in running text.  Input lines after the
-footnote has been terminated (eg with <kbd>.FOOTNOTE OFF</kbd>)
+footnote has been terminated (e.g., with <kbd>.FOOTNOTE OFF</kbd>)
 must begin at the left margin.
 </p>
 
 <p>
-If you want a range of line numbers (eg&nbsp;[5-11]&nbsp;),
+If you want a range of line numbers (e.g.,&nbsp;[5-11]&nbsp;),
 insert, directly into the first line of the range you want,
 the <a href="definitions.html#inlines">inline escape</a>,
 <kbd>\*[FN_MARK]</kbd>.  For the terminating line number of the
@@ -4160,7 +4425,7 @@ macros:
 
 <p style="margin-left: .5em;">
 Mom, by default, surrounds footnote line numbers with square
-brackets.  The style of the brackets may be changed with the macro,
+brackets.  The style of the brackets may be changed with the macro
 <br/>
 <span class="pre-in-pp">
   .FOOTNOTE_LINENUMBER_BRACKETS
@@ -4497,11 +4762,10 @@ is removed.
 </p>
 
 <p>
-By default, mom starts the endnotes page with a bold,
-centred, double-underscored head, &#8220;ENDNOTES&#8221;.
-Subsequently, for each section in a
+By default, mom starts the endnotes page with a bold, centred head,
+&#8220;ENDNOTES&#8221;.  Subsequently, for each section in a
 <a href="rectoverso.html#collate-intro">collated</a>
-document (eg chapters in a book), she identifies the section in bold
+document (e.g., chapters in a book), she identifies the section in bold
 type, flush left and underscored, followed by one-half linespace.
 Endnotes pertaining to the section are output underneath, identified
 by superscript numbers.  The text of the endnotes themselves is
@@ -4711,19 +4975,18 @@ appearance of endnotes pages, set them up prior to
     <li><a href="#endnotes-hdrftr-center">Header/footer centre string when doctype is CHAPTER</a></li>
     <li><a href="#endnotes-allows-headers">Allow headers on endnotes pages</a></li>
   </ul></li>
-  <li><a href="#endnotes-main-title"><b>Endnotes' first-page title control</b></a>
+  <li><a href="#endnotes-header"><b>Endnotes header (first-page title) control</b></a>
   <ul style="margin-left: -.5em;">
-    <li><a href="#endnote-string">Title string</a></li>
-    <li><a href="#endnote-string-control">Title string control macros and defaults</a></li>
-    <li><a href="#endnote-string-placement">Title string placement</a></li>
-    <li><a href="#endnote-string-underline">Title string underscoring</a></li>
-    <li><a href="#endnote-string-caps">Title string capitalization</a></li>
+    <li><a href="#endnotes-header-string">Header string</a></li>
+    <li><a href="#endnotes-header-string-control">Header string control macros and defaults</a></li>
+    <li><a href="#endnotes-header-placement">Header string placement</a></li>
+    <li><a href="#endnotes-header-underscore">Header string underscoring</a></li>
+    <li><a href="#endnotes-header-caps">Header string capitalization</a></li>
   </ul></li>
   <li><a href="#endnotes-doc-title"><b>Endnotes document-identification string control</b></a>
   <ul style="margin-left: -.5em;">
     <li><a href="#endnote-title">Document-identification string(s)</a></li>
     <li><a href="#endnote-title-control">Document-identification string control macros and defaults</a></li>
-    <li><a href="#endnote-title-underscore">Document-identification string underscoring</a></li>
   </ul></li>
   <li><a href="#endnotes-numbering"><b>Endnotes referencing style</b></a>
   <ul style="margin-left: -.5em;">
@@ -4747,6 +5010,10 @@ appearance of endnotes pages, set them up prior to
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following ENDNOTE control macros may also be
+<a href="#grouping">grouped</a>
+using ENDNOTE_STYLE.
 </p>
 <span class="pre defaults">
 .ENDNOTE_FAMILY    default = prevailing document family; default is Times Roman
@@ -4874,7 +5141,7 @@ Macro: <b>ENDNOTE_SPACING</b> <kbd class="macro-args">&lt;space to insert betwee
 
 <p>
 If you'd like some whitespace between endnotes, just invoke
-ENDNOTE_SPACING with the amount of space you want, eg
+ENDNOTE_SPACING with the amount of space you want, e.g.,
 <br/>
 <span class="pre-in-pp">
   .ENDNOTE_SPACING 6p
@@ -5200,59 +5467,82 @@ ENDNOTES_ALLOWS_FOOTERS OFF.
 </p>
 </div>
 
-<h4 id="endnotes-main-title" class="docs">4. Endnotes' first-page title control</h4>
+<h4 id="endnotes-header" class="docs">4. Endnotes header (first-page title) control</h4>
 
-<!-- -ENDNOTE_STRING- -->
+<!-- -ENDNOTES_HEADER_STRING- -->
 
-<h5 id="endnote-string" class="docs" style="margin-top: 1em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Title string</h5>
+<h5 id="endnotes-header-string" class="docs" style="margin-top: 1em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Header (first-page title) string</h5>
 
 <div class="box-macro-args">
-Macro: <b>ENDNOTE_STRING</b> <kbd class="macro-args">&quot;&lt;head to print at the top of endnotes&gt;&quot;</kbd>
+Macro: <b>ENDNOTES_HEADER_STRING</b> <kbd class="macro-args">&quot;&lt;title to print at the top of endnotes&gt;&quot;</kbd>
 </div>
 
+<p class="alias" style="margin-bottom: 0;">
+<i>Alias:</i> <b>ENDNOTE_STRING</b> (for compatibility with older documents)
+</p>
+
 <p>
 By default, mom prints the word &#8220;ENDNOTES&#8221; as a head
 at the top of the first page of endnotes.  If you want her to
-print something else, invoke <kbd>.ENDNOTE_STRING</kbd> with the
-endnotes-page head you want, surrounded by double-quotes.  If you
-don&#8217;t want a head at the top of the first endnotes-page,
-invoke <kbd>.ENDNOTE_STRING</kbd> with a blank argument (either two
-double-quotes side by side&mdash;<kbd>&quot;&quot;</kbd>&mdash;or no
-argument at all).
+print something else, invoke <kbd>.ENDNOTES_HEADER_STRING</kbd>
+with the endnotes-page head you want, surrounded by double-quotes.
+If you don&#8217;t want a head at the top of the first
+endnotes-page, invoke <kbd>.ENDNOTES_HEADER_STRING</kbd>
+with a blank argument (either two double-quotes side by
+side&mdash;<kbd>&quot;&quot;</kbd>&mdash;or no argument at all).
 </p>
 
-<!-- -ENDNOTE_STRING_CONTROL- -->
+<!-- -ENDNOTES_HEADER_CONTROL- -->
 
-<h5 id="endnote-string-control" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Title control macros and defaults</h5>
+<h5 id="endnotes-header-string-control" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Header (first-page title) control macros and defaults</h5>
 
 <div class="defaults-container" style="padding-bottom: 8px;">
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following ENDNOTES_HEADER control macros may also be
+<a href="#grouping">grouped</a>
+using ENDNOTES_HEADER_STYLE.
 </p>
+
+<p style="margin-top: .5em; margin-bottom: 0; margin-left: .5em">
+Please note that &#8220;_HEADER_&#8221;, here, refers to the title
+that appears at the top of the first endnotes page, not to the page
+headers of subsequent endnotes pages.
 <span class="pre defaults">
-.ENDNOTE_STRING_FAMILY  default = prevailing document family
-.ENDNOTE_STRING_FONT    default = bold
-.ENDNOTE_STRING_SIZE*   default = +1
-.ENDNOTE_STRING_QUAD    default = centred
-.ENDNOTE_STRING_COLOR   default = black
+.ENDNOTES_HEADER_FAMILY  default = prevailing document family
+.ENDNOTES_HEADER_FONT    default = bold
+.ENDNOTES_HEADER_SIZE*   default = +1
+.ENDNOTES_HEADER_QUAD    default = centred
+.ENDNOTES_HEADER_COLOR   default = black
 
 *Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE)
 </span>
+</p>
 </div>
 
-<!-- -ENDNOTE_STRING_ADVANCE- -->
+<p style="margin-top: -2em">
+<b>Note:</b> <i>For compatibility with older documents, these macros are aliased
+as</i> <kbd>.ENDNOTE_STRING_&lt;SPEC&gt;</kbd>, e.g. <kbd>.ENDNOTE_STRING_FAMILY</kbd>.
+</p>
+
+<!-- -ENDNOTES_HEADER_V_POS- -->
 
-<h5 id="endnote-string-placement" class="docs" style="margin-top: -1em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Title string placement</h5>
+<h5 id="endnotes-header-placement" class="docs" style="margin-top: -.25em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Header (first-page title) placement</h5>
 
 <div class="box-macro-args">
-Macro: <b>ENDNOTE_STRING_ADVANCE</b> <kbd class="macro-args">&lt;distance from top of page&gt;</kbd>
+Macro: <b>ENDNOTES_HEADER_V_POS</b> <kbd class="macro-args">&lt;distance from top of page&gt;</kbd>
 </div>
 
 <p class="requires">
 &bull;&nbsp;Argument requires a <a href="definitions.html#unitofmeasure">unit of measusure</a>
 </p>
 
+<p class="alias" style="margin-top: -1em; margin-bottom: 0;">
+<i>Alias:</i> <b>ENDNOTE_STRING_ADVANCE</b> (for compatibility with older documents)
+</p>
+
 <p>
 By default, mom places the title (the docheader, as it were) of
 endnotes pages (typically "ENDNOTES") on the same
@@ -5261,7 +5551,7 @@ that is used for the start of
 <a href="definitions.html#running">running text</a>.
 If you&#8217;d prefer another location, higher or lower on the page
 (thereby also raising or lowering the starting position of the
-endnotes themselves), invoke <kbd>.ENDNOTE_STRING_ADVANCE</kbd> with
+endnotes themselves), invoke <kbd>.ENDNOTES_HEADER_V_POS</kbd> with
 an argument stating the distance from the top edge of the page at
 which you&#8217;d like the title placed.
 </p>
@@ -5272,20 +5562,23 @@ to appear 1-1/2 inches from the top edge of the page, you&#8217;d tell
 mom about it like this:
 <br/>
 <span class="pre-in-pp">
-  .ENDNOTE_STRING_ADVANCE 1.5i
+  .ENDNOTES_HEADER_V_POS 1.5i
 </span>
 </p>
 
-<!-- -ENDNOTE_STRING_UNDERLINE- -->
+<!--- ENDNOTES_HEADER_UNDERSCORE --->
 
-<h5 id="endnote-string-underline" class="docs" style="margin-top: -1em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Title string underscoring</h5>
+<h5 id="endnotes-header-underscore" class="docs" style="margin-top: -1em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Header (first-page title) underscoring</h5>
 
 <div class="box-macro-args">
-Macro: <b>ENDNOTE_STRING_UNDERSCORE</b> <kbd class="macro-args">[DOUBLE] [&lt;underscore weight&gt; [&lt;underscore gap&gt; [&lt;distance between double rules]]] | &lt;none&gt; | &lt;anything&gt;</kbd>
+Macro: <b>ENDNOTES_HEADER_UNDERSCORE</b> <kbd class="macro-args">[DOUBLE] [&lt;underscore weight&gt; [&lt;underscore gap&gt; [&lt;distance between double rules]]] | &lt;none&gt; | &lt;anything&gt;</kbd>
 </div>
 
 <p class="alias" style="margin-bottom: 0;">
-<i>Alias:</i> <b>ENDNOTE_STRING_UNDERLINE</b>
+<i>Alias:</i> <b>ENDNOTES_HEADER_UNDERLINE</b>.
+<i>(For compatibility with older documents, also
+aliased as</i> <b>ENDNOTE_STRING_UNDERSCORE</b> <i>and</i>
+<b>ENDNOTE_STRING_UNDERLINE</b>.)
 </p>
 
 <p class="requires">
@@ -5298,16 +5591,16 @@ appended to it; all other arguments require a unit of measure
 </p>
 
 <p>
-Invoked without an argument, <kbd>.ENDNOTE_STRING_UNDERSCORE</kbd>
+Invoked without an argument, <kbd>.ENDNOTES_HEADER_UNDERSCORE</kbd>
 will place a single rule underneath the endnotes page title.  Invoked
-with the argument, <kbd>DOUBLE</kbd>, ENDNOTE_STRING_UNDERSCORE will
+with the argument, <kbd>DOUBLE</kbd>, ENDNOTES_HEADER_UNDERSCORE will
 double-underscore the title.  Invoked with any other non-numeric
-argument, (eg <kbd>OFF, NO, X</kbd>, etc.) the macro disables
+argument, (e.g., <kbd>OFF, NO, X</kbd>, etc.) the macro disables
 underscoring of the title.
 </p>
 
 <p>
-In addition, you can use ENDNOTE_STRING_UNDERSCORE to control the
+In addition, you can use ENDNOTES_HEADER_UNDERSCORE to control the
 weight of the underscore rule(s), the gap between the title and the
 underscore, and, in the case of double-underscores, the distance
 between the two rules.
@@ -5317,46 +5610,50 @@ between the two rules.
 Some examples:
 <br/>
 <span class="pre-in-pp">
-  .ENDNOTE_STRING_UNDERSCORE 1
+  .ENDNOTES_HEADER_UNDERSCORE 1
       - turn underscoring on; set the rule weight to 1 point
 
-  .ENDNOTE_STRING_UNDERSCORE 1 3p
+  .ENDNOTES_HEADER_UNDERSCORE 1 3p
       - turn underscoring on; set the rule weight to 1 point; set
         the gap between the title and the underscore to 3 points
   
-  .ENDNOTE_STRING_UNDERSCORE DOUBLE .75 3p
+  .ENDNOTES_HEADER_UNDERSCORE DOUBLE .75 3p
       - turn double-underscoring on; set the rule weight to 3/4 of
         a point; set the gap between the title and the upper
         underscore to 3 points; leave the gap between the upper
-        and the lower underunderscore at the default
+        and the lower underscore at the default
   
-  .ENDNOTE_STRING_UNDERSCORE DOUBLE 1.5 1.5p 1.5p
+  .ENDNOTES_HEADER_UNDERSCORE DOUBLE 1.5 1.5p 1.5p
       - turn double-underscoring on; set the rule weight to 1-1/2
         points; set the gap between the title and the upper
         underscore to 1-1/2 points; set the gap between the upper
         and the lower underscore to 1-1/2 points
 </span>
 Note, from the above, that in all instances, underscoring (single
-or double) is enabled whenever ENDNOTE_STRING_UNDERSCORE is used in
+or double) is enabled whenever ENDNOTES_HEADER_UNDERSCORE is used in
 this way.
 </p>
 
 <p>
-Mom&#8217;s default is to double-underscore the title with 1/2-point
-rules placed 2 points apart and 2 points below the baseline of the
-title.
+By default, mom double-underscores the title if your
+<a href="docprocessing.html#printstyle">PRINTSTYLE</a>
+is <kbd>TYPEWRITE</kbd>.
 </p>
 
-<!-- -ENDNOTE_STRING_CAPS- -->
+<!-- -ENDNOTES_HEADER_CAPS- -->
 
-<h5 id="endnote-string-caps" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Title string capitalization</h5>
+<h5 id="endnotes-header-caps" class="docs" style="margin-top: -.5em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Header (first-page title) capitalization</h5>
 
 <div class="box-macro-args">
-Macro: <b>ENDNOTE_STRING_CAPS</b> <kbd class="macro-args">toggle</kbd>
+Macro: <b>ENDNOTES_HEADER_CAPS</b> <kbd class="macro-args">toggle</kbd>
 </div>
 
+<p class="alias" style="margin-bottom: 0;">
+<i>Alias:</i> <b>ENDNOTE_STRING_CAPS</b> (for compatibility with older documents)
+</p>
+
 <p>
-Invoked by itself, <kbd>.ENDNOTE_STRING_CAPS</kbd> will
+Invoked by itself, <kbd>.ENDNOTES_HEADER_CAPS</kbd> will
 automatically capitalize the endnotes-page title.  Invoked with any
 other argument, the macro disables automatic capitalization of the
 title.
@@ -5366,8 +5663,8 @@ title.
 If you&#8217;re generating a table of contents, you may want the
 endnotes pages title to be in caps, but the toc entry in caps/lower
 case.  If the argument to
-<kbd><a href="#endnote-string">ENDNOTE_STRING</a></kbd>
-is in caps/lower case and ENDNOTE_STRING_CAPS is on, this is exactly
+<kbd><a href="#endnotes-header-string">ENDNOTES_HEADER_STRING</a></kbd>
+is in caps/lower case and ENDNOTES_HEADER_CAPS is on, this is exactly
 what will happen.
 </p>
 
@@ -5412,87 +5709,25 @@ included in the endnotes redundant.
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following ENDNOTE_TITLE_STYLE control macros may also be
+<a href="#grouping">grouped</a>
+using ENDNOTE_TITLE_STYLE_STYLE.
 </p>
 <span class="pre defaults">
-.ENDNOTE_TITLE_FAMILY  default = prevailing document family; default is Times Roman
-.ENDNOTE_TITLE_FONT    default = bold
-.ENDNOTE_TITLE_SIZE*   default = 0
-.ENDNOTE_TITLE_QUAD    default = left
+.ENDNOTE_TITLE_FAMILY default = prevailing document family; default is Times Roman
+.ENDNOTE_TITLE_FONT   default = bold
+.ENDNOTE_TITLE_SIZE*  default = 0
+.ENDNOTE_TITLE_COLOR  default = black
+.ENDNOTE_TITLE_QUAD   default = left
+.ENDNOTE_TITLE_CAPS
+.ENDNOTE_TITLE_SMALLCAPS
+.ENDNOTE_TITLE_UNDERSCORE default = single underscore 
 
 *Relative to the size of the endnotes text (set with ENDNOTE_PT_SIZE)
 </span>
 </div>
 
-<!-- -ENDNOTE_TITLE_UNDERLINE- -->
-
-<h5 id="endnote-title-underscore" class="docs" style="margin-top: -1.25em; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Endnotes document-identification underscoring</h5>
-
-<div class="box-macro-args">
-Macro: <b>ENDNOTE_TITLE_UNDERSCORE</b> <kbd class="macro-args">[DOUBLE] [&lt;underline weight&gt; [&lt;underline gap&gt; [&lt;distance between double rules]]] | &lt;none&gt; | &lt;anything&gt;</kbd>
-</div>
-
-<p class="alias" style="margin-bottom: 0;">
-<i>Alias:</i> <b>ENDNOTE_TITLE_UNDERLINE</b>
-</p>
-
-<p class="requires">
-&bull;&nbsp;The argument
-<span style="font-style: normal"><kbd>&lt;underscore weight&gt;</kbd></span>
-must not have the
-<a href="definitions.html#unitofmeasure">unit of measure</a>,
-<span style="font-style: normal;"><kbd>p</kbd></span>,
-appended to it; all other arguments require a unit of measure
-</p>
-
-<p>
-Invoked without an argument, <kbd>.ENDNOTE_TITLE_UNDERSCORE</kbd>
-will place a single rule underneath the document identification
-string.  Invoked with the argument <kbd>DOUBLE</kbd>,
-ENDNOTE_TITLE_UNDERSCORE will double-underscore the string.  Invoked
-with any other non-numeric argument, (eg <kbd>OFF, NO, X</kbd>,
-etc.) the macro disables underscoring of the string.
-</p>
-
-<p>
-In addition, you can use ENDNOTE_TITLE_UNDERSCORE to control the
-weight of the underscore rule(s), the gap between the title and the
-underscore, and, in the case of double-underscores, the distance
-between the two rules.
-</p>
-
-<p>
-Some examples:
-<br/>
-<span class="pre-in-pp">
-  .ENDNOTE_TITLE_UNDERSCORE 1
-      - turn underscoring on; set the rule weight to 1 point
-
-  .ENDNOTE_TITLE_UNDERSCORE 1 3p
-      - turn underscoring on; set the rule weight to 1 point; set
-        the gap between the string and the underscore to 3 points
-  
-  .ENDNOTE_TITLE_UNDERSCORE DOUBLE .75 3p
-      - turn double-underscoring on; set the rule weight to 3 points
-  
-  .ENDNOTE_TITLE_UNDERSCORE DOUBLE 1.5 1.5p 1.5p
-      - turn double-underscoring on; set the rule weight to 1-1/2
-        points; set the gap between the string and the upper
-        underscore to 1-1/2 points; set the gap between the upper
-        and the lower underscore to 1-1/2 points
-</span>
-</p>
-
-<p>
-Note, from the above, that in all instances, underscoring (single or
-double) is enabled whenever ENDNOTE_TITLE_UNDERSCORE is used in this
-way.
-</p>
-
-<p>
-Mom&#8217;s default is to single-underscore the string with a
-1/2-point rule placed 2 points below its baseline.
-</p>
-
 <!-- -ENDNOTE_NUMBERING- -->
 
 <h4 id="endnotes-numbering" class="docs" style="margin-top: -.25em;">6. Endnotes referencing style</h4>
@@ -5521,7 +5756,7 @@ endnotes either by single line numbers or by line ranges.  If
 what you want is a single line number, you need only invoke
 <kbd>.ENDNOTE</kbd> at the appropriate place in running
 text <i>without the terminating</i> <kbd>\c</kbd>.  Input lines
-after the endnote has been terminated (eg with <kbd>.ENDNOTE
+after the endnote has been terminated (e.g., with <kbd>.ENDNOTE
 OFF</kbd>) must begin at the left margin.
 </p>
 
@@ -5535,7 +5770,7 @@ nothing to prevent you from doing so.)
 </p>
 
 <p id="en-mark">
-If you want a range of line numbers (eg&nbsp;[5-11]&nbsp;),
+If you want a range of line numbers (e.g.,&nbsp;[5-11]&nbsp;),
 insert, directly into the first line of the range you want, the
 <a href="definitions.html#inlines">inline escape</a>,
 <kbd>\*[EN-MARK]</kbd>.  For the terminating line number of the
@@ -5610,9 +5845,9 @@ numbers are flush right with each other.
 <p class="tip-bottom">
 If you need less space (the total number of endnotes is less than 10) or
 more (the total number of endnotes is greater than 99), use the
-macro,
+macro
 <a href="docelement.html#endnote-numbers-align">ENDNOTE_NUMBERS_ALIGN</a>,
-to set the desired amount of reserved space, eg
+to set the desired amount of reserved space, e.g.,
 <br/>
 <span class="pre-in-pp">
   .ENDNOTE_NUMBERS_ALIGN RIGHT 1
@@ -5640,9 +5875,9 @@ When your
 <a href="#endnote-marker-style">ENDNOTE_MARKER_STYLE</a>
 is <kbd>LINE</kbd>, mom, by default, inserts a space equal to
 1/2-<a href="definitions.html#em">en</a>
-between the linenumber and the text of an endnote.  For aesthetic reasons, you may want 
-to change the size of the gap, which is done with the macro,
-ENDNOTE_LINENUMBER_GAP.
+between the linenumber and the text of an endnote.  For aesthetic
+reasons, you may want to change the size of the gap, which is done
+with the macro ENDNOTE_LINENUMBER_GAP.
 </p>
 
 <p>
@@ -5666,7 +5901,7 @@ Macro: <b>ENDNOTE_LINENUMBER_BRACKETS</b> <kbd class="macro-args">PARENS | SQUAR
 
 <p>
 By default, mom puts endnote line numbers inside square brackets.
-The style of the brackets may be changed with the macro,
+The style of the brackets may be changed with the macro
 ENDNOTE_LINENUMBER_BRACKETS, which takes one of three possible
 arguments: <kbd>PARENS</kbd> (&#8220;round&#8221; brackets),
 <kbd>SQUARE</kbd> (the default) or <kbd>BRACES</kbd> (curly braces).
@@ -5880,7 +6115,7 @@ it&#8217;s impossible for mom to guess whether to align
 the first lines of margin notes with a document
 <a href="definitions.html#baseline">baseline</a>,
 whether to align the last lines of margin notes with a document
-baseline, or whether to center them, vertically, so that neither
+baseline, or whether to centre them, vertically, so that neither
 first nor last line aligns with anything!
 </p>
 
@@ -5991,7 +6226,7 @@ If you forget to do so, mom will issue a warning and abort.
 <p>
 The arguments may be entered in any order, and since the list is
 long, use of the backslash character ( <kbd>\</kbd> ) to put each on
-a separate line is recommended, eg.
+a separate line is recommended, e.g.,
 <br/>
 <span class="pre-in-pp">
   .MN_INIT \
@@ -6167,11 +6402,12 @@ etc) exits the current margin note.
 
 <ul style="margin-left: -.5em;">
   <li><a href="#finis">Tag: FINIS</a></li>
-  <li>FINIS control macros
+  <li><a href="#finis-control">FINIS control macros</a>
   <ul style="margin-left: -1.25em;">
     <li><a href="#finis-string">Changing the FINIS string</a></li>
     <li><a href="#finis-string-caps">Automatic capitalization of the FINIS string</a></li>
     <li><a href="#finis-color">Changing the FINIS colour</a></li>
+    <li><a href="#finis-no-dashes">Removing the dashes around FINIS</a></li>
   </ul></li>
 </ul>
 
@@ -6199,7 +6435,7 @@ document, mom will alert you on stderr.
 
 <p>
 If you&#8217;re writing in a language other than English, you can
-change what mom prints for END with the control macro,
+change what mom prints for END with the control macro
 <a href="#finis-string">FINIS_STRING</a>.
 </p>
 
@@ -6243,7 +6479,15 @@ two lines of your document file, like this:
 
 <h3 id="finis-control" class="docs" style="margin-bottom: -1em">Finis contol macros</h3>
 
-<h4 id="finis-string" class="docs">Changing the FINIS string</h4>
+<p>
+Since FINIS is only used once in a document, it has few control
+macros.  It is expected that you will make changes to style
+parameters such as family, font, and size with
+<a href="definitions.html#inlines">inline escapes</a>
+in the FINIS string itself (see below).  
+</p>
+
+<h4 id="finis-string" class="docs" style="margin-top: -.5em">Changing the FINIS string</h4>
 
 <p>
 By default, FINIS prints the word, END, between
@@ -6285,14 +6529,14 @@ it&#8217;s a short, dashed line composed of four hyphens.)
 <p>
 By default, mom sets the string you pass to FINIS all-caps.
 If you&#8217;d prefer that she not do so, but rather respect
-the FINIS string exactly as you enter it, invoke the macro,
+the FINIS string exactly as you enter it, invoke the macro
 <kbd>.FINIS_STRING_CAPS</kbd> with the <kbd>OFF</kbd> argument, like
 this:
 <br/>
 <span class="pre-in-pp">
     .FINIS_STRING_CAPS OFF
 </span>
-<kbd>OFF</kbd>, above, could be anything, eg <kbd>NO</kbd> or
+<kbd>OFF</kbd>, above, could be anything, e.g., <kbd>NO</kbd> or
 <kbd>X</kbd>.
 </p>
 
@@ -6301,7 +6545,7 @@ this:
 <h4 id="finis-color" class="docs">Changing the FINIS colour</h4>
 
 <p>
-Invoking the control macro, <kbd>.FINIS_COLOR</kbd>, with a
+Invoking the control macro <kbd>.FINIS_COLOR</kbd> with a
 pre-defined (or &#8220;initalized&#8221;) colour changes the colour
 of both the FINIS string and the em-dashes that surround it.  If you
 use the
@@ -6312,6 +6556,19 @@ new colour; the em-dashes will be in the default document colour
 (usually black).
 </p>
 
+<!-- -FINIS DASHES- -->
+
+<h4 id="finis-no-dashes" class="docs">Removing the dashes around FINIS</h4>
+
+<p>
+If you don&#8217;t want the dashes around the FINIS string, you can
+remove them with
+<br/>
+<span class="pre-in-pp">
+  .FINIS_NO_DASHES
+</span>
+</p>
+
 <div class="rule-long"><hr/></div>
 
 <!-- Navigation links -->
@@ -6329,4 +6586,3 @@ new colour; the em-dashes will be in the default document colour
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 7873885ee52e26f2c6ab221dd614abf8fb778123..573f54d3f585adc2c8c3be820bfde36eaef184f9 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -40,23 +40,14 @@ FDL in the main directory of the groff source package.
 
 <h1 class="docs">Document processing with mom</h1>
 
-<div style="text-align: center;">
-<ul class="no-enumerator" style="margin-left: -2.5em;">
-  <li><a href="#defaults">Document defaults</a></li>
-  <li><a href="#leading-note">Important note on leading/spacing and bottom margins</a></li>
-  <li><a href="#shim">The SHIM macro</a></li>
-</ul>
-</div>
-
-<div class="rule-medium"><hr/></div>
-
 <h2 id="toc-doc-processing" class="docs" style="text-align: center;">Table of contents</h2>
 
 <div id="docprocessing-mini-toc" style="font-size: 90%; line-height: 150%; margin-top: .5em;">
 <div class="mini-toc-col-1" style="margin-left: 0;">
-<h3 class="toc toc-docproc-header" style="margin-top: 1em;"><a class="header-link" href="#docprocessing-intro">Introduction</a></h3>
-<h3 class="toc toc-docproc-header" style="margin-top: .5em;"><a
-class="header-link" href="#setup">Preliminary document setup</a></h3>
+<h3 class="toc toc-docproc-header" style="margin-top: 1em;"><a class="header-link" href="#docprocessing-intro">Introduction to document processing</a></h3>
+<h3 class="toc toc-docproc-header" style="margin-top: .5em;"><a class="header-link" href="#defaults">Document defaults</a></h3>
+<h3 class="toc toc-docproc-header" style="margin-top: .5em;"><a class="header-link" href="#vertical-whitespace-management">Vertical whitespace management</a></h3>
+<h3 class="toc toc-docproc-header" style="margin-top: .5em;"><a class="header-link" href="#setup">Preliminary document setup</a></h3>
 <ul class="toc-docproc" style="margin-top: .5em;">
   <li><a href="#docprocessing-tut"><b>Tutorial &ndash; Setting up a mom document</b></a></li>
   <li><a href="#reference-macros"><b>The reference macros (metadata)</b></a>
@@ -77,15 +68,34 @@ class="header-link" href="#setup">Preliminary document setup</a></h3>
   </ul></li>
   <li><a href="#docstyle-macros"><b>The docstyle macros (templates)</b></a>
   <ul class="toc-docproc">
-    <li><a href="#doctype">DOCTYPE</a></li>
+    <li><a href="#doctype">DOCTYPE (default, chapter, letter, named, slides)</a></li>
+    <li><a href="#slides">DOCTYPE SLIDES</a></li>
+    <ul class="toc-docproc">
+    <li><a href="#newslide">NEWSLIDE</a></li>
+      <li><a href="#pause">PAUSE</a></li>
+      <li><a href="#transition">TRANSITION</a></li>
+    </ul>
     <li><a href="#printstyle">PRINTSTYLE</a></li>
     <li><a href="#copystyle">COPYSTYLE</a></li>
   </ul></li>
+  <li><a href="cover.html"><b>Cover pages</b></a>
+  <li><a href="#docheader"><b>Managing the document header</b></a>
+  <ul class="toc-docproc">
+    <li><a href="#docheader">DOCHEADER</a></li>
+    <li><a href="#docheader-control">Docheader control</a>
+    <ul class="toc-docproc">
+      <li><a href="#docheader-desc">Docheader description</a></li>
+      <li><a href="#index-docheader-control">Macro list</a></li>
+    </ul></li>
+  </ul></li>
 </ul>
 <h3 class="toc toc-docproc-header"><a class="header-link" href="#start-macro">Initiate document processing</a></h3>
 <ul class="toc-docproc" style="margin-top: .5em;">
   <li><a href="#start"><b>The START macro</b></a></li>
 </ul>
+</div>
+<div class="mini-toc-col-2">
+<br/>
 <h3 class="toc toc-docproc-header"><a class="header-link" href="#style-before-start">Establishing type and formatting<br/><span style="display: block; margin-top: -.3em;">parameters before START</span></a></h3>
 <ul class="toc-docproc" style="margin-top: .5em;">
   <li><a href="#type-before-start"><b>Behaviour of the typesetting macros before START</b></a>
@@ -94,10 +104,7 @@ class="header-link" href="#setup">Preliminary document setup</a></h3>
     <li><a href="#color">Initializing colours</a></li>
   </ul></li>
 </ul>
-</div>
-<div class="mini-toc-col-2" style="margin-top: -1em;">
-<br/>
-<ul class="toc-docproc" style="margin-top: .5em;">
+<ul class="toc-docproc" style="margin-top: -1em">
   <li><a href="#doc-lead-adjust"><b>Adjust linespacing to fill pages</b></a>
   <ul class="toc-docproc">
     <li><a href="#doc-lead-adjust">DOC_LEAD_ADJUST</a></li>
@@ -106,15 +113,6 @@ class="header-link" href="#setup">Preliminary document setup</a></h3>
       <li><a href="#automatic-shimming">Automatic shimming (headings, etc)</a></li>
     </ul></li>
   </ul></li>
-  <li><a href="#docheader"><b>Managing the document header</b></a>
-  <ul class="toc-docproc">
-    <li><a href="#docheader">DOCHEADER</a></li>
-    <li><a href="#docheader-control">Docheader control</a>
-    <ul class="toc-docproc">
-      <li><a href="#docheader-desc">Docheader description</a></li>
-      <li><a href="#index-docheader-control">Macro list</a></li>
-    </ul></li>
-  </ul></li>
   <li><a href="#columns-intro"><b>Setting documents in columns</b></a>
   <ul class="toc-docproc">
     <li><a href="#columns">COLUMNS</a></li>
@@ -150,7 +148,7 @@ class="header-link" href="#setup">Preliminary document setup</a></h3>
 </div>
 </div>
 
-<div class="rule-short"><br/><hr/></div>
+<div class="rule-short" style="margin-top: -1.75em"><br/><hr/></div>
 
 <!-- ==================================================================== -->
 
@@ -177,7 +175,7 @@ macros that control how they look and behave.
 Setting up a mom doc is a simple, four-part procedure.  You
 begin by entering metadata about the document itself (title,
 subtitle, author, etc.).  Next, you tell mom what kind of document
-you&#8217;re creating (eg chapter, letter, abstract, etc...) and
+you&#8217;re creating (e.g., chapter, letter, abstract, etc...) and
 what kind of output you want (typeset, typewritten, draft-style,
 etc) &mdash; essentially, templates.  Thirdly, you make as many
 or as few changes to the templates as you wish; in other words,
@@ -207,7 +205,7 @@ documentation, so just in case:
       visually 1-inch
   </li>
   <li>pages are numbered; the number appears centred, at the
-      bottom, surrounded by hyphens ( eg -6- )
+      bottom, surrounded by hyphens ( e.g., -6- )
   </li>
   <li>the first page of a document begins with a
       <a href="definitions.html#docheader">document header</a>
@@ -220,68 +218,143 @@ documentation, so just in case:
 
 <!-- ==================================================================== -->
 
-<h2 id="leading-note" class="docs">Important note on leading/spacing and bottom margins</h2>
+<h2 id="vertical-whitespace-management" class="macro-group">Vertical whitespace management</h2>
+
+<ul style="margin-left: -.5em;">
+  <li><a href="#shim">Macro: SHIM</a></li>
+  <li><a href="#no-shim">Macro: NO_SHIM</a></li>
+  <li><a href="#flex">Macro: FLEX</a></li>
+  <li><a href="#no-flex">Macro: NO_FLEX</a></li>
+</ul>
+
 
 <p>
 Mom takes evenly-aligned bottom margins in
 <a href="definitions.html#running">running text</a>
-very seriously.  Only under a very few (exceptional) circumstances
+very seriously.  Only under a very few, exceptional circumstances
 will she allow a bottom margin to &#8220;hang&#8221; (ie to fall
 short).
 </p>
 
 <p>
-In order to ensure even bottom margins, mom uses the
-&#8220;base&#8221; document
+Mom offers two modes of operation for ensuring flush bottom margins:
+shimming and flex-spacing.  Shimming means that mom nudges the
+next line after a significant break in running text back onto the
+<a href="definitions.html#baseline-grid">baseline grid</a>
+(e.g., after the insertion of a graphic).  Flex-spacing means that any
+vertical whitespace remaining between the end of running text and
+the bottom margin is distributed equally at logical points on the
+page.
+</p>
+
+<p>
+Mom uses the
 <a href="definitions.html#leading">leading</a>
-in effect <i>at the start of running text on each page</i> (ie
-the leading used in paragraphs) to calculate the spacing of every
-document element.  Prior to invoking
+of running text (the &#8220;document leading&#8221;) that&#8217;s in effect
+<i>at the start of running text on each page</i>
+to establish the grid and space document elements such as heads or
+blockquotes so that they adhere to it.  (Prior to invoking
 <a href="#start">START</a>,
-this is set with the
+the document leading is set with the
 <a href="typesetting.html#macros-typesetting">typesetting macro</a>
 <a href="typesetting.html#leading">LS</a>,
 afterwards with the document
 <a href="definitions.html#controlmacro">control macro</a>
-<a href="#doc-lead">DOC_LEAD</a>.
+<a href="#doc-lead">DOC_LEAD</a>.)
 </p>
 
 <p>
-Because mom relies so heavily on the base document
-leading, any change to the leading or spacing on a page will almost
-certainly have undesirable consequences on that page&#8217;s bottom margin
-unless the change is fully compensated for elsewhere on the page.
+What this means is that documents whose paragraphs are not separated
+by whitepace and which do not contain graphics or
+<a href="definitions.html#pre-processor">pre-processor material</a>
+will fill the page completely to the bottom margin.
+However, if your paragraphs are spaced, or if there are any leading
+changes on a page, or if graphics or pre-processor material are
+inserted, it&#8217;s very likely the bottom margins will hang
+unless shimming or flex-spacing is enabled.
 </p>
 
+<h3 id="shim-vs-flex" class="docs">Shimming <span style="text-transform: none">vs.</span> flex-spacing</h3>
+
 <p>
-In other words, if you add a few points of space somewhere on a page,
-you must subtract the same number of points somewhere else on that
-same page, and vice versa.
+<b>Shimming</b> is mom's default mode of operation.  She applies it
+automatically before headings, around quotes and blockquotes, and
+beneath
+<a href="definitions.html#float">floats</a>
+and
+<a href="definitions.html#preprocessor">pre-processor material</a>.
+In addition, the
+<a href="#shim">SHIM</a>
+macro can be inserted into a document to make sure that the
+text following falls on the baseline grid.
 </p>
 
 <p>
-If it&#8217;s a question of adding or subtracting full
-line spaces between or within document elements, you
-can do so by using the &#8220;<kbd>v</kbd>&#8221; <a
-href="definitions.html#unitofmeasure">unit of measure</a> with
-whatever spacing macro you choose &mdash;
-<a href="typesetting.html#ald">ALD</a>,
-<a href="typesetting.html#rld">RLD</a>,
-<a href="typesetting.html#space">SPACE</a>
-&mdash; and mom won&#8217;t object.  &#8220;<kbd>v</kbd>&#8221; means
-&#8220;the current leading&#8221;, so she isn&#8217;t confused by it.  And
-since &#8220;<kbd>v</kbd>&#8221; accepts decimal fractions, you can add/subtract
-half linespaces and quarter linespaces with &#8220;<kbd>v</kbd>&#8221; as well,
-<i>provided you compensate for the fractional linespace somewhere
-else on the page</i>.
+This mode of operation works well in documents whose paragraphs are
+not spaced.  Deviations from the baseline grid, usually
+caused by floats or pre-processor material, are corrected
+immediately.  If the shimming results in slightly unbalanced
+whitespace around them, it can easily be remedied by passing the
+<kbd>ADJUST</kbd> argument to the appropriate macro.
+</p>
+
+<p>
+If you do not want mom shimming automatically,
+<a href="#no-shim">NO_SHIM</a>
+turns shimming off globally and suppresses the SHIM macro.  If you
+want to disable shimming only for a particular float or
+pre-processor, the <kbd>NO_SHIM</kbd> argument may be given to the
+appropriate macro.
+</p>
+
+<p>
+<b>Flex-spacing</b> kicks in automatically whenever you turn shimming
+off.  In other words, if you want a document flex-spaced,
+<kbd>.NO_SHIM</kbd> is how you achieve it.  If, in addition to not
+shimming, you don&#8217;t want mom flex-spacing either,
+<a href="#no-flex">NO_FLEX</a>
+lets you disable it, too.
+</p>
+
+<p>
+Flex-spacing differs from shimming in that mom doesn&#8217;t
+correct deviations from the baseline grid.  Rather, she distributes
+whitespace left at the bottom of the page equally in appropriate
+places.  Like shimming, flex-spacing is automatically applied
+before heads, after floats and pre-processor material, and around
+quotes and blockquotes.  Like shimming, flex-spacing can be
+disabled for individual floats or pre-processor material with the
+<kbd>NO_FLEX</kbd> flag.
+</p>
+
+<p>
+In addition, you can use the
+<a href="#flex">FLEX</a>
+macro to insert flex-spacing yourself into the document, which you
+will almost certainly want to do if your paragraphs are spaced.
+This is because paragraphs are not flex-spaced.  Typographically,
+the ideal for spaced paragraphs is that the space between them
+remain constant.  Paradoxically, the only way to achieve flush
+bottom margins, or to correct excessive flex-spacing before a
+heading, is by adding flex-space between paragraphs.  This requires
+human judgment, and mom does not presume to decide for you.
+</p>
+
+<p>
+Shimming and flex-spacing are mutually exclusive.  If the one is
+active, the other isn&#8217;t unless you have disabled both.  This means
+that you cannot use the FLEX macro when shimming is enabled, or the
+SHIM macro when flex-spacing is enabled.  Mom will issue a warning
+if you do.
 </p>
 
 <p>
-If all this seems like too much work, mom provides a special macro
-to get you out of trouble if you&#8217;ve played around with leading
-and/or spacing.  The macro is called SHIM (like those little pieces
-of wood carpenters use to get their work even, level and snug), and
-it&#8217;s described below.
+The choice of whether to use shimming or flex-spacing depends on
+whether or not your paragraphs are spaced.  In a document with
+indented, non-spaced paragraphs, shimming and flex-spacing produce
+nearly the same result, with shimming winning by an aesthetic hair.
+In documents with spaced paragraphs, flex-spacing is the only way to
+achieve flush bottom margins.
 </p>
 
 <!-- -SHIM- -->
@@ -295,119 +368,198 @@ Macro: <b>SHIM</b>
 </div>
 
 <p>
-SHIM doesn&#8217;t take any argument.  Use it whenever you&#8217;ve played
-around with the
-<a href="definitions.html#leading">leading</a>
-or spacing on a page and you need to get mom&#8217;s document
-leading back on track.
+When shimming is enabled, which it is by default, the SHIM macro
+allows you to nudge the line following it back onto the baseline
+grid.  In documents with non-spaced paragraphs, this prevents
+the bottom margins from hanging.
 </p>
 
+<p style="margin-bottom: -1em">
+Mom herself automatically applies shimming
+</p>
+<ul>
+  <li><i>before</i> headings</li>
+  <li><i>around</i> quotes and blockquotes</li>
+  <li><i>after</i> PDF images, tables, pic diagrams, equations, and floats</li>
+</ul>
+
 <p>
-For example, say you want to insert an image into a document with
-<a href="images.html#pspic">PSPIC</a>.
-Images and graphics aren&#8217;t usually conveniently sized in
-multiples of the document leading, which means that when you insert
-the picture, you disrupt mom&#8217;s ordered placement of baselines
-on the page.  This will certainly result in a bottom margin that
-doesn&#8217;t match the bottom margins of your document&#8217;s
-other pages.
+You may sometimes find the amount of space generated by
+<kbd>SHIM</kbd> looks too big, whether inserted manually into a
+document or as a result of automatic shimming.
+The situation occurs when the amount of shimming applied
+comes close to the leading currently in effect, making it seem as if
+there&#8217;s one linespace too much whitespace.
 </p>
 
 <p>
-The solution is to insert SHIM after the image, like this:
-<br/>
-<span class="pre-in-pp">
-  &lt;text&gt;
-  .PSPIC &lt;args&gt;
-  .SHIM
-  &lt;text&gt;
-</span>
+The solution is simply to add <kbd>.SPACE&nbsp;-1v</kbd> or
+<kbd>.RLD&nbsp;1v</kbd> to the document immediately after
+<kbd>.SHIM</kbd>.  (Both <kbd>.SPACE&nbsp;-1v</kbd> and
+<kbd>.RLD&nbsp;1v</kbd> back up by one linespace.)
 </p>
 
+<div class="macro-id-overline">
+<h3 id="no-shim" class="macro-id">NO_SHIM</h3>
+</div>
+
+<div class="box-macro-args">
+Macro: <b>NO_SHIM</b> <kbd class="macro-args">&lt;none&gt; | &lt;anything&gt;
+</div>
+
 <p>
-SHIM instructs mom to insert as much or a little space after the
-picture as is needed to ensure that the baseline of the next
-<a href="definitions.html#outputline">output line</a>
-falls where mom would have put it had you not disrupted the normal
-flow of output lines with the picture.
+NO_SHIM, without an argument, disables automatic shimming,
+suppresses the SHIM macro, and enables flex-spacing.
 </p>
 
 <p>
-And say, on previewing the above example, you find the image
-doesn&#8217;t centre nicely between the lines of text, you can
-adjust the image position by using
-<a href="typesetting.html#ald">ALD</a>
-or
-<a href="typesetting.html#rld">RLD</a>
-before PSPIC.  To demonstrate,
-<br/>
-<span class="pre-in-pp">
-  &lt;text&gt;
-  .RLD 3p
-  .PSPIC &lt;args&gt;
-  .SHIM
-  &lt;text&gt;
-</span>
-which raises the image slightly and thereby balances the whitespace around it.
+NO_SHIM with any argument (e.g., <b>OFF, QUIT, END, X</b>, etc)
+re-enables shimming if it has been disabled and disables
+flex-spacing.
 </p>
 
+<!-- -FLEX- -->
+
+<div class="macro-id-overline">
+<h3 id="flex" class="macro-id">FLEX</h3>
+</div>
+
+<div class="box-macro-args">
+Macro: <b>FLEX</b> <kbd class="macro-args">[ FORCE ]</kbd>
+</div>
+
 <p>
-You may sometimes find the amount of space generated by
-<kbd>SHIM</kbd> looks too big, whether inserted manually into a
-document or as a result of automatic shimming (see immediately
-below).  The situation occurs when the amount of shimming applied
-comes close to the leading currently in effect, making it seem as if
-there&#8217;s one linespace too much whitespace.  The solution is
-simply to add <kbd>.SPACE&nbsp;-1v</kbd> or <kbd>.RLD&nbsp;1v</kbd>
-to the document immediately after <kbd>.SHIM</kbd>.  (Both
-<kbd>.SPACE&nbsp;-1v</kbd> and <kbd>.RLD&nbsp;1v</kbd> back up
-by one linespace.)
+When flex-spacing is enabled, the FLEX macro inserts flexible
+vertical whitespace into a document.  The amount of flex-space is
+determined from any extra whitespace at the bottom of a page divided
+by the number of flex points on the same page.
 </p>
-<h4 id="automatic-shimming" class="docs">Automatic shimming of headings, quotes, blockquotes, PDF images, and floats</h4>
 
 <p style="margin-bottom: -1em">
-By default, mom automatically applies shimming
+If flex-spacing is enabled, mom herself automatically applies
+flex-spacing
 </p>
-<ul>
+<ul style="margin-bottom: -.5em">
   <li><i>before</i> headings</li>
   <li><i>around</i> quotes and blockquotes</li>
-  <li><i>after</i> PDF images, floats, and tables</li>
+  <li><i>after</i> PDF images, tables, pic diagrams, equations, and floats</li>
 </ul>
 
 <p>
-In documents where paragraphs are not spaced, automatic shimming is
-almost always desirable.  In documents where paragraphs are spaced
-by an amount less than the document leading, or which have numerous
-graphics, headings, and quotes, you may want to disable shimming,
-either globally or on a tag-by-tag basis.
+Near the bottom of some pages, you may find that
+<a href="definitions.html#float">floated</a>
+or
+<a href="definitions.html#preprocessor">pre-proccesor material</a>,
+including images, or a single line of text afterward, is not flush
+with the bottom margin.  This is a result of mom flex-spacing
+<i>after</i> such material but not before.  The solution to is
+insert <kbd>.FLEX</kbd> immediately beforehand.
 </p>
 
-<p id="disable-shim">
-<span style="font-weight: bold; font-style: italic; font-size: 95%">To disable
-automatic shimming</span>, invoke the macro, <kbd>.NO_SHIM</kbd>,
-either in the style sheet section of your document (ie after
-<a href="#printstyle">PRINTSTYLE</a>
-and before
-<a href="#start">START</a>),
-or just before
-<a href="docelement.html#heading">HEADING</a>,
-<a href="docelement.html#quote">QUOTE</a>,
-<a href="docelement.html#blockquote">BLOCKQUOTE</a>,
-<a href="images.html#pdf-image">PDF_IMAGE</a>
-<a href="images.html#float">FLOAT</a>.
-or
-<a href="images.html#ts">TS</a>.
+<p>
+There are some instances where mom inhibits flex-spacing, notably
+after outputting deferred floats and pre-processor material.
+Introducing FLEX by itself in these instances&mdash;say, before a head
+or paragraph&mdash;will not have any effect; you must pass FLEX the
+<kbd>FORCE</kbd> argument.
 </p>
 
 <div class="box-tip">
 <p class="tip">
-<span class="note">Note:</span>
-<kbd>.NO_SHIM</kbd> also disables the SHIM macro itself.
+<span class="important">Important note on flex-spacing policy:</span><br/>
+Mom disables flex-spacing on
+</p>
+<ul style="margin-top: -1em; margin-bottom: -.5em">
+  <li>the last page or column of a document, before the Table of Contents,
+      Endnotes, Bibliography, and/or any &#8220;Lists of...&#8221;
+  </li>
+  <li>the page preceding a
+      <a href="rectoverso.html#collate">COLLATE</a>
+  </li>
+  <li>the page preceding a
+      <a href="typesetting.html#NEWPAGE">NEWPAGE</a>
+      or
+      <a href="headfootpage.html#blankpage">BLANKPAGE</a>
+  </li>
+  <li>the column preceding a
+      <a href="#col-next">COL_NEXT</a>
+      or
+      <a href="#col-break">COL_BREAK</a>
+  </li>
+</ul>
+
+<p>
+If this is not what you want, insert
+<a href="#no-flex"><kbd>.NO_FLEX&nbsp;OFF</kbd></a>
+before the first flex-space point on the affected page or in the
+affected column.
+</p>
+
+<p>
+Flex-spacing is also disabled for any page or column where
+insufficient room at or near the bottom causes a
+<a href="docelement.html#heading">HEADING</a>
+or
+<a href="images.html#tbl">table</a>
+to be moved to the top of the next page.  These situations cannot
+be harmonized with flex-spacing except by adjusting your layout
+to prevent them.  You may try re-enabling flex-spacing for the
+page (<kbd>.NO_FLEX&nbsp;OFF</kbd>) and manually inserting
+flex-spaces at appropriate points, but the original whitespace is
+usually large enough that re-distributing it merely changes
+one layout gaffe into another.
+</p>
+
+<p>
+Very occasionally you may notice that a document element (spaced
+paragraph, floated material, pre-processor material, or a PDF image)
+near the bottom of page has also caused mom to disable flex-spacing
+for that page.  This occurs when the document element following it
+is a
+<a href="docelement.html#pp-space">spaced paragraph</a>.
+</p>
+
+<p>
+It is typographically acceptable for there to be space between
+insertions in running text (e.g., an image) and the bottom margin when
+the next page begins with a paragraph.  If you&#8217;d like to
+nudge the insertion a little closer to the bottom margin&mdash;not
+all the way; that isn&#8217;t possible without pushing it to the
+next page and disrupting subsequent flex-spacing&mdash;insert a
+small amount of space beforehand with
+<a href="typesetting.html#sp">SP</a>.
+Do not, in these cases, use the <kbd>ADJUST</kbd>
+argument (for example to
+<a href="images.html#pdf-image">PDF_IMAGE</a>.)
 </p>
+
+<p class="tip-bottom">
+In the case of a spaced paragraph itself near the bottom of the page
+causing a break, re-enabling flex-spacing
+(<kbd>.NO_FLEX&nbsp;OFF</kbd>) at an appropriate place in your input
+file will resolve the issue, provided there is at least one
+flex-point on the page.  If not, add one or more.
+</p>
+</div>
+
+<div class="macro-id-overline">
+<h3 id="no-flex" class="macro-id">NO_FLEX</h3>
 </div>
 
-<p>To re-enable automatic shimming and the SHIM macro itself, use
-<kbd>.NO_SHIM OFF</kbd> (or <kbd>QUIT, END, X</kbd>, etc).
+<div class="box-macro-args">
+Macro: <b>NO_FLEX</b> <kbd class="macro-args">&lt;none&gt; | &lt;anything&gt;</kbd>
+</div>
+
+<p>
+NO_FLEX, without an argument, disables automatic flex-spacing
+and suppresses the FLEX macro.  If, in addition to NO_FLEX, NO_SHIM
+has also been given, your document will be neither flex-spaced nor
+shimmed.
+</p>
+
+<p>
+NO_FLEX with any argument (e.g., <b>OFF, QUIT, END, X</b>, etc)
+re-enables flex-spacing if it has been disabled.
 </p>
 
 <div class="rule-short"><hr/></div>
@@ -521,7 +673,7 @@ tell her how you want your document formatted.  What kind of
 document is it?  Should it be typeset or typewritten?  Is this a
 final copy (for the world to see) or just a draft?  Mom calls
 the macros that answer these questions &#8220;the docstyle
-macros.&#8221;, and they're essentially templates.
+macros&#8221;, and they're essentially templates.
 </p>
 <ul style="margin-top: -.5em; margin-bottom: -.5em;">
   <li>PRINTSTYLE&mdash;typeset or typewritten</li>
@@ -568,8 +720,8 @@ and tag, but who&#8217;s ever satisfied with defaults?  Use any of
 the
 <a href="typesetting.html#macros-typesetting">typesetting macros</a>
 here to change mom&#8217;s document defaults (paper size, margins,
-family, point size, line space, rag, etc), or use any of the
-document processing
+family, point size, line space, rag, etc), or any of the document
+processing
 <a href="definitions.html#controlmacro">control macros</a>.
 This is the style-sheet section of a document, and
 must come after the
@@ -614,7 +766,7 @@ here.  The setup for Joe Blow&#8217;s story now looks like this:
 <p>
 The final step in setting up a document is telling mom to start
 document processing.  It&#8217;s a no-brainer, just the single
-macro, START.  Other than PRINTSTYLE, it&#8217;s the only macro
+macro START.  Other than PRINTSTYLE, it&#8217;s the only macro
 required for document processing.
 </p>
 
@@ -826,13 +978,13 @@ the title of each article or entitled section), and appears
 </p>
 
 <ol style="list-style-type: lower-alpha">
-  <li>as the window title in PDF viewers (eg Okular or Evince)</li>
+  <li>as the window title in PDF viewers (e.g., Okular or Evince)</li>
   <li>in the initial rightmost position of page headers in the document</li>
 </ol>
 
 <p>
 Moreover, DOCTITLE does not appear in the
-<a href="definitions.html#pdfoutline">PDF outline </a>,
+<a href="definitions.html#pdfoutline">PDF outline</a>,
 as its presence in window title would make it redundant.
 </p>
 
@@ -944,7 +1096,7 @@ Macro: <b>AUTHOR</b> <kbd class="macro-args">[COVER | DOC_COVER] &quot;&lt;autho
 </p>
 
 <p>
-Each author string can hold as many names as you like, eg
+Each author string can hold as many names as you like, e.g.,
 <br/>
 <span class="pre-in-pp" style="margin-bottom: -1em;">
   .AUTHOR "Joe Blow"
@@ -1055,9 +1207,9 @@ what it is with the CHAPTER_STRING macro, like this:
 </p>
 
 <p>
-You can also use CHAPTER_STRING if you want
-&#8220;CHAPTER&#8221; (all caps) instead of &#8220;Chapter&#8221;
-(caps/lowercase) in the doc- and page-headers.
+If you would like a blank chapter string, ie you&#8217;d like
+the chapter number to appear without &#8220;Chapter&#8221;
+beforehand, enter <kbd>.CHAPTER_STRING "\&"</kbd>.
 </p>
 
 <!-- -CHAPTER_TITLE- -->
@@ -1117,7 +1269,7 @@ page headers.
 <p>
 The style of the chapter title can be altered by
 <a href="docelement.html#docelement-control">control macros</a>,
-eg CHAPTER_TITLE_FAMILY, CHAPTER_TITLE_FONT, etc.  The default
+e.g., CHAPTER_TITLE_FAMILY, CHAPTER_TITLE_FONT, etc.  The default
 family, font and point size are Times Roman, Bold Italic, 4 points
 larger than
 <a href="definitions.html#running">running text</a>.
@@ -1255,7 +1407,7 @@ you must enclose the argument in double-quotes.
 <p>
 You may, if you wish, invoke <kbd>.REVISION</kbd> without an
 argument, in which case, no revision number will be printed beside
-&quot;Rev.&quot; in headers or footers.
+&#8220;Rev.&#8221; in headers or footers.
 </p>
 
 <!-- -REVISION_STRING- -->
@@ -1362,6 +1514,44 @@ or
 <a href="cover.html#cover">COVER</a>
 </p>
 
+<p>
+Style parameters for the copyright line may be
+entered as individual macros or
+<a href="docelement.html#grouping">grouped</a>,
+e.g.,
+<br/>
+<span class="pre-in-pp">
+  .COPYRIGHT_FAMILY H
+  .COPYRIGHT_FONT   R
+  .COPYRIGHT_SIZE   -2
+</span>
+or
+<br/>
+<span class="pre-in-pp">
+  .COPYRIGHT_STYLE \
+  FAMILY H \
+  FONT   R \
+  SIZE   -2
+</span>
+The vertical position of the copyright line may be raised (-) or
+lowered (+) with the macro COPYRIGHT_V_ADJUST.  For example, to
+raise the copyright line by 3
+<a href="definitions.html#picaspoints">points</a>, you&#8217;d do
+<br/>
+<span class="pre-in-pp">
+  .COPYRIGHT_V_ADJUST -3p
+</span>
+Alternatively, the COPYRIGHT_STYLE macro may be used with the
+argument <kbd>V_ADJUST</kbd>:
+<span class="pre-in-pp">
+  .COPYRIGHT_STYLE \
+  FAMILY    H \
+  FONT      R \
+  SIZE     -2 \
+  V_ADJUST -3p
+</span>
+</p>
+
 <!-- -MISC- -->
 
 <div class="macro-id-overline">
@@ -1487,7 +1677,7 @@ Macro: <b>PDF_TITLE</b> <kbd class="macro-args">&quot;&lt;pdf viewer window titl
 
 <p>
 Except for
-<a href="#doctitle">DOCTITLE</a>,
+<a href="#doc-title">DOCTITLE</a>,
 mom does not, by default, provide PDF viewers with a document title.
 You may set one, if you like, with PDF_TITLE.
 </p>
@@ -1509,9 +1699,6 @@ and revision information in the headers) or a final copy.
 <h3 id="index-docstyle" class="macro-list">Docstyle macros</h3>
 <ul class="macro-list">
   <li><a href="#doctype">DOCTYPE</a>
-  <ul style="margin-left: -.5em; list-style-type: disc;"> 
-    <li><a href="#doctype-underline">DOCTYPE_UNDERLINE</a> &ndash; how to control DOCTYPE <kbd>NAMED</kbd> underlining</li>      
-  </ul></li>
   <li><a href="#printstyle">PRINTSTYLE</a> &ndash; non-optional macro required for document processing
   <ul style="margin-left: -.5em; list-style-type: disc;">
     <li><a href="#typeset-defaults">Defaults for PRINTSTYLE TYPESET</a></li>
@@ -1536,7 +1723,7 @@ and revision information in the headers) or a final copy.
 </div>
 
 <div class="box-macro-args">
-Macro: <b>DOCTYPE</b> <kbd class="macro-args">DEFAULT | CHAPTER | NAMED &quot;&lt;name&gt;&quot; | LETTER</kbd>
+Macro: <b>DOCTYPE</b> <kbd class="macro-args">DEFAULT | CHAPTER | NAMED &quot;&lt;name&gt;&quot; | LETTER | SLIDES</kbd>
 </div>
 
 <p>
@@ -1545,7 +1732,8 @@ The arguments <kbd>DEFAULT,</kbd> <kbd>CHAPTER</kbd> and
 <a href="definitions.html#docheader">docheader</a>
 and
 <a href="definitions.html#header">page headers</a>.
-<kbd>LETTER</kbd> tells her that you want to write a letter.
+<kbd>LETTER</kbd> and <kbd>SLIDES</kbd> tells her you want to write
+a letter or create slides.
 </p>
 
 <p>
@@ -1553,7 +1741,7 @@ Mom&#8217;s default DOCTYPE is <kbd>DEFAULT</kbd>.  If that&#8217;s
 what you want, you don&#8217;t have to give a DOCTYPE command.
 </p>
 
-<p>
+<p id="default-doctype">
 <kbd>DEFAULT</kbd> prints a
 <a href="definitions.html#docheader">docheader</a>
 containing the title, subtitle and author information given to the
@@ -1571,7 +1759,7 @@ of a
 <a href="#reference-macros">reference macro</a>,
 <kbd><a href="#chapter">CHAPTER</a></kbd>).
 If you give the chapter a title with
-<a href="#chapter-title">CHAPTER TITLE</a>,
+<a href="#chapter-title">CHAPTER_TITLE</a>,
 mom prints &#8220;Chapter &lt;n&gt;&#8221; and the
 title underneath.  If you omit the
 <a href="#chapter">CHAPTER</a>
@@ -1592,7 +1780,7 @@ the page header.
 
 <p>
 <kbd>NAMED</kbd> takes an additional argument: a name for this
-particular kind of document (eg outline, synopsis, abstract,
+particular kind of document (e.g., outline, synopsis, abstract,
 memorandum), enclosed in double-quotes. <kbd>NAMED</kbd> is
 identical to <kbd>DEFAULT</kbd> except that mom prints the argument
 to <kbd>NAMED</kbd> beneath the
@@ -1603,108 +1791,291 @@ as well as in page headers.
 for how mom outputs each part of the page header.)
 </p>
 
+<div class="box-tip">
+<p id="copystyle-note" class="tip">
+<span class="note">Note: version 2.1 change</span>
+<br/>
+<kbd>DOCTYPE NAMED "string"</kbd> no longer accepts a color argument
+after <kbd>"string"</kbd>.  Setting the color of the string is now
+done with <kbd>DOCTYPE_COLOR &lt;color&gt;</kbd>.  Default
+underscoring of <kbd>"string"</kbd> in the docheader and on covers
+has been removed.  Use <kbd>DOCTYPE_UNDERLINE</kbd>,
+<kbd>DOC_COVER_DOCTYPE_UNDERLINE</kbd> and/or
+<kbd>COVER_DOCTYPE_UNDERLINE</kbd> to re-enable it.  All three
+take the same arguments listed in the
+<a href="docelement.html#underline">Underline style, rule weight</a>
+section of
+<a href="docelement.html#control-macro-args">Arguments to the control macros</a>.
+</p>
+</div>
+
 <p>
-Additionally, if you wish the name of this particular kind of
-document to be coloured, you can pass DOCTYPE <kbd>NAMED</kbd> a
-third (optional) argument: the name of a colour pre-defined (or
-&#8220;initialized&#8221;) with
-<a href="color.html#newcolor">NEWCOLOR</a>
-or
-<a href="color.html#xcolor">XCOLOR</a>.
-For example, if you have a doctype named &#8220;Warning&#8221;,
-and you&#8217;d like &#8220;Warning&#8221; to be in red, assuming you&#8217;ve
-pre-defined (or &#8220;initialized&#8221;) the color, red, this is
-what the DOCTYPE entry would look like:
+<kbd>LETTER</kbd> tells mom you&#8217;re writing a letter.  See the
+section
+<a href="letters.html#letters">Writing Letters</a>
+for instructions on using mom to format letters.
+</p>
+
+<h4 id="slides" class="docs" style="font-size: 100%; text-transform: uppercase">Slides</h4>
+
+<p>
+PDF slides are a special kind of mom document, formatted for viewing
+in a PDF reader&#8217;s presentation mode.  In most respects, they
+behave identically to the other document types.  Key differences
+are:
+</p>
+<ul style="margin-top: -.5em">
+<li>headers, footers, and pagination are disabled by default</li>
+<li>type is set
+<a href="typesetting.html#quad">QUAD CENTER</a>
+by default</li>
+<li>
+<a href="#flex">flex-spacing</a>
+and
+<a href="#shim">shimming</a>
+are disabled by default; shimming may
+be re-enabled (with <kbd>NO_SHIM OFF</kbd>), but not flex-spacing</li>
+<li>there&#8217;s no need for
+<a href="#printstyle">PRINTSTYLE</a></li>
+</ul>
+
+<p>
+DOCTYPE SLIDES takes up to five optional arguments, which come
+immediately after SLIDES. They may be entered in any order.
 <br/>
-<span class="pre">
-  .DOCTYPE NAMED "Warning" red
+<span class="pre-in-pp">
+  DOCTYPE SLIDES \
+   ASPECT 4:3 | 16:9 \
+   HEADER "left" "centre" "right" \
+   FOOTER  "left" "centre" "right" \
+   TRANSITION "&lt;slide transition effect&gt;" (mode + parameters) \
+   PAUSE "&lt;text reveal effect&gt;" (mode + parameters)
 </span>
+For convenience, you many want to enter each argument on a single
+line as shown above; all but the last must be terminated by a
+backslash.
 </p>
 
-<div class="box-tip" style="margin-top: 1.5em;">
-<h3 id="doctype-underline" class="docs control">How to control DOCTYPE NAMED underlining</h3>
+<h5 class="docs" style="margin-top: .5em">Aspect</h5>
 
-<p style="tip">
-By default, the string passed to DOCTYPE <kbd>NAMED</kbd> is
-underlined in the docheader, and on document-cover pages and cover
-(&#8220;title&#8221;) pages.  (See the
-<a href="cover.html#intro">Introduction to covers</a>
-for the difference between &#8220;doc cover&#8221; and
-&#8220;cover&#8221; pages.)
+<p>
+Slides can be formatted for one of two aspect ratios common to
+monitors and screens: 4:3 and 16:9.  The default is 16:9.
+<span class="pre-in-pp">
+ 4:3                              16:9
+ media size: 11" x 8.25"          media size: 11" x 8.1875"
+ left/right margins: 36 points    left/right margins: 36 points
+ top margin: 90 points            top margin: 80 points
+ bottom margin: 84 points         bottom margin: 72 points
+ base text size: 16 points        base text size: 14 points
+ autoleading: 6 points, adjusted  autoleading: 4 points, adjusted
+ (header/footer size: -3 points)  (header/footer size: -2 points)
+</span>
+Note that both media sizes fit on either A4 or US LETTER papersizes.
 </p>
 
+<h5 class="docs" style="margin-top: .5em">Headers, footers, and pagination</h5>
+
 <p>
-You can use the macro DOCTYPE_UNDERLINE to set the weight of
-the underline and its distance from where the doctype-name appears
-in the docheader (doc covers and covers handle underlining of the
-doctype-name differently; see
-<a href="cover.html#cover-underline">COVER_UNDERLINE</a>),
-or simply toggle doctype underlining on or off.  Mom&#8217;s default
-is to underline the doctype-name.
+If you want a header, footer, or both for your slides, pass SLIDES
+the <kbd>HEADER</kbd> and/or <kbd>FOOTER</kbd> argument(s).  Both
+take three additional
+<a href="definitions.html#stringargument">string arguments</a>,
+which must be enclosed in double-quotes, defining the left, centre,
+and right parts of the header/footer.  Any parts you want left blank
+should be entered as two double-quotes.  For example,
+<span class="pre-in-pp">
+  HEADER "" "My slide presentation" ""  
+</span>
+will result in a header with only the centre part.
 </p>
 
 <p>
-The order of arguments is <kbd>weight</kbd>, optionally followed by
-<kbd>gap</kbd>, where &#8220;gap&#8221; is the distance from the
-<a href="definitions.html#baseline">baseline</a>
-of the doctype-name to the underline.
+Normal pagination is disabled for slides.  If you want your slides
+numbered, the slide number must be given to one of the header/footer
+parts with the
+<a href="definitions.html#inlines">inline escape</a>
+<br/>
+<kbd>\*[SLIDE#]</kbd>.  For example:
+<span class="pre-in-pp">
+  HEADER "" "My slide presentation" "" \
+  FOOTER "" "" "\*[SLIDE#]"
+</span>
+will give you a centred header with numbering at the bottom right of
+the slide.
 </p>
 
 <p>
-The <kbd>weight</kbd> argument is given in points, or fractions
-thereof, and must not have the
-<a href="definitions.html#unitofmeasure">unit of measure</a>,
-<kbd>p</kbd>, appended.  Like
-<a href="inlines.html#rule-weight">RULE_WEIGHT</a>,
-weights must be greater than 0 and less than 100.  Mom&#8217;s
-default for DOCTYPE <kbd>NAMED</kbd> underlining is 1/2 point.
+The overall family, size, and colour of headers may be set with
+HEADER_FAMILY, HEADER_SIZE, and HEADER_COLOR.  If you request
+FOOTERS, you may use the FOOTER_ equivalent of these macros.
+If you request both headers and footers, use one or the other but
+not both.  For example, in a header/footer situation, HEADER_FAMILY
+would determine the family for both headers and footers, but if you
+attempted to do this
+<span class="pre-in-pp">
+  .HEADER_FAMILY T
+  .FOOTER_FAMILY H
+</span>
+FOOTER_FAMILY would take precedence, and your header family would be
+&#8220;<kbd>H</kbd>&#8221;.
 </p>
 
 <p>
-The <kbd>gap</kbd> argument can be given using any unit of measure,
-and must have the unit of measure appended to the argument.
-The distance of the gap is measured from the baseline of the
-DOCTYPE <kbd>NAMED</kbd> name to the upper edge of the underline.
-Mom&#8217;s default gap for named-doctype underlining is 2 points.
+All other formatting of individual header/footer parts must be
+entered as inline escapes inside the double-quotes.  If you want,
+say, your headers to be red but your footer page numbering to be
+black and two points larger, this is how you&#8217;d do it:
+<span class="pre-in-pp">
+  .HEADER_COLOR red
+  .DOCTYPE SLIDES \
+    HEADER "" "My slide presentation" "" \
+    FOOTER "" "" "\*[black]\*S[+2]\*[SLIDE#]\*S[-2]"
+</span>
+</p>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+Do not use mom&#8217;s
+<a href="inlines.html#inline-size-mom"><kbd>\*[SIZE &plusmn;n]</kbd></a>
+inline escape to change point size in the strings passed to HEADER
+or FOOTER.  Prefer either mom&#8217;s <kbd>\*S[&plusmn;n]</kbd> or
+groff's <kbd>\s[&plusmn;n]</kbd>.
+</span>
 </p>
+</div>
+
+<h5 class="docs" style="margin-top: .5em">Transition</h5>
 
 <p>
-As an example, suppose you want the doctype-name underlined in the
-docheader with a 2-point rule separated from the doctype-name by 3
-points.  The way to accomplish it is:
-<br/>
+&#8220;Transition&#8221; refers to how new slides appear during a
+presentation.  The official PDF specification lists a number of modes,
+each with a choice of configurable parameters.  Modes include Box,
+Blinds, Wipe, Fade, and several others.  Parameters include things
+like duration, dimension, and direction.  There are a total of
+twelve modes; for each one there are from one to six configurable
+parameters.  Consult <kbd>man gropdf(1)</kbd> for a complete listing
+of modes and parameters.
+</p>
+
+<p>
+If you pass SLIDES the <kbd>TRANSTION</kbd> argument, you must
+at a minimum follow it with a mode.  Afterwards, you may give as
+many or as few parameters as you wish.  Parameters are, in order,
 <span class="pre-in-pp">
-  .DOCTYPE_UNDERLINE 2 3p
+  1. duration
+  2. dimension
+  3. motion
+  4. direction
+  5. scale
+  6. bool
 </span>
-If you wanted the same thing, but were content with mom&#8217;s
-default gap of 2 points,
-<br/>
+You don't have to fill them all out.  If you only need the first
+three, that's all you need to input.  If you need the first and
+third, enter the second as a period (dot), which is used any time
+you want to leave a parameter at its current default or when it
+isn&#8217;t applicable.  For example, if you want a Box transition
+that lasts 1 second, filling the screen from the centre outwards,
+you'd enter
 <span class="pre-in-pp">
-  .DOCTYPE_UNDERLINE 2
+  TRANSITION "Box 1 . O"
 </span>
-would do the trick.
+because Box does not take a &#8220;dimension&#8221; parameter but it
+does take a motion parameter.
 </p>
 
 <p>
-If you merely want to toggle the underlining of
-the doctype-name in docheaders on or off, invoke
-<kbd>.DOCTYPE_UNDERLINE</kbd> by itself to turn the underlining on,
-or <kbd>.DOCTYPE_UNDERLINE&nbsp;OFF</kbd> (or NO, X, etc.)
+Notice that the entire string (mode+parameters) must be enclosed in
+double-quotes.
 </p>
 
-<p class="tip-bottom">
-Please note that if you supply a weight to DOCTYPE_UNDERLINE, and
-optionally a gap, you also turn the underlining of the doctype-name
-in docheaders on; if this is not what you want, you must turn the
-underlining off manually afterwards.
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+Not all PDF viewers support all modes.  Any that are not supported
+are replaced by the &#8220;R&#8221; mode, which simply replaces one
+slide with the next unless the PDF viewer has a different default
+transition mode.
+</span>
 </p>
 </div>
 
+<h5 class="docs" style="margin-top: .5em">Pause</h5>
+
 <p>
-<kbd>LETTER</kbd> tells mom you&#8217;re writing a letter.  See the
-section
-<a href="letters.html#letters">Writing Letters</a>
-for instructions on using mom to format letters.
+A &#8220;pause&#8221; occurs when material on a slide is halted (see
+<a href="#pause">PAUSE</a>),
+awaiting a mouse click, PgDown, Next, or the spacebar to reveal 
+subsequent material.  All the same modes and parameters as
+<kbd>TRANSITION</kbd> may be used.  The manner of entering them is
+is identical, including that the entire mode+parameter string must
+be enclosed in double-quotes.
+</p>
+
+<div class="macro-id-overline">
+<h3 id="slide-macros" class="macro-id">SLIDE MACROS</h3>
+</div>
+
+<div id="newslide" class="box-macro-args">
+Macro: <b>NEWSLIDE</b> <kbd class="macro-args">["&lt;transition mode and parameters&gt;"]</kbd>
+</div>
+
+<p>
+Unless you want material from one slide to flow onto the next, you
+need to tell mom when to start a new slide with the macro NEWSLIDE.
+Without any arguments, the new slide will appear with the default
+TRANSTION you gave to DOCTYPE SLIDES.
+</p>
+
+<p>
+If you would like a different transition, you may pass NEWSLIDE a
+new mode and associated parameters, following the same rules as the
+TRANSITION argument to DOCTYPE.  Note that the new effect becomes
+the default.  If you wish to return to the original transition, you
+must give it explicitly to the appropriate NEWSLIDE.
+</p>
+
+<div id="pause" class="box-macro-args">
+Macro: <b>PAUSE</b> <kbd class="macro-args">["&lt;pause mode and parameters&gt;"]</kbd>
+</div>
+
+<p>
+Pauses in slides are accomplished by entering the macro PAUSE at
+desired locations in your input file.  Subsequent material will be
+revealed using the pause mode given to DOCTYPE SLIDES.
+</p>
+
+<p>
+If you would like a different mode, you may pass PAUSE a
+new mode and associated parameters, following the same rules as the
+PAUSE argument to DOCTYPE.
+</p>
+
+<div id="transition" class="box-macro-args">
+Macro: <b>TRANSITION</b> <kbd class="macro-args">["&lt;transition mode and parameters&gt;"]</kbd>
+</div>
+
+<p>
+If for some reason you have material that flows from one slide to
+the next <i>and</i> you want the next slide to have a transition
+different from the current one, you can tell mom about the new
+transition with the macro TRANSITION anywhere prior to the break to
+the next slide.
+</p>
+
+<h4 id="slide-printing" class="docs" style="font-size: 100%; text-transform: uppercase">Printing slides</h4>
+
+<p>
+If you want to print slides as handouts, you have to tell
+<kbd>pdfmom</kbd> or <kbd>gropdf</kbd>, otherwise printing will
+stop at the first pause.  Simply precede <kbd>pdfmom</kbd> or
+<kbd>gropdf</kbd> with GROPDF_NOSLIDE=1, like this:
+<br/>
+<span class="pre-in-pp">
+ GROPDF_NOSLIDE=1 pdfmom &lt;options&gt; slidefile.mom &gt; slidefile.pdf
+</span>
+
 </p>
 
 <!-- -PRINTSTYLE- -->
@@ -1718,7 +2089,8 @@ Macro: <b>PRINTSTYLE</b> <kbd class="macro-args">TYPESET | TYPEWRITE [ SINGLESPA
 </div>
 
 <p class="requires">
-&bull;&nbsp;Required for document processing
+&bull;&nbsp;Required for document processing, except in the case of
+slides
 <br/>
 Must come before any changes to default document style
 </p>
@@ -2212,7 +2584,7 @@ below have the following meanings:
   FAMILY         The family of all type in the document
   PT_SIZE        The point size of type in paragraphs; mom uses
                  this to calculate automatic point size changes
-                 (eg for heads, footnotes, quotes, headers, etc)
+                 (e.g., for heads, footnotes, quotes, headers, etc)
   LS/AUTOLEAD**  The leading used in paragraphs; all leading and
                  spacing of running text is calculated from this
 
@@ -2276,7 +2648,7 @@ If you routinely make the same changes to mom&#8217;s defaults in
 order to create similar documents in a similar style&mdash;in other
 words, you need a template&mdash; you can create style-sheet files
 and include, or "source", them into your mom documents with the
-macro, INCLUDE.  The right place for such style sheets is after
+macro INCLUDE.  The right place for such style sheets is after
 <a href="#printstyle">PRINTSTYLE</a>
 and before
 <a href="#start">START</a>.
@@ -2367,11 +2739,11 @@ I recommend doing so before you begin document processing with
 </p>
 
 <p>
-The macro,
-<a href="color.html#color">COLOR</a>,
+The macro
+<a href="color.html#color">COLOR</a>
 and the
 <a href="definitions.html#inlines">inline escape</a>,
-<a href="color.html#color-inline"><kbd>\[&lt;colorname&gt;]</kbd></a>,
+<a href="color.html#color-inline"><kbd>\*[&lt;colorname&gt;]</kbd></a>
 can be used at any time during document processing for occasional
 colour effects.  However, consistent and reliable colourizing of
 various document elements (the docheader, heads, linebreaks,
@@ -2387,20 +2759,16 @@ If you plan to have mom generate a
 <a href="docelement.html#toc">table of contents</a>,
 do not embed colour
 <a href="definitions.html#inlines">inline escapes</a>
-(<a href="color.html#color-inline"><kbd>\[&lt;colorname&gt;]</kbd></a>)
+(<a href="color.html#color-inline"><kbd>\*[&lt;colorname&gt;]</kbd></a>)
 in the
 <a href="definitions.html#stringargument">string arguments</a>
 given to any of the
 <a href="docprocessing.html#reference-macros">reference macros</a>,
 nor in the string arguments given to
-<a href="docelement.html#head">HEAD</a>,
-<a href="docelement.html#subhead">SUBHEAD</a>
-or
-<a href="docelement.html#parahead">PARAHEAD</a>.
+<a href="docelement.html#heading">HEADING</a>.
 Use, rather, the
 <a href="definitions.html#controlmacro">control macros</a>
-mom provides to automatically colourize these
-elements.
+mom provides to automatically colourize these elements.
 </p>
 </div>
 
@@ -2512,7 +2880,7 @@ for an explanation of how to disable this default behaviour.
 </div>
 
 <div class="box-macro-args">
-Macro: <b>DOCHEADER</b> <kbd class="macro-args">&lt;toggle&gt; [ distance to advance from top of page ]</kbd>
+Macro: <b>DOCHEADER</b> <kbd class="macro-args">&lt;toggle&gt; [ distance to advance from top of page ] [ NO_SHIM ]</kbd>
 </div>
 
 <p class="requires">
@@ -2556,20 +2924,30 @@ edge of the paper to the
 of the first line of type.
 </p>
 
+<p>
+With <kbd>DOCHEADER OFF</kbd>, it is possible to create your own
+custom docheaders (after
+<a href="#start">START</a>)
+using mom&#8217;s typesetting macros.  It is recommended that if you
+do create a custom docheader, you make
+<a href="docprocessing.html#shim"><kbd>.SHIM</kbd></a>
+the last macro before the first item of your document (for
+example, <kbd>PP</kbd> or <kbd>HEADING&nbsp;1</kbd>.
+</p>
+
 <div class="box-tip">
 <p class="tip">
-<span class="tip">Tip:</span>
-Since no document processing happens until you invoke
-<a href="#start"><kbd>.START</kbd></a>&mdash;including
-anything to do with docheaders&mdash;you can
-typeset your own docheader prior to START (if
-you don&#8217;t like the way mom does things) and use
-<kbd>.DOCHEADER&nbsp;OFF</kbd> with its optional distance
-argument to ensure that the body of your document starts where
-you want.  You can even insert a PDF or PostScript image file (see
-<a href="images.html#pspic">PSPIC</a>).
-and
-<a href="images.html#pdf-image">PDF_IMAGE</a>).
+<span class="note">Note:</span>
+You may have tried <kbd>DOCHEAHER&nbsp;OFF</kbd> with a distance argument
+and discovered that mom will not budge the starting position of the document
+from her chosen default location.  This is byproduct of
+<a href="#shim">shimming</a>,
+which mom always applies before the first line of running text after
+the docheader, regardless of which
+<a href="#vertical-whitespace-management">vertical whitespace management</a>
+strategy is in effect.  If you encounter the problem, pass
+<kbd>DOCHEADER&nbsp;OFF&nbsp;&lt;distance&gt;</kbd>
+the additional final argument, <kbd>NO_SHIM</kbd>.
 </p>
 </div>
 
@@ -2599,8 +2977,7 @@ A typeset docheader has the following characteristics:
       by        medium italic, same size as running text
    Author(s)    medium italic, same size as running text
 
-(Document type) bold italic, underscored, 3 points larger than running text
-
+(Document type) bold italic, 3 points larger than running text
 </span>
 </div>
 
@@ -2613,7 +2990,6 @@ is <kbd>CHAPTER</kbd>,
 <span class="pre" style="color: #302419;">
  Chapter &lt;n&gt;   bold, 4 points larger than running text
 Chapter Title  bold italic, 4 points larger than running text
-
 </span>
 </div>
 
@@ -2624,7 +3000,6 @@ is the prevailing family of the whole document.  Title, subtitle,
 author and document type are what you supply with the
 <a href="#reference-macros">reference macros</a>.
 Any you leave out will not appear; mom will compensate:
-
 </p>
 
 <div class="box-tip">
@@ -2633,52 +3008,56 @@ Any you leave out will not appear; mom will compensate:
 If your DOCTYPE is <kbd>CHAPTER</kbd> and you have both &#8220;Chapter
 &lt;n&gt;&#8221; and a &#8220;Chapter Title&#8221; (as above), mom
 inserts a small amount of whitespace between them, equal to
-one-quarter of the <a href="definitions.html#leading">leading</a> in
-effect.  If this doesn&#8217;t suit you, you can alter the space by
-including the
-<a href="definitions.html#inlines">inline escapes</a>,
-<a href="inlines.html#up"><kbd>\*[UP]</kbd></a>
-or
-<a href="inlines.html#down"><kbd>\*[DOWN]</kbd></a>,
-in the argument you pass to
-<a href="#chapter-title">CHAPTER_TITLE</a>,
-like this:
-<br/>
-<span class="pre-in-pp" style="margin-bottom: -1em;">
-  .CHAPTER_TITLE "\*[DOWN 2p]Why Not Patent Calculus?"
-</span>
-or
-<span class="pre-in-pp" style="margin-top: -.5em;">
-  .CHAPTER_TITLE "\*[UP 2p]Why Not Patent Calculus?"
-</span>
+one-quarter of the
+<a href="definitions.html#leading">leading</a>
+in effect.  If this doesn&#8217;t suit you, you can remove or alter
+the space with
+<a href="#space-before">CHAPTER_TITLE_SPACE_BEFORE</a>.
 </p>
 </div>
 
 <div class="macro-list-container">
 <h3 id="index-docheader-control" class="macro-list">Docheader control</h3>
-<ol class="macro-list">
-  <li><a href="#change-start">Change the starting position of the docheader</a></li>
-  <li><a href="#docheader-quad">Change quad direction the entire docheader</a></li>
-  <li><a href="#docheader-family">Change the family of the entire docheader</a></li>
-  <li><a href="#change-family">Change the family of individual docheader elements</a></li>
-  <li><a href="#change-font">Change the font of individual docheader elements</a></li>
-  <li><a href="#change-size">Adjust the size of docheader elements</a></li>
-  <li><a href="#adjust-leading">Adjust the docheader leading</a></li>
-  <li><a href="#docheader-color">Change the colour of the entire docheader</a></li>
-  <li><a href="#change-color">Change the colour of the individual docheader elements</a></li>
-  <li><a href="#change-attribute">Change the attribution string (&#8220;by&#8221;)</a></li>
-</ol>
+
+<p style="margin-top: -1.5em; margin-left: .5em; margin-right: .5em">
+With the docheader control macros, you can change the family,
+colour, leading and quad direction of the entire docheader.  You can
+also set the style parameters for each part individually.  Style
+parameters include family, font, size, colour, lead, space before,
+caps, smallcaps and underscoring.
+</p>
+
+<ul class="macro-list" style="margin-top: -.5em">
+  <li><a href="#change-whole-docheader">1. Changes to the whole docheader</a>
+  <ul style="list-style-type: disc">
+    <li><a href="#change-start">Change the starting position of the docheader</a></li>
+    <li><a href="#docheader-family">Change the family of the whole docheader</a></li>
+    <li><a href="#docheader-color">Change the colour of the whole docheader</a></li>
+    <li><a href="#docheader-lead">Change the leading of the whole docheader</a></li>
+    <li><a href="#docheader-quad">Change the quad direction of the docheader</a></li>
+  </ul>
+  </li>
+  <li><a href="#part-by-part">2. Part by part changes</a>
+  <ul style="list-style-type: disc">
+    <li><a href="#list-of-params">List of parameters and arguments</a></li>
+    <li><a href="#grouping">Grouping part/parameter changes</a> &ndash; very handy</li>
+  </ul>
+  </li>
+  <li><a href="#change-attribute">3. Changing or removing the attribution string (&#8220;by&#8221;)</a></li>
+</ul>
 </div>
 
-<h4 id="change-start" class="docs">1. Change the starting position of the docheader</h4>
+<h4 id="change-whole-docheader" class="docs" style="font-size: 100%">1. Changes to the whole docheader</h4>
+
+<h5 id="change-start" class="docs">Change the starting position of the docheader</h5>
 
 <p>
 By default, a docheader starts on the same
 <a href="definitions.html#baseline">baseline</a>
 as
 <a href="definitions.html#running">running text</a>.
-If you&#8217;d like it to start somewhere else, use the macro,
-DOCHEADER_ADVANCE, and give it the distance you want (measured from
+If you&#8217;d like it to start somewhere else, use the macro
+DOCHEADER_ADVANCE and give it the distance you want (measured from
 the top edge of the paper to the first baseline of the docheader),
 like this:
 <br/>
@@ -2707,18 +3086,18 @@ to place them where you want.
 </p>
 </div>
 
-<h4 id="docheader-quad" class="docs">2. Change the quad direction of the docheader</h4>
+<h5 id="docheader-quad" class="docs">Change the quad direction of the docheader</h5>
 
 <p>
-By default, mom centers the docheader.  If you&#8217;d prefer to
+By default, mom centres the docheader.  If you&#8217;d prefer to
 have your docheaders set flush left or right, or need to restore
-the default centering, invoke <kbd>.DOCHEADER_QUAD</kbd> with the
+the default centreing, invoke <kbd>.DOCHEADER_QUAD</kbd> with the
 quad direction you want, either <kbd>LEFT</kbd> (or <kbd>L</kbd>),
 <kbd>RIGHT</kbd> (or <kbd>R</kbd>) or <kbd>CENTER</kbd> (or
 <kbd>C</kbd>).
 </p>
 
-<h4 id="docheader-family" class="docs">3. Change the family of the entire docheader</h4>
+<h5 id="docheader-family" class="docs">Change the family of the entire docheader</h5>
 
 <p>
 By default, mom sets the docheader in the same
@@ -2743,186 +3122,199 @@ is how you&#8217;d do it.
 
 <p>
 Please note that if you use DOCHEADER_FAMILY, you can still alter
-the family of individual parts of the docheader with the macros
-listed
-<a href="#change-family">here</a>.
+the family of individual parts of the docheader.
 </p>
 
-<h4 id="change-family" class="docs">4. Change the family of individual docheader elements</h4>
+<h5 id="docheader-color" class="docs">Change the color of the entire docheader</h5>
 
 <p>
-The following macros let you change the
-<a href="definitions.html#family">family</a>
-of each docheader element separately:
-</p>
-<ul style="list-style-type: none; margin: -.5em;">
-  <li>Macro: <b>TITLE_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd></li>
-  <li>Macro: <b>CHAPTER_TITLE_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd></li>
-  <li>Macro: <b>SUBTITLE_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd></li>
-  <li>Macro: <b>AUTHOR_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd></li>
-  <li>Macro: <b>DOCTYPE_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd>
-      (if <a href="#doctype">DOCTYPE</a> is <kbd>NAMED</kbd>)
-  </li>
-</ul>
-
-<p>
-Simply pass the appropriate macro the family you want, just as you
-would with
-<a href="typesetting.html#family">FAMILY</a>.
-</p>
-
-<h4 id="change-font" class="docs">5. Change the font of individual docheader elements</h4>
-
-<p>
-The following macros let you change the
-<a href="definitions.html#font">font</a>
-of each docheader element separately:
-</p>
-<ul style="list-style-type: none; margin: -.5em;">
-  <li>Macro: <b>TITLE_FONT</b> <kbd class="macro-args">R | B | I | BI</kbd></li>
-  <li>Macro: <b>CHAPTER_TITLE_FONT</b> <kbd class="macro-args">R | B | I | BI</kbd></li>
-  <li>Macro: <b>SUBTITLE_FONT</b> <kbd class="macro-args">R | B | I | BI</kbd></li>
-  <li>Macro: <b>AUTHOR_FONT</b> <kbd class="macro-args">R | B | I | BI</kbd></li>
-  <li>Macro: <b>DOCTYPE_FONT</b> <kbd class="macro-args">R | B | I | BI</kbd>
-      (if <a href="#doctype">DOCTYPE</a> is <kbd>NAMED</kbd>)
-  </li>
-</ul>
-
-<p>
-Simply pass the appropriate macro the font you want. <kbd>R, B,
-I</kbd> and <kbd>BI</kbd> have the same meaning as they do for
-<a href="typesetting.html#font">FT</a>.  You may also use any of the
-<a href="appendices.html#style-extensions">style extensions</a>
-provided by mom.
-</p>
-
-<h4 id="change-size" class="docs">6. Adjust the size of individual docheader elements</h4>
-
-<p>
-The following macros let you adjust the point size of each docheader
-element separately.
-</p>
-
-<p>
-Mom calculates the point size of docheader elements from the point
-size of paragraphs in running text, so you must prepend a + or -
-sign to the argument.  Points is assumed as the
-<a href="definitions.html#unitofmeasure">unit of measure</a>,
-so there&#8217;s no need to append a unit to the argument.
-Fractional point sizes are allowed.
+The default color for docheaders is black, as you&#8217;d expect.
+If you wish to change it, use
+<kbd>.DOCHEADER_COLOR&nbsp;&lt;color&gt;</kbd>, where
+<kbd>&nbsp;&lt;color&gt;</kbd> is a color pre-initialized with
+<a href="color.html#xcolor">XCOLOR</a>
+or
+<a href="color.html#newcolor">NEWCOLOR</a>.
 </p>
 
-<ul style="list-style-type: none; margin: -.5em;">
-  <li>Macro: <b>TITLE_SIZE</b> <kbd class="macro-args">&lt;+/-points&gt;</kbd>
-      <br/>
-      &nbsp;&nbsp;&nbsp;default = +3.5 (+4 if docheader title is &quot;Chapter &lt;n&gt;&quot;)
-  </li>
-  <li>Macro: <b>CHAPTER_TITLE_SIZE</b> <kbd class="macro-args">&lt;+/-points&gt;</kbd>
-      <br/>
-      &nbsp;&nbsp;&nbsp;default = +4
-  </li>
-  <li>Macro: <b>SUBTITLE_SIZE</b> <kbd class="macro-args">&lt;+/-points&gt;</kbd>
-      <br/>
-      &nbsp;&nbsp;&nbsp;default = +0
-  </li>
-  <li>Macro: <b>AUTHOR_SIZE</b> <kbd class="macro-args">&lt;+/-points&gt;</kbd>
-      <br/>
-      &nbsp;&nbsp;&nbsp;default = +0
-  </li>
-  <li>Macro: <b>DOCTYPE_SIZE</b> <kbd class="macro-args">&lt;+/-points&gt;</kbd>
-      (if <a href="#doctype">DOCTYPE</a> is <kbd>NAMED</kbd>)
-      <br/>
-      &nbsp;&nbsp;&nbsp;default = +3
-  </li>
-</ul>
+<h5 id="docheader-lead" class="docs">Change the leading of the entire docheader</h5>
 
 <p>
-Simply pass the appropriate macro the size adjustment you want.
+By default, mom uses the leading in effect for
+<a href="definitions.html#running">running text</a>
+for docheaders.  If you want to increase or
+decrease the overall docheader leading, use
+<kbd>.DOCHEADER_LEAD&nbsp;+|-&lt;amount&gt;</kbd>, where
+<kbd>&lt;amount&gt;</kbd> is the number of
+<a href="definitions.html#picaspoints">points</a>
+by which to make the adjustment.  
 </p>
 
-<h4 id="adjust-leading" class="docs">7. Adjust the docheader leading</h4>
+<h4 id="part-by-part" class="docs" style="font-size: 100%">2. Part by part changes</h4>
 
 <p>
-The
-<a href="definitions.html#leading">leading</a>
-of docheaders is the same as running text.  If you&#8217;d like your
-docheaders to have a different leading, say, 2 points more than the
-lead of running text, use:
+Whenever you want to change the style parameters for any part of
+the docheader, simply join the name of the part to the parameter
+you wish to change using an underscore, then supply any necessary
+arguments.  The subitle double-underlined?  No problem.
 <br/>
 <span class="pre-in-pp">
-  .DOCHEADER_LEAD +2
+  .SUBTITLE_UNDERLINE DOUBLE
 </span>
-Since the leading of docheaders is calculated from the lead of running
-text, a + or - sign is required before the argument (how much to add
-or subtract from the lead of running text).  No 
-<a href="definitions.html#unitofmeasure">unit of measure</a>
-is required; points is assumed.
-</p>
-
-<h4 id="docheader-color" class="docs">8. Change the colour of the entire docheader</h4>
-
-<p>
-If you want to colourize the entire docheader:
+Author in red?
 <br/>
 <span class="pre-in-pp">
-  .DOCHEADER_COLOR <kbd class="macro-args">&lt;color name&gt;</kbd>
+  .AUTHOR_COLOR red
+</span>
+Title in smallcaps?
+<span class="pre-in-pp">
+  .TITLE_SMALLCAPS
 </span>
-You must pre-define (or &#8220;initialize&#8221;) the colour with
-<a href="color.html#newcolor">NEWCOLOR</a>
-or
-<a href="color.html#xcolor">XCOLOR</a>.
 </p>
 
+<div class="box-tip" style="margin-top: -1em;">
+<p class="tip">
+<span class="note">Note:</span>
+Use <kbd>ATTRIBUTE</kbd> as the part name for the attribution string
+(&#8220;by&#8221;) that precedes the author, and <kbd>DOCTYPE</kbd>
+as the name for the string passed to <kbd>DOCTYPE NAMED&nbsp;"string"</kbd>.
+</p>
+</div>
 
-<h4 id="change-color" class="docs">9. Change the colour of the docheader elements individually</h4>
-
-<p>
-The following macros let you change the colour of each
-docheader element separately.  You must pre-define (or
-&#8220;initialize&#8221;) the colour with
-<a href="color.html#newcolor">NEWCOLOR</a>
-or
-<a href="color.html#xcolor">XCOLOR</a>.
-</p>
-<ul style="list-style-type: none; margin: -.5em;">
-  <li>Macro: <b>TITLE_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd></li>
-  <li>Macro: <b>CHAPTER_TITLE_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd>
-  <ul style="list-style-type: disc; margin-left: -.5em;">
-    <li>Note: <b>CHAPTER_TITLE_COLOR</b> is needed only if you supply both a
-        <a href="#chapter">CHAPTER</a>
-        reference macro and a
-        <a href="#chapter-title">CHAPTER_TITLE</a>
-        macro.  Otherwise, TITLE_COLOR takes care of colorizing the
-        chapter header.
-    </li>
-  </ul></li>
-  <li>Macro: <b>SUBTITLE_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd></li>
-  <li>Macro: <b>ATTRIBUTE_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd>
-      (the &#8220;by&#8221; string preceding author[s] name[s])
-  </li>
-  <li>Macro: <b>AUTHOR_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd></li>
-  <li>Macro: <b>DOCTYPE_COLOR</b> <kbd class="macro-args"> &lt;colorname&gt;</kbd>
-      (if <a href="#doctype">DOCTYPE</a> is <kbd>NAMED</kbd>)
-  </li>
-</ul>
-
-<p>
-It is not recommended that you embed colour (with the
-<a href="definitions.html#inlines">inline escape</a>,
-<a href="color.html#color-inline"><kbd>\*[&lt;colorname&gt;]</kbd></a>)
-in the strings passed to TITLE, CHAPTER_TITLE, SUBTITLE, AUTHOR or
-the name you give DOCTYPE <kbd>NAMED</kbd>.  The strings passed to
-these macros are used to generate page
-<a href="definitions.html#header">headers</a>
-and
-<a href="definitions.html#footer">footers</a>,
-with the result that an embedded colour will cause the string to be
-colourized in headers and/or footers as well.  (If you want headers
-or footers colourized, or parts thereof, use the header/footer
-control macros.)
+<h5 id="list-of-params" class="docs">List of parameters with arguments</h5>
+
+<dl>
+  <dt class="params">_FAMILY</dt>
+    <dd>
+      Takes the same argument as <a href="typesetting.html#family">FAMILY</a>.
+    </dd>
+  <dt class="params">_FONT</dt>
+    <dd>
+      Takes the same argument as <a href="typesetting.html#font">FT</a>.
+    </dd>
+  <dt class="params">_SIZE</dt>
+    <dd>
+      Takes a <kbd>+</kbd> or <kbd>-</kbd> value relative to the size of
+      <a href="definitions.html#running">running text</a>.
+    </dd>
+  <dt class="params">_COLOR</dt>
+    <dd>
+      Takes the same argument as <a href="color.html#color">COLOR</a>.
+      Colors should be pre-initialized with
+      <a href="color.html#xcolor">XCOLOR</a>
+      or
+      <a href="color.html#newcolor">NEWCOLOR</a>.
+    </dd>
+  <dt class="params">_LEAD</dt>
+    <dd>
+      Takes an absolute leading value, i.e. not relative to the
+      overall leading of the docheader.  The leading applies to
+      multiple lines of type within the same docheader part, e.g.
+      several authors or a long title that must be split over two
+      lines.  No
+      <a href="definitions.html#unitofmeasure">unit of measure</a>
+      is required;
+      <a href="definitions.html#picaspoints">points</a>
+      is assumed.
+    </dd>
+  <dt id="space-before" class="params">_SPACE</dt>
+    <dd>
+      Takes a numeric value with a
+      <a href="definitions.html#unitofmeasure">unit of measure</a>
+      appended to it.  The value may be negative.  This allows you
+      to adjust the whitespace before a docheader part, for example
+      if you want more whitespace between the title and the author.
+      <span style="display: block; margin-top: .5em">
+      Note that <kbd>TITLE</kbd> does not have a <kbd>_SPACE</kbd>
+      parameter; use
+      <a href="#change-start">DOCHEADER_ADVANCE</a>
+      to move the title further down on the page.
+      </span>
+    </dd>
+  <dt class="params">_CAPS</dt>
+    <dd>
+      Capitalizes the entire docheader part.  No argument is
+      required.
+    </dd>
+  <dt class="params">_NO_CAPS</dt>
+    <dd>
+      Only used if you need to reverse the sense of <kbd>_CAPS</kbd>, as
+      can sometimes happen when
+      <a href="rectoverso.html#collate">collating</a>
+      documents that have differing docheader style requirements.
+    </dd>
+  <dt class="params">_SMALLCAPS</dt>
+    <dd>
+      Set the entire docheader part in smallcaps.  No argument is
+      required.
+    </dd>
+  <dt class="params">_NO_SMALLCAPS</dt>
+    <dd>
+      Only used if you need to reverse the sense of
+      <kbd>_SMALLCAPS</kbd>, as can sometimes happen when
+      <a href="rectoverso.html#collate">collating</a>
+      documents that have differing docheader style requirements.
+    </dd>
+  <dt class="params">_UNDERSCORE</dt>
+    <dd>
+      With no argument, underscores the docheader part.  With a
+      single, possibly decimal numeric argument, sets the weight of
+      the underscore.  A second numeric argument to which a
+      <a href="definitions.html#unitofmeasure">unit of measure</a>
+      is appended (most likely <kbd>p</kbd>) sets the distance
+      between the baseline and the underscore.
+      <span style="display: block; margin-top: .5em">
+      If the argument <kbd>DOUBLE</kbd> is given, double underscores
+      the docheader part.  With a single, possibly decimal numeric
+      argument afterwards, sets the weight of the underscore rules.
+      A third numeric argument to which a
+      <a href="definitions.html#unitofmeasure">unit of measure</a>
+      is appended (most likely <kbd>p</kbd>) sets the distance
+      between the baseline and the first underscore rule.  A fourth
+      numeric argument to which a unit of measure is appended sets
+      the distance between the two underscore rules.
+      </span>
+      <span style="display: block; margin-top: .5em">
+      You may give <kbd>_UNDERLINE</kbd> as the parameter instead of
+      <kbd>_UNDERSCORE</kbd> if you prefer.
+      </span>
+    </dd>
+  <dt class="params">NO_UNDERSCORE</dt>
+    <dd>
+      Only used if you need to reverse the sense of
+      <kbd>_UNDERSCORE</kbd>, as can sometimes happen when
+      <a href="rectoverso.html#collate">collating</a>
+      documents that have differing docheader style requirements.
+    </dd>
+</dl>
+
+<h5 id="grouping" class="docs">Grouping part/parameter changes</h5>
+
+<p>
+If you want to change several parameters for a particular docheader
+part, you may group the changes together in a single macro by
+joining the name of the part to <kbd>STYLE</kbd> with an underscore,
+for example <kbd>TITLE_STYLE</kbd> or <kbd>AUTHOR_STYLE</kbd>.
+The following demonstrates:
+<span class="pre-in-pp">
+  .CHAPTER_TITLE_STYLE \
+  FAMILY T \
+  SIZE +4 \
+  UNDERSCORE 2 \
+  SMALLCAPS
+</span>
+Notice the use of the backslash character, which is required after
+the macro name and all parameters except the last.  Grouping reduces
+clutter and the finger fatigue caused by entering
+<span class="pre-in-pp">
+   .CHAPTER_TITLE_FAMILY T
+   .CHAPTER_TITLE_SIZE +4
+   .CHAPTER_TITLE_UNDERSCORE 2
+   .CHAPTER_TITLE_SMALLCAPS
+</span>
 </p>
 
-<h4 id="change-attribute" class="docs">10. Change the attribution string (&#8220;by&#8221;)</h4>
+<h4 id="change-attribute" class="docs" style="font-size: 100%">3. Changing or removing the attribution string (&#8220;by&#8221;)</h4>
 
 <p>
 If you&#8217;re not writing in English, you can change what mom
@@ -2933,7 +3325,7 @@ prints where &#8220;by&#8221; appears in docheaders.  For example,
 </span>
 changes &#8220;by&#8221; to &#8220;par&#8221;.  ATTRIBUTE_STRING
 can also be used, for example, to make the attribution read
-&quot;Edited by&quot;.
+&#8220;Edited by&#8221;.
 </p>
 
 <p>
@@ -2978,24 +3370,6 @@ doc cover pages, cover pages, or the first-page docheader,
 arguments, is sufficient.
 </p>
 
-<div class="box-tip">
-<p class="tip">
-<span class="note">Note:</span>
-The type specs for the attribution line in docheaders are the
-same as for the author line.  Although it&#8217;s highly unlikely
-you&#8217;ll want the attribution line in a different family, font,
-or point size, you can make such changes using
-<a href="definitions.html#inlines">inline escapes</a>
-in the argument to ATTRIBUTE_STRING.  For example,
-<br/>
-<span class="pre-in-pp">
-  .ATTRIBUTE_STRING "\f[HBI]\*[SIZE -2p] by \*[SIZE +2p]\*[PREV]"
-</span>
-would set &#8220;by&#8221; in Helvetica bold italic, 2 points
-smaller than normal.
-</p>
-</div>
-
 <div class="rule-short"><hr/></div>
 
 <!-- -COLUMNS- -->
@@ -3104,17 +3478,33 @@ or remove space after the docheader, there is no need to invoke
 <div class="box-tip">
 <p class="tip">
 <span class="note">Note:</span>
-If you add or subtract space after the docheader, e.g. with
+If you do add or subtract space after the docheader, e.g. with
 <a href="typesetting.html#ald">ALD</a>
 or
 <a href="typesetting.html#SP">SP</a>,
 and your
 <a href="definitions.html#unitofmeasure">unit of measure</a>
-is something other than &#8220;<kbd>v</kbd>&#8221;, be sure to follow the spacing
-command with
-<a href="docprocessing.html#shim"><kbd>.SHIM</kbd></a>
-unless shimming has been disabled with
-<a href="#disable-shim">NO_SHIM</a>.
+is something other than a multiple of &#8220;<kbd>v</kbd>&#8221;, be
+sure to follow the spacing command with
+<a href="docprocessing.html#shim">SHIM</a>
+before entering <kbd>.COL_MARK</kbd> unless shimming has been
+disabled with
+<a href="#no-shim">NO_SHIM</a>.
+If your document is being flex-spaced, do not use
+<a href="docprocessing.html#flex">FLEX</a>.
+Rather, disable flex-spacing temporarily with
+<br/>
+<span class="pre-in-pp">
+  .NO_FLEX
+  .NO_SHIM off
+  .SHIM
+  .COL_MARK
+</span>
+and re-enable it afterwards with
+<span class="pre-in-pp">
+  .NO_SHIM
+  .NO_FLEX off
+</span>
 </p>
 </div>
 
@@ -3151,7 +3541,7 @@ Macro: <b>COL_NEXT</b>
 it left (assuming the type is justified or quad left), and moves over
 to the top of the next column.  If the column happens to be the last
 (rightmost) one on the page, mom starts a new page
-at the &quot;column 1&quot; position.  This is the macro to use when
+at the &#8220;column 1&#8221; position.  This is the macro to use when
 you want to start a new column after the end of a paragraph.
 </p>
 
@@ -3313,12 +3703,12 @@ the tops of pages after the first.)
                element tag is entered, the font reverts
                to the current default for the new tag.
 
-               N.B. &mdash; \&bull;[SLANT] and \&bull;[BOLDER] affect
+               N.B. &mdash; \*[SLANT] and \*[BOLDER] affect
                paragraph text, and remain in effect for all
                paragraphs until turned off.  If you want to
                use them in a macro that takes a string
                argument, include the escape in the string.
-               \&bull;[COND] and \&bull;[EXT] behave similarly.
+               \*[COND] and \*[EXT] behave similarly.
 
   PT_SIZE     &bull;Changes point size for the duration of the
                current tag only.  As soon as another document
@@ -3336,25 +3726,23 @@ the tops of pages after the first.)
                a document will almost certainly result in a
                bottom margin that doesn&#8217;t align with the
                bottom margin of subsequent pages.  You&#8217;ll
-               need to use the SHIM macro to get mom back on
-               track when you&#8217;re ready to return to the
+               need to use the SHIM or FLEX macro to get mom back
+               on track when you&#8217;re ready to return to the
                document&#8217;s default leading.
 
-
-<a id="autolead"></a>
-  AUTOLEAD   &bull;Invoked before START, sets the overall document
+  <a id="autolead" style="margin-top: -1em">AUTOLEAD</a>   &bull;Invoked before START, sets the overall document
               leading as a function of the overall document
               point size (ie the point size used in paragraphs);
               subsequently disabled after START, except for calls
               to DOC_PT_SIZE
-              
+
              &bull;DOC_LEAD before DOC_PT_SIZE cancels the AUTOLEAD
               set before START
 
              &bull;Invoked after START, remains in effect for all
               subsequent point size changes made with PT_SIZE,
               but does not affect the leading of the document
-              element tags (eg HEADING, PP, QUOTE...), or calls
+              element tags (e.g., HEADING, PP, QUOTE...), or calls
               to DOC_PT_SIZE
 
   QUAD        &bull;Changes quad for the duration of the
@@ -3418,7 +3806,7 @@ first.
 </p>
 
 <p>
-If you need the space, you must use the macro, ADD_SPACE, in
+If you need the space, you must use the macro ADD_SPACE in
 conjunction with
 <a href="typesetting.html#newpage">NEWPAGE</a>.
 </p>
@@ -3426,11 +3814,13 @@ conjunction with
 <!-- -ADD_SPACE- -->
 
 <div class="macro-id-overline">
-<h3 id="add-space" class= "macro-id">ADD_SPACE</h3>
+<h3 id="add-space" class= "macro-id">ADD_SPACE/RESTORE_SPACE</h3>
 </div>
 
 <div class="box-macro-args">
 Macro: <b>ADD_SPACE</b> <kbd class="macro-args">&lt;amount of space&gt;</kbd>
+<br/>
+Macro: <b>RESTORE_SPACE</b>
 </div>
 
 <p class="requires">
@@ -3438,10 +3828,12 @@ Macro: <b>ADD_SPACE</b> <kbd class="macro-args">&lt;amount of space&gt;</kbd>
 </p>
 
 <p>
-ADD_SPACE takes as its single argument the distance
-you want mom to advance from the normal
-baseline position at the top of any page after the first
-(ie the one on which the docheader is normally printed).  A
+If your
+<a href="#doctype">DOCTYPE</a>
+is DEFAULT, CHAPTER, NAMED, or LETTER, ADD_SPACE takes as its
+single argument the distance you want mom to advance from the normal
+baseline position at the top of any page <i>after the first</i> (ie
+the one on which the docheader is normally printed).  A
 <a href="definitions.html#unitofmeasure">unit of measure</a> is
 required.
 </p>
@@ -3466,7 +3858,33 @@ Since adding space in this way is almost sure to disrupt mom&#8217;s
 ability to guarantee perfectly flush bottom margins, I highly
 recommend using the
 <a href="docprocessing.html#shim">SHIM</a>
-macro immediately after ADD_SPACE.
+or
+<a href="docprocessing.html#flex">FLEX</a>
+macro immediately after ADD_SPACE, which will add the space plus
+whatever correction is required by the
+<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a>
+strategy in effect.
+</p>
+
+<p>
+If your
+<a href="#doctype">DOCTYPE</a>
+is SLIDES, ADD_SPACE may be used on any slide <i>including the
+first</i> to introduce additional white space at the top.
+</p>
+
+<h4 class="docs doc-param-macros" style="margin-top: .5em">RESTORE_SPACE</h4>
+
+<p style="margin-top: .5em">
+You may sometimes find that mom refuses to respect
+<a href="typesetting.html#space">SP</a>,
+<a href="typesetting.html#index-aldrld">ALD/RLD</a>,
+<a href="docprocessing.html#shim">SHIM</a>,
+or
+<a href="docprocessing.html#flex">FLEX</a>
+after the first element (line of text, floated material) output
+at the top of a page.  Should this happen, insert the macro
+RESTORE_SPACE before issuing the spacing command.
 </p>
 
 <!-- *** -->
@@ -3630,7 +4048,7 @@ Macro: <b>DOC_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd>
       <li><a href="docelement.html#endnote-intro">endnotes pages</a></li>
       <li><a href="docelement.html#toc-intro">table of contents</a></li>
   </ul></li>
-  <li>any page elements (eg headers page numbers, footnotes) whose
+  <li>any page elements (e.g., headers page numbers, footnotes) whose
       families you wish to remain at their old values must be
       reset with the appropriate
       <a href="docelement.html#docelement-control">control macros</a>
@@ -3757,7 +4175,7 @@ You need do nothing special to terminate a document.  When groff
 finishes processing the last
 <a href="definitions.html#inputline">input line</a>
 of a file, the page is ejected, subject to whatever routines are
-needed to complete it (eg printing footnotes or adding the page
+needed to complete it (e.g., printing footnotes or adding the page
 number).
 </p>
 
@@ -3771,7 +4189,7 @@ page at the end of the formatted document.
 
 <p>
 The situation is rare, generally occurring only when some additional
-macro is required after the input text, eg to exit a
+macro is required after the input text, e.g., to exit a
 <a href="docelement.html#list-intro">list</a>
 or terminate a
 <a href="docelement.html#quote">quote</a>.
@@ -3822,9 +4240,6 @@ a document.
 </p>
 </div>
 
-
-<div class="rule-long"><hr/></div>
-
 <!-- Navigation links -->
 <table style="width: 100%; margin-top: 12px;">
 <tr>
@@ -3840,4 +4255,3 @@ a document.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 4ac405ad3f1af30d25d08cbfa2b84d40ae4c11cb..24c1a270946d022cd41523b5cbf78012328cf523 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -50,7 +50,10 @@ nearly indispensable) routines to simplify typesetting.
 <ul class="no-enumerator">
 <li class="list-head-goodies"><a href="#alias">ALIAS</a> <span class="normal-smaller">&ndash; rename macros</span></li>
 <li class="list-head-goodies"><a href="#caps">CAPS</a> <span class="normal-smaller">&ndash; convert to upper case</span></li>
+<li class="list-head-goodies"><a href="#center-block">CENTER_BLOCK</a> <span class="normal-smaller">&ndash; centre blocks of type with quad intact</span></li>
 <li class="list-head-goodies"><a href="#esc-char">ESC_CHAR</a> <span class="normal-smaller">&ndash; change the escape character to something other than a backslash</span></li>
+<li class="list-head-goodies"><a href="#hang">HANG</a> <span class="normal-smaller">&ndash; hang character(s) outside right margin (inline escape)</span></li>
+<li class="list-head-goodies"><a href="#left-hang">LEFT_HANG</a> <span class="normal-smaller">&ndash; hang character(s) outside left margin</span></li>
 <li class="list-head-goodies"><a href="#silent">SILENT</a> <span class="normal-smaller">&ndash; hide input lines from output</span></li>
 <li class="list-head-goodies"><a href="#sizespecs">SIZESPECS</a> <span class="normal-smaller">&ndash; get cap-height, x-height and descender depth of a font</span></li>
 <li class="list-head-goodies"><a href="#smartquotes">SMARTQUOTES</a> <span class="normal-smaller">&ndash; convert typewriter doublequotes to proper doublequotes</span></li>
@@ -125,8 +128,7 @@ Macro: <b>ALIAS</b> <kbd class="macro-args">&lt;new name&gt; &lt;old name&gt;</k
 <p>
 The ALIAS macro may well be your best friend.  With it, you can
 change the name of a macro to anything you like (provided the new
-name is not already being used by mom; see the
-<a href="reserved.html#reserved">list of reserved words</a>).
+name is not already being used by mom).
 </p>
 
 <p>
@@ -166,7 +168,7 @@ precedes the macro when it&#8217;s a
 <div class="box-tip">
 <p class="tip">
 <span class="tip">Tip:</span>
-A particularly good candidate for ALIAS is the macro,
+A particularly good candidate for ALIAS is the macro
 <a href="typesetting.html#ps">PT_SIZE</a>.
 A more natural name for it would simply be PS, but PS conflicts
 with the <b>eqn</b> equation preprocessor and thus mom uses the
@@ -510,6 +512,21 @@ The above produces, on output
 </span>
 </p>
 
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+<kbd>\*[LC]</kbd> must come after a terminating period.
+<br/>
+<span class="pre-in-pp">
+  \*[UC]All work and no play makes Jack a dull boy.\*[LC]
+</span>
+not
+<span class="pre-in-pp">
+  \*[UC]All work and no play makes Jack a dull boy\*[LC].
+</span>
+</p>
+</div>
+
 <!-- -STRING- -->
 
 <div class="macro-id-overline">
@@ -604,6 +621,15 @@ character to whatever the argument is.  ESC_CHAR with no argument
 restores the escape character to the backslash.
 </p>
 
+<div class="box-tip">
+<p class="tip">
+<span class="important">Important:</span>
+Changing the escape character prevents macros, which require that
+the backslash be the escape character, from functioning correctly.
+Do not introduce any subsequent macros without first restoring the
+escape character to its default.
+</p>
+</div>
 
 <div class="box-tip">
 <p class="tip">
@@ -698,10 +724,26 @@ UNDERSCORE.  If you need to underscore several lines of type, use
 </p>
 </div>
 
+<div class="box-tip">
+<p class="tip">
+<span class="note">Additional note:</span>
+In
+<a href="definitions.html#filled">nofill modes</a>,
+UNDERSCORE causes a break before and after, meaning the underscored
+word or phrase will appear as a separate line in your output.  If
+you wish to embed an underscored word or phrase into non-filled
+text, temporarily change to the corresponding fill mode with
+<a href="typesetting.html#quad">QUAD</a>
+and insert breaks manually with
+<a href="typesetting.html#br">BR</a>
+as appropriate, reverting to the original nofill mode afterwards.
+</p>
+</div>
+
 <h3 id="underscore-weight" class="docs">Controlling the weight of underscores</h3>
 <p>
 The weight (thickness) of underscores may be controlled with the
-macro, UNDERSCORE_WEIGHT.  Thus, if you want underscores with a
+macro UNDERSCORE_WEIGHT.  Thus, if you want underscores with a
 weight of 1-1/2 points, you&#8217;d invoke:
 <br/>
 <span class="pre-in-pp">
@@ -813,6 +855,22 @@ the macro
 (q.v).
 </p>
 
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+In
+<a href="definitions.html#filled">nofill modes</a>,
+UNDERSCORE2 causes a break before and after, meaning the double-underscored
+word or phrase will appear as a separate line in your output.  If
+you wish to embed a double-underscored word or phrase into non-filled
+text, temporarily change to the corresponding fill mode with
+<a href="typesetting.html#quad">QUAD</a>
+and insert breaks manually with
+<a href="typesetting.html#br">BR</a>
+as appropriate, reverting to the original nofill mode afterwards.
+</p>
+</div>
+
 <!-- -UNDERLINE- --> 
 <div class="macro-id-overline">
 <h3 id="underline" class="macro-id">Underline</h3>
@@ -824,11 +882,11 @@ Macro: <b>UNDERLINE</b> <kbd class="macro-args">toggle</kbd>
 
 <p>
 The distinction between underscoring and underlining is that
-underscoring is suitable for occasional effects (a word here, a word
-there), whereas underlining underlines whole passages of type.
-Furthermore, you cannot colorize underlining, and there&#8217;s a
-special macro,
-<a href="#underline-specs">UNDERLINE_SPECS</a>,
+underscoring is suitable for occasional effects (a word here,
+a phrase there), whereas underlining underlines whole passages
+of type.  Furthermore, you cannot colorize underlining, and
+there&#8217;s a special macro
+<a href="#underline-specs">UNDERLINE_SPECS</a>
 to control the weight and distance from the baseline of the
 underline.  Lastly, files that use UNDERLINE must be processed with
 <br/>
@@ -1404,7 +1462,9 @@ If your running type is
 or
 <a href="typesetting.html#ext-inline">pseudo-extended</a>
 and you want your superscripts to be equivalently pseudo-condensed
-or -extended, use <kbd>\*[CONDSUP]...\*[CONDSUPX]</kbd> or
+or -extended, use
+<br/>
+<kbd>\*[CONDSUP]...\*[CONDSUPX]</kbd> or
 <kbd>\*[EXTSUP]...\*[EXTSUPX]</kbd>.
 </p>
 
@@ -1433,7 +1493,7 @@ above the baseline.  If you&#8217;re not happy with this default,
 you can change it by invoking SUPERSCRIPT_RAISE_AMOUNT with the
 amount you want them raised.  A
 <a href="definitions.html#unitofmeasure">unit of measure</a>
-must be appended directly to the amount.  Thus, you want
+must be appended directly to the amount.  Thus, if you want
 superscripts raised by 3
 <a href="definitions.html#picaspoints">points</a>
 instead of 1/3 em, you&#8217;d do
@@ -1444,6 +1504,100 @@ instead of 1/3 em, you&#8217;d do
 and all subsequent superscripts would be raised by 3 points.
 </p>
 
+<!-- -CENTER BLOCK- -->
+
+<div class="macro-id-overline">
+<h3 id="center-block" class="macro-id">Centre blocks of type</h3>
+</div>
+
+<div class="box-macro-args">
+Macro: <b>CENTER_BLOCK</b> <kbd class="macro-args">&lt;toggle&gt;</kbd>
+</div>
+
+<p>
+Blocks of type sometimes need to be centred on the page with their quad
+direction (left, centre, right) left intact.  The
+document processing macros
+<a href="docelement.html#quote">QUOTE</a>
+and
+<a href="docelement.html#blockquote">BLOCKQUOTE</a>
+take care of this automatically, but there are other situations
+where you may want to centre blocks of type.  An example might be
+left-quadded
+<a href="docelement.html#list-intro">nested lists</a>.
+</p>
+
+<p>
+Whenever you want to centre a block of type on the page, surround it with
+<kbd>.CENTER_BLOCK/.CENTER_BLOCK OFF</kbd> (or QUIT, X, etc.).
+</p>
+
+<div class="macro-id-overline">
+<h3 id="left-hang" class="macro-id">Hanging characters</h3>
+</div>
+<br/>
+<div class="box-macro-args">
+Macro: <b>LEFT_HANG</b> <kbd class="macro-args">&lt;character&gt;</kbd>
+</div>
+
+<div class="box-macro-args" style="margin-top: 1em">
+Inline: <b>\*[HANG <kbd class="macro-args">&lt;character&gt;</kbd>]</b>
+</div>
+
+
+<p>
+LEFT_HANG hangs its argument to the left of the left margin.
+If enclosed in double-quotes, the argument may contain local
+horizontal motions.
+</p>
+
+<p>
+Input text after LEFT_HANG must begin by repeating the text of the
+argument, including horizontal motions.  If the hung character is
+a left double-quote, <kbd>\[lq]</kbd> must be used in the argument
+and the usual keyboard double-quote (<kbd>"</kbd>) used for the
+input text so as not to confuse SMARTQUOTES.
+</p>
+
+<p>
+The following example demonstrates:
+<br>
+<span class="pre-in-pp">
+  .LEFT_HANG "\[lq]\*[FU3]"
+  "\*[FU3]This line will have its opening double-quote
+  plus three kern units of space hung outside the
+  left margin."
+</span>
+</p>
+
+<p style="margin-top: -1em">
+The <kbd>\*[HANG]</kbd> inline escape hangs its single-character
+argument, typically a punctuation mark, outside the right margin of
+justified copy, like this:
+<br>
+<span class="pre-in-pp">
+  This line will have its closing period hung outside
+  the right margin\*[HANG .]
+</span>
+For the exceptionally fussy, <kbd>\*[HANG]</kbd> may also be used
+with centred text to centre the text visually without taking the
+hung punctuation into account.
+</p>
+
+<p>
+If the hung character is a right double-quote, <kbd>"\[rq]"</kbd>
+must be used as the argument (that is, the <kbd>\[rq]</kbd> character surrounded
+by double-quotes).  The double-quotes are required for all special
+characters of the form <kbd>\[xx]</kbd>.
+</p>
+
+<p>
+If the hung character is a hyphen, <kbd>\*[HANG&nbsp;-]</kbd> must
+come at the end of an
+<a href="definitions.html#inputline">input line</a>.
+All other characters may be used mid-line if groff breaks the line
+naturally at the point the hung character is introduced.
+</p>
 <div class="rule-long"><hr/></div>
 
 <!-- Navigation links -->
@@ -1461,4 +1615,3 @@ and all subsequent superscripts would be raised by 3 points.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 61b7fcbde96205037f1490a8ddf36bb6dc0ea1f0..ae8c6ea9e9de462ac118112dc09751ce10158837 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -102,7 +102,7 @@ box.
 
 <p>
 Here&#8217;s the same box, drawn with mom&#8217;s box drawing
-macro,
+macro
 <kbd><a href="#dbx">DBX</a></kbd>:
 <br/>
 <span class="pre-in-pp">
@@ -195,8 +195,8 @@ a little judicious reasoning, you&#8217;ll always remember how to
 draw graphical objects.  The &#8220;judicious reasoning&#8221; means
 that, for example, horizontal rules don&#8217;t require a depth and
 vertical rules don&#8217;t require a length.  Thus, in the case of
-drawing a horizontal rule, you supply the macro,
-<kbd><a href="#drh">DRH</a></kbd>,
+drawing a horizontal rule, you supply the macro
+<kbd><a href="#drh">DRH</a></kbd>
 with only the arguments (from the mnemonic) that apply: <b>W-I-L</b> (and
 possibly <b>C</b>).
 </p>
@@ -260,7 +260,8 @@ arguments.
 DRH is the only graphical object macro that may be invoked
 without arguments.  The weight (&#8220;thickness&#8221;) of
 the rule is determined by the argument you last gave the
-macro, <a href="inlines.html#rule-weight">RULE_WEIGHT</a>.
+macro
+<a href="inlines.html#rule-weight">RULE_WEIGHT</a>.
 DRH, used this way, is exactly equivalent to entering the
 <a href="definitions.html#inlines">inline escape</a>, <a
 href="inlines.html#inline-rule-mom"><kbd>\*[RULE]</kbd></a>.
@@ -627,4 +628,3 @@ page, either horizontal or vertical.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 3ed822e4c0ab1b1abbc219b5ba8ad49edf65e07d..13f08091c4435cddc8ec18694ca920e44f55665b 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -204,7 +204,7 @@ type selected with
 You can, however, supply whatever strings you like&mdash;including
 page numbers&mdash;to go in any part of headers.  What&#8217;s more,
 you can set the family, font, size, colour and capitalization style
-(caps or caps/lower-case) for each header part individually.
+(caps, caps/lower-case, or smallcaps) for each header part individually.
 </p>
 
 <p>
@@ -242,19 +242,19 @@ All caps     no                  no                  yes
 Size*        -.5 (points)        -.5 (points)        -2 (points)
             (-2 if all caps)    (-2 if all caps)    (-.5 if not all caps)
 
-*Relative to the point size of type in paragraphs
+*Relative to the point size of <a href="definitions.html#running">running text</a>
 </span>
 </div>
 
 <p style="margin-top: -1.5em;">
 You can, of course, change any of the defaults using the appropriate
 control macros.  And should you wish to design headers from the
-ground up, mom has a special macro,
-<a href="#hdrftr-plain">HEADER_PLAIN</a>,
-that removes all type adjustments to headers.  The straightforward
-type specs for paragraphs are used instead, providing a simple
+ground up, mom has a special macro
+<a href="#hdrftr-plain">HEADER_PLAIN</a>
+that removes all type adjustments to headers.  The
+type specs for running text are used instead, providing a simple
 reference point for any alterations you want to make to the family,
-font, size and capitalization style of any header part.
+font, size, and capitalization style of any header part.
 </p>
 
 <h3 id="vertical-spacing" class="docs">Vertical placement and spacing of headers/footers</h3>
@@ -287,11 +287,13 @@ page.
 
 <p>
 The distance between headers and the start
-of running text can be controlled with the macro,
-<a href="#hdrftr-gap">HEADER_GAP</a>
-(effectively making HEADER_MARGIN + HEADER_GAP the top margin of
+of running text can be controlled with the macro
+<a href="#hdrftr-gap">HEADER_GAP</a>,
+effectively making HEADER_MARGIN + HEADER_GAP the top margin of
 running text unless you give mom a literal top margin (with
-<a href="typesetting.html#t-margin">T_MARGIN</a>),
+<a href="typesetting.html#t-margin">T_MARGIN</a>)
+or
+<a href="typesetting.html#page">PAGE</a>,
 in which case she ignores HEADER_GAP and begins the running text at
 whatever top margin you give.
 </p>
@@ -381,9 +383,9 @@ there&#8217;s no need to turn headers off first.
 </p>
 </div>
 
-<p>
-If you need both headers and footers, there&#8217;s a special macro,
-<a href="#headers-and-footers">HEADERS_AND_FOOTERS</a>,
+<p style="margin-top: -.5em">
+If you need both headers and footers, there&#8217;s a special macro
+<a href="#headers-and-footers">HEADERS_AND_FOOTERS</a>
 that allows you to set it up.
 </p>
 
@@ -424,7 +426,7 @@ Macro: <b>HEADERS</b> <kbd class="macro-args">toggle</kbd>
 <a href="definitions.html#header">Page headers</a>
 are on by default.  If you don&#8217;t want them, turn them off by
 invoking <kbd>.HEADERS</kbd> with any argument (<b>OFF, QUIT,
-END, X...</b>), eg
+END, X...</b>), e.g.,
 <br/>
 <span class="pre-in-pp">
     .HEADERS OFF
@@ -470,7 +472,7 @@ Macro: <b>FOOTERS</b> <kbd class="macro-args">toggle</kbd>
 are off by default.  If you want them instead of
 <a href="definitions.html#header">headers</a>
 (you can&#8217;t have both), turn them on by invoking
-<kbd>.FOOTERS</kbd> without an argument, eg
+<kbd>.FOOTERS</kbd> without an argument, e.g.,
 <br/>
 <span class="pre-in-pp">
     .FOOTERS
@@ -537,7 +539,7 @@ to headers/footers) can be designed to your own specifications.
     </ul></li>
     <li><a href="#hdrftr-right">HEADER_RIGHT</a></li>
     <li><a href="#reserved-strings">Using mom&#8217;s reserved strings in header/footer definitions</a>
-        (eg <kbd>\E*[$TITLE]</kbd> when you want
+        (e.g., <kbd>\E*[$TITLE]</kbd> when you want
         the title, <kbd>\E*[$AUTHOR]</kbd> when you want the author, etc.)
     </li>
     <li><a href="#page-number-symbol">Replacing header-left, centre or right with the page number</a></li>
@@ -547,9 +549,9 @@ to headers/footers) can be designed to your own specifications.
   <ul style="margin-left: -.5em;">
     <li><a href="#hdrftr-style-global">Global changes</a>
     <ul style="margin-left: -.5em;">
+      <li><a href="#hdrftr-plain">HEADER_PLAIN</a> &ndash; disable default adjustments to header parts</li>
       <li><a href="#hdrftr-global-family">HEADER_FAMILY</a> &ndash; family for entire header</li>
       <li><a href="#hdrftr-global-size">HEADER_SIZE</a> &ndash; size for entire header</li>
-      <li><a href="#hdrftr-plain">HEADER_PLAIN</a> &ndash; disable default adjustments to header parts</li>
       <li><a href="#hdrftr-color">HEADER_COLOR</a> &ndash; colourize the header</li>
     </ul></li>
     <li><a href="#hdrftr-style-part">Part-by-part changes</a>
@@ -558,6 +560,7 @@ to headers/footers) can be designed to your own specifications.
       <li><a href="#_font">_FONT</a> &ndash; left, centre or right font</li>
       <li><a href="#_size">_SIZE</a> &ndash; left, centre or right size</li>
       <li><a href="#_caps">_CAPS</a> &ndash; left, centre or right all caps</li>
+      <li><a href="#_smallcaps">_SMALLCAPS</a> &ndash; left, centre or right smallcaps</li>
       <li><a href="#_color">_COLOR</a> &ndash; left, centre or right colour</li>
     </ul></li>
   </ul></li>
@@ -837,13 +840,34 @@ of the header at once.
 
 <div class="macro-list-container">
 <ul style="padding-top: 6px; padding-bottom: 6px; margin-left: -.5em;">
+  <li><a href="#hdrftr-plain">HEADER_PLAIN</a></li>
   <li><a href="#hdrftr-global-family">HEADER_FAMILY</a></li>
   <li><a href="#hdrftr-global-size">HEADER_SIZE</a></li>
-  <li><a href="#hdrftr-plain">HEADER_PLAIN</a></li>
   <li><a href="#hdrftr-color">HEADER_COLOR</a></li>
 </ul>
 </div>
 
+<div id="hdrftr-plain" class="box-macro-args">
+Macro: <b>HEADER_PLAIN</b>
+</div>
+
+<p>
+By default, mom makes adjustments to the font, size, and
+capitalization style of each part of headers to achieve an
+aesthetically pleasing look.  Should you wish to design your own
+headers from the ground up without worrying how changes to the
+various elements of header style interact with mom&#8217;s defaults,
+invoke <kbd>.HEADER_PLAIN</kbd> by itself, with no argument. Mom
+will disable her default behaviour for headers, and reset all
+elements of header style to the same family, font, point size and
+colour as she uses in paragraphs.
+</p>
+
+<p>
+Replace HEADER_, above, with FOOTER_ to disable mom&#8217;s default
+behaviour for the various elements of footer style.
+</p>
+
 <div id="hdrftr-global-family" class="box-macro-args">
 Macro: <b>HEADER_FAMILY</b> <kbd class="macro-args">&lt;family&gt;</kbd>
 </div>
@@ -937,27 +961,6 @@ to change the colour of the header rule.
 Replace HEADER_, above, with FOOTER_ to colourize footers.
 </p>
 
-<div id="hdrftr-plain" class="box-macro-args">
-Macro: <b>HEADER_PLAIN</b>
-</div>
-
-<p>
-By default, mom makes adjustments to the font, size, and
-capitalization style of each part of headers to achieve an
-aesthetically pleasing look.  Should you wish to design your own
-headers from the ground up without worrying how changes to the
-various elements of header style interact with mom&#8217;s defaults,
-invoke <kbd>.HEADER_PLAIN</kbd> by itself, with no argument. Mom
-will disable her default behaviour for headers, and reset all
-elements of header style to the same family, font, point size and
-colour as she uses in paragraphs.
-</p>
-
-<p>
-Replace HEADER_, above, with FOOTER_ to disable mom&#8217;s default
-behaviour for the various elements of footer style.
-</p>
-
 <h4 id="hdrftr-style-part" class="docs">3. Part by part changes</h4>
 
 <p>
@@ -972,7 +975,9 @@ appropriate.
   <li><a href="#_font">HEADER_&lt;POSITION&gt;_FONT</a></li>
   <li><a href="#_size">HEADER_&lt;POSITION&gt;_SIZE</a></li>
   <li><a href="#_caps">HEADER_&lt;POSITION&gt;_CAPS</a></li>
+  <li><a href="#_smallcaps">HEADER_&lt;POSITION&gt;_SMALLCAPS</a></li>
   <li><a href="#_color">HEADER_&lt;POSITION&gt;_COLOR</a></li>
+  <li><a href="#grouping">Grouping style parameters for the individual header/footer parts</a></li>
 </ul>
 </div>
 
@@ -1038,7 +1043,7 @@ or as defined by you with the
 simply invoke this macro (using the appropriate position) with no
 argument.  If you wish to turn capitalization off (say, for the
 header-right string that mom capitalizes by default), invoke the
-macro with any argument (eg <kbd>OFF, QUIT, END, X</kbd>...).
+macro with any argument (e.g., <kbd>OFF, QUIT, END, X</kbd>...).
 </p>
 
 <p>
@@ -1046,6 +1051,24 @@ Replace HEADER_, above, with FOOTER_ to change a footer part&#8217;s
 capitalization style.
 </p>
 
+<div id="_smallcaps" class="box-macro-args">
+Macro: <b>HEADER_&lt;POSITION&gt;_SMALLCAPS</b> <kbd class="macro-args">toggle</kbd>
+</div>
+
+<p>
+HEADER_&lt;POSITION&gt;_SMALLCAPS is a
+<a href="definitions.html#toggle">toggle macro</a>.
+If you want any part of headers to be set in smallcaps, simply
+invoke this macro (using the appropriate position) with no argument.
+If you wish to turn the smallcaps off, invoke the macro with any
+argument (e.g., <kbd>OFF, QUIT, END, X</kbd>...).
+</p>
+
+<p>
+Replace HEADER,_ above, with FOOTER_ to invoke smallcaps for footer
+parts.
+</p>
+
 <div id="_color" class="box-macro-args">
 Macro: <b>HEADER_&lt;POSITION&gt;_COLOR</b> <kbd class="macro-args">&lt;colorname&gt;</kbd>
 </div>
@@ -1092,6 +1115,45 @@ Replace HEADER_, above, with FOOTER_ to set the colours for the
 various elements of footers.
 </p>
 
+<h5 id="grouping" class="docs">Grouping style parameters for the individual header parts</h5>
+
+<p>
+Instead of using control macros for the style parameters
+of an individual header part, the parameters may be
+<a href="docelement.html#grouping">grouped</a>
+by invoking <kbd>HEADER_&lt;POSITION&gt;_STYLE</kbd> with a list of
+keyword/value pairs.  Acceptable keywords are
+<kbd>FAMILY FONT SIZE COLOR CAPS</kbd> and <kbd>SMALLCAPS</kbd>.
+Keyword/value pairs may appear on the same line as the macro, or
+separated into several lines using the backslash character
+(<kbd>\</kbd>).  If you use the latter style, all but the final
+parameter must be terminated with the backslash.
+</p>
+
+<p>
+Thus, to set the header-left part in Helvetica bold, red, 1 point larger
+than
+<a href="definitions.html#running">running text</a>
+and all caps, you could do either
+<br/>
+<span class="pre-in-pp">
+  .HEADER_LEFT_STYLE FAMILY H FONT B SIZE +1 COLOR red CAPS
+</span>
+or
+<br/>
+<span class="pre-in-pp">
+  .HEADER_LEFT_STYLE \
+   FAMILY H \
+   FONT B \
+   SIZE +1 \
+   COLOR red \
+   CAPS
+</span>
+If you need to reverse the sense of <kbd>CAPS</kbd>
+or <kbd>SMALLCAPS</kbd>, use <kbd>NO_CAPS</kbd> or
+<kbd>NO_SMALLCAPS</kbd>.
+</p>
+
 <!-- -HDRFTR_VERTICAL- -->
 
 <h4 id="hdrftr-vertical" class="docs">3. Header/footer vertical placement and spacing</h4>
@@ -1256,9 +1318,6 @@ but if you want a different gap, say, 2 centimetres, do
 <span class="pre-in-pp">
   .HEADER_GAP 2c
 </span>
-</p>
-
-<p>
 If your document uses
 <a href="definitions.html#footer">footers</a>,
 replace HEADER_, above, with FOOTER_.  The argument to FOOTER_GAP
@@ -1295,6 +1354,32 @@ the number and the first line of running text with HEADER_GAP.
 </p>
 </div>
 
+<div id="gap-note" class="box-tip">
+<p class="tip-top">
+<span class="note">Additional note:</span>
+HEADER_GAP and FOOTER_GAP may only be used once, at the start of a
+document.  In
+<a href="rectoverso.html#collate">collated documents</a>,
+this means that HEADER_GAP or FOOTER_GAP cannot be used to change
+the gaps once they have been set.  The same applies to the Table of
+Contents, Endnotes, Bibliographies, and Lists of...&nbsp;.
+</p>
+
+<p class="tip-bottom">
+In the event that you need to change the header or footer gap after
+the start of a document, you must do so with
+<a href="typesetting.html#t-margin">T_MARGIN</a>
+or
+<a href="typesetting.html#b-margin">B_MARGIN</a>,
+which raise or lower the top and bottom margins of
+<a href="definitions.html#running">running text</a>
+but do not affect the placement headers and footers.
+(See
+<a href="tables-of-contents.html#toc-page-settings-example">here</a>
+for a demonstration.)
+</p>
+</div>
+
 <!-- -HDRFTR_SEPARATOR- -->
 
 <h4 id="hdrftr-separator" class="docs">4. Header/footer separator rule</h4>
@@ -1330,7 +1415,7 @@ Macro: <b>HEADER_RULE</b> <kbd class="macro-args">toggle</kbd>
 By default, mom prints a header separator rule underneath headers
 (or above footers). If you don&#8217;t want the rule, turn it off by
 invoking <kbd>.HEADER_RULE</kbd> with any argument (<kbd>OFF, QUIT,
-END, X...</kbd>), eg
+END, X...</kbd>), e.g.,
 <br/>
 <span class="pre-in-pp">
   .HEADER_RULE OFF
@@ -1717,13 +1802,13 @@ string, use the escape sequence for the pound sign
 
 <p>
 Normally, mom prints either a header or a footer, but not both, depending on whether
-<a href="docprocessing.html#header">HEADERS</a>
+<a href="#headers">HEADERS</a>
 or
-<a href="docprocessing.html#footer">FOOTERS</a>
+<a href="#footers">FOOTERS</a>
 is enabled.  (Page numbering, whether in the top margin
 or the bottom, is not considered a header or a footer.)
 Should you need both headers and footers on the same page, the
-single macro, HEADERS_AND_FOOTERS, is the way to set it up.
+single macro HEADERS_AND_FOOTERS is the way to set it up.
 </p>
 
 <div id="headers-and-footers" class="box-macro-args">
@@ -1738,7 +1823,7 @@ Invocation:
   &lt;L | C | R&gt; "&lt;header-recto string&gt;" \
   &lt;L | C | R&gt; "&lt;footer-recto string&gt;" \
   &lt;L | C | R&gt; "&lt;header-verso string&gt;" \
-  &lt;L | C | R&gt; "&lt;header-verso string&gt;"
+  &lt;L | C | R&gt; "&lt;footer-verso string&gt;"
 </span>
 or
 <span class="pre-in-pp" style="margin-top: -.5em;">
@@ -1813,7 +1898,7 @@ to the style shown above to keep things manageable.
 <p>
 If you want to disable having both headers and footers on the same
 page, invoke <kbd>.HEADERS_AND_FOOTERS</kbd> with any argument
-you want (eg <kbd>OFF, QUIT, END, X...</kbd>). Mom will restore
+you want (e.g., <kbd>OFF, QUIT, END, X...</kbd>). Mom will restore
 her default behaviour of setting automatically generated page
 headers, with the page number, centered, at the bottom of the
 page.  If you would prefer footers instead of headers after turning
@@ -1913,8 +1998,9 @@ with control macros.
   <li><a href="#paginate">PAGINATE</a> &ndash; pagination on or off</li>
   <li><a href="#pagenumber">PAGENUMBER</a> &ndash; user-defined (starting) page number</li>
   <li><a href="#pagenum-style">PAGENUM_STYLE</a> &ndash; digits, roman numerals, etc</li>
-  <li><a href="#pagenum-on-first-page">PAGENUM_ON_FIRST_PAGE</a> &ndash; applies only when footers are enabled</li>
+  <li><a href="#pagenum-on-first-page">PAGENUM_ON_FIRST_PAGE</a> &ndash; put page number on first page when numbering is at the top of the page</li>
   <li><a href="#draft-with-pagenumber">DRAFT_WITH_PAGENUMBER</a> &ndash; attach draft/revision information to page numbers</li>
+  <li><a href="#pagenumber-string">PAGENUMBER_STRING</a> &ndash; user-defined page number string</li>
   <li><a href="#index-paginate-control">Pagination control macros and defaults</a></li>
 </ul>
 </div>
@@ -1933,7 +2019,7 @@ Macro: <b>PAGINATE</b> <kbd class="macro-args">toggle</kbd>
 By default, mom paginates documents (in the bottom margin).  If
 you&#8217;d prefer she not paginate, turn pagination off by invoking
 <kbd>.PAGINATE</kbd> with any argument (<kbd>OFF, NO, QUIT, END,
-X...</kbd>), eg
+X...</kbd>), e.g.,
 <br/>
 <span class="pre-in-pp">
   .PAGINATE NO 
@@ -2053,6 +2139,33 @@ for other ways of dealing with crowded page headers when formatting
 draft-style copy.
 </p>
 
+<!-- -PAGENUMBER_STRING- -->
+
+<div id="pagenumber-string" class="box-macro-args">
+Macro: <b>PAGENUMBER_STRING</b> "&lt;text of page number string&gt;"
+</div>
+
+<p>
+If you want page numbering to contain text in addition to the page
+number itself, use PAGENUMBER_STRING.
+</p>
+
+<p>
+The most common use for PAGENUMBER_STRING is to include the total
+number of pages along with the page number, for example
+&#8220;Page 1 of 10, Page 2 of 10...&#8221;  To accomplish this,
+you&#8217;d enter
+<br/>
+<span class="pre-in-pp">
+  .PAGENUMBER_STRING "Page \*[PAGE#] of 10"
+</span>
+Notice that the page number is entered symbolically with the
+<a href="definitions.html#inlines">inline escape</a>
+<span style="white-space:nowrap"><kbd>\*[PAGE#]</kbd>,</span>
+while the total number of pages must be entered explicitly after the
+document is complete and the total number of pages known.
+</p>
+
 <!-- -PAGINATE_CONTROL- -->
 
 <div class="macro-list-container">
@@ -2071,19 +2184,28 @@ draft-style copy.
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="docelement.html#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following control macros may also be
+<a href="docelement.html#grouping">grouped</a>
+using PAGENUMBER_STYLE.*
 </p>
 <span class="pre defaults">
-.PAGENUM_FAMILY default = prevailing document family; default is Times Roman
+.PAGENUM_FAMILY default = prevailing document family
 .PAGENUM_FONT   default = roman
-.PAGENUM_SIZE   default = 0 (ie same size as paragraph text)
+.PAGENUM_SIZE   default = +0 (ie same size as paragraph text)
 .PAGENUM_COLOR  default = black
 </span>
 </div>
 
-<h4 id="pagenum-pos" class="docs" style="margin-top: -1em;">2. Page number position</h4>
+<p style="margin-top: -2em">
+*Note: Do not confuse PAGENUMBER_STYLE with
+<a href="#pagenum-style">PAGENUM_STYLE</a>.
+</p>
+
+<h4 id="pagenum-pos" class="docs" style="margin-top: 0em;">2. Page number position</h4>
 
 <div class="box-macro-args" style="margin-top: 1em;">
-Macro: <b>PAGENUM_POS</b> <kbd class="macro-args">TOP | BOTTOM&nbsp;&nbsp;LEFT | CENTER | RIGHT</kbd>
+Macro: <b>PAGENUM_POS</b> <kbd class="macro-args">[ TOP | BOTTOM ]&nbsp;&nbsp;[ LEFT | CENTER | RIGHT ]</kbd>
 </div>
 
 <p>
@@ -2192,4 +2314,3 @@ enabled.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index fdff0c0eb12294b1860a6fc4a93abed0ae7c0743..15ecbd7f7eb3bf7705ee02bc80b3d3b0042a9891 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -58,6 +58,11 @@ FDL in the main directory of the groff source package.
   <li><a href="#floats-intro">Floats</a>
   <ul>
     <li><a href="#float">The FLOAT macro</a></li>
+    <li><a href="#float-label-caption">Labelling and captioning floats</a>
+               <ul style="margin-left: -1.25em">
+               <li><a href="#label">LABEL</a></li>
+               <li><a href="#caption">CAPTION</a></li>
+               </ul></li>
   </ul></li>
   <li><a href="#preprocessor-support">Preprocessor support</a>
   <ul>
@@ -74,11 +79,15 @@ FDL in the main directory of the groff source package.
       <li><a href="#ps-pe">.PS / .PE macros and arguments</a></li>
       <li><a href="#pic-text-style">PIC_TEXT_STYLE</a>&mdash;set parameters for text used in diagrams</li>
     </ul></li>
+    <li><a href="#grap">grap</a>
+    <ul style="margin-left: -1.25em;">
+    </ul></li>
     <li><a href="#refer">refer</a></li>
   </ul>
   <li><a href="#captions-and-labels">Captions and labels</a>
     <ul>
       <li><a href="#autolabel">AUTOLABEL</a></li>
+      <li><a href="#set-autolabel">SET_AUTOLABEL</a></li>
       <li><a href="#caption-after-label">CAPTION_AFTER_LABEL</a></li>
       <li><a href="#captions-labels-sources">CAPTIONS / LABELS / SOURCES</a>&mdash;set style parameters for each</li>
       <li><a href="#mla">MLA</a></li>
@@ -180,13 +189,13 @@ Macro: <b>PDF_IMAGE</b> <kbd class="macro-args">[ -L | -C | -R | -I &lt;indent&g
 <br/>
 &lt;image-file.pdf&gt; &lt;width&gt; &lt;height&gt; [ SCALE &lt;factor&gt; ] \
 <br/>
-[ ADJUST +|-&lt;vertical adjustment&gt; ] [ NO_SHIM ] \
+[ ADJUST +|-&lt;vertical adjustment&gt; ] [ NO_SHIM ] [ NO_FLEX ] \
 <br/>
 [ FRAME ] \
 <br/>
 [ CAPTION "&lt;caption&gt;" ] [ SHORT_CAPTION "&lt;short caption&gt;" ] \
 <br/>
-[ LABEL "&lt;label&gt;" ]</kbd>
+[ LABEL "&lt;label&gt;" ] [ TARGET "&lt;name&gt;" ]</kbd>
 </div>
 <p class="requires">
 &bull;&nbsp;<span style="font-style: normal">
@@ -284,22 +293,51 @@ optical centering between surrounding blocks of type.  A unit of
 measure is required.
 </p>
 
+<div class="box-tip">
+<p class="tip-top">
+<span class="note">Tip:</span>
+You may sometimes find that a PDF_IMAGE at the bottom of a page
+doesn&#8217;t sit flush on the bottom margin, however attempts to lower it
+by adding space beforehand result in it being deferred to the next
+page.
+</p>
+
+<p class="tip-bottom">
+The solution is to introduce <i>negative</i> space before the image
+so that it displays on the page, then lower it to the bottom margin
+with PDF_IMAGE&#8217;s ADJUST argument.
+</p>
+</div>
+
 <h5 class="docs" style="margin-top: 1em; text-transform: none">'NO_SHIM'</h5>
 
 <p>
 <kbd>NO_SHIM</kbd> instructs mom not to apply
-<a href="docprocessing.html#shim">shimming</a>
-after the image, which she does by default.  Shimming ensures that
-running text after the image falls properly on the page&#8217;s baseline
-grid, but usually results in slightly unequal spacing above and
-below, which must be corrected with the <kbd>ADJUST</kbd> argument.
-Mom&#8217;s default shimming is generally a good idea since it ensures
-properly aligned bottom margins for running text, however if you
-have several images on the page, there may be visible differences in
-the spacing beneath images.  <kbd>NO_SHIM</kbd> corrects the
-problem, but will result in running text that does not completely
-fill the page unless shimming is applied manually elsewhere on the
-same page.
+<a href="docprocessing.html#shim-vs-flex">shimming</a>
+after an image, which she will do automatically when shimming is
+enabled, which it is by default.  Shimming ensures that running text
+after the image falls properly on the page&#8217;s
+<a href="definitions.html#baseline-grid">baseline grid</a>,
+but can result in slightly unequal spacing above and below
+(correctible with the <kbd>ADJUST</kbd> argument).
+<kbd>NO_SHIM</kbd> is useful when you have several images on the
+page and there are visible differences in the spacing beneath them
+as a result of shimming.  To ensure a flush bottom margin, the last
+image on the page should be shimmed, ie should not be given the
+<kbd>NO_SHIM</kbd> argument.
+</p>
+
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'NO_FLEX'</h5>
+
+<p>
+<kbd>NO_FLEX</kbd> instructs mom not to apply
+<a href="docprocessing.html#shim-vs-flex">flex-spacing</a>
+after an image, which she will do automatically when flex-spacing is
+enabled. <kbd>NO_FLEX</kbd> is useful when you have several images
+on the page and you want to distribute excess vertical
+whitespace on the page amongst other flex-spacing points on the
+page.  If there are no others, the final image should be
+flex-spaced, ie not given the <kbd>NO_FLEX</kbd> argument.
 </p>
 
 <h5 class="docs" style="margin-top: 1em; text-transform: none">'FRAME'</h5>
@@ -341,6 +379,36 @@ an auto-labelling facility for images (see
 which, if enabled, overrides the <kbd>LABEL</kbd> argument.
 </p>
 
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'TARGET'</h5>
+
+<p>
+<kbd>TARGET</kbd> followed by a unique name surrounded by
+double-quotes creates a PDF target for the image so that it may be
+linked to from other places in the file (with PDF_LINK; see
+<a href="version-2.html#mom-pdf">Producing PDFs with groff and mom</a>).
+</p>
+
+<p>
+When
+<a href="#autolabel">autolabelling</a>
+is enabled and the document is processed with
+<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>,
+the target name can be used to generate the target&#8217;s label
+number in running text if it is entered as a groff string, ie of the
+form <kbd>\*[name]</kbd>.  For example, if you create a target named
+&#8220;foo&#8221; for a pdf image whose autolabel number would be 3,
+entering
+<br/>
+<span class="pre-in-pp">
+  See
+  .PDF_LINK foo "Figure \*[foo]"
+</span>
+anywhere in running text would result in a pdf link that reads
+&#8220;Figure 3&#8221;.  If chapter numbers are being prefixed to
+labels, the same string in, say, chapter 5 would produce the pdf
+link &#8220;Figure 5.3&#8221;.
+</p>
+
 <p>
 Remember that mom files with embedded PDF images must be processed
 with
@@ -360,10 +428,11 @@ which is to say that if an image doesn&#8217;t fit on the output
 page, she will defer it to the top of the next page while continuing
 to process
 <a href="definitions.html#running">running text</a>.
-<kbd>ADJUST</kbd> is ignored whenever an image is deferred, except
-when moving from column to column on the same page, when the image
-may need to be optically adjusted.  Subsequent images that do not
-fit, if any, are output in order immediately after the first.
+<kbd>ADJUST</kbd> is ignored whenever an image is the first to be
+deferred, except when moving from column to column on the same page,
+when the image may need to be optically adjusted.  Subsequent images
+that do not fit, if any, are output in order immediately after the
+first.
 </p>
 
 <p class="tip-bottom">
@@ -373,7 +442,7 @@ but this is now no longer required, and should, in fact, be avoided.
 </p>
 </div>
 
-<!---PDF_IMAGE_FRAME--->
+<!-- -PDF_IMAGE_FRAME- -->
 
 <div class="macro-id-overline">
 <h3 id="pdf-image-frame" class= "macro-id">PDF_IMAGE_FRAME</h3>
@@ -397,6 +466,7 @@ PDF_IMAGE_FRAME establishes the parameters for subsequent invocations of
 when the <kbd>FRAME</kbd> argument is given.  Arguments must appear
 in order, and any you wish left at the current value should be
 entered as two adjacent double-quotes.  So, for example,
+<br/>
 <span class="pre-in-pp">
   .PDF_IMAGE_FRAME "" "" blue
 </span>
@@ -460,6 +530,7 @@ and <kbd>&lt;height&gt;</kbd> arguments unless you are scaling
 the image, in which case you will most likely need the original
 dimensions of the EPS image&#8217;s bounding box.  These can be
 found with
+<br/>
 <span class="pre-in-pp">
  gs -q -dBATCH -dNOPAUSE -sDEVICE=bbox &lt;image file&gt;.pdf 2&gt;&amp;1 \
  | grep "%%BoundingBox" | cut -d " " -f4,5
@@ -486,14 +557,18 @@ correct optical centering.
 </p>
 
 <p>
-Additionally, non-floated EPS images inserted into
-<a href="definitions.html#running">running text</a>
-will almost certainly disrupt the baseline placement of running
-text.  In order to get mom back on track after inserting a
-non-floated <kbd>.PSPIC</kbd> image, I strongly recommend using the
+Additionally, non-floated EPS images
+will almost certainly disrupt the baseline placement of
+<a href="definitions.html#running">running text</a>.
+In order to get mom back on track after inserting a non-floated
+<kbd>.PSPIC</kbd> image, insert the
 <a href="docprocessing.html#shim">SHIM</a>
-macro so that the bottom margin of running text falls where it
-should.
+or
+<a href="docprocessing.html#flex">FLEX</a>
+macro afterwards, depending on the
+<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a>
+strategy in effect, so that the bottom margin of running text falls
+where it should.
 </p>
 
 <p>
@@ -548,9 +623,10 @@ previous page without interruption.
 
 <p>
 In the case of a float that doesn&#8217;t fit being followed by
-one that does, the second is output in position and the first is
-deferred.  In the case of two or more that don&#8217;t fit, they are
-output in order on the next page.
+one that does, both are deferred and output one after the other.
+Note that this represents a change from versions 2.1-b_1 and earlier
+where the second float was output in position and the first was
+deferred.
 </p>
 
 <p>
@@ -593,12 +669,13 @@ not
 Floats begin on the baseline immediately below the running text
 preceding them.  No additional whitespace surrounds them, above or
 below.  Running text below a float is, however,
-<a href="docprocessing.html#shim">shimmed</a>,
-unless shimming has been disabled with <kbd>.NO_SHIM</kbd> or the
-<kbd>NO_SHIM</kbd> argument is given to <kbd>FLOAT</kbd>.  Shimming
-generally results in a small amount of extra whitespace after the
-float, which can be equalized with the whitespace beforehand using
-the <kbd>ADJUST</kbd> argument to FLOAT.
+<a href="docprocessing.html#shim">shimmed</a>
+or
+<a href="docprocessing.html#flex">flex-spaced</a>,
+depending on the
+<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a>
+strategy in effect.  This behaviour can be disabled for individual
+floats with <kbd>NO_SHIM</kbd> or <kbd>NO_FLEX</kbd>.
 </p>
 
 <p>
@@ -616,7 +693,7 @@ or
 </div>
 
 <div class="box-macro-args">
-Macro: <b>FLOAT</b> <kbd class="macro-args">[ ADJUST +|-&lt;amount&gt; ] [ FORCE ] [ SPAN ] [ NO_SHIM] | &lt;anything&gt;</kbd>
+Macro: <b>FLOAT</b> <kbd class="macro-args">[ ADJUST +|-&lt;amount&gt; ] [ FORCE ] [ SPAN ] [ INDENT &lt;value&gt; ] [ CENTER ] [ RIGHT ] [ NO_SHIM] [ NO_FLEX ] | TARGET "&lt;name&gt;" | &lt;anything&gt;</kbd>
 </div>
 
 <div class="box-tip">
@@ -626,12 +703,41 @@ FLOAT is intended for use with the document processing macros only.
 </p>
 </div>
 
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+As a general rule, avoid consecutive floats that have no intervening
+<a href="definitions.html#running">running text</a>.
+Rather, wrap all the material into a single float.
+</p>
+</div>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+Deferred floats are output with the left indent that was in effect
+when they were input.  If you do not want this behaviour, disable
+the indent prior to inputting the float and re-enable it afterward.
+</p>
+</div>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+Mom treats <b>pic</b> pre-processor directives and pdf images as
+floats so it is not necessary to wrap them inside FLOAT unless
+additional material is included in what is floated.
+</p>
+</div>
+
 <p style="margin-top: -.5em">
 To begin a float, simply invoke <kbd>.FLOAT</kbd> and follow it with
 whatever you want the float to contain.  When you&#8217;re done,
 invoke <kbd>.FLOAT&nbsp;OFF</kbd> (or <kbd>QUIT, END, X</kbd>, etc).
 </p>
 
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'ADJUST'</h5>
+
 <p>
 The optional <kbd>ADJUST</kbd> argument tells mom to raise
 (<kbd>+</kbd>) or lower (<kbd>-</kbd>) the float <i>within
@@ -640,12 +746,21 @@ the space allotted to it</i> by the specified amount.
 <a href="definitions.html#unitofmeasure">unit of measure</a>
 appended.  <kbd>ADJUST</kbd> gives you precise control over
 the vertical centering of floats, allowing you to compensate for
-unequal spacing that may result of from the automatic shimming of
-floats (or the absence thereof).  See
-<a href="docprocessing.html#shim">SHIM</a>
-for a discussion of automatic shimming.
+unequal spacing that may result of from the automatic
+<a href="docprocessing.html#shim">shimming</a>
+or
+<a href="docprocessing.html#flex">flex-spacing</a>
+floats.
 </p>
 
+<p>
+<kbd>ADJUST</kbd> is ignored for the first float deferred to
+a following page but respected for subsequent deferred floats
+output immediately afterward.
+</p>
+
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'FORCE'</h5>
+
 <p>
 The <kbd>FORCE</kbd> argument instructs mom to output the float
 exactly where it occurs in the input file.  With <kbd>FORCE</kbd>,
@@ -656,10 +771,13 @@ page), there are circumstances where it may be desirable.
 </p>
 
 <p>
-<kbd>ADJUST</kbd> is ignored whenever a float is deferred to
-the following page.
+If you need to force a page break after completion of a float that
+has been deferred to a subsequent page, insert <kbd>\!.bp</kbd>
+immediately before terminating the float.
 </p>
 
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'SPAN'</h5>
+
 <p>
 The <kbd>SPAN</kbd> argument tells mom that a float, if deferred,
 may carry onto multiple pages.  Please note that <kbd>SPAN</kbd> may
@@ -668,22 +786,83 @@ a warning should this occur.  Unboxed tables, on the other hand, are
 acceptable within floats that are given the <kbd>SPAN</kbd> argument.
 </p>
 
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'INDENT'</h5>
+
+<p>
+<kbd>INDENT</kbd> allows you to indent a float from the left margin
+by a specified value.  The value must have a
+(<a href="definitions.html#unitofmeasure">unit of measure</a>
+appended to it.
+</p>
+
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'CENTER'</h5>
+
+<p>
+<kbd>CENTER</kbd> instructs mom to center a float if it is not
+already centered by default.
+</p>
+
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'RIGHT'</h5>
+
+<p>
+<kbd>RIGHT</kbd> instructs mom to place a float a the right of the
+page; the longest line in the float will be flush with the page's
+right margin.
+</p>
+
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'NO_SHIM'</h5>
+
 <p>
 <kbd>NO_SHIM</kbd> instructs mom not to apply
-<a href="docprocessing.html#shim">shimming</a>
-after the float, which she does by default.  Shimming ensures that
-running text after the float falls properly on the page&#8217;s baseline
-grid, but usually results in slightly unequal spacing above and
-below, which must be corrected with the <kbd>ADJUST</kbd> argument.
-Mom&#8217;s default shimming is generally a good idea since it ensures
-properly aligned bottom margins for running text, however if you
-have several floats on the page, there may be visible differences in
-the spacing beneath them.  <kbd>NO_SHIM</kbd> corrects the
-problem, but will result in running text that does not completely
-fill the page unless shimming is applied manually elsewhere on the
-same page.
+<a href="docprocessing.html#shim-vs-flex">shimming</a>
+after a float, which she will do automatically when shimming is
+enabled, which it is by default.  Shimming ensures that running text
+after the float falls properly on the page&#8217;s
+<a href="definitions.html#baseline-grid">baseline grid</a>,
+but can result in slightly unequal spacing above and below
+(correctible with the <kbd>ADJUST</kbd> argument).
+<kbd>NO_SHIM</kbd> is useful when you have several floats on the
+page and there are visible differences in the spacing beneath them
+as a result of shimming.  To ensure a flush bottom margin, the last
+float on the page should be shimmed, ie should not be given the
+<kbd>NO_SHIM</kbd> argument.
 </p>
 
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'NO_FLEX'</h5>
+
+<p>
+<kbd>NO_FLEX</kbd> instructs mom not to apply
+<a href="docprocessing.html#shim-vs-flex">flex-spacing</a>
+after a float, which she will do automatically when flex-spacing is
+enabled. <kbd>NO_FLEX</kbd> is useful when you have several floats
+on the page and you want to distribute excess vertical
+whitespace on the page amongst other flex-spacing points on the
+page.  If there are no others, the final float should be
+flex-spaced, ie not given the <kbd>NO_FLEX</kbd> argument.
+</p>
+
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'TARGET'</h5>
+
+<p>
+<kbd>TARGET</kbd> followed by a unique name surrounded by
+double-quotes creates a PDF target for the float so that it may be
+linked to from other places in the file (with PDF_LINK; see
+<a href="version-2.html#mom-pdf">Producing PDFs with groff and mom</a>).
+</p>
+
+<p>
+Floats cannot be autolabelled, so unlike pdf images and
+pre-processor material, the target name cannot be used as a string
+to generate the target&#8217;s label number in running text.  Label
+numbers for floats must be entered explicitly running text, however
+they may be entered symbolically in the argument to
+<a href="#label">LABEL</a>.
+See
+<a href="#reserved-label-strings">Reserved variables for
+labels</a>.
+</p>
+
+
 <div class="box-tip">
 <p class="tip-top">
 <span class="note">Note:</span>
@@ -691,7 +870,7 @@ Floats use
 <a href="definitions.html#filled">no-fill mode</a>,
 with each input line beginning at the left margin.  If this is not
 what you want, you must specify the preferred horizontal alignment
-<i>within the float</i> (eg
+<i>within the float</i> (e.g.,
 <a href="typesetting.html#lrc">CENTER</a>
 or
 <a href="typesetting.html#lrc">RIGHT</a>).
@@ -708,6 +887,336 @@ within the float.
 </p>
 </div>
 
+<h2 id="float-label-caption" class="docs">Labelling and captioning floats</h2>
+
+<p>
+Labelling and captioning of tables (<b>tbl</b>), equations
+(<b>eq</b>), diagrams (<b>pic</b>) and pdf images
+(<a href="#pdf-image">PDF_IMAGE</a>)
+are handled by the macros that initiate them, regardless of whether
+they&#8217;re wrapped inside a float.  However, since a float may
+contain any valid input, it is sometimes necessary to add a label
+and/or caption to the float itself.
+</p>
+
+<div class="box-tip">
+<p class="tip">
+<span class="important">Important:</span>
+Always use the native labelling/captioning facilities for
+preprocessor output and pdf images rather than labelling the
+containing float, if any.
+</p>
+</div>
+
+<p>
+The macros to label and caption floats are
+<a href="#label">LABEL</a>
+and
+<a href="#caption">CAPTION</a>.
+If a label or caption is to appear above the float, the appropriate
+macro is entered immediately after
+<a href="#float">FLOAT</a>.
+If a label or caption is to appear beneath the float, the appropriate
+macro is entered immediately before ending the float with
+<kbd>FLOAT&nbsp;OFF</kbd>.
+</p>
+
+<p>
+If a label and caption are to be joined, the <b>LABEL</b> macro is
+used to enter both by passing the <kbd>CAPTION</kbd> argument to
+<kbd>LABEL</kbd>.
+</p>
+
+<p>
+It is impossible for mom to know the contents of a float, so
+floats cannot be autolabelled.  Each label must be entered
+explicitly.  Mom does, however, provide a way to enter both
+chapter numbers and incrementing label numbers
+<a href="#reserved-label-strings">symbolically</a>,
+easing the burden of keeping the numbering scheme intact as
+labelled floats are added to or subtracted from a document.
+</p>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Tip:</span>
+<a href="docelement.html#blockquote">QUOTE</a>
+and
+<a href="docelement.html#blockquote">BLOCKQUOTE</a>
+may also be labelled and captioned using <b>LABEL</b> and
+<b>CAPTION</b>.
+</p>
+</div>
+
+<h4 class="docs">Spacing</h4>
+
+<p>
+If a float has a caption at the top, the caption is whitespaced
+1/4 linespace from running text and the float itself begins
+an additional 1/4 linespace below the caption.  If the float has
+no corresponding label at the bottom, the float observes the
+bottom-spacing rules for all floats, namely that no extra space is
+added other than
+<a href="docprocessing.html#shim">shimming</a>
+or
+<a href="docprocessing.html#shim-vs-flex">flex-spacing</a>,
+depending on the
+<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a>
+in effect.
+</p>
+
+<p>
+If a float has a label at the bottom but no caption at the top, the
+float begins exactly where started, i.e. with no extra whitespace
+between running text and the float.  The label (and attached
+caption, if any) are whitespaced 1/4 linespace below the float,
+with an additional 1/4 linespace underneath <i>plus</i> shimming or
+flex-spacing.
+</p>
+
+<p>
+Labelled/captioned quotes and blockquotes inside floats treat the
+labels/captions as part of the quote so the spacing above and
+below the whole float block is what you&#8217;d expect from quotes
+normally, while the spacing between the label/caption and the quote
+is 1/4 linespace.
+</p>
+
+<div class="macro-id-overline">
+<h3 id="label" class="macro-id">LABEL</h3>
+</div>
+
+<div class="box-macro-args">
+Macro: <b>LABEL</b></a>
+<kbd class="macro-args">"&lt;label&gt;" [ CAPTION "&lt;caption&gt;" ] [ SHORT_CAPTION ] \
+<br/>
+[ TO_LIST FIGURES | TABLES | EQUATIONS ]</kbd>
+</div>
+
+<p>
+The placement of a float&#8217;s label depends on where you put it
+inside the float.
+</p>
+
+<p>
+If you want a label at the top, put <kbd>LABEL</kbd> immediately
+underneath
+<a href="#float">FLOAT</a>
+and follow it with the text of the label surrounded by double-quotes:
+<br/>
+<span class="pre-in-pp">
+  .FLOAT
+  .LABEL "Fig. 1"
+</span>
+If you want a label at the bottom, put <kbd>LABEL</kbd> immediately
+before ending the float:
+<br/>
+<span class="pre-in-pp">
+  .FLOAT
+  &lt;contents of float&gt;
+  .LABEL "Fig. 1"
+  .FLOAT OFF
+</span>
+</p>
+
+<h3  id="reserved-label-strings" class="docs" style="text-transform: none">Reserved variables for labels</h3>
+
+<p>
+Mom reserves strings you may use when entering label text after
+the <kbd>LABEL</kbd> argument. <kbd>\*[chapter]</kbd> holds the
+current chapter or major section number. <kbd>\*[fig-label]</kbd>,
+<kbd>\*[tbl-label]</kbd>, and <kbd>\*[eqn-label]</kbd>
+increment the label number of the appropriate label type by one,
+and are initially set to zero after each invocation of
+<a href="docprocessing.html#start">START</a>
+when the
+<a href="docprocessing.html#doctype">DOCTYPE</a>
+is <kbd>CHAPTER</kbd>.  Thus, in every chapter requiring numbered
+float labels, you can enter
+<br/>
+<span class="pre-in-pp">
+  .LABEL "Fig. \*[chapter].\*[fig-label]. TO_LIST FIGURES
+</span>
+which, assuming the third autolabelled float of Chapter 2, will
+produce <kbd>Fig. 2.3.</kbd>
+</p>
+
+<p>
+If your <b>DOCTYPE</b> is <kbd>DEFAULT</kbd> or <kbd>NAMED</kbd>,
+you must reset <kbd>\*[&lt;type&gt;-label]</kbd> after each
+<a href="docprocessing.html#collate">COLLATE</a>
+by entering
+<br/>
+<span class="pre-in-pp">
+  .AUTOLABEL_&lt;list type&gt;
+</span>
+before <kbd>.START</kbd>.
+</p>
+
+<p>
+If
+<a href="#autolabel">autolabelling</a>
+is enabled, e.g., <kbd>.AUTOLABEL_IMAGES</kbd> (List
+of Figures) or <kbd>.AUTOLABEL_PIC</kbd> (also List of Figures),
+the prefix is stripped from the label when it appears in
+the List.  Thus, if you have invoked <kbd>.AUTOLABEL_PIC</kbd>,
+<br/>
+<span class="pre-in-pp">
+  .LABEL "Fig. 1.1."
+   CAPTION "Caption for label \
+   TO_LIST FIGURES
+</span>
+or
+<br/>
+<span class="pre-in-pp">
+  .LABEL "Fig. \*[chapter].\*[label]." \
+   CAPTION "Caption for label \
+   TO_LIST FIGURES
+</span>
+will appear in the List of Figures as &#8220;1.1.&nbsp;&nbsp;Caption for
+label&#8221;.
+</p>
+
+<h3 class="docs">CAPTION</h3>
+
+<p>
+If you&#8217;d like a caption attached to the label, pass
+<kbd>LABEL</kbd> the optional argument <kbd>CAPTION</kbd> followed
+by the text of the caption as a single string surrounded by
+double-quotes:
+<br/>
+<span class="pre-in-pp">
+  .FLOAT
+  &lt;contents of float&gt;
+  .LABEL "Fig. 1" CAPTION "Caption for Fig. 1"
+  .FLOAT OFF
+</span>
+Note that the
+<a href="#caption">CAPTION</a>
+macro by itself permits entering several strings, each output on
+a line by itself, whereas the <kbd>CAPTION</kbd> argument to
+<kbd>LABEL</kbd> accepts only a single string.
+</p>
+
+<h3 class="docs">SHORT_CAPTION</h3>
+
+<p>
+If your caption runs long and you&#8217;re including the
+float in a &#8220;List of ...&#8221;, (see
+<a href="#list-of">TO_LIST</a>, below)
+<kbd>SHORT_CAPTION</kbd> tells
+mom how you&#8217;d like the caption to appear in the List.
+</p>
+
+<h3 class="docs">TO_LIST</h3>
+
+<p>
+The optional argument <kbd>TO_LIST</kbd> tells mom to add the
+float&#8217;s label and attached caption, if present, to the specified
+<a href="#lists-of">list</a>,
+which may be one of <kbd>FIGURES</kbd>, <kbd>TABLES</kbd>, or
+<kbd>EQUATIONS</kbd>.
+</p>
+
+<p>
+If, for some reason, you want only the caption appended to the List,
+give <kbd>\&</kbd> as the first argument to LABEL, followed by
+<kbd>CAPTION&nbsp;&#8220;caption&#8221;</kbd>:
+<br/>
+<span class="pre-in-pp">
+  .LABEL \& \
+   CAPTION "caption"
+</p>
+
+<div class="box-tip">
+<p class="tip-top">
+<span class="note">Tip:</span>
+<kbd>TO_LIST</kbd> can be used to handle situations where labelled
+floats need to go to a uniquely named &#8220;List of ...&#8221;.
+</p>
+
+<p class="tip-bottom">
+Suppose, for example, your document contains figures (e.g.
+<b>pic</b> output or pdf-images) and tables, and you need a
+&#8220;List of Examples&#8221; for floats labelled &#8220;Example
+n.n&#8221;.  By changing the default title string for
+<a href="#lists-macros">LIST_OF_EQUATIONS</a>
+to &#8220;List of Examples&#8221;, you may include the float in your
+List of Examples with
+<br/>
+<span class="pre-in-pp">
+  .TO_FIGURES EQUATIONS
+</p>
+</div>
+
+<div class="macro-id-overline">
+<h3 id="caption" class="macro-id">CAPTION</h3>
+</div>
+
+<div class="box-macro-args">
+Macro: <b>CAPTION</b></a>
+<kbd class="macro-args">"&lt;caption&gt;" \
+<br/>
+[ "&lt;additional line&gt;" [ "&lt;additional line&gt;"... ] ] \
+<br/>
+[ TO_LIST FIGURES | TABLES | EQUATIONS ]</kbd>
+</div>
+
+<p>
+The placement of a float&#8217;s caption depends on where you put it
+inside the float.
+</p>
+
+<p>
+If you want a caption at the top, put <kbd>CAPTIO</kbd> immediately
+underneath
+<a href="#float">FLOAT</a>
+and follow it with the text of the caption surrounded by double-quotes:
+<br/>
+<span class="pre-in-pp">
+  .FLOAT
+  .CAPTION "Caption at top of float"
+</span>
+<b>CAPTION</b> can take multiple string arguments, allowing for
+captions that run to several lines.  There is a caveat: the strings
+are not automatically broken into individual lines.  You must
+provide strings that include literal breaks or spaces:
+<br/>
+<span class="pre-in-pp">
+  .FLOAT
+  .CAPTION "Caption" ".BR" "at top" ".BR" "of float"
+</span>
+or, easier to read:
+<br/>
+<span class="pre-in-pp">
+  .FLOAT
+  .CAPTION "Caption" \
+  ".BR" \
+  "at top" \
+  ".BR" \
+  "of float"
+</span>
+If you want a caption at the bottom, put <kbd>CAPTION</kbd> immediately
+before ending the float:
+<br/>
+<span class="pre-in-pp">
+  .FLOAT
+  &lt;contents of float&gt;
+  .CAPTION "Caption at bottom of float"
+  .FLOAT OFF
+</span>
+</p>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+If you want a caption attached to a label, do not use
+<b>CAPTION</b> by itself.  Rather, invoke
+<a href="#label"><kbd>.LABEL</kbd></a>
+with the <kbd>CAPTION</kbd> argument.
+</p>
+</div>
+
 <div class="rule-medium"><hr/></div>
 
 <h2 id="preprocessor-support" class="docs">Preprocessor support</h2>
@@ -746,7 +1255,8 @@ preprocessor, <b>tbl</b>.  If you are unfamiliar with <b>tbl</b>, I
 recommend downloading a copy of
 <a href="http://plan9.bell-labs.com/10thEdMan/tbl.pdf">Tbl - A Program to Format Tables</a>,
 which, in addition to providing a thorough introduction, contains
-some fine examples.
+some fine examples.  If you use <b>tbl</b>, you must pass groff or
+pdfmom the <b>-t</b> flag when you process the file.
 </p>
 
 <p>
@@ -773,12 +1283,12 @@ and do not wrap the table inside a float.
 <div class="box-tip">
 <p class="tip">
 <span class="note">Note:</span>
-If you use <kbd>.TS H</kbd> to create a boxed table that spans
-multiple pages, do not attempt to wrap the table inside a float.
-For the purposes of boxed, multipage tables, <kbd>.TS H</kbd> and
-<kbd>.FLOAT</kbd> should be considered mutually exclusive.  This
-restriction is imposed by the <kbd>tbl</kbd> preprocessor itself,
-not groff or mom.
+If you create a boxed table that will span several pages, do not
+wrap the table inside a float.  Boxed, multipage tables and FLOAT
+should be considered mutually exclusive.  This restriction is
+imposed by the <kbd>tbl</kbd> preprocessor itself, not groff or
+mom.  Unboxed tables that span several pages, however, are
+acceptable within FLOAT.
 </p>
 </div>
 
@@ -789,7 +1299,7 @@ If you use <kbd>.TS</kbd> without the <kbd>H</kbd> argument (and
 therefore no <kbd>.TH</kbd>), tables that fit on the page are output
 in position.  If there is not enough room to output the table,
 <kbd>tbl</kbd> will abort with message instructing you to use
-<kbd>.TS H/.TH</kbd>.  Given that <kbd>.TS</kbd> without <kbd>TH</kbd>
+<kbd>.TS H/.TH</kbd>.  Given that <kbd>.TS</kbd> without <kbd>H</kbd>
 may sometimes fail, it is advisable to begin all <b>tbl</b> blocks
 with <kbd>.TS H</kbd>.
 </p>
@@ -827,14 +1337,22 @@ Unboxed tables inside floats may span multiple pages provided the
 <span class="note">Note:</span>
 The vertical spacing around unfloated tables may appear slightly
 unequal, especially if there are several tables on the page.  This
-is a result of
+is a result of the
 <a href="docprocessing.html#shim">shimming</a>
-that mom applies automatically after each table.  You may
-disable shimming with <kbd>.NO_SHIM</kbd>, or by giving the
-<kbd>NO_SHIM</kbd> argument to <kbd>.TS</kbd>.  In either case, you
-will still likely want to adjust the spacing around with table with
-the <kbd>AJUST</kbd> argument to <kbd>.TS</kbd>.  Tables inside
-floats should be adjusted with the <kbd>ADJUST</kbd> argument to
+or
+<a href="docprocessing.html#flex">flex-spacing</a>
+that mom applies automatically after each table, depending on which
+<a href="docprocessing.html#vertical-whitespace-management">vertical whitespace management</a>
+is in effect.  You may
+disable shimming or flex-spacing with
+<a href="docprocessing.html#no-shim">NO_SHIM</a>
+or
+<a href="docprocessing.html#no-flex">NO_FLEX</a>,
+or by passing the <kbd>NO_SHIM</kbd> or <kbd>NO_FLEX</kbd> argument
+to <kbd>.TS</kbd>.  In either case, you will still likely want to
+adjust the spacing around with table with the <kbd>AJUST</kbd>
+argument to <kbd>.TS</kbd>.  Tables inside floats should be adjusted
+with the <kbd>ADJUST</kbd> argument to
 <a href="#float">FLOAT</a>,
 not the <kbd>ADJUST</kbd> argument to <kbd>.TS</kbd>.
 </p>
@@ -865,11 +1383,15 @@ required)
 <kbd class="macro-args"><br/>
 &nbsp;&nbsp;[ NO_SHIM ]
 <br/>
+&nbsp;&nbsp;[ NO_FLEX ]
+<br/>
 &nbsp;&nbsp;[ CAPTION "&lt;caption&gt;" ]
 <br/>
 &nbsp;&nbsp;[ SHORT_CAPTION "&lt;short caption&gt;" ]
 <br/>
 &nbsp;&nbsp;[ LABEL "&lt;label&gt;" ]
+<br/>
+&nbsp;&nbsp;[ TARGET "&lt;name&gt;" ]
 </kbd>
 <br/>
 Macro: <a href="#th"><b>TH</b></a> <kbd class="macro-args">(optional, only if .TS H)</kbd>
@@ -1042,30 +1564,44 @@ number of rows.
 <h5 class="docs" style="margin-top: 1em; text-transform: none">'ADJUST'</h5>
 
 <p>
-<kbd>ADJUST</kbd> lets you raise (<kbd>+</kbd>) or lower (<kbd>-</kbd>) the image
-<span style="font-style: italic">within the space allotted for it</span>
-by the amount you specify.  This is useful for achieving good
-optical centering between surrounding blocks of type.  A unit of
-measure is required.
+<kbd>ADJUST</kbd> lets you raise (<kbd>+</kbd>) or lower
+(<kbd>-</kbd>) the table <span style="font-style: italic">within
+the space allotted for it</span> by the amount you specify.  This
+is useful for achieving good optical centering between surrounding
+blocks of type.  A unit of measure is required.
 </p>
 
 <h5 class="docs" style="margin-top: 1em; text-transform: none">'NO_SHIM'</h5>
 
 <p>
 <kbd>NO_SHIM</kbd> instructs mom not to apply
-<a href="docprocessing.html#shim">shimming</a>
-after the image, which she does by default.  Shimming ensures that
-running text after the image falls properly on the page&#8217;s baseline
-grid, but usually results in slightly unequal spacing above and
-below, which must be corrected with the <kbd>ADJUST</kbd> argument.
-Mom&#8217;s default shimming is generally a good idea since it ensures
-properly aligned bottom margins for running text, however if you
-have several images on the page, there may be visible differences in
-the spacing beneath images.  <kbd>NO_SHIM</kbd> corrects the
-problem, but will result in running text that does not completely
-fill the page unless shimming is applied manually elsewhere on the
-same page.
+<a href="docprocessing.html#shim-vs-flex">shimming</a>
+after a table, which she will do automatically when shimming is
+enabled, which it is by default.  Shimming ensures that running text
+after the table falls properly on the page&#8217;s
+<a href="definitions.html#baseline-grid">baseline grid</a>,
+but can result in slightly unequal spacing above and below
+(correctible with the <kbd>ADJUST</kbd> argument).
+<kbd>NO_SHIM</kbd> is useful when you have several tables on the
+page and there are visible differences in the spacing beneath them
+as a result of shimming.  To ensure a flush bottom margin, the last
+table on the page should be shimmed, ie should not be given the
+<kbd>NO_SHIM</kbd> argument.
+</p>
+
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'NO_FLEX'</h5>
+
+<p>
+<kbd>NO_FLEX</kbd> instructs mom not to apply
+<a href="docprocessing.html#shim-vs-flex">flex-spacing</a>
+after a table, which she will do automatically when flex-spacing is
+enabled. <kbd>NO_FLEX</kbd> is useful when you have several tables
+on the page and you want to distribute excess vertical
+whitespace on the page amongst other flex-spacing points on the
+page.  If there are no others, the final table should be
+flex-spaced, ie not given the <kbd>NO_FLEX</kbd> argument.
 </p>
+
 <h5 class="docs" style="margin-top: 1em; text-transform: none">'CAPTION'</h5>
 
 <p>
@@ -1104,6 +1640,36 @@ an auto-labelling facility for tables (see
 which, if enabled, overrides the <kbd>LABEL</kbd> argument.
 </p>
 
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'TARGET'</h5>
+
+<p>
+<kbd>TARGET</kbd> followed by a unique name surrounded by
+double-quotes creates a PDF target for the table so that it may be
+linked to from other places in the file (with PDF_LINK; see
+<a href="version-2.html#mom-pdf">Producing PDFs with groff and mom</a>).
+</p>
+
+<p>
+When
+<a href="#autolabel">autolabelling</a>
+is enabled and the document is processed with
+<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>,
+the target name can be used to generate the target&#8217;s label
+number in running text if it is entered as a groff string, ie of
+the form <kbd>\*[name]</kbd>.  For example, if you create a target
+called &#8220;foo&#8221; for a table whose autolabel number would be
+3, entering
+<br/>
+<span class="pre-in-pp">
+  See
+  .PDF_LINK foo "Table \*[foo]"
+</span>
+anywhere in running text would result in a pdf link that reads
+&#8220;Table 3&#8221;.  If chapter numbers are being prefixed to
+labels, the same string in, say, chapter 5 would produce the pdf
+link &#8220;Table 5.3&#8221;.  
+</p>
+
 <div class="macro-id-overline">
 <h4 id="th" class="docs" style="font-size: 100%; margin-top: .5em">The .TH macro</h4>
 </div>
@@ -1144,11 +1710,9 @@ which, as of version 2.0-c, takes a single, optional argument,
 <kbd>SOURCE</kbd>.  (Formerly, <kbd>TE</kbd> took a label/caption
 argument along with arguments controlling placement.)  The argument
 is followed by the text of the table&#8217;s source, surrounded by
-double-quotes.  The source will appear immediately beneath the label
-and/or caption underneath the table, or, if
+double-quotes.  The SOURCE argument may only be used if
 <a href="#mla">MLA</a>
-(Modern Language Association) is enabled, immediately below the
-table.
+(Modern Language Association) style is enabled.
 </p>
 
 <div class="rule-medium"><hr/></div>
@@ -1161,6 +1725,9 @@ preprocessor, <b>pic</b>.  If you are unfamiliar with <b>pic</b>, I
 recommend downloading a copy of
 <a href="http://www.kohala.com/start/troff/gpic.raymond.ps">Making Pictures with GNU PIC</a>
 which provides a thorough introduction and contains many examples.
+If you use <b>pic</b>, you must pass groff or pdfmom the <b>-p</b>
+flag when you process the file.
+
 </p>
 
 <p>
@@ -1194,7 +1761,7 @@ fit, if any, are output in order immediately after the first.
 <p>
 Lastly, if your diagrams contain text, you may set all the type
 parameters for the text (family, font, size, leading) separately
-from the <b>pic</b> block with the macro,
+from the <b>pic</b> block with the macro
 <a href="#pic-text-style">PIC_TEXT_STYLE</a>.
 If you need to change the type parameters within the block
 on-the-fly, you must use <b>pic</b>&#8217;s native facilities for
@@ -1224,11 +1791,15 @@ required)
 <kbd class="macro-args"><br/>
 &nbsp;&nbsp;[ NO_SHIM ]
 <br/>
+&nbsp;&nbsp;[ NO_FLEX ]
+<br/>
 &nbsp;&nbsp;[ CAPTION "&lt;caption&gt;" ]
 <br/>
 &nbsp;&nbsp;[ SHORT_CAPTION "&lt;short caption&gt;" ]
 <br/>
 &nbsp;&nbsp;[ LABEL "&lt;label&gt;" ]
+<br/>
+&nbsp;&nbsp;[ TARGET "&lt;name&gt;" ]
 </kbd>
 <br/>
 Macro: <b>PE</b> <span style="font-size: 95%">(no arguments; ends
@@ -1275,18 +1846,31 @@ measure is required.
 
 <p>
 <kbd>NO_SHIM</kbd> instructs mom not to apply
-<a href="docprocessing.html#shim">shimming</a>
-after the diagram, which she does by default.  Shimming ensures that
-running text after the diagram falls properly on the page&#8217;s baseline
-grid, but usually results in slightly unequal spacing above and
-below, which must be corrected with the <kbd>ADJUST</kbd> argument.
-Mom&#8217;s default shimming is generally a good idea since it ensures
-properly aligned bottom margins for running text, however if you
-have several diagrams on the page, there may be visible differences in
-the spacing beneath them.  <kbd>NO_SHIM</kbd> corrects the
-problem, but will result in running text that does not completely
-fill the page unless shimming is applied manually elsewhere on the
-same page.
+<a href="docprocessing.html#shim-vs-flex">shimming</a>
+after a <b>pic</b> diagrame, which she will do automatically when
+shimming is enabled, which it is by default.  Shimming ensures that
+running text after the diagrame falls properly on the page&#8217;s
+<a href="definitions.html#baseline-grid">baseline grid</a>,
+but can result in slightly unequal spacing above and below
+(correctible with the <kbd>ADJUST</kbd> argument).
+<kbd>NO_SHIM</kbd> is useful when you have several diagrams on the
+page and there are visible differences in the spacing beneath them
+as a result of shimming.  To ensure a flush bottom margin, the last
+diagram on the page should be shimmed, ie should not be given the
+<kbd>NO_SHIM</kbd> argument.
+</p>
+
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'NO_FLEX'</h5>
+
+<p>
+<kbd>NO_FLEX</kbd> instructs mom not to apply
+<a href="docprocessing.html#shim-vs-flex">flex-spacing</a>
+after a <b>pic</b> diagram, which she will do automatically when
+flex-spacing is enabled. <kbd>NO_FLEX</kbd> is useful when you
+have several diagrams on the page and you want to distribute excess
+vertical whitespace on the page amongst other flex-spacing points
+on the page.  If there are no others, the final diagram should be
+flex-spaced, ie not given the <kbd>NO_FLEX</kbd> argument.
 </p>
 
 <h5 class="docs" style="margin-top: 1em; text-transform: none">'CAPTION'</h5>
@@ -1320,6 +1904,36 @@ an auto-labelling facility for diagrams (see
 which, if enabled, overrides the <kbd>LABEL</kbd> argument.
 </p>
 
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'TARGET'</h5>
+
+<p>
+<kbd>TARGET</kbd> followed by a unique name surrounded by
+double-quotes creates a PDF target for the diagram so that it may be
+linked to from other places in the file (with PDF_LINK; see
+<a href="version-2.html#mom-pdf">Producing PDFs with groff and mom</a>).
+</p>
+
+<p>
+When
+<a href="#autolabel">autolabelling</a>
+is enabled and the document is processed with
+<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>,
+the target name can be used to generate the target&#8217;s label
+number in running text if it is entered as a groff string, ie of
+the form <kbd>\*[name]</kbd>.  For example, if you create a target
+called &#8220;foo&#8221; for a diagram whose autolabel number would
+be 3, entering
+<br/>
+<span class="pre-in-pp">
+  See
+  .PDF_LINK foo "Figure \*[foo]"
+</span>
+anywhere in running text would result in a pdf link that reads
+&#8220;Figure 3&#8221;.  If chapter numbers are being prefixed to
+labels, the same string in, say, chapter 5 would produce the pdf
+link &#8220;Figure 5.3&#8221;.
+</p>
+
 <!---PIC_TEXT_STYLE--->
 
 <div class="macro-id-overline">
@@ -1373,6 +1987,37 @@ preprocessor itself, not groff or mom.
 
 <div class="rule-medium"><hr/></div>
 
+<h3 id="grap" class="docs">grap support</h3>
+
+<p>
+Grap is a <b>pic</b> preprocessor for creating graphs.  Grap
+usage is covered in the <kbd>grap(1)</kbd> manpage.  Its mom
+implementation is the same as for <b>pic</b> except that instead of
+enclosing directives between
+<a href="#ps-pe">.PS&nbsp;/&nbsp;.PE</a>,
+they are enclosed between <b>.G1/.G2</b>.  If you use <b>grap</b>,
+you must pass groff or pdfmom the <b>-G</b> flag when you process
+the file.
+
+</p>
+
+<p>
+<b>.G1</b> takes all the same arguments as
+<a href="#ps-pe">PS</a>
+with one exception: the argument <b>GRAP</b> must always be given to
+<b>.G1</b>.  So, for example, a skeleton grap block raised 2 points
+and with a caption would be entered:
+<br/>
+<span class="pre-in-pp">
+  .G1 GRAP ADJUST +2p CAPTION "Graph caption"
+  &lt;grap directives&gt;
+  .G2
+</span>
+
+</p>
+
+<div class="rule-medium"><hr/></div>
+
 <h3 id="eqn" class="docs">eqn support</h3>
 
 <p>
@@ -1383,7 +2028,9 @@ the scope of this documentation, but is covered in the manpage
 Harding&#8217;s
 <!--- edit me -->
 <a href="http://www.zen89632.zen.co.uk/Groff/Eqn/eqnguide.pdf">A Guide to Typesetting Mathematics Using GNU eqn</a>,
-which contains useful examples.
+which contains useful examples.  If you use <b>eqn</b>, you must give groff or
+pdfmom the <b>-e</b> flag.
+
 </p>
 
 <div class="macro-id-overline">
@@ -1407,6 +2054,10 @@ required)
 required)
 </span>
 <kbd class="macro-args"><br/>
+&nbsp;&nbsp;[ NO_SHIM ]
+<br/>
+&nbsp;&nbsp;[ NO_FLEX ]
+<br/>
 &nbsp;&nbsp;[ CAPTION "&lt;caption&gt;" ]
 <br/>
 &nbsp;&nbsp;[ LABEL "&lt;label&gt;" ]
@@ -1415,6 +2066,8 @@ required)
 <br/>
 &nbsp;&nbsp;[ SHORT_CAPTION "&lt;short caption&gt;" ]
 <br/>
+&nbsp;&nbsp;[ TARGET "&lt;name&gt;" ]
+<br/>
 Macro: <a href="#en"><b>EN</b></a> <kbd class="macro-args"> [ CONTINUED | CONT | ... ]</kbd>
 </div>
 
@@ -1473,18 +2126,31 @@ measure is required.
 
 <p>
 <kbd>NO_SHIM</kbd> instructs mom not to apply
-<a href="docprocessing.html#shim">shimming</a>
-after the equation, which she does by default.  Shimming ensures that
-running text after the equation falls properly on the page&#8217;s baseline
-grid, but usually results in slightly unequal spacing above and
-below, which must be corrected with the <kbd>ADJUST</kbd> argument.
-Mom&#8217;s default shimming is generally a good idea since it ensures
-properly aligned bottom margins for running text, however if you
-have several equations on the page, there may be visible differences in
-the spacing beneath them.  <kbd>NO_SHIM</kbd> corrects the
-problem, but will result in running text that does not completely
-fill the page unless shimming is applied manually elsewhere on the
-same page.
+<a href="docprocessing.html#shim-vs-flex">shimming</a>
+after an equation, which she will do automatically when shimming is
+enabled, which it is by default.  Shimming ensures that running text
+after the equation falls properly on the page&#8217;s
+<a href="definitions.html#baseline-grid">baseline grid</a>,
+but can result in slightly unequal spacing above and
+below (correctible with the <kbd>ADJUST</kbd> argument).
+<kbd>NO_SHIM</kbd> is useful when you have several equations on the
+page and there are visible differences in the spacing beneath them
+as a result of shimming.  To ensure a flush bottom margin, the last
+equation on the page should be shimmed, ie should not be given the
+<kbd>NO_SHIM</kbd> argument.
+</p>
+
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'NO_FLEX'</h5>
+
+<p>
+<kbd>NO_FLEX</kbd> instructs mom not to apply
+<a href="docprocessing.html#shim-vs-flex">flex-spacing</a>
+after an equation, which she will do automatically when flex-spacing
+is enabled. <kbd>NO_FLEX</kbd> is useful when you have several
+equations on the page and you want to distribute excess vertical
+whitespace on the page amongst other flex-spacing points on
+the page.  If there are no others, the final equation should be
+flex-spaced, ie not given the <kbd>NO_FLEX</kbd> argument.
 </p>
 
 </p>
@@ -1527,6 +2193,37 @@ with the last line.  Assuming a three-line equation,
 one line, thus centering it vertically on the equation.
 </p>
 
+<h5 class="docs" style="margin-top: 1em; text-transform: none">'TARGET'</h5>
+
+<p>
+<kbd>TARGET</kbd> followed by a unique name surrounded by
+double-quotes creates a PDF target for the equation so that it may
+be linked to from other places in the file (with PDF_LINK; see
+<a href="version-2.html#mom-pdf">Producing PDFs with groff and mom</a>).
+</p>
+
+<p>
+When
+<a href="#autolabel">autolabelling</a>
+is enabled and the document is processed with
+<a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>,
+the target name can be used to generate the target&#8217;s label
+number in running text if it is entered as a groff string, ie of
+the form <kbd>\*[name]</kbd>.  For example, if you create a target
+called &#8220;foo&#8221; for an equation whose autolabel number
+would be 3, entering
+<br/>
+<span class="pre-in-pp">
+  See
+  .PDF_LINK foo "Equation \*[foo]"
+</span>
+anywhere in running text would result in a pdf link that reads
+&#8220;Equation 3&#8221;.  If chapter numbers are being prefixed to
+labels, the same string in, say, chapter 5 would produce the pdf
+link &#8220;Equation 5.3&#8221;.
+</p>
+
+
 <div class="macro-id-overline" style="margin-top: .5em">
 <h4 id="en" class="docs" style="font-size: 100%; margin-top: .5em">The .EN macro</h4>
 </div>
@@ -1601,7 +2298,7 @@ pdf images) and tables.  This behaviour may be modified with the
 macro
 <a href="#caption-after-label">CAPTION_AFTER_LABEL</a>.
 Equations always have their captions set underneath.  All aspects of
-the text style for captions may be set with the macro,
+the text style for captions may be set with the macro
 <a href="#captions-labels-sources">CAPTIONS</a>.
 </p>
 
@@ -1613,10 +2310,10 @@ above the table, per MLA style, and the source for the table, if
 any, appears underneath.  Labels for figures are set underneath.
 Equation labels, by default, are set on the same baseline as the
 last line of the equation.  Like captions, all aspects of text style
-for labels may be established with a single macro,
-<a href="#labels">LABELS</a>.  Furthermore, mom can autolabel
-figures, tables, and equations, with or without a prefixed chapter
-number.
+for labels may be established with a single macro
+<a href="#labels">LABELS</a>.
+Furthermore, mom can autolabel figures, tables, and equations, with
+or without a prefixed chapter number.
 </p>
 
 <div class="macro-id-overline">
@@ -1642,33 +2339,64 @@ Macro: <b>AUTOLABEL_TABLES</b>
 <b>AUTOLABEL_&lt;type&gt;</b> takes care of labelling &lt;type&gt; by
 identifying each with a separate, incrementing numeric scheme, which
 is also collected for output in Lists of Figures, Equations, and
-Tables.  By default, the label numbers are prefixed, and, in the
-case of equations, suffixed, with strings such that they appear for
-tables as &#8220;Table &lt;n&gt;&#8221;, for <b>pic</b> diagrams and
-pdf images as &#8220;Fig. &lt;n&gt;&#8221;, and for equations as
-&#8220;(&lt;n&gt;)&#8221;.
+Tables.
 </p>
 
 <p>
-Use <kbd>PREFIX&nbsp;&lt;"string"&gt;</kbd> to change what comes
-before the automatic numbering.  For example, if you are including
-musical excerpts in your document, MLA style requires that they be
-labelled &#8220;Ex.&nbsp;&lt;n&gt;&#8221;.  Since musical excerpts
-are likely to be scanned images (in pdf format, don&#8217;t forget),
-you have to change the prefix string for pdf images:
+Autolabelling may be disabled on-the-fly by giving any argument
+other than <kbd>PREFIX</kbd>, <kbd>SUFFIX</kbd>, or
+<kbd>PREFIX_CHAPTER</kbd> to the appropriate macro.  For example,
+</br>
+<span class="pre-in-pp">
+  .AUTOLABEL_IMAGES NO
+</span>
+would disable autolabelling of images.
+</p>
+
+<h4 class="docs" style="margin-top: -.5em">Prefixes and suffixes</h4>
+
+<p>
+By default, when <b>AUTOLABEL</b> is enabled, the label numbers are
+prefixed, and, in the case of equations, suffixed, with strings such
+that they appear for tables as &#8220;Table &lt;n&gt;&#8221;, for
+<b>pic</b> diagrams and pdf images as &#8220;Fig. &lt;n&gt;&#8221;,
+and for equations as &#8220;(&lt;n&gt;)&#8221;.
+</p>
+
+<p>
+You can use <kbd>PREFIX&nbsp;&lt;"string"&gt;</kbd> to change what
+comes before the automatic numbering.  For example, if you are
+including musical excerpts in your document, MLA style requires that
+they be labelled &#8220;Ex.&nbsp;&lt;n&gt;&#8221;.  Since musical
+excerpts are likely to be scanned images (in pdf format, don&#8217;t
+forget), you have to change the prefix string for pdf images:
 <br/>
 <span class="pre-in-pp">
-  .AUTOLABEL_IMAGES PREFIX "Ex. "
+  .AUTOLABEL_IMAGES \
+   PREFIX "Ex. " \
+   SUFFIX ""
 </span>
 If you need a suffix after the automatic numbering, use
 <kbd>SUFFIX&nbsp;&lt;"string"&gt;</kbd>, like this:
 <br/>
 <span class="pre-in-pp">
-  .AUTOLABEL_IMAGES PREFIX "(Fig. " SUFFIX ")"
+  .AUTOLABEL_IMAGES \
+   PREFIX "(Fig. " \
+   SUFFIX ")"
 </span>
-Note that the double-quotes around the single-character SUFFIX
-string are optional.
+Note from the above that both arguments, <kbd>PREFIX</kbd> and
+<kbd>SUFFIX</kbd>, are required should you want either.  Two
+adjacent double-quotes leaves the string blank.
+</p>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+In automatically formatted
+<a href="#lists-macros">&#8220;Lists of ...&#8221;</a>,
+label number prefixes are stripped when autolabelling is enabled.
 </p>
+</div>
 
 <h4 class="docs" style="margin-top: -.5em">Prefixing chapter numbers</h4>
 
@@ -1679,13 +2407,58 @@ pass <kbd>AUTOLABEL_&lt;type&gt;</kbd> the argument
 </p>
 
 <p>
-If you have not given mom a <kbd>CHAPTER&nbsp;&lt;n&gt;</kbd> prior
-to invoking <kbd>AUTOLABEL_&lt;type&gt;&nbsp;PREFIX_CHAPTER</kbd>,
-you must give the chapter number after <kbd>PREFIX_CHAPTER</kbd>.
-Once done, all subsequent chapters or collated document sections
-will increment the chapter number by one automatically.  Failure to
-provide a chapter number after <kbd>PREFIX_CHAPTER</kbd> when it is
-required will result in mom aborting with a reminder to do so.
+If for some reason you need to specify the chapter number,
+you may do so by passing the number as an argument to
+<kbd>PREFIX_CHAPTER</kbd>.  Subsequent chapters or major sections
+will increment by one as expected.
+</p>
+
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+For the purposes of labelling, mom treats
+<a href="docprocessing.html#doctype">DOCTYPE&nbsp;DEFAULT</a>
+as if it were <b>DOCTYPE&nbsp;CHAPTER</b>, hence, with
+<kbd>PREFIX_CHAPTER</kbd>, each collated <b>DEFAULT</b>
+doctype's prefixed &#8220;chapter&#8221; number is incremented
+and the label number itself reset to &#8220;1&#8221;.  If
+you do not give <kbd>PREFIX_CHAPTER</kbd>, the label number
+is <i>not</i> reset automatically.  To reset it, invoke
+<kbd>.AUTOLABEL_&lt;type&gt;</kbd> after each
+<a href="docprocessing.html#collate">COLLATE</a>.
+</div>
+
+<div id="set-autolabel" class="box-macro-args" style="margin-top: .5em">
+Macro: <b>SET_AUTOLABEL</b> <kbd class="macro-args">FIG | TBL | PIC | EQN &lt;n&gt;</kbd>
+</div>
+
+<p>
+You may sometimes need to set or reset the autolabel number for a
+particular type of pre-processor or for PDF images.  This is likely
+to occur if you are using
+<a href="#float">FLOAT</a>
+in conjunction with the <kbd>TO_LIST</kbd> argument.
+</p>
+
+<p>
+For example, if your document has Figures (PDF images, pic diagrams)
+and you want your tables to be labelled as Figures as well, you have
+to wrap the tables inside a float and label the float manually as
+&#8220;Fig.&nbsp;n&#8221;, sending it to the List of Figures with
+<kbd>TO_LIST FIGURES</kbd>.
+</p>
+
+<p>
+Mom does not autolabel floats or assign them automatically
+to a list, so she doesn&#8217;t know you&#8217;ve interrupted the
+auto-incrementing label numbers.  Use SET_AUTOLABEL get her back on
+track.  The number you give as an argument after telling her which
+kind of label number to set is the one you want to appear next.
+<br/>
+<span class="pre-in-pp">
+  .SET_AUTOLABEL FIG 6
+</span>
+means the next autolabelled Figure will be &#8220;Fig. 6.&#8221;
 </p>
 
 <div class="macro-id-overline">
@@ -1776,9 +2549,9 @@ anything you like (<kbd>X</kbd>, <kbd>NO</kbd>, etc).
 </div>
 
 <div class="box-macro-args" style="margin-top: .5em">
-Macro: <b>CAPTIONS</b> <kbd class="macro-args">EQN | IMG | PIC | TBL | ALL</kbd>
+Macro: <b>CAPTIONS</b> <kbd class="macro-args">EQN | IMG | PIC | TBL | FLOATING | ALL</kbd>
 <br/>
-Macro: <b>LABELS</b> <kbd class="macro-args">EQN | IMG | PIC | TBL | ALL</kbd>
+Macro: <b>LABELS</b> <kbd class="macro-args">EQN | IMG | PIC | TBL | FLOATING | ALL</kbd>
 <br/>
 Macro: <b>SOURCES</b> <kbd class="macro-args">TBL</kbd>
 <br/>
@@ -1788,14 +2561,16 @@ Macro: <b>SOURCES</b> <kbd class="macro-args">TBL</kbd>
 <br/>
 &nbsp;&nbsp;FONT &lt;font&gt; \
 <br/>
-&nbsp;&nbsp;SIZE "+|-&lt;size&gt;" \
+&nbsp;&nbsp;SIZE +|-&lt;size&gt; \
 <br/>
-&nbsp;&nbsp;AUTOLEAD "&lt;value&gt;" \
+&nbsp;&nbsp;AUTOLEAD &lt;value&gt; \
 <br/>
-&nbsp;&nbsp;COLOR "&lt;color&gt;" \
+&nbsp;&nbsp;COLOR &lt;color&gt; \
 <br/>
 &nbsp;&nbsp;QUAD LEFT | CENTER | RIGHT [ ON_LL ] \
 <br/>
+&nbsp;&nbsp;INDENT &lt;indent&gt; \
+<br/>
 &nbsp;&nbsp;ADJUST +|-&lt;vertical adjustment&gt;
 </kbd>
 </div>
@@ -1830,28 +2605,46 @@ for tables) behave identically to the
 
 <p>
 The first, required argument after <kbd>CAPTIONS</kbd>,
-<kbd>LABELS</kbd>, and <kbd>SOURCES</kbd> indicates the preprocessor
+<kbd>LABELS</kbd>, or <kbd>SOURCES</kbd> indicates the preprocessor
 type for which you are setting the parameters.  (For convenience
 PDF_IMAGE&mdash;argument <kbd>IMG</kbd>&mdash;is here treated as a
-preprocessor.)  An argument of <kbd>ALL</kbd> sets a unified
-style for every preprocessor.  If the <kbd>ALL</kbd> argument is
-given, arguments to subsequent invocations of <kbd>CAPTIONS</kbd>,
-<kbd>LABELS</kbd>, or <kbd>SOURCES</kbd> overwrite only the
-explicitly named style parameters.
+preprocessor.)  <kbd>FLOATING</kbd> sets the style for the macros
+<a href="#caption">CAPTION</a>
+and
+<a href="#label">LABEL</a>,
+which are used to label floats, quotes, and blockquotes.
+</p>
+
+<p>
+An argument of <kbd>ALL</kbd> sets a unified style for all
+preprocessors, floats, quotes, and blockquotes.  If the
+<kbd>ALL</kbd> argument is given, arguments to subsequent
+invocations of <kbd>CAPTIONS</kbd>, <kbd>LABELS</kbd>, or
+<kbd>SOURCES</kbd> overwrite only the explicitly named style
+parameters.
 </p>
 
 <h4 class="docs">QUAD &mdash; quadding of labels, captions, and sources</h4>
 
+<h5 class="docs" style="text-transform: none">&bull;&nbsp;pic, tbl, pdf images</h5>
+
 <p>
 By default, figures (<b>pic</b> output and pdf images) and tables
-have their captions and labels set quad left.  Sources (for tables)
-are also set quad left.  Equations have their labels set quad right,
-and their captions centered.  Regardless of the quad direction,
-captions, labels, and sources are quadded over the width of figures
-and tables unless you pass the optional <kbd>ON_LL</kbd> argument to
-<kbd>QUAD&nbsp;&lt;direction&gt;</kbd>.
+have their captions and labels set quad left.  Sources (for
+tables) are also set quad left.  Equations have their labels
+set quad right, and their captions centered.
+</p>
+
+<p>
+Regardless of the quad direction, captions, labels and sources
+are set on the width of the figure, table, or pdf image
+unless you pass the optional <kbd>ON_LL</kbd> argument to
+<kbd>QUAD&nbsp;&lt;direction&gt;</kbd>, in which case the prevailing
+document line length is used instead.
 </p>
 
+<h5 class="docs" style="text-transform: none">&bull;&nbsp;eqn</h5>
+
 <p>
 Equations behave differently.  By default, equation labels are
 set flush right with the page&#8217;s right margin regardless of
@@ -1860,9 +2653,65 @@ equation is positioned left, the label will appear at the right
 margin regardless of the direction you give to <kbd>QUAD</kbd>.  If
 the equation is indented with the <kbd>-I&nbsp;&lt;indent&gt;</kbd>
 option, a quad direction of <kbd>LEFT</kbd> is observed, but may
-overprint the last line of the equation.  Note that there is no
-<kbd>CENTER</kbd> option for equation labels, and that captions are
-always quadded over the full line length.
+overprint the last line of the equation.
+</p>
+
+<p>
+Note that there is no <kbd>CENTER</kbd> option for equation labels,
+and that captions are always quadded over the prevailing document
+line length.
+</p>
+
+<h5 class="docs" style="text-transform: none">&bull;&nbsp;quotes and blockquotes</h5>
+
+<p>
+Floating labels attached to <b>QUOTE</b>s are quadded on the
+prevailing document line length, and require the <kbd>INDENT</kbd>
+argument if you want to align them with the left and/or right edges
+the quote.
+</p>
+
+<p>
+Floating labels attached to <b>BLOCKQUOTE</b>s are always quadded on
+the indent and line length of the blockquote.
+</p>
+
+<h5 class="docs" style="text-transform: none">&bull;&nbsp;floats</h5>
+
+<p>
+Floating labels and captions attached to <b>FLOAT</b>s are always
+quadded over the prevailing document line length, and require the
+<kbd>INDENT</kbd> argument if you want to align them with the left
+and/or right edges of the float&#8217;s contents.
+</p>
+
+<h4 class="docs">INDENT</h4>
+
+<p>
+The <kbd>INDENT</kbd> argument may only be used if the label
+or caption type is <kbd>FLOATING</kbd>, and only applies to
+<b>FLOAT</b>s and <b>QUOTE</b>s, not <b>BLOCKQUOTE</b>s.
+</p>
+
+<p>
+It is not possible for mom to know the width of a float before
+setting a label or caption attached to a float.  She therefore sets
+it on the prevailing document line length.  While this isn&#8217;t
+much of an issue when the label or caption quad is <b>CENTER</b>,
+you may want to adjust the horizontal positioning when the quad is
+<b>LEFT</b> or <b>RIGHT</b>.
+</p>
+
+<p>
+<kbd>INDENT</kbd>, with a numeric value to which a
+<a href="definitions.html#unitofmeasure">unit of measure</a>
+is appended, allows you to indent a floating label or caption so
+it lines up with the left edge of a <b>FLOAT</b> or <b>QUOTE</b>.
+<kbd>INDENT&nbsp;RIGHT</kbd> (with a value) allows you to shorten the
+line length to the appropriate width.  If you need both a left and
+right indent, invoke <kbd>LABELS</kbd> or <kbd>CAPTIONS</kbd> twice,
+one instance containing <kbd>INDENT&nbsp;&lt;indent&gt;</kbd> and
+the other <kbd>INDENT&nbsp;RIGHT&nbsp;&lt;indent&gt;</kbd>.
 </p>
 
 <h4 class="docs">ADJUST</h4>
@@ -1871,9 +2720,9 @@ always quadded over the full line length.
 The <kbd>ADJUST</kbd> argument allows you to add(<kbd>+</kbd>) or
 subtract (<kbd>-</kbd>) vertical space between labels and captions
 and the output to which they are attached.  The argument requires a
-<a href="definitions.html#unitofmeasure">unit of measure</a>.  For
-example, if you find that table labels are a bit too close to the
-table itself,
+<a href="definitions.html#unitofmeasure">unit of measure</a>.
+For example, if you find that table labels are a bit too close to
+the table itself,
 <br/>
 <span class="pre-in-pp">
   .LABELS TBL ADJUST +3p
@@ -2016,6 +2865,8 @@ Arguments:
 <br/>
 &nbsp;&nbsp;TITLE_QUAD LEFT | CENTER | RIGHT \
 <br/>
+&nbsp;&nbsp;TOC_HEADER_UNDERSCORE default = none
+<br/>
 &nbsp;&nbsp;TITLE_COLOR &lt;color&gt; \
 <br/>
 &nbsp;&nbsp;PN_FAMILY &lt;family&gt; \
@@ -2158,4 +3009,3 @@ macro.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index c93c54d36e93cc9676cc5ab0e7c866eb40f0268a..d700ffe1e9e809e0f42944921bec3dc2df465196 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -203,7 +203,7 @@ current document element tag.
 Additionally, if you&#8217;re designing your own
 <a href="headfootpage.html#headfootpage-intro">HEADERS or FOOTERS</a>
 and want to use mom&#8217;s inline escapes for changing fonts as
-part of the the left, centre and/or right strings, or in the strings
+part of the left, centre and/or right strings, or in the strings
 for
 <a href="headfootpage.html#hdrftr-rectoverso">recto</a>
 and/or
@@ -211,7 +211,7 @@ and/or
 HEADERS or FOOTERS, or in the strings passed to
 <a href="headfootpage.html#headers-and-footers">HEADERS_AND_FOOTERS</a>,
 you must enter the inlines beginning with <kbd>\E*</kbd>
-rather than just <kbd>\*</kbd>, eg <kbd>\E*[BD]</kbd>.
+rather than just <kbd>\*</kbd>, e.g., <kbd>\E*[BD]</kbd>.
 </p>
 </div>
 
@@ -388,7 +388,7 @@ up to a limit of 36).
 
 <p id="kernunit">
 The default size of a kern unit is 1/36 of the current point size;
-this may be changed by invoking the macro, <kbd>.KERN_UNIT</kbd>,
+this may be changed by invoking the macro <kbd>.KERN_UNIT</kbd>
 with the desired value, which represents a fraction of the current
 point size.  For example, to change the kern unit to 1/54 of the
 current point size,
@@ -418,7 +418,7 @@ HEADERS or FOOTERS, or in the strings passed to
 you <i>must</i> use the forms <kbd>\E*[BU&lt;n&gt;]</kbd>
 and <kbd>\E*[FU&lt;n&gt;]</kbd> (ie with no space), and enter the
 inline beginning with <kbd>\E*</kbd> rather than just <kbd>\*</kbd>,
-eg <kbd>\E*[BU4]</kbd>.
+e.g., <kbd>\E*[BU4]</kbd>.
 </p>
  
 <p class="tip-bottom">
@@ -501,7 +501,7 @@ HEADERS or FOOTERS, or in the strings passed to
 you <i>must</i> use the forms <kbd>\E*[BP&lt;n&gt;]</kbd>
 and <kbd>\E*[FP&lt;n&gt;]</kbd> (ie with no space), and enter the
 inline beginning with <kbd>\E*</kbd> rather than just <kbd>\*</kbd>,
-eg <kbd>\E*[BP.755]</kbd>.
+e.g., <kbd>\E*[BP.75]</kbd>.
 </p>
 </div>
 
@@ -569,7 +569,7 @@ HEADERS or FOOTERS, or in the strings passed to
 you <i>must</i> use the forms <kbd>\E*[ALD&lt;n&gt;]</kbd>
 and <kbd>\E*[RLD&lt;n&gt;]</kbd> (ie with no space), and enter the
 inline beginning with <kbd>\E*</kbd> rather than just <kbd>\*</kbd>,
-eg <kbd>\E*[ALD.5]</kbd>.
+e.g., <kbd>\E*[ALD.5]</kbd>.
 </p>
 </div>
 
@@ -578,9 +578,9 @@ eg <kbd>\E*[ALD.5]</kbd>.
 <h3 id="inline-b-mom" class="docs">Terminate a line without advancing on the page</h3>
 <p>
 Sometimes, you want mom to break a line but not advance on the page.
-This can be accomplished with the macro,
+This can be accomplished with the macro
 <a href="typesetting.html#el">EL</a>
-or with the escape, <kbd>\*[B]</kbd>.  Simply attach <kbd>\*[B]</kbd>
+or with the escape <kbd>\*[B]</kbd>.  Simply attach <kbd>\*[B]</kbd>
 to the end of any input line.  Using the example given in the
 document entry for EL, you'd use <kbd>\*[B]</kbd> like this:
 <br/>
@@ -600,7 +600,7 @@ document entry for EL, you'd use <kbd>\*[B]</kbd> like this:
 
 <h3 id="tb-plus-mom" class="docs">Call the next sequential tab without advancing on the page</h3>
 <p>
-Sometimes, you want mom to move to the next tab in sequence (eg
+Sometimes, you want mom to move to the next tab in sequence (e.g.,
 from TAB 1 to TAB 2, or TAB 8 to TAB 9) without mom advancing on the
 page.  (See the NOTE
 <a href="typesetting.html#note-tn">here</a>
@@ -636,7 +636,7 @@ example:
 </span>
 
 The above draws a rule the full measure of the 6-pica line length.
-For another way to draw full measure rules, see the macro,
+For another way to draw full measure rules, see the macro
 <a href="graphical.html#drh">DRH</a>.
 </p>
 
@@ -914,7 +914,7 @@ used <kbd>\v</kbd> with the minus sign) or too low (if you used
 <p>
 In the context of mom, the string width inline
 <kbd>\w'&lt;string&gt;'</kbd> primarily serves to let you establish the
-horizontal measure of something (eg indents) based on the length
+horizontal measure of something (e.g., indents) based on the length
 of a bit of text.  For example, if you want a left indent the length
 of the word &#8220;Examples:&#8221; plus a space, you can set it with
 the <kbd>\w</kbd> inline escape:
@@ -1082,4 +1082,3 @@ ligatures and letters unique to various European languages), consult
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index bab0be5d3e3dc4bc3d7e86a079317f235a8926df..bd02e17ddbc7c0ab51bf7ea7e39576f51e754f42 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -70,8 +70,8 @@ PostScript (.ps).  She&#8217;s aimed at three kinds of users:
       not-always-typographically-intuitive
       <a href="definitions.html#primitives">primitives</a>;
   </li>
-  <li>Non-technical writers who need to format their work easily,
-      with a minimum of clutter;
+  <li>Writers who need to format their work easily, with a
+      minimum of clutter;
   </li>
   <li>Newcomers to groff, typesetting, or document processing
       who need a well-documented macro set to get them started.
@@ -293,7 +293,7 @@ aren&#8217;t enough, I offer examples.
 The canonical reference materials for groff are
 <strong>cstr54</strong> (a downloadable PostScript copy of which
 is available
-<a href="http://www.kohala.com/start/troff/">here</a>)
+<a href="http://www.kohala.com/start/troff/cstr54.ps">here</a>)
 and the <strong>troff</strong> and <strong>groff_diff</strong>
 manpages.  The most complete and up-to-date source of information is
 the groff info pages, available by typing <kbd>info groff</kbd> at
@@ -494,4 +494,3 @@ quote&#8217;s finished, you have to tell mom it&#8217;s done.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index c33c58dd28274d6a7903b1336817305b14270e19..63dbb3277e4bf076b3d7e6e1097e832585ba6259 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -109,7 +109,7 @@ After the START macro, you enter headers pertinent to your letter:
 the date, the addressee (in business correspondence, typically both
 name and address), the addresser (that&#8217;s you; in business
 correspondence, typically both name and address), and a greeting
-(in full, eg &#8220;Dear Mr. Smith,&#8221; or &#8220;Dear
+(in full, e.g., &#8220;Dear Mr. Smith,&#8221; or &#8220;Dear
 Mr. Smith:&#8221;).
 </p>
 
@@ -141,7 +141,7 @@ macro.
 <p>
 At the end of the letter, should you wish a closing (&#8220;Yours
 truly,&#8221; &#8220;Sincerely,&#8221; &#8220;Hugs and
-kisses&#8221;), invoke the macro, <kbd>.CLOSING</kbd>, on a line
+kisses&#8221;), invoke the macro <kbd>.CLOSING</kbd> on a line
 by itself, and follow it with the text of the closing. <b>N.B.</b>
 Don&#8217;t put your name here; mom supplies it automatically from
 <a href="docprocessing.html#author">AUTHOR</a>),
@@ -486,7 +486,7 @@ Macro: <b>CLOSING</b>
 
 <p>
 Invoke <kbd>.CLOSING</kbd> on a line by itself after the body of
-the letter, with the closing you&#8217;d like (eg &#8220;Yours
+the letter, with the closing you&#8217;d like (e.g., &#8220;Yours
 truly,&#8221;) underneath, like this:
 <br/>
 <span class="pre-in-pp">
@@ -575,4 +575,3 @@ number at the bottom of multi-page letters, invoke
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 4da84565032e52b77aa7a7c9d4a84ddb402725f2..2c39e0ecc0aab8368ab51b28ac0cc50372c14e43 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -28,7 +28,7 @@ FDL in the main directory of the groff source package.
 
 <!-- ==================================================================== -->
 
-<div id="top" class="page">
+<div id="top" class="page" style="width: 800px">
 
 <!-- Navigation links -->
 <table style="width: 100%;">
@@ -68,6 +68,7 @@ elsewhere in the documentation.
   <li><a href="#qr-14">Nested lists</a></li>
   <li><a href="#qr-15">Colour</a></li>
   <li><a href="#qr-16">Dropcaps</a></li>
+  <li><a href="#qr-56">Smallcaps</a></li>
   <li><a href="#qr-17">Utilities</a></li>
   <li><a href="#qr-18">Graphical objects and images</a></li>
 </ul>
@@ -75,16 +76,18 @@ elsewhere in the documentation.
 <ul style="margin-top: .5em; margin-left: 0; padding-left: 0; list-style-type: none;">
   <li><a href="#qr-19">Reference macros (metadata)</a></li>
   <li><a href="#qr-20">Document type and initial defaults</a></li>
+  <li><a href="#qr-59">&nbsp;&nbsp;&ndash;&nbsp;Slides</a></li>
   <li><a href="#qr-23">TYPEWRITE control macros</a></li>
+  <li><a href="#qr-57">Vertical whitespace management</a></li>
   <li><a href="#qr-47">Document and section cover (title) pages</a></li>
   <li><a href="#qr-22">Set documents in columns</a></li>
   <li><a href="#qr-21">Line numbering</a></li>
   <li><a href="#qr-24">Initiate document processing</a></li>
-  <li><a href="#qr-42">Global print style changes after START</a></li>
 </ul>
 </div>
-<ul style="margin-top: 1.75em; margin-left: 0; padding-left: 0; list-style-type: none;">
-  <li><a href="#qr-43">Managing a document&#8217;s first-page header<br/><span style="margin-left: 1.25em;">(the &#8220;docheader&#8221;)</span></a></li>
+<ul style="margin-top: 2.75em; margin-left: 0; padding-left: 0; list-style-type: none;">
+  <li><a href="#qr-42">Global print style changes after START</a></li>
+  <li><a href="#qr-43">Managing the docheader</a></li>
   <li><a href="#qr-25">Epigraphs</a></li>
   <li><a href="#qr-26">Headings</a></li>
   <li><a href="#qr-30">Paragraphs</a></li>
@@ -100,6 +103,7 @@ elsewhere in the documentation.
   <li><a href="#qr-53">Images and graphics</a></li>
   <li><a href="#qr-51">eqn support</a></li>
   <li><a href="#qr-52">pic support</a></li>
+  <li><a href="#qr-58">grap support</a></li>
   <li><a href="#qr-50">tbl support</a></li>
   <li><a href="#qr-54">Captions and labels</a></li>
   <li><a href="#qr-39">Bibliographic references</a></li>
@@ -120,7 +124,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-1" class="quick-ref" colspan="2" >+++ Paper size, margins, line length</th>
+<th id="qr-1" class="quick-ref" colspan="2">
+<a href="typesetting.html#page-setup-intro">+++ Paper size, margins, line length</a></th>
 </tr>
 <tr>
 <td><a href="typesetting.html#paper">PAPER</a></td><td>-- set common paper sizes (letter, A4, etc)</td>
@@ -152,7 +157,8 @@ elsewhere in the documentation.
 </table>
 
 <table class="quick-ref">
-<tr><th id="qr-2" class="quick-ref" colspan="2">+++ Family, font, point size</th></tr>
+<tr><th id="qr-2" class="quick-ref" colspan="2">
+<a href="typesetting.html#basic-params-intro">+++ Family, font, point size</a></th></tr>
 <tr>
 <td><a href="typesetting.html#family">FAMILY</a></td><td>-- set the family of type</td>
 </tr>
@@ -172,7 +178,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-3" class="quick-ref" colspan="2" >+++ Font modifications</th>
+<th id="qr-3" class="quick-ref" colspan="2">
+<a href="typesetting.html#modifications-intro">+++ Font modifications</a></th>
 </tr>
 <tr><td style="padding-left: 0;">Pseudo italic</td></tr>
 <tr>
@@ -182,7 +189,7 @@ elsewhere in the documentation.
 <td><a href="typesetting.html#slant-inline">\*[SLANT]</a></td><td>-- invoke pseudo italic inline</td>
 </tr>
 <tr>
-<td><a href="typesetting.html#slant-inline">\*[SLANTX]</a></td><td>-- off pseudo italic inline</td>
+<td><a href="typesetting.html#slant-inline">\*[SLANTX]</a></td><td>-- turn off pseudo italic inline</td>
 </tr>
 <tr><td style="padding-left: 0;">Pseudo bold</td></tr>
 <tr>
@@ -192,7 +199,7 @@ elsewhere in the documentation.
 <td><a href="typesetting.html#bolder-inline">\*[BOLDER]</a></td><td>-- invoke pseudo bold inline</td>
 </tr>
 <tr>
-<td><a href="typesetting.html#bolder-inline">\*[BOLDERX]</a></td><td>-- off pseudo bold inline</td>
+<td><a href="typesetting.html#bolder-inline">\*[BOLDERX]</a></td><td>-- turn off pseudo bold inline</td>
 </tr>
 <tr><td style="padding-left: 0;">Pseudo condensed</td></tr> 
 <tr>
@@ -202,7 +209,7 @@ elsewhere in the documentation.
 <td><a href="typesetting.html#cond-inline">\*[COND]</a></td><td>-- invoke pseudo condensing inline</td>
 </tr>
 <tr>
-<td><a href="typesetting.html#cond-inline">\*[CONDX]</a></td><td>-- off pseudo condensing inlines</td>
+<td><a href="typesetting.html#cond-inline">\*[CONDX]</a></td><td>-- turn off pseudo condensing inline</td>
 </tr>
 <tr><td style="padding-left: 0;">Pseudo extended</td></tr>
 <tr>
@@ -212,13 +219,14 @@ elsewhere in the documentation.
 <td><a href="typesetting.html#ext-inline">\*[EXT]</a></td><td>-- invoke pseudo extending inline</td>
 </tr>
 <tr>
-<td><a href="typesetting.html#ext-inline">\*[EXTX]</a></td><td>-- off pseudo condensing inlinee</td>
+<td><a href="typesetting.html#ext-inline">\*[EXTX]</a></td><td>-- turn off pseudo condensing inline</td>
 </tr>
 </table>
 
 <table class="quick-ref">
 <tr>
-<th id="qr-4" class="quick-ref" colspan="2" >+++ Linespacing (leading)</th>
+<th id="qr-4" class="quick-ref" colspan="2">
+<a href="typesetting.html#leading">+++ Linespacing (leading)</a></th>
 </tr>
 <tr>
 <td><a href="typesetting.html#leading">LS</a></td><td>-- set the linespacing (leading)</td>
@@ -230,7 +238,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-5" class="quick-ref" colspan="2" >+++ Justification, quad direction, line-by-line setting, breaking lines</th>
+<th id="qr-5" class="quick-ref" colspan="2">
+<a href="typesetting.html#justification-intro">+++ Justification, quad direction, line-by-line setting, breaking lines</a></th>
 </tr>
 <tr>
 <td><a href="typesetting.html#justify">JUSTIFY</a></td><td>-- justify text to both margins</td>
@@ -260,7 +269,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-6" class="quick-ref" colspan="2" >+++ Hyphenation</th>
+<th id="qr-6" class="quick-ref" colspan="2">
+<a href="typesetting.html#hy">+++ Hyphenation</a></th>
 </tr>
 <tr>
 <td><a href="typesetting.html#hy">HY</a></td><td>-- automatic hyphenation on/off</td>
@@ -272,7 +282,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-7" class="quick-ref" colspan="2" >+++ Word and sentence spacing</th>
+<th id="qr-7" class="quick-ref" colspan="2">
+<a href="typesetting.html#ws">+++ Word and sentence spacing</a></th>
 </tr>
 <tr>
 <td><a href="typesetting.html#ws">WS</a></td><td>-- set the minimum word space size</td>
@@ -284,7 +295,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-8" class="quick-ref" colspan="2" >+++ Kerning, ligatures, smartquotes</th>
+<th id="qr-8" class="quick-ref" colspan="2">
+<a href="typesetting.html#kern">+++ Kerning, ligatures, smartquotes</a></th>
 </tr>
 <tr>
 <td><a href="typesetting.html#kern">KERN</a></td><td>-- automatic character pair kerning on/off</td>
@@ -314,7 +326,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-9" class="quick-ref" colspan="2" >+++ Horizontal and vertical movements, columnar setting</th>
+<th id="qr-9" class="quick-ref" colspan="2">
+<a href="typesetting.html#aldrld-intro">+++ Horizontal and vertical movements, columnar setting</a></th>
 </tr>
 <tr>
 <td><a href="typesetting.html#ald">ALD</a></td><td>-- move downards on the page</td>
@@ -350,7 +363,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-10" class="quick-ref" colspan="2" >+++ Indents</th>
+<th id="qr-10" class="quick-ref" colspan="2">
+<a href="typesetting.html#indents-intro">+++ Indents</a></th>
 </tr>
 <tr>
 <td><a href="typesetting.html#il">IL</a></td><td>-- set and turn on a left indent</td>
@@ -383,7 +397,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-11" class="quick-ref" colspan="2" >+++ Tabs</th>
+<th id="qr-11" class="quick-ref" colspan="2">
+<a href="typesetting.html#tabs-intro">+++ Tabs</a></th>
 </tr>
 <tr>
 <td><a href="typesetting.html#tab-set">TAB_SET</a></td><td>-- set up a typesetting tab</td>
@@ -410,7 +425,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-12" class="quick-ref" colspan="2" >+++ Underscoring, underlining</th>
+<th id="qr-12" class="quick-ref" colspan="2">
+<a href="goodies.html#underscore">+++ Underscoring, underlining</a></th>
 </tr>
 <tr>
 <td><a href="goodies.html#underscore">UNDERSCORE</a></td><td>-- underscore</td>
@@ -431,7 +447,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-13" class="quick-ref" colspan="2" >+++ Superscipts</th>
+<th id="qr-13" class="quick-ref" colspan="2">
+<a href="goodies.html#sup">+++ Superscipts</a></th>
 </tr>
 <tr>
 <td><a href="goodies.html#sup">\*[SUP]...\*[SUPX]</a></td><td>-- superscript</td>
@@ -449,7 +466,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-14" class="quick-ref" colspan="2" >+++ Nested lists</th>
+<th id="qr-14" class="quick-ref" colspan="2">
+<a href="docelement.html#list-intro">+++ Nested lists</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#list">LIST</a></td><td>-- begin a list</td>
@@ -470,7 +488,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-15" class="quick-ref" colspan="2" >+++ Colour</th>
+<th id="qr-15" class="quick-ref" colspan="2">
+<a href="color.html#color-intro">+++ Colour</a></th>
 </tr>
 <tr>
 <td><a href="color.html#newcolor">NEWCOLOR</a></td><td>-- initialize (define) a colour</td>
@@ -488,7 +507,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-16" class="quick-ref" colspan="2" >+++ Dropcaps</th>
+<th id="qr-16" class="quick-ref" colspan="2">
+<a href="goodies.html#dropcap">+++ Dropcaps</a></th>
 </tr>
 <tr>
 <td><a href="goodies.html#dropcap">DROPCAP</a></td><td>-- set a dropcap</td>
@@ -512,7 +532,21 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-17" class="quick-ref" colspan="2" >+++ Utilities</th>
+<th id="qr-56" class="quick-ref" colspan="2">
+<a href="typesetting.html#smallcaps">+++ Smallcaps</a></th>
+</tr>
+<tr>
+<td><a href="typesetting.html#smallcaps">SMALLCAPS</a></td>
+</tr>
+<tr>
+<td><a href="typesetting.html#smallcaps-style">SMALLCAPS_STYLE</a></td>
+</tr>
+</table>
+
+
+<table class="quick-ref">
+<tr>
+<th id="qr-17" class="quick-ref" colspan="2">+++ Utilities</th>
 </tr>
 <tr>
 <td><a href="goodies.html#alias">ALIAS</a></td><td>-- give a macro a new name</td>
@@ -536,6 +570,15 @@ elsewhere in the documentation.
 <td><a href="typesetting.html#newpage">NEWPAGE</a></td><td>-- break to a new page</td>
 </tr>
 <tr>
+<td><a href="docprocessing.html#newslide">NEWSLIDE</a></td><td>-- break to a new slide</td>
+</tr>
+<tr>
+<td><a href="docprocessing.html#pause">PAUSE</a></td><td>-- pause slide presentation</td>
+</tr>
+<tr>
+<td><a href="docprocessing.html#transition">TRANSITION</a></td><td>-- transition effect for slides</td>
+</tr>
+<tr>
 <td><a href="goodies.html#pad">PAD</a></td><td>-- insert equalized whitespace into a line</td>
 </tr>
 <tr>
@@ -557,7 +600,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-18" class="quick-ref" colspan="2" >+++ Graphical objects and images</th>
+<th id="qr-18" class="quick-ref" colspan="2">
+<a href="graphical.html#intro-graphical">+++ Graphical objects and images</a></th>
 </tr>
 <tr>
 <td><a href="graphical.html#drh">DRH</a></td><td>-- draw a horizontal rule</td>
@@ -586,7 +630,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-19" class="quick-ref" colspan="2" >+++ Reference macros</th>
+<th id="qr-19" class="quick-ref" colspan="2">
+<a href="docprocessing.html#reference-macros">+++ Reference macros</a></th>
 </tr>
 <tr>
 <td><a href="docprocessing.html#title">TITLE</a></td><td>-- document title</td>
@@ -640,12 +685,16 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-20" class="quick-ref" colspan="2" >+++ General document formatting directives</th>
+<th id="qr-20" class="quick-ref" colspan="2">
+<a href="docprocessing.html#docstyle-macros">+++ General document formatting directives</a></th>
 </tr>
 <tr>
 <td><a href="docprocessing.html#doctype">DOCTYPE</a></td><td>-- general document type</td>
 </tr>
 <tr>
+<td id="qr-59"><a href="docprocessing.html#slides">DOCTYPE SLIDES</a></td><td>-- create slide presentation</td>
+</tr>
+<tr>
 <td><a href="docprocessing.html#copystyle">COPYSTYLE</a></td><td>-- draft or final copy</td>
 </tr>
 <tr>
@@ -655,7 +704,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-21" class="quick-ref" colspan="2" >+++ Line numbering</th>
+<th id="qr-21" class="quick-ref" colspan="2">
+<a href="docelement.html#number-lines-intro">+++ Line numbering</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#number-lines">NUMBER_LINES</a></td><td>-- automatic line numbering on/off</td>
@@ -666,11 +716,15 @@ elsewhere in the documentation.
 <tr>
 <td><a href="docelement.html#number-blockquote-lines">NUMBER_BLOCKQUOTE_LINES</a></td><td>-- numbering of BLOCKQUOTE lines on/off</td>
 </tr>
+<tr>
+<td><a href="docelement.html#number-lines-control">Control macros</a></td><td>-- numbering of BLOCKQUOTE lines on/off</td>
+</tr>
 </table>
 
 <table class="quick-ref">
 <tr>
-<th id="qr-22" class="quick-ref" colspan="2" >+++ Set documents in columns</th>
+<th id="qr-22" class="quick-ref" colspan="2">
+<a href="docprocessing.html#columns-intro">+++ Set documents in columns</a></th>
 </tr>
 <tr>
 <td><a href="docprocessing.html#columns">COLUMNS</a></td>
@@ -685,7 +739,7 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-23" class="quick-ref" colspan="2" >+++ TYPEWRITE control macros</th>
+<th id="qr-23" class="quick-ref" colspan="2">+++ TYPEWRITE control macros</th>
 </tr>
 <tr>
 <td><a href="docprocessing.html#typewriter-underlining">UNDERLINE_ITALIC</a></td><td>--  underlining of italics on</td>
@@ -706,7 +760,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-24" class="quick-ref" colspan="2" >+++ Initiate document processing</th>
+<th id="qr-24" class="quick-ref" colspan="2">
+<a href="docprocessing.html#start-macro">+++ Initiate document processing</a></th>
 </tr>
 <tr>
 <td><a href="docprocessing.html#start">START</a></td><td>-- begin document processing</td>
@@ -715,7 +770,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-25" class="quick-ref" colspan="2" >+++ Epigraphs</th>
+<th id="qr-25" class="quick-ref" colspan="2">
+<a href="docelement.html#epigraph-intro">+++ Epigraphs</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#epigraph">EPIGRAPH</a></td><td>-- set an epigraph underneath the docheader</td>
@@ -727,7 +783,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-26" class="quick-ref" colspan="2" >+++ HEADINGS</th>
+<th id="qr-26" class="quick-ref" colspan="2">
+<a href="docelement.html#heading-intro">+++ Headings</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#heading">HEADING</a></td><td>-- hierarchical headings</td>
@@ -743,7 +800,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-30" class="quick-ref" colspan="2" >+++ Paragraphs</th>
+<th id="qr-30" class="quick-ref" colspan="2">
+<a href="docelement.html#pp-intro">+++ Paragraphs</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#pp">PP</a></td><td>-- set a paragraph</td>
@@ -767,7 +825,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-31" class="quick-ref" colspan="2" >+++ Quotes (line for line verbatim quotes)</th>
+<th id="qr-31" class="quick-ref" colspan="2">
+<a href="docelement.html#quote-intro">+++ Quotes (line for line verbatim quotes)</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#quote">QUOTE</a></td><td>-- set quoted text line for line </td>
@@ -782,7 +841,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-32" class="quick-ref" colspan="2" >+++ Blockquotes (cited passages of text)</th>
+<th id="qr-32" class="quick-ref" colspan="2">
+<a href="docelement.html#blockquote-intro">+++ Blockquotes (cited passages of text)</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#blockquote">BLOCKQUOTE</a></td><td>-- set longer passages of cited text</td>
@@ -797,7 +857,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-49" class="quick-ref" colspan="2" >+++Floats </th>
+<th id="qr-49" class="quick-ref" colspan="2">
+<a href="images.html#floats-intro">+++ Floats</a></th>
 </tr>
 <tr>
 <td style="vertical-align: top"><a href="images.html#float">FLOAT</a></td><td>-- keep blocks of input together, output on next page
@@ -808,7 +869,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-53" class="quick-ref" colspan="2" >+++Images and graphics </th>
+<th id="qr-53" class="quick-ref" colspan="2">
+<a href="images.html#images-intro">+++ Images and graphics</a></th>
 </tr>
 <tr>
 <td style="vertical-align: top"><a href="images.html#pdf">PDF_IMAGE</a></td><td>-- inserting pdf images
@@ -823,7 +885,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-51" class="quick-ref" colspan="2" >+++eqn support </th>
+<th id="qr-51" class="quick-ref" colspan="2">
+<a href="images.html#eqn">+++ eqn support</a></th>
 </tr>
 <tr>
 <td><a href="images.html#eq-en">EQ</a></td><td>-- begin an eqn block</td>
@@ -835,7 +898,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-52" class="quick-ref" colspan="2" >+++pic support </th>
+<th id="qr-52" class="quick-ref" colspan="2">
+<a href="images.html#pic">+++ pic support</a></th>
 </tr>
 <tr>
 <td><a href="images.html#ps-pe">PS</a></td><td>-- begin a pic block</td>
@@ -850,7 +914,21 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-50" class="quick-ref" colspan="2" >+++tbl support</th>
+<th id="qr-58" class="quick-ref" colspan="2">
+<a href="images.html#grap">+++ grap support</a></th>
+</tr>
+<tr>
+<td><a href="images.html#grap">G1</a></td><td>-- begin a grap block</td>
+</tr>
+<tr>
+<td><a href="images.html#grap">G2</a></td><td>-- end a grap block</td>
+</tr>
+</table>
+
+<table class="quick-ref">
+<tr>
+<th id="qr-50" class="quick-ref" colspan="2">
+<a href="images.html#tbl">+++ tbl support</a></th>
 </tr>
 <tr>
 <td><a href="images.html#ts-te">TS</a></td><td>-- begin a tbl block</td>
@@ -865,18 +943,28 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-54" class="quick-ref" colspan="2" >+++ Captions and labels</th>
+<th id="qr-54" class="quick-ref" colspan="2">
+<a href="images.html#captions-and-labels">+++ Captions and labels</a></th>
 </tr>
 <tr>
 <td><a href="images.html#autolabel">AUTOLABEL</a></td><td>-- auto-label figures, tables, equations</td>
 </tr>
 <tr>
+<td><a href="images.html#set-autolabel">SET_AUTOLABEL</a></td><td>-- set or reset autolabel numbers</td>
+</tr>
+<tr>
 <td><a href="images.html#caption-after-label">CAPTION_AFTER_LABEL</a></td><td>-- place captions after labels</td>
 </tr>
 <tr>
 <td><a href="images.html#mla">MLA</a></td><td>-- MLA-style labelling and captioning</td>
 </tr>
 <tr>
+<td><a href="images.html#caption">CAPTION</a></td><td>-- add a caption to a float or (block)quote</td>
+</tr>
+<tr>
+<td><a href="images.html#label">LABEL</a></td><td>-- add a label to a float or (block)quote</td>
+</tr>
+<tr>
 <td><a href="images.html#captions-labels-sources">CAPTIONS</a></td><td>-- set style for captions</td>
 </tr>
 <tr>
@@ -889,7 +977,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-55" class="quick-ref" colspan="2" >+++Lists of Figures, Tables, and Equations</th>
+<th id="qr-55" class="quick-ref" colspan="2">
+<a href="images.html#lists-of">+++ Lists of Figures, Tables, and Equations</a></th>
 </tr>
 <tr>
 <td><a href="images.html#lists-macros">LIST_OF_FIGURES</a></td><td>-- generate a List of Figures</td>
@@ -907,7 +996,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-33" class="quick-ref" colspan="2" >+++ Code snippets</th>
+<th id="qr-33" class="quick-ref" colspan="2">
+<a href="docelement.html#code-intro">+++ Code snippets</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#code">CODE</a></td><td>-- set a code snippet</td>
@@ -925,7 +1015,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-34" class="quick-ref" colspan="2" >+++ Author linebreaks (section breaks)</th>
+<th id="qr-34" class="quick-ref" colspan="2">
+<a href="docelement.html#linebreak-intro">+++ Author linebreaks (section breaks)</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#linebreak">LINEBREAK</a></td><td>-- insert an author linebreak (section break)</td>
@@ -943,7 +1034,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-35" class="quick-ref" colspan="2" >+++ Document termination string</th>
+<th id="qr-35" class="quick-ref" colspan="2">
+<a href="docelement.html#finis-intro">+++ Document termination string</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#finis">FINIS</a></td><td>-- insert a document termination string</td>
@@ -964,7 +1056,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-36" class="quick-ref" colspan="2" >+++ Footnotes</th>
+<th id="qr-36" class="quick-ref" colspan="2">
+<a href="docelement.html#footnote-intro">+++ Footnotes</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#footnote">FOOTNOTE</a></td><td>-- set a footnote</td>
@@ -998,7 +1091,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-37" class="quick-ref" colspan="2" >+++ Endnotes</th>
+<th id="qr-37" class="quick-ref" colspan="2">
+<a href="docelement.html#endnote-intro">+++ Endnotes</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#endnote">ENDNOTE</a></td><td>-- set an endnote</td>
@@ -1027,7 +1121,7 @@ elsewhere in the documentation.
 <td><a href="docelement.html#endnotes-header-control">Header/footer control</a></td>
 </tr>
 <tr>
-<td><a href="docelement.html#endnotes-main-title">Title control</a></td>
+<td><a href="docelement.html#endnotes-header-string-control">Title control</a></td>
 </tr>
 <tr>
 <td><a href="docelement.html#endnotes-doc-title">Document/section identification control</a></td>
@@ -1039,7 +1133,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-38" class="quick-ref" colspan="2" >+++ Margin notes</th>
+<th id="qr-38" class="quick-ref" colspan="2">
+<a href="docelement.html#margin-notes-intro">+++ Margin notes</a></th>
 </tr>
 <tr>
 <td><a href="docelement.html#mn-init">MN_INIT</a></td><td>-- initialize margin notes</td>
@@ -1051,7 +1146,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-39" class="quick-ref" colspan="2" >+++ Bibliographic references</th>
+<th id="qr-39" class="quick-ref" colspan="2">
+<a href="refer.html#intro-ref">+++ Bibliographic references</a></th>
 </tr>
 <tr>
 <td><a href="refer.html#ref">REF</a></td><td>-- begin a reference</td>
@@ -1069,7 +1165,7 @@ elsewhere in the documentation.
 <td><a href="refer.html#bracket-refs">REF[ / REF]</a></td><td>-- put square brackets around embedded references</td>
 </tr>
 <tr>
-<td><a href="refer.html#bracket-refs">REF{ / REF}</a></td><td>-- put curly braces around mbedded references</td>
+<td><a href="refer.html#bracket-refs">REF{ / REF}</a></td><td>-- put curly braces around embedded references</td>
 </tr>
 <tr>
 <td><a href="refer.html#bibliography">BIBLIOGRAPHY</a></td><td>-- output a bibliography</td>
@@ -1096,7 +1192,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-40" class="quick-ref" colspan="2" >+++ Tables of contents</th>
+<th id="qr-40" class="quick-ref" colspan="2">
+<a href="tables-of-contents.html">+++ Tables of contents</a></th>
 </tr>
 <tr>
 <td><a href="tables-of-contents.html#toc">TOC</a></td><td>-- output a table of contents</td>
@@ -1132,7 +1229,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-41" class="quick-ref" colspan="2" >+++ Letter (correspondence) macros</th>
+<th id="qr-41" class="quick-ref" colspan="2">
+<a href="letters.html">+++ Letter (correspondence) macros</a></th>
 </tr>
 <tr>
 <td><a href="letters.html#date">DATE</a></td><td>-- letter&#8217;s date</td>
@@ -1162,7 +1260,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-42" class="quick-ref" colspan="2" >+++ Changing global print style parameters after START</th>
+<th id="qr-42" class="quick-ref" colspan="2">
+<a href="docprocessing.html#style-after-start">+++ Changing global print style parameters after START</a></th>
 </tr>
 <tr>
 <td><a href="docprocessing.html#doc-left-margin">DOC_LEFT_MARGIN</a></td><td>-- left margin of everything on the page</td>
@@ -1189,7 +1288,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-43" class="quick-ref" colspan="2" >+++ Managing a document&#8217;s first-page header</th>
+<th id="qr-43" class="quick-ref" colspan="2">
+<a href="docprocessing.html#docheader">+++ Managing a document&#8217;s first-page header<a></th>
 </tr>
 <tr>
 <td><a href="docprocessing.html#docheader">DOCHEADER</a></td><td>-- document first-page header on/off</td>
@@ -1201,7 +1301,8 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-44" class="quick-ref" colspan="2" >+++ Managing page headers and footers</th>
+<th id="qr-44" class="quick-ref" colspan="2">
+<a href="headfootpage.html#headfoot-management">+++ Managing page headers and footers</a></th>
 </tr>
 <tr>
 <td><a href="headfootpage.html#headers">HEADERS</a></td><td>-- page headers on/off</td>
@@ -1241,12 +1342,16 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-45" class="quick-ref" colspan="2" >+++ Recto/verso page headers and footers</th>
+<th id="qr-45" class="quick-ref" colspan="2">
+<a href="rectoverso.html">+++ Recto/verso page headers and footers</a></th>
 </tr>
 <tr>
 <td><a href="rectoverso.html#recto-verso">RECTO_VERSO</a></td><td>-- recto/verso headers and/or footers on/off</td>
 </tr>
 <tr>
+<td><a href="rectoverso.html#force-recto">FORCE_RECTO</a></td><td>-- insert blank pages so chapters start recto</td>
+</tr>
+<tr>
 <td><a href="rectoverso.html#switch-hdrftr">SWITCH_HEADERS</a></td><td>-- switch recto or verso header</td>
 </tr>
 <tr>
@@ -1268,13 +1373,14 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-46" class="quick-ref" colspan="2" >+++ Pagination</th>
+<th id="qr-46" class="quick-ref" colspan="2">
+<a href="headfootpage.html#pagination-intro">+++ Pagination</a></th>
 </tr>
 <tr>
-<td><a href="headfootpage.html#index-pagination">PAGINATE</a></td><td>-- pagination on/off</td>
+<td><a href="headfootpage.html#paginate">PAGINATE</a></td><td>-- pagination on/off</td>
 </tr>
 <tr>
-<td><a href="headfootpage.html#index-pagination-control">Control macros</a></td><td>-- change default style for pagination</td>
+<td><a href="headfootpage.html#index-paginate-control">Control macros</a></td><td>-- change default style for pagination</td>
 </tr>
 <tr>
 <td><a href="headfootpage.html#pagenumber">&nbsp;PAGENUMBER</a></td><td>-- user-defined (starting) page number</td>
@@ -1283,7 +1389,10 @@ elsewhere in the documentation.
 <td><a href="headfootpage.html#pagenum-style">&nbsp;PAGENUM_STYLE</a></td><td>-- digits, roman numerals, etc</td>
 </tr>
 <tr>
-<td><a href="headfootpage.html#pagenum-on-first-page">&nbsp;PAGENUM_ON_FIRST_PAGE</a></td><td>-- when footers are enabled</td>
+<td><a href="headfootpage.html#pagenumber-string">&nbsp;PAGENUMBER_STRING</a></td><td>-- user-defined page numbering string</td>
+</tr>
+<tr>
+<td><a href="headfootpage.html#pagenum-on-first-page">&nbsp;PAGENUM_ON_FIRST_PAGE</a></td><td>-- when page numbering is at page top</td>
 </tr>
 <tr>
 <td style="vertical-align: top;"><a href="headfootpage.html#draft-with-pagenumber">&nbsp;DRAFT_WITH_PAGENUMBER</a></td><td>-- attach draft/revision to page number</td>
@@ -1292,43 +1401,76 @@ elsewhere in the documentation.
 
 <table class="quick-ref">
 <tr>
-<th id="qr-47" class="quick-ref" colspan="2" >+++ Document and section cover (title) pages</th>
+<th id="qr-57" class="quick-ref" colspan="2">
+<a href="docprocessing.html#vertical-whitespace-management">+++ Vertical whitespace management</a></th>
 </tr>
 <tr>
-<td><a href="cover.html#cover">COVER</a></td><td>-- information to include in a section cover</td>
+<td><a href="docprocessing.html#shim">SHIM</a></td><td>-- align to the baseline grid</td>
+</tr>
+<tr>
+<td><a href="docprocessing.html#flex">FLEX</a></td><td>-- insert flexible whitespace</td>
+</tr>
+</table>
+
+
+<table class="quick-ref">
+<tr>
+<th id="qr-47" class="quick-ref" colspan="2">
+<a href="cover.html">+++ Document and section cover (title) pages</a></th>
 </tr>
 <tr>
 <td><a href="cover.html#cover">DOC_COVER</a></td><td>-- information to include in a document cover</td>
 </tr>
 <tr>
-<td><a href="cover.html#on-off">COVERS</a></td><td>-- printing of section covers on/off</td>
+<td><a href="cover.html#cover">COVER</a></td><td>-- information to include in a section cover</td>
 </tr>
 <tr>
 <td><a href="cover.html#on-off">DOC_COVERS</a></td><td>-- printing of document covers on/off</td>
 </tr>
 <tr>
+<td><a href="cover.html#on-off">COVERS</a></td><td>-- printing of section covers on/off</td>
+</tr>
+<tr>
+<td><a href="cover.html#covertext">DOC_COVERTEXT</a></td><td>-- user-added text for document covers</td>
+</tr>
+<tr>
+<td><a href="cover.html#covertext">COVERTEXT</a></td><td>-- user-added text for section covers</td>
+</tr>
+<tr>
+<td><a href="cover.html#coverimage">DOC_COVER_IMAGE</a></td><td>-- add images to document covers</td>
+</tr>
+<tr>
+<td><a href="cover.html#coverimage">COVER_IMAGE</a></td><td>-- add images to document covers</td>
+</tr>
+<tr>
 <td><a href="cover.html#cover-control">Control macros</a></td><td>-- change style defaults for covers</td>
 </tr>
 </table>
 
 <table class="quick-ref">
 <tr>
-<th id="qr-48" class="quick-ref" colspan="2" >+++ Utilities</th>
+<th id="qr-48" class="quick-ref" colspan="2">+++ Utilities</th>
 </tr>
 <tr>
 <td><a href="docprocessing.html#add-space">ADD_SPACE</a></td><td>-- add space to the top of a page</td>
 </tr>
 <tr>
+<td><a href="docprocessing.html#add-space">RESTORE_SPACE</a></td><td>-- restore spacing at the top of a page</td>
+</tr>
+<tr>
 <td><a href="headfootpage.html#blank-pages">BLANKPAGE</a></td><td>-- output one or more blank pages</td>
 </tr>
 <tr>
 <td><a href="docprocessing.html#doc-lead-adjust">DOC_LEAD_ADJUST</a></td><td>-- adjust leading to fill pages</td>
 </tr>
 <tr>
-<td><a href="rectoverso.html#collate">COLLATE</a></td><td>-- join documents (chapters/sections) together</td>
+<td><a href="rectoverso.html#collate">COLLATE</a></td><td>-- join documents (chapters/sections)</td>
+</tr>
+<tr>
+<td><a href="goodies.html#center-block">CENTER_BLOCK</a></td><td>-- centre blocks of type</td>
 </tr>
 <tr>
-<td><a href="docprocessing.html#shim">SHIM</a></td><td>-- move vertical position to next valid baseline</td>
+<td><a href="goodies.html#left-hang">LEFT_HANG / \*[HANG c]</a></td><td>-- hanging punctuation</td>
 </tr>
 </table>
 
@@ -1349,4 +1491,3 @@ elsewhere in the documentation.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 4a884bbdbb83e98ac562a2e5af56d9c7f5155504..d644dec0affe28321d7fa2573b79239641c08dae 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -40,7 +40,7 @@ FDL in the main directory of the groff source package.
 
 <h1 class="docs">Recto/verso printing, collating</h1>
 
-<div style="width: 40%; margin: auto;">
+<div style="width: 50%; margin: auto;">
 <ul class="no-enumerator" style="margin-left: -1em;">
   <li><a href="#rectoverso-intro">Introduction to recto/verso printing</a>
   <ul style="margin-left: -.5em; list-style-type: disc;">
@@ -77,9 +77,9 @@ aspects of alternating page layout:
       <a href="headfootpage.html#description-general">General description of headers</a>)
   </li>
   <li>switching
-      <a href="headfootpage.html#hdrftr-rectoverso">HEADER_RECTO</a>
+      <a href="headfootpage.html#hdrftr-recto">HEADER_RECTO</a>
       and
-      <a href="headfootpage.html#hdrftr-rectoverso">HEADER_VERSO</a>
+      <a href="headfootpage.html#hdrftr-recto">HEADER_VERSO</a>
       if user-defined, single string recto/verso headers
       or footers are used in place of the default 3-part
       headers or footers
@@ -92,6 +92,7 @@ aspects of alternating page layout:
 <h3 id="rectoverso-list" class="macro-list">Recto/verso macros</h3>
 <ul class="macro-list">
   <li><a href="#recto-verso">RECTO_VERSO</a></li>
+  <li><a href="#force-recto">FORCE_RECTO</a></li>
   <li><a href="#switch-hdrftr">SWITCH_HEADERS (also FOOTERS)</a>
       &ndash; switch starting position of the header parts (left and right)
   </li>
@@ -143,6 +144,27 @@ number position with
 </p>
 </div>
 
+<!-- -FORCE_RECTO- -->
+
+<div id="force-recto" class="box-macro-args" style="margin-top: 1em;">
+Macro: <b>FORCE_RECTO</b>
+</div>
+
+<p>
+It is a common convention with two-sided printing to ensure that
+cover pages, title pages, and chapters or major sections of a document
+always begin on the recto side of a page.  This sometimes
+necessitates inserting a blank page before the start of a new
+chapter or major section.
+</p>
+
+<p>
+If you would like mom to take care of this for you automatically,
+simply invoke <kbd>FORCE_RECTO</kbd> before the first
+<a href="docprocessing.html#start">START</a>
+of the document.
+</p>
+
 <!-- -SWITCH_HDRFTR- -->
 
 <div id="switch-hdrftr" class="box-macro-args" style="margin-top: 1em;">
@@ -197,7 +219,7 @@ together.  You need only concatenate chapters into a single file
 (most likely with the <kbd>cat</kbd> command), put <kbd>.COLLATE</kbd> at the end of each
 concatenated chapter, follow it with the
 <a href="docprocessing.html#reference-macros">reference macros</a>
-(metadata) needed for the new chapter, eg
+(metadata) needed for the new chapter, e.g.,
 <a href="docprocessing.html#chapter">CHAPTER</a>
 or
 <a href="docprocessing.html#chapter-string">CHAPTER_STRING</a>,
@@ -264,9 +286,6 @@ this:
   .CHAPTER 17
   .START
 </span>
-</p>
-
-<p>
 A slightly more complex version of the same thing, for chapters
 that require their own titles, looks like this:
 <br/>
@@ -277,12 +296,12 @@ that require their own titles, looks like this:
 </span>
 </p>
 
-<div class="box-tip">
+<div class="box-tip" style="margin-top: -1em">
 <p class="tip">
 <span class="tip">Tip:</span>
 If the last line of text before <kbd>.COLLATE</kbd>
 falls too close to the bottom margin, or if the line is followed
-by a macro likely to cause a linebreak (eg <kbd>.LIST OFF</kbd> or
+by a macro likely to cause a linebreak (e.g., <kbd>.LIST OFF</kbd> or
 <kbd>.IQ</kbd>), mom may output a superfluous blank page before
 the start of the following document.
 </p>
@@ -294,14 +313,14 @@ after the last line of text, before <kbd>.COLLATE</kbd> and/or any
 concluding macros.  For example,
 <br/>
 <span class="pre-in-pp">
-  some concluding text.
+  some concluding text.\c
   .EL
   .COLLATE
 </span>
 or
 <br/>
 <span class="pre-in-pp">
-  some concluding text.
+  some concluding text.\c
   .EL
   .LIST OFF
   .COLLATE
@@ -335,4 +354,3 @@ above.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index e18681ea70da2355614375fb83083e3f5208e222..bd814c0e20b4dd833f7378ef83d940e556275a1f 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -172,7 +172,7 @@ are separated from each other by a single, blank line.  The records
 themselves are composed of single lines (&#8220;fields&#8221;) with
 no blank lines between them.  Each field begins with a percent
 sign and a single letter (the &quot;field identifier&quot;)
-eg <kbd>%A</kbd> or <kbd>%T</kbd>.  The letter identifies
+e.g., <kbd>%A</kbd> or <kbd>%T</kbd>.  The letter identifies
 what part of a bibliographic entry the field refers to: Author,
 Title, Publisher, Date, etc.  After the field identifier comes
 a single space, followed by the information appropriate to
@@ -253,7 +253,7 @@ database &lt;full path to database&gt;
 </div>
 <p style="margin-top: .5em; font-size: 95%; line-height: 120%;">
 <kbd>&lt;full&nbsp;path&nbsp;to&nbsp;the&nbsp;database&gt;</kbd>
-means the full path including the filename, eg
+means the full path including the filename, e.g.,
 <kbd>/home/user/refer/my-database-file</kbd>.
 </p>
 
@@ -282,7 +282,7 @@ database &lt;full path to database&gt;
 </div>
 <p style="margin-top: .5em; font-size: 95%; line-height: 120%;">
 <kbd>&lt;full&nbsp;path&nbsp;to&nbsp;the&nbsp;database&gt;</kbd>
-means the full path including the filename, eg
+means the full path including the filename, e.g.,
 <kbd>/home/user/refer/my-database-file</kbd>.
 </p>
 
@@ -313,7 +313,7 @@ database &lt;full path to database&gt;
 
 <p style="margin-top: .5em; font-size: 95%; line-height: 120%;">
 <kbd>&lt;full&nbsp;path&nbsp;to&nbsp;the&nbsp;database&gt;</kbd>
-means the full path including the filename, eg
+means the full path including the filename, e.g.,
 <kbd>/home/user/refer/my-database</kbd>.
 </p>
 
@@ -353,7 +353,7 @@ for how to output the collected references.
 <p>
 For outputting an entire <kbd>refer</kbd> database, or
 generating a comprehensive reading list from a database, see the
-macro,
+macro
 <a href="#bibliography">BIBLIOGRAPHY</a>.
 </p>
 
@@ -752,7 +752,7 @@ are very few rules, and those there are make sense.  In a nutshell:
       escapes <kbd>\*[IT]</kbd> and <kbd>\*[PREV]</kbd>; if the italicized
       portion concludes the field, omit <kbd>\*[PREV]</kbd></li>
   <li>if you require characters with accents, ligatures or special
-      symbols, use groff&#8217;s &#8220;named&#8221; glyphs (eg.
+      symbols, use groff&#8217;s &#8220;named&#8221; glyphs (e.g.,
       <kbd>\['e]</kbd> for <kbd>é</kbd>); a full list can be found in
       <kbd>man groff_char</kbd></li>
 </ul>
@@ -763,11 +763,11 @@ are very few rules, and those there are make sense.  In a nutshell:
 <span class="pre">
 <a class="quick" href="#A">%A</a> author           &ndash; records may contain multiple authors,
                       one per line
-<a class="quick" href="#Q">%Q</a> non-human author &ndash; corporate author, eg. National Geographic;
+<a class="quick" href="#Q">%Q</a> non-human author &ndash; corporate author, e.g., National Geographic;
                       may also be used for exceptional reference types
 <a class="quick" href="#m">%m</a> multiple authors &ndash; whenever "et al." is desirable
 <a class="quick" href="#i">%i</a> idem             &ndash; multiple works by the same author
-<a class="quick" href="#p">%p</a> post-author      &ndash; post-author information (eg appendix,
+<a class="quick" href="#p">%p</a> post-author      &ndash; post-author information (e.g., appendix,
                       foreword, letter)
 %T title            &ndash; primary title (of a book) or the
                       title of an article (within a scholarly
@@ -788,13 +788,13 @@ are very few rules, and those there are make sense.  In a nutshell:
     newspaper
 %J journal          &ndash; when %T contains the title of an article
 %e edition          &ndash; number or name of an edition
-                      (eg Second, 2nd, Collector's, etc.)
+                      (e.g., Second, 2nd, Collector's, etc.)
 %S series           &ndash; series name of books or journals
 %V volume           &ndash; volume number (of books)
 %N journal number   &ndash; journal or magazine number
 %R report number    &ndash; technical report number
 %G gov&#8217;t.           &ndash; government ordering number
-<a class="quick" href="#O">%O</a> other            &ndash; information or which there is no appropriate
+<a class="quick" href="#O">%O</a> other            &ndash; information for which there is no appropriate
                       field letter
 <a class="quick" href="#C">%C</a> city             &ndash; city of publication
 %I publisher        &ndash; publisher
@@ -805,7 +805,7 @@ are very few rules, and those there are make sense.  In a nutshell:
 <a class="quick" href="#n">%n</a> annotation       &ndash; annotation to the reference
 %s site name        &ndash; for internet references, the website name
 %c content          &ndash; for internet references, the source of
-                      the material (eg. Web or Email); for websites,
+                      the material (e.g., Web or Email); for websites,
                       the content, if unclear
 %o organization     &ndash; for internet sites, the organization, group
                       or sponsor of the site
@@ -930,7 +930,7 @@ like this:
 
 <p>
 Use this only if the author and the editor are not one in the same,
-eg
+e.g.,
 <br/>
 <span class="pre-in-pp">
   %A Geoffrey Chaucer
@@ -1008,7 +1008,7 @@ publication data is desired, include it in the field, like this:
   %A Kazuo Ishiguro
   %T The Remains of the Day
   %d London: Faber, 1989
-  %D New York
+  %C New York
   %I Knopf
   %D 1990
 </span>
@@ -1099,7 +1099,7 @@ Macro: <b>REF</b>
 </div>
 
 <p>
-The macro, REF, tells mom that what follows is
+The macro REF tells mom that what follows is
 <kbd>refer</kbd>-specific, a keyword-identified reference to a
 <kbd>refer</kbd> database record.  Depending on whether you&#8217;ve issued
 a
@@ -1725,7 +1725,7 @@ If you output bibliographies at the end of each document in a
 document set in columns, column mode will automatically be
 reinstated for each document, even with BIBLIOGRAPHY_NO_COLUMNS
 turned on.  In such circumstances, you must re-enable
-ENDNOTES_NO_COLUMNS for each separate collated document.
+BIBLIOGRAPHY_NO_COLUMNS for each separate collated document.
 </p>
 
 <h4 id="biblio-pagination" class="docs" style="margin-bottom: .5em;">2. Pagination of bibliographies</h4>
@@ -1822,7 +1822,7 @@ after you&#8217;ve finished with your bibliography.
 
 <h5 id="biblio-modify-hdrftr" class="docs" style="margin-top: 0; margin-bottom: .5em; margin-left: .5em;">&bull;&nbsp;Modifying what goes in the bibliography header/footer</h5>
 
-<p>
+<p style="margin-top: 0">
 If you wish to modify what appears in the header/footer that appears
 on bibliography pages, make the changes before you invoke
 <a href="#bibliography"><kbd>.BIBLIOGRAPHY</kbd></a>,
@@ -1837,9 +1837,11 @@ on bibliography pages.  Chapters get treated differently in that,
 by default, mom does not print the header/footer centre string
 (normally the chapter number or chapter title.)  In most cases, this
 is what you want.  However, should you not want mom to remove the
-centre string from the bibliography pages headers/footers, invoke
+centre string from the bibliography pages headers/footers, or you
+would like her to add one in cases where there hasn't been one
+before (e.g. DOCTYPE DEFAULT) invoke
 <kbd><a href="#bibliography-hdrftr-center">.BIBLIOGRAPHY_HEADER_CENTER</a></kbd>
-with no argument. 
+with no argument.
 </p>
 
 <p>
@@ -1848,23 +1850,29 @@ An important change you may want to make is to put the word
 do so, invoke
 <br/>
 <span class="pre-in-pp" style="margin-bottom: -1em;">
+  .BIBLIOGRAPHY_HEADER_CENTER
   .HEADER_CENTER "Bibliography"
 </span>
 or
 <span class="pre-in-pp" style="margin-top: -.5em;">
+  .BIBLIOGRAPHY_FOOTER_CENTER
   .FOOTER_CENTER "Bibliography"
 </span>
-prior to invoking <kbd>.BIBLIOGRAPHY</kbd>.
+prior to invoking <kbd>.BIBLIOGRAPHY</kbd>.  
 </p>
 
-<div class="box-tip">
+<div class="box-important">
 <p class="tip">
-<span class="note">Note:</span>
-If your
-<a href="docprocessing.html#doctype">DOCTYPE</a>
-is <kbd>CHAPTER</kbd>, you must also invoke
-<a href="#endnotes-hdrftr-center">BIBLIOGRAPHY_HEADER_CENTER</a>
-for the BIBLIOGRAPHY_HEADER_CENTER to appear.
+<span class="important">Important:</span>
+Unless you have a running centre string in your headers or footers, you must invoke
+<span class="pre-in-pp" style="margin-top: -.5em;">
+  <a href="#endnotes-hdrftr-center">.BIBLIOGRAPHY_HEADER_CENTER</a>
+</span>
+or
+<span class="pre-in-pp" style="margin-top: -.5em;">
+  <a href="#endnotes-hdrftr-center">.BIBLIOGRAPHY_FOOTER_CENTER</a>
+</span>
+in order for the centre string to appear, as demonstrated above.
 </p>
 </div>
 
@@ -1879,9 +1887,12 @@ If your
 <a href="docprocessing.html#doctype">DOCTYPE</a>
 is <kbd>CHAPTER</kbd> and you want mom to include a centre
 string in the headers/footers that appear on bibliography
-pages, invoke <kbd>.BIBLIOGRAPHY_HEADER_CENTER</kbd> (or
-<kbd>.BIBLIOGRAPHY_FOOTER_CENTER</kbd>) with no argument.
-Mom&#8217;s default is NOT to print the centre string.
+pages, or if you do not have a running header/footer
+centre string in the body of the document, invoke
+<kbd>.BIBLIOGRAPHY_HEADER_CENTER</kbd> (or
+<kbd>.BIBLIOGRAPHY_FOOTER_CENTER</kbd>) with no argument before
+defining the centre string .  Mom&#8217;s default is NOT to print the
+centre string.
 </p>
 
 <p>
@@ -1929,6 +1940,9 @@ BIBLIOGRAPHY_ALLOWS_FOOTERS OFF.
 <div class="box-macro-args">
 Macro: <b>BIBLIOGRAPHY_STRING</b> <kbd class="macro-args">&quot;&lt;title to print at the top of bibliography pages&gt;&quot;</kbd>
 </div>
+<p class="alias" style="margin-bottom: 0;">
+<i>Alias:</i> <b>BIBLIOGRAPHY_HEADER</b>
+</p>
 
 <p>
 By default, mom prints the word &#8220;BIBLIOGRAPHY&#8221; as a title
@@ -2024,7 +2038,7 @@ Invoked without an argument,
 underneath the bibliography&#8217;s first-page title.  Invoked with the
 argument, <kbd>DOUBLE</kbd>, BIBLIOGRAPHY_STRING_UNDERSCORE will
 double-underscore the title.  Invoked with any other non-numeric
-argument, (eg <kbd>OFF, NO, X</kbd>, etc.) the macro disables
+argument, (e.g., <kbd>OFF, NO, X</kbd>, etc.) the macro disables
 underlining of the title.
 </p>
 
@@ -2064,9 +2078,9 @@ in this way.
 </p>
 
 <p>
-Mom&#8217;s default is to double-underscore the title with 1/2-point
-rules placed 2 points apart and 2 points below the baseline of the
-title.
+By default, mom double-underscores the title if your
+<a href="docprocessing.html#printstyle">PRINTSTYLE</a>
+is <kbd>TYPEWRITE</kbd>.
 </p>
 
 <!-- -BIBLIO_STRING_CAPS- -->
@@ -2115,4 +2129,3 @@ title.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 7740f7776a63d341be50bbe615463d0470e51bed..2cfc46311946cc172b4bb8afe957141a05123b7d 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -660,8 +660,6 @@ support and &#8220;Lists of&#8221; are not included.
   TS/TE                   Begin/end a tbl block
 
 <span style="display: block; margin-top: -.75em; margin-bottom: -1em;">*Headers/footers</span>
-  BREAK_QUOTE          Manually break a footnoted quote that crosses
-                         a page/column
   DO_FOOTER            Prints footer (after footnote processing, if any)
   FOOTER_ON_FIRST_PAGE Print footer on first page? (boolean)
   FOOTER               Trap-invoked footer macro
@@ -1124,7 +1122,6 @@ support and &#8220;Lists of&#8221; are not included.
   #BQ_LEAD                   Leading of blockquotes
   #BQUOTE_COLOR              Colorize blockquotes? (boolean)
   #BQUOTE_LN                 Number blockquotes? (boolean)
-  #BROKEN_QUOTE              Did we invoke BREAK_QUOTE? (boolean)
   #CAP_HEIGHT_ADJUST         Tallest cap height of strings LEFT, CENTER,
                                and RIGHT in footers; used to place rule
                                over footer
@@ -2460,9 +2457,6 @@ docelement control macros that end in _COLOR.
 <span style="display: block; margin-top: -1.5em; margin-bottom: -2.5em;">+++These aliases are for convenience, and header/footer management+++</span>
 
   BIBLIOGRAPHY_STRING_UNDERSCORE    BIBLIOGRAPHY_STRING_UNDERLINE
-  BREAK_BLOCKQUOTE                  BREAK_QUOTE
-  BREAK_CITATION                    BREAK_QUOTE
-  BREAK_CITE                        BREAK_QUOTE
   CITATION                          BLOCKQUOTE
   CITE                              BLOCKQUOTE
   COL_BREAK                         COL_NEXT
@@ -2740,4 +2734,3 @@ docelement control macros that end in _COLOR.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 9ff40503ae2f968eff74975e54aa348049fae10a..ff3315fd9d6ea060dc315fcab381af697e2502df 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004-2014  Free Software Foundation, Inc. */
+/* Copyright (C) 2004-2018  Free Software Foundation, Inc. */
 /* This file is part of mom, which is part of groff, a free software */
 /* project. */
 
@@ -361,13 +361,13 @@ ul.mini-toc-centered
 .mini-toc-col-1
 {
   float: left ;
-  width: 50% ;
-  margin-left: -6px ;
+  width: 49% ;
+  margin-left: -10px ;
 }
 .mini-toc-col-2
 {
   float: left ;
-  width: 50% ;
+  width: 51% ;
   clear: right ;
 }
 
@@ -376,7 +376,7 @@ ul.mini-toc-centered
 {
   float: left ;
   width: 32% ;
-  height: 52em ;
+  height: 55em ;
   padding-bottom: 9px;
   background-color: #ded4bd ;
   margin-right: 2% ;
@@ -385,7 +385,7 @@ ul.mini-toc-centered
 {
   float: left ;
   width: 32% ;
-  height: 52em ;
+  height: 55em ;
   padding-bottom: 9px;
   background-color: #ded4bd ;
   margin-right: 2% ;
@@ -394,7 +394,7 @@ ul.mini-toc-centered
 {
   float: left ;
   width: 32% ;
-  height: 52em ;
+  height: 55em ;
   padding-bottom: 9px;
   background-color: #ded4bd ;
   margin-bottom: 24px ;
@@ -492,6 +492,7 @@ h3.macro-list
 ul.macro-list
 {
   margin-left: -21px ;
+  padding-right: 12px ;
   list-style-type: none ;
   font-family: arial,sans-serif ;
   margin-top: -1.25em ;
@@ -545,7 +546,7 @@ kbd
 {
   font-family: "Lucida Console",monospace ;
   font-weight: bold ;
-  font-size: 95% ;
+  font-size: 98% ;
 }
 kbd.macro-args
 {
@@ -673,3 +674,14 @@ span.book-title
   font-style: italic ;
 }
 
+dt.params
+{
+  font-style: normal ;
+  font-weight: bold ;
+}
+
+dd.cover-args
+{
+  margin-bottom: .25em; 
+  margin-left: 1.25em ;
+}
index 058b9f82095148b00a789c08af56a0a6b61e55b1..487203912c3d72bc4666720c4859d2e13c881dc3 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -124,7 +124,7 @@ the rest of the document is.  Lastly, if
 printing is enabled, the table of contents respects it.  This
 sometimes leads to tables of contents that begin with the wrong
 margins, but the margins can be corrected either by outputting a
-<a href="#blank-page">BLANKPAGE</a>
+<a href="headfootpage.html#blank-pages">BLANKPAGE</a>
 or by using the control macro
 <a href="#toc-rv-switch">TOC_RV_SWITCH</a>.
 </p>
@@ -181,8 +181,8 @@ desirable for others.
 <p>
 When
 <a href="using.html#pdfmom" style="font-weight: bold">pdfmom</a>
-is used to process files with a table of contents, the macro,
-<kbd>.AUTO_RELOCATE_TOC</kbd>, can be used to reposition the table
+is used to process files with a table of contents, the macro
+<kbd>.AUTO_RELOCATE_TOC</kbd> can be used to reposition the table
 of contents to the top of the output document, with the presence
 of a cover and/or title page sensibly taken into account.  Full
 AUTO_RELOCATE_TOC usage is described in the manual,
@@ -200,6 +200,14 @@ of contents yourself with <strong>psselect</strong>, described
 below.
 </p>
 
+<div class="box-tip">
+<p class="tip">
+<span class="note">Note:</span>
+Note: <kbd>.AUTO_RELOCATE_TOC</kbd> must come before
+<a href="docprocessing.html#start">START</a>.
+</p>
+</div>
+
 <h4 id="psselect" class="docs"><span style="text-transform: none">Using psselect to relocate the Table of Contents in PostScript documents</span></h4>
 
 <p>
@@ -276,7 +284,7 @@ output to a new file.
 </div>
 
 <div class="box-macro-args">
-Macro: <b>TOC</b>
+Macro: <b>TOC</b> <kbd class="macro-args">[ INCLUDE_TITLE ]</kbd>
 </div>
 
 <p>
@@ -284,19 +292,28 @@ If you want a table of contents, just place <kbd>.TOC</kbd> at the
 very end of your document.  Mom takes care of the rest.
 </p>
 
+<p>
+The optional argument, <kbd>INCLUDE_TITLE</kbd>, is needed only
+if your document is standalone, i.e. is not collated, for example
+an essay.  By default, mom does not include the title (and page
+number) of standalone documents in the Table of Contents since it
+is largely redundant.  If you would like her to include the title,
+invoke <kbd>.TOC</kbd> with <kbd>INCLUDE_TITLE</kbd>.
+</p>
+
 <div class="box-tip">
 <p class="tip">
-<span class="tip">Tip:</span>
+<span class="note">Note:</span>
 If the last line of text in a document, before <kbd>.TOC</kbd>,
 falls too close to the bottom margin, or if the line is followed
-by a macro likely to cause a linebreak (eg <kbd>.LIST OFF</kbd> or
+by a macro likely to cause a linebreak (e.g., <kbd>.LIST OFF</kbd> or
 <kbd>.IQ</kbd>), mom may output a superfluous blank page before the
 Table of Contents.
 </p>
 
 <p class="tip-bottom">
 In order to avoid this, insert
-<a href="docprocessing.html#EL"><kbd>.EL</kbd></a>
+<a href="typesetting.html#el"><kbd>.EL</kbd></a>
 after the last line of text, before <kbd>.TOC</kbd> and/or any
 concluding macros.  For example,
 <br/>
@@ -342,19 +359,26 @@ themselves (overall family, headers/footers, pagination, etc).
     <li><a href="#paginate-toc">PAGINATE_TOC</a> &ndash; turn table of contents pagination on or off</li>
     <li><a href="#toc-pagenum-style">TOC_PAGENUM_STYLE</a> &ndash; table of contents page numbering style</li>
   </ul></li>
-  <li><a href="#toc-header">Header string (eg &#8220;Contents&#8221;) and style</a>
+  <li><a href="#toc-header">Header string (e.g., &#8220;Contents&#8221;) and style</a>
   <ul style="margin-left: -.5em;">
-    <li><a href="#toc-header-string">Changing the header string</a>
-    <ul style="margin-left: -.5em;">
-      <li><a href="#toc-header-style">Header string control macros and defaults</a></li>
-    </ul></li>
+    <li><a href="#toc-header-string">Changing the header string</a></li>
+    <li><a href="#toc-header-v-pos">Header string vertical placement</a></li>
+    <li><a href="#toc-header-style">Header string control macros and defaults</a></li>
+    </li>
   </ul></li>
   <li><a href="#toc-style">Entries and reference page number style</a>
   <ul style="margin-left: -.5em;">
     <li><a href="#toc-pn">Reference page numbers style control</a></li>
     <li><a href="#toc-title-style">Title entry style control</a></li>
     <li><a href="#toc-entry-style">Heading entry style control</a></li>
-    <li><a href="#toc-entry-numbers">Controlling the numbering of entries</a></li>
+    <li>Numbering table of contents items
+    <ul style="margin-left: -.75em; list-style: disc">
+      <li><a href="#toc-prefix-ch-number">Prefix chapter/section numbers</a>
+      <ul style="margin-left: -.75em;">
+        <li><a href="#toc-pad-ch-numbers">Pad chapter/section numbers</a></li>
+      </ul></li>
+      <li><a href="#toc-entry-numbers">Numbering heading entries</a></li>
+    </ul></li>
   </ul></li>
   <li><a href="#toc-additional">Additional table of contents control macros</a>
   <ul style="margin-left: -.5em;">
@@ -364,6 +388,7 @@ themselves (overall family, headers/footers, pagination, etc).
     <li><a href="#toc-padding">Establish the number of placeholders to leave for page reference numbers</a></li>
     <li><a href="#toc-rv-switch">Switch tables of contents page margins</a></li>
   </ul></li>
+  <li><a href="#toc-more">I still need more!</a></li>
 </ol>
 </div>
 
@@ -500,7 +525,7 @@ immediately prior to <kbd>.TOC</kbd>.
 </p>
 
 <p>
-A special macro,
+A special macro
 <kbd><a href="#toc-pagenum-style">TOC_PAGENUM_STYLE</a></kbd>
 controls the style of table of contents pagination (ie the actual
 table of contents pages' numbers, not the page number references of
@@ -580,22 +605,50 @@ example
 </span>
 </p>
 
+<h5 id="toc-header-v-pos" class="docs" style="margin-top: 1em; text-transform: none;">Header string vertical placement</h5>
+
+<div id="toc-header-v-pos" class="box-macro-args" style="margin-top: 1em">
+Macro: <b>TOC_HEADER_V_POS</b> <kbd class="macro-args">&lt;distance from top of page&gt;</kbd>
+</div>
+<p class="requires">
+&bull;&nbsp;Requires a <a href="definitions.html#unitofmeasure">unit of measure</a>
+</p>
+
+<p>
+Normally, the TOC header string falls at the same vertical position
+as the
+<a href="definitions.html#docheader">docheader</a>.
+If you&#8217;d like it to fall at a different position, say 2 inches, use
+<br/>
+<span class="pre-in-pp">
+  .TOC_HEADER_V_POS 2i
+</span>
+</p>
+
 <h5 id="toc-header-style" class="docs" style="margin-top: -.5em; text-transform: none;">Header string control macros and defaults</h5>
 
 <div class="defaults-container" style="margin-top: 1em; padding-bottom: 8px;">
 <p class="defaults" style="padding-top: 6px;">
 See
 <a href="docelement.html#control-macro-args">Arguments to the control macros</a>.
+<br/>
+The following TOC_HEADER control macros may also be
+<a href="#grouping">grouped</a>
+using TOC_HEADER_STYLE.
 </p>
 <span class="pre defaults">
 .TOC_HEADER_FAMILY  default = prevailing doc family 
 .TOC_HEADER_FONT    default = bold
 .TOC_HEADER_SIZE    default = +4
 .TOC_HEADER_QUAD    default = left
+.TOC_HEADER_COLOR   default = black
+.TOC_HEADER_CAPS       default = no
+.TOC_HEADER_SMALLCAPS  default = no
+.TOC_HEADER_UNDERSCORE default = none
 </span>
 </div>
 
-<h4 id="toc-style" class="docs" style="margin-top: -1em;">4. Entries and reference page numbers style</h4>
+<h4 id="toc-style" class="docs" style="margin-top: -.5em;">4. Entries and reference page numbers style</h4>
 
 <p>
 &#8220;Entries&#8221; refers to the hierarchical arrangement of
@@ -609,7 +662,7 @@ documents) and headings as they appear in the table of contents:
         Head level 3
           ...
 </span>
-The style for title entries (eg chapter numbers or titles) and
+The style for title entries (e.g., chapter numbers or titles) and
 heading levels is controlled by
 <a href="#toc-title-style">TOC_TITLE_STYLE </a>
 and
@@ -679,7 +732,8 @@ The default is zero.
 
 <p>
 <kbd>CAPS</kbd> instructs mom to capitalize title entries.
-Capitalization may be enabled or disabled on a per-title basis.
+Capitalization may be enabled or disabled on a per-entry-level
+basis.
 </p>
 
 <p>
@@ -773,6 +827,75 @@ or
 </span>
 </p>
 
+<!-- -PREFIX_CHAPTER_NUMBERS- -->
+
+<div id="toc-prefix-ch-number" class="box-macro-args">
+Macro: <b>TOC_PREFIX_CHAPTER_NUMBER</b> <kbd class="macro-args">&lt;none&gt; &lt;anything&gt;</kbd>
+</div>
+<p class="alias" style="margin-bottom: 0;">
+<i>Alias:</i> <b>TOC_PREFIX_SECTION_NUMBER</b>
+</p>
+
+<p>
+By default, mom does not prefix a chapter number to chapters or
+section titles in the table of contents.  If you would like her to
+do so, invoke <kbd>TOC_PREFIX_CHAPTER_NUMBER</kbd> without an
+argument before
+<a href="docprocessing.html#start">START</a>.
+</p>
+
+<p>
+You may subsequently disable the prefixing of chapter numbers by
+supplying the macro with any argument (<b>OFF, QUIT, Q, X</b>...)
+prior to the <kbd>START</kbd> that comes after
+<a href="rectoverso.html#collate">COLLATE</a>.
+</p>
+
+<p>
+This macro is useful you want chapters numbered in the table of
+contents but the chapters themselves are identified by title only.
+It can be used with both
+<a href="docprocessing.html#doctype">DOCTYPE CHAPTER</a>
+and
+<a href="docprocessing.html#doctype">DOCTYPE DEFAULT</a>.
+The alias <b>TOC_PREFIX_SECTION_NUMBER</b> may be preferable
+in the latter case.
+</p>
+
+<!-- -PAD_TOC_CHAPTER_NUMBERS- -->
+
+<div id="toc-pad-ch-numbers" class="box-macro-args">
+Macro: <b>PAD_TOC_CHAPTER_NUMBERS</b> <kbd class="macro-args">&lt;number of chapters&gt;</kbd>
+</div>
+<p class="alias" style="margin-bottom: 0;">
+<i>Alias:</i> <b>PAD_TOC_SECTION_NUMBERS</b>
+</p>
+
+
+<p>
+If the number of chapters or major sections
+(<a href="docprocessing.html#doctype">DOCTYPE DEFAULT</a>)
+exceeds 9, you can have mom pad the numbers so the rightmost
+numerals of the chapter numbers align.  Simply invoke
+<kbd>PAD_TOC_CHAPTER_NUMBERS</kbd> with the number of chapters in
+the document.
+</p>
+
+<p>
+Without padding:
+<br/>
+<span class="pre-in-pp">
+  9. Chapter Title.....................100
+  10. Chapter Title....................123
+</span>
+With padding:
+<br/>
+<span class="pre-in-pp">
+   9. Chapter Title....................100
+  10. Chapter Title....................123
+</span>
+</p>
+
 <!-- -TOC_ENTRY_NUMBERS- -->
 
 <div id="toc-entry-numbers" class="box-macro-args">
@@ -830,10 +953,13 @@ completely.
 <div class="box-tip">
 <p class="tip">
 <span class="note">Note:</span>
-<kbd>.TOC_ENTRY_NUMBER TRUNCATE</kbd> removes the numbering
-associated with title entries if
+<kbd>.TOC_ENTRY_NUMBERS TRUNCATE</kbd> removes the numbering
+associated with table of contents chapter or section titles
+when
 <a href="docelement.html#prefix-chapter-number">PREFIX_CHAPTER_NUMBER</a>
-is enabled.
+is enabled.  To enable the numbering of chapter or section titles
+in this circumstance, use
+<a href="#toc-prefix-ch-number"><kbd>TOC_PREFIX_CHAPTER_NUMBER</kbd></a>.
 </p>
 </div>
 
@@ -981,7 +1107,60 @@ page when you want an odd, or vice versa.
 
 <p>
 The same result can be accomplished by outputting a
-<a href="#blank-page">BLANKPAGE</a>.
+<a href="headfootpage.html#blank-pages">BLANKPAGE</a>.
+</p>
+
+<h4 id="toc-more" class="docs" style="margin-top: -.5em;">6. I still need more!</h4>
+
+<p>
+If there is some aspect of Table of Contents formatting for which
+no TOC control macros are provided, mom has a special
+<a href="definitions.html#toggle">toggle macro</a>
+to help out: TOC_PAGE_SETTINGS.
+</p>
+
+<p>
+TOC_PAGE_SETTINGS allows you to enter extra formatting changes for
+the Table of Contents as if it were simply another collated section
+or chapter of a document.  Because it&#8217;s a toggle macro,
+invoking it by itself begins collecting your formatting directives,
+and invoking it with any argument (<b>OFF, QUIT, END</b>...) stops
+the collection.
+</p>
+
+<p>
+TOC_PAGE_SETTINGS is special in that the formatting commands
+contained within it must be preceded by <kbd>\!</kbd> (that&#8217;s
+backslash-exclamation point).
+</p>
+
+<p id="toc-page-settings-example">
+For example, say you want to redesign the default page headers for
+the Tables of Contents so that it only contains the document title
+on the left and &#8220;Contents&#8221; in italics on the right, and
+furthermore adjust the footer margin and footer gap, this is how
+you&#8217;d do it:
+<br/>
+<span class="pre-in-pp">
+  .TOC_PAGE_SETTINGS
+  \!.HEADER_RECTO L "^\E*[$TITLE]#\*[IT]Contents\*[PREV]^"
+  \!.FOOTER_MARGIN 3P
+  \!.B_MARGIN 6P+3p
+  .TOC_PAGE_SETTINGS END
+</span>
+(For an explanation of why the example uses <kbd>.B_MARGIN</kbd> to
+set/change the footer gap, see
+<a href="headfootpage.html#gap-note">here</a>.)
+</p>
+
+<p>
+TOC_PAGE_SETTINGS can be put in the stylesheet section of a document
+(ie after
+<a href="docprocessing.html#printstyle">PRINTSTYLE</a>
+and before
+<a href="docprocessing.html#start">START</a>)
+or invoked just before
+<a href="#toc">TOC</a>.
 </p>
 
 <div class="rule-long"><hr/></div>
@@ -1001,5 +1180,3 @@ The same result can be accomplished by outputting a
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
-
index da3b6b0e9ce64f503442fa6690b8df6f90da7f3c..eb1df1dc6fad9c50b470b6095c16d2f394e0cb30 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -20,7 +20,7 @@ FDL in the main directory of the groff source package.
 
 <head>
   <meta http-equiv="content-type" content="text/html;charset=utf-8"/>
-  <title>Mom, version 2.1-c_1 -- Table of Contents</title>
+  <title>Mom, version 2.4 -- Table of Contents</title>
   <link rel="stylesheet" type="text/css" href="stylesheet.css" />
 </head>
 
@@ -31,7 +31,7 @@ FDL in the main directory of the groff source package.
 <div class="page">
 
   <div class="version">
-    mom, version 2.1-c_1
+    mom, version 2.4
   </div>
 
 <h1 class="toc" style="margin-top: 9px;">Table of Contents</h1>
@@ -47,6 +47,7 @@ FDL in the main directory of the groff source package.
     <a href="#full-toc">Full Table of Contents</a>.
     <br/>
     If you've been using mom for a while, you may prefer the
+    <br/>
     <a href="macrolist.html#top">Quick Reference Guide</a>.
     </p>
 
@@ -94,6 +95,7 @@ FDL in the main directory of the groff source package.
     <ul class="toc" style="margin-left: 3em;">
       <li><a href="#doc-proc">Introduction to document processing</a></li>
       <li><a href="#doc-defaults">Document defaults</a></li>
+      <li><a href="#vert-ws">Vertical whitespace management</a></li>
       <li><a href="#prelim">Preliminary document setup</a></li>
       <li><a href="#typemacdoc">Behaviour of the typesetting macros during document processing</a></li>
       <li><a href="#tags">The document element tags</a> &ndash; headings, paragraphs, quotes, footnotes, etc.</li>
@@ -263,9 +265,10 @@ FDL in the main directory of the groff source package.
   <ul class="toc">
     <li><a href="docprocessing.html#docprocessing-intro">5.1 Introduction to document processing</a></li>
     <li><a id="doc-defaults" href="docprocessing.html#defaults">5.2 Document defaults</a> &ndash; papersize, margins, etc.
-      <ul>
-        <li><a href="docprocessing.html#leading-note">5.2.1 Important note on leading/spacing and bottom margins</a></li>
-        <li><a href="docprocessing.html#shim">5.2.1 The SHIM macro</a> &ndash; flexible spacer to keep document leading back on track</li>
+      <li><a id="vert-ws" href="docprocessing.html#vertical-whitespace-management">5.3 Vertical whitespace management</a>
+        <ul>
+        <li><a id="typemacdoc" href="docprocessing.html#shim">5.3.1 SHIM</a></li>
+        <li><a href="docprocessing.html#flex">5.3.2 FLEX</a>
       </ul></li>
     <li><a id="prelim" href="docprocessing.html#setup" class="highlight">5.3 PRELIMINARY DOCUMENT SETUP</a>
       <ul>
@@ -288,7 +291,10 @@ FDL in the main directory of the groff source package.
           </ul></li>
         <li><a href="docprocessing.html#docstyle-macros">5.3.3 The docstyle macros</a> &ndash; base templates; what kind of document you're creating, how you want it to look overall
           <ul>
-            <li><a href="docprocessing.html#doctype">5.3.3.1 DOCTYPE</a> &ndash; the kind of document</li>
+            <li><a href="docprocessing.html#doctype">5.3.3.1 DOCTYPE</a> &ndash; the kind of document (default, chapter, named, letter)
+            <ul style="list-style-type: circle">
+              <li><a href="docprocessing.html#slides">DOCTYPE SLIDES</a></li>
+            </ul></li>
             <li><a href="docprocessing.html#printstyle">5.3.3.2 PRINTSTYLE</a> &ndash; typeset or &#8220;typewritten, double-spaced&#8221;</li>
             <li><a href="docprocessing.html#copystyle">5.3.3.3 COPYSTYLE</a> &ndash; draft or final</li>
           </ul></li>
@@ -310,20 +316,14 @@ FDL in the main directory of the groff source package.
               </ul></li>
             <li><a href="docprocessing.html#doc-lead-adjust">5.3.7.2  DOC_LEAD_ADJUST</a> &ndash; adjust document
                 <a href="definitions.html#leading">leading</a>
-                to fill pages
-            <ul class="fourth-level">
-              <li>&ndash; <a href="docprocessing.html#shim">5.3.6.7.1 SHIM</a> &ndash; flexible spacer to keep document leading back on track</li>
-            </ul></li>
-        </ul></li>
+                to fill pages</li>
+            </ul>
       <li><a href="docprocessing.html#style-after-start">5.3.8 Changing basic type and formatting parameters <span style="font-style: italic">after</span> START</a>
         <ul>
           <li><a id="typemacdoc" href="docprocessing.html#behaviour">5.3.8.1 Behaviour of the typesetting macros during document processing</a></li>
           <li><a href="docprocessing.html#intro-doc-param">5.3.8.2 Post-START global style-change macros</a>
-          <ul class="fourth-level">
-            <li>&ndash; <a href="docprocessing.html#index-doc-param">Macro list</a></li>
           </ul></li>
         </ul></li>
-      </ul></li>
       <li><a id="tags" class="highlight" href="docelement.html#top">5.4 THE DOCUMENT ELEMENT TAGS</a>
         <ul>
           <li><a href="docelement.html#docelement-intro">5.4.1 Introduction to the document element tags</a>
@@ -457,5 +457,3 @@ FDL in the main directory of the groff source package.
 
 </body>
 </html>
-
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 3a8722a0f8804a3d73ec0bd7ad38ade01a5e58b6..fc7116539544c3bd5420347554e5b954210dd166 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -109,9 +109,9 @@ FDL in the main directory of the groff source package.
     <li class="item"><a href="inlines.html#index-inlines">List of inline escapes</a>
     </li>
   </ul></li>
-  <li class="list-head"><a href="color.html#colored-text-intro">Coloured text</a>
+  <li class="list-head"><a href="color.html">Coloured text</a>
   <ul class="no-enumerator">
-    <li class="item"><a href="color.html#colored-text-macros">Macro list</a></li>
+    <li class="item"><a href="color.html#index-color">Macro list</a></li>
   </ul></li>
 </ul>
 </div>
@@ -197,7 +197,7 @@ have to worry about them.
 
 <p>
 Mom documents processed directly with <strong>groff</strong>, or with
-<strong>pdfroff</strong>, or with <strong>pdfmom -Tps</strong>, require
+<strong>pdfroff</strong>, or with <strong>pdfmom&nbsp;&#8209;Tps</strong>, require
 that the papersize be given on the command line as well if the
 papersize is different from the default on your system.  You can
 verify&mdash;or change&mdash;the default papersize by inspecting the
@@ -236,7 +236,7 @@ or
 or
 <a href="#page">PAGE</a>),
 you must include <kbd>-P-p&lt;papersize&gt;</kbd> on whichever
-command line you use, eg
+command line you use, e.g.,
 <br/>
 <span class="pre-in-pp">
   pdfmom -Tps -mom -P-plegal
@@ -504,7 +504,7 @@ and right margin, like this:
 That way, you don&#8217;t have to worry about calculating the line
 length.  On the other hand, if you know the line length for a patch
 of type should be 17 picas and 3 points, entering the line length
-with LL is much easier than calculating the right margin, eg
+with LL is much easier than calculating the right margin, e.g.,
 <br/>
 <span class="pre-in-pp">
   .LL 17P+3p
@@ -1106,7 +1106,7 @@ is measured in points.  Therefore, to change the type size to, say,
 <span class="pre-in-pp">
   .PT_SIZE 11
 </span>
-Point sizes may be fractional (e 10.25 or 12.5).
+Point sizes may be fractional (e.g., 10.25 or 12.5).
 </p>
 
 <p>
@@ -1170,7 +1170,7 @@ Macro: <b>LS</b> <kbd class="macro-args">&lt;distance between lines&gt;</kbd>
 <p>
 LS (Line Space) takes one argument: the distance you want, typically
 in points, from baseline to baseline of type.  The argument may be
-fractional (eg 12.25 or 14.5).  Like PT_SIZE, LS does not require
+fractional (e.g., 12.25 or 14.5).  Like PT_SIZE, LS does not require
 a unit of measure, since
 <a href="definitions.html#leading">leading</a>
 is most often given in points.  Therefore, to set the linespace to
@@ -1241,7 +1241,7 @@ requests automatically update the linespacing by the autolead amount.
 Used in this way, AUTOLEAD does not require a unit of measure;
 points is assumed.  However, you may use an alternate unit of
 measure by appending it to the argument.  The argument may be a
-decimal fraction (eg .5 or 2.75).
+decimal fraction (e.g., .5 or 2.75).
 </p>
 
 <p>
@@ -1348,7 +1348,7 @@ groff&#8217;s
 <a href="inlines.html#inline-stringwidth-groff"><kbd>\w</kbd></a>
 escape as the argument to LL, like this:
 <br/>
-<span class="pre=in-pp">
+<span class="pre-in-pp">
   .LL +\w'.'u
 </span>
 The above example increases the current line length by the width of
@@ -1359,8 +1359,8 @@ a period.  Notice that you must append the
 
 <div class="box-tip">
 <p class="tip">
-<span class="note">Note:</span> The right margin macro,
-<a href="#r-margin">(R_MARGIN)</a>,
+<span class="note">Note:</span> The right margin macro
+<a href="#r-margin">(R_MARGIN)</a>
 can also be used to set line length.
 </p>
 </div>
@@ -1663,11 +1663,6 @@ with the
 <span style="font-style: normal;">
 <kbd>\c</kbd> inline escape.
 </span>
-See
-<span style="font-style: normal;">
-<a href="#el-notes">NOTES</a>,
-</span>
-below.
 </p>
 
 <p style="margin-top: -.5em">
@@ -2175,7 +2170,7 @@ explicit hyphens (ie the actual hyphen character) do not.
 
 <p>
 HY MARGIN sets the amount of room allowed at the end of a line
-before hyphenation is tripped (eg if there&#8217;s only 6 points
+before hyphenation is tripped (e.g., if there&#8217;s only 6 points
 left at the end of a line, groff won&#8217;t try to hyphenate the
 next word).  HY MARGIN only applies if you&#8217;re using
 <a href="#quad">QUAD</a>,
@@ -2325,7 +2320,7 @@ Macro: <b>RW</b> <kbd class="macro-args">&lt;amount of whitespace reduction betw
 
 <p>
 RW (<span style="text-decoration: underline;">R</span>educe <span style="text-decoration: underline;">W</span>hitespace)
-and its corresponding macro,
+and its corresponding macro
 EW (<span style="text-decoration: underline;">E</span>xpand <span style="text-decoration: underline;">W</span>hitespace),
 allow you to tighten (or loosen)
 <a href="definitions.html#outputline">output lines</a>
@@ -2499,7 +2494,7 @@ Macro: <b>KERN</b> <kbd class="macro-args">toggle</kbd>
 <p>
 By itself (ie with no argument), KERN turns automatic pairwise
 <a href="definitions.html#kern">kerning</a>
-on.  With any argument (eg OFF, Q, X), pairwise kerning is turned
+on.  With any argument (e.g., OFF, Q, X), pairwise kerning is turned
 off.
 </p>
 
@@ -2590,6 +2585,11 @@ large patches of type in a faked font look typographically cheap.
     <li><a href="#extend">EXTEND</a> &ndash; percentage for pseudo-extended type</li>
     <li><a href="#ext-inline">\*[EXT]</a> &ndash; inline escape for pseudo-extending</li>
   </ul></li>
+  <li>Smallcaps
+  <ul style="list-style: none; margin-left: -1em;">
+    <li><a href="#smallcaps">SMALLCAPS</a> &ndash; enable smallcaps</li>
+    <li><a href="#smallcaps-style">SMALLCAPS_STYLE</a> &ndash; size, weight, and width of smallcaps</li>
+  </ul></li>
 </ul>
 </div>
 
@@ -2933,10 +2933,7 @@ embedded in text lines, like this:
 </span>
 <kbd>\*[EXT]</kbd> remains in effect until you turn it off with
 <kbd>\*[EXTX]</kbd>.
-</p>
-
-<div class="box-important">
-<p class="tip">
+</p> <div class="box-important"> <p class="tip">
 <span class="important">IMPORTANT:</span> You must turn
 <kbd>\*[EXT]</kbd> off before making any changes to the point size
 of your type, either via the
@@ -2958,6 +2955,108 @@ mom ignores <kbd>\*[EXT]</kbd> requests.
 </p>
 </div>
 
+<!-- SMALLCAPS -->
+
+<div class="macro-id-overline">
+<h3 id="smallcaps" class="macro-id">Smallcaps</h3>
+</div>
+
+<div class="box-macro-args">
+Macro: <b>SMALLCAPS</b> <kbd class="macro-args">&lt;toggle&gt;</kbd>
+</div>
+
+<p>
+To begin setting type in pseudo-smallcaps, simply invoke
+<kbd>.SMALLCAPS</kbd>.  When you no longer want them, invoke
+<kbd>SMALLCAPS&nbsp;OFF</kbd> (or <kbd>END</kbd>, <kbd>STOP</kbd>,
+<kbd>DONE</kbd>, etc).  If you are currently in a
+<a href="definitions.html#filled">no-fill mode</a>,
+(i.e. <kbd>.LEFT</kbd>, <kbd>.CENTER</kbd>, or <kbd>.RIGHT</kbd>)
+and you want the smallcaps to continue on the same line,
+append a <kbd>\c</kbd> to the line, like this
+<br/>
+<span class="pre-in-pp">
+  A line of type\c
+  .SMALLCAPS
+  with a few words in smallcaps.
+  .SMALLCAPS OFF
+</span>
+The line preceding <kbd>.SMALLCAPS OFF</kbd> should also have a
+<kbd>\c</kbd> appended to it if you wish it to continue unbroken.
+</p>
+
+<div class="box-tip">
+<p class="tip-top">
+<span class="note">Note:</span>
+SMALLCAPS does not have an inline equivalent to
+<a href="inlines.html#uc-lc"><kbd>\*[UC]</kbd> / <kbd>\*[LC]</kbd></a>.
+Furthermore, if you&#8217;re using the
+<a href="docprocessing.html#docprocessing">document processing macros</a>
+with
+<a href="docprocessing.html#printstyle">PRINTSTYLE TYPEWRITE</a>,
+mom ignores SMALLCAPS.
+</p>
+
+<p class="tip-bottom">
+Additionally, be aware that no automatic
+<a href="definitions.html#kern">kerning</a>
+takes place while pseudo-smallcaps are in effect.
+</p>
+</div>
+
+<div class="macro-id-overline">
+<h3 id="smallcaps-style" class="macro-id">Set size, weight, and width of smallcaps</h3>
+</div>
+
+<div class="box-macro-args">
+Macro: <b>SMALLCAPS_STYLE</b> <kbd class="macro-args">SIZE &lt;percentage&gt; WEIGHT_ADJ &lt;percentage&gt; EXTEND &lt;percentage&gt;</kbd>
+</div>
+
+<p>
+True smallcaps are not a font effect, but, like designer cuts of
+bold, condensed, and extended, actual fonts provided with some
+families.  It is highly recommended that you acquire real smallcaps
+fonts rather than relying on mom's pseudo version.
+</p>
+
+<p>
+To achieve a reasonable facsimile of designer-cut smallcaps fonts,
+mom needs to know the percentage of regular caps at a given point
+size by which to reduce the small caps.  To make adjustments for
+the difference in weight and width of the smaller caps, she also
+needs to know by how much to embolden (&#8220;fatten&#8221;) the
+smallcaps, and by how much to increase their width.
+</p>
+
+<p>
+All three arguments to SMALLCAPS_STYLE reflect a
+percentage of the point size in effect when
+<a href="#smallcaps">SMALLCAPS</a>
+is invoked.  Mom&#8217;s defaults for pseudo-smallcaps are:
+<br/>
+<span class="pre-in-pp">
+  SIZE       = 74%
+  WEIGHT_ADJ = .3%
+  EXTEND     = 5%
+</span>
+To change any or all of the defaults, you might enter
+<br/>
+<span class="pre-in-pp">
+  .SMALLCAPS_STYLE SIZE 80 WEIGHT_ADJ .25 EXTEND 3
+</span>
+or, more readably,
+<br/>
+<span class="pre-in-pp">
+  .SMALLCAPS_STYLE 
+  SIZE 80 \
+  WEIGHT_ADJ .25 \
+  EXTEND 3
+</span>
+Note that you do not have to give SMALLCAPS_STYLE all three
+arguments, and that the arguments may be entered in any order.  Any
+arguments you omit will remain at their former value.
+</p>
+
 <div class="rule-short" style="margin-bottom: 24px;"><hr/></div>
 
 <!-- ==================================================================== -->
@@ -3692,7 +3791,7 @@ string tab markers.
 </span>
 String tab 1 begins at the start of the line and ends after the word
 &#8220;time&#8221;.  String tab 2 starts at &#8220;good&#8221; and
-ends after &#8220;men&#8221;.  Inline escapes (eg font or point
+ends after &#8220;men&#8221;.  Inline escapes (e.g., font or point
 size changes, or horizontal movements, including
 <a href="goodies.html#pad">padding</a>)
 are taken into account when mom determines the position and length
@@ -4083,6 +4182,20 @@ macro in the
 </p>
 </div>
 
+<div class="box-tip">
+<p class="tip">
+<span class="note">Additional Note:</span>
+Do not use multi-columns with
+<a href="docprocessing.html#slide">DOCTYPE SLIDES</a>
+because MCX uses the lowest line on the page to determine column
+depth.  Owing to the fact that both headers and footers are printed
+prior to slides receiving text, MCX will always go to the
+footer position.  If you need functionality similar to MCO/MCX, use
+the groff requests <kbd>.mk</kbd> and <kbd>.rt</kbd>.  See
+<kbd>info groff --index-search=mk</kbd>.
+</p>
+</div>
+
 <div id="index-multicolumns" class="macro-list-container">
 <h3 class="macro-list">Multi-columns macros</h3>
 
@@ -4430,8 +4543,8 @@ indents text by the width of the word &#8220;margarine&#8221;.
 </p>
 
 <p>
-With no argument, IL indents by its last active value.  See the
-<a href="#indents-explanation">brief explanation of how mom handles indents</a>
+With no argument, IL after an ILX indents by its last active value.  See the
+<a href="#indents-handling">explanation of how mom handles indents</a>
 for more details.
 </p>
 
@@ -4482,8 +4595,8 @@ indents text by the width of the word &#8220;jello&#8221;.
 </p>
 
 <p>
-With no argument, IR indents by its last active value.  See the
-<a href="#indents-explanation">brief explanation of how mom handles indents</a>
+With no argument, IR after an IRX indents by its last active value.  See the
+<a href="#indents-handling">explanation of how mom handles indents</a>
 for more details.
 </p>
 
@@ -4507,7 +4620,7 @@ automatically turns off IB.
 </div>
 
 <div class="box-macro-args">
-Macro: <b>IB</b> <kbd class="macro-args">[ &lt;left measure&gt; &lt;right measure&gt; ]</kbd>
+Macro: <b>IB</b> <kbd class="macro-args">[ &lt;indent-1&gt; &lt;indent-2&gt; ]</kbd>
 </div>
 <p class="requires">
 &bull;&nbsp;The optional arguments require a <a href="definitions.html#unitofmeasure">unit of measure</a>
@@ -4519,18 +4632,20 @@ time.
 </p>
 
 <p>
-At its first invocation, you must supply a measure for both indents;
-at subsequent invocations when you wish to supply a measure, both
-must be given again.  As with IL and IR, the measures are added to
-the values previously passed to the macro.  Hence, if you wish to
-change just one of the values, you must give an argument of zero to
-the other.
+If you supply only an <kbd>indent-1</kbd> argument, the argument is
+the amount to indent from both the left and right margins.  If you
+give both <kbd>indent-1</kbd> and <kbd>indent-2</kbd>, the first is
+the indent from the left margin and the second is the indent from
+the right margin.
 </p>
 
 <p>
-A word of advice: If you need to manipulate left and right
-indents separately, use a combination of IL and IR instead of IB.
-You&#8217;ll save yourself a lot of grief.
+As with IL and IR, the measures are added to the values previously
+passed to the macro.  Hence, if you wish to change just one of the
+values, you must give an argument of zero to the other.  (A word of
+advice: If you need to manipulate left and right indents separately,
+use a combination of IL and IR instead of IB.  You&#8217;ll save
+yourself a lot of grief.)
 </p>
 
 <p>
@@ -4549,9 +4664,9 @@ and right indents by the width of &#8220;jello&#8221;.
 </p>
 
 <p>
-Like IL and IR, IB with no argument indents by its last active
-values.  See the
-<a href="#indents-explanation">brief explanation of how mom handles indents</a>
+Like IL and IR, IB with no argument after an IBX indents by its
+last active values.  See the
+<a href="#indents-handling">explanation of how mom handles indents</a>
 for more details.
 </p>
 
@@ -4827,4 +4942,3 @@ quits and clears the values for all indent styles at once.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 341efcd23de66a01084c8469be0401c09117f505..851d6377627d7bf08b0de402c474e556d487e4d8 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -154,7 +154,7 @@ flyer for your lost dog, the following apply.
   <li>
     <a href="definitions.html#stringargument">String arguments</a>,
     in the sense of this manual, must be surrounded by double-quotes
-    (eg <kbd>"text"</kbd>).  Multiple
+    (e.g., <kbd>"text"</kbd>).  Multiple
     string arguments are separated from each other by spaces (with
     each argument surrounded by double-quotes).
     <br/>
@@ -210,7 +210,7 @@ You may also, if you wish, add a comment to the end of a line with
 <h2 id="viewing" class="docs">Processing and viewing documents</h2>
 
 <p>
-The most basic command line usage for processing a file formatted
+The most basic command-line usage for processing a file formatted
 with the mom macros is
 <br/>
 <span class="pre-in-pp">
@@ -256,7 +256,7 @@ it:
   pdfmom filename.mom &gt; filename.pdf
 </span>
 <strong>pdfmom</strong> is a wrapper around groff, and accepts all
-groff's command line options as listed in the groff manpage.
+groff's command-line options as listed in the groff manpage.
 Full usage is explained in the manual,
 <a href="http://www.schaffter.ca/mom/pdf/mom-pdf.pdf"><span class="book-title">Producing PDFs with groff and mom</span></a>.
 </p>
@@ -286,12 +286,12 @@ metadata, notably the document window title set with PDF_TITLE.
 
 <p>
 Most PDF viewers have a &#8220;Watch File&#8221; option, which
-automaticaly updates a displayed document whenever there's a change.
-This is useful when preparing documents that require judgment calls.
-I recommend creating a keymapping in your text editor that both
-saves the mom file and processes it with <strong>pdfmom</strong>.
-The displayed PDF then automatically reflects whatever changes you
-save to the mom file.
+automaticaly updates a displayed document whenever there&#8217;s
+a change.  This is useful when preparing documents that require
+judgment calls.  I recommend creating a keymapping in your
+text editor that both saves the mom file and processes it with
+<strong>pdfmom</strong>.  The displayed PDF then automatically
+reflects whatever changes you save to the mom file.
 </p>
 
 <div class="rule-long"><hr/></div>
@@ -311,4 +311,3 @@ save to the mom file.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index ce50adc545c70d389ccf25cf5ddcc95b6c7eb0a4..d3908e2cb0604035e7f920787b71a427e082d16b 100644 (file)
@@ -2,14 +2,14 @@
 <!--
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 Written by Peter Schaffter (peter@schaffter.ca).
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this comment section, with no Front-Cover
-Texts, and with no Back-Cover Texts.
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -54,8 +54,9 @@ FDL in the main directory of the groff source package.
     <li><a href="#headings">2.3 Headings</a></li>
     <li><a href="#margin-notes">2.4 Margin notes</a></li>
     <li><a href="#floats">2.5 Floats</a></li>
-    <li><a href="#table-of-contents">2.5 Table of contents</a></li>
+    <li><a href="#table-of-contents">2.5 Tables of contents</a></li>
   </ul></li>
+  <li><a href="#v2.1-changes">Version 2.1 changes</a></li>
   <li><a href="#pdfmom">The <strong>pdfmom</strong> wrapper around groff</a></li>
   <li><a href="#install-font">The <strong>install-font.sh</strong> script</a></li>
 </ol>
@@ -101,7 +102,7 @@ if their 1.x defaults are not desired.
 In conjunction with the changes to nested heads, Table of Contents
 generation has also been rethought.  Greater flexibility in the
 inclusion of toc entry numbering been added.  Like nested heads,
-there&#8217;s a new macro, <kbd>TOC_ENTRY_STYLE</kbd>, that permits
+there&#8217;s a new macro <kbd>TOC_ENTRY_STYLE</kbd> that permits
 styling of each level in the toc hierarchy separately.  The default
 overall layout has also been significantly improved, achieving a
 level of typographical elegance formerly lacking.  Best of all, the
@@ -149,7 +150,7 @@ has been added to the documentation.  The file,
 <strong>mom-pdf.pdf</strong> can be found in
 <br/>
 <span class="pre-in-pp">
-  /usr/local/share/doc/groff-1.21/pdf/
+  /usr/local/share/doc/groff-&lt;version&gt;/pdf/
 </span>
 or
 <br/>
@@ -168,7 +169,7 @@ integral part of the present documentation.  In addition, the mom
 source file for the manual can be found in
 <br/>
 <span class="pre-in-pp">
-  /usr/local/share/doc/groff-1.21/examples/mom
+  /usr/local/share/doc/groff-&lt;version&gt;/examples/mom
 </span>
 or
 <br/>
@@ -213,7 +214,7 @@ The 1.x macros
 <span class="pre-in-pp">
   HEAD SUBHEAD SUBSUBHEAD
 </span>
-are now deprecated and have been replaced by a single macro,
+are now deprecated and have been replaced by a single macro
 <br/>
 <span class="pre-in-pp">
   <a href="docelement.html#heading"><kbd>HEADING &lt;n&gt;</kbd></a>
@@ -228,7 +229,7 @@ destination.
 </p>
 
 <p>
-Styling of headings is managed by a single macro,
+Styling of headings is managed by a single macro
 <br/>
 <span class="pre-in-pp">
   <a href="docelement.html#heading"><kbd>HEADING_STYLE &lt;n&gt;</kbd></a>
@@ -276,7 +277,7 @@ top of the next page.  An <kbd>ADJUST</kbd> argument to FLOAT allows
 for optical centering.
 </p>
 
-<h3 id="table-of-contents" class="docs">2.6. Table of contents</h3>
+<h3 id="table-of-contents" class="docs">2.6. Tables of contents</h3>
 
 <p>
 The default look of the Table of Contents has been overhauled to
@@ -321,7 +322,70 @@ the mom source file is processed with
 <a href="pdfmom"><strong>pdfmom</strong></a>.
 </p>
 
-<h2 id="pdfmom" class="docs">3. pdfmom</h2>
+<h2 id="v2.1-changes" class="docs">3. Version 2.1 changes</h2>
+
+<p>
+Version 2.1 adds these features:
+</p>
+<ul style="margin-top: -.5em; width: 90%">
+  <li>expansion of cover, docheader, page header, and heading
+  control macros to permit caps, smallcaps, color, and
+  underscoring</li>
+  <li>the ability to style every element appearing in docheaders and
+  automatically-generated cover/title pages separately</li>
+  <li>macros to place images on cover/title pages</li>
+  <li>a new macro COVERTEXT that allows adding text (e.g. an
+  Abstract) to automatically-generated cover/title pages or to
+  create cover/title pages entirely by hand</li>
+  <li>separate indent control macros for QUOTES and BLOCKQUOTES</li>
+  <li>pseudo-smallcaps, including a control macro to choose the
+  size, weight, and width of the small caps</li>
+  <li>new &lt;element&gt;_STYLE macros that allow setting
+  parameters for &lt;element&gt; with a single macro using
+  keyword/value pairs</li>
+</ul>
+
+<p>
+The following changes have been made:
+</p>
+
+<ul style="margin-top: -.5em; width: 90%">
+  <li>MISC_AUTOLEAD (including COVER_MISC_AUTOLEAD and
+  DOC_COVER_MISC_AUTOLEAD) has been replaced in favour of MISC_LEAD,
+  which takes an absolute leading value, rather than one derived
+  from the point size</li>
+  <li>COVER_UNDERLINE and DOC_COVER_UNDERLINE have been
+  removed in favour of COVER_DOCTYPE_UNDERLINE and
+  DOC_COVER_DOCTYPE_UNDERLINE</li>
+  <li>DOCTYPE NAMED &lt;string&gt; no longer accepts a color
+  argument; setting the color for &lt;string&gt; is accomplished with
+  DOCTYPE_COLOR &lt;color&gt;; in addition, the string now has a
+  complete set of control macros</li>
+  <li>default underscoring of the DOCTYPE NAMED string has been
+  removed, both in the docheader and on cover/title pages</li>
+  <li>no cover/title page data persists, however formatting for the
+  elements on them does</li>
+</ul>
+
+<h2 id="v2.1-changes" class="docs">3. Version 2.2 changes</h2>
+
+<p>
+Version 2.2 adds these features:
+</p>
+<ul style="margin-top: -.5em; width: 90%">
+  <li>flex-spacing, an alternative to mom&#8217;s default shimming
+  policy; flex-spacing balances vertical whitespace on the page by
+  distributing any excess equally at sensible points so that running
+  text always fills the page to the bottom margin (see
+  <a href="docprocessing.html#vertical-whitespace-management">
+    vertical whitespace management</a>
+  </li>
+  <li>improvements to auto-labelling, such that it is now possible
+  to link symbollically to auto-labelled preprocessor material and
+  PDF images</li>
+</ul>
+
+<h2 id="pdfmom" class="docs">4. pdfmom</h2>
 
 <p>
 Deri James has provided <strong>pdfmom</strong>, a wrapper around
@@ -339,7 +403,7 @@ recognizes PDF images that have been embedded with
 <a href="images.html#pdf-image"><kbd>PDF_IMAGE</kbd></a>.
 </p>
 
-<h2 id="install-font" class="docs">4. install-font.sh</h2>
+<h2 id="install-font" class="docs">5. install-font.sh</h2>
 
 <p>
 A bash script, <strong>install-font.sh</strong>, has been posted at the
@@ -376,4 +440,3 @@ desired.
 
 </body>
 </html>
-<!-- vim: fileencoding=utf-8: nomodified: -->
index 762c8480dae35e7e84cc34791d2468f771b7c37e..ee31e698869ee30a5242531b0dc6f969cb0a53fa 100644 (file)
@@ -1,8 +1,7 @@
-.\" -*- nroff -*-      om.tmac
 .ig
 Mom -- a typesetting/document-processing macro set for groff.
 
-Copyright (C) 2002-2014  Free Software Foundation, Inc.
+Copyright (C) 2002-2018  Free Software Foundation, Inc.
  Written by Peter Schaffter <peter@schaffter.ca>
  PDF integration contributed by Deri James <deri.james@chuzzlewit.co.uk>
 
@@ -21,16 +20,16 @@ for more details.
 You should have received a copy of the GNU General Public License
 along with this program. If not, see <http://www.gnu.org/licenses/>.
 
-Version 2.1-c_1
----------------
-Antoine de St-Exupéry asserted that elegance in engineering is
+Version 2.4
+-----------
+Antoine de St-Exupéry asserted that elegance in engineering is
 achieved not when there is nothing left to add, but when there is
 nothing left to take away.
 
 By those standards, mom is a Rube Goldberg contraption.  She was
 created over the years while groff, and my understanding of it,
 changed and evolved.  However, I'm a firm believer in "if it ain't
-broke, don't fix it."  Version 2.0 removes some of the redundancies
+broke, don't fix it."  Version 2.0 removed some of the redundancies
 and cruft, but mom still needs some nip and tuck.
 
 "<anything>" in the description of arguments that can be passed
@@ -40,20 +39,29 @@ Thanks to everyone who has contributed suggestions and patches,
 and to those whose GPL'd work has been plundered.  Special thanks
 to Werner Lemberg (margin notes), Tadziu Hoffman (underlining),
 Deri James (pdf integration), Robin Haberkorn (tbl integration, eqn
-extentions, and float management).
+extensions, and float management).
 ..
 .\" %beginstrip%
 \#
 \# ====================================================================
 \#
-\# Check which version of groff is being run
-.if (\n[.x]\n[.y] < 118) \
-.   ab [mom]: You need GNU troff version 1.18 or higher to run this version of mom.
+.if \n(.C \
+.   ab [mom]: The groff mom macros do not work in compatibility mode.
 \# Check that GNU troff is being run
 .if !\n[.g]=1 \
 .   ab [mom]: The mom macros require that you be running GNU troff.
-.if \n[.C] \
-.   ab [mom]: The groff mom macros do not work in compatibility mode.
+\# Check which version of groff is being run
+.if (\n[.x]\n[.y] < 118) \
+.   ab [mom]: You need GNU troff version 1.18 or higher to run this version of mom.
+\# Mom version
+.ds version 2.4
+.if dVERSION \{\
+.   ab [mom]: Version \*[version]
+.\}
+\# Groff revision
+.ds short_revision \n[.Y]
+.substring short_revision 0 0
+\#
 \# Add supplementary styles
 .sty \n[.fp] UL      \"  Ultra Light
 .sty \n[.fp] ULI     \"  Ultra Light Italic
@@ -155,7 +163,7 @@ extentions, and float management).
 .sty \n[.fp] UBLI    \"  Ultra Black Italic
 .sty \n[.fp] UBLCD   \"  Ultra Black Condensed
 .sty \n[.fp] UBLCDI  \"  Ultra Black Condensed Italic
-.sty \n[.fp] UBLEX   \"  Ultra Black Exteneded
+.sty \n[.fp] UBLEX   \"  Ultra Black Extended
 .sty \n[.fp] UBLEXI  \"  Ultra Black Extended Italic
 \#
 .sty \n[.fp] SC      \"  Small Caps Roman
@@ -214,6 +222,10 @@ end
 .if n .color 0
 .nr TOC.RELOCATE 0 \" TOC.RELOCATE is off by default
 .ds PDFHREF.TEXTCOL.DEFAULT 0.0 0.3 0.9
+.nr PDFHREF.VIEW.LEADING.C 3i
+.nr PDFHREF.VIEW.LEADING.T 1i
+.nr PDFHREF.VIEW.LEADING 0
+.nr PDFHREF.VIEW.LEADING.H \n[PDFHREF.VIEW.LEADING]
 \#
 \# ====================================================================
 \#
@@ -256,6 +268,13 @@ end
 .nr #L_MARGIN \n[.o]  \" Tabs, etc require #L_MARGIN
 .cflags 4 /\[en]      \" So slash and en-dashes get broken
 \#
+\# 'END' is used throughout as the 2nd arg to 'MAC' (alias of .de)
+\# Defining it as a macro here prevents groff from complaining
+\# that 'END' isn't defined.
+\#
+.de END
+..
+\#
 \# ====================================================================
 \#
 \# +++PAGE LAYOUT+++
@@ -332,7 +351,6 @@ end
 \#
 .MAC T_MARGIN END
 .    nr #T_MARGIN (\\$1)
-.    nr #TOP 1
 .    if !\\n[#DOCS] .sp |\\n[#T_MARGIN]u-1v
 .    wh 0i DO_T_MARGIN
 .END
@@ -404,10 +422,8 @@ end
 \#
 .MAC DO_T_MARGIN END
 .    ev T_MARGIN
-.    nr #TOP 1
 .    sp |\\n[#T_MARGIN]u-1v
 .    ev
-.    sp -\\n[#T_MARGIN_LEAD_ADJ]u
 .END
 \#
 \# DO_B_MARGIN
@@ -421,8 +437,12 @@ end
 \#
 .MAC DO_B_MARGIN END
 .    nr #T_MARGIN_LEAD_ADJ \\n[#LEAD]-12000
-'    bp
+.    ev B_MARGIN
 .    if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
+.    ie \\n[#DOCS] \
+.       if !\\n[#NEWPAGE] .bp
+.    el .bp
+.    ev
 .END
 \#
 \# NEWPAGE
@@ -436,33 +456,39 @@ end
 \#   breaks to a new page.
 \#
 .MAC NEWPAGE END
-.    if \\n[.vpt]=0 .vpt
-.    ie \\n[#NO_BREAK] \{\
-'       br
-.       rr #NO_BREAK
+.    br
+.    if \\n[#DOC_TYPE]=5 \{\
+.       if \\n[#NUM_ARGS]>0 \
+.       pdftransition PAGE \\$1
 .    \}
-.    el .br
-.    nr #NEWPAGE 1
-.    nr @TOP 1
-.    ie \\n[#B_MARGIN_SET]=1 \{\
-.       ie !\\n[#DOCS]=1 \{\
-.          ev NP
-.          DO_B_MARGIN
-.          ev
-.       \}
-.       el \{\
-.          if \\n[#COLUMNS]=1 .nr #COL_NUM \\n[#NUM_COLS]
-.          ie !\\n[#FN_DEPTH] \{\
-.             ch FN_OVERFLOW_TRAP
-.             DO_FOOTER
-.             wh -(\\n[#FN_OVERFLOW_TRAP_POS]u) FN_OVERFLOW_TRAP
-.          \}
-.          el .DO_B_MARGIN
+.    if !\\n[defer] \{\
+.       nr #NEWPAGE 1
+.       rr tbl*no-print-header
+.    \}
+.    ie !\\n[#DOCS]=1 \
+.       if \\n[#B_MARGIN_SET]=1 .DO_B_MARGIN
+.    el \{\
+.       if \\n[#COLUMNS]=1 .nr #COL_NUM \\n[#NUM_COLS]
+.       if !\\n[#FN_DEPTH] \{\
+.          ch FN_OVERFLOW_TRAP
+.          nr #RESET_FN_OVERFLOW_TRAP 1
 .       \}
 .    \}
-.    el 'bp
+.    if dPDF.EXPORT \
+.       if \\n[#FLEX_ACTIVE] \
+.          if !\\n[#NO_FLEX] \
+.             tm .ds pre-newpage-\\n% \\n%@\\n[#COL_NUM]
+.    if (\\n[@TOP]=0):(\\n[#END_COVER]=1) \
+.       bp
+.    rr #END_COVER
+.    if \\n[#RESET_FN_OVERFLOW_TRAP] \{\
+.       wh -\\n[#FN_OVERFLOW_TRAP_POS]u FN_OVERFLOW_TRAP
+.       rr #RESET_FN_OVERFLOW_TRAP_POS
+.   \}
 .END
 \#
+.ALIAS NEWSLIDE NEWPAGE
+\#
 \# =====================================================================
 \#
 \# +++GENERAL STYLE MACROS+++
@@ -529,6 +555,8 @@ end
 \#   to $FAMILY.
 \#
 .MAC FAMILY END
+.    if '\\n[.ev]'COVER_TEXT' .ds $SAVED_DOC_FAM \\n[.fam]
+.    if \\n[#COLLATE] .rm $SAVED_DOC_FAM
 .    ds $FAMILY \\$1
 .    if \\n[#PRINT_STYLE]=1 \{\
 .       fam \\*[$TYPEWRITER_FAM]
@@ -538,10 +566,10 @@ end
 .       fam \\*[$TYPEWRITER_FAM]
 .       return
 .    \}
-.    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) .ds $SAVED_STYLE \\n[.sty]
+.    if (\\n[.x]\\n[.y]\\*[short_revision] >= 1192) .ds $SAVED_STYLE \\n[.sty]
 .    ft 0
 .    fam \\*[$FAMILY]
-.    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
+.    if (\\n[.x]\\n[.y]\\*[short_revision] >= 1192) \{\
 .       ft \\*[$SAVED_STYLE]
 .       if !F\\n[.fn] .ft 0
 .    \}
@@ -578,21 +606,21 @@ end
 .    \}
 .    ft 0
 .    ft \\*[$FONT]
-.    if (\\n[.x]\\n[.y]\\n[.Y] >= 1192) \{\
+.    if (\\n[.x]\\n[.y]\\*[short_revision] >= 1192) \{\
 .       if '\\n[.sty]'' \{\
 .          if !F\\n[.fn] \{\
 .             if !S\\*[$FONT] \{\
 .                tm1 "[mom]: Font style "\\*[$FONT]" at line \\n[.c] has not been registered.
 .                ie \\n[#ABORT_FT_ERRORS]=0 \
 .                   tm1 "       Continuing to process using fallback font.
-.                el .ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.                el .ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .             \}
 .             if \\n[.f]=0 \{\
 .                tm1 "[mom]: Either font style "\\*[$FONT]" at line \\n[.c] does not exist in family "\\n[.fam]",
 .                tm1 "       or family "\\n[.fam]" has not been installed.
 .                ie \\n[#ABORT_FT_ERRORS]=0 \
 .                   tm1 "       Continuing to process using fallback font.
-.                el .ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.                el .ab [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .             \}
 .          \}
 .       \}
@@ -655,7 +683,6 @@ end
 \#
 .MAC LS END
 .    br
-.    nr #OLD_LEAD \\n[.v]
 .    if \\n[#PRINT_STYLE]=1 .return
 .    if \\n[#IGNORE] .return
 .    if \\n[#AUTO_LEAD] \{\
@@ -664,13 +691,8 @@ end
 .       rr #AUTOLEADING
 .    \}
 .    vs \\$1
-.    if \\n[.t]<\\n[.v] 'bp
-.    if \\n[#TOP] \{\
-.       nr #TOP_BASELINE_ADJ \\n[.v]-\\n[#OLD_LEAD]
-.       sp -\\n[#TOP_BASELINE_ADJ]u
-.       rr #TOP
-.       rr #TOP_BASELINE_ADJ
-.    \}
+.    if !\\n[#START] \
+.       if \\n[.t]<\\n[.v] 'bp
 .END
 \#
 \# AUTOLEAD
@@ -691,7 +713,6 @@ end
 .    if \\n[#PRINT_STYLE]=1 .return
 .    if \\n[#IGNORE] .return
 .    nr #AUTO_LEAD 1 \" autolead on or off
-.    nr #OLD_LEAD \\n[.v]
 .    nr #AUTOLEAD_VALUE (p;\\$1) \" arg x 1000
 .    ie '\\$2'FACTOR' \{\
 .       if !\\n[#DOCS] .nr #DOC_AUTOLEAD_FACTOR \\n[#AUTOLEAD_VALUE] \" save for DOC_PT_SIZE
@@ -699,12 +720,6 @@ end
 .    \}
 .    el .nr #AUTOLEADING \\n[#AUTOLEAD_VALUE]
 .    vs \\n[.ps]u+\\n[#AUTOLEADING]u
-.    if \\n[#TOP] \{\
-.       nr #TOP_BASELINE_ADJ \\n[.v]-\\n[#OLD_LEAD]
-.       sp -\\n[#TOP_BASELINE_ADJ]u
-.       rr #TOP
-.       rr #TOP_BASELINE_ADJ
-.    \}
 .END
 \#
 \# STRINGS FOR INLINE CONTROL OF GENERAL TYPE STYLE
@@ -754,26 +769,21 @@ end
 \# KERN_UNIT macro.
 \#
 .MAC KERN_UNIT END
-.    ie '\\$1'DEFAULT' .nr #KERN_UNIT 36
-.    el .nr #KERN_UNIT \\$1
+.    ie '\\$1'DEFAULT' .ds $KERN_UNIT 36
+.    el .ds $KERN_UNIT \\$1
 .END
 \#
-.nr #KERN_UNIT 36
-.ds BU   \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
-.ds FU   \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\\$1u)'
+.ds $KERN_UNIT 36
+.ds BU   \h'-(\En[.ps]u/\E*[$KERN_UNIT]u*\\$1u)'
+.ds FU   \h'(\En[.ps]u/\E*[$KERN_UNIT]u*\\$1u)'
 \#
 \# Initialize strings for pre-1.1.3c-style BU and FU
 \#
 .nr #LOOP 0 1
 .while \n+[#LOOP]<37 \{\
-.   ds BU\n[#LOOP]  \h'-(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
-.\}
-\#
-.nr #LOOP 0 1
-.while \n+[#LOOP]<37 \{\
-.   ds FU\n[#LOOP] \h'(\En[#PT_SIZE]u/\n[#KERN_UNIT]u*\n[#LOOP]u)'
+.   ds BU\n[#LOOP] \h'-(\En[.ps]u/\E*[$KERN_UNIT]u*\n[#LOOP]u)'
+.   ds FU\n[#LOOP] \h'(\En[.ps]u/\E*[$KERN_UNIT]u*\n[#LOOP]u)'
 .\}
-.rr #LOOP
 \#
 \# Horizontal movements
 \# --------------------
@@ -1060,17 +1070,16 @@ end
 \#   Requires a unit of measure.
 \#
 .MAC ALD END
-.    br
-.    if \\n[nl]=0 .nr #TOP 1
 .    if '\\$0'ALD' \{\
-.       nr #ALD (\\$1)
+.       nr #ALD (u;\\$1)
 .       sp \\n[#ALD]u
 .    \}
 .    if '\\$0'ADD_SPACE' \{\
 .       vpt 0
-.       nr #ALD (\\$1)
+.       nr #ALD (u;\\$1)
 .       rs
 .       nop \&
+.       br
 .       sp |\\n[#T_MARGIN]u-1v+\\n[#ALD]u
 .       rr @TOP
 .       nr #SPACE_ADDED 1
@@ -1092,7 +1101,7 @@ end
 \#
 .MAC RLD END
 .    br
-.    nr #RLD (\\$1)
+.    nr #RLD (u;\\$1)
 .    sp -\\n[#RLD]u
 .END
 \#
@@ -1446,7 +1455,11 @@ end
 \#   mode is enabled.
 \#
 .MAC QUAD END
+.    br
+.    if \\n[#COVERTEXT_PP] \
+.       ds $RESTORE_DOC_QUAD \\*[$QUAD_VALUE]
 .    ds $QUAD_VALUE \\$1
+.    substring $QUAD_VALUE 0 0
 .    if \\n[#TAB_ACTIVE]=0 \{\
 .       nr #QUAD 1
 .       ds $RESTORE_QUAD_VALUE \\*[$QUAD_VALUE]
@@ -1457,50 +1470,30 @@ end
 .       nr #JUSTIFY 0
 .       ad l
 .    \}
-.    if '\\*[$QUAD_VALUE]'LEFT' \{\
-.       nr #JUSTIFY 0
-.       ad l
-.    \}
 .    if '\\*[$QUAD_VALUE]'R' \{\
 .       nr #JUSTIFY 0
 .       ad r
 .    \}
-.    if '\\*[$QUAD_VALUE]'RIGHT' \{\
-.       nr #JUSTIFY 0
-.       ad r
-.    \}
 .    if '\\*[$QUAD_VALUE]'C' \{\
 .       nr #JUSTIFY 0
 .       ad c
 .    \}
-.    if '\\*[$QUAD_VALUE]'CENTER' \{\
-.       nr #JUSTIFY 0
-.       ad c
-.    \}
-.    if '\\*[$QUAD_VALUE]'CENTRE' \{\
-.       nr #JUSTIFY 0
-.       ad c
-.    \}
 .    if '\\*[$QUAD_VALUE]'J' \{\
 .       nr #JUSTIFY 1
 .       ad b
 .    \}
-.    if '\\*[$QUAD_VALUE]'JUSTIFY' \{\
-.       nr #JUSTIFY 1
-.       ad b
-.    \}
 .    nr #PSEUDO_FILL 0
 .END
 \#
 \# LEFT, RIGHT, AND CENTER
 \# -----------------------
 \# The purpose of these macros is to allow the user to enter lines
-\# of text that will be quadded LRC having to stick .BR or .br
-\# between lines.  For the sake of consistency, all three appear to
-\# behave similarly (from the point of view of the user), although
-\# the underlying primitives don't.  For this reason, LEFT, RIGHT,
-\# and CENTER must be followed by .QUAD [L R C J] or .JUSTIFY to
-\# restore text to fill mode.
+\# of text that will be quadded LRC without having to stick .BR
+\# or .br between lines.  For the sake of consistency, all three
+\# appear to behave similarly (from the point of view of the user),
+\# although the underlying primitives don't.  For this reason, LEFT,
+\# RIGHT, and CENTER must be followed by .QUAD [L R C J] or .JUSTIFY
+\# to restore text to fill mode.
 \#
 \# LEFT
 \# ----
@@ -1552,7 +1545,7 @@ end
 \# *Argument:
 \#   <none>
 \# *Function:
-\#   Turns fill on.  Allows user to center lines without
+\#   Turns fill off.  Allows user to center lines without
 \#   requiring the .BR or .br macro.
 \# *Notes:
 \#   Lines that exceed the current LL will be broken, with the excess
@@ -1568,6 +1561,31 @@ end
 .    nr #PSEUDO_FILL 1
 .END
 \#
+\# CENTER BLOCKS OF TYPE
+\# ---------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Allows users to centre blocks of type on the page without
+\#   altering their quad.
+\#
+.MAC CENTER_BLOCK END
+.    br
+.    ie !\\n[.$] .di CENTER*BLOCK
+.    el \{\
+.       di
+.       in \\n[.l]u-\\n[dl]u/2u
+.       if \\n[.u] .nr #FILLED 1
+.       nf
+.       CENTER*BLOCK
+.       if \\n[#FILLED] .fi
+.       rr #FILLED
+.       in
+.    \}
+.END
+\#
+.ALIAS CENTRE_BLOCK CENTER_BLOCK
+\#
 \# =====================================================================
 \#
 \# +++TABS+++
@@ -1590,7 +1608,7 @@ end
 \# Setting up string tabs is a two-step procedure.  First, the user
 \# enters an input line in which s/he wants to mark off string tabs.
 \# The beginning of a tab is marked with \*[STn], where "n" is
-\# the desired number of the tab.  The end of the the tab is marked
+\# the desired number of the tab.  The end of the tab is marked
 \# with \*[STnX].  All ST's must have a matching STX.  String tabs
 \# may be nested.
 \#
@@ -1702,7 +1720,7 @@ end
 .        nr #TAB_OFFSET\\*[$CURRENT_TAB] \\n[#TAB_OFFSET]
 .        nr #ST_OFFSET \\n[#TAB_OFFSET]
 .        ie !'\\\\n[.z]'' \
-\!.         po \\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u
+\!.         po \\\\\\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u
 .        el \
 .           po \\\\n[#L_MARGIN]u+\\\\n[#TAB_OFFSET\\\\*[$CURRENT_TAB]]u
 .        ll \\n[#TAB_LENGTH]u
@@ -1746,7 +1764,7 @@ end
 \# *Argument:
 \#   <none>
 \# *Function:
-\#   Automagically moves to TAB<n+1> on the same line as the last
+\#   Automatically moves to TAB<n+1> on the same line as the last
 \#   line of the previous tab.
 \# *Notes:
 \#   The \c inline must be appended to the end of input lines when in
@@ -1754,11 +1772,11 @@ end
 \#
 .MAC TN END
 .    nr #TN 1
-.    TRAP OFF
+.    vpt 0
 .    sp -1v
 .    nr #NEXT_TAB \\n[#CURRENT_TAB]+1
 .    TAB\\n[#NEXT_TAB]
-.    TRAP
+.    vpt
 .END
 \#
 \# An inline escape to accomplish the same thing.  Preferable, since
@@ -1794,7 +1812,14 @@ end
 .       rm $ST\\n[#LOOP]_FILL
 .    \}
 .    rr #LOOP
-.    po \\n[#L_MARGIN]u
+.    ie '\\n[.z]'FLOAT*DIV' \{\
+\!.     po \\n[#L_MARGIN]u
+\!.     ll \\n[#L_LENGTH]u
+.    \}
+.    el \{\
+.       po \\n[#L_MARGIN]u
+.       ll \\n[#L_LENGTH]u
+.    \}
 .    ll \\n[#L_LENGTH]u
 .    ta \\n[.l]u
 .    ie \\n[#QUAD] \{\
@@ -1881,15 +1906,38 @@ end
 \#
 \# Pre-define xcolors black and white
 \#
-.ds black \m[black]
-.ds BLACK \m[black]
-.ds white \m[white]
-.ds WHITE \m[WHITE]
+.ds black   \m[black]
+.ds BLACK   \m[black]
+.ds white   \m[white]
+.ds WHITE   \m[white]
+.ds default black
 \#
 \# =====================================================================
 \#
 \# +++MISCELLANEOUS USEFUL MACROS AND STRINGS+++
 \#
+.nr _w 500
+.nr _d 1250
+\#
+\# These string are used for creating aliases within loops that set
+\# style for doc-cover, cover, and docheader items.  They're defined
+\# here because underscoring needs them.
+\#
+.ds TITLE_TYPE_1  ATTRIBUTE
+.ds TITLE_TYPE_2  AUTHOR
+.ds TITLE_TYPE_3  CHAPTER
+.ds TITLE_TYPE_4  CHAPTER_TITLE
+.ds TITLE_TYPE_5  COVERTITLE
+.ds TITLE_TYPE_6  DOCTITLE
+.ds TITLE_TYPE_7  DOCTYPE
+.ds TITLE_TYPE_8  DOC_COVERTITLE
+.ds TITLE_TYPE_9  SUBTITLE
+.ds TITLE_TYPE_10 TITLE
+.ds TITLE_TYPE_11 MISC
+.ds TITLE_TYPE_12 COPYRIGHT
+.ds TITLE_TYPE_13 DOC_COVER_TITLE
+.ds TITLE_TYPE_14 COVER_TITLE
+\#
 \# UNDERLINE
 \# ---------
 \# *Arguments:
@@ -1900,9 +1948,6 @@ end
 \#   Defaults for rule weight and distance from baseline are below.
 \#   UNDERLINE_SPECS lets user change them
 \#
-.nr _w 500
-.nr _d 1250
-\#
 .MAC UNDERLINE_SPECS END
 .    ie \B'\\$1' .nr _w (u;\\$1)
 .    el \{\
@@ -1938,7 +1983,7 @@ end
 .    \}
 .    el \{\
 .       nr #UNDERLINE_ON 0
-.       SS \\*[$SAVED_SS_VAR]
+.       if !'\\*[$SAVED_SS_VAR]'' .SS \\*[$SAVED_SS_VAR]
 .       ie !n .nop \X'ps: exec decornone'\c
 .       el .ul 0
 .    \}
@@ -2033,57 +2078,32 @@ end
 .    nr #SAVED_UNDERSCORE_WEIGHT     \\n[#UNDERSCORE_WEIGHT]
 .    nr #SAVED_UNDERSCORE_WEIGHT_ADJ \\n[#UNDERSCORE_WEIGHT_ADJ]
 .    ds $SAVED_UNDERSCORE_GAP        \\*[$UNDERSCORE_GAP]
-.    if \\n[#FROM_BIB_STRING]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#BIB_STRING_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#BIB_STRING_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$BIB_STRING_UNDERLINE_GAP]
-.    \}
-.    if \\n[#FROM_COVER]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#COVER_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#COVER_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$COVER_UNDERLINE_GAP]
-.    \}
-.    if \\n[#FROM_DOC_COVER]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#DOC_COVER_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#DOC_COVER_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$DOC_COVER_UNDERLINE_GAP]
-.    \}
-.    if \\n[#FROM_DOCTYPE]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#DOCTYPE_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#DOCTYPE_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$DOCTYPE_UNDERLINE_GAP]
-.    \}
-.    if \\n[#FROM_EN_STRING]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#EN_STRING_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#EN_STRING_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$EN_STRING_UNDERLINE_GAP]
-.    \}
-.    if \\n[#FROM_EN_TITLE]=1 \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#EN_TITLE_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#EN_TITLE_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$EN_TITLE_UNDERLINE_GAP]
-.    \}
-.    ie \\n[#NUM_ARGS]=1 \{\
-.       nr #TEXT_WIDTH \w'\\$1'
-\\$1\
-\D't \\n[#UNDERSCORE_WEIGHT]'\
-\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
-\v'+(\\*[$UNDERSCORE_GAP])+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
+.    if \\n[#NUM_ARGS]=2 \{\
+.       ds $UNDERSCORE_GAP \\$1
+.       shift
+.    \}
+.    if !'\\*[$TITLE_TYPE]'' \{\
+.       nr #UNDERSCORE_WEIGHT     \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT]
+.       nr #UNDERSCORE_WEIGHT_ADJ \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT_ADJ]
+.       ds $UNDERSCORE_GAP        \\*[$\\*[$TITLE_TYPE]_UNDERLINE_GAP]
+.    \}
+.    nr #TEXT_WIDTH \w'\\$1'
+.    ie \\n[.u]=1 \{\
+\Z'\\$1'\
+\Z'\D't \\n[#UNDERSCORE_WEIGHT]''\
+\v'\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
 \D'l \\n[#TEXT_WIDTH]u 0'\
-\D't \\n[#RULE_WEIGHT]'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\v'-(\\*[$UNDERSCORE_GAP])-\\n[#UNDERSCORE_WEIGHT_ADJ]u'
+\Z'\D't \\n[#RULE_WEIGHT]''\
+\v'-(\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u)'\c
+.       nop
 .    \}
 .    el \{\
-.       nr #TEXT_WIDTH \w'\\$2'
-\\$2\
-\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
-\v'+(\\$1)+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
-\D't \\n[#UNDERSCORE_WEIGHT]'\
+\Z'\\$1'\
+\Z'\D't \\n[#UNDERSCORE_WEIGHT]''\
+\v'\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
 \D'l \\n[#TEXT_WIDTH]u 0'\
-\D't \\n[#RULE_WEIGHT]'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\v'-(\\$1)-\\n[#UNDERSCORE_WEIGHT_ADJ]u'
+\Z'\D't \\n[#RULE_WEIGHT]''\
+\v'-(\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u)'
 .    \}
 .    nr #UNDERSCORE_WEIGHT     \\n[#SAVED_UNDERSCORE_WEIGHT]
 .    nr #UNDERSCORE_WEIGHT_ADJ \\n[#SAVED_UNDERSCORE_WEIGHT_ADJ]
@@ -2091,6 +2111,7 @@ end
 .    rr #SAVED_UNDERSCORE_WEIGHT
 .    rr #SAVED_UNDERSCORE_WEIGHT_ADJ
 .    rm $SAVED_UNDERSCORE_GAP
+.    rm $TITLE_TYPE
 .END
 \#
 \# DOUBLE UNDERSCORE
@@ -2110,63 +2131,38 @@ end
 .    ds $SAVED_RULE_GAP              \\*[$RULE_GAP]
 .    if \\n[#NUM_ARGS]=2 \{\
 .       ds $UNDERSCORE_GAP \\$1
+.       shift
 .    \}
 .    if \\n[#NUM_ARGS]=3 \{\
 .       ds $UNDERSCORE_GAP \\$1
 .       ds $RULE_GAP \\$2
+.       shift 2
 .    \}
-.    if \\n[#FROM_BIB_STRING] \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#BIB_STRING_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#BIB_STRING_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$BIB_STRING_UNDERLINE_GAP]
-.       ds $RULE_GAP                 \\*[$BIB_STRING_RULE_GAP]
-.    \}
-.    if \\n[#FROM_EN_STRING] \{\
-.       nr #UNDERSCORE_WEIGHT        \\n[#EN_STRING_UNDERLINE_WEIGHT]
-.       nr #UNDERSCORE_WEIGHT_ADJ    \\n[#EN_STRING_UNDERLINE_WEIGHT_ADJ]
-.       ds $UNDERSCORE_GAP           \\*[$EN_STRING_UNDERLINE_GAP]
-.       ds $RULE_GAP                 \\*[$EN_STRING_RULE_GAP]
-.    \}
-.    if \\n[#NUM_ARGS]=1 \{\
-.       nr #TEXT_WIDTH \w'\\$1'
-\\$1\
-\D't \\n[#UNDERSCORE_WEIGHT]'\
-\v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
-\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\v'+\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\
-\h'-\\n[#TEXT_WIDTH]u'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\D't \\n[#RULE_WEIGHT]'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'
+.    if !'\\*[$TITLE_TYPE]'' \{\
+.       nr #UNDERSCORE_WEIGHT     \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT]
+.       nr #UNDERSCORE_WEIGHT_ADJ \\n[#\\*[$TITLE_TYPE]_UNDERLINE_WEIGHT_ADJ]
+.       ds $UNDERSCORE_GAP        \\*[$\\*[$TITLE_TYPE]_UNDERLINE_GAP]
+.       ds $RULE_GAP              \\*[$\\*[$TITLE_TYPE]_RULE_GAP]
 .    \}
-.    if \\n[#NUM_ARGS]=2 \{\
-.       nr #TEXT_WIDTH \w'\\$2'
-\\$2\
-\D't \\n[#UNDERSCORE_WEIGHT]'\
-\v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
-\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\v'+(\\*[$RULE_GAP])+\\n[#UNDERSCORE_WEIGHT]u'\
-\h'-\\n[#TEXT_WIDTH]u'\
+.    nr #TEXT_WIDTH \w'\\$1'
+.    ie \\n[.u]=1 \{\
+\Z'\\$1'\
+\Z'\D't \\n[#UNDERSCORE_WEIGHT]''\
+\v'\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
+\Z'\D'l \\n[#TEXT_WIDTH]u 0''\
+\v'\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\
 \D'l \\n[#TEXT_WIDTH]u 0'\
-\D't \\n[#RULE_WEIGHT]'\
-\h'-\\n[#RULE_WEIGHT]u'\
-\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])+(\\n[#UNDERSCORE_WEIGHT]u*2u)'
+\Z'\D't \\n[#RULE_WEIGHT]''\
+\v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'\c
 .    \}
-.    if \\n[#NUM_ARGS]=3 \{\
-.       nr #TEXT_WIDTH \w'\\$3'
-\\$3\
-\D't \\n[#UNDERSCORE_WEIGHT]'\
-\v'+\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
-\h'-\\n[#TEXT_WIDTH]u-\\n[#UNDERSCORE_WEIGHT]u'\
-\D'l \\n[#TEXT_WIDTH]u 0'\
-\v'+\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\
-\h'-\\n[#TEXT_WIDTH]u'\
+.    el \{\
+\Z'\\$1'\
+\Z'\D't \\n[#UNDERSCORE_WEIGHT]''\
+\v'\\*[$UNDERSCORE_GAP]+\\n[#UNDERSCORE_WEIGHT_ADJ]u'\
+\Z'\D'l \\n[#TEXT_WIDTH]u 0''\
+\v'\\*[$RULE_GAP]+\\n[#UNDERSCORE_WEIGHT]u'\
 \D'l \\n[#TEXT_WIDTH]u 0'\
-\D't \\n[#RULE_WEIGHT]'\
-\h'-\\n[#RULE_WEIGHT]u'\
+\Z'\D't \\n[#RULE_WEIGHT]''\
 \v'-(\\*[$UNDERSCORE_GAP]+\\*[$RULE_GAP])-(\\n[#UNDERSCORE_WEIGHT]u*2u)'
 .    \}
 .    nr #UNDERSCORE_WEIGHT     \\n[#SAVED_UNDERSCORE_WEIGHT]
@@ -2176,21 +2172,31 @@ end
 .    rr #SAVED_UNDERSCORE_WEIGHT_ADJ
 .    rm $SAVED_UNDERSCORE_GAP
 .    rm $SAVED_RULE_GAP
+.    rm $TITLE_TYPE
 .END
 \#
-\# Default underscoring rule gaps
+\# Default underscoring underline and rule gaps
 \#
-.ds $BIB_STRING_UNDERLINE_GAP 2p
 .ds $BIB_STRING_RULE_GAP      2p
-.ds $COVER_UNDERLINE_GAP      2p
-.ds $DOC_COVER_UNDERLINE_GAP  2p
-.ds $DOCTYPE_UNDERLINE_GAP    2p
-.ds $EN_STRING_UNDERLINE_GAP  2p
+.ds $BIB_STRING_UNDERLINE_GAP 2p
 .ds $EN_STRING_RULE_GAP       2p
+.ds $EN_STRING_UNDERLINE_GAP  2p
 .ds $EN_TITLE_UNDERLINE_GAP   2p
 .ds $RULE_GAP                 2p
+.ds $TOC_HEADER_RULE_GAP      2p
+.ds $TOC_HEADER_UNDERLINE_GAP 2p
 .ds $UNDERSCORE_GAP           2p
 \#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=14 \{\
+. ds $\*[TITLE_TYPE_\n[#LOOP]]_RULE_GAP                2p
+. ds $COVER_\*[TITLE_TYPE_\n[#LOOP]]_RULE_GAP          2p
+. ds $DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_RULE_GAP      2p
+. ds $\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_GAP           2p
+. ds $COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_GAP     2p
+. ds $DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_GAP 2p
+.\}
+\#
 \# SUPERSCRIPT
 \# -----------
 \# *Function:
@@ -2400,7 +2406,7 @@ end
 \#
 \# PAD
 \# ---
-\# *Argments:
+\# *Arguments:
 \#   "<string of text with padding markers inserted>"
 \#   "<id of bookmark created by .PDF_BOOKMARK>"
 \# *Function:
@@ -2425,20 +2431,27 @@ end
 .    as $PAD_STRING \Ekp
 .    di PAD_STRING
 .    fam \\*[$FAMILY_FOR_PAD]
-\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
+\f[\\*[$FONT_FOR_PAD]]\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
 .    br
 .    di
+.    if \\n[#INDENT_ACTIVE] \{\
+.       if \\n[#INDENT_LEFT_ACTIVE]  .ll -\\n[#L_INDENT]u
+.       if \\n[#INDENT_RIGHT_ACTIVE] .ll -\\n[#R_INDENT]u
+.       if \\n[#INDENT_BOTH_ACTIVE]  .ll -\\n[#BR_INDENT]u
+.    \}
 .    char \\*[$PAD_MARKER] \
 \R'#SPACE_TO_END \En[.l]-\En[p]'\R'#PAD_SPACE \En[#SPACE_TO_END]/\En[#PAD_COUNT]'
 .    di PAD_STRING
 .    fam \\*[$FAMILY_FOR_PAD]
-\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
+\f[\\*[$FONT_FOR_PAD]]\s[\\n[#SIZE_FOR_PAD]u]\\*[$PAD_STRING]
 .    br
 .    di
+.    if \\n[#INDENT_ACTIVE] \
+.       if (\\n[#INDENT_LEFT_ACTIVE]=1):(\\n[#INDENT_BOTH_ACTIVE]) .ll
 .    char \\*[$PAD_MARKER] \h'\En[#PAD_SPACE]u'
 .    if \\n[#SILENT] .SILENT
 .    fam \\*[$FAMILY_FOR_PAD]
-\\f[\\*[$FONT_FOR_PAD]]\\s[\\n[#SIZE_FOR_PAD]u]
+\f[\\*[$FONT_FOR_PAD]]\s[\\n[#SIZE_FOR_PAD]u]
 .    ie '\\$2'' .nop \\*[$PAD_STRING]
 .    el \{\
 .       ie !'\\$2'NOBREAK' .pdfhref L -D "\\$2" -E -- \&\\*[$PAD_STRING]
@@ -2455,7 +2468,7 @@ end
 .    rr #PAD_SPACE
 .    rm $PAD_STRING
 .    rm PAD_STRING
-.    rchar #
+.    rchar \\*[$PAD_MARKER]
 .    if '\\$2'NOBREAK' \{\
 .       TRAP OFF
 .       EOL
@@ -2594,11 +2607,13 @@ end
 .          return
 .       \}
 .       if \\n[#PRINT_STYLE]=2 \{\
+.          sp -1
 .          if \\n[#PP_STYLE]=2 \{\
 .             PRINT \\$1\c
 .             return
 .          \}
 .          if \\n[#PP]>1 \{\
+.             if \\n[#PP_INDENT] .ti \\n[#PP_INDENT]u
 .             PRINT \\$1\c
 .             return
 .          \}
@@ -2619,7 +2634,7 @@ end
 .    \}
 .    if '\\$3'COND' .CONDENSE \\$4
 .    if '\\$3'EXT' .EXTEND \\$4
-.    if !r#DC_GUT .nr #DC_GUT (3p)
+.    if !r#DC_GUT .nr #DC_GUT 3p
 .    ie \\n[#DOCS] .ds $RESTORE_FAM \\*[$DOC_FAM]
 .    el .ds $RESTORE_FAM \\n[.fam]
 .    ie \\n[#DOCS] .ds $RESTORE_FT  \\*[$PP_FT]
@@ -2641,9 +2656,13 @@ end
 .    nr #DC_LINES +1
 .    if \\n[#DC_LINES]v>\\n[.t] \{\
 .       nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] 1
-.       tm1 "[mom]: Dropcap at line \\n[.c] does not fit on page \\n[pgnum].
-.       tm1 "       Shifting paragraph to page \\n+[pgnum].
-.       bp
+.       if \\n[#COLUMNS]=1 .ds col-num ", column \\n[#COL_NUM]
+.       tm1 \
+"[mom]: Dropcap at line \\n[.c] does not fit on page \\n[pgnum]\\*[col-num].
+.       tm1 \
+"       Shifting paragraph to next page or column.
+.       ie \\n[#COLUMNS] .COL_NEXT
+.       el .NEWPAGE
 .    \}
 .    ie \\n[#DC_COLOR]=1 \{\
 .       ie !'\\$3'' \{\
@@ -2673,7 +2692,7 @@ end
 .       \}
 .       el .PRINT \
 \\*[DOWN \\n[#DC_LINES]v]\
-\m[\\*[$DC_COLOR]]\\*[$DROPCAP]\m[]\\*[UP \\n[#DC_LINES]v]
+\\*[$DROPCAP]\\*[UP \\n[#DC_LINES]v]
 .    \}
 .    if '\\$3'COND' \E*[COND]
 .    if '\\$3'EXT' \E*[EXT]
@@ -2728,21 +2747,13 @@ end
 \#
 \# +++GRAPHICAL OBJECTS+++
 \#
-\# HORIZONTAL RULE - DRH
-\# ---------------------
-\# *Arguments:
-\#   <none> | <rule weight> <indent> <length> [ <color> ]
-\# *Function:
-\#   With no arg, draws a full measure rule.  With args, draws
-\#   described horizontal rule.
-\# *Notes:
-\#   Rules are drawn left-to-right, from the baseline down, and
-\#   return to their point of origin.  Color must be set in the
-\#   macro; otherwise the color will be black, regardless of current
-\#   .gcolor.  If no arg given, the rule weight is the one set by
-\#   RULE_WEIGHT.
+\# Set params for graphical objects.
 \#
-.MAC DRH END
+.MAC GRAPHICAL_OBJ END
+.    rr #FILLED
+.    rr #FILL_MODE
+.    rr #NOFILL
+.    rr #NOFILL_MODE
 .    if \\n[.vpt]=1 \{\
 .       vpt 0
 .       nr #RESTORE_TRAP 1
@@ -2764,17 +2775,35 @@ end
 .       rj 0
 .    \}
 .    nf
+.END
+\#
+\# HORIZONTAL RULE - DRH
+\# ---------------------
+\# *Arguments:
+\#   <none> | <rule weight> <indent> <length> [ <color> ]
+\# *Function:
+\#   With no arg, draws a full measure rule.  With args, draws
+\#   described horizontal rule.
+\# *Notes:
+\#   Rules are drawn left-to-right, from the baseline down, and
+\#   return to their point of origin.  Color must be set in the
+\#   macro; otherwise the color will be black, regardless of current
+\#   .gcolor.  If no arg given, the rule weight is the one set by
+\#   RULE_WEIGHT.
+\#
+.MAC DRH END
+.    GRAPHICAL_OBJ
 .    ds $RL_WEIGHT \\$1
 .    ds $RL_INDENT \\$2
 .    ds $RL_LENGTH \\$3
 .    ie !'\\$4'' .ds $RL_COLOR  \\$4
-.    el          .ds $RL_COLOR default
+.    el          .ds $RL_COLOR \\*[default]
 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
 .    nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ]
 .    di NULL
 .       if \\n[#NUM_ARGS]>=1 .RULE_WEIGHT \\*[$RL_WEIGHT]
 .    di
-.    gcolor \\*[$RL_COLOR]
+.    COLOR \\*[$RL_COLOR]
 .    ie \\n[#NUM_ARGS]=0 \{\
 .       ie \\n[#INDENT_ACTIVE] \{\
 .          nr #RESTORE_L_LENGTH \\n[.l]
@@ -2805,6 +2834,7 @@ end
 \D'l \\*[$RL_LENGTH] 0'\
 \v'-\\n[#RULE_WEIGHT_ADJ]u'\
 \D't \\n[#SAVED_RULE_WEIGHT]'
+.          rr #RESTORE_L_LENGTH
 .    \}
 .    if \\n[#FILLED]=1 \{\
 .       if \\n[#FILL_MODE]=0 .QUAD LEFT
@@ -2824,7 +2854,7 @@ end
 .    rr #SAVED_WEIGHT
 .    rr #SAVED_WEIGHT_ADJ
 .    if \\n[#RESTORE_TRAP]=1 \{\
-.       vpt 1
+.       vpt
 .       rr #RESTORE_TRAP
 .    \}
 .    if '\\n[.z]'FLOAT*DIV' \
@@ -2885,38 +2915,17 @@ end
 \#   .gcolor.
 \#
 .MAC DRV END
-.    if \\n[.vpt]=1 \{\
-.       vpt 0
-.       nr #RESTORE_TRAP 1
-.    \}
-.    ie !\\n[#NO_ADVANCE]=1 .br
-.    el \{\
-.       sp -1v
-.       rr #NO_ADVANCE
-.    \}
-.    ie \\n[.u]=1 \{\
-.       nr #FILLED 1
-.       nr #FILL_MODE \\n[.j]
-.    \}
-.    el \{\
-.       nr #NOFILL 1
-.       if \\n[.ce]>0 .nr #NOFILL_MODE 3
-.       if \\n[.rj]>0 .nr #NOFILL_MODE 5
-.       ce 0
-.       rj 0
-.    \}
-.    nf
+.    GRAPHICAL_OBJ
 .    ds $RL_WEIGHT \\$1
 .    ds $RL_INDENT \\$2
 .    ds $RL_DEPTH  \\$3
-.    ie !'\\$4'' \{\
+.    ie !'\\$4'' \
 .       ds $RL_COLOR  \\$4
-.    \}
-.    el .ds $RL_COLOR default
+.    el .ds $RL_COLOR \\*[default]
 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
 .    nr #SAVED_WEIGHT_ADJ \\n[#RULE_WEIGHT_ADJ]
 .    RULE_WEIGHT \\*[$RL_WEIGHT]
-.    gcolor \\*[$RL_COLOR]
+.    COLOR \\*[$RL_COLOR]
 \D't \\n[#RULE_WEIGHT]'\
 \h'\\*[$RL_INDENT]-\\n[#RULE_WEIGHT_ADJ]u'\
 \D'l 0 \\*[$RL_DEPTH]'\
@@ -2937,18 +2946,17 @@ end
 .    nr #RULE_WEIGHT     \\n[#SAVED_WEIGHT]
 .    nr #RULE_WEIGHT_ADJ \\n[#SAVED_WEIGHT_ADJ]
 .    if \\n[#RESTORE_TRAP]=1 \{\
-.       vpt 1
+.       vpt
 .       rr #RESTORE_TRAP
 .    \}
-.    if '\\n[.z]'FLOAT*DIV' \{\
+.    if '\\n[.z]'FLOAT*DIV' \
 .       if !(\\n[.d]+\\*[$RL_DEPTH])<\\n[D-float] .nr D-float \\n[.d]+\\*[$RL_DEPTH]
-.    \}
 .END
 \#
 \# BOXES - DBX
 \# -----------
 \# *Arguments:
-\#   <rule weight | SOLID> <indent> <length> <depth> [ <color> ]
+\#   <rule weight> | SOLID> <indent> <length> <depth> [ <color> ]
 \# *Function:
 \#   Draws described box.
 \# *Notes:
@@ -2959,27 +2967,7 @@ end
 \#   arg given, the rule weight is the one set by RULE_WEIGHT.
 \#
 .MAC DBX END
-.    if \\n[.vpt]=1 \{\
-.       vpt 0
-.       nr #RESTORE_TRAP 1
-.    \}
-.    ie !\\n[#NO_ADVANCE]=1 .br
-.    el \{\
-.       sp -1v
-.       rr #NO_ADVANCE
-.    \}
-.    ie \\n[.u]=1 \{\
-.       nr #FILLED 1
-.       nr #FILL_MODE \\n[.j]
-.    \}
-.    el \{\
-.       nr #NOFILL 1
-.       if \\n[.ce]>0 .nr #NOFILL_MODE 3
-.       if \\n[.rj]>0 .nr #NOFILL_MODE 5
-.       ce 0
-.       rj 0
-.    \}
-.    nf
+.    GRAPHICAL_OBJ
 .    ie '\\$1'SOLID' .nr #BX_SOLID 1
 .    el              .ds $BX_WEIGHT \\$1
 .    ds $BX_INDENT \\$2
@@ -2989,7 +2977,7 @@ end
 .       ie d$\\$5_FILL .ds $BX_COLOR \\*[$\\$5_FILL]
 .       el             .ds $BX_COLOR \\$5
 .    \}
-.    el .ds $BX_COLOR default
+.    el .ds $BX_COLOR \\*[default]
 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
 .    nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
 .    if !'\\$1'SOLID' .RULE_WEIGHT \\*[$BX_WEIGHT]
@@ -3002,7 +2990,7 @@ end
 .       rr #BX_SOLID
 .    \}
 .    el \{\
-.       gcolor \\*[$BX_COLOR]
+.       COLOR \\*[$BX_COLOR]
 \D't \\n[#RULE_WEIGHT]'\
 \h'\\*[$BX_INDENT]'\
 \v'\\n[#WEIGHT_ADJ]u'\
@@ -3017,7 +3005,6 @@ end
 .       if \\n[#FILL_MODE]=1 .JUSTIFY
 .       if \\n[#FILL_MODE]=3 .QUAD CENTER
 .       if \\n[#FILL_MODE]=5 .QUAD RIGHT
-.       rr #FILLED
 .    \}
 .    if \\n[#NOFILL]=1 \{\
 .       if \\n[#NOFILL_MODE]=3 .CENTER
@@ -3028,7 +3015,7 @@ end
 .    rr #SAVED_WEIGHT
 .    rr #SAVED_WEIGHT_ADJ
 .    if \\n[#RESTORE_TRAP]=1 \{\
-.       vpt 1
+.       vpt
 .       rr #RESTORE_TRAP
 .    \}
 .    if '\\n[.z]'FLOAT*DIV' \
@@ -3038,7 +3025,7 @@ end
 \# ELLIPSES - DCL
 \# --------------
 \# *Arguments:
-\#   <rule weight | SOLID> <indent> <width> <depth> [ <color> ]
+\#   <rule weight> | SOLID> <indent> <width> <depth> [ <color> ]
 \# *Function:
 \#   Draws described ellipses.
 \# *Notes:
@@ -3050,27 +3037,7 @@ end
 \#   RULE_WEIGHT.
 \#
 .MAC DCL END
-.    if \\n[.vpt]=1 \{\
-.       vpt 0
-.       nr #RESTORE_TRAP 1
-.    \}
-.    ie !\\n[#NO_ADVANCE]=1 .br
-.    el \{\
-.       sp -1v
-.       rr #NO_ADVANCE
-.    \}
-.    ie \\n[.u]=1 \{\
-.       nr #FILLED 1
-.       nr #FILL_MODE \\n[.j]
-.    \}
-.    el \{\
-.       nr #NOFILL 1
-.       if \\n[.ce]>0 .nr #NOFILL_MODE 3
-.       if \\n[.rj]>0 .nr #NOFILL_MODE 5
-.       ce 0
-.       rj 0
-.    \}
-.    nf
+.    GRAPHICAL_OBJ
 .    ie '\\$1'SOLID' .nr #CL_SOLID 1
 .    el              .ds $CL_WEIGHT \\$1
 .    ds $CL_INDENT \\$2
@@ -3080,7 +3047,7 @@ end
 .       ie d$\\$5_FILL .ds $CL_COLOR \\*[$\\$5_FILL]
 .       el             .ds $CL_COLOR \\$5
 .    \}
-.    el .ds $CL_COLOR default
+.    el .ds $CL_COLOR \\*[default]
 .    nr #SAVED_WEIGHT     \\n[#RULE_WEIGHT]
 .    nr #SAVED_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
 .    if !'\\$1'SOLID' .RULE_WEIGHT \\*[$CL_WEIGHT]
@@ -3095,7 +3062,7 @@ end
 .       rr #CL_SOLID
 .    \}
 .    el \{\
-.       gcolor \\*[$CL_COLOR]
+.       COLOR \\*[$CL_COLOR]
 \D't \\n[#RULE_WEIGHT]'\
 \h'\\*[$CL_INDENT]'\
 \v'\\*[$CL_DEPTH]/2u'\
@@ -3121,7 +3088,7 @@ end
 .    rr #SAVED_WEIGHT
 .    rr #SAVED_WEIGHT_ADJ
 .    if \\n[#RESTORE_TRAP]=1 \{\
-.       vpt 1
+.       vpt
 .       rr #RESTORE_TRAP
 .    \}
 .    if '\\n[.z]'FLOAT*DIV' \
@@ -3144,7 +3111,7 @@ end
 .       substring $ARG -1
 .       if !\B'\\*[$ARG]' \{\
 .          tm1 "[mom]: The argument to \\$0 must not have a unit of measure appended.
-.          ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.          ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .       \}
 .       length #STR_LENGTH \\$1
 .       ds $ARG \\$1
@@ -3155,13 +3122,14 @@ end
 .          nr #WEIGHT \\*[$ARG]*100
 .          if (\\n[#WEIGHT]>=1000) \{\
 .              while (\\n[#WEIGHT]>=1000) \{\
-.                  nr #WEIGHT \\n[#WEIGHT]/10
+.                 nr #WEIGHT \\n[#WEIGHT]/10
 .              \}
 .          \}
 .       \}
 .       el \{\
 .          ds $ARG \\$1
-.          substring $ARG 1 1
+.          length #ARG_LENGTH \\*[$ARG]
+.          if \\n[#ARG_LENGTH]>1 .substring $ARG 1 1
 .          ie '\\*[$ARG]'.' \{\
 .             ds $LHS \\$1
 .             substring $LHS 0 0
@@ -3201,29 +3169,32 @@ end
 .          \}
 .       \}
 .       nr #WEIGHT_ADJ \\n[#WEIGHT]/2
-.       if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT' \{\
-.          nr #BIB_STRING_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'COVER_UNDERLINE_WEIGHT' \{\
-.          nr #COVER_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #COVER_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'DOC_COVER_UNDERLINE_WEIGHT' \{\
-.          nr #DOC_COVER_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #DOC_COVER_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'DOCTYPE_UNDERLINE_WEIGHT' \{\
-.          nr #DOCTYPE_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
+.       if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT' \
+.          ds $TITLE_TYPE BIB_STRING_
+.       if '\\$0'ENDNOTE_TITLE_UNDERLINE_WEIGHT' \
+.          ds $TITLE_TYPE EN_TITLE_
+.       if '\\$0'EN_HEADER_UNDERLINE_WEIGHT' \
+.          ds $TITLE_TYPE EN_STRING_
+.       if !'\\*[$TITLE_TYPE]'BIB_STRING' \
+.          if !'\\*[$TITLE_TYPE]'EN_TITLE' \
+.             if !'\\*[$TITLE_TYPE]'EN_STRING' \
+.                ds _TYPE \\$0
+.       length type-len _TYPE
+.       if \\n[type-len]>17 \{\
+.          substring _TYPE 0 -17
+.          ds $TITLE_TYPE \\*[_TYPE]
+.       \}
+.       if !'\\*[$TITLE_TYPE]'' \{\
+.          nr #\\*[$TITLE_TYPE]UNDERLINE_WEIGHT \\n[#WEIGHT]
+.          nr #\\*[$TITLE_TYPE]UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
 .       \}
-.       if '\\$0'ENDNOTE_STRING_UNDERLINE_WEIGHT' \{\
-.          nr #EN_STRING_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #EN_STRING_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
+.       if '\\$0'RULE_WEIGHT' \{\
+.          nr #RULE_WEIGHT     \\n[#WEIGHT]
+.          nr #RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
 .       \}
-.       if '\\$0'ENDNOTE_TITLE_UNDERLINE_WEIGHT' \{\
-.          nr #EN_TITLE_UNDERLINE_WEIGHT     \\n[#WEIGHT]
-.          nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
+.       if '\\$0'UNDERSCORE_WEIGHT' \{\
+.          nr #UNDERSCORE_WEIGHT     \\n[#WEIGHT]
+.          nr #UNDERSCORE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
 .       \}
 .       if '\\$0'FOOTER_RULE_WEIGHT' \{\
 .          nr #FOOTER_RULE_WEIGHT     \\n[#WEIGHT]
@@ -3237,35 +3208,26 @@ end
 .          nr #HEADER_RULE_WEIGHT     \\n[#WEIGHT]
 .          nr #HEADER_RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
 .       \}
-.       if '\\$0'RULE_WEIGHT' \{\
-.          nr #RULE_WEIGHT     \\n[#WEIGHT]
-.          nr #RULE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
-.       if '\\$0'UNDERSCORE_WEIGHT' \{\
-.          nr #UNDERSCORE_WEIGHT     \\n[#WEIGHT]
-.          nr #UNDERSCORE_WEIGHT_ADJ \\n[#WEIGHT_ADJ]
-.       \}
 .    di
 .END
 \#
-\# Aliases
+\# Aliases for RULE_WEIGHT
 \# 
-.ALIAS BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT RULE_WEIGHT
-.ALIAS COVER_UNDERLINE_WEIGHT               RULE_WEIGHT
-.ALIAS DOC_COVER_UNDERLINE_WEIGHT           RULE_WEIGHT
-.ALIAS DOCTYPE_UNDERLINE_WEIGHT             RULE_WEIGHT
-.ALIAS ENDNOTE_STRING_UNDERLINE_WEIGHT      RULE_WEIGHT
-.ALIAS ENDNOTE_TITLE_UNDERLINE_WEIGHT       RULE_WEIGHT
-.ALIAS FOOTER_RULE_WEIGHT                   RULE_WEIGHT
-.ALIAS FOOTNOTE_RULE_WEIGHT                 RULE_WEIGHT
-.ALIAS HEADER_RULE_WEIGHT                   RULE_WEIGHT
-.ALIAS UNDERSCORE_WEIGHT                    RULE_WEIGHT
+.ALIAS BIB_STRING_UNDERLINE_WEIGHT RULE_WEIGHT
+.ALIAS DOCTYPE_UNDERLINE_WEIGHT    RULE_WEIGHT
+.ALIAS EN_STRING_UNDERLINE_WEIGHT  RULE_WEIGHT
+.ALIAS EN_TITLE_UNDERLINE_WEIGHT   RULE_WEIGHT
+.ALIAS FN_RULE_WEIGHT              RULE_WEIGHT
+.ALIAS FOOTER_RULE_WEIGHT          RULE_WEIGHT
+.ALIAS FOOTNOTE_RULE_WEIGHT        RULE_WEIGHT
+.ALIAS HEADER_RULE_WEIGHT          RULE_WEIGHT
+.ALIAS RULE_WEIGHT                 RULE_WEIGHT
+.ALIAS TOC_HEADER_UNDERLINE_WEIGHT RULE_WEIGHT
+.ALIAS UNDERSCORE_WEIGHT           RULE_WEIGHT
 \#
 \# Default rule weights
-\# ~~~~~~~~~~~~~~~~~~~~
+\# 
 .nr #BIB_STRING_UNDERLINE_WEIGHT 500
-.nr #COVER_UNDERLINE_WEIGHT      500
-.nr #DOC_COVER_UNDERLINE_WEIGHT  500
 .nr #DOCTYPE_UNDERLINE_WEIGHT    500
 .nr #EN_STRING_UNDERLINE_WEIGHT  500
 .nr #EN_TITLE_UNDERLINE_WEIGHT   500
@@ -3273,20 +3235,38 @@ end
 .nr #FOOTER_RULE_WEIGHT          500
 .nr #HEADER_RULE_WEIGHT          500
 .nr #RULE_WEIGHT                 500
+.nr #TOC_HEADER_UNDERLINE_WEIGHT 500
 .nr #UNDERSCORE_WEIGHT           500
 \#
 .nr #BIB_STRING_UNDERLINE_WEIGHT_ADJ \n[#BIB_STRING_UNDERLINE_WEIGHT]/2
-.nr #COVER_UNDERLINE_WEIGHT_ADJ      \n[#DOCTYPE_UNDERLINE_WEIGHT]/2
-.nr #DOC_COVER_UNDERLINE_WEIGHT_ADJ  \n[#DOCTYPE_RULE_WEIGHT]/2
-.nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ    \n[#DOCTYPE_RULE_WEIGHT]/2
+.nr #DOCTYPE_UNDERLINE_WEIGHT_ADJ    \n[#DOCTYPE_UNDERLINE_WEIGHT]/2
 .nr #EN_STRING_UNDERLINE_WEIGHT_ADJ  \n[#EN_STRING_UNDERLINE_WEIGHT]/2
-.nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ   \n[#EN_STRING_UNDERLINE_WEIGHT]/2
-.nr #FOOTER_RULE_WEIGHT_ADJ          \n[#FOOTER_RULE_WEIGHT]/2
+.nr #EN_TITLE_UNDERLINE_WEIGHT_ADJ   \n[#EN_TITLE_UNDERLINE_WEIGHT]/2
 .nr #FN_RULE_WEIGHT_ADJ              \n[#FN_RULE_WEIGHT]/2
+.nr #FOOTER_RULE_WEIGHT_ADJ          \n[#FOOTER_RULE_WEIGHT]/2
 .nr #HEADER_RULE_WEIGHT_ADJ          \n[#HEADER_RULE_WEIGHT]/2
 .nr #RULE_WEIGHT_ADJ                 \n[#RULE_WEIGHT]/2
+.nr #TOC_HEADER_UNDERLINE_WEIGHT_ADJ \n[#TOC_HEADER_UNDERLINE_WEIGHT]/2
 .nr #UNDERSCORE_WEIGHT_ADJ           \n[#UNDERSCORE_WEIGHT]/2
 \#
+\# Read in remaining aliases and default rule weights
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=14 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT           RULE_WEIGHT
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT     RULE_WEIGHT
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT RULE_WEIGHT
+. nr #\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT            500
+. nr #COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT      500
+. nr #DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT  500
+. nr #\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT_ADJ \
+    \n[#\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT]/2
+. nr #COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT_ADJ \
+    \n[#COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT]/2
+. nr #DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT_ADJ \
+    \n[#DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE_WEIGHT]/2
+.\}
+\#
 \# Set default rule weight
 \#
 .di NULL
@@ -3316,10 +3296,10 @@ end
 .    ds $WS_VAR  \\$1
 .    ie '\\$1'DEFAULT' .ss 12 \\n[.sss]
 .    el \{\
-.       ds $WS (\\*[$WS_CURR]\\*[$WS_VAR])
+.       ds $WS (\\*[$WS_CURR]+\\*[$WS_VAR])
 .       ie \\n[.sss]=12 .ss \\*[$WS] 12
 .       el \{\
-.          ss \\*[$WS] (\\*[$WS]\\*[$SS_VAR])
+.          ss \\*[$WS] (\\*[$WS]+\\*[$SS_VAR])
 .          SS \\*[$SS_VAR]
 .      \}
 .    \}
@@ -3350,7 +3330,7 @@ end
 .    ie '\\$1'0' .ss \\n[.ss] (\\n[.ss]-\\n[.ss])
 .    el \{\
 .       ie '\\$1'DEFAULT' .ss \\n[.ss]
-.       el                .ss \\n[.ss] (0\\*[$SS_VAR])
+.       el                .ss \\n[.ss] (0+\\*[$SS_VAR])
 .    \}
 .END
 \#
@@ -3415,38 +3395,27 @@ end
 \# +++INDENT BOTH+++
 \#
 .MAC IB END
-.    if \\n[#INDENT_STYLE_LEFT] .ILX
+.    br
+.    if \\n[#INDENT_STYLE_LEFT]  .ILX
 .    if \\n[#INDENT_STYLE_RIGHT] .IRX
 .    nr #INDENT_STYLE_BOTH  1
 .    nr #INDENT_ACTIVE      1
 .    nr #INDENT_BOTH_ACTIVE 1
 .    ie '\\$1'' \{\
-.       br
+.       ie \\n[#DOCS] \
+.          ll \\n[#DOC_L_LENGTH]u-\\n[#BR_INDENT]u
+.       el .ll \\n[.l]u-\\n[#BR_INDENT]u
 .       in \\n[#BL_INDENT]u
-.       ie \\n[#TAB_ACTIVE] \{\
-.          ll \\n[.l]u-\\n[#BR_INDENT]u
-.          ta \\n[.l]u-\\n[#BR_INDENT]u
-.       \}
-.       el \{\
-.          ll \\n[.l]u-\\n[#BR_INDENT]u
-.          ta \\n[.l]u-\\n[#BR_INDENT]u
-.       \}
+.       ta \\n[.l]u
 .    \}
 .    el \{\
-.       br
 .       nr #BL_INDENT (\\n[#INDENT]+\\$1)
 .       ie \\n[#NUM_ARGS]=2 .nr #BR_INDENT +(\\$2)
 .       el .nr #BR_INDENT \\n[#BL_INDENT]
-.       ie \\n[#TAB_ACTIVE] \{\
-.          in \\n[#BL_INDENT]u
-.          ll \\n[.l]u-\\n[#BR_INDENT]u
-.          ta \\n[.l]u-\\n[#BL_INDENT]u
-.       \}
-.       el \{\
-.          in \\n[#BL_INDENT]u
-.          ll \\n[.l]u-\\n[#BR_INDENT]u
-.          ta \\n[.l]u-\\n[#BR_INDENT]u
-.       \}
+.       if '\\n[.z]'' .ll
+.       ll \\n[.l]u-\\n[#BR_INDENT]u
+.       in \\n[#BL_INDENT]u
+.       ta \\n[.l]u-\\n[#BR_INDENT]u
 .    \}
 .END
 \#
@@ -3483,10 +3452,13 @@ end
 .       br
 .       in 0
 .       rr #INDENT_LEFT_ACTIVE
+.       nr #L_INDENT_ILX \\n[#L_INDENT]
 .    \}
 .    if '\\$1'CLEAR' \{\
 .       rr #L_INDENT
 .       rr #INDENT_STYLE_LEFT
+.       rr #L_INDENT_ILX
+.       rr #INDENT_ACTIVE
 .    \}
 .END
 \#
@@ -3513,6 +3485,7 @@ end
 .MAC IBX END
 .    br
 .    in 0
+.    rr #INDENT_ACTIVE
 .    rr #INDENT_BOTH_ACTIVE
 .    ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
 .    el \{\
@@ -3546,6 +3519,7 @@ end
 .    rr #INDENT_LEFT_ACTIVE
 .    rr #INDENT_RIGHT_ACTIVE
 .    rr #INDENT_BOTH_ACTIVE
+.    rr #INDENT_ACTIVE
 .    if \\n[#INDENT_STYLE_RIGHT] \{\
 .       ie \\n[#TAB_ACTIVE] .TAB\\n[#CURRENT_TAB]
 .       el \{\
@@ -3609,7 +3583,62 @@ end
 .       rr #INDENT_STYLE_RIGHT
 .       rr #INDENT_STYLE_BOTH
 .    \}
-.    rr #INDENT_ACTIVE
+.END
+\#
+\# =====================================================================
+\#
+\# +++HANGING CHARACTERS+++
+\#
+\#   LEFT_HANG hangs its argument to the left of the left margin.
+\#   If enclosed in double-quotes, the argument may contain local
+\#   horizontal motions.  Input text after LEFT_HANG must begin
+\#   by repeating the text of the argument including horizontal
+\#   motions.  If the hung character is a left double-quote,
+\#   \[lq] must be used in the argument and the usual keyboard
+\#   double-quote (") used for the input text (so as not to confuse
+\#   SMARTQUOTES).
+\#
+\#   HANG is called inline with \*[HANG <character>].  Hangs its
+\#   single-character argument, typically a punctuation mark, to the
+\#   right of the right margin in justified copy.  Unlike LEFT_HANG,
+\#   does not require repeating the character as part of input text.
+\#
+\#   Except for hung hyphens, HANG may be used mid-line in input
+\#   text.  Hung hyphens must come at the end of input lines.  If
+\#   the hung character is a right double-quote, "\[rq]" must be
+\#   used as the argument (that is, the rq character surrounded by
+\#   double-quotes).  The double-quotes are required for all special
+\#   characters that have the form \[c].
+\#
+.MAC LEFT_HANG END
+.    ie '\\$0'LEFT_HANG' \{\
+.       vpt 0
+.       sp -1
+.       nr #HANG \w'\\$1'
+.       in +\\n[#HANG]u
+.       ll +\\n[#HANG]u
+.       ie !\\n[.z] .po -\\n[#HANG]u
+.       el \!.po -\\n[#HANG]u
+.       ti -\\n[#HANG]u
+.       vpt
+.    \}
+.    el \{\
+.       vpt 0
+.       in
+.       ll
+.       po
+.       vpt
+.    \}
+.END
+\#
+.ALIAS NO_HANG LEFT_HANG
+\#
+.MAC HANG END
+\c
+.if '\\$1'\[rq]' .nr #OPEN_CLOSE 0
+\c
+\&\\$1\c
+\h'-\w'\\$1'u'\c
 .END
 \#
 \# =====================================================================
@@ -3635,9 +3664,9 @@ end
 \#   Returns to the top of a column set
 \#
 .MAC MCR END
-.    TRAP OFF
+.    vpt 0
 .    sp |\\n[c]u
-.    TRAP
+.    vpt
 .END
 \#
 \# MULTIPLE COLUMNS OFF
@@ -3654,8 +3683,9 @@ end
 \#   is zero, advances to the baseline of the deepest column.
 \#
 .MAC MCX END
-.    TRAP OFF
+.    vpt 0
 .    ie '\\$1'' \{\
+.       if '\\n[.z]'FLOAT*DIV' \!.TQ
 .       TQ
 .       sp |\\n[.h]u
 .    \}
@@ -3666,7 +3696,7 @@ end
 .       el .sp |\\n[.h]u+\\n[#MCX_ALD]u
 .       rr #MCX_ALD
 .    \}
-.    TRAP
+.    vpt
 .END
 \#
 \# =====================================================================
@@ -3684,10 +3714,10 @@ end
 \#   a trap (when they break the preceding line, they spring the
 \#   trap, and groff won't back up to the line preceding the trap).
 \#   TRAP is a kludge to get EL and TN work properly on last lines.
-\#   The user simply enloses the offending lines in TRAP OFF/TRAP.
+\#   The user simply encloses the offending lines in TRAP OFF/TRAP.
 \#
 .MAC TRAP END
-.    ie '\\$1'' .vpt 1
+.    ie '\\$1'' .vpt
 .    el         .vpt 0
 .END
 \#
@@ -3725,6 +3755,126 @@ end
 .    nop \\$*
 .END
 \#
+\# Numbered strings for while loop in SMALLCAPS.
+\#
+.ds $c1 a
+.ds $c2 b
+.ds $c3 c
+.ds $c4 d
+.ds $c5 e
+.ds $c6 f
+.ds $c7 g
+.ds $c8 h
+.ds $c9 i
+.ds $c10 j
+.ds $c11 k
+.ds $c12 l
+.ds $c13 m
+.ds $c14 n
+.ds $c15 o
+.ds $c16 p
+.ds $c17 q
+.ds $c18 r
+.ds $c19 s
+.ds $c20 t
+.ds $c21 u
+.ds $c22 v
+.ds $c23 w
+.ds $c24 x
+.ds $c25 y
+.ds $c26 z
+.ds $c27 \[`a]
+.ds $c28 \[^a]
+.ds $c29 \['a]
+.ds $c30 \[:a]
+.ds $c31 \[oa]
+.ds $c32 \[~a]
+.ds $c33 \[ae]
+.ds $c34 \[`e]
+.ds $c35 \[^e]
+.ds $c36 \['e]
+.ds $c37 \[:e]
+.ds $c38 \[`i]
+.ds $c39 \[^i]
+.ds $c40 \['i]
+.ds $c41 \[:i]
+.ds $c42 \[`o]
+.ds $c43 \[^o]
+.ds $c44 \['o]
+.ds $c45 \[:o]
+.ds $c46 \[~o]
+.ds $c47 \[/o]
+.ds $c48 \[`u]
+.ds $c49 \[^u]
+.ds $c50 \['u]
+.ds $c51 \[:u]
+.ds $c52 \[,c]
+.ds $c53 \[Sd]
+.ds $c54 \[~n]
+.ds $c55 \[Sd]
+.ds $c56 \[Tp]
+.ds $c57 \['y]
+.ds $c58 \[:y]
+\#
+.ds $C1 A
+.ds $C2 B
+.ds $C3 C
+.ds $C4 D
+.ds $C5 E
+.ds $C6 F
+.ds $C7 G
+.ds $C8 H
+.ds $C9 I
+.ds $C10 J
+.ds $C11 K
+.ds $C12 L
+.ds $C13 M
+.ds $C14 N
+.ds $C15 O
+.ds $C16 P
+.ds $C17 Q
+.ds $C18 R
+.ds $C19 S
+.ds $C20 T
+.ds $C21 U
+.ds $C22 V
+.ds $C23 W
+.ds $C24 X
+.ds $C25 Y
+.ds $C26 Z
+.ds $C27 \[`A]
+.ds $C28 \[^A]
+.ds $C29 \['A]
+.ds $C30 \[:A]
+.ds $C31 \[oA]
+.ds $C32 \[~A]
+.ds $C33 \[AE]
+.ds $C34 \[`E]
+.ds $C35 \[^E]
+.ds $C36 \['E]
+.ds $C37 \[:E]
+.ds $C38 \[`I]
+.ds $C39 \[^I]
+.ds $C40 \['I]
+.ds $C41 \[:I]
+.ds $C42 \[`O]
+.ds $C43 \[^O]
+.ds $C44 \['O]
+.ds $C45 \[:O]
+.ds $C46 \[~O]
+.ds $C47 \[/O]
+.ds $C48 \[`U]
+.ds $C49 \[^U]
+.ds $C50 \['U]
+.ds $C51 \[:U]
+.ds $C52 \[,C]
+.ds $C53 \[-D]
+.ds $C54 \[~N]
+.ds $C55 \[-D]
+.ds $C56 \[TP]
+.ds $C57 \['Y]
+.ds $C58 \[:Y]
+\#
 \# CAPS
 \# ----
 \# *Arguments:
@@ -3737,152 +3887,125 @@ end
 \#
 .MAC CAPS END
 .    ie '\\$1'' \{\
-.       tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
-.       tr \[`a]\[`A]
-.       tr \[^a]\[^A]
-.       tr \['a]\['A]
-.       tr \[:a]\[:A]
-.       tr \[oa]\[oA]
-.       tr \[~a]\[~A]
-.       tr \[ae]\[AE]
-.       tr \[`e]\[`E]
-.       tr \[^e]\[^E]
-.       tr \['e]\['E]
-.       tr \[:e]\[:E]
-.       tr \[`i]\[`I]
-.       tr \[^i]\[^I]
-.       tr \['i]\['I]
-.       tr \[:i]\[:I]
-.       tr \[`o]\[`O]
-.       tr \[^o]\[^O]
-.       tr \['o]\['O]
-.       tr \[:o]\[:O]
-.       tr \[~o]\[~O]
-.       tr \[/o]\[/O]
-.       tr \[`u]\[`U]
-.       tr \[^u]\[^U]
-.       tr \['u]\['U]
-.       tr \[:u]\[:U]
-.       tr \[,c]\[,C]
-.       tr \[-d]\[-D]
-.       tr \[~n]\[~N]
-.       tr \[Sd]\[-D]
-.       tr \[Tp]\[TP]
-.       tr \['y]\['Y]
-.       tr \[:y]\[:Y]
+.       LC_TO_CAPS
 .       nr #CAPS_ON 1
 .    \}
 .    el \{\
-.       tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz
-.       tr \[`a]\[`a]
-.       tr \[^a]\[^a]
-.       tr \['a]\['a]
-.       tr \[:a]\[:a]
-.       tr \[oa]\[oa]
-.       tr \[~a]\[~a]
-.       tr \[ae]\[ae]
-.       tr \[`e]\[`e]
-.       tr \[^e]\[^e]
-.       tr \['e]\['e]
-.       tr \[:e]\[:e]
-.       tr \[`i]\[`i]
-.       tr \[^i]\[^i]
-.       tr \['i]\['i]
-.       tr \[:i]\[:i]
-.       tr \[`o]\[`o]
-.       tr \[^o]\[^o]
-.       tr \['o]\['o]
-.       tr \[:o]\[:o]
-.       tr \[~o]\[~o]
-.       tr \[/o]\[/o]
-.       tr \[`u]\[`u]
-.       tr \[^u]\[^u]
-.       tr \['u]\['u]
-.       tr \[:u]\[:u]
-.       tr \[,c]\[,c]
-.       tr \[Sd]\[Sd]
-.       tr \[~n]\[~n]
-.       tr \[Tp]\[Tp]
-.       tr \['y]\['y]
-.       tr \[:y]\[:y]
+.       CAPS_TO_LC
 .       rr #CAPS_ON
 .    \}
 .END
 \#
 .MAC UC END
 \c
-.    tr aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ
-.    tr \[`a]\[`A]
-.    tr \[^a]\[^A]
-.    tr \['a]\['A]
-.    tr \[:a]\[:A]
-.    tr \[oa]\[oA]
-.    tr \[~a]\[~A]
-.    tr \[ae]\[AE]
-.    tr \[`e]\[`E]
-.    tr \[^e]\[^E]
-.    tr \['e]\['E]
-.    tr \[:e]\[:E]
-.    tr \[`i]\[`I]
-.    tr \[^i]\[^I]
-.    tr \['i]\['I]
-.    tr \[:i]\[:I]
-.    tr \[`o]\[`O]
-.    tr \[^o]\[^O]
-.    tr \['o]\['O]
-.    tr \[:o]\[:O]
-.    tr \[~o]\[~O]
-.    tr \[/o]\[/O]
-.    tr \[`u]\[`U]
-.    tr \[^u]\[^U]
-.    tr \['u]\['U]
-.    tr \[:u]\[:U]
-.    tr \[,c]\[,C]
-.    tr \[Sd]\[-D]
-.    tr \[~n]\[~N]
-.    tr \[Tp]\[TP]
-.    tr \['y]\['Y]
-.    tr \[:y]\[:Y]
+.    LC_TO_CAPS
 .    nr #CAPS_ON 1
 .END
 \#
 .MAC LC END
 \c
-.    tr aabbccddeeffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz
-.    tr \[`a]\[`a]
-.    tr \[^a]\[^a]
-.    tr \['a]\['a]
-.    tr \[:a]\[:a]
-.    tr \[oa]\[oa]
-.    tr \[~a]\[~a]
-.    tr \[ae]\[ae]
-.    tr \[`e]\[`e]
-.    tr \[^e]\[^e]
-.    tr \['e]\['e]
-.    tr \[:e]\[:e]
-.    tr \[`i]\[`i]
-.    tr \[^i]\[^i]
-.    tr \['i]\['i]
-.    tr \[:i]\[:i]
-.    tr \[`o]\[`o]
-.    tr \[^o]\[^o]
-.    tr \['o]\['o]
-.    tr \[:o]\[:o]
-.    tr \[~o]\[~o]
-.    tr \[/o]\[/o]
-.    tr \[`u]\[`u]
-.    tr \[^u]\[^u]
-.    tr \['u]\['u]
-.    tr \[:u]\[:u]
-.    tr \[,c]\[,c]
-.    tr \[Sd]\[Sd]
-.    tr \[~n]\[~n]
-.    tr \[Tp]\[Tp]
-.    tr \['y]\['y]
-.    tr \[:y]\[:y]
+.    CAPS_TO_LC
 .    rr #CAPS_ON
 .END
 \#
+\# Perform lowercase conversion to caps or revert to lowercase
+\#
+.MAC CONVERT_CASE END
+.    if '\\$0'LC_TO_CAPS' \{\
+.       nr #LOOP 0 1
+.       while \\n+[#LOOP]<=58 \{\
+.          tr \\*[$c\\n[#LOOP]]\\*[$C\\n[#LOOP]]  
+.       \}
+.    \}
+.    if '\\$0'CAPS_TO_LC' \{\
+.       nr #LOOP 0 1
+.       while \\n+[#LOOP]<=58 \{\
+.          tr \\*[$c\\n[#LOOP]]\\*[$c\\n[#LOOP]]  
+.       \}
+.    \}
+.END
+.
+.ALIAS LC_TO_CAPS CONVERT_CASE
+.ALIAS CAPS_TO_LC CONVERT_CASE
+.
+\#
+\# SMALLCAPS
+\# ---------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Converts text to smallcaps, or, if <anything>, reverts to normal
+\#   caps/lc.
+\# *Notes:
+\#   SMALLCAPS has no inline escape eqiv. to \*[UC].
+\#
+.MAC SMALLCAPS END
+.    if \\n[.int] .nop \& \c
+.    nr sc*size \\n[.ps]*\\n[sc*factor]/1000
+.    if \\n[sc*wt-adj] .nr sc*wt-adj-factor \\n[sc*size]*\\n[sc*wt-adj]/1000
+.    if \\n[sc*extend] .nr sc*extend-factor \\n[sc*size]*\\n[sc*extend]/1000
+.    ie '\\$1'' \{\
+.       nr #SMALLCAPS_ON 1
+.       nr #LOOP 0 1
+.       while \\n+[#LOOP]<=58 \{\
+.          char \\*[$c\\n[#LOOP]] \
+\Z'\s[\\n[sc*size]u+\\n[sc*extend-factor]u]\H'-\\n[sc*extend-factor]u'\
+\\*[$C\\n[#LOOP]]'\
+\h'\\n[sc*wt-adj-factor]u'\\*[$C\\n[#LOOP]]\s[0]
+.       \}
+.    \}
+.    el \{\
+.       nr #LOOP 0 1
+.       while \\n+[#LOOP]<=58 \{\
+.          rchar \\*[$c\\n[#LOOP]]
+.      \}
+.      rr sc*wt-adj-factor
+.      rr sc*extend-factor
+.      rr #SMALLCAPS_ON
+.    \}
+.END
+\#
+\# SMALLCAPS_SIZE
+\# --------------
+\# *Arguments:
+\#   <size> [ <weight adjustment>
+\# *Function:
+\#   Sets registers 'sc*factor', 'sc*wt-adj', and sc*extend.
+\# *Notes:
+\#   Weight adjustment pseudo-emboldens small caps to visually match the
+\#   weight of the larger real caps.
+\#
+\#   Both sc*factor (size) and sc*wt-adj (weight adjustment) args are
+\#   expressed as percentages of type size.
+\#
+.MAC SMALLCAPS_STYLE END
+.    nr #LOOP 0 1
+.    while \\n+[#LOOP]<=\\n[#NUM_ARGS] \{\
+.       if '\\$1'SIZE' \{\
+.          shift
+.          nr sc*factor (z;\\$1)/100
+.          shift
+.       \}
+.       if '\\$1'WEIGHT_ADJ' \{\
+.          shift
+.          nr sc*wt-adj (z;\\$1)/100
+.          shift
+.       \}
+.       if '\\$1'EXTEND' \{\
+.          shift
+.          nr sc*extend (z;\\$1)/100
+.          shift
+.       \}
+.    \}
+.    if \\n[sc*wt-adj]=0 .rr sc*wt-adj
+.    if \\n[sc*extend]=0 .rr sc*extend
+.END
+.
+.SMALLCAPS_STYLE \
+SIZE 74 \
+WEIGHT_ADJ .3 \
+EXTEND 5
+\#
 \# SIZESPECS
 \# ---------
 \# Argument:
@@ -3913,32 +4036,30 @@ y\R'#DESCENDER \\n[.cdp]'
 \#
 \# +++TYPESETTING ALIASES+++
 \#
-.ALIAS    ADD_SPACE       ALD
-.ALIAS    CENTRE          CENTER
-.ALIAS    COLOUR          COLOR
-.ALIAS    COMMENT         SILENT
-.ALIAS    CONDENSE        CONDENSE_OR_EXTEND
-.ALIAS    EXTEND          CONDENSE_OR_EXTEND
-.ALIAS    FAM             FAMILY
-.ALIAS    FONT            FT
-.ALIAS    HYPHENATE       HY
-.ALIAS    HYPHENATION     HY
-.ALIAS    HYSET           HY_SET
-.ALIAS    IBQ             IBX
-.ALIAS    ILQ             ILX
-.ALIAS    IQ              IX
-.ALIAS    IRQ             IRX
-.ALIAS    LIG             LIGATURES
-.ALIAS    NEWCOLOUR       NEWCOLOR
-.ALIAS    PADMARKER       PAD_MARKER
-.ALIAS    SP              ALD
-.ALIAS    SPACE           ALD
-.ALIAS    TABSET          TAB_SET
-.ALIAS    TB              TAB
-.ALIAS    UNDERSCORE_2    UNDERSCORE2
-.ALIAS    XCOLOUR         XCOLOR
-.ALIAS    PDF_LINK_COLOUR PDF_LINK_COLOR
-.ALIAS    AUTO_TOC_RELOCATE AUTO_RELOCATE_TOC
+.ALIAS ADD_SPACE         ALD
+.ALIAS CENTRE            CENTER
+.ALIAS COLOUR            COLOR
+.ALIAS COMMENT           SILENT
+.ALIAS CONDENSE          CONDENSE_OR_EXTEND
+.ALIAS EXTEND            CONDENSE_OR_EXTEND
+.ALIAS FAM               FAMILY
+.ALIAS FONT              FT
+.ALIAS HYPHENATE         HY
+.ALIAS HYPHENATION       HY
+.ALIAS HYSET             HY_SET
+.ALIAS IBQ               IBX
+.ALIAS ILQ               ILX
+.ALIAS IQ                IX
+.ALIAS IRQ               IRX
+.ALIAS LIG               LIGATURES
+.ALIAS NEWCOLOUR         NEWCOLOR
+.ALIAS PADMARKER         PAD_MARKER
+.ALIAS SP                ALD
+.ALIAS SPACE             ALD
+.ALIAS TABSET            TAB_SET
+.ALIAS TB                TAB
+.ALIAS UNDERSCORE_2      UNDERSCORE2
+.ALIAS XCOLOUR           XCOLOR
 \#
 \# ====================================================================
 \#
@@ -3946,7 +4067,7 @@ y\R'#DESCENDER \\n[.cdp]'
 \# ===============================================
 \#
 \# DOC_MACRO_ERROR
-\# ----------
+\# ---------------
 \# *Arguments:
 \#   None.
 \# *Function:
@@ -3962,7 +4083,7 @@ y\R'#DESCENDER \\n[.cdp]'
 .    if '\\$1'DOC_QUAD'        .ds $REPLACEMENT QUAD
 .    tm1 "[mom]: \\$1 at line \\n[.c] of '\\n[.F]' should not be used before START.
 .    tm1 "       Use \\*[$REPLACEMENT] instead.
-.    ab  Aborting.
+.    ab   [mom]: Aborting.
 .END
 \#
 \# +++PAGE DIMENSIONS+++
@@ -4059,8 +4180,10 @@ y\R'#DESCENDER \\n[.cdp]'
 .       if !d$PAPER .PAPER LETTER
 .       if '\\$1'TYPEWRITE' \{\
 .          nr #PRINT_STYLE 1
-.          if !\\n[#DOC_TYPE]=4 .L_MARGIN 6P
-.          if !\\n[#DOC_TYPE]=4 .R_MARGIN 6P
+.          if !\\n[#DOC_TYPE]=4 \{\
+.             L_MARGIN 6P
+.             R_MARGIN 6P
+.          \}
 .          ds $TYPEWRITER_FAM C
 .          ds $TYPEWRITER_PS  12
 .          TYPEWRITER
@@ -4069,7 +4192,7 @@ y\R'#DESCENDER \\n[.cdp]'
 .             nr #SINGLE_SPACE 1
 .             vs 12
 .             ie \\n[#DOC_TYPE]=4 .nr #FOOTER_ADJ \\n[.v]
-.             el .nr #FOOTER_ADJ \\n[.v]*2
+.             el .nr #FOOTER_ADJ \\n[.v]
 .             nr #ORIGINAL_DOC_LEAD \\n[.v]
 .          \}
 .          el \{\
@@ -4103,8 +4226,12 @@ y\R'#DESCENDER \\n[.cdp]'
 .       \}
 .       if '\\$1'TYPESET' \{\
 .          nr #PRINT_STYLE 2
-.          if !\\n[#DOC_TYPE]=4 .L_MARGIN 6P
-.          if !\\n[#DOC_TYPE]=4 .R_MARGIN 6P
+.          if !\\n[#DOC_TYPE]=5 \{\
+.             if !\\n[#DOC_TYPE]=4 \{\
+.                L_MARGIN 6P
+.                R_MARGIN 6P
+.             \}
+.          \}
 .          FAMILY  T
 .          FT      R
 .          if !\\n[#DOC_TYPE]=4 .ps 12.5
@@ -4132,15 +4259,16 @@ y\R'#DESCENDER \\n[.cdp]'
 .       nr #LOOP 9       \" loop count
 .       while \\n+[#HD_LEVEL]<=\\n[#LOOP] \{\
 .           HEADING_STYLE \\n[#HD_LEVEL] \
-            FONT   B \
+            FONT   \
             SIZE  +0 \
-            QUAD   L \
-            COLOR  black
+            QUAD  L  \
+            NEEDS 1 \
+            COLOR black
 .\"  Set up default style for nine levels of TOC headings
 .           TOC_ENTRY_STYLE \\n[#HD_LEVEL] \
-            FONT   R \
+            FONT   \
             SIZE  +0 \
-            COLOR  black
+            COLOR black
 .       \}
 .\" Set up decreasing sizes for headings levels 1 - 3, starting at +3
 .       nr #HD_LEVEL 0 1 \" loop step
@@ -4161,7 +4289,7 @@ y\R'#DESCENDER \\n[.cdp]'
 .    \}
 .END
 \#
-\# PRINTSTYLE TYPEWRITE control.
+\# Set limited parameters to TYPEWRITE.
 \#
 .MAC TYPEWRITER_FAMILY END
 .    ds $TYPEWRITER_FAM \\$1
@@ -4187,7 +4315,7 @@ y\R'#DESCENDER \\n[.cdp]'
 \#   Instructs TYPEWRITE to treat italics as italics, whether
 \#   invoked via control lines or inline.
 \# *Notes:
-\#   ITALIC_MEANS_ITALIC and UNDERLINE_ITALIC are mututally exclusive,
+\#   ITALIC_MEANS_ITALIC and UNDERLINE_ITALIC are mutually exclusive,
 \#   hence invoking the one automatically turns off the other.
 \#
 .MAC ITALIC_MEANS_ITALIC END
@@ -4211,7 +4339,7 @@ y\R'#DESCENDER \\n[.cdp]'
 \#   Instructs TYPEWRITE to underline italics, whether invoked
 \#   via control lines or inline.
 \# *Notes:
-\#   UNDERLINE_ITALIC and ITALIC_MEANS_ITALIC are mututally exclusive,
+\#   UNDERLINE_ITALIC and ITALIC_MEANS_ITALIC are mutually exclusive,
 \#   hence invoking the one automatically turns off the other.
 \#
 \#   UNDERLINE_ITALIC is the default for TYPEWRITE.
@@ -4242,7 +4370,7 @@ y\R'#DESCENDER \\n[.cdp]'
 \#   italic but didn't have it, ergo the need to tell TYPEWRITE to
 \#   treat \*[SLANT] as italic (i.e. underlined).
 \#
-\#   UNDERLINE_SLANT and SLANT_MEANS_SLANT are mututally exclusive,
+\#   UNDERLINE_SLANT and SLANT_MEANS_SLANT are mutually exclusive,
 \#   hence invoking the one automatically turns off the other.
 \#
 \#   UNDERLINE_SLANT is the default for TYPEWRITE.
@@ -4525,24 +4653,34 @@ y\R'#DESCENDER \\n[.cdp]'
 \#
 \# ====================================================================
 \#
-\# +++COLLECT DOC INFO -- STRINGS AND REGISTERS FOR REFERENCE MACROS+++
+\# +++COLLECT DOC INFO (reference macros, metadata)+++
 \#
 \# *Arguments:
 \#   various string/register arguments
 \# *Function:
-\#   Collect information about documents.
+\#   Set strings and registers for covers, docheaders, page headers.
 \#
 .MAC DOCTITLE END
 .    rr #DOCTITLE_NUM
 .    nr #DOCTITLE_NUM 0 1
 .    while \\n[#NUM_ARGS]>\\n[#DOCTITLE_NUM] \{\
-.       ds $DOC_TITLE_\\n+[#DOCTITLE_NUM] \\$\\n[#DOCTITLE_NUM]
+.       ds $DOCTITLE_\\n+[#DOCTITLE_NUM] \\$\\n[#DOCTITLE_NUM]
 .    \}
-.    ds $DOC_TITLE \\$*
-.    PDF_TITLE \\*[$DOC_TITLE]
+.    ds $DOCTITLE \\$*
+.    PDF_TITLE \\*[$DOCTITLE]
 .END
 \#
 .MAC TITLE END \"Document title
+.    if '\\$1'DOC_COVER' \{\
+.       shift
+.       DOC_COVERTITLE \\$@
+.       return
+.    \}
+.    if '\\$1'COVER' \{\
+.       shift
+.       COVERTITLE \\$@
+.       return
+.    \}
 .    ie \\n[#NUM_ARGS]=0 \{\
 .       if \\n[#TITLE_NUM] \{\
 .          nr #ITEM 0 1
@@ -4563,47 +4701,47 @@ y\R'#DESCENDER \\n[.cdp]'
 \#
 .MAC SUBTITLE END \"Document sub-title
 .    ie \\n[#NUM_ARGS]=0 \{\
-.       if \\n[#SUBTITLE_NUM] \{\
+.       if \\n[#DOC_COVER_SUBTITLE_NUM] \
+.          ds COVER_ DOC_COVER_
+.       if \\n[#COVER_SUBTITLE_NUM] \
+.          ds COVER_ COVER_
+.       if \\n[#\\*[COVER_]SUBTITLE_NUM] \{\
 .          nr #ITEM 0 1
-.          while \\n[#SUBTITLE_NUM]>\\n[#ITEM] \{\
-.             rm $SUBTITLE_\\n+[#ITEM]
+.          while \\n[#\\*[COVER_]SUBTITLE_NUM]>\\n[#ITEM] \{\
+.             rm $\\*[COVER_]SUBTITLE_\\n+[#ITEM]
 .          \}
-.          rr #SUBTITLE_NUM
+.          rr #\\*[COVER_]SUBTITLE_NUM
 .          rm $SUBTITLE
 .       \}
 .    \}
 .    el \{\
 .       if '\\$1'DOC_COVER' \{\
+.          ds COVER_ DOC_COVER_
 .          shift
-.          nr #SUBTITLE_DOC_COVER_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#SUBTITLE_DOC_COVER_NUM] \{\
-.              ds $SUBTITLE_DOC_COVER_\\n+[#SUBTITLE_DOC_COVER_NUM] \
-\\$\\n[#SUBTITLE_DOC_COVER_NUM]
-.          \}
-.          return
 .       \}
 .       if '\\$1'COVER' \{\
+.          ds COVER_ COVER_
 .          shift
-.          nr #SUBTITLE_COVER_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#SUBTITLE_COVER_NUM] \{\
-.              ds $SUBTITLE_COVER_\\n+[#SUBTITLE_COVER_NUM] \
-\\$\\n[#SUBTITLE_COVER_NUM]
-.          \}
-.          return
 .       \}
-.       nr #SUBTITLE_NUM 0 1
-.       while \\n[#NUM_ARGS]>\\n[#SUBTITLE_NUM] \{\
-.          ds $SUBTITLE_\\n+[#SUBTITLE_NUM] \\$\\n[#SUBTITLE_NUM]
+.       nr #\\*[COVER_]SUBTITLE_NUM 0 1
+.       while \\n[#NUM_ARGS]>\\n[#\\*[COVER_]SUBTITLE_NUM] \{\
+.          ds $\\*[COVER_]SUBTITLE_\\n+[#\\*[COVER_]SUBTITLE_NUM] \
+\\$\\n[#\\*[COVER_]SUBTITLE_NUM]
 .       \}
-.          ds $SUBTITLE \\$*
+.       rm COVER_
+.       ds $SUBTITLE \\$*
 .    \}
 .END
 \#
 .MAC CHAPTER END \"If document is a chapter, the chapter number
 .    nr #CHAPTER_CALLED 1
 .    ds $CHAPTER \\$1
-.    if r #CH_NUM \
-.       if \B'\\*[$CHAPTER]' .nr #CH_NUM \\*[$CHAPTER]
+.    if \B'\\*[$CHAPTER]' .nr #CH_NUM \\*[$CHAPTER]
+.    if !r #CH_NUM .nr #CH_NUM 1
+.END
+.
+.MAC CHAPTER_NUMBER END
+.    nr #CH_NUM \\$1
 .END
 \#
 .MAC CHAPTER_TITLE END \" This defines what comes after Chapter #
@@ -4642,28 +4780,22 @@ y\R'#DESCENDER \\n[.cdp]'
 .END
 \#
 .MAC AUTHOR END \"Author.  Enclose all args fully in double quotes.
+.    rr #NO_PRINT_AUTHOR
 .    if '\\$1'DOC_COVER' \{\
+.       ds COVER_ DOC_COVER_
 .       shift
-.       nr #AUTHOR_DOCCOVER_NUM 0 1
-.       while \\n[#NUM_ARGS]>\\n[#AUTHOR_DOCCOVER_NUM] \{\
-.           ds $AUTHOR_DOCCOVER_\\n+[#AUTHOR_DOCCOVER_NUM] \
-\\$\\n[#AUTHOR_DOCCOVER_NUM]
-.       \}
-.       return
 .    \}
 .    if '\\$1'COVER' \{\
+.       ds COVER_ COVER_
 .       shift
-.       nr #AUTHOR_COVER_NUM 0 1
-.           while \\n[#NUM_ARGS]>\\n[#AUTHOR_COVER_NUM] \{\
-.              ds $AUTHOR_COVER_\\n+[#AUTHOR_COVER_NUM] \\$\\n[#AUTHOR_COVER_NUM]
-.           \}
-.       return
 .    \}
-.    nr #AUTHOR_NUM 0 1
-.    rm $AUTHORS
-.    while \\n[#NUM_ARGS]>\\n[#AUTHOR_NUM] \{\
-.       ds $AUTHOR_\\n+[#AUTHOR_NUM] \\$\\n[#AUTHOR_NUM]
-.       as $AUTHORS \\*[$AUTHOR_\\n[#AUTHOR_NUM]], \"
+.    nr #\\*[COVER_]AUTHOR_NUM 0 1
+.    while \\n[#NUM_ARGS]>\\n[#\\*[COVER_]AUTHOR_NUM] \{\
+.       ds $\\*[COVER_]AUTHOR_\\n+[#\\*[COVER_]AUTHOR_NUM] \
+\\$\\n[#\\*[COVER_]AUTHOR_NUM]
+.       if !'\\*[$\\*[COVER_]AUTHOR_\\n[#\\*[COVER_]AUTHOR_NUM]]'' \
+.          as $AUTHORS \
+"\\*[$\\*[COVER_]AUTHOR_\\n[#\\*[COVER_]AUTHOR_NUM]], \"
 .    \}
 .    ds $AUTHOR \\*[$AUTHOR_1]
 .    substring $AUTHORS 0 -2
@@ -4671,90 +4803,67 @@ y\R'#DESCENDER \\n[.cdp]'
 .    pdfmomclean PDF_AUTHORS
 .    nop \!x X ps:exec [/Author (\\*[PDF_AUTHORS]) /DOCINFO pdfmark
 .END
-\#
+.
 .ALIAS EDITOR AUTHOR
 \#
 .MAC COPYRIGHT END          \"For use on cover pages only
-.   ie \\n[#NUM_ARGS]=1 \{\
-.       ds $COPYRIGHT \[co]\\$1
-.       rm $COPYRIGHT_DOCCOVER
-.       rm $COPYRIGHT_COVER
-.    \}
-.    el \{\
-.       if '\\$1'DOC_COVER' .ds $COPYRIGHT_DOCCOVER \[co]\\$2
-.       if '\\$1'COVER'     .ds $COPYRIGHT_COVER \[co]\\$2
-.    \}
+.   ie \\n[#NUM_ARGS]=1 \
+.       ds $COVER_COPYRIGHT \[co]\\$1
+.    el \
+.       if '\\$1'DOC_COVER' .ds $DOC_COVER_COPYRIGHT \[co]\\$2
+.END
+\#
+.MAC COPYRIGHT_V_ADJUST END
+.    ds $COPYRIGHT_V_ADJ \\$1
 .END
 \#
-.MAC MISC END \"For use on cover pages only; enclose all args in double quotes
+.MAC MISC END \"Doc cover and cover pages only; enclose all args in double quotes
+.    rm COVER_
 .    ie \\n[#NUM_ARGS]=0 \{\
-.       if \\n[#MISC_NUM] \{\
-.          nr #ITEM 0 1
-.          while \\n[#MISC_NUM]>\\n[#ITEM] \{\
-.             rm $MISC_\\n+[#ITEM]
-.          \}
-.          rr #MISC_NUM
-.          rr #NUM_MISCS
-.       \}
-.       if \\n[#MISC_DOC_COVER_NUM] \{\
-.          nr #ITEM 0 1
-.          while \\n[#MISC_DOC_COVER_NUM]>\\n[#ITEM] \{\
-.             rm $MISC_DOC_COVER_\\n+[#ITEM]
+.       if \\n[#DOC_COVER_MISC_LINES] \
+.          ds COVER_ DOC_COVER_
+.       if \\n[#COVER_MISC_LINES] \
+.          ds COVER_ COVER_
+.       if \\n[#\\*[COVER_]MISC_LINES] \{\
+.          nr #LINE 0 1
+.          while \\n[#\\*[COVER_]MISC_LINES]>\\n[#LINE] \{\
+.             rm $\\*[COVER_]MISC_\\n+[#LINE]
 .          \}
-.          rr #MISC_DOC_COVER_NUM
-.          rr #NUM_MISCS
-.       \}
-.       if \\n[#MISC_COVER_NUM] \{\
-.          nr #ITEM 0 1
-.          while \\n[#MISC_COVER_NUM]>\\n[#ITEM] \{\
-.             rm $MISC_COVER_\\n+[#ITEM]
-.          \}
-.          rr #MISC_COVER_NUM
-.          rr #NUM_MISCS
+.          rr #\\*[COVER_]MISC_LINES
 .       \}
 .    \}
 .    el \{\
-.       if !'\\$1'DOC_COVER' \{\
-.         if !'\\$1'COVER' .nr #NEITHER 1
-.       \}
-.       if !'\\$1'COVER' \{\
-.          if !'\\$1'DOC_COVER' .nr #NEITHER 1
-.       \}
 .       if '\\$1'DOC_COVER' \{\
+.          ds COVER_ DOC_COVER_
 .          shift
-.          nr #MISC_DOC_COVER_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#MISC_DOC_COVER_NUM] \{\
-.             ds $MISC_DOC_COVER_\\n+[#MISC_DOC_COVER_NUM] \
-\\$[\\n[#MISC_DOC_COVER_NUM]]
-.          \}
-.          nr #NUM_MISCS_DOCCOVER \\n[#NUM_ARGS]
 .       \}
 .       if '\\$1'COVER' \{\
+.          ds COVER_ COVER_
 .          shift
-.          nr #MISC_COVER_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#MISC_COVER_NUM] \{\
-.             ds $MISC_COVER_\\n+[#MISC_COVER_NUM] \\$[\\n[#MISC_COVER_NUM]]
-.          \}
-.          nr #NUM_MISCS_COVER \\n[#NUM_ARGS]
 .       \}
-.       if \\n[#NEITHER]=1 \{\
-.          nr #MISC_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#MISC_NUM] \{\
-.             ds $MISC_\\n+[#MISC_NUM] \\$[\\n[#MISC_NUM]]
-.          \}
-.          nr #NUM_MISCS \\n[#NUM_ARGS]
-.          rr #NEITHER
+.       nr #\\*[COVER_]MISC_LINE 0 1
+.       while \\n[#NUM_ARGS]>\\n[#\\*[COVER_]MISC_LINE] \{\
+.          ds $\\*[COVER_]MISC_\\n+[#\\*[COVER_]MISC_LINE] \
+\\$[\\n[#\\*[COVER_]MISC_LINE]]
 .       \}
-.   \}
+.       nr #\\*[COVER_]MISC_LINES \\n[#NUM_ARGS]
+.       rm COVER_
+.    \}
 .END
 \#
-.MAC PAGENUMBER END \"Page # that appears on page one.
+\# Page number that appears on page one.
+.MAC PAGENUMBER END
 .    nr #n%_AT_PAGENUM_SET \\n%
 .    nr #PAGE_NUM_ADJ \\$1-\\n[#n%_AT_PAGENUM_SET]
 .    rr #n%_AT_PAGENUM_SET
 .    nr #PAGE_NUM_SET 1
 .END
 \#
+\# Replacement string for pagenumber.
+.MAC PAGENUMBER_STRING END
+.    ds $PAGENUM_STRING \\$1
+.END
+\#
 \# ====================================================================
 \#
 \# +++TYPE OF DOCUMENT+++
@@ -4772,6 +4881,7 @@ y\R'#DESCENDER \\n[.cdp]'
 .    if '\\$1'DEFAULT' .nr #DOC_TYPE 1
 .    if '\\$1'CHAPTER' .nr #DOC_TYPE 2
 .    if '\\$1'NAMED' \{\
+.       rr #NO_PRINT_DOCTYPE
 .       ds $DOC_TYPE \\$2
 .       nr #DOC_TYPE 3
 .    \}
@@ -4798,6 +4908,105 @@ y\R'#DESCENDER \\n[.cdp]'
 .       FOOTER_ON_FIRST_PAGE
 .       em ALL_DONE
 .    \}
+.    if '\\$1'SLIDES' \{\
+.       shift
+.       nr #DOC_TYPE 5
+.       PRINTSTYLE TYPESET
+.       FAMILY H
+.       QUAD CENTER
+.       QUOTE_STYLE QUAD CENTER
+.       BLOCKQUOTE_STYLE \
+          QUAD J \
+          INDENT \\n[.l]u/5u
+.       PARA_INDENT 0
+.       NO_SHIM
+.       NO_FLEX
+.       HEADING_STYLE 1 \
+          SIZE +8 \
+          QUAD CENTER
+.       HEADING_STYLE 2 \
+          SIZE +4 \
+          QUAD CENTER
+.       HEADING_STYLE 3 \
+          SIZE +2 \
+          QUAD CENTER
+.       DOCHEADER off
+.       PAGINATION off
+.       PAGENUM_HYPHENS off
+.       HEADERS off
+.       FOOTERS off
+.       HEADERS_PLAIN
+.       FOOTERS_PLAIN
+.       nr loop-count 0 1
+.       nr loop-counter \\n[#NUM_ARGS]
+.\" Default 16:9 setup if no ASPECT
+.       PAGE 11i 6.1875i 36p 36p 80p 72p
+.       PT_SIZE 14
+.       AUTOLEAD 4
+.       HEADER_SIZE  -2
+.       while \\n+[loop-count]<=\\n[loop-counter] \{\
+.          if '\\$1'ASPECT' \{\
+.             if '\\$2'4:3' \{\
+.                PAGE 11i 8.25i 36p 36p 90p 84p
+.                PT_SIZE 16
+.                AUTOLEAD 6
+.                HEADER_SIZE  -3
+.             \}
+.             if '\\$2'16:9' \{\
+.                PAGE 11i 6.1875i 36p 36p 80p 72p
+.                PT_SIZE 14
+.                AUTOLEAD 4
+.                HEADER_SIZE  -2
+.             \}
+.             shift 2
+.          \}
+.          if '\\$1'HEADER' \{\
+.             shift 1
+.             nr #SLIDE_HEADERS 1
+.             ds $SLIDE_HDR_L \\$1
+.             ds $SLIDE_HDR_C \\$2
+.             ds $SLIDE_HDR_R \\$3
+.             HEADER_MARGIN 45p
+.             shift 3
+.          \}
+.          if '\\$1'FOOTER' \{\
+.             shift 1
+.             nr #SLIDE_FOOTERS 1
+.             ds $SLIDE_FTR_L \\$1
+.             ds $SLIDE_FTR_C \\$2
+.             ds $SLIDE_FTR_R \\$3
+.             shift 3
+.          \}
+.          if '\\$1'TRANSITION' \{\
+.             shift 1
+.             ds $TRANS_TYPE \\$1
+.             shift 1
+.          \}
+.          if '\\$1'PAUSE' \{\
+.             shift 1
+.             ds $PAUSE_TYPE \\$1
+.             shift 1
+.          \}
+.       \}
+.       if d $TRANS_TYPE \
+.          pdftransition PAGE \\*[$TRANS_TYPE]
+.       if d $PAUSE_TYPE \
+.          pdftransition BLOCK \\*[$PAUSE_TYPE]
+.    \}
+.    ie \\n[#SLIDE_HEADERS]+\\n[#SLIDE_FOOTERS]=2 \{\
+.       HEADERS_AND_FOOTERS L "^\\*[$SLIDE_HDR_L]#\\*[$SLIDE_HDR_C]#\\*[$SLIDE_HDR_R]^" \
+                            L "^\\*[$SLIDE_FTR_L]#\\*[$SLIDE_FTR_C]#\\*[$SLIDE_FTR_R]^"
+.    \}
+.    el \{\
+.       if \\n[#SLIDE_HEADERS] \{\
+.          HEADERS
+.          HEADER_RECTO L "^\\*[$SLIDE_HDR_L]#\\*[$SLIDE_HDR_C]#\\*[$SLIDE_HDR_R]^" \
+.       \}
+.       if \\n[#SLIDE_FOOTERS] \{\
+.          FOOTERS
+.          FOOTER_RECTO L "^\\*[$SLIDE_FTR_L]#\\*[$SLIDE_FTR_C]#\\*[$SLIDE_FTR_R]^"
+.       \}
+.    \}
 .END
 \#
 \# +++LETTER MACROS+++
@@ -4877,11 +5086,14 @@ y\R'#DESCENDER \\n[.cdp]'
 .MAC CLOSING END
 .    if '\\*[$SIG_SPACE]'' .ds $SIG_SPACE 3v
 .    ie ( (2v+\\*[$SIG_SPACE]) > \\n[.t] ) \{\
-.       ch HEADER
-.       ch FOOTER
-.       br
-.       tm1 "[mom]: Insufficient room for \\$0 and signature line.
-.       ab Aborting '\\n[.F]'.
+.       ie !\\n[@TOP] \{\
+.          ch HEADER
+.          ch FOOTER
+.          br
+.          tm1 "[mom]: Insufficient room for \\$0 and signature line.
+.          ab   [mom]: Terminating '\\n[.F]' before closing.
+.       \}
+.       el .sp
 .    \}
 .    el .br
 .    nr #CLOSING 1
@@ -4924,530 +5136,641 @@ y\R'#DESCENDER \\n[.cdp]'
 \#
 \# ====================================================================
 \#
-\# +++DEFAULTS+++
+\# +++DEFAULTS FOR DOCUMENT PROCESSING+++
 \#
 \# TYPE-STYLE CONTROL MACROS
 \# -------------------------
-\# The control macros for family, font, size, quad and color are here
-\# grouped together.  Each (e.g. _FAMILY or _FONT) tests for a calling
-\# alias before performing the action(s) appropriate to the calling
-\# macro.  Defaults for all these guys are set in DEFAULTS, and listed
-\# in the "Control Macros" section of the documentation pertinent to
-\# the macro whose style is to be changed.
+\# The control macros for family, font, size, color and quad are
+\# here grouped together.  Each (e.g., _FAMILY) uses the calling alias
+\# to determine the document element to which the style parameter
+\# applies.  Defaults for all these guys are set in DEFAULTS, and
+\# listed in the "Control Macros" section of the documentation
+\# pertinent to the element whose style is to be changed.
 \#
 .MAC _FAMILY END
-.    if '\\$0'AUTHOR_FAMILY' \
-.       ds $AUTHOR_FAM \\$1
-.    if '\\$0'BIBLIOGRAPHY_FAMILY' \
-.       ds $BIB_FAM \\$1
-.    if '\\$0'BIBLIOGRAPHY_STRING_FAMILY' \
-.       ds $BIB_STRING_FAM \\$1
-.    if '\\$0'BLOCKQUOTE_FAMILY' \
-.       ds $BQUOTE_FAM \\$1
-.    if '\\$0'CITATION_FAMILY' \
-.       ds $BQUOTE_FAM \\$1
-.    if '\\$0'CITE_FAMILY' \
-.       ds $BQUOTE_FAM \\$1
-.    if '\\$0'CHAPTER_TITLE_FAMILY' \
-.       ds $CHAPTER_TITLE_FAM \\$1
-.    if '\\$0'COVER_AUTHOR_FAMILY' \
-.       ds $COVER_AUTHOR_FAM \\$1
-.    if '\\$0'COVER_CHAPTER_TITLE_FAMILY' \
-.       ds $COVER_CHAPTER_TITLE_FAM \\$1
-.    if '\\$0'COVER_COPYRIGHT_FAMILY' \
-.       ds $COVER_COPYRIGHT_FAM \\$1
-.    if '\\$0'COVER_DOCTYPE_FAMILY' \
-.       ds $COVER_DOCTYPE_FAM \\$1
-.    if '\\$0'COVER_FAMILY' \
-.       ds $COVER_FAM \\$1
-.    if '\\$0'COVER_MISC_FAMILY' \
-.       ds $COVER_MISC_FAM \\$1
-.    if '\\$0'COVER_SUBTITLE_FAMILY' \
-.       ds $COVER_SUBTITLE_FAM \\$1
-.    if '\\$0'COVER_TITLE_FAMILY' \
-.       ds $COVER_TITLE_FAM \\$1
-.    if '\\$0'DOC_COVER_AUTHOR_FAMILY' \
-.       ds $DOC_COVER_AUTHOR_FAM \\$1
-.    if '\\$0'DOC_COVER_CHAPTER_TITLE_FAMILY' \
-.       ds $DOC_COVER_CHAPTER_TITLE_FAM \\$1
-.    if '\\$0'DOC_COVER_COPYRIGHT_FAMILY' \
-.       ds $DOC_COVER_COPYRIGHT_FAM \\$1
-.    if '\\$0'DOC_COVER_DOCTYPE_FAMILY' \
-.       ds $DOC_COVER_DOCTYPE_FAM \\$1
-.    if '\\$0'DOC_COVER_FAMILY' \
-.       ds $DOC_COVER_FAM \\$1
-.    if '\\$0'DOC_COVER_MISC_FAMILY' \
-.       ds $DOC_COVER_MISC_FAM \\$1
-.    if '\\$0'DOC_COVER_SUBTITLE_FAMILY' \
-.       ds $DOC_COVER_SUBTITLE_FAM \\$1
-.    if '\\$0'DOC_COVER_TITLE_FAMILY' \
-.       ds $DOC_COVER_TITLE_FAM \\$1
-.    if '\\$0'DOCHEADER_FAMILY' \
-.       ds $DOCHEADER_FAM \\$1
-.    if '\\$0'DOCTYPE_FAMILY' \
-.       ds $DOCTYPE_FAM \\$1
-.    if '\\$0'ENDNOTE_FAMILY' \
-.       ds $EN_FAM \\$1
-.    if '\\$0'ENDNOTE_NUMBER_FAMILY' \
-.       ds $EN_NUMBER_FAM \\$1
-.    if '\\$0'ENDNOTE_LINENUMBER_FAMILY' \
-.       ds $EN_LN_FAM \\$1
-.    if '\\$0'ENDNOTE_STRING_FAMILY' \
-.       ds $EN_STRING_FAM \\$1
-.    if '\\$0'ENDNOTE_TITLE_FAMILY' \
-.       ds $EN_TITLE_FAM \\$1
-.    if '\\$0'EPIGRAPH_FAMILY' \
-.       ds $EPI_FAM \\$1
-.    if '\\$0'FOOTNOTE_FAMILY' \
-.       ds $FN_FAM \\$1
-.    if '\\$0'HDRFTR_CENTER_FAMILY' \
-.       ds $HDRFTR_CENTER_FAM \\$1
-.    if '\\$0'HDRFTR_FAMILY' \{\
-.       ds $HDRFTR_FAM        \\$1
-.       ds $HDRFTR_LEFT_FAM   \\$1
-.       ds $HDRFTR_CENTER_FAM \\$1
-.       ds $HDRFTR_RIGHT_FAM  \\$1
-.    \}
-.    if '\\$0'HDRFTR_LEFT_FAMILY' \
-.       ds $HDRFTR_LEFT_FAM \\$1
-.    if '\\$0'HDRFTR_RIGHT_FAMILY' \
-.       ds $HDRFTR_RIGHT_FAM \\$1
-.    if '\\$0'LINENUMBER_FAMILY' \
-.       ds $LN_FAM \\$1
-.    if '\\$0'PAGENUM_FAMILY' \
-.       ds $PAGE_NUM_FAM \\$1
-.    if '\\$0'QUOTE_FAMILY' \
-.       ds $QUOTE_FAM \\$1
-.    if '\\$0'SUBTITLE_FAMILY' \
-.       ds $SUBTITLE_FAM \\$1
-.    if '\\$0'TITLE_FAMILY' \
-.       ds $TITLE_FAM \\$1
-.    if '\\$0'TOC_FAMILY' \
-.       ds $TOC_FAM \\$1
-.    if '\\$0'TOC_FAM' \
-.       ds $TOC_FAM \\$1
-.    if '\\$0'TOC_HEADER_FAMILY' \
-.       ds $TOC_HEADER_FAM \\$1
-.    if '\\$0'TOC_PN_FAMILY' \
-.       ds $TOC_PN_FAM \\$1
+.    ds PARAM      FAM
+.    ds ELEMENT    \\$0
+.    if '\\$0'COPYRIGHT_FAMILY' \
+.       ds ELEMENT COVER_COPYRIGHT_FAMILY
+.    ds FROM_ALIAS \\$0
+.    substring ELEMENT 0 -4    \" Strip 'ILY' from FAMILY
+.    ASSIGN_ELEMENT \\$1
 .END
 \#
 .MAC _FONT END
-.    if '\\$0'AUTHOR_FONT' \
-.       ds $AUTHOR_FT \\$1
-.    if '\\$0'BIBLIOGRAPHY_FONT' \
-.       ds $BIB_FT \\$1
-.    if '\\$0'BIBLIOGRAPHY_STRING_FONT' \
-.       ds $BIB_STRING_FT \\$1
-.    if '\\$0'BLOCKQUOTE_FONT' \
-.       ds $BQUOTE_FT \\$1
-.    if '\\$0'CITATION_FONT' \
-.       ds $BQUOTE_FT \\$1
-.    if '\\$0'CITE_FONT' \
-.       ds $BQUOTE_FT \\$1
-.    if '\\$0'CHAPTER_TITLE_FONT' \
-.       ds $CHAPTER_TITLE_FT \\$1
-.    if '\\$0'COVER_AUTHOR_FONT' \
-.       ds $COVER_AUTHOR_FT \\$1
-.    if '\\$0'COVER_CHAPTER_TITLE_FONT' \
-.       ds $COVER_CHAPTER_TITLE_FT \\$1
-.    if '\\$0'COVER_COPYRIGHT_FONT' \
-.       ds $COVER_COPYRIGHT_FT \\$1
-.    if '\\$0'COVER_DOCTYPE_FONT' \
-.       ds $COVER_DOCTYPE_FT \\$1
-.    if '\\$0'COVER_MISC_FONT' \
-.       ds $COVER_MISC_FT \\$1
-.    if '\\$0'COVER_SUBTITLE_FONT' \
-.       ds $COVER_SUBTITLE_FT \\$1
-.    if '\\$0'COVER_TITLE_FONT' \
-.       ds $COVER_TITLE_FT \\$1
-.    if '\\$0'DOC_COVER_AUTHOR_FONT' \
-.       ds $DOC_COVER_AUTHOR_FT \\$1
-.    if '\\$0'DOC_COVER_CHAPTER_TITLE_FONT' \
-.       ds $DOC_COVER_CHAPTER_TITLE_FT \\$1
-.    if '\\$0'DOC_COVER_COPYRIGHT_FONT' \
-.       ds $DOC_COVER_COPYRIGHT_FT \\$1
-.    if '\\$0'DOC_COVER_DOCTYPE_FONT' \
-.       ds $DOC_COVER_DOCTYPE_FT \\$1
-.    if '\\$0'DOC_COVER_MISC_FONT' \
-.       ds $DOC_COVER_MISC_FT \\$1
-.    if '\\$0'DOC_COVER_SUBTITLE_FONT' \
-.       ds $DOC_COVER_SUBTITLE_FT \\$1
-.    if '\\$0'DOC_COVER_TITLE_FONT' \
-.       ds $DOC_COVER_TITLE_FT \\$1
-.    if '\\$0'DOCTYPE_FONT' \
-.       ds $DOCTYPE_FT \\$1
-.    if '\\$0'ENDNOTE_FONT' \
-.       ds $EN_FT \\$1
-.    if '\\$0'ENDNOTE_NUMBER_FONT' \
-.       ds $EN_NUMBER_FT \\$1
-.    if '\\$0'ENDNOTE_LINENUMBER_FONT' \
-.       ds $EN_LN_FT \\$1
-.    if '\\$0'ENDNOTE_STRING_FONT' \
-.       ds $EN_STRING_FT \\$1
-.    if '\\$0'ENDNOTE_TITLE_FONT' \
-.       ds $EN_TITLE_FT \\$1
-.    if '\\$0'EPIGRAPH_FONT' \
-.       ds $EPI_FT \\$1
-.    if '\\$0'FOOTNOTE_FONT' \
-.       ds $FN_FT \\$1
-.    if '\\$0'HDRFTR_CENTER_FONT' \
-.       ds $HDRFTR_CENTER_FT \\$1
-.    if '\\$0'HDRFTR_LEFT_FONT' \
-.       ds $HDRFTR_LEFT_FT \\$1
-.    if '\\$0'HDRFTR_RIGHT_FONT' \
-.       ds $HDRFTR_RIGHT_FT \\$1
-.    if '\\$0'LINENUMBER_FONT' \
-.       ds $LN_FT \\$1
-.    if '\\$0'PAGENUM_FONT' \
-.       ds $PAGE_NUM_FT \\$1
-.    if '\\$0'QUOTE_FONT' \
-.       ds $QUOTE_FT \\$1
-.    if '\\$0'SUBTITLE_FONT' \
-.       ds $SUBTITLE_FT \\$1
-.    if '\\$0'TITLE_FONT' \
-.       ds $TITLE_FT \\$1
-.    if '\\$0'TOC_HEADER_FONT' \
-.       ds $TOC_HEADER_FT \\$1
-.    if '\\$0'TOC_PN_FONT' \
-.       ds $TOC_PN_FT \\$1
+.    ds PARAM      FT
+.    ds ELEMENT    \\$0
+.    ds FROM_ALIAS \\$0
+.    if '\\$0'COPYRIGHT_FONT' \
+.       ds ELEMENT COVER_COPYRIGHT_FONT
+.    substring ELEMENT 0 -5
+.    ds ELEMENT \\*[ELEMENT]FT \" ELEMENT is now \\$0_FT
+.    ASSIGN_ELEMENT \\$1
 .END
 \#
 .MAC _SIZE END
-.    if '\\$0'AUTHOR_SIZE' \
-.       ds $AUTHOR_SIZE_CHANGE \\$1
-.    if '\\$0'BIBLIOGRAPHY_STRING_SIZE' \
-.       ds $BIB_STRING_SIZE_CHANGE \\$1
-.    if '\\$0'BLOCKQUOTE_SIZE' \
-.       ds $BQUOTE_SIZE_CHANGE \\$1
-.    if '\\$0'CITATION_SIZE' \
-.       ds $BQUOTE_SIZE_CHANGE \\$1
-.    if '\\$0'CITE_SIZE' \
-.       ds $BQUOTE_SIZE_CHANGE \\$1
-.    if '\\$0'CHAPTER_TITLE_SIZE' \
-.       ds $CHAPTER_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_AUTHOR_SIZE' \
-.       ds $COVER_AUTHOR_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_CHAPTER_TITLE_SIZE' \
-.       ds $COVER_CHAPTER_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_COPYRIGHT_SIZE' \
-.       ds $COVER_COPYRIGHT_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_DOCTYPE_SIZE' \
-.       ds $COVER_DOCTYPE_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_MISC_SIZE' \
-.       ds $COVER_MISC_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_SUBTITLE_SIZE' \
-.       ds $COVER_SUBTITLE_SIZE_CHANGE \\$1
-.    if '\\$0'COVER_TITLE_SIZE' \
-.       ds $COVER_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_AUTHOR_SIZE' \
-.       ds $DOC_COVER_AUTHOR_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_CHAPTER_TITLE_SIZE' \
-.       ds $DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_COPYRIGHT_SIZE' \
-.       ds $DOC_COVER_COPYRIGHT_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_DOCTYPE_SIZE' \
-.       ds $DOC_COVER_DOCTYPE_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_MISC_SIZE' \
-.       ds $DOC_COVER_MISC_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_SUBTITLE_SIZE' \
-.       ds $DOC_COVER_SUBTITLE_SIZE_CHANGE \\$1
-.    if '\\$0'DOC_COVER_TITLE_SIZE' \
-.       ds $DOC_COVER_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'DOCTYPE_SIZE' \
-.       ds $DOCTYPE_SIZE_CHANGE \\$1
-.    if '\\$0'ENDNOTE_NUMBER_SIZE' \
-.       ds $EN_NUMBER_SIZE_CHANGE \\$1
-.    if '\\$0'ENDNOTE_LINENUMBER_SIZE' \
-.       ds $EN_LN_SIZE_CHANGE \\$1
-.    if '\\$0'ENDNOTE_STRING_SIZE' \
-.       ds $EN_STRING_SIZE_CHANGE \\$1
-.    if '\\$0'ENDNOTE_TITLE_SIZE' \
-.       ds $EN_TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'EPIGRAPH_SIZE' \
-.       ds $EPI_SIZE_CHANGE \\$1
-.    if '\\$0'FOOTNOTE_SIZE' \
-.       ds $FN_SIZE_CHANGE \\$1
-.    if '\\$0'HDRFTR_CENTER_SIZE' \
-.       ds $HDRFTR_CENTER_SIZE_CHANGE \\$1
-.    if '\\$0'HDRFTR_LEFT_SIZE' \
-.       ds $HDRFTR_LEFT_SIZE_CHANGE \\$1
-.    if '\\$0'HDRFTR_RIGHT_SIZE' \
-.       ds $HDRFTR_RIGHT_SIZE_CHANGE \\$1
-.    if '\\$0'HDRFTR_SIZE' \
-.       ds $HDRFTR_SIZE_CHANGE \\$1
-.    if '\\$0'LINENUMBER_SIZE' \
-.       ds $LN_SIZE_CHANGE \\$1
-.    if '\\$0'PAGENUM_SIZE' \
-.       ds $PAGE_NUM_SIZE_CHANGE \\$1
-.    if '\\$0'QUOTE_SIZE' \
-.       ds $QUOTE_SIZE_CHANGE \\$1
-.    if '\\$0'SUBTITLE_SIZE' \
-.       ds $SUBTITLE_SIZE_CHANGE \\$1
-.    if '\\$0'TITLE_SIZE' \
-.       ds $TITLE_SIZE_CHANGE \\$1
-.    if '\\$0'TOC_HEADER_SIZE' \
-.       ds $TOC_HEADER_SIZE_CHANGE \\$1
-.    if '\\$0'TOC_PN_SIZE' \
-.       ds $TOC_PN_SIZE_CHANGE \\$1
+.    ds PARAM       SIZE_CHANGE
+.    ds ELEMENT     \\$0_CHANGE
+.    if '\\$0'CODE_SIZE' \{\
+.       ds PARAM SIZE_ADJ
+.       ds ELEMENT \\$0_ADJ
+.    \}
+.    if '\\$0'COPYRIGHT_SIZE' \
+.       ds ELEMENT COVER_COPYRIGHT_SIZE_CHANGE
+.    ds FROM_ALIAS  \\$0
+.    ASSIGN_ELEMENT \\$1
 .END
 \#
 .MAC _COLOR END
 .    if \\n[#PRINT_STYLE]=1 .return
-.    if '\\$0'ATTRIBUTE_COLOR' \{\
-.       nr #ATTRIBUTE_COLOR 1
-.       ds $ATTRIBUTE_COLOR \\$1
-.    \}
-.    if '\\$0'AUTHOR_COLOR' \{\
-.       nr #AUTHOR_COLOR 1
-.       ds $AUTHOR_COLOR \\$1
-.    \}
-.    if '\\$0'BLOCKQUOTE_COLOR' \{\
-.       nr #BQUOTE_COLOR 1
-.       ds $BQUOTE_COLOR \\$1
-.    \}
-.    if '\\$0'CITATION_COLOR' \{\
-.       nr #BQUOTE_COLOR 1
-.       ds $BQUOTE_COLOR \\$1
-.    \}
-.    if '\\$0'CITE_COLOR' \{\
-.       nr #BQUOTE_COLOR 1
-.       ds $BQUOTE_COLOR \\$1
-.    \}
-.    if '\\$0'CHAPTER_TITLE_COLOR' \{\
-.       nr #CHAPTER_TITLE_COLOR 1
-.       ds $CHAPTER_TITLE_COLOR \\$1
-.    \}
-.    if '\\$0'CODE_COLOR' \{\
-.       nr #CODE_COLOR 1
-.       ds $CODE_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_ATTRIBUTE_COLOR' \{\
-.       nr #COVER_ATTRIBUTE_COLOR 1
-.       ds $COVER_ATTRIBUTE_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_AUTHOR_COLOR' \{\
-.       nr #COVER_AUTHOR_COLOR 1
-.       ds $COVER_AUTHOR_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_CHAPTER_TITLE_COLOR' \{\
-.       nr #COVER_CHAPTER_TITLE_COLOR 1
-.       ds $COVER_CHAPTER_TITLE_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_COLOR' \{\
-.       nr #COVER_COLOR 1
-.       ds $COVER_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_COPYRIGHT_COLOR' \{\
-.       nr #COVER_COPYRIGHT_COLOR 1
-.       ds $COVER_COPYRIGHT_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_MISC_COLOR' \{\
-.       nr #COVER_MISC_COLOR 1
-.       ds $COVER_MISC_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_TITLE_COLOR' \{\
-.       nr #COVER_TITLE_COLOR 1
-.       ds $COVER_TITLE_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_SUBTITLE_COLOR' \{\
-.       nr #COVER_SUBTITLE_COLOR 1
-.       ds $COVER_SUBTITLE_COLOR \\$1
-.    \}
-.    if '\\$0'COVER_DOCTYPE_COLOR' \{\
-.       nr #COVER_DOCTYPE_COLOR 1
-.       ds $COVER_DOCTYPE_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_ATTRIBUTE_COLOR' \{\
-.       nr #DOC_COVER_ATTRIBUTE_COLOR 1
-.       ds $DOC_COVER_ATTRIBUTE_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_AUTHOR_COLOR' \{\
-.       nr #DOC_COVER_AUTHOR_COLOR 1
-.       ds $DOC_COVER_AUTHOR_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_CHAPTER_TITLE_COLOR' \{\
-.       nr #DOC_COVER_CHAPTER_TITLE_COLOR 1
-.       ds $DOC_COVER_CHAPTER_TITLE_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_COLOR' \{\
-.       nr #DOC_COVER_COLOR 1
-.       ds $DOC_COVER_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_COPYRIGHT_COLOR' \{\
-.       nr #DOC_COVER_COPYRIGHT_COLOR 1
-.       ds $DOC_COVER_COPYRIGHT_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_MISC_COLOR' \{\
-.       nr #DOC_COVER_MISC_COLOR 1
-.       ds $DOC_COVER_MISC_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_TITLE_COLOR' \{\
-.       nr #DOC_COVER_TITLE_COLOR 1
-.       ds $DOC_COVER_TITLE_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_SUBTITLE_COLOR' \{\
-.       nr #DOC_COVER_SUBTITLE_COLOR 1
-.       ds $DOC_COVER_SUBTITLE_COLOR \\$1
-.    \}
-.    if '\\$0'DOC_COVER_DOCTYPE_COLOR' \{\
-.       nr #DOC_COVER_DOCTYPE_COLOR 1
-.       ds $DOC_COVER_DOCTYPE_COLOR \\$1
-.    \}
-.    if '\\$0'DOCHEADER_COLOR' \{\
-.       nr #DOCHEADER_COLOR 1
-.       ds $DOCHEADER_COLOR \\$1
-.    \}
-.    if '\\$0'DOCTYPE_COLOR' \{\
-.       nr #DOCTYPE_COLOR 1
-.       ds $DOCTYPE_COLOR \\$1
-.    \}
-.    if '\\$0'ENDNOTE_STRING_COLOR' \{\
-.       nr #ENDNOTE_STRING_COLOR 1
-.       ds $ENDNOTE_STRING_COLOR \\$1
-.    \}
-.    if '\\$0'EPIGRAPH_COLOR' \{\
-.       nr #EPI_COLOR 1
-.       ds $EPI_COLOR \\$1
-.    \}
-.    if '\\$0'FINIS_COLOR' \{\
-.       nr #FINIS_COLOR 1
-.       ds $FINIS_COLOR \\$1
-.    \}
-.    if '\\$0'FOOTNOTE_COLOR' \{\
-.       nr #FOOTNOTE_COLOR 1
-.       ds $FOOTNOTE_COLOR \\$1
-.    \}
-.    if '\\$0'HDRFTR_CENTER_COLOR' \{\
-.       nr #HDRFTR_CENTER_COLOR 1
-.       ds $HDRFTR_CENTER_COLOR \\$1
-.    \}
-.    if '\\$0'HDRFTR_COLOR' \{\
-.       nr #HDRFTR_COLOR 1
-.       ds $HDRFTR_COLOR \\$1
-.    \}
-.    if '\\$0'HDRFTR_LEFT_COLOR' \{\
-.       nr #HDRFTR_LEFT_COLOR 1
-.       ds $HDRFTR_LEFT_COLOR \\$1
-.    \}
-.    if '\\$0'HDRFTR_RIGHT_COLOR' \{\
-.       nr #HDRFTR_RIGHT_COLOR 1
-.       ds $HDRFTR_RIGHT_COLOR \\$1
-.    \}
-.    if '\\$0'HDRFTR_RULE_COLOR' \{\
-.       nr #HDRFTR_RULE_COLOR 1
-.       ds $HDRFTR_RULE_COLOR \\$1
-.    \}
-.    if '\\$0'LINEBREAK_COLOR' \{\
-.       nr #LINEBREAK_COLOR 1
-.       ds $LINEBREAK_COLOR \\$1
-.    \}
-.    if '\\$0'LINENUMBER_COLOR' \{\
-.       nr #LINENUMBER_COLOR 1
-.       ds $LN_COLOR \\$1
-.    \}
-.    if '\\$0'PAGENUM_COLOR' \{\
-.       nr #PAGE_NUM_COLOR 1
-.       ds $PAGENUM_COLOR \\$1
-.    \}
-.    if '\\$0'QUOTE_COLOR' \{\
-.       nr #QUOTE_COLOR 1
-.       ds $QUOTE_COLOR \\$1
+.    ds PARAM       COLOR
+.    ds ELEMENT     \\$0
+.    if '\\$0'COPYRIGHT_COLOR' \
+.       ds ELEMENT COVER_COPYRIGHT_COLOR
+.    ds FROM_ALIAS  \\$0
+.    ASSIGN_ELEMENT \\$1
+.END
+\#
+.MAC _CAPS END
+.    ds CAPS_TYPE \\$0
+.    substring CAPS_TYPE 0 7
+.    ds CALLED_AS \\$0
+.    substring CALLED_AS -7
+.    ie '\\*[CALLED_AS]'NO_CAPS' \{\
+.       ie '\\*[CAPS_TYPE]'BIBLIOGR' \{\
+.          if '\\$0'BIBLIOGRAPHY_HEADER_NO_CAPS' .rr #BIB_STRING_CAPS
+.          if '\\$0'BIBLIOGRAPHY_STRING_NO_CAPS' .rr #BIB_STRING_CAPS
+.       \}
+.       el \{\
+.          ie '\\*[CAPS_TYPE]'ENDNOTES' \{\
+.             if '\\$0'ENDNOTES_HEADER_NO_CAPS' .rr #EN_STRING_CAPS
+.             if '\\$0'ENDNOTES_STRING_NO_CAPS' .rr #EN_STRING_CAPS
+.          \}
+.          el \{\
+.             ie '\\$0'TOC_HEADER_NO_CAPS' .rr #TOC_STRING_CAPS
+.             el \{\
+.                ds REGISTER_TYPE \\$0
+.                substring REGISTER_TYPE 0 -8
+.                as REGISTER_TYPE CAPS
+.                rr #\\*[REGISTER_TYPE]
+.             \}
+.          \}
+.       \}
 .    \}
-.    if '\\$0'SECTION_COLOR' \{\
-.       nr #LINEBREAK_COLOR 1
-.       ds $LINEBREAK_COLOR \\$1
+.    el \{\
+.       ie '\\*[CAPS_TYPE]'BIBLIOGR' \{\
+.          if '\\$0'BIBLIOGRAPHY_HEADER_CAPS' .nr #BIB_STRING_CAPS 1
+.          if '\\$0'BIBLIOGRAPHY_STRING_CAPS' .nr #BIB_STRING_CAPS 1
+.       \}
+.       el .nr #\\$0 1
 .    \}
-.    if '\\$0'SUBTITLE_COLOR' \{\
-.       nr #SUBTITLE_COLOR 1
-.       ds $SUBTITLE_COLOR \\$1
+.END
+.
+.ALIAS _NO_CAPS _CAPS
+\#
+.MAC _SMALLCAPS END
+.    ds SMALLCAPS_TYPE \\$0
+.    substring SMALLCAPS_TYPE 0 7
+.    ds CALLED_AS \\$0
+.    substring CALLED_AS -12
+.    ie '\\*[CALLED_AS]'NO_SMALLCAPS' \{\
+.       ie '\\*[SMALLCAPS_TYPE]'BIBLIOGR' \{\
+.          if '\\$0'BIBLIOGRAPHY_HEADER_NO_SMALLCAPS' .rr #BIB_STRING_SMALLCAPS
+.          if '\\$0'BIBLIOGRAPHY_STRING_NO_SMALLCAPS' .rr #BIB_STRING_SMALLCAPS
+.       \}
+.       el \{\
+.          ie '\\*[SMALLCAPS_TYPE]'ENDNOTES' \{\
+.             if '\\$0'ENDNOTES_HEADER_NO_SMALLCAPS' .rr #EN_STRING_SMALLCAPS
+.             if '\\$0'ENDNOTES_STRING_NO_SMALLCAPS' .rr #EN_STRING_SMALLCAPS
+.          \}
+.          el \{\
+.             ie '\\$0'TOC_HEADER_NO_SMALLCAPS' .rr #TOC_STRING_SMALLCAPS
+.             el \{\
+.                ds REGISTER_TYPE \\$0
+.                substring REGISTER_TYPE 0 -13
+.                as REGISTER_TYPE SMALLCAPS
+.                rr #\\*[REGISTER_TYPE]
+.             \}
+.          \}
+.       \}
 .    \}
-.    if '\\$0'TITLE_COLOR' \{\
-.       nr #TITLE_COLOR 1
-.       ds $TITLE_COLOR \\$1
+.    el \{\
+.       ie '\\*[SMALLCAPS_TYPE]'BIBLIOGR' \{\
+.          if '\\$0'BIBLIOGRAPHY_HEADER_SMALLCAPS' .nr #BIB_STRING_SMALLCAPS 1
+.          if '\\$0'BIBLIOGRAPHY_STRING_SMALLCAPS' .nr #BIB_STRING_SMALLCAPS 1
+.       \}
+.       el .nr #\\$0 1
 .    \}
 .END
+.
+.ALIAS _NO_SMALLCAPS _SMALLCAPS
 \#
 .MAC _QUAD END
 .    if '\\$0'BIBLIOGRAPHY_QUAD' \{\
-.       ds $BIB_QUAD \\$1
-.       if '\\*[$BIB_QUAD]'R' \
-.ab \\$0 at line \\n[.c] must be set to either L or J.  Aborting \\n'[.F]'.
-.       if '\\*[$BIB_QUAD]'C' \
-.ab \\$0 at line \\n[.c] must be set to either L or J.  Aborting \\n'[.F]'.
-.    \}
-.    if '\\$0'BIBLIOGRAPHY_STRING_QUAD' \
-.       ds $BIB_STRING_QUAD \\$1
-.    if '\\$0'BLOCKQUOTE_QUAD' \
-.       ds $BQUOTE_QUAD \\$1
-.    if '\\$0'CITATION_QUAD' \
-.       ds $BQUOTE_QUAD \\$1
-.    if '\\$0'CITE_QUAD' \
-.       ds $BQUOTE_QUAD \\$1
-.    if '\\$0'COVER_COPYRIGHT_QUAD' \
-.       ds $COVER_COPYRIGHT_QUAD \\$1
-.    if '\\$0'COVER_MISC_QUAD' \
-.       ds $COVER_MISC_QUAD \\$1
-.    if '\\$0'COVER_QUAD' \
-.       ds $COVER_QUAD \\$1
-.    if '\\$0'DOC_COVER_COPYRIGHT_QUAD' \
-.       ds $DOC_COVER_COPYRIGHT_QUAD \\$1
-.    if '\\$0'DOC_COVER_MISC_QUAD' \
-.       ds $DOC_COVER_MISC_QUAD \\$1
-.    if '\\$0'DOC_COVER_QUAD' \
-.       ds $DOC_COVER_QUAD \\$1
-.    if '\\$0'DOCHEADER_QUAD' \
-.       ds $DOCHEADER_QUAD \\$1
-.    if '\\$0'DOC_QUAD' \{\
-.       if !\\n[DOCS] .DOC_MACRO_ERROR \\$0
-.        ds $DOC_QUAD \\$1
-.        QUAD \\*[$DOC_QUAD]
+.       if '\\$1'R' .QUAD-ERROR \\$0
+.       if '\\$1'C' .QUAD-ERROR \\$0
 .    \}
 .    if '\\$0'ENDNOTE_QUAD' \{\
-.       ds $EN_QUAD \\$1
-.       if '\\*[$EN_QUAD]'R' \
-.ab \\$0 at line \\n[.c] must be set to either L or J.  Aborting \\n'[.F]'.
-.       if '\\*[$EN_QUAD]'C' \
-.ab \\$0 at line \\n[.c] must be set to either L or J.  Aborting \\n'[.F]'.
-.    \}
-.    if '\\$0'ENDNOTE_STRING_QUAD' \
-.       ds $EN_STRING_QUAD \\$1
-.    if '\\$0'ENDNOTE_TITLE_QUAD' \
-.       ds $EN_TITLE_QUAD \\$1
-.    if '\\$0'EPIGRAPH_QUAD' \
-.       ds $EPI_QUAD \\$1
-.    if '\\$0'FOOTNOTE_QUAD' \
-.       ds $FN_QUAD \\$1
-.    if '\\$0'TOC_HEADER_QUAD' \
-.       ds $TOC_HEADER_QUAD \\$1
+.       if '\\$1'R' .QUAD-ERROR \\$0
+.       if '\\$1'C' .QUAD-ERROR \\$0
+.    \}
+.    if '\\$0'DOC_QUAD' \
+.       if !\\n[#DOCS] .DOC_MACRO_ERROR \\$0
+.    ds PARAM       QUAD
+.    ds ELEMENT     \\$0
+.    if '\\$0'COPYRIGHT_QUAD' \
+.       ds ELEMENT COVER_COPYRIGHT_QUAD
+.    ds FROM_ALIAS  \\$0
+.    ASSIGN_ELEMENT \\$1
 .END
 \#
-\# DEFAULTS
-\# --------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Sets up defaults if no values are entered prior to START.
-\# *Notes:
-\#   The defaults for $CHAPTER_STRING, $DRAFT_STRING, and
-\#   $REVISION_STRING are in the COPYSTYLE macro.
+\# Special handling for QUOTE quadding
 \#
-.MAC DEFAULTS END
-.    if !d $PAPER .PAPER LETTER
-.    if !\\n[#DOC_TYPE] .DOCTYPE DEFAULT
-.    ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-.    el \
-.       if !\\n[#COPY_STYLE]=1 .PAGENUM_STYLE DIGIT
-.    if !\\n[#COPY_STYLE] .COPYSTYLE FINAL
-.    if \\n[#DRAFT_WITH_PAGENUM] .COPYSTYLE \\*[$COPY_STYLE]
-.    if \\n[#DOC_TYPE]=4 \{\
-.       if !\\n[#USER_SET_L_LENGTH] \{\
-.          R_MARGIN \\n[#R_MARGIN]u
-.          rr #USER_SET_L_LENGTH
+.MAC QUOTE_QUAD END
+.    ds $Q_QUAD \\$0
+.    substring $Q_QUAD 6
+.END
+.
+.ALIAS QUOTE_LEFT   QUOTE_QUAD
+.ALIAS QUOTE_CENTER QUOTE_QUAD
+.ALIAS QUOTE_RIGHT  QUOTE_QUAD
+\#
+.MAC QUAD-ERROR END
+.    tm1 "[mom]: \\$1 at line \\n[.c] of '\\n[.F]' must be set to either L or J.
+.    ab   [mom]: Aborting.
+.END
+\#
+.MAC ASSIGN_ELEMENT END
+.    rm $\\*[ELEMENT] \" Clear this first
+.\" HDRFTR_<POSITION>_<PARAMETER> need special handling.
+.    ds hdrftr \\*[FROM_ALIAS]
+.    substring hdrftr 0 5
+.    if '\\*[hdrftr]'HDRFTR' \{\
+.       ds hdrftr-pos-element \\*[ELEMENT]
+.\" See if ELEMENT is of the form HDRFTR_<pos>_<param>
+.       substring hdrftr-pos-element 0 7
+.       substring hdrftr-pos-element -1
+.       if !'\\*[ELEMENT]'HDRFTR_COLOR' \{\
+.          if '\\*[hdrftr-pos-element]'L' .nr hdrftr-pos-element 1
+.          if '\\*[hdrftr-pos-element]'C' .nr hdrftr-pos-element 1
+.          if '\\*[hdrftr-pos-element]'R' .nr hdrftr-pos-element 1
+.       \}
+.    \}
+.    if !\\n[hdrftr-pos-element] \{\
+.       ds c1-c5 \\*[ELEMENT]
+.       substring c1-c5 0 4  \" Grab first five letters of the alias
+.    \}
+.\"  If none of the following, convert the substring of the
+.\"  calling alias, ie \*[ELEMENT], into the parameter string, e.g.,
+.\"  $TITLE_FAM, assign arg, and set register.
+.    if !'\\*[c1-c5]'BIBLI' \
+.    if !'\\*[c1-c5]'BLOCK' \
+.    if !'\\*[c1-c5]'CITAT' \
+.    if !'\\*[c1-c5]'ENDNO' \
+.    if !'\\*[c1-c5]'EPIGR' \
+.    if !'\\*[c1-c5]'FOOTN' \
+.    if !'\\*[c1-c5]'HDRFT' \
+.    if !'\\*[c1-c5]'LINEN' \
+.    if !'\\*[c1-c5]'PAGEN' \{\
+.       ie '\\*[ELEMENT]'CODE_SIZE_ADJ' .nr #\\*[ELEMENT] \\$1
+.       el \{\
+.          ds $\\*[ELEMENT] \\$1
+.          nr #\\*[ELEMENT] 1
+.       \}
+.    \}
+.    if '\\*[$\\*[ELEMENT]]'' \{\
+.       if '\\*[c1-c5]'BIBLI' .ASSIGN_PARAM BIB       \\$1
+.       if '\\*[c1-c5]'BLOCK' .ASSIGN_PARAM BQUOTE_   \\$1
+.       if '\\*[c1-c5]'CITAT' .ASSIGN_PARAM BQUOTE_   \\$1
+.       if '\\*[c1-c5]'ENDNO' .ASSIGN_PARAM EN        \\$1
+.       if '\\*[c1-c5]'EPIGR' .ASSIGN_PARAM EPI_      \\$1
+.       if '\\*[c1-c5]'FOOTN' .ASSIGN_PARAM FN_       \\$1
+.       if '\\*[c1-c5]'HDRFT' .ASSIGN_PARAM HDRFTR_   \\$1
+.       if '\\*[c1-c5]'LINEN' .ASSIGN_PARAM LN_       \\$1
+.       if '\\*[c1-c5]'PAGEN' .ASSIGN_PARAM PAGE_NUM_ \\$1
+.    \}
+.    if \\n[hdrftr-pos-element] \{\
+.       if '\\*[hdrftr-pos-element]'L' .ds hdrftr-pos-element LEFT
+.       if '\\*[hdrftr-pos-element]'C' .ds hdrftr-pos-element CENTER
+.       if '\\*[hdrftr-pos-element]'R' .ds hdrftr-pos-element RIGHT
+.       if '\\*[ELEMENT]'HDRFTR_\\*[hdrftr-pos-element]_FAM' \
+.          ds $HDRFTR_\\*[hdrftr-pos-element]_FAM \\$1
+.    \}
+.    rr hdrftr-pos-element
+.    rm hdrftr-pos-element
+.END
+\#
+.MAC ASSIGN_PARAM END
+.    if '\\*[PARAM]'FAM'         .nr substr-index -7
+.    if '\\*[PARAM]'FT'          .nr substr-index -5
+.    if '\\*[PARAM]'SIZE_CHANGE' .nr substr-index -5
+.    if '\\*[PARAM]'COLOR'       .nr substr-index -6
+.    if '\\*[PARAM]'QUAD'        .nr substr-index -5
+.    if '\\$1'BIB' \{\
+.       ds ELEMENT \\*[FROM_ALIAS]
+.       substring ELEMENT 12 \\n[substr-index]
+.       if '\\*[ELEMENT]'_HEADER_' \
+.          ds ELEMENT _STRING_
+.    \}
+.    if '\\$1'BQUOTE_' .rm ELEMENT
+.    if '\\$1'EN' \{\
+.       ds ELEMENT \\*[FROM_ALIAS]
+.       substring ELEMENT 7 \\n[substr-index]
+.       if '\\*[ELEMENT]'S_HEADER_' \
+.          ds ELEMENT _STRING_
+.       if '\\*[ELEMENT]'_LINENUMBER_' \
+.          ds ELEMENT _LN_
+.    \}
+.    if '\\$1'EPI_' .rm ELEMENT
+.    if '\\$1'FN_'  .rm ELEMENT
+.    if '\\$1'HDRFTR_' \{\
+.       if '\\*[ELEMENT]'HDRFTR_FAM' \{\
+.          nr #HDRFTR 1
+.          ds $HDRFTR_FAM        \\$2
+.          ds $HDRFTR_LEFT_FAM   \\$2
+.          ds $HDRFTR_CENTER_FAM \\$2
+.          ds $HDRFTR_RIGHT_FAM  \\$2
+.       \}
+.       if '\\*[ELEMENT]'HDRFTR_COLOR' \{\
+.          nr #HDRFTR 1
+.          nr #HDRFTR_COLOR 1
+.          ds $HDRFTR_COLOR \\$2
+.       \}
+.       if '\\*[ELEMENT]'HDRFTR_SIZE_CHANGE' \{\
+.          nr #HDRFTR 1
+.          ds $HDRFTR_SIZE_CHANGE \\$2
+.       \}
+.       if '\\*[PARAM]'SIZE_CHANGE' \{\
+.          nr #HDRFTR 1
+.          if '\\*[hdrftr-pos-element]'L' \
+.             ds $HDRFTR_LEFT_SIZE_CHANGE \\$2
+.          if '\\*[hdrftr-pos-element]'C' \
+.             ds $HDRFTR_CENTER_SIZE_CHANGE \\$2
+.          if '\\*[hdrftr-pos-element]'R' \
+.             ds $HDRFTR_RIGHT_SIZE_CHANGE \\$2
+.       \}
+.       if !r #HDRFTR \{\
+.          substring ELEMENT 7 \\n[substr-index]
+.          if '\\*[ELEMENT]'_LEFT' .ds ELEMENT _STRING_
+.       \}
+.    \}
+.    if '\\$1'LN_'       .rm ELEMENT
+.    if '\\$1'PAGE_NUM_' .rm ELEMENT
+.    if !r #HDRFTR \{\
+.       ds $\\$1\\*[ELEMENT]\\*[PARAM] \\$2
+.       nr #\\$1\\*[ELEMENT]\\*[PARAM] 1
+.    \}
+.    rr #HDRFTR
+.    rm hdrftr-pos-element
+.    rr substr-index
+.    rm FROM_ALIAS
+.    rm ELEMENT
+.END
+\#
+.MAC TITLE_LEAD END
+.    ds $TYPE \\$0
+.    substring $TYPE 0 2
+.    if '\\*[$TYPE]'DOC' .nr DOC_ 1
+.    ds $TYPE \\$0
+.    ie '\\*[$TYPE]'MISC_LEAD' .ds $TYPE COVER_MISC
+.    el .substring $TYPE -6 0
+.    ds $\\*[$TYPE]_LEAD \\$1
+.    nr #\\*[$TYPE]_LEAD 1
+.    rm $TYPE
+.END
+\#
+\# The _STYLE macro, called by various aliases, allows grouping
+\# style parameters for most document elements in a single macro
+\# using 'KEYWORD value' pairs.
+\#
+.MAC _STYLE END
+.    SILENT \" Some of the invoked macros cause unwanted breaks
+.    ds $STYLE_TYPE \\$0
+.    substring $STYLE_TYPE 0 -7
+.    ds $HDR_FTR \\*[$STYLE_TYPE]
+.    length #HDR_FTR_STRING $HDR_FTR
+.    if \\n[#HDR_FTR_STRING]<=5 .substring $HDR_FTR 0 5 \" HEADER or FOOTER
+.    if '\\*[$HDR_FTR]'HEADER' .ds $HDR_FTR HEADER
+.    if '\\*[$HDR_FTR]'FOOTER' .ds $HDR_FTR FOOTER
+.    ds $POS \\$0
+.    substring $POS 7 7
+.    if '\\*[$POS]'L' .ds $POS LEFT
+.    if '\\*[$POS]'C' .ds $POS CENTER
+.    if '\\*[$POS]'R' .ds $POS RIGHT
+.    if '\\*[$STYLE_TYPE]'\\*[$HDR_FTR]_\\*[$POS]' \{\
+.       ds $\\*[$HDR_FTR]_\\*[$POS] \\*[$HDR_FTR]_\\*[$POS]
+.       ds $STYLE_TYPE HDRFTR_\\*[$POS]
+.    \}
+.    if '\\*[$STYLE_TYPE]'ENDNOTES_HEADER' \
+.       ds $BIB-EN-TOC EN_STRING
+.    if '\\*[$STYLE_TYPE]'ENDNOTE_STRING' \
+.       ds $BIB-EN-TOC EN_STRING
+.    if '\\*[$STYLE_TYPE]'BIBLIOGRAPHY_HEADER' \
+.       ds $BIB-EN-TOC BIB_STRING
+.    if '\\*[$STYLE_TYPE]'BIBLIOGRAPHY_STRING' \
+.       ds $BIB-EN-TOC BIB_STRING
+.    if '\\*[$STYLE_TYPE]'TOC_HEADER' \
+.       ds $BIB-EN-TOC TOC_STRING
+.    if '\\*[$STYLE_TYPE]'PAGENUMBER' \
+.       ds $STYLE_TYPE PAGENUM
+.    nr #LOOP 0 1
+.    nr #STYLE_PARAMS \\n[#NUM_ARGS]
+.    while \\n+[#LOOP]<=\\n[#STYLE_PARAMS] \{\ 
+.       if '\\$1'FAMILY' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_FAMILY \\$1
+.          shift
 .       \}
-.       if \\n[#PRINT_STYLE]=1 .PRINTSTYLE TYPEWRITE SINGLESPACE
-.    \}
-.    if \\n[#COPY_STYLE]=1 \{\
+.       if '\\$1'FONT' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_FONT \\$1
+.          shift
+.       \}
+.       if '\\$1'SIZE' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_SIZE \\$1
+.          shift
+.       \}
+.       if '\\$1'COLOR' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_COLOR \\$1
+.          shift
+.       \}
+.       if '\\$1'CAPS' \{\
+.          if \\n[#\\*[$STYLE_TYPE]_SMALLCAPS] \{\
+.             tm1 \
+"[mom]: '\\*[$STYLE_TYPE]_STYLE' contains CAPS and SMALLCAPS. \
+CAPS takes precedence.
+.             rr #\\*[$STYLE_TYPE]_SMALLCAPS
+.          \}
+.          \\*[$STYLE_TYPE]_CAPS
+.          if d $\\*[$HDR_FTR]_LEFT   .HEADER_LEFT_CAPS
+.          if d $\\*[$HDR_FTR]_CENTER .HEADER_CENTER_CAPS
+.          if d $\\*[$HDR_FTR]_CENTRE .HEADER_CENTER_CAPS
+.          if d $\\*[$HDR_FTR]_RIGHT  .HEADER_RIGHT_CAPS
+.          shift
+.       \}
+.       if '\\$1'NO_CAPS' \{\
+.          nr #\\*[$STYLE_TYPE]_CAPS 0
+.          if !'\\*[$BIB-EN-TOC]'' \
+.             rr #\\*[$BIB-EN-TOC]_CAPS
+.          shift
+.       \}
+.       if '\\$1'SMALLCAPS' \{\
+.          if \\n[#\\*[$STYLE_TYPE]_CAPS] \{\
+.             tm1 \
+"[mom]: '\\*[$STYLE_TYPE]_STYLE' contains CAPS and SMALLCAPS. \
+SMALLCAPS takes precedence.
+.             rr #\\*[$STYLE_TYPE]_CAPS
+.          \}
+.          \\*[$STYLE_TYPE]_SMALLCAPS
+.          shift
+.       \}
+.       if '\\$1'NO_SMALLCAPS' \{\
+.          rr #\\*[$STYLE_TYPE]_SMALLCAPS
+.          if !'\\*[$BIB-EN-TOC]'' \
+.             rr #\\*[$BIB-EN-TOC]_SMALLCAPS
+.          shift
+.       \}
+.       if '\\$1'LEAD' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_LEAD \\$1
+.          shift
+.       \}
+.       if '\\$1'AUTOLEAD' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_AUTOLEAD \\$1
+.          shift
+.       \}
+.       if '\\$1'SPACE' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_SPACE \\$1
+.          shift
+.       \}
+.       if '\\$1'QUAD' \{\
+.          shift
+.          ie '\\*[$STYLE_TYPE]'QUOTE' \{\
+.              ds $QUAD_TYPE \\$1
+.              substring $QUAD_TYPE 0 0
+.              if '\\*[$QUAD_TYPE]'L' .QUOTE_LEFT
+.              if '\\*[$QUAD_TYPE]'C' .QUOTE_CENTER
+.              if '\\*[$QUAD_TYPE]'R' .QUOTE_RIGHT
+.          \}
+.          el .\\*[$STYLE_TYPE]_QUAD \\$1
+.          shift
+.       \}
+.       if '\\$1'INDENT' \{\
+.          shift
+.          \\*[$STYLE_TYPE]_INDENT \\$1
+.          shift
+.       \}
+.\" UNDERLINE and UNDERSCORE are identical but we can't use : or &
+.\" in string comparisons.
+.       if '\\$1'UNDERLINE' \{\
+.          shift
+.          if '\\$1'DOUBLE' \{\
+.             as ul-args \\$1 \"
+.             shift
+.          \}
+.          nr #COUNT 0 1
+.          while \\n+[#COUNT]<=3 \{\
+.             if \B'\\$1' \{\
+.                as ul-args \\$1 \"
+.                shift
+.             \}
+.          \}
+.          \\*[$STYLE_TYPE]_UNDERSCORE \\*[ul-args]
+.       \}
+.       if '\\$1'UNDERSCORE' \{\
+.          shift
+.          if '\\$1'DOUBLE' \{\
+.             as ul-args \\$1 \"
+.             shift
+.          \}
+.          nr #COUNT 0 1
+.          while \\n+[#COUNT]<=3 \{\
+.             if \B'\\$1' \{\
+.                as ul-args \\$1 \"
+.                shift
+.             \}
+.          \}
+.          \\*[$STYLE_TYPE]_UNDERSCORE \\*[ul-args]
+.       \}
+.       if '\\$1'NO_UNDERSCORE' \{\
+.          rr #\\*[$STYLE_TYPE]_UNDERLINE
+.          if !'\\*[$BIB-EN-TOC]'' \
+.             rr #\\*[$BIB-EN-TOC]_UNDERLINE
+.          shift
+.       \}
+.       if '\\$1'NO_UNDERLINE' \{\
+.          rr #\\*[$STYLE_TYPE]_UNDERLINE
+.          if !'\\*[$BIB-EN-TOC]'' \
+.             rr #\\*[$BIB-EN-TOC]_UNDERLINE
+.          shift
+.       \}
+.       if '\\$1'V_ADJUST' \{\
+.          shift
+.          COPYRIGHT_V_ADJUST \\$1
+.          shift
+.       \}
+.    \}
+.    rm $STYLE_TYPE
+.    rm $HDR_FTR
+.    rm $POS
+.    rm $HEADER_LEFT
+.    rm $HEADER_CENTER
+.    rm $HEADER_RIGHT
+.    rm $BIB-EN-TOC
+.    rm ul-args
+.    SILENT off
+.END
+.
+.ds STYLE_TYPE_1  ATTRIBUTE
+.ds STYLE_TYPE_2  AUTHOR
+.ds STYLE_TYPE_3  BIBLIOGRAPHY_HEADER
+.ds STYLE_TYPE_4  BIBLIOGRAPHY_STRING
+.ds STYLE_TYPE_5  BLOCKQUOTE
+.ds STYLE_TYPE_6  CHAPTER
+.ds STYLE_TYPE_7  CHAPTER_TITLE
+.ds STYLE_TYPE_8  CODE
+.ds STYLE_TYPE_9  COPYRIGHT
+.ds STYLE_TYPE_10 COVER
+.ds STYLE_TYPE_11 COVERTITLE
+.ds STYLE_TYPE_12 DOC_COVERTITLE
+.ds STYLE_TYPE_13 DOCHEADER
+.ds STYLE_TYPE_14 DOCTITLE
+.ds STYLE_TYPE_15 DOCTYPE
+.ds STYLE_TYPE_16 ENDNOTE_TITLE
+.ds STYLE_TYPE_17 ENDNOTES_HEADER
+.ds STYLE_TYPE_18 ENDNOTE_STRING
+.ds STYLE_TYPE_19 EPIGRAPH
+.ds STYLE_TYPE_20 FINIS
+.ds STYLE_TYPE_21 FOOTER_LEFT
+.ds STYLE_TYPE_22 FOOTER_CENTER
+.ds STYLE_TYPE_23 FOOTER_CENTRE
+.ds STYLE_TYPE_24 FOOTER_RIGHT
+.ds STYLE_TYPE_25 FOOTNOTE
+.ds STYLE_TYPE_26 HEADER_LEFT
+.ds STYLE_TYPE_27 HEADER_CENTER
+.ds STYLE_TYPE_28 HEADER_CENTRE
+.ds STYLE_TYPE_29 HEADER_RIGHT
+.ds STYLE_TYPE_30 LEAD
+.ds STYLE_TYPE_31 LINENUMBER
+.ds STYLE_TYPE_32 MISC
+.ds STYLE_TYPE_33 QUOTE
+.ds STYLE_TYPE_34 PAGENUMBER
+.ds STYLE_TYPE_35 SUBTITLE
+.ds STYLE_TYPE_36 TITLE
+.ds STYLE_TYPE_37 TOC_HEADER
+.
+.
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=37 \{\
+. ALIAS \*[STYLE_TYPE_\n[#LOOP]]_STYLE           _STYLE
+. ALIAS COVER_\*[STYLE_TYPE_\n[#LOOP]]_STYLE     _STYLE
+. ALIAS DOC_COVER_\*[STYLE_TYPE_\n[#LOOP]]_STYLE _STYLE
+.\}
+\#
+\# UNDERLINE CONTROL
+\# -----------------
+\# *Arguments:
+\#   [ DOUBLE ] [ <underline weight> [<underline gap>] ] | <none> | <anything>
+\# *Function:
+\#   Toggles underlining of the element indicated by the calling alias
+\#   on or off.  Uses #<element>_UNDERLINE_WEIGHT to set the weight,
+\#   and defines string $<element>_UNDERLINE_GAP.
+\#
+.MAC _UNDERLINE END
+.    ds $GET_TITLE_TYPE \\$0
+.    substring $GET_TITLE_TYPE -2
+.    ie '\\*[$GET_TITLE_TYPE]'NE' \{\
+.\" Called as _UNDERLINE
+.        ds $GET_TITLE_TYPE \\$0
+.        substring $GET_TITLE_TYPE 0 -10
+.        ds $TITLE_TYPE \\*[$GET_TITLE_TYPE]
+.    \}
+.    el \{\
+.\" Called as _UNDERSCORE
+.        ds $GET_TITLE_TYPE \\$0
+.        substring $GET_TITLE_TYPE 0 -11
+.        ds $TITLE_TYPE \\*[$GET_TITLE_TYPE]
+.    \}
+.    ds $GET_TITLE_TYPE \\$0
+.    substring $GET_TITLE_TYPE 0 2
+.    if '\\*[$GET_TITLE_TYPE]'BIB' .ds $TITLE_TYPE BIB_STRING_
+.    if '\\*[$GET_TITLE_TYPE]'SUB' .ds $TITLE_TYPE SUBTITLE_
+.    ds $GET_TITLE_TYPE \\$0
+.    substring $GET_TITLE_TYPE 0 7
+.    if '\\*[$GET_TITLE_TYPE]'ENDNOTES' .ds $TITLE_TYPE EN_STRING_
+.    ds $GET_TITLE_TYPE \\$0
+.    substring $GET_TITLE_TYPE 0 10
+.    if '\\*[$GET_TITLE_TYPE]'ENDNOTE_STR' .ds $TITLE_TYPE EN_STRING_
+.    if '\\*[$GET_TITLE_TYPE]'ENDNOTE_TIT' .ds $TITLE_TYPE EN_TITLE_
+.    ie '\\$1'' .nr #\\*[$TITLE_TYPE]UNDERLINE 1
+.    el \{\
+.       ie \\n[#NUM_ARGS]=1 \{\
+.          ie \B'\\$1' \{\
+.             if !\\n[#PRINT_STYLE]=1 \{\
+.                \\*[$TITLE_TYPE]UNDERLINE_WEIGHT \\$1
+.                nr #\\*[$TITLE_TYPE]UNDERLINE 1
+.             \}
+.          \}
+.          el \{\
+.             ie '\\$1'DOUBLE' .nr #\\*[$TITLE_TYPE]UNDERLINE 2
+.             el .nr #\\*[$TITLE_TYPE]UNDERLINE 0
+.          \}
+.       \}
+.       el \{\
+.          if !\\n[#PRINT_STYLE]=1 \{\
+.               nr #\\*[$TITLE_TYPE]UNDERLINE 1
+.               if '\\$1'DOUBLE' \{\
+.                  nr #\\*[$TITLE_TYPE]UNDERLINE 2
+.                  shift
+.               \}
+.               \\*[$TITLE_TYPE]UNDERLINE_WEIGHT \\$1
+.               if !'\\$2'' \
+.                  ds $\\*[$TITLE_TYPE]UNDERLINE_GAP \\$2
+.               if !'\\$3'' \
+.                  ds $\\*[$TITLE_TYPE]RULE_GAP \\$3
+.          \}
+.       \}
+.    \}
+.    rm $TITLE_TYPE
+.END
+.
+.ALIAS ENDNOTE_STRING_UNDERLINE _UNDERLINE
+.ALIAS ENDNOTE_STRING_UNDERSCORE _UNDERLINE
+\#
+\# DEFAULTS
+\# --------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Sets up defaults if no values are entered prior to START.
+\# *Notes:
+\#   The defaults for $CHAPTER_STRING, $DRAFT_STRING, and
+\#   $REVISION_STRING are in the COPYSTYLE macro.
+\#
+.MAC DEFAULTS END
+.    if !\\n[#DOC_TYPE]=5 \{\
+.       ie !d $PAPER .PAPER LETTER
+.       el .PAPER \\*[$PAPER]
+.    \}
+.    if !\\n[#DOC_TYPE] .DOCTYPE DEFAULT
+.    if !r #CH_NUM .nr #CH_NUM 1 
+.    ie \\n[#PAGENUM_STYLE_SET] .PAGENUM_STYLE \\*[$PAGENUM_STYLE]
+.    el \
+.       if !\\n[#COPY_STYLE]=1 .PAGENUM_STYLE DIGIT
+.    if !\\n[#COPY_STYLE] .COPYSTYLE FINAL
+.    if \\n[#DRAFT_WITH_PAGENUM] .COPYSTYLE \\*[$COPY_STYLE]
+.    if \\n[#DOC_TYPE]=4 \{\
+.       if !\\n[#USER_SET_L_LENGTH] \{\
+.          R_MARGIN \\n[#R_MARGIN]u
+.          rr #USER_SET_L_LENGTH
+.       \}
+.       if \\n[#PRINT_STYLE]=1 .PRINTSTYLE TYPEWRITE SINGLESPACE
+.    \}
+.    if \\n[#COPY_STYLE]=1 \{\
 .       COPYSTYLE DRAFT
 .       PAGENUMBER 1
 .    \}
@@ -5474,55 +5797,61 @@ y\R'#DESCENDER \\n[.cdp]'
 .          el .if !r #T_MARGIN .T_MARGIN 6P
 .       \}
 .    \}
-.    if !r #T_MARGIN          .T_MARGIN \\n[#HEADER_MARGIN]+\\n[#HEADER_GAP]
-.    if !r #DOCHEADER_ADVANCE .nr #DOCHEADER_ADVANCE \\n[#T_MARGIN]
-.    if !r #FOOTER_MARGIN     .FOOTER_MARGIN 3P
-.    if !r #FOOTER_GAP        .FOOTER_GAP 3P
-.    if !r #B_MARGIN          .B_MARGIN \\n[#FOOTER_MARGIN]u+\\n[#FOOTER_GAP]u
-.    if (\\n[#FOOTER_MARGIN]+\\n[.v]>=\\n[#B_MARGIN]) \{\
-.       tm1 "[mom]: Your chosen bottom margin for running text is too close to the footer margin.
-.       tm1 "       No footers or bottom-of-page page numbers will be printed.
-.       tm1 "       Please reset B_MARGIN or FOOTER_MARGIN to allow enough space.
-.       tm1 "       If no footers or bottom-of-page page numbers are required,
-.       tm1 "       invoke .FOOTER_MARGIN 0 before .START
-.    \}
-.    if !r #HEADER_RULE_GAP .HEADER_RULE_GAP 4p
-.    if !r #FOOTER_RULE_GAP .FOOTER_RULE_GAP 4p
+.    if !r #T_MARGIN \
+.       T_MARGIN \\n[#HEADER_MARGIN]+\\n[#HEADER_GAP]
+.    if !r #DOCHEADER_ADVANCE \
+.       nr #DOCHEADER_ADVANCE \\n[#T_MARGIN]
+.    if !r #FOOTER_MARGIN .FOOTER_MARGIN 3P
+.    if !r #FOOTER_GAP    .FOOTER_GAP 3P
+.    if !r #B_MARGIN \
+.       B_MARGIN \\n[#FOOTER_MARGIN]u+\\n[#FOOTER_GAP]u
+.    if !\\n[#HEADER_RULE_GAP] .HEADER_RULE_GAP 4p
+.    if !\\n[#FOOTER_RULE_GAP] .FOOTER_RULE_GAP 4p
 .    if !r #HDRFTR_RULE     .HDRFTR_RULE
 .    if !r #PAGE_NUM_SET    .PAGENUMBER 1
 .\" Read in number registers and strings for type parameters
 .    nr #DOC_L_MARGIN \\n[#L_MARGIN]
 .    nr #DOC_L_LENGTH \\n[#L_LENGTH]
 .    nr #DOC_R_MARGIN \\n[#PAGE_WIDTH]-(\\n[#DOC_L_MARGIN]+\\n[#L_LENGTH])
-.    i'\\*[$SAVED_DOC_FAM]'' \{\
-.       ds $DOC_FAM \\*[$FAMILY]
+.    ie !'\\*[$SAVED_DOC_FAM]'' \{\
+.       ds $DOC_FAM \\*[$SAVED_DOC_FAM]
 .       rm $SAVED_DOC_FAM
 .    \}
+.    el .ds $DOC_FAM \\*[$FAMILY]
 .    nr #DOC_PT_SIZE  \\n[#PT_SIZE]
-.\"
 .    if \\n[#TOC]          .nr #DOC_PT_SIZE \\n[#TOC_PS]
 .    if \\n[#ENDNOTES]     .nr #DOC_PT_SIZE \\n[#EN_PS]
 .    if \\n[#BIBLIOGRAPHY] .nr #DOC_PT_SIZE \\n[#BIB_PS]
-.\"
-.    nr #DOC_LEAD     \\n[.v]
-.    nr #DOC@LEAD     \\n[#DOC_LEAD]
+.    if \
+(\\n[#TOC]=0)&\
+(\\n[#LIST_OF_FIGURES]=0)&\
+(\\n[#LIST_OF_TABLES]=0)&\
+(\\n[#LIST_OF_EQUATIONS]=0) \
+.    nr #DOC_LEAD \\n[.v]
+.    nr #DOC@LEAD \\n[#DOC_LEAD]
 .    if \\n[#AUTO_LEAD] .nr #DOC_AUTOLEAD \\n[#AUTOLEAD_VALUE]
 .\" #SAVED_DOC_LEAD is set in COLLATE
 .    if \\n[#SAVED_DOC_LEAD] \{\
 .       if \
-(\\n[#TOC]=0):\
-(\\n[#LIST_OF_FIGURES]=0):\
-(\\n[#LIST_OF_TABLES]=0):\
-(\\n[#LIST_OF_EQUATIONS]=0) \
-.          if !\\n[#DOC_LEAD]=\\n[#SAVED_DOC_LEAD] .nr #RERUN_TRAPS 1
+(\\n[#TOC]=0)&\
+(\\n[#LIST_OF_FIGURES]=0)&\
+(\\n[#LIST_OF_TABLES]=0)&\
+(\\n[#LIST_OF_EQUATIONS]=0) \{\
+.          ie !\\n[#DOC_LEAD]=\\n[#SAVED_DOC_LEAD] .nr #RERUN_TRAPS 1
+.          el .nr #SKIP_TRAPS 1
+.       \}
 .    \}
 .    ie \\n[#ADJ_DOC_LEAD]=1 .
 .    el \
 .       if !\\n[#DOC_LEAD_ADJUST_OFF] .DOC_LEAD_ADJUST
-.    ds $DOC_QUAD \\*[$QUAD_VALUE]
+.    ie d$RESTORE_DOC_QUAD \{\
+.       ds $DOC_QUAD \\*[$RESTORE_DOC_QUAD]
+.       rm $RESTORE_DOC_QUAD
+.    \}
+.    el .ds $DOC_QUAD \\*[$QUAD_VALUE]
 .    if '\\*[$FONT]''   .FT R
 .    if '\\*[$PP_FT]''  .ds $PP_FT \\*[$FONT]
-.    if !'\\*[$PP_FT]'' .ds $PP_FT \\*[$FONT]
+.    FT \\*[$PP_FT]
 .\" Counters
 .    nr #PP                0
 .    nr #FN_NUMBER         0 1
@@ -5530,44 +5859,51 @@ y\R'#DESCENDER \\n[.cdp]'
 .    nr #FN_COUNT_FOR_COLS 0 1
 .    nr #DONE_ONCE         0 1
 .\" Enable shimming if user hasn't turned it off
-.    if \\n[#NO_SHIM]=2    .rr #NO_SHIM
+.   if \\n[#NO_SHIM]=2 \{\
+.      rr #NO_SHIM
+.      nr #NO_FLEX 1
+.   \}
 .\" General style defaults for both PRINTSTYLEs
 .    nr #PP_STYLE 1
 .    PARA_INDENT \\n[#PP_INDENT]u
-.    if !d $HDRFTR_FAM               .HDRFTR_FAMILY \\*[$DOC_FAM]
-.    if !d $HDRFTR_SIZE_CHANGE       .HDRFTR_SIZE +0
-.    if !d $PAGE_NUM_FAM             .PAGENUM_FAMILY \\*[$DOC_FAM]
-.    if !d $PAGE_NUM_FT              .PAGENUM_FONT R
-.    if !d $PAGE_NUM_SIZE_CHANGE     .PAGENUM_SIZE +0
-.    if !r #PAGE_NUM_POS_SET         .PAGENUM_POS BOTTOM CENTER
+.    if !d $HDRFTR_FAM           .ds $HDRFTR_FAM \\*[$DOC_FAM]
+.    if !d $HDRFTR_SIZE_CHANGE   .HDRFTR_SIZE +0
+.    if !d $PAGE_NUM_FAM         .PAGENUM_FAMILY \\*[$DOC_FAM]
+.    if !d $PAGE_NUM_FT          .PAGENUM_FONT R
+.    if !d $PAGE_NUM_SIZE_CHANGE .PAGENUM_SIZE +0
+.    if !r #PAGE_NUM_POS_SET     .PAGENUM_POS BOTTOM CENTER
 .    ie \\n[#PAGE_NUM_HYPHENS_SET] \{\
-.       if \\n[#PAGE_NUM_HYPHENS]=0  .PAGENUM_HYPHENS OFF
-.       if \\n[#PAGE_NUM_HYPHENS]=1  .PAGENUM_HYPHENS
-.    \}
-.    el .PAGENUM_HYPHENS
-.    if !r #HDRFTR_RIGHT_CAPS .HDRFTR_RIGHT_CAPS
-.    if \\n[#HDRFTR_RIGHT_CAPS]=0 \
-.       if !d $HDRFTR_RIGHT_SIZE_CHANGE .HDRFTR_RIGHT_SIZE +0
-.    if !d $FN_FAM        .FOOTNOTE_FAMILY \\*[$DOC_FAM]
-.    if !d $FN_FT         .FOOTNOTE_FONT R
-.    if !d $FN_QUAD       .FOOTNOTE_QUAD \\*[$DOC_QUAD]
-.    if !r #FN_RULE       .FOOTNOTE_RULE
-.    if !r #FN_MARKERS    .FOOTNOTE_MARKERS
+.       if \\n[#PAGE_NUM_HYPHENS]=0 .PAGENUM_HYPHENS OFF
+.       if \\n[#PAGE_NUM_HYPHENS]=1 .PAGENUM_HYPHENS
+.    \}
+.    el \
+.       if !d$PAGENUM_STRING .PAGENUM_HYPHENS
+.    if !d $FN_FAM     .FOOTNOTE_FAMILY \\*[$DOC_FAM]
+.    if !d $FN_FT      .FOOTNOTE_FONT R
+.    if !d $FN_QUAD    .FOOTNOTE_QUAD \\*[$DOC_QUAD]
+.    if !r #FN_RULE    .FOOTNOTE_RULE
+.    if !r #FN_MARKERS .FOOTNOTE_MARKERS
 .    if \\n[#FN_MARKERS]=1 \{\
 .       if \\n[#FN_REF]=1 \
 .          if !\\n[#FN_MARKER_STYLE] .FOOTNOTE_MARKER_STYLE NUMBER
 .       if !\\n[#FN_MARKER_STYLE] .FOOTNOTE_MARKER_STYLE STAR
 .    \}
-.    if !r #EN_MARKER_STYLE     .ENDNOTE_MARKER_STYLE SUPERSCRIPT
-.    if !d $EN_PN_STYLE         .ENDNOTES_PAGENUM_STYLE digit
-.    if !d $EN_FAM              .ENDNOTE_FAMILY \\*[$DOC_FAM]
-.    if !d $EN_FT               .ENDNOTE_FONT R
-.    if !d $EN_QUAD             .ENDNOTE_QUAD \\*[$DOC_QUAD]
-.    if !d $EN_STRING           .ENDNOTE_STRING "Endnotes"
-.    if !d $EN_STRING_FAM       .ENDNOTE_STRING_FAMILY \\*[$EN_FAM]
-.    if !d $EN_STRING_QUAD      .ENDNOTE_STRING_QUAD CENTER
-.    if !r #EN_STRING_UNDERLINE .nr #EN_STRING_UNDERLINE 2
-.    if !r #EN_STRING_CAPS      .ENDNOTE_STRING_CAPS
+.    if !r #EN_MARKER_STYLE .ENDNOTE_MARKER_STYLE SUPERSCRIPT
+.    if !d $EN_PN_STYLE     .ENDNOTES_PAGENUM_STYLE digit
+.    if !d $EN_FAM          .ENDNOTE_FAMILY \\*[$DOC_FAM]
+.    if !d $EN_FT           .ENDNOTE_FONT R
+.    if !d $EN_QUAD \{\
+.       ds quad-check \\*[$DOC_QUAD]
+.       substring quad-check 0 0
+.       if '\\*[$DOC_QUAD]'C' .nr quad-check 1
+.       if '\\*[$DOC_QUAD]'R' .nr quad-check 1
+.       ie \\n[quad-check] .ENDNOTE_QUAD J
+.       el .ENDNOTE_QUAD \\*[$DOC_QUAD]
+.       rr quad-check
+.    \}
+.    if !d $EN_STRING       .ENDNOTES_HEADER_STRING "Endnotes"
+.    if !d $EN_STRING_FAM   .ENDNOTES_HEADER_FAMILY \\*[$EN_FAM]
+.    if !d $EN_STRING_QUAD  .ENDNOTES_HEADER_QUAD CENTER
 .    if !d $EN_TITLE \{\
 .       ie \\n[#DOC_TYPE]=2 \{\
 .          ie !'\\*[$CHAPTER_TITLE_1]'' \{\
@@ -5582,11 +5918,10 @@ y\R'#DESCENDER \\n[.cdp]'
 .          \}
 .       el .ENDNOTE_TITLE "\\*[$TITLE]"
 .    \}
-.    if !d $EN_TITLE_FAM          .ENDNOTE_TITLE_FAMILY \\*[$EN_FAM]
-.    if !d $EN_TITLE_QUAD         .ENDNOTE_TITLE_QUAD LEFT
-.    if !r #EN_TITLE_UNDERLINE    .nr #EN_TITLE_UNDERLINE 1
-.    if !d $EN_NUMBER_FAM         .ENDNOTE_NUMBER_FAMILY \\*[$EN_FAM]
-.    if !d $EN_LN_FAM             .ENDNOTE_LINENUMBER_FAMILY \\*[$EN_FAM]
+.    if !d $EN_TITLE_FAM  .ENDNOTE_TITLE_FAMILY \\*[$EN_FAM]
+.    if !d $EN_TITLE_QUAD .ENDNOTE_TITLE_QUAD LEFT
+.    if !d $EN_NUMBER_FAM .ENDNOTE_NUMBER_FAMILY \\*[$EN_FAM]
+.    if !d $EN_LN_FAM     .ENDNOTE_LINENUMBER_FAMILY \\*[$EN_FAM]
 .    if !r #EN_NUMBERS_ALIGN_LEFT \{\
 .       if !r #EN_NUMBERS_ALIGN_RIGHT \{\
 .          ie !\\n[#EN_MARKER_STYLE]=2 .ENDNOTE_NUMBERS_ALIGN RIGHT 2
@@ -5598,12 +5933,18 @@ y\R'#DESCENDER \\n[.cdp]'
 .    if !d $BIB_PN_STYLE         .BIBLIOGRAPHY_PAGENUM_STYLE digit
 .    if !d $BIB_FAM              .BIBLIOGRAPHY_FAMILY \\*[$DOC_FAM]
 .    if !d $BIB_FT               .BIBLIOGRAPHY_FONT R
-.    if !d $BIB_QUAD             .BIBLIOGRAPHY_QUAD \\*[$DOC_QUAD]
+.    if !d $BIB_QUAD \{\
+.       ds quad-check \\*[$DOC_QUAD]
+.       substring quad-check 0 0
+.       if '\\*[$DOC_QUAD]'C' .nr quad-check 1
+.       if '\\*[$DOC_QUAD]'R' .nr quad-check 1
+.       ie \\n[quad-check] .BIBLIOGRAPHY_QUAD J
+.       el .BIBLIOGRAPHY_QUAD \\*[$DOC_QUAD]
+.       rr quad-check
+.    \}
 .    if !d $BIB_STRING           .BIBLIOGRAPHY_STRING "Bibliography"
 .    if !d $BIB_STRING_FAM       .BIBLIOGRAPHY_STRING_FAMILY \\*[$BIB_FAM]
 .    if !d $BIB_STRING_QUAD      .BIBLIOGRAPHY_STRING_QUAD CENTER
-.    if !r #BIB_STRING_UNDERLINE .nr #BIB_STRING_UNDERLINE 2
-.    if !r #BIB_STRING_CAPS      .BIBLIOGRAPHY_STRING_CAPS
 .    if !d $TOC_HEADER_STRING    .TOC_HEADER_STRING "Contents"
 .    if !d $TOC_HEADER_QUAD      .TOC_HEADER_QUAD LEFT
 .    if !d $TOC_PN_STYLE         .TOC_PAGENUM_STYLE roman
@@ -5624,11 +5965,12 @@ y\R'#DESCENDER \\n[.cdp]'
 .\" Captions, labels, sources
 .\" All at default doc specs except leading, which is autolead 2
 .   nr label-type-counter 0 1
-.   while \\n+[label-type-counter]<=4 \{\
+.   while \\n+[label-type-counter]<=5 \{\
 .      if \\n[label-type-counter]=1 .ds label-type eqn
 .      if \\n[label-type-counter]=2 .ds label-type pdf-img
 .      if \\n[label-type-counter]=3 .ds label-type pic
 .      if \\n[label-type-counter]=4 .ds label-type tbl
+.      if \\n[label-type-counter]=5 .ds label-type floating
 .      nr spec-type-counter 0 1
 .      while \\n+[spec-type-counter]<=3 \{\
 .         if \\n[spec-type-counter]=1 .ds spec-type label
@@ -5637,10 +5979,12 @@ y\R'#DESCENDER \\n[.cdp]'
 .         set-defaults
 .         set-inline-specs
 .      \}
+.      rm label-type
+.      rm spec-type
 .   \}
 .\" String defaults for both PRINTSTYLEs
 .    ie \\n[#DOC_TYPE]=1 \{\
-.       ie '\\*[$DOC_TITLE]'' \{\
+.       ie '\\*[$DOCTITLE]'' \{\
 .          if \\n[#USER_DEF_HDRFTR_LEFT]=0  .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
 .          if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
 .       \}
@@ -5648,54 +5992,68 @@ y\R'#DESCENDER \\n[.cdp]'
 .          if \\n[#COPY_STYLE]=1             .DRAFT_WITH_PAGENUMBER
 .          if \\n[#USER_DEF_HDRFTR_LEFT]=0   .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
 .          if \\n[#USER_DEF_HDRFTR_CENTER]=0 .ds $HDRFTR_CENTER \\*[$TITLE]
-.          if \\n[#USER_DEF_HDRFTR_RIGHT]=0  .ds $HDRFTR_RIGHT \\*[$DOC_TITLE]
+.          if \\n[#USER_DEF_HDRFTR_RIGHT]=0  .ds $HDRFTR_RIGHT \\*[$DOCTITLE]
 .       \}
 .    \}
 .    el \{\
 .       if \\n[#USER_DEF_HDRFTR_LEFT]=0  .ds $HDRFTR_LEFT \\*[$AUTHOR_1]
 .       if \\n[#USER_DEF_HDRFTR_RIGHT]=0 .ds $HDRFTR_RIGHT \\*[$TITLE]
 .    \}
-.    if !d $ATTRIBUTE_STRING     .ds $ATTRIBUTE_STRING by
-.    if !d $FINIS_STRING         .FINIS_STRING "End"
-.    if !r #FINIS_STRING_CAPS    .nr #FINIS_STRING_CAPS 1
+.    if !d $ATTRIBUTE_STRING  .ds $ATTRIBUTE_STRING by
+.    if !d $FINIS_STRING      .FINIS_STRING "End"
+.    if !r #FINIS_STRING_CAPS .nr #FINIS_STRING_CAPS 1
 .\" Covers
 .    if !r #DOC_COVERS_OFF           .nr #DOC_COVERS 1
 .    if !r #COVERS_OFF               .nr #COVERS 1
 .    if !d $COVER_COPYRIGHT_QUAD     .COVER_COPYRIGHT_QUAD R
 .    if !d $COVER_MISC_QUAD          .COVER_MISC_QUAD L
+.    if !d $MISC_QUAD                .MISC_QUAD L
 .    if !d $DOC_COVER_COPYRIGHT_QUAD .DOC_COVER_COPYRIGHT_QUAD R
 .    if !d $DOC_COVER_MISC_QUAD      .DOC_COVER_MISC_QUAD L
-.    if !r #DOC_COVER_UNDERLINE      .DOC_COVER_UNDERLINE
-.    if !r #COVER_UNDERLINE          .COVER_UNDERLINE
 .\" Defaults for printstyle TYPEWRITE
 .    if \\n[#PRINT_STYLE]=1 \{\
 .       TYPEWRITER
 .       SS DEFAULT
 .       if \\n[#UNDERLINE_QUOTES]=1 .UNDERLINE_QUOTES
 .       if \\n[#UNDERLINE_QUOTES]=0 .UNDERLINE_QUOTES OFF
+.       if !\\n[#HDRFTR_PLAIN] \{\
+.          if !r #HDRFTR_RIGHT_CAPS .nr #HDRFTR_RIGHT_CAPS 1
+.          if \\n[#HDRFTR_RIGHT_CAPS]=0 \
+.             if !d $HDRFTR_RIGHT_SIZE_CHANGE .HDRFTR_RIGHT_SIZE +0
+.       \}
 .\" +Doctype underlining (if NAMED)
 .       if !r #DOCTYPE_UNDERLINE .nr #DOCTYPE_UNDERLINE 1
 .\" +Quotes and blockquotes
-.       if !r #Q_OFFSET_VALUE \{\
-.          if '\\*[$Q_OFFSET_VALUE]'' .QUOTE_INDENT 1
-.       \}
+.       if !r #Q_OFFSET_VALUE \
+.          if '\\*[$Q_OFFSET_VALUE]'' \
+.             QUOTE_INDENT \\n[#PP_INDENT]u+(\\n[#PP_INDENT]u/2u)
+.       if !d $Q_QUAD .QUOTE_LEFT
+.       if !d $BQUOTE_QUAD        .BLOCKQUOTE_QUAD LEFT
+.       if !r #BQ_OFFSET_VALUE \
+.          if '\\*[$BQ_OFFSET_VALUE]'' \
+.             BLOCKQUOTE_INDENT \\n[#PP_INDENT]u+(\\n[#PP_INDENT]u/2u)
 .\" +Epigraphs
 .       if !r #EPI_OFFSET_VALUE \
 .          if '\\*[$EPI_OFFSET_VALUE]'' .EPIGRAPH_INDENT 2
 .\" +Linebreaks
 .       if !d $LINEBREAK_CHAR .LINEBREAK_CHAR * 3 2p
 .\" +Footnotes
-.       if !d $FN_SIZE_CHANGE    .FOOTNOTE_SIZE +0
-.       if !r #FN_RULE_LENGTH    .FOOTNOTE_RULE_LENGTH 2i
+.       if !d $FN_SIZE_CHANGE .FOOTNOTE_SIZE +0
+.       if !r #FN_RULE_LENGTH .FOOTNOTE_RULE_LENGTH 2i
 .\" +Endnotes
 .       if !r #EN_PP_INDENT .ENDNOTE_PARA_INDENT \\n[#PP_INDENT]
+.       if !r #EN_STRING_CAPS .ENDNOTES_HEADER_CAPS
+.       if !r #EN_STRING_UNDERLINE .nr #EN_STRING_UNDERLINE 2
 .\" +Footnotes
-.       if !r #FN_RULE_ADJ  .FOOTNOTE_RULE_ADJ 6p
+.       if !r #FN_RULE_ADJ .FOOTNOTE_RULE_ADJ 6p
 .\" +Slant stuff
 .       if !r #SLANT_MEANS_SLANT \{\
 .          ie \\n[#UNDERLINE_SLANT]=1 .UNDERLINE_SLANT
 .          el .UNDERLINE_SLANT OFF
 .       \}
+.\" +Bibliography
+.       if !r #BIB_STRING_UNDERLINE .nr #BIB_STRING_UNDERLINE 2
+.       if !r #BIB_STRING_CAPS .BIBLIOGRAPHY_STRING_CAPS
 .    \}
 .\" Defaults for printstyle TYPESET
 .    if \\n[#PRINT_STYLE]=2 \{\
@@ -5710,6 +6068,34 @@ y\R'#DESCENDER \\n[.cdp]'
 .       \}
 .       if !d $COVER_TITLE_FT .COVER_TITLE_FONT B
 .       if !d $COVER_TITLE_SIZE_CHANGE .COVER_TITLE_SIZE +3.5
+.\" (doctitle)
+.       if !d $COVER_DOCTITLE_FAM \{\
+.          ie !d $DOC_COVER_FAM .COVER_DOCTITLE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_DOCTITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_DOCTITLE_FT          .COVER_DOCTITLE_FONT B
+.       if !d $COVER_DOCTITLE_SIZE_CHANGE .COVER_DOCTITLE_SIZE +3.5
+.\" (covertitle)
+.       if !d $COVER_COVERTITLE_FAM \{\
+.          ie !d $COVER_FAM .COVER_COVERTITLE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_COVERTITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_COVERTITLE_FT .COVER_COVERTITLE_FONT B
+.       if !d $COVER_COVERTITLE_SIZE_CHANGE .COVER_COVERTITLE_SIZE +3.5
+.\" (doc_covertitle)
+.       if !d $COVER_DOC_COVERTITLE_FAM \{\
+.          ie !d $COVER_FAM .COVER_DOC_COVERTITLE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_DOC_COVERTITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_DOC_COVERTITLE_FT .COVER_DOC_COVERTITLE_FONT B
+.       if !d $COVER_DOC_COVERTITLE_SIZE_CHANGE .COVER_DOC_COVERTITLE_SIZE +3.5
+.\" (chapter)
+.       if !d $COVER_CHAPTER_FAM \{\
+.          ie !d $COVER_FAM .COVER_CHAPTER_FAMILY \\*[$DOC_FAM]
+.          el .COVER_CHAPTER_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_CHAPTER_FT .COVER_CHAPTER_FONT B
+.       if !d $COVER_CHAPTER_SIZE_CHANGE .COVER_CHAPTER_SIZE +3.5
 .\" (chapter title)
 .       if !d $COVER_CHAPTER_TITLE_FAM \{\
 .          ie !d $COVER_FAM .COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM]
@@ -5725,6 +6111,12 @@ y\R'#DESCENDER \\n[.cdp]'
 .       if !d $COVER_SUBTITLE_FT .COVER_SUBTITLE_FONT R
 .       if !d $COVER_SUBTITLE_SIZE_CHANGE .COVER_SUBTITLE_SIZE +0
 .\" (attribution and author[s])
+.       if !d $COVER_ATTRIBUTE_FAM \{\
+.          ie !d $COVER_FAM .COVER_ATTRIBUTE_FAMILY \\*[$DOC_FAM]
+.          el .COVER_ATTRIBUTE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $COVER_ATTRIBUTE_FT .COVER_ATTRIBUTE_FONT I
+.       if !d $COVER_ATTRIBUTE_SIZE_CHANGE .COVER_ATTRIBUTE_SIZE +0
 .       if !d $COVER_AUTHOR_FAM \{\
 .          ie !d $COVER_FAM .COVER_AUTHOR_FAMILY \\*[$DOC_FAM]
 .          el .COVER_AUTHOR_FAMILY \\*[$COVER_FAM]
@@ -5749,7 +6141,7 @@ y\R'#DESCENDER \\n[.cdp]'
 .       if !d $COVER_MISC_FAM         .COVER_MISC_FAMILY \\*[$DOC_FAM]
 .       if !d $COVER_MISC_FT          .COVER_MISC_FONT R
 .       if !d $COVER_MISC_SIZE_CHANGE .COVER_MISC_SIZE -2
-.       if !r #COVER_MISC_AUTOLEAD    .COVER_MISC_AUTOLEAD 2
+.       if !r #COVER_MISC_LEAD        .COVER_MISC_LEAD 14.5
 .\" +Doc cover
 .       if !d $DOC_COVER_LEAD_ADJ .DOC_COVER_LEAD +0
 .       if !d $DOC_COVER_FAM      .DOC_COVER_FAMILY \\*[$DOC_FAM]
@@ -5760,6 +6152,34 @@ y\R'#DESCENDER \\n[.cdp]'
 .       \}
 .       if !d $DOC_COVER_TITLE_FT          .DOC_COVER_TITLE_FONT B
 .       if !d $DOC_COVER_TITLE_SIZE_CHANGE .DOC_COVER_TITLE_SIZE +3.5
+.\" (doctitle)
+.       if !d $DOC_COVER_DOCTITLE_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_DOCTITLE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_DOCTITLE_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_DOCTITLE_FT          .DOC_COVER_DOCTITLE_FONT B
+.       if !d $DOC_COVER_DOCTITLE_SIZE_CHANGE .DOC_COVER_DOCTITLE_SIZE +3.5
+.\" (covertitle)
+.       if !d $DOC_COVER_COVERTITLE_FAM \{\
+.          ie !d $COVER_FAM .DOC_COVER_COVERTITLE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_COVERTITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_COVERTITLE_FT .DOC_COVER_COVERTITLE_FONT B
+.       if !d $DOC_COVER_COVERTITLE_SIZE_CHANGE .DOC_COVER_COVERTITLE_SIZE +3.5
+.\" (doc_covertitle)
+.       if !d $DOC_COVER_DOC_COVERTITLE_FAM \{\
+.          ie !d $COVER_FAM .DOC_COVER_DOC_COVERTITLE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_DOC_COVERTITLE_FAMILY \\*[$COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_DOC_COVERTITLE_FT .DOC_COVER_DOC_COVERTITLE_FONT B
+.       if !d $DOC_COVER_DOC_COVERTITLE_SIZE_CHANGE .DOC_COVER_DOC_COVERTITLE_SIZE +3.5
+.\" (chapter)
+.       if !d $DOC_COVER_CHAPTER_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_CHAPTER_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_CHAPTER_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_CHAPTER_FT          .DOC_COVER_CHAPTER_FONT B
+.       if !d $DOC_COVER_CHAPTER_SIZE_CHANGE .DOC_COVER_CHAPTER_SIZE +3.5
 .\" (chapter title)
 .       if !d $DOC_COVER_CHAPTER_TITLE_FAM \{\
 .          ie !d $DOC_COVER_FAM .DOC_COVER_CHAPTER_TITLE_FAMILY \\*[$DOC_FAM]
@@ -5775,6 +6195,12 @@ y\R'#DESCENDER \\n[.cdp]'
 .       if !d $DOC_COVER_SUBTITLE_FT .DOC_COVER_SUBTITLE_FONT R
 .       if !d $DOC_COVER_SUBTITLE_SIZE_CHANGE .DOC_COVER_SUBTITLE_SIZE +0
 .\" (attribution and author[s])
+.       if !d $DOC_COVER_ATTRIBUTE_FAM \{\
+.          ie !d $DOC_COVER_FAM .DOC_COVER_ATTRIBUTE_FAMILY \\*[$DOC_FAM]
+.          el .DOC_COVER_ATTRIBUTE_FAMILY \\*[$DOC_COVER_FAM]
+.       \}
+.       if !d $DOC_COVER_ATTRIBUTE_FT .DOC_COVER_ATTRIBUTE_FONT I
+.       if !d $DOC_COVER_ATTRIBUTE_SIZE_CHANGE .DOC_COVER_ATTRIBUTE_SIZE +0
 .       if !d $DOC_COVER_AUTHOR_FAM \{\
 .          ie !d $DOC_COVER_FAM .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_FAM]
 .          el .DOC_COVER_AUTHOR_FAMILY \\*[$DOC_COVER_FAM]
@@ -5799,7 +6225,7 @@ y\R'#DESCENDER \\n[.cdp]'
 .       if !d $DOC_COVER_MISC_FAM         .DOC_COVER_MISC_FAMILY \\*[$DOC_FAM]
 .       if !d $DOC_COVER_MISC_FT          .DOC_COVER_MISC_FONT R
 .       if !d $DOC_COVER_MISC_SIZE_CHANGE .DOC_COVER_MISC_SIZE -2
-.       if !r #DOC_COVER_MISC_AUTOLEAD    .DOC_COVER_MISC_AUTOLEAD 2
+.       if !r #DOC_COVER_MISC_LEAD        .DOC_COVER_MISC_LEAD 14.5
 .\" +Docheader
 .       if !d $DOCHEADER_FAM .DOCHEADER_FAMILY \\*[$DOC_FAM]
 .       if !d $TITLE_FAM \{\
@@ -5807,10 +6233,17 @@ y\R'#DESCENDER \\n[.cdp]'
 .          el .TITLE_FAMILY \\*[$DOCHEADER_FAM]
 .       \}
 .       if !d $TITLE_FT .TITLE_FONT B
+.\" Title size change
 .       if !d $TITLE_SIZE_CHANGE \{\
 .          ie \\n[#DOC_TYPE]=2 .TITLE_SIZE +4
 .          el .TITLE_SIZE +3.5
 .       \}
+.       if !d $CHAPTER_FAM \{\
+.          ie !d $DOCHEADER_FAM .CHAPTER_FAMILY \\*[$DOC_FAM]
+.          el .CHAPTER_FAMILY \\*[$DOCHEADER_FAM]
+.       \}
+.       if !d $CHAPTER_FT .CHAPTER_FONT B
+.       if !d $CHAPTER_SIZE_CHANGE .CHAPTER_SIZE +4
 .       if !d $CHAPTER_TITLE_FAM \{\
 .          ie !d $DOCHEADER_FAM .CHAPTER_TITLE_FAMILY \\*[$DOC_FAM]
 .          el .CHAPTER_TITLE_FAMILY \\*[$DOCHEADER_FAM]
@@ -5823,6 +6256,12 @@ y\R'#DESCENDER \\n[.cdp]'
 .       \}
 .       if !d $SUBTITLE_FT          .SUBTITLE_FONT R
 .       if !d $SUBTITLE_SIZE_CHANGE .SUBTITLE_SIZE +0
+.       if !d $ATTRIBUTE_FAM \{\
+.          ie !d $DOCHEADER_FAM .ATTRIBUTE_FAMILY \\*[$DOC_FAM]
+.          el .ATTRIBUTE_FAMILY \\*[$DOCHEADER_FAM]
+.       \}
+.       if !d $ATTRIBUTE_FT          .ATTRIBUTE_FONT I
+.       if !d $ATTRIBUTE_SIZE_CHANGE .ATTRIBUTE_SIZE +0
 .       if !d $AUTHOR_FAM \{\
 .          ie !d $DOCHEADER_FAM .AUTHOR_FAMILY \\*[$DOC_FAM]
 .          el .AUTHOR_FAMILY \\*[$DOCHEADER_FAM]
@@ -5833,37 +6272,66 @@ y\R'#DESCENDER \\n[.cdp]'
 .          ie !d $DOCHEADER_FAM .DOCTYPE_FAMILY \\*[$DOC_FAM]
 .          el .DOCTYPE_FAMILY \\*[$DOCHEADER_FAM]
 .       \}
-.       if !d $DOCTYPE_FT           .DOCTYPE_FONT BI
-.       if !d $DOCTYPE_SIZE_CHANGE  .DOCTYPE_SIZE +3
-.       if !r #DOCTYPE_UNDERLINE    .DOCTYPE_UNDERLINE
+.       if !d $DOCTYPE_FT          .DOCTYPE_FONT BI
+.       if !d $DOCTYPE_SIZE_CHANGE .DOCTYPE_SIZE +3
 .\" +Headers and footers
-.       if !d $HDRFTR_LEFT_FAM              .HDRFTR_LEFT_FAMILY \\*[$DOC_FAM]
-.       if !d $HDRFTR_LEFT_FT               .HDRFTR_LEFT_FONT R
-.       if \\n[#HDRFTR_LEFT_CAPS] \
-.          if !d $HDRFTR_LEFT_SIZE_CHANGE   .HDRFTR_LEFT_SIZE -2
-.       if !d $HDRFTR_LEFT_SIZE_CHANGE      .HDRFTR_LEFT_SIZE -.5
-.       if !d $HDRFTR_CENTER_FAM            .HDRFTR_CENTER_FAMILY \\*[$DOC_FAM]
-.       if !d $HDRFTR_CENTER_FT             .HDRFTR_CENTER_FONT I
-.       if \\n[#HDRFTR_CENTER_CAPS] \
-.          if !d $HDRFTR_CENTER_SIZE_CHANGE .HDRFTR_CENTER_SIZE -2
-.       if !d $HDRFTR_CENTER_SIZE_CHANGE    .HDRFTR_CENTER_SIZE -.5
-.       if !d $HDRFTR_RIGHT_FAM             .HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM]
-.       if !d $HDRFTR_RIGHT_FT              .HDRFTR_RIGHT_FONT R
-.       if \\n[#HDRFTR_RIGHT_CAPS] \
-.          if !d $HDRFTR_RIGHT_SIZE_CHANGE  .HDRFTR_RIGHT_SIZE -2
-.       if !d $HDRFTR_RIGHT_SIZE_CHANGE     .HDRFTR_RIGHT_SIZE -.5
+.       if !\\n[#HDRFTR_PLAIN] \{\
+.          if !d $HDRFTR_LEFT_FAM \
+.             HDRFTR_LEFT_FAMILY \\*[$DOC_FAM]
+.          if !d $HDRFTR_LEFT_FT \
+.              HDRFTR_LEFT_FONT R
+.          if \\n[#HDRFTR_LEFT_CAPS] \
+.             if !d $HDRFTR_LEFT_SIZE_CHANGE \
+.                HDRFTR_LEFT_SIZE -2
+.          if !d $HDRFTR_LEFT_SIZE_CHANGE \
+.              HDRFTR_LEFT_SIZE -.5
+.          if !d $HDRFTR_CENTER_FAM \
+.              HDRFTR_CENTER_FAMILY \\*[$DOC_FAM]
+.          if !d $HDRFTR_CENTER_FT .HDRFTR_CENTER_FONT I
+.          if \\n[#HDRFTR_CENTER_CAPS] \
+.             if !d $HDRFTR_CENTER_SIZE_CHANGE \
+.                HDRFTR_CENTER_SIZE -2
+.          if !d $HDRFTR_CENTER_SIZE_CHANGE \
+.              HDRFTR_CENTER_SIZE -.5
+.          if !d $HDRFTR_RIGHT_FAM \
+.             HDRFTR_RIGHT_FAMILY \\*[$DOC_FAM]
+.          if !d $HDRFTR_RIGHT_FT .HDRFTR_RIGHT_FONT R
+.          ie !r #HDRFTR_RIGHT_CAPS \{\
+.             nr #HDRFTR_RIGHT_CAPS 1
+.             if !d $HDRFTR_RIGHT_SIZE_CHANGE \
+.                HDRFTR_RIGHT_SIZE -2
+.          \}
+.          el \{\
+.             if \\n[#HDRFTR_RIGHT_CAPS]=0 \
+.                if !d $HDRFTR_RIGHT_SIZE_CHANGE \
+.                   HDRFTR_RIGHT_SIZE -.5
+.          \}
+.          ie !\\n[#HDRFTR_RIGHT_SMALLCAPS] \{\
+.             if \\n[#HDRFTR_RIGHT_CAPS] \
+.                if !d $HDRFTR_RIGHT_SIZE_CHANGE \
+.                   HDRFTR_RIGHT_SIZE -2
+.          \}
+.          el \{\
+.             nr #SKIP_CAPS_SMALLCAPS_WARNING 1
+.             if \\n[#HDRFTR_RIGHT_CAPS] .HDRFTR_RIGHT_CAPS OFF
+.          \}
+.          if !d $HDRFTR_RIGHT_SIZE_CHANGE .HDRFTR_RIGHT_SIZE -.5
+.       \}
 .\" +Quotes
 .       if !d $QUOTE_FAM         .QUOTE_FAMILY \\*[$DOC_FAM]
 .       if !d $QUOTE_FT          .QUOTE_FONT I
-.       if !d $QUOTE_SIZE_CHANGE .QUOTE_SIZE+0
+.       if !d $QUOTE_SIZE_CHANGE .QUOTE_SIZE +0
 .       if !r #Q_OFFSET_VALUE \
 .          if '\\*[$Q_OFFSET_VALUE]'' .QUOTE_INDENT 3
+.       if !d $Q_QUAD .QUOTE_LEFT
 .\" +Blockquotes
 .\"  Note: the leading for quotes and blockquotes is set after .DEFAULTS in START
 .       if !d $BQUOTE_FAM         .BLOCKQUOTE_FAMILY \\*[$DOC_FAM]
 .       if !d $BQUOTE_FT          .BLOCKQUOTE_FONT R
 .       if !d $BQUOTE_SIZE_CHANGE .BLOCKQUOTE_SIZE -1
 .       if !d $BQUOTE_QUAD        .BLOCKQUOTE_QUAD LEFT
+.       if !r #BQ_OFFSET_VALUE \
+.          if '\\*[$BQ_OFFSET_VALUE]'' .BLOCKQUOTE_INDENT 3
 .\" +Epigraphs
 .       if !d $EPI_FAM         .EPIGRAPH_FAMILY \\*[$DOC_FAM]
 .       if !d $EPI_FT          .EPIGRAPH_FONT R
@@ -5882,8 +6350,8 @@ y\R'#DESCENDER \\n[.cdp]'
 .       if !r #FN_AUTOLEAD    .FOOTNOTE_AUTOLEAD 2
 .\" +Endnotes
 .       if !r #EN_PS                 .ENDNOTE_PT_SIZE (\\n[#DOC_PT_SIZE]u)
-.       if !d $EN_STRING_FT          .ENDNOTE_STRING_FONT B
-.       if !d $EN_STRING_SIZE_CHANGE .ENDNOTE_STRING_SIZE +1
+.       if !d $EN_STRING_FT          .ENDNOTES_HEADER_FONT B
+.       if !d $EN_STRING_SIZE_CHANGE .ENDNOTES_HEADER_SIZE +3.5
 .       if !d $EN_TITLE_FT           .ENDNOTE_TITLE_FONT B
 .       if !d $EN_TITLE_SIZE_CHANGE  .ENDNOTE_TITLE_SIZE +0
 .       if !d $EN_NUMBER_FT          .ENDNOTE_NUMBER_FONT B
@@ -5896,17 +6364,18 @@ y\R'#DESCENDER \\n[.cdp]'
 .       if !r #BIB_LIST               .BIBLIOGRAPHY_TYPE PLAIN
 .       if !r #BIB_PS                 .BIBLIOGRAPHY_PT_SIZE (\\n[#DOC_PT_SIZE]u)
 .       if !d $BIB_STRING_FT          .BIBLIOGRAPHY_STRING_FONT B
-.       if !d $BIB_STRING_SIZE_CHANGE .BIBLIOGRAPHY_STRING_SIZE +1
+.       if !d $BIB_STRING_SIZE_CHANGE .BIBLIOGRAPHY_STRING_SIZE +3.5
 .\" +Table of contents
 .       if !d $TOC_FAM                .TOC_FAMILY \\*[$DOC_FAM]
 .       if !r #TOC_PS                 .TOC_PT_SIZE (\\n[#DOC_PT_SIZE]u)
 .       if '\\*[$TOC_LEAD]''          .TOC_LEAD \\n[#DOC@LEAD]u ADJUST
 .       if !d $TOC_HEADER_FAM         .TOC_HEADER_FAMILY \\*[$TOC_FAM]
-.       if !d $TOC_HEADER_SIZE_CHANGE .TOC_HEADER_SIZE +4
+.       if !d $TOC_HEADER_SIZE_CHANGE .TOC_HEADER_SIZE +3.5
 .       if !d $TOC_HEADER_FT          .TOC_HEADER_FONT B
 .       if !d $TOC_PN_FAM             .TOC_PN_FAMILY \\*[$TOC_FAM]
 .       if !d $TOC_PN_FT              .TOC_PN_FONT R
 .       if !d $TOC_PN_SIZE_CHANGE     .TOC_PN_SIZE +0
+.       if !d $TOC_TITLE_FAM          .TOC_TITLE_FAMILY \\*[$TOC_FAM]
 .    \}
 .\" +Refer support
 .    if !r #EN_REF .nr #FN_REF 1
@@ -5951,53 +6420,55 @@ y\R'#DESCENDER \\n[.cdp]'
 .       nr #AUTO_LEAD 1
 .       nr #AUTOLEAD_VALUE  \\n[#SAVED_AUTOLEAD_VALUE]
 .    \}
-.    ie !\\n[#COLLATE] \{\
-.\" DOC_LEAD adjusted (or not) here
-.       TRAPS
-.       if \\n[#REMOVE_ADJ] .DOC_LEAD \\n[#DOC_LEAD]u-\\n[#DOC_LEAD_ADJ]u
+.    if !\\n[#SKIP_TRAPS] .TRAPS
+.    rr #SKIP_TRAPS
+.    if \\n[#REMOVE_ADJ] .DOC_LEAD \\n[#DOC_LEAD]u-\\n[#DOC_LEAD_ADJ]u
+.    if (\\n[#FOOTER_MARGIN]+\\n[.v]>=\\n[#B_MARGIN]) \{\
+.       tm1 "[mom]: Your chosen bottom margin for running text is too close to the footer margin.
+.       tm1 "       No footers or bottom-of-page page numbers will be printed.
+.       tm1 "       Please reset B_MARGIN or FOOTER_MARGIN to allow enough space.
+.       tm1 "       If no footers or bottom-of-page page numbers are required,
+.       tm1 "       invoke .FOOTER_MARGIN 0 before .START
+.       nr #SKIP_FOOTER 1
+.    \}
 .\" Endnote, bibliography and toc leading
-.       nr #OK_PROCESS_LEAD 1
-.       nr #RESTORE_DOC_LEAD \\n[.v]
-.       nr #RESTORE_B_MARGIN \\n[#B_MARGIN]
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          ie \\n[#SINGLE_SPACE] \{\
-.             ENDNOTE_LEAD      12 ADJUST
-.             BIBLIOGRAPHY_LEAD 12 ADJUST
-.          \}
-.          el \{\
-.             ie \\n[#EN_SINGLESPACE] .ENDNOTE_LEAD 12 ADJUST
-.             el .ENDNOTE_LEAD 24 ADJUST
-.             ie \\n[#BIB_SINGLESPACE] .BIBLIOGRAPHY_LEAD 12 ADJUST
-.             el .BIBLIOGRAPHY_LEAD 24 ADJUST
-.          \}
+.    nr #OK_PROCESS_LEAD 1
+.    nr #RESTORE_DOC_LEAD \\n[.v]
+.    nr #RESTORE_B_MARGIN \\n[#B_MARGIN]
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       ie \\n[#SINGLE_SPACE] \{\
+.          ENDNOTE_LEAD      12 ADJUST
+.          BIBLIOGRAPHY_LEAD 12 ADJUST
 .       \}
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          ie !d $EN_LEAD  .ENDNOTE_LEAD \\n[#UNADJUSTED_DOC_LEAD]u ADJUST
-.          el .ENDNOTE_LEAD \\*[$EN_LEAD] \\*[$ADJUST_EN_LEAD]
-.          ie !d $BIB_LEAD .BIBLIOGRAPHY_LEAD \\n[#UNADJUSTED_DOC_LEAD]u ADJUST
-.          el .BIBLIOGRAPHY_LEAD \\*[$BIB_LEAD] \\*[$ADJUST_BIB_LEAD]
-.          ie !d $TOC_LEAD .TOC_LEAD \\n[#UNADJUSTED_DOC_LEAD]u \\*[$ADJUST_TOC_LEAD]
-.          el .TOC_LEAD \\*[$TOC_LEAD] \\*[$ADJUST_TOC_LEAD]
-.       \}
-.       ie !d $BIB_SPACE .BIBLIOGRAPHY_SPACING 0
 .       el \{\
-.          if \\n[#DEFER_BIB_SPACING]=1 \{\
-.             BIBLIOGRAPHY_SPACING \\*[$BIB_SPACE]
-.             rr #DEFER_BIB_SPACING
-.          \}
+.          ie \\n[#EN_SINGLESPACE] .ENDNOTE_LEAD 12 ADJUST
+.          el .ENDNOTE_LEAD 24 ADJUST
+.          ie \\n[#BIB_SINGLESPACE] .BIBLIOGRAPHY_LEAD 12 ADJUST
+.          el .BIBLIOGRAPHY_LEAD 24 ADJUST
 .       \}
-.       nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
-.       nr #B_MARGIN \\n[#RESTORE_B_MARGIN]
-.       vs \\n[#DOC_LEAD]u
 .    \}
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       ie !d $EN_LEAD  .ENDNOTE_LEAD \\n[#UNADJUSTED_DOC_LEAD]u ADJUST
+.       el .ENDNOTE_LEAD \\*[$EN_LEAD] \\*[$ADJUST_EN_LEAD]
+.       ie !d $BIB_LEAD .BIBLIOGRAPHY_LEAD \\n[#UNADJUSTED_DOC_LEAD]u ADJUST
+.       el .BIBLIOGRAPHY_LEAD \\*[$BIB_LEAD] \\*[$ADJUST_BIB_LEAD]
+.       ie !d $TOC_LEAD .TOC_LEAD \\n[#UNADJUSTED_DOC_LEAD]u \\*[$ADJUST_TOC_LEAD]
+.       el .TOC_LEAD \\*[$TOC_LEAD] \\*[$ADJUST_TOC_LEAD]
+.    \}
+.    ie !d $BIB_SPACE .BIBLIOGRAPHY_SPACING 0
 .    el \{\
-.       if \\n[#COLLATE] \{\
-.          if !\\n[#PRINT_STYLE]=1 \{\
-.             if \\n[#RERUN_TRAPS] \{\
-.                TRAPS
-.                rr #RERUN_TRAPS
-.             \}
-.          \}
+.       if \\n[#DEFER_BIB_SPACING]=1 \{\
+.          BIBLIOGRAPHY_SPACING \\*[$BIB_SPACE]
+.          rr #DEFER_BIB_SPACING
+.       \}
+.    \}
+.    nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
+.    nr #B_MARGIN \\n[#RESTORE_B_MARGIN]
+.    vs \\n[#DOC_LEAD]u
+.    if !\\n[#PRINT_STYLE]=1 \{\
+.       if \\n[#RERUN_TRAPS] \{\
+.          TRAPS
+.          rr #RERUN_TRAPS
 .       \}
 .    \}
 .\" Set default heading and toc-entry family if not done already
@@ -6009,9 +6480,9 @@ y\R'#DESCENDER \\n[.cdp]'
 .       if '\\*[$HEAD_\\n[#HD_LEVEL]_BASELINE_ADJ]'' \
 .           ds $HEAD_\\n[#HD_LEVEL]_BASELINE_ADJ \\n[.v]/10
 .       if '\\*[$TOC_HEAD_\\n[#HD_LEVEL]_FAM]'' \
-.           ds $TOC_HEAD_\\n[#HD_LEVEL]_FAM \\*[$DOC_FAM]
+.           ds $TOC_HEAD_\\n[#HD_LEVEL]_FAM \\*[$TOC_FAM]
 .    \}
-.    if '\\*[$TOC_TITLE_FAM]'' .ds $TOC_TITLE_FAM \\*[$DOC_FAM]
+.    if '\\*[$TOC_TITLE_FAM]'' .TOC_TITLE_FAMILY \\*[$DOC_FAM]
 .\" Re-run MNinit to capture strings and registers set in DEFAULTS.
 .    if !'\\*[$MN-arg1]'' \{\
 .       MNinit \
@@ -6028,314 +6499,394 @@ y\R'#DESCENDER \\n[.cdp]'
 .    \}
 .END
 \#
-\# ====================================================================
-\#
-\# +++START THE DOCUMENT+++
-\#
-\# THE START MACRO
-\# ---------------
-\# *Arguments:
-\#   <none>
-\# *Function:
-\#   Reads in default document style parameters and any parameters
-\#   the user has changed before issuing START.
-\#   Using the information gathered in the opening macros,
-\#   prints appropriate title (or chapter #), subtitle, author
-\#   and document type (if appropriate).
-\# *Notes:
-\#   The .PRINT \& (zero-width character) is required to get the
-\#   subsequent .sp request to work as advertised.
-\#
-\#   The overall document line length, family, and point-size
-\#   are stored in #DOC_L_LENGTH, $DOC_FAM, and #DOC_PT_SIZE for
-\#   use in the HEADER and FOOTER macros.
+\# =================================================================
 \#
-\#  First, define some strings for point sizes
-\#
-\# Doc cover
-\#
-.ds $DOC_COVER_AUTHOR_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_AUTHOR_SIZE_CHANGE]
-.ds $DOC_COVER_CHAPTER_TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_CHAPTER_TITLE_SIZE_CHANGE]
-.ds $DOC_COVER_COPYRIGHT_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_COPYRIGHT_SIZE_CHANGE]
-.ds $DOC_COVER_DOCTYPE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_DOCTYPE_SIZE_CHANGE]
-.ds $DOC_COVER_MISC_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_MISC_SIZE_CHANGE]
-.ds $DOC_COVER_SUBTITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_SUBTITLE_SIZE_CHANGE]
-.ds $DOC_COVER_TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOC_COVER_TITLE_SIZE_CHANGE]
-\# Cover
-.ds $COVER_AUTHOR_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_AUTHOR_SIZE_CHANGE]
-.ds $COVER_CHAPTER_TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_CHAPTER_TITLE_SIZE_CHANGE]
-.ds $COVER_COPYRIGHT_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_COPYRIGHT_SIZE_CHANGE]
-.ds $COVER_DOCTYPE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_DOCTYPE_SIZE_CHANGE]
-.ds $COVER_MISC_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_MISC_SIZE_CHANGE]
-.ds $COVER_SUBTITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_SUBTITLE_SIZE_CHANGE]
-.ds $COVER_TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COVER_TITLE_SIZE_CHANGE]
-\# Docheader
-.ds $AUTHOR_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$AUTHOR_SIZE_CHANGE]
-.ds $CHAPTER_TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$CHAPTER_TITLE_SIZE_CHANGE]
-.ds $COPYRIGHT_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$COPYRIGHT_SIZE_CHANGE]
-.ds $DOCTYPE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$DOCTYPE_SIZE_CHANGE]
-.ds $SUBTITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$SUBTITLE_SIZE_CHANGE]
-.ds $TITLE_PT_SIZE \
-    \\n[#DOC_PT_SIZE]u\\*[$TITLE_SIZE_CHANGE]
-\#
-\# Next, some utility macros for various routines to prevent repetition
+\# Macros and aliases needed for doccover, cover, and docheader in
+\# START.
 \#
 .MAC DOC_HEADER_QUAD END
 .    if '\\$0'DOC_HEADER_QUAD' .ds $CALLING_MACRO DOCHEADER
 .    if '\\$0'COVER_H_POS'     .ds $CALLING_MACRO COVER
 .    if '\\$0'DOC_COVER_H_POS' .ds $CALLING_MACRO DOC_COVER
+.    substring $\\*[$CALLING_MACRO]_QUAD 0 0
 .    ie !'\\*[$\\*[$CALLING_MACRO]_QUAD]'' \{\
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'L'      .LEFT
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'LEFT'   .LEFT
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'R'      .RIGHT
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'RIGHT'  .RIGHT
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'C'      .RIGHT
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'CENTER' .CENTER
-.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'CENTRE' .CENTER
+.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'L' .LEFT
+.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'C' .CENTER
+.       if '\\*[$\\*[$CALLING_MACRO]_QUAD]'C' .RIGHT
 .    \}
 .    el .CENTER
 .END
-\#
-\# Aliases for DOC_HEADER_QUAD
-\#
-.ALIAS COVER_H_POS      DOC_HEADER_QUAD
-.ALIAS DOC_COVER_H_POS  DOC_HEADER_QUAD
-\#
-.MAC PRINT_AUTHORS END
-.    ie r#DOING_COVER \{\
-.       if \\n[#DOC_COVER]=1 \{\
-.          ie !'\\*[$AUTHOR_DOCCOVER_1]'' \{\
-.             nr #AUTHORS \\n[#AUTHOR_DOCCOVER_NUM]
-.             nr #NEXT_AUTHOR 0 1
-.             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \
-.                   PRINT \
-\m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_DOCCOVER_\\n+[#NEXT_AUTHOR]]\m[]
-.                el .PRINT \\*[$AUTHOR_DOCCOVER_\\n+[#NEXT_AUTHOR]]
-.             \}
-.          \}
-.          el \{\
-.             nr #AUTHORS \\n[#AUTHOR_NUM]
-.             nr #NEXT_AUTHOR 0 1
-.             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                ie \\n[#DOC_COVER_AUTHOR_COLOR]=1 \
-.                   PRINT \
-\m[\\*[$DOC_COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
-.                el .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
-.             \}
-.          \}
-.          return
+.
+.ALIAS COVER_H_POS     DOC_HEADER_QUAD
+.ALIAS DOC_COVER_H_POS DOC_HEADER_QUAD
+\#
+.MAC DO_TITLE_OR_AUTHOR END
+.    ie '\\$0'DO_AUTHORS' .ds $TTL_AUTH AUTHOR
+.    el .ds $TTL_AUTH TITLE
+.    if !'\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_1]'' \{\
+.       if '\\$0'DO_SUBTITLE' \{\
+.          if '\\*[$PRFX]'\\*[DOC_]COVER_SUB' \{\
+.             ds $PRFX SUB
+.             nr #\\*[DOC_]COVER_SUB 1
+.          \}
+.       \}
+.       if !\\n[#PRINT_STYLE]=1 \{\
+\#.          if (\\n[#COVER]=1):(\\n[#DOC_COVER]=1) \
+\#.             rn $PRFX $PRFX_SAVED
+.          fam  \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_FAM]
+.          ft   \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_FT]
+.          ps \
+\\n[#DOC_PT_SIZE]u\\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_SIZE_CHANGE]
+.          if '\\*[$COVER_TYPE]'' .vs \\n[#DOCHEADER_LEAD]u
+.          if !'\\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_LEAD]'' \{\
+.             vs \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_LEAD]
+.             if \\n[#DOCHEADER] .sp |\\n[#T_MARGIN]u-1v
+.          \}
+.          if \\n[#CHAPTER+TITLE]=1 .ALD \\n[.v]u/4u \" A little space before the chapter title
+.          if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_COLOR]=1 \
+.             COLOR \\*[$\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_COLOR]
+.          if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_CAPS]=1 .CAPS
+.          if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_SMALLCAPS]=1 .SMALLCAPS
+\#.          if (\\n[#COVER]=1):(\\n[#DOC_COVER]=1) \
+\#.             rn $PRFX_SAVED $PRFX
+.       \}
+.       if \\n[#\\*[DOC_]COVER_SUB] \{\
+.          rr #\\*[DOC_]COVER_SUB
+.          ds $PRFX \\*[DOC_]COVER_SUB
+.          ds $SAVED_COVER_TYPE \\*[$COVER_TYPE]
+.          rm $COVER_TYPE
 .       \}
-.       if \\n[#COVER]=1 \{\
-.          ie !'\\*[$AUTHOR_COVER_1]'' \{\
-.             nr #AUTHORS \\n[#AUTHOR_COVER_NUM]
-.             nr #NEXT_AUTHOR 0 1
-.             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                ie \\n[#COVER_AUTHOR_COLOR]=1 \
-.                   PRINT \
-\m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_COVER_\\n+[#NEXT_AUTHOR]]\m[]
-.                el .PRINT \\*[$AUTHOR_COVER_\\n+[#NEXT_AUTHOR]]
+.       nr #ARG_NUM 0 1
+.       while \\n[#\\*[$PRFX]\\*[$TTL_AUTH]_NUM]>=\\n+[#ARG_NUM] \{\
+.          ie \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_UNDERLINE] \{\
+.             ds $TITLE_TYPE \\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]
+.             ie \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_UNDERLINE]=2 \{\
+.                ie !\\n[#PRINT_STYLE]=1 \
+.                   UNDERSCORE2 \\*[$\\*[$PRFX]\\*[$TTL_AUTH]_UNDERLINE_GAP] \
+\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_RULE_GAP] \
+"\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
+.                el .UNDERSCORE "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
+.             \}
+.             el \{\
+.                ie !\\n[#PRINT_STYLE]=1 \
+.                   UNDERSCORE "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
+.                el .PRINT "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
 .             \}
 .          \}
 .          el \{\
-.             nr #AUTHORS \\n[#AUTHOR_NUM]
-.             nr #NEXT_AUTHOR 0 1
-.             while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                ie \\n[#COVER_AUTHOR_COLOR]=1 \
-.                   PRINT \
-\m[\\*[$COVER_AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
-.                el .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
-.             \}
+.             PRINT "\\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
 .          \}
-.          return
-.       \}
-.    \}
-.    el \{\
-.       nr #AUTHORS \\n[#AUTHOR_NUM]
-.       nr #NEXT_AUTHOR 0 1
-.       while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.          ie \\n[#AUTHOR_COLOR]=1 \
-.             PRINT \m[\\*[$AUTHOR_COLOR]]\\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]\m[]
-.          el .PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
+.          if \\n[#ARG_NUM]>1 .as PDF_BM " \"
+.          as PDF_BM \\*[$\\*[$PRFX]\\*[$TTL_AUTH]_\\n[#ARG_NUM]]
 .       \}
+.       rm $TITLE_TYPE
+.       if \\n[#PRINT_STYLE]=2 .vs
+.       if \\n[#\\*[$COVER_TYPE]\\*[$PRFX]\\*[$TTL_AUTH]_COLOR]=1 \
+.          gcolor
+.       SMALLCAPS off
+.       CAPS off
 .    \}
+.    if !'\\*[$SAVED_COVER_TYPE]'' \{\
+.      ds $COVER_TYPE \\*[$SAVED_COVER_TYPE]
+.      rm $SAVED_COVER_TYPE
+.   \}
+.END
+.
+.ALIAS DO_TITLE    DO_TITLE_OR_AUTHOR
+.ALIAS DO_SUBTITLE DO_TITLE_OR_AUTHOR
+.ALIAS DO_AUTHORS  DO_TITLE_OR_AUTHOR
+\#
+.MAC DO_CHAPTER END
+.    fam \\*[$\\*[DOC_]COVER_CHAPTER_FAM]
+.    ft     \\*[$\\*[DOC_]COVER_CHAPTER_FT]
+.    ps \\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_CHAPTER_SIZE_CHANGE]
+.    if \\n[#\\*[DOC_]COVER_CHAPTER_COLOR]=1 \
+.       COLOR \\*[$\\*[DOC_]COVER_CHAPTER_COLOR]
+.    if \\n[#\\*[DOC_]COVER_CHAPTER_CAPS]=1 .CAPS
+.    if \\n[#\\*[DOC_]COVER_CHAPTER_SMALLCAPS]=1 .SMALLCAPS
+.    ie \\n[#\\*[DOC_]COVER_CHAPTER_UNDERLINE] \{\
+.       ds $TITLE_TYPE \\*[$COVER_TYPE]CHAPTER
+.       ie \\n[#\\*[DOC_]COVER_CHAPTER_UNDERLINE]=2 \
+.          UNDERSCORE2 \\*[$\\*[DOC_]COVER_CHAPTER_UNDERLINE_GAP] \
+\\*[$\\*[DOC_]COVER_CHAPTER_RULE_GAP] "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.       el .UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.    \}
+.    el .PRINT "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.    gcolor
+.    SMALLCAPS off
+.    CAPS off
+.END
+.
+.ALIAS DO_TITLE    DO_TITLE_OR_AUTHOR
+.ALIAS DO_SUBTITLE DO_TITLE_OR_AUTHOR
+.ALIAS DO_AUTHORS  DO_TITLE_OR_AUTHOR
+\#
+.MAC DO_CHAPTER END
+.    fam \\*[$\\*[DOC_]COVER_CHAPTER_FAM]
+.    ft     \\*[$\\*[DOC_]COVER_CHAPTER_FT]
+.    ps \\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_CHAPTER_SIZE_CHANGE]
+.    if \\n[#\\*[DOC_]COVER_CHAPTER_COLOR]=1 \
+.       COLOR \\*[$\\*[DOC_]COVER_CHAPTER_COLOR]
+.    if \\n[#\\*[DOC_]COVER_CHAPTER_CAPS]=1 .CAPS
+.    if \\n[#\\*[DOC_]COVER_CHAPTER_SMALLCAPS]=1 .SMALLCAPS
+.    ie \\n[#\\*[DOC_]COVER_CHAPTER_UNDERLINE] \{\
+.       ds $TITLE_TYPE \\*[$COVER_TYPE]CHAPTER
+.       ie \\n[#\\*[DOC_]COVER_CHAPTER_UNDERLINE]=2 \
+.          UNDERSCORE2 \\*[$\\*[DOC_]COVER_CHAPTER_UNDERLINE_GAP] \
+\\*[$\\*[DOC_]COVER_CHAPTER_RULE_GAP] "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.       el .UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.    \}
+.    el .PRINT "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.    gcolor
+.    SMALLCAPS off
+.    CAPS off
+.END
+\#
+\# Spacing adjustments for (doc)cover and docheader elements
+\#
+.MAC _SPACE END
+.   ds $\\$0R \\$1
 .END
+.
+.ds SPACER_TYPE_1 SUBTITLE
+.ds SPACER_TYPE_2 ATTRIBUTE
+.ds SPACER_TYPE_3 AUTHOR
+.ds SPACER_TYPE_4 CHAPTER_TITLE
+.ds SPACER_TYPE_5 DOCTYPE
+.
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=5 \{\
+.   ALIAS \*[SPACER_TYPE_\n[#LOOP]]_SPACE           _SPACE
+.   ALIAS COVER_\*[SPACER_TYPE_\n[#LOOP]]_SPACE     _SPACE
+.   ALIAS DOC_COVER_\*[SPACER_TYPE_\n[#LOOP]]_SPACE _SPACE
+.\}
 \#
 .MAC DEFAULT_DOCHEADER END
+.    nr #DOCHEADER 1
 .    DOC_HEADER_QUAD
-.    if !'\\*[$TITLE_1]'' \{\
-.       FAMILY  \\*[$TITLE_FAM]
-.       FT      \\*[$TITLE_FT]
-.       ps \\*[$TITLE_PT_SIZE]
-.       vs      \\n[#DOCHEADER_LEAD]u
-.       nr #ARG_NUM 0 1
-.       while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.          ie \\n[#TITLE_COLOR]=1 \
-.             PRINT "\m[\\*[$TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
-.          el .PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
-.       \}
-.    \}
+.    vs \\n[#DOCHEADER_LEAD]u
+.    if \\n[#PRINT_STYLE]=2 \
+.       if \\n[#DOCHEADER_COLOR]=1 \
+.          COLOR \\*[$DOCHEADER_COLOR]
+.    DO_TITLE
+.    rr #DOCHEADER
 .    if !'\\*[$SUBTITLE_1]'' \{\
-.       FAMILY  \\*[$SUBTITLE_FAM]
-.       FT      \\*[$SUBTITLE_FT]
-.       ps \\*[$SUBTITLE_PT_SIZE]
-.       nr #ARG_NUM 0 1
-.       while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.          ie \\n[#SUBTITLE_COLOR]=1 \
-.             PRINT "\m[\\*[$SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n[#ARG_NUM]]\m[]
-.          el .PRINT "\\*[$SUBTITLE_\\n[#ARG_NUM]]
+.       ds $PRFX SUB
+.       if !'\\*[$SUBTITLE_SPACER]'' .sp \\*[$SUBTITLE_SPACER]
+.       if \\n[#PRINT_STYLE]=2 \
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             COLOR \\*[$DOCHEADER_COLOR]
+.       DO_SUBTITLE
+.       rm $PRFX
+.    \}
+.    if !\\n[#NO_PRINT_AUTHOR] \{\
+.       if !'\\*[$AUTHOR_1]'' \{\
+.          ie \\n[#PRINT_STYLE]=1 \{\
+.             TYPEWRITER
+.             ie \\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u
+.             el .vs \\n[#DOC_LEAD]u/2u
+.             sp
+.          \}
+.          el .vs \\n[#DOC_LEAD]u\\*[$DOCHEADER_LEAD_ADJ]
+.          if d$ATTRIBUTE_STRING \{\
+.             FAMILY \\*[$ATTRIBUTE_FAM]
+.             FT     \\*[$ATTRIBUTE_FT]
+.             ps \
+\\n[#DOC_PT_SIZE]u\\*[$ATTRIBUTE_SIZE_CHANGE]
+.             if \\n[#DOCHEADER_COLOR]=1 \
+.                COLOR \\*[$DOCHEADER_COLOR]
+.             if \\n[#ATTRIBUTE_COLOR]=1 \
+.                COLOR \\*[$ATTRIBUTE_COLOR]
+.             if \\n[#ATTRIBUTE_CAPS]=1 .CAPS
+.             if !'\\*[$ATTRIBUTE_SPACER]'' \
+.                sp \\*[$ATTRIBUTE_SPACER]
+.             ie \\n[#ATTRIBUTE_UNDERLINE] \{\
+.                ds $TITLE_TYPE ATTRIBUTE
+.                ie \\n[#ATTRIBUTE_UNDERLINE]=2 \
+.                   UNDERSCORE2 \\*[$ATTRIBUTE_UNDERLINE_GAP] \
+\\*[$ATTRIBUTE_RULE_GAP] "\\*[$ATTRIBUTE_STRING]"
+.                el .UNDERSCORE "\\*[$ATTRIBUTE_STRING]"
+.             \}
+.             el .PRINT "\\*[$ATTRIBUTE_STRING]"
+.             if \\n[#ATTRIBUTE_COLOR]=1 .gcolor
+.             CAPS off
+.          \}
+.          if !'\\*[$AUTHOR_SPACER]'' .sp \\*[$AUTHOR_SPACER]
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             COLOR \\*[$DOCHEADER_COLOR]
+.          DO_AUTHORS
 .       \}
 .    \}
-.    if !'\\*[$AUTHOR_1]'' \{\
-.       FAMILY  \\*[$AUTHOR_FAM]
-.       FT      \\*[$AUTHOR_FT]
-.       ps \\*[$AUTHOR_PT_SIZE]
-.       ie \\n[#ATTRIBUTE_COLOR]=1 \
-.          PRINT \&\m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
-.       el .PRINT \&\\*[$ATTRIBUTE_STRING]
-.       PRINT_AUTHORS
-.    \}
 .    FAMILY \\*[$DOC_FAM]
 .    FT R
 .END
 \#
-.MAC CHAPTER_DOCHEADER END
-.    DOC_HEADER_QUAD
-.    FAMILY  \\*[$TITLE_FAM]
-.    FT      \\*[$TITLE_FT]
-.    ps \\*[$TITLE_PT_SIZE]
-.    vs \\n[#DOCHEADER_LEAD]u
-.\" Chapter title only
-.    ie '\\*[$CHAPTER]'' \{\
-.       ie !'\\*[$CHAPTER_TITLE_1]'' \{\
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             FAMILY  \\*[$CHAPTER_TITLE_FAM]
-.             FT      \\*[$CHAPTER_TITLE_FT]
-.             ps \\*[$CHAPTER_TITLE_PT_SIZE]
-.             vs \\n[#DOCHEADER_LEAD]u
-.          \}
-.          nr #ARG_NUM 0 1
-.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.          \}
+.MAC DEFAULT_DOCHEADER_TYPEWRITE END
+.    CENTER
+.    TYPEWRITER
+.    if !\\n[#SINGLE_SPACE] \{\
+.       vs \\n[#DOC_LEAD]u/2u
+.       sp |\\n[#T_MARGIN]u-1v
+.    \}
+.    if !'\\*[$TITLE_1]'' \{\
+.       ie \\n[#SINGLE_SPACE] \
+.          vs \\n[#DOC_LEAD]u+(\\n[#DOC_LEAD]u/4u)
+.       el .vs (\\n[#DOC_LEAD]u/2u)+(\\n[#DOC_LEAD]u/4u)
+.       CAPS
+.       DO_TITLE
+.       CAPS OFF
+.       vs
+.    \}
+.    if !'\\*[$SUBTITLE]'' \{\
+.       ds $PRFX SUB
+.       sp
+.       DO_SUBTITLE
+.       rm $PRFX
+.    \}
+.    if !\\n[#NO_PRINT_AUTHOR] \{\
+.       if !'\\*[$AUTHOR_1]'' \{\
+.          sp
+.          if d$ATTRIBUTE_STRING .PRINT "\\*[$ATTRIBUTE_STRING]
+.          sp
+.          DO_AUTHORS
 .       \}
-.       el \{\
-.          ie \\n[#TITLE_COLOR]=1 \{\
-.             PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_STRING]\m[]
-.          \}
-.          el .PRINT \\*[$CHAPTER_STRING]
+.    \}
+.END
+\#
+.MAC CHAPTER_DOCHEADER END
+.    DOC_HEADER_QUAD
+.    FAMILY  \\*[$CHAPTER_FAM]
+.    FT      \\*[$CHAPTER_FT]
+.    ps \\n[#DOC_PT_SIZE]u\\*[$CHAPTER_SIZE_CHANGE]
+.    vs \\n[#DOCHEADER_LEAD]u
+.\" Chapter title only
+.    ie '\\*[$CHAPTER]'' \{\
+.       if \\n[#PRINT_STYLE]=2 \
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             COLOR \\*[$DOCHEADER_COLOR]
+.       if !'\\*[$CHAPTER_TITLE_1]'' \{\
+.          ds $PRFX CHAPTER_
+.          nr #DOCHEADER 1
+.          DO_TITLE
+.          rr #DOCHEADER
+.          rm $PRFX
 .       \}
 .    \}
 .\" Chapter string, possibly with a chapter title
 .    el \{\
-.       ie \\n[#TITLE_COLOR]=1 \{\
-.          PRINT \m[\\*[$TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
-.       \}
-.       el .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             COLOR \\*[$DOCHEADER_COLOR]
+.          if \\n[#CHAPTER_COLOR]=1 \
+.             COLOR \\*[$CHAPTER_COLOR]
+.       \}
+.       if \\n[#CHAPTER_CAPS]=1 .CAPS
+.       ie \\n[#CHAPTER_UNDERLINE] \{\
+.          ds $TITLE_TYPE CHAPTER
+.          ie \\n[#CHAPTER_UNDERLINE]=2 \
+.             UNDERSCORE2 \\*[$CHAPTER_UNDERLINE_GAP] \
+\\*[$CHAPTER_RULE_GAP] "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.          el .UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.       \}
+.       el .PRINT "\\*[$CHAPTER_STRING] \\*[$CHAPTER]"
+.       rm $TITLE_TYPE
+.       if \\n[#PRINT_STYLE]=2 \
+.          if \\n[#CHAPTER_COLOR]=1 .gcolor
+.       CAPS off
 .       if !'\\*[$CHAPTER_TITLE_1]'' \{\
+.          ds $PRFX CHAPTER_
 .          if \\n[#PRINT_STYLE]=2 \{\
-.             FAMILY  \\*[$CHAPTER_TITLE_FAM]
-.             FT      \\*[$CHAPTER_TITLE_FT]
-.             ps \\*[$CHAPTER_TITLE_PT_SIZE]
-.             vs \\n[#DOCHEADER_LEAD]u
-.             ALD     \\n[.v]u/4u \" Put a little space before the chapter title
-.          \}
-.          nr #ARG_NUM 0 1
-.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#CHAPTER_TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$CHAPTER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
+.             nr #CHAPTER+TITLE 1
+.             if \\n[#DOCHEADER_COLOR]=1 \
+.                COLOR \\*[$DOCHEADER_COLOR]
 .          \}
-.          RLD \\n[#DOC_LEAD]u    \" Just looks better this way
+.          if !'\\*[$CHAPTER_TITLE_SPACER]'' \
+.             sp \\*[$CHAPTER_TITLE_SPACER]
+.          DO_TITLE
+.          rm $PRFX
+.          rr #CHAPTER+TITLE
+.          RLD \\n[#DOC_LEAD]u \" Just looks better this way
 .       \}
 .    \}
 .    FAMILY \\*[$DOC_FAM]
 .    FT R
 .END
 \#
-.MAC NAMED_DOCHEADER END
-.    DOC_HEADER_QUAD
-.    FAMILY  \\*[$TITLE_FAM]
-.    FT      \\*[$TITLE_FT]
-.    ps \\*[$TITLE_PT_SIZE]
-.    vs      \\n[#DOCHEADER_LEAD]u
-.    if !'\\*[$TITLE_1]'' \{\
-.       nr #ARG_NUM 0 1
-.       while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.          ie \\n[#TITLE_COLOR]=1 \{\
-.             PRINT "\m[\\*[$TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
+.MAC CHAPTER_DOCHEADER_TYPEWRITE END
+.    CENTER
+.    TYPEWRITER
+.    if !\\n[#SINGLE_SPACE] \{\
+.       vs \\n[#DOC_LEAD]u/2u
+.       sp |\\n[#T_MARGIN]u-1v
+.    \}
+.    ie '\\*[$CHAPTER]'' \{\
+.       CAPS
+.       ie !'\\*[$CHAPTER_TITLE]'' \{\
+.          vs \\n[.v]u+(\\n[.v]u/3u)
+.          nr #ARG_NUM 0 1
+.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
+.             UNDERSCORE 3p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
 .          \}
-.          el .PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
+.          vs
+.       \}
+.       el \{\
+.          CAPS
+.          UNDERSCORE 3p "\\*[$CHAPTER_STRING]"
 .       \}
+.       CAPS OFF
+.       RLD 1v
 .    \}
-.    if !'\\*[$SUBTITLE]'' \{\
-.       FAMILY  \\*[$SUBTITLE_FAM]
-.       FT      \\*[$SUBTITLE_FT]
-.       ps \\*[$SUBTITLE_PT_SIZE]
-.       nr #ARG_NUM 0 1
-.       while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.          ie \\n[#SUBTITLE_COLOR]=1 \{\
-.             PRINT "\m[\\*[$SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n[#ARG_NUM]]\m[]
+.    el \{\
+.       CAPS
+.       UNDERSCORE 3p "\\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.       CAPS OFF
+.       if !'\\*[$CHAPTER_TITLE]'' \{\
+.          sp
+.          nr #ARG_NUM 0 1
+.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
+.             PRINT "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
 .          \}
-.          el .PRINT "\\*[$SUBTITLE_\\n[#ARG_NUM]]
 .       \}
+.       sp -1
 .    \}
-.    if !'\\*[$AUTHOR_1]'' \{\
-.       FAMILY  \\*[$AUTHOR_FAM]
-.       FT      \\*[$AUTHOR_FT]
-.       ps \\*[$AUTHOR_PT_SIZE]
-.       ie \\n[#ATTRIBUTE_COLOR]=1 \{\
-.          PRINT \&\m[\\*[$ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
-.       \}
-.       el .PRINT \&\\*[$ATTRIBUTE_STRING]
-.       PRINT_AUTHORS
+.    vs \\n[#DOC_LEAD]u
+.    if \\n[#SINGLE_SPACE] .sp 2
+.END
+\#
+.MAC NAMED_DOCHEADER END
+.    DEFAULT_DOCHEADER
+.    if !\\n[#NO_PRINT_DOCTYPE] \{\
+.       FAMILY  \\*[$DOCTYPE_FAM]
+.       FT      \\*[$DOCTYPE_FT]
+.       ps \\n[#DOC_PT_SIZE]u\\*[$DOCTYPE_SIZE_CHANGE]
+.       vs \\n[#DOCHEADER_LEAD]u
+.       ALD     \\n[#DOCHEADER_LEAD]u
+.       if \\n[#DOCHEADER_COLOR]=1 \
+.          COLOR \\*[$DOCHEADER_COLOR]
+.       if \\n[#DOCTYPE_COLOR]=1 \
+.          COLOR \\*[$DOCTYPE_COLOR]
+.       if \\n[#DOCTYPE_CAPS]=1 .CAPS
+.       if !'\\*[$DOCTYPE_SPACER]'' .sp \\*[$DOCTYPE_SPACER]
+.       ie \\n[#DOCTYPE_UNDERLINE] \{\
+.          ds $TITLE_TYPE DOCTYPE
+.          ie \\n[#DOCTYPE_UNDERLINE]=2 \
+.              UNDERSCORE2 \\*[$DOCTYPE_UNDERLINE_GAP] \
+\\*[$DOCTYPE_RULE_GAP] "\\*[$DOC_TYPE]
+.          el .UNDERSCORE "\\*[$DOC_TYPE]
+.       \}
+.       el .PRINT "\\*[$DOC_TYPE]
+.       gcolor
+.       CAPS off
 .    \}
-.    FAMILY  \\*[$DOCTYPE_FAM]
-.    FT      \\*[$DOCTYPE_FT]
-.    ps \\*[$DOCTYPE_PT_SIZE]
-.    vs \\n[#DOCHEADER_LEAD]u
-.    ALD     \\n[#DOCHEADER_LEAD]u
-.    nr #FROM_DOCTYPE 1
-.    if \\n[#DOCTYPE_COLOR]=1 .COLOR \\*[$DOCTYPE_COLOR]
-.    ie \\n[#DOCTYPE_UNDERLINE]=1 \
-.       UNDERSCORE \\*[$DOCTYPE_UNDERLINE_GAP] "\\*[$DOC_TYPE]"
-.    el .PRINT "\\*[$DOC_TYPE]"
-.    COLOR black
 .    FAMILY \\*[$DOC_FAM]
 .    FT R
-.    rr #FROM_DOCTYPE
 .END
 \#
 \# COVER PAGE
 \# ----------
 \# *Arguments:
 \#   TITLE | DOCTITLE | CHAPTER | CHAPTER_TITLE | CHAPTER+TITLE | COVERTITLE \
-\#   [ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC BLANKPAGE ]
+\#   [ SUBTITLE AUTHOR DOCTYPE COPYRIGHT MISC BLANKPAGE PDF_OUTLINE_LABEL ]
 \# *Function:
 \#   Toggles the number register for each cover page element
 \#   passed as an argument.
@@ -6349,6 +6900,7 @@ y\R'#DESCENDER \\n[.cdp]'
 \#   applies everything to a doc cover.
 \#
 .MAC COVER END
+.    rm DOC_
 .    ie '\\$0'DOC_COVER' \{\
 .       nr #DOC_COVER 1
 .       ds DOC_ DOC_
@@ -6356,15 +6908,22 @@ y\R'#DESCENDER \\n[.cdp]'
 .    el .nr #COVER 1
 .    nr #ARG_NUM 0 1
 .    nr #COVER_ITEM \\n[#NUM_ARGS]  \"loop count
+.    if \\n[#NUM_ARGS]=1 \
+.       if '\\$1'\\*[DOC_]COVERTEXT' \
+.          nr #\\*[DOC_]COVERTEXT_ONLY 1
 .    while \\n+[#ARG_NUM]<=\\n[#COVER_ITEM] \{\
-.       if '\\$1'TITLE' \{\
-.          nr #\\*[DOC_]COVER_TITLE 1
-.          shift
-.       \}
 .       if '\\$1'DOCTITLE' \{\
 .          nr #\\*[DOC_]COVER_TITLE 2
 .          shift
 .       \}
+.       if '\\$1'TITLE' \{\
+.          nr #\\*[DOC_]COVER_TITLE 1
+.          if \\n[#FROM_\\*[DOC_]COVERTITLE] \{\
+.             nr #\\*[DOC_]COVER_TITLE 7
+.             rr #FROM_\\*[DOC_]COVERTITLE
+.          \}
+.          shift
+.       \}
 .       if '\\$1'CHAPTER' \{\
 .          nr #\\*[DOC_]COVER_TITLE 3
 .          shift
@@ -6377,10 +6936,16 @@ y\R'#DESCENDER \\n[.cdp]'
 .          nr #\\*[DOC_]COVER_TITLE 5
 .          shift
 .       \}
-.       if '\\$1'\\*[DOC_]COVERTITLE' \{\
+.       if '\\$1'COVERTITLE' \{\
+.          nr #COVERTITLE 1
 .          nr #\\*[DOC_]COVER_TITLE 6
 .          shift
 .       \}
+.       if '\\$1'DOC_COVERTITLE' \{\
+.          nr #DOC_COVERTITLE 1
+.          nr #\\*[DOC_]COVER_TITLE 7
+.          shift
+.       \}
 .       if '\\$1'SUBTITLE' \{\
 .          nr #\\*[DOC_]COVER_SUBTITLE 1
 .          shift
@@ -6401,6 +6966,14 @@ y\R'#DESCENDER \\n[.cdp]'
 .          nr #\\*[DOC_]COVER_MISC 1
 .          shift
 .       \}
+.       if '\\$1'\\*[DOC_]COVERTEXT' \{\
+.          nr #\\*[DOC_]COVERTEXT 1
+.          shift
+.       \}
+.       if '\\$1'\\*[DOC_]COVER_IMAGE' \{\
+.          nr #\\*[DOC_]COVER_IMAGE 1
+.          shift
+.       \}
 .       if '\\$1'PDF_OUTLINE_LABEL' \{\
 .          shift
 .          ds $PDF_\\*[DOC_]COVER_LABEL \\$1
@@ -6414,48 +6987,178 @@ y\R'#DESCENDER \\n[.cdp]'
 .    if '\\$0'DOC_COVER' .rm DOC_
 .END
 \#
+\# COVER TITLE
+\# -----------
+\# *Arguments:
+\#   <covertitle>
+\# *Function:
+\#   Stores cover title in string(s) for output on cover pages.
+\#
 .MAC COVERTITLE END
-.    ie '\\$0'DOC_COVERTITLE' \{\
-.       ie \\n[#NUM_ARGS]=0 \{\
-.          if \\n[#DOC_COVER_TITLE_NUM] \{\
+.    rm DOC_
+.    if '\\$0'DOC_COVERTITLE' \{\
+.       ds DOC_ DOC_
+.       nr #FROM_\\*[DOC_]COVERTITLE 1
+.    \}
+.    ie \\n[#NUM_ARGS]=0 \{\
+.       nr argc 0 1
+.       while \\n+[argc]<=3 \{\
+.          if \\n[#\\*[DOC_]COVER_TITLE_NUM] \{\
 .             nr #ITEM 0 1
-.             while \\n[#DOC_COVER_TITLE_NUM]>\\n[#ITEM] \{\
-.                rm $DOC_COVER_TITLE_\\n+[#ITEM]
+.             while \\n[#\\*[DOC_]COVERTITLE_NUM]>\\n[#ITEM] \{\
+.                rm $\\*[DOC_]COVERTITLE_\\n+[#ITEM]
 .             \}
-.             rr #DOC_COVER_TITLE_NUM
-.             rm $DOC_COVER_TITLE
+.             rr #\\*[DOC_]COVERTITLE_NUM
+.             rm $\\*[DOC_]COVERTITLE
 .          \}
 .       \}
-.       el \{\
-.          nr #DOC_COVER_TITLE_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#DOC_COVER_TITLE_NUM] \{\
-.             ds \
-$DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
-.          \}
-.          ds $DOC_COVER_TITLE \\$*
-.       \}
 .    \}
 .    el \{\
-.       ie \\n[#NUM_ARGS]=0 \{\
-.          if \\n[#COVER_TITLE_NUM] \{\
-.             nr #ITEM 0 1
-.             while \\n[#COVER_TITLE_NUM]>\\n[#ITEM] \{\
-.                rm $COVER_TITLE_\\n+[#ITEM]
-.             \}
-.             rr #COVER_TITLE_NUM
-.             rm $COVER_TITLE
-.          \}
-.       \}
-.       el \{\
-.          nr #COVER_TITLE_NUM 0 1
-.          while \\n[#NUM_ARGS]>\\n[#COVER_TITLE_NUM] \{\
-.             ds $COVER_TITLE_\\n+[#COVER_TITLE_NUM] \\$\\n[#COVER_TITLE_NUM]
-.          \}
-.          ds $COVER_TITLE \\$*
-.\" .          if \\n[#DOCTITLE_NUM]=0 .PDF_TITLE \\*[$COVER_TITLE]
+.       nr #\\*[DOC_]COVERTITLE_NUM 0 1
+.       while \\n[#NUM_ARGS]>\\n[#\\*[DOC_]COVERTITLE_NUM] \{\
+.          ds \
+$\\*[DOC_]COVERTITLE_\\n+[#\\*[DOC_]COVERTITLE_NUM] \\$\\n[#\\*[DOC_]COVERTITLE_NUM]
+.          nr #\\*[DOC_]COVERTITLE_NUM \\n[#\\*[DOC_]COVERTITLE_NUM]
 .       \}
+.       ds $\\*[DOC_]COVERTITLE \\$*
+.    \}
+.END
+\#
+.MAC COVER_ATTRIBUTE_STRING END
+.    if '\\$0'DOC_COVER_ATTRIBUTE_STRING' \
+.       ds DOC_ DOC_
+.    ds $\\*[DOC_]COVER_ATTRIBUTE_STRING \\$1 
+.    rm DOC_
+.END
+.
+.ALIAS DOC_COVER_ATTRIBUTE_STRING COVER_ATTRIBUTE_STRING
+\#
+\# COVER TEXT
+\# ----------
+\# *Arguments:
+\#   [ START <vertical pos> ] | <anything>
+\# *Function:
+\#   With no arg, begins a diversion holding the cover text for
+\#   output on the cover page.  With START <pos>, sets a vertical
+\#   starting position relative to the top edge of the page.  With
+\#   any other arg, ends the diversion.
+\# *Notes:
+\#   Aliased as DOC_COVERTEXT.
+\#
+\#   If no other items assigned to cover pages, starts 1/3 of the
+\#   way down the cover page unless START pos is given, otherwise
+\#   starts underneath the last of title, subtitle, author(s) or
+\#   doctype, preceded by a blank line.
+\#
+\#   Does not persist.
+\#
+.MAC COVERTEXT END
+.    rm DOC_
+.    if '\\$0'DOC_COVERTEXT' .ds DOC_ DOC_
+.    if '\\$1'START' \{\
+.       shift
+.       nr #\\*[DOC_]COVERTEXT_START_POS (u;\\$1)
+.       shift
 .    \}
+.    ie '\\$1'' \{\
+.       nr #COVERTEXT_PP 1
+.       di \\*[DOC_]COVER_TEXT
+.       ev 1
+\!.     ie !\\n[#\\*[DOC_]COVERTEXT_START_POS] \{\
+\!.        sp |\\n[.p]u/3u-1v
+\!.     \}
+\!.     el \{\
+\!.        vs 0
+\!.        sp |0i
+\!.        vs \\\\n[#DOC_LEAD]u+\\\\*[$\\*[DOC_]COVER_LEAD_ADJ]
+\!.        sp |\\n[#\\*[DOC_]COVERTEXT_START_POS]u-1
+\!.     \}
+\!.     vpt
+.    \}
+.    el \{\
+.       br
+\!.     vpt 0
+.       ev
+.       di
+.       rm $FONT
+.       rr #COVERTEXT_PP
+.       IQ CLEAR
+.    \}
+.    rm DOC_
 .END
+.
+.ALIAS DOC_COVERTEXT COVERTEXT
+\#
+\# COVER IMAGE
+\# -----------
+\#*Arguments:
+\#  <image file> <width> <height> [ -L|-C|-R|-I <ind> Y-pos [ X-pos ] ]
+\#*Function:
+\#  Places an image on doccovers and covers.
+\#*Notes:
+\#  Aliased as DOC_COVER_IMAGE.
+\#
+\#  <width> and <height> are required.  With no further args, images
+\#  are set at 0,0 by default so that full page images fill the entire
+\#  printer sheet.
+\#  
+\#  Positioning args are the same as PDF_IMAGE.  -L, -R, -C and -I <ind>
+\#  observe the left and right margins.
+\#
+\#  Y-pos is required for all but full page images; without it, images
+\#  are flush with the top of the page.  X-pos is only needed if the
+\#  user prefers to give absolute X,Y positioning.
+\#
+\#  Note that Y-pos comes before X-pos in the args.
+\#
+.MAC COVER_IMAGE END
+. if '\\$0'DOC_COVER_IMAGE' .ds DOC_ DOC_
+. ds \\*[DOC_]COVER_IMG_FILE \\$1
+. nr \\*[DOC_]COVER_IMG_W (z;\\$2)
+. nr \\*[DOC_]COVER_IMG_H (z;\\$3)
+. if !'\\$4'' \{\
+.   ie !\B'\\$4' \{\
+.     if '\\$4'-L' .nr \\*[DOC_]COVER_IMG_IND \
+        \\n[#L_MARGIN]u
+.     if '\\$4'-C' .nr \\*[DOC_]COVER_IMG_IND \
+        \\n[#PAGE_WIDTH]u-\\n[\\*[DOC_]COVER_IMG_W]u/2
+.     if '\\$4'-R' .nr \\*[DOC_]COVER_IMG_IND \
+        \\n[#L_MARGIN]+\\n[.l]u-\\n[\\*[DOC_]COVER_IMG_W]u
+.     if '\\$4'-I' \{\
+.       nr \\*[DOC_]COVER_IMG_IND \\n[#L_MARGIN]+\\$5
+.       if !'\\$6'' .nr \\*[DOC_]COVER_IMG_Y (u;\\$6)
+.       shift \\n[#NUM_ARGS]
+.     \}
+.     if \B'\\$5' .nr \\*[DOC_]COVER_IMG_Y (u;\\$5)
+.   \}
+.   el \{\
+.     nr \\*[DOC_]COVER_IMG_Y (u;\\$4)
+.     if \B'\\$5' .nr \\*[DOC_]COVER_IMG_X (u;\\$5)
+.   \}
+. \}
+. rm DOC_
+.END
+.
+.ALIAS DOC_COVER_IMAGE COVER_IMAGE
+\#
+.MAC DO_COVER_IMAGE END
+.    ll \\n[#PAGE_WIDTH]u
+.    po 0
+.    vs 0
+.    sp |0i
+.    if \\n[\\*[DOC_]COVER_IMG_Y]   .sp \\n[\\*[DOC_]COVER_IMG_Y]u
+.    if \\n[\\*[DOC_]COVER_IMG_X]   .in \\n[\\*[DOC_]COVER_IMG_X]u
+.    if \\n[\\*[DOC_]COVER_IMG_IND] .in \\n[\\*[DOC_]COVER_IMG_IND]u
+.    if \\n[.u]=1 .nf
+.    nop \X'pdf: pdfpic \\*[\\*[DOC_]COVER_IMG_FILE] -L \
+\\n[\\*[DOC_]COVER_IMG_W]z \\n[\\*[DOC_]COVER_IMG_H]z'
+.    in
+.    vs
+.    po
+.    ll
+.END
+.
+.ALIAS DO_DOC_COVER_IMAGE DO_COVER_IMAGE
 \#
 \# COVER PAGE LEADING
 \# ------------------
@@ -6474,16 +7177,25 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    el .ds $COVER_LEAD_ADJ \\$1
 .END
 \#
-\# MISCs get treated similarly to QUOTEs and BLOCKQUOTEs with respect to
-\# leading
+\# MISC_AUTOLEAD functionality has been removed.  Leading for MISCs
+\# is now entered as an absolute value.  The macro emits a warning.
 \#
 .MAC MISC_AUTOLEAD END
-.    if '\\$0'DOC_COVER_MISC_AUTOLEAD' .nr #DOC_COVER_MISC_AUTOLEAD (p;\\$1)
-.    if '\\$0'COVER_MISC_AUTOLEAD'     .nr #COVER_MISC_AUTOLEAD (p;\\$1)
+.    ds replacement \\$0
+.    substring replacement 0 -9
+.    ds replacement \\*[replacement]LEAD
+.    ds cover-type \\$0
+.    substring cover-type 0 2
+.    ie '\\*[cover-type]'COV' .ds cover-type cover
+.    el .ds cover-type doc-cover
+.    tm1 "[mom]: \\$0 at line \\n[.c] of '\\n[.F]' is no longer valid.
+.    tm1 "       Leading of \\*[cover-type] MISC items is now set with \\*[replacement], which
+.    tm1 "       takes an absolute leading value.  Please update your document.
+.    ab   [mom]: Aborting.
 .END
-\#
-.ALIAS DOC_COVER_MISC_AUTOLEAD  MISC_AUTOLEAD
-.ALIAS COVER_MISC_AUTOLEAD      MISC_AUTOLEAD
+.
+.ALIAS DOC_COVER_MISC_AUTOLEAD MISC_AUTOLEAD
+.ALIAS COVER_MISC_AUTOLEAD     MISC_AUTOLEAD
 \#
 \# COVER PAGE START POSITION
 \# -------------------------
@@ -6500,190 +7212,16 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   down the page (setup in DO_COVER).
 \#
 .MAC COVER_ADVANCE END
-.    ie '\\$0'DOC_COVER_ADVANCE' .nr #DOC_COVER_START_POS (\\$1)
+.    ds COVER_TYPE \\$0
+.    substring COVER_TYPE 0 2
+.    ie 'COVER_TYPE'DOC' .nr #DOC_COVER_START_POS (\\$1)
 .    el .nr #COVER_START_POS (\\$1)
 .END
-\#
-\# UNDERLINE CONTROL
-\# -----------------
-\# *Arguments:
-\#   [ DOUBLE ] [ <underline weight> [<underline gap>] ] | <none> | <anything>
-\# *Function:
-\#   Toggles underlining of the element indicated by the calling alias
-\#   on or off.  Uses #<element>_UNDERLINE_WEIGHT to set the weight,
-\#   and defines string $<element>_UNDERLINE_GAP.
-\# *Notes:
-\#   Calling aliases COVER_ and DOCCOVER_ only apply if DOCTYPE is
-\#   NAMED and the DOCTYPE arg is passed to COVER or DOC_COVER.
-\#
-.MAC _UNDERLINE END
-.    ie '\\$1'' \{\
-.       if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \
-.          nr #BIB_STRING_UNDERLINE 1
-.       if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \
-.          nr #BIB_STRING_UNDERLINE 1
-.       if '\\$0'COVER_UNDERLINE' \
-.          nr #COVER_UNDERLINE 1
-.       if '\\$0'DOC_COVER_UNDERLINE' \
-.          nr #DOC_COVER_UNDERLINE 1
-.       if '\\$0'DOCTYPE_UNDERLINE' \
-.          nr #DOCTYPE_UNDERLINE 1
-.       if '\\$0'ENDNOTE_STRING_UNDERLINE' \
-.          nr #EN_STRING_UNDERLINE 1
-.       if '\\$0'ENDNOTE_STRING_UNDERSCORE' \
-.          nr #EN_STRING_UNDERLINE 1
-.       if '\\$0'ENDNOTE_TITLE_UNDERLINE' \
-.          nr #EN_TITLE_UNDERLINE 1
-.       if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \
-.          nr #EN_TITLE_UNDERLINE 1
-.    \}
-.    el \{\
-.       ie \\n[#NUM_ARGS]=1 \{\
-.          ds $ARG \\$1
-.          substring $ARG -1
-.          ie \B'\\*[$ARG]' \{\
-.             if !\\n[#PRINT_STYLE]=1 \{\
-.                if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \
-.                   BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \
-.                   BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'COVER_UNDERLINE' \
-.                   COVER_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'DOC_COVER_UNDERLINE' \
-.                   DOC_COVER_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'DOCTYPE_UNDERLINE' \
-.                   DOCTYPE_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\
-.                   ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
-.                   nr #EN_STRING_UNDERLINE 1
-.                \}
-.                if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\
-.                   ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
-.                   nr #EN_STRING_UNDERLINE 1
-.                \}
-.                if '\\$0'ENDNOTE_TITLE_UNDERLINE' \
-.                   ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1
-.                if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \
-.                   ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1
-.             \}
-.          \}
-.          el \{\
-.             if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{\
-.                ie '\\$1'DOUBLE' .nr #BIB_STRING_UNDERLINE 2
-.                el .nr #BIB_STRING_UNDERLINE 0
-.             \}
-.             if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{\
-.                ie '\\$1'DOUBLE' .nr #BIB_STRING_UNDERLINE 2
-.                el .nr #BIB_STRING_UNDERLINE 0
-.             \}
-.             if '\\$0'COVER_UNDERLINE'     .nr #COVER_UNDERLINE 0
-.             if '\\$0'DOC_COVER_UNDERLINE' .nr #DOC_COVER_UNDERLINE 0
-.             if '\\$0'DOCTYPE_UNDERLINE'   .nr #DOCTYPE_UNDERLINE 0
-.             if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\
-.                ie '\\$1'DOUBLE' .nr #EN_STRING_UNDERLINE 2
-.                el .nr #EN_STRING_UNDERLINE 0
-.             \}
-.             if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\
-.                ie '\\$1'DOUBLE' .nr #EN_STRING_UNDERLINE 2
-.                el .nr #EN_STRING_UNDERLINE 0
-.             \}
-.             if '\\$0'ENDNOTE_TITLE_UNDERLINE' \{\
-.                ie '\\$1'DOUBLE' .nr #EN_TITLE_UNDERLINE 2
-.                el .nr #EN_TITLE_UNDERLINE 0
-.             \}
-.             if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \{\
-.                ie '\\$1'DOUBLE' .nr #EN_TITLE_UNDERLINE 2
-.                el .nr #EN_TITLE_UNDERLINE 0
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          if !\\n[#PRINT_STYLE]=1 \{\
-.             if '\\$0'BIBLIOGRAPHY_STRING_UNDERLINE' \{\
-.                nr #BIB_STRING_UNDERLINE 1
-.                if '\\$1'DOUBLE' \{\
-.                   nr #BIB_STRING_UNDERLINE 2
-.                   shift
-.                \}
-.                BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
-.                if !'\\$2'' \
-.                   ds $BIB_STRING_UNDERLINE_GAP \\$2
-.                if !'\\$3'' \
-.                   ds $BIB_STRING_RULE_GAP \\$3
-.             \}
-.             if '\\$0'BIBLIOGRAPHY_STRING_UNDERSCORE' \{\
-.                nr #BIB_STRING_UNDERLINE 1
-.                if '\\$1'DOUBLE' \{\
-.                   nr #BIB_STRING_UNDERLINE 2
-.                   shift
-.                \}
-.                BIBLIOGRAPHY_STRING_UNDERLINE_WEIGHT \\$1
-.                if !'\\$2'' .ds $BIB_STRING_UNDERLINE_GAP \\$2
-.                if !'\\$3'' .ds $BIB_STRING_RULE_GAP \\$3
-.             \}
-.             if '\\$0'COVER_UNDERLINE' \{\
-.                nr #COVER_UNDERLINE 1
-.                COVER_UNDERLINE_WEIGHT \\$1
-.                ds $COVER_UNDERLINE_GAP \\$2
-.             \}
-.             if '\\$0'DOC_COVER_UNDERLINE' \{\
-.                nr #DOC_COVER_UNDERLINE 1
-.                DOC_COVER_UNDERLINE_WEIGHT \\$1
-.                ds $DOC_COVER_UNDERLINE_GAP \\$2
-.             \}
-.             if '\\$0'DOCTYPE_UNDERLINE' \{\
-.                nr #DOCTYPE_UNDERLINE 1
-.                DOCTYPE_UNDERLINE_WEIGHT \\$1
-.                ds $DOCTYPE_UNDERLINE_GAP \\$2
-.             \}
-.\" ENDNOTE_STRING_UNDERLINE and ENDNOTE_STRING_UNDERSCORE are identical
-.\" _UNDERLINE left in for backward compatibility
-.             if '\\$0'ENDNOTE_STRING_UNDERLINE' \{\
-.                nr #EN_STRING_UNDERLINE 1
-.                if '\\$1'DOUBLE' \{\
-.                   nr #EN_STRING_UNDERLINE 2
-.                   shift
-.                \}
-.                ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
-.                if !'\\$2'' .ds $EN_STRING_UNDERLINE_GAP \\$2
-.                if !'\\$3'' .ds $EN_STRING_RULE_GAP \\$3
-.             \}
-.             if '\\$0'ENDNOTE_STRING_UNDERSCORE' \{\
-.                nr #EN_STRING_UNDERLINE 1
-.                if '\\$1'DOUBLE' \{\
-.                   nr #EN_STRING_UNDERLINE 2
-.                   shift
-.                \}
-.                ENDNOTE_STRING_UNDERLINE_WEIGHT \\$1
-.                if !'\\$2'' .ds $EN_STRING_UNDERLINE_GAP \\$2
-.                if !'\\$3'' .ds $EN_STRING_RULE_GAP \\$3
-.             \}
-.\" ENDNOTE_TITLE_UNDERLINE and ENDNOTE_TITLE_UNDERSCORE are identical
-.\" _UNDERLINE left in for backward compatibility
-.             if '\\$0'ENDNOTE_TITLE_UNDERLINE' \{\
-.                nr #EN_TITLE_UNDERLINE 1
-.                ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1
-.                ds $EN_TITLE_UNDERLINE_GAP \\$2
-.             \}
-.             if '\\$0'ENDNOTE_TITLE_UNDERSCORE' \{\
-.                nr #EN_TITLE_UNDERLINE 1
-.                ENDNOTE_TITLE_UNDERLINE_WEIGHT \\$1
-.                ds $EN_TITLE_UNDERLINE_GAP \\$2
-.             \}
-.          \}
-.       \}
-.    \}
-.END
-\#
-.ALIAS BIBLIOGRAPHY_STRING_UNDERSCORE _UNDERLINE
-.ALIAS BIBLIOGRAPHY_STRING_UNDERLINE  _UNDERLINE
-.ALIAS COVER_UNDERLINE                _UNDERLINE
-.ALIAS DOC_COVER_UNDERLINE            _UNDERLINE
-.ALIAS DOCTYPE_UNDERLINE              _UNDERLINE
-.ALIAS ENDNOTE_STRING_UNDERLINE       _UNDERLINE
-.ALIAS ENDNOTE_STRING_UNDERSCORE      _UNDERLINE
-.ALIAS ENDNOTE_TITLE_UNDERLINE        _UNDERLINE
-.ALIAS ENDNOTE_TITLE_UNDERSCORE       _UNDERLINE
+.
+.ALIAS DOC_COVER_ADVANCE   COVER_ADVANCE
+.ALIAS DOC_COVER_START_POS COVER_ADVANCE
+.ALIAS COVER_ADVANCE       COVER_ADVANCE
+.ALIAS COVER_START_POS     COVER_ADVANCE
 \#
 \# COVERS - WHETHER TO PRINT
 \# -------------------------
@@ -6742,7 +7280,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    nr #DOING_COVER 1
 .    ev COVER
 .    evc 0
-.    TRAP OFF
+.    vpt 0
 .    if \\n[#PAGINATE]=1 \{\
 .       nr #PAGINATION_WAS_ON 1
 .       rr #PAGINATE
@@ -6766,53 +7304,51 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       if '\\*[$PDF_DOC_COVER_LABEL]'' \
 .          ds $PDF_DOC_COVER_LABEL Cover:
 .    \}
-.    el \{\
-.       if '\\*[$PDF_COVER_LABEL]'' .ds $PDF_COVER_LABEL Title Page:
-.    \}
+.    el \
+.       if '\\*[$PDF_COVER_LABEL]'' \
+.          ds $PDF_COVER_LABEL Title Page:
+.    ds $COVER_TYPE \\*[DOC_]COVER_
 .    if !r#\\*[DOC_]COVER_START_POS \
 .       nr #\\*[DOC_]COVER_START_POS \\n[#PAGE_LENGTH]/3
-.    if \\n[#PRINT_STYLE]=1 \{\
-.       ie \\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u*2u
-.       el .vs \\n[#DOC_LEAD]u
-.    \}
+.    if \\n[#PRINT_STYLE]=1 \
+.       if !\\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u/2u
 .    if \\n[#PRINT_STYLE]=2 \{\
 .       vs \\n[#DOC_LEAD]u\\*[$\\*[DOC_]COVER_LEAD_ADJ]
-.       nr #\\*[DOC_]COVER_LEAD \\n[#LEAD]
+.       nr #\\*[DOC_]COVER_LEAD \\n[.v]
 .    \}
 .    if \\n[.ns] .rs
 .    if '\\$0'DO_COVER' \{\
-.       if \\n[TOC.RELOCATE]==5 \{\
+.       if \\n[TOC.RELOCATE]==5 \
 .          if !rTOC_BH .TOC_BEFORE_HERE
-.       \}
 .    \}
 .    if '\\$0'DO_DOC_COVER' \{\
-.       if \\n[TOC.RELOCATE]==3 \{\
+.       if \\n[TOC.RELOCATE]==3 \
 .          if !rTOC_BH .TOC_BEFORE_HERE
-.       \}
 .    \}
 .    RV_HARD_SET_MARGINS
-.    sp |\\n[#\\*[DOC_]COVER_START_POS]u-1v
-.    if \\n[#\\*[DOC_]COVER_COLOR]=1 \{\
-.       nf
-\m[\\*[$\\*[DOC_]COVER_COLOR]]
-.       EOL
+.\" Cover image
+.    if \\n[#\\*[DOC_]COVER_IMAGE]=1 \{\
+.       DO_\\*[DOC_]COVER_IMAGE
+.       rr #\\*[DOC_]COVER_IMAGE
 .    \}
+.\" Start cover
+.    sp |\\n[#\\*[DOC_]COVER_START_POS]u-1v
+.    if !\\n[#PRINT_STYLE]=1 \
+.       if \\n[#\\*[DOC_]COVER_COLOR]=1 \
+.          COLOR \\*[$\\*[DOC_]COVER_COLOR]
 .    \\*[DOC_]COVER_H_POS
-.    fam \\*[$\\*[DOC_]COVER_TITLE_FAM]
-.    ft  \\*[$\\*[DOC_]COVER_TITLE_FT]
-.    ps  \\*[$\\*[DOC_]COVER_TITLE_PT_SIZE]
-.    ie \\n[#PRINT_STYLE]=1 \{\
-.       ie \\n[#SINGLE_SPACE]=1 \{ .vs \\n[#DOC_LEAD]u*2u \}
-.       el \{ .vs \\n[#DOC_LEAD]u \}
-.    \}
+.    if \\n[#\\*[DOC_]COVER_TITLE]=2 .ds DOC DOC
+.    fam \\*[$\\*[DOC_]COVER_\\*[DOC]TITLE_FAM]
+.    ft  \\*[$\\*[DOC_]COVER_\\*[DOC]TITLE_FT]
+.    ps  \\*[$\\*[DOC_]COVER_\\*[DOC]TITLE_SIZE_CHANGE]
+.    ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
 .    el .vs \\n[#\\*[DOC_]COVER_LEAD]u
-.    if \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.    if \\n[#\\*[DOC_]COVER_TITLE] \{\
-.       nr PDFHREF.VIEW.LEADING.H \\n[PDFHREF.VIEW.LEADING]
-.       nr PDFHREF.VIEW.LEADING   \\n[nl]u-1v-1000u
-.    \}
-.    if \\n[#\\*[DOC_]COVER_TITLE]=1 \{\
+.    nr PDFHREF.VIEW.LEADING \\n[PDFHREF.VIEW.LEADING.C]
+.\" Title and/or doctitle
+.    if (\\n[#\\*[DOC_]COVER_TITLE]=1):(\\n[#\\*[DOC_]COVER_TITLE]=2) \{\
 .       ie \\n[#PRINT_STYLE]=1 \{\
+.          vs \\n[.v]u*2u
+.          sp -1.5
 .          CAPS
 .          nr #ARG_NUM 0 1
 .          while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
@@ -6821,109 +7357,56 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .             as PDF_BM \\*[$TITLE_\\n[#ARG_NUM]]
 .          \}
 .          CAPS OFF
+.          vs
 .       \}
 .       el \{\
-.          nr #ARG_NUM 0 1
-.          while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el \
-.                PRINT "\\*[$TITLE_\\n[#ARG_NUM]]
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$TITLE_\\n[#ARG_NUM]]
-.          \}
-.       \}
-.       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
-.\" .          PDF_TITLE \\*[PDF_BM]
-.    \}
-.    if \\n[#\\*[DOC_]COVER_TITLE]=2 \{\
-.       ie \\n[#PRINT_STYLE]=1 \{\
-.          CAPS
-.          nr #ARG_NUM 0 1
-.          while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             UNDERSCORE "\\*[$\\*[DOC_]TITLE_\\n[#ARG_NUM]]"
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$\\*[DOC_]TITLE_\\n[#ARG_NUM]]
-.          \}
-.          CAPS OFF
-.       \}
-.       el \{\
-.          nr #ARG_NUM 0 1
-.          while \\n[#DOCTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$\\*[DOC_]TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el .PRINT \\*[$\\*[DOC_]TITLE_\\n[#ARG_NUM]]
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$\\*[DOC_]TITLE_\\n[#ARG_NUM]]
-.          \}
+.          DO_TITLE
+.          rm $PRFX
 .       \}
 .       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
-.\" .          PDF_TITLE \\*[PDF_BM]
 .    \}
+.\" Chapter
 .    if \\n[#\\*[DOC_]COVER_TITLE]=3 \{\
 .       ie \\n[#PRINT_STYLE]=1 \{\
 .          CAPS
-.          PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.          UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]
 .          CAPS OFF
 .       \}
-.       el \{\
-.          ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.             PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
-.          \}
-.          el .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.       \}
+.       el .DO_CHAPTER
 .       PDF_BOOKMARK 1 \
 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.\" .          PDF_TITLE \\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.       if \\n[#\\*[DOC_]COVER_CHAPTER_CAPS]=1 .CAPS off
 .    \}
+.\" Chapter title
 .    if \\n[#\\*[DOC_]COVER_TITLE]=4 \{\
 .       ie \\n[#PRINT_STYLE]=1 \{\
 .          CAPS
 .          nr #ARG_NUM 0 1
-.             ie \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u/2u
-.             el .vs \\n[#DOC_LEAD]u
-.             sp
-.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.          \}
+.          vs \\n[.v]u*2u
+.          sp -1.5
+.             while \\n[#CHAPTER_TITLE_NUM]>=\\n[#ARG_NUM] \{\
+.                UNDERSCORE "\\*[$CHAPTER_TITLE_\\n+[#ARG_NUM]]"
+.                if \\n[#ARG_NUM]>1 .as PDF_BM " \"
+.                as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
+.             \}
 .          CAPS OFF
-.          if \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u
+.          vs
 .       \}
 .       el \{\
-.          nr #ARG_NUM 0 1
-.          while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.          \}
+.          ds $PRFX CHAPTER_
+.          DO_TITLE
+.          rm $PRFX
 .       \}
 .       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
-.\" .          PDF_TITLE \\*[PDF_BM]
 .    \}
+.\" Chapter + chapter title
 .    if \\n[#\\*[DOC_]COVER_TITLE]=5 \{\
 .       ie \\n[#PRINT_STYLE]=1 \{\
 .          CAPS
-.          PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
+.          UNDERSCORE "\\*[$CHAPTER_STRING] \\*[$CHAPTER]
 .          CAPS OFF
 .       \}
-.       el \{\
-.          ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.             PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$CHAPTER_STRING] \\*[$CHAPTER]\m[]
-.          \}
-.          el .PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.       \}
+.       el .DO_CHAPTER
 .       if !'\\*[$CHAPTER_TITLE_1]'' \{\
 .          ie \\n[#PRINT_STYLE]=1 \{\
 .             ie \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u/2u
@@ -6931,255 +7414,269 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .             sp
 .             nr #ARG_NUM 0 1
 .             while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                UNDERSCORE "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
+.                PRINT "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
 .                if \\n[#ARG_NUM]>1 .as PDF_BM " \"
 .                as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
 .             \}
 .             if \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u
 .          \}
 .          el \{\
-.             fam \\*[$\\*[DOC_]COVER_CHAPTER_TITLE_FAM]
-.             ft  \\*[$\\*[DOC_]COVER_CHAPTER_TITLE_FT]
-.             ps  \\*[$\\*[DOC_]COVER_CHAPTER_TITLE_PT_SIZE]
-.             ALD \\n[.v]u/4u \"Put a little space before the chapter title
-.             nr #ARG_NUM 0 1
-.             while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.                   PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]\m[]
-.                \}
-.                el .PRINT \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.                if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.                as PDF_BM \\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]
-.             \}
+.             ds $PRFX CHAPTER_
+.             if \\n[#PRINT_STYLE]=2 .nr #CHAPTER+TITLE 1
+.             if !'\\*[$\\*[DOC_]COVER_CHAPTER_TITLE_SPACER]'' \
+.                sp \\*[$\\*[DOC_]COVER_CHAPTER_TITLE_SPACER]
+.             DO_TITLE
+.             rr #CHAPTER+TITLE
+.             rm $PRFX
 .          \}
 .       \}
 .       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
-.\" .          PDF_TITLE \\*[PDF_BM]
 .    \}
-.    if \\n[#\\*[DOC_]COVER_TITLE]=6 \{\
+.\"  (Doc)covertitle
+.\"    Titles to (doc)covers that are entered with
+.\"      .TITLE DOC_COVER title
+.\"    and included in (DOC)COVER with TITLE get treated as
+.\"    (DOC_)COVERTITLEs, so we define the appropriate strings and
+.\"    registers from their (DOC_)COVER_TITLE equivalents.
+.\"
+.    if (\\n[#\\*[DOC_]COVER_TITLE]=6):(\\n[#\\*[DOC_]COVER_TITLE]=7) \{\
+.       ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_FAM \
+\\*[$\\*[DOC_]COVER_TITLE_FAM]
+.       ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_FT \
+\\*[$\\*[DOC_]COVER_TITLE_FT]
+.       ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_COLOR \
+\\*[$\\*[DOC_]COVER_TITLE_COLOR]
+.       nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_COLOR \
+\\n[#\\*[DOC_]COVER_TITLE_COLOR]
+.       nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_CAPS  \
+\\n[#\\*[DOC_]COVER_TITLE_CAPS]
+.       nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_SMALLCAPS  \
+\\n[#\\*[DOC_]COVER_TITLE_SMALLCAPS]
+.       ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_LEAD  \
+\\*[$\\*[DOC_]COVER_TITLE_LEAD]
+.       ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_SIZE_CHANGE \
+\\*[$\\*[DOC_]COVER_TITLE_SIZE_CHANGE]
+.       nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE \
+\\n[#\\*[DOC_]COVER_TITLE_UNDERLINE]
+.       nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE_WEIGHT \
+\\n[#\\*[DOC_]COVER_TITLE_UNDERLINE_WEIGHT]
+.       nr #\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE_WEIGHT_ADJ \
+\\n[#\\*[DOC_]COVER_TITLE_UNDERLINE_WEIGHT_ADJ]
+.       ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_UNDERLINE_GAP \
+\\*[$\\*[DOC_]COVER_TITLE_UNDERLINE_GAP]
+.       ds $\\*[DOC_]COVER_\\*[DOC_]COVERTITLE_RULE_GAP \
+\\*[$\\*[DOC_]COVER_TITLE_RULE_GAP]
 .       ie \\n[#PRINT_STYLE]=1 \{\
 .          CAPS
+.          vs \\n[.v]u*2u
 .          nr #ARG_NUM 0 1
-.          while \\n[#\\*[DOC_]COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             UNDERSCORE "\\*[$\\*[DOC_]COVER_TITLE_\\n[#ARG_NUM]]"
+.          while \\n[#\\*[DOC_]COVERTITLE_NUM]>=\\n+[#ARG_NUM] \{\
+.             UNDERSCORE "\\*[$\\*[DOC_]COVERTITLE_\\n[#ARG_NUM]]"
 .                if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.                as PDF_BM \\*[$\\*[DOC_]COVER_TITLE_\\n[#ARG_NUM]]
-.          \}
-.          CAPS OFF
-.       \}
-.       el \{\
-.          nr #ARG_NUM 0 1
-.          while \\n[#\\*[DOC_]COVER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.             ie \\n[#\\*[DOC_]COVER_TITLE_COLOR]=1 \{\
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_TITLE_COLOR]]\
-\\*[$\\*[DOC_]COVER_TITLE_\\n[#ARG_NUM]]\m[]
-.             \}
-.             el .PRINT \\*[$\\*[DOC_]COVER_TITLE_\\n[#ARG_NUM]]
-.             if \\n[#ARG_NUM]>1 .as PDF_BM " \"
-.             as PDF_BM \\*[$\\*[DOC_]COVER_TITLE_\\n[#ARG_NUM]]
+.                as PDF_BM \\*[$\\*[DOC_]COVERTITLE_\\n[#ARG_NUM]]
 .          \}
+.          vs
+.          CAPS OFF
+.       \}
+.       el \{\
+.          ds $PRFX \\*[DOC_]COVER
+.          DO_TITLE
+.          rm $PRFX
 .       \}
 .       PDF_BOOKMARK 1 \\*[$PDF_\\*[DOC_]COVER_LABEL] \\*[PDF_BM]
-.\" .          PDF_TITLE \\*[PDF_BM]
-.    \}
-.    if \\n[#\\*[DOC_]COVER_TITLE] \{\
-.      nr PDFHREF.VIEW.LEADING \\n[PDFHREF.VIEW.LEADING.H]
-.      rr PDFHREF.VIEW.LEADING.H
 .    \}
-.    if !\\n[#DOC_TYPE]=2 \{\
-.       if \\n[#\\*[DOC_]COVER_SUBTITLE]=1 \{\
-.          fam \\*[$\\*[DOC_]COVER_SUBTITLE_FAM]
-.          ft  \\*[$\\*[DOC_]COVER_SUBTITLE_FT]
-.          ps  \\*[$\\*[DOC_]COVER_SUBTITLE_PT_SIZE]
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             TYPEWRITER
-.             ie \\n[#SINGLE_SPACE]=0 .vs \\n[#DOC_LEAD]u/2u
-.             el .vs \\n[#DOC_LEAD]u
-.             sp
-.          \}
-.          if \\n[#\\*[DOC_]COVER]=1 \{\
-.             ie !'\\*[$SUBTITLE_\\*[DOC_]COVER_1]'' \{\
-.                nr #SUBTITLES \\n[#SUBTITLE_\\*[DOC_]COVER_NUM]
-.                nr #NEXT_SUBTITLE 0 1
-.                while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
-.                   ie \\n[#\\*[DOC_]COVER_SUBTITLE_COLOR]=1 \{\
-.                      PRINT \
-\m[\\*[$\\*[DOC_]COVER_SUBTITLE_COLOR]]\
-\\*[$SUBTITLE_\\*[DOC_]COVER_\\n+[#NEXT_SUBTITLE]]\m[]
-.                   \}
-.                   el .PRINT \
-\\*[$SUBTITLE_\\*[DOC_]COVER_\\n+[#NEXT_SUBTITLE]]
-.                \}
-.             \}
-.             el \{\
-.                nr #SUBTITLES \\n[#SUBTITLE_NUM]
-.                nr #NEXT_SUBTITLE 0 1
-.                while \\n[#SUBTITLES]>\\n[#NEXT_SUBTITLE] \{\
-.                   ie \\n[#\\*[DOC_]COVER_SUBTITLE_COLOR]=1 \{\
-.                      PRINT \
-\m[\\*[$\\*[DOC_]COVER_SUBTITLE_COLOR]]\\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]]\m[]
-.                   \}
-.                   el .PRINT \\*[$SUBTITLE_\\n+[#NEXT_SUBTITLE]]
-.                \}
-.             \}
-.          \}
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             if \\n[#SINGLE_SPACE]=0 .vs
+.    ie !'\\*[DOC_]'' \
+.       if !\\n[#DOC_COVER_TITLE] .PDF_BOOKMARK 1 Cover page
+.    el \
+.       if !\\n[#COVER_TITLE] .PDF_BOOKMARK 1 Title page
+.    rr #\\*[DOC_]COVER_TITLE
+.\" Subtitle
+.    if \\n[#\\*[DOC_]COVER_SUBTITLE]=1 \{\
+.       ie \\n[#PRINT_STYLE]=1 \{\
+.          if !'\\*[$\\*[DOC_]COVER_SUBTITLE_1]'' \
+.             ds $PRFX \\*[DOC_]COVER_
+.          sp 2
+.          nr #ARG_NUM 0 1
+.          while \\n[#\\*[$PRFX]SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
+.             PRINT "\\*[$\\*[$PRFX]SUBTITLE_\\n[#ARG_NUM]]"
 .          \}
+.          rm $PRFX
 .       \}
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          if !r#\\*[DOC_]COVER_SUBTITLE .sp
+.       el \{\
+.          ie !'\\*[$\\*[DOC_]COVER_SUBTITLE_1]'' .ds $PRFX \\*[DOC_]COVER_SUB
+.          el .ds $PRFX SUB
+.          if !'\\*[$\\*[DOC_]COVER_SUBTITLE_SPACER]'' \
+.             sp \\*[$\\*[DOC_]COVER_SUBTITLE_SPACER]
+.          DO_SUBTITLE
+.          rm $PRFX
 .       \}
 .    \}
+.    if \\n[#PRINT_STYLE]=1 \
+.       if !r#\\*[DOC_]COVER_SUBTITLE .sp
+.\" Author (plus attribution)
 .    if \\n[#\\*[DOC_]COVER_AUTHOR]=1 \{\
-.       fam \\*[$\\*[DOC_]COVER_AUTHOR_FAM]
-.       ft  \\*[$\\*[DOC_]COVER_AUTHOR_FT]
-.       ps  \\*[$\\*[DOC_]COVER_AUTHOR_PT_SIZE]
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          TYPEWRITER
-.          ie \\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u
-.          el .vs \\n[#DOC_LEAD]u/2u
+.       ie \\n[#PRINT_STYLE]=1 \
 .          sp
+.       el \{\
+.          ie !'\\*[$\\*[DOC_]COVER_AUTHOR_LEAD]'' \
+.             vs \\*[$\\*[DOC_]COVER_AUTHOR_LEAD]
+.          el .vs \\n[#\\*[DOC_]COVER_LEAD]u
+.       \}
+.       if '\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]'' \
+.          ds $\\*[DOC_]COVER_ATTRIBUTE_STRING \
+              \\*[$ATTRIBUTE_STRING]
+.       ie !\\n[#PRINT_STYLE]=1 \{\
+.          fam \\*[$\\*[DOC_]COVER_ATTRIBUTE_FAM]
+.          ft  \\*[$\\*[DOC_]COVER_ATTRIBUTE_FT]
+.          ps \
+\\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_ATTRIBUTE_SIZE_CHANGE]
+.          if \\n[#\\*[DOC_]COVER_ATTRIBUTE_COLOR]=1 \
+.             COLOR \\*[$\\*[DOC_]COVER_ATTRIBUTE_COLOR]
+.          if \\n[#\\*[DOC_]COVER_ATTRIBUTE_CAPS]=1 .CAPS
+.          if \\n[#\\*[DOC_]COVER_ATTRIBUTE_SMALLCAPS]=1 .SMALLCAPS
+.          if !'\\*[$\\*[DOC_]COVER_ATTRIBUTE_SPACER]'' \
+.             sp \\*[$\\*[DOC_]COVER_ATTRIBUTE_SPACER]
+.          ie \\n[#\\*[DOC_]COVER_ATTRIBUTE_UNDERLINE] \{\
+.             ds $TITLE_TYPE \\*[DOC_]COVER_ATTRIBUTE
+.             ie \\n[#\\*[DOC_]COVER_ATTRIBUTE_UNDERLINE]=2 \
+.                UNDERSCORE2 \\*[$\\*[DOC_]COVER_ATTRIBUTE_UNDERLINE_GAP] \
+\\*[$\\*[DOC_]COVER_ATTRIBUTE_RULE_GAP] "\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]"
+.             el .UNDERSCORE \\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING] 
+.          \}
+.          el .PRINT "\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]"
+.          SMALLCAPS off
+.          CAPS off
+.          if \\n[#\\*[DOC_]COVER_ATTRIBUTE_COLOR]=1 \
+.             gcolor
 .       \}
-.       ie d$ATTRIBUTE_STRING_DO_CCOVER \{\
-.          ie \\n[#\\*[DOC_]COVER_ATTRIBUTE_COLOR]=1 \{\
-.             PRINT \
-\&\m[\\*[$\\*[DOC_]COVER_ATTRIBUTE_COLOR]]\
-\\*[$ATTRIBUTE_STRING_\\*[DOC_]COVER]\m[]
-.          \}
-.          el .PRINT \&\\*[$ATTRIBUTE_STRING_\\*[DOC_]COVER]
-.       \}
+.       el \
+.          PRINT "\\*[$\\*[DOC_]COVER_ATTRIBUTE_STRING]"
+.       ie \\n[#PRINT_STYLE]=1 .sp
 .       el \{\
-.          if d$ATTRIBUTE_STRING \{\
-.             ie \\n[#\\*[DOC_]COVER_ATTRIBUTE_COLOR]=1 \{\
-.                PRINT \
-\&\m[\\*[$\\*[DOC_]COVER_ATTRIBUTE_COLOR]]\\*[$ATTRIBUTE_STRING]\m[]
-.             \}
-.             el .PRINT \&\\*[$ATTRIBUTE_STRING]
-.          \}
+.          if !'\\*[$\\*[DOC_]COVER_AUTHOR_SPACER]'' \
+.             sp \\*[$\\*[DOC_]COVER_AUTHOR_SPACER]
 .       \}
-.       PRINT_AUTHORS
+.       if '\\$0'COVER' \
+.          ds $PRFX COVER_
+.       if '\\$0'DOC_COVER' \
+.          ds $PRFX DOC_COVER_
+.       DO_AUTHORS
+.       rm $PRFX
 .    \}
-.    fam \\*[$\\*[DOC_]COVER_DOCTYPE_FAM]
-.    ft  \\*[$\\*[DOC_]COVER_DOCTYPE_FT]
-.    ps  \\*[$\\*[DOC_]COVER_DOCTYPE_PT_SIZE]
-.    sp
+.\" Named doctype string
 .    if \\n[#DOC_TYPE]=3 \{\
 .       if \\n[#\\*[DOC_]COVER_DOCTYPE]=1 \{\
 .          ie \\n[#PRINT_STYLE]=1 \{\
 .             TYPEWRITER
-.             vs \\n[#DOC_LEAD]u
-.             UNDERSCORE2 "\\*[$DOC_TYPE]"
+.             sp 1.5
+.             UNDERSCORE2 3p 2p "\\*[$DOC_TYPE]
 .          \}
 .          el \{\
-.             nr #FROM_\\*[DOC_]COVER 1
-.             ie \\n[#\\*[DOC_]COVER_DOCTYPE_COLOR]=1 \{\
+.             fam \\*[$\\*[DOC_]COVER_DOCTYPE_FAM]
+.             ft  \\*[$\\*[DOC_]COVER_DOCTYPE_FT]
+.             ps \
+\\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_DOCTYPE_SIZE_CHANGE]
+.             if \\n[#\\*[DOC_]COVER_DOCTYPE_COLOR]=1 \
 .                COLOR \\*[$\\*[DOC_]COVER_DOCTYPE_COLOR]
-.                ie \\n[#\\*[DOC_]COVER_UNDERLINE]=1 \
-.                   UNDERSCORE \\*[$\\*[DOC_]COVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]"
-.                el .PRINT "\\*[$DOC_TYPE]"
-.             \}
-.             el \{\
-.                ie \\n[#\\*[DOC_]COVER_UNDERLINE]=1 \
-.                   UNDERSCORE \
-\\*[$\\*[DOC_]COVER_UNDERLINE_GAP] "\\*[$DOC_TYPE]"
-.                el .PRINT "\\*[$DOC_TYPE]"
-.             \}
-.             rr #FROM_\\*[DOC_]COVER
-.          \}
+.          sp
+.          if \\n[#\\*[DOC_]COVER_DOCTYPE_CAPS]=1 .CAPS
+.          if \\n[#\\*[DOC_]COVER_DOCTYPE_SMALLCAPS]=1 .SMALLCAPS
+.          if !'\\*[$\\*[DOC_]COVER_DOCTYPE_SPACER]'' \
+.             sp \\*[$\\*[DOC_]COVER_DOCTYPE_SPACER]
+.          ie \\n[#\\*[DOC_]COVER_DOCTYPE_UNDERLINE] \{\
+.             ds $TITLE_TYPE \\*[DOC_]COVER_DOCTYPE
+.             ie \\n[#\\*[DOC_]COVER_DOCTYPE_UNDERLINE]=2 \
+.                UNDERSCORE2 \\*[$\\*[DOC_]COVER_DOCTYPE_UNDERLINE_GAP] \
+\\*[$\\*[DOC_]COVER_DOCTYPE_RULE_GAP] "\\*[$DOC_TYPE]"
+.             el .UNDERSCORE "\\*[$DOC_TYPE]" 
+.          \}
+.          el .PRINT "\\*[$DOC_TYPE]"
+.          SMALLCAPS off
+.          CAPS off
+.          if \\n[#\\*[DOC_]COVER_DOCTYPE_COLOR]=1 \
+.             gcolor
+.          \}
+.       \}
+.    \}
+.\" Covertext
+.    if \\n[#\\*[DOC_]COVERTEXT]=1 \{\
+.       nr #DOING_COVERTEXT 1
+.       if !\\n[#\\*[DOC_]COVERTEXT_START_POS] .sp
+.       if \\n[#\\*[DOC_]COVERTEXT]=1 \{\
+.          ev \\*[DOC_]COVERTEXT
+.          nf
+.          \\*[DOC_]COVER_TEXT
+.          ev
 .       \}
+.       rr #\\*[DOC_]COVERTEXT
+.       rm \\*[DOC_]COVER_TEXT
+.       rr #DOING_COVERTEXT
+.       rr #\\*[DOC_]COVERTEXT_START_POS
 .    \}
 .    sp |\\n[#VISUAL_B_MARGIN]u
-.    ie \\n[#PRINT_STYLE]=1 \{\
-.       TYPEWRITER
-.       ie \\n[#SINGLE_SPACE]=1 .vs \\n[#DOC_LEAD]u
-.       el .vs \\n[#DOC_LEAD]u/2u
-.       sp
-.    \}
+.\" Copyright
+.    ie \\n[#PRINT_STYLE]=1 \
+.       if !\\n[#SINGLE_SPACE] .sp
 .    el \{\
 .       fam \\*[$\\*[DOC_]COVER_COPYRIGHT_FAM]
 .       ft  \\*[$\\*[DOC_]COVER_COPYRIGHT_FT]
-.       ps \\*[$\\*[DOC_]COVER_COPYRIGHT_PT_SIZE]
-.       vs \\n[.ps]u+\\n[#\\*[DOC_]COVER_MISC_AUTOLEAD]u
-.       nr #COPYRIGHT_V_ADJ \\n[#DOC_LEAD]-\\n[.v]
-.       sp \\n[#COPYRIGHT_V_ADJ]u
-.       rr #COPYRIGHT_V_ADJ
+.       ps \\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_COPYRIGHT_SIZE_CHANGE]
+.       nr #COPYRIGHT_V_POS \\n[#DOC_LEAD]-\\n[.v]
+.       sp \\n[#COPYRIGHT_V_POS]u
+.       rr #COPYRIGHT_V_POS
 .    \}
 .    if \\n[#\\*[DOC_]COVER_COPYRIGHT]=1 \{\
-.       if !'\\*[$COPYRIGHT_DOCCOVER]'' \{\
-.          ds $SAVED_COPYRIGHT \\*[$COPYRIGHT]
-.          ds $COPYRIGHT \\*[$COPYRIGHT_DOCCOVER]
-.       \}
 .       QUAD \\*[$\\*[DOC_]COVER_COPYRIGHT_QUAD]
-.       ie \\n[#\\*[DOC_]COVER_COPYRIGHT_COLOR]=1 \{\
-.          PRINT \m[\\*[$\\*[DOC_]COVER_COPYRIGHT_COLOR]]\\*[$COPYRIGHT]\m[]
-.       \}
-.       el .PRINT \\*[$COPYRIGHT]
-.       if d$SAVED_COPYRIGHT .ds $COPYRIGHT \\*[$SAVED_COPYRIGHT]
+.       if \\n[#\\*[DOC_]COVER_COPYRIGHT_COLOR]=1 \
+.          COLOR \\*[$\\*[DOC_]COVER_COPYRIGHT_COLOR]
+.       ie !'\\*[$COPYRIGHT_V_ADJ]'' \
+.          PRINT \v'\\*[$COPYRIGHT_V_ADJ]'\\*[$\\*[DOC_]COVER_COPYRIGHT]
+.       el \
+.          PRINT \\*[$\\*[DOC_]COVER_COPYRIGHT]
+.       if \\n[#\\*[DOC_]COVER_COPYRIGHT_COLOR]=1 \
+.          gcolor
 .    \}
-.    br
+.    sp |\\n[#VISUAL_B_MARGIN]u
+.\" Misc
 .    if \\n[#\\*[DOC_]COVER_MISC]=1 \{\
 .       if \\n[#PRINT_STYLE]=2 \{\
 .          fam \\*[$\\*[DOC_]COVER_MISC_FAM]
 .          ft  \\*[$\\*[DOC_]COVER_MISC_FT]
-.          ps \\*[$\\*[DOC_]COVER_MISC_PT_SIZE]
-.       \}
-.       QUAD \\*[$\\*[DOC_]COVER_MISC_QUAD]
-.       ie !'\\*[$MISC_\\*[DOC_]COVER_1]'' \{\
-.          nr #MISCS \\n[#MISC_\\*[DOC_]COVER_NUM]
+.          ps \\n[#DOC_PT_SIZE]u\\*[$\\*[DOC_]COVER_MISC_SIZE_CHANGE]
+.          vs \\*[$\\*[DOC_]COVER_MISC_LEAD]
+.          if \\n[#\\*[DOC_]COVER_MISC_COLOR]=1 \
+.             COLOR \\*[$\\*[DOC_]COVER_MISC_COLOR]
+.       \}
+.       ie !'\\*[$\\*[DOC_]COVER_MISC_1]'' \{\
+.          QUAD \\*[$\\*[DOC_]COVER_MISC_QUAD]
+.          da MISC_DIV
 .          nr #NEXT_MISC 0 1
-.          while \\n[#MISCS]>\\n[#NEXT_MISC] \{\
-.             ie \\n[#\\*[DOC_]COVER_MISC_COLOR]=1 \{\
-.                da MISC_DIV
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_MISC_COLOR]]\\*[$MISC_\\*[DOC_]COVER_\\n+[#NEXT_MISC]]\m[]
-.                br
-.                da
-.                rm $MISC_\\*[DOC_]COVER_\\n[#NEXT_MISC]
-.                rm $MISC_\\n[#NEXT_MISC]
-.             \}
-.             el \{\
-.                da MISC_DIV
-.                PRINT \\*[$MISC_\\*[DOC_]COVER_\\n+[#NEXT_MISC]]
-.                br
-.                da
-.                rm $MISC_\\*[DOC_]COVER_\\n[#NEXT_MISC]
-.                rm $MISC_\\n[#NEXT_MISC]
-.             \}
+.          while \\n[#\\*[DOC_]COVER_MISC_LINES]>=\\n+[#NEXT_MISC] \{\
+.             nop \\*[$\\*[DOC_]COVER_MISC_\\n[#NEXT_MISC]]
+.             br
 .          \}
-.          rm $MISC_\\n+[#NEXT_MISC]
+.          da
 .       \}
 .       el \{\
-.          nr #MISCS \\n[#MISC_NUM]
+.          QUAD \\*[$MISC_QUAD]
+.          da MISC_DIV
 .          nr #NEXT_MISC 0 1
-.          while (\\n[#MISCS]>=\\n+[#NEXT_MISC]) \{\
-.             ie \\n[#\\*[DOC_]COVER_MISC_COLOR]=1 \{\
-.                da MISC_DIV
-.                PRINT \
-\m[\\*[$\\*[DOC_]COVER_MISC_COLOR]]\\*[$MISC_\\n[#NEXT_MISC]]\m[]
-.                br
-.                da
-.             \}
-.             el \{\
-.                da MISC_DIV
-.                PRINT \\*[$MISC_\\n[#NEXT_MISC]]
-.                br
-.                da
-.             \}
-.             nr #MISC_DEPTH +\\n[dn]
+.          while \\n[#MISC_LINES]>=\\n+[#NEXT_MISC] \{\
+.             nop \\*[$MISC_\\n[#NEXT_MISC]]
+.             br
 .          \}
+.          da
 .       \}
-.       nr #MISC_DEPTH -\\n[#DOC_LEAD]
-.       sp |\\n[#VISUAL_B_MARGIN]u-\\n[#MISC_DEPTH]u
+.       nr #MISC_V_ADJ \\n[#DOC_LEAD]-\\n[.v]
+.       sp \\n[#MISC_V_ADJ]u
+.       sp -\\n[dn]u+1
 .       nf
 .       MISC_DIV
+.       if \\n[#MISC_COLOR]=1 .gcolor
+.       if \\n[#\\*[DOC_]COVER_MISC_COLOR]=1 .gcolor
 .       rm MISC_DIV
 .       rr #MISC_DEPTH
 .    \}
-.    if '\\$0'DO_COVER'     .nr #COVER_END 1
-.    if '\\$0'DO_DOC_COVER' .nr #DOC_COVER_END 1
 .    if \\n[TOC.RELOCATE]==1 \{\
 .       if !\\n[#COVER_BLANKPAGE] \
 .          if !rTOC_BH .TOC_AFTER_HERE
@@ -7200,33 +7697,29 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#
 .MAC END_COVER END
 .    EOL
-.    TRAP
+.    vpt
+.    if '\\*[$COVER_TYPE]'DOC_COVER_' .ds DOC DOC
+.    rm $COVER_TYPE
+.    if \\n[#DOC_TYPE]=5 .nr #SKIP 1
+.    nr #END_COVER 1
 .    NEWPAGE
+.    rr #NEWPAGE
+.    rr #SKIP
 .    if \\n[#PAGINATION_WAS_ON]=1 .nr % +1
-.    if \\n[#DOC_COVER_END]=1 \{\
-.       ie \\n[#DOC_COVER_BLANKPAGE]=1 \{\
-.          if \\n[TOC.RELOCATE] \
-.             if !\\n[#TOC_BH] .TOC_AFTER_HERE
-.          NEWPAGE
-.          rr #DOC_COVER_BLANKPAGE
-.          if !\\n[#DOCCOVERS_COUNT]=1 .nr % -2
-.       \}
-.       el \
-.          if !\\n[#DOCCOVERS_COUNT]=1 .nr #PAGE_NUM_ADJ -1
-.       rr #DOC_COVER_END
-.    \}
-.    if \\n[#COVER_END]=1 \{\
-.       ie \\n[#COVER_BLANKPAGE]=1 \{\
-.          if \\n[TOC.RELOCATE] \
-.             if !\\n[TOC_BH] .TOC_AFTER_HERE
-.          NEWPAGE
-.          rr #COVER_BLANKPAGE
-.          if !\\n[#COVERS_COUNT]=1 .nr % -2
-.       \}
-.       el \
-.          if !\\n[#COVERS_COUNT]=1 .nr #PAGE_NUM_ADJ -1
-.       rr #COVER_END
+.    ie \\n[#\\*[DOC]COVER_BLANKPAGE]=1 \{\
+.       if \\n[TOC.RELOCATE] \
+.          if !\\n[#TOC_BH] .TOC_AFTER_HERE
+.\" Without the empty PDF_BOOKMARK, (doc)cover BLANKPAGE causes
+.\" the PDF outline to place the first doc or chapter before the TOC,
+.\" even though PDF output is correct.
+.       PDF_BOOKMARK 1
+.       nop \&
+.       bp
+.       rr #\\*[DOC]COVER_BLANKPAGE
+.       if !\\n[#\\*[DOC]COVERS_COUNT]=1 .nr % -2
 .    \}
+.    el \
+.       if !\\n[#\\*[DOC]COVERS_COUNT]=1 .nr #PAGE_NUM_ADJ -1
 .    if !'\\n[.ev]'0' .ev
 .    if \\n[#PAGINATION_WAS_ON] \{\
 .       rr #PAGINATION_WAS_ON
@@ -7250,13 +7743,30 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    if \\n[#RECTO_VERSO] .nr #RV_POST_COVER 1
 .END
 \#
-\# Macro to begin document processing
+\# +++START THE DOCUMENT+++
+\#
+\# THE START MACRO
+\# ---------------
+\# *Arguments:
+\#   <none>
+\# *Function:
+\#   Macro to start document processing.  Reads in default document
+\#   style parameters and any parameters the user has changed before
+\#   issuing START.  Using the information gathered in the opening
+\#   macros, prints appropriate title (or chapter #), subtitle,
+\#   author and document type (if appropriate).
+\# *Notes:
+\#   The .PRINT \& (zero-width character) is required to get the
+\#   subsequent .sp request to work as advertised.
+\#
+\#   The overall document line length, family, and point-size
+\#   are stored in #DOC_L_LENGTH, $DOC_FAM, and #DOC_PT_SIZE for
+\#   use in the HEADER and FOOTER macros.
 \#
 .MAC START END
 .    nr #DOCS 1
-.    if \\n[TOC.RELOCATE]==2 \{\
+.    if \\n[TOC.RELOCATE]==2 \
 .       if !\\n[TOC_BH] .TOC_BEFORE_HERE
-.    \}
 .    if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
 .    if !\\n[#PRINT_STYLE] \{\
 .       PRINTSTYLE TYPEWRITE
@@ -7266,12 +7776,11 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       ta \\n[.l]u
 .       sp |1i-1v
 .       CENTER
-.       PRINT "You neglected to enter a PRINTSTYLE"
-.       fl
+.       PRINT "You neglected to enter a PRINTSTYLE."
 .       ab [mom]: PRINTSTYLE missing.  Aborting '\\n[.F]'.
 .    \}
 .    if \\n[#LINENUMBERS]=1 \{\
-.       nn
+.       nm
 .       NUMBER_LINES OFF
 .       nr #LINENUMBERS 2
 .    \}
@@ -7284,6 +7793,10 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
 .          rm $RESTORE_PAGENUM_STYLE
 .       \}
+.       if \\n[#PAGINATE_WAS_ON] \{\
+.          PAGINATE
+.          rr #PAGINATE_WAS_ON
+.       \}
 .    \}
 .    DEFAULTS
 .    nr #PAGE_TOP \\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
@@ -7291,35 +7804,17 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    if !r#EN_Q_AUTOLEAD  .nr #EN_Q_LEAD \\n[#EN_LEAD]
 .    if !r#EN_BQ_AUTOLEAD .nr #EN_BQ_LEAD \\n[#EN_LEAD]
 .\"  TOC/recto-verso stuff
-.    if !r@L_MARGIN .nr @L_MARGIN \\n[#DOC_L_MARGIN]
-.    if !r@R_MARGIN .nr @R_MARGIN \\n[#DOC_R_MARGIN]
+.    nr @L_MARGIN \\n[#DOC_L_MARGIN]
+.    nr @R_MARGIN \\n[#DOC_R_MARGIN]
 .\" Covers and doc covers
-.    if \\n[#DOC_COVERS]=1 \{\
-.       if \\n[#DOC_COVER]=1 \{\
-.          DO_DOC_COVER
-.          rr #DOC_COVER
-.          rr #DOC_COVER_TITLE
-.          rr #DOC_COVER_SUBTITLE
-.          rr #DOC_COVER_AUTHOR
-.          rr #DOC_COVER_DOCTYPE
-.          rr #DOC_COVER_COPYRIGHT
-.          rr #DOC_COVER_MISC
-.       \}
-.    \}
-.    if \\n[#COVERS]=1 \{\
-.       if \\n[#COVER]=1 \{\
-.          DO_COVER
-.          rr #COVER
-.          rr #COVER_TITLE
-.          rr #COVER_SUBTITLE
-.          rr #COVER_AUTHOR
-.          rr #COVER_DOCTYPE
-.          rr #COVER_COPYRIGHT
-.          rr #COVER_MISC
-.       \}
-.    \}
+.    if \\n[#DOC_COVERS]=1 \
+.       if \\n[#DOC_COVER]=1 .DO_DOC_COVER
+.    if \\n[#COVERS]=1 \
+.       if \\n[#COVER]=1 .DO_COVER
+.    nr PDFHREF.VIEW.LEADING \\n[PDFHREF.VIEW.LEADING.T]
 .    if !\\n[#TOC] .RV_HARD_SET_MARGINS
 .    if \\n[#COLUMNS] .COLUMNS \\n[#NUM_COLS] \\n[#GUTTER]u
+.    sp |\\n[#DOCHEADER_ADVANCE]u-\\n[#DOC_LEAD]u
 .\" Collect TITLE for TOC.
 .    if !\\n[#TOC]=1 \{\
 .       nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
@@ -7352,27 +7847,53 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .             rm $TOC_AUTHORS
 .          \}
 .       \}
-.       sp |\\n[#DOCHEADER_ADVANCE]u-\\n[#DOC_LEAD]u
-.       PDF_BOOKMARK 1 \\*[$TOC_TITLE_ITEM]
 .       as $TOC_TITLE_ITEM \|
-.       if \\n[#PREFIX_CH_NUM] \{\
+.       if \\n[#PREFIX_CH_NUM] \
+.          ds $TOC_CH_NUM \
+              \\n[#CH_NUM].\[toc-hd-num-spacer]
+.       if \\n[#TOC_PREFIX_CH_NUM] \{\
 .          rn $TOC_TITLE_ITEM $TOC_TITLE_ITEM_OLD
-.          ds $TOC_CH_NUM \\n[#CH_NUM].\[toc-hd-num-spacer]
+.          ds $TOC_CH_NUM \
+              \\n[#CH_NUM].\[toc-hd-num-spacer]
+.          if (\\n[#PAD_TOC_CH_NUM]=2)&(\\n[#CH_NUM]<10) \
+.                ds $TOC_CH_NUM \h'\w'\0'u'\\*[$TOC_CH_NUM]
+.          if \\n[#PAD_TOC_CH_NUM]=3 \{\
+.             if \\n[#CH_NUM]<10 \
+.                ds $TOC_CH_NUM \h'\w'\0'u*2u'\\*[$TOC_CH_NUM]
+.             if (\\n[#CH_NUM]>=10)&(\\n[#CH_NUM]<100) \
+.                ds $TOC_CH_NUM \h'\w'\0'u'\\*[$TOC_CH_NUM]
+.          \}
+.          if \\n[#PAD_TOC_CH_NUM]=4 \{\
+.             if \\n[#CH_NUM]<10 \
+.                ds $TOC_CH_NUM \h'\w'\0'u*3u'\\*[$TOC_CH_NUM]
+.             if (\\n[#CH_NUM]>=10)&(\\n[#CH_NUM]<100) \
+.                ds $TOC_CH_NUM \h'\w'\0'u*2u'\\*[$TOC_CH_NUM]
+.             if (\\n[#CH_NUM]>=100)&(\\n[#CH_NUM]<1000) \
+.                ds $TOC_CH_NUM \h'\w'\0'u'\\*[$TOC_CH_NUM]
+.          \}
 .          ds $TOC_TITLE_ITEM \\*[$TOC_CH_NUM]\\*[$TOC_TITLE_ITEM_OLD]
 .          rm $TOC_TITLE_ITEM_OLD
 .       \}
-.       TITLE_TO_TOC
+.    \}
+.    if !\\n[#TOC] \{\
+.       if !'\\*[$TOC_TITLE_ITEM]'' \{\
+.          PDF_BOOKMARK 1 \\*[$TOC_TITLE_ITEM]
+.          TITLE_TO_TOC
+.       \}
 .    \}
 .    if !\\n[#TOC] .nr #POST_TOP 1
 .\" End TITLE collection
 .    if \\n[#PRINT_PAGENUM_ON_PAGE_1] \{\
-.       br
-.       sp |\\n[#HEADER_MARGIN]u
-.       PRINT_PAGE_NUMBER
+.       if \\n[#PAGE_NUM_V_POS]=1 \{\
+.          br
+.          sp |\\n[#HEADER_MARGIN]u
+.          PRINT_PAGE_NUMBER
+.       \}
 .    \}
 .    rr #COLLATE
 .    rr #PAGINATION_STATE
 .\" End collate stuff
+.    sp |\\n[#DOCHEADER_ADVANCE]u-\\n[#DOC_LEAD]u
 .    ie \\n[#DOC_HEADER]=0 \{\
 .       if \\n[.ns] .rs
 .       if \\n[#DOC_TYPE]=4 \
@@ -7385,7 +7906,8 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       ie r#ADVANCE_FROM_TOP \{\
 .          br
 .          sp |\\n[#ADVANCE_FROM_TOP]u-1v
-.          if \\n[#ADJ_DOC_LEAD]=1 .SHIM
+.          if \\n[#ADJ_DOC_LEAD]=1 \
+.             if !\\n[#DOCHEADER_NO_SHIM] .SHIM_1
 .       \}
 .       el \{\
 .          br
@@ -7402,177 +7924,66 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    \}
 .    el \{\
 .       if \\n[#AUTO_LEAD] .nr #RESTORE_AUTO_LEAD 1
+.       nr #CURRENT_LEAD \\n[.v]
 .       if \\n[#PRINT_STYLE]=2 .vs \\n[#DOC_LEAD]u\\*[$DOCHEADER_LEAD_ADJ]
+.       nr #DOCHEADER_LEAD_DIFF \\n[#CURRENT_LEAD]-\\n[.v]
+.       sp +\\n[#DOCHEADER_LEAD_DIFF]u
 .       if \\n[#RESTORE_AUTO_LEAD] \{\
 .          nr #AUTO_LEAD 1
 .          nr #AUTOLEAD_VALUE  \\n[#SAVED_AUTOLEAD_VALUE]
 .       \}
-.       nr #DOCHEADER_LEAD \\n[#LEAD]
+.       nr #DOCHEADER_LEAD \\n[.v]
+.       vpt 0
 .\" Default doctype
 .       if \\n[#DOC_TYPE]=1 \{\
-.          if \\n[.ns] .rs
-.          ev DOCHEADER
-.          if \\n[#DOCHEADER_COLOR]=1 \{\
-.             nf
-\m[\\*[$DOCHEADER_COLOR]]
-.             EOL
+.          if \\n[.ns] \{\
+.             rs
+.             nop \&
+.             sp -1
 .          \}
+.          ev DOCHEADER
+.          evc 0
 .          L_MARGIN \\n[#DOC_L_MARGIN]u
 .          LL       \\n[#DOC_L_LENGTH]u
 .          ta \\n[.l]u
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             DOC_HEADER_QUAD
-.             TYPEWRITER
-.             if !\\n[#SINGLE_SPACE] \{\
-.                vs (\\n[#DOC_LEAD]u/2u)+(\\n[.v]u/3u)
-.                sp |\\n[#T_MARGIN]u-1v
-.             \}
-.             if !'\\*[$TITLE_1]'' \{\
-.                CAPS
-.                nr #ARG_NUM 0 1
-.                while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                   UNDERSCORE 3p "\\*[$TITLE_\\n[#ARG_NUM]]"
-.                \}
-.                CAPS OFF
-.             \}
-.             if !'\\*[$SUBTITLE]'' \{\
-.                sp
-.                nr #ARG_NUM 0 1
-.                while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                   UNDERSCORE 3p "\\*[$SUBTITLE_\\n[#ARG_NUM]]"
-.                \}
-.             \}
-.             if !'\\*[$AUTHOR_1]'' \{\
-.                sp
-.                PRINT \&\\*[$ATTRIBUTE_STRING]
-.                nr #AUTHORS \\n[#AUTHOR_NUM]
-.                nr #NEXT_AUTHOR 0 1
-.                if !\\n[#SINGLE_SPACE] .vs (\\n[#DOC_LEAD]u/2u)+(\\n[.v]u/3u)
-.                while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                   PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
-.                \}
-.             \}
-.          \}
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             DEFAULT_DOCHEADER
-.          \}
+.          if \\n[#PRINT_STYLE]=1 .DEFAULT_DOCHEADER_TYPEWRITE
+.          if \\n[#PRINT_STYLE]=2 .DEFAULT_DOCHEADER
 .          ev
 .       \}
 .\" Chapter doctype
 .       if \\n[#DOC_TYPE]=2 \{\
 .          if \\n[.ns] .rs
 .          ev DOCHEADER
-.          if \\n[#DOCHEADER_COLOR]=1 \{\
-.             nf
-\m[\\*[$DOCHEADER_COLOR]]
-.             EOL
-.          \}
+.          evc 0
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             COLOR \\*[$DOCHEADER_COLOR]
 .          L_MARGIN \\n[#DOC_L_MARGIN]u
 .          LL       \\n[#DOC_L_LENGTH]u
 .          ta \\n[.l]u
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             CENTER
-.             TYPEWRITER
-.             if !\\n[#SINGLE_SPACE] \{\
-.                vs (\\n[#DOC_LEAD]u/2u)+(\\n[.v]u/3u)
-.                sp |\\n[#T_MARGIN]u-1v
-.             \}
-.             ie '\\*[$CHAPTER]'' \{\
-.                CAPS
-.                ie !'\\*[$CHAPTER_TITLE]'' \{\
-.                   nr #ARG_NUM 0 1
-.                   while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                      UNDERSCORE 3p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
-.                   \}
-.                \}
-.                el \{\
-.                   CAPS
-.                   UNDERSCORE 3p "\\*[$CHAPTER_STRING]"
-.                \}
-.                CAPS OFF
-.                RLD 1v
-.             \}
-.             el \{\
-.                CAPS
-.                PRINT \\*[$CHAPTER_STRING] \\*[$CHAPTER]
-.                CAPS OFF
-.                if !'\\*[$CHAPTER_TITLE]'' \{\
-.                   sp
-.                   nr #ARG_NUM 0 1
-.                   while \\n[#CHAPTER_TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                      UNDERSCORE 3p "\\*[$CHAPTER_TITLE_\\n[#ARG_NUM]]"
-.                   \}
-.                \}
-.                RLD 1v
-.             \}
-.             vs \\n[#DOC_LEAD]u
-.             if \\n[#SINGLE_SPACE] .sp 2
-.          \}
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             CHAPTER_DOCHEADER
-.             di DOCHEADER_DIVERSION \" This diversion is only
-.             br                     \" necessary to find the depth of the
-.             CHAPTER_DOCHEADER      \" docheader
-.             br
-.             di
-.             nr #DOCHEADER_DEPTH \\n[dn]-\\n[#DOCHEADER_LEAD] \" Storing the depth (height) of the diversion
-.                                                              \" in #DOCHEADER_DEPTH
-.             rm DOCHEADER_DIVERSION                           \" Removing the diversion macro
-.          \}
+.          if \\n[#PRINT_STYLE]=1 .CHAPTER_DOCHEADER_TYPEWRITE
+.          if \\n[#PRINT_STYLE]=2 .CHAPTER_DOCHEADER
 .          ev
 .       \}
 .\" Named
 .       if \\n[#DOC_TYPE]=3 \{\
-.          if \\n[.ns] .rs
-.          ev DOCHEADER
-.          if \\n[#DOCHEADER_COLOR]=1 \{\
-.             nf
-\m[\\*[$DOCHEADER_COLOR]]
-.             EOL
+.          if \\n[.ns] \{\
+.             rs
+.             nop \&
+.             sp -1
 .          \}
+.          ev DOCHEADER
+.          evc 0
+.          if \\n[#DOCHEADER_COLOR]=1 \
+.             COLOR \\*[$DOCHEADER_COLOR]
 .          L_MARGIN \\n[#DOC_L_MARGIN]u
 .          LL       \\n[#DOC_L_LENGTH]u
 .          ta \\n[.l]u
 .          if \\n[#PRINT_STYLE]=1 \{\
-.             CENTER
-.             TYPEWRITER
-.             if !\\n[#SINGLE_SPACE] \{\
-.                vs (\\n[#DOC_LEAD]u/2u)+(\\n[.v]u/3u)
-.                sp |\\n[#T_MARGIN]u-1v
-.             \}
-.             if !'\\*[$TITLE_1]'' \{\
-.                CAPS
-.                nr #ARG_NUM 0 1
-.                while \\n[#TITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                   UNDERSCORE 3p "\\*[$TITLE_\\n[#ARG_NUM]]"
-.                \}
-.                CAPS OFF
-.             \}
-.             if !'\\*[$SUBTITLE]'' \{\
-.                sp
-.                nr #ARG_NUM 0 1
-.                while \\n[#SUBTITLE_NUM]>=\\n+[#ARG_NUM] \{\
-.                   UNDERSCORE 3p "\\*[$SUBTITLE_\\n[#ARG_NUM]]"
-.                \}
-.             \}
-.             if !'\\*[$AUTHOR_1]'' \{\
+.             DEFAULT_DOCHEADER_TYPEWRITE
+.             if !\\n[#NO_PRINT_DOCTYPE] \{\
 .                sp
-.                PRINT \&\\*[$ATTRIBUTE_STRING]
-.                nr #AUTHORS \\n[#AUTHOR_NUM]
-.                nr #NEXT_AUTHOR 0 1
-.                if !\\n[#SINGLE_SPACE] .vs (\\n[#DOC_LEAD]u/2u)+(\\n[.v]u/3u)
-.                while \\n[#AUTHORS]>\\n[#NEXT_AUTHOR] \{\
-.                   PRINT \\*[$AUTHOR_\\n+[#NEXT_AUTHOR]]
-.                \}
-.             \}
-.             ie !\\n[#SINGLE_SPACE] .sp 2
-.             el .sp
-.             ie \\n[#DOCTYPE_UNDERLINE] \{\
-.             UNDERSCORE2 3p "\\*[$DOC_TYPE]"
+.                UNDERSCORE2 3p 2p "\\*[$DOC_TYPE]"
 .             \}
-.             el \
-.                PRINT "\\*[$DOC_TYPE]"
-.             if \\n[#SINGLE_SPACE]=1 .sp
 .          \}
 .          if \\n[#PRINT_STYLE]=2 .NAMED_DOCHEADER
 .          ev
@@ -7597,26 +8008,66 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .             ta \\n[.l]u
 .          \}
 .       \}
+.       nr #NO_PRINT_AUTHOR  1
+.       nr #NO_PRINT_DOCTYPE 1
 .    \}
 .    vs \\n[#DOC_LEAD]u
-.    if \\n[#ADJ_DOC_LEAD]=1 \{\
-.       ie \\n[#ADVANCE_FROM_TOP]=0 \
-.          if \\n[#DOC_HEADER]=1 .SHIM
-.       el .rr #ADVANCE_FROM_TOP
-.    \}
-.    mk dc
+.    if \\n[#PRINT_STYLE]=1 \
+.       if \\n[#SINGLE_SPACE]=1 .sp
+.    if \\n[#ADJ_DOC_LEAD]=1 \
+.       if \\n[#ADVANCE_FROM_TOP]=0 \
+.          if \\n[#DOC_HEADER]=1 \
+.             if !\\n[#DOCHEADER_NO_SHIM] .SHIM_1
+.    if \\n[#COLUMNS] .mk dc
+.    FAMILY \\*[$DOC_FAM]
 .    QUAD \\*[$DOC_QUAD]
 .    CLEANUP_DEFAULTS
 .    nr #START_FOR_FOOTERS 1
 .    if !\\n[#DOC_TYPE]=4 .em TERMINATE
 .    if \\n[#LINENUMBERS]=2 \{\
-.       NUMBER_LINES RESUME
+.       ie \\n[#PER_SECTION] .NUMBER_LINES 1
+.       el .NUMBER_LINES RESUME
 .       nr #LINENUMBERS 1
 .    \}
 .    if \\n[#RUN_ON]=1 \{\
 .       if \\n[#FN_MARKER_STYLE]=1 .RUNON_WARNING
 .       if \\n[#FN_MARKER_STYLE]=2 .RUNON_WARNING
 .    \}
+.    nr PDFHREF.VIEW.LEADING \\n[PDFHREF.VIEW.LEADING.H]
+.    vpt
+.    if !r flex .nr flex 1
+.    nr flex-spaces 0
+.\" If one-page, don't flex.
+.    if !dPDF.EXPORT \{\
+.       if \\n[#FLEX_ACTIVE] \{\
+.          if !\\n[#NO_FLEX] \{\
+.             if d pre-toc-\\n%@\\n[#COL_NUM] \
+.                nr #NO_FLEX 1
+.             if d pre-list-\\n%@\\n[#COL_NUM] \
+.                nr #NO_FLEX 1
+.             if d page-\\n%@\\n[#COL_NUM] \
+.                nr #NO_FLEX 1
+.             if '\\*[last-page]'\\n%@\\n[#COL_NUM]' \
+.                nr #NO_FLEX 1
+.          \}
+.       \}
+.    \}
+.    if \\n[#DOC_TYPE]=5 \{\
+.       if \\n[#HDRFTR_BOTH] \
+.          HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]"
+.       if \\n[#SLIDE_HEADERS] .HEADER
+.       if \\n[#HDRFTR_BOTH] \
+.          FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
+.       if \\n[#SLIDE_FOOTERS] \
+.          PRINT_FOOTER
+.       sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.       vpt
+.    \}
+.END
+\#
+.MAC RR_ADVANCE_FROM_TOP END
+.    rr #ADVANCE_FROM_TOP
+.    ch RR_ADVANCE_FROM_TOP
 .END
 \#
 .MAC CLEANUP_DEFAULTS END
@@ -7627,6 +8078,8 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    rr #MISCS
 .    rr #NEXT_AUTHOR
 .    rr #NEXT_MISC
+.    wh \\n[nl]u+1u RR_ADVANCE_FROM_TOP
+.    rr #DOCHEADER_NO_SHIM
 .END
 \#
 \# ====================================================================
@@ -7636,7 +8089,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \# DOCUMENT HEADER
 \# ---------------
 \# *Argument:
-\#   <none> | <anything> [distance to advance from top of page]
+\#   <none> | <anything> [distance to advance from top of page] [NO_SHIM]
 \# *Function:
 \#   Turns printing of document header on or off.  If a second
 \#   numeric argument with units of measure is given, advances that
@@ -7648,10 +8101,15 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   (with a unit of measure).
 \#
 .MAC DOCHEADER END
-.    ie '\\$1'' .nr #DOC_HEADER 1
-.    el \{\
-.       if !'\\$2'' .nr #ADVANCE_FROM_TOP (\\$2)
+.    if \\n[#NUM_ARGS]=0 .nr #DOC_HEADER 1
+.    if \\n[#NUM_ARGS]=1 \{\
+.       ie '\\$1'NO_SHIM' .nr #DOCHEADER_NO_SHIM 1
+.       el .nr #DOC_HEADER 0
+.    \}
+.    if \\n[#NUM_ARGS]>1 \{\
 .       nr #DOC_HEADER 0
+.       if \B'\\$2' .nr #ADVANCE_FROM_TOP \\$2
+.       if '\\$3'NO_SHIM' .nr #DOCHEADER_NO_SHIM 1
 .    \}
 .END
 \#
@@ -7802,10 +8260,10 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    nr #RESET_TRAPS 1
 .    if !\\n[#ADJ_DOC_LEAD] .nr #REMOVE_ADJ 1
 .    if !'\\$0'DOC_LEAD' \{\
-.       if '\\$0'EN_LEAD' .nr #DOC_LEAD \\n[#EN_LEAD]
+.       if '\\$0'EN_LEAD'  .nr #DOC_LEAD \\n[#EN_LEAD]
 .       if '\\$0'BIB_LEAD' .nr #DOC_LEAD \\n[#BIB_LEAD]
 .       if '\\$0'TOC_LEAD' .nr #DOC_LEAD \\n[#TOC_LEAD]
-.       if '\\$2'ADJUST' .TRAPS
+.       if '\\$2'ADJUST'   .TRAPS
 .       rr #RESET_TRAPS
 .    \}
 .END
@@ -7834,7 +8292,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \# *Argument:
 \#   None
 \# *Function:
-\#   Advances to the next "valid" baseline.
+\#   Advances to the next valid baseline.
 \# *Notes:
 \#   If a user plays around with spacing in a doc (say, with ALD),
 \#   it isn't easy to get mom back on track so she can achieve
@@ -7844,37 +8302,161 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \# First, a little convenience macro
 \#
 .MAC PROCESS_SHIM END
-.    while \\n+[#VALID_BASELINE]<\\n[#CURRENT_V_POS] \{\
-.
+.    if !\\n[nl]=\\n[#VALID_BASELINE] \{\
+.       while \\n+[#VALID_BASELINE]<\\n[#CURRENT_V_POS] .
+.       nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
 .    \}
-.    nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
 .END
 \#
 \# And a macro to disable SHIM
 \#
 .MAC NO_SHIM END
-.    ie '\\$1'' .nr #NO_SHIM 1
-.    el .rr #NO_SHIM
+.    ie '\\$1'' \{\
+.       nr #NO_SHIM 1
+.       nr #FLEX_ACTIVE 1
+.    \}
+.    el \{\
+.       rr #NO_SHIM
+.       rr #SHIM
+.       rr #FLEX_ACTIVE 1
+.   \}
 .END
 \#
 .nr #NO_SHIM 2 \" Restored to 1 in DEFAULTS.
 \#
 .MAC SHIM END
-.    ie \\n[#NO_SHIM] .return
-.    el \{\
-.       nr #VALID_BASELINE \\n[#T_MARGIN]-\\n[#DOC_LEAD] \\n[#DOC_LEAD]
-.       if !r#CURRENT_V_POS .nr #CURRENT_V_POS \\n[.d]
-.       ie \\n[#ADVANCE_FROM_TOP] \{\
-.          ie \\n[#CURRENT_V_POS]<(\\n[#T_MARGIN]-1v) \{\
-.             while \\n-[#VALID_BASELINE]>\\n[#CURRENT_V_POS] .
-.             nr #VALID_BASELINE +\\n[#DOC_LEAD]
-.             nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
-.          \}
-.          el .PROCESS_SHIM
+.    if \\n[#NO_SHIM] \
+.       if !'\\$0'SHIM_1' .return
+.    if !\\n[#NO_FLEX] \{\
+.       if !'\\$0'SHIM_1' \{\
+.          tm1 "[mom]: 
+SHIM, line \\n[.c], is incompatible with flex-spacing, which is enabled.
+.          tm1 "       
+Flex-spacing must be disabled with NO_FLEX before using SHIM.
+.          ab [mom]: Aborting '\\n[.F]', line \\n[.c].
+.       \}
+.    \}
+.    nr #VALID_BASELINE \\n[#T_MARGIN]-\\n[#DOC_LEAD] \\n[#DOC_LEAD]
+.    if !r#CURRENT_V_POS .nr #CURRENT_V_POS \\n[.d]
+.    ie \\n[#ADVANCE_FROM_TOP] \{\
+.       ie \\n[#CURRENT_V_POS]<(\\n[#T_MARGIN]-1v) \{\
+.          while \\n-[#VALID_BASELINE]>\\n[#CURRENT_V_POS] .
+.          nr #VALID_BASELINE +\\n[#DOC_LEAD]
+.          nr #SHIM \\n[#VALID_BASELINE]-\\n[#CURRENT_V_POS]
 .       \}
 .       el .PROCESS_SHIM
-'       sp \\n[#SHIM]u
-.       rr #CURRENT_V_POS
+.    \}
+.    el .PROCESS_SHIM
+.    nr #SHIM_MAX \\n[#DOC_LEAD]*10/15
+.    if !\\n[#CALCULATE_ONLY] \{\
+.       if !\\n[defer-count] \
+.          if \\n[#SHIM]>\\n[#SHIM_MAX] .sp -1
+'          sp \\n[#SHIM]u
+.       \}
+.    rr #CURRENT_V_POS
+.END
+\#
+.ALIAS SHIM_1 SHIM
+\#
+\# ====================================================================
+\#
+\# +++FLEX SPACING+++
+\#
+\# INSERT FLEX SPACE
+\# -----------------
+\# *Arguments:
+\#   FORCE
+\# *Function:
+\#   Inserts flexible whitespace ("flex-space").
+\# *Notes:
+\#   FORCE restores flex-spacing if an .ns is preventing it.
+\#   Useful in conjunction with deferred floated material that
+\#   plants an .ns after outputting the last deferred float.
+\#
+.MAC FLEX END
+.    if !\\n[#NO_SHIM] \{\
+.       if \\n[#NO_FLEX] \{\
+.          tm1 "[mom]: \
+FLEX, line \\n[.c], is incompatible with shimming, which is presently enabled.
+.          tm1 "       \
+Shimming must be disabled with NO_SHIM before using FLEX.
+.          ab   [mom]: Aborting '\\n[.F]', line \\n[.c].
+.       \}
+.    \}
+.    if '\\$1'FORCE' \{\
+.       nr flex:force 1
+.       return
+.    \}
+.    if !\\n[#NO_FLEX] \{\
+.       if !\\n[.ns] \{\
+.          if !\\n[.t]<=\\n[.v] \{\
+.             nr flex-spaces +1
+.             if dflex-space:\\n[flex]@\\n[#COL_NUM] \{\
+.                sp \\*[flex-space:\\n[flex]@\\n[#COL_NUM]]
+.             \}
+.          \}
+.       \}
+.    \}
+.END
+\#
+.MAC NO_FLEX END
+.    rr flexed
+.    ie '\\$1'' \{\
+.       nr #NO_FLEX 1
+.       if \\n[#FLEX_ACTIVE] .rr #FLEX_ACTIVE
+.    \}
+.    el \
+.       if !\\n[#DOC_TYPE]=5 .rr #NO_FLEX
+.END
+\#
+\# CALCULATE FLEX SPACES
+\# ---------------------
+\# *Function:
+\#   Derives flex-space size by dividing the space remaining before
+\#   FOOTER by the number of times FLEX was used on the page/col.
+\# *Notes:
+\#   .h is reliable for determining space remaining, but can't be used
+\#   for columns because it can't be zeroed from one col to the
+\#   next.  Workaround is to use nl for columns and compensate for
+\#   .br's, .sp's, and .ne's.  Here be dragons.
+\#
+.MAC CALCULATE_FLEX END
+.    nr flex:target-pos \\n[.p]+\\n[#VARIABLE_FOOTER_POS]-1
+.    nr flex:current-pos \\n[.h]-\\n[.v]
+.    if \\n[#COLUMNS] \{\
+.       ie \\n[.trunc] \
+.          nr flex:current-pos \\n[nl]-\\n[.v]-(\\n[.trunc]-1)
+.       el .nr flex:current-pos \\n[nl]-\\n[.v]
+.       if '\\n[.ev]'tbl*end' \{\
+.          nr flex:current-pos \\n[nl]-(\\n[.trunc]-1)
+.          if \\n[tbl*boxed] .nr flex:current-pos -.65v
+.       \}
+.       ie \\n[nl-from-heading] \{\
+.          nr flex:current-pos \\n[nl-from-heading]-\\n[.v]
+.          rr nl-from-heading
+.       \}
+.       el \{\
+.          if !\\n[.pe] \{\
+.             if \\n[nl]=(\\n[.p]+(\\n[#VARIABLE_FOOTER_POS]-1)) \
+.                nr flex-spaces -1
+.          \}
+.       \}
+.    \}
+.    nr flex:space-remaining \
+        \\n[flex:target-pos]-\\n[flex:current-pos]
+.    if \\n[flex-spaces] \{\
+.       nr flex-space:\\n[flex]@\\n[#COL_NUM] \
+           \\n[flex:space-remaining]/\\n[flex-spaces]
+.       if dPDF.EXPORT \{\
+.          tm .ds flex-space:\\n[flex]@\\n[#COL_NUM] \
+              \\n[flex-space:\\n[flex]@\\n[#COL_NUM]]u
+.\" For debugging: catch edge-cases that result in negative
+.\" flex-spacing and don't apply flex to the page/column.
+.          if \\n[flex-space:\\n[flex]@\\n[#COL_NUM]]<0 \{\
+.             tm .ds flex-space:\\n[flex]@\\n[#COL_NUM] 0
+.             tm .ds Negative flex space \\n%@\\n[#COL_NUM] (\\n[flex-space:\\n[flex]@\\n[#COL_NUM]])
+.          \}
+.       \}
 .    \}
 .END
 \#
@@ -7897,10 +8479,16 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       if !'\\$1'COVER' .nr #NEITHER 1
 .    if !'\\$1'COVER' \
 .       if !'\\$1'DOC_COVER' .nr #NEITHER 1
-.    if '\\$1'DOC_COVER' \
-.       ds $ATTRIBUTE_STRING_DOC_COVER \\$2
-.    if '\\$1'COVER' \
-.       ds $ATTRIBUTE_STRING_COVER \\$2
+.    if '\\$1'DOC_COVER' \{\
+.       ds $DOC_COVER_ATTRIBUTE_STRING \\$2
+.       if '\\*[$DOC_COVER_ATTRIBUTE_STRING]'' \
+.          ds $DOC_COVER_ATTRIBUTE_STRING \&
+.    \}
+.    if '\\$1'COVER' \{\
+.       ds $COVER_ATTRIBUTE_STRING \\$2
+.       if '\\*[$COVER_ATTRIBUTE_STRING]'' \
+.          ds $COVER_ATTRIBUTE_STRING \&
+.    \}
 .    if \\n[#NEITHER]=1 \{\
 .       ds $ATTRIBUTE_STRING \\$1
 .       rr #NEITHER
@@ -7959,11 +8547,6 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    ds $FINIS_STRING \\$1
 .END
 \#
-.MAC FINIS_STRING_CAPS END
-.    ie '\\$1'' .nr #FINIS_STRING_CAPS 1
-.    el .nr #FINIS_STRING_CAPS 0
-.END
-\#
 \# ====================================================================
 \#
 \# +++RECTO/VERSO+++
@@ -7990,6 +8573,11 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \# *Function:
 \#   Forces doccover and cover pages to recto
 \#
+.MAC FORCE_RECTO END
+.    ie '\\$1'' .nr #FORCE_RECTO 1
+.    el .rr #FORCE_RECTO
+.END
+\#
 .MAC RV_HARD_SET_MARGINS END
 .    DOC_LEFT_MARGIN  \\n[@L_MARGIN]u
 .    DOC_RIGHT_MARGIN \\n[@R_MARGIN]u
@@ -8220,7 +8808,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    nr #EPI_DEPTH \\n[#DIVER_DEPTH]-\\n[#EPI_LEAD]
 .    nr #EPI_LINES \\n[#EPI_DEPTH]/\\n[#EPI_LEAD]
 .    ie \\n[#START] \{\
-.       RLD \\n[#SHIM]u
+.       if !\\n[#NO_SHIM] .RLD \\n[#SHIM]u
 .       nr #EPI_WHITESPACE (\\n[#DOC_LEAD]*\\n[#EPI_LINES])-\\n[#EPI_DEPTH]
 .       while \\n[#EPI_WHITESPACE]>\\n[#DOC_LEAD] \{\
 .          nr #EPI_WHITESPACE -\\n[#DOC_LEAD]
@@ -8286,18 +8874,22 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       \}
 .    \}
 .    if \\n[#EPIGRAPH]=2 \{\
-.       ie \\n[#EPI_OFFSET_VALUE] \
+.       ie !\\n[#EPI_OFFSET_VALUE]=0 \
 .          nr #EPI_OFFSET \
 \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
-.       el .nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
+.       el \
+.          if !'\\*[$EPI_OFFSET_VALUE]'' \
+.             nr #EPI_OFFSET \\n[#L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
 .       if \\n[#COLUMNS] \{\
-.          ie r#EPI_OFFSET_VALUE \
+.          ie !\\n[#EPI_OFFSET_VALUE]=0 \
 .             nr #EPI_OFFSET \
 \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#EPI_OFFSET_VALUE])
-.          el .nr #EPI_OFFSET \
+.          el \
+.             if !'\\*[$EPI_OFFSET_VALUE]'' \
+.                nr #EPI_OFFSET \
 \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$EPI_OFFSET_VALUE]
 .       \}
-.       po \\n[#EPI_OFFSET]u
+.       if !\\n[#EPI_OFFSET]=0 .po \\n[#EPI_OFFSET]u
 .    \}
 .    nf
 .    EPI_TEXT
@@ -8410,22 +9002,36 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    ALD \\n[#DOC_LEAD]u
 .    CENTER
 .    if \\n[#FINIS_STRING_CAPS]=1 .CAPS
-.    if \\n[#PRINT_STYLE]=1 .PRINT "--\\*[$FINIS_STRING]--
+.    if \\n[#PRINT_STYLE]=1 \{\
+.       ie !\\n[#FINIS_NO_DASHES] .PRINT "--\\*[$FINIS_STRING]--
+.       el .PRINT "\\*[$FINIS_STRING]
+.    \}
 .    if \\n[#PRINT_STYLE]=2 \{\
-.       ie \\n[#FINIS_COLOR] \
-.          PRINT \
-\m[\\*[$FINIS_COLOR]]\v'-\\n[#EM_ADJUST]u'\[em]\v'+\\n[#EM_ADJUST]u'\
-\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\[em]\m[]\c
-.       el .PRINT \
-\v'-\\n[#EM_ADJUST]u'\[em]\v'+\\n[#EM_ADJUST]u'\
-\\*[$FINIS_STRING]\v'-\\n[#EM_ADJUST]u'\*[FU1]\[em]\m[]\c
+.       if \\n[#FINIS_COLOR]=1 .COLOR \\*[$FINIS_COLOR]
+.       ie !\\n[#FINIS_NO_DASHES] .ds $FINIS_DASH \
+\v'-\\n[#EM_ADJUST]u'\[em]\v'+\\n[#EM_ADJUST]u'
+.       el .rm $FINIS_DASH
+.       PRINT \
+\\*[$FINIS_DASH]\\*[$FINIS_STRING]\\*[$FINIS_DASH]\c
 .    \}
 .    EL
+.    if \\n[#FINIS_COLOR]=1 .gcolor
 .    if \\n[#FINIS_STRING_CAPS]=1 .CAPS OFF
 .    ev
 .    pdfsync
 .END
 \#
+.MAC FINIS_STRING_CAPS END
+.    ie '\\$1'' .nr #FINIS_STRING_CAPS 1
+.    el .nr #FINIS_STRING_CAPS 0
+.END
+.
+.ALIAS FINIS_CAPS FINIS_STRING_CAPS
+\#
+.MAC FINIS_NO_DASHES END
+.    nr #FINIS_NO_DASHES 1
+.END
+\#
 \# ====================================================================
 \#
 \# +++HEADERS/FOOTERS+++
@@ -8435,14 +9041,24 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \# not the same thing as using the shortform # in hdrftr strings.
 \#
 .ds PAGE# \En[#PAGENUMBER]
+.ALIAS SLIDE# PAGE#
 \#
 .MAC RESTORE_SPACE END
 .   vpt 0
+.   if \\n[@TOP] \{\
+.      ch RR_@TOP
+.      rr @TOP
+.   \}
+.   if \\n[#NEWPAGE] .rr #NEWPAGE
+.   if \\n[.u]=1 .nr #FILLED 1
+.   nf
 .   rs
 .   nop \&
 .   sp -1
-.   ch RR_@TOP
-.   rr @TOP
+.   if \\n[#FILLED] \{\
+.      fi
+.      rr #FILLED
+.   \}
 .   vpt
 .END
 \#
@@ -8458,14 +9074,10 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#
 .MAC HDRFTR_RULE_GAP END
 .    nr #HDRFTR_RULE_GAP (\\$1)
-.    if '\\$0'HEADER_RULE_GAP' \{\
+.    if '\\$0'HEADER_RULE_GAP' \
 .       nr #HEADER_RULE_GAP \\n[#HDRFTR_RULE_GAP]
-.       if r #FOOTER_RULE_GAP .nr #FOOTER_RULE_GAP \\n[#FOOTER_RULE_GAP]
-.    \}
-.    if '\\$0'FOOTER_RULE_GAP' \{\
+.    if '\\$0'FOOTER_RULE_GAP' \
 .       nr #FOOTER_RULE_GAP \\n[#HDRFTR_RULE_GAP]
-.       if r #HEADER_RULE_GAP .nr #HEADER_RULE_GAP \\n[#HEADER_RULE_GAP]
-.    \}
 .END
 \#
 \# HDRFTR LEFT
@@ -8487,7 +9099,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#
 \#   If the user wants to incorporate the page number into the string,
 \#   \*[PAGE#] must be used.  For example, if the user wants to put
-\#   an elipsis before the page number in the string, s/he should use
+\#   an ellipsis before the page number in the string, s/he should use
 \#   ...\*[PAGE#], not ...#
 \#
 .MAC HDRFTR_LEFT END
@@ -8495,23 +9107,51 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    ds $HDRFTR_LEFT \\$1
 .END
 \#
-\# HDRFTR LEFT CAPS
-\# ----------------
+\# HDRFTR <POSITION> CAPS AND SMALLCAPS
+\# ------------------------------------
 \# *Argument:
 \#   <none> | <anything>
 \# *Function:
-\#   Turns capitalisation of $HDRFTR_LEFT (typically, the author of
-\#   the document) on or off.
+\#   Turns capitalisation of $HDRFTR_<POSITION> on or off.
 \# *Notes:
-\#   Default is on.
+\#   Default for RIGHT (ie AUTHOR) is on.
 \#
-.MAC HDRFTR_LEFT_CAPS END
-.    ie '\\$1'' .nr #HDRFTR_LEFT_CAPS 1
+.MAC CAPS_SMALLCAPS_WARNING END
+.    tm1 "[mom]: At line \\n[.c], both CAPS and SMALLCAPS have been enabled for HEADER_\\$1.
+.    tm1 "       CAPS takes precedence.
+.END
+.
+.MAC _HDRFTR_CAPS END
+.    ds $HDR_FTR \\$0
+.    substring $HDR_FTR 0 5 \" HEADER or FOOTER
+.    ds POSITION \\$0
+.    substring POSITION 7 7
+.    if '\\*[POSITION]'L' .ds POSITION LEFT
+.    if '\\*[POSITION]'C' .ds POSITION CENTER
+.    if '\\*[POSITION]'R' .ds POSITION RIGHT
+.    if \\n[#HDRFTR_\\*[POSITION]_SMALLCAPS]=1 \
+.       CAPS_SMALLCAPS_WARNING \\*[POSITION]
+.    ie '\\$1'' .nr #HDRFTR_\\*[POSITION]_CAPS 1
 .    el \{\
-.       nr #HDRFTR_LEFT_CAPS 0
-.       ds $HDRFTR_LEFT_SIZE_CHANGE +0
+.       nr #HDRFTR_\\*[POSITION]_CAPS 0
+.       ds $HDRFTR_\\*[POSITION]_SIZE_CHANGE +0
 .    \}
 .END
+.
+.MAC _HDRFTR_SMALLCAPS END
+.    ds $HDR_FTR \\$0
+.    substring $HDR_FTR 0 5 \" HEADER or FOOTER
+.    ds POSITION \\$0
+.    substring POSITION 7 7
+.    if '\\*[POSITION]'L' .ds POSITION LEFT
+.    if '\\*[POSITION]'C' .ds POSITION CENTER
+.    if '\\*[POSITION]'R' .ds POSITION RIGHT
+.    if \\n[#HDRFTR_\\*[POSITION]_CAPS]=1 \
+.       CAPS_SMALLCAPS_WARNING \\*[POSITION]
+.    ie '\\$1'' .nr #HDRFTR_\\*[POSITION]_SMALLCAPS 1
+.    el \
+.       nr #HDRFTR_\\*[POSITION]_SMALLCAPS 0
+.END
 \#
 \# HDRFTR CENTER
 \# -------------
@@ -8531,12 +9171,12 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#
 \#   If the user wants to incorporate the page number into the string,
 \#   \*[PAGE#] must be used.  For example, if the user wants to put
-\#   an elipsis before the page number in the string, s/he should use
+\#   an ellipsis before the page number in the string, s/he should use
 \#   ...\*[PAGE#], not ...#
 \#
 .MAC HDRFTR_CENTER END
 .    nr #USER_DEF_HDRFTR_CENTER 1
-.    if '\\$0'FOOTER_CENTER' \{\
+.    if '\\$0'HEADER_CENTER' \{\
 .       ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
 .       ds $HDRFTR_CENTER_NEW \\$1
 .    \}
@@ -8544,11 +9184,12 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       ds $HDRFTR_CENTER_OLD \\*[$HDRFTR_CENTER]
 .       ds $HDRFTR_CENTER_NEW \\$1
 .    \}
-.    ds $HDRFTR_CENTER \\$1
+.    ie '\\$1'TOC' .ds $TOC_HDRFTR_CENTER \\$2
+.    el .ds $HDRFTR_CENTER \\$1
 .END
 \#
-\# HDRFTR CENTER CAPS
-\# ------------------
+\# HDRFTR CENTER CAPS AND SMALLCAPS
+\# --------------------------------
 \# *Argument:
 \#   <none> | <anything>
 \# *Function:
@@ -8557,12 +9198,12 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \# *Notes:
 \#   Default is on.
 \#
-.MAC HDRFTR_CENTER_CAPS END
-.    ie '\\$1'' .nr #HDRFTR_CENTER_CAPS 1
-.    el \{\
-.       nr #HDRFTR_CENTER_CAPS 0
-.       ds $HDRFTR_CENTER_SIZE_CHANGE +0
-.    \}
+.MAC HDRFTR_CENTER_SMALLCAPS END
+.    if \\n[#HDRFTR_CENTER_SMALLCAPS]=1 \
+.       CAPS_SMALLCAPS_WARNING CENTER
+.    ie '\\$1'' .nr #HDRFTR_CENTER_SMALLCAPS 1
+.    el \
+.       nr #HDRFTR_CENTER_SMALLCAPS 0
 .END
 \#
 \# HDRFTR CENTER PADDING
@@ -8583,12 +9224,12 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   A unit of measure is required.
 \#
 .MAC HDRFTR_CENTER_PAD END
-.    if '\\$1'LEFT'  .nr #HDRFTR_CTR_PAD_LEFT (\\$2)
+.    if '\\$1'LEFT'  .nr #HDRFTR_CTR_PAD_LEFT  (\\$2)
 .    if '\\$1'RIGHT' .nr #HDRFTR_CTR_PAD_RIGHT (\\$2)
 .END
 \#
-\# SWITCH HDRFTR CENTER PADDING SIDE - support macro
-\# --------------------------------
+\# SWITCH HDRFTR CENTER PADDING SIDE (support macro)
+\# -------------------------------------------------
 \# *Argument:
 \#   <none>
 \# *Function:
@@ -8620,7 +9261,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#
 \#   If the user wants to incorporate the page number into the string,
 \#   \*[PAGE#] must be used.  For example, if the user wants to put
-\#   an elipsis before the page number in the string, s/he should use
+\#   an ellipsis before the page number in the string, s/he should use
 \#   ...\*[PAGE#], not ...#
 \#
 .MAC HDRFTR_RIGHT END
@@ -8628,8 +9269,8 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    ds $HDRFTR_RIGHT \\$1
 .END
 \#
-\# HDRFTR RIGHT CAPS
-\# -----------------
+\# HDRFTR RIGHT CAPS AND SMALLCAPS
+\# -------------------------------
 \# *Argument:
 \#   <none> | <anything>
 \# *Function:
@@ -8638,12 +9279,12 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \# *Notes:
 \#   Default is on.
 \#
-.MAC HDRFTR_RIGHT_CAPS END
-.    ie '\\$1'' .nr #HDRFTR_RIGHT_CAPS 1
-.    el \{\
-.       nr #HDRFTR_RIGHT_CAPS 0
-.       ds $HDRFTR_RIGHT_SIZE_CHANGE +0
-.    \}
+.MAC HDRFTR_RIGHT_SMALLCAPS END
+.    if \\n[#HDRFTR_RIGHT_SMALLCAPS]=1 \
+.       CAPS_SMALLCAPS_WARNING RIGHT
+.    ie '\\$1'' .nr #HDRFTR_RIGHT_SMALLCAPS 1
+.    el \
+.       nr #HDRFTR_RIGHT_SMALLCAPS 0
 .END
 \#
 \# HDRFTR RULE
@@ -8765,7 +9406,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       el .nr #HDRFTR_RULE 0
 .    \}
 .END
-\#
+.
 .ALIAS HDRFTR_RULE_INTERNAL HDRFTR_RULE
 \#
 \# HDRFTR PLAIN
@@ -8778,20 +9419,28 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   text.  Font for the header/footer becomes roman throughout.
 \#
 .MAC HDRFTR_PLAIN END
-.    HDRFTR_FAMILY        \\*[$DOC_FAM]
-.    HDRFTR_PT_SIZE       \\n[#DOC_PT_SIZE]
-.    HDRFTR_LEFT_FAMILY   \\*[$DOC_FAM]
-.    HDRFTR_LEFT_FONT     R
-.    HDRFTR_LEFT_SIZE     +0
-.    HDRFTR_LEFT_CAPS     OFF
-.    HDRFTR_CENTER_FAMILY \\*[$DOC_FAM]
-.    HDRFTR_CENTER_FONT   R
-.    HDRFTR_CENTER_SIZE   +0
-.    HDRFTR_CENTER_CAPS   OFF
-.    HDRFTR_RIGHT_FAMILY  \\*[$DOC_FAM]
-.    HDRFTR_RIGHT_FONT    R
-.    HDRFTR_RIGHT_SIZE    +0
-.    HDRFTR_RIGHT_CAPS    OFF
+.    nr #HDRFTR_PLAIN 1
+.    rm $HDRFTR_FAMILY
+.    rm #HDRFTR_PT_SIZE
+.    rm $HDRFTR_COLOR
+.    rm $HDRFTR_LEFT_FAMILY
+.    rm $HDRFTR_LEFT_FONT
+.    rm $HDRFTR_LEFT_SIZE_CHANGE
+.    rr #HDRFTR_LEFT_CAPS
+.    rr #HDRFTR_LEFT_SMALLCAPS
+.    rr #HDRFTR_LEFT_COLOR
+.    rm $HDRFTR_CENTER_FAMILY
+.    rm $HDRFTR_CENTER_FONT
+.    rm $HDRFTR_CENTER_SIZE_CHANGE
+.    rr #HDRFTR_CENTER_CAPS
+.    rr #HDRFTR_CENTER_SMALLCAPS
+.    rr #HDRFTR_CENTER_COLOR
+.    rm $HDRFTR_RIGHT_FAMILY
+.    rm $HDRFTR_RIGHT_FONT
+.    rm $HDRFTR_RIGHT_SIZE_CHANGE
+.    rr #HDRFTR_RIGHT_CAPS
+.    rr #HDRFTR_RIGHT_SMALLCAPS
+.    rr #HDRFTR_RIGHT_COLOR
 .END
 \#
 \# SWITCH HDRFTR
@@ -8833,18 +9482,16 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   For use when users don't want 3-part headers/footers, but rather
 \#   want to design their own headers/footers and need different
 \#   headers/footers on recto and verso pages.  Using just
-\#   HEADER_RECTO, even when recto/verso is not on, allows users to
-\#   design their own headers/footers for doc pages.
+\#   HEADER_RECTO or FOOTER_RECTO, even when recto/verso is not on,
+\#   allows users to design their own headers/footers for doc pages.
 \#
 .MAC HDRFTR_RECTO END
 .    nr #USERDEF_HDRFTR 1
-.    if '\\$1'L'      .nr #USERDEF_HDRFTR_RECTO_QUAD 1
-.    if '\\$1'LEFT'   .nr #USERDEF_HDRFTR_RECTO_QUAD 1
-.    if '\\$1'C'      .nr #USERDEF_HDRFTR_RECTO_QUAD 2
-.    if '\\$1'CENTER' .nr #USERDEF_HDRFTR_RECTO_QUAD 2
-.    if '\\$1'CENTRE' .nr #USERDEF_HDRFTR_RECTO_QUAD 2
-.    if '\\$1'R'      .nr #USERDEF_HDRFTR_RECTO_QUAD 3
-.    if '\\$1'RIGHT'  .nr #USERDEF_HDRFTR_RECTO_QUAD 3
+.    ds $QUAD_TYPE \\$1
+.    substring $QUAD-TYPE 0 0
+.    if '\\*[$QUAD_TYPE]'L' .nr #USERDEF_HDRFTR_RECTO_QUAD 1
+.    if '\\*[$QUAD_TYPE]'C' .nr #USERDEF_HDRFTR_RECTO_QUAD 2
+.    if '\\*[$QUAD_TYPE]'R' .nr #USERDEF_HDRFTR_RECTO_QUAD 3
 .    shift
 .    ie '\\$1'CAPS' \{\
 .       nr #HDRFTR_RECTO_CAPS 1
@@ -8867,13 +9514,11 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#
 .MAC HDRFTR_VERSO END
 .    nr #USERDEF_HDRFTR 1
-.    if '\\$1'L'      .nr #USERDEF_HDRFTR_VERSO_QUAD 1
-.    if '\\$1'LEFT'   .nr #USERDEF_HDRFTR_VERSO_QUAD 1
-.    if '\\$1'C'      .nr #USERDEF_HDRFTR_VERSO_QUAD 2
-.    if '\\$1'CENTER' .nr #USERDEF_HDRFTR_VERSO_QUAD 2
-.    if '\\$1'CENTRE' .nr #USERDEF_HDRFTR_VERSO_QUAD 2
-.    if '\\$1'R'      .nr #USERDEF_HDRFTR_VERSO_QUAD 3
-.    if '\\$1'RIGHT'  .nr #USERDEF_HDRFTR_VERSO_QUAD 3
+.    ds $QUAD_TYPE \\$1
+.    substring $QUAD-TYPE 0 0
+.    if '\\*[$QUAD_TYPE]'L'     .nr #USERDEF_HDRFTR_VERSO_QUAD 1
+.    if '\\*[$QUAD_TYPE]\\$1'C' .nr #USERDEF_HDRFTR_VERSO_QUAD 2
+.    if '\\*[$QUAD_TYPE]\\$1'R' .nr #USERDEF_HDRFTR_VERSO_QUAD 3
 .    shift
 .    ie '\\$1'CAPS' \{\
 .       nr #HDRFTR_VERSO_CAPS 1
@@ -8928,11 +9573,15 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    if \\n[#FOOTERS_ON] \{\
 .       if \\n[#START_FOR_FOOTERS] \{\
 .          rr #START_FOR_FOOTERS
+.          if \\n[#DOC_TYPE]=5 \{\
+.             if !\\n[#HDRFTR_BOTH] .PRINT_USERDEF_HDRFTR
+.             return
+.          \}
 .          if !\\n[#PRINT_FOOTER_ON_PAGE_1] \{\
 .             ie !\\n[#HDRFTR_BOTH] .return
 .             el \{\
 .                rr #FOOTERS_ON
-.                nr #HEADERS_ON 1
+.                if !\\n[#COLLATE] .nr #HEADERS_ON 1
 .                ie \\n[#HEADER_RULE]=1 .HEADER_RULE
 .                el .HEADER_RULE OFF
 .                ie \\n[#HDRFTR_BOTH] .HEADER_VERSO \\*[$HDR_VERSO_QUAD] "\\*[$HDR_VERSO_STRING]"
@@ -8955,6 +9604,8 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       ds $HDRFTR_RIGHT_SIZE_CHANGE      \\*[$HDRFTR_TMP_SIZE_CHANGE_SWITCH]
 .       nr #HDRFTR_TMP_CAPS_SWITCH        \\n[#HDRFTR_LEFT_CAPS]
 .       nr #HDRFTR_LEFT_CAPS              \\n[#HDRFTR_RIGHT_CAPS]
+.       nr #HDRFTR_TMP_SMALLCAPS_SWITCH   \\n[#HDRFTR_LEFT_SMALLCAPS]
+.       nr #HDRFTR_LEFT_SMALLCAPS         \\n[#HDRFTR_RIGHT_SMALLCAPS]
 .       nr #HDRFTR_RIGHT_CAPS             \\n[#HDRFTR_TMP_CAPS_SWITCH]
 .       ds $HDRFTR_TMP_COLOR_SWITCH       \\*[$HDRFTR_LEFT_COLOR]
 .       ds $HDRFTR_LEFT_COLOR             \\*[$HDRFTR_RIGHT_COLOR]
@@ -8976,14 +9627,14 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       \}
 .       if o .RIGHT
 .       if e .LEFT
-.       if \\n[#RECTO_VERSO]=0    .LEFT
+.       if \\n[#RECTO_VERSO]=0 .LEFT
 .       if \\n[#HDRFTR_LEFT_CAPS] .CAPS
 .       ie '\\*[$HDRFTR_LEFT]'#' .PRINT \\n[#PAGENUMBER]
 .       el \{\
 .          ie !'\\*[$HDRFTR_LEFT]'' .PRINT \\*[$HDRFTR_LEFT]
 .          el .PRINT \&
 .       \}
-.       if \\n[#HDRFTR_LEFT_CAPS]   .CAPS OFF
+.       if \\n[#HDRFTR_LEFT_CAPS] .CAPS OFF
 .       CENTER
 .       if \\n[#HDRFTR_CENTER_CAPS] .CAPS
 .       rt \\n[y]u
@@ -8997,7 +9648,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       if \\n[#HDRFTR_CENTER_CAPS] .CAPS OFF
 .       if o .LEFT
 .       if e .RIGHT
-.       if \\n[#RECTO_VERSO]=0     .RIGHT
+.       if \\n[#RECTO_VERSO]=0 .RIGHT
 .       if \\n[#HDRFTR_RIGHT_CAPS] .CAPS
 .       rt \\n[y]u
 .       ie '\\*[$HDRFTR_RIGHT]'#' .PRINT \\n[#PAGENUMBER]
@@ -9024,6 +9675,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       if o .LEFT
 .       if e .RIGHT
 .       if \\n[#RECTO_VERSO]=0 .LEFT
+.       if \\n[#HDRFTR_LEFT_SMALLCAPS] .SMALLCAPS
 .       if \\n[#HDRFTR_LEFT_CAPS] .CAPS
 .       ie '\\*[$HDRFTR_LEFT]'#' \{\
 .          ie \\n[#HDRFTR_LEFT_COLOR]=1 \
@@ -9041,6 +9693,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          el .nop \&
 .       \}
 .       if \\n[#HDRFTR_LEFT_CAPS] .CAPS OFF
+.       if \\n[#HDRFTR_LEFT_SMALLCAPS] .SMALLCAPS OFF
 .       fam     \\*[$HDRFTR_CENTER_FAM]
 .       ft      \\*[$HDRFTR_CENTER_FT]
 .       ps      \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_CENTER_SIZE_CHANGE]
@@ -9051,6 +9704,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          di
 .       \}
 .       CENTER
+.       if \\n[#HDRFTR_CENTER_SMALLCAPS] .SMALLCAPS
 .       if \\n[#HDRFTR_CENTER_CAPS] .CAPS
 .       rt \\n[y]u
 .       ie '\\*[$HDRFTR_CENTER]'#' \{\
@@ -9071,6 +9725,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          el .PRINT \&
 .       \}
 .       if \\n[#HDRFTR_CENTER_CAPS] .CAPS OFF
+.       if \\n[#HDRFTR_CENTER_SMALLCAPS] .SMALLCAPS OFF
 .       fam \\*[$HDRFTR_RIGHT_FAM]
 .       ft  \\*[$HDRFTR_RIGHT_FT]
 .       ps  \\n[#HDRFTR_PT_SIZE]u\\*[$HDRFTR_RIGHT_SIZE_CHANGE]
@@ -9083,6 +9738,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       if o .RIGHT
 .       if e .LEFT
 .       if \\n[#RECTO_VERSO]=0 .RIGHT
+.       if \\n[#HDRFTR_RIGHT_SMALLCAPS] .SMALLCAPS
 .       if \\n[#HDRFTR_RIGHT_CAPS] .CAPS
 .       rt \\n[y]u
 .       ie '\\*[$HDRFTR_RIGHT]'#' \{\
@@ -9101,6 +9757,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          el .PRINT \&
 .       \}
 .       if \\n[#HDRFTR_RIGHT_CAPS] .CAPS OFF
+.       if \\n[#HDRFTR_RIGHT_SMALLCAPS] .SMALLCAPS OFF
 .    \}
 .    if \\n[#HDRFTR_RULE] .HDRFTR_RULE_INTERNAL
 .    br
@@ -9189,7 +9846,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       if \\n[#USERDEF_HDRFTR_RECTO_QUAD]=3 .RIGHT
 .       if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS
 .       if '\\n[.ev]'FOOTER' .vs 0
-.       PRINT \\*[$USERDEF_HDRFTR_RECTO]
+.       if !r #SKIP .PRINT \\*[$USERDEF_HDRFTR_RECTO]
 .       if '\\n[.ev]'FOOTER' .vs
 .       if \\n[#HDRFTR_RECTO_CAPS]=1 .CAPS OFF
 .       EOL
@@ -9205,9 +9862,8 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       ie \\n[#HDRFTR_COLOR]=1 \m[\\*[$HDRFTR_COLOR]]
 .       el \m[black]
 .    \}
-.    if \\n[#HDRFTR_RULE] \{\
+.    if \\n[#HDRFTR_RULE] \
 .       HDRFTR_RULE_INTERNAL
-.    \}
 .END
 \#
 \# +++HEADERS+++
@@ -9260,19 +9916,24 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \# *Arguments:
 \#   <none>
 \# *Function:
-\#   Prints header appropriate to DOC_TYPE, PRINTSTYLE, and COPYSTYLE.
-\# *Notes:
-\#   In order to convert the title string to caps in the header
-\#   (in the event that the user enters .TITLE in caps/lc), I've
-\#   used quad left, quad centre, and quad right to arrange the
-\#   three bits of the header, rather than .tl.  This allows the
-\#   use of the CAPS macro.  The downside is that I have to add
-\#   \\v'-(\\n[#LEAD]u*<n>) in order for -Tlatin1 output to align
-\#   the header/footer strings on the baseline.  The console output
-\#   still isn't brilliant, but at least it's comprehensible.
+\#   Resets margin notes, processes footnote and margin note
+\#   leftover, takes care of recto-verso, prepares for columns after
+\#   first, determines whether to flex-space the page,,outputs
+\#   deferred floats, and does some tbl magic.  If headers are
+\#   enabled, prints header appropriate to DOC_TYPE, PRINTSTYLE, and
+\#   COPYSTYLE.
 \#
 .MAC HEADER END
 .    vpt 0
+.    if \\n[#DOC_TYPE]=5 \{\
+.       if \\n[#SLIDE_FOOTERS] \{\
+.          PRINT_FOOTER
+.       if \\n[#HDRFTR_BOTH] \
+.          HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]"
+.       \}
+.    \}
+.    nr flex-spaces 0
+.    nr flex +1
 .    if \\n[#NEW_DOC_PT_SIZE] .nr #DOC_PT_SIZE \\n[#NEW_DOC_PT_SIZE]
 .    rr #NEW_DOC_PT_SIZE
 .    if \\n[#RESET_TRAPS] \{\
@@ -9288,8 +9949,10 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    if \\n[#FN_DEPTH] .PROCESS_FN_LEFTOVER
 .    rr #RULED
 .    if \\n[#RESET_FN_NUMBER] .nr #FN_NUMBER 0 1
+.    if !\\n[#DIVERTED] .rr #PREV_FN_DEFERRED
 .    po \\n[#DOC_L_MARGIN]u
 .    if \\n[#RECTO_VERSO] \{\
+.       if !\\n[#TOC_RV_SWITCH]=2 \{\
 .          nr #DOC_LR_MARGIN_TMP \\n[#DOC_L_MARGIN]
 .          DOC_LEFT_MARGIN  \\n[#DOC_R_MARGIN]u
 .          if \\n[#CROPS] .DOC_LEFT_MARGIN  \\n[#DOC_R_MARGIN]u+\\n[cropmarks]u
@@ -9321,7 +9984,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    \}
 .    if \\n[#PRINT_STYLE]=1 \{\
 .       if \\n[#ENDNOTES]=1 \{\
-.\" Single-spaced endotes have a different lead
+.\" Single-spaced endnotes have a different lead
 .          if \\n[#EN_SINGLESPACE] \{\
 .             nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
 .             nr #DOC_LEAD \\n[#EN_LEAD]u
@@ -9330,11 +9993,24 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    \}
 .    if !n .nop \X'ps: exec 0 setlinejoin'\X'ps: exec 0 setlinecap'
 .    sp -1v
+.    if \\n[#DOC_TYPE]=5 \{\
+.       if \\n[#SLIDE_HEADERS] \{\
+.          HEADERS
+.          if \\n[#SLIDE_FOOTERS] \{\
+.             FOOTERS off
+.\" So rule prints after header on first page
+.             if !r #SKIP_RULE \{\
+.                sp
+.                if \\n[#HEADER_RULE] .HEADER_RULE
+.                nr #SKIP_RULE 1
+.             \}
+.          \}
+.       \}
+.    \}
 .    ie \\n[#HEADERS_ON] .PRINT_HDRFTR
 .    el \{\
-.       if \\n[#PAGE_NUM_V_POS]=1 \{\
+.       if \\n[#PAGE_NUM_V_POS]=1 \
 .          if \\n[#PAGINATE] .PRINT_PAGE_NUMBER
-.       \}
 .    \}
 .    sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
 .    if \\n[#PRINT_STYLE]=1 \{\
@@ -9364,6 +10040,18 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       \}
 .       if \\n[#PRINT_STYLE]=2 .sp \\n[#Q_LEAD_DIFF]u
 .    \}
+.    if \\n[#IN_LIST] \
+.       po +\\n[#LIST_OFFSET_VALUE]u
+.    if \\n[#RESET_FN_COUNTERS]=1 \{\
+.       rr #RESET_FN_COUNTERS
+.       PROCESS_FN_IN_DIVER
+.       nr #FN_COUNT \\n[#SAVED_FN_COUNT] 1
+.       if \\n[#COLUMNS]=1 .nr #FN_COUNT_FOR_COLS \\n[#SAVED_FN_COUNT_FOR_COLS] 1
+.       ie \\n[#RESET_FN_NUMBER]=1 .nr #FN_NUMBER \\n[#SAVED_FN_NUMBER] 1
+.       el .nr #FN_NUMBER \\n[#FN_NUMBER] 1
+.       rm FN_IN_DIVER
+.       if dRUNON_FN_IN_DIVER .rm RUNON_FN_IN_DIVER
+.    \}
 .    if \\n[#EPIGRAPH] \{\
 .       ie \\n[#TAB_ACTIVE] .TAB \\n[#CURRENT_TAB]
 .       el \{\
@@ -9398,10 +10086,10 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       ll \\n[#COL_L_LENGTH]u
 .       ta \\n[.l]u
 .       if \\n[#QUOTE] \{\
-.          ie \\n[#Q_OFFSET_VALUE] \
-.             po +(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
+.          ie \\n[#\\*[BQ]_OFFSET_VALUE] \
+.             po +(\\n[#PP_INDENT]u*\\n[#\\*[BQ]_OFFSET_VALUE]u)
 .          el \
-.             po +\\*[$Q_OFFSET_VALUE]
+.             po +\\*[$\\*[BQ]_OFFSET_VALUE]
 .       \}
 .       if \\n[#EPIGRAPH] \{\
 .          if \\n[#EPI_ACTIVE] \{\
@@ -9415,16 +10103,6 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          el .po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u+\\*[$EPI_OFFSET_VALUE]
 .       \}
 .    \}
-.    if \\n[#RESET_FN_COUNTERS]=1 \{\
-.       rr #RESET_FN_COUNTERS
-.       PROCESS_FN_IN_DIVER
-.       nr #FN_COUNT \\n[#SAVED_FN_COUNT] 1
-.       if \\n[#COLUMNS]=1 .nr #FN_COUNT_FOR_COLS \\n[#SAVED_FN_COUNT_FOR_COLS] 1
-.       ie \\n[#RESET_FN_NUMBER]=1 .nr #FN_NUMBER \\n[#SAVED_FN_NUMBER] 1
-.       el .nr #FN_NUMBER \\n[#FN_NUMBER] 1
-.       rm FN_IN_DIVER
-.       if dRUNON_FN_IN_DIVER .rm RUNON_FN_IN_DIVER
-.    \}
 .    rr #FROM_HEADER
 .    rr #DEFER_SPACE_ADDED
 .    if !\\n[#FN_DEPTH] .if r #DIVERTED .rr #DIVERTED
@@ -9463,12 +10141,42 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    ch RR_@TOP
 .    ie \\n[tbl*have-header] .rr @TOP
 .    el .wh \\n[nl]u+1u RR_@TOP
+.    if \\n[#FLEX_ACTIVE] \{\
+.       if \\n[#RESTORE_FLEX] \{\
+.          rr #NO_FLEX
+.          rr #RESTORE_FLEX
+.       \}
+.       if \\n[#RESTORE_COL_FLEX] \{\
+.          rr #NO_FLEX
+.          rr #RESTORE_COL_FLEX
+.       \}
+.    \}
+.\" Don't flex the last page/col, or the page/col before a COLLATE,
+.\" NEWPAGE, COL_NEXT, or BLANKPAGE.
+.    if !dPDF.EXPORT \{\
+.       if \\n[#FLEX_ACTIVE] \
+.          if !\\n[#NO_FLEX] \
+.             nr #RESTORE_FLEX 1
+.       if '\\*[last-page]'\\n%@\\n[#COL_NUM]' \
+.          if !\\n[#NO_FLEX] .nr #NO_FLEX 1
+.       if '\\*[pre-collate-\\n%]'\\n%@\\n[#COL_NUM]' \
+.          if !\\n[#NO_FLEX] .nr #NO_FLEX 1
+.       if '\\*[pre-newpage-\\n%]'\\n%@\\n[#COL_NUM]' \
+.          if !\\n[#NO_FLEX] .nr #NO_FLEX 1
+.       if d page-\\n%@\\n[#COL_NUM] .nr #NO_FLEX 1
+.    \}
 .    ie \\n[defer] .PROCESS_FLOATS
 .    el \{\
-.       if \\n[tbl*have-caption] \{\
-.          RESTORE_SPACE
-.          ie \\n[#MLA] .sp \n[tbl*label-lead-diff]u
-.          el .sp \n[tbl*caption-lead-diff]u
+.\" These two sets of conditions only occur if the .br in .TS causes
+.\" a page break.
+.       if !\\n[doing-tbl] \{\
+.          if (\\n[tbl*have-caption]=1)&(\\n[tbl*caption-after-label]=0) \{\
+.             RESTORE_SPACE
+.             if !\\n[span] \{\
+.                ie \\n[#MLA] .sp \\n[tbl*label-lead-diff]u
+.                el .sp \\n[tbl*caption-lead-diff]u
+.             \}
+.          \}
 .       \}
 .    \}
 .\" So tables without TH that don't fit don't overprint first row
@@ -9478,15 +10186,25 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       nop \&
 .       vpt
 .       rr \\n[tbl*no-header]
-.       SHIM
+.       SHIM_1
 .    \}
 .    el .vpt
-.    if \\n[#NEWPAGE] .rr #NEWPAGE
-.    ie \\n[tbl*interrupted] \{\
-.       tbl*print-header
-.       rr tbl*interrupted
-.      \}
-.    el .tbl@top-hook
+.    if \\n[span] \{\
+.       ev FLOAT
+.       if \\n[#INDENT_LEFT_ACTIVE] .in \\n[#L_INDENT]u/2u
+.       nf
+.       RESTORE_SPACE
+.       if !\\n[tbl*no-top-hook] \
+.          if \\n[tbl*have-header:1] .tbl*print-header
+.       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.       ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
+.    \}
+.    if !\\n[begin-tbl] \
+.       if !r tbl*no-top-hook .tbl@top-hook
+.    rr tbl*no-top-hook
+.    if r flex:force .rr flex:force
+.    rr ref*last
+.    if !\\n[float*defer] .ev 0
 .END
 \#
 \# ====================================================================
@@ -9550,18 +10268,27 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \# *Arguments:
 \#   <none>
 \# *Function:
-\#   Places footer at bottom of page if #FOOTERS=1, otherwise
-\#   places page number at bottom of page (if #PAGINATE=1).
-\#   Page numbers are in arabic or roman according to COPYSTYLE.
-\#   DRAFT starts the document at page 1 regardless of PAGENUMBER.
-\#   FINAL respects PAGENUMBER.
+\#   Gathers strings for flex-spacing, processes margin notes and
+\#   footnotes, prepares for move to next column or page.  Places
+\#   footer at bottom of page if #FOOTERS=1, otherwise places page
+\#   number at bottom of page (if #PAGINATE=1).  Page numbers are
+\#   in arabic or roman according to COPYSTYLE.  DRAFT starts the
+\#   document at page 1 regardless of PAGENUMBER.  FINAL respects
+\#   PAGENUMBER.
 \#
 .MAC FOOTER END
+.    if r #START .rr #START
+.    CALCULATE_FLEX
+.    if \\n[#DOING_COVERTEXT] \{\
+.       tm1 "[mom]: COVERTEXT exceeds cover page depth.
+.       ab   [mom]: Aborting '\\n[.F]'.
+.    \}
 .    vpt 0
 .    rr #LB_4_HD
 .    rr #QUOTE_4_HD
 .    nr #SAVED_LEAD \\n[.v]
-.    ev PAGE_TRANSITION
+.    if !r pg-trans .nr pg-trans 0 1
+.    ev PAGE_TRANSITION\\n+[pg-trans]
 .    pdfmarksuspend
 .    ie !n .nop \X'ps: exec decornone'
 .    el .ul 0
@@ -9579,8 +10306,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       \}
 .    \}
 .    if \\n[MN-right]>0 \{\
-.       if (\\n[MN-right] > 0) \
-.          if !\\n[#no-repeat-MN-right]=1 .MNbottom-right
+.       if !\\n[#no-repeat-MN-right]=1 .MNbottom-right
 .       if '\\n[.z]'MN_OVERFLOW_RIGHT' \{\
 .          di
 .          nr #MN_OVERFLOW_RIGHT 1
@@ -9599,7 +10325,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          vpt 0
 .          sp \
 |\\n[#PAGE_LENGTH]u-(\\n[#B_MARGIN]u+\\n[#FN_DEPTH]u-\\n[#DOC_LEAD]u)
-.          vpt 1
+.          vpt
 .          po \\n[#DOC_L_MARGIN]u
 .          if \\n[#COLUMNS] \{\
 .             po \\n[#COL_\\n[#COL_NUM]_L_MARGIN]u
@@ -9607,14 +10333,15 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .             nr #FROM_FOOTER 1
 .          \}
 .          nf
+.          ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
 .          FOOTNOTES
 .          rm FOOTNOTES
-.          if d RUNON_FOOTNOTES    .rm RUNON_FOOTNOTES
+.          if d RUNON_FOOTNOTES   .rm RUNON_FOOTNOTES
 .          if \\n[#PRINT_STYLE]=1 .vs \\n[#SAVED_LEAD]u
-.          if \\n[#PRINT_STYLE]=2 .LS \\n[#SAVED_LEAD]u
+.          if \\n[#PRINT_STYLE]=2 .vs \\n[#SAVED_LEAD]u
 .          if '\\n[.z]'FN_OVERFLOW' \{\
-.              di
-.              nr #FN_OVERFLOW_DEPTH \\n[#DIVER_DEPTH]
+.             di
+.             nr #FN_OVERFLOW_DEPTH \\n[#DIVER_DEPTH]
 .          \}
 .          nr #FN_COUNT_AT_FOOTER \\n[#FN_COUNT]
 .          nr #FN_COUNT 0
@@ -9627,7 +10354,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    \}
 .    nr @TOP 1
 .    ie \\n[#COLUMNS]=1 \{\
-.       ie \\n[#COL_NUM]=\\n[#NUM_COLS] .DO_FOOTER
+.       ie (\\n[#COL_NUM]=\\n[#NUM_COLS]):(\\n[#NEWPAGE]=1) .DO_FOOTER
 .       el \{\
 .          ie (\\n[#ENDNOTES]=1):(\\n[#BIBLIOGRAPHY]=1) \{\
 .             if \\n[#ENDNOTES] .sp |\\n[ec]u-\\n[#EN_LEAD]u
@@ -9635,9 +10362,32 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          \}
 .          el \{\
 .            vs \\n[#SAVED_LEAD]u
-.            sp |\\n[dc]u
+.            rt \\n[dc]u
+.            nr flex-spaces 0
+.          \}
+.          if d page-\\n%@\\n[#COL_NUM] \{\
+.             rr #NO_FLEX
+.             rr #RESTORE_COL_FLEX
 .          \}
 .          po \\n[#COL_\\n+[#COL_NUM]_L_MARGIN]u
+.          if !dPDF.EXPORT \{\
+.             if \\n[#FLEX_ACTIVE] \{\
+.                if !\\n[#NO_FLEX] \{\
+.                   if '\\*[last-page]'\\n%@\\n[#COL_NUM]' \
+.                       nr #NO_FLEX 1
+.                   if '\\*[pre-collate]'\\n%@\\n[#COL_NUM]' \
+.                       nr #NO_FLEX 1
+.                   if '\\*[pre-newpage-\\n%]'\\n%@\\n[#COL_NUM]' \{\
+.                      nr #NO_FLEX 1
+.                      nr #RESTORE_FLEX 1
+.                   \}
+.                   if d page-\\n%@\\n[#COL_NUM] \{\
+.                      nr #NO_FLEX 1
+.                      nr #RESTORE_COL_FLEX 1
+.                   \}
+.                \}
+.             \}
+.          \}
 .          nr #L_MARGIN \\n[.o]
 .          if \\n[#FN_DEPTH] .PROCESS_FN_LEFTOVER
 .          vs \\n[#SAVED_LEAD]u
@@ -9689,6 +10439,12 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .                po \\n[#EPI_OFFSET]u
 .             \}
 .          \}
+.          ie \\n[tbl*interrupted] \{\
+.             tbl*print-header
+.             rr tbl*interrupted
+.            \}
+.          el .if !r tbl*no-top-hook .tbl@top-hook
+.          rr tbl*no-top-hook
 .          ie \\n[#EPIGRAPH] \{\
 .             ie !\\n[#EPI_ACTIVE] \{\
 .                ns
@@ -9713,9 +10469,10 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          nop \&
 .          vpt
 .          rr \\n[tbl*no-header]
-.          SHIM
+.          SHIM_1
 .       \}
 .       el .vpt
+.       if '\\n[.ev]'caption' .rs
 .       if \\n[tbl*interrupted] .tbl*print-header
 .       rr tbl*interrupted
 .    \}
@@ -9740,36 +10497,28 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          nr ref*last 1
 .       \}
 .    \}
-.    PRINT_FOOTER
+.    ie !\\n[#DOC_TYPE]=5 .PRINT_FOOTER
+.    el .vpt
 .    if !\\n[ref*last] \{\
 .       ie \\n[defer]>0 \{\
 \c
-'       bp
+'          bp
 .       \}
 .       el 'bp
 .    \}
-.    if !'\\n[.ev]'0' .ev
-.    rr ref*last
-.    po \" Ensure reset to last value
 .END
 \#
 .MAC PRINT_FOOTER END
-.   br
-.\" Have to change position of FN_OVERFLOW_TRAP or it screws up the
-.\" placement of page numbers (or footers).  It's reset to its original
-.\" position at the end of the macro.
 .    if r #SAVED_FOOTER_POS .ch FOOTER \\n[#SAVED_FOOTER_POS]u
 .    rr #SAVED_FOOTER_POS
-.    ie (\\n[#FOOTER_MARGIN]+\\n[.v]>\\n[#B_MARGIN]) .nr #SKIP_FOOTER 1
-.    el \{\
-.       ev FOOTER
-.       vpt 0
-.       ie n \
-.          sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u
-.       el \
-.          sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u-\\n[#FOOTER_ADJ]u
-.       mk y
-.    \}
+.    vpt 0
+.    sp -1
+.    ev FOOTER
+.    ie n \
+.       sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u
+.    el \
+.       sp |\\n[#PAGE_LENGTH]u-\\n[#FOOTER_MARGIN]u-\\n[#FOOTER_ADJ]u
+.    mk y
 .    UNDERLINE OFF
 .    po \\n[#DOC_L_MARGIN]u
 .    ll \\n[#DOC_L_LENGTH]u
@@ -9777,7 +10526,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    if \\n[#PRINT_STYLE]=1 .TYPEWRITER
 .    if \\n[#PRINT_STYLE]=2 \{\
 .       fam  \\*[$HDRFTR_FAM]
-.       ft      R
+.       ft   R
 .       ps \\n[#DOC_PT_SIZE]u\\*[$HDRFTR_SIZE_CHANGE]
 .    \}
 .    nr #HDRFTR_PT_SIZE \\n[#PT_SIZE]
@@ -9786,12 +10535,15 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       CAPS OFF
 .    \}
 .    ie \\n[#FOOTERS_ON] \{\
-.       if !\\n[#SKIP_FOOTER]=1 .PRINT_HDRFTR
+.       if !\\n[#SKIP_FOOTER]>0 .PRINT_HDRFTR
+.       if \\n[#HDRFTR_BOTH] \
+.          HEADER_RECTO \\*[$HDR_RECTO_QUAD] "\\*[$HDR_RECTO_STRING]"
+.       if \\n[#DOC_TYPE]=5 .FOOTERS
 .    \}
 .    el \{\
 .       if \\n[#PAGINATE] \{\
 .          if \\n[#PAGE_NUM_V_POS]=2 \
-.             if !\\n[#SKIP_FOOTER]=1 .PRINT_PAGE_NUMBER
+.             if !\\n[#SKIP_FOOTER]>0 .PRINT_PAGE_NUMBER
 .       \}
 .    \}
 .    rr #SKIP_FOOTER
@@ -9800,7 +10552,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       rr #CAPS_WAS_ON
 .    \}
 .    ev
-.    vpt 1
+.    vpt
 .END
 \#
 \# ====================================================================
@@ -9850,8 +10602,8 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    ds $FTR_VERSO_STRING \\$8
 .am START DONE
 .   if \\\\n[#HDRFTR_BOTH]=1 \{\
-.      FOOTER_RECTO \\*[$FTR_RECTO_QUAD] "\\*[$FTR_RECTO_STRING]"
-.      FOOTER_VERSO \\*[$FTR_VERSO_QUAD] "\\*[$FTR_VERSO_STRING]"
+.      FOOTER_RECTO \\\\*[$FTR_RECTO_QUAD] "\\\\*[$FTR_RECTO_STRING]"
+.      FOOTER_VERSO \\\\*[$FTR_VERSO_QUAD] "\\\\*[$FTR_VERSO_STRING]"
 .      if \\\\n[#HEADER_RULE]=1 .HEADER_RULE
 .      ie \\\\n[#FOOTER_RULE]=1 .FOOTER_RULE
 .      el .FOOTER_RULE OFF
@@ -9908,7 +10660,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#
 \# ====================================================================
 \#
-\# +++HEADS+++
+\# +++HEADINGS+++
 \#
 .char \[hd-num-spacer]     \0
 .char \[parahead-spacer]   \~\~
@@ -9929,9 +10681,11 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   If PARAHEAD given, HEADING must come after PP.
 \#
 .MAC HEADING END
+'    br
+.    if \\n[@TOP] .br
 .    if !\B'\\$1' \{\
 .       tm1 "[mom]: The first argument to \\$0 must be a numeric heading level.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .    \}
 .    if r #QUOTE     .rr #QUOTE
 .    if r #END_QUOTE .rr #END_QUOTE
@@ -9940,7 +10694,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    if \\$1<\\n[#LEVEL] \
 .       nr #ACTIVE_LEVELS \\n[#LEVEL] \" loop count for resetting numbering registers
 .    nr #LAST_LEVEL \\n[#LEVEL]       \" used during TOC collection, if SPACE_TOC_ITEMS
-.    nr #LEVEL \\$1                   \" reset #LEVEL to arg
+.    nr #LEVEL \\$1                   \" resets #LEVEL to arg
 .    shift
 .    nr #ARG_NUM 0 1
 .    while \\n+[#ARG_NUM]<=2 \{\
@@ -9954,19 +10708,25 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .      \}
 .    \}
 .\" Spacing
-.    if \\n[#Q_LEAD_DIFF_CHECK] .sp -1v
-.    ie \\n[#PARAHEAD] 'br
-.    el .br
+.    if \\n[#Q_LEAD_DIFF_CHECK] .sp -1
+.    if \\n[.t]<\\n[.v] .nr nl-from-heading \\n[nl]
 .    ie !\\n[#PARAHEAD] \{\
 .       if !\\n[@TOP] \{\
 .          nr #HEAD 1
-.          ie \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .ne \\n[#NUM_ARGS]+2
-.          el .ne \\n[#NUM_ARGS]+1
-.          vpt 0
-.          ie !\\n[#START] \
+.          ie !\\n[#START] \{\
+.             nr #HEADING_NEEDS \\n[#NUM_ARGS]v+\\*[$HEAD_\\n[#LEVEL]_NEEDS]v+1v
+.             if \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .nr #HEADING_NEEDS +1v
+.             if \\n[.t]<\\n[#HEADING_NEEDS] .sp \\n[.t]u
+.             vpt 0
 .             if !\\n[#SPACE_ADDED] .if !\\n[#LINEBREAK] .sp
+.          \}
 .          el \{\
-.             ie !\\n[#PP] .rr #START
+.             ie !\\n[#PP] \{\
+.                rr #START
+.                RESTORE_SPACE
+.                if !\\n[#SPACE_ADDED] \
+.                   if !\\n[#COLUMNS] .sp
+.             \}
 .             el .sp
 .          \}
 .          if \\n[#EPIGRAPH] \
@@ -9974,14 +10734,24 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       \}
 .       if \\n[#PP_SPACE] \
 .          if \\n[#QUOTE_4_HD] .sp .5v
-.       if !\\n[#SPACE_ADDED] .SHIM
-.       if \\n[#SPACE_ADDED] .rr #SPACE_ADDED
+.       ie !\\n[#SPACE_ADDED] \{\
+.          if !\\n[.ns] \{\
+.             ie !\\n[#NO_SHIM] \
+.                if !\\n[#HEAD_\\n[#LEVEL]_NO_SHIM] .SHIM
+.             el \{\
+.                if !\\n[#NO_FLEX] \
+.                   if !\\n[#HEAD_\\n[#LEVEL]_NO_FLEX] .FLEX 
+.             \}
+.          \}
+.       \}
+.       el .rr #SPACE_ADDED
+.       vpt
 .    \}
 .    el \{\
 .       if \\n[#NUM_ARGS]>1 \{\
 .          tm1 "[mom]: Error at line \\n[.c], \\$0.
 .          tm1 "       PARAHEAD may not be given more than 1 line of text.
-.          ab  Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.          ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .       \}
 .       vpt 0
 .       if !(\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) .sp -1v
@@ -10001,7 +10771,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    if \\n[#PRINT_STYLE]=2 \{\
 .       fam \\*[$HEAD_\\n[#LEVEL]_FAM]
 .       ft  \\*[$HEAD_\\n[#LEVEL]_FT]
-.       ps  \\n[#DOC_PT_SIZE]u+\\*[$HEAD_\\n[#LEVEL]_SIZE]
+.       ps  \\n[#DOC_PT_SIZE]u\\*[$HEAD_\\n[#LEVEL]_SIZE]
 .       nf
 .    \}
 .\" Numbering
@@ -10070,10 +10840,13 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .                ie !\\n[#FROM_STYLE_\\n[@LEVEL]] \{\
 .                   ie !\\n[#NUMBER_HEAD_\\n[@LEVEL]] \
 .                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM]'+1.5m
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\
+\w'\\*[$TOC_HD_NUM]'+\
+1.5m
 .                   el \
 .                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM]'
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\
+\w'\\*[$TOC_HD_NUM]'
 .                \}
 .                el \
 .                   nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
@@ -10086,14 +10859,25 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .                   ie \\n[#NUMBER_HEAD_\\n-[@LEVEL]] \{\
 .                      ie !\\n[#NUMBER_HEAD_\\n+[@LEVEL]] \
 .                         nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM_PREV]'+1.5m
-.                      el \
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\
+\w'\\*[$TOC_HD_NUM_PREV]'+\
+1.5m
+.                      el \{\
+.\" Get the number of digits in the chapter number
+.                         ds ch-num-width \\n[#CH_NUM]
+.                         length ch-num-width \\*[ch-num-width]
+.                         nr ch-num-width -1
+.                         nr num-ch-digits \w'\0'*\\n[ch-num-width]
 .                         nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'.\[toc-hd-num-spacer]'
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\
+\\n[num-ch-digits]+\
+\w'.\[toc-hd-num-spacer]'
+.                      \}
 .                   \}
 .                   el \
 .                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\w'\\n[#TOC_HD_NUM].'
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\
+\w'\\n[#TOC_HD_NUM].'
 .                   ie \\n[#LEVEL]=1 \
 .                      nr #TOC_HEAD_\\n+[@LEVEL]_INDENT +\w'\0'
 .                   el \{\
@@ -10105,12 +10889,14 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .                \}
 .                el \
 .                   nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\\n[#TOC_HEAD_\\n+[@LEVEL]_INDENT]
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\
+\\n[#TOC_HEAD_\\n+[@LEVEL]_INDENT]
 .             \}
 .             if \\n[#LEVEL]=1 \{\
 .                if \\n[#NUMBER_HEAD_\\n[@LEVEL]] \{\
 .                   if \\n[#PREFIX_CH_NUM] \
-.                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \w'\\*[$TOC_HD_NUM]'
+.                      nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
+\w'\\*[$TOC_HD_NUM]'
 .                \}
 .             \}
 .          \}
@@ -10124,21 +10910,25 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          el \{\
 .             if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \
 .                nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\\n[#TOC_HEAD_\\n+[@LEVEL]_INDENT]
+\\n[#TOC_HEAD_\\n-[@LEVEL]_INDENT]+\
+\\n[#TOC_HEAD_\\n+[@LEVEL]_INDENT]
 .          \}
 .       \}
 .    \}
 .\" Non-numbered heads
 .    el \{\
 .       nr @LEVEL \\n[#LEVEL] 1
-.       ie \\n[#FROM_STYLE_\\n+[@LEVEL]] \{\    \" increments @LEVEL even if false
+.\" increments @LEVEL even if false
+.       ie \\n[#FROM_STYLE_\\n+[@LEVEL]] \{\
 .          if !\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT_SET] \{\
 .             nr #TOC_HEAD_\\n[@LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n[#LEVEL]_INDENT]+\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT]
+\\n[#TOC_HEAD_\\n[#LEVEL]_INDENT]+\
+\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT]
 .             if !\\n[#LEVEL]=\\n[#LAST_LEVEL] \{\
 .                if \\n[#NUMBER_HEAD_\\n[@LEVEL]] \
 .                   nr #TOC_HEAD_\\n[#LEVEL]_INDENT \
-\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT]+\w'\\*[$TOC_HD_NUM_PREV]'
+\\n[#TOC_HEAD_\\n[@LEVEL]_INDENT]+\
+\w'\\*[$TOC_HD_NUM_PREV]'
 .             \}
 .          \}
 .       \}
@@ -10164,6 +10954,14 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       CAPS 
 .       nr #CAPS_OFF 1
 .    \}
+.    if \\n[#SMALLCAPS_ON] \{\
+.       SMALLCAPS OFF
+.       nr #SMALLCAPS_RESTORE 1
+.    \}
+.    if \\n[#HEAD_\\n[#LEVEL]_SMALLCAPS] \{\
+.       SMALLCAPS 
+.       nr #SMALLCAPS_OFF 1
+.    \}
 .    if !'\\*[$HEAD_\\n[#LEVEL]_COLOR]'' \
 .       COLOR \\*[$HEAD_\\n[#LEVEL]_COLOR]
 .    nop \X'ps: exec decornone'\c
@@ -10283,9 +11081,8 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       \}
 .       if !\\n[#HD_NUM_INDENT] .nr #HD_NUM_INDENT \w'\\*[$HD_NUM]'
 .    \}
-.    if !\\n[#PARAHEAD] \{\
+.    if !\\n[#PARAHEAD] \
 .       if \\n[#HEAD_\\n[#LEVEL]_SPACE_AFTER] .sp
-.    \}
 .    if \\n[#CAPS_OFF] \{\
 .       CAPS OFF
 .       rr #CAPS_OFF
@@ -10294,6 +11091,14 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       CAPS
 .       rr #CAPS_RESTORE
 .    \}
+.    if \\n[#SMALLCAPS_OFF] \{\
+.       SMALLCAPS OFF
+.       rr #SMALLCAPS_OFF
+.    \}
+.    if \\n[#SMALLCAPS_RESTORE] \{\
+.       SMALLCAPS
+.       rr #SMALLCAPS_RESTORE
+.    \}
 .    ev
 .    rm $HD_NUM
 .    rr #HD_NUM_INDENT
@@ -10310,6 +11115,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       sp -1
 .    \}
 .    vpt
+.    rr nl-from-heading
 .END
 \#
 \# HEADING_STYLE
@@ -10352,7 +11158,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .MAC HEADING_STYLE END
 .    if !\B'\\$1' \{\
 .       tm1 "[mom]: The first argument to \\$0 must be a numeric heading level.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .    \}
 .    nr #LEVEL \\$1
 .    if \\n[#FROM_OLDSTYLE] .nr #LEVEL_\\n[#LEVEL]_SET 1
@@ -10367,15 +11173,15 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          shift
 .          if '\\$1'' \{\
 .             tm1 "[mom]: The UNDERSCORE argument to \\$0 requires a rule weight.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .          \}
 .          ds $HEAD_\\n[#LEVEL]_UL_WEIGHT \\$1
 .          shift
 .          if '\\$1'' \{\
 .             tm1 "[mom]: The UNDERSCORE argument to \\$0 requires a rule gap.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .          \}
-.          ds $HEAD_\\n[#LEVEL]_UL_GAP    \\$1
+.          ds $HEAD_\\n[#LEVEL]_UL_GAP \\$1
 .          shift
 .       \}
 .       if '\\$1'NO_UNDERSCORE' \{\
@@ -10387,25 +11193,26 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          shift
 .          if '\\$1'' \{\
 .             tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires a rule weight.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .          \}
 .          ds $HEAD_\\n[#LEVEL]_UL2_WEIGHT \\$1
 .          shift
 .          if '\\$1'' \{\
 .             tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires a rule gap.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .          \}
-.          ds $HEAD_\\n[#LEVEL]_UL2_GAP_1  \\$1
+.          ds $HEAD_\\n[#LEVEL]_UL2_GAP_1 \\$1
 .          shift
 .          if '\\$1'' \{\
 .             tm1 "[mom]: The UNDERSCORE2 argument to \\$0 requires an inter-rule gap.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .          \}
 .          ds $HEAD_\\n[#LEVEL]_UL2_GAP_2  \\$1
 .          shift
 .       \}
 .       if '\\$1'NO_UNDERSCORE2' \{\
 .          rr #HEAD_\\n[#LEVEL]_UNDERSCORE2
+.          shift
 .       \}
 .       if '\\$1'SPACE_AFTER' \{\
 .          nr #HEAD_\\n[#LEVEL]_SPACE_AFTER 1
@@ -10432,13 +11239,11 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .       \}
 .       if '\\$1'QUAD' \{\
 .          shift
-.          if '\\$1'L'      .ds $HEAD_\\n[#LEVEL]_QUAD LEFT
-.          if '\\$1'LEFT'   .ds $HEAD_\\n[#LEVEL]_QUAD LEFT
-.          if '\\$1'C'      .ds $HEAD_\\n[#LEVEL]_QUAD CENTER
-.          if '\\$1'CENTRE' .ds $HEAD_\\n[#LEVEL]_QUAD CENTER
-.          if '\\$1'CENTER' .ds $HEAD_\\n[#LEVEL]_QUAD CENTER
-.          if '\\$1'R'      .ds $HEAD_\\n[#LEVEL]_QUAD RIGHT
-.          if '\\$1'RIGHT'  .ds $HEAD_\\n[#LEVEL]_QUAD RIGHT
+.          ds $QUAD_TYPE \\$1
+.          substring $QUAD_TYPE 0 0
+.          if '\\*[$QUAD_TYPE]'L' .ds $HEAD_\\n[#LEVEL]_QUAD LEFT
+.          if '\\*[$QUAD_TYPE]'C' .ds $HEAD_\\n[#LEVEL]_QUAD CENTER
+.          if '\\*[$QUAD_TYPE]'R' .ds $HEAD_\\n[#LEVEL]_QUAD RIGHT
 .          shift
 .       \}
 .       if '\\$1'COLOR' \{\
@@ -10459,6 +11264,14 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          rr #HEAD_\\n[#LEVEL]_CAPS
 .          shift
 .       \}
+.       if '\\$1'SMALLCAPS' \{\
+.          nr #\\*[$TOC]HEAD_\\n[#LEVEL]_SMALLCAPS 1
+.          shift
+.       \}
+.       if '\\$1'NO_SMALLCAPS' \{\
+.          rr #HEAD_\\n[#LEVEL]_SMALLCAPS
+.          shift
+.       \}
 .       if '\\$1'NUMBER' \{\
 .          nr #NUMBER_HEAD_\\n[#LEVEL] 1
 .          nr #HEAD_\\n[#LEVEL]_NUM 0 1
@@ -10474,11 +11287,32 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          nr #FROM_STYLE_\\n[#LEVEL] 1
 .          shift
 .       \}
+.       if '\\$1'NEEDS' \{\
+.          shift
+.          ds $HEAD_\\n[#LEVEL]_NEEDS \\$1
+.          shift
+.       \}
+.       if '\\$1'SHIM' \{\
+.          rr #HEAD_\\n[#LEVEL]_NO_SHIM
+.          shift
+.       \}
+.       if '\\$1'NO_SHIM' \{\
+.          nr #HEAD_\\n[#LEVEL]_NO_SHIM 1
+.          shift
+.       \}
+.       if '\\$1'FLEX' \{\
+.          rr #HEAD_\\n[#LEVEL]_NO_FLEX
+.          shift
+.       \}
+.       if '\\$1'NO_FLEX' \{\
+.          nr #HEAD_\\n[#LEVEL]_NO_FLEX 1
+.          shift
+.       \}
 .    \}
 .    rr #LEVEL
 .    if d$TOC .rm $TOC
 .END
-\#
+.
 .ALIAS TOC_ENTRY_STYLE HEADING_STYLE
 \#
 \# OLDSTYLE HEADINGS
@@ -10617,7 +11451,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    tm1 "       Use 'HEADING <level> PARAHEAD <text>' instead.
 .    tm1 "       You will probably want to invoke HEADING_STYLE to set
 .    tm1 "       the type parameters for the parahead.  See docs.
-.    ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.    ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .END
 \#
 \# Wrapper macro for oldstyle NUMBER_HEADS, NUMBER_SUBHEADS...
@@ -10626,7 +11460,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    if '\\$0'NUMBER_PARAHEADS' \{\
 .       tm1 "[mom]: \\$0 is no longer a valid macro.
 .       tm1 "       Use 'HEADING_STYLE <level> NUMBER' instead.  See docs.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .       return
 .    \}
 .    if '\\$0'NUMBER_HEADS'       .nr level 1
@@ -10647,14 +11481,14 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    rm $PARAM
 .    rm $SWITCH
 .END
-\#
+.
 .ALIAS NUMBER_HEADS       HEADING_NUMBERS
 .ALIAS NUMBER_SUBHEADS    HEADING_NUMBERS
 .ALIAS NUMBER_SUBSUBHEADS HEADING_NUMBERS
 .ALIAS NUMBER_PARAHEADS   HEADING_NUMBERS
 \#
 \# PREFIX CHAPTER NUMBERS TO HEADINGS/TOC ENTRIES
-\# ----------------------------------------------------------------
+\# ----------------------------------------------
 \# *Arguments:
 \#   <none> | <chapter number> | <anything>
 \# *Function:
@@ -10665,37 +11499,8 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   Default is OFF.
 \#
 .MAC PREFIX_CHAPTER_NUMBER END
-.    ie '\\$1'' \{\
-.       ie r#CH_NUM \{\
-.          nr #PREFIX_CH_NUM 1
-.          if \\n[#CHAPTER_CALLED] \{\
-.             ie \B'\\*[$CHAPTER]' .nr #CH_NUM \\*[$CHAPTER]
-.             el .PREFIX_CH_NUM_WARNING
-.             rr #CHAPTER_CALLED
-.          \}
-.       \}
-.       el \{\
-.          ie \B'\\*[$CHAPTER]' \{\
-.             nr #PREFIX_CH_NUM 1
-.             nr #CH_NUM \\*[$CHAPTER]
-.          \}
-.          el .PREFIX_CH_NUM_WARNING
-.       \}
-.    \}
-.    el \{\
-.       ie \B'\\$1' \{\
-.          nr #CH_NUM \\$1
-.          nr #PREFIX_CH_NUM 1
-.       \}
-.       el .rr #PREFIX_CH_NUM
-.    \}
-.END
-\#
-.MAC PREFIX_CH_NUM_WARNING END
-.    tm1 "[mom]: PREFIX_CHAPTER_NUMBER cannot determine a chapter number.
-.    tm1 "       Enter the current chapter number as a digit after
-.    tm1 "       PREFIX_CHAPTER_NUMBER.
-.    ab Aborting '\\n[.F]', line \\n[.c].
+.    ie '\\$1'' .nr #PREFIX_CH_NUM 1
+.    el .rr #PREFIX_CH_NUM
 .END
 \#
 \# ====================================================================
@@ -10708,7 +11513,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   [character] [iterations] [vertical adjustment]
 \# *Function:
 \#   Allows user to specify a line break character and the number
-\#   of times to repeat it horiontally.
+\#   of times to repeat it horizontally.
 \# *Notes:
 \#   Without an argument, LINEBREAK_CHAR will deposit a blank line.
 \#
@@ -10845,9 +11650,8 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   PRINTSTYLE TYPEWRITE without SINGLESPACE.
 \#
 .MAC PARA_SPACE END
-.    ie '\\$1'' \{\
+.    ie '\\$1'' \
 .       nr #PP_SPACE 1
-.    \}
 .    el \{\
 .       ie \B'\\$1' \{\
 .          nr #PP_SPACE 1
@@ -10870,6 +11674,11 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   PP_STYLE 1 = regular paras; 2 = blockquotes, epigraphs
 \#
 .MAC PP END
+.    if \\n[#COVERTEXT_PP] \{\
+.       ie \\n[#INDENT_ACTIVE] .ti \\n[#INDENT]u+\\n[#PP_INDENT]u
+.       el .ti \\n[#PP_INDENT]u
+.       return
+.    \}
 .    if \\n[#DOC_TYPE]=4 \{\
 .       if !'\\n[.z]'' .di
 .       nr #TOTAL_FIELDS \\n[#FIELD]
@@ -10911,9 +11720,8 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          ie \\n[#ENDNOTE] .vs \\n[#EN_LEAD]u
 .          el .vs \\n[#DOC_LEAD]u
 .          QUAD \\*[$DOC_QUAD]
-.          if \\n[#SLANT_ON] \{\
+.          if \\n[#SLANT_ON] \
 .             if \\n[#UNDERLINE_SLANT] .UNDERLINE
-.          \}
 .          if '\\*[$PP_FT]'I' \
 .             if \\n[#ITALIC_MEANS_ITALIC] .FT I
 .       \}
@@ -10956,10 +11764,9 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          \}
 .       \}
 .       el \{\
-\#.          br
 .          if \\n[#PP_SPACE] \{\
 .             ie \\n[#END_QUOTE] \{\
-.                ie !'\\*[$PP_SPACE_AMOUNT]'' .ALD \\*[$PP_SPACE_AMOUNT]
+.                ie !'\\*[$PP_SPACE_AMOUNT]'' .sp \\*[$PP_SPACE_AMOUNT]
 .                el .sp
 .                rr #END_QUOTE
 .                nr #NO_SPACE 1
@@ -10967,9 +11774,16 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .             \}
 .             el \{\
 .                if \\n[#NO_SPACE]=1 .rr #NO_SPACE
+.                if \\n[post-float] \{\
+.                   if (\\n[.t]-1)<\\*[$PP_SPACE_AMOUNT] \{\
+.                      ie \\n[#COLS] .COL_NEXT
+.                      el .NEWPAGE
+.                   \}
+.                   rr post-float
+.                \}
 .                if !\\n[nl]=\\n[#BASELINE_MARK] \{\
-.                ie !'\\*[$PP_SPACE_AMOUNT]'' .ALD \\*[$PP_SPACE_AMOUNT]
-.                el .sp
+.                   ie !'\\*[$PP_SPACE_AMOUNT]'' .sp \\*[$PP_SPACE_AMOUNT]
+.                   el .sp
 .                   rr #BASELINE_MARK
 .                \}
 .             \}
@@ -11001,11 +11815,6 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    \}
 .    if \\n[#PP_STYLE]=2 \{\
 \!.     br
-.       if \\n[#BROKEN_QUOTE] \{\
-.          ie \\n[nl]=\\n[#PAGE_TOP] .nr #Q_PP 1
-.          el .nr #Q_PP 0
-.          rr #BROKEN_QUOTE
-.       \}
 .       ie \\n[#Q_PP]=0 \{\
 .          if \\n[#INDENT_FIRST_PARAS] \
 .             ti \\n[#PP_INDENT]u/2u
@@ -11075,14 +11884,18 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#  Default is 3 for typeset; 2 for typewrite.
 \#
 .MAC QUOTE_INDENT END
-.    rr #Q_OFFSET_VALUE
-.    rm $Q_OFFSET_VALUE
+.    if '\\$0'BLOCKQUOTE_INDENT' .ds BQ BQ
+.    if '\\$0'QUOTE_INDENT'      .ds BQ Q
+.    rr #\\*[BQ]_OFFSET_VALUE
+.    rm $\\*[BQ]_OFFSET_VALUE
 .    ds $EVAL_QI_ARG \\$1
 .    substring $EVAL_QI_ARG -1
-.    ie \B'\\*[$EVAL_QI_ARG]' .nr #Q_OFFSET_VALUE \\$1
-.    el .ds $Q_OFFSET_VALUE \\$1
-.    rm $EVAL_QI_ARG
+.    ie \B'\\*[$EVAL_QI_ARG]' .nr #\\*[BQ]_OFFSET_VALUE \\$1
+.    el .ds $\\*[BQ]_OFFSET_VALUE \\$1
+.    rm BQ
 .END
+.
+.ALIAS BLOCKQUOTE_INDENT QUOTE_INDENT
 \#
 \# QUOTE_AUTOLEAD
 \# --------------
@@ -11098,7 +11911,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    if '\\$0'ENDNOTE_QUOTE_AUTOLEAD'      .nr #EN_Q_AUTOLEAD (p;\\$1)
 .    if '\\$0'ENDNOTE_BLOCKQUOTE_AUTOLEAD' .nr #EN_BQ_AUTOLEAD (p;\\$1)
 .END
-\#
+.
 .ALIAS BLOCKQUOTE_AUTOLEAD         QUOTE_AUTOLEAD
 .ALIAS ENDNOTE_QUOTE_AUTOLEAD      QUOTE_AUTOLEAD
 .ALIAS ENDNOTE_BLOCKQUOTE_AUTOLEAD QUOTE_AUTOLEAD
@@ -11129,36 +11942,33 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   diverted so its depth can be measured (in DO_QUOTE) for determining
 \#   how much space to put before and after.
 \#
-\# QUOTE
-\# -----
-\# *Arguments:
-\#   <none> | <anything>
-\# *Function:
-\#   Indents quoted text on a line for line basis, or turns QUOTE off.
-\# *Notes:
-\#   Owing to the need to bottom align TYPESET pages, quoted text gets
-\#   diverted so its depth can be measured (in DO_QUOTE) for determining
-\#   how much space to put before and after.
-\#
 .MAC QUOTE END
-.    br
+.    ie \\n[@TOP] \
+.       br
+.    el 'br
 .    if \\n[#PP]>0 .rr #START
 .    if \\n[#LINENUMBERS]=1 \{\
 .       nr #LINENUMBERS 2
 .       nr #NEXT_LN \\n[ln]
 .       nm
 .    \}
+.    if '\\$1'ADJUST' \{\
+.       ds $Q_SPACE_ADJUST \\$2
+.       shift 2
+.    \}
 .    ie '\\$1'' \{\
 .       ev QUOTE
 .       evc 0
-.       if \\n[#LINENUMBERS]=2 \{\
+.       if \\n[.i] .in 0
+.       if \\n[#LINENUMBERS]=2 \
 .          if \\n[#SILENT_QUOTE_LN]=1 .nm \\n[#NEXT_LN] 1000 -4
-.       \}
 .       nr #IN_DIVER 1
 .       nr #QUOTE 1
 .       di P_QUOTE
-.       ie !'\\*[$Q_OFFSET_VALUE]'' .ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
-.       el .ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+.       if '\\*[$Q_QUAD]'LEFT' \{\
+.          ie !'\\*[$Q_OFFSET_VALUE]'' .ll \\n[#L_LENGTH]u-\\*[$Q_OFFSET_VALUE]
+.          el .ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u)
+.       \}
 .       ta \\n[.l]u
 .       if \\n[#COLUMNS] \{\
 .          ie \\n[#Q_OFFSET_VALUE] \
@@ -11184,17 +11994,16 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .             ps \\n[#EN_PS]u\\*[$QUOTE_SIZE_CHANGE]
 .             ie !r #EN_Q_AUTOLEAD .vs \\n[#EN_Q_LEAD]u
 .             el \{\
-.                vs \\n[.ps]u+\n[#EN_Q_AUTOLEAD]u
+.                vs \\n[.ps]u+\\n[#EN_Q_AUTOLEAD]u
 .                nr #EN_Q_LEAD \\n[.v]
 .             \}
 .          \}
 .          nr #Q_LEAD_REAL \\n[.v]
-.          LEFT
 .          if \\n[#QUOTE_COLOR]=1 \{\
 .             nf
-\m[\\*[$QUOTE_COLOR]]
-.             EOL
+.             COLOR \\*[$QUOTE_COLOR]
 .          \}
+.          \\*[$Q_QUAD]
 .       \}
 .       if \\n[#LINENUMBERS]=2 \{\
 .          ie \\n[#QUOTE_LN]=1 \{\
@@ -11203,9 +12012,8 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .             nm \\n[ln] "" \\n[#Q_LN_GUTTER] -3-\\n[#Q_LN_GUTTER]
 .             RESTORE_PARAMS
 .          \}
-.          el \{\
+.          el \
 .             if !\\n[#SILENT_QUOTE_LN] .NUMBER_LINES OFF
-.          \}
 .       \}
 .       nr #Q_TOP \\n[nl]
 .       if \\n[#PRINT_STYLE]=1 \
@@ -11226,18 +12034,18 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .MAC CODE END
 \c
 .    if '\\$1'BR' \{\
-.       br
-.       nr #BREAK_OR_SPREAD 1
+.       ie '\\n[.z]'FLOAT*DIV' 'br
+.       el .br
 .       shift
 .    \}
 .    if '\\$1'BREAK' \{\
-.       nr #BREAK_OR_SPREAD 1
-.       br
+.       ie '\\n[.z]'FLOAT*DIV' 'br
+.       el .br
 .       shift
 .    \}
 .    if '\\$1'SPREAD' \{\
-.       nr #BREAK_OR_SPREAD 2
-.       brp
+.       ie '\\n[.z]'FLOAT*DIV' 'brp
+.       el .brp
 .       shift
 .    \}
 .    ie '\\$1'' \{\
@@ -11271,7 +12079,10 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          \}
 .          if \\n[#CODE_COLOR]=1 .COLOR \\*[$CODE_COLOR]
 .          char ' \[aq]
-.          if !\\n[#CODE_SIZE_ADJ]=0 .ps \\n[#PT_SIZE]u*\\n[#CODE_SIZE_ADJ]u/100u
+.          if !\\n[#CODE_SIZE_ADJ]=0 \{\
+.             nr #RESTORE_SIZE \\n[.s]
+.             ps \\n[#PT_SIZE]u*\\n[#CODE_SIZE_ADJ]u/100u
+.          \}
 .          if \\n[#SQ_ON] \{\
 .             nr #SQ_WAS_ON 1
 .             SMARTQUOTES OFF
@@ -11281,10 +12092,11 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    el \{\
 .       fam \\*[#RESTORE_FAM]
 .       ft  \\*[#RESTORE_FT]
+.       if !\\n[#CODE_SIZE_ADJ]=0 .ps \\n[#RESTORE_SIZE]
 .       rm $RESTORE_FAM
 .       rm $RESTORE_FT
-.       if !\\n[#CODE_SIZE_ADJ]=0 .ps
-.       char ' \[aq]
+.       rm $RESTORE_SIZE
+.       if \\n[#PRINT_STYLE]=2 .char ' \[cq]
 .       if !'\\n[.z]'' \
 .          if \\n[#LINENUMBERS] .nn
 .       if \\n[#CODE_COLOR]=1 .gcolor
@@ -11296,46 +12108,10 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          rr #SQ_WAS_ON
 .          SMARTQUOTES
 .       \}
-.       if \\n[#QUOTE] .sp 1v
+.       if \\n[#QUOTE] .sp -1
 .    \}
 .END
 \#
-\# CODE_FAMILY
-\# -----------
-\# *Arguments:
-\#   <family>
-\# *Function:
-\#   Creates register #CODE_FAM and string $CODE_FAM for use by CODE.
-\#
-.MAC CODE_FAMILY END
-.    nr #CODE_FAM 1
-.    ds $CODE_FAM \\$1
-.END
-\#
-\# CODE_FONT
-\# ---------
-\# *Arguments:
-\#   <font>
-\# *Function:
-\#   Creates register #CODE_FT and string $CODE_FT for use by CODE.
-\#
-.MAC CODE_FONT END
-.    nr #CODE_FT 1
-.    ds $CODE_FT \\$1
-.END
-\#
-\# CODE_SIZE
-\# ---------
-\# *Arguments:
-\#   <percentage to zoom code font>
-\# *Function:
-\#   Creates register #CODE_SIZE_ADJ, used in CODE to zoom the
-\#   CODE_FONT to a percentage of the current point size.
-\#
-.MAC CODE_SIZE END
-. nr #CODE_SIZE_ADJ \\$1
-.END
-\#
 \# ---Blockquotes---
 \#
 \# BLOCKQUOTE
@@ -11355,60 +12131,76 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#
 .MAC BLOCKQUOTE END
 .    br
+.    if \\n[#PP]>0 .rr #START
 .    if \\n[#LINENUMBERS]=1 \{\
 .       nr #LINENUMBERS 2
 .       nr #NEXT_LN \\n[ln]
 .       nm
 .    \}
+.    if '\\$1'ADJUST' \{\
+.       ds $BQ_SPACE_ADJUST \\$2
+.       shift 2
+.    \}
+.    if \\n[in-cutaround] .nr #PP_INDENT \\n[restore-pp-ind]/2
 .    ie '\\$1'' \{\
 .       ev BLOCKQUOTE
 .       evc 0
+.       if \\n[.i] .in 0
+.       if \\n[#LINENUMBERS]=2 \
+.          if \\n[#SILENT_BQUOTE_LN]=1 .nm \\n[#NEXT_LN] 1000 -4
 .       nr #IN_DIVER 1
 .       nr #QUOTE    2
 .       nr #PP_STYLE 2
 .       nr #Q_PP     0
+.       if \\n[in-cutaround] \{\
+.          if '\\*[cutaround-type]'RIGHT' \{\
+.             nr reset-ll 1
+.             nr #L_LENGTH \\n[#DOC_L_LENGTH]-\\n[cutaround-width]-1v\\*[width-adj]
+.          \}
+.       \}
 .       di B_QUOTE
-.       ie !'\\*[$Q_OFFSET_VALUE]'' .ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
-.       el .ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+.       ie !'\\*[$BQ_OFFSET_VALUE]'' .ll \\n[#L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]*2u)
+.       el .ll \\n[#L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
+.       if \\n[in-cutaround] .nr #PP_INDENT \\n[.i]+\\n[pp-ind-tmp]
 .       if \\n[#ENDNOTE] \{\
 .          if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
-.             ie r#Q_OFFSET_VALUE \
+.             ie r#BQ_OFFSET_VALUE \
 .                ll \
-\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
 .             el \
 .                ll \
-\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$Q_OFFSET_VALUE]*2u)
+\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$BQ_OFFSET_VALUE]*2u)
 .          \}
 .          if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
-.             ie r#Q_OFFSET_VALUE \
-.                ll \\n[#L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+.             ie r#BQ_OFFSET_VALUE \
+.                ll \\n[#L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
 .             el \
-.                ll \\n[#L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]u*2u)
+.                ll \\n[#L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]u*2u)
 .          \}
 .       \}
 .       ta \\n[.l]u
 .       CHECK_INDENT
 .       if \\n[#COLUMNS] \{\
-.          ie r#Q_OFFSET_VALUE \
+.          ie r#BQ_OFFSET_VALUE \
 .             ll \
-\\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+\\n[#COL_L_LENGTH]u-(\\n[#PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
 .          el \
-.             ll \\n[#COL_L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
+.             ll \\n[#COL_L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]*2u)
 .          if \\n[#ENDNOTE] \{\
 .             if \\n[#EN_NUMBERS_ALIGN_RIGHT] \{\
-.                ie r#Q_OFFSET_VALUE \
+.                ie r#BQ_OFFSET_VALUE \
 .                   ll \
-\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
 .                el \
 .                   ll \
-\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$Q_OFFSET_VALUE]*2u)
+\\n[#RESET_L_LENGTH]u-\\n[#EN_TEXT_INDENT]u-(\\*[$BQ_OFFSET_VALUE]*2u)
 .             \}
 .             if \\n[#EN_NUMBERS_ALIGN_LEFT] \{\
-.                ie r#Q_OFFSET_VALUE \
+.                ie r#BQ_OFFSET_VALUE \
 .                   ll \
-\\n[#COL_L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#Q_OFFSET_VALUE]u*2u))
+\\n[#COL_L_LENGTH]u-(\\n[#EN_PP_INDENT]u*(\\n[#BQ_OFFSET_VALUE]u*2u))
 .                el \
-.                   ll \\n[#COL_L_LENGTH]u-(\\*[$Q_OFFSET_VALUE]*2u)
+.                   ll \\n[#COL_L_LENGTH]u-(\\*[$BQ_OFFSET_VALUE]*2u)
 .             \}
 .          \}
 .          ta \\n[.l]u
@@ -11436,11 +12228,10 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .                nr #EN_BQ_LEAD \\n[.v]
 .             \}
 .          \}
-.          nr #Q_LEAD_REAL \\n[.v]
+.          nr #BQ_LEAD_REAL \\n[.v]
 .          if \\n[#BQUOTE_COLOR]=1 \{\
 .             nf
-\m[\\*[$BQUOTE_COLOR]]
-.             EOL
+.             COLOR \\*[$BQUOTE_COLOR]
 .          \}
 .          QUAD \\*[$BQUOTE_QUAD]
 .          nr #DIVERSIONS_HY_MARGIN (p;\\n[.ps]u*2.75)/1000
@@ -11471,7 +12262,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          \}
 .       \}
 .    \}
-.    el .DO_QUOTE
+.    el .DO_BLOCKQUOTE
 .END
 \#
 \# DO QUOTE
@@ -11484,7 +12275,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \#   position.  TYPEWRITE treats spacing the same way in all circumstance
 \#   (viz. an extra line space).  TYPESET puts in only half
 \#   line spaces if the entire quote plus 1 line of body under the quote
-\#   fits on the the page; otherwise it puts in a full extra blank
+\#   fits on the page; otherwise it puts in a full extra blank
 \#   line.  (This is to ensure the page remains bottom aligned).
 \#
 .MAC DO_QUOTE END
@@ -11493,7 +12284,16 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 \!.     NUMBER_LINES OFF
 .       rr #DIVER_LN_OFF
 .    \}
+.    nr #Q_DEPTH \\n[.d]
 .    di
+.    if '\\$0'DO_BLOCKQUOTE' .ds BQ BQ
+.    if '\\$0'DO_QUOTE'      .ds BQ Q
+.    if \\n[in-cutaround] \{\
+.       if \\n[dn]>\\n[.t] \{\
+.          tm1 "[mom]: Blockquote depth exceeds cutaround depth."
+.          ab   [mom]: Aborting at line \\n[.c].
+.       \}
+.    \}
 .    rr #IN_DIVER
 .    if \\n[#RESET_FN_COUNTERS]=2 \{\
 .       if !\\n[#FN_COUNT]=1 \{\
@@ -11507,17 +12307,14 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    nr #DONE_ONCE 0 1
 .    REMOVE_INDENT
 .    ev
-.    nr #Q_DEPTH (\\n[#DIVER_DEPTH]-\\n[#Q_LEAD_REAL])
-.    nr #Q_LEAD_DIFF \\n[#LEAD]-\\n[#Q_LEAD_REAL]
-.    if !\\n[.v]=\\n[#Q_LEAD_REAL] \{\
-.       SILENT
+.    nr #Q_LEAD_DIFF \\n[#LEAD]-\\n[#\\*[BQ]_LEAD_REAL]
+.    if !'\\n[.z]'FLOAT*DIV' \{\
 .       br
-.       nf
-.       nr #CURRENT_V_POS \
-\\n[nl]+\\n[#Q_LEAD_DIFF]+(\\n[#DIVER_DEPTH]-\\n[#Q_DEPTH_REAL])
+.       nr #CALCULATE_ONLY 1
+.       nr #CURRENT_V_POS \\n[nl]+\\n[#Q_DEPTH]
 .       SHIM
-.       SILENT OFF
-.       nr #Q_SPACE_ADJ \\n[#SHIM]/2
+.       rr #CALCULATE_ONLY
+.       nr #Q_SPACE_EQ (\\n[#SHIM]/2)
 .       nr #TRAP \\n[.t]-1
 .    \}
 .    if \\n[#ENDNOTE] \{\
@@ -11543,111 +12340,168 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          \}
 .       \}
 .       el \{\
-.          ie \\n[#Q_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
-.             ie ((\\n[#TRAP_DISTANCE]-1)-\\n[#Q_DEPTH])<\\n[#DOC_LEAD] \
-.                Q_NOFIT
-.             el \{\
-.                ie (\\n[#TRAP_DISTANCE]-\\n[#DOC_LEAD])<\\n[#DOC_LEAD] .Q_NOFIT
-.                el \{\
-.                   ie (\\n[#Q_DEPTH]+\\n[.v])=(\\n[#TRAP_DISTANCE]-1) .Q_NOFIT
+.          if !\\n[nl]=\\n[#PAGE_TOP] \{\
+.             ie \\n[#Q_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
+.                ie ((\\n[#TRAP_DISTANCE]-1)-\\n[#Q_DEPTH])<\\n[#DOC_LEAD] \{\
+.                   ie !\\n[in-cutaround] .Q_NOFIT
 .                   el .Q_FITS
 .                \}
+.                el \{\
+.                   ie (\\n[#TRAP_DISTANCE]-\\n[#DOC_LEAD])<\\n[#DOC_LEAD] .Q_NOFIT
+.                   el \{\
+.                      ie (\\n[#Q_DEPTH]+\\n[.v])=(\\n[#TRAP_DISTANCE]-1) .Q_NOFIT
+.                      el .Q_FITS
+.                   \}
+.                \}
 .             \}
+.             el .Q_NOFIT
 .          \}
-.          el .Q_NOFIT
 .       \}
 .       if \\n[#LINEBREAK] \{\
-.          ie !\\n[@TOP] .RLD \\n[#DOC_LEAD]u
+.          vpt 0
+.          ie !\\n[@TOP] .sp -\\n[#DOC_LEAD]u
 .          el \{\
 .             nop
 .             sp |\\n[#T_MARGIN]u-\\n[#BQ_LEAD]u
 .          \}
+.         vpt
 .       \}
 .    \}
-.    ie !'\\*[$Q_OFFSET_VALUE]'' .nr #Q_OFFSET \\n[#L_MARGIN]+\\*[$Q_OFFSET_VALUE]
+.    ie !'\\*[$\\*[BQ]_OFFSET_VALUE]'' \
+.       nr #\\*[BQ]_OFFSET \\n[#L_MARGIN]+(\\*[$\\*[BQ]_OFFSET_VALUE])
 .    el \
-.       nr #Q_OFFSET \\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
+.       nr #\\*[BQ]_OFFSET \
+\\n[#L_MARGIN]+(\\n[#PP_INDENT]*\\n[#\\*[BQ]_OFFSET_VALUE])
 .    if \\n[#COLUMNS] \{\
-.       ie r#Q_OFFSET_VALUE \
-.          nr #Q_OFFSET \
-\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#Q_OFFSET_VALUE])
-.       el .nr #Q_OFFSET \\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$Q_OFFSET_VALUE]
+.       ie r#\\*[BQ]_OFFSET_VALUE \
+.          nr #\\*[BQ]_OFFSET \
+\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+(\\n[#PP_INDENT]*\\n[#\\*[BQ]_OFFSET_VALUE])
+.       el .nr #\\*[BQ]_OFFSET \
+\\n[#COL_\\n[#COL_NUM]_L_MARGIN]+\\*[$\\*[BQ]_OFFSET_VALUE]
 .    \}
 .    if !\\n[#ENDNOTE] \{\
-.       po \\n[#Q_OFFSET]u
-.       if '\\n[.z]'FLOAT*DIV' \!.po \\n[#Q_OFFSET]u
+.       ie '\\*[BQ]'Q' \{\
+.          if '\\*[$Q_QUAD]'LEFT' \{\
+.             po \\n[#Q_OFFSET]u
+.             if '\\n[.z]'FLOAT*DIV' \!.po \\n[#Q_OFFSET]u
+.          \}
+.       \}
+.       el \{\
+.          po \\n[#\\*[BQ]_OFFSET]u
+.          if '\\n[.z]'FLOAT*DIV' \!.po \\n[#\\*[BQ]_OFFSET]u
+.       \}
 .    \}
 .    if \\n[#ENDNOTE] \{\
-.       ie \\n[#Q_OFFSET_VALUE] .in +\\n[#EN_PP_INDENT]u*\\n[#Q_OFFSET_VALUE]u
-.       el .in +\\*[$Q_OFFSET_VALUE]
+.       ie \\n[#\\*[BQ]_OFFSET_VALUE] \
+.          in +\\n[#EN_PP_INDENT]u*\\n[#\\*[BQ]_OFFSET_VALUE]u
+.       el .in +\\*[$\\*[BQ]_OFFSET_VALUE]
 .    \}
 .    ie \\n[#START]=1 \{\
-.       ie !\\n[#Q_LEAD_DIFF]<0 .ALD \\n[#Q_SPACE_ADJ]u
+.       ie !\\n[#Q_LEAD_DIFF]<0 \
+.          if !\\n[#NO_SHIM] .sp \\n[#Q_SPACE_EQ]u
 .       el .RLD 0-\\n[#Q_LEAD_DIFF]u
 .    \}
 .    el \{\
-.       if \\n[#PRINT_STYLE]=2 \{\
-.           if !\\n[.v]=\\n[#Q_LEAD] .ALD \\n[#Q_SPACE_ADJ]u
-.       \}
+.       if \\n[#PRINT_STYLE]=2 \
+.          ie !\\n[#NO_SHIM] \
+.             sp \\n[#Q_SPACE_EQ]u+(\\n[#Q_LEAD_DIFF]u/2u)
+.          el .if !\\n[#NO_FLEX] .FLEX
 .    \}
 .    if \\n[#QUOTE]=1 \{\
+.       if !'\\*[$Q_SPACE_ADJUST]'' .sp +\\*[$Q_SPACE_ADJUST]
 .       nf
 .       P_QUOTE
-.       br
-.       if !\\n[#START] .rr #QUOTE
+.       if !'\\*[$Q_SPACE_ADJUST]'' \{\
+.          sp -\\*[$Q_SPACE_ADJUST]
+.          rm $Q_SPACE_ADJUST
+.       \}
 .    \}
 .    if \\n[#QUOTE]=2 \{\
+.       if !'\\*[$BQ_SPACE_ADJUST]'' .sp +\\*[$BQ_SPACE_ADJUST]
 .       nf
 .       B_QUOTE
-.       br
+.       if !'\\*[$BQ_SPACE_ADJUST]'' \{\
+.          sp -\\*[$BQ_SPACE_ADJUST]
+.          rm $BQ_SPACE_ADJUST
+.       \}
 .    \}
-.    if \\n[#PRINT_STYLE]=1 \
-.       if !\\n[.v]=\\n[#DOC_LEAD] .SHIM
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       ie \\n[#START] \{\
-.          ie \\n[#PP_SPACE] .
-.          el \{\
-.             ALD \\n[#DOC_LEAD]u
-.             SHIM
-.          \}
+.    if !\\n[#START] .rr #QUOTE
+.    if \\n[in-cutaround] .nr #PP_INDENT \\n[pp-ind-tmp]
+\#.    if !\\n[ev-popped] .ev \" Needed once cutarounds are implemented
+.    rr delay-ev-pop
+.    if \\n[reset-ll] \{\
+.       if '\\*[cutaround-type]'RIGHT' \{\
+.          ll \\n[#DOC_L_LENGTH]u
+.          rr reset-ll
 .       \}
-.       el \{\
-.          ie \\n[#HEAD]=1 \{\
-.             ALD \\n[#DOC_LEAD]u
-.             SHIM
+.    \}
+.    if !'\\n[.z]'FLOAT*DIV' \{\
+.       if \\n[#PRINT_STYLE]=1 \
+.          if !\\n[.v]=\\n[#DOC_LEAD] \{\
+.             ie !\\n[#NO_SHIM] .SHIM
+.             el \
+.                if !\\n[#NO_FLEX] .FLEX
 .          \}
-.          el \{\
-.             ie \\n[#FULLSPACE_QUOTES] \{\
-.                ie \\n[#ENDNOTE] .ALD \\n[#EN_LEAD]u
-.                el .ALD \\n[#DOC_LEAD]u
+.       if \\n[#PRINT_STYLE]=2 \{\
+.          ie \\n[#START] \{\
+.             ie \\n[#PP_SPACE] .
+.             el \{\
+.                sp \\n[#DOC_LEAD]u
+.                ie !\\n[#NO_SHIM] .SHIM
+.                el \
+.                   if !\\n[#NO_FLEX] .FLEX
 .             \}
-.             el .ALD (\\n[#DOC_LEAD]/2)u
-.             ie \\n[#Q_FITS] \{\
-.                ie (\\n[#Q_TOP]=\\n[#PAGE_TOP]):(\\n[@TOP]=1) \{\
-.                   nr #Q_AT_TOP 1
-.                   nr #DELAY_SHIM 1
-.                \}
+.          \}
+.          el \{\
+.             ie \\n[#HEAD]=1 \{\
+.                sp \\n[#DOC_LEAD]u
+.                ie !\\n[#NO_SHIM] .SHIM
 .                el \
-.                   if !\\n[.v]=\\n[#Q_LEAD_REAL] .SHIM
+.                   if !\\n[#NO_FLEX] .FLEX
 .             \}
 .             el \{\
-.                SHIM
+.                ie \\n[#FULLSPACE_QUOTES] \{\
+.                   ie \\n[#ENDNOTE] .ALD \\n[#EN_LEAD]u
+.                   el !'\\n[.z]'FLOAT*DIV' .ALD \\n[#DOC_LEAD]u
+.                \}
+.                el \
+.                   if !'\\n[.z]'FLOAT*DIV' .ALD \\n[#DOC_LEAD]u/2u
+.                ie \\n[#Q_FITS] \{\
+.                   ie (\\n[#Q_TOP]=\\n[#PAGE_TOP]):(\\n[@TOP]=1) \{\
+.                      if \\n[has-label] .sp \\n[#DOC_LEAD]u/2u
+.                      if !'\\n[.z]'FLOAT*DIV' \{\
+.                         nr #Q_AT_TOP 1
+.                         nr #DELAY_SHIM 1
+.                      \}
+.                   \}
+.                   el \{\
+.                      ie !\\n[#NO_SHIM] .SHIM
+.                      el \
+.                         if !\\n[#NO_FLEX] .FLEX
+.                   \}
+.                \}
+.                el \{\
+.                   ie !\\n[#NO_SHIM] .SHIM
+.                   el \
+.                      if !\\n[#NO_FLEX] .FLEX
 .\" Make sure that Q_LEAD_DIFF is not added to the first line of
 .\" normal text at the top of any page following output of a quote
 .\" whose last line falls on B_MARGIN of the previous page.
-.                if \\n[#Q_LEAD_DIFF] \{\
-.                   if \\n[nl]=(\\n[#T_MARGIN]-\\n[#DOC_LEAD]+\\n[#Q_LEAD_DIFF]) \{\
-.                      PRINT \&
-.                      br
-.                      sp -1v-\\n[#Q_LEAD_DIFF]u
-.                      nr #Q_LEAD_DIFF_CHECK 1
+.                   if \\n[#Q_LEAD_DIFF] \{\
+.                      if \\n[nl]=(\\n[#T_MARGIN]-\\n[#DOC_LEAD]+\\n[#Q_LEAD_DIFF]) \{\
+.                         PRINT \&
+.                         br
+.                         sp -1v-\\n[#Q_LEAD_DIFF]u
+.                         nr #Q_LEAD_DIFF_CHECK 1
+.                      \}
 .                   \}
 .                \}
 .             \}
 .          \}
 .       \}
 .    \}
-.    rr #Q_SPACE_ADJ
+.    if \\n[#RESTORE_NO_SHIM] .nr #NO_SHIM 1
+.    rr #Q_SPACE_EQ
 .    if \\n[#LINENUMBERS]=2 \{\
 .       nr #LINENUMBERS 1
 .       if !\\n[#ENDNOTE] \{\
@@ -11663,17 +12517,16 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .          \}
 .       \}
 .    \}
-.    if \\n[#ENDNOTE] .nr #FULLSPACE_QUOTES \\n[#RESET_QUOTE_SPACING]
+.    if \\n[#ENDNOTE] \
+.       nr #FULLSPACE_QUOTES \\n[#RESET_QUOTE_SPACING]
 .    if r #HEAD .rr #HEAD
 .    if r #EPIGRAPH .rr #EPIGRAPH
 .    rr #Q_PP
 .    rr #LINEBREAK
 .    nr #PP_STYLE  1
 .    nr #END_QUOTE 1
-.    if !\\n[#ENDNOTE] \{\
+.    if !\\n[#ENDNOTE] \
 .       po \\n[#L_MARGIN]u
-.       if '\\n[.z]'FLOAT*DIV' \!.po \\n[#L_MARGIN]u
-.    \}
 .    if \\n[#ENDNOTE]  .in \\n[#EN_TEXT_INDENT]u
 .    if \\n[#COLUMNS] \{\
 .       if !\\n[#ENDNOTE] \{\
@@ -11685,13 +12538,21 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    ie !\\n[#ENDNOTE] .QUAD \\*[$DOC_QUAD]
 .    el .QUAD \\*[EN_QUAD]
 .    if r #DELAY_SHIM \{\
-.       SHIM
+.       ie !\\n[#NO_SHIM] .SHIM
+.       el \
+.          if !\\n[#NO_FLEX] .FLEX
 .       rr #DELAY_SHIM
 .    \}
 .    if \\n[#PRINT_STYLE]=1 \
 .       if \\n[#UNDERLINE_QUOTES] .FT R
 .    nr #QUOTE_4_HD 1
+.    rr #\\*[BQ]_LEAD_REAL
+.    rm BQ
+.    if \\n[#DOC_TYPE]=5 .NO_SHIM
+.    if '\\n[.z]'FLOAT*DIV' \!.po \\n[#L_MARGIN]u
 .END
+.
+.ALIAS DO_BLOCKQUOTE DO_QUOTE
 \#
 \# Utility macros for DO_QUOTE
 \# ---------------------------
@@ -11711,58 +12572,79 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .\" start at the top of the page to fall on the first line of the
 .\" grid (ie. on the first valid baseline of the page).
 .             ie \\n[#Q_TOP]=\\n[#PAGE_TOP] \{\
-.                if \\n[#QUOTE]=1 \{\
-.                   rn P_QUOTE Q_TEMP
-.                   di P_QUOTE
-.                   nf
-.                   vs \\n[#Q_LEAD]u
-.                   PRINT \&
-.                   sp -1v+\\n[#Q_LEAD_DIFF]u
-.                   Q_TEMP
-.                   di
-.                \}
-.                if \\n[#QUOTE]=2 \{\
-.                   rn B_QUOTE Q_TEMP
-.                   di B_QUOTE
-.                   nf
-.                   vs \\n[#BQ_LEAD]u
-.                   PRINT \&
-.                   sp -1v+\\n[#Q_LEAD_DIFF]u
-.                   Q_TEMP
-.                   di
-.                \}
+.                if \\n[#QUOTE]=1 .ds $QUOTE_TYPE Q
+.                if \\n[#QUOTE]=2 .ds $QUOTE_TYPE B 
+.                rn \\*[$QUOTE_TYPE]_QUOTE Q_TEMP
+.                di \\*[$QUOTE_TYPE]_QUOTE
+.                nf
+.                if \\n[#QUOTE]=1 .vs \\n[#Q_LEAD]u
+.                if \\n[#QUOTE]=2 .vs \\n[#BQ_LEAD]u
+.                PRINT \&
+.                sp -1v+\\n[#Q_LEAD_DIFF]u
+.                Q_TEMP
+.                di
 .                rm Q_TEMP
+.                sp \\n[#DOC_LEAD]u/2u
 .             \}
-.             el .ALD (\\n[#DOC_LEAD]u/2u)+\\n[#Q_SPACE_ADJ]u
+.             el \
+.                sp \\n[#DOC_LEAD]u/2u
 .          \}
 .       \}
 .       if \\n[#DIVER_FN]=2 .rr #DIVER_FN
+.       if !\\n[#NO_FLEX] .FLEX
 .    \}
+.    rm $QUOTE_TYPE
 .END
 \#
 .MAC Q_NOFIT END
 .    rr #Q_FITS
+.    if \\n[#QUOTE]=1 \{\
+.       ds $QUOTE_TYPE Q
+.       ds quote-type quote
+.    \}
+.    if \\n[#QUOTE]=2 \{\
+.       ds $QUOTE_TYPE B 
+.       ds quote-type blockquote
+.    \}
+.    if \\n[has-caption] \{\
+.       if !\\n[@TOP] \
+.          if !\\n[nl]=\\n[#PAGE_TOP] \
+.             if (\\n[.t]-1)<\
+\\n[#DOC_LEAD]+(\\n[#DOC_LEAD]/4)\
++\\n[#\\*[QUOTE_TYPE]_LEAD] \{\
+.          tm1 "[mom]: Insufficient room for caption and at least one line of \\*[quote-type]
+.          tm1 "       on page \\n[%] (line \\n[.c]).  Moving quote to next page or column.
+.          ie \\n[#COLUMNS] .COL_NEXT
+.          el .NEWPAGE
+.       \}
+.    \}
 .    ie r#HEAD \
 .       if \\n[#HEAD]=1 .
 .    el \{\
 .       if \\n[#Q_DEPTH]=0 \
 .          if \\n[.ns] .rs
 .       ie \\n[#FULLSPACE_QUOTES] \{\
-.          ie \\n[#ENDNOTE] .ALD \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u
-.          el .ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u
+.          ie \\n[#ENDNOTE] .sp \\n[#EN_LEAD]u+\\n[#Q_LEAD_DIFF]u
+.          el .sp \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]u
 .       \}
 .       el \{\
-.          ALD \\n[#DOC_LEAD]u+\\n[#Q_LEAD_DIFF]
+.          if '\\*[$QUOTE_TYPE]'Q' .sp \\n[#DOC_LEAD]u
 .          if \\n[@TOP] .rs
 .       \}
-.       nr #Q_PARTIAL_DEPTH 0 \\n[#Q_LEAD_REAL]
+.       ie \\n[#Q_LEAD_REAL] \
+.          nr #Q_PARTIAL_DEPTH 0 \\n[#Q_LEAD_REAL]
+.       el .nr #Q_PARTIAL_DEPTH 0 \\n[#BQ_LEAD_REAL]
 .       while \\n+[#Q_PARTIAL_DEPTH]<(\\n[#TRAP_DISTANCE]-1) \{\
 .
 .       \}
-.       nr #Q_PARTIAL_DEPTH -\\n[#Q_LEAD_REAL]
-.       nr #Q_SPACE_ADJ \
-(\\n[#TRAP_DISTANCE]-1)-\\n[#Q_PARTIAL_DEPTH]+\\n[#Q_LEAD_DIFF]u
-.       if \\n[#FN_COUNT]>0 .nr #Q_SPACE_ADJ (\\n[#Q_SPACE_ADJ] / 2u)
+.       if !\\n[#Q_LEAD_REAL]=\\n[#DOC_LEAD] \{\
+.          ie \\n[#Q_LEAD_REAL] \
+.             nr #Q_PARTIAL_DEPTH -\\n[#Q_LEAD_REAL]
+.          el .nr #Q_PARTIAL_DEPTH -\\n[#BQ_LEAD_REAL]
+.       \}
+.       nr #Q_SPACE_EQ \
+(\\n[#TRAP_DISTANCE]-1)-\\n[#Q_PARTIAL_DEPTH]+(\\n[#Q_LEAD_DIFF]u/2u)
+.       if \\n[#FN_COUNT]>0 .nr #Q_SPACE_EQ (\\n[#Q_SPACE_EQ] / 2u)
 .\" Hack to deal with the fact that even though the above routine
 .\" makes the bottom line of the quote fall exactly on the bottom
 .\" margin when traps are disabled, it refuses to do so when traps
@@ -11793,7 +12675,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    ie '\\$1'' .nr #PAGINATE 1
 .    el \{\
 .      nr #PAGINATE 0
-.      if !\\n[#COLLATE] .rr #PAGE_NUM_V_POS
+.      rr #PAGE_NUM_V_POS
 .    \}
 .    if \\n[#HF_OFF]=1 \{\
 .       rr #PAGINATION_STATE
@@ -11910,7 +12792,7 @@ $DOC_COVER_TITLE_\\n+[#DOC_COVER_TITLE_NUM] \\$\\n[#DOC_COVER_TITLE_NUM]
 .    if '\\*[$PN_FOR_KN]'1' .ds $POST_HY_KN \*[BU3]
 .    if '\\*[$PN_FOR_KN]'7' .ds $POST_HY_KN \*[BU3]
 .    PRINT \
-\m[\\*[$PAGENUM_COLOR]]\
+\m[\\*[$PAGE_NUM_COLOR]]\
 \\*[$HYPHEN]\|\\*[$PRE_HY_KN]\\n[#PAGENUMBER]\\*[$POST_HY_KN]\|\\*[$HYPHEN]
 .    br
 .    rm $PRE_HY_KERN
@@ -11991,11 +12873,14 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .             PN_WITH_HYPHENS
 .          \}
 .          if '\\*[$PAGENUM_STYLE]'roman' \
-.             PRINT \m[\\*[$PAGENUM_COLOR]]-\|\\n[#PAGENUMBER]\|-
+.             PRINT \m[\\*[$PAGE_NUM_COLOR]]-\|\\n[#PAGENUMBER]\|-
 .          if '\\*[$PAGENUM_STYLE]'alpha' \
-.             PRINT \m[\\*[$PAGENUM_COLOR]]-\|\\n[#PAGENUMBER]\|-
+.             PRINT \m[\\*[$PAGE_NUM_COLOR]]-\|\\n[#PAGENUMBER]\|-
+.       \}
+.       el \{\
+.          ie !d$PAGENUM_STRING .PRINT \m[\\*[$PAGE_NUM_COLOR]]\\n[#PAGENUMBER]
+.          el .PRINT \m[\\*[$PAGE_NUM_COLOR]]\\*[$PAGENUM_STRING]
 .       \}
-.       el .PRINT \m[\\*[$PAGENUM_COLOR]]\\n[#PAGENUMBER]
 .    \}
 .    ev
 .    nr #DIVER_DEPTH 0
@@ -12266,6 +13151,19 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    el .rm $FN_SPACE
 .END
 \#
+\# FOOTNOTE FIRST LINE INDENT
+\# --------------------------
+\# *Arguments:
+\#   <indent>
+\# *Function:
+\#   Indents first line of footnotes.
+\# *Notes:
+\#   Default is no indent.
+\#
+.MAC FOOTNOTE_INDENT END
+. nr #FN_INDENT \\$1
+.END
+\#
 \# RUN ON FOOTNOTES
 \# ----------------
 \# *Arguments:
@@ -12344,7 +13242,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          if !\\n[#LINENUMBERS] \{\
 .             tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
 .             tm1 "       FOOTNOTE_MARKER_STYLE is LINE.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .          \}
 .          if \\n[#FN_MARK]=0 .nr #FN_MARK \\n[ln]
 .          nr #FN_MARK_2 \\n[ln]
@@ -12394,7 +13292,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .\" or EPIGRAPH isn't yet adjusted at this point, the last word on the
 .\" line may *seem* to belong to the final line of the page, but will,
 .\" in fact, become the first word of the subsequent page.  In such
-.\" circumstances, we want the the footnote to be treated as a "moved"
+.\" circumstances, we want the footnote to be treated as a "moved"
 .\" diversion footnote.
 .          if \\n[.k]>\\n[.l] .nr #DIVER_FN 1
 .          if r #DIVER_FN \{\
@@ -12612,9 +13510,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .\" FN_IN_DIVER is output into FOOTNOTE in PROCESS_FN_IN_DIVER).
 .          if !\\n[#DONT_RULE_ME]=1 \{\
 .             if !\\n[#FN_DEPTH] \{\
-.                if \\n[#PRINT_STYLE]=1 \{\
+.                if \\n[#PRINT_STYLE]=1 \
 .                   if !\\n[#RUN_ON] .sp \\n[#DOC_LEAD]u
-.                \}
 .                ie \\n[#FN_RULE]=1 \{\
 .                   if !\\n[#RUN_ON] \{\
 .                      if \\n[#SINGLE_SPACE] .sp \\n[#DOC_LEAD]u
@@ -12622,7 +13519,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .                      if !'\\*[$FN_SPACE]'' .sp -\\*[$FN_SPACE]
 .                   \}
 .                \}
-.                el .sp 1v
+.                el .sp
 .                nr #RULED 1
 .             \}
 .          \}
@@ -12632,9 +13529,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       SS 0
 .\" Add footnote markers to footnote text...
 .       ie \\n[#FN_MARKERS] \{\
-.          if !'\\*[$FN_SPACE]'' \{\
+.          if !'\\*[$FN_SPACE]'' \
 .             if \\n[#FN_COUNT]>0 .ALD \\*[$FN_SPACE]
-.          \}
 .          if !\\n[#NO_FN_MARKER] \{\
 .\" ...but not if TERMINATE has been called.
 .             if !r#TERMINATE \{\
@@ -12645,36 +13541,35 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .                if \\n[#FN_MARKER_STYLE]=1 \{\
 .                   ie \\n[#COLUMNS]=1 \{\
 .                      \\n+[#FN_COUNT_FOR_COLS]
-.                      if \\n[#FN_COUNT_FOR_COLS]=1 .PRINT *\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=2 .PRINT \[dg]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=3 .PRINT \[dd]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=4 .PRINT **\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=5 .PRINT \[dg]\[dg]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=6 .PRINT \[dd]\[dd]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=7 .PRINT ***\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=8 .PRINT \[dg]\[dg]\[dg]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=9 .PRINT \[dd]\[dd]\[dd]\c
-.                      if \\n[#FN_COUNT_FOR_COLS]=10 .PRINT ****\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=1 .PRINT \h'0+\\n[#FN_INDENT]u'*\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=2 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=3 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=4 .PRINT \h'0+\\n[#FN_INDENT]u'**\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=5 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\[dg]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=6 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\[dd]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=7 .PRINT \h'0+\\n[#FN_INDENT]u'***\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=8 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\[dg]\[dg]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=9 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\[dd]\[dd]\c
+.                      if \\n[#FN_COUNT_FOR_COLS]=10 .PRINT \h'0+\\n[#FN_INDENT]u'****\c
 .                   \}
 .                   el \{\
-.                      if \\n[#FN_COUNT]=1 .PRINT *\c
-.                      if \\n[#FN_COUNT]=2 .PRINT \[dg]\c
-.                      if \\n[#FN_COUNT]=3 .PRINT \[dd]\c
-.                      if \\n[#FN_COUNT]=4 .PRINT **\c
-.                      if \\n[#FN_COUNT]=5 .PRINT \[dg]\[dg]\c
-.                      if \\n[#FN_COUNT]=6 .PRINT \[dd]\[dd]\c
-.                      if \\n[#FN_COUNT]=7 .PRINT ***\c
-.                      if \\n[#FN_COUNT]=8 .PRINT \[dg]\[dg]\[dg]\c
-.                      if \\n[#FN_COUNT]=9 .PRINT \[dd]\[dd]\[dd]\c
-.                      if \\n[#FN_COUNT]=10 .PRINT ****\c
+.                      if \\n[#FN_COUNT]=1 .PRINT \h'0+\\n[#FN_INDENT]u'*\c
+.                      if \\n[#FN_COUNT]=2 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\c
+.                      if \\n[#FN_COUNT]=3 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\c
+.                      if \\n[#FN_COUNT]=4 .PRINT \h'0+\\n[#FN_INDENT]u'**\c
+.                      if \\n[#FN_COUNT]=5 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\[dg]\c
+.                      if \\n[#FN_COUNT]=6 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\[dd]\c
+.                      if \\n[#FN_COUNT]=7 .PRINT \h'0+\\n[#FN_INDENT]u'***\c
+.                      if \\n[#FN_COUNT]=8 .PRINT \h'0+\\n[#FN_INDENT]u'\[dg]\[dg]\[dg]\c
+.                      if \\n[#FN_COUNT]=9 .PRINT \h'0+\\n[#FN_INDENT]u'\[dd]\[dd]\[dd]\c
+.                      if \\n[#FN_COUNT]=10 .PRINT \h'0+\\n[#FN_INDENT]u'****\c
 .                   \}
 .                \}
 .                if \\n[#FN_MARKER_STYLE]=2 \{\
 .                   ds $FN_NUMBER \\n[#FN_NUMBER]
 .                   length #FN_NUMBER_LENGTH \\*[$FN_NUMBER]
-.                   if \\n[#COLUMNS]=1 \{\
+.                   if \\n[#COLUMNS]=1 \
 .                      \\n+[#FN_COUNT_FOR_COLS]
-.                   \}
 .                   if \\n[#NOT_YET_ADJUSTED]=1 \{\
 .                      nr #FN_NUMBER 1 1
 .                      rr #NOT_YET_ADJUSTED
@@ -12682,24 +13577,24 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .                   if \\n[#PRINT_STYLE]=1 \{\
 .                      ie \\n[#NO_SUPERSCRIPT] \{\
 .                         ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \
-.                            PRINT "\0(\\n[#FN_NUMBER])\|\c"
+.                            PRINT "\h'0+\\n[#FN_INDENT]u'\0(\\n[#FN_NUMBER])\|\c"
 .                         el \
-.                            PRINT "(\\n[#FN_NUMBER])\|\c"
+.                            PRINT "\h'0+\\n[#FN_INDENT]u'(\\n[#FN_NUMBER])\|\c"
 .                      \}
 .                      el \{\
 .                         ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \
 .                            PRINT \
-"\s-2\v'-\\n[.v]u/5u'\0\\n[#FN_NUMBER]\|\v'+\\n[.v]u/5u'\s+2\|\c"
+"\h'0+\\n[#FN_INDENT]u'\s-2\v'-\\n[.v]u/5u'\0\\n[#FN_NUMBER]\|\v'+\\n[.v]u/5u'\s+2\|\c"
 .                         el \
 .                            PRINT \
-"\s-2\v'-\\n[.v]u/5u'\\n[#FN_NUMBER]\|\v'+\\n[.v]u/5u'\s+2\|\c"
+"\h'0+\\n[#FN_INDENT]u'\s-2\v'-\\n[.v]u/5u'\\n[#FN_NUMBER]\|\v'+\\n[.v]u/5u'\s+2\|\c"
 .                      \}
 .                   \}
 .                   if \\n[#PRINT_STYLE]=2 \{\
 .                      ie \\n[#FN_NUMBER_LENGTH]<\\n[#FN_NUMBER_PLACEHOLDERS] \
-.                         PRINT "\*[SUP]\0\\n[#FN_NUMBER]\*[SUPX]\*[FU 3]\c"
+.                         PRINT "\h'0+\\n[#FN_INDENT]u'\*[SUP]\0\\n[#FN_NUMBER]\*[SUPX]\*[FU 3]\c"
 .                      el \
-.                         PRINT "\*[SUP]\\n[#FN_NUMBER]\*[SUPX]\*[FU 3]\c"
+.                         PRINT "\h'0+\\n[#FN_INDENT]u'\*[SUP]\\n[#FN_NUMBER]\*[SUPX]\*[FU 3]\c"
 .                   \}
 .                \}
 .             \}
@@ -12714,11 +13609,11 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .             \}
 .             if \\n[#REF]=1 \{\
 .                if !\\n[#RUN_ON]=1 \{\
-\!.                 ti +\\n[#REF_FN_INDENT]u
+\!.                 ti +\\n[#REF_FN_INDENT]uu
 .                \}
 .             \}
 .             ie \\n[#FN_LN_BRACKETS]=1 \{\
-.                ds $FN_LINENUMBER \v'-.085m'\\*[$FN_OPEN_BRACKET]\v'.085m'
+.                ds $FN_LINENUMBER \h'0+\\n[#FN_INDENT]u'\v'-.085m'\\*[$FN_OPEN_BRACKET]\v'.085m'
 .                ie \\n[#FN_MARK_2]=\\n[#FN_MARK] \
 .                   as $FN_LINENUMBER \
 \\n[#FN_MARK]\v'-.085m'\\*[$FN_CLOSE_BRACKET]\v'.085m'\h'.25m'
@@ -12732,14 +13627,13 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .                   ds $FN_LINENUMBER \\n[#FN_MARK]\\*[$FN_LN_SEP]
 .                el \
 .                   ds $FN_LINENUMBER \
-\\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\\*[$FN_LN_SEP]
+\h'0+\\n[#FN_INDENT]u'\\n[#FN_MARK]\v'-.1m'-\v'.1m'\\n[#FN_MARK_2]\\*[$FN_LN_SEP]
 .                \}
 .             \}
-.             if !\\n[#NO_FN_MARKER] \
-.                PRINT \\*[$FN_LINENUMBER]\c
-.             rm $FN_LINENUMBER
-.             nr #FN_MARK 0
-.          \}
+.          if !\\n[#NO_FN_MARKER] \
+.             PRINT \\*[$FN_LINENUMBER]\c
+.          rm $FN_LINENUMBER
+.          nr #FN_MARK 0
 .       \}
 .    \}
 .    el \{\
@@ -12941,9 +13835,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .                         nr #VARIABLE_FOOTER_POS -\\n[#VFP_DIFF]
 .                         if \\n[#DIVERTED]=1 .nr #DIVERTED 3
 .                         if !\\n[#PREV_FN_DEFERRED]=1 \{\
-.                            ie \\n[#COLUMNS]=1 \{\
+.                            ie \\n[#COLUMNS]=1 \
 .                               if !\\n[#FROM_FOOTER] .
-.                            \}
 .                            el .nr #FN_DEPTH -\\n[#VFP_DIFF]
 .                         \}
 .                         if \\n[#DIVERTED]=3 \{\
@@ -13127,7 +14020,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .\" When #FROM_DIVERT_FN is 1, it signals to FOOTNOTE, when run from
 .\" within DIVERT_FN_LEFTOVER, to set #SPACE_REMAINING to the total
 .\" area allowable for running text.
-\#.    nr #FROM_DIVERT_FN 1
+.    nr #FROM_DIVERT_FN 1
 .END
 \#
 \# PROCESS_FN_LEFTOVER is called at the top of HEADER, and in
@@ -13146,7 +14039,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
 .    \}
 .    el \{\
-.       if \\n[#FN_DEFER]=1 .nr #VARIABLE_FOOTER_POS -\\n[#FN_DEPTH]
+.       if \\n[#FN_DEFER]=1 .nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
 .       if \\n[#FN_DEFER]=2 \{\
 .          nr #FN_DEPTH 0
 .          nr #VARIABLE_FOOTER_POS 0-\\n[#B_MARGIN]
@@ -13156,14 +14049,16 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    ch FOOTER -\\n[#B_MARGIN]u
 .    if \\n[#FN_DEFER] \{\
 .       nr #NO_FN_MARKER 1
+.       rn FOOTNOTES DEFERRED-FOOTNOTE
+.       nr #FN_DEPTH 0
 .       FOOTNOTE
 .       nf
+.       DEFERRED-FOOTNOTE
 .       FOOTNOTE OFF
 .       ie \\n[#COLUMNS]=1 \{\
 .          if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.             if !\\n[#FROM_FOOTER] \{\
+.             if !\\n[#FROM_FOOTER] \
 .                if \\n[#FN_COUNT_FOR_COLS]=1 .nr #PREV_FN_DEFERRED 1
-.             \}
 .          \}
 .       \}
 .       el .nr #PREV_FN_DEFERRED 1
@@ -13268,47 +14163,6 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    nr #EN_PS (p;\\$1)
 .END
 \#
-\# ENDNOTES, BIBLIOGRAPHY and TOC LEADING
-\# --------------------------------------
-\# *Argument:
-\#   <leading> [ ADJUST ]
-\# *Function:
-\#   Depending on the name by which it's called, creates or modifies
-\#   register #<type>_LEAD, where <type> is BIB, EN, or TOC.  Creates or removes
-\#   register #ADJ_<type>_LEAD.  Stores arguments in strings if BIB,
-\#   EN, or TOC leading are set before START.
-\# *Notes:
-\#   Default is same as doc lead for TYPESET, adjusted; 24 for TYPEWRITE.
-\#
-.MAC _LEAD END
-.    if '\\$0'BIBLIOGRAPHY_LEAD' .ds $SECTION BIB
-.    if '\\$0'ENDNOTE_LEAD' .ds $SECTION EN
-.    if '\\$0'TOC_LEAD' .ds $SECTION TOC
-.    ds $\\*[$SECTION]_LEAD \\$1
-.    ds $ADJUST_\\*[$SECTION]_LEAD \\$2
-.    if !\\n[#OK_PROCESS_LEAD] .return
-.    nr #\\*[$SECTION]_LEAD (p;\\$1)
-.    rr #ADJ_\\*[$SECTION]_LEAD
-.    als \\*[$SECTION]_LEAD DOC_LEAD
-.    if '\\$2'ADJUST' \{\
-.       nr #ORIG_DOC_LEAD \\n[#UNADJUSTED_DOC_LEAD]
-.       nr #RESTORE_ADJ_DOC_LEAD \\n[#ADJ_DOC_LEAD]
-.       nr #ADJ_DOC_LEAD 1
-.       nr #ADJ_\\*[$SECTION]_LEAD 1
-.       nr #NO_TRAP_RESET 1
-.       \\*[$SECTION]_LEAD \\n[#\\*[$SECTION]_LEAD]u ADJUST
-.       nr #\\*[$SECTION]_LEAD \\n[#DOC_LEAD]
-.       DOC_LEAD \\n[#ORIG_DOC_LEAD]u
-.       rr #NO_TRAP_RESET
-.       nr #ADJ_DOC_LEAD \\n[#RESTORE_ADJ_DOC_LEAD]
-.       rr #ORIG_DOC_LEAD
-.    \}
-.END
-\#
-.ALIAS BIBLIOGRAPHY_LEAD _LEAD
-.ALIAS ENDNOTE_LEAD _LEAD
-.ALIAS TOC_LEAD _LEAD
-\#
 \# ENDNOTE SPACING
 \# ----------------
 \# *Arguments:
@@ -13349,33 +14203,56 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \# *Notes:
 \#   Default is "Endnotes"
 \#
-.MAC ENDNOTE_STRING END
+.MAC ENDNOTES_HEADER_STRING END
 .    ds $EN_STRING \\$1
 .END
+.
+.ALIAS ENDNOTE_STRING ENDNOTES_HEADER_STRING
+\#
+\# ENDNOTE STRING START POSITION
+\# ----------------------------
+\# *Argument:
+\#   <distance from page top>
+\# *Function:
+\#   Creates or modifies register #EN_STRING_V_POS
 \#
-.MAC ENDNOTE_STRING_ADVANCE END
-.    nr #EN_STRING_ADVANCE (\\$1)
+.MAC ENDNOTES_HEADER_V_POS END
+.    nr #EN_STRING_V_POS (\\$1)
 .END
+.
+.ALIAS ENDNOTE_STRING_ADVANCE  ENDNOTES_HEADER_V_POS
+.ALIAS ENDNOTE_STRING_V_POS    ENDNOTES_HEADER_V_POS
+.ALIAS ENDNOTES_HEADER_V_POS   ENDNOTES_HEADER_V_POS
 \#
-\# ENDNOTE STRING CAPS
-\# -------------------
+\# ENDNOTE HEADER CAPS and SMALLCAPS
+\# ---------------------------------
 \# *Arguments:
 \#   <none> | <anything>
 \# *Function:
-\#   Turns capitalization of the endnotes pages title string
-\#   "Endnotes" on or off.
+\#   Turns capitalization or smallcaps style of the endnotes pages
+\#   title string "Endnotes" on or off.
 \# *Notes:
-\#   Users may want the endnotes pages title string to be in caps,
-\#   but the toc entry for endnotes in lower case.  If the argument
-\#   to ENDNOTE_STRING is in lower case and ENDNOTE_STRING_CAPS is
-\#   turned on, this is exactly what will happen.
+\#   Users may want the endnotes pages title string to be in
+\#   caps, but the toc entry for endnotes in lower case.  If the
+\#   argument to ENDNOTES_HEADER_STRING is in lower case and
+\#   ENDNOTES_HEADER_CAPS is turned on, this is exactly what will
+\#   happen.  Ditto for smallcaps.
 \#
-\#   Default is on.
+\#   Default for CAPS is on.
 \#
-.MAC ENDNOTE_STRING_CAPS END
+.MAC ENDNOTES_HEADER_CAPS END
 .   ie '\\$1'' .nr #EN_STRING_CAPS 1
 .   el .nr #EN_STRING_CAPS 0
 .END
+.
+.ALIAS ENDNOTE_STRING_CAPS ENDNOTES_HEADER_CAPS
+.
+.MAC ENDNOTES_HEADER_SMALLCAPS END
+.   ie '\\$1'' .nr #EN_STRING_SMALLCAPS 1
+.   el .nr #EN_STRING_SMALLCAPS 0
+.END
+.
+.ALIAS ENDNOTE_STRING_SMALLCAPS ENDNOTES_HEADER_SMALLCAPS
 \#
 \# ENDNOTE TITLE
 \# -------------
@@ -13708,7 +14585,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          if !\\n[#LINENUMBERS] \{\
 .             tm1 "[mom]: Line numbering must be enabled with NUMBER_LINES when
 .             tm1 "       ENDNOTE_MARKER_STYLE is LINE.
-.             ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .          \}
 .          if \\n[#EN_MARK]=0 .nr #EN_MARK \\n[ln]
 .          nr #EN_MARK_2 \\n[ln]
@@ -13733,30 +14610,39 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \!.     if \\\\n[.vpt]=0 .vpt
 \!.     ne 3
 .       vs \\n[#EN_LEAD]u
-.\" Print identifying doc title (eg Chapter n)
+.\" Print identifying doc title (e.g., Chapter n)
 .       if \\n[#EN_NUMBER]=1 \{\
 .          if \\n[#PRINT_STYLE]=1 .TYPEWRITER
 .          if \\n[#PRINT_STYLE]=2 \{\
 .             FAMILY  \\*[$EN_TITLE_FAM]
 .             FT      \\*[$EN_TITLE_FT]
 .             ps \\n[#EN_PS]u\\*[$EN_TITLE_SIZE_CHANGE]
+.             if \\n[#EN_TITLE_COLOR] .COLOR \\*[$EN_TITLE_COLOR]
+.             if \\n[#ENDNOTE_TITLE_SMALLCAPS] .SMALLCAPS
+.             if \\n[#ENDNOTE_TITLE_CAPS] .CAPS
 .          \}
-.          sp
+.          ie \\n[#SINGLE_SPACE]=1 .sp 2
+.          el .sp
 .          if !'\\*[$EN_TITLE]'' \{\
-.             if '\\*[$EN_TITLE_QUAD]'L'      .LEFT
-.             if '\\*[$EN_TITLE_QUAD]'LEFT'   .LEFT
-.             if '\\*[$EN_TITLE_QUAD]'C'      .CENTER
-.             if '\\*[$EN_TITLE_QUAD]'CENTER' .CENTER
-.             if '\\*[$EN_TITLE_QUAD]'CENTRE' .CENTER
-.             if '\\*[$EN_TITLE_QUAD]'R'      .RIGHT
-.             if '\\*[$EN_TITLE_QUAD]'RIGHT'  .RIGHT
-.             ie \\n[#EN_TITLE_UNDERLINE] \{\
-.                nr #FROM_EN_TITLE 1
+.             substring $EN_TITLE_QUAD 0 0
+.             if '\\*[$EN_TITLE_QUAD]'L' .LEFT
+.             if '\\*[$EN_TITLE_QUAD]'C' .CENTER
+.             if '\\*[$EN_TITLE_QUAD]'R' .RIGHT
+\!.           vpt 0
+.             sp -.25v
+.             ie \\n[#EN_TITLE_UNDERLINE] \
 .                UNDERSCORE "\\*[$EN_TITLE]"
-.                rr #FROM_EN_TITLE
+.             el \{\
+.                ie \\n[#PRINT_STYLE]=1 \
+.                   UNDERSCORE "\\*[$EN_TITLE]"
+.                el .PRINT "\\*[$EN_TITLE]"
 .             \}
-.             el .PRINT "\\*[$EN_TITLE]"
+.             sp .25v
+\!.           vpt
 .          \}
+.          if \\n[#EN_TITLE_COLOR] .gcolor
+.          if \\n[#ENDNOTE_TITLE_SMALLCAPS] .SMALLCAPS OFF
+.          if \\n[#ENDNOTE_TITLE_CAPS] .CAPS OFF
 .       \}
 .\" Get indent from endnotes point size; convert string to reg in
 .\" case indent string is, e.g., m or n
@@ -13764,12 +14650,13 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       nr #REF_EN_INDENT (u;\\*[$REF_EN_INDENT])
 .       if \\n[#PRINT_STYLE]=1 \{\
 .          TYPEWRITER
-.          if \\n[#EN_NUMBER]=1 .sp
+.          if \\n[#EN_NUMBER]=1 \{\
+.             ie \\n[#SINGLE_SPACE]=1 .sp
+.             el .sp .25
+.           \}
 .          if \\n[#EN_MARKER_STYLE]=3 .ps -2
 .       \}
 .       if \\n[#PRINT_STYLE]=2 \{\
-.          if \\n[#EN_NUMBER]=1 \
-.             if !'\\*[$EN_TITLE]'' .sp .5v
 .          if \\n[#EN_MARKER_STYLE]=1 \{\
 .             FAMILY  \\*[$EN_NUMBER_FAM]
 .             FT      \\*[$EN_NUMBER_FT]
@@ -13835,6 +14722,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          rm $EN_LINENUMBER
 .       \}
 .       if \\n[#EN_MARKER_STYLE]=3 \{\
+\!.        vpt 0
 .          ps \" Reset ps changed to get width of s-script numbers
 .          ie \\n[#PRINT_STYLE]=1 \{\
 .\" Vertical raise amount here is less than when the same string is printed in
@@ -13846,6 +14734,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       \}
 .       EOL
 .       ll
+\!.     vpt
 .       nr #EN_FIGURE_SPACE \w'\0'
 .       if \\n[#EN_MARKER_STYLE]=1 \{\
 .          ie \\n[#REF]=1 .ti \
@@ -13867,7 +14756,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       \}
 .       nr #EN_TEXT_INDENT \\n[.i]
 .       QUAD \\*[$EN_QUAD]
-.       vpt 1
+.       vpt
 .       if \\n[#PRINT_STYLE]=1 .TYPEWRITER
 .       if \\n[#PRINT_STYLE]=2 \{\
 .          FAMILY  \\*[$EN_FAM]
@@ -13910,6 +14799,9 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    \}
 .END
 \#
+\# Endnotes (user space macro)
+\# ---------------------------
+\#
 \# ENDNOTES
 \# --------
 \# *Arguments:
@@ -13924,6 +14816,34 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    nr #LAST_EN \\n[#EN_NUMBER]
 .    nr #ENDNOTES 1
 .    nr #EN_FIRST_PAGE 1
+.    SETUP_ENDNOTES
+.    if !\\n[#PRINT_STYLE]=1 .chop END_NOTES
+.    nf
+.    END_NOTES
+.    rm END_NOTES
+.    ps \\n[#DOC_PT_SIZE]u
+.    if \\n[#PRINT_STYLE]=1 .vs \\n[#DOC_LEAD]u
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       ie \\n[#ADJ_EN_LEAD] \
+.          nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
+.       el .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
+.       rr #RESTORE_DOC_LEAD
+.    \}
+.    if \\n[#COLUMNS_WERE_ON] .nr #COLUMNS 1
+.    if \\n[#HEADER_STATE]=1 .HEADERS
+.    if \\n[#LINENUMBERS]=2 \{\
+.       NUMBER_LINES RESUME
+.       nr #LINENUMBERS 1
+.    \}
+.    rr #ENDNOTES
+.END
+\#
+\# Macros common to endnotes, bibliography, and toc
+\# ------------------------------------------------
+\#
+.MAC SETUP_BIB_EN END
+.    if '\\$0'SETUP_BIBLIOGRAPHY' .ds EN-OR-BIB BIB
+.    if '\\$0'SETUP_ENDNOTES'     .ds EN-OR-BIB EN
 .    nr #HEADER_STATE \\n[#HEADERS_ON]
 .    ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE]
 .    if \\n[#LINENUMBERS]=1 \{\
@@ -13931,17 +14851,17 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       nr #LINENUMBERS 2
 .    \}
 .    if \\n[#HEADERS_ON]=1 \
-.       if !\\n[#EN_ALLOWS_HEADERS_ALL] .HEADERS OFF
+.       if !\\n[#\\*[EN-OR-BIB]_ALLOWS_HEADERS_ALL] .HEADERS OFF
 .    if \\n[#HEADER_STATE]=1 \{\
-.       ie \\n[#EN_HDRFTR_CENTER]=1 .
+.       ie \\n[#\\*[EN-OR-BIB]_HDRFTR_CENTER]=1 .
 .       el .rm $HDRFTR_CENTER
 .    \}
 .    ie !\\n[#SUSPEND_PAGINATION] \{\
 .       if \\n[#PAGINATE]=1 \{\
 .          if \\n[#PAGE_NUM_V_POS]=1 \{\
-.             PAGENUM_STYLE \\*[$EN_PN_STYLE]
-.             if \\n[#EN_FIRST_PN] .PAGENUMBER \\n[#EN_FIRST_PN]-1
-.             if r #EN_NO_FIRST_PN .nr #PAGINATE 0
+.             PAGENUM_STYLE \\*[$\\*[EN-OR-BIB]_PN_STYLE]
+.             if \\n[#\\*[EN-OR-BIB]_FIRST_PN] .PAGENUMBER \\n[#\\*[EN-OR-BIB]_FIRST_PN]-1
+.             if r #\\*[EN-OR-BIB]_NO_FIRST_PN .nr #PAGINATE 0
 .          \}
 .       \}
 .    \}
@@ -13961,116 +14881,137 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    \}
 .    ie !\\n[#SUSPEND_PAGINATION] \{\
 .       if \\n[#PAGE_NUM_V_POS]=1 \{\
-.          if r #EN_NO_FIRST_PN \
+.          if r #\\*[EN-OR-BIB]_NO_FIRST_PN \
 .             if \\n[#PAGINATION_STATE]=1 .nr #PAGINATE 1
 .       \}
 .    \}
 .    el \
 .       if \\n[#PAGE_NUM_V_POS]=2 .nr #PAGINATE 0
 .    rr #PAGINATION_STATE
-.    PAGENUM_STYLE \\*[$EN_PN_STYLE]
-.    if \\n[#EN_FIRST_PN] .PAGENUMBER \\n[#EN_FIRST_PN]
+.    PAGENUM_STYLE \\*[$\\*[EN-OR-BIB]_PN_STYLE]
+.    if \\n[#\\*[EN-OR-BIB]_FIRST_PN] .PAGENUMBER \\n[#\\*[EN-OR-BIB]_FIRST_PN]
 .    if \\n[#HEADER_STATE]=1 \
-.       if \\n[#EN_ALLOWS_HEADERS] .HEADERS
+.       if \\n[#\\*[EN-OR-BIB]_ALLOWS_HEADERS] .HEADERS
 .\" Collect endnotes title string for TOC
 .    nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
 .    af #TOC_ENTRY_PN \\g[#PAGENUMBER]
-.    ds $TOC_TITLE_ITEM \\*[$EN_STRING]\|
-.    PDF_BOOKMARK 1 \\*[$EN_STRING]
+.    ds $TOC_TITLE_ITEM \\*[$\\*[EN-OR-BIB]_STRING]\|
+.    PDF_BOOKMARK 1 \\*[$\\*[EN-OR-BIB]_STRING]
 .    TITLE_TO_TOC
 .\" End collection of endnotes title string for TOC
 .\" Process endnotes
-.    if \\n[#PRINT_STYLE]=1 .vs \\n[#EN_LEAD]u
+.    if \\n[#PRINT_STYLE]=1 .vs \\n[#\\*[EN-OR-BIB]_LEAD]u
 .    if \\n[#PRINT_STYLE]=2 \{\
-.       if \\n[#EN_NO_COLS] \{\
+.       if \\n[#\\*[EN-OR-BIB]_NO_COLS] \{\
 .          if \\n[#COLUMNS] .nr #COLUMNS_WERE_ON 1
 .          nr #COLUMNS 0
 .       \}
 .       nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
-.       ie \\n[#ADJ_EN_LEAD] .nr #DOC_LEAD \\n[#EN_LEAD]
-.       el .DOC_LEAD \\n[#EN_LEAD]u
+.       ie \\n[#ADJ_\\*[EN-OR-BIB]_LEAD] .nr #DOC_LEAD \\n[#\\*[EN-OR-BIB]_LEAD]
+.       el .DOC_LEAD \\n[#\\*[EN-OR-BIB]_LEAD]u
 .    \}
 .    vpt 0
-.    ie r#EN_STRING_ADVANCE .sp |\\n[#EN_STRING_ADVANCE]u-1v
-.    el .sp |\\n[#T_MARGIN]u-1v
-.    vpt 1
+.    RESTORE_SPACE
+.    ie r#\\*[EN-OR-BIB]_STRING_V_POS .sp |\\n[#\\*[EN-OR-BIB]_STRING_V_POS]u-1v
+.    el .sp |\\n[#T_MARGIN]u-\\n[#\\*[EN-OR-BIB]_LEAD]u
+.    vpt
 .    mk ec
 .    if \\n[#SLANT_ON] \{\
 \*[SLANTX]\c
 .    \}
 .    sp
-.    if !'\\*[$EN_STRING]'' \{\
+.    if !'\\*[$\\*[EN-OR-BIB]_STRING]'' \{\
 .       if \\n[#PRINT_STYLE]=1 \{\
 .          TYPEWRITER
-.          vs \\n[#EN_LEAD]u
+.          vs \\n[#\\*[EN-OR-BIB]_LEAD]u
 .       \}
 .       if \\n[#PRINT_STYLE]=2 \{\
 .          LL \\n[#DOC_L_LENGTH]u
 .          ta \\n[.l]u
 .          if \\n[#COLUMNS] \{\
-.             ie \\n[#EN_NO_COLS] .LL \\n[#DOC_L_LENGTH]u
+.             ie \\n[#\\*[EN-OR-BIB]_NO_COLS] .LL \\n[#DOC_L_LENGTH]u
 .             el .LL \\n[#COL_L_LENGTH]u
 .             ta \\n[.l]u
 .          \}
-.          FAMILY  \\*[$EN_STRING_FAM]
-.          FT      \\*[$EN_STRING_FT]
-.          ps \\n[#EN_PS]u\\*[$EN_STRING_SIZE_CHANGE]
-.          vs      \\n[#EN_LEAD]u
-.          if \\n[#ENDNOTE_STRING_COLOR]=1 \{\
-.             COLOR \\*[$ENDNOTE_STRING_COLOR]
-.             EOL
-.          \}
+.          FAMILY  \\*[$\\*[EN-OR-BIB]_STRING_FAM]
+.          FT      \\*[$\\*[EN-OR-BIB]_STRING_FT]
+.          ps \\n[#\\*[EN-OR-BIB]_PS]u\\*[$\\*[EN-OR-BIB]_STRING_SIZE_CHANGE]
+.          vs      \\n[#\\*[EN-OR-BIB]_LEAD]u
 .       \}
-.       if '\\*[$EN_STRING_QUAD]'L'      .LEFT
-.       if '\\*[$EN_STRING_QUAD]'LEFT'   .LEFT
-.       if '\\*[$EN_STRING_QUAD]'C'      .CENTER
-.       if '\\*[$EN_STRING_QUAD]'CENTER' .CENTER
-.       if '\\*[$EN_STRING_QUAD]'CENTRE' .CENTER
-.       if '\\*[$EN_STRING_QUAD]'R'      .RIGHT
-.       if '\\*[$EN_STRING_QUAD]'RIGHT'  .RIGHT
+.       substring $\\*[EN-OR-BIB]_STRING_QUAD 0 0
+.       if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'L' .LEFT
+.       if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'C' .CENTER
+.       if '\\*[$\\*[EN-OR-BIB]_STRING_QUAD]'R' .RIGHT
 .       EOL
-.       if \\n[#EN_STRING_CAPS] .CAPS
-.       ie \\n[#EN_STRING_UNDERLINE] \{\
-.          nr #FROM_EN_STRING 1
-.          ie \\n[#EN_STRING_UNDERLINE]=2 \
-.             UNDERSCORE2 \\*[$EN_UNDERLINE_GAP] \\*[$EN_RULE_GAP] "\\*[$EN_STRING]"
-.          el .UNDERSCORE "\\*[$EN_STRING]"
-.          rr #FROM_EN_STRING
+.       if \\n[#\\*[EN-OR-BIB]_STRING_COLOR]=1 .COLOR \\*[$\\*[EN-OR-BIB]_STRING_COLOR]
+.       if \\n[#\\*[EN-OR-BIB]_STRING_CAPS] .CAPS
+.       if \\n[#\\*[EN-OR-BIB]_STRING_SMALLCAPS] .SMALLCAPS
+.       ie \\n[#\\*[EN-OR-BIB]_STRING_UNDERLINE] \{\
+.          if \\n[#PRINT_STYLE]=2 .ds $TITLE_TYPE \\*[EN-OR-BIB]_STRING
+.          ie \\n[#PRINT_STYLE]=1 \
+.             UNDERSCORE2 3p 2p "\\*[$\\*[EN-OR-BIB]_STRING]"
+.          el \{\
+.             ie \\n[#\\*[EN-OR-BIB]_STRING_UNDERLINE]=2 \
+.                UNDERSCORE2 \\*[$\\*[EN-OR-BIB]_UNDERLINE_GAP] \\*[$\\*[EN-OR-BIB]_RULE_GAP] "\\*[$\\*[EN-OR-BIB]_STRING]"
+.             el .UNDERSCORE "\\*[$\\*[EN-OR-BIB]_STRING]"
+.          \}
 .       \}
-.       el .PRINT "\\*[$EN_STRING]
+.       el .PRINT "\\*[$\\*[EN-OR-BIB]_STRING]
 .    \}
+.    SMALLCAPS OFF
+.    if \\n[#\\*[EN-OR-BIB]_STRING_COLOR]=1 .gcolor
 .    CAPS OFF
-.    if \\n[#PRINT_STYLE]=1 \{\
+.    FAMILY \\*[$\\*[EN-OR-BIB]_FAMILY]
+.    FT \\*[$\\*[EN-OR-BIB]_FT]
+.    ps -\\*[$\\*[EN-OR-BIB]_STRING_SIZE_CHANGE]
+.    ie \\n[#PRINT_STYLE]=1 \{\
 .       ie \\n[#SINGLE_SPACE]=1 .sp
 .       el \{\
-.          ie \\n[#EN_SINGLESPACE]=1 .sp
+.          ie \\n[#\\*[EN-OR-BIB]_SINGLESPACE]=1 .sp
 .          el .
 .       \}
 .    \}
-.    if \\n[#PRINT_STYLE]=2 .ALD \\n[#EN_LEAD]u
-.    QUAD \\*[$EN_QUAD]
-.    chop END_NOTES
-.    nf
-.    END_NOTES
-.    rm END_NOTES
-.    ps \\n[#DOC_PT_SIZE]u
-.    if \\n[#PRINT_STYLE]=1 .vs \\n[#DOC_LEAD]u
-.    if \\n[#PRINT_STYLE]=2 \{\
-.       ie \\n[#ADJ_EN_LEAD] \
-.          nr #DOC_LEAD \\n[#RESTORE_DOC_LEAD]
-.       el .DOC_LEAD \\n[#RESTORE_DOC_LEAD]u
-.       rr #RESTORE_DOC_LEAD
-.    \}
-.    if \\n[#COLUMNS_WERE_ON] .nr #COLUMNS 1
-.    if \\n[#HEADER_STATE]=1 .HEADERS
-.    if \\n[#LINENUMBERS]=2 \{\
-.       NUMBER_LINES RESUME
-.       nr #LINENUMBERS 1
+.    el \{\
+.       ie '\\*[EN-OR-BIB]'BIB' .sp 2
+.       el .sp
 .    \}
+.    SHIM
+.    QUAD \\*[$\\*[EN-OR-BIB]_QUAD]
+.END
 .
-.    PRINT_FOOTER
-.    rr #ENDNOTES
+.ALIAS SETUP_BIBLIOGRAPHY SETUP_BIB_EN
+.ALIAS SETUP_ENDNOTES     SETUP_BIB_EN
+\#
+\# ENDNOTES, BIBLIOGRAPHY and TOC LEADING
+\# --------------------------------------
+\# *Argument:
+\#   <leading> [ ADJUST ]
+\# *Function:
+\#   Depending on the name by which it's called, creates or modifies
+\#   register #<type>_LEAD, where <type> is BIB, EN, or TOC.  Creates or removes
+\#   register #ADJ_<type>_LEAD.  Stores arguments in strings if BIB,
+\#   EN, or TOC leading are set before START.
+\# *Notes:
+\#   Default is same as doc lead for TYPESET, adjusted; 24 for TYPEWRITE.
+\#
+.MAC _LEAD END
+.    if '\\$0'BIBLIOGRAPHY_LEAD' .ds $SECTION BIB
+.    if '\\$0'ENDNOTE_LEAD' .ds $SECTION EN
+.    if '\\$0'TOC_LEAD' .ds $SECTION TOC
+.    rr #ADJ_\\*[$SECTION]_LEAD
+.    ds $\\*[$SECTION]_LEAD \\$1
+.    rm $ADJUST_\\*[$SECTION]_LEAD
+.    if '\\$2'ADJUST' \{\
+.       nr #ADJ_\\*[$SECTION]_LEAD 1
+.       ds $ADJUST_\\*[$SECTION]_LEAD ADJUST
+.    \}
+.    if !\\n[#OK_PROCESS_LEAD] .return
+.    nr #\\*[$SECTION]_LEAD (p;\\$1)
 .END
+.
+.ALIAS BIBLIOGRAPHY_LEAD _LEAD
+.ALIAS ENDNOTE_LEAD      _LEAD
+.ALIAS TOC_LEAD          _LEAD
 \#
 \# ====================================================================
 \#
@@ -14103,13 +15044,14 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .END
 \#
 .MAC BIBLIOGRAPHY_STRING_ADVANCE END
-.    nr #BIB_STRING_ADVANCE (\\$1)
+.    nr #BIB_STRING_V_POS (u;\\$1)
 .END
 \#
-.MAC BIBLIOGRAPHY_STRING_CAPS END
-.   ie '\\$1'' .nr #BIB_STRING_CAPS 1
-.   el .nr #BIB_STRING_CAPS 0
+.MAC BIBLIOGRAPHY_STRING_V_POS END
+.    nr #BIB_STRING_V_POS (u;\\$1)
 .END
+.
+.ALIAS BIBLIOGRAPHY_HEADER_V_POS BIBLIOGRAPHY_STRING_V_POS
 \#
 .MAC BIBLIOGRAPHY_NO_COLUMNS END
 .    ie '\\$1'' .nr #BIB_NO_COLS 1
@@ -14182,18 +15124,18 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   Sets #BIB_LIST to 1 for numbered list style, 0 for plain output
 \# *Notes:
 \#   Technically, user is supposed to enter PLAIN if s/he wants an
-\#   unumbered bibliography, but the el clause says "any arg but
-\#   LIST means unumbered."  Effectively, any arg but LIST produces
+\#   unnumbered bibliography, but the el clause says "any arg but
+\#   LIST means unnumbered."  Effectively, any arg but LIST produces
 \#   a "plain" bibliographic list.
 \#
-\#   The 2nd and 3rd args have the same options as the 2nd arg to LIST.
+\# The 2nd and 3rd args have the same options as the 2nd and 3rd
+\# args to LIST.
 \#
 .MAC BIBLIOGRAPHY_TYPE END
 .    ie '\\$1'LIST' \{\
 .       nr #BIB_LIST 1
-.       ie '\\$2'' \{\
+.       ie '\\$2'' \
 .          if '\\*[$BIB_LIST_SEPARATOR]'' .ds $BIB_LIST_SEPARATOR .
-.       \}
 .       el .ds $BIB_LIST_SEPARATOR \\$2
 .       ie '\\$3'' .ds $BIB_LIST_PREFIX
 .       el .ds $BIB_LIST_PREFIX \\$3
@@ -14225,8 +15167,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    el .nr #BIB_SPACE (\\$1)
 .END
 \#
-\# Set up bibliography page
-\# ------------------------
+\# Bibliography (user space macro)
+\# -------------------------------
 \# *Function:
 \#   Sets up a new page, with title, ready to accept the output
 \#   of refer's $LIST$ or .R1 bibliography .R2
@@ -14234,135 +15176,15 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   Bibliography pages are set up almost identically to endnotes pages.
 \#
 .MAC BIBLIOGRAPHY END
+.    if \\n[defer] .NEWPAGE
 .    ie '\\$1'' \{\
 .       rr #FN_REF
 .       rr #EN_REF
 .       nr #BIBLIOGRAPHY 1
 .       nr #BIB_FIRST_PAGE 1
-.       nr #HEADER_STATE \\n[#HEADERS_ON]
-.       ds $RESTORE_PAGENUM_STYLE \\*[$PAGENUM_STYLE]
-.       if \\n[#LINENUMBERS]=1 \{\
-.          NUMBER_LINES OFF
-.          nr #LINENUMBERS 2
-.       \}
-.       if \\n[#HEADERS_ON]=1 \
-.          if !\\n[#BIB_ALLOWS_HEADERS_ALL] .HEADERS OFF
-.       if \\n[#HEADER_STATE]=1 \{\
-.          ie \\n[#BIB_HDRFTR_CENTER]=1 .
-.          el .rm $HDRFTR_CENTER
-.       \}
-.       ie !\\n[#SUSPEND_PAGINATION] \{\
-.          if \\n[#PAGINATE]=1 \{\
-.             if \\n[#PAGE_NUM_V_POS]=1 \{\
-.                PAGENUM_STYLE \\*[$BIB_PN_STYLE]
-.                if \\n[#BIB_FIRST_PN] .PAGENUMBER \\n[#BIB_FIRST_PN]-1
-.                if r #BIB_NO_FIRST_PN .nr #PAGINATE 0
-.             \}
-.          \}
-.       \}
-.       el \{\
-.          ie \\n[#PAGE_NUM_V_POS]=2 .nr #PAGINATE 1
-.          el .nr #PAGINATE 0
-.       \}
-.       if \\n[#FOOTERS_ON]=1 \{\
-.          if !'\\*[$HDRFTR_CENTER_OLD]'' \
-.             ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
-.       \}
-.       NEWPAGE
-.       if \\n[#FOOTERS_ON]=1 \{\
-.          ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_NEW]
-.          rm $HDRFTR_CENTER_OLD
-.          rm $HDRFTR_CENTER_NEW
-.       \}
-.       ie !\\n[#SUSPEND_PAGINATION] \{\
-.          if \\n[#PAGE_NUM_V_POS]=1 \{\
-.             if r #BIB_NO_FIRST_PN \{\
-.                if \\n[#PAGINATION_STATE]=1 .nr #PAGINATE 1
-.             \}
-.          \}
-.       \}
-.       el \
-.          if \\n[#PAGE_NUM_V_POS]=2 .nr #PAGINATE 0
-.       rr #PAGINATION_STATE
-.       PAGENUM_STYLE \\*[$BIB_PN_STYLE]
-.       if \\n[#BIB_FIRST_PN] .PAGENUMBER \\n[#BIB_FIRST_PN]
-.       if \\n[#HEADER_STATE]=1 \
-.          if \\n[#BIB_ALLOWS_HEADERS] .HEADERS
-.\" Collect bibliography title string for TOC
-.       nr #TOC_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
-.       af #TOC_ENTRY_PN \\g[#PAGENUMBER]
-.       ds $TOC_TITLE_ITEM \\*[$BIB_STRING]\\|
-.       PDF_BOOKMARK 1 \\*[$BIB_STRING]
-.       TITLE_TO_TOC
-.\" End collection of bibliography title string for TOC
-.\" Process bibliography
-.       if \\n[#PRINT_STYLE]=1 .vs \\n[#BIB_LEAD]u
-.       if \\n[#PRINT_STYLE]=2 \{\
-.          if \\n[#BIB_NO_COLS] \{\
-.             if \\n[#COLUMNS] .nr #COLUMNS_WERE_ON 1
-.             nr #COLUMNS 0
-.          \}
-.          nr #RESTORE_DOC_LEAD \\n[#DOC_LEAD]
-.          ie \\n[#ADJ_BIB_LEAD] .nr #DOC_LEAD \\n[#BIB_LEAD]
-.          el .DOC_LEAD \\n[#BIB_LEAD]u
-.       \}
-.       vpt 0
-.       ie r#BIB_STRING_ADVANCE .sp |\\n[#BIB_STRING_ADVANCE]u-1v
-.       el .sp |\\n[#T_MARGIN]u-1v
-.       vpt 1
-.       mk bc
-.       if \\n[#SLANT_ON] \{\
-\*[SLANTX]\c
-.       \}
-.       sp
-.       if !'\\*[$BIB_STRING]'' \{\
-.          if \\n[#PRINT_STYLE]=1 \{\
-.             TYPEWRITER
-.             vs \\n[#BIB_LEAD]u
-.          \}
-.          if \\n[#PRINT_STYLE]=2 \{\
-.             LL \\n[#DOC_L_LENGTH]u
-.             ta \\n[.l]u
-.             if \\n[#COLUMNS] \{\
-.                ie \\n[#BIB_NO_COLS] .LL \\n[#DOC_L_LENGTH]u
-.                el .LL \\n[#COL_L_LENGTH]u
-.                ta \\n[.l]u
-.             \}
-.             FAMILY  \\*[$BIB_STRING_FAM]
-.             FT      \\*[$BIB_STRING_FT]
-.             ps \\n[#BIB_PS]u\\*[$BIB_STRING_SIZE_CHANGE]
-.             vs      \\n[#BIB_LEAD]u
-.          \}
-.          if '\\*[$BIB_STRING_QUAD]'LEFT'   .LEFT
-.          if '\\*[$BIB_STRING_QUAD]'C'      .CENTER
-.          if '\\*[$BIB_STRING_QUAD]'CENTER' .CENTER
-.          if '\\*[$BIB_STRING_QUAD]'CENTRE' .CENTER
-.          if '\\*[$BIB_STRING_QUAD]'R'      .RIGHT
-.          if '\\*[$BIB_STRING_QUAD]'RIGHT'  .RIGHT
-.          EOL
-.          if \\n[#BIB_STRING_CAPS] .CAPS
-.          ie \\n[#BIB_STRING_UNDERLINE] \{\
-.             nr #FROM_BIB_STRING 1
-.             ie \\n[#BIB_STRING_UNDERLINE]=2 \
-.                UNDERSCORE2 "\\*[$BIB_STRING]"
-.             el .UNDERSCORE "\\*[$BIB_STRING]"
-.             rr #FROM_BIB_STRING
-.          \}
-.          el .PRINT "\\*[$BIB_STRING]"
-.       \}
-.       CAPS OFF
-.       FAMILY \\*[$BIB_FAMILY]
-.       FT \\*[$BIB_FT]
-.       ps -\\*[$BIB_STRING_SIZE_CHANGE]
-.       if \\n[#PRINT_STYLE]=1 \{\
-.          ie \\n[#SINGLE_SPACE]=1 .ALD \\n[#BIB_LEAD]*3u
-.          el \{\
-.             ie \\n[#BIB_SINGLESPACE]=1 .ALD \\n[#BIB_LEAD]u*3u
-.             el .ALD \\n[#BIB_LEAD]u
-.          \}
-.       \}
-.       if \\n[#PRINT_STYLE]=2 .ALD \\n[#BIB_LEAD]u*2u
-.       QUAD \\*[$BIB_QUAD]
+.       nr #SKIP_FOOTER +1
+.       SETUP_BIBLIOGRAPHY
+.       nr #SKIP_FOOTER -1
 .       if \\n[#PRINT_STYLE]=1 \{\
 .          ie \\n[#SINGLE_SPACE]=1 .vs \\n[#BIB_LEAD]u
 .          el \{\
@@ -14394,6 +15216,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       chop BIB
 .       BIB
 .    \}
+.    rr #BIBLIOGRAPHY
 .END
 \#
 \# ====================================================================
@@ -14404,7 +15227,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#
 .ds $TOC_PN \\*[ST102]\F[\\*[$TOC_PN_FAM]]\f[\\*[$TOC_PN_FT]]\
 \s[\\n[#TOC_PS]u]^\\*[ST102X]\\*[ST103]\s[\\*[$TOC_PN_SIZE_CHANGE]]\
-\|\|\|\h'\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST103X]
+\h'.2n'\h'\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST103X]
 \#
 .ds $TOC_PN_TYPEWRITE \\*[ST102]^\\*[ST102X]\\*[ST103]\
 \h'\w'0'u*\\n[#TOC_PN_PADDING]u'\\*[ST103X]
@@ -14419,7 +15242,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .     rr #SKIP_ENTRY
 \!.  \}
 \!.  el \{\
-.       br
+.       TQ
 .       ie \\n[#PRINT_STYLE]=1 \{\
 \!.        fam \\*[$TYPEWRITER_FAM]
 \!.        ft  R
@@ -14431,8 +15254,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \!.           ps \\n[#TOC_PS]u\\*[$TOC_HEAD_\\n[#LEVEL]_SIZE]
 .          \}
 .          el \{\
-\!.           FAMILY  \\*[$TOC_TITLE_FAM]
-\!.           FT      \\*[$TOC_TITLE_FT]
+\!.           FAMILY \\*[$TOC_TITLE_FAM]
+\!.           FT     \\*[$TOC_TITLE_FT]
 \!.           ps \\n[#TOC_PS]u\\*[$TOC_TITLE_SIZE]
 .          \}
 .       \}
@@ -14461,49 +15284,53 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       \}
 \!.     vpt 0
 .       ie '\\$0'HD_TO_TOC' \{\
+.          if \\n[#PRINT_STYLE]=1 \{\
+.             ds $TOC_HEAD_\\n[#LEVEL]_FAM] \\*[$TYPEWRITER_FAM]
+.             ds $TOC_HEAD_\\n[#LEVEL]_FT]  R
+.          \}
 \!.        PAD \
-"\\f[\\*[$TOC_HEAD_\\n[#LEVEL]_FAM]\
+"\f[\\*[$TOC_HEAD_\\n[#LEVEL]_FAM]\
 \\*[$TOC_HEAD_\\n[#LEVEL]_FT]]\
 \h'\\\\n[#TOC_INDENT_ADJ]u'\h'\\n[#TOC_HEAD_\\n[#LEVEL]_INDENT]u'\
 \\*[$TOC_HD_NUM]\\*[$TOC_HEAD_\\n[#LEVEL]_ITEM]\\*[$TOC_PN\\*[_TYPEWRITE]]" \
 "\\*[PDFBOOKMARK.NAME]"
 .       \}
 .       el \{\
+.          if \\n[#PRINT_STYLE]=1 \{\
+.             ds $TOC_TITLE_FAM \\*[$TYPEWRITER_FAM]
+.             ds $TOC_TITLE_FT  R
+.          \}
 \!.        PAD \
-"\\f[\\*[$TOC_TITLE_FAM]\\*[$TOC_TITLE_FT]]\
+"\f[\\*[$TOC_TITLE_FAM]\\*[$TOC_TITLE_FT]]\
 \h'\\n[#TOC_TITLE_INDENT]u'\\*[$TOC_TITLE_ITEM]\\*[$TOC_PN\\*[_TYPEWRITE]]" \
 "\\*[PDFBOOKMARK.NAME]"
 .       \}
-.       if '\\$0'HD_TO_TOC' \{\
+.       ie '\\$0'HD_TO_TOC' \
 \!.        if \\n[#TOC_HEAD_\\n[#LEVEL]_CAPS]=1 .CAPS OFF
-.       \}
-.       if !'\\$0'HD_TO_TOC' \{\
+.       el \
 \!.        if \\n[#TOC_TITLE_CAPS]=1 .CAPS OFF
-.       \}
 \!.     PAD_MARKER #
 \!.     EOL
 \!.     ST 102 L
-\!.     ST 103 R
+\!.     ST 103 R QUAD
 .       if \\n[#PRINT_STYLE]=2 \{\
 \!.        FAMILY  \\*[$TOC_PN_FAM]
 \!.        FT      \\*[$TOC_PN_FT]
 \!.        ps \\n[#TOC_PS]u
 .       \}
 \!.     TAB 102
-\!.     PRINT \\*[LEADER]
+\!.     PRINT \fR\\*[LEADER]\f[]
 \!.     TN
 .       if \\n[#PRINT_STYLE]=2 \{\
-\!.        ps \\*[$TOC_PN_SIZE_CHANGE]u
+\!.        ps \\*[$TOC_PN_SIZE_CHANGE]
 .       \}
 \!.     PRINT \\n[#TOC_ENTRY_PN]
-\!.     TQ
-\!.     vpt
 \!. \}
 .   da
 .   ev
 .END
-\#
-.ALIAS HD_TO_TOC  TO_TOC
+.
+.ALIAS HD_TO_TOC    TO_TOC
 .ALIAS TITLE_TO_TOC TO_TOC
 \#
 \# Control macros for toc
@@ -14552,6 +15379,14 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          rr #TOC_TITLE_CAPS
 .          shift
 .       \}
+.       if '\\$1'SMALLCAPS' \{\
+.          nr #TOC_TITLE_SMALLCAPS 1
+.          shift
+.       \}
+.       if '\\$1'NO_SMALLCAPS' \{\
+.          rr #TOC_TITLE_SMALLCAPS
+.          shift
+.       \}
 .       if '\\$1'INDENT' \{\
 .          shift
 .          nr #TOC_TITLE_INDENT \\$1
@@ -14573,6 +15408,45 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    ds $TOC_HEADER_STRING \\$1
 .END
 \#
+\# TOC HEADER CAPS and SMALLCAPS
+\# -----------------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Turns capitalization or smallcaps style of the toc title string
+\#   on or off.
+\# *Notes:
+\#   Users may want the toc title string to be in
+\#   caps, but the page header to be in lower case.  If the
+\#   argument to TOC_HEADER_STRING is in lower case and
+\#   TOC_HEADER_CAPS is turned on, this is exactly what will
+\#   happen.  Ditto for SMALLCAPS.
+\#
+.MAC TOC_HEADER_CAPS END
+.   ie '\\$1'' .nr #TOC_STRING_CAPS 1
+.   el .nr #TOC_STRING_CAPS 0
+.END
+.
+.MAC TOC_HEADER_SMALLCAPS END
+.   ie '\\$1'' .nr #TOC_STRING_SMALLCAPS 1
+.   el .nr #TOC_STRING_SMALLCAPS 0
+.END
+.
+\#
+\# TOC VERTICAL PLACEMENT
+\# ----------------------
+\# *Argument:
+\#   <distance from page top>
+\# *Function:
+\#   Creates register #TOC_HEADER_V_POS.
+\# *Notes:
+\#   Default is same as normal docheader position.
+\#
+.MAC TOC_HEADER_V_POS END
+.    nr #TOC_HEADER_V_POS (u;\\$1)
+.END
+\#
+\#
 \# TOC POINT SIZE
 \# --------------
 \# *Argument:
@@ -14669,8 +15543,43 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    el .nr #SPACE_TOC_ITEMS 1
 .END
 \#
-\# NUMBERING OF TOC ENTRIES
-\# ------------------------
+\# NUMBERING OF TOC CHAPTER/SECTION ENTRIES
+\# ----------------------------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Determines whether chapter numbers are prefixed to title
+\#   entries in the TOC (title here means chapter/chapter-title
+\#   or, if the doctype is DEFAULT or NAMED, the section title.
+\# *Notes:
+\#   Aliased as TOC_PREFIX_SECTION_NUMBER.
+\#
+.MAC TOC_PREFIX_CHAPTER_NUMBER END
+.    ie '\\$1'' .nr #TOC_PREFIX_CH_NUM 1
+.    el .rr #TOC_PREFIX_CH_NUM
+.END
+.
+.ALIAS TOC_PREFIX_SECTION_NUMBER TOC_PREFIX_CHAPTER_NUMBER
+\#
+\# PADDING OF TOC CHAPTER/SECTION NUMBERS
+\# --------------------------------------
+\# *Arguments:
+\#   <amount of padding> | <anything>
+\# *Function:
+\#   Insert figure spaces before toc chapter numbers so they
+\#   right align.
+\# *Notes:
+\#   Aliased as PAD_TOC_SECTION_NUMBERS.
+\#
+.MAC PAD_TOC_CHAPTER_NUMBERS END
+.    ie !'\\$1'' .nr #PAD_TOC_CH_NUM \\$1
+.    el .rr #PAD_TOC_CH_NUM
+.END
+.
+.ALIAS PAD_TOC_SECTION_NUMBERS PAD_TOC_CHAPTER_NUMBERS
+\#
+\# NUMBERING OF TOC HEAD ENTRIES
+\# -----------------------------
 \# *Arguments:
 \#   FULL | TRUNCATE | NONE
 \# *Function:
@@ -14724,6 +15633,27 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if !'\\$1'' .ds $TOC_AUTHORS \\$1
 .END
 \#
+\# TABLE OF CONTENTS PAGE SETUP
+\# ----------------------------
+\# *Arguments:
+\#   <none> | <anything>
+\# *Function:
+\#   Some changes to the TOC layout (e.g. margins and page headers)
+\#   are not covered by the TOC and endnotes control macros.  This
+\#   macro permits access to any and all page setup macros not so
+\#   covered.
+\# *Notes
+\#   Wraps a diversion that ends when the macro is invoked with an
+\#   argument.  The contained formatting macros must be preceded by
+\#   '\!'.  The diversion is output before START in TOC.
+\#
+.MAC TOC_PAGE_SETTINGS END
+.    nr #TOC_PAGE_PARAMS 1
+.    ie '\\$1'' \
+.       di TOC_PAGE_PARAMS
+.    el .di
+.END
+\#
 \# TABLE OF CONTENTS
 \# -----------------
 \# *Arguments:
@@ -14734,15 +15664,25 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   diversion.
 \#
 .MAC TOC END
+.    ie (\\n[@TOP]=0)&(\\n[.t]<=\\n[.v]) \
+'       br  \" When last line of text is on or near b-margin.
+.    el .br \" All other cases
+.    if dPDF.EXPORT \
+.       if \\n[#FLEX_ACTIVE] \
+.          if !\\n[#NO_FLEX] \
+.             tm .ds pre-toc-\\n%@\\n[#COL_NUM] 1
+.    if \\n[#TOC_RV_SWITCH]=1 .nr #TOC_RV_SWITCH 2
 .    char \[leader] " .
 .    LEADER_CHARACTER \[leader]
-.    ie \\n[#COLLATED_DOC] \{\
+.    if !\\n[#TOC_HEAD_1_INDENT] \
 .       nr #TOC_INDENT_ADJ 1.5m
-.       if \\n[#PREFIX_CH_NUM] .nr #TOC_INDENT_ADJ \\n[#TOC_CH_NUM_INDENT]
-.    \}
-.    el \{\
-.       nr #SKIP_ENTRY 1
-.       nr #TOC_INDENT_ADJ 0
+.    if \\n[#TOC_PREFIX_CH_NUM] \
+.       nr #TOC_INDENT_ADJ \\n[#TOC_CH_NUM_INDENT]
+.    if !\\n[#DOC_TYPE]=2 \{\
+.       if !'\\$1'INCLUDE_TITLE' \{\
+.          if r #LEVEL .nr #SKIP_ENTRY 1
+.          nr #TOC_INDENT_ADJ 0
+.       \}
 .    \}
 .    nr #TOC 1
 .    nr TOC.RELOCATE 0
@@ -14757,7 +15697,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          FOOTERS \" Have to turn FOOTERS on for next bit to work, so we can't skip this step
 .    \}
 .    if \\n[#FOOTERS_ON]=1 \{\
-.       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
+.       if !'\\*[$HDRFTR_CENTER_OLD]'' \
+.          ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
 .       ie \\n[#PAGINATE_TOC]=1 .PAGINATE
 .       el .PAGINATION OFF
 .    \}
@@ -14765,10 +15706,12 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    rr #COLUMNS
 .    COLLATE
 .    if \\n[#PRINT_STYLE]=1 \{\
-.       if \\n[#SINGLE_SPACE] .vs 24
+.       rr #IGNORE
+.       if \\n[#SINGLE_SPACE] .DOC_LEAD 24
 .       DOC_LEAD_ADJUST
+.       TRAPS
+.       nr #IGNORE 1
 .    \}
-.    if \\n[#PRINT_STYLE]=2 .vs \\n[#TOC_LEAD]u
 .    if \\n[#FINIS] \{\
 .       if \\n[#FOOTERS_WERE_ON] .FOOTERS  \" Finally, turn footers on if they were on
 .       rr #FOOTERS_WERE_ON
@@ -14784,39 +15727,65 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    rm $HDRFTR_CENTER_OLD
 .    rm $HDRFTR_CENTER_NEW
 .    rr #COLLATED_DOC
-.    DOCHEADER OFF \\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
 .    if !r #TOC_START_PAGENUM .nr #TOC_START_PAGENUM 1
-.       PAGENUMBER \\n[#TOC_START_PAGENUM]
+.    PAGENUMBER \\n[#TOC_START_PAGENUM]
 .    if \\n[#LINENUMBERS]=2 .nr #LINENUMBERS 3
-.    L_MARGIN   \\n[#DOC_L_MARGIN]u
-.    LL         \\n[#DOC_L_LENGTH]u
+.    L_MARGIN \\n[#DOC_L_MARGIN]u
+.    LL       \\n[#DOC_L_LENGTH]u
 .    HEADER_CENTER "\\*[$TOC_HEADER_STRING]
 .    if \\n[#SLANT_ON] .nop \\*[SLANTX]
-.    START
 .    PAGENUM_STYLE \\*[$TOC_PN_STYLE]
+.    PAGENUM_FAMILY \\*[$TOC_PN_FAM]
+.    if r #TOC_PAGE_PARAMS .TOC_PAGE_PARAMS
+.    ie \\n[#ADJ_TOC_LEAD] \{\
+.       DOC_LEAD \\*[$TOC_LEAD] ADJUST
+.       TRAPS
+.    \}
+.    el .DOC_LEAD \\*[$TOC_LEAD]
+.    ie \\n[#TOC_HEADER_V_POS] \
+.      DOCHEADER OFF \\n[#TOC_HEADER_V_POS]u-\\n[#DOC_LEAD]u 
+.    el .DOCHEADER OFF \\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.    if (\\n[#PRINT_STYLE]=1)&(\\n[#SINGLE_SPACE]=1) \
+.       DOCHEADER OFF \\n[#T_MARGIN]u-(\\n[#DOC_LEAD]u*2u)
+.    START
 .    PDF_BOOKMARK 1 \\*[$TOC_HEADER_STRING]
 .    if \\n[#PRINT_STYLE]=1 .TYPEWRITER
 .    if \\n[#PRINT_STYLE]=2 \{\
-.       FAMILY  \\*[$TOC_HEADER_FAM]
-.       FT      \\*[$TOC_HEADER_FT]
+.       FAMILY \\*[$TOC_HEADER_FAM]
+.       FT     \\*[$TOC_HEADER_FT]
 .       ps \\n[#TOC_PS]u\\*[$TOC_HEADER_SIZE_CHANGE]
+.       if \\n[#TOC_HEADER_COLOR]=1 \
+.          COLOR \\*[$TOC_HEADER_COLOR]
 .    \}
-.    ie \\n[#PRINT_STYLE]=1 \{\
-.       CAPS
+.    QUAD \\*[$TOC_HEADER_QUAD]
+.    if \\n[#TOC_STRING_CAPS] .CAPS
+.    if \\n[#TOC_STRING_SMALLCAPS] .SMALLCAPS
+.    if \\n[#PRINT_STYLE]=1 \
 .       UNDERSCORE 3p "\\*[$TOC_HEADER_STRING]"
-.       CAPS      OFF
+.    if \\n[#PRINT_STYLE]=2 \{\
+.       ie \\n[#TOC_HEADER_UNDERLINE] \{\
+.          ds $TITLE_TYPE TOC_HEADER
+.          ie \\n[#TOC_HEADER_UNDERLINE]=2 \
+.             UNDERSCORE2 \\*[$TOC_UNDERLINE_GAP] \\*[$TOC_RULE_GAP] "\\*[$TOC_HEADER_STRING]"
+.          el .UNDERSCORE "\\*[$TOC_HEADER_STRING]"
+.       \}
+.       el .PRINT \\*[$TOC_HEADER_STRING]
 .    \}
-.    el .PRINT \\*[$TOC_HEADER_STRING]
+.    SMALLCAPS OFF
+.    CAPS OFF
+.    if \\n[#TOC_HEADER_COLOR]=1 .gcolor
+.    br
 .    sp
+.    SHIM_1
 .    nf
 .    TOC_ENTRIES
-.    rr #TOC
 .    if \\n[#LINENUMBERS]=3 \{\
 .       NUMBER_LINES RESUME
 .       nr #LINENUMBERS 1
 .       nn 1
 .    \}
 .    rr #TOC
+.    rr #TOC_RV_SWITCH
 .    pdfsync
 .END
 \#
@@ -14878,12 +15847,20 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .MAC COL_NEXT END
 .    if \\n[#COLUMNS] \{\
 .       nr #COL_NEXT 1
+.       vpt 0
+.       if !'\\$1'internal' \
+.          if dPDF.EXPORT \
+.             if \\n[#FLEX_ACTIVE] \
+.                if !\\n[#NO_FLEX] \
+.                   if \\n[#COL_NUM]>1 \
+.                      tm .ds page-\\n%@\\n[#COL_NUM] 1
 .       ie '\\$0'COL_NEXT' .br
 .       el \{\
 .          brp
 .          RLD 1v
 .       \}
-.       ie \\n[#COL_NUM]=\\n[#NUM_COLS] .bp
+.       vpt
+.       ie \\n[#COL_NUM]=\\n[#NUM_COLS] .NEWPAGE
 .       el .FOOTER
 .    \}
 .END
@@ -14911,25 +15888,25 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   completely if the level in which it's invoked is the first.
 \#
 .MAC LIST END
+.    br
 .    ds $1ST_LETTER \\$1
 .    if !'\\*[$1ST_LETTER]'' .substring $1ST_LETTER 0 0
 .    if '\\*[$1ST_LETTER]'r' .ds $1ST_LETTER R
 .    ie '\\*[$1ST_LETTER]'R' \{\
+.       if r #ROMAN_LIST .rr #ROMAN_LIST
+.       if '\\$1'ROMAN'  .nr #ROMAN_LIST 1
+.       if '\\$1'roman'  .nr #ROMAN_LIST 1
 .       ds $LAST_CHAR \\$1
 .       substring $LAST_CHAR -1
 .       if !\B'\\*[$LAST_CHAR]' \{\
-.          if !'\\$1'ROMAN' \{\
+.          if !r #ROMAN_LIST \{\
 .             LIST OFF
 .             return
 .          \}
-.          if !'\\$1'roman' \{\
-.             LIST OFF
-.             return
-.          \}
-.          tm1 "[mom]: You must append a number to the \\$1 argument to \\$0.
+.          tm1 "[mom]: You must append a number to the '\\$1' argument to \\$0.
 .          tm1 "       The number should be the total number of items in this list.
 .          tm1 "       See the documentation.
-.          ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.          ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .       \}
 .       ds $ROMAN_WIDTH \\$1
 .          substring $ROMAN_WIDTH 1
@@ -14942,52 +15919,85 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    \}
 .    el .ds $LIST_ARG_1 \\$1
 .    if !r#DEPTH \{\
-.       nr #STORED_HL_INDENT \\n[#HL_INDENT]
-.       nr #STORED_T_INDENT  \\n[#T_INDENT]
+.       if \\n[#INDENT_ACTIVE] \{\
+.          nr #STORED_HL_INDENT \\n[#HL_INDENT]
+.          nr #STORED_T_INDENT  \\n[#T_INDENT]
+.          if \\n[#INDENT_STYLE_LEFT] \
+.             nr #STORED_L_INDENT \\n[#L_INDENT]
+.          if \\n[#INDENT_STYLE_RIGHT] \
+.             nr #STORED_R_INDENT \\n[#R_INDENT]
+.          if \\n[#INDENT_STYLE_BOTH] \{\
+.             nr #STORED_BL_INDENT \\n[#BL_INDENT]
+.             nr #STORED_BR_INDENT \\n[#BR_INDENT]
+.          \}
+.       \}
 .       nr #CURRENT_L_LENGTH \\n[.l]
 .       nr #DEPTH 0 1
 .       if \\n[#INDENT_ACTIVE]=1 \{\
-.          if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
-.             nr #STORED_L_INDENT \\n[#L_INDENT]
+.          if \\n[#INDENT_LEFT_ACTIVE]=1 \
 .             nr #RESTORE_PREV_INDENT 1
-.          \}
 .          if \\n[#INDENT_BOTH_ACTIVE]=1 \{\
-.             nr #STORED_BL_INDENT \\n[#BL_INDENT]
-.             nr #STORED_BR_INDENT \\n[#BR_INDENT]
-.             IBX
+.             ie \\n[#DOC_TYPE]=5 .IBX CLEAR
+.             el .IBX
 .             nr #ORIG_L_LENGTH \\n[.l]
 .             IB
 .             nr #RESTORE_PREV_INDENT 2
 .          \}
 .          if \\n[#INDENT_RIGHT_ACTIVE]=1 \{\
-.             nr #STORED_R_INDENT \\n[#R_INDENT]
-.             IRX
+.             ie \\n[#DOC_TYPE]=5 .IRX CLEAR
+.             el .IRX
 .             nr #ORIG_L_LENGTH \\n[.l]
 .             IR
 .             nr #RESTORE_PREV_INDENT 3
-.             if \\n[#INDENT_LEFT_ACTIVE]=1 .nr #RESTORE_PREV_INDENT 4
+.             if \\n[#INDENT_LEFT_ACTIVE]=1 \
+.                nr #RESTORE_PREV_INDENT 4
 .          \}
 .       \}
 .    \}
-.    if \\n[#NUM_ARGS]=0 \{\
+.    ds pre-list-quad \\*[$QUAD_VALUE]
+.    substring pre-list-quad 0 0
+.    if '\\*[pre-list-quad]'C' \{\
+.       if !'\\n[.z]'LIST*DIV' \{\
+.          nr #PRE_LIST_QUAD \\n[.j]
+.          nr #LIST_CENTER 1
+.          if !'\\n[.z]'LIST*DIV' .di LIST*DIV
+\!.        nr #IN_LIST 1
+.          ad l
+.       \}
+.    \}
+.    if '\\*[pre-list-quad]'R' \{\
+.       if !'\\n[.z]'LIST*DIV' \{\
+.          nr #PRE_LIST_QUAD \\n[.j]
+.          nr #LIST_RIGHT 1
+.          if !'\\n[.z]'LIST*DIV' .di LIST*DIV
+\!.        nr #IN_LIST 1
+.          ad l
+.       \}
+.    \}
+.    ie \\n[#NUM_ARGS]=0 \{\
 .       nr #ARGS_TO_LIST 1 \" So default behaves as if LIST BULLET
 .       ds $ENUMERATOR\\n+[#DEPTH] \[bu]
 .       ds $ENUMERATOR_TYPE\\n[#DEPTH] other
 .       ds $SEPARATOR
+.       ds $PREFIX
+.       ds $SEPARATOR\\n[#DEPTH]
+.       ds $PREFIX\\n[#DEPTH]
 .    \}
-.    if \\n[#NUM_ARGS]>0 \{\
+.    el \{\
 .       rr #ARGS_TO_LIST \" Clear this before processing arg 1.
 .       if '\\*[$LIST_ARG_1]'DASH' \{\
 .          nr #ARGS_TO_LIST 1
 .          ds $ENUMERATOR\\n+[#DEPTH] \[en]
 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
 .          ds $SEPARATOR\\n[#DEPTH]
+.          ds $PREFIX\\n[#DEPTH]
 .       \}
 .       if '\\*[$LIST_ARG_1]'BULLET' \{\
 .          nr #ARGS_TO_LIST 1
 .          ds $ENUMERATOR\\n+[#DEPTH] \[bu]
 .          ds $ENUMERATOR_TYPE\\n[#DEPTH] other
 .          ds $SEPARATOR\\n[#DEPTH]
+.          ds $PREFIX\\n[#DEPTH]
 .       \}
 .       if '\\*[$LIST_ARG_1]'DIGIT' \{\
 .          nr #ARGS_TO_LIST 1
@@ -15024,9 +16034,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          if \\n[#NUM_ARGS]>=2 \{\
 .             ie '\\$2'NONE' .ds $SEPARATOR\\n[#DEPTH]
 .             el .ds $SEPARATOR\\n[#DEPTH] \\$2
-.             if \\n[#NUM_ARGS]=3 \{\
+.             if \\n[#NUM_ARGS]=3 \
 .                ds $PREFIX\\n[#DEPTH] \\$3
-.             \}
 .          \}
 .       \}
 .       if '\\*[$1ST_LETTER]'R' \{\
@@ -15050,6 +16059,26 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          ds $SEPARATOR\\n[#DEPTH]
 .          ds $PREFIX\\n[#DEPTH]
 .       \}
+.       if '\\*[$LIST_ARG_1]'VARIABLE' \{\
+.          if \\n[#NUM_ARGS]<2 \{\
+.             tm1 "[mom]: You must follow the \\$1 argument to \\$0 with the widest
+.             tm1 "       enumerator to be used.  See the documentation.
+.             ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.          \}
+.          nr #ARGS_TO_LIST 1
+.          ds $ENUMERATOR\\n+[#DEPTH]
+.          ds $ENUMERATOR_TYPE\\n[#DEPTH] variable
+.          ds $ENUMERATOR_WIDTH\\n[#DEPTH] \w'\\$2\ '
+.          ds $SEPARATOR\\n[#DEPTH]
+.          ds $PREFIX\\n[#DEPTH]
+.       \}
+.       if '\\*[$LIST_ARG_1]'PLAIN' \{\
+.          nr #ARGS_TO_LIST 1
+.          ds $ENUMERATOR\\n+[#DEPTH]
+.          ds $ENUMERATOR_TYPE\\n[#DEPTH] plain
+.          ds $SEPARATOR\\n[#DEPTH]
+.          ds $PREFIX\\n[#DEPTH]
+.       \}
 .       if \\n[#NUM_ARGS]=1 \{\
 .          if !r#ARGS_TO_LIST \{\
 .             ie \\n[#DEPTH]=1 \{\
@@ -15077,17 +16106,23 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'register' \{\
 .       nr #LIST_INDENT\\n[#DEPTH] \
 \w'\\*[$PREFIX\\n[#DEPTH]]m\\*[$SEPARATOR\\n[#DEPTH]]\ '
-.       if '\\*[$LIST_ARG_1]'ALPHA' nr #LIST_INDENT\\n[#DEPTH] \
+.       if '\\*[$LIST_ARG_1]'ALPHA' .nr #LIST_INDENT\\n[#DEPTH] \
 \w'\\*[$PREFIX\\n[#DEPTH]]M\\*[$SEPARATOR\\n[#DEPTH]]\ '
 .    \}
 .    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'roman' \
 .       GET_ROMAN_INDENT
 .    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \
-.       nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$ENUMERATOR\\n[#DEPTH]]\0'
+.       nr #LIST_INDENT\\n[#DEPTH] \w'\\*[$ENUMERATOR\\n[#DEPTH]]\ '
+.    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'variable' \
+.       nr #LIST_INDENT\\n[#DEPTH] \\*[$ENUMERATOR_WIDTH\\n[#DEPTH]]
 .    ll \\n[#CURRENT_L_LENGTH]u
 .    ie \\n[#DEPTH]=1 \{\
 .       ie \\n[#INDENT_ACTIVE]=1 \{\
-.          if \\n[#INDENT_LEFT_ACTIVE]=1 \{\
+.          if \\n[#INDENT_STYLE_LEFT]=1 \{\
+.             if \\n[#L_INDENT_ILX] \{\
+.                rr #L_INDENT 
+.                rr #L_INDENT_ILX
+.             \}
 .             nr #L_INDENT \\n[#L_INDENT]+\\n[#LIST_INDENT\\n[#DEPTH]]
 .             nr #HL_INDENT\\n[#DEPTH] \\n[#LIST_INDENT\\n[#DEPTH]]
 .             nr #LIST_INDENT\\n[#DEPTH] \\n[#L_INDENT]
@@ -15121,12 +16156,16 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \# ITEM
 \# ----
 \# *Arguments:
-\#   none
+\#   <none> | <space before item>
 \# *Function:
 \#   Prints enumerator for a given list depth and prepares mom to
 \#   receive the text of an item.
 \#
 .MAC ITEM END
+.    ie \\n[#NUM_ARGS]=2 .sp \\$2
+.    el \
+.       if \B'\\$1' .sp \\$1
+.    if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'plain' .nop 
 .    if !r#DEPTH .return
 .    if \\n[#LINENUMBERS]=1 \{\
 .       NUMBER_LINES OFF
@@ -15140,7 +16179,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    IL
 .    nr #IN_ITEM 1
 .    ll \\n[#CURRENT_L_LENGTH]u \" Set ll again because IL turns IB off.
-.    TRAP OFF
+.    ie !'\\n[.z]'' \!.TRAP OFF
+.    el .TRAP OFF
 .    HI \\n[#HL_INDENT\\n[#DEPTH]]u
 .    if '\\*[$SEPARATOR\\n[#DEPTH]]')' .nr #SEP_TYPE 1
 .    if '\\*[$SEPARATOR\\n[#DEPTH]]']' .nr #SEP_TYPE 1
@@ -15242,6 +16282,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       \}
 .       if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'other' \
 .          PRINT \\*[$ENUMERATOR\\n[#DEPTH]]\\*[$SEPARATOR\\n[#DEPTH]]
+.       if '\\*[$ENUMERATOR_TYPE\\n[#DEPTH]]'variable' \
+.          PRINT  \\$1
 .    \}
 .    rr #SEP_TYPE
 .    EOL
@@ -15249,7 +16291,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       IL +\\n[#REF_BIB_INDENT]u
 .       ti \\n[#L_INDENT]u-\\n[#REF_BIB_INDENT]u
 .    \}
-.    TRAP
+.    ie !'\\n[.z]'' \!.TRAP
+.    el .TRAP
 .    if \\n[#KERN_WAS_ON]=1 \{\
 .       KERN
 .       rr #KERN_WAS_ON
@@ -15528,28 +16571,44 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   effect prior to LIST.
 \#
 .MAC QUIT_LISTS END
+.   br
+.   if '\\n[.z]'LIST*DIV' \{\
+\!.    rr #IN_LIST
+.      di
+.   \}
 .   IQ CLEAR
 .   nr #HL_INDENT \\n[#STORED_HL_INDENT]
 .   nr #T_INDENT  \\n[#STORED_T_INDENT]
+.   nr #L_INDENT  \\n[#STORED_L_INDENT]
+.   nr #R_INDENT \\n[#STORED_R_INDENT]
+.   nr #BL_INDENT \\n[#STORED_BL_INDENT]
+.   nr #BR_INDENT \\n[#STORED_BR_INDENT]
 .   rr #STORED_HL_INDENT
-.   if \\n[#RESTORE_PREV_INDENT]=1 \{\
-.      nr #L_INDENT  \\n[#STORED_L_INDENT]
-.      IL
-.      rr #STORED_L_INDENT
+.   if \\n[#LIST_CENTER] \
+.      nr #LIST_OFFSET_VALUE \\n[.l]-\\n[dl]/2
+.   if \\n[#LIST_RIGHT] \
+.      nr #LIST_OFFSET_VALUE \\n[.l]-\\n[dl]
+.   po +\\n[#LIST_OFFSET_VALUE]u
+.   if \\n[.u] .nr #FILLED 1
+.   nf
+.   if dLIST*DIV \{\
+.      LIST*DIV
+.      rm LIST*DIV
 .   \}
+.   if \\n[#FILLED] .fi
+.   if !\\n[#PRE_LIST_QUAD]=\\n[.j] .ad \\n[#PRE_LIST_QUAD]
+.   rr #FILLED
+.   po
+.   rr #PRE_LIST_QUAD
+.   if \\n[#RESTORE_PREV_INDENT]=1 \
+.      IL
 .   if \\n[#RESTORE_PREV_INDENT]=2 \{\
-.      nr #BL_INDENT \\n[#STORED_BL_INDENT]
-.      nr #BR_INDENT \\n[#STORED_BR_INDENT]
 .      ll \\n[#ORIG_L_LENGTH]u
 .      IB
-.      rr #STORED_BL_INDENT
-.      rr #STORED_BR_INDENT
 .   \}
 .   if \\n[#RESTORE_PREV_INDENT]=3 \{\
-.      nr #R_INDENT \\n[#STORED_R_INDENT]
 .      ll \\n[#ORIG_L_LENGTH]u
 .      IR
-.      rr #STORED_R_INDENT
 .   \}
 .   if \\n[#RESTORE_PREV_INDENT]=4 \{\
 .      nr #R_INDENT \\n[#STORED_R_INDENT]
@@ -15557,8 +16616,6 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .      ll \\n[#ORIG_L_LENGTH]u
 .      IR
 .      IL
-.      rr #STORED_R_INDENT
-.      rr #STORED_L_INDENT
 .   \}
 .\" Clean up after exiting last depth of list
 .   nr #REMOVE 0 1
@@ -15569,7 +16626,13 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .      rm $SEPARATOR\\n[#REMOVE]
 .      rm $ENUMERATOR_TYPE\\n[#REMOVE]
 .      rr #PAD_LIST_DIGITS\\n[#REMOVE]
+.      rr #SHIFT_LIST\\n[#REMOVE]
 .   \}
+.   rr #STORED_L_INDENT
+.   rr #STORED_BL_INDENT
+.   rr #STORED_BR_INDENT
+.   rr #STORED_R_INDENT
+.   rr #STORED_R_INDENT
 .   rr #REMOVE
 .   rr #TOTAL_LISTS
 .   rr #QUIT
@@ -15595,6 +16658,24 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    nr #NEXT_DEPTH_BACK \\n[#DEPTH]-1
 .    if \\n[#NEXT_DEPTH_BACK]=0 \{\
 .       nr #QUIT 1
+.       if \\n[#INDENT_ACTIVE]=1 \{\
+.          if \\n[#INDENT_STYLE_BOTH]=1 \{\
+.             ie \\n[#DOCS] \
+.                ll \\n[#DOC_L_LENGTH]u-\\n[#STORED_BR_INDENT]u
+.             el \
+.                ll \\n[#L_LENGTH]u-\\n[#STORED_BR_INDENT]u
+.             in \\n[#BL_INDENT]u
+.          \}
+.          if \\n[#INDENT_STYLE_LEFT] \{\
+.             in \\n[#STORED_L_INDENT]u
+.          \}
+.          if \\n[#INDENT_STYLE_RIGHT] \{\
+.             ie \\n[#DOCS] \
+.                ll \\n[#DOC_L_LENGTH]u-\\n[#STORED_R_INDENT]u
+.             el \
+.                ll \\n[#L_LENGTH]u-\\n[#STORED_R_INDENT]u
+.          \}
+.       \}
 .       return
 .    \}
 .    nr #L_INDENT -\\n[#LIST_INDENT\\n[#DEPTH]]+\\n[#SHIFT_LIST\\n[#DEPTH]]
@@ -15621,30 +16702,40 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   N.B.--the START macro must be used after every COLLATE
 \#
 .MAC COLLATE END
+.    if dPDF.EXPORT .tm .ds pre-collate-\\n% \\n%@\\n[#COL_NUM]
+.    if \\n[defer] \{\
+.       nr #BLANKPAGE_AFTER_DEFER 1
+.       bp
+.    \}
+.    nr #HEADER_STATE \\n[#HEADERS_ON]
+.    if (\\n[defer]=0)&(\\n[float*defer]=0) .HEADERS OFF
+.    if \\n[#LINENUMBERS] \{\
+.       NUMBER_LINES off
+.       nr #LINENUMBERS 2
+.    \}
+.    if \\n[#BLANKPAGE] \{\
+.       if \\n[nl]=\\n[#PAGE_TOP] \{\
+.          nr #NO_NEWPAGE 1
+.          RESTORE_SPACE
+.       \}
+.       rr #BLANKPAGE
+.    \}
 .    if \\n[defer] \
 .       DO_FOOTER
 .    EOL
-.    nr #COLLATED_DOC 1
-.    if ( (\\n[.t]-1) <= \\n[.v] ) .nr #NO_BREAK 1
 .    ds $SAVED_DOC_FAM \\*[$DOC_FAM]
 .    ds $SAVED_PP_FT   \\*[$PP_FT]
 .    nr #COLLATE 1
 .    nr #PRE_COLLATE 1
-.    nr #HEADER_STATE \\n[#HEADERS_ON]
 .    nr #POST_TOP 1
-.    nr #ARG_NUM 0 1
-.    nr #LOOP \\n[#ACTIVE_LEVELS]      \" loop count                                   
 .    nr #HEAD_1_NUM 0 1
-.    nr eqn*label-width     (\\n[eqn*label-num] >? \\n[eqn*label-width])
-.    nr pdf-img*label-width (\\n[pdf-img*label-num] >? \\n[pdf-img*label-width])
-.    nr pic*label-width     (\\n[pic*label-num] >? \\n[pic*label-width])
-.    nr tbl*label-width     (\\n[tbl*label-num] >? \\n[tbl*label-width])
-.    nr fig*label-width     (\\n[pdf-img*label-width] >? \\n[pic*label-width])
-.    if \\n[eqn*label-with-chapter]=1     .nr eqn*label-num     0 1
-.    if \\n[pdf-img*label-with-chapter]=1 .nr pdf-img*label-num 0 1
-.    if \\n[pic*label-with-chapter]=1     .nr pic*label-num     0 1
-.    if \\n[tbl*label-with-chapter]=1     .nr tbl*label-num     0 1
-.    if (\\n[defer]=0)&(\\n[float*defer]=0) .HEADERS OFF
+.    if !\\n[#LISTS] \{\
+.       if \\n[eqn*label-with-chapter]=1     .nr eqn*label-num 0 1
+.       if \\n[float*label-with-chapter]=1   .nr fig*label-num 0 1
+.       if \\n[pdf-img*label-with-chapter]=1 .nr fig*label-num 0 1
+.       if \\n[pic*label-with-chapter]=1     .nr fig*label-num 0 1
+.       if \\n[tbl*label-with-chapter]=1     .nr tbl*label-num 0 1
+.    \}
 .    if \\n[#DOC_HEADER]=2 .nr #DOC_HEADER 1
 .    if \\n[#PAGE_NUM_V_POS]=1 \{\
 .       nr #PAGINATION_STATE \\n[#PAGINATE]
@@ -15655,6 +16746,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    LL \\n[#DOC_L_LENGTH]u
 .    QUAD \\*[$DOC_QUAD]
 .    nr #SAVED_DOC_LEAD \\n[#DOC_LEAD]
+.    nr #COLLATED_DOC 1
 .    vs \\n[#DOC_LEAD]u
 \*[SLANTX]
 \*[CONDX]
@@ -15664,6 +16756,17 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       if \\n[TOC_BH]=2 .pdfswitchtopage after MOM:TOC
 .    \}
 .    if !\\n[#NO_NEWPAGE] .NEWPAGE
+.    if !\\n[#TOC] \{\
+.       if \\n[#FORCE_RECTO] \{\
+.          ds $PN_FORMAT_CURR \\g[#PAGENUMBER]
+.          af #PAGENUMBER 1
+.          if \\n[#PAGENUMBER]%2=1 .nr #ODD_PAGENUM 1
+.          af #PAGENUMBER \\*[$PN_FORMAT_CURR]
+.          if \\n[#ODD_PAGENUM] .BLANKPAGE 1 DIVIDER
+.          rr #ODD_PAGENUM
+.          rr #BLANKPAGE_AFTER_DEFER
+.       \}
+.    \}
 .    rr #NO_NEWPAGE
 .    ch RR_@TOP
 .    rr @TOP
@@ -15671,7 +16774,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .      rs
 .      nop \&
 .    \}
-.    if '\\n[.ev]'PAGE_TRANSITION' .ev
+.    if '\\n[.ev]'PAGE_TRANSITION\\n[pg-trans]' .ev
 .    if \\n[#DEFER_PAGINATION] .PAGINATE
 .    if !'\\*[$RESTORE_PAGENUM_STYLE]'' \{\
 .       PAGENUM_STYLE \\*[$RESTORE_PAGENUM_STYLE]
@@ -15681,12 +16784,28 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       if \\n[#TOC]=0 .nr #CH_NUM +1
 .    rm $EN_TITLE
 .    COVERTITLE
-.    DOCCOVERTITLE
-.    MISC
+.    DOC_COVERTITLE
 .    TITLE
-.    SUBTITLE
 .    CHAPTER
 .    CHAPTER_TITLE
+.    SUBTITLE
+.    MISC
+.    rr #COVER_TITLE
+.    rr #DOC_COVER_TITLE
+.    rr #MISC
+.    rr #COVER_MISC
+.    rr #DOC_COVER_MISC
+.    rr #COPYRIGHT
+.    rr #COVER_COPYRIGHT
+.    rr #DOC_COVER_COPYRIGHT
+.    rr #COVER_AUTHOR
+.    rr #DOC_COVER_AUTHOR
+.    rm COVER_TEXT
+.    rm DOC_COVER_TEXT
+.    rm $COPYRIGHT
+.    rm $COVER_COPYRIGHT
+.    rm $DOC_COVER_COPYRIGHT
+.    rr #END_QUOTE
 .    rr #PAGENUM_STYLE_SET
 .    rr #DOC_COVER
 .    rr #COVER
@@ -15696,6 +16815,10 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       nr #PAGE_NUM_V_POS \\n[#RESTORE_PN_V_POS]
 .       rr #RESTORE_PN_V_POS
 .    \}
+.    nr #LOOP 0 1
+.    while \\n+[#LOOP]<=\\n[@LEVEL] \
+.       rr #TOC_HEAD_\\n[#LOOP]_INDENT_SET 1
+.    if \\n[#FLEX_ACTIVE] .rr #NO_FLEX
 .END
 \#
 \# NUMBER_LINES
@@ -15709,23 +16832,23 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#
 .MAC NUMBER_LINES END
 .    br
-.    if \\n[#QUOTE] \{\
-.       if \\n[#QUOTE]=1 .ds macro QUOTE
-.       if \\n[#QUOTE]=2 .ds macro BLOCKQUOTE
-.       tm1 "[mom]: \\$0 at line \\n[.c] may not be used inside \\*[macro].
-.       tm1 "       Please set NUMBER_LINES before \\*[macro], followed by
-.       tm1 "       NUMBER_\\*[macro]_LINES.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.    \}
 .    if '\\n[.z]'EPI_TEXT' .return
 .    if '\\$1'' \{\
 .       tm1 "[mom]: NUMBER_LINES at line \\n[.c] has no argument.
-.       tm1 "       Most likely, you have forgotten to give it a starting line number.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       tm1 "       You have forgotten to give a starting line number or 'RESUME'.
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .    \}
 .    if !\\n[#LINENUMBERS]=2 .nr #LINENUMBERS 1
 .\" Test whether the first arg is a digit.
 .    if \B'\\$1' \{\
+.       if \\n[#QUOTE] \{\
+.          if \\n[#QUOTE]=1 .ds macro QUOTE
+.          if \\n[#QUOTE]=2 .ds macro BLOCKQUOTE
+.          tm1 "[mom]: \\$0 at line \\n[.c] may not be used inside \\*[macro].
+.          tm1 "       Please set NUMBER_LINES before \\*[macro], followed by
+.          tm1 "       NUMBER_\\*[macro]_LINES.
+.          ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       \}
 .       nr #LN \\$1
 .       ds $LN_NUM \\$1
 .       if !'\\n[.z]'' .nr #RESTORE_LN_NUM 1
@@ -15746,8 +16869,9 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       \}
 .       el \{\
 .          nm
-.\" register ln is still set and may confuse preprocessors like tbl
-.\" still, resuming line numbering must be possible, so save ln in $LN_NUM
+.\"  Register ln is still set and may confuse preprocessors like tbl.
+.\"  Still, resuming line numbering must be possible, so save ln in
+.\"  $LN_NUM
 .          ds $LN_NUM \\n[ln]
 .          if !\\n[#QUOTE] .nr ln 0
 .          if !\\n[#LINENUMBERS]=2 .rr #LINENUMBERS
@@ -15769,6 +16893,14 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \# *Function:
 \#   LN_PARAMS sets parameters for line numbers.
 \#   RESTORE_PARAMS restores them after internal calls to .nm
+\# *Notes:
+\#   It's not documented, but groff's linenumbering is processed
+\#   in a unique environment reserved for the numbers, such that
+\#   whatever style params were in effect prior to the invocation
+\#   of .nm remain in effect for the numbers even if the running
+\#   text has different params.  Eg, If you set .gcolor to 'purple'
+\#   before .nm then set it back to what it was, the numbers will be
+\#   purple while the text remains at the default color.
 \#
 .MAC LN_PARAMS END
 .    ie d$LN_FAM .fam \\*[$LN_FAM]
@@ -15777,7 +16909,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    el .ft \\n[.sty]
 .    ie d$LN_SIZE_CHANGE .ps \\*[$LN_SIZE_CHANGE]
 .    el .ps \\n[.s]
-.    ie d$LN_COLOR .gcolor \\*[$LN_COLOR]
+.    ie d$LN_COLOR .COLOR \\*[$LN_COLOR]
 .    el .gcolor \\n[.m]
 .END
 \#
@@ -15788,6 +16920,23 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    gcolor
 .END
 \#
+\# Whether, at COLLATE, to reset line number to 1.
+\#
+\# NUMBER LINES PER SECTION
+\# ------------------------
+\# *Argument:
+\#   none
+\# *Function:
+\#   Sets register that determines whether, at COLLATE, to reset
+\#   line number to 1.
+\# *Notes:
+\#   The default is to continue the line numbering from where it
+\#   left off.
+\#
+.MAC NUMBER_LINES_PER_SECTION END
+.    nr #PER_SECTION 1
+.END
+\#
 \# NUMBER QUOTE AND BLOCKQUOTE LINES AS PART OF RUNNING TEXT
 \# ---------------------------------------------------------
 \# *Argument:
@@ -15849,7 +16998,9 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   blank pages before endnotes, bibliographies, tocs, new chapters.
 \#
 .MAC BLANKPAGE END
+.    nr #BLANKPAGE 1
 .    nr #HOW_MANY \\$1
+.    shift
 .    nr #PAGES 0 1
 .    if \\n[#LINENUMBERS] \{\
 .       nr #LINENUMBERS_WERE_ON 1
@@ -15862,41 +17013,45 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       \}
 .       if \\n[#PAGE_NUM_V_POS]=1 \{\
 .          if \\n[#PAGINATE]=1 .nr #PAGINATE_WAS_ON 1
+.          nr #RESTORE_PN_V_POS \\n[#PAGE_NUM_V_POS]
 .          PAGINATION OFF
 .       \}
-.       NEWPAGE
-.       PRINT \&
+.       NEWPAGE \" Break to blank page
+.       nop \&
+.       br
 .       if \\n[#FOOTERS_ON]=1 \{\
 .          nr #FOOTERS_WERE_ON 1
 .          FOOTERS OFF
 .       \}
 .       if \\n[#PAGE_NUM_V_POS]=2 \{\
 .          if \\n[#PAGINATE]=1 .nr #PAGINATE_WAS_ON 1
-.             nr #RESTORE_PN_V_POS \\n[#PAGE_NUM_V_POS]
+.          nr #RESTORE_PN_V_POS \\n[#PAGE_NUM_V_POS]
 .          PAGINATION OFF
 .       \}
-.       if \\n[#HEADERS_WERE_ON] .HEADERS
-.       if \\n[#PAGE_NUM_V_POS]=1 \
-.          if \\n[#PAGINATE_WAS_ON] .PAGINATE
+.       if !'\\$1'DIVIDER' .if \\n[#HEADERS_WERE_ON] .HEADERS
 .    \}
-.    shift
+.    NEWPAGE
 .    ie '\\$1'DIVIDER' \{\
+.       nop \&
+.       if \\n[#BLANKPAGE_AFTER_DEFER] .bp
 .       if \\n[#FOOTERS_WERE_ON] .FOOTERS
-.       if \\n[#RESTORE_PN_V_POS]=2 \{\
-.          if \\n[#PAGINATE_WAS_ON] .nr #RESTORE_PAGINATION 1
-.       \}
+.          if \\n[#RESTORE_PN_V_POS] \{\
+.             if \\n[#PAGINATE_WAS_ON] .PAGINATE
+.             nr #PAGE_NUM_V_POS \\n[#RESTORE_PN_V_POS]
+.          \}
+.       if \\n[#HEADERS_WERE_ON] .HEADERS
 .       shift
 .       if '\\$1'NULL' .nr #PAGE_NUM_ADJ -\\n[#HOW_MANY]
 .    \}
 .    el \{\
 .       if '\\$1'' \{\
-.          NEWPAGE
 .          if \\n[#FOOTERS_WERE_ON] .FOOTERS
-.          if \\n[#PAGE_NUM_V_POS]=2 \
+.          if \\n[#RESTORE_PN_V_POS] \{\
 .             if \\n[#PAGINATE_WAS_ON] .PAGINATE
+.             nr #PAGE_NUM_V_POS \\n[#RESTORE_PN_V_POS]
+.          \}
 .       \}
 .       if '\\$1'NULL' \{\
-.          NEWPAGE
 .          if \\n[#FOOTERS_WERE_ON] .FOOTERS
 .          if \\n[#PAGE_NUM_V_POS]=2 \
 .             if \\n[#PAGINATE_WAS_ON] .PAGINATE
@@ -15904,6 +17059,11 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    \}
 .    if \\n[#PAGINATE]=1 \
 .       if '\\$1'NULL' .nr #PAGE_NUM_ADJ -\\n[#HOW_MANY]
+.       if \\n[#RESTORE_PN_V_POS]=1 \{\
+.          RESTORE_SPACE
+.          sp |\\n[#HEADER_MARGIN]u
+.          PRINT_PAGE_NUMBER
+.       \}
 .    if \\n[#LINENUMBERS_WERE_ON] .NUMBER_LINES RESUME
 .    rr #HOW_MANY
 .    rr #HEADERS_WERE_ON
@@ -15918,175 +17078,252 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .  vpt 0
 \h'(\\n[ps-offset]u + \\n[ps-deswid]u)'
 .  sp -1
-.  vpt 1
+.  vpt
 ..
 \#
 .MAC PROCESS_FLOATS END
-.    if (\\n[float*defer]>0):(\\n[defer]=0) \{\
-.        if !\\n[tbl*no-top-hook] .tbl@top-hook
-.        rr tbl*no-top-hook
+.    if \\n[#TAB_ACTIVE] \{\
+.       nr #RESTORE_TAB 1
+.       TQ
 .    \}
-.    if \\n[defer] \{\
-.       ev protect
-.       evc FLOAT
-.       nf
-.       rs
-.       nop \&
-.       sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-.       if '\\*[float*type:1]'boxed-tbl' \{\
-.          ch RR_@TOP
-.          if (\\n[.t] >= 1)&(\\n[float-depth:1] > \\n[.t]) \
-.             tbl*float-warning
-.          if \\n[#MLA] .sp \\n[tbl*label-lead-diff]u
-.          if (\\n[tbl*have-caption]=1)&(\\n[tbl*caption-after-label]=0) \
-.             sp \\n[tbl*caption-lead-diff]u
-.          if \\n[tbl*caption-after-label] .sp 1n+(\\n[tbl*caption-lead-diff]u*2u)
+.    if !\\n[tbl*no-top-hook] .tbl@top-hook
+.    rr tbl*no-top-hook
+.    sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.    nr defer-count \\n[defer]
+.    nr #TMP_PAGE_OFFSET \\n[.o]
+.    po \\n[#L_MARGIN]u
+.    ev protect
+.    evc FLOAT
+.    nf
+.    RESTORE_SPACE
+.    if '\\*[float*type:\\n[defer]]'boxed-tbl:\\n[defer]' \{\
+.       ch RR_@TOP
+.\" Get depth of the first deferred float when there's more than one.
+.       if (\\n[.t] >= 1)&(\\n[float-depth:\\n[defer]] > (\\n[.t]+\\n[#DOC_LEAD])) \
+.          tbl*float-warning
+.       if \\n[#MLA] .sp \\n[tbl*label-lead-diff]u
+.       if (\\n[tbl*have-caption:\\n[defer]]=1)&(\\n[tbl*caption-after-label]=0) \
+.          sp \\n[tbl*caption-lead-diff]u
+.       if \\n[tbl*caption-after-label] \
+.          sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.    \}
+.    if \\n[float*pic:1] \{\
+.       if (\\n[pic*have-caption]=1)&(\\n[pic*caption-after-label]=0) \{\
+.          ie \\n[#COLUMNS] \
+.             sp |\\n[dc]u+\\n[pic*caption-lead-diff]u
+.          el .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u+\\n[pic*caption-lead-diff]u
 .       \}
-.       if \\n[float*pic] \{\
-.          if (\\n[pic*have-caption]=1)&(\\n[pic*caption-after-label]=0) \{\
-.             ie \\n[#COLUMNS] \{\
-.                sp |\\n[dc]u-.5v
-.             \}
-.             el \
-.                sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u-.5v
-.          \}
-.          rr pic*caption-lead-diff
-.          rr pic*top-lead-diff
-.          rr float*pic
+.       rr pic*caption-lead-diff
+.       rr pic*top-lead-diff
+.       rr float*pic
+.    \}
+.    if \\n[float*img] \{\
+.       ie \\n[#COLUMNS] \
+.          sp |\\n[dc]u
+.       el \
+.          sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
+.       if \\n[pdf-img:frame] \{\
+.          sp -(\\*[pdf-img:frame-weight]p*2u)
+.          rr pdf-img:frame
 .       \}
-.       if \\n[float*img] \{\
-.             ie \\n[#COLUMNS] \
-.                sp |\\n[dc]u
-.             el \
-.                sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
-.       \}
-.       nr defer-count \\n[defer]
-.       nr loop-count  0 1
-.       nr new-defer   0 1
-.       while \\n+[loop-count]<=\\n[defer-count] \{\
-.          nr tbl*no-top-hook 1
-.          if \\n[defer] .rnn defer float*defer \" So '.if \n[defer]' is skipped during float output
-.          vpt
-.          ch RR_@TOP
-.          rr @TOP
-.          if \\n[pdf-img*have-caption] \{\
-.             if !\\n[pdf-img*caption-after-label] .sp -.5v
-.          \}
-.          rr pdf-img*have-caption
-.          rr pic*have-caption
-.          if '\\*[float*type:\\n[loop-count]]'table' \{\
-.             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u
-.             ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u
-.          \}
-.          ie !\\n[float-span:\\n[loop-count]] \{\
-.             ie ((\\n[float-depth:\\n[loop-count]]-\\n[.v])>\\n[.t]):(\\n[D-float:\\n[loop-count]]>\\n[.t]) \{\
+.    \}
+.    nr loop-count  0 1
+.    nr new-defer   0 1
+.    while \\n+[loop-count]<=\\n[defer-count] \{\
+.       nr tbl*no-top-hook 1
+.       rnn defer float*defer \" So '.if \n[defer]' is skipped during float output
+.       vpt
+.       ch RR_@TOP
+.       rr @TOP
+.       if \\n[pdf-img*have-caption] \
+.          if !\\n[pdf-img*caption-after-label] .sp -.5v
+.       rr pdf-img*have-caption
+.       rr pic*have-caption
+.       if '\\*[float*type:\\n[loop-count]]'table:\\n[loop-count]' \{\
+.          ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.          ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
+.       \}
+.       ie !\\n[float-span:\\n[loop-count]] \{\
+.          ie ((\\n[float-depth:\\n[loop-count]]-\\n[.v])>\\n[.t]):(\\n[D-float:\\n[loop-count]]>\\n[.t]) \{\
 .\" Insufficient space, defer to next page
-.                rn FLOAT*DIV:\\n[loop-count] NEW*FLOAT*DIV:\\n+[new-defer]
-.                rnn float-depth:\\n[loop-count] new-float-depth:\\n[new-defer]
-.                rnn D-float:\\n[loop-count] new-D-float:\\n[new-defer]
-.             \}
-.             el \{\
-.                output-float
-.             \}
+.             rn FLOAT*DIV:\\n[loop-count] NEW*FLOAT*DIV:\\n+[new-defer]
+.             rnn float-depth:\\n[loop-count] new-float-depth:\\n[new-defer]
+.             rnn D-float:\\n[loop-count] new-D-float:\\n[new-defer]
 .          \}
 .          el \{\
-.             rr tbl*no-top-hook
 .             output-float
+.             ie (\\n[.t]-1)<(\\n[#DOC_LEAD]u/2) .SHIM_1
+.             el .sp .5
 .          \}
 .       \}
-.       rm FLOAT*DIV:\\n[loop-count]
+.       el \{\
+.          rr tbl*no-top-hook
+.          if \\n[float-span:\\n[loop-count]] \
+.             rn tbl*header-div:\\n[loop-count] tbl*header-div:span
+.          output-float
+.          sp .5
+.       \}
+.       if !\\n[loop-count]=\\n[defer-count] .rr flexed
+.       rr float-span:\\n[loop-count]
+.       rr float*tbl:\\n[loop-count]
+.       rr tbl*have-caption:\\n[loop-count]
+.       rr float*tbl*center:\\n[loop-count]
+.       rr tbl*have-header:\\n[loop-count]
+.       rm float*div:\\n[loop-count]
 .       rr float-depth:\\n[loop-count]
 .       rm tbl*header-div:\\n[loop-count]
 .       rm float*type:\\n[loop-count]
+.    \}
+.    if !\\n[float*defer]=1 \{\
+.       if !(\\n[loop-count]-1)=1 \{\
+.          if !\\n[.t]=1 .sp -.5
+.       \}
+.    \}
+.    if !\\n[@no-shim] \
+.       if !\\n[q-float] \
+.          if !\\n[#NO_SHIM] .SHIM
 .\" FLOAT arrays are empty now
 .\" Rename new arrays (FLOATs deferred to next page) to proper names
-.       nr loop-count 0 1
-.       rnn new-defer defer
-.       while \\n+[loop-count]<=\\n[defer] \{\
-.          rn NEW*FLOAT*DIV:\\n[loop-count] FLOAT*DIV:\\n[loop-count]
-.          rnn new-float-depth:\\n[loop-count] float-depth:\\n[loop-count]
-.          rnn new-D-float:\\n[loop-count] D-float:\\n[loop-count]
-.       \}
-.       rr float*defer
-.       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
-.       ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
-.       ev
-.       SHIM
-.       if \\n[#SHIM]>(\\n[#DOC_LEAD]-(\\n[#DOC_LEAD]/4)) 'sp -\\n[#DOC_LEAD]u
-.       nr tbl*have-header 0
-.       rr loop-count
-.       rr defer-count
-.       rr float*before-shim
-.       rr float*after-shim
-.       rm float-adj
-.       rm float-adj:top
-.       rm float-adj:bottom
-.       if \\n[#NEWPAGE] \{\
-.          vpt
-'          bp
-.          rr #NEWPAGE
-.       \}
+.    rr float*defer
+.    rnn new-defer defer
+.    nr loop-count 0 1
+.    while \\n+[loop-count]<=\\n[defer] \{\
+.       rn NEW*FLOAT*DIV:\\n[loop-count] FLOAT*DIV:\\n[loop-count]
+.       rnn new-float-depth:\\n[loop-count] float-depth:\\n[loop-count]
+.       rnn new-D-float:\\n[loop-count] D-float:\\n[loop-count]
+.    \}
+.    if !\\n[#TMP_PAGE_OFFSET]=\\n[.o] .po \\n[#TMP_PAGE_OFFSET]u
+.    rr #TMP_PAGE_OFFSET
+.    ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.    ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
+.    if !\\n[.t]=1 .if \\n[.t]<\\n[.v] .bp
+.    ie !\\n[#NO_SHIM] .SHIM
+.    el \{\
+.       if !\\n[#NO_FLEX] \
+.          if !\\n[flexed] .FLEX 
+.    \}
+.    if !\\n[#NO_SHIM] \
+.       if \\n[#SHIM]>(\\n[#DOC_LEAD]-(\\n[#DOC_LEAD]/4)) \
+'             sp -\\n[#DOC_LEAD]u
+.    ie !\\n[flex:force] .ns
+.    el \{\
+.       rr flex:force
+.       if !\\n[#NO_FLEX] .FLEX
+.    \}
+.    nr tbl*have-header 0
+.    rr tbl*have-caption
+.    rr loop-count
+.    rr defer-count
+.    rr float*before-shim
+.    rr float*after-shim
+.    rm float-adj
+.    rr check-indent
+.    if \\n[#NEWPAGE] \{\
+.       vpt
+'       bp
+.       rr #NEWPAGE
 .    \}
 .    rr float*img
 .    rr float*eqn
 .    rr float*tbl
 .    rr float*pic
+.    if \\n[#RESTORE_TAB] \{\
+.       TAB \\n[#CURRENT_TAB]
+.       rr #RESTORE_TAB
+.    \}
 .END
 \#
 .MAC output-float END
+.    if \\n[float*img] \{\
+.       nr no-top-space:1 1
+.    \}
 .    vpt 0
-.    nop \&
-.    sp -1
-.    if \\n[no-top-space] \{\
+.    if \\n[.ns] \{\
+.       rs
+.       nop \&
+.       sp -1
+.    \}
+.    if \\n[no-top-space:1] \{\
 .       ie !\\n[#COLUMNS] \{\
 .          sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
 .          ns
 .       \}
 .       el .sp |\\n[dc]u
-.       if \\n[float*tbl] \{\
-.          rs
-.          if \\n[tbl*caption-top-lead-diff] \{\
+.       if \\n[float*tbl:1] \{\
+.          RESTORE_SPACE
+.          ie \\n[tbl*caption-top-lead-diff] \{\
 .             sp \\n[tbl*caption-top-lead-diff]u
 .             rr tbl*caption-top-lead-diff
 .          \}
-.          rr float*tbl
+.          el \{\
+.             if '\\*[float*type:1]'boxed-tbl:1' \{\
+.                ie (\\n[tbl*have-caption]=1)&(\\n[tbl*caption-after-label]=0) .sp .3n
+.                el .sp (\\n[#DOC_LEAD]u/2u)+.3n
+.             \}
+.          \}
+.          rr float*tbl:1
+.       \}
+.       if \\n[float*img:1] \{\
+.          RESTORE_SPACE
+.          if \\n[pdf-img*caption-top-lead-diff] \{\
+.             sp \\n[pdf-img*caption-top-lead-diff]u
+.             rr float*img:1
+.             rr pdf-img*caption-top-lead-diff
+.          \}
 .       \}
 .    \}
 .    if \\n[float*pic] \{\
 .       nr pic*top-space-adj \\n[#DOC_LEAD]-\\n[pic@text-lead]
-.       if (\\n[pic*have-caption]=0):(\\n[pic*caption-after-label]=1) \{\
+.       if (\\n[pic*have-caption]=0):(\\n[pic*caption-after-label]=1) \
 .          sp \\n[pic*top-space-adj]u
+.       if \\n[#COLUMNS] \
+.          if !'\\*[pic*space-adj:\\n[loop-count]]'' \
+.             sp \\*[pic*space-adj:\\n[loop-count]]
+.    \}
+.    nf
+.    if \\n[q-float] \
+.       if !\\n[has-caption] .sp \\n[#Q_LEAD_DIFF]u
+.    ns
+.    vpt
+.    if \\n[check-indent] \{\
+.       if \\n[#INDENT_LEFT_ACTIVE] \{\
+.          in \\n[#L_INDENT]u/2u
 .       \}
-.       if \\n[#COLUMNS] \{\
-.          if !'\\*[pic*space-adj]'' .sp \\*[pic*space-adj]
-.       \}
-.       rr float*pic
 .    \}
-.    if \\n[float*eqn] \{\
-.       sp -.5v
-.       rr float*eqn
+.    rr no-top-space:1
+.    if \\n[loop-count]>1 \{\
+.       if !'\\*[float-adj:\\n[loop-count]]'' \{\
+.          rs
+.          sp \\*[float-adj:\\n[loop-count]]
+.          ns
+.          nr restore-v-pos 1
+.       \}
 .    \}
+.    nr check-indent 1
 .    FLOAT*DIV:\\n[loop-count]
-.    if \\n[no-top-space] \{\
-.       rs
-.       nop \&
-.       sp -1
-.       rr no-top-space
+.    if \\n[no-top-space:1] \
+.       RESTORE_SPACE
+.    if \\n[restore-v-pos] \{\
+.       sp -\\*[float-adj:\\n[loop-count]]
+.       rm float-adj:\\n[loop-count]
+.       rr restore-v-pos
 .    \}
 .    if \\n[#COLUMNS] \
-.       if !'\\*[pic*space-adj]'' .sp -\\*[pic*space-adj]
-.    rm pic*space-adj
-.    if \\n[D-float:\\n[loop-count]] \{\
-.       sp \
--\\n[float-depth:\\n[loop-count]]u+\\n[D-float:\\n[loop-count]]u+\\n[#DOC_LEAD]u
-.       rr D-float:\\n[loop-count]
-.    \}
+.       if !'\\*[pic*space-adj:\\n[loop-count]]'' .sp -\\*[pic*space-adj:\\n[loop-count]]
+.    rm pic*space-adj:\\n[loop-count]
+.    if \\n[D-float:1] \
+.       rr D-float:1
+.    rr D-float
+.    rr @no-shim
+.    rr q-float
+.    rm B_QUOTE
+.    rm P_QUOTE
 .END
 \#
 \# FLOAT
 \# -----
 \# *Arguments:
-\#   [ ADJUST +|-<amount> ] [ FORCE] [ SPAN] [ NO_SHIM] | <anything>
+\#   [ ADJUST +|-<amount> ] [ FORCE] [ SPAN] [ NO_SHIM] | [ NO_FLEX ] [ TARGET ] | <anything>
 \# *Function:
 \#   Captures input in a diversion, which is output immediately if
 \#   there's room on the page; otherwise outputs diversion at top of
@@ -16097,23 +17334,9 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   a new page immediately.
 \#
 .MAC FLOAT END
-.\"  Case where upcoming .br breaks to a new page, causing a defered float
-.\"  to be output by HEADER and the defer register to be cleared.
-.    nr pagenum \\n%+\\n[#PAGE_NUM_ADJ]
-.    br
-.\" Clear .ns when a single line of running text precededs float
-.\" at the top of the page.
-.    if \\n[nl]=\\n[#PAGE_TOP] \{\
-.       vpt 0
-.       sp -1v
-.       sp
-.       ch RR_@TOP
-.       rr @TOP
-.       vpt
-.    \}
 .    if \\n[#NUM_ARGS]>0 \{\
-.    nr loop-count 0 1
-.    nr loop-counter \\n[#NUM_ARGS]
+.       nr loop-count 0 1
+.       nr loop-counter \\n[#NUM_ARGS]
 .       while \\n+[loop-count]<=\\n[loop-counter] \{\
 .          if '\\$1'FORCE' \{\
 .             nr #FORCE 1
@@ -16128,103 +17351,289 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .             ds float-adj \\$1
 .             shift
 .          \}
+.          if '\\$1'CENTER' \{\
+.             nr center-float 1
+.             shift
+.          \}
+.          if '\\$1'CENTRE' \{\
+.             nr center-float 1
+.             shift
+.          \}
+.          if '\\$1'INDENT' \{\
+.             shift
+.             nr indent-float \\$1
+.             shift
+.          \}
+.          if '\\$1'RIGHT' \{\
+.             nr right-float 1
+.             shift
+.          \}
 .          if '\\$1'NO_SHIM' \{\
-.             nr float*no-shim 1
+.             nr @no-shim 1
+.             shift
+.          \}
+.          if '\\$1'NO_FLEX' \{\
+.             nr @no-flex 1
+.             shift 1
+.          \}
+.          if '\\$1'TARGET' \{\
 .             shift
+.             ds float*target "\\$1
+.             shift 1
 .          \}
 .       \}
 .    \}
+.    ie \\n[float*started] .rr float*started
+.    el \{\
+.       while !'\\$1'' .shift 1
+.       nr float*started 1
+.    \}
 .    ie '\\$1'' \{\
+.\" Harmonize floats treated as defers and floats proper to the top
+.\" of the next page between passes when flex is enabled.
+.\"
+.\" Without this, floats near the bottom of the page may be deferred
+.\" on the first pass, but when flex-spacing moves the line just
+.\" before the float to the bottom of the page, the upcoming .br
+.\" causes the float to be proper to the next page instead of
+.\" deferred to it.
+.       nr floatnum +1
+.       ie !\\n[#NO_FLEX] \{\
+.\" Only on 2nd pass
+.          if !dPDF.EXPORT \{\
+.             ie d float\\n[floatnum]:no-defer .br
+.             el \{\
+.\" .v in the following is arbitrary.  Groff rounds down decimal
+.\" fractions so flex-spacing may be slightly short.  Since there
+.\" are no conditions under which a .t-1 (bottom margin) < .v
+.\" on the 1st pass doesn't cause a float to be deferred, all floats
+.\" on the second pass that meet the condition are also, correctly,
+.\" deferred.
+.                if (\\n[.t]-1)<\\n[.v] \
+.                   if !\\n[@TOP] .nr no-break 1
+.             \}
+.          \}
+.\" Only on 1st pass
+.          ie !\\n[no-break] \{\
+.             ds pre-float:page@col \\n%@\\n[#COL_NUM]
+.             br
+.             ds post-float:page@col \\n%@\\n[#COL_NUM]
+.             if dPDF.EXPORT \{\
+.                if !'\\*[pre-float:page@col]'\\*[post-float:page@col]' \
+.                   tm .ds float\\n[floatnum]:no-defer 1
+.             \}
+.          \}
+.          el .rr no-break
+.       \}
+.       el .br
+.       if \\n[nl]=\\n[#PAGE_TOP] \
+.          RESTORE_SPACE
+.       ds ev-pre-float \\n[.ev]
 .       ev FLOAT
-.       evc 0
-.       nf
+.       evc \\*[ev-pre-float]
 .       di FLOAT*DIV
+.       if !'\\*[float*target]'' .PDF_TARGET "\\*[float*target]
+.       rm float*target
+.       nf
 .    \}
 .    el \{\
 .       br
+.\" So @no-shim persists if float output with output-float
+.       if r @no-shim .nr float*no-shim 1
+.       if \\n[float-span] \{\
+.          nr span 1
+\!.        rr span
+.       \}
+\!.     rm tbl*header-div:span
+\!.     nr tbl*no-print-header 1
 .       di
-.       if \\n[float*table] \
-.          if !\\n[tbl*have-header] .ev
-.       ev
+.       if \\n[float-span] \{\
+.          nr dn-save \\n[dn]
+.          da FLOAT*DIV
+\!.        rr float-span
+.          da
+.          nr dn \\n[dn-save]
+.          rr dn-save
+.       \}
+.       ie \\n[float*tbl] \
+.          if !\\n[tbl*have-header] .ev 0
+.       el .ev 0
 .       if \\n[tbl*boxed] \{\
+.          ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u
+.          ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u
 .          ie !\\n[#MLA] \{\
-.             ie (\\n[tbl@label]=1):(\\n[tbl@source]=1) .nr dn -.65v
+.             ie (\\n[tbl@label]=1):(\\n[tbl@source]=1):(\\n[tbl*autolabel]=1) .nr dn -.65v
 .             el .nr dn +.65v
+.             rr tbl@label
+.             rr tbl@source
 .          \}
-.          el \{\
-.             if !\\n[tbl@source] .nr dn -1.65v
-.          \}
+.          el .if !\\n[tbl@source] .nr dn -1.65v
 .       \}
-.       if (\\n[dn]>\\n[.t]):(\\n[D-float]>\\n[.t]) \{\
-.          ie \\n[@TOP] \
+.\" Defer float
+.       if (\\n[dn]>\\n[.t]):(\\n[D-float]>\\n[.t]):(\\n[defer]>0) \{\
+.          if !\\n[float-span] \{\
+.             if (\\n[dn]+(\\n[.v]*2)>(\\n[.p]-\\n[#TOP_MARGIN]-\\n[#DOC_LEAD]-\\n[#B_MARGIN])) \{\
+.                tm1 "[mom]: Floated element exceeds page depth.
+.                ab   [mom]: Aborting '\\n[.F]' at line \\n[.c].
+.             \}
+.          \}
+.\" Save depth of diversion here.  The .da zeroes it.
+.          nr dn-save \\n[dn]
+.          if \\n[#FLEX_ACTIVE] \{\
+.             if !\\n[@no-flex] \{\
+.                da FLOAT*DIV
+\!.              FLEX
+\!.              nr flexed 1
+.                da
+.             \}
+.          \}
+.          nr dn \\n[dn-save]
+.          rr dn-save
+.          ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.          ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
+.          ev 0
+.          ie \\n[@TOP] \{\
+.             br
 .             if \\n[tbl*boxed] .rs
+.             rr tbl*boxed
+.          \}
 .          el \{\
 .             if !\\n[defer] .nr defer 0 1
 .             rn FLOAT*DIV FLOAT*DIV:\\n+[defer]
+.             if !'\\*[float-adj]'' \
+.                rn float-adj float-adj:\\n[defer]
 .             if \\n[float-span] \
 .                if !\\n[tbl*boxed] .rnn float-span float-span:\\n[defer]
 .             if \\n[float*tbl] \{\
-.                if \\n[defer]=1 .nr no-top-space 1
-.                ie \\n[tbl*boxed] \{\
-.                   ds float*type:\\n[defer] boxed-tbl
-.                   rr float-span
+.                if \\n[defer]>0 \{\
+.                   nr no-top-space:\\n[defer] 1
+.                   nr float*tbl:\\n[defer] 1
+.                   if \\n[tbl*have-caption] \
+.                      nr tbl*have-caption:\\n[defer] 1
 .                \}
-.                el .ds float*type:\\n[defer] table
+.                ie \\n[tbl*boxed] \
+.                   ds float*type:\\n[defer] boxed-tbl:\\n[defer]
+.                el .ds float*type:\\n[defer] table:\\n[defer]
 .                if \\n[tbl*center] .nr float*tbl-center:\\n[defer] 1
+.                if \\n[tbl*have-header] .rnn tbl*have-header tbl*have-header:\\n[defer]
 .                rn tbl*header-div tbl*header-div:\\n[defer]
 .                rr tbl*center
 .             \}
 .             if \\n[float*eqn] \{\
-.                if \\n[defer]=1 .nr no-top-space 1
+.                if \\n[defer]=1 .nr no-top-space:\\n[defer] 1
 .                ds float*type:\\n[defer] eqn
 .             \}
 .             if \\n[float*pic] \{\
 .                ds float*type:\\n[defer] pic
+.                nr float*pic:\\n[defer] 1
+.                rn pic*space-adj pic*space-adj:\\n[defer]
 .             \}
 .             if \\n[float*img] \{\
 .                ds float*type:\\n[defer] img
+.                nr float*img:\\n[defer] 1
+.                nr no-top-space:\\n[defer] 1
 .             \}
 .             if \\n[D-float] .nr D-float:\\n[defer] \\n[D-float]
 .             nr float-depth:\\n[defer] \\n[dn]
 .             if \\n[#FORCE] \{\
-.                bp
+.                ie \\n[#COLUMNS] .COL_NEXT
+.                el .NEWPAGE
 .                rr #FORCE
 .             \}
+.             if \\n[tbl*boxed] .rr tbl*boxed
+.             if \\n[table] .rr table
+.             br
 .             return \" output div after header
 .          \}
 .       \}
+.       nr dn-save \\n[dn]
+.       if \\n[#FLEX_ACTIVE] \{\
+.          if !\\n[@no-flex] \{\
+.             da FLOAT*DIV
+\!.           FLEX
+\!.           nr flexed 1
+.             da
+.          \}
+.       \}
+.       nr dn \\n[dn-save]
+.       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.       ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
+.       vpt 0
 .       if !'\\*[float-adj]'' .sp \\*[float-adj]
 .       if \\n[.u] .nr fill 1
 .       if \\n[@TOP] \{\
 .          nr no-adjust 1
 .          rr @TOP
 .       \}
-.       nf
-.       if \\n[float*tbl] \
+.       if \\n[float*tbl] \{\
 .          if (\\n[#MLA]=1)&(\\n[tbl@source]=0) \
 .             chop FLOAT*DIV
 .          if \\n[nl]=\\n[#PAGE_TOP] \{\
-.             if \\n[tbl*have-caption] \{\
+.             ie (\\n[tbl*have-caption]=1)&(\\n[tbl*caption-after-label]=0) \{\
 .                ie !\\n[#MLA] .sp \\n[tbl*caption-lead-diff]u
-.                el \{\
-.                ch RR_@TOP
-.                sp \\n[tbl*label-lead-diff]u-.5v
+.                el .ch RR_@TOP
+.             \}
+.             el \{\
+.                ev protect
+.                evc FLOAT
+.                nf
+.                rs
+.                ie \\n[tbl*boxed] .sp |\\n[#PAGE_TOP]u+.3n
+.                el .sp |\\n[#PAGE_TOP]u-.25v
 .             \}
 .          \}
 .       \}
+.       if \\n[float*img] \
+.          if \\n[pdf-img:frame] \
+.             sp -(\\*[pdf-img:frame-weight]p*2u)
+.       if !'\\n[.ev]'protect' \{\
+.          ev protect
+.          evc FLOAT
+'           nf
+.       \}
+.       if \\n[float*tbl] \{\
+.          if \\n[tbl*boxed] \
+.             if \\n[tbl*center] \
+.                if \\n[#L_INDENT] \
+.                   in -\\n[#L_INDENT]u/2u
+.       \}
+.       if \\n[center-float] \
+.          in (\\n[.l]u-\\n[dl]u)/2u
+.       if \\n[indent-float] \
+.          in \\n[indent-float]u
+.       if \\n[right-float] \
+.          in \\n[.l]u-\\n[dl]u
 .       FLOAT*DIV
+.       if (\\n[center-float]>0):(\\n[indent-float]>0):(\\n[right-float]>0) \
+.          in
+.       ev
 .       if \\n[float*tbl] \{\
+.          rr tbl*no-print-header
 .          ie \\n[tbl*boxed] \{\
-.             if \\n[dn]=\\n[bx-tbl-depth] .sp .35v
-.             if \\n[tbl*plain-boxed] .sp .5v
 .             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
 .             ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
-.             rr tbl*boxed
-.             rr bx-tbl-depth
+.             ie \\n[nl]>(\\n[.p]+\\n[#VARIABLE_FOOTER_POS]) \{\
+.                ie \\n[#COLUMNS] .COL_NEXT
+.                el .NEWPAGE
+.             \}
+.             el \{\
+.                if \\n[dn-save]=\\n[bx-tbl-depth] .sp .35v
+.                rr dn-save
+.                ie \\n[tbl*plain-boxed] .sp .5v
+.                el \{\
+.                   if !\\n[tbl*autolabel] \{\
+.                      if !\\n[#MLA] \{\
+.                        if \\n[tbl@label]=1 .sp .5
+.                      \}
+.                   \}
+.                \}
+.                rr tbl*boxed
+.                rr bx-tbl-depth
+.             \}
 .          \}
 .          el \{\
-.             if '\\*[tbl*label]'' \
-.                if \\n[tbl*autolabel]=0 .sp
+.             if !'\\*[tbl*label]'' \
+.                if \\n[tbl*autolabel]=0 .sp .5
 .          \}
 .          rr float*tbl
 .          rr tbl*center
@@ -16236,8 +17645,19 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          rm tbl*label
 .          rm tbl*source
 .       \}
-.       if \\n[D-float] \
-.          sp -\\n[dn]u+\\n[#DOC_LEAD]u+\\n[D-float]u
+.       if \\n[float*img] \
+.          if (\\n[.t]-1)>(\\n[#DOC_LEAD]u/2u) .sp .5
+.       if \\n[D-float] \{\
+.          ie \\n[dn]=0 .sp \\n[D-float]u+\\n[#DOC_LEAD]u
+.          el \
+.             if \\n[dn]<\\n[D-float] \
+.                sp \\n[D-float]u+\\n[#DOC_LEAD]u-\\n[dn]u
+.\" Flex won't grab .h of D-floats without a dummy text line.
+.          vpt 0
+.          nop \&
+.          sp -1
+.          vpt 1
+.       \}
 .       if \\n[fill] \{\
 .          fi
 .          rr fill
@@ -16245,14 +17665,29 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       rm FLOAT*DIV
 .       if !'\\*[float-adj]'' \
 .          if !\\n[no-adjust] .sp -\\*[float-adj]
-.          if !\\n[float*no-shim] .SHIM
+.       vpt
+.       if !\\n[#NO_SHIM] \
+.          if !\\n[@no-shim] .SHIM
 .       rm float-adj
 .       rm no-adjust
-.       rm float-adj:top
-.       rm float-adj:bottom
+.       rr center-float
+.       rr indent-float
+.       rr right-float
 .       rr D-float
-.       rr float*no-shim
+.       rr @no-shim
+.       rr @no-flex
 .       rr #FORCE
+.       rm P_QUOTE
+.       rm B_QUOTE
+.       if \\n[float*img] .rr float*img
+.       if \\n[float*pic] .rr float*pic
+.       if \\n[float*eqn] .rr float*eqn
+.       rr float*target
+.       rm float*target
+.       if \\n[#NO_SHIM] \
+.          if !\\n[#NO_FLEX] .nr post-float 1
+.       ev \\*[ev-pre-float]
+.       rm ev-pre-float
 .    \}
 .END
 \#
@@ -16263,7 +17698,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \# *Function:
 \#   Sets header/footer/footnotes/etc... traps.
 \#
-\#   Calculates the number of lines that actually fit on a
+\#   TRAPS calculates the number of lines that actually fit on a
 \#   page based on #B_MARGIN and resets page bottom trap to coincide
 \#   with the depth of that number of lines, or, if #ADJ_DOC_LEAD=1,
 \#   adjusts #DOC_LEAD so that the last line of text on a page falls
@@ -16279,12 +17714,13 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       nop \&
 .       sp -1
 .       if \\n[fill] .fi
+.       if r #NEWPAGE .rr #NEWPAGE
 .    \}
 .    if \\n[.vpt]=0 .vpt
 .END
 \#
 .MAC TRAPS END
-.    if !\\n[#UNADJUSTED_DOC_LEAD]  .nr #UNADJUSTED_DOC_LEAD \\n[#DOC@LEAD]
+.    if !\\n[#UNADJUSTED_DOC_LEAD] .nr #UNADJUSTED_DOC_LEAD \\n[#DOC@LEAD]
 .\" Remove all header/footer traps
 .    if !\\n[#NO_TRAP_RESET] \{\
 .       ch DO_T_MARGIN
@@ -16345,7 +17781,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if \\n[#INDENT_LEFT_ACTIVE] \{\
 .       in \\n[#L_INDENT]u
 .       if \\n[#QUOTE] \{\
-.          in -\\n[#L_INDENT]u \"Because you added an indent in 2nd line of macro
+.          in -\\n[#L_INDENT]u \"Because we added an indent in 2nd line of macro
 .          ll -\\n[#L_INDENT]u
 .          ta \\n[.l]u
 .       \}
@@ -16403,10 +17839,11 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .END
 \#
 \# This .em (for all DOC_TYPEs, except 4 [LETTER]) ensures that
-\# deferred footnotes that happen on the 2nd to last page get
-\# output.
+\# deferred footnotes and floats that happen on the 2nd to last page
+\# get output, and the last page/col isn't flexed.
 \#
 .MAC TERMINATE END
+.    if dPDF.EXPORT .tm .ds last-page \\n%@\\n[#COL_NUM]
 .    ie \\n[#FN_DEPTH] \{\
 .       ie \\n[#FN_DEFER] \{\
 .          br
@@ -16418,13 +17855,16 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       el \{\
 .          br
 .          ch FN_OVERFLOW_TRAP
-.          DO_FOOTER
+.          FOOTER
 .       \}
 .    \}
 .    el \{\
+.       br
 .       ch FN_OVERFLOW_TRAP
-.       DO_FOOTER
+.       FOOTER
 .    \}
+.    if \\n[defer] \
+'       bp
 .END
 \#
 \# END MACRO FOR LETTERS
@@ -16451,7 +17891,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       LEFT
 .       ie !'\\*[$CLOSE_INDENT]'' .IL \\*[$CLOSE_INDENT]
 .       el .IL \\n[#DOC_L_LENGTH]u/2u
-.       SP
+.       sp
 .       if \\n[#CLOSING] \{\
 .          CLOSING_TEXT
 .          br
@@ -16468,49 +17908,33 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#
 \# +++DOCUMENT PROCESSING ALIASES+++
 \#
-\# Aliases to make life easier for users: synonyms, short forms
+\# Create aliases to make life easier for users: synonyms, short forms
 \# and alternate spellings.
 \#
-.ALIAS   BREAK_BLOCKQUOTE    BREAK_QUOTE
-.ALIAS   BREAK_CITATION      BREAK_QUOTE
-.ALIAS   BREAK_CITE          BREAK_QUOTE
-.ALIAS   BLOCKQUOTE_INDENT   QUOTE_INDENT
-.ALIAS   CITATION            BLOCKQUOTE
-.ALIAS   CITATION_FAMILY     BLOCKQUOTE_FAMILY
-.ALIAS   CITATION_FONT       BLOCKQUOTE_FONT
-.ALIAS   CITATION_SIZE       BLOCKQUOTE_SIZE
-.ALIAS   CITATION_COLOR      BLOCKQUOTE_COLOR
-.ALIAS   CITATION_QUAD       BLOCKQUOTE_QUAD
-.ALIAS   CITE                BLOCKQUOTE
-.ALIAS   CITE_FAMILY         BLOCKQUOTE_FAMILY
-.ALIAS   CITE_FONT           BLOCKQUOTE_FONT
-.ALIAS   CITE_SIZE           BLOCKQUOTE_SIZE
-.ALIAS   CITE_COLOR          BLOCKQUOTE_COLOR
-.ALIAS   CITE_QUAD           BLOCKQUOTE_QUAD
-.ALIAS   DOC_R_MARGIN        DOC_RIGHT_MARGIN
-.ALIAS   DOC_L_MARGIN        DOC_LEFT_MARGIN
-.ALIAS   DOC_L_LENGTH        DOC_LINE_LENGTH
-.ALIAS   DOC_RMARGIN         DOC_RIGHT_MARGIN
-.ALIAS   DOC_LMARGIN         DOC_LEFT_MARGIN
-.ALIAS   DOC_LLENGTH         DOC_LINE_LENGTH
-.ALIAS   DOC_FAM             DOC_FAMILY
-.ALIAS   DOC_LS              DOC_LEAD
-.ALIAS   DOC_PS              DOC_PT_SIZE
-.ALIAS   FILL                QUAD
-.ALIAS   PAGENUM             PAGENUMBER
-.ALIAS   PAGINATION          PAGINATE
-.ALIAS   PP_FT               PP_FONT
-.ALIAS   REF_INDENT          INDENT_REFS
-.ALIAS   TOC_PS              TOC_PT_SIZE
+.ALIAS CITATION            BLOCKQUOTE
+.ALIAS CITE                BLOCKQUOTE
+.ALIAS DOC_R_MARGIN        DOC_RIGHT_MARGIN
+.ALIAS DOC_L_MARGIN        DOC_LEFT_MARGIN
+.ALIAS DOC_L_LENGTH        DOC_LINE_LENGTH
+.ALIAS DOC_RMARGIN         DOC_RIGHT_MARGIN
+.ALIAS DOC_LMARGIN         DOC_LEFT_MARGIN
+.ALIAS DOC_LLENGTH         DOC_LINE_LENGTH
+.ALIAS DOC_FAM             DOC_FAMILY
+.ALIAS DOC_LS              DOC_LEAD
+.ALIAS DOC_PS              DOC_PT_SIZE
+.ALIAS FILL                QUAD
+.ALIAS PAGENUM             PAGENUMBER
+.ALIAS PAGINATION          PAGINATE
+.ALIAS PP_FT               PP_FONT
+.ALIAS TOC_PS              TOC_PT_SIZE
 \#
 \# HEADER and FOOTER macros
 \# ------------------------
 \# Because the type-style of headers and footers are managed
 \# identically, and the type-style macros (_<type parameter>) all
 \# require the correct name of the calling macro, it's necessary
-\# to create HEADER_ and FOOTER_ macros here.  They're basically
-\# aliases of HDRFTR_, but required because you can't alias an
-\# alias.
+\# to create HEADER_ and FOOTER_ macros here that are basically
+\# aliases with an argument.
 \#
 .MAC FOOTER_CENTER_COLOR END
 .    HDRFTR_CENTER_COLOR \\$1
@@ -16549,11 +17973,11 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .END
 \#
 .MAC FOOTER_CENTRE_COLOR END
-.    HDRFTR_CENTRE_COLOR \\$1
+.    HDRFTR_CENTER_COLOR \\$1
 .END
 \#
 .MAC FOOTER_CENTRE_COLOUR END
-.    HDRFTR_CENTRE_COLOR \\$1
+.    HDRFTR_CENTER_COLOR \\$1
 .END
 \#
 .MAC FOOTER_CENTRE_FAM END
@@ -16701,11 +18125,11 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .END
 \#
 .MAC HEADER_CENTRE_COLOR END
-.    HDRFTR_CENTRE_COLOR \\$1
+.    HDRFTR_CENTER_COLOR \\$1
 .END
 \#
 .MAC HEADER_CENTRE_COLOUR END
-.    HDRFTR_CENTRE_COLOR \\$1
+.    HDRFTR_CENTER_COLOR \\$1
 .END
 \#
 .MAC HEADER_CENTRE_FAM END
@@ -16820,238 +18244,277 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    HDRFTR_SIZE \\$1
 .END
 \#
-\# HEADER and FOOTER aliases for HDRFTR macros.
-\#
-.ALIAS   BIBLIOGRAPHY_FOOTER_CENTER    BIBLIOGRAPHY_HDRFTR_CENTER
-.ALIAS   BIBLIOGRAPHY_FOOTER_CENTRE    BIBLIOGRAPHY_HDRFTR_CENTRE
-.ALIAS   BIBLIOGRAPHY_HEADER_CENTER    BIBLIOGRAPHY_HDRFTR_CENTER
-.ALIAS   BIBLIOGRAPHY_HEADER_CENTRE    BIBLIOGRAPHY_HDRFTR_CENTRE
-.ALIAS   ENDNOTES_FOOTER_CENTER    ENDNOTES_HDRFTR_CENTER
-.ALIAS   ENDNOTES_FOOTER_CENTRE    ENDNOTES_HDRFTR_CENTRE
-.ALIAS   ENDNOTES_HEADER_CENTER    ENDNOTES_HDRFTR_CENTER
-.ALIAS   ENDNOTES_HEADER_CENTRE    ENDNOTES_HDRFTR_CENTRE
-.ALIAS   FOOTER_CENTER_CAPS        HDRFTR_CENTER_CAPS
-.ALIAS   FOOTER_CENTER             HDRFTR_CENTER
-.ALIAS   FOOTER_CENTER_PAD         HDRFTR_CENTER_PAD
-.ALIAS   FOOTER_CENTRE             HDRFTR_CENTER
-.ALIAS   FOOTER_CENTRE_PAD         HDRFTR_CENTER_PAD
-.ALIAS   FOOTER_LEFT_CAPS          HDRFTR_LEFT_CAPS
-.ALIAS   FOOTER_LEFT               HDRFTR_LEFT
-.ALIAS   FOOTER_PLAIN              HDRFTR_PLAIN
-.ALIAS   FOOTER_RECTO              HDRFTR_RECTO
-.ALIAS   FOOTER_RIGHT_CAPS         HDRFTR_RIGHT_CAPS
-.ALIAS   FOOTER_RIGHT              HDRFTR_RIGHT
-.ALIAS   FOOTER_RULE_GAP           HDRFTR_RULE_GAP
-.ALIAS   FOOTER_RULE               HDRFTR_RULE
-.ALIAS   FOOTER_VERSO              HDRFTR_VERSO
-.ALIAS   HEADER_CENTER_CAPS        HDRFTR_CENTER_CAPS
-.ALIAS   HEADER_CENTER             HDRFTR_CENTER
-.ALIAS   HEADER_CENTER_PAD         HDRFTR_CENTER_PAD
-.ALIAS   HEADER_CENTRE_CAPS        HDRFTR_CENTER_CAPS
-.ALIAS   HEADER_CENTRE             HDRFTR_CENTER
-.ALIAS   HEADER_CENTRE_PAD         HDRFTR_CENTER_PAD
-.ALIAS   HEADER_LEFT_CAPS          HDRFTR_LEFT_CAPS
-.ALIAS   HEADER_LEFT               HDRFTR_LEFT
-.ALIAS   HEADER_PLAIN              HDRFTR_PLAIN
-.ALIAS   HEADER_RECTO              HDRFTR_RECTO
-.ALIAS   HEADER_RIGHT_CAPS         HDRFTR_RIGHT_CAPS
-.ALIAS   HEADER_RIGHT              HDRFTR_RIGHT
-.ALIAS   HEADER_RULE_GAP           HDRFTR_RULE_GAP
-.ALIAS   HEADER_RULE               HDRFTR_RULE
-.ALIAS   HEADER_VERSO              HDRFTR_VERSO
-.ALIAS   SWITCH_FOOTERS            SWITCH_HDRFTR
-.ALIAS   SWITCH_HEADERS            SWITCH_HDRFTR
-\#
-\# Type-style aliases
-\#
-.ALIAS   AUTHOR_FAMILY                    _FAMILY
-.ALIAS   BIBLIOGRAPHY_FAMILY              _FAMILY
-.ALIAS   BIBLIOGRAPHY_STRING_FAMILY       _FAMILY
-.ALIAS   BLOCKQUOTE_FAMILY                _FAMILY
-.ALIAS   CHAPTER_TITLE_FAMILY             _FAMILY
-.ALIAS   COVER_AUTHOR_FAMILY              _FAMILY
-.ALIAS   COVER_CHAPTER_TITLE_FAMILY       _FAMILY
-.ALIAS   COVER_COPYRIGHT_FAMILY           _FAMILY
-.ALIAS   COVER_DOCTYPE_FAMILY             _FAMILY
-.ALIAS   COVER_FAMILY                     _FAMILY
-.ALIAS   COVER_MISC_FAMILY                _FAMILY
-.ALIAS   COVER_SUBTITLE_FAMILY            _FAMILY
-.ALIAS   COVER_TITLE_FAMILY               _FAMILY
-.ALIAS   DOC_COVER_AUTHOR_FAMILY          _FAMILY
-.ALIAS   DOC_COVER_CHAPTER_TITLE_FAMILY   _FAMILY
-.ALIAS   DOC_COVER_COPYRIGHT_FAMILY       _FAMILY
-.ALIAS   DOC_COVER_DOCTYPE_FAMILY         _FAMILY
-.ALIAS   DOC_COVER_FAMILY                 _FAMILY
-.ALIAS   DOC_COVER_MISC_FAMILY            _FAMILY
-.ALIAS   DOC_COVER_SUBTITLE_FAMILY        _FAMILY
-.ALIAS   DOC_COVER_TITLE_FAMILY           _FAMILY
-.ALIAS   DOCHEADER_FAMILY                 _FAMILY
-.ALIAS   DOCTYPE_FAMILY                   _FAMILY
-.ALIAS   ENDNOTE_FAMILY                   _FAMILY
-.ALIAS   ENDNOTE_NUMBER_FAMILY            _FAMILY
-.ALIAS   ENDNOTE_LINENUMBER_FAMILY        _FAMILY
-.ALIAS   ENDNOTE_STRING_FAMILY            _FAMILY
-.ALIAS   ENDNOTE_TITLE_FAMILY             _FAMILY
-.ALIAS   EPIGRAPH_FAMILY                  _FAMILY
-.ALIAS   FOOTNOTE_FAMILY                  _FAMILY
-.ALIAS   HDRFTR_CENTER_FAMILY             _FAMILY
-.ALIAS   HDRFTR_FAMILY                    _FAMILY
-.ALIAS   HDRFTR_LEFT_FAMILY               _FAMILY
-.ALIAS   HDRFTR_RIGHT_FAMILY              _FAMILY
-.ALIAS   LINENUMBER_FAMILY                _FAMILY
-.ALIAS   PAGENUM_FAMILY                   _FAMILY
-.ALIAS   QUOTE_FAMILY                     _FAMILY
-.ALIAS   SUBTITLE_FAMILY                  _FAMILY
-.ALIAS   TITLE_FAMILY                     _FAMILY
-.ALIAS   TOC_FAM                          _FAMILY
-.ALIAS   TOC_FAMILY                       _FAMILY
-.ALIAS   TOC_HEADER_FAMILY                _FAMILY
-.ALIAS   TOC_PN_FAMILY                    _FAMILY
-\#
-.ALIAS   AUTHOR_FONT                    _FONT
-.ALIAS   BIBLIOGRAPHY_STRING_FONT       _FONT
-.ALIAS   BIBLIOGRAPHY_FONT              _FONT
-.ALIAS   BLOCKQUOTE_FONT                _FONT
-.ALIAS   CHAPTER_TITLE_FONT             _FONT
-.ALIAS   COVER_AUTHOR_FONT              _FONT
-.ALIAS   COVER_CHAPTER_TITLE_FONT       _FONT
-.ALIAS   COVER_COPYRIGHT_FONT           _FONT
-.ALIAS   COVER_DOCTYPE_FONT             _FONT
-.ALIAS   COVER_MISC_FONT                _FONT
-.ALIAS   COVER_SUBTITLE_FONT            _FONT
-.ALIAS   COVER_TITLE_FONT               _FONT
-.ALIAS   DOC_COVER_AUTHOR_FONT          _FONT
-.ALIAS   DOC_COVER_CHAPTER_TITLE_FONT   _FONT
-.ALIAS   DOC_COVER_COPYRIGHT_FONT       _FONT
-.ALIAS   DOC_COVER_DOCTYPE_FONT         _FONT
-.ALIAS   DOC_COVER_MISC_FONT            _FONT
-.ALIAS   DOC_COVER_SUBTITLE_FONT        _FONT
-.ALIAS   DOC_COVER_TITLE_FONT           _FONT
-.ALIAS   DOCTYPE_FONT                   _FONT
-.ALIAS   ENDNOTE_FONT                   _FONT
-.ALIAS   ENDNOTE_NUMBER_FONT            _FONT
-.ALIAS   ENDNOTE_LINENUMBER_FONT        _FONT
-.ALIAS   ENDNOTE_STRING_FONT            _FONT
-.ALIAS   ENDNOTE_TITLE_FONT             _FONT
-.ALIAS   EPIGRAPH_FONT                  _FONT
-.ALIAS   FOOTNOTE_FONT                  _FONT
-.ALIAS   HDRFTR_CENTER_FONT             _FONT
-.ALIAS   HDRFTR_LEFT_FONT               _FONT
-.ALIAS   HDRFTR_RIGHT_FONT              _FONT
-.ALIAS   LINENUMBER_FONT                _FONT
-.ALIAS   PAGENUM_FONT                   _FONT
-.ALIAS   QUOTE_FONT                     _FONT
-.ALIAS   SUBTITLE_FONT                  _FONT
-.ALIAS   TITLE_FONT                     _FONT
-.ALIAS   TOC_HEADER_FONT                _FONT
-.ALIAS   TOC_PN_FONT                    _FONT
-\#
-.ALIAS   AUTHOR_SIZE                    _SIZE
-.ALIAS   BIBLIOGRAPHY_STRING_SIZE       _SIZE
-.ALIAS   BLOCKQUOTE_SIZE                _SIZE
-.ALIAS   CHAPTER_TITLE_SIZE             _SIZE
-.ALIAS   COVER_AUTHOR_SIZE              _SIZE
-.ALIAS   COVER_CHAPTER_TITLE_SIZE       _SIZE
-.ALIAS   COVER_COPYRIGHT_SIZE           _SIZE
-.ALIAS   COVER_DOCTYPE_SIZE             _SIZE
-.ALIAS   COVER_MISC_SIZE                _SIZE
-.ALIAS   COVER_SUBTITLE_SIZE            _SIZE
-.ALIAS   COVER_TITLE_SIZE               _SIZE
-.ALIAS   DOC_COVER_AUTHOR_SIZE          _SIZE
-.ALIAS   DOC_COVER_CHAPTER_TITLE_SIZE   _SIZE
-.ALIAS   DOC_COVER_COPYRIGHT_SIZE       _SIZE
-.ALIAS   DOC_COVER_DOCTYPE_SIZE         _SIZE
-.ALIAS   DOC_COVER_MISC_SIZE            _SIZE
-.ALIAS   DOC_COVER_SUBTITLE_SIZE        _SIZE
-.ALIAS   DOC_COVER_TITLE_SIZE           _SIZE
-.ALIAS   DOCTYPE_SIZE                   _SIZE
-.ALIAS   ENDNOTE_NUMBER_SIZE            _SIZE
-.ALIAS   ENDNOTE_LINENUMBER_SIZE        _SIZE
-.ALIAS   ENDNOTE_STRING_SIZE            _SIZE
-.ALIAS   ENDNOTE_TITLE_SIZE             _SIZE
-.ALIAS   EPIGRAPH_SIZE                  _SIZE
-.ALIAS   FOOTNOTE_SIZE                  _SIZE
-.ALIAS   HDRFTR_CENTER_SIZE             _SIZE
-.ALIAS   HDRFTR_LEFT_SIZE               _SIZE
-.ALIAS   HDRFTR_RIGHT_SIZE              _SIZE
-.ALIAS   HDRFTR_SIZE                    _SIZE
-.ALIAS   LINENUMBER_SIZE                _SIZE
-.ALIAS   PAGENUM_SIZE                   _SIZE
-.ALIAS   QUOTE_SIZE                     _SIZE
-.ALIAS   SUBTITLE_SIZE                  _SIZE
-.ALIAS   TITLE_SIZE                     _SIZE
-.ALIAS   TOC_HEADER_SIZE                _SIZE
-.ALIAS   TOC_PN_SIZE                    _SIZE
-\#
-.ALIAS   ATTRIBUTE_COLOR                 _COLOR
-.ALIAS   AUTHOR_COLOR                    _COLOR
-.ALIAS   BLOCKQUOTE_COLOR                _COLOR
-.ALIAS   CHAPTER_TITLE_COLOR             _COLOR
-.ALIAS   CODE_COLOR                      _COLOR
-.ALIAS   COVER_ATTRIBUTE_COLOR           _COLOR
-.ALIAS   COVER_AUTHOR_COLOR              _COLOR
-.ALIAS   COVER_CHAPTER_TITLE_COLOR       _COLOR
-.ALIAS   COVER_COLOR                     _COLOR
-.ALIAS   COVER_COPYRIGHT_COLOR           _COLOR
-.ALIAS   COVER_DOCTYPE_COLOR             _COLOR
-.ALIAS   COVER_MISC_COLOR                _COLOR
-.ALIAS   COVER_SUBTITLE_COLOR            _COLOR
-.ALIAS   COVER_TITLE_COLOR               _COLOR
-.ALIAS   DOC_COVER_ATTRIBUTE_COLOR       _COLOR
-.ALIAS   DOC_COVER_AUTHOR_COLOR          _COLOR
-.ALIAS   DOC_COVER_CHAPTER_TITLE_COLOR   _COLOR
-.ALIAS   DOC_COVER_COLOR                 _COLOR
-.ALIAS   DOC_COVER_COPYRIGHT_COLOR       _COLOR
-.ALIAS   DOC_COVER_DOCTYPE_COLOR         _COLOR
-.ALIAS   DOC_COVER_MISC_COLOR            _COLOR
-.ALIAS   DOC_COVER_SUBTITLE_COLOR        _COLOR
-.ALIAS   DOC_COVER_TITLE_COLOR           _COLOR
-.ALIAS   DOCHEADER_COLOR                 _COLOR
-.ALIAS   DOCTYPE_COLOR                   _COLOR
-.ALIAS   ENDNOTE_STRING_COLOR            _COLOR
-.ALIAS   EPIGRAPH_COLOR                  _COLOR
-.ALIAS   FINIS_COLOR                     _COLOR
-.ALIAS   FOOTNOTE_COLOR                  _COLOR
-.ALIAS   HDRFTR_CENTER_COLOR             _COLOR
-.ALIAS   HDRFTR_COLOR                    _COLOR
-.ALIAS   HDRFTR_LEFT_COLOR               _COLOR
-.ALIAS   HDRFTR_RIGHT_COLOR              _COLOR
-.ALIAS   HDRFTR_RULE_COLOR               _COLOR
-.ALIAS   LINEBREAK_COLOR                 _COLOR
-.ALIAS   LINENUMBER_COLOR                _COLOR
-.ALIAS   PAGENUM_COLOR                   _COLOR
-.ALIAS   QUOTE_COLOR                     _COLOR
-.ALIAS   SECTION_COLOR                   _COLOR
-.ALIAS   SUBTITLE_COLOR                  _COLOR
-.ALIAS   TITLE_COLOR                     _COLOR
-\#
-.ALIAS   BIBLIOGRAPHY_QUAD          _QUAD
-.ALIAS   BIBLIOGRAPHY_STRING_QUAD   _QUAD
-.ALIAS   BLOCKQUOTE_QUAD            _QUAD
-.ALIAS   COVER_COPYRIGHT_QUAD       _QUAD
-.ALIAS   COVER_MISC_QUAD            _QUAD
-.ALIAS   COVER_QUAD                 _QUAD
-.ALIAS   DOC_COVER_COPYRIGHT_QUAD   _QUAD
-.ALIAS   DOC_COVER_MISC_QUAD        _QUAD
-.ALIAS   DOC_COVER_QUAD             _QUAD
-.ALIAS   DOCHEADER_QUAD             _QUAD
-.ALIAS   DOC_QUAD                   _QUAD
-.ALIAS   ENDNOTE_QUAD               _QUAD
-.ALIAS   ENDNOTE_STRING_QUAD        _QUAD
-.ALIAS   ENDNOTE_TITLE_QUAD         _QUAD
-.ALIAS   EPIGRAPH_QUAD              _QUAD
-.ALIAS   FOOTNOTE_QUAD              _QUAD
-.ALIAS   TOC_HEADER_QUAD            _QUAD
+\# Aliases for other HEADER and FOOTER macros.
+\#
+.ALIAS  BIBLIOGRAPHY_FOOTER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER
+.ALIAS  BIBLIOGRAPHY_FOOTER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTER
+.ALIAS  BIBLIOGRAPHY_HEADER_CENTER BIBLIOGRAPHY_HDRFTR_CENTER
+.ALIAS  BIBLIOGRAPHY_HEADER_CENTRE BIBLIOGRAPHY_HDRFTR_CENTER
+.
+.ALIAS  ENDNOTES_FOOTER_CENTER ENDNOTES_HDRFTR_CENTER
+.ALIAS  ENDNOTES_FOOTER_CENTRE ENDNOTES_HDRFTR_CENTER
+.ALIAS  ENDNOTES_HEADER_CENTER ENDNOTES_HDRFTR_CENTER
+.ALIAS  ENDNOTES_HEADER_CENTRE ENDNOTES_HDRFTR_CENTER
+.
+.ALIAS  FOOTER_CENTER           HDRFTR_CENTER
+.ALIAS  TOC_PAGEFOOTER_CENTER   HDRFTR_CENTER
+.ALIAS  TOC_PAGEFOOTER_CENTRE   HDRFTR_CENTER
+.ALIAS  FOOTER_CENTER_CAPS      _HDRFTR_CAPS
+.ALIAS  FOOTER_CENTER_PAD       HDRFTR_CENTER_PAD
+.ALIAS  FOOTER_CENTER_SMALLCAPS _HDRFTR_SMALLCAPS
+.ALIAS  FOOTER_CENTRE           HDRFTR_CENTER
+.ALIAS  FOOTER_CENTRE_CAPS      _HDRFTR_CAPS
+.ALIAS  FOOTER_CENTRE_PAD       HDRFTR_CENTER_PAD
+.ALIAS  FOOTER_CENTRE_SMALLCAPS _HDRFTR_SMALLCAPS
+.ALIAS  FOOTER_LEFT             HDRFTR_LEFT
+.ALIAS  FOOTER_LEFT_CAPS        _HDRFTR_CAPS
+.ALIAS  FOOTER_LEFT_SMALLCAPS   _HDRFTR_SMALLCAPS
+.ALIAS  FOOTER_PLAIN            HDRFTR_PLAIN
+.ALIAS  FOOTER_RECTO            HDRFTR_RECTO
+.ALIAS  FOOTER_RIGHT            HDRFTR_RIGHT
+.ALIAS  FOOTER_RIGHT_CAPS       _HDRFTR_CAPS
+.ALIAS  FOOTER_RIGHT_SMALLCAPS  _HDRFTR_SMALLCAPS
+.ALIAS  FOOTER_RULE             HDRFTR_RULE
+.ALIAS  FOOTER_RULE_GAP         HDRFTR_RULE_GAP
+.ALIAS  FOOTER_VERSO            HDRFTR_VERSO
+.
+.ALIAS  HEADER_CENTER           HDRFTR_CENTER
+.ALIAS  TOC_PAGEHEADER_CENTER   HDRFTR_CENTER
+.ALIAS  TOC_PAGEHEADER_CENTRE   HDRFTR_CENTER
+.ALIAS  HEADER_CENTER_CAPS      _HDRFTR_CAPS
+.ALIAS  HEADER_CENTER_PAD       HDRFTR_CENTER_PAD
+.ALIAS  HEADER_CENTER_SMALLCAPS _HDRFTR_SMALLCAPS
+.ALIAS  HEADER_CENTRE           HDRFTR_CENTER
+.ALIAS  HEADER_CENTRE_CAPS      _HDRFTR_CAPS
+.ALIAS  HEADER_CENTRE_PAD       HDRFTR_CENTER_PAD
+.ALIAS  HEADER_CENTRE_SMALLCAPS _HDRFTR_SMALLCAPS
+.ALIAS  HEADER_LEFT             HDRFTR_LEFT
+.ALIAS  HEADER_LEFT_CAPS        _HDRFTR_CAPS
+.ALIAS  HEADER_LEFT_SMALLCAPS   _HDRFTR_SMALLCAPS
+.ALIAS  HEADER_PLAIN            HDRFTR_PLAIN
+.ALIAS  HEADER_RECTO            HDRFTR_RECTO
+.ALIAS  HEADER_RIGHT            HDRFTR_RIGHT
+.ALIAS  HEADER_RIGHT_CAPS       _HDRFTR_CAPS
+.ALIAS  HEADER_RIGHT_SMALLCAPS  _HDRFTR_SMALLCAPS
+.ALIAS  HEADER_RULE             HDRFTR_RULE
+.ALIAS  HEADER_RULE_GAP         HDRFTR_RULE_GAP
+.ALIAS  HEADER_VERSO            HDRFTR_VERSO
+.
+.ALIAS  SWITCH_FOOTERS     SWITCH_HDRFTR
+.ALIAS  SWITCH_HEADERS     SWITCH_HDRFTR
+\#
+\# Create type-style aliases for tags, titles, and page elements
+\#
+\# These are used for creating aliases with while loops
+\#
+.ds ELEMENT_TYPE_1  BIBLIOGRAPHY_STRING
+.ds ELEMENT_TYPE_2  BIBLIOGRAPHY_HEADER
+.ds ELEMENT_TYPE_3  BLOCKQUOTE
+.ds ELEMENT_TYPE_4  CITATION
+.ds ELEMENT_TYPE_5  CITE
+.ds ELEMENT_TYPE_6  ENDNOTES_HEADER
+.ds ELEMENT_TYPE_7  ENDNOTE_STRING
+.ds ELEMENT_TYPE_8  EPIGRAPH
+.ds ELEMENT_TYPE_9  HDRFTR_CENTER
+.ds ELEMENT_TYPE_10 HDRFTR_LEFT
+.ds ELEMENT_TYPE_11 HDRFTR_RIGHT
+.ds ELEMENT_TYPE_12 LINENUMBER
+.ds ELEMENT_TYPE_13 PAGENUM
+.ds ELEMENT_TYPE_14 QUOTE
+.ds ELEMENT_TYPE_15 TOC_HEADER
+.ds ELEMENT_TYPE_16 CODE
+.ds ELEMENT_TYPE_17 FINIS
+.ds ELEMENT_TYPE_18 COPYRIGHT
+\#
+\# Create aliases for _FAMILY
+.ALIAS BIBLIOGRAPHY_FAMILY       _FAMILY
+.ALIAS COVER_FAMILY              _FAMILY
+.ALIAS DOCHEADER_FAMILY          _FAMILY
+.ALIAS DOC_COVER_FAMILY          _FAMILY
+.ALIAS ENDNOTE_FAMILY            _FAMILY
+.ALIAS ENDNOTE_LINENUMBER_FAMILY _FAMILY
+.ALIAS ENDNOTE_NUMBER_FAMILY     _FAMILY
+.ALIAS ENDNOTE_STRING_FAMILY     _FAMILY
+.ALIAS ENDNOTE_TITLE_FAMILY      _FAMILY
+.ALIAS FOOTNOTE_FAMILY           _FAMILY
+.ALIAS HDRFTR_FAMILY             _FAMILY
+.ALIAS PAGENUMBER_FAMILY         _FAMILY
+.ALIAS TOC_FAMILY                _FAMILY
+.ALIAS TOC_PAGENUMBER_FAMILY     _FAMILY
+.ALIAS TOC_PN_FAMILY             _FAMILY
+.ALIAS TOC_TITLE_FAMILY          _FAMILY
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=18 \{\
+. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_FAMILY _FAMILY
+.\}
+\# Covers, docheader
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_FAMILY           _FAMILY
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_FAMILY     _FAMILY
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_FAMILY _FAMILY
+.\}
+\#
+\# Create aliases for _FONT
+.ALIAS BIBLIOGRAPHY_FONT       _FONT
+.ALIAS ENDNOTE_FONT            _FONT
+.ALIAS ENDNOTE_LINENUMBER_FONT _FONT
+.ALIAS ENDNOTE_NUMBER_FONT     _FONT
+.ALIAS ENDNOTE_TITLE_FONT      _FONT
+.ALIAS FOOTNOTE_FONT           _FONT
+.ALIAS TOC_PN_FONT             _FONT
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=18 \{\
+. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_FONT _FONT
+.\}
+\# Covers, docheader
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_FONT           _FONT
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_FONT     _FONT
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_FONT _FONT
+.\}
+\#
+\# Create aliases for _SIZE
+.ALIAS   ENDNOTE_LINENUMBER_SIZE _SIZE
+.ALIAS   ENDNOTE_NUMBER_SIZE     _SIZE
+.ALIAS   ENDNOTE_TITLE_SIZE      _SIZE
+.ALIAS   FOOTNOTE_SIZE           _SIZE
+.ALIAS   HDRFTR_SIZE             _SIZE
+.ALIAS   TOC_PN_SIZE             _SIZE
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=18 \{\
+. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_SIZE _SIZE
+.\}
+\# Covers, docheader
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_SIZE           _SIZE
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_SIZE     _SIZE
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_SIZE _SIZE
+.\}
+\#
+\# Create aliases for TITLE_LEAD
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_LEAD           TITLE_LEAD
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_LEAD     TITLE_LEAD
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_LEAD TITLE_LEAD
+.\}
+\#
+\# Create aliases for _UNDERLINE
+.ALIAS BIBLIOGRAPHY_HEADER_UNDERLINE  _UNDERLINE
+.ALIAS BIBLIOGRAPHY_HEADER_UNDERSCORE _UNDERLINE
+.ALIAS BIBLIOGRAPHY_STRING_UNDERLINE  _UNDERLINE
+.ALIAS BIBLIOGRAPHY_STRING_UNDERSCORE _UNDERLINE
+.ALIAS BIB_STRING_UNDERLINE           _UNDERLINE
+.ALIAS ENDNOTES_HEADER_UNDERLINE      _UNDERLINE
+.ALIAS ENDNOTES_HEADER_UNDERSCORE     _UNDERLINE
+.ALIAS ENDNOTES_STRING_UNDERLINE      _UNDERLINE
+.ALIAS ENDNOTES_STRING_UNDERSCORE     _UNDERLINE
+.ALIAS ENDNOTE_TITLE_UNDERLINE        _UNDERLINE
+.ALIAS ENDNOTE_TITLE_UNDERSCORE       _UNDERLINE
+.ALIAS EN_STRING_UNDERLINE            _UNDERLINE
+.ALIAS EN_STRING_UNDERSCORE           _UNDERLINE
+.ALIAS TOC_HEADER_UNDERLINE           _UNDERLINE
+.ALIAS TOC_HEADER_UNDERSCORE          _UNDERLINE
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE            _UNDERLINE
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_UNDERSCORE           _UNDERLINE
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE      _UNDERLINE
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERSCORE     _UNDERLINE
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERLINE  _UNDERLINE
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_UNDERSCORE _UNDERLINE
+.\}
+\#
+\# Create aliases for _COLOR
+.ALIAS BIBLIOGRAPHY_HEADER_COLOR _COLOR
+.ALIAS COVER_COLOR               _COLOR
+.ALIAS DOCHEADER_COLOR           _COLOR
+.ALIAS ENDNOTE_TITLE_COLOR       _COLOR
+.ALIAS FINIS_COLOR               _COLOR
+.ALIAS FOOTNOTE_COLOR            _COLOR
+.ALIAS HDRFTR_COLOR              _COLOR
+.ALIAS HDRFTR_RULE_COLOR         _COLOR
+.ALIAS LINEBREAK_COLOR           _COLOR
+.ALIAS SECTION_COLOR             _COLOR
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=18 \{\
+. ALIAS \*[ELEMENT_TYPE_\n[#LOOP]]_COLOR _COLOR
+.\}
+\# Covers, docheader
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_COLOR           _COLOR
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_COLOR     _COLOR
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_COLOR _COLOR
+.\}
+\#
+\# Create aliases for _CAPS
+.ALIAS BIBLIOGRAPHY_HEADER_CAPS _CAPS
+.ALIAS BIBLIOGRAPHY_STRING_CAPS _CAPS
+.ALIAS ENDNOTE_TITLE_CAPS       _CAPS
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_CAPS           _CAPS
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_CAPS     _CAPS
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_CAPS _CAPS
+.\}
+\#
+\# Create aliases for _SMALLCAPS
+.ALIAS BIBLIOGRAPHY_HEADER_SMALLCAPS _SMALLCAPS
+.ALIAS BIBLIOGRAPHY_STRING_SMALLCAPS _SMALLCAPS
+.ALIAS ENDNOTE_TITLE_SMALLCAPS       _SMALLCAPS
+.ALIAS HDRFTR_CENTER_SMALLCAPS       _SMALLCAPS
+.ALIAS HDRFTR_LEFT_SMALLCAPS         _SMALLCAPS
+.ALIAS HDRFTR_RIGHT_SMALLCAPS        _SMALLCAPS
+\#
+.nr #LOOP 0 1
+.while \n+[#LOOP]<=12 \{\
+. ALIAS \*[TITLE_TYPE_\n[#LOOP]]_SMALLCAPS           _SMALLCAPS
+. ALIAS COVER_\*[TITLE_TYPE_\n[#LOOP]]_SMALLCAPS     _SMALLCAPS
+. ALIAS DOC_COVER_\*[TITLE_TYPE_\n[#LOOP]]_SMALLCAPS _SMALLCAPS
+.\}
+\#
+\# Create aliases for _QUAD
+.ALIAS  BIBLIOGRAPHY_HEADER_QUAD  _QUAD
+.ALIAS  BIBLIOGRAPHY_QUAD         _QUAD
+.ALIAS  BIBLIOGRAPHY_STRING_QUAD  _QUAD
+.ALIAS  BLOCKQUOTE_QUAD           _QUAD
+.ALIAS  COPYRIGHT_QUAD            _QUAD
+.ALIAS  COVER_COPYRIGHT_QUAD      _QUAD
+.ALIAS  COVER_MISC_QUAD           _QUAD
+.ALIAS  COVER_QUAD                _QUAD
+.ALIAS  DOCHEADER_QUAD            _QUAD
+.ALIAS  DOC_COVER_COPYRIGHT_QUAD  _QUAD
+.ALIAS  DOC_COVER_MISC_QUAD       _QUAD
+.ALIAS  DOC_COVER_QUAD            _QUAD
+.ALIAS  DOC_QUAD                  _QUAD
+.ALIAS  ENDNOTES_HEADER_QUAD      _QUAD
+.ALIAS  ENDNOTE_QUAD              _QUAD
+.ALIAS  ENDNOTE_STRING_QUAD       _QUAD
+.ALIAS  ENDNOTE_TITLE_QUAD        _QUAD
+.ALIAS  EPIGRAPH_QUAD             _QUAD
+.ALIAS  FOOTNOTE_QUAD             _QUAD
+.ALIAS  MISC_QUAD                 _QUAD
+.ALIAS  TOC_HEADER_QUAD           _QUAD
 \#
 \# Support aliases
 \#
 .ALIAS   COL_BREAK               COL_NEXT
-.ALIAS   DOC_COVER_ADVANCE       COVER_ADVANCE
 .ALIAS   DOC_COVER               COVER
-.ALIAS   DOC_COVER_COUNTS_PAGES  COVER_COUNTS_PAGES
 .ALIAS   DOC_COVERS              COVERS
-.ALIAS   DOC_COVER_LEAD          COVER_LEAD
 .ALIAS   DOC_COVERTITLE          COVERTITLE
+.ALIAS   DOC_COVER_COUNTS_PAGES  COVER_COUNTS_PAGES
+.ALIAS   DOC_COVER_LEAD          COVER_LEAD
+.ALIAS   DOC_DOC_COVERTITLE      COVERTITLE
 .ALIAS   DO_DOC_COVER            DO_COVER
 .ALIAS   PRINT_FOOTNOTE_RULE     FOOTNOTE_RULE
 \#
@@ -17080,7 +18543,6 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    \}
 .END
 \#
-\#
 \# PREPROCESSOR SUPPORT
 \# ====================
 \#
@@ -17094,6 +18556,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if \\n[all]=2 .ds label-type pdf-img
 .    if \\n[all]=3 .ds label-type pic
 .    if \\n[all]=4 .ds label-type tbl
+.    if \\n[all]=5 .ds label-type floating
 .END
 \#
 .MAC set-defaults END
@@ -17105,6 +18568,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       ds \\*[label-type]*\\*[spec-type]-size-change +0\"
 .    if !r \\*[label-type]*\\*[spec-type]-autolead \
 .       nr \\*[label-type]*\\*[spec-type]-autolead 2
+.    if '\\*[\\*[label-type]*\\*[spec-type]-space]'' \
+.       ds \\*[label-type]*\\*[spec-type]-space +0\"
 .    if '\\*[\\*[label-type]*\\*[spec-type]-color]'' \
 .       ds \\*[label-type]*\\*[spec-type]-color black\"
 .    if '\\*[\\*[label-type]*\\*[spec-type]-quad]'' \{\
@@ -17116,9 +18581,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    \}
 .    if '\\n[\\*[label-type]*\\*[spec-type]-quad-on-ll]'' \
 .       nr \\*[label-type]*\\*[spec-type]-quad-on-ll 1
-.    if '\\*[spec-type]'caption' \{\
+.    if '\\*[spec-type]'caption' \
 .       nr default-left 1
-.    \}
 .END
 \#
 .MAC set-inline-specs END
@@ -17134,10 +18598,10 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .MAC SET_QUAD END
 .    ds label-type \\$0
 .    substring label-type 0 2
-.    if '\\*[label-type]'PDF'  .ds label-type pdf-img
-.    if '\\*[label-type]'TBL'  .ds label-type tbl
-.    if '\\*[label-type]'PIC'  .ds label-type pic
-.    if '\\*[label-type]'EQN'  .ds label-type eqn
+.    if '\\*[label-type]'PDF'   .ds label-type pdf-img
+.    if '\\*[label-type]'TBL'   .ds label-type tbl
+.    if '\\*[label-type]'PIC'   .ds label-type pic
+.    if '\\*[label-type]'EQN'   .ds label-type eqn
 .    ds spec-type \\$0
 .    substring spec-type -6 -10
 .    if '\\*[spec-type]'PTION' .ds spec-type caption
@@ -17210,15 +18674,56 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       if !\\n[tbl*\\*[spec-type]-quad-on-ll] \{\
 .          ie \\n[tbl*center] \{\
 .             ie '\\*[spec-type]'label' \{\
-.                ll \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[TW]u
-\!.                in \\n[ll-pre-tbl]u-\\n[TW]u/2u
+.\" Differentiate between a tbl label and a float label
+.                ie !'\\*[ev-current]'FLOAT' \{\
+.                   ll \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[TW]u
+.                   if \\n[tbl*have-header] \
+.                      in (\\n[ll-pre-tbl]u-\\n[.i]u)-\\n[TW]u/2u+\\n[.i]u
+.                \}
+.                el \{\
+.                   in \\n[ll-pre-tbl]u+\\n[.i]u-\\n[TW]u/2u
+.                   ll \\n[.l]u-\\n[.i]u
+.                \}
 .             \}
 .             el \{\
-.                ll \\n[TW]u
-\!.              in \\n[ll-pre-tbl]u-\\n[TW]u/2u
+.                if '\\*[spec-type]'source' \{\
+.                    ie \\n[float*tbl] \{\
+.                       ll \\n[TW]u
+\!.                     in \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[tmp-ind]u
+.                    \}
+.                    el \{\
+.                       ll \\n[TW]u+\\n[ind-pre-tbl]u
+.                       ie \\n[ind-pre-tbl] \
+\!.                        in \\n[ll-pre-tbl]u-\\n[TW]u/2u
+.                       el \
+\!.                        in \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[tmp-ind]u
+.                    \}
+\!.                  ti -\\n[tmp-ind]u
+.                \}
+.                if '\\*[spec-type]'caption' \{\
+.                    ll \\n[ll-pre-tbl]u+\\n[.i]u-\\n[TW]u/2u+\\n[TW]u
+.                    in \\n[ll-pre-tbl]u+\\n[.i]u-\\n[TW]u/2u
+.                \}
+.             \}
+.          \}
+.          el \{\
+.             ll \\n[TW]u+\\n[.i]u
+.\" Check the effect of setting a source in non-MLA mode.
+.             if '\\*[spec-type]'source' \{\
+.                if \\n[#MLA] \{\
+.                   ie \\n[float*tbl] \{\
+\!.                    ll \\n[TW]u+\\n[ind-pre-tbl]u
+\!.                    in \\n[tmp-ind]u+\\n[ind-pre-tbl]u
+\!.                    ti -\\n[tmp-ind]u
+.                   \}
+.                   el \{\
+.                      ll \\n[TW]u+\\n[ind-pre-tbl]u
+\!.                      in \\n[tmp-ind]u
+\!.                      ti -\\n[tmp-ind]u
+.                   \}
+.                \}
 .             \}
 .          \}
-.          el .ll \\n[TW]u
 .       \}
 .    \}
 .END
@@ -17242,10 +18747,10 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if '\\*[spec-type]'cap' .ds spec-type caption
 .    if '\\*[spec-type]'lab' .ds spec-type label
 .    if '\\*[spec-type]'sou' .ds spec-type source
-.    fam \\*[\\*[label-type]*\\*[spec-type]-family]
-.    ft \\*[\\*[label-type]*\\*[spec-type]-font]
-.    ps \\n[#DOC_PT_SIZE]u\\*[\\*[label-type]*\\*[spec-type]-size-change]
-.    gcolor \\*[\\*[label-type]*\\*[spec-type]-color]
+'    fam \\*[\\*[label-type]*\\*[spec-type]-family]
+'    ft \\*[\\*[label-type]*\\*[spec-type]-font]
+'    ps \\n[#DOC_PT_SIZE]u\\*[\\*[label-type]*\\*[spec-type]-size-change]
+.    COLOR \\*[\\*[label-type]*\\*[spec-type]-color]
 .END
 \#
 .ALIAS tbl*caption-style style
@@ -17264,13 +18769,13 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \# --------------------------------------------
 \#  Aliased as CAPTIONS and LABELS for eqn, pic, tbl, and pdf images.
 \# *Arguments:
-\#   EQN | IMG | PIC | TBL \
+\#   EQN | IMG | PIC | TBL | FLOATING \
 \#   Remaining arguments are optional
-\#   FAMILY fam \
-\#   FONT   sty \
-\#   SIZE   +|-size \
-\#   QUAD   LEFT | CENTRE | RIGHT [ ON_LL ] \
-\#   COLOR  color \
+\#   FAMILY   fam \
+\#   FONT     sty \
+\#   SIZE     +|-size \
+\#   QUAD     LEFT | CENTRE | RIGHT [ ON_LL ] \
+\#   COLOR    color \
 \#   AUTOLEAD n \
 \#   ADJUST   +|-n
 \# *Function:
@@ -17285,11 +18790,13 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if '\\$0'CAPTIONS' .ds spec-type caption
 .    if '\\$0'LABELS'   .ds spec-type label
 .    if '\\$0'SOURCES'  .ds spec-type source
-.    if '\\$1'EQN' .ds label-type eqn
-.    if '\\$1'IMG' .ds label-type pdf-img
-.    if '\\$1'PIC' .ds label-type pic
-.    if '\\$1'TBL' .ds label-type tbl
-.    if '\\$1'ALL' .nr all 1
+.    ds $LABEL-TYPE \\$1
+.    if '\\$1'EQN'      .ds label-type eqn
+.    if '\\$1'FLOATING' .ds label-type floating
+.    if '\\$1'IMG'      .ds label-type pdf-img
+.    if '\\$1'PIC'      .ds label-type pic
+.    if '\\$1'TBL'      .ds label-type tbl
+.    if '\\$1'ALL'      .nr all 1
 .    shift
 .    nr loop-counter \\n[#NUM_ARGS]
 .    nr loop-count 0 1
@@ -17298,7 +18805,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          shift
 .          ie r all \{\
 .             nr all 0 1
-.             while \\n+[all]<=4 \{\
+.             while \\n+[all]<=5 \{\
 .                 get-label-type
 .                 ds \\*[label-type]*\\*[spec-type]-family \\$1
 .             \}
@@ -17312,7 +18819,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          shift
 .          ie r all \{\
 .             nr all 0 1
-.             while \\n+[all]<=4 \{\
+.             while \\n+[all]<=5 \{\
 .                 get-label-type
 .                 ds \\*[label-type]*\\*[spec-type]-font \\$1
 .             \}
@@ -17326,7 +18833,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          shift
 .          ie r all \{\
 .             nr all 0 1
-.             while \\n+[all]<=4 \{\
+.             while \\n+[all]<=5 \{\
 .                 get-label-type
 .                 ds \\*[label-type]*\\*[spec-type]-size-change \\$1
 .             \}
@@ -17340,7 +18847,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          shift
 .          ie r all \{\
 .             nr all 0 1
-.             while \\n+[all]<=4 \{\
+.             while \\n+[all]<=5 \{\
 .                 get-label-type
 .                 nr \\*[label-type]*\\*[spec-type]-autolead (p;\\$1)
 .             \}
@@ -17352,10 +18859,12 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          shift
 .          ie r all \{\
 .             nr all 0 1
-.             while \\n+[all]<=4 \{\
+.             while \\n+[all]<=5 \{\
 .                 get-label-type
 .                 ds \\*[label-type]*\\*[spec-type]-quad \\$1
 .                 substring \\*[label-type]*\\*[spec-type]-quad 0 0
+.                 if '\\$2'ON_LL' \
+.                    nr \\*[label-type]*\\*[spec-type]-quad-on-ll 1
 .             \}
 .          \}
 .          el \{\
@@ -17363,18 +18872,17 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .             substring \\*[label-type]*\\*[spec-type]-quad 0 0
 .             if \\n[\\*[label-type]*\\*[spec-type]-quad-on-ll] \
 .                rr \\*[label-type]*\\*[spec-type]-quad-on-ll 
+.             if '\\$2'ON_LL' \
+.                nr \\*[label-type]*\\*[spec-type]-quad-on-ll 1
 .          \}
-.          shift
-.          if '\\$1'ON_LL' \{\
-.             nr \\*[label-type]*\\*[spec-type]-quad-on-ll 1
-.             shift
-.          \}
+.          ie '\\$2'ON_LL' .shift 2
+.          el  .shift
 .       \}
 .       if '\\$1'COLOR' \{\
 .          shift
 .          ie r all \{\
 .             nr all 0 1
-.             while \\n+[all]<=4 \{\
+.             while \\n+[all]<=5 \{\
 .                 get-label-type
 .                 ds \\*[label-type]*\\*[spec-type]-color \\$1
 .             \}
@@ -17388,7 +18896,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          shift
 .          ie r all \{\
 .             nr all 0 1
-.             while \\n+[all]<=4 \{\
+.             while \\n+[all]<=5 \{\
 .                 get-label-type
 .                 ds \\*[label-type]*\\*[spec-type]-space \\$1
 .             \}
@@ -17398,10 +18906,45 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .             ds \\*[label-type]*\\*[spec-type]-space +0
 .          shift
 .       \}
+.       if '\\$1'INDENT' \{\
+.          shift
+.          ie '\\*[label-type]'floating' \{\
+.             ie \B'\\$1' \{\
+.                nr \\*[label-type]*\\*[spec-type]-indent-l \\$1
+.                shift
+.             \}
+.             el \{\
+.                ie '\\$1'RIGHT' \{\
+.                   shift
+.                   nr \\*[label-type]*\\*[spec-type]-indent-r \\$1
+.                   shift
+.                \}
+.                el \{\
+.                   tm1 \
+"[mom]: Missing value for INDENT in macro '\\$0' at line \\n[.c].
+.                   ab \
+[mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.                \}
+.             \}
+.          \}
+.          el \{\
+.             shift
+.             if !\\n[#SKIP_INDENT_WARNING] \{\
+.                tm1 \
+"[mom]: '\\$0 \\*[$LABEL-TYPE]' at line \\n[.c] does not take an indent.
+.                tm1 \
+"        No indent(s) will be applied.
+.                nr #SKIP_INDENT_WARNING 1
+.             \}
+.             if '\\$1'INDENT' .shift
+.             if '\\$1'RIGHT'  .shift
+.             if \B'\\$1'      .shift
+.          \}
+.       \}
 .    \}
 .    ie r all \{\
 .       nr all 0 1
-.       while \\n+[all]<=4 \{\
+.       while \\n+[all]<=5 \{\
 .          get-label-type
 .          set-defaults
 .          set-inline-specs
@@ -17412,13 +18955,261 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       set-inline-specs
 .    \}
 .    ds revert-specs \f[]\s[0]\m[]
+.    rr #SKIP_INDENT_WARNING
 .    rr all
 .END
-\#
+.
 .ALIAS CAPTIONS CAPTION_LABEL_SPECS
 .ALIAS LABELS   CAPTION_LABEL_SPECS
 .ALIAS SOURCES  CAPTION_LABEL_SPECS
 \#
+\# LABELS and CAPTIONS (floats and [block]quotes)
+\# ----------------------------------------------
+\# *Arguments:
+\#   <text of label or caption> [ CAPTION <text of caption> ] \
+\#   [ TO_LIST FIGURES | EQUATIONS | TABLES ]
+\# *Function:
+\#   Add label/caption to float, quotes, and blockquotes
+\# *Notes:
+\#   Aliased as CAPTION.  If called as CAPTION, prints all
+\#   double-quoted text strings including ".br" or ".sp";
+\#   may come at top or bottom of labelled object, or both.
+\#   If called as LABEL, optional arg CAPTION attaches caption
+\#   text to the label; may only come at bottom of object and
+\#   can only take one double-quoted text string.
+\#
+\# These strings allow users to create labels of the form
+\# 'Fig. \*[chapter].\*[fig-label]', e.g. 'Fig. 1.1'
+\#
+.ds chapter   \\n[#CH_NUM]
+.ds fig-label \\n+[fig*label-num]
+.ds tbl-label \\n+[tbl*label-num]
+.ds eqn-label \\n+[eqn*label-num]
+\#
+\#
+.MAC LABEL END
+.    br
+.    if \\n[.ns] \{\
+.       vpt 0
+.       rs
+.       nop \&
+.       sp -1
+.       vpt
+.    \}
+.    if r chop-space .sp -1
+.    rr chop-space
+.    if \\n[#QUOTE] .nr q-float 1
+.    if '\\$0'CAPTION' \{\
+.       ds labelcap caption
+.       ds $FLOATING_CAPTION \\$*
+.    \}
+.    if '\\$0'LABEL' \{\
+.       ds labelcap label
+.       ds $FLOATING_LABEL \\$1
+.       shift
+.       nr loop-counter 0 1
+.       nr loop-count \\n[#NUM_ARGS]
+.       while \\n+[loop-counter]<=\\n[loop-count] \{\
+.          if '\\$1'CAPTION' \{\
+.             nr with-caption 1
+.             ds $FLOATING_CAPTION \\$2
+.             shift 2
+.          \}
+.          if '\\$1'SHORT_CAPTION' \{\
+.             ds $LIST_CAPTION \\$2
+.             shift 2
+.          \}
+.          if '\\$1'TO_LIST' \{\
+.             nr to-list 1
+.             if '\\$2'FIGURES'   .ds $LIST_OF FIGURES
+.             if '\\$2'EQUATIONS' .ds $LIST_OF EQUATIONS
+.             if '\\$2'TABLES'    .ds $LIST_OF TABLES
+.             shift 2
+.          \}
+.       \}
+.    \}
+.    if \\n[D-float] \
+.       if \\n[.d]>\\n[D-float] \
+.          sp \\n[.d]u-\\n[D-float]u
+.    rr has-\\*[labelcap]
+.    nr has-\\*[labelcap] 1
+.    rr @bottom
+.    if !\\n[.d]=0 .nr @bottom 1
+.    ds ev-current \\n[.ev]
+.    ev floating*labelcap
+.    evc \\*[ev-current]
+.    ps \\n[#DOC_PT_SIZE]u
+.    if \\n[floating*\\*[labelcap]-indent-l] \
+.       in \\n[floating*\\*[labelcap]-indent-l]u
+.    if \\n[floating*\\*[labelcap]-indent-r] \
+.       ll -\\n[floating*\\*[labelcap]-indent-r]u
+.    ds $QUAD_PREV \\*[$QUAD_VALUE]
+.    QUAD \\*[floating*\\*[labelcap]-quad]
+.\" 1/4 space before both captions and labels
+\!.  if \\\\n[nl]=\\\\n[#PAGE_TOP] .nr deferred-float 1
+.    if !\\n[deferred-float] \{\
+.       ie !\\n[@bottom] \{\
+.          ie '\\n[.z]'' \
+.            sp \\n[#DOC_LEAD]u/4u
+.          el \
+.            if '\\n[.z]'FLOAT*DIV' .sp \\n[#DOC_LEAD]u/4u
+.       \}
+.       el \{\
+.          sp \\n[#DOC_LEAD]u/4u
+.          rr @bottom
+.       \}
+.    \}
+\!.  if \\\\n[deferred-float] \{\
+.       if !\\n[#QUOTE] .sp -(\\n[#DOC_LEAD]u/4u)
+\!.  \}
+.    nr floating*\\*[labelcap]-lead-diff \\n[.v]
+.    vs \\n[.ps]u+\\n[floating*\\*[labelcap]-autolead]u
+.    nr floating*\\*[labelcap]-lead-diff \
+        \\n[floating*\\*[labelcap]-lead-diff]-\\n[.v]
+.    if !\\n[deferred-float] \
+.       RESTORE_SPACE
+.    ie '\\*[labelcap]'label' \{\
+.       if \\n[to-list] \{\
+.\" Strip prefix from label if list-type is being autolabelled
+.\" Becomes $LIST_LABEL
+.          if '\\*[$LIST_OF]'FIGURES' \
+.             if r fig*label-num .STRIP_PRFX_SFFX "\\*[$FLOATING_LABEL]"
+.          if '\\*[$LIST_OF]'TABLES' \
+.             if r tbl*label-num .STRIP_PRFX_SFFX "\\*[$FLOATING_LABEL]"
+.          if '\\*[$LIST_OF]'EQUATIONS' \
+.             if r eqn*label-num .STRIP_PRFX_SFFX "\\*[$FLOATING_LABEL]"
+.       \}
+.       ds $FLOATING_LABEL \
+\F[\\\\*[floating*label-family]]\
+\f[\\\\*[floating*label-font]]\
+\s[\\\\*[floating*label-size-change]]\
+\m[\\\\*[floating*label-color]]\
+\\*[$FLOATING_LABEL]
+.    \}
+.    el \{\
+.       if !\\n[deferred-float] \
+.          sp \\n[floating*caption-lead-diff]u
+.       if !'\\*[floating*caption-space]'' \
+.          sp \\*[floating*caption-space]
+.       while !'\\$1'' \{\
+.          nop \
+\F[\\*[floating*caption-family]]\
+\f[\\*[floating*caption-font]]\
+\s[\\*[floating*caption-size-change]]\
+\m[\\*[floating*caption-color]]\
+\\$1
+.          if \\n[.u]=1 .br
+.          shift
+.       \}
+.       if !'\\*[floating*caption-space]'' \
+.          sp -\\*[floating*caption-space]
+.    \}
+.    if \\n[with-caption] \{\
+.       nr width-label \w'\\*[$FLOATING_LABEL]'
+.       if !\\n[width-label]=0 \
+.         as $FLOATING_LABEL \0
+.       as $FLOATING_LABEL \
+\F[\\\\*[floating*caption-family]]\
+\f[\\\\*[floating*caption-font]]\
+\s[\\\\*[floating*caption-size-change]]\
+\m[\\\\*[floating*caption-color]]\
+\\*[$FLOATING_CAPTION]
+.       if '\\*[$LIST_CAPTION]'' \
+.          ds $LIST_CAPTION \\*[$FLOATING_CAPTION]
+.    \}
+.    if !'\\*[$FLOATING_LABEL]'' \{\
+.       sp \\n[floating*label-lead-diff]u
+.       if !'\\*[floating*label-space]'' \
+.          sp \\*[floating*label-space]
+.       nop \\*[$FLOATING_LABEL]
+.       if \\n[.u]=1 .br
+.       if !'\\*[floating*label-space]'' \
+.          sp -\\*[floating*label-space]
+.    \}
+.\" 1/4 space after captions and labels
+.    ie !\\n[@bottom] \
+.       sp \\n[#DOC_LEAD]u/4u
+.    el \{\
+.       if '\\n[.z]'FLOAT*DIV' \{\
+.          sp \\n[#DOC_LEAD]u/4u
+\!.        if \\\\n[deferred-float] \
+.             sp -(\\n[#DOC_LEAD]u/4u)
+.       \}
+.    \}
+\!.  rr deferred-float
+.    ll
+.    vs
+.    QUAD \\*[$QUAD_PREV]
+.    in
+.    ev
+.    if \\n[to-list] \{\
+.       nr loop-counter 0 1
+.       nr loop-count 2
+.       ds labelcap label
+.       while \\n+[loop-counter]<=\\n[loop-count] \{\
+.          ds \\*[labelcap]-family      \\*[floating*\\*[labelcap]-family]
+.          ds \\*[labelcap]-font        \\*[floating*\\*[labelcap]-font]
+.          ds \\*[labelcap]-size-change \\*[floating*\\*[labelcap]-size-change]
+.          ds \\*[labelcap]-color       \\*[floating*\\*[labelcap]-color]
+.          ie '\\*[$LISTS_FAM]'' \
+.             ds floating*\\*[labelcap]-family \\*[$DOC_FAM]
+.          el \
+.             ds floating*\\*[labelcap]-family \\*[$LISTS_FAM]
+.          if '\\*[$LISTS_FT]'' \
+.             ds floating*\\*[labelcap]-font R
+.          ds floating*\\*[labelcap]-size-change +0
+.          ds floating*\\*[labelcap]-color pdf:href.colour
+.          ds labelcap caption
+.       \}
+.       ie '\\*[$LIST_LABEL]'' .TO_\\*[$LIST_OF] "\\*[$FLOATING_LABEL]
+.       el .TO_\\*[$LIST_OF] "\\*[$LIST_LABEL]" "\\*[$LIST_CAPTION]
+.       rr to-list
+.       nr loop-counter 0 1
+.       nr loop-count 2
+.       ds labelcap label
+.       while \\n+[loop-counter]<=\\n[loop-count] \{\
+.          ds floating*\\*[labelcap]-family      \\*[\\*[labelcap]-family]
+.          ds floating*\\*[labelcap]-font        \\*[\\*[labelcap]-font]
+.          ds floating*\\*[labelcap]-size-change \\*[\\*[labelcap]-size-change]
+.          ds floating*\\*[labelcap]-color       \\*[\\*[labelcap]-color]
+.          ds labelcap caption
+.       \}
+.    \}
+.    rr with-caption
+.    rm $FLOATING_CAPTION
+.    rm $FLOATING_LABEL
+.    rm $LIST_LABEL
+.    rm $LIST_CAPTION
+.END
+.
+.ALIAS CAPTION LABEL
+.
+.MAC STRIP_PRFX_SFFX END
+.\" Strip suffix from label string
+.       ds suffix \\$1
+.       substring suffix -1
+.\" If suffix is '.' ',' ':' or ')', remove it.
+.       if '\\*[suffix]'.' .nr strip-suffix 1
+.       if '\\*[suffix]',' .nr strip-suffix 1
+.       if '\\*[suffix]':' .nr strip-suffix 1
+.       if '\\*[suffix]')' .nr strip-suffix 1
+.       if \\n[strip-suffix] \{\
+.          ds $LIST_LABEL \\$1
+.          substring $LIST_LABEL 0 -2
+.       \}
+.       rr strip-suffix
+.       if '\\*[$LIST_LABEL]'' .ds $LIST_LABEL \\$1
+.\" Remove prefix (e.g. "Fig. ") by looping through $LIST_LABEL
+.\" until a digit is encountered
+.       nr loop-counter 100 \" arbitrary
+.       nr loop-count 0 1
+.       while \\n+[loop-count]<=\\n[loop-counter] \{\
+.          substring $LIST_LABEL 1
+.          if \B'\\*[$LIST_LABEL]' .break
+.       \}
+.       substring $LIST_LABEL 1
+.END
+\#
 \# CAPTION_AFTER_LABEL
 \# -------------------
 \# *Arguments:
@@ -17433,9 +19224,9 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if !\\n[#MLA] \{\
 .       nr \\*[type]*caption-after-label 1
 .       if '\\$1'ALL' \{\
-.          if '\\$1'IMG' .nr pdf-img*caption-after-label 1
-.          if '\\$1'TBL' .nr tbl*caption-after-label 1
-.          if '\\$1'PIC' .nr pic*caption-after-label 1
+.          nr pdf-img*caption-after-label 1
+.          nr tbl*caption-after-label 1
+.          nr pic*caption-after-label 1
 .       \}
 .       if !'\\$2'' \{\
 .          ie !'\\$1'ALL' .rr \\*[type]*caption-after-label
@@ -17460,9 +19251,15 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#
 .MAC AUTOLABEL END
 .    if '\\$0'AUTOLABEL_EQUATIONS' .ds label-type eqn
-.    if '\\$0'AUTOLABEL_IMAGES'    .ds label-type pdf-img
-.    if '\\$0'AUTOLABEL_PIC'       .ds label-type pic
 .    if '\\$0'AUTOLABEL_TABLES'    .ds label-type tbl
+.    if '\\$0'AUTOLABEL_PIC' \{\
+.       ds label-type pic
+.       nr fig*autolabel 1
+.    \}
+.    if '\\$0'AUTOLABEL_IMAGES' \{\
+.        ds label-type pdf-img
+.        nr fig*autolabel 1
+.    \}
 .    if !'\\$1'' \{\
 .       ds \\*[label-type]-label-args \\$1
 .       substring \\*[label-type]-label-args -1 -3
@@ -17471,8 +19268,10 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if '\\*[\\*[label-type]-label-args]'TER' .nr \\*[label-type]-label-args 1
 .    if !\\n[\\*[label-type]*label-num] \
 .       nr \\*[label-type]*label-num 0 1
-.    if '\\*[label-type]'pdf-img' .nr fig*label-num 0 1
-.    if '\\*[label-type]'pic'     .nr fig*label-num 0 1
+.    if '\\*[label-type]'pdf-img' \
+.       if !\\n[fig*label-num] .nr fig*label-num 0 1
+.    if '\\*[label-type]'pic' \
+.       if !\\n[pic*label-num] .nr fig*label-num 0 1
 .    nr \\*[label-type]*autolabel 1
 .    nr loop-counter 0 1
 .    nr loop-count \\n[#NUM_ARGS]
@@ -17488,18 +19287,13 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          shift 2
 .       \}
 .       if '\\$1'PREFIX_CHAPTER' \{\
+.          if \\n[fig*autolabel] .nr fig*label-with-chapter 1
 .          nr \\*[label-type]*label-with-chapter 1
-.          ie !'\\$2'' \{\
-.             ie \B'\\$2' .nr #CH_NUM \\$2
-.             el .autolabel@error
-.          \}
-.          el \{\
-.             ie \\n[#CHAPTER_CALLED] \
-.                ie \B'\\*[$CHAPTER]' .nr #CH_NUM \\*[$CHAPTER]
-.                el .autolabel@error \\$0
-.             el .autolabel@error \\$0
+.          shift 1
+.          if \B'\\$1' \{\
+.             nr #CH_NUM \\$1
+.             shift
 .          \}
-.          shift 2
 .       \}
 .    \}
 .    if '\\*[\\*[label-type]*label-prfx]'' \{\
@@ -17530,22 +19324,22 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          if !\\n[\\*[label-type]*label-sffx-set] \
 .             ds \\*[label-type]*label-sffx .\"
 .    \}
-.    ie \\n[args]>0 \{\
+.    if \\n[\\*[label-type]-label-args]>0 \{\
 .       if \\n[\\*[label-type]*label-prfx-set]+\\n[\\*[label-type]*label-sffx-set]=1 \{\
 .          ie (\\n[\\*[label-type]*label-prfx-set]=1)&(\\n[\\*[label-type]*label-sffx-set]=0) \
 .             ds missing-arg SUFFIX
 .          el .ds missing-arg PREFIX
 .          tm1 "[mom]: You must supply a \\*[missing-arg] argument to \\$0.
 .          tm1 "       If you wish the \\*[missing-arg] to be blank, use \\*[missing-arg] "".
-.          ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
-.       \}
-.       if !\\n[\\*[label-type]-label-args] \{\
-.          rr \\*[label-type]*autolabel
-.          rr \\*[label-type]*label-prfx-set
-.          rr \\*[label-type]*label-suffx-set
-.          rr \\*[label-type]-label-args
+.          ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .       \}
 .    \}
+.    if \\n[#NUM_ARGS]=1 \{\
+.       rr fig*autolabel
+.       rr \\*[label-type]*autolabel
+.       rr \\*[label-type]*label-prfx-set
+.       rr \\*[label-type]*label-sffx-set
+.    \}
 .    rr \\*[label-type]-label-args
 .END
 \#
@@ -17554,11 +19348,24 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .ALIAS AUTOLABEL_PIC       AUTOLABEL
 .ALIAS AUTOLABEL_TABLES    AUTOLABEL
 \#
-.MAC autolabel@error END
-.    tm1 "[mom]: \\$1 cannot determine a chapter number.
-.    tm1 "       Enter the current chapter number as a digit after the
-.    tm1 "       PREFIX_CHAPTER argument at line \\n[.c].
-.    ab Aborting '\\n[.F]', line \\n[.c]. 
+\# SET AUTOLABEL NUMBER
+\# --------------------
+\# *Argument:
+\#   FIG | TBL | PIC | EQN <n>
+\# *Function:
+\#   Sets the autolabel number for the corresponding label type.
+\# *Notes:
+\#   Used to set autolabel number when manual labelling of floats
+\#   (in conjunction with TO_LIST) disrupts auto-incrementing.
+\#   
+.MAC SET_AUTOLABEL END
+.    rm labelnum-type
+.    if '\\$1'FIG' .ds labelnum-type fig
+.    if '\\$1'TBL' .ds labelnum-type tbl
+.    if '\\$1'PIC' .ds labelnum-type pic
+.    if '\\$1'EQN' .ds labelnum-type eqn
+.    nr labelnum \\$2-1
+.    nr \\*[labelnum-type]*label-num \\n[labelnum] 1
 .END
 \#
 \# MLA STYLE
@@ -17578,14 +19385,13 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       nr pic*caption-after-label 1
 .       rr tbl*caption-after-label
 .    \}
-.    el \{\
+.    el \
 .       rr #MLA
-.    \}
 .END
 \#
 .MAC mla@error END
 .    tm1 "[mom]: MLA style enabled, but \\$1 has no corresponding \\$2.
-.    ab Aborting '\\$3' at \\$4, line \\$5.
+.    ab   [mom]: Aborting '\\$3' at \\$4, line \\$5.
 .END
 \#
 \# LISTS_OF
@@ -17595,7 +19401,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   LIST_OF_FIGURES
 \#   LIST_OF_TABLES
 \# *Arguments:
-\#   TITLE_STRING <string> START_PAGENUM <pagenumber>
+\#   [ TITLE_STRING <string> ] [ START_PAGENUM <pagenumber> ]
 \# *Function:
 \#   Generates lists-of based on calling alias.
 \# *Notes:
@@ -17604,18 +19410,26 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   relocated.  If called before, lists are output at end of file.
 \#
 .MAC LISTS_OF END
+.    EOL
 .    ds $LIST_TYPE \\$0
+.    nr #LISTS 1
 .    substring $LIST_TYPE -1 -4
 .    if '\\*[$LIST_TYPE]'URES' \{\
 .       ds $LIST_TYPE FIGURES
+.       ds list-type fig
+.       ds label-type fig
 .       ds \\*[$LIST_TYPE]_TITLE_STRING "List of Figures
 .    \}
 .    if '\\*[$LIST_TYPE]'BLES' \{\
 .       ds $LIST_TYPE TABLES
+.       ds list-type tbl
+.       ds label-type tbl
 .       ds \\*[$LIST_TYPE]_TITLE_STRING "List of Tables
 .    \}
 .    if '\\*[$LIST_TYPE]'IONS' \{\
 .       ds $LIST_TYPE EQUATIONS
+.       ds list-type eqn
+.       ds label-type eqn
 .       ds \\*[$LIST_TYPE]_TITLE_STRING "List of Equations
 .    \}
 .    nr #LIST_OF_\\*[$LIST_TYPE] 1
@@ -17631,6 +19445,10 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          shift 2
 .       \}
 .    \}
+.    if dPDF.EXPORT \
+.       if \\n[#FLEX_ACTIVE] \
+.          if !\\n[#NO_FLEX] \
+.             tm .ds pre-list-\\n%@\\n[#COL_NUM] 1
 .    char \[leader] " .
 .    LEADER_CHARACTER \[leader]
 .    if \\n[#LINENUMBERS]=1 \{\
@@ -17643,10 +19461,11 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    \}
 .    if \\n[#FOOTERS_ON]=1 \{\
 .       if !'\\*[$HDRFTR_CENTER_OLD]'' .ds $HDRFTR_CENTER \\*[$HDRFTR_CENTER_OLD]
-.       ie \\n[#LISTS_NO_PAGENUM]=1 .PAGINATION off
+.       ie \\n[#LISTS_NO_PAGENUM]=1 .PAGINATION OFF
 .       el .PAGINATE
 .    \}
-.    if \\n[#FOOTERS_WERE_ON] .FOOTERS OFF
+.    if \\n[#FOOTERS_WERE_ON] \
+.       if !\\n[#FINIS] .FOOTERS OFF
 .    rr #COLUMNS
 .    COLLATE
 .    if \\n[#PRINT_STYLE]=1 \{\
@@ -17668,6 +19487,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    rr #COLLATED_DOC
 .    DOCTYPE DEFAULT
 .    DOCHEADER
+.    rr #DOCHEADER_ADVANCE
 .    TITLE "\\*[\\*[$LIST_TYPE]_TITLE_STRING]
 .    AUTHOR ""
 .    L_MARGIN \\n[#DOC_L_MARGIN]u
@@ -17683,19 +19503,18 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       nr #LISTS_LEAD \\n[#TOC_LEAD]
 .    if \\n[#PRINT_STYLE]=2 \{\
 .       ie \\n[#LISTS_LEAD_ADJUST]=1 \{\
-.          vs \\n[#LISTS_LEAD]u
+.          nr #DOC_LEAD \\n[#LISTS_LEAD]
 .          DOC_LEAD_ADJUST
+.          TRAPS
 .       \}
 .       el \{\
-.          vs \\n[#LISTS_LEAD]u
+.          nr #DOC_LEAD \\n[#LISTS_LEAD]
 .          DOC_LEAD_ADJUST OFF
 .       \}
 .    \}
 .    ie !'\\*[$LISTS_TITLE_QUAD]'' \
 .       DOCHEADER_QUAD \\*[$LISTS_TITLE_QUAD]
 .    el .DOCHEADER_QUAD \\*[$TOC_HEADER_QUAD]
-.    if '\\*[$LISTS_TITLE_QUAD]'' \
-.       ds $LISTS_TITLE_QUAD \\*[$TOC_HEADER_QUAD]
 .    if !'\\*[$LISTS_TITLE_FAM]'' \
 .       TITLE_FAMILY \\*[$LISTS_TITLE_FAM]
 .    if !'\\*[$LISTS_TITLE_FT]'' \
@@ -17704,6 +19523,17 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       TITLE_SIZE \\*[$LISTS_TITLE_SIZE]
 .    if !'\\*[$LISTS_TITLE_COLOR]'' \
 .       TITLE_COLOR \\*[$LISTS_TITLE_COLOR]
+.    if \\n[#LISTS_TITLE_CAPS] \
+.       TITLE_CAPS
+.    if \\n[#LISTS_TITLE_SMALLCAPS] \
+.       TITLE_SMALLCAPS
+.    if \\n[#LISTS_TITLE_UNDERSCORE] \{\
+.       TITLE_UNDERSCORE \
+\\*[DOUBLE] \
+\\*[$LISTS_OF_UL_WT] \
+\\*[$LISTS_OF_UL_GAP] \
+\\*[$LISTS_OF_RULE_GAP]
+.    \}
 .    if '\\*[$LISTS_PN_FAM]'' \
 .       ds $LISTS_PN_FAM \\*[$TOC_PN_FAM]
 .    if '\\*[$LISTS_PN_FT]'' \
@@ -17729,14 +19559,16 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if \\n[#LINENUMBERS]=2 .nr #LINENUMBERS 3
 .\" Get num placeholders for ch. num and label num.
 .    if \\n[\\*[list-type]*autolabel] \{\
-.       if \\n[#CH_NUM]<1000 .nr chapno-width 3
-.       if \\n[#CH_NUM]<100  .nr chapno-width 2
-.       if \\n[#CH_NUM]<10   .nr chapno-width 1
-.       if \\n[\\*[list-type]*label-width]<1000 .nr label-width 3
-.       if \\n[\\*[list-type]*label-width]<100  .nr label-width 2
-.       if \\n[\\*[list-type]*label-width]<10   .nr label-width 1
+.       if \\n[\\*[label-type]*label-with-chapter] \{\
+.          if \\n[#CH_NUM]<1000 .nr chapno-width 3
+.          if \\n[#CH_NUM]<100  .nr chapno-width 2
+.          if \\n[#CH_NUM]<10   .nr chapno-width 1
+.       \}
+.       if \\n[\\*[list-type]*label-num]<1000 .nr label-width 3
+.       if \\n[\\*[list-type]*label-num]<100  .nr label-width 2
+.       if \\n[\\*[list-type]*label-num]<10   .nr label-width 1
 .\" Calculate width of label-num tab
-.       nr label-width \w'\0'*(\\n[chapno-width]+\\n[label-width])+\w'.'
+.      nr label-width \\n[\\*[list-type]*label-width]
 .    \}
 .    if \\n[#SLANT_ON] .nop \\*[SLANTX]
 .    if \\n[#COLUMNS]=1 .nr #COLUMNS 0
@@ -17750,6 +19582,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       nr #LINENUMBERS 1
 .       nn 1
 .    \}
+.    rr #LISTS
 .    pdfsync
 .END
 .\"
@@ -17760,20 +19593,25 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \# LISTS-OF STYLE
 \# --------------
 \# *Arguments:
-\#   FAMILY        fam  /
-\#   FONT          sty /
-\#   PT_SIZE       size /
-\#   LEAD          leading [ADJUST] /
-\#   TITLE_FAMILY  fam /
-\#   TITLE_FONT    sty /
-\#   TITLE_SIZE    +|-size /
-\#   TITLE_QUAD    LEFT | CENTER | RIGHT /
-\#   TITLE_COLOR   color /
-\#   NO_PAGINATION /
-\#   PAGENUM_STYLE format /
-\#   PN_FAMILY     fam /
-\#   PN_FONT       sty /
-\#   PN_SIZE       +|-size /
+\#   FAMILY        fam \
+\#   FONT          sty \
+\#   PT_SIZE       size \
+\#   LEAD          leading [ADJUST] \
+\#   TITLE_FAMILY  fam \
+\#   TITLE_FONT    sty \
+\#   TITLE_SIZE    +|-size \
+\#   TITLE_QUAD    LEFT | CENTER | RIGHT \
+\#   TITLE_COLOR   color \
+\#   TITLE_CAPS    \
+\#   TITLE_NO_CAPS \
+\#   TITLE_SMALLCAPS \
+\#   TITLE_NO_SMALLCAPS \
+\#   TITLE_UNDERSCORE [ DOUBLE] <wt> <gap> (dbl-rule-gap) \
+\#   NO_PAGINATION \
+\#   PAGENUM_STYLE format \
+\#   PN_FAMILY     fam \
+\#   PN_FONT       sty \
+\#   PN_SIZE       +|-size \
 \#   PN_PADDING    n
 \# *Function:
 \#   Allows setting of all style parameters for lists-of.
@@ -17813,6 +19651,100 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          ds $LISTS_TITLE_COLOR \\$2
 .          shift 2
 .       \}
+.       if '\\$1'TITLE_CAPS' \{\
+.          nr #LISTS_TITLE_CAPS 1
+.          shift 1
+.       \}
+.       if '\\$1'TITLE_NO_CAPS' \{\
+.          rr #LISTS_TITLE_CAPS
+.          shift 1
+.       \}
+.       if '\\$1'TITLE_SMALLCAPS' \{\
+.          nr #LISTS_TITLE_SMALLCAPS 1
+.          shift 1
+.       \}
+.       if '\\$1'TITLE_NO_SMALLCAPS' \{\
+.          rr #LISTS_TITLE_NO_SMALLCAPS
+.          shift 1
+.       \}
+.\" UNDERSCORE and UNDERLINE are identical, but we can't evaluate
+.\" the results of two string comparisons.
+.       if '\\$1'TITLE_UNDERSCORE' \{\
+.          nr #LISTS_TITLE_UNDERSCORE 1
+.          shift
+.          ie '\\$1'DOUBLE' \{\
+.             ds DOUBLE DOUBLE
+.             shift
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_WT \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_GAP \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_RULE_GAP \\$1
+.                shift
+.             \}
+.          \}
+.          el \{\
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_WT \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_GAP \\$1
+.                shift
+.             \}
+.          \}
+.       \}
+.       if '\\$1'TITLE_UNDERLINE' \{\
+.          nr #LISTS_TITLE_UNDERSCORE 1
+.          shift
+.          ie '\\$1'DOUBLE' \{\
+.             ds DOUBLE DOUBLE
+.             shift
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_WT \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_GAP \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_RULE_GAP \\$1
+.                shift
+.             \}
+.          \}
+.          el \{\
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_WT \\$1
+.                shift
+.             \}
+.             if \B'\\$1' \{\
+.                ds $LISTS_OF_UL_GAP \\$1
+.                shift
+.             \}
+.          \}
+.       \}
+.       if '\\$1'TITLE_NO_UNDERSCORE' \{\
+.          rr #LISTS_TITLE_UNDERSCORE 1
+.          rm DOUBLE
+.          rm $LISTS_OF_UL_WT
+.          rm $LISTS_OF_UL_GAP
+.          rm $LISTS_OF_RULE_GAP
+.          shift
+.       \}
+.       if '\\$1'TITLE_NO_UNDERLINE' \{\
+.          rr #LISTS_TITLE_UNDERSCORE 1
+.          rm DOUBLE
+.          rm $LISTS_OF_UL_WT
+.          rm $LISTS_OF_UL_GAP
+.          rm $LISTS_OF_RULE_GAP
+.          shift
+.       \}
 .       if '\\$1'PT_SIZE' \{\
 .          nr #LISTS_PS (p;\\$2)
 .          shift 2
@@ -17868,32 +19800,40 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#
 .ds $LISTS_PN \\*[ST102]\F[\\*[$LISTS_PN_FAM]]\f[\\*[$LISTS_PN_FT]]\
 \s[\\n[#LISTS_PS]u]^\\*[ST102X]\\*[ST103]\s[\\\\*[$LISTS_PN_SIZE_CHANGE]]\
-\|\|\|\h'\w'0'u*\\\\n[#LISTS_PN_PADDING]u'\\*[ST103X]
+\h'.5m'\h'\w'0'u*\\\\n[#LISTS_PN_PADDING]u'\\*[ST103X]
 \#
 .ds $LISTS_PN_TYPEWRITE \\*[ST102]^\\*[ST102X]\\*[ST103]\|\
-\h'\w'0'u*\\\\n[#LISTS_PN_PADDING]u'\\*[ST103X]
+\h'\w'\0'u*\\\\n[#LISTS_PN_PADDING]u'\\*[ST103X]
 \#
 .MAC LISTS_COLLECTOR END
+.    nr #LISTS_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
+.    if \\n[#KERN] .nr #RESTORE_KERN 1
+.    KERN OFF
 .    if '\\$0'TO_EQUATIONS' \{\
 .       ds list-type eqn
+.       ds label-type eqn
 .       da LIST_OF_EQN
-\!.       nr #LISTS_PN_PADDING \\\\n[#EQN_PN_PADDING]
-.       nr label-width \w'\\$1'
+\!.     nr #LISTS_PN_PADDING \\\\n[#EQN_PN_PADDING]
 .    \}
 .    if '\\$0'TO_FIGURES' \{\
 .       ds list-type fig
+.       ds label-type fig
+.       if (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1):\
+(\\n[pic*autolabel]=1):(\\n[pic*have-label]=1) \{\
+.          nr \\*[label-type]*have-label 1
+.          if !'\\*[pdf-img*label]'' .rn pdf-img*label \\*[label-type]*label
+.          if !'\\*[pic*label]'' .rn pic*label \\*[label-type]*label
+.       \}
 .       da LIST_OF_FIG
-\!.       nr #LISTS_PN_PADDING \\\\n[#FIG_PN_PADDING]
-.       nr label-width \w'\\$1'
+\!.     nr #LISTS_PN_PADDING \\\\n[#FIG_PN_PADDING]
 .    \}
 .    if '\\$0'TO_TABLES' \{\
 .       ds list-type tbl
+.       ds label-type tbl
 .       da LIST_OF_TBL
-\!.       nr #LISTS_PN_PADDING \\\\n[#TBL_PN_PADDING]
-.       nr label-width \w'\\$1'
+\!.     nr #LISTS_PN_PADDING \\\\n[#TBL_PN_PADDING]
 .    \}
 .    br
-.    nr #LISTS_ENTRY_PN \\n%+\\n[#PAGE_NUM_ADJ]
 .    ie \\n[#PRINT_STYLE]=1 \{\
 \!.     fam \\*[$TYPEWRITER_FAM]
 \!.     ft  R
@@ -17908,9 +19848,23 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if \\n[#PRINT_STYLE]=2 .rm _TYPEWRITE
 \!.  PAD_MARKER ^
 \!.  vpt 0
-\!.  PAD \
-"\\*[ST100]\h'\\n[label-width]u'\\*[ST100X]\0\\*[ST101]\h'\w'\\$2'u'\\*[ST101X]\\\\*[$LISTS_PN\\*[_TYPEWRITE]]" \
-"\\*[PDFBOOKMARK.NAME]"
+.    ie !\\n[\\*[label-type]*autolabel] \{\
+.\" If there is a label...
+.       if !'\\*[\\*[label-type]*label]'' \
+\!.     PAD \
+"\\*[ST100]\h'\w'\\*[\\*[label-type]*label]'u'\\*[ST100X]\0\\*[ST101]\h'\w'\\$2'u'\\*[ST101X]\\\\*[$LISTS_PN\\*[_TYPEWRITE]]" \
+"\*[PDFBOOKMARK.NAME]"
+.\" If there is no label...
+.       if '\\*[\\*[label-type]*label]'' \
+\!.     PAD \
+"\\*[ST100]\\*[ST100X]\\*[ST101]\h'\w'\\$1'u'\0\\*[ST101X]\\\\*[$LISTS_PN\\*[_TYPEWRITE]]" \
+"\*[PDFBOOKMARK.NAME]"
+.    \}
+.\" If autolabelling...
+.    el \
+\!.     PAD \
+"\\*[ST100]\h'\\\\n[label-width]u'\\*[ST100X]\ \ \ \\*[ST101]\h'\w'\\$2'u'\\*[ST101X]\\\\*[$LISTS_PN\\*[_TYPEWRITE]]" \
+"\*[PDFBOOKMARK.NAME]"
 \!.  PAD_MARKER #
 \!.  EOL
 .    ie !\\n[\\*[label-type]*autolabel] \
@@ -17928,21 +19882,24 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \!.  TAB 100
 \!.  PDF_LINK \\*[list-type]:\\n[lists*target] "\\$1"
 \!.  TN
+\!.  vpt 0
 \!.  PDF_LINK \\*[list-type]:\\n[lists*target] "\\$2"
 \!.  TN
-\!.  PRINT \\*[LEADER]
+\!.  vpt 0
+\!.  PRINT \fR\\*[LEADER]\f[]
 \!.  TN
 .    if \\n[#PRINT_STYLE]=2 \{\
 \!.     FAMILY  \\\\*[$LISTS_PN_FAM]
 \!.     FT      \\\\*[$LISTS_PN_FT]
-\!.     ps \\\\*[$LISTS_PN_SIZE_CHANGE]u
+\!.     ps \\\\*[$LISTS_PN_SIZE_CHANGE]
 .    \}
 \!.  PRINT \\n[#LISTS_ENTRY_PN]
 \!.  TQ
 \!.  vpt
 .    da
+.    if \\n[#RESTORE_KERN] .KERN
 .END
-\#
+.
 .ALIAS TO_EQUATIONS LISTS_COLLECTOR
 .ALIAS TO_FIGURES   LISTS_COLLECTOR
 .ALIAS TO_TABLES    LISTS_COLLECTOR
@@ -17957,26 +19914,34 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .ds T&
 \#
 .MAC TS END
-.    di NULL \" Set rule weight for boxed tables
-\D't 500'
-.    di
+.    if \\n[.t]<\\n[#DOC_LEAD] .nr begin-tbl 1
 .    br
-.    if !\\n[@TOP] \
-.       if \\n[.t]=1 .sp \\n[.t]u
+.    rr begin-tbl
+.    rm tbl*caption
+.    rm tbl*label
+.    rr tbl*have-caption
+.    rr tbl*have-label
 .    rr tbl*have-header
 .    rr float*tbl
+.    rr tbl*boxed
+.    nr ind-pre-tbl  \\n[.i]
+.    nr ll-pre-tbl   \\n[.l]
+.    nr lead-pre-tbl \\n[.v]
+.    nr tbl*needs 1
+.    nr doing-tbl 1
+.    if !'\\n[.z]'FLOAT*DIV' \{\
+.       if \\n[.u] .nr fill 1
+.       nf
+.    \}
 .    if '\\n[.z]'FLOAT*DIV' .nr float*tbl 1
 .    if !'\\n[.z]'FLOAT*DIV' \{\
 .       if \\n[.t]=1 \{\
 .          if !\\n[@TOP] \{\
-.             if \\n[#COL_NUM]=\\n[#NUM_COLS] \
-.                NEWPAGE
+.             ie \\n[#COLUMNS] .COL_NEXT internal
+.             el .NEWPAGE
 .          \}
 .       \}
 .    \}
-.    rr tbl*boxed
-.    rm tbl*label
-.    rm tbl*caption
 .    nr loop-count 0 1
 .    nr loop-counter \\n[#NUM_ARGS]
 .    while \\n+[loop-count]<=\\n[loop-counter] \{\
@@ -17990,6 +19955,18 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          shift
 .       \}
 .       if '\\$1'CENTER' \{\
+.          if \\n[#INDENT_BOTH_ACTIVE] \{\
+.             IBX
+.             nr #RESTORE_INDENT_BOTH 1
+.          \}
+.          nr tbl*center 1
+.          shift
+.       \}
+.       if '\\$1'CENTRE' \{\
+.          if \\n[#INDENT_BOTH_ACTIVE] \{\
+.             IBX
+.             nr #RESTORE_INDENT_BOTH 1
+.          \}
 .          nr tbl*center 1
 .          shift
 .       \}
@@ -18001,6 +19978,10 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          nr tbl*no-shim 1
 .          shift
 .       \}
+.       if '\\$1'NO_FLEX' \{\
+.          nr tbl*no-flex 1
+.          shift
+.       \}
 .       if '\\$1'ADJUST' \{\
 .          ds tbl*space-adj \\$2
 .          shift 2
@@ -18017,36 +19998,48 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       if '\\$1'LABEL' \{\
 .          nr tbl*have-label 1
 .          ds tbl*label \\$2
-.          ds label-type tbl
+.          shift 2
+.       \}
+.       if '\\$1'TARGET' \{\
+.          ds target "\\$2
+.          PDF_TARGET "\\*[target]
 .          shift 2
 .       \}
 .    \}
+.    if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \
+.       ds label-type tbl
+.    if (\\n[tbl*have-caption]=1)&(\\n[tbl*have-header]=0) \
+.       tbl*caption-warning
 .    if \\n[tbl*boxed]=1 \{\
 .       if (\\n[tbl*have-label]=0)&(\\n[tbl*have-caption]=0)&\
 (\\n[tbl*autolabel]=0)&(\\n[tbl*have-source]=0) \
 .       nr tbl*plain-boxed 1
 .    \}
-.    if !\\n[tbl*needs] .nr tbl*needs 1
 .    if !\\n[tbl*have-header] .nr tbl*no-header 1
 .    ds tbl*label-sffx-tmp \\*[tbl*label-sffx]
-.    substring tbl*label-sffx-tmp -1
+.    if !'\\*[tbl*label-sffx-tmp]'' .substring tbl*label-sffx-tmp -1
 .    if '\\*[tbl*label-sffx-tmp]'.' \
 .       if (\\n[tbl*caption-after-label]=0):(\\n[#MLA]=1) .chop tbl*label-sffx
 .    if \\n[tbl*caption-after-label] \{\
 .       if !'\\*[tbl*label-sffx]'' \
 .          if '\\*[tbl*caption]'' .chop tbl*label-sffx
 .    \}
+.    if !'\\*[tbl*caption-short]'' .ds short -short
+.    if \\n[tbl*autolabel] \{\
+.       if \\n[tbl*label-with-chapter] \
+.          ds chapno \\n[#CH_NUM].
+.       ds tbl*label \
+\\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]\"
+.         nr tbl*label-width \w'\\*[tbl*label]'
+.    \}
 .    ie \\n[@TOP] \{\
 .       if !'\\n[.z]'FLOAT*DIV' \{\
-.          vpt 0
-.          rr @TOP
-.          ch RR_@TOP
-.          rs
-.          nop \&
+.          RESTORE_SPACE
+.          nr @TOP 1
 .          if \\n[#COLUMNS] \
 .             if !'\\*[tbl*space-adj]'' \
 .                sp \\*[tbl*space-adj]-1v
-.          nr tbl*boxed 2
+.          if \\n[tbl*boxed] .nr tbl*boxed 2
 .          vpt
 .       \}
 .    \}
@@ -18055,20 +20048,25 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if !\\n[#MLA] \{\
 .      if (\\n[tbl*have-caption]=0):(\\n[tbl*caption-after-label]=1) \{\
 .         ie !'\\n[.z]'FLOAT*DIV' \{\
-.            sp .5v
-.            if \\n[tbl*boxed] .sp .25v
+.            ie !\\n[tbl*boxed]=2 \{\
+.               if \\n[tbl*have-header] .nr tbl*restore-header 1
+.               if !\\n[@TOP] .sp .5v
+.               if \\n[tbl*boxed] .sp .25v
+.               if \\n[tbl*restore-header]=1 .nr tbl*have-header 1
+.            \}
+.            el \{\
+.               if !\\n[tbl*boxed] .ns
+.               sp .25v
+.            \}
 .         \}
-.         el .sp 1n
+.         el .sp .5v
 .      \}
 .    \}
-.    if '\\n[.z]'FLOAT*DIV' \{\
+.    if \\n[nl]=\\n[#PAGE_TOP] .ns
+.    if '\\n[.z]'FLOAT*DIV' \
 .       if \\n[defer]>0 .sp .5v
-.    \}
-.    ds ev-current   \\n[.ev]
-.    nr ll-pre-tbl   \\n[.l]
-.    nr lead-pre-tbl \\n[.v]
-.    nr ind-pre-tbl  \\n[.i]
-.    ll \\n[.l]u-\\n[.i]u
+.    if \\n[@TOP] .rr @TOP
+.    ds ev-current \\n[.ev]
 .    if (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \
 .       nr tbl*caption-lead-diff-adj 1
 .    if \\n[#MLA] \
@@ -18080,10 +20078,20 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .             sp 1n
 .    \}
 .    if \\n[tbl*have-header] \{\
+.       di tbl*header-div
 .       ev table-header
 .       evc \\*[ev-current]
-.       di tbl*header-div
-.       if !\\n[float-span] \!.in 0
+.       if !\\n[float-span] \{\
+.          ie '\\*[ev-current]'FLOAT' \{\
+.             ie !\\n[tbl*center] \
+.                in 0
+.             el \{\
+.                in 0
+\!.              in 0
+.             \}
+.          \}
+.          el \!.in 0
+.       \}
 .    \}
 .END
 \#
@@ -18093,50 +20101,80 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       T#
 .       di
 .       ev
-.       PDF_TARGET tbl:\\n+[lists*target]
+.       if \\n[#PDF_BOOKMARKS] \{\
+.          ie !'\\n[.z]'' \{\
+.             if (\\n[float*img]=0)&(\\n[float*pic]=0)&(\\n[float*eqn]=0) \{\
+\!.              PDF_TARGET tbl:\\\\n+[lists*target]
+.                ie !'\\*[tbl*label]'' \
+\!.                 TO_TABLES "\\*[tbl*label]" "\\*[tbl*caption\\*[short]]"
+.                el \
+\!.                 TO_TABLES "\\*[tbl*caption\\*[short]]"
+.             \}
+.          \}
+.          el \{\
+.             if '\\n[.z]'' .PDF_TARGET tbl:\\n+[lists*target]
+.             ie !'\\*[tbl*label]'' \
+.                TO_TABLES "\\*[tbl*label]" "\\*[tbl*caption\\*[short]]"
+.             el \
+.                TO_TABLES "\\*[tbl*caption\\*[short]]"
+.          \}
+.       \}
+.       if \\n[#MLA] .if !\\n[tbl*have-caption] \
+.          mla@error label caption \\n[.F] \\$0 \\n[.c]
 .       if !'\\n[.z]'FLOAT*DIV' \{\
 .          ie !\\n[tbl*boxed] \{\
 .             nr th*needs (u;\\n[dn]+\\n[tbl*needs]v)
 .             if \\n[th*needs]>\\n[.t] \{\
-.                ne \\n[dn]u+\\n[tbl*needs]
+.                if dPDF.EXPORT \
+.                   if \\n[#FLEX_ACTIVE] \
+.                      if !\\n[#NO_FLEX] \
+.                         tm .ds pre-newpage-\\n% \\n%@\\n[#COL_NUM]
+.                ne \\n[dn]u+\\n[tbl*needs]v
 .                nr tbl@needs 1
 .             \}
 .          \}
 .          el \{\
-.             nr th*needs (u;\\n[dn]+2p+\\n[tbl*needs]v)
+.             nr th*needs (u;\\n[dn]+.3n+\\n[tbl*needs]v)
 .             if \\n[th*needs]>\\n[.t] \{\
-.                ne \\n[dn]u+2p+\\n[tbl*needs]
 .                if \\n[#COLUMNS] \
-.                   if !\\n[#COL_NUM]=\\n[#NUM_COLS] .nr tbl*no-top-hook 1
+.                   if !\\n[#COL_NUM]=\\n[#NUM_COLS] \
+.                      nr tbl*no-top-hook 1
+.                nr tbl*no-print-header 1
+.                if dPDF.EXPORT \
+.                   if \\n[#FLEX_ACTIVE] \
+.                      if !\\n[#NO_FLEX] \
+.                         tm .ds pre-newpage-\\n% \\n%@\\n[#COL_NUM]
+.                ne \\n[dn]u+\\n[tbl*needs]v
 .                nr tbl@needs 1
 .             \}
 .          \}
-.          if \\n[defer] .nr tbl*interrupted 1
 .       \}
 .       ie (\\n[dn]-\\n[.v])>\\n[.t] \{\
 .          if !\\n[@TOP] .@error ridiculously long table header
 .          if \\n[tbl@needs] \{\
 .             if \\n[tbl*boxed] \{\
-.                rs
-.                nop \&
+.                RESTORE_SPACE
 .                sp -1n
 .             \}
 .             rr tbl@needs
 .          \}
 .          if \\n[tbl*have-caption] .TBL*CAPTION
-.          tbl*print-header
 .       \}
 .       el \{\
 .          nr tbl*header-ht \\n[dn]
 .          if \\n[tbl@needs] \{\
 .             if \\n[tbl*boxed] \{\
-.                rs
-.                nop \&
-.                sp -1n
+.                RESTORE_SPACE
+.                if !\\n[#MLA] \{\
+.                   if (\\n[tbl*have-caption]=0):(\\n[tbl*caption-after-label]=1) \
+.                      nop \&
+.                   sp -1n
+.                \}
 .             \}
 .             rr tbl@needs
 .          \}
-.          if \\n[tbl*have-caption] .TBL*CAPTION
+.          if (\\n[tbl*have-caption]=1)&(\\n[tbl*caption-after-label]=0) \
+.             TBL*CAPTION
 .          vs
 .          tbl*print-header
 .       \}
@@ -18168,34 +20206,61 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    nh
 .    nf
 .    rr tbl*no-header
-.    if !'\\n[.z]'FLOAT*DIV' \{\
-.       ie \\n[.t]<(\\n[.v]+(\\n[.v]/2u)) \{\
-.          rm tbl*header-div
-.          nr tbl*no-top-hook 1
-.          nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
-.          tm1 "[mom]: '\\n[.F]', macro \\$0, line \\n[.c]:
-.          tm1 "        Insufficient room for label, caption, and/or source after
-.          tm1 "        table on page \\n[pgnum].  Omitting, but continuing to process.
-.          NEWPAGE
-.          nr tbl*skip-source 1
-.          nr tbl*skip-label 1
-.          ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
-.       \}
-.       el \{\
-.          ch FOOTER 0+\\n[pre-tbl-vfp]u
-.          ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
-.       \}
-.    \}
 .    if !'\\$1'' \{\
 .       if '\\$1'SOURCE' \{\
-.          nr tbl*have-source 1
-.          shift
+.          ie !\\n[#MLA] \{\
+.             tm1 "[mom]: \\$1 argument to \\$0 at line \\n[.c], but MLA style not enabled.
+.             tm1 "       Ignoring \\$1, but continuing to process.
+.          \}
+.          el \{\
+.             nr tbl*have-source 1
+.             shift
+.          \}
+.       \}
+.    \}
+.    if (\\n[#MLA]=1)&(\\n[tbl*have-source]=0) .tbl*source-warning
+.    if !'\\n[.z]'FLOAT*DIV' \{\
+.       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.       ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
+.       if \\n[.t]<(\\n[.v]/2u) \{\
+.          ie (\\n[tbl*have-label]=1):\
+(\\n[tbl*caption-after-label]=1):\
+(\\n[tbl*have-source]=1):\
+(\\n[tbl*autolabel]=1) \{\
+.             rm tbl*header-div
+.             nr tbl*no-top-hook 1
+.             ie \\n[tbl*autolabel] \
+.                if \\n[#MLA] \
+.                   if !\\n[tbl*have-source] .
+.             el \{\
+.                nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
+.                if \\n[#COLUMNS]=1 .ds col-num ", column \\n[#COL_NUM]
+.                tm1 "[mom]: '\\n[.F]', macro \\$0, line \\n[.c]:
+.                tm1 "        Insufficient room for label, caption, and/or source after
+.                tm1 "        table on page \\n[pgnum]\\*[col-num].  Omitting, but continuing to process table.
+.             \}
+.             nr tbl*skip-source 1
+.             nr tbl*skip-label 1
+.             rr tbl*have-caption
+.             ie \\n[#COLUMNS] \
+.                COL_NEXT internal
+.             el .NEWPAGE
+.          \}
+.          el \{\
+.\" Don't print tbl-header at top of next page or column if tbl
+.\" finishes without room for further input at bottom of page
+.             rm tbl*header-div
+.             nr tbl*no-print-header 1
+.             ie \\n[#COLUMNS] \
+.                COL_NEXT internal
+.             el .NEWPAGE
+.          \}
 .       \}
 .    \}
 .    if !\\n[#MLA] \{\
 .       if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1):(\\n[tbl*caption-after-label]=1) \{\
 .          ev label
-.          evc tbl*end
+.          if '\\*[ev-current]'FLOAT' .evc 0
 .          ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
 .          el \{\
 .             tbl*label-style
@@ -18206,67 +20271,74 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .             ds chapno \\n[#CH_NUM].
 .          TBL*SET_LABEL_QUAD \\*[tbl*label-quad]
 .          di tbl*label-div
-\!.        in -\\n[ind-pre-tbl]u
 .          ie \\n[tbl*boxed] .sp \\n[#CAP_HEIGHT]u
 .          el .sp \\n[#DOC_LEAD]u/4u
 .          if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \{\
 .             if !'\\*[tbl*label-space]'' .sp \\*[tbl*label-space]
 .             ie \\n[tbl*autolabel] \{\
 .                ie !\\n[tbl*caption-after-label] .nop \
-\\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]
+\\*[tbl*label-prfx]\\*[chapno]\\n[tbl*label-num]\\*[tbl*label-sffx]
 .                el \{\
-.                   nop \\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]\|
+.                   nop \
+\\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]\|
 .                   tbl*caption-style
 .                   vs \\n[.ps]u+\\n[tbl*caption-autolead]u
+.                   ds tbl*caption-old \\*[tbl*caption]
 .                   ds tbl*caption " \\*[tbl*caption]
 .                   nop \\*[tbl*caption]
+.                   ds tbl*caption \\*[tbl*caption-old]
 .                \}
 .             \}
 .             el \{\
-.                if !'\\*[tbl*label]'' \{\
-.                   ie !\\n[tbl*caption-after-label] .nop \\*[tbl*label]
-.                   el \{\
-.                      nop \\*[tbl*label]\ \|\c
-.                      tbl*caption-style
-.                      vs \\n[.ps]u+\\n[tbl*caption-autolead]u
-.                      ds tbl*caption " \\*[tbl*caption]
-.                      nop \\*[tbl*caption]
-.                   \}
+.                ie !\\n[tbl*caption-after-label] .nop \\*[tbl*label]
+.                el \{\
+.                   nop \\*[tbl*label]\ \|\c
+.                   tbl*caption-style
+.                   vs \\n[.ps]u+\\n[tbl*caption-autolead]u
+.                   ds tbl*caption " \\*[tbl*caption]
+.                   nop \\*[tbl*caption]
 .                \}
 .             \}
-.             if \\n[tbl*autolabel] \
-.                ds tbl*label \\*[chapno]\\n[tbl*label-num]
-.             br
 .          \}
+.          br
 .          di
+.          in 0
 .          ev
 .          nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
 .          ie !'\\n[.z]'FLOAT*DIV' \{\
-.             ie \\n[dn]>\\n[.t] \{\
+.             rr tbl*have-header
+.             rr tbl*have-caption
+.             ie (\\n[dn]-\\n[.v])>\\n[.t] \{\
+.                if \\n[#COLUMNS]=1 .ds col-num ", column \\n[#COL_NUM]
 .                tm1 "[mom]: '\\n[.F]', macro \\$0, line \\n[.c]:
 .                tm1 "        Insufficient room for label, caption, and/or source after
-.                tm1 "        table on page \\n[pgnum].  Omitting, but continuing to process.
+.                tm1 "        table on page \\n[pgnum]\\*[col-num].  Omitting, but continuing to process.
+.                ie \\n[#COLUMNS] \
+.                   COL_NEXT internal
+.                el .NEWPAGE
 .                if d tbl*header-div .rm tbl*header-div
 .                rr tbl*caption-top-lead-diff
-.                rr tbl*have-header
 .                nr tbl*skip-source 1
 .                nr tbl*skip-label 1
-.                NEWPAGE
 .             \}
 .             el .print-label
 .          \}
 .          el .print-label
 .       \}
 .    \}
-.    if !'\\*[tbl*caption-short]'' .ds short -short
-.    ie !'\\*[tbl*label]'' \
-.       TO_TABLES "\\*[tbl*label]" "\\*[tbl*caption\\*[short]]"
-.    el .TO_TABLES "\\*[tbl*caption]\\*[short]]"
+.    if \\n[tbl*autolabel] \{\
+.       ds tbl*label \\*[chapno]\\n[tbl*label-num]
+.       if dLABEL.REFS \
+.          tm .ds \\*[target] \\*[chapno]\\n[tbl*label-num]
+.       rm target
+.    \}
 .    if !\\n[tbl*skip-source] \{\
 .       if \\n[tbl*have-source] \{\
 .          ds tbl*source \\$1
 .          SIZESPECS
 .          ev source
+.          evc \\*[ev-current]
+.          nf
 .          nh
 .          ie \\n[#PRINT_STYLE]=1 \{\
 .             TYPEWRITER
@@ -18278,12 +20350,6 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          \}
 .          di tbl*source-div
 .          TBL*SET_SOURCE_QUAD \\*[tbl*source-quad]
-.          if \\n[#MLA] \{\
-.             if '\\*[tbl*source-quad]'L' \{\
-.                in \\n[ind-pre-tbl]u+\\n[tmp-ind]u
-.                ti -\\n[tmp-ind]u
-.             \}
-.          \}
 .          if (\\n[tbl*have-label]=0)&(\\n[#MLA]=0) \
 .             if !\\n[tbl*autolabel] .sp \\n[#CAP_HEIGHT]u
 .          if \\n[#MLA] \
@@ -18291,7 +20357,6 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          if !'\\*[tbl*source-space]'' .sp \\*[tbl*source-space]
 .          nop \\*[tbl*source]
 .          br
-.          if \\n[#MLA] .in
 .          di
 .          nf
 .          tbl*source-div
@@ -18305,169 +20370,240 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    \}
 .    ev
 .    if !\\n[tbl*plain] \{\
-.       ie \\n[tbl*plain-boxed] .sp 1
-.       el .sp .5v
+.       ie \\n[tbl*plain-boxed] \{\
+.          ie \\n[#MLA] .if !\\n[tbl*have-source] .sp .5v
+.          el .sp .5v
+.       \}
+.       el \{\
+.          if !\\n[tbl*have-source] \{\
+.             if (\\n[tbl*have-label]=0)&\
+(\\n[tbl*caption-after-label]=0)&(\\n[tbl*autolabel]=0) \
+.                sp 1v
+.             if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \
+.                sp .5v
+.          \}
+.          if '\\n[.z]'FLOAT*DIV' .nr chop-space 1
+.       \}
 .    \}
 .    ll \\n[ll-pre-tbl]u
+.    if (\\n[nl]=\\n[dc]):(\\n[nl]=\\n[#PAGE_TOP]) .ns
 .    if !'\\*[tbl*space-adj]'' .sp -\\*[tbl*space-adj]u
-.    if !\\n[tbl*no-shim] .SHIM
+.    if \\n[#MLA] \
+.       sp .5v
+.    ie !\\n[tbl*no-shim] \{\
+.       ie !\\n[#NO_SHIM] \
+.          if !'\\n[.z]'FLOAT*DIV' .SHIM
+.       el \
+.          if !\\n[tbl*no-flex] \
+.             if !\\n[#NO_FLEX] \
+.                if !'\\n[.z]'FLOAT*DIV' .FLEX
+.    \}
+.    el \
+.       if !\\n[tbl*no-flex] \
+.          if !\\n[#NO_FLEX] \
+.             if !'\\n[.z]'FLOAT*DIV' .FLEX
 .    TBL*CLEANUP
 .END
 \#
 \# Utility macros for tbl
 \#
 .MAC TBL*CAPTION END
-.    if \\n[tbl*have-caption] \{\
-.       vs \\n[.ps]u+\\n[tbl*caption-autolead]u
-.       nr tbl*caption-lead-diff \\n[lead-pre-tbl]-\\n[.v]
-.       nr tbl*caption-top-lead-diff \\n[tbl*caption-lead-diff]
-.       ie !\\n[#MLA] \{\
-.          if !\\n[tbl*caption-after-label] \{\
-.             ie !'\\n[.z]'FLOAT*DIV' \{\
+.    ev caption
+.    evc \\*[ev-current]
+.    vs \\n[.ps]u+\\n[tbl*caption-autolead]u
+.    nr caption-lead \\n[.v]
+.    nr tbl*caption-lead-diff \\n[lead-pre-tbl]-\\n[.v]
+.    nr tbl*caption-top-lead-diff \\n[tbl*caption-lead-diff]
+.    ie !\\n[#MLA] \{\
+.       if \\n[tbl*have-caption] \{\
+.          ie !'\\n[.z]'FLOAT*DIV' \{\
+.             if !\\n[tbl*caption-after-label] \{\
 .                ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \{\
+.                   RESTORE_SPACE
 .                   ie \\n[#COLUMNS] .sp |\\n[dc]u
 .                   el .sp |\\n[#T_MARGIN]u-\\n[#DOC_LEAD]u
 .                   sp \\n[tbl*caption-lead-diff]u
-.                \}
-.                el .sp .5v
+.                 \}
+.                 el \{\
+.                    if \\n[.ns] .if !(\\n[nl]=\\n[#PAGE_TOP]) .rs
+.                    sp \\n[#DOC_LEAD]u/2u
+.                 \}
 .             \}
-.             el .sp .5v
 .          \}
-.          ev caption
-.          evc \\*[ev-current]
 .          nh
 .       \}
-.       el \{\
-.          if !\\n[tbl*autolabel] \{\
-.             ie !\\n[tbl*have-label] \
-.                mla@error caption label \\n[.F] \\$0 \\n[.c]
-.             el .ev label
-.          \}
+.    \}
+.    el \{\
+.       if !\\n[tbl*autolabel] \{\
+.          ie !\\n[tbl*have-label] \
+.             mla@error caption label \\n[.F] \\$0 \\n[.c]
+.          el .ev label
 .       \}
-.       ie \\n[#PRINT_STYLE]=1 .nr tmp-ind 2m
-.       el .nr tmp-ind 1.25m
-.       ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.       el \{\
-.          if !\\n[#MLA] \{\
-.             tbl*caption-style
-.             nr lead-current \\n[.v]
-.          \}
+.    \}
+.    ie \\n[#PRINT_STYLE]=1 .nr tmp-ind 2m
+.    el .nr tmp-ind 1.25m
+.    ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.    el \{\
+.       if !\\n[#MLA] \{\
+.          tbl*caption-style
+.          nr lead-current \\n[.v]
 .       \}
-.       ie !\\n[#MLA] \{\
-.          ie !\\n[tbl*caption-after-label] \{\
-.             di tbl*caption-div
-\!.           in -\\n[ind-pre-tbl]u
-.             TBL*SET_CAPTION_QUAD \\*[tbl*caption-quad]
-.             nop \\*[tbl*caption]
-.             br
-.             di
-.             if !'\\n[.z]'FLOAT*DIV' \{\
-.                nr caption-needs 2
-.                if (\\n[dn]+(\\n[#DOC_LEAD]*(\\n[tbl*needs]*2)))>\\n[.t] \{\
-.                   nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] 1
-.                   ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.                      tm1 "[mom]: Table with caption at line \\n[.c] does not fit on page \\n[pgnum].
-.                      tm1 "       Shifting table to page \\n+[pgnum].
-.                      rr tbl*no-header
-.                      NEWPAGE
-.                   \}
-.                   el \{\
-.                      sp \\n[.t]u
-.                      sp |\\n[#PAGE_TOP]u+\\n[tbl*caption-lead-diff]u
-.                   \}
+.    \}
+.    ie !\\n[#MLA] \{\
+.       ie !\\n[tbl*caption-after-label] \{\
+.          di tbl*caption-div
+.          ie \\n[tbl*center] \!.in -\\n[ind-pre-tbl]u
+.          el \!.in 0
+.          TBL*SET_CAPTION_QUAD \\*[tbl*caption-quad]
+.          nop \\*[tbl*caption]
+.          br
+.          di
+.          evc 0
+.          if !'\\n[.z]'FLOAT*DIV' \{\
+.             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u
+.             ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u
+.             nr caption-needs 2
+.             ie \\n[tbl*boxed] .nr tbl*lead \\n[.v]+3n
+.             el .nr tbl*lead \\n[.v]
+.             if \
+(\\n[dn]+(\\n[tbl*lead]*(\\n[tbl*needs]+1)))>=\\n[.t] \{\
+.                nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
+.                if \\n[#COLUMNS]=1 .ds col-num ", column \\n[#COL_NUM]
+.                tm1 \
+"[mom]: Table with caption at line \\n[.c] \
+does not fit on page \\n[pgnum]\\*[col-num].
+.                tm1 \
+"       Shifting table to next page or column.
+.                ie (\\n[#COLUMNS]=1)&(\\n[#COL_NUM]=\\n[#NUM_COLS]) \{\
+.                   rr tbl*no-header
+.                   NEWPAGE
 .                \}
-.             \}
-.             if \\n[.u] .nr fill 1
-.             nf
-.             if \\n[.ns] .RESTORE_SPACE
-.             tbl*caption-div
-.             if \\n[#PRINT_STYLE]=1 .sp .5v
-.             if !'\\*[tbl*caption-space]'' \
-.                sp \\*[tbl*caption-space]
-.             if \\n[tbl*caption-lead-diff-adj] \{\
-.                sp -\\n[tbl*caption-lead-diff]u
-.                rr tbl*label-lead-diff-adj
-.             \}
-.             if \\n[fill] .fi
-.             rr fill
-.          \}
-.          el \{\
-.             if (\\n[tbl*have-label]=0) \{\
-.                if !\\n[tbl*autolabel] \{\
-.                   tm1 "[mom]: CAPTION_AFTER_LABEL enabled, but no label given
-.                   tm1 "       for table at line \\n[.c].
-.                   tm1 "       Skipping caption but continuing to process.
+.                el \{\
+.                   nr tbl*no-top-hook -1
+.                   sp \\n[.t]u
+.                   ie \\n[#COLUMNS] \
+.                      sp |\\n[dc]u+\\n[tbl*caption-lead-diff]u
+.                   el .sp |\\n[#PAGE_TOP]u+\\n[tbl*caption-lead-diff]u
 .                \}
 .             \}
+.             ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.             ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
 .          \}
+.          if \\n[.u] .nr fill 1
+.          nf
+.          if \\n[.ns] .RESTORE_SPACE
+.          tbl*caption-div
+.          if \\n[#PRINT_STYLE]=1 .sp .5v
+.          if !'\\*[tbl*caption-space]'' \
+.             sp \\*[tbl*caption-space]
+.          if \\n[tbl*caption-lead-diff-adj] \{\
+.             sp -\\n[tbl*caption-lead-diff]u
+.             rr tbl*label-lead-diff-adj
+.          \}
+.          if \\n[fill] .fi
+.          rr fill
 .       \}
 .       el \{\
-.          if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \{\
-.             ie !\\n[tbl*have-caption] \
-.                mla@error label caption \\n[.F] \\$0 \\n[.c]
-.             el \{\
-.                ie !'\\n[.z]'FLOAT*DIV' \{\
-.                   ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \{\
-.                      ie !\\n[#COLUMNS] .sp |\\n[#PAGE_TOP]u+\\n[tbl*caption-lead-diff]u
-.                      el .sp |\\n[dc]u+\\n[tbl*caption-lead-diff]u
-.                   \}
-.                   el .sp .5v
-.                \}
-.                el .sp .5v
-.             \}
-.             ev label
-.             evc \\*[ev-current]
-.             nh
-.             ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.             el \{\
-.                tbl*label-style
-.                vs \\n[.ps]u+\\n[tbl*label-autolead]u
-.                nr tbl*label-lead-diff \\n[lead-pre-tbl]-\\n[.v]
-.             \}
-.             if \\n[tbl*label-with-chapter] \
-.                ds chapno \\n[#CH_NUM].
-.             TBL*SET_LABEL_QUAD \\*[tbl*label-quad]
-.             di tbl*mla-label-caption
-.             ie '\\*[tbl*label-quad]'L' \{\
-\!.              in -\\n[ind-pre-tbl]u
-\!.              in \\n[tmp-ind]u
-\!.              ti -\\n[tmp-ind]u
+.          if (\\n[tbl*have-label]=0) \{\
+.             if !\\n[tbl*autolabel] \{\
+.                tm1 "[mom]: CAPTION_AFTER_LABEL enabled, but no label given
+.                tm1 "       for table at line \\n[.c].
+.                tm1 "       Skipping caption but continuing to process.
 .             \}
-.             el \{\
-.                if \\n[tbl*label-quad-on-ll] \{\
-.                   if '\\n[tbl*label-quad]'L' \
-\!.                 in
+.          \}
+.       \}
+.    \}
+.    el \{\
+.       if (\\n[tbl*have-label]=1):(\\n[tbl*autolabel]=1) \{\
+.          ie !\\n[tbl*have-caption] \
+.             mla@error label caption \\n[.F] \\$0 \\n[.c]
+.          el \{\
+.             ie !'\\n[.z]'FLOAT*DIV' \{\
+.                ie (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \{\
+.                   ie !\\n[#COLUMNS] \
+.                      sp |\\n[#PAGE_TOP]u+\\n[tbl*caption-lead-diff]u
+.                   el .sp |\\n[dc]u+\\n[tbl*caption-lead-diff]u
 .                \}
+.                el .sp .5v
 .             \}
-.             ie \\n[tbl*autolabel] \
-.                nop \
-\\*[tbl*label-prfx]\\*[chapno]\\n+[tbl*label-num]\\*[tbl*label-sffx]
-.             el .if !'\\*[tbl*label]'' .nop \\*[tbl*label]
-.             if \\n[tbl*autolabel] \
-.                ds tbl*label \\*[chapno]\\n[tbl*label-num]
-.             br
-.             di
+.             el .sp .5v
 .          \}
-.          da tbl*mla-label-caption
+.          ev label
+.          evc \\*[ev-current]
+.          nh
 .          ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
-.          el .tbl*caption-style
-.          if '\\*[tbl*caption-quad]'L' \{\
-\!.           ti -\\n[tmp-ind]u
-\!.           fi
+.          el \{\
+.             tbl*label-style
+.             vs \\n[.ps]u+\\n[tbl*label-autolead]u
+.             nr tbl*label-lead-diff \\n[lead-pre-tbl]-\\n[.v]
 .          \}
-.          nop \\*[tbl*caption]
+.          if \\n[tbl*label-with-chapter] \
+.             ds chapno \\n[#CH_NUM].
+.          TBL*SET_LABEL_QUAD \\*[tbl*label-quad]
+.          di tbl*mla-label-caption
+\!.        in 0
+.          ie \\n[tbl*autolabel] \{\
+.             ds label \
+\\*[tbl*label-prfx]\\*[chapno]\\n[tbl*label-num]\\*[tbl*label-sffx]\"
+.             nop \\*[label]
+.             nr tbl*label-width \w'\\*[label]'
+.             rr label
+.          \}
+.          el \{\
+.             if !'\\*[tbl*label]'' \{\
+.                nop \\*[tbl*label]
+.                nr tbl*label-width \w'\\*[tbl*label]'
+.             \}
+.          \}
+.          if \\n[tbl*autolabel] \
+.             ds tbl*label \\*[chapno]\\n[tbl*label-num]
 .          br
-\!.        in
-.          da
+.          di
 .       \}
+.       da tbl*mla-label-caption
+.       ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
+.       el .tbl*caption-style
+.       if '\\*[tbl*caption-quad]'L' \{\
+.           EOL
+.           ie \\n[float*tbl] \{\
+.              ie \\n[tbl*center] \
+.                 ll \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[TW]u-\\n[tmp-ind]u
+.              el \
+.                 ll \\n[TW]u+\\n[.i]u-\\n[tmp-ind]u
+\!.            in \\n[tmp-ind]u
+.              ti -\\n[tmp-ind]u
+.           \}
+.           el \{\
+.              ie \\n[tbl*center] \{\
+.                 if '\\*[tbl*label-quad]'L' \{\
+.                    ll \\n[ll-pre-tbl]u-\\n[TW]u/2u+\\n[TW]u
+\!.                  in \\n[tmp-ind]u
+.                 \}
+.              \}
+.              el \
+.                 in \\n[tmp-ind]u+\\n[ind-pre-tbl]u
+.           \}
+.           ti -\\n[tmp-ind]u
+.       \}
+.       nop \\*[tbl*caption]
+.       br
+\!.     in
+.       da
 .       if !'\\n[.z]'FLOAT*DIV' \{\
+.          ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u
+.          ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u
 .          ie \\n[#MLA] .nr caption-needs 3
 .          el .nr caption-needs 2
-.          if (\\n[dn]+(\\n[#DOC_LEAD]*(\\n[tbl*needs]+\\n[caption-needs])))>\\n[.t] \{\
-.             nr pgnum \\n%+\\n[#PAGE_NUM_ADJ] 1
-.             ie \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.                tm1 "[mom]: Table with caption at line \\n[.c] does not fit on page \\n[pgnum].
-.                tm1 "       Shifting table to page \\n+[pgnum].
+.          if \
+(\\n[dn]+(\\n[#DOC_LEAD]*\\n[tbl*needs])+(\\n[caption-needs]*\\n[caption-lead]))>\\n[.t] \{\
+.             nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
+.             if \\n[#COLUMNS] .ds col-num ", column \\n[#COL_NUM]
+.             tm1 \
+"[mom]: Table with caption at line \\n[.c] \
+does not fit on page \\n[pgnum]\\*[col-num].
+.             tm1 \
+"       Shifting table to next column or page.
+.             ie (\\n[#COLUMNS]=1)&(\\n[#COL_NUM]=\\n[#NUM_COLS]) \{\
 .                rr tbl*no-header
 .                if \\n[defer] .nr skip-th-warning 1
 .                NEWPAGE
@@ -18475,15 +20611,22 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .             el \{\
 .                nr tbl*no-top-hook 1
 .                sp \\n[.t]u
-.                if (\\n[tbl*caption-after-label]=1):(\\n[tbl*plain]) \
-.                   sp 1n-2p
+.                if (\\n[tbl*caption-after-label]=1):(\\n[tbl*plain]=1) \
+.                   sp 1n-.3n
 .             \}
 .          \}
+.          ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
+.          ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u
 .       \}
 .       nf
 .       if (\\n[nl]=\\n[#PAGE_TOP]):(\\n[nl]=\\n[dc]) \
 .          nr tbl*label-lead-diff-adj 1
 .       ie (\\n[.t]>1)&(\\n[@TOP]=0) \{\
+.          if !\\n[#NO_FLEX] \{\
+.             NO_FLEX
+.             nr #RESTORE_FLEX 1
+.          \}
+.          if \\n[.ns] .rs
 .          sp \\n[tbl*label-lead-diff]u
 .       \}
 .       el \{\
@@ -18494,69 +20637,98 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .             el .sp .5v
 .       \}
 .       tbl*mla-label-caption
-.       ie \\n[#PRINT_STYLE]=1 .sp .5v
-.       el .sp .5n
-.       if \\n[tbl*label-lead-diff-adj] \{\
-.          sp -\\n[tbl*label-lead-diff]u
-.          rr tbl*label-lead-diff-adj
-.       \}
-.       br
-.       if !'\\*[tbl*caption-space]'' .sp \\*[tbl*caption-space]
 .    \}
-.    if !'\\n[.ev]'0' .ev
+.    ie \\n[#PRINT_STYLE]=1 .sp .5v
+.    el .sp .5n
+.    if \\n[tbl*label-lead-diff-adj] \{\
+.       sp -\\n[tbl*label-lead-diff]u
+.       rr tbl*label-lead-diff-adj
+.    \}
+.    br
+.    if !'\\*[tbl*caption-space]'' .sp \\*[tbl*caption-space]
+\!.  if \\\\n[float*tbl] .ev FLOAT
+.    ev \\*[ev-current]
 .END
 \#
 .MAC TBL*CLEANUP END
 .    if !'\\n[.z]'FLOAT*DIV' \{\
-.       rr tbl*center
 .       rm tbl*header-div
-.       rr tbl*caption-top-lead-diff
-.    \}
-.    rr tbl*have-header
-.    if !'\\n[.z]'FLOAT*DIV' \{\
-.       rr tbl*have-caption
-.       rr tbl*have-label
-.    \}
-.    rr tbl*label-warning
-.    rr tbl*no-shim
-.    rr tbl*skip-source
-.    if !'\\n[.z]'FLOAT*DIV' \{\
 .       rm short
 .       rm tbl*caption
 .       rm tbl*caption-short
 .       rm tbl*label
+.       rr tbl*center
+.       rr tbl*caption-top-lead-diff
+.       rr tbl*have-header
+.       rr tbl*no-print-header
+.       rr tbl*have-caption
+.       rr tbl*have-label
+.       rr tbl*plain-boxed
+.       rr tbl*boxed
 .    \}
+.    rr doing-tbl
 .    rm tbl*space-adj
+.    rr tbl*skip-label
+.    rr tbl*skip-source
+.    rr tbl*label-warning
+.    rr tbl*no-shim
+.    rr tbl*no-flex
+.    rr tbl*plain
+.    rr tbl*caption-top-lead-diff
 .    rnn tbl*have-label tbl@label
 .    rnn tbl*have-source tbl@source
-.    rr tbl*have-label
-.    rr tbl*plain
 .    if '\\*[tbl*label-sffx-tmp]'.' .ds tbl*label-sffx .
+.    if \\n[#RESTORE_INDENT_BOTH] \{\
+.       IB
+.       rr #RESTORE_INDENT_BOTH
+.    \}
+.    if \\n[#RESTORE_INDENT_LEFT] \{\
+.       IL
+.       rr #RESTORE_INDENT_LEFT
+.    \}
+.    if \\n[#RESTORE_FLEX] \{\
+.       NO_FLEX off
+.       rr #RESTORE_FLEX
+.    \}
 .END
 \#
 .MAC print-label END
 .    if \\n[.u] .nr fill 1
 .    nf
-.    if !\\n[tbl*skip-label] \{\
+.    if \\n[tbl*center] \{\
+.       if '\\n[.z]'' \{\
+.          ll \\n[.l]u-\\n[TW]u/2u+\\n[TW]u
+.          if \\n[ind-pre-tbl] \
+.             in \\n[ind-pre-tbl]u-(\\n[ind-pre-tbl]u/2u)
+.       \}
+.    \}
+.    if !\\n[tbl*skip-label] \
 .       tbl*label-div
+.    if \\n[tbl*center] \{\
+.       if '\\n[.z]'' \{\
+.          ll
+.          in 0
+.       \}
 .    \}
 .    if \\n[fill] .fi
 .    rr fill
 .END
 \#
 .MAC tbl@top-hook END
-.    if \\n[tbl*have-header] \{\
-.       nf
-.       rr @TOP
-.       ch RR_@TOP
-.       ev top-hook
-.       evc 0
-.       rs
-.       nop \&
-.       ie !\\n[tbl*boxed] .sp -1
-.       el .sp -1n
-.       tbl*print-header
-.       ev
+.    if (\\n[tbl*have-header:1]=1):(\\n[tbl*have-header]=1) \{\
+.       if !r tbl*no-print-header \{\
+.          nf
+.          rr @TOP
+.          ch RR_@TOP
+.          ev top-hook
+.          evc 0
+.          rs
+.          nop \&
+.          ie !\\n[tbl*boxed] .sp -1
+.          el .sp -1n
+.          tbl*print-header
+.          ev
+.       \}
 .    \}
 .END
 \#
@@ -18566,22 +20738,22 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       nr fill 1
 .    \}
 .    if \\n[#COL_NUM]>1 \
-.       sp 2p
-.    ie d tbl*header-div:\\n[loop-count] \
-.       tbl*header-div:\\n[loop-count]
+.       if !\\n[tbl*have-caption] \
+.          if (\\n[@TOP]=1):(\\n[nl]=\\n[dc]) \
+.             sp .3n
+.    if \\n[tbl*center] \!.in \\n[ind-pre-tbl]u/2u
+.    ie d tbl*header-div:span .tbl*header-div:span
 .    el .tbl*header-div
 .    if '\\n[.z]'FLOAT*DIV' \
 .       if \\n[tbl*center] .ce 1000
 .    mk #T
 .    if !'\\n[.z]'FLOAT*DIV' \{\
-.       nr pre-tbl-vfp 0+\\n[#VARIABLE_FOOTER_POS]
 .       ch FOOTER \\n[#VARIABLE_FOOTER_POS]u+\\n[#DOC_LEAD]u
 .       ch FN_OVERFLOW_TRAP -\\n[#FN_OVERFLOW_TRAP_POS]u+\\n[#DOC_LEAD]u
 .    \}
 .END
 \#
 .MAC tbl@bottom-hook END
-.       if \\n[.ns] .rs
 .       rr #DIVERTED
 .       rr @TOP
 .       ch RR_@TOP
@@ -18590,7 +20762,19 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .MAC tbl*float-warning END
 .    tm1 "[mom]: Table in FLOAT, output page \\n[#PAGENUMBER], exceeds page vertical limits.
 .    tm1 "       Multipage boxed tables cannot be contained within floats.
-.    ab Aborting '\\n[.F]'.
+.    ab   [mom]: Aborting '\\n[.F]', approx. line \\n[.c].
+.END
+\#
+.MAC tbl*caption-warning END
+.    tm1 "[mom]: TS at line \\n[.c] has CAPTION but no H argument.
+.    tm1 "       CAPTION requires H with a corresponding .TH.
+.    ab   [mom]: Aborting '\\n[.F]'.
+.END
+\#
+.MAC tbl*source-warning END
+.    tm1 "[mom]: MLA enabled, but TE at line \\n[.c] has no SOURCE.
+.    tm1 "       MLA style for tables requires that a source be cited.
+.    ab   [mom]: Aborting '\\n[.F]'.
 .END
 \#
 .MAC ds@need END \" Move vertically until there is enough space for \$1
@@ -18625,6 +20809,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       if !\\n[pgnum] .nr pgnum \\n%+\\n[#PAGE_NUM_ADJ]
 .       br
 .       if \\n[.u] .nr fill 1
+.       na
 .       rr float*eqn
 .       if '\\n[.z]'FLOAT*DIV' .nr float*eqn 1
 .       nr eqn*restore-adj \\n[.j]
@@ -18656,13 +20841,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .                ds eqn*space-adj \\$2
 .                shift 2
 .             \}
-.             if '\\$1'NO_SHIM' \{\
-.                nr eqn*no-shim 1
-.                shift 1
-.             \}
 .             if '\\$1'LABEL' \{\
 .                ds eqn*label \\$2
-.                ds label-type eqn
 .                shift 2
 .             \}
 .             if '\\$1'SHIFT_LABEL' \{\
@@ -18677,8 +20857,23 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .                ds eqn*caption-short \\$2
 .                shift 2
 .             \}
+.             if '\\$1'TARGET' \{\
+.                ds target "\\$2
+.                PDF_TARGET "\\*[target]
+.                shift 2
+.             \}
+.             if '\\$1'NO_SHIM' \{\
+.                nr @no-shim 1
+.                shift 1
+.             \}
+.             if '\\$1'NO_FLEX' \{\
+.                nr eqn*no-flex
+.                shift
+.             \}
 .          \}
 .       \}
+.       if (\\n[eqn*have-label]=1):(\\n[eqn*autolabel]=1) \
+.          ds label-type eqn
 .       if '\\*[eqn*shift-label]'' .ds eqn*shift-label 0
 .       if !\\n[eqn*type] \{\
 .          nr eqn*center 1
@@ -18691,6 +20886,35 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .             rr default-left
 .          \}
 .       \}
+.       if !\\n[continued] \{\
+.          if !'\\*[eqn*caption-short]'' .ds short -short
+.          if \\n[eqn*autolabel] \{\
+.             if \\n[eqn*label-with-chapter] \
+.                ds chapno \\n[#CH_NUM].
+.             ds eqn*label \\*[chapno]\\n+[eqn*label-num]
+.             nr eqn*label-width \w'\\*[eqn*label]'
+.             if dLABEL.REFS \
+.                tm .ds \\*[target] \\*[chapno]\\n[eqn*label-num]
+.             rm target
+.             nr eqn*label-num -1
+.          \}
+.          ie !'\\n[.z]'' \{\
+.             if (\\n[float*img]=0)&(\\n[float*pic]=0)&(\\n[float*tbl]=0) \{\
+\!.              PDF_TARGET eqn:\\\\n+[lists*target]
+.                ie !'\\*[eqn*label]'' \
+\!.                 TO_EQUATIONS "\\*[eqn*label]" "\\*[eqn*caption\\*[short]]"
+.                el \
+\!.                 TO_EQUATIONS "\\*[eqn*caption\\*[short]]"
+.             \}
+.          \}
+.          el \{\
+.             PDF_TARGET eqn:\\n+[lists*target]
+.             ie !'\\*[eqn*label]'' \
+.                TO_EQUATIONS "\\*[eqn*label]" "\\*[eqn*caption\\*[short]]"
+.             el \
+.                TO_EQUATIONS "\\*[eqn*caption\\*[short]]"
+.          \}
+.       \}
 .       if \\n[continued] \{\
 .          rm continued
 .          rr continued
@@ -18710,7 +20934,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .END
 \#
 .MAC EN END
-.    if !'\\n(.z'eqn*div' \{\
+.    if !'\\n[.z]'eqn*div' \{\
 .       @error mismatched EN
 .       return
 .    \}
@@ -18733,14 +20957,11 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       el \{\
 .          tm1 "[mom]: Invalid argument \\$1 to \\$0.
 .          tm1 "       Must be 'CONTINUED', 'CONT', or '...'
-.          ab Aborting '\\n[.F]' at line \\n[.c].
+.          ab   [mom]: Aborting '\\n[.F]' at line \\n[.c].
 .       \}
 .    \}
 .    if \\n[dl]:\\n[eqn*have-label] \{\
 .       ds eqn*tabs \\n[.tabs]
-.       if \\n[eqn*label-with-chapter] \
-.          ds chapno \\n[#CH_NUM].
-.       nf
 .       ie \\n[dl] \{\
 .          if !'\\n[.z]'FLOAT*DIV' \{\
 .             ie \\n[eqn*have-caption] .ne \\n[dn]u-\\n[.V]
@@ -18897,17 +21118,23 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       ta \\*[eqn*tabs]
 .\" if continuing (ie is a multi-line equation), don't space and SHIM
 .       if !\\n[continued] \{\
-.          sp \\*[DD]
+.          br
+.          if !\\n[@TOP] \
+.             if !\\n[.t]<(\\*[DD]+1) \
+.                sp \\*[DD]
 .          if !'\\*[eqn*space-adj]'' .sp -\\*[eqn*space-adj]u
-.          if !'\\n[.z]'FLOAT*DIV' \{\
-.             if !\\n[eqn*no-shim] .SHIM
+.          ie !\\n[eqn*no-shim] \{\
+.             ie !\\n[#NO_SHIM] \
+.                if !'\\n[.z]'FLOAT*DIV' .SHIM
+.             el \
+.                if !\\n[eqn*no-flex] \
+.                   if !\\n[#NO_FLEX] \
+.                      if !'\\n[.z]'FLOAT*DIV' .FLEX
 .          \}
-.          if !'\\*[eqn*caption-short]'' .ds short -short
-.          if \\n[eqn*autolabel] \
-.             ds eqn*label \\*[chapno]\\n[eqn*label-num]
-.          ie !'\\*[eqn*label]'' \
-.             TO_EQUATIONS "\\*[eqn*label]" "\\*[eqn*caption\\*[short]]"
-.          el .TO_EQUATIONS "\\*[eqn*caption\\*[short]]"
+.          el \
+.             if !\\n[eqn*no-flex] \
+.                if !\\n[#NO_FLEX] \
+.                   if !'\\n[.z]'FLOAT*DIV' .FLEX
 .          rm DD
 .          rm eqn*caption
 .          rm eqn*caption-short
@@ -18919,6 +21146,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       rr eqn*center
 .       rr eqn@center*cont
 .       rr eqn*have-label
+.       rr eqn*have-caption
 .       rr eqn*ind
 .       rr eqn@ind*cont
 .       rr eqn*left
@@ -18926,25 +21154,25 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       if !\\n[eqn-cutaround] .rm eqn*space-adj
 .    \}
 .    nr eqn*copy-in 1
-.    if \\n[fill] .fi
 .    ad \\n[eqn*restore-adj]
+.    if \\n[fill] .fi
 .    rr fill
 .END
 \#
 .MAC ADD_CAPTION END
 .    ie \\n[.t]<\\n[.v] \{\
 .       if !'\\n[.z]'FLOAT*DIV' \{\
-.          if \\n[#COL_NUM]=\\n[#NUM_COLS] \{\
-.             tm1 "[mom]: '\\n[.F]', macro EQ, line \\n[eqn-linenum]: Insufficient room for
-.             tm1 "        equation caption on page \\n[pgnum].
-.             tm1 "        Skipping caption, but continuing to process.
-.             if !\\n[@TOP] \{\
-.                if \\n[#COL_NUM]=\\n[#NUM_COLS] \
-.                   NEWPAGE
-.             \}
-.             rr eqn-linenum
-.             rr pgnum
+.          if \\n[#COLUMNS]=1 .ds col-num ", column \\n[#COL_NUM]
+.          tm1 "[mom]: '\\n[.F]', macro EQ, line \\n[eqn-linenum]:
+.          tm1 "       Insufficient room for equation caption on page \\n[pgnum]\\*[col-num].
+.          tm1 "       Skipping caption but continuing to process.
+.          if !\\n[@TOP] \{\
+.             ie \\n[#COLUMNS] \
+.                COL_NEXT internal
+.             el .NEWPAGE
 .          \}
+.          rr eqn-linenum
+.          rr pgnum
 .       \}
 .    \}
 .    el \{\
@@ -19048,12 +21276,13 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \# Main macros
 \#
 .MAC PS END
+.    if !\\n[#PP] .nop
 .    br
 .    have-adjust \\$@ \" Adjusting is handled by FLOAT
-.    ds ev-current \\n[.ev]
-.    rr float*pic
 .    if !'\\n[.z]'FLOAT*DIV' .FLOAT ADJUST \\*[pic*space-adj]
 .    PDF_TARGET fig:\\n+[lists*target]
+.    ds ev-current \\n[.ev]
+.    rr float*pic
 .    nr float*pic 1
 .    nr ind-pre-pic  \\n[.i]
 .    nr ll-pre-pic   \\n[.l]
@@ -19070,19 +21299,15 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          el .ds pic*scale-width \\$2
 .       \}
 .    \}
-. \" This is a bit confusing. pic is decorated with 2 args (width
-. \" and height), which are read during pre-processing but have to be
-. \" ignored when parsing args during main processing.  We shift pic's
-. \" args out of the way, then pop them off the arg stack because
-. \" they're not needed during macro processing.
+.\" This is a bit confusing. pic is decorated with 2 args (width
+.\" and height), which are read during pre-processing but have to be
+.\" ignored when parsing args during main processing.  We shift pic's
+.\" args out of the way, then pop them off the arg stack because
+.\" they're not needed during macro processing.
 .    while \B'\\$1' .shift
 .    nr loop-counter \\n[#NUM_ARGS]
 .    nr loop-count 0 1
 .    while \\n+[loop-count]<=\\n[loop-counter] \{\
-.       if '\\$1'NO_SHIM' \{\
-.          nr float*no-shim 1
-.          shift 1
-.       \}
 .       if '\\$1'LEFT' \{\
 .          nr pic*left 1
 .          shift 1
@@ -19099,12 +21324,31 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       if '\\$1'LABEL' \{\
 .          nr pic*have-label 1
 .          ds pic*label \\$2
-.          ds label-type pic
 .          shift 2
 .       \}
+.       if '\\$1'TARGET' \{\
+.          ds target "\\$2
+.          PDF_TARGET "\\*[target]
+.          shift 2
+.       \}
+.       if '\\$1'NO_SHIM' \{\
+.          nr @no-shim 1
+.          shift 1
+.       \}
+.       if '\\$1'NO_FLEX' \{\
+.          nr @no-flex 1
+.          shift 1
+.       \}
+.       if '\\$1'GRAP' \{\
+.          nr grap 1
+.          shift 1
+.       \}
 .    \}
+.    if (\\n[pic*have-label]=1):(\\n[pic*autolabel]=1) \
+.       ds label-type pic
 .    ds pic*label-sffx-tmp \\*[pic*label-sffx]
-.    substring pic*label-sffx-tmp -1
+.    if !'\\*[pic*label-sffx-tmp]'' \
+.       substring pic*label-sffx-tmp -1
 .    if '\\*[pic*label-sffx-tmp]'.' \
 .       if \\n[pic*caption-after-label]=0 .chop pic*label-sffx
 .    if \\n[#MLA] \{\
@@ -19131,7 +21375,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    el .vs \\n[.ps]u
 .    nr pic@text-lead \\n[.v]
 .    nr pic@text-size \\n[.ps]
-.    if !'\\*[pic*text-color]'' .gcolor \\*[pic*text-color]
+.    if !'\\*[pic*text-color]'' .COLOR \\*[pic*text-color]
 .    if \\n[@TOP] \{\
 .       RESTORE_SPACE
 .       nr pic*top-lead-adj 1
@@ -19142,7 +21386,20 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          sp \\n[pic*top-lead-diff]u
 .          rr pic*top-lead-adj
 .       \}
-.       el .if (\\n[pic*caption-after-label]=0):(\\n[#MLA]=0) .sp \\n[lead-pre-pic]u/2u
+.       el .if (\\n[pic*caption-after-label]=0):(\\n[#MLA]=0) \
+.          sp \\n[lead-pre-pic]u/2u
+.    \}
+.    if \\n[pic*label-with-chapter] \
+.       ds chapno \\n[#CH_NUM].
+.    if \\n[pic*autolabel] \
+.       ds pic*label \\*[pic*label-prfx]\\*[chapno]\\n+[fig*label-num]\\*[pic*label-sffx]
+.    nr fig*label-width \w'\\*[pic*label]'
+.    if !'\\*[pic*caption-short]'' .ds short -short
+.    if \\n[#PDF_BOOKMARKS] \{\
+.       ie !'\\*[pic*label]'' \
+\!.        TO_FIGURES "\\*[pic*label]" "\\*[pic*caption\\*[short]]"
+.       el \
+\!.        TO_FIGURES "\\*[pic*caption\\*[short]]"
 .    \}
 .    di pic*div
 .END
@@ -19150,18 +21407,22 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .MAC PE END
 .    di
 .    nr pic*div-width \\n[dl]
-.    if \\n[@TOP] \{\
+.    if \\n[@TOP] \
 .       RESTORE_SPACE
-.    \}
-.    sp \\n[lead-pre-pic]u/2u
+.    if !\\n[nl]=\\n[#PAGE_TOP] .sp \\n[lead-pre-pic]u/2u
 .    if (\\n[pic*have-caption]=1)&(\\n[pic*caption-after-label]=0) \{\
-.       sp .5v
 .       ev caption
 .       evc \\*[ev-current]
 .       nh
 .       ie \\n[#PRINT_STYLE]=1 .TYPEWRITER
 .       el \{\
+.          if \\n[.u] \{\
+.             nr fill 1
+.             nf
+.          \}
 .          pic*caption-style
+.          if \\n[fill] .fi
+.          rr fill
 .          nr lead-current \\n[.v]
 .          vs \\n[.ps]u+\\n[pic*caption-autolead]u
 .          nr pic*caption-lead-diff \\n[lead-current]-\\n[.v]
@@ -19177,11 +21438,13 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       if !'\\*[pic*caption-space]'' \
 .          sp \\*[pic*caption-space]
 .       br
+.       if \\n[grap] \!.sp -2v
 .       ev
 .    \}
-.    if !\\n[pic*left] .in \\n[ll-pre-pic]u-\\n[pic*div-width]u/2u
+.    if !\\n[pic*left] \!.in \\n[ll-pre-pic]u-\\n[pic*div-width]u/2u
+.    if (\\n[grap]=1)&(\\n[pic*caption-after-label]=1) \!.sp -2
 .    pic*div
-.    sp
+.    br
 .    if (\\n[pic*have-label]=1):(\\n[pic*autolabel]=1):(\\n[pic*caption-after-label]=1) \{\
 .       nr lead-pre-label \\n[.v]
 .       ev label
@@ -19194,19 +21457,23 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .          in \\n[ind-pre-pic]u
 .          sp \\n[lead-current]u-\\n[.v]u
 .       \}
-.       if \\n[pic*label-with-chapter] \
-.          ds chapno \\n[#CH_NUM].
 .       PIC*SET_LABEL_QUAD \\*[pic*label-quad]
 \!.     in -\\n[ind-pre-pic]u
 .       sp \\n[lead-pre-label]u-\\n[.v]u
 .       if !'\\*[pic*label-space]'' .sp \\*[pic*label-space]
 .       if \\n[#PRINT_STYLE]=1 .sp .5v
+.       if \\n[#PRINT_STYLE]=2 .sp .25v
 .       ie \\n[pic*autolabel] \
-.         nop \
-\\*[pic*label-prfx]\\*[chapno]\\n+[fig*label-num]\\*[pic*label-sffx]\|
-.       el .if !'\\*[pic*label]'' .nop \\*[pic*label]
-.       if \\n[pic*autolabel] \
-.          ds pic*label \\*[chapno]\\n[fig*label-num]
+.          nop \\*[pic*label-prfx]\\*[chapno]\\n[fig*label-num]\\*[pic*label-sffx]\|
+.       el \
+.          if !'\\*[pic*label]'' .nop \\*[pic*label]
+.       if dLABEL.REFS \{\
+.          if \\n[pic*autolabel] \
+.             tm .ds \\*[target] \\*[chapno]\\n[fig*label-num]
+.          if \\n[pic*have-label] \
+.             tm .ds \\*[target] \\*[pic*label]
+.       \}
+.       rm target
 .       fam
 .       ft
 .       ps
@@ -19224,17 +21491,13 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    sp .5v
 .    FLOAT off
 .    in \\n[ind-pre-pic]u
-.    if !'\\*[pic*caption-short]'' .ds short -short
-.    ie !'\\*[pic*label]'' \
-.       TO_FIGURES "\\*[pic*label]" "\\*[pic*caption\\*[short]]"
-.    el .TO_FIGURES "\\*[pic*caption\\*[short]]"
 .    rm pic*caption
-.    rm pic*label
+.    if !\\n[defer] .rm pic*label
 .    rm pic*left
 .    rm short
 .    if !\\n[cutaround] .rm pic*space-adj
 .    if !\\n[defer] .rr pic*have-caption
-.    rr pic*have-label
+.    rr grap
 .    rr float*pic
 .    if '\\*[pic*label-sffx-tmp]'.' .ds pic*label-sffx .
 .END
@@ -19316,7 +21579,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    tm1 "[mom]: \\$1 has been removed from mom.  See the mom documentation 'refer.html'
 .    tm1 "       for instructions on parenthetical insertions of references into text.
 .    ie '\\$1'REF_STYLE' .tm1 "       Continuing to process '\\n[.F]' from line \\n[.c].
-.    el .ab Aborting '\\n[.F]' at \\$1, line \\n[.c].
+.    el .ab   [mom]: Aborting '\\n[.F]' at \\$1, line \\n[.c].
 .END
 \#
 .MAC REF_BRACKETS_START END
@@ -19363,6 +21626,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    if '\\$1'BIBLIO'   .ds $REF_BIB_INDENT \\$2
 .END
 \#
+.ALIAS REF_INDENT INDENT_REFS
+\#
 \# Hyphenation of references
 \# -------------------------
 \# *Argument:
@@ -19372,9 +21637,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#
 .MAC HYPHENATE_REFS END
 .    ie '\\$1'' .nr #REF_HY 1
-.    el \{\
+.    el \
 .       if r #REF_HY .rr #REF_HY
-.    \}
 .END
 \#
 \# The remainder of the definitions in this section are modified
@@ -19464,7 +21728,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .\}
 .ie d ref*spec!\\n[ref*type] .ref*build \\*[ref*spec!\\n[ref*type]]
 .el \{\
-.   @error unknown reference type `\\n[ref*type]'
+.   @error unknown reference type '\\n[ref*type]'
 .   ref*build \\*[ref*spec!0]
 .\}
 .if !\\n[.hy]=0 \{\
@@ -19577,11 +21841,10 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .de ref*add-A
 .ds eval*[A \\*([A
 .substring eval*[A -1
-.if '\\*[eval*[A]'.' \{\
+.if '\\*[eval*[A]'.' \
 .   if !'\\*[$REF_STYLE]'NOTE' .chop [A
-.\}
 .\" Per MLA, NOTE should not use idem, therefore if %i contains other than
-.\" idem (eg. ed., trans.), transpose it to after author's name
+.\" idem (e.g., ed., trans.), transpose it to after author's name
 .ie '\\*[$REF_STYLE]'NOTE' \{\
 .   ie !'\\*[idem]'' .ref*field A "" "" ", \\*[idem]"
 .   el .ref*field A
@@ -19626,7 +21889,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .\}
 .ref*field m ,
 ..
-\# %p Post-author string (eg. Preface, Foreword, etc)
+\# %p Post-author string (e.g., Preface, Foreword, etc)
 .de ref*add-p
 .\" Convert first letter to uppercase, per MLA, if BIBLIO
 .if '\\*[$REF_STYLE]'BIBLIO' \{\
@@ -19659,9 +21922,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 ..
 \# %T Title of a chapter or article
 .de ref*add-T2
-.ie '\\*[$REF_STYLE]'NOTE' \{\
+.ie '\\*[$REF_STYLE]'NOTE' \
 .   ref*field T , \[lq] "" \[rq]
-.\}
 .el \{\
 .   ie '\\*([A'' \{\
 .      ref*field T . \[lq] "" \[rq]
@@ -19744,7 +22006,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .while !'\\*[eval*[E]',' \{\
 .   ds eval*[E \\*([E
 .   substring eval*[E \\n+[position] \\n[position]
-.   if \\n+[counter]>30 .break \" 30 is abitrary
+.   if \\n+[counter]>30 .break \" 30 is arbitrary
 .\}
 .\" Check for " and"
 .if '\\*[eval*[E]',' \{\
@@ -19821,9 +22083,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 ..
 \# %V Volume (of a journal, or series of books); for journals, %N may be preferable
 .de ref*add-V
-.if \\n[ref*type]=1 \{\
+.if \\n[ref*type]=1 \
 .   ref*field V
-.\}
 .if \\n[ref*type]=2 \{\
 .   ie '\\*[$REF_STYLE]'NOTE' .ref*field V , "vol. "
 .   el \{\
@@ -19843,9 +22104,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 ..
 \# %S Series (books or journals)
 .de ref*add-S
-.if \\n[ref*type]=1 \{\
+.if \\n[ref*type]=1 \
 .   ref*field S
-.\}
 .if \\n[ref*type]=2 \{\
 .   ie '\\*[$REF_STYLE]'NOTE' \{\
 .      ie \\n([T .ref*field S
@@ -19875,9 +22135,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .      ref*field C
 .      rr [d
 .   \}
-.   el \{\
+.   el \
 .      ref*field C "" \*[FU 2](
-.   \}
 .   if \\n([T .nr ref*suppress-period \\n([T
 .\}
 .el \{\
@@ -19911,9 +22170,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .   ie '\\*[$REF_STYLE]'NOTE' .ref*field D ,
 .   el .ref*field D . " "
 .\}
-.if \\n[ref*type]=1 \{\
+.if \\n[ref*type]=1 \
 .   ref*field D "" "(" ")"
-.\}
 .if \\n[ref*type]=2 \{\
 .   ie '\\*[$REF_STYLE]'NOTE' .ref*field D , "" )
 .   el .ref*field D ,
@@ -19929,9 +22187,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .         substring eval*[D 0 -4
 .         ie '\\*[eval*[D]'1' .ds kern \*[BU3]
 .         el .ds kern \*[BU2]
-.         ie \\n[#PRINT_STYLE]=2 \{\
+.         ie \\n[#PRINT_STYLE]=2 \
 .           if '\\*[$REF_STYLE]'NOTE' .ref*field D "" (\\*[kern] )
-.         \}
 .         el .ref*field D
 .      \}
 .      rm eval*[D
@@ -19965,7 +22222,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .ie '\\*[$REF_STYLE]'NOTE' ref*field G ,
 .el .ref*field G . " "
 ..
-\# %O Other (info that goes after %T [or %B] but is hard to categorize; eg a dissertation)
+\# %O Other (info that goes after %T [or %B] but is hard to categorize; e.g., a dissertation)
 .de ref*add-O
 .ds eval*[O \\*([O
 .substring eval*[O -1
@@ -19974,9 +22231,8 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .substring initial*cap 0 0
 .ds [O*string \\*([O
 .substring [O*string 1
-.if '\\*[$REF_STYLE]'BIBLIO' \{\
+.if '\\*[$REF_STYLE]'BIBLIO' \
 .   ds [O \E*[UC]\\*[initial*cap]\E*[LC]\\*[[O*string]
-.\}
 .ie '\\*[$REF_STYLE]'NOTE' .ref*field O ,
 .el \{\
 .   if \\n([O=1 .chop [O
@@ -20011,7 +22267,7 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#
 \# Book reprints
 \# -------------
-\# %d date of publication (the orignal date of publication)
+\# %d date of publication (the original date of publication)
 .de ref*add-d
 .ie '\\*[$REF_STYLE]'NOTE' \{\
 .   ref*field d "" ( ;
@@ -20158,13 +22414,12 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .       tm1 "[mom]: 1.x-style \\$0 detected, but you are using v2.x.
 .       tm1 "       v2.x requires flags before arguments to \\$0.
 .       tm1 "       Please read docelement.html#mn-init and update your file.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .    \}
 .    nr #ARGS  0 1
 .    nr #COUNT 9
-.    while \\n+[#ARGS]<=\\n[#COUNT] \{\
+.    while \\n+[#ARGS]<=\\n[#COUNT] \
 .      ds $MN-arg\\n[#ARGS] @
-.    \}
 .    nr #FLAG 0 1
 .    nr #COUNT \\n[#NUM_ARGS]
 .    while \\n+[#FLAG]<=\\n[#COUNT] \{\
@@ -20251,9 +22506,9 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#        color hyphenation-flags
 \#
 \# Initialize margin notes.  Empty arguments (denoted with "") set
-\# default values.  If the first argument is the string `ragged',
+\# default values.  If the first argument is the string 'ragged',
 \# left and right margin notes are printed ragged-right.  If it is
-\# `symmetric', left margin notes are printed ragged-left and right
+\# 'symmetric', left margin notes are printed ragged-left and right
 \# margin notes ragged-right.  If omitted, margin notes are left
 \# and right adjusted.
 \#
@@ -20292,18 +22547,16 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    nr MN-right-width (n;\\$2)
 .    nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
 .    if \\n[#COLUMNS]=1 \{\
-.      if !\\n[#NUM_COLS]=1 \{\
+.      if !\\n[#NUM_COLS]=1 \
 .        nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
-.      \}
 .    \}
 .  \}
 .  el \{\
 .    nr MN-right-width \\n[MN-left-width]
 .    nr MN-right-start (\\n[.o] + \\n[.l] + \\n[MN-sep])
 .    if \\n[#COLUMNS]=1 \{\
-.      if !\\n[#NUM_COLS]=1 \{\
+.      if !\\n[#NUM_COLS]=1 \
 .        nr MN-right-start (\\n[#COL_2_L_MARGIN] + \\n[#COL_L_LENGTH] + \\n[MN-sep])
-.      \}
 .    \}
 .  \}
 .  ie \A'\\$4' \{\
@@ -20371,18 +22624,18 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 \#   MN
 \#
 \# With a parameter, start a margin note, otherwise end a margin note.
-\# If the parameter is the string `left', define a left margin note,
+\# If the parameter is the string 'left', define a left margin note,
 \# otherwise define a right margin note.
 \#
 .de MN
-.ds MN-dir \\$1
-.if !'\\$1'LEFT' \{\
-.  if !'\\$1'RIGHT' \{\
-.    MN_QUIT
-.    return
-.  \}
-.\}
-.if \\n[#COLUMNS]=1 \{\
+. ds MN-dir \\$1
+. if !'\\$1'LEFT' \{\
+.   if !'\\$1'RIGHT' \{\
+.     MN_QUIT
+.     return
+.   \}
+. \}
+. if \\n[#COLUMNS]=1 \{\
 .  if \\n[#NUM_COLS]>2 \{\
 .    tm [mom]: Macro MN: More than two columns.  Ignoring margin notes.
 .    return
@@ -20391,10 +22644,10 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .    ie \\n[#COL_NUM]=1 .ds MN-dir LEFT
 .    el .ds MN-dir RIGHT
 .  \}
-.\}
+. \}
 .  if !\\n[#MNinit]=1 \{\
-.    tm [mom]: Macro MN: You must set parameters with MN_INIT before using MN.
-.    ab Aborting '\\n[.F]' at MN, line \\n[.c].
+.    tm1 "[mom]: Macro MN: You must set parameters with MN_INIT before using MN.
+.    ab   [mom]: Aborting '\\n[.F]' at MN, line \\n[.c].
 .  \}
 .  ie !'\\$1'' \{\
 .    if \\n[MN-active] \{\
@@ -20444,120 +22697,85 @@ E\\R'#CAP_HEIGHT \\n[.cht]'
 .  ch FOOTER \\n[#VARIABLE_FOOTER_POS]u
 ..
 \#
-\# MNbottom-left
-\# -------------
-\# The "left" half of Werner's original MNbottom.
-\#
-.de MNbottom-left
-.  nr MN-curr 0
-.  nr MN-last-pos 0
-.  nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing]
-.  vpt 0
-.  mk MN-curr-pos
-.  if \\n[MN-active] \{\
-.    di
-.    tm [mom]: Macro MN: Margin note finished by new page.  Ignored.
-.  \}
-.  po \\n[MN-left-start]u
-.  ev MNbottom-left-env
-.  nr #P \\n%+\\n[#PAGE_NUM_ADJ]
-.  while (\\n[MN-curr] < \\n[MN-left]) \{\
-.    nr MN-curr +1
-.    ie (\\n[MN-last-pos] < \\n[MN-mk-l-\\n[MN-curr]]) \
-.      sp |\\n[MN-mk-l-\\n[MN-curr]]u+\\n[MN-lead-adj]u
-.    el \{\
-.      nr MN-shifted 1
-.      sp 1v
-.      SHIM
-.      if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u)
-.      tm \
-[mom]: Macro MN: Warning: Left margin note #\\n[MN-curr] on page \\n[#P] shifted down.
-.    \}
-.\" If last margin note doesn't fit
-.    if ( (\\n[nl]+\\n[MN-div-l-\\n[MN-curr]-depth]) > (\\n[.p]+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\
-.      if \\n[MN-shifted]=1 \{\
-.        sp -(1v+\\n[#SHIM]u)
-.        rm MN-div-l-\\n[MN-curr]
-.        tm1 "[mom]: No room to start left margin note #\\n[MN-curr] on page \\n[#P].
-.        tm1 "       Ignoring margin note.
-.        rr MN-shifted
-.      \}
-.      nr #no-repeat-MN-left 1
-.      nr #OVERFLOW_LEFT 1
-.      ie \\n[#FN_COUNT]=0 \{\
-.        ch FOOTER \\n[.p]u
-.        wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP
-.      \}
-.      el \
-.        wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP
-.      vpt 1
-.    \}
-.    nf
-.    MN-div-l-\\n[MN-curr]
-.    fi
-.    br
-.    nr MN-last-pos \\n[nl]
-.  \}
-.  ev
-.  po
-.  if !\\n[#no-repeat-MN-left]=1 \
-.     if \\n[MN-right]=0 .vpt 1
-..
-\#
-\# MNbottom-right
-\# --------------
-\# The "right" half of Werner's original MNbottom.
+\# MNbottom
+\# --------
+\# Executed in FOOTER.
 \#
-.de MNbottom-right
+.de MNbottom
+.   if '\\$0'MNbottom-left' \{\
+.      ds MN-pos left
+.      ds l-r l
+.      ds Left-Right Left
+.   \}
+.   if '\\$0'MNbottom-right' \{\
+.      ds MN-pos right
+.      ds l-r r
+.      ds Left-Right Right
+.   \}
 .   nr MN-curr 0
 .   nr MN-last-pos 0
 .   nr MN-lead-adj \\n[#DOC_LEAD]-\\n[MN-spacing]
 .   vpt 0
-.   po \\n[MN-right-start]u
-.   ev MNbottom-right-env
+.   if \\n[MN-active] \{\
+.     di
+.     tm [mom]: Macro MN: Margin note finished by new page.  Ignored.
+.   \}
+.   if \\n[#RECTO_VERSO] \{\
+.      if e \{\
+.         if '\\*[MN-pos]'right' \
+.            nr MN-\\*[MN-pos]-start (\\n[.o]+\\n[.l]+\\n[MN-sep])
+.         if '\\*[MN-pos]'left' \
+.            nr MN-\\*[MN-pos]-start (\\n[.o]-\\n[MN-sep]-\\n[MN-left-width])
+.      \}
+.   \}
+.   po \\n[MN-\\*[MN-pos]-start]u
+.   ev MNbottom-\\*[MN-pos]-env
 .   nr #P \\n%+\\n[#PAGE_NUM_ADJ]
-.   while (\\n[MN-curr] < \\n[MN-right]) \{\
+.   while (\\n[MN-curr] < \\n[MN-\\*[MN-pos]]) \{\
 .      nr MN-curr +1
-.      ie (\\n[MN-last-pos] < \\n[MN-mk-r-\\n[MN-curr]]) \
-.         sp |\\n[MN-mk-r-\\n[MN-curr]]u+\\n[MN-lead-adj]u
+.      ie (\\n[MN-last-pos] < \\n[MN-mk-\\*[l-r]-\\n[MN-curr]]) \
+.         sp |\\n[MN-mk-\\*[l-r]-\\n[MN-curr]]u+\\n[MN-lead-adj]u
 .      el \{\
 .         nr MN-shifted 1
 .         sp 1v
 .         SHIM
 .         if \\n[#SHIM]>\\n[MN-spacing] .sp -(1v+\\n[MN-lead-adj]u)
-.         tm [mom]: \
-Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
+.         tm [mom]: Macro MN: Warning: \\*[Left-Right] margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .      \}
 .\" If last margin note doesn't fit
-.      if ( (\\n[nl]+\\n[MN-div-r-\\n[MN-curr]-depth]) > (\\n[.p]+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\
+.      if ( (\\n[nl]+\\n[MN-div-\\*[l-r]-\\n[MN-curr]-depth]) > (\\n[.p]+\\n[#VARIABLE_FOOTER_POS]-1) ) \{\
 .         if \\n[MN-shifted]=1 \{\
 .            sp -(1v+\\n[#SHIM]u)
-.            rm MN-div-r-\\n[MN-curr]
-.            tm1 \
-[mom]: No room to start right margin note #\\n[MN-curr] on page \\n[#P] on page \\n[#P].
-.            tm1 "       Ignoring margin note.
+.            rm MN-div-\\*[l-r]-\\n[MN-curr]
+.            tm1 "[mom]: \
+No room to start \\*[MN-pos] margin note #\\n[MN-curr] on page \\n[#P].
+.            tm1 "      Ignoring margin note.
 .            rr MN-shifted
 .         \}
-.         nr #no-repeat-MN-right 1
-.         nr #OVERFLOW_RIGHT 1
+.         nr #no-repeat-MN-\\*[MN-pos] 1
+.         if '\\*[MN-pos]'left'  .nr #OVERFLOW_LEFT 1
+.         if '\\*[MN-pos]'right' .nr #OVERFLOW_RIGHT 1
 .         ie \\n[#FN_COUNT]=0 \{\
 .            ch FOOTER \\n[.p]u
 .            wh \\n[#VARIABLE_FOOTER_POS]u+\\n[MN-lead-adj]u+1u MN_OVERFLOW_TRAP
 .         \}
 .         el \
 .            wh \\n[.p]u+\\n[#VARIABLE_FOOTER_POS]u-1u MN_OVERFLOW_TRAP
-.         vpt 1
+.         vpt
 .      \}
 .      nf
-.      MN-div-r-\\n[MN-curr]
+.      MN-div-\\*[l-r]-\\n[MN-curr]
 .      fi
 .      br
 .      nr MN-last-pos \\n[nl]
 .   \}
 .   ev
 .   po
-.   if !\\n[#no-repeat-MN-right]=1 .vpt 1
+.   if !\\n[#no-repeat-MN-\\*[MN-pos]]=1 .vpt
 ..
+.
+.ALIAS MNbottom-right MNbottom
+.ALIAS MNbottom-left  MNbottom
 \#
 \# PDF SUPPORT
 \# ===========
@@ -20629,11 +22847,12 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .          \}
 .       \}
 .    \}
-.    if !\\n[PDFHREF_COLOR_SET]=1 \{\
+.    if !\\n[PDFHREF_COLOR_SET]=1 \
 .       nr PDFHREF_COLOR_SET 1
-.    \}
 .END
 \#
+.ALIAS PDF_LINK_COLOUR PDF_LINK_COLOR
+\#
 \# AUTO_RELOCATE_TOC
 \# -----------------
 \#
@@ -20649,6 +22868,8 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .    if '\\$1'AFTER_COVER'     .nr TOC.RELOCATE 6
 .END
 \#
+.ALIAS AUTO_TOC_RELOCATE AUTO_RELOCATE_TOC
+\#
 \# PDF_BOOKMARK
 \# ------------
 \# *Argument:
@@ -20687,7 +22908,6 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .       \}
 .       ds PDF_TX \\$*
 .       pdfmomclean PDF_TX
-.\" .   ev protect
 .       nr PDF_LEV (\\n[LEVEL_REQ]*\\n[#PDF_BOOKMARKS_OPEN])
 .       ie '\\*[.T]'ps' \{\
 .           if !'\\*[PDF_NM]'' \{\
@@ -20697,7 +22917,6 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .           pdfbookmark \\n[PDF_LEV] \\*[PDF_TX]
 .       \}
 .       el .pdfbookmark \\*[PDF_NM] \\n[PDF_LEV] \\$*
-.\" .   ev
 .       nr CURRENT_LEVEL \\n[LEVEL_REQ]
 .       rr LEVEL_REQ
 .       rr PDF_LEV
@@ -20852,7 +23071,8 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .MAC PDF_TARGET END
 .    ds ARG_1 \\$1
 .    shift
-.    pdfhref M -N \\*[ARG_1] -- \\$*
+.    ie '\\$*'' .pdfhref M -N \\*[ARG_1] -- \\$*
+.    el .pdfhref M -N \\*[ARG_1] -E -- \\$*
 .    if '\\*[.T]'ps' .if !dpdf:href.map .tm gropdf-info:href \\*[ARG_1] \\$*
 .END
 \#
@@ -20861,7 +23081,8 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 \# *Arguments:
 \#   [ -L -| -R | -C | -I <indent> ] \
 \#     <image file> <width> <height> \
-\#     [ SCALE <factor> ] [ ADJUST +|-<vertical shift> ]
+\#     [ SCALE <factor> ] [ ADJUST +|-<vertical shift> ] [ TARGET <pdf target> ] \
+\#     [ NO_SHIM ] [ NO_FLEX ]
 \# *Function:
 \#   Allows embedding of PDF images with the same arguments as PSPIC
 \#   plus SCALE and ADJUST options.
@@ -20869,8 +23090,11 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 \#   <image file> <width> <height> are required.
 \#
 .MAC PDF_IMAGE END
-.    rr float*img
-.    if !'\\n[.z]'FLOAT*DIV' .FLOAT
+.    if !'\\n[.z]'FLOAT*DIV' \{\
+.       nr pdf-img:float 1
+.       FLOAT
+.       PDF_TARGET fig:\\n+[lists*target]
+.    \}
 .    nr float*img 1
 .    ds ev-current \\n[.ev]
 .    ev IMG
@@ -20895,7 +23119,7 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .    substring pdf-img@file -1 -3
 .    if !'\\*[pdf-img@file]'pdf' \{\
 .       tm1 "[mom]: Image file '\\*[pdf-img:file]' at line \\n[.c] not found, or not a PDF image.
-.       ab Aborting '\\n[.F]' at \\$0, line \\n[.c].
+.       ab   [mom]: Aborting '\\n[.F]' at \\$0, line \\n[.c].
 .    \}
 .    nr pdf-img:width \\$2
 .    nr pdf-img:depth \\$3
@@ -20935,19 +23159,50 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .          ds label-type pdf-img
 .          shift 2
 .       \}
+.       if '\\$1'TARGET' \{\
+.          ds target "\\$2
+.          PDF_TARGET "\\*[target]
+.          shift 2
+.       \}
 .       if '\\$1'NO_SHIM' \{\
-.          nr float*no-shim 1
+.          if !'\\n[.z]'FLOAT*DIV' .nr pdf-img*no-shim 1
+.          nr @no-shim 1
+.          shift 1
+.       \}
+.       if '\\$1'NO_FLEX' \{\
+.          nr pdf-img*no-flex 1
+.          nr @no-flex 1
+.          shift 1
 .       \}
 .    \}
-.    ds pdf-img*label-sffx-tmp \\*[pdf-img*label-sffx]
-.    substring pdf-img*label-sffx-tmp -1
-.    if '\\*[pdf-img*label-sffx-tmp]'.' \
-.       if \\n[pdf-img*caption-after-label]=0 .chop pdf-img*label-sffx
-.    PDF_TARGET fig:\\n+[lists*target]
+.    if (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1) \
+.       ds label-type pdf-img
+.    if !'\\*[pdf-img*label-sffx]'' \{\
+.       ds pdf-img*label-sffx-tmp \\*[pdf-img*label-sffx]
+.       substring pdf-img*label-sffx-tmp -1
+.       if '\\*[pdf-img*label-sffx-tmp]'.' \
+.          if \\n[pdf-img*caption-after-label]=0 .chop pdf-img*label-sffx
+.    \}
 .    if '\\*[pdf-img:pos]'-C' \
 .       nr pdf-img:ind (\\n[.ll]-\\n[ind-pre-img]-\\n[pdf-img:width])/2
-.    if '\\*[pdf-img:pos]'-R' \{\
+.    if '\\*[pdf-img:pos]'-R' \
 .       nr pdf-img:ind \\n[.ll]-\\n[pdf-img:width]-\\n[ind-pre-img]
+.    if \\n[pdf-img*label-with-chapter] \
+.       ds chapno \\n[#CH_NUM].
+.    if \\n[pdf-img*autolabel] \{\
+.       ds pdf-img*label \\*[pdf-img*label-prfx]\\*[chapno]\\n+[fig*label-num]\\*[pdf-img*label-sffx]
+.       nr fig*label-width \w'\\*[pdf-img*label]'
+.       nr fig*label-num -1
+.    \}
+.    if !'\\*[pdf-img*caption-short]'' .ds short -short
+.    if \\n[#PDF_BOOKMARKS] \{\
+.       ie (\\n[pdf-img*have-label]=1):(\\n[pdf-img*autolabel]=1) \{\
+\!.        TO_FIGURES "\\*[pdf-img*label]" "\\*[pdf-img*caption\\*[short]]"
+.       \}
+.       el \{\
+\!.        if !'\\*[pdf-img*caption\\*[short]]'' \
+\!.           TO_FIGURES "\\*[pdf-img*caption\\*[short]]"
+.       \}
 .    \}
 .    di PDF*IMAGE
 .    if \\n[@TOP] \{\
@@ -20974,6 +23229,7 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .             vs \\n[.ps]u+\\n[pdf-img*caption-autolead]u
 .          \}
 .          PDF_IMG*SET_CAPTION_QUAD \\*[pdf-img*caption-quad]
+.          nr pdf-img*caption-top-lead-diff \\n[lead-pre-caption]-\\n[.v]
 .          sp \\n[lead-pre-caption]u-\\n[.v]u
 .          nop \\*[pdf-img*caption]
 .          br
@@ -21037,23 +23293,28 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .       PDF_IMG*SET_LABEL_QUAD \\*[pdf-img*label-quad]
 .       sp \\n[lead-pre-label]u-\\n[.v]u
 .       if !'\\*[pdf-img*label-space]'' .sp \\*[pdf-img*label-space]
-.       ie \\n[pdf-img*autolabel] \
+.       ie \\n[pdf-img*autolabel] \{\
 .          nop \
 \\*[pdf-img*label-prfx]\\*[chapno]\\n+[fig*label-num]\\*[pdf-img*label-sffx]\|
-.       el .if !'\\*[pdf-img*label]'' .nop \\*[pdf-img*label]
-.       if \\n[pdf-img*autolabel] \
 .          ds pdf-img*label \\*[chapno]\\n[fig*label-num]
+.          if dLABEL.REFS \
+.             tm .ds \\*[target] \\*[chapno]\\n[fig*label-num]
+.          rm target
+.       \}
+.       el .if !'\\*[pdf-img*label]'' .nop \\*[pdf-img*label]
 .       fam
 .       ft
 .       ps
 .       gcolor
 .       if !'\\*[pdf-img*caption]'' \{\
 .          if \\n[pdf-img*caption-after-label] \{\
+.             ds pdf-img*caption-old \\*[pdf-img*caption]
 .             ds pdf-img*caption " \\*[pdf-img*caption]
 .             nop \\*[pdf-img*caption-specs]\\*[pdf-img*caption]\\*[revert-specs]
+.             ds pdf-img*caption \\*[pdf-img*caption-old]
 .          \}
 .       \}
-.       sp .5v
+.       br
 .       ev
 .       in 0
 .    \}
@@ -21072,12 +23333,17 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .       if !\\n[@TOP] \!.sp -\\*[pdf-img:adj]
 .    vpt
 .    ev
-.    FLOAT off
-.    nr dl \\n[pdf-img:width]
-.    if !'\\*[pdf-img*caption-short]'' .ds short -short
-.    ie !'\\*[pdf-img*label]'' \
-.       TO_FIGURES "\\*[pdf-img*label]" "\\*[pdf-img*caption\\*[short]]"
-.    el .TO_FIGURES "\\*[pdf-img*caption\\*[short]]"
+.    if \\n[pdf-img:float] \{\
+.       FLOAT off
+.       nr dl \\n[pdf-img:width]
+.    \}
+.    if !\\n[pdf-img:float] \{\
+.       ie !\\n[#NO_SHIM] \
+.          if !\\n[pdf-img*no-shim] .SHIM
+.       el \
+.          if !\\n[#NO_FLEX] \
+.             if !\\n[pdf-img*no-flex] .FLEX
+.    \}
 .    PDF_IMAGE_CLEAN 
 .END
 \#
@@ -21092,7 +23358,7 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 \#   must be entered as "".
 \#
 .MAC PDF_IMAGE_FRAME END
-.    if !'\\$1''\{\
+.    ie !'\\$1''\{\
 .       ds frame-arg \\$1
 .       substring frame-arg -1
 .       ie \B'\\*[frame-arg]' \{\
@@ -21100,10 +23366,13 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .          tm1 "       of '\\n[.F]' requires a unit of measure.
 .          tm1 "       Default 6 point inset will be used instead.
 .       \}
-.       el .nr pdf-img:frame-inset \\$1
+.       el \{\
+.          nr pdf-img:frame-inset \\$1
+.          shift
+.       \}
 .    \}
-.    shift
-.    if !'\\$1'' \{\
+.    el .shift
+.    ie !'\\$1'' \{\
 .       ds frame-arg \\$1
 .       substring frame-arg -1
 .       ie \B'\\*[frame-arg]' \{\
@@ -21122,6 +23391,7 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .          \}
 .       \}
 .    \}
+.    el .shift
 .    if !'\\$1'' \{\
 .       ie m \\$1 .ds pdf-img:frame-color \\$1
 .       el \{\
@@ -21137,18 +23407,18 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .    rm pdf-img:adj
 .    rm pdf-img*caption
 .    rm pdf-img*caption-short
-.    rm pdf-img*caption-space
 .    rm pdf-img:file
 .    rm pdf-img*label
-.    rm pdf-img*label-space
 .    rm pdf-img:pos
 .    rm short
 .    rr ind-pre-img
 .    rr pdf-img:depth
 .    rr pdf-img:float
-.    rr pdf-img:frame
+.    if !\\n[pdf-img:frame] \
+.       rr pdf-img:frame
 .    rr pdf-img:ind
 .    rr pdf-img:no-shim
+.    rr pdf-img:no-flex
 .    rr pdf-img:scale
 .\" Cutarounds not yet implemented
 .    if !\\n[defer] \
@@ -21180,4 +23450,28 @@ Macro MN: Warning: Right margin note #\\n[MN-curr] on page \\n[#P] shifted down.
 .    \}
 .    el .nop \!.pdfmomclean \\$@
 ..
-\# vim: ft=groff: encoding=latin1: fileencoding=latin1: nomodified:
+\#
+.MAC PAUSE END
+.    vpt 0
+.    br
+.    vpt
+.    ie !'\\n[.z]'' \{\
+\!.     pdfpause
+\!.     pdftransition BLOCK \\$1
+.    \}
+.    el \{\
+.       pdfpause
+.       pdftransition BLOCK \\$1
+.    \}
+.END
+\#
+.MAC TRANSITION END
+.    ie !'\\n[.z]'' \
+\!.     pdftransition PAGE \\$1
+.    el .pdftransition PAGE \\$1
+.END
+\#
+\# Local Variables:
+\# mode: nroff
+\# End:
+\# vim: filetype=groff:
index f49120f6775b4c57fc036d888131d56e9609a9bc..145b62172ed2eb1874604594606906bf555e160f 100644 (file)
@@ -1,3 +1,25 @@
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * pdfmark.am (pdfmark.pdf): Use $(GROFF_V).
+
+2018-02-28  Werner LEMBERG  <wl@gnu.org>
+
+       * pdfmark.am (pdfroff): Use $(AM_V_GEN) to silence file generation.
+
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * pdfroff.1.man: Rename `pdfroff.man'.
+
+       * pdfmark.am: Add `Last update'.  Setup Emacs mode.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * pdfmark.am: Add `Last update'.  Setup Emacs mode.
+
+2015-04-03  Werner LEMBERG  <wl@gnu.org>
+
+       * pdfroff.man: Make it work in compatibility mode.
+
 2014-10-14  Keith Marshall  <keith.d.marshall@ntlworld.com>
 
        Deduce "--no-toc-relocation" from input stream (revisited).
 
 ________________________________________________________________________
 
-Copyright (C) 2004-201 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -422,4 +444,5 @@ notice and this notice are preserved.
 Local Variables:
 version-control: never
 coding: latin-1
+mode: change-log
 End:
diff --git a/contrib/pdfmark/Makefile.sub b/contrib/pdfmark/Makefile.sub
deleted file mode 100644 (file)
index 01c6d8b..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-# Copyright (C) 2005-2014  Free Software Foundation, Inc.
-#      Written by Keith Marshall (keith.d.marshall@ntlworld.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-
-MAN1=\
-  pdfroff.n
-
-CMDFILES=\
-  pdfroff
-
-TMACFILES=\
-  pdfmark.tmac \
-  spdf.tmac
-
-PDFDOCFILES=\
-  pdfmark.pdf
-
-MOSTLYCLEANDIRADD=\
-  pdfroff-*
-
-MOSTLYCLEANADD=\
-  gnu.eps \
-  $(PDFDOCFILES) \
-  $(CMDFILES) \
-  pdf[0-9]*
-
-GROFF_BIN_DIR=$(top_builddir)/src/roff/groff
-GROFF_OTHER_BIN_DIRS=\
-  $(top_builddir)/src/roff/troff \
-  $(top_builddir)/src/devices/grops
-GROFF_BIN_DIRS=$(GROFF_BIN_DIR) $(GROFF_OTHER_BIN_DIRS)
-GROFF_BIN_PATH=`echo $(GROFF_BIN_DIRS) | sed -e 's|  *|$(SH_SEP)|g'`
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-MFLAG=-M$(srcdir) -M$(top_builddir)/tmac -M$(top_srcdir)/tmac
-PFLAG=-dpaper=$(PAGE) -P-p$(PAGE)
-
-PDFROFF=\
-  GROFF_TMPDIR=. \
-  GROFF_COMMAND_PREFIX= \
-  GROFF_BIN_DIR="$(GROFF_BIN_DIR)" \
-  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-  ./pdfroff --keep-temporary-files $(FFLAG) $(MFLAG) $(PFLAG)
-
-RM=rm -f
-
-.SUFFIXES: .ms .pdf
-.ms.pdf:
-       $(PDFROFF) -mspdf --stylesheet=$(srcdir)/cover.ms $< >$@
-
-all: pdfroff $(make_pdfdoc)
-
-# The pdf files use the local script to generate.
-$(PDFDOCFILES): pdfroff
-
-pdfdoc: gnu.eps $(PDFDOCFILES)
-
-gnu.eps:
-       if test -f $(top_srcdir)/doc/gnu.eps; then \
-         cp $(top_srcdir)/doc/gnu.eps . ; \
-       elif test -f $(top_builddir)/doc/gnu.eps; then \
-         cp $(top_builddir)/doc/gnu.eps . ; \
-       else \
-         xpmtoppm $(top_srcdir)/doc/gnu.xpm | pnmdepth 15 \
-           | $(pnmtops_nosetpage) -noturn -rle >$@ ; \
-       fi
-
-pdfroff: pdfroff.sh $(SH_DEPS_SED_SCRIPT)
-       sed -f $(SH_DEPS_SED_SCRIPT) \
-           -e "s|@VERSION@|$(version)$(revision)|" \
-           -e "s|@GROFF_AWK_INTERPRETERS@|$(ALT_AWK_PROGS)|" \
-           -e "s|@GROFF_GHOSTSCRIPT_INTERPRETERS@|$(ALT_GHOSTSCRIPT_PROGS)|" \
-           -e "s|@GROFF_BIN_DIR@|$(bindir)|" $(srcdir)/pdfroff.sh >$@
-       chmod +x $@
-
-install_data: install_always $(make_install_pdfdoc)
-
-install_always:
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       for f in $(CMDFILES); do \
-         $(RM) $(DESTDIR)$(bindir)/$$f; \
-         $(INSTALL_SCRIPT) $$f $(DESTDIR)$(bindir)/$$f; \
-       done
-       -test -d $(DESTDIR)$(tmacdir) || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
-       for f in $(TMACFILES); do \
-         $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-         $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(tmacdir)/$$f; \
-       done
-
-install_pdfdoc: install_always
-       -test -d $(DESTDIR)$(pdfdocdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(pdfdocdir)
-       for f in $(PDFDOCFILES); do \
-         $(RM) $(DESTDIR)$(pdfdocdir)/$$f; \
-         $(INSTALL_DATA) $$f $(DESTDIR)$(pdfdocdir)/$$f; \
-       done
-
-uninstall_sub: uninstall_always $(make_uninstall_pdfdoc)
-
-uninstall_always:
-       -for f in $(CMDFILES); do $(RM) $(DESTDIR)$(bindir)/$$f; done
-       -for f in $(TMACFILES); do $(RM) $(DESTDIR)$(tmacdir)/$$f; done
-
-uninstall_pdfdoc: uninstall_always
-       -for f in $(PDFDOCFILES); do $(RM) $(DESTDIR)$(pdfdocdir)/$$f; done
-
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index b40c1ebf927903333bdc2e4473a0f16f5516eec2..0ae544b392b8990a752bb5b6d09b3ef7f6ef05a0 100644 (file)
@@ -1,5 +1,5 @@
     -*- text -*-
-    Copyright (C) 2004-201 Free Software Foundation, Inc.
+    Copyright (C) 2004-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
index 100081021cb5784a227f4135d1998bf569a9d37f..1b4b0f234c615a7363930689d159c02bb291b116 100644 (file)
@@ -1,5 +1,5 @@
     -*- text -*-
-    Copyright (C) 2004-201 Free Software Foundation, Inc.
+    Copyright (C) 2004-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
index a4154823f833f177d4b22bfbcc8713b2929dc1fa..de073b05ae86bf22243512e72860a14b5cfc8ffd 100644 (file)
@@ -1,5 +1,5 @@
     -*- text -*-
-    Copyright 2004-201 Free Software Foundation, Inc.
+    Copyright 2004-2018 Free Software Foundation, Inc.
 
     Copying and distribution of this file, with or without modification,
     are permitted in any medium without royalty provided the copyright
@@ -33,9 +33,9 @@ system dependencies.
 * Comment added 2005-02-26 by Keith Marshall <keith.d.marshall@ntlworld.com>
 
 If this refers to contrib/pdfmark/Makefile, then it is addressed by the new
-`pdfroff' script; the original Makefile may be considered redundant.  Local
-system dependencies are resolved by `configure', and applied to `pdfroff',
-when it is generated from `pdfroff.sh'.
+'pdfroff' script; the original Makefile may be considered redundant.  Local
+system dependencies are resolved by 'configure', and applied to 'pdfroff',
+when it is generated from 'pdfroff.sh'.
 
 --------
 
@@ -48,13 +48,13 @@ Completed.
 
 --------
 
-Provide a `pdfmark' script (or call it `groff2pdf'?) which
+Provide a 'pdfmark' script (or call it 'groff2pdf'?) which
 actually converts a groff input file to pdf, and which
 takes care of the necessary intermediate steps to handle
 PDF marks.
 
 * Comment added 2005-02-26 by Keith Marshall <keith.d.marshall@ntlworld.com>
 
-This facility now provided by `pdfroff' script; documented in `pdfroff.man'.
-Man page still requires an additional section, to describe use of `stylesheet'
+This facility now provided by 'pdfroff' script; documented in 'pdfroff.man'.
+Man page still requires an additional section, to describe use of 'stylesheet'
 feature.  Script also requires documentation in PDF and texinfo formats.
index fcf85b46a94ebe2d6c9329dfda8037b5624db41c..95f4cd2fcf1cd11e67fdf2568470b128e40a9aa4 100644 (file)
@@ -1,5 +1,4 @@
-.\" -*- nroff -*-
-.\" Copyright (C) 2004-2014  Free Software Foundation, Inc.
+.\" Copyright (C) 2004-2018 Free Software Foundation, Inc.
 .\"
 .\" Copying and distribution of this file, with or without modification,
 .\" are permitted in any medium without royalty provided the copyright
@@ -62,3 +61,7 @@
 .rr HM*SAVED
 .fam
 ..
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
diff --git a/contrib/pdfmark/pdfmark.am b/contrib/pdfmark/pdfmark.am
new file mode 100644 (file)
index 0000000..f392735
--- /dev/null
@@ -0,0 +1,106 @@
+# Copyright (C) 2005-2018 Free Software Foundation, Inc.
+#      Written by Keith Marshall (keith.d.marshall@ntlworld.com)
+#      Automake migration by Bertrand Garrigues
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+pdfmark_srcdir = $(top_srcdir)/contrib/pdfmark
+pdfmark_builddir = $(top_builddir)/contrib/pdfmark
+
+man1_MANS += contrib/pdfmark/pdfroff.1
+
+bin_SCRIPTS += pdfroff
+
+# Files installed in $(tmacdir)
+TMACFILES = \
+  contrib/pdfmark/pdfmark.tmac \
+  contrib/pdfmark/spdf.tmac
+pdfmarktmacdir = $(tmacdir)
+dist_pdfmarktmac_DATA = $(TMACFILES)
+
+# Files installed in $(pdfdocdir)
+PDFDOCFILES = \
+  contrib/pdfmark/pdfmark.pdf
+if BUILD_PDFDOC
+pdfmarkpdfdocdir = $(pdfdocdir)
+nodist_pdfmarkpdfdoc_DATA = $(PDFDOCFILES)
+MOSTLYCLEANFILES += $(PDFDOCFILES)
+else
+EXTRA_DIST += $(PDFDOCFILES)
+endif
+
+EXTRA_DIST += \
+  contrib/pdfmark/cover.ms \
+  contrib/pdfmark/pdfmark.ms \
+  contrib/pdfmark/ChangeLog \
+  contrib/pdfmark/README \
+  contrib/pdfmark/PROBLEMS \
+  contrib/pdfmark/TODO \
+  contrib/pdfmark/pdfroff.1.man \
+  contrib/pdfmark/pdfroff.sh
+
+PDFMARK_PFLAG =-dpaper=$(PAGE) -P-p$(PAGE)
+PDFMARK_TFLAG = -M$(pdfmark_srcdir)
+PDFROFF=\
+  GROFF_TMPDIR=. \
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_DIR="$(GROFF_BIN_DIR)" \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  ./pdfroff --keep-temporary-files \
+  $(FFLAG) $(TFLAG) $(PDFMARK_TFLAG) $(PDFMARK_PFLAG)
+
+contrib/pdfmark/pdfmark.pdf: contrib/pdfmark/pdfmark.ms
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(PDFROFF) -mspdf --stylesheet=$(pdfmark_srcdir)/cover.ms \
+            $(top_srcdir)/contrib/pdfmark/pdfmark.ms >$@
+
+# The pdf files use the local script to generate.
+$(PDFDOCFILES): pdfroff groff troff gropdf 
+$(PDFDOCFILES): $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA) gnu.eps
+
+pdfroff: contrib/pdfmark/pdfroff.sh $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)sed -f $(SH_DEPS_SED_SCRIPT) \
+           -e "s|[@]VERSION[@]|$(VERSION)|" \
+           -e "s|[@]GROFF_AWK_INTERPRETERS[@]|$(ALT_AWK_PROGS)|" \
+           -e "s|[@]GROFF_GHOSTSCRIPT_INTERPRETERS[@]|$(ALT_GHOSTSCRIPT_PROGS)|" \
+           -e "s|[@]GROFF_BIN_DIR[@]|$(bindir)|" $(pdfmark_srcdir)/pdfroff.sh \
+           >$@ \
+       && chmod +x $@
+
+mostlyclean-local: mostlyclean_pdfmark
+mostlyclean_pdfmark:
+       rm -rf $(top_builddir)/pdfroff-*
+
+uninstall_groffdirs: uninstall-pdfmark-hook
+uninstall-pdfmark-hook:
+if BUILD_PDFDOC
+       if test -d $(DESTDIR)$(pdfmarkpdfdocdir); then \
+         rmdir $(DESTDIR)$(pdfmarkpdfdocdir); \
+       fi
+endif
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 154030e36a441fdc4acde642d6062d6b67d778f7..62e0df8827a2e7003d56768219539ae33f2f08d7 100644 (file)
@@ -1,4 +1,3 @@
-.\" vim: ft=groff          -*- nroff -*-
 .ig
 pdfmark.ms
 
@@ -6,19 +5,14 @@ File position: <groff-source>/contrib/pdfmark/pdfmark.ms
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-201 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 written by Keith Marshall <keith.d.marshall@ntlworld.com>
 
 Permission is granted to copy, distribute and/or modify this document
 under the terms of the GNU Free Documentation License, Version 1.3 or
 any later version published by the Free Software Foundation; with no
-Front-Cover Texts, no Back-Cover Texts, and the following Invariant
-Sections:--
-
-    a)  This "Legal Matters" section, extending from the start of
-        the document, to the end of the enclosing ".ig" section.
-
-    b)  The two lines below starting with `.AU' and `.AI'.
+Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
+Texts.
 
 A copy of the Free Documentation License is included as a file called
 FDL in the main directory of the groff source package.
@@ -32,14 +26,9 @@ Publishing with GNU Troff
 .CE
 .\"
 .\" Specify the Internet address for the groff web site.
-.\" Currently, there are two available addresses; a copy is maintained at ...
 .\"
 .ds GROFF-WEBSITE http://www.gnu.org/software/groff
 .\"
-.\" ... but the official home site is at ...
-.\"
-.ds GROFF-WEBSITE http://groff.ffii.org
-.\"
 .\" Set the PDF default document view attribute, to ensure that the document
 .\" outline is visible, each time the document is opened in Acrobat Reader.
 .\"
@@ -256,8 +245,7 @@ for information and availability.
 .FE
 Other tools employed, which should be readily available on
 .EM any
-.SM
-UNIX\(tm
+Unix\(tm
 .LG
 or GNU/Linux system, are
 .CW sed ,
@@ -285,8 +273,7 @@ but comprehensive
 POSIX
 .LG
 emulation environment and
-.SM
-UNIX\(tm
+Unix\(tm
 .LG
 toolkit for 32\(hybit Microsoft\*(rg Windows\(tm platforms; see
 .pdfhref W http://cygwin.com
@@ -295,8 +282,7 @@ for information and download.
 or MSYS.\**
 .FS
 Another free, but minimal suite of common
-.SM
-UNIX\(tm
+Unix\(tm
 .LG
 tools for 32\(hybit Microsoft\*(rg Windows\(tm, available for download from
 .pdfhref W -A ; http://www.mingw.org
@@ -1209,8 +1195,7 @@ be separated from the preceding option flag by one or more
 be used).
 It may be noted that this paradigm for specifying options
 is reminiscent of most
-.SM
-UNIX\(tm
+Unix\(tm
 .LG
 shells; however, in the case of the
 .CW pdfhref
@@ -1500,7 +1485,7 @@ option.
 .IP \*[= -UF\0 unix\(hyfile > <]
 Specifies the name of the file in which a link destination is defined,
 using the file naming semantics of the
-.CW UNIX \(tm
+.CW Unix \(tm
 operating system.
 When the PDF document is read on a machine
 where the operating system uses
@@ -2043,7 +2028,7 @@ for each of the
 .CW MS\(hyDOS \*(rg,
 .CW Apple \*(rg
 .CW Macintosh \*(rg,
-.CW UNIX \(tm
+.CW Unix \(tm
 and
 .CW MS\(hyWindows \*(rg
 operating systems, respectively; see the
@@ -2562,3 +2547,7 @@ macro.
 .NH 3
 .XN -N import-map -- Deploying a Document Reference Map
 .TC
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
index a6c590052ad79d4f94ffb527ed439338ab8799eb..2006f45e06bd707ba65a568378487b241341401a 100644 (file)
@@ -1,9 +1,8 @@
-.\" -*- nroff -*-
 .ig
 
 pdfmark.tmac
 
-Copyright (C) 2004-201 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
      Written by Keith Marshall (keith.d.marshall@ntlworld.com)
 
 This file is part of groff.
@@ -19,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 Author's Note
 =============
@@ -1821,7 +1820,7 @@ inspiration has come from discussion on the groff mailing list
 .      pdf*href.mark.emit 2
 .      \"
 .      \" Now, adjust the vertical "hot-spot" mapping reference,
-.      \" to identify the correct position for the the last line of
+.      \" to identify the correct position for the last line of
 .      \" text, over which the "hot-spot" extends.
 .      \"
 .      nr pdf:ury \\n[pdf:lly.end]-\\*[PDFHREF.HEIGHT]
@@ -1947,4 +1946,8 @@ inspiration has come from discussion on the groff mailing list
 .als pdf*href-W      pdf*href
 .ds  pdf*href-W.link /Action << /Subtype /URI /URI (\\\\*[pdf:href-D]) >>
 .\"
-.\" pdfmark.tmac: end of file / vim: ft=groff
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
+.\" pdfmark.tmac: end of file
diff --git a/contrib/pdfmark/pdfroff.1.man b/contrib/pdfmark/pdfroff.1.man
new file mode 100644 (file)
index 0000000..95d7807
--- /dev/null
@@ -0,0 +1,839 @@
+.TH PDFROFF @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+pdfroff \- create PDF documents using groff
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr pdfroff_C \n[.C]
+.cp 0
+.
+.
+.\" pdfroff.1
+.\" File position: <groff-source>/contrib/pdfmark/pdfroff.man
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2005-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this
+.\" document under the terms of the GNU Free Documentation License,
+.\" Version 1.3 or any later version published by the Free Software
+.\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
+.\" and with no Back-Cover Texts.
+.\"
+.\" A copy of the Free Documentation License is included as a file
+.\" called FDL in the main directory of the groff source package.
+.
+.
+.\" ====================================================================
+.\" Local macro definitions
+.
+.hw pdfmark
+.
+.
+.\" ====================================================================
+.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY pdfroff
+.OP \-abcegilpstzCEGNRSUVXZ
+.OP \-d cs
+.OP \-f fam
+.OP \-F dir
+.OP \-I dir
+.OP \-L arg
+.OP \-m name
+.OP \-M dir
+.OP \-n num
+.OP \-o list
+.OP \-P arg
+.OP \-r cn
+.OP \-T dev
+.OP \-w name
+.OP \-W name
+.OP \-\-emit\-ps
+.OP \-\-no\-toc\-relocation
+.OP \-\-no-kill\-null\-pages
+.RB [ \-\-stylesheet=\c
+.IR name ]
+.OP \-\-no\-pdf\-output
+.RB [ \-\-pdf\-output=\c
+.IR name ]
+.OP \-\-no\-reference\-dictionary
+.RB [ \-\-reference\-dictionary=\c
+.IR  name ]
+.OP \-\-report\-progress
+.OP \-\-keep\-temporary\-files
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.SY pdfroff
+.B \-h
+.SY pdfroff
+.B \-\-help
+.YS
+.
+.SY pdfroff
+.B \-v
+.RI [ groff-option
+\&.\|.\|.\&]
+.SY pdfroff
+.B \-\-version
+.RI [ groff-option
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B pdfroff
+is a wrapper program for the GNU text processing system,
+.BR  groff .
+.
+It transparently handles the mechanics of multiple pass
+.B groff
+processing, when applied to suitably marked up
+.B groff
+source files,
+such that tables of contents and body text are formatted separately,
+and are subsequently combined in the correct order, for final publication
+as a single PDF document.
+.
+A further optional
+\*(lqstyle sheet\*(rq
+capability is provided;
+this allows for the definition of content which is required to precede the
+table of contents, in the published document.
+.
+.P
+For each invocation of
+.BR pdfroff ,
+the ultimate
+.B groff
+output stream is post-processed by the GhostScript interpreter,
+to produce a finished PDF document.
+.
+.P
+.B pdfroff
+makes no assumptions about, and imposes no restrictions on, the use of
+any
+.B groff
+macro packages which the user may choose to employ,
+in order to achieve a desired document format;
+however, it
+.I does
+include specific built in support for the
+.B pdfmark
+macro package, should the user choose to employ it.
+.
+Specifically, if the
+.I pdfhref
+macro, defined in the
+.I pdfmark.tmac
+package, is used to define public reference marks, or dynamic links to
+such reference marks, then
+.B pdfroff
+performs as many preformatting
+.B groff
+passes as required, up to a maximum limit of
+.IR four ,
+in order to compile a document reference dictionary, to resolve
+references, and to expand the dynamically defined content of links.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+The command line is parsed in accordance with normal GNU conventions,
+but with one exception \(em when specifying any short form option
+(i.e., a single character option introduced by a single hyphen),
+and if that option expects an argument, then it
+.I must
+be specified independently (i.e., it may
+.I not
+be appended to any group of other single character short form options).
+.
+.
+.P
+Long form option names (i.e., those introduced by a double hyphen) may
+be abbreviated to their minimum length unambiguous initial substring.
+.
+.
+.P
+Otherwise,
+.B pdfroff
+usage closely mirrors that of
+.B groff
+itself.
+.
+Indeed, with the exception of the
+.BR \-h ,
+.BR \-v ,
+and
+.BI \-T \ dev
+short form options, and all long form options, which are parsed
+internally by
+.BR pdfroff ,
+all options and file name arguments specified on the command line are
+passed on to
+.BR groff ,
+to control the formatting of the PDF document.
+.
+Consequently,
+.B pdfroff
+accepts all options and arguments, as specified in
+.BR groff (@MAN1EXT@),
+which may also be considered as the definitive reference for all standard
+.B pdfroff
+options and argument usage.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.B pdfroff
+accepts all of the short form options (i.e., those introduced by a
+single hyphen), which are available with
+.B groff
+itself.
+.
+In most cases, these are simply passed transparently to
+.BR groff ;
+the following, however, are handled specially by
+.BR pdfroff .
+.
+.TP
+.B \-h
+Same as
+.BR \-\-help ;
+see below.
+.
+.TP
+.B \-i
+Process standard input, after all other specified input files.
+.
+This is passed transparently to
+.BR groff ,
+but, if grouped with other options, it
+.I must
+be the first in the group.
+.
+Hiding it within a group breaks standard input processing, in the
+multiple pass
+.B groff
+processing context of
+.BR pdfroff .
+.
+.TP
+.BI \-T \ dev
+Only
+.B \-T\ ps
+is supported by
+.BR pdfroff .
+.
+Attempting to specify any other device causes
+.B pdfroff
+to abort.
+.
+.TP
+.B \-v
+Same as
+.BR \-\-version ;
+see below.
+.
+.
+.P
+See
+.BR groff (@MAN1EXT@)
+for a description of all other short form options, which are
+transparently passed through
+.B pdfroff
+to
+.BR groff .
+.
+.
+.P
+All long form options (i.e., those introduced by a double hyphen) are
+interpreted locally by
+.BR pdfroff ;
+they are
+.B not
+passed on to
+.BR groff ,
+unless otherwise stated below.
+.
+.TP
+.B \-\-help
+Causes
+.B pdfroff
+to display a summary of the its usage syntax, and supported options,
+and then exit.
+.
+.TP
+.B \-\-emit\-ps
+Suppresses the final output conversion step, causing
+.B pdfroff
+to emit PostScript output instead of PDF.
+.
+This may be useful, to capture intermediate PostScript output, when
+using a specialised postprocessor, such as
+.I gpresent
+for example,
+in place of the default
+.I GhostScript
+PDF writer.
+.
+.TP
+.B \-\-keep\-temporary\-files
+Suppresses the deletion of temporary files, which normally occurs
+after
+.B pdfroff
+has completed PDF document formatting; this may be useful, when
+debugging formatting problems.
+.
+.IP
+See section \[lq]Files\[rq] below for a description of the temporary
+files used by
+.BR pdfroff .
+.
+.TP
+.B \-\-no\-pdf\-output
+May be used with the
+.BI \%\-\-reference\-dictionary= name
+option (described below) to eliminate the overhead of PDF formatting,
+when running
+.B pdfroff
+to create a reference dictionary, for use in a different document.
+.
+.TP
+.B \-\-no\-reference\-dictionary
+May be used to eliminate the overhead of creating a reference dictionary,
+when it is known that the target PDF document contains no public
+references, created by the
+.I pdfhref
+macro.
+.
+.TP
+.B \-\-no\-toc\-relocation
+May be used to eliminate the extra
+.B groff
+processing pass,
+which is required to generate a table of contents,
+and relocate it to the start of the PDF document,
+when processing any document which lacks an automatically
+generated table of contents.
+.
+.TP
+.B \-\-no\-kill\-null\-pages
+While preparing for simulation of the manual collation step,
+which is traditionally required to relocate a
+.I "table of contents"
+to the start of a document,
+.B pdfroff
+accumulates a number of empty page descriptions
+into the intermediate
+.I PostScript
+output stream.
+During the final collation step,
+these empty pages are normally discarded from the finished document;
+this option forces
+.B pdfroff
+to leave them in place.
+.
+.TP
+.BI \-\-pdf\-output= name
+Specifies the name to be used for the resultant PDF document;
+if unspecified, the PDF output is written to standard output.
+A future version of
+.B pdfroff
+may use this option,
+to encode the document name in a generated reference dictionary.
+.
+.TP
+.BI \-\-reference\-dictionary= name
+Specifies the name to be used for the generated reference dictionary file;
+if unspecified, the reference dictionary is created in a temporary file,
+which is deleted when
+.B pdfroff
+completes processing of the current document.
+.
+This option
+.I must
+be specified, if it is desired to save the reference dictionary,
+for use in references placed in other PDF documents.
+.
+.TP
+.B \-\-report\-progress
+Causes
+.B pdfroff
+to display an informational message on standard error,
+at the start of each
+.B groff
+processing pass.
+.
+.TP
+.BI \-\-stylesheet= name
+Specifies the name of an
+.IR "input file" ,
+to be used as a style sheet for formatting of content,
+which is to be placed
+.I before
+the table of contents,
+in the formatted PDF document.
+.
+.TP
+.B \-\-version
+Causes
+.B pdfroff
+to display a version identification message.
+.
+The entire command line is then passed transparently to
+.BR groff ,
+in a
+.I one
+pass operation
+.IR only ,
+in order to display the associated
+.B groff
+version information, before exiting.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+The following environment variables may be set, and exported,
+to modify the behaviour of
+.BR pdfroff .
+.
+.TP
+.I PDFROFF_COLLATE
+Specifies the program to be used
+for collation of the finished PDF document.
+.
+.IP
+This collation step may be required to move
+.I tables of contents
+to the start of the finished PDF document,
+when formatting with traditional macro packages,
+which print them at the end.
+.
+However, users should not normally need to specify
+.IR \%PDFROFF_COLLATE ,
+(and indeed, are not encouraged to do so).  If unspecified,
+.B pdfroff
+uses
+.BR sed (@MAN1EXT@)
+by default,
+which normally suffices.
+.
+.IP
+If
+.I \%PDFROFF_COLLATE
+.I is
+specified,
+then it must act as a filter,
+accepting a list of file name arguments,
+and write its output to the
+.I stdout
+stream,
+whence it is piped to the
+.IR \%PDFROFF_POSTPROCESSOR_COMMAND ,
+to produce the finished PDF output.
+.
+.IP
+When specifying
+.IR \%PDFROFF_COLLATE ,
+it is normally necessary to also specify
+.IR \%PDFROFF_KILL_NULL_PAGES .
+.
+.IP
+.I \%PDFROFF_COLLATE
+is ignored,
+if
+.B pdfroff
+is invoked with the
+.I \%\-\-no\-kill\-null\-pages
+option.
+.
+.TP
+.I PDFROFF_KILL_NULL_PAGES
+Specifies options to be passed to the
+.I \%PDFROFF_COLLATE
+program.
+.
+.IP
+It should not normally be necessary to specify
+.IR \%PDFROFF_KILL_NULL_PAGES .
+.
+The internal default is a
+.BR sed (@MAN1EXT@)
+script,
+which is intended to remove completely blank pages
+from the collated output stream,
+and which should be appropriate in most applications of
+.BR pdfroff .
+.
+However,
+if any alternative to
+.BR sed (@MAN1EXT@)
+is specified for
+.IR \%PDFROFF_COLLATE ,
+then it is likely that a corresponding alternative specification for
+.I \%PDFROFF_KILL_NULL_PAGES
+is required.
+.
+.IP
+As in the case of
+.IR \%PDFROFF_COLLATE ,
+.I \%PDFROFF_KILL_NULL_PAGES
+is ignored, if
+.B pdfroff
+is invoked with the
+.I \%\-\-no\-kill\-null\-pages
+option.
+.
+.TP
+.I PDFROFF_POSTPROCESSOR_COMMAND
+Specifies the command to be used for the final document conversion
+from PostScript intermediate output to PDF.
+.
+It must behave as a filter,
+writing its output to the
+.I stdout
+stream,
+and must accept an arbitrary number of
+.I files .\|.\|.\&
+arguments,
+with the special case of
+.I \-
+representing the
+.I stdin
+stream.
+.
+.IP
+If unspecified,
+.I \%PDFROFF_POSTPROCESSOR_COMMAND
+defaults to
+.
+.RS 12n
+.EX
+gs \-dBATCH \-dQUIET \-dNOPAUSE \-dSAFER \-sDEVICE=pdfwrite \e
+       \-sOutputFile=\-
+.EE
+.RE
+.
+.TP
+.I GROFF_TMPDIR
+Identifies the directory in which
+.B pdfroff
+should create temporary files.
+.
+If
+.I \%GROFF_TMPDIR
+is
+.I not
+specified, then the variables
+.IR TMPDIR ,
+.I TMP
+and
+.I TEMP
+are considered in turn, as possible temporary file repositories.
+If none of these are set, then temporary files are created
+in the current directory.
+.
+.TP
+.I GROFF_GHOSTSCRIPT_INTERPRETER
+Specifies the program to be invoked, when
+.B pdfroff
+converts
+.B groff
+PostScript output to PDF.
+.
+If
+.I \%PDFROFF_POSTPROCESSOR_COMMAND
+is specified,
+then the command name it specifies is
+.I implicitly
+assigned to
+.IR \%GROFF_GHOSTSCRIPT_INTERPRETER ,
+overriding any explicit setting specified in the environment.
+.
+If
+.I \%GROFF_GHOSTSCRIPT_INTERPRETER
+is not specified, then
+.B pdfroff
+searches the process
+.IR PATH ,
+looking for a program with any of the well known names
+for the GhostScript interpreter;
+if no GhostScript interpreter can be found,
+.B pdfroff
+aborts.
+.
+.TP
+.I GROFF_AWK_INTERPRETER
+Specifies the program to be invoked, when
+.B pdfroff
+is extracting reference dictionary entries from a
+.B groff
+intermediate message stream.
+.
+If
+.I \%GROFF_AWK_INTERPRETER
+is not specified, then
+.B pdfroff
+searches the process
+.IR PATH ,
+looking for any of the preferred programs, \[oq]gawk\[cq],
+\[oq]mawk\[cq], \[oq]nawk\[cq], and \[oq]awk\[cq], in this order; if
+none of these are found,
+.B pdfroff
+issues a warning message, and continue processing;
+however, in this case, no reference dictionary is created.
+.
+.TP
+.I OSTYPE
+Typically defined automatically by the operating system,
+.I \%OSTYPE
+is used on Microsoft Win32/MS-DOS platforms
+.IR only ,
+to infer the default
+.I \%PATH_SEPARATOR
+character,
+which is used when parsing the process
+.I PATH
+to search for external helper programs.
+.
+.TP
+.I PATH_SEPARATOR
+If set,
+.I \%PATH_SEPARATOR
+overrides the default separator character,
+(\[oq]:\[cq] on POSIX/Unix systems,
+inferred from
+.I \%OSTYPE
+on Microsoft Win32/MS-DOS),
+which is used when parsing the process
+.I PATH
+to search for external helper programs.
+.
+.TP
+.I SHOW_PROGRESS
+If this is set to a non-empty value, then
+.B pdfroff
+always behaves as if the
+.B \%\-\-report\-progress
+option is specified, on the command line.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+Input and output files for
+.B pdfroff
+may be named according to any convention of the user's choice.
+Typically, input files may be named according to the choice of the
+principal formatting macro package, e.g.,
+.RI file .ms
+might be an input file for formatting using the
+.B ms
+macros
+.RI ( s.tmac );
+normally, the final output file should be named
+.RI file .pdf .
+.
+.
+.P
+Temporary files, created by
+.BR pdfroff ,
+are placed in the file system hierarchy,
+in or below the directory specified by environment variables
+(see section \[lq]Environment\[rq] above).
+.
+If
+.BR mktemp (@MAN1EXT@)
+is available,
+it is invoked to create a private subdirectory of
+the nominated temporary files directory,
+(with subdirectory name derived from the template
+.IR pdfroff\-XXXXXXXXXX );
+if this subdirectory is successfully created,
+the temporary files will be placed within it,
+otherwise they will be placed directly in the directory
+nominated in the environment.
+.P
+All temporary files themselves
+are named according to the convention
+.IR pdf $$ . *,
+where
+.I $$
+is the standard shell variable representing the process ID of the
+.B pdfroff
+process itself, and
+.I *
+represents any of the extensions used by
+.B pdfroff
+to identify the following temporary and intermediate files.
+.
+.TP
+.IR pdf $$ .tmp
+A scratch pad file,
+used to capture reference data emitted by
+.BR groff ,
+during the
+.I reference dictionary
+compilation phase.
+.
+.TP
+.IR pdf $$ .ref
+The
+.IR "reference dictionary" ,
+as compiled in the last but one pass of the
+.I reference dictionary
+compilation phase;
+(at the start of the first pass,
+this file is created empty;
+in successive passes,
+it contains the
+.I reference dictionary
+entries,
+as collected in the preceding pass).
+.
+.IP
+If the
+.BR \%\-\-reference\-dictionary =\c
+.I name
+option is specified,
+this intermediate file becomes permanent,
+and is named
+.IR name ,
+rather than
+.IR pdf $$ .ref .
+.
+.TP
+.IR pdf $$ .cmp
+Used to collect
+.I reference dictionary
+entries during the active pass of the
+.I reference dictionary
+compilation phase.
+.
+At the end of any pass,
+when the content of
+.IR pdf $$ .cmp
+compares as identical to
+.IR pdf $$ .ref ,
+(or the corresponding file named by the
+.BR \%\-\-reference\-dictionary =\c
+.I name
+option),
+then
+.I reference dictionary
+compilation is terminated,
+and the
+.I document reference map
+is appended to this intermediate file,
+for inclusion in the final formatting passes.
+.
+.TP
+.IR pdf $$ .tc
+An intermediate
+.I PostScript
+file,
+in which \[lq]Table of Contents\[rq] entries are collected,
+to facilitate relocation before the body text,
+on ultimate output to the
+.I GhostScript
+postprocessor.
+.
+.TP
+.IR pdf $$ .ps
+An intermediate
+.I PostScript
+file,
+in which the body text is collected prior to ultimate output to the
+.I GhostScript
+postprocessor,
+in the proper sequence,
+.I after
+.IR pdf $$ .tc .
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.B pdfroff
+was written by
+.MT keith.d.marshall@\:ntlworld.com
+Keith Marshall
+.ME .
+.
+.
+.\" ====================================================================
+.SH SEE ALSO
+.\" ====================================================================
+.
+See
+.BR groff (@MAN1EXT@)
+for the definitive reference to document formatting with
+.BR groff .
+.
+Since
+.B pdfroff
+provides a superset of all
+.B groff
+capabilities,
+.BR groff (@MAN1EXT@)
+may also be considered to be the definitive reference to all
+.I standard
+capabilities of
+.BR pdfroff ,
+with this document providing the reference to
+.BR pdfroff 's
+extended features.
+.
+.
+.P
+While
+.B pdfroff
+imposes neither any restriction on, nor any requirement for,
+the use of any specific
+.B groff
+macro package, a number of supplied macro packages,
+and in particular those associated with the package
+.IR pdfmark.tmac ,
+are best suited for use with
+.B pdfroff
+as the preferred formatter.
+.
+Detailed documentation on the use of these packages may be found,
+in PDF format, in the reference guide
+.BR "\*(lqPortable Document Format Publishing with GNU Troff\*(rq" ,
+included in the installed documentation set as
+.IR @PDFDOCDIR@/pdfmark.pdf .
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[pdfroff_C]
+.
+.
+.\" ====================================================================
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
diff --git a/contrib/pdfmark/pdfroff.man b/contrib/pdfmark/pdfroff.man
deleted file mode 100644 (file)
index ec412bb..0000000
+++ /dev/null
@@ -1,852 +0,0 @@
-.TH PDFROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-pdfroff \- create PDF documents using groff
-.
-.
-.\" pdfroff.1
-.\" File position: <groff-source>/contrib/pdfmark/pdfroff.man
-.
-.\" --------------------------------------------------------------------
-.\" Legal Matters
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2005-2014 Free Software Foundation, Inc.
-
-This file is part of groff, the free GNU roff type-setting system.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License (FDL), Version
-1.3 or any later version published by the Free Software Foundation;
-with no Front-Cover Texts, no Back-Cover Texts, and the following
-Invariant Sections:--
-
-    a)  This "Legal Matters" section, extending from the definition of
-        .co to the end of the enclosing .au definition.
-
-    b) The entire sections bearing the heading "COPYING" and
-       "AUTHORS".
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package, it is also
-available in the internet at
-.UR http://\:www.gnu.org/\:copyleft/\:fdl.html
-the GNU copyleft site
-.UE .
-..
-.
-.de au
-It was originally written by
-.MT keith.d.marshall@\:ntlworld.com
-Keith Marshall
-.ME ,
-who also wrote the implementation of the
-.I pdfroff
-program, to which it relates.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Local macro definitions
-.
-.hw pdfmark
-.
-.de NH
-.  hy 0
-\&\\$*
-.  hy
-..
-.
-.
-.\" --------------------------------------------------------------------
-.
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY pdfroff
-.OP \-abcegilpstzCEGNRSUVXZ
-.OP \-d cs
-.OP \-f fam
-.OP \-F dir
-.OP \-I dir
-.OP \-L arg
-.OP \-m name
-.OP \-M dir
-.OP \-n num
-.OP \-o list
-.OP \-P arg
-.OP \-r cn
-.OP \-T dev
-.OP \-w name
-.OP \-W name
-.OP \-\-emit\-ps
-.OP \-\-no\-toc\-relocation
-.OP \-\-no-kill\-null\-pages
-.OP \-\-stylesheet=\fIname\fP
-.OP \-\-no\-pdf\-output
-.OP \-\-pdf\-output=\fIname\fP
-.OP \-\-no\-reference\-dictionary
-.OP \-\-reference\-dictionary=\fIname\fP
-.OP \-\-report\-progress
-.OP \-\-keep\-temporary\-files
-.I file .\|.\|.
-.
-.SY pdfroff
-.B \-h
-|
-.B \-\-help
-.
-.SY pdfroff
-.B \-v
-|
-.B \-\-version
-.RI [ option\ .\|.\|. ]
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B pdfroff
-is a wrapper program for the GNU text processing system,
-.BR  groff .
-.
-It transparently handles the mechanics of multiple pass
-.B groff
-processing, when applied to suitably marked up
-.B groff
-source files,
-such that tables of contents and body text are formatted separately,
-and are subsequently combined in the correct order, for final publication
-as a single PDF document.
-.
-A further optional
-\*(lqstyle sheet\*(rq
-capability is provided;
-this allows for the definition of content which is required to precede the
-table of contents, in the published document.
-.
-.P
-For each invocation of
-.BR pdfroff ,
-the ultimate
-.B groff
-output stream is post-processed by the GhostScript interpreter,
-to produce a finished PDF document.
-.
-.P
-.B pdfroff
-makes no assumptions about, and imposes no restrictions on, the use of
-any
-.B groff
-macro packages which the user may choose to employ,
-in order to achieve a desired document format;
-however, it
-.I does
-include specific built in support for the
-.B pdfmark
-macro package, should the user choose to employ it.
-.
-Specifically, if the
-.I pdfhref
-macro, defined in the
-.B pdfmark.tmac
-package, is used to define public reference marks, or dynamic links to
-such reference marks, then
-.B pdfroff
-performs as many preformatting
-.B groff
-passes as required, up to a maximum limit of
-.IR four ,
-in order to compile a document reference dictionary, to resolve
-references, and to expand the dynamically defined content of links.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-The command line is parsed in accordance with normal GNU conventions,
-but with one exception \(em when specifying any short form option
-(i.e., a single character option introduced by a single hyphen),
-and if that option expects an argument, then it
-.I must
-be specified independently (i.e., it may
-.I not
-be appended to any group of other single character short form options).
-.
-.
-.P
-Long form option names (i.e., those introduced by a double hyphen) may
-be abbreviated to their minimum length unambiguous initial substring.
-.
-.
-.P
-Otherwise,
-.B pdfroff
-usage closely mirrors that of
-.B groff
-itself.
-.
-Indeed, with the exception of the
-.BR \-h ,
-.BR \-v ,
-and
-.BI \-T \ dev
-short form options, and all long form options, which are parsed
-internally by
-.BR pdfroff ,
-all options and file name arguments specified on the command line are
-passed on to
-.BR groff ,
-to control the formatting of the PDF document.
-.
-Consequently,
-.B pdfroff
-accepts all options and arguments, as specified in
-.BR groff (@MAN1EXT@),
-which may also be considered as the definitive reference for all standard
-.BR pdfroff
-options and argument usage.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.B pdfroff
-accepts all of the short form options (i.e., those introduced by a
-single hyphen), which are available with
-.B groff
-itself.
-.
-In most cases, these are simply passed transparently to
-.BR groff ;
-the following, however, are handled specially by
-.BR pdfroff .
-.
-.TP
-.B \-h
-Same as
-.BR \-\-help ;
-see below.
-.
-.TP
-.B \-i
-Process standard input, after all other specified input files.
-.
-This is passed transparently to
-.BR groff ,
-but, if grouped with other options, it
-.I must
-be the first in the group.
-.
-Hiding it within a group breaks standard input processing, in the
-multiple pass
-.B groff
-processing context of
-.BR pdfroff .
-.
-.TP
-.BI \-T \ dev
-Only
-.B \-T\ ps
-is supported by
-.BR pdfroff .
-.
-Attempting to specify any other device causes
-.B pdfroff
-to abort.
-.
-.TP
-.B \-v
-Same as
-.BR \-\-version ;
-see below.
-.
-.
-.P
-See
-.BR groff (@MAN1EXT@)
-for a description of all other short form options, which are
-transparently passed through
-.BR pdfroff
-to
-.BR groff .
-.
-.
-.P
-All long form options (i.e., those introduced by a double hyphen) are
-interpreted locally by
-.BR pdfroff ;
-they are
-.B not
-passed on to
-.BR groff ,
-unless otherwise stated below.
-.
-.TP
-.B \-\-help
-Causes
-.B pdfroff
-to display a summary of the its usage syntax, and supported options,
-and then exit.
-.
-.TP
-.B \-\-emit\-ps
-Suppresses the final output conversion step, causing
-.B pdfroff
-to emit PostScript output instead of PDF.
-.
-This may be useful, to capture intermediate PostScript output, when
-using a specialised postprocessor, such as
-.I gpresent
-for example,
-in place of the default
-.I GhostScript
-PDF writer.
-.
-.TP
-.B \-\-keep\-temporary\-files
-Suppresses the deletion of temporary files, which normally occurs
-after
-.B pdfroff
-has completed PDF document formatting; this may be useful, when
-debugging formatting problems.
-.
-.IP
-See section
-.BR FILES ,
-for a description of the temporary files used by
-.BR pdfroff .
-.
-.TP
-.B \-\-no\-pdf\-output
-May be used with the
-.BI \%\-\-reference\-dictionary= name
-option (described below) to eliminate the overhead of PDF formatting,
-when running
-.B pdfroff
-to create a reference dictionary, for use in a different document.
-.
-.TP
-.B \-\-no\-reference\-dictionary
-May be used to eliminate the overhead of creating a reference dictionary,
-when it is known that the target PDF document contains no public
-references, created by the
-.I pdfhref
-macro.
-.
-.TP
-.B \-\-no\-toc\-relocation
-May be used to eliminate the extra
-.B groff
-processing pass,
-which is required to generate a table of contents,
-and relocate it to the start of the PDF document,
-when processing any document which lacks an automatically
-generated table of contents.
-.
-.TP
-.B \-\-no\-kill\-null\-pages
-While preparing for simulation of the manual collation step,
-which is traditionally required to relocate of a
-.I "table of contents"
-to the start of a document,
-.B pdfroff
-accumulates a number of empty page descriptions
-into the intermediate
-.I PostScript
-output stream.
-During the final collation step,
-these empty pages are normally discarded from the finished document;
-this option forces
-.B pdfroff
-to leave them in place.
-.
-.TP
-.BI \-\-pdf\-output= name
-Specifies the name to be used for the resultant PDF document;
-if unspecified, the PDF output is written to standard output.
-A future version of
-.B pdfroff
-may use this option,
-to encode the document name in a generated reference dictionary.
-.
-.TP
-.BI \-\-reference\-dictionary= name
-Specifies the name to be used for the generated reference dictionary file;
-if unspecified, the reference dictionary is created in a temporary file,
-which is deleted when
-.B pdfroff
-completes processing of the current document.
-.
-This option
-.I must
-be specified, if it is desired to save the reference dictionary,
-for use in references placed in other PDF documents.
-.
-.TP
-.B \-\-report\-progress
-Causes
-.B pdfroff
-to display an informational message on standard error,
-at the start of each
-.B groff
-processing pass.
-.
-.TP
-.BI \-\-stylesheet= name
-Specifies the name of an
-.IR "input file" ,
-to be used as a style sheet for formatting of content,
-which is to be placed
-.I before
-the table of contents,
-in the formatted PDF document.
-.
-.TP
-.B \-\-version
-Causes
-.B pdfroff
-to display a version identification message.
-.
-The entire command line is then passed transparently to
-.BR groff ,
-in a
-.I one
-pass operation
-.IR only ,
-in order to display the associated
-.B groff
-version information, before exiting.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-The following environment variables may be set, and exported,
-to modify the behaviour of
-.BR pdfroff .
-.
-.TP
-.B PDFROFF_COLLATE
-Specifies the program to be used
-for collation of the finished PDF document.
-.
-.IP
-This collation step may be required to move
-.I tables of contents
-to the start of the finished PDF document,
-when formatting with traditional macro packages,
-which print them at the end.
-.
-However, users should not normally need to specify
-.BR \%PDFROFF_COLLATE ,
-(and indeed, are not encouraged to do so).  If unspecified,
-.B pdfroff
-uses
-.BR sed (@MAN1EXT@)
-by default,
-which normally suffices.
-.
-.IP
-If
-.B \%PDFROFF_COLLATE
-.I is
-specified,
-then it must act as a filter,
-accepting a list of file name arguments,
-and write its output to the
-.I stdout
-stream,
-whence it is piped to the
-.BR \%PDFROFF_POSTPROCESSOR_COMMAND ,
-to produce the finished PDF output.
-.
-.IP
-When specifying
-.BR \%PDFROFF_COLLATE ,
-it is normally necessary to also specify
-.BR \%PDFROFF_KILL_NULL_PAGES .
-.
-.IP
-.B \%PDFROFF_COLLATE
-is ignored,
-if
-.B pdfroff
-is invoked with the
-.I \%\-\-no\-kill\-null\-pages
-option.
-.
-.TP
-.B PDFROFF_KILL_NULL_PAGES
-Specifies options to be passed to the
-.B \%PDFROFF_COLLATE
-program.
-.
-.IP
-It should not normally be necessary to specify
-.BR \%PDFROFF_KILL_NULL_PAGES .
-.
-The internal default is a
-.BR sed (@MAN1EXT@)
-script,
-which is intended to remove completely blank pages
-from the collated output stream,
-and which should be appropriate in most applications of
-.BR pdfroff .
-.
-However,
-if any alternative to
-.BR sed (@MAN1EXT@)
-is specified for
-.BR \%PDFROFF_COLLATE ,
-then it is likely that a corresponding alternative specification for
-.B \%PDFROFF_KILL_NULL_PAGES
-is required.
-.
-.IP
-As in the case of
-.BR \%PDFROFF_COLLATE ,
-.B \%PDFROFF_KILL_NULL_PAGES
-is ignored, if
-.B pdfroff
-is invoked with the
-.I \%\-\-no\-kill\-null\-pages
-option.
-.
-.TP
-.B PDFROFF_POSTPROCESSOR_COMMAND
-Specifies the command to be used for the final document conversion
-from PostScript intermediate output to PDF.
-.
-It must behave as a filter,
-writing its output to the
-.I stdout
-stream,
-and must accept an arbitrary number of
-.I files .\|.\|.\&
-arguments,
-with the special case of
-.I \-
-representing the
-.I stdin
-stream.
-.
-.IP
-If unspecified,
-.B \%PDFROFF_POSTPROCESSOR_COMMAND
-defaults to
-.
-.RS 2
-.IP
-.I
-.ad l
-.NH gs \-dBATCH \-dQUIET \-dNOPAUSE \-dSAFER \-sDEVICE=pdfwrite \-sOutputFile=\-
-.ad
-.RE
-.
-.TP
-.B GROFF_TMPDIR
-Identifies the directory in which
-.B pdfroff
-should create temporary files.
-.
-If
-.B \%GROFF_TMPDIR
-is
-.I not
-specified, then the variables
-.BR TMPDIR ,
-.B TMP
-and
-.B TEMP
-are considered in turn, as possible temporary file repositories.
-If none of these are set, then temporary files are created
-in the current directory.
-.
-.TP
-.B GROFF_GHOSTSCRIPT_INTERPRETER
-Specifies the program to be invoked, when
-.B pdfroff
-converts
-.B groff
-PostScript output to PDF.
-.
-If
-.B \%PDFROFF_POSTPROCESSOR_COMMAND
-is specified,
-then the command name it specifies is
-.I implicitly
-assigned to
-.BR \%GROFF_GHOSTSCRIPT_INTERPRETER ,
-overriding any explicit setting specified in the environment.
-.
-If
-.B \%GROFF_GHOSTSCRIPT_INTERPRETER
-is not specified, then
-.B pdfroff
-searches the process
-.BR PATH ,
-looking for a program with any of the well known names
-for the GhostScript interpreter;
-if no GhostScript interpreter can be found,
-.B pdfroff
-aborts.
-.
-.TP
-.B GROFF_AWK_INTERPRETER
-Specifies the program to be invoked, when
-.B pdfroff
-is extracting reference dictionary entries from a
-.B groff
-intermediate message stream.
-.
-If
-.B \%GROFF_AWK_INTERPRETER
-is not specified, then
-.B pdfroff
-searches the process
-.BR PATH ,
-looking for any of the preferred programs, \[oq]gawk\[cq],
-\[oq]mawk\[cq], \[oq]nawk\[cq], and \[ok]awk\[cq], in this order; if
-none of these are found,
-.B pdfroff
-issues a warning message, and continue processing;
-however, in this case, no reference dictionary is created.
-.
-.TP
-.B OSTYPE
-Typically defined automatically by the operating system,
-.B OSTYPE
-is used on Microsoft Win32/MS-DOS platforms
-.IR only ,
-to infer the default
-.B \%PATH_SEPARATOR
-character,
-which is used when parsing the process
-.B PATH
-to search for external helper programs.
-.
-.TP
-.B PATH_SEPARATOR
-If set,
-.B \%PATH_SEPARATOR
-overrides the default separator character,
-(\[oq]:\[cq] on POSIX/UNIX systems,
-inferred from
-.B OSTYPE
-on Microsoft Win32/MS-DOS),
-which is used when parsing the process
-.B PATH
-to search for external helper programs.
-.
-.TP
-.B SHOW_PROGRESS
-If this is set to a non-empty value, then
-.B pdfroff
-always behaves as if the
-.B \%\-\-report\-progress
-option is specified, on the command line.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-Input and output files for
-.B pdfroff
-may be named according to any convention of the user\[aq]s choice.
-Typically, input files may be named according to the choice of the
-principal formatting macro package, e.g.,
-.IB file .ms
-might be an input file for formatting using the
-.B ms
-macros
-.RB ( s.tmac );
-normally, the final output file should be named
-.IB file .pdf\c
-\&.
-.
-.
-.P
-Temporary files, created by
-.BR pdfroff ,
-are placed in the file system hierarchy,
-in or below the directory specified by environment variables
-(see section
-.BR ENVIRONMENT ).
-.
-If
-.BR mktemp (@MAN1EXT@)
-is available,
-it is invoked to create a private subdirectory of
-the nominated temporary files directory,
-(with subdirectory name derived from the template
-.BR pdfroff-XXXXXXXXXX );
-if this subdirectory is successfully created,
-the temporary files will be placed within it,
-otherwise they will be placed directly in the directory
-nominated in the environment.
-.P
-All temporary files themselves
-are named according to the convention
-.BI pdf $$ .*\c
-\&, where
-.I $$
-is the standard shell variable representing the process ID of the
-.B pdfroff
-process itself, and
-.I *
-represents any of the extensions used by
-.B pdfroff
-to identify the following temporary and intermediate files.
-.
-.TP
-.BI pdf $$ .tmp
-A scratch pad file,
-used to capture reference data emitted by
-.BR groff ,
-during the
-.I reference dictionary
-compilation phase.
-.
-.TP
-.BI pdf $$ .ref
-The
-.IR "reference dictionary" ,
-as compiled in the last but one pass of the
-.I reference dictionary
-compilation phase;
-(at the start of the first pass,
-this file is created empty;
-in successive passes,
-it contains the
-.I reference dictionary
-entries,
-as collected in the preceding pass).
-.
-.IP
-If the
-.BR \%\-\-reference\-dictionary =\c
-.I name
-option is specified,
-this intermediate file becomes permanent,
-and is named
-.IR name ,
-rather than
-.BI pdf $$ .ref\c
-\&.
-.
-.TP
-.BI pdf $$ .cmp
-Used to collect
-.I reference dictionary
-entries during the active pass of the
-.I reference dictionary
-compilation phase.
-.
-At the end of any pass,
-when the content of
-.BI pdf $$ .cmp
-compares as identical to
-.BI pdf $$ .ref\c
-\&,
-(or the corresponding file named by the
-.BR \%\-\-reference\-dictionary =\c
-.I name
-option),
-then
-.I reference dictionary
-compilation is terminated,
-and the
-.I document reference map
-is appended to this intermediate file,
-for inclusion in the final formatting passes.
-.
-.TP
-.BI pdf $$ .tc
-An intermediate
-.I PostScript
-file,
-in which \*[lq]Table of Contents\*[rq] entries are collected,
-to facilitate relocation before the body text,
-on ultimate output to the
-.I GhostScript
-postprocessor.
-.
-.TP
-.BI pdf $$ .ps
-An intermediate
-.I PostScript
-file,
-in which the body text is collected prior to ultimate output to the
-.I GhostScript
-postprocessor,
-in the proper sequence,
-.I after
-.BI pdf $$ .tc\c
-\&.
-.
-.
-.\" --------------------------------------------------------------------
-.SH SEE ALSO
-.\" --------------------------------------------------------------------
-.
-See
-.BR groff (@MAN1EXT@)
-for the definitive reference to document formatting with
-.BR groff .
-.
-Since
-.B pdfroff
-provides a superset of all
-.B groff
-capabilities,
-.BR groff (@MAN1EXT@)
-may also be considered to be the definitive reference to all
-.I standard
-capabilities of
-.BR pdfroff ,
-with this document providing the reference to
-.BR pdfroff \[aq]s
-extended features.
-.
-.
-.P
-While
-.B pdfroff
-imposes neither any restriction on, nor any requirement for,
-the use of any specific
-.B groff
-macro package, a number of supplied macro packages,
-and in particular those associated with the package
-.BR pdfmark.tmac ,
-are best suited for use with
-.BR pdfroff
-as the preferred formatter.
-.
-Detailed documentation on the use of these packages may be found,
-in PDF format, in the reference guide
-.BR "\*(lqPortable Document Format Publishing with GNU Troff\*(rq" ,
-included in the installed documentation set as
-.BR \%@PDFDOCDIR@/pdfmark.pdf .
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" EOF / vim: ft=groff / -*- nroff -*-
index 9e19327db0fe62310cd70a8efb3f0de639019427..bc8e5eb0c23b2f1a73bd29955c78baa8e255456c 100644 (file)
@@ -3,7 +3,7 @@
 #
 # Function: Format PDF Output from groff Markup
 #
-# Copyright (C) 2005-201 Free Software Foundation, Inc.
+# Copyright (C) 2005-2018 Free Software Foundation, Inc.
 # Written by Keith Marshall (keith.d.marshall@ntlworld.com)
 # 
 # This file is part of groff.
@@ -19,7 +19,7 @@
 # for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 # ------------------------------------------------------------------------------
 #
@@ -38,7 +38,7 @@
 #
 # To ensure that prerequisite helper programs are available, and are
 # executable, a [fairly] portable method of detecting such programs is
-# provided by function `searchpath'.
+# provided by function 'searchpath'.
 #
   searchpath(){
   #
@@ -49,8 +49,8 @@
     do
       for ext in '' '.exe'
       #
-      # try `progname' with all well known extensions
-      # (e.g. Win32 may require `progname.exe')
+      # try 'progname' with all well known extensions
+      # (e.g. Win32 may require 'progname.exe')
       #
       do
         try="$dir/$1$ext"
index 26e9a1a46854d99522298817e89e135b96664d99..875a01168aac512103e20bcc8da8380534e93ca7 100644 (file)
@@ -1,9 +1,8 @@
-.\" -*- nroff -*-
 .ig
 
 spdf.tmac
 
-Copyright (C) 2004-201 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
      Written by Keith Marshall (keith.d.marshall@ntlworld.com)
 
 This file is part of groff.
@@ -19,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 ..
 .\"
@@ -220,5 +219,8 @@ The content for this section is not yet available.
 .\" as an addendum to this macro.
 .
 .pdfhref I -PT pg@bottom
-.\"
-.\" spdf.tmac: end of file: vim: ft=groff
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
+.\" spdf.tmac: end of file
diff --git a/contrib/pic2graph/Makefile.sub b/contrib/pic2graph/Makefile.sub
deleted file mode 100644 (file)
index d49b7e3..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# Copyright (C) 2001-2014  Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Makefile.sub
-#
-MAN1=pic2graph.n
-MOSTLYCLEANADD=pic2graph
-RM=rm -f
-
-all: pic2graph
-
-pic2graph: pic2graph.sh
-       sed -e "s|@g@|$(g)|g" \
-           -e "s|@VERSION@|$(version)$(revision)|" \
-           -e $(SH_SCRIPT_SED_CMD) $(srcdir)/pic2graph.sh >$@
-       chmod +x $@
-
-install_data: pic2graph
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       $(RM) $(DESTDIR)$(bindir)/pic2graph
-       $(INSTALL_SCRIPT) pic2graph $(DESTDIR)$(bindir)/pic2graph
-
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/pic2graph
-
-
-########################################################################
-# Emacs settings
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/contrib/pic2graph/pic2graph.1.man b/contrib/pic2graph/pic2graph.1.man
new file mode 100644 (file)
index 0000000..a190627
--- /dev/null
@@ -0,0 +1,204 @@
+.TH PIC2GRAPH @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+pic2graph \- convert a PIC diagram into a cropped image
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" This documentation is released to the public domain.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY pic2graph
+.OP \-unsafe
+.OP \-format output-format
+.OP \-eqn delimiters
+.RI [ convert-arguments ]
+.YS
+.
+.SY pic2graph
+.B \-\-help
+.YS
+.
+.SY pic2graph
+.B \-v
+.SY pic2graph
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I pic2graph
+reads a
+.IR @g@pic (@MAN1EXT@)
+program from the standard input and writes an image file,
+by default in Portable Network Graphics (PNG) format,
+to the standard output.
+.
+It furthermore translates
+.IR @g@eqn (@MAN1EXT@)
+constructs, so it can be used for generating images of mathematical
+formulae.
+.
+.
+.PP
+The input PIC code should
+.I not
+be wrapped with the
+.B \&.PS
+and
+.B \&.PE
+macros that normally guard it within
+.IR groff (@MAN1EXT@)
+documents.
+.
+.
+.\" FIXME: How old?  This text hasn't been touched since 2008 at latest.
+.\" Older versions of
+.\" .I \%convert
+.\" will produce a black-on-white graphic; newer ones may produce a
+.\" black-on-transparent graphic.
+.
+.PP
+Arguments not recognized by
+.I pic2graph
+are passed to the ImageMagick or GraphicsMagick program
+.IR \%convert (1).
+.
+.
+By specifying these, you can give your image a border,
+.\" Transparent backgrounds are the default in 2018.
+.\" force the background transparent,
+set the image's pixel density,
+or perform other useful transformations.
+.
+.
+.PP
+The output image is clipped using
+.IR \%convert 's
+.B \-trim
+option to the smallest possible bounding box that contains all the black
+pixels.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.TP
+.BI "\-eqn " delimiters
+Use
+.I delimiters
+as the opening and closing
+characters that delimit
+.I @g@eqn
+directives;
+the default is \(lq$$\(rq.
+.
+The option argument
+.I delimiters
+should be a two-character string,
+but an empty string (\(dq\(dq) is accepted as a directive to disable
+.I @g@eqn
+processing.
+.
+.
+.TP
+.BI "\-format " output-format
+Write the image in
+.IR output-format ,
+which must be understood by
+.IR \%convert ;
+the default is PNG.
+.
+.
+.TP
+.B \-\-help
+Display a usage message and exit.
+.
+.
+.TP
+.B \-unsafe
+Run
+.I groff
+in
+.I unsafe
+mode, enabling the PIC command
+.B sh
+to execute arbitrary Unix shell commands.
+.
+The
+.I groff
+default is to forbid this.
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Display version information and exit.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I \%GROFF_TMPDIR
+.TQ
+.I \%TMPDIR
+.TQ
+.I TMP
+.TQ
+.I TEMP
+These environment variables are searched in the given order to determine
+the directory where temporary files will be created.
+.
+If none are set,
+.I /tmp
+is used.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+.I pic2graph
+was written by
+.MT esr@\:thyrsus.com
+Eric S.\& Raymond
+.ME ,
+based on a recipe by W.\& Richard Stevens.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+W.\& Richard Stevens,
+.UR http://\:www.kohala.com/\:start/\:troff/\:pic2html.html
+.I Turning PIC into HTML
+.UE
+.
+.
+.PP
+.IR eqn2graph (@MAN1EXT@),
+.IR grap2graph (@MAN1EXT@),
+.IR @g@pic (@MAN1EXT@),
+.IR @g@eqn (@MAN1EXT@),
+.IR groff (@MAN1EXT@),
+.IR \%convert (1)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/contrib/pic2graph/pic2graph.am b/contrib/pic2graph/pic2graph.am
new file mode 100644 (file)
index 0000000..502b756
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright (C) 2001-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+# pic2graph.am
+#
+
+pic2graph_srcdir = $(top_srcdir)/contrib/pic2graph
+man1_MANS += contrib/pic2graph/pic2graph.1
+bin_SCRIPTS += pic2graph
+EXTRA_DIST += \
+  contrib/pic2graph/pic2graph.sh \
+  contrib/pic2graph/pic2graph.1.man
+
+pic2graph: $(pic2graph_srcdir)/pic2graph.sh
+       $(AM_V_GEN)sed -e "s|[@]g[@]|$(g)|g" \
+           -e "s|[@]VERSION[@]|$(VERSION)|" \
+           -e $(SH_SCRIPT_SED_CMD) $(pic2graph_srcdir)/pic2graph.sh \
+           >$@ \
+       && chmod +x $@
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/contrib/pic2graph/pic2graph.man b/contrib/pic2graph/pic2graph.man
deleted file mode 100644 (file)
index 4436e63..0000000
+++ /dev/null
@@ -1,238 +0,0 @@
-.TH PIC2GRAPH @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-pic2graph \- convert a PIC diagram into a cropped image
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-This documentation is released to the public domain.
-..
-.
-.de au
-.ME esr@thyrsus.com
-Eric S.\& Raymond
-.UE ,
-based on a recipe by W.\& Richard Stevens.
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B pic2graph
-[
-.B \-unsafe
-]
-[
-.BI "\-format " fmt
-]
-[
-.BI "\-eqn " delim
-]
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-Reads a PIC program as input; produces an image file (by default in
-Portable Network Graphics format) suitable for the Web as output.
-.
-Also translates
-.BR @g@eqn (@MAN1EXT@)
-constructs, so it can be used for generating images of mathematical
-formulae.
-.
-.
-.P
-PIC is a rather expressive graphics minilanguage suitable for
-producing box-and-arrow diagrams of the kind frequently used in
-technical papers and textbooks.
-.
-The language is sufficiently flexible to be quite useful for state
-charts, Petri-net diagrams, flow charts, simple circuit schematics,
-jumper layouts, and other kinds of illustration involving repetitive
-uses of simple geometric forms and splines.
-.
-Because PIC descriptions are procedural and object-based, they are
-both compact and easy to modify.
-.
-.
-.P
-The PIC language is fully documented in
-.IR "Making Pictures With GNU PIC" ,
-a document which is part of the
-.BR groff (@MAN1EXT@)
-distribution.
-.
-.
-.P
-Your input PIC code should
-.I not
-be wrapped with the \&.PS and \&.PE macros that normally guard it within
-.BR groff (@MAN1EXT@)
-macros.
-.
-.
-.P
-The output image will be clipped to the smallest possible bounding box
-that contains all the black pixels.
-.
-Older versions of
-.BR \%convert (1)
-will produce a black-on-white graphic; newer ones may produce a
-black-on-transparent graphic.
-.
-By specifying command-line options to be passed to
-.BR \%convert (1)
-you can give it a border, force the background transparent, set the
-image\[aq]s pixel density, or perform other useful transformations.
-.
-.
-.P
-This program uses
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR gs (1),
-and the ImageMagick
-.BR \%convert (1)
-program.
-These programs must be installed on your system and accessible on your
-$PATH for
-.B pic2graph
-to work.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.B \-unsafe
-Run
-.BR @g@pic (@MAN1EXT@)
-and
-.BR groff (@MAN1EXT@)
-in the \[oq]unsafe\[cq] mode enabling the PIC macro
-.B sh
-to execute arbitrary commands.
-.
-The default is to forbid this.
-.
-.TP
-.BI "\-format " fmt
-Specify an output format; the default is PNG (Portable Network Graphics).
-.
-Any format that
-.BR \%convert (1)
-can emit is supported.
-.
-.TP
-.BI "\-eqn " delim
-Change the fencepost characters that delimit
-.BR @g@eqn (@MAN1EXT@)
-directives
-.RB ( $
-and
-.BR $ ,
-by default).
-.
-This option requires an argument, but an empty string is accepted as a
-directive to disable
-.BR @g@eqn (@MAN1EXT@)
-processing.
-.
-.
-.PP
-Command-line switches and arguments not listed above are passed to
-.BR \%convert (1).
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP \w'\fB@MACRODIR@/eqnrc'u+2n
-.B @MACRODIR@/eqnrc
-The
-.BR @g@eqn (@MAN1EXT@)
-initialization file.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.B GROFF_TMPDIR
-The directory in which temporary files will be created.
-.
-If this is not set
-.B pic2graph
-searches the environment variables
-.BR \%TMPDIR ,
-.BR TMP ,
-and
-.B TEMP
-(in that order).
-.
-Otherwise, temporary files will be created in
-.BR /tmp .
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-Due to changes in the behavior of ImageMagick
-.BR \%convert (1)
-that are both forward and backward-incompatible,
-mismatches between your
-.B pic2graph
-and
-.BR \%convert (1)
-versions may produce zero-sized or untrimmed output images.
-.
-For this version of
-.B pic2graph
-you will need a version of
-.BR \%convert (1)
-that supports the
-.B \-trim
-option; older versions of
-.B pic2graph
-used
-.BR \-crop\~0x0 ,
-which no longer has trimming behavior.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR eqn2graph (@MAN1EXT@),
-.BR grap2graph (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR gs (1),
-.BR \%convert (1).
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 72c5477abcaca6336d065c16f37e18296054f83f..b22991483f4f8ddc6422a0706d361e4f0305a276 100644 (file)
@@ -33,8 +33,8 @@
 # intended as a pic translator; we can live with eqn defaults. 
 #
 groffpic_opts=""
-gs_opts=""
 convert_opts=""
+convert_trim_arg="-trim"
 format="png"
 eqndelim='$$'
 
@@ -68,23 +68,45 @@ fi
 
 # create temporary directory
 tmp=
-for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp; do
-    test -z "$d" && continue
+for d in "$GROFF_TMPDIR" "$TMPDIR" "$TMP" "$TEMP" /tmp
+do
+    test -n "$d" && break
+done
 
-    tmp=`(umask 077 && mktemp -d -q "$d/pic2graph-XXXXXX") 2> /dev/null` \
-    && test -n "$tmp" && test -d "$tmp" \
-    && break
+if ! test -d "$d"
+then
+    echo "$0: error: temporary directory \"$d\" does not exist or is" \
+        "not a directory" >&2
+    exit 1
+fi
 
-    tmp=$d/pic2graph$$-$RANDOM
-    (umask 077 && mkdir $tmp) 2> /dev/null \
-    && break
-done;
-if test -z "$tmp"; then
-    echo "$0: cannot create temporary directory" >&2
-    { (exit 1); exit 1; }
+if ! tmp=`(umask 077 && mktemp -d -q "$d/pic2graph-XXXXXX") 2> /dev/null`
+then
+    # mktemp failed--not installed or is a version that doesn't support those
+    # flags?  Fall back to older method which uses more predictable naming.
+    #
+    # $RANDOM is a Bashism.  The fallback of $PPID is not good pseudorandomness,
+    # but is supported by the stripped-down dash shell, for instance.
+    tmp="$d/pic2graph$$-${RANDOM:-$PPID}"
+    (umask 077 && mkdir "$tmp") 2> /dev/null
+fi
+
+if ! test -d "$tmp"
+then
+    echo "$0: error: cannot create temporary directory \"$tmp\"" >&2
+    exit 1
+fi
+
+# See if the installed version of convert(1) is new enough to support the -trim
+# option.  Versions that didn't were described as "old" as early as 2008.
+is_convert_recent=`convert -help | grep -e -trim`
+if test -z "$is_convert_recent"
+then
+    echo "$0: warning: falling back to old '-crop 0x0' trim method" >&2
+    convert_trim_arg="-crop 0x0"
 fi
 
-trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' EXIT INT TERM
+trap 'exit_status=$?; rm -rf "$tmp" && exit $exit_status' EXIT INT TERM
 
 # Here goes:
 # 1. Wrap the input in dummy .PS/PE macros (and add possibly null .EQ/.EN)
@@ -92,8 +114,9 @@ trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' EXIT INT TERM
 # 3. Process through groff to emit Postscript.
 # 4. Use convert(1) to crop the PostScript and turn it into a bitmap.
 (echo ".EQ"; echo $eqndelim; echo ".EN"; echo ".PS"; cat; echo ".PE") | \
-    groff -e -p $groffpic_opts -Tps -P-pletter > $tmp/pic2graph.ps \
-    && convert -trim $convert_opts $tmp/pic2graph.ps $tmp/pic2graph.$format \
-    && cat $tmp/pic2graph.$format
+    groff -e -p $groffpic_opts -Tps -P-pletter > "$tmp"/pic2graph.ps \
+    && convert $convert_trim_arg $convert_opts "$tmp"/pic2graph.ps \
+       "$tmp"/pic2graph.$format \
+    && cat "$tmp"/pic2graph.$format
 
 # End
diff --git a/doc/Makefile.in b/doc/Makefile.in
deleted file mode 100644 (file)
index 759b4b2..0000000
+++ /dev/null
@@ -1,177 +0,0 @@
-# Copyright (C) 2002-2014  Free Software Foundation, Inc.
-#      Written by Werner Lemberg <wl@gnu.org>
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-
-
-# Use this file to produce documentation in various formats; e.g. you can
-# say
-#
-#   make groff.pdf
-#
-# to get the groff texinfo manual as a PDF file.
-#
-# Note that you have to compile the groff package first.
-
-
-srcdir=@srcdir@
-top_srcdir=@abs_top_srcdir@
-VPATH=@srcdir@
-top_builddir=@abs_top_builddir@
-pnmtops=@pnmtops_nosetpage@
-
-# These may be overridden if cross-compiling.
-TROFFBIN=$(top_builddir)/src/roff/troff/troff
-GROFFBIN=$(top_builddir)/src/roff/groff/groff
-GROFF_BIN_PATH=`echo $(groff_bin_dirs) \
-                | LANG=C LC_ALL=C sed -e 's|  *|:|g'`
-
-# info files are distributed with the groff package, so makeinfo is
-# usually not needed (however, to build from the repo you NEED it!)
-MAKEINFO=@MAKEINFO@
-
-# Users who want to print out the groff manual are expected to have a
-# working TeX installation.  Note that texi2dvi properly honours the
-# `MAKEINFO' environment variable.
-TEXI2DVI=texi2dvi
-
-groff_bin_dirs=\
-  $(top_builddir)/src/roff/groff \
-  $(top_builddir)/src/roff/troff \
-  $(top_builddir)/src/preproc/preconv \
-  $(top_builddir)/src/preproc/pic \
-  $(top_builddir)/src/preproc/eqn \
-  $(top_builddir)/src/preproc/tbl \
-  $(top_builddir)/src/preproc/grn \
-  $(top_builddir)/src/preproc/refer \
-  $(top_builddir)/src/preproc/soelim \
-  $(top_builddir)/src/preproc/html \
-  $(top_builddir)/src/devices/grops \
-  $(top_builddir)/src/devices/gropdf \
-  $(top_builddir)/src/devices/grodvi \
-  $(top_builddir)/src/devices/grotty \
-  $(top_builddir)/src/devices/grolj4 \
-  $(top_builddir)/src/devices/grolbp \
-  $(top_builddir)/src/devices/grohtml
-
-version=`cat $(top_srcdir)/VERSION`
-# No additional number if revision is zero.
-revision=`sed -e 's/^0$$//' -e 's/^[1-9].*$$/.&/' $(top_srcdir)/REVISION`
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac
-
-TROFF=$(TROFFBIN) $(TFLAG) $(FFLAG) -ww
-GROFF=\
-  LANG=C \
-  LC_ALL=C \
-  sed -e "s;@VERSION@;$(version)$(revision);" $< \
-    | GROFF_COMMAND_PREFIX= \
-      GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-      $(GROFFBIN) $(TFLAG) $(FFLAG) -Upet -ww
-
-imagedir=img
-
-.SUFFIXES: .me .ms .ps .html .txt .texinfo .dvi .pdf .xhtml
-.PHONY: all prepare_examples clean distclean realclean extraclean
-
-# For simplicity, we always call preconv, grn, and eqn.
-.me.txt:
-       $(GROFF) -k -Tutf8 -ge -me >$@
-.me.ps:
-       $(GROFF) -k -Tps -ge -me >$@
-
-.ms.html:
-       $(GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
-                -P-D$(imagedir) -P-V -Thtml -ms >$@
-.ms.txt:
-       $(GROFF) -Tascii -ms -mwww >$@
-.ms.ps:
-       $(GROFF) -Tps -ms -mwww >$@
-
-.texinfo.txt:
-       LANG=C \
-       LC_ALL=C \
-       $(MAKEINFO) --enable-encoding -I$(srcdir) --plaintext -o $@ $<
-.texinfo.dvi:
-       LANG=C \
-       LC_ALL=C \
-       MAKEINFO=$(MAKEINFO) $(TEXI2DVI) -e $<
-.texinfo.pdf:
-       LANG=C \
-       LC_ALL=C \
-       MAKEINFO=$(MAKEINFO) $(TEXI2DVI) -e --pdf $<
-.texinfo.html:
-       LANG=C \
-       LC_ALL=C \
-       $(MAKEINFO) --enable-encoding -I$(srcdir) --html --no-split $< \
-         && $(SHELL) $(srcdir)/fixinfo.sh $@
-
-all: prepare_examples
-
-prepare_examples: grnexmpl.g groff.css
-       test -f grnexmpl.g || cp $(srcdir)/grnexmpl.g .
-       test -f groff.css || cp $(srcdir)/groff.css .
-
-groff.info: groff.texinfo
-       $(MAKEINFO) --enable-encoding -I$(srcdir) $(srcdir)/groff.texinfo
-
-gnu.eps: gnu.xpm
-       xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 | $(pnmtops) -noturn >$@
-
-pic.html: pic.ms
-       $(GROFF) -P-p -P-I`basename $< | sed -e 's|.ms$$||'` \
-                -P-D$(imagedir) -P-j`basename $< | sed -e 's|.ms$$||'` \
-                -Thtml -P-V -ms >$@
-
-webpage.html: webpage.ms gnu.eps groff.css
-       $(GROFF) -P-j`basename $< | sed -e 's|.ms$$||'` \
-                -P-nrpb -P-I`basename $< | sed -e 's|.ms$$||'` \
-                -P-D$(imagedir) -Thtml -ms >$@
-
-webpage.ps: gnu.eps
-
-grnexmpl.ps: grnexmpl.me grnexmpl.g
-
-split-html:
-       LANG=C \
-       LC_ALL=C \
-       $(MAKEINFO) --enable-encoding -I$(srcdir) --html groff.texinfo \
-         && for f in groff/*; do $(SHELL) $(srcdir)/fixinfo.sh $$f; done
-
-clean:
-       rm -f *.ps *.html *.txt core
-       rm -f *.aux *.dvi *.pdf *.log *.toc texput.log
-       rm -f *.cp *.cps *.cv *.cn *.es *.ess *.fn *.fns *.ky *.kys \
-             *.ma *.mas *.op *.ops *.pg *.pgs *.rq *.rqs *.st *.sts \
-             *.tp *.tps *.tr *.vr *.vrs *.xhtml
-       -rm -rf img
-
-distclean: clean
-
-realclean: distclean
-       rm -f *.png *.eps
-
-extraclean: distclean
-       rm -f core *~ \#* junk temp grot
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/doc/Makefile.sub b/doc/Makefile.sub
deleted file mode 100644 (file)
index b2325f9..0000000
+++ /dev/null
@@ -1,296 +0,0 @@
-# Copyright (C) 2002-2014  Free Software Foundation, Inc.
-#      Written by Werner Lemberg <wl@gnu.org>
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-
-# These may be overridden if cross-compiling.
-GROFFBIN=$(top_builddir)/src/roff/groff/groff
-GROFF_BIN_PATH=`echo $(groff_bin_dirs) | sed -e 's|  *|$(SH_SEP)|g'`
-
-groff_bin_dirs=\
-  $(top_builddir)/src/roff/groff \
-  $(top_builddir)/src/roff/troff \
-  $(top_builddir)/src/preproc/preconv \
-  $(top_builddir)/src/preproc/pic \
-  $(top_builddir)/src/preproc/eqn \
-  $(top_builddir)/src/preproc/tbl \
-  $(top_builddir)/src/preproc/grn \
-  $(top_builddir)/src/preproc/refer \
-  $(top_builddir)/src/preproc/soelim \
-  $(top_builddir)/src/preproc/html \
-  $(top_builddir)/src/devices/grops \
-  $(top_builddir)/src/devices/gropdf \
-  $(top_builddir)/src/devices/grohtml
-
-FFLAG=-F$(top_builddir)/font -F$(top_srcdir)/font
-TFLAG=-M$(top_builddir)/tmac -M$(top_srcdir)/tmac
-
-GROFF=\
-  sed -e "s;@VERSION@;$(version)$(revision);" $< \
-  | GROFF_COMMAND_PREFIX= \
-    GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
-    $(GROFFBIN) $(TFLAG) $(FFLAG) -Upet -ww
-
-DOCFILES=\
-  meref.me \
-  meintro.me \
-  meintro_fr.me \
-  pic.ms
-
-PROCESSEDDOCFILES=\
-  meref.ps \
-  meintro.ps \
-  meintro_fr.ps \
-  pic.ps
-
-HTMLDOCFILES=\
-  pic.html
-
-HTMLDOCFILESALL=\
-  pic*.html
-
-HTMLDOCIMAGEFILES=\
-  pic*
-
-EXAMPLEFILES=\
-  webpage.ms \
-  groff.css \
-  grnexmpl.g \
-  grnexmpl.me
-
-PROCESSEDEXAMPLEFILES=\
-  webpage.ps \
-  grnexmpl.ps
-
-HTMLEXAMPLEFILES=\
-  webpage.html
-
-HTMLEXAMPLEFILESALL=\
-  webpage*.html
-
-HTMLEXAMPLEIMAGEFILES=\
-  webpage*
-
-imagedir=img
-htmldocimagedir=$(htmldocdir)/$(imagedir)
-exampleimagedir=$(exampledir)/$(imagedir)
-
-MOSTLYCLEANADD=\
-  $(PROCESSEDDOCFILES) \
-  $(PROCESSEDEXAMPLEFILES) \
-  $(HTMLEXAMPLEFILESALL) \
-  $(HTMLDOCFILESALL) \
-  groff.aux groff.cp* groff.dvi groff.es* groff.fn* groff.html groff.ky* \
-  groff.log groff.ma* groff.op* groff.pdf groff.pg* groff.ps groff.rq* \
-  groff.st* groff.toc groff.tp groff.vr* \
-  examples.stamp
-
-MOSTLYCLEANDIRADD=\
-  $(imagedir)
-
-MOSTLYCLEANNOTSRCDIRADD=\
-  groff.css \
-  grnexmpl.g \
-  groff.info \
-  groff-*.info \
-  gnu.eps
-
-RM=rm -f
-
-.SUFFIXES: .me .ms .ps .html
-
-# For simplicity, we always call preconv, grn, and eqn.
-.me.ps:
-       $(GROFF) -k -Tps -ge -me >$@
-
-.ms.html:
-       $(GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
-                -P-D$(imagedir) -P-V -Thtml -ms >$@
-.ms.ps:
-       $(GROFF) -Tps -ms -mwww >$@
-
-all: $(make_otherdoc) \
-     $(make_infodoc) \
-     $(make_htmldoc) \
-     $(make_examples) \
-     $(make_htmlexamples)
-
-otherdoc: $(PROCESSEDDOCFILES)
-infodoc: groff.info
-htmldoc: $(HTMLDOCFILES)
-
-examples: examples.stamp $(PROCESSEDEXAMPLEFILES)
-
-html_examples: $(HTMLEXAMPLEFILES)
-
-examples.stamp: grnexmpl.g groff.css gnu.eps
-       test -f grnexmpl.g || cp $(srcdir)/grnexmpl.g .
-       test -f groff.css || cp $(srcdir)/groff.css .
-       if test ! -f gnu.eps; then \
-         if test -f $(srcdir)/gnu.eps; then \
-           cp $(srcdir)/gnu.eps .; \
-         elif test -f $(top_builddir)/contrib/pdfmark/gnu.eps; then \
-           cp $(top_builddir)/contrib/pdfmark/gnu.eps .; \
-         fi; \
-       fi
-       echo timestamp > $@
-
-groff.info: groff.texinfo
-       $(MAKEINFO) --enable-encoding -I$(srcdir) $(srcdir)/groff.texinfo
-
-gnu.eps: gnu.xpm
-       xpmtoppm $(srcdir)/gnu.xpm | pnmdepth 15 \
-         | $(pnmtops_nosetpage) -noturn -rle >$@
-
-pic.html: pic.ms
-       $(GROFF) -P-p -P-I`basename $< | sed -e 's|.ms$$||'` \
-                -P-D$(imagedir) -P-j`basename $< | sed -e 's|.ms$$||'` \
-                -Thtml -P-V -ms >$@
-
-webpage.html: webpage.ms gnu.eps groff.css
-       $(GROFF) -P-j`basename $< | sed -e 's|.ms$$||'` \
-                -P-nrpb -P-I`basename $< | sed -e 's|.ms$$||'` \
-                -P-D$(imagedir) -Thtml -ms >$@
-
-webpage.ps: gnu.eps
-
-grnexmpl.ps: grnexmpl.me grnexmpl.g
-
-distfiles: groff.info gnu.eps
-
-install_data: install_always $(make_install_otherdoc) \
-             $(make_install_infodoc) $(make_install_htmldoc) \
-             $(make_install_examples)
-
-install_always:
-       -test -d $(DESTDIR)$(docdir) || $(mkinstalldirs) $(DESTDIR)$(docdir)
-
-install_otherdoc: install_always $(DOCFILES) $(PROCESSEDDOCFILES)
-       for f in $(DOCFILES); do \
-         $(RM) $(DESTDIR)$(docdir)/$$f; \
-         $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(docdir)/$$f; \
-       done
-       for f in $(PROCESSEDDOCFILES); do \
-         $(RM) $(DESTDIR)$(docdir)/$$f; \
-         $(INSTALL_DATA) $$f $(DESTDIR)$(docdir)/$$f; \
-       done
-
-install_infodoc: install_always groff.info
-# Prefer info files in builddir over srcdir; we test for
-# the existence of `groff.info'.
-       -test -d $(DESTDIR)$(infodir) || $(mkinstalldirs) $(DESTDIR)$(infodir)
-       d=.; test -f "groff.info" || d=$(srcdir); \
-         for p in $$d/groff.info `ls $$d/groff.info*`; do \
-           f=`basename $$p`; \
-           $(RM) $(DESTDIR)$(infodir)/$$f; \
-           $(INSTALL_DATA) $$p $(DESTDIR)$(infodir)/$$f; \
-         done
-       $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) \
-         $(DESTDIR)$(infodir)/groff.info
-
-install_htmldoc: install_always $(HTMLDOCFILES)
-       -test -d $(DESTDIR)$(htmldocdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(htmldocdir)
-       for f in `ls $(HTMLDOCFILESALL)`; do \
-         $(RM) $(DESTDIR)$(htmldocdir)/$$f; \
-         $(INSTALL_DATA) $$f $(DESTDIR)$(htmldocdir)/$$f; \
-       done
-       -test -d $(DESTDIR)$(htmldocimagedir) \
-         || $(mkinstalldirs) $(DESTDIR)$(htmldocimagedir)
-       $(RM) $(DESTDIR)$(htmldocimagedir)/$(HTMLDOCIMAGEFILES)
-       $(INSTALL_DATA) $(imagedir)/$(HTMLDOCIMAGEFILES) \
-         $(DESTDIR)$(htmldocimagedir)
-
-install_examples: install_always install_examples_always \
-                 $(make_install_htmlexamples)
-
-install_examples_always: gnu.eps $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES)
-# Prefer gnu.eps in builddir over srcdir.
-       -test -d $(DESTDIR)$(exampledir) \
-         || $(mkinstalldirs) $(DESTDIR)$(exampledir)
-       d=.; test -f "gnu.eps" || d=$(srcdir); \
-         $(RM) $(DESTDIR)$(exampledir)/gnu.eps; \
-         $(INSTALL_DATA) $$d/gnu.eps $(DESTDIR)$(exampledir)/gnu.eps
-       for f in $(EXAMPLEFILES); do \
-         $(RM) $(DESTDIR)$(exampledir)/$$f; \
-         $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(exampledir)/$$f; \
-       done
-       for f in $(PROCESSEDEXAMPLEFILES); do \
-         $(RM) $(DESTDIR)$(exampledir)/$$f; \
-         $(INSTALL_DATA) $$f $(DESTDIR)$(exampledir)/$$f; \
-       done
-
-install_htmlexamples: install_examples_always $(HTMLEXAMPLEFILES)
-       for f in `ls $(HTMLEXAMPLEFILESALL)`; do \
-         $(RM) $(DESTDIR)$(exampledir)/$$f; \
-         $(INSTALL_DATA) $$f $(DESTDIR)$(exampledir)/$$f; \
-       done
-       -test -d $(DESTDIR)$(exampleimagedir) \
-         || $(mkinstalldirs) $(DESTDIR)$(exampleimagedir)
-       $(RM) $(DESTDIR)$(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES)
-       $(INSTALL_DATA) $(imagedir)/$(HTMLEXAMPLEIMAGEFILES) \
-         $(DESTDIR)$(exampleimagedir)
-
-uninstall_sub: uninstall_always \
-               $(make_uninstall_infodoc) $(make_uninstall_htmldoc) \
-               $(make_uninstall_examples)
-
-uninstall_always:
-       -for f in $(DOCFILES) $(PROCESSEDDOCFILES); do \
-         $(RM) $(DESTDIR)$(docdir)/$$f; \
-       done
-
-uninstall_infodoc: uninstall_always
-       -$(INSTALL_INFO) --remove --info-dir=$(DESTDIR)$(infodir) \
-         $(DESTDIR)$(infodir)/groff.info
-       -for f in groff `ls groff.info*`; do \
-         $(RM) $(DESTDIR)$(infodir)/$$f; \
-       done
-
-uninstall_htmldoc: uninstall_always
-       -for f in `ls $(HTMLDOCFILESALL)`; do \
-         $(RM) $(DESTDIR)$(htmldocdir)/$$f; \
-       done
-       $(RM) $(DESTDIR)$(htmldocimagedir)/$(HTMLDOCIMAGEFILES)
-       -test -d $(DESTDIR)$(htmldocimagedir) && \
-         rmdir $(DESTDIR)$(htmldocimagedir)
-
-uninstall_examples: uninstall_always uninstall_examples_always \
-                   $(make_uninstall_htmlexamples)
-       -test -d $(DESTDIR)$(exampledir) && \
-         rmdir $(DESTDIR)$(exampledir)
-
-uninstall_examples_always:
-       -for f in $(EXAMPLEFILES) $(PROCESSEDEXAMPLEFILES); do \
-         $(RM) $(DESTDIR)$(exampledir)/$$f; \
-       done
-       $(RM) $(DESTDIR)$(exampledir)/gnu.eps
-
-uninstall_htmlexamples: uninstall_examples_always
-       -for f in `ls $(HTMLEXAMPLEFILESALL)`; do \
-         $(RM) $(DESTDIR)$(exampledir)/$$f; \
-       done
-       $(RM) $(DESTDIR)$(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES)
-       -test -d $(DESTDIR)$(exampleimagedir) && \
-         rmdir $(DESTDIR)$(exampleimagedir)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/doc/automake.mom b/doc/automake.mom
new file mode 100644 (file)
index 0000000..ed30b15
--- /dev/null
@@ -0,0 +1,785 @@
+.\" -*- mode: text; coding: utf-8; -*-
+.\"
+.\" Copyright ©2014, 2017 Free Software Foundation
+.\" 51 Franklin St, Fifth Floor, Boston, MA 02110, USA
+.\"
+.\" Permission is hereby granted, free of charge, to any person
+.\" obtaining a copy of this software and associated documentation
+.\" files (the "Software"), to deal in the Software without restriction,
+.\" including, without limitation, the rights to use, copy, modify,
+.\" merge, publish, distribute, sublicense, and sell copies of
+.\" the Software, and to permit persons to whom the Software is
+.\" furnished to do so, subject to the following conditions:
+.\" 
+.\" The above copyright notice and this permission notice shall be
+.\" included in all copies, or substantial portions, of the Software;
+.\"
+.\" THE SOFTWARE IS PROVIDED "AS IS," WITHOUT WARRANTY OF ANY KIND,
+.\" EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
+.\" OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, AND
+.\" NONINFRINGEMENT.  IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
+.\" HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES, OR OTHER LIABILITY,
+.\" WHETHER IN AN ACTION OF CONTRACT, TORT, OR OTHERWISE, ARISING
+.\" FROM, OUT OF, OR IN CONNECTION WITH, THE SOFTWARE, OR THE USE OF,
+.\" OR OTHER DEALINGS IN, THE SOFTWARE.
+.\"
+.\"  Formatted with the mom macros
+.\" .RW (reduce) and .EW (expand) control track kerning
+.\" .WS controls word spacing
+.\"  Hanging punctuation and hyphens are inserted manually
+.\"
+.TITLE     "Using Automake in the Groff project"
+.AUTHOR    "Bertrand Garrigues"
+.COPYRIGHT "2014, 2017 Free Software Foundation"
+.COVER     TITLE AUTHOR DOCTYPE COPYRIGHT
+.
+.PAPER      LETTER
+.PRINTSTYLE TYPESET
+.
+.HEADING_STYLE 1 NUMBER
+.HEADING_STYLE 2 NUMBER
+.HEADING_STYLE 3 NUMBER
+.HEADING_STYLE 4 NUMBER
+.
+.QUOTE_INDENT 2m
+.CODE_FONT CB
+.
+\# Table of contents
+.TOC_PADDING 2
+.SPACE_TOC_ITEMS
+.AUTO_RELOCATE_TOC
+.TOC_ENTRY_STYLE 2 FONT I
+.TOC_LEAD 14
+.
+.NO_SHIM \" Flex-spaced
+.
+.START
+.
+.PP
+This is a quick overview of how to use `automake' in the groff
+project, and is intended to help the developers and contributors
+find their way when they have to make changes to the sources files
+or to the data that are installed.  If you need more details on
+`automake', here are some reading suggestions:
+.
+.LEFT
+.SP 3p
+.
+.LIST
+.SHIFT_LIST 1m
+.ITEM
+The Automake Manual:
+\*[FWD 1m]\c
+.PDF_WWW_LINK https://www.gnu.org/software/automake/manual/automake.html
+.SP 3p
+.ITEM
+A book by John Calcote, with good practical examples:
+\*[FWD 1m]\c
+.PDF_WWW_LINK http://fsmsh.com/2753
+.SP 3p
+.ITEM
+This site, by Diego Petteno, with good practical examples too:
+\*[FWD 1m]\c
+.PDF_WWW_LINK https://autotools.io/index.html
+.LIST OFF
+.
+.JUSTIFY
+.HY DEFAULT
+.
+.HEADING 1 "Overview, the initial build"
+.
+.HEADING 2 "First build"
+.
+.PP
+Groff integrates the `gnulib' and uses its `bootstrap' script.  When
+compiling from the git repository, you should first invoke this
+script:
+.QUOTE
+.CODE
+$ ./bootstrap
+.CODE OFF
+.QUOTE OFF
+This will:
+.
+.QUAD LEFT
+.HY OFF
+.
+.LIST
+.SHIFT_LIST 1m
+.ITEM
+.SP 3p
+Clone the gnulib repository as a git submodule in 'gnulib',
+add the needed gnulib sources files in `lib', 
+add the needed gnulib m4 macros in `gnulib_m4'.
+.SP 3p
+.ITEM
+Invoke autoreconf that will call all the `GNU autotools' (`aclocal',
+`autoheader', `autoconf', `automake') in the right order for
+creating the following files:
+.LIST DASH
+.SHIFT_LIST .5m
+.SP 3p
+.ITEM
+INSTALL (a symlink to gnulib's INSTALL file)
+.ITEM
+Makefile.in
+.ITEM
+aclocal.m4
+.ITEM
+autom4te.cache/
+.ITEM
+build-aux/ (that contains all the helper scripts) 
+.ITEM
+configure
+.ITEM
+src/include/config.hin
+.LIST BACK
+.LIST OFF
+.
+.SP 3p
+.JUSTIFY
+.HY DEFAULT
+.
+.WS +2
+.EW .5
+Note that aclocal.m4 is generated and the groff m4 macros are
+included via the acinclude.m4 file.
+.WS DEFAULT
+.EW 0
+.
+.PP  
+At this point you can invoke the `configure' script and call `make'
+to build the groff project.  You can do it in the source tree:
+.QUOTE
+.CODE
+$ ./configure
+$ make
+.CODE OFF
+.QUOTE OFF
+You can also build groff in an out-of-source build tree, which is
+cleaner:
+.QUOTE
+.CODE
+$ mkdir build
+$ cd build
+$ ../configure
+$ make
+.CODE OFF
+.QUOTE OFF
+Note that parallel build is also supported and `make' can be invoked
+with the -j option, which will greatly speed up the build.
+.
+.HEADING 2 "Automake in the autotools process"
+.
+.PP
+Automake's main job is to generate a Makefile.in file (this file is
+maintained manually on projects using only autoconf).  The main file
+processed by `automake' is the Makefile.am file, which eventually
+generates a Makefile.  The (simplified) process is:
+.
+.SP 3p
+.QUAD LEFT
+.HY OFF
+.
+.LIST
+.SHIFT_LIST 1m
+.ITEM
+`aclocal' generates the `aclocal.m4' file from `configure.ac' and
+the user-defined macros in `acinclude.m4'.
+.ITEM
+`autoheader' generates config.h.in.
+.ITEM
+`autoconf' generates the `configure' script from `aclocal.m4' and `configure.ac'
+.ITEM
+`automake' generates Makefile.in from Makefile.am and the
+`configure.ac' file.  It also generates some helper scripts, on the
+groff project they are located in build-aux.
+.ITEM
+`configure' generates `config.status'
+.ITEM
+`config.status' generates the Makefile and config.h.
+.LIST OFF
+.
+.SP 3p
+.JUSTIFY
+.HY DEFAULT
+.
+.WS -2
+.RW .16
+Finally, `autoreconf' is the program that can be used to call these
+various tools in the correct order.
+.RW 0
+.WS DEFAULT
+.
+.PP
+Automake defines a set of special variables that are used to
+generate various build rules in the final Makefile.  Note however
+that if Automake's pre-defined rules are not enough, you still have
+the possibility of adding handwritten standard `make' rules in a
+Makefile.am; these rules will be copied verbatim in the Makefile.in
+and then in the final Makefile.
+.
+.HEADING 2 "Modification of autotools files"
+.
+.PP
+Previously, when groff used `autoconf' only and not `automake',
+you had to invoke manually the autotools, depending on what you
+modified.  For example, to change the file `aclocal.m4', you had
+to run the shell command 'aclocal -I m4'; to recreate the files
+`configure' and `Makefile', you had to use the command 'autoreconf
+- I m4'.
+.PP
+Now, as groff uses `automake', you don't need to run `autoreconf'.
+If you make some changes in Makefile.am or configure.ac, all the
+files that need to be updated will be regenerated when you execute
+`make'.
+.
+.HEADING 1 "Building a program"
+.
+.HEADING 2 "A program and its source files"
+.
+.PP
+Generally speaking, when using `automake' you will have to write a
+Makefile.am file and use the variable \*[CODE]bin_PROGRAMS\*[CODE OFF]
+to declare a program that should be built, and then list the
+sources of this program in a variable that starts with the name of
+your program and ends with \*[CODE]_SOURCES\*[CODE OFF]\&.  In the
+groff project we have only 1 top-level Makefile.am that includes
+several .am files.
+.PP
+Take for example the build of grolbp, in src/devices/grolbp/grolbp.am. 
+The file starts with:
+.QUOTE ADJUST -4p
+.CODE
+bin_PROGRAMS += grolbp
+.CODE OFF
+.QUOTE OFF
+This says that a program named `grolbp' is added to the list of the
+programs that should be built.  Note that \*[CODE]bin_PROGRAMS\*[CODE OFF]
+is initialized to an empty string in the top-level Makefile.am,
+which includes grolbp.am.  (We will see later why we don't write
+directly
+\*[CODE]bin_PROGRAMS\~=\~grolbp\*[CODE OFF] in a Makefile.am in the
+grolbp directory.)
+.PP
+Then, we list the sources of grolbp like this:
+.QUOTE ADJUST -4p
+.IL 1m
+.HI 1m
+.CODE
+grolbp_SOURCES = \\
+src/devices/grolbp/lbp.cpp \\
+src/devices/grolbp/lbp.h \\
+src/devices/grolbp/charset.h
+.CODE OFF
+.QUOTE OFF
+.ILQ
+As you added `grolbp' to \*[CODE]bin_PROGRAMS\*[CODE OFF],
+you need to define the sources of grolbp in the variable
+\*[CODE]grolbp_SOURCES\*[CODE OFF]\&.  If you write in another file
+\*[CODE]bin_PROGRAMS += foo\*[CODE OFF] you will list the sources
+of `foo' in \*[CODE]foo_SOURCES\*[CODE OFF]\&.
+.PP
+With these two statements, the resulting generated Makefile
+will contain everything that is needed to build, clean,
+install and uninstall the `grolbp' binary when invoking the
+adequate `make' command.  Also, the source files listed in
+\*[CODE]grolbp_SOURCES\*[CODE OFF] will automatically be included in
+the distribution tarball.  That is why the headers are also listed
+in \*[CODE]grolbp_SOURCES\*[CODE OFF]: it is not necessary to add
+them in order to correctly build `grolbp', but this way the headers
+will be distributed.  Note that:
+.
+.SP 3p
+.QUAD LEFT
+.HY OFF
+.
+.LIST
+.SHIFT_LIST 1m
+.ITEM
+The path to the files are relative to the top-level directory.
+.ITEM
+The binaries are generated in the top-level build directory.
+.ITEM
+The .o files are generated in the directory where the source files
+are located, or, in the case of an out-of-source build tree, in a
+directory that is the replication of the source tree directory.
+For example if you built groff in a `build' directory, lbp.o
+(object file from src/devices/grolbp/lbp.cpp) will be located in
+build/src/devices/grolbp/lbp.o.
+.LIST OFF
+.
+.SP 3p
+.JUSTIFY
+.HY DEFAULT
+.
+We will also see later the reasons; this is due to the non-recursive
+make design.
+.
+.HEADING 2 "Linking against a library"
+.
+.PP
+To list which libraries grolbp needs to link against, we just write:
+.QUOTE
+.IL
+.HI
+.CODE
+grolbp_LDADD = $(LIBM) \\
+libdriver.a \\
+libgroff.a \\
+lib/libgnu.a
+.CODE OFF
+.QUOTE OFF
+.ILQ
+Again, we use the variable \*[CODE]grolbp_LDADD\*[CODE OFF] because
+we added a program named `grolbp'.  This will also automatically
+set build dependencies between `grolbp' and the libraries it needs:
+`libdriver.a' and `libgroff.a', that are convenience libraries built
+within the groff project, will be compiled before grolbp.
+.
+.HEADING 2 "Preprocessor flags"
+.
+.PP
+Preprocessor flags that are common to all the binaries are listed
+in the variable \*[CODE]AM_CPPFLAGS\*[CODE OFF] in the top-level
+Makefile.am.  If a `foo' binary needs specific preprocessor
+flags, use \*[CODE]foo_CPPFLAGS\*[CODE OFF], for example, in
+src/devices/xditview/xditview.am, extra flags are needed to build
+gxditview and are added like this:
+.QUOTE
+.IL
+.HI
+.CODE
+gxditview_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) -Dlint \\
+-I$(top_builddir)/src/devices/xditview
+.CODE OFF
+.QUOTE OFF
+.ILQ
+.PP
+The use of specific CPPFLAGS changes the name of the generated objects:
+the .o object files are prefixed with the name of the program.
+For example, the .o file corresponding to src/devices/xditview/device.c
+will be src/devices/xditview/gxditview-device.o.
+.
+.HEADING 2 "Cleaning"
+.
+.PP
+You don't need to write rules to clean the programs listed in
+\*[CODE]bin_PROGRAMS\*[CODE OFF], `automake' will write them for
+you.  However, some programs might have generated sources that
+should be cleaned.  In this case, you have mainly two special
+variables to list extra files that should be cleaned:
+.
+.SP 3p
+.QUAD LEFT
+.HY OFF
+.
+.LIST
+.SHIFT_LIST 1m
+.ITEM
+\*[CODE]MOSTLYCLEANFILES\*[CODE OFF] for files that should be
+cleaned by `make mostlyclean'
+.ITEM
+\*[CODE]CLEANFILES\*[CODE OFF ] for files that should be cleaned by
+`make clean'
+.LIST OFF
+.
+.JUSTIFY
+.HY DEFAULT
+.SP 3p
+.
+There is also the possibility of writing custom rules.  We will see
+that later.
+.
+.HEADING 2 "Dependencies"
+.
+.PP
+We have already seen that when linking against a convenience
+library, the dependencies are already created by `automake'.
+However, some dependencies still need to be manually added, for
+example when a source file includes a generated header.  In this
+case, the easiest way is to add a plain-make dependency.  For
+example, src/roff/groff/groff.cpp includes defs.h, which is a
+generated header.  We just add in src/roff/groff/groff.am:
+.QUOTE
+.CODE
+src/roff/groff/groff.$(OBJEXT): defs.h
+.CODE OFF
+.QUOTE OFF
+.
+.HEADING 2 "Scripts"
+.
+.PP
+Apart from \*[CODE]bin_PROGRAMS\*[CODE OFF], there is another
+similar special variable for scripts:  \*[CODE]bin_SCRIPTS\*[CODE OFF]\&.
+The scripts listed in this variable will automatically be
+built (of course you have to provide your custom rule to build the
+script), installed and uninstalled when invoking 'make', 'make
+install' and 'make uninstall'.  The main difference is that unlike
+the programs listed in \*[CODE]bin_PROGRAMS\*[CODE OFF], the scripts
+will not be cleaned by default.  They are not distributed by default
+either.  In the groff project, \*[CODE]bin_SCRIPTS\*[CODE OFF] are
+cleaned because they are added to \*[CODE]MOSTLYCLEANFILES\*[CODE OFF]
+in the top-level Makefile.am.
+.PP
+A simple example are the gropdf and pdfmom scripts in
+src/devices/gropdf/gropdf.am:
+.CODE_SIZE 84
+.QUOTE_INDENT 1
+.QUOTE
+.CODE
+bin_SCRIPTS += gropdf pdfmom
+  [...]
+gropdf: $(gropdf_dir)/gropdf.pl $(SH_DEPS_SED_SCRIPT)
+        rm -f $@
+        sed -f $(SH_DEPS_SED_SCRIPT) \\
+            -e "s|[@]VERSION[@]|$(VERSION)|" \\
+            -e "s|[@]PERL[@]|$(PERL)|" \\
+            -e "s|[@]GROFF_FONT_DIR[@]|$(fontpath)|" \\
+            -e "s|[@]RT_SEP[@]|$(RT_SEP)|" $(gropdf_dir)/gropdf.pl >$@
+        chmod +x $@
+
+pdfmom: $(gropdf_dir)/pdfmom.pl $(SH_DEPS_SED_SCRIPT)
+        rm -f $@
+        sed -f $(SH_DEPS_SED_SCRIPT) \\
+            -e "s|[@]VERSION[@]|$(VERSION)|" \\
+            -e "s|[@]PERL[@]|$(PERL)|" $(gropdf_dir)/pdfmom.pl >$@
+        chmod +x $@
+.QUOTE OFF
+.QUOTE_INDENT 2m
+.CODE_SIZE 100
+Note that in this example the '@' symbol is protected by square
+brackets to prevent the substitution of the variable by `automake'.
+.
+.HEADING 1 "Non-recursive make schema"
+.
+.PP
+There are two possibilities for organizing the Makefile.am of a
+large project, using a recusive or a non-recursive `make'.
+.
+.HEADING 2 "1st possibility: make recursion"
+.
+.PP
+A top level Makefile.am includes another Makefile.am, using the
+\*[CODE]SUBDIRS\*[CODE OFF] directive, and the Makefile.am of each
+sub-directory lists the programs that should be built.  If we had
+chosen this type of organization, we would have a Makefile.am in
+src/devices/grolbp and in each directory that contain sources to
+build a program (tbl, eqn, troff etc ...).  We would write in the
+top-level Makefile.am:
+.QUOTE
+.IL
+.HI
+.CODE
+SUBDIRS = src/devices/grolbp \\
+\&... (and all the dir that build a program or a script)
+.CODE OFF
+.QUOTE OFF
+and in src/devices/grolbp, we would have a file Makefile.am that
+contains:
+.QUOTE
+.CODE
+bin_PROGRAMS = grolbp
+grolbp_SOURCES = lbp.cpp lbp.h charset.h
+.CODE OFF
+.QUOTE OFF
+.PP
+Only `grolbp' is affected to the variable \*[CODE]bin_PROGRAMS\*[CODE OFF]\&.
+It would be the same in, say, src/roff/troff: you would have a Makefile.am
+with \*[CODE]bin_PROGRAMS = troff\*[CODE OFF]\&.  We would have
+one generated Makefile per Makefile.am file: in the build tree
+you will have the top-level Makefile, grolbp's Makefile in
+src/devices/grolbp, troff's Makefile in src/roff/troff, and so on.
+When calling `make' to build everything, `make' will be recursively
+called in all the directories that have a Makefile.  Thus, the
+paths are logically relative to the directory that contains the
+Makefile.am.
+.PP
+This approach has the disadvantage of making dependencies harder
+to resolve: each Makefile does not know the targets of the other
+Makfiles.  It also makes the build slower.
+.
+.HEADING 2 "Non-recursive make used by the Groff project"
+.
+.PP
+The second possibility, which was chosen for the groff project, is to use
+a non-recursive make schema.  It is described in paragraph 7.3 of
+the Automake manual ("An Alternative Approach to Subdirectories"),
+based on the following paper from Peter Miller:
+.PDF_WWW_LINK http://miller.emu.id.au/pmiller/books/rmch/ \
+  SUFFIX . "\*[IT]Recursive Make Considered Harmful\*[PREV]"
+.PP
+The idea is to have a single Makefile that contains all the rules.
+That is why we have only a single Makefile.am in the top-level
+directory which includes all the .am files that define rules
+to build the various programs.  The inclusion is done with the
+\*[CODE]include\*[CODE OFF] directive, not \*[CODE]SUBDIRS\*[CODE OFF]\&.
+Using 'include' is like copying the contents of the included
+file into the top-level Makefile.am, and will not generate other
+Makefile.
+.PP
+We first say in this top-level Makefile.am:
+.QUOTE
+.CODE 
+bin_PROGAMS = 
+.CODE OFF
+.QUOTE OFF
+and then all the .am files that define a program to be built (e.g.
+src/devices/grolbp/grolbp.am, src/roff/troff/troff.am, and so on)
+overload this variable, so that at the end, all the programs that
+should be built are listed in this \*[CODE]bin_PROGRAMS\*[CODE OFF]
+variable.  This is the reason why all the paths in the various .am
+files are relative to the top-level directory: at the end we will
+have only one Makefile in the top-level directory of the build tree.
+.PP
+As the resulting single Makefile knows all the targets, the
+dependencies are easier to manage.  The build is also faster,
+particularly when compiling a single file: `make' is called once only
+and the file will be instantly rebuilt, while on a recursive make
+system, `make' will have to be invoked in all the sub-directories.
+.PP
+Note also that in order to make `gnulib' work with this
+non-recursive schema, the `non-recursive-gnulib-prefix-hack'
+configuration should be selected in bootstrap.conf.
+.
+.HEADING 1 "Installing data"
+.
+.PP
+Variables that end with \*[CODE]_DATA\*[CODE OFF] are special
+variables used to list files that should be installed in a
+particular location.  The prefix of the variables should refer to
+another previously defined variable that ends with a `dir' suffix.
+This varibale that ends with `dir' defines where the files should be
+installed.
+.
+.HEADING 2 "A simple case"
+.
+.PP
+For example, in font/devX100/devX100.am, we can see this:
+.QUOTE
+.CODE
+if !WITHOUT_X11
+devX100fontdir = $(fontdir)/devX100
+devX100font_DATA = $(DEVX100FONTS)
+endif
+.SP
+EXTRA_DIST += $(DEVX100FONTS)
+.CODE OFF
+.QUOTE OFF
+.WS -4
+\*[CODE]DEVX100FONTS\*[CODE OFF] is just a list of font files,
+defined at the begining of devX100.am.  \*[CODE]fontdir\*[CODE OFF]
+is where all the font directories are installed, it is defined
+in the top-level Makefile.am.  The conditional
+\*[CODE]if\~!WITHOUT_X11\*[CODE OFF]
+is used to prevent the installation of
+these files if X11 is not available.
+.WS DEFAULT
+.PP
+We first define where we wants to install the devX100 fonts with:
+.QUOTE
+.CODE
+devX100fontdir = $(fontdir)/devX100
+.CODE OFF
+.QUOTE OFF
+Because we declared a variable ending with `dir', we are allowed
+to define \*[CODE]devX100font_DATA\*[CODE OFF] (you remove the
+`dir' suffix and add \*[CODE]_DATA\*[CODE OFF]).  Note that
+wildcards are not supported in the special variable that end with
+\*[CODE]_DATA\*[CODE OFF]\&.
+.PP
+With these two lines, `make install' will install the files
+listed in \*[CODE]DEVX100FONTS\*[CODE OFF] and `make uninstall'
+will uninstall them.  \*[CODE]devX100fontdir\*[CODE OFF] will be
+automatically created if missing during the installation
+process, but not removed during the uninstall.  The complete
+\*[CODE]fontdir\*[CODE OFF] is removed by a custom uninstall rule
+(uninstall_groffdirs in Makefile.am).
+.PP
+Because the files listed in \*[CODE]devX100font_DATA\*[CODE OFF]
+are not distributed by default, we explicitely added them to the
+\*[CODE]EXTRA_DIST\*[CODE OFF] variable, which lists all the files
+that should be distributed and that are not taken into account by
+the default automake rules.
+.QUOTE
+.CODE
+  EXTRA_DIST += $(DEVX100FONTS)
+.CODE OFF
+.QUOTE OFF
+Another possibility would have been to add a `dist' prefix to the
+\*[CODE]devX100font_DATA\*[CODE OFF] variable, in this case the use
+of \*[CODE]EXTRA_DIST\*[CODE OFF] is useless (except of course if
+\*[CODE]WITHOUT_X11\*[CODE OFF] is true, in this case we don't
+install the files but we still have to distribute them):
+.QUOTE
+.CODE
+if !WITHOUT_X11
+devX100fontdir = $(fontdir)/devX100
+dist_devX100font_DATA = $(DEVX100FONTS)
+else
+EXTRA_DIST += $(DEVX100FONTS)
+endif
+.CODE OFF
+.QUOTE OFF
+.
+.HEADING 2 "Dealing with generated files"
+.
+.PP
+In the previous example, all the font files that must be installed
+were already present in the source tree.  But in some cases,
+you need to generate the files you intend to install.  In this
+case, the files should be installed but not distributed.  A
+simple way to deal with this is to add a `nodist' prefix to your
+\*[CODE]xxx_DATA\*[CODE OFF] variable.
+.PP
+For example in font/devps/devps.am, we have a list of
+font files already present in the source tree, defined
+by \*[CODE]DEVPSFONTFILES\*[CODE OFF], and another list
+of font files that are generated, listed in the variable
+\*[CODE]DEVPSFONTFILES_GENERATED\*[CODE OFF]\&.  They should all
+by installed in a `devps' directory under the fontdir.  Thus
+the following three lines, where we use the `dist' and `nodist'
+prefixes:
+.QUOTE
+.CODE
+devpsfontdir = $(fontdir)/devps
+dist_devpsfont_DATA = $(DEVPSFONTFILES) 
+nodist_devpsfont_DATA = $(DEVPSFONTFILES_GENERATED)
+.CODE OFF
+.QUOTE OFF
+The generated files are not cleaned by default, thus we add:
+.QUOTE
+.CODE
+MOSTLYCLEANFILES += $(DEVPSFONTFILES_GENERATED)
+.CODE OFF
+.QUOTE OFF
+.
+.HEADING 1 "Extending Automake's rules"
+.
+.HEADING 2 "Local clean rules"
+.
+.PP
+In most of the cases, the files that need to be cleaned are
+automatically determined by `automake', or were added to the
+\*[CODE]MOSTCLEANFILES\*[CODE OFF] or \*[CODE]CLEANFILES\*[CODE OFF]
+variables.  However, you might need to define a specific rule
+to clean some files that were not added to any list.  Automake
+defines a set of targets to extend the clean targets with your
+own rules: clean-local, mostlyclean-local, distclean-local or
+maintainerclean-local.  An example of such extension exists in
+font/devpdf/devpdf.am: because some fonts are not explicitely listed
+in a \*[CODE]xxx_DATA\*[CODE OFF] variable but generated by a custom
+rule, we define an extra rule to extend the `mostlyclean' target:
+.CODE_SIZE 92
+.QUOTE
+.CODE
+mostlyclean-local: mostlyclean_devpdf_extra
+mostlyclean_devpdf_extra:
+        @echo Cleaning font/devpdf
+        rm -rf $(top_builddir)/font/devpdf/enc \\
+          $(top_builddir)/font/devpdf/map;
+        if test -d $(top_builddir)/font/devpdf; then \\
+          for f in $(GROFF_FONT_FILES); do \\
+            rm -f $(top_builddir)/font/devpdf/$$f; \\
+          done; \\
+        fi
+.CODE OFF
+.QUOTE OFF
+.
+.NO_FLEX OFF \" Prevent upcoming NEWPAGE from disabling flex-spacing.
+.HEADING 2 "Local install/uninstall rules and hooks"
+.
+.PP
+Similarly to the clean rules, there are extensions to install and
+uninstall rules.  They come with two flavous, local rules and hooks.
+.
+.SP 3p
+.QUAD LEFT
+.HY OFF
+.
+.LIST
+.SHIFT_LIST 1m
+.ITEM
+There are 2 rules to extend install commands: `install-exec-local'
+for binaries and `install-data-local' for data.
+.ITEM
+There is 1 uninstall local rule: `uninstall-local'.
+.LIST OFF
+.
+.SP 3p
+.JUSTIFY
+.HY DEFAULT
+.
+There are no garantees on the order of execution of these local
+rules.  An example of local rule is the installation of GXditview.ad
+and GXditview-color.ad files in src/devices/xditview/xditview.am: if
+theses files are already installed, the old files are first saved.
+Also, the final file that is installed is stripped from its .ad
+suffix.  Thus the usage of a custom rule rather than the definition
+of a \*[CODE]xxx_DATA\*[CODE OFF] variable:
+.FLEX
+.QUOTE
+.CODE
+# Custom installation of GXditview.ad and GXditview-color.ad
+install-data-local: install_xditview
+uninstall-local: uninstall_xditview
+.SP
+[...]
+install_xditview: $(xditview_srcdir)/GXditview.ad
+        -test -d $(DESTDIR)$(appresdir) \\
+          || $(mkinstalldirs) $(DESTDIR)$(appresdir)
+        if test -f $(DESTDIR)$(appresdir)/GXditview; then \\
+          mv $(DESTDIR)$(appresdir)/GXditview \\
+            $(DESTDIR)$(appresdir)/GXditview.old; \\
+        fi
+        [...]
+        $(INSTALL_DATA) $(xditview_srcdir)/GXditview.ad \\
+          $(DESTDIR)$(appresdir)/GXditview
+.CODE OFF
+.QUOTE OFF
+.PP
+Hooks, on the other hand, are garanteed to be executed after all the
+standard targets have been executed.
+.BR
+.SP 3p
+.QUAD LEFT
+.HY OFF
+.
+.LIST
+.SHIFT_LIST 1m
+.SP 3p
+.ITEM
+There are 2 install hooks: `install-exec-hook' and
+`install-data-hook'.
+.ITEM
+There is 1 uninstall hook: `unintall-hook'
+.LIST OFF
+.
+.SP 3p
+.JUSTIFY
+.HY DEFAULT
+.
+.PP
+An example of hook is the `uninstall_groffdirs' rule in the
+top-level Makefile.am.  This hook is used to remove all the
+directories specific to groff introduced by the installation
+process.  Obviously it could not be a local extension of `uninstall'
+because the order of execution is not guaranteed.
+.QUOTE
+.CODE
+# directories specific to groff
+uninstall-hook: uninstall_groffdirs
+uninstall_groffdirs:
+        if test -d $(DESTDIR)$(datasubdir); then \\
+          rm -rf $(DESTDIR)$(fontdir); \\
+          rm -rf $(DESTDIR)$(oldfontdir); \\
+          rmdir $(DESTDIR)$(datasubdir); \\
+        fi
+        [...]
+.CODE OFF
+.QUOTE OFF
+.TOC
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
diff --git a/doc/doc.am b/doc/doc.am
new file mode 100644 (file)
index 0000000..a3a2ff0
--- /dev/null
@@ -0,0 +1,487 @@
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#      Original Makefile.sub written by Werner Lemberg <wl@gnu.org>
+#      Automake migration by 
+#      Bertrand Garrigues <bertrand.garrigues@laposte.net>
+#
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+doc_srcdir = $(abs_top_srcdir)/doc
+doc_builddir = $(abs_top_builddir)/doc
+
+DOC_SED = $(SED) -e "s;[@]VERSION[@];$(VERSION);"
+
+DOC_GROFF_ONLY=\
+  GROFF_COMMAND_PREFIX= \
+  GROFF_BIN_PATH="$(GROFF_BIN_PATH)" \
+  $(GROFFBIN) -I$(abs_top_builddir) -M $(doc_srcdir) \
+       $(TFLAG) $(FFLAG) -Upet -ww 
+
+DOC_GROFF = $(DOC_SED) $< | $(DOC_GROFF_ONLY)
+
+# Other doc, installed in $(docdir)
+if BUILD_OTHERDOC
+# Files located in the source tree
+DOCFILES= \
+  doc/meref.me \
+  doc/meintro.me \
+  doc/meintro_fr.me \
+  doc/pic.ms
+# Files generated in the build tree
+PROCESSEDDOCFILES = \
+  doc/meref.ps \
+  doc/meintro.ps \
+  doc/meintro_fr.ps \
+  doc/pic.ps
+
+otherdocdir = $(docdir)
+dist_otherdoc_DATA = $(DOCFILES)
+nodist_otherdoc_DATA = $(PROCESSEDDOCFILES)
+MOSTLYCLEANFILES += $(PROCESSEDDOCFILES)
+else
+EXTRA_DIST += $(DOCFILES)
+endif
+
+# pdf doc, written in mom and therefore using contrib/mom/mom.am
+# definitions
+EXTRA_DIST += doc/automake.mom
+if BUILD_PDFDOC
+docpdfdocdir = $(pdfdocdir)
+nodist_docpdfdoc_DATA = doc/automake.pdf
+MOSTLYCLEANFILES += doc/automake.pdf
+endif
+doc/automake.pdf: doc/automake.mom \
+  groff troff gropdf pdfmom font/devpdf/build_font_files \
+  contrib/mom/om.tmac
+
+# GNU PIC html documentation, installed in $(htmldocdir)
+# Other pic*.html files are installed by the local rule
+if BUILD_HTML
+HTMLDOCFILES = \
+  doc/pic.html
+htmlpicdir = $(htmldocdir)
+htmlpic_DATA = $(HTMLDOCFILES)
+HTMLDOCFILESALL = pic*.html
+HTMLDOCIMAGEFILES = pic*
+endif
+
+# Examples files, installed in $(exampledir)
+
+# source tree files
+EXAMPLEFILES = \
+  doc/webpage.ms \
+  doc/groff.css \
+  doc/grnexmpl.g \
+  doc/grnexmpl.me
+
+if BUILD_EXAMPLES
+# Generated in the build tree
+PROCESSEDEXAMPLEFILES = \
+  doc/webpage.ps \
+  doc/grnexmpl.ps
+docexamplesdir = $(exampledir)
+dist_docexamples_DATA = $(EXAMPLEFILES)
+nodist_docexamples_DATA = $(PROCESSEDEXAMPLEFILES)
+MOSTLYCLEANFILES += $(PROCESSEDEXAMPLEFILES)
+else
+EXTRA_DIST += $(EXAMPLEFILES)
+endif
+
+if BUILD_HTMLEXAMPLES
+# webpage.html is generated, webpage*.html files are installed by the local rule.
+HTMLEXAMPLEFILES = doc/webpage.html
+HTMLEXAMPLEFILESALL = webpage*.html
+HTMLEXAMPLEIMAGEFILES = webpage*
+htmlexamplesdir = $(exampledir)
+nodist_htmlexamples_DATA = $(HTMLEXAMPLEFILES)
+endif
+
+imagedir = img
+htmldocimagedir = $(htmldocdir)/img
+exampleimagedir = $(exampledir)/img
+
+MOSTLYCLEANFILES += doc/examples.stamp
+
+EXTRA_DIST += \
+  doc/gnu.xpm \
+  doc/fixinfo.sh \
+  doc/txi-en.tex
+
+SUFFIXES += .me .ms .ps .html .txt .texi .dvi .pdf .xhtml
+
+# For simplicity, we always call preconv, grn, and eqn.
+.me.txt:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(DOC_GROFF) -k -Tutf8 -ge -me >$@
+.me.ps:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(DOC_GROFF) -k -Tps -ge -me >$@
+
+.ms.html:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(DOC_GROFF) -P-p -P-b -P-I`basename $< | sed -e 's|.ms$$||'` \
+                       -P-D$(imagedir) -Thtml -ms >$@
+.ms.txt:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(DOC_GROFF) -Tascii -ms -mwww >$@
+.ms.ps:
+       $(GROFF_V)$(MKDIR_P) `dirname $@` \
+       && $(DOC_GROFF) -Tps -ms -mwww >$@
+
+$(PROCESSEDEXAMPLEFILES): $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS) gnu.eps
+$(PROCESSEDEXAMPLEFILES): $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA) $(hdtbltmac_DATA)
+$(PROCESSEDEXAMPLEFILES): $(dist_tmac_DATA) $(nodist_tmac_DATA)
+$(PROCESSEDDOCFILES): $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS) gnu.eps
+
+doc/pic.html: tmac/www.tmac
+doc/pic.html: $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS)
+doc/pic.html: doc/examples.stamp
+doc/pic.html: $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA)
+doc/pic.html: $(doc_srcdir)/pic.ms $(devhtmlfont_DATA)
+       $(GROFF_V)$(MKDIR_P) $(doc_builddir) \
+       && cd $(doc_builddir) \
+       && $(DOC_SED) $(doc_srcdir)/pic.ms \
+          | $(DOC_GROFF_ONLY) -P-p -P-Ipic -P-D$(imagedir) -P-jpic \
+                              -Thtml -ms > pic.html
+
+doc/examples.stamp: doc/groff.css
+       @$(MKDIR_P) $(doc_builddir)
+       test -f $(doc_builddir)/groff.css || cp $(doc_srcdir)/groff.css $(doc_builddir)
+       echo timestamp > $@
+
+doc/webpage.html: $(bin_PROGRAMS) $(prefixexecbin_PROGRAMS)
+doc/webpage.html: doc/examples.stamp $(devhtmlfont_DATA)
+doc/webpage.html: $(dist_devpsfont_DATA) $(nodist_devpsfont_DATA) 
+doc/webpage.html: $(doc_srcdir)/webpage.ms gnu.eps $(doc_srcdir)/groff.css
+       $(GROFF_V)$(MKDIR_P) doc \
+       && cd $(doc_builddir) \
+       && $(DOC_SED) $(doc_srcdir)/webpage.ms \
+          | $(DOC_GROFF_ONLY) -P-jwebpage -P-nrpb -P-Iwebpage \
+                              -P-D$(imagedir) -Thtml -ms > webpage.html
+
+doc/grnexmpl.ps: doc/grnexmpl.me doc/grnexmpl.g
+
+# Note that we remove groff.css only if out-of-source build tree
+mostlyclean-local: mostlyclean_doc
+mostlyclean_doc:
+if BUILD_HTML
+       if test -d $(doc_builddir); then \
+         cd $(doc_builddir) && \
+         for f in $(HTMLDOCFILESALL); do \
+           $(RM) $$f; \
+         done; \
+       fi
+       if test -d $(doc_builddir)/$(imagedir); then \
+         cd $(doc_builddir)/$(imagedir) && \
+         for f in $(HTMLDOCIMAGEFILES); do \
+           $(RM) $$f; \
+         done; \
+       fi
+endif
+       if test $(top_builddir) != $(top_srcdir); then \
+         $(RM) $(top_builddir)/doc/groff.css; \
+       fi
+
+if BUILD_HTMLEXAMPLES
+       if test -d $(doc_builddir); then \
+         cd $(doc_builddir) && \
+         for f in $(HTMLEXAMPLEFILESALL); do \
+           $(RM) $$f; \
+         done; \
+       fi
+       if test -d $(doc_builddir)/$(imagedir); then \
+         cd $(doc_builddir)/$(imagedir) && \
+         for f in $(HTMLEXAMPLEIMAGEFILES); do \
+           $(RM) $$f; \
+         done; \
+       fi
+endif
+
+install-data-hook: install_doc_htmldoc
+install_doc_htmldoc:
+if BUILD_HTML
+       cd $(doc_builddir) && \
+       for f in `ls $(HTMLDOCFILESALL)`; do \
+         $(RM) $(DESTDIR)$(htmldocdir)/$$f; \
+         $(INSTALL_DATA) $$f $(DESTDIR)$(htmldocdir)/$$f; \
+       done
+       -test -d $(DESTDIR)$(htmldocimagedir) \
+         || $(mkinstalldirs) $(DESTDIR)$(htmldocimagedir)
+       $(RM) $(DESTDIR)$(htmldocimagedir)/$(HTMLDOCIMAGEFILES)
+       $(INSTALL_DATA) $(doc_builddir)/$(imagedir)/$(HTMLDOCIMAGEFILES) \
+         $(DESTDIR)$(htmldocimagedir)
+endif
+
+install-data-hook: install_doc_examples
+install_doc_examples: gnu.eps
+if BUILD_EXAMPLES
+# Prefer gnu.eps in builddir over srcdir.
+       d=.; test -f "gnu.eps" || d=$(doc_srcdir); \
+         $(RM) $(DESTDIR)$(exampledir)/gnu.eps; \
+         $(INSTALL_DATA) $$d/gnu.eps $(DESTDIR)$(exampledir)/gnu.eps
+endif
+if BUILD_HTMLEXAMPLES
+       cd $(doc_builddir) && \
+       for f in `ls $(HTMLEXAMPLEFILESALL)`; do \
+         $(RM) $(DESTDIR)$(exampledir)/$$f; \
+         $(INSTALL_DATA) $$f $(DESTDIR)$(exampledir)/$$f; \
+       done
+       -test -d $(DESTDIR)$(exampleimagedir) \
+         || $(mkinstalldirs) $(DESTDIR)$(exampleimagedir)
+       $(RM) $(DESTDIR)$(exampleimagedir)/$(HTMLEXAMPLEIMAGEFILES)
+       $(INSTALL_DATA) $(doc_builddir)/$(imagedir)/$(HTMLEXAMPLEIMAGEFILES) \
+         $(DESTDIR)$(exampleimagedir)
+endif
+
+uninstall-hook: uninstall_doc_examples uninstall_doc_htmldoc uninstall_mom
+uninstall_doc_examples:
+if BUILD_EXAMPLES
+       $(RM) -f $(DESTDIR)$(exampledir)/gnu.eps
+endif
+if BUILD_HTMLEXAMPLES
+       -test -d $(DESTDIR)$(docexamplesdir) && \
+       cd $(DESTDIR)$(docexamplesdir) && \
+       for f in $(HTMLEXAMPLEFILESALL); do \
+         $(RM) $$f; \
+       done
+       -test -d $(DESTDIR)$(docexamplesdir)/$(imagedir) && \
+       cd $(DESTDIR)$(docexamplesdir)/$(imagedir) && \
+       for f in $(HTMLEXAMPLEIMAGEFILES); do \
+         $(RM) $$f; \
+       done
+       -rmdir $(DESTDIR)$(docexamplesdir)/$(imagedir)
+       -rmdir $(DESTDIR)$(docexamplesdir)
+endif
+
+uninstall_doc_htmldoc:
+if BUILD_HTML
+       -test -d $(DESTDIR)$(htmldocdir) && \
+       cd $(DESTDIR)$(htmldocdir) && \
+       for f in $(HTMLDOCFILESALL); do \
+         $(RM) $$f; \
+       done
+       -test -d $(DESTDIR)$(htmldocdir)/$(imagedir) && \
+       cd $(DESTDIR)$(htmldocdir)/$(imagedir) && \
+       for f in $(HTMLDOCIMAGEFILES); do \
+         $(RM) $$f; \
+       done
+       -rmdir $(DESTDIR)$(htmldocdir)/$(imagedir)
+       -rmdir $(DESTDIR)$(htmldocdir)
+endif
+
+# Texinfo doc
+#
+# Users who want to print out the groff manual are expected to have a
+# working TeX installation.  Note that texi2dvi properly honours the
+# `MAKEINFO' environment variable.
+#
+# We can't use automake's facilities because the make dist target attempts to 
+# generate a pdf version of groff.texi by invoking texi2dvi without the -e 
+# option, which is needed to build this file.
+# info_TEXINFOS = doc/groff.texi
+# doc_groff_TEXINFOS = doc/fdl.texi
+#
+# Note that GNU standards require to install only info doc. Info doc
+# can still be disabled by passing 
+# --with-doc=<something else than info or yes> 
+# to configure
+
+all: build_infodoc
+if BUILD_INFODOC
+build_infodoc: doc/groff.info
+groffinfodir = $(infodir)
+groffpdfdir = $(infodir)
+MOSTLYCLEANFILES += doc/groff.info doc/groff.info-2 doc/groff.info-2
+doc/groff.info: $(doc_srcdir)/groff.texi
+       @$(MKDIR_P) $(doc_builddir)
+       LANG=C \
+       LC_ALL=C \
+       $(MAKEINFO) -o doc/groff.info --enable-encoding -I$(doc_srcdir) $(doc_srcdir)/groff.texi
+else
+build_infodoc:
+endif
+EXTRA_DIST += doc/groff.texi doc/fdl.texi
+
+# GNU Make has a built-in variable TEXI2DVI but it is not the case of
+# all 'make' implementation.  As it default to 'texi2dvi' we simply
+# redefine it here.
+
+TEXI2DVI = texi2dvi
+texi2dvi_missing = no
+# Rules to generate various doc files from .texi files.
+.texi.txt:
+       @$(MKDIR_P) $(doc_builddir)
+       LANG=C \
+       LC_ALL=C \
+       $(MAKEINFO) --enable-encoding -I$(doc_srcdir) --plaintext -o $@ $<
+
+.texi.dvi:
+if HAVE_TEXI2DVI
+       @$(MKDIR_P) $(doc_builddir)
+       LANG=C \
+       LC_ALL=C \
+       TEXINPUTS="$(top_srcdir)/build-aux:$(TEXINPUTS)" \
+       MAKEINFO='$(MAKEINFO) -I $(doc_srcdir)' \
+       $(TEXI2DVI) -e --batch --build-dir=doc/`basename $@`.t2d -o $@ $<
+else
+       @echo "Program texi2dvi is missing, cannot generate dvi doc"; \
+       exit 1
+endif
+
+.texi.pdf:
+if HAVE_TEXI2DVI
+       @$(MKDIR_P) $(doc_builddir)
+       LANG=C \
+       LC_ALL=C \
+       TEXINPUTS="$(top_srcdir)/build-aux:$(TEXINPUTS)" \
+       MAKEINFO='$(MAKEINFO) -I $(doc_srcdir)' \
+       $(TEXI2DVI) -e --batch --pdf --build-dir=doc/`basename $@`.t2p -o $@ $<
+else
+       @echo "Program texi2dvi is missing, cannot generate pdf doc"; \
+       exit 1
+endif
+
+# This will generate both html split into several files and html doc
+# in a single file. If texinfo version < 5.0, we process the resulting
+# (mono) .html file with fixinfo.sh du to a problem with blockquote
+# closing (for example 5.6.1 Setting Registers, the 'Request'
+# blockquote is not properly closed, see fixinfo.sh for more details
+.texi.html:
+       @$(MKDIR_P) $(doc_builddir)/
+       LANG=C \
+       LC_ALL=C \
+       $(MAKEINFO) --html -I $(doc_srcdir) \
+         -o doc/`basename $@`.node $<
+       LANG=C \
+       LC_ALL=C \
+       $(MAKEINFO) --html -I $(doc_srcdir) --no-split \
+         -o $@ $<
+       if test "$(makeinfo_version_numeric)" -lt 5000; then \
+         echo "patching $@ with fixinfo.sh"; \
+         $(SHELL) $(doc_srcdir)/fixinfo.sh \
+           doc/`basename $@`.mono/`basename $@`; \
+       fi
+
+# Targets to make all the doc in all formats. These doc are not built
+# by default. pdf, dvi, ps, html and their install equivalent
+# install-pdf, install-dvi, install-ps, install-html are standard
+# Automake targets.
+
+if BUILD_INFODOC
+doc: doc_all
+doc_all: doc_txt dvi pdf html
+doc_txt: doc/groff.txt
+dvi: doc_dvi
+doc_dvi: doc/groff.dvi
+pdf: doc_pdf
+doc_pdf: doc/groff.pdf
+html: doc_html
+doc_html: doc/groff.html
+install-doc: install-pdf install-html
+endif
+
+distclean-local: clean_infodoc clean_otherdoc
+maintainer-clean-local: clean_infodoc clean_otherdoc
+clean_infodoc:
+       -$(RM) $(doc_builddir)/groff.info*
+       -$(RM) $(doc_builddir)/groff.pdf
+       -$(RM) $(doc_builddir)/groff.dvi
+       -$(RM) -r $(doc_builddir)/groff.html.*
+clean_otherdoc:
+       -cd $(doc_builddir) && \
+         $(RM) -r *.pdf *.html *.txt *.dvi *.t2p *.t2d
+
+install-data-local: install_infodoc
+if BUILD_INFODOC
+install_infodoc: doc/groff.info
+       -test -d $(DESTDIR)$(infodir) || $(mkinstalldirs) $(DESTDIR)$(infodir)
+         for p in doc/groff.info `ls doc/groff.info*`; do \
+           f=`basename $$p`; \
+           $(RM) $(DESTDIR)$(infodir)/$$f; \
+           $(INSTALL_DATA) $$p $(DESTDIR)$(infodir)/$$f; \
+         done
+       $(INSTALL_INFO) --info-dir=$(DESTDIR)$(infodir) \
+         $(DESTDIR)$(infodir)/groff.info
+install-pdf-local: doc/groff.pdf
+       -test -d $(DESTDIR)$(pdfdocdir) || $(mkinstalldirs) $(DESTDIR)$(pdfdocdir)
+       cp $(top_builddir)/doc/groff.pdf $(DESTDIR)$(pdfdocdir)
+install-html-local: doc/groff.html
+       -test -d $(DESTDIR)$(htmldocdir)/groff.html.mono || $(mkinstalldirs) $(DESTDIR)$(htmldocdir)/groff.html.mono
+       cp -r $(top_builddir)/doc/groff.html $(DESTDIR)$(htmldocdir)/groff.html.mono
+       cp -r $(top_builddir)/doc/groff.html.node $(DESTDIR)$(htmldocdir)
+else
+install_infodoc:
+endif
+
+uninstall-local: uninstall_infodoc uninstall-pdf uninstall-html
+uninstall_doc: uninstall-local
+uninstall-doc: uninstall-local
+uninstall_infodoc:
+if BUILD_INFODOC
+       -$(INSTALL_INFO) --remove --info-dir=$(DESTDIR)$(infodir) \
+         $(DESTDIR)$(infodir)/groff.info
+       -for f in `ls $(DESTDIR)$(infodir)/groff.info*`; do \
+         $(RM) $$f; \
+       done
+endif
+uninstall-pdf:
+if BUILD_INFODOC
+       -$(RM) -f $(DESTDIR)$(pdfdocdir)/groff.pdf 
+endif
+uninstall-html:
+if BUILD_INFODOC
+       -$(RM) -r $(DESTDIR)$(htmldocdir)/groff.html.*
+endif
+
+# File used by contrib/hdtbl and contrib/pdfmark. It is distributed in
+# doc.eps. We try in priority to use the file in 'doc'.
+EXTRA_DIST += doc/gnu.xpm
+MOSTLYCLEANFILES += gnu.eps
+gnu.eps:
+       echo $(XPMTOPPM)
+       if test -f $(top_srcdir)/doc/gnu.eps; then \
+         cp $(top_srcdir)/doc/gnu.eps . ; \
+       elif test -f $(top_builddir)/doc/gnu.eps; then \
+         cp $(top_builddir)/doc/gnu.eps . ; \
+       else \
+         if test ""$(XPMTOPPM) != "found"; then \
+           echo "Program xpmtoppm is missing, can't generate gnu.eps" ; \
+           exit 1; \
+         fi; \
+         if test ""$(pnmtops) != "found"; then \
+           echo "Program pnmtops is missing, can't generate gnu.eps" ; \
+           exit 1; \
+         fi; \
+         if test "$(pnmtops_nosetpage)" != "pnmtops -nosetpage"; then \
+           echo "Program pnmtops can't handle -nosetpage, can't generate gnu.eps" ; \
+           exit 1; \
+         fi; \
+         xpmtoppm $(top_srcdir)/doc/gnu.xpm | pnmdepth 15 \
+           | $(pnmtops_nosetpage) -noturn -rle >$@ ; \
+       fi
+
+# Copy gnu.eps in 'doc' directory
+dist-hook: dist-gnueps
+dist-gnueps:
+       chmod u+w $(distdir)/doc
+       cp -f gnu.eps $(distdir)/doc
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index 9c3bbe56e91de3ec7bcb6c58154034a2d7ad4090..46f6b817ee21eb57b5bfeec9f47ef4b35ef96e1c 100644 (file)
@@ -5,7 +5,7 @@
 @c hence no sectioning command or @node.
 
 @display
-Copyright @copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
+Copyright @copyright{} 2000-2018 Free Software Foundation, Inc.
 @uref{http://fsf.org/}
 
 Everyone is permitted to copy and distribute verbatim copies
index 2c853f8a4807dd72da9d3e7645bd6013e06260e4..47127f824210d8ab32aa5679b8146682469883c6 100644 (file)
@@ -3,7 +3,7 @@
 # Fix a problem with HTML output produced by makeinfo
 #   (tested with versions 4.8 and 4.13).
 #
-# groff.texinfo uses (after macro expansion) something like
+# groff.texi uses (after macro expansion) something like
 #
 #   @deffn ...
 #   @XXindex ...
 # @deffn and @deffnx.
 #
 # Note that this script is a quick hack and tightly bound to the current
-# groff.texinfo macro code.  Hopefully, a new texinfo version makes it
+# groff.texi macro code.  Hopefully, a new texinfo version makes it
 # unnecessary.
-
+#
+# 09-2014: no more problem with texinfo 5.0 or higher
+#
 t=${TMPDIR-.}/gro$$.tmp
 
 cat $1 | sed '
index 3dc8ef62c8c96b11ca4a35c41ca1c80708d24117..6a836c7d336cd36951f0556c2e8206af8b765735 100644 (file)
@@ -69,20 +69,20 @@ daff0afc869cfdcfa9fedaa988dfecff00f0f3ff159bffd5ae84534554454c74b444474444944566
 5549effdff00fee2ff0ce8977adb8874764564444aee99ecff00f0f3ff159bffd5ae84534554454c
 74b4444744449445665549effdff00fee2ff0ce8977adb8874764564444aee99ecff00f0f3ff159b
 ffd5ae84534554454c74b4444744449445665549effdff00fee2ff0ce8977adb8874764564444aee
-99ecff00f0f5ff1dfee8defd9975ca4535454445c47844455444554456444558bfffffff76afe4ff
-0ee8448baa56654444444535797efc8bedff00f0f5ff1dfee8defd9975ca4535454445c478444554
-44554456444558bfffffff76afe4ff0ee8448baa56654444444535797efc8bedff00f0f5ff1dfee8
-defd9975ca4535454445c47844455444554456444558bfffffff76afe4ff0ee8448baa5665444444
-4535797efc8bedff00f0f5ff1de7cef97cd76758a454545456754b4454545446455463855caaacdd
-a7bdafedff01fdbefbff10fd77a86754454445444444896446effc9eeeff00f0f5ff1de7cef97cd7
-6758a454545456754b4454545446455463855caaacdda7bdafedff01fdbefbff10fd77a867544544
-45444444896446effc9eeeff00f0f5ff1de7cef97cd76758a454545456754b445454544645546385
-5caaacdda7bdafedff01fdbefbff10fd77a86754454445444444896446effc9eeeff00f0f6ff1efe
-8e758a849ec65488444467c8646794564644444454555757efca78bffaefedff19d675affffffffe
-ed976666844443444343444455677898affbaeefff00f0f6ff1efe8e758a849ec65488444467c864
-6794564644444454555757efca78bffaefedff19d675affffffffeed976666844443444343444455
-677898affbaeefff00f0f6ff1efe8e758a849ec65488444467c8646794564644444454555757efca
-78bffaefedff19d675affffffffeed976666844443444343444455677898affbaeefff00f0f6ff1d
+99ecff00f0f5ff18fee8defd9975ca4535454445c47844455444554456444558bffeff0176afe4ff
+05e8448baa5665fe44054535797efc8bedff00f0f5ff18fee8defd9975ca4535454445c478444554
+44554456444558bffeff0176afe4ff05e8448baa5665fe44054535797efc8bedff00f0f5ff18fee8
+defd9975ca4535454445c47844455444554456444558bffeff0176afe4ff05e8448baa5665fe4405
+4535797efc8bedff00f0f5ff07e7cef97cd76758a4fe540356754b44fe540b46455463855caaacdd
+a7bdafedff01fdbefbff07fd77a86754454445fe4405896446effc9eeeff00f0f5ff07e7cef97cd7
+6758a4fe540356754b44fe540b46455463855caaacdda7bdafedff01fdbefbff07fd77a867544544
+45fe4405896446effc9eeeff00f0f5ff07e7cef97cd76758a4fe540356754b44fe540b4645546385
+5caaacdda7bdafedff01fdbefbff07fd77a86754454445fe4405896446effc9eeeff00f0f6ff11fe
+8e758a849ec65488444467c86467945646fe440954555757efca78bffaefedff02d675affeff13fe
+ed976666844443444343444455677898affbaeefff00f0f6ff11fe8e758a849ec65488444467c864
+67945646fe440954555757efca78bffaefedff02d675affeff13feed976666844443444343444455
+677898affbaeefff00f0f6ff11fe8e758a849ec65488444467c86467945646fe440954555757efca
+78bffaefedff02d675affeff13feed976666844443444343444455677898affbaeefff00f0f6ff1d
 c79889555655afc64664457efd75b594485445455445494674eefddeefdaecff039efb6466fd4412
 466558444334563454434555434459cfffe9eff0ff00f0f6ff1dc79889555655afc64664457efd75
 b594485445455445494674eefddeefdaecff039efb6466fd44124665584443345634544345554344
@@ -119,18 +119,18 @@ fd74469cb646bdb63459eeffd8efc9ff0dc7cd33334444588754334457dfccf2ff00f0faff0dfd74
 469cb646bdb63459eeffd8efc9ff0dc7cd33334444588754334457dfccf2ff00f0faff0cf8964444
 5885457dc436cefb8ec7ff028ab445fd3305345676654debf2ff00f0faff0cf89644445885457dc4
 36cefb8ec7ff028ab445fd3305345676654debf2ff00f0faff0cf89644445885457dc436cefb8ec7
-ff028ab445fd3305345676654debf2ff00f0faff0bc8ffeb7444455444895befb9c6ff0cfb8c9543
-3334444444577769faf2ff00f0faff0bc8ffeb7444455444895befb9c6ff0cfb8c95433334444444
-577769faf2ff00f0faff0bc8ffeb7444455444895befb9c6ff0cfb8c95433334444444577769faf2
+ff028ab445fd3305345676654debf2ff00f0faff0bc8ffeb7444455444895befb9c6ff05fb8c9543
+3334fe4403577769faf2ff00f0faff0bc8ffeb7444455444895befb9c6ff05fb8c95433334fe4403
+577769faf2ff00f0faff0bc8ffeb7444455444895befb9c6ff05fb8c95433334fe4403577769faf2
 ff00f0fbff0cfe7cbbcacdb6444455666ffb9fc5ff02b8fc43fd330444455568caf2ff00f0fbff0c
 fe7cbbcacdb6444455666ffb9fc5ff02b8fc43fd330444455568caf2ff00f0fbff0cfe7cbbcacdb6
 444455666ffb9fc5ff02b8fc43fd330444455568caf2ff00f0fbff0be7e555444569a7444558dfd8
 c4ff0cfa7fb53334433333457abbebeff3ff00f0fbff0be7e555444569a7444558dfd8c4ff0cfa7f
 b53334433333457abbebeff3ff00f0fbff0be7e555444569a7444558dfd8c4ff0cfa7fb533344333
-33457abbebeff3ff00f0fbff0b9bfc9cea7544568855da8b8eedff05edbbaaaabcefddff0b97e633
-333334578865569dcff3ff00f0fbff0b9bfc9cea7544568855da8b8eedff05edbbaaaabcefddff0b
-97e633333334578865569dcff3ff00f0fbff0b9bfc9cea7544568855da8b8eedff05edbbaaaabcef
-ddff0b97e633333334578865569dcff3ff00f0fcff0cfe7ffffeefffd9445776eff7dfefff09eb86
+33457abbebeff3ff00f0fbff0b9bfc9cea7544568855da8b8eedff05edbbaaaabcefddff0197e6fe
+330634578865569dcff3ff00f0fbff0b9bfc9cea7544568855da8b8eedff05edbbaaaabcefddff01
+97e6fe330634578865569dcff3ff00f0fbff0b9bfc9cea7544568855da8b8eedff05edbbaaaabcef
+ddff0197e6fe330634578865569dcff3ff00f0fcff0cfe7ffffeefffd9445776eff7dfefff09eb86
 7789998778778adff7ff02cbcdefecff0bfaa5333433433469dfffffbff3ff00f0fcff0cfe7ffffe
 efffd9445776eff7dfefff09eb867789998778778adff7ff02cbcdefecff0bfaa5333433433469df
 ffffbff3ff00f0fcff0cfe7ffffeefffd9445776eff7dfefff09eb867789998778778adff7ff02cb
@@ -143,36 +143,36 @@ a9abba88cffaff05fea8998889adecff0a77344555455444467cffaff3ff00f0fcff0be8ff944433
 55544433344458ffbff3ff00f0fcff0be8ff94443344446afb9efc8ff0ff0dfc69a899abdefeecba
 8668aa78cffcff07fb9aba988abdfcbdedff0ac87455544433344458ffbff3ff00f0fcff0be8ff94
 443344446afb9efc8ff0ff0dfc69a899abdefeecba8668aa78cffcff07fb9aba988abdfcbdedff0a
-c87455544433344458ffbff3ff00f0fcff0a9dc856789a987544dfffe7f0ff03fd747adffaff11ec
-877667dfffffffe978879bcedba98aecbfeeff0af7da53333333344456efbff3ff00f0fcff0a9dc8
-56789a987544dfffe7f0ff03fd747adffaff11ec877667dfffffffe978879bcedba98aecbfeeff0a
-f7da53333333344456efbff3ff00f0fcff0a9dc856789a987544dfffe7f0ff03fd747adffaff11ec
-877667dfffffffe978879bcedba98aecbfeeff0af7da53333333344456efbff3ff00f0fcff0a8f99
-8887765567977bffadf0ff1ca58efffffffdcfefffceffffffeb8549ffffd9968ceffb5becfffc89
-efeeff0af9c85333333443344679cef3ff00f0fcff0a8f998887765567977bffadf0ff1ca58effff
-fffdcfefffceffffffeb8549ffffd9968ceffb5becfffc89efeeff0af9c85333333443344679cef3
-ff00f0fcff0a8f998887765567977bffadf0ff1ca58efffffffdcfefffceffffffeb8549ffffd996
-8ceffb5becfffc89efeeff0af9c85333333443344679cef3ff00f0fdff0bfaad444444568aa86576
+c87455544433344458ffbff3ff00f0fcff0a9dc856789a987544dfffe7f0ff03fd747adffaff04ec
+877667dffeff09e978879bcedba98aecbfeeff02f7da53fe3304344456efbff3ff00f0fcff0a9dc8
+56789a987544dfffe7f0ff03fd747adffaff04ec877667dffeff09e978879bcedba98aecbfeeff02
+f7da53fe3304344456efbff3ff00f0fcff0a9dc856789a987544dfffe7f0ff03fd747adffaff04ec
+877667dffeff09e978879bcedba98aecbfeeff02f7da53fe3304344456efbff3ff00f0fcff0a8f99
+8887765567977bffadf0ff01a58efeff04fdcfefffcefeff0feb8549ffffd9968ceffb5becfffc89
+efeeff0af9c85333333443344679cef3ff00f0fcff0a8f998887765567977bffadf0ff01a58efeff
+04fdcfefffcefeff0feb8549ffffd9968ceffb5becfffc89efeeff0af9c85333333443344679cef3
+ff00f0fcff0a8f998887765567977bffadf0ff01a58efeff04fdcfefffcefeff0feb8549ffffd996
+8ceffb5becfffc89efeeff0af9c85333333443344679cef3ff00f0fdff01faadfe4406568aa86576
 df9ff1ff1dfa8efffffeffff9c885de67cffec9bfd848ddab98effffe754547ffffe89eeff0afd9f
-645aa6434696445ecef3ff00f0fdff0bfaad444444568aa86576df9ff1ff1dfa8efffffeffff9c88
+645aa6434696445ecef3ff00f0fdff01faadfe4406568aa86576df9ff1ff1dfa8efffffeffff9c88
 5de67cffec9bfd848ddab98effffe754547ffffe89eeff0afd9f645aa6434696445ecef3ff00f0fd
-ff0bfaad444444568aa86576df9ff1ff1dfa8efffffeffff9c885de67cffec9bfd848ddab98effff
+ff01faadfe4406568aa86576df9ff1ff1dfa8efffffeffff9c885de67cffec9bfd848ddab98effff
 e754547ffffe89eeff0afd9f645aa6434696445ecef3ff00f0fdff0bf666544565654458dec9bf9f
-f1ff1e9bfffffff9c8d99aa9485967ee6766cf9c65be88befdca8d4447349aeffd8ceeff097d4433
-47984348684eddf3ff00f0fdff0bf666544565654458dec9bf9ff1ff1e9bfffffff9c8d99aa94859
+f1ff009bfeff1af9c8d99aa9485967ee6766cf9c65be88befdca8d4447349aeffd8ceeff097d4433
+47984348684eddf3ff00f0fdff0bf666544565654458dec9bf9ff1ff009bfeff1af9c8d99aa94859
 67ee6766cf9c65be88befdca8d4447349aeffd8ceeff097d443347984348684eddf3ff00f0fdff0b
-f666544565654458dec9bf9ff1ff1e9bfffffff9c8d99aa9485967ee6766cf9c65be88befdca8d44
+f666544565654458dec9bf9ff1ff009bfeff1af9c8d99aa9485967ee6766cf9c65be88befdca8d44
 47349aeffd8ceeff097d443347984348684eddf3ff00f0fdff0bb888aaa8877655554ceffdbff2ff
 20e8cfffffc9b9aaab69b74b69586865565ba6d786b7559c5d644945a3465da9ea8eefff09786443
 3434685345bfbcf3ff00f0fdff0bb888aaa8877655554ceffdbff2ff20e8cfffffc9b9aaab69b74b
 69586865565ba6d786b7559c5d644945a3465da9ea8eefff097864433434685345bfbcf3ff00f0fd
 ff0bb888aaa8877655554ceffdbff2ff20e8cfffffc9b9aaab69b74b69586865565ba6d786b7559c
 5d644945a3465da9ea8eefff097864433434685345bfbcf3ff00f0fdff0b6efddb9865554445569f
-faeff2ff218effffff887b8a8c57c668874758754764655a869e644566d548a3943333335bd7dff0
-ff099a44333344447944bfbaf3ff00f0fdff0b6efddb9865554445569ffaeff2ff218effffff887b
-8a8c57c668874758754764655a869e644566d548a3943333335bd7dff0ff099a44333344447944bf
-baf3ff00f0fdff0b6efddb9865554445569ffaeff2ff218effffff887b8a8c57c668874758754764
-655a869e644566d548a3943333335bd7dff0ff099a44333344447944bfbaf3ff00f0feff0bfe7ffc
+faeff2ff008efeff17887b8a8c57c668874758754764655a869e644566d548a394fe33025bd7dff0
+ff099a44333344447944bfbaf3ff00f0fdff0b6efddb9865554445569ffaeff2ff008efeff17887b
+8a8c57c668874758754764655a869e644566d548a394fe33025bd7dff0ff099a44333344447944bf
+baf3ff00f0fdff0b6efddb9865554445569ffaeff2ff008efeff17887b8a8c57c668874758754764
+655a869e644566d548a394fe33025bd7dff0ff099a44333344447944bfbaf3ff00f0feff0bfe7ffc
 544444555556666df8f2ff22f8cfbea86ea55d697e56d575a546458546554355a64ba454439b34c4
 54334333345a7bf0ff099d544555433445b65dbaf3ff00f0feff0bfe7ffc544444555556666df8f2
 ff22f8cfbea86ea55d697e56d575a546458546554355a64ba454439b34c454334333345a7bf0ff09
@@ -194,17 +194,17 @@ ef8ff3ff25bce9fa56f648f659956f55d474944444a65784563455945b6594b4546c354363854333
 fa56f648f659956f55d474944444a65784563455945b6594b4546c354363854333349b9ff2ff09ab
 a433345533344346e9f3ff00f0feff0bf7fb59bba8754444458def8ff3ff25bce9fa56f648f65995
 6f55d474944444a65784563455945b6594b4546c354363854333349b9ff2ff09aba4333455333443
-46e9f3ff00f0feff0bf7ffb854346788787569ce9ff4ff26fe8ff77655f645f756a46e55a4747445
-44b566a4754554a446846479864a45435375434343499cf2ff098d7643333568634446daf3ff00f0
-feff0bf7ffb854346788787569ce9ff4ff26fe8ff77655f645f756a46e55a474744544b566a47545
-54a446846479864a45435375434343499cf2ff098d7643333568634446daf3ff00f0feff0bf7ffb8
-54346788787569ce9ff4ff26fe8ff77655f645f756a46e55a474744544b566a4754554a446846479
-864a45435375434343499cf2ff098d7643333568634446daf3ff00f0feff0bf8ff84589876555676
-6acd9ff4ff27e7ee99b445e754e945945f54c584654544b577c46454548566458a5d5c3864446545
-4343434486eff3ff0a7f8ac7333334774446faeff4ff00f0feff0bf8ff845898765556766acd9ff4
-ff27e7ee99b445e754e945945f54c584654544b577c46454548566458a5d5c386444654543434344
-86eff3ff0a7f8ac7333334774446faeff4ff00f0feff0bf8ff845898765556766acd9ff4ff27e7ee
-99b445e754e945945f54c584654544b577c46454548566458a5d5c38644465454343434486eff3ff
+46e9f3ff00f0feff0bf7ffb854346788787569ce9ff4ff21fe8ff77655f645f756a46e55a4747445
+44b566a4754554a446846479864a45435375fe4301499cf2ff098d7643333568634446daf3ff00f0
+feff0bf7ffb854346788787569ce9ff4ff21fe8ff77655f645f756a46e55a474744544b566a47545
+54a446846479864a45435375fe4301499cf2ff098d7643333568634446daf3ff00f0feff0bf7ffb8
+54346788787569ce9ff4ff21fe8ff77655f645f756a46e55a474744544b566a4754554a446846479
+864a45435375fe4301499cf2ff098d7643333568634446daf3ff00f0feff0bf8ff84589876555676
+6acd9ff4ff21e7ee99b445e754e945945f54c584654544b577c46454548566458a5d5c3864446545
+fe43024486eff3ff0a7f8ac7333334774446faeff4ff00f0feff0bf8ff845898765556766acd9ff4
+ff21e7ee99b445e754e945945f54c584654544b577c46454548566458a5d5c3864446545fe430244
+86eff3ff0a7f8ac7333334774446faeff4ff00f0feff0bf8ff845898765556766acd9ff4ff21e7ee
+99b445e754e945945f54c584654544b577c46454548566458a5d5c3864446545fe43024486eff3ff
 0a7f8ac7333334774446faeff4ff00f0feff0bf8fe576544455666567ace9ff4ff278dbb6a9544d8
 54da45a46f64d584554644c576c4858554655788fe8b84478445464444534344467df4ff0bfe8e55
 44333334557554cbdff4ff00f0feff0bf8fe576544455666567ace9ff4ff278dbb6a9544d854da45
@@ -224,11 +224,11 @@ ff0bfdf9a44578adb985445bff8ff5ff299afff6488a34c954ad54d66e44d494444655b679d4a5c5
 fdf9a44578adb985445bff8ff5ff299afff6488a34c954ad54d66e44d494444655b679d4a5c59666
 c9c445bfb343b54555364465443444456ef5ff03f8efd543fd330355a4cbeff4ff00f0fdff0af67b
 dfea6546988655cf8ff6ff2afaadff55487c34c9549d44c76c44b4a5445546975bc4a5d4a55dfdc3
-334543437735553444564434443446f5ff0bf7ffa43453333333347cebeff4ff00f0fdff0af67bdf
+334543437735553444564434443446f5ff04f7ffa43453fe3303347cebeff4ff00f0fdff0af67bdf
 ea6546988655cf8ff6ff2afaadff55487c34c9549d44c76c44b4a5445546975bc4a5d4a55dfdc333
-4543437735553444564434443446f5ff0bf7ffa43453333333347cebeff4ff00f0fdff0af67bdfea
+4543437735553444564434443446f5ff04f7ffa43453fe3303347cebeff4ff00f0fdff0af67bdfea
 6546988655cf8ff6ff2afaadff55487c34c9549d44c76c44b4a5445546975bc4a5d4a55dfdc33345
-43437735553444564434443446f5ff0bf7ffa43453333333347cebeff4ff00f0feff0bfcf9fb8545
+43437735553444564434443446f5ff04f7ffa43453fe3303347cebeff4ff00f0feff0bfcf9fb8545
 6875543345cf8ff6ff2ba8fb9d44486e34a7549c45d66a4594a4444446685ca47694844ae5e53465
 554368345434445545454433446ef6ff0bf7fd533346334333345dfbeff4ff00f0feff0bfcf9fb85
 456875543345cf8ff6ff2ba8fb9d44486e34a7549c45d66a4594a4444446685ca47694844ae5e534
@@ -248,12 +248,12 @@ ff00f0feff0bfaee887544459b85448cfd9cf7ff2d9affff5b54565e5486547847d4644866844535
 faf3ff00f0feff0bfaee887544459b85448cfd9cf7ff2d9affff5b54565e5486547847d464486684
 4535457a4959fe9a6544d5affb4486866834443444644544643744468ef7ff0a958b433333364334
 347ffaf3ff00f0feff0bfadc985459da534784578ad8f8ff2ff8bffbbf7844566f54855455488444
-464853543646696fedcdc84a46555effa543545b444443447446445547645ad7acf8ff0a74d54333
-3333543343affbf3ff00f0feff0bfadc985459da534784578ad8f8ff2ff8bffbbf7844566f548554
-55488444464853543646696fedcdc84a46555effa543545b444443447446445547645ad7acf8ff0a
-74d543333333543343affbf3ff00f0feff0bfadc985459da534784578ad8f8ff2ff8bffbbf784456
+464853543646696fedcdc84a46555effa543545b444443447446445547645ad7acf8ff0274d543fe
+3304543343affbf3ff00f0feff0bfadc985459da534784578ad8f8ff2ff8bffbbf7844566f548554
+55488444464853543646696fedcdc84a46555effa543545b444443447446445547645ad7acf8ff02
+74d543fe3304543343affbf3ff00f0feff0bfadc985459da534784578ad8f8ff2ff8bffbbf784456
 6f54855455488444464853543646696fedcdc84a46555effa543545b444443447446445547645ad7
-acf8ff0a74d543333333543343affbf3ff00f0feff0bfb9ba56ce9534775444598f7f9ff30fe7cff
+acf8ff0274d543fe3304543343affbf3ff00f0feff0bfb9ba56ce9534775444598f7f9ff30fe7cff
 fc5f9654556f655455445846a7577a556577bf777855547a7b683836acee63455c54454444645743
 65448457ed9af9ff02fb8663fd33043433436ffaf3ff00f0feff0bfb9ba56ce9534775444598f7f9
 ff30fe7cfffc5f9654556f655455445846a7577a556577bf777855547a7b683836acee63455c5445
@@ -273,43 +273,43 @@ ff0be7e834334334333343343afbf3ff00f0fdff0b7eec56b6434654445566ce9ffbff32fe7dffff
 8c73445534556644444334544cfe69faff0b7bd44334333343333334dfbef3ff00f0fdff0b7eec56
 b6434654445566ce9ffbff32fe7dffff7c7ba5565566487884963466556778887666789beffff65d
 9358c585455954ad8c73445534556644444334544cfe69faff0b7bd44334333343333334dfbef3ff
-00f0fdff0b7c94774445544454445bef8cfbff0ee8dfffffa887b46644886ec7458aeffaff1deeff
-fffffe48ec535948437958f9566ab87dbefecaa967675574578de69ffcff02f87b63fa330234ef9f
-f3ff00f0fdff0b7c94774445544454445bef8cfbff0ee8dfffffa887b46644886ec7458aeffaff1d
-eefffffffe48ec535948437958f9566ab87dbefecaa967675574578de69ffcff02f87b63fa330234
+00f0fdff0b7c94774445544454445bef8cfbff0ee8dfffffa887b46644886ec7458aeffaff00eefe
+ff19fe48ec535948437958f9566ab87dbefecaa967675574578de69ffcff02f87b63fa330234ef9f
+f3ff00f0fdff0b7c94774445544454445bef8cfbff0ee8dfffffa887b46644886ec7458aeffaff00
+eefeff19fe48ec535948437958f9566ab87dbefecaa967675574578de69ffcff02f87b63fa330234
 ef9ff3ff00f0fdff0b7c94774445544454445bef8cfbff0ee8dfffffa887b46644886ec7458aeffa
-ff1deefffffffe48ec535948437958f9566ab87dbefecaa967675574578de69ffcff02f87b63fa33
-0234ef9ff3ff00f0fdff0ca97bb6444444585446449ff8bffdff0dfe7effffaec7b6c46545bd7579
-cff3ff2ac57dc6335364543a58efffffb79ffffffffdcb86557455cf97cffddeffea556494333433
-333334334afdaff3ff00f0fdff0ca97bb6444444585446449ff8bffdff0dfe7effffaec7b6c46545
-bd7579cff3ff2ac57dc6335364543a58efffffb79ffffffffdcb86557455cf97cffddeffea556494
-333433333334334afdaff3ff00f0fdff0ca97bb6444444585446449ff8bffdff0dfe7effffaec7b6
-c46545bd7579cff3ff2ac57dc6335364543a58efffffb79ffffffffdcb86557455cf97cffddeffea
-556494333433333334334afdaff3ff00f0fdff0cc9ec64444448754475345fff89fdff0bc8efffea
-6bc6b484959866aef1ff08fe745885443334549ffdff01b6effdff17fdb685554bfc654456b847e7
-e633433343333333436ff9eff3ff00f0fdff0cc9ec64444448754475345fff89fdff0bc8efffea6b
-c6b484959866aef1ff08fe745885443334549ffdff01b6effdff17fdb685554bfc654456b847e7e6
-33433343333333436ff9eff3ff00f0fdff0cc9ec64444448754475345fff89fdff0bc8efffea6bc6
-b484959866aef1ff08fe745885443334549ffdff01b6effdff17fdb685554bfc654456b847e7e633
-433343333333436ff9eff3ff00f0fdff1be7a644654595644853464cfff88dffffd99fffffc969e5
+ff00eefeff19fe48ec535948437958f9566ab87dbefecaa967675574578de69ffcff02f87b63fa33
+0234ef9ff3ff00f0fdff02a97bb6fe4406585446449ff8bffdff0dfe7effffaec7b6c46545bd7579
+cff3ff0dc57dc6335364543a58efffffb79ffeff11fdcb86557455cf97cffddeffea5564943334fe
+330434334afdaff3ff00f0fdff02a97bb6fe4406585446449ff8bffdff0dfe7effffaec7b6c46545
+bd7579cff3ff0dc57dc6335364543a58efffffb79ffeff11fdcb86557455cf97cffddeffea556494
+3334fe330434334afdaff3ff00f0fdff02a97bb6fe4406585446449ff8bffdff0dfe7effffaec7b6
+c46545bd7579cff3ff0dc57dc6335364543a58efffffb79ffeff11fdcb86557455cf97cffddeffea
+5564943334fe330434334afdaff3ff00f0fdff0cc9ec64444448754475345fff89fdff0bc8efffea
+6bc6b484959866aef1ff08fe745885443334549ffdff01b6effdff10fdb685554bfc654456b847e7
+e633433343fe3303436ff9eff3ff00f0fdff0cc9ec64444448754475345fff89fdff0bc8efffea6b
+c6b484959866aef1ff08fe745885443334549ffdff01b6effdff10fdb685554bfc654456b847e7e6
+33433343fe3303436ff9eff3ff00f0fdff0cc9ec64444448754475345fff89fdff0bc8efffea6bc6
+b484959866aef1ff08fe745885443334549ffdff01b6effdff10fdb685554bfc654456b847e7e633
+433343fe3303436ff9eff3ff00f0fdff1be7a644654595644853464cfff88dffffd99fffffc969e5
 9595746aeff8ff00eff9ff0dea454589333684dffffdeffffc6ffbff0ea555635cfec8668aeff764
 54233334fd33014bf9f2ff00f0fdff1be7a644654595644853464cfff88dffffd99fffffc969e595
 95746aeff8ff00eff9ff0dea454589333684dffffdeffffc6ffbff0ea555635cfec8668aeff76454
 233334fd33014bf9f2ff00f0fdff1be7a644654595644853464cfff88dffffd99fffffc969e59595
 746aeff8ff00eff9ff0dea454589333684dffffdeffffc6ffbff0ea555635cfec8668aeff7645423
-3334fd33014bf9f2ff00f0fdff19f7d6585468574476447445efffb988889dffffff8957e564459e
+3334fd33014bf9f2ff00f0fdff10f7d6585468574476447445efffb988889dfeff058957e564459e
 f9ff03fea9568ff9ff0dfeedb845339d75bfffc57fffffb7fbff0cfee644338ebdfb99eac5333553
-fc33023467ccf2ff00f0fdff19f7d6585468574476447445efffb988889dffffff8957e564459ef9
+fc33023467ccf2ff00f0fdff10f7d6585468574476447445efffb988889dfeff058957e564459ef9
 ff03fea9568ff9ff0dfeedb845339d75bfffc57fffffb7fbff0cfee644338ebdfb99eac5333553fc
-33023467ccf2ff00f0fdff19f7d6585468574476447445efffb988889dffffff8957e564459ef9ff
+33023467ccf2ff00f0fdff10f7d6585468574476447445efffb988889dfeff058957e564459ef9ff
 03fea9568ff9ff0dfeedb845339d75bfffc57fffffb7fbff0cfee644338ebdfb99eac5333553fc33
 023467ccf2ff00f0fdff0cfab7a54674655764477544b9cffdff07fdecda5d56e437dffaff05feca
-aada35effbff10eeefffeedeb436e7487ff9a87efffff9affbff13cd554334448543443333334333
+aada35effbff10eeefffeedeb436e7487ff9a87efffff9affbff07cd55433444854344fe33084333
 43333334447a9ff2ff00f0fdff0cfab7a54674655764477544b9cffdff07fdecda5d56e437dffaff
-05fecaaada35effbff10eeefffeedeb436e7487ff9a87efffff9affbff13cd554334448543443333
-33433343333334447a9ff2ff00f0fdff0cfab7a54674655764477544b9cffdff07fdecda5d56e437
-dffaff05fecaaada35effbff10eeefffeedeb436e7487ff9a87efffff9affbff13cd554334448543
-44333333433343333334447a9ff2ff00f0fdff0cfc9e94664655764458473455cefdff06f99b875d
+05fecaaada35effbff10eeefffeedeb436e7487ff9a87efffff9affbff07cd55433444854344fe33
+08433343333334447a9ff2ff00f0fdff0cfab7a54674655764477544b9cffdff07fdecda5d56e437
+dffaff05fecaaada35effbff10eeefffeedeb436e7487ff9a87efffff9affbff07cd554334448543
+44fe3308433343333334447a9ff2ff00f0fdff0cfc9e94664655764458473455cefdff06f99b875d
 75838ff9ff04c446655339fbff11fe7445effffef955b3346ec8646effffef6dfbff02db9443fd33
 0034f8330248fe9ff2ff00f0fdff0cfc9e94664655764458473455cefdff06f99b875d75838ff9ff
 04c446655339fbff11fe7445effffef955b3346ec8646effffef6dfbff02db9443fd330034f83302
@@ -328,450 +328,457 @@ de6434dffffebff6fbff02fe9944f633044233343ceaf1ff00f0fcff158deb457866437655733543
 459b67ffffa947584b8357f9ff05e433344336effaff10fea46cffeffc644358de6434dffffebff6
 fbff02fe9944f633044233343ceaf1ff00f0fcff15bbfb669694455548434634554865faedb64559
 4a639ef9ff04934334338ffcff14d7558dfffaaacffffb4368adfe6338dfffffcff7effbff01c844
-fd33013434fd3305433333335e9ef1ff00f0fcff15bbfb669694455548434634554865faedb64559
-4a639ef9ff04934334338ffcff14d7558dfffaaacffffb4368adfe6338dfffffcff7effbff01c844
-fd33013434fd3305433333335e9ef1ff00f0fcff15bbfb669694455548434634554865faedb64559
-4a639ef9ff04934334338ffcff14d7558dfffaaacffffb4368adfe6338dfffffcff7effbff01c844
-fd33013434fd3305433333335e9ef1ff00f0fcff14e9fb5d6b54465455444534544685f77e764567
-4545f9ff04fd4335337cfcff15b5335646fffffc8bbffea8aeffed733aabaadedff8effbff01f854
-fb330043fc330334447bbff1ff00f0fcff14e9fb5d6b54465455444534544685f77e7645674545f9
+fd33ff34fd330043fe33015e9ef1ff00f0fcff15bbfb669694455548434634554865faedb645594a
+639ef9ff04934334338ffcff14d7558dfffaaacffffb4368adfe6338dfffffcff7effbff01c844fd
+33ff34fd330043fe33015e9ef1ff00f0fcff15bbfb669694455548434634554865faedb645594a63
+9ef9ff04934334338ffcff14d7558dfffaaacffffb4368adfe6338dfffffcff7effbff01c844fd33
+ff34fd330043fe33015e9ef1ff00f0fcff14e9fb5d6b54465455444534544685f77e7645674545f9
 ff04fd4335337cfcff15b5335646fffffc8bbffea8aeffed733aabaadedff8effbff01f854fb3300
 43fc330334447bbff1ff00f0fcff14e9fb5d6b54465455444534544685f77e7645674545f9ff04fd
 4335337cfcff15b5335646fffffc8bbffea8aeffed733aabaadedff8effbff01f854fb330043fc33
-0334447bbff1ff00f0fcff14f8c5d896547544644444344555a5f75c6654664489f9ff04f6335438
-bffdff15f946aeff74efffffd58ffffefffffa94368dfc8ccff7faff01fb44f533024475a9f0ff00
-f0fcff14f8c5d896547544644444344555a5f75c6654664489f9ff04f6335438bffdff15f946aeff
-74efffffd58ffffefffffa94368dfc8ccff7faff01fb44f533024475a9f0ff00f0fcff14f8c5d896
-547544644444344555a5f75c6654664489f9ff04f6335438bffdff15f946aeff74efffffd58ffffe
-fffffa94368dfc8ccff7faff01fb44f533024475a9f0ff00f0fcff14fa6de8756574564454544436
-54b6f56a6754543bdff9ff12b4367469bffffffffc65cfffff849fffffb69ffdff07f883357cfeeb
-ffe6faff09fd654333333334443334fd330253adccf0ff00f0fcff14fa6de8756574564454544436
-54b6f56a6754543bdff9ff12b4367469bffffffffc65cfffff849fffffb69ffdff07f883357cfeeb
-ffe6faff09fd654333333334443334fd330253adccf0ff00f0fcff14fa6de8756574564454544436
-54b6f56a6754543bdff9ff12b4367469bffffffffc65cfffff849fffffb69ffdff07f883357cfeeb
-ffe6faff09fd654333333334443334fd330253adccf0ff00f0fcff13fe8ffa756856554464634445
-55a5e56a7845535ff9ff04fc537fdaf5fdff0aa38fffffffd44efffffaaefdff07f98334bfffffff
-b7faff10fb64334333333344333433333343566e9ff0ff00f0fcff13fe8ffa756856554464634445
-55a5e56a7845535ff9ff04fc537fdaf5fdff0aa38fffffffd44efffffaaefdff07f98334bfffffff
-b7faff10fb64334333333344333433333343566e9ff0ff00f0fcff13fe8ffa756856554464634445
-55a5e56a7845535ff9ff04fc537fdaf5fdff0aa38fffffffd44efffffaaefdff07f98334bfffffff
-b7faff10fb64334333333344333433333343566e9ff0ff00f0fbff129ef759685457455443544555
-75b45a765443bff9ff04c57affffc6fdff0057fdff11f93dfffffc58effffffffa53339efeffff8b
-f9ff0f84334333333344333334333433bf78cff0ff00f0fbff129ef75968545745544354455575b4
-5a765443bff9ff04c57affffc6fdff0057fdff11f93dfffffc58effffffffa53339efeffff8bf9ff
-0f84334333333344333334333433bf78cff0ff00f0fbff129ef75968545745544354455575b45a76
-5443bff9ff04c57affffc6fdff0057fdff11f93dfffffc58effffffffa53339efeffff8bf9ff0f84
-334333333344333334333433bf78cff0ff00f0fbff11cbfb57954568484444444555548559675434
-f9ff20fd9bafffff6afffffffc5dfffcb9876639fffffe54bffffffffc533356779bff8df9ff0efc
-443533333344443333443646fe8aefff00f0fbff11cbfb57954568484444444555548559675434f9
-ff20fd9bafffff6afffffffc5dfffcb9876639fffffe54bffffffffc533356779bff8df9ff0efc44
-3533333344443333443646fe8aefff00f0fbff11cbfb57954568484444444555548559675434f9ff
-20fd9bafffff6afffffffc5dfffcb9876639fffffe54bffffffffc533356779bff8df9ff0efc4435
-33333344443333443646fe8aefff00f0fbff11f8fea9945895584534444956457459664437f8ff19
-e8effffe4dfffffffa38fb5333433335cfffffc4bffffffffe93fd3301597bf8ff0d743534333334
-443343535559fe8fefff00f0fbff11f8fea9945895584534444956457459664437f8ff19e8effffe
-4dfffffffa38fb5333433335cfffffc4bffffffffe93fd3301597bf8ff0d74353433333444334353
-5559fe8fefff00f0fbff11f8fea9945895584534444956457459664437f8ff19e8effffe4dffffff
-fa38fb5333433335cfffffc4bffffffffe93fd3301597bf8ff0d743534333334443343535559fe8f
-efff00f0fbff11fbafff8678c4644434445c5645544b66644bf8ff14eefffffa6ffffffffd345333
-34333894bffffff6bffdff06d4354456875449f8ff0dc43433333334444543537cbfd8efefff00f0
-fbff11fbafff8678c4644434445c5645544b66644bf8ff14eefffffa6ffffffffd34533334333894
-bffffff6bffdff06d4354456875449f8ff0dc43433333334444543537cbfd8efefff00f0fbff11fb
-afff8678c4644434445c5645544b66644bf8ff14eefffffa6ffffffffd34533334333894bffffff6
-bffdff06d4354456875449f8ff0dc43433333334444543537cbfd8efefff00f0faff108efff6c894
-744444446b5645555b67544ef5ff11f7affffffffe533334333338b97ffffffeadfdff07f6464545
-557744eff9ff0cf5333433334333453356fffb6eeeff00f0faff108efff6c894744444446b564555
-5b67544ef5ff11f7affffffffe533334333338b97ffffffeadfdff07f6464545557744eff9ff0cf5
-333433334333453356fffb6eeeff00f0faff108efff6c894744444446b5645555b67544ef5ff11f7
-affffffffe533334333338b97ffffffeadfdff07f6464545557744eff9ff0cf53334333343334533
-56fffb6eeeff00f0faff10e8eff8ea7544734454886544555b56648ff5ff01f4effdff0b53358433
-45338a7dffffff79fdff07fe469333435777cff9ff0cf644453333334466659efa77dfeeff00f0fa
-ff10e8eff8ea7544734454886544555b56648ff5ff01f4effdff0b5335843345338a7dffffff79fd
-ff07fe469333435777cff9ff0cf644453333334466659efa77dfeeff00f0faff10e8eff8ea754473
-4454886544555b56648ff5ff01f4effdff0b5335843345338a7dffffff79fdff07fe469333435777
-cff9ff0cf644453333334466659efa77dfeeff00f0faff10fd9dfceb6559533844a59554565a5554
-eff5ff00e6fdff0cfe45bdc43344436edeffffff67fdff07fe747334334789eff9ff0bfb44463333
-44458e66b758efedff00f0faff10fd9dfceb6559533844a59554565a5554eff5ff00e6fdff0cfe45
-bdc43344436edeffffff67fdff07fe747334334789eff9ff0bfb4446333344458e66b758efedff00
-f0faff10fd9dfceb6559533844a59554565a5554eff5ff00e6fdff0cfe45bdc43344436edeffffff
-67fdff07fe747334334789eff9ff0bfb4446333344458e66b758efedff00f0f9ff0ef8efee669a43
-484585b4657649453cf4ff009afcff0b4cffd33333435daefffffe5dfdff06eec533333336bff8ff
-09fd69b643345874bd636bebff00f0f9ff0ef8efee669a43484585b4657649453cf4ff009afcff0b
-4cffd33333435daefffffe5dfdff06eec533333336bff8ff09fd69b643345874bd636bebff00f0f9
-ff0ef8efee669a43484585b4657649453cf4ff009afcff0b4cffd33333435daefffffe5dfdff06ee
-c533333336bff8ff09fd69b643345874bd636bebff00f0f9ff0efe9fffa9b634a54768a5b5555954
-9ff4ff007efcff0b88fef5333334775ffffff8affdff07feeb43333356768ff8ff07c9fb87dcfed8
-76adeaff00f0f9ff0efe9fffa9b634a54768a5b55559549ff4ff007efcff0b88fef5333334775fff
-fff8affdff07feeb43333356768ff8ff07c9fb87dcfed876adeaff00f0f9ff0efe9fffa9b634a547
-68a5b55559549ff4ff007efcff0b88fef5333334775ffffff8affdff07feeb43333356768ff8ff07
-c9fb87dcfed876adeaff00f0f8ff0ccbffbae86594775d6684547655f3ff006ffcff07e77cdc4333
-46a56ff7ff0583333377845ff8ff06f5668877778bdffcff07feffdfdffffffffef6ff00f0f8ff0c
-cbffbae86594775d6684547655f3ff006ffcff07e77cdc433346a56ff7ff0583333377845ff8ff06
-f5668877778bdffcff07feffdfdffffffffef6ff00f0f8ff0ccbffbae86594775d6684547655f3ff
-006ffcff07e77cdc433346a56ff7ff0583333377845ff8ff06f5668877778bdffcff07feffdfdfff
-fffffef6ff00f0f8ff0cfdaeefffda55b4ab586554954bf4ff01fc4efdff08feeda49fd88989b59f
-f7ff05d445569c94cff8ff03fbdedeeffcff0ddeffe58bff6e6ffffebde597bdbef9ff00f0f8ff0c
-fdaeefffda55b4ab586554954bf4ff01fc4efdff08feeda49fd88989b59ff7ff05d445569c94cff8
-ff03fbdedeeffcff0ddeffe58bff6e6ffffebde597bdbef9ff00f0f8ff0cfdaeefffda55b4ab5865
-54954bf4ff01fc4efdff08feeda49fd88989b59ff7ff05d445569c94cff8ff03fbdedeeffcff0dde
-ffe58bff6e6ffffebde597bdbef9ff00f0f7ff0bfabdfffcbb49e6bf7654854ff4ff01f95efbff05
-fd67aab75558f6ff05f945669859dff7ff008ffaff0fa4cff738fe579fcbfe76db549b6577affbff
-00f0f7ff0bfabdfffcbb49e6bf7654854ff4ff01f95efbff05fd67aab75558f6ff05f945669859df
-f7ff008ffaff0fa4cff738fe579fcbfe76db549b6577affbff00f0f7ff0bfabdfffcbb49e6bf7654
-854ff4ff01f95efbff05fd67aab75558f6ff05f945669859dff7ff008ffaff0fa4cff738fe579fcb
-fe76db549b6577affbff00f0f6ff0afcacfc94aa79fd6855578ff4ff01f59efbff05eefd989abdef
-f5ff03947757daf6ff009dfaff0ffb5dff56fd45eb48dfa55d849b46b6effbff00f0f6ff0afcacfc
-94aa79fd6855578ff4ff01f59efbff05eefd989abdeff5ff03947757daf6ff009dfaff0ffb5dff56
-fd45eb48dfa55d849b46b6effbff00f0f6ff0afcacfc94aa79fd6855578ff4ff01f59efbff05eefd
-989abdeff5ff03947757daf6ff009dfaff0ffb5dff56fd45eb48dfa55d849b46b6effbff00f0f5ff
-09febabefecffcde8cd5dff4ff01e6aefaff03feefffeef4ff03f64dfffcf6ff00e8f9ff0dd6efd8
-ee5dd436bff846d48c4c6efaff00f0f5ff09febabefecffcde8cd5dff4ff01e6aefaff03feefffee
-f4ff03f64dfffcf6ff00e8f9ff0dd6efd8ee5dd436bff846d48c4c6efaff00f0f5ff09febabefecf
-fcde8cd5dff4ff01e6aefaff03feefffeef4ff03f64dfffcf6ff00e8f9ff0dd6efd8ee5dd436bff8
-46d48c4c6efaff00f0f3ff06bbbbceffffffe5f3ff0198ccf8ff01efdff4ff04fd58fff97ff7ff00
-f8f9ff0efa6fffffec59358876446467558aeffbff00f0f3ff06bbbbceffffffe5f3ff0198ccf8ff
-01efdff4ff04fd58fff97ff7ff00f8f9ff0efa6fffffec59358876446467558aeffbff00f0f3ff06
-bbbbceffffffe5f3ff0198ccf8ff01efdff4ff04fd58fff97ff7ff00f8f9ff0efa6fffffec593588
-76446467558aeffbff00f0f1ff04ecbcceff69f3ff025cfacee9ff03a4cffb58f7ff01fbcffbff0f
-caa957766664678889bdeff9fffffebffbff00f0f1ff04ecbcceff69f3ff025cfacee9ff03a4cffb
-58f7ff01fbcffbff0fcaa957766664678889bdeff9fffffebffbff00f0f1ff04ecbcceff69f3ff02
-5cfacee9ff03a4cffb58f7ff01fbcffbff0fcaa957766664678889bdeff9fffffebffbff00f0efff
-02fdc94ef4ff03fd3efbcde9ff04f77ffe46dff7ff009ffbff047bcc89bceffbff04faffffffbffb
-ff00f0efff02fdc94ef4ff03fd3efbcde9ff04f77ffe46dff7ff009ffbff047bcc89bceffbff04fa
-ffffffbffbff00f0efff02fdc94ef4ff03fd3efbcde9ff04f77ffe46dff7ff009ffbff047bcc89bc
-effbff04faffffffbffbff00f0eeff01f96ff4ff03f73cfedde9ff04fb4dffa78ef7ff00dafbff02
-8fffcff9ff04fafffffebffbff00f0eeff01f96ff4ff03f73cfedde9ff04fb4dffa78ef7ff00dafb
-ff028fffcff9ff04fafffffebffbff00f0eeff01f96ff4ff03f73cfedde9ff04fb4dffa78ef7ff00
-dafbff028fffcff9ff04fafffffebffbff00f0eeff01f4cff4ff03d54efffee8ff0498fff5d7eef8
-ff01f9effcff029ffeaffdff08eddbba9997ab79adbffbff00f0eeff01f4cff4ff03d54efffee8ff
-0498fff5d7eef8ff01f9effcff029ffeaffdff08eddbba9997ab79adbffbff00f0eeff01f4cff4ff
-03d54efffee8ff0498fff5d7eef8ff01f9effcff029ffeaffdff08eddbba9997ab79adbffbff00f0
-eeff00c6f3ff027956dfe7ff04e5eff78e7df8ff01fe9ffdff10fd787658a987765445785796a8dd
-55a9cffbff00f0eeff00c6f3ff027956dfe7ff04e5eff78e7df8ff01fe9ffdff10fd787658a98776
-5445785796a8dd55a9cffbff00f0eeff00c6f3ff027956dfe7ff04e5eff78e7df8ff01fe9ffdff10
-fd787658a987765445785796a8dd55a9cffbff00f0eeff007af4ff02fc5fb7e6ff05f56ff95fe9cf
-f8ff00dbfdff0ffe9a7684bbb968d74bff78f9fedf97dffaff00f0eeff007af4ff02fc5fb7e6ff05
-f56ff95fe9cff8ff00dbfdff0ffe9a7684bbb968d74bff78f9fedf97dffaff00f0eeff007af4ff02
-fc5fb7e6ff05f56ff95fe9cff8ff00dbfdff0ffe9a7684bbb968d74bff78f9fedf97dffaff00f0ef
-ff01fe4ef4ff02f78f95f1ff00edf7ff06fd5dfa4effaaeff9ff01fbdffcff0d9bd5fffe6af94aff
-77f9ffefe7dffaff00f0efff01fe4ef4ff02f78f95f1ff00edf7ff06fd5dfa4effaaeff9ff01fbdf
-fcff0d9bd5fffe6af94aff77f9ffefe7dffaff00f0efff01fe4ef4ff02f78f95f1ff00edf7ff06fd
-5dfa4effaaeff9ff01fbdffcff0d9bd5fffe6af94aff77f9ffefe7dffaff00f0efff01fb6ff4ff03
-c4efb68ef4ff05feeeb4aeffecf9ff0688fc4afffe89eff9ff00aefcff0d8bb5ffff6afa49ff77f9
-fffff7dffaff00f0efff01fb6ff4ff03c4efb68ef4ff05feeeb4aeffecf9ff0688fc4afffe89eff9
-ff00aefcff0d8bb5ffff6afa49ff77f9fffff7dffaff00f0efff01fb6ff4ff03c4efb68ef4ff05fe
-eeb4aeffecf9ff0688fc4afffe89eff9ff00aefcff0d8bb5ffff6afa49ff77f9fffff7dffaff00f0
-efff01f7aff5ff05fe59ffd85eeff5ff0596678959ddddf9ff07e6bd59fffffd99aefaff01f98efd
-ff0d6bc5ffff5afa48ff86f8ffeff7dffaff00f0efff01f7aff5ff05fe59ffd85eeff5ff05966789
-59ddddf9ff07e6bd59fffffd99aefaff01f98efdff0d6bc5ffff5afa48ff86f8ffeff7dffaff00f0
-efff01f7aff5ff05fe59ffd85eeff5ff0596678959ddddf9ff07e6bd59fffffd99aefaff01f98efd
-ff0d6bc5ffff5afa48ff86f8ffeff7dffaff00f0efff01f4eff5ff05f77ffffc668ff2ff05c86678
-78888bfcff02fb6c59fdff02d98beffbff12e8efffffff7ad6fffe5afb49ff75f8fffff7dffaff00
-f0efff01f4eff5ff05f77ffffc668ff2ff05c8667878888bfcff02fb6c59fdff02d98beffbff12e8
-efffffff7ad6fffe5afb49ff75f8fffff7dffaff00f0efff01f4eff5ff05f77ffffc668ff2ff05c8
-667878888bfcff02fb6c59fdff02d98beffbff12e8efffffff7ad6fffe5afb49ff75f8fffff7dffa
-ff00f0efff00c5f4ff05a6efffff754df3ff05ecbcccddeeeffaff01685afcff1afb78adefffffff
-ebaaefffffff7bd6ffff4bfb4aff75f8fffff7dffaff00f0efff00c5f4ff05a6efffff754df3ff05
-ecbcccddeeeffaff01685afcff1afb78adefffffffebaaefffffff7bd6ffff4bfb4aff75f8fffff7
-dffaff00f0efff00c5f4ff05a6efffff754df3ff05ecbcccddeeeffaff01685afcff1afb78adefff
-ffffebaaefffffff7bd6ffff4bfb4aff75f8fffff7dffaff00f0efff0089f5ff06e76ffffffffb6b
-f5ff06fd66787765458df9ff01a46cfaff05c988999989befcff0d7bc7ffff5afc59ff76f8fffff6
-dffaff00f0efff0089f5ff06e76ffffffffb6bf5ff06fd66787765458df9ff01a46cfaff05c98899
-9989befcff0d7bc7ffff5afc59ff76f8fffff6dffaff00f0efff0089f5ff06e76ffffffffb6bf5ff
-06fd66787765458df9ff01a46cfaff05c988999989befcff0d7bc7ffff5afc59ff76f8fffff6dffa
-ff00f0efff005ef6ff02fe55dffdff00abf5ff08f5affffffffeb858effbff01d54eefff0d8bc7ff
-fe4afc5aff77f8fffff6effaff00f0efff005ef6ff02fe55dffdff00abf5ff08f5affffffffeb858
-effbff01d54eefff0d8bc7fffe4afc5aff77f8fffff6effaff00f0efff005ef6ff02fe55dffdff00
-abf5ff08f5affffffffeb858effbff01d54eefff0d8bc7fffe4afc5aff77f8fffff6effaff00f0f0
-ff01fb5ff6ff01c44dfcff00eff5ff0098fbff01d74bfbff02fc4beff0ff0d7bb7fffe4afd4aff87
-f8fffff6effaff00f0f0ff01fb5ff6ff01c44dfcff00eff5ff0098fbff01d74bfbff02fc4beff0ff
-0d7bb7fffe4afd4aff87f8fffff6effaff00f0f0ff01fb5ff6ff01c44dfcff00eff5ff0098fbff01
-d74bfbff02fc4beff0ff0d7bb7fffe4afd4aff87f8fffff6effaff00f0f0ff01f6bff7ff02fd44cf
-f0ff01fc4dfaff01b58efbff0474dfedc88af3ff0d7bb7fffe49fe4bff78f7fffff6effaff00f0f0
-ff01f6bff7ff02fd44cff0ff01fc4dfaff01b58efbff0474dfedc88af3ff0d7bb7fffe49fe4bff78
-f7fffff6effaff00f0f0ff01f6bff7ff02fd44cff0ff01fc4dfaff01b58efbff0474dfedc88af3ff
-0d7bb7fffe49fe4bff78f7fffff6effaff00f0f0ff00b5f6ff01b55cefff04f6cfb6448efcff01a5
-affcff0596544557776df4ff0d7bb7fffe49fe4cff78f8fffff6effaff00f0f0ff00b5f6ff01b55c
-efff04f6cfb6448efcff01a5affcff0596544557776df4ff0d7bb7fffe49fe4cff78f8fffff6effa
-ff00f0f0ff00b5f6ff01b55cefff04f6cfb6448efcff01a5affcff0596544557776df4ff0d7bb7ff
-fe49fe4cff78f8fffff6effaff00f0f1ff01fe5cf8ff03fea658efefff05e6f8357755dffdff02fd
-66bffcff05feffffffd5eff5ff0d7ba8fffe49fe4cff88f7fffff6effaff00f0f1ff01fe5cf8ff03
-fea658efefff05e6f8357755dffdff02fd66bffcff05feffffffd5eff5ff0d7ba8fffe49fe4cff88
-f7fffff6effaff00f0f1ff01fe5cf8ff03fea658efefff05e6f8357755dffdff02fd66bffcff05fe
-ffffffd5eff5ff0d7ba8fffe49fe4cff88f7fffff6effaff00f0f1ff01f59ff9ff03eb7457afeeff
-05a8a37ffffceffcff02fa57dff9ff01fa8ff5ff0d7bb8fffd4afe4dff89f7fffff6effaff00f0f1
-ff01f59ff9ff03eb7457afeeff05a8a37ffffceffcff02fa57dff9ff01fa8ff5ff0d7bb8fffd4afe
-4dff89f7fffff6effaff00f0f1ff01f59ff9ff03eb7457afeeff05a8a37ffffceffcff02fa57dff9
-ff01fa8ff5ff0d7bb8fffd4afe4dff89f7fffff6effaff00f0f1ff0086fbff05eca876678ccdedff
-027d53bff8ff01e75bf8ff005ff5ff0c7cb8fffd4afe4cffacf8fffff6f9ff00f0f1ff0086fbff05
-eca876678ccdedff027d53bff8ff01e75bf8ff005ff5ff0c7cb8fffd4afe4cffacf8fffff6f9ff00
-f0f1ff0086fbff05eca876678ccdedff027d53bff8ff01e75bf8ff005ff5ff0c7cb8fffd4afe4cff
-acf8fffff6f9ff00f0f2ff01fa4efdff08fb75468beffe9db9efeeff026d84eff7ff0185aff9ff00
-6df5ff0c6cb8fffc4bfb4dff8cf7fffff5f9ff00f0f2ff01fa4efdff08fb75468beffe9db9efeeff
-026d84eff7ff0185aff9ff006df5ff0c6cb8fffc4bfb4dff8cf7fffff5f9ff00f0f2ff01fa4efdff
-08fb75468beffe9db9efeeff026d84eff7ff0185aff9ff006df5ff0c6cb8fffc4bfb4dff8cf7ffff
-f5f9ff00f0f2ff0ea4dffffffff95799bffffffffa8abfeeff076dc5ffffc74579effcff00faf8ff
-008bf5ff0c6ca9fffc4bfb4cff8cf7fffff5f9ff00f0f2ff0ea4dffffffff95799bffffffffa8abf
-eeff076dc5ffffc74579effcff00faf8ff008bf5ff0c6ca9fffc4bfb4cff8cf7fffff5f9ff00f0f2
-ff0ea4dffffffff95799bffffffffa8abfeeff076dc5ffffc74579effcff00faf8ff008bf5ff0c6c
-a9fffc4bfb4cff8cf7fffff5f9ff00f0f3ff01fa4cfdff0284efe9fdff02fe87bfeeff07befdffff
-75dca65ef2ff00a9f5ff0c6da9fffc4bfb4cff8bf7fffff5f9ff00f0f3ff01fa4cfdff0284efe9fd
-ff02fe87bfeeff07befdffff75dca65ef2ff00a9f5ff0c6da9fffc4bfb4cff8bf7fffff5f9ff00f0
-f3ff01fa4cfdff0284efe9fdff02fe87bfeeff07befdffff75dca65ef2ff00a9f5ff0c6da9fffc4b
-fb4cff8bf7fffff5f9ff00f0f3ff0873bffffffffd4bff9dfcff01c4efeeff07dcfffffe43643567
-f2ff00a9f5ff0c6c99fffb4bfb4cff8cf7fffff5f9ff00f0f3ff0873bffffffffd4bff9dfcff01c4
-efeeff07dcfffffe43643567f2ff00a9f5ff0c6c99fffb4bfb4cff8cf7fffff5f9ff00f0f3ff0873
-bffffffffd4bff9dfcff01c4efeeff07dcfffffe43643567f2ff00a9f5ff0c6c99fffb4bfb4cff8c
-f7fffff5f9ff00f0f4ff01f939fdff03f66fff7ffcff00f6f2ff00cefaff06fe433333569adff5ff
-01db7cf5ff0c5d99fffb4aa539ff7cf7fffff5f9ff00f0f4ff01f939fdff03f66fff7ffcff00f6f2
-ff00cefaff06fe433333569adff5ff01db7cf5ff0c5d99fffb4aa539ff7cf7fffff5f9ff00f0f4ff
-01f939fdff03f66fff7ffcff00f6f2ff00cefaff06fe433333569adff5ff01db7cf5ff0c5d99fffb
-4aa539ff7cf7fffff5f9ff00f0f4ff01f57ffdff03b4bfff7ffcff01f7bff4ff01edeffaff06fe63
-33333b546ef6ff02fe875ff5ff0c6da9fffb479dc6bf6cf7fffff5f9ff00f0f4ff01f57ffdff03b4
-bfff7ffcff01f7bff4ff01edeffaff06fe6333333b546ef6ff02fe875ff5ff0c6da9fffb479dc6bf
-6cf7fffff5f9ff00f0f4ff01f57ffdff03b4bfff7ffcff01f7bff4ff01edeffaff06fe6333333b54
-6ef6ff02fe875ff5ff0c6da9fffb479dc6bf6cf7fffff5f9ff00f0f4ff09f4effea69ec849fffe8f
-fcff01f85ff6ff02fe866df8ff05e633334d553af6ff02f7577ff5ff0c5db8fffb46ffec5e6cf7ff
-fff5f9ff00f0f4ff09f4effea69ec849fffe8ffcff01f85ff6ff02fe866df8ff05e633334d553af6
-ff02f7577ff5ff0c5db8fffb46ffec5e6cf7fffff5f9ff00f0f4ff09f4effea69ec849fffe8ffcff
-01f85ff6ff02fe866df8ff05e633334d553af6ff02f7577ff5ff0c5db8fffb46ffec5e6cf7fffff5
-f9ff00f0f4ff09f77863577347dffffb9ffcff01f95bf6ff01d6aef6ff04b8aeff5b46f6ff028344
-7ff5ff0c6ec8fffb4afff9344497ffffe5f9ff00f0f4ff09f77863577347dffffb9ffcff01f95bf6
-ff01d6aef6ff04b8aeff5b46f6ff0283447ff5ff0c6ec8fffb4afff9344497ffffe5f9ff00f0f4ff
-09f77863577347dffffb9ffcff01f95bf6ff01d6aef6ff04b8aeff5b46f6ff0283447ff5ff0c6ec8
-fffb4afff9344497ffffe5f9ff00f0f4ff09fe99abfffedffffffabffcff01f8c9f6ff005df2ff02
-6cb3eff8ff03f84334cff5ff0c5eb9fffb38ffe46745a7fffeb6f9ff00f0f4ff09fe99abfffedfff
-fffabffcff01f8c9f6ff005df2ff026cb3eff8ff03f84334cff5ff0c5eb9fffb38ffe46745a7fffe
-b6f9ff00f0f4ff09fe99abfffedffffffabffcff01f8c9f6ff005df2ff026cb3eff8ff03f84334cf
-f5ff0c5eb9fffb38ffe46745a7fffeb6f9ff00f0ecff01f9dffcff01f8f8f2ff01baeff7ff025ce4
-aff9ff03fe743337f4ff0c5eb8fffa45ffe5ff6cf7eadda6f9ff00f0ecff01f9dffcff01f8f8f2ff
-01baeff7ff025ce4aff9ff03fe743337f4ff0c5eb8fffa45ffe5ff6cf7eadda6f9ff00f0ecff01f9
-dffcff01f8f8f2ff01baeff7ff025ce4aff9ff03fe743337f4ff0c5eb8fffa45ffe5ff6cf7eadda6
-f9ff00f0ecff01f8dffcff01f8f8f3ff05c5464afffffefbff03fe6ff57ffaff04feb643345ef4ff
-0c4eb8fff944cf88ff5bf7a37ba6f9ff00f0ecff01f8dffcff01f8f8f3ff05c5464afffffefbff03
-fe6ff57ffaff04feb643345ef4ff0c4eb8fff944cf88ff5bf7a37ba6f9ff00f0ecff01f8dffcff01
-f8f8f3ff05c5464afffffefbff03fe6ff57ffaff04feb643345ef4ff0c4eb8fff944cf88ff5bf7a3
-7ba6f9ff00f0ecff01f9cffcff01f9e7f3ff05aedfe5bffdeff9ff01f99ffbff05eed7433346bff4
-ff0c4db9fff846df59ff6bf7a35ca7f9ff00f0ecff01f9cffcff01f9e7f3ff05aedfe5bffdeff9ff
-01f99ffbff05eed7433346bff4ff0c4db9fff846df59ff6bf7a35ca7f9ff00f0ecff01f9cffcff01
-f9e7f3ff05aedfe5bffdeff9ff01f99ffbff05eed7433346bff4ff0c4db9fff846df59ff6bf7a35c
-a7f9ff00f0ecff01f9cffcff02fac8dff2ff02fc4df8f0ff04fc64333378f3ff0c4ca9fff639ee84
-af5bf7834b97f9ff00f0ecff01f9cffcff02fac8dff2ff02fc4df8f0ff04fc64333378f3ff0c4ca9
-fff639ee84af5bf7834b97f9ff00f0ecff01f9cffcff02fac8dff2ff02fc4df8f0ff04fc64333378
-f3ff0c4ca9fff639ee84af5bf7834b97f9ff00f0ecff01fabffbff01a85ef1ff0179e8f1ff05fe85
-3333356ef3ff0c4da5585445759a5a5bf7c69b97f9ff00f0ecff01fabffbff01a85ef1ff0179e8f1
-ff05fe853333356ef3ff0c4da5585445759a5a5bf7c69b97f9ff00f0ecff01fabffbff01a85ef1ff
-0179e8f1ff05fe853333356ef3ff0c4da5585445759a5a5bf7c69b97f9ff00f0ecff01fb9ffaff00
-97f1ff01d6aaf1ff05e743433346dff3ff0c4da85eedba8654444bf7edfb97f9ff00f0ecff01fb9f
-faff0097f1ff01d6aaf1ff05e743433346dff3ff0c4da85eedba8654444bf7edfb97f9ff00f0ecff
-01fb9ffaff0097f1ff01d6aaf1ff05e743433346dff3ff0c4da85eedba8654444bf7edfb97f9ff00
-f0ecff01fd8ffaff01e6cff2ff01f96af2ff05fe743433346ef2ff0c5d8668aceffffffe5bf7effc
-97f9ff00f0ecff01fd8ffaff01e6cff2ff01f96af2ff05fe743433346ef2ff0c5d8668aceffffffe
-5bf7effc97f9ff00f0ecff01fd8ffaff01e6cff2ff01f96af2ff05fe743433346ef2ff0c5d8668ac
-effffffe5bf7effc97f9ff00f0ecff01fe7ffaff01f89ff2ff01fe58f4ff07feede744443346dff2
-ff0c7d746456555666685bf7fffd98f9ff00f0ecff01fe7ffaff01f89ff2ff01fe58f4ff07feede7
-44443346dff2ff0c7d746456555666685bf7fffd98f9ff00f0ecff01fe7ffaff01f89ff2ff01fe58
-f4ff07feede744443346dff2ff0c7d746456555666685bf7fffd98f9ff00f0ebff007ffaff01eb8f
-f1ff00b5f2ff05c889755459eff2ff0c6c8555bfffffec585bf7fffda8f9ff00f0ebff007ffaff01
-eb8ff1ff00b5f2ff05c889755459eff2ff0c6c8555bfffffec585bf7fffda8f9ff00f0ebff007ffa
-ff01eb8ff1ff00b5f2ff05c889755459eff2ff0c6c8555bfffffec585bf7fffda8f9ff00f0ebff00
-7ffaff01bd8ff1ff01f6cff3ff09eeffedbafd8efffeeedff7ff0dfe696597feffffffd55bf6fffe
-a9f9ff00f0ebff007ffaff01bd8ff1ff01f6cff3ff09eeffedbafd8efffeeedff7ff0dfe696597fe
-ffffffd55bf6fffea9f9ff00f0ebff007ffaff01bd8ff1ff01f6cff3ff09eeffedbafd8efffeeedf
-f7ff0dfe696597feffffffd55bf6fffea9f9ff00f0ebff007efaff01db9cf1ff01fb8feeff06fb67
-656764666dfaff0efd84434658abceeeecb64af6fffea8f9ff00f0ebff007efaff01db9cf1ff01fb
-8feeff06fb67656764666dfaff0efd84434658abceeeecb64af6fffea8f9ff00f0ebff007efaff01
-db9cf1ff01fb8feeff06fb67656764666dfaff0efd84434658abceeeecb64af6fffea8f9ff00f0eb
-ff009bfaff01f9c8f0ff007eedff05ccfffebefe7afaff0ef86aa98999a8764444364af6fffea9f9
-ff00f0ebff009bfaff01f9c8f0ff007eedff05ccfffebefe7afaff0ef86aa98999a8764444364af6
-fffea9f9ff00f0ebff009bfaff01f9c8f0ff007eedff05ccfffebefe7afaff0ef86aa98999a87644
-44364af6fffea9f9ff00f0ebff00bafaff02fe95acf1ff00d8edff06fbdf97cceee6effbff0eb865
-44665567594666444ae6fffd9af9ff00f0ebff00bafaff02fe95acf1ff00d8edff06fbdf97cceee6
-effbff0eb86544665567594666444ae6fffd9af9ff00f0ebff00bafaff02fe95acf1ff00d8edff06
-fbdf97cceee6effbff0eb86544665567594666444ae6fffd9af9ff00f0ebff00d8f9ff03fbcb88ef
-f3ff01fd8feeff06fe9eb4386efc7ffbff0efeb764957acb5756544649d5fffd8af9ff00f0ebff00
-d8f9ff03fbcb88eff3ff01fd8feeff06fe9eb4386efc7ffbff0efeb764957acb5756544649d5fffd
-8af9ff00f0ebff00d8f9ff03fbcb88eff3ff01fd8feeff06fe9eb4386efc7ffbff0efeb764957acb
-5756544649d5fffd8af9ff00f0ebff00f7f9ff04fcbffd88eff3ff00c9eeff06fd7ed5439eff8af9
-ff0ce5f7aefe6ecdbddc58d6fffc8af9ff00f0ebff00f7f9ff04fcbffd88eff3ff00c9eeff06fd7e
-d5439eff8af9ff0ce5f7aefe6ecdbddc58d6fffc8af9ff00f0ebff00f7f9ff04fcbffd88eff3ff00
-c9eeff06fd7ed5439eff8af9ff0ce5f7aefe6ecdbddc58d6fffc8af9ff00f0ebff00f7f8ff03baac
-fd7cf3ff01fc9ff2ff0aeffebaa638e8547fffd5dffaff0ce5f6adec58deebba57e6fffb8af9ff00
-f0ebff00f7f8ff03baacfd7cf3ff01fc9ff2ff0aeffebaa638e8547fffd5dffaff0ce5f6adec58de
-ebba57e6fffb8af9ff00f0ebff00f7f8ff03baacfd7cf3ff01fc9ff2ff0aeffebaa638e8547fffd5
-dffaff0ce5f6adec58deebba57e6fffb8af9ff00f0ebff01facff8ff03eb9cf7dff3ff0186cff7ff
-0ec96655556798674a54ba555cfffc6dfbff10feb5b76554445569a738f6fffa88ccccdffcff00f0
-ebff01facff8ff03eb9cf7dff3ff0186cff7ff0ec96655556798674a54ba555cfffc6dfbff10feb5
-b76554445569a738f6fffa88ccccdffcff00f0ebff01facff8ff03eb9cf7dff3ff0186cff7ff0ec9
-6655556798674a54ba555cfffc6dfbff10feb5b76554445569a738f6fffa88ccccdffcff00f0ebff
-01fd9ff7ff02fab86af3ff1be749effecbceefffeed996543344444333334bdeb36a454779bec68e
-fcff00b6fc440b5444564ae6fffd855554456dfdff00f0ebff01fd9ff7ff02fab86af3ff1be749ef
-fecbceefffeed996543344444333334bdeb36a454779bec68efcff00b6fc440b5444564ae6fffd85
-5554456dfdff00f0ebff01fd9ff7ff02fab86af3ff1be749effecbceefffeed99654334444433333
-4bdeb36a454779bec68efcff00b6fc440b5444564ae6fffd855554456dfdff00f0eaff006ff7ff02
-fe99e7f2ff08a455533469cdcdb643fa3326349ffff7343546976677468889889999644445555545
-5555454af6ffff86454444489afffffff0eaff006ff7ff02fe99e7f2ff08a455533469cdcdb643fa
-3326349ffff73435469766774688898899996444455555455555454af6ffff86454444489affffff
-f0eaff006ff7ff02fe99e7f2ff08a455533469cdcdb643fa3326349ffff734354697667746888988
-99996444455555455555454af6ffff86454444489afffffff0eaff008df7ff02f9e8f8f2ff06fc44
-5bdcdb9754fc33143444334438fffffd455844678bdfdacebaabababa8fb990f98775cf5efff78bb
-cbaaaab77ffffff0eaff008df7ff02f9e8f8f2ff06fc445bdcdb9754fc33143444334438fffffd45
-5844678bdfdacebaabababa8fb990f98775cf5efff78bbcbaaaab77ffffff0eaff008df7ff02f9e8
-f8f2ff06fc445bdcdb9754fc33143444334438fffffd455844678bdfdacebaabababa8fb990f9877
-5cf5efff78bbcbaaaab77ffffff0eaff00d8f7ff02f8d9acf1ff04e534444343fd332c4433456655
-437ffffffe466857eca37be8788767888888778799998aaabbba5bc5efff7899866658869ffffff0
-eaff00d8f7ff02f8d9acf1ff04e534444343fd332c4433456655437ffffffe466857eca37be87887
-67888888778799998aaabbba5bc5efff7899866658869ffffff0eaff00d8f7ff02f8d9acf1ff04e5
-34444343fd332c4433456655437ffffffe466857eca37be8788767888888778799998aaabbba5bc5
-efff7899866658869ffffff0eaff00f7f7ff02f98e8ef1ff35fc74333334688887abcbaaefefded9
-afffffff488666fed347c49ddcbbaabbba75a469c85cccdccb7db5cffe7cfff8bd6ff9cffffff0ea
-ff00f7f7ff02f98e8ef1ff35fc74333334688887abcbaaefefded9afffffff488666fed347c49ddc
-bbaabbba75a469c85cccdccb7db5cffe7cfff8bd6ff9cffffff0eaff00f7f7ff02f98e8ef1ff35fc
-74333334688887abcbaaefefded9afffffff488666fed347c49ddcbbaabbba75a469c85cccdccb7d
-b5cffe7cfff8bd6ff9cffffff0eaff00f7f7ff02f78f8fefff03edcdddeff9ff0cfd8fffffff57b5
-85dfe447c4bffcff1586e49efa7fffffff8ee5cffd7dfff8ce6ff9dffffff0eaff00f7f7ff02f78f
-8fefff03edcdddeff9ff0cfd8fffffff57b585dfe447c4bffcff1586e49efa7fffffff8ee5cffd7d
-fff8ce6ff9dffffff0eaff00f7f7ff02f78f8fefff03edcdddeff9ff0cfd8fffffff57b585dfe447
-c4bffcff1586e49efa7fffffff8ee5cffd7dfff8ce6ff9dffffff0eaff01f8dff8ff02f78cafedff
-00fcf8ff0cfe7ffffffe58c6949fe559b4dffcff15a7f48fe99fffffff8ff5dffe6dfff9ce6ff9df
-fffff0eaff01f8dff8ff02f78cafedff00fcf8ff0cfe7ffffffe58c6949fe559b4dffcff15a7f48f
-e99fffffff8ff5dffe6dfff9ce6ff9dffffff0eaff01f8dff8ff02f78cafedff00fcf8ff0cfe7fff
-fffe58c6949fe559b4dffcff15a7f48fe99fffffff8ff5dffe6dfff9ce6ff9dffffff0eaff01fbaf
-f8ff02f96cafe3ff0bfb8ffffffe58d8955ff65cb6fbff1596e58ff88ffffffd7ee5dfff6dfff8cd
-7ff9effffff0eaff01fbaff8ff02f96cafe3ff0bfb8ffffffe58d8955ff65cb6fbff1596e58ff88f
-fffffd7ee5dfff6dfff8cd7ff9effffff0eaff01fbaff8ff02f96cafe3ff0bfb8ffffffe58d8955f
-f65cb6fbff1596e58ff88ffffffd7ee5dfff6dfff8cd7ff9effffff0e9ff007ff7ff01798fe3ff0b
+0334447bbff1ff00f0fcff14e9fb5d6b54465455444534544685f77e7645674545f9ff04fd433533
+7cfcff15b5335646fffffc8bbffea8aeffed733aabaadedff8effbff01f854fb330043fc33033444
+7bbff1ff00f0fcff14f8c5d896547544644444344555a5f75c6654664489f9ff04f6335438bffdff
+15f946aeff74efffffd58ffffefffffa94368dfc8ccff7faff01fb44f533024475a9f0ff00f0fcff
+14f8c5d896547544644444344555a5f75c6654664489f9ff04f6335438bffdff15f946aeff74efff
+ffd58ffffefffffa94368dfc8ccff7faff01fb44f533024475a9f0ff00f0fcff14f8c5d896547544
+644444344555a5f75c6654664489f9ff04f6335438bffdff15f946aeff74efffffd58ffffefffffa
+94368dfc8ccff7faff01fb44f533024475a9f0ff00f0fcff14fa6de875657456445454443654b6f5
+6a6754543bdff9ff04b4367469bffeff0afc65cfffff849fffffb69ffdff07f883357cfeebffe6fa
+ff02fd6543fe330334443334fd330253adccf0ff00f0fcff14fa6de875657456445454443654b6f5
+6a6754543bdff9ff04b4367469bffeff0afc65cfffff849fffffb69ffdff07f883357cfeebffe6fa
+ff02fd6543fe330334443334fd330253adccf0ff00f0fcff14fa6de875657456445454443654b6f5
+6a6754543bdff9ff04b4367469bffeff0afc65cfffff849fffffb69ffdff07f883357cfeebffe6fa
+ff02fd6543fe330334443334fd330253adccf0ff00f0fcff13fe8ffa75685655446463444555a5e5
+6a7845535ff9ff04fc537fdaf5fdff01a38ffeff05d44efffffaaefdff03f98334bffeff00b7faff
+03fb643343fe3302443334fe330343566e9ff0ff00f0fcff13fe8ffa75685655446463444555a5e5
+6a7845535ff9ff04fc537fdaf5fdff01a38ffeff05d44efffffaaefdff03f98334bffeff00b7faff
+03fb643343fe3302443334fe330343566e9ff0ff00f0fcff13fe8ffa75685655446463444555a5e5
+6a7845535ff9ff04fc537fdaf5fdff01a38ffeff05d44efffffaaefdff03f98334bffeff00b7faff
+03fb643343fe3302443334fe330343566e9ff0ff00f0fbff129ef75968545745544354455575b45a
+765443bff9ff04c57affffc6fdff0057fdff06f93dfffffc58effeff07fa53339efeffff8bf9ff02
+843343fe330944333334333433bf78cff0ff00f0fbff129ef75968545745544354455575b45a7654
+43bff9ff04c57affffc6fdff0057fdff06f93dfffffc58effeff07fa53339efeffff8bf9ff028433
+43fe330944333334333433bf78cff0ff00f0fbff129ef75968545745544354455575b45a765443bf
+f9ff04c57affffc6fdff0057fdff06f93dfffffc58effeff07fa53339efeffff8bf9ff02843343fe
+330944333334333433bf78cff0ff00f0fbff06cbfb5795456848fe44074555548559675434f9ff05
+fd9bafffff6afeff0cfc5dfffcb9876639fffffe54bffeff07fc533356779bff8df9ff02fc4435fe
+33ff44ff3304443646fe8aefff00f0fbff06cbfb5795456848fe44074555548559675434f9ff05fd
+9bafffff6afeff0cfc5dfffcb9876639fffffe54bffeff07fc533356779bff8df9ff02fc4435fe33
+ff44ff3304443646fe8aefff00f0fbff06cbfb5795456848fe44074555548559675434f9ff05fd9b
+afffff6afeff0cfc5dfffcb9876639fffffe54bffeff07fc533356779bff8df9ff02fc4435fe33ff
+44ff3304443646fe8aefff00f0fbff11f8fea9945895584534444956457459664437f8ff04e8efff
+fe4dfeff0cfa38fb5333433335cfffffc4bffeff01fe93fd3301597bf8ff0d743534333334443343
+535559fe8fefff00f0fbff11f8fea9945895584534444956457459664437f8ff04e8effffe4dfeff
+0cfa38fb5333433335cfffffc4bffeff01fe93fd3301597bf8ff0d743534333334443343535559fe
+8fefff00f0fbff11f8fea9945895584534444956457459664437f8ff04e8effffe4dfeff0cfa38fb
+5333433335cfffffc4bffeff01fe93fd3301597bf8ff0d743534333334443343535559fe8fefff00
+f0fbff11fbafff8678c4644434445c5645544b66644bf8ff04eefffffa6ffeff0cfd345333343338
+94bffffff6bffdff06d4354456875449f8ff01c434fe330834444543537cbfd8efefff00f0fbff11
+fbafff8678c4644434445c5645544b66644bf8ff04eefffffa6ffeff0cfd34533334333894bfffff
+f6bffdff06d4354456875449f8ff01c434fe330834444543537cbfd8efefff00f0fbff11fbafff86
+78c4644434445c5645544b66644bf8ff04eefffffa6ffeff0cfd34533334333894bffffff6bffdff
+06d4354456875449f8ff01c434fe330834444543537cbfd8efefff00f0faff058efff6c89474fe44
+076b5645555b67544ef5ff01f7affeff0cfe533334333338b97ffffffeadfdff07f6464545557744
+eff9ff0cf5333433334333453356fffb6eeeff00f0faff058efff6c89474fe44076b5645555b6754
+4ef5ff01f7affeff0cfe533334333338b97ffffffeadfdff07f6464545557744eff9ff0cf5333433
+334333453356fffb6eeeff00f0faff058efff6c89474fe44076b5645555b67544ef5ff01f7affeff
+0cfe533334333338b97ffffffeadfdff07f6464545557744eff9ff0cf5333433334333453356fffb
+6eeeff00f0faff10e8eff8ea7544734454886544555b56648ff5ff01f4effdff075335843345338a
+7dfeff0079fdff07fe469333435777cff9ff02f64445fe33064466659efa77dfeeff00f0faff10e8
+eff8ea7544734454886544555b56648ff5ff01f4effdff075335843345338a7dfeff0079fdff07fe
+469333435777cff9ff02f64445fe33064466659efa77dfeeff00f0faff10e8eff8ea754473445488
+6544555b56648ff5ff01f4effdff075335843345338a7dfeff0079fdff07fe469333435777cff9ff
+02f64445fe33064466659efa77dfeeff00f0faff10fd9dfceb6559533844a59554565a5554eff5ff
+00e6fdff08fe45bdc43344436edefeff0067fdff07fe747334334789eff9ff0bfb4446333344458e
+66b758efedff00f0faff10fd9dfceb6559533844a59554565a5554eff5ff00e6fdff08fe45bdc433
+44436edefeff0067fdff07fe747334334789eff9ff0bfb4446333344458e66b758efedff00f0faff
+10fd9dfceb6559533844a59554565a5554eff5ff00e6fdff08fe45bdc43344436edefeff0067fdff
+07fe747334334789eff9ff0bfb4446333344458e66b758efedff00f0f9ff0ef8efee669a43484585
+b4657649453cf4ff009afcff0b4cffd33333435daefffffe5dfdff01eec5fe330136bff8ff09fd69
+b643345874bd636bebff00f0f9ff0ef8efee669a43484585b4657649453cf4ff009afcff0b4cffd3
+3333435daefffffe5dfdff01eec5fe330136bff8ff09fd69b643345874bd636bebff00f0f9ff0ef8
+efee669a43484585b4657649453cf4ff009afcff0b4cffd33333435daefffffe5dfdff01eec5fe33
+0136bff8ff09fd69b643345874bd636bebff00f0f9ff0efe9fffa9b634a54768a5b55559549ff4ff
+007efcff0b88fef5333334775ffffff8affdff07feeb43333356768ff8ff07c9fb87dcfed876adea
+ff00f0f9ff0efe9fffa9b634a54768a5b55559549ff4ff007efcff0b88fef5333334775ffffff8af
+fdff07feeb43333356768ff8ff07c9fb87dcfed876adeaff00f0f9ff0efe9fffa9b634a54768a5b5
+5559549ff4ff007efcff0b88fef5333334775ffffff8affdff07feeb43333356768ff8ff07c9fb87
+dcfed876adeaff00f0f8ff0ccbffbae86594775d6684547655f3ff006ffcff07e77cdc433346a56f
+f7ff0583333377845ff8ff06f5668877778bdffcff03feffdfdffeff00fef6ff00f0f8ff0ccbffba
+e86594775d6684547655f3ff006ffcff07e77cdc433346a56ff7ff0583333377845ff8ff06f56688
+77778bdffcff03feffdfdffeff00fef6ff00f0f8ff0ccbffbae86594775d6684547655f3ff006ffc
+ff07e77cdc433346a56ff7ff0583333377845ff8ff06f5668877778bdffcff03feffdfdffeff00fe
+f6ff00f0f8ff0cfdaeefffda55b4ab586554954bf4ff01fc4efdff08feeda49fd88989b59ff7ff05
+d445569c94cff8ff03fbdedeeffcff0ddeffe58bff6e6ffffebde597bdbef9ff00f0f8ff0cfdaeef
+ffda55b4ab586554954bf4ff01fc4efdff08feeda49fd88989b59ff7ff05d445569c94cff8ff03fb
+dedeeffcff0ddeffe58bff6e6ffffebde597bdbef9ff00f0f8ff0cfdaeefffda55b4ab586554954b
+f4ff01fc4efdff08feeda49fd88989b59ff7ff05d445569c94cff8ff03fbdedeeffcff0ddeffe58b
+ff6e6ffffebde597bdbef9ff00f0f7ff0bfabdfffcbb49e6bf7654854ff4ff01f95efbff05fd67aa
+b75558f6ff05f945669859dff7ff008ffaff0fa4cff738fe579fcbfe76db549b6577affbff00f0f7
+ff0bfabdfffcbb49e6bf7654854ff4ff01f95efbff05fd67aab75558f6ff05f945669859dff7ff00
+8ffaff0fa4cff738fe579fcbfe76db549b6577affbff00f0f7ff0bfabdfffcbb49e6bf7654854ff4
+ff01f95efbff05fd67aab75558f6ff05f945669859dff7ff008ffaff0fa4cff738fe579fcbfe76db
+549b6577affbff00f0f6ff0afcacfc94aa79fd6855578ff4ff01f59efbff05eefd989abdeff5ff03
+947757daf6ff009dfaff0ffb5dff56fd45eb48dfa55d849b46b6effbff00f0f6ff0afcacfc94aa79
+fd6855578ff4ff01f59efbff05eefd989abdeff5ff03947757daf6ff009dfaff0ffb5dff56fd45eb
+48dfa55d849b46b6effbff00f0f6ff0afcacfc94aa79fd6855578ff4ff01f59efbff05eefd989abd
+eff5ff03947757daf6ff009dfaff0ffb5dff56fd45eb48dfa55d849b46b6effbff00f0f5ff09feba
+befecffcde8cd5dff4ff01e6aefaff03feefffeef4ff03f64dfffcf6ff00e8f9ff0dd6efd8ee5dd4
+36bff846d48c4c6efaff00f0f5ff09febabefecffcde8cd5dff4ff01e6aefaff03feefffeef4ff03
+f64dfffcf6ff00e8f9ff0dd6efd8ee5dd436bff846d48c4c6efaff00f0f5ff09febabefecffcde8c
+d5dff4ff01e6aefaff03feefffeef4ff03f64dfffcf6ff00e8f9ff0dd6efd8ee5dd436bff846d48c
+4c6efaff00f0f3ffffbb00cefeff00e5f3ff0198ccf8ff01efdff4ff04fd58fff97ff7ff00f8f9ff
+0efa6fffffec59358876446467558aeffbff00f0f3ffffbb00cefeff00e5f3ff0198ccf8ff01efdf
+f4ff04fd58fff97ff7ff00f8f9ff0efa6fffffec59358876446467558aeffbff00f0f3ffffbb00ce
+feff00e5f3ff0198ccf8ff01efdff4ff04fd58fff97ff7ff00f8f9ff0efa6fffffec593588764464
+67558aeffbff00f0f1ff04ecbcceff69f3ff025cfacee9ff03a4cffb58f7ff01fbcffbff0fcaa957
+766664678889bdeff9fffffebffbff00f0f1ff04ecbcceff69f3ff025cfacee9ff03a4cffb58f7ff
+01fbcffbff0fcaa957766664678889bdeff9fffffebffbff00f0f1ff04ecbcceff69f3ff025cface
+e9ff03a4cffb58f7ff01fbcffbff0fcaa957766664678889bdeff9fffffebffbff00f0efff02fdc9
+4ef4ff03fd3efbcde9ff04f77ffe46dff7ff009ffbff047bcc89bceffbff00fafeff00bffbff00f0
+efff02fdc94ef4ff03fd3efbcde9ff04f77ffe46dff7ff009ffbff047bcc89bceffbff00fafeff00
+bffbff00f0efff02fdc94ef4ff03fd3efbcde9ff04f77ffe46dff7ff009ffbff047bcc89bceffbff
+00fafeff00bffbff00f0eeff01f96ff4ff03f73cfedde9ff04fb4dffa78ef7ff00dafbff028fffcf
+f9ff04fafffffebffbff00f0eeff01f96ff4ff03f73cfedde9ff04fb4dffa78ef7ff00dafbff028f
+ffcff9ff04fafffffebffbff00f0eeff01f96ff4ff03f73cfedde9ff04fb4dffa78ef7ff00dafbff
+028fffcff9ff04fafffffebffbff00f0eeff01f4cff4ff03d54efffee8ff0498fff5d7eef8ff01f9
+effcff029ffeaffdff08eddbba9997ab79adbffbff00f0eeff01f4cff4ff03d54efffee8ff0498ff
+f5d7eef8ff01f9effcff029ffeaffdff08eddbba9997ab79adbffbff00f0eeff01f4cff4ff03d54e
+fffee8ff0498fff5d7eef8ff01f9effcff029ffeaffdff08eddbba9997ab79adbffbff00f0eeff00
+c6f3ff027956dfe7ff04e5eff78e7df8ff01fe9ffdff10fd787658a987765445785796a8dd55a9cf
+fbff00f0eeff00c6f3ff027956dfe7ff04e5eff78e7df8ff01fe9ffdff10fd787658a98776544578
+5796a8dd55a9cffbff00f0eeff00c6f3ff027956dfe7ff04e5eff78e7df8ff01fe9ffdff10fd7876
+58a987765445785796a8dd55a9cffbff00f0eeff007af4ff02fc5fb7e6ff05f56ff95fe9cff8ff00
+dbfdff0ffe9a7684bbb968d74bff78f9fedf97dffaff00f0eeff007af4ff02fc5fb7e6ff05f56ff9
+5fe9cff8ff00dbfdff0ffe9a7684bbb968d74bff78f9fedf97dffaff00f0eeff007af4ff02fc5fb7
+e6ff05f56ff95fe9cff8ff00dbfdff0ffe9a7684bbb968d74bff78f9fedf97dffaff00f0efff01fe
+4ef4ff02f78f95f1ff00edf7ff06fd5dfa4effaaeff9ff01fbdffcff0d9bd5fffe6af94aff77f9ff
+efe7dffaff00f0efff01fe4ef4ff02f78f95f1ff00edf7ff06fd5dfa4effaaeff9ff01fbdffcff0d
+9bd5fffe6af94aff77f9ffefe7dffaff00f0efff01fe4ef4ff02f78f95f1ff00edf7ff06fd5dfa4e
+ffaaeff9ff01fbdffcff0d9bd5fffe6af94aff77f9ffefe7dffaff00f0efff01fb6ff4ff03c4efb6
+8ef4ff05feeeb4aeffecf9ff0688fc4afffe89eff9ff00aefcff0d8bb5ffff6afa49ff77f9fffff7
+dffaff00f0efff01fb6ff4ff03c4efb68ef4ff05feeeb4aeffecf9ff0688fc4afffe89eff9ff00ae
+fcff0d8bb5ffff6afa49ff77f9fffff7dffaff00f0efff01fb6ff4ff03c4efb68ef4ff05feeeb4ae
+ffecf9ff0688fc4afffe89eff9ff00aefcff0d8bb5ffff6afa49ff77f9fffff7dffaff00f0efff01
+f7aff5ff05fe59ffd85eeff5ff0596678959ddddf9ff07e6bd59fffffd99aefaff01f98efdff0d6b
+c5ffff5afa48ff86f8ffeff7dffaff00f0efff01f7aff5ff05fe59ffd85eeff5ff0596678959dddd
+f9ff07e6bd59fffffd99aefaff01f98efdff0d6bc5ffff5afa48ff86f8ffeff7dffaff00f0efff01
+f7aff5ff05fe59ffd85eeff5ff0596678959ddddf9ff07e6bd59fffffd99aefaff01f98efdff0d6b
+c5ffff5afa48ff86f8ffeff7dffaff00f0efff01f4eff5ff05f77ffffc668ff2ff05c8667878888b
+fcff02fb6c59fdff02d98beffbff01e8effeff0d7ad6fffe5afb49ff75f8fffff7dffaff00f0efff
+01f4eff5ff05f77ffffc668ff2ff05c8667878888bfcff02fb6c59fdff02d98beffbff01e8effeff
+0d7ad6fffe5afb49ff75f8fffff7dffaff00f0efff01f4eff5ff05f77ffffc668ff2ff05c8667878
+888bfcff02fb6c59fdff02d98beffbff01e8effeff0d7ad6fffe5afb49ff75f8fffff7dffaff00f0
+efff00c5f4ff05a6efffff754df3ff05ecbcccddeeeffaff01685afcff03fb78adeffeff02ebaaef
+feff0d7bd6ffff4bfb4aff75f8fffff7dffaff00f0efff00c5f4ff05a6efffff754df3ff05ecbccc
+ddeeeffaff01685afcff03fb78adeffeff02ebaaeffeff0d7bd6ffff4bfb4aff75f8fffff7dffaff
+00f0efff00c5f4ff05a6efffff754df3ff05ecbcccddeeeffaff01685afcff03fb78adeffeff02eb
+aaeffeff0d7bd6ffff4bfb4aff75f8fffff7dffaff00f0efff0089f5ff01e76ffeff01fb6bf5ff06
+fd66787765458df9ff01a46cfaff05c988999989befcff0d7bc7ffff5afc59ff76f8fffff6dffaff
+00f0efff0089f5ff01e76ffeff01fb6bf5ff06fd66787765458df9ff01a46cfaff05c988999989be
+fcff0d7bc7ffff5afc59ff76f8fffff6dffaff00f0efff0089f5ff01e76ffeff01fb6bf5ff06fd66
+787765458df9ff01a46cfaff05c988999989befcff0d7bc7ffff5afc59ff76f8fffff6dffaff00f0
+efff005ef6ff02fe55dffdff00abf5ff01f5affeff03feb858effbff01d54eefff0d8bc7fffe4afc
+5aff77f8fffff6effaff00f0efff005ef6ff02fe55dffdff00abf5ff01f5affeff03feb858effbff
+01d54eefff0d8bc7fffe4afc5aff77f8fffff6effaff00f0efff005ef6ff02fe55dffdff00abf5ff
+01f5affeff03feb858effbff01d54eefff0d8bc7fffe4afc5aff77f8fffff6effaff00f0f0ff01fb
+5ff6ff01c44dfcff00eff5ff0098fbff01d74bfbff02fc4beff0ff0d7bb7fffe4afd4aff87f8ffff
+f6effaff00f0f0ff01fb5ff6ff01c44dfcff00eff5ff0098fbff01d74bfbff02fc4beff0ff0d7bb7
+fffe4afd4aff87f8fffff6effaff00f0f0ff01fb5ff6ff01c44dfcff00eff5ff0098fbff01d74bfb
+ff02fc4beff0ff0d7bb7fffe4afd4aff87f8fffff6effaff00f0f0ff01f6bff7ff02fd44cff0ff01
+fc4dfaff01b58efbff0474dfedc88af3ff0d7bb7fffe49fe4bff78f7fffff6effaff00f0f0ff01f6
+bff7ff02fd44cff0ff01fc4dfaff01b58efbff0474dfedc88af3ff0d7bb7fffe49fe4bff78f7ffff
+f6effaff00f0f0ff01f6bff7ff02fd44cff0ff01fc4dfaff01b58efbff0474dfedc88af3ff0d7bb7
+fffe49fe4bff78f7fffff6effaff00f0f0ff00b5f6ff01b55cefff04f6cfb6448efcff01a5affcff
+0596544557776df4ff0d7bb7fffe49fe4cff78f8fffff6effaff00f0f0ff00b5f6ff01b55cefff04
+f6cfb6448efcff01a5affcff0596544557776df4ff0d7bb7fffe49fe4cff78f8fffff6effaff00f0
+f0ff00b5f6ff01b55cefff04f6cfb6448efcff01a5affcff0596544557776df4ff0d7bb7fffe49fe
+4cff78f8fffff6effaff00f0f1ff01fe5cf8ff03fea658efefff05e6f8357755dffdff02fd66bffc
+ff00fefeff01d5eff5ff0d7ba8fffe49fe4cff88f7fffff6effaff00f0f1ff01fe5cf8ff03fea658
+efefff05e6f8357755dffdff02fd66bffcff00fefeff01d5eff5ff0d7ba8fffe49fe4cff88f7ffff
+f6effaff00f0f1ff01fe5cf8ff03fea658efefff05e6f8357755dffdff02fd66bffcff00fefeff01
+d5eff5ff0d7ba8fffe49fe4cff88f7fffff6effaff00f0f1ff01f59ff9ff03eb7457afeeff05a8a3
+7ffffceffcff02fa57dff9ff01fa8ff5ff0d7bb8fffd4afe4dff89f7fffff6effaff00f0f1ff01f5
+9ff9ff03eb7457afeeff05a8a37ffffceffcff02fa57dff9ff01fa8ff5ff0d7bb8fffd4afe4dff89
+f7fffff6effaff00f0f1ff01f59ff9ff03eb7457afeeff05a8a37ffffceffcff02fa57dff9ff01fa
+8ff5ff0d7bb8fffd4afe4dff89f7fffff6effaff00f0f1ff0086fbff05eca876678ccdedff027d53
+bff8ff01e75bf8ff005ff5ff0c7cb8fffd4afe4cffacf8fffff6f9ff00f0f1ff0086fbff05eca876
+678ccdedff027d53bff8ff01e75bf8ff005ff5ff0c7cb8fffd4afe4cffacf8fffff6f9ff00f0f1ff
+0086fbff05eca876678ccdedff027d53bff8ff01e75bf8ff005ff5ff0c7cb8fffd4afe4cffacf8ff
+fff6f9ff00f0f2ff01fa4efdff08fb75468beffe9db9efeeff026d84eff7ff0185aff9ff006df5ff
+0c6cb8fffc4bfb4dff8cf7fffff5f9ff00f0f2ff01fa4efdff08fb75468beffe9db9efeeff026d84
+eff7ff0185aff9ff006df5ff0c6cb8fffc4bfb4dff8cf7fffff5f9ff00f0f2ff01fa4efdff08fb75
+468beffe9db9efeeff026d84eff7ff0185aff9ff006df5ff0c6cb8fffc4bfb4dff8cf7fffff5f9ff
+00f0f2ff01a4dffeff03f95799bffeff02fa8abfeeff076dc5ffffc74579effcff00faf8ff008bf5
+ff0c6ca9fffc4bfb4cff8cf7fffff5f9ff00f0f2ff01a4dffeff03f95799bffeff02fa8abfeeff07
+6dc5ffffc74579effcff00faf8ff008bf5ff0c6ca9fffc4bfb4cff8cf7fffff5f9ff00f0f2ff01a4
+dffeff03f95799bffeff02fa8abfeeff076dc5ffffc74579effcff00faf8ff008bf5ff0c6ca9fffc
+4bfb4cff8cf7fffff5f9ff00f0f3ff01fa4cfdff0284efe9fdff02fe87bfeeff07befdffff75dca6
+5ef2ff00a9f5ff0c6da9fffc4bfb4cff8bf7fffff5f9ff00f0f3ff01fa4cfdff0284efe9fdff02fe
+87bfeeff07befdffff75dca65ef2ff00a9f5ff0c6da9fffc4bfb4cff8bf7fffff5f9ff00f0f3ff01
+fa4cfdff0284efe9fdff02fe87bfeeff07befdffff75dca65ef2ff00a9f5ff0c6da9fffc4bfb4cff
+8bf7fffff5f9ff00f0f3ff0173bffeff03fd4bff9dfcff01c4efeeff07dcfffffe43643567f2ff00
+a9f5ff0c6c99fffb4bfb4cff8cf7fffff5f9ff00f0f3ff0173bffeff03fd4bff9dfcff01c4efeeff
+07dcfffffe43643567f2ff00a9f5ff0c6c99fffb4bfb4cff8cf7fffff5f9ff00f0f3ff0173bffeff
+03fd4bff9dfcff01c4efeeff07dcfffffe43643567f2ff00a9f5ff0c6c99fffb4bfb4cff8cf7ffff
+f5f9ff00f0f4ff01f939fdff03f66fff7ffcff00f6f2ff00cefaff06fe433333569adff5ff01db7c
+f5ff0c5d99fffb4aa539ff7cf7fffff5f9ff00f0f4ff01f939fdff03f66fff7ffcff00f6f2ff00ce
+faff06fe433333569adff5ff01db7cf5ff0c5d99fffb4aa539ff7cf7fffff5f9ff00f0f4ff01f939
+fdff03f66fff7ffcff00f6f2ff00cefaff06fe433333569adff5ff01db7cf5ff0c5d99fffb4aa539
+ff7cf7fffff5f9ff00f0f4ff01f57ffdff03b4bfff7ffcff01f7bff4ff01edeffaff06fe6333333b
+546ef6ff02fe875ff5ff0c6da9fffb479dc6bf6cf7fffff5f9ff00f0f4ff01f57ffdff03b4bfff7f
+fcff01f7bff4ff01edeffaff06fe6333333b546ef6ff02fe875ff5ff0c6da9fffb479dc6bf6cf7ff
+fff5f9ff00f0f4ff01f57ffdff03b4bfff7ffcff01f7bff4ff01edeffaff06fe6333333b546ef6ff
+02fe875ff5ff0c6da9fffb479dc6bf6cf7fffff5f9ff00f0f4ff09f4effea69ec849fffe8ffcff01
+f85ff6ff02fe866df8ff05e633334d553af6ff02f7577ff5ff0c5db8fffb46ffec5e6cf7fffff5f9
+ff00f0f4ff09f4effea69ec849fffe8ffcff01f85ff6ff02fe866df8ff05e633334d553af6ff02f7
+577ff5ff0c5db8fffb46ffec5e6cf7fffff5f9ff00f0f4ff09f4effea69ec849fffe8ffcff01f85f
+f6ff02fe866df8ff05e633334d553af6ff02f7577ff5ff0c5db8fffb46ffec5e6cf7fffff5f9ff00
+f0f4ff09f77863577347dffffb9ffcff01f95bf6ff01d6aef6ff04b8aeff5b46f6ff0283447ff5ff
+0c6ec8fffb4afff9344497ffffe5f9ff00f0f4ff09f77863577347dffffb9ffcff01f95bf6ff01d6
+aef6ff04b8aeff5b46f6ff0283447ff5ff0c6ec8fffb4afff9344497ffffe5f9ff00f0f4ff09f778
+63577347dffffb9ffcff01f95bf6ff01d6aef6ff04b8aeff5b46f6ff0283447ff5ff0c6ec8fffb4a
+fff9344497ffffe5f9ff00f0f4ff09fe99abfffedffffffabffcff01f8c9f6ff005df2ff026cb3ef
+f8ff03f84334cff5ff0c5eb9fffb38ffe46745a7fffeb6f9ff00f0f4ff09fe99abfffedffffffabf
+fcff01f8c9f6ff005df2ff026cb3eff8ff03f84334cff5ff0c5eb9fffb38ffe46745a7fffeb6f9ff
+00f0f4ff09fe99abfffedffffffabffcff01f8c9f6ff005df2ff026cb3eff8ff03f84334cff5ff0c
+5eb9fffb38ffe46745a7fffeb6f9ff00f0ecff01f9dffcfffff8f2ff01baeff7ff025ce4aff9ff03
+fe743337f4ff0c5eb8fffa45ffe5ff6cf7eadda6f9ff00f0ecff01f9dffcfffff8f2ff01baeff7ff
+025ce4aff9ff03fe743337f4ff0c5eb8fffa45ffe5ff6cf7eadda6f9ff00f0ecff01f9dffcfffff8
+f2ff01baeff7ff025ce4aff9ff03fe743337f4ff0c5eb8fffa45ffe5ff6cf7eadda6f9ff00f0ecff
+01f8dffcfffff8f3ff05c5464afffffefbff03fe6ff57ffaff04feb643345ef4ff0c4eb8fff944cf
+88ff5bf7a37ba6f9ff00f0ecff01f8dffcfffff8f3ff05c5464afffffefbff03fe6ff57ffaff04fe
+b643345ef4ff0c4eb8fff944cf88ff5bf7a37ba6f9ff00f0ecff01f8dffcfffff8f3ff05c5464aff
+fffefbff03fe6ff57ffaff04feb643345ef4ff0c4eb8fff944cf88ff5bf7a37ba6f9ff00f0ecff01
+f9cffcff01f9e7f3ff05aedfe5bffdeff9ff01f99ffbff05eed7433346bff4ff0c4db9fff846df59
+ff6bf7a35ca7f9ff00f0ecff01f9cffcff01f9e7f3ff05aedfe5bffdeff9ff01f99ffbff05eed743
+3346bff4ff0c4db9fff846df59ff6bf7a35ca7f9ff00f0ecff01f9cffcff01f9e7f3ff05aedfe5bf
+fdeff9ff01f99ffbff05eed7433346bff4ff0c4db9fff846df59ff6bf7a35ca7f9ff00f0ecff01f9
+cffcff02fac8dff2ff02fc4df8f0ff04fc64333378f3ff0c4ca9fff639ee84af5bf7834b97f9ff00
+f0ecff01f9cffcff02fac8dff2ff02fc4df8f0ff04fc64333378f3ff0c4ca9fff639ee84af5bf783
+4b97f9ff00f0ecff01f9cffcff02fac8dff2ff02fc4df8f0ff04fc64333378f3ff0c4ca9fff639ee
+84af5bf7834b97f9ff00f0ecff01fabffbff01a85ef1ff0179e8f1ff05fe853333356ef3ff0c4da5
+585445759a5a5bf7c69b97f9ff00f0ecff01fabffbff01a85ef1ff0179e8f1ff05fe853333356ef3
+ff0c4da5585445759a5a5bf7c69b97f9ff00f0ecff01fabffbff01a85ef1ff0179e8f1ff05fe8533
+33356ef3ff0c4da5585445759a5a5bf7c69b97f9ff00f0ecff01fb9ffaff0097f1ff01d6aaf1ff05
+e743433346dff3ff0c4da85eedba8654444bf7edfb97f9ff00f0ecff01fb9ffaff0097f1ff01d6aa
+f1ff05e743433346dff3ff0c4da85eedba8654444bf7edfb97f9ff00f0ecff01fb9ffaff0097f1ff
+01d6aaf1ff05e743433346dff3ff0c4da85eedba8654444bf7edfb97f9ff00f0ecff01fd8ffaff01
+e6cff2ff01f96af2ff05fe743433346ef2ff0c5d8668aceffffffe5bf7effc97f9ff00f0ecff01fd
+8ffaff01e6cff2ff01f96af2ff05fe743433346ef2ff0c5d8668aceffffffe5bf7effc97f9ff00f0
+ecff01fd8ffaff01e6cff2ff01f96af2ff05fe743433346ef2ff0c5d8668aceffffffe5bf7effc97
+f9ff00f0ecff01fe7ffaff01f89ff2ff01fe58f4ff07feede744443346dff2ff0c7d746456555666
+685bf7fffd98f9ff00f0ecff01fe7ffaff01f89ff2ff01fe58f4ff07feede744443346dff2ff0c7d
+746456555666685bf7fffd98f9ff00f0ecff01fe7ffaff01f89ff2ff01fe58f4ff07feede7444433
+46dff2ff0c7d746456555666685bf7fffd98f9ff00f0ebff007ffaff01eb8ff1ff00b5f2ff05c889
+755459eff2ff0c6c8555bfffffec585bf7fffda8f9ff00f0ebff007ffaff01eb8ff1ff00b5f2ff05
+c889755459eff2ff0c6c8555bfffffec585bf7fffda8f9ff00f0ebff007ffaff01eb8ff1ff00b5f2
+ff05c889755459eff2ff0c6c8555bfffffec585bf7fffda8f9ff00f0ebff007ffaff01bd8ff1ff01
+f6cff3ff09eeffedbafd8efffeeedff7ff04fe696597fefeff05d55bf6fffea9f9ff00f0ebff007f
+faff01bd8ff1ff01f6cff3ff09eeffedbafd8efffeeedff7ff04fe696597fefeff05d55bf6fffea9
+f9ff00f0ebff007ffaff01bd8ff1ff01f6cff3ff09eeffedbafd8efffeeedff7ff04fe696597fefe
+ff05d55bf6fffea9f9ff00f0ebff007efaff01db9cf1ff01fb8feeff06fb67656764666dfaff0efd
+84434658abceeeecb64af6fffea8f9ff00f0ebff007efaff01db9cf1ff01fb8feeff06fb67656764
+666dfaff0efd84434658abceeeecb64af6fffea8f9ff00f0ebff007efaff01db9cf1ff01fb8feeff
+06fb67656764666dfaff0efd84434658abceeeecb64af6fffea8f9ff00f0ebff009bfaff01f9c8f0
+ff007eedff05ccfffebefe7afaff0ef86aa98999a8764444364af6fffea9f9ff00f0ebff009bfaff
+01f9c8f0ff007eedff05ccfffebefe7afaff0ef86aa98999a8764444364af6fffea9f9ff00f0ebff
+009bfaff01f9c8f0ff007eedff05ccfffebefe7afaff0ef86aa98999a8764444364af6fffea9f9ff
+00f0ebff00bafaff02fe95acf1ff00d8edff06fbdf97cceee6effbff0eb86544665567594666444a
+e6fffd9af9ff00f0ebff00bafaff02fe95acf1ff00d8edff06fbdf97cceee6effbff0eb865446655
+67594666444ae6fffd9af9ff00f0ebff00bafaff02fe95acf1ff00d8edff06fbdf97cceee6effbff
+0eb86544665567594666444ae6fffd9af9ff00f0ebff00d8f9ff03fbcb88eff3ff01fd8feeff06fe
+9eb4386efc7ffbff0efeb764957acb5756544649d5fffd8af9ff00f0ebff00d8f9ff03fbcb88eff3
+ff01fd8feeff06fe9eb4386efc7ffbff0efeb764957acb5756544649d5fffd8af9ff00f0ebff00d8
+f9ff03fbcb88eff3ff01fd8feeff06fe9eb4386efc7ffbff0efeb764957acb5756544649d5fffd8a
+f9ff00f0ebff00f7f9ff04fcbffd88eff3ff00c9eeff06fd7ed5439eff8af9ff0ce5f7aefe6ecdbd
+dc58d6fffc8af9ff00f0ebff00f7f9ff04fcbffd88eff3ff00c9eeff06fd7ed5439eff8af9ff0ce5
+f7aefe6ecdbddc58d6fffc8af9ff00f0ebff00f7f9ff04fcbffd88eff3ff00c9eeff06fd7ed5439e
+ff8af9ff0ce5f7aefe6ecdbddc58d6fffc8af9ff00f0ebff00f7f8ff03baacfd7cf3ff01fc9ff2ff
+0aeffebaa638e8547fffd5dffaff0ce5f6adec58deebba57e6fffb8af9ff00f0ebff00f7f8ff03ba
+acfd7cf3ff01fc9ff2ff0aeffebaa638e8547fffd5dffaff0ce5f6adec58deebba57e6fffb8af9ff
+00f0ebff00f7f8ff03baacfd7cf3ff01fc9ff2ff0aeffebaa638e8547fffd5dffaff0ce5f6adec58
+deebba57e6fffb8af9ff00f0ebff01facff8ff03eb9cf7dff3ff0186cff7ff0ec96655556798674a
+54ba555cfffc6dfbff10feb5b76554445569a738f6fffa88ccccdffcff00f0ebff01facff8ff03eb
+9cf7dff3ff0186cff7ff0ec96655556798674a54ba555cfffc6dfbff10feb5b76554445569a738f6
+fffa88ccccdffcff00f0ebff01facff8ff03eb9cf7dff3ff0186cff7ff0ec96655556798674a54ba
+555cfffc6dfbff10feb5b76554445569a738f6fffa88ccccdffcff00f0ebff01fd9ff7ff02fab86a
+f3ff1be749effecbceefffeed996543344444333334bdeb36a454779bec68efcff00b6fc440b5444
+564ae6fffd855554456dfdff00f0ebff01fd9ff7ff02fab86af3ff1be749effecbceefffeed99654
+3344444333334bdeb36a454779bec68efcff00b6fc440b5444564ae6fffd855554456dfdff00f0eb
+ff01fd9ff7ff02fab86af3ff1be749effecbceefffeed996543344444333334bdeb36a454779bec6
+8efcff00b6fc440b5444564ae6fffd855554456dfdff00f0eaff006ff7ff02fe99e7f2ff08a45553
+3469cdcdb643fa3322349ffff73435469766774688898899996444455555455555454af6ffff8645
+4444489afeff00f0eaff006ff7ff02fe99e7f2ff08a455533469cdcdb643fa3322349ffff7343546
+9766774688898899996444455555455555454af6ffff86454444489afeff00f0eaff006ff7ff02fe
+99e7f2ff08a455533469cdcdb643fa3322349ffff734354697667746888988999964444555554555
+55454af6ffff86454444489afeff00f0eaff008df7ff02f9e8f8f2ff06fc445bdcdb9754fc331034
+44334438fffffd455844678bdfdacebafeab00a8fb990f98775cf5efff78bbcbaaaab77ffffff0ea
+ff008df7ff02f9e8f8f2ff06fc445bdcdb9754fc33103444334438fffffd455844678bdfdacebafe
+ab00a8fb990f98775cf5efff78bbcbaaaab77ffffff0eaff008df7ff02f9e8f8f2ff06fc445bdcdb
+9754fc33103444334438fffffd455844678bdfdacebafeab00a8fb990f98775cf5efff78bbcbaaaa
+b77ffffff0eaff00d8f7ff02f8d9acf1ff04e534444343fd33134433456655437ffffffe466857ec
+a37be8788767fe8815778799998aaabbba5bc5efff7899866658869ffffff0eaff00d8f7ff02f8d9
+acf1ff04e534444343fd33134433456655437ffffffe466857eca37be8788767fe8815778799998a
+aabbba5bc5efff7899866658869ffffff0eaff00d8f7ff02f8d9acf1ff04e534444343fd33134433
+456655437ffffffe466857eca37be8788767fe8815778799998aaabbba5bc5efff7899866658869f
+fffff0eaff00f7f7ff02f98e8ef1ff0ffc74333334688887abcbaaefefded9affeff22488666fed3
+47c49ddcbbaabbba75a469c85cccdccb7db5cffe7cfff8bd6ff9cffffff0eaff00f7f7ff02f98e8e
+f1ff0ffc74333334688887abcbaaefefded9affeff22488666fed347c49ddcbbaabbba75a469c85c
+ccdccb7db5cffe7cfff8bd6ff9cffffff0eaff00f7f7ff02f98e8ef1ff0ffc74333334688887abcb
+aaefefded9affeff22488666fed347c49ddcbbaabbba75a469c85cccdccb7db5cffe7cfff8bd6ff9
+cffffff0eaff00f7f7ff02f78f8fefff03edcdddeff9ff01fd8ffeff0757b585dfe447c4bffcff04
+86e49efa7ffeff0d8ee5cffd7dfff8ce6ff9dffffff0eaff00f7f7ff02f78f8fefff03edcdddeff9
+ff01fd8ffeff0757b585dfe447c4bffcff0486e49efa7ffeff0d8ee5cffd7dfff8ce6ff9dffffff0
+eaff00f7f7ff02f78f8fefff03edcdddeff9ff01fd8ffeff0757b585dfe447c4bffcff0486e49efa
+7ffeff0d8ee5cffd7dfff8ce6ff9dffffff0eaff01f8dff8ff02f78cafedff00fcf8ff0cfe7fffff
+fe58c6949fe559b4dffcff04a7f48fe99ffeff0d8ff5dffe6dfff9ce6ff9dffffff0eaff01f8dff8
+ff02f78cafedff00fcf8ff0cfe7ffffffe58c6949fe559b4dffcff04a7f48fe99ffeff0d8ff5dffe
+6dfff9ce6ff9dffffff0eaff01f8dff8ff02f78cafedff00fcf8ff0cfe7ffffffe58c6949fe559b4
+dffcff04a7f48fe99ffeff0d8ff5dffe6dfff9ce6ff9dffffff0eaff01fbaff8ff02f96cafe3ff0b
+fb8ffffffe58d8955ff65cb6fbff1596e58ff88ffffffd7ee5dfff6dfff8cd7ff9effffff0eaff01
+fbaff8ff02f96cafe3ff0bfb8ffffffe58d8955ff65cb6fbff1596e58ff88ffffffd7ee5dfff6dff
+f8cd7ff9effffff0eaff01fbaff8ff02f96cafe3ff0bfb8ffffffe58d8955ff65cb6fbff1596e58f
+f88ffffffd7ee5dfff6dfff8cd7ff9effffff0e9ff007ff7ff01798fe3ff0bf6dffffffd58e7765e
+f66e97fbff1596f57ff98ffffffd7ff5efff6dfff8dd8ff8effffff0e9ff007ff7ff01798fe3ff0b
 f6dffffffd58e7765ef66e97fbff1596f57ff98ffffffd7ff5efff6dfff8dd8ff8effffff0e9ff00
 7ff7ff01798fe3ff0bf6dffffffd58e7765ef66e97fbff1596f57ff98ffffffd7ff5efff6dfff8dd
-8ff8effffff0e9ff007ff7ff01798fe3ff0bf6dffffffd58e7765ef66e97fbff1596f57ff98fffff
-fd7ff5efff6dfff8dd8ff8effffff0e9ff00baf7ff01f66ce3ff0bc6fffffffd69e6685be66f88fb
-ff1596f59ff99ffffffe8fe6ffff5efff8ec9ff7fffffff0e9ff00baf7ff01f66ce3ff0bc6ffffff
-fd69e6685be66f88fbff1596f59ff99ffffffe8fe6ffff5efff8ec9ff7fffffff0e9ff00baf7ff01
-f66ce3ff0bc6fffffffd69e6685be66f88fbff1596f59ff99ffffffe8fe6ffff5efff8ec9ff7ffff
-fff0e9ff00f7f7ff03fe87fffde6ff0cfe7dfffffffc5af67938d67f6afbff15a5d59ff89fffffff
-9fe7ffff5efff8fbaff7fffffff0e9ff00f7f7ff03fe87fffde6ff0cfe7dfffffffc5af67938d67f
-6afbff15a5d59ff89fffffff9fe7ffff5efff8fbaff7fffffff0e9ff00f7f7ff03fe87fffde6ff0c
-fe7dfffffffc5af67938d67f6afbff15a5d59ff89fffffff9fe7ffff5efff8fbaff7fffffff0e9ff
-01f9cff7ff02fbbff7e7ff0dfd88effffffffb5ce67935d78e5efbff1595c49ff89fffffff9fe7ff
-ff5efff8fabff6fffffff0e9ff01f9cff7ff02fbbff7e7ff0dfd88effffffffb5ce67935d78e5efb
-ff1595c49ff89fffffff9fe7ffff5efff8fabff6fffffff0e9ff01f9cff7ff02fbbff7e7ff0dfd88
-effffffffb5ce67935d78e5efbff1595c49ff89fffffff9fe7ffff5efff8fabff6fffffff0e9ff01
-fd8ff6ff01aee8eaff04fefeb88aeffdff07fb4ec8a944b7ad5ffbff1596c49ff7afffffff9fe7ff
-ff5ffff8f9dff7fffffff0e9ff01fd8ff6ff01aee8eaff04fefeb88aeffdff07fb4ec8a944b7ad5f
-fbff1596c49ff7afffffff9fe7ffff5ffff8f9dff7fffffff0e9ff01fd8ff6ff01aee8eaff04fefe
-b88aeffdff07fb4ec8a944b7ad5ffbff1596c49ff7afffffff9fe7ffff5ffff8f9dff7fffffff0e8
-ff007ef6ff03fac9ffdff1ff07db967665555788cffbff07fb4eb8d67587c97ffbff1586d49fe7af
-ffffff9fe7ffff6ffff8f8efe6fffffff0e8ff007ef6ff03fac9ffdff1ff07db967665555788cffb
-ff07fb4eb8d67587c97ffbff1586d49fe7afffffff9fe7ffff6ffff8f8efe6fffffff0e8ff007ef6
-ff03fac9ffdff1ff07db967665555788cffbff07fb4eb8d67587c97ffbff1586d49fe7afffffff9f
-e7ffff6ffff8f8efe6fffffff0e8ff00b8f6ff03fac9ffdff2ff06b643333343334ef9ff07f95faa
-e6a566d79ffbff1586d49fe6affffffe8fe8ffff6ffff8f8ffd5fffffff0e8ff00b8f6ff03fac9ff
-dff2ff06b643333343334ef9ff07f95faae6a566d79ffbff1586d49fe6affffffe8fe8ffff6ffff8
-f8ffd5fffffff0e8ff00b8f6ff03fac9ffdff2ff06b643333343334ef9ff07f95faae6a566d79ffb
-ff1586d49fe6affffffe8fe8ffff6ffff8f8ffd5fffffff0e8ff01f9bff7ff03cbb9fe8ff4ff01fe
-94fb33007ff9ff07f86f8af7d655d5dffbff1586d4aff5affffffe7fe8ffff7ffff7f7ffb5ffffff
-f0e8ff01f9bff7ff03cbb9fe8ff4ff01fe94fb33007ff9ff07f86f8af7d655d5dffbff1586d4aff5
-affffffe7fe8ffff7ffff7f7ffb5fffffff0e8ff01f9bff7ff03cbb9fe8ff4ff01fe94fb33007ff9
-ff07f86f8af7d655d5dffbff1586d4aff5affffffe7fe8ffff7ffff7f7ffb5fffffff0e7ff007ef7
-ff03adc9fadff4ff08b544333334333434dff9ff06f76f7bf97656e5faff1596e3bff4cfffffff9f
-e8ffff7fffe8f7ffc8fffffff0e7ff007ef7ff03adc9fadff4ff08b544333334333434dff9ff06f7
-6f7bf97656e5faff1596e3bff4cfffffff9fe8ffff7fffe8f7ffc8fffffff0e7ff007ef7ff03adc9
-fadff4ff08b544333334333434dff9ff06f76f7bf97656e5faff1596e3bff4cfffffff9fe8ffff7f
-ffe8f7ffc8fffffff0e7ff00d9f7ff03cae7f8fef4ff0083fc33014339f8ff06f68f6dfc5947c5fa
-ff15a5e3cff4aaa978998fd8fffc49ffe8f7ffcbfffffff0e7ff00d9f7ff03cae7f8fef4ff0083fc
-33014339f8ff06f68f6dfc5947c5faff15a5e3cff4aaa978998fd8fffc49ffe8f7ffcbfffffff0e7
-ff00d9f7ff03cae7f8fef4ff0083fc33014339f8ff06f68f6dfc5947c5faff15a5e3cff4aaa97899
-8fd8fffc49ffe8f7ffcbfffffff0e7ff01facff8ff02f7e8c7f3ff079c665655469de63af8ff23f5
-9f6ffe4b48c46667776678776656d4cff49bbba9978fc7fffe546db8f7ffcafffffff0e7ff01facf
-f8ff02f7e8c7f3ff079c665655469de63af8ff23f59f6ffe4b48c46667776678776656d4cff49bbb
-a9978fc7fffe546db8f7ffcafffffff0e7ff01facff8ff02f7e8c7f3ff079c665655469de63af8ff
-23f59f6ffe4b48c46667776678776656d4cff49bbba9978fc7fffe546db8f7ffcafffffff0e6ff00
-8ef8ff04fe8977fffcf4ff07c58e7ad9cfe864cff9ff23e59f6ffe7769c6eeeedddeddeeffc5e4cf
-d4dffffffb9fd7ffffac6478e8ffcafffffff0e6ff008ef8ff04fe8977fffcf4ff07c58e7ad9cfe8
-64cff9ff23e59f6ffe7769c6eeeedddeddeeffc5e4cfd4dffffffb9fd7ffffac6478e8ffcaffffff
-f0e6ff008ef8ff04fe8977fffcf4ff07c58e7ad9cfe864cff9ff23e59f6ffe7769c6eeeedddeddee
-ffc5e4cfd4dffffffb9fd7ffffac6478e8ffcafffffff0e6ff01e7eff8ff0afa45dffcfffdbefdff
-faeffbff07f7cd6ffcbffbf86ff9ff07b69e6fffd46bd49efbff15c6f3cfe4effffffccfe9fffe9f
-fc67d9ffbbfffffff0e6ff01e7eff8ff0afa45dffcfffdbefdfffaeffbff07f7cd6ffcbffbf86ff9
-ff07b69e6fffd46bd49efbff15c6f3cfe4effffffccfe9fffe9ffc67d9ffbbfffffff0e6ff01e7ef
-f8ff0afa45dffcfffdbefdfffaeffbff07f7cd6ffcbffbf86ff9ff07b69e6fffd46bd49efbff15c6
-f3cfe4effffffccfe9fffe9ffc67d9ffbbfffffff0e6ff01fe7cf8ff09fe74affcfcfe8cefffb6fa
-ff07fa9a8efe9ffffd4df9ff08b6cd7ffff55da877dffcff15b6d4dfd4effffffddff9fffe9fffa9
-caffadfffffff0e6ff01fe7cf8ff09fe74affcfcfe8cefffb6faff07fa9a8efe9ffffd4df9ff08b6
-cd7ffff55da877dffcff15b6d4dfd4effffffddff9fffe9fffa9caffadfffffff0e6ff01fe7cf8ff
-09fe74affcfcfe8cefffb6faff07fa9a8efe9ffffd4df9ff08b6cd7ffff55da877dffcff15b6d4df
-d4effffffddff9fffe9fffa9caffadfffffff0e5ff01f9bff9ff09fe946ffbfbfbcebfff5cfaff07
-fe8e8afe9fcdff76f9ff0985e99ffff85e5adc69effdff15d6435554fffffffebff8fffe8fff8aab
-efaffffffff0e5ff01f9bff9ff09fe946ffbfbfbcebfff5cfaff07fe8e8afe9fcdff76f9ff0985e9
-9ffff85e5adc69effdff15d6435554fffffffebff8fffe8fff8aabefaffffffff0e5ff01f9bff9ff
-09fe946ffbfbfbcebfff5cfaff07fe8e8afe9fcdff76f9ff0985e99ffff85e5adc69effdff15d643
-5554fffffffebff8fffe8fff8aabefaffffffff0e4ff00a9f8ff08f94dfbfce8df9ffbaaf9ff06df
-8a9bbfd8ffb7f9ff09d565cffff86d658ee749fcff14ecbacefffffffe8fe5fffe9fff6656896cff
-fffff0e4ff00a9f8ff08f94dfbfce8df9ffbaaf9ff06df8a9bbfd8ffb7f9ff09d565cffff86d658e
-e749fcff14ecbacefffffffe8fe5fffe9fff6656896cfffffff0e4ff00a9f8ff08f94dfbfce8df9f
-fbaaf9ff06df8a9bbfd8ffb7f9ff09d565cffff86d658ee749fcff14ecbacefffffffe8fe5fffe9f
-ff6656896cfffffff0e4ff01fc7df9ff08fd46ebfdd9cb8ef8ccf9ff06fedf97fff7ff98f8ff09fa
-efffe89e6e859fd75bf6ff0d56a8fffebfffcdfedd648dfffff0e4ff01fc7df9ff08fd46ebfdd9cb
-8ef8ccf9ff06fedf97fff7ff98f8ff09faefffe89e6e859fd75bf6ff0d56a8fffebfffcdfedd648d
-fffff0e4ff01fc7df9ff08fd46ebfdd9cb8ef8ccf9ff06fedf97fff7ff98f8ff09faefffe89e6e85
-9fd75bf6ff0d56a8fffebfffcdfedd648dfffff0e3ff01e8cff9ff0797c8febc69caf8fbf7ff04a6
-ffe7ff6cf5ff1fc5ae7ffc54bfe767777665555567988899aa86455557aaaaababbbb969fffff0e3
-ff01e8cff9ff0797c8febc69caf8fbf7ff04a6ffe7ff6cf5ff1fc5ae7ffc54bfe767777665555567
-988899aa86455557aaaaababbbb969fffff0e3ff01e8cff9ff0797c8febc69caf8fbf7ff04a6ffe7
-ff6cf5ff1fc5ae7ffc54bfe767777665555567988899aa86455557aaaaababbbb969fffff0e2ff00
-8ef9ff07f999aeae56e8f8fbf8ff05fd89bfbafb8ff5ff1fa5ac9fffd536ce4cedeeeecb99aa9cdd
-ccbbbbaa99a98aaaaaaaa98989fffff0e2ff008ef9ff07f999aeae56e8f8fbf8ff05fd89bfbafb8f
-f5ff1fa5ac9fffd536ce4cedeeeecb99aa9cddccbbbbaa99a98aaaaaaaa98989fffff0e2ff008ef9
-ff07f999aeae56e8f8fbf8ff05fd89bfbafb8ff5ff1fa5ac9fffd536ce4cedeeeecb99aa9cddccbb
-bbaa99a98aaaaaaaa98989fffff0e2ff00edf8ff0796eaaf859ba7fcdff9ff05ebfcbf7ef6eff5ff
-079478affffe95344eedff03d8fffff0e2ff00edf8ff0796eaaf859ba7fcdff9ff05ebfcbf7ef6ef
-f5ff079478affffe95344eedff03d8fffff0e2ff00edf8ff0796eaaf859ba7fcdff9ff05ebfcbf7e
-f6eff5ff079478affffe95344eedff03d8fffff0d8ff07fdbb9fd85da6bfaff8ff03e9ec8f7cf4ff
-1ffc75bfffffffd53899abccccccbbabbabaaabcdeedcb98888999a9987afffff0d8ff07fdbb9fd8
-5da6bfaff8ff03e9ec8f7cf4ff1ffc75bfffffffd53899abccccccbbabbabaaabcdeedcb98888999
-a9987afffff0d8ff07fdbb9fd85da6bfaff8ff03e9ec8f7cf4ff1ffc75bfffffffd53899abcccccc
-bbabbabaaabcdeedcb98888999a9987afffff0d7ff06aad9ff96e86edcf8ff039dd7e8cff3ff00fe
-fdff19fed787666556677788888999987667789bcccccccdeefffffff0d7ff06aad9ff96e86edcf8
-ff039dd7e8cff3ff00fefdff19fed787666556677788888999987667789bcccccccdeefffffff0d7
-ff06aad9ff96e86edcf8ff039dd7e8cff3ff00fefdff19fed787666556677788888999987667789b
-cccccccdeefffffff0d8ff07fddbfd98e67e77faf9ff03f9cd7ebdd4ff00f0d8ff07fddbfd98e67e
-77faf9ff03f9cd7ebdd4ff00f0d8ff07fddbfd98e67e77faf9ff03f9cd7ebdd4ff00f0d8ff08fbaf
-fffecd8ba9adbffbff04fe9bc7ebbfd4ff00f0d8ff08fbaffffecd8ba9adbffbff04fe9bc7ebbfd4
-ff00f0d8ff08fbaffffecd8ba9adbffbff04fe9bc7ebbfd4ff00f0d8ff08bcdfffffefb7e88fbefc
-ff04edcbee7eacd3ff00f0d8ff08bcdfffffefb7e88fbefcff04edcbee7eacd3ff00f0d8ff08bcdf
-ffffefb7e88fbefcff04edcbee7eacd3ff00f0d9ff09feb9fffffeecd7e98ffafdff09f857dfe7e9
-efffeca99ed7ff00f0d9ff09feb9fffffeecd7e98ffafdff09f857dfe7e9efffeca99ed7ff00f0d9
-ff09feb9fffffeecd7e98ffafdff09f857dfe7e9efffeca99ed7ff00f0d9ff18faf8ffffffc9e8e8
-9efe9fffffffe76cff8d8cfd98adfbb8ced8ff00f0d9ff18faf8ffffffc9e8e89efe9fffffffe76c
-ff8d8cfd98adfbb8ced8ff00f0d9ff18faf8ffffffc9e8e89efe9fffffffe76cff8d8cfd98adfbb8
-ced8ff00f0d9ff19f9f8ffffdbe7ca9caeff8fffffff8a6ff9c8ce875effeeff8bdfd9ff00f0d9ff
-19f9f8ffffdbe7ca9caeff8fffffff8a6ff9c8ce875effeeff8bdfd9ff00f0d9ff19f9f8ffffdbe7
-ca9caeff8fffffff8a6ff9c8ce875effeeff8bdfd9ff00f0d9ff19f9f9ffeacf9e9e7eadfbbfffff
-ff6a7fc99cf7c746ca47bfe8bfd9ff00f0d9ff19f9f9ffeacf9e9e7eadfbbfffffff6a7fc99cf7c7
-46ca47bfe8bfd9ff00f0d9ff19f9f9ffeacf9e9e7eadfbbfffffff6a7fc99cf7c746ca47bfe8bfd9
-ff00f0d9ff09faebfdbfeadf8e8f9ef9fdff0b6a8f89afe77444b8498ff7bfd9ff00f0d9ff09faeb
-fdbfeadf8e8f9ef9fdff0b6a8f89afe77444b8498ff7bfd9ff00f0d9ff09faebfdbfeadf8e8f9ef9
-fdff0b6a8f89afe77444b8498ff7bfd9ff00f0d9ff09fdddfbfb9eff8b9f8fdbfdff0b5c8e68ff95
-433386447865afd9ff00f0d9ff09fdddfbfb9eff8b9f8fdbfdff0b5c8e68ff95433386447865afd9
-ff00f0d9ff09fdddfbfb9eff8b9f8fdbfdff0b5c8e68ff95433386447865afd9ff00f0d7ff17ce9e
-ffff9c8f9fbdfffffeff6f7b5eff643343453543688fd9ff00f0d7ff17ce9effff9c8f9fbdfffffe
+8ff8effffff0e9ff00baf7ff01f66ce3ff00c6feff07fd69e6685be66f88fbff1196f59ff99fffff
+fe8fe6ffff5efff8ec9ff7feff00f0e9ff00baf7ff01f66ce3ff00c6feff07fd69e6685be66f88fb
+ff1196f59ff99ffffffe8fe6ffff5efff8ec9ff7feff00f0e9ff00baf7ff01f66ce3ff00c6feff07
+fd69e6685be66f88fbff1196f59ff99ffffffe8fe6ffff5efff8ec9ff7feff00f0e9ff00f7f7ff03
+fe87fffde6ff01fe7dfeff07fc5af67938d67f6afbff04a5d59ff89ffeff099fe7ffff5efff8fbaf
+f7feff00f0e9ff00f7f7ff03fe87fffde6ff01fe7dfeff07fc5af67938d67f6afbff04a5d59ff89f
+feff099fe7ffff5efff8fbaff7feff00f0e9ff00f7f7ff03fe87fffde6ff01fe7dfeff07fc5af679
+38d67f6afbff04a5d59ff89ffeff099fe7ffff5efff8fbaff7feff00f0e9ff01f9cff7ff02fbbff7
+e7ff02fd88effeff07fb5ce67935d78e5efbff0495c49ff89ffeff099fe7ffff5efff8fabff6feff
+00f0e9ff01f9cff7ff02fbbff7e7ff02fd88effeff07fb5ce67935d78e5efbff0495c49ff89ffeff
+099fe7ffff5efff8fabff6feff00f0e9ff01f9cff7ff02fbbff7e7ff02fd88effeff07fb5ce67935
+d78e5efbff0495c49ff89ffeff099fe7ffff5efff8fabff6feff00f0e9ff01fd8ff6ff01aee8eaff
+fffe02b88aeffdff07fb4ec8a944b7ad5ffbff0496c49ff7affeff099fe7ffff5ffff8f9dff7feff
+00f0e9ff01fd8ff6ff01aee8eafffffe02b88aeffdff07fb4ec8a944b7ad5ffbff0496c49ff7affe
+ff099fe7ffff5ffff8f9dff7feff00f0e9ff01fd8ff6ff01aee8eafffffe02b88aeffdff07fb4ec8
+a944b7ad5ffbff0496c49ff7affeff099fe7ffff5ffff8f9dff7feff00f0e8ff007ef6ff03fac9ff
+dff1ff07db967665555788cffbff07fb4eb8d67587c97ffbff0486d49fe7affeff099fe7ffff6fff
+f8f8efe6feff00f0e8ff007ef6ff03fac9ffdff1ff07db967665555788cffbff07fb4eb8d67587c9
+7ffbff0486d49fe7affeff099fe7ffff6ffff8f8efe6feff00f0e8ff007ef6ff03fac9ffdff1ff07
+db967665555788cffbff07fb4eb8d67587c97ffbff0486d49fe7affeff099fe7ffff6ffff8f8efe6
+feff00f0e8ff00b8f6ff03fac9ffdff2ff06b643333343334ef9ff07f95faae6a566d79ffbff1186
+d49fe6affffffe8fe8ffff6ffff8f8ffd5feff00f0e8ff00b8f6ff03fac9ffdff2ff06b643333343
+334ef9ff07f95faae6a566d79ffbff1186d49fe6affffffe8fe8ffff6ffff8f8ffd5feff00f0e8ff
+00b8f6ff03fac9ffdff2ff06b643333343334ef9ff07f95faae6a566d79ffbff1186d49fe6afffff
+fe8fe8ffff6ffff8f8ffd5feff00f0e8ff01f9bff7ff03cbb9fe8ff4ff01fe94fb33007ff9ff07f8
+6f8af7d655d5dffbff1186d4aff5affffffe7fe8ffff7ffff7f7ffb5feff00f0e8ff01f9bff7ff03
+cbb9fe8ff4ff01fe94fb33007ff9ff07f86f8af7d655d5dffbff1186d4aff5affffffe7fe8ffff7f
+fff7f7ffb5feff00f0e8ff01f9bff7ff03cbb9fe8ff4ff01fe94fb33007ff9ff07f86f8af7d655d5
+dffbff1186d4aff5affffffe7fe8ffff7ffff7f7ffb5feff00f0e7ff007ef7ff03adc9fadff4ff08
+b544333334333434dff9ff06f76f7bf97656e5faff0496e3bff4cffeff099fe8ffff7fffe8f7ffc8
+feff00f0e7ff007ef7ff03adc9fadff4ff08b544333334333434dff9ff06f76f7bf97656e5faff04
+96e3bff4cffeff099fe8ffff7fffe8f7ffc8feff00f0e7ff007ef7ff03adc9fadff4ff08b5443333
+34333434dff9ff06f76f7bf97656e5faff0496e3bff4cffeff099fe8ffff7fffe8f7ffc8feff00f0
+e7ff00d9f7ff03cae7f8fef4ff0083fc33014339f8ff06f68f6dfc5947c5faff11a5e3cff4aaa978
+998fd8fffc49ffe8f7ffcbfeff00f0e7ff00d9f7ff03cae7f8fef4ff0083fc33014339f8ff06f68f
+6dfc5947c5faff11a5e3cff4aaa978998fd8fffc49ffe8f7ffcbfeff00f0e7ff00d9f7ff03cae7f8
+fef4ff0083fc33014339f8ff06f68f6dfc5947c5faff11a5e3cff4aaa978998fd8fffc49ffe8f7ff
+cbfeff00f0e7ff01facff8ff02f7e8c7f3ff079c665655469de63af8ff1ff59f6ffe4b48c4666777
+6678776656d4cff49bbba9978fc7fffe546db8f7ffcafeff00f0e7ff01facff8ff02f7e8c7f3ff07
+9c665655469de63af8ff1ff59f6ffe4b48c46667776678776656d4cff49bbba9978fc7fffe546db8
+f7ffcafeff00f0e7ff01facff8ff02f7e8c7f3ff079c665655469de63af8ff1ff59f6ffe4b48c466
+67776678776656d4cff49bbba9978fc7fffe546db8f7ffcafeff00f0e6ff008ef8ff04fe8977fffc
+f4ff07c58e7ad9cfe864cff9ff1fe59f6ffe7769c6eeeedddeddeeffc5e4cfd4dffffffb9fd7ffff
+ac6478e8ffcafeff00f0e6ff008ef8ff04fe8977fffcf4ff07c58e7ad9cfe864cff9ff1fe59f6ffe
+7769c6eeeedddeddeeffc5e4cfd4dffffffb9fd7ffffac6478e8ffcafeff00f0e6ff008ef8ff04fe
+8977fffcf4ff07c58e7ad9cfe864cff9ff1fe59f6ffe7769c6eeeedddeddeeffc5e4cfd4dffffffb
+9fd7ffffac6478e8ffcafeff00f0e6ff01e7eff8ff0afa45dffcfffdbefdfffaeffbff07f7cd6ffc
+bffbf86ff9ff07b69e6fffd46bd49efbff11c6f3cfe4effffffccfe9fffe9ffc67d9ffbbfeff00f0
+e6ff01e7eff8ff0afa45dffcfffdbefdfffaeffbff07f7cd6ffcbffbf86ff9ff07b69e6fffd46bd4
+9efbff11c6f3cfe4effffffccfe9fffe9ffc67d9ffbbfeff00f0e6ff01e7eff8ff0afa45dffcfffd
+befdfffaeffbff07f7cd6ffcbffbf86ff9ff07b69e6fffd46bd49efbff11c6f3cfe4effffffccfe9
+fffe9ffc67d9ffbbfeff00f0e6ff01fe7cf8ff09fe74affcfcfe8cefffb6faff07fa9a8efe9ffffd
+4df9ff08b6cd7ffff55da877dffcff11b6d4dfd4effffffddff9fffe9fffa9caffadfeff00f0e6ff
+01fe7cf8ff09fe74affcfcfe8cefffb6faff07fa9a8efe9ffffd4df9ff08b6cd7ffff55da877dffc
+ff11b6d4dfd4effffffddff9fffe9fffa9caffadfeff00f0e6ff01fe7cf8ff09fe74affcfcfe8cef
+ffb6faff07fa9a8efe9ffffd4df9ff08b6cd7ffff55da877dffcff11b6d4dfd4effffffddff9fffe
+9fffa9caffadfeff00f0e5ff01f9bff9ff02fe946ffefb03cebfff5cfaff07fe8e8afe9fcdff76f9
+ff0985e99ffff85e5adc69effdff03d6435554feff0afebff8fffe8fff8aabefaffeff00f0e5ff01
+f9bff9ff02fe946ffefb03cebfff5cfaff07fe8e8afe9fcdff76f9ff0985e99ffff85e5adc69effd
+ff03d6435554feff0afebff8fffe8fff8aabefaffeff00f0e5ff01f9bff9ff02fe946ffefb03cebf
+ff5cfaff07fe8e8afe9fcdff76f9ff0985e99ffff85e5adc69effdff03d6435554feff0afebff8ff
+fe8fff8aabefaffeff00f0e4ff00a9f8ff08f94dfbfce8df9ffbaaf9ff06df8a9bbfd8ffb7f9ff09
+d565cffff86d658ee749fcff02ecbacefeff0afe8fe5fffe9fff6656896cfeff00f0e4ff00a9f8ff
+08f94dfbfce8df9ffbaaf9ff06df8a9bbfd8ffb7f9ff09d565cffff86d658ee749fcff02ecbacefe
+ff0afe8fe5fffe9fff6656896cfeff00f0e4ff00a9f8ff08f94dfbfce8df9ffbaaf9ff06df8a9bbf
+d8ffb7f9ff09d565cffff86d658ee749fcff02ecbacefeff0afe8fe5fffe9fff6656896cfeff00f0
+e4ff01fc7df9ff08fd46ebfdd9cb8ef8ccf9ff06fedf97fff7ff98f8ff09faefffe89e6e859fd75b
+f6ff0d56a8fffebfffcdfedd648dfffff0e4ff01fc7df9ff08fd46ebfdd9cb8ef8ccf9ff06fedf97
+fff7ff98f8ff09faefffe89e6e859fd75bf6ff0d56a8fffebfffcdfedd648dfffff0e4ff01fc7df9
+ff08fd46ebfdd9cb8ef8ccf9ff06fedf97fff7ff98f8ff09faefffe89e6e859fd75bf6ff0d56a8ff
+febfffcdfedd648dfffff0e3ff01e8cff9ff0797c8febc69caf8fbf7ff04a6ffe7ff6cf5ff1fc5ae
+7ffc54bfe767777665555567988899aa86455557aaaaababbbb969fffff0e3ff01e8cff9ff0797c8
+febc69caf8fbf7ff04a6ffe7ff6cf5ff1fc5ae7ffc54bfe767777665555567988899aa86455557aa
+aaababbbb969fffff0e3ff01e8cff9ff0797c8febc69caf8fbf7ff04a6ffe7ff6cf5ff1fc5ae7ffc
+54bfe767777665555567988899aa86455557aaaaababbbb969fffff0e2ff008ef9ff07f999aeae56
+e8f8fbf8ff05fd89bfbafb8ff5ff16a5ac9fffd536ce4cedeeeecb99aa9cddccbbbbaa99a98afeaa
+05a98989fffff0e2ff008ef9ff07f999aeae56e8f8fbf8ff05fd89bfbafb8ff5ff16a5ac9fffd536
+ce4cedeeeecb99aa9cddccbbbbaa99a98afeaa05a98989fffff0e2ff008ef9ff07f999aeae56e8f8
+fbf8ff05fd89bfbafb8ff5ff16a5ac9fffd536ce4cedeeeecb99aa9cddccbbbbaa99a98afeaa05a9
+8989fffff0e2ff00edf8ff0796eaaf859ba7fcdff9ff05ebfcbf7ef6eff5ff079478affffe95344e
+edff03d8fffff0e2ff00edf8ff0796eaaf859ba7fcdff9ff05ebfcbf7ef6eff5ff079478affffe95
+344eedff03d8fffff0e2ff00edf8ff0796eaaf859ba7fcdff9ff05ebfcbf7ef6eff5ff079478afff
+fe95344eedff03d8fffff0d8ff07fdbb9fd85da6bfaff8ff03e9ec8f7cf4ff02fc75bffeff03d538
+99abfecc12bbabbabaaabcdeedcb98888999a9987afffff0d8ff07fdbb9fd85da6bfaff8ff03e9ec
+8f7cf4ff02fc75bffeff03d53899abfecc12bbabbabaaabcdeedcb98888999a9987afffff0d8ff07
+fdbb9fd85da6bfaff8ff03e9ec8f7cf4ff02fc75bffeff03d53899abfecc12bbabbabaaabcdeedcb
+98888999a9987afffff0d7ff06aad9ff96e86edcf8ff039dd7e8cff3ff00fefdff10fed787666556
+677788888999987667789bfecc01cdeefeff00f0d7ff06aad9ff96e86edcf8ff039dd7e8cff3ff00
+fefdff10fed787666556677788888999987667789bfecc01cdeefeff00f0d7ff06aad9ff96e86edc
+f8ff039dd7e8cff3ff00fefdff10fed787666556677788888999987667789bfecc01cdeefeff00f0
+d8ff07fddbfd98e67e77faf9ff03f9cd7ebdd4ff00f0d8ff07fddbfd98e67e77faf9ff03f9cd7ebd
+d4ff00f0d8ff07fddbfd98e67e77faf9ff03f9cd7ebdd4ff00f0d8ff08fbaffffecd8ba9adbffbff
+04fe9bc7ebbfd4ff00f0d8ff08fbaffffecd8ba9adbffbff04fe9bc7ebbfd4ff00f0d8ff08fbafff
+fecd8ba9adbffbff04fe9bc7ebbfd4ff00f0d8ff08bcdfffffefb7e88fbefcff04edcbee7eacd3ff
+00f0d8ff08bcdfffffefb7e88fbefcff04edcbee7eacd3ff00f0d8ff08bcdfffffefb7e88fbefcff
+04edcbee7eacd3ff00f0d9ff09feb9fffffeecd7e98ffafdff09f857dfe7e9efffeca99ed7ff00f0
+d9ff09feb9fffffeecd7e98ffafdff09f857dfe7e9efffeca99ed7ff00f0d9ff09feb9fffffeecd7
+e98ffafdff09f857dfe7e9efffeca99ed7ff00f0d9ff01faf8feff05c9e8e89efe9ffeff0ae76cff
+8d8cfd98adfbb8ced8ff00f0d9ff01faf8feff05c9e8e89efe9ffeff0ae76cff8d8cfd98adfbb8ce
+d8ff00f0d9ff01faf8feff05c9e8e89efe9ffeff0ae76cff8d8cfd98adfbb8ced8ff00f0d9ff0af9
+f8ffffdbe7ca9caeff8ffeff0b8a6ff9c8ce875effeeff8bdfd9ff00f0d9ff0af9f8ffffdbe7ca9c
+aeff8ffeff0b8a6ff9c8ce875effeeff8bdfd9ff00f0d9ff0af9f8ffffdbe7ca9caeff8ffeff0b8a
+6ff9c8ce875effeeff8bdfd9ff00f0d9fffff908ffeacf9e9e7eadfbbffeff0b6a7fc99cf7c746ca
+47bfe8bfd9ff00f0d9fffff908ffeacf9e9e7eadfbbffeff0b6a7fc99cf7c746ca47bfe8bfd9ff00
+f0d9fffff908ffeacf9e9e7eadfbbffeff0b6a7fc99cf7c746ca47bfe8bfd9ff00f0d9ff09faebfd
+bfeadf8e8f9ef9fdff0b6a8f89afe77444b8498ff7bfd9ff00f0d9ff09faebfdbfeadf8e8f9ef9fd
+ff0b6a8f89afe77444b8498ff7bfd9ff00f0d9ff09faebfdbfeadf8e8f9ef9fdff0b6a8f89afe774
+44b8498ff7bfd9ff00f0d9ff09fdddfbfb9eff8b9f8fdbfdff0b5c8e68ff95433386447865afd9ff
+00f0d9ff09fdddfbfb9eff8b9f8fdbfdff0b5c8e68ff95433386447865afd9ff00f0d9ff09fdddfb
+fb9eff8b9f8fdbfdff0b5c8e68ff95433386447865afd9ff00f0d7ff17ce9effff9c8f9fbdfffffe
 ff6f7b5eff643343453543688fd9ff00f0d7ff17ce9effff9c8f9fbdfffffeff6f7b5eff64334345
-3543688fd9ff00f0d7ff17e9efffffab6cdb9efffffdff6f8b4fff64434437443345bfd9ff00f0d7
+3543688fd9ff00f0d7ff17ce9effff9c8f9fbdfffffeff6f7b5eff643343453543688fd9ff00f0d7
 ff17e9efffffab6cdb9efffffdff6f8b4fff64434437443345bfd9ff00f0d7ff17e9efffffab6cdb
-9efffffdff6f8b4fff64434437443345bfd9ff00f0d7ff16dbffffffe89afabdfffffddf8bca7bff
-83436434433466d8ff00f0d7ff16dbffffffe89afabdfffffddf8bca7bff83436434433466d8ff00
-f0d7ff16dbffffffe89afabdfffffddf8bca7bff83436434433466d8ff00f0d7ff16befffffff9b6
-cbeafeffffafb5fef9bfc359d834433598d8ff00f0d7ff16befffffff9b6cbeafeffffafb5fef9bf
-c359d834433598d8ff00f0d7ff16befffffff9b6cbeafeffffafb5fef9bfc359d834433598d8ff00
-f0d2ff119c8ffbffefff8ee58fff99e548784433455ed8ff00f0d2ff119c8ffbffefff8ee58fff99
-e548784433455ed8ff00f0d2ff119c8ffbffefff8ee58fff99e548784433455ed8ff00f0d2ff01fc
-cffdff0bb9fa8afffb7743333333548ed8ff00f0d2ff01fccffdff0bb9fa8afffb7743333333548e
-d8ff00f0d2ff01fccffdff0bb9fa8afffb7743333333548ed8ff00f0d2ff00fafcff0cfa68858eff
-fc87433333356549d9ff00f0d2ff00fafcff0cfa68858efffc87433333356549d9ff00f0d2ff00fa
-fcff0cfa68858efffc87433333356549d9ff00f0d2ff00ebfbff0cb99a769effffdca7568effe69a
-daff00f0d2ff00ebfbff0cb99a769effffdca7568effe69adaff00f0d2ff00ebfbff0cb99a769eff
-ffdca7568effe69adaff00f0d2ff00cffaff03feffc7effdff03efffb68adaff00f0d2ff00cffaff
-03feffc7effdff03efffb68adaff00f0d2ff00cffaff03feffc7effdff03efffb68adaff00f0c8ff
-01fedffcff02fe645adaff00f0c8ff01fedffcff02fe645adaff00f0c8ff01fedffcff02fe645ada
-ff00f097ff00f097ff00f097ff00f097ff00f097ff00f097ff00f097ff00f097ff00f097ff00f0
-
+9efffffdff6f8b4fff64434437443345bfd9ff00f0d7ff17e9efffffab6cdb9efffffdff6f8b4fff
+64434437443345bfd9ff00f0d7ff00dbfeff12e89afabdfffffddf8bca7bff83436434433466d8ff
+00f0d7ff00dbfeff12e89afabdfffffddf8bca7bff83436434433466d8ff00f0d7ff00dbfeff12e8
+9afabdfffffddf8bca7bff83436434433466d8ff00f0d7ff00befeff12f9b6cbeafeffffafb5fef9
+bfc359d834433598d8ff00f0d7ff00befeff12f9b6cbeafeffffafb5fef9bfc359d834433598d8ff
+00f0d7ff00befeff12f9b6cbeafeffffafb5fef9bfc359d834433598d8ff00f0d2ff119c8ffbffef
+ff8ee58fff99e548784433455ed8ff00f0d2ff119c8ffbffefff8ee58fff99e548784433455ed8ff
+00f0d2ff119c8ffbffefff8ee58fff99e548784433455ed8ff00f0d2ff01fccffdff06b9fa8afffb
+7743fe3301548ed8ff00f0d2ff01fccffdff06b9fa8afffb7743fe3301548ed8ff00f0d2ff01fccf
+fdff06b9fa8afffb7743fe3301548ed8ff00f0d2ff00fafcff0cfa68858efffc87433333356549d9
+ff00f0d2ff00fafcff0cfa68858efffc87433333356549d9ff00f0d2ff00fafcff0cfa68858efffc
+87433333356549d9ff00f0d2ff00ebfbff0cb99a769effffdca7568effe69adaff00f0d2ff00ebfb
+ff0cb99a769effffdca7568effe69adaff00f0d2ff00ebfbff0cb99a769effffdca7568effe69ada
+ff00f0d2ff00cffaff03feffc7effdff03efffb68adaff00f0d2ff00cffaff03feffc7effdff03ef
+ffb68adaff00f0d2ff00cffaff03feffc7effdff03efffb68adaff00f0c8ff01fedffcff02fe645a
+daff00f0c8ff01fedffcff02fe645adaff00f0c8ff01fedffcff02fe645adaff00f097ff00f097ff
+00f097ff00f097ff00f097ff00f097ff00f097ff00f097ff00f097ff00f0
+currentdict /inputf undef
+currentdict /picstr undef
+currentdict /rpicstr undef
+currentdict /gpicstr undef
+currentdict /bpicstr undef
+grestore
+showpage
+%%Trailer
index 54dbb188a08390662730e5083d01e8c889bb6118..641d15cd653309b91d22ad1b2f8705d994bb36d1 100644 (file)
@@ -82,3 +82,7 @@ every fast clock cycle. The dynamic common-mode feedback
 arrangement operates synchronously with the reset time slot and
 its configuration is equivalent to that in the differential
 feedback path.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
diff --git a/doc/groff.info b/doc/groff.info
deleted file mode 100644 (file)
index f76f914..0000000
+++ /dev/null
@@ -1,315 +0,0 @@
-This is groff.info, produced by makeinfo version 5.2dev from
-groff.texinfo.
-
-This manual documents GNU 'troff' version 1.22.3.
-
-   Copyright © 1994-2014 Free Software Foundation, Inc.
-
-     Permission is granted to copy, distribute and/or modify this
-     document under the terms of the GNU Free Documentation License,
-     Version 1.3 or any later version published by the Free Software
-     Foundation; with no Invariant Sections, with the Front-Cover texts
-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
-     below.  A copy of the license is included in the section entitled
-     "GNU Free Documentation License."
-
-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
-     modify this GNU manual.  Buying copies from the FSF supports it in
-     developing GNU and promoting software freedom."
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff).               The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-\1f
-Indirect:
-groff.info-1: 981
-groff.info-2: 305458
-\1f
-Tag Table:
-(Indirect)
-Node: Top\7f981
-Node: Introduction\7f2252
-Node: What Is groff?\7f2705
-Node: What Is groff?-Footnotes\7f4161
-Ref: What Is groff?-Footnote-1\7f4235
-Node: History\7f4272
-Node: History-Footnotes\7f9245
-Ref: History-Footnote-1\7f9305
-Node: groff Capabilities\7f9513
-Node: Macro Package Intro\7f10709
-Node: Preprocessor Intro\7f11341
-Node: Output device intro\7f12968
-Node: Credits\7f13454
-Node: Invoking groff\7f13968
-Node: Groff Options\7f15266
-Node: Environment\7f26087
-Node: Macro Directories\7f28435
-Node: Font Directories\7f29770
-Node: Paper Size\7f31418
-Node: Invocation Examples\7f32774
-Node: Invocation Examples-Footnotes\7f33972
-Ref: Invocation Examples-Footnote-1\7f34056
-Node: grog\7f34289
-Node: Tutorial for Macro Users\7f35570
-Node: Basics\7f35996
-Node: Basics-Footnotes\7f40816
-Ref: Basics-Footnote-1\7f40874
-Ref: Basics-Footnote-2\7f40968
-Node: Common Features\7f41082
-Node: Paragraphs\7f41874
-Node: Sections and Chapters\7f43383
-Node: Headers and Footers\7f43889
-Node: Page Layout Adjustment\7f44776
-Node: Displays\7f45057
-Node: Footnotes and Annotations\7f46326
-Node: Table of Contents\7f46998
-Node: Indices\7f47527
-Node: Paper Formats\7f47943
-Node: Multiple Columns\7f48330
-Node: Font and Size Changes\7f48594
-Node: Predefined Strings\7f48912
-Node: Preprocessor Support\7f49264
-Node: Configuration and Customization\7f49834
-Node: Macro Packages\7f50217
-Node: man\7f50785
-Node: Man options\7f51227
-Node: Man options-Footnotes\7f53925
-Ref: Man options-Footnote-1\7f53993
-Node: Man usage\7f54713
-Node: Man font macros\7f60777
-Node: Miscellaneous man macros\7f62613
-Node: Predefined man strings\7f64358
-Node: Preprocessors in man pages\7f64930
-Node: Optional man extensions\7f65557
-Node: mdoc\7f69553
-Node: ms\7f69732
-Node: ms Intro\7f70241
-Node: General ms Structure\7f70924
-Node: General ms Structure-Footnotes\7f73379
-Ref: General ms Structure-Footnote-1\7f73465
-Node: ms Document Control Registers\7f73511
-Node: ms Cover Page Macros\7f80162
-Node: ms Body Text\7f83182
-Node: Paragraphs in ms\7f83675
-Node: Headings in ms\7f85448
-Node: Highlighting in ms\7f88227
-Node: Lists in ms\7f90821
-Node: Indentation values in ms\7f94221
-Node: Tabstops in ms\7f94855
-Node: ms Displays and Keeps\7f95282
-Node: ms Insertions\7f99239
-Node: Example multi-page table\7f100811
-Node: ms Footnotes\7f101271
-Node: ms Page Layout\7f102541
-Node: ms Headers and Footers\7f103072
-Node: ms Margins\7f104527
-Node: ms Multiple Columns\7f104786
-Node: ms TOC\7f105606
-Node: ms Strings and Special Characters\7f108340
-Node: ms Strings and Special Characters-Footnotes\7f111152
-Ref: ms Strings and Special Characters-Footnote-1\7f111264
-Node: Differences from AT&T ms\7f111351
-Node: Missing ms Macros\7f114432
-Node: Additional ms Macros\7f115207
-Node: Naming Conventions\7f116480
-Node: me\7f117516
-Node: mm\7f117684
-Node: mom\7f117853
-Node: gtroff Reference\7f118102
-Node: Text\7f119026
-Node: Filling and Adjusting\7f119595
-Node: Hyphenation\7f120323
-Node: Sentences\7f121120
-Node: Tab Stops\7f122285
-Node: Implicit Line Breaks\7f123193
-Node: Input Conventions\7f124335
-Node: Input Encodings\7f125141
-Node: Measurements\7f127273
-Node: Measurements-Footnotes\7f129477
-Ref: Measurements-Footnote-1\7f129547
-Node: Default Units\7f129619
-Node: Expressions\7f130679
-Node: Expressions-Footnotes\7f134090
-Ref: Expressions-Footnote-1\7f134158
-Node: Identifiers\7f134285
-Node: Embedded Commands\7f138146
-Node: Requests\7f138901
-Node: Request and Macro Arguments\7f141146
-Node: Request and Macro Arguments-Footnotes\7f143638
-Ref: Request and Macro Arguments-Footnote-1\7f143738
-Ref: Request and Macro Arguments-Footnote-2\7f143866
-Node: Macros\7f144221
-Node: Escapes\7f144611
-Node: Comments\7f147479
-Node: Comments-Footnotes\7f150055
-Ref: Comments-Footnote-1\7f150117
-Node: Registers\7f150216
-Node: Setting Registers\7f150729
-Node: Interpolating Registers\7f154641
-Node: Auto-increment\7f155460
-Node: Assigning Formats\7f157013
-Node: Built-in Registers\7f159874
-Node: Manipulating Filling and Adjusting\7f163697
-Node: Manipulating Hyphenation\7f172782
-Node: Manipulating Hyphenation-Footnotes\7f184331
-Ref: Manipulating Hyphenation-Footnote-1\7f184425
-Node: Manipulating Spacing\7f184500
-Node: Tabs and Fields\7f189041
-Node: Tabs and Fields-Footnotes\7f195024
-Ref: Tabs and Fields-Footnote-1\7f195100
-Node: Leaders\7f195178
-Node: Leaders-Footnotes\7f196782
-Ref: Leaders-Footnote-1\7f196842
-Node: Fields\7f196923
-Node: Character Translations\7f198352
-Node: Troff and Nroff Mode\7f207579
-Node: Line Layout\7f209580
-Node: Line Control\7f215436
-Node: Page Layout\7f218089
-Node: Page Control\7f221950
-Node: Fonts and Symbols\7f225687
-Node: Changing Fonts\7f226293
-Node: Font Families\7f229824
-Node: Font Positions\7f234384
-Node: Using Symbols\7f237532
-Node: Using Symbols-Footnotes\7f254537
-Ref: Using Symbols-Footnote-1\7f254609
-Ref: Using Symbols-Footnote-2\7f255062
-Ref: Using Symbols-Footnote-3\7f255133
-Ref: Using Symbols-Footnote-4\7f255372
-Node: Character Classes\7f255435
-Node: Special Fonts\7f258152
-Node: Artificial Fonts\7f259345
-Node: Ligatures and Kerning\7f264878
-Node: Sizes\7f270903
-Node: Sizes-Footnotes\7f271744
-Ref: Sizes-Footnote-1\7f271800
-Node: Changing Type Sizes\7f272212
-Node: Fractional Type Sizes\7f277734
-Node: Strings\7f280813
-Ref: als\7f288636
-Node: Conditionals and Loops\7f290518
-Node: Operators in Conditionals\7f290750
-Node: Operators in Conditionals-Footnotes\7f294494
-Ref: Operators in Conditionals-Footnote-1\7f294590
-Ref: Operators in Conditionals-Footnote-2\7f294669
-Node: if-else\7f294768
-Node: while\7f296287
-Node: Writing Macros\7f298672
-Node: Writing Macros-Footnotes\7f304106
-Ref: Writing Macros-Footnote-1\7f304180
-Node: Copy-in Mode\7f305458
-Node: Parameters\7f306357
-Node: Page Motions\7f309556
-Node: Drawing Requests\7f317240
-Node: Traps\7f327649
-Node: Page Location Traps\7f328290
-Node: Diversion Traps\7f334488
-Node: Input Line Traps\7f335108
-Node: Blank Line Traps\7f336139
-Node: Leading Spaces Traps\7f336433
-Node: End-of-input Traps\7f338012
-Node: Diversions\7f341555
-Node: Environments\7f349170
-Node: Suppressing output\7f353043
-Node: Colors\7f355085
-Node: I/O\7f358655
-Node: Postprocessor Access\7f367180
-Node: Miscellaneous\7f368884
-Node: Miscellaneous-Footnotes\7f374360
-Ref: Miscellaneous-Footnote-1\7f374432
-Node: Gtroff Internals\7f374502
-Node: Gtroff Internals-Footnotes\7f378849
-Ref: Gtroff Internals-Footnote-1\7f378927
-Node: Debugging\7f379062
-Node: Warnings\7f385038
-Node: Warnings-Footnotes\7f388135
-Ref: Warnings-Footnote-1\7f388197
-Node: Implementation Differences\7f388318
-Node: Implementation Differences-Footnotes\7f393145
-Ref: Implementation Differences-Footnote-1\7f393243
-Node: Preprocessors\7f393379
-Node: geqn\7f393708
-Node: Invoking geqn\7f393847
-Node: gtbl\7f393958
-Node: Invoking gtbl\7f394088
-Node: gpic\7f394199
-Node: Invoking gpic\7f394329
-Node: ggrn\7f394440
-Node: Invoking ggrn\7f394570
-Node: grap\7f394681
-Node: gchem\7f394961
-Node: Invoking gchem\7f395097
-Node: grefer\7f395213
-Node: Invoking grefer\7f395355
-Node: gsoelim\7f395476
-Node: Invoking gsoelim\7f395623
-Node: preconv\7f395749
-Node: Invoking preconv\7f395881
-Node: Output Devices\7f396007
-Node: Special Characters\7f396262
-Node: grotty\7f396436
-Node: Invoking grotty\7f396764
-Node: grops\7f398556
-Node: Invoking grops\7f398893
-Node: Embedding PostScript\7f400394
-Node: gropdf\7f401075
-Node: Invoking gropdf\7f401403
-Node: Embedding PDF\7f402843
-Node: grodvi\7f403458
-Node: Invoking grodvi\7f403809
-Node: grolj4\7f404598
-Node: Invoking grolj4\7f404947
-Node: grolbp\7f405803
-Node: Invoking grolbp\7f406148
-Node: grohtml\7f406941
-Node: Invoking grohtml\7f408372
-Node: grohtml specific registers and strings\7f410189
-Node: gxditview\7f411198
-Node: Invoking gxditview\7f411339
-Node: File formats\7f411475
-Node: gtroff Output\7f411751
-Node: gtroff Output-Footnotes\7f413597
-Ref: gtroff Output-Footnote-1\7f413669
-Node: Language Concepts\7f413804
-Node: Separation\7f414555
-Node: Argument Units\7f416808
-Node: Document Parts\7f417961
-Node: Command Reference\7f419367
-Node: Comment Command\7f419783
-Node: Simple Commands\7f420281
-Node: Simple Commands-Footnotes\7f426211
-Ref: Simple Commands-Footnote-1\7f426287
-Node: Graphics Commands\7f426348
-Node: Device Control Commands\7f433679
-Node: Obsolete Command\7f437734
-Node: Intermediate Output Examples\7f439020
-Node: Output Language Compatibility\7f441819
-Node: Font Files\7f443879
-Node: Font Files-Footnotes\7f444500
-Ref: Font Files-Footnote-1\7f444566
-Node: DESC File Format\7f444627
-Node: Font File Format\7f450498
-Node: Font File Format-Footnotes\7f456735
-Ref: Font File Format-Footnote-1\7f456813
-Ref: Font File Format-Footnote-2\7f456904
-Node: Installation\7f457123
-Node: Copying This Manual\7f457254
-Node: Request Index\7f482372
-Node: Escape Index\7f498963
-Node: Operator Index\7f505531
-Node: Register Index\7f507163
-Node: Macro Index\7f521532
-Node: String Index\7f535787
-Node: Glyph Name Index\7f544476
-Node: Font File Keyword Index\7f544786
-Node: Program and File Index\7f548199
-Node: Concept Index\7f554571
-\1f
-End Tag Table
-
-\1f
-Local Variables:
-coding: iso-8859-1
-End:
diff --git a/doc/groff.info-1 b/doc/groff.info-1
deleted file mode 100644 (file)
index dde424a..0000000
+++ /dev/null
@@ -1,8596 +0,0 @@
-This is groff.info, produced by makeinfo version 5.2dev from
-groff.texinfo.
-
-This manual documents GNU 'troff' version 1.22.3.
-
-   Copyright © 1994-2014 Free Software Foundation, Inc.
-
-     Permission is granted to copy, distribute and/or modify this
-     document under the terms of the GNU Free Documentation License,
-     Version 1.3 or any later version published by the Free Software
-     Foundation; with no Invariant Sections, with the Front-Cover texts
-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
-     below.  A copy of the license is included in the section entitled
-     "GNU Free Documentation License."
-
-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
-     modify this GNU manual.  Buying copies from the FSF supports it in
-     developing GNU and promoting software freedom."
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff).               The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: groff.info,  Node: Top,  Next: Introduction,  Prev: (dir),  Up: (dir)
-
-GNU troff
-*********
-
-* Menu:
-
-* Introduction::
-* Invoking groff::
-* Tutorial for Macro Users::
-* Macro Packages::
-* gtroff Reference::
-* Preprocessors::
-* Output Devices::
-* File formats::
-* Installation::
-* Copying This Manual::
-* Request Index::
-* Escape Index::
-* Operator Index::
-* Register Index::
-* Macro Index::
-* String Index::
-* Glyph Name Index::
-* Font File Keyword Index::
-* Program and File Index::
-* Concept Index::
-
-This manual documents GNU 'troff' version 1.22.3.
-
-   Copyright © 1994-2014 Free Software Foundation, Inc.
-
-     Permission is granted to copy, distribute and/or modify this
-     document under the terms of the GNU Free Documentation License,
-     Version 1.3 or any later version published by the Free Software
-     Foundation; with no Invariant Sections, with the Front-Cover texts
-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
-     below.  A copy of the license is included in the section entitled
-     "GNU Free Documentation License."
-
-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
-     modify this GNU manual.  Buying copies from the FSF supports it in
-     developing GNU and promoting software freedom."
-
-\1f
-File: groff.info,  Node: Introduction,  Next: Invoking groff,  Prev: Top,  Up: Top
-
-1 Introduction
-**************
-
-GNU 'troff' (or 'groff') is a system for typesetting documents.  'troff'
-is very flexible and has been used extensively for some thirty years.
-It is well entrenched in the UNIX community.
-
-* Menu:
-
-* What Is groff?::
-* History::
-* groff Capabilities::
-* Macro Package Intro::
-* Preprocessor Intro::
-* Output device intro::
-* Credits::
-
-\1f
-File: groff.info,  Node: What Is groff?,  Next: History,  Prev: Introduction,  Up: Introduction
-
-1.1 What Is 'groff'?
-====================
-
-'groff' belongs to an older generation of document preparation systems,
-which operate more like compilers than the more recent interactive
-WYSIWYG(1) (*note What Is groff?-Footnote-1::) systems.  'groff' and its
-contemporary counterpart, TeX, both work using a "batch" paradigm: The
-input (or "source") files are normal text files with embedded formatting
-commands.  These files can then be processed by 'groff' to produce a
-typeset document on a variety of devices.
-
-   'groff' should not be confused with a "word processor", an integrated
-system of editor and text formatter.  Also, many word processors follow
-the WYSIWYG paradigm discussed earlier.
-
-   Although WYSIWYG systems may be easier to use, they have a number of
-disadvantages compared to 'troff':
-
-   * They must be used on a graphics display to work on a document.
-
-   * Most of the WYSIWYG systems are either non-free or are not very
-     portable.
-
-   * 'troff' is firmly entrenched in all UNIX systems.
-
-   * It is difficult to have a wide range of capabilities within the
-     confines of a GUI/window system.
-
-   * It is more difficult to make global changes to a document.
-
-     "GUIs normally make it simple to accomplish simple actions and
-     impossible to accomplish complex actions."  -Doug Gwyn (22/Jun/91
-     in 'comp.unix.wizards')
-
-\1f
-File: groff.info,  Node: What Is groff?-Footnotes,  Up: What Is groff?
-
-   (1) What You See Is What You Get
-
-\1f
-File: groff.info,  Node: History,  Next: groff Capabilities,  Prev: What Is groff?,  Up: Introduction
-
-1.2 History
-===========
-
-'troff' can trace its origins back to a formatting program called
-'RUNOFF', written by Jerry Saltzer, which ran on the CTSS (_Compatible
-Time Sharing System_, a project of MIT, the Massachusetts Institute of
-Technology) in the mid-sixties.(1)  (*note History-Footnote-1::) The
-name came from the use of the phrase "run off a document", meaning to
-print it out.  Bob Morris ported it to the 635 architecture and called
-the program 'roff' (an abbreviation of 'runoff').  It was rewritten as
-'rf' for the PDP-7 (before having UNIX), and at the same time (1969),
-Doug McIllroy rewrote an extended and simplified version of 'roff' in
-the BCPL programming language.
-
-   In 1971, the UNIX developers wanted to get a PDP-11, and to justify
-the cost, proposed the development of a document formatting system for
-the AT&T patents division.  This first formatting program was a
-reimplementation of McIllroy's 'roff', written by J. F. Ossanna.
-
-   When they needed a more flexible language, a new version of 'roff'
-called 'nroff' ("Newer 'roff'") was written.  It had a much more
-complicated syntax, but provided the basis for all future versions.
-When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
-version of 'nroff' that would drive it.  It was dubbed 'troff', for
-"typesetter 'roff'", although many people have speculated that it
-actually means "Times 'roff'" because of the use of the Times font
-family in 'troff' by default.  As such, the name 'troff' is pronounced
-'t-roff' rather than 'trough'.
-
-   With 'troff' came 'nroff' (they were actually the same program except
-for some '#ifdef's), which was for producing output for line printers
-and character terminals.  It understood everything 'troff' did, and
-ignored the commands that were not applicable (e.g. font changes).
-
-   Since there are several things that cannot be done easily in 'troff',
-work on several preprocessors began.  These programs would transform
-certain parts of a document into 'troff', which made a very natural use
-of pipes in UNIX.
-
-   The 'eqn' preprocessor allowed mathematical formulæ to be specified
-in a much simpler and more intuitive manner.  'tbl' is a preprocessor
-for formatting tables.  The 'refer' preprocessor (and the similar
-program, 'bib') processes citations in a document according to a
-bibliographic database.
-
-   Unfortunately, Ossanna's 'troff' was written in PDP-11 assembly
-language and produced output specifically for the CAT phototypesetter.
-He rewrote it in C, although it was now 7000 lines of uncommented code
-and still dependent on the CAT.  As the CAT became less common, and was
-no longer supported by the manufacturer, the need to make it support
-other devices became a priority.  However, before this could be done,
-Ossanna died by a severe heart attack in a hospital while recovering
-from a previous one.
-
-   So, Brian Kernighan took on the task of rewriting 'troff'.  The newly
-rewritten version produced device independent code that was very easy
-for postprocessors to read and translate to the appropriate printer
-codes.  Also, this new version of 'troff' (called 'ditroff' for "device
-independent 'troff'") had several extensions, which included drawing
-functions.
-
-   Due to the additional abilities of the new version of 'troff',
-several new preprocessors appeared.  The 'pic' preprocessor provides a
-wide range of drawing functions.  Likewise the 'ideal' preprocessor did
-the same, although via a much different paradigm.  The 'grap'
-preprocessor took specifications for graphs, but, unlike other
-preprocessors, produced 'pic' code.
-
-   James Clark began work on a GNU implementation of 'ditroff' in
-early 1989.  The first version, 'groff' 0.3.1, was released June 1990.
-'groff' included:
-
-   * A replacement for 'ditroff' with many extensions.
-
-   * The 'soelim', 'pic', 'tbl', and 'eqn' preprocessors.
-
-   * Postprocessors for character devices, POSTSCRIPT, TeX DVI, and
-     X Windows.  GNU 'troff' also eliminated the need for a separate
-     'nroff' program with a postprocessor that would produce ASCII
-     output.
-
-   * A version of the 'me' macros and an implementation of the 'man'
-     macros.
-
-   Also, a front-end was included that could construct the, sometimes
-painfully long, pipelines required for all the post- and preprocessors.
-
-   Development of GNU 'troff' progressed rapidly, and saw the additions
-of a replacement for 'refer', an implementation of the 'ms' and 'mm'
-macros, and a program to deduce how to format a document ('grog').
-
-   It was declared a stable (i.e. non-beta) package with the release of
-version 1.04 around November 1991.
-
-   Beginning in 1999, 'groff' has new maintainers (the package was an
-orphan for a few years).  As a result, new features and programs like
-'grn', a preprocessor for gremlin images, and an output device to
-produce HTML and XHTML have been added.
-
-\1f
-File: groff.info,  Node: History-Footnotes,  Up: History
-
-   (1) Jerome H. Saltzer, a grad student then, later a Professor of
-Electrical Engineering, now retired.  Saltzer's PhD thesis was the first
-application for 'RUNOFF' and is available from the MIT Libraries.
-
-\1f
-File: groff.info,  Node: groff Capabilities,  Next: Macro Package Intro,  Prev: History,  Up: Introduction
-
-1.3 'groff' Capabilities
-========================
-
-So what exactly is 'groff' capable of doing?  'groff' provides a wide
-range of low-level text formatting operations.  Using these, it is
-possible to perform a wide range of formatting tasks, such as footnotes,
-table of contents, multiple columns, etc.  Here's a list of the most
-important operations supported by 'groff':
-
-   * text filling, adjusting, and centering
-
-   * hyphenation
-
-   * page control
-
-   * font and glyph size control
-
-   * vertical spacing (e.g. double-spacing)
-
-   * line length and indenting
-
-   * macros, strings, diversions, and traps
-
-   * number registers
-
-   * tabs, leaders, and fields
-
-   * input and output conventions and character translation
-
-   * overstrike, bracket, line drawing, and zero-width functions
-
-   * local horizontal and vertical motions and the width function
-
-   * three-part titles
-
-   * output line numbering
-
-   * conditional acceptance of input
-
-   * environment switching
-
-   * insertions from the standard input
-
-   * input/output file switching
-
-   * output and error messages
-
-\1f
-File: groff.info,  Node: Macro Package Intro,  Next: Preprocessor Intro,  Prev: groff Capabilities,  Up: Introduction
-
-1.4 Macro Packages
-==================
-
-Since 'groff' provides such low-level facilities, it can be quite
-difficult to use by itself.  However, 'groff' provides a "macro"
-facility to specify how certain routine operations (e.g. starting
-paragraphs, printing headers and footers, etc.) should be done.  These
-macros can be collected together into a "macro package".  There are a
-number of macro packages available; the most common (and the ones
-described in this manual) are 'man', 'mdoc', 'me', 'ms', and 'mm'.
-
-\1f
-File: groff.info,  Node: Preprocessor Intro,  Next: Output device intro,  Prev: Macro Package Intro,  Up: Introduction
-
-1.5 Preprocessors
-=================
-
-Although 'groff' provides most functions needed to format a document,
-some operations would be unwieldy (e.g. to draw pictures).  Therefore,
-programs called "preprocessors" were written that understand their own
-language and produce the necessary 'groff' operations.  These
-preprocessors are able to differentiate their own input from the rest of
-the document via markers.
-
-   To use a preprocessor, UNIX pipes are used to feed the output from
-the preprocessor into 'groff'.  Any number of preprocessors may be used
-on a given document; in this case, the preprocessors are linked together
-into one pipeline.  However, with 'groff', the user does not need to
-construct the pipe, but only tell 'groff' what preprocessors to use.
-
-   'groff' currently has preprocessors for producing tables ('tbl'),
-typesetting equations ('eqn'), drawing pictures ('pic' and 'grn'),
-processing bibliographies ('refer'), and drawing chemical structures
-('chem').  An associated program that is useful when dealing with
-preprocessors is 'soelim'.
-
-   A free implementation of 'grap', a preprocessor for drawing graphs,
-can be obtained as an extra package; 'groff' can use 'grap' also.
-
-   Unique to 'groff' is the 'preconv' preprocessor that enables 'groff'
-to handle documents in various input encodings.
-
-   There are other preprocessors in existence, but, unfortunately, no
-free implementations are available.  Among them is a preprocessor for
-drawing mathematical pictures ('ideal').
-
-\1f
-File: groff.info,  Node: Output device intro,  Next: Credits,  Prev: Preprocessor Intro,  Up: Introduction
-
-1.6 Output Devices
-==================
-
-'groff' actually produces device independent code that may be fed into a
-postprocessor to produce output for a particular device.  Currently,
-'groff' has postprocessors for POSTSCRIPT devices, character terminals,
-X Windows (for previewing), TeX DVI format, HP LaserJet 4 and Canon LBP
-printers (which use CAPSL), HTML, XHTML, and PDF.
-
-\1f
-File: groff.info,  Node: Credits,  Prev: Output device intro,  Up: Introduction
-
-1.7 Credits
-===========
-
-Large portions of this manual were taken from existing documents, most
-notably, the manual pages for the 'groff' package by James Clark, and
-Eric Allman's papers on the 'me' macro package.
-
-   The section on the 'man' macro package is partly based on Susan G.
-Kleinmann's 'groff_man' manual page written for the Debian GNU/Linux
-system.
-
-   Larry Kollar contributed the section in the 'ms' macro package.
-
-\1f
-File: groff.info,  Node: Invoking groff,  Next: Tutorial for Macro Users,  Prev: Introduction,  Up: Top
-
-2 Invoking 'groff'
-******************
-
-This section focuses on how to invoke the 'groff' front end.  This front
-end takes care of the details of constructing the pipeline among the
-preprocessors, 'gtroff' and the postprocessor.
-
-   It has become a tradition that GNU programs get the prefix 'g' to
-distinguish it from its original counterparts provided by the host (see
-*note Environment::, for more details).  Thus, for example, 'geqn' is
-GNU 'eqn'.  On operating systems like GNU/Linux or the Hurd, which don't
-contain proprietary versions of 'troff', and on MS-DOS/MS-Windows, where
-'troff' and associated programs are not available at all, this prefix is
-omitted since GNU 'troff' is the only used incarnation of 'troff'.
-Exception: 'groff' is never replaced by 'roff'.
-
-   In this document, we consequently say 'gtroff' when talking about the
-GNU 'troff' program.  All other implementations of 'troff' are called
-AT&T 'troff', which is the common origin of all 'troff' derivates (with
-more or less compatible changes).  Similarly, we say 'gpic', 'geqn',
-etc.
-
-* Menu:
-
-* Groff Options::
-* Environment::
-* Macro Directories::
-* Font Directories::
-* Paper Size::
-* Invocation Examples::
-
-\1f
-File: groff.info,  Node: Groff Options,  Next: Environment,  Prev: Invoking groff,  Up: Invoking groff
-
-2.1 Options
-===========
-
-'groff' normally runs the 'gtroff' program and a postprocessor
-appropriate for the selected device.  The default device is 'ps' (but it
-can be changed when 'groff' is configured and built).  It can optionally
-preprocess with any of 'gpic', 'geqn', 'gtbl', 'ggrn', 'grap', 'gchem',
-'grefer', 'gsoelim', or 'preconv'.
-
-   This section only documents options to the 'groff' front end.  Many
-of the arguments to 'groff' are passed on to 'gtroff', therefore those
-are also included.  Arguments to pre- or postprocessors can be found in
-*note Invoking gpic::, *note Invoking geqn::, *note Invoking gtbl::,
-*note Invoking ggrn::, *note Invoking grefer::, *note Invoking gchem::,
-*note Invoking gsoelim::, *note Invoking preconv::, *note Invoking
-grotty::, *note Invoking grops::, *note Invoking gropdf::, *note
-Invoking grohtml::, *note Invoking grodvi::, *note Invoking grolj4::,
-*note Invoking grolbp::, and *note Invoking gxditview::.
-
-   The command line format for 'groff' is:
-
-     groff [ -abceghijklpstvzCEGNRSUVXZ ] [ -dCS ] [ -DARG ]
-           [ -fFAM ] [ -FDIR ] [ -IDIR ] [ -KARG ]
-           [ -LARG ] [ -mNAME ] [ -MDIR ] [ -nNUM ]
-           [ -oLIST ] [ -PARG ] [ -rCN ] [ -TDEV ]
-           [ -wNAME ] [ -WNAME ] [ FILES... ]
-
-   The command line format for 'gtroff' is as follows.
-
-     gtroff [ -abcivzCERU ] [ -dCS ] [ -fFAM ] [ -FDIR ]
-            [ -mNAME ] [ -MDIR ] [ -nNUM ] [ -oLIST ]
-            [ -rCN ] [ -TNAME ] [ -wNAME ] [ -WNAME ]
-            [ FILES... ]
-
-Obviously, many of the options to 'groff' are actually passed on to
-'gtroff'.
-
-   Options without an argument can be grouped behind a single '-'.  A
-filename of '-' denotes the standard input.  It is possible to have
-whitespace between an option and its parameter.
-
-   The 'grog' command can be used to guess the correct 'groff' command
-to format a file.
-
-   Here's the description of the command-line options:
-
-'-a'
-     Generate an ASCII approximation of the typeset output.  The
-     read-only register '.A' is then set to 1.  *Note Built-in
-     Registers::.  A typical example is
-
-          groff -a -man -Tdvi troff.man | less
-
-     which shows how lines are broken for the DVI device.  Note that
-     this option is rather useless today since graphic output devices
-     are available virtually everywhere.
-
-'-b'
-     Print a backtrace with each warning or error message.  This
-     backtrace should help track down the cause of the error.  The line
-     numbers given in the backtrace may not always be correct: 'gtroff'
-     can get confused by 'as' or 'am' requests while counting line
-     numbers.
-
-'-c'
-     Suppress color output.
-
-'-C'
-     Enable compatibility mode.  *Note Implementation Differences::, for
-     the list of incompatibilities between 'groff' and AT&T 'troff'.
-
-'-dCS'
-'-dNAME=S'
-     Define C or NAME to be a string S.  C must be a one-letter name;
-     NAME can be of arbitrary length.  All string assignments happen
-     before loading any macro file (including the start-up file).
-
-'-DARG'
-     Set default input encoding used by 'preconv' to ARG.  Implies '-k'.
-
-'-e'
-     Preprocess with 'geqn'.
-
-'-E'
-     Inhibit all error messages.
-
-'-fFAM'
-     Use FAM as the default font family.  *Note Font Families::.
-
-'-FDIR'
-     Search 'DIR' for subdirectories 'devNAME' (NAME is the name of the
-     device), for the 'DESC' file, and for font files before looking in
-     the standard directories (*note Font Directories::).  This option
-     is passed to all pre- and postprocessors using the
-     'GROFF_FONT_PATH' environment variable.
-
-'-g'
-     Preprocess with 'ggrn'.
-
-'-G'
-     Preprocess with 'grap'.  Implies '-p'.
-
-'-h'
-     Print a help message.
-
-'-i'
-     Read the standard input after all the named input files have been
-     processed.
-
-'-IDIR'
-     This option may be used to specify a directory to search for files.
-     It is passed to the following programs:
-
-        * 'gsoelim' (see *note gsoelim:: for more details); it also
-          implies 'groff''s '-s' option.
-
-        * 'gtroff'; it is used to search files named in the 'psbb' and
-          'so' requests.
-
-        * 'grops'; it is used to search files named in the
-          '\X'ps: import' and '\X'ps: file' escapes.
-
-     The current directory is always searched first.  This option may be
-     specified more than once; the directories are searched in the order
-     specified.  No directory search is performed for files specified
-     using an absolute path.
-
-'-j'
-     Preprocess with 'gchem'.  Implies '-p'.
-
-'-k'
-     Preprocess with 'preconv'.  This is run before any other
-     preprocessor.  Please refer to 'preconv''s manual page for its
-     behaviour if no '-K' (or '-D') option is specified.
-
-'-KARG'
-     Set input encoding used by preconv to ARG.  Implies '-k'.
-
-'-l'
-     Send the output to a spooler for printing.  The command used for
-     this is specified by the 'print' command in the device description
-     file (see *note Font Files::, for more info).  If not present, '-l'
-     is ignored.
-
-'-LARG'
-     Pass ARG to the spooler.  Each argument should be passed with a
-     separate '-L' option.  Note that 'groff' does not prepend a '-' to
-     ARG before passing it to the postprocessor.  If the 'print' keyword
-     in the device description file is missing, '-L' is ignored.
-
-'-mNAME'
-     Read in the file 'NAME.tmac'.  Normally 'groff' searches for this
-     in its macro directories.  If it isn't found, it tries 'tmac.NAME'
-     (searching in the same directories).
-
-'-MDIR'
-     Search directory 'DIR' for macro files before the standard
-     directories (*note Macro Directories::).
-
-'-nNUM'
-     Number the first page NUM.
-
-'-N'
-     Don't allow newlines with 'eqn' delimiters.  This is the same as
-     the '-N' option in 'geqn'.
-
-'-oLIST'
-     Output only pages in LIST, which is a comma-separated list of page
-     ranges; 'N' means print page N, 'M-N' means print every page
-     between M and N, '-N' means print every page up to N, 'N-' means
-     print every page beginning with N.  'gtroff' exits after printing
-     the last page in the list.  All the ranges are inclusive on both
-     ends.
-
-     Within 'gtroff', this information can be extracted with the '.P'
-     register.  *Note Built-in Registers::.
-
-     If your document restarts page numbering at the beginning of each
-     chapter, then 'gtroff' prints the specified page range for each
-     chapter.
-
-'-p'
-     Preprocess with 'gpic'.
-
-'-PARG'
-     Pass ARG to the postprocessor.  Each argument should be passed with
-     a separate '-P' option.  Note that 'groff' does not prepend '-' to
-     ARG before passing it to the postprocessor.
-
-'-rCN'
-'-rNAME=N'
-     Set number register C or NAME to the value N.  C must be a
-     one-letter name; NAME can be of arbitrary length.  N can be any
-     'gtroff' numeric expression.  All register assignments happen
-     before loading any macro file (including the start-up file).
-
-'-R'
-     Preprocess with 'grefer'.  No mechanism is provided for passing
-     arguments to 'grefer' because most 'grefer' options have equivalent
-     commands that can be included in the file.  *Note grefer::, for
-     more details.
-
-     Note that 'gtroff' also accepts a '-R' option, which is not
-     accessible via 'groff'.  This option prevents the loading of the
-     'troffrc' and 'troffrc-end' files.
-
-'-s'
-     Preprocess with 'gsoelim'.
-
-'-S'
-     Safer mode.  Pass the '-S' option to 'gpic' and disable the 'open',
-     'opena', 'pso', 'sy', and 'pi' requests.  For security reasons,
-     this is enabled by default.
-
-'-t'
-     Preprocess with 'gtbl'.
-
-'-TDEV'
-     Prepare output for device DEV.  The default device is 'ps', unless
-     changed when 'groff' was configured and built.  The following are
-     the output devices currently available:
-
-     'ps'
-          For POSTSCRIPT printers and previewers.
-
-     'pdf'
-          For PDF viewers or printers.
-
-     'dvi'
-          For TeX DVI format.
-
-     'X75'
-          For a 75dpi X11 previewer.
-
-     'X75-12'
-          For a 75dpi X11 previewer with a 12pt base font in the
-          document.
-
-     'X100'
-          For a 100dpi X11 previewer.
-
-     'X100-12'
-          For a 100dpi X11 previewer with a 12pt base font in the
-          document.
-
-     'ascii'
-          For typewriter-like devices using the (7-bit) ASCII character
-          set.
-
-     'latin1'
-          For typewriter-like devices that support the Latin-1
-          (ISO 8859-1) character set.
-
-     'utf8'
-          For typewriter-like devices that use the Unicode (ISO 10646)
-          character set with UTF-8 encoding.
-
-     'cp1047'
-          For typewriter-like devices that use the EBCDIC encoding IBM
-          cp1047.
-
-     'lj4'
-          For HP LaserJet4-compatible (or other PCL5-compatible)
-          printers.
-
-     'lbp'
-          For Canon CAPSL printers (LBP-4 and LBP-8 series laser
-          printers).
-
-     'html'
-     'xhtml'
-          To produce HTML and XHTML output, respectively.  Note that
-          this driver consists of two parts, a preprocessor
-          ('pre-grohtml') and a postprocessor ('post-grohtml').
-
-     The predefined 'gtroff' string register '.T' contains the current
-     output device; the read-only number register '.T' is set to 1 if
-     this option is used (which is always true if 'groff' is used to
-     call 'gtroff').  *Note Built-in Registers::.
-
-     The postprocessor to be used for a device is specified by the
-     'postpro' command in the device description file.  (*Note Font
-     Files::, for more info.)  This can be overridden with the '-X'
-     option.
-
-'-U'
-     Unsafe mode.  This enables the 'open', 'opena', 'pso', 'sy', and
-     'pi' requests.
-
-'-wNAME'
-     Enable warning NAME.  Available warnings are described in *note
-     Debugging::.  Multiple '-w' options are allowed.
-
-'-WNAME'
-     Inhibit warning NAME.  Multiple '-W' options are allowed.
-
-'-v'
-     Make programs run by 'groff' print out their version number.
-
-'-V'
-     Print the pipeline on 'stdout' instead of executing it.  If
-     specified more than once, print the pipeline on 'stderr' and
-     execute it.
-
-'-X'
-     Preview with 'gxditview' instead of using the usual postprocessor.
-     This is unlikely to produce good results except with '-Tps'.
-
-     Note that this is not the same as using '-TX75' or '-TX100' to view
-     a document with 'gxditview': The former uses the metrics of the
-     specified device, whereas the latter uses X-specific fonts and
-     metrics.
-
-'-z'
-     Suppress output from 'gtroff'.  Only error messages are printed.
-
-'-Z'
-     Do not postprocess the output of 'gtroff'.  Normally 'groff'
-     automatically runs the appropriate postprocessor.
-
-\1f
-File: groff.info,  Node: Environment,  Next: Macro Directories,  Prev: Groff Options,  Up: Invoking groff
-
-2.2 Environment
-===============
-
-There are also several environment variables (of the operating system,
-not within 'gtroff') that can modify the behavior of 'groff'.
-
-'GROFF_BIN_PATH'
-     This search path, followed by 'PATH', is used for commands executed
-     by 'groff'.
-
-'GROFF_COMMAND_PREFIX'
-     If this is set to X, then 'groff' runs 'Xtroff' instead of
-     'gtroff'.  This also applies to 'tbl', 'pic', 'eqn', 'grn', 'chem',
-     'refer', and 'soelim'.  It does not apply to 'grops', 'grodvi',
-     'grotty', 'pre-grohtml', 'post-grohtml', 'preconv', 'grolj4',
-     'gropdf', and 'gxditview'.
-
-     The default command prefix is determined during the installation
-     process.  If a non-GNU troff system is found, prefix 'g' is used,
-     none otherwise.
-
-'GROFF_ENCODING'
-     The value of this environment value is passed to the 'preconv'
-     preprocessor to select the encoding of input files.  Setting this
-     option implies 'groff''s command line option '-k' (this is, 'groff'
-     actually always calls 'preconv').  If set without a value, 'groff'
-     calls 'preconv' without arguments.  An explicit '-K' command line
-     option overrides the value of 'GROFF_ENCODING'.  See the manual
-     page of 'preconv' for details.
-
-'GROFF_FONT_PATH'
-     A colon-separated list of directories in which to search for the
-     'dev'NAME directory (before the default directories are tried).
-     *Note Font Directories::.
-
-'GROFF_TMAC_PATH'
-     A colon-separated list of directories in which to search for macro
-     files (before the default directories are tried).  *Note Macro
-     Directories::.
-
-'GROFF_TMPDIR'
-     The directory in which 'groff' creates temporary files.  If this is
-     not set and 'TMPDIR' is set, temporary files are created in that
-     directory.  Otherwise temporary files are created in a
-     system-dependent default directory (on Unix and GNU/Linux systems,
-     this is usually '/tmp').  'grops', 'grefer', 'pre-grohtml', and
-     'post-grohtml' can create temporary files in this directory.
-
-'GROFF_TYPESETTER'
-     The default output device.
-
-   Note that MS-DOS and MS-Windows ports of 'groff' use semi-colons,
-rather than colons, to separate the directories in the lists described
-above.
-
-\1f
-File: groff.info,  Node: Macro Directories,  Next: Font Directories,  Prev: Environment,  Up: Invoking groff
-
-2.3 Macro Directories
-=====================
-
-All macro file names must be named 'NAME.tmac' or 'tmac.NAME' to make
-the '-mNAME' command line option work.  The 'mso' request doesn't have
-this restriction; any file name can be used, and 'gtroff' won't try to
-append or prepend the 'tmac' string.
-
-   Macro files are kept in the "tmac directories", all of which
-constitute the "tmac path".  The elements of the search path for macro
-files are (in that order):
-
-   * The directories specified with 'gtroff''s or 'groff''s '-M' command
-     line option.
-
-   * The directories given in the 'GROFF_TMAC_PATH' environment
-     variable.
-
-   * The current directory (only if in unsafe mode using the '-U'
-     command line switch).
-
-   * The home directory.
-
-   * A platform-dependent directory, a site-specific
-     (platform-independent) directory, and the main tmac directory; the
-     default locations are
-
-          /usr/local/lib/groff/site-tmac
-          /usr/local/share/groff/site-tmac
-          /usr/local/share/groff/1.22.3/tmac
-
-     assuming that the version of 'groff' is 1.22.3, and the
-     installation prefix was '/usr/local'.  It is possible to fine-tune
-     those directories during the installation process.
-
-\1f
-File: groff.info,  Node: Font Directories,  Next: Paper Size,  Prev: Macro Directories,  Up: Invoking groff
-
-2.4 Font Directories
-====================
-
-Basically, there is no restriction how font files for 'groff' are named
-and how long font names are; however, to make the font family mechanism
-work (*note Font Families::), fonts within a family should start with
-the family name, followed by the shape.  For example, the Times family
-uses 'T' for the family name and 'R', 'B', 'I', and 'BI' to indicate the
-shapes 'roman', 'bold', 'italic', and 'bold italic', respectively.  Thus
-the final font names are 'TR', 'TB', 'TI', and 'TBI'.
-
-   All font files are kept in the "font directories", which constitute
-the "font path".  The file search functions always append the directory
-'dev'NAME, where NAME is the name of the output device.  Assuming, say,
-DVI output, and '/foo/bar' as a font directory, the font files for
-'grodvi' must be in '/foo/bar/devdvi'.
-
-   The elements of the search path for font files are (in that order):
-
-   * The directories specified with 'gtroff''s or 'groff''s '-F' command
-     line option.  All device drivers and some preprocessors also have
-     this option.
-
-   * The directories given in the 'GROFF_FONT_PATH' environment
-     variable.
-
-   * A site-specific directory and the main font directory; the default
-     locations are
-
-          /usr/local/share/groff/site-font
-          /usr/local/share/groff/1.22.3/font
-
-     assuming that the version of 'groff' is 1.22.3, and the
-     installation prefix was '/usr/local'.  It is possible to fine-tune
-     those directories during the installation process.
-
-\1f
-File: groff.info,  Node: Paper Size,  Next: Invocation Examples,  Prev: Font Directories,  Up: Invoking groff
-
-2.5 Paper Size
-==============
-
-In groff, the page size for 'gtroff' and for output devices are handled
-separately.  *Note Page Layout::, for vertical manipulation of the page
-size.  *Note Line Layout::, for horizontal changes.
-
-   A default paper size can be set in the device's 'DESC' file.  Most
-output devices also have a command line option '-p' to override the
-default paper size and option '-l' to use landscape orientation.  *Note
-DESC File Format::, for a description of the 'papersize' keyword, which
-takes the same argument as '-p'.
-
-   A convenient shorthand to set a particular paper size for 'gtroff' is
-command line option '-dpaper=SIZE'.  This defines string 'paper', which
-is processed in file 'papersize.tmac' (loaded in the start-up file
-'troffrc' by default).  Possible values for SIZE are the same as the
-predefined values for the 'papersize' keyword (but only in lowercase)
-except 'a7'-'d7'.  An appended 'l' (ell) character denotes landscape
-orientation.
-
-   For example, use the following for PS output on A4 paper in landscape
-orientation:
-
-     groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
-
-   Note that it is up to the particular macro package to respect default
-page dimensions set in this way (most do).
-
-\1f
-File: groff.info,  Node: Invocation Examples,  Prev: Paper Size,  Up: Invoking groff
-
-2.6 Invocation Examples
-=======================
-
-This section lists several common uses of 'groff' and the corresponding
-command lines.
-
-     groff file
-
-This command processes 'file' without a macro package or a preprocessor.
-The output device is the default, 'ps', and the output is sent to
-'stdout'.
-
-     groff -t -mandoc -Tascii file | less
-
-This is basically what a call to the 'man' program does.  'gtroff'
-processes the manual page 'file' with the 'mandoc' macro file (which in
-turn either calls the 'man' or the 'mdoc' macro package), using the
-'tbl' preprocessor and the ASCII output device.  Finally, the 'less'
-pager displays the result.
-
-     groff -X -m me file
-
-Preview 'file' with 'gxditview', using the 'me' macro package.  Since no
-'-T' option is specified, use the default device ('ps').  Note that you
-can either say '-m me' or '-me'; the latter is an anachronism from the
-early days of UNIX.(1)  (*note Invocation Examples-Footnote-1::)
-
-     groff -man -rD1 -z file
-
-Check 'file' with the 'man' macro package, forcing double-sided printing
-- don't produce any output.
-
-* Menu:
-
-* grog::
-
-\1f
-File: groff.info,  Node: Invocation Examples-Footnotes,  Up: Invocation Examples
-
-   (1) The same is true for the other main macro packages that come with
-'groff': 'man', 'mdoc', 'ms', 'mm', and 'mandoc'.  This won't work in
-general; for example, to load 'trace.tmac', either '-mtrace' or
-'-m trace' must be used.
-
-\1f
-File: groff.info,  Node: grog,  Prev: Invocation Examples,  Up: Invocation Examples
-
-2.6.1 'grog'
-------------
-
-'grog' reads files, guesses which of the 'groff' preprocessors and/or
-macro packages are required for formatting them, and prints the 'groff'
-command including those options on the standard output.  It generates
-one or more of the options '-e', '-man', '-me', '-mm', '-mom', '-ms',
-'-mdoc', '-mdoc-old', '-p', '-R', '-g', '-G', '-s', and '-t'.
-
-   A special file name '-' refers to the standard input.  Specifying no
-files also means to read the standard input.  Any specified options are
-included in the printed command.  No space is allowed between options
-and their arguments.  The only options recognized are '-C' (which is
-also passed on) to enable compatibility mode, and '-v' to print the
-version number and exit.
-
-   For example,
-
-     grog -Tdvi paper.ms
-
-guesses the appropriate command to print 'paper.ms' and then prints it
-to the command line after adding the '-Tdvi' option.  For direct
-execution, enclose the call to 'grog' in backquotes at the UNIX shell
-prompt:
-
-     `grog -Tdvi paper.ms` > paper.dvi
-
-As seen in the example, it is still necessary to redirect the output to
-something meaningful (i.e. either a file or a pager program like
-'less').
-
-\1f
-File: groff.info,  Node: Tutorial for Macro Users,  Next: Macro Packages,  Prev: Invoking groff,  Up: Top
-
-3 Tutorial for Macro Users
-**************************
-
-Most users tend to use a macro package to format their papers.  This
-means that the whole breadth of 'groff' is not necessary for most
-people.  This chapter covers the material needed to efficiently use a
-macro package.
-
-* Menu:
-
-* Basics::
-* Common Features::
-
-\1f
-File: groff.info,  Node: Basics,  Next: Common Features,  Prev: Tutorial for Macro Users,  Up: Tutorial for Macro Users
-
-3.1 Basics
-==========
-
-This section covers some of the basic concepts necessary to understand
-how to use a macro package.(1)  (*note Basics-Footnote-1::) References
-are made throughout to more detailed information, if desired.
-
-   'gtroff' reads an input file prepared by the user and outputs a
-formatted document suitable for publication or framing.  The input
-consists of text, or words to be printed, and embedded commands
-("requests" and "escapes"), which tell 'gtroff' how to format the
-output.  For more detail on this, see *note Embedded Commands::.
-
-   The word "argument" is used in this chapter to mean a word or number
-that appears on the same line as a request, and which modifies the
-meaning of that request.  For example, the request
-
-     .sp
-
-spaces one line, but
-
-     .sp 4
-
-spaces four lines.  The number 4 is an argument to the 'sp' request,
-which says to space four lines instead of one.  Arguments are separated
-from the request and from each other by spaces (_no_ tabs).  More
-details on this can be found in *note Request and Macro Arguments::.
-
-   The primary function of 'gtroff' is to collect words from input
-lines, fill output lines with those words, justify the right-hand margin
-by inserting extra spaces in the line, and output the result.  For
-example, the input:
-
-     Now is the time
-     for all good men
-     to come to the aid
-     of their party.
-     Four score and seven
-     years ago, etc.
-
-is read, packed onto output lines, and justified to produce:
-
-     Now is the time for all good men to come to the aid of their party.
-     Four score and seven years ago, etc.
-
-   Sometimes a new output line should be started even though the current
-line is not yet full; for example, at the end of a paragraph.  To do
-this it is possible to cause a "break", which starts a new output line.
-Some requests cause a break automatically, as normally do blank input
-lines and input lines beginning with a space.
-
-   Not all input lines are text to be formatted.  Some input lines are
-requests that describe how to format the text.  Requests always have a
-period ('.') or an apostrophe (''') as the first character of the input
-line.
-
-   The text formatter also does more complex things, such as
-automatically numbering pages, skipping over page boundaries, putting
-footnotes in the correct place, and so forth.
-
-   Here are a few hints for preparing text for input to 'gtroff'.
-
-   * First, keep the input lines short.  Short input lines are easier to
-     edit, and 'gtroff' packs words onto longer lines anyhow.
-
-   * In keeping with this, it is helpful to begin a new line after every
-     comma or phrase, since common corrections are to add or delete
-     sentences or phrases.
-
-   * End each sentence with two spaces - or better, start each sentence
-     on a new line.  'gtroff' recognizes characters that usually end a
-     sentence, and inserts sentence space accordingly.
-
-   * Do not hyphenate words at the end of lines - 'gtroff' is smart
-     enough to hyphenate words as needed, but is not smart enough to
-     take hyphens out and join a word back together.  Also, words such
-     as "mother-in-law" should not be broken over a line, since then a
-     space can occur where not wanted, such as "mother- in-law".
-
-   'gtroff' double-spaces output text automatically if you use the
-request '.ls 2'.  Reactivate single-spaced mode by typing '.ls 1'.(2)
-(*note Basics-Footnote-2::)
-
-   A number of requests allow to change the way the output looks,
-sometimes called the "layout" of the output page.  Most of these
-requests adjust the placing of "whitespace" (blank lines or spaces).
-
-   The 'bp' request starts a new page, causing a line break.
-
-   The request '.sp N' leaves N lines of blank space.  N can be omitted
-(meaning skip a single line) or can be of the form Ni (for N inches) or
-Nc (for N centimeters).  For example, the input:
-
-     .sp 1.5i
-     My thoughts on the subject
-     .sp
-
-leaves one and a half inches of space, followed by the line "My thoughts
-on the subject", followed by a single blank line (more measurement units
-are available, see *note Measurements::).
-
-   Text lines can be centered by using the 'ce' request.  The line after
-'ce' is centered (horizontally) on the page.  To center more than one
-line, use '.ce N' (where N is the number of lines to center), followed
-by the N lines.  To center many lines without counting them, type:
-
-     .ce 1000
-     lines to center
-     .ce 0
-
-The '.ce 0' request tells 'groff' to center zero more lines, in other
-words, stop centering.
-
-   All of these requests cause a break; that is, they always start a new
-line.  To start a new line without performing any other action, use
-'br'.
-
-\1f
-File: groff.info,  Node: Basics-Footnotes,  Up: Basics
-
-   (1) This section is derived from 'Writing Papers with nroff using
--me' by Eric P. Allman.
-
-   (2) If you need finer granularity of the vertical space, use the
-'pvs' request (*note Changing Type Sizes::).
-
-\1f
-File: groff.info,  Node: Common Features,  Prev: Basics,  Up: Tutorial for Macro Users
-
-3.2 Common Features
-===================
-
-'gtroff' provides very low-level operations for formatting a document.
-There are many common routine operations that are done in all documents.
-These common operations are written into "macros" and collected into a
-"macro package".
-
-   All macro packages provide certain common capabilities that fall into
-the following categories.
-
-* Menu:
-
-* Paragraphs::
-* Sections and Chapters::
-* Headers and Footers::
-* Page Layout Adjustment::
-* Displays::
-* Footnotes and Annotations::
-* Table of Contents::
-* Indices::
-* Paper Formats::
-* Multiple Columns::
-* Font and Size Changes::
-* Predefined Strings::
-* Preprocessor Support::
-* Configuration and Customization::
-
-\1f
-File: groff.info,  Node: Paragraphs,  Next: Sections and Chapters,  Prev: Common Features,  Up: Common Features
-
-3.2.1 Paragraphs
-----------------
-
-One of the most common and most used capability is starting a paragraph.
-There are a number of different types of paragraphs, any of which can be
-initiated with macros supplied by the macro package.  Normally,
-paragraphs start with a blank line and the first line indented, like the
-text in this manual.  There are also block style paragraphs, which omit
-the indentation:
-
-     Some   men  look   at  constitutions   with  sanctimonious
-     reverence, and deem them like the ark of the covenant, too
-     sacred to be touched.
-
-And there are also indented paragraphs, which begin with a tag or label
-at the margin and the remaining text indented.
-
-     one   This is  the first paragraph.  Notice  how the first
-           line of  the resulting  paragraph lines up  with the
-           other lines in the paragraph.
-
-     longlabel
-           This  paragraph   had  a  long   label.   The  first
-           character of text on the first line does not line up
-           with  the  text  on  second  and  subsequent  lines,
-           although they line up with each other.
-
-   A variation of this is a bulleted list.
-
-     .     Bulleted lists start with a bullet.   It is possible
-           to use other glyphs instead of the bullet.  In nroff
-           mode using the ASCII character set for output, a dot
-           is used instead of a real bullet.
-
-\1f
-File: groff.info,  Node: Sections and Chapters,  Next: Headers and Footers,  Prev: Paragraphs,  Up: Common Features
-
-3.2.2 Sections and Chapters
----------------------------
-
-Most macro packages supply some form of section headers.  The simplest
-kind is simply the heading on a line by itself in bold type.  Others
-supply automatically numbered section heading or different heading
-styles at different levels.  Some, more sophisticated, macro packages
-supply macros for starting chapters and appendices.
-
-\1f
-File: groff.info,  Node: Headers and Footers,  Next: Page Layout Adjustment,  Prev: Sections and Chapters,  Up: Common Features
-
-3.2.3 Headers and Footers
--------------------------
-
-Every macro package gives some way to manipulate the "headers" and
-"footers" (also called "titles") on each page.  This is text put at the
-top and bottom of each page, respectively, which contain data like the
-current page number, the current chapter title, and so on.  Its
-appearance is not affected by the running text.  Some packages allow for
-different ones on the even and odd pages (for material printed in a book
-form).
-
-   The titles are called "three-part titles", that is, there is a
-left-justified part, a centered part, and a right-justified part.  An
-automatically generated page number may be put in any of these fields
-with the '%' character (see *note Page Layout::, for more details).
-
-\1f
-File: groff.info,  Node: Page Layout Adjustment,  Next: Displays,  Prev: Headers and Footers,  Up: Common Features
-
-3.2.4 Page Layout
------------------
-
-Most macro packages let the user specify top and bottom margins and
-other details about the appearance of the printed pages.
-
-\1f
-File: groff.info,  Node: Displays,  Next: Footnotes and Annotations,  Prev: Page Layout Adjustment,  Up: Common Features
-
-3.2.5 Displays
---------------
-
-"Displays" are sections of text to be set off from the body of the
-paper.  Major quotes, tables, and figures are types of displays, as are
-all the examples used in this document.
-
-   "Major quotes" are quotes that are several lines long, and hence are
-set in from the rest of the text without quote marks around them.
-
-   A "list" is an indented, single-spaced, unfilled display.  Lists
-should be used when the material to be printed should not be filled and
-justified like normal text, such as columns of figures or the examples
-used in this paper.
-
-   A "keep" is a display of lines that are kept on a single page if
-possible.  An example for a keep might be a diagram.  Keeps differ from
-lists in that lists may be broken over a page boundary whereas keeps are
-not.
-
-   "Floating keeps" move relative to the text.  Hence, they are good for
-things that are referred to by name, such as "See figure 3".  A floating
-keep appears at the bottom of the current page if it fits; otherwise, it
-appears at the top of the next page.  Meanwhile, the surrounding text
-'flows' around the keep, thus leaving no blank areas.
-
-\1f
-File: groff.info,  Node: Footnotes and Annotations,  Next: Table of Contents,  Prev: Displays,  Up: Common Features
-
-3.2.6 Footnotes and Annotations
--------------------------------
-
-There are a number of requests to save text for later printing.
-
-   "Footnotes" are printed at the bottom of the current page.
-
-   "Delayed text" is very similar to a footnote except that it is
-printed when called for explicitly.  This allows a list of references to
-appear (for example) at the end of each chapter, as is the convention in
-some disciplines.
-
-   Most macro packages that supply this functionality also supply a
-means of automatically numbering either type of annotation.
-
-\1f
-File: groff.info,  Node: Table of Contents,  Next: Indices,  Prev: Footnotes and Annotations,  Up: Common Features
-
-3.2.7 Table of Contents
------------------------
-
-"Tables of contents" are a type of delayed text having a tag (usually
-the page number) attached to each entry after a row of dots.  The table
-accumulates throughout the paper until printed, usually after the paper
-has ended.  Many macro packages provide the ability to have several
-tables of contents (e.g. a standard table of contents, a list of tables,
-etc).
-
-\1f
-File: groff.info,  Node: Indices,  Next: Paper Formats,  Prev: Table of Contents,  Up: Common Features
-
-3.2.8 Indices
--------------
-
-While some macro packages use the term "index", none actually provide
-that functionality.  The facilities they call indices are actually more
-appropriate for tables of contents.
-
-   To produce a real index in a document, external tools like the
-'makeindex' program are necessary.
-
-\1f
-File: groff.info,  Node: Paper Formats,  Next: Multiple Columns,  Prev: Indices,  Up: Common Features
-
-3.2.9 Paper Formats
--------------------
-
-Some macro packages provide stock formats for various kinds of
-documents.  Many of them provide a common format for the title and
-opening pages of a technical paper.  The 'mm' macros in particular
-provide formats for letters and memoranda.
-
-\1f
-File: groff.info,  Node: Multiple Columns,  Next: Font and Size Changes,  Prev: Paper Formats,  Up: Common Features
-
-3.2.10 Multiple Columns
------------------------
-
-Some macro packages (but not 'man') provide the ability to have two or
-more columns on a page.
-
-\1f
-File: groff.info,  Node: Font and Size Changes,  Next: Predefined Strings,  Prev: Multiple Columns,  Up: Common Features
-
-3.2.11 Font and Size Changes
-----------------------------
-
-The built-in font and size functions are not always intuitive, so all
-macro packages provide macros to make these operations simpler.
-
-\1f
-File: groff.info,  Node: Predefined Strings,  Next: Preprocessor Support,  Prev: Font and Size Changes,  Up: Common Features
-
-3.2.12 Predefined Strings
--------------------------
-
-Most macro packages provide various predefined strings for a variety of
-uses; examples are sub- and superscripts, printable dates, quotes and
-various special characters.
-
-\1f
-File: groff.info,  Node: Preprocessor Support,  Next: Configuration and Customization,  Prev: Predefined Strings,  Up: Common Features
-
-3.2.13 Preprocessor Support
----------------------------
-
-All macro packages provide support for various preprocessors and may
-extend their functionality.
-
-   For example, all macro packages mark tables (which are processed with
-'gtbl') by placing them between 'TS' and 'TE' macros.  The 'ms' macro
-package has an option, '.TS H', that prints a caption at the top of a
-new page (when the table is too long to fit on a single page).
-
-\1f
-File: groff.info,  Node: Configuration and Customization,  Prev: Preprocessor Support,  Up: Common Features
-
-3.2.14 Configuration and Customization
---------------------------------------
-
-Some macro packages provide means of customizing many of the details of
-how the package behaves.  This ranges from setting the default type size
-to changing the appearance of section headers.
-
-\1f
-File: groff.info,  Node: Macro Packages,  Next: gtroff Reference,  Prev: Tutorial for Macro Users,  Up: Top
-
-4 Macro Packages
-****************
-
-This chapter documents the main macro packages that come with 'groff'.
-
-   Different main macro packages can't be used at the same time; for
-example
-
-     groff -m man foo.man -m ms bar.doc
-
-doesn't work.  Note that option arguments are processed before
-non-option arguments; the above (failing) sample is thus reordered to
-
-     groff -m man -m ms foo.man bar.doc
-
-* Menu:
-
-* man::
-* mdoc::
-* ms::
-* me::
-* mm::
-* mom::
-
-\1f
-File: groff.info,  Node: man,  Next: mdoc,  Prev: Macro Packages,  Up: Macro Packages
-
-4.1 'man'
-=========
-
-This is the most popular and probably the most important macro package
-of 'groff'.  It is easy to use, and a vast majority of manual pages are
-based on it.
-
-* Menu:
-
-* Man options::
-* Man usage::
-* Man font macros::
-* Miscellaneous man macros::
-* Predefined man strings::
-* Preprocessors in man pages::
-* Optional man extensions::
-
-\1f
-File: groff.info,  Node: Man options,  Next: Man usage,  Prev: man,  Up: man
-
-4.1.1 Options
--------------
-
-The command line format for using the 'man' macros with 'groff' is:
-
-     groff -m man [ -rLL=LENGTH ] [ -rLT=LENGTH ] [ -rFT=DIST ]
-           [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=FLAGS ]
-           [ -rPNNN ] [ -rSXX ] [ -rXNNN ]
-           [ -rIN=LENGTH ] [ -rSN=LENGTH ] [ FILES... ]
-
-It is possible to use '-man' instead of '-m man'.
-
-'-rcR=1'
-     This option (the default if a TTY output device is used) creates a
-     single, very long page instead of multiple pages.  Use '-rcR=0' to
-     disable it.
-
-'-rC1'
-     If more than one manual page is given on the command line, number
-     the pages continuously, rather than starting each at 1.
-
-'-rD1'
-     Double-sided printing.  Footers for even and odd pages are
-     formatted differently.
-
-'-rFT=DIST'
-     Set the position of the footer text to DIST.  If positive, the
-     distance is measured relative to the top of the page, otherwise it
-     is relative to the bottom.  The default is -0.5i.
-
-'-rHY=FLAGS'
-     Set hyphenation flags.  Possible values are 1 to hyphenate without
-     restrictions, 2 to not hyphenate the last word on a page, 4 to not
-     hyphenate the last two characters of a word, and 8 to not hyphenate
-     the first two characters of a word.  These values are additive; the
-     default is 14.
-
-'-rIN=LENGTH'
-     Set the body text indentation to LENGTH.  If not specified, the
-     indentation defaults to 7n (7 characters) in nroff mode and 7.2n
-     otherwise.  For nroff, this value should always be an integer
-     multiple of unit 'n' to get consistent indentation.
-
-'-rLL=LENGTH'
-     Set line length to LENGTH.  If not specified, the line length is
-     set to respect any value set by a prior 'll' request (which _must_
-     be in effect when the 'TH' macro is invoked), if this differs from
-     the built-in default for the formatter; otherwise it defaults to
-     78n in nroff mode (this is 78 characters per line) and 6.5i in
-     troff mode.(1)  (*note Man options-Footnote-1::)
-
-'-rLT=LENGTH'
-     Set title length to LENGTH.  If not specified, the title length
-     defaults to the line length.
-
-'-rPNNN'
-     Page numbering starts with NNN rather than with 1.
-
-'-rSXX'
-     Use XX (which can be 10, 11, or 12pt) as the base document font
-     size instead of the default value of 10pt.
-
-'-rSN=LENGTH'
-     Set the indentation for sub-subheadings to LENGTH.  If not
-     specified, the indentation defaults to 3n.
-
-'-rXNNN'
-     After page NNN, number pages as NNNa, NNNb, NNNc, etc.  For
-     example, the option '-rX2' produces the following page numbers: 1,
-     2, 2a, 2b, 2c, etc.
-
-\1f
-File: groff.info,  Node: Man options-Footnotes,  Up: Man options
-
-   (1) Note that the use of a '.ll LENGTH' request to initialize the
-line length, prior to use of the 'TH' macro, is supported for backward
-compatibility with some versions of the 'man' program.  _Always_ use the
-'-rLL=LENGTH' option, or an equivalent '.nr LL LENGTH' request, in
-preference to such a '.ll LENGTH' request.  In particular, note that in
-nroff mode, the request '.ll 65n', (with any LENGTH expression that
-evaluates equal to 65n, i.e., the formatter's default line length in
-nroff mode), does _not_ set the line length to 65n (it is adjusted to
-the 'man' macro package's default setting of 78n), whereas the use of
-the '-rLL=65n' option, or the '.nr LL 65n' request _does_ establish a
-line length of 65n.
-
-\1f
-File: groff.info,  Node: Man usage,  Next: Man font macros,  Prev: Man options,  Up: man
-
-4.1.2 Usage
------------
-
-This section describes the available macros for manual pages.  For
-further customization, put additional macros and requests into the file
-'man.local', which is loaded immediately after the 'man' package.
-
- -- Macro: .TH title section [extra1 [extra2 [extra3]]]
-     Set the title of the man page to TITLE and the section to SECTION,
-     which must have a value between 1 and 8.  The value of SECTION may
-     also have a string appended, e.g. '.pm', to indicate a specific
-     subsection of the man pages.
-
-     Both TITLE and SECTION are positioned at the left and right in the
-     header line (with SECTION in parentheses immediately appended to
-     TITLE.  EXTRA1 is positioned in the middle of the footer line.
-     EXTRA2 is positioned at the left in the footer line (or at the left
-     on even pages and at the right on odd pages if double-sided
-     printing is active).  EXTRA3 is centered in the header line.
-
-     For HTML and XHTML output, headers and footers are completely
-     suppressed.
-
-     Additionally, this macro starts a new page; the new line number
-     is 1 again (except if the '-rC1' option is given on the command
-     line) - this feature is intended only for formatting multiple man
-     pages; a single man page should contain exactly one 'TH' macro at
-     the beginning of the file.
-
- -- Macro: .SH [heading]
-     Set up an unnumbered section heading sticking out to the left.
-     Prints out all the text following 'SH' up to the end of the line
-     (or the text in the next line if there is no argument to 'SH') in
-     bold face (or the font specified by the string 'HF'), one size
-     larger than the base document size.  Additionally, the left margin
-     and the indentation for the following text is reset to its default
-     value.
-
- -- Macro: .SS [heading]
-     Set up an unnumbered (sub)section heading.  Prints out all the text
-     following 'SS' up to the end of the line (or the text in the next
-     line if there is no argument to 'SS') in bold face (or the font
-     specified by the string 'HF'), at the same size as the base
-     document size.  Additionally, the left margin and the indentation
-     for the following text is reset to its default value.
-
- -- Macro: .TP [nnn]
-     Set up an indented paragraph with label.  The indentation is set to
-     NNN if that argument is supplied (the default unit is 'n' if
-     omitted), otherwise it is set to the previous indentation value
-     specified with 'TP', 'IP', or 'HP' (or to the default value if none
-     of them have been used yet).
-
-     The first line of text following this macro is interpreted as a
-     string to be printed flush-left, as it is appropriate for a label.
-     It is not interpreted as part of a paragraph, so there is no
-     attempt to fill the first line with text from the following input
-     lines.  Nevertheless, if the label is not as wide as the
-     indentation the paragraph starts at the same line (but indented),
-     continuing on the following lines.  If the label is wider than the
-     indentation the descriptive part of the paragraph begins on the
-     line following the label, entirely indented.  Note that neither
-     font shape nor font size of the label is set to a default value; on
-     the other hand, the rest of the text has default font settings.
-
- -- Macro: .LP
- -- Macro: .PP
- -- Macro: .P
-     These macros are mutual aliases.  Any of them causes a line break
-     at the current position, followed by a vertical space downwards by
-     the amount specified by the 'PD' macro.  The font size and shape
-     are reset to the default value (10pt roman if no '-rS' option is
-     given on the command line).  Finally, the current left margin and
-     the indentation is restored.
-
- -- Macro: .IP [designator [nnn]]
-     Set up an indented paragraph, using DESIGNATOR as a tag to mark its
-     beginning.  The indentation is set to NNN if that argument is
-     supplied (default unit is 'n'), otherwise it is set to the previous
-     indentation value specified with 'TP', 'IP', or 'HP' (or the
-     default value if none of them have been used yet).  Font size and
-     face of the paragraph (but not the designator) are reset to their
-     default values.
-
-     To start an indented paragraph with a particular indentation but
-     without a designator, use '""' (two double quotes) as the first
-     argument of 'IP'.
-
-     For example, to start a paragraph with bullets as the designator
-     and 4 en indentation, write
-
-          .IP \(bu 4
-
- -- Macro: .HP [nnn]
-     Set up a paragraph with hanging left indentation.  The indentation
-     is set to NNN if that argument is supplied (default unit is 'n'),
-     otherwise it is set to the previous indentation value specified
-     with 'TP', 'IP', or 'HP' (or the default value if non of them have
-     been used yet).  Font size and face are reset to their default
-     values.
-
- -- Macro: .RS [nnn]
-     Move the left margin to the right by the value NNN if specified
-     (default unit is 'n'); otherwise it is set to the previous
-     indentation value specified with 'TP', 'IP', or 'HP' (or to the
-     default value if none of them have been used yet).  The indentation
-     value is then set to the default.
-
-     Calls to the 'RS' macro can be nested.
-
- -- Macro: .RE [nnn]
-     Move the left margin back to level NNN, restoring the previous left
-     margin.  If no argument is given, it moves one level back.  The
-     first level (i.e., no call to 'RS' yet) has number 1, and each call
-     to 'RS' increases the level by 1.
-
-   To summarize, the following macros cause a line break with the
-insertion of vertical space (which amount can be changed with the 'PD'
-macro): 'SH', 'SS', 'TP', 'LP' ('PP', 'P'), 'IP', and 'HP'.
-
-   The macros 'RS' and 'RE' also cause a break but do not insert
-vertical space.
-
-   Finally, the macros 'SH', 'SS', 'LP' ('PP', 'P'), and 'RS' reset the
-indentation to its default value.
-
-\1f
-File: groff.info,  Node: Man font macros,  Next: Miscellaneous man macros,  Prev: Man usage,  Up: man
-
-4.1.3 Macros to set fonts
--------------------------
-
-The standard font is roman; the default text size is 10 point.  If
-command line option '-rS=N' is given, use Npt as the default text size.
-
- -- Macro: .SM [text]
-     Set the text on the same line or the text on the next line in a
-     font that is one point size smaller than the default font.
-
- -- Macro: .SB [text]
-     Set the text on the same line or the text on the next line in bold
-     face font, one point size smaller than the default font.
-
- -- Macro: .BI text
-     Set its arguments alternately in bold face and italic, without a
-     space between the arguments.  Thus,
-
-          .BI this "word and" that
-
-     produces "thisword andthat" with "this" and "that" in bold face,
-     and "word and" in italics.
-
- -- Macro: .IB text
-     Set its arguments alternately in italic and bold face, without a
-     space between the arguments.
-
- -- Macro: .RI text
-     Set its arguments alternately in roman and italic, without a space
-     between the arguments.
-
- -- Macro: .IR text
-     Set its arguments alternately in italic and roman, without a space
-     between the arguments.
-
- -- Macro: .BR text
-     Set its arguments alternately in bold face and roman, without a
-     space between the arguments.
-
- -- Macro: .RB text
-     Set its arguments alternately in roman and bold face, without a
-     space between the arguments.
-
- -- Macro: .B [text]
-     Set TEXT in bold face.  If no text is present on the line where the
-     macro is called, then the text of the next line appears in bold
-     face.
-
- -- Macro: .I [text]
-     Set TEXT in italic.  If no text is present on the line where the
-     macro is called, then the text of the next line appears in italic.
-
-\1f
-File: groff.info,  Node: Miscellaneous man macros,  Next: Predefined man strings,  Prev: Man font macros,  Up: man
-
-4.1.4 Miscellaneous macros
---------------------------
-
-The default indentation is 7.2n in troff mode and 7n in nroff mode
-except for 'grohtml', which ignores indentation.
-
- -- Macro: .DT
-     Set tabs every 0.5 inches.  Since this macro is always executed
-     during a call to the 'TH' macro, it makes sense to call it only if
-     the tab positions have been changed.
-
- -- Macro: .PD [nnn]
-     Adjust the empty space before a new paragraph (or section).  The
-     optional argument gives the amount of space (default unit is 'v');
-     without parameter, the value is reset to its default value (1 line
-     in nroff mode, 0.4v otherwise).
-
-     This affects the macros 'SH', 'SS', 'TP', 'LP' (as well as 'PP' and
-     'P'), 'IP', and 'HP'.
-
-   The following two macros are included for BSD compatibility.
-
- -- Macro: .AT [system [release]]
-     Alter the footer for use with AT&T manpages.  This command exists
-     only for compatibility; don't use it.  The first argument SYSTEM
-     can be:
-
-     '3'
-          7th Edition (the default)
-
-     '4'
-          System III
-
-     '5'
-          System V
-
-     An optional second argument RELEASE to 'AT' specifies the release
-     number (such as "System V Release 3").
-
- -- Macro: .UC [version]
-     Alters the footer for use with BSD manpages.  This command exists
-     only for compatibility; don't use it.  The argument can be:
-
-     '3'
-          3rd Berkeley Distribution (the default)
-
-     '4'
-          4th Berkeley Distribution
-
-     '5'
-          4.2 Berkeley Distribution
-
-     '6'
-          4.3 Berkeley Distribution
-
-     '7'
-          4.4 Berkeley Distribution
-
-\1f
-File: groff.info,  Node: Predefined man strings,  Next: Preprocessors in man pages,  Prev: Miscellaneous man macros,  Up: man
-
-4.1.5 Predefined strings
-------------------------
-
-The following strings are defined:
-
- -- String: \*[S]
-     Switch back to the default font size.
-
- -- String: \*[HF]
-     The typeface used for headings.  The default is 'B'.
-
- -- String: \*[R]
-     The 'registered' sign.
-
- -- String: \*[Tm]
-     The 'trademark' sign.
-
- -- String: \*[lq]
- -- String: \*[rq]
-     Left and right quote.  This is equal to '\(lq' and '\(rq',
-     respectively.
-
-\1f
-File: groff.info,  Node: Preprocessors in man pages,  Next: Optional man extensions,  Prev: Predefined man strings,  Up: man
-
-4.1.6 Preprocessors in 'man' pages
-----------------------------------
-
-If a preprocessor like 'gtbl' or 'geqn' is needed, it has become common
-usage to make the first line of the man page look like this:
-
-     '\" WORD
-
-Note the single space character after the double quote.  WORD consists
-of letters for the needed preprocessors: 'e' for 'geqn', 'r' for
-'grefer', 't' for 'gtbl'.  Modern implementations of the 'man' program
-read this first line and automatically call the right preprocessor(s).
-
-\1f
-File: groff.info,  Node: Optional man extensions,  Prev: Preprocessors in man pages,  Up: man
-
-4.1.7 Optional 'man' extensions
--------------------------------
-
-Use the file 'man.local' for local extensions to the 'man' macros or for
-style changes.
-
-Custom headers and footers
-..........................
-
-In groff versions 1.18.2 and later, you can specify custom headers and
-footers by redefining the following macros in 'man.local'.
-
- -- Macro: .PT
-     Control the content of the headers.  Normally, the header prints
-     the command name and section number on either side, and the
-     optional fifth argument to 'TH' in the center.
-
- -- Macro: .BT
-     Control the content of the footers.  Normally, the footer prints
-     the page number and the third and fourth arguments to 'TH'.
-
-     Use the 'FT' number register to specify the footer position.  The
-     default is -0.5i.
-
-Ultrix-specific man macros
-..........................
-
-The 'groff' source distribution includes a file named 'man.ultrix',
-containing macros compatible with the Ultrix variant of 'man'.  Copy
-this file into 'man.local' (or use the 'mso' request to load it) to
-enable the following macros.
-
- -- Macro: .CT key
-     Print '<CTRL/KEY>'.
-
- -- Macro: .CW
-     Print subsequent text using the constant width (Courier) typeface.
-
- -- Macro: .Ds
-     Begin a non-filled display.
-
- -- Macro: .De
-     End a non-filled display started with 'Ds'.
-
- -- Macro: .EX [indent]
-     Begin a non-filled display using the constant width (Courier)
-     typeface.  Use the optional INDENT argument to indent the display.
-
- -- Macro: .EE
-     End a non-filled display started with 'EX'.
-
- -- Macro: .G [text]
-     Set TEXT in Helvetica.  If no text is present on the line where the
-     macro is called, then the text of the next line appears in
-     Helvetica.
-
- -- Macro: .GL [text]
-     Set TEXT in Helvetica Oblique.  If no text is present on the line
-     where the macro is called, then the text of the next line appears
-     in Helvetica Oblique.
-
- -- Macro: .HB [text]
-     Set TEXT in Helvetica Bold.  If no text is present on the line
-     where the macro is called, then all text up to the next 'HB'
-     appears in Helvetica Bold.
-
- -- Macro: .TB [text]
-     Identical to 'HB'.
-
- -- Macro: .MS title sect [punct]
-     Set a manpage reference in Ultrix format.  The TITLE is in Courier
-     instead of italic.  Optional punctuation follows the section number
-     without an intervening space.
-
- -- Macro: .NT ['C'] [title]
-     Begin a note.  Print the optional title, or the word "Note",
-     centered on the page.  Text following the macro makes up the body
-     of the note, and is indented on both sides.  If the first argument
-     is 'C', the body of the note is printed centered (the second
-     argument replaces the word "Note" if specified).
-
- -- Macro: .NE
-     End a note begun with 'NT'.
-
- -- Macro: .PN path [punct]
-     Set the path name in constant width (Courier), followed by optional
-     punctuation.
-
- -- Macro: .Pn [punct] path [punct]
-     If called with two arguments, identical to 'PN'.  If called with
-     three arguments, set the second argument in constant width
-     (Courier), bracketed by the first and third arguments in the
-     current font.
-
- -- Macro: .R
-     Switch to roman font and turn off any underlining in effect.
-
- -- Macro: .RN
-     Print the string '<RETURN>'.
-
- -- Macro: .VS ['4']
-     Start printing a change bar in the margin if the number '4' is
-     specified.  Otherwise, this macro does nothing.
-
- -- Macro: .VE
-     End printing the change bar begun by 'VS'.
-
-Simple example
-..............
-
-The following example 'man.local' file alters the 'SH' macro to add some
-extra vertical space before printing the heading.  Headings are printed
-in Helvetica Bold.
-
-     .\" Make the heading fonts Helvetica
-     .ds HF HB
-     .
-     .\" Put more whitespace in front of headings.
-     .rn SH SH-orig
-     .de SH
-     .  if t .sp (u;\\n[PD]*2)
-     .  SH-orig \\$*
-     ..
-
-\1f
-File: groff.info,  Node: mdoc,  Next: ms,  Prev: man,  Up: Macro Packages
-
-4.2 'mdoc'
-==========
-
-See the 'groff_mdoc(7)' man page (type 'man groff_mdoc' at the command
-line).
-
-\1f
-File: groff.info,  Node: ms,  Next: me,  Prev: mdoc,  Up: Macro Packages
-
-4.3 'ms'
-========
-
-The '-ms' macros are suitable for reports, letters, books, user manuals,
-and so forth.  The package provides macros for cover pages, section
-headings, paragraphs, lists, footnotes, pagination, and a table of
-contents.
-
-* Menu:
-
-* ms Intro::
-* General ms Structure::
-* ms Document Control Registers::
-* ms Cover Page Macros::
-* ms Body Text::
-* ms Page Layout::
-* Differences from AT&T ms::
-* Naming Conventions::
-
-\1f
-File: groff.info,  Node: ms Intro,  Next: General ms Structure,  Prev: ms,  Up: ms
-
-4.3.1 Introduction to 'ms'
---------------------------
-
-The original '-ms' macros were included with AT&T 'troff' as well as the
-'man' macros.  While the 'man' package is intended for brief documents
-that can be read on-line as well as printed, the 'ms' macros are
-suitable for longer documents that are meant to be printed rather than
-read on-line.
-
-   The 'ms' macro package included with 'groff' is a complete, bottom-up
-re-implementation.  Several macros (specific to AT&T or Berkeley) are
-not included, while several new commands are.  *Note Differences from
-AT&T ms::, for more information.
-
-\1f
-File: groff.info,  Node: General ms Structure,  Next: ms Document Control Registers,  Prev: ms Intro,  Up: ms
-
-4.3.2 General structure of an 'ms' document
--------------------------------------------
-
-The 'ms' macro package expects a certain amount of structure, but not as
-much as packages such as 'man' or 'mdoc'.
-
-   The simplest documents can begin with a paragraph macro (such as 'LP'
-or 'PP'), and consist of text separated by paragraph macros or even
-blank lines.  Longer documents have a structure as follows:
-
-*Document type*
-     If you invoke the 'RP' (report) macro on the first line of the
-     document, 'groff' prints the cover page information on its own
-     page; otherwise it prints the information on the first page with
-     your document text immediately following.  Other document formats
-     found in AT&T 'troff' are specific to AT&T or Berkeley, and are not
-     supported in 'groff'.
-
-*Format and layout*
-     By setting number registers, you can change your document's type
-     (font and size), margins, spacing, headers and footers, and
-     footnotes.  *Note ms Document Control Registers::, for more
-     details.
-
-*Cover page*
-     A cover page consists of a title, the author's name and
-     institution, an abstract, and the date.(1)  (*note General ms
-     Structure-Footnote-1::) *Note ms Cover Page Macros::, for more
-     details.
-
-*Body*
-     Following the cover page is your document.  You can use the 'ms'
-     macros to write reports, letters, books, and so forth.  The package
-     is designed for structured documents, consisting of paragraphs
-     interspersed with headings and augmented by lists, footnotes,
-     tables, and other common constructs.  *Note ms Body Text::, for
-     more details.
-
-*Table of contents*
-     Longer documents usually include a table of contents, which you can
-     invoke by placing the 'TC' macro at the end of your document.  The
-     'ms' macros have minimal indexing facilities, consisting of the
-     'IX' macro, which prints an entry on standard error.  Printing the
-     table of contents at the end is necessary since 'groff' is a
-     single-pass text formatter, thus it cannot determine the page
-     number of each section until that section has actually been set and
-     printed.  Since 'ms' output is intended for hardcopy, you can
-     manually relocate the pages containing the table of contents
-     between the cover page and the body text after printing.
-
-\1f
-File: groff.info,  Node: General ms Structure-Footnotes,  Up: General ms Structure
-
-   (1) Actually, only the title is required.
-
-\1f
-File: groff.info,  Node: ms Document Control Registers,  Next: ms Cover Page Macros,  Prev: General ms Structure,  Up: ms
-
-4.3.3 Document control registers
---------------------------------
-
-The following is a list of document control number registers.  For the
-sake of consistency, set registers related to margins at the beginning
-of your document, or just after the 'RP' macro.  You can set other
-registers later in your document, but you should keep them together at
-the beginning to make them easy to find and edit as necessary.
-
-Margin Settings
-...............
-
- -- Register: \n[PO]
-     Defines the page offset (i.e., the left margin).  There is no
-     explicit right margin setting; the combination of the 'PO' and 'LL'
-     registers implicitly define the right margin width.
-
-     Effective: next page.
-
-     Default value: 1i.
-
- -- Register: \n[LL]
-     Defines the line length (i.e., the width of the body text).
-
-     Effective: next paragraph.
-
-     Default: 6i.
-
- -- Register: \n[LT]
-     Defines the title length (i.e., the header and footer width).  This
-     is usually the same as 'LL', but not necessarily.
-
-     Effective: next paragraph.
-
-     Default: 6i.
-
- -- Register: \n[HM]
-     Defines the header margin height at the top of the page.
-
-     Effective: next page.
-
-     Default: 1i.
-
- -- Register: \n[FM]
-     Defines the footer margin height at the bottom of the page.
-
-     Effective: next page.
-
-     Default: 1i.
-
-Text Settings
-.............
-
- -- Register: \n[PS]
-     Defines the point size of the body text.  If the value is larger
-     than or equal to 1000, divide it by 1000 to get a fractional point
-     size.  For example, '.nr PS 10250' sets the document's point size
-     to 10.25p.
-
-     Effective: next paragraph.
-
-     Default: 10p.
-
- -- Register: \n[VS]
-     Defines the space between lines (line height plus leading).  If the
-     value is larger than or equal to 1000, divide it by 1000 to get a
-     fractional point size.  Due to backwards compatibility, 'VS' must
-     be smaller than 40000 (this is 40.0p).
-
-     Effective: next paragraph.
-
-     Default: 12p.
-
- -- Register: \n[PSINCR]
-     Defines an increment in point size, which is applied to section
-     headings at nesting levels below the value specified in 'GROWPS'.
-     The value of 'PSINCR' should be specified in points, with the p
-     scaling factor, and may include a fractional component; for
-     example, '.nr PSINCR 1.5p' sets a point size increment of 1.5p.
-
-     Effective: next section heading.
-
-     Default: 1p.
-
- -- Register: \n[GROWPS]
-     Defines the heading level below which the point size increment set
-     by 'PSINCR' becomes effective.  Section headings at and above the
-     level specified by 'GROWPS' are printed at the point size set by
-     'PS'; for each level below the value of 'GROWPS', the point size is
-     increased in steps equal to the value of 'PSINCR'.  Setting
-     'GROWPS' to any value less than 2 disables the incremental heading
-     size feature.
-
-     Effective: next section heading.
-
-     Default: 0.
-
- -- Register: \n[HY]
-     Defines the hyphenation level.  'HY' sets safely the value of the
-     low-level 'hy' register.  Setting the value of 'HY' to 0 is
-     equivalent to using the 'nh' request.
-
-     Effective: next paragraph.
-
-     Default: 14.
-
- -- Register: \n[FAM]
-     Defines the font family used to typeset the document.
-
-     Effective: next paragraph.
-
-     Default: as defined in the output device.
-
-Paragraph Settings
-..................
-
- -- Register: \n[PI]
-     Defines the initial indentation of a ('PP' macro) paragraph.
-
-     Effective: next paragraph.
-
-     Default: 5n.
-
- -- Register: \n[PD]
-     Defines the space between paragraphs.
-
-     Effective: next paragraph.
-
-     Default: 0.3v.
-
- -- Register: \n[QI]
-     Defines the indentation on both sides of a quoted ('QP' macro)
-     paragraph.
-
-     Effective: next paragraph.
-
-     Default: 5n.
-
- -- Register: \n[PORPHANS]
-     Defines the minimum number of initial lines of any paragraph that
-     should be kept together, to avoid orphan lines at the bottom of a
-     page.  If a new paragraph is started close to the bottom of a page,
-     and there is insufficient space to accommodate 'PORPHANS' lines
-     before an automatic page break, then the page break is forced,
-     before the start of the paragraph.
-
-     Effective: next paragraph.
-
-     Default: 1.
-
- -- Register: \n[HORPHANS]
-     Defines the minimum number of lines of the following paragraph that
-     should be kept together with any section heading introduced by the
-     'NH' or 'SH' macros.  If a section heading is placed close to the
-     bottom of a page, and there is insufficient space to accommodate
-     both the heading and at least 'HORPHANS' lines of the following
-     paragraph, before an automatic page break, then the page break is
-     forced before the heading.
-
-     Effective: next paragraph.
-
-     Default: 1.
-
-Footnote Settings
-.................
-
- -- Register: \n[FL]
-     Defines the length of a footnote.
-
-     Effective: next footnote.
-
-     Default: '\n[LL]' * 5 / 6.
-
- -- Register: \n[FI]
-     Defines the footnote indentation.
-
-     Effective: next footnote.
-
-     Default: 2n.
-
- -- Register: \n[FF]
-     The footnote format:
-     '0'
-          Print the footnote number as a superscript; indent the
-          footnote (default).
-
-     '1'
-          Print the number followed by a period (like 1.) and indent the
-          footnote.
-
-     '2'
-          Like 1, without an indentation.
-
-     '3'
-          Like 1, but print the footnote number as a hanging paragraph.
-
-     Effective: next footnote.
-
-     Default: 0.
-
- -- Register: \n[FPS]
-     Defines the footnote point size.  If the value is larger than or
-     equal to 1000, divide it by 1000 to get a fractional point size.
-
-     Effective: next footnote.
-
-     Default: '\n[PS]' - 2.
-
- -- Register: \n[FVS]
-     Defines the footnote vertical spacing.  If the value is larger than
-     or equal to 1000, divide it by 1000 to get a fractional point size.
-
-     Effective: next footnote.
-
-     Default: '\n[FPS]' + 2.
-
- -- Register: \n[FPD]
-     Defines the footnote paragraph spacing.
-
-     Effective: next footnote.
-
-     Default: '\n[PD]' / 2.
-
-Miscellaneous Number Registers
-..............................
-
- -- Register: \n[MINGW]
-     Defines the minimum width between columns in a multi-column
-     document.
-
-     Effective: next page.
-
-     Default: 2n.
-
- -- Register: \n[DD]
-     Sets the vertical spacing before and after a display, a 'tbl'
-     table, an 'eqn' equation, or a 'pic' image.
-
-     Effective: next paragraph.
-
-     Default: 0.5v.
-
-\1f
-File: groff.info,  Node: ms Cover Page Macros,  Next: ms Body Text,  Prev: ms Document Control Registers,  Up: ms
-
-4.3.4 Cover page macros
------------------------
-
-Use the following macros to create a cover page for your document in the
-order shown.
-
- -- Macro: .RP ['no']
-     Specifies the report format for your document.  The report format
-     creates a separate cover page.  The default action (no 'RP' macro)
-     is to print a subset of the cover page on page 1 of your document.
-
-     If you use the word 'no' as an optional argument, 'groff' prints a
-     title page but does not repeat any of the title page information
-     (title, author, abstract, etc.) on page 1 of the document.
-
- -- Macro: .P1
-     (P-one) Prints the header on page 1.  The default is to suppress
-     the header.
-
- -- Macro: .DA [...]
-     (optional) Prints the current date, or the arguments to the macro
-     if any, on the title page (if specified) and in the footers.  This
-     is the default for 'nroff'.
-
- -- Macro: .ND [...]
-     (optional) Prints the current date, or the arguments to the macro
-     if any, on the title page (if specified) but not in the footers.
-     This is the default for 'troff'.
-
- -- Macro: .TL
-     Specifies the document title.  'groff' collects text following the
-     'TL' macro into the title, until reaching the author name or
-     abstract.
-
- -- Macro: .AU
-     Specifies the author's name, which appears on the line (or lines)
-     immediately following.  You can specify multiple authors as
-     follows:
-
-          .AU
-          John Doe
-          .AI
-          University of West Bumblefuzz
-          .AU
-          Martha Buck
-          .AI
-          Monolithic Corporation
-
-          ...
-
- -- Macro: .AI
-     Specifies the author's institution.  You can specify multiple
-     institutions in the same way that you specify multiple authors.
-
- -- Macro: .AB ['no']
-     Begins the abstract.  The default is to print the word ABSTRACT,
-     centered and in italics, above the text of the abstract.  The word
-     'no' as an optional argument suppresses this heading.
-
- -- Macro: .AE
-     Ends the abstract.
-
-   The following is example mark-up for a title page.
-
-     .RP
-     .TL
-     The Inevitability of Code Bloat
-     in Commercial and Free Software
-     .AU
-     J. Random Luser
-     .AI
-     University of West Bumblefuzz
-     .AB
-     This report examines the long-term growth
-     of the code bases in two large, popular software
-     packages; the free Emacs and the commercial
-     Microsoft Word.
-     While differences appear in the type or order
-     of features added, due to the different
-     methodologies used, the results are the same
-     in the end.
-     .PP
-     The free software approach is shown to be
-     superior in that while free software can
-     become as bloated as commercial offerings,
-     free software tends to have fewer serious
-     bugs and the added features are in line with
-     user demand.
-     .AE
-
-     ... the rest of the paper follows ...
-
-\1f
-File: groff.info,  Node: ms Body Text,  Next: ms Page Layout,  Prev: ms Cover Page Macros,  Up: ms
-
-4.3.5 Body text
----------------
-
-This section describes macros used to mark up the body of your document.
-Examples include paragraphs, sections, and other groups.
-
-* Menu:
-
-* Paragraphs in ms::
-* Headings in ms::
-* Highlighting in ms::
-* Lists in ms::
-* Indentation values in ms::
-* Tabstops in ms::
-* ms Displays and Keeps::
-* ms Insertions::
-* Example multi-page table::
-* ms Footnotes::
-
-\1f
-File: groff.info,  Node: Paragraphs in ms,  Next: Headings in ms,  Prev: ms Body Text,  Up: ms Body Text
-
-4.3.5.1 Paragraphs
-..................
-
-The following paragraph types are available.
-
- -- Macro: .PP
-     Sets a paragraph with an initial indentation.
-
- -- Macro: .LP
-     Sets a paragraph without an initial indentation.
-
- -- Macro: .QP
-     Sets a paragraph that is indented at both left and right margins.
-     The effect is identical to the HTML '<BLOCKQUOTE>' element.  The
-     next paragraph or heading returns margins to normal.
-
- -- Macro: .XP
-     Sets a paragraph whose lines are indented, except for the first
-     line.  This is a Berkeley extension.
-
-   The following markup uses all four paragraph macros.
-
-     .NH 2
-     Cases used in the study
-     .LP
-     The following software and versions were
-     considered for this report.
-     .PP
-     For commercial software, we chose
-     .B "Microsoft Word for Windows" ,
-     starting with version 1.0 through the
-     current version (Word 2000).
-     .PP
-     For free software, we chose
-     .B Emacs ,
-     from its first appearance as a standalone
-     editor through the current version (v20).
-     See [Bloggs 2002] for details.
-     .QP
-     Franklin's Law applied to software:
-     software expands to outgrow both
-     RAM and disk space over time.
-     .LP
-     Bibliography:
-     .XP
-     Bloggs, Joseph R.,
-     .I "Everyone's a Critic" ,
-     Underground Press, March 2002.
-     A definitive work that answers all questions
-     and criticisms about the quality and usability of
-     free software.
-
-   The 'PORPHANS' register (*note ms Document Control Registers::)
-operates in conjunction with each of these macros, to inhibit the
-printing of orphan lines at the bottom of any page.
-
-\1f
-File: groff.info,  Node: Headings in ms,  Next: Highlighting in ms,  Prev: Paragraphs in ms,  Up: ms Body Text
-
-4.3.5.2 Headings
-................
-
-Use headings to create a hierarchical structure for your document.  The
-'ms' macros print headings in *bold*, using the same font family and
-point size as the body text.
-
-   The following describes the heading macros:
-
- -- Macro: .NH curr-level
- -- Macro: .NH S level0 ...
-     Numbered heading.  The argument is either a numeric argument to
-     indicate the level of the heading, or the letter 'S' followed by
-     numeric arguments to set the heading level explicitly.
-
-     If you specify heading levels out of sequence, such as invoking
-     '.NH 3' after '.NH 1', 'groff' prints a warning on standard error.
-
- -- String: \*[SN]
- -- String: \*[SN-DOT]
- -- String: \*[SN-NO-DOT]
-     After invocation of 'NH', the assigned section number is made
-     available in the strings 'SN-DOT' (as it appears in a printed
-     section heading with default formatting, followed by a terminating
-     period), and 'SN-NO-DOT' (with the terminating period omitted).
-     The string 'SN' is also defined, as an alias for 'SN-DOT'; if
-     preferred, you may redefine it as an alias for 'SN-NO-DOT', by
-     including the initialization
-          .als SN SN-NO-DOT
-
-     at any time *before* you would like the change to take effect.
-
- -- String: \*[SN-STYLE]
-     You may control the style used to print section numbers, within
-     numbered section headings, by defining an appropriate alias for the
-     string 'SN-STYLE'.  The default style, in which the printed section
-     number is followed by a terminating period, is obtained by defining
-     the alias
-
-          .als SN-STYLE SN-DOT
-
-     If you prefer to omit the terminating period, from section numbers
-     appearing in numbered section headings, you may define the alias
-
-          .als SN-STYLE SN-NO-DOT
-
-     Any such change in section numbering style becomes effective from
-     the next use of '.NH', following redefinition of the alias for
-     'SN-STYLE'.
-
- -- Macro: .SH [match-level]
-     Unnumbered subheading.
-
-     The optional MATCH-LEVEL argument is a GNU extension.  It is a
-     number indicating the level of the heading, in a manner analogous
-     to the CURR-LEVEL argument to '.NH'.  Its purpose is to match the
-     point size, at which the heading is printed, to the size of a
-     numbered heading at the same level, when the 'GROWPS' and 'PSINCR'
-     heading size adjustment mechanism is in effect.  *Note ms Document
-     Control Registers::.
-
-   The 'HORPHANS' register (*note ms Document Control Registers::)
-operates in conjunction with the 'NH' and 'SH' macros, to inhibit the
-printing of orphaned section headings at the bottom of any page.
-
-\1f
-File: groff.info,  Node: Highlighting in ms,  Next: Lists in ms,  Prev: Headings in ms,  Up: ms Body Text
-
-4.3.5.3 Highlighting
-....................
-
-The 'ms' macros provide a variety of methods to highlight or emphasize
-text:
-
- -- Macro: .B [txt [post [pre]]]
-     Sets its first argument in *bold type*.  If you specify a second
-     argument, 'groff' prints it in the previous font after the bold
-     text, with no intervening space (this allows you to set punctuation
-     after the highlighted text without highlighting the punctuation).
-     Similarly, it prints the third argument (if any) in the previous
-     font *before* the first argument.  For example,
-
-          .B foo ) (
-
-     prints (*foo*).
-
-     If you give this macro no arguments, 'groff' prints all text
-     following in bold until the next highlighting, paragraph, or
-     heading macro.
-
- -- Macro: .R [txt [post [pre]]]
-     Sets its first argument in roman (or regular) type.  It operates
-     similarly to the 'B' macro otherwise.
-
- -- Macro: .I [txt [post [pre]]]
-     Sets its first argument in _italic type_.  It operates similarly to
-     the 'B' macro otherwise.
-
- -- Macro: .CW [txt [post [pre]]]
-     Sets its first argument in a 'constant width face'.  It operates
-     similarly to the 'B' macro otherwise.
-
- -- Macro: .BI [txt [post [pre]]]
-     Sets its first argument in bold italic type.  It operates similarly
-     to the 'B' macro otherwise.
-
- -- Macro: .BX [txt]
-     Prints its argument and draws a box around it.  If you want to box
-     a string that contains spaces, use a digit-width space ('\0').
-
- -- Macro: .UL [txt [post]]
-     Prints its first argument with an underline.  If you specify a
-     second argument, 'groff' prints it in the previous font after the
-     underlined text, with no intervening space.
-
- -- Macro: .LG
-     Prints all text following in larger type (two points larger than
-     the current point size) until the next font size, highlighting,
-     paragraph, or heading macro.  You can specify this macro multiple
-     times to enlarge the point size as needed.
-
- -- Macro: .SM
-     Prints all text following in smaller type (two points smaller than
-     the current point size) until the next type size, highlighting,
-     paragraph, or heading macro.  You can specify this macro multiple
-     times to reduce the point size as needed.
-
- -- Macro: .NL
-     Prints all text following in the normal point size (that is, the
-     value of the 'PS' register).
-
- -- String: \*[{]
- -- String: \*[}]
-     Text enclosed with '\*{' and '\*}' is printed as a superscript.
-
-\1f
-File: groff.info,  Node: Lists in ms,  Next: Indentation values in ms,  Prev: Highlighting in ms,  Up: ms Body Text
-
-4.3.5.4 Lists
-.............
-
-The 'IP' macro handles duties for all lists.
-
- -- Macro: .IP [marker [width]]
-     The MARKER is usually a bullet glyph ('\[bu]') for unordered lists,
-     a number (or auto-incrementing number register) for numbered lists,
-     or a word or phrase for indented (glossary-style) lists.
-
-     The WIDTH specifies the indentation for the body of each list item;
-     its default unit is 'n'.  Once specified, the indentation remains
-     the same for all list items in the document until specified again.
-
-     The 'PORPHANS' register (*note ms Document Control Registers::)
-     operates in conjunction with the 'IP' macro, to inhibit the
-     printing of orphaned list markers at the bottom of any page.
-
-   The following is an example of a bulleted list.
-
-     A bulleted list:
-     .IP \[bu] 2
-     lawyers
-     .IP \[bu]
-     guns
-     .IP \[bu]
-     money
-
-   Produces:
-
-     A bulleted list:
-
-     o lawyers
-
-     o guns
-
-     o money
-
-   The following is an example of a numbered list.
-
-     .nr step 1 1
-     A numbered list:
-     .IP \n[step] 3
-     lawyers
-     .IP \n+[step]
-     guns
-     .IP \n+[step]
-     money
-
-   Produces:
-
-     A numbered list:
-
-     1. lawyers
-
-     2. guns
-
-     3. money
-
-   Note the use of the auto-incrementing number register in this
-example.
-
-   The following is an example of a glossary-style list.
-
-     A glossary-style list:
-     .IP lawyers 0.4i
-     Two or more attorneys.
-     .IP guns
-     Firearms, preferably
-     large-caliber.
-     .IP money
-     Gotta pay for those
-     lawyers and guns!
-
-   Produces:
-
-     A glossary-style list:
-
-     lawyers
-           Two or more attorneys.
-
-     guns  Firearms, preferably large-caliber.
-
-     money
-           Gotta pay for those lawyers and guns!
-
-   In the last example, the 'IP' macro places the definition on the same
-line as the term if it has enough space; otherwise, it breaks to the
-next line and starts the definition below the term.  This may or may not
-be the effect you want, especially if some of the definitions break and
-some do not.  The following examples show two possible ways to force a
-break.
-
-   The first workaround uses the 'br' request to force a break after
-printing the term or label.
-
-     A glossary-style list:
-     .IP lawyers 0.4i
-     Two or more attorneys.
-     .IP guns
-     .br
-     Firearms, preferably large-caliber.
-     .IP money
-     Gotta pay for those lawyers and guns!
-
-   The second workaround uses the '\p' escape to force the break.  Note
-the space following the escape; this is important.  If you omit the
-space, 'groff' prints the first word on the same line as the term or
-label (if it fits) *then* breaks the line.
-
-     A glossary-style list:
-     .IP lawyers 0.4i
-     Two or more attorneys.
-     .IP guns
-     \p Firearms, preferably large-caliber.
-     .IP money
-     Gotta pay for those lawyers and guns!
-
-   To set nested lists, use the 'RS' and 'RE' macros.  *Note Indentation
-values in ms::, for more information.
-
-   For example:
-
-     .IP \[bu] 2
-     Lawyers:
-     .RS
-     .IP \[bu]
-     Dewey,
-     .IP \[bu]
-     Cheatham,
-     .IP \[bu]
-     and Howe.
-     .RE
-     .IP \[bu]
-     Guns
-
-   Produces:
-
-     o Lawyers:
-
-       o  Dewey,
-
-       o  Cheatham,
-
-       o  and Howe.
-
-     o Guns
-
-\1f
-File: groff.info,  Node: Indentation values in ms,  Next: Tabstops in ms,  Prev: Lists in ms,  Up: ms Body Text
-
-4.3.5.5 Indentation values
-..........................
-
-In many situations, you may need to indentation a section of text while
-still wrapping and filling.  *Note Lists in ms::, for an example of
-nested lists.
-
- -- Macro: .RS
- -- Macro: .RE
-     These macros begin and end an indented section.  The 'PI' register
-     controls the amount of indentation, allowing the indented text to
-     line up under hanging and indented paragraphs.
-
-   *Note ms Displays and Keeps::, for macros to indentation and turn off
-filling.
-
-\1f
-File: groff.info,  Node: Tabstops in ms,  Next: ms Displays and Keeps,  Prev: Indentation values in ms,  Up: ms Body Text
-
-4.3.5.6 Tab Stops
-.................
-
-Use the 'ta' request to define tab stops as needed.  *Note Tabs and
-Fields::.
-
- -- Macro: .TA
-     Use this macro to reset the tab stops to the default for 'ms'
-     (every 5n).  You can redefine the 'TA' macro to create a different
-     set of default tab stops.
-
-\1f
-File: groff.info,  Node: ms Displays and Keeps,  Next: ms Insertions,  Prev: Tabstops in ms,  Up: ms Body Text
-
-4.3.5.7 Displays and keeps
-..........................
-
-Use displays to show text-based examples or figures (such as code
-listings).
-
-   Displays turn off filling, so lines of code are displayed as-is
-without inserting 'br' requests in between each line.  Displays can be
-"kept" on a single page, or allowed to break across pages.
-
- -- Macro: .DS L
- -- Macro: .LD
- -- Macro: .DE
-     Left-justified display.  The '.DS L' call generates a page break,
-     if necessary, to keep the entire display on one page.  The 'LD'
-     macro allows the display to break across pages.  The 'DE' macro
-     ends the display.
-
- -- Macro: .DS I
- -- Macro: .ID
- -- Macro: .DE
-     Indents the display as defined by the 'DI' register.  The '.DS I'
-     call generates a page break, if necessary, to keep the entire
-     display on one page.  The 'ID' macro allows the display to break
-     across pages.  The 'DE' macro ends the display.
-
- -- Macro: .DS B
- -- Macro: .BD
- -- Macro: .DE
-     Sets a block-centered display: the entire display is
-     left-justified, but indented so that the longest line in the
-     display is centered on the page.  The '.DS B' call generates a page
-     break, if necessary, to keep the entire display on one page.  The
-     'BD' macro allows the display to break across pages.  The 'DE'
-     macro ends the display.
-
- -- Macro: .DS C
- -- Macro: .CD
- -- Macro: .DE
-     Sets a centered display: each line in the display is centered.  The
-     '.DS C' call generates a page break, if necessary, to keep the
-     entire display on one page.  The 'CD' macro allows the display to
-     break across pages.  The 'DE' macro ends the display.
-
- -- Macro: .DS R
- -- Macro: .RD
- -- Macro: .DE
-     Right-justifies each line in the display.  The '.DS R' call
-     generates a page break, if necessary, to keep the entire display on
-     one page.  The 'RD' macro allows the display to break across pages.
-     The 'DE' macro ends the display.
-
- -- Macro: .Ds
- -- Macro: .De
-     These two macros were formerly provided as aliases for 'DS' and
-     'DE', respectively.  They have been removed, and should no longer
-     be used.  The original implementations of 'DS' and 'DE' are
-     retained, and should be used instead.  X11 documents that actually
-     use 'Ds' and 'De' always load a specific macro file from the X11
-     distribution ('macros.t') that provides proper definitions for the
-     two macros.
-
-   On occasion, you may want to "keep" other text together on a page.
-For example, you may want to keep two paragraphs together, or a
-paragraph that refers to a table (or list, or other item) immediately
-following.  The 'ms' macros provide the 'KS' and 'KE' macros for this
-purpose.
-
- -- Macro: .KS
- -- Macro: .KE
-     The 'KS' macro begins a block of text to be kept on a single page,
-     and the 'KE' macro ends the block.
-
- -- Macro: .KF
- -- Macro: .KE
-     Specifies a "floating keep"; if the keep cannot fit on the current
-     page, 'groff' holds the contents of the keep and allows text
-     following the keep (in the source file) to fill in the remainder of
-     the current page.  When the page breaks, whether by an explicit
-     'bp' request or by reaching the end of the page, 'groff' prints the
-     floating keep at the top of the new page.  This is useful for
-     printing large graphics or tables that do not need to appear
-     exactly where specified.
-
-   You can also use the 'ne' request to force a page break if there is
-not enough vertical space remaining on the page.
-
-   Use the following macros to draw a box around a section of text (such
-as a display).
-
- -- Macro: .B1
- -- Macro: .B2
-     Marks the beginning and ending of text that is to have a box drawn
-     around it.  The 'B1' macro begins the box; the 'B2' macro ends it.
-     Text in the box is automatically placed in a diversion (keep).
-
-\1f
-File: groff.info,  Node: ms Insertions,  Next: Example multi-page table,  Prev: ms Displays and Keeps,  Up: ms Body Text
-
-4.3.5.8 Tables, figures, equations, and references
-..................................................
-
-The 'ms' macros support the standard 'groff' preprocessors: 'tbl',
-'pic', 'eqn', and 'refer'.  You mark text meant for preprocessors by
-enclosing it in pairs of tags as follows.
-
- -- Macro: .TS ['H']
- -- Macro: .TE
-     Denotes a table, to be processed by the 'tbl' preprocessor.  The
-     optional argument 'H' to 'TS' instructs 'groff' to create a running
-     header with the information up to the 'TH' macro.  'groff' prints
-     the header at the beginning of the table; if the table runs onto
-     another page, 'groff' prints the header on the next page as well.
-
- -- Macro: .PS
- -- Macro: .PE
-     Denotes a graphic, to be processed by the 'pic' preprocessor.  You
-     can create a 'pic' file by hand, using the AT&T 'pic' manual
-     available on the Web as a reference, or by using a graphics program
-     such as 'xfig'.
-
- -- Macro: .EQ [align]
- -- Macro: .EN
-     Denotes an equation, to be processed by the 'eqn' preprocessor.
-     The optional ALIGN argument can be 'C', 'L', or 'I' to center (the
-     default), left-justify, or indent the equation.
-
- -- Macro: .[
- -- Macro: .]
-     Denotes a reference, to be processed by the 'refer' preprocessor.
-     The GNU 'refer(1)' man page provides a comprehensive reference to
-     the preprocessor and the format of the bibliographic database.
-
-* Menu:
-
-* Example multi-page table::
-
-\1f
-File: groff.info,  Node: Example multi-page table,  Next: ms Footnotes,  Prev: ms Insertions,  Up: ms Body Text
-
-4.3.5.9 An example multi-page table
-...................................
-
-The following is an example of how to set up a table that may print
-across two or more pages.
-
-     .TS H
-     allbox expand;
-     cb | cb .
-     Text      ...of heading...
-     _
-     .TH
-     .T&
-     l | l .
-     ... the rest of the table follows...
-     .CW
-     .TE
-
-\1f
-File: groff.info,  Node: ms Footnotes,  Prev: Example multi-page table,  Up: ms Body Text
-
-4.3.5.10 Footnotes
-..................
-
-The 'ms' macro package has a flexible footnote system.  You can specify
-either numbered footnotes or symbolic footnotes (that is, using a marker
-such as a dagger symbol).
-
- -- String: \*[*]
-     Specifies the location of a numbered footnote marker in the text.
-
- -- Macro: .FS
- -- Macro: .FE
-     Specifies the text of the footnote.  The default action is to
-     create a numbered footnote; you can create a symbolic footnote by
-     specifying a "mark" glyph (such as '\[dg]' for the dagger glyph) in
-     the body text and as an argument to the 'FS' macro, followed by the
-     text of the footnote and the 'FE' macro.
-
-   You can control how 'groff' prints footnote numbers by changing the
-value of the 'FF' register.  *Note ms Document Control Registers::.
-
-   Footnotes can be safely used within keeps and displays, but you
-should avoid using numbered footnotes within floating keeps.  You can
-set a second '\**' marker between a '\**' and its corresponding '.FS'
-entry; as long as each 'FS' macro occurs _after_ the corresponding '\**'
-and the occurrences of '.FS' are in the same order as the corresponding
-occurrences of '\**'.
-
-\1f
-File: groff.info,  Node: ms Page Layout,  Next: Differences from AT&T ms,  Prev: ms Body Text,  Up: ms
-
-4.3.6 Page layout
------------------
-
-The default output from the 'ms' macros provides a minimalist page
-layout: it prints a single column, with the page number centered at the
-top of each page.  It prints no footers.
-
-   You can change the layout by setting the proper number registers and
-strings.
-
-* Menu:
-
-* ms Headers and Footers::
-* ms Margins::
-* ms Multiple Columns::
-* ms TOC::
-* ms Strings and Special Characters::
-
-\1f
-File: groff.info,  Node: ms Headers and Footers,  Next: ms Margins,  Prev: ms Page Layout,  Up: ms Page Layout
-
-4.3.6.1 Headers and footers
-...........................
-
-For documents that do not distinguish between odd and even pages, set
-the following strings:
-
- -- String: \*[LH]
- -- String: \*[CH]
- -- String: \*[RH]
-     Sets the left, center, and right headers.
-
- -- String: \*[LF]
- -- String: \*[CF]
- -- String: \*[RF]
-     Sets the left, center, and right footers.
-
-   For documents that need different information printed in the even and
-odd pages, use the following macros:
-
- -- Macro: .OH 'left'center'right'
- -- Macro: .EH 'left'center'right'
- -- Macro: .OF 'left'center'right'
- -- Macro: .EF 'left'center'right'
-     The 'OH' and 'EH' macros define headers for the odd and even pages;
-     the 'OF' and 'EF' macros define footers for the odd and even pages.
-     This is more flexible than defining the individual strings.
-
-     You can replace the quote (''') marks with any character not
-     appearing in the header or footer text.
-
-   To specify custom header and footer processing, redefine the
-following macros:
-
- -- Macro: .PT
- -- Macro: .HD
- -- Macro: .BT
-     The 'PT' macro defines a custom header; the 'BT' macro defines a
-     custom footer.  These macros must handle odd/even/first page
-     differences if necessary.
-
-     The 'HD' macro defines additional header processing to take place
-     after executing the 'PT' macro.
-
-\1f
-File: groff.info,  Node: ms Margins,  Next: ms Multiple Columns,  Prev: ms Headers and Footers,  Up: ms Page Layout
-
-4.3.6.2 Margins
-...............
-
-You control margins using a set of number registers.  *Note ms Document
-Control Registers::, for details.
-
-\1f
-File: groff.info,  Node: ms Multiple Columns,  Next: ms TOC,  Prev: ms Margins,  Up: ms Page Layout
-
-4.3.6.3 Multiple columns
-........................
-
-The 'ms' macros can set text in as many columns as do reasonably fit on
-the page.  The following macros are available; all of them force a page
-break if a multi-column mode is already set.  However, if the current
-mode is single-column, starting a multi-column mode does _not_ force a
-page break.
-
- -- Macro: .1C
-     Single-column mode.
-
- -- Macro: .2C
-     Two-column mode.
-
- -- Macro: .MC [width [gutter]]
-     Multi-column mode.  If you specify no arguments, it is equivalent
-     to the '2C' macro.  Otherwise, WIDTH is the width of each column
-     and GUTTER is the space between columns.  The 'MINGW' number
-     register controls the default gutter width.
-
-\1f
-File: groff.info,  Node: ms TOC,  Next: ms Strings and Special Characters,  Prev: ms Multiple Columns,  Up: ms Page Layout
-
-4.3.6.4 Creating a table of contents
-....................................
-
-The facilities in the 'ms' macro package for creating a table of
-contents are semi-automated at best.  Assuming that you want the table
-of contents to consist of the document's headings, you need to repeat
-those headings wrapped in 'XS' and 'XE' macros.
-
- -- Macro: .XS [page]
- -- Macro: .XA [page]
- -- Macro: .XE
-     These macros define a table of contents or an individual entry in
-     the table of contents, depending on their use.  The macros are very
-     simple; they cannot indent a heading based on its level.  The
-     easiest way to work around this is to add tabs to the table of
-     contents string.  The following is an example:
-
-          .NH 1
-          Introduction
-          .XS
-          Introduction
-          .XE
-          .LP
-          ...
-          .CW
-          .NH 2
-          Methodology
-          .XS
-          Methodology
-          .XE
-          .LP
-          ...
-
-     You can manually create a table of contents by beginning with the
-     'XS' macro for the first entry, specifying the page number for that
-     entry as the argument to 'XS'.  Add subsequent entries using the
-     'XA' macro, specifying the page number for that entry as the
-     argument to 'XA'.  The following is an example:
-
-          .XS 1
-          Introduction
-          .XA 2
-          A Brief History of the Universe
-          .XA 729
-          Details of Galactic Formation
-          ...
-          .XE
-
- -- Macro: .TC ['no']
-     Prints the table of contents on a new page, setting the page number
-     to *i* (Roman lowercase numeral one).  You should usually place
-     this macro at the end of the file, since 'groff' is a single-pass
-     formatter and can only print what has been collected up to the
-     point that the 'TC' macro appears.
-
-     The optional argument 'no' suppresses printing the title specified
-     by the string register 'TOC'.
-
- -- Macro: .PX ['no']
-     Prints the table of contents on a new page, using the current page
-     numbering sequence.  Use this macro to print a manually-generated
-     table of contents at the beginning of your document.
-
-     The optional argument 'no' suppresses printing the title specified
-     by the string register 'TOC'.
-
-   The 'Groff and Friends HOWTO' includes a 'sed' script that
-automatically inserts 'XS' and 'XE' macro entries after each heading in
-a document.
-
-   Altering the 'NH' macro to automatically build the table of contents
-is perhaps initially more difficult, but would save a great deal of time
-in the long run if you use 'ms' regularly.
-
-\1f
-File: groff.info,  Node: ms Strings and Special Characters,  Prev: ms TOC,  Up: ms Page Layout
-
-4.3.6.5 Strings and Special Characters
-......................................
-
-The 'ms' macros provide the following predefined strings.  You can
-change the string definitions to help in creating documents in languages
-other than English.
-
- -- String: \*[REFERENCES]
-     Contains the string printed at the beginning of the references
-     (bibliography) page.  The default is 'References'.
-
- -- String: \*[ABSTRACT]
-     Contains the string printed at the beginning of the abstract.  The
-     default is 'ABSTRACT'.
-
- -- String: \*[TOC]
-     Contains the string printed at the beginning of the table of
-     contents.
-
- -- String: \*[MONTH1]
- -- String: \*[MONTH2]
- -- String: \*[MONTH3]
- -- String: \*[MONTH4]
- -- String: \*[MONTH5]
- -- String: \*[MONTH6]
- -- String: \*[MONTH7]
- -- String: \*[MONTH8]
- -- String: \*[MONTH9]
- -- String: \*[MONTH10]
- -- String: \*[MONTH11]
- -- String: \*[MONTH12]
-     Prints the full name of the month in dates.  The default is
-     'January', 'February', etc.
-
-   The following special characters are available(1) (*note ms Strings
-and Special Characters-Footnote-1::):
-
- -- String: \*[-]
-     Prints an em dash.
-
- -- String: \*[Q]
- -- String: \*[U]
-     Prints typographer's quotes in troff, and plain quotes in nroff.
-     '\*Q' is the left quote and '\*U' is the right quote.
-
-   Improved accent marks are available in the 'ms' macros.
-
- -- Macro: .AM
-     Specify this macro at the beginning of your document to enable
-     extended accent marks and special characters.  This is a Berkeley
-     extension.
-
-     To use the accent marks, place them *after* the character being
-     accented.
-
-     Note that groff's native support for accents is superior to the
-     following definitions.
-
-   The following accent marks are available after invoking the 'AM'
-macro:
-
- -- String: \*[']
-     Acute accent.
-
- -- String: \*[`]
-     Grave accent.
-
- -- String: \*[^]
-     Circumflex.
-
- -- String: \*[,]
-     Cedilla.
-
- -- String: \*[~]
-     Tilde.
-
- -- String: \*[:]
-     Umlaut.
-
- -- String: \*[v]
-     Hacek.
-
- -- String: \*[_]
-     Macron (overbar).
-
- -- String: \*[.]
-     Underdot.
-
- -- String: \*[o]
-     Ring above.
-
-   The following are standalone characters available after invoking the
-'AM' macro:
-
- -- String: \*[?]
-     Upside-down question mark.
-
- -- String: \*[!]
-     Upside-down exclamation point.
-
- -- String: \*[8]
-     German ß ligature.
-
- -- String: \*[3]
-     Yogh.
-
- -- String: \*[Th]
-     Uppercase thorn.
-
- -- String: \*[th]
-     Lowercase thorn.
-
- -- String: \*[D-]
-     Uppercase eth.
-
- -- String: \*[d-]
-     Lowercase eth.
-
- -- String: \*[q]
-     Hooked o.
-
- -- String: \*[ae]
-     Lowercase æ ligature.
-
- -- String: \*[Ae]
-     Uppercase Æ ligature.
-
-\1f
-File: groff.info,  Node: ms Strings and Special Characters-Footnotes,  Up: ms Strings and Special Characters
-
-   (1) For an explanation what special characters are see *note Special
-Characters::.
-
-\1f
-File: groff.info,  Node: Differences from AT&T ms,  Next: Naming Conventions,  Prev: ms Page Layout,  Up: ms
-
-4.3.7 Differences from AT&T 'ms'
---------------------------------
-
-This section lists the (minor) differences between the 'groff -ms'
-macros and AT&T 'troff -ms' macros.
-
-   * The internals of 'groff -ms' differ from the internals of AT&T
-     'troff -ms'.  Documents that depend upon implementation details of
-     AT&T 'troff -ms' may not format properly with 'groff -ms'.
-
-   * The general error-handling policy of 'groff -ms' is to detect and
-     report errors, rather than silently to ignore them.
-
-   * 'groff -ms' does not work in compatibility mode (this is, with the
-     '-C' option).
-
-   * There is no special support for typewriter-like devices.
-
-   * 'groff -ms' does not provide cut marks.
-
-   * Multiple line spacing is not supported.  Use a larger vertical
-     spacing instead.
-
-   * Some UNIX 'ms' documentation says that the 'CW' and 'GW' number
-     registers can be used to control the column width and gutter width,
-     respectively.  These number registers are not used in 'groff -ms'.
-
-   * Macros that cause a reset (paragraphs, headings, etc.) may change
-     the indentation.  Macros that change the indentation do not
-     increment or decrement the indentation, but rather set it
-     absolutely.  This can cause problems for documents that define
-     additional macros of their own.  The solution is to use not the
-     'in' request but instead the 'RS' and 'RE' macros.
-
-   * To make 'groff -ms' use the default page offset (which also
-     specifies the left margin), the 'PO' register must stay undefined
-     until the first '-ms' macro is evaluated.  This implies that 'PO'
-     should not be used early in the document, unless it is changed
-     also: Remember that accessing an undefined register automatically
-     defines it.
-
- -- Register: \n[GS]
-     This number register is set to 1 by the 'groff -ms' macros, but it
-     is not used by the 'AT&T' 'troff -ms' macros.  Documents that need
-     to determine whether they are being formatted with 'AT&T' 'troff
-     -ms' or 'groff -ms' should use this number register.
-
-   Emulations of a few ancient Bell Labs macros can be re-enabled by
-calling the otherwise undocumented 'SC' section-header macro.  Calling
-'SC' enables 'UC' for marking up a product or application name, and the
-pair 'P1'/'P2' for surrounding code example displays.
-
-   These are not enabled by default because (a) they were not
-documented, in the original 'ms' manual, and (b) the 'P1' and 'UC'
-macros collide with different macros with the same names in the Berkeley
-version of 'ms'.
-
-   These 'groff' emulations are sufficient to give back the 1976
-Kernighan & Cherry paper 'Typsetting Mathematics - User's Guide' its
-section headings, and restore some text that had gone missing as
-arguments of undefined macros.  No warranty express or implied is given
-as to how well the typographic details these produce match the original
-Bell Labs macros.
-
-* Menu:
-
-* Missing ms Macros::
-* Additional ms Macros::
-
-\1f
-File: groff.info,  Node: Missing ms Macros,  Next: Additional ms Macros,  Prev: Differences from AT&T ms,  Up: Differences from AT&T ms
-
-4.3.7.1 'troff' macros not appearing in 'groff'
-...............................................
-
-Macros missing from 'groff -ms' are cover page macros specific to Bell
-Labs and Berkeley.  The macros known to be missing are:
-
-'.TM'
-     Technical memorandum; a cover sheet style
-
-'.IM'
-     Internal memorandum; a cover sheet style
-
-'.MR'
-     Memo for record; a cover sheet style
-
-'.MF'
-     Memo for file; a cover sheet style
-
-'.EG'
-     Engineer's notes; a cover sheet style
-
-'.TR'
-     Computing Science Tech Report; a cover sheet style
-
-'.OK'
-     Other keywords
-
-'.CS'
-     Cover sheet information
-
-'.MH'
-     A cover sheet macro
-
-\1f
-File: groff.info,  Node: Additional ms Macros,  Prev: Missing ms Macros,  Up: Differences from AT&T ms
-
-4.3.7.2 'groff' macros not appearing in AT&T 'troff'
-....................................................
-
-The 'groff -ms' macros have a few minor extensions compared to the AT&T
-'troff -ms' macros.
-
- -- Macro: .AM
-     Improved accent marks.  *Note ms Strings and Special Characters::,
-     for details.
-
- -- Macro: .DS I
-     Indented display.  The default behavior of AT&T 'troff -ms' was to
-     indent; the 'groff' default prints displays flush left with the
-     body text.
-
- -- Macro: .CW
-     Print text in 'constant width' (Courier) font.
-
- -- Macro: .IX
-     Indexing term (printed on standard error).  You can write a script
-     to capture and process an index generated in this manner.
-
-   The following additional number registers appear in 'groff -ms':
-
- -- Register: \n[MINGW]
-     Specifies a minimum space between columns (for multi-column
-     output); this takes the place of the 'GW' register that was
-     documented but apparently not implemented in AT&T 'troff'.
-
-   Several new string registers are available as well.  You can change
-these to handle (for example) the local language.  *Note ms Strings and
-Special Characters::, for details.
-
-\1f
-File: groff.info,  Node: Naming Conventions,  Prev: Differences from AT&T ms,  Up: ms
-
-4.3.8 Naming Conventions
-------------------------
-
-The following conventions are used for names of macros, strings and
-number registers.  External names available to documents that use the
-'groff -ms' macros contain only uppercase letters and digits.
-
-   Internally the macros are divided into modules; naming conventions
-are as follows:
-
-   * Names used only within one module are of the form MODULE'*'NAME.
-
-   * Names used outside the module in which they are defined are of the
-     form MODULE'@'NAME.
-
-   * Names associated with a particular environment are of the form
-     ENVIRONMENT':'NAME; these are used only within the 'par' module.
-
-   * NAME does not have a module prefix.
-
-   * Constructed names used to implement arrays are of the form
-     ARRAY'!'INDEX.
-
-   Thus the groff ms macros reserve the following names:
-
-   * Names containing the characters '*', '@', and ':'.
-
-   * Names containing only uppercase letters and digits.
-
-\1f
-File: groff.info,  Node: me,  Next: mm,  Prev: ms,  Up: Macro Packages
-
-4.4 'me'
-========
-
-See the 'meintro.me' and 'meref.me' documents in groff's 'doc'
-directory.
-
-\1f
-File: groff.info,  Node: mm,  Next: mom,  Prev: me,  Up: Macro Packages
-
-4.5 'mm'
-========
-
-See the 'groff_mm(7)' man page (type 'man groff_mm' at the command
-line).
-
-\1f
-File: groff.info,  Node: mom,  Prev: mm,  Up: Macro Packages
-
-4.6 'mom'
-=========
-
-See the 'groff_mom(7)' man page (type 'man groff_mom' at the command
-line), which gives a short overview and a link to its extensive
-documentation in HTML format.
-
-\1f
-File: groff.info,  Node: gtroff Reference,  Next: Preprocessors,  Prev: Macro Packages,  Up: Top
-
-5 'gtroff' Reference
-********************
-
-This chapter covers *all* of the facilities of 'gtroff'.  Users of macro
-packages may skip it if not interested in details.
-
-* Menu:
-
-* Text::
-* Measurements::
-* Expressions::
-* Identifiers::
-* Embedded Commands::
-* Registers::
-* Manipulating Filling and Adjusting::
-* Manipulating Hyphenation::
-* Manipulating Spacing::
-* Tabs and Fields::
-* Character Translations::
-* Troff and Nroff Mode::
-* Line Layout::
-* Line Control::
-* Page Layout::
-* Page Control::
-* Fonts and Symbols::
-* Sizes::
-* Strings::
-* Conditionals and Loops::
-* Writing Macros::
-* Page Motions::
-* Drawing Requests::
-* Traps::
-* Diversions::
-* Environments::
-* Suppressing output::
-* Colors::
-* I/O::
-* Postprocessor Access::
-* Miscellaneous::
-* Gtroff Internals::
-* Debugging::
-* Implementation Differences::
-
-\1f
-File: groff.info,  Node: Text,  Next: Measurements,  Prev: gtroff Reference,  Up: gtroff Reference
-
-5.1 Text
-========
-
-'gtroff' input files contain text with control commands interspersed
-throughout.  But, even without control codes, 'gtroff' still does
-several things with the input text:
-
-   * filling and adjusting
-
-   * adding additional space after sentences
-
-   * hyphenating
-
-   * inserting implicit line breaks
-
-* Menu:
-
-* Filling and Adjusting::
-* Hyphenation::
-* Sentences::
-* Tab Stops::
-* Implicit Line Breaks::
-* Input Conventions::
-* Input Encodings::
-
-\1f
-File: groff.info,  Node: Filling and Adjusting,  Next: Hyphenation,  Prev: Text,  Up: Text
-
-5.1.1 Filling and Adjusting
----------------------------
-
-When 'gtroff' reads text, it collects words from the input and fits as
-many of them together on one output line as it can.  This is known as
-"filling".
-
-   Once 'gtroff' has a "filled" line, it tries to "adjust" it.  This
-means it widens the spacing between words until the text reaches the
-right margin (in the default adjustment mode).  Extra spaces between
-words are preserved, but spaces at the end of lines are ignored.  Spaces
-at the front of a line cause a "break" (breaks are explained in *note
-Implicit Line Breaks::).
-
-   *Note Manipulating Filling and Adjusting::.
-
-\1f
-File: groff.info,  Node: Hyphenation,  Next: Sentences,  Prev: Filling and Adjusting,  Up: Text
-
-5.1.2 Hyphenation
------------------
-
-Since the odds are not great for finding a set of words, for every
-output line, which fit nicely on a line without inserting excessive
-amounts of space between words, 'gtroff' hyphenates words so that it can
-justify lines without inserting too much space between words.  It uses
-an internal hyphenation algorithm (a simplified version of the algorithm
-used within TeX) to indicate which words can be hyphenated and how to do
-so.  When a word is hyphenated, the first part of the word is added to
-the current filled line being output (with an attached hyphen), and the
-other portion is added to the next line to be filled.
-
-   *Note Manipulating Hyphenation::.
-
-\1f
-File: groff.info,  Node: Sentences,  Next: Tab Stops,  Prev: Hyphenation,  Up: Text
-
-5.1.3 Sentences
----------------
-
-Although it is often debated, some typesetting rules say there should be
-different amounts of space after various punctuation marks.  For
-example, the 'Chicago typsetting manual' says that a period at the end
-of a sentence should have twice as much space following it as would a
-comma or a period as part of an abbreviation.
-
-   'gtroff' does this by flagging certain characters (normally '!', '?',
-and '.') as "end-of-sentence" characters.  When 'gtroff' encounters one
-of these characters at the end of a line, it appends a normal space
-followed by a "sentence space" in the formatted output.  (This justifies
-one of the conventions mentioned in *note Input Conventions::.)
-
-   In addition, the following characters and symbols are treated
-transparently while handling end-of-sentence characters: '"', ''', ')',
-']', '*', '\[dg]', '\[rq]', and '\[cq]'.
-
-   See the 'cflags' request in *note Using Symbols::, for more details.
-
-   To prevent the insertion of extra space after an end-of-sentence
-character (at the end of a line), append '\&'.
-
-\1f
-File: groff.info,  Node: Tab Stops,  Next: Implicit Line Breaks,  Prev: Sentences,  Up: Text
-
-5.1.4 Tab Stops
----------------
-
-'gtroff' translates "tabulator characters", also called "tabs" (normally
-code point ASCII '0x09' or EBCDIC '0x05'), in the input into movements
-to the next tabulator stop.  These tab stops are initially located every
-half inch across the page.  Using this, simple tables can be made
-easily.  However, it can often be deceptive as the appearance (and
-width) of the text on a terminal and the results from 'gtroff' can vary
-greatly.
-
-   Also, a possible sticking point is that lines beginning with tab
-characters are still filled, again producing unexpected results.  For
-example, the following input
-
-           1          2          3
-                      4          5
-
-produces
-
-           1          2          3                     4          5
-
-   *Note Tabs and Fields::.
-
-\1f
-File: groff.info,  Node: Implicit Line Breaks,  Next: Input Conventions,  Prev: Tab Stops,  Up: Text
-
-5.1.5 Implicit Line Breaks
---------------------------
-
-An important concept in 'gtroff' is the "break".  When a break occurs,
-'gtroff' outputs the partially filled line (unjustified), and resumes
-collecting and filling text on the next output line.
-
-   There are several ways to cause a break in 'gtroff'.  A blank line
-not only causes a break, but it also outputs a one-line vertical space
-(effectively a blank line).  Note that this behaviour can be modified
-with the blank line macro request 'blm'.  *Note Blank Line Traps::.
-
-   A line that begins with a space causes a break and the space is
-output at the beginning of the next line.  Note that this space isn't
-adjusted, even in fill mode; however, the behaviour can be modified with
-the leading spaces macro request 'lsm'.  *Note Leading Spaces Traps::.
-
-   The end of file also causes a break - otherwise the last line of the
-document may vanish!
-
-   Certain requests also cause breaks, implicitly or explicitly.  This
-is discussed in *note Manipulating Filling and Adjusting::.
-
-\1f
-File: groff.info,  Node: Input Conventions,  Next: Input Encodings,  Prev: Implicit Line Breaks,  Up: Text
-
-5.1.6 Input Conventions
------------------------
-
-Since 'gtroff' does filling automatically, it is traditional in 'groff'
-not to try and type things in as nicely formatted paragraphs.  These are
-some conventions commonly used when typing 'gtroff' text:
-
-   * Break lines after punctuation, particularly at the end of a
-     sentence and in other logical places.  Keep separate phrases on
-     lines by themselves, as entire phrases are often added or deleted
-     when editing.
-
-   * Try to keep lines less than 40-60 characters, to allow space for
-     inserting more text.
-
-   * Do not try to do any formatting in a WYSIWYG manner (i.e., don't
-     try using spaces to get proper indentation).
-
-\1f
-File: groff.info,  Node: Input Encodings,  Prev: Input Conventions,  Up: Text
-
-5.1.7 Input Encodings
----------------------
-
-Currently, the following input encodings are available.
-
-cp1047
-     This input encoding works only on EBCDIC platforms (and vice versa,
-     the other input encodings don't work with EBCDIC); the file
-     'cp1047.tmac' is by default loaded at start-up.
-
-latin-1
-     This is the default input encoding on non-EBCDIC platforms; the
-     file 'latin1.tmac' is loaded at start-up.
-
-latin-2
-     To use this encoding, either say '.mso latin2.tmac' at the very
-     beginning of your document or use '-mlatin2' as a command line
-     argument for 'groff'.
-
-latin-5
-     For Turkish.  Either say '.mso latin9.tmac' at the very beginning
-     of your document or use '-mlatin9' as a command line argument for
-     'groff'.
-
-latin-9 (latin-0)
-     This encoding is intended (at least in Europe) to replace latin-1
-     encoding.  The main difference to latin-1 is that latin-9 contains
-     the Euro character.  To use this encoding, either say
-     '.mso latin9.tmac' at the very beginning of your document or use
-     '-mlatin9' as a command line argument for 'groff'.
-
-   Note that it can happen that some input encoding characters are not
-available for a particular output device.  For example, saying
-
-     groff -Tlatin1 -mlatin9 ...
-
-fails if you use the Euro character in the input.  Usually, this
-limitation is present only for devices that have a limited set of output
-glyphs (e.g. '-Tascii' and '-Tlatin1'); for other devices it is usually
-sufficient to install proper fonts that contain the necessary glyphs.
-
-   Due to the importance of the Euro glyph in Europe, the groff package
-now comes with a POSTSCRIPT font called 'freeeuro.pfa', which provides
-various glyph shapes for the Euro.  In other words, latin-9 encoding is
-supported for the '-Tps' device out of the box (latin-2 isn't).
-
-   By its very nature, '-Tutf8' supports all input encodings; '-Tdvi'
-has support for both latin-2 and latin-9 if the command line '-mec' is
-used also to load the file 'ec.tmac' (which flips to the EC fonts).
-
-\1f
-File: groff.info,  Node: Measurements,  Next: Expressions,  Prev: Text,  Up: gtroff Reference
-
-5.2 Measurements
-================
-
-'gtroff' (like many other programs) requires numeric parameters to
-specify various measurements.  Most numeric parameters(1) (*note
-Measurements-Footnote-1::) may have a "measurement unit" attached.
-These units are specified as a single character that immediately follows
-the number or expression.  Each of these units are understood, by
-'gtroff', to be a multiple of its "basic unit".  So, whenever a
-different measurement unit is specified 'gtroff' converts this into its
-"basic units".  This basic unit, represented by a 'u', is a device
-dependent measurement, which is quite small, ranging from 1/75th to
-1/72000th of an inch.  The values may be given as fractional numbers;
-however, fractional basic units are always rounded to integers.
-
-   Some of the measurement units are completely independent of any of
-the current settings (e.g. type size) of 'gtroff'.
-
-'i'
-     Inches.  An antiquated measurement unit still in use in certain
-     backwards countries with incredibly low-cost computer equipment.
-     One inch is equal to 2.54cm.
-
-'c'
-     Centimeters.  One centimeter is equal to 0.3937in.
-
-'p'
-     Points.  This is a typesetter's measurement used for measure type
-     size.  It is 72 points to an inch.
-
-'P'
-     Pica.  Another typesetting measurement.  6 Picas to an inch (and
-     12 points to a pica).
-
-'s'
-'z'
-     *Note Fractional Type Sizes::, for a discussion of these units.
-
-'f'
-     Fractions.  Value is 65536.  *Note Colors::, for usage.
-
-   The other measurements understood by 'gtroff' depend on settings
-currently in effect in 'gtroff'.  These are very useful for specifying
-measurements that should look proper with any size of text.
-
-'m'
-     Ems.  This unit is equal to the current font size in points.  So
-     called because it is _approximately_ the width of the letter 'm' in
-     the current font.
-
-'n'
-     Ens.  In 'groff', this is half of an em.
-
-'v'
-     Vertical space.  This is equivalent to the current line spacing.
-     *Note Sizes::, for more information about this.
-
-'M'
-     100ths of an em.
-
-* Menu:
-
-* Default Units::
-
-\1f
-File: groff.info,  Node: Measurements-Footnotes,  Up: Measurements
-
-   (1) those that specify vertical or horizontal motion or a type size
-
-\1f
-File: groff.info,  Node: Default Units,  Prev: Measurements,  Up: Measurements
-
-5.2.1 Default Units
--------------------
-
-Many requests take a default unit.  While this can be helpful at times,
-it can cause strange errors in some expressions.  For example, the line
-length request expects em units.  Here are several attempts to get a
-line length of 3.5 inches and their results:
-
-     3.5i      =>   3.5i
-     7/2       =>   0i
-     7/2i      =>   0i
-     (7 / 2)u  =>   0i
-     7i/2      =>   0.1i
-     7i/2u     =>   3.5i
-
-Everything is converted to basic units first.  In the above example it
-is assumed that 1i equals 240u, and 1m equals 10p (thus 1m equals 33u).
-The value 7i/2 is first handled as 7i/2m, then converted to 1680u/66u,
-which is 25u, and this is approximately 0.1i.  As can be seen, a scaling
-indicator after a closing parenthesis is simply ignored.
-
-   Thus, the safest way to specify measurements is to always attach a
-scaling indicator.  If you want to multiply or divide by a certain
-scalar value, use 'u' as the unit for that value.
-
-\1f
-File: groff.info,  Node: Expressions,  Next: Identifiers,  Prev: Measurements,  Up: gtroff Reference
-
-5.3 Expressions
-===============
-
-'gtroff' has most arithmetic operators common to other languages:
-
-   * Arithmetic: '+' (addition), '-' (subtraction), '/' (division), '*'
-     (multiplication), '%' (modulo).
-
-     'gtroff' only provides integer arithmetic.  The internal type used
-     for computing results is 'int', which is usually a 32bit signed
-     integer.
-
-   * Comparison: '<' (less than), '>' (greater than), '<=' (less than or
-     equal), '>=' (greater than or equal), '=' (equal), '==' (the same
-     as '=').
-
-   * Logical: '&' (logical and), ':' (logical or).
-
-   * Unary operators: '-' (negating, i.e. changing the sign), '+' (just
-     for completeness; does nothing in expressions), '!' (logical not;
-     this works only within 'if' and 'while' requests).(1)  (*note
-     Expressions-Footnote-1::) See below for the use of unary operators
-     in motion requests.
-
-     The logical not operator, as described above, works only within
-     'if' and 'while' requests.  Furthermore, it may appear only at the
-     beginning of an expression, and negates the entire expression.
-     Attempting to insert the '!' operator within the expression results
-     in a 'numeric expression expected' warning.  This maintains
-     compatibility with old versions of 'troff'.
-
-     Example:
-
-          .nr X 1
-          .nr Y 0
-          .\" This does not work as expected
-          .if (\n[X])&(!\n[Y]) .nop X only
-          .
-          .\" Use this construct instead
-          .if (\n[X]=1)&(\n[Y]=0) .nop X only
-
-   * Extrema: '>?' (maximum), '<?' (minimum).
-
-     Example:
-
-          .nr x 5
-          .nr y 3
-          .nr z (\n[x] >? \n[y])
-
-     The register 'z' now contains 5.
-
-   * Scaling: '(C;E)'.  Evaluate E using C as the default scaling
-     indicator.  If C is missing, ignore scaling indicators in the
-     evaluation of E.
-
-   Parentheses may be used as in any other language.  However, in
-'gtroff' they are necessary to ensure order of evaluation.  'gtroff' has
-no operator precedence; expressions are evaluated left to right.  This
-means that 'gtroff' evaluates '3+5*4' as if it were parenthesized like
-'(3+5)*4', not as '3+(5*4)', as might be expected.
-
-   For many requests that cause a motion on the page, the unary
-operators '+' and '-' work differently if leading an expression.  They
-then indicate a motion relative to the current position (down or up,
-respectively).
-
-   Similarly, a leading '|' operator indicates an absolute position.
-For vertical movements, it specifies the distance from the top of the
-page; for horizontal movements, it gives the distance from the beginning
-of the _input_ line.
-
-   '+' and '-' are also treated differently by the following requests
-and escapes: 'bp', 'in', 'll', 'lt', 'nm', 'nr', 'pl', 'pn', 'po', 'ps',
-'pvs', 'rt', 'ti', '\H', '\R', and '\s'.  Here, leading plus and minus
-signs indicate increments and decrements.
-
-   *Note Setting Registers::, for some examples.
-
- -- Escape: \B'anything'
-     Return 1 if ANYTHING is a valid numeric expression; or 0 if
-     ANYTHING is empty or not a valid numeric expression.
-
-   Due to the way arguments are parsed, spaces are not allowed in
-expressions, unless the entire expression is surrounded by parentheses.
-
-   *Note Request and Macro Arguments::, and *note Conditionals and
-Loops::.
-
-\1f
-File: groff.info,  Node: Expressions-Footnotes,  Up: Expressions
-
-   (1) Note that, for example, '!(-1)' evaluates to 'true' because
-'gtroff' treats both negative numbers and zero as 'false'.
-
-\1f
-File: groff.info,  Node: Identifiers,  Next: Embedded Commands,  Prev: Expressions,  Up: gtroff Reference
-
-5.4 Identifiers
-===============
-
-Like any other language, 'gtroff' has rules for properly formed
-"identifiers".  In 'gtroff', an identifier can be made up of almost any
-printable character, with the exception of the following characters:
-
-   * Whitespace characters (spaces, tabs, and newlines).
-
-   * Backspace (ASCII '0x08' or EBCDIC '0x16') and character code
-     '0x01'.
-
-   * The following input characters are invalid and are ignored if
-     'groff' runs on a machine based on ASCII, causing a warning message
-     of type 'input' (see *note Debugging::, for more details): '0x00',
-     '0x0B', '0x0D'-'0x1F', '0x80'-'0x9F'.
-
-     And here are the invalid input characters if 'groff' runs on an
-     EBCDIC host: '0x00', '0x08', '0x09', '0x0B', '0x0D'-'0x14',
-     '0x17'-'0x1F', '0x30'-'0x3F'.
-
-     Currently, some of these reserved codepoints are used internally,
-     thus making it non-trivial to extend 'gtroff' to cover Unicode or
-     other character sets and encodings that use characters of these
-     ranges.
-
-     Note that invalid characters are removed before parsing; an
-     identifier 'foo', followed by an invalid character, followed by
-     'bar' is treated as 'foobar'.
-
-   For example, any of the following is valid.
-
-     br
-     PP
-     (l
-     end-list
-     @_
-
-Note that identifiers longer than two characters with a closing bracket
-(']') in its name can't be accessed with escape sequences that expect an
-identifier as a parameter.  For example, '\[foo]]' accesses the glyph
-'foo', followed by ']', whereas '\C'foo]'' really asks for glyph 'foo]'.
-
-   To avoid problems with the 'refer' preprocessor, macro names should
-not start with '[' or ']'.  Due to backwards compatibility, everything
-after '.[' and '.]' is handled as a special argument to 'refer'.  For
-example, '.[foo' makes 'refer' to start a reference, using 'foo' as a
-parameter.
-
- -- Escape: \A'ident'
-     Test whether an identifier IDENT is valid in 'gtroff'.  It expands
-     to the character 1 or 0 according to whether its argument (usually
-     delimited by quotes) is or is not acceptable as the name of a
-     string, macro, diversion, number register, environment, or font.
-     It returns 0 if no argument is given.  This is useful for looking
-     up user input in some sort of associative table.
-
-          \A'end-list'
-              => 1
-
-   *Note Escapes::, for details on parameter delimiting characters.
-
-   Identifiers in 'gtroff' can be any length, but, in some contexts,
-'gtroff' needs to be told where identifiers end and text begins (and in
-different ways depending on their length):
-
-   * Single character.
-
-   * Two characters.  Must be prefixed with '(' in some situations.
-
-   * Arbitrary length ('gtroff' only).  Must be bracketed with '['
-     and ']' in some situations.  Any length identifier can be put in
-     brackets.
-
-   Unlike many other programming languages, undefined identifiers are
-silently ignored or expanded to nothing.  When 'gtroff' finds an
-undefined identifier, it emits a warning, doing the following:
-
-   * If the identifier is a string, macro, or diversion, 'gtroff'
-     defines it as empty.
-
-   * If the identifier is a number register, 'gtroff' defines it with a
-     value of 0.
-
-   *Note Warnings::., *note Interpolating Registers::, and *note
-Strings::.
-
-   Note that macros, strings, and diversions share the same name space.
-
-     .de xxx
-     .  nop foo
-     ..
-     .
-     .di xxx
-     bar
-     .br
-     .di
-     .
-     .xxx
-         => bar
-
-As can be seen in the previous example, 'gtroff' reuses the identifier
-'xxx', changing it from a macro to a diversion.  No warning is emitted!
-The contents of the first macro definition is lost.
-
-   *Note Interpolating Registers::, and *note Strings::.
-
-\1f
-File: groff.info,  Node: Embedded Commands,  Next: Registers,  Prev: Identifiers,  Up: gtroff Reference
-
-5.5 Embedded Commands
-=====================
-
-Most documents need more functionality beyond filling, adjusting and
-implicit line breaking.  In order to gain further functionality,
-'gtroff' allows commands to be embedded into the text, in two ways.
-
-   The first is a "request" that takes up an entire line, and does some
-large-scale operation (e.g. break lines, start new pages).
-
-   The other is an "escape" that can be usually embedded anywhere in the
-text; most requests can accept it even as an argument.  Escapes
-generally do more minor operations like sub- and superscripts, print a
-symbol, etc.
-
-* Menu:
-
-* Requests::
-* Macros::
-* Escapes::
-
-\1f
-File: groff.info,  Node: Requests,  Next: Macros,  Prev: Embedded Commands,  Up: Embedded Commands
-
-5.5.1 Requests
---------------
-
-A request line begins with a control character, which is either a single
-quote (''', the "no-break control character") or a period ('.', the
-normal "control character").  These can be changed; see *note Character
-Translations::, for details.  After this there may be optional tabs or
-spaces followed by an identifier, which is the name of the request.
-This may be followed by any number of space-separated arguments (_no_
-tabs here).
-
-   Since a control character followed by whitespace only is ignored, it
-is common practice to use this feature for structuring the source code
-of documents or macro packages.
-
-     .de foo
-     .  tm This is foo.
-     ..
-     .
-     .
-     .de bar
-     .  tm This is bar.
-     ..
-
-   Another possibility is to use the blank line macro request 'blm' by
-assigning an empty macro to it.
-
-     .de do-nothing
-     ..
-     .blm do-nothing  \" activate blank line macro
-
-     .de foo
-     .  tm This is foo.
-     ..
-
-
-     .de bar
-     .  tm This is bar.
-     ..
-
-     .blm             \" deactivate blank line macro
-
-   *Note Blank Line Traps::.
-
-   To begin a line with a control character without it being
-interpreted, precede it with '\&'.  This represents a zero width space,
-which means it does not affect the output.
-
-   In most cases the period is used as a control character.  Several
-requests cause a break implicitly; using the single quote control
-character prevents this.
-
- -- Register: \n[.br]
-     A read-only number register, which is set to 1 if a macro is called
-     with the normal control character (as defined with the 'cc'
-     request), and set to 0 otherwise.
-
-     This allows to reliably modify requests.
-
-          .als bp*orig bp
-          .de bp
-          .  tm before bp
-          .  ie \\n[.br] .bp*orig
-          .  el 'bp*orig
-          .  tm after bp
-          ..
-
-     Using this register outside of a macro makes no sense (it always
-     returns zero in such cases).
-
-     If a macro is called as a string (this is, using '\*'), the value
-     of the '.br' register is inherited from the calling macro.
-
-* Menu:
-
-* Request and Macro Arguments::
-
-\1f
-File: groff.info,  Node: Request and Macro Arguments,  Prev: Requests,  Up: Requests
-
-5.5.1.1 Request and Macro Arguments
-...................................
-
-Arguments to requests and macros are processed much like the shell: The
-line is split into arguments according to spaces.(1)  (*note Request and
-Macro Arguments-Footnote-1::)
-
-   An argument to a macro that is intended to contain spaces can either
-be enclosed in double quotes, or have the spaces "escaped" with
-backslashes.  This is _not_ true for requests.
-
-   Here are a few examples for a hypothetical macro 'uh':
-
-     .uh The Mouse Problem
-     .uh "The Mouse Problem"
-     .uh The\ Mouse\ Problem
-
-The first line is the 'uh' macro being called with 3 arguments, 'The',
-'Mouse', and 'Problem'.  The latter two have the same effect of calling
-the 'uh' macro with one argument, 'The Mouse Problem'.(2)  (*note
-Request and Macro Arguments-Footnote-2::)
-
-   A double quote that isn't preceded by a space doesn't start a macro
-argument.  If not closing a string, it is printed literally.
-
-   For example,
-
-     .xxx a" "b c" "de"fg"
-
-has the arguments 'a"', 'b c', 'de', and 'fg"'.  Don't rely on this
-obscure behaviour!
-
-   There are two possibilities to get a double quote reliably.
-
-   * Enclose the whole argument with double quotes and use two
-     consecutive double quotes to represent a single one.  This
-     traditional solution has the disadvantage that double quotes don't
-     survive argument expansion again if called in compatibility mode
-     (using the '-C' option of 'groff'):
-
-          .de xx
-          .  tm xx: `\\$1' `\\$2' `\\$3'
-          .
-          .  yy "\\$1" "\\$2" "\\$3"
-          ..
-          .de yy
-          .  tm yy: `\\$1' `\\$2' `\\$3'
-          ..
-          .xx A "test with ""quotes""" .
-              => xx: `A' `test with "quotes"' `.'
-              => yy: `A' `test with ' `quotes""'
-
-     If not in compatibility mode, you get the expected result
-
-          xx: `A' `test with "quotes"' `.'
-          yy: `A' `test with "quotes"' `.'
-
-     since 'gtroff' preserves the input level.
-
-   * Use the double quote glyph '\(dq'.  This works with and without
-     compatibility mode enabled since 'gtroff' doesn't convert '\(dq'
-     back to a double quote input character.
-
-     Note that this method won't work with UNIX 'troff' in general since
-     the glyph 'dq' isn't defined normally.
-
-   Double quotes in the 'ds' request are handled differently.  *Note
-Strings::, for more details.
-
-\1f
-File: groff.info,  Node: Request and Macro Arguments-Footnotes,  Up: Request and Macro Arguments
-
-   (1) Plan 9's 'troff' implementation also allows tabs for argument
-separation - 'gtroff' intentionally doesn't support this.
-
-   (2) The last solution, i.e., using escaped spaces, is "classical" in
-the sense that it can be found in most 'troff' documents.  Nevertheless,
-it is not optimal in all situations, since '\ ' inserts a fixed-width,
-non-breaking space character that can't stretch.  'gtroff' provides a
-different command '\~' to insert a stretchable, non-breaking space.
-
-\1f
-File: groff.info,  Node: Macros,  Next: Escapes,  Prev: Requests,  Up: Embedded Commands
-
-5.5.2 Macros
-------------
-
-'gtroff' has a "macro" facility for defining a series of lines that can
-be invoked by name.  They are called in the same manner as requests -
-arguments also may be passed basically in the same manner.
-
-   *Note Writing Macros::, and *note Request and Macro Arguments::.
-
-\1f
-File: groff.info,  Node: Escapes,  Prev: Macros,  Up: Embedded Commands
-
-5.5.3 Escapes
--------------
-
-Escapes may occur anywhere in the input to 'gtroff'.  They usually begin
-with a backslash and are followed by a single character, which indicates
-the function to be performed.  The escape character can be changed; see
-*note Character Translations::.
-
-   Escape sequences that require an identifier as a parameter accept
-three possible syntax forms.
-
-   * The next single character is the identifier.
-
-   * If this single character is an opening parenthesis, take the
-     following two characters as the identifier.  Note that there is no
-     closing parenthesis after the identifier.
-
-   * If this single character is an opening bracket, take all characters
-     until a closing bracket as the identifier.
-
-Examples:
-
-     \fB
-     \n(XX
-     \*[TeX]
-
-   Other escapes may require several arguments and/or some special
-format.  In such cases the argument is traditionally enclosed in single
-quotes (and quotes are always used in this manual for the definitions of
-escape sequences).  The enclosed text is then processed according to
-what that escape expects.  Example:
-
-     \l'1.5i\(bu'
-
-   Note that the quote character can be replaced with any other
-character that does not occur in the argument (even a newline or a space
-character) in the following escapes: '\o', '\b', and '\X'.  This makes
-e.g.
-
-     A caf
-     \o
-     e\'
-
-
-     in Paris
-       => A café in Paris
-
-possible, but it is better not to use this feature to avoid confusion.
-
-   The following escapes sequences (which are handled similarly to
-characters since they don't take a parameter) are also allowed as
-delimiters: '\%', '\ ', '\|', '\^', '\{', '\}', '\'', '\`', '\-', '\_',
-'\!', '\?', '\)', '\/', '\,', '\&', '\:', '\~', '\0', '\a', '\c', '\d',
-'\e', '\E', '\p', '\r', '\t', and '\u'.  Again, don't use these if
-possible.
-
-   No newline characters as delimiters are allowed in the following
-escapes: '\A', '\B', '\Z', '\C', and '\w'.
-
-   Finally, the escapes '\D', '\h', '\H', '\l', '\L', '\N', '\R', '\s',
-'\S', '\v', and '\x' can't use the following characters as delimiters:
-
-   * The digits '0'-'9'.
-
-   * The (single-character) operators '+-/*%<>=&:().'.
-
-   * The space, tab, and newline characters.
-
-   * All escape sequences except '\%', '\:', '\{', '\}', '\'', '\`',
-     '\-', '\_', '\!', '\/', '\c', '\e', and '\p'.
-
-   To have a backslash (actually, the current escape character) appear
-in the output several escapes are defined: '\\', '\e' or '\E'.  These
-are very similar, and only differ with respect to being used in macros
-or diversions.  *Note Character Translations::, for an exact description
-of those escapes.
-
-   *Note Implementation Differences::, *note Copy-in Mode::, and *note
-Diversions::, *note Identifiers::, for more information.
-
-* Menu:
-
-* Comments::
-
-\1f
-File: groff.info,  Node: Comments,  Prev: Escapes,  Up: Escapes
-
-5.5.3.1 Comments
-................
-
-Probably one of the most(1) (*note Comments-Footnote-1::) common forms
-of escapes is the comment.
-
- -- Escape: \"
-     Start a comment.  Everything to the end of the input line is
-     ignored.
-
-     This may sound simple, but it can be tricky to keep the comments
-     from interfering with the appearance of the final output.
-
-     If the escape is to the right of some text or a request, that
-     portion of the line is ignored, but the space leading up to it is
-     noticed by 'gtroff'.  This only affects the 'ds' and 'as' request
-     and its variants.
-
-     One possibly irritating idiosyncracy is that tabs must not be used
-     to line up comments.  Tabs are not treated as whitespace between
-     the request and macro arguments.
-
-     A comment on a line by itself is treated as a blank line, because
-     after eliminating the comment, that is all that remains:
-
-          Test
-          \" comment
-          Test
-
-     produces
-
-          Test
-
-          Test
-
-     To avoid this, it is common to start the line with '.\"', which
-     causes the line to be treated as an undefined request and thus
-     ignored completely.
-
-     Another commenting scheme seen sometimes is three consecutive
-     single quotes (''''') at the beginning of a line.  This works, but
-     'gtroff' gives a warning about an undefined macro (namely ''''),
-     which is harmless, but irritating.
-
- -- Escape: \#
-     To avoid all this, 'gtroff' has a new comment mechanism using the
-     '\#' escape.  This escape works the same as '\"' except that the
-     newline is also ignored:
-
-          Test
-          \# comment
-          Test
-
-     produces
-
-          Test Test
-
-     as expected.
-
- -- Request: .ig [end]
-     Ignore all input until 'gtroff' encounters the macro named '.'END
-     on a line by itself (or '..' if END is not specified).  This is
-     useful for commenting out large blocks of text:
-
-          text text text...
-          .ig
-          This is part of a large block
-          of text that has been
-          temporarily(?) commented out.
-
-          We can restore it simply by removing
-          the .ig request and the ".." at the
-          end of the block.
-          ..
-          More text text text...
-
-     produces
-
-          text text text...  More text text text...
-
-     Note that the commented-out block of text does not cause a break.
-
-     The input is read in copy-mode; auto-incremented registers _are_
-     affected (*note Auto-increment::).
-
-\1f
-File: groff.info,  Node: Comments-Footnotes,  Up: Comments
-
-   (1) Unfortunately, this is a lie.  But hopefully future 'gtroff'
-hackers will believe it ':-)'
-
-\1f
-File: groff.info,  Node: Registers,  Next: Manipulating Filling and Adjusting,  Prev: Embedded Commands,  Up: gtroff Reference
-
-5.6 Registers
-=============
-
-Numeric variables in 'gtroff' are called "registers".  There are a
-number of built-in registers, supplying anything from the date to
-details of formatting parameters.
-
-   *Note Identifiers::, for details on register identifiers.
-
-* Menu:
-
-* Setting Registers::
-* Interpolating Registers::
-* Auto-increment::
-* Assigning Formats::
-* Built-in Registers::
-
-\1f
-File: groff.info,  Node: Setting Registers,  Next: Interpolating Registers,  Prev: Registers,  Up: Registers
-
-5.6.1 Setting Registers
------------------------
-
-Define or set registers using the 'nr' request or the '\R' escape.
-
-   Although the following requests and escapes can be used to create
-registers, simply using an undefined register will cause it to be set to
-zero.
-
- -- Request: .nr ident value
- -- Escape: \R'ident value'
-     Set number register IDENT to VALUE.  If IDENT doesn't exist,
-     'gtroff' creates it.
-
-     The argument to '\R' usually has to be enclosed in quotes.  *Note
-     Escapes::, for details on parameter delimiting characters.
-
-     The '\R' escape doesn't produce an input token in 'gtroff'; in
-     other words, it vanishes completely after 'gtroff' has processed
-     it.
-
-     For example, the following two lines are equivalent:
-
-          .nr a (((17 + (3 * 4))) % 4)
-          \R'a (((17 + (3 * 4))) % 4)'
-              => 1
-
-     Note that the complete transparency of '\R' can cause surprising
-     effects if you use number registers like '.k', which get evaluated
-     at the time they are accessed.
-
-          .ll 1.6i
-          .
-          aaa bbb ccc ddd eee fff ggg hhh\R':k \n[.k]'
-          .tm :k == \n[:k]
-              => :k == 126950
-          .
-          .br
-          .
-          aaa bbb ccc ddd eee fff ggg hhh\h'0'\R':k \n[.k]'
-          .tm :k == \n[:k]
-              => :k == 15000
-
-     If you process this with the POSTSCRIPT device ('-Tps'), there will
-     be a line break eventually after 'ggg' in both input lines.
-     However, after processing the space after 'ggg', the partially
-     collected line is not overfull yet, so 'troff' continues to collect
-     input until it sees the space (or in this case, the newline) after
-     'hhh'.  At this point, the line is longer than the line length, and
-     the line gets broken.
-
-     In the first input line, since the '\R' escape leaves no traces,
-     the check for the overfull line hasn't been done yet at the point
-     where '\R' gets handled, and you get a value for the '.k' number
-     register that is even greater than the current line length.
-
-     In the second input line, the insertion of '\h'0'' to emit an
-     invisible zero-width space forces 'troff' to check the line length,
-     which in turn causes the start of a new output line.  Now '.k'
-     returns the expected value.
-
-   Both 'nr' and '\R' have two additional special forms to increment or
-decrement a register.
-
- -- Request: .nr ident +value
- -- Request: .nr ident -value
- -- Escape: \R'ident +value'
- -- Escape: \R'ident -value'
-     Increment (decrement) register IDENT by VALUE.
-
-          .nr a 1
-          .nr a +1
-          \na
-              => 2
-
-     To assign the negated value of a register to another register, some
-     care must be taken to get the desired result:
-
-          .nr a 7
-          .nr b 3
-          .nr a -\nb
-          \na
-              => 4
-          .nr a (-\nb)
-          \na
-              => -3
-
-     The surrounding parentheses prevent the interpretation of the minus
-     sign as a decrementing operator.  An alternative is to start the
-     assignment with a '0':
-
-          .nr a 7
-          .nr b -3
-          .nr a \nb
-          \na
-              => 4
-          .nr a 0\nb
-          \na
-              => -3
-
- -- Request: .rr ident
-     Remove number register IDENT.  If IDENT doesn't exist, the request
-     is ignored.
-
- -- Request: .rnn ident1 ident2
-     Rename number register IDENT1 to IDENT2.  If either IDENT1 or
-     IDENT2 doesn't exist, the request is ignored.
-
- -- Request: .aln ident1 ident2
-     Create an alias IDENT1 for a number register IDENT2.  The new name
-     and the old name are exactly equivalent.  If IDENT1 is undefined, a
-     warning of type 'reg' is generated, and the request is ignored.
-     *Note Debugging::, for information about warnings.
-
-\1f
-File: groff.info,  Node: Interpolating Registers,  Next: Auto-increment,  Prev: Setting Registers,  Up: Registers
-
-5.6.2 Interpolating Registers
------------------------------
-
-Numeric registers can be accessed via the '\n' escape.
-
- -- Escape: \ni
- -- Escape: \n(id
- -- Escape: \n[ident]
-     Interpolate number register with name IDENT (one-character name I,
-     two-character name ID).  This means that the value of the register
-     is expanded in-place while 'gtroff' is parsing the input line.
-     Nested assignments (also called indirect assignments) are possible.
-
-          .nr a 5
-          .nr as \na+\na
-          \n(as
-              => 10
-
-          .nr a1 5
-          .nr ab 6
-          .ds str b
-          .ds num 1
-          \n[a\n[num]]
-              => 5
-          \n[a\*[str]]
-              => 6
-
-\1f
-File: groff.info,  Node: Auto-increment,  Next: Assigning Formats,  Prev: Interpolating Registers,  Up: Registers
-
-5.6.3 Auto-increment
---------------------
-
-Number registers can also be auto-incremented and auto-decremented.  The
-increment or decrement value can be specified with a third argument to
-the 'nr' request or '\R' escape.
-
- -- Request: .nr ident value incr
-     Set number register IDENT to VALUE; the increment for
-     auto-incrementing is set to INCR.  Note that the '\R' escape
-     doesn't support this notation.
-
-   To activate auto-incrementing, the escape '\n' has a special syntax
-form.
-
- -- Escape: \n+i
- -- Escape: \n-i
- -- Escape: \n(+id
- -- Escape: \n(-id
- -- Escape: \n+(id
- -- Escape: \n-(id
- -- Escape: \n[+ident]
- -- Escape: \n[-ident]
- -- Escape: \n+[ident]
- -- Escape: \n-[ident]
-     Before interpolating, increment or decrement IDENT (one-character
-     name I, two-character name ID) by the auto-increment value as
-     specified with the 'nr' request (or the '\R' escape).  If no
-     auto-increment value has been specified, these syntax forms are
-     identical to '\n'.
-
-   For example,
-
-     .nr a 0 1
-     .nr xx 0 5
-     .nr foo 0 -2
-     \n+a, \n+a, \n+a, \n+a, \n+a
-     .br
-     \n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
-     .br
-     \n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
-
-produces
-
-     1, 2, 3, 4, 5
-     -5, -10, -15, -20, -25
-     -2, -4, -6, -8, -10
-
-   To change the increment value without changing the value of a
-register (A in the example), the following can be used:
-
-     .nr a \na 10
-
-\1f
-File: groff.info,  Node: Assigning Formats,  Next: Built-in Registers,  Prev: Auto-increment,  Up: Registers
-
-5.6.4 Assigning Formats
------------------------
-
-When a register is used, it is always textually replaced (or
-interpolated) with a representation of that number.  This output format
-can be changed to a variety of formats (numbers, Roman numerals, etc.).
-This is done using the 'af' request.
-
- -- Request: .af ident format
-     Change the output format of a number register.  The first argument
-     IDENT is the name of the number register to be changed, and the
-     second argument FORMAT is the output format.  The following output
-     formats are available:
-
-     '1'
-          Decimal arabic numbers.  This is the default format: 0, 1, 2,
-          3, ...
-
-     '0...0'
-          Decimal numbers with as many digits as specified.  So, '00'
-          would result in printing numbers as 01, 02, 03, ...
-
-          In fact, any digit instead of zero does work; 'gtroff' only
-          counts how many digits are specified.  As a consequence,
-          'af''s default format '1' could be specified as '0' also (and
-          exactly this is returned by the '\g' escape, see below).
-
-     'I'
-          Upper-case Roman numerals: 0, I, II, III, IV, ...
-
-     'i'
-          Lower-case Roman numerals: 0, i, ii, iii, iv, ...
-
-     'A'
-          Upper-case letters: 0, A, B, C, ..., Z, AA, AB, ...
-
-     'a'
-          Lower-case letters: 0, a, b, c, ..., z, aa, ab, ...
-
-     Omitting the number register format causes a warning of type
-     'missing'.  *Note Debugging::, for more details.  Specifying a
-     nonexistent format causes an error.
-
-     The following example produces '10, X, j, 010':
-
-          .nr a 10
-          .af a 1           \" the default format
-          \na,
-          .af a I
-          \na,
-          .af a a
-          \na,
-          .af a 001
-          \na
-
-     The largest number representable for the 'i' and 'I' formats is
-     39999 (or -39999); UNIX 'troff' uses 'z' and 'w' to represent 10000
-     and 5000 in Roman numerals, and so does 'gtroff'.  Currently, the
-     correct glyphs of Roman numeral five thousand and Roman numeral ten
-     thousand (Unicode code points 'U+2182' and 'U+2181', respectively)
-     are not available.
-
-     If IDENT doesn't exist, it is created.
-
-     Changing the output format of a read-only register causes an error.
-     It is necessary to first copy the register's value to a writeable
-     register, then apply the 'af' request to this other register.
-
- -- Escape: \gi
- -- Escape: \g(id
- -- Escape: \g[ident]
-     Return the current format of the specified register IDENT
-     (one-character name I, two-character name ID).  For example, '\ga'
-     after the previous example would produce the string '000'.  If the
-     register hasn't been defined yet, nothing is returned.
-
-\1f
-File: groff.info,  Node: Built-in Registers,  Prev: Assigning Formats,  Up: Registers
-
-5.6.5 Built-in Registers
-------------------------
-
-The following lists some built-in registers that are not described
-elsewhere in this manual.  Any register that begins with a '.' is
-read-only.  A complete listing of all built-in registers can be found in
-*note Register Index::.
-
-'\n[.F]'
-     This string-valued register returns the current input file name.
-
-'\n[.H]'
-     Horizontal resolution in basic units.
-
-'\n[.R]'
-     The number of number registers available.  This is always 10000 in
-     GNU 'troff'; it exists for backward compatibility.
-
-'\n[.U]'
-     If 'gtroff' is called with the '-U' command line option to activate
-     unsafe mode, the number register '.U' is set to 1, and to zero
-     otherwise.  *Note Groff Options::.
-
-'\n[.V]'
-     Vertical resolution in basic units.
-
-'\n[seconds]'
-     The number of seconds after the minute, normally in the range 0
-     to 59, but can be up to 61 to allow for leap seconds.  Initialized
-     at start-up of 'gtroff'.
-
-'\n[minutes]'
-     The number of minutes after the hour, in the range 0 to 59.
-     Initialized at start-up of 'gtroff'.
-
-'\n[hours]'
-     The number of hours past midnight, in the range 0 to 23.
-     Initialized at start-up of 'gtroff'.
-
-'\n[dw]'
-     Day of the week (1-7).
-
-'\n[dy]'
-     Day of the month (1-31).
-
-'\n[mo]'
-     Current month (1-12).
-
-'\n[year]'
-     The current year.
-
-'\n[yr]'
-     The current year minus 1900.  Unfortunately, the documentation of
-     UNIX Version 7's 'troff' had a year 2000 bug: It incorrectly
-     claimed that 'yr' contains the last two digits of the year.  That
-     claim has never been true of either AT&T 'troff' or GNU 'troff'.
-     Old 'troff' input that looks like this:
-
-          '\" The following line stopped working after 1999
-          This document was formatted in 19\n(yr.
-
-     can be corrected as follows:
-
-          This document was formatted in \n[year].
-
-     or, to be portable to older 'troff' versions, as follows:
-
-          .nr y4 1900+\n(yr
-          This document was formatted in \n(y4.
-
-'\n[.c]'
-'\n[c.]'
-     The current _input_ line number.  Register '.c' is read-only,
-     whereas 'c.' (a 'gtroff' extension) is writable also, affecting
-     both '.c' and 'c.'.
-
-'\n[ln]'
-     The current _output_ line number after a call to the 'nm' request
-     to activate line numbering.
-
-     *Note Miscellaneous::, for more information about line numbering.
-
-'\n[.x]'
-     The major version number.  For example, if the version number is
-     1.03 then '.x' contains '1'.
-
-'\n[.y]'
-     The minor version number.  For example, if the version number is
-     1.03 then '.y' contains '03'.
-
-'\n[.Y]'
-     The revision number of 'groff'.
-
-'\n[$$]'
-     The process ID of 'gtroff'.
-
-'\n[.g]'
-     Always 1.  Macros should use this to determine whether they are
-     running under GNU 'troff'.
-
-'\n[.A]'
-     If the command line option '-a' is used to produce an ASCII
-     approximation of the output, this is set to 1, zero otherwise.
-     *Note Groff Options::.
-
-'\n[.O]'
-     This read-only register is set to the suppression nesting level
-     (see escapes '\O').  *Note Suppressing output::.
-
-'\n[.P]'
-     This register is set to 1 (and to 0 otherwise) if the current page
-     is actually being printed, i.e., if the '-o' option is being used
-     to only print selected pages.  *Note Groff Options::, for more
-     information.
-
-'\n[.T]'
-     If 'gtroff' is called with the '-T' command line option, the number
-     register '.T' is set to 1, and zero otherwise.  *Note Groff
-     Options::.
-
-'\*[.T]'
-     A single read-write string register that contains the current
-     output device (for example, 'latin1' or 'ps').  This is the only
-     string register defined by 'gtroff'.
-
-\1f
-File: groff.info,  Node: Manipulating Filling and Adjusting,  Next: Manipulating Hyphenation,  Prev: Registers,  Up: gtroff Reference
-
-5.7 Manipulating Filling and Adjusting
-======================================
-
-Various ways of causing "breaks" were given in *note Implicit Line
-Breaks::.  The 'br' request likewise causes a break.  Several other
-requests also cause breaks, but implicitly.  These are 'bp', 'ce', 'cf',
-'fi', 'fl', 'in', 'nf', 'rj', 'sp', 'ti', and 'trf'.
-
- -- Request: .br
-     Break the current line, i.e., the input collected so far is emitted
-     without adjustment.
-
-     If the no-break control character is used, 'gtroff' suppresses the
-     break:
-
-          a
-          'br
-          b
-              => a b
-
-   Initially, 'gtroff' fills and adjusts text to both margins.  Filling
-can be disabled via the 'nf' request and re-enabled with the 'fi'
-request.
-
- -- Request: .fi
- -- Register: \n[.u]
-     Activate fill mode (which is the default).  This request implicitly
-     enables adjusting; it also inserts a break in the text currently
-     being filled.  The read-only number register '.u' is set to 1.
-
-     The fill mode status is associated with the current environment
-     (*note Environments::).
-
-     See *note Line Control::, for interaction with the '\c' escape.
-
- -- Request: .nf
-     Activate no-fill mode.  Input lines are output as-is, retaining
-     line breaks and ignoring the current line length.  This command
-     implicitly disables adjusting; it also causes a break.  The number
-     register '.u' is set to 0.
-
-     The fill mode status is associated with the current environment
-     (*note Environments::).
-
-     See *note Line Control::, for interaction with the '\c' escape.
-
- -- Request: .ad [mode]
- -- Register: \n[.j]
-     Set adjusting mode.
-
-     Activation and deactivation of adjusting is done implicitly with
-     calls to the 'fi' or 'nf' requests.
-
-     MODE can have one of the following values:
-
-     'l'
-          Adjust text to the left margin.  This produces what is
-          traditionally called ragged-right text.
-
-     'r'
-          Adjust text to the right margin, producing ragged-left text.
-
-     'c'
-          Center filled text.  This is different to the 'ce' request,
-          which only centers text without filling.
-
-     'b'
-     'n'
-          Justify to both margins.  This is the default used by
-          'gtroff'.
-
-     Finally, MODE can be the numeric argument returned by the '.j'
-     register.
-
-     Using 'ad' without argument is the same as saying '.ad \[.j]'.  In
-     particular, 'gtroff' adjusts lines in the same way it did before
-     adjusting was deactivated (with a call to 'na', say).  For example,
-     this input code
-
-          .de AD
-          .  br
-          .  ad \\$1
-          ..
-          .
-          .de NA
-          .  br
-          .  na
-          ..
-          .
-          textA
-          .AD r
-          .nr ad \n[.j]
-          textB
-          .AD c
-          textC
-          .NA
-          textD
-          .AD         \" back to centering
-          textE
-          .AD \n[ad]  \" back to right justifying
-          textF
-
-     produces the following output:
-
-          textA
-                                                              textB
-                                    textC
-          textD
-                                    textE
-                                                              textF
-
-     As just demonstrated, the current adjustment mode is available in
-     the read-only number register '.j'; it can be stored and
-     subsequently used to set adjustment.
-
-     The adjustment mode status is associated with the current
-     environment (*note Environments::).
-
- -- Request: .na
-     Disable adjusting.  This request won't change the current
-     adjustment mode: A subsequent call to 'ad' uses the previous
-     adjustment setting.
-
-     The adjustment mode status is associated with the current
-     environment (*note Environments::).
-
- -- Request: .brp
- -- Escape: \p
-     Adjust the current line and cause a break.
-
-     In most cases this produces very ugly results since 'gtroff'
-     doesn't have a sophisticated paragraph building algorithm (as TeX
-     have, for example); instead, 'gtroff' fills and adjusts a paragraph
-     line by line:
-
-          This is an uninteresting sentence.
-          This is an uninteresting sentence.\p
-          This is an uninteresting sentence.
-
-     is formatted as
-
-          This is  an uninteresting  sentence.   This  is an
-          uninteresting                            sentence.
-          This is an uninteresting sentence.
-
- -- Request: .ss word_space_size [sentence_space_size]
- -- Register: \n[.ss]
- -- Register: \n[.sss]
-     Change the size of a space between words.  It takes its units as
-     one twelfth of the space width parameter for the current font.
-     Initially both the WORD_SPACE_SIZE and SENTENCE_SPACE_SIZE are 12.
-     In fill mode, the values specify the minimum distance.
-
-     If two arguments are given to the 'ss' request, the second argument
-     sets the sentence space size.  If the second argument is not given,
-     sentence space size is set to WORD_SPACE_SIZE.  The sentence space
-     size is used in two circumstances: If the end of a sentence occurs
-     at the end of a line in fill mode, then both an inter-word space
-     and a sentence space are added; if two spaces follow the end of a
-     sentence in the middle of a line, then the second space is a
-     sentence space.  If a second argument is never given to the 'ss'
-     request, the behaviour of UNIX 'troff' is the same as that
-     exhibited by GNU 'troff'.  In GNU 'troff', as in UNIX 'troff', a
-     sentence should always be followed by either a newline or two
-     spaces.
-
-     The read-only number registers '.ss' and '.sss' hold the values of
-     the parameters set by the first and second arguments of the 'ss'
-     request.
-
-     The word space and sentence space values are associated with the
-     current environment (*note Environments::).
-
-     Contrary to AT&T 'troff', this request is _not_ ignored if a TTY
-     output device is used; the given values are then rounded down to a
-     multiple of 12 (*note Implementation Differences::).
-
-     The request is ignored if there is no parameter.
-
-     Another useful application of the 'ss' request is to insert
-     discardable horizontal space, i.e., space that is discarded at a
-     line break.  For example, paragraph-style footnotes could be
-     separated this way:
-
-          .ll 4.5i
-          1.\ This is the first footnote.\c
-          .ss 48
-          .nop
-          .ss 12
-          2.\ This is the second footnote.
-
-     The result:
-
-          1. This is the first footnote.        2. This
-          is the second footnote.
-
-     Note that the '\h' escape produces unbreakable space.
-
- -- Request: .ce [nnn]
- -- Register: \n[.ce]
-     Center text.  While the '.ad c' request also centers text, it fills
-     the text as well.  'ce' does not fill the text it affects.  This
-     request causes a break.  The number of lines still to be centered
-     is associated with the current environment (*note Environments::).
-
-     The following example demonstrates the differences.  Here the
-     input:
-
-          .ll 4i
-          .ce 1000
-          This is a small text fragment that shows the differences
-          between the `.ce' and the `.ad c' request.
-          .ce 0
-
-          .ad c
-          This is a small text fragment that shows the differences
-          between the `.ce' and the `.ad c' request.
-
-     And here the result:
-
-            This is a small text fragment that
-                   shows the differences
-          between the `.ce' and the `.ad c' request.
-
-            This is a small text fragment that
-          shows the differences between the `.ce'
-                  and the `.ad c' request.
-
-     With no arguments, 'ce' centers the next line of text.  NNN
-     specifies the number of lines to be centered.  If the argument is
-     zero or negative, centering is disabled.
-
-     The basic length for centering text is the line length (as set with
-     the 'll' request) minus the indentation (as set with the 'in'
-     request).  Temporary indentation is ignored.
-
-     As can be seen in the previous example, it is a common idiom to
-     turn on centering for a large number of lines, and to turn off
-     centering after text to be centered.  This is useful for any
-     request that takes a number of lines as an argument.
-
-     The '.ce' read-only number register contains the number of lines
-     remaining to be centered, as set by the 'ce' request.
-
- -- Request: .rj [nnn]
- -- Register: \n[.rj]
-     Justify unfilled text to the right margin.  Arguments are identical
-     to the 'ce' request.  The '.rj' read-only number register is the
-     number of lines to be right-justified as set by the 'rj' request.
-     This request causes a break.  The number of lines still to be
-     right-justified is associated with the current environment (*note
-     Environments::).
-
-\1f
-File: groff.info,  Node: Manipulating Hyphenation,  Next: Manipulating Spacing,  Prev: Manipulating Filling and Adjusting,  Up: gtroff Reference
-
-5.8 Manipulating Hyphenation
-============================
-
-Here a description of requests that influence hyphenation.
-
- -- Request: .hy [mode]
- -- Register: \n[.hy]
-     Enable hyphenation.  The request has an optional numeric argument,
-     MODE, to restrict hyphenation if necessary:
-
-     '1'
-          The default argument if MODE is omitted.  Hyphenate without
-          restrictions.  This is also the start-up value of 'gtroff'.
-
-     '2'
-          Do not hyphenate the last word on a page or column.
-
-     '4'
-          Do not hyphenate the last two characters of a word.
-
-     '8'
-          Do not hyphenate the first two characters of a word.
-
-     Values in the previous table are additive.  For example, the
-     value 12 causes 'gtroff' to neither hyphenate the last two nor the
-     first two characters of a word.
-
-     The current hyphenation restrictions can be found in the read-only
-     number register '.hy'.
-
-     The hyphenation mode is associated with the current environment
-     (*note Environments::).
-
- -- Request: .nh
-     Disable hyphenation (i.e., set the hyphenation mode to zero).  Note
-     that the hyphenation mode of the last call to 'hy' is not
-     remembered.
-
-     The hyphenation mode is associated with the current environment
-     (*note Environments::).
-
- -- Request: .hlm [nnn]
- -- Register: \n[.hlm]
- -- Register: \n[.hlc]
-     Set the maximum number of consecutive hyphenated lines to NNN.  If
-     this number is negative, there is no maximum.  The default value
-     is -1 if NNN is omitted.  This value is associated with the current
-     environment (*note Environments::).  Only lines output from a given
-     environment count towards the maximum associated with that
-     environment.  Hyphens resulting from '\%' are counted; explicit
-     hyphens are not.
-
-     The current setting of 'hlm' is available in the '.hlm' read-only
-     number register.  Also the number of immediately preceding
-     consecutive hyphenated lines are available in the read-only number
-     register '.hlc'.
-
- -- Request: .hw word1 word2 ...
-     Define how WORD1, WORD2, etc. are to be hyphenated.  The words must
-     be given with hyphens at the hyphenation points.  For example:
-
-          .hw in-sa-lub-rious
-
-     Besides the space character, any character whose hyphenation code
-     value is zero can be used to separate the arguments of 'hw' (see
-     the documentation for the 'hcode' request below for more
-     information).  In addition, this request can be used more than
-     once.
-
-     Hyphenation exceptions specified with the 'hw' request are
-     associated with the current hyphenation language; it causes an
-     error if there is no current hyphenation language.
-
-     This request is ignored if there is no parameter.
-
-     In old versions of 'troff' there was a limited amount of space to
-     store such information; fortunately, with 'gtroff', this is no
-     longer a restriction.
-
- -- Escape: \%
- -- Escape: \:
-     To tell 'gtroff' how to hyphenate words on the fly, use the '\%'
-     escape, also known as the "hyphenation character".  Preceding a
-     word with this character prevents it from being hyphenated; putting
-     it inside a word indicates to 'gtroff' that the word may be
-     hyphenated at that point.  Note that this mechanism only affects
-     that one occurrence of the word; to change the hyphenation of a
-     word for the entire document, use the 'hw' request.
-
-     The '\:' escape inserts a zero-width break point (that is, the word
-     breaks but without adding a hyphen).
-
-          ... check the /var/log/\:httpd/\:access_log file ...
-
-     Note that '\X' and '\Y' start a word, that is, the '\%' escape in
-     (say) '\X'...'\%foobar' and '\Y'...'\%foobar' no longer prevents
-     hyphenation but inserts a hyphenation point at the beginning of
-     'foobar'; most likely this isn't what you want to do.
-
- -- Request: .hc [char]
-     Change the hyphenation character to CHAR.  This character then
-     works the same as the '\%' escape, and thus, no longer appears in
-     the output.  Without an argument, 'hc' resets the hyphenation
-     character to be '\%' (the default) only.
-
-     The hyphenation character is associated with the current
-     environment (*note Environments::).
-
- -- Request: .hpf pattern_file
- -- Request: .hpfa pattern_file
- -- Request: .hpfcode a b [c d ...]
-     Read in a file of hyphenation patterns.  This file is searched for
-     in the same way as 'NAME.tmac' (or 'tmac.NAME') is searched for if
-     the '-mNAME' option is specified.
-
-     It should have the same format as (simple) TeX patterns files.
-     More specifically, the following scanning rules are implemented.
-
-        * A percent sign starts a comment (up to the end of the line)
-          even if preceded by a backslash.
-
-        * No support for 'digraphs' like '\$'.
-
-        * '^^XX' (X is 0-9 or a-f) and '^^X' (character code of X in the
-          range 0-127) are recognized; other use of '^' causes an error.
-
-        * No macro expansion.
-
-        * 'hpf' checks for the expression '\patterns{...}' (possibly
-          with whitespace before and after the braces).  Everything
-          between the braces is taken as hyphenation patterns.
-          Consequently, '{' and '}' are not allowed in patterns.
-
-        * Similarly, '\hyphenation{...}' gives a list of hyphenation
-          exceptions.
-
-        * '\endinput' is recognized also.
-
-        * For backwards compatibility, if '\patterns' is missing, the
-          whole file is treated as a list of hyphenation patterns (only
-          recognizing the '%' character as the start of a comment).
-
-     If no 'hpf' request is specified (either in the document or in a
-     macro package), 'gtroff' won't hyphenate at all.
-
-     The 'hpfa' request appends a file of patterns to the current list.
-
-     The 'hpfcode' request defines mapping values for character codes in
-     hyphenation patterns.  'hpf' or 'hpfa' then apply the mapping
-     (after reading the patterns) before replacing or appending them to
-     the current list of patterns.  Its arguments are pairs of character
-     codes - integers from 0 to 255.  The request maps character code A
-     to code B, code C to code D, and so on.  You can use character
-     codes that would be invalid otherwise.  By default, everything maps
-     to itself except letters 'A' to 'Z', which map to 'a' to 'z'.
-
-     The set of hyphenation patterns is associated with the current
-     language set by the 'hla' request.  The 'hpf' request is usually
-     invoked by the 'troffrc' or 'troffrc-end' file; by default,
-     'troffrc' loads hyphenation patterns and exceptions for American
-     English (in files 'hyphen.us' and 'hyphenex.us').
-
-     A second call to 'hpf' (for the same language) replaces the
-     hyphenation patterns with the new ones.
-
-     Invoking 'hpf' causes an error if there is no current hyphenation
-     language.
-
- -- Request: .hcode c1 code1 [c2 code2 ...]
-     Set the hyphenation code of character C1 to CODE1, that of C2 to
-     CODE2, etc.  A hyphenation code must be a single input character
-     (not a special character) other than a digit or a space.
-
-     To make hyphenation work, hyphenation codes must be set up.  At
-     start-up, groff only assigns hyphenation codes to the letters
-     'a'-'z' (mapped to themselves) and to the letters 'A'-'Z' (mapped
-     to 'a'-'z'); all other hyphenation codes are set to zero.
-     Normally, hyphenation patterns contain only lowercase letters,
-     which should be applied regardless of case.  In other words, the
-     words 'FOO' and 'Foo' should be hyphenated exactly the same way as
-     the word 'foo' is hyphenated, and this is what 'hcode' is good for.
-     Words that contain other letters won't be hyphenated properly if
-     the corresponding hyphenation patterns actually do contain them.
-     For example, the following 'hcode' requests are necessary to assign
-     hyphenation codes to the letters 'ÄäÖöÜüß' (this is needed for
-     German):
-
-          .hcode ä ä  Ä ä
-          .hcode ö ö  Ö ö
-          .hcode ü ü  Ü ü
-          .hcode ß ß
-
-     Without those assignments, groff treats German words like
-     'Kindergärten' (the plural form of 'kindergarten') as two
-     substrings 'kinderg' and 'rten' because the hyphenation code of the
-     umlaut a is zero by default.  There is a German hyphenation pattern
-     that covers 'kinder', so groff finds the hyphenation 'kin-der'.
-     The other two hyphenation points ('kin-der-gär-ten') are missed.
-
-     This request is ignored if it has no parameter.
-
- -- Request: .hym [length]
- -- Register: \n[.hym]
-     Set the (right) hyphenation margin to LENGTH.  If the current
-     adjustment mode is not 'b' or 'n', the line is not hyphenated if it
-     is shorter than LENGTH.  Without an argument, the hyphenation
-     margin is reset to its default value, which is 0.  The default
-     scaling indicator for this request is 'm'.  The hyphenation margin
-     is associated with the current environment (*note Environments::).
-
-     A negative argument resets the hyphenation margin to zero, emitting
-     a warning of type 'range'.
-
-     The current hyphenation margin is available in the '.hym' read-only
-     number register.
-
- -- Request: .hys [hyphenation_space]
- -- Register: \n[.hys]
-     Set the hyphenation space to HYPHENATION_SPACE.  If the current
-     adjustment mode is 'b' or 'n', don't hyphenate the line if it can
-     be justified by adding no more than HYPHENATION_SPACE extra space
-     to each word space.  Without argument, the hyphenation space is set
-     to its default value, which is 0.  The default scaling indicator
-     for this request is 'm'.  The hyphenation space is associated with
-     the current environment (*note Environments::).
-
-     A negative argument resets the hyphenation space to zero, emitting
-     a warning of type 'range'.
-
-     The current hyphenation space is available in the '.hys' read-only
-     number register.
-
- -- Request: .shc [glyph]
-     Set the "soft hyphen character" to GLYPH.(1)  (*note Manipulating
-     Hyphenation-Footnote-1::) If the argument is omitted, the soft
-     hyphen character is set to the default glyph '\(hy' (this is the
-     start-up value of 'gtroff' also).  The soft hyphen character is the
-     glyph that is inserted when a word is hyphenated at a line break.
-     If the soft hyphen character does not exist in the font of the
-     character immediately preceding a potential break point, then the
-     line is not broken at that point.  Neither definitions (specified
-     with the 'char' request) nor translations (specified with the 'tr'
-     request) are considered when finding the soft hyphen character.
-
- -- Request: .hla language
- -- Register: \n[.hla]
-     Set the current hyphenation language to the string LANGUAGE.
-     Hyphenation exceptions specified with the 'hw' request and
-     hyphenation patterns specified with the 'hpf' and 'hpfa' requests
-     are both associated with the current hyphenation language.  The
-     'hla' request is usually invoked by the 'troffrc' or the
-     'troffrc-end' files; 'troffrc' sets the default language to 'us'.
-
-     The current hyphenation language is available as a string in the
-     read-only number register '.hla'.
-
-          .ds curr_language \n[.hla]
-          \*[curr_language]
-              => us
-
-\1f
-File: groff.info,  Node: Manipulating Hyphenation-Footnotes,  Up: Manipulating Hyphenation
-
-   (1) "Soft hyphen character" is a misnomer since it is an output
-glyph.
-
-\1f
-File: groff.info,  Node: Manipulating Spacing,  Next: Tabs and Fields,  Prev: Manipulating Hyphenation,  Up: gtroff Reference
-
-5.9 Manipulating Spacing
-========================
-
- -- Request: .sp [distance]
-     Space downwards DISTANCE.  With no argument it advances 1 line.  A
-     negative argument causes 'gtroff' to move up the page the specified
-     distance.  If the argument is preceded by a '|' then 'gtroff' moves
-     that distance from the top of the page.  This request causes a line
-     break, and that adds the current line spacing to the space you have
-     just specified.  The default scaling indicator is 'v'.
-
-     For convenience you may wish to use the following macros to set the
-     height of the next line at a given distance from the top or the
-     bottom of the page:
-
-          .de y-from-top-down
-          .  sp |\\$1-\\n[.v]u
-          ..
-          .
-          .de y-from-bot-up
-          .  sp |\\n[.p]u-\\$1-\\n[.v]u
-          ..
-
-     A call to '.y-from-bot-up 10c' means that the bottom of the next
-     line will be at 10cm from the paper edge at the bottom.
-
-     If a vertical trap is sprung during execution of 'sp', the amount
-     of vertical space after the trap is discarded.  For example, this
-
-          .de xxx
-          ..
-          .
-          .wh 0 xxx
-          .
-          .pl 5v
-          foo
-          .sp 2
-          bar
-          .sp 50
-          baz
-
-     results in
-
-          foo
-
-
-          bar
-
-          baz
-
-     The amount of discarded space is available in the number register
-     '.trunc'.
-
-     To protect 'sp' against vertical traps, use the 'vpt' request:
-
-          .vpt 0
-          .sp -3
-          .vpt 1
-
- -- Request: .ls [nnn]
- -- Register: \n[.L]
-     Output NNN-1 blank lines after each line of text.  With no
-     argument, 'gtroff' uses the previous value before the last 'ls'
-     call.
-
-          .ls 2    \" This causes double-spaced output
-          .ls 3    \" This causes triple-spaced output
-          .ls      \" Again double-spaced
-
-     The line spacing is associated with the current environment (*note
-     Environments::).
-
-     The read-only number register '.L' contains the current line
-     spacing setting.
-
-   *Note Changing Type Sizes::, for the requests 'vs' and 'pvs' as
-alternatives to 'ls'.
-
- -- Escape: \x'spacing'
- -- Register: \n[.a]
-     Sometimes, extra vertical spacing is only needed occasionally, e.g.
-     to allow space for a tall construct (like an equation).  The '\x'
-     escape does this.  The escape is given a numerical argument,
-     usually enclosed in quotes (like '\x'3p''); the default scaling
-     indicator is 'v'.  If this number is positive extra vertical space
-     is inserted below the current line.  A negative number adds space
-     above.  If this escape is used multiple times on the same line, the
-     maximum of the values is used.
-
-     *Note Escapes::, for details on parameter delimiting characters.
-
-     The '.a' read-only number register contains the most recent
-     (nonnegative) extra vertical line space.
-
-     Using '\x' can be necessary in combination with the '\b' escape, as
-     the following example shows.
-
-          This is a test with the \[rs]b escape.
-          .br
-          This is a test with the \[rs]b escape.
-          .br
-          This is a test with \b'xyz'\x'-1m'\x'1m'.
-          .br
-          This is a test with the \[rs]b escape.
-          .br
-          This is a test with the \[rs]b escape.
-
-     produces
-
-          This is a test with the \b escape.
-          This is a test with the \b escape.
-                              x
-          This is a test with y.
-                              z
-          This is a test with the \b escape.
-          This is a test with the \b escape.
-
- -- Request: .ns
- -- Request: .rs
- -- Register: \n[.ns]
-     Enable "no-space mode".  In this mode, spacing (either via 'sp' or
-     via blank lines) is disabled.  The 'bp' request to advance to the
-     next page is also disabled, except if it is accompanied by a page
-     number (see *note Page Control::, for more information).  This mode
-     ends when actual text is output or the 'rs' request is encountered,
-     which ends no-space mode.  The read-only number register '.ns' is
-     set to 1 as long as no-space mode is active.
-
-     This request is useful for macros that conditionally insert
-     vertical space before the text starts (for example, a paragraph
-     macro could insert some space except when it is the first paragraph
-     after a section header).
-
-\1f
-File: groff.info,  Node: Tabs and Fields,  Next: Character Translations,  Prev: Manipulating Spacing,  Up: gtroff Reference
-
-5.10 Tabs and Fields
-====================
-
-A tab character (ASCII char 9, EBCDIC char 5) causes a horizontal
-movement to the next tab stop (much like it did on a typewriter).
-
- -- Escape: \t
-     This escape is a non-interpreted tab character.  In copy mode
-     (*note Copy-in Mode::), '\t' is the same as a real tab character.
-
- -- Request: .ta [n1 n2 ... nn T r1 r2 ... rn]
- -- Register: \n[.tabs]
-     Change tab stop positions.  This request takes a series of tab
-     specifiers as arguments (optionally divided into two groups with
-     the letter 'T') that indicate where each tab stop is to be
-     (overriding any previous settings).
-
-     Tab stops can be specified absolutely, i.e., as the distance from
-     the left margin.  For example, the following sets 6 tab stops every
-     one inch.
-
-          .ta 1i 2i 3i 4i 5i 6i
-
-     Tab stops can also be specified using a leading '+', which means
-     that the specified tab stop is set relative to the previous tab
-     stop.  For example, the following is equivalent to the previous
-     example.
-
-          .ta 1i +1i +1i +1i +1i +1i
-
-     'gtroff' supports an extended syntax to specify repeat values after
-     the 'T' mark (these values are always taken as relative) - this is
-     the usual way to specify tabs set at equal intervals.  The
-     following is, yet again, the same as the previous examples.  It
-     does even more since it defines an infinite number of tab stops
-     separated by one inch.
-
-          .ta T 1i
-
-     Now we are ready to interpret the full syntax given at the
-     beginning: Set tabs at positions N1, N2, ..., NN and then set tabs
-     at NN+R1, NN+R2, ..., NN+RN and then at NN+RN+R1, NN+RN+R2, ...,
-     NN+RN+RN, and so on.
-
-     Example: '4c +6c T 3c 5c 2c' is equivalent to '4c 10c 13c 18c 20c
-     23c 28c 30c ...'.
-
-     The material in each tab column (i.e., the column between two tab
-     stops) may be justified to the right or left or centered in the
-     column.  This is specified by appending 'R', 'L', or 'C' to the tab
-     specifier.  The default justification is 'L'.  Example:
-
-          .ta 1i 2iC 3iR
-
-     Some notes:
-
-        * The default unit of the 'ta' request is 'm'.
-
-        * A tab stop is converted into a non-breakable horizontal
-          movement that can be neither stretched nor squeezed.  For
-          example,
-
-               .ds foo a\tb\tc
-               .ta T 5i
-               \*[foo]
-
-          creates a single line, which is a bit longer than 10 inches (a
-          string is used to show exactly where the tab characters are).
-          Now consider the following:
-
-               .ds bar a\tb b\tc
-               .ta T 5i
-               \*[bar]
-
-          'gtroff' first converts the tab stops of the line into
-          unbreakable horizontal movements, then splits the line after
-          the second 'b' (assuming a sufficiently short line length).
-          Usually, this isn't what the user wants.
-
-        * Superfluous tabs (i.e., tab characters that do not correspond
-          to a tab stop) are ignored except the first one, which
-          delimits the characters belonging to the last tab stop for
-          right-justifying or centering.  Consider the following example
-
-               .ds Z   foo\tbar\tfoo
-               .ds ZZ  foo\tbar\tfoobar
-               .ds ZZZ foo\tbar\tfoo\tbar
-               .ta 2i 4iR
-               \*[Z]
-               .br
-               \*[ZZ]
-               .br
-               \*[ZZZ]
-               .br
-
-          which produces the following output:
-
-               foo                 bar              foo
-               foo                 bar           foobar
-               foo                 bar              foobar
-
-          The first line right-justifies the second 'foo' relative to
-          the tab stop.  The second line right-justifies 'foobar'.  The
-          third line finally right-justifies only 'foo' because of the
-          additional tab character, which marks the end of the string
-          belonging to the last defined tab stop.
-
-        * Tab stops are associated with the current environment (*note
-          Environments::).
-
-        * Calling 'ta' without an argument removes all tab stops.
-
-        * The start-up value of 'gtroff' is 'T 0.8i'.
-
-     The read-only number register '.tabs' contains a string
-     representation of the current tab settings suitable for use as an
-     argument to the 'ta' request.
-
-          .ds tab-string \n[.tabs]
-          \*[tab-string]
-              => T120u
-
-     The 'troff' version of the Plan 9 operating system uses register
-     '.S' for the same purpose.
-
- -- Request: .tc [fill-glyph]
-     Normally 'gtroff' fills the space to the next tab stop with
-     whitespace.  This can be changed with the 'tc' request.  With no
-     argument 'gtroff' reverts to using whitespace, which is the
-     default.  The value of this "tab repetition character" is
-     associated with the current environment (*note Environments::).(1)
-     (*note Tabs and Fields-Footnote-1::)
-
- -- Request: .linetabs n
- -- Register: \n[.linetabs]
-     If N is missing or not zero, enable "line-tabs" mode, or disable it
-     otherwise (the default).  In line-tabs mode, 'gtroff' computes tab
-     distances relative to the (current) output line instead of the
-     input line.
-
-     For example, the following code:
-
-          .ds x a\t\c
-          .ds y b\t\c
-          .ds z c
-          .ta 1i 3i
-          \*x
-          \*y
-          \*z
-
-     in normal mode, results in the output
-
-          a         b         c
-
-     in line-tabs mode, the same code outputs
-
-          a         b                   c
-
-     Line-tabs mode is associated with the current environment.  The
-     read-only register '.linetabs' is set to 1 if in line-tabs mode,
-     and 0 in normal mode.
-
-* Menu:
-
-* Leaders::
-* Fields::
-
-\1f
-File: groff.info,  Node: Tabs and Fields-Footnotes,  Up: Tabs and Fields
-
-   (1) "Tab repetition character" is a misnomer since it is an output
-glyph.
-
-\1f
-File: groff.info,  Node: Leaders,  Next: Fields,  Prev: Tabs and Fields,  Up: Tabs and Fields
-
-5.10.1 Leaders
---------------
-
-Sometimes it may may be desirable to use the 'tc' request to fill a
-particular tab stop with a given glyph (for example dots in a table of
-contents), but also normal tab stops on the rest of the line.  For this
-'gtroff' provides an alternate tab mechanism, called "leaders", which
-does just that.
-
-   A leader character (character code 1) behaves similarly to a tab
-character: It moves to the next tab stop.  The only difference is that
-for this movement, the fill glyph defaults to a period character and not
-to space.
-
- -- Escape: \a
-     This escape is a non-interpreted leader character.  In copy mode
-     (*note Copy-in Mode::), '\a' is the same as a real leader
-     character.
-
- -- Request: .lc [fill-glyph]
-     Declare the "leader repetition character".(1)  (*note
-     Leaders-Footnote-1::) Without an argument, leaders act the same as
-     tabs (i.e., using whitespace for filling).  'gtroff''s start-up
-     value is a dot ('.').  The value of the leader repetition character
-     is associated with the current environment (*note Environments::).
-
-   For a table of contents, to name an example, tab stops may be defined
-so that the section number is one tab stop, the title is the second with
-the remaining space being filled with a line of dots, and then the page
-number slightly separated from the dots.
-
-     .ds entry 1.1\tFoo\a\t12
-     .lc .
-     .ta 1i 5i +.25i
-     \*[entry]
-
-This produces
-
-     1.1  Foo..........................................  12
-
-\1f
-File: groff.info,  Node: Leaders-Footnotes,  Up: Leaders
-
-   (1) "Leader repetition character" is a misnomer since it is an output
-glyph.
-
-\1f
-File: groff.info,  Node: Fields,  Prev: Leaders,  Up: Tabs and Fields
-
-5.10.2 Fields
--------------
-
-"Fields" are a more general way of laying out tabular data.  A field is
-defined as the data between a pair of "delimiting characters".  It
-contains substrings that are separated by "padding characters".  The
-width of a field is the distance on the _input_ line from the position
-where the field starts to the next tab stop.  A padding character
-inserts stretchable space similar to TeX's '\hss' command (thus it can
-even be negative) to make the sum of all substring lengths plus the
-stretchable space equal to the field width.  If more than one padding
-character is inserted, the available space is evenly distributed among
-them.
-
- -- Request: .fc [delim-char [padding-char]]
-     Define a delimiting and a padding character for fields.  If the
-     latter is missing, the padding character defaults to a space
-     character.  If there is no argument at all, the field mechanism is
-     disabled (which is the default).  Note that contrary to e.g. the
-     tab repetition character, delimiting and padding characters are
-     _not_ associated to the current environment (*note Environments::).
-
-     Example:
-
-          .fc # ^
-          .ta T 3i
-          #foo^bar^smurf#
-          .br
-          #foo^^bar^smurf#
-
-     and here the result:
-
-          foo         bar          smurf
-          foo            bar       smurf
-
-\1f
-File: groff.info,  Node: Character Translations,  Next: Troff and Nroff Mode,  Prev: Tabs and Fields,  Up: gtroff Reference
-
-5.11 Character Translations
-===========================
-
-The control character ('.') and the no-break control character (''') can
-be changed with the 'cc' and 'c2' requests, respectively.
-
- -- Request: .cc [c]
-     Set the control character to C.  With no argument the default
-     control character '.' is restored.  The value of the control
-     character is associated with the current environment (*note
-     Environments::).
-
- -- Request: .c2 [c]
-     Set the no-break control character to C.  With no argument the
-     default control character ''' is restored.  The value of the
-     no-break control character is associated with the current
-     environment (*note Environments::).
-
-   *Note Requests::.
-
- -- Request: .eo
-     Disable the escape mechanism completely.  After executing this
-     request, the backslash character '\' no longer starts an escape
-     sequence.
-
-     This request can be very helpful in writing macros since it is not
-     necessary then to double the escape character.  Here an example:
-
-          .\" This is a simplified version of the
-          .\" .BR request from the man macro package
-          .eo
-          .de BR
-          .  ds result \&
-          .  while (\n[.$] >= 2) \{\
-          .    as result \fB\$1\fR\$2
-          .    shift 2
-          .  \}
-          .  if \n[.$] .as result \fB\$1
-          \*[result]
-          .  ft R
-          ..
-          .ec
-
- -- Request: .ec [c]
-     Set the escape character to C.  With no argument the default escape
-     character '\' is restored.  It can be also used to re-enable the
-     escape mechanism after an 'eo' request.
-
-     Note that changing the escape character globally likely breaks
-     macro packages since 'gtroff' has no mechanism to 'intern' macros,
-     i.e., to convert a macro definition into an internal form that is
-     independent of its representation (TeX has this mechanism).  If a
-     macro is called, it is executed literally.
-
- -- Request: .ecs
- -- Request: .ecr
-     The 'ecs' request saves the current escape character in an internal
-     register.  Use this request in combination with the 'ec' request to
-     temporarily change the escape character.
-
-     The 'ecr' request restores the escape character saved with 'ecs'.
-     Without a previous call to 'ecs', this request sets the escape
-     character to '\'.
-
- -- Escape: \\
- -- Escape: \e
- -- Escape: \E
-     Print the current escape character (which is the backslash
-     character '\' by default).
-
-     '\\' is a 'delayed' backslash; more precisely, it is the default
-     escape character followed by a backslash, which no longer has
-     special meaning due to the leading escape character.  It is _not_
-     an escape sequence in the usual sense!  In any unknown escape
-     sequence '\X' the escape character is ignored and X is printed.
-     But if X is equal to the current escape character, no warning is
-     emitted.
-
-     As a consequence, only at top-level or in a diversion a backslash
-     glyph is printed; in copy-in mode, it expands to a single
-     backslash, which then combines with the following character to an
-     escape sequence.
-
-     The '\E' escape differs from '\e' by printing an escape character
-     that is not interpreted in copy mode.  Use this to define strings
-     with escapes that work when used in copy mode (for example, as a
-     macro argument).  The following example defines strings to begin
-     and end a superscript:
-
-          .ds { \v'-.3m'\s'\En[.s]*60/100'
-          .ds } \s0\v'.3m'
-
-     Another example to demonstrate the differences between the various
-     escape sequences, using a strange escape character, '-'.
-
-          .ec -
-          .de xxx
-          --A'123'
-          ..
-          .xxx
-              => -A'foo'
-
-     The result is surprising for most users, expecting '1' since 'foo'
-     is a valid identifier.  What has happened?  As mentioned above, the
-     leading escape character makes the following character ordinary.
-     Written with the default escape character the sequence '--' becomes
-     '\-' - this is the minus sign.
-
-     If the escape character followed by itself is a valid escape
-     sequence, only '\E' yields the expected result:
-
-          .ec -
-          .de xxx
-          -EA'123'
-          ..
-          .xxx
-              => 1
-
- -- Escape: \.
-     Similar to '\\', the sequence '\.' isn't a real escape sequence.
-     As before, a warning message is suppressed if the escape character
-     is followed by a dot, and the dot itself is printed.
-
-          .de foo
-          .  nop foo
-          .
-          .  de bar
-          .    nop bar
-          \\..
-          .
-          ..
-          .foo
-          .bar
-              => foo bar
-
-     The first backslash is consumed while the macro is read, and the
-     second is swallowed while executing macro 'foo'.
-
-   A "translation" is a mapping of an input character to an output
-glyph.  The mapping occurs at output time, i.e., the input character
-gets assigned the metric information of the mapped output character
-right before input tokens are converted to nodes (*note Gtroff
-Internals::, for more on this process).
-
- -- Request: .tr abcd...
- -- Request: .trin abcd...
-     Translate character A to glyph B, character C to glyph D, etc.  If
-     there is an odd number of arguments, the last one is translated to
-     an unstretchable space ('\ ').
-
-     The 'trin' request is identical to 'tr', but when you unformat a
-     diversion with 'asciify' it ignores the translation.  *Note
-     Diversions::, for details about the 'asciify' request.
-
-     Some notes:
-
-        * Special characters ('\(XX', '\[XXX]', '\C'XXX'', '\'', '\`',
-          '\-', '\_'), glyphs defined with the 'char' request, and
-          numbered glyphs ('\N'XXX'') can be translated also.
-
-        * The '\e' escape can be translated also.
-
-        * Characters can be mapped onto the '\%' and '\~' escapes (but
-          '\%' and '\~' can't be mapped onto another glyph).
-
-        * The following characters can't be translated: space (with one
-          exception, see below), backspace, newline, leader (and '\a'),
-          tab (and '\t').
-
-        * Translations are not considered for finding the soft hyphen
-          character set with the 'shc' request.
-
-        * The pair 'C\&' (this is an arbitrary character C followed by
-          the zero width space character) maps this character to
-          nothing.
-
-               .tr a\&
-               foo bar
-                   => foo br
-
-          It is even possible to map the space character to nothing:
-
-               .tr aa \&
-               foo bar
-                   => foobar
-
-          As shown in the example, the space character can't be the
-          first character/glyph pair as an argument of 'tr'.
-          Additionally, it is not possible to map the space character to
-          any other glyph; requests like '.tr aa x' undo '.tr aa \&'
-          instead.
-
-          If justification is active, lines are justified in spite of
-          the 'empty' space character (but there is no minimal distance,
-          i.e. the space character, between words).
-
-        * After an output glyph has been constructed (this happens at
-          the moment immediately before the glyph is appended to an
-          output glyph list, either by direct output, in a macro,
-          diversion, or string), it is no longer affected by 'tr'.
-
-        * Translating character to glyphs where one of them or both are
-          undefined is possible also; 'tr' does not check whether the
-          entities in its argument do exist.
-
-          *Note Gtroff Internals::.
-
-        * 'troff' no longer has a hard-coded dependency on Latin-1; all
-          'charXXX' entities have been removed from the font description
-          files.  This has a notable consequence that shows up in
-          warnings like 'can't find character with input code XXX' if
-          the 'tr' request isn't handled properly.
-
-          Consider the following translation:
-
-               .tr éÉ
-
-          This maps input character 'é' onto glyph 'É', which is
-          identical to glyph 'char201'.  But this glyph intentionally
-          doesn't exist!  Instead, '\[char201]' is treated as an input
-          character entity and is by default mapped onto '\['E]', and
-          'gtroff' doesn't handle translations of translations.
-
-          The right way to write the above translation is
-
-               .tr é\['E]
-
-          In other words, the first argument of 'tr' should be an input
-          character or entity, and the second one a glyph entity.
-
-        * Without an argument, the 'tr' request is ignored.
-
- -- Request: .trnt abcd...
-     'trnt' is the same as the 'tr' request except that the translations
-     do not apply to text that is transparently throughput into a
-     diversion with '\!'.  *Note Diversions::, for more information.
-
-     For example,
-
-          .tr ab
-          .di x
-          \!.tm a
-          .di
-          .x
-
-     prints 'b' to the standard error stream; if 'trnt' is used instead
-     of 'tr' it prints 'a'.
-
-\1f
-File: groff.info,  Node: Troff and Nroff Mode,  Next: Line Layout,  Prev: Character Translations,  Up: gtroff Reference
-
-5.12 Troff and Nroff Mode
-=========================
-
-Originally, 'nroff' and 'troff' were two separate programs, the former
-for TTY output, the latter for everything else.  With GNU 'troff', both
-programs are merged into one executable, sending its output to a device
-driver ('grotty' for TTY devices, 'grops' for POSTSCRIPT, etc.) which
-interprets the intermediate output of 'gtroff'.  For UNIX 'troff' it
-makes sense to talk about "Nroff mode" and "Troff mode" since the
-differences are hardcoded.  For GNU 'troff', this distinction is not
-appropriate because 'gtroff' simply takes the information given in the
-font files for a particular device without handling requests specially
-if a TTY output device is used.
-
-   Usually, a macro package can be used with all output devices.
-Nevertheless, it is sometimes necessary to make a distinction between
-TTY and non-TTY devices: 'gtroff' provides two built-in conditions 'n'
-and 't' for the 'if', 'ie', and 'while' requests to decide whether
-'gtroff' shall behave like 'nroff' or like 'troff'.
-
- -- Request: .troff
-     Make the 't' built-in condition true (and the 'n' built-in
-     condition false) for 'if', 'ie', and 'while' conditional requests.
-     This is the default if 'gtroff' (_not_ 'groff') is started with the
-     '-R' switch to avoid loading of the start-up files 'troffrc' and
-     'troffrc-end'.  Without '-R', 'gtroff' stays in troff mode if the
-     output device is not a TTY (e.g. 'ps').
-
- -- Request: .nroff
-     Make the 'n' built-in condition true (and the 't' built-in
-     condition false) for 'if', 'ie', and 'while' conditional requests.
-     This is the default if 'gtroff' uses a TTY output device; the code
-     for switching to nroff mode is in the file 'tty.tmac', which is
-     loaded by the start-up file 'troffrc'.
-
-   *Note Conditionals and Loops::, for more details on built-in
-conditions.
-
-\1f
-File: groff.info,  Node: Line Layout,  Next: Line Control,  Prev: Troff and Nroff Mode,  Up: gtroff Reference
-
-5.13 Line Layout
-================
-
-The following drawing shows the dimensions that 'gtroff' uses for
-placing a line of output onto the page.  They are labeled with the
-request that manipulates each dimension.
-
-          -->| in |<--
-             |<-----------ll------------>|
-        +----+----+----------------------+----+
-        |    :    :                      :    |
-        +----+----+----------------------+----+
-     -->| po |<--
-        |<--------paper width---------------->|
-
-These dimensions are:
-
-'po'
-     "Page offset" - this is the leftmost position of text on the final
-     output, defining the "left margin".
-
-'in'
-     "Indentation" - this is the distance from the left margin where
-     text is printed.
-
-'ll'
-     "Line length" - this is the distance from the left margin to right
-     margin.
-
-   A simple demonstration:
-
-     .ll 3i
-     This is text without indentation.
-     The line length has been set to 3\~inch.
-     .in +.5i
-     .ll -.5i
-     Now the left and right margins are both increased.
-     .in
-     .ll
-     Calling .in and .ll without parameters restore
-     the previous values.
-
-   Result:
-
-     This  is text without indenta-
-     tion.   The  line  length  has
-     been set to 3 inch.
-          Now   the  left  and
-          right  margins   are
-          both increased.
-     Calling  .in  and  .ll without
-     parameters restore the  previ-
-     ous values.
-
- -- Request: .po [offset]
- -- Request: .po +offset
- -- Request: .po -offset
- -- Register: \n[.o]
-     Set horizontal page offset to OFFSET (or increment or decrement the
-     current value by OFFSET).  Note that this request does not cause a
-     break, so changing the page offset in the middle of text being
-     filled may not yield the expected result.  The initial value is 1i.
-     For TTY output devices, it is set to 0 in the startup file
-     'troffrc'; the default scaling indicator is 'm' (and not 'v' as
-     incorrectly documented in the original UNIX troff manual).
-
-     The current page offset can be found in the read-only number
-     register '.o'.
-
-     If 'po' is called without an argument, the page offset is reset to
-     the previous value before the last call to 'po'.
-
-          .po 3i
-          \n[.o]
-              => 720
-          .po -1i
-          \n[.o]
-              => 480
-          .po
-          \n[.o]
-              => 720
-
- -- Request: .in [indent]
- -- Request: .in +indent
- -- Request: .in -indent
- -- Register: \n[.i]
-     Set indentation to INDENT (or increment or decrement the current
-     value by INDENT).  This request causes a break.  Initially, there
-     is no indentation.
-
-     If 'in' is called without an argument, the indentation is reset to
-     the previous value before the last call to 'in'.  The default
-     scaling indicator is 'm'.
-
-     The indentation is associated with the current environment (*note
-     Environments::).
-
-     If a negative indentation value is specified (which is not
-     allowed), 'gtroff' emits a warning of type 'range' and sets the
-     indentation to zero.
-
-     The effect of 'in' is delayed until a partially collected line (if
-     it exists) is output.  A temporary indentation value is reset to
-     zero also.
-
-     The current indentation (as set by 'in') can be found in the
-     read-only number register '.i'.
-
- -- Request: .ti offset
- -- Request: .ti +offset
- -- Request: .ti -offset
- -- Register: \n[.in]
-     Temporarily indent the next output line by OFFSET.  If an increment
-     or decrement value is specified, adjust the temporary indentation
-     relative to the value set by the 'in' request.
-
-     This request causes a break; its value is associated with the
-     current environment (*note Environments::).  The default scaling
-     indicator is 'm'.  A call of 'ti' without an argument is ignored.
-
-     If the total indentation value is negative (which is not allowed),
-     'gtroff' emits a warning of type 'range' and sets the temporary
-     indentation to zero.  'Total indentation' is either OFFSET if
-     specified as an absolute value, or the temporary plus normal
-     indentation, if OFFSET is given as a relative value.
-
-     The effect of 'ti' is delayed until a partially collected line (if
-     it exists) is output.
-
-     The read-only number register '.in' is the indentation that applies
-     to the current output line.
-
-     The difference between '.i' and '.in' is that the latter takes into
-     account whether a partially collected line still uses the old
-     indentation value or a temporary indentation value is active.
-
- -- Request: .ll [length]
- -- Request: .ll +length
- -- Request: .ll -length
- -- Register: \n[.l]
- -- Register: \n[.ll]
-     Set the line length to LENGTH (or increment or decrement the
-     current value by LENGTH).  Initially, the line length is set to
-     6.5i.  The effect of 'll' is delayed until a partially collected
-     line (if it exists) is output.  The default scaling indicator is
-     'm'.
-
-     If 'll' is called without an argument, the line length is reset to
-     the previous value before the last call to 'll'.  If a negative
-     line length is specified (which is not allowed), 'gtroff' emits a
-     warning of type 'range' and sets the line length to zero.
-
-     The line length is associated with the current environment (*note
-     Environments::).
-
-     The current line length (as set by 'll') can be found in the
-     read-only number register '.l'.  The read-only number register
-     '.ll' is the line length that applies to the current output line.
-
-     Similar to '.i' and '.in', the difference between '.l' and '.ll' is
-     that the latter takes into account whether a partially collected
-     line still uses the old line length value.
-
-\1f
-File: groff.info,  Node: Line Control,  Next: Page Layout,  Prev: Line Layout,  Up: gtroff Reference
-
-5.14 Line Control
-=================
-
-It is important to understand how 'gtroff' handles input and output
-lines.
-
-   Many escapes use positioning relative to the input line.  For
-example, this
-
-     This is a \h'|1.2i'test.
-
-     This is a
-     \h'|1.2i'test.
-
-produces
-
-     This is a   test.
-
-     This is a             test.
-
-   The main usage of this feature is to define macros that act exactly
-at the place where called.
-
-     .\" A simple macro to underline a word
-     .de underline
-     .  nop \\$1\l'|0\[ul]'
-     ..
-
-In the above example, '|0' specifies a negative distance from the
-current position (at the end of the just emitted argument '\$1') back to
-the beginning of the input line.  Thus, the '\l' escape draws a line
-from right to left.
-
-   'gtroff' makes a difference between input and output line
-continuation; the latter is also called "interrupting" a line.
-
- -- Escape: \<RET>
- -- Escape: \c
- -- Register: \n[.int]
-     Continue a line.  '\<RET>' (this is a backslash at the end of a
-     line immediately followed by a newline) works on the input level,
-     suppressing the effects of the following newline in the input.
-
-          This is a \
-          .test
-              => This is a .test
-
-     The '|' operator is also affected.
-
-     '\c' works on the output level.  Anything after this escape on the
-     same line is ignored except '\R', which works as usual.  Anything
-     before '\c' on the same line is appended to the current partial
-     output line.  The next non-command line after an interrupted line
-     counts as a new input line.
-
-     The visual results depend on whether no-fill mode is active.
-
-        * If no-fill mode is active (using the 'nf' request), the next
-          input text line after '\c' is handled as a continuation of the
-          same input text line.
-
-               .nf
-               This is a \c
-               test.
-                   => This is a test.
-
-        * If fill mode is active (using the 'fi' request), a word
-          interrupted with '\c' is continued with the text on the next
-          input text line, without an intervening space.
-
-               This is a te\c
-               st.
-                   => This is a test.
-
-     Note that an intervening control line that causes a break is
-     stronger than '\c', flushing out the current partial line in the
-     usual way.
-
-     The '.int' register contains a positive value if the last output
-     line was interrupted with '\c'; this is associated with the current
-     environment (*note Environments::).
-
-\1f
-File: groff.info,  Node: Page Layout,  Next: Page Control,  Prev: Line Control,  Up: gtroff Reference
-
-5.15 Page Layout
-================
-
-'gtroff' provides some very primitive operations for controlling page
-layout.
-
- -- Request: .pl [length]
- -- Request: .pl +length
- -- Request: .pl -length
- -- Register: \n[.p]
-     Set the "page length" to LENGTH (or increment or decrement the
-     current value by LENGTH).  This is the length of the physical
-     output page.  The default scaling indicator is 'v'.
-
-     The current setting can be found in the read-only number register
-     '.p'.
-
-     Note that this only specifies the size of the page, not the top and
-     bottom margins.  Those are not set by 'gtroff' directly.  *Note
-     Traps::, for further information on how to do this.
-
-     Negative 'pl' values are possible also, but not very useful: No
-     trap is sprung, and each line is output on a single page (thus
-     suppressing all vertical spacing).
-
-     If no argument or an invalid argument is given, 'pl' sets the page
-     length to 11i.
-
-   'gtroff' provides several operations that help in setting up top and
-bottom titles (or headers and footers).
-
- -- Request: .tl 'left'center'right'
-     Print a "title line".  It consists of three parts: a left justified
-     portion, a centered portion, and a right justified portion.  The
-     argument separator ''' can be replaced with any character not
-     occurring in the title line.  The '%' character is replaced with
-     the current page number.  This character can be changed with the
-     'pc' request (see below).
-
-     Without argument, 'tl' is ignored.
-
-     Some notes:
-
-        * The line length set by the 'll' request is not honoured by
-          'tl'; use the 'lt' request (described below) instead, to
-          control line length for text set by 'tl'.
-
-        * A title line is not restricted to the top or bottom of a page.
-
-        * 'tl' prints the title line immediately, ignoring a partially
-          filled line (which stays untouched).
-
-        * It is not an error to omit closing delimiters.  For example,
-          '.tl /foo' is equivalent to '.tl /foo///': It prints a title
-          line with the left justified word 'foo'; the centered and
-          right justfied parts are empty.
-
-        * 'tl' accepts the same parameter delimiting characters as the
-          '\A' escape; see *note Escapes::.
-
- -- Request: .lt [length]
- -- Request: .lt +length
- -- Request: .lt -length
- -- Register: \n[.lt]
-     The title line is printed using its own line length, which is
-     specified (or incremented or decremented) with the 'lt' request.
-     Initially, the title line length is set to 6.5i.  If a negative
-     line length is specified (which is not allowed), 'gtroff' emits a
-     warning of type 'range' and sets the title line length to zero.
-     The default scaling indicator is 'm'.  If 'lt' is called without an
-     argument, the title length is reset to the previous value before
-     the last call to 'lt'.
-
-     The current setting of this is available in the '.lt' read-only
-     number register; it is associated with the current environment
-     (*note Environments::).
-
- -- Request: .pn page
- -- Request: .pn +page
- -- Request: .pn -page
- -- Register: \n[.pn]
-     Change (increase or decrease) the page number of the _next_ page.
-     The only argument is the page number; the request is ignored
-     without a parameter.
-
-     The read-only number register '.pn' contains the number of the next
-     page: either the value set by a 'pn' request, or the number of the
-     current page plus 1.
-
- -- Request: .pc [char]
-     Change the page number character (used by the 'tl' request) to a
-     different character.  With no argument, this mechanism is disabled.
-     Note that this doesn't affect the number register '%'.
-
-   *Note Traps::.
-
-\1f
-File: groff.info,  Node: Page Control,  Next: Fonts and Symbols,  Prev: Page Layout,  Up: gtroff Reference
-
-5.16 Page Control
-=================
-
- -- Request: .bp [page]
- -- Request: .bp +page
- -- Request: .bp -page
- -- Register: \n[%]
-     Stop processing the current page and move to the next page.  This
-     request causes a break.  It can also take an argument to set
-     (increase, decrease) the page number of the next page (which
-     actually becomes the current page after 'bp' has finished).  The
-     difference between 'bp' and 'pn' is that 'pn' does not cause a
-     break or actually eject a page.  *Note Page Layout::.
-
-          .de newpage                         \" define macro
-          'bp                                 \" begin page
-          'sp .5i                             \" vertical space
-          .tl 'left top'center top'right top' \" title
-          'sp .3i                             \" vertical space
-          ..                                  \" end macro
-
-     'bp' has no effect if not called within the top-level diversion
-     (*note Diversions::).
-
-     The read-write register '%' holds the current page number.
-
-     The number register '.pe' is set to 1 while 'bp' is active.  *Note
-     Page Location Traps::.
-
- -- Request: .ne [space]
-     It is often necessary to force a certain amount of space before a
-     new page occurs.  This is most useful to make sure that there is
-     not a single "orphan" line left at the bottom of a page.  The 'ne'
-     request ensures that there is a certain distance, specified by the
-     first argument, before the next page is triggered (see *note
-     Traps::, for further information).  The default scaling indicator
-     for 'ne' is 'v'; the default value of SPACE is 1v if no argument is
-     given.
-
-     For example, to make sure that no fewer than 2 lines get orphaned,
-     do the following before each paragraph:
-
-          .ne 2
-          text text text
-
-     'ne' then automatically causes a page break if there is space for
-     one line only.
-
- -- Request: .sv [space]
- -- Request: .os
-     'sv' is similar to the 'ne' request; it reserves the specified
-     amount of vertical space.  If the desired amount of space exists
-     before the next trap (or the bottom page boundary if no trap is
-     set), the space is output immediately (ignoring a partially filled
-     line, which stays untouched).  If there is not enough space, it is
-     stored for later output via the 'os' request.  The default value
-     is 1v if no argument is given; the default scaling indicator is
-     'v'.
-
-     Both 'sv' and 'os' ignore no-space mode.  While the 'sv' request
-     allows negative values for SPACE, 'os' ignores them.
-
- -- Register: \n[nl]
-     This register contains the current vertical position.  If the
-     vertical position is zero and the top of page transition hasn't
-     happened yet, 'nl' is set to negative value.  'gtroff' itself does
-     this at the very beginning of a document before anything has been
-     printed, but the main usage is to plant a header trap on a page if
-     this page has already started.
-
-     Consider the following:
-
-          .de xxx
-          .  sp
-          .  tl ''Header''
-          .  sp
-          ..
-          .
-          First page.
-          .bp
-          .wh 0 xxx
-          .nr nl (-1)
-          Second page.
-
-     Result:
-
-          First page.
-
-          ...
-
-                                       Header
-
-          Second page.
-
-          ...
-
-     Without resetting 'nl' to a negative value, the just planted trap
-     would be active beginning with the _next_ page, not the current
-     one.
-
-     *Note Diversions::, for a comparison with the '.h' and '.d'
-     registers.
-
-\1f
-File: groff.info,  Node: Fonts and Symbols,  Next: Sizes,  Prev: Page Control,  Up: gtroff Reference
-
-5.17 Fonts and Symbols
-======================
-
-'gtroff' can switch fonts at any point in the text.
-
-   The basic set of fonts is 'R', 'I', 'B', and 'BI'.  These are Times
-Roman, Italic, Bold, and Bold Italic.  For non-TTY devices, there is
-also at least one symbol font that contains various special symbols
-(Greek, mathematics).
-
-* Menu:
-
-* Changing Fonts::
-* Font Families::
-* Font Positions::
-* Using Symbols::
-* Character Classes::
-* Special Fonts::
-* Artificial Fonts::
-* Ligatures and Kerning::
-
-\1f
-File: groff.info,  Node: Changing Fonts,  Next: Font Families,  Prev: Fonts and Symbols,  Up: Fonts and Symbols
-
-5.17.1 Changing Fonts
----------------------
-
- -- Request: .ft [font]
- -- Escape: \ff
- -- Escape: \f(fn
- -- Escape: \f[font]
- -- Register: \n[.sty]
-     The 'ft' request and the '\f' escape change the current font to
-     FONT (one-character name F, two-character name FN).
-
-     If FONT is a style name (as set with the 'sty' request or with the
-     'styles' command in the 'DESC' file), use it within the current
-     font family (as set with the 'fam' request, '\F' escape, or with
-     the 'family' command in the 'DESC' file).
-
-     It is not possible to switch to a font with the name 'DESC'
-     (whereas this name could be used as a style name; however, this is
-     not recommended).
-
-     With no argument or using 'P' as an argument, '.ft' switches to the
-     previous font.  Use '\f[]' to do this with the escape.  The old
-     syntax forms '\fP' or '\f[P]' are also supported.
-
-     Fonts are generally specified as upper-case strings, which are
-     usually 1 to 4 characters representing an abbreviation or acronym
-     of the font name.  This is no limitation, just a convention.
-
-     The example below produces two identical lines.
-
-          eggs, bacon,
-          .ft B
-          spam
-          .ft
-          and sausage.
-
-          eggs, bacon, \fBspam\fP and sausage.
-
-     Note that '\f' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the font on the fly:
-
-          .mc \f[I]x\f[]
-
-     The current style name is available in the read-only number
-     register '.sty' (this is a string-valued register); if the current
-     font isn't a style, the empty string is returned.  It is associated
-     with the current environment.
-
-     *Note Font Positions::, for an alternative syntax.
-
- -- Request: .ftr f [g]
-     Translate font F to font G.  Whenever a font named F is referred to
-     in a '\f' escape sequence, in the 'F' and 'S' conditional
-     operators, or in the 'ft', 'ul', 'bd', 'cs', 'tkf', 'special',
-     'fspecial', 'fp', or 'sty' requests, font G is used.  If G is
-     missing or equal to F the translation is undone.
-
-     Note that it is not possible to chain font translations.  Example:
-
-          .ftr XXX TR
-          .ftr XXX YYY
-          .ft XXX
-              => warning: can't find font `XXX'
-
- -- Request: .fzoom f [zoom]
- -- Register: \n[.zoom]
-     Set magnification of font F to factor ZOOM, which must be a
-     non-negative integer multiple of 1/1000th.  This request is useful
-     to adjust the optical size of a font in relation to the others.  In
-     the example below, font 'CR' is magnified by 10% (the zoom factor
-     is thus 1.1).
-
-          .fam P
-          .fzoom CR 1100
-          .ps 12
-          Palatino and \f[CR]Courier\f[]
-
-     A missing or zero value of ZOOM is the same as a value of 1000,
-     which means no magnification.  F must be a real font name, not a
-     style.
-
-     Note that the magnification of a font is completely transparent to
-     troff; a change of the zoom factor doesn't cause any effect except
-     that the dimensions of glyphs, (word) spaces, kerns, etc., of the
-     affected font are adjusted accordingly.
-
-     The zoom factor of the current font is available in the read-only
-     number register '.zoom', in multiples of 1/1000th.  It returns zero
-     if there is no magnification.
-
-\1f
-File: groff.info,  Node: Font Families,  Next: Font Positions,  Prev: Changing Fonts,  Up: Fonts and Symbols
-
-5.17.2 Font Families
---------------------
-
-Due to the variety of fonts available, 'gtroff' has added the concept of
-"font families" and "font styles".  The fonts are specified as the
-concatenation of the font family and style.  Specifying a font without
-the family part causes 'gtroff' to use that style of the current family.
-
-   Currently, fonts for the devices '-Tps', '-Tpdf', '-Tdvi', '-Tlj4',
-'-Tlbp', and the X11 fonts are set up to this mechanism.  By default,
-'gtroff' uses the Times family with the four styles 'R', 'I', 'B', and
-'BI'.
-
-   This way, it is possible to use the basic four fonts and to select a
-different font family on the command line (*note Groff Options::).
-
- -- Request: .fam [family]
- -- Register: \n[.fam]
- -- Escape: \Ff
- -- Escape: \F(fm
- -- Escape: \F[family]
- -- Register: \n[.fn]
-     Switch font family to FAMILY (one-character name F, two-character
-     name FM).  If no argument is given, switch back to the previous
-     font family.  Use '\F[]' to do this with the escape.  Note that
-     '\FP' doesn't work; it selects font family 'P' instead.
-
-     The value at start-up is 'T'.  The current font family is available
-     in the read-only number register '.fam' (this is a string-valued
-     register); it is associated with the current environment.
-
-          spam,
-          .fam H    \" helvetica family
-          spam,     \" used font is family H + style R = HR
-          .ft B     \" family H + style B = font HB
-          spam,
-          .fam T    \" times family
-          spam,     \" used font is family T + style B = TB
-          .ft AR    \" font AR (not a style)
-          baked beans,
-          .ft R     \" family T + style R = font TR
-          and spam.
-
-     Note that '\F' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the font family on the
-     fly:
-
-          .mc \F[P]x\F[]
-
-     The '.fn' register contains the current "real font name" of the
-     current font.  This is a string-valued register.  If the current
-     font is a style, the value of '\n[.fn]' is the proper concatenation
-     of family and style name.
-
- -- Request: .sty n style
-     Associate STYLE with font position N.  A font position can be
-     associated either with a font or with a style.  The current font is
-     the index of a font position and so is also either a font or a
-     style.  If it is a style, the font that is actually used is the
-     font which name is the concatenation of the name of the current
-     family and the name of the current style.  For example, if the
-     current font is 1 and font position 1 is associated with style 'R'
-     and the current font family is 'T', then font 'TR' is used.  If the
-     current font is not a style, then the current family is ignored.
-     If the requests 'cs', 'bd', 'tkf', 'uf', or 'fspecial' are applied
-     to a style, they are instead applied to the member of the current
-     family corresponding to that style.
-
-     N must be a non-negative integer value.
-
-     The default family can be set with the '-f' option (*note Groff
-     Options::).  The 'styles' command in the 'DESC' file controls which
-     font positions (if any) are initially associated with styles rather
-     than fonts.  For example, the default setting for POSTSCRIPT fonts
-
-          styles R I B BI
-
-     is equivalent to
-
-          .sty 1 R
-          .sty 2 I
-          .sty 3 B
-          .sty 4 BI
-
-     'fam' and '\F' always check whether the current font position is
-     valid; this can give surprising results if the current font
-     position is associated with a style.
-
-     In the following example, we want to access the POSTSCRIPT font
-     'FooBar' from the font family 'Foo':
-
-          .sty \n[.fp] Bar
-          .fam Foo
-              => warning: can't find font `FooR'
-
-     The default font position at start-up is 1; for the POSTSCRIPT
-     device, this is associated with style 'R', so 'gtroff' tries to
-     open 'FooR'.
-
-     A solution to this problem is to use a dummy font like the
-     following:
-
-          .fp 0 dummy TR    \" set up dummy font at position 0
-          .sty \n[.fp] Bar  \" register style `Bar'
-          .ft 0             \" switch to font at position 0
-          .fam Foo          \" activate family `Foo'
-          .ft Bar           \" switch to font `FooBar'
-
-     *Note Font Positions::.
-
-\1f
-File: groff.info,  Node: Font Positions,  Next: Using Symbols,  Prev: Font Families,  Up: Fonts and Symbols
-
-5.17.3 Font Positions
----------------------
-
-For the sake of old phototypesetters and compatibility with old versions
-of 'troff', 'gtroff' has the concept of font "positions", on which
-various fonts are mounted.
-
- -- Request: .fp pos font [external-name]
- -- Register: \n[.f]
- -- Register: \n[.fp]
-     Mount font FONT at position POS (which must be a non-negative
-     integer).  This numeric position can then be referred to with font
-     changing commands.  When 'gtroff' starts it is using font
-     position 1 (which must exist; position 0 is unused usually at
-     start-up).
-
-     The current font in use, as a font position, is available in the
-     read-only number register '.f'.  This can be useful to remember the
-     current font for later recall.  It is associated with the current
-     environment (*note Environments::).
-
-          .nr save-font \n[.f]
-          .ft B
-          ... text text text ...
-          .ft \n[save-font]
-
-     The number of the next free font position is available in the
-     read-only number register '.fp'.  This is useful when mounting a
-     new font, like so:
-
-          .fp \n[.fp] NEATOFONT
-
-     Fonts not listed in the 'DESC' file are automatically mounted on
-     the next available font position when they are referenced.  If a
-     font is to be mounted explicitly with the 'fp' request on an unused
-     font position, it should be mounted on the first unused font
-     position, which can be found in the '.fp' register.  Although
-     'gtroff' does not enforce this strictly, it is not allowed to mount
-     a font at a position whose number is much greater (approx. 1000
-     positions) than that of any currently used position.
-
-     The 'fp' request has an optional third argument.  This argument
-     gives the external name of the font, which is used for finding the
-     font description file.  The second argument gives the internal name
-     of the font, which is used to refer to the font in 'gtroff' after
-     it has been mounted.  If there is no third argument then the
-     internal name is used as the external name.  This feature makes it
-     possible to use fonts with long names in compatibility mode.
-
-   Both the 'ft' request and the '\f' escape have alternative syntax
-forms to access font positions.
-
- -- Request: .ft nnn
- -- Escape: \fn
- -- Escape: \f(nn
- -- Escape: \f[nnn]
-     Change the current font position to NNN (one-digit position N,
-     two-digit position NN), which must be a non-negative integer.
-
-     If NNN is associated with a style (as set with the 'sty' request or
-     with the 'styles' command in the 'DESC' file), use it within the
-     current font family (as set with the 'fam' request, the '\F'
-     escape, or with the 'family' command in the 'DESC' file).
-
-          this is font 1
-          .ft 2
-          this is font 2
-          .ft                   \" switch back to font 1
-          .ft 3
-          this is font 3
-          .ft
-          this is font 1 again
-
-     *Note Changing Fonts::, for the standard syntax form.
-
-\1f
-File: groff.info,  Node: Using Symbols,  Next: Character Classes,  Prev: Font Positions,  Up: Fonts and Symbols
-
-5.17.4 Using Symbols
---------------------
-
-A "glyph" is a graphical representation of a "character".  While a
-character is an abstract entity containing semantic information, a glyph
-is something that can be actually seen on screen or paper.  It is
-possible that a character has multiple glyph representation forms (for
-example, the character 'A' can be either written in a roman or an italic
-font, yielding two different glyphs); sometimes more than one character
-maps to a single glyph (this is a "ligature" - the most common is 'fi').
-
-   A "symbol" is simply a named glyph.  Within 'gtroff', all glyph names
-of a particular font are defined in its font file.  If the user requests
-a glyph not available in this font, 'gtroff' looks up an ordered list of
-"special fonts".  By default, the POSTSCRIPT output device supports the
-two special fonts 'SS' (slanted symbols) and 'S' (symbols) (the former
-is looked up before the latter).  Other output devices use different
-names for special fonts.  Fonts mounted with the 'fonts' keyword in the
-'DESC' file are globally available.  To install additional special fonts
-locally (i.e. for a particular font), use the 'fspecial' request.
-
-   Here the exact rules how 'gtroff' searches a given symbol:
-
-   * If the symbol has been defined with the 'char' request, use it.
-     This hides a symbol with the same name in the current font.
-
-   * Check the current font.
-
-   * If the symbol has been defined with the 'fchar' request, use it.
-
-   * Check whether the current font has a font-specific list of special
-     fonts; test all fonts in the order of appearance in the last
-     'fspecial' call if appropriate.
-
-   * If the symbol has been defined with the 'fschar' request for the
-     current font, use it.
-
-   * Check all fonts in the order of appearance in the last 'special'
-     call.
-
-   * If the symbol has been defined with the 'schar' request, use it.
-
-   * As a last resort, consult all fonts loaded up to now for special
-     fonts and check them, starting with the lowest font number.  Note
-     that this can sometimes lead to surprising results since the
-     'fonts' line in the 'DESC' file often contains empty positions,
-     which are filled later on.  For example, consider the following:
-
-          fonts 3 0 0 FOO
-
-     This mounts font 'foo' at font position 3.  We assume that 'FOO' is
-     a special font, containing glyph 'foo', and that no font has been
-     loaded yet.  The line
-
-          .fspecial BAR BAZ
-
-     makes font 'BAZ' special only if font 'BAR' is active.  We further
-     assume that 'BAZ' is really a special font, i.e., the font
-     description file contains the 'special' keyword, and that it also
-     contains glyph 'foo' with a special shape fitting to font 'BAR'.
-     After executing 'fspecial', font 'BAR' is loaded at font
-     position 1, and 'BAZ' at position 2.
-
-     We now switch to a new font 'XXX', trying to access glyph 'foo'
-     that is assumed to be missing.  There are neither font-specific
-     special fonts for 'XXX' nor any other fonts made special with the
-     'special' request, so 'gtroff' starts the search for special fonts
-     in the list of already mounted fonts, with increasing font
-     positions.  Consequently, it finds 'BAZ' before 'FOO' even for
-     'XXX', which is not the intended behaviour.
-
-   *Note Font Files::, and *note Special Fonts::, for more details.
-
-   The list of available symbols is device dependent; see the
-'groff_char(7)' man page for a complete list of all glyphs.  For
-example, say
-
-     man -Tdvi groff_char > groff_char.dvi
-
-for a list using the default DVI fonts (not all versions of the 'man'
-program support the '-T' option).  If you want to use an additional
-macro package to change the used fonts, 'groff' must be called directly:
-
-     groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
-
-   Glyph names not listed in groff_char(7) are derived algorithmically,
-using a simplified version of the Adobe Glyph List (AGL) algorithm,
-which is described in
-<http://partners.adobe.com/public/developer/opentype/index_glyph.html>.
-The (frozen) set of glyph names that can't be derived algorithmically is
-called "groff glyph list (GGL)".
-
-   * A glyph for Unicode character U+XXXX[X[X]], which is not a
-     composite character is named 'uXXXX[X[X]]'.  X must be an uppercase
-     hexadecimal digit.  Examples: 'u1234', 'u008E', 'u12DB8'.  The
-     largest Unicode value is 0x10FFFF. There must be at least four 'X'
-     digits; if necessary, add leading zeroes (after the 'u').  No zero
-     padding is allowed for character codes greater than 0xFFFF.
-     Surrogates (i.e., Unicode values greater than 0xFFFF represented
-     with character codes from the surrogate area U+D800-U+DFFF) are not
-     allowed too.
-
-   * A glyph representing more than a single input character is named
-
-          'u' COMPONENT1 '_' COMPONENT2 '_' COMPONENT3 ...
-
-     Example: 'u0045_0302_0301'.
-
-     For simplicity, all Unicode characters that are composites must be
-     decomposed maximally (this is normalization form D in the Unicode
-     standard); for example, 'u00CA_0301' is not a valid glyph name
-     since U+00CA (LATIN CAPITAL LETTER E WITH CIRCUMFLEX) can be
-     further decomposed into U+0045 (LATIN CAPITAL LETTER E) and U+0302
-     (COMBINING CIRCUMFLEX ACCENT).  'u0045_0302_0301' is thus the glyph
-     name for U+1EBE, LATIN CAPITAL LETTER E WITH CIRCUMFLEX AND ACUTE.
-
-   * groff maintains a table to decompose all algorithmically derived
-     glyph names that are composites itself.  For example, 'u0100'
-     (LATIN LETTER A WITH MACRON) is automatically decomposed into
-     'u0041_0304'.  Additionally, a glyph name of the GGL is preferred
-     to an algorithmically derived glyph name; groff also automatically
-     does the mapping.  Example: The glyph 'u0045_0302' is mapped to
-     '^E'.
-
-   * glyph names of the GGL can't be used in composite glyph names; for
-     example, '^E_u0301' is invalid.
-
- -- Escape: \(nm
- -- Escape: \[name]
- -- Escape: \[component1 component2 ...]
-     Insert a symbol NAME (two-character name NM) or a composite glyph
-     with component glyphs COMPONENT1, COMPONENT2, ...  There is no
-     special syntax for one-character names - the natural form '\N'
-     would collide with escapes.(1)  (*note Using Symbols-Footnote-1::)
-
-     If NAME is undefined, a warning of type 'char' is generated, and
-     the escape is ignored.  *Note Debugging::, for information about
-     warnings.
-
-     groff resolves '\[...]' with more than a single component as
-     follows:
-
-        * Any component that is found in the GGL is converted to the
-          'uXXXX' form.
-
-        * Any component 'uXXXX' that is found in the list of
-          decomposable glyphs is decomposed.
-
-        * The resulting elements are then concatenated with '_' in
-          between, dropping the leading 'u' in all elements but the
-          first.
-
-     No check for the existence of any component (similar to 'tr'
-     request) is done.
-
-     Examples:
-
-     '\[A ho]'
-          'A' maps to 'u0041', 'ho' maps to 'u02DB', thus the final
-          glyph name would be 'u0041_02DB'.  Note this is not the
-          expected result: The ogonek glyph 'ho' is a spacing ogonek,
-          but for a proper composite a non-spacing ogonek (U+0328) is
-          necessary.  Looking into the file 'composite.tmac' one can
-          find '.composite ho u0328', which changes the mapping of 'ho'
-          while a composite glyph name is constructed, causing the final
-          glyph name to be 'u0041_0328'.
-
-     '\[^E u0301]'
-     '\[^E aa]'
-     '\[E a^ aa]'
-     '\[E ^ ']'
-          '^E' maps to 'u0045_0302', thus the final glyph name is
-          'u0045_0302_0301' in all forms (assuming proper calls of the
-          'composite' request).
-
-     It is not possible to define glyphs with names like 'A ho' within a
-     groff font file.  This is not really a limitation; instead, you
-     have to define 'u0041_0328'.
-
- -- Escape: \C'xxx'
-     Typeset the glyph named XXX.(2)  (*note Using Symbols-Footnote-2::)
-     Normally it is more convenient to use '\[XXX]', but '\C' has the
-     advantage that it is compatible with newer versions of AT&T 'troff'
-     and is available in compatibility mode.
-
- -- Request: .composite from to
-     Map glyph name FROM to glyph name TO if it is used in '\[...]' with
-     more than one component.  See above for examples.
-
-     This mapping is based on glyph names only; no check for the
-     existence of either glyph is done.
-
-     A set of default mappings for many accents can be found in the file
-     'composite.tmac', which is loaded at start-up.
-
- -- Escape: \N'n'
-     Typeset the glyph with code N in the current font ('n' is *not* the
-     input character code).  The number N can be any non-negative
-     decimal integer.  Most devices only have glyphs with codes between
-     0 and 255; the Unicode output device uses codes in the range
-     0-65535.  If the current font does not contain a glyph with that
-     code, special fonts are _not_ searched.  The '\N' escape sequence
-     can be conveniently used in conjunction with the 'char' request:
-
-          .char \[phone] \f[ZD]\N'37'
-
-     The code of each glyph is given in the fourth column in the font
-     description file after the 'charset' command.  It is possible to
-     include unnamed glyphs in the font description file by using a name
-     of '---'; the '\N' escape sequence is the only way to use these.
-
-     No kerning is applied to glyphs accessed with '\N'.
-
-   Some escape sequences directly map onto special glyphs.
-
- -- Escape: \'
-     This is a backslash followed by the apostrophe character, ASCII
-     character '0x27' (EBCDIC character '0x7D').  The same as '\[aa]',
-     the acute accent.
-
- -- Escape: \`
-     This is a backslash followed by ASCII character '0x60' (EBCDIC
-     character '0x79' usually).  The same as '\[ga]', the grave accent.
-
- -- Escape: \-
-     This is the same as '\[-]', the minus sign in the current font.
-
- -- Escape: \_
-     This is the same as '\[ul]', the underline character.
-
- -- Request: .cflags n c1 c2 ...
-     Input characters and symbols have certain properties associated
-     with it.(3)  (*note Using Symbols-Footnote-3::) These properties
-     can be modified with the 'cflags' request.  The first argument is
-     the sum of the desired flags and the remaining arguments are the
-     characters or symbols to have those properties.  It is possible to
-     omit the spaces between the characters or symbols.  Instead of
-     single characters or symbols you can also use character classes
-     (see *note Character Classes:: for more details).
-
-     '1'
-          The character ends sentences (initially characters '.?!' have
-          this property).
-
-     '2'
-          Lines can be broken before the character (initially no
-          characters have this property).  This only works if both the
-          characters before and after have non-zero hyphenation codes
-          (as set with the 'hcode' request).  Use value 64 to override
-          this behaviour.
-
-     '4'
-          Lines can be broken after the character (initially the
-          character '-' and the symbols '\[hy]' and '\[em]' have this
-          property).  This only works if both the characters before and
-          after have non-zero hyphenation codes (as set with the 'hcode'
-          request).  Use value 64 to override this behaviour.
-
-     '8'
-          The character overlaps horizontally if used as a horizontal
-          line building element.  Initially the symbols '\[ul]',
-          '\[rn]', '\[ru]', '\[radicalex]', and '\[sqrtex]' have this
-          property.
-
-     '16'
-          The character overlaps vertically if used as vertical line
-          building element.  Initially symbol '\[br]' has this property.
-
-     '32'
-          An end-of-sentence character followed by any number of
-          characters with this property is treated as the end of a
-          sentence if followed by a newline or two spaces; in other
-          words the character is "transparent" for the purposes of
-          end-of-sentence recognition - this is the same as having a
-          zero space factor in TeX (initially characters '"')]*' and the
-          symbols '\[dg]', '\[rq]', and '\[cq]' have this property).
-
-     '64'
-          Ignore hyphenation code values of the surrounding characters.
-          Use this in combination with values 2 and 4 (initially no
-          characters have this property).  For example, if you need an
-          automatic break point after the hyphen in number ranges like
-          '3000-5000', insert
-
-               .cflags 68 -
-
-          into your document.  Note, however, that this can lead to bad
-          layout if done without thinking; in most situations, a better
-          solution instead of changing the 'cflags' value is to insert
-          '\:' right after the hyphen at the places that really need a
-          break point.
-
-     '128'
-          Prohibit a line break before the character, but allow a line
-          break after the character.  This works only in combination
-          with flags 256 and 512 (see below) and has no effect
-          otherwise.
-
-     '256'
-          Prohibit a line break after the character, but allow a line
-          break before the character.  This works only in combination
-          with flags 128 and 512 (see below) and has no effect
-          otherwise.
-
-     '512'
-          Allow line break before or after the character.  This works
-          only in combination with flags 128 and 256 and has no effect
-          otherwise.
-
-          Contrary to flag values 2 and 4, the flags 128, 256, and 512
-          work pairwise.  If, for example, the left character has value
-          512, and the right character 128, no line break gets inserted.
-          If we use value 6 instead for the left character, a line break
-          after the character can't be suppressed since the right
-          neighbour character doesn't get examined.
-
- -- Request: .char g [string]
- -- Request: .fchar g [string]
- -- Request: .fschar f g [string]
- -- Request: .schar g [string]
-     Define a new glyph G to be STRING (which can be empty).(4)  (*note
-     Using Symbols-Footnote-4::) Every time glyph G needs to be printed,
-     STRING is processed in a temporary environment and the result is
-     wrapped up into a single object.  Compatibility mode is turned off
-     and the escape character is set to '\' while STRING is being
-     processed.  Any emboldening, constant spacing or track kerning is
-     applied to this object rather than to individual characters in
-     STRING.
-
-     A glyph defined by these requests can be used just like a normal
-     glyph provided by the output device.  In particular, other
-     characters can be translated to it with the 'tr' or 'trin'
-     requests; it can be made the leader character by the 'lc' request;
-     repeated patterns can be drawn with the glyph using the '\l' and
-     '\L' escape sequences; words containing the glyph can be hyphenated
-     correctly if the 'hcode' request is used to give the glyph's symbol
-     a hyphenation code.
-
-     There is a special anti-recursion feature: Use of 'g' within the
-     glyph's definition is handled like normal characters and symbols
-     not defined with 'char'.
-
-     Note that the 'tr' and 'trin' requests take precedence if 'char'
-     accesses the same symbol.
-
-          .tr XY
-          X
-              => Y
-          .char X Z
-          X
-              => Y
-          .tr XX
-          X
-              => Z
-
-     The 'fchar' request defines a fallback glyph: 'gtroff' only checks
-     for glyphs defined with 'fchar' if it cannot find the glyph in the
-     current font.  'gtroff' carries out this test before checking
-     special fonts.
-
-     'fschar' defines a fallback glyph for font F: 'gtroff' checks for
-     glyphs defined with 'fschar' after the list of fonts declared as
-     font-specific special fonts with the 'fspecial' request, but before
-     the list of fonts declared as global special fonts with the
-     'special' request.
-
-     Finally, the 'schar' request defines a global fallback glyph:
-     'gtroff' checks for glyphs defined with 'schar' after the list of
-     fonts declared as global special fonts with the 'special' request,
-     but before the already mounted special fonts.
-
-     *Note Using Symbols::, for a detailed description of the glyph
-     searching mechanism in 'gtroff'.
-
- -- Request: .rchar c1 c2 ...
- -- Request: .rfschar f c1 c2 ...
-     Remove the definitions of glyphs C1, C2, ...  This undoes the
-     effect of a 'char', 'fchar', or 'schar' request.
-
-     It is possible to omit the whitespace between arguments.
-
-     The request 'rfschar' removes glyph definitions defined with
-     'fschar' for glyph f.
-
-   *Note Special Characters::.
-
-\1f
-File: groff.info,  Node: Using Symbols-Footnotes,  Up: Using Symbols
-
-   (1) Note that a one-character symbol is not the same as an input
-character, i.e., the character 'a' is not the same as '\[a]'.  By
-default, 'groff' defines only a single one-character symbol, '\[-]'; it
-is usually accessed as '\-'.  On the other hand, 'gtroff' has the
-special feature that '\[charXXX]' is the same as the input character
-with character code XXX.  For example, '\[char97]' is identical to the
-letter 'a' if ASCII encoding is active.
-
-   (2) '\C' is actually a misnomer since it accesses an output glyph.
-
-   (3) Note that the output glyphs themselves don't have such
-properties.  For 'gtroff', a glyph is a numbered box with a given width,
-depth, and height, nothing else.  All manipulations with the 'cflags'
-request work on the input level.
-
-   (4) 'char' is a misnomer since an output glyph is defined.
-
-\1f
-File: groff.info,  Node: Character Classes,  Next: Special Fonts,  Prev: Using Symbols,  Up: Fonts and Symbols
-
-5.17.5 Character Classes
-------------------------
-
-Classes are particularly useful for East Asian languages such as
-Chinese, Japanese, and Korean, where the number of needed characters is
-much larger than in European languages, and where large sets of
-characters share the same properties.
-
- -- Request: .class n c1 c2 ...
-     In 'groff', a "character class" (or simply "class") is a set of
-     characters, grouped by some user aspect.  The 'class' request
-     defines such classes so that other requests can refer to all
-     characters belonging to this set with a single class name.
-     Currently, only the 'cflags' request can handle character classes.
-
-     A 'class' request takes a class name followed by a list of
-     entities.  In its simplest form, the entities are characters or
-     symbols:
-
-          .class [prepunct] , : ; > }
-
-     Since class and glyph names share the same namespace, it is
-     recommended to start and end the class name with '[' and ']',
-     respectively, to avoid collisions with normal 'groff' symbols (and
-     symbols defined by the user).  In particular, the presence of ']'
-     in the symbol name intentionally prevents the usage of '\[...]',
-     thus you must use the '\C' escape to access a class with such a
-     name.
-
-     You can also use a special character range notation, consisting of
-     a start character or symbol, followed by '-', and an end character
-     or symbol.  Internally, 'gtroff' converts these two symbol names to
-     Unicode values (according to the groff glyph gist), which then give
-     the start and end value of the range.  If that fails, the class
-     definition is skipped.
-
-     Finally, classes can be nested, too.
-
-     Here is a more complex example:
-
-          .class [prepunctx] \C'[prepunct]' \[u2013]-\[u2016]
-
-     The class 'prepunctx' now contains the contents of the class
-     'prepunct' as defined above (the set ', : ; > }'), and characters
-     in the range between 'U+2013' and 'U+2016'.
-
-     If you want to add '-' to a class, it must be the first character
-     value in the argument list, otherwise it gets misinterpreted as a
-     range.
-
-     Note that it is not possible to use class names within range
-     definitions.
-
-     Typical use of the 'class' request is to control line-breaking and
-     hyphenation rules as defined by the 'cflags' request.  For example,
-     to inhibit line breaks before the characters belonging to the
-     'prepunctx' class, you can write:
-
-          .cflags 2 \C'[prepunctx]'
-
-     See the 'cflags' request in *note Using Symbols::, for more
-     details.
-
-\1f
-File: groff.info,  Node: Special Fonts,  Next: Artificial Fonts,  Prev: Character Classes,  Up: Fonts and Symbols
-
-5.17.6 Special Fonts
---------------------
-
-Special fonts are those that 'gtroff' searches when it cannot find the
-requested glyph in the current font.  The Symbol font is usually a
-special font.
-
-   'gtroff' provides the following two requests to add more special
-fonts.  *Note Using Symbols::, for a detailed description of the glyph
-searching mechanism in 'gtroff'.
-
-   Usually, only non-TTY devices have special fonts.
-
- -- Request: .special [s1 s2 ...]
- -- Request: .fspecial f [s1 s2 ...]
-     Use the 'special' request to define special fonts.  Initially, this
-     list is empty.
-
-     Use the 'fspecial' request to designate special fonts only when
-     font F is active.  Initially, this list is empty.
-
-     Previous calls to 'special' or 'fspecial' are overwritten; without
-     arguments, the particular list of special fonts is set to empty.
-     Special fonts are searched in the order they appear as arguments.
-
-     All fonts that appear in a call to 'special' or 'fspecial' are
-     loaded.
-
-     *Note Using Symbols::, for the exact search order of glyphs.
-
-\1f
-File: groff.info,  Node: Artificial Fonts,  Next: Ligatures and Kerning,  Prev: Special Fonts,  Up: Fonts and Symbols
-
-5.17.7 Artificial Fonts
------------------------
-
-There are a number of requests and escapes for artificially creating
-fonts.  These are largely vestiges of the days when output devices did
-not have a wide variety of fonts, and when 'nroff' and 'troff' were
-separate programs.  Most of them are no longer necessary in GNU 'troff'.
-Nevertheless, they are supported.
-
- -- Escape: \H'height'
- -- Escape: \H'+height'
- -- Escape: \H'-height'
- -- Register: \n[.height]
-     Change (increment, decrement) the height of the current font, but
-     not the width.  If HEIGHT is zero, restore the original height.
-     Default scaling indicator is 'z'.
-
-     The read-only number register '.height' contains the font height as
-     set by '\H'.
-
-     Currently, only the '-Tps' and '-Tpdf' devices support this
-     feature.
-
-     Note that '\H' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the font on the fly:
-
-          .mc \H'+5z'x\H'0'
-
-     In compatibility mode, 'gtroff' behaves differently: If an
-     increment or decrement is used, it is always taken relative to the
-     current point size and not relative to the previously selected font
-     height.  Thus,
-
-          .cp 1
-          \H'+5'test \H'+5'test
-
-     prints the word 'test' twice with the same font height (five points
-     larger than the current font size).
-
- -- Escape: \S'slant'
- -- Register: \n[.slant]
-     Slant the current font by SLANT degrees.  Positive values slant to
-     the right.  Only integer values are possible.
-
-     The read-only number register '.slant' contains the font slant as
-     set by '\S'.
-
-     Currently, only the '-Tps' and '-Tpdf' devices support this
-     feature.
-
-     Note that '\S' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the font on the fly:
-
-          .mc \S'20'x\S'0'
-
-     This request is incorrectly documented in the original UNIX troff
-     manual; the slant is always set to an absolute value.
-
- -- Request: .ul [lines]
-     The 'ul' request normally underlines subsequent lines if a TTY
-     output device is used.  Otherwise, the lines are printed in italics
-     (only the term 'underlined' is used in the following).  The single
-     argument is the number of input lines to be underlined; with no
-     argument, the next line is underlined.  If LINES is zero or
-     negative, stop the effects of 'ul' (if it was active).  Requests
-     and empty lines do not count for computing the number of underlined
-     input lines, even if they produce some output like 'tl'.  Lines
-     inserted by macros (e.g. invoked by a trap) do count.
-
-     At the beginning of 'ul', the current font is stored and the
-     underline font is activated.  Within the span of a 'ul' request, it
-     is possible to change fonts, but after the last line affected by
-     'ul' the saved font is restored.
-
-     This number of lines still to be underlined is associated with the
-     current environment (*note Environments::).  The underline font can
-     be changed with the 'uf' request.
-
-     The 'ul' request does not underline spaces.
-
- -- Request: .cu [lines]
-     The 'cu' request is similar to 'ul' but underlines spaces as well
-     (if a TTY output device is used).
-
- -- Request: .uf font
-     Set the underline font (globally) used by 'ul' and 'cu'.  By
-     default, this is the font at position 2.  FONT can be either a
-     non-negative font position or the name of a font.
-
- -- Request: .bd font [offset]
- -- Request: .bd font1 font2 [offset]
- -- Register: \n[.b]
-     Artificially create a bold font by printing each glyph twice,
-     slightly offset.
-
-     Two syntax forms are available.
-
-        * Imitate a bold font unconditionally.  The first argument
-          specifies the font to embolden, and the second is the number
-          of basic units, minus one, by which the two glyphs are offset.
-          If the second argument is missing, emboldening is turned off.
-
-          FONT can be either a non-negative font position or the name of
-          a font.
-
-          OFFSET is available in the '.b' read-only register if a
-          special font is active; in the 'bd' request, its default unit
-          is 'u'.
-
-        * Imitate a bold form conditionally.  Embolden FONT1 by OFFSET
-          only if font FONT2 is the current font.  This command can be
-          issued repeatedly to set up different emboldening values for
-          different current fonts.  If the second argument is missing,
-          emboldening is turned off for this particular current font.
-
-          This affects special fonts only (either set up with the
-          'special' command in font files or with the 'fspecial'
-          request).
-
- -- Request: .cs font [width [em-size]]
-     Switch to and from "constant glyph space mode".  If activated, the
-     width of every glyph is WIDTH/36 ems.  The em size is given
-     absolutely by EM-SIZE; if this argument is missing, the em value is
-     taken from the current font size (as set with the 'ps' request)
-     when the font is effectively in use.  Without second and third
-     argument, constant glyph space mode is deactivated.
-
-     Default scaling indicator for EM-SIZE is 'z'; WIDTH is an integer.
-
-\1f
-File: groff.info,  Node: Ligatures and Kerning,  Prev: Artificial Fonts,  Up: Fonts and Symbols
-
-5.17.8 Ligatures and Kerning
-----------------------------
-
-Ligatures are groups of characters that are run together, i.e, producing
-a single glyph.  For example, the letters 'f' and 'i' can form a
-ligature 'fi' as in the word 'file'.  This produces a cleaner look
-(albeit subtle) to the printed output.  Usually, ligatures are not
-available in fonts for TTY output devices.
-
-   Most POSTSCRIPT fonts support the fi and fl ligatures.  The C/A/T
-typesetter that was the target of AT&T 'troff' also supported 'ff',
-'ffi', and 'ffl' ligatures.  Advanced typesetters or 'expert' fonts may
-include ligatures for 'ft' and 'ct', although GNU 'troff' does not
-support these (yet).
-
-   Only the current font is checked for ligatures and kerns; neither
-special fonts nor entities defined with the 'char' request (and its
-siblings) are taken into account.
-
- -- Request: .lg [flag]
- -- Register: \n[.lg]
-     Switch the ligature mechanism on or off; if the parameter is
-     non-zero or missing, ligatures are enabled, otherwise disabled.
-     Default is on.  The current ligature mode can be found in the
-     read-only number register '.lg' (set to 1 or 2 if ligatures are
-     enabled, 0 otherwise).
-
-     Setting the ligature mode to 2 enables the two-character ligatures
-     (fi, fl, and ff) and disables the three-character ligatures (ffi
-     and ffl).
-
-   "Pairwise kerning" is another subtle typesetting mechanism that
-modifies the distance between a glyph pair to improve readability.  In
-most cases (but not always) the distance is decreased.  Typewriter-like
-fonts and fonts for terminals where all glyphs have the same width don't
-use kerning.
-
- -- Request: .kern [flag]
- -- Register: \n[.kern]
-     Switch kerning on or off.  If the parameter is non-zero or missing,
-     enable pairwise kerning, otherwise disable it.  The read-only
-     number register '.kern' is set to 1 if pairwise kerning is enabled,
-     0 otherwise.
-
-     If the font description file contains pairwise kerning information,
-     glyphs from that font are kerned.  Kerning between two glyphs can
-     be inhibited by placing '\&' between them: 'V\&A'.
-
-     *Note Font File Format::.
-
-   "Track kerning" expands or reduces the space between glyphs.  This
-can be handy, for example, if you need to squeeze a long word onto a
-single line or spread some text to fill a narrow column.  It must be
-used with great care since it is usually considered bad typography if
-the reader notices the effect.
-
- -- Request: .tkf f s1 n1 s2 n2
-     Enable track kerning for font F.  If the current font is F the
-     width of every glyph is increased by an amount between N1 and N2
-     (N1, N2 can be negative); if the current point size is less than or
-     equal to S1 the width is increased by N1; if it is greater than or
-     equal to S2 the width is increased by N2; if the point size is
-     greater than or equal to S1 and less than or equal to S2 the
-     increase in width is a linear function of the point size.
-
-     The default scaling indicator is 'z' for S1 and S2, 'p' for N1 and
-     N2.
-
-     Note that the track kerning amount is added even to the rightmost
-     glyph in a line; for large values it is thus recommended to
-     increase the line length by the same amount to compensate it.
-
-   Sometimes, when typesetting letters of different fonts, more or less
-space at such boundaries are needed.  There are two escapes to help with
-this.
-
- -- Escape: \/
-     Increase the width of the preceding glyph so that the spacing
-     between that glyph and the following glyph is correct if the
-     following glyph is a roman glyph.  For example, if an italic 'f' is
-     immediately followed by a roman right parenthesis, then in many
-     fonts the top right portion of the 'f' overlaps the top left of the
-     right parenthesis.  Use this escape sequence whenever an italic
-     glyph is immediately followed by a roman glyph without any
-     intervening space.  This small amount of space is also called
-     "italic correction".
-
- -- Escape: \,
-     Modify the spacing of the following glyph so that the spacing
-     between that glyph and the preceding glyph is correct if the
-     preceding glyph is a roman glyph.  Use this escape sequence
-     whenever a roman glyph is immediately followed by an italic glyph
-     without any intervening space.  In analogy to above, this space
-     could be called "left italic correction", but this term isn't used
-     widely.
-
- -- Escape: \&
-     Insert a zero-width character, which is invisible.  Its intended
-     use is to stop interaction of a character with its surrounding.
-
-        * It prevents the insertion of extra space after an
-          end-of-sentence character.
-
-               Test.
-               Test.
-                   => Test.  Test.
-               Test.\&
-               Test.
-                   => Test. Test.
-
-        * It prevents interpretation of a control character at the
-          beginning of an input line.
-
-               .Test
-                   => warning: `Test' not defined
-               \&.Test
-                   => .Test
-
-        * It prevents kerning between two glyphs.
-
-        * It is needed to map an arbitrary character to nothing in the
-          'tr' request (*note Character Translations::).
-
- -- Escape: \)
-     This escape is similar to '\&' except that it behaves like a
-     character declared with the 'cflags' request to be transparent for
-     the purposes of an end-of-sentence character.
-
-     Its main usage is in macro definitions to protect against arguments
-     starting with a control character.
-
-          .de xxx
-          \)\\$1
-          ..
-          .de yyy
-          \&\\$1
-          ..
-          This is a test.\c
-          .xxx '
-          This is a test.
-              =>This is a test.'  This is a test.
-          This is a test.\c
-          .yyy '
-          This is a test.
-              =>This is a test.' This is a test.
-
-\1f
-File: groff.info,  Node: Sizes,  Next: Strings,  Prev: Fonts and Symbols,  Up: gtroff Reference
-
-5.18 Sizes
-==========
-
-'gtroff' uses two dimensions with each line of text, type size and
-vertical spacing.  The "type size" is approximately the height of the
-tallest glyph.(1)  (*note Sizes-Footnote-1::) "Vertical spacing" is the
-amount of space 'gtroff' allows for a line of text; normally, this is
-about 20% larger than the current type size.  Ratios smaller than this
-can result in hard-to-read text; larger than this, it spreads the text
-out more vertically (useful for term papers).  By default, 'gtroff' uses
-10 point type on 12 point spacing.
-
-   The difference between type size and vertical spacing is known, by
-typesetters, as "leading" (this is pronounced 'ledding').
-
-* Menu:
-
-* Changing Type Sizes::
-* Fractional Type Sizes::
-
-\1f
-File: groff.info,  Node: Sizes-Footnotes,  Up: Sizes
-
-   (1) This is usually the parenthesis.  Note that in most cases the
-real dimensions of the glyphs in a font are _not_ related to its type
-size!  For example, the standard POSTSCRIPT font families 'Times Roman',
-'Helvetica', and 'Courier' can't be used together at 10pt; to get
-acceptable output, the size of 'Helvetica' has to be reduced by one
-point, and the size of 'Courier' must be increased by one point.
-
-\1f
-File: groff.info,  Node: Changing Type Sizes,  Next: Fractional Type Sizes,  Prev: Sizes,  Up: Sizes
-
-5.18.1 Changing Type Sizes
---------------------------
-
- -- Request: .ps [size]
- -- Request: .ps +size
- -- Request: .ps -size
- -- Escape: \ssize
- -- Register: \n[.s]
-     Use the 'ps' request or the '\s' escape to change (increase,
-     decrease) the type size (in points).  Specify SIZE as either an
-     absolute point size, or as a relative change from the current size.
-     The size 0 (for both '.ps' and '\s'), or no argument (for '.ps'
-     only), goes back to the previous size.
-
-     Default scaling indicator of 'size' is 'z'.  If 'size' is negative,
-     it is set to 1u.
-
-     The read-only number register '.s' returns the point size in points
-     as a decimal fraction.  This is a string.  To get the point size in
-     scaled points, use the '.ps' register instead.
-
-     '.s' is associated with the current environment (*note
-     Environments::).
-
-          snap, snap,
-          .ps +2
-          grin, grin,
-          .ps +2
-          wink, wink, \s+2nudge, nudge,\s+8 say no more!
-          .ps 10
-
-     The '\s' escape may be called in a variety of ways.  Much like
-     other escapes there must be a way to determine where the argument
-     ends and the text begins.  Any of the following forms are valid:
-
-     '\sN'
-          Set the point size to N points.  N must be either 0 or in the
-          range 4 to 39.
-
-     '\s+N'
-     '\s-N'
-          Increase or decrease the point size by N points.  N must be
-          exactly one digit.
-
-     '\s(NN'
-          Set the point size to NN points.  NN must be exactly two
-          digits.
-
-     '\s+(NN'
-     '\s-(NN'
-     '\s(+NN'
-     '\s(-NN'
-          Increase or decrease the point size by NN points.  NN must be
-          exactly two digits.
-
-     Note that '\s' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the font on the fly:
-
-          .mc \s[20]x\s[0]
-
-     *Note Fractional Type Sizes::, for yet another syntactical form of
-     using the '\s' escape.
-
- -- Request: .sizes s1 s2 ... sn [0]
-     Some devices may only have certain permissible sizes, in which case
-     'gtroff' rounds to the nearest permissible size.  The 'DESC' file
-     specifies which sizes are permissible for the device.
-
-     Use the 'sizes' request to change the permissible sizes for the
-     current output device.  Arguments are in scaled points; the
-     'sizescale' line in the 'DESC' file for the output device provides
-     the scaling factor.  For example, if the scaling factor is 1000,
-     then the value 12000 is 12 points.
-
-     Each argument can be a single point size (such as '12000'), or a
-     range of sizes (such as '4000-72000').  You can optionally end the
-     list with a zero.
-
- -- Request: .vs [space]
- -- Request: .vs +space
- -- Request: .vs -space
- -- Register: \n[.v]
-     Change (increase, decrease) the vertical spacing by SPACE.  The
-     default scaling indicator is 'p'.
-
-     If 'vs' is called without an argument, the vertical spacing is
-     reset to the previous value before the last call to 'vs'.
-
-     'gtroff' creates a warning of type 'range' if SPACE is negative;
-     the vertical spacing is then set to smallest positive value, the
-     vertical resolution (as given in the '.V' register).
-
-     Note that '.vs 0' isn't saved in a diversion since it doesn't
-     result in a vertical motion.  You explicitly have to repeat this
-     command before inserting the diversion.
-
-     The read-only number register '.v' contains the current vertical
-     spacing; it is associated with the current environment (*note
-     Environments::).
-
-   The effective vertical line spacing consists of four components.
-Breaking a line causes the following actions (in the given order).
-
-   * Move the current point vertically by the "extra pre-vertical line
-     space".  This is the minimum value of all '\x' escapes with a
-     negative argument in the current output line.
-
-   * Move the current point vertically by the vertical line spacing as
-     set with the 'vs' request.
-
-   * Output the current line.
-
-   * Move the current point vertically by the "extra post-vertical line
-     space".  This is the maximum value of all '\x' escapes with a
-     positive argument in the line that has just been output.
-
-   * Move the current point vertically by the "post-vertical line
-     spacing" as set with the 'pvs' request.
-
-   It is usually better to use 'vs' or 'pvs' instead of 'ls' to produce
-double-spaced documents: 'vs' and 'pvs' have a finer granularity for the
-inserted vertical space compared to 'ls'; furthermore, certain
-preprocessors assume single-spacing.
-
-   *Note Manipulating Spacing::, for more details on the '\x' escape and
-the 'ls' request.
-
- -- Request: .pvs [space]
- -- Request: .pvs +space
- -- Request: .pvs -space
- -- Register: \n[.pvs]
-     Change (increase, decrease) the post-vertical spacing by SPACE.
-     The default scaling indicator is 'p'.
-
-     If 'pvs' is called without an argument, the post-vertical spacing
-     is reset to the previous value before the last call to 'pvs'.
-
-     'gtroff' creates a warning of type 'range' if SPACE is zero or
-     negative; the vertical spacing is then set to zero.
-
-     The read-only number register '.pvs' contains the current
-     post-vertical spacing; it is associated with the current
-     environment (*note Environments::).
-
-\1f
-File: groff.info,  Node: Fractional Type Sizes,  Prev: Changing Type Sizes,  Up: Sizes
-
-5.18.2 Fractional Type Sizes
-----------------------------
-
-A "scaled point" is equal to 1/SIZESCALE points, where SIZESCALE is
-specified in the 'DESC' file (1 by default).  There is a new scale
-indicator 'z', which has the effect of multiplying by SIZESCALE.
-Requests and escape sequences in 'gtroff' interpret arguments that
-represent a point size as being in units of scaled points, but they
-evaluate each such argument using a default scale indicator of 'z'.
-Arguments treated in this way are the argument to the 'ps' request, the
-third argument to the 'cs' request, the second and fourth arguments to
-the 'tkf' request, the argument to the '\H' escape sequence, and those
-variants of the '\s' escape sequence that take a numeric expression as
-their argument (see below).
-
-   For example, suppose SIZESCALE is 1000; then a scaled point is
-equivalent to a millipoint; the request '.ps 10.25' is equivalent to
-'.ps 10.25z' and thus sets the point size to 10250 scaled points, which
-is equal to 10.25 points.
-
-   'gtroff' disallows the use of the 'z' scale indicator in instances
-where it would make no sense, such as a numeric expression whose default
-scale indicator was neither 'u' nor 'z'.  Similarly it would make no
-sense to use a scaling indicator other than 'z' or 'u' in a numeric
-expression whose default scale indicator was 'z', and so 'gtroff'
-disallows this as well.
-
-   There is also new scale indicator 's', which multiplies by the number
-of units in a scaled point.  So, for example, '\n[.ps]s' is equal to
-'1m'.  Be sure not to confuse the 's' and 'z' scale indicators.
-
- -- Register: \n[.ps]
-     A read-only number register returning the point size in scaled
-     points.
-
-     '.ps' is associated with the current environment (*note
-     Environments::).
-
- -- Register: \n[.psr]
- -- Register: \n[.sr]
-     The last-requested point size in scaled points is contained in the
-     '.psr' read-only number register.  The last requested point size in
-     points as a decimal fraction can be found in '.sr'.  This is a
-     string-valued read-only number register.
-
-     Note that the requested point sizes are device-independent, whereas
-     the values returned by the '.ps' and '.s' registers are not.  For
-     example, if a point size of 11pt is requested, and a 'sizes'
-     request (or a 'sizescale' line in a 'DESC' file) specifies 10.95pt
-     instead, this value is actually used.
-
-     Both registers are associated with the current environment (*note
-     Environments::).
-
-   The '\s' escape has the following syntax for working with fractional
-type sizes:
-
-'\s[N]'
-'\s'N''
-     Set the point size to N scaled points; N is a numeric expression
-     with a default scale indicator of 'z'.
-
-'\s[+N]'
-'\s[-N]'
-'\s+[N]'
-'\s-[N]'
-'\s'+N''
-'\s'-N''
-'\s+'N''
-'\s-'N''
-     Increase or or decrease the point size by N scaled points; N is a
-     numeric expression (which may start with a minus sign) with a
-     default scale indicator of 'z'.
-
-   *Note Font Files::.
-
-\1f
-File: groff.info,  Node: Strings,  Next: Conditionals and Loops,  Prev: Sizes,  Up: gtroff Reference
-
-5.19 Strings
-============
-
-'gtroff' has string variables, which are entirely for user convenience
-(i.e. there are no built-in strings exept '.T', but even this is a
-read-write string variable).
-
-   Although the following requests can be used to create strings, simply
-using an undefined string will cause it to be defined as empty.  *Note
-Identifiers::.
-
- -- Request: .ds name [string]
- -- Request: .ds1 name [string]
- -- Escape: \*n
- -- Escape: \*(nm
- -- Escape: \*[name arg1 arg2 ...]
-     Define and access a string variable NAME (one-character name N,
-     two-character name NM).  If NAME already exists, 'ds' overwrites
-     the previous definition.  Only the syntax form using brackets can
-     take arguments that are handled identically to macro arguments; the
-     single exception is that a closing bracket as an argument must be
-     enclosed in double quotes.  *Note Request and Macro Arguments::,
-     and *note Parameters::.
-
-     Example:
-
-          .ds foo a \\$1 test
-          .
-          This is \*[foo nice].
-              => This is a nice test.
-
-     The '\*' escape "interpolates" (expands in-place) a
-     previously-defined string variable.  To be more precise, the stored
-     string is pushed onto the input stack, which is then parsed by
-     'gtroff'.  Similar to number registers, it is possible to nest
-     strings, i.e., string variables can be called within string
-     variables.
-
-     If the string named by the '\*' escape does not exist, it is
-     defined as empty, and a warning of type 'mac' is emitted (see *note
-     Debugging::, for more details).
-
-     *Caution:* Unlike other requests, the second argument to the 'ds'
-     request takes up the entire line including trailing spaces.  This
-     means that comments on a line with such a request can introduce
-     unwanted space into a string.
-
-          .ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
-
-     Instead the comment should be put on another line or have the
-     comment escape adjacent with the end of the string.
-
-          .ds UX \s-1UNIX\s0\u\s-3tm\s0\d\"  UNIX trademark
-
-     To produce leading space the string can be started with a double
-     quote.  No trailing quote is needed; in fact, any trailing quote is
-     included in your string.
-
-          .ds sign "           Yours in a white wine sauce,
-
-     Strings are not limited to a single line of text.  A string can
-     span several lines by escaping the newlines with a backslash.  The
-     resulting string is stored _without_ the newlines.
-
-          .ds foo lots and lots \
-          of text are on these \
-          next several lines
-
-     It is not possible to have real newlines in a string.  To put a
-     single double quote character into a string, use two consecutive
-     double quote characters.
-
-     The 'ds1' request turns off compatibility mode while interpreting a
-     string.  To be more precise, a "compatibility save" input token is
-     inserted at the beginning of the string, and a "compatibility
-     restore" input token at the end.
-
-          .nr xxx 12345
-          .ds aa The value of xxx is \\n[xxx].
-          .ds1 bb The value of xxx ix \\n[xxx].
-          .
-          .cp 1
-          .
-          \*(aa
-              => warning: number register `[' not defined
-              => The value of xxx is 0xxx].
-          \*(bb
-              => The value of xxx ix 12345.
-
-     Strings, macros, and diversions (and boxes) share the same name
-     space.  Internally, even the same mechanism is used to store them.
-     This has some interesting consequences.  For example, it is
-     possible to call a macro with string syntax and vice versa.
-
-          .de xxx
-          a funny test.
-          ..
-          This is \*[xxx]
-              => This is a funny test.
-
-          .ds yyy a funny test
-          This is
-          .yyy
-              => This is a funny test.
-
-     In particular, interpolating a string does not hide existing macro
-     arguments.  Thus in a macro, a more efficient way of doing
-
-          .xx \\$@
-
-     is
-
-          \\*[xx]\\
-
-     Note that the latter calling syntax doesn't change the value of
-     '\$0', which is then inherited from the calling macro.
-
-     Diversions and boxes can be also called with string syntax.
-
-     Another consequence is that you can copy one-line diversions or
-     boxes to a string.
-
-          .di xxx
-          a \fItest\fR
-          .br
-          .di
-          .ds yyy This is \*[xxx]\c
-          \*[yyy].
-              => This is a test.
-
-     As the previous example shows, it is possible to store formatted
-     output in strings.  The '\c' escape prevents the insertion of an
-     additional blank line in the output.
-
-     Copying diversions longer than a single output line produces
-     unexpected results.
-
-          .di xxx
-          a funny
-          .br
-          test
-          .br
-          .di
-          .ds yyy This is \*[xxx]\c
-          \*[yyy].
-              => test This is a funny.
-
-     Usually, it is not predictable whether a diversion contains one or
-     more output lines, so this mechanism should be avoided.  With UNIX
-     'troff', this was the only solution to strip off a final newline
-     from a diversion.  Another disadvantage is that the spaces in the
-     copied string are already formatted, making them unstretchable.
-     This can cause ugly results.
-
-     A clean solution to this problem is available in GNU 'troff', using
-     the requests 'chop' to remove the final newline of a diversion, and
-     'unformat' to make the horizontal spaces stretchable again.
-
-          .box xxx
-          a funny
-          .br
-          test
-          .br
-          .box
-          .chop xxx
-          .unformat xxx
-          This is \*[xxx].
-              => This is a funny test.
-
-     *Note Gtroff Internals::, for more information.
-
- -- Request: .as name [string]
- -- Request: .as1 name [string]
-     The 'as' request is similar to 'ds' but appends STRING to the
-     string stored as NAME instead of redefining it.  If NAME doesn't
-     exist yet, it is created.
-
-          .as sign " with shallots, onions and garlic,
-
-     The 'as1' request is similar to 'as', but compatibility mode is
-     switched off while the appended string is interpreted.  To be more
-     precise, a "compatibility save" input token is inserted at the
-     beginning of the appended string, and a "compatibility restore"
-     input token at the end.
-
-   Rudimentary string manipulation routines are given with the next two
-requests.
-
- -- Request: .substring str n1 [n2]
-     Replace the string named STR with the substring defined by the
-     indices N1 and N2.  The first character in the string has index 0.
-     If N2 is omitted, it is implicitly set to the largest valid value
-     (the string length minus one).  If the index value N1 or N2 is
-     negative, it is counted from the end of the string, going
-     backwards: The last character has index -1, the character before
-     the last character has index -2, etc.
-
-          .ds xxx abcdefgh
-          .substring xxx 1 -4
-          \*[xxx]
-              => bcde
-          .substring xxx 2
-          \*[xxx]
-              => de
-
- -- Request: .length reg str
-     Compute the number of characters of STR and return it in the number
-     register REG.  If REG doesn't exist, it is created.  'str' is read
-     in copy mode.
-
-          .ds xxx abcd\h'3i'efgh
-          .length yyy \*[xxx]
-          \n[yyy]
-              => 14
-
- -- Request: .rn xx yy
-     Rename the request, macro, diversion, or string XX to YY.
-
- -- Request: .rm xx
-     Remove the request, macro, diversion, or string XX.  'gtroff'
-     treats subsequent invocations as if the object had never been
-     defined.
-
- -- Request: .als new old
-     Create an alias named NEW for the request, string, macro, or
-     diversion object named OLD.  The new name and the old name are
-     exactly equivalent (it is similar to a hard rather than a soft
-     link).  If OLD is undefined, 'gtroff' generates a warning of type
-     'mac' and ignores the request.
-
-     To understand how the 'als' request works it is probably best to
-     think of two different pools: one pool for objects (macros,
-     strings, etc.), and another one for names.  As soon as an object is
-     defined, 'gtroff' adds it to the object pool, adds its name to the
-     name pool, and creates a link between them.  When 'als' creates an
-     alias, it adds a new name to the name pool that gets linked to the
-     same object as the old name.
-
-     Now consider this example.
-
-          .de foo
-          ..
-          .
-          .als bar foo
-          .
-          .de bar
-          .  foo
-          ..
-          .
-          .bar
-              => input stack limit exceeded
-
-     The definition of macro 'bar' replaces the old object this name is
-     linked to.  However, the alias to 'foo' is still active!  In other
-     words, 'foo' is still linked to the same object as 'bar', and the
-     result of calling 'bar' is an infinite, recursive loop that finally
-     leads to an error.
-
-     To undo an alias, simply call 'rm' on the aliased name.  The object
-     itself is not destroyed until there are no more aliases.
-
- -- Request: .chop xx
-     Remove (chop) the last character from the macro, string, or
-     diversion named XX.  This is useful for removing the newline from
-     the end of diversions that are to be interpolated as strings.  This
-     command can be used repeatedly; see *note Gtroff Internals::, for
-     details on nodes inserted additionally by 'gtroff'.
-
-   *Note Identifiers::, and *note Comments::.
-
-\1f
-File: groff.info,  Node: Conditionals and Loops,  Next: Writing Macros,  Prev: Strings,  Up: gtroff Reference
-
-5.20 Conditionals and Loops
-===========================
-
-* Menu:
-
-* Operators in Conditionals::
-* if-else::
-* while::
-
-\1f
-File: groff.info,  Node: Operators in Conditionals,  Next: if-else,  Prev: Conditionals and Loops,  Up: Conditionals and Loops
-
-5.20.1 Operators in Conditionals
---------------------------------
-
-In 'if', 'ie', and 'while' requests, in addition to ordinary *note
-Expressions::, there are several more operators available:
-
-'e'
-'o'
-     True if the current page is even or odd numbered (respectively).
-
-'n'
-     True if the document is being processed in nroff mode (i.e., the
-     '.nroff' command has been issued).  *Note Troff and Nroff Mode::.
-
-'t'
-     True if the document is being processed in troff mode (i.e., the
-     '.troff' command has been issued).  *Note Troff and Nroff Mode::.
-
-'v'
-     Always false.  This condition is for compatibility with other
-     'troff' versions only (identifying a '-Tversatec' device).
-
-''XXX'YYY''
-     True if the output produced by XXX is equal to the output produced
-     by YYY.  Other characters can be used in place of the single
-     quotes; the same set of delimiters as for the '\D' escape is used
-     (*note Escapes::).  'gtroff' formats XXX and YYY in separate
-     environments; after the comparison the resulting data is discarded.
-
-          .ie "|"\fR|\fP" \
-          true
-          .el \
-          false
-              => true
-
-     The resulting motions, glyph sizes, and fonts have to match,(1)
-     (*note Operators in Conditionals-Footnote-1::) and not the
-     individual motion, size, and font requests.  In the previous
-     example, '|' and '\fR|\fP' both result in a roman '|' glyph with
-     the same point size and at the same location on the page, so the
-     strings are equal.  If '.ft I' had been added before the '.ie', the
-     result would be "false" because (the first) '|' produces an italic
-     '|' rather than a roman one.
-
-     To compare strings without processing, surround the data with '\?'.
-
-          .ie "\?|\?"\?\fR|\fP\?" \
-          true
-          .el \
-          false
-              => false
-
-     Since data protected with '\?' is read in copy-in mode it is even
-     possible to use incomplete input without causing an error.
-
-          .ds a \[
-          .ds b \[
-          .ie '\?\*a\?'\?\*b\?' \
-          true
-          .el \
-          false
-              => true
-
-'r XXX'
-     True if there is a number register named XXX.
-
-'d XXX'
-     True if there is a string, macro, diversion, or request named XXX.
-
-'m XXX'
-     True if there is a color named XXX.
-
-'c G'
-     True if there is a glyph G available(2) (*note Operators in
-     Conditionals-Footnote-2::); G is either an ASCII character or a
-     special character ('\N'XXX'', '\(GG' or '\[GGG]'); the condition is
-     also true if G has been defined by the 'char' request.
-
-'F FONT'
-     True if a font named FONT exists.  FONT is handled as if it was
-     opened with the 'ft' request (this is, font translation and styles
-     are applied), without actually mounting it.
-
-     This test doesn't load the complete font but only its header to
-     verify its validity.
-
-'S STYLE'
-     True if style STYLE has been registered.  Font translation is
-     applied.
-
-   Note that these operators can't be combined with other operators like
-':' or '&'; only a leading '!' (without whitespace between the
-exclamation mark and the operator) can be used to negate the result.
-
-     .nr xxx 1
-     .ie !r xxx \
-     true
-     .el \
-     false
-         => false
-
-   A whitespace after '!' always evaluates to zero (this bizarre
-behaviour is due to compatibility with UNIX 'troff').
-
-     .nr xxx 1
-     .ie ! r xxx \
-     true
-     .el \
-     false
-         => r xxx true
-
-   It is possible to omit the whitespace before the argument to the 'r',
-'d', and 'c' operators.
-
-   *Note Expressions::.
-
-\1f
-File: groff.info,  Node: Operators in Conditionals-Footnotes,  Up: Operators in Conditionals
-
-   (1) The created output nodes must be identical.  *Note Gtroff
-Internals::.
-
-   (2) The name of this conditional operator is a misnomer since it
-tests names of output glyphs.
-
-\1f
-File: groff.info,  Node: if-else,  Next: while,  Prev: Operators in Conditionals,  Up: Conditionals and Loops
-
-5.20.2 if-else
---------------
-
-'gtroff' has if-then-else constructs like other languages, although the
-formatting can be painful.
-
- -- Request: .if expr anything
-
-     Evaluate the expression EXPR, and executes ANYTHING (the remainder
-     of the line) if EXPR evaluates to a value greater than zero (true).
-     ANYTHING is interpreted as though it was on a line by itself
-     (except that leading spaces are swallowed).  *Note Operators in
-     Conditionals::, for more info.
-
-          .nr xxx 1
-          .nr yyy 2
-          .if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
-              => true
-
- -- Request: .nop anything
-     Executes ANYTHING.  This is similar to '.if 1'.
-
- -- Request: .ie expr anything
- -- Request: .el anything
-     Use the 'ie' and 'el' requests to write an if-then-else.  The first
-     request is the 'if' part and the latter is the 'else' part.
-
-          .ie n .ls 2 \" double-spacing in nroff
-          .el   .ls 1 \" single-spacing in troff
-
- -- Escape: \{
- -- Escape: \}
-     In many cases, an if (or if-else) construct needs to execute more
-     than one request.  This can be done using the escapes '\{' (which
-     must start the first line) and '\}' (which must end the last line).
-
-          .ie t \{\
-          .    ds lq ``
-          .    ds rq ''
-          .\}
-          .el \{\
-          .    ds lq ""
-          .    ds rq ""
-          .\}
-
-   *Note Expressions::.
-
-\1f
-File: groff.info,  Node: while,  Prev: if-else,  Up: Conditionals and Loops
-
-5.20.3 while
-------------
-
-'gtroff' provides a looping construct using the 'while' request, which
-is used much like the 'if' (and related) requests.
-
- -- Request: .while expr anything
-     Evaluate the expression EXPR, and repeatedly execute ANYTHING (the
-     remainder of the line) until EXPR evaluates to 0.
-
-          .nr a 0 1
-          .while (\na < 9) \{\
-          \n+a,
-          .\}
-          \n+a
-              => 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
-
-     Some remarks.
-
-        * The body of a 'while' request is treated like the body of a
-          'de' request: 'gtroff' temporarily stores it in a macro that
-          is deleted after the loop has been exited.  It can
-          considerably slow down a macro if the body of the 'while'
-          request (within the macro) is large.  Each time the macro is
-          executed, the 'while' body is parsed and stored again as a
-          temporary macro.
-
-               .de xxx
-               .  nr num 10
-               .  while (\\n[num] > 0) \{\
-               .    \" many lines of code
-               .    nr num -1
-               .  \}
-               ..
-
-          The traditional and ofter better solution (UNIX 'troff'
-          doesn't have the 'while' request) is to use a recursive macro
-          instead that is parsed only once during its definition.
-
-               .de yyy
-               .  if (\\n[num] > 0) \{\
-               .    \" many lines of code
-               .    nr num -1
-               .    yyy
-               .  \}
-               ..
-               .
-               .de xxx
-               .  nr num 10
-               .  yyy
-               ..
-
-          Note that the number of available recursion levels is set
-          to 1000 (this is a compile-time constant value of 'gtroff').
-
-        * The closing brace of a 'while' body must end a line.
-
-               .if 1 \{\
-               .  nr a 0 1
-               .  while (\n[a] < 10) \{\
-               .    nop \n+[a]
-               .\}\}
-                   => unbalanced \{ \}
-
- -- Request: .break
-     Break out of a 'while' loop.  Be sure not to confuse this with the
-     'br' request (causing a line break).
-
- -- Request: .continue
-     Finish the current iteration of a 'while' loop, immediately
-     restarting the next iteration.
-
-   *Note Expressions::.
-
-\1f
-File: groff.info,  Node: Writing Macros,  Next: Page Motions,  Prev: Conditionals and Loops,  Up: gtroff Reference
-
-5.21 Writing Macros
-===================
-
-A "macro" is a collection of text and embedded commands that can be
-invoked multiple times.  Use macros to define common operations.  *Note
-Strings::, for a (limited) alternative syntax to call macros.
-
-   Although the following requests can be used to create macros, simply
-using an undefined macro will cause it to be defined as empty.  *Note
-Identifiers::.
-
- -- Request: .de name [end]
- -- Request: .de1 name [end]
- -- Request: .dei name [end]
- -- Request: .dei1 name [end]
-     Define a new macro named NAME.  'gtroff' copies subsequent lines
-     (starting with the next one) into an internal buffer until it
-     encounters the line '..' (two dots).  If the optional second
-     argument to 'de' is present it is used as the macro closure request
-     instead of '..'.
-
-     There can be whitespace after the first dot in the line containing
-     the ending token (either '.' or macro 'END').  Don't insert a tab
-     character immediately after the '..', otherwise it isn't recognized
-     as the end-of-macro symbol.(1)  (*note Writing Macros-Footnote-1::)
-
-     Here a small example macro called 'P' that causes a break and
-     inserts some vertical space.  It could be used to separate
-     paragraphs.
-
-          .de P
-          .  br
-          .  sp .8v
-          ..
-
-     The following example defines a macro within another.  Remember
-     that expansion must be protected twice; once for reading the macro
-     and once for executing.
-
-          \# a dummy macro to avoid a warning
-          .de end
-          ..
-          .
-          .de foo
-          .  de bar end
-          .    nop \f[B]Hallo \\\\$1!\f[]
-          .  end
-          ..
-          .
-          .foo
-          .bar Joe
-              => Hallo Joe!
-
-     Since '\f' has no expansion, it isn't necessary to protect its
-     backslash.  Had we defined another macro within 'bar' that takes a
-     parameter, eight backslashes would be necessary before '$1'.
-
-     The 'de1' request turns off compatibility mode while executing the
-     macro.  On entry, the current compatibility mode is saved and
-     restored at exit.
-
-          .nr xxx 12345
-          .
-          .de aa
-          The value of xxx is \\n[xxx].
-          ..
-          .de1 bb
-          The value of xxx ix \\n[xxx].
-          ..
-          .
-          .cp 1
-          .
-          .aa
-              => warning: number register `[' not defined
-              => The value of xxx is 0xxx].
-          .bb
-              => The value of xxx ix 12345.
-
-     The 'dei' request defines a macro indirectly.  That is, it expands
-     strings whose names are NAME or END before performing the append.
-
-     This:
-
-          .ds xx aa
-          .ds yy bb
-          .dei xx yy
-
-     is equivalent to:
-
-          .de aa bb
-
-     The 'dei1' request is similar to 'dei' but with compatibility mode
-     switched off during execution of the defined macro.
-
-     If compatibility mode is on, 'de' (and 'dei') behave similar to
-     'de1' (and 'dei1'): A 'compatibility save' token is inserted at the
-     beginning, and a 'compatibility restore' token at the end, with
-     compatibility mode switched on during execution.  *Note Gtroff
-     Internals::, for more information on switching compatibility mode
-     on and off in a single document.
-
-     Using 'trace.tmac', you can trace calls to 'de' and 'de1'.
-
-     Note that macro identifiers are shared with identifiers for strings
-     and diversions.
-
-     *Note the description of the 'als' request: als, for possible
-     pitfalls if redefining a macro that has been aliased.
-
- -- Request: .am name [end]
- -- Request: .am1 name [end]
- -- Request: .ami name [end]
- -- Request: .ami1 name [end]
-     Works similarly to 'de' except it appends onto the macro named
-     NAME.  So, to make the previously defined 'P' macro actually do
-     indented instead of block paragraphs, add the necessary code to the
-     existing macro like this:
-
-          .am P
-          .ti +5n
-          ..
-
-     The 'am1' request turns off compatibility mode while executing the
-     appended macro piece.  To be more precise, a "compatibility save"
-     input token is inserted at the beginning of the appended code, and
-     a "compatibility restore" input token at the end.
-
-     The 'ami' request appends indirectly, meaning that 'gtroff' expands
-     strings whose names are NAME or END before performing the append.
-
-     The 'ami1' request is similar to 'ami' but compatibility mode is
-     switched off during execution of the defined macro.
-
-     Using 'trace.tmac', you can trace calls to 'am' and 'am1'.
-
-   *Note Strings::, for the 'als' and 'rn' request to create an alias
-and rename a macro, respectively.
-
-   The 'de', 'am', 'di', 'da', 'ds', and 'as' requests (together with
-its variants) only create a new object if the name of the macro,
-diversion or string diversion is currently undefined or if it is defined
-to be a request; normally they modify the value of an existing object.
-
- -- Request: .return [anything]
-     Exit a macro, immediately returning to the caller.
-
-     If called with an argument, exit twice, namely the current macro
-     and the macro one level higher.  This is used to define a wrapper
-     macro for 'return' in 'trace.tmac'.
-
-* Menu:
-
-* Copy-in Mode::
-* Parameters::
-
-\1f
-File: groff.info,  Node: Writing Macros-Footnotes,  Up: Writing Macros
-
-   (1) While it is possible to define and call a macro '.' with
-
-     .de .
-     .  tm foo
-     ..
-     .
-     ..    \" This calls macro `.'!
-
-you can't use this as the end-of-macro macro: during a macro definition,
-'..' is never handled as a call to '.', even if you say '.de foo .'
-explicitly.
-
diff --git a/doc/groff.info-2 b/doc/groff.info-2
deleted file mode 100644 (file)
index a6c9348..0000000
+++ /dev/null
@@ -1,8155 +0,0 @@
-This is groff.info, produced by makeinfo version 5.2dev from
-groff.texinfo.
-
-This manual documents GNU 'troff' version 1.22.3.
-
-   Copyright © 1994-2014 Free Software Foundation, Inc.
-
-     Permission is granted to copy, distribute and/or modify this
-     document under the terms of the GNU Free Documentation License,
-     Version 1.3 or any later version published by the Free Software
-     Foundation; with no Invariant Sections, with the Front-Cover texts
-     being "A GNU Manual," and with the Back-Cover Texts as in (a)
-     below.  A copy of the license is included in the section entitled
-     "GNU Free Documentation License."
-
-     (a) The FSF's Back-Cover Text is: "You have the freedom to copy and
-     modify this GNU manual.  Buying copies from the FSF supports it in
-     developing GNU and promoting software freedom."
-INFO-DIR-SECTION Typesetting
-START-INFO-DIR-ENTRY
-* Groff: (groff).               The GNU troff document formatting system.
-END-INFO-DIR-ENTRY
-
-\1f
-File: groff.info,  Node: Copy-in Mode,  Next: Parameters,  Prev: Writing Macros,  Up: Writing Macros
-
-5.21.1 Copy-in Mode
--------------------
-
-When 'gtroff' reads in the text for a macro, string, or diversion, it
-copies the text (including request lines, but excluding escapes) into an
-internal buffer.  Escapes are converted into an internal form, except
-for '\n', '\$', '\*', '\\' and '\<RET>', which are evaluated and
-inserted into the text where the escape was located.  This is known as
-"copy-in" mode or "copy" mode.
-
-   What this means is that you can specify when these escapes are to be
-evaluated (either at copy-in time or at the time of use) by insulating
-the escapes with an extra backslash.  Compare this to the '\def' and
-'\edef' commands in TeX.
-
-   The following example prints the numbers 20 and 10:
-
-     .nr x 20
-     .de y
-     .nr x 10
-     \&\nx
-     \&\\nx
-     ..
-     .y
-
-\1f
-File: groff.info,  Node: Parameters,  Prev: Copy-in Mode,  Up: Writing Macros
-
-5.21.2 Parameters
------------------
-
-The arguments to a macro or string can be examined using a variety of
-escapes.
-
- -- Register: \n[.$]
-     The number of arguments passed to a macro or string.  This is a
-     read-only number register.
-
-     Note that the 'shift' request can change its value.
-
-   Any individual argument can be retrieved with one of the following
-escapes:
-
- -- Escape: \$n
- -- Escape: \$(nn
- -- Escape: \$[nnn]
-     Retrieve the Nth, NNth or NNNth argument.  As usual, the first form
-     only accepts a single number (larger than zero), the second a
-     two-digit number (larger or equal to 10), and the third any
-     positive integer value (larger than zero).  Macros and strings can
-     have an unlimited number of arguments.  Note that due to copy-in
-     mode, use two backslashes on these in actual use to prevent
-     interpolation until the macro is actually invoked.
-
- -- Request: .shift [n]
-     Shift the arguments 1 position, or as many positions as specified
-     by its argument.  After executing this request, argument I becomes
-     argument I-N; arguments 1 to N are no longer available.  Shifting
-     by negative amounts is currently undefined.
-
-     The register '.$' is adjusted accordingly.
-
- -- Escape: \$*
- -- Escape: \$@
-     In some cases it is convenient to use all of the arguments at once
-     (for example, to pass the arguments along to another macro).  The
-     '\$*' escape concatenates all the arguments separated by spaces.  A
-     similar escape is '\$@', which concatenates all the arguments with
-     each surrounded by double quotes, and separated by spaces.  If not
-     in compatibility mode, the input level of double quotes is
-     preserved (see *note Request and Macro Arguments::).
-
- -- Escape: \$^
-     Handle the parameters of a macro as if they were an argument to the
-     'ds' or similar requests.
-
-          .de foo
-          .  tm $1=`\\$1'
-          .  tm $2=`\\$2'
-          .  tm $*=`\\$*'
-          .  tm $@=`\\$@'
-          .  tm $^=`\\$^'
-          ..
-          .foo " This is a "test"
-              => $1=` This is a '
-              => $2=`test"'
-              => $*=` This is a  test"'
-              => $@=`" This is a " "test""'
-              => $^=`" This is a "test"'
-
-     This escape is useful mainly for macro packages like 'trace.tmac',
-     which redefines some requests and macros for debugging purposes.
-
- -- Escape: \$0
-     The name used to invoke the current macro.  The 'als' request can
-     make a macro have more than one name.
-
-     If a macro is called as a string (within another macro), the value
-     of '\$0' isn't changed.
-
-          .de foo
-          .  tm \\$0
-          ..
-          .als foo bar
-          .
-          .de aaa
-          .  foo
-          ..
-          .de bbb
-          .  bar
-          ..
-          .de ccc
-          \\*[foo]\\
-          ..
-          .de ddd
-          \\*[bar]\\
-          ..
-          .
-          .aaa
-              => foo
-          .bbb
-              => bar
-          .ccc
-              => ccc
-          .ddd
-              => ddd
-
-   *Note Request and Macro Arguments::.
-
-\1f
-File: groff.info,  Node: Page Motions,  Next: Drawing Requests,  Prev: Writing Macros,  Up: gtroff Reference
-
-5.22 Page Motions
-=================
-
-*Note Manipulating Spacing::, for a discussion of the main request for
-vertical motion, 'sp'.
-
- -- Request: .mk [reg]
- -- Request: .rt [dist]
-     The request 'mk' can be used to mark a location on a page, for
-     movement to later.  This request takes a register name as an
-     argument in which to store the current page location.  With no
-     argument it stores the location in an internal register.  The
-     results of this can be used later by the 'rt' or the 'sp' request
-     (or the '\v' escape).
-
-     The 'rt' request returns _upwards_ to the location marked with the
-     last 'mk' request.  If used with an argument, return to a position
-     which distance from the top of the page is DIST (no previous call
-     to 'mk' is necessary in this case).  Default scaling indicator is
-     'v'.
-
-     Here a primitive solution for a two-column macro.
-
-          .nr column-length 1.5i
-          .nr column-gap 4m
-          .nr bottom-margin 1m
-          .
-          .de 2c
-          .  br
-          .  mk
-          .  ll \\n[column-length]u
-          .  wh -\\n[bottom-margin]u 2c-trap
-          .  nr right-side 0
-          ..
-          .
-          .de 2c-trap
-          .  ie \\n[right-side] \{\
-          .    nr right-side 0
-          .    po -(\\n[column-length]u + \\n[column-gap]u)
-          .    \" remove trap
-          .    wh -\\n[bottom-margin]u
-          .  \}
-          .  el \{\
-          .    \" switch to right side
-          .    nr right-side 1
-          .    po +(\\n[column-length]u + \\n[column-gap]u)
-          .    rt
-          .  \}
-          ..
-          .
-          .pl 1.5i
-          .ll 4i
-          This is a small test that shows how the
-          rt request works in combination with mk.
-
-          .2c
-          Starting here, text is typeset in two columns.
-          Note that this implementation isn't robust
-          and thus not suited for a real two-column
-          macro.
-
-     Result:
-
-          This is a small test that shows how the
-          rt request works in combination with mk.
-
-          Starting  here,    isn't    robust
-          text is typeset    and   thus  not
-          in two columns.    suited  for   a
-          Note that  this    real two-column
-          implementation     macro.
-
-   The following escapes give fine control of movements about the page.
-
- -- Escape: \v'e'
-     Move vertically, usually from the current location on the page (if
-     no absolute position operator '|' is used).  The argument E
-     specifies the distance to move; positive is downwards and negative
-     upwards.  The default scaling indicator for this escape is 'v'.
-     Beware, however, that 'gtroff' continues text processing at the
-     point where the motion ends, so you should always balance motions
-     to avoid interference with text processing.
-
-     '\v' doesn't trigger a trap.  This can be quite useful; for
-     example, consider a page bottom trap macro that prints a marker in
-     the margin to indicate continuation of a footnote or something
-     similar.
-
-   There are some special-case escapes for vertical motion.
-
- -- Escape: \r
-     Move upwards 1v.
-
- -- Escape: \u
-     Move upwards .5v.
-
- -- Escape: \d
-     Move down .5v.
-
- -- Escape: \h'e'
-     Move horizontally, usually from the current location (if no
-     absolute position operator '|' is used).  The expression E
-     indicates how far to move: positive is rightwards and negative
-     leftwards.  The default scaling indicator for this escape is 'm'.
-
-     This horizontal space is not discarded at the end of a line.  To
-     insert discardable space of a certain length use the 'ss' request.
-
-   There are a number of special-case escapes for horizontal motion.
-
- -- Escape: \<SP>
-     An unbreakable and unpaddable (i.e. not expanded during filling)
-     space.  (Note: This is a backslash followed by a space.)
-
- -- Escape: \~
-     An unbreakable space that stretches like a normal inter-word space
-     when a line is adjusted.
-
- -- Escape: \|
-     A 1/6th em space.  Ignored for TTY output devices (rounded to
-     zero).
-
-     However, if there is a glyph defined in the current font file with
-     name '\|' (note the leading backslash), the width of this glyph is
-     used instead (even for TTYs).
-
- -- Escape: \^
-     A 1/12th em space.  Ignored for TTY output devices (rounded to
-     zero).
-
-     However, if there is a glyph defined in the current font file with
-     name '\^' (note the leading backslash), the width of this glyph is
-     used instead (even for TTYs).
-
- -- Escape: \0
-     A space the size of a digit.
-
-   The following string sets the TeX logo:
-
-     .ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-
- -- Escape: \w'text'
- -- Register: \n[st]
- -- Register: \n[sb]
- -- Register: \n[rst]
- -- Register: \n[rsb]
- -- Register: \n[ct]
- -- Register: \n[ssc]
- -- Register: \n[skw]
-     Return the width of the specified TEXT in basic units.  This allows
-     horizontal movement based on the width of some arbitrary text (e.g.
-     given as an argument to a macro).
-
-          The length of the string `abc' is \w'abc'u.
-              => The length of the string `abc' is 72u.
-
-     Font changes may occur in TEXT, which don't affect current
-     settings.
-
-     After use, '\w' sets several registers:
-
-     'st'
-     'sb'
-          The highest and lowest point of the baseline, respectively, in
-          TEXT.
-
-     'rst'
-     'rsb'
-          Like the 'st' and 'sb' registers, but takes account of the
-          heights and depths of glyphs.  In other words, this gives the
-          highest and lowest point of TEXT.  Values below the baseline
-          are negative.
-
-     'ct'
-          Defines the kinds of glyphs occurring in TEXT:
-
-          0
-               only short glyphs, no descenders or tall glyphs.
-
-          1
-               at least one descender.
-
-          2
-               at least one tall glyph.
-
-          3
-               at least one each of a descender and a tall glyph.
-
-     'ssc'
-          The amount of horizontal space (possibly negative) that should
-          be added to the last glyph before a subscript.
-
-     'skw'
-          How far to right of the center of the last glyph in the '\w'
-          argument, the center of an accent from a roman font should be
-          placed over that glyph.
-
- -- Escape: \kp
- -- Escape: \k(ps
- -- Escape: \k[position]
-     Store the current horizontal position in the _input_ line in number
-     register with name POSITION (one-character name P, two-character
-     name PS).  Use this, for example, to return to the beginning of a
-     string for highlighting or other decoration.
-
- -- Register: \n[hp]
-     The current horizontal position at the input line.
-
- -- Register: \n[.k]
-     A read-only number register containing the current horizontal
-     output position (relative to the current indentation).
-
- -- Escape: \o'abc'
-     Overstrike glyphs A, B, C, ...; the glyphs are centered, and the
-     resulting spacing is the largest width of the affected glyphs.
-
- -- Escape: \zg
-     Print glyph G with zero width, i.e., without spacing.  Use this to
-     overstrike glyphs left-aligned.
-
- -- Escape: \Z'anything'
-     Print ANYTHING, then restore the horizontal and vertical position.
-     The argument may not contain tabs or leaders.
-
-     The following is an example of a strike-through macro:
-
-          .de ST
-          .nr ww \w'\\$1'
-          \Z@\v'-.25m'\l'\\n[ww]u'@\\$1
-          ..
-          .
-          This is
-          .ST "a test"
-          an actual emergency!
-
-\1f
-File: groff.info,  Node: Drawing Requests,  Next: Traps,  Prev: Page Motions,  Up: gtroff Reference
-
-5.23 Drawing Requests
-=====================
-
-'gtroff' provides a number of ways to draw lines and other figures on
-the page.  Used in combination with the page motion commands (see *note
-Page Motions::, for more info), a wide variety of figures can be drawn.
-However, for complex drawings these operations can be quite cumbersome,
-and it may be wise to use graphic preprocessors like 'gpic' or 'ggrn'.
-*Note gpic::, and *note ggrn::, for more information.
-
-   All drawing is done via escapes.
-
- -- Escape: \l'l'
- -- Escape: \l'lg'
-     Draw a line horizontally.  L is the length of the line to be drawn.
-     If it is positive, start the line at the current location and draw
-     to the right; its end point is the new current location.  Negative
-     values are handled differently: The line starts at the current
-     location and draws to the left, but the current location doesn't
-     move.
-
-     L can also be specified absolutely (i.e. with a leading '|'), which
-     draws back to the beginning of the input line.  Default scaling
-     indicator is 'm'.
-
-     The optional second parameter G is a glyph to draw the line with.
-     If this second argument is not specified, 'gtroff' uses the
-     underscore glyph, '\[ru]'.
-
-     To separate the two arguments (to prevent 'gtroff' from
-     interpreting a drawing glyph as a scaling indicator if the glyph is
-     represented by a single character) use '\&'.
-
-     Here a small useful example:
-
-          .de box
-          \[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
-          ..
-
-     Note that this works by outputting a box rule (a vertical line),
-     then the text given as an argument and then another box rule.
-     Finally, the line drawing escapes both draw from the current
-     location to the beginning of the _input_ line - this works because
-     the line length is negative, not moving the current point.
-
- -- Escape: \L'l'
- -- Escape: \L'lg'
-     Draw vertical lines.  Its parameters are similar to the '\l'
-     escape, except that the default scaling indicator is 'v'.  The
-     movement is downwards for positive values, and upwards for negative
-     values.  The default glyph is the box rule glyph, '\[br]'.  As with
-     the vertical motion escapes, text processing blindly continues
-     where the line ends.
-
-          This is a \L'3v'test.
-
-     Here the result, produced with 'grotty'.
-
-          This is a
-                    |
-                    |
-                    |test.
-
- -- Escape: \D'command arg ...'
-     The '\D' escape provides a variety of drawing functions.  Note that
-     on character devices, only vertical and horizontal lines are
-     supported within 'grotty'; other devices may only support a subset
-     of the available drawing functions.
-
-     The default scaling indicator for all subcommands of '\D' is 'm'
-     for horizontal distances and 'v' for vertical ones.  Exceptions are
-     '\D'f ...'' and '\D't ...'', which use 'u' as the default, and
-     '\D'FX ...'', which arguments are treated similar to the 'defcolor'
-     request.
-
-     '\D'l DX DY''
-          Draw a line from the current location to the relative point
-          specified by (DX,DY), where positive values mean down and
-          right, respectively.  The end point of the line is the new
-          current location.
-
-          The following example is a macro for creating a box around a
-          text string; for simplicity, the box margin is taken as a
-          fixed value, 0.2m.
-
-               .de BOX
-               .  nr @wd \w'\\$1'
-               \h'.2m'\
-               \h'-.2m'\v'(.2m - \\n[rsb]u)'\
-               \D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
-               \D'l (\\n[@wd]u + .4m) 0'\
-               \D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
-               \D'l -(\\n[@wd]u + .4m) 0'\
-               \h'.2m'\v'-(.2m - \\n[rsb]u)'\
-               \\$1\
-               \h'.2m'
-               ..
-
-          First, the width of the string is stored in register '@wd'.
-          Then, four lines are drawn to form a box, properly offset by
-          the box margin.  The registers 'rst' and 'rsb' are set by the
-          '\w' escape, containing the largest height and depth of the
-          whole string.
-
-     '\D'c D''
-          Draw a circle with a diameter of D with the leftmost point at
-          the current position.  After drawing, the current location is
-          positioned at the rightmost point of the circle.
-
-     '\D'C D''
-          Draw a solid circle with the same parameters and behaviour as
-          an outlined circle.  No outline is drawn.
-
-     '\D'e X Y''
-          Draw an ellipse with a horizontal diameter of X and a vertical
-          diameter of Y with the leftmost point at the current position.
-          After drawing, the current location is positioned at the
-          rightmost point of the ellipse.
-
-     '\D'E X Y''
-          Draw a solid ellipse with the same parameters and behaviour as
-          an outlined ellipse.  No outline is drawn.
-
-     '\D'a DX1 DY1 DX2 DY2''
-          Draw an arc clockwise from the current location through the
-          two specified relative locations (DX1,DY1) and (DX2,DY2).  The
-          coordinates of the first point are relative to the current
-          position, and the coordinates of the second point are relative
-          to the first point.  After drawing, the current position is
-          moved to the final point of the arc.
-
-     '\D'~ DX1 DY1 DX2 DY2 ...''
-          Draw a spline from the current location to the relative point
-          (DX1,DY1) and then to (DX2,DY2), and so on.  The current
-          position is moved to the terminal point of the drawn curve.
-
-     '\D'f N''
-          Set the shade of gray to be used for filling solid objects
-          to N; N must be an integer between 0 and 1000, where 0
-          corresponds solid white and 1000 to solid black, and values in
-          between correspond to intermediate shades of gray.  This
-          applies only to solid circles, solid ellipses, and solid
-          polygons.  By default, a level of 1000 is used.
-
-          Despite of being silly, the current point is moved
-          horizontally to the right by N.
-
-          Don't use this command!  It has the serious drawback that it
-          is always rounded to the next integer multiple of the
-          horizontal resolution (the value of the 'hor' keyword in the
-          'DESC' file).  Use '\M' (*note Colors::) or '\D'Fg ...''
-          instead.
-
-     '\D'p DX1 DY1 DX2 DY2 ...''
-          Draw a polygon from the current location to the relative
-          position (DX1,DY1) and then to (DX2,DY2) and so on.  When the
-          specified data points are exhausted, a line is drawn back to
-          the starting point.  The current position is changed by adding
-          the sum of all arguments with odd index to the actual
-          horizontal position and the even ones to the vertical
-          position.
-
-     '\D'P DX1 DY1 DX2 DY2 ...''
-          Draw a solid polygon with the same parameters and behaviour as
-          an outlined polygon.  No outline is drawn.
-
-          Here a better variant of the box macro to fill the box with
-          some color.  Note that the box must be drawn before the text
-          since colors in 'gtroff' are not transparent; the filled
-          polygon would hide the text completely.
-
-               .de BOX
-               .  nr @wd \w'\\$1'
-               \h'.2m'\
-               \h'-.2m'\v'(.2m - \\n[rsb]u)'\
-               \M[lightcyan]\
-               \D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
-                    (\\n[@wd]u + .4m) 0 \
-                    0 (\\n[rst]u - \\n[rsb]u + .4m) \
-                    -(\\n[@wd]u + .4m) 0'\
-               \h'.2m'\v'-(.2m - \\n[rsb]u)'\
-               \M[]\
-               \\$1\
-               \h'.2m'
-               ..
-
-          If you want a filled polygon that has exactly the same size as
-          an unfilled one, you must draw both an unfilled and a filled
-          polygon.  A filled polygon is always smaller than an unfilled
-          one because the latter uses straight lines with a given line
-          thickness to connect the polygon's corners, while the former
-          simply fills the area defined by the coordinates.
-
-               \h'1i'\v'1i'\
-               \# increase line thickness
-               \Z'\D't 5p''\
-               \# draw unfilled polygon
-               \Z'\D'p 3 3 -6 0''\
-               \# draw filled polygon
-               \Z'\D'P 3 3 -6 0''
-
-     '\D't N''
-          Set the current line thickness to N machine units.  A value of
-          zero selects the smallest available line thickness.  A
-          negative value makes the line thickness proportional to the
-          current point size (this is the default behaviour of AT&T
-          'troff').
-
-          Despite of being silly, the current point is moved
-          horizontally to the right by N.
-
-     '\D'FSCHEME COLOR_COMPONENTS''
-          Change current fill color.  SCHEME is a single letter denoting
-          the color scheme: 'r' (rgb), 'c' (cmy), 'k' (cmyk), 'g'
-          (gray), or 'd' (default color).  The color components use
-          exactly the same syntax as in the 'defcolor' request (*note
-          Colors::); the command '\D'Fd'' doesn't take an argument.
-
-          _No_ position changing!
-
-          Examples:
-
-               \D'Fg .3'      \" same gray as \D'f 700'
-               \D'Fr #0000ff' \" blue
-
-   *Note Graphics Commands::.
-
- -- Escape: \b'string'
-     "Pile" a sequence of glyphs vertically, and center it vertically on
-     the current line.  Use it to build large brackets and braces.
-
-     Here an example how to create a large opening brace:
-
-          \b'\[lt]\[bv]\[lk]\[bv]\[lb]'
-
-     The first glyph is on the top, the last glyph in STRING is at the
-     bottom.  Note that 'gtroff' separates the glyphs vertically by 1m,
-     and the whole object is centered 0.5m above the current baseline;
-     the largest glyph width is used as the width for the whole object.
-     This rather unflexible positioning algorithm doesn't work with
-     '-Tdvi' since the bracket pieces vary in height for this device.
-     Instead, use the 'eqn' preprocessor.
-
-     *Note Manipulating Spacing::, how to adjust the vertical spacing
-     with the '\x' escape.
-
-\1f
-File: groff.info,  Node: Traps,  Next: Diversions,  Prev: Drawing Requests,  Up: gtroff Reference
-
-5.24 Traps
-==========
-
-"Traps" are locations that, when reached, call a specified macro.  These
-traps can occur at a given location on the page, at a given location in
-the current diversion, at a blank line, after a certain number of input
-lines, or at the end of input.
-
-   Setting a trap is also called "planting".  It is also said that a
-trap is "sprung" if the associated macro is executed.
-
-* Menu:
-
-* Page Location Traps::
-* Diversion Traps::
-* Input Line Traps::
-* Blank Line Traps::
-* Leading Spaces Traps::
-* End-of-input Traps::
-
-\1f
-File: groff.info,  Node: Page Location Traps,  Next: Diversion Traps,  Prev: Traps,  Up: Traps
-
-5.24.1 Page Location Traps
---------------------------
-
-"Page location traps" perform an action when 'gtroff' reaches or passes
-a certain vertical location on the page.  Page location traps have a
-variety of purposes, including:
-
-   * setting headers and footers
-
-   * setting body text in multiple columns
-
-   * setting footnotes
-
- -- Request: .vpt flag
- -- Register: \n[.vpt]
-     Enable vertical position traps if FLAG is non-zero, or disables
-     them otherwise.  Vertical position traps are traps set by the 'wh'
-     or 'dt' requests.  Traps set by the 'it' request are not vertical
-     position traps.  The parameter that controls whether vertical
-     position traps are enabled is global.  Initially vertical position
-     traps are enabled.  The current setting of this is available in the
-     '.vpt' read-only number register.
-
-     Note that a page can't be ejected if 'vpt' is set to zero.
-
- -- Request: .wh dist [macro]
-     Set a page location trap.  Non-negative values for DIST set the
-     trap relative to the top of the page; negative values set the trap
-     relative to the bottom of the page.  Default scaling indicator is
-     'v'; values of DIST are always rounded to be multiples of the
-     vertical resolution (as given in register '.V').
-
-     MACRO is the name of the macro to execute when the trap is sprung.
-     If MACRO is missing, remove the first trap (if any) at DIST.
-
-     The following is a simple example of how many macro packages set
-     headers and footers.
-
-          .de hd                \" Page header
-          '  sp .5i
-          .  tl 'Title''date'
-          '  sp .3i
-          ..
-          .
-          .de fo                \" Page footer
-          '  sp 1v
-          .  tl ''%''
-          '  bp
-          ..
-          .
-          .wh 0   hd            \" trap at top of the page
-          .wh -1i fo            \" trap one inch from bottom
-
-     A trap at or below the bottom of the page is ignored; it can be
-     made active by either moving it up or increasing the page length so
-     that the trap is on the page.
-
-     Negative trap values always use the _current_ page length; they are
-     not converted to an absolute vertical position:
-
-          .pl 5i
-          .wh -1i xx
-          .ptr
-              => xx      -240
-          .pl 100i
-          .ptr
-              => xx      -240
-
-     It is possible to have more than one trap at the same location; to
-     do so, the traps must be defined at different locations, then moved
-     together with the 'ch' request; otherwise the second trap would
-     replace the first one.  Earlier defined traps hide later defined
-     traps if moved to the same position (the many empty lines caused by
-     the 'bp' request are omitted in the following example):
-
-          .de a
-          .  nop a
-          ..
-          .de b
-          .  nop b
-          ..
-          .de c
-          .  nop c
-          ..
-          .
-          .wh 1i a
-          .wh 2i b
-          .wh 3i c
-          .bp
-              => a b c
-          .ch b 1i
-          .ch c 1i
-          .bp
-              => a
-          .ch a 0.5i
-          .bp
-              => a b
-
- -- Register: \n[.t]
-     A read-only number register holding the distance to the next trap.
-
-     If there are no traps between the current position and the bottom
-     of the page, it contains the distance to the page bottom.  In a
-     diversion, the distance to the page bottom is infinite (the
-     returned value is the biggest integer that can be represented in
-     'groff') if there are no diversion traps.
-
- -- Request: .ch macro [dist]
-     Change the location of a trap.  The first argument is the name of
-     the macro to be invoked at the trap, and the second argument is the
-     new location for the trap (note that the parameters are specified
-     in opposite order as in the 'wh' request).  This is useful for
-     building up footnotes in a diversion to allow more space at the
-     bottom of the page for them.
-
-     Default scaling indicator for DIST is 'v'.  If DIST is missing, the
-     trap is removed.
-
- -- Register: \n[.ne]
-     The read-only number register '.ne' contains the amount of space
-     that was needed in the last 'ne' request that caused a trap to be
-     sprung.  Useful in conjunction with the '.trunc' register.  *Note
-     Page Control::, for more information.
-
-     Since the '.ne' register is only set by traps it doesn't make much
-     sense to use it outside of trap macros.
-
- -- Register: \n[.trunc]
-     A read-only register containing the amount of vertical space
-     truncated by the most recently sprung vertical position trap, or,
-     if the trap was sprung by an 'ne' request, minus the amount of
-     vertical motion produced by the 'ne' request.  In other words, at
-     the point a trap is sprung, it represents the difference of what
-     the vertical position would have been but for the trap, and what
-     the vertical position actually is.
-
-     Since the '.trunc' register is only set by traps it doesn't make
-     much sense to use it outside of trap macros.
-
- -- Register: \n[.pe]
-     A read-only register that is set to 1 while a page is ejected with
-     the 'bp' request (or by the end of input).
-
-     Outside of traps this register is always zero.  In the following
-     example, only the second call to 'x' is caused by 'bp'.
-
-          .de x
-          \&.pe=\\n[.pe]
-          .br
-          ..
-          .wh 1v x
-          .wh 4v x
-          A line.
-          .br
-          Another line.
-          .br
-              => A line.
-                 .pe=0
-                 Another line.
-
-                 .pe=1
-
-   An important fact to consider while designing macros is that
-diversions and traps do not interact normally.  For example, if a trap
-invokes a header macro (while outputting a diversion) that tries to
-change the font on the current page, the effect is not visible before
-the diversion has completely been printed (except for input protected
-with '\!' or '\?') since the data in the diversion is already formatted.
-In most cases, this is not the expected behaviour.
-
-\1f
-File: groff.info,  Node: Diversion Traps,  Next: Input Line Traps,  Prev: Page Location Traps,  Up: Traps
-
-5.24.2 Diversion Traps
-----------------------
-
- -- Request: .dt [dist macro]
-     Set a trap _within_ a diversion.  DIST is the location of the trap
-     (identical to the 'wh' request; default scaling indicator is 'v')
-     and MACRO is the name of the macro to be invoked.  If called
-     without arguments, the diversion trap is removed.
-
-     Note that there exists only a single diversion trap.
-
-     The number register '.t' still works within diversions.  *Note
-     Diversions::, for more information.
-
-\1f
-File: groff.info,  Node: Input Line Traps,  Next: Blank Line Traps,  Prev: Diversion Traps,  Up: Traps
-
-5.24.3 Input Line Traps
------------------------
-
- -- Request: .it n macro
- -- Request: .itc n macro
-     Set an input line trap.  N is the number of lines of input that may
-     be read before springing the trap, MACRO is the macro to be
-     invoked.  Request lines are not counted as input lines.
-
-     For example, one possible use is to have a macro that prints the
-     next N lines in a bold font.
-
-          .de B
-          .  it \\$1 B-end
-          .  ft B
-          ..
-          .
-          .de B-end
-          .  ft R
-          ..
-
-     The 'itc' request is identical except that an interrupted text line
-     (ending with '\c') is not counted as a separate line.
-
-     Both requests are associated with the current environment (*note
-     Environments::); switching to another environment disables the
-     current input trap, and going back reactivates it, restoring the
-     number of already processed lines.
-
-\1f
-File: groff.info,  Node: Blank Line Traps,  Next: Leading Spaces Traps,  Prev: Input Line Traps,  Up: Traps
-
-5.24.4 Blank Line Traps
------------------------
-
- -- Request: .blm macro
-     Set a blank line trap.  'gtroff' executes MACRO when it encounters
-     a blank line in the input file.
-
-\1f
-File: groff.info,  Node: Leading Spaces Traps,  Next: End-of-input Traps,  Prev: Blank Line Traps,  Up: Traps
-
-5.24.5 Leading Spaces Traps
----------------------------
-
- -- Request: .lsm macro
- -- Register: \n[lsn]
- -- Register: \n[lss]
-     Set a leading spaces trap.  'gtroff' executes MACRO when it
-     encounters leading spaces in an input line; the implicit line break
-     that normally happens in this case is suppressed.  A line
-     consisting of spaces only, however, is treated as an empty line,
-     possibly subject to an empty line macro set with the 'blm' request.
-
-     Leading spaces are removed from the input line before calling the
-     leading spaces macro.  The number of removed spaces is stored in
-     register 'lsn'; the horizontal space that would be emitted if there
-     was no leading space macro is stored in register 'lss'.  Note that
-     'lsn' and 'lss' are available even if no leading space macro has
-     been set.
-
-     The first thing a leading space macro sees is a token.  However,
-     some escapes like '\f' or '\m' are handled on the fly (see *note
-     Gtroff Internals::, for a complete list) without creating a token
-     at all.  Consider that a line starts with two spaces followed by
-     '\fIfoo'.  While skipping the spaces '\fI' is handled too so that
-     groff's current font is properly set to 'I', but the leading space
-     macro only sees 'foo', without the preceding '\fI'.  If the macro
-     should see the font escape you have to 'protect' it with something
-     that creates a token, for example with '\&\fIfoo'.
-
-\1f
-File: groff.info,  Node: End-of-input Traps,  Prev: Leading Spaces Traps,  Up: Traps
-
-5.24.6 End-of-input Traps
--------------------------
-
- -- Request: .em macro
-     Set a trap at the end of input.  MACRO is executed after the last
-     line of the input file has been processed.
-
-     For example, if the document had to have a section at the bottom of
-     the last page for someone to approve it, the 'em' request could be
-     used.
-
-          .de approval
-          \c
-          .  ne 3v
-          .  sp (\\n[.t]u - 3v)
-          .  in +4i
-          .  lc _
-          .  br
-          Approved:\t\a
-          .  sp
-          Date:\t\t\a
-          ..
-          .
-          .em approval
-
-     The '\c' in the above example needs explanation.  For historical
-     reasons (and for compatibility with AT&T 'troff'), the end macro
-     exits as soon as it causes a page break and no remaining data is in
-     the partially collected line.
-
-     Let us assume that there is no '\c' in the above 'approval' macro,
-     and that the page is full and has been ended with, say, a 'br'
-     request.  The 'ne' request now causes the start of a new page,
-     which in turn makes 'troff' exit immediately for the reasons just
-     described.  In most situations this is not intended.
-
-     To always force processing the whole end macro independently of
-     this behaviour it is thus advisable to insert something that starts
-     an empty partially filled line ('\c') whenever there is a chance
-     that a page break can happen.  In the above example, the call of
-     the 'ne' request assures that the remaining code stays on the same
-     page, so we have to insert '\c' only once.
-
-     The next example shows how to append three lines, then starting a
-     new page unconditionally.  Since '.ne 1' doesn't give the desired
-     effect - there is always one line available or we are already at
-     the beginning of the next page - we temporarily increase the page
-     length by one line so that we can use '.ne 2'.
-
-          .de EM
-          .pl +1v
-          \c
-          .ne 2
-          line one
-          .br
-          \c
-          .ne 2
-          line two
-          .br
-          \c
-          .ne 2
-          line three
-          .br
-          .pl -1v
-          \c
-          'bp
-          ..
-          .em EM
-
-     Note that this specific feature affects only the first potential
-     page break caused by the end macro; further page breaks emitted by
-     the end macro are handled normally.
-
-     Another possible use of the 'em' request is to make 'gtroff' emit a
-     single large page instead of multiple pages.  For example, one may
-     want to produce a long plain-text file for reading on-screen.  The
-     idea is to set the page length at the beginning of the document to
-     a very large value to hold all the text, and automatically adjust
-     it to the exact height of the document after the text has been
-     output.
-
-          .de adjust-page-length
-          .  br
-          .  pl \\n[nl]u   \" \n[nl] holds the current page length
-          ..
-          .
-          .de single-page-mode
-          .  pl 99999
-          .  em adjust-page-length
-          ..
-          .
-          .\" activate the above code
-          .single-page-mode
-
-     Since only one end-of-input trap does exist and other macro
-     packages may already use it, care must be taken not to break the
-     mechanism.  A simple solution would be to append the above macro to
-     the macro package's end-of-input macro using the '.am' request.
-
-\1f
-File: groff.info,  Node: Diversions,  Next: Environments,  Prev: Traps,  Up: gtroff Reference
-
-5.25 Diversions
-===============
-
-In 'gtroff' it is possible to "divert" text into a named storage area.
-Due to the similarity to defining macros it is sometimes said to be
-stored in a macro.  This is used for saving text for output at a later
-time, which is useful for keeping blocks of text on the same page,
-footnotes, tables of contents, and indices.
-
-   For orthogonality it is said that 'gtroff' is in the "top-level
-diversion" if no diversion is active (i.e., the data is diverted to the
-output device).
-
-   Although the following requests can be used to create diversions,
-simply using an undefined diversion will cause it to be defined as
-empty.  *Note Identifiers::.
-
- -- Request: .di macro
- -- Request: .da macro
-     Begin a diversion.  Like the 'de' request, it takes an argument of
-     a macro name to divert subsequent text into.  The 'da' macro
-     appends to an existing diversion.
-
-     'di' or 'da' without an argument ends the diversion.
-
-     The current partially-filled line is included into the diversion.
-     See the 'box' request below for an example.  Note that switching to
-     another (empty) environment (with the 'ev' request) avoids the
-     inclusion of the current partially-filled line.
-
- -- Request: .box macro
- -- Request: .boxa macro
-     Begin (or append to) a diversion like the 'di' and 'da' requests.
-     The difference is that 'box' and 'boxa' do not include a
-     partially-filled line in the diversion.
-
-     Compare this:
-
-          Before the box.
-          .box xxx
-          In the box.
-          .br
-          .box
-          After the box.
-          .br
-              => Before the box.  After the box.
-          .xxx
-              => In the box.
-
-     with this:
-
-          Before the diversion.
-          .di yyy
-          In the diversion.
-          .br
-          .di
-          After the diversion.
-          .br
-              => After the diversion.
-          .yyy
-              => Before the diversion.  In the diversion.
-
-     'box' or 'boxa' without an argument ends the diversion.
-
- -- Register: \n[.z]
- -- Register: \n[.d]
-     Diversions may be nested.  The read-only number register '.z'
-     contains the name of the current diversion (this is a string-valued
-     register).  The read-only number register '.d' contains the current
-     vertical place in the diversion.  If not in a diversion it is the
-     same as register 'nl'.
-
- -- Register: \n[.h]
-     The "high-water mark" on the current page.  It corresponds to the
-     text baseline of the lowest line on the page.  This is a read-only
-     register.
-
-          .tm .h==\n[.h], nl==\n[nl]
-              => .h==0, nl==-1
-          This is a test.
-          .br
-          .sp 2
-          .tm .h==\n[.h], nl==\n[nl]
-              => .h==40, nl==120
-
-     As can be seen in the previous example, empty lines are not
-     considered in the return value of the '.h' register.
-
- -- Register: \n[dn]
- -- Register: \n[dl]
-     After completing a diversion, the read-write number registers 'dn'
-     and 'dl' contain the vertical and horizontal size of the diversion.
-     Note that only the just processed lines are counted: For the
-     computation of 'dn' and 'dl', the requests 'da' and 'boxa' are
-     handled as if 'di' and 'box' had been used - lines that have been
-     already stored in a macro are not taken into account.
-
-          .\" Center text both horizontally & vertically
-          .
-          .\" Enclose macro definitions in .eo and .ec
-          .\" to avoid the doubling of the backslash
-          .eo
-          .\" macro .(c starts centering mode
-          .de (c
-          .  br
-          .  ev (c
-          .  evc 0
-          .  in 0
-          .  nf
-          .  di @c
-          ..
-          .\" macro .)c terminates centering mode
-          .de )c
-          .  br
-          .  ev
-          .  di
-          .  nr @s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
-          .  sp \n[@s]u
-          .  ce 1000
-          .  @c
-          .  ce 0
-          .  sp \n[@s]u
-          .  br
-          .  fi
-          .  rr @s
-          .  rm @s
-          .  rm @c
-          ..
-          .\" End of macro definitions, restore escape mechanism
-          .ec
-
- -- Escape: \!
- -- Escape: \?anything\?
-     Prevent requests, macros, and escapes from being interpreted when
-     read into a diversion.  Both escapes take the given text and
-     "transparently" embed it into the diversion.  This is useful for
-     macros that shouldn't be invoked until the diverted text is
-     actually output.
-
-     The '\!' escape transparently embeds text up to and including the
-     end of the line.  The '\?' escape transparently embeds text until
-     the next occurrence of the '\?' escape.  Example:
-
-          \?ANYTHING\?
-
-     ANYTHING may not contain newlines; use '\!' to embed newlines in a
-     diversion.  The escape sequence '\?' is also recognized in copy
-     mode and turned into a single internal code; it is this code that
-     terminates ANYTHING.  Thus the following example prints 4.
-
-          .nr x 1
-          .nf
-          .di d
-          \?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
-          .di
-          .nr x 2
-          .di e
-          .d
-          .di
-          .nr x 3
-          .di f
-          .e
-          .di
-          .nr x 4
-          .f
-
-     Both escapes read the data in copy mode.
-
-     If '\!' is used in the top-level diversion, its argument is
-     directly embedded into the 'gtroff' intermediate output.  This can
-     be used for example to control a postprocessor that processes the
-     data before it is sent to the device driver.
-
-     The '\?' escape used in the top-level diversion produces no output
-     at all; its argument is simply ignored.
-
- -- Request: .output string
-     Emit STRING directly to the 'gtroff' intermediate output (subject
-     to copy mode interpretation); this is similar to '\!' used at the
-     top level.  An initial double quote in STRING is stripped off to
-     allow initial blanks.
-
-     This request can't be used before the first page has started - if
-     you get an error, simply insert '.br' before the 'output' request.
-
-     Without argument, 'output' is ignored.
-
-     Use with caution!  It is normally only needed for mark-up used by a
-     postprocessor that does something with the output before sending it
-     to the output device, filtering out STRING again.
-
- -- Request: .asciify div
-     "Unformat" the diversion specified by DIV in such a way that ASCII
-     characters, characters translated with the 'trin' request, space
-     characters, and some escape sequences that were formatted and
-     diverted are treated like ordinary input characters when the
-     diversion is reread.  It can be also used for gross hacks; for
-     example, the following sets register 'n' to 1.
-
-          .tr @.
-          .di x
-          @nr n 1
-          .br
-          .di
-          .tr @@
-          .asciify x
-          .x
-
-     Note that 'asciify' cannot return all items in a diversion back to
-     their source equivalent, nodes such as '\N[...]' will still remain
-     as nodes, so the result cannot be guaranteed to be a pure string.
-
-     *Note Copy-in Mode::.
-
- -- Request: .unformat div
-     Like 'asciify', unformat the specified diversion.  However,
-     'unformat' only unformats spaces and tabs between words.
-     Unformatted tabs are treated as input tokens, and spaces are
-     stretchable again.
-
-     The vertical size of lines is not preserved; glyph information
-     (font, font size, space width, etc.) is retained.
-
-\1f
-File: groff.info,  Node: Environments,  Next: Suppressing output,  Prev: Diversions,  Up: gtroff Reference
-
-5.26 Environments
-=================
-
-It happens frequently that some text should be printed in a certain
-format regardless of what may be in effect at the time, for example, in
-a trap invoked macro to print headers and footers.  To solve this
-'gtroff' processes text in "environments".  An environment contains most
-of the parameters that control text processing.  It is possible to
-switch amongst these environments; by default 'gtroff' processes text in
-environment 0.  The following is the information kept in an environment.
-
-   * font parameters (size, family, style, glyph height and slant, space
-     and sentence space size)
-
-   * page parameters (line length, title length, vertical spacing, line
-     spacing, indentation, line numbering, centering, right-justifying,
-     underlining, hyphenation data)
-
-   * fill and adjust mode
-
-   * tab stops, tab and leader characters, escape character, no-break
-     and hyphen indicators, margin character data
-
-   * partially collected lines
-
-   * input traps
-
-   * drawing and fill colours
-
-   These environments may be given arbitrary names (see *note
-Identifiers::, for more info).  Old versions of 'troff' only had
-environments named '0', '1', and '2'.
-
- -- Request: .ev [env]
- -- Register: \n[.ev]
-     Switch to another environment.  The argument ENV is the name of the
-     environment to switch to.  With no argument, 'gtroff' switches back
-     to the previous environment.  There is no limit on the number of
-     named environments; they are created the first time that they are
-     referenced.  The '.ev' read-only register contains the name or
-     number of the current environment.  This is a string-valued
-     register.
-
-     Note that a call to 'ev' (with argument) pushes the previously
-     active environment onto a stack.  If, say, environments 'foo',
-     'bar', and 'zap' are called (in that order), the first 'ev' request
-     without parameter switches back to environment 'bar' (which is
-     popped off the stack), and a second call switches back to
-     environment 'foo'.
-
-     Here is an example:
-
-          .ev footnote-env
-          .fam N
-          .ps 6
-          .vs 8
-          .ll -.5i
-          .ev
-
-          ...
-
-          .ev footnote-env
-          \(dg Note the large, friendly letters.
-          .ev
-
- -- Request: .evc env
-     Copy the environment ENV into the current environment.
-
-     The following environment data is not copied:
-
-        * Partially filled lines.
-
-        * The status whether the previous line was interrupted.
-
-        * The number of lines still to center, or to right-justify, or
-          to underline (with or without underlined spaces); they are set
-          to zero.
-
-        * The status whether a temporary indentation is active.
-
-        * Input traps and its associated data.
-
-        * Line numbering mode is disabled; it can be reactivated with
-          '.nm +0'.
-
-        * The number of consecutive hyphenated lines (set to zero).
-
- -- Register: \n[.w]
- -- Register: \n[.cht]
- -- Register: \n[.cdp]
- -- Register: \n[.csk]
-     The '\n[.w]' register contains the width of the last glyph added to
-     the current environment.
-
-     The '\n[.cht]' register contains the height of the last glyph added
-     to the current environment.
-
-     The '\n[.cdp]' register contains the depth of the last glyph added
-     to the current environment.  It is positive for glyphs extending
-     below the baseline.
-
-     The '\n[.csk]' register contains the "skew" (how far to the right
-     of the glyph's center that 'gtroff' should place an accent) of the
-     last glyph added to the current environment.
-
- -- Register: \n[.n]
-     The '\n[.n]' register contains the length of the previous output
-     line in the current environment.
-
-\1f
-File: groff.info,  Node: Suppressing output,  Next: Colors,  Prev: Environments,  Up: gtroff Reference
-
-5.27 Suppressing output
-=======================
-
- -- Escape: \Onum
-     Disable or enable output depending on the value of NUM:
-
-     '\O0'
-          Disable any glyphs from being emitted to the device driver,
-          provided that the escape occurs at the outer level (see
-          '\O[3]' and '\O[4]').  Motion is not suppressed so effectively
-          '\O[0]' means _pen up_.
-
-     '\O1'
-          Enable output of glyphs, provided that the escape occurs at
-          the outer level.
-
-     '\O0' and '\O1' also reset the four registers 'opminx', 'opminy',
-     'opmaxx', and 'opmaxy' to -1.  *Note Register Index::.  These four
-     registers mark the top left and bottom right hand corners of a box
-     that encompasses all written glyphs.
-
-     For example the input text:
-
-          Hello \O[0]world \O[1]this is a test.
-
-     produces the following output:
-
-          Hello       this is a test.
-
-     '\O2'
-          Provided that the escape occurs at the outer level, enable
-          output of glyphs and also write out to 'stderr' the page
-          number and four registers encompassing the glyphs previously
-          written since the last call to '\O'.
-
-     '\O3'
-          Begin a nesting level.  At start-up, 'gtroff' is at outer
-          level.  The current level is contained within the read-only
-          register '.O'.  *Note Built-in Registers::.
-
-     '\O4'
-          End a nesting level.  The current level is contained within
-          the read-only register '.O'.  *Note Built-in Registers::.
-
-     '\O[5PFILENAME]'
-          This escape is 'grohtml' specific.  Provided that this escape
-          occurs at the outer nesting level write the 'filename' to
-          'stderr'.  The position of the image, P, must be specified and
-          must be one of 'l', 'r', 'c', or 'i' (left, right, centered,
-          inline).  FILENAME is associated with the production of the
-          next inline image.
-
-\1f
-File: groff.info,  Node: Colors,  Next: I/O,  Prev: Suppressing output,  Up: gtroff Reference
-
-5.28 Colors
-===========
-
- -- Request: .color [n]
- -- Register: \n[.color]
-     If N is missing or non-zero, activate colors (this is the default);
-     otherwise, turn it off.
-
-     The read-only number register '.color' is 1 if colors are active,
-     0 otherwise.
-
-     Internally, 'color' sets a global flag; it does not produce a
-     token.  Similar to the 'cp' request, you should use it at the
-     beginning of your document to control color output.
-
-     Colors can be also turned off with the '-c' command line option.
-
- -- Request: .defcolor ident scheme color_components
-     Define color with name IDENT.  SCHEME can be one of the following
-     values: 'rgb' (three components), 'cmy' (three components), 'cmyk'
-     (four components), and 'gray' or 'grey' (one component).
-
-     Color components can be given either as a hexadecimal string or as
-     positive decimal integers in the range 0-65535.  A hexadecimal
-     string contains all color components concatenated.  It must start
-     with either '#' or '##'; the former specifies hex values in the
-     range 0-255 (which are internally multiplied by 257), the latter in
-     the range 0-65535.  Examples: '#FFC0CB' (pink), '##ffff0000ffff'
-     (magenta).  The default color name value is device-specific
-     (usually black).  It is possible that the default color for '\m'
-     and '\M' is not identical.
-
-     A new scaling indicator 'f' has been introduced, which multiplies
-     its value by 65536; this makes it convenient to specify color
-     components as fractions in the range 0 to 1 (1f equals 65536u).
-     Example:
-
-          .defcolor darkgreen rgb 0.1f 0.5f 0.2f
-
-     Note that 'f' is the default scaling indicator for the 'defcolor'
-     request, thus the above statement is equivalent to
-
-          .defcolor darkgreen rgb 0.1 0.5 0.2
-
- -- Request: .gcolor [color]
- -- Escape: \mc
- -- Escape: \m(co
- -- Escape: \m[color]
- -- Register: \n[.m]
-     Set (glyph) drawing color.  The following examples show how to turn
-     the next four words red.
-
-          .gcolor red
-          these are in red
-          .gcolor
-          and these words are in black.
-
-          \m[red]these are in red\m[] and these words are in black.
-
-     The escape '\m[]' returns to the previous color, as does a call to
-     'gcolor' without an argument.
-
-     The name of the current drawing color is available in the
-     read-only, string-valued number register '.m'.
-
-     The drawing color is associated with the current environment (*note
-     Environments::).
-
-     Note that '\m' doesn't produce an input token in 'gtroff'.  As a
-     consequence, it can be used in requests like 'mc' (which expects a
-     single character as an argument) to change the color on the fly:
-
-          .mc \m[red]x\m[]
-
- -- Request: .fcolor [color]
- -- Escape: \Mc
- -- Escape: \M(co
- -- Escape: \M[color]
- -- Register: \n[.M]
-     Set fill (background) color for filled objects drawn with the
-     '\D'...'' commands.
-
-     A red ellipse can be created with the following code:
-
-          \M[red]\h'0.5i'\D'E 2i 1i'\M[]
-
-     The escape '\M[]' returns to the previous fill color, as does a
-     call to 'fcolor' without an argument.
-
-     The name of the current fill (background) color is available in the
-     read-only, string-valued number register '.M'.
-
-     The fill color is associated with the current environment (*note
-     Environments::).
-
-     Note that '\M' doesn't produce an input token in 'gtroff'.
-
-\1f
-File: groff.info,  Node: I/O,  Next: Postprocessor Access,  Prev: Colors,  Up: gtroff Reference
-
-5.29 I/O
-========
-
-'gtroff' has several requests for including files:
-
- -- Request: .so file
-     Read in the specified FILE and includes it in place of the 'so'
-     request.  This is quite useful for large documents, e.g. keeping
-     each chapter in a separate file.  *Note gsoelim::, for more
-     information.
-
-     Since 'gtroff' replaces the 'so' request with the contents of
-     'file', it makes a difference whether the data is terminated with a
-     newline or not: Assuming that file 'xxx' contains the word 'foo'
-     without a final newline, this
-
-          This is
-          .so xxx
-          bar
-
-     yields 'This is foobar'.
-
-     The search path for FILE can be controlled with the '-I' command
-     line option.
-
- -- Request: .pso command
-     Read the standard output from the specified COMMAND and includes it
-     in place of the 'pso' request.
-
-     This request causes an error if used in safer mode (which is the
-     default).  Use 'groff''s or 'troff''s '-U' option to activate
-     unsafe mode.
-
-     The comment regarding a final newline for the 'so' request is valid
-     for 'pso' also.
-
- -- Request: .mso file
-     Identical to the 'so' request except that 'gtroff' searches for the
-     specified FILE in the same directories as macro files for the the
-     '-m' command line option.  If the file name to be included has the
-     form 'NAME.tmac' and it isn't found, 'mso' tries to include
-     'tmac.NAME' and vice versa.  If the file does not exist, a warning
-     of type 'file' is emitted.  *Note Debugging::, for information
-     about warnings.
-
- -- Request: .trf file
- -- Request: .cf file
-     Transparently output the contents of FILE.  Each line is output as
-     if it were preceded by '\!'; however, the lines are _not_ subject
-     to copy mode interpretation.  If the file does not end with a
-     newline, then a newline is added ('trf' only).  For example, to
-     define a macro 'x' containing the contents of file 'f', use
-
-          .ev 1
-          .di x
-          .trf f
-          .di
-          .ev
-
-     The calls to 'ev' prevent that the current partial input line
-     becomes part of the diversion.
-
-     Both 'trf' and 'cf', when used in a diversion, embeds an object in
-     the diversion which, when reread, causes the contents of FILE to be
-     transparently copied through to the output.  In UNIX 'troff', the
-     contents of FILE is immediately copied through to the output
-     regardless of whether there is a current diversion; this behaviour
-     is so anomalous that it must be considered a bug.
-
-     While 'cf' copies the contents of FILE completely unprocessed,
-     'trf' disallows characters such as NUL that are not valid 'gtroff'
-     input characters (*note Identifiers::).
-
-     For 'cf', within a diversion, 'completely unprocessed' means that
-     each line of a file to be inserted is handled as if it were
-     preceded by '\!\\!'.
-
-     Both requests cause a line break.
-
- -- Request: .nx [file]
-     Force 'gtroff' to continue processing of the file specified as an
-     argument.  If no argument is given, immediately jump to the end of
-     file.
-
- -- Request: .rd [prompt [arg1 arg2 ...]]
-     Read from standard input, and include what is read as though it
-     were part of the input file.  Text is read until a blank line is
-     encountered.
-
-     If standard input is a TTY input device (keyboard), write PROMPT to
-     standard error, followed by a colon (or send BEL for a beep if no
-     argument is given).
-
-     Arguments after PROMPT are available for the input.  For example,
-     the line
-
-          .rd data foo bar
-
-     with the input 'This is \$2.' prints
-
-          This is bar.
-
-   Using the 'nx' and 'rd' requests, it is easy to set up form letters.
-The form letter template is constructed like this, putting the following
-lines into a file called 'repeat.let':
-
-     .ce
-     \*(td
-     .sp 2
-     .nf
-     .rd
-     .sp
-     .rd
-     .fi
-     Body of letter.
-     .bp
-     .nx repeat.let
-
-When this is run, a file containing the following lines should be
-redirected in.  Note that requests included in this file are executed as
-though they were part of the form letter.  The last block of input is
-the 'ex' request, which tells 'groff' to stop processing.  If this was
-not there, 'groff' would not know when to stop.
-
-     Trent A. Fisher
-     708 NW 19th Av., #202
-     Portland, OR  97209
-
-     Dear Trent,
-
-     Len Adollar
-     4315 Sierra Vista
-     San Diego, CA  92103
-
-     Dear Mr. Adollar,
-
-     .ex
-
- -- Request: .pi pipe
-     Pipe the output of 'gtroff' to the shell command(s) specified by
-     PIPE.  This request must occur before 'gtroff' has a chance to
-     print anything.
-
-     'pi' causes an error if used in safer mode (which is the default).
-     Use 'groff''s or 'troff''s '-U' option to activate unsafe mode.
-
-     Multiple calls to 'pi' are allowed, acting as a chain.  For
-     example,
-
-          .pi foo
-          .pi bar
-          ...
-
-     is the same as '.pi foo | bar'.
-
-     Note that the intermediate output format of 'gtroff' is piped to
-     the specified commands.  Consequently, calling 'groff' without the
-     '-Z' option normally causes a fatal error.
-
- -- Request: .sy cmds
- -- Register: \n[systat]
-     Execute the shell command(s) specified by CMDS.  The output is not
-     saved anyplace, so it is up to the user to do so.
-
-     This request causes an error if used in safer mode (which is the
-     default).  Use 'groff''s or 'troff''s '-U' option to activate
-     unsafe mode.
-
-     For example, the following code fragment introduces the current
-     time into a document:
-
-          .sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
-                       (localtime(time))[2,1,0]' > /tmp/x\n[$$]
-          .so /tmp/x\n[$$]
-          .sy rm /tmp/x\n[$$]
-          \nH:\nM:\nS
-
-     Note that this works by having the 'perl' script (run by 'sy')
-     print out the 'nr' requests that set the number registers 'H', 'M',
-     and 'S', and then reads those commands in with the 'so' request.
-
-     For most practical purposes, the number registers 'seconds',
-     'minutes', and 'hours', which are initialized at start-up of
-     'gtroff', should be sufficient.  Use the 'af' request to get a
-     formatted output:
-
-          .af hours 00
-          .af minutes 00
-          .af seconds 00
-          \n[hours]:\n[minutes]:\n[seconds]
-
-     The 'systat' read-write number register contains the return value
-     of the 'system()' function executed by the last 'sy' request.
-
- -- Request: .open stream file
- -- Request: .opena stream file
-     Open the specified FILE for writing and associates the specified
-     STREAM with it.
-
-     The 'opena' request is like 'open', but if the file exists, append
-     to it instead of truncating it.
-
-     Both 'open' and 'opena' cause an error if used in safer mode (which
-     is the default).  Use 'groff''s or 'troff''s '-U' option to
-     activate unsafe mode.
-
- -- Request: .write stream data
- -- Request: .writec stream data
-     Write to the file associated with the specified STREAM.  The stream
-     must previously have been the subject of an open request.  The
-     remainder of the line is interpreted as the 'ds' request reads its
-     second argument: A leading '"' is stripped, and it is read in
-     copy-in mode.
-
-     The 'writec' request is like 'write', but only 'write' appends a
-     newline to the data.
-
- -- Request: .writem stream xx
-     Write the contents of the macro or string XX to the file associated
-     with the specified STREAM.
-
-     XX is read in copy mode, i.e., already formatted elements are
-     ignored.  Consequently, diversions must be unformatted with the
-     'asciify' request before calling 'writem'.  Usually, this means a
-     loss of information.
-
- -- Request: .close stream
-     Close the specified STREAM; the stream is no longer an acceptable
-     argument to the 'write' request.
-
-     Here a simple macro to write an index entry.
-
-          .open idx test.idx
-          .
-          .de IX
-          .  write idx \\n[%] \\$*
-          ..
-          .
-          .IX test entry
-          .
-          .close idx
-
- -- Escape: \Ve
- -- Escape: \V(ev
- -- Escape: \V[env]
-     Interpolate the contents of the specified environment variable ENV
-     (one-character name E, two-character name EV) as returned by the
-     function 'getenv'.  '\V' is interpreted in copy-in mode.
-
-\1f
-File: groff.info,  Node: Postprocessor Access,  Next: Miscellaneous,  Prev: I/O,  Up: gtroff Reference
-
-5.30 Postprocessor Access
-=========================
-
-There are two escapes that give information directly to the
-postprocessor.  This is particularly useful for embedding POSTSCRIPT
-into the final document.
-
- -- Request: .device xxx
- -- Escape: \X'xxx'
-     Embeds its argument into the 'gtroff' output preceded with 'x X'.
-
-     The escapes '\&', '\)', '\%', and '\:' are ignored within '\X',
-     '\ ' and '\~' are converted to single space characters.  All other
-     escapes (except '\\', which produces a backslash) cause an error.
-
-     Contrary to '\X', the 'device' request simply processes its
-     argument in copy mode (*note Copy-in Mode::).
-
-     If the 'use_charnames_in_special' keyword is set in the 'DESC'
-     file, special characters no longer cause an error; they are simply
-     output verbatim.  Additionally, the backslash is represented as
-     '\\'.
-
-     'use_charnames_in_special' is currently used by 'grohtml' only.
-
- -- Request: .devicem xx
- -- Escape: \Yn
- -- Escape: \Y(nm
- -- Escape: \Y[name]
-     This is approximately equivalent to '\X'\*[NAME]'' (one-character
-     name N, two-character name NM).  However, the contents of the
-     string or macro NAME are not interpreted; also it is permitted for
-     NAME to have been defined as a macro and thus contain newlines (it
-     is not permitted for the argument to '\X' to contain newlines).
-     The inclusion of newlines requires an extension to the UNIX 'troff'
-     output format, and confuses drivers that do not know about this
-     extension (*note Device Control Commands::).
-
-   *Note Output Devices::.
-
-\1f
-File: groff.info,  Node: Miscellaneous,  Next: Gtroff Internals,  Prev: Postprocessor Access,  Up: gtroff Reference
-
-5.31 Miscellaneous
-==================
-
-This section documents parts of 'gtroff' that cannot (yet) be
-categorized elsewhere in this manual.
-
- -- Request: .nm [start [inc [space [indent]]]]
-     Print line numbers.  START is the line number of the _next_ output
-     line.  INC indicates which line numbers are printed.  For example,
-     the value 5 means to emit only line numbers that are multiples
-     of 5; this defaults to 1.  SPACE is the space to be left between
-     the number and the text; this defaults to one digit space.  The
-     fourth argument is the indentation of the line numbers, defaulting
-     to zero.  Both SPACE and INDENT are given as multiples of digit
-     spaces; they can be negative also.  Without any arguments, line
-     numbers are turned off.
-
-     'gtroff' reserves three digit spaces for the line number (which is
-     printed right-justified) plus the amount given by INDENT; the
-     output lines are concatenated to the line numbers, separated by
-     SPACE, and _without_ reducing the line length.  Depending on the
-     value of the horizontal page offset (as set with the 'po' request),
-     line numbers that are longer than the reserved space stick out to
-     the left, or the whole line is moved to the right.
-
-     Parameters corresponding to missing arguments are not changed; any
-     non-digit argument (to be more precise, any argument starting with
-     a character valid as a delimiter for identifiers) is also treated
-     as missing.
-
-     If line numbering has been disabled with a call to 'nm' without an
-     argument, it can be reactivated with '.nm +0', using the previously
-     active line numbering parameters.
-
-     The parameters of 'nm' are associated with the current environment
-     (*note Environments::).  The current output line number is
-     available in the number register 'ln'.
-
-          .po 1m
-          .ll 2i
-          This test shows how line numbering works with groff.
-          .nm 999
-          This test shows how line numbering works with groff.
-          .br
-          .nm xxx 3 2
-          .ll -\w'0'u
-          This test shows how line numbering works with groff.
-          .nn 2
-          This test shows how line numbering works with groff.
-
-     And here the result:
-
-           This  test shows how
-           line numbering works
-           999 with   groff.   This
-          1000 test shows how  line
-          1001 numbering works with
-          1002 groff.
-                This test shows how
-                line      numbering
-           works  with  groff.
-           This test shows how
-          1005  line      numbering
-                works with groff.
-
- -- Request: .nn [skip]
-     Temporarily turn off line numbering.  The argument is the number of
-     lines not to be numbered; this defaults to 1.
-
- -- Request: .mc glyph [dist]
-     Print a "margin character" to the right of the text.(1)  (*note
-     Miscellaneous-Footnote-1::) The first argument is the glyph to be
-     printed.  The second argument is the distance away from the right
-     margin.  If missing, the previously set value is used; default is
-     10pt).  For text lines that are too long (that is, longer than the
-     text length plus DIST), the margin character is directly appended
-     to the lines.
-
-     With no arguments the margin character is turned off.  If this
-     occurs before a break, no margin character is printed.
-
-     For compatibility with AT&T 'troff', a call to 'mc' to set the
-     margin character can't be undone immediately; at least one line
-     gets a margin character.  Thus
-
-          .ll 1i
-          .mc \[br]
-          .mc
-          xxx
-          .br
-          xxx
-
-     produces
-
-          xxx        |
-          xxx
-
-     For empty lines and lines produced by the 'tl' request no margin
-     character is emitted.
-
-     The margin character is associated with the current environment
-     (*note Environments::).
-
-     This is quite useful for indicating text that has changed, and, in
-     fact, there are programs available for doing this (they are called
-     'nrchbar' and 'changebar' and can be found in any
-     'comp.sources.unix' archive).
-
-          .ll 3i
-          .mc |
-          This paragraph is highlighted with a margin
-          character.
-          .sp
-          Note that vertical space isn't marked.
-          .br
-          \&
-          .br
-          But we can fake it with `\&'.
-
-     Result:
-
-          This  paragraph is highlighted |
-          with a margin character.       |
-
-          Note that vertical space isn't |
-          marked.                        |
-                                         |
-          But we can fake it with `\&'.  |
-
- -- Request: .psbb filename
- -- Register: \n[llx]
- -- Register: \n[lly]
- -- Register: \n[urx]
- -- Register: \n[ury]
-     Retrieve the bounding box of the POSTSCRIPT image found in
-     FILENAME.  The file must conform to Adobe's "Document Structuring
-     Conventions" (DSC); the command searches for a '%%BoundingBox'
-     comment and extracts the bounding box values into the number
-     registers 'llx', 'lly', 'urx', and 'ury'.  If an error occurs (for
-     example, 'psbb' cannot find the '%%BoundingBox' comment), it sets
-     the four number registers to zero.
-
-     The search path for FILENAME can be controlled with the '-I'
-     command line option.
-
-\1f
-File: groff.info,  Node: Miscellaneous-Footnotes,  Up: Miscellaneous
-
-   (1) "Margin character" is a misnomer since it is an output glyph.
-
-\1f
-File: groff.info,  Node: Gtroff Internals,  Next: Debugging,  Prev: Miscellaneous,  Up: gtroff Reference
-
-5.32 'gtroff' Internals
-=======================
-
-'gtroff' processes input in three steps.  One or more input characters
-are converted to an "input token".(1)  (*note Gtroff
-Internals-Footnote-1::) Then, one or more input tokens are converted to
-an "output node".  Finally, output nodes are converted to the
-intermediate output language understood by all output devices.
-
-   Actually, before step one happens, 'gtroff' converts certain escape
-sequences into reserved input characters (not accessible by the user);
-such reserved characters are used for other internal processing also -
-this is the very reason why not all characters are valid input.  *Note
-Identifiers::, for more on this topic.
-
-   For example, the input string 'fi\[:u]' is converted into a character
-token 'f', a character token 'i', and a special token ':u' (representing
-u umlaut).  Later on, the character tokens 'f' and 'i' are merged to a
-single output node representing the ligature glyph 'fi' (provided the
-current font has a glyph for this ligature); the same happens with ':u'.
-All output glyph nodes are 'processed', which means that they are
-invariably associated with a given font, font size, advance width, etc.
-During the formatting process, 'gtroff' itself adds various nodes to
-control the data flow.
-
-   Macros, diversions, and strings collect elements in two chained
-lists: a list of input tokens that have been passed unprocessed, and a
-list of output nodes.  Consider the following the diversion.
-
-     .di xxx
-     a
-     \!b
-     c
-     .br
-     .di
-
-It contains these elements.
-
-node list            token list   element number
-                                  
-line start node      --           1
-glyph node 'a'       --           2
-word space node      --           3
---                   'b'          4
---                   '\n'         5
-glyph node 'c'       --           6
-vertical size node   --           7
-vertical size node   --           8
---                   '\n'         9
-
-Elements 1, 7, and 8 are inserted by 'gtroff'; the latter two (which are
-always present) specify the vertical extent of the last line, possibly
-modified by '\x'.  The 'br' request finishes the current partial line,
-inserting a newline input token, which is subsequently converted to a
-space when the diversion is reread.  Note that the word space node has a
-fixed width that isn't stretchable anymore.  To convert horizontal space
-nodes back to input tokens, use the 'unformat' request.
-
-   Macros only contain elements in the token list (and the node list is
-empty); diversions and strings can contain elements in both lists.
-
-   Note that the 'chop' request simply reduces the number of elements in
-a macro, string, or diversion by one.  Exceptions are "compatibility
-save" and "compatibility ignore" input tokens, which are ignored.  The
-'substring' request also ignores those input tokens.
-
-   Some requests like 'tr' or 'cflags' work on glyph identifiers only;
-this means that the associated glyph can be changed without destroying
-this association.  This can be very helpful for substituting glyphs.  In
-the following example, we assume that glyph 'foo' isn't available by
-default, so we provide a substitution using the 'fchar' request and map
-it to input character 'x'.
-
-     .fchar \[foo] foo
-     .tr x \[foo]
-
-Now let us assume that we install an additional special font 'bar' that
-has glyph 'foo'.
-
-     .special bar
-     .rchar \[foo]
-
-Since glyphs defined with 'fchar' are searched before glyphs in special
-fonts, we must call 'rchar' to remove the definition of the fallback
-glyph.  Anyway, the translation is still active; 'x' now maps to the
-real glyph 'foo'.
-
-   Macro and request arguments preserve the compatibility mode:
-
-     .cp 1     \" switch to compatibility mode
-     .de xx
-     \\$1
-     ..
-     .cp 0     \" switch compatibility mode off
-     .xx caf\['e]
-         => café
-
-Since compatibility mode is on while 'de' is called, the macro 'xx'
-activates compatibility mode while executing.  Argument '$1' can still
-be handled properly because it inherits the compatibility mode status
-which was active at the point where 'xx' is called.
-
-   After expansion of the parameters, the compatibility save and restore
-tokens are removed.
-
-\1f
-File: groff.info,  Node: Gtroff Internals-Footnotes,  Up: Gtroff Internals
-
-   (1) Except the escapes '\f', '\F', '\H', '\m', '\M', '\R', '\s', and
-'\S', which are processed immediately if not in copy-in mode.
-
-\1f
-File: groff.info,  Node: Debugging,  Next: Implementation Differences,  Prev: Gtroff Internals,  Up: gtroff Reference
-
-5.33 Debugging
-==============
-
-'gtroff' is not easy to debug, but there are some useful features and
-strategies for debugging.
-
- -- Request: .lf line [filename]
-     Change the line number and optionally the file name 'gtroff' shall
-     use for error and warning messages.  LINE is the input line number
-     of the _next_ line.
-
-     Without argument, the request is ignored.
-
-     This is a debugging aid for documents that are split into many
-     files, then put together with 'soelim' and other preprocessors.
-     Usually, it isn't invoked manually.
-
-     Note that other 'troff' implementations (including the original
-     AT&T version) handle 'lf' differently.  For them, LINE changes the
-     line number of the _current_ line.
-
- -- Request: .tm string
- -- Request: .tm1 string
- -- Request: .tmc string
-     Send STRING to the standard error output; this is very useful for
-     printing debugging messages among other things.
-
-     STRING is read in copy mode.
-
-     The 'tm' request ignores leading spaces of STRING; 'tm1' handles
-     its argument similar to the 'ds' request: a leading double quote in
-     STRING is stripped to allow initial blanks.
-
-     The 'tmc' request is similar to 'tm1' but does not append a newline
-     (as is done in 'tm' and 'tm1').
-
- -- Request: .ab [string]
-     Similar to the 'tm' request, except that it causes 'gtroff' to stop
-     processing.  With no argument it prints 'User Abort.' to standard
-     error.
-
- -- Request: .ex
-     The 'ex' request also causes 'gtroff' to stop processing; see also
-     *note I/O::.
-
-   When doing something involved it is useful to leave the debugging
-statements in the code and have them turned on by a command line flag.
-
-     .if \n(DB .tm debugging output
-
-To activate these statements say
-
-     groff -rDB=1 file
-
-   If it is known in advance that there are many errors and no useful
-output, 'gtroff' can be forced to suppress formatted output with the
-'-z' flag.
-
- -- Request: .pev
-     Print the contents of the current environment and all the currently
-     defined environments (both named and numbered) on 'stderr'.
-
- -- Request: .pm
-     Print the entire symbol table on 'stderr'.  Names of all defined
-     macros, strings, and diversions are print together with their size
-     in bytes.  Since 'gtroff' sometimes adds nodes by itself, the
-     returned size can be larger than expected.
-
-     This request differs from UNIX 'troff': 'gtroff' reports the sizes
-     of diversions, ignores an additional argument to print only the
-     total of the sizes, and the size isn't returned in blocks of 128
-     characters.
-
- -- Request: .pnr
-     Print the names and contents of all currently defined number
-     registers on 'stderr'.
-
- -- Request: .ptr
-     Print the names and positions of all traps (not including input
-     line traps and diversion traps) on 'stderr'.  Empty slots in the
-     page trap list are printed as well, because they can affect the
-     priority of subsequently planted traps.
-
- -- Request: .fl
-     Instruct 'gtroff' to flush its output immediately.  The intent is
-     for interactive use, but this behaviour is currently not
-     implemented in 'gtroff'.  Contrary to UNIX 'troff', TTY output is
-     sent to a device driver also ('grotty'), making it non-trivial to
-     communicate interactively.
-
-     This request causes a line break.
-
- -- Request: .backtrace
-     Print a backtrace of the input stack to the standard error stream.
-
-     Consider the following in file 'test':
-
-          .de xxx
-          .  backtrace
-          ..
-          .de yyy
-          .  xxx
-          ..
-          .
-          .yyy
-
-     On execution, 'gtroff' prints the following:
-
-          test:2: backtrace: macro `xxx'
-          test:5: backtrace: macro `yyy'
-          test:8: backtrace: file `test'
-
-     The option '-b' of 'gtroff' internally calls a variant of this
-     request on each error and warning.
-
- -- Register: \n[slimit]
-     Use the 'slimit' number register to set the maximum number of
-     objects on the input stack.  If 'slimit' is less than or equal
-     to 0, there is no limit set.  With no limit, a buggy recursive
-     macro can exhaust virtual memory.
-
-     The default value is 1000; this is a compile-time constant.
-
- -- Request: .warnscale si
-     Set the scaling indicator used in warnings to SI.  Valid values for
-     SI are 'u', 'i', 'c', 'p', and 'P'.  At startup, it is set to 'i'.
-
- -- Request: .spreadwarn [limit]
-     Make 'gtroff' emit a warning if the additional space inserted for
-     each space between words in an output line is larger or equal to
-     LIMIT.  A negative value is changed to zero; no argument toggles
-     the warning on and off without changing LIMIT.  The default scaling
-     indicator is 'm'.  At startup, 'spreadwarn' is deactivated, and
-     LIMIT is set to 3m.
-
-     For example,
-
-          .spreadwarn 0.2m
-
-     causes a warning if 'gtroff' must add 0.2m or more for each
-     interword space in a line.
-
-     This request is active only if text is justified to both margins
-     (using '.ad b').
-
-   'gtroff' has command line options for printing out more warnings
-('-w') and for printing backtraces ('-b') when a warning or an error
-occurs.  The most verbose level of warnings is '-ww'.
-
- -- Request: .warn [flags]
- -- Register: \n[.warn]
-     Control the level of warnings checked for.  The FLAGS are the sum
-     of the numbers associated with each warning that is to be enabled;
-     all other warnings are disabled.  The number associated with each
-     warning is listed below.  For example, '.warn 0' disables all
-     warnings, and '.warn 1' disables all warnings except that about
-     missing glyphs.  If no argument is given, all warnings are enabled.
-
-     The read-only number register '.warn' contains the current warning
-     level.
-
-* Menu:
-
-* Warnings::
-
-\1f
-File: groff.info,  Node: Warnings,  Prev: Debugging,  Up: Debugging
-
-5.33.1 Warnings
----------------
-
-The warnings that can be given to 'gtroff' are divided into the
-following categories.  The name associated with each warning is used by
-the '-w' and '-W' options; the number is used by the 'warn' request and
-by the '.warn' register.
-
-'char'
-'1'
-     Non-existent glyphs.(1)  (*note Warnings-Footnote-1::) This is
-     enabled by default.
-
-'number'
-'2'
-     Invalid numeric expressions.  This is enabled by default.  *Note
-     Expressions::.
-
-'break'
-'4'
-     In fill mode, lines that could not be broken so that their length
-     was less than the line length.  This is enabled by default.
-
-'delim'
-'8'
-     Missing or mismatched closing delimiters.
-
-'el'
-'16'
-     Use of the 'el' request with no matching 'ie' request.  *Note
-     if-else::.
-
-'scale'
-'32'
-     Meaningless scaling indicators.
-
-'range'
-'64'
-     Out of range arguments.
-
-'syntax'
-'128'
-     Dubious syntax in numeric expressions.
-
-'di'
-'256'
-     Use of 'di' or 'da' without an argument when there is no current
-     diversion.
-
-'mac'
-'512'
-     Use of undefined strings, macros and diversions.  When an undefined
-     string, macro, or diversion is used, that string is automatically
-     defined as empty.  So, in most cases, at most one warning is given
-     for each name.
-
-'reg'
-'1024'
-     Use of undefined number registers.  When an undefined number
-     register is used, that register is automatically defined to have a
-     value of 0.  So, in most cases, at most one warning is given for
-     use of a particular name.
-
-'tab'
-'2048'
-     Use of a tab character where a number was expected.
-
-'right-brace'
-'4096'
-     Use of '\}' where a number was expected.
-
-'missing'
-'8192'
-     Requests that are missing non-optional arguments.
-
-'input'
-'16384'
-     Invalid input characters.
-
-'escape'
-'32768'
-     Unrecognized escape sequences.  When an unrecognized escape
-     sequence '\X' is encountered, the escape character is ignored, and
-     X is printed.
-
-'space'
-'65536'
-     Missing space between a request or macro and its argument.  This
-     warning is given when an undefined name longer than two characters
-     is encountered, and the first two characters of the name make a
-     defined name.  The request or macro is not invoked.  When this
-     warning is given, no macro is automatically defined.  This is
-     enabled by default.  This warning never occurs in compatibility
-     mode.
-
-'font'
-'131072'
-     Non-existent fonts.  This is enabled by default.
-
-'ig'
-'262144'
-     Invalid escapes in text ignored with the 'ig' request.  These are
-     conditions that are errors when they do not occur in ignored text.
-
-'color'
-'524288'
-     Color related warnings.
-
-'file'
-'1048576'
-     Missing files.  The 'mso' request gives this warning when the
-     requested macro file does not exist.  This is enabled by default.
-
-'all'
-     All warnings except 'di', 'mac' and 'reg'.  It is intended that
-     this covers all warnings that are useful with traditional macro
-     packages.
-
-'w'
-     All warnings.
-
-\1f
-File: groff.info,  Node: Warnings-Footnotes,  Up: Warnings
-
-   (1) 'char' is a misnomer since it reports missing glyphs - there
-aren't missing input characters, only invalid ones.
-
-\1f
-File: groff.info,  Node: Implementation Differences,  Prev: Debugging,  Up: gtroff Reference
-
-5.34 Implementation Differences
-===============================
-
-GNU 'troff' has a number of features that cause incompatibilities with
-documents written with old versions of 'troff'.
-
-   Long names cause some incompatibilities.  UNIX 'troff' interprets
-
-     .dsabcd
-
-as defining a string 'ab' with contents 'cd'.  Normally, GNU 'troff'
-interprets this as a call of a macro named 'dsabcd'.  Also UNIX 'troff'
-interprets '\*[' or '\n[' as references to a string or number register
-called '['.  In GNU 'troff', however, this is normally interpreted as
-the start of a long name.  In compatibility mode GNU 'troff' interprets
-long names in the traditional way (which means that they are not
-recognized as names).
-
- -- Request: .cp [n]
- -- Request: .do cmd
- -- Register: \n[.C]
-     If N is missing or non-zero, turn on compatibility mode; otherwise,
-     turn it off.
-
-     The read-only number register '.C' is 1 if compatibility mode is
-     on, 0 otherwise.
-
-     Compatibility mode can be also turned on with the '-C' command line
-     option.
-
-     The 'do' request turns off compatibility mode while executing its
-     arguments as a 'gtroff' command.  However, it does not turn off
-     compatibility mode while processing the macro itself.  To do that,
-     use the 'de1' request (or manipulate the '.C' register manually).
-     *Note Writing Macros::.
-
-          .do fam T
-
-     executes the 'fam' request when compatibility mode is enabled.
-
-     'gtroff' restores the previous compatibility setting before
-     interpreting any files sourced by the CMD.
-
-   Two other features are controlled by '-C'.  If not in compatibility
-mode, GNU 'troff' preserves the input level in delimited arguments:
-
-     .ds xx '
-     \w'abc\*(xxdef'
-
-In compatibility mode, the string '72def'' is returned; without '-C' the
-resulting string is '168' (assuming a TTY output device).
-
-   Finally, the escapes '\f', '\H', '\m', '\M', '\R', '\s', and '\S' are
-transparent for recognizing the beginning of a line only in
-compatibility mode (this is a rather obscure feature).  For example, the
-code
-
-     .de xx
-     Hallo!
-     ..
-     \fB.xx\fP
-
-prints 'Hallo!' in bold face if in compatibility mode, and '.xx' in bold
-face otherwise.
-
-   GNU 'troff' does not allow the use of the escape sequences '\|',
-'\^', '\&', '\{', '\}', '\<SP>', '\'', '\`', '\-', '\_', '\!', '\%', and
-'\c' in names of strings, macros, diversions, number registers, fonts or
-environments; UNIX 'troff' does.  The '\A' escape sequence (*note
-Identifiers::) may be helpful in avoiding use of these escape sequences
-in names.
-
-   Fractional point sizes cause one noteworthy incompatibility.  In UNIX
-'troff' the 'ps' request ignores scale indicators and thus
-
-     .ps 10u
-
-sets the point size to 10 points, whereas in GNU 'troff' it sets the
-point size to 10 scaled points.  *Note Fractional Type Sizes::, for more
-information.
-
-   In GNU 'troff' there is a fundamental difference between
-(unformatted) input characters and (formatted) output glyphs.
-Everything that affects how a glyph is output is stored with the glyph
-node; once a glyph node has been constructed it is unaffected by any
-subsequent requests that are executed, including 'bd', 'cs', 'tkf',
-'tr', or 'fp' requests.  Normally glyphs are constructed from input
-characters at the moment immediately before the glyph is added to the
-current output line.  Macros, diversions and strings are all, in fact,
-the same type of object; they contain lists of input characters and
-glyph nodes in any combination.  A glyph node does not behave like an
-input character for the purposes of macro processing; it does not
-inherit any of the special properties that the input character from
-which it was constructed might have had.  For example,
-
-     .di x
-     \\\\
-     .br
-     .di
-     .x
-
-prints '\\' in GNU 'troff'; each pair of input backslashes is turned
-into one output backslash and the resulting output backslashes are not
-interpreted as escape characters when they are reread.  UNIX 'troff'
-would interpret them as escape characters when they were reread and
-would end up printing one '\'.  The correct way to obtain a printable
-backslash is to use the '\e' escape sequence: This always prints a
-single instance of the current escape character, regardless of whether
-or not it is used in a diversion; it also works in both GNU 'troff' and
-UNIX 'troff'.(1)  (*note Implementation Differences-Footnote-1::) To
-store, for some reason, an escape sequence in a diversion that is
-interpreted when the diversion is reread, either use the traditional
-'\!' transparent output facility, or, if this is unsuitable, the new
-'\?' escape sequence.
-
-   *Note Diversions::, and *note Gtroff Internals::, for more
-information.
-
-\1f
-File: groff.info,  Node: Implementation Differences-Footnotes,  Up: Implementation Differences
-
-   (1) To be completely independent of the current escape character, use
-'\(rs', which represents a reverse solidus (backslash) glyph.
-
-\1f
-File: groff.info,  Node: Preprocessors,  Next: Output Devices,  Prev: gtroff Reference,  Up: Top
-
-6 Preprocessors
-***************
-
-This chapter describes all preprocessors that come with 'groff' or which
-are freely available.
-
-* Menu:
-
-* geqn::
-* gtbl::
-* gpic::
-* ggrn::
-* grap::
-* gchem::
-* grefer::
-* gsoelim::
-* preconv::
-
-\1f
-File: groff.info,  Node: geqn,  Next: gtbl,  Prev: Preprocessors,  Up: Preprocessors
-
-6.1 'geqn'
-==========
-
-* Menu:
-
-* Invoking geqn::
-
-\1f
-File: groff.info,  Node: Invoking geqn,  Prev: geqn,  Up: geqn
-
-6.1.1 Invoking 'geqn'
----------------------
-
-\1f
-File: groff.info,  Node: gtbl,  Next: gpic,  Prev: geqn,  Up: Preprocessors
-
-6.2 'gtbl'
-==========
-
-* Menu:
-
-* Invoking gtbl::
-
-\1f
-File: groff.info,  Node: Invoking gtbl,  Prev: gtbl,  Up: gtbl
-
-6.2.1 Invoking 'gtbl'
----------------------
-
-\1f
-File: groff.info,  Node: gpic,  Next: ggrn,  Prev: gtbl,  Up: Preprocessors
-
-6.3 'gpic'
-==========
-
-* Menu:
-
-* Invoking gpic::
-
-\1f
-File: groff.info,  Node: Invoking gpic,  Prev: gpic,  Up: gpic
-
-6.3.1 Invoking 'gpic'
----------------------
-
-\1f
-File: groff.info,  Node: ggrn,  Next: grap,  Prev: gpic,  Up: Preprocessors
-
-6.4 'ggrn'
-==========
-
-* Menu:
-
-* Invoking ggrn::
-
-\1f
-File: groff.info,  Node: Invoking ggrn,  Prev: ggrn,  Up: ggrn
-
-6.4.1 Invoking 'ggrn'
----------------------
-
-\1f
-File: groff.info,  Node: grap,  Next: gchem,  Prev: ggrn,  Up: Preprocessors
-
-6.5 'grap'
-==========
-
-A free implementation of 'grap', written by Ted Faber, is available as
-an extra package from the following address:
-
-     <http://www.lunabase.org/~faber/Vault/software/grap/>
-
-\1f
-File: groff.info,  Node: gchem,  Next: grefer,  Prev: grap,  Up: Preprocessors
-
-6.6 'gchem'
-===========
-
-* Menu:
-
-* Invoking gchem::
-
-\1f
-File: groff.info,  Node: Invoking gchem,  Prev: gchem,  Up: gchem
-
-6.6.1 Invoking 'gchem'
-----------------------
-
-\1f
-File: groff.info,  Node: grefer,  Next: gsoelim,  Prev: gchem,  Up: Preprocessors
-
-6.7 'grefer'
-============
-
-* Menu:
-
-* Invoking grefer::
-
-\1f
-File: groff.info,  Node: Invoking grefer,  Prev: grefer,  Up: grefer
-
-6.7.1 Invoking 'grefer'
------------------------
-
-\1f
-File: groff.info,  Node: gsoelim,  Next: preconv,  Prev: grefer,  Up: Preprocessors
-
-6.8 'gsoelim'
-=============
-
-* Menu:
-
-* Invoking gsoelim::
-
-\1f
-File: groff.info,  Node: Invoking gsoelim,  Prev: gsoelim,  Up: gsoelim
-
-6.8.1 Invoking 'gsoelim'
-------------------------
-
-\1f
-File: groff.info,  Node: preconv,  Prev: gsoelim,  Up: Preprocessors
-
-6.9 'preconv'
-=============
-
-* Menu:
-
-* Invoking preconv::
-
-\1f
-File: groff.info,  Node: Invoking preconv,  Prev: preconv,  Up: preconv
-
-6.9.1 Invoking 'preconv'
-------------------------
-
-\1f
-File: groff.info,  Node: Output Devices,  Next: File formats,  Prev: Preprocessors,  Up: Top
-
-7 Output Devices
-****************
-
-* Menu:
-
-* Special Characters::
-* grotty::
-* grops::
-* gropdf::
-* grodvi::
-* grolj4::
-* grolbp::
-* grohtml::
-* gxditview::
-
-\1f
-File: groff.info,  Node: Special Characters,  Next: grotty,  Prev: Output Devices,  Up: Output Devices
-
-7.1 Special Characters
-======================
-
-*Note Font Files::.
-
-\1f
-File: groff.info,  Node: grotty,  Next: grops,  Prev: Special Characters,  Up: Output Devices
-
-7.2 'grotty'
-============
-
-The postprocessor 'grotty' translates the output from GNU 'troff' into a
-form suitable for typewriter-like devices.  It is fully documented on
-its manual page, 'grotty(1)'.
-
-* Menu:
-
-* Invoking grotty::
-
-\1f
-File: groff.info,  Node: Invoking grotty,  Prev: grotty,  Up: grotty
-
-7.2.1 Invoking 'grotty'
------------------------
-
-The postprocessor 'grotty' accepts the following command-line options:
-
-'-b'
-     Do not overstrike bold glyphs.  Ignored if '-c' isn't used.
-
-'-B'
-     Do not underline bold-italic glyphs.  Ignored if '-c' isn't used.
-
-'-c'
-     Use overprint and disable colours for printing on legacy Teletype
-     printers (see below).
-
-'-d'
-     Do not render lines (this is, ignore all '\D' escapes).
-
-'-f'
-     Use form feed control characters in the output.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font and device description files, given the target device NAME.
-
-'-h'
-     Use horizontal tabs for sequences of 8 space characters.
-
-'-i'
-     Request italic glyphs from the terminal.  Ignored if '-c' is
-     active.
-
-'-o'
-     Do not overstrike.
-
-'-r'
-     Highlight italic glyphs.  Ignored if '-c' is active.
-
-'-u'
-     Do not underline italic glyphs.  Ignored if '-c' isn't used.
-
-'-U'
-     Do not overstrike bold-italic glyphs.  Ignored if '-c' isn't used.
-
-'-v'
-     Print the version number.
-
-   The '-c' mode for TTY output devices means that underlining is done
-by emitting sequences of '_' and '^H' (the backspace character) before
-the actual character.  Literally, this is printing an underline
-character, then moving the caret back one character position, and
-printing the actual character at the same position as the underline
-character (similar to a typewriter).  Usually, a modern terminal can't
-interpret this (and the original Teletype machines for which this
-sequence was appropriate are no longer in use).  You need a pager
-program like 'less' that translates this into ISO 6429 SGR sequences to
-control terminals.
-
-\1f
-File: groff.info,  Node: grops,  Next: gropdf,  Prev: grotty,  Up: Output Devices
-
-7.3 'grops'
-===========
-
-The postprocessor 'grops' translates the output from GNU 'troff' into a
-form suitable for Adobe POSTSCRIPT devices.  It is fully documented on
-its manual page, 'grops(1)'.
-
-* Menu:
-
-* Invoking grops::
-* Embedding PostScript::
-
-\1f
-File: groff.info,  Node: Invoking grops,  Next: Embedding PostScript,  Prev: grops,  Up: grops
-
-7.3.1 Invoking 'grops'
-----------------------
-
-The postprocessor 'grops' accepts the following command-line options:
-
-'-bFLAGS'
-     Use backward compatibility settings given by FLAGS as documented in
-     the 'grops(1)' manual page.  Overrides the command 'broken' in the
-     'DESC' file.
-
-'-cN'
-     Print N copies of each page.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font, prologue and device description files, given the target
-     device NAME, usually *ps*.
-
-'-g'
-     Tell the printer to guess the page length.  Useful for printing
-     vertically centered pages when the paper dimensions are determined
-     at print time.
-
-'-IPATH ...'
-     Consider the directory 'PATH' for searching included files
-     specified with relative paths.  The current directory is searched
-     as fallback.
-
-'-l'
-     Use landscape orientation.
-
-'-m'
-     Use manual feed.
-
-'-pPAPERSIZE'
-     Set the page dimensions.  Overrides the commands 'papersize',
-     'paperlength', and 'paperwidth' in the 'DESC' file.  See the
-     'groff_font(5)' manual page for details.
-
-'-PPROLOGUE'
-     Use the PROLOGUE in the font path as the prologue instead of the
-     default 'prologue'.  Overrides the environment variable
-     'GROPS_PROLOGUE'.
-
-'-wN'
-     Set the line thickness to N/1000em.  Overrides the default value N
-     = 40.
-
-'-v'
-     Print the version number.
-
-\1f
-File: groff.info,  Node: Embedding PostScript,  Prev: Invoking grops,  Up: grops
-
-7.3.2 Embedding POSTSCRIPT
---------------------------
-
-The escape sequence
-
-   '\X'ps: import FILE LLX LLY URX URY WIDTH [HEIGHT]''
-
-places a rectangle of the specified WIDTH containing the POSTSCRIPT
-drawing from file FILE bound by the box from LLX LLY to URX URY (in
-POSTSCRIPT coordinates) at the insertion point.  If HEIGHT is not
-specified, the embedded drawing is scaled proportionally.
-
-   *Note Miscellaneous::, for the 'psbb' request, which automatically
-generates the bounding box.
-
-   This escape sequence is used internally by the macro 'PSPIC' (see the
-'groff_tmac(5)' manual page).
-
-\1f
-File: groff.info,  Node: gropdf,  Next: grodvi,  Prev: grops,  Up: Output Devices
-
-7.4 'gropdf'
-============
-
-The postprocessor 'gropdf' translates the output from GNU 'troff' into a
-form suitable for Adobe PDF devices.  It is fully documented on its
-manual page, 'gropdf(1)'.
-
-* Menu:
-
-* Invoking gropdf::
-* Embedding PDF::
-
-\1f
-File: groff.info,  Node: Invoking gropdf,  Next: Embedding PDF,  Prev: gropdf,  Up: gropdf
-
-7.4.1 Invoking 'gropdf'
------------------------
-
-The postprocessor 'gropdf' accepts the following command-line options:
-
-'-d'
-     Produce uncompressed PDFs that include debugging comments.
-
-'-e'
-     This forces 'gropdf' to embed all used fonts in the PDF, even if
-     they are one of the 14 base Adobe fonts.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font, prologue and device description files, given the target
-     device NAME, usually *pdf*.
-
-'-yFOUNDRY'
-     This forces the use of a different font foundry.
-
-'-l'
-     Use landscape orientation.
-
-'-pPAPERSIZE'
-     Set the page dimensions.  Overrides the commands 'papersize',
-     'paperlength', and 'paperwidth' in the 'DESC' file.  See the
-     'groff_font(5)' manual page for details.
-
-'-v'
-     Print the version number.
-
-'-s'
-     Append a comment line to end of PDF showing statistics, i.e.
-     number of pages in document.  Ghostscript's 'ps2pdf(1)' complains
-     about this line if it is included, but works anyway.
-
-'-uFILENAME'
-     'gropdf' normally includes a ToUnicode CMap with any font created
-     using 'text.enc' as the encoding file, this makes it easier to
-     search for words that contain ligatures.  You can include your own
-     CMap by specifying a FILENAME or have no CMap at all by omitting
-     the FILENAME.
-
-\1f
-File: groff.info,  Node: Embedding PDF,  Prev: Invoking gropdf,  Up: gropdf
-
-7.4.2 Embedding PDF
--------------------
-
-The escape sequence
-
-   '\X'pdf: pdfpic FILE ALIGNMENT WIDTH [HEIGHT] [LINELENGTH]''
-
-places a rectangle of the specified WIDTH containing the PDF drawing
-from file FILE of desired WIDTH and HEIGHT (if HEIGHT is missing or zero
-then it is scaled proportionally).  If ALIGNMENT is '-L' the drawing is
-left aligned.  If it is '-C' or '-R' a LINELENGTH greater than the width
-of the drawing is required as well.  If WIDTH is specified as zero then
-the width is scaled in proportion to the height.
-
-\1f
-File: groff.info,  Node: grodvi,  Next: grolj4,  Prev: gropdf,  Up: Output Devices
-
-7.5 'grodvi'
-============
-
-The postprocessor 'grodvi' translates the output from GNU 'troff' into
-the *DVI* output format compatible with the *TeX* document preparation
-system.  It is fully documented on its manual page, 'grodvi(1)'.
-
-* Menu:
-
-* Invoking grodvi::
-
-\1f
-File: groff.info,  Node: Invoking grodvi,  Prev: grodvi,  Up: grodvi
-
-7.5.1 Invoking 'grodvi'
------------------------
-
-The postprocessor 'grodvi' accepts the following command-line options:
-
-'-d'
-     Do not use *tpic* specials to implement drawing commands.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font and device description files, given the target device NAME,
-     usually *dvi*.
-
-'-l'
-     Use landscape orientation.
-
-'-pPAPERSIZE'
-     Set the page dimensions.  Overrides the commands 'papersize',
-     'paperlength', and 'paperwidth' in the 'DESC' file.  See
-     'groff_font(5)' manual page for details.
-
-'-v'
-     Print the version number.
-
-'-wN'
-     Set the line thickness to N/1000em.  Overrides the default value N
-     = 40.
-
-\1f
-File: groff.info,  Node: grolj4,  Next: grolbp,  Prev: grodvi,  Up: Output Devices
-
-7.6 'grolj4'
-============
-
-The postprocessor 'grolj4' translates the output from GNU 'troff' into
-the *PCL5* output format suitable for printing on a *HP LaserJet 4*
-printer.  It is fully documented on its manual page, 'grolj4(1)'.
-
-* Menu:
-
-* Invoking grolj4::
-
-\1f
-File: groff.info,  Node: Invoking grolj4,  Prev: grolj4,  Up: grolj4
-
-7.6.1 Invoking 'grolj4'
------------------------
-
-The postprocessor 'grolj4' accepts the following command-line options:
-
-'-cN'
-     Print N copies of each page.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font and device description files, given the target device NAME,
-     usually *lj4*.
-
-'-l'
-     Use landscape orientation.
-
-'-pSIZE'
-     Set the page dimensions.  Valid values for SIZE are: 'letter',
-     'legal', 'executive', 'a4', 'com10', 'monarch', 'c5', 'b5', 'd1'.
-
-'-v'
-     Print the version number.
-
-'-wN'
-     Set the line thickness to N/1000em.  Overrides the default value N
-     = 40.
-
-   The special drawing command '\D'R DH DV'' draws a horizontal
-rectangle from the current position to the position at offset (DH,DV).
-
-\1f
-File: groff.info,  Node: grolbp,  Next: grohtml,  Prev: grolj4,  Up: Output Devices
-
-7.7 'grolbp'
-============
-
-The postprocessor 'grolbp' translates the output from GNU 'troff' into
-the *LBP* output format suitable for printing on *Canon CAPSL* printers.
-It is fully documented on its manual page, 'grolbp(1)'.
-
-* Menu:
-
-* Invoking grolbp::
-
-\1f
-File: groff.info,  Node: Invoking grolbp,  Prev: grolbp,  Up: grolbp
-
-7.7.1 Invoking 'grolbp'
------------------------
-
-The postprocessor 'grolbp' accepts the following command-line options:
-
-'-cN'
-     Print N copies of each page.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font, prologue and device description files, given the target
-     device NAME, usually *lbp*.
-
-'-l'
-     Use landscape orientation.
-
-'-oORIENTATION'
-     Use the ORIENTATION specified: 'portrait' or 'landscape'.
-
-'-pPAPERSIZE'
-     Set the page dimensions.  See 'groff_font(5)' manual page for
-     details.
-
-'-wN'
-     Set the line thickness to N/1000em.  Overrides the default value N
-     = 40.
-
-'-v'
-     Print the version number.
-
-'-h'
-     Print command-line help.
-
-\1f
-File: groff.info,  Node: grohtml,  Next: gxditview,  Prev: grolbp,  Up: Output Devices
-
-7.8 'grohtml'
-=============
-
-The 'grohtml' front end (which consists of a preprocessor,
-'pre-grohtml', and a device driver, 'post-grohtml') translates the
-output of GNU 'troff' to HTML.  Users should always invoke 'grohtml' via
-the 'groff' command with a '\-Thtml' option.  If no files are given,
-'grohtml' will read the standard input.  A filename of '-' will also
-cause 'grohtml' to read the standard input.  HTML output is written to
-the standard output.  When 'grohtml' is run by 'groff', options can be
-passed to 'grohtml' using 'groff''s '-P' option.
-
-   'grohtml' invokes 'groff' twice.  In the first pass, pictures,
-equations, and tables are rendered using the 'ps' device, and in the
-second pass HTML output is generated by the 'html' device.
-
-   'grohtml' always writes output in 'UTF-8' encoding and has built-in
-entities for all non-composite unicode characters.  In spite of this,
-'groff' may issue warnings about unknown special characters if they
-can't be found during the first pass.  Such warnings can be safely
-ignored unless the special characters appear inside a table or equation,
-in which case glyphs for these characters must be defined for the 'ps'
-device as well.
-
-   This output device is fully documented on its manual page,
-'grohtml(1)'.
-
-* Menu:
-
-* Invoking grohtml::
-* grohtml specific registers and strings::
-
-\1f
-File: groff.info,  Node: Invoking grohtml,  Next: grohtml specific registers and strings,  Prev: grohtml,  Up: grohtml
-
-7.8.1 Invoking 'grohtml'
-------------------------
-
-The postprocessor 'grohtml' accepts the following command-line options:
-
-'-aBITS'
-     Use this number of BITS (= 1, 2 or 4) for text antialiasing.
-     Default: BITS = 4.
-
-'-a0'
-     Do not use text antialiasing.
-
-'-b'
-     Use white background.
-
-'-DDIR'
-     Store rendered images in the directory 'DIR'.
-
-'-FDIR'
-     Put the directory 'DIR/devNAME' in front of the search path for the
-     font, prologue and device description files, given the target
-     device NAME, usually *html*.
-
-'-gBITS'
-     Use this number of BITS (= 1, 2 or 4) for antialiasing of drawings.
-     Default: BITS = 4.
-
-'-g0'
-     Do not use antialiasing for drawings.
-
-'-h'
-     Use the 'B' element for section headings.
-
-'-iRESOLUTION'
-     Use the RESOLUTION for rendered images.  Default: RESOLUTION =
-     100dpi.
-
-'-ISTEM'
-     Set the images' STEM NAME.  Default: STEM = 'grohtml-XXX' (XXX is
-     the process ID).
-
-'-jSTEM'
-     Place each section in a separate file called 'STEM-N.html' (where N
-     is a generated section number).
-
-'-l'
-     Do not generate the table of contents.
-
-'-n'
-     Generate simple fragment identifiers.
-
-'-oOFFSET'
-     Use vertical paddding OFFSET for images.
-
-'-p'
-     Display the page rendering progress to 'stderr'.
-
-'-r'
-     Do not use horizontal rules to separate headers and footers.
-
-'-sSIZE'
-     Set the base font size, to be modified using the elements 'BIG' and
-     'SMALL'.
-
-'-SLEVEL'
-     Generate separate files for sections at level LEVEL.
-
-'-v'
-     Print the version number.
-
-'-V'
-     Generate a validator button at the bottom.
-
-'-y'
-     Generate a signature of groff after the validator button, if any.
-
-\1f
-File: groff.info,  Node: grohtml specific registers and strings,  Prev: Invoking grohtml,  Up: grohtml
-
-7.8.2 'grohtml' specific registers and strings
-----------------------------------------------
-
- -- Register: \n[ps4html]
- -- String: \*[www-image-template]
-     The registers 'ps4html' and 'www-image-template' are defined by the
-     'pre-grohtml' preprocessor.  'pre-grohtml' reads in the 'troff'
-     input, marks up the inline equations and passes the result firstly
-     to
-
-          troff -Tps -rps4html=1 -dwww-image-template=TEMPLATE
-
-     and secondly to
-
-          troff -Thtml
-
-     or
-
-          troff -Txhtml
-
-     The POSTSCRIPT device is used to create all the image files (for
-     '-Thtml'; if '-Txhtml' is used, all equations are passed to 'geqn'
-     to produce MathML, and the register 'ps4html' enables the macro
-     sets to ignore floating keeps, footers, and headings.
-
-     The register 'www-image-template' is set to the user specified
-     template name or the default name.
-
-\1f
-File: groff.info,  Node: gxditview,  Prev: grohtml,  Up: Output Devices
-
-7.9 'gxditview'
-===============
-
-* Menu:
-
-* Invoking gxditview::
-
-\1f
-File: groff.info,  Node: Invoking gxditview,  Prev: gxditview,  Up: gxditview
-
-7.9.1 Invoking 'gxditview'
---------------------------
-
-\1f
-File: groff.info,  Node: File formats,  Next: Installation,  Prev: Output Devices,  Up: Top
-
-8 File formats
-**************
-
-All files read and written by 'gtroff' are text files.  The following
-two sections describe their format.
-
-* Menu:
-
-* gtroff Output::
-* Font Files::
-
-\1f
-File: groff.info,  Node: gtroff Output,  Next: Font Files,  Prev: File formats,  Up: File formats
-
-8.1 'gtroff' Output
-===================
-
-This section describes the intermediate output format of GNU 'troff'.
-This output is produced by a run of 'gtroff' before it is fed into a
-device postprocessor program.
-
-   As 'groff' is a wrapper program around 'gtroff' that automatically
-calls a postprocessor, this output does not show up normally.  This is
-why it is called "intermediate".  'groff' provides the option '-Z' to
-inhibit postprocessing, such that the produced intermediate output is
-sent to standard output just like calling 'gtroff' manually.
-
-   Here, the term "troff output" describes what is output by 'gtroff',
-while "intermediate output" refers to the language that is accepted by
-the parser that prepares this output for the postprocessors.  This
-parser is smarter on whitespace and implements obsolete elements for
-compatibility, otherwise both formats are the same.(1)  (*note gtroff
-Output-Footnote-1::)
-
-   The main purpose of the intermediate output concept is to facilitate
-the development of postprocessors by providing a common programming
-interface for all devices.  It has a language of its own that is
-completely different from the 'gtroff' language.  While the 'gtroff'
-language is a high-level programming language for text processing, the
-intermediate output language is a kind of low-level assembler language
-by specifying all positions on the page for writing and drawing.
-
-   The intermediate output produced by 'gtroff' is fairly readable,
-while output from AT&T 'troff' is rather hard to understand because of
-strange habits that are still supported, but not used any longer by
-'gtroff'.
-
-* Menu:
-
-* Language Concepts::
-* Command Reference::
-* Intermediate Output Examples::
-* Output Language Compatibility::
-
-\1f
-File: groff.info,  Node: gtroff Output-Footnotes,  Up: gtroff Output
-
-   (1) The parser and postprocessor for intermediate output can be found
-in the file
-'GROFF-SOURCE-DIR/src/libs/libdriver/input.cpp'.
-
-\1f
-File: groff.info,  Node: Language Concepts,  Next: Command Reference,  Prev: gtroff Output,  Up: gtroff Output
-
-8.1.1 Language Concepts
------------------------
-
-During the run of 'gtroff', the input data is cracked down to the
-information on what has to be printed at what position on the intended
-device.  So the language of the intermediate output format can be quite
-small.  Its only elements are commands with and without arguments.  In
-this section, the term "command" always refers to the intermediate
-output language, and never to the 'gtroff' language used for document
-formatting.  There are commands for positioning and text writing, for
-drawing, and for device controlling.
-
-* Menu:
-
-* Separation::
-* Argument Units::
-* Document Parts::
-
-\1f
-File: groff.info,  Node: Separation,  Next: Argument Units,  Prev: Language Concepts,  Up: Language Concepts
-
-8.1.1.1 Separation
-..................
-
-AT&T 'troff' output has strange requirements on whitespace.  The
-'gtroff' output parser, however, is smart about whitespace by making it
-maximally optional.  The whitespace characters, i.e., the tab, space,
-and newline characters, always have a syntactical meaning.  They are
-never printable because spacing within the output is always done by
-positioning commands.
-
-   Any sequence of space or tab characters is treated as a single
-"syntactical space".  It separates commands and arguments, but is only
-required when there would occur a clashing between the command code and
-the arguments without the space.  Most often, this happens when
-variable-length command names, arguments, argument lists, or command
-clusters meet.  Commands and arguments with a known, fixed length need
-not be separated by syntactical space.
-
-   A line break is a syntactical element, too.  Every command argument
-can be followed by whitespace, a comment, or a newline character.  Thus
-a "syntactical line break" is defined to consist of optional syntactical
-space that is optionally followed by a comment, and a newline character.
-
-   The normal commands, those for positioning and text, consist of a
-single letter taking a fixed number of arguments.  For historical
-reasons, the parser allows to stack such commands on the same line, but
-fortunately, in 'gtroff''s intermediate output, every command with at
-least one argument is followed by a line break, thus providing excellent
-readability.
-
-   The other commands - those for drawing and device controlling - have
-a more complicated structure; some recognize long command names, and
-some take a variable number of arguments.  So all 'D' and 'x' commands
-were designed to request a syntactical line break after their last
-argument.  Only one command, 'x X', has an argument that can stretch
-over several lines; all other commands must have all of their arguments
-on the same line as the command, i.e., the arguments may not be split by
-a line break.
-
-   Empty lines (these are lines containing only space and/or a comment),
-can occur everywhere.  They are just ignored.
-
-\1f
-File: groff.info,  Node: Argument Units,  Next: Document Parts,  Prev: Separation,  Up: Language Concepts
-
-8.1.1.2 Argument Units
-......................
-
-Some commands take integer arguments that are assumed to represent
-values in a measurement unit, but the letter for the corresponding scale
-indicator is not written with the output command arguments.  Most
-commands assume the scale indicator 'u', the basic unit of the device,
-some use 'z', the scaled point unit of the device, while others, such as
-the color commands, expect plain integers.
-
-   Note that single characters can have the eighth bit set, as can the
-names of fonts and special characters.  The names of characters and
-fonts can be of arbitrary length.  A character that is to be printed is
-always in the current font.
-
-   A string argument is always terminated by the next whitespace
-character (space, tab, or newline); an embedded '#' character is
-regarded as part of the argument, not as the beginning of a comment
-command.  An integer argument is already terminated by the next
-non-digit character, which then is regarded as the first character of
-the next argument or command.
-
-\1f
-File: groff.info,  Node: Document Parts,  Prev: Argument Units,  Up: Language Concepts
-
-8.1.1.3 Document Parts
-......................
-
-A correct intermediate output document consists of two parts, the
-"prologue" and the "body".
-
-   The task of the prologue is to set the general device parameters
-using three exactly specified commands.  'gtroff''s prologue is
-guaranteed to consist of the following three lines (in that order):
-
-     x T DEVICE
-     x res N H V
-     x init
-
-with the arguments set as outlined in *note Device Control Commands::.
-Note that the parser for the intermediate output format is able to
-swallow additional whitespace and comments as well even in the prologue.
-
-   The body is the main section for processing the document data.
-Syntactically, it is a sequence of any commands different from the ones
-used in the prologue.  Processing is terminated as soon as the first
-'x stop' command is encountered; the last line of any 'gtroff'
-intermediate output always contains such a command.
-
-   Semantically, the body is page oriented.  A new page is started by a
-'p' command.  Positioning, writing, and drawing commands are always done
-within the current page, so they cannot occur before the first 'p'
-command.  Absolute positioning (by the 'H' and 'V' commands) is done
-relative to the current page; all other positioning is done relative to
-the current location within this page.
-
-\1f
-File: groff.info,  Node: Command Reference,  Next: Intermediate Output Examples,  Prev: Language Concepts,  Up: gtroff Output
-
-8.1.2 Command Reference
------------------------
-
-This section describes all intermediate output commands, both from AT&T
-'troff' as well as the 'gtroff' extensions.
-
-* Menu:
-
-* Comment Command::
-* Simple Commands::
-* Graphics Commands::
-* Device Control Commands::
-* Obsolete Command::
-
-\1f
-File: groff.info,  Node: Comment Command,  Next: Simple Commands,  Prev: Command Reference,  Up: Command Reference
-
-8.1.2.1 Comment Command
-.......................
-
-'#ANYTHING<end of line>'
-     A comment.  Ignore any characters from the '#' character up to the
-     next newline character.
-
-     This command is the only possibility for commenting in the
-     intermediate output.  Each comment can be preceded by arbitrary
-     syntactical space; every command can be terminated by a comment.
-
-\1f
-File: groff.info,  Node: Simple Commands,  Next: Graphics Commands,  Prev: Comment Command,  Up: Command Reference
-
-8.1.2.2 Simple Commands
-.......................
-
-The commands in this subsection have a command code consisting of a
-single character, taking a fixed number of arguments.  Most of them are
-commands for positioning and text writing.  These commands are smart
-about whitespace.  Optionally, syntactical space can be inserted before,
-after, and between the command letter and its arguments.  All of these
-commands are stackable, i.e., they can be preceded by other simple
-commands or followed by arbitrary other commands on the same line.  A
-separating syntactical space is only necessary when two integer
-arguments would clash or if the preceding argument ends with a string
-argument.
-
-'C XXX<whitespace>'
-     Print a special character named XXX.  The trailing syntactical
-     space or line break is necessary to allow glyph names of arbitrary
-     length.  The glyph is printed at the current print position; the
-     glyph's size is read from the font file.  The print position is not
-     changed.
-
-'c G'
-     Print glyph G at the current print position;(1) (*note Simple
-     Commands-Footnote-1::) the glyph's size is read from the font file.
-     The print position is not changed.
-
-'f N'
-     Set font to font number N (a non-negative integer).
-
-'H N'
-     Move right to the absolute vertical position N (a non-negative
-     integer in basic units 'u' relative to left edge of current page.
-
-'h N'
-     Move N (a non-negative integer) basic units 'u' horizontally to the
-     right.  The original UNIX troff manual allows negative values for N
-     also, but 'gtroff' doesn't use this.
-
-'m COLOR-SCHEME [COMPONENT ...]'
-     Set the color for text (glyphs), line drawing, and the outline of
-     graphic objects using different color schemes; the analoguous
-     command for the filling color of graphic objects is 'DF'.  The
-     color components are specified as integer arguments between 0 and
-     65536.  The number of color components and their meaning vary for
-     the different color schemes.  These commands are generated by
-     'gtroff''s escape sequence '\m'.  No position changing.  These
-     commands are a 'gtroff' extension.
-
-     'mc CYAN MAGENTA YELLOW'
-          Set color using the CMY color scheme, having the 3 color
-          components CYAN, MAGENTA, and YELLOW.
-
-     'md'
-          Set color to the default color value (black in most cases).
-          No component arguments.
-
-     'mg GRAY'
-          Set color to the shade of gray given by the argument, an
-          integer between 0 (black) and 65536 (white).
-
-     'mk CYAN MAGENTA YELLOW BLACK'
-          Set color using the CMYK color scheme, having the 4 color
-          components CYAN, MAGENTA, YELLOW, and BLACK.
-
-     'mr RED GREEN BLUE'
-          Set color using the RGB color scheme, having the 3 color
-          components RED, GREEN, and BLUE.
-
-'N N'
-     Print glyph with index N (a non-negative integer) of the current
-     font.  This command is a 'gtroff' extension.
-
-'n B A'
-     Inform the device about a line break, but no positioning is done by
-     this command.  In AT&T 'troff', the integer arguments B and A
-     informed about the space before and after the current line to make
-     the intermediate output more human readable without performing any
-     action.  In 'groff', they are just ignored, but they must be
-     provided for compatibility reasons.
-
-'p N'
-     Begin a new page in the outprint.  The page number is set to N.
-     This page is completely independent of pages formerly processed
-     even if those have the same page number.  The vertical position on
-     the outprint is automatically set to 0.  All positioning, writing,
-     and drawing is always done relative to a page, so a 'p' command
-     must be issued before any of these commands.
-
-'s N'
-     Set point size to N scaled points (this is unit 'z').  AT&T 'troff'
-     used the unit points ('p') instead.  *Note Output Language
-     Compatibility::.
-
-'t XXX<whitespace>'
-'t XXX DUMMY-ARG<whitespace>'
-     Print a word, i.e., a sequence of characters XXX representing
-     output glyphs which names are single characters, terminated by a
-     space character or a line break; an optional second integer
-     argument is ignored (this allows the formatter to generate an even
-     number of arguments).  The first glyph should be printed at the
-     current position, the current horizontal position should then be
-     increased by the width of the first glyph, and so on for each
-     glyph.  The widths of the glyphs are read from the font file,
-     scaled for the current point size, and rounded to a multiple of the
-     horizontal resolution.  Special characters cannot be printed using
-     this command (use the 'C' command for special characters).  This
-     command is a 'gtroff' extension; it is only used for devices whose
-     'DESC' file contains the 'tcommand' keyword (*note DESC File
-     Format::).
-
-'u N XXX<whitespace>'
-     Print word with track kerning.  This is the same as the 't' command
-     except that after printing each glyph, the current horizontal
-     position is increased by the sum of the width of that glyph and N
-     (an integer in basic units 'u').  This command is a 'gtroff'
-     extension; it is only used for devices whose 'DESC' file contains
-     the 'tcommand' keyword (*note DESC File Format::).
-
-'V N'
-     Move down to the absolute vertical position N (a non-negative
-     integer in basic units 'u') relative to upper edge of current page.
-
-'v N'
-     Move N basic units 'u' down (N is a non-negative integer).  The
-     original UNIX troff manual allows negative values for N also, but
-     'gtroff' doesn't use this.
-
-'w'
-     Informs about a paddable white space to increase readability.  The
-     spacing itself must be performed explicitly by a move command.
-
-\1f
-File: groff.info,  Node: Simple Commands-Footnotes,  Up: Simple Commands
-
-   (1) 'c' is actually a misnomer since it outputs a glyph.
-
-\1f
-File: groff.info,  Node: Graphics Commands,  Next: Device Control Commands,  Prev: Simple Commands,  Up: Command Reference
-
-8.1.2.3 Graphics Commands
-.........................
-
-Each graphics or drawing command in the intermediate output starts with
-the letter 'D', followed by one or two characters that specify a
-subcommand; this is followed by a fixed or variable number of integer
-arguments that are separated by a single space character.  A 'D' command
-may not be followed by another command on the same line (apart from a
-comment), so each 'D' command is terminated by a syntactical line break.
-
-   'gtroff' output follows the classical spacing rules (no space between
-command and subcommand, all arguments are preceded by a single space
-character), but the parser allows optional space between the command
-letters and makes the space before the first argument optional.  As
-usual, each space can be any sequence of tab and space characters.
-
-   Some graphics commands can take a variable number of arguments.  In
-this case, they are integers representing a size measured in basic units
-'u'.  The arguments called H1, H2, ..., HN stand for horizontal
-distances where positive means right, negative left.  The arguments
-called V1, V2, ..., VN stand for vertical distances where positive means
-down, negative up.  All these distances are offsets relative to the
-current location.
-
-   Each graphics command directly corresponds to a similar 'gtroff' '\D'
-escape sequence.  *Note Drawing Requests::.
-
-   Unknown 'D' commands are assumed to be device-specific.  Its
-arguments are parsed as strings; the whole information is then sent to
-the postprocessor.
-
-   In the following command reference, the syntax element <line break>
-means a syntactical line break as defined above.
-
-'D~ H1 V1 H2 V2 ... HN VN<line break>'
-     Draw B-spline from current position to offset (H1,V1), then to
-     offset (H2,V2), if given, etc. up to (HN,VN).  This command takes a
-     variable number of argument pairs; the current position is moved to
-     the terminal point of the drawn curve.
-
-'Da H1 V1 H2 V2<line break>'
-     Draw arc from current position to (H1,V1)+(H2,V2) with center at
-     (H1,V1); then move the current position to the final point of the
-     arc.
-
-'DC D<line break>'
-'DC D DUMMY-ARG<line break>'
-     Draw a solid circle using the current fill color with diameter D
-     (integer in basic units 'u') with leftmost point at the current
-     position; then move the current position to the rightmost point of
-     the circle.  An optional second integer argument is ignored (this
-     allows the formatter to generate an even number of arguments).
-     This command is a 'gtroff' extension.
-
-'Dc D<line break>'
-     Draw circle line with diameter D (integer in basic units 'u') with
-     leftmost point at the current position; then move the current
-     position to the rightmost point of the circle.
-
-'DE H V<line break>'
-     Draw a solid ellipse in the current fill color with a horizontal
-     diameter of H and a vertical diameter of V (both integers in basic
-     units 'u') with the leftmost point at the current position; then
-     move to the rightmost point of the ellipse.  This command is a
-     'gtroff' extension.
-
-'De H V<line break>'
-     Draw an outlined ellipse with a horizontal diameter of H and a
-     vertical diameter of V (both integers in basic units 'u') with the
-     leftmost point at current position; then move to the rightmost
-     point of the ellipse.
-
-'DF COLOR-SCHEME [COMPONENT ...]<line break>'
-     Set fill color for solid drawing objects using different color
-     schemes; the analoguous command for setting the color of text, line
-     graphics, and the outline of graphic objects is 'm'.  The color
-     components are specified as integer arguments between 0 and 65536.
-     The number of color components and their meaning vary for the
-     different color schemes.  These commands are generated by
-     'gtroff''s escape sequences '\D'F ...'' and '\M' (with no other
-     corresponding graphics commands).  No position changing.  This
-     command is a 'gtroff' extension.
-
-     'DFc CYAN MAGENTA YELLOW<line break>'
-          Set fill color for solid drawing objects using the CMY color
-          scheme, having the 3 color components CYAN, MAGENTA, and
-          YELLOW.
-
-     'DFd<line break>'
-          Set fill color for solid drawing objects to the default fill
-          color value (black in most cases).  No component arguments.
-
-     'DFg GRAY<line break>'
-          Set fill color for solid drawing objects to the shade of gray
-          given by the argument, an integer between 0 (black) and 65536
-          (white).
-
-     'DFk CYAN MAGENTA YELLOW BLACK<line break>'
-          Set fill color for solid drawing objects using the CMYK color
-          scheme, having the 4 color components CYAN, MAGENTA, YELLOW,
-          and BLACK.
-
-     'DFr RED GREEN BLUE<line break>'
-          Set fill color for solid drawing objects using the RGB color
-          scheme, having the 3 color components RED, GREEN, and BLUE.
-
-'Df N<line break>'
-     The argument N must be an integer in the range -32767 to 32767.
-
-     0 <= N <= 1000
-          Set the color for filling solid drawing objects to a shade of
-          gray, where 0 corresponds to solid white, 1000 (the default)
-          to solid black, and values in between to intermediate shades
-          of gray; this is obsoleted by command 'DFg'.
-
-     N < 0 or N > 1000
-          Set the filling color to the color that is currently being
-          used for the text and the outline, see command 'm'.  For
-          example, the command sequence
-
-               mg 0 0 65536
-               Df -1
-
-          sets all colors to blue.
-
-     No position changing.  This command is a 'gtroff' extension.
-
-'Dl H V<line break>'
-     Draw line from current position to offset (H,V) (integers in basic
-     units 'u'); then set current position to the end of the drawn line.
-
-'Dp H1 V1 H2 V2 ... HN VN<line break>'
-     Draw a polygon line from current position to offset (H1,V1), from
-     there to offset (H2,V2), etc. up to offset (HN,VN), and from there
-     back to the starting position.  For historical reasons, the
-     position is changed by adding the sum of all arguments with odd
-     index to the actual horizontal position and the even ones to the
-     vertical position.  Although this doesn't make sense it is kept for
-     compatibility.  This command is a 'gtroff' extension.
-
-'Dp H1 V1 H2 V2 ... HN VN<line break>'
-     Draw a solid polygon in the current fill color rather than an
-     outlined polygon, using the same arguments and positioning as the
-     corresponding 'Dp' command.  This command is a 'gtroff' extension.
-
-'Dt N<line break>'
-     Set the current line thickness to N (an integer in basic units 'u')
-     if N>0; if N=0 select the smallest available line thickness; if N<0
-     set the line thickness proportional to the point size (this is the
-     default before the first 'Dt' command was specified).  For
-     historical reasons, the horizontal position is changed by adding
-     the argument to the actual horizontal position, while the vertical
-     position is not changed.  Although this doesn't make sense it is
-     kept for compatibility.  This command is a 'gtroff' extension.
-
-\1f
-File: groff.info,  Node: Device Control Commands,  Next: Obsolete Command,  Prev: Graphics Commands,  Up: Command Reference
-
-8.1.2.4 Device Control Commands
-...............................
-
-Each device control command starts with the letter 'x', followed by a
-space character (optional or arbitrary space or tab in 'gtroff') and a
-subcommand letter or word; each argument (if any) must be preceded by a
-syntactical space.  All 'x' commands are terminated by a syntactical
-line break; no device control command can be followed by another command
-on the same line (except a comment).
-
-   The subcommand is basically a single letter, but to increase
-readability, it can be written as a word, i.e., an arbitrary sequence of
-characters terminated by the next tab, space, or newline character.  All
-characters of the subcommand word but the first are simply ignored.  For
-example, 'gtroff' outputs the initialization command 'x i' as 'x init'
-and the resolution command 'x r' as 'x res'.
-
-   In the following, the syntax element <line break> means a syntactical
-line break (*note Separation::).
-
-'xF NAME<line break>'
-     The 'F' stands for FILENAME.
-
-     Use NAME as the intended name for the current file in error
-     reports.  This is useful for remembering the original file name
-     when 'gtroff' uses an internal piping mechanism.  The input file is
-     not changed by this command.  This command is a 'gtroff' extension.
-
-'xf N S<line break>'
-     The 'f' stands for FONT.
-
-     Mount font position N (a non-negative integer) with font named S (a
-     text word).  *Note Font Positions::.
-
-'xH N<line break>'
-     The 'H' stands for HEIGHT.
-
-     Set glyph height to N (a positive integer in scaled points 'z').
-     AT&T 'troff' uses the unit points ('p') instead.  *Note Output
-     Language Compatibility::.
-
-'xi<line break>'
-     The 'i' stands for INIT.
-
-     Initialize device.  This is the third command of the prologue.
-
-'xp<line break>'
-     The 'p' stands for PAUSE.
-
-     Parsed but ignored.  The original UNIX troff manual writes
-
-          pause device, can be restarted
-
-'xr N H V<line break>'
-     The 'r' stands for RESOLUTION.
-
-     Resolution is N, while H is the minimal horizontal motion, and V
-     the minimal vertical motion possible with this device; all
-     arguments are positive integers in basic units 'u' per inch.  This
-     is the second command of the prologue.
-
-'xS N<line break>'
-     The 'S' stands for SLANT.
-
-     Set slant to N (an integer in basic units 'u').
-
-'xs<line break>'
-     The 's' stands for STOP.
-
-     Terminates the processing of the current file; issued as the last
-     command of any intermediate troff output.
-
-'xt<line break>'
-     The 't' stands for TRAILER.
-
-     Generate trailer information, if any.  In GTROFF, this is actually
-     just ignored.
-
-'xT XXX<line break>'
-     The 'T' stands for TYPESETTER.
-
-     Set name of device to word XXX, a sequence of characters ended by
-     the next white space character.  The possible device names coincide
-     with those from the 'groff' '-T' option.  This is the first command
-     of the prologue.
-
-'xu N<line break>'
-     The 'u' stands for UNDERLINE.
-
-     Configure underlining of spaces.  If N is 1, start underlining of
-     spaces; if N is 0, stop underlining of spaces.  This is needed for
-     the 'cu' request in nroff mode and is ignored otherwise.  This
-     command is a 'gtroff' extension.
-
-'xX ANYTHING<line break>'
-     The 'x' stands for X-ESCAPE.
-
-     Send string ANYTHING uninterpreted to the device.  If the line
-     following this command starts with a '+' character this line is
-     interpreted as a continuation line in the following sense.  The '+'
-     is ignored, but a newline character is sent instead to the device,
-     the rest of the line is sent uninterpreted.  The same applies to
-     all following lines until the first character of a line is not a
-     '+' character.  This command is generated by the 'gtroff' escape
-     sequence '\X'.  The line-continuing feature is a 'gtroff'
-     extension.
-
-\1f
-File: groff.info,  Node: Obsolete Command,  Prev: Device Control Commands,  Up: Command Reference
-
-8.1.2.5 Obsolete Command
-........................
-
-In AT&T 'troff' output, the writing of a single glyph is mostly done by
-a very strange command that combines a horizontal move and a single
-character giving the glyph name.  It doesn't have a command code, but is
-represented by a 3-character argument consisting of exactly 2 digits and
-a character.
-
-DDG
-     Move right DD (exactly two decimal digits) basic units 'u', then
-     print glyph G (represented as a single character).
-
-     In 'gtroff', arbitrary syntactical space around and within this
-     command is allowed to be added.  Only when a preceding command on
-     the same line ends with an argument of variable length a separating
-     space is obligatory.  In AT&T 'troff', large clusters of these and
-     other commands are used, mostly without spaces; this made such
-     output almost unreadable.
-
-   For modern high-resolution devices, this command does not make sense
-because the width of the glyphs can become much larger than two decimal
-digits.  In 'gtroff', this is only used for the devices 'X75', 'X75-12',
-'X100', and 'X100-12'.  For other devices, the commands 't' and 'u'
-provide a better functionality.
-
-\1f
-File: groff.info,  Node: Intermediate Output Examples,  Next: Output Language Compatibility,  Prev: Command Reference,  Up: gtroff Output
-
-8.1.3 Intermediate Output Examples
-----------------------------------
-
-This section presents the intermediate output generated from the same
-input for three different devices.  The input is the sentence 'hell
-world' fed into 'gtroff' on the command line.
-
-High-resolution device 'ps'
-
-     This is the standard output of 'gtroff' if no '-T' option is given.
-
-          shell> echo "hell world" | groff -Z -T ps
-
-          x T ps
-          x res 72000 1 1
-          x init
-          p1
-          x font 5 TR
-          f5
-          s10000
-          V12000
-          H72000
-          thell
-          wh2500
-          tw
-          H96620
-          torld
-          n12000 0
-          x trailer
-          V792000
-          x stop
-
-     This output can be fed into 'grops' to get its representation as a
-     POSTSCRIPT file.
-
-Low-resolution device 'latin1'
-
-     This is similar to the high-resolution device except that the
-     positioning is done at a minor scale.  Some comments (lines
-     starting with '#') were added for clarification; they were not
-     generated by the formatter.
-
-          shell> echo "hell world" | groff -Z -T latin1
-
-          # prologue
-          x T latin1
-          x res 240 24 40
-          x init
-          # begin a new page
-          p1
-          # font setup
-          x font 1 R
-          f1
-          s10
-          # initial positioning on the page
-          V40
-          H0
-          # write text `hell'
-          thell
-          # inform about space, and issue a horizontal jump
-          wh24
-          # write text `world'
-          tworld
-          # announce line break, but do nothing because ...
-          n40 0
-          # ... the end of the document has been reached
-          x trailer
-          V2640
-          x stop
-
-     This output can be fed into 'grotty' to get a formatted text
-     document.
-
-AT&T 'troff' output
-     Since a computer monitor has a very low resolution compared to
-     modern printers the intermediate output for the X Window devices
-     can use the jump-and-write command with its 2-digit displacements.
-
-          shell> echo "hell world" | groff -Z -T X100
-
-          x T X100
-          x res 100 1 1
-          x init
-          p1
-          x font 5 TR
-          f5
-          s10
-          V16
-          H100
-          # write text with jump-and-write commands
-          ch07e07l03lw06w11o07r05l03dh7
-          n16 0
-          x trailer
-          V1100
-          x stop
-
-     This output can be fed into 'xditview' or 'gxditview' for
-     displaying in X.
-
-     Due to the obsolete jump-and-write command, the text clusters in
-     the AT&T 'troff' output are almost unreadable.
-
-\1f
-File: groff.info,  Node: Output Language Compatibility,  Prev: Intermediate Output Examples,  Up: gtroff Output
-
-8.1.4 Output Language Compatibility
------------------------------------
-
-The intermediate output language of AT&T 'troff' was first documented in
-the UNIX troff manual, with later additions documented in 'A
-Typesetter-indenpendent TROFF', written by Brian Kernighan.
-
-   The 'gtroff' intermediate output format is compatible with this
-specification except for the following features.
-
-   * The classical quasi device independence is not yet implemented.
-
-   * The old hardware was very different from what we use today.  So the
-     'groff' devices are also fundamentally different from the ones in
-     AT&T 'troff'.  For example, the AT&T POSTSCRIPT device is called
-     'post' and has a resolution of only 720 units per inch, suitable
-     for printers 20 years ago, while 'groff''s 'ps' device has a
-     resolution of 72000 units per inch.  Maybe, by implementing some
-     rescaling mechanism similar to the classical quasi device
-     independence, 'groff' could emulate AT&T's 'post' device.
-
-   * The B-spline command 'D~' is correctly handled by the intermediate
-     output parser, but the drawing routines aren't implemented in some
-     of the postprocessor programs.
-
-   * The argument of the commands 's' and 'x H' has the implicit unit
-     scaled point 'z' in 'gtroff', while AT&T 'troff' has point ('p').
-     This isn't an incompatibility but a compatible extension, for both
-     units coincide for all devices without a 'sizescale' parameter in
-     the 'DESC' file, including all postprocessors from AT&T and
-     'groff''s text devices.  The few 'groff' devices with a 'sizescale'
-     parameter either do not exist for AT&T 'troff', have a different
-     name, or seem to have a different resolution.  So conflicts are
-     very unlikely.
-
-   * The position changing after the commands 'Dp', 'DP', and 'Dt' is
-     illogical, but as old versions of 'gtroff' used this feature it is
-     kept for compatibility reasons.
-
-\1f
-File: groff.info,  Node: Font Files,  Prev: gtroff Output,  Up: File formats
-
-8.2 Font Files
-==============
-
-The 'gtroff' font format is roughly a superset of the 'ditroff' font
-format (as used in later versions of AT&T 'troff' and its descendants).
-Unlike the 'ditroff' font format, there is no associated binary format;
-all files are text files.(1)  (*note Font Files-Footnote-1::) The font
-files for device NAME are stored in a directory 'devNAME'.  There are
-two types of file: a device description file called 'DESC' and for each
-font F a font file called 'F'.
-
-* Menu:
-
-* DESC File Format::
-* Font File Format::
-
-\1f
-File: groff.info,  Node: Font Files-Footnotes,  Up: Font Files
-
-   (1) Plan 9 'troff' has also abandoned the binary format.
-
-\1f
-File: groff.info,  Node: DESC File Format,  Next: Font File Format,  Prev: Font Files,  Up: Font Files
-
-8.2.1 'DESC' File Format
-------------------------
-
-The 'DESC' file can contain the following types of line.  Except for the
-'charset' keyword, which must comes last (if at all), the order of the
-lines is not important.  Later entries in the file, however, override
-previous values.
-
-'charset'
-     This line and everything following in the file are ignored.  It is
-     allowed for the sake of backwards compatibility.
-
-'family FAM'
-     The default font family is FAM.
-
-'fonts N F1 F2 F3 ... FN'
-     Fonts F1 ... FN are mounted in the font positions M+1, ..., M+N
-     where M is the number of styles.  This command may extend over more
-     than one line.  A font name of 0 means no font is mounted on the
-     corresponding font position.
-
-'hor N'
-     The horizontal resolution is N machine units.  All horizontal
-     quantities are rounded to be multiples of this value.
-
-'image_generator STRING'
-     Needed for 'grohtml' only.  It specifies the program to generate
-     PNG images from POSTSCRIPT input.  Under GNU/Linux this is usually
-     'gs' but under other systems (notably cygwin) it might be set to
-     another name.
-
-'paperlength N'
-     The physical vertical dimension of the output medium in machine
-     units.  This isn't used by 'troff' itself but by output devices.
-     Deprecated.  Use 'papersize' instead.
-
-'papersize STRING ...'
-     Select a paper size.  Valid values for STRING are the ISO paper
-     types 'A0'-'A7', 'B0'-'B7', 'C0'-'C7', 'D0'-'D7', 'DL', and the US
-     paper types 'letter', 'legal', 'tabloid', 'ledger', 'statement',
-     'executive', 'com10', and 'monarch'.  Case is not significant for
-     STRING if it holds predefined paper types.  Alternatively, STRING
-     can be a file name (e.g. '/etc/papersize'); if the file can be
-     opened, 'groff' reads the first line and tests for the above paper
-     sizes.  Finally, STRING can be a custom paper size in the format
-     'LENGTH,WIDTH' (no spaces before and after the comma).  Both LENGTH
-     and WIDTH must have a unit appended; valid values are 'i' for
-     inches, 'C' for centimeters, 'p' for points, and 'P' for picas.
-     Example: '12c,235p'.  An argument that starts with a digit is
-     always treated as a custom paper format.  'papersize' sets both the
-     vertical and horizontal dimension of the output medium.
-
-     More than one argument can be specified; 'groff' scans from left to
-     right and uses the first valid paper specification.
-
-'paperwidth N'
-     The physical horizontal dimension of the output medium in machine
-     units.  This isn't used by 'troff' itself but by output devices.
-     Deprecated.  Use 'papersize' instead.
-
-'pass_filenames'
-     Tell 'gtroff' to emit the name of the source file currently being
-     processed.  This is achieved by the intermediate output command
-     'F'.  Currently, this is only used by the 'grohtml' output device.
-
-'postpro PROGRAM'
-     Call PROGRAM as a postprocessor.  For example, the line
-
-          postpro grodvi
-
-     in the file 'devdvi/DESC' makes 'groff' call 'grodvi' if option
-     '-Tdvi' is given (and '-Z' isn't used).
-
-'prepro PROGRAM'
-     Call PROGRAM as a preprocessor.  Currently, this keyword is used by
-     'groff' with option '-Thtml' or '-Txhtml' only.
-
-'print PROGRAM'
-     Use PROGRAM as a spooler program for printing.  If omitted, the
-     '-l' and '-L' options of 'groff' are ignored.
-
-'res N'
-     There are N machine units per inch.
-
-'sizes S1 S2 ... SN 0'
-     This means that the device has fonts at S1, S2, ... SN scaled
-     points.  The list of sizes must be terminated by 0 (this is digit
-     zero).  Each SI can also be a range of sizes M-N.  The list can
-     extend over more than one line.
-
-'sizescale N'
-     The scale factor for point sizes.  By default this has a value
-     of 1.  One scaled point is equal to one point/N.  The arguments to
-     the 'unitwidth' and 'sizes' commands are given in scaled points.
-     *Note Fractional Type Sizes::, for more information.
-
-'styles S1 S2 ... SM'
-     The first M font positions are associated with styles S1 ... SM.
-
-'tcommand'
-     This means that the postprocessor can handle the 't' and 'u'
-     intermediate output commands.
-
-'unicode'
-     Indicate that the output device supports the complete Unicode
-     repertoire.  Useful only for devices that produce _character
-     entities_ instead of glyphs.
-
-     If 'unicode' is present, no 'charset' section is required in the
-     font description files since the Unicode handling built into
-     'groff' is used.  However, if there are entries in a 'charset'
-     section, they either override the default mappings for those
-     particular characters or add new mappings (normally for composite
-     characters).
-
-     This is used for '-Tutf8', '-Thtml', and '-Txhtml'.
-
-'unitwidth N'
-     Quantities in the font files are given in machine units for fonts
-     whose point size is N scaled points.
-
-'unscaled_charwidths'
-     Make the font handling module always return unscaled character
-     widths.  Needed for the 'grohtml' device.
-
-'use_charnames_in_special'
-     This command indicates that 'gtroff' should encode special
-     characters inside special commands.  Currently, this is only used
-     by the 'grohtml' output device.  *Note Postprocessor Access::.
-
-'vert N'
-     The vertical resolution is N machine units.  All vertical
-     quantities are rounded to be multiples of this value.
-
-   The 'res', 'unitwidth', 'fonts', and 'sizes' lines are mandatory.
-Other commands are ignored by 'gtroff' but may be used by postprocessors
-to store arbitrary information about the device in the 'DESC' file.
-
-   Here a list of obsolete keywords that are recognized by 'groff' but
-completely ignored: 'spare1', 'spare2', 'biggestfont'.
-
-\1f
-File: groff.info,  Node: Font File Format,  Prev: DESC File Format,  Up: Font Files
-
-8.2.2 Font File Format
-----------------------
-
-A "font file", also (and probably better) called a "font description
-file", has two sections.  The first section is a sequence of lines each
-containing a sequence of blank delimited words; the first word in the
-line is a key, and subsequent words give a value for that key.
-
-'name F'
-     The name of the font is F.
-
-'spacewidth N'
-     The normal width of a space is N.
-
-'slant N'
-     The glyphs of the font have a slant of N degrees.  (Positive means
-     forward.)
-
-'ligatures LIG1 LIG2 ... LIGN [0]'
-     Glyphs LIG1, LIG2, ..., LIGN are ligatures; possible ligatures are
-     'ff', 'fi', 'fl', 'ffi' and 'ffl'.  For backwards compatibility,
-     the list of ligatures may be terminated with a 0.  The list of
-     ligatures may not extend over more than one line.
-
-'special'
-     The font is "special"; this means that when a glyph is requested
-     that is not present in the current font, it is searched for in any
-     special fonts that are mounted.
-
-   Other commands are ignored by 'gtroff' but may be used by
-postprocessors to store arbitrary information about the font in the font
-file.
-
-   The first section can contain comments, which start with the '#'
-character and extend to the end of a line.
-
-   The second section contains one or two subsections.  It must contain
-a 'charset' subsection and it may also contain a 'kernpairs' subsection.
-These subsections can appear in any order.  Each subsection starts with
-a word on a line by itself.
-
-   The word 'charset' starts the character set subsection.(1)  (*note
-Font File Format-Footnote-1::) The 'charset' line is followed by a
-sequence of lines.  Each line gives information for one glyph.  A line
-comprises a number of fields separated by blanks or tabs.  The format is
-
-     NAME METRICS TYPE CODE [ENTITY-NAME] ['--' COMMENT]
-
-NAME identifies the glyph name(2) (*note Font File Format-Footnote-2::):
-If NAME is a single character C then it corresponds to the 'gtroff'
-input character C; if it is of the form '\C' where C is a single
-character, then it corresponds to the special character '\[C]';
-otherwise it corresponds to the special character '\[NAME]'.  If it is
-exactly two characters XX it can be entered as '\(XX'.  Note that
-single-letter special characters can't be accessed as '\C'; the only
-exception is '\-', which is identical to '\[-]'.
-
-   'gtroff' supports 8-bit input characters; however some utilities have
-difficulties with eight-bit characters.  For this reason, there is a
-convention that the entity name 'charN' is equivalent to the single
-input character whose code is N.  For example, 'char163' would be
-equivalent to the character with code 163, which is the pounds sterling
-sign in the ISO Latin-1 character set.  You shouldn't use 'charN'
-entities in font description files since they are related to input, not
-output.  Otherwise, you get hard-coded connections between input and
-output encoding, which prevents use of different (input) character sets.
-
-   The name '---' is special and indicates that the glyph is unnamed;
-such glyphs can only be used by means of the '\N' escape sequence in
-'gtroff'.
-
-   The TYPE field gives the glyph type:
-
-'1'
-     the glyph has a descender, for example, 'p';
-
-'2'
-     the glyph has an ascender, for example, 'b';
-
-'3'
-     the glyph has both an ascender and a descender, for example, '('.
-
-   The CODE field gives the code that the postprocessor uses to print
-the glyph.  The glyph can also be input to 'gtroff' using this code by
-means of the '\N' escape sequence.  CODE can be any integer.  If it
-starts with '0' it is interpreted as octal; if it starts with '0x' or
-'0X' it is interpreted as hexadecimal.  Note, however, that the '\N'
-escape sequence only accepts a decimal integer.
-
-   The ENTITY-NAME field gives an ASCII string identifying the glyph
-that the postprocessor uses to print the 'gtroff' glyph NAME.  This
-field is optional and has been introduced so that the 'grohtml' device
-driver can encode its character set.  For example, the glyph '\[Po]' is
-represented as '&pound;' in HTML 4.0.
-
-   Anything on the line after the ENTITY-NAME field resp. after '--' is
-ignored.
-
-   The METRICS field has the form:
-
-     WIDTH[','HEIGHT[','DEPTH[','ITALIC-CORRECTION
-       [','LEFT-ITALIC-CORRECTION[','SUBSCRIPT-CORRECTION]]]]]
-
-There must not be any spaces between these subfields (it has been split
-here into two lines for better legibility only).  Missing subfields are
-assumed to be 0.  The subfields are all decimal integers.  Since there
-is no associated binary format, these values are not required to fit
-into a variable of type 'char' as they are in 'ditroff'.  The WIDTH
-subfield gives the width of the glyph.  The HEIGHT subfield gives the
-height of the glyph (upwards is positive); if a glyph does not extend
-above the baseline, it should be given a zero height, rather than a
-negative height.  The DEPTH subfield gives the depth of the glyph, that
-is, the distance from the baseline to the lowest point below the
-baseline to which the glyph extends (downwards is positive); if a glyph
-does not extend below the baseline, it should be given a zero depth,
-rather than a negative depth.  The ITALIC-CORRECTION subfield gives the
-amount of space that should be added after the glyph when it is
-immediately to be followed by a glyph from a roman font.  The
-LEFT-ITALIC-CORRECTION subfield gives the amount of space that should be
-added before the glyph when it is immediately to be preceded by a glyph
-from a roman font.  The SUBSCRIPT-CORRECTION gives the amount of space
-that should be added after a glyph before adding a subscript.  This
-should be less than the italic correction.
-
-   A line in the 'charset' section can also have the format
-
-     NAME "
-
-This indicates that NAME is just another name for the glyph mentioned in
-the preceding line.
-
-   The word 'kernpairs' starts the kernpairs section.  This contains a
-sequence of lines of the form:
-
-     C1 C2 N
-
-This means that when glyph C1 appears next to glyph C2 the space between
-them should be increased by N.  Most entries in the kernpairs section
-have a negative value for N.
-
-\1f
-File: groff.info,  Node: Font File Format-Footnotes,  Up: Font File Format
-
-   (1) This keyword is misnamed since it starts a list of ordered
-glyphs, not characters.
-
-   (2) The distinction between input, characters, and output, glyphs, is
-not clearly separated in the terminology of 'groff'; for example, the
-'char' request should be called 'glyph' since it defines an output
-entity.
-
-\1f
-File: groff.info,  Node: Installation,  Next: Copying This Manual,  Prev: File formats,  Up: Top
-
-9 Installation
-**************
-
-\1f
-File: groff.info,  Node: Copying This Manual,  Next: Request Index,  Prev: Installation,  Up: Top
-
-Appendix A Copying This Manual
-******************************
-
-                     Version 1.3, 3 November 2008
-
-     Copyright © 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc.
-     <http://fsf.org/>
-
-     Everyone is permitted to copy and distribute verbatim copies
-     of this license document, but changing it is not allowed.
-
-  0. PREAMBLE
-
-     The purpose of this License is to make a manual, textbook, or other
-     functional and useful document "free" in the sense of freedom: to
-     assure everyone the effective freedom to copy and redistribute it,
-     with or without modifying it, either commercially or
-     noncommercially.  Secondarily, this License preserves for the
-     author and publisher a way to get credit for their work, while not
-     being considered responsible for modifications made by others.
-
-     This License is a kind of "copyleft", which means that derivative
-     works of the document must themselves be free in the same sense.
-     It complements the GNU General Public License, which is a copyleft
-     license designed for free software.
-
-     We have designed this License in order to use it for manuals for
-     free software, because free software needs free documentation: a
-     free program should come with manuals providing the same freedoms
-     that the software does.  But this License is not limited to
-     software manuals; it can be used for any textual work, regardless
-     of subject matter or whether it is published as a printed book.  We
-     recommend this License principally for works whose purpose is
-     instruction or reference.
-
-  1. APPLICABILITY AND DEFINITIONS
-
-     This License applies to any manual or other work, in any medium,
-     that contains a notice placed by the copyright holder saying it can
-     be distributed under the terms of this License.  Such a notice
-     grants a world-wide, royalty-free license, unlimited in duration,
-     to use that work under the conditions stated herein.  The
-     "Document", below, refers to any such manual or work.  Any member
-     of the public is a licensee, and is addressed as "you".  You accept
-     the license if you copy, modify or distribute the work in a way
-     requiring permission under copyright law.
-
-     A "Modified Version" of the Document means any work containing the
-     Document or a portion of it, either copied verbatim, or with
-     modifications and/or translated into another language.
-
-     A "Secondary Section" is a named appendix or a front-matter section
-     of the Document that deals exclusively with the relationship of the
-     publishers or authors of the Document to the Document's overall
-     subject (or to related matters) and contains nothing that could
-     fall directly within that overall subject.  (Thus, if the Document
-     is in part a textbook of mathematics, a Secondary Section may not
-     explain any mathematics.)  The relationship could be a matter of
-     historical connection with the subject or with related matters, or
-     of legal, commercial, philosophical, ethical or political position
-     regarding them.
-
-     The "Invariant Sections" are certain Secondary Sections whose
-     titles are designated, as being those of Invariant Sections, in the
-     notice that says that the Document is released under this License.
-     If a section does not fit the above definition of Secondary then it
-     is not allowed to be designated as Invariant.  The Document may
-     contain zero Invariant Sections.  If the Document does not identify
-     any Invariant Sections then there are none.
-
-     The "Cover Texts" are certain short passages of text that are
-     listed, as Front-Cover Texts or Back-Cover Texts, in the notice
-     that says that the Document is released under this License.  A
-     Front-Cover Text may be at most 5 words, and a Back-Cover Text may
-     be at most 25 words.
-
-     A "Transparent" copy of the Document means a machine-readable copy,
-     represented in a format whose specification is available to the
-     general public, that is suitable for revising the document
-     straightforwardly with generic text editors or (for images composed
-     of pixels) generic paint programs or (for drawings) some widely
-     available drawing editor, and that is suitable for input to text
-     formatters or for automatic translation to a variety of formats
-     suitable for input to text formatters.  A copy made in an otherwise
-     Transparent file format whose markup, or absence of markup, has
-     been arranged to thwart or discourage subsequent modification by
-     readers is not Transparent.  An image format is not Transparent if
-     used for any substantial amount of text.  A copy that is not
-     "Transparent" is called "Opaque".
-
-     Examples of suitable formats for Transparent copies include plain
-     ASCII without markup, Texinfo input format, LaTeX input format,
-     SGML or XML using a publicly available DTD, and standard-conforming
-     simple HTML, PostScript or PDF designed for human modification.
-     Examples of transparent image formats include PNG, XCF and JPG.
-     Opaque formats include proprietary formats that can be read and
-     edited only by proprietary word processors, SGML or XML for which
-     the DTD and/or processing tools are not generally available, and
-     the machine-generated HTML, PostScript or PDF produced by some word
-     processors for output purposes only.
-
-     The "Title Page" means, for a printed book, the title page itself,
-     plus such following pages as are needed to hold, legibly, the
-     material this License requires to appear in the title page.  For
-     works in formats which do not have any title page as such, "Title
-     Page" means the text near the most prominent appearance of the
-     work's title, preceding the beginning of the body of the text.
-
-     The "publisher" means any person or entity that distributes copies
-     of the Document to the public.
-
-     A section "Entitled XYZ" means a named subunit of the Document
-     whose title either is precisely XYZ or contains XYZ in parentheses
-     following text that translates XYZ in another language.  (Here XYZ
-     stands for a specific section name mentioned below, such as
-     "Acknowledgements", "Dedications", "Endorsements", or "History".)
-     To "Preserve the Title" of such a section when you modify the
-     Document means that it remains a section "Entitled XYZ" according
-     to this definition.
-
-     The Document may include Warranty Disclaimers next to the notice
-     which states that this License applies to the Document.  These
-     Warranty Disclaimers are considered to be included by reference in
-     this License, but only as regards disclaiming warranties: any other
-     implication that these Warranty Disclaimers may have is void and
-     has no effect on the meaning of this License.
-
-  2. VERBATIM COPYING
-
-     You may copy and distribute the Document in any medium, either
-     commercially or noncommercially, provided that this License, the
-     copyright notices, and the license notice saying this License
-     applies to the Document are reproduced in all copies, and that you
-     add no other conditions whatsoever to those of this License.  You
-     may not use technical measures to obstruct or control the reading
-     or further copying of the copies you make or distribute.  However,
-     you may accept compensation in exchange for copies.  If you
-     distribute a large enough number of copies you must also follow the
-     conditions in section 3.
-
-     You may also lend copies, under the same conditions stated above,
-     and you may publicly display copies.
-
-  3. COPYING IN QUANTITY
-
-     If you publish printed copies (or copies in media that commonly
-     have printed covers) of the Document, numbering more than 100, and
-     the Document's license notice requires Cover Texts, you must
-     enclose the copies in covers that carry, clearly and legibly, all
-     these Cover Texts: Front-Cover Texts on the front cover, and
-     Back-Cover Texts on the back cover.  Both covers must also clearly
-     and legibly identify you as the publisher of these copies.  The
-     front cover must present the full title with all words of the title
-     equally prominent and visible.  You may add other material on the
-     covers in addition.  Copying with changes limited to the covers, as
-     long as they preserve the title of the Document and satisfy these
-     conditions, can be treated as verbatim copying in other respects.
-
-     If the required texts for either cover are too voluminous to fit
-     legibly, you should put the first ones listed (as many as fit
-     reasonably) on the actual cover, and continue the rest onto
-     adjacent pages.
-
-     If you publish or distribute Opaque copies of the Document
-     numbering more than 100, you must either include a machine-readable
-     Transparent copy along with each Opaque copy, or state in or with
-     each Opaque copy a computer-network location from which the general
-     network-using public has access to download using public-standard
-     network protocols a complete Transparent copy of the Document, free
-     of added material.  If you use the latter option, you must take
-     reasonably prudent steps, when you begin distribution of Opaque
-     copies in quantity, to ensure that this Transparent copy will
-     remain thus accessible at the stated location until at least one
-     year after the last time you distribute an Opaque copy (directly or
-     through your agents or retailers) of that edition to the public.
-
-     It is requested, but not required, that you contact the authors of
-     the Document well before redistributing any large number of copies,
-     to give them a chance to provide you with an updated version of the
-     Document.
-
-  4. MODIFICATIONS
-
-     You may copy and distribute a Modified Version of the Document
-     under the conditions of sections 2 and 3 above, provided that you
-     release the Modified Version under precisely this License, with the
-     Modified Version filling the role of the Document, thus licensing
-     distribution and modification of the Modified Version to whoever
-     possesses a copy of it.  In addition, you must do these things in
-     the Modified Version:
-
-       A. Use in the Title Page (and on the covers, if any) a title
-          distinct from that of the Document, and from those of previous
-          versions (which should, if there were any, be listed in the
-          History section of the Document).  You may use the same title
-          as a previous version if the original publisher of that
-          version gives permission.
-
-       B. List on the Title Page, as authors, one or more persons or
-          entities responsible for authorship of the modifications in
-          the Modified Version, together with at least five of the
-          principal authors of the Document (all of its principal
-          authors, if it has fewer than five), unless they release you
-          from this requirement.
-
-       C. State on the Title page the name of the publisher of the
-          Modified Version, as the publisher.
-
-       D. Preserve all the copyright notices of the Document.
-
-       E. Add an appropriate copyright notice for your modifications
-          adjacent to the other copyright notices.
-
-       F. Include, immediately after the copyright notices, a license
-          notice giving the public permission to use the Modified
-          Version under the terms of this License, in the form shown in
-          the Addendum below.
-
-       G. Preserve in that license notice the full lists of Invariant
-          Sections and required Cover Texts given in the Document's
-          license notice.
-
-       H. Include an unaltered copy of this License.
-
-       I. Preserve the section Entitled "History", Preserve its Title,
-          and add to it an item stating at least the title, year, new
-          authors, and publisher of the Modified Version as given on the
-          Title Page.  If there is no section Entitled "History" in the
-          Document, create one stating the title, year, authors, and
-          publisher of the Document as given on its Title Page, then add
-          an item describing the Modified Version as stated in the
-          previous sentence.
-
-       J. Preserve the network location, if any, given in the Document
-          for public access to a Transparent copy of the Document, and
-          likewise the network locations given in the Document for
-          previous versions it was based on.  These may be placed in the
-          "History" section.  You may omit a network location for a work
-          that was published at least four years before the Document
-          itself, or if the original publisher of the version it refers
-          to gives permission.
-
-       K. For any section Entitled "Acknowledgements" or "Dedications",
-          Preserve the Title of the section, and preserve in the section
-          all the substance and tone of each of the contributor
-          acknowledgements and/or dedications given therein.
-
-       L. Preserve all the Invariant Sections of the Document, unaltered
-          in their text and in their titles.  Section numbers or the
-          equivalent are not considered part of the section titles.
-
-       M. Delete any section Entitled "Endorsements".  Such a section
-          may not be included in the Modified Version.
-
-       N. Do not retitle any existing section to be Entitled
-          "Endorsements" or to conflict in title with any Invariant
-          Section.
-
-       O. Preserve any Warranty Disclaimers.
-
-     If the Modified Version includes new front-matter sections or
-     appendices that qualify as Secondary Sections and contain no
-     material copied from the Document, you may at your option designate
-     some or all of these sections as invariant.  To do this, add their
-     titles to the list of Invariant Sections in the Modified Version's
-     license notice.  These titles must be distinct from any other
-     section titles.
-
-     You may add a section Entitled "Endorsements", provided it contains
-     nothing but endorsements of your Modified Version by various
-     parties--for example, statements of peer review or that the text
-     has been approved by an organization as the authoritative
-     definition of a standard.
-
-     You may add a passage of up to five words as a Front-Cover Text,
-     and a passage of up to 25 words as a Back-Cover Text, to the end of
-     the list of Cover Texts in the Modified Version.  Only one passage
-     of Front-Cover Text and one of Back-Cover Text may be added by (or
-     through arrangements made by) any one entity.  If the Document
-     already includes a cover text for the same cover, previously added
-     by you or by arrangement made by the same entity you are acting on
-     behalf of, you may not add another; but you may replace the old
-     one, on explicit permission from the previous publisher that added
-     the old one.
-
-     The author(s) and publisher(s) of the Document do not by this
-     License give permission to use their names for publicity for or to
-     assert or imply endorsement of any Modified Version.
-
-  5. COMBINING DOCUMENTS
-
-     You may combine the Document with other documents released under
-     this License, under the terms defined in section 4 above for
-     modified versions, provided that you include in the combination all
-     of the Invariant Sections of all of the original documents,
-     unmodified, and list them all as Invariant Sections of your
-     combined work in its license notice, and that you preserve all
-     their Warranty Disclaimers.
-
-     The combined work need only contain one copy of this License, and
-     multiple identical Invariant Sections may be replaced with a single
-     copy.  If there are multiple Invariant Sections with the same name
-     but different contents, make the title of each such section unique
-     by adding at the end of it, in parentheses, the name of the
-     original author or publisher of that section if known, or else a
-     unique number.  Make the same adjustment to the section titles in
-     the list of Invariant Sections in the license notice of the
-     combined work.
-
-     In the combination, you must combine any sections Entitled
-     "History" in the various original documents, forming one section
-     Entitled "History"; likewise combine any sections Entitled
-     "Acknowledgements", and any sections Entitled "Dedications".  You
-     must delete all sections Entitled "Endorsements."
-
-  6. COLLECTIONS OF DOCUMENTS
-
-     You may make a collection consisting of the Document and other
-     documents released under this License, and replace the individual
-     copies of this License in the various documents with a single copy
-     that is included in the collection, provided that you follow the
-     rules of this License for verbatim copying of each of the documents
-     in all other respects.
-
-     You may extract a single document from such a collection, and
-     distribute it individually under this License, provided you insert
-     a copy of this License into the extracted document, and follow this
-     License in all other respects regarding verbatim copying of that
-     document.
-
-  7. AGGREGATION WITH INDEPENDENT WORKS
-
-     A compilation of the Document or its derivatives with other
-     separate and independent documents or works, in or on a volume of a
-     storage or distribution medium, is called an "aggregate" if the
-     copyright resulting from the compilation is not used to limit the
-     legal rights of the compilation's users beyond what the individual
-     works permit.  When the Document is included in an aggregate, this
-     License does not apply to the other works in the aggregate which
-     are not themselves derivative works of the Document.
-
-     If the Cover Text requirement of section 3 is applicable to these
-     copies of the Document, then if the Document is less than one half
-     of the entire aggregate, the Document's Cover Texts may be placed
-     on covers that bracket the Document within the aggregate, or the
-     electronic equivalent of covers if the Document is in electronic
-     form.  Otherwise they must appear on printed covers that bracket
-     the whole aggregate.
-
-  8. TRANSLATION
-
-     Translation is considered a kind of modification, so you may
-     distribute translations of the Document under the terms of section
-     4.  Replacing Invariant Sections with translations requires special
-     permission from their copyright holders, but you may include
-     translations of some or all Invariant Sections in addition to the
-     original versions of these Invariant Sections.  You may include a
-     translation of this License, and all the license notices in the
-     Document, and any Warranty Disclaimers, provided that you also
-     include the original English version of this License and the
-     original versions of those notices and disclaimers.  In case of a
-     disagreement between the translation and the original version of
-     this License or a notice or disclaimer, the original version will
-     prevail.
-
-     If a section in the Document is Entitled "Acknowledgements",
-     "Dedications", or "History", the requirement (section 4) to
-     Preserve its Title (section 1) will typically require changing the
-     actual title.
-
-  9. TERMINATION
-
-     You may not copy, modify, sublicense, or distribute the Document
-     except as expressly provided under this License.  Any attempt
-     otherwise to copy, modify, sublicense, or distribute it is void,
-     and will automatically terminate your rights under this License.
-
-     However, if you cease all violation of this License, then your
-     license from a particular copyright holder is reinstated (a)
-     provisionally, unless and until the copyright holder explicitly and
-     finally terminates your license, and (b) permanently, if the
-     copyright holder fails to notify you of the violation by some
-     reasonable means prior to 60 days after the cessation.
-
-     Moreover, your license from a particular copyright holder is
-     reinstated permanently if the copyright holder notifies you of the
-     violation by some reasonable means, this is the first time you have
-     received notice of violation of this License (for any work) from
-     that copyright holder, and you cure the violation prior to 30 days
-     after your receipt of the notice.
-
-     Termination of your rights under this section does not terminate
-     the licenses of parties who have received copies or rights from you
-     under this License.  If your rights have been terminated and not
-     permanently reinstated, receipt of a copy of some or all of the
-     same material does not give you any rights to use it.
-
-  10. FUTURE REVISIONS OF THIS LICENSE
-
-     The Free Software Foundation may publish new, revised versions of
-     the GNU Free Documentation 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.  See
-     <http://www.gnu.org/copyleft/>.
-
-     Each version of the License is given a distinguishing version
-     number.  If the Document specifies that a particular numbered
-     version of this License "or any later version" applies to it, you
-     have the option of following the terms and conditions either of
-     that specified version or of any later version that has been
-     published (not as a draft) by the Free Software Foundation.  If the
-     Document does not specify a version number of this License, you may
-     choose any version ever published (not as a draft) by the Free
-     Software Foundation.  If the Document specifies that a proxy can
-     decide which future versions of this License can be used, that
-     proxy's public statement of acceptance of a version permanently
-     authorizes you to choose that version for the Document.
-
-  11. RELICENSING
-
-     "Massive Multiauthor Collaboration Site" (or "MMC Site") means any
-     World Wide Web server that publishes copyrightable works and also
-     provides prominent facilities for anybody to edit those works.  A
-     public wiki that anybody can edit is an example of such a server.
-     A "Massive Multiauthor Collaboration" (or "MMC") contained in the
-     site means any set of copyrightable works thus published on the MMC
-     site.
-
-     "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0
-     license published by Creative Commons Corporation, a not-for-profit
-     corporation with a principal place of business in San Francisco,
-     California, as well as future copyleft versions of that license
-     published by that same organization.
-
-     "Incorporate" means to publish or republish a Document, in whole or
-     in part, as part of another Document.
-
-     An MMC is "eligible for relicensing" if it is licensed under this
-     License, and if all works that were first published under this
-     License somewhere other than this MMC, and subsequently
-     incorporated in whole or in part into the MMC, (1) had no cover
-     texts or invariant sections, and (2) were thus incorporated prior
-     to November 1, 2008.
-
-     The operator of an MMC Site may republish an MMC contained in the
-     site under CC-BY-SA on the same site at any time before August 1,
-     2009, provided the MMC is eligible for relicensing.
-
-ADDENDUM: How to use this License for your documents
-====================================================
-
-To use this License in a document you have written, include a copy of
-the License in the document and put the following copyright and license
-notices just after the title page:
-
-       Copyright (C)  YEAR  YOUR NAME.
-       Permission is granted to copy, distribute and/or modify this document
-       under the terms of the GNU Free Documentation License, Version 1.3
-       or any later version published by the Free Software Foundation;
-       with no Invariant Sections, no Front-Cover Texts, and no Back-Cover
-       Texts.  A copy of the license is included in the section entitled ``GNU
-       Free Documentation License''.
-
-   If you have Invariant Sections, Front-Cover Texts and Back-Cover
-Texts, replace the "with...Texts." line with this:
-
-         with the Invariant Sections being LIST THEIR TITLES, with
-         the Front-Cover Texts being LIST, and with the Back-Cover Texts
-         being LIST.
-
-   If you have Invariant Sections without Cover Texts, or some other
-combination of the three, merge those two alternatives to suit the
-situation.
-
-   If your document contains nontrivial examples of program code, we
-recommend releasing these examples in parallel under your choice of free
-software license, such as the GNU General Public License, to permit
-their use in free software.
-
-\1f
-File: groff.info,  Node: Request Index,  Next: Escape Index,  Prev: Copying This Manual,  Up: Top
-
-Appendix B Request Index
-************************
-
-Requests appear without the leading control character (normally either
-'.' or ''').
-
-\0\b[index\0\b]
-* Menu:
-
-* ab:                                    Debugging.           (line  40)
-* ad:                                    Manipulating Filling and Adjusting.
-                                                              (line  50)
-* af:                                    Assigning Formats.   (line  12)
-* aln:                                   Setting Registers.   (line 112)
-* als:                                   Strings.             (line 229)
-* am:                                    Writing Macros.      (line 113)
-* am1:                                   Writing Macros.      (line 114)
-* ami:                                   Writing Macros.      (line 115)
-* ami1:                                  Writing Macros.      (line 116)
-* as:                                    Strings.             (line 175)
-* as1:                                   Strings.             (line 176)
-* asciify:                               Diversions.          (line 195)
-* backtrace:                             Debugging.           (line  96)
-* bd:                                    Artificial Fonts.    (line  96)
-* blm:                                   Blank Line Traps.    (line   7)
-* box:                                   Diversions.          (line  34)
-* boxa:                                  Diversions.          (line  35)
-* bp:                                    Page Control.        (line   7)
-* br:                                    Manipulating Filling and Adjusting.
-                                                              (line  12)
-* break:                                 while.               (line  68)
-* brp:                                   Manipulating Filling and Adjusting.
-                                                              (line 130)
-* c2:                                    Character Translations.
-                                                              (line  16)
-* cc:                                    Character Translations.
-                                                              (line  10)
-* ce:                                    Manipulating Filling and Adjusting.
-                                                              (line 203)
-* cf:                                    I/O.                 (line  50)
-* cflags:                                Using Symbols.       (line 237)
-* ch:                                    Page Location Traps. (line 111)
-* char:                                  Using Symbols.       (line 323)
-* chop:                                  Strings.             (line 267)
-* class:                                 Character Classes.   (line  12)
-* close:                                 I/O.                 (line 231)
-* color:                                 Colors.              (line   7)
-* composite:                             Using Symbols.       (line 191)
-* continue:                              while.               (line  72)
-* cp:                                    Implementation Differences.
-                                                              (line  22)
-* cs:                                    Artificial Fonts.    (line 126)
-* cu:                                    Artificial Fonts.    (line  86)
-* da:                                    Diversions.          (line  22)
-* de:                                    Writing Macros.      (line  15)
-* de1:                                   Writing Macros.      (line  16)
-* defcolor:                              Colors.              (line  22)
-* dei:                                   Writing Macros.      (line  17)
-* dei1:                                  Writing Macros.      (line  18)
-* device:                                Postprocessor Access.
-                                                              (line  11)
-* devicem:                               Postprocessor Access.
-                                                              (line  30)
-* di:                                    Diversions.          (line  21)
-* do:                                    Implementation Differences.
-                                                              (line  23)
-* ds:                                    Strings.             (line  15)
-* ds1:                                   Strings.             (line  16)
-* dt:                                    Diversion Traps.     (line   7)
-* ec:                                    Character Translations.
-                                                              (line  47)
-* ecr:                                   Character Translations.
-                                                              (line  59)
-* ecs:                                   Character Translations.
-                                                              (line  58)
-* el:                                    if-else.             (line  27)
-* em:                                    End-of-input Traps.  (line   7)
-* eo:                                    Character Translations.
-                                                              (line  24)
-* ev:                                    Environments.        (line  38)
-* evc:                                   Environments.        (line  70)
-* ex:                                    Debugging.           (line  45)
-* fam:                                   Font Families.       (line  20)
-* fc:                                    Fields.              (line  18)
-* fchar:                                 Using Symbols.       (line 324)
-* fcolor:                                Colors.              (line  80)
-* fi:                                    Manipulating Filling and Adjusting.
-                                                              (line  28)
-* fl:                                    Debugging.           (line  87)
-* fp:                                    Font Positions.      (line  11)
-* fschar:                                Using Symbols.       (line 325)
-* fspecial:                              Special Fonts.       (line  18)
-* ft:                                    Changing Fonts.      (line   7)
-* ft <1>:                                Font Positions.      (line  57)
-* ftr:                                   Changing Fonts.      (line  55)
-* fzoom:                                 Changing Fonts.      (line  70)
-* gcolor:                                Colors.              (line  50)
-* hc:                                    Manipulating Hyphenation.
-                                                              (line 105)
-* hcode:                                 Manipulating Hyphenation.
-                                                              (line 175)
-* hla:                                   Manipulating Hyphenation.
-                                                              (line 255)
-* hlm:                                   Manipulating Hyphenation.
-                                                              (line  45)
-* hpf:                                   Manipulating Hyphenation.
-                                                              (line 114)
-* hpfa:                                  Manipulating Hyphenation.
-                                                              (line 115)
-* hpfcode:                               Manipulating Hyphenation.
-                                                              (line 116)
-* hw:                                    Manipulating Hyphenation.
-                                                              (line  62)
-* hy:                                    Manipulating Hyphenation.
-                                                              (line   9)
-* hym:                                   Manipulating Hyphenation.
-                                                              (line 210)
-* hys:                                   Manipulating Hyphenation.
-                                                              (line 226)
-* ie:                                    if-else.             (line  26)
-* if:                                    if-else.             (line  10)
-* ig:                                    Comments.            (line  63)
-* in:                                    Line Layout.         (line  86)
-* it:                                    Input Line Traps.    (line   7)
-* itc:                                   Input Line Traps.    (line   8)
-* kern:                                  Ligatures and Kerning.
-                                                              (line  41)
-* lc:                                    Leaders.             (line  23)
-* length:                                Strings.             (line 211)
-* lf:                                    Debugging.           (line  10)
-* lg:                                    Ligatures and Kerning.
-                                                              (line  23)
-* linetabs:                              Tabs and Fields.     (line 137)
-* ll:                                    Line Layout.         (line 140)
-* ls:                                    Manipulating Spacing.
-                                                              (line  63)
-* lsm:                                   Leading Spaces Traps.
-                                                              (line   7)
-* lt:                                    Page Layout.         (line  64)
-* mc:                                    Miscellaneous.       (line  75)
-* mk:                                    Page Motions.        (line  10)
-* mso:                                   I/O.                 (line  40)
-* na:                                    Manipulating Filling and Adjusting.
-                                                              (line 122)
-* ne:                                    Page Control.        (line  33)
-* nf:                                    Manipulating Filling and Adjusting.
-                                                              (line  39)
-* nh:                                    Manipulating Hyphenation.
-                                                              (line  37)
-* nm:                                    Miscellaneous.       (line  10)
-* nn:                                    Miscellaneous.       (line  71)
-* nop:                                   if-else.             (line  23)
-* nr:                                    Setting Registers.   (line  13)
-* nr <1>:                                Setting Registers.   (line  68)
-* nr <2>:                                Auto-increment.      (line  11)
-* nroff:                                 Troff and Nroff Mode.
-                                                              (line  32)
-* ns:                                    Manipulating Spacing.
-                                                              (line 121)
-* nx:                                    I/O.                 (line  84)
-* open:                                  I/O.                 (line 199)
-* opena:                                 I/O.                 (line 200)
-* os:                                    Page Control.        (line  53)
-* output:                                Diversions.          (line 180)
-* pc:                                    Page Layout.         (line  94)
-* pev:                                   Debugging.           (line  62)
-* pi:                                    I/O.                 (line 143)
-* pl:                                    Page Layout.         (line  10)
-* pm:                                    Debugging.           (line  66)
-* pn:                                    Page Layout.         (line  81)
-* pnr:                                   Debugging.           (line  77)
-* po:                                    Line Layout.         (line  58)
-* ps:                                    Changing Type Sizes. (line   7)
-* psbb:                                  Miscellaneous.       (line 135)
-* pso:                                   I/O.                 (line  29)
-* ptr:                                   Debugging.           (line  81)
-* pvs:                                   Changing Type Sizes. (line 134)
-* rchar:                                 Using Symbols.       (line 381)
-* rd:                                    I/O.                 (line  89)
-* return:                                Writing Macros.      (line 147)
-* rfschar:                               Using Symbols.       (line 382)
-* rj:                                    Manipulating Filling and Adjusting.
-                                                              (line 249)
-* rm:                                    Strings.             (line 224)
-* rn:                                    Strings.             (line 221)
-* rnn:                                   Setting Registers.   (line 108)
-* rr:                                    Setting Registers.   (line 104)
-* rs:                                    Manipulating Spacing.
-                                                              (line 122)
-* rt:                                    Page Motions.        (line  11)
-* schar:                                 Using Symbols.       (line 326)
-* shc:                                   Manipulating Hyphenation.
-                                                              (line 243)
-* shift:                                 Parameters.          (line  31)
-* sizes:                                 Changing Type Sizes. (line  69)
-* so:                                    I/O.                 (line   9)
-* sp:                                    Manipulating Spacing.
-                                                              (line   7)
-* special:                               Special Fonts.       (line  17)
-* spreadwarn:                            Debugging.           (line 131)
-* ss:                                    Manipulating Filling and Adjusting.
-                                                              (line 149)
-* sty:                                   Font Families.       (line  59)
-* substring:                             Strings.             (line 192)
-* sv:                                    Page Control.        (line  52)
-* sy:                                    I/O.                 (line 164)
-* ta:                                    Tabs and Fields.     (line  14)
-* tc:                                    Tabs and Fields.     (line 129)
-* ti:                                    Line Layout.         (line 112)
-* tkf:                                   Ligatures and Kerning.
-                                                              (line  60)
-* tl:                                    Page Layout.         (line  35)
-* tm:                                    Debugging.           (line  25)
-* tm1:                                   Debugging.           (line  26)
-* tmc:                                   Debugging.           (line  27)
-* tr:                                    Character Translations.
-                                                              (line 148)
-* trf:                                   I/O.                 (line  49)
-* trin:                                  Character Translations.
-                                                              (line 149)
-* trnt:                                  Character Translations.
-                                                              (line 237)
-* troff:                                 Troff and Nroff Mode.
-                                                              (line  24)
-* uf:                                    Artificial Fonts.    (line  90)
-* ul:                                    Artificial Fonts.    (line  64)
-* unformat:                              Diversions.          (line 218)
-* vpt:                                   Page Location Traps. (line  17)
-* vs:                                    Changing Type Sizes. (line  85)
-* warn:                                  Debugging.           (line 154)
-* warnscale:                             Debugging.           (line 127)
-* wh:                                    Page Location Traps. (line  29)
-* while:                                 while.               (line  10)
-* write:                                 I/O.                 (line 211)
-* writec:                                I/O.                 (line 212)
-* writem:                                I/O.                 (line 222)
-
-\1f
-File: groff.info,  Node: Escape Index,  Next: Operator Index,  Prev: Request Index,  Up: Top
-
-Appendix C Escape Index
-***********************
-
-Any escape sequence '\X' with X not in the list below emits a warning,
-printing glyph X.
-
-\0\b[index\0\b]
-* Menu:
-
-* \:                                     Using Symbols.       (line 132)
-* \!:                                    Diversions.          (line 135)
-* \":                                    Comments.            (line  10)
-* \#:                                    Comments.            (line  48)
-* \$:                                    Parameters.          (line  19)
-* \$*:                                   Parameters.          (line  40)
-* \$0:                                   Parameters.          (line  71)
-* \$@:                                   Parameters.          (line  41)
-* \$^:                                   Parameters.          (line  50)
-* \%:                                    Manipulating Hyphenation.
-                                                              (line  84)
-* \&:                                    Ligatures and Kerning.
-                                                              (line 100)
-* \':                                    Using Symbols.       (line 222)
-* \):                                    Ligatures and Kerning.
-                                                              (line 127)
-* \*:                                    Strings.             (line  17)
-* \,:                                    Ligatures and Kerning.
-                                                              (line  91)
-* \-:                                    Using Symbols.       (line 231)
-* \.:                                    Character Translations.
-                                                              (line 122)
-* \/:                                    Ligatures and Kerning.
-                                                              (line  80)
-* \0:                                    Page Motions.        (line 138)
-* \<colon>:                              Manipulating Hyphenation.
-                                                              (line  85)
-* \?:                                    Diversions.          (line 136)
-* \A:                                    Identifiers.         (line  53)
-* \a:                                    Leaders.             (line  18)
-* \B:                                    Expressions.         (line  83)
-* \b:                                    Drawing Requests.    (line 232)
-* \c:                                    Line Control.        (line  41)
-* \C:                                    Using Symbols.       (line 185)
-* \d:                                    Page Motions.        (line 100)
-* \D:                                    Drawing Requests.    (line  67)
-* \e:                                    Character Translations.
-                                                              (line  69)
-* \E:                                    Character Translations.
-                                                              (line  70)
-* \f:                                    Changing Fonts.      (line   8)
-* \F:                                    Font Families.       (line  22)
-* \f <1>:                                Font Positions.      (line  58)
-* \g:                                    Assigning Formats.   (line  73)
-* \H:                                    Artificial Fonts.    (line  13)
-* \h:                                    Page Motions.        (line 103)
-* \k:                                    Page Motions.        (line 201)
-* \l:                                    Drawing Requests.    (line  16)
-* \L:                                    Drawing Requests.    (line  49)
-* \m:                                    Colors.              (line  51)
-* \M:                                    Colors.              (line  81)
-* \n:                                    Interpolating Registers.
-                                                              (line   9)
-* \n <1>:                                Auto-increment.      (line  19)
-* \N:                                    Using Symbols.       (line 201)
-* \o:                                    Page Motions.        (line 216)
-* \O:                                    Suppressing output.  (line   7)
-* \p:                                    Manipulating Filling and Adjusting.
-                                                              (line 131)
-* \R:                                    Setting Registers.   (line  14)
-* \R <1>:                                Setting Registers.   (line  70)
-* \r:                                    Page Motions.        (line  94)
-* \<RET>:                                Line Control.        (line  40)
-* \S:                                    Artificial Fonts.    (line  44)
-* \s:                                    Changing Type Sizes. (line  10)
-* \<SP>:                                 Page Motions.        (line 114)
-* \t:                                    Tabs and Fields.     (line  10)
-* \u:                                    Page Motions.        (line  97)
-* \v:                                    Page Motions.        (line  78)
-* \V:                                    I/O.                 (line 247)
-* \w:                                    Page Motions.        (line 145)
-* \x:                                    Manipulating Spacing.
-                                                              (line  82)
-* \X:                                    Postprocessor Access.
-                                                              (line  12)
-* \Y:                                    Postprocessor Access.
-                                                              (line  31)
-* \z:                                    Page Motions.        (line 220)
-* \Z:                                    Page Motions.        (line 224)
-* \\:                                    Character Translations.
-                                                              (line  68)
-* \^:                                    Page Motions.        (line 130)
-* \_:                                    Using Symbols.       (line 234)
-* \`:                                    Using Symbols.       (line 227)
-* \{:                                    if-else.             (line  35)
-* \|:                                    Page Motions.        (line 122)
-* \}:                                    if-else.             (line  35)
-* \~:                                    Page Motions.        (line 118)
-
-\1f
-File: groff.info,  Node: Operator Index,  Next: Register Index,  Prev: Escape Index,  Up: Top
-
-Appendix D Operator Index
-*************************
-
-\0\b[index\0\b]
-* Menu:
-
-* !:                                     Expressions.          (line 21)
-* %:                                     Expressions.          (line  8)
-* &:                                     Expressions.          (line 19)
-* (:                                     Expressions.          (line 59)
-* ):                                     Expressions.          (line 59)
-* *:                                     Expressions.          (line  8)
-* +:                                     Expressions.          (line  8)
-* + <1>:                                 Expressions.          (line 21)
-* -:                                     Expressions.          (line  8)
-* - <1>:                                 Expressions.          (line 21)
-* /:                                     Expressions.          (line  8)
-* <:                                     Expressions.          (line 15)
-* <=:                                    Expressions.          (line 15)
-* <?:                                    Expressions.          (line 44)
-* <colon>:                               Expressions.          (line 19)
-* =:                                     Expressions.          (line 15)
-* ==:                                    Expressions.          (line 15)
-* >:                                     Expressions.          (line 15)
-* >=:                                    Expressions.          (line 15)
-* >?:                                    Expressions.          (line 44)
-
-\1f
-File: groff.info,  Node: Register Index,  Next: Macro Index,  Prev: Operator Index,  Up: Top
-
-Appendix E Register Index
-*************************
-
-The macro package or program a specific register belongs to is appended
-in brackets.
-
-   A register name 'x' consisting of exactly one character can be
-accessed as '\nx'.  A register name 'xx' consisting of exactly two
-characters can be accessed as '\n(xx'.  Register names 'xxx' of any
-length can be accessed as '\n[xxx]'.
-
-\0\b[index\0\b]
-* Menu:
-
-* $$:                                    Built-in Registers.  (line  99)
-* %:                                     Page Layout.         (line  94)
-* % <1>:                                 Page Control.        (line  10)
-* .$:                                    Parameters.          (line  10)
-* .A:                                    Built-in Registers.  (line 106)
-* .a:                                    Manipulating Spacing.
-                                                              (line  83)
-* .b:                                    Artificial Fonts.    (line  98)
-* .br:                                   Requests.            (line  56)
-* .c:                                    Built-in Registers.  (line  76)
-* .C:                                    Implementation Differences.
-                                                              (line  24)
-* .cdp:                                  Environments.        (line  94)
-* .ce:                                   Manipulating Filling and Adjusting.
-                                                              (line 204)
-* .cht:                                  Environments.        (line  93)
-* .color:                                Colors.              (line   8)
-* .csk:                                  Environments.        (line  95)
-* .d:                                    Diversions.          (line  69)
-* .ev:                                   Environments.        (line  39)
-* .F:                                    Built-in Registers.  (line  12)
-* .f:                                    Font Positions.      (line  12)
-* .fam:                                  Font Families.       (line  21)
-* .fn:                                   Font Families.       (line  25)
-* .fp:                                   Font Positions.      (line  13)
-* .g:                                    Built-in Registers.  (line 102)
-* .H:                                    Built-in Registers.  (line  15)
-* .h:                                    Diversions.          (line  76)
-* .height:                               Artificial Fonts.    (line  16)
-* .hla:                                  Manipulating Hyphenation.
-                                                              (line 256)
-* .hlc:                                  Manipulating Hyphenation.
-                                                              (line  47)
-* .hlm:                                  Manipulating Hyphenation.
-                                                              (line  46)
-* .hy:                                   Manipulating Hyphenation.
-                                                              (line  10)
-* .hym:                                  Manipulating Hyphenation.
-                                                              (line 211)
-* .hys:                                  Manipulating Hyphenation.
-                                                              (line 227)
-* .i:                                    Line Layout.         (line  89)
-* .in:                                   Line Layout.         (line 115)
-* .int:                                  Line Control.        (line  42)
-* .j:                                    Manipulating Filling and Adjusting.
-                                                              (line  51)
-* .k:                                    Page Motions.        (line 212)
-* .kern:                                 Ligatures and Kerning.
-                                                              (line  42)
-* .L:                                    Manipulating Spacing.
-                                                              (line  64)
-* .l:                                    Line Layout.         (line 143)
-* .lg:                                   Ligatures and Kerning.
-                                                              (line  24)
-* .linetabs:                             Tabs and Fields.     (line 138)
-* .ll:                                   Line Layout.         (line 144)
-* .lt:                                   Page Layout.         (line  67)
-* .m:                                    Colors.              (line  54)
-* .M:                                    Colors.              (line  84)
-* .n:                                    Environments.        (line 110)
-* .ne:                                   Page Location Traps. (line 122)
-* .ns:                                   Manipulating Spacing.
-                                                              (line 123)
-* .O:                                    Built-in Registers.  (line 112)
-* .o:                                    Line Layout.         (line  61)
-* .P:                                    Built-in Registers.  (line 116)
-* .p:                                    Page Layout.         (line  13)
-* .pe:                                   Page Location Traps. (line 143)
-* .pn:                                   Page Layout.         (line  84)
-* .ps:                                   Fractional Type Sizes.
-                                                              (line  37)
-* .psr:                                  Fractional Type Sizes.
-                                                              (line  44)
-* .pvs:                                  Changing Type Sizes. (line 137)
-* .R:                                    Built-in Registers.  (line  18)
-* .rj:                                   Manipulating Filling and Adjusting.
-                                                              (line 250)
-* .s:                                    Changing Type Sizes. (line  11)
-* .slant:                                Artificial Fonts.    (line  45)
-* .sr:                                   Fractional Type Sizes.
-                                                              (line  45)
-* .ss:                                   Manipulating Filling and Adjusting.
-                                                              (line 150)
-* .sss:                                  Manipulating Filling and Adjusting.
-                                                              (line 151)
-* .sty:                                  Changing Fonts.      (line  11)
-* .T:                                    Built-in Registers.  (line 122)
-* .t:                                    Page Location Traps. (line 102)
-* .tabs:                                 Tabs and Fields.     (line  15)
-* .trunc:                                Page Location Traps. (line 131)
-* .U:                                    Built-in Registers.  (line  23)
-* .u:                                    Manipulating Filling and Adjusting.
-                                                              (line  29)
-* .V:                                    Built-in Registers.  (line  28)
-* .v:                                    Changing Type Sizes. (line  88)
-* .vpt:                                  Page Location Traps. (line  18)
-* .w:                                    Environments.        (line  92)
-* .warn:                                 Debugging.           (line 155)
-* .x:                                    Built-in Registers.  (line  88)
-* .y:                                    Built-in Registers.  (line  92)
-* .Y:                                    Built-in Registers.  (line  96)
-* .z:                                    Diversions.          (line  68)
-* .zoom:                                 Changing Fonts.      (line  71)
-* c.:                                    Built-in Registers.  (line  77)
-* ct:                                    Page Motions.        (line 150)
-* DD [ms]:                               ms Document Control Registers.
-                                                              (line 239)
-* dl:                                    Diversions.          (line  93)
-* dn:                                    Diversions.          (line  92)
-* dw:                                    Built-in Registers.  (line  45)
-* dy:                                    Built-in Registers.  (line  48)
-* FAM [ms]:                              ms Document Control Registers.
-                                                              (line 111)
-* FF [ms]:                               ms Document Control Registers.
-                                                              (line 185)
-* FI [ms]:                               ms Document Control Registers.
-                                                              (line 178)
-* FL [ms]:                               ms Document Control Registers.
-                                                              (line 171)
-* FM [ms]:                               ms Document Control Registers.
-                                                              (line  47)
-* FPD [ms]:                              ms Document Control Registers.
-                                                              (line 221)
-* FPS [ms]:                              ms Document Control Registers.
-                                                              (line 205)
-* FVS [ms]:                              ms Document Control Registers.
-                                                              (line 213)
-* GROWPS [ms]:                           ms Document Control Registers.
-                                                              (line  89)
-* GS [ms]:                               Differences from AT&T ms.
-                                                              (line  45)
-* HM [ms]:                               ms Document Control Registers.
-                                                              (line  40)
-* HORPHANS [ms]:                         ms Document Control Registers.
-                                                              (line 155)
-* hours:                                 Built-in Registers.  (line  41)
-* hp:                                    Page Motions.        (line 209)
-* HY [ms]:                               ms Document Control Registers.
-                                                              (line 102)
-* LL [ms]:                               ms Document Control Registers.
-                                                              (line  25)
-* llx:                                   Miscellaneous.       (line 136)
-* lly:                                   Miscellaneous.       (line 137)
-* ln:                                    Built-in Registers.  (line  82)
-* lsn:                                   Leading Spaces Traps.
-                                                              (line   8)
-* lss:                                   Leading Spaces Traps.
-                                                              (line   9)
-* LT [ms]:                               ms Document Control Registers.
-                                                              (line  32)
-* MINGW [ms]:                            ms Document Control Registers.
-                                                              (line 231)
-* MINGW [ms] <1>:                        Additional ms Macros.
-                                                              (line  28)
-* minutes:                               Built-in Registers.  (line  37)
-* mo:                                    Built-in Registers.  (line  51)
-* nl:                                    Page Control.        (line  67)
-* opmaxx:                                Suppressing output.  (line  19)
-* opmaxy:                                Suppressing output.  (line  19)
-* opminx:                                Suppressing output.  (line  19)
-* opminy:                                Suppressing output.  (line  19)
-* PD [ms]:                               ms Document Control Registers.
-                                                              (line 128)
-* PI [ms]:                               ms Document Control Registers.
-                                                              (line 121)
-* PO [ms]:                               ms Document Control Registers.
-                                                              (line  16)
-* PORPHANS [ms]:                         ms Document Control Registers.
-                                                              (line 143)
-* PS [ms]:                               ms Document Control Registers.
-                                                              (line  57)
-* ps4html [grohtml]:                     grohtml specific registers and strings.
-                                                              (line   7)
-* PSINCR [ms]:                           ms Document Control Registers.
-                                                              (line  77)
-* QI [ms]:                               ms Document Control Registers.
-                                                              (line 135)
-* rsb:                                   Page Motions.        (line 149)
-* rst:                                   Page Motions.        (line 148)
-* sb:                                    Page Motions.        (line 147)
-* seconds:                               Built-in Registers.  (line  31)
-* skw:                                   Page Motions.        (line 152)
-* slimit:                                Debugging.           (line 119)
-* ssc:                                   Page Motions.        (line 151)
-* st:                                    Page Motions.        (line 146)
-* systat:                                I/O.                 (line 165)
-* urx:                                   Miscellaneous.       (line 138)
-* ury:                                   Miscellaneous.       (line 139)
-* VS [ms]:                               ms Document Control Registers.
-                                                              (line  67)
-* year:                                  Built-in Registers.  (line  54)
-* yr:                                    Built-in Registers.  (line  57)
-
-\1f
-File: groff.info,  Node: Macro Index,  Next: String Index,  Prev: Register Index,  Up: Top
-
-Appendix F Macro Index
-**********************
-
-The macro package a specific macro belongs to is appended in brackets.
-They appear without the leading control character (normally '.').
-
-\0\b[index\0\b]
-* Menu:
-
-* 1C [ms]:                               ms Multiple Columns. (line  13)
-* 2C [ms]:                               ms Multiple Columns. (line  16)
-* [ [ms]:                                ms Insertions.       (line  33)
-* ] [ms]:                                ms Insertions.       (line  34)
-* AB [ms]:                               ms Cover Page Macros.
-                                                              (line  59)
-* AE [ms]:                               ms Cover Page Macros.
-                                                              (line  64)
-* AI [ms]:                               ms Cover Page Macros.
-                                                              (line  55)
-* AM [ms]:                               ms Strings and Special Characters.
-                                                              (line  51)
-* AM [ms] <1>:                           Additional ms Macros.
-                                                              (line  10)
-* AT [man]:                              Miscellaneous man macros.
-                                                              (line  27)
-* AU [ms]:                               ms Cover Page Macros.
-                                                              (line  39)
-* B [man]:                               Man font macros.     (line  47)
-* B [ms]:                                Highlighting in ms.  (line  10)
-* B1 [ms]:                               ms Displays and Keeps.
-                                                              (line  94)
-* B2 [ms]:                               ms Displays and Keeps.
-                                                              (line  95)
-* BD [ms]:                               ms Displays and Keeps.
-                                                              (line  31)
-* BI [man]:                              Man font macros.     (line  18)
-* BI [ms]:                               Highlighting in ms.  (line  38)
-* BR [man]:                              Man font macros.     (line  39)
-* BT [man]:                              Optional man extensions.
-                                                              (line  21)
-* BT [ms]:                               ms Headers and Footers.
-                                                              (line  39)
-* BX [ms]:                               Highlighting in ms.  (line  42)
-* CD [ms]:                               ms Displays and Keeps.
-                                                              (line  41)
-* CT [man]:                              Optional man extensions.
-                                                              (line  36)
-* CW [man]:                              Optional man extensions.
-                                                              (line  39)
-* CW [ms]:                               Highlighting in ms.  (line  34)
-* CW [ms] <1>:                           Additional ms Macros.
-                                                              (line  19)
-* DA [ms]:                               ms Cover Page Macros.
-                                                              (line  24)
-* De [man]:                              Optional man extensions.
-                                                              (line  45)
-* DE [ms]:                               ms Displays and Keeps.
-                                                              (line  16)
-* DE [ms] <1>:                           ms Displays and Keeps.
-                                                              (line  24)
-* DE [ms] <2>:                           ms Displays and Keeps.
-                                                              (line  32)
-* DE [ms] <3>:                           ms Displays and Keeps.
-                                                              (line  42)
-* DE [ms] <4>:                           ms Displays and Keeps.
-                                                              (line  50)
-* De [ms]:                               ms Displays and Keeps.
-                                                              (line  57)
-* Ds [man]:                              Optional man extensions.
-                                                              (line  42)
-* DS [ms]:                               ms Displays and Keeps.
-                                                              (line  14)
-* DS [ms] <1>:                           ms Displays and Keeps.
-                                                              (line  22)
-* DS [ms] <2>:                           ms Displays and Keeps.
-                                                              (line  30)
-* DS [ms] <3>:                           ms Displays and Keeps.
-                                                              (line  40)
-* DS [ms] <4>:                           ms Displays and Keeps.
-                                                              (line  48)
-* Ds [ms]:                               ms Displays and Keeps.
-                                                              (line  56)
-* DS [ms] <5>:                           Additional ms Macros.
-                                                              (line  14)
-* DT [man]:                              Miscellaneous man macros.
-                                                              (line  10)
-* EE [man]:                              Optional man extensions.
-                                                              (line  52)
-* EF [ms]:                               ms Headers and Footers.
-                                                              (line  26)
-* EH [ms]:                               ms Headers and Footers.
-                                                              (line  24)
-* EN [ms]:                               ms Insertions.       (line  28)
-* EQ [ms]:                               ms Insertions.       (line  27)
-* EX [man]:                              Optional man extensions.
-                                                              (line  48)
-* FE [ms]:                               ms Footnotes.        (line  15)
-* FS [ms]:                               ms Footnotes.        (line  14)
-* G [man]:                               Optional man extensions.
-                                                              (line  55)
-* GL [man]:                              Optional man extensions.
-                                                              (line  60)
-* HB [man]:                              Optional man extensions.
-                                                              (line  65)
-* HD [ms]:                               ms Headers and Footers.
-                                                              (line  38)
-* HP [man]:                              Man usage.           (line  98)
-* I [man]:                               Man font macros.     (line  52)
-* I [ms]:                                Highlighting in ms.  (line  30)
-* IB [man]:                              Man font macros.     (line  27)
-* ID [ms]:                               ms Displays and Keeps.
-                                                              (line  23)
-* IP [man]:                              Man usage.           (line  80)
-* IP [ms]:                               Lists in ms.         (line   9)
-* IR [man]:                              Man font macros.     (line  35)
-* IX [ms]:                               Additional ms Macros.
-                                                              (line  22)
-* KE [ms]:                               ms Displays and Keeps.
-                                                              (line  73)
-* KE [ms] <1>:                           ms Displays and Keeps.
-                                                              (line  78)
-* KF [ms]:                               ms Displays and Keeps.
-                                                              (line  77)
-* KS [ms]:                               ms Displays and Keeps.
-                                                              (line  72)
-* LD [ms]:                               ms Displays and Keeps.
-                                                              (line  15)
-* LG [ms]:                               Highlighting in ms.  (line  51)
-* LP [man]:                              Man usage.           (line  70)
-* LP [ms]:                               Paragraphs in ms.    (line  12)
-* MC [ms]:                               ms Multiple Columns. (line  19)
-* MS [man]:                              Optional man extensions.
-                                                              (line  73)
-* ND [ms]:                               ms Cover Page Macros.
-                                                              (line  29)
-* NE [man]:                              Optional man extensions.
-                                                              (line  85)
-* NH [ms]:                               Headings in ms.      (line  13)
-* NL [ms]:                               Highlighting in ms.  (line  63)
-* NT [man]:                              Optional man extensions.
-                                                              (line  78)
-* OF [ms]:                               ms Headers and Footers.
-                                                              (line  25)
-* OH [ms]:                               ms Headers and Footers.
-                                                              (line  23)
-* P [man]:                               Man usage.           (line  72)
-* P1 [ms]:                               ms Cover Page Macros.
-                                                              (line  20)
-* PD [man]:                              Miscellaneous man macros.
-                                                              (line  15)
-* PE [ms]:                               ms Insertions.       (line  21)
-* PN [man]:                              Optional man extensions.
-                                                              (line  88)
-* Pn [man]:                              Optional man extensions.
-                                                              (line  92)
-* PP [man]:                              Man usage.           (line  71)
-* PP [ms]:                               Paragraphs in ms.    (line   9)
-* PS [ms]:                               ms Insertions.       (line  20)
-* PT [man]:                              Optional man extensions.
-                                                              (line  16)
-* PT [ms]:                               ms Headers and Footers.
-                                                              (line  37)
-* PX [ms]:                               ms TOC.              (line  62)
-* QP [ms]:                               Paragraphs in ms.    (line  15)
-* R [man]:                               Optional man extensions.
-                                                              (line  98)
-* R [ms]:                                Highlighting in ms.  (line  26)
-* RB [man]:                              Man font macros.     (line  43)
-* RD [ms]:                               ms Displays and Keeps.
-                                                              (line  49)
-* RE [man]:                              Man usage.           (line 115)
-* RE [ms]:                               Indentation values in ms.
-                                                              (line  12)
-* RI [man]:                              Man font macros.     (line  31)
-* RN [man]:                              Optional man extensions.
-                                                              (line 101)
-* RP [ms]:                               ms Cover Page Macros.
-                                                              (line  10)
-* RS [man]:                              Man usage.           (line 106)
-* RS [ms]:                               Indentation values in ms.
-                                                              (line  11)
-* SB [man]:                              Man font macros.     (line  14)
-* SH [man]:                              Man usage.           (line  34)
-* SH [ms]:                               Headings in ms.      (line  54)
-* SM [man]:                              Man font macros.     (line  10)
-* SM [ms]:                               Highlighting in ms.  (line  57)
-* SS [man]:                              Man usage.           (line  43)
-* TA [ms]:                               Tabstops in ms.      (line  10)
-* TB [man]:                              Optional man extensions.
-                                                              (line  70)
-* TC [ms]:                               ms TOC.              (line  52)
-* TE [ms]:                               ms Insertions.       (line  12)
-* TH [man]:                              Man usage.           (line  11)
-* TL [ms]:                               ms Cover Page Macros.
-                                                              (line  34)
-* TP [man]:                              Man usage.           (line  51)
-* TS [ms]:                               ms Insertions.       (line  11)
-* UC [man]:                              Miscellaneous man macros.
-                                                              (line  44)
-* UL [ms]:                               Highlighting in ms.  (line  46)
-* VE [man]:                              Optional man extensions.
-                                                              (line 108)
-* VS [man]:                              Optional man extensions.
-                                                              (line 104)
-* XA [ms]:                               ms TOC.              (line  13)
-* XE [ms]:                               ms TOC.              (line  14)
-* XP [ms]:                               Paragraphs in ms.    (line  20)
-* XS [ms]:                               ms TOC.              (line  12)
-
-\1f
-File: groff.info,  Node: String Index,  Next: Glyph Name Index,  Prev: Macro Index,  Up: Top
-
-Appendix G String Index
-***********************
-
-The macro package or program a specific string belongs to is appended in
-brackets.
-
-   A string name 'x' consisting of exactly one character can be accessed
-as '\*x'.  A string name 'xx' consisting of exactly two characters can
-be accessed as '\*(xx'.  String names 'xxx' of any length can be
-accessed as '\*[xxx]'.
-
-\0\b[index\0\b]
-* Menu:
-
-* ! [ms]:                                ms Strings and Special Characters.
-                                                              (line 101)
-* ' [ms]:                                ms Strings and Special Characters.
-                                                              (line  65)
-* * [ms]:                                ms Footnotes.        (line  11)
-* , [ms]:                                ms Strings and Special Characters.
-                                                              (line  74)
-* - [ms]:                                ms Strings and Special Characters.
-                                                              (line  41)
-* . [ms]:                                ms Strings and Special Characters.
-                                                              (line  89)
-* .T:                                    Built-in Registers.  (line 127)
-* 3 [ms]:                                ms Strings and Special Characters.
-                                                              (line 107)
-* 8 [ms]:                                ms Strings and Special Characters.
-                                                              (line 104)
-* ? [ms]:                                ms Strings and Special Characters.
-                                                              (line  98)
-* \*[<colon>] [ms]:                      ms Strings and Special Characters.
-                                                              (line  80)
-* ^ [ms]:                                ms Strings and Special Characters.
-                                                              (line  71)
-* _ [ms]:                                ms Strings and Special Characters.
-                                                              (line  86)
-* ` [ms]:                                ms Strings and Special Characters.
-                                                              (line  68)
-* { [ms]:                                Highlighting in ms.  (line  67)
-* } [ms]:                                Highlighting in ms.  (line  68)
-* ~ [ms]:                                ms Strings and Special Characters.
-                                                              (line  77)
-* ABSTRACT [ms]:                         ms Strings and Special Characters.
-                                                              (line  15)
-* ae [ms]:                               ms Strings and Special Characters.
-                                                              (line 125)
-* Ae [ms]:                               ms Strings and Special Characters.
-                                                              (line 128)
-* CF [ms]:                               ms Headers and Footers.
-                                                              (line  16)
-* CH [ms]:                               ms Headers and Footers.
-                                                              (line  11)
-* D- [ms]:                               ms Strings and Special Characters.
-                                                              (line 116)
-* d- [ms]:                               ms Strings and Special Characters.
-                                                              (line 119)
-* HF [man]:                              Predefined man strings.
-                                                              (line  12)
-* LF [ms]:                               ms Headers and Footers.
-                                                              (line  15)
-* LH [ms]:                               ms Headers and Footers.
-                                                              (line  10)
-* lq [man]:                              Predefined man strings.
-                                                              (line  21)
-* MONTH1 [ms]:                           ms Strings and Special Characters.
-                                                              (line  23)
-* MONTH10 [ms]:                          ms Strings and Special Characters.
-                                                              (line  32)
-* MONTH11 [ms]:                          ms Strings and Special Characters.
-                                                              (line  33)
-* MONTH12 [ms]:                          ms Strings and Special Characters.
-                                                              (line  34)
-* MONTH2 [ms]:                           ms Strings and Special Characters.
-                                                              (line  24)
-* MONTH3 [ms]:                           ms Strings and Special Characters.
-                                                              (line  25)
-* MONTH4 [ms]:                           ms Strings and Special Characters.
-                                                              (line  26)
-* MONTH5 [ms]:                           ms Strings and Special Characters.
-                                                              (line  27)
-* MONTH6 [ms]:                           ms Strings and Special Characters.
-                                                              (line  28)
-* MONTH7 [ms]:                           ms Strings and Special Characters.
-                                                              (line  29)
-* MONTH8 [ms]:                           ms Strings and Special Characters.
-                                                              (line  30)
-* MONTH9 [ms]:                           ms Strings and Special Characters.
-                                                              (line  31)
-* o [ms]:                                ms Strings and Special Characters.
-                                                              (line  92)
-* Q [ms]:                                ms Strings and Special Characters.
-                                                              (line  44)
-* q [ms]:                                ms Strings and Special Characters.
-                                                              (line 122)
-* R [man]:                               Predefined man strings.
-                                                              (line  15)
-* REFERENCES [ms]:                       ms Strings and Special Characters.
-                                                              (line  11)
-* RF [ms]:                               ms Headers and Footers.
-                                                              (line  17)
-* RH [ms]:                               ms Headers and Footers.
-                                                              (line  12)
-* rq [man]:                              Predefined man strings.
-                                                              (line  22)
-* S [man]:                               Predefined man strings.
-                                                              (line   9)
-* SN [ms]:                               Headings in ms.      (line  22)
-* SN-DOT [ms]:                           Headings in ms.      (line  23)
-* SN-NO-DOT [ms]:                        Headings in ms.      (line  24)
-* SN-STYLE [ms]:                         Headings in ms.      (line  36)
-* Th [ms]:                               ms Strings and Special Characters.
-                                                              (line 110)
-* th [ms]:                               ms Strings and Special Characters.
-                                                              (line 113)
-* Tm [man]:                              Predefined man strings.
-                                                              (line  18)
-* TOC [ms]:                              ms Strings and Special Characters.
-                                                              (line  19)
-* U [ms]:                                ms Strings and Special Characters.
-                                                              (line  45)
-* v [ms]:                                ms Strings and Special Characters.
-                                                              (line  83)
-* www-image-template [grohtml]:          grohtml specific registers and strings.
-                                                              (line   8)
-
-\1f
-File: groff.info,  Node: Glyph Name Index,  Next: Font File Keyword Index,  Prev: String Index,  Up: Top
-
-Appendix H Glyph Name Index
-***************************
-
-A glyph name 'xx' consisting of exactly two characters can be accessed
-as '\(xx'.  Glyph names 'xxx' of any length can be accessed as '\[xxx]'.
-
-\1f
-File: groff.info,  Node: Font File Keyword Index,  Next: Program and File Index,  Prev: Glyph Name Index,  Up: Top
-
-Appendix I Font File Keyword Index
-**********************************
-
-\0\b[index\0\b]
-* Menu:
-
-* #:                                     Font File Format.    (line  36)
-* ---:                                   Font File Format.    (line  51)
-* biggestfont:                           DESC File Format.    (line 142)
-* charset:                               DESC File Format.    (line  12)
-* charset <1>:                           Font File Format.    (line  44)
-* family:                                Changing Fonts.      (line  11)
-* family <1>:                            Font Positions.      (line  60)
-* family <2>:                            DESC File Format.    (line  16)
-* fonts:                                 Using Symbols.       (line  14)
-* fonts <1>:                             Special Fonts.       (line  18)
-* fonts <2>:                             DESC File Format.    (line  19)
-* hor:                                   DESC File Format.    (line  25)
-* image_generator:                       DESC File Format.    (line  29)
-* kernpairs:                             Font File Format.    (line 139)
-* ligatures:                             Font File Format.    (line  22)
-* name:                                  Font File Format.    (line  12)
-* paperlength:                           DESC File Format.    (line  35)
-* papersize:                             DESC File Format.    (line  40)
-* paperwidth:                            DESC File Format.    (line  59)
-* pass_filenames:                        DESC File Format.    (line  64)
-* postpro:                               DESC File Format.    (line  69)
-* prepro:                                DESC File Format.    (line  77)
-* print:                                 DESC File Format.    (line  81)
-* res:                                   DESC File Format.    (line  85)
-* sizes:                                 DESC File Format.    (line  88)
-* sizescale:                             DESC File Format.    (line  95)
-* slant:                                 Font File Format.    (line  18)
-* spacewidth:                            Font File Format.    (line  15)
-* spare1:                                DESC File Format.    (line 142)
-* spare2:                                DESC File Format.    (line 142)
-* special:                               Artificial Fonts.    (line 115)
-* special <1>:                           Font File Format.    (line  28)
-* styles:                                Changing Fonts.      (line  11)
-* styles <1>:                            Font Families.       (line  75)
-* styles <2>:                            Font Positions.      (line  60)
-* styles <3>:                            DESC File Format.    (line 101)
-* tcommand:                              DESC File Format.    (line 104)
-* unicode:                               DESC File Format.    (line 108)
-* unitwidth:                             DESC File Format.    (line 122)
-* unscaled_charwidths:                   DESC File Format.    (line 126)
-* use_charnames_in_special:              Postprocessor Access.
-                                                              (line  22)
-* use_charnames_in_special <1>:          DESC File Format.    (line 130)
-* vert:                                  DESC File Format.    (line 135)
-
-\1f
-File: groff.info,  Node: Program and File Index,  Next: Concept Index,  Prev: Font File Keyword Index,  Up: Top
-
-Appendix J Program and File Index
-*********************************
-
-\0\b[index\0\b]
-* Menu:
-
-* an.tmac:                               man.                 (line   6)
-* changebar:                             Miscellaneous.       (line 108)
-* composite.tmac:                        Using Symbols.       (line 191)
-* cp1047.tmac:                           Input Encodings.     (line   9)
-* DESC:                                  Changing Fonts.      (line  11)
-* DESC <1>:                              Font Families.       (line  75)
-* DESC <2>:                              Font Positions.      (line  60)
-* DESC <3>:                              Using Symbols.       (line  14)
-* DESC <4>:                              Using Symbols.       (line 212)
-* DESC <5>:                              Special Fonts.       (line  18)
-* DESC file format:                      DESC File Format.    (line   6)
-* DESC, and font mounting:               Font Positions.      (line  36)
-* DESC, and 'use_charnames_in_special':  Postprocessor Access.
-                                                              (line  22)
-* ditroff:                               History.             (line  59)
-* ec.tmac:                               Input Encodings.     (line  46)
-* eqn:                                   ms Insertions.       (line   7)
-* freeeuro.pfa:                          Input Encodings.     (line  46)
-* gchem:                                 Groff Options.       (line   6)
-* geqn:                                  Groff Options.       (line   6)
-* geqn, invocation in manual pages:      Preprocessors in man pages.
-                                                              (line  11)
-* ggrn:                                  Groff Options.       (line   6)
-* gpic:                                  Groff Options.       (line   6)
-* grap:                                  Groff Options.       (line   6)
-* grefer:                                Groff Options.       (line   6)
-* grefer, invocation in manual pages:    Preprocessors in man pages.
-                                                              (line  11)
-* groff:                                 Groff Options.       (line   6)
-* grog:                                  grog.                (line   6)
-* grohtml:                               Miscellaneous man macros.
-                                                              (line   6)
-* gsoelim:                               Groff Options.       (line   6)
-* gtbl:                                  Groff Options.       (line   6)
-* gtbl, invocation in manual pages:      Preprocessors in man pages.
-                                                              (line  11)
-* gtroff:                                Groff Options.       (line   6)
-* hyphen.us:                             Manipulating Hyphenation.
-                                                              (line 162)
-* hyphenex.us:                           Manipulating Hyphenation.
-                                                              (line 162)
-* latin1.tmac:                           Input Encodings.     (line  14)
-* latin2.tmac:                           Input Encodings.     (line  18)
-* latin2.tmac <1>:                       Input Encodings.     (line  23)
-* latin9.tmac:                           Input Encodings.     (line  28)
-* less:                                  Invoking grotty.     (line  50)
-* makeindex:                             Indices.             (line  10)
-* man, invocation of preprocessors:      Preprocessors in man pages.
-                                                              (line  11)
-* man-old.tmac:                          man.                 (line   6)
-* man.local:                             Man usage.           (line   6)
-* man.local <1>:                         Optional man extensions.
-                                                              (line   6)
-* man.tmac:                              man.                 (line   6)
-* man.ultrix:                            Optional man extensions.
-                                                              (line  30)
-* nrchbar:                               Miscellaneous.       (line 108)
-* papersize.tmac:                        Paper Size.          (line  16)
-* perl:                                  I/O.                 (line 175)
-* pic:                                   ms Insertions.       (line   7)
-* post-grohtml:                          Groff Options.       (line 275)
-* pre-grohtml:                           Groff Options.       (line 275)
-* preconv:                               Groff Options.       (line   6)
-* refer:                                 ms Insertions.       (line   7)
-* soelim:                                Debugging.           (line  10)
-* tbl:                                   ms Insertions.       (line   7)
-* trace.tmac:                            Writing Macros.      (line 104)
-* trace.tmac <1>:                        Writing Macros.      (line 136)
-* troffrc:                               Groff Options.       (line 206)
-* troffrc <1>:                           Paper Size.          (line  16)
-* troffrc <2>:                           Manipulating Hyphenation.
-                                                              (line 162)
-* troffrc <3>:                           Manipulating Hyphenation.
-                                                              (line 256)
-* troffrc <4>:                           Troff and Nroff Mode.
-                                                              (line  24)
-* troffrc <5>:                           Line Layout.         (line  61)
-* troffrc-end:                           Groff Options.       (line 206)
-* troffrc-end <1>:                       Manipulating Hyphenation.
-                                                              (line 162)
-* troffrc-end <2>:                       Manipulating Hyphenation.
-                                                              (line 256)
-* troffrc-end <3>:                       Troff and Nroff Mode.
-                                                              (line  24)
-* tty.tmac:                              Troff and Nroff Mode.
-                                                              (line  32)
-
-\1f
-File: groff.info,  Node: Concept Index,  Prev: Program and File Index,  Up: Top
-
-Appendix K Concept Index
-************************
-
-\0\b[index\0\b]
-* Menu:
-
-* '"', at end of sentence:               Sentences.           (line  18)
-* '"', at end of sentence <1>:           Using Symbols.       (line 275)
-* '"', in a macro argument:              Request and Macro Arguments.
-                                                              (line  25)
-* '%', as delimiter:                     Escapes.             (line  67)
-* '&', as delimiter:                     Escapes.             (line  67)
-* ''', as a comment:                     Comments.            (line  42)
-* ''', at end of sentence:               Sentences.           (line  18)
-* ''', at end of sentence <1>:           Using Symbols.       (line 275)
-* ''', delimiting arguments:             Escapes.             (line  29)
-* '(', as delimiter:                     Escapes.             (line  67)
-* '(', starting a two-character identifier: Identifiers.      (line  73)
-* '(', starting a two-character identifier <1>: Escapes.      (line  16)
-* ')', as delimiter:                     Escapes.             (line  67)
-* ')', at end of sentence:               Sentences.           (line  18)
-* ')', at end of sentence <1>:           Using Symbols.       (line 275)
-* '*', as delimiter:                     Escapes.             (line  67)
-* '*', at end of sentence:               Sentences.           (line  18)
-* '*', at end of sentence <1>:           Using Symbols.       (line 275)
-* '+', and page motion:                  Expressions.         (line  65)
-* '+', as delimiter:                     Escapes.             (line  67)
-* '-', and page motion:                  Expressions.         (line  65)
-* '-', as delimiter:                     Escapes.             (line  67)
-* '.', as delimiter:                     Escapes.             (line  67)
-* '.h' register, difference to 'nl':     Diversions.          (line  88)
-* '.ps' register, in comparison with '.psr': Fractional Type Sizes.
-                                                              (line  45)
-* '.s' register, in comparison with '.sr': Fractional Type Sizes.
-                                                              (line  45)
-* '.S' register, Plan 9 alias for '.tabs': Tabs and Fields.   (line 125)
-* '.t' register, and diversions:         Diversion Traps.     (line   7)
-* '.tabs' register, Plan 9 alias ('.S'): Tabs and Fields.     (line 125)
-* '.V' register, and 'vs':               Changing Type Sizes. (line  94)
-* '/', as delimiter:                     Escapes.             (line  67)
-* 8-bit input:                           Font File Format.    (line  51)
-* '<', as delimiter:                     Escapes.             (line  67)
-* <colon>, as delimiter:                 Escapes.             (line  67)
-* '=', as delimiter:                     Escapes.             (line  67)
-* '>', as delimiter:                     Escapes.             (line  67)
-* '[', macro names starting with, and 'refer': Identifiers.   (line  46)
-* '[', starting an identifier:           Identifiers.         (line  75)
-* '[', starting an identifier <1>:       Escapes.             (line  20)
-* '\!', and copy-in mode:                Diversions.          (line 148)
-* '\!', and 'output' request:            Diversions.          (line 179)
-* '\!', and 'trnt':                      Character Translations.
-                                                              (line 237)
-* '\!', in top-level diversion:          Diversions.          (line 171)
-* '\!', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\!', incompatibilities with AT&T 'troff' <1>: Implementation Differences.
-                                                              (line 106)
-* '\!', used as delimiter:               Escapes.             (line  52)
-* '\!', used as delimiter <1>:           Escapes.             (line  71)
-* '\$', when reading text for a macro:   Copy-in Mode.        (line   6)
-* '\%', and translations:                Character Translations.
-                                                              (line 166)
-* '\%', following '\X' or '\Y':          Manipulating Hyphenation.
-                                                              (line  98)
-* '\%', in '\X':                         Postprocessor Access.
-                                                              (line  14)
-* '\%', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\%', used as delimiter:               Escapes.             (line  52)
-* '\%', used as delimiter <1>:           Escapes.             (line  71)
-* '\&', and glyph definitions:           Using Symbols.       (line 326)
-* '\&', and translations:                Character Translations.
-                                                              (line 176)
-* '\&', at end of sentence:              Sentences.           (line  24)
-* '\&', escaping control characters:     Requests.            (line  47)
-* '\&', in '\X':                         Postprocessor Access.
-                                                              (line  14)
-* '\&', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\&', used as delimiter:               Escapes.             (line  52)
-* '\'', and translations:                Character Translations.
-                                                              (line 160)
-* '\'', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\'', used as delimiter:               Escapes.             (line  52)
-* '\'', used as delimiter <1>:           Escapes.             (line  71)
-* '\(', and translations:                Character Translations.
-                                                              (line 160)
-* '\)', in '\X':                         Postprocessor Access.
-                                                              (line  14)
-* '\)', used as delimiter:               Escapes.             (line  52)
-* '\*', and warnings:                    Warnings.            (line  54)
-* '\*', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  13)
-* '\*', when reading text for a macro:   Copy-in Mode.        (line   6)
-* '\', disabling ('eo'):                 Character Translations.
-                                                              (line  24)
-* '\,', used as delimiter:               Escapes.             (line  52)
-* '\-', and translations:                Character Translations.
-                                                              (line 160)
-* '\-', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\-', used as delimiter:               Escapes.             (line  52)
-* '\-', used as delimiter <1>:           Escapes.             (line  71)
-* '\/', used as delimiter:               Escapes.             (line  52)
-* '\/', used as delimiter <1>:           Escapes.             (line  71)
-* '\0', used as delimiter:               Escapes.             (line  52)
-* '\<colon>', in '\X':                   Postprocessor Access.
-                                                              (line  14)
-* '\<colon>', used as delimiter:         Escapes.             (line  52)
-* '\<colon>', used as delimiter <1>:     Escapes.             (line  71)
-* '\?', and copy-in mode:                Operators in Conditionals.
-                                                              (line  55)
-* '\?', and copy-in mode <1>:            Diversions.          (line 148)
-* '\?', in top-level diversion:          Diversions.          (line 176)
-* '\?', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line 106)
-* '\?', used as delimiter:               Escapes.             (line  52)
-* '\A', allowed delimiters:              Escapes.             (line  59)
-* '\a', and copy-in mode:                Leaders.             (line  18)
-* '\a', and translations:                Character Translations.
-                                                              (line 169)
-* '\A', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\a', used as delimiter:               Escapes.             (line  52)
-* '\B', allowed delimiters:              Escapes.             (line  59)
-* '\b', limitations:                     Drawing Requests.    (line 239)
-* '\b', possible quote characters:       Escapes.             (line  37)
-* '\C', allowed delimiters:              Escapes.             (line  59)
-* '\c', and fill mode:                   Line Control.        (line  69)
-* '\c', and no-fill mode:                Line Control.        (line  60)
-* '\C', and translations:                Character Translations.
-                                                              (line 160)
-* '\c', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\c', used as delimiter:               Escapes.             (line  52)
-* '\c', used as delimiter <1>:           Escapes.             (line  71)
-* '\D'f ...'' and horizontal resolution: Drawing Requests.    (line 151)
-* '\D', allowed delimiters:              Escapes.             (line  62)
-* '\d', used as delimiter:               Escapes.             (line  52)
-* '\E', and copy-in mode:                Character Translations.
-                                                              (line  81)
-* '\e', and glyph definitions:           Using Symbols.       (line 326)
-* '\e', and translations:                Character Translations.
-                                                              (line 164)
-* '\e', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line 106)
-* '\e', used as delimiter:               Escapes.             (line  52)
-* '\E', used as delimiter:               Escapes.             (line  52)
-* '\e', used as delimiter <1>:           Escapes.             (line  71)
-* '\F', and changing fonts:              Changing Fonts.      (line  11)
-* '\F', and font positions:              Font Positions.      (line  60)
-* '\f', and font translations:           Changing Fonts.      (line  55)
-* '\f', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  56)
-* '\h', allowed delimiters:              Escapes.             (line  62)
-* '\H', allowed delimiters:              Escapes.             (line  62)
-* '\H', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  56)
-* '\H', using '+' and '-':               Expressions.         (line  75)
-* '\H', with fractional type sizes:      Fractional Type Sizes.
-                                                              (line   6)
-* '\l', allowed delimiters:              Escapes.             (line  62)
-* '\L', allowed delimiters:              Escapes.             (line  62)
-* '\l', and glyph definitions:           Using Symbols.       (line 326)
-* '\L', and glyph definitions:           Using Symbols.       (line 326)
-* '\N', allowed delimiters:              Escapes.             (line  62)
-* '\N', and translations:                Character Translations.
-                                                              (line 160)
-* '\n', and warnings:                    Warnings.            (line  61)
-* '\n', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  13)
-* '\n', when reading text for a macro:   Copy-in Mode.        (line   6)
-* '\o', possible quote characters:       Escapes.             (line  37)
-* '\p', used as delimiter:               Escapes.             (line  52)
-* '\p', used as delimiter <1>:           Escapes.             (line  71)
-* '\R', after '\c':                      Line Control.        (line  52)
-* '\R', allowed delimiters:              Escapes.             (line  62)
-* '\R', and warnings:                    Warnings.            (line  61)
-* '\R', difference to 'nr':              Auto-increment.      (line  11)
-* '\r', used as delimiter:               Escapes.             (line  52)
-* '\R', using '+' and '-':               Expressions.         (line  75)
-* \<RET>, when reading text for a macro: Copy-in Mode.        (line   6)
-* '\s', allowed delimiters:              Escapes.             (line  62)
-* '\S', allowed delimiters:              Escapes.             (line  62)
-* '\s', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  56)
-* '\S', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  56)
-* '\s', using '+' and '-':               Expressions.         (line  75)
-* '\s', with fractional type sizes:      Fractional Type Sizes.
-                                                              (line   6)
-* '\<SP>', difference to '\~':           Request and Macro Arguments.
-                                                              (line  20)
-* '\<SP>', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\<SP>', used as delimiter:            Escapes.             (line  52)
-* '\t', and copy-in mode:                Tabs and Fields.     (line  10)
-* '\t', and translations:                Character Translations.
-                                                              (line 169)
-* '\t', and warnings:                    Warnings.            (line  69)
-* '\t', used as delimiter:               Escapes.             (line  52)
-* '\u', used as delimiter:               Escapes.             (line  52)
-* '\v', allowed delimiters:              Escapes.             (line  62)
-* '\V', and copy-in mode:                I/O.                 (line 249)
-* '\v', internal representation:         Gtroff Internals.    (line  54)
-* '\w', allowed delimiters:              Escapes.             (line  59)
-* '\x', allowed delimiters:              Escapes.             (line  62)
-* '\X', and special characters:          Postprocessor Access.
-                                                              (line  22)
-* '\X', followed by '\%':                Manipulating Hyphenation.
-                                                              (line  98)
-* '\X', possible quote characters:       Escapes.             (line  37)
-* '\Y', followed by '\%':                Manipulating Hyphenation.
-                                                              (line  98)
-* '\Z', allowed delimiters:              Escapes.             (line  59)
-* '\[', and translations:                Character Translations.
-                                                              (line 160)
-* '\\', when reading text for a macro:   Copy-in Mode.        (line   6)
-* '\^', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\^', used as delimiter:               Escapes.             (line  52)
-* '\_', and translations:                Character Translations.
-                                                              (line 160)
-* '\_', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\_', used as delimiter:               Escapes.             (line  52)
-* '\_', used as delimiter <1>:           Escapes.             (line  71)
-* '\`', and translations:                Character Translations.
-                                                              (line 160)
-* '\`', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\`', used as delimiter:               Escapes.             (line  52)
-* '\`', used as delimiter <1>:           Escapes.             (line  71)
-* '\{', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\{', used as delimiter:               Escapes.             (line  52)
-* '\{', used as delimiter <1>:           Escapes.             (line  71)
-* '\|', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\|', used as delimiter:               Escapes.             (line  52)
-* '\}', and warnings:                    Warnings.            (line  73)
-* '\}', incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  69)
-* '\}', used as delimiter:               Escapes.             (line  52)
-* '\}', used as delimiter <1>:           Escapes.             (line  71)
-* '\~', and translations:                Character Translations.
-                                                              (line 166)
-* '\~', difference to '\<SP>':           Request and Macro Arguments.
-                                                              (line  20)
-* '\~', used as delimiter:               Escapes.             (line  52)
-* ']', as part of an identifier:         Identifiers.         (line  41)
-* ']', at end of sentence:               Sentences.           (line  18)
-* ']', at end of sentence <1>:           Using Symbols.       (line 275)
-* ']', ending an identifier:             Identifiers.         (line  75)
-* ']', ending an identifier <1>:         Escapes.             (line  20)
-* ']', macro names starting with, and 'refer': Identifiers.   (line  46)
-* '|', and page motion:                  Expressions.         (line  70)
-* aborting ('ab'):                       Debugging.           (line  40)
-* absolute position operator ('|'):      Expressions.         (line  70)
-* accent marks ['ms']:                   ms Strings and Special Characters.
-                                                              (line   6)
-* access of postprocessor:               Postprocessor Access.
-                                                              (line   6)
-* accessing unnamed glyphs with '\N':    Font File Format.    (line  51)
-* activating kerning ('kern'):           Ligatures and Kerning.
-                                                              (line  42)
-* activating ligatures ('lg'):           Ligatures and Kerning.
-                                                              (line  24)
-* activating track kerning ('tkf'):      Ligatures and Kerning.
-                                                              (line  60)
-* 'ad' request, and hyphenation margin:  Manipulating Hyphenation.
-                                                              (line 211)
-* 'ad' request, and hyphenation space:   Manipulating Hyphenation.
-                                                              (line 227)
-* adjusting:                             Filling and Adjusting.
-                                                              (line   6)
-* adjusting and filling, manipulating:   Manipulating Filling and Adjusting.
-                                                              (line   6)
-* adjustment mode register ('.j'):       Manipulating Filling and Adjusting.
-                                                              (line 114)
-* adobe glyph list (AGL):                Using Symbols.       (line  88)
-* AGL (adobe glyph list):                Using Symbols.       (line  88)
-* alias, diversion, creating ('als'):    Strings.             (line 229)
-* alias, diversion, removing ('rm'):     Strings.             (line 263)
-* alias, macro, creating ('als'):        Strings.             (line 229)
-* alias, macro, removing ('rm'):         Strings.             (line 263)
-* alias, number register, creating ('aln'): Setting Registers.
-                                                              (line 112)
-* alias, string, creating ('als'):       Strings.             (line 229)
-* alias, string, removing ('rm'):        Strings.             (line 263)
-* 'als' request, and '\$0':              Parameters.          (line  71)
-* 'am', 'am1', 'ami' requests, and warnings: Warnings.        (line  54)
-* annotations:                           Footnotes and Annotations.
-                                                              (line   6)
-* appending to a diversion ('da'):       Diversions.          (line  22)
-* appending to a file ('opena'):         I/O.                 (line 200)
-* appending to a macro ('am'):           Writing Macros.      (line 116)
-* appending to a string ('as'):          Strings.             (line 176)
-* arc, drawing ('\D'a ...''):            Drawing Requests.    (line 128)
-* argument delimiting characters:        Escapes.             (line  29)
-* arguments to macros, and tabs:         Request and Macro Arguments.
-                                                              (line   6)
-* arguments to requests and macros:      Request and Macro Arguments.
-                                                              (line   6)
-* arguments, and compatibility mode:     Gtroff Internals.    (line  91)
-* arguments, macro ('\$'):               Parameters.          (line  21)
-* arguments, of strings:                 Strings.             (line  19)
-* arithmetic operators:                  Expressions.         (line   8)
-* artificial fonts:                      Artificial Fonts.    (line   6)
-* 'as', 'as1' requests, and comments:    Comments.            (line  16)
-* 'as', 'as1' requests, and warnings:    Warnings.            (line  54)
-* ASCII approximation output register ('.A'): Groff Options.  (line  51)
-* ASCII approximation output register ('.A') <1>: Built-in Registers.
-                                                              (line 106)
-* ASCII, output encoding:                Groff Options.       (line 250)
-* 'asciify' request, and 'writem':       I/O.                 (line 222)
-* assigning formats ('af'):              Assigning Formats.   (line   6)
-* assignments, indirect:                 Interpolating Registers.
-                                                              (line  11)
-* assignments, nested:                   Interpolating Registers.
-                                                              (line  11)
-* AT&T 'troff', 'ms' macro package differences: Differences from AT&T ms.
-                                                              (line   6)
-* auto-increment:                        Auto-increment.      (line   6)
-* auto-increment, and 'ig' request:      Comments.            (line  85)
-* available glyphs, list ('groff_char(7)' man page): Using Symbols.
-                                                              (line  76)
-* background color name register ('.M'): Colors.              (line  94)
-* backslash, printing ('\\', '\e', '\E', '\[rs]'): Escapes.   (line  74)
-* backslash, printing ('\\', '\e', '\E', '\[rs]') <1>: Implementation Differences.
-                                                              (line 106)
-* backspace character:                   Identifiers.         (line  12)
-* backspace character, and translations: Character Translations.
-                                                              (line 169)
-* backtrace of input stack ('backtrace'): Debugging.          (line  96)
-* baseline:                              Sizes.               (line   6)
-* basic unit ('u'):                      Measurements.        (line   6)
-* basics of macros:                      Basics.              (line   6)
-* 'bd' request, and font styles:         Font Families.       (line  59)
-* 'bd' request, and font translations:   Changing Fonts.      (line  55)
-* 'bd' request, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* begin of conditional block ('\{'):     if-else.             (line  35)
-* beginning diversion ('di'):            Diversions.          (line  22)
-* blank line:                            Implicit Line Breaks.
-                                                              (line  10)
-* blank line <1>:                        Requests.            (line  27)
-* blank line ('sp'):                     Basics.              (line  93)
-* blank line macro ('blm'):              Implicit Line Breaks.
-                                                              (line  10)
-* blank line macro ('blm') <1>:          Requests.            (line  27)
-* blank line macro ('blm') <2>:          Blank Line Traps.    (line   7)
-* blank line traps:                      Blank Line Traps.    (line   6)
-* blank lines, disabling:                Manipulating Spacing.
-                                                              (line 123)
-* block, conditional, begin ('\{'):      if-else.             (line  35)
-* block, condititional, end ('\}'):      if-else.             (line  35)
-* bold face ['man']:                     Man font macros.     (line  14)
-* bold face, imitating ('bd'):           Artificial Fonts.    (line  98)
-* bottom margin:                         Page Layout.         (line  20)
-* bounding box:                          Miscellaneous.       (line 139)
-* box rule glyph ('\[br]'):              Drawing Requests.    (line  50)
-* 'box', 'boxa' requests, and warnings:  Warnings.            (line  54)
-* 'boxa' request, and 'dn' ('dl'):       Diversions.          (line  93)
-* 'bp' request, and top-level diversion: Page Control.        (line  24)
-* 'bp' request, and traps ('.pe'):       Page Location Traps. (line 143)
-* 'bp' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'bp' request, using '+' and '-':       Expressions.         (line  75)
-* 'br' glyph, and 'cflags':              Using Symbols.       (line 271)
-* break:                                 Basics.              (line  48)
-* break <1>:                             Manipulating Filling and Adjusting.
-                                                              (line   6)
-* break ('br'):                          Basics.              (line 118)
-* 'break' request, in a 'while' loop:    while.               (line  68)
-* break, implicit:                       Implicit Line Breaks.
-                                                              (line   6)
-* built-in registers:                    Built-in Registers.  (line   6)
-* bulleted list, example markup ['ms']:  Lists in ms.         (line  21)
-* 'c' unit:                              Measurements.        (line  27)
-* calling convention of preprocessors:   Preprocessors in man pages.
-                                                              (line   6)
-* capabilities of 'groff':               groff Capabilities.  (line   6)
-* 'ce' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'ce' request, difference to '.ad c':   Manipulating Filling and Adjusting.
-                                                              (line  66)
-* centered text:                         Manipulating Filling and Adjusting.
-                                                              (line  66)
-* centering lines ('ce'):                Basics.              (line 105)
-* centering lines ('ce') <1>:            Manipulating Filling and Adjusting.
-                                                              (line 204)
-* centimeter unit ('c'):                 Measurements.        (line  27)
-* 'cf' request, and copy-in mode:        I/O.                 (line  50)
-* 'cf' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* changing font family ('fam', '\F'):    Font Families.       (line  25)
-* changing font position ('\f'):         Font Positions.      (line  60)
-* changing font style ('sty'):           Font Families.       (line  59)
-* changing fonts ('ft', '\f'):           Changing Fonts.      (line  11)
-* changing format, and read-only registers: Assigning Formats.
-                                                              (line  68)
-* changing the font height ('\H'):       Artificial Fonts.    (line  16)
-* changing the font slant ('\S'):        Artificial Fonts.    (line  45)
-* changing the page number character ('pc'): Page Layout.     (line  94)
-* changing trap location ('ch'):         Page Location Traps. (line 111)
-* changing type sizes ('ps', '\s'):      Changing Type Sizes. (line  11)
-* changing vertical line spacing ('vs'): Changing Type Sizes. (line  88)
-* 'char' request, and soft hyphen character: Manipulating Hyphenation.
-                                                              (line 243)
-* 'char' request, and translations:      Character Translations.
-                                                              (line 160)
-* 'char' request, used with '\N':        Using Symbols.       (line 201)
-* character:                             Using Symbols.       (line   6)
-* character class ('class'):             Character Classes.   (line  12)
-* character classes:                     Character Classes.   (line   6)
-* character properties ('cflags'):       Using Symbols.       (line 237)
-* character translations:                Character Translations.
-                                                              (line   6)
-* character, backspace:                  Identifiers.         (line  12)
-* character, backspace, and translations: Character Translations.
-                                                              (line 169)
-* character, control ('.'):              Requests.            (line   6)
-* character, control, changing ('cc'):   Character Translations.
-                                                              (line   6)
-* character, defining ('char'):          Using Symbols.       (line 326)
-* character, defining fallback ('fchar', 'fschar', 'schar'): Using Symbols.
-                                                              (line 326)
-* character, escape, changing ('ec'):    Character Translations.
-                                                              (line  47)
-* character, escape, while defining glyph: Using Symbols.     (line 326)
-* character, field delimiting ('fc'):    Fields.              (line   6)
-* character, field padding ('fc'):       Fields.              (line   6)
-* character, hyphenation ('\%'):         Manipulating Hyphenation.
-                                                              (line  85)
-* character, leader repetition ('lc'):   Leaders.             (line  23)
-* character, leader, and translations:   Character Translations.
-                                                              (line 169)
-* character, leader, non-interpreted ('\a'): Leaders.         (line  18)
-* character, named ('\C'):               Using Symbols.       (line 185)
-* character, newline:                    Escapes.             (line  69)
-* character, newline, and translations:  Character Translations.
-                                                              (line 169)
-* character, no-break control ('''):     Requests.            (line   6)
-* character, no-break control, changing ('c2'): Character Translations.
-                                                              (line   6)
-* character, soft hyphen, setting ('shc'): Manipulating Hyphenation.
-                                                              (line 243)
-* character, space:                      Escapes.             (line  69)
-* character, special:                    Character Translations.
-                                                              (line 160)
-* character, tab:                        Escapes.             (line  69)
-* character, tab repetition ('tc'):      Tabs and Fields.     (line 129)
-* character, tab, and translations:      Character Translations.
-                                                              (line 169)
-* character, tab, non-interpreted ('\t'): Tabs and Fields.    (line  10)
-* character, tabulator:                  Tab Stops.           (line   6)
-* character, transparent:                Sentences.           (line  18)
-* character, transparent <1>:            Using Symbols.       (line 275)
-* character, whitespace:                 Identifiers.         (line  10)
-* character, zero width space ('\&'):    Requests.            (line  47)
-* character, zero width space ('\&') <1>: Ligatures and Kerning.
-                                                              (line  47)
-* character, zero width space ('\&') <2>: Drawing Requests.   (line  32)
-* characters, argument delimiting:       Escapes.             (line  29)
-* characters, end-of-sentence:           Using Symbols.       (line 247)
-* characters, hyphenation:               Using Symbols.       (line 251)
-* characters, input, and output glyphs, compatibility with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* characters, invalid for 'trf' request: I/O.                 (line  73)
-* characters, invalid input:             Identifiers.         (line  15)
-* characters, overlapping:               Using Symbols.       (line 265)
-* characters, special:                   Special Characters.  (line   6)
-* characters, unnamed, accessing with '\N': Font File Format. (line  51)
-* 'chem', the program:                   gchem.               (line   6)
-* circle, drawing ('\D'c ...''):         Drawing Requests.    (line 109)
-* circle, solid, drawing ('\D'C ...''):  Drawing Requests.    (line 114)
-* class of characters ('class'):         Character Classes.   (line  12)
-* classes, character:                    Character Classes.   (line   6)
-* closing file ('close'):                I/O.                 (line 231)
-* code, hyphenation ('hcode'):           Manipulating Hyphenation.
-                                                              (line 175)
-* color name, background, register ('.M'): Colors.            (line  94)
-* color name, drawing, register ('.m'):  Colors.              (line  67)
-* color name, fill, register ('.M'):     Colors.              (line  94)
-* color, default:                        Colors.              (line  26)
-* colors:                                Colors.              (line   6)
-* colors, fill, unnamed ('\D'F...''):    Drawing Requests.    (line 216)
-* command prefix:                        Environment.         (line  14)
-* command-line options:                  Groff Options.       (line  50)
-* commands, embedded:                    Embedded Commands.   (line   6)
-* comments:                              Comments.            (line   6)
-* comments in font files:                Font File Format.    (line  36)
-* comments, lining up with tabs:         Comments.            (line  21)
-* comments, with 'ds':                   Strings.             (line  45)
-* common features:                       Common Features.     (line   6)
-* common name space of macros, diversions, and strings: Strings.
-                                                              (line  92)
-* comparison of strings:                 Operators in Conditionals.
-                                                              (line  47)
-* comparison operators:                  Expressions.         (line  15)
-* compatibility mode:                    Warnings.            (line  91)
-* compatibility mode <1>:                Implementation Differences.
-                                                              (line   6)
-* compatibility mode, and parameters:    Gtroff Internals.    (line  91)
-* composite glyph names:                 Using Symbols.       (line  88)
-* conditional block, begin ('\{'):       if-else.             (line  35)
-* conditional block, end ('\}'):         if-else.             (line  35)
-* conditional output for terminal (TTY): Operators in Conditionals.
-                                                              (line  14)
-* conditional page break ('ne'):         Page Control.        (line  33)
-* conditionals and loops:                Conditionals and Loops.
-                                                              (line   6)
-* consecutive hyphenated lines ('hlm'):  Manipulating Hyphenation.
-                                                              (line  47)
-* constant glyph space mode ('cs'):      Artificial Fonts.    (line 126)
-* contents, table of:                    Table of Contents.   (line   6)
-* contents, table of <1>:                Leaders.             (line  29)
-* continuation, input line ('\'):        Line Control.        (line  36)
-* continuation, output line ('\c'):      Line Control.        (line  36)
-* 'continue' request, in a 'while' loop: while.               (line  68)
-* continuous underlining ('cu'):         Artificial Fonts.    (line  86)
-* control character ('.'):               Requests.            (line   6)
-* control character, changing ('cc'):    Character Translations.
-                                                              (line   6)
-* control character, no-break ('''):     Requests.            (line   6)
-* control character, no-break, changing ('c2'): Character Translations.
-                                                              (line   6)
-* control sequences, for terminals:      Invoking grotty.     (line  50)
-* control, line:                         Line Control.        (line   6)
-* control, page:                         Page Control.        (line   6)
-* conventions for input:                 Input Conventions.   (line   6)
-* copy mode:                             Copy-in Mode.        (line   6)
-* copy-in mode:                          Copy-in Mode.        (line   6)
-* copy-in mode, and 'cf' request:        I/O.                 (line  50)
-* copy-in mode, and 'device' request:    Postprocessor Access.
-                                                              (line  19)
-* copy-in mode, and 'ig' request:        Comments.            (line  85)
-* copy-in mode, and 'length' request:    Strings.             (line 211)
-* copy-in mode, and macro arguments:     Parameters.          (line  21)
-* copy-in mode, and 'output' request:    Diversions.          (line 179)
-* copy-in mode, and 'tm' request:        Debugging.           (line  30)
-* copy-in mode, and 'tm1' request:       Debugging.           (line  30)
-* copy-in mode, and 'tmc' request:       Debugging.           (line  30)
-* copy-in mode, and 'trf' request:       I/O.                 (line  50)
-* copy-in mode, and 'write' request:     I/O.                 (line 212)
-* copy-in mode, and 'writec' request:    I/O.                 (line 212)
-* copy-in mode, and 'writem' request:    I/O.                 (line 225)
-* copy-in mode, and '\!':                Diversions.          (line 148)
-* copy-in mode, and '\?':                Operators in Conditionals.
-                                                              (line  55)
-* copy-in mode, and '\?' <1>:            Diversions.          (line 148)
-* copy-in mode, and '\a':                Leaders.             (line  18)
-* copy-in mode, and '\E':                Character Translations.
-                                                              (line  81)
-* copy-in mode, and '\t':                Tabs and Fields.     (line  10)
-* copy-in mode, and '\V':                I/O.                 (line 249)
-* copying environment ('evc'):           Environments.        (line  70)
-* correction between italic and roman glyph ('\/', '\,'): Ligatures and Kerning.
-                                                              (line  80)
-* correction, italic ('\/'):             Ligatures and Kerning.
-                                                              (line  80)
-* correction, left italic ('\,'):        Ligatures and Kerning.
-                                                              (line  91)
-* cover page macros, ['ms']:             ms Cover Page Macros.
-                                                              (line   6)
-* 'cp' request, and glyph definitions:   Using Symbols.       (line 326)
-* cp1047, input encoding:                Input Encodings.     (line   9)
-* cp1047, output encoding:               Groff Options.       (line 264)
-* 'cq' glyph, at end of sentence:        Sentences.           (line  18)
-* 'cq' glyph, at end of sentence <1>:    Using Symbols.       (line 275)
-* creating alias, for diversion ('als'): Strings.             (line 229)
-* creating alias, for macro ('als'):     Strings.             (line 229)
-* creating alias, for number register ('aln'): Setting Registers.
-                                                              (line 112)
-* creating alias, for string ('als'):    Strings.             (line 229)
-* creating new characters ('char'):      Using Symbols.       (line 326)
-* credits:                               Credits.             (line   6)
-* 'cs' request, and font styles:         Font Families.       (line  59)
-* 'cs' request, and font translations:   Changing Fonts.      (line  55)
-* 'cs' request, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* 'cs' request, with fractional type sizes: Fractional Type Sizes.
-                                                              (line   6)
-* current directory:                     Macro Directories.   (line  21)
-* current input file name register ('.F'): Built-in Registers.
-                                                              (line  12)
-* current page number ('%'):             Page Control.        (line  27)
-* current time:                          I/O.                 (line 175)
-* current time, hours ('hours'):         Built-in Registers.  (line  41)
-* current time, minutes ('minutes'):     Built-in Registers.  (line  37)
-* current time, seconds ('seconds'):     Built-in Registers.  (line  31)
-* current vertical position ('nl'):      Page Control.        (line  67)
-* 'da' request, and 'dn' ('dl'):         Diversions.          (line  93)
-* 'da' request, and warnings:            Warnings.            (line  49)
-* 'da' request, and warnings <1>:        Warnings.            (line  54)
-* date, day of the month register ('dy'): Built-in Registers. (line  48)
-* date, day of the week register ('dw'): Built-in Registers.  (line  45)
-* date, month of the year register ('mo'): Built-in Registers.
-                                                              (line  51)
-* date, year register ('year', 'yr'):    Built-in Registers.  (line  54)
-* day of the month register ('dy'):      Built-in Registers.  (line  48)
-* day of the week register ('dw'):       Built-in Registers.  (line  45)
-* 'de' request, and 'while':             while.               (line  22)
-* 'de', 'de1', 'dei' requests, and warnings: Warnings.        (line  54)
-* debugging:                             Debugging.           (line   6)
-* default color:                         Colors.              (line  26)
-* default indentation ['man']:           Miscellaneous man macros.
-                                                              (line   6)
-* default indentation, resetting ['man']: Man usage.          (line 127)
-* default units:                         Default Units.       (line   6)
-* defining character ('char'):           Using Symbols.       (line 326)
-* defining character class ('class'):    Character Classes.   (line  12)
-* defining fallback character ('fchar', 'fschar', 'schar'): Using Symbols.
-                                                              (line 326)
-* defining glyph ('char'):               Using Symbols.       (line 326)
-* defining symbol ('char'):              Using Symbols.       (line 326)
-* delayed text:                          Footnotes and Annotations.
-                                                              (line  10)
-* delimited arguments, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  47)
-* delimiting character, for fields ('fc'): Fields.            (line   6)
-* delimiting characters for arguments:   Escapes.             (line  29)
-* depth, of last glyph ('.cdp'):         Environments.        (line  95)
-* 'DESC' file, format:                   DESC File Format.    (line   6)
-* 'device' request, and copy-in mode:    Postprocessor Access.
-                                                              (line  19)
-* device resolution:                     DESC File Format.    (line  85)
-* devices for output:                    Output device intro. (line   6)
-* devices for output <1>:                Output Devices.      (line   6)
-* 'dg' glyph, at end of sentence:        Sentences.           (line  18)
-* 'dg' glyph, at end of sentence <1>:    Using Symbols.       (line 275)
-* 'di' request, and warnings:            Warnings.            (line  49)
-* 'di' request, and warnings <1>:        Warnings.            (line  54)
-* differences in implementation:         Implementation Differences.
-                                                              (line   6)
-* digit width space ('\0'):              Page Motions.        (line 138)
-* digits, and delimiters:                Escapes.             (line  65)
-* dimensions, line:                      Line Layout.         (line   6)
-* directories for fonts:                 Font Directories.    (line   6)
-* directories for macros:                Macro Directories.   (line   6)
-* directory, current:                    Macro Directories.   (line  21)
-* directory, for tmac files:             Macro Directories.   (line  11)
-* directory, home:                       Macro Directories.   (line  24)
-* directory, platform-specific:          Macro Directories.   (line  26)
-* directory, site-specific:              Macro Directories.   (line  26)
-* directory, site-specific <1>:          Font Directories.    (line  29)
-* disabling hyphenation ('\%'):          Manipulating Hyphenation.
-                                                              (line  85)
-* disabling '\' ('eo'):                  Character Translations.
-                                                              (line  24)
-* discardable horizontal space:          Manipulating Filling and Adjusting.
-                                                              (line 183)
-* discarded space in traps:              Manipulating Spacing.
-                                                              (line  53)
-* displays:                              Displays.            (line   6)
-* displays ['ms']:                       ms Displays and Keeps.
-                                                              (line   6)
-* displays, and footnotes ['ms']:        ms Footnotes.        (line  24)
-* distance to next trap register ('.t'): Page Location Traps. (line 102)
-* 'ditroff', the program:                History.             (line  59)
-* diversion name register ('.z'):        Diversions.          (line  69)
-* diversion trap, setting ('dt'):        Diversion Traps.     (line   7)
-* diversion traps:                       Diversion Traps.     (line   6)
-* diversion, appending ('da'):           Diversions.          (line  22)
-* diversion, beginning ('di'):           Diversions.          (line  22)
-* diversion, creating alias ('als'):     Strings.             (line 229)
-* diversion, ending ('di'):              Diversions.          (line  22)
-* diversion, nested:                     Diversions.          (line  69)
-* diversion, removing ('rm'):            Strings.             (line 224)
-* diversion, removing alias ('rm'):      Strings.             (line 263)
-* diversion, renaming ('rn'):            Strings.             (line 221)
-* diversion, stripping final newline:    Strings.             (line 157)
-* diversion, top-level:                  Diversions.          (line  12)
-* diversion, top-level, and 'bp':        Page Control.        (line  24)
-* diversion, top-level, and '\!':        Diversions.          (line 171)
-* diversion, top-level, and '\?':        Diversions.          (line 176)
-* diversion, unformatting ('asciify'):   Diversions.          (line 195)
-* diversion, vertical position in, register ('.d'): Diversions.
-                                                              (line  69)
-* diversions:                            Diversions.          (line   6)
-* diversions, and traps:                 Page Location Traps. (line 166)
-* diversions, shared name space with macros and strings: Strings.
-                                                              (line  92)
-* 'dl' register, and 'da' ('boxa'):      Diversions.          (line  93)
-* 'dn' register, and 'da' ('boxa'):      Diversions.          (line  93)
-* documents, multi-file:                 Debugging.           (line  10)
-* documents, structuring the source code: Requests.           (line  14)
-* double quote, in a macro argument:     Request and Macro Arguments.
-                                                              (line  25)
-* double-spacing ('ls'):                 Basics.              (line  82)
-* double-spacing ('ls') <1>:             Manipulating Spacing.
-                                                              (line  64)
-* double-spacing ('vs', 'pvs'):          Changing Type Sizes. (line 125)
-* drawing a circle ('\D'c ...''):        Drawing Requests.    (line 109)
-* drawing a line ('\D'l ...''):          Drawing Requests.    (line  80)
-* drawing a polygon ('\D'p ...''):       Drawing Requests.    (line 158)
-* drawing a solid circle ('\D'C ...''):  Drawing Requests.    (line 114)
-* drawing a solid ellipse ('\D'E ...''): Drawing Requests.    (line 124)
-* drawing a solid polygon ('\D'P ...''): Drawing Requests.    (line 167)
-* drawing a spline ('\D'~ ...''):        Drawing Requests.    (line 136)
-* drawing an arc ('\D'a ...''):          Drawing Requests.    (line 128)
-* drawing an ellipse ('\D'e ...''):      Drawing Requests.    (line 118)
-* drawing color name register ('.m'):    Colors.              (line  67)
-* drawing horizontal lines ('\l'):       Drawing Requests.    (line  17)
-* drawing requests:                      Drawing Requests.    (line   6)
-* drawing vertical lines ('\L'):         Drawing Requests.    (line  50)
-* 'ds' request, and comments:            Strings.             (line  45)
-* 'ds' request, and double quotes:       Request and Macro Arguments.
-                                                              (line  69)
-* 'ds' request, and leading spaces:      Strings.             (line  57)
-* 'ds', 'ds1' requests, and comments:    Comments.            (line  16)
-* 'ds', 'ds1' requests, and warnings:    Warnings.            (line  54)
-* dumping environments ('pev'):          Debugging.           (line  62)
-* dumping number registers ('pnr'):      Debugging.           (line  77)
-* dumping symbol table ('pm'):           Debugging.           (line  66)
-* dumping traps ('ptr'):                 Debugging.           (line  81)
-* EBCDIC encoding:                       Tab Stops.           (line   6)
-* EBCDIC encoding of a tab:              Tabs and Fields.     (line   6)
-* EBCDIC encoding of backspace:          Identifiers.         (line  12)
-* EBCDIC, input encoding:                Input Encodings.     (line   9)
-* EBCDIC, output encoding:               Groff Options.       (line 264)
-* 'el' request, and warnings:            Warnings.            (line  32)
-* ellipse, drawing ('\D'e ...''):        Drawing Requests.    (line 118)
-* ellipse, solid, drawing ('\D'E ...''): Drawing Requests.    (line 124)
-* 'em' glyph, and 'cflags':              Using Symbols.       (line 258)
-* em unit ('m'):                         Measurements.        (line  50)
-* embedded commands:                     Embedded Commands.   (line   6)
-* embedding PDF:                         Embedding PDF.       (line   6)
-* embedding PostScript:                  Embedding PostScript.
-                                                              (line   6)
-* embolding of special fonts:            Artificial Fonts.    (line 115)
-* empty line:                            Implicit Line Breaks.
-                                                              (line  10)
-* empty line ('sp'):                     Basics.              (line  93)
-* empty space before a paragraph ['man']: Miscellaneous man macros.
-                                                              (line  15)
-* en unit ('n'):                         Measurements.        (line  55)
-* enabling vertical position traps ('vpt'): Page Location Traps.
-                                                              (line  18)
-* encoding, EBCDIC:                      Tab Stops.           (line   6)
-* encoding, input, cp1047:               Input Encodings.     (line   9)
-* encoding, input, EBCDIC:               Input Encodings.     (line   9)
-* encoding, input, latin-1 (ISO 8859-1): Input Encodings.     (line  14)
-* encoding, input, latin-2 (ISO 8859-2): Input Encodings.     (line  18)
-* encoding, input, latin-5 (ISO 8859-9): Input Encodings.     (line  23)
-* encoding, input, latin-9 (latin-0, ISO 8859-15): Input Encodings.
-                                                              (line  28)
-* encoding, output, ASCII:               Groff Options.       (line 250)
-* encoding, output, cp1047:              Groff Options.       (line 264)
-* encoding, output, EBCDIC:              Groff Options.       (line 264)
-* encoding, output, latin-1 (ISO 8859-1): Groff Options.      (line 254)
-* encoding, output, utf-8:               Groff Options.       (line 259)
-* end of conditional block ('\}'):       if-else.             (line  35)
-* end-of-input macro ('em'):             End-of-input Traps.  (line   7)
-* end-of-input trap, setting ('em'):     End-of-input Traps.  (line   7)
-* end-of-input traps:                    End-of-input Traps.  (line   6)
-* end-of-sentence characters:            Using Symbols.       (line 247)
-* ending diversion ('di'):               Diversions.          (line  22)
-* environment number/name register ('.ev'): Environments.     (line  39)
-* environment variables:                 Environment.         (line   6)
-* environment, copying ('evc'):          Environments.        (line  70)
-* environment, dimensions of last glyph ('.w', '.cht', '.cdp', '.csk'): Environments.
-                                                              (line  95)
-* environment, previous line length ('.n'): Environments.     (line 110)
-* environment, switching ('ev'):         Environments.        (line  39)
-* environments:                          Environments.        (line   6)
-* environments, dumping ('pev'):         Debugging.           (line  62)
-* 'eqn', the program:                    geqn.                (line   6)
-* equations ['ms']:                      ms Insertions.       (line   6)
-* escape character, changing ('ec'):     Character Translations.
-                                                              (line  47)
-* escape character, while defining glyph: Using Symbols.      (line 326)
-* escapes:                               Escapes.             (line   6)
-* escaping newline characters, in strings: Strings.           (line  63)
-* 'ex' request, use in debugging:        Debugging.           (line  45)
-* 'ex' request, used with 'nx' and 'rd': I/O.                 (line 122)
-* example markup, bulleted list ['ms']:  Lists in ms.         (line  21)
-* example markup, glossary-style list ['ms']: Lists in ms.    (line  65)
-* example markup, multi-page table ['ms']: Example multi-page table.
-                                                              (line   6)
-* example markup, numbered list ['ms']:  Lists in ms.         (line  41)
-* example markup, title page:            ms Cover Page Macros.
-                                                              (line  66)
-* examples of invocation:                Invocation Examples. (line   6)
-* exiting ('ex'):                        Debugging.           (line  45)
-* expansion of strings ('\*'):           Strings.             (line  19)
-* explicit hyphen ('\%'):                Manipulating Hyphenation.
-                                                              (line  47)
-* expression, limitation of logical not in: Expressions.      (line  27)
-* expression, order of evaluation:       Expressions.         (line  59)
-* expressions:                           Expressions.         (line   6)
-* expressions, and space characters:     Expressions.         (line  86)
-* extra post-vertical line space ('\x'): Changing Type Sizes. (line 118)
-* extra post-vertical line space register ('.a'): Manipulating Spacing.
-                                                              (line  94)
-* extra pre-vertical line space ('\x'):  Changing Type Sizes. (line 109)
-* extra spaces:                          Filling and Adjusting.
-                                                              (line  10)
-* extremum operators ('>?', '<?'):       Expressions.         (line  44)
-* 'f' unit:                              Measurements.        (line  43)
-* 'f' unit, and colors:                  Colors.              (line  36)
-* factor, zoom, of a font ('fzoom'):     Changing Fonts.      (line  71)
-* fallback character, defining ('fchar', 'fschar', 'schar'): Using Symbols.
-                                                              (line 326)
-* fallback glyph, removing definition ('rchar', 'rfschar'): Using Symbols.
-                                                              (line 382)
-* 'fam' request, and changing fonts:     Changing Fonts.      (line  11)
-* 'fam' request, and font positions:     Font Positions.      (line  60)
-* families, font:                        Font Families.       (line   6)
-* features, common:                      Common Features.     (line   6)
-* 'fi' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* field delimiting character ('fc'):     Fields.              (line   6)
-* field padding character ('fc'):        Fields.              (line   6)
-* fields:                                Fields.              (line   6)
-* fields, and tabs:                      Tabs and Fields.     (line   6)
-* figures ['ms']:                        ms Insertions.       (line   6)
-* file formats:                          File formats.        (line   6)
-* file, appending to ('opena'):          I/O.                 (line 200)
-* file, closing ('close'):               I/O.                 (line 231)
-* file, inclusion ('so'):                I/O.                 (line   9)
-* file, opening ('open'):                I/O.                 (line 200)
-* file, processing next ('nx'):          I/O.                 (line  84)
-* file, writing to ('write', 'writec'):  I/O.                 (line 212)
-* files, font:                           Font Files.          (line   6)
-* files, macro, searching:               Macro Directories.   (line  11)
-* fill color name register ('.M'):       Colors.              (line  94)
-* fill colors, unnamed ('\D'F...''):     Drawing Requests.    (line 216)
-* fill mode:                             Implicit Line Breaks.
-                                                              (line  15)
-* fill mode <1>:                         Manipulating Filling and Adjusting.
-                                                              (line 156)
-* fill mode <2>:                         Warnings.            (line  23)
-* fill mode ('fi'):                      Manipulating Filling and Adjusting.
-                                                              (line  29)
-* fill mode, and '\c':                   Line Control.        (line  69)
-* filling:                               Filling and Adjusting.
-                                                              (line   6)
-* filling and adjusting, manipulating:   Manipulating Filling and Adjusting.
-                                                              (line   6)
-* final newline, stripping in diversions: Strings.            (line 157)
-* 'fl' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* floating keep:                         Displays.            (line  23)
-* flush output ('fl'):                   Debugging.           (line  87)
-* font description file, format:         DESC File Format.    (line   6)
-* font description file, format <1>:     Font File Format.    (line   6)
-* font directories:                      Font Directories.    (line   6)
-* font families:                         Font Families.       (line   6)
-* font family, changing ('fam', '\F'):   Font Families.       (line  25)
-* font file, format:                     Font File Format.    (line   6)
-* font files:                            Font Files.          (line   6)
-* font files, comments:                  Font File Format.    (line  36)
-* font for underlining ('uf'):           Artificial Fonts.    (line  90)
-* font height, changing ('\H'):          Artificial Fonts.    (line  16)
-* font path:                             Font Directories.    (line  14)
-* font position register ('.f'):         Font Positions.      (line  20)
-* font position, changing ('\f'):        Font Positions.      (line  60)
-* font positions:                        Font Positions.      (line   6)
-* font selection ['man']:                Man font macros.     (line   6)
-* font slant, changing ('\S'):           Artificial Fonts.    (line  45)
-* font style, changing ('sty'):          Font Families.       (line  59)
-* font styles:                           Font Families.       (line   6)
-* font translation ('ftr'):              Changing Fonts.      (line  55)
-* font, magnification ('fzoom'):         Changing Fonts.      (line  71)
-* font, mounting ('fp'):                 Font Positions.      (line  13)
-* font, optical size:                    Changing Fonts.      (line  71)
-* font, previous ('ft', '\f[]', '\fP'):  Changing Fonts.      (line  23)
-* font, zoom factor ('fzoom'):           Changing Fonts.      (line  71)
-* fonts:                                 Fonts and Symbols.   (line   6)
-* fonts <1>:                             Changing Fonts.      (line   6)
-* fonts, artificial:                     Artificial Fonts.    (line   6)
-* fonts, changing ('ft', '\f'):          Changing Fonts.      (line  11)
-* fonts, PostScript:                     Font Families.       (line  11)
-* fonts, searching:                      Font Directories.    (line   6)
-* fonts, special:                        Special Fonts.       (line   6)
-* footers:                               Page Layout.         (line  31)
-* footers <1>:                           Page Location Traps. (line  38)
-* footers ['ms']:                        ms Headers and Footers.
-                                                              (line   6)
-* footnotes:                             Footnotes and Annotations.
-                                                              (line   6)
-* footnotes ['ms']:                      ms Footnotes.        (line   6)
-* footnotes, and displays ['ms']:        ms Footnotes.        (line  24)
-* footnotes, and keeps ['ms']:           ms Footnotes.        (line  24)
-* form letters:                          I/O.                 (line 106)
-* format of font description file:       DESC File Format.    (line   6)
-* format of font description files:      Font File Format.    (line   6)
-* format of font files:                  Font File Format.    (line   6)
-* format of register ('\g'):             Assigning Formats.   (line  75)
-* formats, assigning ('af'):             Assigning Formats.   (line   6)
-* formats, file:                         File formats.        (line   6)
-* 'fp' request, and font translations:   Changing Fonts.      (line  55)
-* 'fp' request, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* fractional point sizes:                Fractional Type Sizes.
-                                                              (line   6)
-* fractional point sizes <1>:            Implementation Differences.
-                                                              (line  76)
-* fractional type sizes:                 Fractional Type Sizes.
-                                                              (line   6)
-* fractional type sizes <1>:             Implementation Differences.
-                                                              (line  76)
-* french-spacing:                        Sentences.           (line  12)
-* 'fspecial' request, and font styles:   Font Families.       (line  59)
-* 'fspecial' request, and font translations: Changing Fonts.  (line  55)
-* 'fspecial' request, and glyph search order: Using Symbols.  (line  14)
-* 'fspecial' request, and imitating bold: Artificial Fonts.   (line 115)
-* 'ft' request, and font translations:   Changing Fonts.      (line  55)
-* 'gchem', invoking:                     Invoking gchem.      (line   5)
-* 'gchem', the program:                  gchem.               (line   6)
-* 'geqn', invoking:                      Invoking geqn.       (line   5)
-* 'geqn', the program:                   geqn.                (line   6)
-* GGL (groff glyph list):                Using Symbols.       (line  88)
-* GGL (groff glyph list) <1>:            Character Classes.   (line  32)
-* 'ggrn', invoking:                      Invoking ggrn.       (line   5)
-* 'ggrn', the program:                   ggrn.                (line   6)
-* glossary-style list, example markup ['ms']: Lists in ms.    (line  65)
-* glyph:                                 Using Symbols.       (line   6)
-* glyph for line drawing:                Drawing Requests.    (line  50)
-* glyph names, composite:                Using Symbols.       (line  88)
-* glyph pile ('\b'):                     Drawing Requests.    (line 232)
-* glyph properties ('cflags'):           Using Symbols.       (line 237)
-* glyph, box rule ('\[br]'):             Drawing Requests.    (line  50)
-* glyph, constant space:                 Artificial Fonts.    (line 126)
-* glyph, defining ('char'):              Using Symbols.       (line 326)
-* glyph, for line drawing:               Drawing Requests.    (line  28)
-* glyph, for margins ('mc'):             Miscellaneous.       (line  75)
-* glyph, italic correction ('\/'):       Ligatures and Kerning.
-                                                              (line  80)
-* glyph, last, dimensions ('.w', '.cht', '.cdp', '.csk'): Environments.
-                                                              (line  95)
-* glyph, leader repetition ('lc'):       Leaders.             (line  23)
-* glyph, left italic correction ('\,'):  Ligatures and Kerning.
-                                                              (line  91)
-* glyph, numbered ('\N'):                Character Translations.
-                                                              (line 160)
-* glyph, numbered ('\N') <1>:            Using Symbols.       (line 201)
-* glyph, removing definition ('rchar', 'rfschar'): Using Symbols.
-                                                              (line 382)
-* glyph, soft hyphen ('hy'):             Manipulating Hyphenation.
-                                                              (line 243)
-* glyph, tab repetition ('tc'):          Tabs and Fields.     (line 129)
-* glyph, underscore ('\[ru]'):           Drawing Requests.    (line  28)
-* glyphs, available, list ('groff_char(7)' man page): Using Symbols.
-                                                              (line  76)
-* glyphs, output, and input characters, compatibility with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* glyphs, overstriking ('\o'):           Page Motions.        (line 216)
-* glyphs, unnamed:                       Using Symbols.       (line 212)
-* glyphs, unnamed, accessing with '\N':  Font File Format.    (line  51)
-* GNU-specific register ('.g'):          Built-in Registers.  (line 102)
-* 'gpic', invoking:                      Invoking gpic.       (line   5)
-* 'gpic', the program:                   gpic.                (line   6)
-* 'grap', the program:                   grap.                (line   6)
-* gray shading ('\D'f ...''):            Drawing Requests.    (line 141)
-* 'grefer', invoking:                    Invoking grefer.     (line   5)
-* 'grefer', the program:                 grefer.              (line   6)
-* 'grn', the program:                    ggrn.                (line   6)
-* 'grodvi', invoking:                    Invoking grodvi.     (line   6)
-* 'grodvi', the program:                 grodvi.              (line   6)
-* 'groff' - what is it?:                 What Is groff?.      (line   6)
-* 'groff' capabilities:                  groff Capabilities.  (line   6)
-* groff glyph list (GGL):                Using Symbols.       (line  88)
-* groff glyph list (GGL) <1>:            Character Classes.   (line  32)
-* 'groff' invocation:                    Invoking groff.      (line   6)
-* 'groff', and 'pi' request:             I/O.                 (line 159)
-* GROFF_BIN_PATH, environment variable:  Environment.         (line  10)
-* GROFF_COMMAND_PREFIX, environment variable: Environment.    (line  14)
-* GROFF_ENCODING, environment variable:  Environment.         (line  25)
-* GROFF_FONT_PATH, environment variable: Environment.         (line  34)
-* GROFF_FONT_PATH, environment variable <1>: Font Directories.
-                                                              (line  26)
-* GROFF_TMAC_PATH, environment variable: Environment.         (line  39)
-* GROFF_TMAC_PATH, environment variable <1>: Macro Directories.
-                                                              (line  18)
-* GROFF_TMPDIR, environment variable:    Environment.         (line  44)
-* GROFF_TYPESETTER, environment variable: Environment.        (line  52)
-* 'grohtml', invoking:                   Invoking grohtml.    (line   6)
-* 'grohtml', registers and strings:      grohtml specific registers and strings.
-                                                              (line   6)
-* 'grohtml', the program:                Groff Options.       (line 275)
-* 'grohtml', the program <1>:            grohtml.             (line   6)
-* 'grolbp', invoking:                    Invoking grolbp.     (line   6)
-* 'grolbp', the program:                 grolbp.              (line   6)
-* 'grolj4', invoking:                    Invoking grolj4.     (line   6)
-* 'grolj4', the program:                 grolj4.              (line   6)
-* 'gropdf', invoking:                    Invoking gropdf.     (line   6)
-* 'gropdf', the program:                 gropdf.              (line   6)
-* 'grops', invoking:                     Invoking grops.      (line   6)
-* 'grops', the program:                  grops.               (line   6)
-* 'grotty', invoking:                    Invoking grotty.     (line   6)
-* 'grotty', the program:                 grotty.              (line   6)
-* 'gsoelim', invoking:                   Invoking gsoelim.    (line   5)
-* 'gsoelim', the program:                gsoelim.             (line   6)
-* 'gtbl', invoking:                      Invoking gtbl.       (line   5)
-* 'gtbl', the program:                   gtbl.                (line   6)
-* 'gtroff', identification register ('.g'): Built-in Registers.
-                                                              (line 102)
-* 'gtroff', interactive use:             Debugging.           (line  87)
-* 'gtroff', output:                      gtroff Output.       (line   6)
-* 'gtroff', process ID register ('$$'):  Built-in Registers.  (line  99)
-* 'gtroff', reference:                   gtroff Reference.    (line   6)
-* 'gxditview', invoking:                 Invoking gxditview.  (line   5)
-* 'gxditview', the program:              gxditview.           (line   6)
-* hanging indentation ['man']:           Man usage.           (line  98)
-* 'hcode' request, and glyph definitions: Using Symbols.      (line 326)
-* headers:                               Page Layout.         (line  31)
-* headers <1>:                           Page Location Traps. (line  38)
-* headers ['ms']:                        ms Headers and Footers.
-                                                              (line   6)
-* height, font, changing ('\H'):         Artificial Fonts.    (line  16)
-* height, of last glyph ('.cht'):        Environments.        (line  95)
-* high-water mark register ('.h'):       Diversions.          (line  76)
-* history:                               History.             (line   6)
-* home directory:                        Macro Directories.   (line  24)
-* horizontal discardable space:          Manipulating Filling and Adjusting.
-                                                              (line 183)
-* horizontal input line position register ('hp'): Page Motions.
-                                                              (line 209)
-* horizontal input line position, saving ('\k'): Page Motions.
-                                                              (line 203)
-* horizontal line, drawing ('\l'):       Drawing Requests.    (line  17)
-* horizontal motion ('\h'):              Page Motions.        (line 103)
-* horizontal output line position register ('.k'): Page Motions.
-                                                              (line 212)
-* horizontal resolution:                 DESC File Format.    (line  25)
-* horizontal resolution register ('.H'): Built-in Registers.  (line  15)
-* horizontal space ('\h'):               Page Motions.        (line 103)
-* horizontal space, unformatting:        Strings.             (line 157)
-* hours, current time ('hours'):         Built-in Registers.  (line  41)
-* 'hpf' request, and hyphenation language: Manipulating Hyphenation.
-                                                              (line 256)
-* 'hw' request, and hyphenation language: Manipulating Hyphenation.
-                                                              (line 256)
-* 'hy' glyph, and 'cflags':              Using Symbols.       (line 258)
-* hyphen, explicit ('\%'):               Manipulating Hyphenation.
-                                                              (line  47)
-* hyphenated lines, consecutive ('hlm'): Manipulating Hyphenation.
-                                                              (line  47)
-* hyphenating characters:                Using Symbols.       (line 251)
-* hyphenation:                           Hyphenation.         (line   6)
-* hyphenation character ('\%'):          Manipulating Hyphenation.
-                                                              (line  85)
-* hyphenation code ('hcode'):            Manipulating Hyphenation.
-                                                              (line 175)
-* hyphenation language register ('.hla'): Manipulating Hyphenation.
-                                                              (line 263)
-* hyphenation margin ('hym'):            Manipulating Hyphenation.
-                                                              (line 211)
-* hyphenation margin register ('.hym'):  Manipulating Hyphenation.
-                                                              (line 222)
-* hyphenation patterns ('hpf'):          Manipulating Hyphenation.
-                                                              (line 116)
-* hyphenation restrictions register ('.hy'): Manipulating Hyphenation.
-                                                              (line  30)
-* hyphenation space ('hys'):             Manipulating Hyphenation.
-                                                              (line 227)
-* hyphenation space register ('.hys'):   Manipulating Hyphenation.
-                                                              (line 239)
-* hyphenation, disabling ('\%'):         Manipulating Hyphenation.
-                                                              (line  85)
-* hyphenation, manipulating:             Manipulating Hyphenation.
-                                                              (line   6)
-* 'i' unit:                              Measurements.        (line  22)
-* i/o:                                   I/O.                 (line   6)
-* IBM cp1047 input encoding:             Input Encodings.     (line   9)
-* IBM cp1047 output encoding:            Groff Options.       (line 264)
-* identifiers:                           Identifiers.         (line   6)
-* identifiers, undefined:                Identifiers.         (line  79)
-* 'ie' request, and font translations:   Changing Fonts.      (line  55)
-* 'ie' request, and warnings:            Warnings.            (line  32)
-* 'ie' request, operators to use with:   Operators in Conditionals.
-                                                              (line   6)
-* 'if' request, and font translations:   Changing Fonts.      (line  55)
-* 'if' request, and the '!' operator:    Expressions.         (line  21)
-* 'if' request, operators to use with:   Operators in Conditionals.
-                                                              (line   6)
-* if-else:                               if-else.             (line   6)
-* 'ig' request, and auto-increment:      Comments.            (line  85)
-* 'ig' request, and copy-in mode:        Comments.            (line  85)
-* imitating bold face ('bd'):            Artificial Fonts.    (line  98)
-* implementation differences:            Implementation Differences.
-                                                              (line   6)
-* implicit breaks of lines:              Implicit Line Breaks.
-                                                              (line   6)
-* implicit line breaks:                  Implicit Line Breaks.
-                                                              (line   6)
-* 'in' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'in' request, using '+' and '-':       Expressions.         (line  75)
-* inch unit ('i'):                       Measurements.        (line  22)
-* including a file ('so'):               I/O.                 (line   9)
-* incompatibilities with AT&T 'troff':   Implementation Differences.
-                                                              (line   6)
-* increment value without changing the register: Auto-increment.
-                                                              (line  52)
-* increment, automatic:                  Auto-increment.      (line   6)
-* indentaion, resetting to default ['man']: Man usage.        (line 127)
-* indentation ('in'):                    Line Layout.         (line  25)
-* index, in macro package:               Indices.             (line   6)
-* indicator, scaling:                    Measurements.        (line   6)
-* indirect assignments:                  Interpolating Registers.
-                                                              (line  11)
-* input and output requests:             I/O.                 (line   6)
-* input characters and output glyphs, compatibility with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* input characters, invalid:             Identifiers.         (line  15)
-* input conventions:                     Input Conventions.   (line   6)
-* input encoding, cp1047:                Input Encodings.     (line   9)
-* input encoding, EBCDIC:                Input Encodings.     (line   9)
-* input encoding, latin-1 (ISO 8859-1):  Input Encodings.     (line  14)
-* input encoding, latin-2 (ISO 8859-2):  Input Encodings.     (line  18)
-* input encoding, latin-2 (ISO 8859-9):  Input Encodings.     (line  23)
-* input encoding, latin-9 (latin-9, ISO 8859-15): Input Encodings.
-                                                              (line  28)
-* input file name, current, register ('.F'): Built-in Registers.
-                                                              (line  12)
-* input level in delimited arguments:    Implementation Differences.
-                                                              (line  47)
-* input line continuation ('\'):         Line Control.        (line  36)
-* input line number register ('.c', 'c.'): Built-in Registers.
-                                                              (line  77)
-* input line number, setting ('lf'):     Debugging.           (line  10)
-* input line position, horizontal, saving ('\k'): Page Motions.
-                                                              (line 203)
-* input line trap, setting ('it'):       Input Line Traps.    (line   8)
-* input line traps:                      Input Line Traps.    (line   6)
-* input line traps and interrupted lines ('itc'): Input Line Traps.
-                                                              (line  24)
-* input line, horizontal position, register ('hp'): Page Motions.
-                                                              (line 209)
-* input stack, backtrace ('backtrace'):  Debugging.           (line  96)
-* input stack, setting limit:            Debugging.           (line 119)
-* input token:                           Gtroff Internals.    (line   6)
-* input, 8-bit:                          Font File Format.    (line  51)
-* input, standard, reading from ('rd'):  I/O.                 (line  89)
-* inserting horizontal space ('\h'):     Page Motions.        (line 103)
-* installation:                          Installation.        (line   5)
-* interactive use of 'gtroff':           Debugging.           (line  87)
-* intermediate output:                   gtroff Output.       (line  16)
-* interpolating registers ('\n'):        Interpolating Registers.
-                                                              (line   6)
-* interpolation of strings ('\*'):       Strings.             (line  19)
-* interrupted line:                      Line Control.        (line  36)
-* interrupted line register ('.int'):    Line Control.        (line  81)
-* interrupted lines and input line traps ('itc'): Input Line Traps.
-                                                              (line  24)
-* introduction:                          Introduction.        (line   6)
-* invalid characters for 'trf' request:  I/O.                 (line  73)
-* invalid input characters:              Identifiers.         (line  15)
-* invocation examples:                   Invocation Examples. (line   6)
-* invoking 'gchem':                      Invoking gchem.      (line   6)
-* invoking 'geqn':                       Invoking geqn.       (line   6)
-* invoking 'ggrn':                       Invoking ggrn.       (line   6)
-* invoking 'gpic':                       Invoking gpic.       (line   6)
-* invoking 'grefer':                     Invoking grefer.     (line   6)
-* invoking 'grodvi':                     Invoking grodvi.     (line   6)
-* invoking 'groff':                      Invoking groff.      (line   6)
-* invoking 'grohtml':                    Invoking grohtml.    (line   6)
-* invoking 'grolbp':                     Invoking grolbp.     (line   6)
-* invoking 'grolj4':                     Invoking grolj4.     (line   6)
-* invoking 'gropdf':                     Invoking gropdf.     (line   6)
-* invoking 'grops':                      Invoking grops.      (line   6)
-* invoking 'grotty':                     Invoking grotty.     (line   6)
-* invoking 'gsoelim':                    Invoking gsoelim.    (line   6)
-* invoking 'gtbl':                       Invoking gtbl.       (line   6)
-* invoking 'gxditview':                  Invoking gxditview.  (line   6)
-* invoking 'preconv':                    Invoking preconv.    (line   6)
-* ISO 6249 SGR:                          Invoking grotty.     (line  50)
-* ISO 8859-1 (latin-1), input encoding:  Input Encodings.     (line  14)
-* ISO 8859-1 (latin-1), output encoding: Groff Options.       (line 254)
-* ISO 8859-15 (latin-9, latin-0), input encoding: Input Encodings.
-                                                              (line  28)
-* ISO 8859-2 (latin-2), input encoding:  Input Encodings.     (line  18)
-* ISO 8859-9 (latin-2), input encoding:  Input Encodings.     (line  23)
-* italic correction ('\/'):              Ligatures and Kerning.
-                                                              (line  80)
-* italic fonts ['man']:                  Man font macros.     (line  52)
-* italic glyph, correction after roman glyph ('\,'): Ligatures and Kerning.
-                                                              (line  91)
-* italic glyph, correction before roman glyph ('\/'): Ligatures and Kerning.
-                                                              (line  80)
-* justifying text:                       Manipulating Filling and Adjusting.
-                                                              (line   6)
-* justifying text ('rj'):                Manipulating Filling and Adjusting.
-                                                              (line 250)
-* keep:                                  Displays.            (line  18)
-* keep, floating:                        Displays.            (line  23)
-* keeps ['ms']:                          ms Displays and Keeps.
-                                                              (line   6)
-* keeps, and footnotes ['ms']:           ms Footnotes.        (line  24)
-* kerning and ligatures:                 Ligatures and Kerning.
-                                                              (line   6)
-* kerning enabled register ('.kern'):    Ligatures and Kerning.
-                                                              (line  42)
-* kerning, activating ('kern'):          Ligatures and Kerning.
-                                                              (line  42)
-* kerning, track:                        Ligatures and Kerning.
-                                                              (line  53)
-* landscape page orientation:            Paper Size.          (line   6)
-* last glyph, dimensions ('.w', '.cht', '.cdp', '.csk'): Environments.
-                                                              (line  95)
-* last-requested point size registers ('.psr', '.sr'): Fractional Type Sizes.
-                                                              (line  45)
-* latin-1 (ISO 8859-1), input encoding:  Input Encodings.     (line  14)
-* latin-1 (ISO 8859-1), output encoding: Groff Options.       (line 254)
-* latin-2 (ISO 8859-2), input encoding:  Input Encodings.     (line  18)
-* latin-2 (ISO 8859-9), input encoding:  Input Encodings.     (line  23)
-* latin-9 (latin-0, ISO 8859-15), input encoding: Input Encodings.
-                                                              (line  28)
-* layout, line:                          Line Layout.         (line   6)
-* layout, page:                          Page Layout.         (line   6)
-* 'lc' request, and glyph definitions:   Using Symbols.       (line 326)
-* leader character:                      Leaders.             (line  12)
-* leader character, and translations:    Character Translations.
-                                                              (line 169)
-* leader character, non-interpreted ('\a'): Leaders.          (line  18)
-* leader repetition character ('lc'):    Leaders.             (line  23)
-* leaders:                               Leaders.             (line   6)
-* leading:                               Sizes.               (line  17)
-* leading spaces:                        Filling and Adjusting.
-                                                              (line  10)
-* leading spaces macro ('lsm'):          Implicit Line Breaks.
-                                                              (line  15)
-* leading spaces macro ('lsm') <1>:      Leading Spaces Traps.
-                                                              (line   9)
-* leading spaces traps:                  Leading Spaces Traps.
-                                                              (line   6)
-* leading spaces with 'ds':              Strings.             (line  57)
-* left italic correction ('\,'):         Ligatures and Kerning.
-                                                              (line  91)
-* left margin ('po'):                    Line Layout.         (line  21)
-* left margin, how to move ['man']:      Man usage.           (line 106)
-* length of a string ('length'):         Strings.             (line 211)
-* length of line ('ll'):                 Line Layout.         (line  29)
-* length of page ('pl'):                 Page Layout.         (line  13)
-* length of previous line ('.n'):        Environments.        (line 110)
-* length of title line ('lt'):           Page Layout.         (line  67)
-* 'length' request, and copy-in mode:    Strings.             (line 211)
-* letters, form:                         I/O.                 (line 106)
-* level of warnings ('warn'):            Debugging.           (line 155)
-* ligature:                              Using Symbols.       (line   6)
-* ligatures and kerning:                 Ligatures and Kerning.
-                                                              (line   6)
-* ligatures enabled register ('.lg'):    Ligatures and Kerning.
-                                                              (line  24)
-* ligatures, activating ('lg'):          Ligatures and Kerning.
-                                                              (line  24)
-* limitations of '\b' escape:            Drawing Requests.    (line 239)
-* line break:                            Basics.              (line  48)
-* line break <1>:                        Implicit Line Breaks.
-                                                              (line   6)
-* line break <2>:                        Manipulating Filling and Adjusting.
-                                                              (line   6)
-* line break ('br'):                     Basics.              (line 118)
-* line breaks, with vertical space ['man']: Man usage.        (line 120)
-* line breaks, without vertical space ['man']: Man usage.     (line 124)
-* line control:                          Line Control.        (line   6)
-* line dimensions:                       Line Layout.         (line   6)
-* line drawing glyph:                    Drawing Requests.    (line  28)
-* line drawing glyph <1>:                Drawing Requests.    (line  50)
-* line indentation ('in'):               Line Layout.         (line  25)
-* line layout:                           Line Layout.         (line   6)
-* line length ('ll'):                    Line Layout.         (line  29)
-* line length register ('.l'):           Line Layout.         (line 158)
-* line length, previous ('.n'):          Environments.        (line 110)
-* line number, input, register ('.c', 'c.'): Built-in Registers.
-                                                              (line  77)
-* line number, output, register ('ln'):  Built-in Registers.  (line  82)
-* line numbers, printing ('nm'):         Miscellaneous.       (line  10)
-* line space, extra post-vertical ('\x'): Changing Type Sizes.
-                                                              (line 118)
-* line space, extra pre-vertical ('\x'): Changing Type Sizes. (line 109)
-* line spacing register ('.L'):          Manipulating Spacing.
-                                                              (line  75)
-* line spacing, post-vertical ('pvs'):   Changing Type Sizes. (line 122)
-* line thickness ('\D't ...''):          Drawing Requests.    (line 206)
-* line, blank:                           Implicit Line Breaks.
-                                                              (line  10)
-* line, drawing ('\D'l ...''):           Drawing Requests.    (line  80)
-* line, empty ('sp'):                    Basics.              (line  93)
-* line, horizontal, drawing ('\l'):      Drawing Requests.    (line  17)
-* line, implicit breaks:                 Implicit Line Breaks.
-                                                              (line   6)
-* line, input, continuation ('\'):       Line Control.        (line  36)
-* line, input, horizontal position, register ('hp'): Page Motions.
-                                                              (line 209)
-* line, input, horizontal position, saving ('\k'): Page Motions.
-                                                              (line 203)
-* line, interrupted:                     Line Control.        (line  36)
-* line, output, continuation ('\c'):     Line Control.        (line  36)
-* line, output, horizontal position, register ('.k'): Page Motions.
-                                                              (line 212)
-* line, vertical, drawing ('\L'):        Drawing Requests.    (line  50)
-* line-tabs mode:                        Tabs and Fields.     (line 138)
-* lines, blank, disabling:               Manipulating Spacing.
-                                                              (line 123)
-* lines, centering ('ce'):               Basics.              (line 105)
-* lines, centering ('ce') <1>:           Manipulating Filling and Adjusting.
-                                                              (line 204)
-* lines, consecutive hyphenated ('hlm'): Manipulating Hyphenation.
-                                                              (line  47)
-* lines, interrupted, and input line traps ('itc'): Input Line Traps.
-                                                              (line  24)
-* list:                                  Displays.            (line  13)
-* list of available glyphs ('groff_char(7)' man page): Using Symbols.
-                                                              (line  76)
-* 'll' request, using '+' and '-':       Expressions.         (line  75)
-* location, vertical, page, marking ('mk'): Page Motions.     (line  11)
-* location, vertical, page, returning to marked ('rt'): Page Motions.
-                                                              (line  11)
-* logical not, limitation in expression: Expressions.         (line  27)
-* logical operators:                     Expressions.         (line  19)
-* long names:                            Implementation Differences.
-                                                              (line   9)
-* loops and conditionals:                Conditionals and Loops.
-                                                              (line   6)
-* 'lq' glyph, and 'lq' string ['man']:   Predefined man strings.
-                                                              (line  22)
-* 'ls' request, alternative to ('pvs'):  Changing Type Sizes. (line 137)
-* 'lt' request, using '+' and '-':       Expressions.         (line  75)
-* 'm' unit:                              Measurements.        (line  50)
-* 'M' unit:                              Measurements.        (line  62)
-* machine unit ('u'):                    Measurements.        (line   6)
-* macro arguments:                       Request and Macro Arguments.
-                                                              (line   6)
-* macro arguments, and compatibility mode: Gtroff Internals.  (line  91)
-* macro arguments, and tabs:             Request and Macro Arguments.
-                                                              (line   6)
-* macro basics:                          Basics.              (line   6)
-* macro directories:                     Macro Directories.   (line   6)
-* macro files, searching:                Macro Directories.   (line  11)
-* macro name register ('\$0'):           Parameters.          (line  71)
-* macro names, starting with '[' or ']', and 'refer': Identifiers.
-                                                              (line  46)
-* macro packages:                        Macro Package Intro. (line   6)
-* macro packages <1>:                    Macro Packages.      (line   6)
-* macro packages, structuring the source code: Requests.      (line  14)
-* macro, appending ('am'):               Writing Macros.      (line 116)
-* macro, arguments ('\$'):               Parameters.          (line  21)
-* macro, creating alias ('als'):         Strings.             (line 229)
-* macro, end-of-input ('em'):            End-of-input Traps.  (line   7)
-* macro, removing ('rm'):                Strings.             (line 224)
-* macro, removing alias ('rm'):          Strings.             (line 263)
-* macro, renaming ('rn'):                Strings.             (line 221)
-* macros:                                Macros.              (line   6)
-* macros for manual pages ['man']:       Man usage.           (line   6)
-* macros, recursive:                     while.               (line  38)
-* macros, searching:                     Macro Directories.   (line   6)
-* macros, shared name space with strings and diversions: Strings.
-                                                              (line  92)
-* macros, tutorial for users:            Tutorial for Macro Users.
-                                                              (line   6)
-* macros, writing:                       Writing Macros.      (line   6)
-* magnification of a font ('fzoom'):     Changing Fonts.      (line  71)
-* major quotes:                          Displays.            (line  10)
-* major version number register ('.x'):  Built-in Registers.  (line  88)
-* 'man' macros:                          Man usage.           (line   6)
-* 'man' macros, bold face:               Man font macros.     (line  14)
-* 'man' macros, custom headers and footers: Optional man extensions.
-                                                              (line  12)
-* 'man' macros, default indentation:     Miscellaneous man macros.
-                                                              (line   6)
-* 'man' macros, empty space before a paragraph: Miscellaneous man macros.
-                                                              (line  15)
-* 'man' macros, hanging indentation:     Man usage.           (line  98)
-* 'man' macros, how to set fonts:        Man font macros.     (line   6)
-* 'man' macros, italic fonts:            Man font macros.     (line  52)
-* 'man' macros, line breaks with vertical space: Man usage.   (line 120)
-* 'man' macros, line breaks without vertical space: Man usage.
-                                                              (line 124)
-* 'man' macros, moving left margin:      Man usage.           (line 106)
-* 'man' macros, resetting default indentation: Man usage.     (line 127)
-* 'man' macros, tab stops:               Miscellaneous man macros.
-                                                              (line  10)
-* 'man' macros, Ultrix-specific:         Optional man extensions.
-                                                              (line  30)
-* man pages:                             man.                 (line   6)
-* manipulating filling and adjusting:    Manipulating Filling and Adjusting.
-                                                              (line   6)
-* manipulating hyphenation:              Manipulating Hyphenation.
-                                                              (line   6)
-* manipulating spacing:                  Manipulating Spacing.
-                                                              (line   6)
-* 'man'macros, BSD compatibility:        Miscellaneous man macros.
-                                                              (line  27)
-* 'man'macros, BSD compatibility <1>:    Miscellaneous man macros.
-                                                              (line  44)
-* manual pages:                          man.                 (line   6)
-* margin for hyphenation ('hym'):        Manipulating Hyphenation.
-                                                              (line 211)
-* margin glyph ('mc'):                   Miscellaneous.       (line  75)
-* margin, bottom:                        Page Layout.         (line  20)
-* margin, left ('po'):                   Line Layout.         (line  21)
-* margin, top:                           Page Layout.         (line  20)
-* mark, high-water, register ('.h'):     Diversions.          (line  76)
-* marking vertical page location ('mk'): Page Motions.        (line  11)
-* MathML:                                grohtml specific registers and strings.
-                                                              (line  23)
-* maximum values of Roman numerals:      Assigning Formats.   (line  59)
-* 'mdoc' macros:                         mdoc.                (line   6)
-* 'me' macro package:                    me.                  (line   6)
-* measurement unit:                      Measurements.        (line   6)
-* measurements:                          Measurements.        (line   6)
-* measurements, specifying safely:       Default Units.       (line  25)
-* minimum values of Roman numerals:      Assigning Formats.   (line  59)
-* minor version number register ('.y'):  Built-in Registers.  (line  92)
-* minutes, current time ('minutes'):     Built-in Registers.  (line  37)
-* 'mm' macro package:                    mm.                  (line   6)
-* mode for constant glyph space ('cs'):  Artificial Fonts.    (line 126)
-* mode, compatibility:                   Implementation Differences.
-                                                              (line   6)
-* mode, compatibility, and parameters:   Gtroff Internals.    (line  91)
-* mode, copy:                            Copy-in Mode.        (line   6)
-* mode, copy-in:                         Copy-in Mode.        (line   6)
-* mode, copy-in, and 'cf' request:       I/O.                 (line  50)
-* mode, copy-in, and 'device' request:   Postprocessor Access.
-                                                              (line  19)
-* mode, copy-in, and 'ig' request:       Comments.            (line  85)
-* mode, copy-in, and 'length' request:   Strings.             (line 211)
-* mode, copy-in, and macro arguments:    Parameters.          (line  21)
-* mode, copy-in, and 'output' request:   Diversions.          (line 179)
-* mode, copy-in, and 'tm' request:       Debugging.           (line  30)
-* mode, copy-in, and 'tm1' request:      Debugging.           (line  30)
-* mode, copy-in, and 'tmc' request:      Debugging.           (line  30)
-* mode, copy-in, and 'trf' request:      I/O.                 (line  50)
-* mode, copy-in, and 'write' request:    I/O.                 (line 212)
-* mode, copy-in, and 'writec' request:   I/O.                 (line 212)
-* mode, copy-in, and 'writem' request:   I/O.                 (line 225)
-* mode, copy-in, and '\!':               Diversions.          (line 148)
-* mode, copy-in, and '\?':               Operators in Conditionals.
-                                                              (line  55)
-* mode, copy-in, and '\?' <1>:           Diversions.          (line 148)
-* mode, copy-in, and '\a':               Leaders.             (line  18)
-* mode, copy-in, and '\E':               Character Translations.
-                                                              (line  81)
-* mode, copy-in, and '\t':               Tabs and Fields.     (line  10)
-* mode, copy-in, and '\V':               I/O.                 (line 249)
-* mode, fill:                            Implicit Line Breaks.
-                                                              (line  15)
-* mode, fill <1>:                        Manipulating Filling and Adjusting.
-                                                              (line 156)
-* mode, fill <2>:                        Warnings.            (line  23)
-* mode, fill ('fi'):                     Manipulating Filling and Adjusting.
-                                                              (line  29)
-* mode, fill, and '\c':                  Line Control.        (line  69)
-* mode, line-tabs:                       Tabs and Fields.     (line 138)
-* mode, no-fill ('nf'):                  Manipulating Filling and Adjusting.
-                                                              (line  39)
-* mode, no-fill, and '\c':               Line Control.        (line  60)
-* mode, no-space ('ns'):                 Manipulating Spacing.
-                                                              (line 123)
-* mode, nroff:                           Troff and Nroff Mode.
-                                                              (line   6)
-* mode, safer:                           Groff Options.       (line 214)
-* mode, safer <1>:                       Macro Directories.   (line  21)
-* mode, safer <2>:                       Built-in Registers.  (line  23)
-* mode, safer <3>:                       I/O.                 (line  32)
-* mode, safer <4>:                       I/O.                 (line 147)
-* mode, safer <5>:                       I/O.                 (line 168)
-* mode, safer <6>:                       I/O.                 (line 206)
-* mode, troff:                           Troff and Nroff Mode.
-                                                              (line   6)
-* mode, unsafe:                          Groff Options.       (line 292)
-* mode, unsafe <1>:                      Macro Directories.   (line  21)
-* mode, unsafe <2>:                      Built-in Registers.  (line  23)
-* mode, unsafe <3>:                      I/O.                 (line  32)
-* mode, unsafe <4>:                      I/O.                 (line 147)
-* mode, unsafe <5>:                      I/O.                 (line 168)
-* mode, unsafe <6>:                      I/O.                 (line 206)
-* modifying requests:                    Requests.            (line  61)
-* 'mom' macro package:                   mom.                 (line   6)
-* month of the year register ('mo'):     Built-in Registers.  (line  51)
-* motion operators:                      Expressions.         (line  65)
-* motion, horizontal ('\h'):             Page Motions.        (line 103)
-* motion, vertical ('\v'):               Page Motions.        (line  78)
-* motions, page:                         Page Motions.        (line   6)
-* mounting font ('fp'):                  Font Positions.      (line  13)
-* 'ms' macros:                           ms.                  (line   6)
-* 'ms' macros, accent marks:             ms Strings and Special Characters.
-                                                              (line   6)
-* 'ms' macros, body text:                ms Body Text.        (line   6)
-* 'ms' macros, cover page:               ms Cover Page Macros.
-                                                              (line   6)
-* 'ms' macros, creating table of contents: ms TOC.            (line   6)
-* 'ms' macros, differences from AT&T:    Differences from AT&T ms.
-                                                              (line   6)
-* 'ms' macros, displays:                 ms Displays and Keeps.
-                                                              (line   6)
-* 'ms' macros, document control registers: ms Document Control Registers.
-                                                              (line   6)
-* 'ms' macros, equations:                ms Insertions.       (line   6)
-* 'ms' macros, figures:                  ms Insertions.       (line   6)
-* 'ms' macros, footers:                  ms Headers and Footers.
-                                                              (line   6)
-* 'ms' macros, footnotes:                ms Footnotes.        (line   6)
-* 'ms' macros, general structure:        General ms Structure.
-                                                              (line   6)
-* 'ms' macros, headers:                  ms Headers and Footers.
-                                                              (line   6)
-* 'ms' macros, headings:                 Headings in ms.      (line   6)
-* 'ms' macros, highlighting:             Highlighting in ms.  (line   6)
-* 'ms' macros, keeps:                    ms Displays and Keeps.
-                                                              (line   6)
-* 'ms' macros, lists:                    Lists in ms.         (line   6)
-* 'ms' macros, margins:                  ms Margins.          (line   6)
-* 'ms' macros, multiple columns:         ms Multiple Columns. (line   6)
-* 'ms' macros, naming conventions:       Naming Conventions.  (line   6)
-* 'ms' macros, nested lists:             Lists in ms.         (line 122)
-* 'ms' macros, page layout:              ms Page Layout.      (line   6)
-* 'ms' macros, paragraph handling:       Paragraphs in ms.    (line   6)
-* 'ms' macros, references:               ms Insertions.       (line   6)
-* 'ms' macros, special characters:       ms Strings and Special Characters.
-                                                              (line   6)
-* 'ms' macros, strings:                  ms Strings and Special Characters.
-                                                              (line   6)
-* 'ms' macros, tables:                   ms Insertions.       (line   6)
-* multi-file documents:                  Debugging.           (line  10)
-* multi-line strings:                    Strings.             (line  63)
-* multi-page table, example markup ['ms']: Example multi-page table.
-                                                              (line   6)
-* multiple columns ['ms']:               ms Multiple Columns. (line   6)
-* 'n' unit:                              Measurements.        (line  55)
-* name space, common, of macros, diversions, and strings: Strings.
-                                                              (line  92)
-* name, background color, register ('.M'): Colors.            (line  94)
-* name, drawing color, register ('.m'):  Colors.              (line  67)
-* name, fill color, register ('.M'):     Colors.              (line  94)
-* named character ('\C'):                Using Symbols.       (line 185)
-* names, long:                           Implementation Differences.
-                                                              (line   9)
-* naming conventions, 'ms' macros:       Naming Conventions.  (line   6)
-* 'ne' request, and the '.trunc' register: Page Location Traps.
-                                                              (line 131)
-* 'ne' request, comparison with 'sv':    Page Control.        (line  53)
-* negating register values:              Setting Registers.   (line  78)
-* nested assignments:                    Interpolating Registers.
-                                                              (line  11)
-* nested diversions:                     Diversions.          (line  69)
-* nested lists ['ms']:                   Lists in ms.         (line 122)
-* new page ('bp'):                       Basics.              (line  91)
-* new page ('bp') <1>:                   Page Control.        (line  10)
-* newline character:                     Identifiers.         (line  10)
-* newline character <1>:                 Escapes.             (line  69)
-* newline character, and translations:   Character Translations.
-                                                              (line 169)
-* newline character, in strings, escaping: Strings.           (line  63)
-* newline, final, stripping in diversions: Strings.           (line 157)
-* next file, processing ('nx'):          I/O.                 (line  84)
-* next free font position register ('.fp'): Font Positions.   (line  30)
-* 'nf' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'nl' register, and '.d':               Diversions.          (line  69)
-* 'nl' register, difference to '.h':     Diversions.          (line  88)
-* 'nm' request, using '+' and '-':       Expressions.         (line  75)
-* no-break control character ('''):      Requests.            (line   6)
-* no-break control character, changing ('c2'): Character Translations.
-                                                              (line   6)
-* no-fill mode ('nf'):                   Manipulating Filling and Adjusting.
-                                                              (line  39)
-* no-fill mode, and '\c':                Line Control.        (line  60)
-* no-space mode ('ns'):                  Manipulating Spacing.
-                                                              (line 123)
-* node, output:                          Gtroff Internals.    (line   6)
-* 'nr' request, and warnings:            Warnings.            (line  61)
-* 'nr' request, using '+' and '-':       Expressions.         (line  75)
-* nroff mode:                            Troff and Nroff Mode.
-                                                              (line   6)
-* 'nroff', the program:                  History.             (line  22)
-* number of arguments register ('.$'):   Parameters.          (line  10)
-* number of registers register ('.R'):   Built-in Registers.  (line  18)
-* number register, creating alias ('aln'): Setting Registers. (line 112)
-* number register, removing ('rr'):      Setting Registers.   (line 104)
-* number register, renaming ('rnn'):     Setting Registers.   (line 108)
-* number registers, dumping ('pnr'):     Debugging.           (line  77)
-* number, input line, setting ('lf'):    Debugging.           (line  10)
-* number, page ('pn'):                   Page Layout.         (line  84)
-* numbered glyph ('\N'):                 Character Translations.
-                                                              (line 160)
-* numbered glyph ('\N') <1>:             Using Symbols.       (line 201)
-* numbered list, example markup ['ms']:  Lists in ms.         (line  41)
-* numbers, and delimiters:               Escapes.             (line  65)
-* numbers, line, printing ('nm'):        Miscellaneous.       (line  10)
-* numerals, Roman:                       Assigning Formats.   (line  32)
-* numeric expression, valid:             Expressions.         (line  83)
-* offset, page ('po'):                   Line Layout.         (line  21)
-* 'open' request, and safer mode:        Groff Options.       (line 214)
-* 'opena' request, and safer mode:       Groff Options.       (line 214)
-* opening file ('open'):                 I/O.                 (line 200)
-* operator, scaling:                     Expressions.         (line  54)
-* operators, arithmetic:                 Expressions.         (line   8)
-* operators, as delimiters:              Escapes.             (line  67)
-* operators, comparison:                 Expressions.         (line  15)
-* operators, extremum ('>?', '<?'):      Expressions.         (line  44)
-* operators, logical:                    Expressions.         (line  19)
-* operators, motion:                     Expressions.         (line  65)
-* operators, unary:                      Expressions.         (line  21)
-* optical size of a font:                Changing Fonts.      (line  71)
-* options:                               Groff Options.       (line   6)
-* order of evaluation in expressions:    Expressions.         (line  59)
-* orientation, landscape:                Paper Size.          (line   6)
-* orphan lines, preventing with 'ne':    Page Control.        (line  33)
-* 'os' request, and no-space mode:       Page Control.        (line  63)
-* output and input requests:             I/O.                 (line   6)
-* output device name string register ('.T'): Groff Options.   (line 281)
-* output device name string register ('.T') <1>: Built-in Registers.
-                                                              (line 127)
-* output device usage number register ('.T'): Groff Options.  (line 281)
-* output devices:                        Output device intro. (line   6)
-* output devices <1>:                    Output Devices.      (line   6)
-* output encoding, ASCII:                Groff Options.       (line 250)
-* output encoding, cp1047:               Groff Options.       (line 264)
-* output encoding, EBCDIC:               Groff Options.       (line 264)
-* output encoding, latin-1 (ISO 8859-1): Groff Options.       (line 254)
-* output encoding, utf-8:                Groff Options.       (line 259)
-* output glyphs, and input characters,compatibility with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* output line number register ('ln'):    Built-in Registers.  (line  82)
-* output line, continuation ('\c'):      Line Control.        (line  36)
-* output line, horizontal position, register ('.k'): Page Motions.
-                                                              (line 212)
-* output node:                           Gtroff Internals.    (line   6)
-* 'output' request, and copy-in mode:    Diversions.          (line 179)
-* 'output' request, and '\!':            Diversions.          (line 179)
-* output, flush ('fl'):                  Debugging.           (line  87)
-* output, 'gtroff':                      gtroff Output.       (line   6)
-* output, intermediate:                  gtroff Output.       (line  16)
-* output, suppressing ('\O'):            Suppressing output.  (line   7)
-* output, transparent ('cf', 'trf'):     I/O.                 (line  50)
-* output, transparent ('\!', '\?'):      Diversions.          (line 136)
-* output, transparent, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line 106)
-* output, troff:                         gtroff Output.       (line  16)
-* overlapping characters:                Using Symbols.       (line 265)
-* overstriking glyphs ('\o'):            Page Motions.        (line 216)
-* 'p' unit:                              Measurements.        (line  30)
-* 'P' unit:                              Measurements.        (line  34)
-* packages, macros:                      Macro Packages.      (line   6)
-* padding character, for fields ('fc'):  Fields.              (line   6)
-* page break, conditional ('ne'):        Page Control.        (line  33)
-* page control:                          Page Control.        (line   6)
-* page ejecting register ('.pe'):        Page Location Traps. (line 143)
-* page footers:                          Page Location Traps. (line  38)
-* page headers:                          Page Location Traps. (line  38)
-* page layout:                           Page Layout.         (line   6)
-* page layout ['ms']:                    ms Page Layout.      (line   6)
-* page length ('pl'):                    Page Layout.         (line  13)
-* page length register ('.p'):           Page Layout.         (line  17)
-* page location traps:                   Page Location Traps. (line   6)
-* page location, vertical, marking ('mk'): Page Motions.      (line  11)
-* page location, vertical, returning to marked ('rt'): Page Motions.
-                                                              (line  11)
-* page motions:                          Page Motions.        (line   6)
-* page number ('pn'):                    Page Layout.         (line  84)
-* page number character ('%'):           Page Layout.         (line  35)
-* page number character, changing ('pc'): Page Layout.        (line  94)
-* page number register ('%'):            Page Control.        (line  27)
-* page offset ('po'):                    Line Layout.         (line  21)
-* page orientation, landscape:           Paper Size.          (line   6)
-* page, new ('bp'):                      Page Control.        (line  10)
-* paper formats:                         Paper Formats.       (line   6)
-* paper size:                            Paper Size.          (line   6)
-* paragraphs:                            Paragraphs.          (line   6)
-* parameters:                            Parameters.          (line   6)
-* parameters, and compatibility mode:    Gtroff Internals.    (line  91)
-* parentheses:                           Expressions.         (line  59)
-* path, for font files:                  Font Directories.    (line  14)
-* path, for tmac files:                  Macro Directories.   (line  11)
-* patterns for hyphenation ('hpf'):      Manipulating Hyphenation.
-                                                              (line 116)
-* PDF, embedding:                        Embedding PDF.       (line   6)
-* 'pi' request, and 'groff':             I/O.                 (line 159)
-* 'pi' request, and safer mode:          Groff Options.       (line 214)
-* 'pic', the program:                    gpic.                (line   6)
-* pica unit ('P'):                       Measurements.        (line  34)
-* pile, glyph ('\b'):                    Drawing Requests.    (line 232)
-* 'pl' request, using '+' and '-':       Expressions.         (line  75)
-* planting a trap:                       Traps.               (line  11)
-* platform-specific directory:           Macro Directories.   (line  26)
-* 'pn' request, using '+' and '-':       Expressions.         (line  75)
-* PNG image generation from PostScript:  DESC File Format.    (line  29)
-* 'po' request, using '+' and '-':       Expressions.         (line  75)
-* point size registers ('.s', '.ps'):    Changing Type Sizes. (line  20)
-* point size registers, last-requested ('.psr', '.sr'): Fractional Type Sizes.
-                                                              (line  45)
-* point sizes, changing ('ps', '\s'):    Changing Type Sizes. (line  11)
-* point sizes, fractional:               Fractional Type Sizes.
-                                                              (line   6)
-* point sizes, fractional <1>:           Implementation Differences.
-                                                              (line  76)
-* point unit ('p'):                      Measurements.        (line  30)
-* polygon, drawing ('\D'p ...''):        Drawing Requests.    (line 158)
-* polygon, solid, drawing ('\D'P ...''): Drawing Requests.    (line 167)
-* position of lowest text line ('.h'):   Diversions.          (line  76)
-* position, absolute, operator ('|'):    Expressions.         (line  70)
-* position, horizontal input line, saving ('\k'): Page Motions.
-                                                              (line 203)
-* position, horizontal, in input line, register ('hp'): Page Motions.
-                                                              (line 209)
-* position, horizontal, in output line, register ('.k'): Page Motions.
-                                                              (line 212)
-* position, vertical, current ('nl'):    Page Control.        (line  67)
-* position, vertical, in diversion, register ('.d'): Diversions.
-                                                              (line  69)
-* positions, font:                       Font Positions.      (line   6)
-* post-vertical line spacing:            Changing Type Sizes. (line 122)
-* post-vertical line spacing register ('.pvs'): Changing Type Sizes.
-                                                              (line 137)
-* post-vertical line spacing, changing ('pvs'): Changing Type Sizes.
-                                                              (line 137)
-* postprocessor access:                  Postprocessor Access.
-                                                              (line   6)
-* postprocessors:                        Output device intro. (line   6)
-* PostScript fonts:                      Font Families.       (line  11)
-* PostScript, bounding box:              Miscellaneous.       (line 139)
-* PostScript, embedding:                 Embedding PostScript.
-                                                              (line   6)
-* PostScript, PNG image generation:      DESC File Format.    (line  29)
-* 'preconv', invoking:                   Invoking preconv.    (line   5)
-* 'preconv', the program:                preconv.             (line   6)
-* prefix, for commands:                  Environment.         (line  14)
-* preprocessor, calling convention:      Preprocessors in man pages.
-                                                              (line   6)
-* preprocessors:                         Preprocessor Intro.  (line   6)
-* preprocessors <1>:                     Preprocessors.       (line   6)
-* previous font ('ft', '\f[]', '\fP'):   Changing Fonts.      (line  23)
-* previous line length ('.n'):           Environments.        (line 110)
-* print current page register ('.P'):    Groff Options.       (line 171)
-* printing backslash ('\\', '\e', '\E', '\[rs]'): Escapes.    (line  74)
-* printing backslash ('\\', '\e', '\E', '\[rs]') <1>: Implementation Differences.
-                                                              (line 106)
-* printing line numbers ('nm'):          Miscellaneous.       (line  10)
-* printing to stderr ('tm', 'tm1', 'tmc'): Debugging.         (line  27)
-* printing, zero-width ('\z', '\Z'):     Page Motions.        (line 220)
-* printing, zero-width ('\z', '\Z') <1>: Page Motions.        (line 224)
-* process ID of 'gtroff' register ('$$'): Built-in Registers. (line  99)
-* processing next file ('nx'):           I/O.                 (line  84)
-* properties of characters ('cflags'):   Using Symbols.       (line 237)
-* properties of glyphs ('cflags'):       Using Symbols.       (line 237)
-* 'ps' request, and constant glyph space mode: Artificial Fonts.
-                                                              (line 126)
-* 'ps' request, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  76)
-* 'ps' request, using '+' and '-':       Expressions.         (line  75)
-* 'ps' request, with fractional type sizes: Fractional Type Sizes.
-                                                              (line   6)
-* 'pso' request, and safer mode:         Groff Options.       (line 214)
-* 'pvs' request, using '+' and '-':      Expressions.         (line  75)
-* quotes, major:                         Displays.            (line  10)
-* quotes, trailing:                      Strings.             (line  57)
-* 'radicalex' glyph, and 'cflags':       Using Symbols.       (line 265)
-* ragged-left:                           Manipulating Filling and Adjusting.
-                                                              (line  63)
-* ragged-right:                          Manipulating Filling and Adjusting.
-                                                              (line  59)
-* 'rc' request, and glyph definitions:   Using Symbols.       (line 326)
-* read-only register, changing format:   Assigning Formats.   (line  68)
-* reading from standard input ('rd'):    I/O.                 (line  89)
-* recursive macros:                      while.               (line  38)
-* 'refer', and macro names starting with '[' or ']': Identifiers.
-                                                              (line  46)
-* 'refer', the program:                  grefer.              (line   6)
-* reference, 'gtroff':                   gtroff Reference.    (line   6)
-* references ['ms']:                     ms Insertions.       (line   6)
-* register, creating alias ('aln'):      Setting Registers.   (line 112)
-* register, format ('\g'):               Assigning Formats.   (line  75)
-* register, removing ('rr'):             Setting Registers.   (line 104)
-* register, renaming ('rnn'):            Setting Registers.   (line 108)
-* registers:                             Registers.           (line   6)
-* registers specific to 'grohtml':       grohtml specific registers and strings.
-                                                              (line   6)
-* registers, built-in:                   Built-in Registers.  (line   6)
-* registers, interpolating ('\n'):       Interpolating Registers.
-                                                              (line   6)
-* registers, number of, register ('.R'): Built-in Registers.  (line  18)
-* registers, setting ('nr', '\R'):       Setting Registers.   (line   6)
-* removing alias, for diversion ('rm'):  Strings.             (line 263)
-* removing alias, for macro ('rm'):      Strings.             (line 263)
-* removing alias, for string ('rm'):     Strings.             (line 263)
-* removing diversion ('rm'):             Strings.             (line 224)
-* removing glyph definition ('rchar', 'rfschar'): Using Symbols.
-                                                              (line 382)
-* removing macro ('rm'):                 Strings.             (line 224)
-* removing number register ('rr'):       Setting Registers.   (line 104)
-* removing request ('rm'):               Strings.             (line 224)
-* removing string ('rm'):                Strings.             (line 224)
-* renaming diversion ('rn'):             Strings.             (line 221)
-* renaming macro ('rn'):                 Strings.             (line 221)
-* renaming number register ('rnn'):      Setting Registers.   (line 108)
-* renaming request ('rn'):               Strings.             (line 221)
-* renaming string ('rn'):                Strings.             (line 221)
-* request arguments:                     Request and Macro Arguments.
-                                                              (line   6)
-* request arguments, and compatibility mode: Gtroff Internals.
-                                                              (line  91)
-* request, removing ('rm'):              Strings.             (line 224)
-* request, renaming ('rn'):              Strings.             (line 221)
-* request, undefined:                    Comments.            (line  25)
-* requests:                              Requests.            (line   6)
-* requests for drawing:                  Drawing Requests.    (line   6)
-* requests for input and output:         I/O.                 (line   6)
-* requests, modifying:                   Requests.            (line  61)
-* resolution, device:                    DESC File Format.    (line  85)
-* resolution, horizontal:                DESC File Format.    (line  25)
-* resolution, horizontal, register ('.H'): Built-in Registers.
-                                                              (line  15)
-* resolution, vertical:                  DESC File Format.    (line 135)
-* resolution, vertical, register ('.V'): Built-in Registers.  (line  28)
-* returning to marked vertical page location ('rt'): Page Motions.
-                                                              (line  11)
-* revision number register ('.Y'):       Built-in Registers.  (line  96)
-* 'rf', the program:                     History.             (line   6)
-* right-justifying ('rj'):               Manipulating Filling and Adjusting.
-                                                              (line 250)
-* 'rj' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'rn' glyph, and 'cflags':              Using Symbols.       (line 265)
-* 'roff', the program:                   History.             (line  17)
-* roman glyph, correction after italic glyph ('\/'): Ligatures and Kerning.
-                                                              (line  80)
-* roman glyph, correction before italic glyph ('\,'): Ligatures and Kerning.
-                                                              (line  91)
-* Roman numerals:                        Assigning Formats.   (line  32)
-* Roman numerals, maximum and minimum:   Assigning Formats.   (line  59)
-* 'rq' glyph, and 'rq' string ['man']:   Predefined man strings.
-                                                              (line  22)
-* 'rq' glyph, at end of sentence:        Sentences.           (line  18)
-* 'rq' glyph, at end of sentence <1>:    Using Symbols.       (line 275)
-* 'rt' request, using '+' and '-':       Expressions.         (line  75)
-* 'ru' glyph, and 'cflags':              Using Symbols.       (line 265)
-* 'RUNOFF', the program:                 History.             (line   6)
-* 's' unit:                              Measurements.        (line  40)
-* 's' unit <1>:                          Fractional Type Sizes.
-                                                              (line   6)
-* safer mode:                            Groff Options.       (line 214)
-* safer mode <1>:                        Macro Directories.   (line  21)
-* safer mode <2>:                        Built-in Registers.  (line  23)
-* safer mode <3>:                        I/O.                 (line  32)
-* safer mode <4>:                        I/O.                 (line 147)
-* safer mode <5>:                        I/O.                 (line 168)
-* safer mode <6>:                        I/O.                 (line 206)
-* saving horizontal input line position ('\k'): Page Motions. (line 203)
-* scaling indicator:                     Measurements.        (line   6)
-* scaling operator:                      Expressions.         (line  54)
-* searching fonts:                       Font Directories.    (line   6)
-* searching macro files:                 Macro Directories.   (line  11)
-* searching macros:                      Macro Directories.   (line   6)
-* seconds, current time ('seconds'):     Built-in Registers.  (line  31)
-* sentence space:                        Sentences.           (line  12)
-* sentence space size register ('.sss'): Manipulating Filling and Adjusting.
-                                                              (line 151)
-* sentences:                             Sentences.           (line   6)
-* setting diversion trap ('dt'):         Diversion Traps.     (line   7)
-* setting end-of-input trap ('em'):      End-of-input Traps.  (line   7)
-* setting input line number ('lf'):      Debugging.           (line  10)
-* setting input line trap ('it'):        Input Line Traps.    (line   8)
-* setting registers ('nr', '\R'):        Setting Registers.   (line   6)
-* shading filled objects ('\D'f ...''):  Drawing Requests.    (line 141)
-* 'shc' request, and translations:       Character Translations.
-                                                              (line 173)
-* site-specific directory:               Macro Directories.   (line  26)
-* site-specific directory <1>:           Font Directories.    (line  29)
-* size of sentence space register ('.sss'): Manipulating Filling and Adjusting.
-                                                              (line 151)
-* size of type:                          Sizes.               (line   6)
-* size of word space register ('.ss'):   Manipulating Filling and Adjusting.
-                                                              (line 151)
-* size, optical, of a font:              Changing Fonts.      (line  71)
-* size, paper:                           Paper Size.          (line   6)
-* sizes:                                 Sizes.               (line   6)
-* sizes, fractional:                     Fractional Type Sizes.
-                                                              (line   6)
-* sizes, fractional <1>:                 Implementation Differences.
-                                                              (line  76)
-* skew, of last glyph ('.csk'):          Environments.        (line  95)
-* slant, font, changing ('\S'):          Artificial Fonts.    (line  45)
-* 'soelim', the program:                 gsoelim.             (line   6)
-* soft hyphen character, setting ('shc'): Manipulating Hyphenation.
-                                                              (line 243)
-* soft hyphen glyph ('hy'):              Manipulating Hyphenation.
-                                                              (line 243)
-* solid circle, drawing ('\D'C ...''):   Drawing Requests.    (line 114)
-* solid ellipse, drawing ('\D'E ...''):  Drawing Requests.    (line 124)
-* solid polygon, drawing ('\D'P ...''):  Drawing Requests.    (line 167)
-* 'sp' request, and no-space mode:       Manipulating Spacing.
-                                                              (line 123)
-* 'sp' request, and traps:               Manipulating Spacing.
-                                                              (line  53)
-* 'sp' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* space between sentences:               Sentences.           (line  12)
-* space between sentences register ('.sss'): Manipulating Filling and Adjusting.
-                                                              (line 151)
-* space between words register ('.ss'):  Manipulating Filling and Adjusting.
-                                                              (line 151)
-* space character:                       Escapes.             (line  69)
-* space character, zero width ('\&'):    Requests.            (line  47)
-* space character, zero width ('\&') <1>: Ligatures and Kerning.
-                                                              (line  47)
-* space character, zero width ('\&') <2>: Drawing Requests.   (line  32)
-* space characters, in expressions:      Expressions.         (line  86)
-* space, discardable, horizontal:        Manipulating Filling and Adjusting.
-                                                              (line 183)
-* space, discarded, in traps:            Manipulating Spacing.
-                                                              (line  53)
-* space, horizontal ('\h'):              Page Motions.        (line 103)
-* space, horizontal, unformatting:       Strings.             (line 157)
-* space, unbreakable:                    Page Motions.        (line 114)
-* space, vertical, unit ('v'):           Measurements.        (line  58)
-* space, width of a digit ('\0'):        Page Motions.        (line 138)
-* spaces with 'ds':                      Strings.             (line  57)
-* spaces, in a macro argument:           Request and Macro Arguments.
-                                                              (line  10)
-* spaces, leading and trailing:          Filling and Adjusting.
-                                                              (line  10)
-* spacing:                               Basics.              (line  82)
-* spacing, manipulating:                 Manipulating Spacing.
-                                                              (line   6)
-* spacing, vertical:                     Sizes.               (line   6)
-* special characters:                    Character Translations.
-                                                              (line 160)
-* special characters <1>:                Special Characters.  (line   6)
-* special characters ['ms']:             ms Strings and Special Characters.
-                                                              (line   6)
-* special fonts:                         Using Symbols.       (line  14)
-* special fonts <1>:                     Special Fonts.       (line   6)
-* special fonts <2>:                     Font File Format.    (line  28)
-* special fonts, emboldening:            Artificial Fonts.    (line 115)
-* 'special' request, and font translations: Changing Fonts.   (line  55)
-* 'special' request, and glyph search order: Using Symbols.   (line  14)
-* spline, drawing ('\D'~ ...''):         Drawing Requests.    (line 136)
-* springing a trap:                      Traps.               (line  11)
-* 'sqrtex' glyph, and 'cflags':          Using Symbols.       (line 265)
-* stacking glyphs ('\b'):                Drawing Requests.    (line 232)
-* standard input, reading from ('rd'):   I/O.                 (line  89)
-* stderr, printing to ('tm', 'tm1', 'tmc'): Debugging.        (line  27)
-* stops, tabulator:                      Tab Stops.           (line   6)
-* string arguments:                      Strings.             (line  19)
-* string comparison:                     Operators in Conditionals.
-                                                              (line  47)
-* string expansion ('\*'):               Strings.             (line  19)
-* string interpolation ('\*'):           Strings.             (line  19)
-* string, appending ('as'):              Strings.             (line 176)
-* string, creating alias ('als'):        Strings.             (line 229)
-* string, length of ('length'):          Strings.             (line 211)
-* string, removing ('rm'):               Strings.             (line 224)
-* string, removing alias ('rm'):         Strings.             (line 263)
-* string, renaming ('rn'):               Strings.             (line 221)
-* strings:                               Strings.             (line   6)
-* strings specific to 'grohtml':         grohtml specific registers and strings.
-                                                              (line   6)
-* strings ['ms']:                        ms Strings and Special Characters.
-                                                              (line   6)
-* strings, multi-line:                   Strings.             (line  63)
-* strings, shared name space with macros and diversions: Strings.
-                                                              (line  92)
-* stripping final newline in diversions: Strings.             (line 157)
-* structuring source code of documents or macro packages: Requests.
-                                                              (line  14)
-* 'sty' request, and changing fonts:     Changing Fonts.      (line  11)
-* 'sty' request, and font positions:     Font Positions.      (line  60)
-* 'sty' request, and font translations:  Changing Fonts.      (line  55)
-* styles, font:                          Font Families.       (line   6)
-* substring ('substring'):               Strings.             (line 192)
-* suppressing output ('\O'):             Suppressing output.  (line   7)
-* 'sv' request, and no-space mode:       Page Control.        (line  63)
-* switching environments ('ev'):         Environments.        (line  39)
-* 'sy' request, and safer mode:          Groff Options.       (line 214)
-* symbol:                                Using Symbols.       (line  14)
-* symbol table, dumping ('pm'):          Debugging.           (line  66)
-* symbol, defining ('char'):             Using Symbols.       (line 326)
-* symbols, using:                        Using Symbols.       (line   6)
-* 'system()' return value register ('systat'): I/O.           (line 195)
-* tab character:                         Tab Stops.           (line   6)
-* tab character <1>:                     Escapes.             (line  69)
-* tab character, and translations:       Character Translations.
-                                                              (line 169)
-* tab character, non-interpreted ('\t'): Tabs and Fields.     (line  10)
-* tab repetition character ('tc'):       Tabs and Fields.     (line 129)
-* tab settings register ('.tabs'):       Tabs and Fields.     (line 117)
-* tab stops:                             Tab Stops.           (line   6)
-* tab stops ['man']:                     Miscellaneous man macros.
-                                                              (line  10)
-* tab stops, for TTY output devices:     Tabs and Fields.     (line 115)
-* tab, line-tabs mode:                   Tabs and Fields.     (line 138)
-* table of contents:                     Table of Contents.   (line   6)
-* table of contents <1>:                 Leaders.             (line  29)
-* table of contents, creating ['ms']:    ms TOC.              (line   6)
-* tables ['ms']:                         ms Insertions.       (line   6)
-* tabs, and fields:                      Tabs and Fields.     (line   6)
-* tabs, and macro arguments:             Request and Macro Arguments.
-                                                              (line   6)
-* tabs, before comments:                 Comments.            (line  21)
-* 'tbl', the program:                    gtbl.                (line   6)
-* Teletype:                              Invoking grotty.     (line  50)
-* terminal control sequences:            Invoking grotty.     (line  50)
-* terminal, conditional output for:      Operators in Conditionals.
-                                                              (line  14)
-* text line, position of lowest ('.h'):  Diversions.          (line  76)
-* text, 'gtroff' processing:             Text.                (line   6)
-* text, justifying:                      Manipulating Filling and Adjusting.
-                                                              (line   6)
-* text, justifying ('rj'):               Manipulating Filling and Adjusting.
-                                                              (line 250)
-* thickness of lines ('\D't ...''):      Drawing Requests.    (line 206)
-* three-part title ('tl'):               Page Layout.         (line  35)
-* 'ti' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'ti' request, using '+' and '-':       Expressions.         (line  75)
-* time, current:                         I/O.                 (line 175)
-* time, current, hours ('hours'):        Built-in Registers.  (line  41)
-* time, current, minutes ('minutes'):    Built-in Registers.  (line  37)
-* time, current, seconds ('seconds'):    Built-in Registers.  (line  31)
-* title line ('tl'):                     Page Layout.         (line  35)
-* title line length register ('.lt'):    Page Layout.         (line  67)
-* title line, length ('lt'):             Page Layout.         (line  67)
-* title page, example markup:            ms Cover Page Macros.
-                                                              (line  66)
-* titles:                                Page Layout.         (line  31)
-* 'tkf' request, and font styles:        Font Families.       (line  59)
-* 'tkf' request, and font translations:  Changing Fonts.      (line  55)
-* 'tkf' request, with fractional type sizes: Fractional Type Sizes.
-                                                              (line   6)
-* 'tl' request, and 'mc':                Miscellaneous.       (line 102)
-* 'tm' request, and copy-in mode:        Debugging.           (line  30)
-* 'tm1' request, and copy-in mode:       Debugging.           (line  30)
-* tmac, directory:                       Macro Directories.   (line  11)
-* tmac, path:                            Macro Directories.   (line  11)
-* 'tmc' request, and copy-in mode:       Debugging.           (line  30)
-* TMPDIR, environment variable:          Environment.         (line  44)
-* token, input:                          Gtroff Internals.    (line   6)
-* top margin:                            Page Layout.         (line  20)
-* top-level diversion:                   Diversions.          (line  12)
-* top-level diversion, and 'bp':         Page Control.        (line  24)
-* top-level diversion, and '\!':         Diversions.          (line 171)
-* top-level diversion, and '\?':         Diversions.          (line 176)
-* 'tr' request, and glyph definitions:   Using Symbols.       (line 326)
-* 'tr' request, and soft hyphen character: Manipulating Hyphenation.
-                                                              (line 243)
-* 'tr' request, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line  86)
-* track kerning:                         Ligatures and Kerning.
-                                                              (line  53)
-* track kerning, activating ('tkf'):     Ligatures and Kerning.
-                                                              (line  60)
-* trailing quotes:                       Strings.             (line  57)
-* trailing spaces:                       Filling and Adjusting.
-                                                              (line  10)
-* translations of characters:            Character Translations.
-                                                              (line   6)
-* transparent characters:                Sentences.           (line  18)
-* transparent characters <1>:            Using Symbols.       (line 275)
-* transparent output ('cf', 'trf'):      I/O.                 (line  50)
-* transparent output ('\!', '\?'):       Diversions.          (line 136)
-* transparent output, incompatibilities with AT&T 'troff': Implementation Differences.
-                                                              (line 106)
-* trap, changing location ('ch'):        Page Location Traps. (line 111)
-* trap, distance, register ('.t'):       Page Location Traps. (line 102)
-* trap, diversion, setting ('dt'):       Diversion Traps.     (line   7)
-* trap, end-of-input, setting ('em'):    End-of-input Traps.  (line   7)
-* trap, input line, setting ('it'):      Input Line Traps.    (line   8)
-* trap, planting:                        Traps.               (line  11)
-* trap, springing:                       Traps.               (line  11)
-* traps:                                 Traps.               (line   6)
-* traps, and discarded space:            Manipulating Spacing.
-                                                              (line  53)
-* traps, and diversions:                 Page Location Traps. (line 166)
-* traps, blank line:                     Blank Line Traps.    (line   6)
-* traps, diversion:                      Diversion Traps.     (line   6)
-* traps, dumping ('ptr'):                Debugging.           (line  81)
-* traps, end-of-input:                   End-of-input Traps.  (line   6)
-* traps, input line:                     Input Line Traps.    (line   6)
-* traps, input line, and interrupted lines ('itc'): Input Line Traps.
-                                                              (line  24)
-* traps, leading spaces:                 Leading Spaces Traps.
-                                                              (line   6)
-* traps, page location:                  Page Location Traps. (line   6)
-* traps, sprung by 'bp' request ('.pe'): Page Location Traps. (line 143)
-* 'trf' request, and copy-in mode:       I/O.                 (line  50)
-* 'trf' request, and invalid characters: I/O.                 (line  73)
-* 'trf' request, causing implicit linebreak: Manipulating Filling and Adjusting.
-                                                              (line   6)
-* 'trin' request, and 'asciify':         Diversions.          (line 195)
-* troff mode:                            Troff and Nroff Mode.
-                                                              (line   6)
-* troff output:                          gtroff Output.       (line  16)
-* truncated vertical space register ('.trunc'): Page Location Traps.
-                                                              (line 131)
-* TTY, conditional output for:           Operators in Conditionals.
-                                                              (line  14)
-* tutorial for macro users:              Tutorial for Macro Users.
-                                                              (line   6)
-* type size:                             Sizes.               (line   6)
-* type size registers ('.s', '.ps'):     Changing Type Sizes. (line  20)
-* type sizes, changing ('ps', '\s'):     Changing Type Sizes. (line  11)
-* type sizes, fractional:                Fractional Type Sizes.
-                                                              (line   6)
-* type sizes, fractional <1>:            Implementation Differences.
-                                                              (line  76)
-* 'u' unit:                              Measurements.        (line   6)
-* 'uf' request, and font styles:         Font Families.       (line  59)
-* 'ul' glyph, and 'cflags':              Using Symbols.       (line 265)
-* 'ul' request, and font translations:   Changing Fonts.      (line  55)
-* Ultrix-specific 'man' macros:          Optional man extensions.
-                                                              (line  30)
-* unary operators:                       Expressions.         (line  21)
-* unbreakable space:                     Page Motions.        (line 114)
-* undefined identifiers:                 Identifiers.         (line  79)
-* undefined request:                     Comments.            (line  25)
-* underline font ('uf'):                 Artificial Fonts.    (line  90)
-* underlining ('ul'):                    Artificial Fonts.    (line  64)
-* underlining, continuous ('cu'):        Artificial Fonts.    (line  86)
-* underscore glyph ('\[ru]'):            Drawing Requests.    (line  28)
-* unformatting diversions ('asciify'):   Diversions.          (line 195)
-* unformatting horizontal space:         Strings.             (line 157)
-* Unicode:                               Identifiers.         (line  15)
-* Unicode <1>:                           Using Symbols.       (line 201)
-* unit, 'c':                             Measurements.        (line  27)
-* unit, 'f':                             Measurements.        (line  43)
-* unit, 'f', and colors:                 Colors.              (line  36)
-* unit, 'i':                             Measurements.        (line  22)
-* unit, 'm':                             Measurements.        (line  50)
-* unit, 'M':                             Measurements.        (line  62)
-* unit, 'n':                             Measurements.        (line  55)
-* unit, 'p':                             Measurements.        (line  30)
-* unit, 'P':                             Measurements.        (line  34)
-* unit, 's':                             Measurements.        (line  40)
-* unit, 's' <1>:                         Fractional Type Sizes.
-                                                              (line   6)
-* unit, 'u':                             Measurements.        (line   6)
-* unit, 'v':                             Measurements.        (line  58)
-* unit, 'z':                             Measurements.        (line  40)
-* unit, 'z' <1>:                         Fractional Type Sizes.
-                                                              (line   6)
-* units of measurement:                  Measurements.        (line   6)
-* units, default:                        Default Units.       (line   6)
-* unnamed fill colors ('\D'F...''):      Drawing Requests.    (line 216)
-* unnamed glyphs:                        Using Symbols.       (line 212)
-* unnamed glyphs, accessing with '\N':   Font File Format.    (line  51)
-* unsafe mode:                           Groff Options.       (line 292)
-* unsafe mode <1>:                       Macro Directories.   (line  21)
-* unsafe mode <2>:                       Built-in Registers.  (line  23)
-* unsafe mode <3>:                       I/O.                 (line  32)
-* unsafe mode <4>:                       I/O.                 (line 147)
-* unsafe mode <5>:                       I/O.                 (line 168)
-* unsafe mode <6>:                       I/O.                 (line 206)
-* user's macro tutorial:                 Tutorial for Macro Users.
-                                                              (line   6)
-* user's tutorial for macros:            Tutorial for Macro Users.
-                                                              (line   6)
-* using symbols:                         Using Symbols.       (line   6)
-* utf-8, output encoding:                Groff Options.       (line 259)
-* 'v' unit:                              Measurements.        (line  58)
-* valid numeric expression:              Expressions.         (line  83)
-* value, incrementing without changing the register: Auto-increment.
-                                                              (line  52)
-* variables in environment:              Environment.         (line   6)
-* version number, major, register ('.x'): Built-in Registers. (line  88)
-* version number, minor, register ('.y'): Built-in Registers. (line  92)
-* vertical line drawing ('\L'):          Drawing Requests.    (line  50)
-* vertical line spacing register ('.v'): Changing Type Sizes. (line  88)
-* vertical line spacing, changing ('vs'): Changing Type Sizes.
-                                                              (line  88)
-* vertical line spacing, effective value: Changing Type Sizes.
-                                                              (line 106)
-* vertical motion ('\v'):                Page Motions.        (line  78)
-* vertical page location, marking ('mk'): Page Motions.       (line  11)
-* vertical page location, returning to marked ('rt'): Page Motions.
-                                                              (line  11)
-* vertical position in diversion register ('.d'): Diversions. (line  69)
-* vertical position trap enable register ('.vpt'): Page Location Traps.
-                                                              (line  18)
-* vertical position traps, enabling ('vpt'): Page Location Traps.
-                                                              (line  18)
-* vertical position, current ('nl'):     Page Control.        (line  67)
-* vertical resolution:                   DESC File Format.    (line 135)
-* vertical resolution register ('.V'):   Built-in Registers.  (line  28)
-* vertical space unit ('v'):             Measurements.        (line  58)
-* vertical spacing:                      Sizes.               (line   6)
-* warnings:                              Debugging.           (line 149)
-* warnings <1>:                          Warnings.            (line   6)
-* warnings, level ('warn'):              Debugging.           (line 155)
-* what is 'groff'?:                      What Is groff?.      (line   6)
-* while:                                 while.               (line   6)
-* 'while' request, and font translations: Changing Fonts.     (line  55)
-* 'while' request, and the '!' operator: Expressions.         (line  21)
-* 'while' request, confusing with 'br':  while.               (line  68)
-* 'while' request, operators to use with: Operators in Conditionals.
-                                                              (line   6)
-* whitespace characters:                 Identifiers.         (line  10)
-* width escape ('\w'):                   Page Motions.        (line 152)
-* width, of last glyph ('.w'):           Environments.        (line  95)
-* word space size register ('.ss'):      Manipulating Filling and Adjusting.
-                                                              (line 151)
-* 'write' request, and copy-in mode:     I/O.                 (line 212)
-* 'writec' request, and copy-in mode:    I/O.                 (line 212)
-* 'writem' request, and copy-in mode:    I/O.                 (line 225)
-* writing macros:                        Writing Macros.      (line   6)
-* writing to file ('write', 'writec'):   I/O.                 (line 212)
-* year, current, register ('year', 'yr'): Built-in Registers. (line  54)
-* 'z' unit:                              Measurements.        (line  40)
-* 'z' unit <1>:                          Fractional Type Sizes.
-                                                              (line   6)
-* zero width space character ('\&'):     Requests.            (line  47)
-* zero width space character ('\&') <1>: Ligatures and Kerning.
-                                                              (line  47)
-* zero width space character ('\&') <2>: Drawing Requests.    (line  32)
-* zero-width printing ('\z', '\Z'):      Page Motions.        (line 220)
-* zero-width printing ('\z', '\Z') <1>:  Page Motions.        (line 224)
-* zoom factor of a font ('fzoom'):       Changing Fonts.      (line  71)
-
diff --git a/doc/groff.texi b/doc/groff.texi
new file mode 100644 (file)
index 0000000..e7fe4aa
--- /dev/null
@@ -0,0 +1,17278 @@
+\input texinfo
+
+@c
+@c Please convert this manual with `texi2dvi -e groff.texi' due to
+@c problems in texinfo regarding expansion of user-defined macros.
+@c
+@c You need texinfo 4.8 or newer to format this document!
+@c
+
+@c %**start of header (This is for running Texinfo on a region.)
+@setfilename groff.info
+@settitle The GNU Troff Manual
+@setchapternewpage odd
+@footnotestyle separate
+@c %**end of header (This is for running Texinfo on a region.)
+
+@documentlanguage en
+@documentencoding ISO-8859-1
+
+
+@smallbook
+
+@finalout
+
+
+@copying
+This manual documents GNU @code{troff} version 1.22.4.
+
+Copyright @copyright{} 1994--2018 Free Software Foundation, Inc.
+
+@quotation
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.3 or
+any later version published by the Free Software Foundation; with no
+Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
+and with the Back-Cover Texts as in (a) below.  A copy of the license is
+included in the section entitled ``GNU Free Documentation License.''
+
+(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
+modify this GNU manual.  Buying copies from the FSF supports it in
+developing GNU and promoting software freedom.''
+@end quotation
+@end copying
+
+
+@c We use the following indices:
+@c
+@c   cindex: concepts
+@c   rqindex: requests
+@c   esindex: escapes
+@c   vindex: registers
+@c   kindex: commands in font files
+@c   pindex: programs and files
+@c   tindex: environment variables
+@c   maindex: macros
+@c   stindex: strings
+@c   opindex: operators
+@c
+@c tindex and cindex are merged.
+
+@defcodeindex rq
+@defcodeindex es
+@defcodeindex ma
+@defcodeindex st
+@defcodeindex op
+@syncodeindex tp cp
+
+
+@c To avoid uppercasing in @deffn while converting to info, we define
+@c our special @Var{}.
+
+@macro Var{arg}
+@r{@slanted{\arg\}}
+@end macro
+
+
+@c To assure correct HTML translation, some ugly hacks are necessary.
+@c While processing a @def... request, the HTML translator looks at the
+@c next line to decide whether to start indentation, and if the line
+@c starts with @def... (e.g. @deffnx), indentation is started.  We must
+@c therefore ensure that a @def... is seen, during macro expansion.
+@c
+@c The following macros have to be used:
+@c
+@c One item:
+@c
+@c   @Def...
+@c
+@c Two items:
+@c
+@c   @Def...List
+@c   @Def...ListEnd
+@c
+@c More than two:
+@c
+@c   @Def...List
+@c   @Def...Item
+@c   @Def...Item
+@c   ...
+@c   @Def...ListEnd
+@c
+@c The definition block must end with
+@c
+@c   @endDef...
+@c
+@c The above is valid for texinfo 4.0f and above.
+@c
+@c By default, only the first item generates an index entry.  To
+@c override this, use a variant with a trailing `x' (like
+@c `@DefmacItemx').
+
+
+@c a dummy macro to assure the `@def...'
+
+@macro defdummy
+@c
+@end macro
+
+
+@c definition of requests
+
+@macro Defreq{name, arg}
+@deffn Request @t{.\name\} \arg\
+@rqindex \name\
+@c
+@end macro
+
+@macro DefreqList{name, arg}
+@deffn Request @t{.\name\} \arg\
+@defdummy
+@rqindex \name\
+@c
+@end macro
+
+@macro DefreqItem{name, arg}
+@deffnx Request @t{.\name\} \arg\
+@defdummy
+@c
+@end macro
+
+@macro DefreqItemx{name, arg}
+@deffnx Request @t{.\name\} \arg\
+@defdummy
+@rqindex \name\
+@c
+@end macro
+
+@macro DefreqListEnd{name, arg}
+@deffnx Request @t{.\name\} \arg\
+@c
+@end macro
+
+@macro DefreqListEndx{name, arg}
+@deffnx Request @t{.\name\} \arg\
+@rqindex \name\
+@c
+@end macro
+
+@macro endDefreq
+@end deffn
+@end macro
+
+
+@c definition of escapes
+
+@macro Defesc{name, delimI, arg, delimII}
+@deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@esindex \name\
+@c
+@end macro
+
+@macro DefescList{name, delimI, arg, delimII}
+@deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@defdummy
+@esindex \name\
+@c
+@end macro
+
+@macro DefescItem{name, delimI, arg, delimII}
+@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@defdummy
+@c
+@end macro
+
+@macro DefescItemx{name, delimI, arg, delimII}
+@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@defdummy
+@esindex \name\
+@c
+@end macro
+
+@macro DefescListEnd{name, delimI, arg, delimII}
+@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@c
+@end macro
+
+@macro DefescListEndx{name, delimI, arg, delimII}
+@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
+@esindex \name\
+@c
+@end macro
+
+@macro endDefesc
+@end deffn
+@end macro
+
+
+@c definition of registers
+
+@macro Defreg{name}
+@deffn Register @t{\\n[\name\]}
+@vindex \name\
+@c
+@end macro
+
+@macro DefregList{name}
+@deffn Register @t{\\n[\name\]}
+@defdummy
+@vindex \name\
+@c
+@end macro
+
+@macro DefregItem{name}
+@deffnx Register @t{\\n[\name\]}
+@defdummy
+@c
+@end macro
+
+@macro DefregItemx{name}
+@deffnx Register @t{\\n[\name\]}
+@defdummy
+@vindex \name\
+@c
+@end macro
+
+@macro DefregListEnd{name}
+@deffnx Register @t{\\n[\name\]}
+@c
+@end macro
+
+@macro DefregListEndx{name}
+@deffnx Register @t{\\n[\name\]}
+@vindex \name\
+@c
+@end macro
+
+@macro endDefreg
+@end deffn
+@end macro
+
+
+@c definition of registers specific to macro packages, preprocessors, etc.
+
+@macro Defmpreg{name, package}
+@deffn Register @t{\\n[\name\]}
+@vindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmpregList{name, package}
+@deffn Register @t{\\n[\name\]}
+@defdummy
+@vindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmpregItem{name, package}
+@deffnx Register @t{\\n[\name\]}
+@defdummy
+@c
+@end macro
+
+@macro DefmpregItemx{name, package}
+@deffnx Register @t{\\n[\name\]}
+@defdummy
+@vindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmpregListEnd{name, package}
+@deffnx Register @t{\\n[\name\]}
+@c
+@end macro
+
+@macro DefmpregListEndx{name, package}
+@deffnx Register @t{\\n[\name\]}
+@vindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro endDefmpreg
+@end deffn
+@end macro
+
+
+@c definition of macros
+
+@macro Defmac{name, arg, package}
+@defmac @t{.\name\} \arg\
+@maindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmacList{name, arg, package}
+@defmac @t{.\name\} \arg\
+@defdummy
+@maindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmacItem{name, arg, package}
+@defmacx @t{.\name\} \arg\
+@defdummy
+@c
+@end macro
+
+@macro DefmacItemx{name, arg, package}
+@defmacx @t{.\name\} \arg\
+@defdummy
+@maindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefmacListEnd{name, arg, package}
+@defmacx @t{.\name\} \arg\
+@c
+@end macro
+
+@macro DefmacListEndx{name, arg, package}
+@defmacx @t{.\name\} \arg\
+@maindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro endDefmac
+@end defmac
+@end macro
+
+
+@c definition of strings
+
+@macro Defstr{name, package}
+@deffn String @t{\\*[\name\]}
+@stindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefstrList{name, package}
+@deffn String @t{\\*[\name\]}
+@defdummy
+@stindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefstrItem{name, package}
+@deffnx String @t{\\*[\name\]}
+@defdummy
+@c
+@end macro
+
+@macro DefstrItemx{name, package}
+@deffnx String @t{\\*[\name\]}
+@defdummy
+@stindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro DefstrListEnd{name, package}
+@deffnx String @t{\\*[\name\]}
+@c
+@end macro
+
+@macro DefstrListEndx{name, package}
+@deffnx String @t{\\*[\name\]}
+@stindex \name\ @r{[}\package\@r{]}
+@c
+@end macro
+
+@macro endDefstr
+@end deffn
+@end macro
+
+
+@c our example macros
+
+@macro Example
+@example
+@group
+@end macro
+
+@macro endExample
+@end group
+@end example
+@end macro
+
+@macro CartoucheExample
+@cartouche
+@example
+@end macro
+
+@macro endCartoucheExample
+@end example
+@end cartouche
+@end macro
+
+
+@c <text>
+
+@tex
+\gdef\Langlemacro{\angleleft}
+\gdef\Ranglemacro{\angleright}
+@end tex
+
+@iftex
+@set Langlemacro @Langlemacro
+@set Ranglemacro @Ranglemacro
+@end iftex
+
+@ifnottex
+@set Langlemacro <
+@set Ranglemacro >
+@end ifnottex
+
+@macro angles{text}
+@value{Langlemacro}@r{\text\}@value{Ranglemacro}
+@end macro
+
+
+@c a <= sign
+@c
+@c Since expansion of macros has changed between texinfo 4.x and 5.x,
+@c we can't define a macro but have to use @value directly.
+
+@tex
+\gdef\LE{\le}
+@end tex
+
+@iftex
+@set LE @LE
+@end iftex
+
+@ifnottex
+@set LE <=
+@end ifnottex
+
+
+@c Special care is required with parentheses, brackets, and braces:
+@c
+@c . Real parentheses in @deffn produce an error while compiling with
+@c   TeX.
+@c . Real brackets use the wrong font in @deffn, overriding @t{}.
+@c
+@c . @{ and @} fail with info if used in a macro.
+@c
+@c Since macros aren't expanded in @deffn during -E, the following
+@c definitions are for non-TeX only.
+@c
+@c This is true for texinfo 4.0 and above.
+
+@iftex
+@set Lparenmacro @lparen
+@set Rparenmacro @rparen
+@set Lbrackmacro @lbrack
+@set Rbrackmacro @rbrack
+@set Lbracemacro @{
+@set Rbracemacro @}
+@end iftex
+
+@ifnottex
+@set Lparenmacro (
+@set Rparenmacro )
+@set Lbrackmacro [
+@set Rbrackmacro ]
+@set Lbracemacro @{
+@set Rbracemacro @}
+@end ifnottex
+
+@macro Lparen{}
+@value{Lparenmacro}
+@end macro
+@macro Rparen{}
+@value{Rparenmacro}
+@end macro
+@macro Lbrack{}
+@value{Lbrackmacro}
+@end macro
+@macro Rbrack{}
+@value{Rbrackmacro}
+@end macro
+@macro Lbrace{}
+@value{Lbracemacro}
+@end macro
+@macro Rbrace{}
+@value{Rbracemacro}
+@end macro
+
+
+@c This suppresses the word `Appendix' in the appendix headers.
+
+@tex
+\gdef\gobblefirst#1#2{#2}
+\gdef\putwordAppendix{\gobblefirst}
+@end tex
+
+
+@c We map some latin-1 characters to corresponding texinfo macros.
+@c Newer versions of texinfo.tex have similar code included already.
+
+@tex
+\global\catcode`^^e4\active % ä
+\gdef^^e4{\"a}
+\global\catcode`^^c4\active % Ä
+\gdef^^c4{\"A}
+\global\catcode`^^e9\active % é
+\gdef^^e9{\'e}
+\global\catcode`^^c9\active % É
+\gdef^^c9{\'E}
+\global\catcode`^^f6\active % ö
+\gdef^^f6{\"o}
+\global\catcode`^^d6\active % Ö
+\gdef^^d6{\"O}
+\global\catcode`^^fc\active % ü
+\gdef^^fc{\"u}
+\global\catcode`^^dc\active % Ü
+\gdef^^dc{\"U}
+\global\catcode`^^e6\active % æ
+\gdef^^e6{\ae}
+\global\catcode`^^c6\active % Æ
+\gdef^^c6{\AE}
+\global\catcode`^^df\active % ß
+\gdef^^df{\ss}
+@end tex
+
+
+@c Note: We say `Roman numerals' but `roman font'.
+
+
+@dircategory Typesetting
+@direntry
+* Groff: (groff).               The GNU troff document formatting system.
+@end direntry
+
+
+@titlepage
+@title groff
+@subtitle The GNU implementation of @code{troff}
+@subtitle Edition 1.22.4
+@subtitle Autumn 2018
+@author by Trent A.@tie{}Fisher
+@author and Werner Lemberg
+
+@page
+@vskip 0pt plus 1filll
+@insertcopying
+@end titlepage
+
+@contents
+
+@ifnottex
+@node Top, Introduction, (dir), (dir)
+@top GNU troff
+@end ifnottex
+
+@menu
+* Introduction::
+* Invoking groff::
+* Tutorial for Macro Users::
+* Macro Packages::
+* gtroff Reference::
+* Preprocessors::
+* Output Devices::
+* File formats::
+* Installation::
+* Copying This Manual::
+* Request Index::
+* Escape Index::
+* Operator Index::
+* Register Index::
+* Macro Index::
+* String Index::
+* Glyph Name Index::
+* Font File Keyword Index::
+* Program and File Index::
+* Concept Index::
+@end menu
+
+@ifnottex
+@insertcopying
+@end ifnottex
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Introduction, Invoking groff, Top, Top
+@chapter Introduction
+@cindex introduction
+
+GNU @code{troff} (or @code{groff}) is a system for typesetting
+documents.  @code{troff} is very flexible and has been used extensively
+for some thirty years.  It is well entrenched in the Unix community.
+
+@menu
+* What Is groff?::
+* History::
+* groff Capabilities::
+* Macro Package Intro::
+* Preprocessor Intro::
+* Output device intro::
+* Credits::
+@end menu
+
+
+@c =====================================================================
+
+@node What Is groff?, History, Introduction, Introduction
+@section What Is @code{groff}?
+@cindex what is @code{groff}?
+@cindex @code{groff} -- what is it?
+
+@code{groff} belongs to an older generation of document preparation
+systems, which operate more like compilers than the more recent
+interactive @acronym{WYSIWYG}@footnote{What You See Is What You Get}
+systems.  @code{groff} and its contemporary counterpart, @TeX{}, both
+work using a @dfn{batch} paradigm: The input (or @dfn{source}) files are
+normal text files with embedded formatting commands.  These files can
+then be processed by @code{groff} to produce a typeset document on a
+variety of devices.
+
+@code{groff} should not be confused with a @dfn{word processor}, an
+integrated system of editor and text formatter.  Also, many word
+processors follow the @acronym{WYSIWYG} paradigm discussed earlier.
+
+Although @acronym{WYSIWYG} systems may be easier to use, they have a
+number of disadvantages compared to @code{troff}:
+
+@itemize @bullet
+@item
+They must be used on a graphics display to work on a document.
+
+@item
+Most of the @acronym{WYSIWYG} systems are either non-free or are not
+very portable.
+
+@item
+@code{troff} is firmly entrenched in all Unix systems.
+
+@item
+It is difficult to have a wide range of capabilities within the confines
+of a GUI/window system.
+
+@item
+It is more difficult to make global changes to a document.
+@end itemize
+
+@quotation
+``GUIs normally make it simple to accomplish simple actions and
+impossible to accomplish complex actions.''  --Doug Gwyn (22/Jun/91 in
+@code{comp.unix.wizards})
+@end quotation
+
+
+@c =====================================================================
+
+@node History, groff Capabilities, What Is groff?, Introduction
+@section History
+@cindex history
+
+@cindex @code{RUNOFF}, the program
+@cindex @code{rf}, the program
+@code{troff} can trace its origins back to a formatting program called
+@code{RUNOFF}, written by Jerry Saltzer, which ran on the @acronym{CTSS}
+(@emph{Compatible Time Sharing System}, a project of MIT, the
+Massachusetts Institute of Technology) in the
+mid-sixties.@footnote{Jerome H.@: Saltzer, a grad student then, later a
+Professor of Electrical Engineering, now retired.  Saltzer's PhD thesis
+was the first application for @code{RUNOFF} and is available from the
+MIT Libraries.}  The name came from the use of the phrase ``run off a
+document'', meaning to print it out.
+@c
+@c Tom Van Vleck <thvv@multicians.org> writes about the following:
+@c
+@c I am not sure about this.. I think the BCPL runoff was the port to
+@c the 635 architecture, and that the order of events is
+@c 1. CTSS runoff
+@c 2. BCPL runoff on Multics
+@c 3. BCPL runoff on 635
+@c 4. rf on PDP-7
+@c
+Bob Morris ported it to the 635 architecture and called the program
+@code{roff} (an abbreviation of @code{runoff}).  It was rewritten as
+@code{rf} for the @w{PDP-7} (before having Unix), and at the
+same time (1969), Doug McIlroy rewrote an extended and simplified
+version of @code{roff} in the @acronym{BCPL} programming language.
+
+@cindex @code{roff}, the program
+In 1971, the Unix developers wanted to get a @w{PDP-11}, and to justify
+the cost, proposed the development of a document formatting system for
+the @acronym{AT&T} patents division.  This first formatting program was
+a reimplementation of McIlroy's @code{roff}, written by J.@tie{}F.@:
+Ossanna.
+
+@cindex @code{nroff}, the program
+When they needed a more flexible language, a new version of @code{roff}
+called @code{nroff} (``Newer @code{roff}'') was written.  It had a much
+more complicated syntax, but provided the basis for all future versions.
+When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
+version of @code{nroff} that would drive it.  It was dubbed
+@code{troff}, for ``typesetter @code{roff}'', although many people have
+speculated that it actually means ``Times @code{roff}'' because of the
+use of the Times font family in @code{troff} by default.  As such, the
+name @code{troff} is pronounced `@w{t-roff}' rather than `trough'.
+
+With @code{troff} came @code{nroff} (they were actually the same program
+except for some @samp{#ifdef}s), which was for producing output for line
+printers and character terminals.  It understood everything @code{troff}
+did, and ignored the commands that were not applicable (e.g.@: font
+changes).
+
+Since there are several things that cannot be done easily in
+@code{troff}, work on several preprocessors began.  These programs would
+transform certain parts of a document into @code{troff}, which made a
+very natural use of pipes in Unix.
+
+The @code{eqn} preprocessor allowed mathematical formulae to be specified
+in a much simpler and more intuitive manner.  @code{tbl} is a
+preprocessor for formatting tables.  The @code{refer} preprocessor (and
+the similar program, @code{bib}) processes citations in a document
+according to a bibliographic database.
+
+Unfortunately, Ossanna's @code{troff} was written in @w{PDP-11} assembly
+language and produced output specifically for the CAT phototypesetter.
+He rewrote it in C, although it was now 7000@tie{}lines of uncommented
+code and still dependent on the CAT@.  As the CAT became less common, and
+was no longer supported by the manufacturer, the need to make it support
+other devices became a priority.  However, before this could be done,
+Ossanna died by a severe heart attack in a hospital while recovering
+from a previous one.
+
+@pindex ditroff
+@cindex @code{ditroff}, the program
+So, Brian Kernighan took on the task of rewriting @code{troff}.  The
+newly rewritten version produced device independent code that was very
+easy for postprocessors to read and translate to the appropriate printer
+codes.  Also, this new version of @code{troff} (called @code{ditroff}
+for ``device independent @code{troff}'') had several extensions, which
+included drawing functions.
+
+Due to the additional abilities of the new version of @code{troff},
+several new preprocessors appeared.  The @code{pic} preprocessor
+provides a wide range of drawing functions.  Likewise the @code{ideal}
+preprocessor did the same, although via a much different paradigm.  The
+@code{grap} preprocessor took specifications for graphs, but, unlike
+other preprocessors, produced @code{pic} code.
+
+James Clark began work on a GNU implementation of @code{ditroff} in
+early@tie{}1989.  The first version, @code{groff}@tie{}0.3.1, was
+released June@tie{}1990.  @code{groff} included:
+
+@itemize @bullet
+@item
+A replacement for @code{ditroff} with many extensions.
+
+@item
+The @code{soelim}, @code{pic}, @code{tbl}, and @code{eqn} preprocessors.
+
+@item
+Postprocessors for character devices, @sc{PostScript}, @TeX{} DVI, and
+X@tie{}Windows.  GNU @code{troff} also eliminated the need for a
+separate @code{nroff} program with a postprocessor that would produce
+@acronym{ASCII} output.
+
+@item
+A version of the @file{me} macros and an implementation of the
+@file{man} macros.
+@end itemize
+
+Also, a front-end was included that could construct the, sometimes
+painfully long, pipelines required for all the post- and preprocessors.
+
+Development of GNU @code{troff} progressed rapidly, and saw the
+additions of a replacement for @code{refer}, an implementation of the
+@file{ms} and @file{mm} macros, and a program to deduce how to format a
+document (@code{grog}).
+
+It was declared a stable (i.e.@: non-beta) package with the release of
+version@tie{}1.04 around November@tie{}1991.
+
+Beginning in@tie{}1999, @code{groff} has new maintainers (the package
+was an orphan for a few years).  As a result, new features and programs
+like @code{grn}, a preprocessor for gremlin images, and an output device
+to produce @acronym{HTML} and @acronym{XHTML} have been added.
+
+
+@c =====================================================================
+
+@node groff Capabilities, Macro Package Intro, History, Introduction
+@section @code{groff} Capabilities
+@cindex @code{groff} capabilities
+@cindex capabilities of @code{groff}
+
+So what exactly is @code{groff} capable of doing?  @code{groff} provides
+a wide range of low-level text formatting operations.  Using these, it
+is possible to perform a wide range of formatting tasks, such as
+footnotes, table of contents, multiple columns, etc.  Here's a list of
+the most important operations supported by @code{groff}:
+
+@itemize @bullet
+@item
+text filling, adjusting, and centering
+
+@item
+hyphenation
+
+@item
+page control
+
+@item
+font and glyph size control
+
+@item
+vertical spacing (e.g.@: double-spacing)
+
+@item
+line length and indenting
+
+@item
+macros, strings, diversions, and traps
+
+@item
+number registers
+
+@item
+tabs, leaders, and fields
+
+@item
+input and output conventions and character translation
+
+@item
+overstrike, bracket, line drawing, and zero-width functions
+
+@item
+local horizontal and vertical motions and the width function
+
+@item
+three-part titles
+
+@item
+output line numbering
+
+@item
+conditional acceptance of input
+
+@item
+environment switching
+
+@item
+insertions from the standard input
+
+@item
+input/output file switching
+
+@item
+output and error messages
+@end itemize
+
+
+@c =====================================================================
+
+@node Macro Package Intro, Preprocessor Intro, groff Capabilities, Introduction
+@section Macro Packages
+@cindex macro packages
+
+Since @code{groff} provides such low-level facilities, it can be quite
+difficult to use by itself.  However, @code{groff} provides a
+@dfn{macro} facility to specify how certain routine operations
+(e.g.@tie{}starting paragraphs, printing headers and footers, etc.)@:
+should be done.  These macros can be collected together into a
+@dfn{macro package}.  There are a number of macro packages available;
+the most common (and the ones described in this manual) are @file{man},
+@file{mdoc}, @file{me}, @file{ms}, and @file{mm}.
+
+
+@c =====================================================================
+
+@node Preprocessor Intro, Output device intro, Macro Package Intro, Introduction
+@section Preprocessors
+@cindex preprocessors
+
+Although @code{groff} provides most functions needed to format a
+document, some operations would be unwieldy (e.g.@: to draw pictures).
+Therefore, programs called @dfn{preprocessors} were written that
+understand their own language and produce the necessary @code{groff}
+operations.  These preprocessors are able to differentiate their own
+input from the rest of the document via markers.
+
+To use a preprocessor, Unix pipes are used to feed the output from the
+preprocessor into @code{groff}.  Any number of preprocessors may be used
+on a given document; in this case, the preprocessors are linked together
+into one pipeline.  However, with @code{groff}, the user does not need
+to construct the pipe, but only tell @code{groff} what preprocessors to
+use.
+
+@code{groff} currently has preprocessors for producing tables
+(@code{tbl}), typesetting equations (@code{eqn}), drawing pictures
+(@code{pic} and @code{grn}), processing bibliographies
+(@code{refer}), and drawing chemical structures (@code{chem}).  An
+associated program that is useful when dealing with preprocessors is
+@code{soelim}.
+
+A free implementation of @code{grap}, a preprocessor for drawing graphs,
+can be obtained as an extra package; @code{groff} can use @code{grap}
+also.
+
+Unique to @code{groff} is the @code{preconv} preprocessor that enables
+@code{groff} to handle documents in various input encodings.
+
+There are other preprocessors in existence, but, unfortunately, no free
+implementations are available.  Among them is a preprocessor for drawing
+mathematical pictures (@code{ideal}).
+
+
+@c =====================================================================
+
+@node Output device intro, Credits, Preprocessor Intro, Introduction
+@section Output Devices
+@cindex postprocessors
+@cindex output devices
+@cindex devices for output
+
+@code{groff} actually produces device independent code that may be fed
+into a postprocessor to produce output for a particular device.
+Currently, @code{groff} has postprocessors for @sc{PostScript} devices,
+character terminals, X@tie{}Windows (for previewing), @TeX{} DVI format,
+HP LaserJet@tie{}4 and Canon LBP printers (which use @acronym{CAPSL}),
+@acronym{HTML}, @acronym{XHTML}, and PDF.
+
+
+@c =====================================================================
+
+@node Credits,  , Output device intro, Introduction
+@section Credits
+@cindex credits
+
+Large portions of this manual were taken from existing documents, most
+notably, the manual pages for the @code{groff} package by James Clark,
+and Eric Allman's papers on the @file{me} macro package.
+
+The section on the @file{man} macro package is partly based on
+Susan@tie{}G.@: Kleinmann's @file{groff_man} manual page written for the
+Debian GNU/Linux system.
+
+Larry Kollar contributed the section on the @file{ms} macro package.
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Invoking groff, Tutorial for Macro Users, Introduction, Top
+@chapter Invoking @code{groff}
+@cindex invoking @code{groff}
+@cindex @code{groff} invocation
+
+This section focuses on how to invoke the @code{groff} front end.  This
+front end takes care of the details of constructing the pipeline among
+the preprocessors, @code{gtroff} and the postprocessor.
+
+It has become a tradition that GNU programs get the prefix @samp{g} to
+distinguish it from its original counterparts provided by the host (see
+@ref{Environment}, for more details).  Thus, for example, @code{geqn} is
+GNU @code{eqn}.  On operating systems like GNU/Linux or the Hurd, which
+don't contain proprietary versions of @code{troff}, and on
+MS-DOS/MS-Windows, where @code{troff} and associated programs are not
+available at all, this prefix is omitted since GNU @code{troff} is the
+only used incarnation of @code{troff}.  Exception: @samp{groff} is never
+replaced by @samp{roff}.
+
+In this document, we consequently say @samp{gtroff} when talking about
+the GNU @code{troff} program.  All other implementations of @code{troff}
+are called @acronym{AT&T} @code{troff}, which is the common origin of all
+@code{troff} derivates (with more or less compatible changes).
+Similarly, we say @samp{gpic}, @samp{geqn}, etc.
+
+@menu
+* Groff Options::
+* Environment::
+* Macro Directories::
+* Font Directories::
+* Paper Size::
+* Invocation Examples::
+@end menu
+
+
+@c =====================================================================
+
+@node Groff Options, Environment, Invoking groff, Invoking groff
+@section Options
+@cindex options
+
+@pindex groff
+@pindex gtroff
+@pindex gpic
+@pindex geqn
+@pindex ggrn
+@pindex grap
+@pindex gtbl
+@pindex gchem
+@pindex grefer
+@pindex gsoelim
+@pindex preconv
+@code{groff} normally runs the @code{gtroff} program and a
+postprocessor appropriate for the selected device.  The default device
+is @samp{ps} (but it can be changed when @code{groff} is configured and
+built).  It can optionally preprocess with any of @code{gpic},
+@code{geqn}, @code{gtbl}, @code{ggrn}, @code{grap}, @code{gchem},
+@code{grefer}, @code{gsoelim}, or @code{preconv}.
+
+This section only documents options to the @code{groff} front end.  Many
+of the arguments to @code{groff} are passed on to @code{gtroff},
+therefore those are also included.  Arguments to pre- or postprocessors
+can be found in @ref{Invoking gpic}, @ref{Invoking geqn}, @ref{Invoking
+gtbl}, @ref{Invoking ggrn}, @ref{Invoking grefer}, @ref{Invoking gchem},
+@ref{Invoking gsoelim}, @ref{Invoking preconv}, @ref{Invoking grotty},
+@ref{Invoking grops}, @ref{Invoking gropdf}, @ref{Invoking grohtml},
+@ref{Invoking grodvi}, @ref{Invoking grolj4}, @ref{Invoking grolbp}, and
+@ref{Invoking gxditview}.
+
+The command-line format for @code{groff} is:
+
+@Example
+groff [ -abceghijklpstvzCEGNRSUVXZ ] [ -d@var{cs} ] [ -D@var{arg} ]
+      [ -f@var{fam} ] [ -F@var{dir} ] [ -I@var{dir} ] [ -K@var{arg} ]
+      [ -L@var{arg} ] [ -m@var{name} ] [ -M@var{dir} ] [ -n@var{num} ]
+      [ -o@var{list} ] [ -P@var{arg} ] [ -r@var{cn} ] [ -T@var{dev} ]
+      [ -w@var{name} ] [ -W@var{name} ] [ @var{files}@dots{} ]
+@endExample
+
+The command-line format for @code{gtroff} is as follows.
+
+@Example
+gtroff [ -abcivzCERU ] [ -d@var{cs} ] [ -f@var{fam} ] [ -F@var{dir} ]
+       [ -m@var{name} ] [ -M@var{dir} ] [ -n@var{num} ] [ -o@var{list} ]
+       [ -r@var{cn} ] [ -T@var{name} ] [ -w@var{name} ] [ -W@var{name} ]
+       [ @var{files}@dots{} ]
+@endExample
+
+@noindent
+Obviously, many of the options to @code{groff} are actually passed on to
+@code{gtroff}.
+
+Options without an argument can be grouped behind a
+single@tie{}@option{-}.  A filename of@tie{}@file{-} denotes the
+standard input.  It is possible to have whitespace between an option and
+its parameter.
+
+The @code{grog} command can be used to guess the correct @code{groff}
+command to format a file.
+
+Here's the description of the command-line options:
+
+@cindex command-line options
+@table @samp
+@item -a
+@cindex @acronym{ASCII} approximation output register (@code{.A})
+Generate an @acronym{ASCII} approximation of the typeset output.  The
+read-only register @code{.A} is then set to@tie{}1.  @xref{Built-in
+Registers}.  A typical example is
+
+@Example
+groff -a -man -Tdvi troff.man | less
+@endExample
+
+@noindent
+which shows how lines are broken for the DVI device.  Note that this
+option is rather useless today since graphic output devices are
+available virtually everywhere.
+
+@item -b
+Print a backtrace with each warning or error message.  This backtrace
+should help track down the cause of the error.  The line numbers given
+in the backtrace may not always be correct: @code{gtroff} can get
+confused by @code{as} or @code{am} requests while counting line numbers.
+
+@item -c
+Suppress color output.
+
+@item -C
+Enable compatibility mode.  @xref{Implementation Differences}, for the
+list of incompatibilities between @code{groff} and @acronym{AT&T}
+@code{troff}.
+
+@item -d@var{c}@var{s}
+@itemx -d@var{name}=@var{s}
+Define @var{c} or @var{name} to be a string@tie{}@var{s}.
+@var{c}@tie{}must be a one-letter name; @var{name} can be of arbitrary
+length.  All string assignments happen before loading any macro file
+(including the start-up file).
+
+@item -D@var{arg}
+Set default input encoding used by @code{preconv} to @var{arg}.  Implies
+@option{-k}.
+
+@item -e
+Preprocess with @code{geqn}.
+
+@item -E
+Inhibit all error messages.
+
+@item -f@var{fam}
+Use @var{fam} as the default font family.  @xref{Font Families}.
+
+@item -F@var{dir}
+Search @file{@var{dir}} for subdirectories @file{dev@var{name}}
+(@var{name} is the name of the device), for the @file{DESC} file, and
+for font files before looking in the standard directories (@pxref{Font
+Directories}).  This option is passed to all pre- and postprocessors
+using the @env{GROFF_FONT_PATH} environment variable.
+
+@item -g
+Preprocess with @code{ggrn}.
+
+@item -G
+Preprocess with @code{grap}.  Implies @option{-p}.
+
+@item -h
+Print a help message.
+
+@item -i
+Read the standard input after all the named input files have been
+processed.
+
+@item -I@var{dir}
+This option may be used to specify a directory to search for files.
+It is passed to the following programs:
+
+@itemize
+@item
+@code{gsoelim} (see @ref{gsoelim} for more details);
+it also implies @code{groff}'s @option{-s} option.
+
+@item
+@code{gtroff}; it is used to search files named in the @code{psbb} and
+@code{so} requests.
+
+@item
+@code{grops}; it is used to search files named in the
+@w{@code{\X'ps: import}} and @w{@code{\X'ps: file}} escapes.
+@end itemize
+
+The current directory is always searched first.  This option may be
+specified more than once; the directories are searched in the order
+specified.  No directory search is performed for files specified using
+an absolute path.
+
+@item -j
+Preprocess with @code{gchem}.  Implies @option{-p}.
+
+@item -k
+Preprocess with @code{preconv}.  This is run before any other
+preprocessor.  Please refer to @code{preconv}'s manual page for its
+behaviour if no @option{-K} (or @option{-D}) option is specified.
+
+@item -K@var{arg}
+Set input encoding used by preconv to @var{arg}.  Implies @option{-k}.
+
+@item -l
+Send the output to a spooler for printing.  The command used for this is
+specified by the @code{print} command in the device description file
+(see @ref{Font Files}, for more info).  If not present, @option{-l} is
+ignored.
+
+@item -L@var{arg}
+Pass @var{arg} to the spooler.  Each argument should be passed with a
+separate @option{-L} option.  Note that @code{groff} does not prepend a
+@samp{-} to @var{arg} before passing it to the postprocessor.  If the
+@code{print} keyword in the device description file is missing,
+@option{-L} is ignored.
+
+@item -m@var{name}
+Read in the file @file{@var{name}.tmac}.  Normally @code{groff} searches
+for this in its macro directories.  If it isn't found, it tries
+@file{tmac.@var{name}} (searching in the same directories).
+
+@item -M@var{dir}
+Search directory @file{@var{dir}} for macro files before the standard
+directories (@pxref{Macro Directories}).
+
+@item -n@var{num}
+Number the first page @var{num}.
+
+@item -N
+Don't allow newlines with @code{eqn} delimiters.  This is the same as
+the @option{-N} option in @code{geqn}.
+
+@item -o@var{list}
+@cindex print current page register (@code{.P})
+Output only pages in @var{list}, which is a comma-separated list of page
+ranges; @samp{@var{n}} means print page@tie{}@var{n},
+@samp{@var{m}-@var{n}} means print every page between @var{m}
+and@tie{}@var{n}, @samp{-@var{n}} means print every page up
+to@tie{}@var{n}, @samp{@var{n}-} means print every page beginning
+with@tie{}@var{n}.  @code{gtroff} exits after printing the last page in
+the list.  All the ranges are inclusive on both ends.
+
+Within @code{gtroff}, this information can be extracted with the
+@samp{.P} register.  @xref{Built-in Registers}.
+
+If your document restarts page numbering at the beginning of each
+chapter, then @code{gtroff} prints the specified page range for each
+chapter.
+
+@item -p
+Preprocess with @code{gpic}.
+
+@item -P@var{arg}
+Pass @var{arg} to the postprocessor.  Each argument should be passed
+with a separate @option{-P} option.  Note that @code{groff} does not
+prepend @samp{-} to @var{arg} before passing it to the postprocessor.
+
+@item -r@var{c}@var{n}
+@itemx -r@var{name}=@var{n}
+Set number register@tie{}@var{c} or @var{name} to the
+value@tie{}@var{n}.  @var{c}@tie{}must be a one-letter name; @var{name}
+can be of arbitrary length.  @var{n}@tie{}can be any @code{gtroff}
+numeric expression.  All register assignments happen before loading any
+macro file (including the start-up file).
+
+@item -R
+Preprocess with @code{grefer}.  No mechanism is provided for passing
+arguments to @code{grefer} because most @code{grefer} options have
+equivalent commands that can be included in the file.  @xref{grefer},
+for more details.
+
+@pindex troffrc
+@pindex troffrc-end
+Note that @code{gtroff} also accepts a @option{-R} option, which is not
+accessible via @code{groff}.  This option prevents the loading of the
+@file{troffrc} and @file{troffrc-end} files.
+
+@item -s
+Preprocess with @code{gsoelim}.
+
+@item -S
+@cindex @code{open} request, and safer mode
+@cindex @code{opena} request, and safer mode
+@cindex @code{pso} request, and safer mode
+@cindex @code{sy} request, and safer mode
+@cindex @code{pi} request, and safer mode
+@cindex safer mode
+@cindex mode, safer
+Safer mode.  Pass the @option{-S} option to @code{gpic} and disable the
+@code{open}, @code{opena}, @code{pso}, @code{sy}, and @code{pi}
+requests.  For security reasons, this is enabled by default.
+
+@item -t
+Preprocess with @code{gtbl}.
+
+@item -T@var{dev}
+Prepare output for device @var{dev}.  The default device is @samp{ps},
+unless changed when @code{groff} was configured and built.  The
+following are the output devices currently available:
+
+@table @code
+@item ps
+For @sc{PostScript} printers and previewers.
+
+@item pdf
+For PDF viewers or printers.
+
+@item dvi
+For @TeX{} DVI format.
+
+@item X75
+For a 75@dmn{dpi} X11 previewer.
+
+@item X75-12
+For a 75@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
+document.
+
+@item X100
+For a 100@dmn{dpi} X11 previewer.
+
+@item X100-12
+For a 100@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
+document.
+
+@item ascii
+@cindex encoding, output, @acronym{ASCII}
+@cindex @acronym{ASCII}, output encoding
+@cindex output encoding, @acronym{ASCII}
+For typewriter-like devices using the (7-bit) @acronym{ASCII}
+character set.
+
+@item latin1
+@cindex encoding, output, @w{latin-1} (ISO @w{8859-1})
+@cindex @w{latin-1} (ISO @w{8859-1}), output encoding
+@cindex ISO @w{8859-1} (@w{latin-1}), output encoding
+@cindex output encoding, @w{latin-1} (ISO @w{8859-1})
+For typewriter-like devices that support the @w{Latin-1}
+(ISO@tie{}@w{8859-1}) character set.
+
+@item utf8
+@cindex encoding, output, @w{utf-8}
+@cindex @w{utf-8}, output encoding
+@cindex output encoding, @w{utf-8}
+For typewriter-like devices that use the Unicode (ISO@tie{}10646)
+character set with @w{UTF-8} encoding.
+
+@item cp1047
+@cindex encoding, output, @acronym{EBCDIC}
+@cindex @acronym{EBCDIC}, output encoding
+@cindex output encoding, @acronym{EBCDIC}
+@cindex encoding, output, cp1047
+@cindex cp1047, output encoding
+@cindex output encoding, cp1047
+@cindex IBM cp1047 output encoding
+For typewriter-like devices that use the @acronym{EBCDIC} encoding IBM
+cp1047.
+
+@item lj4
+For HP LaserJet4-compatible (or other PCL5-compatible) printers.
+
+@item lbp
+For Canon @acronym{CAPSL} printers (@w{LBP-4} and @w{LBP-8} series laser
+printers).
+
+@pindex pre-grohtml
+@pindex post-grohtml
+@cindex @code{grohtml}, the program
+@item html
+@itemx xhtml
+To produce @acronym{HTML} and @acronym{XHTML} output, respectively.
+Note that this driver consists of two parts, a preprocessor
+(@code{pre-grohtml}) and a postprocessor (@code{post-grohtml}).
+@end table
+
+@cindex output device name string register (@code{.T})
+@cindex output device usage number register (@code{.T})
+The predefined @code{gtroff} string register @code{.T} contains the
+current output device; the read-only number register @code{.T} is set
+to@tie{}1 if this option is used (which is always true if @code{groff}
+is used to call @code{gtroff}).  @xref{Built-in Registers}.
+
+The postprocessor to be used for a device is specified by the
+@code{postpro} command in the device description file.  (@xref{Font
+Files}, for more info.)  This can be overridden with the @option{-X}
+option.
+
+@item -U
+@cindex mode, unsafe
+@cindex unsafe mode
+Unsafe mode.  This enables the @code{open}, @code{opena}, @code{pso},
+@code{sy}, and @code{pi} requests.
+
+@item -w@var{name}
+Enable warning @var{name}.  Available warnings are described in
+@ref{Debugging}.  Multiple @option{-w} options are allowed.
+
+@item -W@var{name}
+Inhibit warning @var{name}.  Multiple @option{-W} options are allowed.
+
+@item -v
+Make programs run by @code{groff} print out their version number.
+
+@item -V
+Print the pipeline on @code{stdout} instead of executing it.  If
+specified more than once, print the pipeline on @code{stderr} and
+execute it.
+
+@item -X
+Preview with @code{gxditview} instead of using the usual postprocessor.
+This is unlikely to produce good results except with @option{-Tps}.
+
+Note that this is not the same as using @option{-TX75} or
+@option{-TX100} to view a document with @code{gxditview}: The former
+uses the metrics of the specified device, whereas the latter uses
+X-specific fonts and metrics.
+
+@item -z
+Suppress output from @code{gtroff}.  Only error messages are printed.
+
+@item -Z
+Do not postprocess the output of @code{gtroff}.  Normally @code{groff}
+automatically runs the appropriate postprocessor.
+@end table
+
+
+@c =====================================================================
+
+@node Environment, Macro Directories, Groff Options, Invoking groff
+@section Environment
+@cindex environment variables
+@cindex variables in environment
+
+There are also several environment variables (of the operating system,
+not within @code{gtroff}) that can modify the behavior of @code{groff}.
+
+@table @code
+@item GROFF_BIN_PATH
+@tindex GROFF_BIN_PATH@r{, environment variable}
+This search path, followed by @code{PATH}, is used for commands executed
+by @code{groff}.
+
+@item GROFF_COMMAND_PREFIX
+@tindex GROFF_COMMAND_PREFIX@r{, environment variable}
+@cindex command prefix
+@cindex prefix, for commands
+If this is set to@tie{}@var{X}, then @code{groff} runs
+@code{@var{X}troff} instead of @code{gtroff}.  This also applies to
+@code{tbl}, @code{pic}, @code{eqn}, @code{grn}, @code{chem},
+@code{refer}, and @code{soelim}.  It does not apply to @code{grops},
+@code{grodvi}, @code{grotty}, @code{pre-grohtml}, @code{post-grohtml},
+@code{preconv}, @code{grolj4}, @code{gropdf}, and @code{gxditview}.
+
+The default command prefix is determined during the installation
+process.  If a non-GNU troff system is found, prefix @samp{g} is used,
+none otherwise.
+
+@item GROFF_ENCODING
+@tindex GROFF_ENCODING@r{, environment variable}
+The value of this environment value is passed to the @code{preconv}
+preprocessor to select the encoding of input files.  Setting this option
+implies @code{groff}'s command-line option @option{-k} (that is,
+@code{groff} actually always calls @code{preconv}).  If set without a
+value, @code{groff} calls @code{preconv} without arguments.  An explicit
+@option{-K} command-line option overrides the value of
+@env{GROFF_ENCODING}.  See the manual page of @code{preconv} for details.
+
+@item GROFF_FONT_PATH
+@tindex GROFF_FONT_PATH@r{, environment variable}
+A colon-separated list of directories in which to search for the
+@code{dev}@var{name} directory (before the default directories are
+tried).  @xref{Font Directories}.
+
+@item GROFF_TMAC_PATH
+@tindex GROFF_TMAC_PATH@r{, environment variable}
+A colon-separated list of directories in which to search for macro files
+(before the default directories are tried).  @xref{Macro Directories}.
+
+@item GROFF_TMPDIR
+@tindex GROFF_TMPDIR@r{, environment variable}
+@tindex TMPDIR@r{, environment variable}
+The directory in which @code{groff} creates temporary files.  If this is
+not set and @env{TMPDIR} is set, temporary files are created in that
+directory.  Otherwise temporary files are created in a system-dependent
+default directory (on Unix and GNU/Linux systems, this is usually
+@file{/tmp}).  @code{grops}, @code{grefer}, @code{pre-grohtml}, and
+@code{post-grohtml} can create temporary files in this directory.
+
+@item GROFF_TYPESETTER
+@tindex GROFF_TYPESETTER@r{, environment variable}
+The default output device.
+
+@item SOURCE_DATE_EPOCH
+@tindex SOURCE_DATE_EPOCH@r{, environment variable}
+A timestamp (expressed as seconds since the Unix epoch) to use in place of
+the current time when initializing time-based built-in registers such as
+@code{\n[seconds]}.
+@end table
+
+Note that MS-DOS and MS-Windows ports of @code{groff} use semi-colons,
+rather than colons, to separate the directories in the lists described
+above.
+
+
+@c =====================================================================
+
+@node Macro Directories, Font Directories, Environment, Invoking groff
+@section Macro Directories
+@cindex macro directories
+@cindex directories for macros
+@cindex searching macros
+@cindex macros, searching
+
+All macro file names must be named @code{@var{name}.tmac} or
+@code{tmac.@var{name}} to make the @option{-m@var{name}} command-line
+option work.  The @code{mso} request doesn't have this restriction; any
+file name can be used, and @code{gtroff} won't try to append or prepend
+the @samp{tmac} string.
+
+@cindex tmac, directory
+@cindex directory, for tmac files
+@cindex tmac, path
+@cindex path, for tmac files
+@cindex searching macro files
+@cindex macro files, searching
+@cindex files, macro, searching
+Macro files are kept in the @dfn{tmac directories}, all of which
+constitute the @dfn{tmac path}.  The elements of the search path for
+macro files are (in that order):
+
+@itemize @bullet
+@item
+The directories specified with @code{gtroff}'s or @code{groff}'s
+@option{-M} command-line option.
+
+@item
+@tindex GROFF_TMAC_PATH@r{, environment variable}
+The directories given in the @env{GROFF_TMAC_PATH} environment variable.
+
+@item
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+@cindex current directory
+@cindex directory, current
+The current directory (only if in unsafe mode using the @option{-U}
+command-line switch).
+
+@item
+@cindex home directory
+@cindex directory, home
+The home directory.
+
+@item
+@cindex site-specific directory
+@cindex directory, site-specific
+@cindex platform-specific directory
+@cindex directory, platform-specific
+A platform-dependent directory, a site-specific (platform-independent)
+directory, and the main tmac directory; the default locations are
+
+@Example
+/usr/local/lib/groff/site-tmac
+/usr/local/share/groff/site-tmac
+/usr/local/share/groff/1.22.3/tmac
+@endExample
+
+@noindent
+assuming that the version of @code{groff} is 1.22.3, and the
+installation prefix was @file{/usr/local}.  It is possible to fine-tune
+those directories during the installation process.
+@end itemize
+
+
+@c =====================================================================
+
+@node Font Directories, Paper Size, Macro Directories, Invoking groff
+@section Font Directories
+@cindex font directories
+@cindex directories for fonts
+@cindex searching fonts
+@cindex fonts, searching
+
+Basically, there is no restriction how font files for @code{groff} are
+named and how long font names are; however, to make the font family
+mechanism work (@pxref{Font Families}), fonts within a family should
+start with the family name, followed by the shape.  For example, the
+Times family uses @samp{T} for the family name and @samp{R}, @samp{B},
+@samp{I}, and @samp{BI} to indicate the shapes `roman', `bold',
+`italic', and `bold italic', respectively.  Thus the final font names
+are @samp{TR}, @samp{TB}, @samp{TI}, and @samp{TBI}.
+
+@cindex font path
+@cindex path, for font files
+All font files are kept in the @dfn{font directories}, which constitute
+the @dfn{font path}.  The file search functions always append the
+directory @code{dev}@var{name}, where @var{name} is the name of the
+output device.  Assuming, say, DVI output, and @file{/foo/bar} as a font
+directory, the font files for @code{grodvi} must be in
+@file{/foo/bar/devdvi}.
+
+The elements of the search path for font files are (in that order):
+
+@itemize @bullet
+@item
+The directories specified with @code{gtroff}'s or @code{groff}'s
+@option{-F} command-line option.  All device drivers and some
+preprocessors also have this option.
+
+@item
+@tindex GROFF_FONT_PATH@r{, environment variable}
+The directories given in the @env{GROFF_FONT_PATH} environment variable.
+
+@item
+@cindex site-specific directory
+@cindex directory, site-specific
+A site-specific directory and the main font directory; the default
+locations are
+
+@Example
+/usr/local/share/groff/site-font
+/usr/local/share/groff/1.22.3/font
+@endExample
+
+@noindent
+assuming that the version of @code{groff} is 1.22.3, and the
+installation prefix was @file{/usr/local}.  It is possible to fine-tune
+those directories during the installation process.
+@end itemize
+
+
+@c =====================================================================
+
+@node Paper Size, Invocation Examples, Font Directories, Invoking groff
+@section Paper Size
+@cindex paper size
+@cindex size, paper
+@cindex landscape page orientation
+@cindex orientation, landscape
+@cindex page orientation, landscape
+
+In groff, the page size for @code{gtroff} and for output devices are
+handled separately.  @xref{Page Layout}, for vertical manipulation of
+the page size.  @xref{Line Layout}, for horizontal changes.
+
+A default paper size can be set in the device's @file{DESC} file.  Most
+output devices also have a command-line option @option{-p} to override
+the default paper size and option @option{-l} to use landscape
+orientation.  @xref{DESC File Format}, for a description of the
+@code{papersize} keyword, which takes the same argument as @option{-p}.
+
+@pindex papersize.tmac
+@pindex troffrc
+A convenient shorthand to set a particular paper size for @code{gtroff}
+is command-line option @option{-dpaper=@var{size}}.  This defines string
+@code{paper}, which is processed in file @file{papersize.tmac} (loaded in
+the start-up file @file{troffrc} by default).  Possible values for
+@var{size} are the same as the predefined values for the
+@code{papersize} keyword (but only in lowercase) except
+@code{a7}--@code{d7}.  An appended @samp{l} (ell) character denotes
+landscape orientation.
+
+For example, use the following for PS output on A4 paper in landscape
+orientation:
+
+@Example
+groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
+@endExample
+
+Note that it is up to the particular macro package to respect default
+page dimensions set in this way (most do).
+
+
+@c =====================================================================
+
+@node Invocation Examples,  , Paper Size, Invoking groff
+@section Invocation Examples
+@cindex invocation examples
+@cindex examples of invocation
+
+This section lists several common uses of @code{groff} and the
+corresponding command lines.
+
+@Example
+groff file
+@endExample
+
+@noindent
+This command processes @file{file} without a macro package or a
+preprocessor.  The output device is the default, @samp{ps}, and the
+output is sent to @code{stdout}.
+
+@Example
+groff -t -mandoc -Tascii file | less
+@endExample
+
+@noindent
+This is basically what a call to the @code{man} program does.
+@code{gtroff} processes the manual page @file{file} with the
+@file{mandoc} macro file (which in turn either calls the @file{man} or
+the @file{mdoc} macro package), using the @code{tbl} preprocessor and
+the @acronym{ASCII} output device.  Finally, the @code{less} pager
+displays the result.
+
+@Example
+groff -X -m me file
+@endExample
+
+@noindent
+Preview @file{file} with @code{gxditview}, using the @file{me} macro
+package.  Since no @option{-T} option is specified, use the default
+device (@samp{ps}).  Note that you can either say @w{@samp{-m me}} or
+@w{@samp{-me}}; the latter is an anachronism from the early days of
+Unix.@footnote{The same is true for the other main macro packages that
+come with @code{groff}: @file{man}, @file{mdoc}, @file{ms}, @file{mm},
+and @file{mandoc}.  This won't work in general; for example, to load
+@file{trace.tmac}, either @samp{-mtrace} or @w{@samp{-m trace}} must be
+used.}
+
+@Example
+groff -man -rD1 -z file
+@endExample
+
+@noindent
+Check @file{file} with the @file{man} macro package, forcing
+double-sided printing -- don't produce any output.
+
+@menu
+* grog::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node grog,  , Invocation Examples, Invocation Examples
+@subsection @code{grog}
+
+@pindex grog
+@code{grog} reads files, guesses which of the @code{groff} preprocessors
+and/or macro packages are required for formatting them, and prints the
+@code{groff} command including those options on the standard output.  It
+generates one or more of the options @option{-e}, @option{-man},
+@option{-me}, @option{-mm}, @option{-mom}, @option{-ms}, @option{-mdoc},
+@option{-mdoc-old}, @option{-p}, @option{-R}, @option{-g}, @option{-G},
+@option{-s}, and @option{-t}.
+
+A special file name@tie{}@file{-} refers to the standard input.
+Specifying no files also means to read the standard input.  Any
+specified options are included in the printed command.  No space is
+allowed between options and their arguments.  The only options
+recognized are @option{-C} (which is also passed on) to enable
+compatibility mode, and @option{-v} to print the version number and
+exit.
+
+For example,
+
+@Example
+grog -Tdvi paper.ms
+@endExample
+
+@noindent
+guesses the appropriate command to print @file{paper.ms} and then prints
+it to the command line after adding the @option{-Tdvi} option.  For
+direct execution, enclose the call to @code{grog} in backquotes at the
+Unix shell prompt:
+
+@Example
+`grog -Tdvi paper.ms` > paper.dvi
+@endExample
+
+@noindent
+As seen in the example, it is still necessary to redirect the output to
+something meaningful (i.e.@: either a file or a pager program like
+@code{less}).
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Tutorial for Macro Users, Macro Packages, Invoking groff, Top
+@chapter Tutorial for Macro Users
+@cindex tutorial for macro users
+@cindex macros, tutorial for users
+@cindex user's tutorial for macros
+@cindex user's macro tutorial
+
+Most users tend to use a macro package to format their papers.  This
+means that the whole breadth of @code{groff} is not necessary for most
+people.  This chapter covers the material needed to efficiently use a
+macro package.
+
+@menu
+* Basics::
+* Common Features::
+@end menu
+
+
+@c =====================================================================
+
+@node Basics, Common Features, Tutorial for Macro Users, Tutorial for Macro Users
+@section Basics
+@cindex basics of macros
+@cindex macro basics
+
+This section covers some of the basic concepts necessary to understand
+how to use a macro package.@footnote{This section is derived from
+@cite{Writing Papers with nroff using -me} by Eric P.@tie{}Allman.}
+References are made throughout to more detailed information, if desired.
+
+@code{gtroff} reads an input file prepared by the user and outputs a
+formatted document suitable for publication or framing.  The input
+consists of text, or words to be printed, and embedded commands
+(@dfn{requests} and @dfn{escapes}), which tell @code{gtroff} how to
+format the output.  For more detail on this, see @ref{Embedded
+Commands}.
+
+The word @dfn{argument} is used in this chapter to mean a word or number
+that appears on the same line as a request, and which modifies the
+meaning of that request.  For example, the request
+
+@Example
+.sp
+@endExample
+
+@noindent
+spaces one line, but
+
+@Example
+.sp 4
+@endExample
+
+@noindent
+spaces four lines.  The number@tie{}4 is an argument to the @code{sp}
+request, which says to space four lines instead of one.  Arguments are
+separated from the request and from each other by spaces (@emph{no}
+tabs).  More details on this can be found in @ref{Request and Macro
+Arguments}.
+
+The primary function of @code{gtroff} is to collect words from input
+lines, fill output lines with those words, justify the right-hand margin
+by inserting extra spaces in the line, and output the result.  For
+example, the input:
+
+@Example
+Now is the time
+for all good men
+to come to the aid
+of their party.
+Four score and seven
+years ago, etc.
+@endExample
+
+@noindent
+is read, packed onto output lines, and justified to produce:
+
+@quotation
+Now is the time for all good men to come to the aid of their party.
+Four score and seven years ago, etc.
+@end quotation
+
+@cindex break
+@cindex line break
+Sometimes a new output line should be started even though the current
+line is not yet full; for example, at the end of a paragraph.  To do
+this it is possible to cause a @dfn{break}, which starts a new output
+line.  Some requests cause a break automatically, as normally do blank
+input lines and input lines beginning with a space.
+
+Not all input lines are text to be formatted.  Some input lines are
+requests that describe how to format the text.  Requests always have a
+period (@samp{.}) or an apostrophe (@samp{'}) as the first character of
+the input line.
+
+The text formatter also does more complex things, such as automatically
+numbering pages, skipping over page boundaries, putting footnotes in the
+correct place, and so forth.
+
+Here are a few hints for preparing text for input to @code{gtroff}.
+
+@itemize @bullet
+@item
+First, keep the input lines short.  Short input lines are easier to
+edit, and @code{gtroff} packs words onto longer lines anyhow.
+
+@item
+In keeping with this, it is helpful to begin a new line after every
+comma or phrase, since common corrections are to add or delete sentences
+or phrases.
+
+@item
+End each sentence with two spaces -- or better, start each sentence on a
+new line.  @code{gtroff} recognizes characters that usually end a
+sentence, and inserts sentence space accordingly.
+
+@item
+Do not hyphenate words at the end of lines -- @code{gtroff} is smart
+enough to hyphenate words as needed, but is not smart enough to take
+hyphens out and join a word back together.  Also, words such as
+``mother-in-law'' should not be broken over a line, since then a space
+can occur where not wanted, such as ``@w{mother- in}-law''.
+@end itemize
+
+@cindex double-spacing (@code{ls})
+@cindex spacing
+@code{gtroff} double-spaces output text automatically if you use the
+request @w{@samp{.ls 2}}.  Reactivate single-spaced mode by typing
+@w{@samp{.ls 1}}.@footnote{If you need finer granularity of the vertical
+space, use the @code{pvs} request (@pxref{Changing Type Sizes}).}
+
+A number of requests allow to change the way the output looks, sometimes
+called the @dfn{layout} of the output page.  Most of these requests
+adjust the placing of @dfn{whitespace} (blank lines or spaces).
+
+@cindex new page (@code{bp})
+The @code{bp} request starts a new page, causing a line break.
+
+@cindex blank line (@code{sp})
+@cindex empty line (@code{sp})
+@cindex line, empty (@code{sp})
+The request @w{@samp{.sp @var{N}}} leaves @var{N}@tie{}lines of blank
+space.  @var{N}@tie{}can be omitted (meaning skip a single line) or can
+be of the form @var{N}i (for @var{N}@tie{}inches) or @var{N}c (for
+@var{N}@tie{}centimeters).  For example, the input:
+
+@Example
+.sp 1.5i
+My thoughts on the subject
+.sp
+@endExample
+
+@noindent
+leaves one and a half inches of space, followed by the line ``My
+thoughts on the subject'', followed by a single blank line (more
+measurement units are available, see @ref{Measurements}).
+
+@cindex centering lines (@code{ce})
+@cindex lines, centering (@code{ce})
+Text lines can be centered by using the @code{ce} request.  The line
+after @code{ce} is centered (horizontally) on the page.  To center more
+than one line, use @w{@samp{.ce @var{N}}} (where @var{N} is the number
+of lines to center), followed by the @var{N}@tie{}lines.  To center many
+lines without counting them, type:
+
+@Example
+.ce 1000
+lines to center
+.ce 0
+@endExample
+
+@noindent
+The @w{@samp{.ce 0}} request tells @code{groff} to center zero more
+lines, in other words, stop centering.
+
+@cindex line break (@code{br})
+@cindex break (@code{br})
+All of these requests cause a break; that is, they always start a new
+line.  To start a new line without performing any other action, use
+@code{br}.
+
+
+@c =====================================================================
+
+@node Common Features,  , Basics, Tutorial for Macro Users
+@section Common Features
+@cindex common features
+@cindex features, common
+
+@code{gtroff} provides very low-level operations for formatting a
+document.  There are many common routine operations that are done in
+all documents.  These common operations are written into @dfn{macros}
+and collected into a @dfn{macro package}.
+
+All macro packages provide certain common capabilities that fall into
+the following categories.
+
+@menu
+* Paragraphs::
+* Sections and Chapters::
+* Headers and Footers::
+* Page Layout Adjustment::
+* Displays::
+* Footnotes and Annotations::
+* Table of Contents::
+* Indices::
+* Paper Formats::
+* Multiple Columns::
+* Font and Size Changes::
+* Predefined Strings::
+* Preprocessor Support::
+* Configuration and Customization::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Paragraphs, Sections and Chapters, Common Features, Common Features
+@subsection Paragraphs
+@cindex paragraphs
+
+One of the most common and most used capability is starting a paragraph.
+There are a number of different types of paragraphs, any of which can be
+initiated with macros supplied by the macro package.  Normally,
+paragraphs start with a blank line and the first line indented, like the
+text in this manual.  There are also block style paragraphs, which omit
+the indentation:
+
+@Example
+Some   men  look   at  constitutions   with  sanctimonious
+reverence, and deem them like the ark of the covenant, too
+sacred to be touched.
+@endExample
+
+@noindent
+And there are also indented paragraphs, which begin with a tag or label
+at the margin and the remaining text indented.
+
+@Example
+one   This is  the first paragraph.  Notice  how the first
+      line of  the resulting  paragraph lines up  with the
+      other lines in the paragraph.
+@endExample
+
+@Example
+longlabel
+      This  paragraph   had  a  long   label.   The  first
+      character of text on the first line does not line up
+      with  the  text  on  second  and  subsequent  lines,
+      although they line up with each other.
+@endExample
+
+A variation of this is a bulleted list.
+
+@Example
+.     Bulleted lists start with a bullet.   It is possible
+      to use other glyphs instead of the bullet.  In nroff
+      mode using the ASCII character set for output, a dot
+      is used instead of a real bullet.
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Sections and Chapters, Headers and Footers, Paragraphs, Common Features
+@subsection Sections and Chapters
+
+Most macro packages supply some form of section headers.  The simplest
+kind is simply the heading on a line by itself in bold type.  Others
+supply automatically numbered section heading or different heading
+styles at different levels.  Some, more sophisticated, macro packages
+supply macros for starting chapters and appendices.
+
+@c ---------------------------------------------------------------------
+
+@node Headers and Footers, Page Layout Adjustment, Sections and Chapters, Common Features
+@subsection Headers and Footers
+
+Every macro package gives some way to manipulate the @dfn{headers} and
+@dfn{footers} (also called @dfn{titles}) on each page.  This is text put
+at the top and bottom of each page, respectively, which contain data
+like the current page number, the current chapter title, and so on.  Its
+appearance is not affected by the running text.  Some packages allow for
+different ones on the even and odd pages (for material printed in a book
+form).
+
+The titles are called @dfn{three-part titles}, that is, there is a
+left-justified part, a centered part, and a right-justified part.  An
+automatically generated page number may be put in any of these fields
+with the @samp{%} character (see @ref{Page Layout}, for more details).
+
+@c ---------------------------------------------------------------------
+
+@node Page Layout Adjustment, Displays, Headers and Footers, Common Features
+@subsection Page Layout
+
+Most macro packages let the user specify top and bottom margins and
+other details about the appearance of the printed pages.
+
+@c ---------------------------------------------------------------------
+
+@node Displays, Footnotes and Annotations, Page Layout Adjustment, Common Features
+@subsection Displays
+@cindex displays
+
+@dfn{Displays} are sections of text to be set off from the body of the
+paper.  Major quotes, tables, and figures are types of displays, as are
+all the examples used in this document.
+
+@cindex quotes, major
+@cindex major quotes
+@dfn{Major quotes} are quotes that are several lines long, and hence
+are set in from the rest of the text without quote marks around them.
+
+@cindex list
+A @dfn{list} is an indented, single-spaced, unfilled display.  Lists
+should be used when the material to be printed should not be filled and
+justified like normal text, such as columns of figures or the examples
+used in this paper.
+
+@cindex keep
+A @dfn{keep} is a display of lines that are kept on a single page if
+possible.  An example for a keep might be a diagram.  Keeps differ from
+lists in that lists may be broken over a page boundary whereas keeps are
+not.
+
+@cindex keep, floating
+@cindex floating keep
+@dfn{Floating keeps} move relative to the text.  Hence, they are good
+for things that are referred to by name, such as ``See figure@tie{}3''.
+A floating keep appears at the bottom of the current page if it fits;
+otherwise, it appears at the top of the next page.  Meanwhile, the
+surrounding text `flows' around the keep, thus leaving no blank areas.
+
+@c ---------------------------------------------------------------------
+
+@node Footnotes and Annotations, Table of Contents, Displays, Common Features
+@subsection Footnotes and Annotations
+@cindex footnotes
+@cindex annotations
+
+There are a number of requests to save text for later printing.
+
+@dfn{Footnotes} are printed at the bottom of the current page.
+
+@cindex delayed text
+@dfn{Delayed text} is very similar to a footnote except that it is
+printed when called for explicitly.  This allows a list of references to
+appear (for example) at the end of each chapter, as is the convention in
+some disciplines.
+
+Most macro packages that supply this functionality also supply a means
+of automatically numbering either type of annotation.
+
+@c ---------------------------------------------------------------------
+
+@node Table of Contents, Indices, Footnotes and Annotations, Common Features
+@subsection Table of Contents
+@cindex table of contents
+@cindex contents, table of
+
+@dfn{Tables of contents} are a type of delayed text having a tag
+(usually the page number) attached to each entry after a row of dots.
+The table accumulates throughout the paper until printed, usually after
+the paper has ended.  Many macro packages provide the ability to have
+several tables of contents (e.g.@: a standard table of contents, a list
+of tables, etc).
+
+@c ---------------------------------------------------------------------
+
+@node Indices, Paper Formats, Table of Contents, Common Features
+@subsection Indices
+@cindex index, in macro package
+
+While some macro packages use the term @dfn{index}, none actually
+provide that functionality.  The facilities they call indices are
+actually more appropriate for tables of contents.
+
+@pindex makeindex
+To produce a real index in a document, external tools like the
+@code{makeindex} program are necessary.
+
+@c ---------------------------------------------------------------------
+
+@node Paper Formats, Multiple Columns, Indices, Common Features
+@subsection Paper Formats
+@cindex paper formats
+
+Some macro packages provide stock formats for various kinds of
+documents.  Many of them provide a common format for the title and
+opening pages of a technical paper.  The @file{mm} macros in particular
+provide formats for letters and memoranda.
+
+@c ---------------------------------------------------------------------
+
+@node Multiple Columns, Font and Size Changes, Paper Formats, Common Features
+@subsection Multiple Columns
+
+Some macro packages (but not @file{man}) provide the ability to have two
+or more columns on a page.
+
+@c ---------------------------------------------------------------------
+
+@node Font and Size Changes, Predefined Strings, Multiple Columns, Common Features
+@subsection Font and Size Changes
+
+The built-in font and size functions are not always intuitive, so all
+macro packages provide macros to make these operations simpler.
+
+@c ---------------------------------------------------------------------
+
+@node Predefined Strings, Preprocessor Support, Font and Size Changes, Common Features
+@subsection Predefined Strings
+
+Most macro packages provide various predefined strings for a variety of
+uses; examples are sub- and superscripts, printable dates, quotes and
+various special characters.
+
+@c ---------------------------------------------------------------------
+
+@node Preprocessor Support, Configuration and Customization, Predefined Strings, Common Features
+@subsection Preprocessor Support
+
+All macro packages provide support for various preprocessors and may
+extend their functionality.
+
+For example, all macro packages mark tables (which are processed with
+@code{gtbl}) by placing them between @code{TS} and @code{TE} macros.
+The @file{ms} macro package has an option, @samp{.TS@tie{}H}, that
+prints a caption at the top of a new page (when the table is too long to
+fit on a single page).
+
+@c ---------------------------------------------------------------------
+
+@node Configuration and Customization,  , Preprocessor Support, Common Features
+@subsection Configuration and Customization
+
+Some macro packages provide means of customizing many of the details of
+how the package behaves.  This ranges from setting the default type size
+to changing the appearance of section headers.
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Macro Packages, gtroff Reference, Tutorial for Macro Users, Top
+@chapter Macro Packages
+@cindex macro packages
+@cindex packages, macros
+
+This chapter documents the main macro packages that come with
+@code{groff}.
+
+Different main macro packages can't be used at the same time; for
+example
+
+@Example
+groff -m man foo.man -m ms bar.doc
+@endExample
+
+@noindent
+doesn't work.  Note that option arguments are processed before
+non-option arguments; the above (failing) sample is thus reordered to
+
+@Example
+groff -m man -m ms foo.man bar.doc
+@endExample
+
+@menu
+* man::
+* mdoc::
+* ms::
+* me::
+* mm::
+* mom::
+@end menu
+
+
+@c =====================================================================
+
+@node man, mdoc, Macro Packages, Macro Packages
+@section @file{man}
+@cindex manual pages
+@cindex man pages
+@pindex an.tmac
+@pindex man.tmac
+@pindex man-old.tmac
+
+This is the most popular and probably the most important macro package
+of @code{groff}.  It is easy to use, and a vast majority of manual pages
+are based on it.
+
+@menu
+* Man options::
+* Man usage::
+* Man font macros::
+* Miscellaneous man macros::
+* Predefined man strings::
+* Preprocessors in man pages::
+* Optional man extensions::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Man options, Man usage, man, man
+@subsection Options
+
+The command-line format for using the @file{man} macros with
+@code{groff} is:
+
+@Example
+groff -m man [ -rLL=@var{length} ] [ -rLT=@var{length} ] [ -rFT=@var{dist} ]
+      [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=@var{flags} ]
+      [ -rP@var{nnn} ] [ -rS@var{xx} ] [ -rX@var{nnn} ]
+      [ -rIN=@var{length} ] [ -rSN=@var{length} ] [ @var{files}@dots{} ]
+@endExample
+
+@noindent
+It is possible to use @samp{-man} instead of @w{@samp{-m man}}.
+
+@table @code
+@item -rcR=1
+This option (the default if a TTY output device is used) creates a
+single, very long page instead of multiple pages.  Use @code{-rcR=0} to
+disable it.
+
+@item -rC1
+If more than one manual page is given on the command line, number the
+pages continuously, rather than starting each at@tie{}1.
+
+@item -rD1
+Double-sided printing.  Footers for even and odd pages are formatted
+differently.
+
+@item -rFT=@var{dist}
+Set the position of the footer text to @var{dist}.  If positive, the
+distance is measured relative to the top of the page, otherwise it is
+relative to the bottom.  The default is @minus{}0.5@dmn{i}.
+
+@item -rHY=@var{flags}
+Set hyphenation flags.  Possible values are 1@tie{}to hyphenate without
+restrictions, 2@tie{}to not hyphenate the last word on a page, 4@tie{}to
+not hyphenate the last two characters of a word, and 8@tie{}to not
+hyphenate the first two characters of a word.  These values are
+additive; the default is@tie{}8.
+
+@item -rIN=@var{length}
+Set the body text indentation to @var{length}.  If not specified, the
+indentation defaults to 7@dmn{n} (7@tie{}characters) in nroff mode and
+7.2@dmn{n} otherwise.  For nroff, this value should always be an integer
+multiple of unit @samp{n} to get consistent indentation.
+
+@item -rLL=@var{length}
+Set line length to @var{length}.  If not specified, the line length is
+set to respect any value set by a prior @samp{ll} request (which
+@emph{must} be in effect when the @samp{TH} macro is invoked), if this
+differs from the built-in default for the formatter; otherwise it
+defaults to 78@dmn{n} in nroff mode (this is 78 characters per line) and
+6.5@dmn{i} in troff mode.@footnote{Note that the use of a @samp{.ll
+@var{length}} request to initialize the line length, prior to use of the
+@samp{TH} macro, is supported for backward compatibility with some
+versions of the @code{man} program.  @emph{Always} use the
+@option{-rLL=@var{length}} option, or an equivalent @samp{.nr LL
+@var{length}} request, in preference to such a @samp{.ll @var{length}}
+request.  In particular, note that in nroff mode, the request @samp{.ll
+65n}, (with any @var{length} expression that evaluates equal to
+65@dmn{n}, i.e., the formatter's default line length in nroff mode),
+does @emph{not} set the line length to 65@dmn{n} (it is adjusted to the
+@code{man} macro package's default setting of 78@dmn{n}), whereas the
+use of the @option{-rLL=65n} option, or the @samp{.nr LL 65n} request
+@emph{does} establish a line length of 65@dmn{n}.}
+
+@item -rLT=@var{length}
+Set title length to @var{length}.  If not specified, the title length
+defaults to the line length.
+
+@item -rP@var{nnn}
+Page numbering starts with @var{nnn} rather than with@tie{}1.
+
+@item -rS@var{xx}
+Use @var{xx} (which can be 10, 11, or@tie{}12@dmn{pt}) as the base
+document font size instead of the default value of@tie{}10@dmn{pt}.
+
+@item -rSN=@var{length}
+Set the indentation for sub-subheadings to @var{length}.  If not
+specified, the indentation defaults to 3@dmn{n}.
+
+@item -rX@var{nnn}
+After page @var{nnn}, number pages as @var{nnn}a, @var{nnn}b,
+@var{nnn}c, etc.  For example, the option @option{-rX2} produces the
+following page numbers: 1, 2, 2a, 2b, 2c, etc.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Man usage, Man font macros, Man options, man
+@subsection Usage
+@cindex @code{man} macros
+@cindex macros for manual pages [@code{man}]
+
+@pindex man.local
+This section describes the available macros for manual pages.  For
+further customization, put additional macros and requests into the file
+@file{man.local}, which is loaded immediately after the @file{man}
+package.
+
+@Defmac {TH, title section [@Var{extra1} [@Var{extra2} [@Var{extra3}]]], man}
+Set the title of the man page to @var{title} and the section to
+@var{section}, which must have a value between 1 and@tie{}8.  The value
+of @var{section} may also have a string appended, e.g.@: @samp{.pm}, to
+indicate a specific subsection of the man pages.
+
+Both @var{title} and @var{section} are positioned at the left and right
+in the header line (with @var{section} in parentheses immediately
+appended to @var{title}.  @var{extra1} is positioned in the middle of
+the footer line.  @var{extra2} is positioned at the left in the footer
+line (or at the left on even pages and at the right on odd pages if
+double-sided printing is active).  @var{extra3} is centered in the
+header line.
+
+For @acronym{HTML} and @acronym{XHTML} output, headers and footers are
+completely suppressed.
+
+Additionally, this macro starts a new page; the new line number
+is@tie{}1 again (except if the @option{-rC1} option is given on the
+command line) -- this feature is intended only for formatting multiple
+man pages; a single man page should contain exactly one @code{TH} macro
+at the beginning of the file.
+@endDefmac
+
+@Defmac {SH, [@Var{heading}], man}
+Set up an unnumbered section heading sticking out to the left.  Prints
+out all the text following @code{SH} up to the end of the line (or the
+text in the next line if there is no argument to @code{SH}) in bold face
+(or the font specified by the string @code{HF}), one size larger than
+the base document size.  Additionally, the left margin and the
+indentation for the following text is reset to its default value.
+@endDefmac
+
+@Defmac {SS, [@Var{heading}], man}
+Set up an unnumbered (sub)section heading.  Prints out all the text
+following @code{SS} up to the end of the line (or the text in the next
+line if there is no argument to @code{SS}) in bold face (or the font
+specified by the string @code{HF}), at the same size as the base
+document size.  Additionally, the left margin and the indentation for
+the following text is reset to its default value.
+@endDefmac
+
+@Defmac {TP, [@Var{nnn}], man}
+Set up an indented paragraph with label.  The indentation is set to
+@var{nnn} if that argument is supplied (the default unit is @samp{n} if
+omitted), otherwise it is set to the previous indentation value
+specified with @code{TP}, @code{IP}, or @code{HP} (or to the default
+value if none of them have been used yet).
+
+The first line of text following this macro is interpreted as a string
+to be printed flush-left, as it is appropriate for a label.  It is not
+interpreted as part of a paragraph, so there is no attempt to fill the
+first line with text from the following input lines.  Nevertheless, if
+the label is not as wide as the indentation the paragraph starts at the
+same line (but indented), continuing on the following lines.  If the
+label is wider than the indentation the descriptive part of the
+paragraph begins on the line following the label, entirely indented.
+Note that neither font shape nor font size of the label is set to a
+default value; on the other hand, the rest of the text has default font
+settings.
+@endDefmac
+
+@DefmacList {LP, , man}
+@DefmacItemx {PP, , man}
+@DefmacListEndx {P, , man}
+These macros are mutual aliases.  Any of them causes a line break at the
+current position, followed by a vertical space downwards by the amount
+specified by the @code{PD} macro.  The font size and shape are reset to
+the default value (10@dmn{pt} roman if no @option{-rS} option is given
+on the command line).  Finally, the current left margin and the
+indentation is restored.
+@endDefmac
+
+@Defmac {IP, [@Var{designator} [@Var{nnn}]], man}
+Set up an indented paragraph, using @var{designator} as a tag to mark
+its beginning.  The indentation is set to @var{nnn} if that argument is
+supplied (default unit is @samp{n}), otherwise it is set to the previous
+indentation value specified with @code{TP}, @code{IP}, or @code{HP} (or
+the default value if none of them have been used yet).  Font size and
+face of the paragraph (but not the designator) are reset to their
+default values.
+
+To start an indented paragraph with a particular indentation but without
+a designator, use @samp{""} (two double quotes) as the first argument of
+@code{IP}.
+
+For example, to start a paragraph with bullets as the designator and
+4@tie{}en indentation, write
+
+@Example
+.IP \(bu 4
+@endExample
+@endDefmac
+
+@Defmac {HP, [@Var{nnn}], man}
+@cindex hanging indentation [@code{man}]
+@cindex @code{man} macros, hanging indentation
+Set up a paragraph with hanging left indentation.  The indentation is
+set to @var{nnn} if that argument is supplied (default unit is
+@samp{n}), otherwise it is set to the previous indentation value
+specified with @code{TP}, @code{IP}, or @code{HP} (or the default value
+if non of them have been used yet).  Font size and face are reset to
+their default values.
+@endDefmac
+
+@Defmac {RS, [@Var{nnn}], man}
+@cindex left margin, how to move [@code{man}]
+@cindex @code{man} macros, moving left margin
+Move the left margin to the right by the value @var{nnn} if specified
+(default unit is @samp{n}); otherwise it is set to the previous
+indentation value specified with @code{TP}, @code{IP}, or @code{HP} (or
+to the default value if none of them have been used yet).  The
+indentation value is then set to the default.
+
+Calls to the @code{RS} macro can be nested.
+@endDefmac
+
+@Defmac {RE, [@Var{nnn}], man}
+Move the left margin back to level @var{nnn}, restoring the previous
+left margin.  If no argument is given, it moves one level back.  The
+first level (i.e., no call to @code{RS} yet) has number@tie{}1, and each
+call to @code{RS} increases the level by@tie{}1.
+@endDefmac
+
+@cindex line breaks, with vertical space [@code{man}]
+@cindex @code{man} macros, line breaks with vertical space
+To summarize, the following macros cause a line break with the insertion
+of vertical space (which amount can be changed with the @code{PD}
+macro): @code{SH}, @code{SS}, @code{TP}, @code{LP} (@code{PP},
+@code{P}), @code{IP}, and @code{HP}.
+
+@cindex line breaks, without vertical space [@code{man}]
+@cindex @code{man} macros, line breaks without vertical space
+The macros @code{RS} and @code{RE} also cause a break but do not insert
+vertical space.
+
+@cindex default indentation, resetting [@code{man}]
+@cindex indentation, resetting to default [@code{man}]
+@cindex @code{man} macros, resetting default indentation
+Finally, the macros @code{SH}, @code{SS}, @code{LP} (@code{PP},
+@code{P}), and @code{RS} reset the indentation to its default value.
+
+@c ---------------------------------------------------------------------
+
+@node Man font macros, Miscellaneous man macros, Man usage, man
+@subsection Macros to set fonts
+@cindex font selection [@code{man}]
+@cindex @code{man} macros, how to set fonts
+
+The standard font is roman; the default text size is 10@tie{}points.  If
+command-line option @option{-rS=@var{n}} is given, use
+@var{n}@tie{}points as the default text size.
+
+@Defmac {SM, [@Var{text}], man}
+Set the text on the same line or the text on the next line in a font
+that is one point size smaller than the default font.
+@endDefmac
+
+@Defmac {SB, [@Var{text}], man}
+@cindex bold face [@code{man}]
+@cindex @code{man} macros, bold face
+Set the text on the same line or the text on the next line in bold face
+font, one point size smaller than the default font.
+@endDefmac
+
+@Defmac {BI, text, man}
+Set its arguments alternately in bold face and italic, without a space
+between the arguments.  Thus,
+
+@Example
+.BI this "word and" that
+@endExample
+
+@noindent
+produces ``thisword andthat'' with ``this'' and ``that'' in bold face,
+and ``word and'' in italics.
+@endDefmac
+
+@Defmac {IB, text, man}
+Set its arguments alternately in italic and bold face, without a space
+between the arguments.
+@endDefmac
+
+@Defmac {RI, text, man}
+Set its arguments alternately in roman and italic, without a space
+between the arguments.
+@endDefmac
+
+@Defmac {IR, text, man}
+Set its arguments alternately in italic and roman, without a space
+between the arguments.
+@endDefmac
+
+@Defmac {BR, text, man}
+Set its arguments alternately in bold face and roman, without a space
+between the arguments.
+@endDefmac
+
+@Defmac {RB, text, man}
+Set its arguments alternately in roman and bold face, without a space
+between the arguments.
+@endDefmac
+
+@Defmac {B, [@Var{text}], man}
+Set @var{text} in bold face.  If no text is present on the line where
+the macro is called, then the text of the next line appears in bold
+face.
+@endDefmac
+
+@Defmac {I, [@Var{text}], man}
+@cindex italic fonts [@code{man}]
+@cindex @code{man} macros, italic fonts
+Set @var{text} in italic.  If no text is present on the line where the
+macro is called, then the text of the next line appears in italic.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node Miscellaneous man macros, Predefined man strings, Man font macros, man
+@subsection Miscellaneous macros
+
+@pindex grohtml
+@cindex @code{man} macros, default indentation
+@cindex default indentation [@code{man}]
+The default indentation is 7.2@dmn{n} in troff mode and 7@dmn{n} in
+nroff mode except for @code{grohtml}, which ignores indentation.
+
+@Defmac {DT, , man}
+@cindex tab stops [@code{man}]
+@cindex @code{man} macros, tab stops
+Set tabs every 0.5@tie{}inches.  Since this macro is always executed
+during a call to the @code{TH} macro, it makes sense to call it only if
+the tab positions have been changed.
+@endDefmac
+
+@Defmac {PD, [@Var{nnn}], man}
+@cindex empty space before a paragraph [@code{man}]
+@cindex @code{man} macros, empty space before a paragraph
+Adjust the empty space before a new paragraph (or section).  The
+optional argument gives the amount of space (default unit is @samp{v});
+without parameter, the value is reset to its default value (1@tie{}line
+in nroff mode, 0.4@dmn{v}@tie{}otherwise).
+
+This affects the macros @code{SH}, @code{SS}, @code{TP}, @code{LP} (as
+well as @code{PP} and @code{P}), @code{IP}, and @code{HP}.
+@endDefmac
+
+The following two macros are included for BSD compatibility.
+
+@Defmac {AT, [@Var{system} [@Var{release}]], man}
+@cindex @code{man}macros, BSD compatibility
+Alter the footer for use with @acronym{AT&T} manpages.  This command
+exists only for compatibility; don't use it.  The first argument
+@var{system} can be:
+
+@table @code
+@item 3
+7th Edition (the default)
+
+@item 4
+System III
+
+@item 5
+System V
+@end table
+
+An optional second argument @var{release} to @code{AT} specifies the
+release number (such as ``System V Release 3'').
+@endDefmac
+
+@Defmac {UC, [@Var{version}], man}
+@cindex @code{man}macros, BSD compatibility
+Alters the footer for use with BSD manpages.  This command exists only
+for compatibility; don't use it.  The argument can be:
+
+@table @code
+@item 3
+3rd Berkeley Distribution (the default)
+
+@item 4
+4th Berkeley Distribution
+
+@item 5
+4.2 Berkeley Distribution
+
+@item 6
+4.3 Berkeley Distribution
+
+@item 7
+4.4 Berkeley Distribution
+@end table
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node Predefined man strings, Preprocessors in man pages, Miscellaneous man macros, man
+@subsection Predefined strings
+
+The following strings are defined:
+
+@Defstr {S, man}
+Switch back to the default font size.
+@endDefstr
+
+@Defstr {HF, man}
+The typeface used for headings.
+The default is @samp{B}.
+@endDefstr
+
+@Defstr {R, man}
+The `registered' sign.
+@endDefstr
+
+@Defstr {Tm, man}
+The `trademark' sign.
+@endDefstr
+
+@DefstrList {lq, man}
+@DefstrListEndx {rq, man}
+@cindex @code{lq} glyph, and @code{lq} string [@code{man}]
+@cindex @code{rq} glyph, and @code{rq} string [@code{man}]
+Left and right quote.  This is equal to @code{\(lq} and @code{\(rq},
+respectively.
+@endDefstr
+
+@c ---------------------------------------------------------------------
+
+@node Preprocessors in man pages, Optional man extensions, Predefined man strings, man
+@subsection Preprocessors in @file{man} pages
+
+@cindex preprocessor, calling convention
+@cindex calling convention of preprocessors
+If a preprocessor like @code{gtbl} or @code{geqn} is needed, it has
+become common usage to make the first line of the man page look like
+this:
+
+@Example
+'\" @var{word}
+@endExample
+
+@pindex geqn@r{, invocation in manual pages}
+@pindex grefer@r{, invocation in manual pages}
+@pindex gtbl@r{, invocation in manual pages}
+@pindex man@r{, invocation of preprocessors}
+@noindent
+Note the single space character after the double quote.  @var{word}
+consists of letters for the needed preprocessors: @samp{e} for
+@code{geqn}, @samp{r} for @code{grefer}, @samp{t} for @code{gtbl}.
+Modern implementations of the @code{man} program read this first line
+and automatically call the right preprocessor(s).
+
+@c ---------------------------------------------------------------------
+
+@node Optional man extensions,  , Preprocessors in man pages, man
+@subsection Optional @file{man} extensions
+
+@pindex man.local
+Use the file @file{man.local} for local extensions to the @code{man}
+macros or for style changes.
+
+@unnumberedsubsubsec Custom headers and footers
+@cindex @code{man} macros, custom headers and footers
+
+In groff versions 1.18.2 and later, you can specify custom headers and
+footers by redefining the following macros in @file{man.local}.
+
+@Defmac {PT, , man}
+Control the content of the headers.  Normally, the header prints the
+command name and section number on either side, and the optional fifth
+argument to @code{TH} in the center.
+@endDefmac
+
+@Defmac {BT, , man}
+Control the content of the footers.  Normally, the footer prints the
+page number and the third and fourth arguments to @code{TH}.
+
+Use the @code{FT} number register to specify the footer position.  The
+default is @minus{}0.5@dmn{i}.
+@endDefmac
+
+@unnumberedsubsubsec Ultrix-specific man macros
+@cindex Ultrix-specific @code{man} macros
+@cindex @code{man} macros, Ultrix-specific
+
+@pindex man.ultrix
+The @code{groff} source distribution includes a file named
+@file{man.ultrix}, containing macros compatible with the Ultrix variant
+of @code{man}.  Copy this file into @file{man.local} (or use the
+@code{mso} request to load it) to enable the following macros.
+
+@Defmac {CT, @Var{key}, man}
+Print @samp{<CTRL/@var{key}>}.
+@endDefmac
+
+@Defmac {CW, , man}
+Print subsequent text using the constant width (Courier) typeface.
+@endDefmac
+
+@Defmac {Ds, , man}
+Begin a non-filled display.
+@endDefmac
+
+@Defmac {De, , man}
+End a non-filled display started with @code{Ds}.
+@endDefmac
+
+@Defmac {EX, [@Var{indent}], man}
+Begin a non-filled display using the constant width (Courier) typeface.
+Use the optional @var{indent} argument to indent the display.
+@endDefmac
+
+@Defmac {EE, , man}
+End a non-filled display started with @code{EX}.
+@endDefmac
+
+@Defmac {G, [@Var{text}], man}
+Set @var{text} in Helvetica.  If no text is present on the line where
+the macro is called, then the text of the next line appears in
+Helvetica.
+@endDefmac
+
+@Defmac {GL, [@Var{text}], man}
+Set @var{text} in Helvetica Oblique.  If no text is present on the line
+where the macro is called, then the text of the next line appears in
+Helvetica Oblique.
+@endDefmac
+
+@Defmac {HB, [@Var{text}], man}
+Set @var{text} in Helvetica Bold.  If no text is present on the line
+where the macro is called, then all text up to the next @code{HB}
+appears in Helvetica Bold.
+@endDefmac
+
+@Defmac {TB, [@Var{text}], man}
+Identical to @code{HB}.
+@endDefmac
+
+@Defmac {MS, @Var{title} @Var{sect} [@Var{punct}], man}
+Set a manpage reference in Ultrix format.  The @var{title} is in Courier
+instead of italic.  Optional punctuation follows the section number
+without an intervening space.
+@endDefmac
+
+@Defmac {NT, [@code{C}] [@Var{title}], man}
+Begin a note.  Print the optional @Var{title}, or the word ``Note'',
+centered on the page.  Text following the macro makes up the body of the
+note, and is indented on both sides.  If the first argument is @code{C},
+the body of the note is printed centered (the second argument replaces
+the word ``Note'' if specified).
+@endDefmac
+
+@Defmac {NE, , man}
+End a note begun with @code{NT}.
+@endDefmac
+
+@Defmac {PN, @Var{path} [@Var{punct}], man}
+Set the path name in constant width (Courier), followed by optional
+punctuation.
+@endDefmac
+
+@Defmac {Pn, [@Var{punct}] @Var{path} [@Var{punct}], man}
+If called with two arguments, identical to @code{PN}.  If called with
+three arguments, set the second argument in constant width (Courier),
+bracketed by the first and third arguments in the current font.
+@endDefmac
+
+@Defmac {R, , man}
+Switch to roman font and turn off any underlining in effect.
+@endDefmac
+
+@Defmac {RN, , man}
+Print the string @samp{<RETURN>}.
+@endDefmac
+
+@Defmac {VS, [@code{4}], man}
+Start printing a change bar in the margin if the number@tie{}@code{4} is
+specified.  Otherwise, this macro does nothing.
+@endDefmac
+
+@Defmac {VE, , man}
+End printing the change bar begun by @code{VS}.
+@endDefmac
+
+@unnumberedsubsubsec Simple example
+
+The following example @file{man.local} file alters the @code{SH} macro
+to add some extra vertical space before printing the heading.  Headings
+are printed in Helvetica Bold.
+
+@Example
+.\" Make the heading fonts Helvetica
+.ds HF HB
+.
+.\" Put more whitespace in front of headings.
+.rn SH SH-orig
+.de SH
+.  if t .sp (u;\\n[PD]*2)
+.  SH-orig \\$*
+..
+@endExample
+
+
+@c =====================================================================
+
+@node mdoc, ms, man, Macro Packages
+@section @file{mdoc}
+@cindex @code{mdoc} macros
+
+@c XXX documentation
+@c XXX this is a placeholder until we get stuff knocked into shape
+See the @cite{groff_mdoc(7)} man page (type @command{man groff_mdoc}
+at the command line).
+
+
+@c =====================================================================
+
+@node ms, me, mdoc, Macro Packages
+@section @file{ms}
+@cindex @code{ms} macros
+
+The @file{-ms} macros are suitable for reports, letters, books, user
+manuals, and so forth.  The package provides macros for cover pages,
+section headings, paragraphs, lists, footnotes, pagination, and a table
+of contents.
+
+@menu
+* ms Intro::
+* General ms Structure::
+* ms Document Control Registers::
+* ms Cover Page Macros::
+* ms Body Text::
+* ms Page Layout::
+* Differences from AT&T ms::
+* Naming Conventions::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node ms Intro, General ms Structure, ms, ms
+@subsection Introduction to @file{ms}
+
+The original @file{-ms} macros were included with @acronym{AT&T}
+@code{troff} as well as the @file{man} macros.  While the @file{man}
+package is intended for brief documents that can be read on-line as well
+as printed, the @file{ms} macros are suitable for longer documents that
+are meant to be printed rather than read on-line.
+
+The @file{ms} macro package included with @code{groff} is a complete,
+bottom-up re-implementation.  Several macros (specific to @acronym{AT&T}
+or Berkeley) are not included, while several new commands are.
+@xref{Differences from AT&T ms}, for more information.
+
+@c ---------------------------------------------------------------------
+
+@node General ms Structure, ms Document Control Registers, ms Intro, ms
+@subsection General structure of an @file{ms} document
+@cindex @code{ms} macros, general structure
+
+The @file{ms} macro package expects a certain amount of structure, but
+not as much as packages such as @file{man} or @file{mdoc}.
+
+The simplest documents can begin with a paragraph macro (such as
+@code{LP} or @code{PP}), and consist of text separated by paragraph
+macros or even blank lines.  Longer documents have a structure as
+follows:
+
+@table @strong
+@item Document type
+If you invoke the @code{RP} (report) macro on the first line of the
+document, @code{groff} prints the cover page information on its own
+page; otherwise it prints the information on the first page with your
+document text immediately following.  Other document formats found in
+@acronym{AT&T} @code{troff} are specific to @acronym{AT&T} or Berkeley,
+and are not supported in @code{groff}.
+
+@item Format and layout
+By setting number registers, you can change your document's type (font
+and size), margins, spacing, headers and footers, and footnotes.
+@xref{ms Document Control Registers}, for more details.
+
+@item Cover page
+A cover page consists of a title, the author's name and institution, an
+abstract, and the date.@footnote{Actually, only the title is required.}
+@xref{ms Cover Page Macros}, for more details.
+
+@item Body
+Following the cover page is your document.  You can use the @file{ms}
+macros to write reports, letters, books, and so forth.  The package is
+designed for structured documents, consisting of paragraphs interspersed
+with headings and augmented by lists, footnotes, tables, and other
+common constructs.  @xref{ms Body Text}, for more details.
+
+@item Table of contents
+Longer documents usually include a table of contents, which you can
+invoke by placing the @code{TC} macro at the end of your document.  The
+@file{ms} macros have minimal indexing facilities, consisting of the
+@code{IX} macro, which prints an entry on standard error.  Printing the
+table of contents at the end is necessary since @code{groff} is a
+single-pass text formatter, thus it cannot determine the page number of
+each section until that section has actually been set and printed.
+Since @file{ms} output is intended for hardcopy, you can manually
+relocate the pages containing the table of contents between the cover
+page and the body text after printing.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node ms Document Control Registers, ms Cover Page Macros, General ms Structure, ms
+@subsection Document control registers
+@cindex @code{ms} macros, document control registers
+
+The following is a list of document control number registers.  For the
+sake of consistency, set registers related to margins at the beginning
+of your document, or just after the @code{RP} macro.  You can set other
+registers later in your document, but you should keep them together at
+the beginning to make them easy to find and edit as necessary.
+
+@unnumberedsubsubsec Margin Settings
+
+@Defmpreg {PO, ms}
+Defines the page offset (i.e., the left margin).  There is no explicit
+right margin setting; the combination of the @code{PO} and @code{LL}
+registers implicitly define the right margin width.
+
+Effective: next page.
+
+Default value: 1@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {LL, ms}
+Defines the line length (i.e., the width of the body text).
+
+Effective: next paragraph.
+
+Default: 6@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {LT, ms}
+Defines the title length (i.e., the header and footer width).  This
+is usually the same as @code{LL}, but not necessarily.
+
+Effective: next paragraph.
+
+Default: 6@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {HM, ms}
+Defines the header margin height at the top of the page.
+
+Effective: next page.
+
+Default: 1@dmn{i}.
+@endDefmpreg
+
+@Defmpreg {FM, ms}
+Defines the footer margin height at the bottom of the page.
+
+Effective: next page.
+
+Default: 1@dmn{i}.
+@endDefmpreg
+
+@unnumberedsubsubsec Text Settings
+
+@Defmpreg {PS, ms}
+Defines the point size of the body text.  If the value is larger than or
+equal to 1000, divide it by 1000 to get a fractional point size.  For
+example, @samp{.nr PS 10250} sets the document's point size to
+10.25@dmn{p}.
+
+Effective: next paragraph.
+
+Default: 10@dmn{p}.
+@endDefmpreg
+
+@Defmpreg {VS, ms}
+Defines the space between lines (line height plus leading).  If the
+value is larger than or equal to 1000, divide it by 1000 to get a
+fractional point size.  Due to backwards compatibility, @code{VS} must
+be smaller than 40000 (this is 40.0@dmn{p}).
+
+Effective: next paragraph.
+
+Default: 12@dmn{p}.
+@endDefmpreg
+
+@Defmpreg {PSINCR, ms}
+Defines an increment in point size, which is applied to section headings
+at nesting levels below the value specified in @code{GROWPS}.  The value
+of @code{PSINCR} should be specified in points, with the @dmn{p} scaling
+factor, and may include a fractional component; for example,
+@w{@samp{.nr PSINCR 1.5p}} sets a point size increment of 1.5@dmn{p}.
+
+Effective: next section heading.
+
+Default: 1@dmn{p}.
+@endDefmpreg
+
+@Defmpreg {GROWPS, ms}
+Defines the heading level below which the point size increment set by
+@code{PSINCR} becomes effective.  Section headings at and above the
+level specified by @code{GROWPS} are printed at the point size set by
+@code{PS}; for each level below the value of @code{GROWPS}, the point
+size is increased in steps equal to the value of @code{PSINCR}.  Setting
+@code{GROWPS} to any value less than@tie{}2 disables the incremental
+heading size feature.
+
+Effective: next section heading.
+
+Default: 0.
+@endDefmpreg
+
+@Defmpreg {HY, ms}
+Defines the hyphenation level.  @code{HY} sets safely the value of the
+low-level @code{hy} register.  Setting the value of @code{HY} to@tie{}0
+is equivalent to using the @code{nh} request.
+
+Effective: next paragraph.
+
+Default: 6.
+@endDefmpreg
+
+@Defmpreg {FAM, ms}
+Defines the font family used to typeset the document.
+
+Effective: next paragraph.
+
+Default: as defined in the output device.
+@endDefmpreg
+
+@unnumberedsubsubsec Paragraph Settings
+
+@Defmpreg {PI, ms}
+Defines the initial indentation of a (@code{PP} macro) paragraph.
+
+Effective: next paragraph.
+
+Default: 5@dmn{n}.
+@endDefmpreg
+
+@Defmpreg {PD, ms}
+Defines the space between paragraphs.
+
+Effective: next paragraph.
+
+Default: 0.3@dmn{v}.
+@endDefmpreg
+
+@Defmpreg {QI, ms}
+Defines the indentation on both sides of a quoted (@code{QP},
+@code{QS}, and @code{QE} macros)
+paragraph.
+
+Effective: next paragraph.
+
+Default: 5@dmn{n}.
+@endDefmpreg
+
+@Defmpreg {PORPHANS, ms}
+Defines the minimum number of initial lines of any paragraph that
+should be kept together, to avoid orphan lines at the bottom of a page.
+If a new paragraph is started close to the bottom of a page, and there
+is insufficient space to accommodate @code{PORPHANS} lines before an
+automatic page break, then the page break is forced, before the start of
+the paragraph.
+
+Effective: next paragraph.
+
+Default: 1.
+@endDefmpreg
+
+@Defmpreg {HORPHANS, ms}
+Defines the minimum number of lines of the following paragraph that
+should be kept together with any section heading introduced by the
+@code{NH} or @code{SH} macros.  If a section heading is placed close to
+the bottom of a page, and there is insufficient space to accommodate
+both the heading and at least @code{HORPHANS} lines of the following
+paragraph, before an automatic page break, then the page break is forced
+before the heading.
+
+Effective: next paragraph.
+
+Default: 1.
+@endDefmpreg
+
+@unnumberedsubsubsec Footnote Settings
+
+@Defmpreg {FL, ms}
+Defines the length of a footnote.
+
+Effective: next footnote.
+
+Default: @math{@code{@\n[LL]} * 5 / 6}.
+@endDefmpreg
+
+@Defmpreg {FI, ms}
+Defines the footnote indentation.
+
+Effective: next footnote.
+
+Default: 2@dmn{n}.
+@endDefmpreg
+
+@Defmpreg {FF, ms}
+The footnote format:
+@table @code
+@item 0
+Print the footnote number as a superscript; indent the footnote
+(default).
+
+@item 1
+Print the number followed by a period (like 1.@:) and indent the
+footnote.
+
+@item 2
+Like 1, without an indentation.
+
+@item 3
+Like 1, but print the footnote number as a hanging paragraph.
+@end table
+
+Effective: next footnote.
+
+Default: 0.
+@endDefmpreg
+
+@Defmpreg {FPS, ms}
+Defines the footnote point size.  If the value is larger than or equal
+to 1000, divide it by 1000 to get a fractional point size.
+
+Effective: next footnote.
+
+Default: @math{@code{@\n[PS]} - 2}.
+@endDefmpreg
+
+@Defmpreg {FVS, ms}
+Defines the footnote vertical spacing.  If the value is larger than or
+equal to 1000, divide it by 1000 to get a fractional point size.
+
+Effective: next footnote.
+
+Default: @math{@code{@\n[FPS]} + 2}.
+@endDefmpreg
+
+@Defmpreg {FPD, ms}
+Defines the footnote paragraph spacing.
+
+Effective: next footnote.
+
+Default: @math{@code{@\n[PD]} / 2}.
+@endDefmpreg
+
+@unnumberedsubsubsec Miscellaneous Number Registers
+
+@Defmpreg {MINGW, ms}
+Defines the minimum width between columns in a multi-column document.
+
+Effective: next page.
+
+Default: 2@dmn{n}.
+@endDefmpreg
+
+@Defmpreg {DD, ms}
+Sets the vertical spacing before and after a display, a @code{tbl} table, an
+@code{eqn} equation, or a @code{pic} image.
+
+Effective: next paragraph.
+
+Default: 0.5@dmn{v}.
+@endDefmpreg
+
+@c ---------------------------------------------------------------------
+
+@node ms Cover Page Macros, ms Body Text, ms Document Control Registers, ms
+@subsection Cover page macros
+@cindex @code{ms} macros, cover page
+@cindex cover page macros, [@code{ms}]
+
+Use the following macros to create a cover page for your document in the
+order shown.
+
+@Defmac {RP, [@code{no}], ms}
+Specifies the report format for your document.  The report format
+creates a separate cover page.  The default action (no @code{RP} macro)
+is to print a subset of the cover page on page@tie{}1 of your document.
+
+If you use the word @code{no} as an optional argument, @code{groff}
+prints a title page but does not repeat any of the title page
+information (title, author, abstract, etc.@:) on page@tie{}1 of the
+document.
+@endDefmac
+
+@Defmac {P1, , ms}
+(P-one) Prints the header on page@tie{}1.  The default is to suppress
+the header.
+@endDefmac
+
+@Defmac {DA, [@dots{}], ms}
+(optional) Prints the current date, or the arguments to the macro if
+any, on the title page (if specified) and in the footers.  This is the
+default for @code{nroff}.
+@endDefmac
+
+@Defmac {ND, [@dots{}], ms}
+(optional) Prints the current date, or the arguments to the macro if
+any, on the title page (if specified) but not in the footers.  This is
+the default for @code{troff}.
+@endDefmac
+
+@Defmac {TL, , ms}
+Specifies the document title.  @code{groff} collects text following the
+@code{TL} macro into the title, until reaching the author name or
+abstract.
+@endDefmac
+
+@Defmac {AU, , ms}
+Specifies the author's name, which appears on the line (or lines)
+immediately following.  You can specify multiple authors as follows:
+
+@Example
+.AU
+John Doe
+.AI
+University of West Bumblefuzz
+.AU
+Martha Buck
+.AI
+Monolithic Corporation
+
+...
+@endExample
+@endDefmac
+
+@Defmac {AI, , ms}
+Specifies the author's institution.  You can specify multiple
+institutions in the same way that you specify multiple authors.
+@endDefmac
+
+@Defmac {AB, [@code{no}], ms}
+Begins the abstract.  The default is to print the word
+@acronym{ABSTRACT}, centered and in italics, above the text of the
+abstract.  The word @code{no} as an optional argument suppresses this
+heading.
+@endDefmac
+
+@Defmac {AE, , ms}
+Ends the abstract.
+@endDefmac
+
+The following is example mark-up for a title page.
+@cindex title page, example markup
+@cindex example markup, title page
+
+@CartoucheExample
+.RP
+.TL
+The Inevitability of Code Bloat
+in Commercial and Free Software
+.AU
+J. Random Luser
+.AI
+University of West Bumblefuzz
+.AB
+This report examines the long-term growth
+of the code bases in two large, popular software
+packages; the free Emacs and the commercial
+Microsoft Word.
+While differences appear in the type or order
+of features added, due to the different
+methodologies used, the results are the same
+in the end.
+.PP
+The free software approach is shown to be
+superior in that while free software can
+become as bloated as commercial offerings,
+free software tends to have fewer serious
+bugs and the added features are in line with
+user demand.
+.AE
+
+... the rest of the paper follows ...
+@endCartoucheExample
+
+@c ---------------------------------------------------------------------
+
+@node ms Body Text, ms Page Layout, ms Cover Page Macros, ms
+@subsection Body text
+@cindex @code{ms} macros, body text
+
+This section describes macros used to mark up the body of your document.
+Examples include paragraphs, sections, and other groups.
+
+@menu
+* Paragraphs in ms::
+* Headings in ms::
+* Highlighting in ms::
+* Lists in ms::
+* Indentation values in ms::
+* Tabstops in ms::
+* ms Displays and Keeps::
+* ms Insertions::
+* Example multi-page table::
+* ms Footnotes::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Paragraphs in ms, Headings in ms, ms Body Text, ms Body Text
+@subsubsection Paragraphs
+@cindex @code{ms} macros, paragraph handling
+
+The following paragraph types are available.
+
+@Defmac {PP, , ms}
+Sets a paragraph with an initial indentation.
+@endDefmac
+
+@Defmac {LP, , ms}
+Sets a paragraph without an initial indentation.
+@endDefmac
+
+@Defmac {QP, , ms}
+Sets a paragraph that is indented at both left and right margins
+by the amount of the register @code{QI}.
+The effect is identical to the @acronym{HTML} @code{<BLOCKQUOTE>} element.
+The next paragraph or heading returns margins to normal.
+@code{QP} inserts vertical space of amount set by register @code{PD}
+before the paragraph.
+@endDefmac
+
+@DefmacList {QS, , ms}
+@DefmacListEndx {QE, , ms}
+These macros begin and end a quoted section.
+The @code{QI} register
+controls the amount of indentation.
+Both @code{QS} and @code{QE} insert inter-paragraph vertical space
+set by register @code{PD}.
+The text between @code{QS} and @code{QE} can be structured further
+by use of the macros @code{LP} or @code{PP}.
+@endDefmac
+
+@Defmac {XP, , ms}
+Sets a paragraph whose lines are indented, except for the first line.
+This is a Berkeley extension.
+@endDefmac
+
+The following markup uses all four paragraph macros.
+
+@CartoucheExample
+.NH 2
+Cases used in the study
+.LP
+The following software and versions were
+considered for this report.
+.PP
+For commercial software, we chose
+.B "Microsoft Word for Windows" ,
+starting with version 1.0 through the
+current version (Word 2000).
+.PP
+For free software, we chose
+.B Emacs ,
+from its first appearance as a standalone
+editor through the current version (v20).
+See [Bloggs 2002] for details.
+.QP
+Franklin's Law applied to software:
+software expands to outgrow both
+RAM and disk space over time.
+.LP
+Bibliography:
+.XP
+Bloggs, Joseph R.,
+.I "Everyone's a Critic" ,
+Underground Press, March 2002.
+A definitive work that answers all questions
+and criticisms about the quality and usability of
+free software.
+@endCartoucheExample
+
+The @code{PORPHANS} register (@pxref{ms Document Control Registers})
+operates in conjunction with each of these macros, to inhibit the
+printing of orphan lines at the bottom of any page.
+
+@c ---------------------------------------------------------------------
+
+@node Headings in ms, Highlighting in ms, Paragraphs in ms, ms Body Text
+@subsubsection Headings
+@cindex @code{ms} macros, headings
+
+Use headings to create a hierarchical structure for your document.  The
+@file{ms} macros print headings in @strong{bold}, using the same font
+family and point size as the body text.
+
+The following describes the heading macros:
+
+@DefmacList {NH, @Var{curr-level}, ms}
+@DefmacListEnd {NH, @t{S} @Var{level0} @dots{}, ms}
+Numbered heading.  The argument is either a numeric argument to indicate
+the level of the heading, or the letter@tie{}@code{S} followed by
+numeric arguments to set the heading level explicitly.
+
+If you specify heading levels out of sequence, such as invoking
+@samp{.NH 3} after @samp{.NH 1}, @code{groff} prints a warning on
+standard error.
+@endDefmac
+
+@DefstrList {SN, ms}
+@DefstrItemx {SN-DOT, ms}
+@DefstrListEndx {SN-NO-DOT, ms}
+After invocation of @code{NH}, the assigned section number is made
+available in the strings @code{SN-DOT} (as it appears in a printed
+section heading with default formatting, followed by a terminating
+period), and @code{SN-NO-DOT} (with the terminating period omitted).
+The string @code{SN} is also defined, as an alias for @code{SN-DOT}; if
+preferred, you may redefine it as an alias for @code{SN-NO-DOT}, by
+including the initialization
+@Example
+.als SN SN-NO-DOT
+@endExample
+
+@noindent
+at any time @strong{before} you would like the change to take effect.
+@endDefstr
+
+@Defstr {SN-STYLE, ms}
+You may control the style used to print section numbers, within numbered
+section headings, by defining an appropriate alias for the string
+@code{SN-STYLE}.  The default style, in which the printed section number
+is followed by a terminating period, is obtained by defining the alias
+
+@Example
+.als SN-STYLE SN-DOT
+@endExample
+
+@noindent
+If you prefer to omit the terminating period, from section numbers
+appearing in numbered section headings, you may define the alias
+
+@Example
+.als SN-STYLE SN-NO-DOT
+@endExample
+
+@noindent
+Any such change in section numbering style becomes effective from the
+next use of @code{.NH}, following redefinition of the alias for
+@code{SN-STYLE}.
+@endDefstr
+
+@Defmac {SH, [@Var{match-level}], ms}
+Unnumbered subheading.
+
+The optional @var{match-level} argument is a GNU extension.  It is a
+number indicating the level of the heading, in a manner analogous to the
+@var{curr-level} argument to @code{.NH}.  Its purpose is to match the
+point size, at which the heading is printed, to the size of a numbered
+heading at the same level, when the @code{GROWPS} and @code{PSINCR}
+heading size adjustment mechanism is in effect.  @xref{ms Document
+Control Registers}.
+@endDefmac
+
+The @code{HORPHANS} register (@pxref{ms Document Control Registers})
+operates in conjunction with the @code{NH} and @code{SH} macros, to
+inhibit the printing of orphaned section headings at the bottom of any
+page.
+
+@c ---------------------------------------------------------------------
+
+@node Highlighting in ms, Lists in ms, Headings in ms, ms Body Text
+@subsubsection Highlighting
+@cindex @code{ms} macros, highlighting
+
+The @file{ms} macros provide a variety of methods to highlight or
+emphasize text:
+
+@Defmac {B, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in @strong{bold type}.  If you specify a second
+argument, @code{groff} prints it in the previous font after the bold
+text, with no intervening space (this allows you to set punctuation
+after the highlighted text without highlighting the punctuation).
+Similarly, it prints the third argument (if any) in the previous font
+@strong{before} the first argument.  For example,
+
+@Example
+.B foo ) (
+@endExample
+
+prints (@strong{foo}).
+
+If you give this macro no arguments, @code{groff} prints all text
+following in bold until the next highlighting, paragraph, or heading
+macro.
+@endDefmac
+
+@Defmac {R, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in roman (or regular) type.  It operates
+similarly to the @code{B}@tie{}macro otherwise.
+@endDefmac
+
+@Defmac {I, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in @emph{italic type}.  It operates similarly
+to the @code{B}@tie{}macro otherwise.
+@endDefmac
+
+@Defmac {CW, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in a @code{constant width face}.  It operates
+similarly to the @code{B}@tie{}macro otherwise.
+@endDefmac
+
+@Defmac {BI, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
+Sets its first argument in bold italic type.  It operates similarly to
+the @code{B}@tie{}macro otherwise.
+@endDefmac
+
+@Defmac {BX, [@Var{txt}], ms}
+Prints its argument and draws a box around it.  If you want to box a
+string that contains spaces, use a digit-width space (@code{\0}).
+@endDefmac
+
+@Defmac {UL, [@Var{txt} [@Var{post}]], ms}
+Prints its first argument with an underline.  If you specify a second
+argument, @code{groff} prints it in the previous font after the
+underlined text, with no intervening space.
+@endDefmac
+
+@Defmac {LG, , ms}
+Prints all text following in larger type (two points larger than the
+current point size) until the next font size, highlighting, paragraph,
+or heading macro.  You can specify this macro multiple times to
+enlarge the point size as needed.
+@endDefmac
+
+@Defmac {SM, , ms}
+Prints all text following in smaller type (two points smaller than the
+current point size) until the next type size, highlighting, paragraph,
+or heading macro.  You can specify this macro multiple times to reduce
+the point size as needed.
+@endDefmac
+
+@Defmac {NL, , ms}
+Prints all text following in the normal point size (that is, the value
+of the @code{PS} register).
+@endDefmac
+
+@DefstrList {@Lbrace{}, ms}
+@DefstrListEndx {@Rbrace{}, ms}
+Text enclosed with @code{\*@{} and @code{\*@}} is printed as a
+superscript.
+@endDefstr
+
+@c ---------------------------------------------------------------------
+
+@node Lists in ms, Indentation values in ms, Highlighting in ms, ms Body Text
+@subsubsection Lists
+@cindex @code{ms} macros, lists
+
+The @code{IP} macro handles duties for all lists.
+
+@Defmac {IP, [@Var{marker} [@Var{width}]], ms}
+The @var{marker} is usually a bullet glyph (@code{\[bu]}) for unordered
+lists, a number (or auto-incrementing number register) for numbered
+lists, or a word or phrase for indented (glossary-style) lists.
+
+The @var{width} specifies the indentation for the body of each list
+item; its default unit is @samp{n}.  Once specified, the indentation
+remains the same for all list items in the document until specified
+again.
+
+The @code{PORPHANS} register (@pxref{ms Document Control Registers})
+operates in conjunction with the @code{IP} macro, to inhibit the
+printing of orphaned list markers at the bottom of any page.
+@endDefmac
+
+The following is an example of a bulleted list.
+@cindex example markup, bulleted list [@code{ms}]
+@cindex bulleted list, example markup [@code{ms}]
+
+@Example
+A bulleted list:
+.IP \[bu] 2
+lawyers
+.IP \[bu]
+guns
+.IP \[bu]
+money
+@endExample
+
+Produces:
+
+@Example
+A bulleted list:
+
+o lawyers
+
+o guns
+
+o money
+@endExample
+
+The following is an example of a numbered list.
+@cindex example markup, numbered list [@code{ms}]
+@cindex numbered list, example markup [@code{ms}]
+
+@Example
+.nr step 1 1
+A numbered list:
+.IP \n[step] 3
+lawyers
+.IP \n+[step]
+guns
+.IP \n+[step]
+money
+@endExample
+
+Produces:
+
+@Example
+A numbered list:
+
+1. lawyers
+
+2. guns
+
+3. money
+@endExample
+
+Note the use of the auto-incrementing number register in this example.
+
+The following is an example of a glossary-style list.
+@cindex example markup, glossary-style list [@code{ms}]
+@cindex glossary-style list, example markup [@code{ms}]
+
+@Example
+A glossary-style list:
+.IP lawyers 0.4i
+Two or more attorneys.
+.IP guns
+Firearms, preferably
+large-caliber.
+.IP money
+Gotta pay for those
+lawyers and guns!
+@endExample
+
+Produces:
+
+@Example
+A glossary-style list:
+
+lawyers
+      Two or more attorneys.
+
+guns  Firearms, preferably large-caliber.
+
+money
+      Gotta pay for those lawyers and guns!
+@endExample
+
+In the last example, the @code{IP} macro places the definition on the
+same line as the term if it has enough space; otherwise, it breaks to
+the next line and starts the definition below the term.  This may or may
+not be the effect you want, especially if some of the definitions break
+and some do not.  The following examples show two possible ways to force
+a break.
+
+The first workaround uses the @code{br} request to force a break after
+printing the term or label.
+
+@CartoucheExample
+A glossary-style list:
+.IP lawyers 0.4i
+Two or more attorneys.
+.IP guns
+.br
+Firearms, preferably large-caliber.
+.IP money
+Gotta pay for those lawyers and guns!
+@endCartoucheExample
+
+The second workaround uses the @code{\p} escape to force the break.
+Note the space following the escape; this is important.  If you omit the
+space, @code{groff} prints the first word on the same line as the term
+or label (if it fits) @strong{then} breaks the line.
+
+@CartoucheExample
+A glossary-style list:
+.IP lawyers 0.4i
+Two or more attorneys.
+.IP guns
+\p Firearms, preferably large-caliber.
+.IP money
+Gotta pay for those lawyers and guns!
+@endCartoucheExample
+
+To set nested lists, use the @code{RS} and @code{RE} macros.
+@xref{Indentation values in ms}, for more information.
+@cindex @code{ms} macros, nested lists
+@cindex nested lists [@code{ms}]
+
+For example:
+
+@CartoucheExample
+.IP \[bu] 2
+Lawyers:
+.RS
+.IP \[bu]
+Dewey,
+.IP \[bu]
+Cheatham,
+.IP \[bu]
+and Howe.
+.RE
+.IP \[bu]
+Guns
+@endCartoucheExample
+
+Produces:
+
+@Example
+o Lawyers:
+
+  o  Dewey,
+
+  o  Cheatham,
+
+  o  and Howe.
+
+o Guns
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Indentation values in ms, Tabstops in ms, Lists in ms, ms Body Text
+@subsubsection Indentation values
+
+In many situations, you may need to indentation a section of text while
+still wrapping and filling.  @xref{Lists in ms}, for an example of
+nested lists.
+
+@DefmacList {RS, , ms}
+@DefmacListEndx {RE, , ms}
+These macros begin and end an indented section.  The @code{PI} register
+controls the amount of indentation, allowing the indented text to line
+up under hanging and indented paragraphs.
+@endDefmac
+
+@xref{ms Displays and Keeps}, for macros to indentation and turn off
+filling.
+
+@c ---------------------------------------------------------------------
+
+@node Tabstops in ms, ms Displays and Keeps, Indentation values in ms, ms Body Text
+@subsubsection Tab Stops
+
+Use the @code{ta} request to define tab stops as needed.  @xref{Tabs and
+Fields}.
+
+@Defmac {TA, , ms}
+Use this macro to reset the tab stops to the default for @file{ms}
+(every 5n).  You can redefine the @code{TA} macro to create a different
+set of default tab stops.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms Displays and Keeps, ms Insertions, Tabstops in ms, ms Body Text
+@subsubsection Displays and keeps
+@cindex @code{ms} macros, displays
+@cindex @code{ms} macros, keeps
+@cindex keeps [@code{ms}]
+@cindex displays [@code{ms}]
+
+Use displays to show text-based examples or figures (such as code
+listings).
+
+Displays turn off filling, so lines of code are displayed as-is without
+inserting @code{br} requests in between each line.  Displays can be
+@dfn{kept} on a single page, or allowed to break across pages.
+
+@DefmacList {DS, @t{L}, ms}
+@DefmacItemx {LD, , ms}
+@DefmacListEndx {DE, , ms}
+Left-justified display.  The @samp{.DS L} call generates a page break,
+if necessary, to keep the entire display on one page.  The @code{LD}
+macro allows the display to break across pages.  The @code{DE} macro
+ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{I}, ms}
+@DefmacItemx {ID, , ms}
+@DefmacListEndx {DE, , ms}
+Indents the display as defined by the @code{DI} register.  The @samp{.DS
+I} call generates a page break, if necessary, to keep the entire display
+on one page.  The @code{ID} macro allows the display to break across
+pages.  The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{B}, ms}
+@DefmacItemx {BD, , ms}
+@DefmacListEndx {DE, , ms}
+Sets a block-centered display: the entire display is left-justified, but
+indented so that the longest line in the display is centered on the
+page.  The @samp{.DS B} call generates a page break, if necessary, to
+keep the entire display on one page.  The @code{BD} macro allows the
+display to break across pages.  The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{C}, ms}
+@DefmacItemx {CD, , ms}
+@DefmacListEndx {DE, , ms}
+Sets a centered display: each line in the display is centered.  The
+@samp{.DS C} call generates a page break, if necessary, to keep the
+entire display on one page.  The @code{CD} macro allows the display to
+break across pages.  The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {DS, @t{R}, ms}
+@DefmacItemx {RD, , ms}
+@DefmacListEndx {DE, , ms}
+Right-justifies each line in the display.  The @samp{.DS R} call
+generates a page break, if necessary, to keep the entire display on one
+page.  The @code{RD} macro allows the display to break across pages.
+The @code{DE} macro ends the display.
+@endDefmac
+
+@DefmacList {Ds, , ms}
+@DefmacListEndx {De, , ms}
+These two macros were formerly provided as aliases for @code{DS} and
+@code{DE}, respectively.  They have been removed, and should no longer
+be used.  The original implementations of @code{DS} and @code{DE} are
+retained, and should be used instead.  X11 documents that actually use
+@code{Ds} and @code{De} always load a specific macro file from the X11
+distribution (@file{macros.t}) that provides proper definitions for the
+two macros.
+@endDefmac
+
+On occasion, you may want to @dfn{keep} other text together on a page.
+For example, you may want to keep two paragraphs together, or a
+paragraph that refers to a table (or list, or other item) immediately
+following.  The @file{ms} macros provide the @code{KS} and @code{KE}
+macros for this purpose.
+
+@DefmacList {KS, , ms}
+@DefmacListEndx {KE, , ms}
+The @code{KS} macro begins a block of text to be kept on a single page,
+and the @code{KE} macro ends the block.
+@endDefmac
+
+@DefmacList {KF, , ms}
+@DefmacListEndx {KE, , ms}
+Specifies a @dfn{floating keep}; if the keep cannot fit on the current
+page, @code{groff} holds the contents of the keep and allows text
+following the keep (in the source file) to fill in the remainder of the
+current page.  When the page breaks, whether by an explicit @code{bp}
+request or by reaching the end of the page, @code{groff} prints the
+floating keep at the top of the new page.  This is useful for printing
+large graphics or tables that do not need to appear exactly where
+specified.
+@endDefmac
+
+You can also use the @code{ne} request to force a page break if there is
+not enough vertical space remaining on the page.
+
+Use the following macros to draw a box around a section of text (such as
+a display).
+
+@DefmacList {B1, , ms}
+@DefmacListEndx {B2, , ms}
+Marks the beginning and ending of text that is to have a box drawn
+around it.  The @code{B1} macro begins the box; the @code{B2} macro ends
+it.  Text in the box is automatically placed in a diversion (keep).
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms Insertions, Example multi-page table, ms Displays and Keeps, ms Body Text
+@subsubsection Tables, figures, equations, and references
+@cindex @code{ms} macros, tables
+@cindex @code{ms} macros, figures
+@cindex @code{ms} macros, equations
+@cindex @code{ms} macros, references
+@cindex tables [@code{ms}]
+@cindex figures [@code{ms}]
+@cindex equations [@code{ms}]
+@cindex references [@code{ms}]
+
+The @file{ms} macros support the standard @code{groff} preprocessors:
+@code{tbl}, @code{pic}, @code{eqn}, and @code{refer}.
+@pindex tbl
+@pindex pic
+@pindex eqn
+@pindex refer
+You mark text meant for preprocessors by enclosing it in pairs of tags
+as follows.
+
+@DefmacList {TS, [@code{H}], ms}
+@DefmacListEndx {TE, , ms}
+Denotes a table, to be processed by the @code{tbl} preprocessor.  The
+optional argument@tie{}@code{H} to @code{TS} instructs @code{groff} to
+create a running header with the information up to the @code{TH} macro.
+@code{groff} prints the header at the beginning of the table; if the
+table runs onto another page, @code{groff} prints the header on the next
+page as well.
+@endDefmac
+
+@DefmacList {PS, , ms}
+@DefmacListEndx {PE, , ms}
+Denotes a graphic, to be processed by the @code{pic} preprocessor.  You
+can create a @code{pic} file by hand, using the @acronym{AT&T}
+@code{pic} manual available on the Web as a reference, or by using a
+graphics program such as @code{xfig}.
+@endDefmac
+
+@DefmacList {EQ, [@Var{align}], ms}
+@DefmacListEndx {EN, , ms}
+Denotes an equation, to be processed by the @code{eqn} preprocessor.
+The optional @var{align} argument can be @code{C}, @code{L},
+or@tie{}@code{I} to center (the default), left-justify, or indent the
+equation.
+@endDefmac
+
+@DefmacList {[, , ms}
+@DefmacListEndx {], , ms}
+Denotes a reference, to be processed by the @code{refer} preprocessor.
+The GNU @cite{refer(1)} man page provides a comprehensive reference to
+the preprocessor and the format of the bibliographic database.
+@endDefmac
+
+@menu
+* Example multi-page table::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Example multi-page table, ms Footnotes, ms Insertions, ms Body Text
+@subsubsection An example multi-page table
+@cindex example markup, multi-page table [@code{ms}]
+@cindex multi-page table, example markup [@code{ms}]
+
+The following is an example of how to set up a table that may print
+across two or more pages.
+
+@CartoucheExample
+.TS H
+allbox expand;
+cb | cb .
+Text      ...of heading...
+_
+.TH
+.T&
+l | l .
+... the rest of the table follows...
+.CW
+.TE
+@endCartoucheExample
+
+@c ---------------------------------------------------------------------
+
+@node ms Footnotes,  , Example multi-page table, ms Body Text
+@subsubsection Footnotes
+@cindex @code{ms} macros, footnotes
+@cindex footnotes [@code{ms}]
+
+The @file{ms} macro package has a flexible footnote system.  You can
+specify either numbered footnotes or symbolic footnotes (that is, using
+a marker such as a dagger symbol).
+
+@Defstr {*, ms}
+Specifies the location of a numbered footnote marker in the text.
+@endDefesc
+
+@DefmacList {FS, , ms}
+@DefmacListEndx {FE, , ms}
+Specifies the text of the footnote.  The default action is to create a
+numbered footnote; you can create a symbolic footnote by specifying a
+@dfn{mark} glyph (such as @code{\[dg]} for the dagger glyph) in the body
+text and as an argument to the @code{FS} macro, followed by the text of
+the footnote and the @code{FE} macro.
+@endDefmac
+
+You can control how @code{groff} prints footnote numbers by changing the
+value of the @code{FF} register.  @xref{ms Document Control Registers}.
+
+@cindex footnotes, and keeps [@code{ms}]
+@cindex keeps, and footnotes [@code{ms}]
+@cindex footnotes, and displays [@code{ms}]
+@cindex displays, and footnotes [@code{ms}]
+Footnotes can be safely used within keeps and displays, but you should
+avoid using numbered footnotes within floating keeps.  You can set a
+second @code{\**} marker between a @code{\**} and its corresponding
+@code{.FS} entry; as long as each @code{FS} macro occurs @emph{after}
+the corresponding @code{\**} and the occurrences of @code{.FS} are in
+the same order as the corresponding occurrences of @code{\**}.
+
+@c ---------------------------------------------------------------------
+
+@node ms Page Layout, Differences from AT&T ms, ms Body Text, ms
+@subsection Page layout
+@cindex @code{ms} macros, page layout
+@cindex page layout [@code{ms}]
+
+The default output from the @file{ms} macros provides a minimalist page
+layout: it prints a single column, with the page number centered at the
+top of each page.  It prints no footers.
+
+You can change the layout by setting the proper number registers and
+strings.
+
+@menu
+* ms Headers and Footers::
+* ms Margins::
+* ms Multiple Columns::
+* ms TOC::
+* ms Strings and Special Characters::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node ms Headers and Footers, ms Margins, ms Page Layout, ms Page Layout
+@subsubsection Headers and footers
+@cindex @code{ms} macros, headers
+@cindex @code{ms} macros, footers
+@cindex headers [@code{ms}]
+@cindex footers [@code{ms}]
+
+For documents that do not distinguish between odd and even pages, set
+the following strings:
+
+@DefstrList {LH, ms}
+@DefstrItemx {CH, ms}
+@DefstrListEndx {RH, ms}
+Sets the left, center, and right headers.
+@endDefstr
+
+@DefstrList {LF, ms}
+@DefstrItemx {CF, ms}
+@DefstrListEndx {RF, ms}
+Sets the left, center, and right footers.
+@endDefstr
+
+For documents that need different information printed in the even and
+odd pages, use the following macros:
+
+@DefmacList {OH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+@DefmacItemx {EH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+@DefmacItemx {OF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+@DefmacListEndx {EF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
+The @code{OH} and @code{EH} macros define headers for the odd and even
+pages; the @code{OF} and @code{EF} macros define footers for the odd and
+even pages.  This is more flexible than defining the individual strings.
+
+You can replace the quote (@code{'}) marks with any character not
+appearing in the header or footer text.
+@endDefmac
+
+To specify custom header and footer processing, redefine the following
+macros:
+
+@DefmacList {PT,, ms}
+@DefmacItemx {HD,, ms}
+@DefmacListEndx {BT,, ms}
+The @code{PT} macro defines a custom header; the @code{BT} macro defines
+a custom footer.  These macros must handle odd/even/first page
+differences if necessary.
+
+The @code{HD} macro defines additional header processing to take place
+after executing the @code{PT} macro.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms Margins, ms Multiple Columns, ms Headers and Footers, ms Page Layout
+@subsubsection Margins
+@cindex @code{ms} macros, margins
+
+You control margins using a set of number registers.  @xref{ms Document
+Control Registers}, for details.
+
+@c ---------------------------------------------------------------------
+
+@node ms Multiple Columns, ms TOC, ms Margins, ms Page Layout
+@subsubsection Multiple columns
+@cindex @code{ms} macros, multiple columns
+@cindex multiple columns [@code{ms}]
+
+The @file{ms} macros can set text in as many columns as do reasonably
+fit on the page.  The following macros are available; all of them force
+a page break if a multi-column mode is already set.  However, if the
+current mode is single-column, starting a multi-column mode does
+@emph{not} force a page break.
+
+@Defmac {1C, , ms}
+Single-column mode.
+@endDefmac
+
+@Defmac {2C, , ms}
+Two-column mode.
+@endDefmac
+
+@Defmac {MC, [@Var{width} [@Var{gutter}]], ms}
+Multi-column mode.  If you specify no arguments, it is equivalent to the
+@code{2C} macro.  Otherwise, @var{width} is the width of each column and
+@var{gutter} is the space between columns.  The @code{MINGW} number
+register controls the default gutter width.
+@endDefmac
+
+@c ---------------------------------------------------------------------
+
+@node ms TOC, ms Strings and Special Characters, ms Multiple Columns, ms Page Layout
+@subsubsection Creating a table of contents
+@cindex @code{ms} macros, creating table of contents
+@cindex table of contents, creating [@code{ms}]
+
+The facilities in the @file{ms} macro package for creating a table of
+contents are semi-automated at best.  Assuming that you want the table
+of contents to consist of the document's headings, you need to repeat
+those headings wrapped in @code{XS} and @code{XE} macros.
+
+@DefmacList {XS, [@Var{page}], ms}
+@DefmacItemx {XA, [@Var{page}], ms}
+@DefmacListEndx {XE, , ms}
+These macros define a table of contents or an individual entry in the
+table of contents, depending on their use.  The macros are very simple;
+they cannot indent a heading based on its level.  The easiest way to
+work around this is to add tabs to the table of contents string.  The
+following is an example:
+
+@CartoucheExample
+.NH 1
+Introduction
+.XS
+Introduction
+.XE
+.LP
+...
+.CW
+.NH 2
+Methodology
+.XS
+Methodology
+.XE
+.LP
+...
+@endCartoucheExample
+
+You can manually create a table of contents by beginning with the
+@code{XS} macro for the first entry, specifying the page number for that
+entry as the argument to @code{XS}.  Add subsequent entries using the
+@code{XA} macro, specifying the page number for that entry as the
+argument to @code{XA}.  The following is an example:
+
+@CartoucheExample
+.XS 1
+Introduction
+.XA 2
+A Brief History of the Universe
+.XA 729
+Details of Galactic Formation
+...
+.XE
+@endCartoucheExample
+@endDefmac
+
+@Defmac {TC, [@code{no}], ms}
+Prints the table of contents on a new page, setting the page number
+to@tie{}@strong{i} (Roman lowercase numeral one).  You should usually
+place this macro at the end of the file, since @code{groff} is a
+single-pass formatter and can only print what has been collected up to
+the point that the @code{TC} macro appears.
+
+The optional argument @code{no} suppresses printing the title specified
+by the string register @code{TOC}.
+@endDefmac
+
+@Defmac {PX, [@code{no}], ms}
+Prints the table of contents on a new page, using the current page
+numbering sequence.  Use this macro to print a manually generated table
+of contents at the beginning of your document.
+
+The optional argument @code{no} suppresses printing the title specified
+by the string register @code{TOC}.
+@endDefmac
+
+The @cite{Groff and Friends HOWTO} includes a @code{sed} script that
+automatically inserts @code{XS} and @code{XE} macro entries after each
+heading in a document.
+
+Altering the @code{NH} macro to automatically build the table of
+contents is perhaps initially more difficult, but would save a great
+deal of time in the long run if you use @file{ms} regularly.
+
+@c ---------------------------------------------------------------------
+
+@node ms Strings and Special Characters,  , ms TOC, ms Page Layout
+@subsubsection Strings and Special Characters
+@cindex @code{ms} macros, strings
+@cindex @code{ms} macros, special characters
+@cindex @code{ms} macros, accent marks
+@cindex accent marks [@code{ms}]
+@cindex special characters [@code{ms}]
+@cindex strings [@code{ms}]
+
+The @file{ms} macros provide the following predefined strings.  You can
+change the string definitions to help in creating documents in languages
+other than English.
+
+@Defstr {REFERENCES, ms}
+Contains the string printed at the beginning of the references
+(bibliography) page.  The default is @samp{References}.
+@endDefstr
+
+@Defstr {ABSTRACT, ms}
+Contains the string printed at the beginning of the abstract.  The
+default is @samp{ABSTRACT}.
+@endDefstr
+
+@Defstr {TOC, ms}
+Contains the string printed at the beginning of the table of contents.
+@endDefstr
+
+@DefstrList {MONTH1, ms}
+@DefstrItemx {MONTH2, ms}
+@DefstrItemx {MONTH3, ms}
+@DefstrItemx {MONTH4, ms}
+@DefstrItemx {MONTH5, ms}
+@DefstrItemx {MONTH6, ms}
+@DefstrItemx {MONTH7, ms}
+@DefstrItemx {MONTH8, ms}
+@DefstrItemx {MONTH9, ms}
+@DefstrItemx {MONTH10, ms}
+@DefstrItemx {MONTH11, ms}
+@DefstrListEndx {MONTH12, ms}
+Prints the full name of the month in dates.  The default is
+@samp{January}, @samp{February}, etc.
+@endDefstr
+
+The following special characters are available@footnote{For an
+explanation what special characters are see @ref{Special Characters}.}:
+
+@Defstr {-, ms}
+Prints an em dash.
+@endDefstr
+
+@DefstrList {Q, ms}
+@DefstrListEndx {U, ms}
+Prints typographer's quotes in troff, and plain quotes in nroff.
+@code{\*Q} is the left quote and @code{\*U} is the right quote.
+@endDefstr
+
+Improved accent marks are available in the @file{ms} macros.
+
+@Defmac {AM, , ms}
+Specify this macro at the beginning of your document to enable extended
+accent marks and special characters.  This is a Berkeley extension.
+
+To use the accent marks, place them @strong{after} the character being
+accented.
+
+Note that groff's native support for accents is superior to the
+following definitions.
+@endDefmac
+
+The following accent marks are available after invoking the @code{AM}
+macro:
+
+@Defstr {', ms}
+Acute accent.
+@endDefstr
+
+@Defstr {`, ms}
+Grave accent.
+@endDefstr
+
+@Defstr {^, ms}
+Circumflex.
+@endDefstr
+
+@Defstr {\,, ms}
+Cedilla.
+@endDefstr
+
+@Defstr {~, ms}
+Tilde.
+@endDefstr
+
+@deffn String @t{\*[:]}
+@ifnotinfo
+@stindex : @r{[}ms@r{]}
+@end ifnotinfo
+@ifinfo
+@stindex \*[@r{<colon>}] @r{[}ms@r{]}
+@end ifinfo
+Umlaut.
+@end deffn
+
+@Defstr {v, ms}
+Hacek.
+@endDefstr
+
+@Defstr {_, ms}
+Macron (overbar).
+@endDefstr
+
+@Defstr {., ms}
+Underdot.
+@endDefstr
+
+@Defstr {o, ms}
+Ring above.
+@endDefstr
+
+The following are standalone characters available after invoking the
+@code{AM} macro:
+
+@Defstr {?, ms}
+Upside-down question mark.
+@endDefstr
+
+@Defstr {!, ms}
+Upside-down exclamation point.
+@endDefstr
+
+@Defstr {8, ms}
+German ß ligature.
+@endDefstr
+
+@Defstr {3, ms}
+Yogh.
+@endDefstr
+
+@Defstr {Th, ms}
+Uppercase thorn.
+@endDefstr
+
+@Defstr {th, ms}
+Lowercase thorn.
+@endDefstr
+
+@Defstr {D-, ms}
+Uppercase eth.
+@endDefstr
+
+@Defstr {d-, ms}
+Lowercase eth.
+@endDefstr
+
+@Defstr {q, ms}
+Hooked o.
+@endDefstr
+
+@Defstr {ae, ms}
+Lowercase æ ligature.
+@endDefstr
+
+@Defstr {Ae, ms}
+Uppercase Æ ligature.
+@endDefstr
+
+@c ---------------------------------------------------------------------
+
+@node Differences from AT&T ms, Naming Conventions, ms Page Layout, ms
+@subsection Differences from @acronym{AT&T} @file{ms}
+@cindex @code{ms} macros, differences from @acronym{AT&T}
+@cindex @acronym{AT&T} @code{troff}, @code{ms} macro package differences
+
+This section lists the (minor) differences between the @code{groff -ms}
+macros and @acronym{AT&T} @code{troff -ms} macros.
+
+@itemize @bullet
+@item
+The internals of @code{groff -ms} differ from the internals of
+@acronym{AT&T} @code{troff -ms}.  Documents that depend upon
+implementation details of @acronym{AT&T} @code{troff -ms} may not format
+properly with @code{groff -ms}.
+
+@item
+The general error-handling policy of @code{groff -ms} is to detect and
+report errors, rather than silently to ignore them.
+
+@item
+@code{groff -ms} does not work in compatibility mode (that is, with the
+@option{-C} option).
+
+@item
+There is no special support for typewriter-like devices.
+
+@item
+@code{groff -ms} does not provide cut marks.
+
+@item
+Multiple line spacing is not supported.  Use a larger vertical spacing
+instead.
+
+@item
+Some Unix @code{ms} documentation says that the @code{CW} and @code{GW}
+number registers can be used to control the column width and gutter
+width, respectively.  These number registers are not used in @code{groff
+-ms}.
+
+@item
+Macros that cause a reset (paragraphs, headings, etc.@:) may change the
+indentation.  Macros that change the indentation do not increment or
+decrement the indentation, but rather set it absolutely.  This can cause
+problems for documents that define additional macros of their own.  The
+solution is to use not the @code{in} request but instead the @code{RS}
+and @code{RE} macros.
+
+@item
+To make @code{groff -ms} use the default page offset (which also
+specifies the left margin), the @code{PO} register must stay undefined
+until the first @file{-ms} macro is evaluated.  This implies that
+@code{PO} should not be used early in the document, unless it is changed
+also: Remember that accessing an undefined register automatically
+defines it.
+@end itemize
+
+@Defmpreg {GS, ms}
+This number register is set to@tie{}1 by the @code{groff -ms} macros,
+but it is not used by the @code{AT&T} @code{troff -ms} macros.
+Documents that need to determine whether they are being formatted with
+@code{AT&T} @code{troff -ms} or @code{groff -ms} should use this number
+register.
+@endDefmpreg
+
+Emulations of a few ancient Bell Labs macros can be re-enabled by
+calling the otherwise undocumented @code{SC} section-header macro.
+Calling @code{SC} enables @code{UC} for marking up a product or
+application name, and the pair @code{P1}/@code{P2} for surrounding code
+example displays.
+
+These are not enabled by default because (a)@tie{}they were not
+documented, in the original @code{ms} manual, and (b)@tie{}the @code{P1}
+and @code{UC} macros collide with different macros with the same names
+in the Berkeley version of @code{ms}.
+
+These @code{groff} emulations are sufficient to give back the 1976
+Kernighan@tie{}& Cherry paper @cite{Typesetting Mathematics -- User's
+Guide} its section headings, and restore some text that had gone missing
+as arguments of undefined macros.  No warranty express or implied is
+given as to how well the typographic details these produce match the
+original Bell Labs macros.
+
+@menu
+* Missing ms Macros::
+* Additional ms Macros::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Missing ms Macros, Additional ms Macros, Differences from AT&T ms, Differences from AT&T ms
+@subsubsection @code{troff} macros not appearing in @code{groff}
+
+Macros missing from @code{groff -ms} are cover page macros specific to
+Bell Labs and Berkeley.  The macros known to be missing are:
+
+@table @code
+@item .TM
+Technical memorandum; a cover sheet style
+
+@item .IM
+Internal memorandum; a cover sheet style
+
+@item .MR
+Memo for record; a cover sheet style
+
+@item .MF
+Memo for file; a cover sheet style
+
+@item .EG
+Engineer's notes; a cover sheet style
+
+@item .TR
+Computing Science Tech Report; a cover sheet style
+
+@item .OK
+Other keywords
+
+@item .CS
+Cover sheet information
+
+@item .MH
+A cover sheet macro
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Additional ms Macros,  , Missing ms Macros, Differences from AT&T ms
+@subsubsection @code{groff} macros not appearing in @acronym{AT&T} @code{troff}
+
+The @code{groff -ms} macros have a few minor extensions compared to the
+@acronym{AT&T} @code{troff -ms} macros.
+
+@Defmac {AM, , ms}
+Improved accent marks.  @xref{ms Strings and Special Characters}, for
+details.
+@endDefmac
+
+@Defmac {DS, @t{I}, ms}
+Indented display.  The default behavior of @acronym{AT&T} @code{troff
+-ms} was to indent; the @code{groff} default prints displays flush left
+with the body text.
+@endDefmac
+
+@Defmac {CW, , ms}
+Print text in @code{constant width} (Courier) font.
+@endDefmac
+
+@Defmac {IX, , ms}
+Indexing term (printed on standard error).  You can write a script to
+capture and process an index generated in this manner.
+@endDefmac
+
+The following additional number registers
+appear in @code{groff -ms}:
+
+@Defmpreg {MINGW, ms}
+Specifies a minimum space between columns (for multi-column output);
+this takes the place of the @code{GW} register that was documented but
+apparently not implemented in @acronym{AT&T} @code{troff}.
+@endDefmpreg
+
+Several new string registers are available as well.  You can change
+these to handle (for example) the local language.  @xref{ms Strings and
+Special Characters}, for details.
+
+@c ---------------------------------------------------------------------
+
+@node Naming Conventions,  , Differences from AT&T ms, ms
+@subsection Naming Conventions
+@cindex @code{ms} macros, naming conventions
+@cindex naming conventions, @code{ms} macros
+
+The following conventions are used for names of macros, strings and
+number registers.  External names available to documents that use the
+@code{groff -ms} macros contain only uppercase letters and digits.
+
+Internally the macros are divided into modules; naming conventions are
+as follows:
+
+@itemize @bullet
+@item
+Names used only within one module are of the form
+@var{module}@code{*}@var{name}.
+
+@item
+Names used outside the module in which they are defined are of the form
+@var{module}@code{@@}@var{name}.
+
+@item
+Names associated with a particular environment are of the form
+@var{environment}@code{:}@var{name}; these are used only within the
+@code{par} module.
+
+@item
+@var{name} does not have a module prefix.
+
+@item
+Constructed names used to implement arrays are of the form
+@var{array}@code{!}@var{index}.
+@end itemize
+
+Thus the groff ms macros reserve the following names:
+
+@itemize @bullet
+@item
+Names containing the characters @code{*}, @code{@@}, and@tie{}@code{:}.
+
+@item
+Names containing only uppercase letters and digits.
+@end itemize
+
+
+@c =====================================================================
+
+@node me, mm, ms, Macro Packages
+@section @file{me}
+@cindex @code{me} macro package
+
+@c XXX documentation
+@c XXX this is a placeholder until we get stuff knocked into shape
+See the @file{meintro.me} and @file{meref.me} documents in groff's
+@file{doc} directory.
+
+
+@c =====================================================================
+
+@node mm, mom, me, Macro Packages
+@section @file{mm}
+@cindex @code{mm} macro package
+
+@c XXX documentation
+@c XXX this is a placeholder until we get stuff knocked into shape
+See the @cite{groff_mm(7)} man page (type @command{man groff_mm} at the
+command line).
+
+
+@c =====================================================================
+
+@node mom,  , mm, Macro Packages
+@section @file{mom}
+@cindex @code{mom} macro package
+
+@c XXX documentation
+@c XXX this is a placeholder until we get stuff knocked into shape
+The main documentation files for the @file{mom} macros are in
+@acronym{HTML} format.  Additional, useful documentation is in PDF
+format.  See the @cite{groff(1)} man page, section ``Installation
+Directories'', for their location.
+
+@itemize @bullet
+@item
+@file{toc.html}
+@noindent
+Entry point to the full mom manual.
+
+@item
+@file{macrolist.html}
+@noindent
+Hyperlinked index of macros with brief descriptions, arranged by
+category.
+
+@item
+@file{mom-pdf.pdf}
+@noindent
+PDF features and usage.
+@end itemize
+
+The mom macros are in active development between groff releases.
+The most recent version, along with up-to-date documentation, is
+available at @uref{http://www.schaffter.ca/mom/mom-05.html}.
+
+The @cite{groff_mom(7)} man page (type @command{man groff_mom} at the
+command line) contains a partial list of available macros, however their
+usage is best understood by consulting the @acronym{HTML} documentation.
+
+@c =====================================================================
+@c =====================================================================
+
+@node gtroff Reference, Preprocessors, Macro Packages, Top
+@chapter @code{gtroff} Reference
+@cindex reference, @code{gtroff}
+@cindex @code{gtroff}, reference
+
+This chapter covers @strong{all} of the facilities of @code{gtroff}.
+Users of macro packages may skip it if not interested in details.
+
+
+@menu
+* Text::
+* Measurements::
+* Expressions::
+* Identifiers::
+* Embedded Commands::
+* Registers::
+* Manipulating Filling and Adjusting::
+* Manipulating Hyphenation::
+* Manipulating Spacing::
+* Tabs and Fields::
+* Character Translations::
+* Troff and Nroff Mode::
+* Line Layout::
+* Line Control::
+* Page Layout::
+* Page Control::
+* Fonts and Symbols::
+* Sizes::
+* Strings::
+* Conditionals and Loops::
+* Writing Macros::
+* Page Motions::
+* Drawing Requests::
+* Traps::
+* Diversions::
+* Environments::
+* Suppressing output::
+* Colors::
+* I/O::
+* Postprocessor Access::
+* Miscellaneous::
+* Gtroff Internals::
+* Debugging::
+* Implementation Differences::
+@end menu
+
+
+@c =====================================================================
+
+@node Text, Measurements, gtroff Reference, gtroff Reference
+@section Text
+@cindex text, @code{gtroff} processing
+
+@code{gtroff} input files contain text with control commands
+interspersed throughout.  But, even without control codes, @code{gtroff}
+still does several things with the input text:
+
+@itemize @bullet
+@item
+filling and adjusting
+
+@item
+adding additional space after sentences
+
+@item
+hyphenating
+
+@item
+inserting implicit line breaks
+@end itemize
+
+@menu
+* Filling and Adjusting::
+* Hyphenation::
+* Sentences::
+* Tab Stops::
+* Implicit Line Breaks::
+* Input Conventions::
+* Input Encodings::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Filling and Adjusting, Hyphenation, Text, Text
+@subsection Filling and Adjusting
+@cindex filling
+@cindex adjusting
+
+When @code{gtroff} reads text, it collects words from the input and fits
+as many of them together on one output line as it can.  This is known as
+@dfn{filling}.
+
+@cindex leading spaces
+@cindex spaces, leading and trailing
+@cindex extra spaces
+@cindex trailing spaces
+Once @code{gtroff} has a @dfn{filled} line, it tries to @dfn{adjust} it.
+This means it widens the spacing between words until the text reaches
+the right margin (in the default adjustment mode).  Extra spaces between
+words are preserved, but spaces at the end of lines are ignored.  Spaces
+at the front of a line cause a @dfn{break} (breaks are explained in
+@ref{Implicit Line Breaks}).
+
+@xref{Manipulating Filling and Adjusting}.
+
+@c ---------------------------------------------------------------------
+
+@node Hyphenation, Sentences, Filling and Adjusting, Text
+@subsection Hyphenation
+@cindex hyphenation
+
+Since the odds are not great for finding a set of words, for every
+output line, which fit nicely on a line without inserting excessive
+amounts of space between words, @code{gtroff} hyphenates words so that
+it can justify lines without inserting too much space between words.  It
+uses an internal hyphenation algorithm (a simplified version of the
+algorithm used within @TeX{}) to indicate which words can be hyphenated
+and how to do so.  When a word is hyphenated, the first part of the word
+is added to the current filled line being output (with an attached
+hyphen), and the other portion is added to the next line to be filled.
+
+@xref{Manipulating Hyphenation}.
+
+@c ---------------------------------------------------------------------
+
+@node Sentences, Tab Stops, Hyphenation, Text
+@subsection Sentences
+@cindex sentences
+
+Although it is often debated, some typesetting rules say there should be
+different amounts of space after various punctuation marks.  For
+example, the @cite{Chicago typesetting manual} says that a period at the
+end of a sentence should have twice as much space following it as would
+a comma or a period as part of an abbreviation.
+
+@c XXX exact citation of Chicago manual
+
+@cindex sentence space
+@cindex space between sentences
+@cindex french-spacing
+@code{gtroff} does this by flagging certain characters (normally
+@samp{!}, @samp{?}, and @samp{.}) as @dfn{end-of-sentence} characters.
+When @code{gtroff} encounters one of these characters at the end of a
+line, it appends a normal space followed by a @dfn{sentence space} in
+the formatted output.  (This justifies one of the conventions mentioned
+in @ref{Input Conventions}.)
+
+@cindex transparent characters
+@cindex character, transparent
+@cindex @code{dg} glyph, at end of sentence
+@cindex @code{rq} glyph, at end of sentence
+@cindex @code{cq} glyph, at end of sentence
+@cindex @code{"}, at end of sentence
+@cindex @code{'}, at end of sentence
+@cindex @code{)}, at end of sentence
+@cindex @code{]}, at end of sentence
+@cindex @code{*}, at end of sentence
+In addition, the following characters and symbols are treated
+transparently while handling end-of-sentence characters: @samp{"},
+@samp{'}, @samp{)}, @samp{]}, @samp{*}, @code{\[dg]}, @code{\[rq]}, and
+@code{\[cq]}.
+
+See the @code{cflags} request in @ref{Using Symbols}, for more details.
+
+@cindex @code{\&}, at end of sentence
+To prevent the insertion of extra space after an end-of-sentence
+character (at the end of a line), append @code{\&}.
+
+@c ---------------------------------------------------------------------
+
+@node Tab Stops, Implicit Line Breaks, Sentences, Text
+@subsection Tab Stops
+@cindex tab stops
+@cindex stops, tabulator
+@cindex tab character
+@cindex character, tabulator
+
+@cindex @acronym{EBCDIC} encoding
+@cindex encoding, @acronym{EBCDIC}
+@code{gtroff} translates @dfn{tabulator characters}, also called
+@dfn{tabs} (normally code point @acronym{ASCII} @code{0x09} or
+@acronym{EBCDIC} @code{0x05}), in the input into movements to the next
+tabulator stop.  These tab stops are initially located every half inch
+across the page.  Using this, simple tables can be made easily.
+However, it can often be deceptive as the appearance (and width) of the
+text on a terminal and the results from @code{gtroff} can vary greatly.
+
+Also, a possible sticking point is that lines beginning with tab
+characters are still filled, again producing unexpected results.  For
+example, the following input
+
+@multitable {12345678} {12345678} {12345678} {12345678}
+@item
+@tab 1 @tab 2 @tab 3
+@item
+@tab   @tab 4 @tab 5
+@end multitable
+
+@noindent
+produces
+
+@multitable {12345678} {12345678} {12345678} {12345678} {12345678} {12345678} {12345678}
+@item
+@tab 1 @tab 2 @tab 3 @tab   @tab 4 @tab 5
+@end multitable
+
+@xref{Tabs and Fields}.
+
+@c ---------------------------------------------------------------------
+
+@node Implicit Line Breaks, Input Conventions, Tab Stops, Text
+@subsection Implicit Line Breaks
+@cindex implicit line breaks
+@cindex implicit breaks of lines
+@cindex line, implicit breaks
+@cindex break, implicit
+@cindex line break
+
+An important concept in @code{gtroff} is the @dfn{break}.  When a break
+occurs, @code{gtroff} outputs the partially filled line (unjustified),
+and resumes collecting and filling text on the next output line.
+
+@cindex blank line
+@cindex empty line
+@cindex line, blank
+@cindex blank line macro (@code{blm})
+There are several ways to cause a break in @code{gtroff}.  A blank line
+not only causes a break, but it also outputs a one-line vertical space
+(effectively a blank line).  Note that this behaviour can be modified
+with the blank line macro request @code{blm}.  @xref{Blank Line Traps}.
+
+@cindex fill mode
+@cindex mode, fill
+@cindex leading spaces macro (@code{lsm})
+A line that begins with a space causes a break and the space is output
+at the beginning of the next line.  Note that this space isn't adjusted,
+even in fill mode; however, the behaviour can be modified with the
+leading spaces macro request @code{lsm}.  @xref{Leading Spaces Traps}.
+
+The end of file also causes a break -- otherwise the last line of the
+document may vanish!
+
+Certain requests also cause breaks, implicitly or explicitly.  This is
+discussed in @ref{Manipulating Filling and Adjusting}.
+
+@c ---------------------------------------------------------------------
+
+@node Input Conventions, Input Encodings, Implicit Line Breaks, Text
+@subsection Input Conventions
+@cindex input conventions
+@cindex conventions for input
+
+Since @code{gtroff} does filling automatically, it is traditional in
+@code{groff} not to try and type things in as nicely formatted
+paragraphs.  These are some conventions commonly used when typing
+@code{gtroff} text:
+
+@itemize @bullet
+@item
+Break lines after punctuation, particularly at the end of a sentence and
+in other logical places.  Keep separate phrases on lines by themselves,
+as entire phrases are often added or deleted when editing.
+
+@item
+Try to keep lines less than 40--60@tie{}characters, to allow space for
+inserting more text.
+
+@item
+Do not try to do any formatting in a @acronym{WYSIWYG} manner (i.e.,
+don't try using spaces to get proper indentation).
+@end itemize
+
+@c ---------------------------------------------------------------------
+
+@node Input Encodings,  , Input Conventions, Text
+@subsection Input Encodings
+
+Currently, the following input encodings are available.
+
+@table @asis
+@item cp1047
+@cindex encoding, input, @acronym{EBCDIC}
+@cindex @acronym{EBCDIC}, input encoding
+@cindex input encoding, @acronym{EBCDIC}
+@cindex encoding, input, cp1047
+@cindex cp1047, input encoding
+@cindex input encoding, cp1047
+@cindex IBM cp1047 input encoding
+@pindex cp1047.tmac
+This input encoding works only on @acronym{EBCDIC} platforms (and vice
+versa, the other input encodings don't work with @acronym{EBCDIC}); the
+file @file{cp1047.tmac} is by default loaded at start-up.
+
+@item latin-1
+@cindex encoding, input, @w{latin-1} (ISO @w{8859-1})
+@cindex @w{latin-1} (ISO @w{8859-1}), input encoding
+@cindex ISO @w{8859-1} (@w{latin-1}), input encoding
+@cindex input encoding, @w{latin-1} (ISO @w{8859-1})
+@pindex latin1.tmac
+This is the default input encoding on non-@acronym{EBCDIC} platforms;
+the file @file{latin1.tmac} is loaded at start-up.
+
+@item latin-2
+@cindex encoding, input, @w{latin-2} (ISO @w{8859-2})
+@cindex @w{latin-2} (ISO @w{8859-2}), input encoding
+@cindex ISO @w{8859-2} (@w{latin-2}), input encoding
+@cindex input encoding, @w{latin-2} (ISO @w{8859-2})
+@pindex latin2.tmac
+To use this encoding, either say @w{@samp{.mso latin2.tmac}} at the very
+beginning of your document or use @samp{-mlatin2} as a command-line
+argument for @code{groff}.
+
+@item latin-5
+@cindex encoding, input, @w{latin-5} (ISO @w{8859-9})
+@cindex @w{latin-5} (ISO @w{8859-9}), input encoding
+@cindex ISO @w{8859-9} (@w{latin-5}), input encoding
+@cindex input encoding, @w{latin-5} (ISO @w{8859-9})
+@pindex latin5.tmac
+For Turkish.  Either say @w{@samp{.mso latin5.tmac}} at the very
+beginning of your document or use @samp{-mlatin5} as a command-line
+argument for @code{groff}.
+
+@item latin-9 (latin-0)
+@cindex encoding, input, @w{latin-9} (@w{latin-0}, ISO @w{8859-15})
+@cindex @w{latin-9} (@w{latin-0}, ISO @w{8859-15}), input encoding
+@cindex ISO @w{8859-15} (@w{latin-9}, @w{latin-0}), input encoding
+@cindex input encoding, @w{latin-9} (@w{latin-9}, ISO @w{8859-15})
+@pindex latin9.tmac
+This encoding is intended (at least in Europe) to replace @w{latin-1}
+encoding.  The main difference to @w{latin-1} is that @w{latin-9}
+contains the Euro character.  To use this encoding, either say
+@w{@samp{.mso latin9.tmac}} at the very beginning of your document or
+use @samp{-mlatin9} as a command-line argument for @code{groff}.
+@end table
+
+Note that it can happen that some input encoding characters are not
+available for a particular output device.  For example, saying
+
+@Example
+groff -Tlatin1 -mlatin9 ...
+@endExample
+
+@noindent
+fails if you use the Euro character in the input.  Usually, this
+limitation is present only for devices that have a limited set of
+output glyphs (e.g.@: @option{-Tascii} and @option{-Tlatin1}); for other
+devices it is usually sufficient to install proper fonts that contain
+the necessary glyphs.
+
+@pindex freeeuro.pfa
+@pindex ec.tmac
+Due to the importance of the Euro glyph in Europe, the groff package now
+comes with a @sc{PostScript} font called @file{freeeuro.pfa}, which
+provides various glyph shapes for the Euro.  In other words,
+@w{latin-9} encoding is supported for the @option{-Tps} device out of
+the box (@w{latin-2} isn't).
+
+By its very nature, @option{-Tutf8} supports all input encodings;
+@option{-Tdvi} has support for both @w{latin-2} and @w{latin-9} if the
+command-line @option{-mec} is used also to load the file @file{ec.tmac}
+(which flips to the EC fonts).
+
+
+@c =====================================================================
+
+@node Measurements, Expressions, Text, gtroff Reference
+@section Measurements
+@cindex measurements
+@cindex scaling indicator
+@cindex indicator, scaling
+
+@cindex units of measurement
+@cindex basic unit (@code{u})
+@cindex machine unit (@code{u})
+@cindex measurement unit
+@cindex @code{u} unit
+@cindex unit, @code{u}
+@code{gtroff} (like many other programs) requires numeric parameters to
+specify various measurements.  Most numeric parameters@footnote{those
+that specify vertical or horizontal motion or a type size} may have a
+@dfn{measurement unit} attached.  These units are specified as a single
+character that immediately follows the number or expression.  Each of
+these units are understood, by @code{gtroff}, to be a multiple of its
+@dfn{basic unit}.  So, whenever a different measurement unit is
+specified @code{gtroff} converts this into its @dfn{basic units}.  This
+basic unit, represented by a @samp{u}, is a device dependent measurement,
+which is quite small, ranging from 1/75@dmn{th} to 1/72000@dmn{th} of an
+inch.  The values may be given as fractional numbers; however,
+fractional basic units are always rounded to integers.
+
+Some of the measurement units are completely independent of any of the
+current settings (e.g.@: type size) of @code{gtroff}.
+
+Although groff's basic unit is device-dependent, it may still be smaller
+than the smallest unit the device is capable of producing.  The register
+@code{.H} specifies how many groff basic units constitute the current
+device's basic unit horizontally, and the register @code{.V} specifies
+this value vertically.
+
+@table @code
+@item i
+@cindex inch unit (@code{i})
+@cindex @code{i} unit
+@cindex unit, @code{i}
+Inches.  An antiquated measurement unit still in use in certain
+backwards countries with incredibly low-cost computer equipment.  One
+inch is defined to be 2.54@tie{}cm (worldwide since 1964).
+
+@item c
+@cindex centimeter unit (@code{c})
+@cindex @code{c} unit
+@cindex unit, @code{c}
+Centimeters.  One centimeter is about 0.3937@tie{}in.
+
+@item p
+@cindex point unit (@code{p})
+@cindex @code{p} unit
+@cindex unit, @code{p}
+Points.  This is a typesetter's measurement used for measure type size.
+It is 72@tie{}points to an inch.
+
+@item P
+@cindex pica unit (@code{P})
+@cindex @code{P} unit
+@cindex unit, @code{P}
+Pica.  Another typesetting measurement.  6@tie{}picas to an inch (and
+12@tie{}points to a pica).
+
+@item s
+@itemx z
+@cindex @code{s} unit
+@cindex unit, @code{s}
+@cindex @code{z} unit
+@cindex unit, @code{z}
+@xref{Fractional Type Sizes}, for a discussion of these units.
+
+@item f
+@cindex @code{f} unit
+@cindex unit, @code{f}
+Fractions.  Value is 65536.
+@xref{Colors}, for usage.
+@end table
+
+The other measurements understood by @code{gtroff} depend on settings
+currently in effect in @code{gtroff}.  These are very useful for
+specifying measurements that should look proper with any size of text.
+
+@table @code
+@item m
+@cindex em unit (@code{m})
+@cindex @code{m} unit
+@cindex unit, @code{m}
+Ems.  This unit is equal to the current font size in points.  So called
+because it is @emph{approximately} the width of the letter@tie{}@samp{m}
+in the current font.
+
+@item n
+@cindex en unit (@code{n})
+@cindex @code{n} unit
+@cindex unit, @code{n}
+Ens.  In @code{groff}, this is half of an em.
+
+@item v
+@cindex vertical space unit (@code{v})
+@cindex space, vertical, unit (@code{v})
+@cindex @code{v} unit
+@cindex unit, @code{v}
+Vertical space.  This is equivalent to the current line spacing.
+@xref{Sizes}, for more information about this.
+
+@item M
+@cindex @code{M} unit
+@cindex unit, @code{M}
+100ths of an em.
+@end table
+
+@menu
+* Default Units::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Default Units,  , Measurements, Measurements
+@subsection Default Units
+@cindex default units
+@cindex units, default
+
+Many requests take a default unit.  While this can be helpful at times,
+it can cause strange errors in some expressions.  For example, the line
+length request expects em units.  Here are several attempts to get a
+line length of 3.5@tie{}inches and their results:
+
+@Example
+3.5i      @result{}   3.5i
+7/2       @result{}   0i
+7/2i      @result{}   0i
+(7 / 2)u  @result{}   0i
+7i/2      @result{}   0.1i
+7i/2u     @result{}   3.5i
+@endExample
+
+@noindent
+Everything is converted to basic units first.  In the above example it
+is assumed that 1@dmn{i} equals@tie{}240@dmn{u}, and 1@dmn{m}
+equals@tie{}10@dmn{p} (thus 1@dmn{m} equals@tie{}33@dmn{u}).  The value
+7@dmn{i}/2 is first handled as 7@dmn{i}/2@dmn{m}, then converted to
+1680@dmn{u}/66@dmn{u}, which is 25@dmn{u}, and this is approximately
+0.1@dmn{i}.  As can be seen, a scaling indicator after a closing
+parenthesis is simply ignored.
+
+@cindex measurements, specifying safely
+Thus, the safest way to specify measurements is to always attach a
+scaling indicator.  If you want to multiply or divide by a certain
+scalar value, use @samp{u} as the unit for that value.
+
+
+@c =====================================================================
+
+@node Expressions, Identifiers, Measurements, gtroff Reference
+@section Expressions
+@cindex expressions
+
+@code{gtroff} has most arithmetic operators common to other languages:
+
+@itemize @bullet
+@item
+@cindex arithmetic operators
+@cindex operators, arithmetic
+@opindex +
+@opindex -
+@opindex /
+@opindex *
+@opindex %
+Arithmetic: @samp{+} (addition), @samp{-} (subtraction), @samp{/}
+(division), @samp{*} (multiplication), @samp{%} (modulo).
+
+@code{gtroff} only provides integer arithmetic.  The internal type used
+for computing results is @samp{int}, which is usually a 32-bit signed
+integer.
+
+@item
+@cindex comparison operators
+@cindex operators, comparison
+@opindex <
+@opindex >
+@opindex >=
+@opindex <=
+@opindex =
+@opindex ==
+Comparison: @samp{<} (less than), @samp{>} (greater than), @samp{<=}
+(less than or equal), @samp{>=} (greater than or equal), @samp{=}
+(equal), @samp{==} (the same as @samp{=}).
+
+@item
+@cindex logical operators
+@cindex operators, logical
+@opindex &
+@ifnotinfo
+@opindex :
+@end ifnotinfo
+@ifinfo
+@opindex @r{<colon>}
+@end ifinfo
+Logical: @samp{&} (logical and), @samp{:} (logical or).
+
+@item
+@cindex unary operators
+@cindex operators, unary
+@opindex -
+@opindex +
+@opindex !
+@cindex @code{if} request, and the @samp{!} operator
+@cindex @code{while} request, and the @samp{!} operator
+Unary operators: @samp{-} (negating, i.e.@: changing the sign), @samp{+}
+(just for completeness; does nothing in expressions), @samp{!} (logical
+not; this works only within @code{if} and @code{while}
+requests).@footnote{Note that, for example, @samp{!(-1)} evaluates to
+`true' because @code{gtroff} treats both negative numbers and zero as
+`false'.}  See below for the use of unary operators in motion requests.
+
+@cindex logical not, limitation in expression
+@cindex expression, limitation of logical not in
+The logical not operator,
+as described above,
+works only within @code{if} and @code{while} requests.
+Furthermore, it may appear
+only at the beginning of an expression,
+and negates the entire expression.
+Attempting to insert the @samp{!} operator
+within the expression results in a
+@samp{numeric expression expected} warning.  This
+maintains compatibility
+with old versions of @code{troff}.
+
+Example:
+
+@Example
+.nr X 1
+.nr Y 0
+.\" This does not work as expected
+.if (\n[X])&(!\n[Y]) .nop X only
+.
+.\" Use this construct instead
+.if (\n[X]=1)&(\n[Y]=0) .nop X only
+@endExample
+
+@item
+@cindex extremum operators (@code{>?}, @code{<?})
+@cindex operators, extremum (@code{>?}, @code{<?})
+@opindex >?
+@opindex <?
+Extrema: @samp{>?} (maximum), @samp{<?} (minimum).
+
+Example:
+
+@Example
+.nr x 5
+.nr y 3
+.nr z (\n[x] >? \n[y])
+@endExample
+
+@noindent
+The register@tie{}@code{z} now contains@tie{}5.
+
+@item
+@cindex scaling operator
+@cindex operator, scaling
+Scaling: @code{(@var{c};@var{e})}.  Evaluate@tie{}@var{e}
+using@tie{}@var{c} as the default scaling indicator.  If @var{c} is
+missing, ignore scaling indicators in the evaluation of@tie{}@var{e}.
+@end itemize
+
+@cindex parentheses
+@cindex order of evaluation in expressions
+@cindex expression, order of evaluation
+@opindex (
+@opindex )
+Parentheses may be used as in any other language.  However, in
+@code{gtroff} they are necessary to ensure order of evaluation.
+@code{gtroff} has no operator precedence; expressions are evaluated left
+to right.  This means that @code{gtroff} evaluates @samp{3+5*4} as if it
+were parenthesized like @samp{(3+5)*4}, not as @samp{3+(5*4)}, as might
+be expected.
+
+@cindex @code{+}, and page motion
+@cindex @code{-}, and page motion
+@cindex motion operators
+@cindex operators, motion
+For many requests that cause a motion on the page, the unary operators
+@samp{+} and @samp{-} work differently if leading an expression.  They
+then indicate a motion relative to the current position (down or up,
+respectively).
+
+@cindex @code{|}, and page motion
+@cindex absolute position operator (@code{|})
+@cindex position, absolute, operator (@code{|})
+Similarly, a leading @samp{|} operator indicates an absolute position.
+For vertical movements, it specifies the distance from the top of the
+page; for horizontal movements, it gives the distance from the beginning
+of the @emph{input} line.
+
+@cindex @code{bp} request, using @code{+} and@tie{}@code{-}
+@cindex @code{in} request, using @code{+} and@tie{}@code{-}
+@cindex @code{ll} request, using @code{+} and@tie{}@code{-}
+@cindex @code{lt} request, using @code{+} and@tie{}@code{-}
+@cindex @code{nm} request, using @code{+} and@tie{}@code{-}
+@cindex @code{nr} request, using @code{+} and@tie{}@code{-}
+@cindex @code{pl} request, using @code{+} and@tie{}@code{-}
+@cindex @code{pn} request, using @code{+} and@tie{}@code{-}
+@cindex @code{po} request, using @code{+} and@tie{}@code{-}
+@cindex @code{ps} request, using @code{+} and@tie{}@code{-}
+@cindex @code{pvs} request, using @code{+} and@tie{}@code{-}
+@cindex @code{rt} request, using @code{+} and@tie{}@code{-}
+@cindex @code{ti} request, using @code{+} and@tie{}@code{-}
+@cindex @code{\H}, using @code{+} and@tie{}@code{-}
+@cindex @code{\R}, using @code{+} and@tie{}@code{-}
+@cindex @code{\s}, using @code{+} and@tie{}@code{-}
+@samp{+} and @samp{-} are also treated differently by the following
+requests and escapes: @code{bp}, @code{in}, @code{ll}, @code{lt},
+@code{nm}, @code{nr}, @code{pl}, @code{pn}, @code{po}, @code{ps},
+@code{pvs}, @code{rt}, @code{ti}, @code{\H}, @code{\R}, and @code{\s}.
+Here, leading plus and minus signs indicate increments and decrements.
+
+@xref{Setting Registers}, for some examples.
+
+@Defesc {\\B, ', anything, '}
+@cindex numeric expression, valid
+@cindex valid numeric expression
+Return@tie{}1 if @var{anything} is a valid numeric expression; or@tie{}0
+if @var{anything} is empty or not a valid numeric expression.
+@endDefesc
+
+@cindex space characters, in expressions
+@cindex expressions, and space characters
+Due to the way arguments are parsed, spaces are not allowed in
+expressions, unless the entire expression is surrounded by parentheses.
+
+@xref{Request and Macro Arguments}, and @ref{Conditionals and Loops}.
+
+
+@c =====================================================================
+
+@node Identifiers, Embedded Commands, Expressions, gtroff Reference
+@section Identifiers
+@cindex identifiers
+
+Like any other language, @code{gtroff} has rules for properly formed
+@dfn{identifiers}.  In @code{gtroff}, an identifier can be made up of
+almost any printable character, with the exception of the following
+characters:
+
+@itemize @bullet
+@item
+@cindex whitespace characters
+@cindex newline character
+@cindex character, whitespace
+Whitespace characters (spaces, tabs, and newlines).
+
+@item
+@cindex character, backspace
+@cindex backspace character
+@cindex @acronym{EBCDIC} encoding of backspace
+Backspace (@acronym{ASCII}@tie{}@code{0x08} or
+@acronym{EBCDIC}@tie{}@code{0x16}) and character code @code{0x01}.
+
+@item
+@cindex invalid input characters
+@cindex input characters, invalid
+@cindex characters, invalid input
+@cindex Unicode
+The following input characters are invalid and are ignored if
+@code{groff} runs on a machine based on @acronym{ASCII}, causing a
+warning message of type @samp{input} (see @ref{Debugging}, for more
+details): @code{0x00}, @code{0x0B}, @code{0x0D}--@code{0x1F},
+@code{0x80}--@code{0x9F}.
+
+And here are the invalid input characters if @code{groff} runs on an
+@acronym{EBCDIC} host: @code{0x00}, @code{0x08}, @code{0x09},
+@code{0x0B}, @code{0x0D}--@code{0x14}, @code{0x17}--@code{0x1F},
+@code{0x30}--@code{0x3F}.
+
+Currently, some of these reserved codepoints are used internally, thus
+making it non-trivial to extend @code{gtroff} to cover Unicode or other
+character sets and encodings that use characters of these ranges.
+
+Note that invalid characters are removed before parsing; an identifier
+@code{foo}, followed by an invalid character, followed by @code{bar} is
+treated as @code{foobar}.
+@end itemize
+
+For example, any of the following is valid.
+
+@Example
+br
+PP
+(l
+end-list
+@@_
+@endExample
+
+@cindex @code{]}, as part of an identifier
+@noindent
+Note that identifiers longer than two characters with a closing bracket
+(@samp{]}) in its name can't be accessed with escape sequences that
+expect an identifier as a parameter.  For example, @samp{\[foo]]}
+accesses the glyph @samp{foo}, followed by @samp{]}, whereas
+@samp{\C'foo]'} really asks for glyph @samp{foo]}.
+
+@cindex @code{refer}, and macro names starting with @code{[} or @code{]}
+@cindex @code{[}, macro names starting with, and @code{refer}
+@cindex @code{]}, macro names starting with, and @code{refer}
+@cindex macro names, starting with @code{[} or @code{]}, and @code{refer}
+To avoid problems with the @code{refer} preprocessor, macro names should
+not start with @samp{[} or @samp{]}.  Due to backwards compatibility,
+everything after @samp{.[} and @samp{.]} is handled as a special
+argument to @code{refer}.  For example, @samp{.[foo} makes @code{refer}
+to start a reference, using @samp{foo} as a parameter.
+
+@Defesc {\\A, ', ident, '}
+Test whether an identifier @var{ident} is valid in @code{gtroff}.  It
+expands to the character@tie{}1 or@tie{}0 according to whether its
+argument (usually delimited by quotes) is or is not acceptable as the
+name of a string, macro, diversion, number register, environment, or
+font.  It returns@tie{}0 if no argument is given.  This is useful for
+looking up user input in some sort of associative table.
+
+@Example
+\A'end-list'
+    @result{} 1
+@endExample
+@endDefesc
+
+@xref{Escapes}, for details on parameter delimiting characters.
+
+Identifiers in @code{gtroff} can be any length, but, in some contexts,
+@code{gtroff} needs to be told where identifiers end and text begins
+(and in different ways depending on their length):
+
+@itemize @bullet
+@item
+Single character.
+
+@cindex @code{(}, starting a two-character identifier
+@item
+Two characters.  Must be prefixed with @samp{(} in some situations.
+
+@cindex @code{[}, starting an identifier
+@cindex @code{]}, ending an identifier
+@item
+Arbitrary length (@code{gtroff} only).  Must be bracketed with @samp{[}
+and@tie{}@samp{]} in some situations.  Any length identifier can be put
+in brackets.
+@end itemize
+
+@cindex undefined identifiers
+@cindex identifiers, undefined
+Unlike many other programming languages, undefined identifiers are
+silently ignored or expanded to nothing.  When @code{gtroff} finds an
+undefined identifier, it emits a warning, doing the following:
+
+@itemize @bullet
+@item
+If the identifier is a string, macro, or diversion, @code{gtroff}
+defines it as empty.
+
+@item
+If the identifier is a number register, @code{gtroff} defines it with a
+value of@tie{}0.
+@end itemize
+
+@xref{Warnings}., @ref{Interpolating Registers}, and @ref{Strings}.
+
+Note that macros, strings, and diversions share the same name space.
+
+@Example
+.de xxx
+.  nop foo
+..
+.
+.di xxx
+bar
+.br
+.di
+.
+.xxx
+    @result{} bar
+@endExample
+
+@noindent
+As can be seen in the previous example, @code{gtroff} reuses the
+identifier @samp{xxx}, changing it from a macro to a diversion.  No
+warning is emitted!  The contents of the first macro definition is lost.
+
+@xref{Interpolating Registers}, and @ref{Strings}.
+
+
+@c =====================================================================
+
+@node Embedded Commands, Registers, Identifiers, gtroff Reference
+@section Embedded Commands
+@cindex embedded commands
+@cindex commands, embedded
+
+Most documents need more functionality beyond filling, adjusting and
+implicit line breaking.  In order to gain further functionality,
+@code{gtroff} allows commands to be embedded into the text, in two ways.
+
+The first is a @dfn{request} that takes up an entire line, and does
+some large-scale operation (e.g.@: break lines, start new pages).
+
+The other is an @dfn{escape} that can be usually embedded anywhere in
+the text; most requests can accept it even as an argument.  Escapes
+generally do more minor operations like sub- and superscripts, print a
+symbol, etc.
+
+@menu
+* Requests::
+* Macros::
+* Escapes::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Requests, Macros, Embedded Commands, Embedded Commands
+@subsection Requests
+@cindex requests
+
+@cindex control character (@code{.})
+@cindex character, control (@code{.})
+@cindex no-break control character (@code{'})
+@cindex character, no-break control (@code{'})
+@cindex control character, no-break (@code{'})
+A request line begins with a control character, which is either a single
+quote (@samp{'}, the @dfn{no-break control character}) or a period
+(@samp{.}, the normal @dfn{control character}).  These can be changed;
+see @ref{Character Translations}, for details.  After this there may be
+optional tabs or spaces followed by an identifier, which is the name of
+the request.  This may be followed by any number of space-separated
+arguments (@emph{no} tabs here).
+
+@cindex structuring source code of documents or macro packages
+@cindex documents, structuring the source code
+@cindex macro packages, structuring the source code
+Since a control character followed by whitespace only is ignored, it is
+common practice to use this feature for structuring the source code of
+documents or macro packages.
+
+@Example
+.de foo
+.  tm This is foo.
+..
+.
+.
+.de bar
+.  tm This is bar.
+..
+@endExample
+
+@cindex blank line
+@cindex blank line macro (@code{blm})
+Another possibility is to use the blank line macro request @code{blm} by
+assigning an empty macro to it.
+
+@Example
+.de do-nothing
+..
+.blm do-nothing  \" activate blank line macro
+
+.de foo
+.  tm This is foo.
+..
+
+
+.de bar
+.  tm This is bar.
+..
+
+.blm             \" deactivate blank line macro
+@endExample
+
+@xref{Blank Line Traps}.
+
+@cindex zero width space character (@code{\&})
+@cindex character, zero width space (@code{\&})
+@cindex space character, zero width (@code{\&})
+@cindex @code{\&}, escaping control characters
+To begin a line with a control character without it being interpreted,
+precede it with @code{\&}.  This represents a zero width space, which
+means it does not affect the output.
+
+In most cases the period is used as a control character.  Several
+requests cause a break implicitly; using the single quote control
+character prevents this.
+
+@Defreg {.br}
+A read-only number register, which is set to@tie{}1 if a macro is called
+with the normal control character (as defined with the @code{cc}
+request), and set to@tie{}0 otherwise.
+
+@cindex modifying requests
+@cindex requests, modifying
+This allows reliable modification of requests.
+
+@Example
+.als bp*orig bp
+.de bp
+.  tm before bp
+.  ie \\n[.br] .bp*orig
+.  el 'bp*orig
+.  tm after bp
+..
+@endExample
+
+Using this register outside of a macro makes no sense (it always returns
+zero in such cases).
+
+If a macro is called as a string (that is, using @code{\*}), the value
+of the @code{.br} register is inherited from the caller.
+@endDefreg
+
+@menu
+* Request and Macro Arguments::
+@end menu
+
+@node Request and Macro Arguments,  , Requests, Requests
+@subsubsection Request and Macro Arguments
+@cindex request arguments
+@cindex macro arguments
+@cindex arguments to requests and macros
+
+@cindex tabs, and macro arguments
+@cindex macro arguments, and tabs
+@cindex arguments to macros, and tabs
+Arguments to requests and macros are processed much like the shell:
+The line is split into arguments according to
+spaces.@footnote{Plan@tie{}9's @code{troff} implementation also allows
+tabs for argument separation -- @code{gtroff} intentionally doesn't
+support this.}
+
+@cindex spaces, in a macro argument
+An argument to a macro that is intended to contain spaces can either be
+enclosed in double quotes, or have the spaces @dfn{escaped} with
+backslashes.  This is @emph{not} true for requests.
+
+Here are a few examples for a hypothetical macro @code{uh}:
+
+@Example
+.uh The Mouse Problem
+.uh "The Mouse Problem"
+.uh The\ Mouse\ Problem
+@endExample
+
+@cindex @code{\~}, difference to @code{\@key{SP}}
+@cindex @code{\@key{SP}}, difference to @code{\~}
+@noindent
+The first line is the @code{uh} macro being called with 3 arguments,
+@samp{The}, @samp{Mouse}, and @samp{Problem}.  The latter two have the
+same effect of calling the @code{uh} macro with one argument, @samp{The
+Mouse Problem}.@footnote{The last solution, i.e., using escaped spaces,
+is ``classical'' in the sense that it can be found in most @code{troff}
+documents.  Nevertheless, it is not optimal in all situations, since
+@w{@samp{\ }} inserts a fixed-width, non-breaking space character that
+can't stretch.  @code{gtroff} provides a different command @code{\~} to
+insert a stretchable, non-breaking space.}
+
+@cindex @code{"}, in a macro argument
+@cindex double quote, in a macro argument
+A double quote that isn't preceded by a space doesn't start a macro
+argument.  If not closing a string, it is printed literally.
+
+For example,
+
+@Example
+.xxx a" "b c" "de"fg"
+@endExample
+
+@noindent
+has the arguments @samp{a"}, @w{@samp{b c}}, @samp{de}, and @samp{fg"}.
+Don't rely on this obscure behaviour!
+
+There are two possibilities to get a double quote reliably.
+
+@itemize @bullet
+@item
+Enclose the whole argument with double quotes and use two consecutive
+double quotes to represent a single one.  This traditional solution has
+the disadvantage that double quotes don't survive argument expansion
+again if called in compatibility mode (using the @option{-C} option of
+@code{groff}):
+
+@Example
+.de xx
+.  tm xx: `\\$1' `\\$2' `\\$3'
+.
+.  yy "\\$1" "\\$2" "\\$3"
+..
+.de yy
+.  tm yy: `\\$1' `\\$2' `\\$3'
+..
+.xx A "test with ""quotes""" .
+    @result{} xx: `A' `test with "quotes"' `.'
+    @result{} yy: `A' `test with ' `quotes""'
+@endExample
+
+@noindent
+If not in compatibility mode, you get the expected result
+
+@Example
+xx: `A' `test with "quotes"' `.'
+yy: `A' `test with "quotes"' `.'
+@endExample
+
+@noindent
+since @code{gtroff} preserves the input level.
+
+@item
+Use the double quote glyph @code{\(dq}.  This works with and without
+compatibility mode enabled since @code{gtroff} doesn't convert
+@code{\(dq} back to a double quote input character.
+
+Note that this method won't work with Unix @code{troff} in general since
+the glyph `dq' isn't defined normally.
+@end itemize
+
+@cindex @code{ds} request, and double quotes
+Double quotes in the @code{ds} request are handled differently.
+@xref{Strings}, for more details.
+
+@c ---------------------------------------------------------------------
+
+@node Macros, Escapes, Requests, Embedded Commands
+@subsection Macros
+@cindex macros
+
+@code{gtroff} has a @dfn{macro} facility for defining a series of lines
+that can be invoked by name.  They are called in the same manner as
+requests -- arguments also may be passed basically in the same manner.
+
+@xref{Writing Macros}, and @ref{Request and Macro Arguments}.
+
+@c ---------------------------------------------------------------------
+
+@node Escapes,  , Macros, Embedded Commands
+@subsection Escapes
+@cindex escapes
+
+Escapes may occur anywhere in the input to @code{gtroff}.  They usually
+begin with a backslash and are followed by a single character, which
+indicates the function to be performed.  The escape character can be
+changed; see @ref{Character Translations}.
+
+Escape sequences that require an identifier as a parameter accept three
+possible syntax forms.
+
+@itemize @bullet
+@item
+The next single character is the identifier.
+
+@cindex @code{(}, starting a two-character identifier
+@item
+If this single character is an opening parenthesis, take the following
+two characters as the identifier.  Note that there is no closing
+parenthesis after the identifier.
+
+@cindex @code{[}, starting an identifier
+@cindex @code{]}, ending an identifier
+@item
+If this single character is an opening bracket, take all characters
+until a closing bracket as the identifier.
+@end itemize
+
+@noindent
+Examples:
+
+@Example
+\fB
+\n(XX
+\*[TeX]
+@endExample
+
+@cindex @code{'}, delimiting arguments
+@cindex argument delimiting characters
+@cindex characters, argument delimiting
+@cindex delimiting characters for arguments
+Other escapes may require several arguments and/or some special format.
+In such cases the argument is traditionally enclosed in single quotes
+(and quotes are always used in this manual for the definitions of escape
+sequences).  The enclosed text is then processed according to what that
+escape expects.  Example:
+
+@Example
+\l'1.5i\(bu'
+@endExample
+
+@cindex @code{\o}, possible quote characters
+@cindex @code{\b}, possible quote characters
+@cindex @code{\X}, possible quote characters
+Note that the quote character can be replaced with any other character
+that does not occur in the argument (even a newline or a space
+character) in the following escapes: @code{\o}, @code{\b}, and
+@code{\X}.  This makes e.g.
+
+@Example
+A caf
+\o
+e\'
+
+
+in Paris
+  @result{} A café in Paris
+@endExample
+
+@noindent
+possible, but it is better not to use this feature to avoid confusion.
+
+@cindex @code{\%}, used as delimiter
+@cindex @code{\@key{SP}}, used as delimiter
+@cindex @code{\|}, used as delimiter
+@cindex @code{\^}, used as delimiter
+@cindex @code{\@{}, used as delimiter
+@cindex @code{\@}}, used as delimiter
+@cindex @code{\'}, used as delimiter
+@cindex @code{\`}, used as delimiter
+@cindex @code{\-}, used as delimiter
+@cindex @code{\_}, used as delimiter
+@cindex @code{\!}, used as delimiter
+@cindex @code{\?}, used as delimiter
+@cindex @code{\)}, used as delimiter
+@cindex @code{\/}, used as delimiter
+@cindex @code{\,}, used as delimiter
+@cindex @code{\&}, used as delimiter
+@ifnotinfo
+@cindex @code{\:}, used as delimiter
+@end ifnotinfo
+@ifinfo
+@cindex @code{\@r{<colon>}}, used as delimiter
+@end ifinfo
+@cindex @code{\~}, used as delimiter
+@cindex @code{\0}, used as delimiter
+@cindex @code{\a}, used as delimiter
+@cindex @code{\c}, used as delimiter
+@cindex @code{\d}, used as delimiter
+@cindex @code{\e}, used as delimiter
+@cindex @code{\E}, used as delimiter
+@cindex @code{\p}, used as delimiter
+@cindex @code{\r}, used as delimiter
+@cindex @code{\t}, used as delimiter
+@cindex @code{\u}, used as delimiter
+The following escape sequences (which are handled similarly to
+characters since they don't take a parameter) are also allowed as
+delimiters: @code{\%}, @w{@samp{\ }}, @code{\|}, @code{\^}, @code{\@{},
+@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
+@code{\?}, @code{\)}, @code{\/}, @code{\,}, @code{\&}, @code{\:},
+@code{\~}, @code{\0}, @code{\a}, @code{\c}, @code{\d}, @code{\e},
+@code{\E}, @code{\p}, @code{\r}, @code{\t}, and @code{\u}.  Again, don't
+use these if possible.
+
+@cindex @code{\A}, allowed delimiters
+@cindex @code{\B}, allowed delimiters
+@cindex @code{\Z}, allowed delimiters
+@cindex @code{\C}, allowed delimiters
+@cindex @code{\w}, allowed delimiters
+No newline characters as delimiters are allowed in the following
+escapes: @code{\A}, @code{\B}, @code{\Z}, @code{\C}, and @code{\w}.
+
+@cindex @code{\D}, allowed delimiters
+@cindex @code{\h}, allowed delimiters
+@cindex @code{\H}, allowed delimiters
+@cindex @code{\l}, allowed delimiters
+@cindex @code{\L}, allowed delimiters
+@cindex @code{\N}, allowed delimiters
+@cindex @code{\R}, allowed delimiters
+@cindex @code{\s}, allowed delimiters
+@cindex @code{\S}, allowed delimiters
+@cindex @code{\v}, allowed delimiters
+@cindex @code{\x}, allowed delimiters
+Finally, the escapes @code{\D}, @code{\h}, @code{\H}, @code{\l},
+@code{\L}, @code{\N}, @code{\R}, @code{\s}, @code{\S}, @code{\v}, and
+@code{\x} can't use the following characters as delimiters:
+
+@itemize @bullet
+@item
+@cindex numbers, and delimiters
+@cindex digits, and delimiters
+The digits @code{0}-@code{9}.
+
+@item
+@cindex operators, as delimiters
+@cindex @code{+}, as delimiter
+@cindex @code{-}, as delimiter
+@cindex @code{/}, as delimiter
+@cindex @code{*}, as delimiter
+@cindex @code{%}, as delimiter
+@cindex @code{<}, as delimiter
+@cindex @code{>}, as delimiter
+@cindex @code{=}, as delimiter
+@cindex @code{&}, as delimiter
+@ifnotinfo
+@cindex @code{:}, as delimiter
+@end ifnotinfo
+@ifinfo
+@cindex <colon>, as delimiter
+@end ifinfo
+@cindex @code{(}, as delimiter
+@cindex @code{)}, as delimiter
+@cindex @code{.}, as delimiter
+The (single-character) operators @samp{+-/*%<>=&:().}.
+
+@item
+@cindex space character
+@cindex character, space
+@cindex tab character
+@cindex character, tab
+@cindex newline character
+@cindex character, newline
+The space, tab, and newline characters.
+
+@item
+@cindex @code{\%}, used as delimiter
+@ifnotinfo
+@cindex @code{\:}, used as delimiter
+@end ifnotinfo
+@ifinfo
+@cindex @code{\@r{<colon>}}, used as delimiter
+@end ifinfo
+@cindex @code{\@{}, used as delimiter
+@cindex @code{\@}}, used as delimiter
+@cindex @code{\'}, used as delimiter
+@cindex @code{\`}, used as delimiter
+@cindex @code{\-}, used as delimiter
+@cindex @code{\_}, used as delimiter
+@cindex @code{\!}, used as delimiter
+@cindex @code{\/}, used as delimiter
+@cindex @code{\c}, used as delimiter
+@cindex @code{\e}, used as delimiter
+@cindex @code{\p}, used as delimiter
+All escape sequences except @code{\%}, @code{\:}, @code{\@{},
+@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
+@code{\/}, @code{\c}, @code{\e}, and @code{\p}.
+@end itemize
+
+@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
+@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
+To have a backslash (actually, the current escape character) appear in
+the output several escapes are defined: @code{\\}, @code{\e} or
+@code{\E}.  These are very similar, and only differ with respect to
+being used in macros or diversions.  @xref{Character Translations}, for
+an exact description of those escapes.
+
+@xref{Implementation Differences}, @ref{Copy-in Mode}, and
+@ref{Diversions}, @ref{Identifiers}, for more information.
+
+@menu
+* Comments::
+@end menu
+
+@node Comments,  , Escapes, Escapes
+@subsubsection Comments
+@cindex comments
+
+Probably one of the most@footnote{Unfortunately, this is a lie.  But
+hopefully future @code{gtroff} hackers will believe it @code{:-)}}
+common forms of escapes is the comment.
+
+@Defesc {\\", , , }
+Start a comment.  Everything to the end of the input line is ignored.
+
+This may sound simple, but it can be tricky to keep the comments from
+interfering with the appearance of the final output.
+
+@cindex @code{ds}, @code{ds1} requests, and comments
+@cindex @code{as}, @code{as1} requests, and comments
+If the escape is to the right of some text or a request, that portion of
+the line is ignored, but the space leading up to it is noticed by
+@code{gtroff}.  This only affects the @code{ds} and @code{as} request
+and its variants.
+
+@cindex tabs, before comments
+@cindex comments, lining up with tabs
+One possibly irritating idiosyncracy is that tabs must not be used to
+line up comments.  Tabs are not treated as whitespace between the
+request and macro arguments.
+
+@cindex undefined request
+@cindex request, undefined
+A comment on a line by itself is treated as a blank line, because after
+eliminating the comment, that is all that remains:
+
+@Example
+Test
+\" comment
+Test
+@endExample
+
+@noindent
+produces
+
+@Example
+Test
+
+Test
+@endExample
+
+To avoid this, it is common to start the line with @code{.\"}, which
+causes the line to be treated as an undefined request and thus ignored
+completely.
+
+@cindex @code{'}, as a comment
+Another commenting scheme seen sometimes is three consecutive single
+quotes (@code{'''}) at the beginning of a line.  This works, but
+@code{gtroff} gives a warning about an undefined macro (namely
+@code{''}), which is harmless, but irritating.
+@endDefesc
+
+@Defesc {\\#, , , }
+To avoid all this, @code{gtroff} has a new comment mechanism using the
+@code{\#} escape.  This escape works the same as @code{\"} except that
+the newline is also ignored:
+
+@Example
+Test
+\# comment
+Test
+@endExample
+
+@noindent
+produces
+
+@Example
+Test Test
+@endExample
+
+@noindent
+as expected.
+@endDefesc
+
+@Defreq {ig, [@Var{end}]}
+Ignore all input until @code{gtroff} encounters the macro named
+@code{.}@var{end} on a line by itself (or @code{..} if @var{end} is not
+specified).  This is useful for commenting out large blocks of text:
+
+@Example
+text text text...
+.ig
+This is part of a large block
+of text that has been
+temporarily(?) commented out.
+
+We can restore it simply by removing
+the .ig request and the ".." at the
+end of the block.
+..
+More text text text...
+@endExample
+
+@noindent
+produces
+
+@Example
+text text text@dots{}  More text text text@dots{}
+@endExample
+
+@noindent
+Note that the commented-out block of text does not cause a break.
+
+@cindex @code{ig} request, and copy-in mode
+@cindex copy-in mode, and @code{ig} request
+@cindex mode, copy-in, and @code{ig} request
+@cindex @code{ig} request, and auto-increment
+@cindex auto-increment, and @code{ig} request
+The input is read in copy-mode; auto-incremented registers @emph{are}
+affected (@pxref{Auto-increment}).
+@endDefreq
+
+
+@c =====================================================================
+
+@node Registers, Manipulating Filling and Adjusting, Embedded Commands, gtroff Reference
+@section Registers
+@cindex registers
+
+Numeric variables in @code{gtroff} are called @dfn{registers}.  There
+are a number of built-in registers, supplying anything from the date to
+details of formatting parameters.
+
+@xref{Identifiers}, for details on register identifiers.
+
+@menu
+* Setting Registers::
+* Interpolating Registers::
+* Auto-increment::
+* Assigning Formats::
+* Built-in Registers::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Setting Registers, Interpolating Registers, Registers, Registers
+@subsection Setting Registers
+@cindex setting registers (@code{nr}, @code{\R})
+@cindex registers, setting (@code{nr}, @code{\R})
+
+Define or set registers using the @code{nr} request or the @code{\R}
+escape.
+
+Although the following requests and escapes can be used to create
+registers, simply using an undefined register will cause it to be
+set to zero.
+
+@DefreqList {nr, ident value}
+@DefescListEndx {\\R, ', ident value, '}
+Set number register @var{ident} to @var{value}.  If @var{ident} doesn't
+exist, @code{gtroff} creates it.
+
+The argument to @code{\R} usually has to be enclosed in quotes.
+@xref{Escapes}, for details on parameter delimiting characters.
+
+The @code{\R} escape doesn't produce an input token in @code{gtroff};
+in other words, it vanishes completely after @code{gtroff} has
+processed it.
+
+For example, the following two lines are equivalent:
+
+@Example
+.nr a (((17 + (3 * 4))) % 4)
+\R'a (((17 + (3 * 4))) % 4)'
+    @result{} 1
+@endExample
+
+Note that the complete transparency of @code{\R} can cause surprising
+effects if you use number registers like @code{.k}, which get evaluated
+at the time they are accessed.
+
+@Example
+.ll 1.6i
+.
+aaa bbb ccc ddd eee fff ggg hhh\R':k \n[.k]'
+.tm :k == \n[:k]
+    @result{} :k == 126950
+.
+.br
+.
+aaa bbb ccc ddd eee fff ggg hhh\h'0'\R':k \n[.k]'
+.tm :k == \n[:k]
+    @result{} :k == 15000
+@endExample
+
+If you process this with the @sc{PostScript} device (@code{-Tps}),
+there will be a line break eventually after @code{ggg} in both input
+lines.  However, after processing the space after @code{ggg}, the
+partially collected line is not overfull yet, so @code{troff}
+continues to collect input until it sees the space (or in this case,
+the newline) after @code{hhh}.  At this point, the line is longer
+than the line length, and the line gets broken.
+
+In the first input line, since the @code{\R} escape leaves no traces,
+the check for the overfull line hasn't been done yet at the point where
+@code{\R} gets handled, and you get a value for the @code{.k} number
+register that is even greater than the current line length.
+
+In the second input line, the insertion of @code{\h'0'} to emit an
+invisible zero-width space forces @code{troff} to check the line length,
+which in turn causes the start of a new output line.  Now @code{.k}
+returns the expected value.
+@endDefreq
+
+Both @code{nr} and @code{\R} have two additional special forms to
+increment or decrement a register.
+
+@DefreqList {nr, ident @t{+}@Var{value}}
+@DefreqItem {nr, ident @t{-}@Var{value}}
+@DefescItemx {\\R, ', ident @t{+}value, '}
+@DefescListEnd {\\R, ', ident @t{-}value, '}
+Increment (decrement) register @var{ident} by @var{value}.
+
+@Example
+.nr a 1
+.nr a +1
+\na
+    @result{} 2
+@endExample
+
+@cindex negating register values
+To assign the negated value of a register to another register, some care
+must be taken to get the desired result:
+
+@Example
+.nr a 7
+.nr b 3
+.nr a -\nb
+\na
+    @result{} 4
+.nr a (-\nb)
+\na
+    @result{} -3
+@endExample
+
+@noindent
+The surrounding parentheses prevent the interpretation of the minus sign
+as a decrementing operator.  An alternative is to start the assignment
+with a @samp{0}:
+
+@Example
+.nr a 7
+.nr b -3
+.nr a \nb
+\na
+    @result{} 4
+.nr a 0\nb
+\na
+    @result{} -3
+@endExample
+@endDefreq
+
+@Defreq {rr, ident}
+@cindex removing number register (@code{rr})
+@cindex number register, removing (@code{rr})
+@cindex register, removing (@code{rr})
+Remove number register @var{ident}.  If @var{ident} doesn't exist, the
+request is ignored.
+@endDefreq
+
+@Defreq {rnn, ident1 ident2}
+@cindex renaming number register (@code{rnn})
+@cindex number register, renaming (@code{rnn})
+@cindex register, renaming (@code{rnn})
+Rename number register @var{ident1} to @var{ident2}.  If either
+@var{ident1} or @var{ident2} doesn't exist, the request is ignored.
+@endDefreq
+
+@Defreq {aln, ident1 ident2}
+@cindex alias, number register, creating (@code{aln})
+@cindex creating alias, for number register (@code{aln})
+@cindex number register, creating alias (@code{aln})
+@cindex register, creating alias (@code{aln})
+Create an alias @var{ident1} for a number register @var{ident2}.  The
+new name and the old name are exactly equivalent.  If @var{ident1} is
+undefined, a warning of type @samp{reg} is generated, and the request is
+ignored.  @xref{Debugging}, for information about warnings.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Interpolating Registers, Auto-increment, Setting Registers, Registers
+@subsection Interpolating Registers
+@cindex interpolating registers (@code{\n})
+@cindex registers, interpolating (@code{\n})
+
+Numeric registers can be accessed via the @code{\n} escape.
+
+@DefescList {\\n, , i, }
+@DefescItem {\\n, @Lparen{}, id, }
+@DefescListEnd {\\n, @Lbrack{}, ident, @Rbrack{}}
+@cindex nested assignments
+@cindex assignments, nested
+@cindex indirect assignments
+@cindex assignments, indirect
+Interpolate number register with name @var{ident} (one-character
+name@tie{}@var{i}, two-character name @var{id}).  This means that the
+value of the register is expanded in-place while @code{gtroff} is
+parsing the input line.  Nested assignments (also called indirect
+assignments) are possible.
+
+@Example
+.nr a 5
+.nr as \na+\na
+\n(as
+    @result{} 10
+@endExample
+
+@Example
+.nr a1 5
+.nr ab 6
+.ds str b
+.ds num 1
+\n[a\n[num]]
+    @result{} 5
+\n[a\*[str]]
+    @result{} 6
+@endExample
+@endDefesc
+
+@c ---------------------------------------------------------------------
+
+@node Auto-increment, Assigning Formats, Interpolating Registers, Registers
+@subsection Auto-increment
+@cindex auto-increment
+@cindex increment, automatic
+
+Number registers can also be auto-incremented and auto-decremented.  The
+increment or decrement value can be specified with a third argument to
+the @code{nr} request or @code{\R} escape.
+
+@Defreq {nr, ident value incr}
+@cindex @code{\R}, difference to @code{nr}
+Set number register @var{ident} to @var{value}; the increment for
+auto-incrementing is set to @var{incr}.  Note that the @code{\R} escape
+doesn't support this notation.
+@endDefreq
+
+To activate auto-incrementing, the escape @code{\n} has a special syntax
+form.
+
+@DefescList {\\n, +, i, }
+@DefescItem {\\n, -, i, }
+@DefescItem {\\n, +@Lparen{}, id, }
+@DefescItem {\\n, -@Lparen{}, id, }
+@DefescItem {\\n, +@Lbrack{}, ident, @Rbrack{}}
+@DefescListEnd {\\n, -@Lbrack{}, ident, @Rbrack{}}
+Before interpolating, increment or decrement @var{ident} (one-character
+name@tie{}@var{i}, two-character name @var{id}) by the auto-increment
+value as specified with the @code{nr} request (or the @code{\R} escape).
+If no auto-increment value has been specified, these syntax forms are
+identical to @code{\n}.
+@endDefesc
+
+For example,
+
+@Example
+.nr a 0 1
+.nr xx 0 5
+.nr foo 0 -2
+\n+a, \n+a, \n+a, \n+a, \n+a
+.br
+\n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
+.br
+\n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
+@endExample
+
+@noindent
+produces
+
+@Example
+1, 2, 3, 4, 5
+-5, -10, -15, -20, -25
+-2, -4, -6, -8, -10
+@endExample
+
+@cindex increment value without changing the register
+@cindex value, incrementing without changing the register
+To change the increment value without changing the value of a register
+(@var{a} in the example), the following can be used:
+
+@Example
+.nr a \na 10
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Assigning Formats, Built-in Registers, Auto-increment, Registers
+@subsection Assigning Formats
+@cindex assigning formats (@code{af})
+@cindex formats, assigning (@code{af})
+
+When a register is used, it is always textually replaced (or
+interpolated) with a representation of that number.  This output format
+can be changed to a variety of formats (numbers, Roman numerals, etc.).
+This is done using the @code{af} request.
+
+@Defreq {af, ident format}
+Change the output format of a number register.  The first argument
+@var{ident} is the name of the number register to be changed, and the
+second argument @var{format} is the output format.  The following output
+formats are available:
+
+@table @code
+@item 1
+Decimal arabic numbers.  This is the default format: 0, 1, 2,
+3,@tie{}@enddots{}
+
+@item 0@dots{}0
+Decimal numbers with as many digits as specified.  So, @samp{00} would
+result in printing numbers as 01, 02, 03,@tie{}@enddots{}
+
+In fact, any digit instead of zero does work; @code{gtroff} only counts
+how many digits are specified.  As a consequence, @code{af}'s default
+format @samp{1} could be specified as @samp{0} also (and exactly this is
+returned by the @code{\g} escape, see below).
+
+@item I
+@cindex Roman numerals
+@cindex numerals, Roman
+Upper-case Roman numerals: 0, I, II, III, IV,@tie{}@enddots{}
+
+@item i
+Lower-case Roman numerals: 0, i, ii, iii, iv,@tie{}@enddots{}
+
+@item A
+Upper-case letters: 0, A, B, C, @dots{},@tie{}Z, AA, AB,@tie{}@enddots{}
+
+@item a
+Lower-case letters: 0, a, b, c, @dots{},@tie{}z, aa, ab,@tie{}@enddots{}
+@end table
+
+Omitting the number register format causes a warning of type
+@samp{missing}.  @xref{Debugging}, for more details.  Specifying a
+nonexistent format causes an error.
+
+The following example produces @samp{10, X, j, 010}:
+
+@Example
+.nr a 10
+.af a 1           \" the default format
+\na,
+.af a I
+\na,
+.af a a
+\na,
+.af a 001
+\na
+@endExample
+
+@cindex Roman numerals, maximum and minimum
+@cindex maximum values of Roman numerals
+@cindex minimum values of Roman numerals
+The largest number representable for the @samp{i} and @samp{I} formats
+is 39999 (or @minus{}39999); Unix @code{troff} uses @samp{z} and
+@samp{w} to represent 10000 and 5000 in Roman numerals, and so does
+@code{gtroff}.  Currently, the correct glyphs of Roman numeral five
+thousand and Roman numeral ten thousand (Unicode code points
+@code{U+2182} and @code{U+2181}, respectively) are not available.
+
+If @var{ident} doesn't exist, it is created.
+
+@cindex read-only register, changing format
+@cindex changing format, and read-only registers
+Changing the output format of a read-only register causes an error.  It
+is necessary to first copy the register's value to a writeable register,
+then apply the @code{af} request to this other register.
+@endDefreq
+
+@DefescList {\\g, , i, }
+@DefescItem {\\g, @Lparen{}, id, }
+@DefescListEnd {\\g, @Lbrack{}, ident, @Rbrack{}}
+@cindex format of register (@code{\g})
+@cindex register, format (@code{\g})
+Return the current format of the specified register @var{ident}
+(one-character name@tie{}@var{i}, two-character name @var{id}).  For
+example, @samp{\ga} after the previous example would produce the string
+@samp{000}.  If the register hasn't been defined yet, nothing is
+returned.
+@endDefesc
+
+@c ---------------------------------------------------------------------
+
+@node Built-in Registers,  , Assigning Formats, Registers
+@subsection Built-in Registers
+@cindex built-in registers
+@cindex registers, built-in
+
+The following lists some built-in registers that are not described
+elsewhere in this manual.  Any register that begins with a @samp{.} is
+read-only.  A complete listing of all built-in registers can be found in
+@ref{Register Index}.
+
+@table @code
+@item \n[.F]
+@cindex current input file name register (@code{.F})
+@cindex input file name, current, register (@code{.F})
+@vindex .F
+This string-valued register returns the current input file name.
+
+@item \n[.H]
+@cindex horizontal resolution register (@code{.H})
+@cindex resolution, horizontal, register (@code{.H})
+@vindex .H
+Number of basic units per horizontal unit of output device resolution.
+@xref{Measurements}.
+
+@item \n[.R]
+@cindex number of registers register (@code{.R})
+@cindex registers, number of, register (@code{.R})
+@vindex .R
+The number of number registers available.  This is always 10000 in
+GNU@tie{}@code{troff}; it exists for backward compatibility.
+
+@item \n[.U]
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+@vindex .U
+If @code{gtroff} is called with the @option{-U} command-line option to
+activate unsafe mode, the number register @code{.U} is set to@tie{}1,
+and to zero otherwise.  @xref{Groff Options}.
+
+@item \n[.V]
+@cindex vertical resolution register (@code{.V})
+@cindex resolution, vertical, register (@code{.V})
+@vindex .V
+Number of basic units per vertical unit of output device resolution.
+@xref{Measurements}.
+
+@item \n[seconds]
+@cindex seconds, current time (@code{seconds})
+@cindex time, current, seconds (@code{seconds})
+@cindex current time, seconds (@code{seconds})
+@vindex seconds
+The number of seconds after the minute, normally in the range@tie{}0
+to@tie{}59, but can be up to@tie{}61 to allow for leap seconds.
+Initialized at start-up of @code{gtroff}.
+
+@item \n[minutes]
+@cindex minutes, current time (@code{minutes})
+@cindex time, current, minutes (@code{minutes})
+@cindex current time, minutes (@code{minutes})
+@vindex minutes
+The number of minutes after the hour, in the range@tie{}0 to@tie{}59.
+Initialized at start-up of @code{gtroff}.
+
+@item \n[hours]
+@cindex hours, current time (@code{hours})
+@cindex time, current, hours (@code{hours})
+@cindex current time, hours (@code{hours})
+@vindex hours
+The number of hours past midnight, in the range@tie{}0 to@tie{}23.
+Initialized at start-up of @code{gtroff}.
+
+@item \n[dw]
+@cindex day of the week register (@code{dw})
+@cindex date, day of the week register (@code{dw})
+@vindex dw
+Day of the week (1--7).
+
+@item \n[dy]
+@cindex day of the month register (@code{dy})
+@cindex date, day of the month register (@code{dy})
+@vindex dy
+Day of the month (1--31).
+
+@item \n[mo]
+@cindex month of the year register (@code{mo})
+@cindex date, month of the year register (@code{mo})
+@vindex mo
+Current month (1--12).
+
+@item \n[year]
+@cindex date, year register (@code{year}, @code{yr})
+@cindex year, current, register (@code{year}, @code{yr})
+@vindex year
+The current year.
+
+@item \n[yr]
+@vindex yr
+The current year minus@tie{}1900.  Unfortunately, the documentation of
+Unix Version@tie{}7's @code{troff} had a year@tie{}2000 bug: It
+incorrectly claimed that @code{yr} contains the last two digits of the
+year.  That claim has never been true of either @acronym{AT&T}
+@code{troff} or GNU @code{troff}.  Old @code{troff} input that looks
+like this:
+
+@Example
+'\" The following line stopped working after 1999
+This document was formatted in 19\n(yr.
+@endExample
+
+@noindent
+can be corrected as follows:
+
+@Example
+This document was formatted in \n[year].
+@endExample
+
+@noindent
+or, to be portable to older @code{troff} versions, as follows:
+
+@Example
+.nr y4 1900+\n(yr
+This document was formatted in \n(y4.
+@endExample
+
+@item \n[.c]
+@vindex .c
+@itemx \n[c.]
+@vindex c.
+@cindex input line number register (@code{.c}, @code{c.})
+@cindex line number, input, register (@code{.c}, @code{c.})
+The current @emph{input} line number.  Register @samp{.c} is read-only,
+whereas @samp{c.} (a @code{gtroff} extension) is writable also,
+affecting both @samp{.c} and @samp{c.}.
+
+@item \n[ln]
+@vindex ln
+@cindex output line number register (@code{ln})
+@cindex line number, output, register (@code{ln})
+The current @emph{output} line number after a call to the @code{nm}
+request to activate line numbering.
+
+@xref{Miscellaneous}, for more information about line numbering.
+
+@item \n[.x]
+@vindex .x
+@cindex major version number register (@code{.x})
+@cindex version number, major, register (@code{.x})
+The major version number.  For example, if the version number is 1.03
+then @code{.x} contains@tie{}@samp{1}.
+
+@item \n[.y]
+@vindex .y
+@cindex minor version number register (@code{.y})
+@cindex version number, minor, register (@code{.y})
+The minor version number.  For example, if the version number is 1.03
+then @code{.y} contains@tie{}@samp{03}.
+
+@item \n[.Y]
+@vindex .Y
+@cindex revision number register (@code{.Y})
+The revision number of @code{groff}.
+
+@item \n[$$]
+@vindex $$
+@cindex process ID of @code{gtroff} register (@code{$$})
+@cindex @code{gtroff}, process ID register (@code{$$})
+The process ID of @code{gtroff}.
+
+@item \n[.g]
+@vindex .g
+@cindex @code{gtroff}, identification register (@code{.g})
+@cindex GNU-specific register (@code{.g})
+Always@tie{}1.  Macros should use this to determine whether they are
+running under GNU @code{troff}.
+
+@item \n[.A]
+@vindex .A
+@cindex @acronym{ASCII} approximation output register (@code{.A})
+If the command-line option @option{-a} is used to produce an
+@acronym{ASCII} approximation of the output, this is set to@tie{}1, zero
+otherwise.  @xref{Groff Options}.
+
+@item \n[.O]
+@vindex .O
+This read-only register is set to the suppression nesting level (see
+escapes @code{\O}).  @xref{Suppressing output}.
+
+@item \n[.P]
+@vindex .P
+This register is set to@tie{}1 (and to@tie{}0 otherwise) if the current
+page is actually being printed, i.e., if the @option{-o} option is being
+used to only print selected pages.  @xref{Groff Options}, for more
+information.
+
+@item \n[.T]
+@vindex .T
+If @code{gtroff} is called with the @option{-T} command-line option, the
+number register @code{.T} is set to@tie{}1, and zero otherwise.
+@xref{Groff Options}.
+
+@item \*[.T]
+@stindex .T
+@cindex output device name string register (@code{.T})
+A single read-write string register that contains the current output
+device (for example, @samp{latin1} or @samp{ps}).  This is the only
+string register defined by @code{gtroff}.
+@end table
+
+
+@c =====================================================================
+
+@node Manipulating Filling and Adjusting, Manipulating Hyphenation, Registers, gtroff Reference
+@section Manipulating Filling and Adjusting
+@cindex manipulating filling and adjusting
+@cindex filling and adjusting, manipulating
+@cindex adjusting and filling, manipulating
+@cindex justifying text
+@cindex text, justifying
+
+@cindex break
+@cindex line break
+@cindex @code{bp} request, causing implicit linebreak
+@cindex @code{ce} request, causing implicit linebreak
+@cindex @code{cf} request, causing implicit linebreak
+@cindex @code{fi} request, causing implicit linebreak
+@cindex @code{fl} request, causing implicit linebreak
+@cindex @code{in} request, causing implicit linebreak
+@cindex @code{nf} request, causing implicit linebreak
+@cindex @code{rj} request, causing implicit linebreak
+@cindex @code{sp} request, causing implicit linebreak
+@cindex @code{ti} request, causing implicit linebreak
+@cindex @code{trf} request, causing implicit linebreak
+Various ways of causing @dfn{breaks} were given in @ref{Implicit Line
+Breaks}.  The @code{br} request likewise causes a break.  Several other
+requests also cause breaks, but implicitly.  These are @code{bp},
+@code{ce}, @code{cf}, @code{fi}, @code{fl}, @code{in}, @code{nf},
+@code{rj}, @code{sp}, @code{ti}, and @code{trf}.
+
+@Defreq {br, }
+Break the current line, i.e., the input collected so far is emitted
+without adjustment.
+
+If the no-break control character is used, @code{gtroff} suppresses the
+break:
+
+@Example
+a
+'br
+b
+    @result{} a b
+@endExample
+@endDefreq
+
+Initially, @code{gtroff} fills and adjusts text to both margins.
+Filling can be disabled via the @code{nf} request and re-enabled with
+the @code{fi} request.
+
+@DefreqList {fi, }
+@DefregListEndx {.u}
+@cindex fill mode (@code{fi})
+@cindex mode, fill (@code{fi})
+Activate fill mode (which is the default).  This request implicitly
+enables adjusting; it also inserts a break in the text currently being
+filled.  The read-only number register @code{.u} is set to@tie{}1.
+
+The fill mode status is associated with the current environment
+(@pxref{Environments}).
+
+See @ref{Line Control}, for interaction with the @code{\c} escape.
+@endDefreq
+
+@Defreq {nf, }
+@cindex no-fill mode (@code{nf})
+@cindex mode, no-fill (@code{nf})
+Activate no-fill mode.  Input lines are output as-is, retaining line
+breaks and ignoring the current line length.  This command implicitly
+disables adjusting; it also causes a break.  The number register
+@code{.u} is set to@tie{}0.
+
+The fill mode status is associated with the current environment
+(@pxref{Environments}).
+
+See @ref{Line Control}, for interaction with the @code{\c} escape.
+@endDefreq
+
+@DefreqList {ad, [@Var{mode}]}
+@DefregListEndx {.j}
+Set adjusting mode.
+
+Activation and deactivation of adjusting is done implicitly with calls
+to the @code{fi} or @code{nf} requests.
+
+@var{mode} can have one of the following values:
+
+@table @code
+@item l
+@cindex ragged-right
+Adjust text to the left margin.  This produces what is traditionally
+called ragged-right text.
+
+@item r
+@cindex ragged-left
+Adjust text to the right margin, producing ragged-left text.
+
+@item c
+@cindex centered text
+@cindex @code{ce} request, difference to @samp{.ad@tie{}c}
+Center filled text.  This is different to the @code{ce} request, which
+only centers text without filling.
+
+@item b
+@itemx n
+Justify to both margins.  This is the default used by @code{gtroff}.
+@end table
+
+Finally, @var{mode} can be the numeric argument returned by the
+@code{.j} register.
+
+Using @code{ad} without argument is the same as saying
+@w{@code{.ad \[.j]}}.  In particular, @code{gtroff} adjusts lines
+in the same way it did before adjusting was deactivated (with a call
+to @code{na}, say).  For example, this input code
+
+@Example
+.de AD
+.  br
+.  ad \\$1
+..
+.
+.de NA
+.  br
+.  na
+..
+.
+textA
+.AD r
+.nr ad \n[.j]
+textB
+.AD c
+textC
+.NA
+textD
+.AD         \" back to centering
+textE
+.AD \n[ad]  \" back to right justifying
+textF
+@endExample
+
+@noindent
+produces the following output:
+
+@Example
+textA
+                                                    textB
+                          textC
+textD
+                          textE
+                                                    textF
+@endExample
+
+@cindex adjustment mode register (@code{.j})
+As just demonstrated, the current adjustment mode is available in the
+read-only number register @code{.j}; it can be stored and
+subsequently used to set adjustment.
+
+The adjustment mode status is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@Defreq {na, }
+Disable adjusting.  This request won't change the current adjustment
+mode: A subsequent call to @code{ad} uses the previous adjustment
+setting.
+
+The adjustment mode status is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@DefreqList {brp, }
+@DefescListEndx {\\p, , , }
+Break, adjusting the current line per the current adjustment mode.
+
+With @code{\p}, this break will happen at the next word boundary.  The
+@code{\p} itself is removed entirely, adding neither a break nor a space
+where it appears in input; it can thus be placed in the middle of a word
+to cause a break at the end of that word.
+
+In most cases this produces very ugly results since @code{gtroff}
+doesn't have a sophisticated paragraph building algorithm (as @TeX{}
+has, for example); instead, @code{gtroff} fills and adjusts a paragraph
+line by line:
+
+@Example
+This is an uninteresting sentence.
+This is an uninteresting sentence.\p
+This is an uninteresting sentence.
+@endExample
+
+@noindent
+is formatted as
+
+@Example
+This is  an uninteresting  sentence.   This  is an
+uninteresting                            sentence.
+This is an uninteresting sentence.
+@endExample
+@endDefreq
+
+@DefreqList {ss, word_space_size [@Var{sentence_space_size}]}
+@DefregItemx {.ss}
+@DefregListEndx {.sss}
+@cindex word space size register (@code{.ss})
+@cindex size of word space register (@code{.ss})
+@cindex space between words register (@code{.ss})
+@cindex sentence space size register (@code{.sss})
+@cindex size of sentence space register (@code{.sss})
+@cindex space between sentences register (@code{.sss})
+Change the size of a space between words.  It takes its units as one
+twelfth of the space width parameter for the current font.  Initially
+both the @var{word_space_size} and @var{sentence_space_size}
+are@tie{}12.  In fill mode, the values specify the minimum distance.
+
+@cindex fill mode
+@cindex mode, fill
+If two arguments are given to the @code{ss} request, the second argument
+sets the sentence space size.  If the second argument is not given,
+sentence space size is set to @var{word_space_size}.  The sentence space
+size is used in two circumstances: If the end of a sentence occurs at
+the end of a line in fill mode, then both an inter-word space and a
+sentence space are added; if two spaces follow the end of a sentence in
+the middle of a line, then the second space is a sentence space.  If a
+second argument is never given to the @code{ss} request, the behaviour
+of Unix @code{troff} is the same as that exhibited by GNU @code{troff}.
+In GNU @code{troff}, as in Unix @code{troff}, a sentence should always
+be followed by either a newline or two spaces.
+
+The read-only number registers @code{.ss} and @code{.sss} hold the
+values of the parameters set by the first and second arguments of the
+@code{ss} request.
+
+The word space and sentence space values are associated with the current
+environment (@pxref{Environments}).
+
+Contrary to @acronym{AT&T} @code{troff}, this request is @emph{not}
+ignored if a TTY output device is used; the given values are then
+rounded down to a multiple of@tie{}12 (@pxref{Implementation
+Differences}).
+
+The request is ignored if there is no parameter.
+
+@cindex discardable horizontal space
+@cindex space, discardable, horizontal
+@cindex horizontal discardable space
+Another useful application of the @code{ss} request is to insert
+discardable horizontal space, i.e., space that is discarded at a line
+break.  For example, paragraph-style footnotes could be separated this
+way:
+
+@Example
+.ll 4.5i
+1.\ This is the first footnote.\c
+.ss 48
+.nop
+.ss 12
+2.\ This is the second footnote.
+@endExample
+
+@noindent
+The result:
+
+@Example
+1. This is the first footnote.        2. This
+is the second footnote.
+@endExample
+
+@noindent
+Note that the @code{\h} escape produces unbreakable space.
+@endDefreq
+
+@DefreqList {ce, [@Var{nnn}]}
+@DefregListEndx {.ce}
+@cindex centering lines (@code{ce})
+@cindex lines, centering (@code{ce})
+Center text.  While the @w{@samp{.ad c}} request also centers text, it
+fills the text as well.  @code{ce} does not fill the text it affects.
+This request causes a break.  The number of lines still to be centered
+is associated with the current environment (@pxref{Environments}).
+
+The following example demonstrates the differences.  Here is the input:
+
+@Example
+.ll 4i
+.ce 1000
+This is a small text fragment that shows the differences
+between the `.ce' and the `.ad c' request.
+.ce 0
+
+.ad c
+This is a small text fragment that shows the differences
+between the `.ce' and the `.ad c' request.
+@endExample
+
+@noindent
+And here the result:
+
+@Example
+  This is a small text fragment that
+         shows the differences
+between the `.ce' and the `.ad c' request.
+
+  This is a small text fragment that
+shows the differences between the `.ce'
+        and the `.ad c' request.
+@endExample
+
+With no arguments, @code{ce} centers the next line of text.  @var{nnn}
+specifies the number of lines to be centered.  If the argument is zero
+or negative, centering is disabled.
+
+The basic length for centering text is the line length (as set with the
+@code{ll} request) minus the indentation (as set with the @code{in}
+request).  Temporary indentation is ignored.
+
+As can be seen in the previous example, it is a common idiom to turn on
+centering for a large number of lines, and to turn off centering after
+text to be centered.  This is useful for any request that takes a
+number of lines as an argument.
+
+The @code{.ce} read-only number register contains the number of lines
+remaining to be centered, as set by the @code{ce} request.
+@endDefreq
+
+@DefreqList {rj, [@Var{nnn}]}
+@DefregListEndx {.rj}
+@cindex justifying text (@code{rj})
+@cindex text, justifying (@code{rj})
+@cindex right-justifying (@code{rj})
+Justify unfilled text to the right margin.  Arguments are identical to
+the @code{ce} request.  The @code{.rj} read-only number register is the
+number of lines to be right-justified as set by the @code{rj} request.
+This request causes a break.  The number of lines still to be
+right-justified is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+
+@c =====================================================================
+
+@node Manipulating Hyphenation, Manipulating Spacing, Manipulating Filling and Adjusting, gtroff Reference
+@section Manipulating Hyphenation
+@cindex manipulating hyphenation
+@cindex hyphenation, manipulating
+
+Here a description of requests that influence hyphenation.
+
+@DefreqList {hy, [@Var{mode}]}
+@DefregListEndx {.hy}
+Enable hyphenation.  The request has an optional numeric argument,
+@var{mode}, to restrict hyphenation if necessary:
+
+@table @code
+@item 1
+The default argument if @var{mode} is omitted: hyphenation is enabled,
+and the first and the last characters of a word are not hyphenated.
+This is also the start-up value of @code{gtroff}.
+
+@item 2
+Do not hyphenate the last word on a page or column.
+
+@item 4
+Do not hyphenate the last two characters of a word.
+
+@item 8
+Do not hyphenate the first two characters of a word.
+
+@item 16
+Allow hyphenation before the last character of a word.
+
+@item 32
+Allow hyphenation after the first character of a word.
+@end table
+
+The values in the previous table are additive.  For example,
+value@tie{}12 causes @code{gtroff} to neither hyphenate the last two nor
+the first two characters of a word.  Note that value@tie{}13 would do
+exactly the same; in other words, value@tie{}1 need not be added if the
+value is larger than@tie{}1.
+
+Some values cannot be used together because they contradict; for
+instance, values 4 and@tie{}16, and values 8 and@tie{}32.
+
+The number of characters at the beginning of a word after which the
+first hyphenation point should be inserted is determined by the patterns
+themselves; it can't be reduced further without introducing additional,
+invalid hyphenation points (unfortunately, this information is not part
+of a pattern file, you have to know it in advance).  The same is true
+for the number of characters at the end of word before the last
+hyphenation point should be inserted.  For example, the code
+
+@Example
+.ll 1
+.hy 48
+splitting
+@endExample
+
+returns
+
+@Example
+s-
+plit-
+t-
+in-
+g
+@endExample
+
+instead of the correct `split-ting'.  US-English patterns as distributed
+with groff need two characters at the beginning and three characters at
+the end; this means that value@tie{}4 of @code{hy} is mandatory.
+Value@tie{}8 is possible as an additional restriction, but values@tie{}1
+(the default!), 16, and@tie{}32 should be avoided.
+
+Here is a table of left and right minimum values for hyphenation as needed
+by the patterns distributed with groff; see the @cite{groff_tmac(5) man
+page} (type @command{man groff_tmac} at the command line) for more
+information on groff's language macro files.
+
+@multitable {German traditional}    {pattern name}    {left min}    {right min}
+@headitem    language           @tab pattern name @tab left min @tab right min
+@item        Czech              @tab cs           @tab 2        @tab 2
+@item        US English         @tab us           @tab 2        @tab 3
+@item        French             @tab fr           @tab 2        @tab 3
+@item        German traditional @tab det          @tab 2        @tab 2
+@item        German reformed    @tab den          @tab 2        @tab 2
+@item        Swedish            @tab sv           @tab 1        @tab 2
+@end multitable
+
+Hyphenation exceptions within pattern files (i.e., the words within a
+@code{\hyphenation} group) also obey the hyphenation restrictions given
+by @code{hy}.  However, exceptions specified with the @code{hw} do not.
+
+@cindex hyphenation restrictions register (@code{.hy})
+The current hyphenation restrictions can be found in the read-only
+number register @samp{.hy}.
+
+The hyphenation mode is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@Defreq {nh, }
+Disable hyphenation (i.e., set the hyphenation mode to zero).  Note that
+the hyphenation mode of the last call to @code{hy} is not remembered.
+
+The hyphenation mode is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@DefreqList {hlm, [@Var{nnn}]}
+@DefregItemx {.hlm}
+@DefregListEndx {.hlc}
+@cindex explicit hyphen (@code{\%})
+@cindex hyphen, explicit (@code{\%})
+@cindex consecutive hyphenated lines (@code{hlm})
+@cindex lines, consecutive hyphenated (@code{hlm})
+@cindex hyphenated lines, consecutive (@code{hlm})
+Set the maximum number of consecutive hyphenated lines to @var{nnn}.  If
+this number is negative, there is no maximum.  The default value
+is@tie{}@minus{}1 if @var{nnn} is omitted.  This value is associated
+with the current environment (@pxref{Environments}).  Only lines output
+from a given environment count towards the maximum associated with that
+environment.  Hyphens resulting from @code{\%} are counted; explicit
+hyphens are not.
+
+The current setting of @code{hlm} is available in the @code{.hlm}
+read-only number register.  Also the number of immediately preceding
+consecutive hyphenated lines are available in the read-only number
+register @samp{.hlc}.
+@endDefreq
+
+@Defreq {hw, word1 word2 @dots{}}
+Define how @var{word1}, @var{word2}, etc.@: are to be hyphenated.  The
+words must be given with hyphens at the hyphenation points.  For
+example:
+
+@Example
+.hw in-sa-lub-rious
+@endExample
+
+@noindent
+Besides the space character, any character whose hyphenation code value
+is zero can be used to separate the arguments of @code{hw} (see the
+documentation for the @code{hcode} request below for more information).
+In addition, this request can be used more than once.
+
+@cindex @code{hw} request, and @code{hy} restrictions
+Hyphenation points specified with @code{hw} are not subject to the
+restrictions given by the @code{hy} request.
+
+Hyphenation exceptions specified with the @code{hw} request are
+associated with the current hyphenation language; it causes an error if
+there is no current hyphenation language.
+
+This request is ignored if there is no parameter.
+
+In old versions of @code{troff} there was a limited amount of space to
+store such information; fortunately, with @code{gtroff}, this is no
+longer a restriction.
+@endDefreq
+
+@DefescList {\\%, , , }
+@deffnx Escape @t{\:}
+@ifnotinfo
+@esindex \:
+@end ifnotinfo
+@ifinfo
+@esindex \@r{<colon>}
+@end ifinfo
+@cindex hyphenation character (@code{\%})
+@cindex character, hyphenation (@code{\%})
+@cindex disabling hyphenation (@code{\%})
+@cindex hyphenation, disabling (@code{\%})
+To tell @code{gtroff} how to hyphenate words on the fly, use the
+@code{\%} escape, also known as the @dfn{hyphenation character}.
+Preceding a word with this character prevents it from being
+hyphenated; putting it inside a word indicates to @code{gtroff} that
+the word may be hyphenated at that point.  Note that this mechanism
+only affects that one occurrence of the word; to change the
+hyphenation of a word for the entire document, use the @code{hw}
+request.
+
+The @code{\:} escape inserts a zero-width break point (that is, the word
+breaks but without adding a hyphen).
+
+@Example
+... check the /var/log/\:httpd/\:access_log file ...
+@endExample
+
+@cindex @code{\X}, followed by @code{\%}
+@cindex @code{\Y}, followed by @code{\%}
+@cindex @code{\%}, following @code{\X} or @code{\Y}
+Note that @code{\X} and @code{\Y} start a word, that is, the @code{\%}
+escape in (say) @w{@samp{\X'...'\%foobar}} and
+@w{@samp{\Y'...'\%foobar}} no longer prevents hyphenation but inserts a
+hyphenation point at the beginning of @samp{foobar}; most likely this
+isn't what you want to do.
+@endDefesc
+
+@Defreq {hc, [@Var{char}]}
+Change the hyphenation character to @var{char}.  This character then
+works the same as the @code{\%} escape, and thus, no longer appears in
+the output.  Without an argument, @code{hc} resets the hyphenation
+character to be @code{\%} (the default) only.
+
+The hyphenation character is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@DefreqList {hpf, pattern_file}
+@DefreqItemx {hpfa, pattern_file}
+@DefreqListEndx {hpfcode, a b [c d @dots{}]}
+@cindex hyphenation patterns (@code{hpf})
+@cindex patterns for hyphenation (@code{hpf})
+Read in a file of hyphenation patterns.  This file is searched for in
+the same way as @file{@var{name}.tmac} (or @file{tmac.@var{name}}) is
+searched for if the @option{-m@var{name}} option is specified.
+
+It should have the same format as (simple) @TeX{} patterns files.  More
+specifically, the following scanning rules are implemented.
+
+@itemize @bullet
+@item
+A percent sign starts a comment (up to the end of the line) even if
+preceded by a backslash.
+
+@item
+No support for `digraphs' like @code{\$}.
+
+@item
+@code{^^@var{xx}} (@var{x} is 0--9 or a--f) and @code{^^@var{x}}
+(character code of @var{x} in the range 0--127) are recognized; other use
+of @code{^} causes an error.
+
+@item
+No macro expansion.
+
+@item
+@code{hpf} checks for the expression @code{\patterns@{@dots{}@}}
+(possibly with whitespace before and after the braces).  Everything
+between the braces is taken as hyphenation patterns.  Consequently,
+@code{@{} and @code{@}} are not allowed in patterns.
+
+@item
+Similarly, @code{\hyphenation@{@dots{}@}} gives a list of hyphenation
+exceptions.
+
+@item
+@code{\endinput} is recognized also.
+
+@item
+For backwards compatibility, if @code{\patterns} is missing, the whole
+file is treated as a list of hyphenation patterns (only recognizing the
+@code{%} character as the start of a comment).
+@end itemize
+
+If no @code{hpf} request is specified (either in the document or in a
+macro package), @code{gtroff} won't hyphenate at all.
+
+The @code{hpfa} request appends a file of patterns to the current list.
+
+The @code{hpfcode} request defines mapping values for character codes in
+hyphenation patterns.  @code{hpf} or @code{hpfa} then apply the mapping
+(after reading the patterns) before replacing or appending them to the
+current list of patterns.  Its arguments are pairs of character codes --
+integers from 0 to@tie{}255.  The request maps character
+code@tie{}@var{a} to code@tie{}@var{b}, code@tie{}@var{c} to
+code@tie{}@var{d}, and so on.  You can use character codes that would
+be invalid otherwise.  By default, everything maps to itself except
+letters `A' to `Z', which map to `a' to `z'.
+
+
+@pindex troffrc
+@pindex troffrc-end
+@pindex hyphen.us
+@pindex hyphenex.us
+The set of hyphenation patterns is associated with the current language
+set by the @code{hla} request.  The @code{hpf} request is usually
+invoked by the @file{troffrc} or @file{troffrc-end} file; by default,
+@file{troffrc} loads hyphenation patterns and exceptions for American
+English (in files @file{hyphen.us} and @file{hyphenex.us}).
+
+A second call to @code{hpf} (for the same language) replaces the
+hyphenation patterns with the new ones.
+
+Invoking @code{hpf} causes an error if there is no current hyphenation
+language.
+@endDefreq
+
+@Defreq {hcode, c1 code1 [c2 code2 @dots{}]}
+@cindex hyphenation code (@code{hcode})
+@cindex code, hyphenation (@code{hcode})
+Set the hyphenation code of character @var{c1} to @var{code1}, that of
+@var{c2} to @var{code2}, etc.  A hyphenation code must be a single input
+character (not a special character) other than a digit or a space.
+
+To make hyphenation work, hyphenation codes must be set up.  At
+start-up, groff only assigns hyphenation codes to the letters
+@samp{a}--@samp{z} (mapped to themselves) and to the letters
+@samp{A}--@samp{Z} (mapped to @samp{a}--@samp{z}); all other hyphenation
+codes are set to zero.  Normally, hyphenation patterns contain only
+lowercase letters, which should be applied regardless of case.  In
+other words, the words `FOO' and `Foo' should be hyphenated exactly the
+same way as the word `foo' is hyphenated, and this is what @code{hcode}
+is good for.  Words that contain other letters won't be hyphenated
+properly if the corresponding hyphenation patterns actually do contain
+them.  For example, the following @code{hcode} requests are necessary to
+assign hyphenation codes to the letters @samp{ÄäÖöÜüß} (this is needed
+for German):
+
+@Example
+.hcode ä ä  Ä ä
+.hcode ö ö  Ö ö
+.hcode ü ü  Ü ü
+.hcode ß ß
+@endExample
+
+Without those assignments, groff treats German words like
+@w{`Kindergärten'} (the plural form of `kindergarten') as two substrings
+@w{`kinderg'} and @w{`rten'} because the hyphenation code of the
+umlaut@tie{}a is zero by default.  There is a German hyphenation pattern
+that covers @w{`kinder'}, so groff finds the hyphenation `kin-der'.
+The other two hyphenation points (`kin-der-gär-ten') are missed.
+
+This request is ignored if it has no parameter.
+@endDefreq
+
+@DefreqList {hym, [@Var{length}]}
+@DefregListEndx {.hym}
+@cindex hyphenation margin (@code{hym})
+@cindex margin for hyphenation (@code{hym})
+@cindex @code{ad} request, and hyphenation margin
+Set the (right) hyphenation margin to @var{length}.  If the current
+adjustment mode is not @samp{b} or @samp{n}, the line is not hyphenated
+if it is shorter than @var{length}.  Without an argument, the
+hyphenation margin is reset to its default value, which is@tie{}0.  The
+default scaling indicator for this request is @samp{m}.  The hyphenation
+margin is associated with the current environment
+(@pxref{Environments}).
+
+A negative argument resets the hyphenation margin to zero, emitting a
+warning of type @samp{range}.
+
+@cindex hyphenation margin register (@code{.hym})
+The current hyphenation margin is available in the @code{.hym} read-only
+number register.
+@endDefreq
+
+@DefreqList {hys, [@Var{hyphenation_space}]}
+@DefregListEndx {.hys}
+@cindex hyphenation space (@code{hys})
+@cindex @code{ad} request, and hyphenation space
+Set the hyphenation space to @var{hyphenation_space}.  If the current
+adjustment mode is @samp{b} or @samp{n}, don't hyphenate the line if it
+can be justified by adding no more than @var{hyphenation_space} extra
+space to each word space.  Without argument, the hyphenation space is
+set to its default value, which is@tie{}0.  The default scaling
+indicator for this request is @samp{m}.  The hyphenation space is
+associated with the current environment (@pxref{Environments}).
+
+A negative argument resets the hyphenation space to zero, emitting a
+warning of type @samp{range}.
+
+@cindex hyphenation space register (@code{.hys})
+The current hyphenation space is available in the @code{.hys} read-only
+number register.
+@endDefreq
+
+@Defreq {shc, [@Var{glyph}]}
+@cindex soft hyphen character, setting (@code{shc})
+@cindex character, soft hyphen, setting (@code{shc})
+@cindex glyph, soft hyphen (@code{hy})
+@cindex soft hyphen glyph (@code{hy})
+@cindex @code{char} request, and soft hyphen character
+@cindex @code{tr} request, and soft hyphen character
+Set the @dfn{soft hyphen character} to @var{glyph}.@footnote{@dfn{Soft
+hyphen character} is a misnomer since it is an output glyph.}  If the
+argument is omitted, the soft hyphen character is set to the default
+glyph @code{\(hy} (this is the start-up value of @code{gtroff} also).
+The soft hyphen character is the glyph that is inserted when a word is
+hyphenated at a line break.  If the soft hyphen character does not exist
+in the font of the character immediately preceding a potential break
+point, then the line is not broken at that point.  Neither definitions
+(specified with the @code{char} request) nor translations (specified
+with the @code{tr} request) are considered when finding the soft hyphen
+character.
+@endDefreq
+
+@DefreqList {hla, language}
+@DefregListEndx {.hla}
+@cindex @code{hpf} request, and hyphenation language
+@cindex @code{hw} request, and hyphenation language
+@pindex troffrc
+@pindex troffrc-end
+Set the current hyphenation language to the string @var{language}.
+Hyphenation exceptions specified with the @code{hw} request and
+hyphenation patterns specified with the @code{hpf} and @code{hpfa}
+requests are both associated with the current hyphenation language.  The
+@code{hla} request is usually invoked by the @file{troffrc} or the
+@file{troffrc-end} files; @file{troffrc} sets the default language to
+@samp{us}.
+
+@cindex hyphenation language register (@code{.hla})
+The current hyphenation language is available as a string in the
+read-only number register @samp{.hla}.
+
+@Example
+.ds curr_language \n[.hla]
+\*[curr_language]
+    @result{} us
+@endExample
+@endDefreq
+
+
+@c =====================================================================
+
+@node Manipulating Spacing, Tabs and Fields, Manipulating Hyphenation, gtroff Reference
+@section Manipulating Spacing
+@cindex manipulating spacing
+@cindex spacing, manipulating
+
+@Defreq {sp, [@Var{distance}]}
+Space downwards @var{distance}.  With no argument it advances
+1@tie{}line.  A negative argument causes @code{gtroff} to move up the
+page the specified distance.  If the argument is preceded by a @samp{|}
+then @code{gtroff} moves that distance from the top of the page.  This
+request causes a line break, and that adds the current line spacing to
+the space you have just specified.  The default scaling indicator is
+@samp{v}.
+
+For convenience you may wish to use the following macros to set the
+height of the next line at a given distance from the top or the bottom
+of the page:
+
+@Example
+.de y-from-top-down
+.  sp |\\$1-\\n[.v]u
+..
+.
+.de y-from-bot-up
+.  sp |\\n[.p]u-\\$1-\\n[.v]u
+..
+@endExample
+
+@noindent
+A call to @samp{.y-from-bot-up 10c} means that the bottom of the next
+line will be at 10@tie{}cm from the paper edge at the bottom.
+
+If a vertical trap is sprung during execution of @code{sp}, the amount
+of vertical space after the trap is discarded.  For example, this
+
+@Example
+.de xxx
+..
+.
+.wh 0 xxx
+.
+.pl 5v
+foo
+.sp 2
+bar
+.sp 50
+baz
+@endExample
+
+@noindent
+results in
+
+@Example
+foo
+
+
+bar
+
+baz
+@endExample
+
+@cindex @code{sp} request, and traps
+@cindex discarded space in traps
+@cindex space, discarded, in traps
+@cindex traps, and discarded space
+The amount of discarded space is available in the number register
+@code{.trunc}.
+
+To protect @code{sp} against vertical traps, use the @code{vpt} request:
+
+@Example
+.vpt 0
+.sp -3
+.vpt 1
+@endExample
+@endDefreq
+
+@DefreqList {ls, [@Var{nnn}]}
+@DefregListEndx {.L}
+@cindex double-spacing (@code{ls})
+Output @w{@var{nnn}@minus{}1} blank lines after each line of text.  With
+no argument, @code{gtroff} uses the previous value before the last
+@code{ls} call.
+
+@Example
+.ls 2    \" This causes double-spaced output
+.ls 3    \" This causes triple-spaced output
+.ls      \" Again double-spaced
+@endExample
+
+The line spacing is associated with the current environment
+(@pxref{Environments}).
+
+@cindex line spacing register (@code{.L})
+The read-only number register @code{.L} contains the current line
+spacing setting.
+@endDefreq
+
+@xref{Changing Type Sizes}, for the requests @code{vs} and @code{pvs} as
+alternatives to @code{ls}.
+
+@DefescList {\\x, ', spacing, '}
+@DefregListEndx {.a}
+Sometimes, extra vertical spacing is only needed occasionally, e.g.@: to
+allow space for a tall construct (like an equation).  The @code{\x}
+escape does this.  The escape is given a numerical argument, usually
+enclosed in quotes (like @samp{\x'3p'}); the default scaling indicator
+is @samp{v}.  If this number is positive extra vertical space is
+inserted below the current line.  A negative number adds space above.
+If this escape is used multiple times on the same line, the maximum of
+the values is used.
+
+@xref{Escapes}, for details on parameter delimiting characters.
+
+@cindex extra post-vertical line space register (@code{.a})
+The @code{.a} read-only number register contains the most recent
+(non-negative) extra vertical line space.
+
+Using @code{\x} can be necessary in combination with the @code{\b}
+escape, as the following example shows.
+
+@Example
+This is a test with the \[rs]b escape.
+.br
+This is a test with the \[rs]b escape.
+.br
+This is a test with \b'xyz'\x'-1m'\x'1m'.
+.br
+This is a test with the \[rs]b escape.
+.br
+This is a test with the \[rs]b escape.
+@endExample
+
+@noindent
+produces
+
+@Example
+This is a test with the \b escape.
+This is a test with the \b escape.
+                    x
+This is a test with y.
+                    z
+This is a test with the \b escape.
+This is a test with the \b escape.
+@endExample
+@endDefesc
+
+@DefreqList {ns, }
+@DefreqItemx {rs, }
+@DefregListEndx {.ns}
+@cindex @code{sp} request, and no-space mode
+@cindex no-space mode (@code{ns})
+@cindex mode, no-space (@code{ns})
+@cindex blank lines, disabling
+@cindex lines, blank, disabling
+Enable @dfn{no-space mode}.  In this mode, spacing (either via @code{sp}
+or via blank lines) is disabled.  The @code{bp} request to advance to
+the next page is also disabled, except if it is accompanied by a page
+number (see @ref{Page Control}, for more information).  This mode ends
+when actual text is output or the @code{rs} request is encountered, which
+ends no-space mode.  The read-only number register @code{.ns} is set
+to@tie{}1 as long as no-space mode is active.
+
+This request is useful for macros that conditionally insert vertical
+space before the text starts (for example, a paragraph macro could
+insert some space except when it is the first paragraph after a section
+header).
+@endDefreq
+
+
+@c =====================================================================
+
+@node Tabs and Fields, Character Translations, Manipulating Spacing, gtroff Reference
+@section Tabs and Fields
+@cindex tabs, and fields
+@cindex fields, and tabs
+
+@cindex @acronym{EBCDIC} encoding of a tab
+A tab character (@acronym{ASCII} char@tie{}9, @acronym{EBCDIC}
+char@tie{}5) causes a horizontal movement to the next tab stop (much
+like it did on a typewriter).
+
+@Defesc {\\t, , , }
+@cindex tab character, non-interpreted (@code{\t})
+@cindex character, tab, non-interpreted (@code{\t})
+@cindex @code{\t}, and copy-in mode
+@cindex copy-in mode, and @code{\t}
+@cindex mode, copy-in, and @code{\t}
+This escape is a non-interpreted tab character.  In copy mode
+(@pxref{Copy-in Mode}), @code{\t} is the same as a real tab character.
+@endDefesc
+
+@DefreqList {ta, [@Var{n1} @Var{n2} @dots{} @Var{nn} @t{T} @Var{r1} @Var{r2} @dots{} @Var{rn}]}
+@DefregListEndx {.tabs}
+Change tab stop positions.  This request takes a series of tab
+specifiers as arguments (optionally divided into two groups with the
+letter @samp{T}) that indicate where each tab stop is to be (overriding
+any previous settings).
+
+Tab stops can be specified absolutely, i.e., as the distance from the
+left margin.  For example, the following sets 6@tie{}tab stops every one
+inch.
+
+@Example
+.ta 1i 2i 3i 4i 5i 6i
+@endExample
+
+Tab stops can also be specified using a leading @samp{+}, which means
+that the specified tab stop is set relative to the previous tab stop.
+For example, the following is equivalent to the previous example.
+
+@Example
+.ta 1i +1i +1i +1i +1i +1i
+@endExample
+
+@code{gtroff} supports an extended syntax to specify repeat values after
+the @samp{T} mark (these values are always taken as relative) -- this is
+the usual way to specify tabs set at equal intervals.  The following is,
+yet again, the same as the previous examples.  It does even more since
+it defines an infinite number of tab stops separated by one inch.
+
+@Example
+.ta T 1i
+@endExample
+
+Now we are ready to interpret the full syntax given at the beginning:
+Set tabs at positions @var{n1}, @var{n2}, @dots{}, @var{nn} and then set
+tabs at @var{nn}+@var{r1}, @var{nn}+@var{r2}, @dots{}, @var{nn}+@var{rn}
+and then at @var{nn}+@var{rn}+@var{r1}, @var{nn}+@var{rn}+@var{r2},
+@dots{}, @var{nn}+@var{rn}+@var{rn}, and so on.
+
+Example: @samp{4c +6c T 3c 5c 2c} is equivalent to @samp{4c 10c 13c 18c
+20c 23c 28c 30c @dots{}}.
+
+The material in each tab column (i.e., the column between two tab stops)
+may be justified to the right or left or centered in the column.  This
+is specified by appending @samp{R}, @samp{L}, or @samp{C} to the tab
+specifier.  The default justification is @samp{L}.  Example:
+
+@Example
+.ta 1i 2iC 3iR
+@endExample
+
+Some notes:
+
+@itemize @bullet
+@item
+The default unit of the @code{ta} request is @samp{m}.
+
+@item
+A tab stop is converted into a non-breakable horizontal movement that
+can be neither stretched nor squeezed.  For example,
+
+@Example
+.ds foo a\tb\tc
+.ta T 5i
+\*[foo]
+@endExample
+
+@noindent
+creates a single line, which is a bit longer than 10@tie{}inches (a
+string is used to show exactly where the tab characters are).  Now
+consider the following:
+
+@Example
+.ds bar a\tb b\tc
+.ta T 5i
+\*[bar]
+@endExample
+
+@noindent
+@code{gtroff} first converts the tab stops of the line into unbreakable
+horizontal movements, then splits the line after the second @samp{b}
+(assuming a sufficiently short line length).  Usually, this isn't what
+the user wants.
+
+@item
+Superfluous tabs (i.e., tab characters that do not correspond to a tab
+stop) are ignored except the first one, which delimits the characters
+belonging to the last tab stop for right-justifying or centering.
+Consider the following example
+
+@Example
+.ds Z   foo\tbar\tfoo
+.ds ZZ  foo\tbar\tfoobar
+.ds ZZZ foo\tbar\tfoo\tbar
+.ta 2i 4iR
+\*[Z]
+.br
+\*[ZZ]
+.br
+\*[ZZZ]
+.br
+@endExample
+
+@noindent
+which produces the following output:
+
+@Example
+foo                 bar              foo
+foo                 bar           foobar
+foo                 bar              foobar
+@endExample
+
+@noindent
+The first line right-justifies the second `foo' relative to the tab
+stop.  The second line right-justifies `foobar'.  The third line finally
+right-justifies only `foo' because of the additional tab character, which
+marks the end of the string belonging to the last defined tab stop.
+
+@item
+Tab stops are associated with the current environment
+(@pxref{Environments}).
+
+@item
+Calling @code{ta} without an argument removes all tab stops.
+
+@item
+@cindex tab stops, for TTY output devices
+The start-up value of @code{gtroff} is @w{@samp{T 0.5i}}.
+@end itemize
+
+@cindex tab settings register (@code{.tabs})
+The read-only number register @code{.tabs} contains a string
+representation of the current tab settings suitable for use as an
+argument to the @code{ta} request.
+
+@Example
+.ds tab-string \n[.tabs]
+\*[tab-string]
+    @result{} T120u
+@endExample
+
+@cindex @code{.S} register, Plan@tie{}9 alias for @code{.tabs}
+@cindex @code{.tabs} register, Plan@tie{}9 alias (@code{.S})
+The @code{troff} version of the Plan@tie{}9 operating system uses
+register @code{.S} for the same purpose.
+@endDefreq
+
+@Defreq {tc, [@Var{fill-glyph}]}
+@cindex tab repetition character (@code{tc})
+@cindex character, tab repetition (@code{tc})
+@cindex glyph, tab repetition (@code{tc})
+Normally @code{gtroff} fills the space to the next tab stop with
+whitespace.  This can be changed with the @code{tc} request.  With no
+argument @code{gtroff} reverts to using whitespace, which is the
+default.  The value of this @dfn{tab repetition character} is associated
+with the current environment (@pxref{Environments}).@footnote{@dfn{Tab
+repetition character} is a misnomer since it is an output glyph.}
+@endDefreq
+
+@DefreqList {linetabs, n}
+@DefregListEndx {.linetabs}
+@cindex tab, line-tabs mode
+@cindex line-tabs mode
+@cindex mode, line-tabs
+If @var{n} is missing or not zero, enable @dfn{line-tabs} mode, or
+disable it otherwise (the default).  In line-tabs mode, @code{gtroff}
+computes tab distances relative to the (current) output line instead of
+the input line.
+
+For example, the following code:
+
+@Example
+.ds x a\t\c
+.ds y b\t\c
+.ds z c
+.ta 1i 3i
+\*x
+\*y
+\*z
+@endExample
+
+@noindent
+in normal mode, results in the output
+
+@Example
+a         b         c
+@endExample
+
+@noindent
+in line-tabs mode, the same code outputs
+
+@Example
+a         b                   c
+@endExample
+
+Line-tabs mode is associated with the current environment.  The
+read-only register @code{.linetabs} is set to@tie{}1 if in line-tabs
+mode, and 0 in normal mode.
+@endDefreq
+
+@menu
+* Leaders::
+* Fields::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Leaders, Fields, Tabs and Fields, Tabs and Fields
+@subsection Leaders
+@cindex leaders
+
+Sometimes it may be desirable to use the @code{tc} request to fill a
+particular tab stop with a given glyph (for example dots in a table of
+contents), but also normal tab stops on the rest of the line.
+For this @code{gtroff} provides an alternate tab mechanism, called
+@dfn{leaders}, which does just that.
+
+@cindex leader character
+A leader character (character code@tie{}1) behaves similarly to a tab
+character: It moves to the next tab stop.  The only difference is that
+for this movement, the fill glyph defaults to a period character and not
+to space.
+
+@Defesc {\\a, , , }
+@cindex leader character, non-interpreted (@code{\a})
+@cindex character, leader, non-interpreted (@code{\a})
+@cindex @code{\a}, and copy-in mode
+@cindex copy-in mode, and @code{\a}
+@cindex mode, copy-in, and @code{\a}
+This escape is a non-interpreted leader character.  In copy mode
+(@pxref{Copy-in Mode}), @code{\a} is the same as a real leader
+character.
+@endDefesc
+
+@Defreq {lc, [@Var{fill-glyph}]}
+@cindex leader repetition character (@code{lc})
+@cindex character, leader repetition (@code{lc})
+@cindex glyph, leader repetition (@code{lc})
+Declare the @dfn{leader repetition character}.@footnote{@dfn{Leader
+repetition character} is a misnomer since it is an output glyph.}
+Without an argument, leaders act the same as tabs (i.e., using
+whitespace for filling).  @code{gtroff}'s start-up value is a dot
+(@samp{.}).  The value of the leader repetition character is associated
+with the current environment (@pxref{Environments}).
+@endDefreq
+
+@cindex table of contents
+@cindex contents, table of
+For a table of contents, to name an example, tab stops may be defined so
+that the section number is one tab stop, the title is the second with
+the remaining space being filled with a line of dots, and then the page
+number slightly separated from the dots.
+
+@Example
+.ds entry 1.1\tFoo\a\t12
+.lc .
+.ta 1i 5i +.25i
+\*[entry]
+@endExample
+
+@noindent
+This produces
+
+@Example
+1.1  Foo..........................................  12
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Fields,  , Leaders, Tabs and Fields
+@subsection Fields
+@cindex fields
+
+@cindex field delimiting character (@code{fc})
+@cindex delimiting character, for fields (@code{fc})
+@cindex character, field delimiting (@code{fc})
+@cindex field padding character (@code{fc})
+@cindex padding character, for fields (@code{fc})
+@cindex character, field padding (@code{fc})
+@dfn{Fields} are a more general way of laying out tabular data.  A field
+is defined as the data between a pair of @dfn{delimiting characters}.
+It contains substrings that are separated by @dfn{padding characters}.
+The width of a field is the distance on the @emph{input} line from the
+position where the field starts to the next tab stop.  A padding
+character inserts stretchable space similar to @TeX{}'s @code{\hss}
+command (thus it can even be negative) to make the sum of all substring
+lengths plus the stretchable space equal to the field width.  If more
+than one padding character is inserted, the available space is evenly
+distributed among them.
+
+@Defreq {fc, [@Var{delim-char} [@Var{padding-char}]]}
+Define a delimiting and a padding character for fields.  If the latter
+is missing, the padding character defaults to a space character.  If
+there is no argument at all, the field mechanism is disabled (which is
+the default).  Note that contrary to e.g.@: the tab repetition
+character, delimiting and padding characters are @emph{not} associated
+to the current environment (@pxref{Environments}).
+
+Example:
+
+@Example
+.fc # ^
+.ta T 3i
+#foo^bar^smurf#
+.br
+#foo^^bar^smurf#
+@endExample
+
+@noindent
+and here the result:
+
+@Example
+foo         bar          smurf
+foo            bar       smurf
+@endExample
+@endDefreq
+
+
+@c =====================================================================
+
+@node Character Translations, Troff and Nroff Mode, Tabs and Fields, gtroff Reference
+@section Character Translations
+@cindex character translations
+@cindex translations of characters
+
+@cindex control character, changing (@code{cc})
+@cindex character, control, changing (@code{cc})
+@cindex no-break control character, changing (@code{c2})
+@cindex character, no-break control, changing (@code{c2})
+@cindex control character, no-break, changing (@code{c2})
+The control character (@samp{.}) and the no-break control character
+(@samp{'}) can be changed with the @code{cc} and @code{c2} requests,
+respectively.
+
+@Defreq {cc, [@Var{c}]}
+Set the control character to@tie{}@var{c}.  With no argument the default
+control character @samp{.} is restored.  The value of the control
+character is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@Defreq {c2, [@Var{c}]}
+Set the no-break control character to@tie{}@var{c}.  With no argument
+the default control character @samp{'} is restored.  The value of the
+no-break control character is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@xref{Requests}.
+
+@Defreq {eo, }
+@cindex disabling @code{\} (@code{eo})
+@cindex @code{\}, disabling (@code{eo})
+Disable the escape mechanism completely.  After executing this request,
+the backslash character @samp{\} no longer starts an escape sequence.
+
+This request can be very helpful in writing macros since it is not
+necessary then to double the escape character.  Here an example:
+
+@Example
+.\" This is a simplified version of the
+.\" .BR request from the man macro package
+.eo
+.de BR
+.  ds result \&
+.  while (\n[.$] >= 2) \@{\
+.    as result \fB\$1\fR\$2
+.    shift 2
+.  \@}
+.  if \n[.$] .as result \fB\$1
+\*[result]
+.  ft R
+..
+.ec
+@endExample
+@endDefreq
+
+@Defreq {ec, [@Var{c}]}
+@cindex escape character, changing (@code{ec})
+@cindex character, escape, changing (@code{ec})
+Set the escape character to@tie{}@var{c}.  With no argument the default
+escape character @samp{\} is restored.  It can be also used to re-enable
+the escape mechanism after an @code{eo} request.
+
+Note that changing the escape character globally likely breaks macro
+packages since @code{gtroff} has no mechanism to `intern' macros, i.e.,
+to convert a macro definition into an internal form that is independent
+of its representation (@TeX{} has this mechanism).  If a macro is
+called, it is executed literally.
+@endDefreq
+
+@DefreqList {ecs, }
+@DefreqListEndx {ecr, }
+The @code{ecs} request saves the current escape character in an internal
+register.  Use this request in combination with the @code{ec} request to
+temporarily change the escape character.
+
+The @code{ecr} request restores the escape character saved with
+@code{ecs}.  Without a previous call to @code{ecs}, this request sets
+the escape character to @code{\}.
+@endDefreq
+
+@DefescList {\\\\, , , }
+@DefescItemx {\\e, , , }
+@DefescListEndx {\\E, , , }
+Print the current escape character (which is the backslash character
+@samp{\} by default).
+
+@code{\\} is a `delayed' backslash; more precisely, it is the default
+escape character followed by a backslash, which no longer has special
+meaning due to the leading escape character.  It is @emph{not} an escape
+sequence in the usual sense!  In any unknown escape sequence
+@code{\@var{X}} the escape character is ignored and @var{X} is printed.
+But if @var{X} is equal to the current escape character, no warning is
+emitted.
+
+@cindex @code{\E}, and copy-in mode
+@cindex copy-in mode, and @code{\E}
+@cindex mode, copy-in, and @code{\E}
+As a consequence, only at top-level or in a diversion a backslash glyph
+is printed; in copy-in mode, it expands to a single backslash, which then
+combines with the following character to an escape sequence.
+
+The @code{\E} escape differs from @code{\e} by printing an escape
+character that is not interpreted in copy mode.  Use this to define
+strings with escapes that work when used in copy mode (for example, as a
+macro argument).  The following example defines strings to begin and end
+a superscript:
+
+@Example
+.ds @{ \v'-.3m'\s'\En[.s]*60/100'
+.ds @} \s0\v'.3m'
+@endExample
+
+Another example to demonstrate the differences between the various
+escape sequences, using a strange escape character, @samp{-}.
+
+@Example
+.ec -
+.de xxx
+--A'foo'
+..
+.xxx
+    @result{} -A'foo'
+@endExample
+
+@noindent
+The result is surprising for most users, expecting @samp{1} since
+@samp{foo} is a valid identifier.  What has happened?  As mentioned
+above, the leading escape character makes the following character
+ordinary.  Written with the default escape character the sequence
+@samp{--} becomes @samp{\-} -- this is the minus sign.
+
+If the escape character followed by itself is a valid escape sequence,
+only @code{\E} yields the expected result:
+
+@Example
+.ec -
+.de xxx
+-EA'foo'
+..
+.xxx
+    @result{} 1
+@endExample
+@endDefesc
+
+@Defesc {\\., , , }
+Similar to @code{\\}, the sequence @code{\.} isn't a real escape
+sequence.  As before, a warning message is suppressed if the escape
+character is followed by a dot, and the dot itself is printed.
+
+@Example
+.de foo
+.  nop foo
+.
+.  de bar
+.    nop bar
+\\..
+.
+..
+.foo
+.bar
+    @result{} foo bar
+@endExample
+
+@noindent
+The first backslash is consumed while the macro is read, and the second
+is swallowed while executing macro @code{foo}.
+@endDefesc
+
+A @dfn{translation} is a mapping of an input character to an output
+glyph.  The mapping occurs at output time, i.e., the input character
+gets assigned the metric information of the mapped output character
+right before input tokens are converted to nodes (@pxref{Gtroff
+Internals}, for more on this process).
+
+@DefreqList {tr, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
+@DefreqListEndx {trin, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
+Translate character @var{a} to glyph@tie{}@var{b}, character @var{c} to
+glyph@tie{}@var{d}, etc.  If there is an odd number of arguments, the
+last one is translated to an unstretchable space (@w{@samp{\ }}).
+
+The @code{trin} request is identical to @code{tr}, but when you unformat
+a diversion with @code{asciify} it ignores the translation.
+@xref{Diversions}, for details about the @code{asciify} request.
+
+Some notes:
+
+@itemize @bullet
+@item
+@cindex @code{\(}, and translations
+@cindex @code{\[}, and translations
+@cindex @code{\'}, and translations
+@cindex @code{\`}, and translations
+@cindex @code{\-}, and translations
+@cindex @code{\_}, and translations
+@cindex @code{\C}, and translations
+@cindex @code{\N}, and translations
+@cindex @code{char} request, and translations
+@cindex special characters
+@cindex character, special
+@cindex numbered glyph (@code{\N})
+@cindex glyph, numbered (@code{\N})
+Special characters (@code{\(@var{xx}}, @code{\[@var{xxx}]},
+@code{\C'@var{xxx}'}, @code{\'}, @code{\`}, @code{\-}, @code{\_}),
+glyphs defined with the @code{char} request, and numbered glyphs
+(@code{\N'@var{xxx}'}) can be translated also.
+
+@item
+@cindex @code{\e}, and translations
+The @code{\e} escape can be translated also.
+
+@item
+@cindex @code{\%}, and translations
+@cindex @code{\~}, and translations
+Characters can be mapped onto the @code{\%} and @code{\~} escapes (but
+@code{\%} and @code{\~} can't be mapped onto another glyph).
+
+@item
+@cindex backspace character, and translations
+@cindex character, backspace, and translations
+@cindex leader character, and translations
+@cindex character, leader, and translations
+@cindex newline character, and translations
+@cindex character, newline, and translations
+@cindex tab character, and translations
+@cindex character, tab, and translations
+@cindex @code{\a}, and translations
+@cindex @code{\t}, and translations
+The following characters can't be translated: space (with one exception,
+see below), backspace, newline, leader (and @code{\a}), tab (and
+@code{\t}).
+
+@item
+@cindex @code{shc} request, and translations
+Translations are not considered for finding the soft hyphen character
+set with the @code{shc} request.
+
+@item
+@cindex @code{\&}, and translations
+The pair @samp{@var{c}\&} (this is an arbitrary character@tie{}@var{c}
+followed by the zero width space character) maps this character to
+nothing.
+
+@Example
+.tr a\&
+foo bar
+    @result{} foo br
+@endExample
+
+@noindent
+It is even possible to map the space character to nothing:
+
+@Example
+.tr aa \&
+foo bar
+    @result{} foobar
+@endExample
+
+@noindent
+As shown in the example, the space character can't be the first
+character/glyph pair as an argument of @code{tr}.  Additionally, it is
+not possible to map the space character to any other glyph; requests
+like @w{@samp{.tr aa x}} undo @w{@samp{.tr aa \&}} instead.
+
+If justification is active, lines are justified in spite of the `empty'
+space character (but there is no minimal distance, i.e.@: the space
+character, between words).
+
+@item
+After an output glyph has been constructed (this happens at the moment
+immediately before the glyph is appended to an output glyph list, either
+by direct output, in a macro, diversion, or string), it is no longer
+affected by @code{tr}.
+
+@item
+Translating character to glyphs where one of them or both are undefined
+is possible also; @code{tr} does not check whether the entities in its
+argument do exist.
+
+@xref{Gtroff Internals}.
+
+@item
+@code{troff} no longer has a hard-coded dependency on @w{Latin-1}; all
+@code{char@var{XXX}} entities have been removed from the font
+description files.  This has a notable consequence that shows up in
+warnings like @code{can't find character with input code @var{XXX}} if
+the @code{tr} request isn't handled properly.
+
+Consider the following translation:
+
+@Example
+.tr éÉ
+@endExample
+
+@noindent
+This maps input character @code{é} onto glyph @code{É}, which is
+identical to glyph @code{char201}.  But this glyph intentionally doesn't
+exist!  Instead, @code{\[char201]} is treated as an input character
+entity and is by default mapped onto @code{\['E]}, and @code{gtroff}
+doesn't handle translations of translations.
+
+The right way to write the above translation is
+
+@Example
+.tr é\['E]
+@endExample
+
+@noindent
+In other words, the first argument of @code{tr} should be an input
+character or entity, and the second one a glyph entity.
+
+@item
+Without an argument, the @code{tr} request is ignored.
+@end itemize
+@endDefreq
+
+@Defreq {trnt, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
+@cindex @code{\!}, and @code{trnt}
+@code{trnt} is the same as the @code{tr} request except that the
+translations do not apply to text that is transparently throughput into
+a diversion with @code{\!}.  @xref{Diversions}, for more information.
+
+For example,
+
+@Example
+.tr ab
+.di x
+\!.tm a
+.di
+.x
+@endExample
+
+@noindent
+prints @samp{b} to the standard error stream; if @code{trnt} is used
+instead of @code{tr} it prints @samp{a}.
+@endDefreq
+
+
+@c =====================================================================
+
+@node Troff and Nroff Mode, Line Layout, Character Translations, gtroff Reference
+@section Troff and Nroff Mode
+@cindex troff mode
+@cindex mode, troff
+@cindex nroff mode
+@cindex mode, nroff
+
+Originally, @code{nroff} and @code{troff} were two separate programs,
+the former for TTY output, the latter for everything else.  With GNU
+@code{troff}, both programs are merged into one executable, sending its
+output to a device driver (@code{grotty} for TTY devices, @code{grops}
+for @sc{PostScript}, etc.)@: which interprets the intermediate output of
+@code{gtroff}.  For Unix @code{troff} it makes sense to talk about
+@dfn{Nroff mode} and @dfn{Troff mode} since the differences are
+hardcoded.  For GNU @code{troff}, this distinction is not appropriate
+because @code{gtroff} simply takes the information given in the font
+files for a particular device without handling requests specially if a
+TTY output device is used.
+
+Usually, a macro package can be used with all output devices.
+Nevertheless, it is sometimes necessary to make a distinction between
+TTY and non-TTY devices: @code{gtroff} provides two built-in conditions
+@samp{n} and @samp{t} for the @code{if}, @code{ie}, and @code{while}
+requests to decide whether @code{gtroff} shall behave like @code{nroff}
+or like @code{troff}.
+
+@Defreq {troff, }
+@pindex troffrc
+@pindex troffrc-end
+Make the @samp{t} built-in condition true (and the @samp{n} built-in
+condition false) for @code{if}, @code{ie}, and @code{while} conditional
+requests.  This is the default if @code{gtroff} (@emph{not}
+@code{groff}) is started with the @option{-R} switch to avoid loading of
+the start-up files @file{troffrc} and @file{troffrc-end}.  Without
+@option{-R}, @code{gtroff} stays in troff mode if the output device is
+not a TTY (e.g.@: `ps').
+@endDefreq
+
+@Defreq {nroff, }
+@pindex tty.tmac
+Make the @samp{n} built-in condition true (and the @samp{t} built-in
+condition false) for @code{if}, @code{ie}, and @code{while} conditional
+requests.  This is the default if @code{gtroff} uses a TTY output
+device; the code for switching to nroff mode is in the file
+@file{tty.tmac}, which is loaded by the start-up file @code{troffrc}.
+@endDefreq
+
+@xref{Conditionals and Loops}, for more details on built-in conditions.
+
+
+@c =====================================================================
+
+@node Line Layout, Line Control, Troff and Nroff Mode, gtroff Reference
+@section Line Layout
+@cindex line layout
+@cindex layout, line
+
+@cindex dimensions, line
+@cindex line dimensions
+The following drawing shows the dimensions that @code{gtroff} uses for
+placing a line of output onto the page.  They are labeled with the
+request that manipulates each dimension.
+
+@Example
+     -->| in |<--
+        |<-----------ll------------>|
+   +----+----+----------------------+----+
+   |    :    :                      :    |
+   +----+----+----------------------+----+
+-->| po |<--
+   |<--------paper width---------------->|
+@endExample
+
+@noindent
+These dimensions are:
+
+@ftable @code
+@item po
+@cindex left margin (@code{po})
+@cindex margin, left (@code{po})
+@cindex page offset (@code{po})
+@cindex offset, page (@code{po})
+@dfn{Page offset} -- this is the leftmost position of text on the final
+output, defining the @dfn{left margin}.
+
+@item in
+@cindex indentation (@code{in})
+@cindex line indentation (@code{in})
+@dfn{Indentation} -- this is the distance from the left margin where
+text is printed.
+
+@item ll
+@cindex line length (@code{ll})
+@cindex length of line (@code{ll})
+@dfn{Line length} -- this is the distance from the left margin to right
+margin.
+@end ftable
+
+A simple demonstration:
+
+@Example
+.ll 3i
+This is text without indentation.
+The line length has been set to 3\~inch.
+.in +.5i
+.ll -.5i
+Now the left and right margins are both increased.
+.in
+.ll
+Calling .in and .ll without parameters restore
+the previous values.
+@endExample
+
+Result:
+
+@Example
+This  is text without indenta-
+tion.   The  line  length  has
+been set to 3 inch.
+     Now   the  left  and
+     right  margins   are
+     both increased.
+Calling  .in  and  .ll without
+parameters restore the  previ-
+ous values.
+@endExample
+
+@DefreqList {po, [@Var{offset}]}
+@DefreqItem {po, @t{+}@Var{offset}}
+@DefreqItem {po, @t{-}@Var{offset}}
+@DefregListEndx {.o}
+@pindex troffrc
+Set horizontal page offset to @var{offset} (or increment or decrement
+the current value by @var{offset}).  Note that this request does not
+cause a break, so changing the page offset in the middle of text being
+filled may not yield the expected result.  The initial value is
+1@dmn{i}.  For TTY output devices, it is set to 0 in the startup file
+@file{troffrc}; the default scaling indicator is @samp{m} (and not
+@samp{v} as incorrectly documented in the original Unix troff manual).
+
+The current page offset can be found in the read-only number register
+@samp{.o}.
+
+If @code{po} is called without an argument, the page offset is reset to
+the previous value before the last call to @code{po}.
+
+@Example
+.po 3i
+\n[.o]
+    @result{} 720
+.po -1i
+\n[.o]
+    @result{} 480
+.po
+\n[.o]
+    @result{} 720
+@endExample
+@endDefreq
+
+@DefreqList {in, [@Var{indent}]}
+@DefreqItem {in, @t{+}@Var{indent}}
+@DefreqItem {in, @t{-}@Var{indent}}
+@DefregListEndx {.i}
+Set indentation to @var{indent} (or increment or decrement the current
+value by @var{indent}).  This request causes a break.  Initially, there
+is no indentation.
+
+If @code{in} is called without an argument, the indentation is reset to
+the previous value before the last call to @code{in}.  The default
+scaling indicator is @samp{m}.
+
+The indentation is associated with the current environment
+(@pxref{Environments}).
+
+If a negative indentation value is specified (which is not allowed),
+@code{gtroff} emits a warning of type @samp{range} and sets the
+indentation to zero.
+
+The effect of @code{in} is delayed until a partially collected line (if
+it exists) is output.  A temporary indentation value is reset to zero
+also.
+
+The current indentation (as set by @code{in}) can be found in the
+read-only number register @samp{.i}.
+@endDefreq
+
+@DefreqList {ti, offset}
+@DefreqItem {ti, @t{+}@Var{offset}}
+@DefreqItem {ti, @t{-}@Var{offset}}
+@DefregListEndx {.in}
+Temporarily indent the next output line by @var{offset}.  If an
+increment or decrement value is specified, adjust the temporary
+indentation relative to the value set by the @code{in} request.
+
+This request causes a break; its value is associated with the current
+environment (@pxref{Environments}).  The default scaling indicator is
+@samp{m}.  A call of @code{ti} without an argument is ignored.
+
+If the total indentation value is negative (which is not allowed),
+@code{gtroff} emits a warning of type @samp{range} and sets the
+temporary indentation to zero.  `Total indentation' is either
+@var{offset} if specified as an absolute value, or the temporary plus
+normal indentation, if @var{offset} is given as a relative value.
+
+The effect of @code{ti} is delayed until a partially collected line (if
+it exists) is output.
+
+The read-only number register @code{.in} is the indentation that applies
+to the current output line.
+
+The difference between @code{.i} and @code{.in} is that the latter takes
+into account whether a partially collected line still uses the old
+indentation value or a temporary indentation value is active.
+@endDefreq
+
+@DefreqList {ll, [@Var{length}]}
+@DefreqItem {ll, @t{+}@Var{length}}
+@DefreqItem {ll, @t{-}@Var{length}}
+@DefregItemx {.l}
+@DefregListEndx {.ll}
+Set the line length to @var{length} (or increment or decrement the
+current value by @var{length}).  Initially, the line length is set to
+6.5@dmn{i}.  The effect of @code{ll} is delayed until a partially
+collected line (if it exists) is output.  The default scaling indicator
+is @samp{m}.
+
+If @code{ll} is called without an argument, the line length is reset to
+the previous value before the last call to @code{ll}.  If a negative
+line length is specified (which is not allowed), @code{gtroff} emits a
+warning of type @samp{range} and sets the line length to zero.
+
+The line length is associated with the current environment
+(@pxref{Environments}).
+
+@cindex line length register (@code{.l})
+The current line length (as set by @code{ll}) can be found in the
+read-only number register @samp{.l}.  The read-only number register
+@code{.ll} is the line length that applies to the current output line.
+
+Similar to @code{.i} and @code{.in}, the difference between @code{.l}
+and @code{.ll} is that the latter takes into account whether a partially
+collected line still uses the old line length value.
+@endDefreq
+
+
+@c =====================================================================
+
+@node Line Control, Page Layout, Line Layout, gtroff Reference
+@section Line Control
+@cindex line control
+@cindex control, line
+
+It is important to understand how @code{gtroff} handles input and output
+lines.
+
+Many escapes use positioning relative to the input line.  For example,
+this
+
+@Example
+This is a \h'|1.2i'test.
+
+This is a
+\h'|1.2i'test.
+@endExample
+
+@noindent
+produces
+
+@Example
+This is a   test.
+
+This is a             test.
+@endExample
+
+The main usage of this feature is to define macros that act exactly at
+the place where called.
+
+@Example
+.\" A simple macro to underline a word
+.de underline
+.  nop \\$1\l'|0\[ul]'
+..
+@endExample
+
+@noindent
+In the above example, @samp{|0} specifies a negative distance from the
+current position (at the end of the just emitted argument @code{\$1})
+back to the beginning of the input line.  Thus, the @samp{\l} escape
+draws a line from right to left.
+
+@cindex input line continuation (@code{\})
+@cindex line, input, continuation (@code{\})
+@cindex continuation, input line (@code{\})
+@cindex output line, continuation (@code{\c})
+@cindex line, output, continuation (@code{\c})
+@cindex continuation, output line (@code{\c})
+@cindex interrupted line
+@cindex line, interrupted
+@code{gtroff} makes a difference between input and output line
+continuation; the latter is also called @dfn{interrupting} a line.
+
+@DefescList {\\@key{RET}, , ,}
+@DefescItemx {\\c, , ,}
+@DefregListEndx {.int}
+Continue a line.  @code{\@key{RET}} (this is a backslash at the end of a
+line immediately followed by a newline) works on the input level,
+suppressing the effects of the following newline in the input.
+
+@Example
+This is a \
+.test
+    @result{} This is a .test
+@endExample
+
+The @samp{|} operator is also affected.
+
+@cindex @code{\R}, after @code{\c}
+@code{\c} works on the output level.  Anything after this escape on the
+same line is ignored except @code{\R}, which works as usual.  Anything
+before @code{\c} on the same line is appended to the current partial
+output line.  The next non-command line after an interrupted line counts
+as a new input line.
+
+The visual results depend on whether no-fill mode is active.
+
+@itemize @bullet
+@item
+@cindex @code{\c}, and no-fill mode
+@cindex no-fill mode, and @code{\c}
+@cindex mode, no-fill, and @code{\c}
+If no-fill mode is active (using the @code{nf} request), the next input
+text line after @code{\c} is handled as a continuation of the same input
+text line.
+
+@Example
+.nf
+This is a \c
+test.
+    @result{} This is a test.
+@endExample
+
+@item
+@cindex @code{\c}, and fill mode
+@cindex fill mode, and @code{\c}
+@cindex mode, fill, and @code{\c}
+If fill mode is active (using the @code{fi} request), a word interrupted
+with @code{\c} is continued with the text on the next input text line,
+without an intervening space.
+
+@Example
+This is a te\c
+st.
+    @result{} This is a test.
+@endExample
+@end itemize
+
+Note that an intervening control line that causes a break is stronger
+than @code{\c}, flushing out the current partial line in the usual way.
+
+@cindex interrupted line register (@code{.int})
+The @code{.int} register contains a positive value if the last output
+line was interrupted with @code{\c}; this is associated with the current
+environment (@pxref{Environments}).
+@endDefesc
+
+
+@c =====================================================================
+
+@node Page Layout, Page Control, Line Control, gtroff Reference
+@section Page Layout
+@cindex page layout
+@cindex layout, page
+
+@code{gtroff} provides some very primitive operations for controlling
+page layout.
+
+@DefreqList {pl, [@Var{length}]}
+@DefreqItem {pl, @t{+}@Var{length}}
+@DefreqItem {pl, @t{-}@Var{length}}
+@DefregListEndx {.p}
+@cindex page length (@code{pl})
+@cindex length of page (@code{pl})
+Set the @dfn{page length} to @var{length} (or increment or decrement the
+current value by @var{length}).  This is the length of the physical
+output page.  The default scaling indicator is @samp{v}.
+
+@cindex page length register (@code{.p})
+The current setting can be found in the read-only number register
+@samp{.p}.
+
+@cindex top margin
+@cindex margin, top
+@cindex bottom margin
+@cindex margin, bottom
+Note that this only specifies the size of the page, not the top and
+bottom margins.  Those are not set by @code{gtroff} directly.
+@xref{Traps}, for further information on how to do this.
+
+Negative @code{pl} values are possible also, but not very useful: No
+trap is sprung, and each line is output on a single page (thus
+suppressing all vertical spacing).
+
+If no argument or an invalid argument is given, @code{pl} sets the page
+length to 11@dmn{i}.
+@endDefreq
+
+@cindex headers
+@cindex footers
+@cindex titles
+@code{gtroff} provides several operations that help in setting up top
+and bottom titles (or headers and footers).
+
+@Defreq {tl, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}}
+@cindex title line (@code{tl})
+@cindex three-part title (@code{tl})
+@cindex page number character (@code{%})
+Print a @dfn{title line}.  It consists of three parts: a left justified
+portion, a centered portion, and a right justified portion.  The
+argument separator @samp{'} can be replaced with any character not
+occurring in the title line.  The @samp{%} character is replaced with
+the current page number.  This character can be changed with the
+@code{pc} request (see below).
+
+Without argument, @code{tl} is ignored.
+
+Some notes:
+
+@itemize @bullet
+@item
+The line length set by the @code{ll} request is not honoured by
+@code{tl}; use the @code{lt} request (described below) instead, to
+control line length for text set by @code{tl}.
+
+@item
+A title line is not restricted to the top or bottom of a page.
+
+@item
+@code{tl} prints the title line immediately, ignoring a partially filled
+line (which stays untouched).
+
+@item
+It is not an error to omit closing delimiters.  For example,
+@w{@samp{.tl /foo}} is equivalent to @w{@samp{.tl /foo///}}: It prints a
+title line with the left justified word @samp{foo}; the centered and
+right justified parts are empty.
+
+@item
+@code{tl} accepts the same parameter delimiting characters as the
+@code{\A} escape; see @ref{Escapes}.
+@end itemize
+@endDefreq
+
+@DefreqList {lt, [@Var{length}]}
+@DefreqItem {lt, @t{+}@Var{length}}
+@DefreqItem {lt, @t{-}@Var{length}}
+@DefregListEndx {.lt}
+@cindex length of title line (@code{lt})
+@cindex title line, length (@code{lt})
+@cindex title line length register (@code{.lt})
+The title line is printed using its own line length, which is specified
+(or incremented or decremented) with the @code{lt} request.  Initially,
+the title line length is set to 6.5@dmn{i}.  If a negative line length
+is specified (which is not allowed), @code{gtroff} emits a warning of
+type @samp{range} and sets the title line length to zero.  The default
+scaling indicator is @samp{m}.  If @code{lt} is called without an
+argument, the title length is reset to the previous value before the
+last call to @code{lt}.
+
+The current setting of this is available in the @code{.lt} read-only
+number register; it is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@DefreqList {pn, page}
+@DefreqItem {pn, @t{+}@Var{page}}
+@DefreqItem {pn, @t{-}@Var{page}}
+@DefregListEndx {.pn}
+@cindex page number (@code{pn})
+@cindex number, page (@code{pn})
+Change (increase or decrease) the page number of the @emph{next} page.
+The only argument is the page number; the request is ignored without a
+parameter.
+
+The read-only number register @code{.pn} contains the number of the next
+page: either the value set by a @code{pn} request, or the number of the
+current page plus@tie{}1.
+@endDefreq
+
+@Defreq {pc, [@Var{char}]}
+@cindex changing the page number character (@code{pc})
+@cindex page number character, changing (@code{pc})
+@vindex %
+Change the page number character (used by the @code{tl} request) to a
+different character.  With no argument, this mechanism is disabled.
+Note that this doesn't affect the number register@tie{}@code{%}.
+@endDefreq
+
+@xref{Traps}.
+
+
+@c =====================================================================
+
+@node Page Control, Fonts and Symbols, Page Layout, gtroff Reference
+@section Page Control
+@cindex page control
+@cindex control, page
+
+@DefreqList {bp, [@Var{page}]}
+@DefreqItem {bp, @t{+}@Var{page}}
+@DefreqItem {bp, @t{-}@Var{page}}
+@DefregListEndx {%}
+@cindex new page (@code{bp})
+@cindex page, new (@code{bp})
+Stop processing the current page and move to the next page.  This
+request causes a break.  It can also take an argument to set (increase,
+decrease) the page number of the next page (which actually becomes the
+current page after @code{bp} has finished).  The difference between
+@code{bp} and @code{pn} is that @code{pn} does not cause a break or
+actually eject a page.  @xref{Page Layout}.
+
+@Example
+.de newpage                         \" define macro
+'bp                                 \" begin page
+'sp .5i                             \" vertical space
+.tl 'left top'center top'right top' \" title
+'sp .3i                             \" vertical space
+..                                  \" end macro
+@endExample
+
+@cindex @code{bp} request, and top-level diversion
+@cindex top-level diversion, and @code{bp}
+@cindex diversion, top-level, and @code{bp}
+@code{bp} has no effect if not called within the top-level diversion
+(@pxref{Diversions}).
+
+@cindex page number register (@code{%})
+@cindex current page number (@code{%})
+The read-write register@tie{}@code{%} holds the current page number.
+
+The number register @code{.pe} is set to@tie{}1 while @code{bp} is
+active.  @xref{Page Location Traps}.
+@endDefreq
+
+@Defreq {ne, [@Var{space}]}
+@cindex orphan lines, preventing with @code{ne}
+@cindex conditional page break (@code{ne})
+@cindex page break, conditional (@code{ne})
+It is often necessary to force a certain amount of space before a new
+page occurs.  This is most useful to make sure that there is not a
+single @dfn{orphan} line left at the bottom of a page.  The @code{ne}
+request ensures that there is a certain distance, specified by the first
+argument, before the next page is triggered (see @ref{Traps}, for
+further information).  The default scaling indicator for @code{ne} is
+@samp{v}; the default value of @var{space} is@tie{}1@dmn{v} if no
+argument is given.
+
+For example, to make sure that no fewer than 2@tie{}lines get orphaned,
+do the following before each paragraph:
+
+@Example
+.ne 2
+text text text
+@endExample
+
+@code{ne} then automatically causes a page break if there is space for
+one line only.
+@endDefreq
+
+@DefreqList {sv, [@Var{space}]}
+@DefreqListEndx {os, }
+@cindex @code{ne} request, comparison with @code{sv}
+@code{sv} is similar to the @code{ne} request; it reserves the specified
+amount of vertical space.  If the desired amount of space exists before
+the next trap (or the bottom page boundary if no trap is set), the space
+is output immediately (ignoring a partially filled line, which stays
+untouched).  If there is not enough space, it is stored for later output
+via the @code{os} request.  The default value is@tie{}1@dmn{v} if no
+argument is given; the default scaling indicator is @samp{v}.
+
+@cindex @code{sv} request, and no-space mode
+@cindex @code{os} request, and no-space mode
+Both @code{sv} and @code{os} ignore no-space mode.  While the @code{sv}
+request allows negative values for @var{space}, @code{os} ignores them.
+@endDefreq
+
+@Defreg {nl}
+@cindex current vertical position (@code{nl})
+@cindex vertical position, current (@code{nl})
+@cindex position, vertical, current (@code{nl})
+This register contains the current vertical position.  If the vertical
+position is zero and the top of page transition hasn't happened yet,
+@code{nl} is set to negative value.  @code{gtroff} itself does this at
+the very beginning of a document before anything has been printed, but
+the main usage is to plant a header trap on a page if this page has
+already started.
+
+Consider the following:
+
+@Example
+.de xxx
+.  sp
+.  tl ''Header''
+.  sp
+..
+.
+First page.
+.bp
+.wh 0 xxx
+.nr nl (-1)
+Second page.
+@endExample
+
+@noindent
+Result:
+
+@Example
+First page.
+
+...
+
+                             Header
+
+Second page.
+
+...
+@endExample
+
+@noindent
+Without resetting @code{nl} to a negative value, the just planted trap
+would be active beginning with the @emph{next} page, not the current
+one.
+
+@xref{Diversions}, for a comparison with the @code{.h} and @code{.d}
+registers.
+@endDefreg
+
+
+@c =====================================================================
+
+@node Fonts and Symbols, Sizes, Page Control, gtroff Reference
+@section Fonts and Symbols
+@cindex fonts
+
+@code{gtroff} can switch fonts at any point in the text.
+
+The basic set of fonts is @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
+These are Times Roman, Italic, Bold, and Bold Italic.  For non-TTY
+devices, there is also at least one symbol font that contains various
+special symbols (Greek, mathematics).
+
+@menu
+* Changing Fonts::
+* Font Families::
+* Font Positions::
+* Using Symbols::
+* Character Classes::
+* Special Fonts::
+* Artificial Fonts::
+* Ligatures and Kerning::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Changing Fonts, Font Families, Fonts and Symbols, Fonts and Symbols
+@subsection Changing Fonts
+@cindex fonts
+
+@DefreqList {ft, [@Var{font}]}
+@DefescItemx {\\f, , f, }
+@DefescItem {\\f, @Lparen{}, fn, }
+@DefescItem {\\f, @Lbrack{}, font, @Rbrack{}}
+@DefregListEndx {.sty}
+@cindex changing fonts (@code{ft}, @code{\f})
+@cindex fonts, changing (@code{ft}, @code{\f})
+@cindex @code{sty} request, and changing fonts
+@cindex @code{fam} request, and changing fonts
+@cindex @code{\F}, and changing fonts
+@kindex styles
+@kindex family
+@pindex DESC
+The @code{ft} request and the @code{\f} escape change the current font
+to @var{font} (one-character name@tie{}@var{f}, two-character name
+@var{fn}).
+
+If @var{font} is a style name (as set with the @code{sty} request or
+with the @code{styles} command in the @file{DESC} file), use it within
+the current font family (as set with the @code{fam} request, the
+@code{\F} escape, or the @code{family} command in the @file{DESC} file).
+
+It is not possible to switch to a font with the name @samp{DESC}
+(whereas this name could be used as a style name; however, this is not
+recommended).
+
+@cindex previous font (@code{ft}, @code{\f[]}, @code{\fP})
+@cindex font, previous (@code{ft}, @code{\f[]}, @code{\fP})
+With no argument or using @samp{P} as an argument, @code{.ft} switches
+to the previous font.  Use @code{\f[]} to do this with the escape.  The
+old syntax forms @code{\fP} or @code{\f[P]} are also supported.
+
+Fonts are generally specified as upper-case strings, which are usually
+1@tie{}to 4 characters representing an abbreviation or acronym of the
+font name.  This is no limitation, just a convention.
+
+The example below produces two identical lines.
+
+@Example
+eggs, bacon,
+.ft B
+spam
+.ft
+and sausage.
+
+eggs, bacon, \fBspam\fP and sausage.
+@endExample
+
+Note that @code{\f} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the font on the fly:
+
+@Example
+.mc \f[I]x\f[]
+@endExample
+
+The current style name is available in the read-only number register
+@samp{.sty} (this is a string-valued register); if the current font
+isn't a style, the empty string is returned.  It is associated with the
+current environment.
+
+@xref{Font Positions}, for an alternative syntax.
+@endDefreq
+
+@Defreq {ftr, f [@Var{g}]}
+@cindex font translation (@code{ftr})
+@cindex @code{ft} request, and font translations
+@cindex @code{ul} request, and font translations
+@cindex @code{bd} request, and font translations
+@cindex @code{\f}, and font translations
+@cindex @code{cs} request, and font translations
+@cindex @code{tkf} request, and font translations
+@cindex @code{special} request, and font translations
+@cindex @code{fspecial} request, and font translations
+@cindex @code{fp} request, and font translations
+@cindex @code{sty} request, and font translations
+@cindex @code{if} request, and font translations
+@cindex @code{ie} request, and font translations
+@cindex @code{while} request, and font translations
+Translate font@tie{}@var{f} to font@tie{}@var{g}.  Whenever a font
+named@tie{}@var{f} is referred to in a @code{\f} escape sequence, in the
+@code{F} and @code{S} conditional operators, or in the @code{ft},
+@code{ul}, @code{bd}, @code{cs}, @code{tkf}, @code{special},
+@code{fspecial}, @code{fp}, or @code{sty} requests, font@tie{}@var{g} is
+used.  If @var{g} is missing or equal to@tie{}@var{f} the translation is
+undone.
+
+Note that it is not possible to chain font translations.  Example:
+
+@Example
+.ftr XXX TR
+.ftr XXX YYY
+.ft XXX
+    @result{} warning: can't find font `XXX'
+@endExample
+@endDefreq
+
+@DefreqList {fzoom, f [@Var{zoom}]}
+@DefregListEndx {.zoom}
+@cindex magnification of a font (@code{fzoom})
+@cindex font, magnification (@code{fzoom})
+@cindex zoom factor of a font (@code{fzoom})
+@cindex factor, zoom, of a font (@code{fzoom})
+@cindex font, zoom factor (@code{fzoom})
+@cindex optical size of a font
+@cindex font, optical size
+@cindex size, optical, of a font
+Set magnification of font@tie{}@var{f} to factor @var{zoom}, which must
+be a non-negative integer multiple of 1/1000th.  This request is useful
+to adjust the optical size of a font in relation to the others.  In the
+example below, font @code{CR} is magnified by 10% (the zoom factor is
+thus 1.1).
+
+@Example
+.fam P
+.fzoom CR 1100
+.ps 12
+Palatino and \f[CR]Courier\f[]
+@endExample
+
+A missing or zero value of @var{zoom} is the same as a value of 1000,
+which means no magnification.  @var{f}@tie{}must be a real font name,
+not a style.
+
+Note that the magnification of a font is completely transparent to
+troff; a change of the zoom factor doesn't cause any effect except that
+the dimensions of glyphs, (word) spaces, kerns, etc., of the affected
+font are adjusted accordingly.
+
+The zoom factor of the current font is available in the read-only number
+register @samp{.zoom}, in multiples of 1/1000th.  It returns zero if
+there is no magnification.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Font Families, Font Positions, Changing Fonts, Fonts and Symbols
+@subsection Font Families
+@cindex font families
+@cindex families, font
+@cindex font styles
+@cindex styles, font
+
+Due to the variety of fonts available, @code{gtroff} has added the
+concept of @dfn{font families} and @dfn{font styles}.  The fonts are
+specified as the concatenation of the font family and style.  Specifying
+a font without the family part causes @code{gtroff} to use that style of
+the current family.
+
+@cindex PostScript fonts
+@cindex fonts, PostScript
+Currently, fonts for the devices @option{-Tps}, @option{-Tpdf},
+@option{-Tdvi}, @option{-Tlj4}, @option{-Tlbp}, and the X11 fonts are
+set up to this mechanism.  By default, @code{gtroff} uses the Times
+family with the four styles @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
+
+This way, it is possible to use the basic four fonts and to select a
+different font family on the command line (@pxref{Groff Options}).
+
+@DefreqList {fam, [@Var{family}]}
+@DefregItemx {.fam}
+@DefescItemx {\\F, , f, }
+@DefescItem {\\F, @Lparen{}, fm, }
+@DefescItem {\\F, @Lbrack{}, family, @Rbrack{}}
+@DefregListEndx {.fn}
+@cindex changing font family (@code{fam}, @code{\F})
+@cindex font family, changing (@code{fam}, @code{\F})
+Switch font family to @var{family} (one-character name@tie{}@var{f},
+two-character name @var{fm}).  If no argument is given, switch back to
+the previous font family.  Use @code{\F[]} to do this with the escape.
+Note that @code{\FP} doesn't work; it selects font family @samp{P}
+instead.
+
+The value at start-up is @samp{T}.  The current font family is available
+in the read-only number register @samp{.fam} (this is a string-valued
+register); it is associated with the current environment.
+
+@Example
+spam,
+.fam H    \" helvetica family
+spam,     \" used font is family H + style R = HR
+.ft B     \" family H + style B = font HB
+spam,
+.fam T    \" times family
+spam,     \" used font is family T + style B = TB
+.ft AR    \" font AR (not a style)
+baked beans,
+.ft R     \" family T + style R = font TR
+and spam.
+@endExample
+
+Note that @code{\F} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the font family on the fly:
+
+@Example
+.mc \F[P]x\F[]
+@endExample
+
+The @samp{.fn} register contains the current @dfn{real font name} of the
+current font.  This is a string-valued register.  If the current font is
+a style, the value of @code{\n[.fn]} is the proper concatenation of
+family and style name.
+@endDefreq
+
+@Defreq {sty, n style}
+@cindex changing font style (@code{sty})
+@cindex font style, changing (@code{sty})
+@cindex @code{cs} request, and font styles
+@cindex @code{bd} request, and font styles
+@cindex @code{tkf} request, and font styles
+@cindex @code{uf} request, and font styles
+@cindex @code{fspecial} request, and font styles
+Associate @var{style} with font position@tie{}@var{n}.  A font position
+can be associated either with a font or with a style.  The current font
+is the index of a font position and so is also either a font or a style.
+If it is a style, the font that is actually used is the font which name
+is the concatenation of the name of the current family and the name of
+the current style.  For example, if the current font is@tie{}1 and font
+position@tie{}1 is associated with style @samp{R} and the current font
+family is @samp{T}, then font @samp{TR} is used.  If the current font is
+not a style, then the current family is ignored.  If the requests
+@code{cs}, @code{bd}, @code{tkf}, @code{uf}, or @code{fspecial} are
+applied to a style, they are instead applied to the member of the
+current family corresponding to that style.
+
+@var{n}@tie{}must be a non-negative integer value.
+
+@pindex DESC
+@kindex styles
+The default family can be set with the @option{-f} option (@pxref{Groff
+Options}).  The @code{styles} command in the @file{DESC} file controls
+which font positions (if any) are initially associated with styles
+rather than fonts.  For example, the default setting for @sc{PostScript}
+fonts
+
+@Example
+styles R I B BI
+@endExample
+
+@noindent
+is equivalent to
+
+@Example
+.sty 1 R
+.sty 2 I
+.sty 3 B
+.sty 4 BI
+@endExample
+
+@code{fam} and @code{\F} always check whether the current font position
+is valid; this can give surprising results if the current font position
+is associated with a style.
+
+In the following example, we want to access the @sc{PostScript} font
+@code{FooBar} from the font family @code{Foo}:
+
+@Example
+.sty \n[.fp] Bar
+.fam Foo
+    @result{} warning: can't find font `FooR'
+@endExample
+
+@noindent
+The default font position at start-up is@tie{}1; for the @sc{PostScript}
+device, this is associated with style @samp{R}, so @code{gtroff} tries
+to open @code{FooR}.
+
+A solution to this problem is to use a dummy font like the following:
+
+@Example
+.fp 0 dummy TR    \" set up dummy font at position 0
+.sty \n[.fp] Bar  \" register style `Bar'
+.ft 0             \" switch to font at position 0
+.fam Foo          \" activate family `Foo'
+.ft Bar           \" switch to font `FooBar'
+@endExample
+
+@xref{Font Positions}.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Font Positions, Using Symbols, Font Families, Fonts and Symbols
+@subsection Font Positions
+@cindex font positions
+@cindex positions, font
+
+For the sake of old phototypesetters and compatibility with old versions
+of @code{troff}, @code{gtroff} has the concept of font @dfn{positions},
+on which various fonts are mounted.
+
+@DefreqList {fp, pos font [@Var{external-name}]}
+@DefregItemx {.f}
+@DefregListEndx {.fp}
+@cindex mounting font (@code{fp})
+@cindex font, mounting (@code{fp})
+Mount font @var{font} at position @var{pos} (which must be a
+non-negative integer).  This numeric position can then be referred to
+with font changing commands.  When @code{gtroff} starts it is using font
+position@tie{}1 (which must exist; position@tie{}0 is unused usually at
+start-up).
+
+@cindex font position register (@code{.f})
+The current font in use, as a font position, is available in the
+read-only number register @samp{.f}.  This can be useful to remember the
+current font for later recall.  It is associated with the current
+environment (@pxref{Environments}).
+
+@Example
+.nr save-font \n[.f]
+.ft B
+... text text text ...
+.ft \n[save-font]
+@endExample
+
+@cindex next free font position register (@code{.fp})
+The number of the next free font position is available in the read-only
+number register @samp{.fp}.  This is useful when mounting a new font,
+like so:
+
+@Example
+.fp \n[.fp] NEATOFONT
+@endExample
+
+@pindex DESC@r{, and font mounting}
+Fonts not listed in the @file{DESC} file are automatically mounted on
+the next available font position when they are referenced.  If a font is
+to be mounted explicitly with the @code{fp} request on an unused font
+position, it should be mounted on the first unused font position, which
+can be found in the @code{.fp} register.  Although @code{gtroff} does
+not enforce this strictly, it is not allowed to mount a font at a
+position whose number is much greater (approx.@: 1000 positions) than
+that of any currently used position.
+
+The @code{fp} request has an optional third argument.  This argument
+gives the external name of the font, which is used for finding the font
+description file.  The second argument gives the internal name of the
+font, which is used to refer to the font in @code{gtroff} after it has
+been mounted.  If there is no third argument then the internal name is
+used as the external name.  This feature makes it possible to use fonts
+with long names in compatibility mode.
+@endDefreq
+
+Both the @code{ft} request and the @code{\f} escape have alternative
+syntax forms to access font positions.
+
+@DefreqList {ft, nnn}
+@DefescItemx {\\f, , n, }
+@DefescItem {\\f, @Lparen{}, nn, }
+@DefescListEnd {\\f, @Lbrack{}, nnn, @Rbrack{}}
+@cindex changing font position (@code{\f})
+@cindex font position, changing (@code{\f})
+@cindex @code{sty} request, and font positions
+@cindex @code{fam} request, and font positions
+@cindex @code{\F}, and font positions
+@kindex styles
+@kindex family
+@pindex DESC
+Change the current font position to @var{nnn} (one-digit
+position@tie{}@var{n}, two-digit position @var{nn}), which must be a
+non-negative integer.
+
+If @var{nnn} is associated with a style (as set with the @code{sty}
+request or with the @code{styles} command in the @file{DESC} file), use
+it within the current font family (as set with the @code{fam} request,
+the @code{\F} escape, or the @code{family} command in the
+@file{DESC} file).
+
+@Example
+this is font 1
+.ft 2
+this is font 2
+.ft                   \" switch back to font 1
+.ft 3
+this is font 3
+.ft
+this is font 1 again
+@endExample
+
+@xref{Changing Fonts}, for the standard syntax form.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Using Symbols, Character Classes, Font Positions, Fonts and Symbols
+@subsection Using Symbols
+@cindex using symbols
+@cindex symbols, using
+
+@cindex glyph
+@cindex character
+@cindex ligature
+A @dfn{glyph} is a graphical representation of a @dfn{character}.  While
+a character is an abstract entity containing semantic information, a
+glyph is something that can be actually seen on screen or paper.  It is
+possible that a character has multiple glyph representation forms (for
+example, the character `A' can be either written in a roman or an italic
+font, yielding two different glyphs); sometimes more than one character
+maps to a single glyph (this is a @dfn{ligature} -- the most common is
+`fi').
+
+@cindex symbol
+@cindex special fonts
+@kindex fonts
+@pindex DESC
+@cindex @code{special} request, and glyph search order
+@cindex @code{fspecial} request, and glyph search order
+A @dfn{symbol} is simply a named glyph.  Within @code{gtroff}, all glyph
+names of a particular font are defined in its font file.  If the user
+requests a glyph not available in this font, @code{gtroff} looks up an
+ordered list of @dfn{special fonts}.  By default, the @sc{PostScript}
+output device supports the two special fonts @samp{SS} (slanted symbols)
+and @samp{S} (symbols) (the former is looked up before the latter).
+Other output devices use different names for special fonts.  Fonts
+mounted with the @code{fonts} keyword in the @file{DESC} file are
+globally available.  To install additional special fonts locally (i.e.@:
+for a particular font), use the @code{fspecial} request.
+
+Here are the exact rules how @code{gtroff} searches a given symbol:
+
+@itemize @bullet
+@item
+If the symbol has been defined with the @code{char} request, use it.
+This hides a symbol with the same name in the current font.
+
+@item
+Check the current font.
+
+@item
+If the symbol has been defined with the @code{fchar} request, use it.
+
+@item
+Check whether the current font has a font-specific list of special
+fonts; test all fonts in the order of appearance in the last
+@code{fspecial} call if appropriate.
+
+@item
+If the symbol has been defined with the @code{fschar} request for the
+current font, use it.
+
+@item
+Check all fonts in the order of appearance in the last @code{special}
+call.
+
+@item
+If the symbol has been defined with the @code{schar} request, use it.
+
+@item
+As a last resort, consult all fonts loaded up to now for special fonts
+and check them, starting with the lowest font number.  Note that this
+can sometimes lead to surprising results since the @code{fonts} line in
+the @file{DESC} file often contains empty positions, which are filled
+later on.  For example, consider the following:
+
+@Example
+fonts 3 0 0 FOO
+@endExample
+
+@noindent
+This mounts font @code{foo} at font position@tie{}3.  We assume that
+@code{FOO} is a special font, containing glyph @code{foo}, and that no
+font has been loaded yet.  The line
+
+@Example
+.fspecial BAR BAZ
+@endExample
+
+@noindent
+makes font @code{BAZ} special only if font @code{BAR} is active.  We
+further assume that @code{BAZ} is really a special font, i.e., the font
+description file contains the @code{special} keyword, and that it also
+contains glyph @code{foo} with a special shape fitting to font
+@code{BAR}.  After executing @code{fspecial}, font @code{BAR} is loaded
+at font position@tie{}1, and @code{BAZ} at position@tie{}2.
+
+We now switch to a new font @code{XXX}, trying to access glyph
+@code{foo} that is assumed to be missing.  There are neither
+font-specific special fonts for @code{XXX} nor any other fonts made
+special with the @code{special} request, so @code{gtroff} starts the
+search for special fonts in the list of already mounted fonts, with
+increasing font positions.  Consequently, it finds @code{BAZ} before
+@code{FOO} even for @code{XXX}, which is not the intended behaviour.
+@end itemize
+
+@xref{Font Files}, and @ref{Special Fonts}, for more details.
+
+@cindex list of available glyphs (@cite{groff_char(7)} man page)
+@cindex available glyphs, list (@cite{groff_char(7)} man page)
+@cindex glyphs, available, list (@cite{groff_char(7)} man page)
+The list of available symbols is device dependent; see the
+@cite{groff_char(7)} man page for a complete list of all glyphs.  For
+example, say
+
+@Example
+man -Tdvi groff_char > groff_char.dvi
+@endExample
+
+@noindent
+for a list using the default DVI fonts (not all versions of the
+@code{man} program support the @option{-T} option).  If you want to use
+an additional macro package to change the used fonts, @code{groff} must
+be called directly:
+
+@Example
+groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
+@endExample
+
+@cindex composite glyph names
+@cindex glyph names, composite
+@cindex groff glyph list (GGL)
+@cindex GGL (groff glyph list)
+@cindex adobe glyph list (AGL)
+@cindex AGL (adobe glyph list)
+Glyph names not listed in groff_char(7) are derived algorithmically,
+using a simplified version of the Adobe Glyph List (AGL) algorithm, which
+is described in @uref{https://github.com@//adobe-type-tools@//agl-aglfn}.
+The (frozen) set of glyph names that can't be derived algorithmically
+is called @dfn{groff glyph list (GGL)}.
+
+@itemize @bullet
+@item
+A glyph for Unicode character U+@var{XXXX}[@var{X}[@var{X}]], which is
+not a composite character is named
+@code{u@var{XXXX}@r{[}@var{X}@r{[}@var{X}@r{]]}}.  @var{X} must be an
+uppercase hexadecimal digit.  Examples: @code{u1234}, @code{u008E},
+@code{u12DB8}.  The largest Unicode value is 0x10FFFF.  There must be at
+least four @code{X} digits; if necessary, add leading zeroes (after the
+@samp{u}).  No zero padding is allowed for character codes greater than
+0xFFFF.  Surrogates (i.e., Unicode values greater than 0xFFFF
+represented with character codes from the surrogate area U+D800-U+DFFF)
+are not allowed too.
+
+@item
+A glyph representing more than a single input character is named
+
+@display
+@samp{u} @var{component1} @samp{_} @var{component2} @samp{_} @var{component3} @dots{}
+@end display
+
+@noindent
+Example: @code{u0045_0302_0301}.
+
+For simplicity, all Unicode characters that are composites must be
+decomposed maximally (this is normalization form@tie{}D in the Unicode
+standard); for example, @code{u00CA_0301} is not a valid glyph name
+since U+00CA (@sc{latin capital letter e with circumflex}) can be
+further decomposed into U+0045 (@sc{latin capital letter e}) and U+0302
+(@sc{combining circumflex accent}).  @code{u0045_0302_0301} is thus the
+glyph name for U+1EBE, @sc{latin capital letter e with circumflex and
+acute}.
+
+@item
+groff maintains a table to decompose all algorithmically derived glyph
+names that are composites itself.  For example, @code{u0100} (@sc{latin
+letter a with macron}) is automatically decomposed into
+@code{u0041_0304}.  Additionally, a glyph name of the GGL is preferred
+to an algorithmically derived glyph name; groff also automatically does
+the mapping.  Example: The glyph @code{u0045_0302} is mapped to
+@code{^E}.
+
+@item
+glyph names of the GGL can't be used in composite glyph names; for
+example, @code{^E_u0301} is invalid.
+@end itemize
+
+@DefescList {\\, @Lparen{}, nm, }
+@DefescItem {\\, @Lbrack{}, name, @Rbrack{}}
+@DefescListEnd {\\, @Lbrack{}, component1 component2 @dots{}, @Rbrack{}}
+Insert a symbol @var{name} (two-character name @var{nm}) or a composite
+glyph with component glyphs @var{component1}, @var{component2},
+@enddots{} There is no special syntax for one-character names -- the
+natural form @samp{\@var{n}} would collide with escapes.@footnote{Note
+that a one-character symbol is not the same as an input character, i.e.,
+the character @code{a} is not the same as @code{\[a]}.  By default,
+@code{groff} defines only a single one-character symbol, @code{\[-]}; it
+is usually accessed as @code{\-}.  On the other hand, @code{gtroff} has
+the special feature that @code{\[char@var{XXX}]} is the same as the
+input character with character code @var{XXX}.  For example,
+@code{\[char97]} is identical to the letter @code{a} if @acronym{ASCII}
+encoding is active.}
+
+If @var{name} is undefined, a warning of type @samp{char} is generated,
+and the escape is ignored.  @xref{Debugging}, for information about
+warnings.
+
+groff resolves @code{\[...]} with more than a single component as
+follows:
+
+@itemize @bullet
+@item
+Any component that is found in the GGL is converted to the
+@code{u@var{XXXX}} form.
+
+@item
+Any component @code{u@var{XXXX}} that is found in the list of
+decomposable glyphs is decomposed.
+
+@item
+The resulting elements are then concatenated with @samp{_} in between,
+dropping the leading @samp{u} in all elements but the first.
+@end itemize
+
+No check for the existence of any component (similar to @code{tr}
+request) is done.
+
+Examples:
+
+@table @code
+@item \[A ho]
+@samp{A} maps to @code{u0041}, @samp{ho} maps to @code{u02DB}, thus the
+final glyph name would be @code{u0041_02DB}.  Note this is not the
+expected result: The ogonek glyph @samp{ho} is a spacing ogonek, but for
+a proper composite a non-spacing ogonek (U+0328) is necessary.  Looking
+into the file @file{composite.tmac} one can find @w{@samp{.composite ho
+u0328}}, which changes the mapping of @samp{ho} while a composite glyph
+name is constructed, causing the final glyph name to be
+@code{u0041_0328}.
+
+@item \[^E u0301]
+@itemx \[^E aa]
+@itemx \[E a^ aa]
+@itemx \[E ^ ']
+@samp{^E} maps to @code{u0045_0302}, thus the final glyph name is
+@code{u0045_0302_0301} in all forms (assuming proper calls of the
+@code{composite} request).
+@end table
+
+It is not possible to define glyphs with names like @w{@samp{A ho}}
+within a groff font file.  This is not really a limitation; instead, you
+have to define @code{u0041_0328}.
+@endDefesc
+
+@Defesc {\\C, ', xxx, '}
+@cindex named character (@code{\C})
+@cindex character, named (@code{\C})
+Typeset the glyph named @var{xxx}.@footnote{@code{\C} is actually a
+misnomer since it accesses an output glyph.}  Normally it is more
+convenient to use @code{\[@var{xxx}]}, but @code{\C} has the advantage
+that it is compatible with newer versions of @acronym{AT&T} @code{troff}
+and is available in compatibility mode.
+@endDefesc
+
+@Defreq {composite, from to}
+@pindex composite.tmac
+Map glyph name @var{from} to glyph name @var{to} if it is used in
+@code{\[...]} with more than one component.  See above for examples.
+
+This mapping is based on glyph names only; no check for the existence of
+either glyph is done.
+
+A set of default mappings for many accents can be found in the file
+@file{composite.tmac}, which is loaded at start-up.
+@endDefreq
+
+@Defesc {\\N, ', n, '}
+@cindex numbered glyph (@code{\N})
+@cindex glyph, numbered (@code{\N})
+@cindex @code{char} request, used with @code{\N}
+@cindex Unicode
+Typeset the glyph with code@tie{}@var{n} in the current font
+(@code{n}@tie{}is @strong{not} the input character code).  The number
+@var{n}@tie{}can be any non-negative decimal integer.  Most devices only
+have glyphs with codes between 0 and@tie{}255; the Unicode output device
+uses codes in the range 0--65535.  If the current font does not contain
+a glyph with that code, special fonts are @emph{not} searched.  The
+@code{\N} escape sequence can be conveniently used in conjunction with
+the @code{char} request:
+
+@Example
+.char \[phone] \f[ZD]\N'37'
+@endExample
+
+@noindent
+@pindex DESC
+@cindex unnamed glyphs
+@cindex glyphs, unnamed
+The code of each glyph is given in the fourth column in the font
+description file after the @code{charset} command.  It is possible to
+include unnamed glyphs in the font description file by using a name of
+@samp{---}; the @code{\N} escape sequence is the only way to use these.
+
+No kerning is applied to glyphs accessed with @code{\N}.
+@endDefesc
+
+Some escape sequences directly map onto special glyphs.
+
+@Defesc {\\', , , }
+This is a backslash followed by the apostrophe character,
+@acronym{ASCII} character @code{0x27} (@acronym{EBCDIC} character
+@code{0x7D}).  The same as @code{\[aa]}, the acute accent.
+@endDefesc
+
+@Defesc {\\`, , , }
+This is a backslash followed by @acronym{ASCII} character @code{0x60}
+(@acronym{EBCDIC} character @code{0x79} usually).  The same as
+@code{\[ga]}, the grave accent.
+@endDefesc
+
+@Defesc {\\-, , , }
+This is the same as @code{\[-]}, the minus sign in the current font.
+@endDefesc
+
+@Defesc {\\_, , , }
+This is the same as @code{\[ul]}, the underline character.
+@endDefesc
+
+@Defreq {cflags, n c1 c2 @dots{}}
+@cindex glyph properties (@code{cflags})
+@cindex character properties (@code{cflags})
+@cindex properties of glyphs (@code{cflags})
+@cindex properties of characters (@code{cflags})
+Input characters and symbols have certain properties associated with
+it.@footnote{Note that the output glyphs themselves don't have such
+properties.  For @code{gtroff}, a glyph is a numbered box with a given
+width, depth, and height, nothing else.  All manipulations with the
+@code{cflags} request work on the input level.}  These properties can be
+modified with the @code{cflags} request.  The first argument is the sum
+of the desired flags and the remaining arguments are the characters or
+symbols to have those properties.  It is possible to omit the spaces
+between the characters or symbols.  Instead of single characters or
+symbols you can also use character classes (see @ref{Character Classes}
+for more details).
+
+@table @code
+@item 1
+@cindex end-of-sentence characters
+@cindex characters, end-of-sentence
+The character ends sentences (initially characters @samp{.?!} have this
+property).
+
+@item 2
+@cindex hyphenating characters
+@cindex characters, hyphenation
+Lines can be broken before the character (initially no characters have
+this property).  This only works if both the characters before and after
+have non-zero hyphenation codes (as set with the @code{hcode} request).
+Use value@tie{}64 to override this behaviour.
+
+@item 4
+@cindex @code{hy} glyph, and @code{cflags}
+@cindex @code{em} glyph, and @code{cflags}
+Lines can be broken after the character (initially the character
+@samp{-} and the symbols @samp{\[hy]} and @samp{\[em]} have this
+property).  This only works if both the characters before and after have
+non-zero hyphenation codes (as set with the @code{hcode} request).  Use
+value@tie{}64 to override this behaviour.
+
+@item 8
+@cindex overlapping characters
+@cindex characters, overlapping
+@cindex @code{ul} glyph, and @code{cflags}
+@cindex @code{rn} glyph, and @code{cflags}
+@cindex @code{ru} glyph, and @code{cflags}
+@cindex @code{radicalex} glyph, and @code{cflags}
+@cindex @code{sqrtex} glyph, and @code{cflags}
+The character overlaps horizontally if used as a horizontal line
+building element.  Initially the symbols @samp{\[ul]}, @samp{\[rn]},
+@samp{\[ru]}, @samp{\[radicalex]}, and @samp{\[sqrtex]} have this
+property.
+
+@item 16
+@cindex @code{br} glyph, and @code{cflags}
+The character overlaps vertically if used as vertical line building
+element.  Initially symbol @samp{\[br]} has this property.
+
+@item 32
+@cindex transparent characters
+@cindex character, transparent
+@cindex @code{"}, at end of sentence
+@cindex @code{'}, at end of sentence
+@cindex @code{)}, at end of sentence
+@cindex @code{]}, at end of sentence
+@cindex @code{*}, at end of sentence
+@cindex @code{dg} glyph, at end of sentence
+@cindex @code{rq} glyph, at end of sentence
+@cindex @code{cq} glyph, at end of sentence
+An end-of-sentence character followed by any number of characters with
+this property is treated as the end of a sentence if followed by a
+newline or two spaces; in other words the character is @dfn{transparent}
+for the purposes of end-of-sentence recognition -- this is the same as
+having a zero space factor in @TeX{} (initially characters @samp{"')]*}
+and the symbols @samp{\[dg]}, @samp{\[rq]}, and @samp{\[cq]} have this
+property).
+
+@item 64
+Ignore hyphenation code values of the surrounding characters.  Use this
+in combination with values 2 and@tie{}4 (initially no characters have
+this property).  For example, if you need an automatic break point after
+the en-dash in number ranges like `3000--5000', insert
+
+@Example
+.cflags 68 \(en
+@endExample
+
+@noindent
+into your document.  Note, however, that this can lead to bad layout if
+done without thinking; in most situations, a better solution instead of
+changing the @code{cflags} value is to insert @code{\:} right after the
+hyphen at the places that really need a break point.
+
+@item 128
+Prohibit a line break before the character, but allow a line break after
+the character.  This works only in combination with flags 256 and 512
+(see below) and has no effect otherwise.
+
+@item 256
+Prohibit a line break after the character, but allow a line break before
+the character.  This works only in combination with flags 128 and 512
+(see below) and has no effect otherwise.
+
+@item 512
+Allow line break before or after the character.  This works only in
+combination with flags 128 and 256 and has no effect otherwise.
+
+Contrary to flag values 2 and@tie{}4, the flags 128, 256, and 512 work
+pairwise.  If, for example, the left character has value 512, and the
+right character 128, no line break gets inserted.  If we use
+value@tie{}6 instead for the left character, a line break after the
+character can't be suppressed since the right neighbour character
+doesn't get examined.
+@end table
+@endDefreq
+
+@DefreqList {char, g [@Var{string}]}
+@DefreqItemx {fchar, g [@Var{string}]}
+@DefreqItemx {fschar, f g [@Var{string}]}
+@DefreqListEndx {schar, g [@Var{string}]}
+@cindex defining character (@code{char})
+@cindex defining fallback character (@code{fchar}, @code{fschar}, @code{schar})
+@cindex character, defining (@code{char})
+@cindex character, defining fallback (@code{fchar}, @code{fschar}, @code{schar})
+@cindex fallback character, defining (@code{fchar}, @code{fschar}, @code{schar})
+@cindex creating new characters (@code{char})
+@cindex defining symbol (@code{char})
+@cindex symbol, defining (@code{char})
+@cindex defining glyph (@code{char})
+@cindex glyph, defining (@code{char})
+@cindex escape character, while defining glyph
+@cindex character, escape, while defining glyph
+@cindex @code{tr} request, and glyph definitions
+@cindex @code{cp} request, and glyph definitions
+@cindex @code{rc} request, and glyph definitions
+@cindex @code{lc} request, and glyph definitions
+@cindex @code{\l}, and glyph definitions
+@cindex @code{\L}, and glyph definitions
+@cindex @code{\&}, and glyph definitions
+@cindex @code{\e}, and glyph definitions
+@cindex @code{hcode} request, and glyph definitions
+Define a new glyph@tie{}@var{g} to be @var{string} (which can be
+empty).@footnote{@code{char} is a misnomer since an output glyph is
+defined.}  Every time glyph@tie{}@var{g} needs to be printed,
+@var{string} is processed in a temporary environment and the result is
+wrapped up into a single object.  Compatibility mode is turned off and
+the escape character is set to @samp{\} while @var{string} is being
+processed.  Any emboldening, constant spacing or track kerning is
+applied to this object rather than to individual characters in
+@var{string}.
+
+A glyph defined by these requests can be used just like a normal glyph
+provided by the output device.  In particular, other characters can be
+translated to it with the @code{tr} or @code{trin} requests; it can be
+made the leader character by the @code{lc} request; repeated patterns
+can be drawn with the glyph using the @code{\l} and @code{\L} escape
+sequences; words containing the glyph can be hyphenated correctly if the
+@code{hcode} request is used to give the glyph's symbol a hyphenation
+code.
+
+There is a special anti-recursion feature: Use of @code{g} within the
+glyph's definition is handled like normal characters and symbols not
+defined with @code{char}.
+
+Note that the @code{tr} and @code{trin} requests take precedence if
+@code{char} accesses the same symbol.
+
+@Example
+.tr XY
+X
+    @result{} Y
+.char X Z
+X
+    @result{} Y
+.tr XX
+X
+    @result{} Z
+@endExample
+
+The @code{fchar} request defines a fallback glyph: @code{gtroff} only
+checks for glyphs defined with @code{fchar} if it cannot find the glyph
+in the current font.  @code{gtroff} carries out this test before
+checking special fonts.
+
+@code{fschar} defines a fallback glyph for font@tie{}@var{f}:
+@code{gtroff} checks for glyphs defined with @code{fschar} after the
+list of fonts declared as font-specific special fonts with the
+@code{fspecial} request, but before the list of fonts declared as global
+special fonts with the @code{special} request.
+
+Finally, the @code{schar} request defines a global fallback glyph:
+@code{gtroff} checks for glyphs defined with @code{schar} after the list
+of fonts declared as global special fonts with the @code{special}
+request, but before the already mounted special fonts.
+
+@xref{Using Symbols}, for a detailed description of the glyph searching
+mechanism in @code{gtroff}.
+@endDefreq
+
+@DefreqList {rchar, c1 c2 @dots{}}
+@DefreqListEndx {rfschar, f c1 c2 @dots{}}
+@cindex removing glyph definition (@code{rchar}, @code{rfschar})
+@cindex glyph, removing definition (@code{rchar}, @code{rfschar})
+@cindex fallback glyph, removing definition (@code{rchar}, @code{rfschar})
+Remove the definitions of glyphs @var{c1}, @var{c2},@tie{}@enddots{}
+This undoes the effect of a @code{char}, @code{fchar}, or @code{schar}
+request.
+
+It is possible to omit the whitespace between arguments.
+
+The request @code{rfschar} removes glyph definitions defined with
+@code{fschar} for glyph@tie{}f.
+@endDefreq
+
+@xref{Special Characters}.
+
+@c ---------------------------------------------------------------------
+
+@node Character Classes, Special Fonts, Using Symbols, Fonts and Symbols
+@subsection Character Classes
+@cindex character classes
+@cindex classes, character
+
+Classes are particularly useful for East Asian languages such as
+Chinese, Japanese, and Korean, where the number of needed characters is
+much larger than in European languages, and where large sets of
+characters share the same properties.
+
+@Defreq {class, n c1 c2 @dots{}}
+@cindex character class (@code{class})
+@cindex defining character class (@code{class})
+@cindex class of characters (@code{class})
+In @code{groff}, a @dfn{character class} (or simply ``class'') is a set
+of characters, grouped by some user aspect.  The @code{class} request
+defines such classes so that other requests can refer to all characters
+belonging to this set with a single class name.  Currently, only the
+@code{cflags} request can handle character classes.
+
+A @code{class} request takes a class name followed by a list of
+entities.  In its simplest form, the entities are characters or symbols:
+
+@Example
+.class [prepunct] , : ; > @}
+@endExample
+
+Since class and glyph names share the same namespace, it is recommended
+to start and end the class name with @code{[} and @code{]},
+respectively, to avoid collisions with normal @code{groff} symbols (and
+symbols defined by the user).  In particular, the presence of @code{]}
+in the symbol name intentionally prevents the usage of @code{\[...]},
+thus you must use the @code{\C} escape to access a class with such a
+name.
+
+@cindex GGL (groff glyph list)
+@cindex groff glyph list (GGL)
+You can also use a special character range notation, consisting of a
+start character or symbol, followed by @samp{-}, and an end character or
+symbol.  Internally, @code{gtroff} converts these two symbol names to
+Unicode values (according to the groff glyph gist), which then give the
+start and end value of the range.  If that fails, the class definition
+is skipped.
+
+Finally, classes can be nested, too.
+
+Here is a more complex example:
+
+@Example
+.class [prepunctx] \C'[prepunct]' \[u2013]-\[u2016]
+@endExample
+
+The class @samp{prepunctx} now contains the contents of the class
+@code{prepunct} as defined above (the set @samp{, : ; > @}}), and
+characters in the range between @code{U+2013} and @code{U+2016}.
+
+If you want to add @samp{-} to a class, it must be the first character
+value in the argument list, otherwise it gets misinterpreted as a range.
+
+Note that it is not possible to use class names within range
+definitions.
+
+Typical use of the @code{class} request is to control line-breaking and
+hyphenation rules as defined by the @code{cflags} request.  For example,
+to inhibit line breaks before the characters belonging to the
+@code{prepunctx} class, you can write:
+
+@Example
+.cflags 2 \C'[prepunctx]'
+@endExample
+
+See the @code{cflags} request in @ref{Using Symbols}, for more details.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Special Fonts, Artificial Fonts, Character Classes, Fonts and Symbols
+@subsection Special Fonts
+@cindex special fonts
+@cindex fonts, special
+
+Special fonts are those that @code{gtroff} searches when it cannot find
+the requested glyph in the current font.  The Symbol font is usually a
+special font.
+
+@code{gtroff} provides the following two requests to add more special
+fonts.  @xref{Using Symbols}, for a detailed description of the glyph
+searching mechanism in @code{gtroff}.
+
+Usually, only non-TTY devices have special fonts.
+
+@DefreqList {special, [@Var{s1} @Var{s2} @dots{}]}
+@DefreqListEndx {fspecial, f [@Var{s1} @Var{s2} @dots{}]}
+@kindex fonts
+@pindex DESC
+Use the @code{special} request to define special fonts.  Initially, this
+list is empty.
+
+Use the @code{fspecial} request to designate special fonts only when
+font@tie{}@var{f} is active.  Initially, this list is empty.
+
+Previous calls to @code{special} or @code{fspecial} are overwritten;
+without arguments, the particular list of special fonts is set to empty.
+Special fonts are searched in the order they appear as arguments.
+
+All fonts that appear in a call to @code{special} or @code{fspecial}
+are loaded.
+
+@xref{Using Symbols}, for the exact search order of glyphs.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Artificial Fonts, Ligatures and Kerning, Special Fonts, Fonts and Symbols
+@subsection Artificial Fonts
+@cindex artificial fonts
+@cindex fonts, artificial
+
+There are a number of requests and escapes for artificially creating
+fonts.  These are largely vestiges of the days when output devices did
+not have a wide variety of fonts, and when @code{nroff} and @code{troff}
+were separate programs.  Most of them are no longer necessary in GNU
+@code{troff}.  Nevertheless, they are supported.
+
+@DefescList {\\H, ', height, '}
+@DefescItem {\\H, ', @t{+}height, '}
+@DefescItem {\\H, ', @t{-}height, '}
+@DefregListEndx {.height}
+@cindex changing the font height (@code{\H})
+@cindex font height, changing (@code{\H})
+@cindex height, font, changing (@code{\H})
+Change (increment, decrement) the height of the current font, but not
+the width.  If @var{height} is zero, restore the original height.
+Default scaling indicator is @samp{z}.
+
+The read-only number register @code{.height} contains the font height as
+set by @code{\H}.
+
+Currently, only the @option{-Tps} and @option{-Tpdf} devices support
+this feature.
+
+Note that @code{\H} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the font on the fly:
+
+@Example
+.mc \H'+5z'x\H'0'
+@endExample
+
+In compatibility mode, @code{gtroff} behaves differently: If an
+increment or decrement is used, it is always taken relative to the
+current point size and not relative to the previously selected font
+height.  Thus,
+
+@Example
+.cp 1
+\H'+5'test \H'+5'test
+@endExample
+
+@noindent
+prints the word @samp{test} twice with the same font height (five points
+larger than the current font size).
+@endDefesc
+
+@DefescList {\\S, ', slant, '}
+@DefregListEndx {.slant}
+@cindex changing the font slant (@code{\S})
+@cindex font slant, changing (@code{\S})
+@cindex slant, font, changing (@code{\S})
+Slant the current font by @var{slant} degrees.  Positive values slant to
+the right.  Only integer values are possible.
+
+The read-only number register @code{.slant} contains the font slant as
+set by @code{\S}.
+
+Currently, only the @option{-Tps} and @option{-Tpdf} devices support
+this feature.
+
+Note that @code{\S} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the font on the fly:
+
+@Example
+.mc \S'20'x\S'0'
+@endExample
+
+This request is incorrectly documented in the original Unix troff
+manual; the slant is always set to an absolute value.
+@endDefesc
+
+@Defreq {ul, [@Var{lines}]}
+@cindex underlining (@code{ul})
+The @code{ul} request normally underlines subsequent lines if a TTY
+output device is used.  Otherwise, the lines are printed in italics
+(only the term `underlined' is used in the following).  The single
+argument is the number of input lines to be underlined; with no
+argument, the next line is underlined.  If @var{lines} is zero or
+negative, stop the effects of @code{ul} (if it was active).  Requests
+and empty lines do not count for computing the number of underlined
+input lines, even if they produce some output like @code{tl}.  Lines
+inserted by macros (e.g.@: invoked by a trap) do count.
+
+At the beginning of @code{ul}, the current font is stored and the
+underline font is activated.  Within the span of a @code{ul} request, it
+is possible to change fonts, but after the last line affected by
+@code{ul} the saved font is restored.
+
+This number of lines still to be underlined is associated with the
+current environment (@pxref{Environments}).  The underline font can be
+changed with the @code{uf} request.
+
+@c XXX @xref should be changed to grotty
+
+@c @xref{Troff and Nroff Mode}, for a discussion how underlining is
+@c implemented in for TTY output devices, and which problems can arise.
+
+The @code{ul} request does not underline spaces.
+@endDefreq
+
+@Defreq {cu, [@Var{lines}]}
+@cindex continuous underlining (@code{cu})
+@cindex underlining, continuous (@code{cu})
+The @code{cu} request is similar to @code{ul} but underlines spaces as
+well (if a TTY output device is used).
+@endDefreq
+
+@Defreq {uf, font}
+@cindex underline font (@code{uf})
+@cindex font for underlining (@code{uf})
+Set the underline font (globally) used by @code{ul} and @code{cu}.  By
+default, this is the font at position@tie{}2.  @var{font} can be either
+a non-negative font position or the name of a font.
+@endDefreq
+
+@DefreqList {bd, font [@Var{offset}]}
+@DefreqItem {bd, font1 font2 [@Var{offset}]}
+@DefregListEndx {.b}
+@cindex imitating bold face (@code{bd})
+@cindex bold face, imitating (@code{bd})
+Artificially create a bold font by printing each glyph twice, slightly
+offset.
+
+Two syntax forms are available.
+
+@itemize @bullet
+@item
+Imitate a bold font unconditionally.  The first argument specifies the
+font to embolden, and the second is the number of basic units, minus
+one, by which the two glyphs are offset.  If the second argument is
+missing, emboldening is turned off.
+
+@var{font} can be either a non-negative font position or the name of a
+font.
+
+@var{offset} is available in the @code{.b} read-only register if a
+special font is active; in the @code{bd} request, its default unit is
+@samp{u}.
+
+@cindex @code{fspecial} request, and imitating bold
+@kindex special
+@cindex embolding of special fonts
+@cindex special fonts, emboldening
+@item
+Imitate a bold form conditionally.  Embolden @var{font1} by @var{offset}
+only if font @var{font2} is the current font.  This command can be
+issued repeatedly to set up different emboldening values for different
+current fonts.  If the second argument is missing, emboldening is turned
+off for this particular current font.
+
+This affects special fonts only (either set up with the @code{special}
+command in font files or with the @code{fspecial} request).
+@end itemize
+@endDefreq
+
+@Defreq {cs, font [@Var{width} [@Var{em-size}]]}
+@cindex constant glyph space mode (@code{cs})
+@cindex mode for constant glyph space (@code{cs})
+@cindex glyph, constant space
+@cindex @code{ps} request, and constant glyph space mode
+Switch to and from @dfn{constant glyph space mode}.  If activated, the
+width of every glyph is @math{@var{width}/36} ems.  The em size is given
+absolutely by @var{em-size}; if this argument is missing, the em value
+is taken from the current font size (as set with the @code{ps} request)
+when the font is effectively in use.  Without second and third argument,
+constant glyph space mode is deactivated.
+
+Default scaling indicator for @var{em-size} is @samp{z}; @var{width} is
+an integer.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Ligatures and Kerning,  , Artificial Fonts, Fonts and Symbols
+@subsection Ligatures and Kerning
+@cindex ligatures and kerning
+@cindex kerning and ligatures
+
+Ligatures are groups of characters that are run together, i.e, producing
+a single glyph.  For example, the letters `f' and `i' can form a
+ligature `fi' as in the word `file'.  This produces a cleaner look
+(albeit subtle) to the printed output.  Usually, ligatures are not
+available in fonts for TTY output devices.
+
+Most @sc{PostScript} fonts support the fi and fl ligatures.  The C/A/T
+typesetter that was the target of @acronym{AT&T} @code{troff} also
+supported `ff', `ffi', and `ffl' ligatures.  Advanced typesetters or
+`expert' fonts may include ligatures for `ft' and `ct', although GNU
+@code{troff} does not support these (yet).
+
+Only the current font is checked for ligatures and kerns; neither
+special fonts nor entities defined with the @code{char} request (and its
+siblings) are taken into account.
+
+@DefreqList {lg, [@Var{flag}]}
+@DefregListEndx {.lg}
+@cindex activating ligatures (@code{lg})
+@cindex ligatures, activating (@code{lg})
+@cindex ligatures enabled register (@code{.lg})
+Switch the ligature mechanism on or off; if the parameter is non-zero or
+missing, ligatures are enabled, otherwise disabled.  Default is on.  The
+current ligature mode can be found in the read-only number register
+@code{.lg} (set to 1 or@tie{}2 if ligatures are enabled,
+0@tie{}otherwise).
+
+Setting the ligature mode to@tie{}2 enables the two-character ligatures
+(fi, fl, and ff) and disables the three-character ligatures (ffi and
+ffl).
+@endDefreq
+
+@dfn{Pairwise kerning} is another subtle typesetting mechanism that
+modifies the distance between a glyph pair to improve readability.  In
+most cases (but not always) the distance is decreased.
+@iftex
+For example, compare the combination of the letters `V' and `A'.  With
+kerning, `VA' is printed.  Without kerning it appears as `V@w{}A'.
+@end iftex
+Typewriter-like fonts and fonts for terminals where all glyphs have the
+same width don't use kerning.
+
+@DefreqList {kern, [@Var{flag}]}
+@DefregListEndx {.kern}
+@cindex activating kerning (@code{kern})
+@cindex kerning, activating (@code{kern})
+@cindex kerning enabled register (@code{.kern})
+Switch kerning on or off.  If the parameter is non-zero or missing,
+enable pairwise kerning, otherwise disable it.  The read-only number
+register @code{.kern} is set to@tie{}1 if pairwise kerning is enabled,
+0@tie{}otherwise.
+
+@cindex zero width space character (@code{\&})
+@cindex character, zero width space (@code{\&})
+@cindex space character, zero width (@code{\&})
+If the font description file contains pairwise kerning information,
+glyphs from that font are kerned.  Kerning between two glyphs can be
+inhibited by placing @code{\&} between them: @samp{V\&A}.
+
+@xref{Font File Format}.
+@endDefreq
+
+@cindex track kerning
+@cindex kerning, track
+@dfn{Track kerning} expands or reduces the space between glyphs.  This
+can be handy, for example, if you need to squeeze a long word onto a
+single line or spread some text to fill a narrow column.  It must be
+used with great care since it is usually considered bad typography if
+the reader notices the effect.
+
+@Defreq {tkf, f s1 n1 s2 n2}
+@cindex activating track kerning (@code{tkf})
+@cindex track kerning, activating (@code{tkf})
+Enable track kerning for font@tie{}@var{f}.  If the current font
+is@tie{}@var{f} the width of every glyph is increased by an amount
+between @var{n1} and @var{n2} (@var{n1}, @var{n2} can be negative); if
+the current point size is less than or equal to @var{s1} the width is
+increased by @var{n1}; if it is greater than or equal to @var{s2} the
+width is increased by @var{n2}; if the point size is greater than or
+equal to @var{s1} and less than or equal to @var{s2} the increase in
+width is a linear function of the point size.
+
+The default scaling indicator is @samp{z} for @var{s1} and @var{s2},
+@samp{p} for @var{n1} and @var{n2}.
+
+Note that the track kerning amount is added even to the rightmost glyph
+in a line; for large values it is thus recommended to increase the line
+length by the same amount to compensate it.
+@endDefreq
+
+Sometimes, when typesetting letters of different fonts, more or less
+space at such boundaries is needed.  There are two escapes to help with
+this.
+
+@Defesc {\\/, , , }
+@cindex italic correction (@code{\/})
+@cindex correction, italic (@code{\/})
+@cindex correction between italic and roman glyph (@code{\/}, @code{\,})
+@cindex roman glyph, correction after italic glyph (@code{\/})
+@cindex italic glyph, correction before roman glyph (@code{\/})
+@cindex glyph, italic correction (@code{\/})
+Increase the width of the preceding glyph so that the spacing between
+that glyph and the following glyph is correct if the following glyph is
+a roman glyph.  For example, if an italic@tie{}@code{f} is immediately
+followed by a roman right parenthesis, then in many fonts the top right
+portion of the@tie{}@code{f} overlaps the top left of the right
+parenthesis.  Use this escape sequence whenever an italic glyph is
+immediately followed by a roman glyph without any intervening space.
+This small amount of space is also called @dfn{italic correction}.
+
+@iftex
+@c can't use @Example...@endExample here
+@example
+@group
+\f[I]f\f[R])
+    @result{} {@it f}@r{)}
+\f[I]f\/\f[R])
+    @result{} @i{f}@r{)}
+@end group
+@end example
+@end iftex
+@endDefesc
+
+@Defesc {\\\,, , , }
+@cindex left italic correction (@code{\,})
+@cindex correction, left italic (@code{\,})
+@cindex glyph, left italic correction (@code{\,})
+@cindex roman glyph, correction before italic glyph (@code{\,})
+@cindex italic glyph, correction after roman glyph (@code{\,})
+Modify the spacing of the following glyph so that the spacing between
+that glyph and the preceding glyph is correct if the preceding glyph is
+a roman glyph.  Use this escape sequence whenever a roman glyph is
+immediately followed by an italic glyph without any intervening space.
+In analogy to above, this space could be called @dfn{left italic
+correction}, but this term isn't used widely.
+
+@iftex
+@c can't use @Example...@endExample here
+@example
+@group
+q\f[I]f
+    @result{} @r{q}@i{f}
+q\,\f[I]f
+    @result{} @r{q}@math{@ptexcomma}@i{f}
+@end group
+@end example
+@end iftex
+@endDefesc
+
+@Defesc {\\&, , , }
+Insert a zero-width character, which is invisible.  Its intended use is
+to stop interaction of a character with its surroundings.
+
+@itemize @bullet
+@item
+It prevents the insertion of extra space after an end-of-sentence
+character.
+
+@Example
+Test.
+Test.
+    @result{} Test.  Test.
+Test.\&
+Test.
+    @result{} Test. Test.
+@endExample
+
+@item
+It prevents interpretation of a control character at the beginning of an
+input line.
+
+@Example
+.Test
+    @result{} warning: `Test' not defined
+\&.Test
+    @result{} .Test
+@endExample
+
+@item
+It prevents kerning between two glyphs.
+
+@iftex
+@c can't use @Example...@endExample here
+@example
+@group
+VA
+    @result{} @r{VA}
+V\&A
+    @result{} @r{V@w{}A}
+@end group
+@end example
+@end iftex
+
+@item
+It is needed to map an arbitrary character to nothing in the @code{tr}
+request (@pxref{Character Translations}).
+@end itemize
+@endDefesc
+
+@Defesc {\\), , , }
+This escape is similar to @code{\&} except that it behaves like a
+character declared with the @code{cflags} request to be transparent for
+the purposes of an end-of-sentence character.
+
+Its main usage is in macro definitions to protect against arguments
+starting with a control character.
+
+@Example
+.de xxx
+\)\\$1
+..
+.de yyy
+\&\\$1
+..
+This is a test.\c
+.xxx '
+This is a test.
+    @result{}This is a test.'  This is a test.
+This is a test.\c
+.yyy '
+This is a test.
+    @result{}This is a test.' This is a test.
+@endExample
+@endDefesc
+
+
+@c =====================================================================
+
+@node Sizes, Strings, Fonts and Symbols, gtroff Reference
+@section Sizes
+@cindex sizes
+
+@cindex baseline
+@cindex type size
+@cindex size of type
+@cindex vertical spacing
+@cindex spacing, vertical
+@code{gtroff} uses two dimensions with each line of text, type size and
+vertical spacing.  The @dfn{type size} is approximately the height of
+the tallest glyph.@footnote{This is usually the parenthesis.  Note that
+in most cases the real dimensions of the glyphs in a font are @emph{not}
+related to its type size!  For example, the standard @sc{PostScript}
+font families `Times Roman', `Helvetica', and `Courier' can't be used
+together at 10@dmn{pt}; to get acceptable output, the size of
+`Helvetica' has to be reduced by one point, and the size of `Courier'
+must be increased by one point.}  @dfn{Vertical spacing} is the amount
+of space @code{gtroff} allows for a line of text; normally, this is
+about 20%@tie{}larger than the current type size.  Ratios smaller than
+this can result in hard-to-read text; larger than this, it spreads the
+text out more vertically (useful for term papers).  By default,
+@code{gtroff} uses 10@tie{}point type on 12@tie{}point spacing.
+
+@cindex leading
+The difference between type size and vertical spacing is known, by
+typesetters, as @dfn{leading} (this is pronounced `ledding').
+
+@menu
+* Changing Type Sizes::
+* Fractional Type Sizes::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Changing Type Sizes, Fractional Type Sizes, Sizes, Sizes
+@subsection Changing Type Sizes
+
+@DefreqList {ps, [@Var{size}]}
+@DefreqItem {ps, @t{+}@Var{size}}
+@DefreqItem {ps, @t{-}@Var{size}}
+@DefescItemx {\\s, , size, }
+@DefregListEndx {.s}
+@cindex changing type sizes (@code{ps}, @code{\s})
+@cindex type sizes, changing (@code{ps}, @code{\s})
+@cindex point sizes, changing (@code{ps}, @code{\s})
+Use the @code{ps} request or the @code{\s} escape to change (increase,
+decrease) the type size (in points).  Specify @var{size} as either an
+absolute point size, or as a relative change from the current size.  The
+size@tie{}0 (for both @code{.ps} and @code{\s}), or no argument (for
+@code{.ps} only), goes back to the previous size.
+
+Default scaling indicator of @code{size} is @samp{z}.  If @code{size} is
+negative, it is set to 1@dmn{u}.
+
+@cindex type size registers (@code{.s}, @code{.ps})
+@cindex point size registers (@code{.s}, @code{.ps})
+The read-only number register @code{.s} returns the point size in points
+as a decimal fraction.  This is a string.  To get the point size in
+scaled points, use the @code{.ps} register instead.
+
+@code{.s} is associated with the current environment
+(@pxref{Environments}).
+
+@Example
+snap, snap,
+.ps +2
+grin, grin,
+.ps +2
+wink, wink, \s+2nudge, nudge,\s+8 say no more!
+.ps 10
+@endExample
+
+The @code{\s} escape may be called in a variety of ways.  Much like
+other escapes there must be a way to determine where the argument ends
+and the text begins.  Any of the following forms are valid:
+
+@table @code
+@item \s@var{n}
+Set the point size to @var{n}@tie{}points.  @var{n}@tie{}must be either
+0 or in the range 4 to@tie{}39.
+
+@item \s+@var{n}
+@itemx \s-@var{n}
+Increase or decrease the point size by @var{n}@tie{}points.
+@var{n}@tie{}must be exactly one digit.
+
+@item \s(@var{nn}
+Set the point size to @var{nn}@tie{}points.  @var{nn} must be exactly
+two digits.
+
+@item \s+(@var{nn}
+@itemx \s-(@var{nn}
+@itemx \s(+@var{nn}
+@itemx \s(-@var{nn}
+Increase or decrease the point size by @var{nn}@tie{}points.  @var{nn}
+must be exactly two digits.
+@end table
+
+Note that @code{\s} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the font on the fly:
+
+@Example
+.mc \s[20]x\s[0]
+@endExample
+
+@xref{Fractional Type Sizes}, for yet another syntactical form of using
+the @code{\s} escape.
+@endDefreq
+
+@Defreq {sizes, s1 s2 @dots{} sn [0]}
+Some devices may only have certain permissible sizes, in which case
+@code{gtroff} rounds to the nearest permissible size.  The @file{DESC}
+file specifies which sizes are permissible for the device.
+
+Use the @code{sizes} request to change the permissible sizes for the
+current output device.  Arguments are in scaled points; the
+@code{sizescale} line in the @file{DESC} file for the output device
+provides the scaling factor.  For example, if the scaling factor is
+1000, then the value 12000 is 12@tie{}points.
+
+Each argument can be a single point size (such as @samp{12000}), or a
+range of sizes (such as @samp{4000-72000}).  You can optionally end the
+list with a zero.
+@endDefreq
+
+@DefreqList {vs, [@Var{space}]}
+@DefreqItem {vs, @t{+}@Var{space}}
+@DefreqItem {vs, @t{-}@Var{space}}
+@DefregListEndx {.v}
+@cindex changing vertical line spacing (@code{vs})
+@cindex vertical line spacing, changing (@code{vs})
+@cindex vertical line spacing register (@code{.v})
+Change (increase, decrease) the vertical spacing by @var{space}.  The
+default scaling indicator is @samp{p}.
+
+If @code{vs} is called without an argument, the vertical spacing is
+reset to the previous value before the last call to @code{vs}.
+
+@cindex @code{.V} register, and @code{vs}
+@code{gtroff} creates a warning of type @samp{range} if @var{space} is
+negative; the vertical spacing is then set to smallest positive value,
+the vertical resolution (as given in the @code{.V} register).
+
+Note that @w{@samp{.vs 0}} isn't saved in a diversion since it doesn't
+result in a vertical motion.  You explicitly have to repeat this command
+before inserting the diversion.
+
+The read-only number register @code{.v} contains the current vertical
+spacing; it is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@cindex vertical line spacing, effective value
+The effective vertical line spacing consists of four components.
+Breaking a line causes the following actions (in the given order).
+
+@itemize @bullet
+@item
+@cindex extra pre-vertical line space (@code{\x})
+@cindex line space, extra pre-vertical (@code{\x})
+Move the current point vertically by the @dfn{extra pre-vertical line
+space}.  This is the minimum value of all @code{\x} escapes with a
+negative argument in the current output line.
+
+@item
+Move the current point vertically by the vertical line spacing as set
+with the @code{vs} request.
+
+@item
+Output the current line.
+
+@item
+@cindex extra post-vertical line space (@code{\x})
+@cindex line space, extra post-vertical (@code{\x})
+Move the current point vertically by the @dfn{extra post-vertical line
+space}.  This is the maximum value of all @code{\x} escapes with a
+positive argument in the line that has just been output.
+
+@item
+@cindex post-vertical line spacing
+@cindex line spacing, post-vertical (@code{pvs})
+Move the current point vertically by the @dfn{post-vertical line
+spacing} as set with the @code{pvs} request.
+@end itemize
+
+@cindex double-spacing (@code{vs}, @code{pvs})
+It is usually better to use @code{vs} or @code{pvs} instead of @code{ls}
+to produce double-spaced documents: @code{vs} and @code{pvs} have a
+finer granularity for the inserted vertical space compared to @code{ls};
+furthermore, certain preprocessors assume single-spacing.
+
+@xref{Manipulating Spacing}, for more details on the @code{\x} escape
+and the @code{ls} request.
+
+@DefreqList {pvs, [@Var{space}]}
+@DefreqItem {pvs, @t{+}@Var{space}}
+@DefreqItem {pvs, @t{-}@Var{space}}
+@DefregListEndx {.pvs}
+@cindex @code{ls} request, alternative to (@code{pvs})
+@cindex post-vertical line spacing, changing (@code{pvs})
+@cindex post-vertical line spacing register (@code{.pvs})
+Change (increase, decrease) the post-vertical spacing by @var{space}.
+The default scaling indicator is @samp{p}.
+
+If @code{pvs} is called without an argument, the post-vertical spacing
+is reset to the previous value before the last call to @code{pvs}.
+
+@code{gtroff} creates a warning of type @samp{range} if @var{space} is
+zero or negative; the vertical spacing is then set to zero.
+
+The read-only number register @code{.pvs} contains the current
+post-vertical spacing; it is associated with the current environment
+(@pxref{Environments}).
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Fractional Type Sizes,  , Changing Type Sizes, Sizes
+@subsection Fractional Type Sizes
+@cindex fractional type sizes
+@cindex fractional point sizes
+@cindex type sizes, fractional
+@cindex point sizes, fractional
+@cindex sizes, fractional
+
+@cindex @code{s} unit
+@cindex unit, @code{s}
+@cindex @code{z} unit
+@cindex unit, @code{z}
+@cindex @code{ps} request, with fractional type sizes
+@cindex @code{cs} request, with fractional type sizes
+@cindex @code{tkf} request, with fractional type sizes
+@cindex @code{\H}, with fractional type sizes
+@cindex @code{\s}, with fractional type sizes
+A @dfn{scaled point} is equal to @math{1/@var{sizescale}} points, where
+@var{sizescale} is specified in the @file{DESC} file (1@tie{}by
+default).  There is a new scale indicator @samp{z}, which has the effect
+of multiplying by @var{sizescale}.  Requests and escape sequences in
+@code{gtroff} interpret arguments that represent a point size as being
+in units of scaled points, but they evaluate each such argument using a
+default scale indicator of @samp{z}.  Arguments treated in this way are
+the argument to the @code{ps} request, the third argument to the
+@code{cs} request, the second and fourth arguments to the @code{tkf}
+request, the argument to the @code{\H} escape sequence, and those
+variants of the @code{\s} escape sequence that take a numeric expression
+as their argument (see below).
+
+For example, suppose @var{sizescale} is@tie{}1000; then a scaled point
+is equivalent to a millipoint; the request @w{@samp{.ps 10.25}} is
+equivalent to @w{@samp{.ps 10.25z}} and thus sets the point size to
+10250@tie{}scaled points, which is equal to 10.25@tie{}points.
+
+@code{gtroff} disallows the use of the @samp{z} scale indicator in
+instances where it would make no sense, such as a numeric expression
+whose default scale indicator was neither @samp{u} nor @samp{z}.
+Similarly it would make no sense to use a scaling indicator other than
+@samp{z} or @samp{u} in a numeric expression whose default scale
+indicator was @samp{z}, and so @code{gtroff} disallows this as well.
+
+There is also new scale indicator @samp{s}, which multiplies by the
+number of units in a scaled point.  So, for example, @samp{\n[.ps]s} is
+equal to @samp{1m}.  Be sure not to confuse the @samp{s} and @samp{z}
+scale indicators.
+
+@Defreg {.ps}
+A read-only number register returning the point size in scaled points.
+
+@code{.ps} is associated with the current environment
+(@pxref{Environments}).
+@endDefreg
+
+@DefregList {.psr}
+@DefregListEndx {.sr}
+@cindex last-requested point size registers (@code{.psr}, @code{.sr})
+@cindex point size registers, last-requested (@code{.psr}, @code{.sr})
+@cindex @code{.ps} register, in comparison with @code{.psr}
+@cindex @code{.s} register, in comparison with @code{.sr}
+The last-requested point size in scaled points is contained in the
+@code{.psr} read-only number register.  The last requested point size in
+points as a decimal fraction can be found in @code{.sr}.  This is a
+string-valued read-only number register.
+
+Note that the requested point sizes are device-independent, whereas the
+values returned by the @code{.ps} and @code{.s} registers are not.  For
+example, if a point size of 11@dmn{pt} is requested, and a @code{sizes}
+request (or a @code{sizescale} line in a @file{DESC} file) specifies
+10.95@dmn{pt} instead, this value is actually used.
+
+Both registers are associated with the current environment
+(@pxref{Environments}).
+@endDefreg
+
+The @code{\s} escape has the following syntax for working with
+fractional type sizes:
+
+@table @code
+@item \s[@var{n}]
+@itemx \s'@var{n}'
+Set the point size to @var{n}@tie{}scaled points; @var{n}@tie{}is a
+numeric expression with a default scale indicator of @samp{z}.
+
+@item \s[+@var{n}]
+@itemx \s[-@var{n}]
+@itemx \s+[@var{n}]
+@itemx \s-[@var{n}]
+@itemx \s'+@var{n}'
+@itemx \s'-@var{n}'
+@itemx \s+'@var{n}'
+@itemx \s-'@var{n}'
+Increase or decrease the point size by @var{n}@tie{}scaled points;
+@var{n}@tie{}is a numeric expression (which may start with a minus sign)
+with a default scale indicator of @samp{z}.
+@end table
+
+@xref{Font Files}.
+
+
+@c =====================================================================
+
+@node Strings, Conditionals and Loops, Sizes, gtroff Reference
+@section Strings
+@cindex strings
+
+@code{gtroff} has string variables, which are entirely for user
+convenience (i.e.@: there are no built-in strings except @code{.T}, but
+even this is a read-write string variable).
+
+Although the following requests can be used to create strings,
+simply using an undefined string will cause it to be defined as empty.
+@xref{Identifiers}.
+
+@DefreqList {ds, name [@Var{string}]}
+@DefreqItemx {ds1, name [@Var{string}]}
+@DefescItemx {\\*, , n, }
+@DefescItem {\\*, @Lparen{}, nm, }
+@DefescListEnd {\\*, @Lbrack{}, name arg1 arg2 @dots{}, @Rbrack{}}
+@cindex string interpolation (@code{\*})
+@cindex string expansion (@code{\*})
+@cindex interpolation of strings (@code{\*})
+@cindex expansion of strings (@code{\*})
+@cindex string arguments
+@cindex arguments, of strings
+Define and access a string variable @var{name} (one-character
+name@tie{}@var{n}, two-character name @var{nm}).  If @var{name} already
+exists, @code{ds} overwrites the previous definition.  Only the syntax
+form using brackets can take arguments that are handled identically to
+macro arguments; the single exception is that a closing bracket as an
+argument must be enclosed in double quotes.  @xref{Request and Macro
+Arguments}, and @ref{Parameters}.
+
+Example:
+
+@Example
+.ds foo a \\$1 test
+.
+This is \*[foo nice].
+    @result{} This is a nice test.
+@endExample
+
+The @code{\*} escape @dfn{interpolates} (expands in-place) a
+previously defined string variable.  To be more precise, the stored
+string is pushed onto the input stack, which is then parsed by
+@code{gtroff}.  Similar to number registers, it is possible to nest
+strings, i.e., string variables can be called within string variables.
+
+If the string named by the @code{\*} escape does not exist, it is
+defined as empty, and a warning of type @samp{mac} is emitted (see
+@ref{Debugging}, for more details).
+
+@cindex comments, with @code{ds}
+@cindex @code{ds} request, and comments
+@strong{Caution:} Unlike other requests, the second argument to the
+@code{ds} request takes up the entire line including trailing spaces.
+This means that comments on a line with such a request can introduce
+unwanted space into a string.
+
+@Example
+.ds TeX T\h'-.2m'\v'.2m'E\v'-.2m'\h'-.1m'X \" Knuth's TeX
+@endExample
+
+@noindent
+Instead the comment should be put on another line or have the comment
+escape adjacent with the end of the string.
+
+@Example
+.ds TeX T\h'-.2m'\v'.2m'E\v'-.2m'\h'-.1m'X\" Knuth's TeX
+@endExample
+
+@cindex trailing quotes
+@cindex quotes, trailing
+@cindex leading spaces with @code{ds}
+@cindex spaces with @code{ds}
+@cindex @code{ds} request, and leading spaces
+To produce leading space the string can be started with a double quote.
+No trailing quote is needed; in fact, any trailing quote is included in
+your string.
+
+@Example
+.ds sign "           Yours in a white wine sauce,
+@endExample
+
+@cindex multi-line strings
+@cindex strings, multi-line
+@cindex newline character, in strings, escaping
+@cindex escaping newline characters, in strings
+Strings are not limited to a single line of text.  A string can span
+several lines by escaping the newlines with a backslash.  The resulting
+string is stored @emph{without} the newlines.
+
+@Example
+.ds foo lots and lots \
+of text are on these \
+next several lines
+@endExample
+
+It is not possible to have real newlines in a string.  To put a single
+double quote character into a string, use two consecutive double quote
+characters.
+
+The @code{ds1} request turns off compatibility mode while interpreting a
+string.  To be more precise, a @dfn{compatibility save} input token is
+inserted at the beginning of the string, and a @dfn{compatibility
+restore} input token at the end.
+
+@Example
+.nr xxx 12345
+.ds aa The value of xxx is \\n[xxx].
+.ds1 bb The value of xxx is \\n[xxx].
+.
+.cp 1
+.
+\*(aa
+    @result{} warning: number register `[' not defined
+    @result{} The value of xxx is 0xxx].
+\*(bb
+    @result{} The value of xxx is 12345.
+@endExample
+
+@cindex name space, common, of macros, diversions, and strings
+@cindex common name space of macros, diversions, and strings
+@cindex macros, shared name space with strings and diversions
+@cindex strings, shared name space with macros and diversions
+@cindex diversions, shared name space with macros and strings
+Strings, macros, and diversions (and boxes) share the same name space.
+Internally, even the same mechanism is used to store them.  This has
+some interesting consequences.  For example, it is possible to call a
+macro with string syntax and vice versa.
+
+@Example
+.de xxx
+a funny test.
+..
+This is \*[xxx]
+    @result{} This is a funny test.
+
+.ds yyy a funny test
+This is
+.yyy
+    @result{} This is a funny test.
+@endExample
+
+In particular, interpolating a string does not hide existing macro
+arguments.  Thus in a macro, a more efficient way of doing
+
+@Example
+.xx \\$@@
+@endExample
+
+@noindent
+is
+
+@Example
+\\*[xx]\\
+@endExample
+
+@noindent
+Note that the latter calling syntax doesn't change the value of
+@code{\$0}, which is then inherited from the calling macro.
+
+Diversions and boxes can be also called with string syntax.
+
+Another consequence is that you can copy one-line diversions or boxes to
+a string.
+
+@Example
+.di xxx
+a \fItest\fR
+.br
+.di
+.ds yyy This is \*[xxx]\c
+\*[yyy].
+    @result{} @r{This is a }@i{test}.
+@endExample
+
+@noindent
+As the previous example shows, it is possible to store formatted output
+in strings.  The @code{\c} escape prevents the insertion of an
+additional blank line in the output.
+
+Copying diversions longer than a single output line produces unexpected
+results.
+
+@Example
+.di xxx
+a funny
+.br
+test
+.br
+.di
+.ds yyy This is \*[xxx]\c
+\*[yyy].
+    @result{} test This is a funny.
+@endExample
+
+Usually, it is not predictable whether a diversion contains one or more
+output lines, so this mechanism should be avoided.  With Unix
+@code{troff}, this was the only solution to strip off a final newline
+from a diversion.  Another disadvantage is that the spaces in the copied
+string are already formatted, making them unstretchable.  This can cause
+ugly results.
+
+@cindex stripping final newline in diversions
+@cindex diversion, stripping final newline
+@cindex final newline, stripping in diversions
+@cindex newline, final, stripping in diversions
+@cindex horizontal space, unformatting
+@cindex space, horizontal, unformatting
+@cindex unformatting horizontal space
+A clean solution to this problem is available in GNU @code{troff}, using
+the requests @code{chop} to remove the final newline of a diversion, and
+@code{unformat} to make the horizontal spaces stretchable again.
+
+@Example
+.box xxx
+a funny
+.br
+test
+.br
+.box
+.chop xxx
+.unformat xxx
+This is \*[xxx].
+    @result{} This is a funny test.
+@endExample
+
+@xref{Gtroff Internals}, for more information.
+@endDefreq
+
+@DefreqList {as, name [@Var{string}]}
+@DefreqListEndx {as1, name [@Var{string}]}
+@cindex appending to a string (@code{as})
+@cindex string, appending (@code{as})
+The @code{as} request is similar to @code{ds} but appends @var{string}
+to the string stored as @var{name} instead of redefining it.  If
+@var{name} doesn't exist yet, it is created.
+
+@Example
+.as sign " with shallots, onions and garlic,
+@endExample
+
+The @code{as1} request is similar to @code{as}, but compatibility mode
+is switched off while the appended string is interpreted.  To be more
+precise, a @dfn{compatibility save} input token is inserted at the
+beginning of the appended string, and a @dfn{compatibility restore}
+input token at the end.
+@endDefreq
+
+Rudimentary string manipulation routines are given with the next two
+requests.
+
+@Defreq {substring, str n1 [@Var{n2}]}
+@cindex substring (@code{substring})
+Replace the string named @var{str} with the substring defined by the
+indices @var{n1} and @var{n2}.  The first character in the string has
+index@tie{}0.  If @var{n2} is omitted, it is implicitly set to the
+largest valid value (the string length minus one).  If the index value
+@var{n1} or @var{n2} is negative, it is counted from the end of the
+string, going backwards: The last character has index@tie{}@minus{}1,
+the character before the last character has index@tie{}@minus{}2, etc.
+
+@Example
+.ds xxx abcdefgh
+.substring xxx 1 -4
+\*[xxx]
+    @result{} bcde
+.substring xxx 2
+\*[xxx]
+    @result{} de
+@endExample
+@endDefreq
+
+@Defreq {length, reg str}
+@cindex length of a string (@code{length})
+@cindex string, length of (@code{length})
+@cindex @code{length} request, and copy-in mode
+@cindex copy-in mode, and @code{length} request
+@cindex mode, copy-in, and @code{length} request
+Compute the number of characters of @var{str} and return it in the
+number register @var{reg}.  If @var{reg} doesn't exist, it is created.
+@code{str} is read in copy mode.
+
+@Example
+.ds xxx abcd\h'3i'efgh
+.length yyy \*[xxx]
+\n[yyy]
+    @result{} 14
+@endExample
+@endDefreq
+
+@Defreq {rn, xx yy}
+@cindex renaming request (@code{rn})
+@cindex request, renaming (@code{rn})
+@cindex renaming macro (@code{rn})
+@cindex macro, renaming (@code{rn})
+@cindex renaming string (@code{rn})
+@cindex string, renaming (@code{rn})
+@cindex renaming diversion (@code{rn})
+@cindex diversion, renaming (@code{rn})
+Rename the request, macro, diversion, or string @var{xx} to @var{yy}.
+@endDefreq
+
+@Defreq {rm, xx}
+@cindex removing request (@code{rm})
+@cindex request, removing (@code{rm})
+@cindex removing macro (@code{rm})
+@cindex macro, removing (@code{rm})
+@cindex removing string (@code{rm})
+@cindex string, removing (@code{rm})
+@cindex removing diversion (@code{rm})
+@cindex diversion, removing (@code{rm})
+Remove the request, macro, diversion, or string @var{xx}.  @code{gtroff}
+treats subsequent invocations as if the object had never been defined.
+@endDefreq
+
+@anchor{als}
+@Defreq {als, new old}
+@cindex alias, string, creating (@code{als})
+@cindex alias, macro, creating (@code{als})
+@cindex alias, diversion, creating (@code{als})
+@cindex creating alias, for string (@code{als})
+@cindex creating alias, for macro (@code{als})
+@cindex creating alias, for diversion (@code{als})
+@cindex string, creating alias (@code{als})
+@cindex macro, creating alias (@code{als})
+@cindex diversion, creating alias (@code{als})
+Create an alias named @var{new} for the request, string, macro, or
+diversion object named @var{old}.  The new name and the old name are
+exactly equivalent (it is similar to a hard rather than a soft link).  If
+@var{old} is undefined, @code{gtroff} generates a warning of type
+@samp{mac} and ignores the request.
+
+To understand how the @code{als} request works it is probably best to
+think of two different pools: one pool for objects (macros, strings,
+etc.), and another one for names.  As soon as an object is defined,
+@code{gtroff} adds it to the object pool, adds its name to the name
+pool, and creates a link between them.  When @code{als} creates an
+alias, it adds a new name to the name pool that gets linked to the same
+object as the old name.
+
+Now consider this example.
+
+@Example
+.de foo
+..
+.
+.als bar foo
+.
+.de bar
+.  foo
+..
+.
+.bar
+    @result{} input stack limit exceeded
+@endExample
+
+@noindent
+The definition of macro @code{bar} replaces the old object this name is
+linked to.  However, the alias to @code{foo} is still active!  In
+other words, @code{foo} is still linked to the same object as
+@code{bar}, and the result of calling @code{bar} is an infinite,
+recursive loop that finally leads to an error.
+
+@cindex alias, string, removing (@code{rm})
+@cindex alias, macro, removing (@code{rm})
+@cindex alias, diversion, removing (@code{rm})
+@cindex removing alias, for string (@code{rm})
+@cindex removing alias, for macro (@code{rm})
+@cindex removing alias, for diversion (@code{rm})
+@cindex string, removing alias (@code{rm})
+@cindex macro, removing alias (@code{rm})
+@cindex diversion, removing alias (@code{rm})
+To undo an alias, simply call @code{rm} on the aliased name.  The object
+itself is not destroyed until there are no more aliases.
+@endDefreq
+
+@Defreq {chop, xx}
+Remove (chop) the last character from the macro, string, or diversion
+named @var{xx}.  This is useful for removing the newline from the end of
+diversions that are to be interpolated as strings.  This command can be
+used repeatedly; see @ref{Gtroff Internals}, for details on nodes
+inserted additionally by @code{gtroff}.
+@endDefreq
+
+@xref{Identifiers}, and @ref{Comments}.
+
+
+@c =====================================================================
+
+@node Conditionals and Loops, Writing Macros, Strings, gtroff Reference
+@section Conditionals and Loops
+@cindex conditionals and loops
+@cindex loops and conditionals
+
+@menu
+* Operators in Conditionals::
+* if-else::
+* while::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Operators in Conditionals, if-else, Conditionals and Loops, Conditionals and Loops
+@subsection Operators in Conditionals
+
+@cindex @code{if} request, operators to use with
+@cindex @code{ie} request, operators to use with
+@cindex @code{while} request, operators to use with
+In @code{if}, @code{ie}, and @code{while} requests, in addition to ordinary
+@ref{Expressions}, there are several more operators available:
+
+@table @code
+@item e
+@itemx o
+True if the current page is even or odd numbered (respectively).
+
+@item n
+@cindex conditional output for terminal (TTY)
+@cindex TTY, conditional output for
+@cindex terminal, conditional output for
+True if the document is being processed in nroff mode (i.e., the
+@code{.nroff} command has been issued).  @xref{Troff and Nroff Mode}.
+
+@item t
+True if the document is being processed in troff mode (i.e., the
+@code{.troff} command has been issued).  @xref{Troff and Nroff Mode}.
+
+@item v
+Always false.  This condition is for compatibility with other
+@code{troff} versions only (identifying a @code{-Tversatec} device).
+
+@item '@var{xxx}'@var{yyy}'
+True if the output produced by @var{xxx} is equal to the output produced
+by @var{yyy}.  Other characters can be used in place of the single
+quotes; the same set of delimiters as for the @code{\D} escape is used
+(@pxref{Escapes}).  @code{gtroff} formats @var{xxx} and @var{yyy} in
+separate environments; after the comparison the resulting data is
+discarded.
+
+@Example
+.ie "|"\fR|\fP" \
+true
+.el \
+false
+    @result{} true
+@endExample
+
+@noindent
+The resulting motions, glyph sizes, and fonts have to
+match,@footnote{The created output nodes must be identical.
+@xref{Gtroff Internals}.} and not the individual motion, size, and font
+requests.  In the previous example, @samp{|} and @samp{\fR|\fP} both
+result in a roman @samp{|} glyph with the same point size and at the
+same location on the page, so the strings are equal.  If
+@samp{.ft@tie{}I} had been added before the @samp{.ie}, the result would
+be ``false'' because (the first) @samp{|} produces an italic @samp{|}
+rather than a roman one.
+
+@cindex string comparison
+@cindex comparison of strings
+To compare strings without processing, surround the data with @code{\?}.
+
+@Example
+.ie "\?|\?"\?\fR|\fP\?" \
+true
+.el \
+false
+    @result{} false
+@endExample
+
+@cindex @code{\?}, and copy-in mode
+@cindex copy-in mode, and @code{\?}
+@cindex mode, copy-in, and @code{\?}
+@noindent
+Since data protected with @code{\?} is read in copy-in mode it is even
+possible to use incomplete input without causing an error.
+
+@Example
+.ds a \[
+.ds b \[
+.ie '\?\*a\?'\?\*b\?' \
+true
+.el \
+false
+    @result{} true
+@endExample
+
+@item r @var{xxx}
+True if there is a number register named @var{xxx}.
+
+@item d @var{xxx}
+True if there is a string, macro, diversion, or request named @var{xxx}.
+
+@item m @var{xxx}
+True if there is a color named @var{xxx}.
+
+@item c @var{g}
+True if there is a glyph @var{g} available@footnote{The name of this
+conditional operator is a misnomer since it tests names of output
+glyphs.}; @var{g} is either an @acronym{ASCII} character or a special
+character (@code{\N'@var{xxx}'}, @code{\(@var{gg}} or
+@code{\[@var{ggg}]}); the condition is also true if @var{g} has been
+defined by the @code{char} request.
+
+@item F @var{font}
+True if a font named @var{font} exists.  @var{font} is handled as if it
+was opened with the @code{ft} request (that is, font translation and
+styles are applied), without actually mounting it.
+
+This test doesn't load the complete font but only its header to verify
+its validity.
+
+@item S @var{style}
+True if style @var{style} has been registered.  Font translation is
+applied.
+@end table
+
+Note that these operators can't be combined with other operators like
+@samp{:} or @samp{&}; only a leading @samp{!} (without whitespace
+between the exclamation mark and the operator) can be used to negate the
+result.
+
+@Example
+.nr xxx 1
+.ie !r xxx \
+true
+.el \
+false
+    @result{} false
+@endExample
+
+A whitespace after @samp{!} always evaluates to zero (this bizarre
+behaviour is due to compatibility with Unix @code{troff}).
+
+@Example
+.nr xxx 1
+.ie ! r xxx \
+true
+.el \
+false
+    @result{} r xxx true
+@endExample
+
+It is possible to omit the whitespace before the argument to the
+@samp{r}, @samp{d}, and @samp{c} operators.
+
+@xref{Expressions}.
+
+@c ---------------------------------------------------------------------
+
+@node if-else, while, Operators in Conditionals, Conditionals and Loops
+@subsection if-else
+@cindex if-else
+
+@code{gtroff} has if-then-else constructs like other languages, although
+the formatting can be painful.
+
+@Defreq {if, expr anything}
+
+Evaluate the expression @var{expr}, and executes @var{anything} (the
+remainder of the line) if @var{expr} evaluates to a value greater than
+zero (true).  @var{anything} is interpreted as though it was on a line
+by itself (except that leading spaces are swallowed).
+@xref{Operators in Conditionals}, for more info.
+
+@Example
+.nr xxx 1
+.nr yyy 2
+.if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
+    @result{} true
+@endExample
+@endDefreq
+
+@Defreq {nop, anything}
+Executes @var{anything}.  This is similar to @code{.if@tie{}1}.
+@endDefreq
+
+@DefreqList {ie, expr anything}
+@DefreqListEndx {el, anything}
+Use the @code{ie} and @code{el} requests to write an if-then-else.  The
+first request is the `if' part and the latter is the `else' part.
+
+@Example
+.ie n .ls 2 \" double-spacing in nroff
+.el   .ls 1 \" single-spacing in troff
+@endExample
+@endDefreq
+
+@c there is a bug in makeinfo <= 4.1a: you can't have `@{' as an argument
+@c to @deffn
+@c
+@c and in 4.2 you still can't use @{ in macros.
+
+@c @DefescList {\@{, , , }
+@c @DefescListEnd {\@}, , , }
+@deffn Escape @t{\@{}
+@deffnx Escape @t{\@}}
+@esindex \@{
+@esindex \@}
+@cindex begin of conditional block (@code{\@{})
+@cindex end of conditional block (@code{\@}})
+@cindex conditional block, begin (@code{\@{})
+@cindex conditional block, end (@code{\@}})
+@cindex block, conditional, begin (@code{\@{})
+@cindex block, conditional, end (@code{\@}})
+In many cases, an if (or if-else) construct needs to execute more than
+one request.  This can be done using the escapes @code{\@{} (which must
+start the first line) and @code{\@}} (which must end the last line).
+
+@Example
+.ie t \@{\
+.    ds lq ``
+.    ds rq ''
+.\@}
+.el \@{\
+.    ds lq ""
+.    ds rq ""
+.\@}
+@endExample
+@c @endDefesc
+@end deffn
+
+@xref{Expressions}.
+
+@c ---------------------------------------------------------------------
+
+@node while,  , if-else, Conditionals and Loops
+@subsection while
+@cindex while
+
+@code{gtroff} provides a looping construct using the @code{while}
+request, which is used much like the @code{if} (and related) requests.
+
+@Defreq {while, expr anything}
+Evaluate the expression @var{expr}, and repeatedly execute
+@var{anything} (the remainder of the line) until @var{expr} evaluates
+to@tie{}0.
+
+@Example
+.nr a 0 1
+.while (\na < 9) \@{\
+\n+a,
+.\@}
+\n+a
+    @result{} 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
+@endExample
+
+Some remarks.
+
+@cindex @code{de} request, and @code{while}
+@itemize @bullet
+@item
+The body of a @code{while} request is treated like the body of a
+@code{de} request: @code{gtroff} temporarily stores it in a macro that
+is deleted after the loop has been exited.  It can considerably slow
+down a macro if the body of the @code{while} request (within the macro)
+is large.  Each time the macro is executed, the @code{while} body is
+parsed and stored again as a temporary macro.
+
+@Example
+.de xxx
+.  nr num 10
+.  while (\\n[num] > 0) \@{\
+.    \" many lines of code
+.    nr num -1
+.  \@}
+..
+@endExample
+
+@cindex recursive macros
+@cindex macros, recursive
+@noindent
+The traditional and often better solution (Unix @code{troff} doesn't
+have the @code{while} request) is to use a recursive macro instead that
+is parsed only once during its definition.
+
+@Example
+.de yyy
+.  if (\\n[num] > 0) \@{\
+.    \" many lines of code
+.    nr num -1
+.    yyy
+.  \@}
+..
+.
+.de xxx
+.  nr num 10
+.  yyy
+..
+@endExample
+
+@noindent
+Note that the number of available recursion levels is set to@tie{}1000
+(this is a compile-time constant value of @code{gtroff}).
+
+@item
+The closing brace of a @code{while} body must end a line.
+
+@Example
+.if 1 \@{\
+.  nr a 0 1
+.  while (\n[a] < 10) \@{\
+.    nop \n+[a]
+.\@}\@}
+    @result{} unbalanced \@{ \@}
+@endExample
+@end itemize
+@endDefreq
+
+@Defreq {break, }
+@cindex @code{while} request, confusing with @code{br}
+@cindex @code{break} request, in a @code{while} loop
+@cindex @code{continue} request, in a @code{while} loop
+Break out of a @code{while} loop.  Be sure not to confuse this with the
+@code{br} request (causing a line break).
+@endDefreq
+
+@Defreq {continue, }
+Finish the current iteration of a @code{while} loop, immediately
+restarting the next iteration.
+@endDefreq
+
+@xref{Expressions}.
+
+
+@c =====================================================================
+
+@node Writing Macros, Page Motions, Conditionals and Loops, gtroff Reference
+@section Writing Macros
+@cindex writing macros
+@cindex macros, writing
+
+A @dfn{macro} is a collection of text and embedded commands that can be
+invoked multiple times.  Use macros to define common operations.
+@xref{Strings}, for a (limited) alternative syntax to call macros.
+
+Although the following requests can be used to create macros,
+simply using an undefined macro will cause it to be defined as empty.
+@xref{Identifiers}.
+
+@DefreqList {de, name [@Var{end}]}
+@DefreqItemx {de1, name [@Var{end}]}
+@DefreqItemx {dei, name [@Var{end}]}
+@DefreqListEndx {dei1, name [@Var{end}]}
+Define a new macro named @var{name}.  @code{gtroff} copies subsequent
+lines (starting with the next one) into an internal buffer until it
+encounters the line @samp{..} (two dots).  If the optional second
+argument to @code{de} is present it is used as the macro closure
+request instead of @samp{..}.
+
+There can be whitespace after the first dot in the line containing the
+ending token (either @samp{.} or macro @samp{@var{end}}).  Don't insert
+a tab character immediately after the @samp{..}, otherwise it isn't
+recognized as the end-of-macro symbol.@footnote{While it is possible to
+define and call a macro @samp{.} with
+
+@Example
+.de .
+.  tm foo
+..
+.
+..    \" This calls macro `.'!
+@endExample
+
+@noindent
+you can't use this as the end-of-macro macro: during a macro definition,
+@samp{..} is never handled as a call to @samp{.}, even if you say
+@samp{.de foo .} explicitly.}
+
+Here a small example macro called @samp{P} that causes a break and
+inserts some vertical space.  It could be used to separate paragraphs.
+
+@Example
+.de P
+.  br
+.  sp .8v
+..
+@endExample
+
+The following example defines a macro within another.  Remember that
+expansion must be protected twice; once for reading the macro and once
+for executing.
+
+@Example
+\# a dummy macro to avoid a warning
+.de end
+..
+.
+.de foo
+.  de bar end
+.    nop \f[B]Hello \\\\$1!\f[]
+.  end
+..
+.
+.foo
+.bar Joe
+    @result{} @b{Hello Joe!}
+@endExample
+
+@noindent
+Since @code{\f} has no expansion, it isn't necessary to protect its
+backslash.  Had we defined another macro within @code{bar} that takes a
+parameter, eight backslashes would be necessary before @samp{$1}.
+
+The @code{de1} request turns off compatibility mode while executing the
+macro.  On entry, the current compatibility mode is saved and restored
+at exit.
+
+@Example
+.nr xxx 12345
+.
+.de aa
+The value of xxx is \\n[xxx].
+..
+.de1 bb
+The value of xxx is \\n[xxx].
+..
+.
+.cp 1
+.
+.aa
+    @result{} warning: number register `[' not defined
+    @result{} The value of xxx is 0xxx].
+.bb
+    @result{} The value of xxx is 12345.
+@endExample
+
+The @code{dei} request defines a macro indirectly.  That is, it expands
+strings whose names are @var{name} or @var{end} before performing the
+append.
+
+This:
+
+@Example
+.ds xx aa
+.ds yy bb
+.dei xx yy
+@endExample
+
+@noindent
+is equivalent to:
+
+@Example
+.de aa bb
+@endExample
+
+The @code{dei1} request is similar to @code{dei} but with compatibility
+mode switched off during execution of the defined macro.
+
+If compatibility mode is on, @code{de} (and @code{dei}) behave similar
+to @code{de1} (and @code{dei1}): A `compatibility save' token is
+inserted at the beginning, and a `compatibility restore' token at the
+end, with compatibility mode switched on during execution.  @xref{Gtroff
+Internals}, for more information on switching compatibility mode on and
+off in a single document.
+
+@pindex trace.tmac
+Using @file{trace.tmac}, you can trace calls to @code{de} and
+@code{de1}.
+
+Note that macro identifiers are shared with identifiers for strings and
+diversions.
+
+@xref{als,,the description of the @code{als} request}, for possible
+pitfalls if redefining a macro that has been aliased.
+@endDefreq
+
+@DefreqList {am, name [@Var{end}]}
+@DefreqItemx {am1, name [@Var{end}]}
+@DefreqItemx {ami, name [@Var{end}]}
+@DefreqListEndx {ami1, name [@Var{end}]}
+@cindex appending to a macro (@code{am})
+@cindex macro, appending (@code{am})
+Works similarly to @code{de} except it appends onto the macro named
+@var{name}.  So, to make the previously defined @samp{P} macro actually
+do indented instead of block paragraphs, add the necessary code to the
+existing macro like this:
+
+@Example
+.am P
+.ti +5n
+..
+@endExample
+
+The @code{am1} request turns off compatibility mode while executing the
+appended macro piece.  To be more precise, a @dfn{compatibility save}
+input token is inserted at the beginning of the appended code, and a
+@dfn{compatibility restore} input token at the end.
+
+The @code{ami} request appends indirectly, meaning that @code{gtroff}
+expands strings whose names are @var{name} or @var{end} before
+performing the append.
+
+The @code{ami1} request is similar to @code{ami} but compatibility mode
+is switched off during execution of the defined macro.
+
+@pindex trace.tmac
+Using @file{trace.tmac}, you can trace calls to @code{am} and
+@code{am1}.
+@endDefreq
+
+@xref{Strings}, for the @code{als} and @code{rn} request to create an
+alias and rename a macro, respectively.
+
+The @code{de}, @code{am}, @code{di}, @code{da}, @code{ds}, and @code{as}
+requests (together with their variants) only create a new object if the
+name of the macro, diversion or string is currently undefined
+or if it is defined to be a request; normally they modify the value of
+an existing object.
+
+@Defreq {return, [@Var{anything}]}
+Exit a macro, immediately returning to the caller.
+
+If called with an argument, exit twice, namely the current macro and the
+macro one level higher.  This is used to define a wrapper macro for
+@code{return} in @file{trace.tmac}.
+@endDefreq
+
+@menu
+* Copy-in Mode::
+* Parameters::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Copy-in Mode, Parameters, Writing Macros, Writing Macros
+@subsection Copy-in Mode
+@cindex copy mode
+@cindex copy-in mode
+@cindex mode, copy
+@cindex mode, copy-in
+
+@cindex @code{\n}, when reading text for a macro
+@cindex @code{\$}, when reading text for a macro
+@cindex @code{\*}, when reading text for a macro
+@cindex @code{\\}, when reading text for a macro
+@cindex \@key{RET}, when reading text for a macro
+When @code{gtroff} reads in the text for a macro, string, or diversion,
+it copies the text (including request lines, but excluding escapes) into
+an internal buffer.
+Escapes are converted into an internal form, except for @code{\n},
+@code{\$}, @code{\*}, @code{\\} and @code{\@key{RET}}, which are evaluated
+and inserted into the text where the escape was located.
+This is known as @dfn{copy-in} mode or @dfn{copy} mode.
+
+What this means is that you can specify when these escapes are to be
+evaluated (either at copy-in time or at the time of use) by insulating
+the escapes with an extra backslash.  Compare this to the @code{\def}
+and @code{\edef} commands in @TeX{}.
+
+The following example prints the numbers 20 and@tie{}10:
+
+@Example
+.nr x 20
+.de y
+.nr x 10
+\&\nx
+\&\\nx
+..
+.y
+@endExample
+
+@c ---------------------------------------------------------------------
+
+@node Parameters,  , Copy-in Mode, Writing Macros
+@subsection Parameters
+@cindex parameters
+
+The arguments to a macro or string can be examined using a variety of
+escapes.
+
+@Defreg {.$}
+@cindex number of arguments register (@code{.$})
+The number of arguments passed to a macro or string.  This is a
+read-only number register.
+
+Note that the @code{shift} request can change its value.
+@endDefreg
+
+Any individual argument can be retrieved with one of the following
+escapes:
+
+@DefescList {\\$, , n, }
+@DefescItem {\\$, @Lparen{}, nn, }
+@DefescListEnd {\\$, @Lbrack{}, nnn, @Rbrack{}}
+@cindex copy-in mode, and macro arguments
+@cindex mode, copy-in, and macro arguments
+@cindex macro, arguments (@code{\$})
+@cindex arguments, macro (@code{\$})
+Retrieve the @var{n}@dmn{th}, @var{nn}@dmn{th} or @var{nnn}@dmn{th}
+argument.  As usual, the first form only accepts a single number (larger
+than zero), the second a two-digit number (larger or equal to@tie{}10),
+and the third any positive integer value (larger than zero).  Macros and
+strings can have an unlimited number of arguments.  Note that due to
+copy-in mode, use two backslashes on these in actual use to prevent
+interpolation until the macro is actually invoked.
+@endDefesc
+
+@Defreq {shift, [@Var{n}]}
+Shift the arguments 1@tie{}position, or as many positions as specified
+by its argument.  After executing this request, argument@tie{}@var{i}
+becomes argument @math{@var{i}-@var{n}}; arguments 1 to@tie{}@var{n} are
+no longer available.  Shifting by negative amounts is currently
+undefined.
+
+The register @code{.$} is adjusted accordingly.
+@endDefreq
+
+@DefescList {\\$*, , , }
+@DefescListEndx {\\$@@, , , }
+In some cases it is convenient to use all of the arguments at once (for
+example, to pass the arguments along to another macro).  The @code{\$*}
+escape concatenates all the arguments separated by spaces.  A similar
+escape is @code{\$@@}, which concatenates all the arguments with each
+surrounded by double quotes, and separated by spaces.  If not in
+compatibility mode, the input level of double quotes is preserved (see
+@ref{Request and Macro Arguments}).
+@endDefesc
+
+@Defesc {\\$^, , , }
+Handle the parameters of a macro as if they were an argument to the
+@code{ds} or similar requests.
+
+@Example
+.de foo
+.  tm $1=`\\$1'
+.  tm $2=`\\$2'
+.  tm $*=`\\$*'
+.  tm $@@=`\\$@@'
+.  tm $^=`\\$^'
+..
+.foo " This is a "test"
+    @result{} $1=` This is a '
+    @result{} $2=`test"'
+    @result{} $*=` This is a  test"'
+    @result{} $@@=`" This is a " "test""'
+    @result{} $^=`" This is a "test"'
+@endExample
+
+This escape is useful mainly for macro packages like @file{trace.tmac},
+which redefines some requests and macros for debugging purposes.
+@endDefesc
+
+@Defesc {\\$0, , , }
+@cindex macro name register (@code{\$0})
+@cindex @code{als} request, and @code{\$0}
+The name used to invoke the current macro.  The @code{als} request can
+make a macro have more than one name.
+
+If a macro is called as a string (within another macro), the value of
+@code{\$0} isn't changed.
+
+@Example
+.de foo
+.  tm \\$0
+..
+.als foo bar
+.
+@endExample
+@Example
+.de aaa
+.  foo
+..
+.de bbb
+.  bar
+..
+.de ccc
+\\*[foo]\\
+..
+.de ddd
+\\*[bar]\\
+..
+.
+@endExample
+@Example
+.aaa
+    @result{} foo
+.bbb
+    @result{} bar
+.ccc
+    @result{} ccc
+.ddd
+    @result{} ddd
+@endExample
+@endDefesc
+
+@xref{Request and Macro Arguments}.
+
+
+@c =====================================================================
+
+@node Page Motions, Drawing Requests, Writing Macros, gtroff Reference
+@section Page Motions
+@cindex page motions
+@cindex motions, page
+
+@xref{Manipulating Spacing}, for a discussion of the main request for
+vertical motion, @code{sp}.
+
+@DefreqList {mk, [@Var{reg}]}
+@DefreqListEndx {rt, [@Var{dist}]}
+@cindex marking vertical page location (@code{mk})
+@cindex page location, vertical, marking (@code{mk})
+@cindex location, vertical, page, marking (@code{mk})
+@cindex vertical page location, marking (@code{mk})
+@cindex returning to marked vertical page location (@code{rt})
+@cindex page location, vertical, returning to marked (@code{rt})
+@cindex location, vertical, page, returning to marked (@code{rt})
+@cindex vertical page location, returning to marked (@code{rt})
+The request @code{mk} can be used to mark a location on a page, for
+movement to later.  This request takes a register name as an argument in
+which to store the current page location.  With no argument it stores
+the location in an internal register.  The results of this can be used
+later by the @code{rt} or the @code{sp} request (or the @code{\v}
+escape).
+
+The @code{rt} request returns @emph{upwards} to the location marked with
+the last @code{mk} request.  If used with an argument, return to a
+position which distance from the top of the page is @var{dist} (no
+previous call to @code{mk} is necessary in this case).  Default scaling
+indicator is @samp{v}.
+
+If a page break occurs between a @code{mk} request and its
+matching @code{rt} request, the @code{rt} is silently ignored.
+
+Here a primitive solution for a two-column macro.
+
+@Example
+.nr column-length 1.5i
+.nr column-gap 4m
+.nr bottom-margin 1m
+.
+@endExample
+@Example
+.de 2c
+.  br
+.  mk
+.  ll \\n[column-length]u
+.  wh -\\n[bottom-margin]u 2c-trap
+.  nr right-side 0
+..
+.
+@endExample
+@Example
+.de 2c-trap
+.  ie \\n[right-side] \@{\
+.    nr right-side 0
+.    po -(\\n[column-length]u + \\n[column-gap]u)
+.    \" remove trap
+.    wh -\\n[bottom-margin]u
+.  \@}
+.  el \@{\
+.    \" switch to right side
+.    nr right-side 1
+.    po +(\\n[column-length]u + \\n[column-gap]u)
+.    rt
+.  \@}
+..
+.
+@endExample
+@Example
+.pl 1.5i
+.ll 4i
+This is a small test that shows how the
+rt request works in combination with mk.
+
+.2c
+Starting here, text is typeset in two columns.
+Note that this implementation isn't robust
+and thus not suited for a real two-column
+macro.
+@endExample
+
+Result:
+
+@Example
+This is a small test that shows how the
+rt request works in combination with mk.
+
+Starting  here,    isn't    robust
+text is typeset    and   thus  not
+in two columns.    suited  for   a
+Note that  this    real two-column
+implementation     macro.
+@endExample
+@endDefreq
+
+The following escapes give fine control of movements about the page.
+
+@Defesc {\\v, ', e, '}
+@cindex vertical motion (@code{\v})
+@cindex motion, vertical (@code{\v})
+Move vertically, usually from the current location on the page (if no
+absolute position operator @samp{|} is used).  The argument@tie{}@var{e}
+specifies the distance to move; positive is downwards and negative
+upwards.  The default scaling indicator for this escape is @samp{v}.
+Beware, however, that @code{gtroff} continues text processing at the
+point where the motion ends, so you should always balance motions to
+avoid interference with text processing.
+
+@code{\v} doesn't trigger a trap.  This can be quite useful; for
+example, consider a page bottom trap macro that prints a marker in the
+margin to indicate continuation of a footnote or something similar.
+@endDefesc
+
+There are some special-case escapes for vertical motion.
+
+@Defesc {\\r, , , }
+Move upwards@tie{}1@dmn{v}.
+@endDefesc
+
+@Defesc {\\u, , , }
+Move upwards@tie{}.5@dmn{v}.
+@endDefesc
+
+@Defesc {\\d, , , }
+Move down@tie{}.5@dmn{v}.
+@endDefesc
+
+@Defesc {\\h, ', e, '}
+@cindex inserting horizontal space (@code{\h})
+@cindex horizontal space (@code{\h})
+@cindex space, horizontal (@code{\h})
+@cindex horizontal motion (@code{\h})
+@cindex motion, horizontal (@code{\h})
+Move horizontally, usually from the current location (if no absolute
+position operator @samp{|} is used).  The expression@tie{}@var{e}
+indicates how far to move: positive is rightwards and negative
+leftwards.  The default scaling indicator for this escape is @samp{m}.
+
+This horizontal space is not discarded at the end of a line.  To insert
+discardable space of a certain length use the @code{ss} request.
+@endDefesc
+
+There are a number of special-case escapes for horizontal motion.
+
+@Defesc {\\@key{SP}, , , }
+@cindex space, unbreakable
+@cindex unbreakable space
+An unbreakable and unpaddable (i.e.@: not expanded during filling)
+space.  (Note: This is a backslash followed by a space.)
+@endDefesc
+
+@Defesc {\\~, , , }
+An unbreakable space that stretches like a normal inter-word space when
+a line is adjusted.
+@endDefesc
+
+@Defesc {\\|, , , }
+A 1/6@dmn{th} em space.  Ignored for TTY output devices (rounded to
+zero).
+
+However, if there is a glyph defined in the current font file with name
+@code{\|} (note the leading backslash), the width of this glyph is used
+instead (even for TTYs).
+@endDefesc
+
+@Defesc {\\^, , , }
+A 1/12@dmn{th} em space.  Ignored for TTY output devices (rounded to
+zero).
+
+However, if there is a glyph defined in the current font file with name
+@code{\^} (note the leading backslash), the width of this glyph is used
+instead (even for TTYs).
+@endDefesc
+
+@Defesc {\\0, , , }
+@cindex space, width of a digit (@code{\0})
+@cindex digit width space (@code{\0})
+A space the size of a digit.
+@endDefesc
+
+The following string sets the @TeX{} logo:
+
+@Example
+.ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+@endExample
+
+@DefescList {\\w, ', text, '}
+@DefregItemx {st}
+@DefregItemx {sb}
+@DefregItemx {rst}
+@DefregItemx {rsb}
+@DefregItemx {ct}
+@DefregItemx {ssc}
+@DefregListEndx {skw}
+@cindex width escape (@code{\w})
+Return the width of the specified @var{text} in basic units.  This
+allows horizontal movement based on the width of some arbitrary text
+(e.g.@: given as an argument to a macro).
+
+@Example
+The length of the string `abc' is \w'abc'u.
+    @result{} The length of the string `abc' is 72u.
+@endExample
+
+Font changes may occur in @var{text}, which don't affect current
+settings.
+
+After use, @code{\w} sets several registers:
+
+@table @code
+@item st
+@itemx sb
+The highest and lowest point of the baseline, respectively, in
+@var{text}.
+
+@item rst
+@itemx rsb
+Like the @code{st} and @code{sb} registers, but takes account of the
+heights and depths of glyphs.  In other words, this gives the highest
+and lowest point of @var{text}.  Values below the baseline are negative.
+
+@item ct
+Defines the kinds of glyphs occurring in @var{text}:
+
+@table @asis
+@item 0
+only short glyphs, no descenders or tall glyphs.
+
+@item 1
+at least one descender.
+
+@item 2
+at least one tall glyph.
+
+@item 3
+at least one each of a descender and a tall glyph.
+@end table
+
+@item ssc
+The amount of horizontal space (possibly negative) that should be added
+to the last glyph before a subscript.
+
+@item skw
+How far to right of the center of the last glyph in the @code{\w}
+argument, the center of an accent from a roman font should be placed
+over that glyph.
+@end table
+@endDefesc
+
+@DefescList {\\k, , p, }
+@DefescItem {\\k, @Lparen{}, ps, }
+@DefescListEnd {\\k, @Lbrack{}, position, @Rbrack{}}
+@cindex saving horizontal input line position (@code{\k})
+@cindex horizontal input line position, saving (@code{\k})
+@cindex input line position, horizontal, saving (@code{\k})
+@cindex position, horizontal input line, saving (@code{\k})
+@cindex line, input, horizontal position, saving (@code{\k})
+Store the current horizontal position in the @emph{input} line in number
+register with name @var{position} (one-character name@tie{}@var{p},
+two-character name @var{ps}).  Use this, for example, to return to the
+beginning of a string for highlighting or other decoration.
+@endDefesc
+
+@Defreg {hp}
+@cindex horizontal input line position register (@code{hp})
+@cindex input line, horizontal position, register (@code{hp})
+@cindex position, horizontal, in input line, register (@code{hp})
+@cindex line, input, horizontal position, register (@code{hp})
+The current horizontal position at the input line.
+@endDefreg
+
+@Defreg {.k}
+@cindex horizontal output line position register (@code{.k})
+@cindex output line, horizontal position, register (@code{.k})
+@cindex position, horizontal, in output line, register (@code{.k})
+@cindex line, output, horizontal position, register (@code{.k})
+A read-only number register containing the current horizontal output
+position (relative to the current indentation).
+@endDefreg
+
+@Defesc {\\o, ', abc, '}
+@cindex overstriking glyphs (@code{\o})
+@cindex glyphs, overstriking (@code{\o})
+Overstrike glyphs @var{a}, @var{b}, @var{c}, @dots{}; the glyphs are
+centered, and the resulting spacing is the largest width of the affected
+glyphs.
+@endDefesc
+
+@Defesc {\\z, , g, }
+@cindex zero-width printing (@code{\z}, @code{\Z})
+@cindex printing, zero-width (@code{\z}, @code{\Z})
+Print glyph @var{g} with zero width, i.e., without spacing.  Use this to
+overstrike glyphs left-aligned.
+@endDefesc
+
+@Defesc {\\Z, ', anything, '}
+@cindex zero-width printing (@code{\z}, @code{\Z})
+@cindex printing, zero-width (@code{\z}, @code{\Z})
+Print @var{anything}, then restore the horizontal and vertical position.
+The argument may not contain tabs or leaders.
+
+The following is an example of a strike-through macro:
+
+@Example
+.de ST
+.nr ww \w'\\$1'
+\Z@@\v'-.25m'\l'\\n[ww]u'@@\\$1
+..
+.
+This is
+.ST "a test"
+an actual emergency!
+@endExample
+@endDefesc
+
+
+@c =====================================================================
+
+@node Drawing Requests, Traps, Page Motions, gtroff Reference
+@section Drawing Requests
+@cindex drawing requests
+@cindex requests for drawing
+
+@code{gtroff} provides a number of ways to draw lines and other figures
+on the page.  Used in combination with the page motion commands (see
+@ref{Page Motions}, for more info), a wide variety of figures can be
+drawn.  However, for complex drawings these operations can be quite
+cumbersome, and it may be wise to use graphic preprocessors like
+@code{gpic} or @code{ggrn}.  @xref{gpic}, and @ref{ggrn}, for more
+information.
+
+All drawing is done via escapes.
+
+@DefescList {\\l, ', l, '}
+@DefescListEnd {\\l, ', lg, '}
+@cindex drawing horizontal lines (@code{\l})
+@cindex horizontal line, drawing (@code{\l})
+@cindex line, horizontal, drawing (@code{\l})
+Draw a line horizontally.  @var{l} is the length of the line to be
+drawn.  If it is positive, start the line at the current location and
+draw to the right; its end point is the new current location.  Negative
+values are handled differently: The line starts at the current location
+and draws to the left, but the current location doesn't move.
+
+@var{l} can also be specified absolutely (i.e.@: with a leading
+@samp{|}), which draws back to the beginning of the input line.  Default
+scaling indicator is @samp{m}.
+
+@cindex underscore glyph (@code{\[ru]})
+@cindex glyph, underscore (@code{\[ru]})
+@cindex line drawing glyph
+@cindex glyph, for line drawing
+The optional second parameter@tie{}@var{g} is a glyph to draw the line
+with.  If this second argument is not specified, @code{gtroff} uses the
+underscore glyph, @code{\[ru]}.
+
+@cindex zero width space character (@code{\&})
+@cindex character, zero width space (@code{\&})
+@cindex space character, zero width (@code{\&})
+To separate the two arguments (to prevent @code{gtroff} from
+interpreting a drawing glyph as a scaling indicator if the glyph is
+represented by a single character) use @code{\&}.
+
+Here a small useful example:
+
+@Example
+.de box
+\[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
+..
+@endExample
+
+@noindent
+Note that this works by outputting a box rule (a vertical line), then
+the text given as an argument and then another box rule.  Finally, the
+line drawing escapes both draw from the current location to the
+beginning of the @emph{input} line -- this works because the line length
+is negative, not moving the current point.
+@endDefesc
+
+@DefescList {\\L, ', l, '}
+@DefescListEnd {\\L, ', lg, '}
+@cindex drawing vertical lines (@code{\L})
+@cindex vertical line drawing (@code{\L})
+@cindex line, vertical, drawing (@code{\L})
+@cindex line drawing glyph
+@cindex glyph for line drawing
+@cindex box rule glyph (@code{\[br]})
+@cindex glyph, box rule (@code{\[br]})
+Draw vertical lines.  Its parameters are similar to the @code{\l}
+escape, except that the default scaling indicator is @samp{v}.  The
+movement is downwards for positive values, and upwards for negative
+values.  The default glyph is the box rule glyph, @code{\[br]}.  As with
+the vertical motion escapes, text processing blindly continues where the
+line ends.
+
+@Example
+This is a \L'3v'test.
+@endExample
+
+@noindent
+Here is the result, produced with @code{grotty}.
+
+@Example
+This is a
+          |
+          |
+          |test.
+@endExample
+@endDefesc
+
+@Defesc {\\D, ', command arg @dots{}, '}
+The @code{\D} escape provides a variety of drawing functions.  Note that
+on character devices, only vertical and horizontal lines are supported
+within @code{grotty}; other devices may only support a subset of the
+available drawing functions.
+
+The default scaling indicator for all subcommands of @code{\D} is
+@samp{m} for horizontal distances and @samp{v} for vertical ones.
+Exceptions are @w{@code{\D'f @dots{}'}} and @w{@code{\D't @dots{}'}},
+which use @code{u} as the default, and @w{@code{\D'F@var{x} @dots{}'}},
+which arguments are treated similar to the @code{defcolor} request.
+
+@table @code
+@item \D'l @var{dx} @var{dy}'
+@cindex line, drawing (@w{@code{\D'l @dots{}'}})
+@cindex drawing a line (@w{@code{\D'l @dots{}'}})
+Draw a line from the current location to the relative point specified by
+(@var{dx},@var{dy}), where positive values mean right and down,
+respectively.  The end point of the line is the new current location.
+
+The following example is a macro for creating a box around a text
+string; for simplicity, the box margin is taken as a fixed value,
+0.2@dmn{m}.
+
+@Example
+.de BOX
+.  nr @@wd \w'\\$1'
+\h'.2m'\
+\h'-.2m'\v'(.2m - \\n[rsb]u)'\
+\D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
+\D'l (\\n[@@wd]u + .4m) 0'\
+\D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
+\D'l -(\\n[@@wd]u + .4m) 0'\
+\h'.2m'\v'-(.2m - \\n[rsb]u)'\
+\\$1\
+\h'.2m'
+..
+@endExample
+
+@noindent
+First, the width of the string is stored in register @code{@@wd}.  Then,
+four lines are drawn to form a box, properly offset by the box margin.
+The registers @code{rst} and @code{rsb} are set by the @code{\w} escape,
+containing the largest height and depth of the whole string.
+
+@item \D'c @var{d}'
+@cindex circle, drawing (@w{@code{\D'c @dots{}'}})
+@cindex drawing a circle (@w{@code{\D'c @dots{}'}})
+Draw a circle with a diameter of@tie{}@var{d} with the leftmost point at
+the current position.  After drawing, the current location is positioned
+at the rightmost point of the circle.
+
+@item \D'C @var{d}'
+@cindex circle, solid, drawing (@w{@code{\D'C @dots{}'}})
+@cindex drawing a solid circle (@w{@code{\D'C @dots{}'}})
+@cindex solid circle, drawing (@w{@code{\D'C @dots{}'}})
+Draw a solid circle with the same parameters and behaviour as an
+outlined circle.  No outline is drawn.
+
+@item \D'e @var{x} @var{y}'
+@cindex drawing an ellipse (@w{@code{\D'e @dots{}'}})
+@cindex ellipse, drawing (@w{@code{\D'e @dots{}'}})
+Draw an ellipse with a horizontal diameter of @var{x} and a vertical
+diameter of @var{y} with the leftmost point at the current position.
+After drawing, the current location is positioned at the rightmost point
+of the ellipse.
+
+@item \D'E @var{x} @var{y}'
+@cindex ellipse, solid, drawing (@w{@code{\D'E @dots{}'}})
+@cindex drawing a solid ellipse (@w{@code{\D'E @dots{}'}})
+@cindex solid ellipse, drawing (@w{@code{\D'E @dots{}'}})
+Draw a solid ellipse with the same parameters and behaviour as an
+outlined ellipse.  No outline is drawn.
+
+@item \D'a @var{dx1} @var{dy1} @var{dx2} @var{dy2}'
+@cindex arc, drawing (@w{@code{\D'a @dots{}'}})
+@cindex drawing an arc (@w{@code{\D'a @dots{}'}})
+Draw an arc clockwise from the current location through the two
+specified relative locations (@var{dx1},@var{dy1}) and
+(@var{dx2},@var{dy2}).  The coordinates of the first point are relative
+to the current position, and the coordinates of the second point are
+relative to the first point.  After drawing, the current position is
+moved to the final point of the arc.
+
+@item \D'~ @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
+@cindex drawing a spline (@w{@code{\D'~ @dots{}'}})
+@cindex spline, drawing (@w{@code{\D'~ @dots{}'}})
+Draw a spline from the current location to the relative point
+(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}), and so on.  The
+current position is moved to the terminal point of the drawn curve.
+
+@item \D'f @var{n}'
+@cindex gray shading (@w{@code{\D'f @dots{}'}})
+@cindex shading filled objects (@w{@code{\D'f @dots{}'}})
+Set the shade of gray to be used for filling solid objects
+to@tie{}@var{n}; @var{n}@tie{}must be an integer between 0
+and@tie{}1000, where 0 corresponds solid white and 1000 to solid black,
+and values in between correspond to intermediate shades of gray.  This
+applies only to solid circles, solid ellipses, and solid polygons.  By
+default, a level of 1000 is used.
+
+Despite of being silly, the current point is moved horizontally to the
+right by@tie{}@var{n}.
+
+@cindex @w{@code{\D'f @dots{}'}} and horizontal resolution
+Don't use this command!  It has the serious drawback that it is always
+rounded to the next integer multiple of the horizontal resolution (the
+value of the @code{hor} keyword in the @file{DESC} file).  Use @code{\M}
+(@pxref{Colors}) or @w{@code{\D'Fg @dots{}'}} instead.
+
+@item \D'p @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
+@cindex drawing a polygon (@w{@code{\D'p @dots{}'}})
+@cindex polygon, drawing (@w{@code{\D'p @dots{}'}})
+Draw a polygon from the current location to the relative position
+(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}) and so on.  When
+the specified data points are exhausted, a line is drawn back to the
+starting point.  The current position is changed by adding the sum of
+all arguments with odd index to the actual horizontal position and the
+even ones to the vertical position.
+
+@item \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
+@cindex polygon, solid, drawing (@w{@code{\D'P @dots{}'}})
+@cindex drawing a solid polygon (@w{@code{\D'P @dots{}'}})
+@cindex solid polygon, drawing (@w{@code{\D'P @dots{}'}})
+Draw a solid polygon with the same parameters and behaviour as an
+outlined polygon.  No outline is drawn.
+
+Here a better variant of the box macro to fill the box with some color.
+Note that the box must be drawn before the text since colors in
+@code{gtroff} are not transparent; the filled polygon would hide the
+text completely.
+
+@Example
+.de BOX
+.  nr @@wd \w'\\$1'
+\h'.2m'\
+\h'-.2m'\v'(.2m - \\n[rsb]u)'\
+\M[lightcyan]\
+\D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
+     (\\n[@@wd]u + .4m) 0 \
+     0 (\\n[rst]u - \\n[rsb]u + .4m) \
+     -(\\n[@@wd]u + .4m) 0'\
+\h'.2m'\v'-(.2m - \\n[rsb]u)'\
+\M[]\
+\\$1\
+\h'.2m'
+..
+@endExample
+
+If you want a filled polygon that has exactly the same size as an
+unfilled one, you must draw both an unfilled and a filled polygon.  A
+filled polygon is always smaller than an unfilled one because the latter
+uses straight lines with a given line thickness to connect the polygon's
+corners, while the former simply fills the area defined by the
+coordinates.
+
+@Example
+\h'1i'\v'1i'\
+\# increase line thickness
+\Z'\D't 5p''\
+\# draw unfilled polygon
+\Z'\D'p 3 3 -6 0''\
+\# draw filled polygon
+\Z'\D'P 3 3 -6 0''
+@endExample
+
+@item \D't @var{n}'
+@cindex line thickness (@w{@code{\D't @dots{}'}})
+@cindex thickness of lines (@w{@code{\D't @dots{}'}})
+Set the current line thickness to @var{n}@tie{}machine units.  A value
+of zero selects the smallest available line thickness.  A negative value
+makes the line thickness proportional to the current point size (this is
+the default behaviour of @acronym{AT&T} @code{troff}).
+
+Despite of being silly, the current point is moved horizontally to the
+right by@tie{}@var{n}.
+
+@item \D'F@var{scheme} @var{color_components}'
+@cindex unnamed fill colors (@code{\D'F@dots{}'})
+@cindex fill colors, unnamed (@code{\D'F@dots{}'})
+@cindex colors, fill, unnamed (@code{\D'F@dots{}'})
+Change current fill color.  @var{scheme} is a single letter denoting the
+color scheme: @samp{r} (rgb), @samp{c} (cmy), @samp{k} (cmyk), @samp{g}
+(gray), or @samp{d} (default color).  The color components use exactly
+the same syntax as in the @code{defcolor} request (@pxref{Colors}); the
+command @code{\D'Fd'} doesn't take an argument.
+
+@emph{No} position changing!
+
+Examples:
+
+@Example
+\D'Fg .3'      \" same gray as \D'f 700'
+\D'Fr #0000ff' \" blue
+@endExample
+@end table
+@endDefesc
+
+@xref{Graphics Commands}.
+
+@Defesc {\\b, ', string, '}
+@cindex pile, glyph (@code{\b})
+@cindex glyph pile (@code{\b})
+@cindex stacking glyphs (@code{\b})
+@dfn{Pile} a sequence of glyphs vertically, and center it vertically on
+the current line.  Use it to build large brackets and braces.
+
+Here an example how to create a large opening brace:
+
+@Example
+\b'\[lt]\[bv]\[lk]\[bv]\[lb]'
+@endExample
+
+@cindex @code{\b}, limitations
+@cindex limitations of @code{\b} escape
+The first glyph is on the top, the last glyph in @var{string} is at the
+bottom.  Note that @code{gtroff} separates the glyphs vertically by
+1@dmn{m}, and the whole object is centered 0.5@dmn{m} above the current
+baseline; the largest glyph width is used as the width for the whole
+object.  This rather unflexible positioning algorithm doesn't work with
+@option{-Tdvi} since the bracket pieces vary in height for this device.
+Instead, use the @code{eqn} preprocessor.
+
+@xref{Manipulating Spacing}, how to adjust the vertical spacing with the
+@code{\x} escape.
+@endDefesc
+
+
+@c =====================================================================
+
+@node Traps, Diversions, Drawing Requests, gtroff Reference
+@section Traps
+@cindex traps
+
+@dfn{Traps} are locations that, when reached, call a specified macro.
+These traps can occur at a given location on the page, at a given
+location in the current diversion, at a blank line, after a certain
+number of input lines, or at the end of input.
+
+@cindex planting a trap
+@cindex trap, planting
+Setting a trap is also called @dfn{planting}.
+@cindex trap, springing
+@cindex springing a trap
+It is also said that a trap is @dfn{sprung} if the associated macro is
+executed.
+
+@menu
+* Page Location Traps::
+* Diversion Traps::
+* Input Line Traps::
+* Blank Line Traps::
+* Leading Spaces Traps::
+* End-of-input Traps::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Page Location Traps, Diversion Traps, Traps, Traps
+@subsection Page Location Traps
+@cindex page location traps
+@cindex traps, page location
+
+@dfn{Page location traps} perform an action when @code{gtroff} reaches
+or passes a certain vertical location on the page.  Page location traps
+have a variety of purposes, including:
+
+@itemize
+@item
+setting headers and footers
+
+@item
+setting body text in multiple columns
+
+@item
+setting footnotes
+@end itemize
+
+@DefreqList {vpt, flag}
+@DefregListEndx {.vpt}
+@cindex enabling vertical position traps (@code{vpt})
+@cindex vertical position traps, enabling (@code{vpt})
+@cindex vertical position trap enable register (@code{.vpt})
+Enable vertical position traps if @var{flag} is non-zero, or disables
+them otherwise.  Vertical position traps are traps set by the @code{wh}
+or @code{dt} requests.  Traps set by the @code{it} request are not
+vertical position traps.  The parameter that controls whether vertical
+position traps are enabled is global.  Initially vertical position traps
+are enabled.  The current setting of this is available in the
+@code{.vpt} read-only number register.
+
+Note that a page can't be ejected if @code{vpt} is set to zero.
+@endDefreq
+
+@Defreq {wh, dist [@Var{macro}]}
+Set a page location trap.  Non-negative values for @var{dist} set the
+trap relative to the top of the page; negative values set the trap
+relative to the bottom of the page.  Default scaling indicator is
+@samp{v}; values of @var{dist} are always rounded to be multiples of the
+vertical resolution (as given in register @code{.V}).
+
+@var{macro} is the name of the macro to execute when the trap is sprung.
+If @var{macro} is missing, remove the first trap (if any) at @var{dist}.
+
+@cindex page headers
+@cindex page footers
+@cindex headers
+@cindex footers
+The following is a simple example of how many macro packages set headers
+and footers.
+
+@Example
+.de hd                \" Page header
+'  sp .5i
+.  tl 'Title''date'
+'  sp .3i
+..
+.
+.de fo                \" Page footer
+'  sp 1v
+.  tl ''%''
+'  bp
+..
+.
+.wh 0   hd            \" trap at top of the page
+.wh -1i fo            \" trap one inch from bottom
+@endExample
+
+A trap at or below the bottom of the page is ignored; it can be made
+active by either moving it up or increasing the page length so that the
+trap is on the page.
+
+Negative trap values always use the @emph{current} page length; they are
+not converted to an absolute vertical position:
+
+@Example
+.pl 5i
+.wh -1i xx
+.ptr
+    @result{} xx      -240
+.pl 100i
+.ptr
+    @result{} xx      -240
+@endExample
+
+It is possible to have more than one trap at the same location; to do
+so, the traps must be defined at different locations, then moved
+together with the @code{ch} request; otherwise the second trap would
+replace the first one.  Earlier defined traps hide later defined traps
+if moved to the same position (the many empty lines caused by the
+@code{bp} request are omitted in the following example):
+
+@Example
+.de a
+.  nop a
+..
+.de b
+.  nop b
+..
+.de c
+.  nop c
+..
+.
+.wh 1i a
+.wh 2i b
+.wh 3i c
+.bp
+    @result{} a b c
+@endExample
+@Example
+.ch b 1i
+.ch c 1i
+.bp
+    @result{} a
+@endExample
+@Example
+.ch a 0.5i
+.bp
+    @result{} a b
+@endExample
+@endDefreq
+
+@Defreg {.t}
+@cindex distance to next trap register (@code{.t})
+@cindex trap, distance, register (@code{.t})
+A read-only number register holding the distance to the next trap.
+
+If there are no traps between the current position and the bottom of the
+page, it contains the distance to the page bottom.  In a diversion, the
+distance to the page bottom is infinite (the returned value is the
+biggest integer that can be represented in @code{groff}) if there are
+no diversion traps.
+@endDefreg
+
+@Defreq {ch, macro [@Var{dist}]}
+@cindex changing trap location (@code{ch})
+@cindex trap, changing location (@code{ch})
+Change the location of a trap.  The first argument is the name of the
+macro to be invoked at the trap, and the second argument is the new
+location for the trap (note that the parameters are specified in
+opposite order as in the @code{wh} request).  This is useful for
+building up footnotes in a diversion to allow more space at the bottom
+of the page for them.
+
+Default scaling indicator for @var{dist} is @samp{v}.  If @var{dist} is
+missing, the trap is removed.
+
+@c XXX
+
+@ignore
+@Example
+... (simplified) footnote example ...
+@endExample
+@end ignore
+@endDefreq
+
+@Defreg {.ne}
+The read-only number register @code{.ne} contains the amount of space
+that was needed in the last @code{ne} request that caused a trap to be
+sprung.  Useful in conjunction with the @code{.trunc} register.
+@xref{Page Control}, for more information.
+
+Since the @code{.ne} register is only set by traps it doesn't make much
+sense to use it outside of trap macros.
+@endDefreg
+
+@Defreg {.trunc}
+@cindex @code{ne} request, and the @code{.trunc} register
+@cindex truncated vertical space register (@code{.trunc})
+A read-only register containing the amount of vertical space truncated
+from an @code{sp} request by the most recently sprung vertical
+position trap, or, if the trap was sprung by an @code{ne} request,
+minus the amount of vertical motion produced by the @code{ne}
+request.  In other words, at the point a trap is sprung, it
+represents the difference of what the vertical position would have
+been but for the trap, and what the vertical position actually is.
+
+Since the @code{.trunc} register is only set by traps it doesn't make
+much sense to use it outside of trap macros.
+@endDefreg
+
+@Defreg {.pe}
+@cindex @code{bp} request, and traps (@code{.pe})
+@cindex traps, sprung by @code{bp} request (@code{.pe})
+@cindex page ejecting register (@code{.pe})
+A read-only register that is set to@tie{}1 while a page is ejected with
+the @code{bp} request (or by the end of input).
+
+Outside of traps this register is always zero.  In the following
+example, only the second call to@tie{}@code{x} is caused by @code{bp}.
+
+@Example
+.de x
+\&.pe=\\n[.pe]
+.br
+..
+.wh 1v x
+.wh 4v x
+A line.
+.br
+Another line.
+.br
+    @result{} A line.
+       .pe=0
+       Another line.
+
+       .pe=1
+@endExample
+@endDefreg
+
+@cindex diversions, and traps
+@cindex traps, and diversions
+An important fact to consider while designing macros is that diversions
+and traps do not interact normally.  For example, if a trap invokes a
+header macro (while outputting a diversion) that tries to change the
+font on the current page, the effect is not visible before the diversion
+has completely been printed (except for input protected with @code{\!}
+or @code{\?}) since the data in the diversion is already formatted.  In
+most cases, this is not the expected behaviour.
+
+@c ---------------------------------------------------------------------
+
+@node Diversion Traps, Input Line Traps, Page Location Traps, Traps
+@subsection Diversion Traps
+@cindex diversion traps
+@cindex traps, diversion
+
+@Defreq {dt, [@Var{dist} @Var{macro}]}
+@cindex @code{.t} register, and diversions
+@cindex setting diversion trap (@code{dt})
+@cindex diversion trap, setting (@code{dt})
+@cindex trap, diversion, setting (@code{dt})
+Set a trap @emph{within} a diversion.  @var{dist} is the location of the
+trap (identical to the @code{wh} request; default scaling indicator is
+@samp{v}) and @var{macro} is the name of the macro to be invoked.  If
+called without arguments, the diversion trap is removed.
+
+Note that there exists only a single diversion trap.
+
+The number register @code{.t} still works within diversions.
+@xref{Diversions}, for more information.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Input Line Traps, Blank Line Traps, Diversion Traps, Traps
+@subsection Input Line Traps
+@cindex input line traps
+@cindex traps, input line
+
+@DefreqList {it, n macro}
+@DefreqListEndx {itc, n macro}
+@cindex setting input line trap (@code{it})
+@cindex input line trap, setting (@code{it})
+@cindex trap, input line, setting (@code{it})
+Set an input line trap.  @var{n}@tie{}is the number of lines of input
+that may be read before springing the trap, @var{macro} is the macro to
+be invoked.  Request lines are not counted as input lines.
+
+For example, one possible use is to have a macro that prints the next
+@var{n}@tie{}lines in a bold font.
+
+@Example
+.de B
+.  it \\$1 B-end
+.  ft B
+..
+.
+.de B-end
+.  ft R
+..
+@endExample
+
+@cindex input line traps and interrupted lines (@code{itc})
+@cindex interrupted lines and input line traps (@code{itc})
+@cindex traps, input line, and interrupted lines (@code{itc})
+@cindex lines, interrupted, and input line traps (@code{itc})
+The @code{itc} request is identical except that an interrupted text line
+(ending with @code{\c}) is not counted as a separate line.
+
+Both requests are associated with the current environment
+(@pxref{Environments}); switching to another environment disables the
+current input trap, and going back reactivates it, restoring the number
+of already processed lines.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Blank Line Traps, Leading Spaces Traps, Input Line Traps, Traps
+@subsection Blank Line Traps
+@cindex blank line traps
+@cindex traps, blank line
+
+@Defreq {blm, macro}
+@cindex blank line macro (@code{blm})
+Set a blank line trap.  @code{gtroff} executes @var{macro} when it
+encounters a blank line in the input file.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node Leading Spaces Traps, End-of-input Traps, Blank Line Traps, Traps
+@subsection Leading Spaces Traps
+@cindex leading spaces traps
+@cindex traps, leading spaces
+
+@DefreqList {lsm, macro}
+@DefregItemx {lsn}
+@DefregListEndx {lss}
+@cindex leading spaces macro (@code{lsm})
+Set a leading spaces trap.  @code{gtroff} executes @var{macro} when it
+encounters leading spaces in an input line; the implicit line break
+that normally happens in this case is suppressed.  A line consisting
+of spaces only, however, is treated as an empty line, possibly subject
+to an empty line macro set with the @code{blm} request.
+
+Leading spaces are removed from the input line before calling the
+leading spaces macro.  The number of removed spaces is stored in
+register @code{lsn}; the horizontal space that would be emitted if
+there was no leading space macro is stored in register @code{lss}.
+Note that @code{lsn} and @code{lss} are available even if no leading
+space macro has been set.
+
+The first thing a leading space macro sees is a token.  However, some
+escapes like @code{\f} or @code{\m} are handled on the fly (see
+@ref{Gtroff Internals}, for a complete list) without creating a token
+at all.  Consider that a line starts with two spaces followed by
+@code{\fIfoo}.  While skipping the spaces @code{\fI} is handled too so
+that groff's current font is properly set to @samp{I}, but the leading
+space macro only sees @code{foo}, without the preceding @code{\fI}.
+If the macro should see the font escape you have to `protect' it with
+something that creates a token, for example with @code{\&\fIfoo}.
+@endDefreq
+
+@c ---------------------------------------------------------------------
+
+@node End-of-input Traps,  , Leading Spaces Traps, Traps
+@subsection End-of-input Traps
+@cindex end-of-input traps
+@cindex traps, end-of-input
+
+@Defreq {em, macro}
+@cindex setting end-of-input trap (@code{em})
+@cindex end-of-input trap, setting (@code{em})
+@cindex trap, end-of-input, setting (@code{em})
+@cindex end-of-input macro (@code{em})
+@cindex macro, end-of-input (@code{em})
+Set a trap at the end of input.  @var{macro} is executed after the last
+line of the input file has been processed.
+
+For example, if the document had to have a section at the bottom of the
+last page for someone to approve it, the @code{em} request could be
+used.
+
+@Example
+.de approval
+\c
+.  ne 3v
+.  sp (\\n[.t]u - 3v)
+.  in +4i
+.  lc _
+.  br
+Approved:\t\a
+.  sp
+Date:\t\t\a
+..
+.
+.em approval
+@endExample
+
+The @code{\c} in the above example needs explanation.  For historical
+reasons (and for compatibility with @acronym{AT&T} @code{troff}), the
+end macro exits as soon as it causes a page break and no remaining
+data is in the partially collected line.
+
+Let us assume that there is no @code{\c} in the above @code{approval}
+macro, and that the page is full and has been ended with, say, a
+@code{br} request.  The @code{ne} request now causes the start of a new
+page, which in turn makes @code{troff} exit immediately for the reasons
+just described.  In most situations this is not intended.
+
+To always force processing the whole end macro independently of this
+behaviour it is thus advisable to insert something that starts an
+empty partially filled line (@code{\c}) whenever there is a chance that
+a page break can happen.  In the above example, the call of the
+@code{ne} request assures that the remaining code stays on the same
+page, so we have to insert @code{\c} only once.
+
+The next example shows how to append three lines, then starting a new
+page unconditionally.  Since @w{@samp{.ne 1}} doesn't give the desired
+effect -- there is always one line available or we are already at the
+beginning of the next page -- we temporarily increase the page length
+by one line so that we can use @w{@samp{.ne 2}}.
+
+@Example
+.de EM
+.pl +1v
+\c
+.ne 2
+line one
+.br
+\c
+.ne 2
+line two
+.br
+\c
+.ne 2
+line three
+.br
+.pl -1v
+\c
+'bp
+..
+.em EM
+@endExample
+
+Note that this specific feature affects only the first potential page
+break caused by the end macro; further page breaks emitted by the end
+macro are handled normally.
+
+Another possible use of the @code{em} request is to make @code{gtroff}
+emit a single large page instead of multiple pages.  For example, one
+may want to produce a long plain-text file for reading on-screen.  The
+idea is to set the page length at the beginning of the document to a
+very large value to hold all the text, and automatically adjust it to
+the exact height of the document after the text has been output.
+
+@Example
+.de adjust-page-length
+.  br
+.  pl \\n[nl]u \" \n[nl] holds the current vert. position
+..
+.
+.de single-page-mode
+.  pl 99999
+.  em adjust-page-length
+..
+.
+.\" activate the above code
+.single-page-mode
+@endExample
+
+Since only one end-of-input trap does exist and other macro packages
+may already use it, care must be taken not to break the mechanism.  A
+simple solution would be to append the above macro to the macro
+package's end-of-input macro using the @code{.am} request.
+@endDefreq
+
+
+@c =====================================================================
+
+@node Diversions, Environments, Traps, gtroff Reference
+@section Diversions
+@cindex diversions
+
+In @code{gtroff} it is possible to @dfn{divert} text into a named
+storage area.  Due to the similarity to defining macros it is sometimes
+said to be stored in a macro.  This is used for saving text for output
+at a later time, which is useful for keeping blocks of text on the same
+page, footnotes, tables of contents, and indices.
+
+@cindex top-level diversion
+@cindex diversion, top-level
+For orthogonality it is said that @code{gtroff} is in the @dfn{top-level
+diversion} if no diversion is active (i.e., the data is diverted to the
+output device).
+
+Although the following requests can be used to create diversions,
+simply using an undefined diversion will cause it to be defined as empty.
+@xref{Identifiers}.
+
+@DefreqList {di, macro}
+@DefreqListEndx {da, macro}
+@cindex beginning diversion (@code{di})
+@cindex diversion, beginning (@code{di})
+@cindex ending diversion (@code{di})
+@cindex diversion, ending (@code{di})
+@cindex appending to a diversion (@code{da})
+@cindex diversion, appending (@code{da})
+Begin a diversion.  Like the @code{de} request, it takes an argument of
+a macro name to divert subsequent text into.  The @code{da} macro
+appends to an existing diversion.
+
+@code{di} or @code{da} without an argument ends the diversion.
+
+The current partially filled line is included into the diversion.  See
+the @code{box} request below for an example.  Note that switching to
+another (empty) environment (with the @code{ev} request) avoids the
+inclusion of the current partially filled line.
+@endDefreq
+
+@DefreqList {box, macro}
+@DefreqListEndx {boxa, macro}
+Begin (or append to) a diversion like the @code{di} and @code{da}
+requests.  The difference is that @code{box} and @code{boxa} do not
+include a partially filled line in the diversion.
+
+Compare this:
+
+@Example
+Before the box.
+.box xxx
+In the box.
+.br
+.box
+After the box.
+.br
+    @result{} Before the box.  After the box.
+.xxx
+    @result{} In the box.
+@endExample
+
+@noindent
+with this:
+
+@Example
+Before the diversion.
+.di yyy
+In the diversion.
+.br
+.di
+After the diversion.
+.br
+    @result{} After the diversion.
+.yyy
+    @result{} Before the diversion.  In the diversion.
+@endExample
+
+@code{box} or @code{boxa} without an argument ends the diversion.
+@endDefreq
+
+@DefregList {.z}
+@DefregListEndx {.d}
+@cindex @code{nl} register, and @code{.d}
+@cindex nested diversions
+@cindex diversion, nested
+@cindex diversion name register (@code{.z})
+@cindex vertical position in diversion register (@code{.d})
+@cindex position, vertical, in diversion, register (@code{.d})
+@cindex diversion, vertical position in, register (@code{.d})
+Diversions may be nested.  The read-only number register @code{.z}
+contains the name of the current diversion (this is a string-valued
+register).  The read-only number register @code{.d} contains the current
+vertical place in the diversion.  If not in a diversion it is the same
+as register @code{nl}.
+@endDefreg
+
+@Defreg {.h}
+@cindex high-water mark register (@code{.h})
+@cindex mark, high-water, register (@code{.h})
+@cindex position of lowest text line (@code{.h})
+@cindex text line, position of lowest (@code{.h})
+The @dfn{high-water mark} on the current page or in the current
+diversion.  It corresponds to the text baseline of the lowest line
+on the page.  This is a read-only register.
+
+@Example
+.tm .h==\n[.h], nl==\n[nl]
+    @result{} .h==0, nl==-1
+This is a test.
+.br
+.sp 2
+.tm .h==\n[.h], nl==\n[nl]
+    @result{} .h==40, nl==120
+@endExample
+
+@cindex @code{.h} register, difference to @code{nl}
+@cindex @code{nl} register, difference to @code{.h}
+@noindent
+As can be seen in the previous example, empty lines are not considered
+in the return value of the @code{.h} register.
+@endDefreg
+
+@DefregList {dn}
+@DefregListEndx {dl}
+@cindex @code{dn} register, and @code{da} (@code{boxa})
+@cindex @code{dl} register, and @code{da} (@code{boxa})
+@cindex @code{da} request, and @code{dn} (@code{dl})
+@cindex @code{boxa} request, and @code{dn} (@code{dl})
+After completing a diversion, the read-write number registers @code{dn}
+and @code{dl} contain the vertical and horizontal size of the diversion.
+Note that only the just processed lines are counted: For the computation
+of @code{dn} and @code{dl}, the requests @code{da} and @code{boxa} are
+handled as if @code{di} and @code{box} had been used -- lines that have
+been already stored in a macro are not taken into account.
+
+@Example
+.\" Center text both horizontally & vertically
+.
+.\" Enclose macro definitions in .eo and .ec
+.\" to avoid the doubling of the backslash
+.eo
+.\" macro .(c starts centering mode
+.de (c
+.  br
+.  ev (c
+.  evc 0
+.  in 0
+.  nf
+.  di @@c
+..
+@endExample
+@Example
+.\" macro .)c terminates centering mode
+.de )c
+.  br
+.  ev
+.  di
+.  nr @@s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
+.  sp \n[@@s]u
+.  ce 1000
+.  @@c
+.  ce 0
+.  sp \n[@@s]u
+.  br
+.  fi
+.  rr @@s
+.  rm @@c
+..
+.\" End of macro definitions, restore escape mechanism
+.ec
+@endExample
+@endDefreg
+
+@DefescList {\\!, , , }
+@DefescListEndx {\\?, , anything, \\?}
+@cindex transparent output (@code{\!}, @code{\?})
+@cindex output, transparent (@code{\!}, @code{\?})
+Prevent requests, macros, and escapes from being interpreted when read
+into a diversion.  Both escapes take the given text and
+@dfn{transparently} embed it into the diversion.  This is useful for
+macros that shouldn't be invoked until the diverted text is actually
+output.
+
+The @code{\!} escape transparently embeds text up to and including the
+end of the line.  The @code{\?} escape transparently embeds text until
+the next occurrence of the @code{\?} escape.  Example:
+
+@Example
+\?@var{anything}\?
+@endExample
+
+@cindex @code{\?}, and copy-in mode
+@cindex copy-in mode, and @code{\?}
+@cindex mode, copy-in, and @code{\?}
+@cindex @code{\!}, and copy-in mode
+@cindex copy-in mode, and @code{\!}
+@cindex mode, copy-in, and @code{\!}
+@noindent
+@var{anything} may not contain newlines; use @code{\!}  to embed
+newlines in a diversion.  The escape sequence @code{\?} is also
+recognized in copy mode and turned into a single internal code; it is
+this code that terminates @var{anything}.  Thus the following example
+prints@tie{}4.
+
+@Example
+.nr x 1
+.nf
+.di d
+\?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
+.di
+.nr x 2
+.di e
+.d
+.di
+.nr x 3
+.di f
+.e
+.di
+.nr x 4
+.f
+@endExample
+
+Both escapes read the data in copy mode.
+
+@cindex @code{\!}, in top-level diversion
+@cindex top-level diversion, and @code{\!}
+@cindex diversion, top-level, and @code{\!}
+If @code{\!} is used in the top-level diversion, its argument is
+directly embedded into the @code{gtroff} intermediate output.  This can
+be used for example to control a postprocessor that processes the data
+before it is sent to the device driver.
+
+@cindex @code{\?}, in top-level diversion
+@cindex top-level diversion, and @code{\?}
+@cindex diversion, top-level, and @code{\?}
+The @code{\?} escape used in the top-level diversion produces no output
+at all; its argument is simply ignored.
+@endDefesc
+
+@cindex @code{\!}, and @code{output} request
+@cindex @code{output} request, and @code{\!}
+@cindex @code{output} request, and copy-in mode
+@cindex copy-in mode, and @code{output} request
+@cindex mode, copy-in, and @code{output} request
+@Defreq {output, string}
+Emit @var{string} directly to the @code{gtroff} intermediate output
+(subject to copy mode interpretation); this is similar to @code{\!} used
+at the top level.  An initial double quote in @var{string} is stripped
+off to allow initial blanks.
+
+This request can't be used before the first page has started -- if you
+get an error, simply insert @code{.br} before the @code{output} request.
+
+Without argument, @code{output} is ignored.
+
+Use with caution!  It is normally only needed for mark-up used by a
+postprocessor that does something with the output before sending it to
+the output device, filtering out @var{string} again.
+@endDefreq
+
+@Defreq {asciify, div}
+@cindex unformatting diversions (@code{asciify})
+@cindex diversion, unformatting (@code{asciify})
+@cindex @code{trin} request, and @code{asciify}
+@dfn{Unformat} the diversion specified by @var{div} in such a way that
+@acronym{ASCII} characters, characters translated with the @code{trin}
+request, space characters, and some escape sequences that were formatted
+and diverted are treated like ordinary input characters when the
+diversion is reread.  It can be also used for gross hacks; for example,
+the following sets register@tie{}@code{n} to@tie{}1.
+
+@Example
+.tr @@.
+.di x
+@@nr n 1
+.br
+.di
+.tr @@@@
+.asciify x
+.x
+@endExample
+
+Note that @code{asciify} cannot return all items in a diversion back
+to their source equivalent, nodes such as @code{\N[...]} will still
+remain as nodes, so the result cannot be guaranteed to be a pure string.
+
+@xref{Copy-in Mode}.
+@endDefreq
+
+@Defreq {unformat, div}
+Like @code{asciify}, unformat the specified diversion.  However,
+@code{unformat} only unformats spaces and tabs between words.
+Unformatted tabs are treated as input tokens, and spaces are stretchable
+again.
+
+The vertical size of lines is not preserved; glyph information (font,
+font size, space width, etc.)@: is retained.
+@endDefreq
+
+
+@c =====================================================================
+
+@node Environments, Suppressing output, Diversions, gtroff Reference
+@section Environments
+@cindex environments
+
+It happens frequently that some text should be printed in a certain
+format regardless of what may be in effect at the time, for example, in
+a trap invoked macro to print headers and footers.  To solve this
+@code{gtroff} processes text in @dfn{environments}.  An environment
+contains most of the parameters that control text processing.  It is
+possible to switch amongst these environments; by default @code{gtroff}
+processes text in environment@tie{}0.  The following is the information
+kept in an environment.
+
+@itemize @bullet
+@item
+font parameters (size, family, style, glyph height and slant, space and
+sentence space size)
+
+@item
+page parameters (line length, title length, vertical spacing, line
+spacing, indentation, line numbering, centering, right-justifying,
+underlining, hyphenation data)
+
+@item
+fill and adjust mode
+
+@item
+tab stops, tab and leader characters, escape character, no-break and
+hyphen indicators, margin character data
+
+@item
+partially collected lines
+
+@item
+input traps
+
+@item
+drawing and fill colours
+@end itemize
+
+These environments may be given arbitrary names (see @ref{Identifiers},
+for more info).  Old versions of @code{troff} only had environments
+named @samp{0}, @samp{1}, and @samp{2}.
+
+@DefreqList {ev, [@Var{env}]}
+@DefregListEndx {.ev}
+@cindex switching environments (@code{ev})
+@cindex environment, switching (@code{ev})
+@cindex environment number/name register (@code{.ev})
+Switch to another environment.  The argument @var{env} is the name of
+the environment to switch to.  With no argument, @code{gtroff} switches
+back to the previous environment.  There is no limit on the number of
+named environments; they are created the first time that they are
+referenced.  The @code{.ev} read-only register contains the name or
+number of the current environment.  This is a string-valued register.
+
+Note that a call to @code{ev} (with argument) pushes the previously
+active environment onto a stack.  If, say, environments @samp{foo},
+@samp{bar}, and @samp{zap} are called (in that order), the first
+@code{ev} request without parameter switches back to environment
+@samp{bar} (which is popped off the stack), and a second call switches
+back to environment @samp{foo}.
+
+Here is an example:
+
+@Example
+.ev footnote-env
+.fam N
+.ps 6
+.vs 8
+.ll -.5i
+.ev
+
+...
+
+.ev footnote-env
+\(dg Note the large, friendly letters.
+.ev
+@endExample
+@endDefreq
+
+@Defreq {evc, env}
+@cindex copying environment (@code{evc})
+@cindex environment, copying (@code{evc})
+Copy the environment @var{env} into the current environment.
+
+The following environment data is not copied:
+
+@itemize @bullet
+@item
+Partially filled lines.
+
+@item
+The status whether the previous line was interrupted.
+
+@item
+The number of lines still to center, or to right-justify, or to
+underline (with or without underlined spaces); they are set to zero.
+
+@item
+The status whether a temporary indentation is active.
+
+@item
+Input traps and its associated data.
+
+@item
+Line numbering mode is disabled; it can be reactivated with @w{@samp{.nm
++0}}.
+
+@item
+The number of consecutive hyphenated lines (set to zero).
+@end itemize
+@endDefreq
+
+@DefregList {.w}
+@DefregItemx {.cht}
+@DefregItemx {.cdp}
+@DefregListEndx {.csk}
+@cindex environment, dimensions of last glyph (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
+@cindex width, of last glyph (@code{.w})
+@cindex height, of last glyph (@code{.cht})
+@cindex depth, of last glyph (@code{.cdp})
+@cindex skew, of last glyph (@code{.csk})
+@cindex last glyph, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
+@cindex glyph, last, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
+The @code{\n[.w]} register contains the width of the last glyph added to
+the current environment.
+
+The @code{\n[.cht]} register contains the height of the last glyph added
+to the current environment.
+
+The @code{\n[.cdp]} register contains the depth of the last glyph added
+to the current environment.  It is positive for glyphs extending below
+the baseline.
+
+The @code{\n[.csk]} register contains the @dfn{skew} (how far to the
+right of the glyph's center that @code{gtroff} should place an accent)
+of the last glyph added to the current environment.
+@endDefreg
+
+@Defreg {.n}
+@cindex environment, previous line length (@code{.n})
+@cindex line length, previous (@code{.n})
+@cindex length of previous line (@code{.n})
+@cindex previous line length (@code{.n})
+The @code{\n[.n]} register contains the length of the previous output
+line in the current environment.
+@endDefreg
+
+
+@c =====================================================================
+
+@node Suppressing output, Colors, Environments, gtroff Reference
+@section Suppressing output
+
+@Defesc {\\O, , num, }
+@cindex suppressing output (@code{\O})
+@cindex output, suppressing (@code{\O})
+Disable or enable output depending on the value of @var{num}:
+
+@table @samp
+@item \O0
+Disable any glyphs from being emitted to the device driver, provided
+that the escape occurs at the outer level (see @code{\O[3]} and
+@code{\O[4]}).  Motion is not suppressed so effectively @code{\O[0]}
+means @emph{pen up}.
+
+@item \O1
+Enable output of glyphs, provided that the escape occurs at the outer
+level.
+@end table
+
+@vindex opminx
+@vindex opminy
+@vindex opmaxx
+@vindex opmaxy
+@code{\O0} and @code{\O1} also reset the four registers @samp{opminx},
+@samp{opminy}, @samp{opmaxx}, and @samp{opmaxy} to @minus{}1.
+@xref{Register Index}.  These four registers mark the top left and
+bottom right hand corners of a box that encompasses all written glyphs.
+
+For example the input text:
+
+@Example
+Hello \O[0]world \O[1]this is a test.
+@endExample
+
+@noindent
+produces the following output:
+
+@Example
+Hello       this is a test.
+@endExample
+
+@table @samp
+@item \O2
+Provided that the escape occurs at the outer level, enable output of
+glyphs and also write out to @code{stderr} the page number and four
+registers encompassing the glyphs previously written since the last call
+to @code{\O}.
+
+@item \O3
+Begin a nesting level.  At start-up, @code{gtroff} is at outer level.
+The current level is contained within the read-only register @code{.O}.
+@xref{Built-in Registers}.
+
+@item \O4
+End a nesting level.  The current level is contained within the
+read-only register @code{.O}.  @xref{Built-in Registers}.
+
+@item \O[5@var{P}@var{filename}]
+This escape is @code{grohtml} specific.  Provided that this escape
+occurs at the outer nesting level write the @code{filename} to
+@code{stderr}.  The position of the image, @var{P}, must be specified
+and must be one of @code{l}, @code{r}, @code{c}, or@tie{}@code{i} (left,
+right, centered, inline).  @var{filename} is associated with the
+production of the next inline image.
+@end table
+@endDefesc
+
+
+@c =====================================================================
+
+@node Colors, I/O, Suppressing output, gtroff Reference
+@section Colors
+@cindex colors
+
+@DefreqList {color, [@Var{n}]}
+@DefregListEndx {.color}
+If @var{n} is missing or non-zero, activate colors (this is the
+default); otherwise, turn it off.
+
+The read-only number register @code{.color} is@tie{}1 if colors are
+active, 0@tie{}otherwise.
+
+Internally, @code{color} sets a global flag; it does not produce a
+token.  Similar to the @code{cp} request, you should use it at the
+beginning of your document to control color output.
+
+Colors can be also turned off with the @option{-c} command-line option.
+@endDefreq
+
+@Defreq {defcolor, ident scheme color_components}
+Define color with name @var{ident}.  @var{scheme} can be one of the
+following values: @code{rgb} (three components), @code{cmy} (three
+components), @code{cmyk} (four components), and @code{gray} or
+@code{grey} (one component).
+
+@cindex default color
+@cindex color, default
+Color components can be given either as a hexadecimal string or as
+positive decimal integers in the range 0--65535.  A hexadecimal string
+contains all color components concatenated.  It must start with either
+@code{#} or @code{##}; the former specifies hex values in the range
+0--255 (which are internally multiplied by@tie{}257), the latter in the
+range 0--65535.  Examples: @code{#FFC0CB} (pink), @code{##ffff0000ffff}
+(magenta).  The default color name @c{default} can't be redefined; its
+value is device-specific (usually black).  It is possible that the
+default color for @code{\m} and @code{\M} is not identical.
+
+@cindex @code{f} unit, and colors
+@cindex unit, @code{f}, and colors
+A new scaling indicator@tie{}@code{f} has been introduced, which
+multiplies its value by 65536; this makes it convenient to specify color
+components as fractions in the range 0 to@tie{}1 (1f equals 65536u).
+Example:
+
+@Example
+.defcolor darkgreen rgb 0.1f 0.5f 0.2f
+@endExample
+
+Note that @code{f} is the default scaling indicator for the
+@code{defcolor} request, thus the above statement is equivalent to
+
+@Example
+.defcolor darkgreen rgb 0.1 0.5 0.2
+@endExample
+@endDefreq
+
+@DefreqList {gcolor, [@Var{color}]}
+@DefescItemx {\\m, , c, }
+@DefescItem {\\m, @Lparen{}, co, }
+@DefescItem {\\m, @Lbrack{}, color, @Rbrack{}}
+@DefregListEndx {.m}
+Set (glyph) drawing color.  The following examples show how to turn the
+next four words red.
+
+@Example
+.gcolor red
+these are in red
+.gcolor
+and these words are in black.
+@endExample
+
+@Example
+\m[red]these are in red\m[] and these words are in black.
+@endExample
+
+The escape @code{\m[]} returns to the previous color, as does a call to
+@code{gcolor} without an argument.
+
+@cindex drawing color name register (@code{.m})
+@cindex name, drawing color, register (@code{.m})
+@cindex color name, drawing, register (@code{.m})
+The name of the current drawing color is available in the read-only,
+string-valued number register @samp{.m}.
+
+The drawing color is associated with the current environment
+(@pxref{Environments}).
+
+Note that @code{\m} doesn't produce an input token in @code{gtroff}.  As
+a consequence, it can be used in requests like @code{mc} (which expects
+a single character as an argument) to change the color on the fly:
+
+@Example
+.mc \m[red]x\m[]
+@endExample
+@endDefesc
+
+@DefreqList {fcolor, [@Var{color}]}
+@DefescItemx {\\M, , c, }
+@DefescItem {\\M, @Lparen{}, co, }
+@DefescItem {\\M, @Lbrack{}, color, @Rbrack{}}
+@DefregListEndx {.M}
+Set fill (background) color for filled objects drawn with the
+@code{\D'@dots{}'} commands.
+
+A red ellipse can be created with the following code:
+
+@Example
+\M[red]\h'0.5i'\D'E 2i 1i'\M[]
+@endExample
+
+The escape @code{\M[]} returns to the previous fill color, as does a
+call to @code{fcolor} without an argument.
+
+@cindex background color name register (@code{.M})
+@cindex name, background color, register (@code{.M})
+@cindex color name, background, register (@code{.M})
+@cindex fill color name register (@code{.M})
+@cindex name, fill color, register (@code{.M})
+@cindex color name, fill, register (@code{.M})
+The name of the current fill (background) color is available in the
+read-only, string-valued number register @samp{.M}.
+
+The fill color is associated with the current environment
+(@pxref{Environments}).
+
+Note that @code{\M} doesn't produce an input token in @code{gtroff}.
+@endDefesc
+
+
+@c =====================================================================
+
+@node I/O, Postprocessor Access, Colors, gtroff Reference
+@section I/O
+@cindex i/o
+@cindex input and output requests
+@cindex requests for input and output
+@cindex output and input requests
+
+@code{gtroff} has several requests for including files:
+
+@Defreq {so, file}
+@cindex including a file (@code{so})
+@cindex file, inclusion (@code{so})
+Read in the specified @var{file} and includes it in place of the
+@code{so} request.  This is quite useful for large documents, e.g.@:
+keeping each chapter in a separate file.  @xref{gsoelim}, for more
+information.
+
+Since @code{gtroff} replaces the @code{so} request with the contents of
+@code{file}, it makes a difference whether the data is terminated with a
+newline or not: Assuming that file @file{xxx} contains the word
+@samp{foo} without a final newline, this
+
+@Example
+This is
+.so xxx
+bar
+@endExample
+
+@noindent
+yields @samp{This is foobar}.
+
+The search path for @var{file} can be controlled with the @option{-I}
+command-line option.
+@endDefreq
+
+@Defreq {pso, command}
+Read the standard output from the specified @var{command} and includes
+it in place of the @code{pso} request.
+
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+This request causes an error if used in safer mode (which is the
+default).  Use @code{groff}'s or @code{troff}'s @option{-U} option to
+activate unsafe mode.
+
+The comment regarding a final newline for the @code{so} request is valid
+for @code{pso} also.
+@endDefreq
+
+@Defreq {mso, file}
+Identical to the @code{so} request except that @code{gtroff} searches
+for the specified @var{file} in the same directories as macro files for
+the @option{-m} command-line option.
+If the file name to be included has the form @file{@var{name}.tmac} and it
+isn't found, @code{mso} tries to include @file{tmac.@var{name}} and vice
+versa.
+If the file does not exist, a warning of type @samp{file} is emitted.
+@xref{Debugging}, for information about warnings.
+@endDefreq
+
+@DefreqList {trf, file}
+@DefreqListEndx {cf, file}
+@cindex transparent output (@code{cf}, @code{trf})
+@cindex output, transparent (@code{cf}, @code{trf})
+@cindex @code{cf} request, and copy-in mode
+@cindex copy-in mode, and @code{cf} request
+@cindex mode, copy-in, and @code{cf} request
+@cindex @code{trf} request, and copy-in mode
+@cindex copy-in mode, and @code{trf} request
+@cindex mode, copy-in, and @code{trf} request
+Transparently output the contents of @var{file}.  Each line is output as
+if it were preceded by @code{\!}; however, the lines are @emph{not}
+subject to copy mode interpretation.  If the file does not end with a
+newline, then a newline is added (@code{trf} only).  For example, to
+define a macro@tie{}@code{x} containing the contents of
+file@tie{}@file{f}, use
+
+@Example
+.ev 1
+.di x
+.trf f
+.di
+.ev
+@endExample
+
+@noindent
+The calls to @code{ev} prevent that the current partial input line
+becomes part of the diversion.
+
+Both @code{trf} and @code{cf}, when used in a diversion, embeds an
+object in the diversion which, when reread, causes the contents of
+@var{file} to be transparently copied through to the output.  In
+Unix @code{troff}, the contents of @var{file} is immediately copied
+through to the output regardless of whether there is a current
+diversion; this behaviour is so anomalous that it must be considered a
+bug.
+
+@cindex @code{trf} request, and invalid characters
+@cindex characters, invalid for @code{trf} request
+@cindex invalid characters for @code{trf} request
+
+While @code{cf} copies the contents of @var{file} completely
+unprocessed, @code{trf} disallows characters such as NUL that are not
+valid @code{gtroff} input characters (@pxref{Identifiers}).
+
+For @code{cf}, within a diversion, `completely unprocessed' means that
+each line of a file to be inserted is handled as if it were preceded by
+@code{\!\\!}.
+
+Both requests cause a line break.
+@endDefreq
+
+@Defreq {nx, [@Var{file}]}
+@cindex processing next file (@code{nx})
+@cindex file, processing next (@code{nx})
+@cindex next file, processing (@code{nx})
+Force @code{gtroff} to continue processing of the file specified as an
+argument.  If no argument is given, immediately jump to the end of file.
+@endDefreq
+
+@Defreq {rd, [@Var{prompt} [@Var{arg1} @Var{arg2} @dots{}]]}
+@cindex reading from standard input (@code{rd})
+@cindex standard input, reading from (@code{rd})
+@cindex input, standard, reading from (@code{rd})
+Read from standard input, and include what is read as though it were
+part of the input file.  Text is read until a blank line is encountered.
+
+If standard input is a TTY input device (keyboard), write @var{prompt}
+to standard error, followed by a colon (or send BEL for a beep if no
+argument is given).
+
+Arguments after @var{prompt} are available for the input.  For example,
+the line
+
+@Example
+.rd data foo bar
+@endExample
+
+with the input @w{@samp{This is \$2.}} prints
+
+@Example
+This is bar.
+@endExample
+@endDefreq
+
+@cindex form letters
+@cindex letters, form
+Using the @code{nx} and @code{rd} requests, it is easy to set up form
+letters.  The form letter template is constructed like this, putting the
+following lines into a file called @file{repeat.let}:
+
+@Example
+.ce
+\*(td
+.sp 2
+.nf
+.rd
+.sp
+.rd
+.fi
+Body of letter.
+.bp
+.nx repeat.let
+@endExample
+
+@cindex @code{ex} request, used with @code{nx} and @code{rd}
+@noindent
+When this is run, a file containing the following lines should be
+redirected in.  Note that requests included in this file are executed as
+though they were part of the form letter.  The last block of input is
+the @code{ex} request, which tells @code{groff} to stop processing.  If
+this was not there, @code{groff} would not know when to stop.
+
+@Example
+Trent A. Fisher
+708 NW 19th Av., #202
+Portland, OR  97209
+
+Dear Trent,
+
+Len Adollar
+4315 Sierra Vista
+San Diego, CA  92103
+
+Dear Mr. Adollar,
+
+.ex
+@endExample
+
+@Defreq {pi, pipe}
+Pipe the output of @code{gtroff} to the shell command(s) specified by
+@var{pipe}.  This request must occur before @code{gtroff} has a chance
+to print anything.
+
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+@code{pi} causes an error if used in safer mode (which is the default).
+Use @code{groff}'s or @code{troff}'s @option{-U} option to activate
+unsafe mode.
+
+Multiple calls to @code{pi} are allowed, acting as a chain.  For
+example,
+
+@Example
+.pi foo
+.pi bar
+...
+@endExample
+
+is the same as @w{@samp{.pi foo | bar}}.
+
+@cindex @code{groff}, and @code{pi} request
+@cindex @code{pi} request, and @code{groff}
+Note that the intermediate output format of @code{gtroff} is piped to
+the specified commands.  Consequently, calling @code{groff} without the
+@option{-Z} option normally causes a fatal error.
+@endDefreq
+
+@DefreqList {sy, cmds}
+@DefregListEndx {systat}
+Execute the shell command(s) specified by @var{cmds}.  The output is not
+saved anyplace, so it is up to the user to do so.
+
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+This request causes an error if used in safer mode (which is the
+default).  Use @code{groff}'s or @code{troff}'s @option{-U} option to
+activate unsafe mode.
+
+For example, the following code fragment introduces the current time
+into a document:
+
+@cindex time, current
+@cindex current time
+@pindex perl
+@Example
+.sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
+             (localtime(time))[2,1,0]' > /tmp/x\n[$$]
+.so /tmp/x\n[$$]
+.sy rm /tmp/x\n[$$]
+\nH:\nM:\nS
+@endExample
+
+@noindent
+Note that this works by having the @code{perl} script (run by @code{sy})
+print out the @code{nr} requests that set the number registers
+@code{H}, @code{M}, and @code{S}, and then reads those commands in with
+the @code{so} request.
+
+For most practical purposes, the number registers @code{seconds},
+@code{minutes}, and @code{hours}, which are initialized at start-up of
+@code{gtroff}, should be sufficient.  Use the @code{af} request to get a
+formatted output:
+
+@Example
+.af hours 00
+.af minutes 00
+.af seconds 00
+\n[hours]:\n[minutes]:\n[seconds]
+@endExample
+
+@cindex @code{system()} return value register (@code{systat})
+The @code{systat} read-write number register contains the return value
+of the @code{system()} function executed by the last @code{sy} request.
+@endDefreq
+
+@DefreqList {open, stream file}
+@DefreqListEndx {opena, stream file}
+@cindex opening file (@code{open})
+@cindex file, opening (@code{open})
+@cindex appending to a file (@code{opena})
+@cindex file, appending to (@code{opena})
+Open the specified @var{file} for writing and associates the specified
+@var{stream} with it.
+
+The @code{opena} request is like @code{open}, but if the file exists,
+append to it instead of truncating it.
+
+@cindex safer mode
+@cindex mode, safer
+@cindex unsafe mode
+@cindex mode, unsafe
+Both @code{open} and @code{opena} cause an error if used in safer mode
+(which is the default).  Use @code{groff}'s or @code{troff}'s
+@option{-U} option to activate unsafe mode.
+@endDefreq
+
+@DefreqList {write, stream data}
+@DefreqListEndx {writec, stream data}
+@cindex copy-in mode, and @code{write} request
+@cindex @code{write} request, and copy-in mode
+@cindex mode, copy-in, and @code{write} request
+@cindex copy-in mode, and @code{writec} request
+@cindex @code{writec} request, and copy-in mode
+@cindex mode, copy-in, and @code{writec} request
+@cindex writing to file (@code{write}, @code{writec})
+@cindex file, writing to (@code{write}, @code{writec})
+Write to the file associated with the specified @var{stream}.  The
+stream must previously have been the subject of an open request.  The
+remainder of the line is interpreted as the @code{ds} request reads its
+second argument: A leading @samp{"} is stripped, and it is read in
+copy-in mode.
+
+The @code{writec} request is like @code{write}, but only @code{write}
+appends a newline to the data.
+@endDefreq
+
+@Defreq {writem, stream xx}
+@cindex @code{asciify} request, and @code{writem}
+Write the contents of the macro or string @var{xx} to the file
+associated with the specified @var{stream}.
+
+@cindex @code{writem} request, and copy-in mode
+@cindex copy-in mode, and @code{writem} request
+@cindex mode, copy-in, and @code{writem} request
+@var{xx} is read in copy mode, i.e., already formatted elements are
+ignored.  Consequently, diversions must be unformatted with the
+@code{asciify} request before calling @code{writem}.  Usually, this
+means a loss of information.
+@endDefreq
+
+@Defreq {close, stream}
+@cindex closing file (@code{close})
+@cindex file, closing (@code{close})
+Close the specified @var{stream}; the stream is no longer an acceptable
+argument to the @code{write} request.
+
+Here a simple macro to write an index entry.
+
+@Example
+.open idx test.idx
+.
+.de IX
+.  write idx \\n[%] \\$*
+..
+.
+.IX test entry
+.
+.close idx
+@endExample
+@endDefreq
+
+@DefescList {\\V, , e, }
+@DefescItem {\\V, @Lparen{}, ev, }
+@DefescListEnd {\\V, @Lbrack{}, env, @Rbrack{}}
+@cindex @code{\V}, and copy-in mode
+@cindex copy-in mode, and @code{\V}
+@cindex mode, copy-in, and @code{\V}
+Interpolate the contents of the specified environment variable @var{env}
+(one-character name@tie{}@var{e}, two-character name @var{ev}) as
+returned by the function @code{getenv}.  @code{\V} is interpreted in
+copy-in mode.
+@endDefesc
+
+
+@c =====================================================================
+
+@node Postprocessor Access, Miscellaneous, I/O, gtroff Reference
+@section Postprocessor Access
+@cindex postprocessor access
+@cindex access of postprocessor
+
+There are two escapes that give information directly to the
+postprocessor.  This is particularly useful for embedding
+@sc{PostScript} into the final document.
+
+@DefreqList {device, xxx}
+@DefescListEndx {\\X, ', xxx, '}
+Embeds its argument into the @code{gtroff} output preceded with
+@w{@samp{x X}}.
+
+@cindex @code{\&}, in @code{\X}
+@cindex @code{\)}, in @code{\X}
+@cindex @code{\%}, in @code{\X}
+@ifnotinfo
+@cindex @code{\:}, in @code{\X}
+@end ifnotinfo
+@ifinfo
+@cindex @code{\@r{<colon>}}, in @code{\X}
+@end ifinfo
+The escapes @code{\&}, @code{\)}, @code{\%}, and @code{\:} are ignored
+within @code{\X}, @w{@samp{\ }} and @code{\~} are converted to single
+space characters.  All other escapes (except @code{\\}, which produces a
+backslash) cause an error.
+
+@cindex @code{device} request, and copy-in mode
+@cindex copy-in mode, and @code{device} request
+@cindex mode, copy-in, and @code{device} request
+Contrary to @code{\X}, the @code{device} request simply processes its
+argument in copy mode (@pxref{Copy-in Mode}).
+
+@kindex use_charnames_in_special
+@pindex DESC@r{, and @code{use_charnames_in_special}}
+@cindex @code{\X}, and special characters
+If the @samp{use_charnames_in_special} keyword is set in the @file{DESC}
+file, special characters no longer cause an error; they are simply
+output verbatim.  Additionally, the backslash is represented as
+@code{\\}.
+
+@samp{use_charnames_in_special} is currently used by @code{grohtml}
+only.
+@endDefesc
+
+@DefreqList {devicem, xx}
+@DefescItemx {\\Y, , n, }
+@DefescItem {\\Y, @Lparen{}, nm, }
+@DefescListEnd {\\Y, @Lbrack{}, name, @Rbrack{}}
+This is approximately equivalent to @samp{\X'\*[@var{name}]'}
+(one-character name@tie{}@var{n}, two-character name @var{nm}).
+However, the contents of the string or macro @var{name} are not
+interpreted; also it is permitted for @var{name} to have been defined as
+a macro and thus contain newlines (it is not permitted for the argument
+to @code{\X} to contain newlines).  The inclusion of newlines requires
+an extension to the Unix @code{troff} output format, and confuses
+drivers that do not know about this extension (@pxref{Device Control
+Commands}).
+@endDefesc
+
+@xref{Output Devices}.
+
+
+@c =====================================================================
+
+@node Miscellaneous, Gtroff Internals, Postprocessor Access, gtroff Reference
+@section Miscellaneous
+
+This section documents parts of @code{gtroff} that cannot (yet) be
+categorized elsewhere in this manual.
+
+@Defreq {nm, [@Var{start} [@Var{inc} [@Var{space} [@Var{indent}]]]]}
+@cindex printing line numbers (@code{nm})
+@cindex line numbers, printing (@code{nm})
+@cindex numbers, line, printing (@code{nm})
+Print line numbers.  @var{start} is the line number of the @emph{next}
+output line.  @var{inc} indicates which line numbers are printed.  For
+example, the value@tie{}5 means to emit only line numbers that are
+multiples of@tie{}5; this defaults to@tie{}1.  @var{space} is the space
+to be left between the number and the text; this defaults to one digit
+space.  The fourth argument is the indentation of the line numbers,
+defaulting to zero.  Both @var{space} and @var{indent} are given as
+multiples of digit spaces; they can be negative also.  Without any
+arguments, line numbers are turned off.
+
+@code{gtroff} reserves three digit spaces for the line number (which is
+printed right-justified) plus the amount given by @var{indent}; the
+output lines are concatenated to the line numbers, separated by
+@var{space}, and @emph{without} reducing the line length.  Depending on
+the value of the horizontal page offset (as set with the @code{po}
+request), line numbers that are longer than the reserved space stick
+out to the left, or the whole line is moved to the right.
+
+Parameters corresponding to missing arguments are not changed; any
+non-digit argument (to be more precise, any argument starting with a
+character valid as a delimiter for identifiers) is also treated as
+missing.
+
+If line numbering has been disabled with a call to @code{nm} without an
+argument, it can be reactivated with @samp{.nm +0}, using the previously
+active line numbering parameters.
+
+The parameters of @code{nm} are associated with the current environment
+(@pxref{Environments}).  The current output line number is available in
+the number register @code{ln}.
+
+@Example
+.po 1m
+.ll 2i
+This test shows how line numbering works with groff.
+.nm 999
+This test shows how line numbering works with groff.
+.br
+.nm xxx 3 2
+.ll -\w'0'u
+This test shows how line numbering works with groff.
+.nn 2
+This test shows how line numbering works with groff.
+@endExample
+
+@noindent
+And here the result:
+
+@Example
+ This  test shows how
+ line numbering works
+ 999 with   groff.   This
+1000 test shows how  line
+1001 numbering works with
+1002 groff.
+      This test shows how
+      line      numbering
+ works  with  groff.
+ This test shows how
+1005  line      numbering
+      works with groff.
+@endExample
+@endDefreq
+
+@Defreq {nn, [@Var{skip}]}
+Temporarily turn off line numbering.  The argument is the number of
+lines not to be numbered; this defaults to@tie{}1.
+@endDefreq
+
+@Defreq {mc, glyph [@Var{dist}]}
+@cindex margin glyph (@code{mc})
+@cindex glyph, for margins (@code{mc})
+Print a @dfn{margin character} to the right of the
+text.@footnote{@dfn{Margin character} is a misnomer since it is an
+output glyph.}  The first argument is the glyph to be printed.  The
+second argument is the distance away from the right margin.  If missing,
+the previously set value is used; default is 10@dmn{pt}).  For text
+lines that are too long (that is, longer than the text length plus
+@var{dist}), the margin character is directly appended to the lines.
+
+With no arguments the margin character is turned off.  If this occurs
+before a break, no margin character is printed.
+
+For compatibility with @acronym{AT&T} @code{troff}, a call to @code{mc}
+to set the margin character can't be undone immediately; at least one
+line gets a margin character.  Thus
+
+@Example
+.ll 1i
+.mc \[br]
+.mc
+xxx
+.br
+xxx
+@endExample
+
+@noindent
+produces
+
+@Example
+xxx        |
+xxx
+@endExample
+
+@cindex @code{tl} request, and @code{mc}
+For empty lines and lines produced by the @code{tl} request no margin
+character is emitted.
+
+The margin character is associated with the current environment
+(@pxref{Environments}).
+
+@pindex nrchbar
+@pindex changebar
+This is quite useful for indicating text that has changed, and, in fact,
+there are programs available for doing this (they are called
+@code{nrchbar} and @code{changebar} and can be found in any
+@samp{comp.sources.unix} archive).
+
+@Example
+.ll 3i
+.mc |
+This paragraph is highlighted with a margin
+character.
+.sp
+Note that vertical space isn't marked.
+.br
+\&
+.br
+But we can fake it with `\&'.
+@endExample
+
+Result:
+
+@Example
+This  paragraph is highlighted |
+with a margin character.       |
+
+Note that vertical space isn't |
+marked.                        |
+                               |
+But we can fake it with `\&'.  |
+@endExample
+@endDefreq
+
+@DefreqList {psbb, filename}
+@DefregItemx {llx}
+@DefregItemx {lly}
+@DefregItemx {urx}
+@DefregListEndx {ury}
+@cindex PostScript, bounding box
+@cindex bounding box
+Retrieve the bounding box of the @sc{PostScript} image found in
+@var{filename}.  The file must conform to Adobe's @dfn{Document
+Structuring Conventions} (DSC); the command searches for a
+@code{%%BoundingBox} comment and extracts the bounding box values into
+the number registers @code{llx}, @code{lly}, @code{urx}, and @code{ury}.
+If an error occurs (for example, @code{psbb} cannot find the
+@code{%%BoundingBox} comment), it sets the four number registers to
+zero.
+
+The search path for @var{filename} can be controlled with the
+@option{-I} command-line option.
+@endDefreq
+
+
+@c =====================================================================
+
+@node Gtroff Internals, Debugging, Miscellaneous, gtroff Reference
+@section @code{gtroff} Internals
+
+@cindex input token
+@cindex token, input
+@cindex output node
+@cindex node, output
+@code{gtroff} processes input in three steps.  One or more input
+characters are converted to an @dfn{input token}.@footnote{Except the
+escapes @code{\f}, @code{\F}, @code{\H}, @code{\m}, @code{\M},
+@code{\R}, @code{\s}, and @code{\S}, which are processed immediately if
+not in copy-in mode.}  Then, one or more input tokens are converted to
+an @dfn{output node}.  Finally, output nodes are converted to the
+intermediate output language understood by all output devices.
+
+Actually, before step one happens, @code{gtroff} converts certain escape
+sequences into reserved input characters (not accessible by the user);
+such reserved characters are used for other internal processing also --
+this is the very reason why not all characters are valid input.
+@xref{Identifiers}, for more on this topic.
+
+For example, the input string @samp{fi\[:u]} is converted into a
+character token @samp{f}, a character token @samp{i}, and a special
+token @samp{:u} (representing u@tie{}umlaut).  Later on, the character
+tokens @samp{f} and @samp{i} are merged to a single output node
+representing the ligature glyph @samp{fi} (provided the current font has
+a glyph for this ligature); the same happens with @samp{:u}.  All output
+glyph nodes are `processed', which means that they are invariably
+associated with a given font, font size, advance width, etc.  During the
+formatting process, @code{gtroff} itself adds various nodes to control
+the data flow.
+
+Macros, diversions, and strings collect elements in two chained lists: a
+list of input tokens that have been passed unprocessed, and a list of
+output nodes.  Consider the following the diversion.
+
+@Example
+.di xxx
+a
+\!b
+c
+.br
+.di
+@endExample
+
+@noindent
+It contains these elements.
+
+@multitable {@i{vertical size node}} {token list} {element number}
+@item node list               @tab token list @tab element number
+
+@item @i{line start node}     @tab ---        @tab 1
+@item @i{glyph node @code{a}} @tab ---        @tab 2
+@item @i{word space node}     @tab ---        @tab 3
+@item ---                     @tab @code{b}   @tab 4
+@item ---                     @tab @code{\n}  @tab 5
+@item @i{glyph node @code{c}} @tab ---        @tab 6
+@item @i{vertical size node}  @tab ---        @tab 7
+@item @i{vertical size node}  @tab ---        @tab 8
+@item ---                     @tab @code{\n}  @tab 9
+@end multitable
+
+@cindex @code{\v}, internal representation
+@noindent
+Elements 1, 7, and@tie{}8 are inserted by @code{gtroff}; the latter two
+(which are always present) specify the vertical extent of the last line,
+possibly modified by @code{\x}.  The @code{br} request finishes the
+current partial line, inserting a newline input token, which is
+subsequently converted to a space when the diversion is reread.  Note
+that the word space node has a fixed width that isn't stretchable
+anymore.  To convert horizontal space nodes back to input tokens, use
+the @code{unformat} request.
+
+Macros only contain elements in the token list (and the node list is
+empty); diversions and strings can contain elements in both lists.
+
+Note that the @code{chop} request simply reduces the number of elements
+in a macro, string, or diversion by one.  Exceptions are
+@dfn{compatibility save} and @dfn{compatibility ignore} input tokens,
+which are ignored.  The @code{substring} request also ignores those
+input tokens.
+
+Some requests like @code{tr} or @code{cflags} work on glyph identifiers
+only; this means that the associated glyph can be changed without
+destroying this association.  This can be very helpful for substituting
+glyphs.  In the following example, we assume that glyph @samp{foo} isn't
+available by default, so we provide a substitution using the
+@code{fchar} request and map it to input character @samp{x}.
+
+@Example
+.fchar \[foo] foo
+.tr x \[foo]
+@endExample
+
+@noindent
+Now let us assume that we install an additional special font @samp{bar}
+that has glyph @samp{foo}.
+
+@Example
+.special bar
+.rchar \[foo]
+@endExample
+
+@noindent
+Since glyphs defined with @code{fchar} are searched before glyphs in
+special fonts, we must call @code{rchar} to remove the definition of the
+fallback glyph.  Anyway, the translation is still active; @samp{x} now
+maps to the real glyph @samp{foo}.
+
+@cindex compatibility mode, and parameters
+@cindex mode, compatibility, and parameters
+@cindex arguments, and compatibility mode
+@cindex parameters, and compatibility mode
+@cindex macro arguments, and compatibility mode
+@cindex request arguments, and compatibility mode
+Macro and request arguments preserve the compatibility mode:
+
+@Example
+.cp 1     \" switch to compatibility mode
+.de xx
+\\$1
+..
+.cp 0     \" switch compatibility mode off
+.xx caf\['e]
+    @result{} café
+@endExample
+
+@noindent
+Since compatibility mode is on while @code{de} is called, the macro
+@code{xx} activates compatibility mode while executing.  Argument
+@code{$1} can still be handled properly because it inherits the
+compatibility mode status which was active at the point where @code{xx}
+is called.
+
+After expansion of the parameters, the compatibility save and restore
+tokens are removed.
+
+
+@c =====================================================================
+
+@node Debugging, Implementation Differences, Gtroff Internals, gtroff Reference
+@section Debugging
+@cindex debugging
+
+@code{gtroff} is not easy to debug, but there are some useful features
+and strategies for debugging.
+
+@Defreq {lf, line [@Var{filename}]}
+@pindex soelim
+@cindex multi-file documents
+@cindex documents, multi-file
+@cindex setting input line number (@code{lf})
+@cindex input line number, setting (@code{lf})
+@cindex number, input line, setting (@code{lf})
+Change the line number and optionally the file name @code{gtroff} shall
+use for error and warning messages.  @var{line} is the input line number
+of the @emph{next} line.
+
+Without argument, the request is ignored.
+
+This is a debugging aid for documents that are split into many files,
+then put together with @code{soelim} and other preprocessors.  Usually,
+it isn't invoked manually.
+
+Note that other @code{troff} implementations (including the original
+@acronym{AT&T} version) handle @code{lf} differently.  For them,
+@var{line} changes the line number of the @emph{current} line.
+@endDefreq
+
+@DefreqList {tm, string}
+@DefreqItemx {tm1, string}
+@DefreqListEndx {tmc, string}
+@cindex printing to stderr (@code{tm}, @code{tm1}, @code{tmc})
+@cindex stderr, printing to (@code{tm}, @code{tm1}, @code{tmc})
+Send @var{string} to the standard error output; this is very useful for
+printing debugging messages among other things.
+
+@cindex @code{tm} request, and copy-in mode
+@cindex copy-in mode, and @code{tm} request
+@cindex mode, copy-in, and @code{tm} request
+@cindex @code{tm1} request, and copy-in mode
+@cindex copy-in mode, and @code{tm1} request
+@cindex mode, copy-in, and @code{tm1} request
+@cindex @code{tmc} request, and copy-in mode
+@cindex copy-in mode, and @code{tmc} request
+@cindex mode, copy-in, and @code{tmc} request
+@var{string} is read in copy mode.
+
+The @code{tm} request ignores leading spaces of @var{string}; @code{tm1}
+handles its argument similar to the @code{ds} request: a leading double
+quote in @var{string} is stripped to allow initial blanks.
+
+The @code{tmc} request is similar to @code{tm1} but does not append a
+newline (as is done in @code{tm} and @code{tm1}).
+@endDefreq
+
+@Defreq {ab, [@Var{string}]}
+@cindex aborting (@code{ab})
+Similar to the @code{tm} request, except that it causes @code{gtroff} to
+stop processing.  With no argument it prints @samp{User Abort.} to
+standard error.
+@endDefreq
+
+@Defreq {ex, }
+@cindex @code{ex} request, use in debugging
+@cindex exiting (@code{ex})
+The @code{ex} request also causes @code{gtroff} to stop processing; see
+also @ref{I/O}.
+@endDefreq
+
+When doing something involved it is useful to leave the debugging
+statements in the code and have them turned on by a command-line flag.
+
+@Example
+.if \n(DB .tm debugging output
+@endExample
+
+@noindent
+To activate these statements say
+
+@Example
+groff -rDB=1 file
+@endExample
+
+If it is known in advance that there are many errors and no useful
+output, @code{gtroff} can be forced to suppress formatted output with
+the @option{-z} flag.
+
+@Defreq {pev, }
+@cindex dumping environments (@code{pev})
+@cindex environments, dumping (@code{pev})
+Print the contents of the current environment and all the currently
+defined environments (both named and numbered) on @code{stderr}.
+@endDefreq
+
+@Defreq {pm, }
+@cindex dumping symbol table (@code{pm})
+@cindex symbol table, dumping (@code{pm})
+Print the entire symbol table on @code{stderr}.  Names of all defined
+macros, strings, and diversions are print together with their size in
+bytes.  Since @code{gtroff} sometimes adds nodes by itself, the returned
+size can be larger than expected.
+
+This request differs from Unix @code{troff}: @code{gtroff} reports the
+sizes of diversions, ignores an additional argument to print only the
+total of the sizes, and the size isn't returned in blocks of 128
+characters.
+@endDefreq
+
+@Defreq {pnr, }
+@cindex dumping number registers (@code{pnr})
+@cindex number registers, dumping (@code{pnr})
+Print the names and contents of all currently defined number registers
+on @code{stderr}.
+@endDefreq
+
+@Defreq {ptr, }
+@cindex dumping traps (@code{ptr})
+@cindex traps, dumping (@code{ptr})
+Print the names and positions of all traps (not including input line
+traps and diversion traps) on @code{stderr}.  Empty slots in the page
+trap list are printed as well, because they can affect the priority of
+subsequently planted traps.
+@endDefreq
+
+@Defreq {fl, }
+@cindex flush output (@code{fl})
+@cindex output, flush (@code{fl})
+@cindex interactive use of @code{gtroff}
+@cindex @code{gtroff}, interactive use
+Instruct @code{gtroff} to flush its output immediately.  The intent is
+for interactive use, but this behaviour is currently not implemented in
+@code{gtroff}.  Contrary to Unix @code{troff}, TTY output is sent to a
+device driver also (@code{grotty}), making it non-trivial to communicate
+interactively.
+
+This request causes a line break.
+@endDefreq
+
+@Defreq {backtrace, }
+@cindex backtrace of input stack (@code{backtrace})
+@cindex input stack, backtrace (@code{backtrace})
+Print a backtrace of the input stack to the standard error stream.
+
+Consider the following in file @file{test}:
+
+@Example
+.de xxx
+.  backtrace
+..
+.de yyy
+.  xxx
+..
+.
+.yyy
+@endExample
+
+@noindent
+On execution, @code{gtroff} prints the following:
+
+@Example
+test:2: backtrace: macro `xxx'
+test:5: backtrace: macro `yyy'
+test:8: backtrace: file `test'
+@endExample
+
+The option @option{-b} of @code{gtroff} internally calls a variant of
+this request on each error and warning.
+@endDefreq
+
+@Defreg {slimit}
+@cindex input stack, setting limit
+Use the @code{slimit} number register to set the maximum number of
+objects on the input stack.  If @code{slimit} is less than or equal
+to@tie{}0, there is no limit set.  With no limit, a buggy recursive
+macro can exhaust virtual memory.
+
+The default value is 1000; this is a compile-time constant.
+@endDefreg
+
+@Defreq {warnscale, si}
+Set the scaling indicator used in warnings to @var{si}.  Valid values
+for @var{si} are @samp{u}, @samp{i}, @samp{c}, @samp{p}, and @samp{P}.
+At startup, it is set to @samp{i}.
+@endDefreq
+
+@Defreq {spreadwarn, [@Var{limit}]}
+Make @code{gtroff} emit a warning if the additional space inserted for
+each space between words in an output line is larger or equal to
+@var{limit}.  A negative value is changed to zero; no argument toggles
+the warning on and off without changing @var{limit}.  The default
+scaling indicator is @samp{m}.  At startup, @code{spreadwarn} is
+deactivated, and @var{limit} is set to 3@dmn{m}.
+
+For example,
+
+@Example
+.spreadwarn 0.2m
+@endExample
+
+@noindent
+causes a warning if @code{gtroff} must add 0.2@dmn{m} or more for each
+interword space in a line.
+
+This request is active only if text is justified to both margins (using
+@w{@samp{.ad b}}).
+@endDefreq
+
+@cindex warnings
+@code{gtroff} has command-line options for printing out more warnings
+(@option{-w}) and for printing backtraces (@option{-b}) when a warning
+or an error occurs.  The most verbose level of warnings is @option{-ww}.
+
+@DefreqList {warn, [@Var{flags}]}
+@DefregListEndx {.warn}
+@cindex level of warnings (@code{warn})
+@cindex warnings, level (@code{warn})
+Control the level of warnings checked for.  The @var{flags} are the sum
+of the numbers associated with each warning that is to be enabled; all
+other warnings are disabled.  The number associated with each warning is
+listed below.  For example, @w{@code{.warn 0}} disables all warnings,
+and @w{@code{.warn 1}} disables all warnings except that about missing
+glyphs.  If no argument is given, all warnings are enabled.
+
+The read-only number register @code{.warn} contains the current warning
+level.
+@endDefreq
+
+@menu
+* Warnings::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Warnings,  , Debugging, Debugging
+@subsection Warnings
+@cindex warnings
+
+The warnings that can be given to @code{gtroff} are divided into the
+following categories.  The name associated with each warning is used by
+the @option{-w} and @option{-W} options; the number is used by the
+@code{warn} request and by the @code{.warn} register.
+
+@table @samp
+@item char
+@itemx 1
+Non-existent glyphs.@footnote{@code{char} is a misnomer since it reports
+missing glyphs -- there aren't missing input characters, only invalid
+ones.}  This is enabled by default.
+
+@item number
+@itemx 2
+Invalid numeric expressions.  This is enabled by default.
+@xref{Expressions}.
+
+@item break
+@itemx 4
+@cindex fill mode
+@cindex mode, fill
+In fill mode, lines that could not be broken so that their length was
+less than the line length.  This is enabled by default.
+
+@item delim
+@itemx 8
+Missing or mismatched closing delimiters.
+
+@item el
+@itemx 16
+@cindex @code{ie} request, and warnings
+@cindex @code{el} request, and warnings
+Use of the @code{el} request with no matching @code{ie} request.
+@xref{if-else}.
+
+@item scale
+@itemx 32
+Meaningless scaling indicators.
+
+@item range
+@itemx 64
+Out of range arguments.
+
+@item syntax
+@itemx 128
+Dubious syntax in numeric expressions.
+
+@item di
+@itemx 256
+@cindex @code{di} request, and warnings
+@cindex @code{da} request, and warnings
+Use of @code{di} or @code{da} without an argument when there is no
+current diversion.
+
+@item mac
+@itemx 512
+@cindex @code{de}, @code{de1}, @code{dei} requests, and warnings
+@cindex @code{am}, @code{am1}, @code{ami} requests, and warnings
+@cindex @code{ds}, @code{ds1} requests, and warnings
+@cindex @code{as}, @code{as1} requests, and warnings
+@cindex @code{di} request, and warnings
+@cindex @code{da} request, and warnings
+@cindex @code{box}, @code{boxa} requests, and warnings
+@cindex @code{\*}, and warnings
+Use of undefined strings, macros and diversions.  When an undefined
+string, macro, or diversion is used, that string is automatically
+defined as empty.  So, in most cases, at most one warning is given for
+each name.
+
+@item reg
+@itemx 1024
+@cindex @code{nr} request, and warnings
+@cindex @code{\R}, and warnings
+@cindex @code{\n}, and warnings
+Use of undefined number registers.  When an undefined number register is
+used, that register is automatically defined to have a value of@tie{}0.
+So, in most cases, at most one warning is given for use of a particular
+name.
+
+@item tab
+@itemx 2048
+@cindex @code{\t}, and warnings
+Use of a tab character where a number was expected.
+
+@item right-brace
+@itemx 4096
+@cindex @code{\@}}, and warnings
+Use of @code{\@}} where a number was expected.
+
+@item missing
+@itemx 8192
+Requests that are missing non-optional arguments.
+
+@item input
+@itemx 16384
+Invalid input characters.
+
+@item escape
+@itemx 32768
+Unrecognized escape sequences.  When an unrecognized escape sequence
+@code{\@var{X}} is encountered, the escape character is ignored, and
+@var{X} is printed.
+
+@item space
+@itemx 65536
+@cindex compatibility mode
+Missing space between a request or macro and its argument.  This warning
+is given when an undefined name longer than two characters is
+encountered, and the first two characters of the name make a defined
+name.  The request or macro is not invoked.  When this warning is given,
+no macro is automatically defined.  This is enabled by default.  This
+warning never occurs in compatibility mode.
+
+@item font
+@itemx 131072
+Non-existent fonts.  This is enabled by default.
+
+@item ig
+@itemx 262144
+Invalid escapes in text ignored with the @code{ig} request.  These are
+conditions that are errors when they do not occur in ignored text.
+
+@item color
+@itemx 524288
+Color related warnings.
+
+@item file
+@itemx 1048576
+Missing files.  The @code{mso} request gives this warning when the
+requested macro file does not exist.  This is enabled by default.
+
+@item all
+All warnings except @samp{di}, @samp{mac} and @samp{reg}.  It is
+intended that this covers all warnings that are useful with traditional
+macro packages.
+
+@item w
+All warnings.
+@end table
+
+
+@c =====================================================================
+
+@node Implementation Differences,  , Debugging, gtroff Reference
+@section Implementation Differences
+@cindex implementation differences
+@cindex differences in implementation
+@cindex incompatibilities with @acronym{AT&T} @code{troff}
+@cindex compatibility mode
+@cindex mode, compatibility
+
+GNU @code{troff} has a number of features that cause incompatibilities
+with documents written with old versions of @code{troff}.
+
+@cindex long names
+@cindex names, long
+Long names cause some incompatibilities.  Unix @code{troff} interprets
+
+@Example
+.dsabcd
+@endExample
+
+@cindex @code{\*}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\n}, incompatibilities with @acronym{AT&T} @code{troff}
+@noindent
+as defining a string @samp{ab} with contents @samp{cd}.  Normally, GNU
+@code{troff} interprets this as a call of a macro named @code{dsabcd}.
+Also Unix @code{troff} interprets @code{\*[} or @code{\n[} as references
+to a string or number register called @samp{[}.  In GNU @code{troff},
+however, this is normally interpreted as the start of a long name.  In
+compatibility mode GNU @code{troff} interprets long names in the
+traditional way (which means that they are not recognized as names).
+
+@DefreqList {cp, [@Var{n}]}
+@DefreqItemx {do, cmd}
+@DefregListEndx {.C}
+If @var{n} is missing or non-zero, turn on compatibility mode;
+otherwise, turn it off.
+
+The read-only number register @code{.C} is@tie{}1 if compatibility mode
+is on, 0@tie{}otherwise.
+
+Compatibility mode can be also turned on with the @option{-C}
+command-line option.
+
+The @code{do} request turns off compatibility mode while executing its
+arguments as a @code{gtroff} command.  However, it does not turn off
+compatibility mode while processing the macro itself.  To do that, use
+the @code{de1} request (or manipulate the @code{.C} register manually).
+@xref{Writing Macros}.
+
+@Example
+.do fam T
+@endExample
+
+@noindent
+executes the @code{fam} request when compatibility mode is enabled.
+
+@code{gtroff} restores the previous compatibility setting before
+interpreting any files sourced by the @var{cmd}.
+@endDefreq
+
+@cindex input level in delimited arguments
+@cindex delimited arguments, incompatibilities with @acronym{AT&T} @code{troff}
+Two other features are controlled by @option{-C}.  If not in
+compatibility mode, GNU @code{troff} preserves the input level in
+delimited arguments:
+
+@Example
+.ds xx '
+\w'abc\*(xxdef'
+@endExample
+
+@noindent
+In compatibility mode, the string @samp{72def'} is returned; without
+@option{-C} the resulting string is @samp{168} (assuming a TTY output
+device).
+
+@cindex @code{\f}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\H}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\s}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\S}, incompatibilities with @acronym{AT&T} @code{troff}
+Finally, the escapes @code{\f}, @code{\H}, @code{\m}, @code{\M},
+@code{\R}, @code{\s}, and @code{\S} are transparent for recognizing the
+beginning of a line only in compatibility mode (this is a rather obscure
+feature).  For example, the code
+
+@Example
+.de xx
+Hello!
+..
+\fB.xx\fP
+@endExample
+
+@noindent
+prints @samp{Hello!} in bold face if in compatibility mode, and
+@samp{.xx} in bold face otherwise.
+
+@cindex @code{\A}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\|}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\^}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\&}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\@{}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\@}}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\@key{SP}}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\'}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\`}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\-}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\_}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\%}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\c}, incompatibilities with @acronym{AT&T} @code{troff}
+GNU @code{troff} does not allow the use of the escape sequences
+@code{\|}, @code{\^}, @code{\&}, @code{\@{}, @code{\@}},
+@code{\@key{SP}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
+@code{\%}, and @code{\c} in names of strings, macros, diversions, number
+registers, fonts or environments; Unix @code{troff} does.  The @code{\A}
+escape sequence (@pxref{Identifiers}) may be helpful in avoiding use of
+these escape sequences in names.
+
+@cindex fractional point sizes
+@cindex fractional type sizes
+@cindex point sizes, fractional
+@cindex type sizes, fractional
+@cindex sizes, fractional
+@cindex @code{ps} request, incompatibilities with @acronym{AT&T} @code{troff}
+Fractional point sizes cause one noteworthy incompatibility.  In
+Unix @code{troff} the @code{ps} request ignores scale indicators and
+thus
+
+@Example
+.ps 10u
+@endExample
+
+@noindent
+sets the point size to 10@tie{}points, whereas in GNU @code{troff} it
+sets the point size to 10@tie{}scaled points.  @xref{Fractional Type
+Sizes}, for more information.
+
+@cindex @code{bd} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{cs} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{tr} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{fp} request, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex input characters and output glyphs, compatibility with @acronym{AT&T} @code{troff}
+@cindex output glyphs, and input characters,compatibility with @acronym{AT&T} @code{troff}
+@cindex characters, input, and output glyphs, compatibility with @acronym{AT&T} @code{troff}
+@cindex glyphs, output, and input characters, compatibility with @acronym{AT&T} @code{troff}
+In GNU @code{troff} there is a fundamental difference between
+(unformatted) input characters and (formatted) output glyphs.
+Everything that affects how a glyph is output is stored with the glyph
+node; once a glyph node has been constructed it is unaffected by any
+subsequent requests that are executed, including @code{bd}, @code{cs},
+@code{tkf}, @code{tr}, or @code{fp} requests.  Normally glyphs are
+constructed from input characters at the moment immediately before the
+glyph is added to the current output line.  Macros, diversions and
+strings are all, in fact, the same type of object; they contain lists of
+input characters and glyph nodes in any combination.  A glyph node does
+not behave like an input character for the purposes of macro processing;
+it does not inherit any of the special properties that the input
+character from which it was constructed might have had.  For example,
+
+@Example
+.di x
+\\\\
+.br
+.di
+.x
+@endExample
+
+@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
+@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
+@cindex @code{\e}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex @code{\?}, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex transparent output, incompatibilities with @acronym{AT&T} @code{troff}
+@cindex output, transparent, incompatibilities with @acronym{AT&T} @code{troff}
+@noindent
+prints @samp{\\} in GNU @code{troff}; each pair of input backslashes is
+turned into one output backslash and the resulting output backslashes
+are not interpreted as escape characters when they are reread.
+Unix @code{troff} would interpret them as escape characters when they
+were reread and would end up printing one @samp{\}.  The correct way to
+obtain a printable backslash is to use the @code{\e} escape sequence:
+This always prints a single instance of the current escape character,
+regardless of whether or not it is used in a diversion; it also works in
+both GNU @code{troff} and Unix @code{troff}.@footnote{To be completely
+independent of the current escape character, use @code{\(rs}, which
+represents a reverse solidus (backslash) glyph.}  To store, for some
+reason, an escape sequence in a diversion that is interpreted when the
+diversion is reread, either use the traditional @code{\!} transparent
+output facility, or, if this is unsuitable, the new @code{\?} escape
+sequence.
+
+@xref{Diversions}, and @ref{Gtroff Internals}, for more information.
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Preprocessors, Output Devices, gtroff Reference, Top
+@chapter Preprocessors
+@cindex preprocessors
+
+This chapter describes all preprocessors that come with @code{groff} or
+which are freely available.
+
+@menu
+* geqn::
+* gtbl::
+* gpic::
+* ggrn::
+* grap::
+* gchem::
+* grefer::
+* gsoelim::
+* preconv::
+@end menu
+
+
+@c =====================================================================
+
+@node geqn, gtbl, Preprocessors, Preprocessors
+@section @code{geqn}
+@cindex @code{eqn}, the program
+@cindex @code{geqn}, the program
+
+@c XXX
+
+@menu
+* Invoking geqn::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking geqn,  , geqn, geqn
+@subsection Invoking @code{geqn}
+@cindex invoking @code{geqn}
+@cindex @code{geqn}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node gtbl, gpic, geqn, Preprocessors
+@section @code{gtbl}
+@cindex @code{tbl}, the program
+@cindex @code{gtbl}, the program
+
+@c XXX
+
+@menu
+* Invoking gtbl::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gtbl,  , gtbl, gtbl
+@subsection Invoking @code{gtbl}
+@cindex invoking @code{gtbl}
+@cindex @code{gtbl}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node gpic, ggrn, gtbl, Preprocessors
+@section @code{gpic}
+@cindex @code{pic}, the program
+@cindex @code{gpic}, the program
+
+@c XXX
+
+@menu
+* Invoking gpic::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gpic,  , gpic, gpic
+@subsection Invoking @code{gpic}
+@cindex invoking @code{gpic}
+@cindex @code{gpic}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node ggrn, grap, gpic, Preprocessors
+@section @code{ggrn}
+@cindex @code{grn}, the program
+@cindex @code{ggrn}, the program
+
+@c XXX
+
+@menu
+* Invoking ggrn::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking ggrn,  , ggrn, ggrn
+@subsection Invoking @code{ggrn}
+@cindex invoking @code{ggrn}
+@cindex @code{ggrn}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node grap, gchem, ggrn, Preprocessors
+@section @code{grap}
+@cindex @code{grap}, the program
+
+A free implementation of @code{grap}, written by Ted Faber,
+is available as an extra package from the following address:
+
+@display
+@uref{http://www.lunabase.org/~faber/Vault/software/grap/}
+@end display
+
+
+@c =====================================================================
+
+@node gchem, grefer, grap, Preprocessors
+@section @code{gchem}
+@cindex @code{chem}, the program
+@cindex @code{gchem}, the program
+
+@c XXX
+
+@menu
+* Invoking gchem::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gchem,  , gchem, gchem
+@subsection Invoking @code{gchem}
+@cindex invoking @code{gchem}
+@cindex @code{gchem}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node grefer, gsoelim, gchem, Preprocessors
+@section @code{grefer}
+@cindex @code{refer}, the program
+@cindex @code{grefer}, the program
+
+@c XXX
+
+@menu
+* Invoking grefer::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grefer,  , grefer, grefer
+@subsection Invoking @code{grefer}
+@cindex invoking @code{grefer}
+@cindex @code{grefer}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node gsoelim, preconv, grefer, Preprocessors
+@section @code{gsoelim}
+@cindex @code{soelim}, the program
+@cindex @code{gsoelim}, the program
+
+@c XXX
+
+@menu
+* Invoking gsoelim::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gsoelim,  , gsoelim, gsoelim
+@subsection Invoking @code{gsoelim}
+@cindex invoking @code{gsoelim}
+@cindex @code{gsoelim}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+
+@node preconv,  , gsoelim, Preprocessors
+@section @code{preconv}
+@cindex @code{preconv}, the program
+
+@c XXX
+
+@menu
+* Invoking preconv::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking preconv,  , preconv, preconv
+@subsection Invoking @code{preconv}
+@cindex invoking @code{preconv}
+@cindex @code{preconv}, invoking
+
+@c XXX
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Output Devices, File formats, Preprocessors, Top
+@chapter Output Devices
+@cindex output devices
+@cindex devices for output
+
+@c XXX
+
+@menu
+* Special Characters::
+* grotty::
+* grops::
+* gropdf::
+* grodvi::
+* grolj4::
+* grolbp::
+* grohtml::
+* gxditview::
+@end menu
+
+
+@c =====================================================================
+
+@node Special Characters, grotty, Output Devices, Output Devices
+@section Special Characters
+@cindex special characters
+@cindex characters, special
+
+@c XXX
+
+@xref{Font Files}.
+
+
+@c =====================================================================
+
+@node grotty, grops, Special Characters, Output Devices
+@section @code{grotty}
+@cindex @code{grotty}, the program
+
+The postprocessor @code{grotty} translates the output from GNU
+@code{troff} into a form suitable for typewriter-like devices.  It is
+fully documented on its manual page, @cite{grotty(1)}.
+
+@menu
+* Invoking grotty::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grotty,  , grotty, grotty
+@subsection Invoking @code{grotty}
+@cindex invoking @code{grotty}
+@cindex @code{grotty}, invoking
+
+The postprocessor @command{grotty} accepts the following command-line
+options:
+
+@table @option
+@item -b
+Do not overstrike bold glyphs.  Ignored if @option{-c} isn't used.
+
+@item -B
+Do not underline bold-italic glyphs.  Ignored if @option{-c} isn't
+used.
+
+@item -c
+Use overprint and disable colours for printing on legacy Teletype
+printers (see below).
+
+@item -d
+Do not render lines (that is, ignore all @code{\D} escapes).
+
+@item -f
+Use form feed control characters in the output.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font and device description files, given the
+target device @var{name}.
+
+@item -h
+Use horizontal tabs for sequences of 8 space characters.
+
+@item -i
+Request italic glyphs from the terminal.  Ignored if @option{-c} is
+active.
+
+@item -o
+Do not overstrike.
+
+@item -r
+Highlight italic glyphs.  Ignored if @option{-c} is active.
+
+@item -u
+Do not underline italic glyphs.  Ignored if @option{-c} isn't used.
+
+@item -U
+Do not overstrike bold-italic glyphs.  Ignored if @option{-c} isn't
+used.
+
+@item -v
+Print the version number.
+@end table
+
+@pindex less
+@cindex Teletype
+@cindex ISO 6249 SGR
+@cindex terminal control sequences
+@cindex control sequences, for terminals
+The @option{-c} mode for TTY output devices means that underlining is
+done by emitting sequences of @samp{_} and @samp{^H} (the backspace
+character) before the actual character.  Literally, this is printing
+an underline character, then moving the caret back one character
+position, and printing the actual character at the same position as
+the underline character (similar to a typewriter).  Usually, a modern
+terminal can't interpret this (and the original Teletype machines for
+which this sequence was appropriate are no longer in use).  You need
+a pager program like @code{less} that translates this into
+ISO@tie{}6429 SGR sequences to control terminals.
+
+
+@c =====================================================================
+
+@node grops, gropdf, grotty, Output Devices
+@section @code{grops}
+@cindex @code{grops}, the program
+
+The postprocessor @command{grops} translates the output from GNU
+@command{troff} into a form suitable for Adobe @sc{PostScript}
+devices.  It is fully documented on its manual page, @cite{grops(1)}.
+
+
+@menu
+* Invoking grops::
+* Embedding PostScript::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grops, Embedding PostScript, grops, grops
+@subsection Invoking @code{grops}
+@cindex invoking @code{grops}
+@cindex @code{grops}, invoking
+
+The postprocessor @code{grops} accepts the following command-line
+options:
+
+@table @option
+@item -b@var{flags}
+Use backward compatibility settings given by @var{flags} as
+documented in the @cite{grops(1)} manual page.  Overrides the command
+@option{broken} in the @file{DESC} file.
+
+@item -c@var{n}
+Print @var{n} copies of each page.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font, prologue and device description files,
+given the target device @var{name}, usually @strong{ps}.
+
+@item -g
+Tell the printer to guess the page length.  Useful for printing
+vertically centered pages when the paper dimensions are determined at
+print time.
+
+@item -I@var{path} @dots{}
+Consider the directory @file{@var{path}} for searching included files
+specified with relative paths.  The current directory is searched as
+fallback.
+
+@item -l
+Use landscape orientation.
+
+@item -m
+Use manual feed.
+
+@item -p@var{papersize}
+Set the page dimensions.  Overrides the commands @option{papersize},
+@option{paperlength}, and @option{paperwidth} in the @file{DESC}
+file.  See the @cite{groff_font(5)} manual page for details.
+
+@item -P@var{prologue}
+Use the @var{prologue} in the font path as the prologue instead of
+the default @file{prologue}.  Overrides the environment variable
+@env{GROPS_PROLOGUE}.
+
+@item -w@var{n}
+Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
+default value @var{n} = 40.
+
+@item -v
+Print the version number.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Embedding PostScript,  , Invoking grops, grops
+@subsection Embedding @sc{PostScript}
+@cindex embedding PostScript
+@cindex PostScript, embedding
+
+The escape sequence
+
+@code{\X'ps: import @var{file} @var{llx} @var{lly} @var{urx} @var{ury}
+  @var{width} [@var{height}]'}
+
+@noindent
+places a rectangle of the specified @var{width} containing the
+@sc{PostScript} drawing from file @var{file} bound by the box from
+@var{llx} @var{lly} to @var{urx} @var{ury} (in @sc{PostScript}
+coordinates) at the insertion point.  If @var{height} is not
+specified, the embedded drawing is scaled proportionally.
+
+@xref{Miscellaneous}, for the @code{psbb} request, which automatically
+generates the bounding box.
+
+This escape sequence is used internally by the macro @code{PSPIC}
+(see the @cite{groff_tmac(5)} manual page).
+
+
+@c =====================================================================
+
+@node gropdf, grodvi, grops, Output Devices
+@section @code{gropdf}
+@cindex @code{gropdf}, the program
+
+The postprocessor @command{gropdf} translates the output from GNU
+@command{troff} into a form suitable for Adobe PDF devices.  It is fully
+documented on its manual page, @cite{gropdf(1)}.
+
+@menu
+* Invoking gropdf::
+* Embedding PDF::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gropdf, Embedding PDF, gropdf, gropdf
+@subsection Invoking @code{gropdf}
+@cindex invoking @code{gropdf}
+@cindex @code{gropdf}, invoking
+
+The postprocessor @code{gropdf} accepts the following command-line
+options:
+
+@table @option
+@item -d
+Produce uncompressed PDFs that include debugging comments.
+
+@item -e
+This forces @code{gropdf} to embed all used fonts in the PDF,
+even if they are one of the 14 base Adobe fonts.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font, prologue and device description files,
+given the target device @var{name}, usually @strong{pdf}.
+
+@item -y@var{foundry}
+This forces the use of a different font foundry.
+
+@item -l
+Use landscape orientation.
+
+@item -p@var{papersize}
+Set the page dimensions.  Overrides the commands @option{papersize},
+@option{paperlength}, and @option{paperwidth} in the @file{DESC}
+file.  See the @cite{groff_font(5)} manual page for details.
+
+@item -v
+Print the version number.
+
+@item -s
+Append a comment line to end of PDF showing statistics, i.e. number of
+pages in document.  Ghostscript's @cite{ps2pdf(1)} complains about this
+line if it is included, but works anyway.
+
+@item -u@var{filename}
+@code{gropdf} normally includes a ToUnicode CMap with any font created
+using @file{text.enc} as the encoding file, this makes it easier to
+search for words that contain ligatures.  You can include your own CMap
+by specifying a @var{filename} or have no CMap at all by omitting the
+@var{filename}.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Embedding PDF,  , Invoking gropdf, gropdf
+@subsection Embedding PDF
+@cindex embedding PDF
+@cindex PDF, embedding
+
+The escape sequence
+
+@code{\X'pdf: pdfpic @var{file} @var{alignment} @var{width} [@var{height}]
+  [@var{linelength}]'}
+
+@noindent
+places a rectangle of the specified @var{width} containing the PDF
+drawing from file @var{file} of desired @var{width} and @var{height} (if
+@var{height} is missing or zero then it is scaled proportionally).  If
+@var{alignment} is @code{-L} the drawing is left aligned.  If it is
+@code{-C} or @code{-R} a @var{linelength} greater than the width of the
+drawing is required as well.  If @var{width} is specified as zero then
+the width is scaled in proportion to the height.
+
+
+@c =====================================================================
+
+@node grodvi, grolj4, gropdf, Output Devices
+@section @code{grodvi}
+@cindex @code{grodvi}, the program
+
+The postprocessor @command{grodvi} translates the output from GNU
+@command{troff} into the @strong{DVI} output format compatible with
+the @strong{@TeX{}} document preparation system.  It is fully
+documented on its manual page, @cite{grodvi(1)}.
+
+@menu
+* Invoking grodvi::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grodvi,  , grodvi, grodvi
+@subsection Invoking @code{grodvi}
+@cindex invoking @code{grodvi}
+@cindex @code{grodvi}, invoking
+
+The postprocessor @code{grodvi} accepts the following command-line
+options:
+
+@table @option
+@item -d
+Do not use @strong{tpic} specials to implement drawing commands.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font and device description files, given the
+target device @var{name}, usually @strong{dvi}.
+
+@item -l
+Use landscape orientation.
+
+@item -p@var{papersize}
+Set the page dimensions.  Overrides the commands @option{papersize},
+@option{paperlength}, and @option{paperwidth} in the @file{DESC}
+file.  See @cite{groff_font(5)} manual page for details.
+
+@item -v
+Print the version number.
+
+@item -w@var{n}
+Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
+default value @var{n} = 40.
+@end table
+
+
+@c =====================================================================
+
+@node grolj4, grolbp, grodvi, Output Devices
+@section @code{grolj4}
+@cindex @code{grolj4}, the program
+
+The postprocessor @command{grolj4} translates the output from GNU
+@command{troff} into the @strong{PCL5} output format suitable for
+printing on a @strong{HP LaserJet@tie{}4} printer.  It is fully
+documented on its manual page, @cite{grolj4(1)}.
+
+@menu
+* Invoking grolj4::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grolj4,  , grolj4, grolj4
+@subsection Invoking @code{grolj4}
+@cindex invoking @code{grolj4}
+@cindex @code{grolj4}, invoking
+
+The postprocessor @code{grolj4} accepts the following command-line
+options:
+
+@table @option
+@item -c@var{n}
+Print @var{n} copies of each page.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font and device description files, given the
+target device @var{name}, usually @strong{lj4}.
+
+@item -l
+Use landscape orientation.
+
+@item -p@var{size}
+Set the page dimensions.  Valid values for @var{size} are:
+@code{letter}, @code{legal}, @code{executive}, @code{a4},
+@code{com10}, @code{monarch}, @code{c5}, @code{b5}, @code{d1}.
+
+@item -v
+Print the version number.
+
+@item -w@var{n}
+Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
+default value @var{n} = 40.
+@end table
+
+The special drawing command @code{\D'R @var{dh} @var{dv}'} draws a
+horizontal rectangle from the current position to the position at
+offset (@var{dh},@var{dv}).
+
+
+@c =====================================================================
+
+@node grolbp, grohtml, grolj4, Output Devices
+@section @code{grolbp}
+@cindex @code{grolbp}, the program
+
+The postprocessor @command{grolbp} translates the output from GNU
+@command{troff} into the @strong{LBP} output format suitable for
+printing on @strong{Canon CAPSL} printers.  It is fully documented on
+its manual page, @cite{grolbp(1)}.
+
+@menu
+* Invoking grolbp::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grolbp,  , grolbp, grolbp
+@subsection Invoking @code{grolbp}
+@cindex invoking @code{grolbp}
+@cindex @code{grolbp}, invoking
+
+The postprocessor @code{grolbp} accepts the following command-line
+options:
+
+@table @option
+@item -c@var{n}
+Print @var{n} copies of each page.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font, prologue and device description files,
+given the target device @var{name}, usually @strong{lbp}.
+
+@item -l
+Use landscape orientation.
+
+@item -o@var{orientation}
+Use the @var{orientation} specified: @code{portrait} or
+@code{landscape}.
+
+@item -p@var{papersize}
+Set the page dimensions.  See @cite{groff_font(5)} manual page for
+details.
+
+@item -w@var{n}
+Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
+default value @var{n} = 40.
+
+@item -v
+Print the version number.
+
+@item -h
+Print command-line help.
+@end table
+
+
+@c =====================================================================
+
+@node grohtml, gxditview, grolbp, Output Devices
+@section @code{grohtml}
+@cindex @code{grohtml}, the program
+
+The @code{grohtml} front end (which consists of a preprocessor,
+@code{pre-grohtml}, and a device driver, @code{post-grohtml}) translates
+the output of GNU @code{troff} to @acronym{HTML}.  Users should always
+invoke @code{grohtml} via the @code{groff} command with a @code{\-Thtml}
+option.  If no files are given, @code{grohtml} will read the standard
+input.  A filename of @code{-} will also cause @code{grohtml} to read
+the standard input.  @acronym{HTML} output is written to the standard
+output.  When @code{grohtml} is run by @code{groff}, options can be
+passed to @code{grohtml} using @code{groff}'s @option{-P} option.
+
+@code{grohtml} invokes @code{groff} twice.  In the first pass, pictures,
+equations, and tables are rendered using the @code{ps} device, and in
+the second pass @acronym{HTML} output is generated by the @code{html}
+device.
+
+@code{grohtml} always writes output in @code{UTF-8} encoding and has
+built-in entities for all non-composite unicode characters.  In spite of
+this, @code{groff} may issue warnings about unknown special characters
+if they can't be found during the first pass.  Such warnings can be
+safely ignored unless the special characters appear inside a table or
+equation, in which case glyphs for these characters must be defined for
+the @code{ps} device as well.
+
+This output device is fully documented on its manual page,
+@cite{grohtml(1)}.
+
+@menu
+* Invoking grohtml::
+* grohtml specific registers and strings::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking grohtml, grohtml specific registers and strings, grohtml, grohtml
+@subsection Invoking @code{grohtml}
+@cindex invoking @code{grohtml}
+@cindex @code{grohtml}, invoking
+
+The postprocessor @code{grohtml} accepts the following command-line
+options:
+
+@table @option
+@item -a@var{bits}
+Use this number of @var{bits} (= 1, 2 or 4) for text antialiasing.
+Default: @var{bits} = 4.
+
+@item -a0
+Do not use text antialiasing.
+
+@item -b
+Use white background.
+
+@item -D@var{dir}
+Store rendered images in the directory @file{@var{dir}}.
+
+@item -F@var{dir}
+Put the directory @file{@var{dir}/dev@var{name}} in front of the
+search path for the font, prologue and device description files,
+given the target device @var{name}, usually @strong{html}.
+
+@item -g@var{bits}
+Use this number of @var{bits} (= 1, 2 or 4) for antialiasing of
+drawings.  Default: @var{bits} = 4.
+
+@item -g0
+Do not use antialiasing for drawings.
+
+@item -h
+Use the @code{B} element for section headings.
+
+@item -i@var{resolution}
+Use the @var{resolution} for rendered images.  Default:
+@var{resolution} = 100@dmn{dpi}.
+
+@item -I@var{stem}
+Set the images' @var{stem name}.  Default: @var{stem} =
+@file{grohtml-@var{XXX}} (@var{XXX} is the process ID).
+
+@item -j@var{stem}
+Place each section in a separate file called
+@file{@var{stem}-@var{n}.html} (where @var{n} is a generated section
+number).
+
+@item -l
+Do not generate the table of contents.
+
+@item -n
+Generate simple fragment identifiers.
+
+@item -o@var{offset}
+Use vertical padding @var{offset} for images.
+
+@item -p
+Display the page rendering progress to @code{stderr}.
+
+@item -r
+Do not use horizontal rules to separate headers and footers.
+
+@item -s@var{size}
+Set the base font size, to be modified using the elements @code{BIG}
+and @code{SMALL}.
+
+@item -S@var{level}
+Generate separate files for sections at level @var{level}.
+
+@item -v
+Print the version number.
+
+@item -V
+Generate a validator button at the bottom.
+
+@item -y
+Generate a signature of groff after the validator button, if any.
+@end table
+
+
+@c ---------------------------------------------------------------------
+
+@node grohtml specific registers and strings,  , Invoking grohtml, grohtml
+@subsection @code{grohtml} specific registers and strings
+@cindex registers specific to @code{grohtml}
+@cindex strings specific to @code{grohtml}
+@cindex @code{grohtml}, registers and strings
+
+@DefmpregList {ps4html, grohtml}
+@DefstrListEndx {www-image-template, grohtml}
+The registers @code{ps4html} and @code{www-image-template} are defined
+by the @code{pre-grohtml} preprocessor.  @code{pre-grohtml} reads in the
+@code{troff} input, marks up the inline equations and passes the result
+firstly to
+
+@Example
+troff -Tps -rps4html=1 -dwww-image-template=@var{template}
+@endExample
+
+@noindent
+and secondly to
+
+@Example
+troff -Thtml
+@endExample
+
+@noindent
+or
+
+@Example
+troff -Txhtml
+@endExample
+
+@cindex MathML
+The @sc{PostScript} device is used to create all the image files (for
+@option{-Thtml}; if @option{-Txhtml} is used, all equations are passed
+to @code{geqn} to produce @acronym{MathML}, and the register
+@code{ps4html} enables the macro sets to ignore floating keeps, footers,
+and headings.
+
+The register @code{www-image-template} is set to the user specified
+template name or the default name.
+@endDefmpreg
+
+
+@c =====================================================================
+
+@node gxditview,  , grohtml, Output Devices
+@section @code{gxditview}
+@cindex @code{gxditview}, the program
+
+@c XXX
+
+@menu
+* Invoking gxditview::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Invoking gxditview,  , gxditview, gxditview
+@subsection Invoking @code{gxditview}
+@cindex invoking @code{gxditview}
+@cindex @code{gxditview}, invoking
+
+@c XXX
+@c X11's xditview
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node File formats, Installation, Output Devices, Top
+@chapter File formats
+@cindex file formats
+@cindex formats, file
+
+All files read and written by @code{gtroff} are text files.  The
+following two sections describe their format.
+
+@menu
+* gtroff Output::
+* Font Files::
+@end menu
+
+
+@c =====================================================================
+
+@node gtroff Output, Font Files, File formats, File formats
+@section @code{gtroff} Output
+@cindex @code{gtroff}, output
+@cindex output, @code{gtroff}
+
+This section describes the intermediate output format of GNU
+@code{troff}.  This output is produced by a run of @code{gtroff} before
+it is fed into a device postprocessor program.
+
+As @code{groff} is a wrapper program around @code{gtroff} that
+automatically calls a postprocessor, this output does not show up
+normally.  This is why it is called @dfn{intermediate}.  @code{groff}
+provides the option @option{-Z} to inhibit postprocessing, such that the
+produced intermediate output is sent to standard output just like
+calling @code{gtroff} manually.
+
+@cindex troff output
+@cindex output, troff
+@cindex intermediate output
+@cindex output, intermediate
+Here, the term @dfn{troff output} describes what is output by
+@code{gtroff}, while @dfn{intermediate output} refers to the language
+that is accepted by the parser that prepares this output for the
+postprocessors.  This parser is smarter on whitespace and implements
+obsolete elements for compatibility, otherwise both formats are the
+same.@footnote{The parser and postprocessor for intermediate output can
+be found in the file@*
+@file{@var{groff-source-dir}/src/libs/libdriver/input.cpp}.}
+
+The main purpose of the intermediate output concept is to facilitate the
+development of postprocessors by providing a common programming
+interface for all devices.  It has a language of its own that is
+completely different from the @code{gtroff} language.  While the
+@code{gtroff} language is a high-level programming language for text
+processing, the intermediate output language is a kind of low-level
+assembler language by specifying all positions on the page for writing
+and drawing.
+
+The intermediate output produced by @code{gtroff} is fairly readable,
+while output from @acronym{AT&T} @code{troff} is rather hard to
+understand because of strange habits that are still supported, but not
+used any longer by @code{gtroff}.
+
+@menu
+* Language Concepts::
+* Command Reference::
+* Intermediate Output Examples::
+* Output Language Compatibility::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node Language Concepts, Command Reference, gtroff Output, gtroff Output
+@subsection Language Concepts
+
+During the run of @code{gtroff}, the input data is cracked down to the
+information on what has to be printed at what position on the intended
+device.  So the language of the intermediate output format can be quite
+small.  Its only elements are commands with and without arguments.  In
+this section, the term @dfn{command} always refers to the intermediate
+output language, and never to the @code{gtroff} language used for
+document formatting.  There are commands for positioning and text
+writing, for drawing, and for device controlling.
+
+@menu
+* Separation::
+* Argument Units::
+* Document Parts::
+@end menu
+
+@node Separation, Argument Units, Language Concepts, Language Concepts
+@subsubsection Separation
+
+@acronym{AT&T} @code{troff} output has strange requirements on
+whitespace.  The @code{gtroff} output parser, however, is smart about
+whitespace by making it maximally optional.  The whitespace characters,
+i.e., the tab, space, and newline characters, always have a syntactical
+meaning.  They are never printable because spacing within the output is
+always done by positioning commands.
+
+Any sequence of space or tab characters is treated as a single
+@dfn{syntactical space}.  It separates commands and arguments, but is
+only required when there would occur a clashing between the command code
+and the arguments without the space.  Most often, this happens when
+variable-length command names, arguments, argument lists, or command
+clusters meet.  Commands and arguments with a known, fixed length need
+not be separated by syntactical space.
+
+A line break is a syntactical element, too.  Every command argument can
+be followed by whitespace, a comment, or a newline character.  Thus a
+@dfn{syntactical line break} is defined to consist of optional
+syntactical space that is optionally followed by a comment, and a
+newline character.
+
+The normal commands, those for positioning and text, consist of a single
+letter taking a fixed number of arguments.  For historical reasons, the
+parser allows stacking of such commands on the same line, but
+fortunately, in @code{gtroff}'s intermediate output, every command with
+at least one argument is followed by a line break, thus providing
+excellent readability.
+
+The other commands -- those for drawing and device controlling -- have a
+more complicated structure; some recognize long command names, and some
+take a variable number of arguments.  So all @samp{D} and @samp{x}
+commands were designed to request a syntactical line break after their
+last argument.  Only one command, @w{@samp{x X}}, has an argument that
+can stretch over several lines; all other commands must have all of
+their arguments on the same line as the command, i.e., the arguments may
+not be split by a line break.
+
+Empty lines (these are lines containing only space and/or a comment),
+can occur everywhere.  They are just ignored.
+
+@node Argument Units, Document Parts, Separation, Language Concepts
+@subsubsection Argument Units
+
+Some commands take integer arguments that are assumed to represent
+values in a measurement unit, but the letter for the corresponding scale
+indicator is not written with the output command arguments.  Most
+commands assume the scale indicator @samp{u}, the basic unit of the
+device, some use @samp{z}, the scaled point unit of the device, while
+others, such as the color commands, expect plain integers.
+
+Note that single characters can have the eighth bit set, as can the
+names of fonts and special characters.  The names of characters and
+fonts can be of arbitrary length.  A character that is to be printed is
+always in the current font.
+
+A string argument is always terminated by the next whitespace character
+(space, tab, or newline); an embedded @samp{#} character is regarded as
+part of the argument, not as the beginning of a comment command.  An
+integer argument is already terminated by the next non-digit character,
+which then is regarded as the first character of the next argument or
+command.
+
+@node Document Parts,  , Argument Units, Language Concepts
+@subsubsection Document Parts
+
+A correct intermediate output document consists of two parts, the
+@dfn{prologue} and the @dfn{body}.
+
+The task of the prologue is to set the general device parameters using
+three exactly specified commands.  @code{gtroff}'s prologue is
+guaranteed to consist of the following three lines (in that order):
+
+@Example
+x T @var{device}
+x res @var{n} @var{h} @var{v}
+x init
+@endExample
+
+@noindent
+with the arguments set as outlined in @ref{Device Control Commands}.
+Note that the parser for the intermediate output format is able to
+swallow additional whitespace and comments as well even in the prologue.
+
+The body is the main section for processing the document data.
+Syntactically, it is a sequence of any commands different from the ones
+used in the prologue.  Processing is terminated as soon as the first
+@w{@samp{x stop}} command is encountered; the last line of any
+@code{gtroff} intermediate output always contains such a command.
+
+Semantically, the body is page oriented.  A new page is started by a
+@samp{p} command.  Positioning, writing, and drawing commands are always
+done within the current page, so they cannot occur before the first
+@samp{p} command.  Absolute positioning (by the @samp{H} and @samp{V}
+commands) is done relative to the current page; all other positioning is
+done relative to the current location within this page.
+
+@c ---------------------------------------------------------------------
+
+@node Command Reference, Intermediate Output Examples, Language Concepts, gtroff Output
+@subsection Command Reference
+
+This section describes all intermediate output commands, both from
+@acronym{AT&T} @code{troff} as well as the @code{gtroff} extensions.
+
+@menu
+* Comment Command::
+* Simple Commands::
+* Graphics Commands::
+* Device Control Commands::
+* Obsolete Command::
+@end menu
+
+@node Comment Command, Simple Commands, Command Reference, Command Reference
+@subsubsection Comment Command
+
+@table @code
+@item #@var{anything}@angles{end of line}
+A comment.  Ignore any characters from the @samp{#} character up to the
+next newline character.
+
+This command is the only possibility for commenting in the intermediate
+output.  Each comment can be preceded by arbitrary syntactical space;
+every command can be terminated by a comment.
+@end table
+
+@node Simple Commands, Graphics Commands, Comment Command, Command Reference
+@subsubsection Simple Commands
+
+The commands in this subsection have a command code consisting of a
+single character, taking a fixed number of arguments.  Most of them are
+commands for positioning and text writing.  These commands are smart
+about whitespace.  Optionally, syntactical space can be inserted before,
+after, and between the command letter and its arguments.  All of these
+commands are stackable, i.e., they can be preceded by other simple
+commands or followed by arbitrary other commands on the same line.  A
+separating syntactical space is only necessary when two integer
+arguments would clash or if the preceding argument ends with a string
+argument.
+
+@table @code
+@ignore
+.if (\n[@USE_ENV_STACK] == 1) \{\
+.command {
+Open a new environment by copying the actual device configuration data
+to the environment stack.
+.
+The current environment is setup by the device specification and
+manipulated by the setting commands.
+.
+.
+.command }
+Close the actual environment (opened by a preceding
+.BR { \~command)
+and restore the previous environment from the environment
+stack as the actual device configuration data.
+.
+\}              \" endif @USE_ENV_STACK
+@end ignore
+
+@item C @var{xxx}@angles{whitespace}
+Print a special character named @var{xxx}.  The trailing syntactical
+space or line break is necessary to allow glyph names of arbitrary
+length.  The glyph is printed at the current print position; the glyph's
+size is read from the font file.  The print position is not changed.
+
+@item c @var{g}
+Print glyph@tie{}@var{g} at the current print
+position;@footnote{@samp{c} is actually a misnomer since it outputs a
+glyph.} the glyph's size is read from the font file.  The print position
+is not changed.
+
+@item f @var{n}
+Set font to font number@tie{}@var{n} (a non-negative integer).
+
+@item H @var{n}
+Move right to the absolute vertical position@tie{}@var{n} (a
+non-negative integer in basic units @samp{u} relative to left edge of
+current page.
+
+@item h @var{n}
+Move @var{n} (a non-negative integer) basic units @samp{u} horizontally
+to the right.  The original Unix troff manual allows negative
+values for @var{n} also, but @code{gtroff} doesn't use this.
+
+@item m @var{color-scheme} @r{[}@var{component} @dots{}@r{]}
+Set the color for text (glyphs), line drawing, and the outline of
+graphic objects using different color schemes; the analogous command
+for the filling color of graphic objects is @samp{DF}.  The color
+components are specified as integer arguments between 0 and 65536.  The
+number of color components and their meaning vary for the different
+color schemes.  These commands are generated by @code{gtroff}'s escape
+sequence @code{\m}.  No position changing.  These commands are a
+@code{gtroff} extension.
+
+@table @code
+@item mc @var{cyan} @var{magenta} @var{yellow}
+Set color using the CMY color scheme, having the 3@tie{}color components
+@var{cyan}, @var{magenta}, and @var{yellow}.
+
+@item md
+Set color to the default color value (black in most cases).  No
+component arguments.
+
+@item mg @var{gray}
+Set color to the shade of gray given by the argument, an integer between
+0 (black) and 65536 (white).
+
+@item mk @var{cyan} @var{magenta} @var{yellow} @var{black}
+Set color using the CMYK color scheme, having the 4@tie{}color
+components @var{cyan}, @var{magenta}, @var{yellow}, and @var{black}.
+
+@item mr @var{red} @var{green} @var{blue}
+Set color using the RGB color scheme, having the 3@tie{}color components
+@var{red}, @var{green}, and @var{blue}.
+@end table
+
+@item N @var{n}
+Print glyph with index@tie{}@var{n} (a non-negative integer) of the
+current font.  This command is a @code{gtroff} extension.
+
+@item n @var{b} @var{a}
+Inform the device about a line break, but no positioning is done by this
+command.  In @acronym{AT&T} @code{troff}, the integer arguments @var{b}
+and@tie{}@var{a} informed about the space before and after the current
+line to make the intermediate output more human readable without
+performing any action.  In @code{groff}, they are just ignored, but they
+must be provided for compatibility reasons.
+
+@item p @var{n}
+Begin a new page in the outprint.  The page number is set
+to@tie{}@var{n}.  This page is completely independent of pages formerly
+processed even if those have the same page number.  The vertical
+position on the outprint is automatically set to@tie{}0.  All
+positioning, writing, and drawing is always done relative to a page, so
+a @samp{p} command must be issued before any of these commands.
+
+@item s @var{n}
+Set point size to @var{n}@tie{}scaled points (this is unit @samp{z}).
+@acronym{AT&T} @code{troff} used the unit points (@samp{p}) instead.
+@xref{Output Language Compatibility}.
+
+@item t @var{xxx}@angles{whitespace}
+@itemx t @var{xxx} @var{dummy-arg}@angles{whitespace}
+Print a word, i.e., a sequence of characters @var{xxx} representing
+output glyphs which names are single characters, terminated by a space
+character or a line break; an optional second integer argument is
+ignored (this allows the formatter to generate an even number of
+arguments).  The first glyph should be printed at the current position,
+the current horizontal position should then be increased by the width of
+the first glyph, and so on for each glyph.  The widths of the glyphs are
+read from the font file, scaled for the current point size, and rounded
+to a multiple of the horizontal resolution.  Special characters cannot
+be printed using this command (use the @samp{C} command for special
+characters).  This command is a @code{gtroff} extension; it is only used
+for devices whose @file{DESC} file contains the @code{tcommand} keyword
+(@pxref{DESC File Format}).
+
+@item u @var{n} @var{xxx}@angles{whitespace}
+Print word with track kerning.  This is the same as the @samp{t} command
+except that after printing each glyph, the current horizontal position
+is increased by the sum of the width of that glyph and@tie{}@var{n} (an
+integer in basic units @samp{u}).  This command is a @code{gtroff}
+extension; it is only used for devices whose @file{DESC} file contains
+the @code{tcommand} keyword (@pxref{DESC File Format}).
+
+@item V @var{n}
+Move down to the absolute vertical position@tie{}@var{n} (a non-negative
+integer in basic units @samp{u}) relative to upper edge of current page.
+
+@item v @var{n}
+Move @var{n}@tie{}basic units @samp{u} down (@var{n} is a non-negative
+integer).  The original Unix troff manual allows negative values for
+@var{n} also, but @code{gtroff} doesn't use this.
+
+@item w
+Informs about a paddable white space to increase readability.  The
+spacing itself must be performed explicitly by a move command.
+@end table
+
+@node Graphics Commands, Device Control Commands, Simple Commands, Command Reference
+@subsubsection Graphics Commands
+
+Each graphics or drawing command in the intermediate output starts with
+the letter @samp{D}, followed by one or two characters that specify a
+subcommand; this is followed by a fixed or variable number of integer
+arguments that are separated by a single space character.  A @samp{D}
+command may not be followed by another command on the same line (apart
+from a comment), so each @samp{D} command is terminated by a syntactical
+line break.
+
+@code{gtroff} output follows the classical spacing rules (no space
+between command and subcommand, all arguments are preceded by a single
+space character), but the parser allows optional space between the
+command letters and makes the space before the first argument optional.
+As usual, each space can be any sequence of tab and space characters.
+
+Some graphics commands can take a variable number of arguments.  In this
+case, they are integers representing a size measured in basic units
+@samp{u}.  The arguments called @var{h1}, @var{h2}, @dots{}, @var{hn}
+stand for horizontal distances where positive means right, negative
+left.  The arguments called @var{v1}, @var{v2}, @dots{}, @var{vn} stand
+for vertical distances where positive means down, negative up.  All
+these distances are offsets relative to the current location.
+
+Each graphics command directly corresponds to a similar @code{gtroff}
+@code{\D} escape sequence.  @xref{Drawing Requests}.
+
+Unknown @samp{D} commands are assumed to be device-specific.  Its
+arguments are parsed as strings; the whole information is then sent to
+the postprocessor.
+
+In the following command reference, the syntax element @angles{line
+break} means a syntactical line break as defined above.
+
+@table @code
+@item D~ @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
+Draw B-spline from current position to offset (@var{h1},@var{v1}), then
+to offset (@var{h2},@var{v2}), if given, etc.@: up to
+(@var{hn},@var{vn}).  This command takes a variable number of argument
+pairs; the current position is moved to the terminal point of the drawn
+curve.
+
+@item Da @var{h1} @var{v1} @var{h2} @var{v2}@angles{line break}
+Draw arc from current position to
+(@var{h1},@var{v1})@math{+}(@var{h2},@var{v2}) with center at
+(@var{h1},@var{v1}); then move the current position to the final point
+of the arc.
+
+@item DC @var{d}@angles{line break}
+@itemx DC @var{d} @var{dummy-arg}@angles{line break}
+Draw a solid circle using the current fill color with
+diameter@tie{}@var{d} (integer in basic units @samp{u}) with leftmost
+point at the current position; then move the current position to the
+rightmost point of the circle.  An optional second integer argument is
+ignored (this allows the formatter to generate an even number of
+arguments).  This command is a @code{gtroff} extension.
+
+@item Dc @var{d}@angles{line break}
+Draw circle line with diameter@tie{}@var{d} (integer in basic units
+@samp{u}) with leftmost point at the current position; then move the
+current position to the rightmost point of the circle.
+
+@item DE @var{h} @var{v}@angles{line break}
+Draw a solid ellipse in the current fill color with a horizontal
+diameter of@tie{}@var{h} and a vertical diameter of@tie{}@var{v} (both
+integers in basic units @samp{u}) with the leftmost point at the current
+position; then move to the rightmost point of the ellipse.  This command
+is a @code{gtroff} extension.
+
+@item De @var{h} @var{v}@angles{line break}
+Draw an outlined ellipse with a horizontal diameter of@tie{}@var{h} and
+a vertical diameter of@tie{}@var{v} (both integers in basic units
+@samp{u}) with the leftmost point at current position; then move to the
+rightmost point of the ellipse.
+
+@item DF @var{color-scheme} @r{[}@var{component} @dots{}@r{]}@angles{line break}
+Set fill color for solid drawing objects using different color schemes;
+the analogous command for setting the color of text, line graphics, and
+the outline of graphic objects is @samp{m}.  The color components are
+specified as integer arguments between 0 and 65536.  The number of color
+components and their meaning vary for the different color schemes.
+These commands are generated by @code{gtroff}'s escape sequences
+@w{@code{\D'F @dots{}'}} and @code{\M} (with no other corresponding
+graphics commands).  No position changing.  This command is a
+@code{gtroff} extension.
+
+@table @code
+@item DFc @var{cyan} @var{magenta} @var{yellow}@angles{line break}
+Set fill color for solid drawing objects using the CMY color scheme,
+having the 3@tie{}color components @var{cyan}, @var{magenta}, and
+@var{yellow}.
+
+@item DFd@angles{line break}
+Set fill color for solid drawing objects to the default fill color value
+(black in most cases).  No component arguments.
+
+@item DFg @var{gray}@angles{line break}
+Set fill color for solid drawing objects to the shade of gray given by
+the argument, an integer between 0 (black) and 65536 (white).
+
+@item DFk @var{cyan} @var{magenta} @var{yellow} @var{black}@angles{line break}
+Set fill color for solid drawing objects using the CMYK color scheme,
+having the 4@tie{}color components @var{cyan}, @var{magenta},
+@var{yellow}, and @var{black}.
+
+@item DFr @var{red} @var{green} @var{blue}@angles{line break}
+Set fill color for solid drawing objects using the RGB color scheme,
+having the 3@tie{}color components @var{red}, @var{green}, and
+@var{blue}.
+@end table
+
+@item Df @var{n}@angles{line break}
+The argument@tie{}@var{n} must be an integer in the range @math{-32767}
+to 32767.
+
+@table @asis
+@item @math{0 @value{LE} @var{n} @value{LE} 1000}
+Set the color for filling solid drawing objects to a shade of gray,
+where 0 corresponds to solid white, 1000 (the default) to solid black,
+and values in between to intermediate shades of gray; this is obsoleted
+by command @samp{DFg}.
+
+@item @math{@var{n} < 0} or @math{@var{n} > 1000}
+Set the filling color to the color that is currently being used for the
+text and the outline, see command @samp{m}.  For example, the command
+sequence
+
+@Example
+mg 0 0 65536
+Df -1
+@endExample
+
+@noindent
+sets all colors to blue.
+@end table
+
+@noindent
+No position changing.  This command is a @code{gtroff} extension.
+
+@item Dl @var{h} @var{v}@angles{line break}
+Draw line from current position to offset (@var{h},@var{v}) (integers in
+basic units @samp{u}); then set current position to the end of the drawn
+line.
+
+@item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
+Draw a polygon line from current position to offset (@var{h1},@var{v1}),
+from there to offset (@var{h2},@var{v2}), etc.@: up to offset
+(@var{hn},@var{vn}), and from there back to the starting position.  For
+historical reasons, the position is changed by adding the sum of all
+arguments with odd index to the actual horizontal position and the even
+ones to the vertical position.  Although this doesn't make sense it is
+kept for compatibility.
+@ignore
+As the polygon is closed, the end of drawing is the starting point, so
+the position doesn't change.
+@end ignore
+This command is a @code{gtroff} extension.
+
+@item DP @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
+Draw a solid polygon in the current fill color rather than an outlined
+polygon, using the same arguments and positioning as the corresponding
+@samp{Dp} command.
+@ignore
+No position changing.
+@end ignore
+This command is a @code{gtroff} extension.
+
+@item Dt @var{n}@angles{line break}
+Set the current line thickness to@tie{}@var{n} (an integer in basic
+units @samp{u}) if @math{@var{n}>0}; if @math{@var{n}=0} select the
+smallest available line thickness; if @math{@var{n}<0} set the line
+thickness proportional to the point size (this is the default before the
+first @samp{Dt} command was specified).  For historical reasons, the
+horizontal position is changed by adding the argument to the actual
+horizontal position, while the vertical position is not changed.
+Although this doesn't make sense it is kept for compatibility.
+@ignore
+No position changing.
+@end ignore
+This command is a @code{gtroff} extension.
+@end table
+
+@node Device Control Commands, Obsolete Command, Graphics Commands, Command Reference
+@subsubsection Device Control Commands
+
+Each device control command starts with the letter @samp{x}, followed by
+a space character (optional or arbitrary space or tab in @code{gtroff})
+and a subcommand letter or word; each argument (if any) must be preceded
+by a syntactical space.  All @samp{x} commands are terminated by a
+syntactical line break; no device control command can be followed by
+another command on the same line (except a comment).
+
+The subcommand is basically a single letter, but to increase
+readability, it can be written as a word, i.e., an arbitrary sequence of
+characters terminated by the next tab, space, or newline character.  All
+characters of the subcommand word but the first are simply ignored.  For
+example, @code{gtroff} outputs the initialization command @w{@samp{x i}}
+as @w{@samp{x init}} and the resolution command @w{@samp{x r}} as
+@w{@samp{x res}}.
+
+In the following, the syntax element @angles{line break} means a
+syntactical line break (@pxref{Separation}).
+
+@table @code
+@item xF @var{name}@angles{line break}
+The @samp{F} stands for @var{Filename}.
+
+Use @var{name} as the intended name for the current file in error
+reports.  This is useful for remembering the original file name when
+@code{gtroff} uses an internal piping mechanism.  The input file is not
+changed by this command.  This command is a @code{gtroff} extension.
+
+@item xf @var{n} @var{s}@angles{line break}
+The @samp{f} stands for @var{font}.
+
+Mount font position@tie{}@var{n} (a non-negative integer) with font
+named@tie{}@var{s} (a text word).  @xref{Font Positions}.
+
+@item xH @var{n}@angles{line break}
+The @samp{H} stands for @var{Height}.
+
+Set glyph height to@tie{}@var{n} (a positive integer in scaled points
+@samp{z}).  @acronym{AT&T} @code{troff} uses the unit points (@samp{p})
+instead.  @xref{Output Language Compatibility}.
+
+@item xi@angles{line break}
+The @samp{i} stands for @var{init}.
+
+Initialize device.  This is the third command of the prologue.
+
+@item xp@angles{line break}
+The @samp{p} stands for @var{pause}.
+
+Parsed but ignored.  The original Unix troff manual writes
+
+@display
+pause device, can be restarted
+@end display
+
+@item xr @var{n} @var{h} @var{v}@angles{line break}
+The @samp{r} stands for @var{resolution}.
+
+Resolution is@tie{}@var{n}, while @var{h} is the minimal horizontal
+motion, and @var{v} the minimal vertical motion possible with this
+device; all arguments are positive integers in basic units @samp{u} per
+inch.  This is the second command of the prologue.
+
+@item xS @var{n}@angles{line break}
+The @samp{S} stands for @var{Slant}.
+
+Set slant to@tie{}@var{n} (an integer in basic units @samp{u}).
+
+@item xs@angles{line break}
+The @samp{s} stands for @var{stop}.
+
+Terminates the processing of the current file; issued as the last
+command of any intermediate troff output.
+
+@item xt@angles{line break}
+The @samp{t} stands for @var{trailer}.
+
+Generate trailer information, if any.  In @var{gtroff}, this is actually
+just ignored.
+
+@item xT @var{xxx}@angles{line break}
+The @samp{T} stands for @var{Typesetter}.
+
+Set name of device to word @var{xxx}, a sequence of characters ended by
+the next white space character.  The possible device names coincide with
+those from the @code{groff} @option{-T} option.  This is the first
+command of the prologue.
+
+@item xu @var{n}@angles{line break}
+The @samp{u} stands for @var{underline}.
+
+Configure underlining of spaces.  If @var{n} is@tie{}1, start
+underlining of spaces; if @var{n} is@tie{}0, stop underlining of spaces.
+This is needed for the @code{cu} request in nroff mode and is ignored
+otherwise.  This command is a @code{gtroff} extension.
+
+@item xX @var{anything}@angles{line break}
+The @samp{x} stands for @var{X-escape}.
+
+Send string @var{anything} uninterpreted to the device.  If the line
+following this command starts with a @samp{+} character this line is
+interpreted as a continuation line in the following sense.  The @samp{+}
+is ignored, but a newline character is sent instead to the device, the
+rest of the line is sent uninterpreted.  The same applies to all
+following lines until the first character of a line is not a @samp{+}
+character.  This command is generated by the @code{gtroff} escape
+sequence @code{\X}.  The line-continuing feature is a @code{gtroff}
+extension.
+@end table
+
+@node Obsolete Command,  , Device Control Commands, Command Reference
+@subsubsection Obsolete Command
+In @acronym{AT&T} @code{troff} output, the writing of a single glyph is
+mostly done by a very strange command that combines a horizontal move
+and a single character giving the glyph name.  It doesn't have a command
+code, but is represented by a 3-character argument consisting of exactly
+2@tie{}digits and a character.
+
+@table @asis
+@item @var{dd}@var{g}
+Move right @var{dd} (exactly two decimal digits) basic units @samp{u},
+then print glyph@tie{}@var{g} (represented as a single character).
+
+In @code{gtroff}, arbitrary syntactical space around and within this
+command is allowed to be added.  Only when a preceding command on the
+same line ends with an argument of variable length a separating space is
+obligatory.  In @acronym{AT&T} @code{troff}, large clusters of these and
+other commands are used, mostly without spaces; this made such output
+almost unreadable.
+@end table
+
+For modern high-resolution devices, this command does not make sense
+because the width of the glyphs can become much larger than two decimal
+digits.  In @code{gtroff}, this is only used for the devices @code{X75},
+@code{X75-12}, @code{X100}, and @code{X100-12}.  For other devices, the
+commands @samp{t} and @samp{u} provide a better functionality.
+
+@c ---------------------------------------------------------------------
+
+@node Intermediate Output Examples, Output Language Compatibility, Command Reference, gtroff Output
+@subsection Intermediate Output Examples
+
+This section presents the intermediate output generated from the same
+input for three different devices.  The input is the sentence @samp{hell
+world} fed into @code{gtroff} on the command line.
+
+@table @asis
+@item High-resolution device @code{ps}
+
+This is the standard output of @code{gtroff} if no @option{-T} option is
+given.
+
+@example
+@group
+shell> echo "hell world" | groff -Z -T ps
+
+x T ps
+x res 72000 1 1
+x init
+@end group
+p1
+x font 5 TR
+f5
+s10000
+V12000
+H72000
+thell
+wh2500
+tw
+H96620
+torld
+n12000 0
+@group
+x trailer
+V792000
+x stop
+@end group
+@end example
+
+@noindent
+This output can be fed into @code{grops} to get its representation as a
+@sc{PostScript} file.
+
+@item Low-resolution device @code{latin1}
+
+This is similar to the high-resolution device except that the
+positioning is done at a minor scale.  Some comments (lines starting
+with @samp{#}) were added for clarification; they were not generated by
+the formatter.
+
+@example
+@group
+shell> echo "hell world" | groff -Z -T latin1
+
+# prologue
+x T latin1
+x res 240 24 40
+x init
+@end group
+# begin a new page
+p1
+# font setup
+x font 1 R
+f1
+s10
+# initial positioning on the page
+V40
+H0
+# write text `hell'
+thell
+# inform about space, and issue a horizontal jump
+wh24
+# write text `world'
+tworld
+# announce line break, but do nothing because ...
+n40 0
+@group
+# ... the end of the document has been reached
+x trailer
+V2640
+x stop
+@end group
+@end example
+
+@noindent
+This output can be fed into @code{grotty} to get a formatted text
+document.
+
+@item @acronym{AT&T} @code{troff} output
+Since a computer monitor has a very low resolution compared to modern
+printers the intermediate output for the X@tie{}Window devices can use
+the jump-and-write command with its 2-digit displacements.
+
+@example
+@group
+shell> echo "hell world" | groff -Z -T X100
+
+x T X100
+x res 100 1 1
+x init
+@end group
+p1
+x font 5 TR
+f5
+s10
+V16
+H100
+# write text with jump-and-write commands
+ch07e07l03lw06w11o07r05l03dh7
+n16 0
+@group
+x trailer
+V1100
+x stop
+@end group
+@end example
+
+@noindent
+This output can be fed into @code{xditview} or @code{gxditview} for
+displaying in@tie{}X.
+
+Due to the obsolete jump-and-write command, the text clusters in the
+@acronym{AT&T} @code{troff} output are almost unreadable.
+@end table
+
+@c ---------------------------------------------------------------------
+
+@node Output Language Compatibility,  , Intermediate Output Examples, gtroff Output
+@subsection Output Language Compatibility
+
+The intermediate output language of @acronym{AT&T} @code{troff} was
+first documented in the Unix troff manual, with later additions
+documented in @cite{A Typesetter-independent TROFF}, written by Brian
+Kernighan.
+
+The @code{gtroff} intermediate output format is compatible with this
+specification except for the following features.
+
+@itemize @bullet
+@item
+The classical quasi device independence is not yet implemented.
+
+@item
+The old hardware was very different from what we use today.  So the
+@code{groff} devices are also fundamentally different from the ones
+in @acronym{AT&T} @code{troff}.  For example, the @acronym{AT&T}
+@sc{PostScript} device is called @code{post} and has a resolution of
+only 720 units per inch, suitable for printers 20 years ago, while
+@code{groff}'s @code{ps} device has a resolution of 72000 units per
+inch.  Maybe, by implementing some rescaling mechanism similar to the
+classical quasi device independence, @code{groff} could emulate
+@acronym{AT&T}'s @code{post} device.
+
+@item
+The B-spline command @samp{D~} is correctly handled by the intermediate
+output parser, but the drawing routines aren't implemented in some of
+the postprocessor programs.
+
+@item
+The argument of the commands @samp{s} and @w{@samp{x H}} has the
+implicit unit scaled point @samp{z} in @code{gtroff}, while
+@acronym{AT&T} @code{troff} has point (@samp{p}).  This isn't an
+incompatibility but a compatible extension, for both units coincide for
+all devices without a @code{sizescale} parameter in the @file{DESC}
+file, including all postprocessors from @acronym{AT&T} and
+@code{groff}'s text devices.  The few @code{groff} devices with a
+@code{sizescale} parameter either do not exist for @acronym{AT&T}
+@code{troff}, have a different name, or seem to have a different
+resolution.  So conflicts are very unlikely.
+
+@item
+The position changing after the commands @samp{Dp}, @samp{DP}, and
+@samp{Dt} is illogical, but as old versions of @code{gtroff} used this
+feature it is kept for compatibility reasons.
+
+@ignore
+Temporarily, there existed some confusion on the positioning after the
+@samp{D} commands that are groff extensions.  This has been clarified by
+establishing the classical rule for all @code{groff} drawing commands:
+
+@itemize
+@item
+The position after a graphic object has been drawn is at its end; for
+circles and ellipses, the `end' is at the right side.
+
+@item
+From this, the positionings specified for the drawing commands above
+follow quite naturally.
+@end itemize
+@end ignore
+
+@end itemize
+
+
+@c =====================================================================
+
+@node Font Files,  , gtroff Output, File formats
+@section Font Files
+@cindex font files
+@cindex files, font
+
+The @code{gtroff} font format is roughly a superset of the
+@code{ditroff} font format (as used in later versions of @acronym{AT&T}
+@code{troff} and its descendants).  Unlike the @code{ditroff} font
+format, there is no associated binary format; all files are text
+files.@footnote{Plan@tie{}9 @code{troff} has also abandoned the binary
+format.}  The font files for device @var{name} are stored in a directory
+@file{dev@var{name}}.  There are two types of file: a device description
+file called @file{DESC} and for each font@tie{}@var{f} a font file
+called@tie{}@file{@var{f}}.
+
+@menu
+* DESC File Format::
+* Font File Format::
+@end menu
+
+@c ---------------------------------------------------------------------
+
+@node DESC File Format, Font File Format, Font Files, Font Files
+@subsection @file{DESC} File Format
+@cindex @file{DESC} file, format
+@cindex font description file, format
+@cindex format of font description file
+@pindex DESC@r{ file format}
+
+The @file{DESC} file can contain the following types of line.  Except
+for the @code{charset} keyword, which must come last (if at all), the
+order of the lines is not important.  Later entries in the file,
+however, override previous values.
+
+@table @code
+@item charset
+@kindex charset
+This line and everything following in the file are ignored.  It is
+allowed for the sake of backwards compatibility.
+
+@item family @var{fam}
+@kindex family
+The default font family is @var{fam}.
+
+@item fonts @var{n} @var{F1} @var{F2} @var{F3} @dots{} @var{Fn}
+@kindex fonts
+Fonts @var{F1} @dots{} @var{Fn} are mounted in the font positions
+@var{m}+1, @dots{}, @var{m}+@var{n} where @var{m} is the number of
+styles.  This command may extend over more than one line.  A font name
+of@tie{}0 means no font is mounted on the corresponding font position.
+
+@item hor @var{n}
+@kindex hor
+@cindex horizontal resolution
+@cindex resolution, horizontal
+The horizontal resolution is @var{n}@tie{}machine units.  All horizontal
+quantities are rounded to be multiples of this value.
+
+@item image_generator @var{string}
+@kindex image_generator
+@cindex PostScript, PNG image generation
+@cindex PNG image generation from PostScript
+Needed for @code{grohtml} only.  It specifies the program to generate
+PNG images from @sc{PostScript} input.  Under GNU/Linux this is
+usually @code{gs} but under other systems (notably cygwin) it might
+be set to another name.
+
+@item paperlength @var{n}
+@kindex paperlength
+The physical vertical dimension of the output medium in machine units.
+This isn't used by @code{troff} itself but by output devices.
+Deprecated.  Use @code{papersize} instead.
+
+@item papersize @var{string} @dots{}
+@kindex papersize
+Select a paper size.  Valid values for @var{string} are the ISO paper
+types @code{A0}--@code{A7}, @code{B0}--@code{B7}, @code{C0}--@code{C7},
+@code{D0}--@code{D7}, @code{DL}, and the US paper types @code{letter},
+@code{legal}, @code{tabloid}, @code{ledger}, @code{statement},
+@code{executive}, @code{com10}, and @code{monarch}.  Case is not
+significant for @var{string} if it holds predefined paper types.
+Alternatively, @var{string} can be a file name (e.g.@:
+@file{/etc/papersize}); if the file can be opened, @code{groff} reads
+the first line and tests for the above paper sizes.  Finally,
+@var{string} can be a custom paper size in the format
+@code{@var{length},@var{width}} (no spaces before and after the comma).
+Both @var{length} and @var{width} must have a unit appended; valid
+values are @samp{i} for inches, @samp{c} for centimeters, @samp{p} for
+points, and @samp{P} for picas.  Example: @code{12c,235p}.  An argument
+that starts with a digit is always treated as a custom paper format.
+@code{papersize} sets both the vertical and horizontal dimension of the
+output medium.
+
+More than one argument can be specified; @code{groff} scans from left to
+right and uses the first valid paper specification.
+
+@item paperwidth @var{n}
+@kindex paperwidth
+The physical horizontal dimension of the output medium in machine units.
+This isn't used by @code{troff} itself but by output devices.
+Deprecated.  Use @code{papersize} instead.
+
+@item pass_filenames
+@kindex pass_filenames
+Tell @code{gtroff} to emit the name of the source file currently being
+processed.  This is achieved by the intermediate output command
+@samp{F}.  Currently, this is only used by the @code{grohtml} output
+device.
+
+@item postpro @var{program}
+@kindex postpro
+Call @var{program} as a postprocessor.  For example, the line
+
+@Example
+postpro grodvi
+@endExample
+
+@noindent
+in the file @file{devdvi/DESC} makes @code{groff} call @code{grodvi} if
+option @option{-Tdvi} is given (and @option{-Z} isn't used).
+
+@item prepro @var{program}
+@kindex prepro
+Call @var{program} as a preprocessor.  Currently, this keyword is used
+by @code{groff} with option @option{-Thtml} or @option{-Txhtml} only.
+
+@item print @var{program}
+@kindex print
+Use @var{program} as a spooler program for printing.  If omitted, the
+@option{-l} and @option{-L} options of @code{groff} are ignored.
+
+@item res @var{n}
+@kindex res
+@cindex device resolution
+@cindex resolution, device
+There are @var{n}@tie{}machine units per inch.
+
+@item sizes @var{s1} @var{s2} @dots{} @var{sn} 0
+@kindex sizes
+This means that the device has fonts at @var{s1}, @var{s2}, @dots{}
+@var{sn} scaled points.  The list of sizes must be terminated by@tie{}0
+(this is digit zero).  Each @var{si} can also be a range of sizes
+@var{m}--@var{n}.  The list can extend over more than one line.
+
+@item sizescale @var{n}
+@kindex sizescale
+The scale factor for point sizes.  By default this has a value
+of@tie{}1.  One scaled point is equal to one point/@var{n}.  The
+arguments to the @code{unitwidth} and @code{sizes} commands are given in
+scaled points.  @xref{Fractional Type Sizes}, for more information.
+
+@item styles @var{S1} @var{S2} @dots{} @var{Sm}
+@kindex styles
+The first @var{m}@tie{}font positions are associated with styles
+@var{S1} @dots{} @var{Sm}.
+
+@item tcommand
+@kindex tcommand
+This means that the postprocessor can handle the @samp{t} and @samp{u}
+intermediate output commands.
+
+@item unicode
+@kindex unicode
+Indicate that the output device supports the complete Unicode
+repertoire.  Useful only for devices that produce @emph{character
+entities} instead of glyphs.
+
+If @code{unicode} is present, no @code{charset} section is required in
+the font description files since the Unicode handling built into
+@code{groff} is used.  However, if there are entries in a @code{charset}
+section, they either override the default mappings for those particular
+characters or add new mappings (normally for composite characters).
+
+This is used for @option{-Tutf8}, @option{-Thtml}, and @option{-Txhtml}.
+
+@item unitwidth @var{n}
+@kindex unitwidth
+Quantities in the font files are given in machine units for fonts whose
+point size is @var{n}@tie{}scaled points.
+
+@item unscaled_charwidths
+@kindex unscaled_charwidths
+Make the font handling module always return unscaled character widths.
+Needed for the @code{grohtml} device.
+
+@item use_charnames_in_special
+@kindex use_charnames_in_special
+This command indicates that @code{gtroff} should encode special
+characters inside special commands.  Currently, this is only used by the
+@code{grohtml} output device.  @xref{Postprocessor Access}.
+
+@item vert @var{n}
+@kindex vert
+@cindex vertical resolution
+@cindex resolution, vertical
+The vertical resolution is @var{n}@tie{}machine units.  All vertical
+quantities are rounded to be multiples of this value.
+@end table
+
+The @code{res}, @code{unitwidth}, @code{fonts}, and @code{sizes} lines
+are mandatory.  Other commands are ignored by @code{gtroff} but may be
+used by postprocessors to store arbitrary information about the device
+in the @file{DESC} file.
+
+@kindex spare1
+@kindex spare2
+@kindex biggestfont
+Here a list of obsolete keywords that are recognized by @code{groff}
+but completely ignored: @code{spare1}, @code{spare2},
+@code{biggestfont}.
+
+@c ---------------------------------------------------------------------
+
+@node Font File Format,  , DESC File Format, Font Files
+@subsection Font File Format
+@cindex font file, format
+@cindex font description file, format
+@cindex format of font files
+@cindex format of font description files
+
+A @dfn{font file}, also (and probably better) called a @dfn{font
+description file}, has two sections.  The first section is a sequence of
+lines each containing a sequence of blank delimited words; the first
+word in the line is a key, and subsequent words give a value for that
+key.
+
+@table @code
+@item name @var{f}
+@kindex name
+The name of the font is@tie{}@var{f}.
+
+@item spacewidth @var{n}
+@kindex spacewidth
+The normal width of a space is@tie{}@var{n}.
+
+@item slant @var{n}
+@kindex slant
+The glyphs of the font have a slant of @var{n}@tie{}degrees.  (Positive
+means forward.)
+
+@item ligatures @var{lig1} @var{lig2} @dots{} @var{lign} [0]
+@kindex ligatures
+Glyphs @var{lig1}, @var{lig2}, @dots{}, @var{lign} are ligatures;
+possible ligatures are @samp{ff}, @samp{fi}, @samp{fl}, @samp{ffi} and
+@samp{ffl}.  For backwards compatibility, the list of ligatures may be
+terminated with a@tie{}0.  The list of ligatures may not extend over
+more than one line.
+
+@item special
+@cindex special fonts
+@kindex special
+The font is @dfn{special}; this means that when a glyph is requested
+that is not present in the current font, it is searched for in any
+special fonts that are mounted.
+@end table
+
+Other commands are ignored by @code{gtroff} but may be used by
+postprocessors to store arbitrary information about the font in the font
+file.
+
+@cindex comments in font files
+@cindex font files, comments
+@kindex #
+The first section can contain comments, which start with the @samp{#}
+character and extend to the end of a line.
+
+The second section contains one or two subsections.  It must contain a
+@code{charset} subsection and it may also contain a @code{kernpairs}
+subsection.  These subsections can appear in any order.  Each subsection
+starts with a word on a line by itself.
+
+@kindex charset
+The word @code{charset} starts the character set
+subsection.@footnote{This keyword is misnamed since it starts a list of
+ordered glyphs, not characters.}  The @code{charset} line is followed by
+a sequence of lines.  Each line gives information for one glyph.  A line
+comprises a number of fields separated by blanks or tabs.  The format is
+
+@quotation
+@var{name} @var{metrics} @var{type} @var{code} [@var{entity-name}]
+[@code{--} @var{comment}]
+@end quotation
+
+@cindex 8-bit input
+@cindex input, 8-bit
+@cindex accessing unnamed glyphs with @code{\N}
+@cindex unnamed glyphs, accessing with @code{\N}
+@cindex characters, unnamed, accessing with @code{\N}
+@cindex glyphs, unnamed, accessing with @code{\N}
+@kindex ---
+@noindent
+@var{name} identifies the glyph name@footnote{The distinction between
+input, characters, and output, glyphs, is not clearly separated in the
+terminology of @code{groff}; for example, the @code{char} request should
+be called @code{glyph} since it defines an output entity.}: If
+@var{name} is a single character@tie{}@var{c} then it corresponds to the
+@code{gtroff} input character@tie{}@var{c}; if it is of the form
+@samp{\@var{c}} where @var{c} is a single character, then it corresponds
+to the special character @code{\[@var{c}]}; otherwise it corresponds to
+the special character @samp{\[@var{name}]}.  If it is exactly two
+characters @var{xx} it can be entered as @samp{\(@var{xx}}.  Note that
+single-letter special characters can't be accessed as @samp{\@var{c}};
+the only exception is @samp{\-}, which is identical to @code{\[-]}.
+
+@code{gtroff} supports 8-bit input characters; however some utilities
+have difficulties with eight-bit characters.  For this reason, there is
+a convention that the entity name @samp{char@var{n}} is equivalent to
+the single input character whose code is@tie{}@var{n}.  For example,
+@samp{char163} would be equivalent to the character with code@tie{}163,
+which is the pounds sterling sign in the ISO@tie{}@w{Latin-1} character
+set.  You shouldn't use @samp{char@var{n}} entities in font description
+files since they are related to input, not output.  Otherwise, you get
+hard-coded connections between input and output encoding, which prevents
+use of different (input) character sets.
+
+The name @samp{---} is special and indicates that the glyph is unnamed;
+such glyphs can only be used by means of the @code{\N} escape sequence
+in @code{gtroff}.
+
+The @var{type} field gives the glyph type:
+
+@table @code
+@item 1
+the glyph has a descender, for example, @samp{p};
+
+@item 2
+the glyph has an ascender, for example, @samp{b};
+
+@item 3
+the glyph has both an ascender and a descender, for example, @samp{(}.
+@end table
+
+The @var{code} field gives the code that the postprocessor uses to
+print the glyph.  The glyph can also be input to @code{gtroff} using
+this code by means of the @code{\N} escape sequence.  @var{code} can be
+any integer.  If it starts with @samp{0} it is interpreted as octal; if
+it starts with @samp{0x} or @samp{0X} it is interpreted as hexadecimal.
+Note, however, that the @code{\N} escape sequence only accepts a decimal
+integer.
+
+The @var{entity-name} field gives an @acronym{ASCII} string identifying
+the glyph that the postprocessor uses to print the @code{gtroff} glyph
+@var{name}.  This field is optional and has been introduced so that the
+@code{grohtml} device driver can encode its character set.  For example,
+the glyph @samp{\[Po]} is represented as @samp{&pound;} in
+@acronym{HTML} 4.0.
+
+Anything on the line after the @var{entity-name} field resp.@: after
+@samp{--} is ignored.
+
+The @var{metrics} field has the form:
+
+@display
+@group
+@var{width}[@code{,}@var{height}[@code{,}@var{depth}[@code{,}@var{italic-correction}
+  [@code{,}@var{left-italic-correction}[@code{,}@var{subscript-correction}]]]]]
+@end group
+@end display
+
+@noindent
+There must not be any spaces between these subfields (it has been split
+here into two lines for better legibility only).  Missing subfields are
+assumed to be@tie{}0.  The subfields are all decimal integers.  Since
+there is no associated binary format, these values are not required to
+fit into a variable of type @samp{char} as they are in @code{ditroff}.
+The @var{width} subfield gives the width of the glyph.  The @var{height}
+subfield gives the height of the glyph (upwards is positive); if a glyph
+does not extend above the baseline, it should be given a zero height,
+rather than a negative height.  The @var{depth} subfield gives the depth
+of the glyph, that is, the distance from the baseline to the lowest
+point below the baseline to which the glyph extends (downwards is
+positive); if a glyph does not extend below the baseline, it should be
+given a zero depth, rather than a negative depth.  The
+@var{italic-correction} subfield gives the amount of space that should
+be added after the glyph when it is immediately to be followed by a
+glyph from a roman font.  The @var{left-italic-correction} subfield
+gives the amount of space that should be added before the glyph when it
+is immediately to be preceded by a glyph from a roman font.  The
+@var{subscript-correction} gives the amount of space that should be
+added after a glyph before adding a subscript.  This should be less than
+the italic correction.
+
+A line in the @code{charset} section can also have the format
+
+@Example
+@var{name} "
+@endExample
+
+@noindent
+This indicates that @var{name} is just another name for the glyph
+mentioned in the preceding line.
+
+@kindex kernpairs
+The word @code{kernpairs} starts the kernpairs section.  This contains a
+sequence of lines of the form:
+
+@Example
+@var{c1} @var{c2} @var{n}
+@endExample
+
+@noindent
+This means that when glyph @var{c1} appears next to glyph @var{c2} the
+space between them should be increased by@tie{}@var{n}.  Most entries in
+the kernpairs section have a negative value for@tie{}@var{n}.
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Installation, Copying This Manual, File formats, Top
+@chapter Installation
+@cindex installation
+
+@c XXX
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Copying This Manual, Request Index, Installation, Top
+@appendix Copying This Manual
+
+@include fdl.texi
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Request Index, Escape Index, Copying This Manual, Top
+@appendix Request Index
+
+Requests appear without the leading control character (normally either
+@samp{.} or @samp{'}).
+
+@printindex rq
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Escape Index, Operator Index, Request Index, Top
+@appendix Escape Index
+
+Any escape sequence @code{\@var{X}} with @var{X} not in the list below
+emits a warning, printing glyph @var{X}.
+
+@printindex es
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Operator Index, Register Index, Escape Index, Top
+@appendix Operator Index
+
+@printindex op
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Register Index, Macro Index, Operator Index, Top
+@appendix Register Index
+
+The macro package or program a specific register belongs to is appended in
+brackets.
+
+A register name@tie{}@code{x} consisting of exactly one character can be
+accessed as @samp{\nx}.  A register name @code{xx} consisting of exactly
+two characters can be accessed as @samp{\n(xx}.  Register names
+@code{xxx} of any length can be accessed as @samp{\n[xxx]}.
+
+@printindex vr
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Macro Index, String Index, Register Index, Top
+@appendix Macro Index
+
+The macro package a specific macro belongs to is appended in brackets.
+They appear without the leading control character (normally @samp{.}).
+
+@printindex ma
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node String Index, Glyph Name Index, Macro Index, Top
+@appendix String Index
+
+The macro package or program a specific string belongs to is appended in
+brackets.
+
+A string name@tie{}@code{x} consisting of exactly one character can be
+accessed as @samp{\*x}.  A string name @code{xx} consisting of exactly
+two characters can be accessed as @samp{\*(xx}.  String names @code{xxx}
+of any length can be accessed as @samp{\*[xxx]}.
+
+
+@printindex st
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Glyph Name Index, Font File Keyword Index, String Index, Top
+@appendix Glyph Name Index
+
+A glyph name @code{xx} consisting of exactly two characters can be
+accessed as @samp{\(xx}.  Glyph names @code{xxx} of any length can be
+accessed as @samp{\[xxx]}.
+
+@c XXX
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Font File Keyword Index, Program and File Index, Glyph Name Index, Top
+@appendix Font File Keyword Index
+
+@printindex ky
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Program and File Index, Concept Index, Font File Keyword Index, Top
+@appendix Program and File Index
+
+@printindex pg
+
+
+
+@c =====================================================================
+@c =====================================================================
+
+@node Concept Index,  , Program and File Index, Top
+@appendix Concept Index
+
+@printindex cp
+
+
+@bye
+
+@c Local Variables:
+@c mode: texinfo
+@c coding: latin-1
+@c fill-column: 72
+@c End:
+@c vim: set textwidth=72:
diff --git a/doc/groff.texinfo b/doc/groff.texinfo
deleted file mode 100644 (file)
index 066b527..0000000
+++ /dev/null
@@ -1,17157 +0,0 @@
-\input texinfo
-
-@c
-@c Please convert this manual with `texi2dvi -e groff.texinfo' due to
-@c problems in texinfo regarding expansion of user-defined macros.
-@c
-@c You need texinfo 4.8 or newer to format this document!
-@c
-
-@c %**start of header (This is for running Texinfo on a region.)
-@setfilename groff.info
-@settitle The GNU Troff Manual
-@setchapternewpage odd
-@footnotestyle separate
-@c %**end of header (This is for running Texinfo on a region.)
-
-@documentlanguage en
-@documentencoding ISO-8859-1
-
-
-@smallbook
-
-@finalout
-
-
-@copying
-This manual documents GNU @code{troff} version 1.22.3.
-
-Copyright @copyright{} 1994-2014 Free Software Foundation, Inc.
-
-@quotation
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, with the Front-Cover texts being ``A GNU Manual,''
-and with the Back-Cover Texts as in (a) below.  A copy of the license is
-included in the section entitled ``GNU Free Documentation License.''
-
-(a) The FSF's Back-Cover Text is: ``You have the freedom to copy and
-modify this GNU manual.  Buying copies from the FSF supports it in
-developing GNU and promoting software freedom.''
-@end quotation
-@end copying
-
-
-@c We use the following indices:
-@c
-@c   cindex: concepts
-@c   rqindex: requests
-@c   esindex: escapes
-@c   vindex: registers
-@c   kindex: commands in font files
-@c   pindex: programs and files
-@c   tindex: environment variables
-@c   maindex: macros
-@c   stindex: strings
-@c   opindex: operators
-@c
-@c tindex and cindex are merged.
-
-@defcodeindex rq
-@defcodeindex es
-@defcodeindex ma
-@defcodeindex st
-@defcodeindex op
-@syncodeindex tp cp
-
-
-@c To avoid uppercasing in @deffn while converting to info, we define
-@c our special @Var{}.
-
-@macro Var{arg}
-@r{@slanted{\arg\}}
-@end macro
-
-
-@c To assure correct HTML translation, some ugly hacks are necessary.
-@c While processing a @def... request, the HTML translator looks at the
-@c next line to decide whether to start indentation, and if the line
-@c starts with @def... (e.g. @deffnx), indentation is started.  We must
-@c therefore ensure that a @def... is seen, during macro expansion.
-@c
-@c The following macros have to be used:
-@c
-@c One item:
-@c
-@c   @Def...
-@c
-@c Two items:
-@c
-@c   @Def...List
-@c   @Def...ListEnd
-@c
-@c More than two:
-@c
-@c   @Def...List
-@c   @Def...Item
-@c   @Def...Item
-@c   ...
-@c   @Def...ListEnd
-@c
-@c The definition block must end with
-@c
-@c   @endDef...
-@c
-@c The above is valid for texinfo 4.0f and above.
-@c
-@c By default, only the first item generates an index entry.  To
-@c override this, use a variant with a trailing `x' (like
-@c `@DefmacItemx').
-
-
-@c a dummy macro to assure the `@def...'
-
-@macro defdummy
-@c
-@end macro
-
-
-@c definition of requests
-
-@macro Defreq{name, arg}
-@deffn Request @t{.\name\} \arg\
-@rqindex \name\
-@c
-@end macro
-
-@macro DefreqList{name, arg}
-@deffn Request @t{.\name\} \arg\
-@defdummy
-@rqindex \name\
-@c
-@end macro
-
-@macro DefreqItem{name, arg}
-@deffnx Request @t{.\name\} \arg\
-@defdummy
-@c
-@end macro
-
-@macro DefreqItemx{name, arg}
-@deffnx Request @t{.\name\} \arg\
-@defdummy
-@rqindex \name\
-@c
-@end macro
-
-@macro DefreqListEnd{name, arg}
-@deffnx Request @t{.\name\} \arg\
-@c
-@end macro
-
-@macro DefreqListEndx{name, arg}
-@deffnx Request @t{.\name\} \arg\
-@rqindex \name\
-@c
-@end macro
-
-@macro endDefreq
-@end deffn
-@end macro
-
-
-@c definition of escapes
-
-@macro Defesc{name, delimI, arg, delimII}
-@deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@esindex \name\
-@c
-@end macro
-
-@macro DefescList{name, delimI, arg, delimII}
-@deffn Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@defdummy
-@esindex \name\
-@c
-@end macro
-
-@macro DefescItem{name, delimI, arg, delimII}
-@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@defdummy
-@c
-@end macro
-
-@macro DefescItemx{name, delimI, arg, delimII}
-@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@defdummy
-@esindex \name\
-@c
-@end macro
-
-@macro DefescListEnd{name, delimI, arg, delimII}
-@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@c
-@end macro
-
-@macro DefescListEndx{name, delimI, arg, delimII}
-@deffnx Escape @t{\name\\delimI\}@Var{\arg\}@t{\delimII\}
-@esindex \name\
-@c
-@end macro
-
-@macro endDefesc
-@end deffn
-@end macro
-
-
-@c definition of registers
-
-@macro Defreg{name}
-@deffn Register @t{\\n[\name\]}
-@vindex \name\
-@c
-@end macro
-
-@macro DefregList{name}
-@deffn Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\
-@c
-@end macro
-
-@macro DefregItem{name}
-@deffnx Register @t{\\n[\name\]}
-@defdummy
-@c
-@end macro
-
-@macro DefregItemx{name}
-@deffnx Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\
-@c
-@end macro
-
-@macro DefregListEnd{name}
-@deffnx Register @t{\\n[\name\]}
-@c
-@end macro
-
-@macro DefregListEndx{name}
-@deffnx Register @t{\\n[\name\]}
-@vindex \name\
-@c
-@end macro
-
-@macro endDefreg
-@end deffn
-@end macro
-
-
-@c definition of registers specific to macro packages, preprocessors, etc.
-
-@macro Defmpreg{name, package}
-@deffn Register @t{\\n[\name\]}
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmpregList{name, package}
-@deffn Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmpregItem{name, package}
-@deffnx Register @t{\\n[\name\]}
-@defdummy
-@c
-@end macro
-
-@macro DefmpregItemx{name, package}
-@deffnx Register @t{\\n[\name\]}
-@defdummy
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmpregListEnd{name, package}
-@deffnx Register @t{\\n[\name\]}
-@c
-@end macro
-
-@macro DefmpregListEndx{name, package}
-@deffnx Register @t{\\n[\name\]}
-@vindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro endDefmpreg
-@end deffn
-@end macro
-
-
-@c definition of macros
-
-@macro Defmac{name, arg, package}
-@defmac @t{.\name\} \arg\
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmacList{name, arg, package}
-@defmac @t{.\name\} \arg\
-@defdummy
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmacItem{name, arg, package}
-@defmacx @t{.\name\} \arg\
-@defdummy
-@c
-@end macro
-
-@macro DefmacItemx{name, arg, package}
-@defmacx @t{.\name\} \arg\
-@defdummy
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefmacListEnd{name, arg, package}
-@defmacx @t{.\name\} \arg\
-@c
-@end macro
-
-@macro DefmacListEndx{name, arg, package}
-@defmacx @t{.\name\} \arg\
-@maindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro endDefmac
-@end defmac
-@end macro
-
-
-@c definition of strings
-
-@macro Defstr{name, package}
-@deffn String @t{\\*[\name\]}
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefstrList{name, package}
-@deffn String @t{\\*[\name\]}
-@defdummy
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefstrItem{name, package}
-@deffnx String @t{\\*[\name\]}
-@defdummy
-@c
-@end macro
-
-@macro DefstrItemx{name, package}
-@deffnx String @t{\\*[\name\]}
-@defdummy
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro DefstrListEnd{name, package}
-@deffnx String @t{\\*[\name\]}
-@c
-@end macro
-
-@macro DefstrListEndx{name, package}
-@deffnx String @t{\\*[\name\]}
-@stindex \name\ @r{[}\package\@r{]}
-@c
-@end macro
-
-@macro endDefstr
-@end deffn
-@end macro
-
-
-@c our example macros
-
-@macro Example
-@example
-@group
-@end macro
-
-@macro endExample
-@end group
-@end example
-@end macro
-
-@macro CartoucheExample
-@cartouche
-@example
-@end macro
-
-@macro endCartoucheExample
-@end example
-@end cartouche
-@end macro
-
-
-@c <text>
-
-@tex
-\gdef\Langlemacro{\angleleft}
-\gdef\Ranglemacro{\angleright}
-@end tex
-
-@iftex
-@set Langlemacro @Langlemacro
-@set Ranglemacro @Ranglemacro
-@end iftex
-
-@ifnottex
-@set Langlemacro <
-@set Ranglemacro >
-@end ifnottex
-
-@macro angles{text}
-@value{Langlemacro}@r{\text\}@value{Ranglemacro}
-@end macro
-
-
-@c a <= sign
-@c
-@c Since expansion of macros has changed between texinfo 4.x and 5.x,
-@c we can't define a macro but have to use @value directly.
-
-@tex
-\gdef\LE{\le}
-@end tex
-
-@iftex
-@set LE @LE
-@end iftex
-
-@ifnottex
-@set LE <=
-@end ifnottex
-
-
-@c Special care is required with parentheses, brackets, and braces:
-@c
-@c . Real parentheses in @deffn produce an error while compiling with
-@c   TeX.
-@c . Real brackets use the wrong font in @deffn, overriding @t{}.
-@c
-@c . @{ and @} fail with info if used in a macro.
-@c
-@c Since macros aren't expanded in @deffn during -E, the following
-@c definitions are for non-TeX only.
-@c
-@c This is true for texinfo 4.0 and above.
-
-@iftex
-@set Lparenmacro @lparen
-@set Rparenmacro @rparen
-@set Lbrackmacro @lbrack
-@set Rbrackmacro @rbrack
-@set Lbracemacro @{
-@set Rbracemacro @}
-@end iftex
-
-@ifnottex
-@set Lparenmacro (
-@set Rparenmacro )
-@set Lbrackmacro [
-@set Rbrackmacro ]
-@set Lbracemacro @{
-@set Rbracemacro @}
-@end ifnottex
-
-@macro Lparen{}
-@value{Lparenmacro}
-@end macro
-@macro Rparen{}
-@value{Rparenmacro}
-@end macro
-@macro Lbrack{}
-@value{Lbrackmacro}
-@end macro
-@macro Rbrack{}
-@value{Rbrackmacro}
-@end macro
-@macro Lbrace{}
-@value{Lbracemacro}
-@end macro
-@macro Rbrace{}
-@value{Rbracemacro}
-@end macro
-
-
-@c This suppresses the word `Appendix' in the appendix headers.
-
-@tex
-\gdef\gobblefirst#1#2{#2}
-\gdef\putwordAppendix{\gobblefirst}
-@end tex
-
-
-@c We map some latin-1 characters to corresponding texinfo macros.
-@c Newer versions of texinfo.tex have similar code included already.
-
-@tex
-\global\catcode`^^e4\active % ä
-\gdef^^e4{\"a}
-\global\catcode`^^c4\active % Ä
-\gdef^^c4{\"A}
-\global\catcode`^^e9\active % é
-\gdef^^e9{\'e}
-\global\catcode`^^c9\active % É
-\gdef^^c9{\'E}
-\global\catcode`^^f6\active % ö
-\gdef^^f6{\"o}
-\global\catcode`^^d6\active % Ö
-\gdef^^d6{\"O}
-\global\catcode`^^fc\active % ü
-\gdef^^fc{\"u}
-\global\catcode`^^dc\active % Ü
-\gdef^^dc{\"U}
-\global\catcode`^^e6\active % æ
-\gdef^^e6{\ae}
-\global\catcode`^^c6\active % Æ
-\gdef^^c6{\AE}
-\global\catcode`^^df\active % ß
-\gdef^^df{\ss}
-@end tex
-
-
-@c Note: We say `Roman numerals' but `roman font'.
-
-
-@dircategory Typesetting
-@direntry
-* Groff: (groff).               The GNU troff document formatting system.
-@end direntry
-
-
-@titlepage
-@title groff
-@subtitle The GNU implementation of @code{troff}
-@subtitle Edition 1.22.3
-@subtitle Autumn 2014
-@author by Trent A.@tie{}Fisher
-@author and Werner Lemberg (@email{bug-groff@@gnu.org})
-
-@page
-@vskip 0pt plus 1filll
-@insertcopying
-@end titlepage
-
-@contents
-
-@ifnottex
-@node Top, Introduction, (dir), (dir)
-@top GNU troff
-@end ifnottex
-
-@menu
-* Introduction::
-* Invoking groff::
-* Tutorial for Macro Users::
-* Macro Packages::
-* gtroff Reference::
-* Preprocessors::
-* Output Devices::
-* File formats::
-* Installation::
-* Copying This Manual::
-* Request Index::
-* Escape Index::
-* Operator Index::
-* Register Index::
-* Macro Index::
-* String Index::
-* Glyph Name Index::
-* Font File Keyword Index::
-* Program and File Index::
-* Concept Index::
-@end menu
-
-@ifnottex
-@insertcopying
-@end ifnottex
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Introduction, Invoking groff, Top, Top
-@chapter Introduction
-@cindex introduction
-
-GNU @code{troff} (or @code{groff}) is a system for typesetting
-documents.  @code{troff} is very flexible and has been used extensively
-for some thirty years.  It is well entrenched in the @acronym{UNIX}
-community.
-
-@menu
-* What Is groff?::
-* History::
-* groff Capabilities::
-* Macro Package Intro::
-* Preprocessor Intro::
-* Output device intro::
-* Credits::
-@end menu
-
-
-@c =====================================================================
-
-@node What Is groff?, History, Introduction, Introduction
-@section What Is @code{groff}?
-@cindex what is @code{groff}?
-@cindex @code{groff} -- what is it?
-
-@code{groff} belongs to an older generation of document preparation
-systems, which operate more like compilers than the more recent
-interactive @acronym{WYSIWYG}@footnote{What You See Is What You Get}
-systems.  @code{groff} and its contemporary counterpart, @TeX{}, both
-work using a @dfn{batch} paradigm: The input (or @dfn{source}) files are
-normal text files with embedded formatting commands.  These files can
-then be processed by @code{groff} to produce a typeset document on a
-variety of devices.
-
-@code{groff} should not be confused with a @dfn{word processor}, an
-integrated system of editor and text formatter.  Also, many word
-processors follow the @acronym{WYSIWYG} paradigm discussed earlier.
-
-Although @acronym{WYSIWYG} systems may be easier to use, they have a
-number of disadvantages compared to @code{troff}:
-
-@itemize @bullet
-@item
-They must be used on a graphics display to work on a document.
-
-@item
-Most of the @acronym{WYSIWYG} systems are either non-free or are not
-very portable.
-
-@item
-@code{troff} is firmly entrenched in all @acronym{UNIX} systems.
-
-@item
-It is difficult to have a wide range of capabilities within the confines
-of a GUI/window system.
-
-@item
-It is more difficult to make global changes to a document.
-@end itemize
-
-@quotation
-``GUIs normally make it simple to accomplish simple actions and
-impossible to accomplish complex actions.''  --Doug Gwyn (22/Jun/91 in
-@code{comp.unix.wizards})
-@end quotation
-
-
-@c =====================================================================
-
-@node History, groff Capabilities, What Is groff?, Introduction
-@section History
-@cindex history
-
-@cindex @code{RUNOFF}, the program
-@cindex @code{rf}, the program
-@code{troff} can trace its origins back to a formatting program called
-@code{RUNOFF}, written by Jerry Saltzer, which ran on the @acronym{CTSS}
-(@emph{Compatible Time Sharing System}, a project of MIT, the
-Massachusetts Institute of Technology) in the
-mid-sixties.@footnote{Jerome H.@: Saltzer, a grad student then, later a
-Professor of Electrical Engineering, now retired.  Saltzer's PhD thesis
-was the first application for @code{RUNOFF} and is available from the
-MIT Libraries.}  The name came from the use of the phrase ``run off a
-document'', meaning to print it out.
-@c
-@c Tom Van Vleck <thvv@multicians.org> writes about the following:
-@c
-@c I am not sure about this.. I think the BCPL runoff was the port to
-@c the 635 architecture, and that the order of events is
-@c 1. CTSS runoff
-@c 2. BCPL runoff on Multics
-@c 3. BCPL runoff on 635
-@c 4. rf on PDP-7
-@c
-Bob Morris ported it to the 635 architecture and called the program
-@code{roff} (an abbreviation of @code{runoff}).  It was rewritten as
-@code{rf} for the @w{PDP-7} (before having @acronym{UNIX}), and at the
-same time (1969), Doug McIllroy rewrote an extended and simplified
-version of @code{roff} in the @acronym{BCPL} programming language.
-
-@cindex @code{roff}, the program
-In 1971, the UNIX developers wanted to get a @w{PDP-11}, and to justify
-the cost, proposed the development of a document formatting system for
-the @acronym{AT&T} patents division.  This first formatting program was
-a reimplementation of McIllroy's @code{roff}, written by J.@tie{}F.@:
-Ossanna.
-
-@cindex @code{nroff}, the program
-When they needed a more flexible language, a new version of @code{roff}
-called @code{nroff} (``Newer @code{roff}'') was written.  It had a much
-more complicated syntax, but provided the basis for all future versions.
-When they got a Graphic Systems CAT Phototypesetter, Ossanna wrote a
-version of @code{nroff} that would drive it.  It was dubbed
-@code{troff}, for ``typesetter @code{roff}'', although many people have
-speculated that it actually means ``Times @code{roff}'' because of the
-use of the Times font family in @code{troff} by default.  As such, the
-name @code{troff} is pronounced `@w{t-roff}' rather than `trough'.
-
-With @code{troff} came @code{nroff} (they were actually the same program
-except for some @samp{#ifdef}s), which was for producing output for line
-printers and character terminals.  It understood everything @code{troff}
-did, and ignored the commands that were not applicable (e.g.@: font
-changes).
-
-Since there are several things that cannot be done easily in
-@code{troff}, work on several preprocessors began.  These programs would
-transform certain parts of a document into @code{troff}, which made a
-very natural use of pipes in @acronym{UNIX}.
-
-The @code{eqn} preprocessor allowed mathematical formulæ to be specified
-in a much simpler and more intuitive manner.  @code{tbl} is a
-preprocessor for formatting tables.  The @code{refer} preprocessor (and
-the similar program, @code{bib}) processes citations in a document
-according to a bibliographic database.
-
-Unfortunately, Ossanna's @code{troff} was written in @w{PDP-11} assembly
-language and produced output specifically for the CAT phototypesetter.
-He rewrote it in C, although it was now 7000@tie{}lines of uncommented
-code and still dependent on the CAT@.  As the CAT became less common, and
-was no longer supported by the manufacturer, the need to make it support
-other devices became a priority.  However, before this could be done,
-Ossanna died by a severe heart attack in a hospital while recovering
-from a previous one.
-
-@pindex ditroff
-@cindex @code{ditroff}, the program
-So, Brian Kernighan took on the task of rewriting @code{troff}.  The
-newly rewritten version produced device independent code that was very
-easy for postprocessors to read and translate to the appropriate printer
-codes.  Also, this new version of @code{troff} (called @code{ditroff}
-for ``device independent @code{troff}'') had several extensions, which
-included drawing functions.
-
-Due to the additional abilities of the new version of @code{troff},
-several new preprocessors appeared.  The @code{pic} preprocessor
-provides a wide range of drawing functions.  Likewise the @code{ideal}
-preprocessor did the same, although via a much different paradigm.  The
-@code{grap} preprocessor took specifications for graphs, but, unlike
-other preprocessors, produced @code{pic} code.
-
-James Clark began work on a GNU implementation of @code{ditroff} in
-early@tie{}1989.  The first version, @code{groff}@tie{}0.3.1, was
-released June@tie{}1990.  @code{groff} included:
-
-@itemize @bullet
-@item
-A replacement for @code{ditroff} with many extensions.
-
-@item
-The @code{soelim}, @code{pic}, @code{tbl}, and @code{eqn} preprocessors.
-
-@item
-Postprocessors for character devices, @sc{PostScript}, @TeX{} DVI, and
-X@tie{}Windows.  GNU @code{troff} also eliminated the need for a
-separate @code{nroff} program with a postprocessor that would produce
-@acronym{ASCII} output.
-
-@item
-A version of the @file{me} macros and an implementation of the
-@file{man} macros.
-@end itemize
-
-Also, a front-end was included that could construct the, sometimes
-painfully long, pipelines required for all the post- and preprocessors.
-
-Development of GNU @code{troff} progressed rapidly, and saw the
-additions of a replacement for @code{refer}, an implementation of the
-@file{ms} and @file{mm} macros, and a program to deduce how to format a
-document (@code{grog}).
-
-It was declared a stable (i.e.@: non-beta) package with the release of
-version@tie{}1.04 around November@tie{}1991.
-
-Beginning in@tie{}1999, @code{groff} has new maintainers (the package
-was an orphan for a few years).  As a result, new features and programs
-like @code{grn}, a preprocessor for gremlin images, and an output device
-to produce @acronym{HTML} and @acronym{XHTML} have been added.
-
-
-@c =====================================================================
-
-@node groff Capabilities, Macro Package Intro, History, Introduction
-@section @code{groff} Capabilities
-@cindex @code{groff} capabilities
-@cindex capabilities of @code{groff}
-
-So what exactly is @code{groff} capable of doing?  @code{groff} provides
-a wide range of low-level text formatting operations.  Using these, it
-is possible to perform a wide range of formatting tasks, such as
-footnotes, table of contents, multiple columns, etc.  Here's a list of
-the most important operations supported by @code{groff}:
-
-@itemize @bullet
-@item
-text filling, adjusting, and centering
-
-@item
-hyphenation
-
-@item
-page control
-
-@item
-font and glyph size control
-
-@item
-vertical spacing (e.g.@: double-spacing)
-
-@item
-line length and indenting
-
-@item
-macros, strings, diversions, and traps
-
-@item
-number registers
-
-@item
-tabs, leaders, and fields
-
-@item
-input and output conventions and character translation
-
-@item
-overstrike, bracket, line drawing, and zero-width functions
-
-@item
-local horizontal and vertical motions and the width function
-
-@item
-three-part titles
-
-@item
-output line numbering
-
-@item
-conditional acceptance of input
-
-@item
-environment switching
-
-@item
-insertions from the standard input
-
-@item
-input/output file switching
-
-@item
-output and error messages
-@end itemize
-
-
-@c =====================================================================
-
-@node Macro Package Intro, Preprocessor Intro, groff Capabilities, Introduction
-@section Macro Packages
-@cindex macro packages
-
-Since @code{groff} provides such low-level facilities, it can be quite
-difficult to use by itself.  However, @code{groff} provides a
-@dfn{macro} facility to specify how certain routine operations
-(e.g.@tie{}starting paragraphs, printing headers and footers, etc.)@:
-should be done.  These macros can be collected together into a
-@dfn{macro package}.  There are a number of macro packages available;
-the most common (and the ones described in this manual) are @file{man},
-@file{mdoc}, @file{me}, @file{ms}, and @file{mm}.
-
-
-@c =====================================================================
-
-@node Preprocessor Intro, Output device intro, Macro Package Intro, Introduction
-@section Preprocessors
-@cindex preprocessors
-
-Although @code{groff} provides most functions needed to format a
-document, some operations would be unwieldy (e.g.@: to draw pictures).
-Therefore, programs called @dfn{preprocessors} were written that
-understand their own language and produce the necessary @code{groff}
-operations.  These preprocessors are able to differentiate their own
-input from the rest of the document via markers.
-
-To use a preprocessor, @acronym{UNIX} pipes are used to feed the output
-from the preprocessor into @code{groff}.  Any number of preprocessors
-may be used on a given document; in this case, the preprocessors are
-linked together into one pipeline.  However, with @code{groff}, the user
-does not need to construct the pipe, but only tell @code{groff} what
-preprocessors to use.
-
-@code{groff} currently has preprocessors for producing tables
-(@code{tbl}), typesetting equations (@code{eqn}), drawing pictures
-(@code{pic} and @code{grn}), processing bibliographies
-(@code{refer}), and drawing chemical structures (@code{chem}).  An
-associated program that is useful when dealing with preprocessors is
-@code{soelim}.
-
-A free implementation of @code{grap}, a preprocessor for drawing graphs,
-can be obtained as an extra package; @code{groff} can use @code{grap}
-also.
-
-Unique to @code{groff} is the @code{preconv} preprocessor that enables
-@code{groff} to handle documents in various input encodings.
-
-There are other preprocessors in existence, but, unfortunately, no free
-implementations are available.  Among them is a preprocessor for drawing
-mathematical pictures (@code{ideal}).
-
-
-@c =====================================================================
-
-@node Output device intro, Credits, Preprocessor Intro, Introduction
-@section Output Devices
-@cindex postprocessors
-@cindex output devices
-@cindex devices for output
-
-@code{groff} actually produces device independent code that may be fed
-into a postprocessor to produce output for a particular device.
-Currently, @code{groff} has postprocessors for @sc{PostScript} devices,
-character terminals, X@tie{}Windows (for previewing), @TeX{} DVI format,
-HP LaserJet@tie{}4 and Canon LBP printers (which use @acronym{CAPSL}),
-@acronym{HTML}, @acronym{XHTML}, and PDF.
-
-
-@c =====================================================================
-
-@node Credits,  , Output device intro, Introduction
-@section Credits
-@cindex credits
-
-Large portions of this manual were taken from existing documents, most
-notably, the manual pages for the @code{groff} package by James Clark,
-and Eric Allman's papers on the @file{me} macro package.
-
-The section on the @file{man} macro package is partly based on
-Susan@tie{}G.@: Kleinmann's @file{groff_man} manual page written for the
-Debian GNU/Linux system.
-
-Larry Kollar contributed the section in the @file{ms} macro package.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Invoking groff, Tutorial for Macro Users, Introduction, Top
-@chapter Invoking @code{groff}
-@cindex invoking @code{groff}
-@cindex @code{groff} invocation
-
-This section focuses on how to invoke the @code{groff} front end.  This
-front end takes care of the details of constructing the pipeline among
-the preprocessors, @code{gtroff} and the postprocessor.
-
-It has become a tradition that GNU programs get the prefix @samp{g} to
-distinguish it from its original counterparts provided by the host (see
-@ref{Environment}, for more details).  Thus, for example, @code{geqn} is
-GNU @code{eqn}.  On operating systems like GNU/Linux or the Hurd, which
-don't contain proprietary versions of @code{troff}, and on
-MS-DOS/MS-Windows, where @code{troff} and associated programs are not
-available at all, this prefix is omitted since GNU @code{troff} is the
-only used incarnation of @code{troff}.  Exception: @samp{groff} is never
-replaced by @samp{roff}.
-
-In this document, we consequently say @samp{gtroff} when talking about
-the GNU @code{troff} program.  All other implementations of @code{troff}
-are called @acronym{AT&T} @code{troff}, which is the common origin of all
-@code{troff} derivates (with more or less compatible changes).
-Similarly, we say @samp{gpic}, @samp{geqn}, etc.
-
-@menu
-* Groff Options::
-* Environment::
-* Macro Directories::
-* Font Directories::
-* Paper Size::
-* Invocation Examples::
-@end menu
-
-
-@c =====================================================================
-
-@node Groff Options, Environment, Invoking groff, Invoking groff
-@section Options
-@cindex options
-
-@pindex groff
-@pindex gtroff
-@pindex gpic
-@pindex geqn
-@pindex ggrn
-@pindex grap
-@pindex gtbl
-@pindex gchem
-@pindex grefer
-@pindex gsoelim
-@pindex preconv
-@code{groff} normally runs the @code{gtroff} program and a
-postprocessor appropriate for the selected device.  The default device
-is @samp{ps} (but it can be changed when @code{groff} is configured and
-built).  It can optionally preprocess with any of @code{gpic},
-@code{geqn}, @code{gtbl}, @code{ggrn}, @code{grap}, @code{gchem},
-@code{grefer}, @code{gsoelim}, or @code{preconv}.
-
-This section only documents options to the @code{groff} front end.  Many
-of the arguments to @code{groff} are passed on to @code{gtroff},
-therefore those are also included.  Arguments to pre- or postprocessors
-can be found in @ref{Invoking gpic}, @ref{Invoking geqn}, @ref{Invoking
-gtbl}, @ref{Invoking ggrn}, @ref{Invoking grefer}, @ref{Invoking gchem},
-@ref{Invoking gsoelim}, @ref{Invoking preconv}, @ref{Invoking grotty},
-@ref{Invoking grops}, @ref{Invoking gropdf}, @ref{Invoking grohtml},
-@ref{Invoking grodvi}, @ref{Invoking grolj4}, @ref{Invoking grolbp}, and
-@ref{Invoking gxditview}.
-
-The command line format for @code{groff} is:
-
-@Example
-groff [ -abceghijklpstvzCEGNRSUVXZ ] [ -d@var{cs} ] [ -D@var{arg} ]
-      [ -f@var{fam} ] [ -F@var{dir} ] [ -I@var{dir} ] [ -K@var{arg} ]
-      [ -L@var{arg} ] [ -m@var{name} ] [ -M@var{dir} ] [ -n@var{num} ]
-      [ -o@var{list} ] [ -P@var{arg} ] [ -r@var{cn} ] [ -T@var{dev} ]
-      [ -w@var{name} ] [ -W@var{name} ] [ @var{files}@dots{} ]
-@endExample
-
-The command line format for @code{gtroff} is as follows.
-
-@Example
-gtroff [ -abcivzCERU ] [ -d@var{cs} ] [ -f@var{fam} ] [ -F@var{dir} ]
-       [ -m@var{name} ] [ -M@var{dir} ] [ -n@var{num} ] [ -o@var{list} ]
-       [ -r@var{cn} ] [ -T@var{name} ] [ -w@var{name} ] [ -W@var{name} ]
-       [ @var{files}@dots{} ]
-@endExample
-
-@noindent
-Obviously, many of the options to @code{groff} are actually passed on to
-@code{gtroff}.
-
-Options without an argument can be grouped behind a
-single@tie{}@option{-}.  A filename of@tie{}@file{-} denotes the
-standard input.  It is possible to have whitespace between an option and
-its parameter.
-
-The @code{grog} command can be used to guess the correct @code{groff}
-command to format a file.
-
-Here's the description of the command-line options:
-
-@cindex command-line options
-@table @samp
-@item -a
-@cindex @acronym{ASCII} approximation output register (@code{.A})
-Generate an @acronym{ASCII} approximation of the typeset output.  The
-read-only register @code{.A} is then set to@tie{}1.  @xref{Built-in
-Registers}.  A typical example is
-
-@Example
-groff -a -man -Tdvi troff.man | less
-@endExample
-
-@noindent
-which shows how lines are broken for the DVI device.  Note that this
-option is rather useless today since graphic output devices are
-available virtually everywhere.
-
-@item -b
-Print a backtrace with each warning or error message.  This backtrace
-should help track down the cause of the error.  The line numbers given
-in the backtrace may not always be correct: @code{gtroff} can get
-confused by @code{as} or @code{am} requests while counting line numbers.
-
-@item -c
-Suppress color output.
-
-@item -C
-Enable compatibility mode.  @xref{Implementation Differences}, for the
-list of incompatibilities between @code{groff} and @acronym{AT&T}
-@code{troff}.
-
-@item -d@var{c}@var{s}
-@itemx -d@var{name}=@var{s}
-Define @var{c} or @var{name} to be a string@tie{}@var{s}.
-@var{c}@tie{}must be a one-letter name; @var{name} can be of arbitrary
-length.  All string assignments happen before loading any macro file
-(including the start-up file).
-
-@item -D@var{arg}
-Set default input encoding used by @code{preconv} to @var{arg}.  Implies
-@option{-k}.
-
-@item -e
-Preprocess with @code{geqn}.
-
-@item -E
-Inhibit all error messages.
-
-@item -f@var{fam}
-Use @var{fam} as the default font family.  @xref{Font Families}.
-
-@item -F@var{dir}
-Search @file{@var{dir}} for subdirectories @file{dev@var{name}}
-(@var{name} is the name of the device), for the @file{DESC} file, and
-for font files before looking in the standard directories (@pxref{Font
-Directories}).  This option is passed to all pre- and postprocessors
-using the @env{GROFF_FONT_PATH} environment variable.
-
-@item -g
-Preprocess with @code{ggrn}.
-
-@item -G
-Preprocess with @code{grap}.  Implies @option{-p}.
-
-@item -h
-Print a help message.
-
-@item -i
-Read the standard input after all the named input files have been
-processed.
-
-@item -I@var{dir}
-This option may be used to specify a directory to search for files.
-It is passed to the following programs:
-
-@itemize
-@item
-@code{gsoelim} (see @ref{gsoelim} for more details);
-it also implies @code{groff}'s @option{-s} option.
-
-@item
-@code{gtroff}; it is used to search files named in the @code{psbb} and
-@code{so} requests.
-
-@item
-@code{grops}; it is used to search files named in the
-@w{@code{\X'ps: import}} and @w{@code{\X'ps: file}} escapes.
-@end itemize
-
-The current directory is always searched first.  This option may be
-specified more than once; the directories are searched in the order
-specified.  No directory search is performed for files specified using
-an absolute path.
-
-@item -j
-Preprocess with @code{gchem}.  Implies @option{-p}.
-
-@item -k
-Preprocess with @code{preconv}.  This is run before any other
-preprocessor.  Please refer to @code{preconv}'s manual page for its
-behaviour if no @option{-K} (or @option{-D}) option is specified.
-
-@item -K@var{arg}
-Set input encoding used by preconv to @var{arg}.  Implies @option{-k}.
-
-@item -l
-Send the output to a spooler for printing.  The command used for this is
-specified by the @code{print} command in the device description file
-(see @ref{Font Files}, for more info).  If not present, @option{-l} is
-ignored.
-
-@item -L@var{arg}
-Pass @var{arg} to the spooler.  Each argument should be passed with a
-separate @option{-L} option.  Note that @code{groff} does not prepend a
-@samp{-} to @var{arg} before passing it to the postprocessor.  If the
-@code{print} keyword in the device description file is missing,
-@option{-L} is ignored.
-
-@item -m@var{name}
-Read in the file @file{@var{name}.tmac}.  Normally @code{groff} searches
-for this in its macro directories.  If it isn't found, it tries
-@file{tmac.@var{name}} (searching in the same directories).
-
-@item -M@var{dir}
-Search directory @file{@var{dir}} for macro files before the standard
-directories (@pxref{Macro Directories}).
-
-@item -n@var{num}
-Number the first page @var{num}.
-
-@item -N
-Don't allow newlines with @code{eqn} delimiters.  This is the same as
-the @option{-N} option in @code{geqn}.
-
-@item -o@var{list}
-@cindex print current page register (@code{.P})
-Output only pages in @var{list}, which is a comma-separated list of page
-ranges; @samp{@var{n}} means print page@tie{}@var{n},
-@samp{@var{m}-@var{n}} means print every page between @var{m}
-and@tie{}@var{n}, @samp{-@var{n}} means print every page up
-to@tie{}@var{n}, @samp{@var{n}-} means print every page beginning
-with@tie{}@var{n}.  @code{gtroff} exits after printing the last page in
-the list.  All the ranges are inclusive on both ends.
-
-Within @code{gtroff}, this information can be extracted with the
-@samp{.P} register.  @xref{Built-in Registers}.
-
-If your document restarts page numbering at the beginning of each
-chapter, then @code{gtroff} prints the specified page range for each
-chapter.
-
-@item -p
-Preprocess with @code{gpic}.
-
-@item -P@var{arg}
-Pass @var{arg} to the postprocessor.  Each argument should be passed
-with a separate @option{-P} option.  Note that @code{groff} does not
-prepend @samp{-} to @var{arg} before passing it to the postprocessor.
-
-@item -r@var{c}@var{n}
-@itemx -r@var{name}=@var{n}
-Set number register@tie{}@var{c} or @var{name} to the
-value@tie{}@var{n}.  @var{c}@tie{}must be a one-letter name; @var{name}
-can be of arbitrary length.  @var{n}@tie{}can be any @code{gtroff}
-numeric expression.  All register assignments happen before loading any
-macro file (including the start-up file).
-
-@item -R
-Preprocess with @code{grefer}.  No mechanism is provided for passing
-arguments to @code{grefer} because most @code{grefer} options have
-equivalent commands that can be included in the file.  @xref{grefer},
-for more details.
-
-@pindex troffrc
-@pindex troffrc-end
-Note that @code{gtroff} also accepts a @option{-R} option, which is not
-accessible via @code{groff}.  This option prevents the loading of the
-@file{troffrc} and @file{troffrc-end} files.
-
-@item -s
-Preprocess with @code{gsoelim}.
-
-@item -S
-@cindex @code{open} request, and safer mode
-@cindex @code{opena} request, and safer mode
-@cindex @code{pso} request, and safer mode
-@cindex @code{sy} request, and safer mode
-@cindex @code{pi} request, and safer mode
-@cindex safer mode
-@cindex mode, safer
-Safer mode.  Pass the @option{-S} option to @code{gpic} and disable the
-@code{open}, @code{opena}, @code{pso}, @code{sy}, and @code{pi}
-requests.  For security reasons, this is enabled by default.
-
-@item -t
-Preprocess with @code{gtbl}.
-
-@item -T@var{dev}
-Prepare output for device @var{dev}.  The default device is @samp{ps},
-unless changed when @code{groff} was configured and built.  The
-following are the output devices currently available:
-
-@table @code
-@item ps
-For @sc{PostScript} printers and previewers.
-
-@item pdf
-For PDF viewers or printers.
-
-@item dvi
-For @TeX{} DVI format.
-
-@item X75
-For a 75@dmn{dpi} X11 previewer.
-
-@item X75-12
-For a 75@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
-document.
-
-@item X100
-For a 100@dmn{dpi} X11 previewer.
-
-@item X100-12
-For a 100@dmn{dpi} X11 previewer with a 12@dmn{pt} base font in the
-document.
-
-@item ascii
-@cindex encoding, output, @acronym{ASCII}
-@cindex @acronym{ASCII}, output encoding
-@cindex output encoding, @acronym{ASCII}
-For typewriter-like devices using the (7-bit) @acronym{ASCII}
-character set.
-
-@item latin1
-@cindex encoding, output, @w{latin-1} (ISO @w{8859-1})
-@cindex @w{latin-1} (ISO @w{8859-1}), output encoding
-@cindex ISO @w{8859-1} (@w{latin-1}), output encoding
-@cindex output encoding, @w{latin-1} (ISO @w{8859-1})
-For typewriter-like devices that support the @w{Latin-1}
-(ISO@tie{}@w{8859-1}) character set.
-
-@item utf8
-@cindex encoding, output, @w{utf-8}
-@cindex @w{utf-8}, output encoding
-@cindex output encoding, @w{utf-8}
-For typewriter-like devices that use the Unicode (ISO@tie{}10646)
-character set with @w{UTF-8} encoding.
-
-@item cp1047
-@cindex encoding, output, @acronym{EBCDIC}
-@cindex @acronym{EBCDIC}, output encoding
-@cindex output encoding, @acronym{EBCDIC}
-@cindex encoding, output, cp1047
-@cindex cp1047, output encoding
-@cindex output encoding, cp1047
-@cindex IBM cp1047 output encoding
-For typewriter-like devices that use the @acronym{EBCDIC} encoding IBM
-cp1047.
-
-@item lj4
-For HP LaserJet4-compatible (or other PCL5-compatible) printers.
-
-@item lbp
-For Canon @acronym{CAPSL} printers (@w{LBP-4} and @w{LBP-8} series laser
-printers).
-
-@pindex pre-grohtml
-@pindex post-grohtml
-@cindex @code{grohtml}, the program
-@item html
-@itemx xhtml
-To produce @acronym{HTML} and @acronym{XHTML} output, respectively.
-Note that this driver consists of two parts, a preprocessor
-(@code{pre-grohtml}) and a postprocessor (@code{post-grohtml}).
-@end table
-
-@cindex output device name string register (@code{.T})
-@cindex output device usage number register (@code{.T})
-The predefined @code{gtroff} string register @code{.T} contains the
-current output device; the read-only number register @code{.T} is set
-to@tie{}1 if this option is used (which is always true if @code{groff}
-is used to call @code{gtroff}).  @xref{Built-in Registers}.
-
-The postprocessor to be used for a device is specified by the
-@code{postpro} command in the device description file.  (@xref{Font
-Files}, for more info.)  This can be overridden with the @option{-X}
-option.
-
-@item -U
-@cindex mode, unsafe
-@cindex unsafe mode
-Unsafe mode.  This enables the @code{open}, @code{opena}, @code{pso},
-@code{sy}, and @code{pi} requests.
-
-@item -w@var{name}
-Enable warning @var{name}.  Available warnings are described in
-@ref{Debugging}.  Multiple @option{-w} options are allowed.
-
-@item -W@var{name}
-Inhibit warning @var{name}.  Multiple @option{-W} options are allowed.
-
-@item -v
-Make programs run by @code{groff} print out their version number.
-
-@item -V
-Print the pipeline on @code{stdout} instead of executing it.  If
-specified more than once, print the pipeline on @code{stderr} and
-execute it.
-
-@item -X
-Preview with @code{gxditview} instead of using the usual postprocessor.
-This is unlikely to produce good results except with @option{-Tps}.
-
-Note that this is not the same as using @option{-TX75} or
-@option{-TX100} to view a document with @code{gxditview}: The former
-uses the metrics of the specified device, whereas the latter uses
-X-specific fonts and metrics.
-
-@item -z
-Suppress output from @code{gtroff}.  Only error messages are printed.
-
-@item -Z
-Do not postprocess the output of @code{gtroff}.  Normally @code{groff}
-automatically runs the appropriate postprocessor.
-@end table
-
-
-@c =====================================================================
-
-@node Environment, Macro Directories, Groff Options, Invoking groff
-@section Environment
-@cindex environment variables
-@cindex variables in environment
-
-There are also several environment variables (of the operating system,
-not within @code{gtroff}) that can modify the behavior of @code{groff}.
-
-@table @code
-@item GROFF_BIN_PATH
-@tindex GROFF_BIN_PATH@r{, environment variable}
-This search path, followed by @code{PATH}, is used for commands executed
-by @code{groff}.
-
-@item GROFF_COMMAND_PREFIX
-@tindex GROFF_COMMAND_PREFIX@r{, environment variable}
-@cindex command prefix
-@cindex prefix, for commands
-If this is set to@tie{}@var{X}, then @code{groff} runs
-@code{@var{X}troff} instead of @code{gtroff}.  This also applies to
-@code{tbl}, @code{pic}, @code{eqn}, @code{grn}, @code{chem},
-@code{refer}, and @code{soelim}.  It does not apply to @code{grops},
-@code{grodvi}, @code{grotty}, @code{pre-grohtml}, @code{post-grohtml},
-@code{preconv}, @code{grolj4}, @code{gropdf}, and @code{gxditview}.
-
-The default command prefix is determined during the installation
-process.  If a non-GNU troff system is found, prefix @samp{g} is used,
-none otherwise.
-
-@item GROFF_ENCODING
-@tindex GROFF_ENCODING@r{, environment variable}
-The value of this environment value is passed to the @code{preconv}
-preprocessor to select the encoding of input files.  Setting this option
-implies @code{groff}'s command line option @option{-k} (this is,
-@code{groff} actually always calls @code{preconv}).  If set without a
-value, @code{groff} calls @code{preconv} without arguments.  An explicit
-@option{-K} command line option overrides the value of
-@env{GROFF_ENCODING}.  See the manual page of @code{preconv} for details.
-
-@item GROFF_FONT_PATH
-@tindex GROFF_FONT_PATH@r{, environment variable}
-A colon-separated list of directories in which to search for the
-@code{dev}@var{name} directory (before the default directories are
-tried).  @xref{Font Directories}.
-
-@item GROFF_TMAC_PATH
-@tindex GROFF_TMAC_PATH@r{, environment variable}
-A colon-separated list of directories in which to search for macro files
-(before the default directories are tried).  @xref{Macro Directories}.
-
-@item GROFF_TMPDIR
-@tindex GROFF_TMPDIR@r{, environment variable}
-@tindex TMPDIR@r{, environment variable}
-The directory in which @code{groff} creates temporary files.  If this is
-not set and @env{TMPDIR} is set, temporary files are created in that
-directory.  Otherwise temporary files are created in a system-dependent
-default directory (on Unix and GNU/Linux systems, this is usually
-@file{/tmp}).  @code{grops}, @code{grefer}, @code{pre-grohtml}, and
-@code{post-grohtml} can create temporary files in this directory.
-
-@item GROFF_TYPESETTER
-@tindex GROFF_TYPESETTER@r{, environment variable}
-The default output device.
-@end table
-
-Note that MS-DOS and MS-Windows ports of @code{groff} use semi-colons,
-rather than colons, to separate the directories in the lists described
-above.
-
-
-@c =====================================================================
-
-@node Macro Directories, Font Directories, Environment, Invoking groff
-@section Macro Directories
-@cindex macro directories
-@cindex directories for macros
-@cindex searching macros
-@cindex macros, searching
-
-All macro file names must be named @code{@var{name}.tmac} or
-@code{tmac.@var{name}} to make the @option{-m@var{name}} command line
-option work.  The @code{mso} request doesn't have this restriction; any
-file name can be used, and @code{gtroff} won't try to append or prepend
-the @samp{tmac} string.
-
-@cindex tmac, directory
-@cindex directory, for tmac files
-@cindex tmac, path
-@cindex path, for tmac files
-@cindex searching macro files
-@cindex macro files, searching
-@cindex files, macro, searching
-Macro files are kept in the @dfn{tmac directories}, all of which
-constitute the @dfn{tmac path}.  The elements of the search path for
-macro files are (in that order):
-
-@itemize @bullet
-@item
-The directories specified with @code{gtroff}'s or @code{groff}'s
-@option{-M} command line option.
-
-@item
-@tindex GROFF_TMAC_PATH@r{, environment variable}
-The directories given in the @env{GROFF_TMAC_PATH} environment variable.
-
-@item
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-@cindex current directory
-@cindex directory, current
-The current directory (only if in unsafe mode using the @option{-U}
-command line switch).
-
-@item
-@cindex home directory
-@cindex directory, home
-The home directory.
-
-@item
-@cindex site-specific directory
-@cindex directory, site-specific
-@cindex platform-specific directory
-@cindex directory, platform-specific
-A platform-dependent directory, a site-specific (platform-independent)
-directory, and the main tmac directory; the default locations are
-
-@Example
-/usr/local/lib/groff/site-tmac
-/usr/local/share/groff/site-tmac
-/usr/local/share/groff/1.22.3/tmac
-@endExample
-
-@noindent
-assuming that the version of @code{groff} is 1.22.3, and the
-installation prefix was @file{/usr/local}.  It is possible to fine-tune
-those directories during the installation process.
-@end itemize
-
-
-@c =====================================================================
-
-@node Font Directories, Paper Size, Macro Directories, Invoking groff
-@section Font Directories
-@cindex font directories
-@cindex directories for fonts
-@cindex searching fonts
-@cindex fonts, searching
-
-Basically, there is no restriction how font files for @code{groff} are
-named and how long font names are; however, to make the font family
-mechanism work (@pxref{Font Families}), fonts within a family should
-start with the family name, followed by the shape.  For example, the
-Times family uses @samp{T} for the family name and @samp{R}, @samp{B},
-@samp{I}, and @samp{BI} to indicate the shapes `roman', `bold',
-`italic', and `bold italic', respectively.  Thus the final font names
-are @samp{TR}, @samp{TB}, @samp{TI}, and @samp{TBI}.
-
-@cindex font path
-@cindex path, for font files
-All font files are kept in the @dfn{font directories}, which constitute
-the @dfn{font path}.  The file search functions always append the
-directory @code{dev}@var{name}, where @var{name} is the name of the
-output device.  Assuming, say, DVI output, and @file{/foo/bar} as a font
-directory, the font files for @code{grodvi} must be in
-@file{/foo/bar/devdvi}.
-
-The elements of the search path for font files are (in that order):
-
-@itemize @bullet
-@item
-The directories specified with @code{gtroff}'s or @code{groff}'s
-@option{-F} command line option.  All device drivers and some
-preprocessors also have this option.
-
-@item
-@tindex GROFF_FONT_PATH@r{, environment variable}
-The directories given in the @env{GROFF_FONT_PATH} environment variable.
-
-@item
-@cindex site-specific directory
-@cindex directory, site-specific
-A site-specific directory and the main font directory; the default
-locations are
-
-@Example
-/usr/local/share/groff/site-font
-/usr/local/share/groff/1.22.3/font
-@endExample
-
-@noindent
-assuming that the version of @code{groff} is 1.22.3, and the
-installation prefix was @file{/usr/local}.  It is possible to fine-tune
-those directories during the installation process.
-@end itemize
-
-
-@c =====================================================================
-
-@node Paper Size, Invocation Examples, Font Directories, Invoking groff
-@section Paper Size
-@cindex paper size
-@cindex size, paper
-@cindex landscape page orientation
-@cindex orientation, landscape
-@cindex page orientation, landscape
-
-In groff, the page size for @code{gtroff} and for output devices are
-handled separately.  @xref{Page Layout}, for vertical manipulation of
-the page size.  @xref{Line Layout}, for horizontal changes.
-
-A default paper size can be set in the device's @file{DESC} file.  Most
-output devices also have a command line option @option{-p} to override
-the default paper size and option @option{-l} to use landscape
-orientation.  @xref{DESC File Format}, for a description of the
-@code{papersize} keyword, which takes the same argument as @option{-p}.
-
-@pindex papersize.tmac
-@pindex troffrc
-A convenient shorthand to set a particular paper size for @code{gtroff}
-is command line option @option{-dpaper=@var{size}}.  This defines string
-@code{paper}, which is processed in file @file{papersize.tmac} (loaded in
-the start-up file @file{troffrc} by default).  Possible values for
-@var{size} are the same as the predefined values for the
-@code{papersize} keyword (but only in lowercase) except
-@code{a7}-@code{d7}.  An appended @samp{l} (ell) character denotes
-landscape orientation.
-
-For example, use the following for PS output on A4 paper in landscape
-orientation:
-
-@Example
-groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
-@endExample
-
-Note that it is up to the particular macro package to respect default
-page dimensions set in this way (most do).
-
-
-@c =====================================================================
-
-@node Invocation Examples,  , Paper Size, Invoking groff
-@section Invocation Examples
-@cindex invocation examples
-@cindex examples of invocation
-
-This section lists several common uses of @code{groff} and the
-corresponding command lines.
-
-@Example
-groff file
-@endExample
-
-@noindent
-This command processes @file{file} without a macro package or a
-preprocessor.  The output device is the default, @samp{ps}, and the
-output is sent to @code{stdout}.
-
-@Example
-groff -t -mandoc -Tascii file | less
-@endExample
-
-@noindent
-This is basically what a call to the @code{man} program does.
-@code{gtroff} processes the manual page @file{file} with the
-@file{mandoc} macro file (which in turn either calls the @file{man} or
-the @file{mdoc} macro package), using the @code{tbl} preprocessor and
-the @acronym{ASCII} output device.  Finally, the @code{less} pager
-displays the result.
-
-@Example
-groff -X -m me file
-@endExample
-
-@noindent
-Preview @file{file} with @code{gxditview}, using the @file{me} macro
-package.  Since no @option{-T} option is specified, use the default
-device (@samp{ps}).  Note that you can either say @w{@samp{-m me}} or
-@w{@samp{-me}}; the latter is an anachronism from the early days of
-@acronym{UNIX}.@footnote{The same is true for the other main macro
-packages that come with @code{groff}: @file{man}, @file{mdoc},
-@file{ms}, @file{mm}, and @file{mandoc}.  This won't work in general;
-for example, to load @file{trace.tmac}, either @samp{-mtrace} or
-@w{@samp{-m trace}} must be used.}
-
-@Example
-groff -man -rD1 -z file
-@endExample
-
-@noindent
-Check @file{file} with the @file{man} macro package, forcing
-double-sided printing -- don't produce any output.
-
-@menu
-* grog::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node grog,  , Invocation Examples, Invocation Examples
-@subsection @code{grog}
-
-@pindex grog
-@code{grog} reads files, guesses which of the @code{groff} preprocessors
-and/or macro packages are required for formatting them, and prints the
-@code{groff} command including those options on the standard output.  It
-generates one or more of the options @option{-e}, @option{-man},
-@option{-me}, @option{-mm}, @option{-mom}, @option{-ms}, @option{-mdoc},
-@option{-mdoc-old}, @option{-p}, @option{-R}, @option{-g}, @option{-G},
-@option{-s}, and @option{-t}.
-
-A special file name@tie{}@file{-} refers to the standard input.
-Specifying no files also means to read the standard input.  Any
-specified options are included in the printed command.  No space is
-allowed between options and their arguments.  The only options
-recognized are @option{-C} (which is also passed on) to enable
-compatibility mode, and @option{-v} to print the version number and
-exit.
-
-For example,
-
-@Example
-grog -Tdvi paper.ms
-@endExample
-
-@noindent
-guesses the appropriate command to print @file{paper.ms} and then prints
-it to the command line after adding the @option{-Tdvi} option.  For
-direct execution, enclose the call to @code{grog} in backquotes at the
-@acronym{UNIX} shell prompt:
-
-@Example
-`grog -Tdvi paper.ms` > paper.dvi
-@endExample
-
-@noindent
-As seen in the example, it is still necessary to redirect the output to
-something meaningful (i.e.@: either a file or a pager program like
-@code{less}).
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Tutorial for Macro Users, Macro Packages, Invoking groff, Top
-@chapter Tutorial for Macro Users
-@cindex tutorial for macro users
-@cindex macros, tutorial for users
-@cindex user's tutorial for macros
-@cindex user's macro tutorial
-
-Most users tend to use a macro package to format their papers.  This
-means that the whole breadth of @code{groff} is not necessary for most
-people.  This chapter covers the material needed to efficiently use a
-macro package.
-
-@menu
-* Basics::
-* Common Features::
-@end menu
-
-
-@c =====================================================================
-
-@node Basics, Common Features, Tutorial for Macro Users, Tutorial for Macro Users
-@section Basics
-@cindex basics of macros
-@cindex macro basics
-
-This section covers some of the basic concepts necessary to understand
-how to use a macro package.@footnote{This section is derived from
-@cite{Writing Papers with nroff using -me} by Eric P.@tie{}Allman.}
-References are made throughout to more detailed information, if desired.
-
-@code{gtroff} reads an input file prepared by the user and outputs a
-formatted document suitable for publication or framing.  The input
-consists of text, or words to be printed, and embedded commands
-(@dfn{requests} and @dfn{escapes}), which tell @code{gtroff} how to
-format the output.  For more detail on this, see @ref{Embedded
-Commands}.
-
-The word @dfn{argument} is used in this chapter to mean a word or number
-that appears on the same line as a request, and which modifies the
-meaning of that request.  For example, the request
-
-@Example
-.sp
-@endExample
-
-@noindent
-spaces one line, but
-
-@Example
-.sp 4
-@endExample
-
-@noindent
-spaces four lines.  The number@tie{}4 is an argument to the @code{sp}
-request, which says to space four lines instead of one.  Arguments are
-separated from the request and from each other by spaces (@emph{no}
-tabs).  More details on this can be found in @ref{Request and Macro
-Arguments}.
-
-The primary function of @code{gtroff} is to collect words from input
-lines, fill output lines with those words, justify the right-hand margin
-by inserting extra spaces in the line, and output the result.  For
-example, the input:
-
-@Example
-Now is the time
-for all good men
-to come to the aid
-of their party.
-Four score and seven
-years ago, etc.
-@endExample
-
-@noindent
-is read, packed onto output lines, and justified to produce:
-
-@quotation
-Now is the time for all good men to come to the aid of their party.
-Four score and seven years ago, etc.
-@end quotation
-
-@cindex break
-@cindex line break
-Sometimes a new output line should be started even though the current
-line is not yet full; for example, at the end of a paragraph.  To do
-this it is possible to cause a @dfn{break}, which starts a new output
-line.  Some requests cause a break automatically, as normally do blank
-input lines and input lines beginning with a space.
-
-Not all input lines are text to be formatted.  Some input lines are
-requests that describe how to format the text.  Requests always have a
-period (@samp{.}) or an apostrophe (@samp{'}) as the first character of
-the input line.
-
-The text formatter also does more complex things, such as automatically
-numbering pages, skipping over page boundaries, putting footnotes in the
-correct place, and so forth.
-
-Here are a few hints for preparing text for input to @code{gtroff}.
-
-@itemize @bullet
-@item
-First, keep the input lines short.  Short input lines are easier to
-edit, and @code{gtroff} packs words onto longer lines anyhow.
-
-@item
-In keeping with this, it is helpful to begin a new line after every
-comma or phrase, since common corrections are to add or delete sentences
-or phrases.
-
-@item
-End each sentence with two spaces -- or better, start each sentence on a
-new line.  @code{gtroff} recognizes characters that usually end a
-sentence, and inserts sentence space accordingly.
-
-@item
-Do not hyphenate words at the end of lines -- @code{gtroff} is smart
-enough to hyphenate words as needed, but is not smart enough to take
-hyphens out and join a word back together.  Also, words such as
-``mother-in-law'' should not be broken over a line, since then a space
-can occur where not wanted, such as ``@w{mother- in}-law''.
-@end itemize
-
-@cindex double-spacing (@code{ls})
-@cindex spacing
-@code{gtroff} double-spaces output text automatically if you use the
-request @w{@samp{.ls 2}}.  Reactivate single-spaced mode by typing
-@w{@samp{.ls 1}}.@footnote{If you need finer granularity of the vertical
-space, use the @code{pvs} request (@pxref{Changing Type Sizes}).}
-
-A number of requests allow to change the way the output looks, sometimes
-called the @dfn{layout} of the output page.  Most of these requests
-adjust the placing of @dfn{whitespace} (blank lines or spaces).
-
-@cindex new page (@code{bp})
-The @code{bp} request starts a new page, causing a line break.
-
-@cindex blank line (@code{sp})
-@cindex empty line (@code{sp})
-@cindex line, empty (@code{sp})
-The request @w{@samp{.sp @var{N}}} leaves @var{N}@tie{}lines of blank
-space.  @var{N}@tie{}can be omitted (meaning skip a single line) or can
-be of the form @var{N}i (for @var{N}@tie{}inches) or @var{N}c (for
-@var{N}@tie{}centimeters).  For example, the input:
-
-@Example
-.sp 1.5i
-My thoughts on the subject
-.sp
-@endExample
-
-@noindent
-leaves one and a half inches of space, followed by the line ``My
-thoughts on the subject'', followed by a single blank line (more
-measurement units are available, see @ref{Measurements}).
-
-@cindex centering lines (@code{ce})
-@cindex lines, centering (@code{ce})
-Text lines can be centered by using the @code{ce} request.  The line
-after @code{ce} is centered (horizontally) on the page.  To center more
-than one line, use @w{@samp{.ce @var{N}}} (where @var{N} is the number
-of lines to center), followed by the @var{N}@tie{}lines.  To center many
-lines without counting them, type:
-
-@Example
-.ce 1000
-lines to center
-.ce 0
-@endExample
-
-@noindent
-The @w{@samp{.ce 0}} request tells @code{groff} to center zero more
-lines, in other words, stop centering.
-
-@cindex line break (@code{br})
-@cindex break (@code{br})
-All of these requests cause a break; that is, they always start a new
-line.  To start a new line without performing any other action, use
-@code{br}.
-
-
-@c =====================================================================
-
-@node Common Features,  , Basics, Tutorial for Macro Users
-@section Common Features
-@cindex common features
-@cindex features, common
-
-@code{gtroff} provides very low-level operations for formatting a
-document.  There are many common routine operations that are done in
-all documents.  These common operations are written into @dfn{macros}
-and collected into a @dfn{macro package}.
-
-All macro packages provide certain common capabilities that fall into
-the following categories.
-
-@menu
-* Paragraphs::
-* Sections and Chapters::
-* Headers and Footers::
-* Page Layout Adjustment::
-* Displays::
-* Footnotes and Annotations::
-* Table of Contents::
-* Indices::
-* Paper Formats::
-* Multiple Columns::
-* Font and Size Changes::
-* Predefined Strings::
-* Preprocessor Support::
-* Configuration and Customization::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Paragraphs, Sections and Chapters, Common Features, Common Features
-@subsection Paragraphs
-@cindex paragraphs
-
-One of the most common and most used capability is starting a paragraph.
-There are a number of different types of paragraphs, any of which can be
-initiated with macros supplied by the macro package.  Normally,
-paragraphs start with a blank line and the first line indented, like the
-text in this manual.  There are also block style paragraphs, which omit
-the indentation:
-
-@Example
-Some   men  look   at  constitutions   with  sanctimonious
-reverence, and deem them like the ark of the covenant, too
-sacred to be touched.
-@endExample
-
-@noindent
-And there are also indented paragraphs, which begin with a tag or label
-at the margin and the remaining text indented.
-
-@Example
-one   This is  the first paragraph.  Notice  how the first
-      line of  the resulting  paragraph lines up  with the
-      other lines in the paragraph.
-@endExample
-
-@Example
-longlabel
-      This  paragraph   had  a  long   label.   The  first
-      character of text on the first line does not line up
-      with  the  text  on  second  and  subsequent  lines,
-      although they line up with each other.
-@endExample
-
-A variation of this is a bulleted list.
-
-@Example
-.     Bulleted lists start with a bullet.   It is possible
-      to use other glyphs instead of the bullet.  In nroff
-      mode using the ASCII character set for output, a dot
-      is used instead of a real bullet.
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Sections and Chapters, Headers and Footers, Paragraphs, Common Features
-@subsection Sections and Chapters
-
-Most macro packages supply some form of section headers.  The simplest
-kind is simply the heading on a line by itself in bold type.  Others
-supply automatically numbered section heading or different heading
-styles at different levels.  Some, more sophisticated, macro packages
-supply macros for starting chapters and appendices.
-
-@c ---------------------------------------------------------------------
-
-@node Headers and Footers, Page Layout Adjustment, Sections and Chapters, Common Features
-@subsection Headers and Footers
-
-Every macro package gives some way to manipulate the @dfn{headers} and
-@dfn{footers} (also called @dfn{titles}) on each page.  This is text put
-at the top and bottom of each page, respectively, which contain data
-like the current page number, the current chapter title, and so on.  Its
-appearance is not affected by the running text.  Some packages allow for
-different ones on the even and odd pages (for material printed in a book
-form).
-
-The titles are called @dfn{three-part titles}, that is, there is a
-left-justified part, a centered part, and a right-justified part.  An
-automatically generated page number may be put in any of these fields
-with the @samp{%} character (see @ref{Page Layout}, for more details).
-
-@c ---------------------------------------------------------------------
-
-@node Page Layout Adjustment, Displays, Headers and Footers, Common Features
-@subsection Page Layout
-
-Most macro packages let the user specify top and bottom margins and
-other details about the appearance of the printed pages.
-
-@c ---------------------------------------------------------------------
-
-@node Displays, Footnotes and Annotations, Page Layout Adjustment, Common Features
-@subsection Displays
-@cindex displays
-
-@dfn{Displays} are sections of text to be set off from the body of the
-paper.  Major quotes, tables, and figures are types of displays, as are
-all the examples used in this document.
-
-@cindex quotes, major
-@cindex major quotes
-@dfn{Major quotes} are quotes that are several lines long, and hence
-are set in from the rest of the text without quote marks around them.
-
-@cindex list
-A @dfn{list} is an indented, single-spaced, unfilled display.  Lists
-should be used when the material to be printed should not be filled and
-justified like normal text, such as columns of figures or the examples
-used in this paper.
-
-@cindex keep
-A @dfn{keep} is a display of lines that are kept on a single page if
-possible.  An example for a keep might be a diagram.  Keeps differ from
-lists in that lists may be broken over a page boundary whereas keeps are
-not.
-
-@cindex keep, floating
-@cindex floating keep
-@dfn{Floating keeps} move relative to the text.  Hence, they are good
-for things that are referred to by name, such as ``See figure@tie{}3''.
-A floating keep appears at the bottom of the current page if it fits;
-otherwise, it appears at the top of the next page.  Meanwhile, the
-surrounding text `flows' around the keep, thus leaving no blank areas.
-
-@c ---------------------------------------------------------------------
-
-@node Footnotes and Annotations, Table of Contents, Displays, Common Features
-@subsection Footnotes and Annotations
-@cindex footnotes
-@cindex annotations
-
-There are a number of requests to save text for later printing.
-
-@dfn{Footnotes} are printed at the bottom of the current page.
-
-@cindex delayed text
-@dfn{Delayed text} is very similar to a footnote except that it is
-printed when called for explicitly.  This allows a list of references to
-appear (for example) at the end of each chapter, as is the convention in
-some disciplines.
-
-Most macro packages that supply this functionality also supply a means
-of automatically numbering either type of annotation.
-
-@c ---------------------------------------------------------------------
-
-@node Table of Contents, Indices, Footnotes and Annotations, Common Features
-@subsection Table of Contents
-@cindex table of contents
-@cindex contents, table of
-
-@dfn{Tables of contents} are a type of delayed text having a tag
-(usually the page number) attached to each entry after a row of dots.
-The table accumulates throughout the paper until printed, usually after
-the paper has ended.  Many macro packages provide the ability to have
-several tables of contents (e.g.@: a standard table of contents, a list
-of tables, etc).
-
-@c ---------------------------------------------------------------------
-
-@node Indices, Paper Formats, Table of Contents, Common Features
-@subsection Indices
-@cindex index, in macro package
-
-While some macro packages use the term @dfn{index}, none actually
-provide that functionality.  The facilities they call indices are
-actually more appropriate for tables of contents.
-
-@pindex makeindex
-To produce a real index in a document, external tools like the
-@code{makeindex} program are necessary.
-
-@c ---------------------------------------------------------------------
-
-@node Paper Formats, Multiple Columns, Indices, Common Features
-@subsection Paper Formats
-@cindex paper formats
-
-Some macro packages provide stock formats for various kinds of
-documents.  Many of them provide a common format for the title and
-opening pages of a technical paper.  The @file{mm} macros in particular
-provide formats for letters and memoranda.
-
-@c ---------------------------------------------------------------------
-
-@node Multiple Columns, Font and Size Changes, Paper Formats, Common Features
-@subsection Multiple Columns
-
-Some macro packages (but not @file{man}) provide the ability to have two
-or more columns on a page.
-
-@c ---------------------------------------------------------------------
-
-@node Font and Size Changes, Predefined Strings, Multiple Columns, Common Features
-@subsection Font and Size Changes
-
-The built-in font and size functions are not always intuitive, so all
-macro packages provide macros to make these operations simpler.
-
-@c ---------------------------------------------------------------------
-
-@node Predefined Strings, Preprocessor Support, Font and Size Changes, Common Features
-@subsection Predefined Strings
-
-Most macro packages provide various predefined strings for a variety of
-uses; examples are sub- and superscripts, printable dates, quotes and
-various special characters.
-
-@c ---------------------------------------------------------------------
-
-@node Preprocessor Support, Configuration and Customization, Predefined Strings, Common Features
-@subsection Preprocessor Support
-
-All macro packages provide support for various preprocessors and may
-extend their functionality.
-
-For example, all macro packages mark tables (which are processed with
-@code{gtbl}) by placing them between @code{TS} and @code{TE} macros.
-The @file{ms} macro package has an option, @samp{.TS@tie{}H}, that
-prints a caption at the top of a new page (when the table is too long to
-fit on a single page).
-
-@c ---------------------------------------------------------------------
-
-@node Configuration and Customization,  , Preprocessor Support, Common Features
-@subsection Configuration and Customization
-
-Some macro packages provide means of customizing many of the details of
-how the package behaves.  This ranges from setting the default type size
-to changing the appearance of section headers.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Macro Packages, gtroff Reference, Tutorial for Macro Users, Top
-@chapter Macro Packages
-@cindex macro packages
-@cindex packages, macros
-
-This chapter documents the main macro packages that come with
-@code{groff}.
-
-Different main macro packages can't be used at the same time; for
-example
-
-@Example
-groff -m man foo.man -m ms bar.doc
-@endExample
-
-@noindent
-doesn't work.  Note that option arguments are processed before
-non-option arguments; the above (failing) sample is thus reordered to
-
-@Example
-groff -m man -m ms foo.man bar.doc
-@endExample
-
-@menu
-* man::
-* mdoc::
-* ms::
-* me::
-* mm::
-* mom::
-@end menu
-
-
-@c =====================================================================
-
-@node man, mdoc, Macro Packages, Macro Packages
-@section @file{man}
-@cindex manual pages
-@cindex man pages
-@pindex an.tmac
-@pindex man.tmac
-@pindex man-old.tmac
-
-This is the most popular and probably the most important macro package
-of @code{groff}.  It is easy to use, and a vast majority of manual pages
-are based on it.
-
-@menu
-* Man options::
-* Man usage::
-* Man font macros::
-* Miscellaneous man macros::
-* Predefined man strings::
-* Preprocessors in man pages::
-* Optional man extensions::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Man options, Man usage, man, man
-@subsection Options
-
-The command line format for using the @file{man} macros with
-@code{groff} is:
-
-@Example
-groff -m man [ -rLL=@var{length} ] [ -rLT=@var{length} ] [ -rFT=@var{dist} ]
-      [ -rcR=1 ] [ -rC1 ] [ -rD1 ] [-rHY=@var{flags} ]
-      [ -rP@var{nnn} ] [ -rS@var{xx} ] [ -rX@var{nnn} ]
-      [ -rIN=@var{length} ] [ -rSN=@var{length} ] [ @var{files}@dots{} ]
-@endExample
-
-@noindent
-It is possible to use @samp{-man} instead of @w{@samp{-m man}}.
-
-@table @code
-@item -rcR=1
-This option (the default if a TTY output device is used) creates a
-single, very long page instead of multiple pages.  Use @code{-rcR=0} to
-disable it.
-
-@item -rC1
-If more than one manual page is given on the command line, number the
-pages continuously, rather than starting each at@tie{}1.
-
-@item -rD1
-Double-sided printing.  Footers for even and odd pages are formatted
-differently.
-
-@item -rFT=@var{dist}
-Set the position of the footer text to @var{dist}.  If positive, the
-distance is measured relative to the top of the page, otherwise it is
-relative to the bottom.  The default is @minus{}0.5@dmn{i}.
-
-@item -rHY=@var{flags}
-Set hyphenation flags.  Possible values are 1@tie{}to hyphenate without
-restrictions, 2@tie{}to not hyphenate the last word on a page, 4@tie{}to
-not hyphenate the last two characters of a word, and 8@tie{}to not
-hyphenate the first two characters of a word.  These values are
-additive; the default is@tie{}14.
-
-@item -rIN=@var{length}
-Set the body text indentation to @var{length}.  If not specified, the
-indentation defaults to 7@dmn{n} (7@tie{}characters) in nroff mode and
-7.2@dmn{n} otherwise.  For nroff, this value should always be an integer
-multiple of unit @samp{n} to get consistent indentation.
-
-@item -rLL=@var{length}
-Set line length to @var{length}.  If not specified, the line length is
-set to respect any value set by a prior @samp{ll} request (which
-@emph{must} be in effect when the @samp{TH} macro is invoked), if this
-differs from the built-in default for the formatter; otherwise it
-defaults to 78@dmn{n} in nroff mode (this is 78 characters per line) and
-6.5@dmn{i} in troff mode.@footnote{Note that the use of a @samp{.ll
-@var{length}} request to initialize the line length, prior to use of the
-@samp{TH} macro, is supported for backward compatibility with some
-versions of the @code{man} program.  @emph{Always} use the
-@option{-rLL=@var{length}} option, or an equivalent @samp{.nr LL
-@var{length}} request, in preference to such a @samp{.ll @var{length}}
-request.  In particular, note that in nroff mode, the request @samp{.ll
-65n}, (with any @var{length} expression that evaluates equal to
-65@dmn{n}, i.e., the formatter's default line length in nroff mode),
-does @emph{not} set the line length to 65@dmn{n} (it is adjusted to the
-@code{man} macro package's default setting of 78@dmn{n}), whereas the
-use of the @option{-rLL=65n} option, or the @samp{.nr LL 65n} request
-@emph{does} establish a line length of 65@dmn{n}.}
-
-@item -rLT=@var{length}
-Set title length to @var{length}.  If not specified, the title length
-defaults to the line length.
-
-@item -rP@var{nnn}
-Page numbering starts with @var{nnn} rather than with@tie{}1.
-
-@item -rS@var{xx}
-Use @var{xx} (which can be 10, 11, or@tie{}12@dmn{pt}) as the base
-document font size instead of the default value of@tie{}10@dmn{pt}.
-
-@item -rSN=@var{length}
-Set the indentation for sub-subheadings to @var{length}.  If not
-specified, the indentation defaults to 3@dmn{n}.
-
-@item -rX@var{nnn}
-After page @var{nnn}, number pages as @var{nnn}a, @var{nnn}b,
-@var{nnn}c, etc.  For example, the option @option{-rX2} produces the
-following page numbers: 1, 2, 2a, 2b, 2c, etc.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Man usage, Man font macros, Man options, man
-@subsection Usage
-@cindex @code{man} macros
-@cindex macros for manual pages [@code{man}]
-
-@pindex man.local
-This section describes the available macros for manual pages.  For
-further customization, put additional macros and requests into the file
-@file{man.local}, which is loaded immediately after the @file{man}
-package.
-
-@Defmac {TH, title section [@Var{extra1} [@Var{extra2} [@Var{extra3}]]], man}
-Set the title of the man page to @var{title} and the section to
-@var{section}, which must have a value between 1 and@tie{}8.  The value
-of @var{section} may also have a string appended, e.g.@: @samp{.pm}, to
-indicate a specific subsection of the man pages.
-
-Both @var{title} and @var{section} are positioned at the left and right
-in the header line (with @var{section} in parentheses immediately
-appended to @var{title}.  @var{extra1} is positioned in the middle of
-the footer line.  @var{extra2} is positioned at the left in the footer
-line (or at the left on even pages and at the right on odd pages if
-double-sided printing is active).  @var{extra3} is centered in the
-header line.
-
-For @acronym{HTML} and @acronym{XHTML} output, headers and footers are
-completely suppressed.
-
-Additionally, this macro starts a new page; the new line number
-is@tie{}1 again (except if the @option{-rC1} option is given on the
-command line) -- this feature is intended only for formatting multiple
-man pages; a single man page should contain exactly one @code{TH} macro
-at the beginning of the file.
-@endDefmac
-
-@Defmac {SH, [@Var{heading}], man}
-Set up an unnumbered section heading sticking out to the left.  Prints
-out all the text following @code{SH} up to the end of the line (or the
-text in the next line if there is no argument to @code{SH}) in bold face
-(or the font specified by the string @code{HF}), one size larger than
-the base document size.  Additionally, the left margin and the
-indentation for the following text is reset to its default value.
-@endDefmac
-
-@Defmac {SS, [@Var{heading}], man}
-Set up an unnumbered (sub)section heading.  Prints out all the text
-following @code{SS} up to the end of the line (or the text in the next
-line if there is no argument to @code{SS}) in bold face (or the font
-specified by the string @code{HF}), at the same size as the base
-document size.  Additionally, the left margin and the indentation for
-the following text is reset to its default value.
-@endDefmac
-
-@Defmac {TP, [@Var{nnn}], man}
-Set up an indented paragraph with label.  The indentation is set to
-@var{nnn} if that argument is supplied (the default unit is @samp{n} if
-omitted), otherwise it is set to the previous indentation value
-specified with @code{TP}, @code{IP}, or @code{HP} (or to the default
-value if none of them have been used yet).
-
-The first line of text following this macro is interpreted as a string
-to be printed flush-left, as it is appropriate for a label.  It is not
-interpreted as part of a paragraph, so there is no attempt to fill the
-first line with text from the following input lines.  Nevertheless, if
-the label is not as wide as the indentation the paragraph starts at the
-same line (but indented), continuing on the following lines.  If the
-label is wider than the indentation the descriptive part of the
-paragraph begins on the line following the label, entirely indented.
-Note that neither font shape nor font size of the label is set to a
-default value; on the other hand, the rest of the text has default font
-settings.
-@endDefmac
-
-@DefmacList {LP, , man}
-@DefmacItemx {PP, , man}
-@DefmacListEndx {P, , man}
-These macros are mutual aliases.  Any of them causes a line break at the
-current position, followed by a vertical space downwards by the amount
-specified by the @code{PD} macro.  The font size and shape are reset to
-the default value (10@dmn{pt} roman if no @option{-rS} option is given
-on the command line).  Finally, the current left margin and the
-indentation is restored.
-@endDefmac
-
-@Defmac {IP, [@Var{designator} [@Var{nnn}]], man}
-Set up an indented paragraph, using @var{designator} as a tag to mark
-its beginning.  The indentation is set to @var{nnn} if that argument is
-supplied (default unit is @samp{n}), otherwise it is set to the previous
-indentation value specified with @code{TP}, @code{IP}, or @code{HP} (or
-the default value if none of them have been used yet).  Font size and
-face of the paragraph (but not the designator) are reset to their
-default values.
-
-To start an indented paragraph with a particular indentation but without
-a designator, use @samp{""} (two double quotes) as the first argument of
-@code{IP}.
-
-For example, to start a paragraph with bullets as the designator and
-4@tie{}en indentation, write
-
-@Example
-.IP \(bu 4
-@endExample
-@endDefmac
-
-@Defmac {HP, [@Var{nnn}], man}
-@cindex hanging indentation [@code{man}]
-@cindex @code{man} macros, hanging indentation
-Set up a paragraph with hanging left indentation.  The indentation is
-set to @var{nnn} if that argument is supplied (default unit is
-@samp{n}), otherwise it is set to the previous indentation value
-specified with @code{TP}, @code{IP}, or @code{HP} (or the default value
-if non of them have been used yet).  Font size and face are reset to
-their default values.
-@endDefmac
-
-@Defmac {RS, [@Var{nnn}], man}
-@cindex left margin, how to move [@code{man}]
-@cindex @code{man} macros, moving left margin
-Move the left margin to the right by the value @var{nnn} if specified
-(default unit is @samp{n}); otherwise it is set to the previous
-indentation value specified with @code{TP}, @code{IP}, or @code{HP} (or
-to the default value if none of them have been used yet).  The
-indentation value is then set to the default.
-
-Calls to the @code{RS} macro can be nested.
-@endDefmac
-
-@Defmac {RE, [@Var{nnn}], man}
-Move the left margin back to level @var{nnn}, restoring the previous
-left margin.  If no argument is given, it moves one level back.  The
-first level (i.e., no call to @code{RS} yet) has number@tie{}1, and each
-call to @code{RS} increases the level by@tie{}1.
-@endDefmac
-
-@cindex line breaks, with vertical space [@code{man}]
-@cindex @code{man} macros, line breaks with vertical space
-To summarize, the following macros cause a line break with the insertion
-of vertical space (which amount can be changed with the @code{PD}
-macro): @code{SH}, @code{SS}, @code{TP}, @code{LP} (@code{PP},
-@code{P}), @code{IP}, and @code{HP}.
-
-@cindex line breaks, without vertical space [@code{man}]
-@cindex @code{man} macros, line breaks without vertical space
-The macros @code{RS} and @code{RE} also cause a break but do not insert
-vertical space.
-
-@cindex default indentation, resetting [@code{man}]
-@cindex indentaion, resetting to default [@code{man}]
-@cindex @code{man} macros, resetting default indentation
-Finally, the macros @code{SH}, @code{SS}, @code{LP} (@code{PP},
-@code{P}), and @code{RS} reset the indentation to its default value.
-
-@c ---------------------------------------------------------------------
-
-@node Man font macros, Miscellaneous man macros, Man usage, man
-@subsection Macros to set fonts
-@cindex font selection [@code{man}]
-@cindex @code{man} macros, how to set fonts
-
-The standard font is roman; the default text size is 10@tie{}point.  If
-command line option @option{-rS=@var{n}} is given, use @var{n}@dmn{pt}
-as the default text size.
-
-@Defmac {SM, [@Var{text}], man}
-Set the text on the same line or the text on the next line in a font
-that is one point size smaller than the default font.
-@endDefmac
-
-@Defmac {SB, [@Var{text}], man}
-@cindex bold face [@code{man}]
-@cindex @code{man} macros, bold face
-Set the text on the same line or the text on the next line in bold face
-font, one point size smaller than the default font.
-@endDefmac
-
-@Defmac {BI, text, man}
-Set its arguments alternately in bold face and italic, without a space
-between the arguments.  Thus,
-
-@Example
-.BI this "word and" that
-@endExample
-
-@noindent
-produces ``thisword andthat'' with ``this'' and ``that'' in bold face,
-and ``word and'' in italics.
-@endDefmac
-
-@Defmac {IB, text, man}
-Set its arguments alternately in italic and bold face, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {RI, text, man}
-Set its arguments alternately in roman and italic, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {IR, text, man}
-Set its arguments alternately in italic and roman, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {BR, text, man}
-Set its arguments alternately in bold face and roman, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {RB, text, man}
-Set its arguments alternately in roman and bold face, without a space
-between the arguments.
-@endDefmac
-
-@Defmac {B, [@Var{text}], man}
-Set @var{text} in bold face.  If no text is present on the line where
-the macro is called, then the text of the next line appears in bold
-face.
-@endDefmac
-
-@Defmac {I, [@Var{text}], man}
-@cindex italic fonts [@code{man}]
-@cindex @code{man} macros, italic fonts
-Set @var{text} in italic.  If no text is present on the line where the
-macro is called, then the text of the next line appears in italic.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node Miscellaneous man macros, Predefined man strings, Man font macros, man
-@subsection Miscellaneous macros
-
-@pindex grohtml
-@cindex @code{man} macros, default indentation
-@cindex default indentation [@code{man}]
-The default indentation is 7.2@dmn{n} in troff mode and 7@dmn{n} in
-nroff mode except for @code{grohtml}, which ignores indentation.
-
-@Defmac {DT, , man}
-@cindex tab stops [@code{man}]
-@cindex @code{man} macros, tab stops
-Set tabs every 0.5@tie{}inches.  Since this macro is always executed
-during a call to the @code{TH} macro, it makes sense to call it only if
-the tab positions have been changed.
-@endDefmac
-
-@Defmac {PD, [@Var{nnn}], man}
-@cindex empty space before a paragraph [@code{man}]
-@cindex @code{man} macros, empty space before a paragraph
-Adjust the empty space before a new paragraph (or section).  The
-optional argument gives the amount of space (default unit is @samp{v});
-without parameter, the value is reset to its default value (1@tie{}line
-in nroff mode, 0.4@dmn{v}@tie{}otherwise).
-
-This affects the macros @code{SH}, @code{SS}, @code{TP}, @code{LP} (as
-well as @code{PP} and @code{P}), @code{IP}, and @code{HP}.
-@endDefmac
-
-The following two macros are included for BSD compatibility.
-
-@Defmac {AT, [@Var{system} [@Var{release}]], man}
-@cindex @code{man}macros, BSD compatibility
-Alter the footer for use with @acronym{AT&T} manpages.  This command
-exists only for compatibility; don't use it.  The first argument
-@var{system} can be:
-
-@table @code
-@item 3
-7th Edition (the default)
-
-@item 4
-System III
-
-@item 5
-System V
-@end table
-
-An optional second argument @var{release} to @code{AT} specifies the
-release number (such as ``System V Release 3'').
-@endDefmac
-
-@Defmac {UC, [@Var{version}], man}
-@cindex @code{man}macros, BSD compatibility
-Alters the footer for use with BSD manpages.  This command exists only
-for compatibility; don't use it.  The argument can be:
-
-@table @code
-@item 3
-3rd Berkeley Distribution (the default)
-
-@item 4
-4th Berkeley Distribution
-
-@item 5
-4.2 Berkeley Distribution
-
-@item 6
-4.3 Berkeley Distribution
-
-@item 7
-4.4 Berkeley Distribution
-@end table
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node Predefined man strings, Preprocessors in man pages, Miscellaneous man macros, man
-@subsection Predefined strings
-
-The following strings are defined:
-
-@Defstr {S, man}
-Switch back to the default font size.
-@endDefstr
-
-@Defstr {HF, man}
-The typeface used for headings.
-The default is @samp{B}.
-@endDefstr
-
-@Defstr {R, man}
-The `registered' sign.
-@endDefstr
-
-@Defstr {Tm, man}
-The `trademark' sign.
-@endDefstr
-
-@DefstrList {lq, man}
-@DefstrListEndx {rq, man}
-@cindex @code{lq} glyph, and @code{lq} string [@code{man}]
-@cindex @code{rq} glyph, and @code{rq} string [@code{man}]
-Left and right quote.  This is equal to @code{\(lq} and @code{\(rq},
-respectively.
-@endDefstr
-
-@c ---------------------------------------------------------------------
-
-@node Preprocessors in man pages, Optional man extensions, Predefined man strings, man
-@subsection Preprocessors in @file{man} pages
-
-@cindex preprocessor, calling convention
-@cindex calling convention of preprocessors
-If a preprocessor like @code{gtbl} or @code{geqn} is needed, it has
-become common usage to make the first line of the man page look like
-this:
-
-@Example
-'\" @var{word}
-@endExample
-
-@pindex geqn@r{, invocation in manual pages}
-@pindex grefer@r{, invocation in manual pages}
-@pindex gtbl@r{, invocation in manual pages}
-@pindex man@r{, invocation of preprocessors}
-@noindent
-Note the single space character after the double quote.  @var{word}
-consists of letters for the needed preprocessors: @samp{e} for
-@code{geqn}, @samp{r} for @code{grefer}, @samp{t} for @code{gtbl}.
-Modern implementations of the @code{man} program read this first line
-and automatically call the right preprocessor(s).
-
-@c ---------------------------------------------------------------------
-
-@node Optional man extensions,  , Preprocessors in man pages, man
-@subsection Optional @file{man} extensions
-
-@pindex man.local
-Use the file @file{man.local} for local extensions to the @code{man}
-macros or for style changes.
-
-@unnumberedsubsubsec Custom headers and footers
-@cindex @code{man} macros, custom headers and footers
-
-In groff versions 1.18.2 and later, you can specify custom headers and
-footers by redefining the following macros in @file{man.local}.
-
-@Defmac {PT, , man}
-Control the content of the headers.  Normally, the header prints the
-command name and section number on either side, and the optional fifth
-argument to @code{TH} in the center.
-@endDefmac
-
-@Defmac {BT, , man}
-Control the content of the footers.  Normally, the footer prints the
-page number and the third and fourth arguments to @code{TH}.
-
-Use the @code{FT} number register to specify the footer position.  The
-default is @minus{}0.5@dmn{i}.
-@endDefmac
-
-@unnumberedsubsubsec Ultrix-specific man macros
-@cindex Ultrix-specific @code{man} macros
-@cindex @code{man} macros, Ultrix-specific
-
-@pindex man.ultrix
-The @code{groff} source distribution includes a file named
-@file{man.ultrix}, containing macros compatible with the Ultrix variant
-of @code{man}.  Copy this file into @file{man.local} (or use the
-@code{mso} request to load it) to enable the following macros.
-
-@Defmac {CT, @Var{key}, man}
-Print @samp{<CTRL/@var{key}>}.
-@endDefmac
-
-@Defmac {CW, , man}
-Print subsequent text using the constant width (Courier) typeface.
-@endDefmac
-
-@Defmac {Ds, , man}
-Begin a non-filled display.
-@endDefmac
-
-@Defmac {De, , man}
-End a non-filled display started with @code{Ds}.
-@endDefmac
-
-@Defmac {EX, [@Var{indent}], man}
-Begin a non-filled display using the constant width (Courier) typeface.
-Use the optional @var{indent} argument to indent the display.
-@endDefmac
-
-@Defmac {EE, , man}
-End a non-filled display started with @code{EX}.
-@endDefmac
-
-@Defmac {G, [@Var{text}], man}
-Set @var{text} in Helvetica.  If no text is present on the line where
-the macro is called, then the text of the next line appears in
-Helvetica.
-@endDefmac
-
-@Defmac {GL, [@Var{text}], man}
-Set @var{text} in Helvetica Oblique.  If no text is present on the line
-where the macro is called, then the text of the next line appears in
-Helvetica Oblique.
-@endDefmac
-
-@Defmac {HB, [@Var{text}], man}
-Set @var{text} in Helvetica Bold.  If no text is present on the line
-where the macro is called, then all text up to the next @code{HB}
-appears in Helvetica Bold.
-@endDefmac
-
-@Defmac {TB, [@Var{text}], man}
-Identical to @code{HB}.
-@endDefmac
-
-@Defmac {MS, @Var{title} @Var{sect} [@Var{punct}], man}
-Set a manpage reference in Ultrix format.  The @var{title} is in Courier
-instead of italic.  Optional punctuation follows the section number
-without an intervening space.
-@endDefmac
-
-@Defmac {NT, [@code{C}] [@Var{title}], man}
-Begin a note.  Print the optional @Var{title}, or the word ``Note'',
-centered on the page.  Text following the macro makes up the body of the
-note, and is indented on both sides.  If the first argument is @code{C},
-the body of the note is printed centered (the second argument replaces
-the word ``Note'' if specified).
-@endDefmac
-
-@Defmac {NE, , man}
-End a note begun with @code{NT}.
-@endDefmac
-
-@Defmac {PN, @Var{path} [@Var{punct}], man}
-Set the path name in constant width (Courier), followed by optional
-punctuation.
-@endDefmac
-
-@Defmac {Pn, [@Var{punct}] @Var{path} [@Var{punct}], man}
-If called with two arguments, identical to @code{PN}.  If called with
-three arguments, set the second argument in constant width (Courier),
-bracketed by the first and third arguments in the current font.
-@endDefmac
-
-@Defmac {R, , man}
-Switch to roman font and turn off any underlining in effect.
-@endDefmac
-
-@Defmac {RN, , man}
-Print the string @samp{<RETURN>}.
-@endDefmac
-
-@Defmac {VS, [@code{4}], man}
-Start printing a change bar in the margin if the number@tie{}@code{4} is
-specified.  Otherwise, this macro does nothing.
-@endDefmac
-
-@Defmac {VE, , man}
-End printing the change bar begun by @code{VS}.
-@endDefmac
-
-@unnumberedsubsubsec Simple example
-
-The following example @file{man.local} file alters the @code{SH} macro
-to add some extra vertical space before printing the heading.  Headings
-are printed in Helvetica Bold.
-
-@Example
-.\" Make the heading fonts Helvetica
-.ds HF HB
-.
-.\" Put more whitespace in front of headings.
-.rn SH SH-orig
-.de SH
-.  if t .sp (u;\\n[PD]*2)
-.  SH-orig \\$*
-..
-@endExample
-
-
-@c =====================================================================
-
-@node mdoc, ms, man, Macro Packages
-@section @file{mdoc}
-@cindex @code{mdoc} macros
-
-@c XXX documentation
-@c XXX this is a placeholder until we get stuff knocked into shape
-See the @cite{groff_mdoc(7)} man page (type @command{man groff_mdoc}
-at the command line).
-
-
-@c =====================================================================
-
-@node ms, me, mdoc, Macro Packages
-@section @file{ms}
-@cindex @code{ms} macros
-
-The @file{-ms} macros are suitable for reports, letters, books, user
-manuals, and so forth.  The package provides macros for cover pages,
-section headings, paragraphs, lists, footnotes, pagination, and a table
-of contents.
-
-@menu
-* ms Intro::
-* General ms Structure::
-* ms Document Control Registers::
-* ms Cover Page Macros::
-* ms Body Text::
-* ms Page Layout::
-* Differences from AT&T ms::
-* Naming Conventions::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node ms Intro, General ms Structure, ms, ms
-@subsection Introduction to @file{ms}
-
-The original @file{-ms} macros were included with @acronym{AT&T}
-@code{troff} as well as the @file{man} macros.  While the @file{man}
-package is intended for brief documents that can be read on-line as well
-as printed, the @file{ms} macros are suitable for longer documents that
-are meant to be printed rather than read on-line.
-
-The @file{ms} macro package included with @code{groff} is a complete,
-bottom-up re-implementation.  Several macros (specific to @acronym{AT&T}
-or Berkeley) are not included, while several new commands are.
-@xref{Differences from AT&T ms}, for more information.
-
-@c ---------------------------------------------------------------------
-
-@node General ms Structure, ms Document Control Registers, ms Intro, ms
-@subsection General structure of an @file{ms} document
-@cindex @code{ms} macros, general structure
-
-The @file{ms} macro package expects a certain amount of structure, but
-not as much as packages such as @file{man} or @file{mdoc}.
-
-The simplest documents can begin with a paragraph macro (such as
-@code{LP} or @code{PP}), and consist of text separated by paragraph
-macros or even blank lines.  Longer documents have a structure as
-follows:
-
-@table @strong
-@item Document type
-If you invoke the @code{RP} (report) macro on the first line of the
-document, @code{groff} prints the cover page information on its own
-page; otherwise it prints the information on the first page with your
-document text immediately following.  Other document formats found in
-@acronym{AT&T} @code{troff} are specific to @acronym{AT&T} or Berkeley,
-and are not supported in @code{groff}.
-
-@item Format and layout
-By setting number registers, you can change your document's type (font
-and size), margins, spacing, headers and footers, and footnotes.
-@xref{ms Document Control Registers}, for more details.
-
-@item Cover page
-A cover page consists of a title, the author's name and institution, an
-abstract, and the date.@footnote{Actually, only the title is required.}
-@xref{ms Cover Page Macros}, for more details.
-
-@item Body
-Following the cover page is your document.  You can use the @file{ms}
-macros to write reports, letters, books, and so forth.  The package is
-designed for structured documents, consisting of paragraphs interspersed
-with headings and augmented by lists, footnotes, tables, and other
-common constructs.  @xref{ms Body Text}, for more details.
-
-@item Table of contents
-Longer documents usually include a table of contents, which you can
-invoke by placing the @code{TC} macro at the end of your document.  The
-@file{ms} macros have minimal indexing facilities, consisting of the
-@code{IX} macro, which prints an entry on standard error.  Printing the
-table of contents at the end is necessary since @code{groff} is a
-single-pass text formatter, thus it cannot determine the page number of
-each section until that section has actually been set and printed.
-Since @file{ms} output is intended for hardcopy, you can manually
-relocate the pages containing the table of contents between the cover
-page and the body text after printing.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node ms Document Control Registers, ms Cover Page Macros, General ms Structure, ms
-@subsection Document control registers
-@cindex @code{ms} macros, document control registers
-
-The following is a list of document control number registers.  For the
-sake of consistency, set registers related to margins at the beginning
-of your document, or just after the @code{RP} macro.  You can set other
-registers later in your document, but you should keep them together at
-the beginning to make them easy to find and edit as necessary.
-
-@unnumberedsubsubsec Margin Settings
-
-@Defmpreg {PO, ms}
-Defines the page offset (i.e., the left margin).  There is no explicit
-right margin setting; the combination of the @code{PO} and @code{LL}
-registers implicitly define the right margin width.
-
-Effective: next page.
-
-Default value: 1@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {LL, ms}
-Defines the line length (i.e., the width of the body text).
-
-Effective: next paragraph.
-
-Default: 6@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {LT, ms}
-Defines the title length (i.e., the header and footer width).  This
-is usually the same as @code{LL}, but not necessarily.
-
-Effective: next paragraph.
-
-Default: 6@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {HM, ms}
-Defines the header margin height at the top of the page.
-
-Effective: next page.
-
-Default: 1@dmn{i}.
-@endDefmpreg
-
-@Defmpreg {FM, ms}
-Defines the footer margin height at the bottom of the page.
-
-Effective: next page.
-
-Default: 1@dmn{i}.
-@endDefmpreg
-
-@unnumberedsubsubsec Text Settings
-
-@Defmpreg {PS, ms}
-Defines the point size of the body text.  If the value is larger than or
-equal to 1000, divide it by 1000 to get a fractional point size.  For
-example, @samp{.nr PS 10250} sets the document's point size to
-10.25@dmn{p}.
-
-Effective: next paragraph.
-
-Default: 10@dmn{p}.
-@endDefmpreg
-
-@Defmpreg {VS, ms}
-Defines the space between lines (line height plus leading).  If the
-value is larger than or equal to 1000, divide it by 1000 to get a
-fractional point size.  Due to backwards compatibility, @code{VS} must
-be smaller than 40000 (this is 40.0@dmn{p}).
-
-Effective: next paragraph.
-
-Default: 12@dmn{p}.
-@endDefmpreg
-
-@Defmpreg {PSINCR, ms}
-Defines an increment in point size, which is applied to section headings
-at nesting levels below the value specified in @code{GROWPS}.  The value
-of @code{PSINCR} should be specified in points, with the @dmn{p} scaling
-factor, and may include a fractional component; for example,
-@w{@samp{.nr PSINCR 1.5p}} sets a point size increment of 1.5@dmn{p}.
-
-Effective: next section heading.
-
-Default: 1@dmn{p}.
-@endDefmpreg
-
-@Defmpreg {GROWPS, ms}
-Defines the heading level below which the point size increment set by
-@code{PSINCR} becomes effective.  Section headings at and above the
-level specified by @code{GROWPS} are printed at the point size set by
-@code{PS}; for each level below the value of @code{GROWPS}, the point
-size is increased in steps equal to the value of @code{PSINCR}.  Setting
-@code{GROWPS} to any value less than@tie{}2 disables the incremental
-heading size feature.
-
-Effective: next section heading.
-
-Default: 0.
-@endDefmpreg
-
-@Defmpreg {HY, ms}
-Defines the hyphenation level.  @code{HY} sets safely the value of the
-low-level @code{hy} register.  Setting the value of @code{HY} to@tie{}0
-is equivalent to using the @code{nh} request.
-
-Effective: next paragraph.
-
-Default: 14.
-@endDefmpreg
-
-@Defmpreg {FAM, ms}
-Defines the font family used to typeset the document.
-
-Effective: next paragraph.
-
-Default: as defined in the output device.
-@endDefmpreg
-
-@unnumberedsubsubsec Paragraph Settings
-
-@Defmpreg {PI, ms}
-Defines the initial indentation of a (@code{PP} macro) paragraph.
-
-Effective: next paragraph.
-
-Default: 5@dmn{n}.
-@endDefmpreg
-
-@Defmpreg {PD, ms}
-Defines the space between paragraphs.
-
-Effective: next paragraph.
-
-Default: 0.3@dmn{v}.
-@endDefmpreg
-
-@Defmpreg {QI, ms}
-Defines the indentation on both sides of a quoted (@code{QP} macro)
-paragraph.
-
-Effective: next paragraph.
-
-Default: 5@dmn{n}.
-@endDefmpreg
-
-@Defmpreg {PORPHANS, ms}
-Defines the minimum number of initial lines of any paragraph that
-should be kept together, to avoid orphan lines at the bottom of a page.
-If a new paragraph is started close to the bottom of a page, and there
-is insufficient space to accommodate @code{PORPHANS} lines before an
-automatic page break, then the page break is forced, before the start of
-the paragraph.
-
-Effective: next paragraph.
-
-Default: 1.
-@endDefmpreg
-
-@Defmpreg {HORPHANS, ms}
-Defines the minimum number of lines of the following paragraph that
-should be kept together with any section heading introduced by the
-@code{NH} or @code{SH} macros.  If a section heading is placed close to
-the bottom of a page, and there is insufficient space to accommodate
-both the heading and at least @code{HORPHANS} lines of the following
-paragraph, before an automatic page break, then the page break is forced
-before the heading.
-
-Effective: next paragraph.
-
-Default: 1.
-@endDefmpreg
-
-@unnumberedsubsubsec Footnote Settings
-
-@Defmpreg {FL, ms}
-Defines the length of a footnote.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[LL]} * 5 / 6}.
-@endDefmpreg
-
-@Defmpreg {FI, ms}
-Defines the footnote indentation.
-
-Effective: next footnote.
-
-Default: 2@dmn{n}.
-@endDefmpreg
-
-@Defmpreg {FF, ms}
-The footnote format:
-@table @code
-@item 0
-Print the footnote number as a superscript; indent the footnote
-(default).
-
-@item 1
-Print the number followed by a period (like 1.@:) and indent the
-footnote.
-
-@item 2
-Like 1, without an indentation.
-
-@item 3
-Like 1, but print the footnote number as a hanging paragraph.
-@end table
-
-Effective: next footnote.
-
-Default: 0.
-@endDefmpreg
-
-@Defmpreg {FPS, ms}
-Defines the footnote point size.  If the value is larger than or equal
-to 1000, divide it by 1000 to get a fractional point size.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[PS]} - 2}.
-@endDefmpreg
-
-@Defmpreg {FVS, ms}
-Defines the footnote vertical spacing.  If the value is larger than or
-equal to 1000, divide it by 1000 to get a fractional point size.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[FPS]} + 2}.
-@endDefmpreg
-
-@Defmpreg {FPD, ms}
-Defines the footnote paragraph spacing.
-
-Effective: next footnote.
-
-Default: @math{@code{@\n[PD]} / 2}.
-@endDefmpreg
-
-@unnumberedsubsubsec Miscellaneous Number Registers
-
-@Defmpreg {MINGW, ms}
-Defines the minimum width between columns in a multi-column document.
-
-Effective: next page.
-
-Default: 2@dmn{n}.
-@endDefmpreg
-
-@Defmpreg {DD, ms}
-Sets the vertical spacing before and after a display, a @code{tbl} table, an
-@code{eqn} equation, or a @code{pic} image.
-
-Effective: next paragraph.
-
-Default: 0.5@dmn{v}.
-@endDefmpreg
-
-@c ---------------------------------------------------------------------
-
-@node ms Cover Page Macros, ms Body Text, ms Document Control Registers, ms
-@subsection Cover page macros
-@cindex @code{ms} macros, cover page
-@cindex cover page macros, [@code{ms}]
-
-Use the following macros to create a cover page for your document in the
-order shown.
-
-@Defmac {RP, [@code{no}], ms}
-Specifies the report format for your document.  The report format
-creates a separate cover page.  The default action (no @code{RP} macro)
-is to print a subset of the cover page on page@tie{}1 of your document.
-
-If you use the word @code{no} as an optional argument, @code{groff}
-prints a title page but does not repeat any of the title page
-information (title, author, abstract, etc.@:) on page@tie{}1 of the
-document.
-@endDefmac
-
-@Defmac {P1, , ms}
-(P-one) Prints the header on page@tie{}1.  The default is to suppress
-the header.
-@endDefmac
-
-@Defmac {DA, [@dots{}], ms}
-(optional) Prints the current date, or the arguments to the macro if
-any, on the title page (if specified) and in the footers.  This is the
-default for @code{nroff}.
-@endDefmac
-
-@Defmac {ND, [@dots{}], ms}
-(optional) Prints the current date, or the arguments to the macro if
-any, on the title page (if specified) but not in the footers.  This is
-the default for @code{troff}.
-@endDefmac
-
-@Defmac {TL, , ms}
-Specifies the document title.  @code{groff} collects text following the
-@code{TL} macro into the title, until reaching the author name or
-abstract.
-@endDefmac
-
-@Defmac {AU, , ms}
-Specifies the author's name, which appears on the line (or lines)
-immediately following.  You can specify multiple authors as follows:
-
-@Example
-.AU
-John Doe
-.AI
-University of West Bumblefuzz
-.AU
-Martha Buck
-.AI
-Monolithic Corporation
-
-...
-@endExample
-@endDefmac
-
-@Defmac {AI, , ms}
-Specifies the author's institution.  You can specify multiple
-institutions in the same way that you specify multiple authors.
-@endDefmac
-
-@Defmac {AB, [@code{no}], ms}
-Begins the abstract.  The default is to print the word
-@acronym{ABSTRACT}, centered and in italics, above the text of the
-abstract.  The word @code{no} as an optional argument suppresses this
-heading.
-@endDefmac
-
-@Defmac {AE, , ms}
-Ends the abstract.
-@endDefmac
-
-The following is example mark-up for a title page.
-@cindex title page, example markup
-@cindex example markup, title page
-
-@CartoucheExample
-.RP
-.TL
-The Inevitability of Code Bloat
-in Commercial and Free Software
-.AU
-J. Random Luser
-.AI
-University of West Bumblefuzz
-.AB
-This report examines the long-term growth
-of the code bases in two large, popular software
-packages; the free Emacs and the commercial
-Microsoft Word.
-While differences appear in the type or order
-of features added, due to the different
-methodologies used, the results are the same
-in the end.
-.PP
-The free software approach is shown to be
-superior in that while free software can
-become as bloated as commercial offerings,
-free software tends to have fewer serious
-bugs and the added features are in line with
-user demand.
-.AE
-
-... the rest of the paper follows ...
-@endCartoucheExample
-
-@c ---------------------------------------------------------------------
-
-@node ms Body Text, ms Page Layout, ms Cover Page Macros, ms
-@subsection Body text
-@cindex @code{ms} macros, body text
-
-This section describes macros used to mark up the body of your document.
-Examples include paragraphs, sections, and other groups.
-
-@menu
-* Paragraphs in ms::
-* Headings in ms::
-* Highlighting in ms::
-* Lists in ms::
-* Indentation values in ms::
-* Tabstops in ms::
-* ms Displays and Keeps::
-* ms Insertions::
-* Example multi-page table::
-* ms Footnotes::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Paragraphs in ms, Headings in ms, ms Body Text, ms Body Text
-@subsubsection Paragraphs
-@cindex @code{ms} macros, paragraph handling
-
-The following paragraph types are available.
-
-@Defmac {PP, , ms}
-Sets a paragraph with an initial indentation.
-@endDefmac
-
-@Defmac {LP, , ms}
-Sets a paragraph without an initial indentation.
-@endDefmac
-
-@Defmac {QP, , ms}
-Sets a paragraph that is indented at both left and right margins.  The
-effect is identical to the @acronym{HTML} @code{<BLOCKQUOTE>} element.
-The next paragraph or heading returns margins to normal.
-@endDefmac
-
-@Defmac {XP, , ms}
-Sets a paragraph whose lines are indented, except for the first line.
-This is a Berkeley extension.
-@endDefmac
-
-The following markup uses all four paragraph macros.
-
-@CartoucheExample
-.NH 2
-Cases used in the study
-.LP
-The following software and versions were
-considered for this report.
-.PP
-For commercial software, we chose
-.B "Microsoft Word for Windows" ,
-starting with version 1.0 through the
-current version (Word 2000).
-.PP
-For free software, we chose
-.B Emacs ,
-from its first appearance as a standalone
-editor through the current version (v20).
-See [Bloggs 2002] for details.
-.QP
-Franklin's Law applied to software:
-software expands to outgrow both
-RAM and disk space over time.
-.LP
-Bibliography:
-.XP
-Bloggs, Joseph R.,
-.I "Everyone's a Critic" ,
-Underground Press, March 2002.
-A definitive work that answers all questions
-and criticisms about the quality and usability of
-free software.
-@endCartoucheExample
-
-The @code{PORPHANS} register (@pxref{ms Document Control Registers})
-operates in conjunction with each of these macros, to inhibit the
-printing of orphan lines at the bottom of any page.
-
-@c ---------------------------------------------------------------------
-
-@node Headings in ms, Highlighting in ms, Paragraphs in ms, ms Body Text
-@subsubsection Headings
-@cindex @code{ms} macros, headings
-
-Use headings to create a hierarchical structure for your document.  The
-@file{ms} macros print headings in @strong{bold}, using the same font
-family and point size as the body text.
-
-The following describes the heading macros:
-
-@DefmacList {NH, @Var{curr-level}, ms}
-@DefmacListEnd {NH, @t{S} @Var{level0} @dots{}, ms}
-Numbered heading.  The argument is either a numeric argument to indicate
-the level of the heading, or the letter@tie{}@code{S} followed by
-numeric arguments to set the heading level explicitly.
-
-If you specify heading levels out of sequence, such as invoking
-@samp{.NH 3} after @samp{.NH 1}, @code{groff} prints a warning on
-standard error.
-@endDefmac
-
-@DefstrList {SN, ms}
-@DefstrItemx {SN-DOT, ms}
-@DefstrListEndx {SN-NO-DOT, ms}
-After invocation of @code{NH}, the assigned section number is made
-available in the strings @code{SN-DOT} (as it appears in a printed
-section heading with default formatting, followed by a terminating
-period), and @code{SN-NO-DOT} (with the terminating period omitted).
-The string @code{SN} is also defined, as an alias for @code{SN-DOT}; if
-preferred, you may redefine it as an alias for @code{SN-NO-DOT}, by
-including the initialization
-@Example
-.als SN SN-NO-DOT
-@endExample
-
-@noindent
-at any time @strong{before} you would like the change to take effect.
-@endDefstr
-
-@Defstr {SN-STYLE, ms}
-You may control the style used to print section numbers, within numbered
-section headings, by defining an appropriate alias for the string
-@code{SN-STYLE}.  The default style, in which the printed section number
-is followed by a terminating period, is obtained by defining the alias
-
-@Example
-.als SN-STYLE SN-DOT
-@endExample
-
-@noindent
-If you prefer to omit the terminating period, from section numbers
-appearing in numbered section headings, you may define the alias
-
-@Example
-.als SN-STYLE SN-NO-DOT
-@endExample
-
-@noindent
-Any such change in section numbering style becomes effective from the
-next use of @code{.NH}, following redefinition of the alias for
-@code{SN-STYLE}.
-@endDefstr
-
-@Defmac {SH, [@Var{match-level}], ms}
-Unnumbered subheading.
-
-The optional @var{match-level} argument is a GNU extension.  It is a
-number indicating the level of the heading, in a manner analogous to the
-@var{curr-level} argument to @code{.NH}.  Its purpose is to match the
-point size, at which the heading is printed, to the size of a numbered
-heading at the same level, when the @code{GROWPS} and @code{PSINCR}
-heading size adjustment mechanism is in effect.  @xref{ms Document
-Control Registers}.
-@endDefmac
-
-The @code{HORPHANS} register (@pxref{ms Document Control Registers})
-operates in conjunction with the @code{NH} and @code{SH} macros, to
-inhibit the printing of orphaned section headings at the bottom of any
-page.
-
-@c ---------------------------------------------------------------------
-
-@node Highlighting in ms, Lists in ms, Headings in ms, ms Body Text
-@subsubsection Highlighting
-@cindex @code{ms} macros, highlighting
-
-The @file{ms} macros provide a variety of methods to highlight or
-emphasize text:
-
-@Defmac {B, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in @strong{bold type}.  If you specify a second
-argument, @code{groff} prints it in the previous font after the bold
-text, with no intervening space (this allows you to set punctuation
-after the highlighted text without highlighting the punctuation).
-Similarly, it prints the third argument (if any) in the previous font
-@strong{before} the first argument.  For example,
-
-@Example
-.B foo ) (
-@endExample
-
-prints (@strong{foo}).
-
-If you give this macro no arguments, @code{groff} prints all text
-following in bold until the next highlighting, paragraph, or heading
-macro.
-@endDefmac
-
-@Defmac {R, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in roman (or regular) type.  It operates
-similarly to the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {I, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in @emph{italic type}.  It operates similarly
-to the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {CW, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in a @code{constant width face}.  It operates
-similarly to the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {BI, [@Var{txt} [@Var{post} [@Var{pre}]]], ms}
-Sets its first argument in bold italic type.  It operates similarly to
-the @code{B}@tie{}macro otherwise.
-@endDefmac
-
-@Defmac {BX, [@Var{txt}], ms}
-Prints its argument and draws a box around it.  If you want to box a
-string that contains spaces, use a digit-width space (@code{\0}).
-@endDefmac
-
-@Defmac {UL, [@Var{txt} [@Var{post}]], ms}
-Prints its first argument with an underline.  If you specify a second
-argument, @code{groff} prints it in the previous font after the
-underlined text, with no intervening space.
-@endDefmac
-
-@Defmac {LG, , ms}
-Prints all text following in larger type (two points larger than the
-current point size) until the next font size, highlighting, paragraph,
-or heading macro.  You can specify this macro multiple times to
-enlarge the point size as needed.
-@endDefmac
-
-@Defmac {SM, , ms}
-Prints all text following in smaller type (two points smaller than the
-current point size) until the next type size, highlighting, paragraph,
-or heading macro.  You can specify this macro multiple times to reduce
-the point size as needed.
-@endDefmac
-
-@Defmac {NL, , ms}
-Prints all text following in the normal point size (that is, the value
-of the @code{PS} register).
-@endDefmac
-
-@DefstrList {@Lbrace{}, ms}
-@DefstrListEndx {@Rbrace{}, ms}
-Text enclosed with @code{\*@{} and @code{\*@}} is printed as a
-superscript.
-@endDefstr
-
-@c ---------------------------------------------------------------------
-
-@node Lists in ms, Indentation values in ms, Highlighting in ms, ms Body Text
-@subsubsection Lists
-@cindex @code{ms} macros, lists
-
-The @code{IP} macro handles duties for all lists.
-
-@Defmac {IP, [@Var{marker} [@Var{width}]], ms}
-The @var{marker} is usually a bullet glyph (@code{\[bu]}) for unordered
-lists, a number (or auto-incrementing number register) for numbered
-lists, or a word or phrase for indented (glossary-style) lists.
-
-The @var{width} specifies the indentation for the body of each list
-item; its default unit is @samp{n}.  Once specified, the indentation
-remains the same for all list items in the document until specified
-again.
-
-The @code{PORPHANS} register (@pxref{ms Document Control Registers})
-operates in conjunction with the @code{IP} macro, to inhibit the
-printing of orphaned list markers at the bottom of any page.
-@endDefmac
-
-The following is an example of a bulleted list.
-@cindex example markup, bulleted list [@code{ms}]
-@cindex bulleted list, example markup [@code{ms}]
-
-@Example
-A bulleted list:
-.IP \[bu] 2
-lawyers
-.IP \[bu]
-guns
-.IP \[bu]
-money
-@endExample
-
-Produces:
-
-@Example
-A bulleted list:
-
-o lawyers
-
-o guns
-
-o money
-@endExample
-
-The following is an example of a numbered list.
-@cindex example markup, numbered list [@code{ms}]
-@cindex numbered list, example markup [@code{ms}]
-
-@Example
-.nr step 1 1
-A numbered list:
-.IP \n[step] 3
-lawyers
-.IP \n+[step]
-guns
-.IP \n+[step]
-money
-@endExample
-
-Produces:
-
-@Example
-A numbered list:
-
-1. lawyers
-
-2. guns
-
-3. money
-@endExample
-
-Note the use of the auto-incrementing number register in this example.
-
-The following is an example of a glossary-style list.
-@cindex example markup, glossary-style list [@code{ms}]
-@cindex glossary-style list, example markup [@code{ms}]
-
-@Example
-A glossary-style list:
-.IP lawyers 0.4i
-Two or more attorneys.
-.IP guns
-Firearms, preferably
-large-caliber.
-.IP money
-Gotta pay for those
-lawyers and guns!
-@endExample
-
-Produces:
-
-@Example
-A glossary-style list:
-
-lawyers
-      Two or more attorneys.
-
-guns  Firearms, preferably large-caliber.
-
-money
-      Gotta pay for those lawyers and guns!
-@endExample
-
-In the last example, the @code{IP} macro places the definition on the
-same line as the term if it has enough space; otherwise, it breaks to
-the next line and starts the definition below the term.  This may or may
-not be the effect you want, especially if some of the definitions break
-and some do not.  The following examples show two possible ways to force
-a break.
-
-The first workaround uses the @code{br} request to force a break after
-printing the term or label.
-
-@CartoucheExample
-A glossary-style list:
-.IP lawyers 0.4i
-Two or more attorneys.
-.IP guns
-.br
-Firearms, preferably large-caliber.
-.IP money
-Gotta pay for those lawyers and guns!
-@endCartoucheExample
-
-The second workaround uses the @code{\p} escape to force the break.
-Note the space following the escape; this is important.  If you omit the
-space, @code{groff} prints the first word on the same line as the term
-or label (if it fits) @strong{then} breaks the line.
-
-@CartoucheExample
-A glossary-style list:
-.IP lawyers 0.4i
-Two or more attorneys.
-.IP guns
-\p Firearms, preferably large-caliber.
-.IP money
-Gotta pay for those lawyers and guns!
-@endCartoucheExample
-
-To set nested lists, use the @code{RS} and @code{RE} macros.
-@xref{Indentation values in ms}, for more information.
-@cindex @code{ms} macros, nested lists
-@cindex nested lists [@code{ms}]
-
-For example:
-
-@CartoucheExample
-.IP \[bu] 2
-Lawyers:
-.RS
-.IP \[bu]
-Dewey,
-.IP \[bu]
-Cheatham,
-.IP \[bu]
-and Howe.
-.RE
-.IP \[bu]
-Guns
-@endCartoucheExample
-
-Produces:
-
-@Example
-o Lawyers:
-
-  o  Dewey,
-
-  o  Cheatham,
-
-  o  and Howe.
-
-o Guns
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Indentation values in ms, Tabstops in ms, Lists in ms, ms Body Text
-@subsubsection Indentation values
-
-In many situations, you may need to indentation a section of text while
-still wrapping and filling.  @xref{Lists in ms}, for an example of
-nested lists.
-
-@DefmacList {RS, , ms}
-@DefmacListEndx {RE, , ms}
-These macros begin and end an indented section.  The @code{PI} register
-controls the amount of indentation, allowing the indented text to line
-up under hanging and indented paragraphs.
-@endDefmac
-
-@xref{ms Displays and Keeps}, for macros to indentation and turn off
-filling.
-
-@c ---------------------------------------------------------------------
-
-@node Tabstops in ms, ms Displays and Keeps, Indentation values in ms, ms Body Text
-@subsubsection Tab Stops
-
-Use the @code{ta} request to define tab stops as needed.  @xref{Tabs and
-Fields}.
-
-@Defmac {TA, , ms}
-Use this macro to reset the tab stops to the default for @file{ms}
-(every 5n).  You can redefine the @code{TA} macro to create a different
-set of default tab stops.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms Displays and Keeps, ms Insertions, Tabstops in ms, ms Body Text
-@subsubsection Displays and keeps
-@cindex @code{ms} macros, displays
-@cindex @code{ms} macros, keeps
-@cindex keeps [@code{ms}]
-@cindex displays [@code{ms}]
-
-Use displays to show text-based examples or figures (such as code
-listings).
-
-Displays turn off filling, so lines of code are displayed as-is without
-inserting @code{br} requests in between each line.  Displays can be
-@dfn{kept} on a single page, or allowed to break across pages.
-
-@DefmacList {DS, @t{L}, ms}
-@DefmacItemx {LD, , ms}
-@DefmacListEndx {DE, , ms}
-Left-justified display.  The @samp{.DS L} call generates a page break,
-if necessary, to keep the entire display on one page.  The @code{LD}
-macro allows the display to break across pages.  The @code{DE} macro
-ends the display.
-@endDefmac
-
-@DefmacList {DS, @t{I}, ms}
-@DefmacItemx {ID, , ms}
-@DefmacListEndx {DE, , ms}
-Indents the display as defined by the @code{DI} register.  The @samp{.DS
-I} call generates a page break, if necessary, to keep the entire display
-on one page.  The @code{ID} macro allows the display to break across
-pages.  The @code{DE} macro ends the display.
-@endDefmac
-
-@DefmacList {DS, @t{B}, ms}
-@DefmacItemx {BD, , ms}
-@DefmacListEndx {DE, , ms}
-Sets a block-centered display: the entire display is left-justified, but
-indented so that the longest line in the display is centered on the
-page.  The @samp{.DS B} call generates a page break, if necessary, to
-keep the entire display on one page.  The @code{BD} macro allows the
-display to break across pages.  The @code{DE} macro ends the display.
-@endDefmac
-
-@DefmacList {DS, @t{C}, ms}
-@DefmacItemx {CD, , ms}
-@DefmacListEndx {DE, , ms}
-Sets a centered display: each line in the display is centered.  The
-@samp{.DS C} call generates a page break, if necessary, to keep the
-entire display on one page.  The @code{CD} macro allows the display to
-break across pages.  The @code{DE} macro ends the display.
-@endDefmac
-
-@DefmacList {DS, @t{R}, ms}
-@DefmacItemx {RD, , ms}
-@DefmacListEndx {DE, , ms}
-Right-justifies each line in the display.  The @samp{.DS R} call
-generates a page break, if necessary, to keep the entire display on one
-page.  The @code{RD} macro allows the display to break across pages.
-The @code{DE} macro ends the display.
-@endDefmac
-
-@DefmacList {Ds, , ms}
-@DefmacListEndx {De, , ms}
-These two macros were formerly provided as aliases for @code{DS} and
-@code{DE}, respectively.  They have been removed, and should no longer
-be used.  The original implementations of @code{DS} and @code{DE} are
-retained, and should be used instead.  X11 documents that actually use
-@code{Ds} and @code{De} always load a specific macro file from the X11
-distribution (@file{macros.t}) that provides proper definitions for the
-two macros.
-@endDefmac
-
-On occasion, you may want to @dfn{keep} other text together on a page.
-For example, you may want to keep two paragraphs together, or a
-paragraph that refers to a table (or list, or other item) immediately
-following.  The @file{ms} macros provide the @code{KS} and @code{KE}
-macros for this purpose.
-
-@DefmacList {KS, , ms}
-@DefmacListEndx {KE, , ms}
-The @code{KS} macro begins a block of text to be kept on a single page,
-and the @code{KE} macro ends the block.
-@endDefmac
-
-@DefmacList {KF, , ms}
-@DefmacListEndx {KE, , ms}
-Specifies a @dfn{floating keep}; if the keep cannot fit on the current
-page, @code{groff} holds the contents of the keep and allows text
-following the keep (in the source file) to fill in the remainder of the
-current page.  When the page breaks, whether by an explicit @code{bp}
-request or by reaching the end of the page, @code{groff} prints the
-floating keep at the top of the new page.  This is useful for printing
-large graphics or tables that do not need to appear exactly where
-specified.
-@endDefmac
-
-You can also use the @code{ne} request to force a page break if there is
-not enough vertical space remaining on the page.
-
-Use the following macros to draw a box around a section of text (such as
-a display).
-
-@DefmacList {B1, , ms}
-@DefmacListEndx {B2, , ms}
-Marks the beginning and ending of text that is to have a box drawn
-around it.  The @code{B1} macro begins the box; the @code{B2} macro ends
-it.  Text in the box is automatically placed in a diversion (keep).
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms Insertions, Example multi-page table, ms Displays and Keeps, ms Body Text
-@subsubsection Tables, figures, equations, and references
-@cindex @code{ms} macros, tables
-@cindex @code{ms} macros, figures
-@cindex @code{ms} macros, equations
-@cindex @code{ms} macros, references
-@cindex tables [@code{ms}]
-@cindex figures [@code{ms}]
-@cindex equations [@code{ms}]
-@cindex references [@code{ms}]
-
-The @file{ms} macros support the standard @code{groff} preprocessors:
-@code{tbl}, @code{pic}, @code{eqn}, and @code{refer}.
-@pindex tbl
-@pindex pic
-@pindex eqn
-@pindex refer
-You mark text meant for preprocessors by enclosing it in pairs of tags
-as follows.
-
-@DefmacList {TS, [@code{H}], ms}
-@DefmacListEndx {TE, , ms}
-Denotes a table, to be processed by the @code{tbl} preprocessor.  The
-optional argument@tie{}@code{H} to @code{TS} instructs @code{groff} to
-create a running header with the information up to the @code{TH} macro.
-@code{groff} prints the header at the beginning of the table; if the
-table runs onto another page, @code{groff} prints the header on the next
-page as well.
-@endDefmac
-
-@DefmacList {PS, , ms}
-@DefmacListEndx {PE, , ms}
-Denotes a graphic, to be processed by the @code{pic} preprocessor.  You
-can create a @code{pic} file by hand, using the @acronym{AT&T}
-@code{pic} manual available on the Web as a reference, or by using a
-graphics program such as @code{xfig}.
-@endDefmac
-
-@DefmacList {EQ, [@Var{align}], ms}
-@DefmacListEndx {EN, , ms}
-Denotes an equation, to be processed by the @code{eqn} preprocessor.
-The optional @var{align} argument can be @code{C}, @code{L},
-or@tie{}@code{I} to center (the default), left-justify, or indent the
-equation.
-@endDefmac
-
-@DefmacList {[, , ms}
-@DefmacListEndx {], , ms}
-Denotes a reference, to be processed by the @code{refer} preprocessor.
-The GNU @cite{refer(1)} man page provides a comprehensive reference to
-the preprocessor and the format of the bibliographic database.
-@endDefmac
-
-@menu
-* Example multi-page table::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Example multi-page table, ms Footnotes, ms Insertions, ms Body Text
-@subsubsection An example multi-page table
-@cindex example markup, multi-page table [@code{ms}]
-@cindex multi-page table, example markup [@code{ms}]
-
-The following is an example of how to set up a table that may print
-across two or more pages.
-
-@CartoucheExample
-.TS H
-allbox expand;
-cb | cb .
-Text      ...of heading...
-_
-.TH
-.T&
-l | l .
-... the rest of the table follows...
-.CW
-.TE
-@endCartoucheExample
-
-@c ---------------------------------------------------------------------
-
-@node ms Footnotes,  , Example multi-page table, ms Body Text
-@subsubsection Footnotes
-@cindex @code{ms} macros, footnotes
-@cindex footnotes [@code{ms}]
-
-The @file{ms} macro package has a flexible footnote system.  You can
-specify either numbered footnotes or symbolic footnotes (that is, using
-a marker such as a dagger symbol).
-
-@Defstr {*, ms}
-Specifies the location of a numbered footnote marker in the text.
-@endDefesc
-
-@DefmacList {FS, , ms}
-@DefmacListEndx {FE, , ms}
-Specifies the text of the footnote.  The default action is to create a
-numbered footnote; you can create a symbolic footnote by specifying a
-@dfn{mark} glyph (such as @code{\[dg]} for the dagger glyph) in the body
-text and as an argument to the @code{FS} macro, followed by the text of
-the footnote and the @code{FE} macro.
-@endDefmac
-
-You can control how @code{groff} prints footnote numbers by changing the
-value of the @code{FF} register.  @xref{ms Document Control Registers}.
-
-@cindex footnotes, and keeps [@code{ms}]
-@cindex keeps, and footnotes [@code{ms}]
-@cindex footnotes, and displays [@code{ms}]
-@cindex displays, and footnotes [@code{ms}]
-Footnotes can be safely used within keeps and displays, but you should
-avoid using numbered footnotes within floating keeps.  You can set a
-second @code{\**} marker between a @code{\**} and its corresponding
-@code{.FS} entry; as long as each @code{FS} macro occurs @emph{after}
-the corresponding @code{\**} and the occurrences of @code{.FS} are in
-the same order as the corresponding occurrences of @code{\**}.
-
-@c ---------------------------------------------------------------------
-
-@node ms Page Layout, Differences from AT&T ms, ms Body Text, ms
-@subsection Page layout
-@cindex @code{ms} macros, page layout
-@cindex page layout [@code{ms}]
-
-The default output from the @file{ms} macros provides a minimalist page
-layout: it prints a single column, with the page number centered at the
-top of each page.  It prints no footers.
-
-You can change the layout by setting the proper number registers and
-strings.
-
-@menu
-* ms Headers and Footers::
-* ms Margins::
-* ms Multiple Columns::
-* ms TOC::
-* ms Strings and Special Characters::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node ms Headers and Footers, ms Margins, ms Page Layout, ms Page Layout
-@subsubsection Headers and footers
-@cindex @code{ms} macros, headers
-@cindex @code{ms} macros, footers
-@cindex headers [@code{ms}]
-@cindex footers [@code{ms}]
-
-For documents that do not distinguish between odd and even pages, set
-the following strings:
-
-@DefstrList {LH, ms}
-@DefstrItemx {CH, ms}
-@DefstrListEndx {RH, ms}
-Sets the left, center, and right headers.
-@endDefstr
-
-@DefstrList {LF, ms}
-@DefstrItemx {CF, ms}
-@DefstrListEndx {RF, ms}
-Sets the left, center, and right footers.
-@endDefstr
-
-For documents that need different information printed in the even and
-odd pages, use the following macros:
-
-@DefmacList {OH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-@DefmacItemx {EH, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-@DefmacItemx {OF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-@DefmacListEndx {EF, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}, ms}
-The @code{OH} and @code{EH} macros define headers for the odd and even
-pages; the @code{OF} and @code{EF} macros define footers for the odd and
-even pages.  This is more flexible than defining the individual strings.
-
-You can replace the quote (@code{'}) marks with any character not
-appearing in the header or footer text.
-@endDefmac
-
-To specify custom header and footer processing, redefine the following
-macros:
-
-@DefmacList {PT,, ms}
-@DefmacItemx {HD,, ms}
-@DefmacListEndx {BT,, ms}
-The @code{PT} macro defines a custom header; the @code{BT} macro defines
-a custom footer.  These macros must handle odd/even/first page
-differences if necessary.
-
-The @code{HD} macro defines additional header processing to take place
-after executing the @code{PT} macro.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms Margins, ms Multiple Columns, ms Headers and Footers, ms Page Layout
-@subsubsection Margins
-@cindex @code{ms} macros, margins
-
-You control margins using a set of number registers.  @xref{ms Document
-Control Registers}, for details.
-
-@c ---------------------------------------------------------------------
-
-@node ms Multiple Columns, ms TOC, ms Margins, ms Page Layout
-@subsubsection Multiple columns
-@cindex @code{ms} macros, multiple columns
-@cindex multiple columns [@code{ms}]
-
-The @file{ms} macros can set text in as many columns as do reasonably
-fit on the page.  The following macros are available; all of them force
-a page break if a multi-column mode is already set.  However, if the
-current mode is single-column, starting a multi-column mode does
-@emph{not} force a page break.
-
-@Defmac {1C, , ms}
-Single-column mode.
-@endDefmac
-
-@Defmac {2C, , ms}
-Two-column mode.
-@endDefmac
-
-@Defmac {MC, [@Var{width} [@Var{gutter}]], ms}
-Multi-column mode.  If you specify no arguments, it is equivalent to the
-@code{2C} macro.  Otherwise, @var{width} is the width of each column and
-@var{gutter} is the space between columns.  The @code{MINGW} number
-register controls the default gutter width.
-@endDefmac
-
-@c ---------------------------------------------------------------------
-
-@node ms TOC, ms Strings and Special Characters, ms Multiple Columns, ms Page Layout
-@subsubsection Creating a table of contents
-@cindex @code{ms} macros, creating table of contents
-@cindex table of contents, creating [@code{ms}]
-
-The facilities in the @file{ms} macro package for creating a table of
-contents are semi-automated at best.  Assuming that you want the table
-of contents to consist of the document's headings, you need to repeat
-those headings wrapped in @code{XS} and @code{XE} macros.
-
-@DefmacList {XS, [@Var{page}], ms}
-@DefmacItemx {XA, [@Var{page}], ms}
-@DefmacListEndx {XE, , ms}
-These macros define a table of contents or an individual entry in the
-table of contents, depending on their use.  The macros are very simple;
-they cannot indent a heading based on its level.  The easiest way to
-work around this is to add tabs to the table of contents string.  The
-following is an example:
-
-@CartoucheExample
-.NH 1
-Introduction
-.XS
-Introduction
-.XE
-.LP
-...
-.CW
-.NH 2
-Methodology
-.XS
-Methodology
-.XE
-.LP
-...
-@endCartoucheExample
-
-You can manually create a table of contents by beginning with the
-@code{XS} macro for the first entry, specifying the page number for that
-entry as the argument to @code{XS}.  Add subsequent entries using the
-@code{XA} macro, specifying the page number for that entry as the
-argument to @code{XA}.  The following is an example:
-
-@CartoucheExample
-.XS 1
-Introduction
-.XA 2
-A Brief History of the Universe
-.XA 729
-Details of Galactic Formation
-...
-.XE
-@endCartoucheExample
-@endDefmac
-
-@Defmac {TC, [@code{no}], ms}
-Prints the table of contents on a new page, setting the page number
-to@tie{}@strong{i} (Roman lowercase numeral one).  You should usually
-place this macro at the end of the file, since @code{groff} is a
-single-pass formatter and can only print what has been collected up to
-the point that the @code{TC} macro appears.
-
-The optional argument @code{no} suppresses printing the title specified
-by the string register @code{TOC}.
-@endDefmac
-
-@Defmac {PX, [@code{no}], ms}
-Prints the table of contents on a new page, using the current page
-numbering sequence.  Use this macro to print a manually-generated table
-of contents at the beginning of your document.
-
-The optional argument @code{no} suppresses printing the title specified
-by the string register @code{TOC}.
-@endDefmac
-
-The @cite{Groff and Friends HOWTO} includes a @code{sed} script that
-automatically inserts @code{XS} and @code{XE} macro entries after each
-heading in a document.
-
-Altering the @code{NH} macro to automatically build the table of
-contents is perhaps initially more difficult, but would save a great
-deal of time in the long run if you use @file{ms} regularly.
-
-@c ---------------------------------------------------------------------
-
-@node ms Strings and Special Characters,  , ms TOC, ms Page Layout
-@subsubsection Strings and Special Characters
-@cindex @code{ms} macros, strings
-@cindex @code{ms} macros, special characters
-@cindex @code{ms} macros, accent marks
-@cindex accent marks [@code{ms}]
-@cindex special characters [@code{ms}]
-@cindex strings [@code{ms}]
-
-The @file{ms} macros provide the following predefined strings.  You can
-change the string definitions to help in creating documents in languages
-other than English.
-
-@Defstr {REFERENCES, ms}
-Contains the string printed at the beginning of the references
-(bibliography) page.  The default is @samp{References}.
-@endDefstr
-
-@Defstr {ABSTRACT, ms}
-Contains the string printed at the beginning of the abstract.  The
-default is @samp{ABSTRACT}.
-@endDefstr
-
-@Defstr {TOC, ms}
-Contains the string printed at the beginning of the table of contents.
-@endDefstr
-
-@DefstrList {MONTH1, ms}
-@DefstrItemx {MONTH2, ms}
-@DefstrItemx {MONTH3, ms}
-@DefstrItemx {MONTH4, ms}
-@DefstrItemx {MONTH5, ms}
-@DefstrItemx {MONTH6, ms}
-@DefstrItemx {MONTH7, ms}
-@DefstrItemx {MONTH8, ms}
-@DefstrItemx {MONTH9, ms}
-@DefstrItemx {MONTH10, ms}
-@DefstrItemx {MONTH11, ms}
-@DefstrListEndx {MONTH12, ms}
-Prints the full name of the month in dates.  The default is
-@samp{January}, @samp{February}, etc.
-@endDefstr
-
-The following special characters are available@footnote{For an
-explanation what special characters are see @ref{Special Characters}.}:
-
-@Defstr {-, ms}
-Prints an em dash.
-@endDefstr
-
-@DefstrList {Q, ms}
-@DefstrListEndx {U, ms}
-Prints typographer's quotes in troff, and plain quotes in nroff.
-@code{\*Q} is the left quote and @code{\*U} is the right quote.
-@endDefstr
-
-Improved accent marks are available in the @file{ms} macros.
-
-@Defmac {AM, , ms}
-Specify this macro at the beginning of your document to enable extended
-accent marks and special characters.  This is a Berkeley extension.
-
-To use the accent marks, place them @strong{after} the character being
-accented.
-
-Note that groff's native support for accents is superior to the
-following definitions.
-@endDefmac
-
-The following accent marks are available after invoking the @code{AM}
-macro:
-
-@Defstr {', ms}
-Acute accent.
-@endDefstr
-
-@Defstr {`, ms}
-Grave accent.
-@endDefstr
-
-@Defstr {^, ms}
-Circumflex.
-@endDefstr
-
-@Defstr {\,, ms}
-Cedilla.
-@endDefstr
-
-@Defstr {~, ms}
-Tilde.
-@endDefstr
-
-@deffn String @t{\*[:]}
-@ifnotinfo
-@stindex : @r{[}ms@r{]}
-@end ifnotinfo
-@ifinfo
-@stindex \*[@r{<colon>}] @r{[}ms@r{]}
-@end ifinfo
-Umlaut.
-@end deffn
-
-@Defstr {v, ms}
-Hacek.
-@endDefstr
-
-@Defstr {_, ms}
-Macron (overbar).
-@endDefstr
-
-@Defstr {., ms}
-Underdot.
-@endDefstr
-
-@Defstr {o, ms}
-Ring above.
-@endDefstr
-
-The following are standalone characters available after invoking the
-@code{AM} macro:
-
-@Defstr {?, ms}
-Upside-down question mark.
-@endDefstr
-
-@Defstr {!, ms}
-Upside-down exclamation point.
-@endDefstr
-
-@Defstr {8, ms}
-German ß ligature.
-@endDefstr
-
-@Defstr {3, ms}
-Yogh.
-@endDefstr
-
-@Defstr {Th, ms}
-Uppercase thorn.
-@endDefstr
-
-@Defstr {th, ms}
-Lowercase thorn.
-@endDefstr
-
-@Defstr {D-, ms}
-Uppercase eth.
-@endDefstr
-
-@Defstr {d-, ms}
-Lowercase eth.
-@endDefstr
-
-@Defstr {q, ms}
-Hooked o.
-@endDefstr
-
-@Defstr {ae, ms}
-Lowercase æ ligature.
-@endDefstr
-
-@Defstr {Ae, ms}
-Uppercase Æ ligature.
-@endDefstr
-
-@c ---------------------------------------------------------------------
-
-@node Differences from AT&T ms, Naming Conventions, ms Page Layout, ms
-@subsection Differences from @acronym{AT&T} @file{ms}
-@cindex @code{ms} macros, differences from @acronym{AT&T}
-@cindex @acronym{AT&T} @code{troff}, @code{ms} macro package differences
-
-This section lists the (minor) differences between the @code{groff -ms}
-macros and @acronym{AT&T} @code{troff -ms} macros.
-
-@itemize @bullet
-@item
-The internals of @code{groff -ms} differ from the internals of
-@acronym{AT&T} @code{troff -ms}.  Documents that depend upon
-implementation details of @acronym{AT&T} @code{troff -ms} may not format
-properly with @code{groff -ms}.
-
-@item
-The general error-handling policy of @code{groff -ms} is to detect and
-report errors, rather than silently to ignore them.
-
-@item
-@code{groff -ms} does not work in compatibility mode (this is, with the
-@option{-C} option).
-
-@item
-There is no special support for typewriter-like devices.
-
-@item
-@code{groff -ms} does not provide cut marks.
-
-@item
-Multiple line spacing is not supported.  Use a larger vertical spacing
-instead.
-
-@item
-Some @acronym{UNIX} @code{ms} documentation says that the @code{CW} and
-@code{GW} number registers can be used to control the column width and
-gutter width, respectively.  These number registers are not used in
-@code{groff -ms}.
-
-@item
-Macros that cause a reset (paragraphs, headings, etc.@:) may change the
-indentation.  Macros that change the indentation do not increment or
-decrement the indentation, but rather set it absolutely.  This can cause
-problems for documents that define additional macros of their own.  The
-solution is to use not the @code{in} request but instead the @code{RS}
-and @code{RE} macros.
-
-@item
-To make @code{groff -ms} use the default page offset (which also
-specifies the left margin), the @code{PO} register must stay undefined
-until the first @file{-ms} macro is evaluated.  This implies that
-@code{PO} should not be used early in the document, unless it is changed
-also: Remember that accessing an undefined register automatically
-defines it.
-@end itemize
-
-@Defmpreg {GS, ms}
-This number register is set to@tie{}1 by the @code{groff -ms} macros,
-but it is not used by the @code{AT&T} @code{troff -ms} macros.
-Documents that need to determine whether they are being formatted with
-@code{AT&T} @code{troff -ms} or @code{groff -ms} should use this number
-register.
-@endDefmpreg
-
-Emulations of a few ancient Bell Labs macros can be re-enabled by
-calling the otherwise undocumented @code{SC} section-header macro.
-Calling @code{SC} enables @code{UC} for marking up a product or
-application name, and the pair @code{P1}/@code{P2} for surrounding code
-example displays.
-
-These are not enabled by default because (a)@tie{}they were not
-documented, in the original @code{ms} manual, and (b)@tie{}the @code{P1}
-and @code{UC} macros collide with different macros with the same names
-in the Berkeley version of @code{ms}.
-
-These @code{groff} emulations are sufficient to give back the 1976
-Kernighan@tie{}& Cherry paper @cite{Typsetting Mathematics -- User's
-Guide} its section headings, and restore some text that had gone missing
-as arguments of undefined macros.  No warranty express or implied is
-given as to how well the typographic details these produce match the
-original Bell Labs macros.
-
-@menu
-* Missing ms Macros::
-* Additional ms Macros::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Missing ms Macros, Additional ms Macros, Differences from AT&T ms, Differences from AT&T ms
-@subsubsection @code{troff} macros not appearing in @code{groff}
-
-Macros missing from @code{groff -ms} are cover page macros specific to
-Bell Labs and Berkeley.  The macros known to be missing are:
-
-@table @code
-@item .TM
-Technical memorandum; a cover sheet style
-
-@item .IM
-Internal memorandum; a cover sheet style
-
-@item .MR
-Memo for record; a cover sheet style
-
-@item .MF
-Memo for file; a cover sheet style
-
-@item .EG
-Engineer's notes; a cover sheet style
-
-@item .TR
-Computing Science Tech Report; a cover sheet style
-
-@item .OK
-Other keywords
-
-@item .CS
-Cover sheet information
-
-@item .MH
-A cover sheet macro
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Additional ms Macros,  , Missing ms Macros, Differences from AT&T ms
-@subsubsection @code{groff} macros not appearing in @acronym{AT&T} @code{troff}
-
-The @code{groff -ms} macros have a few minor extensions compared to the
-@acronym{AT&T} @code{troff -ms} macros.
-
-@Defmac {AM, , ms}
-Improved accent marks.  @xref{ms Strings and Special Characters}, for
-details.
-@endDefmac
-
-@Defmac {DS, @t{I}, ms}
-Indented display.  The default behavior of @acronym{AT&T} @code{troff
--ms} was to indent; the @code{groff} default prints displays flush left
-with the body text.
-@endDefmac
-
-@Defmac {CW, , ms}
-Print text in @code{constant width} (Courier) font.
-@endDefmac
-
-@Defmac {IX, , ms}
-Indexing term (printed on standard error).  You can write a script to
-capture and process an index generated in this manner.
-@endDefmac
-
-The following additional number registers
-appear in @code{groff -ms}:
-
-@Defmpreg {MINGW, ms}
-Specifies a minimum space between columns (for multi-column output);
-this takes the place of the @code{GW} register that was documented but
-apparently not implemented in @acronym{AT&T} @code{troff}.
-@endDefmpreg
-
-Several new string registers are available as well.  You can change
-these to handle (for example) the local language.  @xref{ms Strings and
-Special Characters}, for details.
-
-@c ---------------------------------------------------------------------
-
-@node Naming Conventions,  , Differences from AT&T ms, ms
-@subsection Naming Conventions
-@cindex @code{ms} macros, naming conventions
-@cindex naming conventions, @code{ms} macros
-
-The following conventions are used for names of macros, strings and
-number registers.  External names available to documents that use the
-@code{groff -ms} macros contain only uppercase letters and digits.
-
-Internally the macros are divided into modules; naming conventions are
-as follows:
-
-@itemize @bullet
-@item
-Names used only within one module are of the form
-@var{module}@code{*}@var{name}.
-
-@item
-Names used outside the module in which they are defined are of the form
-@var{module}@code{@@}@var{name}.
-
-@item
-Names associated with a particular environment are of the form
-@var{environment}@code{:}@var{name}; these are used only within the
-@code{par} module.
-
-@item
-@var{name} does not have a module prefix.
-
-@item
-Constructed names used to implement arrays are of the form
-@var{array}@code{!}@var{index}.
-@end itemize
-
-Thus the groff ms macros reserve the following names:
-
-@itemize @bullet
-@item
-Names containing the characters @code{*}, @code{@@}, and@tie{}@code{:}.
-
-@item
-Names containing only uppercase letters and digits.
-@end itemize
-
-
-@c =====================================================================
-
-@node me, mm, ms, Macro Packages
-@section @file{me}
-@cindex @code{me} macro package
-
-@c XXX documentation
-@c XXX this is a placeholder until we get stuff knocked into shape
-See the @file{meintro.me} and @file{meref.me} documents in groff's
-@file{doc} directory.
-
-
-@c =====================================================================
-
-@node mm, mom, me, Macro Packages
-@section @file{mm}
-@cindex @code{mm} macro package
-
-@c XXX documentation
-@c XXX this is a placeholder until we get stuff knocked into shape
-See the @cite{groff_mm(7)} man page (type @command{man groff_mm} at the
-command line).
-
-
-@c =====================================================================
-
-@node mom,  , mm, Macro Packages
-@section @file{mom}
-@cindex @code{mom} macro package
-
-@c XXX documentation
-@c XXX this is a placeholder until we get stuff knocked into shape
-See the @cite{groff_mom(7)} man page (type @command{man groff_mom} at
-the command line), which gives a short overview and a link to its
-extensive documentation in HTML format.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node gtroff Reference, Preprocessors, Macro Packages, Top
-@chapter @code{gtroff} Reference
-@cindex reference, @code{gtroff}
-@cindex @code{gtroff}, reference
-
-This chapter covers @strong{all} of the facilities of @code{gtroff}.
-Users of macro packages may skip it if not interested in details.
-
-
-@menu
-* Text::
-* Measurements::
-* Expressions::
-* Identifiers::
-* Embedded Commands::
-* Registers::
-* Manipulating Filling and Adjusting::
-* Manipulating Hyphenation::
-* Manipulating Spacing::
-* Tabs and Fields::
-* Character Translations::
-* Troff and Nroff Mode::
-* Line Layout::
-* Line Control::
-* Page Layout::
-* Page Control::
-* Fonts and Symbols::
-* Sizes::
-* Strings::
-* Conditionals and Loops::
-* Writing Macros::
-* Page Motions::
-* Drawing Requests::
-* Traps::
-* Diversions::
-* Environments::
-* Suppressing output::
-* Colors::
-* I/O::
-* Postprocessor Access::
-* Miscellaneous::
-* Gtroff Internals::
-* Debugging::
-* Implementation Differences::
-@end menu
-
-
-@c =====================================================================
-
-@node Text, Measurements, gtroff Reference, gtroff Reference
-@section Text
-@cindex text, @code{gtroff} processing
-
-@code{gtroff} input files contain text with control commands
-interspersed throughout.  But, even without control codes, @code{gtroff}
-still does several things with the input text:
-
-@itemize @bullet
-@item
-filling and adjusting
-
-@item
-adding additional space after sentences
-
-@item
-hyphenating
-
-@item
-inserting implicit line breaks
-@end itemize
-
-@menu
-* Filling and Adjusting::
-* Hyphenation::
-* Sentences::
-* Tab Stops::
-* Implicit Line Breaks::
-* Input Conventions::
-* Input Encodings::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Filling and Adjusting, Hyphenation, Text, Text
-@subsection Filling and Adjusting
-@cindex filling
-@cindex adjusting
-
-When @code{gtroff} reads text, it collects words from the input and fits
-as many of them together on one output line as it can.  This is known as
-@dfn{filling}.
-
-@cindex leading spaces
-@cindex spaces, leading and trailing
-@cindex extra spaces
-@cindex trailing spaces
-Once @code{gtroff} has a @dfn{filled} line, it tries to @dfn{adjust} it.
-This means it widens the spacing between words until the text reaches
-the right margin (in the default adjustment mode).  Extra spaces between
-words are preserved, but spaces at the end of lines are ignored.  Spaces
-at the front of a line cause a @dfn{break} (breaks are explained in
-@ref{Implicit Line Breaks}).
-
-@xref{Manipulating Filling and Adjusting}.
-
-@c ---------------------------------------------------------------------
-
-@node Hyphenation, Sentences, Filling and Adjusting, Text
-@subsection Hyphenation
-@cindex hyphenation
-
-Since the odds are not great for finding a set of words, for every
-output line, which fit nicely on a line without inserting excessive
-amounts of space between words, @code{gtroff} hyphenates words so that
-it can justify lines without inserting too much space between words.  It
-uses an internal hyphenation algorithm (a simplified version of the
-algorithm used within @TeX{}) to indicate which words can be hyphenated
-and how to do so.  When a word is hyphenated, the first part of the word
-is added to the current filled line being output (with an attached
-hyphen), and the other portion is added to the next line to be filled.
-
-@xref{Manipulating Hyphenation}.
-
-@c ---------------------------------------------------------------------
-
-@node Sentences, Tab Stops, Hyphenation, Text
-@subsection Sentences
-@cindex sentences
-
-Although it is often debated, some typesetting rules say there should be
-different amounts of space after various punctuation marks.  For
-example, the @cite{Chicago typsetting manual} says that a period at the
-end of a sentence should have twice as much space following it as would
-a comma or a period as part of an abbreviation.
-
-@c XXX exact citation of Chicago manual
-
-@cindex sentence space
-@cindex space between sentences
-@cindex french-spacing
-@code{gtroff} does this by flagging certain characters (normally
-@samp{!}, @samp{?}, and @samp{.}) as @dfn{end-of-sentence} characters.
-When @code{gtroff} encounters one of these characters at the end of a
-line, it appends a normal space followed by a @dfn{sentence space} in
-the formatted output.  (This justifies one of the conventions mentioned
-in @ref{Input Conventions}.)
-
-@cindex transparent characters
-@cindex character, transparent
-@cindex @code{dg} glyph, at end of sentence
-@cindex @code{rq} glyph, at end of sentence
-@cindex @code{cq} glyph, at end of sentence
-@cindex @code{"}, at end of sentence
-@cindex @code{'}, at end of sentence
-@cindex @code{)}, at end of sentence
-@cindex @code{]}, at end of sentence
-@cindex @code{*}, at end of sentence
-In addition, the following characters and symbols are treated
-transparently while handling end-of-sentence characters: @samp{"},
-@samp{'}, @samp{)}, @samp{]}, @samp{*}, @code{\[dg]}, @code{\[rq]}, and
-@code{\[cq]}.
-
-See the @code{cflags} request in @ref{Using Symbols}, for more details.
-
-@cindex @code{\&}, at end of sentence
-To prevent the insertion of extra space after an end-of-sentence
-character (at the end of a line), append @code{\&}.
-
-@c ---------------------------------------------------------------------
-
-@node Tab Stops, Implicit Line Breaks, Sentences, Text
-@subsection Tab Stops
-@cindex tab stops
-@cindex stops, tabulator
-@cindex tab character
-@cindex character, tabulator
-
-@cindex @acronym{EBCDIC} encoding
-@cindex encoding, @acronym{EBCDIC}
-@code{gtroff} translates @dfn{tabulator characters}, also called
-@dfn{tabs} (normally code point @acronym{ASCII} @code{0x09} or
-@acronym{EBCDIC} @code{0x05}), in the input into movements to the next
-tabulator stop.  These tab stops are initially located every half inch
-across the page.  Using this, simple tables can be made easily.
-However, it can often be deceptive as the appearance (and width) of the
-text on a terminal and the results from @code{gtroff} can vary greatly.
-
-Also, a possible sticking point is that lines beginning with tab
-characters are still filled, again producing unexpected results.  For
-example, the following input
-
-@multitable {12345678} {12345678} {12345678} {12345678}
-@item
-@tab 1 @tab 2 @tab 3
-@item
-@tab   @tab 4 @tab 5
-@end multitable
-
-@noindent
-produces
-
-@multitable {12345678} {12345678} {12345678} {12345678} {12345678} {12345678} {12345678}
-@item
-@tab 1 @tab 2 @tab 3 @tab   @tab 4 @tab 5
-@end multitable
-
-@xref{Tabs and Fields}.
-
-@c ---------------------------------------------------------------------
-
-@node Implicit Line Breaks, Input Conventions, Tab Stops, Text
-@subsection Implicit Line Breaks
-@cindex implicit line breaks
-@cindex implicit breaks of lines
-@cindex line, implicit breaks
-@cindex break, implicit
-@cindex line break
-
-An important concept in @code{gtroff} is the @dfn{break}.  When a break
-occurs, @code{gtroff} outputs the partially filled line (unjustified),
-and resumes collecting and filling text on the next output line.
-
-@cindex blank line
-@cindex empty line
-@cindex line, blank
-@cindex blank line macro (@code{blm})
-There are several ways to cause a break in @code{gtroff}.  A blank line
-not only causes a break, but it also outputs a one-line vertical space
-(effectively a blank line).  Note that this behaviour can be modified
-with the blank line macro request @code{blm}.  @xref{Blank Line Traps}.
-
-@cindex fill mode
-@cindex mode, fill
-@cindex leading spaces macro (@code{lsm})
-A line that begins with a space causes a break and the space is output
-at the beginning of the next line.  Note that this space isn't adjusted,
-even in fill mode; however, the behaviour can be modified with the
-leading spaces macro request @code{lsm}.  @xref{Leading Spaces Traps}.
-
-The end of file also causes a break -- otherwise the last line of the
-document may vanish!
-
-Certain requests also cause breaks, implicitly or explicitly.  This is
-discussed in @ref{Manipulating Filling and Adjusting}.
-
-@c ---------------------------------------------------------------------
-
-@node Input Conventions, Input Encodings, Implicit Line Breaks, Text
-@subsection Input Conventions
-@cindex input conventions
-@cindex conventions for input
-
-Since @code{gtroff} does filling automatically, it is traditional in
-@code{groff} not to try and type things in as nicely formatted
-paragraphs.  These are some conventions commonly used when typing
-@code{gtroff} text:
-
-@itemize @bullet
-@item
-Break lines after punctuation, particularly at the end of a sentence and
-in other logical places.  Keep separate phrases on lines by themselves,
-as entire phrases are often added or deleted when editing.
-
-@item
-Try to keep lines less than 40-60@tie{}characters, to allow space for
-inserting more text.
-
-@item
-Do not try to do any formatting in a @acronym{WYSIWYG} manner (i.e.,
-don't try using spaces to get proper indentation).
-@end itemize
-
-@c ---------------------------------------------------------------------
-
-@node Input Encodings,  , Input Conventions, Text
-@subsection Input Encodings
-
-Currently, the following input encodings are available.
-
-@table @asis
-@item cp1047
-@cindex encoding, input, @acronym{EBCDIC}
-@cindex @acronym{EBCDIC}, input encoding
-@cindex input encoding, @acronym{EBCDIC}
-@cindex encoding, input, cp1047
-@cindex cp1047, input encoding
-@cindex input encoding, cp1047
-@cindex IBM cp1047 input encoding
-@pindex cp1047.tmac
-This input encoding works only on @acronym{EBCDIC} platforms (and vice
-versa, the other input encodings don't work with @acronym{EBCDIC}); the
-file @file{cp1047.tmac} is by default loaded at start-up.
-
-@item latin-1
-@cindex encoding, input, @w{latin-1} (ISO @w{8859-1})
-@cindex @w{latin-1} (ISO @w{8859-1}), input encoding
-@cindex ISO @w{8859-1} (@w{latin-1}), input encoding
-@cindex input encoding, @w{latin-1} (ISO @w{8859-1})
-@pindex latin1.tmac
-This is the default input encoding on non-@acronym{EBCDIC} platforms;
-the file @file{latin1.tmac} is loaded at start-up.
-
-@item latin-2
-@cindex encoding, input, @w{latin-2} (ISO @w{8859-2})
-@cindex @w{latin-2} (ISO @w{8859-2}), input encoding
-@cindex ISO @w{8859-2} (@w{latin-2}), input encoding
-@cindex input encoding, @w{latin-2} (ISO @w{8859-2})
-@pindex latin2.tmac
-To use this encoding, either say @w{@samp{.mso latin2.tmac}} at the very
-beginning of your document or use @samp{-mlatin2} as a command line
-argument for @code{groff}.
-
-@item latin-5
-@cindex encoding, input, @w{latin-5} (ISO @w{8859-9})
-@cindex @w{latin-2} (ISO @w{8859-9}), input encoding
-@cindex ISO @w{8859-9} (@w{latin-2}), input encoding
-@cindex input encoding, @w{latin-2} (ISO @w{8859-9})
-@pindex latin2.tmac
-For Turkish.  Either say @w{@samp{.mso latin9.tmac}} at the very
-beginning of your document or use @samp{-mlatin9} as a command line
-argument for @code{groff}.
-
-@item latin-9 (latin-0)
-@cindex encoding, input, @w{latin-9} (@w{latin-0}, ISO @w{8859-15})
-@cindex @w{latin-9} (@w{latin-0}, ISO @w{8859-15}), input encoding
-@cindex ISO @w{8859-15} (@w{latin-9}, @w{latin-0}), input encoding
-@cindex input encoding, @w{latin-9} (@w{latin-9}, ISO @w{8859-15})
-@pindex latin9.tmac
-This encoding is intended (at least in Europe) to replace @w{latin-1}
-encoding.  The main difference to @w{latin-1} is that @w{latin-9}
-contains the Euro character.  To use this encoding, either say
-@w{@samp{.mso latin9.tmac}} at the very beginning of your document or
-use @samp{-mlatin9} as a command line argument for @code{groff}.
-@end table
-
-Note that it can happen that some input encoding characters are not
-available for a particular output device.  For example, saying
-
-@Example
-groff -Tlatin1 -mlatin9 ...
-@endExample
-
-@noindent
-fails if you use the Euro character in the input.  Usually, this
-limitation is present only for devices that have a limited set of
-output glyphs (e.g.@: @option{-Tascii} and @option{-Tlatin1}); for other
-devices it is usually sufficient to install proper fonts that contain
-the necessary glyphs.
-
-@pindex freeeuro.pfa
-@pindex ec.tmac
-Due to the importance of the Euro glyph in Europe, the groff package now
-comes with a @sc{PostScript} font called @file{freeeuro.pfa}, which
-provides various glyph shapes for the Euro.  In other words,
-@w{latin-9} encoding is supported for the @option{-Tps} device out of
-the box (@w{latin-2} isn't).
-
-By its very nature, @option{-Tutf8} supports all input encodings;
-@option{-Tdvi} has support for both @w{latin-2} and @w{latin-9} if the
-command line @option{-mec} is used also to load the file @file{ec.tmac}
-(which flips to the EC fonts).
-
-
-@c =====================================================================
-
-@node Measurements, Expressions, Text, gtroff Reference
-@section Measurements
-@cindex measurements
-@cindex scaling indicator
-@cindex indicator, scaling
-
-@cindex units of measurement
-@cindex basic unit (@code{u})
-@cindex machine unit (@code{u})
-@cindex measurement unit
-@cindex @code{u} unit
-@cindex unit, @code{u}
-@code{gtroff} (like many other programs) requires numeric parameters to
-specify various measurements.  Most numeric parameters@footnote{those
-that specify vertical or horizontal motion or a type size} may have a
-@dfn{measurement unit} attached.  These units are specified as a single
-character that immediately follows the number or expression.  Each of
-these units are understood, by @code{gtroff}, to be a multiple of its
-@dfn{basic unit}.  So, whenever a different measurement unit is
-specified @code{gtroff} converts this into its @dfn{basic units}.  This
-basic unit, represented by a @samp{u}, is a device dependent measurement,
-which is quite small, ranging from 1/75@dmn{th} to 1/72000@dmn{th} of an
-inch.  The values may be given as fractional numbers; however,
-fractional basic units are always rounded to integers.
-
-Some of the measurement units are completely independent of any of the
-current settings (e.g.@: type size) of @code{gtroff}.
-
-@table @code
-@item i
-@cindex inch unit (@code{i})
-@cindex @code{i} unit
-@cindex unit, @code{i}
-Inches.  An antiquated measurement unit still in use in certain
-backwards countries with incredibly low-cost computer equipment.  One
-inch is equal to@tie{}2.54@dmn{cm}.
-
-@item c
-@cindex centimeter unit (@code{c})
-@cindex @code{c} unit
-@cindex unit, @code{c}
-Centimeters.  One centimeter is equal to@tie{}0.3937@dmn{in}.
-
-@item p
-@cindex point unit (@code{p})
-@cindex @code{p} unit
-@cindex unit, @code{p}
-Points.  This is a typesetter's measurement used for measure type size.
-It is 72@tie{}points to an inch.
-
-@item P
-@cindex pica unit (@code{P})
-@cindex @code{P} unit
-@cindex unit, @code{P}
-Pica.  Another typesetting measurement.  6@tie{}Picas to an inch (and
-12@tie{}points to a pica).
-
-@item s
-@itemx z
-@cindex @code{s} unit
-@cindex unit, @code{s}
-@cindex @code{z} unit
-@cindex unit, @code{z}
-@xref{Fractional Type Sizes}, for a discussion of these units.
-
-@item f
-@cindex @code{f} unit
-@cindex unit, @code{f}
-Fractions.  Value is 65536.
-@xref{Colors}, for usage.
-@end table
-
-The other measurements understood by @code{gtroff} depend on settings
-currently in effect in @code{gtroff}.  These are very useful for
-specifying measurements that should look proper with any size of text.
-
-@table @code
-@item m
-@cindex em unit (@code{m})
-@cindex @code{m} unit
-@cindex unit, @code{m}
-Ems.  This unit is equal to the current font size in points.  So called
-because it is @emph{approximately} the width of the letter@tie{}@samp{m}
-in the current font.
-
-@item n
-@cindex en unit (@code{n})
-@cindex @code{n} unit
-@cindex unit, @code{n}
-Ens.  In @code{groff}, this is half of an em.
-
-@item v
-@cindex vertical space unit (@code{v})
-@cindex space, vertical, unit (@code{v})
-@cindex @code{v} unit
-@cindex unit, @code{v}
-Vertical space.  This is equivalent to the current line spacing.
-@xref{Sizes}, for more information about this.
-
-@item M
-@cindex @code{M} unit
-@cindex unit, @code{M}
-100ths of an em.
-@end table
-
-@menu
-* Default Units::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Default Units,  , Measurements, Measurements
-@subsection Default Units
-@cindex default units
-@cindex units, default
-
-Many requests take a default unit.  While this can be helpful at times,
-it can cause strange errors in some expressions.  For example, the line
-length request expects em units.  Here are several attempts to get a
-line length of 3.5@tie{}inches and their results:
-
-@Example
-3.5i      @result{}   3.5i
-7/2       @result{}   0i
-7/2i      @result{}   0i
-(7 / 2)u  @result{}   0i
-7i/2      @result{}   0.1i
-7i/2u     @result{}   3.5i
-@endExample
-
-@noindent
-Everything is converted to basic units first.  In the above example it
-is assumed that 1@dmn{i} equals@tie{}240@dmn{u}, and 1@dmn{m}
-equals@tie{}10@dmn{p} (thus 1@dmn{m} equals@tie{}33@dmn{u}).  The value
-7@dmn{i}/2 is first handled as 7@dmn{i}/2@dmn{m}, then converted to
-1680@dmn{u}/66@dmn{u}, which is 25@dmn{u}, and this is approximately
-0.1@dmn{i}.  As can be seen, a scaling indicator after a closing
-parenthesis is simply ignored.
-
-@cindex measurements, specifying safely
-Thus, the safest way to specify measurements is to always attach a
-scaling indicator.  If you want to multiply or divide by a certain
-scalar value, use @samp{u} as the unit for that value.
-
-
-@c =====================================================================
-
-@node Expressions, Identifiers, Measurements, gtroff Reference
-@section Expressions
-@cindex expressions
-
-@code{gtroff} has most arithmetic operators common to other languages:
-
-@itemize @bullet
-@item
-@cindex arithmetic operators
-@cindex operators, arithmetic
-@opindex +
-@opindex -
-@opindex /
-@opindex *
-@opindex %
-Arithmetic: @samp{+} (addition), @samp{-} (subtraction), @samp{/}
-(division), @samp{*} (multiplication), @samp{%} (modulo).
-
-@code{gtroff} only provides integer arithmetic.  The internal type used
-for computing results is @samp{int}, which is usually a 32@dmn{bit}
-signed integer.
-
-@item
-@cindex comparison operators
-@cindex operators, comparison
-@opindex <
-@opindex >
-@opindex >=
-@opindex <=
-@opindex =
-@opindex ==
-Comparison: @samp{<} (less than), @samp{>} (greater than), @samp{<=}
-(less than or equal), @samp{>=} (greater than or equal), @samp{=}
-(equal), @samp{==} (the same as @samp{=}).
-
-@item
-@cindex logical operators
-@cindex operators, logical
-@opindex &
-@ifnotinfo
-@opindex :
-@end ifnotinfo
-@ifinfo
-@opindex @r{<colon>}
-@end ifinfo
-Logical: @samp{&} (logical and), @samp{:} (logical or).
-
-@item
-@cindex unary operators
-@cindex operators, unary
-@opindex -
-@opindex +
-@opindex !
-@cindex @code{if} request, and the @samp{!} operator
-@cindex @code{while} request, and the @samp{!} operator
-Unary operators: @samp{-} (negating, i.e.@: changing the sign), @samp{+}
-(just for completeness; does nothing in expressions), @samp{!} (logical
-not; this works only within @code{if} and @code{while}
-requests).@footnote{Note that, for example, @samp{!(-1)} evaluates to
-`true' because @code{gtroff} treats both negative numbers and zero as
-`false'.}  See below for the use of unary operators in motion requests.
-
-@cindex logical not, limitation in expression
-@cindex expression, limitation of logical not in
-The logical not operator,
-as described above,
-works only within @code{if} and @code{while} requests.
-Furthermore, it may appear
-only at the beginning of an expression,
-and negates the entire expression.
-Attempting to insert the @samp{!} operator
-within the expression results in a
-@samp{numeric expression expected} warning.  This
-maintains compatibility
-with old versions of @code{troff}.
-
-Example:
-
-@Example
-.nr X 1
-.nr Y 0
-.\" This does not work as expected
-.if (\n[X])&(!\n[Y]) .nop X only
-.
-.\" Use this construct instead
-.if (\n[X]=1)&(\n[Y]=0) .nop X only
-@endExample
-
-@item
-@cindex extremum operators (@code{>?}, @code{<?})
-@cindex operators, extremum (@code{>?}, @code{<?})
-@opindex >?
-@opindex <?
-Extrema: @samp{>?} (maximum), @samp{<?} (minimum).
-
-Example:
-
-@Example
-.nr x 5
-.nr y 3
-.nr z (\n[x] >? \n[y])
-@endExample
-
-@noindent
-The register@tie{}@code{z} now contains@tie{}5.
-
-@item
-@cindex scaling operator
-@cindex operator, scaling
-Scaling: @code{(@var{c};@var{e})}.  Evaluate@tie{}@var{e}
-using@tie{}@var{c} as the default scaling indicator.  If @var{c} is
-missing, ignore scaling indicators in the evaluation of@tie{}@var{e}.
-@end itemize
-
-@cindex parentheses
-@cindex order of evaluation in expressions
-@cindex expression, order of evaluation
-@opindex (
-@opindex )
-Parentheses may be used as in any other language.  However, in
-@code{gtroff} they are necessary to ensure order of evaluation.
-@code{gtroff} has no operator precedence; expressions are evaluated left
-to right.  This means that @code{gtroff} evaluates @samp{3+5*4} as if it
-were parenthesized like @samp{(3+5)*4}, not as @samp{3+(5*4)}, as might
-be expected.
-
-@cindex @code{+}, and page motion
-@cindex @code{-}, and page motion
-@cindex motion operators
-@cindex operators, motion
-For many requests that cause a motion on the page, the unary operators
-@samp{+} and @samp{-} work differently if leading an expression.  They
-then indicate a motion relative to the current position (down or up,
-respectively).
-
-@cindex @code{|}, and page motion
-@cindex absolute position operator (@code{|})
-@cindex position, absolute, operator (@code{|})
-Similarly, a leading @samp{|} operator indicates an absolute position.
-For vertical movements, it specifies the distance from the top of the
-page; for horizontal movements, it gives the distance from the beginning
-of the @emph{input} line.
-
-@cindex @code{bp} request, using @code{+} and@tie{}@code{-}
-@cindex @code{in} request, using @code{+} and@tie{}@code{-}
-@cindex @code{ll} request, using @code{+} and@tie{}@code{-}
-@cindex @code{lt} request, using @code{+} and@tie{}@code{-}
-@cindex @code{nm} request, using @code{+} and@tie{}@code{-}
-@cindex @code{nr} request, using @code{+} and@tie{}@code{-}
-@cindex @code{pl} request, using @code{+} and@tie{}@code{-}
-@cindex @code{pn} request, using @code{+} and@tie{}@code{-}
-@cindex @code{po} request, using @code{+} and@tie{}@code{-}
-@cindex @code{ps} request, using @code{+} and@tie{}@code{-}
-@cindex @code{pvs} request, using @code{+} and@tie{}@code{-}
-@cindex @code{rt} request, using @code{+} and@tie{}@code{-}
-@cindex @code{ti} request, using @code{+} and@tie{}@code{-}
-@cindex @code{\H}, using @code{+} and@tie{}@code{-}
-@cindex @code{\R}, using @code{+} and@tie{}@code{-}
-@cindex @code{\s}, using @code{+} and@tie{}@code{-}
-@samp{+} and @samp{-} are also treated differently by the following
-requests and escapes: @code{bp}, @code{in}, @code{ll}, @code{lt},
-@code{nm}, @code{nr}, @code{pl}, @code{pn}, @code{po}, @code{ps},
-@code{pvs}, @code{rt}, @code{ti}, @code{\H}, @code{\R}, and @code{\s}.
-Here, leading plus and minus signs indicate increments and decrements.
-
-@xref{Setting Registers}, for some examples.
-
-@Defesc {\\B, ', anything, '}
-@cindex numeric expression, valid
-@cindex valid numeric expression
-Return@tie{}1 if @var{anything} is a valid numeric expression; or@tie{}0
-if @var{anything} is empty or not a valid numeric expression.
-@endDefesc
-
-@cindex space characters, in expressions
-@cindex expressions, and space characters
-Due to the way arguments are parsed, spaces are not allowed in
-expressions, unless the entire expression is surrounded by parentheses.
-
-@xref{Request and Macro Arguments}, and @ref{Conditionals and Loops}.
-
-
-@c =====================================================================
-
-@node Identifiers, Embedded Commands, Expressions, gtroff Reference
-@section Identifiers
-@cindex identifiers
-
-Like any other language, @code{gtroff} has rules for properly formed
-@dfn{identifiers}.  In @code{gtroff}, an identifier can be made up of
-almost any printable character, with the exception of the following
-characters:
-
-@itemize @bullet
-@item
-@cindex whitespace characters
-@cindex newline character
-@cindex character, whitespace
-Whitespace characters (spaces, tabs, and newlines).
-
-@item
-@cindex character, backspace
-@cindex backspace character
-@cindex @acronym{EBCDIC} encoding of backspace
-Backspace (@acronym{ASCII}@tie{}@code{0x08} or
-@acronym{EBCDIC}@tie{}@code{0x16}) and character code @code{0x01}.
-
-@item
-@cindex invalid input characters
-@cindex input characters, invalid
-@cindex characters, invalid input
-@cindex Unicode
-The following input characters are invalid and are ignored if
-@code{groff} runs on a machine based on @acronym{ASCII}, causing a
-warning message of type @samp{input} (see @ref{Debugging}, for more
-details): @code{0x00}, @code{0x0B}, @code{0x0D}-@code{0x1F},
-@code{0x80}-@code{0x9F}.
-
-And here are the invalid input characters if @code{groff} runs on an
-@acronym{EBCDIC} host: @code{0x00}, @code{0x08}, @code{0x09},
-@code{0x0B}, @code{0x0D}-@code{0x14}, @code{0x17}-@code{0x1F},
-@code{0x30}-@code{0x3F}.
-
-Currently, some of these reserved codepoints are used internally, thus
-making it non-trivial to extend @code{gtroff} to cover Unicode or other
-character sets and encodings that use characters of these ranges.
-
-Note that invalid characters are removed before parsing; an identifier
-@code{foo}, followed by an invalid character, followed by @code{bar} is
-treated as @code{foobar}.
-@end itemize
-
-For example, any of the following is valid.
-
-@Example
-br
-PP
-(l
-end-list
-@@_
-@endExample
-
-@cindex @code{]}, as part of an identifier
-@noindent
-Note that identifiers longer than two characters with a closing bracket
-(@samp{]}) in its name can't be accessed with escape sequences that
-expect an identifier as a parameter.  For example, @samp{\[foo]]}
-accesses the glyph @samp{foo}, followed by @samp{]}, whereas
-@samp{\C'foo]'} really asks for glyph @samp{foo]}.
-
-@cindex @code{refer}, and macro names starting with @code{[} or @code{]}
-@cindex @code{[}, macro names starting with, and @code{refer}
-@cindex @code{]}, macro names starting with, and @code{refer}
-@cindex macro names, starting with @code{[} or @code{]}, and @code{refer}
-To avoid problems with the @code{refer} preprocessor, macro names should
-not start with @samp{[} or @samp{]}.  Due to backwards compatibility,
-everything after @samp{.[} and @samp{.]} is handled as a special
-argument to @code{refer}.  For example, @samp{.[foo} makes @code{refer}
-to start a reference, using @samp{foo} as a parameter.
-
-@Defesc {\\A, ', ident, '}
-Test whether an identifier @var{ident} is valid in @code{gtroff}.  It
-expands to the character@tie{}1 or@tie{}0 according to whether its
-argument (usually delimited by quotes) is or is not acceptable as the
-name of a string, macro, diversion, number register, environment, or
-font.  It returns@tie{}0 if no argument is given.  This is useful for
-looking up user input in some sort of associative table.
-
-@Example
-\A'end-list'
-    @result{} 1
-@endExample
-@endDefesc
-
-@xref{Escapes}, for details on parameter delimiting characters.
-
-Identifiers in @code{gtroff} can be any length, but, in some contexts,
-@code{gtroff} needs to be told where identifiers end and text begins
-(and in different ways depending on their length):
-
-@itemize @bullet
-@item
-Single character.
-
-@cindex @code{(}, starting a two-character identifier
-@item
-Two characters.  Must be prefixed with @samp{(} in some situations.
-
-@cindex @code{[}, starting an identifier
-@cindex @code{]}, ending an identifier
-@item
-Arbitrary length (@code{gtroff} only).  Must be bracketed with @samp{[}
-and@tie{}@samp{]} in some situations.  Any length identifier can be put
-in brackets.
-@end itemize
-
-@cindex undefined identifiers
-@cindex identifiers, undefined
-Unlike many other programming languages, undefined identifiers are
-silently ignored or expanded to nothing.  When @code{gtroff} finds an
-undefined identifier, it emits a warning, doing the following:
-
-@itemize @bullet
-@item
-If the identifier is a string, macro, or diversion, @code{gtroff}
-defines it as empty.
-
-@item
-If the identifier is a number register, @code{gtroff} defines it with a
-value of@tie{}0.
-@end itemize
-
-@xref{Warnings}., @ref{Interpolating Registers}, and @ref{Strings}.
-
-Note that macros, strings, and diversions share the same name space.
-
-@Example
-.de xxx
-.  nop foo
-..
-.
-.di xxx
-bar
-.br
-.di
-.
-.xxx
-    @result{} bar
-@endExample
-
-@noindent
-As can be seen in the previous example, @code{gtroff} reuses the
-identifier @samp{xxx}, changing it from a macro to a diversion.  No
-warning is emitted!  The contents of the first macro definition is lost.
-
-@xref{Interpolating Registers}, and @ref{Strings}.
-
-
-@c =====================================================================
-
-@node Embedded Commands, Registers, Identifiers, gtroff Reference
-@section Embedded Commands
-@cindex embedded commands
-@cindex commands, embedded
-
-Most documents need more functionality beyond filling, adjusting and
-implicit line breaking.  In order to gain further functionality,
-@code{gtroff} allows commands to be embedded into the text, in two ways.
-
-The first is a @dfn{request} that takes up an entire line, and does
-some large-scale operation (e.g.@: break lines, start new pages).
-
-The other is an @dfn{escape} that can be usually embedded anywhere in
-the text; most requests can accept it even as an argument.  Escapes
-generally do more minor operations like sub- and superscripts, print a
-symbol, etc.
-
-@menu
-* Requests::
-* Macros::
-* Escapes::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Requests, Macros, Embedded Commands, Embedded Commands
-@subsection Requests
-@cindex requests
-
-@cindex control character (@code{.})
-@cindex character, control (@code{.})
-@cindex no-break control character (@code{'})
-@cindex character, no-break control (@code{'})
-@cindex control character, no-break (@code{'})
-A request line begins with a control character, which is either a single
-quote (@samp{'}, the @dfn{no-break control character}) or a period
-(@samp{.}, the normal @dfn{control character}).  These can be changed;
-see @ref{Character Translations}, for details.  After this there may be
-optional tabs or spaces followed by an identifier, which is the name of
-the request.  This may be followed by any number of space-separated
-arguments (@emph{no} tabs here).
-
-@cindex structuring source code of documents or macro packages
-@cindex documents, structuring the source code
-@cindex macro packages, structuring the source code
-Since a control character followed by whitespace only is ignored, it is
-common practice to use this feature for structuring the source code of
-documents or macro packages.
-
-@Example
-.de foo
-.  tm This is foo.
-..
-.
-.
-.de bar
-.  tm This is bar.
-..
-@endExample
-
-@cindex blank line
-@cindex blank line macro (@code{blm})
-Another possibility is to use the blank line macro request @code{blm} by
-assigning an empty macro to it.
-
-@Example
-.de do-nothing
-..
-.blm do-nothing  \" activate blank line macro
-
-.de foo
-.  tm This is foo.
-..
-
-
-.de bar
-.  tm This is bar.
-..
-
-.blm             \" deactivate blank line macro
-@endExample
-
-@xref{Blank Line Traps}.
-
-@cindex zero width space character (@code{\&})
-@cindex character, zero width space (@code{\&})
-@cindex space character, zero width (@code{\&})
-@cindex @code{\&}, escaping control characters
-To begin a line with a control character without it being interpreted,
-precede it with @code{\&}.  This represents a zero width space, which
-means it does not affect the output.
-
-In most cases the period is used as a control character.  Several
-requests cause a break implicitly; using the single quote control
-character prevents this.
-
-@Defreg {.br}
-A read-only number register, which is set to@tie{}1 if a macro is called
-with the normal control character (as defined with the @code{cc}
-request), and set to@tie{}0 otherwise.
-
-@cindex modifying requests
-@cindex requests, modifying
-This allows to reliably modify requests.
-
-@Example
-.als bp*orig bp
-.de bp
-.  tm before bp
-.  ie \\n[.br] .bp*orig
-.  el 'bp*orig
-.  tm after bp
-..
-@endExample
-
-Using this register outside of a macro makes no sense (it always returns
-zero in such cases).
-
-If a macro is called as a string (this is, using @code{\*}), the value
-of the @code{.br} register is inherited from the calling macro.
-@endDefreg
-
-@menu
-* Request and Macro Arguments::
-@end menu
-
-@node Request and Macro Arguments,  , Requests, Requests
-@subsubsection Request and Macro Arguments
-@cindex request arguments
-@cindex macro arguments
-@cindex arguments to requests and macros
-
-@cindex tabs, and macro arguments
-@cindex macro arguments, and tabs
-@cindex arguments to macros, and tabs
-Arguments to requests and macros are processed much like the shell:
-The line is split into arguments according to
-spaces.@footnote{Plan@tie{}9's @code{troff} implementation also allows
-tabs for argument separation -- @code{gtroff} intentionally doesn't
-support this.}
-
-@cindex spaces, in a macro argument
-An argument to a macro that is intended to contain spaces can either be
-enclosed in double quotes, or have the spaces @dfn{escaped} with
-backslashes.  This is @emph{not} true for requests.
-
-Here are a few examples for a hypothetical macro @code{uh}:
-
-@Example
-.uh The Mouse Problem
-.uh "The Mouse Problem"
-.uh The\ Mouse\ Problem
-@endExample
-
-@cindex @code{\~}, difference to @code{\@key{SP}}
-@cindex @code{\@key{SP}}, difference to @code{\~}
-@noindent
-The first line is the @code{uh} macro being called with 3 arguments,
-@samp{The}, @samp{Mouse}, and @samp{Problem}.  The latter two have the
-same effect of calling the @code{uh} macro with one argument, @samp{The
-Mouse Problem}.@footnote{The last solution, i.e., using escaped spaces,
-is ``classical'' in the sense that it can be found in most @code{troff}
-documents.  Nevertheless, it is not optimal in all situations, since
-@w{@samp{\ }} inserts a fixed-width, non-breaking space character that
-can't stretch.  @code{gtroff} provides a different command @code{\~} to
-insert a stretchable, non-breaking space.}
-
-@cindex @code{"}, in a macro argument
-@cindex double quote, in a macro argument
-A double quote that isn't preceded by a space doesn't start a macro
-argument.  If not closing a string, it is printed literally.
-
-For example,
-
-@Example
-.xxx a" "b c" "de"fg"
-@endExample
-
-@noindent
-has the arguments @samp{a"}, @w{@samp{b c}}, @samp{de}, and @samp{fg"}.
-Don't rely on this obscure behaviour!
-
-There are two possibilities to get a double quote reliably.
-
-@itemize @bullet
-@item
-Enclose the whole argument with double quotes and use two consecutive
-double quotes to represent a single one.  This traditional solution has
-the disadvantage that double quotes don't survive argument expansion
-again if called in compatibility mode (using the @option{-C} option of
-@code{groff}):
-
-@Example
-.de xx
-.  tm xx: `\\$1' `\\$2' `\\$3'
-.
-.  yy "\\$1" "\\$2" "\\$3"
-..
-.de yy
-.  tm yy: `\\$1' `\\$2' `\\$3'
-..
-.xx A "test with ""quotes""" .
-    @result{} xx: `A' `test with "quotes"' `.'
-    @result{} yy: `A' `test with ' `quotes""'
-@endExample
-
-@noindent
-If not in compatibility mode, you get the expected result
-
-@Example
-xx: `A' `test with "quotes"' `.'
-yy: `A' `test with "quotes"' `.'
-@endExample
-
-@noindent
-since @code{gtroff} preserves the input level.
-
-@item
-Use the double quote glyph @code{\(dq}.  This works with and without
-compatibility mode enabled since @code{gtroff} doesn't convert
-@code{\(dq} back to a double quote input character.
-
-Note that this method won't work with @acronym{UNIX} @code{troff} in
-general since the glyph `dq' isn't defined normally.
-@end itemize
-
-@cindex @code{ds} request, and double quotes
-Double quotes in the @code{ds} request are handled differently.
-@xref{Strings}, for more details.
-
-@c ---------------------------------------------------------------------
-
-@node Macros, Escapes, Requests, Embedded Commands
-@subsection Macros
-@cindex macros
-
-@code{gtroff} has a @dfn{macro} facility for defining a series of lines
-that can be invoked by name.  They are called in the same manner as
-requests -- arguments also may be passed basically in the same manner.
-
-@xref{Writing Macros}, and @ref{Request and Macro Arguments}.
-
-@c ---------------------------------------------------------------------
-
-@node Escapes,  , Macros, Embedded Commands
-@subsection Escapes
-@cindex escapes
-
-Escapes may occur anywhere in the input to @code{gtroff}.  They usually
-begin with a backslash and are followed by a single character, which
-indicates the function to be performed.  The escape character can be
-changed; see @ref{Character Translations}.
-
-Escape sequences that require an identifier as a parameter accept three
-possible syntax forms.
-
-@itemize @bullet
-@item
-The next single character is the identifier.
-
-@cindex @code{(}, starting a two-character identifier
-@item
-If this single character is an opening parenthesis, take the following
-two characters as the identifier.  Note that there is no closing
-parenthesis after the identifier.
-
-@cindex @code{[}, starting an identifier
-@cindex @code{]}, ending an identifier
-@item
-If this single character is an opening bracket, take all characters
-until a closing bracket as the identifier.
-@end itemize
-
-@noindent
-Examples:
-
-@Example
-\fB
-\n(XX
-\*[TeX]
-@endExample
-
-@cindex @code{'}, delimiting arguments
-@cindex argument delimiting characters
-@cindex characters, argument delimiting
-@cindex delimiting characters for arguments
-Other escapes may require several arguments and/or some special format.
-In such cases the argument is traditionally enclosed in single quotes
-(and quotes are always used in this manual for the definitions of escape
-sequences).  The enclosed text is then processed according to what that
-escape expects.  Example:
-
-@Example
-\l'1.5i\(bu'
-@endExample
-
-@cindex @code{\o}, possible quote characters
-@cindex @code{\b}, possible quote characters
-@cindex @code{\X}, possible quote characters
-Note that the quote character can be replaced with any other character
-that does not occur in the argument (even a newline or a space
-character) in the following escapes: @code{\o}, @code{\b}, and
-@code{\X}.  This makes e.g.
-
-@Example
-A caf
-\o
-e\'
-
-
-in Paris
-  @result{} A café in Paris
-@endExample
-
-@noindent
-possible, but it is better not to use this feature to avoid confusion.
-
-@cindex @code{\%}, used as delimiter
-@cindex @code{\@key{SP}}, used as delimiter
-@cindex @code{\|}, used as delimiter
-@cindex @code{\^}, used as delimiter
-@cindex @code{\@{}, used as delimiter
-@cindex @code{\@}}, used as delimiter
-@cindex @code{\'}, used as delimiter
-@cindex @code{\`}, used as delimiter
-@cindex @code{\-}, used as delimiter
-@cindex @code{\_}, used as delimiter
-@cindex @code{\!}, used as delimiter
-@cindex @code{\?}, used as delimiter
-@cindex @code{\)}, used as delimiter
-@cindex @code{\/}, used as delimiter
-@cindex @code{\,}, used as delimiter
-@cindex @code{\&}, used as delimiter
-@ifnotinfo
-@cindex @code{\:}, used as delimiter
-@end ifnotinfo
-@ifinfo
-@cindex @code{\@r{<colon>}}, used as delimiter
-@end ifinfo
-@cindex @code{\~}, used as delimiter
-@cindex @code{\0}, used as delimiter
-@cindex @code{\a}, used as delimiter
-@cindex @code{\c}, used as delimiter
-@cindex @code{\d}, used as delimiter
-@cindex @code{\e}, used as delimiter
-@cindex @code{\E}, used as delimiter
-@cindex @code{\p}, used as delimiter
-@cindex @code{\r}, used as delimiter
-@cindex @code{\t}, used as delimiter
-@cindex @code{\u}, used as delimiter
-The following escapes sequences (which are handled similarly to
-characters since they don't take a parameter) are also allowed as
-delimiters: @code{\%}, @w{@samp{\ }}, @code{\|}, @code{\^}, @code{\@{},
-@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
-@code{\?}, @code{\)}, @code{\/}, @code{\,}, @code{\&}, @code{\:},
-@code{\~}, @code{\0}, @code{\a}, @code{\c}, @code{\d}, @code{\e},
-@code{\E}, @code{\p}, @code{\r}, @code{\t}, and @code{\u}.  Again, don't
-use these if possible.
-
-@cindex @code{\A}, allowed delimiters
-@cindex @code{\B}, allowed delimiters
-@cindex @code{\Z}, allowed delimiters
-@cindex @code{\C}, allowed delimiters
-@cindex @code{\w}, allowed delimiters
-No newline characters as delimiters are allowed in the following
-escapes: @code{\A}, @code{\B}, @code{\Z}, @code{\C}, and @code{\w}.
-
-@cindex @code{\D}, allowed delimiters
-@cindex @code{\h}, allowed delimiters
-@cindex @code{\H}, allowed delimiters
-@cindex @code{\l}, allowed delimiters
-@cindex @code{\L}, allowed delimiters
-@cindex @code{\N}, allowed delimiters
-@cindex @code{\R}, allowed delimiters
-@cindex @code{\s}, allowed delimiters
-@cindex @code{\S}, allowed delimiters
-@cindex @code{\v}, allowed delimiters
-@cindex @code{\x}, allowed delimiters
-Finally, the escapes @code{\D}, @code{\h}, @code{\H}, @code{\l},
-@code{\L}, @code{\N}, @code{\R}, @code{\s}, @code{\S}, @code{\v}, and
-@code{\x} can't use the following characters as delimiters:
-
-@itemize @bullet
-@item
-@cindex numbers, and delimiters
-@cindex digits, and delimiters
-The digits @code{0}-@code{9}.
-
-@item
-@cindex operators, as delimiters
-@cindex @code{+}, as delimiter
-@cindex @code{-}, as delimiter
-@cindex @code{/}, as delimiter
-@cindex @code{*}, as delimiter
-@cindex @code{%}, as delimiter
-@cindex @code{<}, as delimiter
-@cindex @code{>}, as delimiter
-@cindex @code{=}, as delimiter
-@cindex @code{&}, as delimiter
-@ifnotinfo
-@cindex @code{:}, as delimiter
-@end ifnotinfo
-@ifinfo
-@cindex <colon>, as delimiter
-@end ifinfo
-@cindex @code{(}, as delimiter
-@cindex @code{)}, as delimiter
-@cindex @code{.}, as delimiter
-The (single-character) operators @samp{+-/*%<>=&:().}.
-
-@item
-@cindex space character
-@cindex character, space
-@cindex tab character
-@cindex character, tab
-@cindex newline character
-@cindex character, newline
-The space, tab, and newline characters.
-
-@item
-@cindex @code{\%}, used as delimiter
-@ifnotinfo
-@cindex @code{\:}, used as delimiter
-@end ifnotinfo
-@ifinfo
-@cindex @code{\@r{<colon>}}, used as delimiter
-@end ifinfo
-@cindex @code{\@{}, used as delimiter
-@cindex @code{\@}}, used as delimiter
-@cindex @code{\'}, used as delimiter
-@cindex @code{\`}, used as delimiter
-@cindex @code{\-}, used as delimiter
-@cindex @code{\_}, used as delimiter
-@cindex @code{\!}, used as delimiter
-@cindex @code{\/}, used as delimiter
-@cindex @code{\c}, used as delimiter
-@cindex @code{\e}, used as delimiter
-@cindex @code{\p}, used as delimiter
-All escape sequences except @code{\%}, @code{\:}, @code{\@{},
-@code{\@}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
-@code{\/}, @code{\c}, @code{\e}, and @code{\p}.
-@end itemize
-
-@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-To have a backslash (actually, the current escape character) appear in
-the output several escapes are defined: @code{\\}, @code{\e} or
-@code{\E}.  These are very similar, and only differ with respect to
-being used in macros or diversions.  @xref{Character Translations}, for
-an exact description of those escapes.
-
-@xref{Implementation Differences}, @ref{Copy-in Mode}, and
-@ref{Diversions}, @ref{Identifiers}, for more information.
-
-@menu
-* Comments::
-@end menu
-
-@node Comments,  , Escapes, Escapes
-@subsubsection Comments
-@cindex comments
-
-Probably one of the most@footnote{Unfortunately, this is a lie.  But
-hopefully future @code{gtroff} hackers will believe it @code{:-)}}
-common forms of escapes is the comment.
-
-@Defesc {\\", , , }
-Start a comment.  Everything to the end of the input line is ignored.
-
-This may sound simple, but it can be tricky to keep the comments from
-interfering with the appearance of the final output.
-
-@cindex @code{ds}, @code{ds1} requests, and comments
-@cindex @code{as}, @code{as1} requests, and comments
-If the escape is to the right of some text or a request, that portion of
-the line is ignored, but the space leading up to it is noticed by
-@code{gtroff}.  This only affects the @code{ds} and @code{as} request
-and its variants.
-
-@cindex tabs, before comments
-@cindex comments, lining up with tabs
-One possibly irritating idiosyncracy is that tabs must not be used to
-line up comments.  Tabs are not treated as whitespace between the
-request and macro arguments.
-
-@cindex undefined request
-@cindex request, undefined
-A comment on a line by itself is treated as a blank line, because after
-eliminating the comment, that is all that remains:
-
-@Example
-Test
-\" comment
-Test
-@endExample
-
-@noindent
-produces
-
-@Example
-Test
-
-Test
-@endExample
-
-To avoid this, it is common to start the line with @code{.\"}, which
-causes the line to be treated as an undefined request and thus ignored
-completely.
-
-@cindex @code{'}, as a comment
-Another commenting scheme seen sometimes is three consecutive single
-quotes (@code{'''}) at the beginning of a line.  This works, but
-@code{gtroff} gives a warning about an undefined macro (namely
-@code{''}), which is harmless, but irritating.
-@endDefesc
-
-@Defesc {\\#, , , }
-To avoid all this, @code{gtroff} has a new comment mechanism using the
-@code{\#} escape.  This escape works the same as @code{\"} except that
-the newline is also ignored:
-
-@Example
-Test
-\# comment
-Test
-@endExample
-
-@noindent
-produces
-
-@Example
-Test Test
-@endExample
-
-@noindent
-as expected.
-@endDefesc
-
-@Defreq {ig, [@Var{end}]}
-Ignore all input until @code{gtroff} encounters the macro named
-@code{.}@var{end} on a line by itself (or @code{..} if @var{end} is not
-specified).  This is useful for commenting out large blocks of text:
-
-@Example
-text text text...
-.ig
-This is part of a large block
-of text that has been
-temporarily(?) commented out.
-
-We can restore it simply by removing
-the .ig request and the ".." at the
-end of the block.
-..
-More text text text...
-@endExample
-
-@noindent
-produces
-
-@Example
-text text text@dots{}  More text text text@dots{}
-@endExample
-
-@noindent
-Note that the commented-out block of text does not cause a break.
-
-@cindex @code{ig} request, and copy-in mode
-@cindex copy-in mode, and @code{ig} request
-@cindex mode, copy-in, and @code{ig} request
-@cindex @code{ig} request, and auto-increment
-@cindex auto-increment, and @code{ig} request
-The input is read in copy-mode; auto-incremented registers @emph{are}
-affected (@pxref{Auto-increment}).
-@endDefreq
-
-
-@c =====================================================================
-
-@node Registers, Manipulating Filling and Adjusting, Embedded Commands, gtroff Reference
-@section Registers
-@cindex registers
-
-Numeric variables in @code{gtroff} are called @dfn{registers}.  There
-are a number of built-in registers, supplying anything from the date to
-details of formatting parameters.
-
-@xref{Identifiers}, for details on register identifiers.
-
-@menu
-* Setting Registers::
-* Interpolating Registers::
-* Auto-increment::
-* Assigning Formats::
-* Built-in Registers::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Setting Registers, Interpolating Registers, Registers, Registers
-@subsection Setting Registers
-@cindex setting registers (@code{nr}, @code{\R})
-@cindex registers, setting (@code{nr}, @code{\R})
-
-Define or set registers using the @code{nr} request or the @code{\R}
-escape.
-
-Although the following requests and escapes can be used to create
-registers, simply using an undefined register will cause it to be
-set to zero.
-
-@DefreqList {nr, ident value}
-@DefescListEndx {\\R, ', ident value, '}
-Set number register @var{ident} to @var{value}.  If @var{ident} doesn't
-exist, @code{gtroff} creates it.
-
-The argument to @code{\R} usually has to be enclosed in quotes.
-@xref{Escapes}, for details on parameter delimiting characters.
-
-The @code{\R} escape doesn't produce an input token in @code{gtroff};
-in other words, it vanishes completely after @code{gtroff} has
-processed it.
-
-For example, the following two lines are equivalent:
-
-@Example
-.nr a (((17 + (3 * 4))) % 4)
-\R'a (((17 + (3 * 4))) % 4)'
-    @result{} 1
-@endExample
-
-Note that the complete transparency of @code{\R} can cause surprising
-effects if you use number registers like @code{.k}, which get evaluated
-at the time they are accessed.
-
-@Example
-.ll 1.6i
-.
-aaa bbb ccc ddd eee fff ggg hhh\R':k \n[.k]'
-.tm :k == \n[:k]
-    @result{} :k == 126950
-.
-.br
-.
-aaa bbb ccc ddd eee fff ggg hhh\h'0'\R':k \n[.k]'
-.tm :k == \n[:k]
-    @result{} :k == 15000
-@endExample
-
-If you process this with the @sc{PostScript} device (@code{-Tps}),
-there will be a line break eventually after @code{ggg} in both input
-lines.  However, after processing the space after @code{ggg}, the
-partially collected line is not overfull yet, so @code{troff}
-continues to collect input until it sees the space (or in this case,
-the newline) after @code{hhh}.  At this point, the line is longer
-than the line length, and the line gets broken.
-
-In the first input line, since the @code{\R} escape leaves no traces,
-the check for the overfull line hasn't been done yet at the point where
-@code{\R} gets handled, and you get a value for the @code{.k} number
-register that is even greater than the current line length.
-
-In the second input line, the insertion of @code{\h'0'} to emit an
-invisible zero-width space forces @code{troff} to check the line length,
-which in turn causes the start of a new output line.  Now @code{.k}
-returns the expected value.
-@endDefreq
-
-Both @code{nr} and @code{\R} have two additional special forms to
-increment or decrement a register.
-
-@DefreqList {nr, ident @t{+}@Var{value}}
-@DefreqItem {nr, ident @t{-}@Var{value}}
-@DefescItemx {\\R, ', ident @t{+}value, '}
-@DefescListEnd {\\R, ', ident @t{-}value, '}
-Increment (decrement) register @var{ident} by @var{value}.
-
-@Example
-.nr a 1
-.nr a +1
-\na
-    @result{} 2
-@endExample
-
-@cindex negating register values
-To assign the negated value of a register to another register, some care
-must be taken to get the desired result:
-
-@Example
-.nr a 7
-.nr b 3
-.nr a -\nb
-\na
-    @result{} 4
-.nr a (-\nb)
-\na
-    @result{} -3
-@endExample
-
-@noindent
-The surrounding parentheses prevent the interpretation of the minus sign
-as a decrementing operator.  An alternative is to start the assignment
-with a @samp{0}:
-
-@Example
-.nr a 7
-.nr b -3
-.nr a \nb
-\na
-    @result{} 4
-.nr a 0\nb
-\na
-    @result{} -3
-@endExample
-@endDefreq
-
-@Defreq {rr, ident}
-@cindex removing number register (@code{rr})
-@cindex number register, removing (@code{rr})
-@cindex register, removing (@code{rr})
-Remove number register @var{ident}.  If @var{ident} doesn't exist, the
-request is ignored.
-@endDefreq
-
-@Defreq {rnn, ident1 ident2}
-@cindex renaming number register (@code{rnn})
-@cindex number register, renaming (@code{rnn})
-@cindex register, renaming (@code{rnn})
-Rename number register @var{ident1} to @var{ident2}.  If either
-@var{ident1} or @var{ident2} doesn't exist, the request is ignored.
-@endDefreq
-
-@Defreq {aln, ident1 ident2}
-@cindex alias, number register, creating (@code{aln})
-@cindex creating alias, for number register (@code{aln})
-@cindex number register, creating alias (@code{aln})
-@cindex register, creating alias (@code{aln})
-Create an alias @var{ident1} for a number register @var{ident2}.  The
-new name and the old name are exactly equivalent.  If @var{ident1} is
-undefined, a warning of type @samp{reg} is generated, and the request is
-ignored.  @xref{Debugging}, for information about warnings.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Interpolating Registers, Auto-increment, Setting Registers, Registers
-@subsection Interpolating Registers
-@cindex interpolating registers (@code{\n})
-@cindex registers, interpolating (@code{\n})
-
-Numeric registers can be accessed via the @code{\n} escape.
-
-@DefescList {\\n, , i, }
-@DefescItem {\\n, @Lparen{}, id, }
-@DefescListEnd {\\n, @Lbrack{}, ident, @Rbrack{}}
-@cindex nested assignments
-@cindex assignments, nested
-@cindex indirect assignments
-@cindex assignments, indirect
-Interpolate number register with name @var{ident} (one-character
-name@tie{}@var{i}, two-character name @var{id}).  This means that the
-value of the register is expanded in-place while @code{gtroff} is
-parsing the input line.  Nested assignments (also called indirect
-assignments) are possible.
-
-@Example
-.nr a 5
-.nr as \na+\na
-\n(as
-    @result{} 10
-@endExample
-
-@Example
-.nr a1 5
-.nr ab 6
-.ds str b
-.ds num 1
-\n[a\n[num]]
-    @result{} 5
-\n[a\*[str]]
-    @result{} 6
-@endExample
-@endDefesc
-
-@c ---------------------------------------------------------------------
-
-@node Auto-increment, Assigning Formats, Interpolating Registers, Registers
-@subsection Auto-increment
-@cindex auto-increment
-@cindex increment, automatic
-
-Number registers can also be auto-incremented and auto-decremented.  The
-increment or decrement value can be specified with a third argument to
-the @code{nr} request or @code{\R} escape.
-
-@Defreq {nr, ident value incr}
-@cindex @code{\R}, difference to @code{nr}
-Set number register @var{ident} to @var{value}; the increment for
-auto-incrementing is set to @var{incr}.  Note that the @code{\R} escape
-doesn't support this notation.
-@endDefreq
-
-To activate auto-incrementing, the escape @code{\n} has a special syntax
-form.
-
-@DefescList {\\n, +, i, }
-@DefescItem {\\n, -, i, }
-@DefescItem {\\n, @Lparen{}+, id, }
-@DefescItem {\\n, @Lparen{}-, id, }
-@DefescItem {\\n, +@Lparen{}, id, }
-@DefescItem {\\n, -@Lparen{}, id, }
-@DefescItem {\\n, @Lbrack{}+, ident, @Rbrack{}}
-@DefescItem {\\n, @Lbrack{}-, ident, @Rbrack{}}
-@DefescItem {\\n, +@Lbrack{}, ident, @Rbrack{}}
-@DefescListEnd {\\n, -@Lbrack{}, ident, @Rbrack{}}
-Before interpolating, increment or decrement @var{ident} (one-character
-name@tie{}@var{i}, two-character name @var{id}) by the auto-increment
-value as specified with the @code{nr} request (or the @code{\R} escape).
-If no auto-increment value has been specified, these syntax forms are
-identical to @code{\n}.
-@endDefesc
-
-For example,
-
-@Example
-.nr a 0 1
-.nr xx 0 5
-.nr foo 0 -2
-\n+a, \n+a, \n+a, \n+a, \n+a
-.br
-\n-(xx, \n-(xx, \n-(xx, \n-(xx, \n-(xx
-.br
-\n+[foo], \n+[foo], \n+[foo], \n+[foo], \n+[foo]
-@endExample
-
-@noindent
-produces
-
-@Example
-1, 2, 3, 4, 5
--5, -10, -15, -20, -25
--2, -4, -6, -8, -10
-@endExample
-
-@cindex increment value without changing the register
-@cindex value, incrementing without changing the register
-To change the increment value without changing the value of a register
-(@var{a} in the example), the following can be used:
-
-@Example
-.nr a \na 10
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Assigning Formats, Built-in Registers, Auto-increment, Registers
-@subsection Assigning Formats
-@cindex assigning formats (@code{af})
-@cindex formats, assigning (@code{af})
-
-When a register is used, it is always textually replaced (or
-interpolated) with a representation of that number.  This output format
-can be changed to a variety of formats (numbers, Roman numerals, etc.).
-This is done using the @code{af} request.
-
-@Defreq {af, ident format}
-Change the output format of a number register.  The first argument
-@var{ident} is the name of the number register to be changed, and the
-second argument @var{format} is the output format.  The following output
-formats are available:
-
-@table @code
-@item 1
-Decimal arabic numbers.  This is the default format: 0, 1, 2,
-3,@tie{}@enddots{}
-
-@item 0@dots{}0
-Decimal numbers with as many digits as specified.  So, @samp{00} would
-result in printing numbers as 01, 02, 03,@tie{}@enddots{}
-
-In fact, any digit instead of zero does work; @code{gtroff} only counts
-how many digits are specified.  As a consequence, @code{af}'s default
-format @samp{1} could be specified as @samp{0} also (and exactly this is
-returned by the @code{\g} escape, see below).
-
-@item I
-@cindex Roman numerals
-@cindex numerals, Roman
-Upper-case Roman numerals: 0, I, II, III, IV,@tie{}@enddots{}
-
-@item i
-Lower-case Roman numerals: 0, i, ii, iii, iv,@tie{}@enddots{}
-
-@item A
-Upper-case letters: 0, A, B, C, @dots{},@tie{}Z, AA, AB,@tie{}@enddots{}
-
-@item a
-Lower-case letters: 0, a, b, c, @dots{},@tie{}z, aa, ab,@tie{}@enddots{}
-@end table
-
-Omitting the number register format causes a warning of type
-@samp{missing}.  @xref{Debugging}, for more details.  Specifying a
-nonexistent format causes an error.
-
-The following example produces @samp{10, X, j, 010}:
-
-@Example
-.nr a 10
-.af a 1           \" the default format
-\na,
-.af a I
-\na,
-.af a a
-\na,
-.af a 001
-\na
-@endExample
-
-@cindex Roman numerals, maximum and minimum
-@cindex maximum values of Roman numerals
-@cindex minimum values of Roman numerals
-The largest number representable for the @samp{i} and @samp{I} formats
-is 39999 (or @minus{}39999); @acronym{UNIX} @code{troff} uses @samp{z}
-and @samp{w} to represent 10000 and 5000 in Roman numerals, and so does
-@code{gtroff}.  Currently, the correct glyphs of Roman numeral five
-thousand and Roman numeral ten thousand (Unicode code points
-@code{U+2182} and @code{U+2181}, respectively) are not available.
-
-If @var{ident} doesn't exist, it is created.
-
-@cindex read-only register, changing format
-@cindex changing format, and read-only registers
-Changing the output format of a read-only register causes an error.  It
-is necessary to first copy the register's value to a writeable register,
-then apply the @code{af} request to this other register.
-@endDefreq
-
-@DefescList {\\g, , i, }
-@DefescItem {\\g, @Lparen{}, id, }
-@DefescListEnd {\\g, @Lbrack{}, ident, @Rbrack{}}
-@cindex format of register (@code{\g})
-@cindex register, format (@code{\g})
-Return the current format of the specified register @var{ident}
-(one-character name@tie{}@var{i}, two-character name @var{id}).  For
-example, @samp{\ga} after the previous example would produce the string
-@samp{000}.  If the register hasn't been defined yet, nothing is
-returned.
-@endDefesc
-
-@c ---------------------------------------------------------------------
-
-@node Built-in Registers,  , Assigning Formats, Registers
-@subsection Built-in Registers
-@cindex built-in registers
-@cindex registers, built-in
-
-The following lists some built-in registers that are not described
-elsewhere in this manual.  Any register that begins with a @samp{.} is
-read-only.  A complete listing of all built-in registers can be found in
-@ref{Register Index}.
-
-@table @code
-@item \n[.F]
-@cindex current input file name register (@code{.F})
-@cindex input file name, current, register (@code{.F})
-@vindex .F
-This string-valued register returns the current input file name.
-
-@item \n[.H]
-@cindex horizontal resolution register (@code{.H})
-@cindex resolution, horizontal, register (@code{.H})
-@vindex .H
-Horizontal resolution in basic units.
-
-@item \n[.R]
-@cindex number of registers register (@code{.R})
-@cindex registers, number of, register (@code{.R})
-@vindex .R
-The number of number registers available.  This is always 10000 in
-GNU@tie{}@code{troff}; it exists for backward compatibility.
-
-@item \n[.U]
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-@vindex .U
-If @code{gtroff} is called with the @option{-U} command line option to
-activate unsafe mode, the number register @code{.U} is set to@tie{}1,
-and to zero otherwise.  @xref{Groff Options}.
-
-@item \n[.V]
-@cindex vertical resolution register (@code{.V})
-@cindex resolution, vertical, register (@code{.V})
-@vindex .V
-Vertical resolution in basic units.
-
-@item \n[seconds]
-@cindex seconds, current time (@code{seconds})
-@cindex time, current, seconds (@code{seconds})
-@cindex current time, seconds (@code{seconds})
-@vindex seconds
-The number of seconds after the minute, normally in the range@tie{}0
-to@tie{}59, but can be up to@tie{}61 to allow for leap seconds.
-Initialized at start-up of @code{gtroff}.
-
-@item \n[minutes]
-@cindex minutes, current time (@code{minutes})
-@cindex time, current, minutes (@code{minutes})
-@cindex current time, minutes (@code{minutes})
-@vindex minutes
-The number of minutes after the hour, in the range@tie{}0 to@tie{}59.
-Initialized at start-up of @code{gtroff}.
-
-@item \n[hours]
-@cindex hours, current time (@code{hours})
-@cindex time, current, hours (@code{hours})
-@cindex current time, hours (@code{hours})
-@vindex hours
-The number of hours past midnight, in the range@tie{}0 to@tie{}23.
-Initialized at start-up of @code{gtroff}.
-
-@item \n[dw]
-@cindex day of the week register (@code{dw})
-@cindex date, day of the week register (@code{dw})
-@vindex dw
-Day of the week (1-7).
-
-@item \n[dy]
-@cindex day of the month register (@code{dy})
-@cindex date, day of the month register (@code{dy})
-@vindex dy
-Day of the month (1-31).
-
-@item \n[mo]
-@cindex month of the year register (@code{mo})
-@cindex date, month of the year register (@code{mo})
-@vindex mo
-Current month (1-12).
-
-@item \n[year]
-@cindex date, year register (@code{year}, @code{yr})
-@cindex year, current, register (@code{year}, @code{yr})
-@vindex year
-The current year.
-
-@item \n[yr]
-@vindex yr
-The current year minus@tie{}1900.  Unfortunately, the documentation of
-@acronym{UNIX} Version@tie{}7's @code{troff} had a year@tie{}2000 bug:
-It incorrectly claimed that @code{yr} contains the last two digits of
-the year.  That claim has never been true of either @acronym{AT&T}
-@code{troff} or GNU @code{troff}.  Old @code{troff} input that looks
-like this:
-
-@Example
-'\" The following line stopped working after 1999
-This document was formatted in 19\n(yr.
-@endExample
-
-@noindent
-can be corrected as follows:
-
-@Example
-This document was formatted in \n[year].
-@endExample
-
-@noindent
-or, to be portable to older @code{troff} versions, as follows:
-
-@Example
-.nr y4 1900+\n(yr
-This document was formatted in \n(y4.
-@endExample
-
-@item \n[.c]
-@vindex .c
-@itemx \n[c.]
-@vindex c.
-@cindex input line number register (@code{.c}, @code{c.})
-@cindex line number, input, register (@code{.c}, @code{c.})
-The current @emph{input} line number.  Register @samp{.c} is read-only,
-whereas @samp{c.} (a @code{gtroff} extension) is writable also,
-affecting both @samp{.c} and @samp{c.}.
-
-@item \n[ln]
-@vindex ln
-@cindex output line number register (@code{ln})
-@cindex line number, output, register (@code{ln})
-The current @emph{output} line number after a call to the @code{nm}
-request to activate line numbering.
-
-@xref{Miscellaneous}, for more information about line numbering.
-
-@item \n[.x]
-@vindex .x
-@cindex major version number register (@code{.x})
-@cindex version number, major, register (@code{.x})
-The major version number.  For example, if the version number is 1.03
-then @code{.x} contains@tie{}@samp{1}.
-
-@item \n[.y]
-@vindex .y
-@cindex minor version number register (@code{.y})
-@cindex version number, minor, register (@code{.y})
-The minor version number.  For example, if the version number is 1.03
-then @code{.y} contains@tie{}@samp{03}.
-
-@item \n[.Y]
-@vindex .Y
-@cindex revision number register (@code{.Y})
-The revision number of @code{groff}.
-
-@item \n[$$]
-@vindex $$
-@cindex process ID of @code{gtroff} register (@code{$$})
-@cindex @code{gtroff}, process ID register (@code{$$})
-The process ID of @code{gtroff}.
-
-@item \n[.g]
-@vindex .g
-@cindex @code{gtroff}, identification register (@code{.g})
-@cindex GNU-specific register (@code{.g})
-Always@tie{}1.  Macros should use this to determine whether they are
-running under GNU @code{troff}.
-
-@item \n[.A]
-@vindex .A
-@cindex @acronym{ASCII} approximation output register (@code{.A})
-If the command line option @option{-a} is used to produce an
-@acronym{ASCII} approximation of the output, this is set to@tie{}1, zero
-otherwise.  @xref{Groff Options}.
-
-@item \n[.O]
-@vindex .O
-This read-only register is set to the suppression nesting level (see
-escapes @code{\O}).  @xref{Suppressing output}.
-
-@item \n[.P]
-@vindex .P
-This register is set to@tie{}1 (and to@tie{}0 otherwise) if the current
-page is actually being printed, i.e., if the @option{-o} option is being
-used to only print selected pages.  @xref{Groff Options}, for more
-information.
-
-@item \n[.T]
-@vindex .T
-If @code{gtroff} is called with the @option{-T} command line option, the
-number register @code{.T} is set to@tie{}1, and zero otherwise.
-@xref{Groff Options}.
-
-@item \*[.T]
-@stindex .T
-@cindex output device name string register (@code{.T})
-A single read-write string register that contains the current output
-device (for example, @samp{latin1} or @samp{ps}).  This is the only
-string register defined by @code{gtroff}.
-@end table
-
-
-@c =====================================================================
-
-@node Manipulating Filling and Adjusting, Manipulating Hyphenation, Registers, gtroff Reference
-@section Manipulating Filling and Adjusting
-@cindex manipulating filling and adjusting
-@cindex filling and adjusting, manipulating
-@cindex adjusting and filling, manipulating
-@cindex justifying text
-@cindex text, justifying
-
-@cindex break
-@cindex line break
-@cindex @code{bp} request, causing implicit linebreak
-@cindex @code{ce} request, causing implicit linebreak
-@cindex @code{cf} request, causing implicit linebreak
-@cindex @code{fi} request, causing implicit linebreak
-@cindex @code{fl} request, causing implicit linebreak
-@cindex @code{in} request, causing implicit linebreak
-@cindex @code{nf} request, causing implicit linebreak
-@cindex @code{rj} request, causing implicit linebreak
-@cindex @code{sp} request, causing implicit linebreak
-@cindex @code{ti} request, causing implicit linebreak
-@cindex @code{trf} request, causing implicit linebreak
-Various ways of causing @dfn{breaks} were given in @ref{Implicit Line
-Breaks}.  The @code{br} request likewise causes a break.  Several other
-requests also cause breaks, but implicitly.  These are @code{bp},
-@code{ce}, @code{cf}, @code{fi}, @code{fl}, @code{in}, @code{nf},
-@code{rj}, @code{sp}, @code{ti}, and @code{trf}.
-
-@Defreq {br, }
-Break the current line, i.e., the input collected so far is emitted
-without adjustment.
-
-If the no-break control character is used, @code{gtroff} suppresses the
-break:
-
-@Example
-a
-'br
-b
-    @result{} a b
-@endExample
-@endDefreq
-
-Initially, @code{gtroff} fills and adjusts text to both margins.
-Filling can be disabled via the @code{nf} request and re-enabled with
-the @code{fi} request.
-
-@DefreqList {fi, }
-@DefregListEndx {.u}
-@cindex fill mode (@code{fi})
-@cindex mode, fill (@code{fi})
-Activate fill mode (which is the default).  This request implicitly
-enables adjusting; it also inserts a break in the text currently being
-filled.  The read-only number register @code{.u} is set to@tie{}1.
-
-The fill mode status is associated with the current environment
-(@pxref{Environments}).
-
-See @ref{Line Control}, for interaction with the @code{\c} escape.
-@endDefreq
-
-@Defreq {nf, }
-@cindex no-fill mode (@code{nf})
-@cindex mode, no-fill (@code{nf})
-Activate no-fill mode.  Input lines are output as-is, retaining line
-breaks and ignoring the current line length.  This command implicitly
-disables adjusting; it also causes a break.  The number register
-@code{.u} is set to@tie{}0.
-
-The fill mode status is associated with the current environment
-(@pxref{Environments}).
-
-See @ref{Line Control}, for interaction with the @code{\c} escape.
-@endDefreq
-
-@DefreqList {ad, [@Var{mode}]}
-@DefregListEndx {.j}
-Set adjusting mode.
-
-Activation and deactivation of adjusting is done implicitly with calls
-to the @code{fi} or @code{nf} requests.
-
-@var{mode} can have one of the following values:
-
-@table @code
-@item l
-@cindex ragged-right
-Adjust text to the left margin.  This produces what is traditionally
-called ragged-right text.
-
-@item r
-@cindex ragged-left
-Adjust text to the right margin, producing ragged-left text.
-
-@item c
-@cindex centered text
-@cindex @code{ce} request, difference to @samp{.ad@tie{}c}
-Center filled text.  This is different to the @code{ce} request, which
-only centers text without filling.
-
-@item b
-@itemx n
-Justify to both margins.  This is the default used by @code{gtroff}.
-@end table
-
-Finally, @var{mode} can be the numeric argument returned by the
-@code{.j} register.
-
-Using @code{ad} without argument is the same as saying
-@w{@code{.ad \[.j]}}.  In particular, @code{gtroff} adjusts lines
-in the same way it did before adjusting was deactivated (with a call
-to @code{na}, say).  For example, this input code
-
-@Example
-.de AD
-.  br
-.  ad \\$1
-..
-.
-.de NA
-.  br
-.  na
-..
-.
-textA
-.AD r
-.nr ad \n[.j]
-textB
-.AD c
-textC
-.NA
-textD
-.AD         \" back to centering
-textE
-.AD \n[ad]  \" back to right justifying
-textF
-@endExample
-
-@noindent
-produces the following output:
-
-@Example
-textA
-                                                    textB
-                          textC
-textD
-                          textE
-                                                    textF
-@endExample
-
-@cindex adjustment mode register (@code{.j})
-As just demonstrated, the current adjustment mode is available in the
-read-only number register @code{.j}; it can be stored and
-subsequently used to set adjustment.
-
-The adjustment mode status is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@Defreq {na, }
-Disable adjusting.  This request won't change the current adjustment
-mode: A subsequent call to @code{ad} uses the previous adjustment
-setting.
-
-The adjustment mode status is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {brp, }
-@DefescListEndx {\\p, , , }
-Adjust the current line and cause a break.
-
-In most cases this produces very ugly results since @code{gtroff}
-doesn't have a sophisticated paragraph building algorithm (as @TeX{}
-have, for example); instead, @code{gtroff} fills and adjusts a paragraph
-line by line:
-
-@Example
-This is an uninteresting sentence.
-This is an uninteresting sentence.\p
-This is an uninteresting sentence.
-@endExample
-
-@noindent
-is formatted as
-
-@Example
-This is  an uninteresting  sentence.   This  is an
-uninteresting                            sentence.
-This is an uninteresting sentence.
-@endExample
-@endDefreq
-
-@DefreqList {ss, word_space_size [@Var{sentence_space_size}]}
-@DefregItemx {.ss}
-@DefregListEndx {.sss}
-@cindex word space size register (@code{.ss})
-@cindex size of word space register (@code{.ss})
-@cindex space between words register (@code{.ss})
-@cindex sentence space size register (@code{.sss})
-@cindex size of sentence space register (@code{.sss})
-@cindex space between sentences register (@code{.sss})
-Change the size of a space between words.  It takes its units as one
-twelfth of the space width parameter for the current font.  Initially
-both the @var{word_space_size} and @var{sentence_space_size}
-are@tie{}12.  In fill mode, the values specify the minimum distance.
-
-@cindex fill mode
-@cindex mode, fill
-If two arguments are given to the @code{ss} request, the second argument
-sets the sentence space size.  If the second argument is not given,
-sentence space size is set to @var{word_space_size}.  The sentence space
-size is used in two circumstances: If the end of a sentence occurs at
-the end of a line in fill mode, then both an inter-word space and a
-sentence space are added; if two spaces follow the end of a sentence in
-the middle of a line, then the second space is a sentence space.  If a
-second argument is never given to the @code{ss} request, the behaviour
-of @acronym{UNIX} @code{troff} is the same as that exhibited by GNU
-@code{troff}.  In GNU @code{troff}, as in @acronym{UNIX} @code{troff}, a
-sentence should always be followed by either a newline or two spaces.
-
-The read-only number registers @code{.ss} and @code{.sss} hold the
-values of the parameters set by the first and second arguments of the
-@code{ss} request.
-
-The word space and sentence space values are associated with the current
-environment (@pxref{Environments}).
-
-Contrary to @acronym{AT&T} @code{troff}, this request is @emph{not}
-ignored if a TTY output device is used; the given values are then
-rounded down to a multiple of@tie{}12 (@pxref{Implementation
-Differences}).
-
-The request is ignored if there is no parameter.
-
-@cindex discardable horizontal space
-@cindex space, discardable, horizontal
-@cindex horizontal discardable space
-Another useful application of the @code{ss} request is to insert
-discardable horizontal space, i.e., space that is discarded at a line
-break.  For example, paragraph-style footnotes could be separated this
-way:
-
-@Example
-.ll 4.5i
-1.\ This is the first footnote.\c
-.ss 48
-.nop
-.ss 12
-2.\ This is the second footnote.
-@endExample
-
-@noindent
-The result:
-
-@Example
-1. This is the first footnote.        2. This
-is the second footnote.
-@endExample
-
-@noindent
-Note that the @code{\h} escape produces unbreakable space.
-@endDefreq
-
-@DefreqList {ce, [@Var{nnn}]}
-@DefregListEndx {.ce}
-@cindex centering lines (@code{ce})
-@cindex lines, centering (@code{ce})
-Center text.  While the @w{@samp{.ad c}} request also centers text, it
-fills the text as well.  @code{ce} does not fill the text it affects.
-This request causes a break.  The number of lines still to be centered
-is associated with the current environment (@pxref{Environments}).
-
-The following example demonstrates the differences.  Here the input:
-
-@Example
-.ll 4i
-.ce 1000
-This is a small text fragment that shows the differences
-between the `.ce' and the `.ad c' request.
-.ce 0
-
-.ad c
-This is a small text fragment that shows the differences
-between the `.ce' and the `.ad c' request.
-@endExample
-
-@noindent
-And here the result:
-
-@Example
-  This is a small text fragment that
-         shows the differences
-between the `.ce' and the `.ad c' request.
-
-  This is a small text fragment that
-shows the differences between the `.ce'
-        and the `.ad c' request.
-@endExample
-
-With no arguments, @code{ce} centers the next line of text.  @var{nnn}
-specifies the number of lines to be centered.  If the argument is zero
-or negative, centering is disabled.
-
-The basic length for centering text is the line length (as set with the
-@code{ll} request) minus the indentation (as set with the @code{in}
-request).  Temporary indentation is ignored.
-
-As can be seen in the previous example, it is a common idiom to turn on
-centering for a large number of lines, and to turn off centering after
-text to be centered.  This is useful for any request that takes a
-number of lines as an argument.
-
-The @code{.ce} read-only number register contains the number of lines
-remaining to be centered, as set by the @code{ce} request.
-@endDefreq
-
-@DefreqList {rj, [@Var{nnn}]}
-@DefregListEndx {.rj}
-@cindex justifying text (@code{rj})
-@cindex text, justifying (@code{rj})
-@cindex right-justifying (@code{rj})
-Justify unfilled text to the right margin.  Arguments are identical to
-the @code{ce} request.  The @code{.rj} read-only number register is the
-number of lines to be right-justified as set by the @code{rj} request.
-This request causes a break.  The number of lines still to be
-right-justified is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-
-@c =====================================================================
-
-@node Manipulating Hyphenation, Manipulating Spacing, Manipulating Filling and Adjusting, gtroff Reference
-@section Manipulating Hyphenation
-@cindex manipulating hyphenation
-@cindex hyphenation, manipulating
-
-Here a description of requests that influence hyphenation.
-
-@DefreqList {hy, [@Var{mode}]}
-@DefregListEndx {.hy}
-Enable hyphenation.  The request has an optional numeric argument,
-@var{mode}, to restrict hyphenation if necessary:
-
-@table @code
-@item 1
-The default argument if @var{mode} is omitted.  Hyphenate without
-restrictions.  This is also the start-up value of @code{gtroff}.
-
-@item 2
-Do not hyphenate the last word on a page or column.
-
-@item 4
-Do not hyphenate the last two characters of a word.
-
-@item 8
-Do not hyphenate the first two characters of a word.
-@end table
-
-Values in the previous table are additive.  For example, the
-value@tie{}12 causes @code{gtroff} to neither hyphenate the last two nor
-the first two characters of a word.
-
-@cindex hyphenation restrictions register (@code{.hy})
-The current hyphenation restrictions can be found in the read-only
-number register @samp{.hy}.
-
-The hyphenation mode is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@Defreq {nh, }
-Disable hyphenation (i.e., set the hyphenation mode to zero).  Note that
-the hyphenation mode of the last call to @code{hy} is not remembered.
-
-The hyphenation mode is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {hlm, [@Var{nnn}]}
-@DefregItemx {.hlm}
-@DefregListEndx {.hlc}
-@cindex explicit hyphen (@code{\%})
-@cindex hyphen, explicit (@code{\%})
-@cindex consecutive hyphenated lines (@code{hlm})
-@cindex lines, consecutive hyphenated (@code{hlm})
-@cindex hyphenated lines, consecutive (@code{hlm})
-Set the maximum number of consecutive hyphenated lines to @var{nnn}.  If
-this number is negative, there is no maximum.  The default value
-is@tie{}@minus{}1 if @var{nnn} is omitted.  This value is associated
-with the current environment (@pxref{Environments}).  Only lines output
-from a given environment count towards the maximum associated with that
-environment.  Hyphens resulting from @code{\%} are counted; explicit
-hyphens are not.
-
-The current setting of @code{hlm} is available in the @code{.hlm}
-read-only number register.  Also the number of immediately preceding
-consecutive hyphenated lines are available in the read-only number
-register @samp{.hlc}.
-@endDefreq
-
-@Defreq {hw, word1 word2 @dots{}}
-Define how @var{word1}, @var{word2}, etc.@: are to be hyphenated.  The
-words must be given with hyphens at the hyphenation points.  For
-example:
-
-@Example
-.hw in-sa-lub-rious
-@endExample
-
-@noindent
-Besides the space character, any character whose hyphenation code value
-is zero can be used to separate the arguments of @code{hw} (see the
-documentation for the @code{hcode} request below for more information).
-In addition, this request can be used more than once.
-
-Hyphenation exceptions specified with the @code{hw} request are
-associated with the current hyphenation language; it causes an error if
-there is no current hyphenation language.
-
-This request is ignored if there is no parameter.
-
-In old versions of @code{troff} there was a limited amount of space to
-store such information; fortunately, with @code{gtroff}, this is no
-longer a restriction.
-@endDefreq
-
-@DefescList {\\%, , , }
-@deffnx Escape @t{\:}
-@ifnotinfo
-@esindex \:
-@end ifnotinfo
-@ifinfo
-@esindex \@r{<colon>}
-@end ifinfo
-@cindex hyphenation character (@code{\%})
-@cindex character, hyphenation (@code{\%})
-@cindex disabling hyphenation (@code{\%})
-@cindex hyphenation, disabling (@code{\%})
-To tell @code{gtroff} how to hyphenate words on the fly, use the
-@code{\%} escape, also known as the @dfn{hyphenation character}.
-Preceding a word with this character prevents it from being
-hyphenated; putting it inside a word indicates to @code{gtroff} that
-the word may be hyphenated at that point.  Note that this mechanism
-only affects that one occurrence of the word; to change the
-hyphenation of a word for the entire document, use the @code{hw}
-request.
-
-The @code{\:} escape inserts a zero-width break point (that is, the word
-breaks but without adding a hyphen).
-
-@Example
-... check the /var/log/\:httpd/\:access_log file ...
-@endExample
-
-@cindex @code{\X}, followed by @code{\%}
-@cindex @code{\Y}, followed by @code{\%}
-@cindex @code{\%}, following @code{\X} or @code{\Y}
-Note that @code{\X} and @code{\Y} start a word, that is, the @code{\%}
-escape in (say) @w{@samp{\X'...'\%foobar}} and
-@w{@samp{\Y'...'\%foobar}} no longer prevents hyphenation but inserts a
-hyphenation point at the beginning of @samp{foobar}; most likely this
-isn't what you want to do.
-@endDefesc
-
-@Defreq {hc, [@Var{char}]}
-Change the hyphenation character to @var{char}.  This character then
-works the same as the @code{\%} escape, and thus, no longer appears in
-the output.  Without an argument, @code{hc} resets the hyphenation
-character to be @code{\%} (the default) only.
-
-The hyphenation character is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {hpf, pattern_file}
-@DefreqItemx {hpfa, pattern_file}
-@DefreqListEndx {hpfcode, a b [c d @dots{}]}
-@cindex hyphenation patterns (@code{hpf})
-@cindex patterns for hyphenation (@code{hpf})
-Read in a file of hyphenation patterns.  This file is searched for in
-the same way as @file{@var{name}.tmac} (or @file{tmac.@var{name}}) is
-searched for if the @option{-m@var{name}} option is specified.
-
-It should have the same format as (simple) @TeX{} patterns files.  More
-specifically, the following scanning rules are implemented.
-
-@itemize @bullet
-@item
-A percent sign starts a comment (up to the end of the line) even if
-preceded by a backslash.
-
-@item
-No support for `digraphs' like @code{\$}.
-
-@item
-@code{^^@var{xx}} (@var{x} is 0-9 or a-f) and @code{^^@var{x}}
-(character code of @var{x} in the range 0-127) are recognized; other use
-of @code{^} causes an error.
-
-@item
-No macro expansion.
-
-@item
-@code{hpf} checks for the expression @code{\patterns@{@dots{}@}}
-(possibly with whitespace before and after the braces).  Everything
-between the braces is taken as hyphenation patterns.  Consequently,
-@code{@{} and @code{@}} are not allowed in patterns.
-
-@item
-Similarly, @code{\hyphenation@{@dots{}@}} gives a list of hyphenation
-exceptions.
-
-@item
-@code{\endinput} is recognized also.
-
-@item
-For backwards compatibility, if @code{\patterns} is missing, the whole
-file is treated as a list of hyphenation patterns (only recognizing the
-@code{%} character as the start of a comment).
-@end itemize
-
-If no @code{hpf} request is specified (either in the document or in a
-macro package), @code{gtroff} won't hyphenate at all.
-
-The @code{hpfa} request appends a file of patterns to the current list.
-
-The @code{hpfcode} request defines mapping values for character codes in
-hyphenation patterns.  @code{hpf} or @code{hpfa} then apply the mapping
-(after reading the patterns) before replacing or appending them to the
-current list of patterns.  Its arguments are pairs of character codes --
-integers from 0 to@tie{}255.  The request maps character
-code@tie{}@var{a} to code@tie{}@var{b}, code@tie{}@var{c} to
-code@tie{}@var{d}, and so on.  You can use character codes that would
-be invalid otherwise.  By default, everything maps to itself except
-letters `A' to `Z', which map to `a' to `z'.
-
-
-@pindex troffrc
-@pindex troffrc-end
-@pindex hyphen.us
-@pindex hyphenex.us
-The set of hyphenation patterns is associated with the current language
-set by the @code{hla} request.  The @code{hpf} request is usually
-invoked by the @file{troffrc} or @file{troffrc-end} file; by default,
-@file{troffrc} loads hyphenation patterns and exceptions for American
-English (in files @file{hyphen.us} and @file{hyphenex.us}).
-
-A second call to @code{hpf} (for the same language) replaces the
-hyphenation patterns with the new ones.
-
-Invoking @code{hpf} causes an error if there is no current hyphenation
-language.
-@endDefreq
-
-@Defreq {hcode, c1 code1 [c2 code2 @dots{}]}
-@cindex hyphenation code (@code{hcode})
-@cindex code, hyphenation (@code{hcode})
-Set the hyphenation code of character @var{c1} to @var{code1}, that of
-@var{c2} to @var{code2}, etc.  A hyphenation code must be a single input
-character (not a special character) other than a digit or a space.
-
-To make hyphenation work, hyphenation codes must be set up.  At
-start-up, groff only assigns hyphenation codes to the letters
-@samp{a}-@samp{z} (mapped to themselves) and to the letters
-@samp{A}-@samp{Z} (mapped to @samp{a}-@samp{z}); all other hyphenation
-codes are set to zero.  Normally, hyphenation patterns contain only
-lowercase letters, which should be applied regardless of case.  In
-other words, the words `FOO' and `Foo' should be hyphenated exactly the
-same way as the word `foo' is hyphenated, and this is what @code{hcode}
-is good for.  Words that contain other letters won't be hyphenated
-properly if the corresponding hyphenation patterns actually do contain
-them.  For example, the following @code{hcode} requests are necessary to
-assign hyphenation codes to the letters @samp{ÄäÖöÜüß} (this is needed
-for German):
-
-@Example
-.hcode ä ä  Ä ä
-.hcode ö ö  Ö ö
-.hcode ü ü  Ü ü
-.hcode ß ß
-@endExample
-
-Without those assignments, groff treats German words like
-@w{`Kindergärten'} (the plural form of `kindergarten') as two substrings
-@w{`kinderg'} and @w{`rten'} because the hyphenation code of the
-umlaut@tie{}a is zero by default.  There is a German hyphenation pattern
-that covers @w{`kinder'}, so groff finds the hyphenation `kin-der'.
-The other two hyphenation points (`kin-der-gär-ten') are missed.
-
-This request is ignored if it has no parameter.
-@endDefreq
-
-@DefreqList {hym, [@Var{length}]}
-@DefregListEndx {.hym}
-@cindex hyphenation margin (@code{hym})
-@cindex margin for hyphenation (@code{hym})
-@cindex @code{ad} request, and hyphenation margin
-Set the (right) hyphenation margin to @var{length}.  If the current
-adjustment mode is not @samp{b} or @samp{n}, the line is not hyphenated
-if it is shorter than @var{length}.  Without an argument, the
-hyphenation margin is reset to its default value, which is@tie{}0.  The
-default scaling indicator for this request is @samp{m}.  The hyphenation
-margin is associated with the current environment
-(@pxref{Environments}).
-
-A negative argument resets the hyphenation margin to zero, emitting a
-warning of type @samp{range}.
-
-@cindex hyphenation margin register (@code{.hym})
-The current hyphenation margin is available in the @code{.hym} read-only
-number register.
-@endDefreq
-
-@DefreqList {hys, [@Var{hyphenation_space}]}
-@DefregListEndx {.hys}
-@cindex hyphenation space (@code{hys})
-@cindex @code{ad} request, and hyphenation space
-Set the hyphenation space to @var{hyphenation_space}.  If the current
-adjustment mode is @samp{b} or @samp{n}, don't hyphenate the line if it
-can be justified by adding no more than @var{hyphenation_space} extra
-space to each word space.  Without argument, the hyphenation space is
-set to its default value, which is@tie{}0.  The default scaling
-indicator for this request is @samp{m}.  The hyphenation space is
-associated with the current environment (@pxref{Environments}).
-
-A negative argument resets the hyphenation space to zero, emitting a
-warning of type @samp{range}.
-
-@cindex hyphenation space register (@code{.hys})
-The current hyphenation space is available in the @code{.hys} read-only
-number register.
-@endDefreq
-
-@Defreq {shc, [@Var{glyph}]}
-@cindex soft hyphen character, setting (@code{shc})
-@cindex character, soft hyphen, setting (@code{shc})
-@cindex glyph, soft hyphen (@code{hy})
-@cindex soft hyphen glyph (@code{hy})
-@cindex @code{char} request, and soft hyphen character
-@cindex @code{tr} request, and soft hyphen character
-Set the @dfn{soft hyphen character} to @var{glyph}.@footnote{@dfn{Soft
-hyphen character} is a misnomer since it is an output glyph.}  If the
-argument is omitted, the soft hyphen character is set to the default
-glyph @code{\(hy} (this is the start-up value of @code{gtroff} also).
-The soft hyphen character is the glyph that is inserted when a word is
-hyphenated at a line break.  If the soft hyphen character does not exist
-in the font of the character immediately preceding a potential break
-point, then the line is not broken at that point.  Neither definitions
-(specified with the @code{char} request) nor translations (specified
-with the @code{tr} request) are considered when finding the soft hyphen
-character.
-@endDefreq
-
-@DefreqList {hla, language}
-@DefregListEndx {.hla}
-@cindex @code{hpf} request, and hyphenation language
-@cindex @code{hw} request, and hyphenation language
-@pindex troffrc
-@pindex troffrc-end
-Set the current hyphenation language to the string @var{language}.
-Hyphenation exceptions specified with the @code{hw} request and
-hyphenation patterns specified with the @code{hpf} and @code{hpfa}
-requests are both associated with the current hyphenation language.  The
-@code{hla} request is usually invoked by the @file{troffrc} or the
-@file{troffrc-end} files; @file{troffrc} sets the default language to
-@samp{us}.
-
-@cindex hyphenation language register (@code{.hla})
-The current hyphenation language is available as a string in the
-read-only number register @samp{.hla}.
-
-@Example
-.ds curr_language \n[.hla]
-\*[curr_language]
-    @result{} us
-@endExample
-@endDefreq
-
-
-@c =====================================================================
-
-@node Manipulating Spacing, Tabs and Fields, Manipulating Hyphenation, gtroff Reference
-@section Manipulating Spacing
-@cindex manipulating spacing
-@cindex spacing, manipulating
-
-@Defreq {sp, [@Var{distance}]}
-Space downwards @var{distance}.  With no argument it advances
-1@tie{}line.  A negative argument causes @code{gtroff} to move up the
-page the specified distance.  If the argument is preceded by a @samp{|}
-then @code{gtroff} moves that distance from the top of the page.  This
-request causes a line break, and that adds the current line spacing to
-the space you have just specified.  The default scaling indicator is
-@samp{v}.
-
-For convenience you may wish to use the following macros to set the
-height of the next line at a given distance from the top or the bottom
-of the page:
-
-@Example
-.de y-from-top-down
-.  sp |\\$1-\\n[.v]u
-..
-.
-.de y-from-bot-up
-.  sp |\\n[.p]u-\\$1-\\n[.v]u
-..
-@endExample
-
-@noindent
-A call to @samp{.y-from-bot-up 10c} means that the bottom of the next
-line will be at 10@dmn{cm} from the paper edge at the bottom.
-
-If a vertical trap is sprung during execution of @code{sp}, the amount
-of vertical space after the trap is discarded.  For example, this
-
-@Example
-.de xxx
-..
-.
-.wh 0 xxx
-.
-.pl 5v
-foo
-.sp 2
-bar
-.sp 50
-baz
-@endExample
-
-@noindent
-results in
-
-@Example
-foo
-
-
-bar
-
-baz
-@endExample
-
-@cindex @code{sp} request, and traps
-@cindex discarded space in traps
-@cindex space, discarded, in traps
-@cindex traps, and discarded space
-The amount of discarded space is available in the number register
-@code{.trunc}.
-
-To protect @code{sp} against vertical traps, use the @code{vpt} request:
-
-@Example
-.vpt 0
-.sp -3
-.vpt 1
-@endExample
-@endDefreq
-
-@DefreqList {ls, [@Var{nnn}]}
-@DefregListEndx {.L}
-@cindex double-spacing (@code{ls})
-Output @w{@var{nnn}@minus{}1} blank lines after each line of text.  With
-no argument, @code{gtroff} uses the previous value before the last
-@code{ls} call.
-
-@Example
-.ls 2    \" This causes double-spaced output
-.ls 3    \" This causes triple-spaced output
-.ls      \" Again double-spaced
-@endExample
-
-The line spacing is associated with the current environment
-(@pxref{Environments}).
-
-@cindex line spacing register (@code{.L})
-The read-only number register @code{.L} contains the current line
-spacing setting.
-@endDefreq
-
-@xref{Changing Type Sizes}, for the requests @code{vs} and @code{pvs} as
-alternatives to @code{ls}.
-
-@DefescList {\\x, ', spacing, '}
-@DefregListEndx {.a}
-Sometimes, extra vertical spacing is only needed occasionally, e.g.@: to
-allow space for a tall construct (like an equation).  The @code{\x}
-escape does this.  The escape is given a numerical argument, usually
-enclosed in quotes (like @samp{\x'3p'}); the default scaling indicator
-is @samp{v}.  If this number is positive extra vertical space is
-inserted below the current line.  A negative number adds space above.
-If this escape is used multiple times on the same line, the maximum of
-the values is used.
-
-@xref{Escapes}, for details on parameter delimiting characters.
-
-@cindex extra post-vertical line space register (@code{.a})
-The @code{.a} read-only number register contains the most recent
-(nonnegative) extra vertical line space.
-
-Using @code{\x} can be necessary in combination with the @code{\b}
-escape, as the following example shows.
-
-@Example
-This is a test with the \[rs]b escape.
-.br
-This is a test with the \[rs]b escape.
-.br
-This is a test with \b'xyz'\x'-1m'\x'1m'.
-.br
-This is a test with the \[rs]b escape.
-.br
-This is a test with the \[rs]b escape.
-@endExample
-
-@noindent
-produces
-
-@Example
-This is a test with the \b escape.
-This is a test with the \b escape.
-                    x
-This is a test with y.
-                    z
-This is a test with the \b escape.
-This is a test with the \b escape.
-@endExample
-@endDefesc
-
-@DefreqList {ns, }
-@DefreqItemx {rs, }
-@DefregListEndx {.ns}
-@cindex @code{sp} request, and no-space mode
-@cindex no-space mode (@code{ns})
-@cindex mode, no-space (@code{ns})
-@cindex blank lines, disabling
-@cindex lines, blank, disabling
-Enable @dfn{no-space mode}.  In this mode, spacing (either via @code{sp}
-or via blank lines) is disabled.  The @code{bp} request to advance to
-the next page is also disabled, except if it is accompanied by a page
-number (see @ref{Page Control}, for more information).  This mode ends
-when actual text is output or the @code{rs} request is encountered, which
-ends no-space mode.  The read-only number register @code{.ns} is set
-to@tie{}1 as long as no-space mode is active.
-
-This request is useful for macros that conditionally insert vertical
-space before the text starts (for example, a paragraph macro could
-insert some space except when it is the first paragraph after a section
-header).
-@endDefreq
-
-
-@c =====================================================================
-
-@node Tabs and Fields, Character Translations, Manipulating Spacing, gtroff Reference
-@section Tabs and Fields
-@cindex tabs, and fields
-@cindex fields, and tabs
-
-@cindex @acronym{EBCDIC} encoding of a tab
-A tab character (@acronym{ASCII} char@tie{}9, @acronym{EBCDIC}
-char@tie{}5) causes a horizontal movement to the next tab stop (much
-like it did on a typewriter).
-
-@Defesc {\\t, , , }
-@cindex tab character, non-interpreted (@code{\t})
-@cindex character, tab, non-interpreted (@code{\t})
-@cindex @code{\t}, and copy-in mode
-@cindex copy-in mode, and @code{\t}
-@cindex mode, copy-in, and @code{\t}
-This escape is a non-interpreted tab character.  In copy mode
-(@pxref{Copy-in Mode}), @code{\t} is the same as a real tab character.
-@endDefesc
-
-@DefreqList {ta, [@Var{n1} @Var{n2} @dots{} @Var{nn} @t{T} @Var{r1} @Var{r2} @dots{} @Var{rn}]}
-@DefregListEndx {.tabs}
-Change tab stop positions.  This request takes a series of tab
-specifiers as arguments (optionally divided into two groups with the
-letter @samp{T}) that indicate where each tab stop is to be (overriding
-any previous settings).
-
-Tab stops can be specified absolutely, i.e., as the distance from the
-left margin.  For example, the following sets 6@tie{}tab stops every one
-inch.
-
-@Example
-.ta 1i 2i 3i 4i 5i 6i
-@endExample
-
-Tab stops can also be specified using a leading @samp{+}, which means
-that the specified tab stop is set relative to the previous tab stop.
-For example, the following is equivalent to the previous example.
-
-@Example
-.ta 1i +1i +1i +1i +1i +1i
-@endExample
-
-@code{gtroff} supports an extended syntax to specify repeat values after
-the @samp{T} mark (these values are always taken as relative) -- this is
-the usual way to specify tabs set at equal intervals.  The following is,
-yet again, the same as the previous examples.  It does even more since
-it defines an infinite number of tab stops separated by one inch.
-
-@Example
-.ta T 1i
-@endExample
-
-Now we are ready to interpret the full syntax given at the beginning:
-Set tabs at positions @var{n1}, @var{n2}, @dots{}, @var{nn} and then set
-tabs at @var{nn}+@var{r1}, @var{nn}+@var{r2}, @dots{}, @var{nn}+@var{rn}
-and then at @var{nn}+@var{rn}+@var{r1}, @var{nn}+@var{rn}+@var{r2},
-@dots{}, @var{nn}+@var{rn}+@var{rn}, and so on.
-
-Example: @samp{4c +6c T 3c 5c 2c} is equivalent to @samp{4c 10c 13c 18c
-20c 23c 28c 30c @dots{}}.
-
-The material in each tab column (i.e., the column between two tab stops)
-may be justified to the right or left or centered in the column.  This
-is specified by appending @samp{R}, @samp{L}, or @samp{C} to the tab
-specifier.  The default justification is @samp{L}.  Example:
-
-@Example
-.ta 1i 2iC 3iR
-@endExample
-
-Some notes:
-
-@itemize @bullet
-@item
-The default unit of the @code{ta} request is @samp{m}.
-
-@item
-A tab stop is converted into a non-breakable horizontal movement that
-can be neither stretched nor squeezed.  For example,
-
-@Example
-.ds foo a\tb\tc
-.ta T 5i
-\*[foo]
-@endExample
-
-@noindent
-creates a single line, which is a bit longer than 10@tie{}inches (a
-string is used to show exactly where the tab characters are).  Now
-consider the following:
-
-@Example
-.ds bar a\tb b\tc
-.ta T 5i
-\*[bar]
-@endExample
-
-@noindent
-@code{gtroff} first converts the tab stops of the line into unbreakable
-horizontal movements, then splits the line after the second @samp{b}
-(assuming a sufficiently short line length).  Usually, this isn't what
-the user wants.
-
-@item
-Superfluous tabs (i.e., tab characters that do not correspond to a tab
-stop) are ignored except the first one, which delimits the characters
-belonging to the last tab stop for right-justifying or centering.
-Consider the following example
-
-@Example
-.ds Z   foo\tbar\tfoo
-.ds ZZ  foo\tbar\tfoobar
-.ds ZZZ foo\tbar\tfoo\tbar
-.ta 2i 4iR
-\*[Z]
-.br
-\*[ZZ]
-.br
-\*[ZZZ]
-.br
-@endExample
-
-@noindent
-which produces the following output:
-
-@Example
-foo                 bar              foo
-foo                 bar           foobar
-foo                 bar              foobar
-@endExample
-
-@noindent
-The first line right-justifies the second `foo' relative to the tab
-stop.  The second line right-justifies `foobar'.  The third line finally
-right-justifies only `foo' because of the additional tab character, which
-marks the end of the string belonging to the last defined tab stop.
-
-@item
-Tab stops are associated with the current environment
-(@pxref{Environments}).
-
-@item
-Calling @code{ta} without an argument removes all tab stops.
-
-@item
-@cindex tab stops, for TTY output devices
-The start-up value of @code{gtroff} is @w{@samp{T 0.8i}}.
-@end itemize
-
-@cindex tab settings register (@code{.tabs})
-The read-only number register @code{.tabs} contains a string
-representation of the current tab settings suitable for use as an
-argument to the @code{ta} request.
-
-@Example
-.ds tab-string \n[.tabs]
-\*[tab-string]
-    @result{} T120u
-@endExample
-
-@cindex @code{.S} register, Plan@tie{}9 alias for @code{.tabs}
-@cindex @code{.tabs} register, Plan@tie{}9 alias (@code{.S})
-The @code{troff} version of the Plan@tie{}9 operating system uses
-register @code{.S} for the same purpose.
-@endDefreq
-
-@Defreq {tc, [@Var{fill-glyph}]}
-@cindex tab repetition character (@code{tc})
-@cindex character, tab repetition (@code{tc})
-@cindex glyph, tab repetition (@code{tc})
-Normally @code{gtroff} fills the space to the next tab stop with
-whitespace.  This can be changed with the @code{tc} request.  With no
-argument @code{gtroff} reverts to using whitespace, which is the
-default.  The value of this @dfn{tab repetition character} is associated
-with the current environment (@pxref{Environments}).@footnote{@dfn{Tab
-repetition character} is a misnomer since it is an output glyph.}
-@endDefreq
-
-@DefreqList {linetabs, n}
-@DefregListEndx {.linetabs}
-@cindex tab, line-tabs mode
-@cindex line-tabs mode
-@cindex mode, line-tabs
-If @var{n} is missing or not zero, enable @dfn{line-tabs} mode, or
-disable it otherwise (the default).  In line-tabs mode, @code{gtroff}
-computes tab distances relative to the (current) output line instead of
-the input line.
-
-For example, the following code:
-
-@Example
-.ds x a\t\c
-.ds y b\t\c
-.ds z c
-.ta 1i 3i
-\*x
-\*y
-\*z
-@endExample
-
-@noindent
-in normal mode, results in the output
-
-@Example
-a         b         c
-@endExample
-
-@noindent
-in line-tabs mode, the same code outputs
-
-@Example
-a         b                   c
-@endExample
-
-Line-tabs mode is associated with the current environment.  The
-read-only register @code{.linetabs} is set to@tie{}1 if in line-tabs
-mode, and 0 in normal mode.
-@endDefreq
-
-@menu
-* Leaders::
-* Fields::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Leaders, Fields, Tabs and Fields, Tabs and Fields
-@subsection Leaders
-@cindex leaders
-
-Sometimes it may may be desirable to use the @code{tc} request to fill a
-particular tab stop with a given glyph (for example dots in a table of
-contents), but also normal tab stops on the rest of the line.  For this
-@code{gtroff} provides an alternate tab mechanism, called @dfn{leaders},
-which does just that.
-
-@cindex leader character
-A leader character (character code@tie{}1) behaves similarly to a tab
-character: It moves to the next tab stop.  The only difference is that
-for this movement, the fill glyph defaults to a period character and not
-to space.
-
-@Defesc {\\a, , , }
-@cindex leader character, non-interpreted (@code{\a})
-@cindex character, leader, non-interpreted (@code{\a})
-@cindex @code{\a}, and copy-in mode
-@cindex copy-in mode, and @code{\a}
-@cindex mode, copy-in, and @code{\a}
-This escape is a non-interpreted leader character.  In copy mode
-(@pxref{Copy-in Mode}), @code{\a} is the same as a real leader
-character.
-@endDefesc
-
-@Defreq {lc, [@Var{fill-glyph}]}
-@cindex leader repetition character (@code{lc})
-@cindex character, leader repetition (@code{lc})
-@cindex glyph, leader repetition (@code{lc})
-Declare the @dfn{leader repetition character}.@footnote{@dfn{Leader
-repetition character} is a misnomer since it is an output glyph.}
-Without an argument, leaders act the same as tabs (i.e., using
-whitespace for filling).  @code{gtroff}'s start-up value is a dot
-(@samp{.}).  The value of the leader repetition character is associated
-with the current environment (@pxref{Environments}).
-@endDefreq
-
-@cindex table of contents
-@cindex contents, table of
-For a table of contents, to name an example, tab stops may be defined so
-that the section number is one tab stop, the title is the second with
-the remaining space being filled with a line of dots, and then the page
-number slightly separated from the dots.
-
-@Example
-.ds entry 1.1\tFoo\a\t12
-.lc .
-.ta 1i 5i +.25i
-\*[entry]
-@endExample
-
-@noindent
-This produces
-
-@Example
-1.1  Foo..........................................  12
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Fields,  , Leaders, Tabs and Fields
-@subsection Fields
-@cindex fields
-
-@cindex field delimiting character (@code{fc})
-@cindex delimiting character, for fields (@code{fc})
-@cindex character, field delimiting (@code{fc})
-@cindex field padding character (@code{fc})
-@cindex padding character, for fields (@code{fc})
-@cindex character, field padding (@code{fc})
-@dfn{Fields} are a more general way of laying out tabular data.  A field
-is defined as the data between a pair of @dfn{delimiting characters}.
-It contains substrings that are separated by @dfn{padding characters}.
-The width of a field is the distance on the @emph{input} line from the
-position where the field starts to the next tab stop.  A padding
-character inserts stretchable space similar to @TeX{}'s @code{\hss}
-command (thus it can even be negative) to make the sum of all substring
-lengths plus the stretchable space equal to the field width.  If more
-than one padding character is inserted, the available space is evenly
-distributed among them.
-
-@Defreq {fc, [@Var{delim-char} [@Var{padding-char}]]}
-Define a delimiting and a padding character for fields.  If the latter
-is missing, the padding character defaults to a space character.  If
-there is no argument at all, the field mechanism is disabled (which is
-the default).  Note that contrary to e.g.@: the tab repetition
-character, delimiting and padding characters are @emph{not} associated
-to the current environment (@pxref{Environments}).
-
-Example:
-
-@Example
-.fc # ^
-.ta T 3i
-#foo^bar^smurf#
-.br
-#foo^^bar^smurf#
-@endExample
-
-@noindent
-and here the result:
-
-@Example
-foo         bar          smurf
-foo            bar       smurf
-@endExample
-@endDefreq
-
-
-@c =====================================================================
-
-@node Character Translations, Troff and Nroff Mode, Tabs and Fields, gtroff Reference
-@section Character Translations
-@cindex character translations
-@cindex translations of characters
-
-@cindex control character, changing (@code{cc})
-@cindex character, control, changing (@code{cc})
-@cindex no-break control character, changing (@code{c2})
-@cindex character, no-break control, changing (@code{c2})
-@cindex control character, no-break, changing (@code{c2})
-The control character (@samp{.}) and the no-break control character
-(@samp{'}) can be changed with the @code{cc} and @code{c2} requests,
-respectively.
-
-@Defreq {cc, [@Var{c}]}
-Set the control character to@tie{}@var{c}.  With no argument the default
-control character @samp{.} is restored.  The value of the control
-character is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@Defreq {c2, [@Var{c}]}
-Set the no-break control character to@tie{}@var{c}.  With no argument
-the default control character @samp{'} is restored.  The value of the
-no-break control character is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@xref{Requests}.
-
-@Defreq {eo, }
-@cindex disabling @code{\} (@code{eo})
-@cindex @code{\}, disabling (@code{eo})
-Disable the escape mechanism completely.  After executing this request,
-the backslash character @samp{\} no longer starts an escape sequence.
-
-This request can be very helpful in writing macros since it is not
-necessary then to double the escape character.  Here an example:
-
-@Example
-.\" This is a simplified version of the
-.\" .BR request from the man macro package
-.eo
-.de BR
-.  ds result \&
-.  while (\n[.$] >= 2) \@{\
-.    as result \fB\$1\fR\$2
-.    shift 2
-.  \@}
-.  if \n[.$] .as result \fB\$1
-\*[result]
-.  ft R
-..
-.ec
-@endExample
-@endDefreq
-
-@Defreq {ec, [@Var{c}]}
-@cindex escape character, changing (@code{ec})
-@cindex character, escape, changing (@code{ec})
-Set the escape character to@tie{}@var{c}.  With no argument the default
-escape character @samp{\} is restored.  It can be also used to re-enable
-the escape mechanism after an @code{eo} request.
-
-Note that changing the escape character globally likely breaks macro
-packages since @code{gtroff} has no mechanism to `intern' macros, i.e.,
-to convert a macro definition into an internal form that is independent
-of its representation (@TeX{} has this mechanism).  If a macro is
-called, it is executed literally.
-@endDefreq
-
-@DefreqList {ecs, }
-@DefreqListEndx {ecr, }
-The @code{ecs} request saves the current escape character in an internal
-register.  Use this request in combination with the @code{ec} request to
-temporarily change the escape character.
-
-The @code{ecr} request restores the escape character saved with
-@code{ecs}.  Without a previous call to @code{ecs}, this request sets
-the escape character to @code{\}.
-@endDefreq
-
-@DefescList {\\\\, , , }
-@DefescItemx {\\e, , , }
-@DefescListEndx {\\E, , , }
-Print the current escape character (which is the backslash character
-@samp{\} by default).
-
-@code{\\} is a `delayed' backslash; more precisely, it is the default
-escape character followed by a backslash, which no longer has special
-meaning due to the leading escape character.  It is @emph{not} an escape
-sequence in the usual sense!  In any unknown escape sequence
-@code{\@var{X}} the escape character is ignored and @var{X} is printed.
-But if @var{X} is equal to the current escape character, no warning is
-emitted.
-
-@cindex @code{\E}, and copy-in mode
-@cindex copy-in mode, and @code{\E}
-@cindex mode, copy-in, and @code{\E}
-As a consequence, only at top-level or in a diversion a backslash glyph
-is printed; in copy-in mode, it expands to a single backslash, which then
-combines with the following character to an escape sequence.
-
-The @code{\E} escape differs from @code{\e} by printing an escape
-character that is not interpreted in copy mode.  Use this to define
-strings with escapes that work when used in copy mode (for example, as a
-macro argument).  The following example defines strings to begin and end
-a superscript:
-
-@Example
-.ds @{ \v'-.3m'\s'\En[.s]*60/100'
-.ds @} \s0\v'.3m'
-@endExample
-
-Another example to demonstrate the differences between the various
-escape sequences, using a strange escape character, @samp{-}.
-
-@Example
-.ec -
-.de xxx
---A'123'
-..
-.xxx
-    @result{} -A'foo'
-@endExample
-
-@noindent
-The result is surprising for most users, expecting @samp{1} since
-@samp{foo} is a valid identifier.  What has happened?  As mentioned
-above, the leading escape character makes the following character
-ordinary.  Written with the default escape character the sequence
-@samp{--} becomes @samp{\-} -- this is the minus sign.
-
-If the escape character followed by itself is a valid escape sequence,
-only @code{\E} yields the expected result:
-
-@Example
-.ec -
-.de xxx
--EA'123'
-..
-.xxx
-    @result{} 1
-@endExample
-@endDefesc
-
-@Defesc {\\., , , }
-Similar to @code{\\}, the sequence @code{\.} isn't a real escape
-sequence.  As before, a warning message is suppressed if the escape
-character is followed by a dot, and the dot itself is printed.
-
-@Example
-.de foo
-.  nop foo
-.
-.  de bar
-.    nop bar
-\\..
-.
-..
-.foo
-.bar
-    @result{} foo bar
-@endExample
-
-@noindent
-The first backslash is consumed while the macro is read, and the second
-is swallowed while executing macro @code{foo}.
-@endDefesc
-
-A @dfn{translation} is a mapping of an input character to an output
-glyph.  The mapping occurs at output time, i.e., the input character
-gets assigned the metric information of the mapped output character
-right before input tokens are converted to nodes (@pxref{Gtroff
-Internals}, for more on this process).
-
-@DefreqList {tr, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
-@DefreqListEndx {trin, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
-Translate character @var{a} to glyph@tie{}@var{b}, character @var{c} to
-glyph@tie{}@var{d}, etc.  If there is an odd number of arguments, the
-last one is translated to an unstretchable space (@w{@samp{\ }}).
-
-The @code{trin} request is identical to @code{tr}, but when you unformat
-a diversion with @code{asciify} it ignores the translation.
-@xref{Diversions}, for details about the @code{asciify} request.
-
-Some notes:
-
-@itemize @bullet
-@item
-@cindex @code{\(}, and translations
-@cindex @code{\[}, and translations
-@cindex @code{\'}, and translations
-@cindex @code{\`}, and translations
-@cindex @code{\-}, and translations
-@cindex @code{\_}, and translations
-@cindex @code{\C}, and translations
-@cindex @code{\N}, and translations
-@cindex @code{char} request, and translations
-@cindex special characters
-@cindex character, special
-@cindex numbered glyph (@code{\N})
-@cindex glyph, numbered (@code{\N})
-Special characters (@code{\(@var{xx}}, @code{\[@var{xxx}]},
-@code{\C'@var{xxx}'}, @code{\'}, @code{\`}, @code{\-}, @code{\_}),
-glyphs defined with the @code{char} request, and numbered glyphs
-(@code{\N'@var{xxx}'}) can be translated also.
-
-@item
-@cindex @code{\e}, and translations
-The @code{\e} escape can be translated also.
-
-@item
-@cindex @code{\%}, and translations
-@cindex @code{\~}, and translations
-Characters can be mapped onto the @code{\%} and @code{\~} escapes (but
-@code{\%} and @code{\~} can't be mapped onto another glyph).
-
-@item
-@cindex backspace character, and translations
-@cindex character, backspace, and translations
-@cindex leader character, and translations
-@cindex character, leader, and translations
-@cindex newline character, and translations
-@cindex character, newline, and translations
-@cindex tab character, and translations
-@cindex character, tab, and translations
-@cindex @code{\a}, and translations
-@cindex @code{\t}, and translations
-The following characters can't be translated: space (with one exception,
-see below), backspace, newline, leader (and @code{\a}), tab (and
-@code{\t}).
-
-@item
-@cindex @code{shc} request, and translations
-Translations are not considered for finding the soft hyphen character
-set with the @code{shc} request.
-
-@item
-@cindex @code{\&}, and translations
-The pair @samp{@var{c}\&} (this is an arbitrary character@tie{}@var{c}
-followed by the zero width space character) maps this character to
-nothing.
-
-@Example
-.tr a\&
-foo bar
-    @result{} foo br
-@endExample
-
-@noindent
-It is even possible to map the space character to nothing:
-
-@Example
-.tr aa \&
-foo bar
-    @result{} foobar
-@endExample
-
-@noindent
-As shown in the example, the space character can't be the first
-character/glyph pair as an argument of @code{tr}.  Additionally, it is
-not possible to map the space character to any other glyph; requests
-like @w{@samp{.tr aa x}} undo @w{@samp{.tr aa \&}} instead.
-
-If justification is active, lines are justified in spite of the `empty'
-space character (but there is no minimal distance, i.e.@: the space
-character, between words).
-
-@item
-After an output glyph has been constructed (this happens at the moment
-immediately before the glyph is appended to an output glyph list, either
-by direct output, in a macro, diversion, or string), it is no longer
-affected by @code{tr}.
-
-@item
-Translating character to glyphs where one of them or both are undefined
-is possible also; @code{tr} does not check whether the entities in its
-argument do exist.
-
-@xref{Gtroff Internals}.
-
-@item
-@code{troff} no longer has a hard-coded dependency on @w{Latin-1}; all
-@code{char@var{XXX}} entities have been removed from the font
-description files.  This has a notable consequence that shows up in
-warnings like @code{can't find character with input code @var{XXX}} if
-the @code{tr} request isn't handled properly.
-
-Consider the following translation:
-
-@Example
-.tr éÉ
-@endExample
-
-@noindent
-This maps input character @code{é} onto glyph @code{É}, which is
-identical to glyph @code{char201}.  But this glyph intentionally doesn't
-exist!  Instead, @code{\[char201]} is treated as an input character
-entity and is by default mapped onto @code{\['E]}, and @code{gtroff}
-doesn't handle translations of translations.
-
-The right way to write the above translation is
-
-@Example
-.tr é\['E]
-@endExample
-
-@noindent
-In other words, the first argument of @code{tr} should be an input
-character or entity, and the second one a glyph entity.
-
-@item
-Without an argument, the @code{tr} request is ignored.
-@end itemize
-@endDefreq
-
-@Defreq {trnt, @Var{a}@Var{b}@Var{c}@Var{d}@dots{}}
-@cindex @code{\!}, and @code{trnt}
-@code{trnt} is the same as the @code{tr} request except that the
-translations do not apply to text that is transparently throughput into
-a diversion with @code{\!}.  @xref{Diversions}, for more information.
-
-For example,
-
-@Example
-.tr ab
-.di x
-\!.tm a
-.di
-.x
-@endExample
-
-@noindent
-prints @samp{b} to the standard error stream; if @code{trnt} is used
-instead of @code{tr} it prints @samp{a}.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Troff and Nroff Mode, Line Layout, Character Translations, gtroff Reference
-@section Troff and Nroff Mode
-@cindex troff mode
-@cindex mode, troff
-@cindex nroff mode
-@cindex mode, nroff
-
-Originally, @code{nroff} and @code{troff} were two separate programs,
-the former for TTY output, the latter for everything else.  With GNU
-@code{troff}, both programs are merged into one executable, sending its
-output to a device driver (@code{grotty} for TTY devices, @code{grops}
-for @sc{PostScript}, etc.)@: which interprets the intermediate output of
-@code{gtroff}.  For @acronym{UNIX} @code{troff} it makes sense to talk
-about @dfn{Nroff mode} and @dfn{Troff mode} since the differences are
-hardcoded.  For GNU @code{troff}, this distinction is not appropriate
-because @code{gtroff} simply takes the information given in the font
-files for a particular device without handling requests specially if a
-TTY output device is used.
-
-Usually, a macro package can be used with all output devices.
-Nevertheless, it is sometimes necessary to make a distinction between
-TTY and non-TTY devices: @code{gtroff} provides two built-in conditions
-@samp{n} and @samp{t} for the @code{if}, @code{ie}, and @code{while}
-requests to decide whether @code{gtroff} shall behave like @code{nroff}
-or like @code{troff}.
-
-@Defreq {troff, }
-@pindex troffrc
-@pindex troffrc-end
-Make the @samp{t} built-in condition true (and the @samp{n} built-in
-condition false) for @code{if}, @code{ie}, and @code{while} conditional
-requests.  This is the default if @code{gtroff} (@emph{not}
-@code{groff}) is started with the @option{-R} switch to avoid loading of
-the start-up files @file{troffrc} and @file{troffrc-end}.  Without
-@option{-R}, @code{gtroff} stays in troff mode if the output device is
-not a TTY (e.g.@: `ps').
-@endDefreq
-
-@Defreq {nroff, }
-@pindex tty.tmac
-Make the @samp{n} built-in condition true (and the @samp{t} built-in
-condition false) for @code{if}, @code{ie}, and @code{while} conditional
-requests.  This is the default if @code{gtroff} uses a TTY output
-device; the code for switching to nroff mode is in the file
-@file{tty.tmac}, which is loaded by the start-up file @code{troffrc}.
-@endDefreq
-
-@xref{Conditionals and Loops}, for more details on built-in conditions.
-
-
-@c =====================================================================
-
-@node Line Layout, Line Control, Troff and Nroff Mode, gtroff Reference
-@section Line Layout
-@cindex line layout
-@cindex layout, line
-
-@cindex dimensions, line
-@cindex line dimensions
-The following drawing shows the dimensions that @code{gtroff} uses for
-placing a line of output onto the page.  They are labeled with the
-request that manipulates each dimension.
-
-@Example
-     -->| in |<--
-        |<-----------ll------------>|
-   +----+----+----------------------+----+
-   |    :    :                      :    |
-   +----+----+----------------------+----+
--->| po |<--
-   |<--------paper width---------------->|
-@endExample
-
-@noindent
-These dimensions are:
-
-@ftable @code
-@item po
-@cindex left margin (@code{po})
-@cindex margin, left (@code{po})
-@cindex page offset (@code{po})
-@cindex offset, page (@code{po})
-@dfn{Page offset} -- this is the leftmost position of text on the final
-output, defining the @dfn{left margin}.
-
-@item in
-@cindex indentation (@code{in})
-@cindex line indentation (@code{in})
-@dfn{Indentation} -- this is the distance from the left margin where
-text is printed.
-
-@item ll
-@cindex line length (@code{ll})
-@cindex length of line (@code{ll})
-@dfn{Line length} -- this is the distance from the left margin to right
-margin.
-@end ftable
-
-A simple demonstration:
-
-@Example
-.ll 3i
-This is text without indentation.
-The line length has been set to 3\~inch.
-.in +.5i
-.ll -.5i
-Now the left and right margins are both increased.
-.in
-.ll
-Calling .in and .ll without parameters restore
-the previous values.
-@endExample
-
-Result:
-
-@Example
-This  is text without indenta-
-tion.   The  line  length  has
-been set to 3 inch.
-     Now   the  left  and
-     right  margins   are
-     both increased.
-Calling  .in  and  .ll without
-parameters restore the  previ-
-ous values.
-@endExample
-
-@DefreqList {po, [@Var{offset}]}
-@DefreqItem {po, @t{+}@Var{offset}}
-@DefreqItem {po, @t{-}@Var{offset}}
-@DefregListEndx {.o}
-@pindex troffrc
-Set horizontal page offset to @var{offset} (or increment or decrement
-the current value by @var{offset}).  Note that this request does not
-cause a break, so changing the page offset in the middle of text being
-filled may not yield the expected result.  The initial value is
-1@dmn{i}.  For TTY output devices, it is set to 0 in the startup file
-@file{troffrc}; the default scaling indicator is @samp{m} (and not
-@samp{v} as incorrectly documented in the original @acronym{UNIX} troff
-manual).
-
-The current page offset can be found in the read-only number register
-@samp{.o}.
-
-If @code{po} is called without an argument, the page offset is reset to
-the previous value before the last call to @code{po}.
-
-@Example
-.po 3i
-\n[.o]
-    @result{} 720
-.po -1i
-\n[.o]
-    @result{} 480
-.po
-\n[.o]
-    @result{} 720
-@endExample
-@endDefreq
-
-@DefreqList {in, [@Var{indent}]}
-@DefreqItem {in, @t{+}@Var{indent}}
-@DefreqItem {in, @t{-}@Var{indent}}
-@DefregListEndx {.i}
-Set indentation to @var{indent} (or increment or decrement the current
-value by @var{indent}).  This request causes a break.  Initially, there
-is no indentation.
-
-If @code{in} is called without an argument, the indentation is reset to
-the previous value before the last call to @code{in}.  The default
-scaling indicator is @samp{m}.
-
-The indentation is associated with the current environment
-(@pxref{Environments}).
-
-If a negative indentation value is specified (which is not allowed),
-@code{gtroff} emits a warning of type @samp{range} and sets the
-indentation to zero.
-
-The effect of @code{in} is delayed until a partially collected line (if
-it exists) is output.  A temporary indentation value is reset to zero
-also.
-
-The current indentation (as set by @code{in}) can be found in the
-read-only number register @samp{.i}.
-@endDefreq
-
-@DefreqList {ti, offset}
-@DefreqItem {ti, @t{+}@Var{offset}}
-@DefreqItem {ti, @t{-}@Var{offset}}
-@DefregListEndx {.in}
-Temporarily indent the next output line by @var{offset}.  If an
-increment or decrement value is specified, adjust the temporary
-indentation relative to the value set by the @code{in} request.
-
-This request causes a break; its value is associated with the current
-environment (@pxref{Environments}).  The default scaling indicator is
-@samp{m}.  A call of @code{ti} without an argument is ignored.
-
-If the total indentation value is negative (which is not allowed),
-@code{gtroff} emits a warning of type @samp{range} and sets the
-temporary indentation to zero.  `Total indentation' is either
-@var{offset} if specified as an absolute value, or the temporary plus
-normal indentation, if @var{offset} is given as a relative value.
-
-The effect of @code{ti} is delayed until a partially collected line (if
-it exists) is output.
-
-The read-only number register @code{.in} is the indentation that applies
-to the current output line.
-
-The difference between @code{.i} and @code{.in} is that the latter takes
-into account whether a partially collected line still uses the old
-indentation value or a temporary indentation value is active.
-@endDefreq
-
-@DefreqList {ll, [@Var{length}]}
-@DefreqItem {ll, @t{+}@Var{length}}
-@DefreqItem {ll, @t{-}@Var{length}}
-@DefregItemx {.l}
-@DefregListEndx {.ll}
-Set the line length to @var{length} (or increment or decrement the
-current value by @var{length}).  Initially, the line length is set to
-6.5@dmn{i}.  The effect of @code{ll} is delayed until a partially
-collected line (if it exists) is output.  The default scaling indicator
-is @samp{m}.
-
-If @code{ll} is called without an argument, the line length is reset to
-the previous value before the last call to @code{ll}.  If a negative
-line length is specified (which is not allowed), @code{gtroff} emits a
-warning of type @samp{range} and sets the line length to zero.
-
-The line length is associated with the current environment
-(@pxref{Environments}).
-
-@cindex line length register (@code{.l})
-The current line length (as set by @code{ll}) can be found in the
-read-only number register @samp{.l}.  The read-only number register
-@code{.ll} is the line length that applies to the current output line.
-
-Similar to @code{.i} and @code{.in}, the difference between @code{.l}
-and @code{.ll} is that the latter takes into account whether a partially
-collected line still uses the old line length value.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Line Control, Page Layout, Line Layout, gtroff Reference
-@section Line Control
-@cindex line control
-@cindex control, line
-
-It is important to understand how @code{gtroff} handles input and output
-lines.
-
-Many escapes use positioning relative to the input line.  For example,
-this
-
-@Example
-This is a \h'|1.2i'test.
-
-This is a
-\h'|1.2i'test.
-@endExample
-
-@noindent
-produces
-
-@Example
-This is a   test.
-
-This is a             test.
-@endExample
-
-The main usage of this feature is to define macros that act exactly at
-the place where called.
-
-@Example
-.\" A simple macro to underline a word
-.de underline
-.  nop \\$1\l'|0\[ul]'
-..
-@endExample
-
-@noindent
-In the above example, @samp{|0} specifies a negative distance from the
-current position (at the end of the just emitted argument @code{\$1})
-back to the beginning of the input line.  Thus, the @samp{\l} escape
-draws a line from right to left.
-
-@cindex input line continuation (@code{\})
-@cindex line, input, continuation (@code{\})
-@cindex continuation, input line (@code{\})
-@cindex output line, continuation (@code{\c})
-@cindex line, output, continuation (@code{\c})
-@cindex continuation, output line (@code{\c})
-@cindex interrupted line
-@cindex line, interrupted
-@code{gtroff} makes a difference between input and output line
-continuation; the latter is also called @dfn{interrupting} a line.
-
-@DefescList {\\@key{RET}, , ,}
-@DefescItemx {\\c, , ,}
-@DefregListEndx {.int}
-Continue a line.  @code{\@key{RET}} (this is a backslash at the end of a
-line immediately followed by a newline) works on the input level,
-suppressing the effects of the following newline in the input.
-
-@Example
-This is a \
-.test
-    @result{} This is a .test
-@endExample
-
-The @samp{|} operator is also affected.
-
-@cindex @code{\R}, after @code{\c}
-@code{\c} works on the output level.  Anything after this escape on the
-same line is ignored except @code{\R}, which works as usual.  Anything
-before @code{\c} on the same line is appended to the current partial
-output line.  The next non-command line after an interrupted line counts
-as a new input line.
-
-The visual results depend on whether no-fill mode is active.
-
-@itemize @bullet
-@item
-@cindex @code{\c}, and no-fill mode
-@cindex no-fill mode, and @code{\c}
-@cindex mode, no-fill, and @code{\c}
-If no-fill mode is active (using the @code{nf} request), the next input
-text line after @code{\c} is handled as a continuation of the same input
-text line.
-
-@Example
-.nf
-This is a \c
-test.
-    @result{} This is a test.
-@endExample
-
-@item
-@cindex @code{\c}, and fill mode
-@cindex fill mode, and @code{\c}
-@cindex mode, fill, and @code{\c}
-If fill mode is active (using the @code{fi} request), a word interrupted
-with @code{\c} is continued with the text on the next input text line,
-without an intervening space.
-
-@Example
-This is a te\c
-st.
-    @result{} This is a test.
-@endExample
-@end itemize
-
-Note that an intervening control line that causes a break is stronger
-than @code{\c}, flushing out the current partial line in the usual way.
-
-@cindex interrupted line register (@code{.int})
-The @code{.int} register contains a positive value if the last output
-line was interrupted with @code{\c}; this is associated with the current
-environment (@pxref{Environments}).
-@endDefesc
-
-
-@c =====================================================================
-
-@node Page Layout, Page Control, Line Control, gtroff Reference
-@section Page Layout
-@cindex page layout
-@cindex layout, page
-
-@code{gtroff} provides some very primitive operations for controlling
-page layout.
-
-@DefreqList {pl, [@Var{length}]}
-@DefreqItem {pl, @t{+}@Var{length}}
-@DefreqItem {pl, @t{-}@Var{length}}
-@DefregListEndx {.p}
-@cindex page length (@code{pl})
-@cindex length of page (@code{pl})
-Set the @dfn{page length} to @var{length} (or increment or decrement the
-current value by @var{length}).  This is the length of the physical
-output page.  The default scaling indicator is @samp{v}.
-
-@cindex page length register (@code{.p})
-The current setting can be found in the read-only number register
-@samp{.p}.
-
-@cindex top margin
-@cindex margin, top
-@cindex bottom margin
-@cindex margin, bottom
-Note that this only specifies the size of the page, not the top and
-bottom margins.  Those are not set by @code{gtroff} directly.
-@xref{Traps}, for further information on how to do this.
-
-Negative @code{pl} values are possible also, but not very useful: No
-trap is sprung, and each line is output on a single page (thus
-suppressing all vertical spacing).
-
-If no argument or an invalid argument is given, @code{pl} sets the page
-length to 11@dmn{i}.
-@endDefreq
-
-@cindex headers
-@cindex footers
-@cindex titles
-@code{gtroff} provides several operations that help in setting up top
-and bottom titles (or headers and footers).
-
-@Defreq {tl, @t{'}@Var{left}@t{'}@Var{center}@t{'}@Var{right}@t{'}}
-@cindex title line (@code{tl})
-@cindex three-part title (@code{tl})
-@cindex page number character (@code{%})
-Print a @dfn{title line}.  It consists of three parts: a left justified
-portion, a centered portion, and a right justified portion.  The
-argument separator @samp{'} can be replaced with any character not
-occurring in the title line.  The @samp{%} character is replaced with
-the current page number.  This character can be changed with the
-@code{pc} request (see below).
-
-Without argument, @code{tl} is ignored.
-
-Some notes:
-
-@itemize @bullet
-@item
-The line length set by the @code{ll} request is not honoured by
-@code{tl}; use the @code{lt} request (described below) instead, to
-control line length for text set by @code{tl}.
-
-@item
-A title line is not restricted to the top or bottom of a page.
-
-@item
-@code{tl} prints the title line immediately, ignoring a partially filled
-line (which stays untouched).
-
-@item
-It is not an error to omit closing delimiters.  For example,
-@w{@samp{.tl /foo}} is equivalent to @w{@samp{.tl /foo///}}: It prints a
-title line with the left justified word @samp{foo}; the centered and
-right justfied parts are empty.
-
-@item
-@code{tl} accepts the same parameter delimiting characters as the
-@code{\A} escape; see @ref{Escapes}.
-@end itemize
-@endDefreq
-
-@DefreqList {lt, [@Var{length}]}
-@DefreqItem {lt, @t{+}@Var{length}}
-@DefreqItem {lt, @t{-}@Var{length}}
-@DefregListEndx {.lt}
-@cindex length of title line (@code{lt})
-@cindex title line, length (@code{lt})
-@cindex title line length register (@code{.lt})
-The title line is printed using its own line length, which is specified
-(or incremented or decremented) with the @code{lt} request.  Initially,
-the title line length is set to 6.5@dmn{i}.  If a negative line length
-is specified (which is not allowed), @code{gtroff} emits a warning of
-type @samp{range} and sets the title line length to zero.  The default
-scaling indicator is @samp{m}.  If @code{lt} is called without an
-argument, the title length is reset to the previous value before the
-last call to @code{lt}.
-
-The current setting of this is available in the @code{.lt} read-only
-number register; it is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@DefreqList {pn, page}
-@DefreqItem {pn, @t{+}@Var{page}}
-@DefreqItem {pn, @t{-}@Var{page}}
-@DefregListEndx {.pn}
-@cindex page number (@code{pn})
-@cindex number, page (@code{pn})
-Change (increase or decrease) the page number of the @emph{next} page.
-The only argument is the page number; the request is ignored without a
-parameter.
-
-The read-only number register @code{.pn} contains the number of the next
-page: either the value set by a @code{pn} request, or the number of the
-current page plus@tie{}1.
-@endDefreq
-
-@Defreq {pc, [@Var{char}]}
-@cindex changing the page number character (@code{pc})
-@cindex page number character, changing (@code{pc})
-@vindex %
-Change the page number character (used by the @code{tl} request) to a
-different character.  With no argument, this mechanism is disabled.
-Note that this doesn't affect the number register@tie{}@code{%}.
-@endDefreq
-
-@xref{Traps}.
-
-
-@c =====================================================================
-
-@node Page Control, Fonts and Symbols, Page Layout, gtroff Reference
-@section Page Control
-@cindex page control
-@cindex control, page
-
-@DefreqList {bp, [@Var{page}]}
-@DefreqItem {bp, @t{+}@Var{page}}
-@DefreqItem {bp, @t{-}@Var{page}}
-@DefregListEndx {%}
-@cindex new page (@code{bp})
-@cindex page, new (@code{bp})
-Stop processing the current page and move to the next page.  This
-request causes a break.  It can also take an argument to set (increase,
-decrease) the page number of the next page (which actually becomes the
-current page after @code{bp} has finished).  The difference between
-@code{bp} and @code{pn} is that @code{pn} does not cause a break or
-actually eject a page.  @xref{Page Layout}.
-
-@Example
-.de newpage                         \" define macro
-'bp                                 \" begin page
-'sp .5i                             \" vertical space
-.tl 'left top'center top'right top' \" title
-'sp .3i                             \" vertical space
-..                                  \" end macro
-@endExample
-
-@cindex @code{bp} request, and top-level diversion
-@cindex top-level diversion, and @code{bp}
-@cindex diversion, top-level, and @code{bp}
-@code{bp} has no effect if not called within the top-level diversion
-(@pxref{Diversions}).
-
-@cindex page number register (@code{%})
-@cindex current page number (@code{%})
-The read-write register@tie{}@code{%} holds the current page number.
-
-The number register @code{.pe} is set to@tie{}1 while @code{bp} is
-active.  @xref{Page Location Traps}.
-@endDefreq
-
-@Defreq {ne, [@Var{space}]}
-@cindex orphan lines, preventing with @code{ne}
-@cindex conditional page break (@code{ne})
-@cindex page break, conditional (@code{ne})
-It is often necessary to force a certain amount of space before a new
-page occurs.  This is most useful to make sure that there is not a
-single @dfn{orphan} line left at the bottom of a page.  The @code{ne}
-request ensures that there is a certain distance, specified by the first
-argument, before the next page is triggered (see @ref{Traps}, for
-further information).  The default scaling indicator for @code{ne} is
-@samp{v}; the default value of @var{space} is@tie{}1@dmn{v} if no
-argument is given.
-
-For example, to make sure that no fewer than 2@tie{}lines get orphaned,
-do the following before each paragraph:
-
-@Example
-.ne 2
-text text text
-@endExample
-
-@code{ne} then automatically causes a page break if there is space for
-one line only.
-@endDefreq
-
-@DefreqList {sv, [@Var{space}]}
-@DefreqListEndx {os, }
-@cindex @code{ne} request, comparison with @code{sv}
-@code{sv} is similar to the @code{ne} request; it reserves the specified
-amount of vertical space.  If the desired amount of space exists before
-the next trap (or the bottom page boundary if no trap is set), the space
-is output immediately (ignoring a partially filled line, which stays
-untouched).  If there is not enough space, it is stored for later output
-via the @code{os} request.  The default value is@tie{}1@dmn{v} if no
-argument is given; the default scaling indicator is @samp{v}.
-
-@cindex @code{sv} request, and no-space mode
-@cindex @code{os} request, and no-space mode
-Both @code{sv} and @code{os} ignore no-space mode.  While the @code{sv}
-request allows negative values for @var{space}, @code{os} ignores them.
-@endDefreq
-
-@Defreg {nl}
-@cindex current vertical position (@code{nl})
-@cindex vertical position, current (@code{nl})
-@cindex position, vertical, current (@code{nl})
-This register contains the current vertical position.  If the vertical
-position is zero and the top of page transition hasn't happened yet,
-@code{nl} is set to negative value.  @code{gtroff} itself does this at
-the very beginning of a document before anything has been printed, but
-the main usage is to plant a header trap on a page if this page has
-already started.
-
-Consider the following:
-
-@Example
-.de xxx
-.  sp
-.  tl ''Header''
-.  sp
-..
-.
-First page.
-.bp
-.wh 0 xxx
-.nr nl (-1)
-Second page.
-@endExample
-
-@noindent
-Result:
-
-@Example
-First page.
-
-...
-
-                             Header
-
-Second page.
-
-...
-@endExample
-
-@noindent
-Without resetting @code{nl} to a negative value, the just planted trap
-would be active beginning with the @emph{next} page, not the current
-one.
-
-@xref{Diversions}, for a comparison with the @code{.h} and @code{.d}
-registers.
-@endDefreg
-
-
-@c =====================================================================
-
-@node Fonts and Symbols, Sizes, Page Control, gtroff Reference
-@section Fonts and Symbols
-@cindex fonts
-
-@code{gtroff} can switch fonts at any point in the text.
-
-The basic set of fonts is @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
-These are Times Roman, Italic, Bold, and Bold Italic.  For non-TTY
-devices, there is also at least one symbol font that contains various
-special symbols (Greek, mathematics).
-
-@menu
-* Changing Fonts::
-* Font Families::
-* Font Positions::
-* Using Symbols::
-* Character Classes::
-* Special Fonts::
-* Artificial Fonts::
-* Ligatures and Kerning::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Changing Fonts, Font Families, Fonts and Symbols, Fonts and Symbols
-@subsection Changing Fonts
-@cindex fonts
-
-@DefreqList {ft, [@Var{font}]}
-@DefescItemx {\\f, , f, }
-@DefescItem {\\f, @Lparen{}, fn, }
-@DefescItem {\\f, @Lbrack{}, font, @Rbrack{}}
-@DefregListEndx {.sty}
-@cindex changing fonts (@code{ft}, @code{\f})
-@cindex fonts, changing (@code{ft}, @code{\f})
-@cindex @code{sty} request, and changing fonts
-@cindex @code{fam} request, and changing fonts
-@cindex @code{\F}, and changing fonts
-@kindex styles
-@kindex family
-@pindex DESC
-The @code{ft} request and the @code{\f} escape change the current font
-to @var{font} (one-character name@tie{}@var{f}, two-character name
-@var{fn}).
-
-If @var{font} is a style name (as set with the @code{sty} request or
-with the @code{styles} command in the @file{DESC} file), use it within
-the current font family (as set with the @code{fam} request, @code{\F}
-escape, or with the @code{family} command in the @file{DESC} file).
-
-It is not possible to switch to a font with the name @samp{DESC}
-(whereas this name could be used as a style name; however, this is not
-recommended).
-
-@cindex previous font (@code{ft}, @code{\f[]}, @code{\fP})
-@cindex font, previous (@code{ft}, @code{\f[]}, @code{\fP})
-With no argument or using @samp{P} as an argument, @code{.ft} switches
-to the previous font.  Use @code{\f[]} to do this with the escape.  The
-old syntax forms @code{\fP} or @code{\f[P]} are also supported.
-
-Fonts are generally specified as upper-case strings, which are usually
-1@tie{}to 4 characters representing an abbreviation or acronym of the
-font name.  This is no limitation, just a convention.
-
-The example below produces two identical lines.
-
-@Example
-eggs, bacon,
-.ft B
-spam
-.ft
-and sausage.
-
-eggs, bacon, \fBspam\fP and sausage.
-@endExample
-
-Note that @code{\f} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the font on the fly:
-
-@Example
-.mc \f[I]x\f[]
-@endExample
-
-The current style name is available in the read-only number register
-@samp{.sty} (this is a string-valued register); if the current font
-isn't a style, the empty string is returned.  It is associated with the
-current environment.
-
-@xref{Font Positions}, for an alternative syntax.
-@endDefreq
-
-@Defreq {ftr, f [@Var{g}]}
-@cindex font translation (@code{ftr})
-@cindex @code{ft} request, and font translations
-@cindex @code{ul} request, and font translations
-@cindex @code{bd} request, and font translations
-@cindex @code{\f}, and font translations
-@cindex @code{cs} request, and font translations
-@cindex @code{tkf} request, and font translations
-@cindex @code{special} request, and font translations
-@cindex @code{fspecial} request, and font translations
-@cindex @code{fp} request, and font translations
-@cindex @code{sty} request, and font translations
-@cindex @code{if} request, and font translations
-@cindex @code{ie} request, and font translations
-@cindex @code{while} request, and font translations
-Translate font@tie{}@var{f} to font@tie{}@var{g}.  Whenever a font
-named@tie{}@var{f} is referred to in a @code{\f} escape sequence, in the
-@code{F} and @code{S} conditional operators, or in the @code{ft},
-@code{ul}, @code{bd}, @code{cs}, @code{tkf}, @code{special},
-@code{fspecial}, @code{fp}, or @code{sty} requests, font@tie{}@var{g} is
-used.  If @var{g} is missing or equal to@tie{}@var{f} the translation is
-undone.
-
-Note that it is not possible to chain font translations.  Example:
-
-@Example
-.ftr XXX TR
-.ftr XXX YYY
-.ft XXX
-    @result{} warning: can't find font `XXX'
-@endExample
-@endDefreq
-
-@DefreqList {fzoom, f [@Var{zoom}]}
-@DefregListEndx {.zoom}
-@cindex magnification of a font (@code{fzoom})
-@cindex font, magnification (@code{fzoom})
-@cindex zoom factor of a font (@code{fzoom})
-@cindex factor, zoom, of a font (@code{fzoom})
-@cindex font, zoom factor (@code{fzoom})
-@cindex optical size of a font
-@cindex font, optical size
-@cindex size, optical, of a font
-Set magnification of font@tie{}@var{f} to factor @var{zoom}, which must
-be a non-negative integer multiple of 1/1000th.  This request is useful
-to adjust the optical size of a font in relation to the others.  In the
-example below, font @code{CR} is magnified by 10% (the zoom factor is
-thus 1.1).
-
-@Example
-.fam P
-.fzoom CR 1100
-.ps 12
-Palatino and \f[CR]Courier\f[]
-@endExample
-
-A missing or zero value of @var{zoom} is the same as a value of 1000,
-which means no magnification.  @var{f}@tie{}must be a real font name,
-not a style.
-
-Note that the magnification of a font is completely transparent to
-troff; a change of the zoom factor doesn't cause any effect except that
-the dimensions of glyphs, (word) spaces, kerns, etc., of the affected
-font are adjusted accordingly.
-
-The zoom factor of the current font is available in the read-only number
-register @samp{.zoom}, in multiples of 1/1000th.  It returns zero if
-there is no magnification.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Font Families, Font Positions, Changing Fonts, Fonts and Symbols
-@subsection Font Families
-@cindex font families
-@cindex families, font
-@cindex font styles
-@cindex styles, font
-
-Due to the variety of fonts available, @code{gtroff} has added the
-concept of @dfn{font families} and @dfn{font styles}.  The fonts are
-specified as the concatenation of the font family and style.  Specifying
-a font without the family part causes @code{gtroff} to use that style of
-the current family.
-
-@cindex PostScript fonts
-@cindex fonts, PostScript
-Currently, fonts for the devices @option{-Tps}, @option{-Tpdf},
-@option{-Tdvi}, @option{-Tlj4}, @option{-Tlbp}, and the X11 fonts are
-set up to this mechanism.  By default, @code{gtroff} uses the Times
-family with the four styles @samp{R}, @samp{I}, @samp{B}, and @samp{BI}.
-
-This way, it is possible to use the basic four fonts and to select a
-different font family on the command line (@pxref{Groff Options}).
-
-@DefreqList {fam, [@Var{family}]}
-@DefregItemx {.fam}
-@DefescItemx {\\F, , f, }
-@DefescItem {\\F, @Lparen{}, fm, }
-@DefescItem {\\F, @Lbrack{}, family, @Rbrack{}}
-@DefregListEndx {.fn}
-@cindex changing font family (@code{fam}, @code{\F})
-@cindex font family, changing (@code{fam}, @code{\F})
-Switch font family to @var{family} (one-character name@tie{}@var{f},
-two-character name @var{fm}).  If no argument is given, switch back to
-the previous font family.  Use @code{\F[]} to do this with the escape.
-Note that @code{\FP} doesn't work; it selects font family @samp{P}
-instead.
-
-The value at start-up is @samp{T}.  The current font family is available
-in the read-only number register @samp{.fam} (this is a string-valued
-register); it is associated with the current environment.
-
-@Example
-spam,
-.fam H    \" helvetica family
-spam,     \" used font is family H + style R = HR
-.ft B     \" family H + style B = font HB
-spam,
-.fam T    \" times family
-spam,     \" used font is family T + style B = TB
-.ft AR    \" font AR (not a style)
-baked beans,
-.ft R     \" family T + style R = font TR
-and spam.
-@endExample
-
-Note that @code{\F} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the font family on the fly:
-
-@Example
-.mc \F[P]x\F[]
-@endExample
-
-The @samp{.fn} register contains the current @dfn{real font name} of the
-current font.  This is a string-valued register.  If the current font is
-a style, the value of @code{\n[.fn]} is the proper concatenation of
-family and style name.
-@endDefreq
-
-@Defreq {sty, n style}
-@cindex changing font style (@code{sty})
-@cindex font style, changing (@code{sty})
-@cindex @code{cs} request, and font styles
-@cindex @code{bd} request, and font styles
-@cindex @code{tkf} request, and font styles
-@cindex @code{uf} request, and font styles
-@cindex @code{fspecial} request, and font styles
-Associate @var{style} with font position@tie{}@var{n}.  A font position
-can be associated either with a font or with a style.  The current font
-is the index of a font position and so is also either a font or a style.
-If it is a style, the font that is actually used is the font which name
-is the concatenation of the name of the current family and the name of
-the current style.  For example, if the current font is@tie{}1 and font
-position@tie{}1 is associated with style @samp{R} and the current font
-family is @samp{T}, then font @samp{TR} is used.  If the current font is
-not a style, then the current family is ignored.  If the requests
-@code{cs}, @code{bd}, @code{tkf}, @code{uf}, or @code{fspecial} are
-applied to a style, they are instead applied to the member of the
-current family corresponding to that style.
-
-@var{n}@tie{}must be a non-negative integer value.
-
-@pindex DESC
-@kindex styles
-The default family can be set with the @option{-f} option (@pxref{Groff
-Options}).  The @code{styles} command in the @file{DESC} file controls
-which font positions (if any) are initially associated with styles
-rather than fonts.  For example, the default setting for @sc{PostScript}
-fonts
-
-@Example
-styles R I B BI
-@endExample
-
-@noindent
-is equivalent to
-
-@Example
-.sty 1 R
-.sty 2 I
-.sty 3 B
-.sty 4 BI
-@endExample
-
-@code{fam} and @code{\F} always check whether the current font position
-is valid; this can give surprising results if the current font position
-is associated with a style.
-
-In the following example, we want to access the @sc{PostScript} font
-@code{FooBar} from the font family @code{Foo}:
-
-@Example
-.sty \n[.fp] Bar
-.fam Foo
-    @result{} warning: can't find font `FooR'
-@endExample
-
-@noindent
-The default font position at start-up is@tie{}1; for the @sc{PostScript}
-device, this is associated with style @samp{R}, so @code{gtroff} tries
-to open @code{FooR}.
-
-A solution to this problem is to use a dummy font like the following:
-
-@Example
-.fp 0 dummy TR    \" set up dummy font at position 0
-.sty \n[.fp] Bar  \" register style `Bar'
-.ft 0             \" switch to font at position 0
-.fam Foo          \" activate family `Foo'
-.ft Bar           \" switch to font `FooBar'
-@endExample
-
-@xref{Font Positions}.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Font Positions, Using Symbols, Font Families, Fonts and Symbols
-@subsection Font Positions
-@cindex font positions
-@cindex positions, font
-
-For the sake of old phototypesetters and compatibility with old versions
-of @code{troff}, @code{gtroff} has the concept of font @dfn{positions},
-on which various fonts are mounted.
-
-@DefreqList {fp, pos font [@Var{external-name}]}
-@DefregItemx {.f}
-@DefregListEndx {.fp}
-@cindex mounting font (@code{fp})
-@cindex font, mounting (@code{fp})
-Mount font @var{font} at position @var{pos} (which must be a
-non-negative integer).  This numeric position can then be referred to
-with font changing commands.  When @code{gtroff} starts it is using font
-position@tie{}1 (which must exist; position@tie{}0 is unused usually at
-start-up).
-
-@cindex font position register (@code{.f})
-The current font in use, as a font position, is available in the
-read-only number register @samp{.f}.  This can be useful to remember the
-current font for later recall.  It is associated with the current
-environment (@pxref{Environments}).
-
-@Example
-.nr save-font \n[.f]
-.ft B
-... text text text ...
-.ft \n[save-font]
-@endExample
-
-@cindex next free font position register (@code{.fp})
-The number of the next free font position is available in the read-only
-number register @samp{.fp}.  This is useful when mounting a new font,
-like so:
-
-@Example
-.fp \n[.fp] NEATOFONT
-@endExample
-
-@pindex DESC@r{, and font mounting}
-Fonts not listed in the @file{DESC} file are automatically mounted on
-the next available font position when they are referenced.  If a font is
-to be mounted explicitly with the @code{fp} request on an unused font
-position, it should be mounted on the first unused font position, which
-can be found in the @code{.fp} register.  Although @code{gtroff} does
-not enforce this strictly, it is not allowed to mount a font at a
-position whose number is much greater (approx.@: 1000 positions) than
-that of any currently used position.
-
-The @code{fp} request has an optional third argument.  This argument
-gives the external name of the font, which is used for finding the font
-description file.  The second argument gives the internal name of the
-font, which is used to refer to the font in @code{gtroff} after it has
-been mounted.  If there is no third argument then the internal name is
-used as the external name.  This feature makes it possible to use fonts
-with long names in compatibility mode.
-@endDefreq
-
-Both the @code{ft} request and the @code{\f} escape have alternative
-syntax forms to access font positions.
-
-@DefreqList {ft, nnn}
-@DefescItemx {\\f, , n, }
-@DefescItem {\\f, @Lparen{}, nn, }
-@DefescListEnd {\\f, @Lbrack{}, nnn, @Rbrack{}}
-@cindex changing font position (@code{\f})
-@cindex font position, changing (@code{\f})
-@cindex @code{sty} request, and font positions
-@cindex @code{fam} request, and font positions
-@cindex @code{\F}, and font positions
-@kindex styles
-@kindex family
-@pindex DESC
-Change the current font position to @var{nnn} (one-digit
-position@tie{}@var{n}, two-digit position @var{nn}), which must be a
-non-negative integer.
-
-If @var{nnn} is associated with a style (as set with the @code{sty}
-request or with the @code{styles} command in the @file{DESC} file), use
-it within the current font family (as set with the @code{fam} request,
-the @code{\F} escape, or with the @code{family} command in the
-@file{DESC} file).
-
-@Example
-this is font 1
-.ft 2
-this is font 2
-.ft                   \" switch back to font 1
-.ft 3
-this is font 3
-.ft
-this is font 1 again
-@endExample
-
-@xref{Changing Fonts}, for the standard syntax form.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Using Symbols, Character Classes, Font Positions, Fonts and Symbols
-@subsection Using Symbols
-@cindex using symbols
-@cindex symbols, using
-
-@cindex glyph
-@cindex character
-@cindex ligature
-A @dfn{glyph} is a graphical representation of a @dfn{character}.  While
-a character is an abstract entity containing semantic information, a
-glyph is something that can be actually seen on screen or paper.  It is
-possible that a character has multiple glyph representation forms (for
-example, the character `A' can be either written in a roman or an italic
-font, yielding two different glyphs); sometimes more than one character
-maps to a single glyph (this is a @dfn{ligature} -- the most common is
-`fi').
-
-@cindex symbol
-@cindex special fonts
-@kindex fonts
-@pindex DESC
-@cindex @code{special} request, and glyph search order
-@cindex @code{fspecial} request, and glyph search order
-A @dfn{symbol} is simply a named glyph.  Within @code{gtroff}, all glyph
-names of a particular font are defined in its font file.  If the user
-requests a glyph not available in this font, @code{gtroff} looks up an
-ordered list of @dfn{special fonts}.  By default, the @sc{PostScript}
-output device supports the two special fonts @samp{SS} (slanted symbols)
-and @samp{S} (symbols) (the former is looked up before the latter).
-Other output devices use different names for special fonts.  Fonts
-mounted with the @code{fonts} keyword in the @file{DESC} file are
-globally available.  To install additional special fonts locally (i.e.@:
-for a particular font), use the @code{fspecial} request.
-
-Here the exact rules how @code{gtroff} searches a given symbol:
-
-@itemize @bullet
-@item
-If the symbol has been defined with the @code{char} request, use it.
-This hides a symbol with the same name in the current font.
-
-@item
-Check the current font.
-
-@item
-If the symbol has been defined with the @code{fchar} request, use it.
-
-@item
-Check whether the current font has a font-specific list of special
-fonts; test all fonts in the order of appearance in the last
-@code{fspecial} call if appropriate.
-
-@item
-If the symbol has been defined with the @code{fschar} request for the
-current font, use it.
-
-@item
-Check all fonts in the order of appearance in the last @code{special}
-call.
-
-@item
-If the symbol has been defined with the @code{schar} request, use it.
-
-@item
-As a last resort, consult all fonts loaded up to now for special fonts
-and check them, starting with the lowest font number.  Note that this
-can sometimes lead to surprising results since the @code{fonts} line in
-the @file{DESC} file often contains empty positions, which are filled
-later on.  For example, consider the following:
-
-@Example
-fonts 3 0 0 FOO
-@endExample
-
-@noindent
-This mounts font @code{foo} at font position@tie{}3.  We assume that
-@code{FOO} is a special font, containing glyph @code{foo}, and that no
-font has been loaded yet.  The line
-
-@Example
-.fspecial BAR BAZ
-@endExample
-
-@noindent
-makes font @code{BAZ} special only if font @code{BAR} is active.  We
-further assume that @code{BAZ} is really a special font, i.e., the font
-description file contains the @code{special} keyword, and that it also
-contains glyph @code{foo} with a special shape fitting to font
-@code{BAR}.  After executing @code{fspecial}, font @code{BAR} is loaded
-at font position@tie{}1, and @code{BAZ} at position@tie{}2.
-
-We now switch to a new font @code{XXX}, trying to access glyph
-@code{foo} that is assumed to be missing.  There are neither
-font-specific special fonts for @code{XXX} nor any other fonts made
-special with the @code{special} request, so @code{gtroff} starts the
-search for special fonts in the list of already mounted fonts, with
-increasing font positions.  Consequently, it finds @code{BAZ} before
-@code{FOO} even for @code{XXX}, which is not the intended behaviour.
-@end itemize
-
-@xref{Font Files}, and @ref{Special Fonts}, for more details.
-
-@cindex list of available glyphs (@cite{groff_char(7)} man page)
-@cindex available glyphs, list (@cite{groff_char(7)} man page)
-@cindex glyphs, available, list (@cite{groff_char(7)} man page)
-The list of available symbols is device dependent; see the
-@cite{groff_char(7)} man page for a complete list of all glyphs.  For
-example, say
-
-@Example
-man -Tdvi groff_char > groff_char.dvi
-@endExample
-
-@noindent
-for a list using the default DVI fonts (not all versions of the
-@code{man} program support the @option{-T} option).  If you want to use
-an additional macro package to change the used fonts, @code{groff} must
-be called directly:
-
-@Example
-groff -Tdvi -mec -man groff_char.7 > groff_char.dvi
-@endExample
-
-@cindex composite glyph names
-@cindex glyph names, composite
-@cindex groff glyph list (GGL)
-@cindex GGL (groff glyph list)
-@cindex adobe glyph list (AGL)
-@cindex AGL (adobe glyph list)
-Glyph names not listed in groff_char(7) are derived algorithmically,
-using a simplified version of the Adobe Glyph List (AGL) algorithm, which
-is described in
-@uref{http://partners.adobe.com@//public@//developer@//opentype@//index_glyph.html}.
-The (frozen) set of glyph names that can't be derived algorithmically
-is called @dfn{groff glyph list (GGL)}.
-
-@itemize @bullet
-@item
-A glyph for Unicode character U+@var{XXXX}[@var{X}[@var{X}]], which is
-not a composite character is named
-@code{u@var{XXXX}@r{[}@var{X}@r{[}@var{X}@r{]]}}.  @var{X} must be an
-uppercase hexadecimal digit.  Examples: @code{u1234}, @code{u008E},
-@code{u12DB8}.  The largest Unicode value is 0x10FFFF.  There must be at
-least four @code{X} digits; if necessary, add leading zeroes (after the
-@samp{u}).  No zero padding is allowed for character codes greater than
-0xFFFF.  Surrogates (i.e., Unicode values greater than 0xFFFF
-represented with character codes from the surrogate area U+D800-U+DFFF)
-are not allowed too.
-
-@item
-A glyph representing more than a single input character is named
-
-@display
-@samp{u} @var{component1} @samp{_} @var{component2} @samp{_} @var{component3} @dots{}
-@end display
-
-@noindent
-Example: @code{u0045_0302_0301}.
-
-For simplicity, all Unicode characters that are composites must be
-decomposed maximally (this is normalization form@tie{}D in the Unicode
-standard); for example, @code{u00CA_0301} is not a valid glyph name
-since U+00CA (@sc{latin capital letter e with circumflex}) can be
-further decomposed into U+0045 (@sc{latin capital letter e}) and U+0302
-(@sc{combining circumflex accent}).  @code{u0045_0302_0301} is thus the
-glyph name for U+1EBE, @sc{latin capital letter e with circumflex and
-acute}.
-
-@item
-groff maintains a table to decompose all algorithmically derived glyph
-names that are composites itself.  For example, @code{u0100} (@sc{latin
-letter a with macron}) is automatically decomposed into
-@code{u0041_0304}.  Additionally, a glyph name of the GGL is preferred
-to an algorithmically derived glyph name; groff also automatically does
-the mapping.  Example: The glyph @code{u0045_0302} is mapped to
-@code{^E}.
-
-@item
-glyph names of the GGL can't be used in composite glyph names; for
-example, @code{^E_u0301} is invalid.
-@end itemize
-
-@DefescList {\\, @Lparen{}, nm, }
-@DefescItem {\\, @Lbrack{}, name, @Rbrack{}}
-@DefescListEnd {\\, @Lbrack{}, component1 component2 @dots{}, @Rbrack{}}
-Insert a symbol @var{name} (two-character name @var{nm}) or a composite
-glyph with component glyphs @var{component1}, @var{component2},
-@enddots{} There is no special syntax for one-character names -- the
-natural form @samp{\@var{n}} would collide with escapes.@footnote{Note
-that a one-character symbol is not the same as an input character, i.e.,
-the character @code{a} is not the same as @code{\[a]}.  By default,
-@code{groff} defines only a single one-character symbol, @code{\[-]}; it
-is usually accessed as @code{\-}.  On the other hand, @code{gtroff} has
-the special feature that @code{\[char@var{XXX}]} is the same as the
-input character with character code @var{XXX}.  For example,
-@code{\[char97]} is identical to the letter @code{a} if @acronym{ASCII}
-encoding is active.}
-
-If @var{name} is undefined, a warning of type @samp{char} is generated,
-and the escape is ignored.  @xref{Debugging}, for information about
-warnings.
-
-groff resolves @code{\[...]} with more than a single component as
-follows:
-
-@itemize @bullet
-@item
-Any component that is found in the GGL is converted to the
-@code{u@var{XXXX}} form.
-
-@item
-Any component @code{u@var{XXXX}} that is found in the list of
-decomposable glyphs is decomposed.
-
-@item
-The resulting elements are then concatenated with @samp{_} in between,
-dropping the leading @samp{u} in all elements but the first.
-@end itemize
-
-No check for the existence of any component (similar to @code{tr}
-request) is done.
-
-Examples:
-
-@table @code
-@item \[A ho]
-@samp{A} maps to @code{u0041}, @samp{ho} maps to @code{u02DB}, thus the
-final glyph name would be @code{u0041_02DB}.  Note this is not the
-expected result: The ogonek glyph @samp{ho} is a spacing ogonek, but for
-a proper composite a non-spacing ogonek (U+0328) is necessary.  Looking
-into the file @file{composite.tmac} one can find @w{@samp{.composite ho
-u0328}}, which changes the mapping of @samp{ho} while a composite glyph
-name is constructed, causing the final glyph name to be
-@code{u0041_0328}.
-
-@item \[^E u0301]
-@itemx \[^E aa]
-@itemx \[E a^ aa]
-@itemx \[E ^ ']
-@samp{^E} maps to @code{u0045_0302}, thus the final glyph name is
-@code{u0045_0302_0301} in all forms (assuming proper calls of the
-@code{composite} request).
-@end table
-
-It is not possible to define glyphs with names like @w{@samp{A ho}}
-within a groff font file.  This is not really a limitation; instead, you
-have to define @code{u0041_0328}.
-@endDefesc
-
-@Defesc {\\C, ', xxx, '}
-@cindex named character (@code{\C})
-@cindex character, named (@code{\C})
-Typeset the glyph named @var{xxx}.@footnote{@code{\C} is actually a
-misnomer since it accesses an output glyph.}  Normally it is more
-convenient to use @code{\[@var{xxx}]}, but @code{\C} has the advantage
-that it is compatible with newer versions of @acronym{AT&T} @code{troff}
-and is available in compatibility mode.
-@endDefesc
-
-@Defreq {composite, from to}
-@pindex composite.tmac
-Map glyph name @var{from} to glyph name @var{to} if it is used in
-@code{\[...]} with more than one component.  See above for examples.
-
-This mapping is based on glyph names only; no check for the existence of
-either glyph is done.
-
-A set of default mappings for many accents can be found in the file
-@file{composite.tmac}, which is loaded at start-up.
-@endDefreq
-
-@Defesc {\\N, ', n, '}
-@cindex numbered glyph (@code{\N})
-@cindex glyph, numbered (@code{\N})
-@cindex @code{char} request, used with @code{\N}
-@cindex Unicode
-Typeset the glyph with code@tie{}@var{n} in the current font
-(@code{n}@tie{}is @strong{not} the input character code).  The number
-@var{n}@tie{}can be any non-negative decimal integer.  Most devices only
-have glyphs with codes between 0 and@tie{}255; the Unicode output device
-uses codes in the range 0--65535.  If the current font does not contain
-a glyph with that code, special fonts are @emph{not} searched.  The
-@code{\N} escape sequence can be conveniently used in conjunction with
-the @code{char} request:
-
-@Example
-.char \[phone] \f[ZD]\N'37'
-@endExample
-
-@noindent
-@pindex DESC
-@cindex unnamed glyphs
-@cindex glyphs, unnamed
-The code of each glyph is given in the fourth column in the font
-description file after the @code{charset} command.  It is possible to
-include unnamed glyphs in the font description file by using a name of
-@samp{---}; the @code{\N} escape sequence is the only way to use these.
-
-No kerning is applied to glyphs accessed with @code{\N}.
-@endDefesc
-
-Some escape sequences directly map onto special glyphs.
-
-@Defesc {\\', , , }
-This is a backslash followed by the apostrophe character,
-@acronym{ASCII} character @code{0x27} (@acronym{EBCDIC} character
-@code{0x7D}).  The same as @code{\[aa]}, the acute accent.
-@endDefesc
-
-@Defesc {\\`, , , }
-This is a backslash followed by @acronym{ASCII} character @code{0x60}
-(@acronym{EBCDIC} character @code{0x79} usually).  The same as
-@code{\[ga]}, the grave accent.
-@endDefesc
-
-@Defesc {\\-, , , }
-This is the same as @code{\[-]}, the minus sign in the current font.
-@endDefesc
-
-@Defesc {\\_, , , }
-This is the same as @code{\[ul]}, the underline character.
-@endDefesc
-
-@Defreq {cflags, n c1 c2 @dots{}}
-@cindex glyph properties (@code{cflags})
-@cindex character properties (@code{cflags})
-@cindex properties of glyphs (@code{cflags})
-@cindex properties of characters (@code{cflags})
-Input characters and symbols have certain properties associated with
-it.@footnote{Note that the output glyphs themselves don't have such
-properties.  For @code{gtroff}, a glyph is a numbered box with a given
-width, depth, and height, nothing else.  All manipulations with the
-@code{cflags} request work on the input level.}  These properties can be
-modified with the @code{cflags} request.  The first argument is the sum
-of the desired flags and the remaining arguments are the characters or
-symbols to have those properties.  It is possible to omit the spaces
-between the characters or symbols.  Instead of single characters or
-symbols you can also use character classes (see @ref{Character Classes}
-for more details).
-
-@table @code
-@item 1
-@cindex end-of-sentence characters
-@cindex characters, end-of-sentence
-The character ends sentences (initially characters @samp{.?!} have this
-property).
-
-@item 2
-@cindex hyphenating characters
-@cindex characters, hyphenation
-Lines can be broken before the character (initially no characters have
-this property).  This only works if both the characters before and after
-have non-zero hyphenation codes (as set with the @code{hcode} request).
-Use value@tie{}64 to override this behaviour.
-
-@item 4
-@cindex @code{hy} glyph, and @code{cflags}
-@cindex @code{em} glyph, and @code{cflags}
-Lines can be broken after the character (initially the character
-@samp{-} and the symbols @samp{\[hy]} and @samp{\[em]} have this
-property).  This only works if both the characters before and after have
-non-zero hyphenation codes (as set with the @code{hcode} request).  Use
-value@tie{}64 to override this behaviour.
-
-@item 8
-@cindex overlapping characters
-@cindex characters, overlapping
-@cindex @code{ul} glyph, and @code{cflags}
-@cindex @code{rn} glyph, and @code{cflags}
-@cindex @code{ru} glyph, and @code{cflags}
-@cindex @code{radicalex} glyph, and @code{cflags}
-@cindex @code{sqrtex} glyph, and @code{cflags}
-The character overlaps horizontally if used as a horizontal line
-building element.  Initially the symbols @samp{\[ul]}, @samp{\[rn]},
-@samp{\[ru]}, @samp{\[radicalex]}, and @samp{\[sqrtex]} have this
-property.
-
-@item 16
-@cindex @code{br} glyph, and @code{cflags}
-The character overlaps vertically if used as vertical line building
-element.  Initially symbol @samp{\[br]} has this property.
-
-@item 32
-@cindex transparent characters
-@cindex character, transparent
-@cindex @code{"}, at end of sentence
-@cindex @code{'}, at end of sentence
-@cindex @code{)}, at end of sentence
-@cindex @code{]}, at end of sentence
-@cindex @code{*}, at end of sentence
-@cindex @code{dg} glyph, at end of sentence
-@cindex @code{rq} glyph, at end of sentence
-@cindex @code{cq} glyph, at end of sentence
-An end-of-sentence character followed by any number of characters with
-this property is treated as the end of a sentence if followed by a
-newline or two spaces; in other words the character is @dfn{transparent}
-for the purposes of end-of-sentence recognition -- this is the same as
-having a zero space factor in @TeX{} (initially characters @samp{"')]*}
-and the symbols @samp{\[dg]}, @samp{\[rq]}, and @samp{\[cq]} have this
-property).
-
-@item 64
-Ignore hyphenation code values of the surrounding characters.  Use this
-in combination with values 2 and@tie{}4 (initially no characters have
-this property).  For example, if you need an automatic break point after
-the hyphen in number ranges like `3000-5000', insert
-
-@Example
-.cflags 68 -
-@endExample
-
-@noindent
-into your document.  Note, however, that this can lead to bad layout if
-done without thinking; in most situations, a better solution instead of
-changing the @code{cflags} value is to insert @code{\:} right after the
-hyphen at the places that really need a break point.
-
-@item 128
-Prohibit a line break before the character, but allow a line break after
-the character.  This works only in combination with flags 256 and 512
-(see below) and has no effect otherwise.
-
-@item 256
-Prohibit a line break after the character, but allow a line break before
-the character.  This works only in combination with flags 128 and 512
-(see below) and has no effect otherwise.
-
-@item 512
-Allow line break before or after the character.  This works only in
-combination with flags 128 and 256 and has no effect otherwise.
-
-Contrary to flag values 2 and@tie{}4, the flags 128, 256, and 512 work
-pairwise.  If, for example, the left character has value 512, and the
-right character 128, no line break gets inserted.  If we use
-value@tie{}6 instead for the left character, a line break after the
-character can't be suppressed since the right neighbour character
-doesn't get examined.
-@end table
-@endDefreq
-
-@DefreqList {char, g [@Var{string}]}
-@DefreqItemx {fchar, g [@Var{string}]}
-@DefreqItemx {fschar, f g [@Var{string}]}
-@DefreqListEndx {schar, g [@Var{string}]}
-@cindex defining character (@code{char})
-@cindex defining fallback character (@code{fchar}, @code{fschar}, @code{schar})
-@cindex character, defining (@code{char})
-@cindex character, defining fallback (@code{fchar}, @code{fschar}, @code{schar})
-@cindex fallback character, defining (@code{fchar}, @code{fschar}, @code{schar})
-@cindex creating new characters (@code{char})
-@cindex defining symbol (@code{char})
-@cindex symbol, defining (@code{char})
-@cindex defining glyph (@code{char})
-@cindex glyph, defining (@code{char})
-@cindex escape character, while defining glyph
-@cindex character, escape, while defining glyph
-@cindex @code{tr} request, and glyph definitions
-@cindex @code{cp} request, and glyph definitions
-@cindex @code{rc} request, and glyph definitions
-@cindex @code{lc} request, and glyph definitions
-@cindex @code{\l}, and glyph definitions
-@cindex @code{\L}, and glyph definitions
-@cindex @code{\&}, and glyph definitions
-@cindex @code{\e}, and glyph definitions
-@cindex @code{hcode} request, and glyph definitions
-Define a new glyph@tie{}@var{g} to be @var{string} (which can be
-empty).@footnote{@code{char} is a misnomer since an output glyph is
-defined.}  Every time glyph@tie{}@var{g} needs to be printed,
-@var{string} is processed in a temporary environment and the result is
-wrapped up into a single object.  Compatibility mode is turned off and
-the escape character is set to @samp{\} while @var{string} is being
-processed.  Any emboldening, constant spacing or track kerning is
-applied to this object rather than to individual characters in
-@var{string}.
-
-A glyph defined by these requests can be used just like a normal glyph
-provided by the output device.  In particular, other characters can be
-translated to it with the @code{tr} or @code{trin} requests; it can be
-made the leader character by the @code{lc} request; repeated patterns
-can be drawn with the glyph using the @code{\l} and @code{\L} escape
-sequences; words containing the glyph can be hyphenated correctly if the
-@code{hcode} request is used to give the glyph's symbol a hyphenation
-code.
-
-There is a special anti-recursion feature: Use of @code{g} within the
-glyph's definition is handled like normal characters and symbols not
-defined with @code{char}.
-
-Note that the @code{tr} and @code{trin} requests take precedence if
-@code{char} accesses the same symbol.
-
-@Example
-.tr XY
-X
-    @result{} Y
-.char X Z
-X
-    @result{} Y
-.tr XX
-X
-    @result{} Z
-@endExample
-
-The @code{fchar} request defines a fallback glyph: @code{gtroff} only
-checks for glyphs defined with @code{fchar} if it cannot find the glyph
-in the current font.  @code{gtroff} carries out this test before
-checking special fonts.
-
-@code{fschar} defines a fallback glyph for font@tie{}@var{f}:
-@code{gtroff} checks for glyphs defined with @code{fschar} after the
-list of fonts declared as font-specific special fonts with the
-@code{fspecial} request, but before the list of fonts declared as global
-special fonts with the @code{special} request.
-
-Finally, the @code{schar} request defines a global fallback glyph:
-@code{gtroff} checks for glyphs defined with @code{schar} after the list
-of fonts declared as global special fonts with the @code{special}
-request, but before the already mounted special fonts.
-
-@xref{Using Symbols}, for a detailed description of the glyph searching
-mechanism in @code{gtroff}.
-@endDefreq
-
-@DefreqList {rchar, c1 c2 @dots{}}
-@DefreqListEndx {rfschar, f c1 c2 @dots{}}
-@cindex removing glyph definition (@code{rchar}, @code{rfschar})
-@cindex glyph, removing definition (@code{rchar}, @code{rfschar})
-@cindex fallback glyph, removing definition (@code{rchar}, @code{rfschar})
-Remove the definitions of glyphs @var{c1}, @var{c2},@tie{}@enddots{}
-This undoes the effect of a @code{char}, @code{fchar}, or @code{schar}
-request.
-
-It is possible to omit the whitespace between arguments.
-
-The request @code{rfschar} removes glyph definitions defined with
-@code{fschar} for glyph@tie{}f.
-@endDefreq
-
-@xref{Special Characters}.
-
-@c ---------------------------------------------------------------------
-
-@node Character Classes, Special Fonts, Using Symbols, Fonts and Symbols
-@subsection Character Classes
-@cindex character classes
-@cindex classes, character
-
-Classes are particularly useful for East Asian languages such as
-Chinese, Japanese, and Korean, where the number of needed characters is
-much larger than in European languages, and where large sets of
-characters share the same properties.
-
-@Defreq {class, n c1 c2 @dots{}}
-@cindex character class (@code{class})
-@cindex defining character class (@code{class})
-@cindex class of characters (@code{class})
-In @code{groff}, a @dfn{character class} (or simply ``class'') is a set
-of characters, grouped by some user aspect.  The @code{class} request
-defines such classes so that other requests can refer to all characters
-belonging to this set with a single class name.  Currently, only the
-@code{cflags} request can handle character classes.
-
-A @code{class} request takes a class name followed by a list of
-entities.  In its simplest form, the entities are characters or symbols:
-
-@Example
-.class [prepunct] , : ; > @}
-@endExample
-
-Since class and glyph names share the same namespace, it is recommended
-to start and end the class name with @code{[} and @code{]},
-respectively, to avoid collisions with normal @code{groff} symbols (and
-symbols defined by the user).  In particular, the presence of @code{]}
-in the symbol name intentionally prevents the usage of @code{\[...]},
-thus you must use the @code{\C} escape to access a class with such a
-name.
-
-@cindex GGL (groff glyph list)
-@cindex groff glyph list (GGL)
-You can also use a special character range notation, consisting of a
-start character or symbol, followed by @samp{-}, and an end character or
-symbol.  Internally, @code{gtroff} converts these two symbol names to
-Unicode values (according to the groff glyph gist), which then give the
-start and end value of the range.  If that fails, the class definition
-is skipped.
-
-Finally, classes can be nested, too.
-
-Here is a more complex example:
-
-@Example
-.class [prepunctx] \C'[prepunct]' \[u2013]-\[u2016]
-@endExample
-
-The class @samp{prepunctx} now contains the contents of the class
-@code{prepunct} as defined above (the set @samp{, : ; > @}}), and
-characters in the range between @code{U+2013} and @code{U+2016}.
-
-If you want to add @samp{-} to a class, it must be the first character
-value in the argument list, otherwise it gets misinterpreted as a range.
-
-Note that it is not possible to use class names within range
-definitions.
-
-Typical use of the @code{class} request is to control line-breaking and
-hyphenation rules as defined by the @code{cflags} request.  For example,
-to inhibit line breaks before the characters belonging to the
-@code{prepunctx} class, you can write:
-
-@Example
-.cflags 2 \C'[prepunctx]'
-@endExample
-
-See the @code{cflags} request in @ref{Using Symbols}, for more details.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Special Fonts, Artificial Fonts, Character Classes, Fonts and Symbols
-@subsection Special Fonts
-@cindex special fonts
-@cindex fonts, special
-
-Special fonts are those that @code{gtroff} searches when it cannot find
-the requested glyph in the current font.  The Symbol font is usually a
-special font.
-
-@code{gtroff} provides the following two requests to add more special
-fonts.  @xref{Using Symbols}, for a detailed description of the glyph
-searching mechanism in @code{gtroff}.
-
-Usually, only non-TTY devices have special fonts.
-
-@DefreqList {special, [@Var{s1} @Var{s2} @dots{}]}
-@DefreqListEndx {fspecial, f [@Var{s1} @Var{s2} @dots{}]}
-@kindex fonts
-@pindex DESC
-Use the @code{special} request to define special fonts.  Initially, this
-list is empty.
-
-Use the @code{fspecial} request to designate special fonts only when
-font@tie{}@var{f} is active.  Initially, this list is empty.
-
-Previous calls to @code{special} or @code{fspecial} are overwritten;
-without arguments, the particular list of special fonts is set to empty.
-Special fonts are searched in the order they appear as arguments.
-
-All fonts that appear in a call to @code{special} or @code{fspecial}
-are loaded.
-
-@xref{Using Symbols}, for the exact search order of glyphs.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Artificial Fonts, Ligatures and Kerning, Special Fonts, Fonts and Symbols
-@subsection Artificial Fonts
-@cindex artificial fonts
-@cindex fonts, artificial
-
-There are a number of requests and escapes for artificially creating
-fonts.  These are largely vestiges of the days when output devices did
-not have a wide variety of fonts, and when @code{nroff} and @code{troff}
-were separate programs.  Most of them are no longer necessary in GNU
-@code{troff}.  Nevertheless, they are supported.
-
-@DefescList {\\H, ', height, '}
-@DefescItem {\\H, ', @t{+}height, '}
-@DefescItem {\\H, ', @t{-}height, '}
-@DefregListEndx {.height}
-@cindex changing the font height (@code{\H})
-@cindex font height, changing (@code{\H})
-@cindex height, font, changing (@code{\H})
-Change (increment, decrement) the height of the current font, but not
-the width.  If @var{height} is zero, restore the original height.
-Default scaling indicator is @samp{z}.
-
-The read-only number register @code{.height} contains the font height as
-set by @code{\H}.
-
-Currently, only the @option{-Tps} and @option{-Tpdf} devices support
-this feature.
-
-Note that @code{\H} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the font on the fly:
-
-@Example
-.mc \H'+5z'x\H'0'
-@endExample
-
-In compatibility mode, @code{gtroff} behaves differently: If an
-increment or decrement is used, it is always taken relative to the
-current point size and not relative to the previously selected font
-height.  Thus,
-
-@Example
-.cp 1
-\H'+5'test \H'+5'test
-@endExample
-
-@noindent
-prints the word @samp{test} twice with the same font height (five points
-larger than the current font size).
-@endDefesc
-
-@DefescList {\\S, ', slant, '}
-@DefregListEndx {.slant}
-@cindex changing the font slant (@code{\S})
-@cindex font slant, changing (@code{\S})
-@cindex slant, font, changing (@code{\S})
-Slant the current font by @var{slant} degrees.  Positive values slant to
-the right.  Only integer values are possible.
-
-The read-only number register @code{.slant} contains the font slant as
-set by @code{\S}.
-
-Currently, only the @option{-Tps} and @option{-Tpdf} devices support
-this feature.
-
-Note that @code{\S} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the font on the fly:
-
-@Example
-.mc \S'20'x\S'0'
-@endExample
-
-This request is incorrectly documented in the original @acronym{UNIX}
-troff manual; the slant is always set to an absolute value.
-@endDefesc
-
-@Defreq {ul, [@Var{lines}]}
-@cindex underlining (@code{ul})
-The @code{ul} request normally underlines subsequent lines if a TTY
-output device is used.  Otherwise, the lines are printed in italics
-(only the term `underlined' is used in the following).  The single
-argument is the number of input lines to be underlined; with no
-argument, the next line is underlined.  If @var{lines} is zero or
-negative, stop the effects of @code{ul} (if it was active).  Requests
-and empty lines do not count for computing the number of underlined
-input lines, even if they produce some output like @code{tl}.  Lines
-inserted by macros (e.g.@: invoked by a trap) do count.
-
-At the beginning of @code{ul}, the current font is stored and the
-underline font is activated.  Within the span of a @code{ul} request, it
-is possible to change fonts, but after the last line affected by
-@code{ul} the saved font is restored.
-
-This number of lines still to be underlined is associated with the
-current environment (@pxref{Environments}).  The underline font can be
-changed with the @code{uf} request.
-
-@c XXX @xref should be changed to grotty
-
-@c @xref{Troff and Nroff Mode}, for a discussion how underlining is
-@c implemented in for TTY output devices, and which problems can arise.
-
-The @code{ul} request does not underline spaces.
-@endDefreq
-
-@Defreq {cu, [@Var{lines}]}
-@cindex continuous underlining (@code{cu})
-@cindex underlining, continuous (@code{cu})
-The @code{cu} request is similar to @code{ul} but underlines spaces as
-well (if a TTY output device is used).
-@endDefreq
-
-@Defreq {uf, font}
-@cindex underline font (@code{uf})
-@cindex font for underlining (@code{uf})
-Set the underline font (globally) used by @code{ul} and @code{cu}.  By
-default, this is the font at position@tie{}2.  @var{font} can be either
-a non-negative font position or the name of a font.
-@endDefreq
-
-@DefreqList {bd, font [@Var{offset}]}
-@DefreqItem {bd, font1 font2 [@Var{offset}]}
-@DefregListEndx {.b}
-@cindex imitating bold face (@code{bd})
-@cindex bold face, imitating (@code{bd})
-Artificially create a bold font by printing each glyph twice, slightly
-offset.
-
-Two syntax forms are available.
-
-@itemize @bullet
-@item
-Imitate a bold font unconditionally.  The first argument specifies the
-font to embolden, and the second is the number of basic units, minus
-one, by which the two glyphs are offset.  If the second argument is
-missing, emboldening is turned off.
-
-@var{font} can be either a non-negative font position or the name of a
-font.
-
-@var{offset} is available in the @code{.b} read-only register if a
-special font is active; in the @code{bd} request, its default unit is
-@samp{u}.
-
-@cindex @code{fspecial} request, and imitating bold
-@kindex special
-@cindex embolding of special fonts
-@cindex special fonts, emboldening
-@item
-Imitate a bold form conditionally.  Embolden @var{font1} by @var{offset}
-only if font @var{font2} is the current font.  This command can be
-issued repeatedly to set up different emboldening values for different
-current fonts.  If the second argument is missing, emboldening is turned
-off for this particular current font.
-
-This affects special fonts only (either set up with the @code{special}
-command in font files or with the @code{fspecial} request).
-@end itemize
-@endDefreq
-
-@Defreq {cs, font [@Var{width} [@Var{em-size}]]}
-@cindex constant glyph space mode (@code{cs})
-@cindex mode for constant glyph space (@code{cs})
-@cindex glyph, constant space
-@cindex @code{ps} request, and constant glyph space mode
-Switch to and from @dfn{constant glyph space mode}.  If activated, the
-width of every glyph is @math{@var{width}/36} ems.  The em size is given
-absolutely by @var{em-size}; if this argument is missing, the em value
-is taken from the current font size (as set with the @code{ps} request)
-when the font is effectively in use.  Without second and third argument,
-constant glyph space mode is deactivated.
-
-Default scaling indicator for @var{em-size} is @samp{z}; @var{width} is
-an integer.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Ligatures and Kerning,  , Artificial Fonts, Fonts and Symbols
-@subsection Ligatures and Kerning
-@cindex ligatures and kerning
-@cindex kerning and ligatures
-
-Ligatures are groups of characters that are run together, i.e, producing
-a single glyph.  For example, the letters `f' and `i' can form a
-ligature `fi' as in the word `file'.  This produces a cleaner look
-(albeit subtle) to the printed output.  Usually, ligatures are not
-available in fonts for TTY output devices.
-
-Most @sc{PostScript} fonts support the fi and fl ligatures.  The C/A/T
-typesetter that was the target of @acronym{AT&T} @code{troff} also
-supported `ff', `ffi', and `ffl' ligatures.  Advanced typesetters or
-`expert' fonts may include ligatures for `ft' and `ct', although GNU
-@code{troff} does not support these (yet).
-
-Only the current font is checked for ligatures and kerns; neither
-special fonts nor entities defined with the @code{char} request (and its
-siblings) are taken into account.
-
-@DefreqList {lg, [@Var{flag}]}
-@DefregListEndx {.lg}
-@cindex activating ligatures (@code{lg})
-@cindex ligatures, activating (@code{lg})
-@cindex ligatures enabled register (@code{.lg})
-Switch the ligature mechanism on or off; if the parameter is non-zero or
-missing, ligatures are enabled, otherwise disabled.  Default is on.  The
-current ligature mode can be found in the read-only number register
-@code{.lg} (set to 1 or@tie{}2 if ligatures are enabled,
-0@tie{}otherwise).
-
-Setting the ligature mode to@tie{}2 enables the two-character ligatures
-(fi, fl, and ff) and disables the three-character ligatures (ffi and
-ffl).
-@endDefreq
-
-@dfn{Pairwise kerning} is another subtle typesetting mechanism that
-modifies the distance between a glyph pair to improve readability.  In
-most cases (but not always) the distance is decreased.
-@iftex
-For example, compare the combination of the letters `V' and `A'.  With
-kerning, `VA' is printed.  Without kerning it appears as `V@w{}A'.
-@end iftex
-Typewriter-like fonts and fonts for terminals where all glyphs have the
-same width don't use kerning.
-
-@DefreqList {kern, [@Var{flag}]}
-@DefregListEndx {.kern}
-@cindex activating kerning (@code{kern})
-@cindex kerning, activating (@code{kern})
-@cindex kerning enabled register (@code{.kern})
-Switch kerning on or off.  If the parameter is non-zero or missing,
-enable pairwise kerning, otherwise disable it.  The read-only number
-register @code{.kern} is set to@tie{}1 if pairwise kerning is enabled,
-0@tie{}otherwise.
-
-@cindex zero width space character (@code{\&})
-@cindex character, zero width space (@code{\&})
-@cindex space character, zero width (@code{\&})
-If the font description file contains pairwise kerning information,
-glyphs from that font are kerned.  Kerning between two glyphs can be
-inhibited by placing @code{\&} between them: @samp{V\&A}.
-
-@xref{Font File Format}.
-@endDefreq
-
-@cindex track kerning
-@cindex kerning, track
-@dfn{Track kerning} expands or reduces the space between glyphs.  This
-can be handy, for example, if you need to squeeze a long word onto a
-single line or spread some text to fill a narrow column.  It must be
-used with great care since it is usually considered bad typography if
-the reader notices the effect.
-
-@Defreq {tkf, f s1 n1 s2 n2}
-@cindex activating track kerning (@code{tkf})
-@cindex track kerning, activating (@code{tkf})
-Enable track kerning for font@tie{}@var{f}.  If the current font
-is@tie{}@var{f} the width of every glyph is increased by an amount
-between @var{n1} and @var{n2} (@var{n1}, @var{n2} can be negative); if
-the current point size is less than or equal to @var{s1} the width is
-increased by @var{n1}; if it is greater than or equal to @var{s2} the
-width is increased by @var{n2}; if the point size is greater than or
-equal to @var{s1} and less than or equal to @var{s2} the increase in
-width is a linear function of the point size.
-
-The default scaling indicator is @samp{z} for @var{s1} and @var{s2},
-@samp{p} for @var{n1} and @var{n2}.
-
-Note that the track kerning amount is added even to the rightmost glyph
-in a line; for large values it is thus recommended to increase the line
-length by the same amount to compensate it.
-@endDefreq
-
-Sometimes, when typesetting letters of different fonts, more or less
-space at such boundaries are needed.  There are two escapes to help with
-this.
-
-@Defesc {\\/, , , }
-@cindex italic correction (@code{\/})
-@cindex correction, italic (@code{\/})
-@cindex correction between italic and roman glyph (@code{\/}, @code{\,})
-@cindex roman glyph, correction after italic glyph (@code{\/})
-@cindex italic glyph, correction before roman glyph (@code{\/})
-@cindex glyph, italic correction (@code{\/})
-Increase the width of the preceding glyph so that the spacing between
-that glyph and the following glyph is correct if the following glyph is
-a roman glyph.  For example, if an italic@tie{}@code{f} is immediately
-followed by a roman right parenthesis, then in many fonts the top right
-portion of the@tie{}@code{f} overlaps the top left of the right
-parenthesis.  Use this escape sequence whenever an italic glyph is
-immediately followed by a roman glyph without any intervening space.
-This small amount of space is also called @dfn{italic correction}.
-
-@iftex
-@c can't use @Example...@endExample here
-@example
-@group
-\f[I]f\f[R])
-    @result{} {@it f}@r{)}
-\f[I]f\/\f[R])
-    @result{} @i{f}@r{)}
-@end group
-@end example
-@end iftex
-@endDefesc
-
-@Defesc {\\\,, , , }
-@cindex left italic correction (@code{\,})
-@cindex correction, left italic (@code{\,})
-@cindex glyph, left italic correction (@code{\,})
-@cindex roman glyph, correction before italic glyph (@code{\,})
-@cindex italic glyph, correction after roman glyph (@code{\,})
-Modify the spacing of the following glyph so that the spacing between
-that glyph and the preceding glyph is correct if the preceding glyph is
-a roman glyph.  Use this escape sequence whenever a roman glyph is
-immediately followed by an italic glyph without any intervening space.
-In analogy to above, this space could be called @dfn{left italic
-correction}, but this term isn't used widely.
-
-@iftex
-@c can't use @Example...@endExample here
-@example
-@group
-q\f[I]f
-    @result{} @r{q}@i{f}
-q\,\f[I]f
-    @result{} @r{q}@math{@ptexcomma}@i{f}
-@end group
-@end example
-@end iftex
-@endDefesc
-
-@Defesc {\\&, , , }
-Insert a zero-width character, which is invisible.  Its intended use is
-to stop interaction of a character with its surrounding.
-
-@itemize @bullet
-@item
-It prevents the insertion of extra space after an end-of-sentence
-character.
-
-@Example
-Test.
-Test.
-    @result{} Test.  Test.
-Test.\&
-Test.
-    @result{} Test. Test.
-@endExample
-
-@item
-It prevents interpretation of a control character at the beginning of an
-input line.
-
-@Example
-.Test
-    @result{} warning: `Test' not defined
-\&.Test
-    @result{} .Test
-@endExample
-
-@item
-It prevents kerning between two glyphs.
-
-@iftex
-@c can't use @Example...@endExample here
-@example
-@group
-VA
-    @result{} @r{VA}
-V\&A
-    @result{} @r{V@w{}A}
-@end group
-@end example
-@end iftex
-
-@item
-It is needed to map an arbitrary character to nothing in the @code{tr}
-request (@pxref{Character Translations}).
-@end itemize
-@endDefesc
-
-@Defesc {\\), , , }
-This escape is similar to @code{\&} except that it behaves like a
-character declared with the @code{cflags} request to be transparent for
-the purposes of an end-of-sentence character.
-
-Its main usage is in macro definitions to protect against arguments
-starting with a control character.
-
-@Example
-.de xxx
-\)\\$1
-..
-.de yyy
-\&\\$1
-..
-This is a test.\c
-.xxx '
-This is a test.
-    @result{}This is a test.'  This is a test.
-This is a test.\c
-.yyy '
-This is a test.
-    @result{}This is a test.' This is a test.
-@endExample
-@endDefesc
-
-
-@c =====================================================================
-
-@node Sizes, Strings, Fonts and Symbols, gtroff Reference
-@section Sizes
-@cindex sizes
-
-@cindex baseline
-@cindex type size
-@cindex size of type
-@cindex vertical spacing
-@cindex spacing, vertical
-@code{gtroff} uses two dimensions with each line of text, type size and
-vertical spacing.  The @dfn{type size} is approximately the height of
-the tallest glyph.@footnote{This is usually the parenthesis.  Note that
-in most cases the real dimensions of the glyphs in a font are @emph{not}
-related to its type size!  For example, the standard @sc{PostScript}
-font families `Times Roman', `Helvetica', and `Courier' can't be used
-together at 10@dmn{pt}; to get acceptable output, the size of
-`Helvetica' has to be reduced by one point, and the size of `Courier'
-must be increased by one point.}  @dfn{Vertical spacing} is the amount
-of space @code{gtroff} allows for a line of text; normally, this is
-about 20%@tie{}larger than the current type size.  Ratios smaller than
-this can result in hard-to-read text; larger than this, it spreads the
-text out more vertically (useful for term papers).  By default,
-@code{gtroff} uses 10@tie{}point type on 12@tie{}point spacing.
-
-@cindex leading
-The difference between type size and vertical spacing is known, by
-typesetters, as @dfn{leading} (this is pronounced `ledding').
-
-@menu
-* Changing Type Sizes::
-* Fractional Type Sizes::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Changing Type Sizes, Fractional Type Sizes, Sizes, Sizes
-@subsection Changing Type Sizes
-
-@DefreqList {ps, [@Var{size}]}
-@DefreqItem {ps, @t{+}@Var{size}}
-@DefreqItem {ps, @t{-}@Var{size}}
-@DefescItemx {\\s, , size, }
-@DefregListEndx {.s}
-@cindex changing type sizes (@code{ps}, @code{\s})
-@cindex type sizes, changing (@code{ps}, @code{\s})
-@cindex point sizes, changing (@code{ps}, @code{\s})
-Use the @code{ps} request or the @code{\s} escape to change (increase,
-decrease) the type size (in points).  Specify @var{size} as either an
-absolute point size, or as a relative change from the current size.  The
-size@tie{}0 (for both @code{.ps} and @code{\s}), or no argument (for
-@code{.ps} only), goes back to the previous size.
-
-Default scaling indicator of @code{size} is @samp{z}.  If @code{size} is
-negative, it is set to 1@dmn{u}.
-
-@cindex type size registers (@code{.s}, @code{.ps})
-@cindex point size registers (@code{.s}, @code{.ps})
-The read-only number register @code{.s} returns the point size in points
-as a decimal fraction.  This is a string.  To get the point size in
-scaled points, use the @code{.ps} register instead.
-
-@code{.s} is associated with the current environment
-(@pxref{Environments}).
-
-@Example
-snap, snap,
-.ps +2
-grin, grin,
-.ps +2
-wink, wink, \s+2nudge, nudge,\s+8 say no more!
-.ps 10
-@endExample
-
-The @code{\s} escape may be called in a variety of ways.  Much like
-other escapes there must be a way to determine where the argument ends
-and the text begins.  Any of the following forms are valid:
-
-@table @code
-@item \s@var{n}
-Set the point size to @var{n}@tie{}points.  @var{n}@tie{}must be either
-0 or in the range 4 to@tie{}39.
-
-@item \s+@var{n}
-@itemx \s-@var{n}
-Increase or decrease the point size by @var{n}@tie{}points.
-@var{n}@tie{}must be exactly one digit.
-
-@item \s(@var{nn}
-Set the point size to @var{nn}@tie{}points.  @var{nn} must be exactly
-two digits.
-
-@item \s+(@var{nn}
-@itemx \s-(@var{nn}
-@itemx \s(+@var{nn}
-@itemx \s(-@var{nn}
-Increase or decrease the point size by @var{nn}@tie{}points.  @var{nn}
-must be exactly two digits.
-@end table
-
-Note that @code{\s} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the font on the fly:
-
-@Example
-.mc \s[20]x\s[0]
-@endExample
-
-@xref{Fractional Type Sizes}, for yet another syntactical form of using
-the @code{\s} escape.
-@endDefreq
-
-@Defreq {sizes, s1 s2 @dots{} sn [0]}
-Some devices may only have certain permissible sizes, in which case
-@code{gtroff} rounds to the nearest permissible size.  The @file{DESC}
-file specifies which sizes are permissible for the device.
-
-Use the @code{sizes} request to change the permissible sizes for the
-current output device.  Arguments are in scaled points; the
-@code{sizescale} line in the @file{DESC} file for the output device
-provides the scaling factor.  For example, if the scaling factor is
-1000, then the value 12000 is 12@tie{}points.
-
-Each argument can be a single point size (such as @samp{12000}), or a
-range of sizes (such as @samp{4000-72000}).  You can optionally end the
-list with a zero.
-@endDefreq
-
-@DefreqList {vs, [@Var{space}]}
-@DefreqItem {vs, @t{+}@Var{space}}
-@DefreqItem {vs, @t{-}@Var{space}}
-@DefregListEndx {.v}
-@cindex changing vertical line spacing (@code{vs})
-@cindex vertical line spacing, changing (@code{vs})
-@cindex vertical line spacing register (@code{.v})
-Change (increase, decrease) the vertical spacing by @var{space}.  The
-default scaling indicator is @samp{p}.
-
-If @code{vs} is called without an argument, the vertical spacing is
-reset to the previous value before the last call to @code{vs}.
-
-@cindex @code{.V} register, and @code{vs}
-@code{gtroff} creates a warning of type @samp{range} if @var{space} is
-negative; the vertical spacing is then set to smallest positive value,
-the vertical resolution (as given in the @code{.V} register).
-
-Note that @w{@samp{.vs 0}} isn't saved in a diversion since it doesn't
-result in a vertical motion.  You explicitly have to repeat this command
-before inserting the diversion.
-
-The read-only number register @code{.v} contains the current vertical
-spacing; it is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@cindex vertical line spacing, effective value
-The effective vertical line spacing consists of four components.
-Breaking a line causes the following actions (in the given order).
-
-@itemize @bullet
-@item
-@cindex extra pre-vertical line space (@code{\x})
-@cindex line space, extra pre-vertical (@code{\x})
-Move the current point vertically by the @dfn{extra pre-vertical line
-space}.  This is the minimum value of all @code{\x} escapes with a
-negative argument in the current output line.
-
-@item
-Move the current point vertically by the vertical line spacing as set
-with the @code{vs} request.
-
-@item
-Output the current line.
-
-@item
-@cindex extra post-vertical line space (@code{\x})
-@cindex line space, extra post-vertical (@code{\x})
-Move the current point vertically by the @dfn{extra post-vertical line
-space}.  This is the maximum value of all @code{\x} escapes with a
-positive argument in the line that has just been output.
-
-@item
-@cindex post-vertical line spacing
-@cindex line spacing, post-vertical (@code{pvs})
-Move the current point vertically by the @dfn{post-vertical line
-spacing} as set with the @code{pvs} request.
-@end itemize
-
-@cindex double-spacing (@code{vs}, @code{pvs})
-It is usually better to use @code{vs} or @code{pvs} instead of @code{ls}
-to produce double-spaced documents: @code{vs} and @code{pvs} have a
-finer granularity for the inserted vertical space compared to @code{ls};
-furthermore, certain preprocessors assume single-spacing.
-
-@xref{Manipulating Spacing}, for more details on the @code{\x} escape
-and the @code{ls} request.
-
-@DefreqList {pvs, [@Var{space}]}
-@DefreqItem {pvs, @t{+}@Var{space}}
-@DefreqItem {pvs, @t{-}@Var{space}}
-@DefregListEndx {.pvs}
-@cindex @code{ls} request, alternative to (@code{pvs})
-@cindex post-vertical line spacing, changing (@code{pvs})
-@cindex post-vertical line spacing register (@code{.pvs})
-Change (increase, decrease) the post-vertical spacing by @var{space}.
-The default scaling indicator is @samp{p}.
-
-If @code{pvs} is called without an argument, the post-vertical spacing
-is reset to the previous value before the last call to @code{pvs}.
-
-@code{gtroff} creates a warning of type @samp{range} if @var{space} is
-zero or negative; the vertical spacing is then set to zero.
-
-The read-only number register @code{.pvs} contains the current
-post-vertical spacing; it is associated with the current environment
-(@pxref{Environments}).
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Fractional Type Sizes,  , Changing Type Sizes, Sizes
-@subsection Fractional Type Sizes
-@cindex fractional type sizes
-@cindex fractional point sizes
-@cindex type sizes, fractional
-@cindex point sizes, fractional
-@cindex sizes, fractional
-
-@cindex @code{s} unit
-@cindex unit, @code{s}
-@cindex @code{z} unit
-@cindex unit, @code{z}
-@cindex @code{ps} request, with fractional type sizes
-@cindex @code{cs} request, with fractional type sizes
-@cindex @code{tkf} request, with fractional type sizes
-@cindex @code{\H}, with fractional type sizes
-@cindex @code{\s}, with fractional type sizes
-A @dfn{scaled point} is equal to @math{1/@var{sizescale}} points, where
-@var{sizescale} is specified in the @file{DESC} file (1@tie{}by
-default).  There is a new scale indicator @samp{z}, which has the effect
-of multiplying by @var{sizescale}.  Requests and escape sequences in
-@code{gtroff} interpret arguments that represent a point size as being
-in units of scaled points, but they evaluate each such argument using a
-default scale indicator of @samp{z}.  Arguments treated in this way are
-the argument to the @code{ps} request, the third argument to the
-@code{cs} request, the second and fourth arguments to the @code{tkf}
-request, the argument to the @code{\H} escape sequence, and those
-variants of the @code{\s} escape sequence that take a numeric expression
-as their argument (see below).
-
-For example, suppose @var{sizescale} is@tie{}1000; then a scaled point
-is equivalent to a millipoint; the request @w{@samp{.ps 10.25}} is
-equivalent to @w{@samp{.ps 10.25z}} and thus sets the point size to
-10250@tie{}scaled points, which is equal to 10.25@tie{}points.
-
-@code{gtroff} disallows the use of the @samp{z} scale indicator in
-instances where it would make no sense, such as a numeric expression
-whose default scale indicator was neither @samp{u} nor @samp{z}.
-Similarly it would make no sense to use a scaling indicator other than
-@samp{z} or @samp{u} in a numeric expression whose default scale
-indicator was @samp{z}, and so @code{gtroff} disallows this as well.
-
-There is also new scale indicator @samp{s}, which multiplies by the
-number of units in a scaled point.  So, for example, @samp{\n[.ps]s} is
-equal to @samp{1m}.  Be sure not to confuse the @samp{s} and @samp{z}
-scale indicators.
-
-@Defreg {.ps}
-A read-only number register returning the point size in scaled points.
-
-@code{.ps} is associated with the current environment
-(@pxref{Environments}).
-@endDefreg
-
-@DefregList {.psr}
-@DefregListEndx {.sr}
-@cindex last-requested point size registers (@code{.psr}, @code{.sr})
-@cindex point size registers, last-requested (@code{.psr}, @code{.sr})
-@cindex @code{.ps} register, in comparison with @code{.psr}
-@cindex @code{.s} register, in comparison with @code{.sr}
-The last-requested point size in scaled points is contained in the
-@code{.psr} read-only number register.  The last requested point size in
-points as a decimal fraction can be found in @code{.sr}.  This is a
-string-valued read-only number register.
-
-Note that the requested point sizes are device-independent, whereas the
-values returned by the @code{.ps} and @code{.s} registers are not.  For
-example, if a point size of 11@dmn{pt} is requested, and a @code{sizes}
-request (or a @code{sizescale} line in a @file{DESC} file) specifies
-10.95@dmn{pt} instead, this value is actually used.
-
-Both registers are associated with the current environment
-(@pxref{Environments}).
-@endDefreg
-
-The @code{\s} escape has the following syntax for working with
-fractional type sizes:
-
-@table @code
-@item \s[@var{n}]
-@itemx \s'@var{n}'
-Set the point size to @var{n}@tie{}scaled points; @var{n}@tie{}is a
-numeric expression with a default scale indicator of @samp{z}.
-
-@item \s[+@var{n}]
-@itemx \s[-@var{n}]
-@itemx \s+[@var{n}]
-@itemx \s-[@var{n}]
-@itemx \s'+@var{n}'
-@itemx \s'-@var{n}'
-@itemx \s+'@var{n}'
-@itemx \s-'@var{n}'
-Increase or or decrease the point size by @var{n}@tie{}scaled points;
-@var{n}@tie{}is a numeric expression (which may start with a minus sign)
-with a default scale indicator of @samp{z}.
-@end table
-
-@xref{Font Files}.
-
-
-@c =====================================================================
-
-@node Strings, Conditionals and Loops, Sizes, gtroff Reference
-@section Strings
-@cindex strings
-
-@code{gtroff} has string variables, which are entirely for user
-convenience (i.e.@: there are no built-in strings exept @code{.T}, but
-even this is a read-write string variable).
-
-Although the following requests can be used to create strings,
-simply using an undefined string will cause it to be defined as empty.
-@xref{Identifiers}.
-
-@DefreqList {ds, name [@Var{string}]}
-@DefreqItemx {ds1, name [@Var{string}]}
-@DefescItemx {\\*, , n, }
-@DefescItem {\\*, @Lparen{}, nm, }
-@DefescListEnd {\\*, @Lbrack{}, name arg1 arg2 @dots{}, @Rbrack{}}
-@cindex string interpolation (@code{\*})
-@cindex string expansion (@code{\*})
-@cindex interpolation of strings (@code{\*})
-@cindex expansion of strings (@code{\*})
-@cindex string arguments
-@cindex arguments, of strings
-Define and access a string variable @var{name} (one-character
-name@tie{}@var{n}, two-character name @var{nm}).  If @var{name} already
-exists, @code{ds} overwrites the previous definition.  Only the syntax
-form using brackets can take arguments that are handled identically to
-macro arguments; the single exception is that a closing bracket as an
-argument must be enclosed in double quotes.  @xref{Request and Macro
-Arguments}, and @ref{Parameters}.
-
-Example:
-
-@Example
-.ds foo a \\$1 test
-.
-This is \*[foo nice].
-    @result{} This is a nice test.
-@endExample
-
-The @code{\*} escape @dfn{interpolates} (expands in-place) a
-previously-defined string variable.  To be more precise, the stored
-string is pushed onto the input stack, which is then parsed by
-@code{gtroff}.  Similar to number registers, it is possible to nest
-strings, i.e., string variables can be called within string variables.
-
-If the string named by the @code{\*} escape does not exist, it is
-defined as empty, and a warning of type @samp{mac} is emitted (see
-@ref{Debugging}, for more details).
-
-@cindex comments, with @code{ds}
-@cindex @code{ds} request, and comments
-@strong{Caution:} Unlike other requests, the second argument to the
-@code{ds} request takes up the entire line including trailing spaces.
-This means that comments on a line with such a request can introduce
-unwanted space into a string.
-
-@Example
-.ds UX \s-1UNIX\s0\u\s-3tm\s0\d \" UNIX trademark
-@endExample
-
-@noindent
-Instead the comment should be put on another line or have the comment
-escape adjacent with the end of the string.
-
-@Example
-.ds UX \s-1UNIX\s0\u\s-3tm\s0\d\"  UNIX trademark
-@endExample
-
-@cindex trailing quotes
-@cindex quotes, trailing
-@cindex leading spaces with @code{ds}
-@cindex spaces with @code{ds}
-@cindex @code{ds} request, and leading spaces
-To produce leading space the string can be started with a double quote.
-No trailing quote is needed; in fact, any trailing quote is included in
-your string.
-
-@Example
-.ds sign "           Yours in a white wine sauce,
-@endExample
-
-@cindex multi-line strings
-@cindex strings, multi-line
-@cindex newline character, in strings, escaping
-@cindex escaping newline characters, in strings
-Strings are not limited to a single line of text.  A string can span
-several lines by escaping the newlines with a backslash.  The resulting
-string is stored @emph{without} the newlines.
-
-@Example
-.ds foo lots and lots \
-of text are on these \
-next several lines
-@endExample
-
-It is not possible to have real newlines in a string.  To put a single
-double quote character into a string, use two consecutive double quote
-characters.
-
-The @code{ds1} request turns off compatibility mode while interpreting a
-string.  To be more precise, a @dfn{compatibility save} input token is
-inserted at the beginning of the string, and a @dfn{compatibility
-restore} input token at the end.
-
-@Example
-.nr xxx 12345
-.ds aa The value of xxx is \\n[xxx].
-.ds1 bb The value of xxx ix \\n[xxx].
-.
-.cp 1
-.
-\*(aa
-    @result{} warning: number register `[' not defined
-    @result{} The value of xxx is 0xxx].
-\*(bb
-    @result{} The value of xxx ix 12345.
-@endExample
-
-@cindex name space, common, of macros, diversions, and strings
-@cindex common name space of macros, diversions, and strings
-@cindex macros, shared name space with strings and diversions
-@cindex strings, shared name space with macros and diversions
-@cindex diversions, shared name space with macros and strings
-Strings, macros, and diversions (and boxes) share the same name space.
-Internally, even the same mechanism is used to store them.  This has
-some interesting consequences.  For example, it is possible to call a
-macro with string syntax and vice versa.
-
-@Example
-.de xxx
-a funny test.
-..
-This is \*[xxx]
-    @result{} This is a funny test.
-
-.ds yyy a funny test
-This is
-.yyy
-    @result{} This is a funny test.
-@endExample
-
-In particular, interpolating a string does not hide existing macro
-arguments.  Thus in a macro, a more efficient way of doing
-
-@Example
-.xx \\$@@
-@endExample
-
-@noindent
-is
-
-@Example
-\\*[xx]\\
-@endExample
-
-@noindent
-Note that the latter calling syntax doesn't change the value of
-@code{\$0}, which is then inherited from the calling macro.
-
-Diversions and boxes can be also called with string syntax.
-
-Another consequence is that you can copy one-line diversions or boxes to
-a string.
-
-@Example
-.di xxx
-a \fItest\fR
-.br
-.di
-.ds yyy This is \*[xxx]\c
-\*[yyy].
-    @result{} @r{This is a }@i{test}.
-@endExample
-
-@noindent
-As the previous example shows, it is possible to store formatted output
-in strings.  The @code{\c} escape prevents the insertion of an
-additional blank line in the output.
-
-Copying diversions longer than a single output line produces unexpected
-results.
-
-@Example
-.di xxx
-a funny
-.br
-test
-.br
-.di
-.ds yyy This is \*[xxx]\c
-\*[yyy].
-    @result{} test This is a funny.
-@endExample
-
-Usually, it is not predictable whether a diversion contains one or more
-output lines, so this mechanism should be avoided.  With @acronym{UNIX}
-@code{troff}, this was the only solution to strip off a final newline
-from a diversion.  Another disadvantage is that the spaces in the copied
-string are already formatted, making them unstretchable.  This can cause
-ugly results.
-
-@cindex stripping final newline in diversions
-@cindex diversion, stripping final newline
-@cindex final newline, stripping in diversions
-@cindex newline, final, stripping in diversions
-@cindex horizontal space, unformatting
-@cindex space, horizontal, unformatting
-@cindex unformatting horizontal space
-A clean solution to this problem is available in GNU @code{troff}, using
-the requests @code{chop} to remove the final newline of a diversion, and
-@code{unformat} to make the horizontal spaces stretchable again.
-
-@Example
-.box xxx
-a funny
-.br
-test
-.br
-.box
-.chop xxx
-.unformat xxx
-This is \*[xxx].
-    @result{} This is a funny test.
-@endExample
-
-@xref{Gtroff Internals}, for more information.
-@endDefreq
-
-@DefreqList {as, name [@Var{string}]}
-@DefreqListEndx {as1, name [@Var{string}]}
-@cindex appending to a string (@code{as})
-@cindex string, appending (@code{as})
-The @code{as} request is similar to @code{ds} but appends @var{string}
-to the string stored as @var{name} instead of redefining it.  If
-@var{name} doesn't exist yet, it is created.
-
-@Example
-.as sign " with shallots, onions and garlic,
-@endExample
-
-The @code{as1} request is similar to @code{as}, but compatibility mode
-is switched off while the appended string is interpreted.  To be more
-precise, a @dfn{compatibility save} input token is inserted at the
-beginning of the appended string, and a @dfn{compatibility restore}
-input token at the end.
-@endDefreq
-
-Rudimentary string manipulation routines are given with the next two
-requests.
-
-@Defreq {substring, str n1 [@Var{n2}]}
-@cindex substring (@code{substring})
-Replace the string named @var{str} with the substring defined by the
-indices @var{n1} and @var{n2}.  The first character in the string has
-index@tie{}0.  If @var{n2} is omitted, it is implicitly set to the
-largest valid value (the string length minus one).  If the index value
-@var{n1} or @var{n2} is negative, it is counted from the end of the
-string, going backwards: The last character has index@tie{}@minus{}1,
-the character before the last character has index@tie{}@minus{}2, etc.
-
-@Example
-.ds xxx abcdefgh
-.substring xxx 1 -4
-\*[xxx]
-    @result{} bcde
-.substring xxx 2
-\*[xxx]
-    @result{} de
-@endExample
-@endDefreq
-
-@Defreq {length, reg str}
-@cindex length of a string (@code{length})
-@cindex string, length of (@code{length})
-@cindex @code{length} request, and copy-in mode
-@cindex copy-in mode, and @code{length} request
-@cindex mode, copy-in, and @code{length} request
-Compute the number of characters of @var{str} and return it in the
-number register @var{reg}.  If @var{reg} doesn't exist, it is created.
-@code{str} is read in copy mode.
-
-@Example
-.ds xxx abcd\h'3i'efgh
-.length yyy \*[xxx]
-\n[yyy]
-    @result{} 14
-@endExample
-@endDefreq
-
-@Defreq {rn, xx yy}
-@cindex renaming request (@code{rn})
-@cindex request, renaming (@code{rn})
-@cindex renaming macro (@code{rn})
-@cindex macro, renaming (@code{rn})
-@cindex renaming string (@code{rn})
-@cindex string, renaming (@code{rn})
-@cindex renaming diversion (@code{rn})
-@cindex diversion, renaming (@code{rn})
-Rename the request, macro, diversion, or string @var{xx} to @var{yy}.
-@endDefreq
-
-@Defreq {rm, xx}
-@cindex removing request (@code{rm})
-@cindex request, removing (@code{rm})
-@cindex removing macro (@code{rm})
-@cindex macro, removing (@code{rm})
-@cindex removing string (@code{rm})
-@cindex string, removing (@code{rm})
-@cindex removing diversion (@code{rm})
-@cindex diversion, removing (@code{rm})
-Remove the request, macro, diversion, or string @var{xx}.  @code{gtroff}
-treats subsequent invocations as if the object had never been defined.
-@endDefreq
-
-@anchor{als}
-@Defreq {als, new old}
-@cindex alias, string, creating (@code{als})
-@cindex alias, macro, creating (@code{als})
-@cindex alias, diversion, creating (@code{als})
-@cindex creating alias, for string (@code{als})
-@cindex creating alias, for macro (@code{als})
-@cindex creating alias, for diversion (@code{als})
-@cindex string, creating alias (@code{als})
-@cindex macro, creating alias (@code{als})
-@cindex diversion, creating alias (@code{als})
-Create an alias named @var{new} for the request, string, macro, or
-diversion object named @var{old}.  The new name and the old name are
-exactly equivalent (it is similar to a hard rather than a soft link).  If
-@var{old} is undefined, @code{gtroff} generates a warning of type
-@samp{mac} and ignores the request.
-
-To understand how the @code{als} request works it is probably best to
-think of two different pools: one pool for objects (macros, strings,
-etc.), and another one for names.  As soon as an object is defined,
-@code{gtroff} adds it to the object pool, adds its name to the name
-pool, and creates a link between them.  When @code{als} creates an
-alias, it adds a new name to the name pool that gets linked to the same
-object as the old name.
-
-Now consider this example.
-
-@Example
-.de foo
-..
-.
-.als bar foo
-.
-.de bar
-.  foo
-..
-.
-.bar
-    @result{} input stack limit exceeded
-@endExample
-
-@noindent
-The definition of macro @code{bar} replaces the old object this name is
-linked to.  However, the alias to @code{foo} is still active!  In
-other words, @code{foo} is still linked to the same object as
-@code{bar}, and the result of calling @code{bar} is an infinite,
-recursive loop that finally leads to an error.
-
-@cindex alias, string, removing (@code{rm})
-@cindex alias, macro, removing (@code{rm})
-@cindex alias, diversion, removing (@code{rm})
-@cindex removing alias, for string (@code{rm})
-@cindex removing alias, for macro (@code{rm})
-@cindex removing alias, for diversion (@code{rm})
-@cindex string, removing alias (@code{rm})
-@cindex macro, removing alias (@code{rm})
-@cindex diversion, removing alias (@code{rm})
-To undo an alias, simply call @code{rm} on the aliased name.  The object
-itself is not destroyed until there are no more aliases.
-@endDefreq
-
-@Defreq {chop, xx}
-Remove (chop) the last character from the macro, string, or diversion
-named @var{xx}.  This is useful for removing the newline from the end of
-diversions that are to be interpolated as strings.  This command can be
-used repeatedly; see @ref{Gtroff Internals}, for details on nodes
-inserted additionally by @code{gtroff}.
-@endDefreq
-
-@xref{Identifiers}, and @ref{Comments}.
-
-
-@c =====================================================================
-
-@node Conditionals and Loops, Writing Macros, Strings, gtroff Reference
-@section Conditionals and Loops
-@cindex conditionals and loops
-@cindex loops and conditionals
-
-@menu
-* Operators in Conditionals::
-* if-else::
-* while::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Operators in Conditionals, if-else, Conditionals and Loops, Conditionals and Loops
-@subsection Operators in Conditionals
-
-@cindex @code{if} request, operators to use with
-@cindex @code{ie} request, operators to use with
-@cindex @code{while} request, operators to use with
-In @code{if}, @code{ie}, and @code{while} requests, in addition to ordinary
-@ref{Expressions}, there are several more operators available:
-
-@table @code
-@item e
-@itemx o
-True if the current page is even or odd numbered (respectively).
-
-@item n
-@cindex conditional output for terminal (TTY)
-@cindex TTY, conditional output for
-@cindex terminal, conditional output for
-True if the document is being processed in nroff mode (i.e., the
-@code{.nroff} command has been issued).  @xref{Troff and Nroff Mode}.
-
-@item t
-True if the document is being processed in troff mode (i.e., the
-@code{.troff} command has been issued).  @xref{Troff and Nroff Mode}.
-
-@item v
-Always false.  This condition is for compatibility with other
-@code{troff} versions only (identifying a @code{-Tversatec} device).
-
-@item '@var{xxx}'@var{yyy}'
-True if the output produced by @var{xxx} is equal to the output produced
-by @var{yyy}.  Other characters can be used in place of the single
-quotes; the same set of delimiters as for the @code{\D} escape is used
-(@pxref{Escapes}).  @code{gtroff} formats @var{xxx} and @var{yyy} in
-separate environments; after the comparison the resulting data is
-discarded.
-
-@Example
-.ie "|"\fR|\fP" \
-true
-.el \
-false
-    @result{} true
-@endExample
-
-@noindent
-The resulting motions, glyph sizes, and fonts have to
-match,@footnote{The created output nodes must be identical.
-@xref{Gtroff Internals}.} and not the individual motion, size, and font
-requests.  In the previous example, @samp{|} and @samp{\fR|\fP} both
-result in a roman @samp{|} glyph with the same point size and at the
-same location on the page, so the strings are equal.  If
-@samp{.ft@tie{}I} had been added before the @samp{.ie}, the result would
-be ``false'' because (the first) @samp{|} produces an italic @samp{|}
-rather than a roman one.
-
-@cindex string comparison
-@cindex comparison of strings
-To compare strings without processing, surround the data with @code{\?}.
-
-@Example
-.ie "\?|\?"\?\fR|\fP\?" \
-true
-.el \
-false
-    @result{} false
-@endExample
-
-@cindex @code{\?}, and copy-in mode
-@cindex copy-in mode, and @code{\?}
-@cindex mode, copy-in, and @code{\?}
-@noindent
-Since data protected with @code{\?} is read in copy-in mode it is even
-possible to use incomplete input without causing an error.
-
-@Example
-.ds a \[
-.ds b \[
-.ie '\?\*a\?'\?\*b\?' \
-true
-.el \
-false
-    @result{} true
-@endExample
-
-@item r @var{xxx}
-True if there is a number register named @var{xxx}.
-
-@item d @var{xxx}
-True if there is a string, macro, diversion, or request named @var{xxx}.
-
-@item m @var{xxx}
-True if there is a color named @var{xxx}.
-
-@item c @var{g}
-True if there is a glyph @var{g} available@footnote{The name of this
-conditional operator is a misnomer since it tests names of output
-glyphs.}; @var{g} is either an @acronym{ASCII} character or a special
-character (@code{\N'@var{xxx}'}, @code{\(@var{gg}} or
-@code{\[@var{ggg}]}); the condition is also true if @var{g} has been
-defined by the @code{char} request.
-
-@item F @var{font}
-True if a font named @var{font} exists.  @var{font} is handled as if it
-was opened with the @code{ft} request (this is, font translation and
-styles are applied), without actually mounting it.
-
-This test doesn't load the complete font but only its header to verify
-its validity.
-
-@item S @var{style}
-True if style @var{style} has been registered.  Font translation is
-applied.
-@end table
-
-Note that these operators can't be combined with other operators like
-@samp{:} or @samp{&}; only a leading @samp{!} (without whitespace
-between the exclamation mark and the operator) can be used to negate the
-result.
-
-@Example
-.nr xxx 1
-.ie !r xxx \
-true
-.el \
-false
-    @result{} false
-@endExample
-
-A whitespace after @samp{!} always evaluates to zero (this bizarre
-behaviour is due to compatibility with @acronym{UNIX} @code{troff}).
-
-@Example
-.nr xxx 1
-.ie ! r xxx \
-true
-.el \
-false
-    @result{} r xxx true
-@endExample
-
-It is possible to omit the whitespace before the argument to the
-@samp{r}, @samp{d}, and @samp{c} operators.
-
-@xref{Expressions}.
-
-@c ---------------------------------------------------------------------
-
-@node if-else, while, Operators in Conditionals, Conditionals and Loops
-@subsection if-else
-@cindex if-else
-
-@code{gtroff} has if-then-else constructs like other languages, although
-the formatting can be painful.
-
-@Defreq {if, expr anything}
-
-Evaluate the expression @var{expr}, and executes @var{anything} (the
-remainder of the line) if @var{expr} evaluates to a value greater than
-zero (true).  @var{anything} is interpreted as though it was on a line
-by itself (except that leading spaces are swallowed).
-@xref{Operators in Conditionals}, for more info.
-
-@Example
-.nr xxx 1
-.nr yyy 2
-.if ((\n[xxx] == 1) & (\n[yyy] == 2)) true
-    @result{} true
-@endExample
-@endDefreq
-
-@Defreq {nop, anything}
-Executes @var{anything}.  This is similar to @code{.if@tie{}1}.
-@endDefreq
-
-@DefreqList {ie, expr anything}
-@DefreqListEndx {el, anything}
-Use the @code{ie} and @code{el} requests to write an if-then-else.  The
-first request is the `if' part and the latter is the `else' part.
-
-@Example
-.ie n .ls 2 \" double-spacing in nroff
-.el   .ls 1 \" single-spacing in troff
-@endExample
-@endDefreq
-
-@c there is a bug in makeinfo <= 4.1a: you can't have `@{' as an argument
-@c to @deffn
-@c
-@c and in 4.2 you still can't use @{ in macros.
-
-@c @DefescList {\@{, , , }
-@c @DefescListEnd {\@}, , , }
-@deffn Escape @t{\@{}
-@deffnx Escape @t{\@}}
-@esindex \@{
-@esindex \@}
-@cindex begin of conditional block (@code{\@{})
-@cindex end of conditional block (@code{\@}})
-@cindex conditional block, begin (@code{\@{})
-@cindex conditional block, end (@code{\@}})
-@cindex block, conditional, begin (@code{\@{})
-@cindex block, condititional, end (@code{\@}})
-In many cases, an if (or if-else) construct needs to execute more than
-one request.  This can be done using the escapes @code{\@{} (which must
-start the first line) and @code{\@}} (which must end the last line).
-
-@Example
-.ie t \@{\
-.    ds lq ``
-.    ds rq ''
-.\@}
-.el \@{\
-.    ds lq ""
-.    ds rq ""
-.\@}
-@endExample
-@c @endDefesc
-@end deffn
-
-@xref{Expressions}.
-
-@c ---------------------------------------------------------------------
-
-@node while,  , if-else, Conditionals and Loops
-@subsection while
-@cindex while
-
-@code{gtroff} provides a looping construct using the @code{while}
-request, which is used much like the @code{if} (and related) requests.
-
-@Defreq {while, expr anything}
-Evaluate the expression @var{expr}, and repeatedly execute
-@var{anything} (the remainder of the line) until @var{expr} evaluates
-to@tie{}0.
-
-@Example
-.nr a 0 1
-.while (\na < 9) \@{\
-\n+a,
-.\@}
-\n+a
-    @result{} 1, 2, 3, 4, 5, 6, 7, 8, 9, 10
-@endExample
-
-Some remarks.
-
-@cindex @code{de} request, and @code{while}
-@itemize @bullet
-@item
-The body of a @code{while} request is treated like the body of a
-@code{de} request: @code{gtroff} temporarily stores it in a macro that
-is deleted after the loop has been exited.  It can considerably slow
-down a macro if the body of the @code{while} request (within the macro)
-is large.  Each time the macro is executed, the @code{while} body is
-parsed and stored again as a temporary macro.
-
-@Example
-.de xxx
-.  nr num 10
-.  while (\\n[num] > 0) \@{\
-.    \" many lines of code
-.    nr num -1
-.  \@}
-..
-@endExample
-
-@cindex recursive macros
-@cindex macros, recursive
-@noindent
-The traditional and ofter better solution (@acronym{UNIX} @code{troff}
-doesn't have the @code{while} request) is to use a recursive macro
-instead that is parsed only once during its definition.
-
-@Example
-.de yyy
-.  if (\\n[num] > 0) \@{\
-.    \" many lines of code
-.    nr num -1
-.    yyy
-.  \@}
-..
-.
-.de xxx
-.  nr num 10
-.  yyy
-..
-@endExample
-
-@noindent
-Note that the number of available recursion levels is set to@tie{}1000
-(this is a compile-time constant value of @code{gtroff}).
-
-@item
-The closing brace of a @code{while} body must end a line.
-
-@Example
-.if 1 \@{\
-.  nr a 0 1
-.  while (\n[a] < 10) \@{\
-.    nop \n+[a]
-.\@}\@}
-    @result{} unbalanced \@{ \@}
-@endExample
-@end itemize
-@endDefreq
-
-@Defreq {break, }
-@cindex @code{while} request, confusing with @code{br}
-@cindex @code{break} request, in a @code{while} loop
-@cindex @code{continue} request, in a @code{while} loop
-Break out of a @code{while} loop.  Be sure not to confuse this with the
-@code{br} request (causing a line break).
-@endDefreq
-
-@Defreq {continue, }
-Finish the current iteration of a @code{while} loop, immediately
-restarting the next iteration.
-@endDefreq
-
-@xref{Expressions}.
-
-
-@c =====================================================================
-
-@node Writing Macros, Page Motions, Conditionals and Loops, gtroff Reference
-@section Writing Macros
-@cindex writing macros
-@cindex macros, writing
-
-A @dfn{macro} is a collection of text and embedded commands that can be
-invoked multiple times.  Use macros to define common operations.
-@xref{Strings}, for a (limited) alternative syntax to call macros.
-
-Although the following requests can be used to create macros,
-simply using an undefined macro will cause it to be defined as empty.
-@xref{Identifiers}.
-
-@DefreqList {de, name [@Var{end}]}
-@DefreqItemx {de1, name [@Var{end}]}
-@DefreqItemx {dei, name [@Var{end}]}
-@DefreqListEndx {dei1, name [@Var{end}]}
-Define a new macro named @var{name}.  @code{gtroff} copies subsequent
-lines (starting with the next one) into an internal buffer until it
-encounters the line @samp{..} (two dots).  If the optional second
-argument to @code{de} is present it is used as the macro closure
-request instead of @samp{..}.
-
-There can be whitespace after the first dot in the line containing the
-ending token (either @samp{.} or macro @samp{@var{end}}).  Don't insert
-a tab character immediately after the @samp{..}, otherwise it isn't
-recognized as the end-of-macro symbol.@footnote{While it is possible to
-define and call a macro @samp{.} with
-
-@Example
-.de .
-.  tm foo
-..
-.
-..    \" This calls macro `.'!
-@endExample
-
-@noindent
-you can't use this as the end-of-macro macro: during a macro definition,
-@samp{..} is never handled as a call to @samp{.}, even if you say
-@samp{.de foo .} explicitly.}
-
-Here a small example macro called @samp{P} that causes a break and
-inserts some vertical space.  It could be used to separate paragraphs.
-
-@Example
-.de P
-.  br
-.  sp .8v
-..
-@endExample
-
-The following example defines a macro within another.  Remember that
-expansion must be protected twice; once for reading the macro and once
-for executing.
-
-@Example
-\# a dummy macro to avoid a warning
-.de end
-..
-.
-.de foo
-.  de bar end
-.    nop \f[B]Hallo \\\\$1!\f[]
-.  end
-..
-.
-.foo
-.bar Joe
-    @result{} @b{Hallo Joe!}
-@endExample
-
-@noindent
-Since @code{\f} has no expansion, it isn't necessary to protect its
-backslash.  Had we defined another macro within @code{bar} that takes a
-parameter, eight backslashes would be necessary before @samp{$1}.
-
-The @code{de1} request turns off compatibility mode while executing the
-macro.  On entry, the current compatibility mode is saved and restored
-at exit.
-
-@Example
-.nr xxx 12345
-.
-.de aa
-The value of xxx is \\n[xxx].
-..
-.de1 bb
-The value of xxx ix \\n[xxx].
-..
-.
-.cp 1
-.
-.aa
-    @result{} warning: number register `[' not defined
-    @result{} The value of xxx is 0xxx].
-.bb
-    @result{} The value of xxx ix 12345.
-@endExample
-
-The @code{dei} request defines a macro indirectly.  That is, it expands
-strings whose names are @var{name} or @var{end} before performing the
-append.
-
-This:
-
-@Example
-.ds xx aa
-.ds yy bb
-.dei xx yy
-@endExample
-
-@noindent
-is equivalent to:
-
-@Example
-.de aa bb
-@endExample
-
-The @code{dei1} request is similar to @code{dei} but with compatibility
-mode switched off during execution of the defined macro.
-
-If compatibility mode is on, @code{de} (and @code{dei}) behave similar
-to @code{de1} (and @code{dei1}): A `compatibility save' token is
-inserted at the beginning, and a `compatibility restore' token at the
-end, with compatibility mode switched on during execution.  @xref{Gtroff
-Internals}, for more information on switching compatibility mode on and
-off in a single document.
-
-@pindex trace.tmac
-Using @file{trace.tmac}, you can trace calls to @code{de} and
-@code{de1}.
-
-Note that macro identifiers are shared with identifiers for strings and
-diversions.
-
-@xref{als,,the description of the @code{als} request}, for possible
-pitfalls if redefining a macro that has been aliased.
-@endDefreq
-
-@DefreqList {am, name [@Var{end}]}
-@DefreqItemx {am1, name [@Var{end}]}
-@DefreqItemx {ami, name [@Var{end}]}
-@DefreqListEndx {ami1, name [@Var{end}]}
-@cindex appending to a macro (@code{am})
-@cindex macro, appending (@code{am})
-Works similarly to @code{de} except it appends onto the macro named
-@var{name}.  So, to make the previously defined @samp{P} macro actually
-do indented instead of block paragraphs, add the necessary code to the
-existing macro like this:
-
-@Example
-.am P
-.ti +5n
-..
-@endExample
-
-The @code{am1} request turns off compatibility mode while executing the
-appended macro piece.  To be more precise, a @dfn{compatibility save}
-input token is inserted at the beginning of the appended code, and a
-@dfn{compatibility restore} input token at the end.
-
-The @code{ami} request appends indirectly, meaning that @code{gtroff}
-expands strings whose names are @var{name} or @var{end} before
-performing the append.
-
-The @code{ami1} request is similar to @code{ami} but compatibility mode
-is switched off during execution of the defined macro.
-
-@pindex trace.tmac
-Using @file{trace.tmac}, you can trace calls to @code{am} and
-@code{am1}.
-@endDefreq
-
-@xref{Strings}, for the @code{als} and @code{rn} request to create an
-alias and rename a macro, respectively.
-
-The @code{de}, @code{am}, @code{di}, @code{da}, @code{ds}, and @code{as}
-requests (together with its variants) only create a new object if the
-name of the macro, diversion or string diversion is currently undefined
-or if it is defined to be a request; normally they modify the value of
-an existing object.
-
-@Defreq {return, [@Var{anything}]}
-Exit a macro, immediately returning to the caller.
-
-If called with an argument, exit twice, namely the current macro and the
-macro one level higher.  This is used to define a wrapper macro for
-@code{return} in @file{trace.tmac}.
-@endDefreq
-
-@menu
-* Copy-in Mode::
-* Parameters::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Copy-in Mode, Parameters, Writing Macros, Writing Macros
-@subsection Copy-in Mode
-@cindex copy mode
-@cindex copy-in mode
-@cindex mode, copy
-@cindex mode, copy-in
-
-@cindex @code{\n}, when reading text for a macro
-@cindex @code{\$}, when reading text for a macro
-@cindex @code{\*}, when reading text for a macro
-@cindex @code{\\}, when reading text for a macro
-@cindex \@key{RET}, when reading text for a macro
-When @code{gtroff} reads in the text for a macro, string, or diversion,
-it copies the text (including request lines, but excluding escapes) into
-an internal buffer.  Escapes are converted into an internal form, except
-for @code{\n}, @code{\$}, @code{\*}, @code{\\} and @code{\@key{RET}},
-which are evaluated and inserted into the text where the escape was
-located.  This is known as @dfn{copy-in} mode or @dfn{copy} mode.
-
-What this means is that you can specify when these escapes are to be
-evaluated (either at copy-in time or at the time of use) by insulating
-the escapes with an extra backslash.  Compare this to the @code{\def}
-and @code{\edef} commands in @TeX{}.
-
-The following example prints the numbers 20 and@tie{}10:
-
-@Example
-.nr x 20
-.de y
-.nr x 10
-\&\nx
-\&\\nx
-..
-.y
-@endExample
-
-@c ---------------------------------------------------------------------
-
-@node Parameters,  , Copy-in Mode, Writing Macros
-@subsection Parameters
-@cindex parameters
-
-The arguments to a macro or string can be examined using a variety of
-escapes.
-
-@Defreg {.$}
-@cindex number of arguments register (@code{.$})
-The number of arguments passed to a macro or string.  This is a
-read-only number register.
-
-Note that the @code{shift} request can change its value.
-@endDefreg
-
-Any individual argument can be retrieved with one of the following
-escapes:
-
-@DefescList {\\$, , n, }
-@DefescItem {\\$, @Lparen{}, nn, }
-@DefescListEnd {\\$, @Lbrack{}, nnn, @Rbrack{}}
-@cindex copy-in mode, and macro arguments
-@cindex mode, copy-in, and macro arguments
-@cindex macro, arguments (@code{\$})
-@cindex arguments, macro (@code{\$})
-Retrieve the @var{n}@dmn{th}, @var{nn}@dmn{th} or @var{nnn}@dmn{th}
-argument.  As usual, the first form only accepts a single number (larger
-than zero), the second a two-digit number (larger or equal to@tie{}10),
-and the third any positive integer value (larger than zero).  Macros and
-strings can have an unlimited number of arguments.  Note that due to
-copy-in mode, use two backslashes on these in actual use to prevent
-interpolation until the macro is actually invoked.
-@endDefesc
-
-@Defreq {shift, [@Var{n}]}
-Shift the arguments 1@tie{}position, or as many positions as specified
-by its argument.  After executing this request, argument@tie{}@var{i}
-becomes argument @math{@var{i}-@var{n}}; arguments 1 to@tie{}@var{n} are
-no longer available.  Shifting by negative amounts is currently
-undefined.
-
-The register @code{.$} is adjusted accordingly.
-@endDefreq
-
-@DefescList {\\$*, , , }
-@DefescListEndx {\\$@@, , , }
-In some cases it is convenient to use all of the arguments at once (for
-example, to pass the arguments along to another macro).  The @code{\$*}
-escape concatenates all the arguments separated by spaces.  A similar
-escape is @code{\$@@}, which concatenates all the arguments with each
-surrounded by double quotes, and separated by spaces.  If not in
-compatibility mode, the input level of double quotes is preserved (see
-@ref{Request and Macro Arguments}).
-@endDefesc
-
-@Defesc {\\$^, , , }
-Handle the parameters of a macro as if they were an argument to the
-@code{ds} or similar requests.
-
-@Example
-.de foo
-.  tm $1=`\\$1'
-.  tm $2=`\\$2'
-.  tm $*=`\\$*'
-.  tm $@@=`\\$@@'
-.  tm $^=`\\$^'
-..
-.foo " This is a "test"
-    @result{} $1=` This is a '
-    @result{} $2=`test"'
-    @result{} $*=` This is a  test"'
-    @result{} $@@=`" This is a " "test""'
-    @result{} $^=`" This is a "test"'
-@endExample
-
-This escape is useful mainly for macro packages like @file{trace.tmac},
-which redefines some requests and macros for debugging purposes.
-@endDefesc
-
-@Defesc {\\$0, , , }
-@cindex macro name register (@code{\$0})
-@cindex @code{als} request, and @code{\$0}
-The name used to invoke the current macro.  The @code{als} request can
-make a macro have more than one name.
-
-If a macro is called as a string (within another macro), the value of
-@code{\$0} isn't changed.
-
-@Example
-.de foo
-.  tm \\$0
-..
-.als foo bar
-.
-@endExample
-@Example
-.de aaa
-.  foo
-..
-.de bbb
-.  bar
-..
-.de ccc
-\\*[foo]\\
-..
-.de ddd
-\\*[bar]\\
-..
-.
-@endExample
-@Example
-.aaa
-    @result{} foo
-.bbb
-    @result{} bar
-.ccc
-    @result{} ccc
-.ddd
-    @result{} ddd
-@endExample
-@endDefesc
-
-@xref{Request and Macro Arguments}.
-
-
-@c =====================================================================
-
-@node Page Motions, Drawing Requests, Writing Macros, gtroff Reference
-@section Page Motions
-@cindex page motions
-@cindex motions, page
-
-@xref{Manipulating Spacing}, for a discussion of the main request for
-vertical motion, @code{sp}.
-
-@DefreqList {mk, [@Var{reg}]}
-@DefreqListEndx {rt, [@Var{dist}]}
-@cindex marking vertical page location (@code{mk})
-@cindex page location, vertical, marking (@code{mk})
-@cindex location, vertical, page, marking (@code{mk})
-@cindex vertical page location, marking (@code{mk})
-@cindex returning to marked vertical page location (@code{rt})
-@cindex page location, vertical, returning to marked (@code{rt})
-@cindex location, vertical, page, returning to marked (@code{rt})
-@cindex vertical page location, returning to marked (@code{rt})
-The request @code{mk} can be used to mark a location on a page, for
-movement to later.  This request takes a register name as an argument in
-which to store the current page location.  With no argument it stores
-the location in an internal register.  The results of this can be used
-later by the @code{rt} or the @code{sp} request (or the @code{\v}
-escape).
-
-The @code{rt} request returns @emph{upwards} to the location marked with
-the last @code{mk} request.  If used with an argument, return to a
-position which distance from the top of the page is @var{dist} (no
-previous call to @code{mk} is necessary in this case).  Default scaling
-indicator is @samp{v}.
-
-Here a primitive solution for a two-column macro.
-
-@Example
-.nr column-length 1.5i
-.nr column-gap 4m
-.nr bottom-margin 1m
-.
-@endExample
-@Example
-.de 2c
-.  br
-.  mk
-.  ll \\n[column-length]u
-.  wh -\\n[bottom-margin]u 2c-trap
-.  nr right-side 0
-..
-.
-@endExample
-@Example
-.de 2c-trap
-.  ie \\n[right-side] \@{\
-.    nr right-side 0
-.    po -(\\n[column-length]u + \\n[column-gap]u)
-.    \" remove trap
-.    wh -\\n[bottom-margin]u
-.  \@}
-.  el \@{\
-.    \" switch to right side
-.    nr right-side 1
-.    po +(\\n[column-length]u + \\n[column-gap]u)
-.    rt
-.  \@}
-..
-.
-@endExample
-@Example
-.pl 1.5i
-.ll 4i
-This is a small test that shows how the
-rt request works in combination with mk.
-
-.2c
-Starting here, text is typeset in two columns.
-Note that this implementation isn't robust
-and thus not suited for a real two-column
-macro.
-@endExample
-
-Result:
-
-@Example
-This is a small test that shows how the
-rt request works in combination with mk.
-
-Starting  here,    isn't    robust
-text is typeset    and   thus  not
-in two columns.    suited  for   a
-Note that  this    real two-column
-implementation     macro.
-@endExample
-@endDefreq
-
-The following escapes give fine control of movements about the page.
-
-@Defesc {\\v, ', e, '}
-@cindex vertical motion (@code{\v})
-@cindex motion, vertical (@code{\v})
-Move vertically, usually from the current location on the page (if no
-absolute position operator @samp{|} is used).  The argument@tie{}@var{e}
-specifies the distance to move; positive is downwards and negative
-upwards.  The default scaling indicator for this escape is @samp{v}.
-Beware, however, that @code{gtroff} continues text processing at the
-point where the motion ends, so you should always balance motions to
-avoid interference with text processing.
-
-@code{\v} doesn't trigger a trap.  This can be quite useful; for
-example, consider a page bottom trap macro that prints a marker in the
-margin to indicate continuation of a footnote or something similar.
-@endDefesc
-
-There are some special-case escapes for vertical motion.
-
-@Defesc {\\r, , , }
-Move upwards@tie{}1@dmn{v}.
-@endDefesc
-
-@Defesc {\\u, , , }
-Move upwards@tie{}.5@dmn{v}.
-@endDefesc
-
-@Defesc {\\d, , , }
-Move down@tie{}.5@dmn{v}.
-@endDefesc
-
-@Defesc {\\h, ', e, '}
-@cindex inserting horizontal space (@code{\h})
-@cindex horizontal space (@code{\h})
-@cindex space, horizontal (@code{\h})
-@cindex horizontal motion (@code{\h})
-@cindex motion, horizontal (@code{\h})
-Move horizontally, usually from the current location (if no absolute
-position operator @samp{|} is used).  The expression@tie{}@var{e}
-indicates how far to move: positive is rightwards and negative
-leftwards.  The default scaling indicator for this escape is @samp{m}.
-
-This horizontal space is not discarded at the end of a line.  To insert
-discardable space of a certain length use the @code{ss} request.
-@endDefesc
-
-There are a number of special-case escapes for horizontal motion.
-
-@Defesc {\\@key{SP}, , , }
-@cindex space, unbreakable
-@cindex unbreakable space
-An unbreakable and unpaddable (i.e.@: not expanded during filling)
-space.  (Note: This is a backslash followed by a space.)
-@endDefesc
-
-@Defesc {\\~, , , }
-An unbreakable space that stretches like a normal inter-word space when
-a line is adjusted.
-@endDefesc
-
-@Defesc {\\|, , , }
-A 1/6@dmn{th} em space.  Ignored for TTY output devices (rounded to
-zero).
-
-However, if there is a glyph defined in the current font file with name
-@code{\|} (note the leading backslash), the width of this glyph is used
-instead (even for TTYs).
-@endDefesc
-
-@Defesc {\\^, , , }
-A 1/12@dmn{th} em space.  Ignored for TTY output devices (rounded to
-zero).
-
-However, if there is a glyph defined in the current font file with name
-@code{\^} (note the leading backslash), the width of this glyph is used
-instead (even for TTYs).
-@endDefesc
-
-@Defesc {\\0, , , }
-@cindex space, width of a digit (@code{\0})
-@cindex digit width space (@code{\0})
-A space the size of a digit.
-@endDefesc
-
-The following string sets the @TeX{} logo:
-
-@Example
-.ds TeX T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-@endExample
-
-@DefescList {\\w, ', text, '}
-@DefregItemx {st}
-@DefregItemx {sb}
-@DefregItemx {rst}
-@DefregItemx {rsb}
-@DefregItemx {ct}
-@DefregItemx {ssc}
-@DefregListEndx {skw}
-@cindex width escape (@code{\w})
-Return the width of the specified @var{text} in basic units.  This
-allows horizontal movement based on the width of some arbitrary text
-(e.g.@: given as an argument to a macro).
-
-@Example
-The length of the string `abc' is \w'abc'u.
-    @result{} The length of the string `abc' is 72u.
-@endExample
-
-Font changes may occur in @var{text}, which don't affect current
-settings.
-
-After use, @code{\w} sets several registers:
-
-@table @code
-@item st
-@itemx sb
-The highest and lowest point of the baseline, respectively, in
-@var{text}.
-
-@item rst
-@itemx rsb
-Like the @code{st} and @code{sb} registers, but takes account of the
-heights and depths of glyphs.  In other words, this gives the highest
-and lowest point of @var{text}.  Values below the baseline are negative.
-
-@item ct
-Defines the kinds of glyphs occurring in @var{text}:
-
-@table @asis
-@item 0
-only short glyphs, no descenders or tall glyphs.
-
-@item 1
-at least one descender.
-
-@item 2
-at least one tall glyph.
-
-@item 3
-at least one each of a descender and a tall glyph.
-@end table
-
-@item ssc
-The amount of horizontal space (possibly negative) that should be added
-to the last glyph before a subscript.
-
-@item skw
-How far to right of the center of the last glyph in the @code{\w}
-argument, the center of an accent from a roman font should be placed
-over that glyph.
-@end table
-@endDefesc
-
-@DefescList {\\k, , p, }
-@DefescItem {\\k, @Lparen{}, ps, }
-@DefescListEnd {\\k, @Lbrack{}, position, @Rbrack{}}
-@cindex saving horizontal input line position (@code{\k})
-@cindex horizontal input line position, saving (@code{\k})
-@cindex input line position, horizontal, saving (@code{\k})
-@cindex position, horizontal input line, saving (@code{\k})
-@cindex line, input, horizontal position, saving (@code{\k})
-Store the current horizontal position in the @emph{input} line in number
-register with name @var{position} (one-character name@tie{}@var{p},
-two-character name @var{ps}).  Use this, for example, to return to the
-beginning of a string for highlighting or other decoration.
-@endDefesc
-
-@Defreg {hp}
-@cindex horizontal input line position register (@code{hp})
-@cindex input line, horizontal position, register (@code{hp})
-@cindex position, horizontal, in input line, register (@code{hp})
-@cindex line, input, horizontal position, register (@code{hp})
-The current horizontal position at the input line.
-@endDefreg
-
-@Defreg {.k}
-@cindex horizontal output line position register (@code{.k})
-@cindex output line, horizontal position, register (@code{.k})
-@cindex position, horizontal, in output line, register (@code{.k})
-@cindex line, output, horizontal position, register (@code{.k})
-A read-only number register containing the current horizontal output
-position (relative to the current indentation).
-@endDefreg
-
-@Defesc {\\o, ', abc, '}
-@cindex overstriking glyphs (@code{\o})
-@cindex glyphs, overstriking (@code{\o})
-Overstrike glyphs @var{a}, @var{b}, @var{c}, @dots{}; the glyphs are
-centered, and the resulting spacing is the largest width of the affected
-glyphs.
-@endDefesc
-
-@Defesc {\\z, , g, }
-@cindex zero-width printing (@code{\z}, @code{\Z})
-@cindex printing, zero-width (@code{\z}, @code{\Z})
-Print glyph @var{g} with zero width, i.e., without spacing.  Use this to
-overstrike glyphs left-aligned.
-@endDefesc
-
-@Defesc {\\Z, ', anything, '}
-@cindex zero-width printing (@code{\z}, @code{\Z})
-@cindex printing, zero-width (@code{\z}, @code{\Z})
-Print @var{anything}, then restore the horizontal and vertical position.
-The argument may not contain tabs or leaders.
-
-The following is an example of a strike-through macro:
-
-@Example
-.de ST
-.nr ww \w'\\$1'
-\Z@@\v'-.25m'\l'\\n[ww]u'@@\\$1
-..
-.
-This is
-.ST "a test"
-an actual emergency!
-@endExample
-@endDefesc
-
-
-@c =====================================================================
-
-@node Drawing Requests, Traps, Page Motions, gtroff Reference
-@section Drawing Requests
-@cindex drawing requests
-@cindex requests for drawing
-
-@code{gtroff} provides a number of ways to draw lines and other figures
-on the page.  Used in combination with the page motion commands (see
-@ref{Page Motions}, for more info), a wide variety of figures can be
-drawn.  However, for complex drawings these operations can be quite
-cumbersome, and it may be wise to use graphic preprocessors like
-@code{gpic} or @code{ggrn}.  @xref{gpic}, and @ref{ggrn}, for more
-information.
-
-All drawing is done via escapes.
-
-@DefescList {\\l, ', l, '}
-@DefescListEnd {\\l, ', lg, '}
-@cindex drawing horizontal lines (@code{\l})
-@cindex horizontal line, drawing (@code{\l})
-@cindex line, horizontal, drawing (@code{\l})
-Draw a line horizontally.  @var{l} is the length of the line to be
-drawn.  If it is positive, start the line at the current location and
-draw to the right; its end point is the new current location.  Negative
-values are handled differently: The line starts at the current location
-and draws to the left, but the current location doesn't move.
-
-@var{l} can also be specified absolutely (i.e.@: with a leading
-@samp{|}), which draws back to the beginning of the input line.  Default
-scaling indicator is @samp{m}.
-
-@cindex underscore glyph (@code{\[ru]})
-@cindex glyph, underscore (@code{\[ru]})
-@cindex line drawing glyph
-@cindex glyph, for line drawing
-The optional second parameter@tie{}@var{g} is a glyph to draw the line
-with.  If this second argument is not specified, @code{gtroff} uses the
-underscore glyph, @code{\[ru]}.
-
-@cindex zero width space character (@code{\&})
-@cindex character, zero width space (@code{\&})
-@cindex space character, zero width (@code{\&})
-To separate the two arguments (to prevent @code{gtroff} from
-interpreting a drawing glyph as a scaling indicator if the glyph is
-represented by a single character) use @code{\&}.
-
-Here a small useful example:
-
-@Example
-.de box
-\[br]\\$*\[br]\l'|0\[rn]'\l'|0\[ul]'
-..
-@endExample
-
-@noindent
-Note that this works by outputting a box rule (a vertical line), then
-the text given as an argument and then another box rule.  Finally, the
-line drawing escapes both draw from the current location to the
-beginning of the @emph{input} line -- this works because the line length
-is negative, not moving the current point.
-@endDefesc
-
-@DefescList {\\L, ', l, '}
-@DefescListEnd {\\L, ', lg, '}
-@cindex drawing vertical lines (@code{\L})
-@cindex vertical line drawing (@code{\L})
-@cindex line, vertical, drawing (@code{\L})
-@cindex line drawing glyph
-@cindex glyph for line drawing
-@cindex box rule glyph (@code{\[br]})
-@cindex glyph, box rule (@code{\[br]})
-Draw vertical lines.  Its parameters are similar to the @code{\l}
-escape, except that the default scaling indicator is @samp{v}.  The
-movement is downwards for positive values, and upwards for negative
-values.  The default glyph is the box rule glyph, @code{\[br]}.  As with
-the vertical motion escapes, text processing blindly continues where the
-line ends.
-
-@Example
-This is a \L'3v'test.
-@endExample
-
-@noindent
-Here the result, produced with @code{grotty}.
-
-@Example
-This is a
-          |
-          |
-          |test.
-@endExample
-@endDefesc
-
-@Defesc {\\D, ', command arg @dots{}, '}
-The @code{\D} escape provides a variety of drawing functions.  Note that
-on character devices, only vertical and horizontal lines are supported
-within @code{grotty}; other devices may only support a subset of the
-available drawing functions.
-
-The default scaling indicator for all subcommands of @code{\D} is
-@samp{m} for horizontal distances and @samp{v} for vertical ones.
-Exceptions are @w{@code{\D'f @dots{}'}} and @w{@code{\D't @dots{}'}},
-which use @code{u} as the default, and @w{@code{\D'F@var{x} @dots{}'}},
-which arguments are treated similar to the @code{defcolor} request.
-
-@table @code
-@item \D'l @var{dx} @var{dy}'
-@cindex line, drawing (@w{@code{\D'l @dots{}'}})
-@cindex drawing a line (@w{@code{\D'l @dots{}'}})
-Draw a line from the current location to the relative point specified by
-(@var{dx},@var{dy}), where positive values mean down and right,
-respectively.  The end point of the line is the new current location.
-
-The following example is a macro for creating a box around a text
-string; for simplicity, the box margin is taken as a fixed value,
-0.2@dmn{m}.
-
-@Example
-.de BOX
-.  nr @@wd \w'\\$1'
-\h'.2m'\
-\h'-.2m'\v'(.2m - \\n[rsb]u)'\
-\D'l 0 -(\\n[rst]u - \\n[rsb]u + .4m)'\
-\D'l (\\n[@@wd]u + .4m) 0'\
-\D'l 0 (\\n[rst]u - \\n[rsb]u + .4m)'\
-\D'l -(\\n[@@wd]u + .4m) 0'\
-\h'.2m'\v'-(.2m - \\n[rsb]u)'\
-\\$1\
-\h'.2m'
-..
-@endExample
-
-@noindent
-First, the width of the string is stored in register @code{@@wd}.  Then,
-four lines are drawn to form a box, properly offset by the box margin.
-The registers @code{rst} and @code{rsb} are set by the @code{\w} escape,
-containing the largest height and depth of the whole string.
-
-@item \D'c @var{d}'
-@cindex circle, drawing (@w{@code{\D'c @dots{}'}})
-@cindex drawing a circle (@w{@code{\D'c @dots{}'}})
-Draw a circle with a diameter of@tie{}@var{d} with the leftmost point at
-the current position.  After drawing, the current location is positioned
-at the rightmost point of the circle.
-
-@item \D'C @var{d}'
-@cindex circle, solid, drawing (@w{@code{\D'C @dots{}'}})
-@cindex drawing a solid circle (@w{@code{\D'C @dots{}'}})
-@cindex solid circle, drawing (@w{@code{\D'C @dots{}'}})
-Draw a solid circle with the same parameters and behaviour as an
-outlined circle.  No outline is drawn.
-
-@item \D'e @var{x} @var{y}'
-@cindex drawing an ellipse (@w{@code{\D'e @dots{}'}})
-@cindex ellipse, drawing (@w{@code{\D'e @dots{}'}})
-Draw an ellipse with a horizontal diameter of @var{x} and a vertical
-diameter of @var{y} with the leftmost point at the current position.
-After drawing, the current location is positioned at the rightmost point
-of the ellipse.
-
-@item \D'E @var{x} @var{y}'
-@cindex ellipse, solid, drawing (@w{@code{\D'E @dots{}'}})
-@cindex drawing a solid ellipse (@w{@code{\D'E @dots{}'}})
-@cindex solid ellipse, drawing (@w{@code{\D'E @dots{}'}})
-Draw a solid ellipse with the same parameters and behaviour as an
-outlined ellipse.  No outline is drawn.
-
-@item \D'a @var{dx1} @var{dy1} @var{dx2} @var{dy2}'
-@cindex arc, drawing (@w{@code{\D'a @dots{}'}})
-@cindex drawing an arc (@w{@code{\D'a @dots{}'}})
-Draw an arc clockwise from the current location through the two
-specified relative locations (@var{dx1},@var{dy1}) and
-(@var{dx2},@var{dy2}).  The coordinates of the first point are relative
-to the current position, and the coordinates of the second point are
-relative to the first point.  After drawing, the current position is
-moved to the final point of the arc.
-
-@item \D'~ @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
-@cindex drawing a spline (@w{@code{\D'~ @dots{}'}})
-@cindex spline, drawing (@w{@code{\D'~ @dots{}'}})
-Draw a spline from the current location to the relative point
-(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}), and so on.  The
-current position is moved to the terminal point of the drawn curve.
-
-@item \D'f @var{n}'
-@cindex gray shading (@w{@code{\D'f @dots{}'}})
-@cindex shading filled objects (@w{@code{\D'f @dots{}'}})
-Set the shade of gray to be used for filling solid objects
-to@tie{}@var{n}; @var{n}@tie{}must be an integer between 0
-and@tie{}1000, where 0 corresponds solid white and 1000 to solid black,
-and values in between correspond to intermediate shades of gray.  This
-applies only to solid circles, solid ellipses, and solid polygons.  By
-default, a level of 1000 is used.
-
-Despite of being silly, the current point is moved horizontally to the
-right by@tie{}@var{n}.
-
-@cindex @w{@code{\D'f @dots{}'}} and horizontal resolution
-Don't use this command!  It has the serious drawback that it is always
-rounded to the next integer multiple of the horizontal resolution (the
-value of the @code{hor} keyword in the @file{DESC} file).  Use @code{\M}
-(@pxref{Colors}) or @w{@code{\D'Fg @dots{}'}} instead.
-
-@item \D'p @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
-@cindex drawing a polygon (@w{@code{\D'p @dots{}'}})
-@cindex polygon, drawing (@w{@code{\D'p @dots{}'}})
-Draw a polygon from the current location to the relative position
-(@var{dx1},@var{dy1}) and then to (@var{dx2},@var{dy2}) and so on.  When
-the specified data points are exhausted, a line is drawn back to the
-starting point.  The current position is changed by adding the sum of
-all arguments with odd index to the actual horizontal position and the
-even ones to the vertical position.
-
-@item \D'P @var{dx1} @var{dy1} @var{dx2} @var{dy2} @dots{}'
-@cindex polygon, solid, drawing (@w{@code{\D'P @dots{}'}})
-@cindex drawing a solid polygon (@w{@code{\D'P @dots{}'}})
-@cindex solid polygon, drawing (@w{@code{\D'P @dots{}'}})
-Draw a solid polygon with the same parameters and behaviour as an
-outlined polygon.  No outline is drawn.
-
-Here a better variant of the box macro to fill the box with some color.
-Note that the box must be drawn before the text since colors in
-@code{gtroff} are not transparent; the filled polygon would hide the
-text completely.
-
-@Example
-.de BOX
-.  nr @@wd \w'\\$1'
-\h'.2m'\
-\h'-.2m'\v'(.2m - \\n[rsb]u)'\
-\M[lightcyan]\
-\D'P 0 -(\\n[rst]u - \\n[rsb]u + .4m) \
-     (\\n[@@wd]u + .4m) 0 \
-     0 (\\n[rst]u - \\n[rsb]u + .4m) \
-     -(\\n[@@wd]u + .4m) 0'\
-\h'.2m'\v'-(.2m - \\n[rsb]u)'\
-\M[]\
-\\$1\
-\h'.2m'
-..
-@endExample
-
-If you want a filled polygon that has exactly the same size as an
-unfilled one, you must draw both an unfilled and a filled polygon.  A
-filled polygon is always smaller than an unfilled one because the latter
-uses straight lines with a given line thickness to connect the polygon's
-corners, while the former simply fills the area defined by the
-coordinates.
-
-@Example
-\h'1i'\v'1i'\
-\# increase line thickness
-\Z'\D't 5p''\
-\# draw unfilled polygon
-\Z'\D'p 3 3 -6 0''\
-\# draw filled polygon
-\Z'\D'P 3 3 -6 0''
-@endExample
-
-@item \D't @var{n}'
-@cindex line thickness (@w{@code{\D't @dots{}'}})
-@cindex thickness of lines (@w{@code{\D't @dots{}'}})
-Set the current line thickness to @var{n}@tie{}machine units.  A value
-of zero selects the smallest available line thickness.  A negative value
-makes the line thickness proportional to the current point size (this is
-the default behaviour of @acronym{AT&T} @code{troff}).
-
-Despite of being silly, the current point is moved horizontally to the
-right by@tie{}@var{n}.
-
-@item \D'F@var{scheme} @var{color_components}'
-@cindex unnamed fill colors (@code{\D'F@dots{}'})
-@cindex fill colors, unnamed (@code{\D'F@dots{}'})
-@cindex colors, fill, unnamed (@code{\D'F@dots{}'})
-Change current fill color.  @var{scheme} is a single letter denoting the
-color scheme: @samp{r} (rgb), @samp{c} (cmy), @samp{k} (cmyk), @samp{g}
-(gray), or @samp{d} (default color).  The color components use exactly
-the same syntax as in the @code{defcolor} request (@pxref{Colors}); the
-command @code{\D'Fd'} doesn't take an argument.
-
-@emph{No} position changing!
-
-Examples:
-
-@Example
-\D'Fg .3'      \" same gray as \D'f 700'
-\D'Fr #0000ff' \" blue
-@endExample
-@end table
-@endDefesc
-
-@xref{Graphics Commands}.
-
-@Defesc {\\b, ', string, '}
-@cindex pile, glyph (@code{\b})
-@cindex glyph pile (@code{\b})
-@cindex stacking glyphs (@code{\b})
-@dfn{Pile} a sequence of glyphs vertically, and center it vertically on
-the current line.  Use it to build large brackets and braces.
-
-Here an example how to create a large opening brace:
-
-@Example
-\b'\[lt]\[bv]\[lk]\[bv]\[lb]'
-@endExample
-
-@cindex @code{\b}, limitations
-@cindex limitations of @code{\b} escape
-The first glyph is on the top, the last glyph in @var{string} is at the
-bottom.  Note that @code{gtroff} separates the glyphs vertically by
-1@dmn{m}, and the whole object is centered 0.5@dmn{m} above the current
-baseline; the largest glyph width is used as the width for the whole
-object.  This rather unflexible positioning algorithm doesn't work with
-@option{-Tdvi} since the bracket pieces vary in height for this device.
-Instead, use the @code{eqn} preprocessor.
-
-@xref{Manipulating Spacing}, how to adjust the vertical spacing with the
-@code{\x} escape.
-@endDefesc
-
-
-@c =====================================================================
-
-@node Traps, Diversions, Drawing Requests, gtroff Reference
-@section Traps
-@cindex traps
-
-@dfn{Traps} are locations that, when reached, call a specified macro.
-These traps can occur at a given location on the page, at a given
-location in the current diversion, at a blank line, after a certain
-number of input lines, or at the end of input.
-
-@cindex planting a trap
-@cindex trap, planting
-Setting a trap is also called @dfn{planting}.
-@cindex trap, springing
-@cindex springing a trap
-It is also said that a trap is @dfn{sprung} if the associated macro is
-executed.
-
-@menu
-* Page Location Traps::
-* Diversion Traps::
-* Input Line Traps::
-* Blank Line Traps::
-* Leading Spaces Traps::
-* End-of-input Traps::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Page Location Traps, Diversion Traps, Traps, Traps
-@subsection Page Location Traps
-@cindex page location traps
-@cindex traps, page location
-
-@dfn{Page location traps} perform an action when @code{gtroff} reaches
-or passes a certain vertical location on the page.  Page location traps
-have a variety of purposes, including:
-
-@itemize
-@item
-setting headers and footers
-
-@item
-setting body text in multiple columns
-
-@item
-setting footnotes
-@end itemize
-
-@DefreqList {vpt, flag}
-@DefregListEndx {.vpt}
-@cindex enabling vertical position traps (@code{vpt})
-@cindex vertical position traps, enabling (@code{vpt})
-@cindex vertical position trap enable register (@code{.vpt})
-Enable vertical position traps if @var{flag} is non-zero, or disables
-them otherwise.  Vertical position traps are traps set by the @code{wh}
-or @code{dt} requests.  Traps set by the @code{it} request are not
-vertical position traps.  The parameter that controls whether vertical
-position traps are enabled is global.  Initially vertical position traps
-are enabled.  The current setting of this is available in the
-@code{.vpt} read-only number register.
-
-Note that a page can't be ejected if @code{vpt} is set to zero.
-@endDefreq
-
-@Defreq {wh, dist [@Var{macro}]}
-Set a page location trap.  Non-negative values for @var{dist} set the
-trap relative to the top of the page; negative values set the trap
-relative to the bottom of the page.  Default scaling indicator is
-@samp{v}; values of @var{dist} are always rounded to be multiples of the
-vertical resolution (as given in register @code{.V}).
-
-@var{macro} is the name of the macro to execute when the trap is sprung.
-If @var{macro} is missing, remove the first trap (if any) at @var{dist}.
-
-@cindex page headers
-@cindex page footers
-@cindex headers
-@cindex footers
-The following is a simple example of how many macro packages set headers
-and footers.
-
-@Example
-.de hd                \" Page header
-'  sp .5i
-.  tl 'Title''date'
-'  sp .3i
-..
-.
-.de fo                \" Page footer
-'  sp 1v
-.  tl ''%''
-'  bp
-..
-.
-.wh 0   hd            \" trap at top of the page
-.wh -1i fo            \" trap one inch from bottom
-@endExample
-
-A trap at or below the bottom of the page is ignored; it can be made
-active by either moving it up or increasing the page length so that the
-trap is on the page.
-
-Negative trap values always use the @emph{current} page length; they are
-not converted to an absolute vertical position:
-
-@Example
-.pl 5i
-.wh -1i xx
-.ptr
-    @result{} xx      -240
-.pl 100i
-.ptr
-    @result{} xx      -240
-@endExample
-
-It is possible to have more than one trap at the same location; to do
-so, the traps must be defined at different locations, then moved
-together with the @code{ch} request; otherwise the second trap would
-replace the first one.  Earlier defined traps hide later defined traps
-if moved to the same position (the many empty lines caused by the
-@code{bp} request are omitted in the following example):
-
-@Example
-.de a
-.  nop a
-..
-.de b
-.  nop b
-..
-.de c
-.  nop c
-..
-.
-.wh 1i a
-.wh 2i b
-.wh 3i c
-.bp
-    @result{} a b c
-@endExample
-@Example
-.ch b 1i
-.ch c 1i
-.bp
-    @result{} a
-@endExample
-@Example
-.ch a 0.5i
-.bp
-    @result{} a b
-@endExample
-@endDefreq
-
-@Defreg {.t}
-@cindex distance to next trap register (@code{.t})
-@cindex trap, distance, register (@code{.t})
-A read-only number register holding the distance to the next trap.
-
-If there are no traps between the current position and the bottom of the
-page, it contains the distance to the page bottom.  In a diversion, the
-distance to the page bottom is infinite (the returned value is the
-biggest integer that can be represented in @code{groff}) if there are
-no diversion traps.
-@endDefreg
-
-@Defreq {ch, macro [@Var{dist}]}
-@cindex changing trap location (@code{ch})
-@cindex trap, changing location (@code{ch})
-Change the location of a trap.  The first argument is the name of the
-macro to be invoked at the trap, and the second argument is the new
-location for the trap (note that the parameters are specified in
-opposite order as in the @code{wh} request).  This is useful for
-building up footnotes in a diversion to allow more space at the bottom
-of the page for them.
-
-Default scaling indicator for @var{dist} is @samp{v}.  If @var{dist} is
-missing, the trap is removed.
-
-@c XXX
-
-@ignore
-@Example
-... (simplified) footnote example ...
-@endExample
-@end ignore
-@endDefreq
-
-@Defreg {.ne}
-The read-only number register @code{.ne} contains the amount of space
-that was needed in the last @code{ne} request that caused a trap to be
-sprung.  Useful in conjunction with the @code{.trunc} register.
-@xref{Page Control}, for more information.
-
-Since the @code{.ne} register is only set by traps it doesn't make much
-sense to use it outside of trap macros.
-@endDefreg
-
-@Defreg {.trunc}
-@cindex @code{ne} request, and the @code{.trunc} register
-@cindex truncated vertical space register (@code{.trunc})
-A read-only register containing the amount of vertical space truncated
-by the most recently sprung vertical position trap, or, if the trap was
-sprung by an @code{ne} request, minus the amount of vertical motion
-produced by the @code{ne} request.  In other words, at the point a trap
-is sprung, it represents the difference of what the vertical position
-would have been but for the trap, and what the vertical position
-actually is.
-
-Since the @code{.trunc} register is only set by traps it doesn't make
-much sense to use it outside of trap macros.
-@endDefreg
-
-@Defreg {.pe}
-@cindex @code{bp} request, and traps (@code{.pe})
-@cindex traps, sprung by @code{bp} request (@code{.pe})
-@cindex page ejecting register (@code{.pe})
-A read-only register that is set to@tie{}1 while a page is ejected with
-the @code{bp} request (or by the end of input).
-
-Outside of traps this register is always zero.  In the following
-example, only the second call to@tie{}@code{x} is caused by @code{bp}.
-
-@Example
-.de x
-\&.pe=\\n[.pe]
-.br
-..
-.wh 1v x
-.wh 4v x
-A line.
-.br
-Another line.
-.br
-    @result{} A line.
-       .pe=0
-       Another line.
-
-       .pe=1
-@endExample
-@endDefreg
-
-@cindex diversions, and traps
-@cindex traps, and diversions
-An important fact to consider while designing macros is that diversions
-and traps do not interact normally.  For example, if a trap invokes a
-header macro (while outputting a diversion) that tries to change the
-font on the current page, the effect is not visible before the diversion
-has completely been printed (except for input protected with @code{\!}
-or @code{\?}) since the data in the diversion is already formatted.  In
-most cases, this is not the expected behaviour.
-
-@c ---------------------------------------------------------------------
-
-@node Diversion Traps, Input Line Traps, Page Location Traps, Traps
-@subsection Diversion Traps
-@cindex diversion traps
-@cindex traps, diversion
-
-@Defreq {dt, [@Var{dist} @Var{macro}]}
-@cindex @code{.t} register, and diversions
-@cindex setting diversion trap (@code{dt})
-@cindex diversion trap, setting (@code{dt})
-@cindex trap, diversion, setting (@code{dt})
-Set a trap @emph{within} a diversion.  @var{dist} is the location of the
-trap (identical to the @code{wh} request; default scaling indicator is
-@samp{v}) and @var{macro} is the name of the macro to be invoked.  If
-called without arguments, the diversion trap is removed.
-
-Note that there exists only a single diversion trap.
-
-The number register @code{.t} still works within diversions.
-@xref{Diversions}, for more information.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Input Line Traps, Blank Line Traps, Diversion Traps, Traps
-@subsection Input Line Traps
-@cindex input line traps
-@cindex traps, input line
-
-@DefreqList {it, n macro}
-@DefreqListEndx {itc, n macro}
-@cindex setting input line trap (@code{it})
-@cindex input line trap, setting (@code{it})
-@cindex trap, input line, setting (@code{it})
-Set an input line trap.  @var{n}@tie{}is the number of lines of input
-that may be read before springing the trap, @var{macro} is the macro to
-be invoked.  Request lines are not counted as input lines.
-
-For example, one possible use is to have a macro that prints the next
-@var{n}@tie{}lines in a bold font.
-
-@Example
-.de B
-.  it \\$1 B-end
-.  ft B
-..
-.
-.de B-end
-.  ft R
-..
-@endExample
-
-@cindex input line traps and interrupted lines (@code{itc})
-@cindex interrupted lines and input line traps (@code{itc})
-@cindex traps, input line, and interrupted lines (@code{itc})
-@cindex lines, interrupted, and input line traps (@code{itc})
-The @code{itc} request is identical except that an interrupted text line
-(ending with @code{\c}) is not counted as a separate line.
-
-Both requests are associated with the current environment
-(@pxref{Environments}); switching to another environment disables the
-current input trap, and going back reactivates it, restoring the number
-of already processed lines.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Blank Line Traps, Leading Spaces Traps, Input Line Traps, Traps
-@subsection Blank Line Traps
-@cindex blank line traps
-@cindex traps, blank line
-
-@Defreq {blm, macro}
-@cindex blank line macro (@code{blm})
-Set a blank line trap.  @code{gtroff} executes @var{macro} when it
-encounters a blank line in the input file.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node Leading Spaces Traps, End-of-input Traps, Blank Line Traps, Traps
-@subsection Leading Spaces Traps
-@cindex leading spaces traps
-@cindex traps, leading spaces
-
-@DefreqList {lsm, macro}
-@DefregItemx {lsn}
-@DefregListEndx {lss}
-@cindex leading spaces macro (@code{lsm})
-Set a leading spaces trap.  @code{gtroff} executes @var{macro} when it
-encounters leading spaces in an input line; the implicit line break
-that normally happens in this case is suppressed.  A line consisting
-of spaces only, however, is treated as an empty line, possibly subject
-to an empty line macro set with the @code{blm} request.
-
-Leading spaces are removed from the input line before calling the
-leading spaces macro.  The number of removed spaces is stored in
-register @code{lsn}; the horizontal space that would be emitted if
-there was no leading space macro is stored in register @code{lss}.
-Note that @code{lsn} and @code{lss} are available even if no leading
-space macro has been set.
-
-The first thing a leading space macro sees is a token.  However, some
-escapes like @code{\f} or @code{\m} are handled on the fly (see
-@ref{Gtroff Internals}, for a complete list) without creating a token
-at all.  Consider that a line starts with two spaces followed by
-@code{\fIfoo}.  While skipping the spaces @code{\fI} is handled too so
-that groff's current font is properly set to @samp{I}, but the leading
-space macro only sees @code{foo}, without the preceding @code{\fI}.
-If the macro should see the font escape you have to `protect' it with
-something that creates a token, for example with @code{\&\fIfoo}.
-@endDefreq
-
-@c ---------------------------------------------------------------------
-
-@node End-of-input Traps,  , Leading Spaces Traps, Traps
-@subsection End-of-input Traps
-@cindex end-of-input traps
-@cindex traps, end-of-input
-
-@Defreq {em, macro}
-@cindex setting end-of-input trap (@code{em})
-@cindex end-of-input trap, setting (@code{em})
-@cindex trap, end-of-input, setting (@code{em})
-@cindex end-of-input macro (@code{em})
-@cindex macro, end-of-input (@code{em})
-Set a trap at the end of input.  @var{macro} is executed after the last
-line of the input file has been processed.
-
-For example, if the document had to have a section at the bottom of the
-last page for someone to approve it, the @code{em} request could be
-used.
-
-@Example
-.de approval
-\c
-.  ne 3v
-.  sp (\\n[.t]u - 3v)
-.  in +4i
-.  lc _
-.  br
-Approved:\t\a
-.  sp
-Date:\t\t\a
-..
-.
-.em approval
-@endExample
-
-The @code{\c} in the above example needs explanation.  For historical
-reasons (and for compatibility with @acronym{AT&T} @code{troff}), the
-end macro exits as soon as it causes a page break and no remaining
-data is in the partially collected line.
-
-Let us assume that there is no @code{\c} in the above @code{approval}
-macro, and that the page is full and has been ended with, say, a
-@code{br} request.  The @code{ne} request now causes the start of a new
-page, which in turn makes @code{troff} exit immediately for the reasons
-just described.  In most situations this is not intended.
-
-To always force processing the whole end macro independently of this
-behaviour it is thus advisable to insert something that starts an
-empty partially filled line (@code{\c}) whenever there is a chance that
-a page break can happen.  In the above example, the call of the
-@code{ne} request assures that the remaining code stays on the same
-page, so we have to insert @code{\c} only once.
-
-The next example shows how to append three lines, then starting a new
-page unconditionally.  Since @w{@samp{.ne 1}} doesn't give the desired
-effect -- there is always one line available or we are already at the
-beginning of the next page -- we temporarily increase the page length
-by one line so that we can use @w{@samp{.ne 2}}.
-
-@Example
-.de EM
-.pl +1v
-\c
-.ne 2
-line one
-.br
-\c
-.ne 2
-line two
-.br
-\c
-.ne 2
-line three
-.br
-.pl -1v
-\c
-'bp
-..
-.em EM
-@endExample
-
-Note that this specific feature affects only the first potential page
-break caused by the end macro; further page breaks emitted by the end
-macro are handled normally.
-
-Another possible use of the @code{em} request is to make @code{gtroff}
-emit a single large page instead of multiple pages.  For example, one
-may want to produce a long plain-text file for reading on-screen.  The
-idea is to set the page length at the beginning of the document to a
-very large value to hold all the text, and automatically adjust it to
-the exact height of the document after the text has been output.
-
-@Example
-.de adjust-page-length
-.  br
-.  pl \\n[nl]u   \" \n[nl] holds the current page length
-..
-.
-.de single-page-mode
-.  pl 99999
-.  em adjust-page-length
-..
-.
-.\" activate the above code
-.single-page-mode
-@endExample
-
-Since only one end-of-input trap does exist and other macro packages
-may already use it, care must be taken not to break the mechanism.  A
-simple solution would be to append the above macro to the macro
-package's end-of-input macro using the @code{.am} request.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Diversions, Environments, Traps, gtroff Reference
-@section Diversions
-@cindex diversions
-
-In @code{gtroff} it is possible to @dfn{divert} text into a named
-storage area.  Due to the similarity to defining macros it is sometimes
-said to be stored in a macro.  This is used for saving text for output
-at a later time, which is useful for keeping blocks of text on the same
-page, footnotes, tables of contents, and indices.
-
-@cindex top-level diversion
-@cindex diversion, top-level
-For orthogonality it is said that @code{gtroff} is in the @dfn{top-level
-diversion} if no diversion is active (i.e., the data is diverted to the
-output device).
-
-Although the following requests can be used to create diversions,
-simply using an undefined diversion will cause it to be defined as empty.
-@xref{Identifiers}.
-
-@DefreqList {di, macro}
-@DefreqListEndx {da, macro}
-@cindex beginning diversion (@code{di})
-@cindex diversion, beginning (@code{di})
-@cindex ending diversion (@code{di})
-@cindex diversion, ending (@code{di})
-@cindex appending to a diversion (@code{da})
-@cindex diversion, appending (@code{da})
-Begin a diversion.  Like the @code{de} request, it takes an argument of
-a macro name to divert subsequent text into.  The @code{da} macro
-appends to an existing diversion.
-
-@code{di} or @code{da} without an argument ends the diversion.
-
-The current partially-filled line is included into the diversion.  See
-the @code{box} request below for an example.  Note that switching to
-another (empty) environment (with the @code{ev} request) avoids the
-inclusion of the current partially-filled line.
-@endDefreq
-
-@DefreqList {box, macro}
-@DefreqListEndx {boxa, macro}
-Begin (or append to) a diversion like the @code{di} and @code{da}
-requests.  The difference is that @code{box} and @code{boxa} do not
-include a partially-filled line in the diversion.
-
-Compare this:
-
-@Example
-Before the box.
-.box xxx
-In the box.
-.br
-.box
-After the box.
-.br
-    @result{} Before the box.  After the box.
-.xxx
-    @result{} In the box.
-@endExample
-
-@noindent
-with this:
-
-@Example
-Before the diversion.
-.di yyy
-In the diversion.
-.br
-.di
-After the diversion.
-.br
-    @result{} After the diversion.
-.yyy
-    @result{} Before the diversion.  In the diversion.
-@endExample
-
-@code{box} or @code{boxa} without an argument ends the diversion.
-@endDefreq
-
-@DefregList {.z}
-@DefregListEndx {.d}
-@cindex @code{nl} register, and @code{.d}
-@cindex nested diversions
-@cindex diversion, nested
-@cindex diversion name register (@code{.z})
-@cindex vertical position in diversion register (@code{.d})
-@cindex position, vertical, in diversion, register (@code{.d})
-@cindex diversion, vertical position in, register (@code{.d})
-Diversions may be nested.  The read-only number register @code{.z}
-contains the name of the current diversion (this is a string-valued
-register).  The read-only number register @code{.d} contains the current
-vertical place in the diversion.  If not in a diversion it is the same
-as register @code{nl}.
-@endDefreg
-
-@Defreg {.h}
-@cindex high-water mark register (@code{.h})
-@cindex mark, high-water, register (@code{.h})
-@cindex position of lowest text line (@code{.h})
-@cindex text line, position of lowest (@code{.h})
-The @dfn{high-water mark} on the current page.  It corresponds to the
-text baseline of the lowest line on the page.  This is a read-only
-register.
-
-@Example
-.tm .h==\n[.h], nl==\n[nl]
-    @result{} .h==0, nl==-1
-This is a test.
-.br
-.sp 2
-.tm .h==\n[.h], nl==\n[nl]
-    @result{} .h==40, nl==120
-@endExample
-
-@cindex @code{.h} register, difference to @code{nl}
-@cindex @code{nl} register, difference to @code{.h}
-@noindent
-As can be seen in the previous example, empty lines are not considered
-in the return value of the @code{.h} register.
-@endDefreg
-
-@DefregList {dn}
-@DefregListEndx {dl}
-@cindex @code{dn} register, and @code{da} (@code{boxa})
-@cindex @code{dl} register, and @code{da} (@code{boxa})
-@cindex @code{da} request, and @code{dn} (@code{dl})
-@cindex @code{boxa} request, and @code{dn} (@code{dl})
-After completing a diversion, the read-write number registers @code{dn}
-and @code{dl} contain the vertical and horizontal size of the diversion.
-Note that only the just processed lines are counted: For the computation
-of @code{dn} and @code{dl}, the requests @code{da} and @code{boxa} are
-handled as if @code{di} and @code{box} had been used -- lines that have
-been already stored in a macro are not taken into account.
-
-@Example
-.\" Center text both horizontally & vertically
-.
-.\" Enclose macro definitions in .eo and .ec
-.\" to avoid the doubling of the backslash
-.eo
-.\" macro .(c starts centering mode
-.de (c
-.  br
-.  ev (c
-.  evc 0
-.  in 0
-.  nf
-.  di @@c
-..
-@endExample
-@Example
-.\" macro .)c terminates centering mode
-.de )c
-.  br
-.  ev
-.  di
-.  nr @@s (((\n[.t]u - \n[dn]u) / 2u) - 1v)
-.  sp \n[@@s]u
-.  ce 1000
-.  @@c
-.  ce 0
-.  sp \n[@@s]u
-.  br
-.  fi
-.  rr @@s
-.  rm @@s
-.  rm @@c
-..
-.\" End of macro definitions, restore escape mechanism
-.ec
-@endExample
-@endDefreg
-
-@DefescList {\\!, , , }
-@DefescListEndx {\\?, , anything, \\?}
-@cindex transparent output (@code{\!}, @code{\?})
-@cindex output, transparent (@code{\!}, @code{\?})
-Prevent requests, macros, and escapes from being interpreted when read
-into a diversion.  Both escapes take the given text and
-@dfn{transparently} embed it into the diversion.  This is useful for
-macros that shouldn't be invoked until the diverted text is actually
-output.
-
-The @code{\!} escape transparently embeds text up to and including the
-end of the line.  The @code{\?} escape transparently embeds text until
-the next occurrence of the @code{\?} escape.  Example:
-
-@Example
-\?@var{anything}\?
-@endExample
-
-@cindex @code{\?}, and copy-in mode
-@cindex copy-in mode, and @code{\?}
-@cindex mode, copy-in, and @code{\?}
-@cindex @code{\!}, and copy-in mode
-@cindex copy-in mode, and @code{\!}
-@cindex mode, copy-in, and @code{\!}
-@noindent
-@var{anything} may not contain newlines; use @code{\!}  to embed
-newlines in a diversion.  The escape sequence @code{\?} is also
-recognized in copy mode and turned into a single internal code; it is
-this code that terminates @var{anything}.  Thus the following example
-prints@tie{}4.
-
-@Example
-.nr x 1
-.nf
-.di d
-\?\\?\\\\?\\\\\\\\nx\\\\?\\?\?
-.di
-.nr x 2
-.di e
-.d
-.di
-.nr x 3
-.di f
-.e
-.di
-.nr x 4
-.f
-@endExample
-
-Both escapes read the data in copy mode.
-
-@cindex @code{\!}, in top-level diversion
-@cindex top-level diversion, and @code{\!}
-@cindex diversion, top-level, and @code{\!}
-If @code{\!} is used in the top-level diversion, its argument is
-directly embedded into the @code{gtroff} intermediate output.  This can
-be used for example to control a postprocessor that processes the data
-before it is sent to the device driver.
-
-@cindex @code{\?}, in top-level diversion
-@cindex top-level diversion, and @code{\?}
-@cindex diversion, top-level, and @code{\?}
-The @code{\?} escape used in the top-level diversion produces no output
-at all; its argument is simply ignored.
-@endDefesc
-
-@cindex @code{\!}, and @code{output} request
-@cindex @code{output} request, and @code{\!}
-@cindex @code{output} request, and copy-in mode
-@cindex copy-in mode, and @code{output} request
-@cindex mode, copy-in, and @code{output} request
-@Defreq {output, string}
-Emit @var{string} directly to the @code{gtroff} intermediate output
-(subject to copy mode interpretation); this is similar to @code{\!} used
-at the top level.  An initial double quote in @var{string} is stripped
-off to allow initial blanks.
-
-This request can't be used before the first page has started -- if you
-get an error, simply insert @code{.br} before the @code{output} request.
-
-Without argument, @code{output} is ignored.
-
-Use with caution!  It is normally only needed for mark-up used by a
-postprocessor that does something with the output before sending it to
-the output device, filtering out @var{string} again.
-@endDefreq
-
-@Defreq {asciify, div}
-@cindex unformatting diversions (@code{asciify})
-@cindex diversion, unformatting (@code{asciify})
-@cindex @code{trin} request, and @code{asciify}
-@dfn{Unformat} the diversion specified by @var{div} in such a way that
-@acronym{ASCII} characters, characters translated with the @code{trin}
-request, space characters, and some escape sequences that were formatted
-and diverted are treated like ordinary input characters when the
-diversion is reread.  It can be also used for gross hacks; for example,
-the following sets register@tie{}@code{n} to@tie{}1.
-
-@Example
-.tr @@.
-.di x
-@@nr n 1
-.br
-.di
-.tr @@@@
-.asciify x
-.x
-@endExample
-
-Note that @code{asciify} cannot return all items in a diversion back
-to their source equivalent, nodes such as @code{\N[...]} will still
-remain as nodes, so the result cannot be guaranteed to be a pure string.
-
-@xref{Copy-in Mode}.
-@endDefreq
-
-@Defreq {unformat, div}
-Like @code{asciify}, unformat the specified diversion.  However,
-@code{unformat} only unformats spaces and tabs between words.
-Unformatted tabs are treated as input tokens, and spaces are stretchable
-again.
-
-The vertical size of lines is not preserved; glyph information (font,
-font size, space width, etc.)@: is retained.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Environments, Suppressing output, Diversions, gtroff Reference
-@section Environments
-@cindex environments
-
-It happens frequently that some text should be printed in a certain
-format regardless of what may be in effect at the time, for example, in
-a trap invoked macro to print headers and footers.  To solve this
-@code{gtroff} processes text in @dfn{environments}.  An environment
-contains most of the parameters that control text processing.  It is
-possible to switch amongst these environments; by default @code{gtroff}
-processes text in environment@tie{}0.  The following is the information
-kept in an environment.
-
-@itemize @bullet
-@item
-font parameters (size, family, style, glyph height and slant, space and
-sentence space size)
-
-@item
-page parameters (line length, title length, vertical spacing, line
-spacing, indentation, line numbering, centering, right-justifying,
-underlining, hyphenation data)
-
-@item
-fill and adjust mode
-
-@item
-tab stops, tab and leader characters, escape character, no-break and
-hyphen indicators, margin character data
-
-@item
-partially collected lines
-
-@item
-input traps
-
-@item
-drawing and fill colours
-@end itemize
-
-These environments may be given arbitrary names (see @ref{Identifiers},
-for more info).  Old versions of @code{troff} only had environments
-named @samp{0}, @samp{1}, and @samp{2}.
-
-@DefreqList {ev, [@Var{env}]}
-@DefregListEndx {.ev}
-@cindex switching environments (@code{ev})
-@cindex environment, switching (@code{ev})
-@cindex environment number/name register (@code{.ev})
-Switch to another environment.  The argument @var{env} is the name of
-the environment to switch to.  With no argument, @code{gtroff} switches
-back to the previous environment.  There is no limit on the number of
-named environments; they are created the first time that they are
-referenced.  The @code{.ev} read-only register contains the name or
-number of the current environment.  This is a string-valued register.
-
-Note that a call to @code{ev} (with argument) pushes the previously
-active environment onto a stack.  If, say, environments @samp{foo},
-@samp{bar}, and @samp{zap} are called (in that order), the first
-@code{ev} request without parameter switches back to environment
-@samp{bar} (which is popped off the stack), and a second call switches
-back to environment @samp{foo}.
-
-Here is an example:
-
-@Example
-.ev footnote-env
-.fam N
-.ps 6
-.vs 8
-.ll -.5i
-.ev
-
-...
-
-.ev footnote-env
-\(dg Note the large, friendly letters.
-.ev
-@endExample
-@endDefreq
-
-@Defreq {evc, env}
-@cindex copying environment (@code{evc})
-@cindex environment, copying (@code{evc})
-Copy the environment @var{env} into the current environment.
-
-The following environment data is not copied:
-
-@itemize @bullet
-@item
-Partially filled lines.
-
-@item
-The status whether the previous line was interrupted.
-
-@item
-The number of lines still to center, or to right-justify, or to
-underline (with or without underlined spaces); they are set to zero.
-
-@item
-The status whether a temporary indentation is active.
-
-@item
-Input traps and its associated data.
-
-@item
-Line numbering mode is disabled; it can be reactivated with @w{@samp{.nm
-+0}}.
-
-@item
-The number of consecutive hyphenated lines (set to zero).
-@end itemize
-@endDefreq
-
-@DefregList {.w}
-@DefregItemx {.cht}
-@DefregItemx {.cdp}
-@DefregListEndx {.csk}
-@cindex environment, dimensions of last glyph (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
-@cindex width, of last glyph (@code{.w})
-@cindex height, of last glyph (@code{.cht})
-@cindex depth, of last glyph (@code{.cdp})
-@cindex skew, of last glyph (@code{.csk})
-@cindex last glyph, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
-@cindex glyph, last, dimensions (@code{.w}, @code{.cht}, @code{.cdp}, @code{.csk})
-The @code{\n[.w]} register contains the width of the last glyph added to
-the current environment.
-
-The @code{\n[.cht]} register contains the height of the last glyph added
-to the current environment.
-
-The @code{\n[.cdp]} register contains the depth of the last glyph added
-to the current environment.  It is positive for glyphs extending below
-the baseline.
-
-The @code{\n[.csk]} register contains the @dfn{skew} (how far to the
-right of the glyph's center that @code{gtroff} should place an accent)
-of the last glyph added to the current environment.
-@endDefreg
-
-@Defreg {.n}
-@cindex environment, previous line length (@code{.n})
-@cindex line length, previous (@code{.n})
-@cindex length of previous line (@code{.n})
-@cindex previous line length (@code{.n})
-The @code{\n[.n]} register contains the length of the previous output
-line in the current environment.
-@endDefreg
-
-
-@c =====================================================================
-
-@node Suppressing output, Colors, Environments, gtroff Reference
-@section Suppressing output
-
-@Defesc {\\O, , num, }
-@cindex suppressing output (@code{\O})
-@cindex output, suppressing (@code{\O})
-Disable or enable output depending on the value of @var{num}:
-
-@table @samp
-@item \O0
-Disable any glyphs from being emitted to the device driver, provided
-that the escape occurs at the outer level (see @code{\O[3]} and
-@code{\O[4]}).  Motion is not suppressed so effectively @code{\O[0]}
-means @emph{pen up}.
-
-@item \O1
-Enable output of glyphs, provided that the escape occurs at the outer
-level.
-@end table
-
-@vindex opminx
-@vindex opminy
-@vindex opmaxx
-@vindex opmaxy
-@code{\O0} and @code{\O1} also reset the four registers @samp{opminx},
-@samp{opminy}, @samp{opmaxx}, and @samp{opmaxy} to @minus{}1.
-@xref{Register Index}.  These four registers mark the top left and
-bottom right hand corners of a box that encompasses all written glyphs.
-
-For example the input text:
-
-@Example
-Hello \O[0]world \O[1]this is a test.
-@endExample
-
-@noindent
-produces the following output:
-
-@Example
-Hello       this is a test.
-@endExample
-
-@table @samp
-@item \O2
-Provided that the escape occurs at the outer level, enable output of
-glyphs and also write out to @code{stderr} the page number and four
-registers encompassing the glyphs previously written since the last call
-to @code{\O}.
-
-@item \O3
-Begin a nesting level.  At start-up, @code{gtroff} is at outer level.
-The current level is contained within the read-only register @code{.O}.
-@xref{Built-in Registers}.
-
-@item \O4
-End a nesting level.  The current level is contained within the
-read-only register @code{.O}.  @xref{Built-in Registers}.
-
-@item \O[5@var{P}@var{filename}]
-This escape is @code{grohtml} specific.  Provided that this escape
-occurs at the outer nesting level write the @code{filename} to
-@code{stderr}.  The position of the image, @var{P}, must be specified
-and must be one of @code{l}, @code{r}, @code{c}, or@tie{}@code{i} (left,
-right, centered, inline).  @var{filename} is associated with the
-production of the next inline image.
-@end table
-@endDefesc
-
-
-@c =====================================================================
-
-@node Colors, I/O, Suppressing output, gtroff Reference
-@section Colors
-@cindex colors
-
-@DefreqList {color, [@Var{n}]}
-@DefregListEndx {.color}
-If @var{n} is missing or non-zero, activate colors (this is the
-default); otherwise, turn it off.
-
-The read-only number register @code{.color} is@tie{}1 if colors are
-active, 0@tie{}otherwise.
-
-Internally, @code{color} sets a global flag; it does not produce a
-token.  Similar to the @code{cp} request, you should use it at the
-beginning of your document to control color output.
-
-Colors can be also turned off with the @option{-c} command line option.
-@endDefreq
-
-@Defreq {defcolor, ident scheme color_components}
-Define color with name @var{ident}.  @var{scheme} can be one of the
-following values: @code{rgb} (three components), @code{cmy} (three
-components), @code{cmyk} (four components), and @code{gray} or
-@code{grey} (one component).
-
-@cindex default color
-@cindex color, default
-Color components can be given either as a hexadecimal string or as
-positive decimal integers in the range 0--65535.  A hexadecimal string
-contains all color components concatenated.  It must start with either
-@code{#} or @code{##}; the former specifies hex values in the range
-0--255 (which are internally multiplied by@tie{}257), the latter in the
-range 0--65535.  Examples: @code{#FFC0CB} (pink), @code{##ffff0000ffff}
-(magenta).  The default color name @c{default} can't be redefined; its
-value is device-specific (usually black).  It is possible that the
-default color for @code{\m} and @code{\M} is not identical.
-
-@cindex @code{f} unit, and colors
-@cindex unit, @code{f}, and colors
-A new scaling indicator@tie{}@code{f} has been introduced, which
-multiplies its value by 65536; this makes it convenient to specify color
-components as fractions in the range 0 to@tie{}1 (1f equals 65536u).
-Example:
-
-@Example
-.defcolor darkgreen rgb 0.1f 0.5f 0.2f
-@endExample
-
-Note that @code{f} is the default scaling indicator for the
-@code{defcolor} request, thus the above statement is equivalent to
-
-@Example
-.defcolor darkgreen rgb 0.1 0.5 0.2
-@endExample
-@endDefreq
-
-@DefreqList {gcolor, [@Var{color}]}
-@DefescItemx {\\m, , c, }
-@DefescItem {\\m, @Lparen{}, co, }
-@DefescItem {\\m, @Lbrack{}, color, @Rbrack{}}
-@DefregListEndx {.m}
-Set (glyph) drawing color.  The following examples show how to turn the
-next four words red.
-
-@Example
-.gcolor red
-these are in red
-.gcolor
-and these words are in black.
-@endExample
-
-@Example
-\m[red]these are in red\m[] and these words are in black.
-@endExample
-
-The escape @code{\m[]} returns to the previous color, as does a call to
-@code{gcolor} without an argument.
-
-@cindex drawing color name register (@code{.m})
-@cindex name, drawing color, register (@code{.m})
-@cindex color name, drawing, register (@code{.m})
-The name of the current drawing color is available in the read-only,
-string-valued number register @samp{.m}.
-
-The drawing color is associated with the current environment
-(@pxref{Environments}).
-
-Note that @code{\m} doesn't produce an input token in @code{gtroff}.  As
-a consequence, it can be used in requests like @code{mc} (which expects
-a single character as an argument) to change the color on the fly:
-
-@Example
-.mc \m[red]x\m[]
-@endExample
-@endDefesc
-
-@DefreqList {fcolor, [@Var{color}]}
-@DefescItemx {\\M, , c, }
-@DefescItem {\\M, @Lparen{}, co, }
-@DefescItem {\\M, @Lbrack{}, color, @Rbrack{}}
-@DefregListEndx {.M}
-Set fill (background) color for filled objects drawn with the
-@code{\D'@dots{}'} commands.
-
-A red ellipse can be created with the following code:
-
-@Example
-\M[red]\h'0.5i'\D'E 2i 1i'\M[]
-@endExample
-
-The escape @code{\M[]} returns to the previous fill color, as does a
-call to @code{fcolor} without an argument.
-
-@cindex background color name register (@code{.M})
-@cindex name, background color, register (@code{.M})
-@cindex color name, background, register (@code{.M})
-@cindex fill color name register (@code{.M})
-@cindex name, fill color, register (@code{.M})
-@cindex color name, fill, register (@code{.M})
-The name of the current fill (background) color is available in the
-read-only, string-valued number register @samp{.M}.
-
-The fill color is associated with the current environment
-(@pxref{Environments}).
-
-Note that @code{\M} doesn't produce an input token in @code{gtroff}.
-@endDefesc
-
-
-@c =====================================================================
-
-@node I/O, Postprocessor Access, Colors, gtroff Reference
-@section I/O
-@cindex i/o
-@cindex input and output requests
-@cindex requests for input and output
-@cindex output and input requests
-
-@code{gtroff} has several requests for including files:
-
-@Defreq {so, file}
-@cindex including a file (@code{so})
-@cindex file, inclusion (@code{so})
-Read in the specified @var{file} and includes it in place of the
-@code{so} request.  This is quite useful for large documents, e.g.@:
-keeping each chapter in a separate file.  @xref{gsoelim}, for more
-information.
-
-Since @code{gtroff} replaces the @code{so} request with the contents of
-@code{file}, it makes a difference whether the data is terminated with a
-newline or not: Assuming that file @file{xxx} contains the word
-@samp{foo} without a final newline, this
-
-@Example
-This is
-.so xxx
-bar
-@endExample
-
-@noindent
-yields @samp{This is foobar}.
-
-The search path for @var{file} can be controlled with the @option{-I}
-command line option.
-@endDefreq
-
-@Defreq {pso, command}
-Read the standard output from the specified @var{command} and includes
-it in place of the @code{pso} request.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-This request causes an error if used in safer mode (which is the
-default).  Use @code{groff}'s or @code{troff}'s @option{-U} option to
-activate unsafe mode.
-
-The comment regarding a final newline for the @code{so} request is valid
-for @code{pso} also.
-@endDefreq
-
-@Defreq {mso, file}
-Identical to the @code{so} request except that @code{gtroff} searches
-for the specified @var{file} in the same directories as macro files for
-the the @option{-m} command line option.  If the file name to be
-included has the form @file{@var{name}.tmac} and it isn't found,
-@code{mso} tries to include @file{tmac.@var{name}} and vice versa.
-If the file does not exist, a warning of type @samp{file} is emitted.
-@xref{Debugging}, for information about warnings.
-@endDefreq
-
-@DefreqList {trf, file}
-@DefreqListEndx {cf, file}
-@cindex transparent output (@code{cf}, @code{trf})
-@cindex output, transparent (@code{cf}, @code{trf})
-@cindex @code{cf} request, and copy-in mode
-@cindex copy-in mode, and @code{cf} request
-@cindex mode, copy-in, and @code{cf} request
-@cindex @code{trf} request, and copy-in mode
-@cindex copy-in mode, and @code{trf} request
-@cindex mode, copy-in, and @code{trf} request
-Transparently output the contents of @var{file}.  Each line is output as
-if it were preceded by @code{\!}; however, the lines are @emph{not}
-subject to copy mode interpretation.  If the file does not end with a
-newline, then a newline is added (@code{trf} only).  For example, to
-define a macro@tie{}@code{x} containing the contents of
-file@tie{}@file{f}, use
-
-@Example
-.ev 1
-.di x
-.trf f
-.di
-.ev
-@endExample
-
-@noindent
-The calls to @code{ev} prevent that the current partial input line
-becomes part of the diversion.
-
-Both @code{trf} and @code{cf}, when used in a diversion, embeds an
-object in the diversion which, when reread, causes the contents of
-@var{file} to be transparently copied through to the output.  In
-@acronym{UNIX} @code{troff}, the contents of @var{file} is immediately
-copied through to the output regardless of whether there is a current
-diversion; this behaviour is so anomalous that it must be considered a
-bug.
-
-@cindex @code{trf} request, and invalid characters
-@cindex characters, invalid for @code{trf} request
-@cindex invalid characters for @code{trf} request
-
-While @code{cf} copies the contents of @var{file} completely
-unprocessed, @code{trf} disallows characters such as NUL that are not
-valid @code{gtroff} input characters (@pxref{Identifiers}).
-
-For @code{cf}, within a diversion, `completely unprocessed' means that
-each line of a file to be inserted is handled as if it were preceded by
-@code{\!\\!}.
-
-Both requests cause a line break.
-@endDefreq
-
-@Defreq {nx, [@Var{file}]}
-@cindex processing next file (@code{nx})
-@cindex file, processing next (@code{nx})
-@cindex next file, processing (@code{nx})
-Force @code{gtroff} to continue processing of the file specified as an
-argument.  If no argument is given, immediately jump to the end of file.
-@endDefreq
-
-@Defreq {rd, [@Var{prompt} [@Var{arg1} @Var{arg2} @dots{}]]}
-@cindex reading from standard input (@code{rd})
-@cindex standard input, reading from (@code{rd})
-@cindex input, standard, reading from (@code{rd})
-Read from standard input, and include what is read as though it were
-part of the input file.  Text is read until a blank line is encountered.
-
-If standard input is a TTY input device (keyboard), write @var{prompt}
-to standard error, followed by a colon (or send BEL for a beep if no
-argument is given).
-
-Arguments after @var{prompt} are available for the input.  For example,
-the line
-
-@Example
-.rd data foo bar
-@endExample
-
-with the input @w{@samp{This is \$2.}} prints
-
-@Example
-This is bar.
-@endExample
-@endDefreq
-
-@cindex form letters
-@cindex letters, form
-Using the @code{nx} and @code{rd} requests, it is easy to set up form
-letters.  The form letter template is constructed like this, putting the
-following lines into a file called @file{repeat.let}:
-
-@Example
-.ce
-\*(td
-.sp 2
-.nf
-.rd
-.sp
-.rd
-.fi
-Body of letter.
-.bp
-.nx repeat.let
-@endExample
-
-@cindex @code{ex} request, used with @code{nx} and @code{rd}
-@noindent
-When this is run, a file containing the following lines should be
-redirected in.  Note that requests included in this file are executed as
-though they were part of the form letter.  The last block of input is
-the @code{ex} request, which tells @code{groff} to stop processing.  If
-this was not there, @code{groff} would not know when to stop.
-
-@Example
-Trent A. Fisher
-708 NW 19th Av., #202
-Portland, OR  97209
-
-Dear Trent,
-
-Len Adollar
-4315 Sierra Vista
-San Diego, CA  92103
-
-Dear Mr. Adollar,
-
-.ex
-@endExample
-
-@Defreq {pi, pipe}
-Pipe the output of @code{gtroff} to the shell command(s) specified by
-@var{pipe}.  This request must occur before @code{gtroff} has a chance
-to print anything.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-@code{pi} causes an error if used in safer mode (which is the default).
-Use @code{groff}'s or @code{troff}'s @option{-U} option to activate
-unsafe mode.
-
-Multiple calls to @code{pi} are allowed, acting as a chain.  For
-example,
-
-@Example
-.pi foo
-.pi bar
-...
-@endExample
-
-is the same as @w{@samp{.pi foo | bar}}.
-
-@cindex @code{groff}, and @code{pi} request
-@cindex @code{pi} request, and @code{groff}
-Note that the intermediate output format of @code{gtroff} is piped to
-the specified commands.  Consequently, calling @code{groff} without the
-@option{-Z} option normally causes a fatal error.
-@endDefreq
-
-@DefreqList {sy, cmds}
-@DefregListEndx {systat}
-Execute the shell command(s) specified by @var{cmds}.  The output is not
-saved anyplace, so it is up to the user to do so.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-This request causes an error if used in safer mode (which is the
-default).  Use @code{groff}'s or @code{troff}'s @option{-U} option to
-activate unsafe mode.
-
-For example, the following code fragment introduces the current time
-into a document:
-
-@cindex time, current
-@cindex current time
-@pindex perl
-@Example
-.sy perl -e 'printf ".nr H %d\\n.nr M %d\\n.nr S %d\\n",\
-             (localtime(time))[2,1,0]' > /tmp/x\n[$$]
-.so /tmp/x\n[$$]
-.sy rm /tmp/x\n[$$]
-\nH:\nM:\nS
-@endExample
-
-@noindent
-Note that this works by having the @code{perl} script (run by @code{sy})
-print out the @code{nr} requests that set the number registers
-@code{H}, @code{M}, and @code{S}, and then reads those commands in with
-the @code{so} request.
-
-For most practical purposes, the number registers @code{seconds},
-@code{minutes}, and @code{hours}, which are initialized at start-up of
-@code{gtroff}, should be sufficient.  Use the @code{af} request to get a
-formatted output:
-
-@Example
-.af hours 00
-.af minutes 00
-.af seconds 00
-\n[hours]:\n[minutes]:\n[seconds]
-@endExample
-
-@cindex @code{system()} return value register (@code{systat})
-The @code{systat} read-write number register contains the return value
-of the @code{system()} function executed by the last @code{sy} request.
-@endDefreq
-
-@DefreqList {open, stream file}
-@DefreqListEndx {opena, stream file}
-@cindex opening file (@code{open})
-@cindex file, opening (@code{open})
-@cindex appending to a file (@code{opena})
-@cindex file, appending to (@code{opena})
-Open the specified @var{file} for writing and associates the specified
-@var{stream} with it.
-
-The @code{opena} request is like @code{open}, but if the file exists,
-append to it instead of truncating it.
-
-@cindex safer mode
-@cindex mode, safer
-@cindex unsafe mode
-@cindex mode, unsafe
-Both @code{open} and @code{opena} cause an error if used in safer mode
-(which is the default).  Use @code{groff}'s or @code{troff}'s
-@option{-U} option to activate unsafe mode.
-@endDefreq
-
-@DefreqList {write, stream data}
-@DefreqListEndx {writec, stream data}
-@cindex copy-in mode, and @code{write} request
-@cindex @code{write} request, and copy-in mode
-@cindex mode, copy-in, and @code{write} request
-@cindex copy-in mode, and @code{writec} request
-@cindex @code{writec} request, and copy-in mode
-@cindex mode, copy-in, and @code{writec} request
-@cindex writing to file (@code{write}, @code{writec})
-@cindex file, writing to (@code{write}, @code{writec})
-Write to the file associated with the specified @var{stream}.  The
-stream must previously have been the subject of an open request.  The
-remainder of the line is interpreted as the @code{ds} request reads its
-second argument: A leading @samp{"} is stripped, and it is read in
-copy-in mode.
-
-The @code{writec} request is like @code{write}, but only @code{write}
-appends a newline to the data.
-@endDefreq
-
-@Defreq {writem, stream xx}
-@cindex @code{asciify} request, and @code{writem}
-Write the contents of the macro or string @var{xx} to the file
-associated with the specified @var{stream}.
-
-@cindex @code{writem} request, and copy-in mode
-@cindex copy-in mode, and @code{writem} request
-@cindex mode, copy-in, and @code{writem} request
-@var{xx} is read in copy mode, i.e., already formatted elements are
-ignored.  Consequently, diversions must be unformatted with the
-@code{asciify} request before calling @code{writem}.  Usually, this
-means a loss of information.
-@endDefreq
-
-@Defreq {close, stream}
-@cindex closing file (@code{close})
-@cindex file, closing (@code{close})
-Close the specified @var{stream}; the stream is no longer an acceptable
-argument to the @code{write} request.
-
-Here a simple macro to write an index entry.
-
-@Example
-.open idx test.idx
-.
-.de IX
-.  write idx \\n[%] \\$*
-..
-.
-.IX test entry
-.
-.close idx
-@endExample
-@endDefreq
-
-@DefescList {\\V, , e, }
-@DefescItem {\\V, @Lparen{}, ev, }
-@DefescListEnd {\\V, @Lbrack{}, env, @Rbrack{}}
-@cindex @code{\V}, and copy-in mode
-@cindex copy-in mode, and @code{\V}
-@cindex mode, copy-in, and @code{\V}
-Interpolate the contents of the specified environment variable @var{env}
-(one-character name@tie{}@var{e}, two-character name @var{ev}) as
-returned by the function @code{getenv}.  @code{\V} is interpreted in
-copy-in mode.
-@endDefesc
-
-
-@c =====================================================================
-
-@node Postprocessor Access, Miscellaneous, I/O, gtroff Reference
-@section Postprocessor Access
-@cindex postprocessor access
-@cindex access of postprocessor
-
-There are two escapes that give information directly to the
-postprocessor.  This is particularly useful for embedding
-@sc{PostScript} into the final document.
-
-@DefreqList {device, xxx}
-@DefescListEndx {\\X, ', xxx, '}
-Embeds its argument into the @code{gtroff} output preceded with
-@w{@samp{x X}}.
-
-@cindex @code{\&}, in @code{\X}
-@cindex @code{\)}, in @code{\X}
-@cindex @code{\%}, in @code{\X}
-@ifnotinfo
-@cindex @code{\:}, in @code{\X}
-@end ifnotinfo
-@ifinfo
-@cindex @code{\@r{<colon>}}, in @code{\X}
-@end ifinfo
-The escapes @code{\&}, @code{\)}, @code{\%}, and @code{\:} are ignored
-within @code{\X}, @w{@samp{\ }} and @code{\~} are converted to single
-space characters.  All other escapes (except @code{\\}, which produces a
-backslash) cause an error.
-
-@cindex @code{device} request, and copy-in mode
-@cindex copy-in mode, and @code{device} request
-@cindex mode, copy-in, and @code{device} request
-Contrary to @code{\X}, the @code{device} request simply processes its
-argument in copy mode (@pxref{Copy-in Mode}).
-
-@kindex use_charnames_in_special
-@pindex DESC@r{, and @code{use_charnames_in_special}}
-@cindex @code{\X}, and special characters
-If the @samp{use_charnames_in_special} keyword is set in the @file{DESC}
-file, special characters no longer cause an error; they are simply
-output verbatim.  Additionally, the backslash is represented as
-@code{\\}.
-
-@samp{use_charnames_in_special} is currently used by @code{grohtml}
-only.
-@endDefesc
-
-@DefreqList {devicem, xx}
-@DefescItemx {\\Y, , n, }
-@DefescItem {\\Y, @Lparen{}, nm, }
-@DefescListEnd {\\Y, @Lbrack{}, name, @Rbrack{}}
-This is approximately equivalent to @samp{\X'\*[@var{name}]'}
-(one-character name@tie{}@var{n}, two-character name @var{nm}).
-However, the contents of the string or macro @var{name} are not
-interpreted; also it is permitted for @var{name} to have been defined as
-a macro and thus contain newlines (it is not permitted for the argument
-to @code{\X} to contain newlines).  The inclusion of newlines requires
-an extension to the @acronym{UNIX} @code{troff} output format, and
-confuses drivers that do not know about this extension (@pxref{Device
-Control Commands}).
-@endDefesc
-
-@xref{Output Devices}.
-
-
-@c =====================================================================
-
-@node Miscellaneous, Gtroff Internals, Postprocessor Access, gtroff Reference
-@section Miscellaneous
-
-This section documents parts of @code{gtroff} that cannot (yet) be
-categorized elsewhere in this manual.
-
-@Defreq {nm, [@Var{start} [@Var{inc} [@Var{space} [@Var{indent}]]]]}
-@cindex printing line numbers (@code{nm})
-@cindex line numbers, printing (@code{nm})
-@cindex numbers, line, printing (@code{nm})
-Print line numbers.  @var{start} is the line number of the @emph{next}
-output line.  @var{inc} indicates which line numbers are printed.  For
-example, the value@tie{}5 means to emit only line numbers that are
-multiples of@tie{}5; this defaults to@tie{}1.  @var{space} is the space
-to be left between the number and the text; this defaults to one digit
-space.  The fourth argument is the indentation of the line numbers,
-defaulting to zero.  Both @var{space} and @var{indent} are given as
-multiples of digit spaces; they can be negative also.  Without any
-arguments, line numbers are turned off.
-
-@code{gtroff} reserves three digit spaces for the line number (which is
-printed right-justified) plus the amount given by @var{indent}; the
-output lines are concatenated to the line numbers, separated by
-@var{space}, and @emph{without} reducing the line length.  Depending on
-the value of the horizontal page offset (as set with the @code{po}
-request), line numbers that are longer than the reserved space stick
-out to the left, or the whole line is moved to the right.
-
-Parameters corresponding to missing arguments are not changed; any
-non-digit argument (to be more precise, any argument starting with a
-character valid as a delimiter for identifiers) is also treated as
-missing.
-
-If line numbering has been disabled with a call to @code{nm} without an
-argument, it can be reactivated with @samp{.nm +0}, using the previously
-active line numbering parameters.
-
-The parameters of @code{nm} are associated with the current environment
-(@pxref{Environments}).  The current output line number is available in
-the number register @code{ln}.
-
-@Example
-.po 1m
-.ll 2i
-This test shows how line numbering works with groff.
-.nm 999
-This test shows how line numbering works with groff.
-.br
-.nm xxx 3 2
-.ll -\w'0'u
-This test shows how line numbering works with groff.
-.nn 2
-This test shows how line numbering works with groff.
-@endExample
-
-@noindent
-And here the result:
-
-@Example
- This  test shows how
- line numbering works
- 999 with   groff.   This
-1000 test shows how  line
-1001 numbering works with
-1002 groff.
-      This test shows how
-      line      numbering
- works  with  groff.
- This test shows how
-1005  line      numbering
-      works with groff.
-@endExample
-@endDefreq
-
-@Defreq {nn, [@Var{skip}]}
-Temporarily turn off line numbering.  The argument is the number of
-lines not to be numbered; this defaults to@tie{}1.
-@endDefreq
-
-@Defreq {mc, glyph [@Var{dist}]}
-@cindex margin glyph (@code{mc})
-@cindex glyph, for margins (@code{mc})
-Print a @dfn{margin character} to the right of the
-text.@footnote{@dfn{Margin character} is a misnomer since it is an
-output glyph.}  The first argument is the glyph to be printed.  The
-second argument is the distance away from the right margin.  If missing,
-the previously set value is used; default is 10@dmn{pt}).  For text
-lines that are too long (that is, longer than the text length plus
-@var{dist}), the margin character is directly appended to the lines.
-
-With no arguments the margin character is turned off.  If this occurs
-before a break, no margin character is printed.
-
-For compatibility with @acronym{AT&T} @code{troff}, a call to @code{mc}
-to set the margin character can't be undone immediately; at least one
-line gets a margin character.  Thus
-
-@Example
-.ll 1i
-.mc \[br]
-.mc
-xxx
-.br
-xxx
-@endExample
-
-@noindent
-produces
-
-@Example
-xxx        |
-xxx
-@endExample
-
-@cindex @code{tl} request, and @code{mc}
-For empty lines and lines produced by the @code{tl} request no margin
-character is emitted.
-
-The margin character is associated with the current environment
-(@pxref{Environments}).
-
-@pindex nrchbar
-@pindex changebar
-This is quite useful for indicating text that has changed, and, in fact,
-there are programs available for doing this (they are called
-@code{nrchbar} and @code{changebar} and can be found in any
-@samp{comp.sources.unix} archive).
-
-@Example
-.ll 3i
-.mc |
-This paragraph is highlighted with a margin
-character.
-.sp
-Note that vertical space isn't marked.
-.br
-\&
-.br
-But we can fake it with `\&'.
-@endExample
-
-Result:
-
-@Example
-This  paragraph is highlighted |
-with a margin character.       |
-
-Note that vertical space isn't |
-marked.                        |
-                               |
-But we can fake it with `\&'.  |
-@endExample
-@endDefreq
-
-@DefreqList {psbb, filename}
-@DefregItemx {llx}
-@DefregItemx {lly}
-@DefregItemx {urx}
-@DefregListEndx {ury}
-@cindex PostScript, bounding box
-@cindex bounding box
-Retrieve the bounding box of the @sc{PostScript} image found in
-@var{filename}.  The file must conform to Adobe's @dfn{Document
-Structuring Conventions} (DSC); the command searches for a
-@code{%%BoundingBox} comment and extracts the bounding box values into
-the number registers @code{llx}, @code{lly}, @code{urx}, and @code{ury}.
-If an error occurs (for example, @code{psbb} cannot find the
-@code{%%BoundingBox} comment), it sets the four number registers to
-zero.
-
-The search path for @var{filename} can be controlled with the
-@option{-I} command line option.
-@endDefreq
-
-
-@c =====================================================================
-
-@node Gtroff Internals, Debugging, Miscellaneous, gtroff Reference
-@section @code{gtroff} Internals
-
-@cindex input token
-@cindex token, input
-@cindex output node
-@cindex node, output
-@code{gtroff} processes input in three steps.  One or more input
-characters are converted to an @dfn{input token}.@footnote{Except the
-escapes @code{\f}, @code{\F}, @code{\H}, @code{\m}, @code{\M},
-@code{\R}, @code{\s}, and @code{\S}, which are processed immediately if
-not in copy-in mode.}  Then, one or more input tokens are converted to
-an @dfn{output node}.  Finally, output nodes are converted to the
-intermediate output language understood by all output devices.
-
-Actually, before step one happens, @code{gtroff} converts certain escape
-sequences into reserved input characters (not accessible by the user);
-such reserved characters are used for other internal processing also --
-this is the very reason why not all characters are valid input.
-@xref{Identifiers}, for more on this topic.
-
-For example, the input string @samp{fi\[:u]} is converted into a
-character token @samp{f}, a character token @samp{i}, and a special
-token @samp{:u} (representing u@tie{}umlaut).  Later on, the character
-tokens @samp{f} and @samp{i} are merged to a single output node
-representing the ligature glyph @samp{fi} (provided the current font has
-a glyph for this ligature); the same happens with @samp{:u}.  All output
-glyph nodes are `processed', which means that they are invariably
-associated with a given font, font size, advance width, etc.  During the
-formatting process, @code{gtroff} itself adds various nodes to control
-the data flow.
-
-Macros, diversions, and strings collect elements in two chained lists: a
-list of input tokens that have been passed unprocessed, and a list of
-output nodes.  Consider the following the diversion.
-
-@Example
-.di xxx
-a
-\!b
-c
-.br
-.di
-@endExample
-
-@noindent
-It contains these elements.
-
-@multitable {@i{vertical size node}} {token list} {element number}
-@item node list               @tab token list @tab element number
-
-@item @i{line start node}     @tab ---        @tab 1
-@item @i{glyph node @code{a}} @tab ---        @tab 2
-@item @i{word space node}     @tab ---        @tab 3
-@item ---                     @tab @code{b}   @tab 4
-@item ---                     @tab @code{\n}  @tab 5
-@item @i{glyph node @code{c}} @tab ---        @tab 6
-@item @i{vertical size node}  @tab ---        @tab 7
-@item @i{vertical size node}  @tab ---        @tab 8
-@item ---                     @tab @code{\n}  @tab 9
-@end multitable
-
-@cindex @code{\v}, internal representation
-@noindent
-Elements 1, 7, and@tie{}8 are inserted by @code{gtroff}; the latter two
-(which are always present) specify the vertical extent of the last line,
-possibly modified by @code{\x}.  The @code{br} request finishes the
-current partial line, inserting a newline input token, which is
-subsequently converted to a space when the diversion is reread.  Note
-that the word space node has a fixed width that isn't stretchable
-anymore.  To convert horizontal space nodes back to input tokens, use
-the @code{unformat} request.
-
-Macros only contain elements in the token list (and the node list is
-empty); diversions and strings can contain elements in both lists.
-
-Note that the @code{chop} request simply reduces the number of elements
-in a macro, string, or diversion by one.  Exceptions are
-@dfn{compatibility save} and @dfn{compatibility ignore} input tokens,
-which are ignored.  The @code{substring} request also ignores those
-input tokens.
-
-Some requests like @code{tr} or @code{cflags} work on glyph identifiers
-only; this means that the associated glyph can be changed without
-destroying this association.  This can be very helpful for substituting
-glyphs.  In the following example, we assume that glyph @samp{foo} isn't
-available by default, so we provide a substitution using the
-@code{fchar} request and map it to input character @samp{x}.
-
-@Example
-.fchar \[foo] foo
-.tr x \[foo]
-@endExample
-
-@noindent
-Now let us assume that we install an additional special font @samp{bar}
-that has glyph @samp{foo}.
-
-@Example
-.special bar
-.rchar \[foo]
-@endExample
-
-@noindent
-Since glyphs defined with @code{fchar} are searched before glyphs in
-special fonts, we must call @code{rchar} to remove the definition of the
-fallback glyph.  Anyway, the translation is still active; @samp{x} now
-maps to the real glyph @samp{foo}.
-
-@cindex compatibility mode, and parameters
-@cindex mode, compatibility, and parameters
-@cindex arguments, and compatibility mode
-@cindex parameters, and compatibility mode
-@cindex macro arguments, and compatibility mode
-@cindex request arguments, and compatibility mode
-Macro and request arguments preserve the compatibility mode:
-
-@Example
-.cp 1     \" switch to compatibility mode
-.de xx
-\\$1
-..
-.cp 0     \" switch compatibility mode off
-.xx caf\['e]
-    @result{} café
-@endExample
-
-@noindent
-Since compatibility mode is on while @code{de} is called, the macro
-@code{xx} activates compatibility mode while executing.  Argument
-@code{$1} can still be handled properly because it inherits the
-compatibility mode status which was active at the point where @code{xx}
-is called.
-
-After expansion of the parameters, the compatibility save and restore
-tokens are removed.
-
-
-@c =====================================================================
-
-@node Debugging, Implementation Differences, Gtroff Internals, gtroff Reference
-@section Debugging
-@cindex debugging
-
-@code{gtroff} is not easy to debug, but there are some useful features
-and strategies for debugging.
-
-@Defreq {lf, line [@Var{filename}]}
-@pindex soelim
-@cindex multi-file documents
-@cindex documents, multi-file
-@cindex setting input line number (@code{lf})
-@cindex input line number, setting (@code{lf})
-@cindex number, input line, setting (@code{lf})
-Change the line number and optionally the file name @code{gtroff} shall
-use for error and warning messages.  @var{line} is the input line number
-of the @emph{next} line.
-
-Without argument, the request is ignored.
-
-This is a debugging aid for documents that are split into many files,
-then put together with @code{soelim} and other preprocessors.  Usually,
-it isn't invoked manually.
-
-Note that other @code{troff} implementations (including the original
-@acronym{AT&T} version) handle @code{lf} differently.  For them,
-@var{line} changes the line number of the @emph{current} line.
-@endDefreq
-
-@DefreqList {tm, string}
-@DefreqItemx {tm1, string}
-@DefreqListEndx {tmc, string}
-@cindex printing to stderr (@code{tm}, @code{tm1}, @code{tmc})
-@cindex stderr, printing to (@code{tm}, @code{tm1}, @code{tmc})
-Send @var{string} to the standard error output; this is very useful for
-printing debugging messages among other things.
-
-@cindex @code{tm} request, and copy-in mode
-@cindex copy-in mode, and @code{tm} request
-@cindex mode, copy-in, and @code{tm} request
-@cindex @code{tm1} request, and copy-in mode
-@cindex copy-in mode, and @code{tm1} request
-@cindex mode, copy-in, and @code{tm1} request
-@cindex @code{tmc} request, and copy-in mode
-@cindex copy-in mode, and @code{tmc} request
-@cindex mode, copy-in, and @code{tmc} request
-@var{string} is read in copy mode.
-
-The @code{tm} request ignores leading spaces of @var{string}; @code{tm1}
-handles its argument similar to the @code{ds} request: a leading double
-quote in @var{string} is stripped to allow initial blanks.
-
-The @code{tmc} request is similar to @code{tm1} but does not append a
-newline (as is done in @code{tm} and @code{tm1}).
-@endDefreq
-
-@Defreq {ab, [@Var{string}]}
-@cindex aborting (@code{ab})
-Similar to the @code{tm} request, except that it causes @code{gtroff} to
-stop processing.  With no argument it prints @samp{User Abort.} to
-standard error.
-@endDefreq
-
-@Defreq {ex, }
-@cindex @code{ex} request, use in debugging
-@cindex exiting (@code{ex})
-The @code{ex} request also causes @code{gtroff} to stop processing; see
-also @ref{I/O}.
-@endDefreq
-
-When doing something involved it is useful to leave the debugging
-statements in the code and have them turned on by a command line flag.
-
-@Example
-.if \n(DB .tm debugging output
-@endExample
-
-@noindent
-To activate these statements say
-
-@Example
-groff -rDB=1 file
-@endExample
-
-If it is known in advance that there are many errors and no useful
-output, @code{gtroff} can be forced to suppress formatted output with
-the @option{-z} flag.
-
-@Defreq {pev, }
-@cindex dumping environments (@code{pev})
-@cindex environments, dumping (@code{pev})
-Print the contents of the current environment and all the currently
-defined environments (both named and numbered) on @code{stderr}.
-@endDefreq
-
-@Defreq {pm, }
-@cindex dumping symbol table (@code{pm})
-@cindex symbol table, dumping (@code{pm})
-Print the entire symbol table on @code{stderr}.  Names of all defined
-macros, strings, and diversions are print together with their size in
-bytes.  Since @code{gtroff} sometimes adds nodes by itself, the returned
-size can be larger than expected.
-
-This request differs from @acronym{UNIX} @code{troff}: @code{gtroff}
-reports the sizes of diversions, ignores an additional argument to print
-only the total of the sizes, and the size isn't returned in blocks of
-128 characters.
-@endDefreq
-
-@Defreq {pnr, }
-@cindex dumping number registers (@code{pnr})
-@cindex number registers, dumping (@code{pnr})
-Print the names and contents of all currently defined number registers
-on @code{stderr}.
-@endDefreq
-
-@Defreq {ptr, }
-@cindex dumping traps (@code{ptr})
-@cindex traps, dumping (@code{ptr})
-Print the names and positions of all traps (not including input line
-traps and diversion traps) on @code{stderr}.  Empty slots in the page
-trap list are printed as well, because they can affect the priority of
-subsequently planted traps.
-@endDefreq
-
-@Defreq {fl, }
-@cindex flush output (@code{fl})
-@cindex output, flush (@code{fl})
-@cindex interactive use of @code{gtroff}
-@cindex @code{gtroff}, interactive use
-Instruct @code{gtroff} to flush its output immediately.  The intent is
-for interactive use, but this behaviour is currently not implemented in
-@code{gtroff}.  Contrary to @acronym{UNIX} @code{troff}, TTY output is
-sent to a device driver also (@code{grotty}), making it non-trivial to
-communicate interactively.
-
-This request causes a line break.
-@endDefreq
-
-@Defreq {backtrace, }
-@cindex backtrace of input stack (@code{backtrace})
-@cindex input stack, backtrace (@code{backtrace})
-Print a backtrace of the input stack to the standard error stream.
-
-Consider the following in file @file{test}:
-
-@Example
-.de xxx
-.  backtrace
-..
-.de yyy
-.  xxx
-..
-.
-.yyy
-@endExample
-
-@noindent
-On execution, @code{gtroff} prints the following:
-
-@Example
-test:2: backtrace: macro `xxx'
-test:5: backtrace: macro `yyy'
-test:8: backtrace: file `test'
-@endExample
-
-The option @option{-b} of @code{gtroff} internally calls a variant of
-this request on each error and warning.
-@endDefreq
-
-@Defreg {slimit}
-@cindex input stack, setting limit
-Use the @code{slimit} number register to set the maximum number of
-objects on the input stack.  If @code{slimit} is less than or equal
-to@tie{}0, there is no limit set.  With no limit, a buggy recursive
-macro can exhaust virtual memory.
-
-The default value is 1000; this is a compile-time constant.
-@endDefreg
-
-@Defreq {warnscale, si}
-Set the scaling indicator used in warnings to @var{si}.  Valid values
-for @var{si} are @samp{u}, @samp{i}, @samp{c}, @samp{p}, and @samp{P}.
-At startup, it is set to @samp{i}.
-@endDefreq
-
-@Defreq {spreadwarn, [@Var{limit}]}
-Make @code{gtroff} emit a warning if the additional space inserted for
-each space between words in an output line is larger or equal to
-@var{limit}.  A negative value is changed to zero; no argument toggles
-the warning on and off without changing @var{limit}.  The default
-scaling indicator is @samp{m}.  At startup, @code{spreadwarn} is
-deactivated, and @var{limit} is set to 3@dmn{m}.
-
-For example,
-
-@Example
-.spreadwarn 0.2m
-@endExample
-
-@noindent
-causes a warning if @code{gtroff} must add 0.2@dmn{m} or more for each
-interword space in a line.
-
-This request is active only if text is justified to both margins (using
-@w{@samp{.ad b}}).
-@endDefreq
-
-@cindex warnings
-@code{gtroff} has command line options for printing out more warnings
-(@option{-w}) and for printing backtraces (@option{-b}) when a warning
-or an error occurs.  The most verbose level of warnings is @option{-ww}.
-
-@DefreqList {warn, [@Var{flags}]}
-@DefregListEndx {.warn}
-@cindex level of warnings (@code{warn})
-@cindex warnings, level (@code{warn})
-Control the level of warnings checked for.  The @var{flags} are the sum
-of the numbers associated with each warning that is to be enabled; all
-other warnings are disabled.  The number associated with each warning is
-listed below.  For example, @w{@code{.warn 0}} disables all warnings,
-and @w{@code{.warn 1}} disables all warnings except that about missing
-glyphs.  If no argument is given, all warnings are enabled.
-
-The read-only number register @code{.warn} contains the current warning
-level.
-@endDefreq
-
-@menu
-* Warnings::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Warnings,  , Debugging, Debugging
-@subsection Warnings
-@cindex warnings
-
-The warnings that can be given to @code{gtroff} are divided into the
-following categories.  The name associated with each warning is used by
-the @option{-w} and @option{-W} options; the number is used by the
-@code{warn} request and by the @code{.warn} register.
-
-@table @samp
-@item char
-@itemx 1
-Non-existent glyphs.@footnote{@code{char} is a misnomer since it reports
-missing glyphs -- there aren't missing input characters, only invalid
-ones.}  This is enabled by default.
-
-@item number
-@itemx 2
-Invalid numeric expressions.  This is enabled by default.
-@xref{Expressions}.
-
-@item break
-@itemx 4
-@cindex fill mode
-@cindex mode, fill
-In fill mode, lines that could not be broken so that their length was
-less than the line length.  This is enabled by default.
-
-@item delim
-@itemx 8
-Missing or mismatched closing delimiters.
-
-@item el
-@itemx 16
-@cindex @code{ie} request, and warnings
-@cindex @code{el} request, and warnings
-Use of the @code{el} request with no matching @code{ie} request.
-@xref{if-else}.
-
-@item scale
-@itemx 32
-Meaningless scaling indicators.
-
-@item range
-@itemx 64
-Out of range arguments.
-
-@item syntax
-@itemx 128
-Dubious syntax in numeric expressions.
-
-@item di
-@itemx 256
-@cindex @code{di} request, and warnings
-@cindex @code{da} request, and warnings
-Use of @code{di} or @code{da} without an argument when there is no
-current diversion.
-
-@item mac
-@itemx 512
-@cindex @code{de}, @code{de1}, @code{dei} requests, and warnings
-@cindex @code{am}, @code{am1}, @code{ami} requests, and warnings
-@cindex @code{ds}, @code{ds1} requests, and warnings
-@cindex @code{as}, @code{as1} requests, and warnings
-@cindex @code{di} request, and warnings
-@cindex @code{da} request, and warnings
-@cindex @code{box}, @code{boxa} requests, and warnings
-@cindex @code{\*}, and warnings
-Use of undefined strings, macros and diversions.  When an undefined
-string, macro, or diversion is used, that string is automatically
-defined as empty.  So, in most cases, at most one warning is given for
-each name.
-
-@item reg
-@itemx 1024
-@cindex @code{nr} request, and warnings
-@cindex @code{\R}, and warnings
-@cindex @code{\n}, and warnings
-Use of undefined number registers.  When an undefined number register is
-used, that register is automatically defined to have a value of@tie{}0.
-So, in most cases, at most one warning is given for use of a particular
-name.
-
-@item tab
-@itemx 2048
-@cindex @code{\t}, and warnings
-Use of a tab character where a number was expected.
-
-@item right-brace
-@itemx 4096
-@cindex @code{\@}}, and warnings
-Use of @code{\@}} where a number was expected.
-
-@item missing
-@itemx 8192
-Requests that are missing non-optional arguments.
-
-@item input
-@itemx 16384
-Invalid input characters.
-
-@item escape
-@itemx 32768
-Unrecognized escape sequences.  When an unrecognized escape sequence
-@code{\@var{X}} is encountered, the escape character is ignored, and
-@var{X} is printed.
-
-@item space
-@itemx 65536
-@cindex compatibility mode
-Missing space between a request or macro and its argument.  This warning
-is given when an undefined name longer than two characters is
-encountered, and the first two characters of the name make a defined
-name.  The request or macro is not invoked.  When this warning is given,
-no macro is automatically defined.  This is enabled by default.  This
-warning never occurs in compatibility mode.
-
-@item font
-@itemx 131072
-Non-existent fonts.  This is enabled by default.
-
-@item ig
-@itemx 262144
-Invalid escapes in text ignored with the @code{ig} request.  These are
-conditions that are errors when they do not occur in ignored text.
-
-@item color
-@itemx 524288
-Color related warnings.
-
-@item file
-@itemx 1048576
-Missing files.  The @code{mso} request gives this warning when the
-requested macro file does not exist.  This is enabled by default.
-
-@item all
-All warnings except @samp{di}, @samp{mac} and @samp{reg}.  It is
-intended that this covers all warnings that are useful with traditional
-macro packages.
-
-@item w
-All warnings.
-@end table
-
-
-@c =====================================================================
-
-@node Implementation Differences,  , Debugging, gtroff Reference
-@section Implementation Differences
-@cindex implementation differences
-@cindex differences in implementation
-@cindex incompatibilities with @acronym{AT&T} @code{troff}
-@cindex compatibility mode
-@cindex mode, compatibility
-
-GNU @code{troff} has a number of features that cause incompatibilities
-with documents written with old versions of @code{troff}.
-
-@cindex long names
-@cindex names, long
-Long names cause some incompatibilities.  @acronym{UNIX} @code{troff}
-interprets
-
-@Example
-.dsabcd
-@endExample
-
-@cindex @code{\*}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\n}, incompatibilities with @acronym{AT&T} @code{troff}
-@noindent
-as defining a string @samp{ab} with contents @samp{cd}.  Normally, GNU
-@code{troff} interprets this as a call of a macro named @code{dsabcd}.
-Also @acronym{UNIX} @code{troff} interprets @code{\*[} or @code{\n[} as
-references to a string or number register called @samp{[}.  In GNU
-@code{troff}, however, this is normally interpreted as the start of a
-long name.  In compatibility mode GNU @code{troff} interprets long names
-in the traditional way (which means that they are not recognized as
-names).
-
-@DefreqList {cp, [@Var{n}]}
-@DefreqItemx {do, cmd}
-@DefregListEndx {.C}
-If @var{n} is missing or non-zero, turn on compatibility mode;
-otherwise, turn it off.
-
-The read-only number register @code{.C} is@tie{}1 if compatibility mode
-is on, 0@tie{}otherwise.
-
-Compatibility mode can be also turned on with the @option{-C} command
-line option.
-
-The @code{do} request turns off compatibility mode while executing its
-arguments as a @code{gtroff} command.  However, it does not turn off
-compatibility mode while processing the macro itself.  To do that, use
-the @code{de1} request (or manipulate the @code{.C} register manually).
-@xref{Writing Macros}.
-
-@Example
-.do fam T
-@endExample
-
-@noindent
-executes the @code{fam} request when compatibility mode is enabled.
-
-@code{gtroff} restores the previous compatibility setting before
-interpreting any files sourced by the @var{cmd}.
-@endDefreq
-
-@cindex input level in delimited arguments
-@cindex delimited arguments, incompatibilities with @acronym{AT&T} @code{troff}
-Two other features are controlled by @option{-C}.  If not in
-compatibility mode, GNU @code{troff} preserves the input level in
-delimited arguments:
-
-@Example
-.ds xx '
-\w'abc\*(xxdef'
-@endExample
-
-@noindent
-In compatibility mode, the string @samp{72def'} is returned; without
-@option{-C} the resulting string is @samp{168} (assuming a TTY output
-device).
-
-@cindex @code{\f}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\H}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\s}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\S}, incompatibilities with @acronym{AT&T} @code{troff}
-Finally, the escapes @code{\f}, @code{\H}, @code{\m}, @code{\M},
-@code{\R}, @code{\s}, and @code{\S} are transparent for recognizing the
-beginning of a line only in compatibility mode (this is a rather obscure
-feature).  For example, the code
-
-@Example
-.de xx
-Hallo!
-..
-\fB.xx\fP
-@endExample
-
-@noindent
-prints @samp{Hallo!} in bold face if in compatibility mode, and
-@samp{.xx} in bold face otherwise.
-
-@cindex @code{\A}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\|}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\^}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\&}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\@{}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\@}}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\@key{SP}}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\'}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\`}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\-}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\_}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\%}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\c}, incompatibilities with @acronym{AT&T} @code{troff}
-GNU @code{troff} does not allow the use of the escape sequences
-@code{\|}, @code{\^}, @code{\&}, @code{\@{}, @code{\@}},
-@code{\@key{SP}}, @code{\'}, @code{\`}, @code{\-}, @code{\_}, @code{\!},
-@code{\%}, and @code{\c} in names of strings, macros, diversions, number
-registers, fonts or environments; @acronym{UNIX} @code{troff} does.  The
-@code{\A} escape sequence (@pxref{Identifiers}) may be helpful in
-avoiding use of these escape sequences in names.
-
-@cindex fractional point sizes
-@cindex fractional type sizes
-@cindex point sizes, fractional
-@cindex type sizes, fractional
-@cindex sizes, fractional
-@cindex @code{ps} request, incompatibilities with @acronym{AT&T} @code{troff}
-Fractional point sizes cause one noteworthy incompatibility.  In
-@acronym{UNIX} @code{troff} the @code{ps} request ignores scale
-indicators and thus
-
-@Example
-.ps 10u
-@endExample
-
-@noindent
-sets the point size to 10@tie{}points, whereas in GNU @code{troff} it
-sets the point size to 10@tie{}scaled points.  @xref{Fractional Type
-Sizes}, for more information.
-
-@cindex @code{bd} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{cs} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{tr} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{fp} request, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex input characters and output glyphs, compatibility with @acronym{AT&T} @code{troff}
-@cindex output glyphs, and input characters,compatibility with @acronym{AT&T} @code{troff}
-@cindex characters, input, and output glyphs, compatibility with @acronym{AT&T} @code{troff}
-@cindex glyphs, output, and input characters, compatibility with @acronym{AT&T} @code{troff}
-In GNU @code{troff} there is a fundamental difference between
-(unformatted) input characters and (formatted) output glyphs.
-Everything that affects how a glyph is output is stored with the glyph
-node; once a glyph node has been constructed it is unaffected by any
-subsequent requests that are executed, including @code{bd}, @code{cs},
-@code{tkf}, @code{tr}, or @code{fp} requests.  Normally glyphs are
-constructed from input characters at the moment immediately before the
-glyph is added to the current output line.  Macros, diversions and
-strings are all, in fact, the same type of object; they contain lists of
-input characters and glyph nodes in any combination.  A glyph node does
-not behave like an input character for the purposes of macro processing;
-it does not inherit any of the special properties that the input
-character from which it was constructed might have had.  For example,
-
-@Example
-.di x
-\\\\
-.br
-.di
-.x
-@endExample
-
-@cindex printing backslash (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-@cindex backslash, printing (@code{\\}, @code{\e}, @code{\E}, @code{\[rs]})
-@cindex @code{\e}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\!}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex @code{\?}, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex transparent output, incompatibilities with @acronym{AT&T} @code{troff}
-@cindex output, transparent, incompatibilities with @acronym{AT&T} @code{troff}
-@noindent
-prints @samp{\\} in GNU @code{troff}; each pair of input backslashes is
-turned into one output backslash and the resulting output backslashes
-are not interpreted as escape characters when they are reread.
-@acronym{UNIX} @code{troff} would interpret them as escape characters
-when they were reread and would end up printing one @samp{\}.  The
-correct way to obtain a printable backslash is to use the @code{\e}
-escape sequence: This always prints a single instance of the current
-escape character, regardless of whether or not it is used in a
-diversion; it also works in both GNU @code{troff} and @acronym{UNIX}
-@code{troff}.@footnote{To be completely independent of the current
-escape character, use @code{\(rs}, which represents a reverse solidus
-(backslash) glyph.}  To store, for some reason, an escape sequence in a
-diversion that is interpreted when the diversion is reread, either use
-the traditional @code{\!} transparent output facility, or, if this is
-unsuitable, the new @code{\?} escape sequence.
-
-@xref{Diversions}, and @ref{Gtroff Internals}, for more information.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Preprocessors, Output Devices, gtroff Reference, Top
-@chapter Preprocessors
-@cindex preprocessors
-
-This chapter describes all preprocessors that come with @code{groff} or
-which are freely available.
-
-@menu
-* geqn::
-* gtbl::
-* gpic::
-* ggrn::
-* grap::
-* gchem::
-* grefer::
-* gsoelim::
-* preconv::
-@end menu
-
-
-@c =====================================================================
-
-@node geqn, gtbl, Preprocessors, Preprocessors
-@section @code{geqn}
-@cindex @code{eqn}, the program
-@cindex @code{geqn}, the program
-
-@c XXX
-
-@menu
-* Invoking geqn::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking geqn,  , geqn, geqn
-@subsection Invoking @code{geqn}
-@cindex invoking @code{geqn}
-@cindex @code{geqn}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node gtbl, gpic, geqn, Preprocessors
-@section @code{gtbl}
-@cindex @code{tbl}, the program
-@cindex @code{gtbl}, the program
-
-@c XXX
-
-@menu
-* Invoking gtbl::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gtbl,  , gtbl, gtbl
-@subsection Invoking @code{gtbl}
-@cindex invoking @code{gtbl}
-@cindex @code{gtbl}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node gpic, ggrn, gtbl, Preprocessors
-@section @code{gpic}
-@cindex @code{pic}, the program
-@cindex @code{gpic}, the program
-
-@c XXX
-
-@menu
-* Invoking gpic::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gpic,  , gpic, gpic
-@subsection Invoking @code{gpic}
-@cindex invoking @code{gpic}
-@cindex @code{gpic}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node ggrn, grap, gpic, Preprocessors
-@section @code{ggrn}
-@cindex @code{grn}, the program
-@cindex @code{ggrn}, the program
-
-@c XXX
-
-@menu
-* Invoking ggrn::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking ggrn,  , ggrn, ggrn
-@subsection Invoking @code{ggrn}
-@cindex invoking @code{ggrn}
-@cindex @code{ggrn}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node grap, gchem, ggrn, Preprocessors
-@section @code{grap}
-@cindex @code{grap}, the program
-
-A free implementation of @code{grap}, written by Ted Faber,
-is available as an extra package from the following address:
-
-@display
-@uref{http://www.lunabase.org/~faber/Vault/software/grap/}
-@end display
-
-
-@c =====================================================================
-
-@node gchem, grefer, grap, Preprocessors
-@section @code{gchem}
-@cindex @code{chem}, the program
-@cindex @code{gchem}, the program
-
-@c XXX
-
-@menu
-* Invoking gchem::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gchem,  , gchem, gchem
-@subsection Invoking @code{gchem}
-@cindex invoking @code{gchem}
-@cindex @code{gchem}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node grefer, gsoelim, gchem, Preprocessors
-@section @code{grefer}
-@cindex @code{refer}, the program
-@cindex @code{grefer}, the program
-
-@c XXX
-
-@menu
-* Invoking grefer::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grefer,  , grefer, grefer
-@subsection Invoking @code{grefer}
-@cindex invoking @code{grefer}
-@cindex @code{grefer}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node gsoelim, preconv, grefer, Preprocessors
-@section @code{gsoelim}
-@cindex @code{soelim}, the program
-@cindex @code{gsoelim}, the program
-
-@c XXX
-
-@menu
-* Invoking gsoelim::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gsoelim,  , gsoelim, gsoelim
-@subsection Invoking @code{gsoelim}
-@cindex invoking @code{gsoelim}
-@cindex @code{gsoelim}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-
-@node preconv,  , gsoelim, Preprocessors
-@section @code{preconv}
-@cindex @code{preconv}, the program
-
-@c XXX
-
-@menu
-* Invoking preconv::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking preconv,  , preconv, preconv
-@subsection Invoking @code{preconv}
-@cindex invoking @code{preconv}
-@cindex @code{preconv}, invoking
-
-@c XXX
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Output Devices, File formats, Preprocessors, Top
-@chapter Output Devices
-@cindex output devices
-@cindex devices for output
-
-@c XXX
-
-@menu
-* Special Characters::
-* grotty::
-* grops::
-* gropdf::
-* grodvi::
-* grolj4::
-* grolbp::
-* grohtml::
-* gxditview::
-@end menu
-
-
-@c =====================================================================
-
-@node Special Characters, grotty, Output Devices, Output Devices
-@section Special Characters
-@cindex special characters
-@cindex characters, special
-
-@c XXX
-
-@xref{Font Files}.
-
-
-@c =====================================================================
-
-@node grotty, grops, Special Characters, Output Devices
-@section @code{grotty}
-@cindex @code{grotty}, the program
-
-The postprocessor @code{grotty} translates the output from GNU
-@code{troff} into a form suitable for typewriter-like devices.  It is
-fully documented on its manual page, @cite{grotty(1)}.
-
-@menu
-* Invoking grotty::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grotty,  , grotty, grotty
-@subsection Invoking @code{grotty}
-@cindex invoking @code{grotty}
-@cindex @code{grotty}, invoking
-
-The postprocessor @command{grotty} accepts the following command-line
-options:
-
-@table @option
-@item -b
-Do not overstrike bold glyphs.  Ignored if @option{-c} isn't used.
-
-@item -B
-Do not underline bold-italic glyphs.  Ignored if @option{-c} isn't
-used.
-
-@item -c
-Use overprint and disable colours for printing on legacy Teletype
-printers (see below).
-
-@item -d
-Do not render lines (this is, ignore all @code{\D} escapes).
-
-@item -f
-Use form feed control characters in the output.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font and device description files, given the
-target device @var{name}.
-
-@item -h
-Use horizontal tabs for sequences of 8 space characters.
-
-@item -i
-Request italic glyphs from the terminal.  Ignored if @option{-c} is
-active.
-
-@item -o
-Do not overstrike.
-
-@item -r
-Highlight italic glyphs.  Ignored if @option{-c} is active.
-
-@item -u
-Do not underline italic glyphs.  Ignored if @option{-c} isn't used.
-
-@item -U
-Do not overstrike bold-italic glyphs.  Ignored if @option{-c} isn't
-used.
-
-@item -v
-Print the version number.
-@end table
-
-@pindex less
-@cindex Teletype
-@cindex ISO 6249 SGR
-@cindex terminal control sequences
-@cindex control sequences, for terminals
-The @option{-c} mode for TTY output devices means that underlining is
-done by emitting sequences of @samp{_} and @samp{^H} (the backspace
-character) before the actual character.  Literally, this is printing
-an underline character, then moving the caret back one character
-position, and printing the actual character at the same position as
-the underline character (similar to a typewriter).  Usually, a modern
-terminal can't interpret this (and the original Teletype machines for
-which this sequence was appropriate are no longer in use).  You need
-a pager program like @code{less} that translates this into
-ISO@tie{}6429 SGR sequences to control terminals.
-
-
-@c =====================================================================
-
-@node grops, gropdf, grotty, Output Devices
-@section @code{grops}
-@cindex @code{grops}, the program
-
-The postprocessor @command{grops} translates the output from GNU
-@command{troff} into a form suitable for Adobe @sc{PostScript}
-devices.  It is fully documented on its manual page, @cite{grops(1)}.
-
-
-@menu
-* Invoking grops::
-* Embedding PostScript::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grops, Embedding PostScript, grops, grops
-@subsection Invoking @code{grops}
-@cindex invoking @code{grops}
-@cindex @code{grops}, invoking
-
-The postprocessor @code{grops} accepts the following command-line
-options:
-
-@table @option
-@item -b@var{flags}
-Use backward compatibility settings given by @var{flags} as
-documented in the @cite{grops(1)} manual page.  Overrides the command
-@option{broken} in the @file{DESC} file.
-
-@item -c@var{n}
-Print @var{n} copies of each page.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font, prologue and device description files,
-given the target device @var{name}, usually @strong{ps}.
-
-@item -g
-Tell the printer to guess the page length.  Useful for printing
-vertically centered pages when the paper dimensions are determined at
-print time.
-
-@item -I@var{path} @dots{}
-Consider the directory @file{@var{path}} for searching included files
-specified with relative paths.  The current directory is searched as
-fallback.
-
-@item -l
-Use landscape orientation.
-
-@item -m
-Use manual feed.
-
-@item -p@var{papersize}
-Set the page dimensions.  Overrides the commands @option{papersize},
-@option{paperlength}, and @option{paperwidth} in the @file{DESC}
-file.  See the @cite{groff_font(5)} manual page for details.
-
-@item -P@var{prologue}
-Use the @var{prologue} in the font path as the prologue instead of
-the default @file{prologue}.  Overrides the environment variable
-@env{GROPS_PROLOGUE}.
-
-@item -w@var{n}
-Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
-default value @var{n} = 40.
-
-@item -v
-Print the version number.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Embedding PostScript,  , Invoking grops, grops
-@subsection Embedding @sc{PostScript}
-@cindex embedding PostScript
-@cindex PostScript, embedding
-
-The escape sequence
-
-@code{\X'ps: import @var{file} @var{llx} @var{lly} @var{urx} @var{ury}
-  @var{width} [@var{height}]'}
-
-@noindent
-places a rectangle of the specified @var{width} containing the
-@sc{PostScript} drawing from file @var{file} bound by the box from
-@var{llx} @var{lly} to @var{urx} @var{ury} (in @sc{PostScript}
-coordinates) at the insertion point.  If @var{height} is not
-specified, the embedded drawing is scaled proportionally.
-
-@xref{Miscellaneous}, for the @code{psbb} request, which automatically
-generates the bounding box.
-
-This escape sequence is used internally by the macro @code{PSPIC}
-(see the @cite{groff_tmac(5)} manual page).
-
-
-@c =====================================================================
-
-@node gropdf, grodvi, grops, Output Devices
-@section @code{gropdf}
-@cindex @code{gropdf}, the program
-
-The postprocessor @command{gropdf} translates the output from GNU
-@command{troff} into a form suitable for Adobe PDF devices.  It is fully
-documented on its manual page, @cite{gropdf(1)}.
-
-@menu
-* Invoking gropdf::
-* Embedding PDF::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gropdf, Embedding PDF, gropdf, gropdf
-@subsection Invoking @code{gropdf}
-@cindex invoking @code{gropdf}
-@cindex @code{gropdf}, invoking
-
-The postprocessor @code{gropdf} accepts the following command-line
-options:
-
-@table @option
-@item -d
-Produce uncompressed PDFs that include debugging comments.
-
-@item -e
-This forces @code{gropdf} to embed all used fonts in the PDF,
-even if they are one of the 14 base Adobe fonts.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font, prologue and device description files,
-given the target device @var{name}, usually @strong{pdf}.
-
-@item -y@var{foundry}
-This forces the use of a different font foundry.
-
-@item -l
-Use landscape orientation.
-
-@item -p@var{papersize}
-Set the page dimensions.  Overrides the commands @option{papersize},
-@option{paperlength}, and @option{paperwidth} in the @file{DESC}
-file.  See the @cite{groff_font(5)} manual page for details.
-
-@item -v
-Print the version number.
-
-@item -s
-Append a comment line to end of PDF showing statistics, i.e. number of
-pages in document.  Ghostscript's @cite{ps2pdf(1)} complains about this
-line if it is included, but works anyway.
-
-@item -u@var{filename}
-@code{gropdf} normally includes a ToUnicode CMap with any font created
-using @file{text.enc} as the encoding file, this makes it easier to
-search for words that contain ligatures.  You can include your own CMap
-by specifying a @var{filename} or have no CMap at all by omitting the
-@var{filename}.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Embedding PDF,  , Invoking gropdf, gropdf
-@subsection Embedding PDF
-@cindex embedding PDF
-@cindex PDF, embedding
-
-The escape sequence
-
-@code{\X'pdf: pdfpic @var{file} @var{alignment} @var{width} [@var{height}]
-  [@var{linelength}]'}
-
-@noindent
-places a rectangle of the specified @var{width} containing the PDF
-drawing from file @var{file} of desired @var{width} and @var{height} (if
-@var{height} is missing or zero then it is scaled proportionally).  If
-@var{alignment} is @code{-L} the drawing is left aligned.  If it is
-@code{-C} or @code{-R} a @var{linelength} greater than the width of the
-drawing is required as well.  If @var{width} is specified as zero then
-the width is scaled in proportion to the height.
-
-
-@c =====================================================================
-
-@node grodvi, grolj4, gropdf, Output Devices
-@section @code{grodvi}
-@cindex @code{grodvi}, the program
-
-The postprocessor @command{grodvi} translates the output from GNU
-@command{troff} into the @strong{DVI} output format compatible with
-the @strong{@TeX{}} document preparation system.  It is fully
-documented on its manual page, @cite{grodvi(1)}.
-
-@menu
-* Invoking grodvi::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grodvi,  , grodvi, grodvi
-@subsection Invoking @code{grodvi}
-@cindex invoking @code{grodvi}
-@cindex @code{grodvi}, invoking
-
-The postprocessor @code{grodvi} accepts the following command-line
-options:
-
-@table @option
-@item -d
-Do not use @strong{tpic} specials to implement drawing commands.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font and device description files, given the
-target device @var{name}, usually @strong{dvi}.
-
-@item -l
-Use landscape orientation.
-
-@item -p@var{papersize}
-Set the page dimensions.  Overrides the commands @option{papersize},
-@option{paperlength}, and @option{paperwidth} in the @file{DESC}
-file.  See @cite{groff_font(5)} manual page for details.
-
-@item -v
-Print the version number.
-
-@item -w@var{n}
-Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
-default value @var{n} = 40.
-@end table
-
-
-@c =====================================================================
-
-@node grolj4, grolbp, grodvi, Output Devices
-@section @code{grolj4}
-@cindex @code{grolj4}, the program
-
-The postprocessor @command{grolj4} translates the output from GNU
-@command{troff} into the @strong{PCL5} output format suitable for
-printing on a @strong{HP LaserJet@tie{}4} printer.  It is fully
-documented on its manual page, @cite{grolj4(1)}.
-
-@menu
-* Invoking grolj4::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grolj4,  , grolj4, grolj4
-@subsection Invoking @code{grolj4}
-@cindex invoking @code{grolj4}
-@cindex @code{grolj4}, invoking
-
-The postprocessor @code{grolj4} accepts the following command-line
-options:
-
-@table @option
-@item -c@var{n}
-Print @var{n} copies of each page.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font and device description files, given the
-target device @var{name}, usually @strong{lj4}.
-
-@item -l
-Use landscape orientation.
-
-@item -p@var{size}
-Set the page dimensions.  Valid values for @var{size} are:
-@code{letter}, @code{legal}, @code{executive}, @code{a4},
-@code{com10}, @code{monarch}, @code{c5}, @code{b5}, @code{d1}.
-
-@item -v
-Print the version number.
-
-@item -w@var{n}
-Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
-default value @var{n} = 40.
-@end table
-
-The special drawing command @code{\D'R @var{dh} @var{dv}'} draws a
-horizontal rectangle from the current position to the position at
-offset (@var{dh},@var{dv}).
-
-
-@c =====================================================================
-
-@node grolbp, grohtml, grolj4, Output Devices
-@section @code{grolbp}
-@cindex @code{grolbp}, the program
-
-The postprocessor @command{grolbp} translates the output from GNU
-@command{troff} into the @strong{LBP} output format suitable for
-printing on @strong{Canon CAPSL} printers.  It is fully documented on
-its manual page, @cite{grolbp(1)}.
-
-@menu
-* Invoking grolbp::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grolbp,  , grolbp, grolbp
-@subsection Invoking @code{grolbp}
-@cindex invoking @code{grolbp}
-@cindex @code{grolbp}, invoking
-
-The postprocessor @code{grolbp} accepts the following command-line
-options:
-
-@table @option
-@item -c@var{n}
-Print @var{n} copies of each page.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font, prologue and device description files,
-given the target device @var{name}, usually @strong{lbp}.
-
-@item -l
-Use landscape orientation.
-
-@item -o@var{orientation}
-Use the @var{orientation} specified: @code{portrait} or
-@code{landscape}.
-
-@item -p@var{papersize}
-Set the page dimensions.  See @cite{groff_font(5)} manual page for
-details.
-
-@item -w@var{n}
-Set the line thickness to @var{n}/1000@dmn{em}.  Overrides the
-default value @var{n} = 40.
-
-@item -v
-Print the version number.
-
-@item -h
-Print command-line help.
-@end table
-
-
-@c =====================================================================
-
-@node grohtml, gxditview, grolbp, Output Devices
-@section @code{grohtml}
-@cindex @code{grohtml}, the program
-
-The @code{grohtml} front end (which consists of a preprocessor,
-@code{pre-grohtml}, and a device driver, @code{post-grohtml}) translates
-the output of GNU @code{troff} to @acronym{HTML}.  Users should always
-invoke @code{grohtml} via the @code{groff} command with a @code{\-Thtml}
-option.  If no files are given, @code{grohtml} will read the standard
-input.  A filename of @code{-} will also cause @code{grohtml} to read
-the standard input.  @acronym{HTML} output is written to the standard
-output.  When @code{grohtml} is run by @code{groff}, options can be
-passed to @code{grohtml} using @code{groff}'s @option{-P} option.
-
-@code{grohtml} invokes @code{groff} twice.  In the first pass, pictures,
-equations, and tables are rendered using the @code{ps} device, and in
-the second pass @acronym{HTML} output is generated by the @code{html}
-device.
-
-@code{grohtml} always writes output in @code{UTF-8} encoding and has
-built-in entities for all non-composite unicode characters.  In spite of
-this, @code{groff} may issue warnings about unknown special characters
-if they can't be found during the first pass.  Such warnings can be
-safely ignored unless the special characters appear inside a table or
-equation, in which case glyphs for these characters must be defined for
-the @code{ps} device as well.
-
-This output device is fully documented on its manual page,
-@cite{grohtml(1)}.
-
-@menu
-* Invoking grohtml::
-* grohtml specific registers and strings::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking grohtml, grohtml specific registers and strings, grohtml, grohtml
-@subsection Invoking @code{grohtml}
-@cindex invoking @code{grohtml}
-@cindex @code{grohtml}, invoking
-
-The postprocessor @code{grohtml} accepts the following command-line
-options:
-
-@table @option
-@item -a@var{bits}
-Use this number of @var{bits} (= 1, 2 or 4) for text antialiasing.
-Default: @var{bits} = 4.
-
-@item -a0
-Do not use text antialiasing.
-
-@item -b
-Use white background.
-
-@item -D@var{dir}
-Store rendered images in the directory @file{@var{dir}}.
-
-@item -F@var{dir}
-Put the directory @file{@var{dir}/dev@var{name}} in front of the
-search path for the font, prologue and device description files,
-given the target device @var{name}, usually @strong{html}.
-
-@item -g@var{bits}
-Use this number of @var{bits} (= 1, 2 or 4) for antialiasing of
-drawings.  Default: @var{bits} = 4.
-
-@item -g0
-Do not use antialiasing for drawings.
-
-@item -h
-Use the @code{B} element for section headings.
-
-@item -i@var{resolution}
-Use the @var{resolution} for rendered images.  Default:
-@var{resolution} = 100@dmn{dpi}.
-
-@item -I@var{stem}
-Set the images' @var{stem name}.  Default: @var{stem} =
-@file{grohtml-@var{XXX}} (@var{XXX} is the process ID).
-
-@item -j@var{stem}
-Place each section in a separate file called
-@file{@var{stem}-@var{n}.html} (where @var{n} is a generated section
-number).
-
-@item -l
-Do not generate the table of contents.
-
-@item -n
-Generate simple fragment identifiers.
-
-@item -o@var{offset}
-Use vertical paddding @var{offset} for images.
-
-@item -p
-Display the page rendering progress to @code{stderr}.
-
-@item -r
-Do not use horizontal rules to separate headers and footers.
-
-@item -s@var{size}
-Set the base font size, to be modified using the elements @code{BIG}
-and @code{SMALL}.
-
-@item -S@var{level}
-Generate separate files for sections at level @var{level}.
-
-@item -v
-Print the version number.
-
-@item -V
-Generate a validator button at the bottom.
-
-@item -y
-Generate a signature of groff after the validator button, if any.
-@end table
-
-
-@c ---------------------------------------------------------------------
-
-@node grohtml specific registers and strings,  , Invoking grohtml, grohtml
-@subsection @code{grohtml} specific registers and strings
-@cindex registers specific to @code{grohtml}
-@cindex strings specific to @code{grohtml}
-@cindex @code{grohtml}, registers and strings
-
-@DefmpregList {ps4html, grohtml}
-@DefstrListEndx {www-image-template, grohtml}
-The registers @code{ps4html} and @code{www-image-template} are defined
-by the @code{pre-grohtml} preprocessor.  @code{pre-grohtml} reads in the
-@code{troff} input, marks up the inline equations and passes the result
-firstly to
-
-@Example
-troff -Tps -rps4html=1 -dwww-image-template=@var{template}
-@endExample
-
-@noindent
-and secondly to
-
-@Example
-troff -Thtml
-@endExample
-
-@noindent
-or
-
-@Example
-troff -Txhtml
-@endExample
-
-@cindex MathML
-The @sc{PostScript} device is used to create all the image files (for
-@option{-Thtml}; if @option{-Txhtml} is used, all equations are passed
-to @code{geqn} to produce @acronym{MathML}, and the register
-@code{ps4html} enables the macro sets to ignore floating keeps, footers,
-and headings.
-
-The register @code{www-image-template} is set to the user specified
-template name or the default name.
-@endDefmpreg
-
-
-@c =====================================================================
-
-@node gxditview,  , grohtml, Output Devices
-@section @code{gxditview}
-@cindex @code{gxditview}, the program
-
-@c XXX
-
-@menu
-* Invoking gxditview::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Invoking gxditview,  , gxditview, gxditview
-@subsection Invoking @code{gxditview}
-@cindex invoking @code{gxditview}
-@cindex @code{gxditview}, invoking
-
-@c XXX
-@c X11's xditview
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node File formats, Installation, Output Devices, Top
-@chapter File formats
-@cindex file formats
-@cindex formats, file
-
-All files read and written by @code{gtroff} are text files.  The
-following two sections describe their format.
-
-@menu
-* gtroff Output::
-* Font Files::
-@end menu
-
-
-@c =====================================================================
-
-@node gtroff Output, Font Files, File formats, File formats
-@section @code{gtroff} Output
-@cindex @code{gtroff}, output
-@cindex output, @code{gtroff}
-
-This section describes the intermediate output format of GNU
-@code{troff}.  This output is produced by a run of @code{gtroff} before
-it is fed into a device postprocessor program.
-
-As @code{groff} is a wrapper program around @code{gtroff} that
-automatically calls a postprocessor, this output does not show up
-normally.  This is why it is called @dfn{intermediate}.  @code{groff}
-provides the option @option{-Z} to inhibit postprocessing, such that the
-produced intermediate output is sent to standard output just like
-calling @code{gtroff} manually.
-
-@cindex troff output
-@cindex output, troff
-@cindex intermediate output
-@cindex output, intermediate
-Here, the term @dfn{troff output} describes what is output by
-@code{gtroff}, while @dfn{intermediate output} refers to the language
-that is accepted by the parser that prepares this output for the
-postprocessors.  This parser is smarter on whitespace and implements
-obsolete elements for compatibility, otherwise both formats are the
-same.@footnote{The parser and postprocessor for intermediate output can
-be found in the file@*
-@file{@var{groff-source-dir}/src/libs/libdriver/input.cpp}.}
-
-The main purpose of the intermediate output concept is to facilitate the
-development of postprocessors by providing a common programming
-interface for all devices.  It has a language of its own that is
-completely different from the @code{gtroff} language.  While the
-@code{gtroff} language is a high-level programming language for text
-processing, the intermediate output language is a kind of low-level
-assembler language by specifying all positions on the page for writing
-and drawing.
-
-The intermediate output produced by @code{gtroff} is fairly readable,
-while output from @acronym{AT&T} @code{troff} is rather hard to
-understand because of strange habits that are still supported, but not
-used any longer by @code{gtroff}.
-
-@menu
-* Language Concepts::
-* Command Reference::
-* Intermediate Output Examples::
-* Output Language Compatibility::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node Language Concepts, Command Reference, gtroff Output, gtroff Output
-@subsection Language Concepts
-
-During the run of @code{gtroff}, the input data is cracked down to the
-information on what has to be printed at what position on the intended
-device.  So the language of the intermediate output format can be quite
-small.  Its only elements are commands with and without arguments.  In
-this section, the term @dfn{command} always refers to the intermediate
-output language, and never to the @code{gtroff} language used for
-document formatting.  There are commands for positioning and text
-writing, for drawing, and for device controlling.
-
-@menu
-* Separation::
-* Argument Units::
-* Document Parts::
-@end menu
-
-@node Separation, Argument Units, Language Concepts, Language Concepts
-@subsubsection Separation
-
-@acronym{AT&T} @code{troff} output has strange requirements on
-whitespace.  The @code{gtroff} output parser, however, is smart about
-whitespace by making it maximally optional.  The whitespace characters,
-i.e., the tab, space, and newline characters, always have a syntactical
-meaning.  They are never printable because spacing within the output is
-always done by positioning commands.
-
-Any sequence of space or tab characters is treated as a single
-@dfn{syntactical space}.  It separates commands and arguments, but is
-only required when there would occur a clashing between the command code
-and the arguments without the space.  Most often, this happens when
-variable-length command names, arguments, argument lists, or command
-clusters meet.  Commands and arguments with a known, fixed length need
-not be separated by syntactical space.
-
-A line break is a syntactical element, too.  Every command argument can
-be followed by whitespace, a comment, or a newline character.  Thus a
-@dfn{syntactical line break} is defined to consist of optional
-syntactical space that is optionally followed by a comment, and a
-newline character.
-
-The normal commands, those for positioning and text, consist of a single
-letter taking a fixed number of arguments.  For historical reasons, the
-parser allows to stack such commands on the same line, but fortunately,
-in @code{gtroff}'s intermediate output, every command with at least one
-argument is followed by a line break, thus providing excellent
-readability.
-
-The other commands -- those for drawing and device controlling -- have a
-more complicated structure; some recognize long command names, and some
-take a variable number of arguments.  So all @samp{D} and @samp{x}
-commands were designed to request a syntactical line break after their
-last argument.  Only one command, @w{@samp{x X}}, has an argument that
-can stretch over several lines; all other commands must have all of
-their arguments on the same line as the command, i.e., the arguments may
-not be split by a line break.
-
-Empty lines (these are lines containing only space and/or a comment),
-can occur everywhere.  They are just ignored.
-
-@node Argument Units, Document Parts, Separation, Language Concepts
-@subsubsection Argument Units
-
-Some commands take integer arguments that are assumed to represent
-values in a measurement unit, but the letter for the corresponding scale
-indicator is not written with the output command arguments.  Most
-commands assume the scale indicator @samp{u}, the basic unit of the
-device, some use @samp{z}, the scaled point unit of the device, while
-others, such as the color commands, expect plain integers.
-
-Note that single characters can have the eighth bit set, as can the
-names of fonts and special characters.  The names of characters and
-fonts can be of arbitrary length.  A character that is to be printed is
-always in the current font.
-
-A string argument is always terminated by the next whitespace character
-(space, tab, or newline); an embedded @samp{#} character is regarded as
-part of the argument, not as the beginning of a comment command.  An
-integer argument is already terminated by the next non-digit character,
-which then is regarded as the first character of the next argument or
-command.
-
-@node Document Parts,  , Argument Units, Language Concepts
-@subsubsection Document Parts
-
-A correct intermediate output document consists of two parts, the
-@dfn{prologue} and the @dfn{body}.
-
-The task of the prologue is to set the general device parameters using
-three exactly specified commands.  @code{gtroff}'s prologue is
-guaranteed to consist of the following three lines (in that order):
-
-@Example
-x T @var{device}
-x res @var{n} @var{h} @var{v}
-x init
-@endExample
-
-@noindent
-with the arguments set as outlined in @ref{Device Control Commands}.
-Note that the parser for the intermediate output format is able to
-swallow additional whitespace and comments as well even in the prologue.
-
-The body is the main section for processing the document data.
-Syntactically, it is a sequence of any commands different from the ones
-used in the prologue.  Processing is terminated as soon as the first
-@w{@samp{x stop}} command is encountered; the last line of any
-@code{gtroff} intermediate output always contains such a command.
-
-Semantically, the body is page oriented.  A new page is started by a
-@samp{p} command.  Positioning, writing, and drawing commands are always
-done within the current page, so they cannot occur before the first
-@samp{p} command.  Absolute positioning (by the @samp{H} and @samp{V}
-commands) is done relative to the current page; all other positioning is
-done relative to the current location within this page.
-
-@c ---------------------------------------------------------------------
-
-@node Command Reference, Intermediate Output Examples, Language Concepts, gtroff Output
-@subsection Command Reference
-
-This section describes all intermediate output commands, both from
-@acronym{AT&T} @code{troff} as well as the @code{gtroff} extensions.
-
-@menu
-* Comment Command::
-* Simple Commands::
-* Graphics Commands::
-* Device Control Commands::
-* Obsolete Command::
-@end menu
-
-@node Comment Command, Simple Commands, Command Reference, Command Reference
-@subsubsection Comment Command
-
-@table @code
-@item #@var{anything}@angles{end of line}
-A comment.  Ignore any characters from the @samp{#} character up to the
-next newline character.
-
-This command is the only possibility for commenting in the intermediate
-output.  Each comment can be preceded by arbitrary syntactical space;
-every command can be terminated by a comment.
-@end table
-
-@node Simple Commands, Graphics Commands, Comment Command, Command Reference
-@subsubsection Simple Commands
-
-The commands in this subsection have a command code consisting of a
-single character, taking a fixed number of arguments.  Most of them are
-commands for positioning and text writing.  These commands are smart
-about whitespace.  Optionally, syntactical space can be inserted before,
-after, and between the command letter and its arguments.  All of these
-commands are stackable, i.e., they can be preceded by other simple
-commands or followed by arbitrary other commands on the same line.  A
-separating syntactical space is only necessary when two integer
-arguments would clash or if the preceding argument ends with a string
-argument.
-
-@table @code
-@ignore
-.if (\n[@USE_ENV_STACK] == 1) \{\
-.command {
-Open a new environment by copying the actual device configuration data
-to the environment stack.
-.
-The current environment is setup by the device specification and
-manipulated by the setting commands.
-.
-.
-.command }
-Close the actual environment (opened by a preceding
-.BR { \~command)
-and restore the previous environment from the environment
-stack as the actual device configuration data.
-.
-\}              \" endif @USE_ENV_STACK
-@end ignore
-
-@item C @var{xxx}@angles{whitespace}
-Print a special character named @var{xxx}.  The trailing syntactical
-space or line break is necessary to allow glyph names of arbitrary
-length.  The glyph is printed at the current print position; the glyph's
-size is read from the font file.  The print position is not changed.
-
-@item c @var{g}
-Print glyph@tie{}@var{g} at the current print
-position;@footnote{@samp{c} is actually a misnomer since it outputs a
-glyph.} the glyph's size is read from the font file.  The print position
-is not changed.
-
-@item f @var{n}
-Set font to font number@tie{}@var{n} (a non-negative integer).
-
-@item H @var{n}
-Move right to the absolute vertical position@tie{}@var{n} (a
-non-negative integer in basic units @samp{u} relative to left edge of
-current page.
-
-@item h @var{n}
-Move @var{n} (a non-negative integer) basic units @samp{u} horizontally
-to the right.  The original @acronym{UNIX} troff manual allows negative
-values for @var{n} also, but @code{gtroff} doesn't use this.
-
-@item m @var{color-scheme} @r{[}@var{component} @dots{}@r{]}
-Set the color for text (glyphs), line drawing, and the outline of
-graphic objects using different color schemes; the analoguous command
-for the filling color of graphic objects is @samp{DF}.  The color
-components are specified as integer arguments between 0 and 65536.  The
-number of color components and their meaning vary for the different
-color schemes.  These commands are generated by @code{gtroff}'s escape
-sequence @code{\m}.  No position changing.  These commands are a
-@code{gtroff} extension.
-
-@table @code
-@item mc @var{cyan} @var{magenta} @var{yellow}
-Set color using the CMY color scheme, having the 3@tie{}color components
-@var{cyan}, @var{magenta}, and @var{yellow}.
-
-@item md
-Set color to the default color value (black in most cases).  No
-component arguments.
-
-@item mg @var{gray}
-Set color to the shade of gray given by the argument, an integer between
-0 (black) and 65536 (white).
-
-@item mk @var{cyan} @var{magenta} @var{yellow} @var{black}
-Set color using the CMYK color scheme, having the 4@tie{}color
-components @var{cyan}, @var{magenta}, @var{yellow}, and @var{black}.
-
-@item mr @var{red} @var{green} @var{blue}
-Set color using the RGB color scheme, having the 3@tie{}color components
-@var{red}, @var{green}, and @var{blue}.
-@end table
-
-@item N @var{n}
-Print glyph with index@tie{}@var{n} (a non-negative integer) of the
-current font.  This command is a @code{gtroff} extension.
-
-@item n @var{b} @var{a}
-Inform the device about a line break, but no positioning is done by this
-command.  In @acronym{AT&T} @code{troff}, the integer arguments @var{b}
-and@tie{}@var{a} informed about the space before and after the current
-line to make the intermediate output more human readable without
-performing any action.  In @code{groff}, they are just ignored, but they
-must be provided for compatibility reasons.
-
-@item p @var{n}
-Begin a new page in the outprint.  The page number is set
-to@tie{}@var{n}.  This page is completely independent of pages formerly
-processed even if those have the same page number.  The vertical
-position on the outprint is automatically set to@tie{}0.  All
-positioning, writing, and drawing is always done relative to a page, so
-a @samp{p} command must be issued before any of these commands.
-
-@item s @var{n}
-Set point size to @var{n}@tie{}scaled points (this is unit @samp{z}).
-@acronym{AT&T} @code{troff} used the unit points (@samp{p}) instead.
-@xref{Output Language Compatibility}.
-
-@item t @var{xxx}@angles{whitespace}
-@itemx t @var{xxx} @var{dummy-arg}@angles{whitespace}
-Print a word, i.e., a sequence of characters @var{xxx} representing
-output glyphs which names are single characters, terminated by a space
-character or a line break; an optional second integer argument is
-ignored (this allows the formatter to generate an even number of
-arguments).  The first glyph should be printed at the current position,
-the current horizontal position should then be increased by the width of
-the first glyph, and so on for each glyph.  The widths of the glyphs are
-read from the font file, scaled for the current point size, and rounded
-to a multiple of the horizontal resolution.  Special characters cannot
-be printed using this command (use the @samp{C} command for special
-characters).  This command is a @code{gtroff} extension; it is only used
-for devices whose @file{DESC} file contains the @code{tcommand} keyword
-(@pxref{DESC File Format}).
-
-@item u @var{n} @var{xxx}@angles{whitespace}
-Print word with track kerning.  This is the same as the @samp{t} command
-except that after printing each glyph, the current horizontal position
-is increased by the sum of the width of that glyph and@tie{}@var{n} (an
-integer in basic units @samp{u}).  This command is a @code{gtroff}
-extension; it is only used for devices whose @file{DESC} file contains
-the @code{tcommand} keyword (@pxref{DESC File Format}).
-
-@item V @var{n}
-Move down to the absolute vertical position@tie{}@var{n} (a non-negative
-integer in basic units @samp{u}) relative to upper edge of current page.
-
-@item v @var{n}
-Move @var{n}@tie{}basic units @samp{u} down (@var{n} is a non-negative
-integer).  The original @acronym{UNIX} troff manual allows negative
-values for @var{n} also, but @code{gtroff} doesn't use this.
-
-@item w
-Informs about a paddable white space to increase readability.  The
-spacing itself must be performed explicitly by a move command.
-@end table
-
-@node Graphics Commands, Device Control Commands, Simple Commands, Command Reference
-@subsubsection Graphics Commands
-
-Each graphics or drawing command in the intermediate output starts with
-the letter @samp{D}, followed by one or two characters that specify a
-subcommand; this is followed by a fixed or variable number of integer
-arguments that are separated by a single space character.  A @samp{D}
-command may not be followed by another command on the same line (apart
-from a comment), so each @samp{D} command is terminated by a syntactical
-line break.
-
-@code{gtroff} output follows the classical spacing rules (no space
-between command and subcommand, all arguments are preceded by a single
-space character), but the parser allows optional space between the
-command letters and makes the space before the first argument optional.
-As usual, each space can be any sequence of tab and space characters.
-
-Some graphics commands can take a variable number of arguments.  In this
-case, they are integers representing a size measured in basic units
-@samp{u}.  The arguments called @var{h1}, @var{h2}, @dots{}, @var{hn}
-stand for horizontal distances where positive means right, negative
-left.  The arguments called @var{v1}, @var{v2}, @dots{}, @var{vn} stand
-for vertical distances where positive means down, negative up.  All
-these distances are offsets relative to the current location.
-
-Each graphics command directly corresponds to a similar @code{gtroff}
-@code{\D} escape sequence.  @xref{Drawing Requests}.
-
-Unknown @samp{D} commands are assumed to be device-specific.  Its
-arguments are parsed as strings; the whole information is then sent to
-the postprocessor.
-
-In the following command reference, the syntax element @angles{line
-break} means a syntactical line break as defined above.
-
-@table @code
-@item D~ @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
-Draw B-spline from current position to offset (@var{h1},@var{v1}), then
-to offset (@var{h2},@var{v2}), if given, etc.@: up to
-(@var{hn},@var{vn}).  This command takes a variable number of argument
-pairs; the current position is moved to the terminal point of the drawn
-curve.
-
-@item Da @var{h1} @var{v1} @var{h2} @var{v2}@angles{line break}
-Draw arc from current position to
-(@var{h1},@var{v1})@math{+}(@var{h2},@var{v2}) with center at
-(@var{h1},@var{v1}); then move the current position to the final point
-of the arc.
-
-@item DC @var{d}@angles{line break}
-@itemx DC @var{d} @var{dummy-arg}@angles{line break}
-Draw a solid circle using the current fill color with
-diameter@tie{}@var{d} (integer in basic units @samp{u}) with leftmost
-point at the current position; then move the current position to the
-rightmost point of the circle.  An optional second integer argument is
-ignored (this allows the formatter to generate an even number of
-arguments).  This command is a @code{gtroff} extension.
-
-@item Dc @var{d}@angles{line break}
-Draw circle line with diameter@tie{}@var{d} (integer in basic units
-@samp{u}) with leftmost point at the current position; then move the
-current position to the rightmost point of the circle.
-
-@item DE @var{h} @var{v}@angles{line break}
-Draw a solid ellipse in the current fill color with a horizontal
-diameter of@tie{}@var{h} and a vertical diameter of@tie{}@var{v} (both
-integers in basic units @samp{u}) with the leftmost point at the current
-position; then move to the rightmost point of the ellipse.  This command
-is a @code{gtroff} extension.
-
-@item De @var{h} @var{v}@angles{line break}
-Draw an outlined ellipse with a horizontal diameter of@tie{}@var{h} and
-a vertical diameter of@tie{}@var{v} (both integers in basic units
-@samp{u}) with the leftmost point at current position; then move to the
-rightmost point of the ellipse.
-
-@item DF @var{color-scheme} @r{[}@var{component} @dots{}@r{]}@angles{line break}
-Set fill color for solid drawing objects using different color schemes;
-the analoguous command for setting the color of text, line graphics, and
-the outline of graphic objects is @samp{m}.  The color components are
-specified as integer arguments between 0 and 65536.  The number of color
-components and their meaning vary for the different color schemes.
-These commands are generated by @code{gtroff}'s escape sequences
-@w{@code{\D'F @dots{}'}} and @code{\M} (with no other corresponding
-graphics commands).  No position changing.  This command is a
-@code{gtroff} extension.
-
-@table @code
-@item DFc @var{cyan} @var{magenta} @var{yellow}@angles{line break}
-Set fill color for solid drawing objects using the CMY color scheme,
-having the 3@tie{}color components @var{cyan}, @var{magenta}, and
-@var{yellow}.
-
-@item DFd@angles{line break}
-Set fill color for solid drawing objects to the default fill color value
-(black in most cases).  No component arguments.
-
-@item DFg @var{gray}@angles{line break}
-Set fill color for solid drawing objects to the shade of gray given by
-the argument, an integer between 0 (black) and 65536 (white).
-
-@item DFk @var{cyan} @var{magenta} @var{yellow} @var{black}@angles{line break}
-Set fill color for solid drawing objects using the CMYK color scheme,
-having the 4@tie{}color components @var{cyan}, @var{magenta},
-@var{yellow}, and @var{black}.
-
-@item DFr @var{red} @var{green} @var{blue}@angles{line break}
-Set fill color for solid drawing objects using the RGB color scheme,
-having the 3@tie{}color components @var{red}, @var{green}, and
-@var{blue}.
-@end table
-
-@item Df @var{n}@angles{line break}
-The argument@tie{}@var{n} must be an integer in the range @math{-32767}
-to 32767.
-
-@table @asis
-@item @math{0 @value{LE} @var{n} @value{LE} 1000}
-Set the color for filling solid drawing objects to a shade of gray,
-where 0 corresponds to solid white, 1000 (the default) to solid black,
-and values in between to intermediate shades of gray; this is obsoleted
-by command @samp{DFg}.
-
-@item @math{@var{n} < 0} or @math{@var{n} > 1000}
-Set the filling color to the color that is currently being used for the
-text and the outline, see command @samp{m}.  For example, the command
-sequence
-
-@Example
-mg 0 0 65536
-Df -1
-@endExample
-
-@noindent
-sets all colors to blue.
-@end table
-
-@noindent
-No position changing.  This command is a @code{gtroff} extension.
-
-@item Dl @var{h} @var{v}@angles{line break}
-Draw line from current position to offset (@var{h},@var{v}) (integers in
-basic units @samp{u}); then set current position to the end of the drawn
-line.
-
-@item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
-Draw a polygon line from current position to offset (@var{h1},@var{v1}),
-from there to offset (@var{h2},@var{v2}), etc.@: up to offset
-(@var{hn},@var{vn}), and from there back to the starting position.  For
-historical reasons, the position is changed by adding the sum of all
-arguments with odd index to the actual horizontal position and the even
-ones to the vertical position.  Although this doesn't make sense it is
-kept for compatibility.
-@ignore
-As the polygon is closed, the end of drawing is the starting point, so
-the position doesn't change.
-@end ignore
-This command is a @code{gtroff} extension.
-
-@item Dp @var{h1} @var{v1} @var{h2} @var{v2} @dots{} @var{hn} @var{vn}@angles{line break}
-Draw a solid polygon in the current fill color rather than an outlined
-polygon, using the same arguments and positioning as the corresponding
-@samp{Dp} command.
-@ignore
-No position changing.
-@end ignore
-This command is a @code{gtroff} extension.
-
-@item Dt @var{n}@angles{line break}
-Set the current line thickness to@tie{}@var{n} (an integer in basic
-units @samp{u}) if @math{@var{n}>0}; if @math{@var{n}=0} select the
-smallest available line thickness; if @math{@var{n}<0} set the line
-thickness proportional to the point size (this is the default before the
-first @samp{Dt} command was specified).  For historical reasons, the
-horizontal position is changed by adding the argument to the actual
-horizontal position, while the vertical position is not changed.
-Although this doesn't make sense it is kept for compatibility.
-@ignore
-No position changing.
-@end ignore
-This command is a @code{gtroff} extension.
-@end table
-
-@node Device Control Commands, Obsolete Command, Graphics Commands, Command Reference
-@subsubsection Device Control Commands
-
-Each device control command starts with the letter @samp{x}, followed by
-a space character (optional or arbitrary space or tab in @code{gtroff})
-and a subcommand letter or word; each argument (if any) must be preceded
-by a syntactical space.  All @samp{x} commands are terminated by a
-syntactical line break; no device control command can be followed by
-another command on the same line (except a comment).
-
-The subcommand is basically a single letter, but to increase
-readability, it can be written as a word, i.e., an arbitrary sequence of
-characters terminated by the next tab, space, or newline character.  All
-characters of the subcommand word but the first are simply ignored.  For
-example, @code{gtroff} outputs the initialization command @w{@samp{x i}}
-as @w{@samp{x init}} and the resolution command @w{@samp{x r}} as
-@w{@samp{x res}}.
-
-In the following, the syntax element @angles{line break} means a
-syntactical line break (@pxref{Separation}).
-
-@table @code
-@item xF @var{name}@angles{line break}
-The @samp{F} stands for @var{Filename}.
-
-Use @var{name} as the intended name for the current file in error
-reports.  This is useful for remembering the original file name when
-@code{gtroff} uses an internal piping mechanism.  The input file is not
-changed by this command.  This command is a @code{gtroff} extension.
-
-@item xf @var{n} @var{s}@angles{line break}
-The @samp{f} stands for @var{font}.
-
-Mount font position@tie{}@var{n} (a non-negative integer) with font
-named@tie{}@var{s} (a text word).  @xref{Font Positions}.
-
-@item xH @var{n}@angles{line break}
-The @samp{H} stands for @var{Height}.
-
-Set glyph height to@tie{}@var{n} (a positive integer in scaled points
-@samp{z}).  @acronym{AT&T} @code{troff} uses the unit points (@samp{p})
-instead.  @xref{Output Language Compatibility}.
-
-@item xi@angles{line break}
-The @samp{i} stands for @var{init}.
-
-Initialize device.  This is the third command of the prologue.
-
-@item xp@angles{line break}
-The @samp{p} stands for @var{pause}.
-
-Parsed but ignored.  The original @acronym{UNIX} troff manual writes
-
-@display
-pause device, can be restarted
-@end display
-
-@item xr @var{n} @var{h} @var{v}@angles{line break}
-The @samp{r} stands for @var{resolution}.
-
-Resolution is@tie{}@var{n}, while @var{h} is the minimal horizontal
-motion, and @var{v} the minimal vertical motion possible with this
-device; all arguments are positive integers in basic units @samp{u} per
-inch.  This is the second command of the prologue.
-
-@item xS @var{n}@angles{line break}
-The @samp{S} stands for @var{Slant}.
-
-Set slant to@tie{}@var{n} (an integer in basic units @samp{u}).
-
-@item xs@angles{line break}
-The @samp{s} stands for @var{stop}.
-
-Terminates the processing of the current file; issued as the last
-command of any intermediate troff output.
-
-@item xt@angles{line break}
-The @samp{t} stands for @var{trailer}.
-
-Generate trailer information, if any.  In @var{gtroff}, this is actually
-just ignored.
-
-@item xT @var{xxx}@angles{line break}
-The @samp{T} stands for @var{Typesetter}.
-
-Set name of device to word @var{xxx}, a sequence of characters ended by
-the next white space character.  The possible device names coincide with
-those from the @code{groff} @option{-T} option.  This is the first
-command of the prologue.
-
-@item xu @var{n}@angles{line break}
-The @samp{u} stands for @var{underline}.
-
-Configure underlining of spaces.  If @var{n} is@tie{}1, start
-underlining of spaces; if @var{n} is@tie{}0, stop underlining of spaces.
-This is needed for the @code{cu} request in nroff mode and is ignored
-otherwise.  This command is a @code{gtroff} extension.
-
-@item xX @var{anything}@angles{line break}
-The @samp{x} stands for @var{X-escape}.
-
-Send string @var{anything} uninterpreted to the device.  If the line
-following this command starts with a @samp{+} character this line is
-interpreted as a continuation line in the following sense.  The @samp{+}
-is ignored, but a newline character is sent instead to the device, the
-rest of the line is sent uninterpreted.  The same applies to all
-following lines until the first character of a line is not a @samp{+}
-character.  This command is generated by the @code{gtroff} escape
-sequence @code{\X}.  The line-continuing feature is a @code{gtroff}
-extension.
-@end table
-
-@node Obsolete Command,  , Device Control Commands, Command Reference
-@subsubsection Obsolete Command
-In @acronym{AT&T} @code{troff} output, the writing of a single glyph is
-mostly done by a very strange command that combines a horizontal move
-and a single character giving the glyph name.  It doesn't have a command
-code, but is represented by a 3-character argument consisting of exactly
-2@tie{}digits and a character.
-
-@table @asis
-@item @var{dd}@var{g}
-Move right @var{dd} (exactly two decimal digits) basic units @samp{u},
-then print glyph@tie{}@var{g} (represented as a single character).
-
-In @code{gtroff}, arbitrary syntactical space around and within this
-command is allowed to be added.  Only when a preceding command on the
-same line ends with an argument of variable length a separating space is
-obligatory.  In @acronym{AT&T} @code{troff}, large clusters of these and
-other commands are used, mostly without spaces; this made such output
-almost unreadable.
-@end table
-
-For modern high-resolution devices, this command does not make sense
-because the width of the glyphs can become much larger than two decimal
-digits.  In @code{gtroff}, this is only used for the devices @code{X75},
-@code{X75-12}, @code{X100}, and @code{X100-12}.  For other devices, the
-commands @samp{t} and @samp{u} provide a better functionality.
-
-@c ---------------------------------------------------------------------
-
-@node Intermediate Output Examples, Output Language Compatibility, Command Reference, gtroff Output
-@subsection Intermediate Output Examples
-
-This section presents the intermediate output generated from the same
-input for three different devices.  The input is the sentence @samp{hell
-world} fed into @code{gtroff} on the command line.
-
-@table @asis
-@item High-resolution device @code{ps}
-
-This is the standard output of @code{gtroff} if no @option{-T} option is
-given.
-
-@example
-@group
-shell> echo "hell world" | groff -Z -T ps
-
-x T ps
-x res 72000 1 1
-x init
-@end group
-p1
-x font 5 TR
-f5
-s10000
-V12000
-H72000
-thell
-wh2500
-tw
-H96620
-torld
-n12000 0
-@group
-x trailer
-V792000
-x stop
-@end group
-@end example
-
-@noindent
-This output can be fed into @code{grops} to get its representation as a
-@sc{PostScript} file.
-
-@item Low-resolution device @code{latin1}
-
-This is similar to the high-resolution device except that the
-positioning is done at a minor scale.  Some comments (lines starting
-with @samp{#}) were added for clarification; they were not generated by
-the formatter.
-
-@example
-@group
-shell> echo "hell world" | groff -Z -T latin1
-
-# prologue
-x T latin1
-x res 240 24 40
-x init
-@end group
-# begin a new page
-p1
-# font setup
-x font 1 R
-f1
-s10
-# initial positioning on the page
-V40
-H0
-# write text `hell'
-thell
-# inform about space, and issue a horizontal jump
-wh24
-# write text `world'
-tworld
-# announce line break, but do nothing because ...
-n40 0
-@group
-# ... the end of the document has been reached
-x trailer
-V2640
-x stop
-@end group
-@end example
-
-@noindent
-This output can be fed into @code{grotty} to get a formatted text
-document.
-
-@item @acronym{AT&T} @code{troff} output
-Since a computer monitor has a very low resolution compared to modern
-printers the intermediate output for the X@tie{}Window devices can use
-the jump-and-write command with its 2-digit displacements.
-
-@example
-@group
-shell> echo "hell world" | groff -Z -T X100
-
-x T X100
-x res 100 1 1
-x init
-@end group
-p1
-x font 5 TR
-f5
-s10
-V16
-H100
-# write text with jump-and-write commands
-ch07e07l03lw06w11o07r05l03dh7
-n16 0
-@group
-x trailer
-V1100
-x stop
-@end group
-@end example
-
-@noindent
-This output can be fed into @code{xditview} or @code{gxditview} for
-displaying in@tie{}X.
-
-Due to the obsolete jump-and-write command, the text clusters in the
-@acronym{AT&T} @code{troff} output are almost unreadable.
-@end table
-
-@c ---------------------------------------------------------------------
-
-@node Output Language Compatibility,  , Intermediate Output Examples, gtroff Output
-@subsection Output Language Compatibility
-
-The intermediate output language of @acronym{AT&T} @code{troff} was
-first documented in the @acronym{UNIX} troff manual, with later
-additions documented in @cite{A Typesetter-indenpendent TROFF}, written
-by Brian Kernighan.
-
-The @code{gtroff} intermediate output format is compatible with this
-specification except for the following features.
-
-@itemize @bullet
-@item
-The classical quasi device independence is not yet implemented.
-
-@item
-The old hardware was very different from what we use today.  So the
-@code{groff} devices are also fundamentally different from the ones
-in @acronym{AT&T} @code{troff}.  For example, the @acronym{AT&T}
-@sc{PostScript} device is called @code{post} and has a resolution of
-only 720 units per inch, suitable for printers 20 years ago, while
-@code{groff}'s @code{ps} device has a resolution of 72000 units per
-inch.  Maybe, by implementing some rescaling mechanism similar to the
-classical quasi device independence, @code{groff} could emulate
-@acronym{AT&T}'s @code{post} device.
-
-@item
-The B-spline command @samp{D~} is correctly handled by the intermediate
-output parser, but the drawing routines aren't implemented in some of
-the postprocessor programs.
-
-@item
-The argument of the commands @samp{s} and @w{@samp{x H}} has the
-implicit unit scaled point @samp{z} in @code{gtroff}, while
-@acronym{AT&T} @code{troff} has point (@samp{p}).  This isn't an
-incompatibility but a compatible extension, for both units coincide for
-all devices without a @code{sizescale} parameter in the @file{DESC}
-file, including all postprocessors from @acronym{AT&T} and
-@code{groff}'s text devices.  The few @code{groff} devices with a
-@code{sizescale} parameter either do not exist for @acronym{AT&T}
-@code{troff}, have a different name, or seem to have a different
-resolution.  So conflicts are very unlikely.
-
-@item
-The position changing after the commands @samp{Dp}, @samp{DP}, and
-@samp{Dt} is illogical, but as old versions of @code{gtroff} used this
-feature it is kept for compatibility reasons.
-
-@ignore
-Temporarily, there existed some confusion on the positioning after the
-@samp{D} commands that are groff extensions.  This has been clarified by
-establishing the classical rule for all @code{groff} drawing commands:
-
-@itemize
-@item
-The position after a graphic object has been drawn is at its end; for
-circles and ellipses, the `end' is at the right side.
-
-@item
-From this, the positionings specified for the drawing commands above
-follow quite naturally.
-@end itemize
-@end ignore
-
-@end itemize
-
-
-@c =====================================================================
-
-@node Font Files,  , gtroff Output, File formats
-@section Font Files
-@cindex font files
-@cindex files, font
-
-The @code{gtroff} font format is roughly a superset of the
-@code{ditroff} font format (as used in later versions of @acronym{AT&T}
-@code{troff} and its descendants).  Unlike the @code{ditroff} font
-format, there is no associated binary format; all files are text
-files.@footnote{Plan@tie{}9 @code{troff} has also abandoned the binary
-format.}  The font files for device @var{name} are stored in a directory
-@file{dev@var{name}}.  There are two types of file: a device description
-file called @file{DESC} and for each font@tie{}@var{f} a font file
-called@tie{}@file{@var{f}}.
-
-@menu
-* DESC File Format::
-* Font File Format::
-@end menu
-
-@c ---------------------------------------------------------------------
-
-@node DESC File Format, Font File Format, Font Files, Font Files
-@subsection @file{DESC} File Format
-@cindex @file{DESC} file, format
-@cindex font description file, format
-@cindex format of font description file
-@pindex DESC@r{ file format}
-
-The @file{DESC} file can contain the following types of line.  Except
-for the @code{charset} keyword, which must comes last (if at all), the
-order of the lines is not important.  Later entries in the file,
-however, override previous values.
-
-@table @code
-@item charset
-@kindex charset
-This line and everything following in the file are ignored.  It is
-allowed for the sake of backwards compatibility.
-
-@item family @var{fam}
-@kindex family
-The default font family is @var{fam}.
-
-@item fonts @var{n} @var{F1} @var{F2} @var{F3} @dots{} @var{Fn}
-@kindex fonts
-Fonts @var{F1} @dots{} @var{Fn} are mounted in the font positions
-@var{m}+1, @dots{}, @var{m}+@var{n} where @var{m} is the number of
-styles.  This command may extend over more than one line.  A font name
-of@tie{}0 means no font is mounted on the corresponding font position.
-
-@item hor @var{n}
-@kindex hor
-@cindex horizontal resolution
-@cindex resolution, horizontal
-The horizontal resolution is @var{n}@tie{}machine units.  All horizontal
-quantities are rounded to be multiples of this value.
-
-@item image_generator @var{string}
-@kindex image_generator
-@cindex PostScript, PNG image generation
-@cindex PNG image generation from PostScript
-Needed for @code{grohtml} only.  It specifies the program to generate
-PNG images from @sc{PostScript} input.  Under GNU/Linux this is
-usually @code{gs} but under other systems (notably cygwin) it might
-be set to another name.
-
-@item paperlength @var{n}
-@kindex paperlength
-The physical vertical dimension of the output medium in machine units.
-This isn't used by @code{troff} itself but by output devices.
-Deprecated.  Use @code{papersize} instead.
-
-@item papersize @var{string} @dots{}
-@kindex papersize
-Select a paper size.  Valid values for @var{string} are the ISO paper
-types @code{A0}-@code{A7}, @code{B0}-@code{B7}, @code{C0}-@code{C7},
-@code{D0}-@code{D7}, @code{DL}, and the US paper types @code{letter},
-@code{legal}, @code{tabloid}, @code{ledger}, @code{statement},
-@code{executive}, @code{com10}, and @code{monarch}.  Case is not
-significant for @var{string} if it holds predefined paper types.
-Alternatively, @var{string} can be a file name (e.g.@:
-@file{/etc/papersize}); if the file can be opened, @code{groff} reads
-the first line and tests for the above paper sizes.  Finally,
-@var{string} can be a custom paper size in the format
-@code{@var{length},@var{width}} (no spaces before and after the comma).
-Both @var{length} and @var{width} must have a unit appended; valid
-values are @samp{i} for inches, @samp{C} for centimeters, @samp{p} for
-points, and @samp{P} for picas.  Example: @code{12c,235p}.  An argument
-that starts with a digit is always treated as a custom paper format.
-@code{papersize} sets both the vertical and horizontal dimension of the
-output medium.
-
-More than one argument can be specified; @code{groff} scans from left to
-right and uses the first valid paper specification.
-
-@item paperwidth @var{n}
-@kindex paperwidth
-The physical horizontal dimension of the output medium in machine units.
-This isn't used by @code{troff} itself but by output devices.
-Deprecated.  Use @code{papersize} instead.
-
-@item pass_filenames
-@kindex pass_filenames
-Tell @code{gtroff} to emit the name of the source file currently being
-processed.  This is achieved by the intermediate output command
-@samp{F}.  Currently, this is only used by the @code{grohtml} output
-device.
-
-@item postpro @var{program}
-@kindex postpro
-Call @var{program} as a postprocessor.  For example, the line
-
-@Example
-postpro grodvi
-@endExample
-
-@noindent
-in the file @file{devdvi/DESC} makes @code{groff} call @code{grodvi} if
-option @option{-Tdvi} is given (and @option{-Z} isn't used).
-
-@item prepro @var{program}
-@kindex prepro
-Call @var{program} as a preprocessor.  Currently, this keyword is used
-by @code{groff} with option @option{-Thtml} or @option{-Txhtml} only.
-
-@item print @var{program}
-@kindex print
-Use @var{program} as a spooler program for printing.  If omitted, the
-@option{-l} and @option{-L} options of @code{groff} are ignored.
-
-@item res @var{n}
-@kindex res
-@cindex device resolution
-@cindex resolution, device
-There are @var{n}@tie{}machine units per inch.
-
-@item sizes @var{s1} @var{s2} @dots{} @var{sn} 0
-@kindex sizes
-This means that the device has fonts at @var{s1}, @var{s2}, @dots{}
-@var{sn} scaled points.  The list of sizes must be terminated by@tie{}0
-(this is digit zero).  Each @var{si} can also be a range of sizes
-@var{m}-@var{n}.  The list can extend over more than one line.
-
-@item sizescale @var{n}
-@kindex sizescale
-The scale factor for point sizes.  By default this has a value
-of@tie{}1.  One scaled point is equal to one point/@var{n}.  The
-arguments to the @code{unitwidth} and @code{sizes} commands are given in
-scaled points.  @xref{Fractional Type Sizes}, for more information.
-
-@item styles @var{S1} @var{S2} @dots{} @var{Sm}
-@kindex styles
-The first @var{m}@tie{}font positions are associated with styles
-@var{S1} @dots{} @var{Sm}.
-
-@item tcommand
-@kindex tcommand
-This means that the postprocessor can handle the @samp{t} and @samp{u}
-intermediate output commands.
-
-@item unicode
-@kindex unicode
-Indicate that the output device supports the complete Unicode
-repertoire.  Useful only for devices that produce @emph{character
-entities} instead of glyphs.
-
-If @code{unicode} is present, no @code{charset} section is required in
-the font description files since the Unicode handling built into
-@code{groff} is used.  However, if there are entries in a @code{charset}
-section, they either override the default mappings for those particular
-characters or add new mappings (normally for composite characters).
-
-This is used for @option{-Tutf8}, @option{-Thtml}, and @option{-Txhtml}.
-
-@item unitwidth @var{n}
-@kindex unitwidth
-Quantities in the font files are given in machine units for fonts whose
-point size is @var{n}@tie{}scaled points.
-
-@item unscaled_charwidths
-@kindex unscaled_charwidths
-Make the font handling module always return unscaled character widths.
-Needed for the @code{grohtml} device.
-
-@item use_charnames_in_special
-@kindex use_charnames_in_special
-This command indicates that @code{gtroff} should encode special
-characters inside special commands.  Currently, this is only used by the
-@code{grohtml} output device.  @xref{Postprocessor Access}.
-
-@item vert @var{n}
-@kindex vert
-@cindex vertical resolution
-@cindex resolution, vertical
-The vertical resolution is @var{n}@tie{}machine units.  All vertical
-quantities are rounded to be multiples of this value.
-@end table
-
-The @code{res}, @code{unitwidth}, @code{fonts}, and @code{sizes} lines
-are mandatory.  Other commands are ignored by @code{gtroff} but may be
-used by postprocessors to store arbitrary information about the device
-in the @file{DESC} file.
-
-@kindex spare1
-@kindex spare2
-@kindex biggestfont
-Here a list of obsolete keywords that are recognized by @code{groff}
-but completely ignored: @code{spare1}, @code{spare2},
-@code{biggestfont}.
-
-@c ---------------------------------------------------------------------
-
-@node Font File Format,  , DESC File Format, Font Files
-@subsection Font File Format
-@cindex font file, format
-@cindex font description file, format
-@cindex format of font files
-@cindex format of font description files
-
-A @dfn{font file}, also (and probably better) called a @dfn{font
-description file}, has two sections.  The first section is a sequence of
-lines each containing a sequence of blank delimited words; the first
-word in the line is a key, and subsequent words give a value for that
-key.
-
-@table @code
-@item name @var{f}
-@kindex name
-The name of the font is@tie{}@var{f}.
-
-@item spacewidth @var{n}
-@kindex spacewidth
-The normal width of a space is@tie{}@var{n}.
-
-@item slant @var{n}
-@kindex slant
-The glyphs of the font have a slant of @var{n}@tie{}degrees.  (Positive
-means forward.)
-
-@item ligatures @var{lig1} @var{lig2} @dots{} @var{lign} [0]
-@kindex ligatures
-Glyphs @var{lig1}, @var{lig2}, @dots{}, @var{lign} are ligatures;
-possible ligatures are @samp{ff}, @samp{fi}, @samp{fl}, @samp{ffi} and
-@samp{ffl}.  For backwards compatibility, the list of ligatures may be
-terminated with a@tie{}0.  The list of ligatures may not extend over
-more than one line.
-
-@item special
-@cindex special fonts
-@kindex special
-The font is @dfn{special}; this means that when a glyph is requested
-that is not present in the current font, it is searched for in any
-special fonts that are mounted.
-@end table
-
-Other commands are ignored by @code{gtroff} but may be used by
-postprocessors to store arbitrary information about the font in the font
-file.
-
-@cindex comments in font files
-@cindex font files, comments
-@kindex #
-The first section can contain comments, which start with the @samp{#}
-character and extend to the end of a line.
-
-The second section contains one or two subsections.  It must contain a
-@code{charset} subsection and it may also contain a @code{kernpairs}
-subsection.  These subsections can appear in any order.  Each subsection
-starts with a word on a line by itself.
-
-@kindex charset
-The word @code{charset} starts the character set
-subsection.@footnote{This keyword is misnamed since it starts a list of
-ordered glyphs, not characters.}  The @code{charset} line is followed by
-a sequence of lines.  Each line gives information for one glyph.  A line
-comprises a number of fields separated by blanks or tabs.  The format is
-
-@quotation
-@var{name} @var{metrics} @var{type} @var{code} [@var{entity-name}]
-[@code{--} @var{comment}]
-@end quotation
-
-@cindex 8-bit input
-@cindex input, 8-bit
-@cindex accessing unnamed glyphs with @code{\N}
-@cindex unnamed glyphs, accessing with @code{\N}
-@cindex characters, unnamed, accessing with @code{\N}
-@cindex glyphs, unnamed, accessing with @code{\N}
-@kindex ---
-@noindent
-@var{name} identifies the glyph name@footnote{The distinction between
-input, characters, and output, glyphs, is not clearly separated in the
-terminology of @code{groff}; for example, the @code{char} request should
-be called @code{glyph} since it defines an output entity.}: If
-@var{name} is a single character@tie{}@var{c} then it corresponds to the
-@code{gtroff} input character@tie{}@var{c}; if it is of the form
-@samp{\@var{c}} where @var{c} is a single character, then it corresponds
-to the special character @code{\[@var{c}]}; otherwise it corresponds to
-the special character @samp{\[@var{name}]}.  If it is exactly two
-characters @var{xx} it can be entered as @samp{\(@var{xx}}.  Note that
-single-letter special characters can't be accessed as @samp{\@var{c}};
-the only exception is @samp{\-}, which is identical to @code{\[-]}.
-
-@code{gtroff} supports 8-bit input characters; however some utilities
-have difficulties with eight-bit characters.  For this reason, there is
-a convention that the entity name @samp{char@var{n}} is equivalent to
-the single input character whose code is@tie{}@var{n}.  For example,
-@samp{char163} would be equivalent to the character with code@tie{}163,
-which is the pounds sterling sign in the ISO@tie{}@w{Latin-1} character
-set.  You shouldn't use @samp{char@var{n}} entities in font description
-files since they are related to input, not output.  Otherwise, you get
-hard-coded connections between input and output encoding, which prevents
-use of different (input) character sets.
-
-The name @samp{---} is special and indicates that the glyph is unnamed;
-such glyphs can only be used by means of the @code{\N} escape sequence
-in @code{gtroff}.
-
-The @var{type} field gives the glyph type:
-
-@table @code
-@item 1
-the glyph has a descender, for example, @samp{p};
-
-@item 2
-the glyph has an ascender, for example, @samp{b};
-
-@item 3
-the glyph has both an ascender and a descender, for example, @samp{(}.
-@end table
-
-The @var{code} field gives the code that the postprocessor uses to
-print the glyph.  The glyph can also be input to @code{gtroff} using
-this code by means of the @code{\N} escape sequence.  @var{code} can be
-any integer.  If it starts with @samp{0} it is interpreted as octal; if
-it starts with @samp{0x} or @samp{0X} it is interpreted as hexadecimal.
-Note, however, that the @code{\N} escape sequence only accepts a decimal
-integer.
-
-The @var{entity-name} field gives an @acronym{ASCII} string identifying
-the glyph that the postprocessor uses to print the @code{gtroff} glyph
-@var{name}.  This field is optional and has been introduced so that the
-@code{grohtml} device driver can encode its character set.  For example,
-the glyph @samp{\[Po]} is represented as @samp{&pound;} in
-@acronym{HTML} 4.0.
-
-Anything on the line after the @var{entity-name} field resp.@: after
-@samp{--} is ignored.
-
-The @var{metrics} field has the form:
-
-@display
-@group
-@var{width}[@code{,}@var{height}[@code{,}@var{depth}[@code{,}@var{italic-correction}
-  [@code{,}@var{left-italic-correction}[@code{,}@var{subscript-correction}]]]]]
-@end group
-@end display
-
-@noindent
-There must not be any spaces between these subfields (it has been split
-here into two lines for better legibility only).  Missing subfields are
-assumed to be@tie{}0.  The subfields are all decimal integers.  Since
-there is no associated binary format, these values are not required to
-fit into a variable of type @samp{char} as they are in @code{ditroff}.
-The @var{width} subfield gives the width of the glyph.  The @var{height}
-subfield gives the height of the glyph (upwards is positive); if a glyph
-does not extend above the baseline, it should be given a zero height,
-rather than a negative height.  The @var{depth} subfield gives the depth
-of the glyph, that is, the distance from the baseline to the lowest
-point below the baseline to which the glyph extends (downwards is
-positive); if a glyph does not extend below the baseline, it should be
-given a zero depth, rather than a negative depth.  The
-@var{italic-correction} subfield gives the amount of space that should
-be added after the glyph when it is immediately to be followed by a
-glyph from a roman font.  The @var{left-italic-correction} subfield
-gives the amount of space that should be added before the glyph when it
-is immediately to be preceded by a glyph from a roman font.  The
-@var{subscript-correction} gives the amount of space that should be
-added after a glyph before adding a subscript.  This should be less than
-the italic correction.
-
-A line in the @code{charset} section can also have the format
-
-@Example
-@var{name} "
-@endExample
-
-@noindent
-This indicates that @var{name} is just another name for the glyph
-mentioned in the preceding line.
-
-@kindex kernpairs
-The word @code{kernpairs} starts the kernpairs section.  This contains a
-sequence of lines of the form:
-
-@Example
-@var{c1} @var{c2} @var{n}
-@endExample
-
-@noindent
-This means that when glyph @var{c1} appears next to glyph @var{c2} the
-space between them should be increased by@tie{}@var{n}.  Most entries in
-the kernpairs section have a negative value for@tie{}@var{n}.
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Installation, Copying This Manual, File formats, Top
-@chapter Installation
-@cindex installation
-
-@c XXX
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Copying This Manual, Request Index, Installation, Top
-@appendix Copying This Manual
-
-@include fdl.texi
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Request Index, Escape Index, Copying This Manual, Top
-@appendix Request Index
-
-Requests appear without the leading control character (normally either
-@samp{.} or @samp{'}).
-
-@printindex rq
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Escape Index, Operator Index, Request Index, Top
-@appendix Escape Index
-
-Any escape sequence @code{\@var{X}} with @var{X} not in the list below
-emits a warning, printing glyph @var{X}.
-
-@printindex es
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Operator Index, Register Index, Escape Index, Top
-@appendix Operator Index
-
-@printindex op
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Register Index, Macro Index, Operator Index, Top
-@appendix Register Index
-
-The macro package or program a specific register belongs to is appended in
-brackets.
-
-A register name@tie{}@code{x} consisting of exactly one character can be
-accessed as @samp{\nx}.  A register name @code{xx} consisting of exactly
-two characters can be accessed as @samp{\n(xx}.  Register names
-@code{xxx} of any length can be accessed as @samp{\n[xxx]}.
-
-@printindex vr
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Macro Index, String Index, Register Index, Top
-@appendix Macro Index
-
-The macro package a specific macro belongs to is appended in brackets.
-They appear without the leading control character (normally @samp{.}).
-
-@printindex ma
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node String Index, Glyph Name Index, Macro Index, Top
-@appendix String Index
-
-The macro package or program a specific string belongs to is appended in
-brackets.
-
-A string name@tie{}@code{x} consisting of exactly one character can be
-accessed as @samp{\*x}.  A string name @code{xx} consisting of exactly
-two characters can be accessed as @samp{\*(xx}.  String names @code{xxx}
-of any length can be accessed as @samp{\*[xxx]}.
-
-
-@printindex st
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Glyph Name Index, Font File Keyword Index, String Index, Top
-@appendix Glyph Name Index
-
-A glyph name @code{xx} consisting of exactly two characters can be
-accessed as @samp{\(xx}.  Glyph names @code{xxx} of any length can be
-accessed as @samp{\[xxx]}.
-
-@c XXX
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Font File Keyword Index, Program and File Index, Glyph Name Index, Top
-@appendix Font File Keyword Index
-
-@printindex ky
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Program and File Index, Concept Index, Font File Keyword Index, Top
-@appendix Program and File Index
-
-@printindex pg
-
-
-
-@c =====================================================================
-@c =====================================================================
-
-@node Concept Index,  , Program and File Index, Top
-@appendix Concept Index
-
-@printindex cp
-
-
-@bye
-
-@c Local Variables:
-@c mode: texinfo
-@c coding: latin-1
-@c End:
index 0e245e81c73d0d60b02ab1dbfd8cee9f5affcab0..2a027805909ce91e5a8852268997d450a139f7d1 100644 (file)
@@ -456,6 +456,14 @@ followed by the line
 .q "My thoughts on the subject" ,
 followed by a single blank line.
 .pp
+This request will not leave space at the top of a page.
+If you need the requested space to appear regardless of page position,
+use the
+.b .bl
+macro, which has the same syntax as
+.b .sp
+but always leaves the requested space, even at the top of a page.
+.pp
 The
 .b .in \ \c
 .i +N
@@ -2164,14 +2172,16 @@ prints as
 .sm UNIX
 rather than
 UNIX.
-.pp
-Warning:
-changing point sizes
-on the phototypesetter
-is a slow mechanical operation.
-On laser printers it may require loading new fonts.
-Size changes
-should be considered carefully.
+.\" Dave Kemper notes that the following probably has not been true
+.\" since 1986; keeping (but commented) for historical interest.
+.\" .pp
+.\" Warning:
+.\" changing point sizes
+.\" on the phototypesetter
+.\" is a slow mechanical operation.
+.\" On laser printers it may require loading new fonts.
+.\" Size changes
+.\" should be considered carefully.
 .sh 2 "Quotes"
 .pp
 It is conventional when using
@@ -2241,3 +2251,7 @@ and have given support for the project.
 .sp 1i
 This document applies to the version of the \-me macros
 included with \*G version \*(MO.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
index b405f88a0aa44bd689fc0d12bf82590b46725c71..cc765f0dd6f1d57221f48320b17870741c191e2d 100644 (file)
@@ -1,4 +1,4 @@
-.\" -*- mode: nroff; coding: utf-8; -*-
+.\" -*- coding: utf-8 -*- (for preconv; for Emacs, see end of file)
 .\"
 .\" Copyright (c) 1986 The Regents of the University of California.
 .\" All rights reserved.
@@ -389,6 +389,14 @@ suivis de la ligne
 .q "Mes pensées sur le sujet" ,
 suivie elle-même d'un espacement vertical.
 .pp
+Cette requête ne laissera pas d'espacement vertical en haut d'une page.
+Si vous avez besoin que l'espacement apparaisse quelque soit la position sur la page,
+utilisez la macro
+.b .bl
+, qui a la même syntaxe que
+.b .sp
+mais qui ajoutera toujours l'espacement demandé, même en haut d'une page.
+.pp
 La requête
 .b .in \ \c
 .i +N
@@ -2130,13 +2138,17 @@ Par exemple:
 s'imprime
 .sm UNIX , 
 ce qui est plus joli que UNIX.
-.pp
-Avertissement:
-changer les tailles de caractères
-sur le photocompositeur
-est une opération mécanique lente.
-Sur les imprimantes laser, il faudra peut-être recharger de nouvelles polices.
-Dès lors les changements de tailles de caractères devraient être utilisés avec prudence.
+.\" Dave Kemper notes that the following probably has not been true
+.\" since 1986; keeping (but commented) for historical interest.
+.\" .pp
+.\" Avertissement:
+.\" changer les tailles de caractères
+.\" sur le photocompositeur
+.\" est une opération mécanique lente.
+.\" Sur les imprimantes laser, il faudra peut-être recharger de
+.\" nouvelles polices.
+.\" Dès lors les changements de tailles de caractères devraient être
+.\" utilisés avec prudence.
 .sh 2 "Guillemets"
 .pp
 En typographie,
@@ -2266,3 +2278,8 @@ l l l .
 \&.q|quoted|entre guillemets
 .TE
 .)b
+.\" Local Variables:
+.\" mode: nroff
+.\" coding: utf-8
+.\" End:
+.\" vim: filetype=groff:
index 1685561f1ec2d93b97fdaf441526d5bd21d98945..43e93e360c80bdbabbb9be1e8265dd52c018b3ac 100644 (file)
@@ -213,7 +213,7 @@ defined in this section
 or the
 .b .sh
 macro
-(defined in the next session),
+(defined in the next section),
 the effects of changing parameters
 which will have a global effect
 on the format of the page
@@ -714,11 +714,12 @@ at the top of each page
 (after putting out
 the header,
 initial saved floating keeps,
-etc.);
+etc.),
+or of each column when in two-column mode;
 in other words,
 this macro is called immediately before
 printing text
-on a page.
+on a page or in a column.
 It can be used for column headings
 and the like.
 .sh 1 "Displays"
@@ -1298,7 +1299,7 @@ Leave
 contiguous white space,
 on the next page if not enough room
 on this page.
-Equivalent to a
+Equivalent to putting a
 .b .sp
 .i N
 inside a block.
@@ -1790,7 +1791,7 @@ Footnote number, actually
 .ST [ \c
 .NR ($f \c
 .ST ] .
-This macro is incremented
+The number in this string is incremented
 after each call to
 .b .)f .
 .TL
@@ -2088,7 +2089,7 @@ NAME      TYPE    DESCRIPTION
 \&.bc  M       begin new column
 \&.bi  M       bold italic
 \en(bi R       display (block) indent
-\&.bl  M       blank lines (even at top of page)
+\&.bl  M       blank lines (even at top of page, in contrast to .sp)
 \en(bm R       bottom title margin
 \&.bp  M\(sc   begin page
 \&.br  M\(sc   break (start new line)
@@ -2198,7 +2199,7 @@ NAME      TYPE    DESCRIPTION
 \&.sm  M       set argument in a smaller pointsize
 \&.so  M\(sc   source input file
 \en(so R       additional section title offset
-\&.sp  M\(sc   vertical space
+\&.sp  M\(sc   vertical space (except at top of page, in contrast to .bl)
 \en(sp R       section title pointsize
 \en(ss R       section prespace
 \&.sx  M       change section depth
@@ -2234,3 +2235,7 @@ NAME      TYPE    DESCRIPTION
 \en(_M R       section type (as set with .++ macro)
 .)l
 .rm $H
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
index b46119d48fb07c05eb399beabb0292d11e65eadd..6d581ba34fbdbf86e131c58a2d17534475318802 100644 (file)
@@ -1,4 +1,4 @@
-.\" Copyright (C) 2006-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2006-2018 Free Software Foundation, Inc.
 .\"      Written by Eric S. Raymond <esr@thyrsus.com>
 .\"
 .\" This file is part of groff.
@@ -14,7 +14,7 @@
 .\" for more details.
 .\"
 .\" You should have received a copy of the GNU General Public License
-.\" along with this program. If not, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see <http://www.gnu.org/licenses/>.
 .\"
 .\" For tolerably obvious reason, this needs to be processed through PIC.
 .\" It also needs to be processed through TBL and EQN.  Use "groff -p -e -t".
@@ -61,10 +61,12 @@ Eric S. Raymond
 .AB
 The \fBpic\fP language is a \fBtroff\fP extension that makes it easy
 to create and alter box-and-arrow diagrams of the kind frequently used
-in technical papers and textbooks.  This paper is both an introduction
-to and reference for \fIgpic\/\fP(1), the implementation distributed by
-the Free Software Foundation for use with \fIgroff\/\fP(1).  It also
-catalogs other implementations and explains the differences among them.
+in technical papers and textbooks.
+This paper is both an introduction to and reference for \fIgpic\/\fP(1),
+the implementation distributed by the Free Software Foundation for use
+with \fIgroff\/\fP(1).
+It also catalogs other implementations and explains the differences
+among them.
 .AE
 .\"%%TUTORIAL%%
 .
@@ -76,44 +78,49 @@ Introduction to PIC
 Why PIC?
 .PP
 The \fBpic\fP language provides an easy way to write procedural
-box-and-arrow diagrams to be included in \fBtroff\fP documents.  The
-language is sufficiently flexible to be quite useful for state charts,
-Petri-net diagrams, flow charts, simple circuit schematics, jumper
-layouts, and other kinds of illustration involving repetitive uses of
-simple geometric forms and splines.  Because these descriptions are
-procedural and object-based, they are both compact and easy to modify.
+box-and-arrow diagrams to be included in \fBtroff\fP documents.
+The language is sufficiently flexible to be quite useful for state
+charts, Petri-net diagrams, flow charts, simple circuit schematics,
+jumper layouts, and other kinds of illustration involving repetitive
+uses of simple geometric forms and splines.
+Because these descriptions are procedural and object-based, they are
+both compact and easy to modify.
 .PP
 The phrase \[lq]GNU pic\[rq] may refer to either of two \fBpic\fP
 implementations distributed by the Free Software Foundation and
-intended to accept the same input language.  The \fIgpic\/\fP(1)
-implementation is for use with the \fIgroff\/\fP(1) implementation of
-\fBtroff\fP.  The \fIpic2plot\/\fP(1) implementation runs standalone
-and is part of the \fBplotutils\fR package. Because both
-implementations are widely available in source form for free, they are
-good bets for writing very portable documentation.
+intended to accept the same input language.
+The \fIgpic\/\fP(1) implementation is for use with the \fIgroff\/\fP(1)
+implementation of \fBtroff\fP.
+The \fIpic2plot\/\fP(1) implementation runs standalone and is part of
+the \fBplotutils\fR package.
+Because both implementations are widely available in source form for
+free, they are good bets for writing very portable documentation.
 .
 .NH 2
 PIC Versions
 .PP
 The original 1984 pre-\fIditroff\/\fP(1) version of \fBpic\fP is long
-obsolete.  The rewritten 1991 version is still available as part of
-the Documenter's Work Bench module of System V.
+obsolete.
+The rewritten 1991 version is still available as part of the
+Documenter's Work Bench module of System V.
 .PP
 Where differences between Documenter's Work Bench (1991) \fBpic\fP and GNU
 \fBpic\fP need to be described, original \fBpic\fP is referred to as
-\[lq]DWB pic\[rq].  Details on the history of the program are given at the
-end of this document.
+\[lq]DWB pic\[rq].
+Details on the history of the program are given at the end of this
+document.
 .PP
 The \fBpic2plot\fR program does not require the rest of the
-\fIgroff\/\fP(1) toolchain to render graphics.  It can display
-\fBpic\fR diagrams in a X\~window, or generate output plots in a large
-number of other formats.  These formats include: PNG, PBM, PGM, PPM, GIF,
-SVG, Adobe Illustrator format, idraw-editable Postscript, the WebCGM
-format for Web-based vector graphics, the format used by the \fBxfig\fP
-drawing editor, the Hewlett-Packard PCL\~5 printer language, the
-Hewlett-Packard Graphics Language (by default, HP-GL/2), the ReGIS
-(remote graphics instruction set) format developed by DEC, Tektronix
-format, and device-independent GNU graphics metafile format.
+\fIgroff\/\fP(1) toolchain to render graphics.
+It can display \fBpic\fR diagrams in an X\~window, or generate output
+plots in a large number of other formats.
+These formats include: PNG, PBM, PGM, PPM, GIF, SVG, Adobe Illustrator
+format, idraw-editable Postscript, the WebCGM format for Web-based
+vector graphics, the format used by the \fBxfig\fP drawing editor, the
+Hewlett-Packard PCL\~5 printer language, the Hewlett-Packard Graphics
+Language (by default, HP-GL/2), the ReGIS (remote graphics instruction
+set) format developed by DEC, Tektronix format, and device-independent
+GNU graphics metafile format.
 .PP
 In this document, \fIgpic\/\fP(1) and \fIpic2plot\/\fP(1) extensions are
 marked as such.
@@ -123,25 +130,26 @@ marked as such.
 Invoking PIC
 .PP
 Every \fBpic\fP description is a little program describing drawing
-actions.  The \fB[gtn]roff\fP-dependent versions compile the program
-by \fIpic\/\fP(1) into \fIgtroff\/\fP(1) macros; the
-\fIpic2plot\/\fP(1) implementation uses a plotting library to draw the
-picture directly.  Programs that process or display
+actions.
+The \fB[gtn]roff\fP-dependent versions compile the program by
+\fIpic\/\fP(1) into \fIgtroff\/\fP(1) macros; the \fIpic2plot\/\fP(1)
+implementation uses a plotting library to draw the picture directly.
+Programs that process or display
 \fIgtroff\/\fP(1) output need not know or care that parts of the image
 began life as \fBpic\fP descriptions.
 .PP
 The \fIpic\/\fP(1) program tries to translate anything between \fB.PS\fP
-and \fB.PE\fP markers, and passes through everything else.  The normal
-definitions of \fB.PS\fP and \fB.PE\fP in the \fIms\fP macro package
-and elsewhere have also the side-effect of centering the \fBpic\fP output
-on the page.
+and \fB.PE\fP markers, and passes through everything else.
+The normal definitions of \fB.PS\fP and \fB.PE\fP in the \fIms\fP macro
+package and elsewhere have also the side-effect of centering the
+\fBpic\fP output on the page.
 .
 .NH 2
 PIC Error Messages
 .PP
 If you make a \fBpic\fP syntax error, \fIgpic\/\fP(1) issues an
-error message in the standard \fIgcc\/\fP(1)-like syntax.  A typical
-error message looks like this,
+error message in the standard \fIgcc\/\fP(1)-like syntax.
+A typical error message looks like this
 .KS
 .DS
 .CW
@@ -159,10 +167,12 @@ just after) the error location.
 Basic PIC Concepts
 .PP
 Pictures are described procedurally, as collections of objects
-connected by motions.  Normally, \fBpic\fP tries to string together
-objects left-to-right in the sequence they are described, joining them
-at visually natural points.  Here is an example illustrating the
-flow of data in \fBpic\fP processing:
+connected by motions.
+Normally, \fBpic\fP tries to string together objects left-to-right in
+the sequence they are described, joining them at visually natural
+points.
+Here is an example illustrating the flow of data in \fBpic\fP
+processing:
 .KS
 .PS
 ellipse "document";
@@ -198,20 +208,23 @@ ellipse "PostScript"
 .R
 .KE
 .LP
-This little program illustrates several \fBpic\fP basics.  Firstly, we
-see how to invoke three object types; ellipses, arrows, and boxes.  We
-see how to declare text lines to go within an object (and that text
-can have font changes in it).  We see how to change the line style of
-an object from solid to dashed.  And we see that a box can be made
-wider than its default size to accommodate more text (we'll discuss
-this facility in detail in the next section).
-.PP
-We also get to see \fBpic\fP's simple syntax.  Statements are ended by
-newlines or semicolons.  String quotes are required around all text
-arguments, whether or not they contain spaces.  In general, the order
-of command arguments and modifiers like \[lq]width 1.2\[rq] or
-\[lq]dashed\[rq] doesn't matter, except that the order of text arguments
-is significant.
+This little program illustrates several \fBpic\fP basics.
+Firstly, we see how to invoke three object types; ellipses, arrows, and
+boxes.
+We see how to declare text lines to go within an object (and that text
+can have font changes in it).
+We see how to change the line style of an object from solid to dashed.
+And we see that a box can be made wider than its default size to
+accommodate more text (we'll discuss this facility in detail in the next
+section).
+.PP
+We also get to see \fBpic\fP's simple syntax.
+Statements are ended by newlines or semicolons.
+String quotes are required around all text arguments, whether or not
+they contain spaces.
+In general, the order of command arguments and modifiers like \[lq]width
+1.2\[rq] or \[lq]dashed\[rq] doesn't matter, except that the order of
+text arguments is significant.
 .PP
 Here are all but one of the basic \fBpic\fP objects at their default sizes:
 .KS
@@ -230,14 +243,15 @@ arc; down; move; "arc"
 .PE
 .CE "2: Basic \fBpic\fP objects"
 .PP
-The missing simple object type is a \fIspline\fP.  There is also a way
-to collect objects into \fIblock composites\fP which allows you to
-treat the whole group as a single object (resembling a box) for many
-purposes.  We'll describe both of these later on.
+The missing simple object type is a \fIspline\fP.
+There is also a way to collect objects into \fIblock composites\fP which
+allows you to treat the whole group as a single object (resembling a
+box) for many purposes.
+We'll describe both of these later on.
 .PP
 The box, ellipse, circle, and block composite objects are \fIclosed\/\fR;
-lines, arrows, arcs and splines are \fIopen\fP.  This distinction
-is often important in explaining command modifiers.
+lines, arrows, arcs and splines are \fIopen\fP.
+This distinction is often important in explaining command modifiers.
 .PP
 Figure \n[H1]-2 was produced by the following \fBpic\fP program,
 which introduces some more basic concepts:
@@ -266,8 +280,9 @@ default distance (1/2 inch) in the current movement direction.
 .PP
 Secondly, see how we can also decorate lines and arrows with text.
 The line and arrow commands each take two arguments here, specifying
-text to go above and below the object.  If you wonder why one argument
-would not do, contemplate the output of \fBarrow "ow!"\fP:
+text to go above and below the object.
+If you wonder why one argument would not do, contemplate the output of
+\fBarrow "ow!"\fP:
 .KS
 .PS
 arrow "ow!"
@@ -275,8 +290,10 @@ arrow "ow!"
 .CE "3: Text centered on an arrow"
 .PP
 When a command takes one text string, \fBpic\fP tries to place it at
-the object's geometric center.  As you add more strings, \fBpic\fP
-treats them as a vertical block to be centered.  The program
+the object's geometric center.
+As you add more strings, \fBpic\fP treats them as a vertical block to be
+centered.
+The program
 .KS
 .DS
 .CW
@@ -302,12 +319,12 @@ line "1" "2" "3" "4" "5";
 .sp 2
 .CE "4: Effects of multiple text arguments"
 .PP
-The last line of Figure 3.2's program, `\fBarc; down; move;
+The last line of Figure 3-2's program, `\fBarc; down; move;
 "arc"\fP', describing the captioned arc, introduces several new ideas.
 Firstly, we see how to change the direction in which objects are
-joined.  Had we written \fBarc; move; "arc"\fP,
-omitting \fBdown\fP the caption would have been joined to the top
-of the arc, like this:
+joined.
+Had we written \fBarc; move; "arc"\fP, omitting \fBdown\fP the caption
+would have been joined to the top of the arc, like this:
 .KS
 .PS
 arc; move; "arc";
@@ -315,7 +332,8 @@ arc; move; "arc";
 .CE "5: Result of \fBarc; move; \"arc\"\fP"
 .PP
 This is because drawing an arc changes the default direction to the
-one its exit end points at.  To reinforce this point, consider:
+one its exit end points at.
+To reinforce this point, consider:
 .KS
 .PS
 arc cw; move; "arc";
@@ -348,18 +366,18 @@ joined to the end of the first.
 Finally, observe that a string, alone, is treated as text to be
 surrounded by an invisible box of a size either specified by width
 and height attributes or by the defaults \fBtextwid\fR and
-\fBtextht\fR.  Both are initially zero (because we don't know the
-default font size).
+\fBtextht\fR.
+Both are initially zero (because we don't know the default font size).
 .
 .
 .NH 1
 Sizes and Spacing
 .PP
-Sizes are specified in inches.  If you don't like inches, it's
-possible to set a global style variable \fBscale\fP that changes the
-unit.  Setting \fBscale = 2.54\fP effectively changes the internal
-unit to centimeters (all other size variable values are scaled
-correspondingly).
+Sizes are specified in inches.
+If you don't like inches, it's possible to set a global style variable
+\fBscale\fP that changes the unit.
+Setting \fBscale = 2.54\fP effectively changes the internal unit to
+centimeters (all other size variable values are scaled correspondingly).
 .
 .NH 2
 Default Sizes of Objects
@@ -389,22 +407,24 @@ The simplest way to think about these defaults is that they make the
 other basic objects fit snugly into a default-sized box.
 .PP
 \fIpic2plot\/\fP(1) does not necessarily emit a physical inch for
-each virtual inch in its drawing coordinate system.  Instead, it draws
-on a canvas 8\~virtual inches by 8\~virtual inches wide.  If its
-output page size is \[lq]letter\[rq], these virtual inches will map to
-real ones.  Specifying a different page size (such as, say,
-\[lq]a4\[rq]) will scale virtual inches so they are output as one
-eighth of the page width.  Also, \fIpic2plot\/\fP(1) centers all
-images by default, though the \fB\-n\fP option can be used to prevent
-this.
+each virtual inch in its drawing coordinate system.
+Instead, it draws on a canvas 8\~virtual inches by 8\~virtual inches
+wide.
+If its output page size is \[lq]letter\[rq], these virtual inches will
+map to real ones.
+Specifying a different page size (such as, say, \[lq]a4\[rq]) will scale
+virtual inches so they are output as one eighth of the page width.
+Also, \fIpic2plot\/\fP(1) centers all images by default, though the
+\fB\-n\fP option can be used to prevent this.
 .
 .NH 2
 Objects Do Not Stretch!
 .PP
 Text is rendered in the current font with normal troff line spacing.
 Boxes, circles, and ellipses do \fInot\fP automatically resize to fit
-enclosed text.  Thus, if you say \fBbox "this text far too long for a
-default box"\fP you'll get this:
+enclosed text.
+Thus, if you say \fBbox "this text far too long for a default box"\fP
+you'll get this:
 .KS
 .PS
 box "this text is far too long for a default box"
@@ -424,9 +444,10 @@ box width 3 "this text is far too long for a default box"
 .PE
 .CE "2: Result of \fBbox width 3 \"text far too long\"\fP"
 .PP
-This modifier takes a dimension in inches.  There is also a \[lq]height\[rq]
-modifier that changes a box's height.  The \fBwidth\fP keyword may
-be abbreviated to \fBwid\fP; the \fBheight\fP keyword to \fBht\fP.
+This modifier takes a dimension in inches.
+There is also a \[lq]height\[rq] modifier that changes a box's height.
+The \fBwidth\fP keyword may be abbreviated to \fBwid\fP; the
+\fBheight\fP keyword to \fBht\fP.
 .
 .NH 2
 Resizing Other Object Types
@@ -467,8 +488,10 @@ the radius also increases the size of the arc's bounding box.
 The `same' Keyword
 .PP
 In place of a dimension specification, you can use the keyword
-\fBsame\fR.  This gives the object the same size as the previous one
-of its type.  As an example, the program
+\fBsame\fR.
+This gives the object the same size as the previous one
+of its type.
+As an example, the program
 .KS
 .DS
 .CW
@@ -495,14 +518,15 @@ Diagonal Lines
 .PP
 It is possible to specify diagonal lines or arrows by adding multiple \fBup\fP,
 \fBdown\fP, \fBleft\fP, and \fBright\fP modifiers to the line object.
-Any of these can have a multiplier.  To understand the effects, think
-of the drawing area as being gridded with standard-sized boxes.
+Any of these can have a multiplier.
+To understand the effects, think of the drawing area as being gridded
+with standard-sized boxes.
 .KS
 .PS
 # Draw a demonstration up left arrow with grid box overlay
 define gridarrow
 {
-       move right 0.1
+       move right 0.5
        [
                {arrow up left $1;}
                box wid 0.5 ht 0.5 dotted with .nw at last arrow .end;
@@ -511,11 +535,7 @@ define gridarrow
                }
                move down from last arrow .center;
                [
-                       if ( $1 == boxht ) then {
-                               "\fBline up left\fP"
-                       } else {
-                               sprintf("\fBarrow up left %g\fP", $1)
-                       }
+                       sprintf("\fBarrow up left %g\fP", $1)
                ]
        ]
        move right 0.1 from last [] .e;
@@ -571,7 +591,8 @@ undef zigzag;
 .CE "3: \fBspline right 1 then down .5 left 1 then right 1\fP"
 .PP
 You can describe many natural-looking but irregular curves this
-way.  For example:
+way.
+For example:
 .KS
 .PS
 [spline right then up then left then down ->;]
@@ -584,9 +605,10 @@ move up 0.2;
 .PE
 .CE "4: Two more spline examples"
 .LP
-Note the arrow decorations.  Arrowheads can be applied naturally to
-any path-based object, line or spline.  We'll see how in the next
-section.
+Note the arrow decorations.
+Arrowheads can be applied naturally to any path-based object, line or
+spline.
+We'll see how in the next section.
 .
 .
 .NH 1
@@ -609,25 +631,27 @@ Revert to previous style; only works one level deep, does not stack.
 In the \fBpic\fP implementations that are preprocessors for a
 toolchain that include \fB[gtn]roff\fP, text objects may also contain
 \fB[gtn]roff\fP vertical- and horizontal-motion escapes such as \eh or \ev.
-Troff special glyphs are also available.  All \e-escapes will be
-passed through to the postprocessing stage and have their normal
-effects.  The base font family is set by the \fB[gtn]roff\fP
-environment at the time the picture is rendered.
+Troff special glyphs are also available.
+All \e-escapes will be passed through to the postprocessing stage and
+have their normal effects.
+The base font family is set by the \fB[gtn]roff\fP environment at the
+time the picture is rendered.
 .PP
 \fBpic2plot\fP replaces \fB[gtn]roff\fP horizontal- and vertical-motion
-escapes with \e-escapes of its own.  Troff special glyphs are not
-available, but in most back ends Latin-1 special characters and a
-square-root radical will be.  See the \fBpic2plot\fP documentation for
-full details.
+escapes with \e-escapes of its own.
+Troff special glyphs are not available, but in most back ends Latin-1
+special characters and a square-root radical will be.
+See the \fBpic2plot\fP documentation for full details.
 .
 .NH 2
 Dashed Objects
 .PP
 We've already seen that the modifier \fBdashed\fP can change the line
-style of an object from solid to dashed.  GNU \fBgpic\fP permits you to
-dot or dash ellipses, circles, and arcs (and splines in \*[tx] mode
-only); some versions of DWB may only permit dashing of lines and
-boxes.  It's possible to change the dash interval by specifying a
+style of an object from solid to dashed.
+GNU \fBgpic\fP permits you to dot or dash ellipses, circles, and arcs
+(and splines in \*[tx] mode only); some versions of DWB may only permit
+dashing of lines and boxes.
+It's possible to change the dash interval by specifying a
 number after the modifier.
 .PP
 .KS
@@ -647,11 +671,12 @@ box dashed 0.2 "0.2";
 .NH 2
 Dotted Objects
 .PP
-Another available qualifier is \fBdotted\fP.  GNU \fBgpic\fP permits
-you to dot or dash ellipses, circles, and arcs (and splines in \*[tx]
-mode only); some versions of DWB may only permit dashing of lines and
-boxes.  It too can be suffixed with a number to specify the interval
-between dots:
+Another available qualifier is \fBdotted\fP.
+GNU \fBgpic\fP permits you to dot or dash ellipses, circles, and arcs
+(and splines in \*[tx] mode only); some versions of DWB may only permit
+dashing of lines and boxes.
+It too can be suffixed with a number to specify the interval between
+dots:
 .KS
 .PS
 box dotted "default";
@@ -709,29 +734,30 @@ position.
 .NH 2
 Arrowheads
 .PP
-Lines and arcs can be decorated as well.  Any line or arc (and any
-spline as well) can be decorated with arrowheads by adding one or more
-as modifiers:
+Lines and arcs can be decorated as well.
+Any line or arc (and any spline as well) can be decorated with
+arrowheads by adding one or more as modifiers:
 .KS
 .PS
 line <- ->
 .PE
 .CE "5: Double-headed line made with  \fBline <- ->\fP"
 .PP
-In fact, the \fBarrow\fP command is just shorthand for \fBline ->\fP.  And
-there is a double-head modifier <->, so the figure above could have been made
-with \fBline <->\fP.
+In fact, the \fBarrow\fP command is just shorthand for \fBline ->\fP.
+And there is a double-head modifier <->, so the figure above could have
+been made with \fBline <->\fP.
 .PP
 Arrowheads have a \fBwidth\fP attribute, the distance across the rear;
 and a \fBheight\fP attribute, the length of the arrowhead along the shaft.
 .PP
 Arrowhead style is controlled by the style variable \fBarrowhead\fP.
-The DWB and GNU versions interpret it differently.  DWB defaults to
-open arrowheads and an \fBarrowhead\fP value of\~2; the Kernighan
-paper says a value of\~7 makes solid arrowheads.  GNU \fBgpic\fP
-defaults to solid arrowheads and an \fBarrowhead\fP value of\~1; a
-value of\~0 produces open arrowheads.  Note that solid arrowheads are
-always filled with the current outline color.
+The DWB and GNU versions interpret it differently.
+DWB defaults to open arrowheads and an \fBarrowhead\fP value of\~2; the
+Kernighan paper says a value of\~7 makes solid arrowheads.
+GNU \fBgpic\fP defaults to solid arrowheads and an \fBarrowhead\fP value
+of\~1; a value of\~0 produces open arrowheads.
+Note that solid arrowheads are always filled with the current outline
+color.
 .
 .NH 2
 Line Thickness
@@ -749,12 +775,15 @@ in \*[tx] output mode with the
 option, this means use the line thickness specified by
 .B .ps
 lines; in troff output mode, this means use a thickness proportional
-to the pointsize.  A zero value means draw the thinnest possible line
-supported by the output device.  Initially it has a value of -1.
+to the pointsize.
+A zero value means draw the thinnest possible line supported by the
+output device.
+Initially it has a value of -1.
 There is also a \fBthickness\fP attribute (which can be abbreviated to
-\fBthick\fP).  For example, \fBcircle thickness 1.5\fP would draw a
-circle using a line with a thickness of 1.5 points.  The thickness of
-lines is not affected by the value of the
+\fBthick\fP).
+For example, \fBcircle thickness 1.5\fP would draw a circle using a line
+with a thickness of 1.5 points.
+The thickness of lines is not affected by the value of the
 .B scale
 variable, nor by any width or height given in the
 .B .PS
@@ -763,34 +792,38 @@ line.
 .NH 2
 Invisible Objects
 .PP
-The modifier \fBinvis[ible]\fP makes an object entirely invisible.  This
-used to be useful for positioning text in an invisible object that is
-properly joined to neighboring ones.  Newer DWB versions and GNU
-\fBpic\fP treat stand-alone text in exactly this way.
+The modifier \fBinvis[ible]\fP makes an object entirely invisible.
+This used to be useful for positioning text in an invisible object that
+is properly joined to neighboring ones.
+Newer DWB versions and GNU \fBpic\fP treat stand-alone text in exactly
+this way.
 .
 .NH 2
 Filled Objects
 .PP
-It is possible to fill boxes, circles, and ellipses.  The
-modifier \fBfill[ed]\fP accomplishes this.  You can suffix it with a fill
-value; the default is given by the style variable \fBfillval\fP.
+It is possible to fill boxes, circles, and ellipses.
+The modifier \fBfill[ed]\fP accomplishes this.
+You can suffix it with a fill value; the default is given by the style
+variable \fBfillval\fP.
 .PP
 DWB \fBpic\fP and \fBgpic\fP have opposite conventions for fill values
-and different defaults.  DWB \fBfillval\fP defaults to 0.3 and smaller
-values are darker; GNU \fBfillval\fP uses 0 for white and 1 for black.
+and different defaults.
+DWB \fBfillval\fP defaults to 0.3 and smaller values are darker; GNU
+\fBfillval\fP uses 0 for white and 1 for black.
 .KS
 .PS
 circle fill; move; circle fill 0.4; move; circle fill 0.9;
 .PE
 .CE "6: \fBcircle fill; move; circle fill 0.4; move; circle fill 0.9;\fR"
 .PP
-GNU \fBgpic\fP makes some additional guarantees.  A fill value greater
-than 1 can also be used: this means fill with the shade of gray that
-is currently being used for text and lines.  Normally this is
-black, but output devices may provide a mechanism for changing this.
-The invisible attribute does not affect the filling of objects.  Any
-text associated with a filled object is added after the object
-has been filled, so that the text is not obscured by the filling.
+GNU \fBgpic\fP makes some additional guarantees.
+A fill value greater than 1 can also be used: this means fill with the
+shade of gray that is currently being used for text and lines.
+Normally this is black, but output devices may provide a mechanism for
+changing this.
+The invisible attribute does not affect the filling of objects.
+Any text associated with a filled object is added after the object has
+been filled, so that the text is not obscured by the filling.
 .PP
 The closed-object modifier \fBsolid\fP is equivalent to \fBfill\fP
 with the darkest fill value (DWB \fBpic\fP had this capability but
@@ -800,9 +833,11 @@ mentioned it only in a reference section).
 Colored Objects
 .PP
 As a GNU extension, three additional modifiers are available to specify
-colored objects.  \fBoutline\fP sets the color of the outline, \fBshaded\fP
-the fill color, and \fBcolor\fP sets both.  All three keywords expect a
-suffix specifying the color.  Example:
+colored objects.
+\fBoutline\fP sets the color of the outline, \fBshaded\fP the fill
+color, and \fBcolor\fP sets both.
+All three keywords expect a suffix specifying the color.
+Example:
 .KS
 .PS
 box color "yellow"; arrow color "cyan"; circle shaded "green" outline "black";
@@ -817,8 +852,8 @@ Predefined color names for \fI[gtn]roff\/\fP-based \fBpic\fP
 implementations are defined in the device macro files, for example
 \f(CWps.tmac\fP; additional colors can be defined with the
 \fB.defcolor\fP request (see the manual page of GNU \fItroff\/\fP(1)
-for more details).  Currently, color support is not available at all
-in \*[tx] mode.
+for more details).
+Currently, color support is not available at all in \*[tx] mode.
 .PP
 The \fIpic2plot\/\fP(1) carries with its own set of color names,
 essentially those recognized by the X\~window system with \[lq]grey\[rq]
@@ -832,11 +867,12 @@ color are set to the default value.
 More About Text Placement
 .PP
 By default, text is centered at the geometric center of the object it is
-associated with.  The modifier \fBljust\fP causes the left end to be
-at the specified point (which means that the text lies to the right of
-the specified place!), the modifier \fBrjust\fP puts the right end at
-the place.  The modifiers \fBabove\fP and \fBbelow\fP center the text
-one half line space in the given direction.
+associated with.
+The modifier \fBljust\fP causes the left end to be at the specified
+point (which means that the text lies to the right of the specified
+place!), the modifier \fBrjust\fP puts the right end at the place.
+The modifiers \fBabove\fP and \fBbelow\fP center the text one half line
+space in the given direction.
 .PP
 Text attributes can be combined:
 .KS
@@ -852,9 +888,9 @@ move;
 .CE "1: Text attributes"
 .PP
 What actually happens is that \fIn\fP text strings are centered in a box
-that is \fBtextwid\fP wide by \fBtextht\fP high.  Both these variables
-are initially zero (that is \fBpic\fR's way of not making assumptions
-about \fI[tg]roff\/\fP(1)'s default point size).
+that is \fBtextwid\fP wide by \fBtextht\fP high.
+Both these variables are initially zero (that is \fBpic\fR's way of not
+making assumptions about \fI[tg]roff\/\fP(1)'s default point size).
 .PP
 In GNU \fBgpic\fR, objects can have an
 .B aligned
@@ -874,8 +910,8 @@ end points are coincident.
 More About Direction Changes
 .PP
 We've already seen how to change the direction in which objects are
-composed from rightwards to downwards.  Here are some more
-illustrative examples:
+composed from rightwards to downwards.
+Here are some more illustrative examples:
 .KS
 .PS
 down;
@@ -947,9 +983,11 @@ ellipse
 .DE
 .KE
 .LP
-Why is this?  Because the exit point for the current direction is
-already set when you draw the object.  The second arrow in Figure
-\*[SN]2 dropped downwards from the circle's attachment point for an
+Why is this?
+Because the exit point for the current direction is already set when you
+draw the object.
+The second arrow in Figure \*[SN]2 dropped downwards from the circle's
+attachment point for an
 object to be joined to the right.
 .PP
 The meaning of the command \fBmove to last circle .s\fP should be obvious.
@@ -961,33 +999,38 @@ important topics; locations and object names.
 Naming Objects
 .PP
 The most natural way to name locations in \fBpic\fP is relative to
-objects.  In order to do this, you have to be able you have to be able
-to name objects.  The \fBpic\fP language has rich facilities for this
-that try to emulate the syntax of English.
+objects.
+In order to do this, you have to be able to name
+objects.
+The \fBpic\fP language has rich facilities for this that try to emulate
+the syntax of English.
 .
 .NH 2
 Naming Objects By Order Of Drawing
 .PP
 The simplest (and generally the most useful) way to name an object is
-with a \fBlast\fP clause.  It needs to be followed by an object type
-name; \fBbox\fP, \fBcircle\fP, \fBellipse\fP, \fBline\fP, \fBarrow\fP,
-\fBspline\fP, \fB""\fP, or \fB[]\fP (the last type refers to a \fIcomposite
-object\fP which we'll discuss later).  So, for example, the \fBlast
-circle\fP clause in the program attached to Figure \*[SN]3 refers to the
-last circle drawn.
+with a \fBlast\fP clause.
+It needs to be followed by an object type name; \fBbox\fP, \fBcircle\fP,
+\fBellipse\fP, \fBline\fP, \fBarrow\fP, \fBspline\fP, \fB""\fP, or
+\fB[]\fP (the last type refers to a \fIcomposite object\fP which we'll
+discuss later).
+So, for example, the \fBlast circle\fP clause in the program attached to
+Figure \*[SN]3 refers to the last circle drawn.
 .PP
 More generally, objects of a given type are implicitly numbered
-(starting from\~1).  You can refer to (say) the third ellipse in the
-current picture with \fB3rd ellipse\fP, or to the first box as \fB1st
-box\fP, or to the fifth text string (which isn't an attribute to another
-object) as \fB5th ""\fP.
+(starting from\~1).
+You can refer to (say) the third ellipse in the current picture with
+\fB3rd ellipse\fP, or to the first box as \fB1st box\fP, or to the fifth
+text string (which isn't an attribute to another object) as \fB5th
+""\fP.
 .PP
 Objects are also numbered backwards by type from the last one.
 You can say \fB2nd last box\fP to get the second-to-last box, or
 \fB3rd last ellipse\fP to get the third-to-last ellipse.
 .PP
 In places where \fIn\/\fBth\fR is allowed, \fB`\fIexpr\/\fB'th\fR is
-also allowed.  Note that
+also allowed.
+Note that
 .B 'th
 is a single token: no space is allowed between the
 .B '
@@ -1007,9 +1050,10 @@ for i = 1 to 4 do {
 .NH 2
 Naming Objects With Labels
 .PP
-You can also specify an object by referring to a label.  A label is a
-word (which must begin with a capital letter) followed by a colon;
-you declare it by placing it immediately before the object drawing command.
+You can also specify an object by referring to a label.
+A label is a word (which must begin with a capital letter) followed by a
+colon; you declare it by placing it immediately before the object
+drawing command.
 For example, the program
 .KS
 .DS
@@ -1037,23 +1081,24 @@ arrow right at A .r;
 .PE
 .CE "1: Example of label use"
 The \fBat\fP statement in the fourth line uses the label \fBA\fP (the
-behavior of \fBat\fP is explained in the next section).  We'll
-see later on that labels are most useful for referring to block composite
-objects.
+behavior of \fBat\fP is explained in the next section).
+We'll see later on that labels are most useful for referring to block
+composite objects.
 .PP
 Labels are not constants but variables (you can view colon as a sort
-of assignment).  You can say something like \fBA: A + (1,0);\fP
-and the effect is to reassign the label \fBA\fR to designate a
-position one inch to the right of its old value.
+of assignment).
+You can say something like \fBA: A + (1,0);\fP and the effect is to
+reassign the label \fBA\fR to designate a position one inch to the right
+of its old value.
 .
 .
 .NH 1
 Describing locations
 .PP
-The location of points can be described in many different ways.  All these
-forms are interchangeable as for as the \fBpic\fP language syntax is
-concerned; where you can use one, any of the others that would make
-semantic sense are allowed.
+The location of points can be described in many different ways.
+All these forms are interchangeable as for as the \fBpic\fP language
+syntax is concerned; where you can use one, any of the others that would
+make semantic sense are allowed.
 .PP
 The special label \fBHere\fR always refers to the current position.
 .
@@ -1063,24 +1108,27 @@ Absolute Coordinates
 The simplest is absolute coordinates in inches; \fBpic\fP uses a
 Cartesian system with (0,0) at the lower left corner of the virtual
 drawing surface for each picture (that is, X\~increases to the right
-and Y\~increases upwards).  An absolute location may always be written in the
-conventional form as two comma-separated numbers surrounded by
-parentheses (and this is recommended for clarity).  In contexts where
-it creates no ambiguity, the pair of X and Y\~coordinates suffices
-without parentheses.
-.PP
-It is a good idea to avoid absolute coordinates, however.  They tend
-to make picture descriptions difficult to understand and modify.
+and Y\~increases upwards).
+An absolute location may always be written in the conventional form as
+two comma-separated numbers surrounded by parentheses (and this is
+recommended for clarity).
+In contexts where it creates no ambiguity, the pair of X and
+Y\~coordinates suffices without parentheses.
+.PP
+It is a good idea to avoid absolute coordinates, however.
+They tend to make picture descriptions difficult to understand and
+modify.
 Instead, there are quite a number of ways to specify locations
 relative to \fBpic\fP objects and previous locations.
 .PP
 Another possibility of surprise is the fact that \fBpic\fP crops the
-picture to the smallest bounding box before writing it out.  For
-example, if you have a picture consisting of a small box with its lower
-left corner at (2,2) and another small box with its upper right corner
-at (5,5), the width and height of the image are both 3\~units and
-not\~5.  To get the origin at (0,0) included, simply add an invisible
-object to the picture, positioning the object's left corner at (0,0).
+picture to the smallest bounding box before writing it out.
+For example, if you have a picture consisting of a small box with its
+lower left corner at (2,2) and another small box with its upper right
+corner at (5,5), the width and height of the image are both 3\~units and
+not\~5.
+To get the origin at (0,0) included, simply add an invisible object to
+the picture, positioning the object's left corner at (0,0).
 .
 .NH 2
 Locations Relative to Objects
@@ -1090,12 +1138,14 @@ drawn or the destination of the last \fBmove\fP.
 .PP
 Alone and unqualified, a \fBlast circle\fP or any other way of
 specifying a closed-object or arc location refers as a position to the
-geometric center of the object.  Unqualified, the name of a line or
-spline object refers to the position of the object start.
+geometric center of the object.
+Unqualified, the name of a line or spline object refers to the position
+of the object start.
 .PP
 Also, \fBpic\fP objects have quite a few named locations
-associated with them.  One of these is the object center, which can be
-indicated (redundantly) with the suffix \fB.center\fP (or just \fB.c\fP).
+associated with them.
+One of these is the object center, which can be indicated (redundantly)
+with the suffix \fB.center\fP (or just \fB.c\fP).
 Thus, \fBlast circle \&.center\fP is equivalent to \fBlast
 circle\fP.
 .NH 3
@@ -1128,9 +1178,10 @@ compass(ellipse wid 1.5 ht 1);
 .CE "1: Compass points"
 .LP
 these are the locations where eight compass rays from the geometric center
-would intersect the figure.  So when we say \fBlast circle .s\fP we are
-referring to the south compass point of the last circle drawn.  The
-explanation of Figure 7.3's program is now complete.
+would intersect the figure.
+So when we say \fBlast circle .s\fP we are referring to the south
+compass point of the last circle drawn.
+The explanation of Figure 8-3's program is now complete.
 .PP
 (In case you dislike compass points, the names \fB.top\fP,
 \&\fB.bottom\fP, \fB.left\fP and \fB.right\fP are synonyms for \fB.n\fP,
@@ -1141,22 +1192,23 @@ The names \fBcenter\fP, \fBtop\fP, \fBbottom\fP, \fBleft\fP, \fBright\fP,
 \fBnorth\fP, \fBsouth\fP, \fBeast\fP, and \fBwest\fP can also be used
 (without the leading dot) in a prefix form marked by \fBof\fP; thus,
 \fBcenter of last circle\fP and \fBtop of 2nd last ellipse\fP are both
-valid object references.  Finally, the names \fBleft\fP and \fBright\fP
-can be prefixed with \fBupper\fP and \fBlower\fP which both have the
-obvious meaning.
+valid object references.
+Finally, the names \fBleft\fP and \fBright\fP can be prefixed with
+\fBupper\fP and \fBlower\fP which both have the obvious meaning.
 .PP
 Arc objects also have compass points; they are the compass points of
 the implied circle.
 .PP
 Non-closed objects (line, arrow, or spline) have compass points too, but
-the locations of them are completely arbitrary.  In particular, different
-\fBpic\fP implementations return different locations.
+the locations of them are completely arbitrary.
+In particular, different \fBpic\fP implementations return different
+locations.
 .NH 3
 Locations Relative to Open Objects
 .PP
 Every open object (line, arrow, arc, or spline) has three named
-points: \fB.start\fP, \fB.center\fP (or \fB.c\fP), and \fB.end\fP.  They
-can also be used without leading dots in the \fBof\fP prefix form.
+points: \fB.start\fP, \fB.center\fP (or \fB.c\fP), and \fB.end\fP.
+They can also be used without leading dots in the \fBof\fP prefix form.
 The center of an arc is the center of its circle, but the center of
 a line, path, or spline is halfway between its endpoints.
 .KS
@@ -1191,21 +1243,22 @@ Positions may be added or subtracted to yield a new position (to be
 more precise, you can only add a position and an expression pair; the
 latter must be on the right side of the addition or subtraction sign).
 The result is the conventional vector sum or difference of coordinates.
-For example, \fBlast box .ne + (0.1, 0)\fP is a valid position.  This
-example illustrates a common use, to define a position slightly offset
-from a named one (say, for captioning purposes).
+For example, \fBlast box .ne + (0.1, 0)\fP is a valid position.
+This example illustrates a common use, to define a position slightly
+offset from a named one (say, for captioning purposes).
 .NH 3
 Interpolation Between Positions
 .PP
-A position may be interpolated between any two positions.  The syntax
-is `\fIfraction\fP \fBof the way between\fP \fIposition1\fP \fBand\fP
-\fIposition2\fP'.  For example, you can say \fB1/3 of the way between
-Here and last ellipse .ne\fP.  The fraction may be in
-numerator/denominator form or may be an ordinary number (values are
-\fInot\fP restricted to [0,1]).  As an alternative to this verbose
-syntax, you can say `\fIfraction\fP  \fB<\,\fP\fIposition1\fP \fB,\fP
-\fIposition2\/\fP\fB>\fP'; thus, the example could also be written as
-\fB1/3 <Here, last ellipse>\fP.
+A position may be interpolated between any two positions.
+The syntax is `\fIfraction\fP \fBof the way between\fP \fIposition1\fP
+\fBand\fP \fIposition2\fP'.
+For example, you can say \fB1/3 of the way between Here and last ellipse
+\&.ne\fP.
+The fraction may be in numerator/denominator form or may be an ordinary
+number (values are \fInot\fP restricted to [0,1]).
+As an alternative to this verbose syntax, you can say `\fIfraction\fP
+\fB<\,\fP\fIposition1\fP \fB,\fP \fIposition2\/\fP\fB>\fP'; thus, the
+example could also be written as \fB1/3 <Here, last ellipse>\fP.
 .KS
 .PS
 arrow up right;
@@ -1244,9 +1297,9 @@ Projections of Points
 .PP
 Given two positions \fIp\fP and \fIq\fP, the position
 \fB(\,\fP\fIp\fP\fB,\fP \fIq\fP\fB)\fP has the X\~coordinate of \fIp\fP
-and the Y coordinate of \fIq\fP.  This can be helpful in placing an
-object at one of the corners of the virtual box defined by two other
-objects.
+and the Y coordinate of \fIq\fP.
+This can be helpful in placing an object at one of the corners of the
+virtual box defined by two other objects.
 .KS
 .PS
 box invis wid 2 height 1;
@@ -1261,8 +1314,9 @@ dot(last box .nw); "A" ljust at last circle + (-0.1, 0.1)
 Using Locations
 .PP
 There are four ways to use locations; \fBat\fP, \fBfrom\fP, \fBto\fP,
-and \fBwith\fP.  All four are object modifiers; that is, you use them
-as suffixes to a drawing command.
+and \fBwith\fP.
+All four are object modifiers; that is, you use them as suffixes to a
+drawing command.
 .PP
 The \fBat\fP modifier says to draw a closed object or arc with its
 center at the following location, or to draw a line/spline/arrow
@@ -1272,9 +1326,10 @@ The \fBto\fP modifier can be used alone to specify a move destination.
 The \fBfrom\fP modifier can be used alone in the same way as \fBat\fP.
 .PP
 The \fBfrom\fP and \fBto\fP modifiers can be used with a \fBline\fR or
-\fBarc\fR command to specify start and end points of the object.  In
-conjunction with named locations, this offers a very flexible
-mechanism for connecting objects.  For example, the following program
+\fBarc\fR command to specify start and end points of the object.
+In conjunction with named locations, this offers a very flexible
+mechanism for connecting objects.
+For example, the following program
 .KS
 .DS
 .CW
@@ -1302,8 +1357,8 @@ arc cw from 1/3 of the way \
 .PP
 The \fBwith\fP modifier allows you to identify a named attachment
 point of an object (or a position within the object) with another point.
-This is very useful for connecting objects in a natural way.  For an
-example, consider these two programs:
+This is very useful for connecting objects in a natural way.
+For an example, consider these two programs:
 .KS
 .PS
 [
@@ -1311,7 +1366,7 @@ example, consider these two programs:
                box wid 0.5 ht 0.5;
                box wid 0.75 ht 0.75;
        ]
-       move down 0.3 from last [] .s 0.1;
+       move 0.1 down 0.3 from last [] .s;
        "\fBbox wid 0.5 ht 0.5; box wid 0.75 ht 0.75\fP"
 ]
 move from last [].e 1.5
@@ -1320,7 +1375,7 @@ move from last [].e 1.5
                box wid 0.5 ht 0.5;
                box wid 0.75 ht 0.75 with .sw at last box .se;
        ]
-       move down 0.3 from last [] .s 0.1;
+       move 0.1 down 0.3 from last [] .s;
        box invisible "\fBbox wid 0.5 ht 0.5;\fP" \
          "\fBbox wid 0.75 ht 0.75 with .sw at last box .se;\fP"
 ]
@@ -1332,7 +1387,8 @@ The `chop' Modifier
 .PP
 When drawing lines between circles that don't intersect them at a
 compass point, it is useful to be able to shorten a line by the radius
-of the circle at either or both ends.  Consider the following program:
+of the circle at either or both ends.
+Consider the following program:
 .KS
 .DS
 .CW
@@ -1361,14 +1417,16 @@ arrow from 3rd circle to 1st circle chop
 .CE "8: The \fBchop\fR modifier"
 .LP
 Notice that the \fBchop\fR attribute moves arrowheads rather than
-stepping on them.  By default, the \fBchop\fR modifier shortens both
-ends of the line by \fBcirclerad\fR.  By suffixing it with a number
-you can change the amount of chopping.
+stepping on them.
+By default, the \fBchop\fR modifier shortens both ends of the line by
+\fBcirclerad\fR.
+By suffixing it with a number you can change the amount of chopping.
 .PP
 If you say \fBline .\|.\|.\& chop \fIr1\fP chop \fIr2\fP\fR with \fIr1\fP
 and \fIr2\fP both numbers, you can vary the amount of chopping at both
-ends.  You can use this in combination with trigonometric functions
-to write code that deals with more complex intersections.
+ends.
+You can use this in combination with trigonometric functions to write
+code that deals with more complex intersections.
 .
 .
 .NH 1
@@ -1381,17 +1439,19 @@ grouping\fP and \fIblock composites\fP.
 Brace Grouping
 .PP
 The simpler method is simply to group a set of objects within curly
-bracket or brace characters.  On exit from this grouping, the current
-position and direction are restored to their value when the opening
-brace was encountered.
+bracket or brace characters.
+On exit from this grouping, the current position and direction are
+restored to their value when the opening brace was encountered.
 .
 .NH 2
 Block Composites
 .PP
 A block composite object is created a series of commands enclosed by
-square brackets.  The composite can be treated for most purposes like
-a single closed object, with the size and shape of its bounding box.
-Here is an example.  The program fragment
+square brackets.
+The composite can be treated for most purposes like a single closed
+object, with the size and shape of its bounding box.
+Here is an example.
+The program fragment
 .KS
 .DS
 .CW
@@ -1409,8 +1469,8 @@ A: [
 .KE
 .LP
 yields the block in figure \n[H1]-1, which we show both with and
-without its attachment points.  The block's location becomes the
-value of \fBA\fP.
+without its attachment points.
+The block's location becomes the value of \fBA\fP.
 .KS
 .PS
 define junction {
@@ -1429,20 +1489,24 @@ compass([junction()]);
 .CE "1: A sample composite object"
 .LP
 To refer to one of the composite's attachment points, you can say
-(for example) \fBA .s\fP.  For purposes of object naming, composites
-are a class.  You could write \fBlast [] .s\fP as an equivalent
-reference, usable anywhere a location is needed.  This construction is
-very important for putting together large, multi-part diagrams.
+(for example) \fBA .s\fP.
+For purposes of object naming, composites are a class.
+You could write \fBlast [] .s\fP as an equivalent reference, usable
+anywhere a location is needed.
+This construction is very important for putting together large,
+multi-part diagrams.
 .PP
 Blocks are also a variable-scoping mechanism, like a \fIgroff\/\fP(1)
-environment.  All variable assignments done inside a block are undone
-at the end of it.  To get at values within a block, write a name of
-the block followed by a dot, followed by the label you
-want.  For example, we could refer the the center of the box in the
-above composite as \fBlast [] .Caption\fP or \fBA.Caption\fP.
+environment.
+All variable assignments done inside a block are undone at the end of it.
+To get at values within a block, write a name of the block followed by a
+dot, followed by the label you want.
+For example, we could refer the center of the box in the above composite as
+\fBlast [] \&.Caption\fP or \fBA.Caption\fP.
 .PP
 This kind of reference to a label can be used in any way any other
-location can be.  For example, if we added \fB"Hi!" at A.Caption\fP
+location can be.
+For example, if we added \fB"Hi!" at A.Caption\fP
 the result would look like this:
 .KS
 .PS
@@ -1452,9 +1516,9 @@ A: [junction();]
 .CE "2: Adding a caption using interior labeling"
 .PP
 You can also use interior labels in either part of a \fBwith\fR
-modifier.  This means that the example composite could be placed
-relative to its caption box by a command containing \fBwith A.Caption
-at\fP.
+modifier.
+This means that the example composite could be placed relative to its
+caption box by a command containing \fBwith A.Caption at\fP.
 .PP
 Note that both width and height of the block composite object are always
 positive:
@@ -1465,7 +1529,7 @@ positive:
                box wid -0.5 ht 0.5
                box wid 0.75 ht 0.75
        ]
-       move down 0.3 from last [].s 0.1
+       move 0.1 down 0.3 from last [].s
        "\fBbox wid -0.5 ht 0.5; box wid 0.75 ht 0.75\fP"
 ]
 move from last [].e 2
@@ -1474,14 +1538,15 @@ move from last [].e 2
                [ box wid -0.5 ht 0.5 ]
                box wid 0.75 ht 0.75
        ]
-       move down 0.3 from last [].s 0.1
+       move 0.1 down 0.3 from last [].s
        "\fB[box wid -0.5 ht 0.5]; box wid 0.75 ht 0.75\fP"
 ]
 .PE
 .CE "3: Composite block objects always have positive width and height"
 .PP
-Blocks may be nested.  This means you can use block attachment points
-to build up complex diagrams hierarchically, from the inside out.
+Blocks may be nested.
+This means you can use block attachment points to build up complex
+diagrams hierarchically, from the inside out.
 Note that \fBlast\fP and the other sequential naming mechanisms
 don't look inside blocks, so if you have a program that looks
 like
@@ -1504,7 +1569,8 @@ the arrow in the last line is attached to object \fBP\fP, not
 object \fBQ\fP.
 .PP
 In DWB \fBpic\fP, only references one level deep into enclosed blocks
-were permitted.  GNU \fBgpic\fP removes this restriction.
+were permitted.
+GNU \fBgpic\fP removes this restriction.
 .PP
 The combination of block variable scoping, assignability of labels and
 the macro facility that we'll describe later on can be used to
@@ -1516,9 +1582,10 @@ block braces).
 Style Variables
 .PP
 There are a number of global style variables in \fBpic\fR that can be used to
-change its overall behavior.  We've mentioned several of them in
-previous sections.  They're all described here.  For each variable,
-the default is given.
+change its overall behavior.
+We've mentioned several of them in previous sections.
+They're all described here.
+For each variable, the default is given.
 .TS H
 center, tab(@), linesize(2);
 lb | lb | lb
@@ -1576,21 +1643,23 @@ State variables retain their values across pictures until reset.
 Expressions, Variables, and Assignment
 .PP
 A number is a valid expression, of course (all numbers are stored
-internally as floating-point).  Decimal-point notation is acceptable;
+internally as floating-point).
+Decimal-point notation is acceptable;
 in GNU \fBgpic\fR, scientific notation in C's `e' format (like
 \f(CW5e-2\fP) is accepted.
 .PP
 Anywhere a number is expected, the language also accepts a
-variable.  Variables may be the built-in style variable described in
-the last section, or new variables created by assignment.
+variable.
+Variables may be the built-in style variable described in the last
+section, or new variables created by assignment.
 .PP
 DWB \fBpic\fP supports only the ordinary assignment via \fB=\fP, which
 defines the variable (on the left side of the equal sign) in the current
 block if it is not already defined there, and then changes the value (on
-the right side) in the current block.  The variable is not visible outside
-of the block.  This is similar to the C\~programming language where a
-variable within a block shadows a variable with the same name outside of
-the block.
+the right side) in the current block.
+The variable is not visible outside of the block.
+This is similar to the C\~programming language where a variable within a
+block shadows a variable with the same name outside of the block.
 .PP
 GNU \fBgpic\fP supports an alternate form of assignment using \fB:=\fP.
 The variable must already be defined, and the value is assigned to
@@ -1612,8 +1681,8 @@ print x " " y
 prints \fB3 5\fP.
 .PP
 You can use the height, width, radius, and x and y coordinates of any
-object or corner in expressions.  If \fBA\fP is an object label or name,
-all the following are valid:
+object or corner in expressions.
+If \fBA\fP is an object label or name, all the following are valid:
 .KS
 .DS
 .CW
@@ -1629,11 +1698,12 @@ A.ht                 # and its height
 Note the second expression, showing how to extract a corner coordinate.
 .PP
 Basic arithmetic resembling those of C operators are available; \fB+\fP,
-\fB*\fP, \fB-\fP, \fB/\fP, and \fB%\fP.  So is \fB^\fP for exponentiation.
-Grouping is permitted in the usual way using parentheses.  GNU \fBgpic\fP
-allows logical operators to appear in expressions; \fB!\&\fP (logical
-negation, not factorial), \fB&&\fP, \fB|\||\fP, \fB==\fP, \fB!=\fP,
-\fB>=\fP, \fB<=\fP, \fB<\fP, \fB>\fP.
+\fB*\fP, \fB-\fP, \fB/\fP, and \fB%\fP.
+So is \fB^\fP for exponentiation.
+Grouping is permitted in the usual way using parentheses.
+GNU \fBgpic\fP allows logical operators to appear in expressions;
+\fB!\&\fP (logical negation, not factorial), \fB&&\fP, \fB|\||\fP,
+\fB==\fP, \fB!=\fP, \fB>=\fP, \fB<=\fP, \fB<\fP, \fB>\fP.
 .PP
 Various built-in functions are supported: \fBsin(\fIx\fB)\fR,
 \fBcos(\fIx\fB)\fR, \fBlog(\fIx\fB)\fR, \fBexp(\fIx\fB)\fR,
@@ -1659,9 +1729,10 @@ function that only takes %, %e, %f, and %g format strings.
 Macros
 .PP
 You can define macros in \fBpic\fP, with up to 32 arguments (up to 16
-on EBCDIC platforms).  This is useful for diagrams with
-repetitive parts.  In conjunction with the scope rules for block
-composites, it effectively gives you the ability to write functions.
+on EBCDIC platforms).
+This is useful for diagrams with repetitive parts.
+In conjunction with the scope rules for block composites, it effectively
+gives you the ability to write functions.
 .PP
 The syntax is
 .DS
@@ -1671,7 +1742,8 @@ The syntax is
 .DE
 .LP
 This defines \fIname\fR as a macro to be replaced by the replacement
-text (not including the braces).  The macro may be called as
+text (not including the braces).
+The macro may be called as
 .DS
 .CW
 \fIname\fB(\fIarg1, arg2, \|.\|.\|.\& argn\fB)\fR
@@ -1778,16 +1850,16 @@ This macro example illustrates how you can combine [], brace grouping,
 and variable assignment to write true functions.
 .PP
 One detail the example above does not illustrate is the fact that
-macro argument parsing is not token-oriented.  If you call
-\fBjumper(\ 1\ )\fP, the value of $1 is \fB"\ 1\ "\fP.  You could
-even call \fBjumper(big\ string)\fP to give $1 the value
+macro argument parsing is not token-oriented.
+If you call \fBjumper(\ 1\ )\fP, the value of $1 is \fB"\ 1\ "\fP.
+You could even call \fBjumper(big\ string)\fP to give $1 the value
 \fB"big\ string"\fP.
 .PP
 If you want to pass in a coordinate pair, you can avoid getting
 tripped up by the comma by wrapping the pair in parentheses.
 .PP
-Macros persist through pictures.  To undefine a macro, say \fBundef\fP
-\fIname\fR; for example,
+Macros persist through pictures.
+To undefine a macro, say \fBundef\fP \fIname\fR; for example,
 .DS
 \f(CWundef jumper\fP
 \f(CWundef jumperblock\fP
@@ -1811,20 +1883,22 @@ The statement
 .DE
 .LP
 inserts the contents of \fIfilename\fR in the \fBpic\fP input stream.
-Any \fB.PS\fP/\fB.PE\fP pair in the file is ignored.  You
-can use this to include pre-generated images.
+Any \fB.PS\fP/\fB.PE\fP pair in the file is ignored.
+You can use this to include pre-generated images.
 .PP
 A variant of this statement replicates the \fBcopy thru\fP feature of
-\fIgrap\/\fP(1).  The call
+\fIgrap\/\fP(1).
+The call
 .DS
 \f(CWcopy\fP \fIfilename\fR \f(CWthru\fP \fImacro\fP
 .DE
 .LP
 calls \fImacro\fP (which may be either a name or replacement text)
 on the arguments obtained by breaking each line of the file into
-blank-separated fields.  The macro may have up to 9\~arguments.  The
-replacement text may be delimited by braces or by a pair of instances
-of any character not appearing in the rest of the text.
+blank-separated fields.
+The macro may have up to 9\~arguments.
+The replacement text may be delimited by braces or by a pair of
+instances of any character not appearing in the rest of the text.
 .PP
 If you write
 .DS
@@ -1879,8 +1953,8 @@ box
 Debug Messages
 .PP
 The command \fBprint\fR accepts any number of arguments, concatenates
-their output forms, and writes the result to standard error.  Each
-argument must be an expression, a position, or a text string.
+their output forms, and writes the result to standard error.
+Each argument must be an expression, a position, or a text string.
 .
 .NH 2
 Escape to Post-Processor
@@ -1891,7 +1965,8 @@ If you write
 .DE
 .LP
 \fBpic\fP concatenates the arguments and pass them through as a line
-to troff or \*[tx].  Each
+to troff or \*[tx].
+Each
 .I arg
 must be an expression, a position, or text.
 This has a similar effect to a line beginning with
@@ -1931,17 +2006,19 @@ The command
 .LP
 macro-expands the text in braces, then executes it as a shell command.
 This could be used to generate images or data tables for later
-inclusion.  The delimiters shown as {} here may also be two copies of
-any one character not present in the shell command text.  In either
-case, the body may contain balanced {} pairs.  Strings in the body
-may contain balanced or unbalanced braces in any case.
+inclusion.
+The delimiters shown as {} here may also be two copies of any one
+character not present in the shell command text.
+In either case, the body may contain balanced {} pairs.
+Strings in the body may contain balanced or unbalanced braces in any
+case.
 .
 .
 .NH 1
 Control-flow constructs
 .PP
-The \fBpic\fP language provides conditionals and looping.  For
-example,
+The \fBpic\fP language provides conditionals and looping.
+For example,
 .KS
 .DS
 .CW
@@ -2036,25 +2113,26 @@ Eithe or both of the
 or
 .I Y
 pairs may instead be balanced pairs of
-braces ({ and\~}) as in the \fBsh\fR command.  In either case, the
-\fIif-true\fR may contain balanced pairs of braces.  None of these
-delimiters are seen inside strings.
+braces ({ and\~}) as in the \fBsh\fR command.
+In either case, the \fIif-true\fR may contain balanced pairs of braces.
+None of these delimiters are seen inside strings.
 .PP
 All the usual relational operators my be used in conditional expressions;
 \fB!\&\fP (logical negation, not factorial), \fB&&\fP, \fB|\||\fP, \fB==\fP,
 \fB!=\fP, \fB>=\fP, \fB<=\fP, \fB<\fP, \fB>\fP.
 .PP
-String comparison is also supported using \fB==\fP and \fB!=\fP.  String
-comparisons may need to be parenthesized to avoid syntactic
+String comparison is also supported using \fB==\fP and \fB!=\fP.
+String comparisons may need to be parenthesized to avoid syntactic
 ambiguities.
 .
 .
 .NH 1
 Interface To [gt]roff
 .PP
-The output of \fBpic\fP is \fB[gt]roff\fP drawing commands.  The GNU
-\fIgpic\/\fP(1) command warns that it relies on drawing extensions
-present in \fIgroff\/\fP(1) that are not present in \fItroff\/\fP(1).
+The output of \fBpic\fP is \fB[gt]roff\fP drawing commands.
+The GNU \fIgpic\/\fP(1) command warns that it relies on drawing
+extensions present in \fIgroff\/\fP(1) that are not present in
+\fItroff\/\fP(1).
 .
 .NH 2
 Scaling Arguments
@@ -2062,22 +2140,23 @@ Scaling Arguments
 The DWB \fIpic\/\fP(1) program accepts one or two arguments to
 \&\fB.PS\fP, which is interpreted as a width and height in inches to
 which the results of \fIpic\/\fP(1) should be scaled (width and height
-scale independently).  If there is only one argument, it is
-interpreted as a width to scale the picture to, and height is
-scaled by the same proportion.
+scale independently).
+If there is only one argument, it is interpreted as a width to scale the
+picture to, and height is scaled by the same proportion.
 .PP
 GNU \fBgpic\fP is less general; it accepts a single width to scale
-to, or a zero width and a maximum height to scale to.  With
-two non-zero arguments, it scales to the maximum height.
+to, or a zero width and a maximum height to scale to.
+With two non-zero arguments, it scales to the maximum height.
 .
 .NH 2
 How Scaling is Handled
 .PP
 When \fBpic\fP processes a picture description on input, it passes
-\fB.PS\fP and \fB.PE\fP through to the postprocessor.  The \fB.PS\fP
-gets decorated with two numeric arguments which are the X and
-Y\~dimensions of the picture in inches.  The post-processor can use
-these to reserve space for the picture and center it.
+\fB.PS\fP and \fB.PE\fP through to the postprocessor.
+The \fB.PS\fP gets decorated with two numeric arguments which are the X
+and Y\~dimensions of the picture in inches.
+The post-processor can use these to reserve space for the picture and
+center it.
 .PP
 The GNU incarnation of the \fBms\fP macro package, for example, includes
 the following definitions:
@@ -2118,8 +2197,8 @@ The invocation
 \&\fB.PS <\,\fP\fIfile\fP
 .DE
 .LP
-causes the contents of \fIfile\fP to replace the \fB.PS\fP line.  This
-feature is deprecated; use `\fBcopy\fP \fIfile\fR' instead).
+causes the contents of \fIfile\fP to replace the \fB.PS\fP line.
+This feature is deprecated; use `\fBcopy\fP \fIfile\fR' instead).
 .
 .NH 2
 PIC and [gt]roff commands
@@ -2142,7 +2221,8 @@ complicated equations inside \fBpic\fR pictures; they come out wrong if
 \fIeqn\/\fP(1) has to leave extra vertical space for the equation.
 If your equation involves more than subscripts and superscripts, you
 must add to the beginning of each equation the extra information
-\fBspace\~0\fP.  He gives the following example:
+\fBspace\~0\fP.
+He gives the following example:
 .KS
 .DS
 .CW
@@ -2167,11 +2247,13 @@ arrow
 Absolute Positioning of Pictures
 .PP
 A \fBpic\fP picture is positioned vertically by troff at the current
-position.  The topmost position possible on a page is not the paper edge
+position.
+The topmost position possible on a page is not the paper edge
 but a position which is one baseline lower so that the first row of glyphs
-is visible.  To make a picture really start at the paper edge you have
-to make the baseline-to-baseline distance zero, this is, you must set the
-vertical spacing to\~0 (using \fB.vs\fP) before starting the picture.
+is visible.
+To make a picture really start at the paper edge you have to make the
+baseline-to-baseline distance zero, this is, you must set the vertical
+spacing to\~0 (using \fB.vs\fP) before starting the picture.
 .
 .
 .NH 1
@@ -2311,9 +2393,7 @@ define gridarrow
         }
         move down from last arrow .center;
         [
-            if ( $1 == boxht ) \e
-            then { "\efBline up left\efP" } \e
-            else { sprintf("\efBarrow up left %g\efP", $1) };
+            sprintf("\efBarrow up left %g\efP", $1)
         ]
     ]
     move right 0.1 from last [] .e;
@@ -2334,19 +2414,16 @@ undef gridarrow
 # Draw a demonstration up left arrow with grid box overlay
 define gridarrow
 {
-       move right 0.1
+       move right 0.5
        [
                {arrow up left $1;}
                box wid 0.5 ht 0.5 dotted with .nw at last arrow .end;
-               for i = 2 to ($1 / 0.5) do
-               {
+               for i = 2 to ($1 / 0.5) do {
                        box wid 0.5 ht 0.5 dotted with .sw at last box .se;
                }
                move down from last arrow .center;
                [
-                       if ( $1 == boxht ) \
-                       then { "\fBline up left\fP" } \
-                       else { sprintf("\fBarrow up left %g\fP", $1) };
+                       sprintf("\fBarrow up left %g\fP", $1)
                ]
        ]
        move right 0.1 from last [] .e;
@@ -2568,27 +2645,31 @@ This is an annotated grammar of \fBpic\fP.
 Lexical Items
 .PP
 In general, \fBpic\fP is a free-format, token-oriented language that
-ignores whitespace outside strings.  But certain lines and contructs
-are specially interpreted at the lexical level:
+ignores whitespace outside strings.
+But certain lines and contructs are specially interpreted at the lexical
+level:
 .PP
 A comment begins with \fB#\fP and continues to \fB\en\fP (comments may
-also follow text in a line).  A line beginning with a period or
-backslash may be interpreted as text to be passed through to the
-post-processor, depending on command-line options.  An end-of-line
-backslash is interpreted as a request to continue the line; the
-backslash and following newline are ignored.
+also follow text in a line).
+A line beginning with a period or backslash may be interpreted as text
+to be passed through to the post-processor, depending on command-line
+options.
+An end-of-line backslash is interpreted as a request to continue the
+line; the backslash and following newline are ignored.
 .PP
 .RS
 Here are the grammar terminals:
 .IP \s[-1]INT\s[0]
 A positive integer.
 .IP \s[-1]NUMBER\s[0]
-A floating point numeric constant.  May contain a decimal point or be
-expressed in scientific notation in the style of \fIprintf\/\fP(3)'s %e
-escape.  A trailing `i' or `I' (indicating the unit `inch') is ignored.
+A floating point numeric constant.
+May contain a decimal point or be expressed in scientific notation in
+the style of \fIprintf\/\fP(3)'s %e escape.
+A trailing `i' or `I' (indicating the unit `inch') is ignored.
 .IP \s[-1]TEXT\s[0]
-A string enclosed in double quotes.  A double quote within \s[-1]TEXT\s[0]
-must be preceded by a backslash.  Instead of \s[-1]TEXT\s[0] you can use
+A string enclosed in double quotes.
+A double quote within \s[-1]TEXT\s[0] must be preceded by a backslash.
+Instead of \s[-1]TEXT\s[0] you can use
 .DS
 .CW
 sprintf ( TEXT [, <expr> ...] )
@@ -2614,7 +2695,8 @@ where \fIX\fP doesn't occur in the string.
 Delimiters as in \s[-1]BALANCED-TEXT\s[0]; the body is interpreted as
 `\fB\[la]command\[ra].\|.\|.\fP'.
 .IP \s[-1]FILENAME\s[0]
-The name of a file.  This has the same semantics as \s[-1]TEXT\s[0].
+The name of a file.
+This has the same semantics as \s[-1]TEXT\s[0].
 .IP \s[-1]MACRONAME\s[0]
 Either \s[-1]VARIABLE\s[0] or \s[-1]LABEL\s[0].
 .RE
@@ -2632,8 +2714,8 @@ of the preceding element(s).
 An enclosure in square brackets has its usual meaning of `this clause is
 optional'.
 .IP 4.
-Square-bracket-enclosed portions within tokens are optional.  Thus,
-`h\^[eigh]\^t' matches either `height' or `ht'.
+Square-bracket-enclosed portions within tokens are optional.
+Thus, `h\^[eigh]\^t' matches either `height' or `ht'.
 .LP
 If one of these special tokens has to be referred to literally, it is
 surrounded with single quotes.
@@ -2650,15 +2732,16 @@ The top-level \fBpic\fP object is a picture.
 .PP
 The arguments, if present, represent the width and height of the picture,
 causing \fBpic\fR to attempt to scale it to the given dimensions in
-inches.  In no case, however, the X and Y\~dimensions of the
-picture exceed the values of the style variables \fBmaxpswid\fP and
-\fBmaxpsheight\fP (which default to the normal 8.5\^i by 11\^i page size).
+inches.
+In no case, however, the X and Y\~dimensions of the picture exceed the
+values of the style variables \fBmaxpswid\fP and \fBmaxpsheight\fP
+(which default to the normal 8.5\^i by 11\^i page size).
 .PP
 If the ending `.PE' is replaced by `.PF', the page vertical position is
-restored to its value at the time `.PS' was encountered.  Another
-alternate form of invocation is `.PS\ <\s[-1]FILENAME\s[0]', which
-replaces the `.PS' line with a file to be interpreted by \fBpic\fR (but
-this feature is deprecated).
+restored to its value at the time `.PS' was encountered.
+Another alternate form of invocation is `.PS\ <\s[-1]FILENAME\s[0]',
+which replaces the `.PS' line with a file to be interpreted by \fBpic\fR
+(but this feature is deprecated).
 .PP
 The `.PS', `.PE', and `.PF' macros to perform centering and scaling are
 normally supplied by the post-processor.
@@ -2706,7 +2789,8 @@ The current position and direction are saved on entry to a `{\ .\|.\|.\ }'
 construction and restored on exit from it.
 .PP
 Note that in `if' constructions, newlines can only occur in
-\s[-1]BALANCED-BODY\s[0].  This means that
+\s[-1]BALANCED-BODY\s[0].
+This means that
 .DS
 .CW
 if
@@ -2716,7 +2800,8 @@ else
 .R
 .DE
 .PP
-fails.  You have to use the braces on the same line as the keywords:
+fails.
+You have to use the braces on the same line as the keywords:
 .DS
 .CW
 if {
@@ -2731,11 +2816,11 @@ This restriction doesn't hold for the body after the `do' in a `for'
 construction.
 .PP
 At the beginning of each picture, `figname' is reset to the vbox name
-`graph'; this command has only a meaning in \*[tx] mode.  While the grammar
-rules allow digits and the underscore in the value of `figname', \*[tx]
-normally accepts uppercase and lowercase letters only as box names
-(you have to use `\ecsname' if you really need to circumvent this
-limitation).
+`graph'; this command has only a meaning in \*[tx] mode.
+While the grammar rules allow digits and the underscore in the value of
+`figname', \*[tx] normally accepts uppercase and lowercase letters only
+as box names (you have to use `\ecsname' if you really need to
+circumvent this limitation).
 .DS
 .CW
 <any-expr> ::=
@@ -2760,9 +2845,9 @@ limitation).
 .DE
 .PP
 Logical operators are handled specially by \fBpic\fP since they can
-deal with text strings also.  \fBpic\fP uses \%\fIstrcmp\/\fP(3) to test
-for equality of strings; an empty string is considered as `false' for
-`&&' and `|\||'.
+deal with text strings also.
+\fBpic\fP uses \%\fIstrcmp\/\fP(3) to test for equality of strings; an
+empty string is considered as `false' for `&&' and `|\||'.
 .DS
 .CW
 <primitive> ::=
@@ -2782,9 +2867,11 @@ for equality of strings; an empty string is considered as `false' for
 .PP
 Drawn objects within `[\ .\|.\|.\ ]' are treated as a single composite
 object with a rectangular shape (that of the bounding box of all the
-elements).  Variable and label assignments within a block are local to
-the block.  Current direction of motion is restored to the value at start
-of block upon exit.  Position is \fInot\fR restored (unlike `{\ }');
+elements).
+Variable and label assignments within a block are local to the block.
+Current direction of motion is restored to the value at start of block
+upon exit.
+Position is \fInot\fR restored (unlike `{\ }');
 instead, the current position becomes the exit position for the current
 direction on the block's bounding box.
 .DS
@@ -2829,13 +2916,13 @@ direction on the block's bounding box.
 .DE
 .PP
 Missing attributes are supplied from defaults; inappropriate ones are
-silently ignored.  For lines, splines, and arcs, height and width
-refer to arrowhead size.
+silently ignored.
+For lines, splines, and arcs, height and width refer to arrowhead size.
 .PP
-The `at' primitive sets the center of the current object.  The
-`with' attribute fixes the specified feature of the given object
-to a specified location.  (Note that `with' is incorrectly described
-in the Kernighan paper.)
+The `at' primitive sets the center of the current object.
+The `with' attribute fixes the specified feature of the given object to
+a specified location.
+(Note that `with' is incorrectly described in the Kernighan paper.)
 .PP
 The `by' primitive is not documented in the tutorial portion of
 the Kernighan paper, and should probably be considered unreliable.
@@ -2844,14 +2931,15 @@ The primitive `arrow' is a synonym for `line\ ->'.
 .PP
 Text is normally an attribute of some object, in which case successive
 strings are vertically stacked and centered on the object's center by
-default.  Standalone text is treated as though placed in an invisible
-box.
+default.
+Standalone text is treated as though placed in an invisible box.
 .PP
 A text item consists of a string or sprintf-expression, optionally
-followed by positioning information.  Text (or strings specified with
-`sprintf') may contain font changes, size changes, and local
-motions, provided those changes are undone before the end of the current
-item.  Text may also contain \e-escapes denoting special characters.
+followed by positioning information.
+Text (or strings specified with `sprintf') may contain font changes,
+size changes, and local motions, provided those changes are undone
+before the end of the current item.
+Text may also contain \e-escapes denoting special characters.
 The base font and specific set of escapes supported is implementation
 dependent, but supported escapes always include the following:
 .IP "\efR, \ef1"
@@ -2867,8 +2955,8 @@ Color names are dependent on the \gBpic\fR implementation, but in
 all modern versions color names recognized by the X\~window system are
 supported.
 .PP
-A position is an (x,y) coordinate pair.  There are lots of different
-ways to specify positions:
+A position is an (x,y) coordinate pair.
+There are lots of different ways to specify positions:
 .DS
 .CW
 <position> ::=
@@ -2971,8 +3059,8 @@ an expression, as opposed to a numeric literal) is not documented in DWB's
 .PP
 The \[la]\,\fIxxx\/\fP-of\|\[ra] rule is special: The lexical parser checks whether
 \fIxxx\fP is followed by the token `of' without eliminating it so that
-the grammar parser can still see `of'.  Valid examples of specifying a
-place with corner and label are thus
+the grammar parser can still see `of'.
+Valid examples of specifying a place with corner and label are thus
 .DS
 .CW
 A .n
@@ -2989,8 +3077,8 @@ north A
 A north
 .R
 .DE
-both cause a syntax error.  (DWB \fBpic\fP also allows the weird form
-`A\ north\ of'.)
+both cause a syntax error.
+(DWB \fBpic\fP also allows the weird form `A\ north\ of'.)
 .PP
 Here the special rules for the `with' keyword using a path:
 .DS
@@ -3043,14 +3131,16 @@ fillval@0.5@Default fill value
 _
 .TE
 Any of these can be set by assignment, or reset using the \fBreset\fP
-statement.  Style variables assigned within `[\ ]' blocks are restored to
-their beginning-of-block value on exit; top-level assignments persist
-across pictures.  Dimensions are divided by \fBscale\fR on output.
+statement.
+Style variables assigned within `[\ ]' blocks are restored to their
+beginning-of-block value on exit; top-level assignments persist across
+pictures.
+Dimensions are divided by \fBscale\fR on output.
 .PP
 All \fBpic\fP expressions are evaluated in floating point; units
-are always inches (a trailing `i' or `I' is ignored).  Expressions have
-the following simple grammar, with semantics very similar to
-C\~expressions:
+are always inches (a trailing `i' or `I' is ignored).
+Expressions have the following simple grammar, with semantics very
+similar to C\~expressions:
 .DS
 .CW
 <expr> ::=
@@ -3104,7 +3194,8 @@ These may be used to define pseudo-functions.
 .DE
 .LP
 This defines \fIname\fR as a macro to be replaced by the replacement
-text (not including the braces).  The macro may be called as
+text (not including the braces).
+The macro may be called as
 .DS
 .CW
 \fIname\/\fB(\,\fIarg1, arg2, .\|.\|., argn\fB\/)\fR
@@ -3112,8 +3203,9 @@ text (not including the braces).  The macro may be called as
 .DE
 .LP
 The arguments (if any) are substituted for tokens $1, $2 .\|.\|.\& $n
-appearing in the replacement text.  To undefine a macro, say \fBundef\fP
-\fIname\fR, specifying the name to be undefined.
+appearing in the replacement text.
+To undefine a macro, say \fBundef\fP \fIname\fR, specifying the name to
+be undefined.
 .\"%%POSTLUDE%%
 .
 .
@@ -3127,8 +3219,9 @@ with substantial enhancements (apparently as part of the evolution of
 device-independent output).
 .PP
 The language had been inspired by some earlier graphics languages
-including \fBideal\fP and \fBgrap\fP.  Kernighan credits Chris van Wyk
-(the designer of \fBideal\fP) with many of the ideas that went into
+including \fBideal\fP and \fBgrap\fP.
+Kernighan credits Chris van Wyk (the designer of \fBideal\fP) with many
+of the ideas that went into
 \fBpic\fP.
 .PP
 .\" the original definitions of EQ and EN cause insertion of vertical
@@ -3144,7 +3237,8 @@ The \fBpic\fP language was originally described by Brian Kernighan in
 Bell Labs Computing Science Technical Report #116 (you can obtain a
 PostScript copy of the revised version, [1], by sending a mail message to
 \fInetlib@research.att.com\fP with a body of `send 116 from
-research/cstr').  There have been two revisions, in 1984 and 1991.
+research/cstr').
+There have been two revisions, in 1984 and 1991.
 .PP
 The document you are reading effectively subsumes Kernighan's
 description; it was written to fill in lacun\[ae] in the exposition and
@@ -3152,8 +3246,7 @@ integrate in descriptions of the GNU \fIgpic\/\fP(1) and
 \fIpic2plot\/\fP(1) features.
 .PP
 The GNU \fBgpic\fR implementation was written by James Clark
-\[la]\,\fIjjc@jclark.com\/\fP\[ra].  It is currently maintained by Werner
-Lemberg \[la]\,\fIwl@gnu.org\/\fP\[ra].
+\[la]\,\fIjjc@jclark.com\/\fP\[ra].
 .PP
 The GNU \fBpic2plot\fR implementation is based on James Clark's parser
 code and maintained by Robert Maier, principal author of \fBplotutils\fP.
@@ -3162,11 +3255,16 @@ code and maintained by Robert Maier, principal author of \fBplotutils\fP.
 .NH 1
 Bibliography
 .IP 1.
-Kernighan, B. W.  \fBPIC \[em] A Graphics Language for Typesetting
-(Revised User Manual)\fP.  Bell Labs Computing Science Technical Report
-#116, December 1991.
+Kernighan, B. W.
+\fBPIC \[em] A Graphics Language for Typesetting
+(Revised User Manual)\fP.
+Bell Labs Computing Science Technical Report #116, December 1991.
 .IP 2.
-Van Wyk, C. J.  \fBA high-level language for specifying pictures\fP.
+Van Wyk, C. J.
+\fBA high-level language for specifying pictures\fP.
 \fIACM Transactions On Graphics\fP 1,2 (1982) 163-182.
 .
-.\" end of pic.ms
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
diff --git a/doc/texinfo.tex b/doc/texinfo.tex
deleted file mode 100644 (file)
index 72c8cf4..0000000
+++ /dev/null
@@ -1,10183 +0,0 @@
-% texinfo.tex -- TeX macros to handle Texinfo files.
-% 
-% Load plain if necessary, i.e., if running under initex.
-\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
-%
-\def\texinfoversion{2014-10-29.10}
-%
-% Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995,
-% 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
-% 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014 Free Software Foundation, Inc.
-%
-% This texinfo.tex file 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 3 of the
-% License, or (at your option) any later version.
-%
-% This texinfo.tex file 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, see <http://www.gnu.org/licenses/>.
-%
-% As a special exception, when this file is read by TeX when processing
-% a Texinfo source document, you may use the result without
-% restriction. This Exception is an additional permission under section 7
-% of the GNU General Public License, version 3 ("GPLv3").
-%
-% Please try the latest version of texinfo.tex before submitting bug
-% reports; you can get the latest version from:
-%   http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
-%   http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
-%   http://www.gnu.org/software/texinfo/ (the Texinfo home page)
-% The texinfo.tex in any given distribution could well be out
-% of date, so if that's what you're using, please check.
-%
-% Send bug reports to bug-texinfo@gnu.org.  Please include including a
-% complete document in each bug report with which we can reproduce the
-% problem.  Patches are, of course, greatly appreciated.
-%
-% To process a Texinfo manual with TeX, it's most reliable to use the
-% texi2dvi shell script that comes with the distribution.  For a simple
-% manual foo.texi, however, you can get away with this:
-%   tex foo.texi
-%   texindex foo.??
-%   tex foo.texi
-%   tex foo.texi
-%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
-% The extra TeX runs get the cross-reference information correct.
-% Sometimes one run after texindex suffices, and sometimes you need more
-% than two; texi2dvi does it as many times as necessary.
-%
-% It is possible to adapt texinfo.tex for other languages, to some
-% extent.  You can get the existing language-specific files from the
-% full Texinfo distribution.
-%
-% The GNU Texinfo home page is http://www.gnu.org/software/texinfo.
-
-
-\message{Loading texinfo [version \texinfoversion]:}
-
-% If in a .fmt file, print the version number
-% and turn on active characters that we couldn't do earlier because
-% they might have appeared in the input file name.
-\everyjob{\message{[Texinfo version \texinfoversion]}%
-  \catcode`+=\active \catcode`\_=\active}
-
-\chardef\other=12
-
-% We never want plain's \outer definition of \+ in Texinfo.
-% For @tex, we can use \tabalign.
-\let\+ = \relax
-
-% Save some plain tex macros whose names we will redefine.
-\let\ptexb=\b
-\let\ptexbullet=\bullet
-\let\ptexc=\c
-\let\ptexcomma=\,
-\let\ptexdot=\.
-\let\ptexdots=\dots
-\let\ptexend=\end
-\let\ptexequiv=\equiv
-\let\ptexexclam=\!
-\let\ptexfootnote=\footnote
-\let\ptexgtr=>
-\let\ptexhat=^
-\let\ptexi=\i
-\let\ptexindent=\indent
-\let\ptexinsert=\insert
-\let\ptexlbrace=\{
-\let\ptexless=<
-\let\ptexnewwrite\newwrite
-\let\ptexnoindent=\noindent
-\let\ptexplus=+
-\let\ptexraggedright=\raggedright
-\let\ptexrbrace=\}
-\let\ptexslash=\/
-\let\ptexstar=\*
-\let\ptext=\t
-\let\ptextop=\top
-{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
-
-% If this character appears in an error message or help string, it
-% starts a new line in the output.
-\newlinechar = `^^J
-
-% Use TeX 3.0's \inputlineno to get the line number, for better error
-% messages, but if we're using an old version of TeX, don't do anything.
-%
-\ifx\inputlineno\thisisundefined
-  \let\linenumber = \empty % Pre-3.0.
-\else
-  \def\linenumber{l.\the\inputlineno:\space}
-\fi
-
-% Set up fixed words for English if not already set.
-\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
-\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
-\ifx\putworderror\undefined     \gdef\putworderror{error}\fi
-\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
-\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
-\ifx\putwordIndexIsEmpty\undefined       \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
-\ifx\putwordIndexNonexistent\undefined   \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
-\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
-\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
-\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
-\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
-\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
-\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
-\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
-\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
-\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
-\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
-\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
-\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
-\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
-%
-\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
-\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
-\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
-\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
-\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
-\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
-\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
-\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
-\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
-\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
-\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
-\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
-%
-\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
-\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
-\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
-\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
-\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
-
-% Since the category of space is not known, we have to be careful.
-\chardef\spacecat = 10
-\def\spaceisspace{\catcode`\ =\spacecat}
-
-% sometimes characters are active, so we need control sequences.
-\chardef\ampChar   = `\&
-\chardef\colonChar = `\:
-\chardef\commaChar = `\,
-\chardef\dashChar  = `\-
-\chardef\dotChar   = `\.
-\chardef\exclamChar= `\!
-\chardef\hashChar  = `\#
-\chardef\lquoteChar= `\`
-\chardef\questChar = `\?
-\chardef\rquoteChar= `\'
-\chardef\semiChar  = `\;
-\chardef\slashChar = `\/
-\chardef\underChar = `\_
-
-% Ignore a token.
-%
-\def\gobble#1{}
-
-% The following is used inside several \edef's.
-\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
-
-% Hyphenation fixes.
-\hyphenation{
-  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
-  ap-pen-dix bit-map bit-maps
-  data-base data-bases eshell fall-ing half-way long-est man-u-script
-  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
-  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
-  spell-ing spell-ings
-  stand-alone strong-est time-stamp time-stamps which-ever white-space
-  wide-spread wrap-around
-}
-
-% Margin to add to right of even pages, to left of odd pages.
-\newdimen\bindingoffset
-\newdimen\normaloffset
-\newdimen\pagewidth \newdimen\pageheight
-
-% For a final copy, take out the rectangles
-% that mark overfull boxes (in case you have decided
-% that the text looks ok even though it passes the margin).
-%
-\def\finalout{\overfullrule=0pt }
-
-% Sometimes it is convenient to have everything in the transcript file
-% and nothing on the terminal.  We don't just call \tracingall here,
-% since that produces some useless output on the terminal.  We also make
-% some effort to order the tracing commands to reduce output in the log
-% file; cf. trace.sty in LaTeX.
-%
-\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
-\def\loggingall{%
-  \tracingstats2
-  \tracingpages1
-  \tracinglostchars2  % 2 gives us more in etex
-  \tracingparagraphs1
-  \tracingoutput1
-  \tracingmacros2
-  \tracingrestores1
-  \showboxbreadth\maxdimen \showboxdepth\maxdimen
-  \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
-    \tracingscantokens1
-    \tracingifs1
-    \tracinggroups1
-    \tracingnesting2
-    \tracingassigns1
-  \fi
-  \tracingcommands3  % 3 gives us more in etex
-  \errorcontextlines16
-}%
-
-% @errormsg{MSG}.  Do the index-like expansions on MSG, but if things
-% aren't perfect, it's not the end of the world, being an error message,
-% after all.
-% 
-\def\errormsg{\begingroup \indexnofonts \doerrormsg}
-\def\doerrormsg#1{\errmessage{#1}}
-
-% add check for \lastpenalty to plain's definitions.  If the last thing
-% we did was a \nobreak, we don't want to insert more space.
-%
-\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
-  \removelastskip\penalty-50\smallskip\fi\fi}
-\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
-  \removelastskip\penalty-100\medskip\fi\fi}
-\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
-  \removelastskip\penalty-200\bigskip\fi\fi}
-
-% Do @cropmarks to get crop marks.
-%
-\newif\ifcropmarks
-\let\cropmarks = \cropmarkstrue
-%
-% Dimensions to add cropmarks at corners.
-% Added by P. A. MacKay, 12 Nov. 1986
-%
-\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
-\newdimen\cornerlong  \cornerlong=1pc
-\newdimen\cornerthick \cornerthick=.3pt
-\newdimen\topandbottommargin \topandbottommargin=.75in
-
-% Output a mark which sets \thischapter, \thissection and \thiscolor.
-% We dump everything together because we only have one kind of mark.
-% This works because we only use \botmark / \topmark, not \firstmark.
-%
-% A mark contains a subexpression of the \ifcase ... \fi construct.
-% \get*marks macros below extract the needed part using \ifcase.
-%
-% Another complication is to let the user choose whether \thischapter
-% (\thissection) refers to the chapter (section) in effect at the top
-% of a page, or that at the bottom of a page.  The solution is
-% described on page 260 of The TeXbook.  It involves outputting two
-% marks for the sectioning macros, one before the section break, and
-% one after.  I won't pretend I can describe this better than DEK...
-\def\domark{%
-  \toks0=\expandafter{\lastchapterdefs}%
-  \toks2=\expandafter{\lastsectiondefs}%
-  \toks4=\expandafter{\prevchapterdefs}%
-  \toks6=\expandafter{\prevsectiondefs}%
-  \toks8=\expandafter{\lastcolordefs}%
-  \mark{%
-                   \the\toks0 \the\toks2  % 0: top marks (\last...)
-      \noexpand\or \the\toks4 \the\toks6  % 1: bottom marks (default, \prev...)
-    \noexpand\else \the\toks8             % 2: color marks
-  }%
-}
-% \topmark doesn't work for the very first chapter (after the title
-% page or the contents), so we use \firstmark there -- this gets us
-% the mark with the chapter defs, unless the user sneaks in, e.g.,
-% @setcolor (or @url, or @link, etc.) between @contents and the very
-% first @chapter.
-\def\gettopheadingmarks{%
-  \ifcase0\topmark\fi
-  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
-}
-\def\getbottomheadingmarks{\ifcase1\botmark\fi}
-\def\getcolormarks{\ifcase2\topmark\fi}
-
-% Avoid "undefined control sequence" errors.
-\def\lastchapterdefs{}
-\def\lastsectiondefs{}
-\def\prevchapterdefs{}
-\def\prevsectiondefs{}
-\def\lastcolordefs{}
-
-% Main output routine.
-\chardef\PAGE = 255
-\output = {\onepageout{\pagecontents\PAGE}}
-
-\newbox\headlinebox
-\newbox\footlinebox
-
-% \onepageout takes a vbox as an argument.  Note that \pagecontents
-% does insertions, but you have to call it yourself.
-\def\onepageout#1{%
-  \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi
-  %
-  \ifodd\pageno  \advance\hoffset by \bindingoffset
-  \else \advance\hoffset by -\bindingoffset\fi
-  %
-  % Do this outside of the \shipout so @code etc. will be expanded in
-  % the headline as they should be, not taken literally (outputting ''code).
-  \def\commmonheadfootline{\let\hsize=\pagewidth \texinfochars}
-  %
-  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
-  \global\setbox\headlinebox = \vbox{\commmonheadfootline \makeheadline}%
-  %
-  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
-  \global\setbox\footlinebox = \vbox{\commmonheadfootline \makefootline}%
-  %
-  {%
-    % Have to do this stuff outside the \shipout because we want it to
-    % take effect in \write's, yet the group defined by the \vbox ends
-    % before the \shipout runs.
-    %
-    \indexdummies         % don't expand commands in the output.
-    \normalturnoffactive  % \ in index entries must not stay \, e.g., if
-               % the page break happens to be in the middle of an example.
-               % We don't want .vr (or whatever) entries like this:
-               % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}}
-               % "\acronym" won't work when it's read back in;
-               % it needs to be
-               % {\code {{\tt \backslashcurfont }acronym}
-    \shipout\vbox{%
-      % Do this early so pdf references go to the beginning of the page.
-      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
-      %
-      \ifcropmarks \vbox to \outervsize\bgroup
-        \hsize = \outerhsize
-        \vskip-\topandbottommargin
-        \vtop to0pt{%
-          \line{\ewtop\hfil\ewtop}%
-          \nointerlineskip
-          \line{%
-            \vbox{\moveleft\cornerthick\nstop}%
-            \hfill
-            \vbox{\moveright\cornerthick\nstop}%
-          }%
-          \vss}%
-        \vskip\topandbottommargin
-        \line\bgroup
-          \hfil % center the page within the outer (page) hsize.
-          \ifodd\pageno\hskip\bindingoffset\fi
-          \vbox\bgroup
-      \fi
-      %
-      \unvbox\headlinebox
-      \pagebody{#1}%
-      \ifdim\ht\footlinebox > 0pt
-        % Only leave this space if the footline is nonempty.
-        % (We lessened \vsize for it in \oddfootingyyy.)
-        % The \baselineskip=24pt in plain's \makefootline has no effect.
-        \vskip 24pt
-        \unvbox\footlinebox
-      \fi
-      %
-      \ifcropmarks
-          \egroup % end of \vbox\bgroup
-        \hfil\egroup % end of (centering) \line\bgroup
-        \vskip\topandbottommargin plus1fill minus1fill
-        \boxmaxdepth = \cornerthick
-        \vbox to0pt{\vss
-          \line{%
-            \vbox{\moveleft\cornerthick\nsbot}%
-            \hfill
-            \vbox{\moveright\cornerthick\nsbot}%
-          }%
-          \nointerlineskip
-          \line{\ewbot\hfil\ewbot}%
-        }%
-      \egroup % \vbox from first cropmarks clause
-      \fi
-    }% end of \shipout\vbox
-  }% end of group with \indexdummies
-  \advancepageno
-  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
-}
-
-\newinsert\margin \dimen\margin=\maxdimen
-
-\def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}}
-{\catcode`\@ =11
-\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
-% marginal hacks, juha@viisa.uucp (Juha Takala)
-\ifvoid\margin\else % marginal info is present
-  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
-\dimen@=\dp#1\relax \unvbox#1\relax
-\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
-\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
-}
-
-% Here are the rules for the cropmarks.  Note that they are
-% offset so that the space between them is truly \outerhsize or \outervsize
-% (P. A. MacKay, 12 November, 1986)
-%
-\def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong}
-\def\nstop{\vbox
-  {\hrule height\cornerthick depth\cornerlong width\cornerthick}}
-\def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong}
-\def\nsbot{\vbox
-  {\hrule height\cornerlong depth\cornerthick width\cornerthick}}
-
-% Parse an argument, then pass it to #1.  The argument is the rest of
-% the input line (except we remove a trailing comment).  #1 should be a
-% macro which expects an ordinary undelimited TeX argument.
-%
-\def\parsearg{\parseargusing{}}
-\def\parseargusing#1#2{%
-  \def\argtorun{#2}%
-  \begingroup
-    \obeylines
-    \spaceisspace
-    #1%
-    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
-}
-
-{\obeylines %
-  \gdef\parseargline#1^^M{%
-    \endgroup % End of the group started in \parsearg.
-    \argremovecomment #1\comment\ArgTerm%
-  }%
-}
-
-% First remove any @comment, then any @c comment.
-\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
-\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
-
-% Each occurrence of `\^^M' or `<space>\^^M' is replaced by a single space.
-%
-% \argremovec might leave us with trailing space, e.g.,
-%    @end itemize  @c foo
-% This space token undergoes the same procedure and is eventually removed
-% by \finishparsearg.
-%
-\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
-\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
-\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
-  \def\temp{#3}%
-  \ifx\temp\empty
-    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
-    \let\temp\finishparsearg
-  \else
-    \let\temp\argcheckspaces
-  \fi
-  % Put the space token in:
-  \temp#1 #3\ArgTerm
-}
-
-% If a _delimited_ argument is enclosed in braces, they get stripped; so
-% to get _exactly_ the rest of the line, we had to prevent such situation.
-% We prepended an \empty token at the very beginning and we expand it now,
-% just before passing the control to \argtorun.
-% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
-% either the null string, or it ends with \^^M---thus there is no danger
-% that a pair of braces would be stripped.
-%
-% But first, we have to remove the trailing space token.
-%
-\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
-
-% \parseargdef\foo{...}
-%      is roughly equivalent to
-% \def\foo{\parsearg\Xfoo}
-% \def\Xfoo#1{...}
-%
-% Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my
-% favourite TeX trick.  --kasal, 16nov03
-
-\def\parseargdef#1{%
-  \expandafter \doparseargdef \csname\string#1\endcsname #1%
-}
-\def\doparseargdef#1#2{%
-  \def#2{\parsearg#1}%
-  \def#1##1%
-}
-
-% Several utility definitions with active space:
-{
-  \obeyspaces
-  \gdef\obeyedspace{ }
-
-  % Make each space character in the input produce a normal interword
-  % space in the output.  Don't allow a line break at this space, as this
-  % is used only in environments like @example, where each line of input
-  % should produce a line of output anyway.
-  %
-  \gdef\sepspaces{\obeyspaces\let =\tie}
-
-  % If an index command is used in an @example environment, any spaces
-  % therein should become regular spaces in the raw index file, not the
-  % expansion of \tie (\leavevmode \penalty \@M \ ).
-  \gdef\unsepspaces{\let =\space}
-}
-
-
-\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
-
-% Define the framework for environments in texinfo.tex.  It's used like this:
-%
-%   \envdef\foo{...}
-%   \def\Efoo{...}
-%
-% It's the responsibility of \envdef to insert \begingroup before the
-% actual body; @end closes the group after calling \Efoo.  \envdef also
-% defines \thisenv, so the current environment is known; @end checks
-% whether the environment name matches.  The \checkenv macro can also be
-% used to check whether the current environment is the one expected.
-%
-% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
-% are not treated as environments; they don't open a group.  (The
-% implementation of @end takes care not to call \endgroup in this
-% special case.)
-
-
-% At run-time, environments start with this:
-\def\startenvironment#1{\begingroup\def\thisenv{#1}}
-% initialize
-\let\thisenv\empty
-
-% ... but they get defined via ``\envdef\foo{...}'':
-\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
-\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
-
-% Check whether we're in the right environment:
-\def\checkenv#1{%
-  \def\temp{#1}%
-  \ifx\thisenv\temp
-  \else
-    \badenverr
-  \fi
-}
-
-% Environment mismatch, #1 expected:
-\def\badenverr{%
-  \errhelp = \EMsimple
-  \errmessage{This command can appear only \inenvironment\temp,
-    not \inenvironment\thisenv}%
-}
-\def\inenvironment#1{%
-  \ifx#1\empty
-    outside of any environment%
-  \else
-    in environment \expandafter\string#1%
-  \fi
-}
-
-% @end foo executes the definition of \Efoo.
-% But first, it executes a specialized version of \checkenv
-%
-\parseargdef\end{%
-  \if 1\csname iscond.#1\endcsname
-  \else
-    % The general wording of \badenverr may not be ideal.
-    \expandafter\checkenv\csname#1\endcsname
-    \csname E#1\endcsname
-    \endgroup
-  \fi
-}
-
-\newhelp\EMsimple{Press RETURN to continue.}
-
-
-% Be sure we're in horizontal mode when doing a tie, since we make space
-% equivalent to this in @example-like environments. Otherwise, a space
-% at the beginning of a line will start with \penalty -- and
-% since \penalty is valid in vertical mode, we'd end up putting the
-% penalty on the vertical list instead of in the new paragraph.
-{\catcode`@ = 11
- % Avoid using \@M directly, because that causes trouble
- % if the definition is written into an index file.
- \global\let\tiepenalty = \@M
- \gdef\tie{\leavevmode\penalty\tiepenalty\ }
-}
-
-% @: forces normal size whitespace following.
-\def\:{\spacefactor=1000 }
-
-% @* forces a line break.
-\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
-
-% @/ allows a line break.
-\let\/=\allowbreak
-
-% @. is an end-of-sentence period.
-\def\.{.\spacefactor=\endofsentencespacefactor\space}
-
-% @! is an end-of-sentence bang.
-\def\!{!\spacefactor=\endofsentencespacefactor\space}
-
-% @? is an end-of-sentence query.
-\def\?{?\spacefactor=\endofsentencespacefactor\space}
-
-% @frenchspacing on|off  says whether to put extra space after punctuation.
-%
-\def\onword{on}
-\def\offword{off}
-%
-\parseargdef\frenchspacing{%
-  \def\temp{#1}%
-  \ifx\temp\onword \plainfrenchspacing
-  \else\ifx\temp\offword \plainnonfrenchspacing
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
-  \fi\fi
-}
-
-% @w prevents a word break.  Without the \leavevmode, @w at the
-% beginning of a paragraph, when TeX is still in vertical mode, would
-% produce a whole line of output instead of starting the paragraph.
-\def\w#1{\leavevmode\hbox{#1}}
-
-% @group ... @end group forces ... to be all on one page, by enclosing
-% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
-% to keep its height that of a normal line.  According to the rules for
-% \topskip (p.114 of the TeXbook), the glue inserted is
-% max (\topskip - \ht (first item), 0).  If that height is large,
-% therefore, no glue is inserted, and the space between the headline and
-% the text is small, which looks bad.
-%
-% Another complication is that the group might be very large.  This can
-% cause the glue on the previous page to be unduly stretched, because it
-% does not have much material.  In this case, it's better to add an
-% explicit \vfill so that the extra space is at the bottom.  The
-% threshold for doing this is if the group is more than \vfilllimit
-% percent of a page (\vfilllimit can be changed inside of @tex).
-%
-\newbox\groupbox
-\def\vfilllimit{0.7}
-%
-\envdef\group{%
-  \ifnum\catcode`\^^M=\active \else
-    \errhelp = \groupinvalidhelp
-    \errmessage{@group invalid in context where filling is enabled}%
-  \fi
-  \startsavinginserts
-  %
-  \setbox\groupbox = \vtop\bgroup
-    % Do @comment since we are called inside an environment such as
-    % @example, where each end-of-line in the input causes an
-    % end-of-line in the output.  We don't want the end-of-line after
-    % the `@group' to put extra space in the output.  Since @group
-    % should appear on a line by itself (according to the Texinfo
-    % manual), we don't worry about eating any user text.
-    \comment
-}
-%
-% The \vtop produces a box with normal height and large depth; thus, TeX puts
-% \baselineskip glue before it, and (when the next line of text is done)
-% \lineskip glue after it.  Thus, space below is not quite equal to space
-% above.  But it's pretty close.
-\def\Egroup{%
-    % To get correct interline space between the last line of the group
-    % and the first line afterwards, we have to propagate \prevdepth.
-    \endgraf % Not \par, as it may have been set to \lisppar.
-    \global\dimen1 = \prevdepth
-  \egroup           % End the \vtop.
-  % \dimen0 is the vertical size of the group's box.
-  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
-  % \dimen2 is how much space is left on the page (more or less).
-  \dimen2 = \pageheight   \advance\dimen2 by -\pagetotal
-  % if the group doesn't fit on the current page, and it's a big big
-  % group, force a page break.
-  \ifdim \dimen0 > \dimen2
-    \ifdim \pagetotal < \vfilllimit\pageheight
-      \page
-    \fi
-  \fi
-  \box\groupbox
-  \prevdepth = \dimen1
-  \checkinserts
-}
-%
-% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
-% message, so this ends up printing `@group can only ...'.
-%
-\newhelp\groupinvalidhelp{%
-group can only be used in environments such as @example,^^J%
-where each line of input produces a line of output.}
-
-% @need space-in-mils
-% forces a page break if there is not space-in-mils remaining.
-
-\newdimen\mil  \mil=0.001in
-
-\parseargdef\need{%
-  % Ensure vertical mode, so we don't make a big box in the middle of a
-  % paragraph.
-  \par
-  %
-  % If the @need value is less than one line space, it's useless.
-  \dimen0 = #1\mil
-  \dimen2 = \ht\strutbox
-  \advance\dimen2 by \dp\strutbox
-  \ifdim\dimen0 > \dimen2
-    %
-    % Do a \strut just to make the height of this box be normal, so the
-    % normal leading is inserted relative to the preceding line.
-    % And a page break here is fine.
-    \vtop to #1\mil{\strut\vfil}%
-    %
-    % TeX does not even consider page breaks if a penalty added to the
-    % main vertical list is 10000 or more.  But in order to see if the
-    % empty box we just added fits on the page, we must make it consider
-    % page breaks.  On the other hand, we don't want to actually break the
-    % page after the empty box.  So we use a penalty of 9999.
-    %
-    % There is an extremely small chance that TeX will actually break the
-    % page at this \penalty, if there are no other feasible breakpoints in
-    % sight.  (If the user is using lots of big @group commands, which
-    % almost-but-not-quite fill up a page, TeX will have a hard time doing
-    % good page breaking, for example.)  However, I could not construct an
-    % example where a page broke at this \penalty; if it happens in a real
-    % document, then we can reconsider our strategy.
-    \penalty9999
-    %
-    % Back up by the size of the box, whether we did a page break or not.
-    \kern -#1\mil
-    %
-    % Do not allow a page break right after this kern.
-    \nobreak
-  \fi
-}
-
-% @br   forces paragraph break (and is undocumented).
-
-\let\br = \par
-
-% @page forces the start of a new page.
-%
-\def\page{\par\vfill\supereject}
-
-% @exdent text....
-% outputs text on separate line in roman font, starting at standard page margin
-
-% This records the amount of indent in the innermost environment.
-% That's how much \exdent should take out.
-\newskip\exdentamount
-
-% This defn is used inside fill environments such as @defun.
-\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
-
-% This defn is used inside nofill environments such as @example.
-\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
-  \leftline{\hskip\leftskip{\rm#1}}}}
-
-% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
-% paragraph.  For more general purposes, use the \margin insertion
-% class.  WHICH is `l' or `r'.  Not documented, written for gawk manual.
-%
-\newskip\inmarginspacing \inmarginspacing=1cm
-\def\strutdepth{\dp\strutbox}
-%
-\def\doinmargin#1#2{\strut\vadjust{%
-  \nobreak
-  \kern-\strutdepth
-  \vtop to \strutdepth{%
-    \baselineskip=\strutdepth
-    \vss
-    % if you have multiple lines of stuff to put here, you'll need to
-    % make the vbox yourself of the appropriate size.
-    \ifx#1l%
-      \llap{\ignorespaces #2\hskip\inmarginspacing}%
-    \else
-      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
-    \fi
-    \null
-  }%
-}}
-\def\inleftmargin{\doinmargin l}
-\def\inrightmargin{\doinmargin r}
-%
-% @inmargin{TEXT [, RIGHT-TEXT]}
-% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
-% else use TEXT for both).
-%
-\def\inmargin#1{\parseinmargin #1,,\finish}
-\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
-  \setbox0 = \hbox{\ignorespaces #2}%
-  \ifdim\wd0 > 0pt
-    \def\lefttext{#1}%  have both texts
-    \def\righttext{#2}%
-  \else
-    \def\lefttext{#1}%  have only one text
-    \def\righttext{#1}%
-  \fi
-  %
-  \ifodd\pageno
-    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
-  \else
-    \def\temp{\inleftmargin\lefttext}%
-  \fi
-  \temp
-}
-
-% @| inserts a changebar to the left of the current line.  It should
-% surround any changed text.  This approach does *not* work if the
-% change spans more than two lines of output.  To handle that, we would
-% have adopt a much more difficult approach (putting marks into the main
-% vertical list for the beginning and end of each change).  This command
-% is not documented, not supported, and doesn't work.
-%
-\def\|{%
-  % \vadjust can only be used in horizontal mode.
-  \leavevmode
-  %
-  % Append this vertical mode material after the current line in the output.
-  \vadjust{%
-    % We want to insert a rule with the height and depth of the current
-    % leading; that is exactly what \strutbox is supposed to record.
-    \vskip-\baselineskip
-    %
-    % \vadjust-items are inserted at the left edge of the type.  So
-    % the \llap here moves out into the left-hand margin.
-    \llap{%
-      %
-      % For a thicker or thinner bar, change the `1pt'.
-      \vrule height\baselineskip width1pt
-      %
-      % This is the space between the bar and the text.
-      \hskip 12pt
-    }%
-  }%
-}
-
-% @include FILE -- \input text of FILE.
-%
-\def\include{\parseargusing\filenamecatcodes\includezzz}
-\def\includezzz#1{%
-  \pushthisfilestack
-  \def\thisfile{#1}%
-  {%
-    \makevalueexpandable  % we want to expand any @value in FILE.
-    \turnoffactive        % and allow special characters in the expansion
-    \indexnofonts         % Allow `@@' and other weird things in file names.
-    \wlog{texinfo.tex: doing @include of #1^^J}%
-    \edef\temp{\noexpand\input #1 }%
-    %
-    % This trickery is to read FILE outside of a group, in case it makes
-    % definitions, etc.
-    \expandafter
-  }\temp
-  \popthisfilestack
-}
-\def\filenamecatcodes{%
-  \catcode`\\=\other
-  \catcode`~=\other
-  \catcode`^=\other
-  \catcode`_=\other
-  \catcode`|=\other
-  \catcode`<=\other
-  \catcode`>=\other
-  \catcode`+=\other
-  \catcode`-=\other
-  \catcode`\`=\other
-  \catcode`\'=\other
-}
-
-\def\pushthisfilestack{%
-  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
-}
-\def\pushthisfilestackX{%
-  \expandafter\pushthisfilestackY\thisfile\StackTerm
-}
-\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
-  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
-}
-
-\def\popthisfilestack{\errthisfilestackempty}
-\def\errthisfilestackempty{\errmessage{Internal error:
-  the stack of filenames is empty.}}
-%
-\def\thisfile{}
-
-% @center line
-% outputs that line, centered.
-%
-\parseargdef\center{%
-  \ifhmode
-    \let\centersub\centerH
-  \else
-    \let\centersub\centerV
-  \fi
-  \centersub{\hfil \ignorespaces#1\unskip \hfil}%
-  \let\centersub\relax % don't let the definition persist, just in case
-}
-\def\centerH#1{{%
-  \hfil\break
-  \advance\hsize by -\leftskip
-  \advance\hsize by -\rightskip
-  \line{#1}%
-  \break
-}}
-%
-\newcount\centerpenalty
-\def\centerV#1{%
-  % The idea here is the same as in \startdefun, \cartouche, etc.: if
-  % @center is the first thing after a section heading, we need to wipe
-  % out the negative parskip inserted by \sectionheading, but still
-  % prevent a page break here.
-  \centerpenalty = \lastpenalty
-  \ifnum\centerpenalty>10000 \vskip\parskip \fi
-  \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
-  \line{\kern\leftskip #1\kern\rightskip}%
-}
-
-% @sp n   outputs n lines of vertical space
-%
-\parseargdef\sp{\vskip #1\baselineskip}
-
-% @comment ...line which is ignored...
-% @c is the same as @comment
-% @ignore ... @end ignore  is another way to write a comment
-%
-\def\comment{\begingroup \catcode`\^^M=\other%
-\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
-\commentxxx}
-{\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}}
-%
-\let\c=\comment
-
-% @paragraphindent NCHARS
-% We'll use ems for NCHARS, close enough.
-% NCHARS can also be the word `asis' or `none'.
-% We cannot feasibly implement @paragraphindent asis, though.
-%
-\def\asisword{asis} % no translation, these are keywords
-\def\noneword{none}
-%
-\parseargdef\paragraphindent{%
-  \def\temp{#1}%
-  \ifx\temp\asisword
-  \else
-    \ifx\temp\noneword
-      \defaultparindent = 0pt
-    \else
-      \defaultparindent = #1em
-    \fi
-  \fi
-  \parindent = \defaultparindent
-}
-
-% @exampleindent NCHARS
-% We'll use ems for NCHARS like @paragraphindent.
-% It seems @exampleindent asis isn't necessary, but
-% I preserve it to make it similar to @paragraphindent.
-\parseargdef\exampleindent{%
-  \def\temp{#1}%
-  \ifx\temp\asisword
-  \else
-    \ifx\temp\noneword
-      \lispnarrowing = 0pt
-    \else
-      \lispnarrowing = #1em
-    \fi
-  \fi
-}
-
-% @firstparagraphindent WORD
-% If WORD is `none', then suppress indentation of the first paragraph
-% after a section heading.  If WORD is `insert', then do indent at such
-% paragraphs.
-%
-% The paragraph indentation is suppressed or not by calling
-% \suppressfirstparagraphindent, which the sectioning commands do.
-% We switch the definition of this back and forth according to WORD.
-% By default, we suppress indentation.
-%
-\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
-\def\insertword{insert}
-%
-\parseargdef\firstparagraphindent{%
-  \def\temp{#1}%
-  \ifx\temp\noneword
-    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
-  \else\ifx\temp\insertword
-    \let\suppressfirstparagraphindent = \relax
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @firstparagraphindent option `\temp'}%
-  \fi\fi
-}
-
-% Here is how we actually suppress indentation.  Redefine \everypar to
-% \kern backwards by \parindent, and then reset itself to empty.
-%
-% We also make \indent itself not actually do anything until the next
-% paragraph.
-%
-\gdef\dosuppressfirstparagraphindent{%
-  \gdef\indent{%
-    \restorefirstparagraphindent
-    \indent
-  }%
-  \gdef\noindent{%
-    \restorefirstparagraphindent
-    \noindent
-  }%
-  \global\everypar = {%
-    \kern -\parindent
-    \restorefirstparagraphindent
-  }%
-}
-
-\gdef\restorefirstparagraphindent{%
-  \global \let \indent = \ptexindent
-  \global \let \noindent = \ptexnoindent
-  \global \everypar = {}%
-}
-
-
-% @refill is a no-op.
-\let\refill=\relax
-
-% If working on a large document in chapters, it is convenient to
-% be able to disable indexing, cross-referencing, and contents, for test runs.
-% This is done with @novalidate (before @setfilename).
-%
-\newif\iflinks \linkstrue % by default we want the aux files.
-\let\novalidate = \linksfalse
-
-% @setfilename is done at the beginning of every texinfo file.
-% So open here the files we need to have open while reading the input.
-% This makes it possible to make a .fmt file for texinfo.
-\def\setfilename{%
-   \fixbackslash  % Turn off hack to swallow `\input texinfo'.
-   \iflinks
-     \tryauxfile
-     % Open the new aux file.  TeX will close it automatically at exit.
-     \immediate\openout\auxfile=\jobname.aux
-   \fi % \openindices needs to do some work in any case.
-   \openindices
-   \let\setfilename=\comment % Ignore extra @setfilename cmds.
-   %
-   % If texinfo.cnf is present on the system, read it.
-   % Useful for site-wide @afourpaper, etc.
-   \openin 1 texinfo.cnf
-   \ifeof 1 \else \input texinfo.cnf \fi
-   \closein 1
-   %
-   \comment % Ignore the actual filename.
-}
-
-% Called from \setfilename.
-%
-\def\openindices{%
-  \newindex{cp}%
-  \newcodeindex{fn}%
-  \newcodeindex{vr}%
-  \newcodeindex{tp}%
-  \newcodeindex{ky}%
-  \newcodeindex{pg}%
-}
-
-% @bye.
-\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
-
-
-\message{pdf,}
-% adobe `portable' document format
-\newcount\tempnum
-\newcount\lnkcount
-\newtoks\filename
-\newcount\filenamelength
-\newcount\pgn
-\newtoks\toksA
-\newtoks\toksB
-\newtoks\toksC
-\newtoks\toksD
-\newbox\boxA
-\newcount\countA
-\newif\ifpdf
-\newif\ifpdfmakepagedest
-
-% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
-% can be set).  So we test for \relax and 0 as well as being undefined.
-\ifx\pdfoutput\thisisundefined
-\else
-  \ifx\pdfoutput\relax
-  \else
-    \ifcase\pdfoutput
-    \else
-      \pdftrue
-    \fi
-  \fi
-\fi
-
-% PDF uses PostScript string constants for the names of xref targets,
-% for display in the outlines, and in other places.  Thus, we have to
-% double any backslashes.  Otherwise, a name like "\node" will be
-% interpreted as a newline (\n), followed by o, d, e.  Not good.
-% 
-% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
-% related messages.  The final outcome is that it is up to the TeX user
-% to double the backslashes and otherwise make the string valid, so
-% that's what we do.  pdftex 1.30.0 (ca.2005) introduced a primitive to
-% do this reliably, so we use it.
-
-% #1 is a control sequence in which to do the replacements,
-% which we \xdef.
-\def\txiescapepdf#1{%
-  \ifx\pdfescapestring\thisisundefined
-    % No primitive available; should we give a warning or log?
-    % Many times it won't matter.
-  \else
-    % The expandable \pdfescapestring primitive escapes parentheses,
-    % backslashes, and other special chars.
-    \xdef#1{\pdfescapestring{#1}}%
-  \fi
-}
-
-\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
-with PDF output, and none of those formats could be found.  (.eps cannot
-be supported due to the design of the PDF format; use regular TeX (DVI
-output) for that.)}
-
-\ifpdf
-  %
-  % Color manipulation macros using ideas from pdfcolor.tex,
-  % except using rgb instead of cmyk; the latter is said to render as a
-  % very dark gray on-screen and a very dark halftone in print, instead
-  % of actual black. The dark red here is dark enough to print on paper as
-  % nearly black, but still distinguishable for online viewing.  We use
-  % black by default, though.
-  \def\rgbDarkRed{0.50 0.09 0.12}
-  \def\rgbBlack{0 0 0}
-  %
-  % k sets the color for filling (usual text, etc.);
-  % K sets the color for stroking (thin rules, e.g., normal _'s).
-  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
-  %
-  % Set color, and create a mark which defines \thiscolor accordingly,
-  % so that \makeheadline knows which color to restore.
-  \def\setcolor#1{%
-    \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}%
-    \domark
-    \pdfsetcolor{#1}%
-  }
-  %
-  \def\maincolor{\rgbBlack}
-  \pdfsetcolor{\maincolor}
-  \edef\thiscolor{\maincolor}
-  \def\lastcolordefs{}
-  %
-  \def\makefootline{%
-    \baselineskip24pt
-    \line{\pdfsetcolor{\maincolor}\the\footline}%
-  }
-  %
-  \def\makeheadline{%
-    \vbox to 0pt{%
-      \vskip-22.5pt
-      \line{%
-        \vbox to8.5pt{}%
-        % Extract \thiscolor definition from the marks.
-        \getcolormarks
-        % Typeset the headline with \maincolor, then restore the color.
-        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
-      }%
-      \vss
-    }%
-    \nointerlineskip
-  }
-  %
-  %
-  \pdfcatalog{/PageMode /UseOutlines}
-  %
-  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
-  \def\dopdfimage#1#2#3{%
-    \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
-    \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
-    %
-    % pdftex (and the PDF format) support .pdf, .png, .jpg (among
-    % others).  Let's try in that order, PDF first since if
-    % someone has a scalable image, presumably better to use that than a
-    % bitmap.
-    \let\pdfimgext=\empty
-    \begingroup
-      \openin 1 #1.pdf \ifeof 1
-        \openin 1 #1.PDF \ifeof 1
-          \openin 1 #1.png \ifeof 1
-            \openin 1 #1.jpg \ifeof 1
-              \openin 1 #1.jpeg \ifeof 1
-                \openin 1 #1.JPG \ifeof 1
-                  \errhelp = \nopdfimagehelp
-                  \errmessage{Could not find image file #1 for pdf}%
-                \else \gdef\pdfimgext{JPG}%
-                \fi
-              \else \gdef\pdfimgext{jpeg}%
-              \fi
-            \else \gdef\pdfimgext{jpg}%
-            \fi
-          \else \gdef\pdfimgext{png}%
-          \fi
-        \else \gdef\pdfimgext{PDF}%
-        \fi
-      \else \gdef\pdfimgext{pdf}%
-      \fi
-      \closein 1
-    \endgroup
-    %
-    % without \immediate, ancient pdftex seg faults when the same image is
-    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
-    \ifnum\pdftexversion < 14
-      \immediate\pdfimage
-    \else
-      \immediate\pdfximage
-    \fi
-      \ifdim \wd0 >0pt width \pdfimagewidth \fi
-      \ifdim \wd2 >0pt height \pdfimageheight \fi
-      \ifnum\pdftexversion<13
-         #1.\pdfimgext
-       \else
-         {#1.\pdfimgext}%
-       \fi
-    \ifnum\pdftexversion < 14 \else
-      \pdfrefximage \pdflastximage
-    \fi}
-  %
-  \def\pdfmkdest#1{{%
-    % We have to set dummies so commands such as @code, and characters
-    % such as \, aren't expanded when present in a section title.
-    \indexnofonts
-    \turnoffactive
-    \makevalueexpandable
-    \def\pdfdestname{#1}%
-    \txiescapepdf\pdfdestname
-    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
-  }}
-  %
-  % used to mark target names; must be expandable.
-  \def\pdfmkpgn#1{#1}
-  %
-  % by default, use black for everything.
-  \def\urlcolor{\rgbBlack}
-  \def\linkcolor{\rgbBlack}
-  \def\endlink{\setcolor{\maincolor}\pdfendlink}
-  %
-  % Adding outlines to PDF; macros for calculating structure of outlines
-  % come from Petr Olsak
-  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
-    \else \csname#1\endcsname \fi}
-  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
-    \advance\tempnum by 1
-    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
-  %
-  % #1 is the section text, which is what will be displayed in the
-  % outline by the pdf viewer.  #2 is the pdf expression for the number
-  % of subentries (or empty, for subsubsections).  #3 is the node text,
-  % which might be empty if this toc entry had no corresponding node.
-  % #4 is the page number
-  %
-  \def\dopdfoutline#1#2#3#4{%
-    % Generate a link to the node text if that exists; else, use the
-    % page number.  We could generate a destination for the section
-    % text in the case where a section has no node, but it doesn't
-    % seem worth the trouble, since most documents are normally structured.
-    \edef\pdfoutlinedest{#3}%
-    \ifx\pdfoutlinedest\empty
-      \def\pdfoutlinedest{#4}%
-    \else
-      \txiescapepdf\pdfoutlinedest
-    \fi
-    %
-    % Also escape PDF chars in the display string.
-    \edef\pdfoutlinetext{#1}%
-    \txiescapepdf\pdfoutlinetext
-    %
-    \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}%
-  }
-  %
-  \def\pdfmakeoutlines{%
-    \begingroup
-      % Read toc silently, to get counts of subentries for \pdfoutline.
-      \def\partentry##1##2##3##4{}% ignore parts in the outlines
-      \def\numchapentry##1##2##3##4{%
-       \def\thischapnum{##2}%
-       \def\thissecnum{0}%
-       \def\thissubsecnum{0}%
-      }%
-      \def\numsecentry##1##2##3##4{%
-       \advancenumber{chap\thischapnum}%
-       \def\thissecnum{##2}%
-       \def\thissubsecnum{0}%
-      }%
-      \def\numsubsecentry##1##2##3##4{%
-       \advancenumber{sec\thissecnum}%
-       \def\thissubsecnum{##2}%
-      }%
-      \def\numsubsubsecentry##1##2##3##4{%
-       \advancenumber{subsec\thissubsecnum}%
-      }%
-      \def\thischapnum{0}%
-      \def\thissecnum{0}%
-      \def\thissubsecnum{0}%
-      %
-      % use \def rather than \let here because we redefine \chapentry et
-      % al. a second time, below.
-      \def\appentry{\numchapentry}%
-      \def\appsecentry{\numsecentry}%
-      \def\appsubsecentry{\numsubsecentry}%
-      \def\appsubsubsecentry{\numsubsubsecentry}%
-      \def\unnchapentry{\numchapentry}%
-      \def\unnsecentry{\numsecentry}%
-      \def\unnsubsecentry{\numsubsecentry}%
-      \def\unnsubsubsecentry{\numsubsubsecentry}%
-      \readdatafile{toc}%
-      %
-      % Read toc second time, this time actually producing the outlines.
-      % The `-' means take the \expnumber as the absolute number of
-      % subentries, which we calculated on our first read of the .toc above.
-      %
-      % We use the node names as the destinations.
-      \def\numchapentry##1##2##3##4{%
-        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
-      \def\numsecentry##1##2##3##4{%
-        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
-      \def\numsubsecentry##1##2##3##4{%
-        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
-      \def\numsubsubsecentry##1##2##3##4{% count is always zero
-        \dopdfoutline{##1}{}{##3}{##4}}%
-      %
-      % PDF outlines are displayed using system fonts, instead of
-      % document fonts.  Therefore we cannot use special characters,
-      % since the encoding is unknown.  For example, the eogonek from
-      % Latin 2 (0xea) gets translated to a | character.  Info from
-      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
-      %
-      % TODO this right, we have to translate 8-bit characters to
-      % their "best" equivalent, based on the @documentencoding.  Too
-      % much work for too little return.  Just use the ASCII equivalents
-      % we use for the index sort strings.
-      % 
-      \indexnofonts
-      \setupdatafile
-      % We can have normal brace characters in the PDF outlines, unlike
-      % Texinfo index files.  So set that up.
-      \def\{{\lbracecharliteral}%
-      \def\}{\rbracecharliteral}%
-      \catcode`\\=\active \otherbackslash
-      \input \tocreadfilename
-    \endgroup
-  }
-  {\catcode`[=1 \catcode`]=2
-   \catcode`{=\other \catcode`}=\other
-   \gdef\lbracecharliteral[{]%
-   \gdef\rbracecharliteral[}]%
-  ]
-  %
-  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
-    \ifx\PP\D\let\nextsp\relax
-    \else\let\nextsp\skipspaces
-      \addtokens{\filename}{\PP}%
-      \advance\filenamelength by 1
-    \fi
-    \nextsp}
-  \def\getfilename#1{%
-    \filenamelength=0
-    % If we don't expand the argument now, \skipspaces will get
-    % snagged on things like "@value{foo}".
-    \edef\temp{#1}%
-    \expandafter\skipspaces\temp|\relax
-  }
-  \ifnum\pdftexversion < 14
-    \let \startlink \pdfannotlink
-  \else
-    \let \startlink \pdfstartlink
-  \fi
-  % make a live url in pdf output.
-  \def\pdfurl#1{%
-    \begingroup
-      % it seems we really need yet another set of dummies; have not
-      % tried to figure out what each command should do in the context
-      % of @url.  for now, just make @/ a no-op, that's the only one
-      % people have actually reported a problem with.
-      %
-      \normalturnoffactive
-      \def\@{@}%
-      \let\/=\empty
-      \makevalueexpandable
-      % do we want to go so far as to use \indexnofonts instead of just
-      % special-casing \var here?
-      \def\var##1{##1}%
-      %
-      \leavevmode\setcolor{\urlcolor}%
-      \startlink attr{/Border [0 0 0]}%
-        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
-    \endgroup}
-  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
-  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
-  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
-  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
-  \def\maketoks{%
-    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
-    \ifx\first0\adn0
-    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
-    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
-    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
-    \else
-      \ifnum0=\countA\else\makelink\fi
-      \ifx\first.\let\next=\done\else
-        \let\next=\maketoks
-        \addtokens{\toksB}{\the\toksD}
-        \ifx\first,\addtokens{\toksB}{\space}\fi
-      \fi
-    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-    \next}
-  \def\makelink{\addtokens{\toksB}%
-    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
-  \def\pdflink#1{%
-    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
-    \setcolor{\linkcolor}#1\endlink}
-  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
-\else
-  % non-pdf mode
-  \let\pdfmkdest = \gobble
-  \let\pdfurl = \gobble
-  \let\endlink = \relax
-  \let\setcolor = \gobble
-  \let\pdfsetcolor = \gobble
-  \let\pdfmakeoutlines = \relax
-\fi  % \ifx\pdfoutput
-
-
-\message{fonts,}
-
-% Change the current font style to #1, remembering it in \curfontstyle.
-% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
-% italics, not bold italics.
-%
-\def\setfontstyle#1{%
-  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
-  \csname ten#1\endcsname  % change the current font
-}
-
-% Select #1 fonts with the current style.
-%
-\def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname}
-
-\def\rm{\fam=0 \setfontstyle{rm}}
-\def\it{\fam=\itfam \setfontstyle{it}}
-\def\sl{\fam=\slfam \setfontstyle{sl}}
-\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
-\def\tt{\fam=\ttfam \setfontstyle{tt}}
-
-% Unfortunately, we have to override this for titles and the like, since
-% in those cases "rm" is bold.  Sigh.
-\def\rmisbold{\rm\def\curfontstyle{bf}}
-
-% Texinfo sort of supports the sans serif font style, which plain TeX does not.
-% So we set up a \sf.
-\newfam\sffam
-\def\sf{\fam=\sffam \setfontstyle{sf}}
-\let\li = \sf % Sometimes we call it \li, not \sf.
-
-% We don't need math for this font style.
-\def\ttsl{\setfontstyle{ttsl}}
-
-
-% Set the baselineskip to #1, and the lineskip and strut size
-% correspondingly.  There is no deep meaning behind these magic numbers
-% used as factors; they just match (closely enough) what Knuth defined.
-%
-\def\lineskipfactor{.08333}
-\def\strutheightpercent{.70833}
-\def\strutdepthpercent {.29167}
-%
-% can get a sort of poor man's double spacing by redefining this.
-\def\baselinefactor{1}
-%
-\newdimen\textleading
-\def\setleading#1{%
-  \dimen0 = #1\relax
-  \normalbaselineskip = \baselinefactor\dimen0
-  \normallineskip = \lineskipfactor\normalbaselineskip
-  \normalbaselines
-  \setbox\strutbox =\hbox{%
-    \vrule width0pt height\strutheightpercent\baselineskip
-                    depth \strutdepthpercent \baselineskip
-  }%
-}
-
-% PDF CMaps.  See also LaTeX's t1.cmap.
-%
-% do nothing with this by default.
-\expandafter\let\csname cmapOT1\endcsname\gobble
-\expandafter\let\csname cmapOT1IT\endcsname\gobble
-\expandafter\let\csname cmapOT1TT\endcsname\gobble
-
-% if we are producing pdf, and we have \pdffontattr, then define cmaps.
-% (\pdffontattr was introduced many years ago, but people still run
-% older pdftex's; it's easy to conditionalize, so we do.)
-\ifpdf \ifx\pdffontattr\thisisundefined \else
-  \begingroup
-    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-OT1-0)
-%%Title: (TeX-OT1-0 TeX OT1 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (OT1)
-/Supplement 0
->> def
-/CMapName /TeX-OT1-0 def
-/CMapType 2 def
-1 begincodespacerange
-<00> <7F>
-endcodespacerange
-8 beginbfrange
-<00> <01> <0393>
-<09> <0A> <03A8>
-<23> <26> <0023>
-<28> <3B> <0028>
-<3F> <5B> <003F>
-<5D> <5E> <005D>
-<61> <7A> <0061>
-<7B> <7C> <2013>
-endbfrange
-40 beginbfchar
-<02> <0398>
-<03> <039B>
-<04> <039E>
-<05> <03A0>
-<06> <03A3>
-<07> <03D2>
-<08> <03A6>
-<0B> <00660066>
-<0C> <00660069>
-<0D> <0066006C>
-<0E> <006600660069>
-<0F> <00660066006C>
-<10> <0131>
-<11> <0237>
-<12> <0060>
-<13> <00B4>
-<14> <02C7>
-<15> <02D8>
-<16> <00AF>
-<17> <02DA>
-<18> <00B8>
-<19> <00DF>
-<1A> <00E6>
-<1B> <0153>
-<1C> <00F8>
-<1D> <00C6>
-<1E> <0152>
-<1F> <00D8>
-<21> <0021>
-<22> <201D>
-<27> <2019>
-<3C> <00A1>
-<3D> <003D>
-<3E> <00BF>
-<5C> <201C>
-<5F> <02D9>
-<60> <2018>
-<7D> <02DD>
-<7E> <007E>
-<7F> <00A8>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-    }\endgroup
-  \expandafter\edef\csname cmapOT1\endcsname#1{%
-    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
-  }%
-%
-% \cmapOT1IT
-  \begingroup
-    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-OT1IT-0)
-%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (OT1IT)
-/Supplement 0
->> def
-/CMapName /TeX-OT1IT-0 def
-/CMapType 2 def
-1 begincodespacerange
-<00> <7F>
-endcodespacerange
-8 beginbfrange
-<00> <01> <0393>
-<09> <0A> <03A8>
-<25> <26> <0025>
-<28> <3B> <0028>
-<3F> <5B> <003F>
-<5D> <5E> <005D>
-<61> <7A> <0061>
-<7B> <7C> <2013>
-endbfrange
-42 beginbfchar
-<02> <0398>
-<03> <039B>
-<04> <039E>
-<05> <03A0>
-<06> <03A3>
-<07> <03D2>
-<08> <03A6>
-<0B> <00660066>
-<0C> <00660069>
-<0D> <0066006C>
-<0E> <006600660069>
-<0F> <00660066006C>
-<10> <0131>
-<11> <0237>
-<12> <0060>
-<13> <00B4>
-<14> <02C7>
-<15> <02D8>
-<16> <00AF>
-<17> <02DA>
-<18> <00B8>
-<19> <00DF>
-<1A> <00E6>
-<1B> <0153>
-<1C> <00F8>
-<1D> <00C6>
-<1E> <0152>
-<1F> <00D8>
-<21> <0021>
-<22> <201D>
-<23> <0023>
-<24> <00A3>
-<27> <2019>
-<3C> <00A1>
-<3D> <003D>
-<3E> <00BF>
-<5C> <201C>
-<5F> <02D9>
-<60> <2018>
-<7D> <02DD>
-<7E> <007E>
-<7F> <00A8>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-    }\endgroup
-  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
-    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
-  }%
-%
-% \cmapOT1TT
-  \begingroup
-    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
-    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
-%%DocumentNeededResources: ProcSet (CIDInit)
-%%IncludeResource: ProcSet (CIDInit)
-%%BeginResource: CMap (TeX-OT1TT-0)
-%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
-%%Version: 1.000
-%%EndComments
-/CIDInit /ProcSet findresource begin
-12 dict begin
-begincmap
-/CIDSystemInfo
-<< /Registry (TeX)
-/Ordering (OT1TT)
-/Supplement 0
->> def
-/CMapName /TeX-OT1TT-0 def
-/CMapType 2 def
-1 begincodespacerange
-<00> <7F>
-endcodespacerange
-5 beginbfrange
-<00> <01> <0393>
-<09> <0A> <03A8>
-<21> <26> <0021>
-<28> <5F> <0028>
-<61> <7E> <0061>
-endbfrange
-32 beginbfchar
-<02> <0398>
-<03> <039B>
-<04> <039E>
-<05> <03A0>
-<06> <03A3>
-<07> <03D2>
-<08> <03A6>
-<0B> <2191>
-<0C> <2193>
-<0D> <0027>
-<0E> <00A1>
-<0F> <00BF>
-<10> <0131>
-<11> <0237>
-<12> <0060>
-<13> <00B4>
-<14> <02C7>
-<15> <02D8>
-<16> <00AF>
-<17> <02DA>
-<18> <00B8>
-<19> <00DF>
-<1A> <00E6>
-<1B> <0153>
-<1C> <00F8>
-<1D> <00C6>
-<1E> <0152>
-<1F> <00D8>
-<20> <2423>
-<27> <2019>
-<60> <2018>
-<7F> <00A8>
-endbfchar
-endcmap
-CMapName currentdict /CMap defineresource pop
-end
-end
-%%EndResource
-%%EOF
-    }\endgroup
-  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
-    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
-  }%
-\fi\fi
-
-
-% Set the font macro #1 to the font named \fontprefix#2.
-% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
-% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
-% Example:
-% #1 = \textrm
-% #2 = \rmshape
-% #3 = 10
-% #4 = \mainmagstep
-% #5 = OT1
-%
-\def\setfont#1#2#3#4#5{%
-  \font#1=\fontprefix#2#3 scaled #4
-  \csname cmap#5\endcsname#1%
-}
-% This is what gets called when #5 of \setfont is empty.
-\let\cmap\gobble
-%
-% (end of cmaps)
-
-% Use cm as the default font prefix.
-% To specify the font prefix, you must define \fontprefix
-% before you read in texinfo.tex.
-\ifx\fontprefix\thisisundefined
-\def\fontprefix{cm}
-\fi
-% Support font families that don't use the same naming scheme as CM.
-\def\rmshape{r}
-\def\rmbshape{bx}               % where the normal face is bold
-\def\bfshape{b}
-\def\bxshape{bx}
-\def\ttshape{tt}
-\def\ttbshape{tt}
-\def\ttslshape{sltt}
-\def\itshape{ti}
-\def\itbshape{bxti}
-\def\slshape{sl}
-\def\slbshape{bxsl}
-\def\sfshape{ss}
-\def\sfbshape{ss}
-\def\scshape{csc}
-\def\scbshape{csc}
-
-% Definitions for a main text size of 11pt.  (The default in Texinfo.)
-%
-\def\definetextfontsizexi{%
-% Text fonts (11.2pt, magstep1).
-\def\textnominalsize{11pt}
-\edef\mainmagstep{\magstephalf}
-\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
-\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
-\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
-\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
-\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
-\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
-\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
-\font\texti=cmmi10 scaled \mainmagstep
-\font\textsy=cmsy10 scaled \mainmagstep
-\def\textecsize{1095}
-
-% A few fonts for @defun names and args.
-\setfont\defbf\bfshape{10}{\magstep1}{OT1}
-\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
-\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
-
-% Fonts for indices, footnotes, small examples (9pt).
-\def\smallnominalsize{9pt}
-\setfont\smallrm\rmshape{9}{1000}{OT1}
-\setfont\smalltt\ttshape{9}{1000}{OT1TT}
-\setfont\smallbf\bfshape{10}{900}{OT1}
-\setfont\smallit\itshape{9}{1000}{OT1IT}
-\setfont\smallsl\slshape{9}{1000}{OT1}
-\setfont\smallsf\sfshape{9}{1000}{OT1}
-\setfont\smallsc\scshape{10}{900}{OT1}
-\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
-\font\smalli=cmmi9
-\font\smallsy=cmsy9
-\def\smallecsize{0900}
-
-% Fonts for small examples (8pt).
-\def\smallernominalsize{8pt}
-\setfont\smallerrm\rmshape{8}{1000}{OT1}
-\setfont\smallertt\ttshape{8}{1000}{OT1TT}
-\setfont\smallerbf\bfshape{10}{800}{OT1}
-\setfont\smallerit\itshape{8}{1000}{OT1IT}
-\setfont\smallersl\slshape{8}{1000}{OT1}
-\setfont\smallersf\sfshape{8}{1000}{OT1}
-\setfont\smallersc\scshape{10}{800}{OT1}
-\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
-\font\smalleri=cmmi8
-\font\smallersy=cmsy8
-\def\smallerecsize{0800}
-
-% Fonts for title page (20.4pt):
-\def\titlenominalsize{20pt}
-\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
-\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
-\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
-\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
-\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
-\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
-\let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
-\font\titlei=cmmi12 scaled \magstep3
-\font\titlesy=cmsy10 scaled \magstep4
-\def\titleecsize{2074}
-
-% Chapter (and unnumbered) fonts (17.28pt).
-\def\chapnominalsize{17pt}
-\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
-\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
-\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
-\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
-\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
-\setfont\chapsf\sfbshape{17}{1000}{OT1}
-\let\chapbf=\chaprm
-\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
-\font\chapi=cmmi12 scaled \magstep2
-\font\chapsy=cmsy10 scaled \magstep3
-\def\chapecsize{1728}
-
-% Section fonts (14.4pt).
-\def\secnominalsize{14pt}
-\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
-\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
-\setfont\secsl\slbshape{10}{\magstep2}{OT1}
-\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
-\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
-\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
-\let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep2}{OT1}
-\font\seci=cmmi12 scaled \magstep1
-\font\secsy=cmsy10 scaled \magstep2
-\def\sececsize{1440}
-
-% Subsection fonts (13.15pt).
-\def\ssecnominalsize{13pt}
-\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
-\setfont\ssecit\itbshape{10}{1315}{OT1IT}
-\setfont\ssecsl\slbshape{10}{1315}{OT1}
-\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
-\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
-\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
-\let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{1315}{OT1}
-\font\sseci=cmmi12 scaled \magstephalf
-\font\ssecsy=cmsy10 scaled 1315
-\def\ssececsize{1200}
-
-% Reduced fonts for @acro in text (10pt).
-\def\reducednominalsize{10pt}
-\setfont\reducedrm\rmshape{10}{1000}{OT1}
-\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
-\setfont\reducedbf\bfshape{10}{1000}{OT1}
-\setfont\reducedit\itshape{10}{1000}{OT1IT}
-\setfont\reducedsl\slshape{10}{1000}{OT1}
-\setfont\reducedsf\sfshape{10}{1000}{OT1}
-\setfont\reducedsc\scshape{10}{1000}{OT1}
-\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
-\font\reducedi=cmmi10
-\font\reducedsy=cmsy10
-\def\reducedecsize{1000}
-
-\textleading = 13.2pt % line spacing for 11pt CM
-\textfonts            % reset the current fonts
-\rm
-} % end of 11pt text font size definitions, \definetextfontsizexi
-
-
-% Definitions to make the main text be 10pt Computer Modern, with
-% section, chapter, etc., sizes following suit.  This is for the GNU
-% Press printing of the Emacs 22 manual.  Maybe other manuals in the
-% future.  Used with @smallbook, which sets the leading to 12pt.
-%
-\def\definetextfontsizex{%
-% Text fonts (10pt).
-\def\textnominalsize{10pt}
-\edef\mainmagstep{1000}
-\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
-\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
-\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
-\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
-\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
-\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
-\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
-\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
-\font\texti=cmmi10 scaled \mainmagstep
-\font\textsy=cmsy10 scaled \mainmagstep
-\def\textecsize{1000}
-
-% A few fonts for @defun names and args.
-\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
-\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
-\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
-\def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf}
-
-% Fonts for indices, footnotes, small examples (9pt).
-\def\smallnominalsize{9pt}
-\setfont\smallrm\rmshape{9}{1000}{OT1}
-\setfont\smalltt\ttshape{9}{1000}{OT1TT}
-\setfont\smallbf\bfshape{10}{900}{OT1}
-\setfont\smallit\itshape{9}{1000}{OT1IT}
-\setfont\smallsl\slshape{9}{1000}{OT1}
-\setfont\smallsf\sfshape{9}{1000}{OT1}
-\setfont\smallsc\scshape{10}{900}{OT1}
-\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
-\font\smalli=cmmi9
-\font\smallsy=cmsy9
-\def\smallecsize{0900}
-
-% Fonts for small examples (8pt).
-\def\smallernominalsize{8pt}
-\setfont\smallerrm\rmshape{8}{1000}{OT1}
-\setfont\smallertt\ttshape{8}{1000}{OT1TT}
-\setfont\smallerbf\bfshape{10}{800}{OT1}
-\setfont\smallerit\itshape{8}{1000}{OT1IT}
-\setfont\smallersl\slshape{8}{1000}{OT1}
-\setfont\smallersf\sfshape{8}{1000}{OT1}
-\setfont\smallersc\scshape{10}{800}{OT1}
-\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
-\font\smalleri=cmmi8
-\font\smallersy=cmsy8
-\def\smallerecsize{0800}
-
-% Fonts for title page (20.4pt):
-\def\titlenominalsize{20pt}
-\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
-\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
-\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
-\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
-\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
-\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
-\let\titlebf=\titlerm
-\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
-\font\titlei=cmmi12 scaled \magstep3
-\font\titlesy=cmsy10 scaled \magstep4
-\def\titleecsize{2074}
-
-% Chapter fonts (14.4pt).
-\def\chapnominalsize{14pt}
-\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
-\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
-\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
-\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
-\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
-\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
-\let\chapbf\chaprm
-\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
-\font\chapi=cmmi12 scaled \magstep1
-\font\chapsy=cmsy10 scaled \magstep2
-\def\chapecsize{1440}
-
-% Section fonts (12pt).
-\def\secnominalsize{12pt}
-\setfont\secrm\rmbshape{12}{1000}{OT1}
-\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
-\setfont\secsl\slbshape{10}{\magstep1}{OT1}
-\setfont\sectt\ttbshape{12}{1000}{OT1TT}
-\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
-\setfont\secsf\sfbshape{12}{1000}{OT1}
-\let\secbf\secrm
-\setfont\secsc\scbshape{10}{\magstep1}{OT1}
-\font\seci=cmmi12
-\font\secsy=cmsy10 scaled \magstep1
-\def\sececsize{1200}
-
-% Subsection fonts (10pt).
-\def\ssecnominalsize{10pt}
-\setfont\ssecrm\rmbshape{10}{1000}{OT1}
-\setfont\ssecit\itbshape{10}{1000}{OT1IT}
-\setfont\ssecsl\slbshape{10}{1000}{OT1}
-\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
-\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
-\setfont\ssecsf\sfbshape{10}{1000}{OT1}
-\let\ssecbf\ssecrm
-\setfont\ssecsc\scbshape{10}{1000}{OT1}
-\font\sseci=cmmi10
-\font\ssecsy=cmsy10
-\def\ssececsize{1000}
-
-% Reduced fonts for @acro in text (9pt).
-\def\reducednominalsize{9pt}
-\setfont\reducedrm\rmshape{9}{1000}{OT1}
-\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
-\setfont\reducedbf\bfshape{10}{900}{OT1}
-\setfont\reducedit\itshape{9}{1000}{OT1IT}
-\setfont\reducedsl\slshape{9}{1000}{OT1}
-\setfont\reducedsf\sfshape{9}{1000}{OT1}
-\setfont\reducedsc\scshape{10}{900}{OT1}
-\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
-\font\reducedi=cmmi9
-\font\reducedsy=cmsy9
-\def\reducedecsize{0900}
-
-\divide\parskip by 2  % reduce space between paragraphs
-\textleading = 12pt   % line spacing for 10pt CM
-\textfonts            % reset the current fonts
-\rm
-} % end of 10pt text font size definitions, \definetextfontsizex
-
-
-% We provide the user-level command
-%   @fonttextsize 10
-% (or 11) to redefine the text font size.  pt is assumed.
-%
-\def\xiword{11}
-\def\xword{10}
-\def\xwordpt{10pt}
-%
-\parseargdef\fonttextsize{%
-  \def\textsizearg{#1}%
-  %\wlog{doing @fonttextsize \textsizearg}%
-  %
-  % Set \globaldefs so that documents can use this inside @tex, since
-  % makeinfo 4.8 does not support it, but we need it nonetheless.
-  %
- \begingroup \globaldefs=1
-  \ifx\textsizearg\xword \definetextfontsizex
-  \else \ifx\textsizearg\xiword \definetextfontsizexi
-  \else
-    \errhelp=\EMsimple
-    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
-  \fi\fi
- \endgroup
-}
-
-
-% In order for the font changes to affect most math symbols and letters,
-% we have to define the \textfont of the standard families.  Since
-% texinfo doesn't allow for producing subscripts and superscripts except
-% in the main text, we don't bother to reset \scriptfont and
-% \scriptscriptfont (which would also require loading a lot more fonts).
-%
-\def\resetmathfonts{%
-  \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy
-  \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf
-  \textfont\ttfam=\tentt \textfont\sffam=\tensf
-}
-
-% The font-changing commands redefine the meanings of \tenSTYLE, instead
-% of just \STYLE.  We do this because \STYLE needs to also set the
-% current \fam for math mode.  Our \STYLE (e.g., \rm) commands hardwire
-% \tenSTYLE to set the current font.
-%
-% Each font-changing command also sets the names \lsize (one size lower)
-% and \lllsize (three sizes lower).  These relative commands are used in
-% the LaTeX logo and acronyms.
-%
-% This all needs generalizing, badly.
-%
-\def\textfonts{%
-  \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl
-  \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc
-  \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy
-  \let\tenttsl=\textttsl
-  \def\curfontsize{text}%
-  \def\lsize{reduced}\def\lllsize{smaller}%
-  \resetmathfonts \setleading{\textleading}}
-\def\titlefonts{%
-  \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl
-  \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc
-  \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy
-  \let\tenttsl=\titlettsl
-  \def\curfontsize{title}%
-  \def\lsize{chap}\def\lllsize{subsec}%
-  \resetmathfonts \setleading{27pt}}
-\def\titlefont#1{{\titlefonts\rmisbold #1}}
-\def\chapfonts{%
-  \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl
-  \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc
-  \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy
-  \let\tenttsl=\chapttsl
-  \def\curfontsize{chap}%
-  \def\lsize{sec}\def\lllsize{text}%
-  \resetmathfonts \setleading{19pt}}
-\def\secfonts{%
-  \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl
-  \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc
-  \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy
-  \let\tenttsl=\secttsl
-  \def\curfontsize{sec}%
-  \def\lsize{subsec}\def\lllsize{reduced}%
-  \resetmathfonts \setleading{17pt}}
-\def\subsecfonts{%
-  \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl
-  \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc
-  \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy
-  \let\tenttsl=\ssecttsl
-  \def\curfontsize{ssec}%
-  \def\lsize{text}\def\lllsize{small}%
-  \resetmathfonts \setleading{15pt}}
-\let\subsubsecfonts = \subsecfonts
-\def\reducedfonts{%
-  \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl
-  \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc
-  \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy
-  \let\tenttsl=\reducedttsl
-  \def\curfontsize{reduced}%
-  \def\lsize{small}\def\lllsize{smaller}%
-  \resetmathfonts \setleading{10.5pt}}
-\def\smallfonts{%
-  \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl
-  \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc
-  \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy
-  \let\tenttsl=\smallttsl
-  \def\curfontsize{small}%
-  \def\lsize{smaller}\def\lllsize{smaller}%
-  \resetmathfonts \setleading{10.5pt}}
-\def\smallerfonts{%
-  \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl
-  \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc
-  \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy
-  \let\tenttsl=\smallerttsl
-  \def\curfontsize{smaller}%
-  \def\lsize{smaller}\def\lllsize{smaller}%
-  \resetmathfonts \setleading{9.5pt}}
-
-% Fonts for short table of contents.
-\setfont\shortcontrm\rmshape{12}{1000}{OT1}
-\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
-\setfont\shortcontsl\slshape{12}{1000}{OT1}
-\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
-
-% Define these just so they can be easily changed for other fonts.
-\def\angleleft{$\langle$}
-\def\angleright{$\rangle$}
-
-% Set the fonts to use with the @small... environments.
-\let\smallexamplefonts = \smallfonts
-
-% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
-% can fit this many characters:
-%   8.5x11=86   smallbook=72  a4=90  a5=69
-% If we use \scriptfonts (8pt), then we can fit this many characters:
-%   8.5x11=90+  smallbook=80  a4=90+  a5=77
-% For me, subjectively, the few extra characters that fit aren't worth
-% the additional smallness of 8pt.  So I'm making the default 9pt.
-%
-% By the way, for comparison, here's what fits with @example (10pt):
-%   8.5x11=71  smallbook=60  a4=75  a5=58
-% --karl, 24jan03.
-
-% Set up the default fonts, so we can use them for creating boxes.
-%
-\definetextfontsizexi
-
-
-\message{markup,}
-
-% Check if we are currently using a typewriter font.  Since all the
-% Computer Modern typewriter fonts have zero interword stretch (and
-% shrink), and it is reasonable to expect all typewriter fonts to have
-% this property, we can check that font parameter.
-%
-\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
-
-% Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will
-% define and register \INITMACRO to be called on markup style changes.
-% \INITMACRO can check \currentmarkupstyle for the innermost
-% style and the set of \ifmarkupSTYLE switches for all styles
-% currently in effect.
-\newif\ifmarkupvar
-\newif\ifmarkupsamp
-\newif\ifmarkupkey
-%\newif\ifmarkupfile % @file == @samp.
-%\newif\ifmarkupoption % @option == @samp.
-\newif\ifmarkupcode
-\newif\ifmarkupkbd
-%\newif\ifmarkupenv % @env == @code.
-%\newif\ifmarkupcommand % @command == @code.
-\newif\ifmarkuptex % @tex (and part of @math, for now).
-\newif\ifmarkupexample
-\newif\ifmarkupverb
-\newif\ifmarkupverbatim
-
-\let\currentmarkupstyle\empty
-
-\def\setupmarkupstyle#1{%
-  \csname markup#1true\endcsname
-  \def\currentmarkupstyle{#1}%
-  \markupstylesetup
-}
-
-\let\markupstylesetup\empty
-
-\def\defmarkupstylesetup#1{%
-  \expandafter\def\expandafter\markupstylesetup
-    \expandafter{\markupstylesetup #1}%
-  \def#1%
-}
-
-% Markup style setup for left and right quotes.
-\defmarkupstylesetup\markupsetuplq{%
-  \expandafter\let\expandafter \temp
-    \csname markupsetuplq\currentmarkupstyle\endcsname
-  \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
-}
-
-\defmarkupstylesetup\markupsetuprq{%
-  \expandafter\let\expandafter \temp
-    \csname markupsetuprq\currentmarkupstyle\endcsname
-  \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
-}
-
-{
-\catcode`\'=\active
-\catcode`\`=\active
-
-\gdef\markupsetuplqdefault{\let`\lq}
-\gdef\markupsetuprqdefault{\let'\rq}
-
-\gdef\markupsetcodequoteleft{\let`\codequoteleft}
-\gdef\markupsetcodequoteright{\let'\codequoteright}
-}
-
-\let\markupsetuplqcode \markupsetcodequoteleft
-\let\markupsetuprqcode \markupsetcodequoteright
-%
-\let\markupsetuplqexample \markupsetcodequoteleft
-\let\markupsetuprqexample \markupsetcodequoteright
-%
-\let\markupsetuplqkbd     \markupsetcodequoteleft
-\let\markupsetuprqkbd     \markupsetcodequoteright
-%
-\let\markupsetuplqsamp \markupsetcodequoteleft
-\let\markupsetuprqsamp \markupsetcodequoteright
-%
-\let\markupsetuplqverb \markupsetcodequoteleft
-\let\markupsetuprqverb \markupsetcodequoteright
-%
-\let\markupsetuplqverbatim \markupsetcodequoteleft
-\let\markupsetuprqverbatim \markupsetcodequoteright
-
-% Allow an option to not use regular directed right quote/apostrophe
-% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
-% The undirected quote is ugly, so don't make it the default, but it
-% works for pasting with more pdf viewers (at least evince), the
-% lilypond developers report.  xpdf does work with the regular 0x27.
-%
-\def\codequoteright{%
-  \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
-    \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
-      '%
-    \else \char'15 \fi
-  \else \char'15 \fi
-}
-%
-% and a similar option for the left quote char vs. a grave accent.
-% Modern fonts display ASCII 0x60 as a grave accent, so some people like
-% the code environments to do likewise.
-%
-\def\codequoteleft{%
-  \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
-    \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
-      % [Knuth] pp. 380,381,391
-      % \relax disables Spanish ligatures ?` and !` of \tt font.
-      \relax`%
-    \else \char'22 \fi
-  \else \char'22 \fi
-}
-
-% Commands to set the quote options.
-% 
-\parseargdef\codequoteundirected{%
-  \def\temp{#1}%
-  \ifx\temp\onword
-    \expandafter\let\csname SETtxicodequoteundirected\endcsname
-      = t%
-  \else\ifx\temp\offword
-    \expandafter\let\csname SETtxicodequoteundirected\endcsname
-      = \relax
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
-  \fi\fi
-}
-%
-\parseargdef\codequotebacktick{%
-  \def\temp{#1}%
-  \ifx\temp\onword
-    \expandafter\let\csname SETtxicodequotebacktick\endcsname
-      = t%
-  \else\ifx\temp\offword
-    \expandafter\let\csname SETtxicodequotebacktick\endcsname
-      = \relax
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
-  \fi\fi
-}
-
-% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
-\def\noligaturesquoteleft{\relax\lq}
-
-% Count depth in font-changes, for error checks
-\newcount\fontdepth \fontdepth=0
-
-% Font commands.
-
-% #1 is the font command (\sl or \it), #2 is the text to slant.
-% If we are in a monospaced environment, however, 1) always use \ttsl,
-% and 2) do not add an italic correction.
-\def\dosmartslant#1#2{%
-  \ifusingtt 
-    {{\ttsl #2}\let\next=\relax}%
-    {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
-  \next
-}
-\def\smartslanted{\dosmartslant\sl}
-\def\smartitalic{\dosmartslant\it}
-
-% Output an italic correction unless \next (presumed to be the following
-% character) is such as not to need one.
-\def\smartitaliccorrection{%
-  \ifx\next,%
-  \else\ifx\next-%
-  \else\ifx\next.%
-  \else\ifx\next\.%
-  \else\ifx\next\comma%
-  \else\ptexslash
-  \fi\fi\fi\fi\fi
-  \aftersmartic
-}
-
-% Unconditional use \ttsl, and no ic.  @var is set to this for defuns.
-\def\ttslanted#1{{\ttsl #1}}
-
-% @cite is like \smartslanted except unconditionally use \sl.  We never want
-% ttsl for book titles, do we?
-\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
-
-\def\aftersmartic{}
-\def\var#1{%
-  \let\saveaftersmartic = \aftersmartic
-  \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
-  \smartslanted{#1}%
-}
-
-\let\i=\smartitalic
-\let\slanted=\smartslanted
-\let\dfn=\smartslanted
-\let\emph=\smartitalic
-
-% Explicit font changes: @r, @sc, undocumented @ii.
-\def\r#1{{\rm #1}}              % roman font
-\def\sc#1{{\smallcaps#1}}       % smallcaps font
-\def\ii#1{{\it #1}}             % italic font
-
-% @b, explicit bold.  Also @strong.
-\def\b#1{{\bf #1}}
-\let\strong=\b
-
-% @sansserif, explicit sans.
-\def\sansserif#1{{\sf #1}}
-
-% We can't just use \exhyphenpenalty, because that only has effect at
-% the end of a paragraph.  Restore normal hyphenation at the end of the
-% group within which \nohyphenation is presumably called.
-%
-\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
-\def\restorehyphenation{\hyphenchar\font = `- }
-
-% Set sfcode to normal for the chars that usually have another value.
-% Can't use plain's \frenchspacing because it uses the `\x notation, and
-% sometimes \x has an active definition that messes things up.
-%
-\catcode`@=11
-  \def\plainfrenchspacing{%
-    \sfcode\dotChar  =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m
-    \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m
-    \def\endofsentencespacefactor{1000}% for @. and friends
-  }
-  \def\plainnonfrenchspacing{%
-    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
-    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
-    \def\endofsentencespacefactor{3000}% for @. and friends
-  }
-\catcode`@=\other
-\def\endofsentencespacefactor{3000}% default
-
-% @t, explicit typewriter.
-\def\t#1{%
-  {\tt \rawbackslash \plainfrenchspacing #1}%
-  \null
-}
-
-% @samp.
-\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
-
-% @indicateurl is \samp, that is, with quotes.
-\let\indicateurl=\samp
-
-% @code (and similar) prints in typewriter, but with spaces the same
-% size as normal in the surrounding text, without hyphenation, etc.
-% This is a subroutine for that.
-\def\tclose#1{%
-  {%
-    % Change normal interword space to be same as for the current font.
-    \spaceskip = \fontdimen2\font
-    %
-    % Switch to typewriter.
-    \tt
-    %
-    % But `\ ' produces the large typewriter interword space.
-    \def\ {{\spaceskip = 0pt{} }}%
-    %
-    % Turn off hyphenation.
-    \nohyphenation
-    %
-    \rawbackslash
-    \plainfrenchspacing
-    #1%
-  }%
-  \null % reset spacefactor to 1000
-}
-
-% We *must* turn on hyphenation at `-' and `_' in @code.
-% (But see \codedashfinish below.)
-% Otherwise, it is too hard to avoid overfull hboxes
-% in the Emacs manual, the Library manual, etc.
-%
-% Unfortunately, TeX uses one parameter (\hyphenchar) to control
-% both hyphenation at - and hyphenation within words.
-% We must therefore turn them both off (\tclose does that)
-% and arrange explicitly to hyphenate at a dash. -- rms.
-{
-  \catcode`\-=\active \catcode`\_=\active
-  \catcode`\'=\active \catcode`\`=\active
-  \global\let'=\rq \global\let`=\lq  % default definitions
-  %
-  \global\def\code{\begingroup
-    \setupmarkupstyle{code}%
-    % The following should really be moved into \setupmarkupstyle handlers.
-    \catcode\dashChar=\active  \catcode\underChar=\active
-    \ifallowcodebreaks
-     \let-\codedash
-     \let_\codeunder
-    \else
-     \let-\normaldash
-     \let_\realunder
-    \fi
-    % Given -foo (with a single dash), we do not want to allow a break
-    % after the hyphen.
-    \global\let\codedashprev=\codedash
-    %
-    \codex
-  }
-  %
-  \gdef\codedash{\futurelet\next\codedashfinish}
-  \gdef\codedashfinish{%
-    \normaldash % always output the dash character itself.
-    % 
-    % Now, output a discretionary to allow a line break, unless
-    % (a) the next character is a -, or
-    % (b) the preceding character is a -.
-    % E.g., given --posix, we do not want to allow a break after either -.
-    % Given --foo-bar, we do want to allow a break between the - and the b.
-    \ifx\next\codedash \else
-      \ifx\codedashprev\codedash 
-      \else \discretionary{}{}{}\fi
-    \fi
-    % we need the space after the = for the case when \next itself is a
-    % space token; it would get swallowed otherwise.  As in @code{- a}.
-    \global\let\codedashprev= \next
-  }
-}
-\def\normaldash{-}
-%
-\def\codex #1{\tclose{#1}\endgroup}
-
-\def\codeunder{%
-  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
-  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
-  % will therefore expand the active definition of _, which is us
-  % (inside @code that is), therefore an endless loop.
-  \ifusingtt{\ifmmode
-               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
-             \else\normalunderscore \fi
-             \discretionary{}{}{}}%
-            {\_}%
-}
-
-% An additional complication: the above will allow breaks after, e.g.,
-% each of the four underscores in __typeof__.  This is bad.
-% @allowcodebreaks provides a document-level way to turn breaking at -
-% and _ on and off.
-%
-\newif\ifallowcodebreaks  \allowcodebreakstrue
-
-\def\keywordtrue{true}
-\def\keywordfalse{false}
-
-\parseargdef\allowcodebreaks{%
-  \def\txiarg{#1}%
-  \ifx\txiarg\keywordtrue
-    \allowcodebreakstrue
-  \else\ifx\txiarg\keywordfalse
-    \allowcodebreaksfalse
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
-  \fi\fi
-}
-
-% For @command, @env, @file, @option quotes seem unnecessary,
-% so use \code rather than \samp.
-\let\command=\code
-\let\env=\code
-\let\file=\code
-\let\option=\code
-
-% @uref (abbreviation for `urlref') aka @url takes an optional
-% (comma-separated) second argument specifying the text to display and
-% an optional third arg as text to display instead of (rather than in
-% addition to) the url itself.  First (mandatory) arg is the url.
-
-% TeX-only option to allow changing PDF output to show only the second
-% arg (if given), and not the url (which is then just the link target).
-\newif\ifurefurlonlylink
-
-% The main macro is \urefbreak, which allows breaking at expected
-% places within the url.  (There used to be another version, which
-% didn't support automatic breaking.)
-\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
-\let\uref=\urefbreak
-%
-\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
-\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
-  \unsepspaces
-  \pdfurl{#1}%
-  \setbox0 = \hbox{\ignorespaces #3}%
-  \ifdim\wd0 > 0pt
-    \unhbox0 % third arg given, show only that
-  \else
-    \setbox0 = \hbox{\ignorespaces #2}% look for second arg
-    \ifdim\wd0 > 0pt
-      \ifpdf
-        \ifurefurlonlylink
-          % PDF plus option to not display url, show just arg
-          \unhbox0             
-        \else
-          % PDF, normally display both arg and url for consistency,
-          % visibility, if the pdf is eventually used to print, etc.
-          \unhbox0\ (\urefcode{#1})%
-        \fi
-      \else
-        \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
-      \fi
-    \else
-      \urefcode{#1}% only url given, so show it
-    \fi
-  \fi
-  \endlink
-\endgroup}
-
-% Allow line breaks around only a few characters (only).
-\def\urefcatcodes{%
-  \catcode\ampChar=\active   \catcode\dotChar=\active
-  \catcode\hashChar=\active  \catcode\questChar=\active
-  \catcode\slashChar=\active
-}
-{
-  \urefcatcodes
-  %
-  \global\def\urefcode{\begingroup
-    \setupmarkupstyle{code}%
-    \urefcatcodes
-    \let&\urefcodeamp
-    \let.\urefcodedot
-    \let#\urefcodehash
-    \let?\urefcodequest
-    \let/\urefcodeslash
-    \codex
-  }
-  %
-  % By default, they are just regular characters.
-  \global\def&{\normalamp}
-  \global\def.{\normaldot}
-  \global\def#{\normalhash}
-  \global\def?{\normalquest}
-  \global\def/{\normalslash}
-}
-
-% we put a little stretch before and after the breakable chars, to help
-% line breaking of long url's.  The unequal skips make look better in
-% cmtt at least, especially for dots.
-\def\urefprestretchamount{.13em}
-\def\urefpoststretchamount{.1em}
-\def\urefprestretch{\urefprebreak \hskip0pt plus\urefprestretchamount\relax}
-\def\urefpoststretch{\urefpostbreak \hskip0pt plus\urefprestretchamount\relax}
-%
-\def\urefcodeamp{\urefprestretch \&\urefpoststretch}
-\def\urefcodedot{\urefprestretch .\urefpoststretch}
-\def\urefcodehash{\urefprestretch \#\urefpoststretch}
-\def\urefcodequest{\urefprestretch ?\urefpoststretch}
-\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
-{
-  \catcode`\/=\active
-  \global\def\urefcodeslashfinish{%
-    \urefprestretch \slashChar
-    % Allow line break only after the final / in a sequence of
-    % slashes, to avoid line break between the slashes in http://.
-    \ifx\next/\else \urefpoststretch \fi
-  }
-}
-
-% One more complication: by default we'll break after the special
-% characters, but some people like to break before the special chars, so
-% allow that.  Also allow no breaking at all, for manual control.
-% 
-\parseargdef\urefbreakstyle{%
-  \def\txiarg{#1}%
-  \ifx\txiarg\wordnone
-    \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
-  \else\ifx\txiarg\wordbefore
-    \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak}
-  \else\ifx\txiarg\wordafter
-    \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak}
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
-  \fi\fi\fi
-}
-\def\wordafter{after}
-\def\wordbefore{before}
-\def\wordnone{none}
-
-\urefbreakstyle after
-
-% @url synonym for @uref, since that's how everyone uses it.
-%
-\let\url=\uref
-
-% rms does not like angle brackets --karl, 17may97.
-% So now @email is just like @uref, unless we are pdf.
-%
-%\def\email#1{\angleleft{\tt #1}\angleright}
-\ifpdf
-  \def\email#1{\doemail#1,,\finish}
-  \def\doemail#1,#2,#3\finish{\begingroup
-    \unsepspaces
-    \pdfurl{mailto:#1}%
-    \setbox0 = \hbox{\ignorespaces #2}%
-    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
-    \endlink
-  \endgroup}
-\else
-  \let\email=\uref
-\fi
-
-% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
-%   `example' (@kbd uses ttsl only inside of @example and friends),
-%   or `code' (@kbd uses normal tty font always).
-\parseargdef\kbdinputstyle{%
-  \def\txiarg{#1}%
-  \ifx\txiarg\worddistinct
-    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
-  \else\ifx\txiarg\wordexample
-    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
-  \else\ifx\txiarg\wordcode
-    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
-  \fi\fi\fi
-}
-\def\worddistinct{distinct}
-\def\wordexample{example}
-\def\wordcode{code}
-
-% Default is `distinct'.
-\kbdinputstyle distinct
-
-% @kbd is like @code, except that if the argument is just one @key command,
-% then @kbd has no effect.
-\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
-
-\def\xkey{\key}
-\def\kbdsub#1#2#3\par{%
-  \def\one{#1}\def\three{#3}\def\threex{??}%
-  \ifx\one\xkey\ifx\threex\three \key{#2}%
-  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
-  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
-}
-
-% definition of @key that produces a lozenge.  Doesn't adjust to text size.
-%\setfont\keyrm\rmshape{8}{1000}{OT1}
-%\font\keysy=cmsy9
-%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
-%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
-%    \vbox{\hrule\kern-0.4pt
-%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
-%    \kern-0.4pt\hrule}%
-%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
-
-% definition of @key with no lozenge.  If the current font is already
-% monospace, don't change it; that way, we respect @kbdinputstyle.  But
-% if it isn't monospace, then use \tt.
-%
-\def\key#1{{\setupmarkupstyle{key}%
-  \nohyphenation
-  \ifmonospace\else\tt\fi
-  #1}\null}
-
-% @clicksequence{File @click{} Open ...}
-\def\clicksequence#1{\begingroup #1\endgroup}
-
-% @clickstyle @arrow   (by default)
-\parseargdef\clickstyle{\def\click{#1}}
-\def\click{\arrow}
-
-% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
-% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
-%
-\def\dmn#1{\thinspace #1}
-
-% @l was never documented to mean ``switch to the Lisp font'',
-% and it is not used as such in any manual I can find.  We need it for
-% Polish suppressed-l.  --karl, 22sep96.
-%\def\l#1{{\li #1}\null}
-
-% @acronym for "FBI", "NATO", and the like.
-% We print this one point size smaller, since it's intended for
-% all-uppercase.
-%
-\def\acronym#1{\doacronym #1,,\finish}
-\def\doacronym#1,#2,#3\finish{%
-  {\selectfonts\lsize #1}%
-  \def\temp{#2}%
-  \ifx\temp\empty \else
-    \space ({\unsepspaces \ignorespaces \temp \unskip})%
-  \fi
-  \null % reset \spacefactor=1000
-}
-
-% @abbr for "Comput. J." and the like.
-% No font change, but don't do end-of-sentence spacing.
-%
-\def\abbr#1{\doabbr #1,,\finish}
-\def\doabbr#1,#2,#3\finish{%
-  {\plainfrenchspacing #1}%
-  \def\temp{#2}%
-  \ifx\temp\empty \else
-    \space ({\unsepspaces \ignorespaces \temp \unskip})%
-  \fi
-  \null % reset \spacefactor=1000
-}
-
-% @asis just yields its argument.  Used with @table, for example.
-%
-\def\asis#1{#1}
-
-% @math outputs its argument in math mode.
-%
-% One complication: _ usually means subscripts, but it could also mean
-% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
-% _ active, and distinguish by seeing if the current family is \slfam,
-% which is what @var uses.
-{
-  \catcode`\_ = \active
-  \gdef\mathunderscore{%
-    \catcode`\_=\active
-    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
-  }
-}
-% Another complication: we want \\ (and @\) to output a math (or tt) \.
-% FYI, plain.tex uses \\ as a temporary control sequence (for no
-% particular reason), but this is not advertised and we don't care.
-%
-% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
-\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
-%
-\def\math{%
-  \tex
-  \mathunderscore
-  \let\\ = \mathbackslash
-  \mathactive
-  % make the texinfo accent commands work in math mode
-  \let\"=\ddot
-  \let\'=\acute
-  \let\==\bar
-  \let\^=\hat
-  \let\`=\grave
-  \let\u=\breve
-  \let\v=\check
-  \let\~=\tilde
-  \let\dotaccent=\dot
-  $\finishmath
-}
-\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
-
-% Some active characters (such as <) are spaced differently in math.
-% We have to reset their definitions in case the @math was an argument
-% to a command which sets the catcodes (such as @item or @section).
-%
-{
-  \catcode`^ = \active
-  \catcode`< = \active
-  \catcode`> = \active
-  \catcode`+ = \active
-  \catcode`' = \active
-  \gdef\mathactive{%
-    \let^ = \ptexhat
-    \let< = \ptexless
-    \let> = \ptexgtr
-    \let+ = \ptexplus
-    \let' = \ptexquoteright
-  }
-}
-
-% ctrl is no longer a Texinfo command, but leave this definition for fun.
-\def\ctrl #1{{\tt \rawbackslash \hat}#1}
-
-% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
-% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
-% except specified as a normal braced arg, so no newlines to worry about.
-% 
-\def\outfmtnametex{tex}
-%
-\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
-\long\def\doinlinefmt#1,#2,\finish{%
-  \def\inlinefmtname{#1}%
-  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
-}
-% 
-% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
-% FMTNAME is tex, else ELSE-TEXT.
-\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
-\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{%
-  \def\inlinefmtname{#1}%
-  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi
-}
-%
-% For raw, must switch into @tex before parsing the argument, to avoid
-% setting catcodes prematurely.  Doing it this way means that, for
-% example, @inlineraw{html, foo{bar} gets a parse error instead of being
-% ignored.  But this isn't important because if people want a literal
-% *right* brace they would have to use a command anyway, so they may as
-% well use a command to get a left brace too.  We could re-use the
-% delimiter character idea from \verb, but it seems like overkill.
-% 
-\long\def\inlineraw{\tex \doinlineraw}
-\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
-\def\doinlinerawtwo#1,#2,\finish{%
-  \def\inlinerawname{#1}%
-  \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
-  \endgroup % close group opened by \tex.
-}
-
-% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set.
-%
-\long\def\inlineifset#1{\doinlineifset #1,\finish}
-\long\def\doinlineifset#1,#2,\finish{%
-  \def\inlinevarname{#1}%
-  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax
-  \else\ignorespaces#2\fi
-}
-
-% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set.
-%
-\long\def\inlineifclear#1{\doinlineifclear #1,\finish}
-\long\def\doinlineifclear#1,#2,\finish{%
-  \def\inlinevarname{#1}%
-  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi
-}
-
-
-\message{glyphs,}
-% and logos.
-
-% @@ prints an @, as does @atchar{}.
-\def\@{\char64 }
-\let\atchar=\@
-
-% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
-% Unless we're in typewriter, use \ecfont because the CM text fonts do
-% not have braces, and we don't want to switch into math.
-\def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}}
-\def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}}
-\let\{=\mylbrace \let\lbracechar=\{
-\let\}=\myrbrace \let\rbracechar=\}
-\begingroup
-  % Definitions to produce \{ and \} commands for indices,
-  % and @{ and @} for the aux/toc files.
-  \catcode`\{ = \other \catcode`\} = \other
-  \catcode`\[ = 1 \catcode`\] = 2
-  \catcode`\! = 0 \catcode`\\ = \other
-  !gdef!lbracecmd[\{]%
-  !gdef!rbracecmd[\}]%
-  !gdef!lbraceatcmd[@{]%
-  !gdef!rbraceatcmd[@}]%
-!endgroup
-
-% @comma{} to avoid , parsing problems.
-\let\comma = ,
-
-% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
-% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
-\let\, = \ptexc
-\let\dotaccent = \ptexdot
-\def\ringaccent#1{{\accent23 #1}}
-\let\tieaccent = \ptext
-\let\ubaraccent = \ptexb
-\let\udotaccent = \d
-
-% Other special characters: @questiondown @exclamdown @ordf @ordm
-% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
-\def\questiondown{?`}
-\def\exclamdown{!`}
-\def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}}
-\def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}}
-
-% Dotless i and dotless j, used for accents.
-\def\imacro{i}
-\def\jmacro{j}
-\def\dotless#1{%
-  \def\temp{#1}%
-  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
-  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
-  \else \errmessage{@dotless can be used only with i or j}%
-  \fi\fi
-}
-
-% The \TeX{} logo, as in plain, but resetting the spacing so that a
-% period following counts as ending a sentence.  (Idea found in latex.)
-%
-\edef\TeX{\TeX \spacefactor=1000 }
-
-% @LaTeX{} logo.  Not quite the same results as the definition in
-% latex.ltx, since we use a different font for the raised A; it's most
-% convenient for us to use an explicitly smaller font, rather than using
-% the \scriptstyle font (since we don't reset \scriptstyle and
-% \scriptscriptstyle).
-%
-\def\LaTeX{%
-  L\kern-.36em
-  {\setbox0=\hbox{T}%
-   \vbox to \ht0{\hbox{%
-     \ifx\textnominalsize\xwordpt
-       % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX.
-       % Revert to plain's \scriptsize, which is 7pt.
-       \count255=\the\fam $\fam\count255 \scriptstyle A$%
-     \else
-       % For 11pt, we can use our lllsize.
-       \selectfonts\lllsize A%
-     \fi
-     }%
-     \vss
-  }}%
-  \kern-.15em
-  \TeX
-}
-
-% Some math mode symbols.
-\def\bullet{$\ptexbullet$}
-\def\geq{\ifmmode \ge\else $\ge$\fi}
-\def\leq{\ifmmode \le\else $\le$\fi}
-\def\minus{\ifmmode -\else $-$\fi}
-
-% @dots{} outputs an ellipsis using the current font.
-% We do .5em per period so that it has the same spacing in the cm
-% typewriter fonts as three actual period characters; on the other hand,
-% in other typewriter fonts three periods are wider than 1.5em.  So do
-% whichever is larger.
-%
-\def\dots{%
-  \leavevmode
-  \setbox0=\hbox{...}% get width of three periods
-  \ifdim\wd0 > 1.5em
-    \dimen0 = \wd0
-  \else
-    \dimen0 = 1.5em
-  \fi
-  \hbox to \dimen0{%
-    \hskip 0pt plus.25fil
-    .\hskip 0pt plus1fil
-    .\hskip 0pt plus1fil
-    .\hskip 0pt plus.5fil
-  }%
-}
-
-% @enddots{} is an end-of-sentence ellipsis.
-%
-\def\enddots{%
-  \dots
-  \spacefactor=\endofsentencespacefactor
-}
-
-% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
-%
-% Since these characters are used in examples, they should be an even number of
-% \tt widths. Each \tt character is 1en, so two makes it 1em.
-%
-\def\point{$\star$}
-\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
-\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
-\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
-\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
-\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
-
-% The @error{} command.
-% Adapted from the TeXbook's \boxit.
-%
-\newbox\errorbox
-%
-{\tentt \global\dimen0 = 3em}% Width of the box.
-\dimen2 = .55pt % Thickness of rules
-% The text. (`r' is open on the right, `e' somewhat less so on the left.)
-\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
-%
-\setbox\errorbox=\hbox to \dimen0{\hfil
-   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
-   \advance\hsize by -2\dimen2 % Rules.
-   \vbox{%
-      \hrule height\dimen2
-      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
-         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
-         \kern3pt\vrule width\dimen2}% Space to right.
-      \hrule height\dimen2}
-    \hfil}
-%
-\def\error{\leavevmode\lower.7ex\copy\errorbox}
-
-% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
-%
-\def\pounds{{\it\$}}
-
-% @euro{} comes from a separate font, depending on the current style.
-% We use the free feym* fonts from the eurosym package by Henrik
-% Theiling, which support regular, slanted, bold and bold slanted (and
-% "outlined" (blackboard board, sort of) versions, which we don't need).
-% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
-%
-% Although only regular is the truly official Euro symbol, we ignore
-% that.  The Euro is designed to be slightly taller than the regular
-% font height.
-%
-% feymr - regular
-% feymo - slanted
-% feybr - bold
-% feybo - bold slanted
-%
-% There is no good (free) typewriter version, to my knowledge.
-% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
-% Hmm.
-%
-% Also doesn't work in math.  Do we need to do math with euro symbols?
-% Hope not.
-%
-%
-\def\euro{{\eurofont e}}
-\def\eurofont{%
-  % We set the font at each command, rather than predefining it in
-  % \textfonts and the other font-switching commands, so that
-  % installations which never need the symbol don't have to have the
-  % font installed.
-  %
-  % There is only one designed size (nominal 10pt), so we always scale
-  % that to the current nominal size.
-  %
-  % By the way, simply using "at 1em" works for cmr10 and the like, but
-  % does not work for cmbx10 and other extended/shrunken fonts.
-  %
-  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
-  %
-  \ifx\curfontstyle\bfstylename
-    % bold:
-    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
-  \else
-    % regular:
-    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
-  \fi
-  \thiseurofont
-}
-
-% Glyphs from the EC fonts.  We don't use \let for the aliases, because
-% sometimes we redefine the original macro, and the alias should reflect
-% the redefinition.
-%
-% Use LaTeX names for the Icelandic letters.
-\def\DH{{\ecfont \char"D0}} % Eth
-\def\dh{{\ecfont \char"F0}} % eth
-\def\TH{{\ecfont \char"DE}} % Thorn
-\def\th{{\ecfont \char"FE}} % thorn
-%
-\def\guillemetleft{{\ecfont \char"13}}
-\def\guillemotleft{\guillemetleft}
-\def\guillemetright{{\ecfont \char"14}}
-\def\guillemotright{\guillemetright}
-\def\guilsinglleft{{\ecfont \char"0E}}
-\def\guilsinglright{{\ecfont \char"0F}}
-\def\quotedblbase{{\ecfont \char"12}}
-\def\quotesinglbase{{\ecfont \char"0D}}
-%
-% This positioning is not perfect (see the ogonek LaTeX package), but
-% we have the precomposed glyphs for the most common cases.  We put the
-% tests to use those glyphs in the single \ogonek macro so we have fewer
-% dummy definitions to worry about for index entries, etc.
-%
-% ogonek is also used with other letters in Lithuanian (IOU), but using
-% the precomposed glyphs for those is not so easy since they aren't in
-% the same EC font.
-\def\ogonek#1{{%
-  \def\temp{#1}%
-  \ifx\temp\macrocharA\Aogonek
-  \else\ifx\temp\macrochara\aogonek
-  \else\ifx\temp\macrocharE\Eogonek
-  \else\ifx\temp\macrochare\eogonek
-  \else
-    \ecfont \setbox0=\hbox{#1}%
-    \ifdim\ht0=1ex\accent"0C #1%
-    \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
-    \fi
-  \fi\fi\fi\fi
-  }%
-}
-\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
-\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
-\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
-\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
-%
-% Use the ec* fonts (cm-super in outline format) for non-CM glyphs.
-\def\ecfont{%
-  % We can't distinguish serif/sans and italic/slanted, but this
-  % is used for crude hacks anyway (like adding French and German
-  % quotes to documents typeset with CM, where we lose kerning), so
-  % hopefully nobody will notice/care.
-  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
-  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
-  \ifmonospace
-    % typewriter:
-    \font\thisecfont = ectt\ecsize \space at \nominalsize
-  \else
-    \ifx\curfontstyle\bfstylename
-      % bold:
-      \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize
-    \else
-      % regular:
-      \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize
-    \fi
-  \fi
-  \thisecfont
-}
-
-% @registeredsymbol - R in a circle.  The font for the R should really
-% be smaller yet, but lllsize is the best we can do for now.
-% Adapted from the plain.tex definition of \copyright.
-%
-\def\registeredsymbol{%
-  $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}%
-               \hfil\crcr\Orb}}%
-    }$%
-}
-
-% @textdegree - the normal degrees sign.
-%
-\def\textdegree{$^\circ$}
-
-% Laurent Siebenmann reports \Orb undefined with:
-%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
-% so we'll define it if necessary.
-%
-\ifx\Orb\thisisundefined
-\def\Orb{\mathhexbox20D}
-\fi
-
-% Quotes.
-\chardef\quotedblleft="5C
-\chardef\quotedblright=`\"
-\chardef\quoteleft=`\`
-\chardef\quoteright=`\'
-
-
-\message{page headings,}
-
-\newskip\titlepagetopglue \titlepagetopglue = 1.5in
-\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
-
-% First the title page.  Must do @settitle before @titlepage.
-\newif\ifseenauthor
-\newif\iffinishedtitlepage
-
-% Do an implicit @contents or @shortcontents after @end titlepage if the
-% user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage.
-%
-\newif\ifsetcontentsaftertitlepage
- \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue
-\newif\ifsetshortcontentsaftertitlepage
- \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue
-
-\parseargdef\shorttitlepage{%
-  \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
-  \endgroup\page\hbox{}\page}
-
-\envdef\titlepage{%
-  % Open one extra group, as we want to close it in the middle of \Etitlepage.
-  \begingroup
-    \parindent=0pt \textfonts
-    % Leave some space at the very top of the page.
-    \vglue\titlepagetopglue
-    % No rule at page bottom unless we print one at the top with @title.
-    \finishedtitlepagetrue
-    %
-    % Most title ``pages'' are actually two pages long, with space
-    % at the top of the second.  We don't want the ragged left on the second.
-    \let\oldpage = \page
-    \def\page{%
-      \iffinishedtitlepage\else
-        \finishtitlepage
-      \fi
-      \let\page = \oldpage
-      \page
-      \null
-    }%
-}
-
-\def\Etitlepage{%
-    \iffinishedtitlepage\else
-       \finishtitlepage
-    \fi
-    % It is important to do the page break before ending the group,
-    % because the headline and footline are only empty inside the group.
-    % If we use the new definition of \page, we always get a blank page
-    % after the title page, which we certainly don't want.
-    \oldpage
-  \endgroup
-  %
-  % Need this before the \...aftertitlepage checks so that if they are
-  % in effect the toc pages will come out with page numbers.
-  \HEADINGSon
-  %
-  % If they want short, they certainly want long too.
-  \ifsetshortcontentsaftertitlepage
-    \shortcontents
-    \contents
-    \global\let\shortcontents = \relax
-    \global\let\contents = \relax
-  \fi
-  %
-  \ifsetcontentsaftertitlepage
-    \contents
-    \global\let\contents = \relax
-    \global\let\shortcontents = \relax
-  \fi
-}
-
-\def\finishtitlepage{%
-  \vskip4pt \hrule height 2pt width \hsize
-  \vskip\titlepagebottomglue
-  \finishedtitlepagetrue
-}
-
-% Settings used for typesetting titles: no hyphenation, no indentation,
-% don't worry much about spacing, ragged right.  This should be used
-% inside a \vbox, and fonts need to be set appropriately first.  Because
-% it is always used for titles, nothing else, we call \rmisbold.  \par
-% should be specified before the end of the \vbox, since a vbox is a group.
-% 
-\def\raggedtitlesettings{%
-  \rmisbold
-  \hyphenpenalty=10000
-  \parindent=0pt
-  \tolerance=5000
-  \ptexraggedright
-}
-
-% Macros to be used within @titlepage:
-
-\let\subtitlerm=\tenrm
-\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
-
-\parseargdef\title{%
-  \checkenv\titlepage
-  \vbox{\titlefonts \raggedtitlesettings #1\par}%
-  % print a rule at the page bottom also.
-  \finishedtitlepagefalse
-  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
-}
-
-\parseargdef\subtitle{%
-  \checkenv\titlepage
-  {\subtitlefont \rightline{#1}}%
-}
-
-% @author should come last, but may come many times.
-% It can also be used inside @quotation.
-%
-\parseargdef\author{%
-  \def\temp{\quotation}%
-  \ifx\thisenv\temp
-    \def\quotationauthor{#1}% printed in \Equotation.
-  \else
-    \checkenv\titlepage
-    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
-    {\secfonts\rmisbold \leftline{#1}}%
-  \fi
-}
-
-
-% Set up page headings and footings.
-
-\let\thispage=\folio
-
-\newtoks\evenheadline    % headline on even pages
-\newtoks\oddheadline     % headline on odd pages
-\newtoks\evenfootline    % footline on even pages
-\newtoks\oddfootline     % footline on odd pages
-
-% Now make TeX use those variables
-\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
-                            \else \the\evenheadline \fi}}
-\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
-                            \else \the\evenfootline \fi}\HEADINGShook}
-\let\HEADINGShook=\relax
-
-% Commands to set those variables.
-% For example, this is what  @headings on  does
-% @evenheading @thistitle|@thispage|@thischapter
-% @oddheading @thischapter|@thispage|@thistitle
-% @evenfooting @thisfile||
-% @oddfooting ||@thisfile
-
-
-\def\evenheading{\parsearg\evenheadingxxx}
-\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
-\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
-\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\def\oddheading{\parsearg\oddheadingxxx}
-\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
-\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
-\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
-
-\def\evenfooting{\parsearg\evenfootingxxx}
-\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
-\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
-\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
-
-\def\oddfooting{\parsearg\oddfootingxxx}
-\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
-\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
-  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
-  %
-  % Leave some space for the footline.  Hopefully ok to assume
-  % @evenfooting will not be used by itself.
-  \global\advance\pageheight by -12pt
-  \global\advance\vsize by -12pt
-}
-
-\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
-
-% @evenheadingmarks top     \thischapter <- chapter at the top of a page
-% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page
-%
-% The same set of arguments for:
-%
-% @oddheadingmarks
-% @evenfootingmarks
-% @oddfootingmarks
-% @everyheadingmarks
-% @everyfootingmarks
-
-\def\evenheadingmarks{\headingmarks{even}{heading}}
-\def\oddheadingmarks{\headingmarks{odd}{heading}}
-\def\evenfootingmarks{\headingmarks{even}{footing}}
-\def\oddfootingmarks{\headingmarks{odd}{footing}}
-\def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1}
-                          \headingmarks{odd}{heading}{#1} }
-\def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1}
-                          \headingmarks{odd}{footing}{#1} }
-% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
-\def\headingmarks#1#2#3 {%
-  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
-  \global\expandafter\let\csname get#1#2marks\endcsname \temp
-}
-
-\everyheadingmarks bottom
-\everyfootingmarks bottom
-
-% @headings double      turns headings on for double-sided printing.
-% @headings single      turns headings on for single-sided printing.
-% @headings off         turns them off.
-% @headings on          same as @headings double, retained for compatibility.
-% @headings after       turns on double-sided headings after this page.
-% @headings doubleafter turns on double-sided headings after this page.
-% @headings singleafter turns on single-sided headings after this page.
-% By default, they are off at the start of a document,
-% and turned `on' after @end titlepage.
-
-\def\headings #1 {\csname HEADINGS#1\endcsname}
-
-\def\headingsoff{% non-global headings elimination
-  \evenheadline={\hfil}\evenfootline={\hfil}%
-   \oddheadline={\hfil}\oddfootline={\hfil}%
-}
-
-\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
-\HEADINGSoff  % it's the default
-
-% When we turn headings on, set the page number to 1.
-% For double-sided printing, put current file name in lower left corner,
-% chapter name on inside top of right hand pages, document
-% title on inside top of left hand pages, and page numbers on outside top
-% edge of all pages.
-\def\HEADINGSdouble{%
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-\let\contentsalignmacro = \chappager
-
-% For single-sided printing, chapter title goes across top left of page,
-% page number on top right.
-\def\HEADINGSsingle{%
-\global\pageno=1
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-\def\HEADINGSon{\HEADINGSdouble}
-
-\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
-\let\HEADINGSdoubleafter=\HEADINGSafter
-\def\HEADINGSdoublex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\folio\hfil\thistitle}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chapoddpage
-}
-
-\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
-\def\HEADINGSsinglex{%
-\global\evenfootline={\hfil}
-\global\oddfootline={\hfil}
-\global\evenheadline={\line{\thischapter\hfil\folio}}
-\global\oddheadline={\line{\thischapter\hfil\folio}}
-\global\let\contentsalignmacro = \chappager
-}
-
-% Subroutines used in generating headings
-% This produces Day Month Year style of output.
-% Only define if not already defined, in case a txi-??.tex file has set
-% up a different format (e.g., txi-cs.tex does this).
-\ifx\today\thisisundefined
-\def\today{%
-  \number\day\space
-  \ifcase\month
-  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
-  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
-  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
-  \fi
-  \space\number\year}
-\fi
-
-% @settitle line...  specifies the title of the document, for headings.
-% It generates no output of its own.
-\def\thistitle{\putwordNoTitle}
-\def\settitle{\parsearg{\gdef\thistitle}}
-
-
-\message{tables,}
-% Tables -- @table, @ftable, @vtable, @item(x).
-
-% default indentation of table text
-\newdimen\tableindent \tableindent=.8in
-% default indentation of @itemize and @enumerate text
-\newdimen\itemindent  \itemindent=.3in
-% margin between end of table item and start of table text.
-\newdimen\itemmargin  \itemmargin=.1in
-
-% used internally for \itemindent minus \itemmargin
-\newdimen\itemmax
-
-% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
-% these defs.
-% They also define \itemindex
-% to index the item name in whatever manner is desired (perhaps none).
-
-\newif\ifitemxneedsnegativevskip
-
-\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
-
-\def\internalBitem{\smallbreak \parsearg\itemzzz}
-\def\internalBitemx{\itemxpar \parsearg\itemzzz}
-
-\def\itemzzz #1{\begingroup %
-  \advance\hsize by -\rightskip
-  \advance\hsize by -\tableindent
-  \setbox0=\hbox{\itemindicate{#1}}%
-  \itemindex{#1}%
-  \nobreak % This prevents a break before @itemx.
-  %
-  % If the item text does not fit in the space we have, put it on a line
-  % by itself, and do not allow a page break either before or after that
-  % line.  We do not start a paragraph here because then if the next
-  % command is, e.g., @kindex, the whatsit would get put into the
-  % horizontal list on a line by itself, resulting in extra blank space.
-  \ifdim \wd0>\itemmax
-    %
-    % Make this a paragraph so we get the \parskip glue and wrapping,
-    % but leave it ragged-right.
-    \begingroup
-      \advance\leftskip by-\tableindent
-      \advance\hsize by\tableindent
-      \advance\rightskip by0pt plus1fil\relax
-      \leavevmode\unhbox0\par
-    \endgroup
-    %
-    % We're going to be starting a paragraph, but we don't want the
-    % \parskip glue -- logically it's part of the @item we just started.
-    \nobreak \vskip-\parskip
-    %
-    % Stop a page break at the \parskip glue coming up.  However, if
-    % what follows is an environment such as @example, there will be no
-    % \parskip glue; then the negative vskip we just inserted would
-    % cause the example and the item to crash together.  So we use this
-    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
-    % \parskip glue after all.  Section titles are handled this way also.
-    %
-    \penalty 10001
-    \endgroup
-    \itemxneedsnegativevskipfalse
-  \else
-    % The item text fits into the space.  Start a paragraph, so that the
-    % following text (if any) will end up on the same line.
-    \noindent
-    % Do this with kerns and \unhbox so that if there is a footnote in
-    % the item text, it can migrate to the main vertical list and
-    % eventually be printed.
-    \nobreak\kern-\tableindent
-    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
-    \unhbox0
-    \nobreak\kern\dimen0
-    \endgroup
-    \itemxneedsnegativevskiptrue
-  \fi
-}
-
-\def\item{\errmessage{@item while not in a list environment}}
-\def\itemx{\errmessage{@itemx while not in a list environment}}
-
-% @table, @ftable, @vtable.
-\envdef\table{%
-  \let\itemindex\gobble
-  \tablecheck{table}%
-}
-\envdef\ftable{%
-  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
-  \tablecheck{ftable}%
-}
-\envdef\vtable{%
-  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
-  \tablecheck{vtable}%
-}
-\def\tablecheck#1{%
-  \ifnum \the\catcode`\^^M=\active
-    \endgroup
-    \errmessage{This command won't work in this context; perhaps the problem is
-      that we are \inenvironment\thisenv}%
-    \def\next{\doignore{#1}}%
-  \else
-    \let\next\tablex
-  \fi
-  \next
-}
-\def\tablex#1{%
-  \def\itemindicate{#1}%
-  \parsearg\tabley
-}
-\def\tabley#1{%
-  {%
-    \makevalueexpandable
-    \edef\temp{\noexpand\tablez #1\space\space\space}%
-    \expandafter
-  }\temp \endtablez
-}
-\def\tablez #1 #2 #3 #4\endtablez{%
-  \aboveenvbreak
-  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
-  \ifnum 0#2>0 \tableindent=#2\mil \fi
-  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
-  \itemmax=\tableindent
-  \advance \itemmax by -\itemmargin
-  \advance \leftskip by \tableindent
-  \exdentamount=\tableindent
-  \parindent = 0pt
-  \parskip = \smallskipamount
-  \ifdim \parskip=0pt \parskip=2pt \fi
-  \let\item = \internalBitem
-  \let\itemx = \internalBitemx
-}
-\def\Etable{\endgraf\afterenvbreak}
-\let\Eftable\Etable
-\let\Evtable\Etable
-\let\Eitemize\Etable
-\let\Eenumerate\Etable
-
-% This is the counter used by @enumerate, which is really @itemize
-
-\newcount \itemno
-
-\envdef\itemize{\parsearg\doitemize}
-
-\def\doitemize#1{%
-  \aboveenvbreak
-  \itemmax=\itemindent
-  \advance\itemmax by -\itemmargin
-  \advance\leftskip by \itemindent
-  \exdentamount=\itemindent
-  \parindent=0pt
-  \parskip=\smallskipamount
-  \ifdim\parskip=0pt \parskip=2pt \fi
-  %
-  % Try typesetting the item mark so that if the document erroneously says
-  % something like @itemize @samp (intending @table), there's an error
-  % right away at the @itemize.  It's not the best error message in the
-  % world, but it's better than leaving it to the @item.  This means if
-  % the user wants an empty mark, they have to say @w{} not just @w.
-  \def\itemcontents{#1}%
-  \setbox0 = \hbox{\itemcontents}%
-  %
-  % @itemize with no arg is equivalent to @itemize @bullet.
-  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
-  %
-  \let\item=\itemizeitem
-}
-
-% Definition of @item while inside @itemize and @enumerate.
-%
-\def\itemizeitem{%
-  \advance\itemno by 1  % for enumerations
-  {\let\par=\endgraf \smallbreak}% reasonable place to break
-  {%
-   % If the document has an @itemize directly after a section title, a
-   % \nobreak will be last on the list, and \sectionheading will have
-   % done a \vskip-\parskip.  In that case, we don't want to zero
-   % parskip, or the item text will crash with the heading.  On the
-   % other hand, when there is normal text preceding the item (as there
-   % usually is), we do want to zero parskip, or there would be too much
-   % space.  In that case, we won't have a \nobreak before.  At least
-   % that's the theory.
-   \ifnum\lastpenalty<10000 \parskip=0in \fi
-   \noindent
-   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
-   %
-   \vadjust{\penalty 1200}}% not good to break after first line of item.
-  \flushcr
-}
-
-% \splitoff TOKENS\endmark defines \first to be the first token in
-% TOKENS, and \rest to be the remainder.
-%
-\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
-
-% Allow an optional argument of an uppercase letter, lowercase letter,
-% or number, to specify the first label in the enumerated list.  No
-% argument is the same as `1'.
-%
-\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
-\def\enumeratey #1 #2\endenumeratey{%
-  % If we were given no argument, pretend we were given `1'.
-  \def\thearg{#1}%
-  \ifx\thearg\empty \def\thearg{1}\fi
-  %
-  % Detect if the argument is a single token.  If so, it might be a
-  % letter.  Otherwise, the only valid thing it can be is a number.
-  % (We will always have one token, because of the test we just made.
-  % This is a good thing, since \splitoff doesn't work given nothing at
-  % all -- the first parameter is undelimited.)
-  \expandafter\splitoff\thearg\endmark
-  \ifx\rest\empty
-    % Only one token in the argument.  It could still be anything.
-    % A ``lowercase letter'' is one whose \lccode is nonzero.
-    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
-    %   not equal to itself.
-    % Otherwise, we assume it's a number.
-    %
-    % We need the \relax at the end of the \ifnum lines to stop TeX from
-    % continuing to look for a <number>.
-    %
-    \ifnum\lccode\expandafter`\thearg=0\relax
-      \numericenumerate % a number (we hope)
-    \else
-      % It's a letter.
-      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
-        \lowercaseenumerate % lowercase letter
-      \else
-        \uppercaseenumerate % uppercase letter
-      \fi
-    \fi
-  \else
-    % Multiple tokens in the argument.  We hope it's a number.
-    \numericenumerate
-  \fi
-}
-
-% An @enumerate whose labels are integers.  The starting integer is
-% given in \thearg.
-%
-\def\numericenumerate{%
-  \itemno = \thearg
-  \startenumeration{\the\itemno}%
-}
-
-% The starting (lowercase) letter is in \thearg.
-\def\lowercaseenumerate{%
-  \itemno = \expandafter`\thearg
-  \startenumeration{%
-    % Be sure we're not beyond the end of the alphabet.
-    \ifnum\itemno=0
-      \errmessage{No more lowercase letters in @enumerate; get a bigger
-                  alphabet}%
-    \fi
-    \char\lccode\itemno
-  }%
-}
-
-% The starting (uppercase) letter is in \thearg.
-\def\uppercaseenumerate{%
-  \itemno = \expandafter`\thearg
-  \startenumeration{%
-    % Be sure we're not beyond the end of the alphabet.
-    \ifnum\itemno=0
-      \errmessage{No more uppercase letters in @enumerate; get a bigger
-                  alphabet}
-    \fi
-    \char\uccode\itemno
-  }%
-}
-
-% Call \doitemize, adding a period to the first argument and supplying the
-% common last two arguments.  Also subtract one from the initial value in
-% \itemno, since @item increments \itemno.
-%
-\def\startenumeration#1{%
-  \advance\itemno by -1
-  \doitemize{#1.}\flushcr
-}
-
-% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
-% to @enumerate.
-%
-\def\alphaenumerate{\enumerate{a}}
-\def\capsenumerate{\enumerate{A}}
-\def\Ealphaenumerate{\Eenumerate}
-\def\Ecapsenumerate{\Eenumerate}
-
-
-% @multitable macros
-% Amy Hendrickson, 8/18/94, 3/6/96
-%
-% @multitable ... @end multitable will make as many columns as desired.
-% Contents of each column will wrap at width given in preamble.  Width
-% can be specified either with sample text given in a template line,
-% or in percent of \hsize, the current width of text on page.
-
-% Table can continue over pages but will only break between lines.
-
-% To make preamble:
-%
-% Either define widths of columns in terms of percent of \hsize:
-%   @multitable @columnfractions .25 .3 .45
-%   @item ...
-%
-%   Numbers following @columnfractions are the percent of the total
-%   current hsize to be used for each column. You may use as many
-%   columns as desired.
-
-
-% Or use a template:
-%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-%   @item ...
-%   using the widest term desired in each column.
-
-% Each new table line starts with @item, each subsequent new column
-% starts with @tab. Empty columns may be produced by supplying @tab's
-% with nothing between them for as many times as empty columns are needed,
-% ie, @tab@tab@tab will produce two empty columns.
-
-% @item, @tab do not need to be on their own lines, but it will not hurt
-% if they are.
-
-% Sample multitable:
-
-%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
-%   @item first col stuff @tab second col stuff @tab third col
-%   @item
-%   first col stuff
-%   @tab
-%   second col stuff
-%   @tab
-%   third col
-%   @item first col stuff @tab second col stuff
-%   @tab Many paragraphs of text may be used in any column.
-%
-%         They will wrap at the width determined by the template.
-%   @item@tab@tab This will be in third column.
-%   @end multitable
-
-% Default dimensions may be reset by user.
-% @multitableparskip is vertical space between paragraphs in table.
-% @multitableparindent is paragraph indent in table.
-% @multitablecolmargin is horizontal space to be left between columns.
-% @multitablelinespace is space to leave between table items, baseline
-%                                                            to baseline.
-%   0pt means it depends on current normal line spacing.
-%
-\newskip\multitableparskip
-\newskip\multitableparindent
-\newdimen\multitablecolspace
-\newskip\multitablelinespace
-\multitableparskip=0pt
-\multitableparindent=6pt
-\multitablecolspace=12pt
-\multitablelinespace=0pt
-
-% Macros used to set up halign preamble:
-%
-\let\endsetuptable\relax
-\def\xendsetuptable{\endsetuptable}
-\let\columnfractions\relax
-\def\xcolumnfractions{\columnfractions}
-\newif\ifsetpercent
-
-% #1 is the @columnfraction, usually a decimal number like .5, but might
-% be just 1.  We just use it, whatever it is.
-%
-\def\pickupwholefraction#1 {%
-  \global\advance\colcount by 1
-  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
-  \setuptable
-}
-
-\newcount\colcount
-\def\setuptable#1{%
-  \def\firstarg{#1}%
-  \ifx\firstarg\xendsetuptable
-    \let\go = \relax
-  \else
-    \ifx\firstarg\xcolumnfractions
-      \global\setpercenttrue
-    \else
-      \ifsetpercent
-         \let\go\pickupwholefraction
-      \else
-         \global\advance\colcount by 1
-         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
-                   % separator; typically that is always in the input, anyway.
-         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
-      \fi
-    \fi
-    \ifx\go\pickupwholefraction
-      % Put the argument back for the \pickupwholefraction call, so
-      % we'll always have a period there to be parsed.
-      \def\go{\pickupwholefraction#1}%
-    \else
-      \let\go = \setuptable
-    \fi%
-  \fi
-  \go
-}
-
-% multitable-only commands.
-% 
-% @headitem starts a heading row, which we typeset in bold.  Assignments
-% have to be global since we are inside the implicit group of an
-% alignment entry.  \everycr below resets \everytab so we don't have to
-% undo it ourselves.
-\def\headitemfont{\b}% for people to use in the template row; not changeable
-\def\headitem{%
-  \checkenv\multitable
-  \crcr
-  \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings
-  \global\everytab={\bf}% can't use \headitemfont since the parsing differs
-  \the\everytab % for the first item
-}%
-%
-% default for tables with no headings.
-\let\headitemcrhook=\relax
-%
-% A \tab used to include \hskip1sp.  But then the space in a template
-% line is not enough.  That is bad.  So let's go back to just `&' until
-% we again encounter the problem the 1sp was intended to solve.
-%                                      --karl, nathan@acm.org, 20apr99.
-\def\tab{\checkenv\multitable &\the\everytab}%
-
-% @multitable ... @end multitable definitions:
-%
-\newtoks\everytab  % insert after every tab.
-%
-\envdef\multitable{%
-  \vskip\parskip
-  \startsavinginserts
-  %
-  % @item within a multitable starts a normal row.
-  % We use \def instead of \let so that if one of the multitable entries
-  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
-  % \endtemplate) expanding \doitemize.
-  \def\item{\crcr}%
-  %
-  \tolerance=9500
-  \hbadness=9500
-  \setmultitablespacing
-  \parskip=\multitableparskip
-  \parindent=\multitableparindent
-  \overfullrule=0pt
-  \global\colcount=0
-  %
-  \everycr = {%
-    \noalign{%
-      \global\everytab={}% Reset from possible headitem.
-      \global\colcount=0 % Reset the column counter.
-      %
-      % Check for saved footnotes, etc.:
-      \checkinserts
-      %
-      % Perhaps a \nobreak, then reset:
-      \headitemcrhook
-      \global\let\headitemcrhook=\relax
-    }%
-  }%
-  %
-  \parsearg\domultitable
-}
-\def\domultitable#1{%
-  % To parse everything between @multitable and @item:
-  \setuptable#1 \endsetuptable
-  %
-  % This preamble sets up a generic column definition, which will
-  % be used as many times as user calls for columns.
-  % \vtop will set a single line and will also let text wrap and
-  % continue for many paragraphs if desired.
-  \halign\bgroup &%
-    \global\advance\colcount by 1
-    \multistrut
-    \vtop{%
-      % Use the current \colcount to find the correct column width:
-      \hsize=\expandafter\csname col\the\colcount\endcsname
-      %
-      % In order to keep entries from bumping into each other
-      % we will add a \leftskip of \multitablecolspace to all columns after
-      % the first one.
-      %
-      % If a template has been used, we will add \multitablecolspace
-      % to the width of each template entry.
-      %
-      % If the user has set preamble in terms of percent of \hsize we will
-      % use that dimension as the width of the column, and the \leftskip
-      % will keep entries from bumping into each other.  Table will start at
-      % left margin and final column will justify at right margin.
-      %
-      % Make sure we don't inherit \rightskip from the outer environment.
-      \rightskip=0pt
-      \ifnum\colcount=1
-       % The first column will be indented with the surrounding text.
-       \advance\hsize by\leftskip
-      \else
-       \ifsetpercent \else
-         % If user has not set preamble in terms of percent of \hsize
-         % we will advance \hsize by \multitablecolspace.
-         \advance\hsize by \multitablecolspace
-       \fi
-       % In either case we will make \leftskip=\multitablecolspace:
-      \leftskip=\multitablecolspace
-      \fi
-      % Ignoring space at the beginning and end avoids an occasional spurious
-      % blank line, when TeX decides to break the line at the space before the
-      % box from the multistrut, so the strut ends up on a line by itself.
-      % For example:
-      % @multitable @columnfractions .11 .89
-      % @item @code{#}
-      % @tab Legal holiday which is valid in major parts of the whole country.
-      % Is automatically provided with highlighting sequences respectively
-      % marking characters.
-      \noindent\ignorespaces##\unskip\multistrut
-    }\cr
-}
-\def\Emultitable{%
-  \crcr
-  \egroup % end the \halign
-  \global\setpercentfalse
-}
-
-\def\setmultitablespacing{%
-  \def\multistrut{\strut}% just use the standard line spacing
-  %
-  % Compute \multitablelinespace (if not defined by user) for use in
-  % \multitableparskip calculation.  We used define \multistrut based on
-  % this, but (ironically) that caused the spacing to be off.
-  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
-\ifdim\multitablelinespace=0pt
-\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
-\global\advance\multitablelinespace by-\ht0
-\fi
-% Test to see if parskip is larger than space between lines of
-% table. If not, do nothing.
-%        If so, set to same dimension as multitablelinespace.
-\ifdim\multitableparskip>\multitablelinespace
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
-                                      % than skip between lines in the table.
-\fi%
-\ifdim\multitableparskip=0pt
-\global\multitableparskip=\multitablelinespace
-\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
-                                      % than skip between lines in the table.
-\fi}
-
-
-\message{conditionals,}
-
-% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
-% @ifnotxml always succeed.  They currently do nothing; we don't
-% attempt to check whether the conditionals are properly nested.  But we
-% have to remember that they are conditionals, so that @end doesn't
-% attempt to close an environment group.
-%
-\def\makecond#1{%
-  \expandafter\let\csname #1\endcsname = \relax
-  \expandafter\let\csname iscond.#1\endcsname = 1
-}
-\makecond{iftex}
-\makecond{ifnotdocbook}
-\makecond{ifnothtml}
-\makecond{ifnotinfo}
-\makecond{ifnotplaintext}
-\makecond{ifnotxml}
-
-% Ignore @ignore, @ifhtml, @ifinfo, and the like.
-%
-\def\direntry{\doignore{direntry}}
-\def\documentdescription{\doignore{documentdescription}}
-\def\docbook{\doignore{docbook}}
-\def\html{\doignore{html}}
-\def\ifdocbook{\doignore{ifdocbook}}
-\def\ifhtml{\doignore{ifhtml}}
-\def\ifinfo{\doignore{ifinfo}}
-\def\ifnottex{\doignore{ifnottex}}
-\def\ifplaintext{\doignore{ifplaintext}}
-\def\ifxml{\doignore{ifxml}}
-\def\ignore{\doignore{ignore}}
-\def\menu{\doignore{menu}}
-\def\xml{\doignore{xml}}
-
-% Ignore text until a line `@end #1', keeping track of nested conditionals.
-%
-% A count to remember the depth of nesting.
-\newcount\doignorecount
-
-\def\doignore#1{\begingroup
-  % Scan in ``verbatim'' mode:
-  \obeylines
-  \catcode`\@ = \other
-  \catcode`\{ = \other
-  \catcode`\} = \other
-  %
-  % Make sure that spaces turn into tokens that match what \doignoretext wants.
-  \spaceisspace
-  %
-  % Count number of #1's that we've seen.
-  \doignorecount = 0
-  %
-  % Swallow text until we reach the matching `@end #1'.
-  \dodoignore{#1}%
-}
-
-{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
-  \obeylines %
-  %
-  \gdef\dodoignore#1{%
-    % #1 contains the command name as a string, e.g., `ifinfo'.
-    %
-    % Define a command to find the next `@end #1'.
-    \long\def\doignoretext##1^^M@end #1{%
-      \doignoretextyyy##1^^M@#1\_STOP_}%
-    %
-    % And this command to find another #1 command, at the beginning of a
-    % line.  (Otherwise, we would consider a line `@c @ifset', for
-    % example, to count as an @ifset for nesting.)
-    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
-    %
-    % And now expand that command.
-    \doignoretext ^^M%
-  }%
-}
-
-\def\doignoreyyy#1{%
-  \def\temp{#1}%
-  \ifx\temp\empty                      % Nothing found.
-    \let\next\doignoretextzzz
-  \else                                        % Found a nested condition, ...
-    \advance\doignorecount by 1
-    \let\next\doignoretextyyy          % ..., look for another.
-    % If we're here, #1 ends with ^^M\ifinfo (for example).
-  \fi
-  \next #1% the token \_STOP_ is present just after this macro.
-}
-
-% We have to swallow the remaining "\_STOP_".
-%
-\def\doignoretextzzz#1{%
-  \ifnum\doignorecount = 0     % We have just found the outermost @end.
-    \let\next\enddoignore
-  \else                                % Still inside a nested condition.
-    \advance\doignorecount by -1
-    \let\next\doignoretext      % Look for the next @end.
-  \fi
-  \next
-}
-
-% Finish off ignored text.
-{ \obeylines%
-  % Ignore anything after the last `@end #1'; this matters in verbatim
-  % environments, where otherwise the newline after an ignored conditional
-  % would result in a blank line in the output.
-  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
-}
-
-
-% @set VAR sets the variable VAR to an empty value.
-% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
-%
-% Since we want to separate VAR from REST-OF-LINE (which might be
-% empty), we can't just use \parsearg; we have to insert a space of our
-% own to delimit the rest of the line, and then take it out again if we
-% didn't need it.
-% We rely on the fact that \parsearg sets \catcode`\ =10.
-%
-\parseargdef\set{\setyyy#1 \endsetyyy}
-\def\setyyy#1 #2\endsetyyy{%
-  {%
-    \makevalueexpandable
-    \def\temp{#2}%
-    \edef\next{\gdef\makecsname{SET#1}}%
-    \ifx\temp\empty
-      \next{}%
-    \else
-      \setzzz#2\endsetzzz
-    \fi
-  }%
-}
-% Remove the trailing space \setxxx inserted.
-\def\setzzz#1 \endsetzzz{\next{#1}}
-
-% @clear VAR clears (i.e., unsets) the variable VAR.
-%
-\parseargdef\clear{%
-  {%
-    \makevalueexpandable
-    \global\expandafter\let\csname SET#1\endcsname=\relax
-  }%
-}
-
-% @value{foo} gets the text saved in variable foo.
-\def\value{\begingroup\makevalueexpandable\valuexxx}
-\def\valuexxx#1{\expandablevalue{#1}\endgroup}
-{
-  \catcode`\-=\active \catcode`\_=\active
-  %
-  \gdef\makevalueexpandable{%
-    \let\value = \expandablevalue
-    % We don't want these characters active, ...
-    \catcode`\-=\other \catcode`\_=\other
-    % ..., but we might end up with active ones in the argument if
-    % we're called from @code, as @code{@value{foo-bar_}}, though.
-    % So \let them to their normal equivalents.
-    \let-\normaldash \let_\normalunderscore
-  }
-}
-
-% We have this subroutine so that we can handle at least some @value's
-% properly in indexes (we call \makevalueexpandable in \indexdummies).
-% The command has to be fully expandable (if the variable is set), since
-% the result winds up in the index file.  This means that if the
-% variable's value contains other Texinfo commands, it's almost certain
-% it will fail (although perhaps we could fix that with sufficient work
-% to do a one-level expansion on the result, instead of complete).
-% 
-% Unfortunately, this has the consequence that when _ is in the *value*
-% of an @set, it does not print properly in the roman fonts (get the cmr
-% dot accent at position 126 instead).  No fix comes to mind, and it's
-% been this way since 2003 or earlier, so just ignore it.
-% 
-\def\expandablevalue#1{%
-  \expandafter\ifx\csname SET#1\endcsname\relax
-    {[No value for ``#1'']}%
-    \message{Variable `#1', used in @value, is not set.}%
-  \else
-    \csname SET#1\endcsname
-  \fi
-}
-
-% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
-% with @set.
-% 
-% To get the special treatment we need for `@end ifset,' we call
-% \makecond and then redefine.
-%
-\makecond{ifset}
-\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
-\def\doifset#1#2{%
-  {%
-    \makevalueexpandable
-    \let\next=\empty
-    \expandafter\ifx\csname SET#2\endcsname\relax
-      #1% If not set, redefine \next.
-    \fi
-    \expandafter
-  }\next
-}
-\def\ifsetfail{\doignore{ifset}}
-
-% @ifclear VAR ... @end executes the `...' iff VAR has never been
-% defined with @set, or has been undefined with @clear.
-%
-% The `\else' inside the `\doifset' parameter is a trick to reuse the
-% above code: if the variable is not set, do nothing, if it is set,
-% then redefine \next to \ifclearfail.
-%
-\makecond{ifclear}
-\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
-\def\ifclearfail{\doignore{ifclear}}
-
-% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
-% without the @) is in fact defined.  We can only feasibly check at the
-% TeX level, so something like `mathcode' is going to considered
-% defined even though it is not a Texinfo command.
-% 
-\makecond{ifcommanddefined}
-\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
-%
-\def\doifcmddefined#1#2{{%
-    \makevalueexpandable
-    \let\next=\empty
-    \expandafter\ifx\csname #2\endcsname\relax
-      #1% If not defined, \let\next as above.
-    \fi
-    \expandafter
-  }\next
-}
-\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
-
-% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
-\makecond{ifcommandnotdefined}
-\def\ifcommandnotdefined{%
-  \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
-\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
-
-% Set the `txicommandconditionals' variable, so documents have a way to
-% test if the @ifcommand...defined conditionals are available.
-\set txicommandconditionals
-
-% @dircategory CATEGORY  -- specify a category of the dir file
-% which this file should belong to.  Ignore this in TeX.
-\let\dircategory=\comment
-
-% @defininfoenclose.
-\let\definfoenclose=\comment
-
-
-\message{indexing,}
-% Index generation facilities
-
-% Define \newwrite to be identical to plain tex's \newwrite
-% except not \outer, so it can be used within macros and \if's.
-\edef\newwrite{\makecsname{ptexnewwrite}}
-
-% \newindex {foo} defines an index named foo.
-% It automatically defines \fooindex such that
-% \fooindex ...rest of line... puts an entry in the index foo.
-% It also defines \fooindfile to be the number of the output channel for
-% the file that accumulates this index.  The file's extension is foo.
-% The name of an index should be no more than 2 characters long
-% for the sake of vms.
-%
-\def\newindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1 % Open the file
-  \fi
-  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
-    \noexpand\doindex{#1}}
-}
-
-% @defindex foo  ==  \newindex{foo}
-%
-\def\defindex{\parsearg\newindex}
-
-% Define @defcodeindex, like @defindex except put all entries in @code.
-%
-\def\defcodeindex{\parsearg\newcodeindex}
-%
-\def\newcodeindex#1{%
-  \iflinks
-    \expandafter\newwrite \csname#1indfile\endcsname
-    \openout \csname#1indfile\endcsname \jobname.#1
-  \fi
-  \expandafter\xdef\csname#1index\endcsname{%
-    \noexpand\docodeindex{#1}}%
-}
-
-
-% @synindex foo bar    makes index foo feed into index bar.
-% Do this instead of @defindex foo if you don't want it as a separate index.
-%
-% @syncodeindex foo bar   similar, but put all entries made for index foo
-% inside @code.
-%
-\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
-\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
-
-% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
-% #3 the target index (bar).
-\def\dosynindex#1#2#3{%
-  % Only do \closeout if we haven't already done it, else we'll end up
-  % closing the target index.
-  \expandafter \ifx\csname donesynindex#2\endcsname \relax
-    % The \closeout helps reduce unnecessary open files; the limit on the
-    % Acorn RISC OS is a mere 16 files.
-    \expandafter\closeout\csname#2indfile\endcsname
-    \expandafter\let\csname donesynindex#2\endcsname = 1
-  \fi
-  % redefine \fooindfile:
-  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
-  \expandafter\let\csname#2indfile\endcsname=\temp
-  % redefine \fooindex:
-  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
-}
-
-% Define \doindex, the driver for all \fooindex macros.
-% Argument #1 is generated by the calling \fooindex macro,
-%  and it is "foo", the name of the index.
-
-% \doindex just uses \parsearg; it calls \doind for the actual work.
-% This is because \doind is more useful to call from other macros.
-
-% There is also \dosubind {index}{topic}{subtopic}
-% which makes an entry in a two-level index such as the operation index.
-
-\def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer}
-\def\singleindexer #1{\doind{\indexname}{#1}}
-
-% like the previous two, but they put @code around the argument.
-\def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer}
-\def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}}
-
-% Take care of Texinfo commands that can appear in an index entry.
-% Since there are some commands we want to expand, and others we don't,
-% we have to laboriously prevent expansion for those that we don't.
-%
-\def\indexdummies{%
-  \escapechar = `\\     % use backslash in output files.
-  \def\@{@}% change to @@ when we switch to @ as escape char in index files.
-  \def\ {\realbackslash\space }%
-  %
-  % Need these unexpandable (because we define \tt as a dummy)
-  % definitions when @{ or @} appear in index entry text.  Also, more
-  % complicated, when \tex is in effect and \{ is a \delimiter again.
-  % We can't use \lbracecmd and \rbracecmd because texindex assumes
-  % braces and backslashes are used only as delimiters.  Perhaps we
-  % should use @lbracechar and @rbracechar?
-  \def\{{{\tt\char123}}%
-  \def\}{{\tt\char125}}%
-  %
-  % I don't entirely understand this, but when an index entry is
-  % generated from a macro call, the \endinput which \scanmacro inserts
-  % causes processing to be prematurely terminated.  This is,
-  % apparently, because \indexsorttmp is fully expanded, and \endinput
-  % is an expandable command.  The redefinition below makes \endinput
-  % disappear altogether for that purpose -- although logging shows that
-  % processing continues to some further point.  On the other hand, it
-  % seems \endinput does not hurt in the printed index arg, since that
-  % is still getting written without apparent harm.
-  %
-  % Sample source (mac-idx3.tex, reported by Graham Percival to
-  % help-texinfo, 22may06):
-  % @macro funindex {WORD}
-  % @findex xyz
-  % @end macro
-  % ...
-  % @funindex commtest
-  % This is not enough to reproduce the bug, but it gives the flavor.
-  %
-  % Sample whatsit resulting:
-  % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}}
-  %
-  % So:
-  \let\endinput = \empty
-  %
-  % Do the redefinitions.
-  \commondummies
-}
-
-% For the aux and toc files, @ is the escape character.  So we want to
-% redefine everything using @ as the escape character (instead of
-% \realbackslash, still used for index files).  When everything uses @,
-% this will be simpler.
-%
-\def\atdummies{%
-  \def\@{@@}%
-  \def\ {@ }%
-  \let\{ = \lbraceatcmd
-  \let\} = \rbraceatcmd
-  %
-  % Do the redefinitions.
-  \commondummies
-  \otherbackslash
-}
-
-% Called from \indexdummies and \atdummies.
-%
-\def\commondummies{%
-  %
-  % \definedummyword defines \#1 as \string\#1\space, thus effectively
-  % preventing its expansion.  This is used only for control words,
-  % not control letters, because the \space would be incorrect for
-  % control characters, but is needed to separate the control word
-  % from whatever follows.
-  %
-  % For control letters, we have \definedummyletter, which omits the
-  % space.
-  %
-  % These can be used both for control words that take an argument and
-  % those that do not.  If it is followed by {arg} in the input, then
-  % that will dutifully get written to the index (or wherever).
-  %
-  \def\definedummyword  ##1{\def##1{\string##1\space}}%
-  \def\definedummyletter##1{\def##1{\string##1}}%
-  \let\definedummyaccent\definedummyletter
-  %
-  \commondummiesnofonts
-  %
-  \definedummyletter\_%
-  \definedummyletter\-%
-  %
-  % Non-English letters.
-  \definedummyword\AA
-  \definedummyword\AE
-  \definedummyword\DH
-  \definedummyword\L
-  \definedummyword\O
-  \definedummyword\OE
-  \definedummyword\TH
-  \definedummyword\aa
-  \definedummyword\ae
-  \definedummyword\dh
-  \definedummyword\exclamdown
-  \definedummyword\l
-  \definedummyword\o
-  \definedummyword\oe
-  \definedummyword\ordf
-  \definedummyword\ordm
-  \definedummyword\questiondown
-  \definedummyword\ss
-  \definedummyword\th
-  %
-  % Although these internal commands shouldn't show up, sometimes they do.
-  \definedummyword\bf
-  \definedummyword\gtr
-  \definedummyword\hat
-  \definedummyword\less
-  \definedummyword\sf
-  \definedummyword\sl
-  \definedummyword\tclose
-  \definedummyword\tt
-  %
-  \definedummyword\LaTeX
-  \definedummyword\TeX
-  %
-  % Assorted special characters.
-  \definedummyword\arrow
-  \definedummyword\bullet
-  \definedummyword\comma
-  \definedummyword\copyright
-  \definedummyword\registeredsymbol
-  \definedummyword\dots
-  \definedummyword\enddots
-  \definedummyword\entrybreak
-  \definedummyword\equiv
-  \definedummyword\error
-  \definedummyword\euro
-  \definedummyword\expansion
-  \definedummyword\geq
-  \definedummyword\guillemetleft
-  \definedummyword\guillemetright
-  \definedummyword\guilsinglleft
-  \definedummyword\guilsinglright
-  \definedummyword\lbracechar
-  \definedummyword\leq
-  \definedummyword\minus
-  \definedummyword\ogonek
-  \definedummyword\pounds
-  \definedummyword\point
-  \definedummyword\print
-  \definedummyword\quotedblbase
-  \definedummyword\quotedblleft
-  \definedummyword\quotedblright
-  \definedummyword\quoteleft
-  \definedummyword\quoteright
-  \definedummyword\quotesinglbase
-  \definedummyword\rbracechar
-  \definedummyword\result
-  \definedummyword\textdegree
-  %
-  % We want to disable all macros so that they are not expanded by \write.
-  \macrolist
-  %
-  \normalturnoffactive
-  %
-  % Handle some cases of @value -- where it does not contain any
-  % (non-fully-expandable) commands.
-  \makevalueexpandable
-}
-
-% \commondummiesnofonts: common to \commondummies and \indexnofonts.
-%
-\def\commondummiesnofonts{%
-  % Control letters and accents.
-  \definedummyletter\!%
-  \definedummyaccent\"%
-  \definedummyaccent\'%
-  \definedummyletter\*%
-  \definedummyaccent\,%
-  \definedummyletter\.%
-  \definedummyletter\/%
-  \definedummyletter\:%
-  \definedummyaccent\=%
-  \definedummyletter\?%
-  \definedummyaccent\^%
-  \definedummyaccent\`%
-  \definedummyaccent\~%
-  \definedummyword\u
-  \definedummyword\v
-  \definedummyword\H
-  \definedummyword\dotaccent
-  \definedummyword\ogonek
-  \definedummyword\ringaccent
-  \definedummyword\tieaccent
-  \definedummyword\ubaraccent
-  \definedummyword\udotaccent
-  \definedummyword\dotless
-  %
-  % Texinfo font commands.
-  \definedummyword\b
-  \definedummyword\i
-  \definedummyword\r
-  \definedummyword\sansserif
-  \definedummyword\sc
-  \definedummyword\slanted
-  \definedummyword\t
-  %
-  % Commands that take arguments.
-  \definedummyword\abbr
-  \definedummyword\acronym
-  \definedummyword\anchor
-  \definedummyword\cite
-  \definedummyword\code
-  \definedummyword\command
-  \definedummyword\dfn
-  \definedummyword\dmn
-  \definedummyword\email
-  \definedummyword\emph
-  \definedummyword\env
-  \definedummyword\file
-  \definedummyword\image
-  \definedummyword\indicateurl
-  \definedummyword\inforef
-  \definedummyword\kbd
-  \definedummyword\key
-  \definedummyword\math
-  \definedummyword\option
-  \definedummyword\pxref
-  \definedummyword\ref
-  \definedummyword\samp
-  \definedummyword\strong
-  \definedummyword\tie
-  \definedummyword\uref
-  \definedummyword\url
-  \definedummyword\var
-  \definedummyword\verb
-  \definedummyword\w
-  \definedummyword\xref
-  %
-  % Consider:
-  %   @macro mkind{arg1,arg2}
-  %   @cindex \arg2\
-  %   @end macro
-  %   @mkind{foo, bar}
-  % The space after the comma will end up in the temporary definition
-  % that we make for arg2 (see \parsemargdef ff.).  We want all this to be
-  % expanded for the sake of the index, so we end up just seeing "bar".
-  \let\xeatspaces = \eatspaces
-}
-
-% For testing: output @{ and @} in index sort strings as \{ and \}.
-\newif\ifusebracesinindexes
-
-% \indexnofonts is used when outputting the strings to sort the index
-% by, and when constructing control sequence names.  It eliminates all
-% control sequences and just writes whatever the best ASCII sort string
-% would be for a given command (usually its argument).
-%
-\def\indexnofonts{%
-  % Accent commands should become @asis.
-  \def\definedummyaccent##1{\let##1\asis}%
-  % We can just ignore other control letters.
-  \def\definedummyletter##1{\let##1\empty}%
-  % All control words become @asis by default; overrides below.
-  \let\definedummyword\definedummyaccent
-  %
-  \commondummiesnofonts
-  %
-  % Don't no-op \tt, since it isn't a user-level command
-  % and is used in the definitions of the active chars like <, >, |, etc.
-  % Likewise with the other plain tex font commands.
-  %\let\tt=\asis
-  %
-  \def\ { }%
-  \def\@{@}%
-  \def\_{\normalunderscore}%
-  \def\-{}% @- shouldn't affect sorting
-  %
-  % Unfortunately, texindex is not prepared to handle braces in the
-  % content at all.  So for index sorting, we map @{ and @} to strings
-  % starting with |, since that ASCII character is between ASCII { and }.
-  \ifusebracesinindexes
-    \def\lbracechar{\lbracecmd}%
-    \def\rbracechar{\rbracecmd}%
-  \else
-    \def\lbracechar{|a}%
-    \def\rbracechar{|b}%
-  \fi
-  \let\{=\lbracechar
-  \let\}=\rbracechar
-  %
-  %
-  % Non-English letters.
-  \def\AA{AA}%
-  \def\AE{AE}%
-  \def\DH{DZZ}%
-  \def\L{L}%
-  \def\OE{OE}%
-  \def\O{O}%
-  \def\TH{ZZZ}%
-  \def\aa{aa}%
-  \def\ae{ae}%
-  \def\dh{dzz}%
-  \def\exclamdown{!}%
-  \def\l{l}%
-  \def\oe{oe}%
-  \def\ordf{a}%
-  \def\ordm{o}%
-  \def\o{o}%
-  \def\questiondown{?}%
-  \def\ss{ss}%
-  \def\th{zzz}%
-  %
-  \def\LaTeX{LaTeX}%
-  \def\TeX{TeX}%
-  %
-  % Assorted special characters.
-  % (The following {} will end up in the sort string, but that's ok.)
-  \def\arrow{->}%
-  \def\bullet{bullet}%
-  \def\comma{,}%
-  \def\copyright{copyright}%
-  \def\dots{...}%
-  \def\enddots{...}%
-  \def\equiv{==}%
-  \def\error{error}%
-  \def\euro{euro}%
-  \def\expansion{==>}%
-  \def\geq{>=}%
-  \def\guillemetleft{<<}%
-  \def\guillemetright{>>}%
-  \def\guilsinglleft{<}%
-  \def\guilsinglright{>}%
-  \def\leq{<=}%
-  \def\minus{-}%
-  \def\point{.}%
-  \def\pounds{pounds}%
-  \def\print{-|}%
-  \def\quotedblbase{"}%
-  \def\quotedblleft{"}%
-  \def\quotedblright{"}%
-  \def\quoteleft{`}%
-  \def\quoteright{'}%
-  \def\quotesinglbase{,}%
-  \def\registeredsymbol{R}%
-  \def\result{=>}%
-  \def\textdegree{o}%
-  %
-  \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax
-  \else \indexlquoteignore \fi
-  %
-  % We need to get rid of all macros, leaving only the arguments (if present).
-  % Of course this is not nearly correct, but it is the best we can do for now.
-  % makeinfo does not expand macros in the argument to @deffn, which ends up
-  % writing an index entry, and texindex isn't prepared for an index sort entry
-  % that starts with \.
-  %
-  % Since macro invocations are followed by braces, we can just redefine them
-  % to take a single TeX argument.  The case of a macro invocation that
-  % goes to end-of-line is not handled.
-  %
-  \macrolist
-}
-
-% Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us
-% ignore left quotes in the sort term.
-{\catcode`\`=\active
- \gdef\indexlquoteignore{\let`=\empty}}
-
-\let\indexbackslash=0  %overridden during \printindex.
-\let\SETmarginindex=\relax % put index entries in margin (undocumented)?
-
-% Most index entries go through here, but \dosubind is the general case.
-% #1 is the index name, #2 is the entry text.
-\def\doind#1#2{\dosubind{#1}{#2}{}}
-
-% Workhorse for all \fooindexes.
-% #1 is name of index, #2 is stuff to put there, #3 is subentry --
-% empty if called from \doind, as we usually are (the main exception
-% is with most defuns, which call us directly).
-%
-\def\dosubind#1#2#3{%
-  \iflinks
-  {%
-    % Store the main index entry text (including the third arg).
-    \toks0 = {#2}%
-    % If third arg is present, precede it with a space.
-    \def\thirdarg{#3}%
-    \ifx\thirdarg\empty \else
-      \toks0 = \expandafter{\the\toks0 \space #3}%
-    \fi
-    %
-    \edef\writeto{\csname#1indfile\endcsname}%
-    %
-    \safewhatsit\dosubindwrite
-  }%
-  \fi
-}
-
-% Write the entry in \toks0 to the index file:
-%
-\def\dosubindwrite{%
-  % Put the index entry in the margin if desired.
-  \ifx\SETmarginindex\relax\else
-    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}%
-  \fi
-  %
-  % Remember, we are within a group.
-  \indexdummies % Must do this here, since \bf, etc expand at this stage
-  \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now
-      % so it will be output as is; and it will print as backslash.
-  %
-  % Process the index entry with all font commands turned off, to
-  % get the string to sort by.
-  {\indexnofonts
-   \edef\temp{\the\toks0}% need full expansion
-   \xdef\indexsorttmp{\temp}%
-  }%
-  %
-  % Set up the complete index entry, with both the sort key and
-  % the original text, including any font commands.  We write
-  % three arguments to \entry to the .?? file (four in the
-  % subentry case), texindex reduces to two when writing the .??s
-  % sorted result.
-  \edef\temp{%
-    \write\writeto{%
-      \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}%
-  }%
-  \temp
-}
-
-% Take care of unwanted page breaks/skips around a whatsit:
-%
-% If a skip is the last thing on the list now, preserve it
-% by backing up by \lastskip, doing the \write, then inserting
-% the skip again.  Otherwise, the whatsit generated by the
-% \write or \pdfdest will make \lastskip zero.  The result is that
-% sequences like this:
-% @end defun
-% @tindex whatever
-% @defun ...
-% will have extra space inserted, because the \medbreak in the
-% start of the @defun won't see the skip inserted by the @end of
-% the previous defun.
-%
-% But don't do any of this if we're not in vertical mode.  We
-% don't want to do a \vskip and prematurely end a paragraph.
-%
-% Avoid page breaks due to these extra skips, too.
-%
-% But wait, there is a catch there:
-% We'll have to check whether \lastskip is zero skip.  \ifdim is not
-% sufficient for this purpose, as it ignores stretch and shrink parts
-% of the skip.  The only way seems to be to check the textual
-% representation of the skip.
-%
-% The following is almost like \def\zeroskipmacro{0.0pt} except that
-% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
-%
-\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
-%
-\newskip\whatsitskip
-\newcount\whatsitpenalty
-%
-% ..., ready, GO:
-%
-\def\safewhatsit#1{\ifhmode
-  #1%
- \else
-  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
-  \whatsitskip = \lastskip
-  \edef\lastskipmacro{\the\lastskip}%
-  \whatsitpenalty = \lastpenalty
-  %
-  % If \lastskip is nonzero, that means the last item was a
-  % skip.  And since a skip is discardable, that means this
-  % -\whatsitskip glue we're inserting is preceded by a
-  % non-discardable item, therefore it is not a potential
-  % breakpoint, therefore no \nobreak needed.
-  \ifx\lastskipmacro\zeroskipmacro
-  \else
-    \vskip-\whatsitskip
-  \fi
-  %
-  #1%
-  %
-  \ifx\lastskipmacro\zeroskipmacro
-    % If \lastskip was zero, perhaps the last item was a penalty, and
-    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
-    % to re-insert the same penalty (values >10000 are used for various
-    % signals); since we just inserted a non-discardable item, any
-    % following glue (such as a \parskip) would be a breakpoint.  For example:
-    %   @deffn deffn-whatever
-    %   @vindex index-whatever
-    %   Description.
-    % would allow a break between the index-whatever whatsit
-    % and the "Description." paragraph.
-    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
-  \else
-    % On the other hand, if we had a nonzero \lastskip,
-    % this make-up glue would be preceded by a non-discardable item
-    % (the whatsit from the \write), so we must insert a \nobreak.
-    \nobreak\vskip\whatsitskip
-  \fi
-\fi}
-
-% The index entry written in the file actually looks like
-%  \entry {sortstring}{page}{topic}
-% or
-%  \entry {sortstring}{page}{topic}{subtopic}
-% The texindex program reads in these files and writes files
-% containing these kinds of lines:
-%  \initial {c}
-%     before the first topic whose initial is c
-%  \entry {topic}{pagelist}
-%     for a topic that is used without subtopics
-%  \primary {topic}
-%     for the beginning of a topic that is used with subtopics
-%  \secondary {subtopic}{pagelist}
-%     for each subtopic.
-
-% Define the user-accessible indexing commands
-% @findex, @vindex, @kindex, @cindex.
-
-\def\findex {\fnindex}
-\def\kindex {\kyindex}
-\def\cindex {\cpindex}
-\def\vindex {\vrindex}
-\def\tindex {\tpindex}
-\def\pindex {\pgindex}
-
-\def\cindexsub {\begingroup\obeylines\cindexsub}
-{\obeylines %
-\gdef\cindexsub "#1" #2^^M{\endgroup %
-\dosubind{cp}{#2}{#1}}}
-
-% Define the macros used in formatting output of the sorted index material.
-
-% @printindex causes a particular index (the ??s file) to get printed.
-% It does not print any chapter heading (usually an @unnumbered).
-%
-\parseargdef\printindex{\begingroup
-  \dobreak \chapheadingskip{10000}%
-  %
-  \smallfonts \rm
-  \tolerance = 9500
-  \plainfrenchspacing
-  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
-  %
-  % See if the index file exists and is nonempty.
-  % Change catcode of @ here so that if the index file contains
-  % \initial {@}
-  % as its first line, TeX doesn't complain about mismatched braces
-  % (because it thinks @} is a control sequence).
-  \catcode`\@ = 11
-  \openin 1 \jobname.#1s
-  \ifeof 1
-    % \enddoublecolumns gets confused if there is no text in the index,
-    % and it loses the chapter title and the aux file entries for the
-    % index.  The easiest way to prevent this problem is to make sure
-    % there is some text.
-    \putwordIndexNonexistent
-  \else
-    %
-    % If the index file exists but is empty, then \openin leaves \ifeof
-    % false.  We have to make TeX try to read something from the file, so
-    % it can discover if there is anything in it.
-    \read 1 to \temp
-    \ifeof 1
-      \putwordIndexIsEmpty
-    \else
-      % Index files are almost Texinfo source, but we use \ as the escape
-      % character.  It would be better to use @, but that's too big a change
-      % to make right now.
-      \def\indexbackslash{\backslashcurfont}%
-      \catcode`\\ = 0
-      \escapechar = `\\
-      \begindoublecolumns
-      \input \jobname.#1s
-      \enddoublecolumns
-    \fi
-  \fi
-  \closein 1
-\endgroup}
-
-% These macros are used by the sorted index file itself.
-% Change them to control the appearance of the index.
-
-\def\initial#1{{%
-  % Some minor font changes for the special characters.
-  \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt
-  %
-  % Remove any glue we may have, we'll be inserting our own.
-  \removelastskip
-  %
-  % We like breaks before the index initials, so insert a bonus.
-  \nobreak
-  \vskip 0pt plus 3\baselineskip
-  \penalty 0
-  \vskip 0pt plus -3\baselineskip
-  %
-  % Typeset the initial.  Making this add up to a whole number of
-  % baselineskips increases the chance of the dots lining up from column
-  % to column.  It still won't often be perfect, because of the stretch
-  % we need before each entry, but it's better.
-  %
-  % No shrink because it confuses \balancecolumns.
-  \vskip 1.67\baselineskip plus .5\baselineskip
-  \leftline{\secbf #1}%
-  % Do our best not to break after the initial.
-  \nobreak
-  \vskip .33\baselineskip plus .1\baselineskip
-}}
-
-% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
-% then page number (#2) flushed to the right margin.  It is used for index
-% and table of contents entries.  The paragraph is indented by \leftskip.
-%
-% A straightforward implementation would start like this:
-%      \def\entry#1#2{...
-% But this freezes the catcodes in the argument, and can cause problems to
-% @code, which sets - active.  This problem was fixed by a kludge---
-% ``-'' was active throughout whole index, but this isn't really right.
-% The right solution is to prevent \entry from swallowing the whole text.
-%                                 --kasal, 21nov03
-\def\entry{%
-  \begingroup
-    %
-    % Start a new paragraph if necessary, so our assignments below can't
-    % affect previous text.
-    \par
-    %
-    % Do not fill out the last line with white space.
-    \parfillskip = 0in
-    %
-    % No extra space above this paragraph.
-    \parskip = 0in
-    %
-    % Do not prefer a separate line ending with a hyphen to fewer lines.
-    \finalhyphendemerits = 0
-    %
-    % \hangindent is only relevant when the entry text and page number
-    % don't both fit on one line.  In that case, bob suggests starting the
-    % dots pretty far over on the line.  Unfortunately, a large
-    % indentation looks wrong when the entry text itself is broken across
-    % lines.  So we use a small indentation and put up with long leaders.
-    %
-    % \hangafter is reset to 1 (which is the value we want) at the start
-    % of each paragraph, so we need not do anything with that.
-    \hangindent = 2em
-    %
-    % When the entry text needs to be broken, just fill out the first line
-    % with blank space.
-    \rightskip = 0pt plus1fil
-    %
-    % A bit of stretch before each entry for the benefit of balancing
-    % columns.
-    \vskip 0pt plus1pt
-    %
-    % When reading the text of entry, convert explicit line breaks
-    % from @* into spaces.  The user might give these in long section
-    % titles, for instance.
-    \def\*{\unskip\space\ignorespaces}%
-    \def\entrybreak{\hfil\break}%
-    %
-    % Swallow the left brace of the text (first parameter):
-    \afterassignment\doentry
-    \let\temp =
-}
-\def\entrybreak{\unskip\space\ignorespaces}%
-\def\doentry{%
-    \bgroup % Instead of the swallowed brace.
-      \noindent
-      \aftergroup\finishentry
-      % And now comes the text of the entry.
-}
-\def\finishentry#1{%
-    % #1 is the page number.
-    %
-    % The following is kludged to not output a line of dots in the index if
-    % there are no page numbers.  The next person who breaks this will be
-    % cursed by a Unix daemon.
-    \setbox\boxA = \hbox{#1}%
-    \ifdim\wd\boxA = 0pt
-      \ %
-    \else
-      %
-      % If we must, put the page number on a line of its own, and fill out
-      % this line with blank space.  (The \hfil is overwhelmed with the
-      % fill leaders glue in \indexdotfill if the page number does fit.)
-      \hfil\penalty50
-      \null\nobreak\indexdotfill % Have leaders before the page number.
-      %
-      % The `\ ' here is removed by the implicit \unskip that TeX does as
-      % part of (the primitive) \par.  Without it, a spurious underfull
-      % \hbox ensues.
-      \ifpdf
-       \pdfgettoks#1.%
-       \ \the\toksA
-      \else
-       \ #1%
-      \fi
-    \fi
-    \par
-  \endgroup
-}
-
-% Like plain.tex's \dotfill, except uses up at least 1 em.
-\def\indexdotfill{\cleaders
-  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill}
-
-\def\primary #1{\line{#1\hfil}}
-
-\newskip\secondaryindent \secondaryindent=0.5cm
-\def\secondary#1#2{{%
-  \parfillskip=0in
-  \parskip=0in
-  \hangindent=1in
-  \hangafter=1
-  \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill
-  \ifpdf
-    \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph.
-  \else
-    #2
-  \fi
-  \par
-}}
-
-% Define two-column mode, which we use to typeset indexes.
-% Adapted from the TeXbook, page 416, which is to say,
-% the manmac.tex format used to print the TeXbook itself.
-\catcode`\@=11
-
-\newbox\partialpage
-\newdimen\doublecolumnhsize
-
-\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
-  % Grab any single-column material above us.
-  \output = {%
-    %
-    % Here is a possibility not foreseen in manmac: if we accumulate a
-    % whole lot of material, we might end up calling this \output
-    % routine twice in a row (see the doublecol-lose test, which is
-    % essentially a couple of indexes with @setchapternewpage off).  In
-    % that case we just ship out what is in \partialpage with the normal
-    % output routine.  Generally, \partialpage will be empty when this
-    % runs and this will be a no-op.  See the indexspread.tex test case.
-    \ifvoid\partialpage \else
-      \onepageout{\pagecontents\partialpage}%
-    \fi
-    %
-    \global\setbox\partialpage = \vbox{%
-      % Unvbox the main output page.
-      \unvbox\PAGE
-      \kern-\topskip \kern\baselineskip
-    }%
-  }%
-  \eject % run that output routine to set \partialpage
-  %
-  % Use the double-column output routine for subsequent pages.
-  \output = {\doublecolumnout}%
-  %
-  % Change the page size parameters.  We could do this once outside this
-  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
-  % format, but then we repeat the same computation.  Repeating a couple
-  % of assignments once per index is clearly meaningless for the
-  % execution time, so we may as well do it in one place.
-  %
-  % First we halve the line length, less a little for the gutter between
-  % the columns.  We compute the gutter based on the line length, so it
-  % changes automatically with the paper format.  The magic constant
-  % below is chosen so that the gutter has the same value (well, +-<1pt)
-  % as it did when we hard-coded it.
-  %
-  % We put the result in a separate register, \doublecolumhsize, so we
-  % can restore it in \pagesofar, after \hsize itself has (potentially)
-  % been clobbered.
-  %
-  \doublecolumnhsize = \hsize
-    \advance\doublecolumnhsize by -.04154\hsize
-    \divide\doublecolumnhsize by 2
-  \hsize = \doublecolumnhsize
-  %
-  % Double the \vsize as well.  (We don't need a separate register here,
-  % since nobody clobbers \vsize.)
-  \vsize = 2\vsize
-}
-
-% The double-column output routine for all double-column pages except
-% the last.
-%
-\def\doublecolumnout{%
-  \splittopskip=\topskip \splitmaxdepth=\maxdepth
-  % Get the available space for the double columns -- the normal
-  % (undoubled) page height minus any material left over from the
-  % previous page.
-  \dimen@ = \vsize
-  \divide\dimen@ by 2
-  \advance\dimen@ by -\ht\partialpage
-  %
-  % box0 will be the left-hand column, box2 the right.
-  \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@
-  \onepageout\pagesofar
-  \unvbox255
-  \penalty\outputpenalty
-}
-%
-% Re-output the contents of the output page -- any previous material,
-% followed by the two boxes we just split, in box0 and box2.
-\def\pagesofar{%
-  \unvbox\partialpage
-  %
-  \hsize = \doublecolumnhsize
-  \wd0=\hsize \wd2=\hsize
-  \hbox to\pagewidth{\box0\hfil\box2}%
-}
-%
-% All done with double columns.
-\def\enddoublecolumns{%
-  % The following penalty ensures that the page builder is exercised
-  % _before_ we change the output routine.  This is necessary in the
-  % following situation:
-  %
-  % The last section of the index consists only of a single entry.
-  % Before this section, \pagetotal is less than \pagegoal, so no
-  % break occurs before the last section starts.  However, the last
-  % section, consisting of \initial and the single \entry, does not
-  % fit on the page and has to be broken off.  Without the following
-  % penalty the page builder will not be exercised until \eject
-  % below, and by that time we'll already have changed the output
-  % routine to the \balancecolumns version, so the next-to-last
-  % double-column page will be processed with \balancecolumns, which
-  % is wrong:  The two columns will go to the main vertical list, with
-  % the broken-off section in the recent contributions.  As soon as
-  % the output routine finishes, TeX starts reconsidering the page
-  % break.  The two columns and the broken-off section both fit on the
-  % page, because the two columns now take up only half of the page
-  % goal.  When TeX sees \eject from below which follows the final
-  % section, it invokes the new output routine that we've set after
-  % \balancecolumns below; \onepageout will try to fit the two columns
-  % and the final section into the vbox of \pageheight (see
-  % \pagebody), causing an overfull box.
-  %
-  % Note that glue won't work here, because glue does not exercise the
-  % page builder, unlike penalties (see The TeXbook, pp. 280-281).
-  \penalty0
-  %
-  \output = {%
-    % Split the last of the double-column material.  Leave it on the
-    % current page, no automatic page break.
-    \balancecolumns
-    %
-    % If we end up splitting too much material for the current page,
-    % though, there will be another page break right after this \output
-    % invocation ends.  Having called \balancecolumns once, we do not
-    % want to call it again.  Therefore, reset \output to its normal
-    % definition right away.  (We hope \balancecolumns will never be
-    % called on to balance too much material, but if it is, this makes
-    % the output somewhat more palatable.)
-    \global\output = {\onepageout{\pagecontents\PAGE}}%
-  }%
-  \eject
-  \endgroup % started in \begindoublecolumns
-  %
-  % \pagegoal was set to the doubled \vsize above, since we restarted
-  % the current page.  We're now back to normal single-column
-  % typesetting, so reset \pagegoal to the normal \vsize (after the
-  % \endgroup where \vsize got restored).
-  \pagegoal = \vsize
-}
-%
-% Called at the end of the double column material.
-\def\balancecolumns{%
-  \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120.
-  \dimen@ = \ht0
-  \advance\dimen@ by \topskip
-  \advance\dimen@ by-\baselineskip
-  \divide\dimen@ by 2 % target to split to
-  %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}%
-  \splittopskip = \topskip
-  % Loop until we get a decent breakpoint.
-  {%
-    \vbadness = 10000
-    \loop
-      \global\setbox3 = \copy0
-      \global\setbox1 = \vsplit3 to \dimen@
-    \ifdim\ht3>\dimen@
-      \global\advance\dimen@ by 1pt
-    \repeat
-  }%
-  %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}%
-  \setbox0=\vbox to\dimen@{\unvbox1}%
-  \setbox2=\vbox to\dimen@{\unvbox3}%
-  %
-  \pagesofar
-}
-\catcode`\@ = \other
-
-
-\message{sectioning,}
-% Chapters, sections, etc.
-
-% Let's start with @part.
-\outer\parseargdef\part{\partzzz{#1}}
-\def\partzzz#1{%
-  \chapoddpage
-  \null
-  \vskip.3\vsize  % move it down on the page a bit
-  \begingroup
-    \noindent \titlefonts\rmisbold #1\par % the text
-    \let\lastnode=\empty      % no node to associate with
-    \writetocentry{part}{#1}{}% but put it in the toc
-    \headingsoff              % no headline or footline on the part page
-    \chapoddpage
-  \endgroup
-}
-
-% \unnumberedno is an oxymoron.  But we count the unnumbered
-% sections so that we can refer to them unambiguously in the pdf
-% outlines by their "section number".  We avoid collisions with chapter
-% numbers by starting them at 10000.  (If a document ever has 10000
-% chapters, we're in trouble anyway, I'm sure.)
-\newcount\unnumberedno \unnumberedno = 10000
-\newcount\chapno
-\newcount\secno        \secno=0
-\newcount\subsecno     \subsecno=0
-\newcount\subsubsecno  \subsubsecno=0
-
-% This counter is funny since it counts through charcodes of letters A, B, ...
-\newcount\appendixno  \appendixno = `\@
-%
-% \def\appendixletter{\char\the\appendixno}
-% We do the following ugly conditional instead of the above simple
-% construct for the sake of pdftex, which needs the actual
-% letter in the expansion, not just typeset.
-%
-\def\appendixletter{%
-  \ifnum\appendixno=`A A%
-  \else\ifnum\appendixno=`B B%
-  \else\ifnum\appendixno=`C C%
-  \else\ifnum\appendixno=`D D%
-  \else\ifnum\appendixno=`E E%
-  \else\ifnum\appendixno=`F F%
-  \else\ifnum\appendixno=`G G%
-  \else\ifnum\appendixno=`H H%
-  \else\ifnum\appendixno=`I I%
-  \else\ifnum\appendixno=`J J%
-  \else\ifnum\appendixno=`K K%
-  \else\ifnum\appendixno=`L L%
-  \else\ifnum\appendixno=`M M%
-  \else\ifnum\appendixno=`N N%
-  \else\ifnum\appendixno=`O O%
-  \else\ifnum\appendixno=`P P%
-  \else\ifnum\appendixno=`Q Q%
-  \else\ifnum\appendixno=`R R%
-  \else\ifnum\appendixno=`S S%
-  \else\ifnum\appendixno=`T T%
-  \else\ifnum\appendixno=`U U%
-  \else\ifnum\appendixno=`V V%
-  \else\ifnum\appendixno=`W W%
-  \else\ifnum\appendixno=`X X%
-  \else\ifnum\appendixno=`Y Y%
-  \else\ifnum\appendixno=`Z Z%
-  % The \the is necessary, despite appearances, because \appendixletter is
-  % expanded while writing the .toc file.  \char\appendixno is not
-  % expandable, thus it is written literally, thus all appendixes come out
-  % with the same letter (or @) in the toc without it.
-  \else\char\the\appendixno
-  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
-  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
-
-% Each @chapter defines these (using marks) as the number+name, number
-% and name of the chapter.  Page headings and footings can use
-% these.  @section does likewise.
-\def\thischapter{}
-\def\thischapternum{}
-\def\thischaptername{}
-\def\thissection{}
-\def\thissectionnum{}
-\def\thissectionname{}
-
-\newcount\absseclevel % used to calculate proper heading level
-\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
-
-% @raisesections: treat @section as chapter, @subsection as section, etc.
-\def\raisesections{\global\advance\secbase by -1}
-\let\up=\raisesections % original BFox name
-
-% @lowersections: treat @chapter as section, @section as subsection, etc.
-\def\lowersections{\global\advance\secbase by 1}
-\let\down=\lowersections % original BFox name
-
-% we only have subsub.
-\chardef\maxseclevel = 3
-%
-% A numbered section within an unnumbered changes to unnumbered too.
-% To achieve this, remember the "biggest" unnum. sec. we are currently in:
-\chardef\unnlevel = \maxseclevel
-%
-% Trace whether the current chapter is an appendix or not:
-% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
-\def\chapheadtype{N}
-
-% Choose a heading macro
-% #1 is heading type
-% #2 is heading level
-% #3 is text for heading
-\def\genhead#1#2#3{%
-  % Compute the abs. sec. level:
-  \absseclevel=#2
-  \advance\absseclevel by \secbase
-  % Make sure \absseclevel doesn't fall outside the range:
-  \ifnum \absseclevel < 0
-    \absseclevel = 0
-  \else
-    \ifnum \absseclevel > 3
-      \absseclevel = 3
-    \fi
-  \fi
-  % The heading type:
-  \def\headtype{#1}%
-  \if \headtype U%
-    \ifnum \absseclevel < \unnlevel
-      \chardef\unnlevel = \absseclevel
-    \fi
-  \else
-    % Check for appendix sections:
-    \ifnum \absseclevel = 0
-      \edef\chapheadtype{\headtype}%
-    \else
-      \if \headtype A\if \chapheadtype N%
-       \errmessage{@appendix... within a non-appendix chapter}%
-      \fi\fi
-    \fi
-    % Check for numbered within unnumbered:
-    \ifnum \absseclevel > \unnlevel
-      \def\headtype{U}%
-    \else
-      \chardef\unnlevel = 3
-    \fi
-  \fi
-  % Now print the heading:
-  \if \headtype U%
-    \ifcase\absseclevel
-       \unnumberedzzz{#3}%
-    \or \unnumberedseczzz{#3}%
-    \or \unnumberedsubseczzz{#3}%
-    \or \unnumberedsubsubseczzz{#3}%
-    \fi
-  \else
-    \if \headtype A%
-      \ifcase\absseclevel
-         \appendixzzz{#3}%
-      \or \appendixsectionzzz{#3}%
-      \or \appendixsubseczzz{#3}%
-      \or \appendixsubsubseczzz{#3}%
-      \fi
-    \else
-      \ifcase\absseclevel
-         \chapterzzz{#3}%
-      \or \seczzz{#3}%
-      \or \numberedsubseczzz{#3}%
-      \or \numberedsubsubseczzz{#3}%
-      \fi
-    \fi
-  \fi
-  \suppressfirstparagraphindent
-}
-
-% an interface:
-\def\numhead{\genhead N}
-\def\apphead{\genhead A}
-\def\unnmhead{\genhead U}
-
-% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
-% all lower-level sectioning counters to zero.
-%
-% Also set \chaplevelprefix, which we prepend to @float sequence numbers
-% (e.g., figures), q.v.  By default (before any chapter), that is empty.
-\let\chaplevelprefix = \empty
-%
-\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
-\def\chapterzzz#1{%
-  % section resetting is \global in case the chapter is in a group, such
-  % as an @include file.
-  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-    \global\advance\chapno by 1
-  %
-  % Used for \float.
-  \gdef\chaplevelprefix{\the\chapno.}%
-  \resetallfloatnos
-  %
-  % \putwordChapter can contain complex things in translations.
-  \toks0=\expandafter{\putwordChapter}%
-  \message{\the\toks0 \space \the\chapno}%
-  %
-  % Write the actual heading.
-  \chapmacro{#1}{Ynumbered}{\the\chapno}%
-  %
-  % So @section and the like are numbered underneath this chapter.
-  \global\let\section = \numberedsec
-  \global\let\subsection = \numberedsubsec
-  \global\let\subsubsection = \numberedsubsubsec
-}
-
-\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
-%
-\def\appendixzzz#1{%
-  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-    \global\advance\appendixno by 1
-  \gdef\chaplevelprefix{\appendixletter.}%
-  \resetallfloatnos
-  %
-  % \putwordAppendix can contain complex things in translations.
-  \toks0=\expandafter{\putwordAppendix}%
-  \message{\the\toks0 \space \appendixletter}%
-  %
-  \chapmacro{#1}{Yappendix}{\appendixletter}%
-  %
-  \global\let\section = \appendixsec
-  \global\let\subsection = \appendixsubsec
-  \global\let\subsubsection = \appendixsubsubsec
-}
-
-% normally unnmhead0 calls unnumberedzzz:
-\outer\parseargdef\unnumbered{\unnmhead0{#1}}
-\def\unnumberedzzz#1{%
-  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
-    \global\advance\unnumberedno by 1
-  %
-  % Since an unnumbered has no number, no prefix for figures.
-  \global\let\chaplevelprefix = \empty
-  \resetallfloatnos
-  %
-  % This used to be simply \message{#1}, but TeX fully expands the
-  % argument to \message.  Therefore, if #1 contained @-commands, TeX
-  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
-  % expanded @cite (which turns out to cause errors because \cite is meant
-  % to be executed, not expanded).
-  %
-  % Anyway, we don't want the fully-expanded definition of @cite to appear
-  % as a result of the \message, we just want `@cite' itself.  We use
-  % \the<toks register> to achieve this: TeX expands \the<toks> only once,
-  % simply yielding the contents of <toks register>.  (We also do this for
-  % the toc entries.)
-  \toks0 = {#1}%
-  \message{(\the\toks0)}%
-  %
-  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
-  %
-  \global\let\section = \unnumberedsec
-  \global\let\subsection = \unnumberedsubsec
-  \global\let\subsubsection = \unnumberedsubsubsec
-}
-
-% @centerchap is like @unnumbered, but the heading is centered.
-\outer\parseargdef\centerchap{%
-  % Well, we could do the following in a group, but that would break
-  % an assumption that \chapmacro is called at the outermost level.
-  % Thus we are safer this way:                --kasal, 24feb04
-  \let\centerparametersmaybe = \centerparameters
-  \unnmhead0{#1}%
-  \let\centerparametersmaybe = \relax
-}
-
-% @top is like @unnumbered.
-\let\top\unnumbered
-
-% Sections.
-% 
-\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
-\def\seczzz#1{%
-  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
-  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
-}
-
-% normally calls appendixsectionzzz:
-\outer\parseargdef\appendixsection{\apphead1{#1}}
-\def\appendixsectionzzz#1{%
-  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
-  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
-}
-\let\appendixsec\appendixsection
-
-% normally calls unnumberedseczzz:
-\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
-\def\unnumberedseczzz#1{%
-  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
-  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
-}
-
-% Subsections.
-% 
-% normally calls numberedsubseczzz:
-\outer\parseargdef\numberedsubsec{\numhead2{#1}}
-\def\numberedsubseczzz#1{%
-  \global\subsubsecno=0  \global\advance\subsecno by 1
-  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
-}
-
-% normally calls appendixsubseczzz:
-\outer\parseargdef\appendixsubsec{\apphead2{#1}}
-\def\appendixsubseczzz#1{%
-  \global\subsubsecno=0  \global\advance\subsecno by 1
-  \sectionheading{#1}{subsec}{Yappendix}%
-                 {\appendixletter.\the\secno.\the\subsecno}%
-}
-
-% normally calls unnumberedsubseczzz:
-\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
-\def\unnumberedsubseczzz#1{%
-  \global\subsubsecno=0  \global\advance\subsecno by 1
-  \sectionheading{#1}{subsec}{Ynothing}%
-                 {\the\unnumberedno.\the\secno.\the\subsecno}%
-}
-
-% Subsubsections.
-% 
-% normally numberedsubsubseczzz:
-\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
-\def\numberedsubsubseczzz#1{%
-  \global\advance\subsubsecno by 1
-  \sectionheading{#1}{subsubsec}{Ynumbered}%
-                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
-}
-
-% normally appendixsubsubseczzz:
-\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
-\def\appendixsubsubseczzz#1{%
-  \global\advance\subsubsecno by 1
-  \sectionheading{#1}{subsubsec}{Yappendix}%
-                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
-}
-
-% normally unnumberedsubsubseczzz:
-\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
-\def\unnumberedsubsubseczzz#1{%
-  \global\advance\subsubsecno by 1
-  \sectionheading{#1}{subsubsec}{Ynothing}%
-                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
-}
-
-% These macros control what the section commands do, according
-% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
-% Define them by default for a numbered chapter.
-\let\section = \numberedsec
-\let\subsection = \numberedsubsec
-\let\subsubsection = \numberedsubsubsec
-
-% Define @majorheading, @heading and @subheading
-
-\def\majorheading{%
-  {\advance\chapheadingskip by 10pt \chapbreak }%
-  \parsearg\chapheadingzzz
-}
-
-\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
-\def\chapheadingzzz#1{%
-  \vbox{\chapfonts \raggedtitlesettings #1\par}%
-  \nobreak\bigskip \nobreak
-  \suppressfirstparagraphindent
-}
-
-% @heading, @subheading, @subsubheading.
-\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
-  \suppressfirstparagraphindent}
-\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
-  \suppressfirstparagraphindent}
-\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
-  \suppressfirstparagraphindent}
-
-% These macros generate a chapter, section, etc. heading only
-% (including whitespace, linebreaking, etc. around it),
-% given all the information in convenient, parsed form.
-
-% Args are the skip and penalty (usually negative)
-\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
-
-% Parameter controlling skip before chapter headings (if needed)
-\newskip\chapheadingskip
-
-% Define plain chapter starts, and page on/off switching for it.
-\def\chapbreak{\dobreak \chapheadingskip {-4000}}
-\def\chappager{\par\vfill\supereject}
-% Because \domark is called before \chapoddpage, the filler page will
-% get the headings for the next chapter, which is wrong.  But we don't
-% care -- we just disable all headings on the filler page.
-\def\chapoddpage{%
-  \chappager
-  \ifodd\pageno \else
-    \begingroup
-      \headingsoff
-      \null
-      \chappager
-    \endgroup
-  \fi
-}
-
-\def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname}
-
-\def\CHAPPAGoff{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chapbreak
-\global\let\pagealignmacro=\chappager}
-
-\def\CHAPPAGon{%
-\global\let\contentsalignmacro = \chappager
-\global\let\pchapsepmacro=\chappager
-\global\let\pagealignmacro=\chappager
-\global\def\HEADINGSon{\HEADINGSsingle}}
-
-\def\CHAPPAGodd{%
-\global\let\contentsalignmacro = \chapoddpage
-\global\let\pchapsepmacro=\chapoddpage
-\global\let\pagealignmacro=\chapoddpage
-\global\def\HEADINGSon{\HEADINGSdouble}}
-
-\CHAPPAGon
-
-% Chapter opening.
-%
-% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
-% Yappendix, Yomitfromtoc), #3 the chapter number.
-% Not used for @heading series.
-%
-% To test against our argument.
-\def\Ynothingkeyword{Ynothing}
-\def\Yappendixkeyword{Yappendix}
-\def\Yomitfromtockeyword{Yomitfromtoc}
-%
-\def\chapmacro#1#2#3{%
-  \checkenv{}% chapters, etc., should not start inside an environment.
-  %
-  % Insert the first mark before the heading break (see notes for \domark).
-  \let\prevchapterdefs=\lastchapterdefs
-  \let\prevsectiondefs=\lastsectiondefs
-  \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
-                        \gdef\thissection{}}%
-  %
-  \def\temptype{#2}%
-  \ifx\temptype\Ynothingkeyword
-    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
-                          \gdef\thischapter{\thischaptername}}%
-  \else\ifx\temptype\Yomitfromtockeyword
-    \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
-                          \gdef\thischapter{}}%
-  \else\ifx\temptype\Yappendixkeyword
-    \toks0={#1}%
-    \xdef\lastchapterdefs{%
-      \gdef\noexpand\thischaptername{\the\toks0}%
-      \gdef\noexpand\thischapternum{\appendixletter}%
-      % \noexpand\putwordAppendix avoids expanding indigestible
-      % commands in some of the translations.
-      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
-                                 \noexpand\thischapternum:
-                                 \noexpand\thischaptername}%
-    }%
-  \else
-    \toks0={#1}%
-    \xdef\lastchapterdefs{%
-      \gdef\noexpand\thischaptername{\the\toks0}%
-      \gdef\noexpand\thischapternum{\the\chapno}%
-      % \noexpand\putwordChapter avoids expanding indigestible
-      % commands in some of the translations.
-      \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
-                                 \noexpand\thischapternum:
-                                 \noexpand\thischaptername}%
-    }%
-  \fi\fi\fi
-  %
-  % Output the mark.  Pass it through \safewhatsit, to take care of
-  % the preceding space.
-  \safewhatsit\domark
-  %
-  % Insert the chapter heading break.
-  \pchapsepmacro
-  %
-  % Now the second mark, after the heading break.  No break points
-  % between here and the heading.
-  \let\prevchapterdefs=\lastchapterdefs
-  \let\prevsectiondefs=\lastsectiondefs
-  \domark
-  %
-  {%
-    \chapfonts \rmisbold
-    %
-    % Have to define \lastsection before calling \donoderef, because the
-    % xref code eventually uses it.  On the other hand, it has to be called
-    % after \pchapsepmacro, or the headline will change too soon.
-    \gdef\lastsection{#1}%
-    %
-    % Only insert the separating space if we have a chapter/appendix
-    % number, and don't print the unnumbered ``number''.
-    \ifx\temptype\Ynothingkeyword
-      \setbox0 = \hbox{}%
-      \def\toctype{unnchap}%
-    \else\ifx\temptype\Yomitfromtockeyword
-      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
-      \def\toctype{omit}%
-    \else\ifx\temptype\Yappendixkeyword
-      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
-      \def\toctype{app}%
-    \else
-      \setbox0 = \hbox{#3\enspace}%
-      \def\toctype{numchap}%
-    \fi\fi\fi
-    %
-    % Write the toc entry for this chapter.  Must come before the
-    % \donoderef, because we include the current node name in the toc
-    % entry, and \donoderef resets it to empty.
-    \writetocentry{\toctype}{#1}{#3}%
-    %
-    % For pdftex, we have to write out the node definition (aka, make
-    % the pdfdest) after any page break, but before the actual text has
-    % been typeset.  If the destination for the pdf outline is after the
-    % text, then jumping from the outline may wind up with the text not
-    % being visible, for instance under high magnification.
-    \donoderef{#2}%
-    %
-    % Typeset the actual heading.
-    \nobreak % Avoid page breaks at the interline glue.
-    \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
-          \unhbox0 #1\par}%
-  }%
-  \nobreak\bigskip % no page break after a chapter title
-  \nobreak
-}
-
-% @centerchap -- centered and unnumbered.
-\let\centerparametersmaybe = \relax
-\def\centerparameters{%
-  \advance\rightskip by 3\rightskip
-  \leftskip = \rightskip
-  \parfillskip = 0pt
-}
-
-
-% I don't think this chapter style is supported any more, so I'm not
-% updating it with the new noderef stuff.  We'll see.  --karl, 11aug03.
-%
-\def\setchapterstyle #1 {\csname CHAPF#1\endcsname}
-%
-\def\unnchfopen #1{%
-  \chapoddpage
-  \vbox{\chapfonts \raggedtitlesettings #1\par}%
-  \nobreak\bigskip\nobreak
-}
-\def\chfopen #1#2{\chapoddpage {\chapfonts
-\vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}%
-\par\penalty 5000 %
-}
-\def\centerchfopen #1{%
-  \chapoddpage
-  \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}%
-  \nobreak\bigskip \nobreak
-}
-\def\CHAPFopen{%
-  \global\let\chapmacro=\chfopen
-  \global\let\centerchapmacro=\centerchfopen}
-
-
-% Section titles.  These macros combine the section number parts and
-% call the generic \sectionheading to do the printing.
-%
-\newskip\secheadingskip
-\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
-
-% Subsection titles.
-\newskip\subsecheadingskip
-\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
-
-% Subsubsection titles.
-\def\subsubsecheadingskip{\subsecheadingskip}
-\def\subsubsecheadingbreak{\subsecheadingbreak}
-
-
-% Print any size, any type, section title.
-%
-% #1 is the text of the title,
-% #2 is the section level (sec/subsec/subsubsec),
-% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc),
-% #4 is the section number.
-%
-\def\seckeyword{sec}
-%
-\def\sectionheading#1#2#3#4{%
-  {%
-    \def\sectionlevel{#2}%
-    \def\temptype{#3}%
-    %
-    % It is ok for the @heading series commands to appear inside an
-    % environment (it's been historically allowed, though the logic is
-    % dubious), but not the others.
-    \ifx\temptype\Yomitfromtockeyword\else
-      \checkenv{}% non-@*heading should not be in an environment.
-    \fi
-    %
-    % Switch to the right set of fonts.
-    \csname #2fonts\endcsname \rmisbold
-    %
-    % Insert first mark before the heading break (see notes for \domark).
-    \let\prevsectiondefs=\lastsectiondefs
-    \ifx\temptype\Ynothingkeyword
-      \ifx\sectionlevel\seckeyword
-        \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
-                              \gdef\thissection{\thissectionname}}%
-      \fi
-    \else\ifx\temptype\Yomitfromtockeyword
-      % Don't redefine \thissection.
-    \else\ifx\temptype\Yappendixkeyword
-      \ifx\sectionlevel\seckeyword
-        \toks0={#1}%
-        \xdef\lastsectiondefs{%
-          \gdef\noexpand\thissectionname{\the\toks0}%
-          \gdef\noexpand\thissectionnum{#4}%
-          % \noexpand\putwordSection avoids expanding indigestible
-          % commands in some of the translations.
-          \gdef\noexpand\thissection{\noexpand\putwordSection{}
-                                     \noexpand\thissectionnum:
-                                     \noexpand\thissectionname}%
-        }%
-      \fi
-    \else
-      \ifx\sectionlevel\seckeyword
-        \toks0={#1}%
-        \xdef\lastsectiondefs{%
-          \gdef\noexpand\thissectionname{\the\toks0}%
-          \gdef\noexpand\thissectionnum{#4}%
-          % \noexpand\putwordSection avoids expanding indigestible
-          % commands in some of the translations.
-          \gdef\noexpand\thissection{\noexpand\putwordSection{}
-                                     \noexpand\thissectionnum:
-                                     \noexpand\thissectionname}%
-        }%
-      \fi
-    \fi\fi\fi
-    %
-    % Go into vertical mode.  Usually we'll already be there, but we
-    % don't want the following whatsit to end up in a preceding paragraph
-    % if the document didn't happen to have a blank line.
-    \par
-    %
-    % Output the mark.  Pass it through \safewhatsit, to take care of
-    % the preceding space.
-    \safewhatsit\domark
-    %
-    % Insert space above the heading.
-    \csname #2headingbreak\endcsname
-    %
-    % Now the second mark, after the heading break.  No break points
-    % between here and the heading.
-    \global\let\prevsectiondefs=\lastsectiondefs
-    \domark
-    %
-    % Only insert the space after the number if we have a section number.
-    \ifx\temptype\Ynothingkeyword
-      \setbox0 = \hbox{}%
-      \def\toctype{unn}%
-      \gdef\lastsection{#1}%
-    \else\ifx\temptype\Yomitfromtockeyword
-      % for @headings -- no section number, don't include in toc,
-      % and don't redefine \lastsection.
-      \setbox0 = \hbox{}%
-      \def\toctype{omit}%
-      \let\sectionlevel=\empty
-    \else\ifx\temptype\Yappendixkeyword
-      \setbox0 = \hbox{#4\enspace}%
-      \def\toctype{app}%
-      \gdef\lastsection{#1}%
-    \else
-      \setbox0 = \hbox{#4\enspace}%
-      \def\toctype{num}%
-      \gdef\lastsection{#1}%
-    \fi\fi\fi
-    %
-    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
-    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
-    %
-    % Write the node reference (= pdf destination for pdftex).
-    % Again, see comments in \chapmacro.
-    \donoderef{#3}%
-    %
-    % Interline glue will be inserted when the vbox is completed.
-    % That glue will be a valid breakpoint for the page, since it'll be
-    % preceded by a whatsit (usually from the \donoderef, or from the
-    % \writetocentry if there was no node).  We don't want to allow that
-    % break, since then the whatsits could end up on page n while the
-    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
-    \nobreak
-    %
-    % Output the actual section heading.
-    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
-          \hangindent=\wd0  % zero if no section number
-          \unhbox0 #1}%
-  }%
-  % Add extra space after the heading -- half of whatever came above it.
-  % Don't allow stretch, though.
-  \kern .5 \csname #2headingskip\endcsname
-  %
-  % Do not let the kern be a potential breakpoint, as it would be if it
-  % was followed by glue.
-  \nobreak
-  %
-  % We'll almost certainly start a paragraph next, so don't let that
-  % glue accumulate.  (Not a breakpoint because it's preceded by a
-  % discardable item.)  However, when a paragraph is not started next
-  % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
-  % or the negative glue will cause weirdly wrong output, typically
-  % obscuring the section heading with something else.
-  \vskip-\parskip
-  %
-  % This is so the last item on the main vertical list is a known
-  % \penalty > 10000, so \startdefun, etc., can recognize the situation
-  % and do the needful.
-  \penalty 10001
-}
-
-
-\message{toc,}
-% Table of contents.
-\newwrite\tocfile
-
-% Write an entry to the toc file, opening it if necessary.
-% Called from @chapter, etc.
-%
-% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
-% We append the current node name (if any) and page number as additional
-% arguments for the \{chap,sec,...}entry macros which will eventually
-% read this.  The node name is used in the pdf outlines as the
-% destination to jump to.
-%
-% We open the .toc file for writing here instead of at @setfilename (or
-% any other fixed time) so that @contents can be anywhere in the document.
-% But if #1 is `omit', then we don't do anything.  This is used for the
-% table of contents chapter openings themselves.
-%
-\newif\iftocfileopened
-\def\omitkeyword{omit}%
-%
-\def\writetocentry#1#2#3{%
-  \edef\writetoctype{#1}%
-  \ifx\writetoctype\omitkeyword \else
-    \iftocfileopened\else
-      \immediate\openout\tocfile = \jobname.toc
-      \global\tocfileopenedtrue
-    \fi
-    %
-    \iflinks
-      {\atdummies
-       \edef\temp{%
-         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
-       \temp
-      }%
-    \fi
-  \fi
-  %
-  % Tell \shipout to create a pdf destination on each page, if we're
-  % writing pdf.  These are used in the table of contents.  We can't
-  % just write one on every page because the title pages are numbered
-  % 1 and 2 (the page numbers aren't printed), and so are the first
-  % two pages of the document.  Thus, we'd have two destinations named
-  % `1', and two named `2'.
-  \ifpdf \global\pdfmakepagedesttrue \fi
-}
-
-
-% These characters do not print properly in the Computer Modern roman
-% fonts, so we must take special care.  This is more or less redundant
-% with the Texinfo input format setup at the end of this file.
-%
-\def\activecatcodes{%
-  \catcode`\"=\active
-  \catcode`\$=\active
-  \catcode`\<=\active
-  \catcode`\>=\active
-  \catcode`\\=\active
-  \catcode`\^=\active
-  \catcode`\_=\active
-  \catcode`\|=\active
-  \catcode`\~=\active
-}
-
-
-% Read the toc file, which is essentially Texinfo input.
-\def\readtocfile{%
-  \setupdatafile
-  \activecatcodes
-  \input \tocreadfilename
-}
-
-\newskip\contentsrightmargin \contentsrightmargin=1in
-\newcount\savepageno
-\newcount\lastnegativepageno \lastnegativepageno = -1
-
-% Prepare to read what we've written to \tocfile.
-%
-\def\startcontents#1{%
-  % If @setchapternewpage on, and @headings double, the contents should
-  % start on an odd page, unlike chapters.  Thus, we maintain
-  % \contentsalignmacro in parallel with \pagealignmacro.
-  % From: Torbjorn Granlund <tege@matematik.su.se>
-  \contentsalignmacro
-  \immediate\closeout\tocfile
-  %
-  % Don't need to put `Contents' or `Short Contents' in the headline.
-  % It is abundantly clear what they are.
-  \chapmacro{#1}{Yomitfromtoc}{}%
-  %
-  \savepageno = \pageno
-  \begingroup                  % Set up to handle contents files properly.
-    \raggedbottom              % Worry more about breakpoints than the bottom.
-    \advance\hsize by -\contentsrightmargin % Don't use the full line length.
-    %
-    % Roman numerals for page numbers.
-    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
-}
-
-% redefined for the two-volume lispref.  We always output on
-% \jobname.toc even if this is redefined.
-%
-\def\tocreadfilename{\jobname.toc}
-
-% Normal (long) toc.
-%
-\def\contents{%
-  \startcontents{\putwordTOC}%
-    \openin 1 \tocreadfilename\space
-    \ifeof 1 \else
-      \readtocfile
-    \fi
-    \vfill \eject
-    \contentsalignmacro % in case @setchapternewpage odd is in effect
-    \ifeof 1 \else
-      \pdfmakeoutlines
-    \fi
-    \closein 1
-  \endgroup
-  \lastnegativepageno = \pageno
-  \global\pageno = \savepageno
-}
-
-% And just the chapters.
-\def\summarycontents{%
-  \startcontents{\putwordShortTOC}%
-    %
-    \let\partentry = \shortpartentry
-    \let\numchapentry = \shortchapentry
-    \let\appentry = \shortchapentry
-    \let\unnchapentry = \shortunnchapentry
-    % We want a true roman here for the page numbers.
-    \secfonts
-    \let\rm=\shortcontrm \let\bf=\shortcontbf
-    \let\sl=\shortcontsl \let\tt=\shortconttt
-    \rm
-    \hyphenpenalty = 10000
-    \advance\baselineskip by 1pt % Open it up a little.
-    \def\numsecentry##1##2##3##4{}
-    \let\appsecentry = \numsecentry
-    \let\unnsecentry = \numsecentry
-    \let\numsubsecentry = \numsecentry
-    \let\appsubsecentry = \numsecentry
-    \let\unnsubsecentry = \numsecentry
-    \let\numsubsubsecentry = \numsecentry
-    \let\appsubsubsecentry = \numsecentry
-    \let\unnsubsubsecentry = \numsecentry
-    \openin 1 \tocreadfilename\space
-    \ifeof 1 \else
-      \readtocfile
-    \fi
-    \closein 1
-    \vfill \eject
-    \contentsalignmacro % in case @setchapternewpage odd is in effect
-  \endgroup
-  \lastnegativepageno = \pageno
-  \global\pageno = \savepageno
-}
-\let\shortcontents = \summarycontents
-
-% Typeset the label for a chapter or appendix for the short contents.
-% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
-%
-\def\shortchaplabel#1{%
-  % This space should be enough, since a single number is .5em, and the
-  % widest letter (M) is 1em, at least in the Computer Modern fonts.
-  % But use \hss just in case.
-  % (This space doesn't include the extra space that gets added after
-  % the label; that gets put in by \shortchapentry above.)
-  %
-  % We'd like to right-justify chapter numbers, but that looks strange
-  % with appendix letters.  And right-justifying numbers and
-  % left-justifying letters looks strange when there is less than 10
-  % chapters.  Have to read the whole toc once to know how many chapters
-  % there are before deciding ...
-  \hbox to 1em{#1\hss}%
-}
-
-% These macros generate individual entries in the table of contents.
-% The first argument is the chapter or section name.
-% The last argument is the page number.
-% The arguments in between are the chapter number, section number, ...
-
-% Parts, in the main contents.  Replace the part number, which doesn't
-% exist, with an empty box.  Let's hope all the numbers have the same width.
-% Also ignore the page number, which is conventionally not printed.
-\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
-\def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}}
-%
-% Parts, in the short toc.
-\def\shortpartentry#1#2#3#4{%
-  \penalty-300
-  \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
-  \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
-}
-
-% Chapters, in the main contents.
-\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
-%
-% Chapters, in the short toc.
-% See comments in \dochapentry re vbox and related settings.
-\def\shortchapentry#1#2#3#4{%
-  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
-}
-
-% Appendices, in the main contents.
-% Need the word Appendix, and a fixed-size box.
-%
-\def\appendixbox#1{%
-  % We use M since it's probably the widest letter.
-  \setbox0 = \hbox{\putwordAppendix{} M}%
-  \hbox to \wd0{\putwordAppendix{} #1\hss}}
-%
-\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}}
-
-% Unnumbered chapters.
-\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
-\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
-
-% Sections.
-\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
-\let\appsecentry=\numsecentry
-\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
-
-% Subsections.
-\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
-\let\appsubsecentry=\numsubsecentry
-\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
-
-% And subsubsections.
-\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
-\let\appsubsubsecentry=\numsubsubsecentry
-\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
-
-% This parameter controls the indentation of the various levels.
-% Same as \defaultparindent.
-\newdimen\tocindent \tocindent = 15pt
-
-% Now for the actual typesetting. In all these, #1 is the text and #2 is the
-% page number.
-%
-% If the toc has to be broken over pages, we want it to be at chapters
-% if at all possible; hence the \penalty.
-\def\dochapentry#1#2{%
-   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
-   \begingroup
-     \chapentryfonts
-     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-   \endgroup
-   \nobreak\vskip .25\baselineskip plus.1\baselineskip
-}
-
-\def\dosecentry#1#2{\begingroup
-  \secentryfonts \leftskip=\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-\def\dosubsecentry#1#2{\begingroup
-  \subsecentryfonts \leftskip=2\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-\def\dosubsubsecentry#1#2{\begingroup
-  \subsubsecentryfonts \leftskip=3\tocindent
-  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
-\endgroup}
-
-% We use the same \entry macro as for the index entries.
-\let\tocentry = \entry
-
-% Space between chapter (or whatever) number and the title.
-\def\labelspace{\hskip1em \relax}
-
-\def\dopageno#1{{\rm #1}}
-\def\doshortpageno#1{{\rm #1}}
-
-\def\chapentryfonts{\secfonts \rm}
-\def\secentryfonts{\textfonts}
-\def\subsecentryfonts{\textfonts}
-\def\subsubsecentryfonts{\textfonts}
-
-
-\message{environments,}
-% @foo ... @end foo.
-
-% @tex ... @end tex    escapes into raw TeX temporarily.
-% One exception: @ is still an escape character, so that @end tex works.
-% But \@ or @@ will get a plain @ character.
-
-\envdef\tex{%
-  \setupmarkupstyle{tex}%
-  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
-  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
-  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
-  \catcode `\%=14
-  \catcode `\+=\other
-  \catcode `\"=\other
-  \catcode `\|=\other
-  \catcode `\<=\other
-  \catcode `\>=\other
-  \catcode `\`=\other
-  \catcode `\'=\other
-  \escapechar=`\\
-  %
-  % ' is active in math mode (mathcode"8000).  So reset it, and all our
-  % other math active characters (just in case), to plain's definitions.
-  \mathactive
-  %
-  \let\b=\ptexb
-  \let\bullet=\ptexbullet
-  \let\c=\ptexc
-  \let\,=\ptexcomma
-  \let\.=\ptexdot
-  \let\dots=\ptexdots
-  \let\equiv=\ptexequiv
-  \let\!=\ptexexclam
-  \let\i=\ptexi
-  \let\indent=\ptexindent
-  \let\noindent=\ptexnoindent
-  \let\{=\ptexlbrace
-  \let\+=\tabalign
-  \let\}=\ptexrbrace
-  \let\/=\ptexslash
-  \let\*=\ptexstar
-  \let\t=\ptext
-  \expandafter \let\csname top\endcsname=\ptextop  % we've made it outer
-  \let\frenchspacing=\plainfrenchspacing
-  %
-  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
-  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
-  \def\@{@}%
-}
-% There is no need to define \Etex.
-
-% Define @lisp ... @end lisp.
-% @lisp environment forms a group so it can rebind things,
-% including the definition of @end lisp (which normally is erroneous).
-
-% Amount to narrow the margins by for @lisp.
-\newskip\lispnarrowing \lispnarrowing=0.4in
-
-% This is the definition that ^^M gets inside @lisp, @example, and other
-% such environments.  \null is better than a space, since it doesn't
-% have any width.
-\def\lisppar{\null\endgraf}
-
-% This space is always present above and below environments.
-\newskip\envskipamount \envskipamount = 0pt
-
-% Make spacing and below environment symmetrical.  We use \parskip here
-% to help in doing that, since in @example-like environments \parskip
-% is reset to zero; thus the \afterenvbreak inserts no space -- but the
-% start of the next paragraph will insert \parskip.
-%
-\def\aboveenvbreak{{%
-  % =10000 instead of <10000 because of a special case in \itemzzz and
-  % \sectionheading, q.v.
-  \ifnum \lastpenalty=10000 \else
-    \advance\envskipamount by \parskip
-    \endgraf
-    \ifdim\lastskip<\envskipamount
-      \removelastskip
-      % it's not a good place to break if the last penalty was \nobreak
-      % or better ...
-      \ifnum\lastpenalty<10000 \penalty-50 \fi
-      \vskip\envskipamount
-    \fi
-  \fi
-}}
-
-\let\afterenvbreak = \aboveenvbreak
-
-% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
-% also clear it, so that its embedded environments do the narrowing again.
-\let\nonarrowing=\relax
-
-% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
-% environment contents.
-\font\circle=lcircle10
-\newdimen\circthick
-\newdimen\cartouter\newdimen\cartinner
-\newskip\normbskip\newskip\normpskip\newskip\normlskip
-\circthick=\fontdimen8\circle
-%
-\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
-\def\ctr{{\hskip 6pt\circle\char'010}}
-\def\cbl{{\circle\char'012\hskip -6pt}}
-\def\cbr{{\hskip 6pt\circle\char'011}}
-\def\carttop{\hbox to \cartouter{\hskip\lskip
-        \ctl\leaders\hrule height\circthick\hfil\ctr
-        \hskip\rskip}}
-\def\cartbot{\hbox to \cartouter{\hskip\lskip
-        \cbl\leaders\hrule height\circthick\hfil\cbr
-        \hskip\rskip}}
-%
-\newskip\lskip\newskip\rskip
-
-\envdef\cartouche{%
-  \ifhmode\par\fi  % can't be in the midst of a paragraph.
-  \startsavinginserts
-  \lskip=\leftskip \rskip=\rightskip
-  \leftskip=0pt\rightskip=0pt % we want these *outside*.
-  \cartinner=\hsize \advance\cartinner by-\lskip
-  \advance\cartinner by-\rskip
-  \cartouter=\hsize
-  \advance\cartouter by 18.4pt % allow for 3pt kerns on either
-                               % side, and for 6pt waste from
-                               % each corner char, and rule thickness
-  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
-  %
-  % If this cartouche directly follows a sectioning command, we need the
-  % \parskip glue (backspaced over by default) or the cartouche can
-  % collide with the section heading.
-  \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
-  %
-  \vbox\bgroup
-      \baselineskip=0pt\parskip=0pt\lineskip=0pt
-      \carttop
-      \hbox\bgroup
-         \hskip\lskip
-         \vrule\kern3pt
-         \vbox\bgroup
-             \kern3pt
-             \hsize=\cartinner
-             \baselineskip=\normbskip
-             \lineskip=\normlskip
-             \parskip=\normpskip
-             \vskip -\parskip
-             \comment % For explanation, see the end of def\group.
-}
-\def\Ecartouche{%
-              \ifhmode\par\fi
-             \kern3pt
-         \egroup
-         \kern3pt\vrule
-         \hskip\rskip
-      \egroup
-      \cartbot
-  \egroup
-  \checkinserts
-}
-
-
-% This macro is called at the beginning of all the @example variants,
-% inside a group.
-\newdimen\nonfillparindent
-\def\nonfillstart{%
-  \aboveenvbreak
-  \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy
-  \sepspaces % Make spaces be word-separators rather than space tokens.
-  \let\par = \lisppar % don't ignore blank lines
-  \obeylines % each line of input is a line of output
-  \parskip = 0pt
-  % Turn off paragraph indentation but redefine \indent to emulate
-  % the normal \indent.
-  \nonfillparindent=\parindent
-  \parindent = 0pt
-  \let\indent\nonfillindent
-  %
-  \emergencystretch = 0pt % don't try to avoid overfull boxes
-  \ifx\nonarrowing\relax
-    \advance \leftskip by \lispnarrowing
-    \exdentamount=\lispnarrowing
-  \else
-    \let\nonarrowing = \relax
-  \fi
-  \let\exdent=\nofillexdent
-}
-
-\begingroup
-\obeyspaces
-% We want to swallow spaces (but not other tokens) after the fake
-% @indent in our nonfill-environments, where spaces are normally
-% active and set to @tie, resulting in them not being ignored after
-% @indent.
-\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
-\gdef\nonfillindentcheck{%
-\ifx\temp %
-\expandafter\nonfillindentgobble%
-\else%
-\leavevmode\nonfillindentbox%
-\fi%
-}%
-\endgroup
-\def\nonfillindentgobble#1{\nonfillindent}
-\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
-
-% If you want all examples etc. small: @set dispenvsize small.
-% If you want even small examples the full size: @set dispenvsize nosmall.
-% This affects the following displayed environments:
-%    @example, @display, @format, @lisp
-%
-\def\smallword{small}
-\def\nosmallword{nosmall}
-\let\SETdispenvsize\relax
-\def\setnormaldispenv{%
-  \ifx\SETdispenvsize\smallword
-    % end paragraph for sake of leading, in case document has no blank
-    % line.  This is redundant with what happens in \aboveenvbreak, but
-    % we need to do it before changing the fonts, and it's inconvenient
-    % to change the fonts afterward.
-    \ifnum \lastpenalty=10000 \else \endgraf \fi
-    \smallexamplefonts \rm
-  \fi
-}
-\def\setsmalldispenv{%
-  \ifx\SETdispenvsize\nosmallword
-  \else
-    \ifnum \lastpenalty=10000 \else \endgraf \fi
-    \smallexamplefonts \rm
-  \fi
-}
-
-% We often define two environments, @foo and @smallfoo.
-% Let's do it in one command.  #1 is the env name, #2 the definition.
-\def\makedispenvdef#1#2{%
-  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
-  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
-  \expandafter\let\csname E#1\endcsname \afterenvbreak
-  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
-}
-
-% Define two environment synonyms (#1 and #2) for an environment.
-\def\maketwodispenvdef#1#2#3{%
-  \makedispenvdef{#1}{#3}%
-  \makedispenvdef{#2}{#3}%
-}
-%
-% @lisp: indented, narrowed, typewriter font;
-% @example: same as @lisp.
-%
-% @smallexample and @smalllisp: use smaller fonts.
-% Originally contributed by Pavel@xerox.
-%
-\maketwodispenvdef{lisp}{example}{%
-  \nonfillstart
-  \tt\setupmarkupstyle{example}%
-  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
-  \gobble % eat return
-}
-% @display/@smalldisplay: same as @lisp except keep current font.
-%
-\makedispenvdef{display}{%
-  \nonfillstart
-  \gobble
-}
-
-% @format/@smallformat: same as @display except don't narrow margins.
-%
-\makedispenvdef{format}{%
-  \let\nonarrowing = t%
-  \nonfillstart
-  \gobble
-}
-
-% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
-\envdef\flushleft{%
-  \let\nonarrowing = t%
-  \nonfillstart
-  \gobble
-}
-\let\Eflushleft = \afterenvbreak
-
-% @flushright.
-%
-\envdef\flushright{%
-  \let\nonarrowing = t%
-  \nonfillstart
-  \advance\leftskip by 0pt plus 1fill\relax
-  \gobble
-}
-\let\Eflushright = \afterenvbreak
-
-
-% @raggedright does more-or-less normal line breaking but no right
-% justification.  From plain.tex.  Don't stretch around special
-% characters in urls in this environment, since the stretch at the right
-% should be enough.
-\envdef\raggedright{%
-  \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax
-  \def\urefprestretchamount{0pt}%
-  \def\urefpoststretchamount{0pt}%
-}
-\let\Eraggedright\par
-
-\envdef\raggedleft{%
-  \parindent=0pt \leftskip0pt plus2em
-  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
-  \hbadness=10000 % Last line will usually be underfull, so turn off
-                  % badness reporting.
-}
-\let\Eraggedleft\par
-
-\envdef\raggedcenter{%
-  \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
-  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
-  \hbadness=10000 % Last line will usually be underfull, so turn off
-                  % badness reporting.
-}
-\let\Eraggedcenter\par
-
-
-% @quotation does normal linebreaking (hence we can't use \nonfillstart)
-% and narrows the margins.  We keep \parskip nonzero in general, since
-% we're doing normal filling.  So, when using \aboveenvbreak and
-% \afterenvbreak, temporarily make \parskip 0.
-%
-\makedispenvdef{quotation}{\quotationstart}
-%
-\def\quotationstart{%
-  \indentedblockstart % same as \indentedblock, but increase right margin too.
-  \ifx\nonarrowing\relax
-    \advance\rightskip by \lispnarrowing
-  \fi
-  \parsearg\quotationlabel
-}
-
-% We have retained a nonzero parskip for the environment, since we're
-% doing normal filling.
-%
-\def\Equotation{%
-  \par
-  \ifx\quotationauthor\thisisundefined\else
-    % indent a bit.
-    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
-  \fi
-  {\parskip=0pt \afterenvbreak}%
-}
-\def\Esmallquotation{\Equotation}
-
-% If we're given an argument, typeset it in bold with a colon after.
-\def\quotationlabel#1{%
-  \def\temp{#1}%
-  \ifx\temp\empty \else
-    {\bf #1: }%
-  \fi
-}
-
-% @indentedblock is like @quotation, but indents only on the left and
-% has no optional argument.
-% 
-\makedispenvdef{indentedblock}{\indentedblockstart}
-%
-\def\indentedblockstart{%
-  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
-  \parindent=0pt
-  %
-  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
-  \ifx\nonarrowing\relax
-    \advance\leftskip by \lispnarrowing
-    \exdentamount = \lispnarrowing
-  \else
-    \let\nonarrowing = \relax
-  \fi
-}
-
-% Keep a nonzero parskip for the environment, since we're doing normal filling.
-%
-\def\Eindentedblock{%
-  \par
-  {\parskip=0pt \afterenvbreak}%
-}
-\def\Esmallindentedblock{\Eindentedblock}
-
-
-% LaTeX-like @verbatim...@end verbatim and @verb{<char>...<char>}
-% If we want to allow any <char> as delimiter,
-% we need the curly braces so that makeinfo sees the @verb command, eg:
-% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
-%
-% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
-%
-% [Knuth] p.344; only we need to do the other characters Texinfo sets
-% active too.  Otherwise, they get lost as the first character on a
-% verbatim line.
-\def\dospecials{%
-  \do\ \do\\\do\{\do\}\do\$\do\&%
-  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
-  \do\<\do\>\do\|\do\@\do+\do\"%
-  % Don't do the quotes -- if we do, @set txicodequoteundirected and
-  % @set txicodequotebacktick will not have effect on @verb and
-  % @verbatim, and ?` and !` ligatures won't get disabled.
-  %\do\`\do\'%
-}
-%
-% [Knuth] p. 380
-\def\uncatcodespecials{%
-  \def\do##1{\catcode`##1=\other}\dospecials}
-%
-% Setup for the @verb command.
-%
-% Eight spaces for a tab
-\begingroup
-  \catcode`\^^I=\active
-  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
-\endgroup
-%
-\def\setupverb{%
-  \tt  % easiest (and conventionally used) font for verbatim
-  \def\par{\leavevmode\endgraf}%
-  \setupmarkupstyle{verb}%
-  \tabeightspaces
-  % Respect line breaks,
-  % print special symbols as themselves, and
-  % make each space count
-  % must do in this order:
-  \obeylines \uncatcodespecials \sepspaces
-}
-
-% Setup for the @verbatim environment
-%
-% Real tab expansion.
-\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
-%
-% We typeset each line of the verbatim in an \hbox, so we can handle
-% tabs.  The \global is in case the verbatim line starts with an accent,
-% or some other command that starts with a begin-group.  Otherwise, the
-% entire \verbbox would disappear at the corresponding end-group, before
-% it is typeset.  Meanwhile, we can't have nested verbatim commands
-% (can we?), so the \global won't be overwriting itself.
-\newbox\verbbox
-\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
-%
-\begingroup
-  \catcode`\^^I=\active
-  \gdef\tabexpand{%
-    \catcode`\^^I=\active
-    \def^^I{\leavevmode\egroup
-      \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
-      \divide\dimen\verbbox by\tabw
-      \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
-      \advance\dimen\verbbox by\tabw  % advance to next multiple of \tabw
-      \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
-    }%
-  }
-\endgroup
-
-% start the verbatim environment.
-\def\setupverbatim{%
-  \let\nonarrowing = t%
-  \nonfillstart
-  \tt % easiest (and conventionally used) font for verbatim
-  % The \leavevmode here is for blank lines.  Otherwise, we would
-  % never \starttabox and the \egroup would end verbatim mode.
-  \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
-  \tabexpand
-  \setupmarkupstyle{verbatim}%
-  % Respect line breaks,
-  % print special symbols as themselves, and
-  % make each space count.
-  % Must do in this order:
-  \obeylines \uncatcodespecials \sepspaces
-  \everypar{\starttabbox}%
-}
-
-% Do the @verb magic: verbatim text is quoted by unique
-% delimiter characters.  Before first delimiter expect a
-% right brace, after last delimiter expect closing brace:
-%
-%    \def\doverb'{'<char>#1<char>'}'{#1}
-%
-% [Knuth] p. 382; only eat outer {}
-\begingroup
-  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
-  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
-\endgroup
-%
-\def\verb{\begingroup\setupverb\doverb}
-%
-%
-% Do the @verbatim magic: define the macro \doverbatim so that
-% the (first) argument ends when '@end verbatim' is reached, ie:
-%
-%     \def\doverbatim#1@end verbatim{#1}
-%
-% For Texinfo it's a lot easier than for LaTeX,
-% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
-% we need not redefine '\', '{' and '}'.
-%
-% Inspired by LaTeX's verbatim command set [latex.ltx]
-%
-\begingroup
-  \catcode`\ =\active
-  \obeylines %
-  % ignore everything up to the first ^^M, that's the newline at the end
-  % of the @verbatim input line itself.  Otherwise we get an extra blank
-  % line in the output.
-  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
-  % We really want {...\end verbatim} in the body of the macro, but
-  % without the active space; thus we have to use \xdef and \gobble.
-\endgroup
-%
-\envdef\verbatim{%
-    \setupverbatim\doverbatim
-}
-\let\Everbatim = \afterenvbreak
-
-
-% @verbatiminclude FILE - insert text of file in verbatim environment.
-%
-\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
-%
-\def\doverbatiminclude#1{%
-  {%
-    \makevalueexpandable
-    \setupverbatim
-    \indexnofonts       % Allow `@@' and other weird things in file names.
-    \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
-    \input #1
-    \afterenvbreak
-  }%
-}
-
-% @copying ... @end copying.
-% Save the text away for @insertcopying later.
-%
-% We save the uninterpreted tokens, rather than creating a box.
-% Saving the text in a box would be much easier, but then all the
-% typesetting commands (@smallbook, font changes, etc.) have to be done
-% beforehand -- and a) we want @copying to be done first in the source
-% file; b) letting users define the frontmatter in as flexible order as
-% possible is very desirable.
-%
-\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
-\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
-%
-\def\insertcopying{%
-  \begingroup
-    \parindent = 0pt  % paragraph indentation looks wrong on title page
-    \scanexp\copyingtext
-  \endgroup
-}
-
-
-\message{defuns,}
-% @defun etc.
-
-\newskip\defbodyindent \defbodyindent=.4in
-\newskip\defargsindent \defargsindent=50pt
-\newskip\deflastargmargin \deflastargmargin=18pt
-\newcount\defunpenalty
-
-% Start the processing of @deffn:
-\def\startdefun{%
-  \ifnum\lastpenalty<10000
-    \medbreak
-    \defunpenalty=10003 % Will keep this @deffn together with the
-                        % following @def command, see below.
-  \else
-    % If there are two @def commands in a row, we'll have a \nobreak,
-    % which is there to keep the function description together with its
-    % header.  But if there's nothing but headers, we need to allow a
-    % break somewhere.  Check specifically for penalty 10002, inserted
-    % by \printdefunline, instead of 10000, since the sectioning
-    % commands also insert a nobreak penalty, and we don't want to allow
-    % a break between a section heading and a defun.
-    %
-    % As a further refinement, we avoid "club" headers by signalling
-    % with penalty of 10003 after the very first @deffn in the
-    % sequence (see above), and penalty of 10002 after any following
-    % @def command.
-    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
-    %
-    % Similarly, after a section heading, do not allow a break.
-    % But do insert the glue.
-    \medskip  % preceded by discardable penalty, so not a breakpoint
-  \fi
-  %
-  \parindent=0in
-  \advance\leftskip by \defbodyindent
-  \exdentamount=\defbodyindent
-}
-
-\def\dodefunx#1{%
-  % First, check whether we are in the right environment:
-  \checkenv#1%
-  %
-  % As above, allow line break if we have multiple x headers in a row.
-  % It's not a great place, though.
-  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
-  %
-  % And now, it's time to reuse the body of the original defun:
-  \expandafter\gobbledefun#1%
-}
-\def\gobbledefun#1\startdefun{}
-
-% \printdefunline \deffnheader{text}
-%
-\def\printdefunline#1#2{%
-  \begingroup
-    % call \deffnheader:
-    #1#2 \endheader
-    % common ending:
-    \interlinepenalty = 10000
-    \advance\rightskip by 0pt plus 1fil\relax
-    \endgraf
-    \nobreak\vskip -\parskip
-    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
-    % Some of the @defun-type tags do not enable magic parentheses,
-    % rendering the following check redundant.  But we don't optimize.
-    \checkparencounts
-  \endgroup
-}
-
-\def\Edefun{\endgraf\medbreak}
-
-% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
-% the only thing remaining is to define \deffnheader.
-%
-\def\makedefun#1{%
-  \expandafter\let\csname E#1\endcsname = \Edefun
-  \edef\temp{\noexpand\domakedefun
-    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
-  \temp
-}
-
-% \domakedefun \deffn \deffnx \deffnheader
-%
-% Define \deffn and \deffnx, without parameters.
-% \deffnheader has to be defined explicitly.
-%
-\def\domakedefun#1#2#3{%
-  \envdef#1{%
-    \startdefun
-    \doingtypefnfalse    % distinguish typed functions from all else
-    \parseargusing\activeparens{\printdefunline#3}%
-  }%
-  \def#2{\dodefunx#1}%
-  \def#3%
-}
-
-\newif\ifdoingtypefn       % doing typed function?
-\newif\ifrettypeownline    % typeset return type on its own line?
-
-% @deftypefnnewline on|off says whether the return type of typed functions
-% are printed on their own line.  This affects @deftypefn, @deftypefun,
-% @deftypeop, and @deftypemethod.
-% 
-\parseargdef\deftypefnnewline{%
-  \def\temp{#1}%
-  \ifx\temp\onword
-    \expandafter\let\csname SETtxideftypefnnl\endcsname
-      = \empty
-  \else\ifx\temp\offword
-    \expandafter\let\csname SETtxideftypefnnl\endcsname
-      = \relax
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @txideftypefnnl value `\temp',
-                must be on|off}%
-  \fi\fi
-}
-
-% Untyped functions:
-
-% @deffn category name args
-\makedefun{deffn}{\deffngeneral{}}
-
-% @deffn category class name args
-\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
-
-% \defopon {category on}class name args
-\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
-
-% \deffngeneral {subind}category name args
-%
-\def\deffngeneral#1#2 #3 #4\endheader{%
-  % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}.
-  \dosubind{fn}{\code{#3}}{#1}%
-  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
-}
-
-% Typed functions:
-
-% @deftypefn category type name args
-\makedefun{deftypefn}{\deftypefngeneral{}}
-
-% @deftypeop category class type name args
-\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
-
-% \deftypeopon {category on}class type name args
-\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
-
-% \deftypefngeneral {subind}category type name args
-%
-\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
-  \dosubind{fn}{\code{#4}}{#1}%
-  \doingtypefntrue
-  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
-}
-
-% Typed variables:
-
-% @deftypevr category type var args
-\makedefun{deftypevr}{\deftypecvgeneral{}}
-
-% @deftypecv category class type var args
-\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
-
-% \deftypecvof {category of}class type var args
-\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
-
-% \deftypecvgeneral {subind}category type var args
-%
-\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
-  \dosubind{vr}{\code{#4}}{#1}%
-  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
-}
-
-% Untyped variables:
-
-% @defvr category var args
-\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
-
-% @defcv category class var args
-\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
-
-% \defcvof {category of}class var args
-\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
-
-% Types:
-
-% @deftp category name args
-\makedefun{deftp}#1 #2 #3\endheader{%
-  \doind{tp}{\code{#2}}%
-  \defname{#1}{}{#2}\defunargs{#3\unskip}%
-}
-
-% Remaining @defun-like shortcuts:
-\makedefun{defun}{\deffnheader{\putwordDeffunc} }
-\makedefun{defmac}{\deffnheader{\putwordDefmac} }
-\makedefun{defspec}{\deffnheader{\putwordDefspec} }
-\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
-\makedefun{defvar}{\defvrheader{\putwordDefvar} }
-\makedefun{defopt}{\defvrheader{\putwordDefopt} }
-\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
-\makedefun{defmethod}{\defopon\putwordMethodon}
-\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
-\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
-\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
-
-% \defname, which formats the name of the @def (not the args).
-% #1 is the category, such as "Function".
-% #2 is the return type, if any.
-% #3 is the function name.
-%
-% We are followed by (but not passed) the arguments, if any.
-%
-\def\defname#1#2#3{%
-  \par
-  % Get the values of \leftskip and \rightskip as they were outside the @def...
-  \advance\leftskip by -\defbodyindent
-  %
-  % Determine if we are typesetting the return type of a typed function
-  % on a line by itself.
-  \rettypeownlinefalse
-  \ifdoingtypefn  % doing a typed function specifically?
-    % then check user option for putting return type on its own line:
-    \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
-      \rettypeownlinetrue
-    \fi
-  \fi
-  %
-  % How we'll format the category name.  Putting it in brackets helps
-  % distinguish it from the body text that may end up on the next line
-  % just below it.
-  \def\temp{#1}%
-  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
-  %
-  % Figure out line sizes for the paragraph shape.  We'll always have at
-  % least two.
-  \tempnum = 2
-  %
-  % The first line needs space for \box0; but if \rightskip is nonzero,
-  % we need only space for the part of \box0 which exceeds it:
-  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
-  %
-  % If doing a return type on its own line, we'll have another line.
-  \ifrettypeownline
-    \advance\tempnum by 1
-    \def\maybeshapeline{0in \hsize}%
-  \else
-    \def\maybeshapeline{}%
-  \fi
-  %
-  % The continuations:
-  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
-  %
-  % The final paragraph shape:
-  \parshape \tempnum  0in \dimen0  \maybeshapeline  \defargsindent \dimen2
-  %
-  % Put the category name at the right margin.
-  \noindent
-  \hbox to 0pt{%
-    \hfil\box0 \kern-\hsize
-    % \hsize has to be shortened this way:
-    \kern\leftskip
-    % Intentionally do not respect \rightskip, since we need the space.
-  }%
-  %
-  % Allow all lines to be underfull without complaint:
-  \tolerance=10000 \hbadness=10000
-  \exdentamount=\defbodyindent
-  {%
-    % defun fonts. We use typewriter by default (used to be bold) because:
-    % . we're printing identifiers, they should be in tt in principle.
-    % . in languages with many accents, such as Czech or French, it's
-    %   common to leave accents off identifiers.  The result looks ok in
-    %   tt, but exceedingly strange in rm.
-    % . we don't want -- and --- to be treated as ligatures.
-    % . this still does not fix the ?` and !` ligatures, but so far no
-    %   one has made identifiers using them :).
-    \df \tt
-    \def\temp{#2}% text of the return type
-    \ifx\temp\empty\else
-      \tclose{\temp}% typeset the return type
-      \ifrettypeownline
-        % put return type on its own line; prohibit line break following:
-        \hfil\vadjust{\nobreak}\break  
-      \else
-        \space  % type on same line, so just followed by a space
-      \fi
-    \fi           % no return type
-    #3% output function name
-  }%
-  {\rm\enskip}% hskip 0.5 em of \tenrm
-  %
-  \boldbrax
-  % arguments will be output next, if any.
-}
-
-% Print arguments in slanted roman (not ttsl), inconsistently with using
-% tt for the name.  This is because literal text is sometimes needed in
-% the argument list (groff manual), and ttsl and tt are not very
-% distinguishable.  Prevent hyphenation at `-' chars.
-%
-\def\defunargs#1{%
-  % use sl by default (not ttsl),
-  % tt for the names.
-  \df \sl \hyphenchar\font=0
-  %
-  % On the other hand, if an argument has two dashes (for instance), we
-  % want a way to get ttsl.  We used to recommend @var for that, so
-  % leave the code in, but it's strange for @var to lead to typewriter.
-  % Nowadays we recommend @code, since the difference between a ttsl hyphen
-  % and a tt hyphen is pretty tiny.  @code also disables ?` !`.
-  \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
-  #1%
-  \sl\hyphenchar\font=45
-}
-
-% We want ()&[] to print specially on the defun line.
-%
-\def\activeparens{%
-  \catcode`\(=\active \catcode`\)=\active
-  \catcode`\[=\active \catcode`\]=\active
-  \catcode`\&=\active
-}
-
-% Make control sequences which act like normal parenthesis chars.
-\let\lparen = ( \let\rparen = )
-
-% Be sure that we always have a definition for `(', etc.  For example,
-% if the fn name has parens in it, \boldbrax will not be in effect yet,
-% so TeX would otherwise complain about undefined control sequence.
-{
-  \activeparens
-  \global\let(=\lparen \global\let)=\rparen
-  \global\let[=\lbrack \global\let]=\rbrack
-  \global\let& = \&
-
-  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
-  \gdef\magicamp{\let&=\amprm}
-}
-
-\newcount\parencount
-
-% If we encounter &foo, then turn on ()-hacking afterwards
-\newif\ifampseen
-\def\amprm#1 {\ampseentrue{\bf\&#1 }}
-
-\def\parenfont{%
-  \ifampseen
-    % At the first level, print parens in roman,
-    % otherwise use the default font.
-    \ifnum \parencount=1 \rm \fi
-  \else
-    % The \sf parens (in \boldbrax) actually are a little bolder than
-    % the contained text.  This is especially needed for [ and ] .
-    \sf
-  \fi
-}
-\def\infirstlevel#1{%
-  \ifampseen
-    \ifnum\parencount=1
-      #1%
-    \fi
-  \fi
-}
-\def\bfafterword#1 {#1 \bf}
-
-\def\opnr{%
-  \global\advance\parencount by 1
-  {\parenfont(}%
-  \infirstlevel \bfafterword
-}
-\def\clnr{%
-  {\parenfont)}%
-  \infirstlevel \sl
-  \global\advance\parencount by -1
-}
-
-\newcount\brackcount
-\def\lbrb{%
-  \global\advance\brackcount by 1
-  {\bf[}%
-}
-\def\rbrb{%
-  {\bf]}%
-  \global\advance\brackcount by -1
-}
-
-\def\checkparencounts{%
-  \ifnum\parencount=0 \else \badparencount \fi
-  \ifnum\brackcount=0 \else \badbrackcount \fi
-}
-% these should not use \errmessage; the glibc manual, at least, actually
-% has such constructs (when documenting function pointers).
-\def\badparencount{%
-  \message{Warning: unbalanced parentheses in @def...}%
-  \global\parencount=0
-}
-\def\badbrackcount{%
-  \message{Warning: unbalanced square brackets in @def...}%
-  \global\brackcount=0
-}
-
-
-\message{macros,}
-% @macro.
-
-% To do this right we need a feature of e-TeX, \scantokens,
-% which we arrange to emulate with a temporary file in ordinary TeX.
-\ifx\eTeXversion\thisisundefined
-  \newwrite\macscribble
-  \def\scantokens#1{%
-    \toks0={#1}%
-    \immediate\openout\macscribble=\jobname.tmp
-    \immediate\write\macscribble{\the\toks0}%
-    \immediate\closeout\macscribble
-    \input \jobname.tmp
-  }
-\fi
-
-\def\scanmacro#1{\begingroup
-  \newlinechar`\^^M
-  \let\xeatspaces\eatspaces
-  %
-  % Undo catcode changes of \startcontents and \doprintindex
-  % When called from @insertcopying or (short)caption, we need active
-  % backslash to get it printed correctly.  Previously, we had
-  % \catcode`\\=\other instead.  We'll see whether a problem appears
-  % with macro expansion.                              --kasal, 19aug04
-  \catcode`\@=0 \catcode`\\=\active \escapechar=`\@
-  %
-  % ... and for \example:
-  \spaceisspace
-  %
-  % The \empty here causes a following catcode 5 newline to be eaten as
-  % part of reading whitespace after a control sequence.  It does not
-  % eat a catcode 13 newline.  There's no good way to handle the two
-  % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX
-  % would then have different behavior).  See the Macro Details node in
-  % the manual for the workaround we recommend for macros and
-  % line-oriented commands.
-  % 
-  \scantokens{#1\empty}%
-\endgroup}
-
-\def\scanexp#1{%
-  \edef\temp{\noexpand\scanmacro{#1}}%
-  \temp
-}
-
-\newcount\paramno   % Count of parameters
-\newtoks\macname    % Macro name
-\newif\ifrecursive  % Is it recursive?
-
-% List of all defined macros in the form
-%    \definedummyword\macro1\definedummyword\macro2...
-% Currently is also contains all @aliases; the list can be split
-% if there is a need.
-\def\macrolist{}
-
-% Add the macro to \macrolist
-\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
-\def\addtomacrolistxxx#1{%
-     \toks0 = \expandafter{\macrolist\definedummyword#1}%
-     \xdef\macrolist{\the\toks0}%
-}
-
-% Utility routines.
-% This does \let #1 = #2, with \csnames; that is,
-%   \let \csname#1\endcsname = \csname#2\endcsname
-% (except of course we have to play expansion games).
-%
-\def\cslet#1#2{%
-  \expandafter\let
-  \csname#1\expandafter\endcsname
-  \csname#2\endcsname
-}
-
-% Trim leading and trailing spaces off a string.
-% Concepts from aro-bend problem 15 (see CTAN).
-{\catcode`\@=11
-\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
-\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
-\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
-\def\unbrace#1{#1}
-\unbrace{\gdef\trim@@@ #1 } #2@{#1}
-}
-
-% Trim a single trailing ^^M off a string.
-{\catcode`\^^M=\other \catcode`\Q=3%
-\gdef\eatcr #1{\eatcra #1Q^^MQ}%
-\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
-\gdef\eatcrb#1Q#2Q{#1}%
-}
-
-% Macro bodies are absorbed as an argument in a context where
-% all characters are catcode 10, 11 or 12, except \ which is active
-% (as in normal texinfo). It is necessary to change the definition of \
-% to recognize macro arguments; this is the job of \mbodybackslash.
-%
-% Non-ASCII encodings make 8-bit characters active, so un-activate
-% them to avoid their expansion.  Must do this non-globally, to
-% confine the change to the current group.
-%
-% It's necessary to have hard CRs when the macro is executed. This is
-% done by making ^^M (\endlinechar) catcode 12 when reading the macro
-% body, and then making it the \newlinechar in \scanmacro.
-%
-\def\scanctxt{% used as subroutine
-  \catcode`\"=\other
-  \catcode`\+=\other
-  \catcode`\<=\other
-  \catcode`\>=\other
-  \catcode`\@=\other
-  \catcode`\^=\other
-  \catcode`\_=\other
-  \catcode`\|=\other
-  \catcode`\~=\other
-  \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi
-}
-
-\def\scanargctxt{% used for copying and captions, not macros.
-  \scanctxt
-  \catcode`\\=\other
-  \catcode`\^^M=\other
-}
-
-\def\macrobodyctxt{% used for @macro definitions
-  \scanctxt
-  \catcode`\{=\other
-  \catcode`\}=\other
-  \catcode`\^^M=\other
-  \usembodybackslash
-}
-
-\def\macroargctxt{% used when scanning invocations
-  \scanctxt
-  \catcode`\\=0
-}
-% why catcode 0 for \ in the above?  To recognize \\ \{ \} as "escapes"
-% for the single characters \ { }.  Thus, we end up with the "commands"
-% that would be written @\ @{ @} in a Texinfo document.
-% 
-% We already have @{ and @}.  For @\, we define it here, and only for
-% this purpose, to produce a typewriter backslash (so, the @\ that we
-% define for @math can't be used with @macro calls):
-%
-\def\\{\normalbackslash}%
-% 
-% We would like to do this for \, too, since that is what makeinfo does.
-% But it is not possible, because Texinfo already has a command @, for a
-% cedilla accent.  Documents must use @comma{} instead.
-%
-% \anythingelse will almost certainly be an error of some kind.
-
-
-% \mbodybackslash is the definition of \ in @macro bodies.
-% It maps \foo\ => \csname macarg.foo\endcsname => #N
-% where N is the macro parameter number.
-% We define \csname macarg.\endcsname to be \realbackslash, so
-% \\ in macro replacement text gets you a backslash.
-%
-{\catcode`@=0 @catcode`@\=@active
- @gdef@usembodybackslash{@let\=@mbodybackslash}
- @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
-}
-\expandafter\def\csname macarg.\endcsname{\realbackslash}
-
-\def\margbackslash#1{\char`\#1 }
-
-\def\macro{\recursivefalse\parsearg\macroxxx}
-\def\rmacro{\recursivetrue\parsearg\macroxxx}
-
-\def\macroxxx#1{%
-  \getargs{#1}% now \macname is the macname and \argl the arglist
-  \ifx\argl\empty       % no arguments
-     \paramno=0\relax
-  \else
-     \expandafter\parsemargdef \argl;%
-     \if\paramno>256\relax
-       \ifx\eTeXversion\thisisundefined
-         \errhelp = \EMsimple
-         \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
-       \fi
-     \fi
-  \fi
-  \if1\csname ismacro.\the\macname\endcsname
-     \message{Warning: redefining \the\macname}%
-  \else
-     \expandafter\ifx\csname \the\macname\endcsname \relax
-     \else \errmessage{Macro name \the\macname\space already defined}\fi
-     \global\cslet{macsave.\the\macname}{\the\macname}%
-     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
-     \addtomacrolist{\the\macname}%
-  \fi
-  \begingroup \macrobodyctxt
-  \ifrecursive \expandafter\parsermacbody
-  \else \expandafter\parsemacbody
-  \fi}
-
-\parseargdef\unmacro{%
-  \if1\csname ismacro.#1\endcsname
-    \global\cslet{#1}{macsave.#1}%
-    \global\expandafter\let \csname ismacro.#1\endcsname=0%
-    % Remove the macro name from \macrolist:
-    \begingroup
-      \expandafter\let\csname#1\endcsname \relax
-      \let\definedummyword\unmacrodo
-      \xdef\macrolist{\macrolist}%
-    \endgroup
-  \else
-    \errmessage{Macro #1 not defined}%
-  \fi
-}
-
-% Called by \do from \dounmacro on each macro.  The idea is to omit any
-% macro definitions that have been changed to \relax.
-%
-\def\unmacrodo#1{%
-  \ifx #1\relax
-    % remove this
-  \else
-    \noexpand\definedummyword \noexpand#1%
-  \fi
-}
-
-% This makes use of the obscure feature that if the last token of a
-% <parameter list> is #, then the preceding argument is delimited by
-% an opening brace, and that opening brace is not consumed.
-\def\getargs#1{\getargsxxx#1{}}
-\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
-\def\getmacname#1 #2\relax{\macname={#1}}
-\def\getmacargs#1{\def\argl{#1}}
-
-% For macro processing make @ a letter so that we can make Texinfo private macro names.
-\edef\texiatcatcode{\the\catcode`\@}
-\catcode `@=11\relax
-
-% Parse the optional {params} list.  Set up \paramno and \paramlist
-% so \defmacro knows what to do.  Define \macarg.BLAH for each BLAH
-% in the params list to some hook where the argument is to be expanded.  If
-% there are less than 10 arguments that hook is to be replaced by ##N where N
-% is the position in that list, that is to say the macro arguments are to be
-% defined `a la TeX in the macro body.  
-%
-% That gets used by \mbodybackslash (above).
-%
-% We need to get `macro parameter char #' into several definitions.
-% The technique used is stolen from LaTeX: let \hash be something
-% unexpandable, insert that wherever you need a #, and then redefine
-% it to # just before using the token list produced.
-%
-% The same technique is used to protect \eatspaces till just before
-% the macro is used.
-%
-% If there are 10 or more arguments, a different technique is used, where the
-% hook remains in the body, and when macro is to be expanded the body is
-% processed again to replace the arguments.
-%
-% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
-% argument N value and then \edef  the body (nothing else will expand because of
-% the catcode regime underwhich the body was input).
-%
-% If you compile with TeX (not eTeX), and you have macros with 10 or more
-% arguments, you need that no macro has more than 256 arguments, otherwise an
-% error is produced.
-\def\parsemargdef#1;{%
-  \paramno=0\def\paramlist{}%
-  \let\hash\relax
-  \let\xeatspaces\relax
-  \parsemargdefxxx#1,;,%
-  % In case that there are 10 or more arguments we parse again the arguments
-  % list to set new definitions for the \macarg.BLAH macros corresponding to
-  % each BLAH argument. It was anyhow needed to parse already once this list
-  % in order to count the arguments, and as macros with at most 9 arguments
-  % are by far more frequent than macro with 10 or more arguments, defining
-  % twice the \macarg.BLAH macros does not cost too much processing power.
-  \ifnum\paramno<10\relax\else
-    \paramno0\relax
-    \parsemmanyargdef@@#1,;,% 10 or more arguments
-  \fi
-}
-\def\parsemargdefxxx#1,{%
-  \if#1;\let\next=\relax
-  \else \let\next=\parsemargdefxxx
-    \advance\paramno by 1
-    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
-        {\xeatspaces{\hash\the\paramno}}%
-    \edef\paramlist{\paramlist\hash\the\paramno,}%
-  \fi\next}
-
-\def\parsemmanyargdef@@#1,{%
-  \if#1;\let\next=\relax
-  \else 
-    \let\next=\parsemmanyargdef@@
-    \edef\tempb{\eatspaces{#1}}%
-    \expandafter\def\expandafter\tempa
-       \expandafter{\csname macarg.\tempb\endcsname}%
-    % Note that we need some extra \noexpand\noexpand, this is because we
-    % don't want \the  to be expanded in the \parsermacbody  as it uses an
-    % \xdef .
-    \expandafter\edef\tempa
-      {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
-    \advance\paramno by 1\relax
-  \fi\next}
-
-% These two commands read recursive and nonrecursive macro bodies.
-% (They're different since rec and nonrec macros end differently.)
-%
-
-\catcode `\@\texiatcatcode
-\long\def\parsemacbody#1@end macro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\long\def\parsermacbody#1@end rmacro%
-{\xdef\temp{\eatcr{#1}}\endgroup\defmacro}%
-\catcode `\@=11\relax
-
-\let\endargs@\relax
-\let\nil@\relax
-\def\nilm@{\nil@}%
-\long\def\nillm@{\nil@}%
-
-% This macro is expanded during the Texinfo macro expansion, not during its
-% definition.  It gets all the arguments values and assigns them to macros
-% macarg.ARGNAME
-%
-% #1 is the macro name
-% #2 is the list of argument names
-% #3 is the list of argument values
-\def\getargvals@#1#2#3{%
-  \def\macargdeflist@{}%
-  \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
-  \def\paramlist{#2,\nil@}%
-  \def\macroname{#1}%
-  \begingroup
-  \macroargctxt
-  \def\argvaluelist{#3,\nil@}%
-  \def\@tempa{#3}%
-  \ifx\@tempa\empty
-    \setemptyargvalues@
-  \else
-    \getargvals@@
-  \fi
-}
-
-% 
-\def\getargvals@@{%
-  \ifx\paramlist\nilm@
-      % Some sanity check needed here that \argvaluelist is also empty.
-      \ifx\argvaluelist\nillm@
-      \else
-        \errhelp = \EMsimple
-        \errmessage{Too many arguments in macro `\macroname'!}%
-      \fi
-      \let\next\macargexpandinbody@
-  \else
-    \ifx\argvaluelist\nillm@
-       % No more arguments values passed to macro.  Set remaining named-arg
-       % macros to empty.
-       \let\next\setemptyargvalues@
-    \else
-      % pop current arg name into \@tempb
-      \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
-      \expandafter\@tempa\expandafter{\paramlist}%
-       % pop current argument value into \@tempc
-      \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
-      \expandafter\@tempa\expandafter{\argvaluelist}%
-       % Here \@tempb is the current arg name and \@tempc is the current arg value.
-       % First place the new argument macro definition into \@tempd
-       \expandafter\macname\expandafter{\@tempc}%
-       \expandafter\let\csname macarg.\@tempb\endcsname\relax
-       \expandafter\def\expandafter\@tempe\expandafter{%
-         \csname macarg.\@tempb\endcsname}%
-       \edef\@tempd{\long\def\@tempe{\the\macname}}%
-       \push@\@tempd\macargdeflist@
-       \let\next\getargvals@@
-    \fi
-  \fi
-  \next
-}
-
-\def\push@#1#2{%
-  \expandafter\expandafter\expandafter\def
-  \expandafter\expandafter\expandafter#2%
-  \expandafter\expandafter\expandafter{%
-  \expandafter#1#2}%
-}
-
-% Replace arguments by their values in the macro body, and place the result
-% in macro \@tempa
-\def\macvalstoargs@{%
-  %  To do this we use the property that token registers that are \the'ed
-  % within an \edef  expand only once. So we are going to place all argument
-  % values into respective token registers.
-  %
-  % First we save the token context, and initialize argument numbering.
-  \begingroup
-    \paramno0\relax
-    % Then, for each argument number #N, we place the corresponding argument
-    % value into a new token list register \toks#N
-    \expandafter\putargsintokens@\saveparamlist@,;,%
-    % Then, we expand the body so that argument are replaced by their
-    % values. The trick for values not to be expanded themselves is that they
-    % are within tokens and that tokens expand only once in an \edef .
-    \edef\@tempc{\csname mac.\macroname .body\endcsname}%
-    % Now we restore the token stack pointer to free the token list registers
-    % which we have used, but we make sure that expanded body is saved after
-    % group.
-    \expandafter
-  \endgroup
-  \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
-  }
-
-\def\macargexpandinbody@{% 
-  %% Define the named-macro outside of this group and then close this group. 
-  \expandafter
-  \endgroup
-  \macargdeflist@
-  % First the replace in body the macro arguments by their values, the result
-  % is in \@tempa .
-  \macvalstoargs@
-  % Then we point at the \norecurse or \gobble (for recursive) macro value
-  % with \@tempb .
-  \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
-  % Depending on whether it is recursive or not, we need some tailing
-  % \egroup .
-  \ifx\@tempb\gobble
-     \let\@tempc\relax
-  \else
-     \let\@tempc\egroup
-  \fi
-  % And now we do the real job:
-  \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
-  \@tempd
-}
-
-\def\putargsintokens@#1,{%
-  \if#1;\let\next\relax
-  \else
-    \let\next\putargsintokens@
-    % First we allocate the new token list register, and give it a temporary
-    % alias \@tempb .
-    \toksdef\@tempb\the\paramno
-    % Then we place the argument value into that token list register.
-    \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
-    \expandafter\@tempb\expandafter{\@tempa}%
-    \advance\paramno by 1\relax
-  \fi
-  \next
-}
-
-% Save the token stack pointer into macro #1
-\def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}}
-% Restore the token stack pointer from number in macro #1
-\def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax}
-% newtoks that can be used non \outer .
-\def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi}
-
-% Tailing missing arguments are set to empty
-\def\setemptyargvalues@{%
-  \ifx\paramlist\nilm@
-    \let\next\macargexpandinbody@
-  \else
-    \expandafter\setemptyargvaluesparser@\paramlist\endargs@
-    \let\next\setemptyargvalues@
-  \fi
-  \next
-}
-
-\def\setemptyargvaluesparser@#1,#2\endargs@{%
-  \expandafter\def\expandafter\@tempa\expandafter{%
-    \expandafter\def\csname macarg.#1\endcsname{}}%
-  \push@\@tempa\macargdeflist@
-  \def\paramlist{#2}%
-}
-
-% #1 is the element target macro
-% #2 is the list macro
-% #3,#4\endargs@ is the list value
-\def\pop@#1#2#3,#4\endargs@{%
-   \def#1{#3}%
-   \def#2{#4}%
-}
-\long\def\longpop@#1#2#3,#4\endargs@{%
-   \long\def#1{#3}%
-   \long\def#2{#4}%
-}
-
-% This defines a Texinfo @macro. There are eight cases: recursive and
-% nonrecursive macros of zero, one, up to nine, and many arguments.
-% Much magic with \expandafter here.
-% \xdef is used so that macro definitions will survive the file
-% they're defined in; @include reads the file inside a group.
-%
-\def\defmacro{%
-  \let\hash=##% convert placeholders to macro parameter chars
-  \ifrecursive
-    \ifcase\paramno
-    % 0
-      \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\scanmacro{\temp}}%
-    \or % 1
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-         \egroup\noexpand\scanmacro{\temp}}%
-    \else
-      \ifnum\paramno<10\relax % at most 9
-        \expandafter\xdef\csname\the\macname\endcsname{%
-           \bgroup\noexpand\macroargctxt
-           \noexpand\csname\the\macname xx\endcsname}%
-        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-        \expandafter\expandafter
-        \expandafter\xdef
-        \expandafter\expandafter
-          \csname\the\macname xxx\endcsname
-            \paramlist{\egroup\noexpand\scanmacro{\temp}}%
-      \else % 10 or more
-        \expandafter\xdef\csname\the\macname\endcsname{%
-          \noexpand\getargvals@{\the\macname}{\argl}%
-        }%    
-        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
-        \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
-      \fi
-    \fi
-  \else
-    \ifcase\paramno
-    % 0
-      \expandafter\xdef\csname\the\macname\endcsname{%
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
-    \or % 1
-      \expandafter\xdef\csname\the\macname\endcsname{%
-         \bgroup\noexpand\macroargctxt
-         \noexpand\braceorline
-         \expandafter\noexpand\csname\the\macname xxx\endcsname}%
-      \expandafter\xdef\csname\the\macname xxx\endcsname##1{%
-        \egroup
-        \noexpand\norecurse{\the\macname}%
-        \noexpand\scanmacro{\temp}\egroup}%
-    \else % at most 9
-      \ifnum\paramno<10\relax
-        \expandafter\xdef\csname\the\macname\endcsname{%
-           \bgroup\noexpand\macroargctxt
-           \expandafter\noexpand\csname\the\macname xx\endcsname}%
-        \expandafter\xdef\csname\the\macname xx\endcsname##1{%
-            \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}%
-        \expandafter\expandafter
-        \expandafter\xdef
-        \expandafter\expandafter
-        \csname\the\macname xxx\endcsname
-        \paramlist{%
-            \egroup
-            \noexpand\norecurse{\the\macname}%
-            \noexpand\scanmacro{\temp}\egroup}%
-      \else % 10 or more:
-        \expandafter\xdef\csname\the\macname\endcsname{%
-          \noexpand\getargvals@{\the\macname}{\argl}%
-        }%
-        \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp
-        \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse
-      \fi
-    \fi
-  \fi}
-
-\catcode `\@\texiatcatcode\relax
-
-\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
-
-% \braceorline decides whether the next nonwhitespace character is a
-% {.  If so it reads up to the closing }, if not, it reads the whole
-% line.  Whatever was read is then fed to the next control sequence
-% as an argument (by \parsebrace or \parsearg).
-% 
-\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
-\def\braceorlinexxx{%
-  \ifx\nchar\bgroup\else
-    \expandafter\parsearg
-  \fi \macnamexxx}
-
-
-% @alias.
-% We need some trickery to remove the optional spaces around the equal
-% sign.  Make them active and then expand them all to nothing.
-%
-\def\alias{\parseargusing\obeyspaces\aliasxxx}
-\def\aliasxxx #1{\aliasyyy#1\relax}
-\def\aliasyyy #1=#2\relax{%
-  {%
-    \expandafter\let\obeyedspace=\empty
-    \addtomacrolist{#1}%
-    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
-  }%
-  \next
-}
-
-
-\message{cross references,}
-
-\newwrite\auxfile
-\newif\ifhavexrefs    % True if xref values are known.
-\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
-
-% @inforef is relatively simple.
-\def\inforef #1{\inforefzzz #1,,,,**}
-\def\inforefzzz #1,#2,#3,#4**{%
-  \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
-  node \samp{\ignorespaces#1{}}}
-
-% @node's only job in TeX is to define \lastnode, which is used in
-% cross-references.  The @node line might or might not have commas, and
-% might or might not have spaces before the first comma, like:
-% @node foo , bar , ...
-% We don't want such trailing spaces in the node name.
-%
-\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
-%
-% also remove a trailing comma, in case of something like this:
-% @node Help-Cross,  ,  , Cross-refs
-\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
-\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}}
-
-\let\nwnode=\node
-\let\lastnode=\empty
-
-% Write a cross-reference definition for the current node.  #1 is the
-% type (Ynumbered, Yappendix, Ynothing).
-%
-\def\donoderef#1{%
-  \ifx\lastnode\empty\else
-    \setref{\lastnode}{#1}%
-    \global\let\lastnode=\empty
-  \fi
-}
-
-% @anchor{NAME} -- define xref target at arbitrary point.
-%
-\newcount\savesfregister
-%
-\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
-\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
-\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
-
-% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
-% anchor), which consists of three parts:
-% 1) NAME-title - the current sectioning name taken from \lastsection,
-%                 or the anchor name.
-% 2) NAME-snt   - section number and type, passed as the SNT arg, or
-%                 empty for anchors.
-% 3) NAME-pg    - the page number.
-%
-% This is called from \donoderef, \anchor, and \dofloat.  In the case of
-% floats, there is an additional part, which is not written here:
-% 4) NAME-lof   - the text as it should appear in a @listoffloats.
-%
-\def\setref#1#2{%
-  \pdfmkdest{#1}%
-  \iflinks
-    {%
-      \atdummies  % preserve commands, but don't expand them
-      \edef\writexrdef##1##2{%
-       \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
-         ##1}{##2}}% these are parameters of \writexrdef
-      }%
-      \toks0 = \expandafter{\lastsection}%
-      \immediate \writexrdef{title}{\the\toks0 }%
-      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
-      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
-    }%
-  \fi
-}
-
-% @xrefautosectiontitle on|off says whether @section(ing) names are used
-% automatically in xrefs, if the third arg is not explicitly specified.
-% This was provided as a "secret" @set xref-automatic-section-title
-% variable, now it's official.
-% 
-\parseargdef\xrefautomaticsectiontitle{%
-  \def\temp{#1}%
-  \ifx\temp\onword
-    \expandafter\let\csname SETxref-automatic-section-title\endcsname
-      = \empty
-  \else\ifx\temp\offword
-    \expandafter\let\csname SETxref-automatic-section-title\endcsname
-      = \relax
-  \else
-    \errhelp = \EMsimple
-    \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
-                must be on|off}%
-  \fi\fi
-}
-
-% \f
-% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
-% the node name, #2 the name of the Info cross-reference, #3 the printed
-% node name, #4 the name of the Info file, #5 the name of the printed
-% manual.  All but the node name can be omitted.
-%
-\def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]}
-\def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]}
-\def\ref#1{\xrefX[#1,,,,,,,]}
-%
-\newbox\toprefbox
-\newbox\printedrefnamebox
-\newbox\infofilenamebox
-\newbox\printedmanualbox
-%
-\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
-  \unsepspaces
-  %
-  % Get args without leading/trailing spaces.
-  \def\printedrefname{\ignorespaces #3}%
-  \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
-  %
-  \def\infofilename{\ignorespaces #4}%
-  \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
-  %
-  \def\printedmanual{\ignorespaces #5}%
-  \setbox\printedmanualbox  = \hbox{\printedmanual\unskip}%
-  %
-  % If the printed reference name (arg #3) was not explicitly given in
-  % the @xref, figure out what we want to use.
-  \ifdim \wd\printedrefnamebox = 0pt
-    % No printed node name was explicitly given.
-    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
-      % Not auto section-title: use node name inside the square brackets.
-      \def\printedrefname{\ignorespaces #1}%
-    \else
-      % Auto section-title: use chapter/section title inside
-      % the square brackets if we have it.
-      \ifdim \wd\printedmanualbox > 0pt
-        % It is in another manual, so we don't have it; use node name.
-        \def\printedrefname{\ignorespaces #1}%
-      \else
-        \ifhavexrefs
-          % We (should) know the real title if we have the xref values.
-          \def\printedrefname{\refx{#1-title}{}}%
-        \else
-          % Otherwise just copy the Info node name.
-          \def\printedrefname{\ignorespaces #1}%
-        \fi%
-      \fi
-    \fi
-  \fi
-  %
-  % Make link in pdf output.
-  \ifpdf
-    {\indexnofonts
-     \turnoffactive
-     \makevalueexpandable
-     % This expands tokens, so do it after making catcode changes, so _
-     % etc. don't get their TeX definitions.  This ignores all spaces in
-     % #4, including (wrongly) those in the middle of the filename.
-     \getfilename{#4}%
-     %
-     % This (wrongly) does not take account of leading or trailing
-     % spaces in #1, which should be ignored.
-     \edef\pdfxrefdest{#1}%
-     \ifx\pdfxrefdest\empty
-       \def\pdfxrefdest{Top}% no empty targets
-     \else
-       \txiescapepdf\pdfxrefdest  % escape PDF special chars
-     \fi
-     %
-     \leavevmode
-     \startlink attr{/Border [0 0 0]}%
-     \ifnum\filenamelength>0
-       goto file{\the\filename.pdf} name{\pdfxrefdest}%
-     \else
-       goto name{\pdfmkpgn{\pdfxrefdest}}%
-     \fi
-    }%
-    \setcolor{\linkcolor}%
-  \fi
-  %
-  % Float references are printed completely differently: "Figure 1.2"
-  % instead of "[somenode], p.3".  We distinguish them by the
-  % LABEL-title being set to a magic string.
-  {%
-    % Have to otherify everything special to allow the \csname to
-    % include an _ in the xref name, etc.
-    \indexnofonts
-    \turnoffactive
-    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
-      \csname XR#1-title\endcsname
-  }%
-  \iffloat\Xthisreftitle
-    % If the user specified the print name (third arg) to the ref,
-    % print it instead of our usual "Figure 1.2".
-    \ifdim\wd\printedrefnamebox = 0pt
-      \refx{#1-snt}{}%
-    \else
-      \printedrefname
-    \fi
-    %
-    % If the user also gave the printed manual name (fifth arg), append
-    % "in MANUALNAME".
-    \ifdim \wd\printedmanualbox > 0pt
-      \space \putwordin{} \cite{\printedmanual}%
-    \fi
-  \else
-    % node/anchor (non-float) references.
-    % 
-    % If we use \unhbox to print the node names, TeX does not insert
-    % empty discretionaries after hyphens, which means that it will not
-    % find a line break at a hyphen in a node names.  Since some manuals
-    % are best written with fairly long node names, containing hyphens,
-    % this is a loss.  Therefore, we give the text of the node name
-    % again, so it is as if TeX is seeing it for the first time.
-    % 
-    \ifdim \wd\printedmanualbox > 0pt
-      % Cross-manual reference with a printed manual name.
-      % 
-      \crossmanualxref{\cite{\printedmanual\unskip}}%
-    %
-    \else\ifdim \wd\infofilenamebox > 0pt
-      % Cross-manual reference with only an info filename (arg 4), no
-      % printed manual name (arg 5).  This is essentially the same as
-      % the case above; we output the filename, since we have nothing else.
-      % 
-      \crossmanualxref{\code{\infofilename\unskip}}%
-    %
-    \else
-      % Reference within this manual.
-      %
-      % _ (for example) has to be the character _ for the purposes of the
-      % control sequence corresponding to the node, but it has to expand
-      % into the usual \leavevmode...\vrule stuff for purposes of
-      % printing. So we \turnoffactive for the \refx-snt, back on for the
-      % printing, back off for the \refx-pg.
-      {\turnoffactive
-       % Only output a following space if the -snt ref is nonempty; for
-       % @unnumbered and @anchor, it won't be.
-       \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
-       \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
-      }%
-      % output the `[mynode]' via the macro below so it can be overridden.
-      \xrefprintnodename\printedrefname
-      %
-      % But we always want a comma and a space:
-      ,\space
-      %
-      % output the `page 3'.
-      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
-    \fi\fi
-  \fi
-  \endlink
-\endgroup}
-
-% Output a cross-manual xref to #1.  Used just above (twice).
-% 
-% Only include the text "Section ``foo'' in" if the foo is neither
-% missing or Top.  Thus, @xref{,,,foo,The Foo Manual} outputs simply
-% "see The Foo Manual", the idea being to refer to the whole manual.
-% 
-% But, this being TeX, we can't easily compare our node name against the
-% string "Top" while ignoring the possible spaces before and after in
-% the input.  By adding the arbitrary 7sp below, we make it much less
-% likely that a real node name would have the same width as "Top" (e.g.,
-% in a monospaced font).  Hopefully it will never happen in practice.
-% 
-% For the same basic reason, we retypeset the "Top" at every
-% reference, since the current font is indeterminate.
-% 
-\def\crossmanualxref#1{%
-  \setbox\toprefbox = \hbox{Top\kern7sp}%
-  \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
-  \ifdim \wd2 > 7sp  % nonempty?
-    \ifdim \wd2 = \wd\toprefbox \else  % same as Top?
-      \putwordSection{} ``\printedrefname'' \putwordin{}\space
-    \fi
-  \fi
-  #1%
-}
-
-% This macro is called from \xrefX for the `[nodename]' part of xref
-% output.  It's a separate macro only so it can be changed more easily,
-% since square brackets don't work well in some documents.  Particularly
-% one that Bob is working on :).
-%
-\def\xrefprintnodename#1{[#1]}
-
-% Things referred to by \setref.
-%
-\def\Ynothing{}
-\def\Yomitfromtoc{}
-\def\Ynumbered{%
-  \ifnum\secno=0
-    \putwordChapter@tie \the\chapno
-  \else \ifnum\subsecno=0
-    \putwordSection@tie \the\chapno.\the\secno
-  \else \ifnum\subsubsecno=0
-    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
-  \else
-    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
-  \fi\fi\fi
-}
-\def\Yappendix{%
-  \ifnum\secno=0
-     \putwordAppendix@tie @char\the\appendixno{}%
-  \else \ifnum\subsecno=0
-     \putwordSection@tie @char\the\appendixno.\the\secno
-  \else \ifnum\subsubsecno=0
-    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
-  \else
-    \putwordSection@tie
-      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
-  \fi\fi\fi
-}
-
-% Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME.
-% If its value is nonempty, SUFFIX is output afterward.
-%
-\def\refx#1#2{%
-  {%
-    \indexnofonts
-    \otherbackslash
-    \expandafter\global\expandafter\let\expandafter\thisrefX
-      \csname XR#1\endcsname
-  }%
-  \ifx\thisrefX\relax
-    % If not defined, say something at least.
-    \angleleft un\-de\-fined\angleright
-    \iflinks
-      \ifhavexrefs
-        {\toks0 = {#1}% avoid expansion of possibly-complex value
-         \message{\linenumber Undefined cross reference `\the\toks0'.}}%
-      \else
-        \ifwarnedxrefs\else
-          \global\warnedxrefstrue
-          \message{Cross reference values unknown; you must run TeX again.}%
-        \fi
-      \fi
-    \fi
-  \else
-    % It's defined, so just use it.
-    \thisrefX
-  \fi
-  #2% Output the suffix in any case.
-}
-
-% This is the macro invoked by entries in the aux file.  Usually it's
-% just a \def (we prepend XR to the control sequence name to avoid
-% collisions).  But if this is a float type, we have more work to do.
-%
-\def\xrdef#1#2{%
-  {% The node name might contain 8-bit characters, which in our current
-   % implementation are changed to commands like @'e.  Don't let these
-   % mess up the control sequence name.
-    \indexnofonts
-    \turnoffactive
-    \xdef\safexrefname{#1}%
-  }%
-  %
-  \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref
-  %
-  % Was that xref control sequence that we just defined for a float?
-  \expandafter\iffloat\csname XR\safexrefname\endcsname
-    % it was a float, and we have the (safe) float type in \iffloattype.
-    \expandafter\let\expandafter\floatlist
-      \csname floatlist\iffloattype\endcsname
-    %
-    % Is this the first time we've seen this float type?
-    \expandafter\ifx\floatlist\relax
-      \toks0 = {\do}% yes, so just \do
-    \else
-      % had it before, so preserve previous elements in list.
-      \toks0 = \expandafter{\floatlist\do}%
-    \fi
-    %
-    % Remember this xref in the control sequence \floatlistFLOATTYPE,
-    % for later use in \listoffloats.
-    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
-      {\safexrefname}}%
-  \fi
-}
-
-% Read the last existing aux file, if any.  No error if none exists.
-%
-\def\tryauxfile{%
-  \openin 1 \jobname.aux
-  \ifeof 1 \else
-    \readdatafile{aux}%
-    \global\havexrefstrue
-  \fi
-  \closein 1
-}
-
-\def\setupdatafile{%
-  \catcode`\^^@=\other
-  \catcode`\^^A=\other
-  \catcode`\^^B=\other
-  \catcode`\^^C=\other
-  \catcode`\^^D=\other
-  \catcode`\^^E=\other
-  \catcode`\^^F=\other
-  \catcode`\^^G=\other
-  \catcode`\^^H=\other
-  \catcode`\^^K=\other
-  \catcode`\^^L=\other
-  \catcode`\^^N=\other
-  \catcode`\^^P=\other
-  \catcode`\^^Q=\other
-  \catcode`\^^R=\other
-  \catcode`\^^S=\other
-  \catcode`\^^T=\other
-  \catcode`\^^U=\other
-  \catcode`\^^V=\other
-  \catcode`\^^W=\other
-  \catcode`\^^X=\other
-  \catcode`\^^Z=\other
-  \catcode`\^^[=\other
-  \catcode`\^^\=\other
-  \catcode`\^^]=\other
-  \catcode`\^^^=\other
-  \catcode`\^^_=\other
-  % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc.
-  % in xref tags, i.e., node names.  But since ^^e4 notation isn't
-  % supported in the main text, it doesn't seem desirable.  Furthermore,
-  % that is not enough: for node names that actually contain a ^
-  % character, we would end up writing a line like this: 'xrdef {'hat
-  % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first
-  % argument, and \hat is not an expandable control sequence.  It could
-  % all be worked out, but why?  Either we support ^^ or we don't.
-  %
-  % The other change necessary for this was to define \auxhat:
-  % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter
-  % and then to call \auxhat in \setq.
-  %
-  \catcode`\^=\other
-  %
-  % Special characters.  Should be turned off anyway, but...
-  \catcode`\~=\other
-  \catcode`\[=\other
-  \catcode`\]=\other
-  \catcode`\"=\other
-  \catcode`\_=\other
-  \catcode`\|=\other
-  \catcode`\<=\other
-  \catcode`\>=\other
-  \catcode`\$=\other
-  \catcode`\#=\other
-  \catcode`\&=\other
-  \catcode`\%=\other
-  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
-  %
-  % This is to support \ in node names and titles, since the \
-  % characters end up in a \csname.  It's easier than
-  % leaving it active and making its active definition an actual \
-  % character.  What I don't understand is why it works in the *value*
-  % of the xrdef.  Seems like it should be a catcode12 \, and that
-  % should not typeset properly.  But it works, so I'm moving on for
-  % now.  --karl, 15jan04.
-  \catcode`\\=\other
-  %
-  % Make the characters 128-255 be printing characters.
-  {%
-    \count1=128
-    \def\loop{%
-      \catcode\count1=\other
-      \advance\count1 by 1
-      \ifnum \count1<256 \loop \fi
-    }%
-  }%
-  %
-  % @ is our escape character in .aux files, and we need braces.
-  \catcode`\{=1
-  \catcode`\}=2
-  \catcode`\@=0
-}
-
-\def\readdatafile#1{%
-\begingroup
-  \setupdatafile
-  \input\jobname.#1
-\endgroup}
-
-
-\message{insertions,}
-% including footnotes.
-
-\newcount \footnoteno
-
-% The trailing space in the following definition for supereject is
-% vital for proper filling; pages come out unaligned when you do a
-% pagealignmacro call if that space before the closing brace is
-% removed. (Generally, numeric constants should always be followed by a
-% space to prevent strange expansion errors.)
-\def\supereject{\par\penalty -20000\footnoteno =0 }
-
-% @footnotestyle is meaningful for Info output only.
-\let\footnotestyle=\comment
-
-{\catcode `\@=11
-%
-% Auto-number footnotes.  Otherwise like plain.
-\gdef\footnote{%
-  \let\indent=\ptexindent
-  \let\noindent=\ptexnoindent
-  %
-  \global\advance\footnoteno by \@ne
-  \edef\thisfootno{$^{\the\footnoteno}$}%
-  %
-  % In case the footnote comes at the end of a sentence, preserve the
-  % extra spacing after we do the footnote number.
-  \let\@sf\empty
-  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
-  %
-  % Remove inadvertent blank space before typesetting the footnote number.
-  \unskip
-  \thisfootno\@sf
-  \dofootnote
-}%
-
-% Don't bother with the trickery in plain.tex to not require the
-% footnote text as a parameter.  Our footnotes don't need to be so general.
-%
-% Oh yes, they do; otherwise, @ifset (and anything else that uses
-% \parseargline) fails inside footnotes because the tokens are fixed when
-% the footnote is read.  --karl, 16nov96.
-%
-\gdef\dofootnote{%
-  \insert\footins\bgroup
-  %
-  % Nested footnotes are not supported in TeX, that would take a lot
-  % more work.  (\startsavinginserts does not suffice.)
-  \let\footnote=\errfootnote
-  %
-  % We want to typeset this text as a normal paragraph, even if the
-  % footnote reference occurs in (for example) a display environment.
-  % So reset some parameters.
-  \hsize=\pagewidth
-  \interlinepenalty\interfootnotelinepenalty
-  \splittopskip\ht\strutbox % top baseline for broken footnotes
-  \splitmaxdepth\dp\strutbox
-  \floatingpenalty\@MM
-  \leftskip\z@skip
-  \rightskip\z@skip
-  \spaceskip\z@skip
-  \xspaceskip\z@skip
-  \parindent\defaultparindent
-  %
-  \smallfonts \rm
-  %
-  % Because we use hanging indentation in footnotes, a @noindent appears
-  % to exdent this text, so make it be a no-op.  makeinfo does not use
-  % hanging indentation so @noindent can still be needed within footnote
-  % text after an @example or the like (not that this is good style).
-  \let\noindent = \relax
-  %
-  % Hang the footnote text off the number.  Use \everypar in case the
-  % footnote extends for more than one paragraph.
-  \everypar = {\hang}%
-  \textindent{\thisfootno}%
-  %
-  % Don't crash into the line above the footnote text.  Since this
-  % expands into a box, it must come within the paragraph, lest it
-  % provide a place where TeX can split the footnote.
-  \footstrut
-  %
-  % Invoke rest of plain TeX footnote routine.
-  \futurelet\next\fo@t
-}
-}%end \catcode `\@=11
-
-\def\errfootnote{%
-  \errhelp=\EMsimple
-  \errmessage{Nested footnotes not supported in texinfo.tex,
-    even though they work in makeinfo; sorry}
-}
-
-% In case a @footnote appears in a vbox, save the footnote text and create
-% the real \insert just after the vbox finished.  Otherwise, the insertion
-% would be lost.
-% Similarly, if a @footnote appears inside an alignment, save the footnote
-% text to a box and make the \insert when a row of the table is finished.
-% And the same can be done for other insert classes.  --kasal, 16nov03.
-%
-% Replace the \insert primitive by a cheating macro.
-% Deeper inside, just make sure that the saved insertions are not spilled
-% out prematurely.
-%
-\def\startsavinginserts{%
-  \ifx \insert\ptexinsert
-    \let\insert\saveinsert
-  \else
-    \let\checkinserts\relax
-  \fi
-}
-
-% This \insert replacement works for both \insert\footins{foo} and
-% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
-%
-\def\saveinsert#1{%
-  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
-  \afterassignment\next
-  % swallow the left brace
-  \let\temp =
-}
-\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
-\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
-
-\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
-
-\def\placesaveins#1{%
-  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
-    {\box#1}%
-}
-
-% eat @SAVE -- beware, all of them have catcode \other:
-{
-  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
-  \gdef\gobblesave @SAVE{}
-}
-
-% initialization:
-\def\newsaveins #1{%
-  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
-  \next
-}
-\def\newsaveinsX #1{%
-  \csname newbox\endcsname #1%
-  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
-    \checksaveins #1}%
-}
-
-% initialize:
-\let\checkinserts\empty
-\newsaveins\footins
-\newsaveins\margin
-
-
-% @image.  We use the macros from epsf.tex to support this.
-% If epsf.tex is not installed and @image is used, we complain.
-%
-% Check for and read epsf.tex up front.  If we read it only at @image
-% time, we might be inside a group, and then its definitions would get
-% undone and the next image would fail.
-\openin 1 = epsf.tex
-\ifeof 1 \else
-  % Do not bother showing banner with epsf.tex v2.7k (available in
-  % doc/epsf.tex and on ctan).
-  \def\epsfannounce{\toks0 = }%
-  \input epsf.tex
-\fi
-\closein 1
-%
-% We will only complain once about lack of epsf.tex.
-\newif\ifwarnednoepsf
-\newhelp\noepsfhelp{epsf.tex must be installed for images to
-  work.  It is also included in the Texinfo distribution, or you can get
-  it from ftp://tug.org/tex/epsf.tex.}
-%
-\def\image#1{%
-  \ifx\epsfbox\thisisundefined
-    \ifwarnednoepsf \else
-      \errhelp = \noepsfhelp
-      \errmessage{epsf.tex not found, images will be ignored}%
-      \global\warnednoepsftrue
-    \fi
-  \else
-    \imagexxx #1,,,,,\finish
-  \fi
-}
-%
-% Arguments to @image:
-% #1 is (mandatory) image filename; we tack on .eps extension.
-% #2 is (optional) width, #3 is (optional) height.
-% #4 is (ignored optional) html alt text.
-% #5 is (ignored optional) extension.
-% #6 is just the usual extra ignored arg for parsing stuff.
-\newif\ifimagevmode
-\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
-  \catcode`\^^M = 5     % in case we're inside an example
-  \normalturnoffactive  % allow _ et al. in names
-  % If the image is by itself, center it.
-  \ifvmode
-    \imagevmodetrue
-  \else \ifx\centersub\centerV
-    % for @center @image, we need a vbox so we can have our vertical space
-    \imagevmodetrue
-    \vbox\bgroup % vbox has better behavior than vtop herev
-  \fi\fi
-  %
-  \ifimagevmode
-    \nobreak\medskip
-    % Usually we'll have text after the image which will insert
-    % \parskip glue, so insert it here too to equalize the space
-    % above and below.
-    \nobreak\vskip\parskip
-    \nobreak
-  \fi
-  %
-  % Leave vertical mode so that indentation from an enclosing
-  %  environment such as @quotation is respected.
-  % However, if we're at the top level, we don't want the
-  %  normal paragraph indentation.
-  % On the other hand, if we are in the case of @center @image, we don't
-  %  want to start a paragraph, which will create a hsize-width box and
-  %  eradicate the centering.
-  \ifx\centersub\centerV\else \noindent \fi
-  %
-  % Output the image.
-  \ifpdf
-    \dopdfimage{#1}{#2}{#3}%
-  \else
-    % \epsfbox itself resets \epsf?size at each figure.
-    \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
-    \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
-    \epsfbox{#1.eps}%
-  \fi
-  %
-  \ifimagevmode
-    \medskip  % space after a standalone image
-  \fi  
-  \ifx\centersub\centerV \egroup \fi
-\endgroup}
-
-
-% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
-% etc.  We don't actually implement floating yet, we always include the
-% float "here".  But it seemed the best name for the future.
-%
-\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
-
-% There may be a space before second and/or third parameter; delete it.
-\def\eatcommaspace#1, {#1,}
-
-% #1 is the optional FLOATTYPE, the text label for this float, typically
-% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
-% this float will not be numbered and cannot be referred to.
-%
-% #2 is the optional xref label.  Also must be present for the float to
-% be referable.
-%
-% #3 is the optional positioning argument; for now, it is ignored.  It
-% will somehow specify the positions allowed to float to (here, top, bottom).
-%
-% We keep a separate counter for each FLOATTYPE, which we reset at each
-% chapter-level command.
-\let\resetallfloatnos=\empty
-%
-\def\dofloat#1,#2,#3,#4\finish{%
-  \let\thiscaption=\empty
-  \let\thisshortcaption=\empty
-  %
-  % don't lose footnotes inside @float.
-  %
-  % BEWARE: when the floats start float, we have to issue warning whenever an
-  % insert appears inside a float which could possibly float. --kasal, 26may04
-  %
-  \startsavinginserts
-  %
-  % We can't be used inside a paragraph.
-  \par
-  %
-  \vtop\bgroup
-    \def\floattype{#1}%
-    \def\floatlabel{#2}%
-    \def\floatloc{#3}% we do nothing with this yet.
-    %
-    \ifx\floattype\empty
-      \let\safefloattype=\empty
-    \else
-      {%
-        % the floattype might have accents or other special characters,
-        % but we need to use it in a control sequence name.
-        \indexnofonts
-        \turnoffactive
-        \xdef\safefloattype{\floattype}%
-      }%
-    \fi
-    %
-    % If label is given but no type, we handle that as the empty type.
-    \ifx\floatlabel\empty \else
-      % We want each FLOATTYPE to be numbered separately (Figure 1,
-      % Table 1, Figure 2, ...).  (And if no label, no number.)
-      %
-      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
-      \global\advance\floatno by 1
-      %
-      {%
-        % This magic value for \lastsection is output by \setref as the
-        % XREFLABEL-title value.  \xrefX uses it to distinguish float
-        % labels (which have a completely different output format) from
-        % node and anchor labels.  And \xrdef uses it to construct the
-        % lists of floats.
-        %
-        \edef\lastsection{\floatmagic=\safefloattype}%
-        \setref{\floatlabel}{Yfloat}%
-      }%
-    \fi
-    %
-    % start with \parskip glue, I guess.
-    \vskip\parskip
-    %
-    % Don't suppress indentation if a float happens to start a section.
-    \restorefirstparagraphindent
-}
-
-% we have these possibilities:
-% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
-% @float Foo,lbl & no caption:    Foo 1.1
-% @float Foo & @caption{Cap}:     Foo: Cap
-% @float Foo & no caption:        Foo
-% @float ,lbl & Caption{Cap}:     1.1: Cap
-% @float ,lbl & no caption:       1.1
-% @float & @caption{Cap}:         Cap
-% @float & no caption:
-%
-\def\Efloat{%
-    \let\floatident = \empty
-    %
-    % In all cases, if we have a float type, it comes first.
-    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
-    %
-    % If we have an xref label, the number comes next.
-    \ifx\floatlabel\empty \else
-      \ifx\floattype\empty \else % if also had float type, need tie first.
-        \appendtomacro\floatident{\tie}%
-      \fi
-      % the number.
-      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
-    \fi
-    %
-    % Start the printed caption with what we've constructed in
-    % \floatident, but keep it separate; we need \floatident again.
-    \let\captionline = \floatident
-    %
-    \ifx\thiscaption\empty \else
-      \ifx\floatident\empty \else
-       \appendtomacro\captionline{: }% had ident, so need a colon between
-      \fi
-      %
-      % caption text.
-      \appendtomacro\captionline{\scanexp\thiscaption}%
-    \fi
-    %
-    % If we have anything to print, print it, with space before.
-    % Eventually this needs to become an \insert.
-    \ifx\captionline\empty \else
-      \vskip.5\parskip
-      \captionline
-      %
-      % Space below caption.
-      \vskip\parskip
-    \fi
-    %
-    % If have an xref label, write the list of floats info.  Do this
-    % after the caption, to avoid chance of it being a breakpoint.
-    \ifx\floatlabel\empty \else
-      % Write the text that goes in the lof to the aux file as
-      % \floatlabel-lof.  Besides \floatident, we include the short
-      % caption if specified, else the full caption if specified, else nothing.
-      {%
-        \atdummies
-        %
-        % since we read the caption text in the macro world, where ^^M
-        % is turned into a normal character, we have to scan it back, so
-        % we don't write the literal three characters "^^M" into the aux file.
-       \scanexp{%
-         \xdef\noexpand\gtemp{%
-           \ifx\thisshortcaption\empty
-             \thiscaption
-           \else
-             \thisshortcaption
-           \fi
-         }%
-       }%
-        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
-         \ifx\gtemp\empty \else : \gtemp \fi}}%
-      }%
-    \fi
-  \egroup  % end of \vtop
-  %
-  % place the captured inserts
-  %
-  % BEWARE: when the floats start floating, we have to issue warning
-  % whenever an insert appears inside a float which could possibly
-  % float. --kasal, 26may04
-  %
-  \checkinserts
-}
-
-% Append the tokens #2 to the definition of macro #1, not expanding either.
-%
-\def\appendtomacro#1#2{%
-  \expandafter\def\expandafter#1\expandafter{#1#2}%
-}
-
-% @caption, @shortcaption
-%
-\def\caption{\docaption\thiscaption}
-\def\shortcaption{\docaption\thisshortcaption}
-\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
-\def\defcaption#1#2{\egroup \def#1{#2}}
-
-% The parameter is the control sequence identifying the counter we are
-% going to use.  Create it if it doesn't exist and assign it to \floatno.
-\def\getfloatno#1{%
-  \ifx#1\relax
-      % Haven't seen this figure type before.
-      \csname newcount\endcsname #1%
-      %
-      % Remember to reset this floatno at the next chap.
-      \expandafter\gdef\expandafter\resetallfloatnos
-        \expandafter{\resetallfloatnos #1=0 }%
-  \fi
-  \let\floatno#1%
-}
-
-% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
-% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
-% first read the @float command.
-%
-\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
-
-% Magic string used for the XREFLABEL-title value, so \xrefX can
-% distinguish floats from other xref types.
-\def\floatmagic{!!float!!}
-
-% #1 is the control sequence we are passed; we expand into a conditional
-% which is true if #1 represents a float ref.  That is, the magic
-% \lastsection value which we \setref above.
-%
-\def\iffloat#1{\expandafter\doiffloat#1==\finish}
-%
-% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
-% (safe) float type for this float.  We set \iffloattype to #2.
-%
-\def\doiffloat#1=#2=#3\finish{%
-  \def\temp{#1}%
-  \def\iffloattype{#2}%
-  \ifx\temp\floatmagic
-}
-
-% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
-%
-\parseargdef\listoffloats{%
-  \def\floattype{#1}% floattype
-  {%
-    % the floattype might have accents or other special characters,
-    % but we need to use it in a control sequence name.
-    \indexnofonts
-    \turnoffactive
-    \xdef\safefloattype{\floattype}%
-  }%
-  %
-  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
-  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
-    \ifhavexrefs
-      % if the user said @listoffloats foo but never @float foo.
-      \message{\linenumber No `\safefloattype' floats to list.}%
-    \fi
-  \else
-    \begingroup
-      \leftskip=\tocindent  % indent these entries like a toc
-      \let\do=\listoffloatsdo
-      \csname floatlist\safefloattype\endcsname
-    \endgroup
-  \fi
-}
-
-% This is called on each entry in a list of floats.  We're passed the
-% xref label, in the form LABEL-title, which is how we save it in the
-% aux file.  We strip off the -title and look up \XRLABEL-lof, which
-% has the text we're supposed to typeset here.
-%
-% Figures without xref labels will not be included in the list (since
-% they won't appear in the aux file).
-%
-\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
-\def\listoffloatsdoentry#1-title\finish{{%
-  % Can't fully expand XR#1-lof because it can contain anything.  Just
-  % pass the control sequence.  On the other hand, XR#1-pg is just the
-  % page number, and we want to fully expand that so we can get a link
-  % in pdf output.
-  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
-  %
-  % use the same \entry macro we use to generate the TOC and index.
-  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
-  \writeentry
-}}
-
-
-\message{localization,}
-
-% For single-language documents, @documentlanguage is usually given very
-% early, just after @documentencoding.  Single argument is the language
-% (de) or locale (de_DE) abbreviation.
-%
-{
-  \catcode`\_ = \active
-  \globaldefs=1
-\parseargdef\documentlanguage{%
-  \tex % read txi-??.tex file in plain TeX.
-    % Read the file by the name they passed if it exists.
-    \let_ = \normalunderscore  % normal _ character for filename test
-    \openin 1 txi-#1.tex
-    \ifeof 1
-      \documentlanguagetrywithoutunderscore #1_\finish
-    \else
-      \globaldefs = 1  % everything in the txi-LL files needs to persist
-      \input txi-#1.tex
-    \fi
-    \closein 1
-  \endgroup % end raw TeX
-}
-%
-% If they passed de_DE, and txi-de_DE.tex doesn't exist,
-% try txi-de.tex.
-%
-\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
-  \openin 1 txi-#1.tex
-  \ifeof 1
-    \errhelp = \nolanghelp
-    \errmessage{Cannot read language file txi-#1.tex}%
-  \else
-    \globaldefs = 1  % everything in the txi-LL files needs to persist
-    \input txi-#1.tex
-  \fi
-  \closein 1
-}
-}% end of special _ catcode
-%
-\newhelp\nolanghelp{The given language definition file cannot be found or
-is empty.  Maybe you need to install it?  Putting it in the current
-directory should work if nowhere else does.}
-
-% This macro is called from txi-??.tex files; the first argument is the
-% \language name to set (without the "\lang@" prefix), the second and
-% third args are \{left,right}hyphenmin.
-%
-% The language names to pass are determined when the format is built.
-% See the etex.log file created at that time, e.g.,
-% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
-%
-% With TeX Live 2008, etex now includes hyphenation patterns for all
-% available languages.  This means we can support hyphenation in
-% Texinfo, at least to some extent.  (This still doesn't solve the
-% accented characters problem.)
-%
-\catcode`@=11
-\def\txisetlanguage#1#2#3{%
-  % do not set the language if the name is undefined in the current TeX.
-  \expandafter\ifx\csname lang@#1\endcsname \relax
-    \message{no patterns for #1}%
-  \else
-    \global\language = \csname lang@#1\endcsname
-  \fi
-  % but there is no harm in adjusting the hyphenmin values regardless.
-  \global\lefthyphenmin = #2\relax
-  \global\righthyphenmin = #3\relax
-}
-
-% Helpers for encodings.
-% Set the catcode of characters 128 through 255 to the specified number.
-%
-\def\setnonasciicharscatcode#1{%
-   \count255=128
-   \loop\ifnum\count255<256
-      \global\catcode\count255=#1\relax
-      \advance\count255 by 1
-   \repeat
-}
-
-\def\setnonasciicharscatcodenonglobal#1{%
-   \count255=128
-   \loop\ifnum\count255<256
-      \catcode\count255=#1\relax
-      \advance\count255 by 1
-   \repeat
-}
-
-% @documentencoding sets the definition of non-ASCII characters
-% according to the specified encoding.
-%
-\parseargdef\documentencoding{%
-  % Encoding being declared for the document.
-  \def\declaredencoding{\csname #1.enc\endcsname}%
-  %
-  % Supported encodings: names converted to tokens in order to be able
-  % to compare them with \ifx.
-  \def\ascii{\csname US-ASCII.enc\endcsname}%
-  \def\latnine{\csname ISO-8859-15.enc\endcsname}%
-  \def\latone{\csname ISO-8859-1.enc\endcsname}%
-  \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
-  \def\utfeight{\csname UTF-8.enc\endcsname}%
-  %
-  \ifx \declaredencoding \ascii
-     \asciichardefs
-  %
-  \else \ifx \declaredencoding \lattwo
-     \setnonasciicharscatcode\active
-     \lattwochardefs
-  %
-  \else \ifx \declaredencoding \latone
-     \setnonasciicharscatcode\active
-     \latonechardefs
-  %
-  \else \ifx \declaredencoding \latnine
-     \setnonasciicharscatcode\active
-     \latninechardefs
-  %
-  \else \ifx \declaredencoding \utfeight
-     \setnonasciicharscatcode\active
-     \utfeightchardefs
-  %
-  \else
-    \message{Unknown document encoding #1, ignoring.}%
-  %
-  \fi % utfeight
-  \fi % latnine
-  \fi % latone
-  \fi % lattwo
-  \fi % ascii
-}
-
-% A message to be logged when using a character that isn't available
-% the default font encoding (OT1).
-%
-\def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}}
-
-% Take account of \c (plain) vs. \, (Texinfo) difference.
-\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
-
-% First, make active non-ASCII characters in order for them to be
-% correctly categorized when TeX reads the replacement text of
-% macros containing the character definitions.
-\setnonasciicharscatcode\active
-%
-% Latin1 (ISO-8859-1) character definitions.
-\def\latonechardefs{%
-  \gdef^^a0{\tie}
-  \gdef^^a1{\exclamdown}
-  \gdef^^a2{\missingcharmsg{CENT SIGN}}
-  \gdef^^a3{{\pounds}}
-  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
-  \gdef^^a5{\missingcharmsg{YEN SIGN}}
-  \gdef^^a6{\missingcharmsg{BROKEN BAR}}
-  \gdef^^a7{\S}
-  \gdef^^a8{\"{}}
-  \gdef^^a9{\copyright}
-  \gdef^^aa{\ordf}
-  \gdef^^ab{\guillemetleft}
-  \gdef^^ac{$\lnot$}
-  \gdef^^ad{\-}
-  \gdef^^ae{\registeredsymbol}
-  \gdef^^af{\={}}
-  %
-  \gdef^^b0{\textdegree}
-  \gdef^^b1{$\pm$}
-  \gdef^^b2{$^2$}
-  \gdef^^b3{$^3$}
-  \gdef^^b4{\'{}}
-  \gdef^^b5{$\mu$}
-  \gdef^^b6{\P}
-  %
-  \gdef^^b7{$^.$}
-  \gdef^^b8{\cedilla\ }
-  \gdef^^b9{$^1$}
-  \gdef^^ba{\ordm}
-  %
-  \gdef^^bb{\guillemetright}
-  \gdef^^bc{$1\over4$}
-  \gdef^^bd{$1\over2$}
-  \gdef^^be{$3\over4$}
-  \gdef^^bf{\questiondown}
-  %
-  \gdef^^c0{\`A}
-  \gdef^^c1{\'A}
-  \gdef^^c2{\^A}
-  \gdef^^c3{\~A}
-  \gdef^^c4{\"A}
-  \gdef^^c5{\ringaccent A}
-  \gdef^^c6{\AE}
-  \gdef^^c7{\cedilla C}
-  \gdef^^c8{\`E}
-  \gdef^^c9{\'E}
-  \gdef^^ca{\^E}
-  \gdef^^cb{\"E}
-  \gdef^^cc{\`I}
-  \gdef^^cd{\'I}
-  \gdef^^ce{\^I}
-  \gdef^^cf{\"I}
-  %
-  \gdef^^d0{\DH}
-  \gdef^^d1{\~N}
-  \gdef^^d2{\`O}
-  \gdef^^d3{\'O}
-  \gdef^^d4{\^O}
-  \gdef^^d5{\~O}
-  \gdef^^d6{\"O}
-  \gdef^^d7{$\times$}
-  \gdef^^d8{\O}
-  \gdef^^d9{\`U}
-  \gdef^^da{\'U}
-  \gdef^^db{\^U}
-  \gdef^^dc{\"U}
-  \gdef^^dd{\'Y}
-  \gdef^^de{\TH}
-  \gdef^^df{\ss}
-  %
-  \gdef^^e0{\`a}
-  \gdef^^e1{\'a}
-  \gdef^^e2{\^a}
-  \gdef^^e3{\~a}
-  \gdef^^e4{\"a}
-  \gdef^^e5{\ringaccent a}
-  \gdef^^e6{\ae}
-  \gdef^^e7{\cedilla c}
-  \gdef^^e8{\`e}
-  \gdef^^e9{\'e}
-  \gdef^^ea{\^e}
-  \gdef^^eb{\"e}
-  \gdef^^ec{\`{\dotless i}}
-  \gdef^^ed{\'{\dotless i}}
-  \gdef^^ee{\^{\dotless i}}
-  \gdef^^ef{\"{\dotless i}}
-  %
-  \gdef^^f0{\dh}
-  \gdef^^f1{\~n}
-  \gdef^^f2{\`o}
-  \gdef^^f3{\'o}
-  \gdef^^f4{\^o}
-  \gdef^^f5{\~o}
-  \gdef^^f6{\"o}
-  \gdef^^f7{$\div$}
-  \gdef^^f8{\o}
-  \gdef^^f9{\`u}
-  \gdef^^fa{\'u}
-  \gdef^^fb{\^u}
-  \gdef^^fc{\"u}
-  \gdef^^fd{\'y}
-  \gdef^^fe{\th}
-  \gdef^^ff{\"y}
-}
-
-% Latin9 (ISO-8859-15) encoding character definitions.
-\def\latninechardefs{%
-  % Encoding is almost identical to Latin1.
-  \latonechardefs
-  %
-  \gdef^^a4{\euro}
-  \gdef^^a6{\v S}
-  \gdef^^a8{\v s}
-  \gdef^^b4{\v Z}
-  \gdef^^b8{\v z}
-  \gdef^^bc{\OE}
-  \gdef^^bd{\oe}
-  \gdef^^be{\"Y}
-}
-
-% Latin2 (ISO-8859-2) character definitions.
-\def\lattwochardefs{%
-  \gdef^^a0{\tie}
-  \gdef^^a1{\ogonek{A}}
-  \gdef^^a2{\u{}}
-  \gdef^^a3{\L}
-  \gdef^^a4{\missingcharmsg{CURRENCY SIGN}}
-  \gdef^^a5{\v L}
-  \gdef^^a6{\'S}
-  \gdef^^a7{\S}
-  \gdef^^a8{\"{}}
-  \gdef^^a9{\v S}
-  \gdef^^aa{\cedilla S}
-  \gdef^^ab{\v T}
-  \gdef^^ac{\'Z}
-  \gdef^^ad{\-}
-  \gdef^^ae{\v Z}
-  \gdef^^af{\dotaccent Z}
-  %
-  \gdef^^b0{\textdegree}
-  \gdef^^b1{\ogonek{a}}
-  \gdef^^b2{\ogonek{ }}
-  \gdef^^b3{\l}
-  \gdef^^b4{\'{}}
-  \gdef^^b5{\v l}
-  \gdef^^b6{\'s}
-  \gdef^^b7{\v{}}
-  \gdef^^b8{\cedilla\ }
-  \gdef^^b9{\v s}
-  \gdef^^ba{\cedilla s}
-  \gdef^^bb{\v t}
-  \gdef^^bc{\'z}
-  \gdef^^bd{\H{}}
-  \gdef^^be{\v z}
-  \gdef^^bf{\dotaccent z}
-  %
-  \gdef^^c0{\'R}
-  \gdef^^c1{\'A}
-  \gdef^^c2{\^A}
-  \gdef^^c3{\u A}
-  \gdef^^c4{\"A}
-  \gdef^^c5{\'L}
-  \gdef^^c6{\'C}
-  \gdef^^c7{\cedilla C}
-  \gdef^^c8{\v C}
-  \gdef^^c9{\'E}
-  \gdef^^ca{\ogonek{E}}
-  \gdef^^cb{\"E}
-  \gdef^^cc{\v E}
-  \gdef^^cd{\'I}
-  \gdef^^ce{\^I}
-  \gdef^^cf{\v D}
-  %
-  \gdef^^d0{\DH}
-  \gdef^^d1{\'N}
-  \gdef^^d2{\v N}
-  \gdef^^d3{\'O}
-  \gdef^^d4{\^O}
-  \gdef^^d5{\H O}
-  \gdef^^d6{\"O}
-  \gdef^^d7{$\times$}
-  \gdef^^d8{\v R}
-  \gdef^^d9{\ringaccent U}
-  \gdef^^da{\'U}
-  \gdef^^db{\H U}
-  \gdef^^dc{\"U}
-  \gdef^^dd{\'Y}
-  \gdef^^de{\cedilla T}
-  \gdef^^df{\ss}
-  %
-  \gdef^^e0{\'r}
-  \gdef^^e1{\'a}
-  \gdef^^e2{\^a}
-  \gdef^^e3{\u a}
-  \gdef^^e4{\"a}
-  \gdef^^e5{\'l}
-  \gdef^^e6{\'c}
-  \gdef^^e7{\cedilla c}
-  \gdef^^e8{\v c}
-  \gdef^^e9{\'e}
-  \gdef^^ea{\ogonek{e}}
-  \gdef^^eb{\"e}
-  \gdef^^ec{\v e}
-  \gdef^^ed{\'{\dotless{i}}}
-  \gdef^^ee{\^{\dotless{i}}}
-  \gdef^^ef{\v d}
-  %
-  \gdef^^f0{\dh}
-  \gdef^^f1{\'n}
-  \gdef^^f2{\v n}
-  \gdef^^f3{\'o}
-  \gdef^^f4{\^o}
-  \gdef^^f5{\H o}
-  \gdef^^f6{\"o}
-  \gdef^^f7{$\div$}
-  \gdef^^f8{\v r}
-  \gdef^^f9{\ringaccent u}
-  \gdef^^fa{\'u}
-  \gdef^^fb{\H u}
-  \gdef^^fc{\"u}
-  \gdef^^fd{\'y}
-  \gdef^^fe{\cedilla t}
-  \gdef^^ff{\dotaccent{}}
-}
-
-% UTF-8 character definitions.
-%
-% This code to support UTF-8 is based on LaTeX's utf8.def, with some
-% changes for Texinfo conventions.  It is included here under the GPL by
-% permission from Frank Mittelbach and the LaTeX team.
-%
-\newcount\countUTFx
-\newcount\countUTFy
-\newcount\countUTFz
-
-\gdef\UTFviiiTwoOctets#1#2{\expandafter
-   \UTFviiiDefined\csname u8:#1\string #2\endcsname}
-%
-\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
-   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
-%
-\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
-   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
-
-\gdef\UTFviiiDefined#1{%
-  \ifx #1\relax
-    \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
-  \else
-    \expandafter #1%
-  \fi
-}
-
-\begingroup
-  \catcode`\~13
-  \catcode`\"12
-
-  \def\UTFviiiLoop{%
-    \global\catcode\countUTFx\active
-    \uccode`\~\countUTFx
-    \uppercase\expandafter{\UTFviiiTmp}%
-    \advance\countUTFx by 1
-    \ifnum\countUTFx < \countUTFy
-      \expandafter\UTFviiiLoop
-    \fi}
-
-  \countUTFx = "C2
-  \countUTFy = "E0
-  \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiTwoOctets\string~}}
-  \UTFviiiLoop
-
-  \countUTFx = "E0
-  \countUTFy = "F0
-  \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiThreeOctets\string~}}
-  \UTFviiiLoop
-
-  \countUTFx = "F0
-  \countUTFy = "F4
-  \def\UTFviiiTmp{%
-    \xdef~{\noexpand\UTFviiiFourOctets\string~}}
-  \UTFviiiLoop
-\endgroup
-
-\begingroup
-  \catcode`\"=12
-  \catcode`\<=12
-  \catcode`\.=12
-  \catcode`\,=12
-  \catcode`\;=12
-  \catcode`\!=12
-  \catcode`\~=13
-
-  \gdef\DeclareUnicodeCharacter#1#2{%
-    \countUTFz = "#1\relax
-    %\wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}%
-    \begingroup
-      \parseXMLCharref
-      \def\UTFviiiTwoOctets##1##2{%
-        \csname u8:##1\string ##2\endcsname}%
-      \def\UTFviiiThreeOctets##1##2##3{%
-        \csname u8:##1\string ##2\string ##3\endcsname}%
-      \def\UTFviiiFourOctets##1##2##3##4{%
-        \csname u8:##1\string ##2\string ##3\string ##4\endcsname}%
-      \expandafter\expandafter\expandafter\expandafter
-       \expandafter\expandafter\expandafter
-       \gdef\UTFviiiTmp{#2}%
-    \endgroup}
-
-  \gdef\parseXMLCharref{%
-    \ifnum\countUTFz < "A0\relax
-      \errhelp = \EMsimple
-      \errmessage{Cannot define Unicode char value < 00A0}%
-    \else\ifnum\countUTFz < "800\relax
-      \parseUTFviiiA,%
-      \parseUTFviiiB C\UTFviiiTwoOctets.,%
-    \else\ifnum\countUTFz < "10000\relax
-      \parseUTFviiiA;%
-      \parseUTFviiiA,%
-      \parseUTFviiiB E\UTFviiiThreeOctets.{,;}%
-    \else
-      \parseUTFviiiA;%
-      \parseUTFviiiA,%
-      \parseUTFviiiA!%
-      \parseUTFviiiB F\UTFviiiFourOctets.{!,;}%
-    \fi\fi\fi
-  }
-
-  \gdef\parseUTFviiiA#1{%
-    \countUTFx = \countUTFz
-    \divide\countUTFz by 64
-    \countUTFy = \countUTFz
-    \multiply\countUTFz by 64
-    \advance\countUTFx by -\countUTFz
-    \advance\countUTFx by 128
-    \uccode `#1\countUTFx
-    \countUTFz = \countUTFy}
-
-  \gdef\parseUTFviiiB#1#2#3#4{%
-    \advance\countUTFz by "#10\relax
-    \uccode `#3\countUTFz
-    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
-\endgroup
-
-\def\utfeightchardefs{%
-  \DeclareUnicodeCharacter{00A0}{\tie}
-  \DeclareUnicodeCharacter{00A1}{\exclamdown}
-  \DeclareUnicodeCharacter{00A3}{\pounds}
-  \DeclareUnicodeCharacter{00A8}{\"{ }}
-  \DeclareUnicodeCharacter{00A9}{\copyright}
-  \DeclareUnicodeCharacter{00AA}{\ordf}
-  \DeclareUnicodeCharacter{00AB}{\guillemetleft}
-  \DeclareUnicodeCharacter{00AD}{\-}
-  \DeclareUnicodeCharacter{00AE}{\registeredsymbol}
-  \DeclareUnicodeCharacter{00AF}{\={ }}
-
-  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}
-  \DeclareUnicodeCharacter{00B4}{\'{ }}
-  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}
-  \DeclareUnicodeCharacter{00BA}{\ordm}
-  \DeclareUnicodeCharacter{00BB}{\guillemetright}
-  \DeclareUnicodeCharacter{00BF}{\questiondown}
-
-  \DeclareUnicodeCharacter{00C0}{\`A}
-  \DeclareUnicodeCharacter{00C1}{\'A}
-  \DeclareUnicodeCharacter{00C2}{\^A}
-  \DeclareUnicodeCharacter{00C3}{\~A}
-  \DeclareUnicodeCharacter{00C4}{\"A}
-  \DeclareUnicodeCharacter{00C5}{\AA}
-  \DeclareUnicodeCharacter{00C6}{\AE}
-  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}
-  \DeclareUnicodeCharacter{00C8}{\`E}
-  \DeclareUnicodeCharacter{00C9}{\'E}
-  \DeclareUnicodeCharacter{00CA}{\^E}
-  \DeclareUnicodeCharacter{00CB}{\"E}
-  \DeclareUnicodeCharacter{00CC}{\`I}
-  \DeclareUnicodeCharacter{00CD}{\'I}
-  \DeclareUnicodeCharacter{00CE}{\^I}
-  \DeclareUnicodeCharacter{00CF}{\"I}
-
-  \DeclareUnicodeCharacter{00D0}{\DH}
-  \DeclareUnicodeCharacter{00D1}{\~N}
-  \DeclareUnicodeCharacter{00D2}{\`O}
-  \DeclareUnicodeCharacter{00D3}{\'O}
-  \DeclareUnicodeCharacter{00D4}{\^O}
-  \DeclareUnicodeCharacter{00D5}{\~O}
-  \DeclareUnicodeCharacter{00D6}{\"O}
-  \DeclareUnicodeCharacter{00D8}{\O}
-  \DeclareUnicodeCharacter{00D9}{\`U}
-  \DeclareUnicodeCharacter{00DA}{\'U}
-  \DeclareUnicodeCharacter{00DB}{\^U}
-  \DeclareUnicodeCharacter{00DC}{\"U}
-  \DeclareUnicodeCharacter{00DD}{\'Y}
-  \DeclareUnicodeCharacter{00DE}{\TH}
-  \DeclareUnicodeCharacter{00DF}{\ss}
-
-  \DeclareUnicodeCharacter{00E0}{\`a}
-  \DeclareUnicodeCharacter{00E1}{\'a}
-  \DeclareUnicodeCharacter{00E2}{\^a}
-  \DeclareUnicodeCharacter{00E3}{\~a}
-  \DeclareUnicodeCharacter{00E4}{\"a}
-  \DeclareUnicodeCharacter{00E5}{\aa}
-  \DeclareUnicodeCharacter{00E6}{\ae}
-  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}
-  \DeclareUnicodeCharacter{00E8}{\`e}
-  \DeclareUnicodeCharacter{00E9}{\'e}
-  \DeclareUnicodeCharacter{00EA}{\^e}
-  \DeclareUnicodeCharacter{00EB}{\"e}
-  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}
-  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}
-  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}
-  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}
-
-  \DeclareUnicodeCharacter{00F0}{\dh}
-  \DeclareUnicodeCharacter{00F1}{\~n}
-  \DeclareUnicodeCharacter{00F2}{\`o}
-  \DeclareUnicodeCharacter{00F3}{\'o}
-  \DeclareUnicodeCharacter{00F4}{\^o}
-  \DeclareUnicodeCharacter{00F5}{\~o}
-  \DeclareUnicodeCharacter{00F6}{\"o}
-  \DeclareUnicodeCharacter{00F8}{\o}
-  \DeclareUnicodeCharacter{00F9}{\`u}
-  \DeclareUnicodeCharacter{00FA}{\'u}
-  \DeclareUnicodeCharacter{00FB}{\^u}
-  \DeclareUnicodeCharacter{00FC}{\"u}
-  \DeclareUnicodeCharacter{00FD}{\'y}
-  \DeclareUnicodeCharacter{00FE}{\th}
-  \DeclareUnicodeCharacter{00FF}{\"y}
-
-  \DeclareUnicodeCharacter{0100}{\=A}
-  \DeclareUnicodeCharacter{0101}{\=a}
-  \DeclareUnicodeCharacter{0102}{\u{A}}
-  \DeclareUnicodeCharacter{0103}{\u{a}}
-  \DeclareUnicodeCharacter{0104}{\ogonek{A}}
-  \DeclareUnicodeCharacter{0105}{\ogonek{a}}
-  \DeclareUnicodeCharacter{0106}{\'C}
-  \DeclareUnicodeCharacter{0107}{\'c}
-  \DeclareUnicodeCharacter{0108}{\^C}
-  \DeclareUnicodeCharacter{0109}{\^c}
-  \DeclareUnicodeCharacter{0118}{\ogonek{E}}
-  \DeclareUnicodeCharacter{0119}{\ogonek{e}}
-  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}
-  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}
-  \DeclareUnicodeCharacter{010C}{\v{C}}
-  \DeclareUnicodeCharacter{010D}{\v{c}}
-  \DeclareUnicodeCharacter{010E}{\v{D}}
-
-  \DeclareUnicodeCharacter{0112}{\=E}
-  \DeclareUnicodeCharacter{0113}{\=e}
-  \DeclareUnicodeCharacter{0114}{\u{E}}
-  \DeclareUnicodeCharacter{0115}{\u{e}}
-  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}
-  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}
-  \DeclareUnicodeCharacter{011A}{\v{E}}
-  \DeclareUnicodeCharacter{011B}{\v{e}}
-  \DeclareUnicodeCharacter{011C}{\^G}
-  \DeclareUnicodeCharacter{011D}{\^g}
-  \DeclareUnicodeCharacter{011E}{\u{G}}
-  \DeclareUnicodeCharacter{011F}{\u{g}}
-
-  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}
-  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}
-  \DeclareUnicodeCharacter{0124}{\^H}
-  \DeclareUnicodeCharacter{0125}{\^h}
-  \DeclareUnicodeCharacter{0128}{\~I}
-  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}
-  \DeclareUnicodeCharacter{012A}{\=I}
-  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}
-  \DeclareUnicodeCharacter{012C}{\u{I}}
-  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}
-
-  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}
-  \DeclareUnicodeCharacter{0131}{\dotless{i}}
-  \DeclareUnicodeCharacter{0132}{IJ}
-  \DeclareUnicodeCharacter{0133}{ij}
-  \DeclareUnicodeCharacter{0134}{\^J}
-  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}
-  \DeclareUnicodeCharacter{0139}{\'L}
-  \DeclareUnicodeCharacter{013A}{\'l}
-
-  \DeclareUnicodeCharacter{0141}{\L}
-  \DeclareUnicodeCharacter{0142}{\l}
-  \DeclareUnicodeCharacter{0143}{\'N}
-  \DeclareUnicodeCharacter{0144}{\'n}
-  \DeclareUnicodeCharacter{0147}{\v{N}}
-  \DeclareUnicodeCharacter{0148}{\v{n}}
-  \DeclareUnicodeCharacter{014C}{\=O}
-  \DeclareUnicodeCharacter{014D}{\=o}
-  \DeclareUnicodeCharacter{014E}{\u{O}}
-  \DeclareUnicodeCharacter{014F}{\u{o}}
-
-  \DeclareUnicodeCharacter{0150}{\H{O}}
-  \DeclareUnicodeCharacter{0151}{\H{o}}
-  \DeclareUnicodeCharacter{0152}{\OE}
-  \DeclareUnicodeCharacter{0153}{\oe}
-  \DeclareUnicodeCharacter{0154}{\'R}
-  \DeclareUnicodeCharacter{0155}{\'r}
-  \DeclareUnicodeCharacter{0158}{\v{R}}
-  \DeclareUnicodeCharacter{0159}{\v{r}}
-  \DeclareUnicodeCharacter{015A}{\'S}
-  \DeclareUnicodeCharacter{015B}{\'s}
-  \DeclareUnicodeCharacter{015C}{\^S}
-  \DeclareUnicodeCharacter{015D}{\^s}
-  \DeclareUnicodeCharacter{015E}{\cedilla{S}}
-  \DeclareUnicodeCharacter{015F}{\cedilla{s}}
-
-  \DeclareUnicodeCharacter{0160}{\v{S}}
-  \DeclareUnicodeCharacter{0161}{\v{s}}
-  \DeclareUnicodeCharacter{0162}{\cedilla{t}}
-  \DeclareUnicodeCharacter{0163}{\cedilla{T}}
-  \DeclareUnicodeCharacter{0164}{\v{T}}
-
-  \DeclareUnicodeCharacter{0168}{\~U}
-  \DeclareUnicodeCharacter{0169}{\~u}
-  \DeclareUnicodeCharacter{016A}{\=U}
-  \DeclareUnicodeCharacter{016B}{\=u}
-  \DeclareUnicodeCharacter{016C}{\u{U}}
-  \DeclareUnicodeCharacter{016D}{\u{u}}
-  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}
-  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}
-
-  \DeclareUnicodeCharacter{0170}{\H{U}}
-  \DeclareUnicodeCharacter{0171}{\H{u}}
-  \DeclareUnicodeCharacter{0174}{\^W}
-  \DeclareUnicodeCharacter{0175}{\^w}
-  \DeclareUnicodeCharacter{0176}{\^Y}
-  \DeclareUnicodeCharacter{0177}{\^y}
-  \DeclareUnicodeCharacter{0178}{\"Y}
-  \DeclareUnicodeCharacter{0179}{\'Z}
-  \DeclareUnicodeCharacter{017A}{\'z}
-  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}
-  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}
-  \DeclareUnicodeCharacter{017D}{\v{Z}}
-  \DeclareUnicodeCharacter{017E}{\v{z}}
-
-  \DeclareUnicodeCharacter{01C4}{D\v{Z}}
-  \DeclareUnicodeCharacter{01C5}{D\v{z}}
-  \DeclareUnicodeCharacter{01C6}{d\v{z}}
-  \DeclareUnicodeCharacter{01C7}{LJ}
-  \DeclareUnicodeCharacter{01C8}{Lj}
-  \DeclareUnicodeCharacter{01C9}{lj}
-  \DeclareUnicodeCharacter{01CA}{NJ}
-  \DeclareUnicodeCharacter{01CB}{Nj}
-  \DeclareUnicodeCharacter{01CC}{nj}
-  \DeclareUnicodeCharacter{01CD}{\v{A}}
-  \DeclareUnicodeCharacter{01CE}{\v{a}}
-  \DeclareUnicodeCharacter{01CF}{\v{I}}
-
-  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}
-  \DeclareUnicodeCharacter{01D1}{\v{O}}
-  \DeclareUnicodeCharacter{01D2}{\v{o}}
-  \DeclareUnicodeCharacter{01D3}{\v{U}}
-  \DeclareUnicodeCharacter{01D4}{\v{u}}
-
-  \DeclareUnicodeCharacter{01E2}{\={\AE}}
-  \DeclareUnicodeCharacter{01E3}{\={\ae}}
-  \DeclareUnicodeCharacter{01E6}{\v{G}}
-  \DeclareUnicodeCharacter{01E7}{\v{g}}
-  \DeclareUnicodeCharacter{01E8}{\v{K}}
-  \DeclareUnicodeCharacter{01E9}{\v{k}}
-
-  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}
-  \DeclareUnicodeCharacter{01F1}{DZ}
-  \DeclareUnicodeCharacter{01F2}{Dz}
-  \DeclareUnicodeCharacter{01F3}{dz}
-  \DeclareUnicodeCharacter{01F4}{\'G}
-  \DeclareUnicodeCharacter{01F5}{\'g}
-  \DeclareUnicodeCharacter{01F8}{\`N}
-  \DeclareUnicodeCharacter{01F9}{\`n}
-  \DeclareUnicodeCharacter{01FC}{\'{\AE}}
-  \DeclareUnicodeCharacter{01FD}{\'{\ae}}
-  \DeclareUnicodeCharacter{01FE}{\'{\O}}
-  \DeclareUnicodeCharacter{01FF}{\'{\o}}
-
-  \DeclareUnicodeCharacter{021E}{\v{H}}
-  \DeclareUnicodeCharacter{021F}{\v{h}}
-
-  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}
-  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}
-  \DeclareUnicodeCharacter{0228}{\cedilla{E}}
-  \DeclareUnicodeCharacter{0229}{\cedilla{e}}
-  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}
-  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}
-
-  \DeclareUnicodeCharacter{0232}{\=Y}
-  \DeclareUnicodeCharacter{0233}{\=y}
-  \DeclareUnicodeCharacter{0237}{\dotless{j}}
-
-  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}
-
-  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}
-  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}
-  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}
-  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}
-  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}
-  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}
-  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}
-  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}
-  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}
-  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}
-  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}
-  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}
-
-  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}
-  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}
-
-  \DeclareUnicodeCharacter{1E20}{\=G}
-  \DeclareUnicodeCharacter{1E21}{\=g}
-  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}
-  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}
-  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}
-  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}
-  \DeclareUnicodeCharacter{1E26}{\"H}
-  \DeclareUnicodeCharacter{1E27}{\"h}
-
-  \DeclareUnicodeCharacter{1E30}{\'K}
-  \DeclareUnicodeCharacter{1E31}{\'k}
-  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}
-  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}
-  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}
-  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}
-  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}
-  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}
-  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}
-  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}
-  \DeclareUnicodeCharacter{1E3E}{\'M}
-  \DeclareUnicodeCharacter{1E3F}{\'m}
-
-  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}
-  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}
-  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}
-  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}
-  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}
-  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}
-  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}
-  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}
-  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}
-  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}
-
-  \DeclareUnicodeCharacter{1E54}{\'P}
-  \DeclareUnicodeCharacter{1E55}{\'p}
-  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}
-  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}
-  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}
-  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}
-  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}
-  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}
-  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}
-  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}
-
-  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}
-  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}
-  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}
-  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}
-  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}
-  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}
-  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}
-  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}
-  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}
-  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}
-
-  \DeclareUnicodeCharacter{1E7C}{\~V}
-  \DeclareUnicodeCharacter{1E7D}{\~v}
-  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}
-  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}
-
-  \DeclareUnicodeCharacter{1E80}{\`W}
-  \DeclareUnicodeCharacter{1E81}{\`w}
-  \DeclareUnicodeCharacter{1E82}{\'W}
-  \DeclareUnicodeCharacter{1E83}{\'w}
-  \DeclareUnicodeCharacter{1E84}{\"W}
-  \DeclareUnicodeCharacter{1E85}{\"w}
-  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}
-  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}
-  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}
-  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}
-  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}
-  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}
-  \DeclareUnicodeCharacter{1E8C}{\"X}
-  \DeclareUnicodeCharacter{1E8D}{\"x}
-  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}
-  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}
-
-  \DeclareUnicodeCharacter{1E90}{\^Z}
-  \DeclareUnicodeCharacter{1E91}{\^z}
-  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}
-  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}
-  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}
-  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}
-  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}
-  \DeclareUnicodeCharacter{1E97}{\"t}
-  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}
-  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}
-
-  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}
-  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}
-
-  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}
-  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}
-  \DeclareUnicodeCharacter{1EBC}{\~E}
-  \DeclareUnicodeCharacter{1EBD}{\~e}
-
-  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}
-  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}
-  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}
-  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}
-
-  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}
-  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}
-
-  \DeclareUnicodeCharacter{1EF2}{\`Y}
-  \DeclareUnicodeCharacter{1EF3}{\`y}
-  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}
-
-  \DeclareUnicodeCharacter{1EF8}{\~Y}
-  \DeclareUnicodeCharacter{1EF9}{\~y}
-
-  \DeclareUnicodeCharacter{2013}{--}
-  \DeclareUnicodeCharacter{2014}{---}
-  \DeclareUnicodeCharacter{2018}{\quoteleft}
-  \DeclareUnicodeCharacter{2019}{\quoteright}
-  \DeclareUnicodeCharacter{201A}{\quotesinglbase}
-  \DeclareUnicodeCharacter{201C}{\quotedblleft}
-  \DeclareUnicodeCharacter{201D}{\quotedblright}
-  \DeclareUnicodeCharacter{201E}{\quotedblbase}
-  \DeclareUnicodeCharacter{2022}{\bullet}
-  \DeclareUnicodeCharacter{2026}{\dots}
-  \DeclareUnicodeCharacter{2039}{\guilsinglleft}
-  \DeclareUnicodeCharacter{203A}{\guilsinglright}
-  \DeclareUnicodeCharacter{20AC}{\euro}
-
-  \DeclareUnicodeCharacter{2192}{\expansion}
-  \DeclareUnicodeCharacter{21D2}{\result}
-
-  \DeclareUnicodeCharacter{2212}{\minus}
-  \DeclareUnicodeCharacter{2217}{\point}
-  \DeclareUnicodeCharacter{2261}{\equiv}
-}% end of \utfeightchardefs
-
-
-% US-ASCII character definitions.
-\def\asciichardefs{% nothing need be done
-   \relax
-}
-
-% Make non-ASCII characters printable again for compatibility with
-% existing Texinfo documents that may use them, even without declaring a
-% document encoding.
-%
-\setnonasciicharscatcode \other
-
-
-\message{formatting,}
-
-\newdimen\defaultparindent \defaultparindent = 15pt
-
-\chapheadingskip = 15pt plus 4pt minus 2pt
-\secheadingskip = 12pt plus 3pt minus 2pt
-\subsecheadingskip = 9pt plus 2pt minus 2pt
-
-% Prevent underfull vbox error messages.
-\vbadness = 10000
-
-% Don't be very finicky about underfull hboxes, either.
-\hbadness = 6666
-
-% Following George Bush, get rid of widows and orphans.
-\widowpenalty=10000
-\clubpenalty=10000
-
-% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
-% using an old version of TeX, don't do anything.  We want the amount of
-% stretch added to depend on the line length, hence the dependence on
-% \hsize.  We call this whenever the paper size is set.
-%
-\def\setemergencystretch{%
-  \ifx\emergencystretch\thisisundefined
-    % Allow us to assign to \emergencystretch anyway.
-    \def\emergencystretch{\dimen0}%
-  \else
-    \emergencystretch = .15\hsize
-  \fi
-}
-
-% Parameters in order: 1) textheight; 2) textwidth;
-% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
-% 7) physical page height; 8) physical page width.
-%
-% We also call \setleading{\textleading}, so the caller should define
-% \textleading.  The caller should also set \parskip.
-%
-\def\internalpagesizes#1#2#3#4#5#6#7#8{%
-  \voffset = #3\relax
-  \topskip = #6\relax
-  \splittopskip = \topskip
-  %
-  \vsize = #1\relax
-  \advance\vsize by \topskip
-  \outervsize = \vsize
-  \advance\outervsize by 2\topandbottommargin
-  \pageheight = \vsize
-  %
-  \hsize = #2\relax
-  \outerhsize = \hsize
-  \advance\outerhsize by 0.5in
-  \pagewidth = \hsize
-  %
-  \normaloffset = #4\relax
-  \bindingoffset = #5\relax
-  %
-  \ifpdf
-    \pdfpageheight #7\relax
-    \pdfpagewidth #8\relax
-    % if we don't reset these, they will remain at "1 true in" of
-    % whatever layout pdftex was dumped with.
-    \pdfhorigin = 1 true in
-    \pdfvorigin = 1 true in
-  \fi
-  %
-  \setleading{\textleading}
-  %
-  \parindent = \defaultparindent
-  \setemergencystretch
-}
-
-% @letterpaper (the default).
-\def\letterpaper{{\globaldefs = 1
-  \parskip = 3pt plus 2pt minus 1pt
-  \textleading = 13.2pt
-  %
-  % If page is nothing but text, make it come out even.
-  \internalpagesizes{607.2pt}{6in}% that's 46 lines
-                    {\voffset}{.25in}%
-                    {\bindingoffset}{36pt}%
-                    {11in}{8.5in}%
-}}
-
-% Use @smallbook to reset parameters for 7x9.25 trim size.
-\def\smallbook{{\globaldefs = 1
-  \parskip = 2pt plus 1pt
-  \textleading = 12pt
-  %
-  \internalpagesizes{7.5in}{5in}%
-                    {-.2in}{0in}%
-                    {\bindingoffset}{16pt}%
-                    {9.25in}{7in}%
-  %
-  \lispnarrowing = 0.3in
-  \tolerance = 700
-  \hfuzz = 1pt
-  \contentsrightmargin = 0pt
-  \defbodyindent = .5cm
-}}
-
-% Use @smallerbook to reset parameters for 6x9 trim size.
-% (Just testing, parameters still in flux.)
-\def\smallerbook{{\globaldefs = 1
-  \parskip = 1.5pt plus 1pt
-  \textleading = 12pt
-  %
-  \internalpagesizes{7.4in}{4.8in}%
-                    {-.2in}{-.4in}%
-                    {0pt}{14pt}%
-                    {9in}{6in}%
-  %
-  \lispnarrowing = 0.25in
-  \tolerance = 700
-  \hfuzz = 1pt
-  \contentsrightmargin = 0pt
-  \defbodyindent = .4cm
-}}
-
-% Use @afourpaper to print on European A4 paper.
-\def\afourpaper{{\globaldefs = 1
-  \parskip = 3pt plus 2pt minus 1pt
-  \textleading = 13.2pt
-  %
-  % Double-side printing via postscript on Laserjet 4050
-  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
-  % To change the settings for a different printer or situation, adjust
-  % \normaloffset until the front-side and back-side texts align.  Then
-  % do the same for \bindingoffset.  You can set these for testing in
-  % your texinfo source file like this:
-  % @tex
-  % \global\normaloffset = -6mm
-  % \global\bindingoffset = 10mm
-  % @end tex
-  \internalpagesizes{673.2pt}{160mm}% that's 51 lines
-                    {\voffset}{\hoffset}%
-                    {\bindingoffset}{44pt}%
-                    {297mm}{210mm}%
-  %
-  \tolerance = 700
-  \hfuzz = 1pt
-  \contentsrightmargin = 0pt
-  \defbodyindent = 5mm
-}}
-
-% Use @afivepaper to print on European A5 paper.
-% From romildo@urano.iceb.ufop.br, 2 July 2000.
-% He also recommends making @example and @lisp be small.
-\def\afivepaper{{\globaldefs = 1
-  \parskip = 2pt plus 1pt minus 0.1pt
-  \textleading = 12.5pt
-  %
-  \internalpagesizes{160mm}{120mm}%
-                    {\voffset}{\hoffset}%
-                    {\bindingoffset}{8pt}%
-                    {210mm}{148mm}%
-  %
-  \lispnarrowing = 0.2in
-  \tolerance = 800
-  \hfuzz = 1.2pt
-  \contentsrightmargin = 0pt
-  \defbodyindent = 2mm
-  \tableindent = 12mm
-}}
-
-% A specific text layout, 24x15cm overall, intended for A4 paper.
-\def\afourlatex{{\globaldefs = 1
-  \afourpaper
-  \internalpagesizes{237mm}{150mm}%
-                    {\voffset}{4.6mm}%
-                    {\bindingoffset}{7mm}%
-                    {297mm}{210mm}%
-  %
-  % Must explicitly reset to 0 because we call \afourpaper.
-  \globaldefs = 0
-}}
-
-% Use @afourwide to print on A4 paper in landscape format.
-\def\afourwide{{\globaldefs = 1
-  \afourpaper
-  \internalpagesizes{241mm}{165mm}%
-                    {\voffset}{-2.95mm}%
-                    {\bindingoffset}{7mm}%
-                    {297mm}{210mm}%
-  \globaldefs = 0
-}}
-
-% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
-% Perhaps we should allow setting the margins, \topskip, \parskip,
-% and/or leading, also. Or perhaps we should compute them somehow.
-%
-\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
-\def\pagesizesyyy#1,#2,#3\finish{{%
-  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
-  \globaldefs = 1
-  %
-  \parskip = 3pt plus 2pt minus 1pt
-  \setleading{\textleading}%
-  %
-  \dimen0 = #1\relax
-  \advance\dimen0 by \voffset
-  %
-  \dimen2 = \hsize
-  \advance\dimen2 by \normaloffset
-  %
-  \internalpagesizes{#1}{\hsize}%
-                    {\voffset}{\normaloffset}%
-                    {\bindingoffset}{44pt}%
-                    {\dimen0}{\dimen2}%
-}}
-
-% Set default to letter.
-%
-\letterpaper
-
-
-\message{and turning on texinfo input format.}
-
-\def^^L{\par} % remove \outer, so ^L can appear in an @comment
-
-% DEL is a comment character, in case @c does not suffice.
-\catcode`\^^? = 14
-
-% Define macros to output various characters with catcode for normal text.
-\catcode`\"=\other \def\normaldoublequote{"}
-\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
-\catcode`\+=\other \def\normalplus{+}
-\catcode`\<=\other \def\normalless{<}
-\catcode`\>=\other \def\normalgreater{>}
-\catcode`\^=\other \def\normalcaret{^}
-\catcode`\_=\other \def\normalunderscore{_}
-\catcode`\|=\other \def\normalverticalbar{|}
-\catcode`\~=\other \def\normaltilde{~}
-
-% This macro is used to make a character print one way in \tt
-% (where it can probably be output as-is), and another way in other fonts,
-% where something hairier probably needs to be done.
-%
-% #1 is what to print if we are indeed using \tt; #2 is what to print
-% otherwise.  Since all the Computer Modern typewriter fonts have zero
-% interword stretch (and shrink), and it is reasonable to expect all
-% typewriter fonts to have this, we can check that font parameter.
-%
-\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
-
-% Same as above, but check for italic font.  Actually this also catches
-% non-italic slanted fonts since it is impossible to distinguish them from
-% italic fonts.  But since this is only used by $ and it uses \sl anyway
-% this is not a problem.
-\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
-
-% Turn off all special characters except @
-% (and those which the user can use as if they were ordinary).
-% Most of these we simply print from the \tt font, but for some, we can
-% use math or other variants that look better in normal text.
-
-\catcode`\"=\active
-\def\activedoublequote{{\tt\char34}}
-\let"=\activedoublequote
-\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
-\chardef\hat=`\^
-\catcode`\^=\active \def\activehat{{\tt \hat}} \let^ = \activehat
-
-\catcode`\_=\active
-\def_{\ifusingtt\normalunderscore\_}
-\let\realunder=_
-% Subroutine for the previous macro.
-\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
-
-\catcode`\|=\active
-\def|{{\tt\char124}}
-
-\chardef \less=`\<
-\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
-\chardef \gtr=`\>
-\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
-\catcode`\+=\active \def+{{\tt \char 43}}
-\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
-
-% used for headline/footline in the output routine, in case the page
-% breaks in the middle of an @tex block.
-\def\texinfochars{%
-  \let< = \activeless
-  \let> = \activegtr
-  \let~ = \activetilde 
-  \let^ = \activehat
-  \markupsetuplqdefault \markupsetuprqdefault 
-  \let\b = \strong
-  \let\i = \smartitalic
-  % in principle, all other definitions in \tex have to be undone too.
-}
-
-% If a .fmt file is being used, characters that might appear in a file
-% name cannot be active until we have parsed the command line.
-% So turn them off again, and have \everyjob (or @setfilename) turn them on.
-% \otherifyactive is called near the end of this file.
-\def\otherifyactive{\catcode`+=\other \catcode`\_=\other}
-
-% Used sometimes to turn off (effectively) the active characters even after
-% parsing them.
-\def\turnoffactive{%
-  \normalturnoffactive
-  \otherbackslash
-}
-
-\catcode`\@=0
-
-% \backslashcurfont outputs one backslash character in current font,
-% as in \char`\\.
-\global\chardef\backslashcurfont=`\\
-\global\let\rawbackslashxx=\backslashcurfont  % let existing .??s files work
-
-% \realbackslash is an actual character `\' with catcode other, and
-% \doublebackslash is two of them (for the pdf outlines).
-{\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}}
-
-% In texinfo, backslash is an active character; it prints the backslash
-% in fixed width font.
-\catcode`\\=\active  % @ for escape char from now on.
-
-% The story here is that in math mode, the \char of \backslashcurfont
-% ends up printing the roman \ from the math symbol font (because \char
-% in math mode uses the \mathcode, and plain.tex sets
-% \mathcode`\\="026E).  It seems better for @backslashchar{} to always
-% print a typewriter backslash, hence we use an explicit \mathchar,
-% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
-% ignored family value; char position "5C).  We can't use " for the
-% usual hex value because it has already been made active.
-@def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
-@let@backslashchar = @normalbackslash % @backslashchar{} is for user documents.
-
-% On startup, @fixbackslash assigns:
-%  @let \ = @normalbackslash
-% \rawbackslash defines an active \ to do \backslashcurfont.
-% \otherbackslash defines an active \ to be a literal `\' character with
-% catcode other.  We switch back and forth between these.
-@gdef@rawbackslash{@let\=@backslashcurfont}
-@gdef@otherbackslash{@let\=@realbackslash}
-
-% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
-% the literal character `\'.  Also revert - to its normal character, in
-% case the active - from code has slipped in.
-%
-{@catcode`- = @active
- @gdef@normalturnoffactive{%
-   @let-=@normaldash
-   @let"=@normaldoublequote
-   @let$=@normaldollar %$ font-lock fix
-   @let+=@normalplus
-   @let<=@normalless
-   @let>=@normalgreater
-   @let\=@normalbackslash
-   @let^=@normalcaret
-   @let_=@normalunderscore
-   @let|=@normalverticalbar
-   @let~=@normaltilde
-   @markupsetuplqdefault
-   @markupsetuprqdefault
-   @unsepspaces
- }
-}
-
-% Make _ and + \other characters, temporarily.
-% This is canceled by @fixbackslash.
-@otherifyactive
-
-% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
-% That is what \eatinput is for; after that, the `\' should revert to printing
-% a backslash.
-%
-@gdef@eatinput input texinfo{@fixbackslash}
-@global@let\ = @eatinput
-
-% On the other hand, perhaps the file did not have a `\input texinfo'. Then
-% the first `\' in the file would cause an error. This macro tries to fix
-% that, assuming it is called before the first `\' could plausibly occur.
-% Also turn back on active characters that might appear in the input
-% file name, in case not using a pre-dumped format.
-%
-@gdef@fixbackslash{%
-  @ifx\@eatinput @let\ = @normalbackslash @fi
-  @catcode`+=@active
-  @catcode`@_=@active
-}
-
-% Say @foo, not \foo, in error messages.
-@escapechar = `@@
-
-% These (along with & and #) are made active for url-breaking, so need
-% active definitions as the normal characters.
-@def@normaldot{.}
-@def@normalquest{?}
-@def@normalslash{/}
-
-% These look ok in all fonts, so just make them not special.
-% @hashchar{} gets its own user-level command, because of #line.
-@catcode`@& = @other @def@normalamp{&}
-@catcode`@# = @other @def@normalhash{#}
-@catcode`@% = @other @def@normalpercent{%}
-
-@let @hashchar = @normalhash
-
-@c Finally, make ` and ' active, so that txicodequoteundirected and
-@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}.  If we
-@c don't make ` and ' active, @code will not get them as active chars.
-@c Do this last of all since we use ` in the previous @catcode assignments.
-@catcode`@'=@active
-@catcode`@`=@active
-@markupsetuplqdefault
-@markupsetuprqdefault
-
-@c Local variables:
-@c eval: (add-hook 'write-file-hooks 'time-stamp)
-@c page-delimiter: "^\\\\message"
-@c time-stamp-start: "def\\\\texinfoversion{"
-@c time-stamp-format: "%:y-%02m-%02d.%02H"
-@c time-stamp-end: "}"
-@c End:
-
-@c vim:sw=2:
-
-@ignore
-   arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115
-@end ignore
index 2c758586a16333775dfffe725536333d35b96eac..ee4f440d82504f95522efddc6cdcb530e1e54830 100644 (file)
@@ -71,7 +71,7 @@ Users may also write their own macros.
 All three may be combined.
 
 Present on most Unix systems owing to its long association
-with Unix manuals (manpages),
+with Unix manuals (man pages),
 groff is capable of producing typographically sophisticated documents
 while consuming only minimal system resources.
 
@@ -82,7 +82,7 @@ and its mirrors;
 the current development version is available from a
 .URL "https://\:savannah.gnu.org/\:git/\:?group=groff" "git repository" .
 .
-The current version is 1.22.3 (04-Nov-2014).
+The current version is 1.22.4 (Spring 2018).
 
 To view the git repository in your browser, use
 .URL "http://\:git.savannah.gnu.org/\:cgit/\:groff.git" \
@@ -100,10 +100,8 @@ For a special version of groff on the Microsoft operating systems, see
 (version 1.21).
 
 Groff was originally written and maintained by James Clark; it
-is now maintained by
-.MTO Ted.Harding@\:nessie.mcc.ac.uk "Ted Harding"
-and
-.MTO wl@\:gnu.org "Werner Lemberg" .
+is now maintained by the team at
+.MTO groff@\:gnu.org "" .
 .
 .HR
 .
@@ -134,10 +132,10 @@ Included in this release are implementations of `troff', `pic', `eqn',
 `tbl', `grn', `refer', `\-man', `\-mdoc', `\-mom', and `\-ms' macros, and
 drivers for `PostScript', `PDF', `TeX DVI' format, `HP LaserJet\~4'
 printers, `Canon CAPSL' printers, `HTML' and `XHTML' formats (beta status),
-and typewriter-like devices.  Also included is a modified version of the
-Berkeley `\-me' macros, the enhanced version `gxditview' of the X11
-`xditview' previewer, and an implementation of the `\-mm' macros contributed
-by J\[:o]rgen H\[:a]gg.
+and typewriter-like devices.
+Also included is a modified version of the Berkeley `\-me' macros, the
+enhanced version `gxditview' of the X11 `xditview' previewer, and an
+implementation of the `\-mm' macros contributed by J\[:o]rgen H\[:a]gg.
 
 See the file `INSTALL' for installation instructions on how to install from
 a release.
@@ -209,10 +207,6 @@ Additionally, producing `PDF' output directly with the `gropdf' device needs
 a working installation of `perl'.
 The same is true for some other preprocessors like `chem'.
 
-In Linux Debian, the installation of `texinfo' is dangerous, for it creates
-a file `install-info' that blocks the system installation.
-So the created `/usr/local/bin/install-info' must be renamed.
-
 The `groff' configure script searches for the X11 headers and libraries
 `Xaw' and `Xmu'.
 So the corresponding developer packages of your system must be installed,
@@ -226,14 +220,12 @@ Bug reports
 Please report bugs using the project's
 .URL https://\:savannah.gnu.org/\:projects/\:groff "bug tracker" .
 
-Alternatively, but less preferable, you may use the form in the file
-`BUG-REPORT'; the idea of this is to make sure that FSF has all the
-information it needs to fix the bug.
+You may use the form in the file `BUG-REPORT'; the idea of this is to
+make sure that FSF has all the information it needs to fix the bug.
 At the very least, read the `BUG-REPORT' form and make sure that you supply
 all the information that it asks for.
-Even if you are not sure that something is a bug, report it using
-`BUG-REPORT': this enables us to determine whether it really is a bug or
-not.
+Even if you are not sure that something is a bug, report it:
+this enables us to determine whether it really is a bug.
 .
 .
 .SH
@@ -243,21 +235,21 @@ Three mailing lists are available:
 
 .ULS
 .LI
-.MTO bug-groff@gnu.org bug-groff@gnu.org
-for reporting bugs and following bug reports
+.MTO bug\-groff@\:gnu.org
+for following bug reports;
 
 .LI
-.MTO groff@gnu.org groff@gnu.org
-for general discussion of groff
+.MTO groff@\:gnu.org
+for general discussion of groff; and
 
 .LI
-.MTO groff-commit@gnu.org groff-commit@gnu.org
-a read-only list showing commits to the git repository
+.MTO groff\-commit@\:gnu.org "" ,
+a read-only list showing commits to the git repository.
 .ULE
 
 To subscribe, send a mail to \[la]list\[ra]-request@\[la]domain\[ra]
 (example:
-.MTO groff-request@\:gnu.org groff-request@\:gnu.org
+.MTO groff\-request@\:gnu.org
 for the `groff' list) with the word `subscribe' in either the
 subject or body of the e-mail (don't include the quotes).
 Alternatively, you may subscribe by visiting the web pages at
@@ -480,9 +472,9 @@ gropdf
 .ULS
 .LI
 A new driver for generating PDF output directly, contributed by
-.MTO deri@chuzzlewit.myzen.co.uk "Deri James" .
+.MTO deri@\:chuzzlewit.myzen.co.uk "Deri James" .
 
-Note that this driver is written in Perl, thus you need a working Perl
+Note that this driver is written in Perl; you need a working Perl
 installation to run this output device.
 .ULE
 .
@@ -618,7 +610,7 @@ equivalents to the \eX and \eY escapes, respectively.
 .LI
 A new read-only number register `.br' is available which is set to\~1
 if a macro is called as .foo and to\~0 if called as 'foo.
-This allows to reliably modify requests.
+This allows reliable modification of requests.
 
 .in 2m
 .nf
@@ -694,7 +686,7 @@ nroff
 
 .ULS
 .LI
-Two new command line options `\-w' and `\-W' are accepted and passed to
+Two new command-line options `\-w' and `\-W' are accepted and passed to
 groff to enable and disable warning messages, respectively.
 .ULE
 .
@@ -726,9 +718,9 @@ Pic now supports up to 32 macro arguments (and up to 16 on EBCDIC
 platforms).
 
 .LI
-Heinz-Jürgen Örtel contributed code for two new keywords, `xslanted' and
-`yslanted', which can change the shape of boxes into arbitrary
-parallelograms.
+Heinz-J\[:u]rgen \[:O]rtel contributed code for two new keywords,
+`xslanted' and `yslanted', which can change the shape of boxes into
+arbitrary parallelograms.
 .ULE
 .
 .
@@ -804,11 +796,11 @@ grohtml
 XHTML support has been added.
 
 .LI
-New command line option `\-V' (to be used in XHTML mode) to produce an
+New command-line option `\-V' (to be used in XHTML mode) to produce an
 XHTML validator button.
 
 .LI
-New command line option `\-y' to produce a right-justified groff signature
+New command-line option `\-y' to produce a right-justified groff signature
 at the end of the document (in combination with option `\-V').
 .ULE
 .
@@ -897,7 +889,7 @@ This package currently works with `\-Tps' only.
 \-mandoc now supports multiple man pages (in either man or mdoc format).
 
 .LI
-Fabrice Ménard contributed locales support.
+Fabrice M\['e]nard contributed locales support.
 In particular, it is now possible to get French localization of the main
 macro packages (\-ms, \-mm, \-me, and \-mom, but not \-man and \-mdoc
 which are localized differently) by appending `-mfr' to the list of macro
@@ -933,7 +925,7 @@ DragonFly OS.
 
 .LI
 If mdoc is used to print multiple man pages (together with the \-rcR=0
-command line option), each man page now starts a new page.
+command-line option), each man page now starts a new page.
 
 .LI
 \-mtrace has been considerably improved, now showing number and string
@@ -1030,8 +1022,8 @@ The following macros aren't new but haven't been documented previously:
 .in
 
 .LI
-The following keywords have been extended.  Again, this isn't new but
-hasn't been documented previously:
+The following keywords have been extended.
+Again, this isn't new but hasn't been documented previously:
 
 .in 2m
 .ft B
@@ -1064,10 +1056,10 @@ This device driver has been raised to beta stage; its set of tags should
 be stable now.
 
 .LI
-New command line option `\-s' to set the base point size.
+New command-line option `\-s' to set the base point size.
 
 .LI
-New command line option `\-S' to set the split level while generating
+New command-line option `\-S' to set the split level while generating
 multiple files.
 .ULE
 .
@@ -1234,7 +1226,7 @@ groff
 
 .ULS
 .LI
-The argument of the command line option `\-I' is now also passed to troff
+The argument of the command-line option `\-I' is now also passed to troff
 and grops, specifying a directory to search for files on the command line,
 files named in `so' and `psbb' requests, and files named in \eX'ps:\~file'
 and \eX'ps:\~import' escapes.
@@ -1281,7 +1273,7 @@ They are equivalent to `dei' and `ami', respectively, but the macros
 are executed with compatibility mode off (similar to `de1' and `am1').
 
 .LI
-New command line option `\-I' to specify a directory for files (both
+New command-line option `\-I' to specify a directory for files (both
 those on the command line and those named in `psbb' requests).
 This is also handled by the groff wrapper program.
 
@@ -1322,7 +1314,7 @@ grap2graph
 .ULS
 .LI
 A new script contributed by
-.MTO esr@\:thyrsus.com "Eric S. Raymond" .
+.MTO esr@\:thyrsus.com "Eric S.\& Raymond" .
 It converts a grap diagram into a cropped image.
 Since it uses gs and the PNM library, virtually all graphics formats
 are available for output.
@@ -1345,7 +1337,7 @@ grops
 
 .ULS
 .LI
-New command line option `\-I' to specify a directory to search for files
+New command-line option `\-I' to specify a directory to search for files
 on the command line and files named in \eX'ps:\~import' and \eX'ps:\~file'
 escapes.
 This is also handled by the groff wrapper program.
@@ -1634,8 +1626,8 @@ The glyphs \e[*e] and \e[+e] have been exchanged to be in sync with
 all other devices.
 
 .LI
-The glyph \e[~=] is now called \e[|=].  Similar to other devices, \e[~=]
-is now another name for glyph \e[~~].
+The glyph \e[~=] is now called \e[|=].
+Similar to other devices, \e[~=] is now another name for glyph \e[~~].
 .ULE
 .
 .
@@ -1711,12 +1703,12 @@ and others made the man macros more customizable.
 
 .ULS
 .LI
-New command line options \-rFT, \-rIN, and \-rSN to set the vertical
+New command-line options \-rFT, \-rIN, and \-rSN to set the vertical
 location of the footer line, the body text indentation, and the
 sub-subheading indentation.
 
 .LI
-New command line option \-rHY (similar to the ms macros) to control
+New command-line option \-rHY (similar to the ms macros) to control
 hyphenation.
 
 .LI
@@ -1734,7 +1726,7 @@ explicitly specified on the command line.
 
 .LI
 troff's start-up file `troffrc' now includes `papersize.tmac' to set
-the paper size with the command line option `-dpaper=<size>'.
+the paper size with the command-line option `-dpaper=<size>'.
 
 Possible values for `<size>' are the same as the predefined `papersize'
 values in the DESC file (only lowercase; see the groff_font man page)
@@ -1742,7 +1734,7 @@ except \%a7-d7.
 An appended `l' (ell) character denotes landscape orientation.
 Examples: `a4', `c3l', `letterl'.
 
-Most output drivers need additional command line switches `\-p' and
+Most output drivers need additional command-line switches `\-p' and
 `\-l' to override the default paper length and orientation as set in
 the driver specific DESC file.
 
@@ -1855,9 +1847,9 @@ papersize /etc/papersize a4
 
 .LI
 A local font directory has been prepended to the default font path; it
-defaults to /usr/local/share/groff/site-font.  Similar to the normal
-font searching process, files must be placed into a dev\f[I]XXX\f[]
-subdirectory, e.g.
+defaults to /usr/local/share/groff/site-font.
+Similar to the normal font searching process, files must be placed into
+a dev\f[I]XXX\f[] subdirectory, e.g.
 
 .in 2m
 .ft C
@@ -2078,7 +2070,8 @@ a
 .fi
 .in
 
-The result is `x\~a'.  Using `tr', the result would be `x\~x'.
+The result is `x\~a'.
+Using `tr', the result would be `x\~x'.
 
 .LI
 The request `pvs' isn't new, but hasn't been documented before.
@@ -2121,7 +2114,7 @@ Additionally `\e\ ' and `\e~' are converted to single space characters.
 
 .LI
 The default tab distance in nroff mode is now 0.8i to be compatible
-with UNIX troff.
+with Unix troff.
 
 .LI
 Using the latin-1 input character 0xAD (soft hyphen) for the `shc'
@@ -2164,8 +2157,9 @@ A new macro `Ex' has been added to the mdoc macro package to document an
 exit status.
 
 .LI
-`troff.man' has been split.  Differences to UNIX troff are now documented
-in the new man page `groff_diff.man'.
+`troff.man' has been split.
+Differences to Unix troff are now documented in the new man page
+`groff_diff.man'.
 
 .LI
 The PSPIC macro has been extended to work with DVI output (`pspic.tmac' is
@@ -2178,7 +2172,7 @@ Additionally, it works in compatibility mode.
 
 .LI
 `troff.1' has been split.
-Differences to UNIX troff are now documented in the new man page
+Differences to Unix troff are now documented in the new man page
 `groff_diff.7'.
 
 .LI
@@ -2266,8 +2260,8 @@ groff
 
 .ULS
 .LI
-The new command line `\-c' disables color output (which is always disabled
-in compatibility mode).
+The new command-line option `\-c' disables color output (which is always
+disabled in compatibility mode).
 .ULE
 .
 .
@@ -2276,7 +2270,7 @@ Nroff
 
 .ULS
 .LI
-Two new command line options `\-c' and `\-C'; the former passes `\-c' to
+Two new command-line options `\-c' and `\-C'; the former passes `\-c' to
 grotty (switching to the old output scheme); the latter passes `\-C' to
 groff (enabling compatibility mode).
 .ULE
@@ -2311,7 +2305,7 @@ Pic2graph
 .ULS
 .LI
 A new script contributed by
-.MTO esr@\:thyrsus.com "Eric S.\~Raymond" .
+.MTO esr@\:thyrsus.com "Eric S.\Raymond" .
 It converts a PIC diagram into a cropped image.
 Since it uses gs and the PNM library, virtually all graphics formats
 are available for output.
@@ -2324,7 +2318,7 @@ Eqn2graph
 .ULS
 .LI
 A new script contributed by
-.MTO esr@\:thyrsus.com "Eric S.\~Raymond" .
+.MTO esr@\:thyrsus.com "Eric S.\Raymond" .
 It converts an EQN diagram into a cropped image.
 Since it uses gs and the PNM library, virtually all graphics formats
 are available for output.
@@ -2337,7 +2331,7 @@ Groffer
 .ULS
 .LI
 A new script contributed by
-.MTO groff-bernd.warken-72@web.de "Bernd Warken" .
+.MTO groff\-bernd.warken\-72@web.de "Bernd Warken" .
 It displays groff files and man pages on X and tty, taking care of most
 parameters automatically.
 .ULE
@@ -2522,3 +2516,7 @@ troff completely ignores it.
 .LNE
 .
 .\" EOF
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
diff --git a/font/devX100-12/Makefile.sub b/font/devX100-12/Makefile.sub
deleted file mode 100644 (file)
index afc4107..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# Makefile.sub for `font devX100-12'
-#
-# File position: <groff-source>/font/devX100-12/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=X100-12
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devX100-12/devX100-12.am b/font/devX100-12/devX100-12.am
new file mode 100644 (file)
index 0000000..10dfa91
--- /dev/null
@@ -0,0 +1,56 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+DEVX10012FONTS = \
+  font/devX100-12/DESC \
+  font/devX100-12/TR \
+  font/devX100-12/TI \
+  font/devX100-12/TB \
+  font/devX100-12/TBI \
+  font/devX100-12/CR \
+  font/devX100-12/CI \
+  font/devX100-12/CB \
+  font/devX100-12/CBI \
+  font/devX100-12/HR \
+  font/devX100-12/HI \
+  font/devX100-12/HB \
+  font/devX100-12/HBI \
+  font/devX100-12/NR \
+  font/devX100-12/NI \
+  font/devX100-12/NB \
+  font/devX100-12/NBI \
+  font/devX100-12/S
+
+if !WITHOUT_X11
+devX10012fontdir = $(fontdir)/devX100-12
+devX10012font_DATA = $(DEVX10012FONTS)
+endif
+
+EXTRA_DIST += $(DEVX10012FONTS)
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/font/devX100/Makefile.sub b/font/devX100/Makefile.sub
deleted file mode 100644 (file)
index f0947fd..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# Makefile.sub for `font devX100'
-#
-# File position: <groff-source>/font/devX100/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=X100
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devX100/devX100.am b/font/devX100/devX100.am
new file mode 100644 (file)
index 0000000..daa6756
--- /dev/null
@@ -0,0 +1,56 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+DEVX100FONTS = \
+  font/devX100/DESC \
+  font/devX100/TR \
+  font/devX100/TI \
+  font/devX100/TB \
+  font/devX100/TBI \
+  font/devX100/CR \
+  font/devX100/CI \
+  font/devX100/CB \
+  font/devX100/CBI \
+  font/devX100/HR \
+  font/devX100/HI \
+  font/devX100/HB \
+  font/devX100/HBI \
+  font/devX100/NR \
+  font/devX100/NI \
+  font/devX100/NB \
+  font/devX100/NBI \
+  font/devX100/S
+
+if !WITHOUT_X11
+devX100fontdir = $(fontdir)/devX100
+devX100font_DATA = $(DEVX100FONTS)
+endif
+
+EXTRA_DIST += $(DEVX100FONTS)
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/font/devX75-12/Makefile.sub b/font/devX75-12/Makefile.sub
deleted file mode 100644 (file)
index 5b359f4..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# Makefile.sub for `font devX75-12'
-#
-# File position: <groff-source>/font/devX75-12/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=X75-12
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devX75-12/devX75-12.am b/font/devX75-12/devX75-12.am
new file mode 100644 (file)
index 0000000..fe751ce
--- /dev/null
@@ -0,0 +1,54 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+DEVX7512FONTS = \
+  font/devX75-12/DESC \
+  font/devX75-12/TR \
+  font/devX75-12/TI \
+  font/devX75-12/TB \
+  font/devX75-12/TBI \
+  font/devX75-12/CR \
+  font/devX75-12/CI \
+  font/devX75-12/CB \
+  font/devX75-12/CBI \
+  font/devX75-12/HR \
+  font/devX75-12/HI \
+  font/devX75-12/HB \
+  font/devX75-12/HBI \
+  font/devX75-12/NR \
+  font/devX75-12/NI \
+  font/devX75-12/NB \
+  font/devX75-12/NBI \
+  font/devX75-12/S
+if !WITHOUT_X11
+devX7512fontdir = $(fontdir)/devX75-12
+devX7512font_DATA = $(DEVX7512FONTS)
+endif
+EXTRA_DIST += $(DEVX7512FONTS)
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/font/devX75/Makefile.sub b/font/devX75/Makefile.sub
deleted file mode 100644 (file)
index a4d344d..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# Makefile.sub for `font devX75'
-#
-# File position: <groff-source>/font/devX75/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=X75
-DEVFILES=DESC TR TI TB TBI CR CI CB CBI HR HI HB HBI NR NI NB NBI S
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devX75/devX75.am b/font/devX75/devX75.am
new file mode 100644 (file)
index 0000000..0d2507e
--- /dev/null
@@ -0,0 +1,56 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+DEVX75FONTS = \
+  font/devX75/DESC \
+  font/devX75/TR \
+  font/devX75/TI \
+  font/devX75/TB \
+  font/devX75/TBI \
+  font/devX75/CR \
+  font/devX75/CI \
+  font/devX75/CB \
+  font/devX75/CBI \
+  font/devX75/HR \
+  font/devX75/HI \
+  font/devX75/HB \
+  font/devX75/HBI \
+  font/devX75/NR \
+  font/devX75/NI \
+  font/devX75/NB \
+  font/devX75/NBI \
+  font/devX75/S
+
+if !WITHOUT_X11
+devX75fontdir = $(fontdir)/devX75
+devX75font_DATA = $(DEVX75FONTS)
+endif
+
+EXTRA_DIST += $(DEVX75FONTS)
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/font/devascii/Makefile.sub b/font/devascii/Makefile.sub
deleted file mode 100644 (file)
index 93b0ebd..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-# Makefile.sub for `font devascii'
-#
-# File position: <groff-source>/font/devascii/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=ascii
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-MOSTLYCLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-RM=rm -f
-
-$(FONTS): R.proto
-       @echo Making $@
-       @$(RM) $@
-       @charwidth=`expr $(RES) / $(CPI)` ; \
-        sed -e "s/^name [A-Z]*$$/name $@/" \
-            -e \
-             "s/^\\([^ ]*\\)   [0-9][0-9]*     /\\1    $$charwidth     /" \
-            -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
-            -e "s/^internalname .*$$/internalname $@/" \
-            -e "/^internalname/s/BI/3/" \
-            -e "/^internalname/s/B/2/" \
-            -e "/^internalname/s/I/1/" \
-            -e "/^internalname .*[^ 0-9]/d" \
-            $(srcdir)/R.proto >$@
-
-DESC: DESC.proto
-       @echo Making $@
-       @sed -e "s/^res .*$$/res $(RES)/" \
-            -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
-            -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
-            -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
-            $(srcdir)/DESC.proto >$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devascii/devascii.am b/font/devascii/devascii.am
new file mode 100644 (file)
index 0000000..d195841
--- /dev/null
@@ -0,0 +1,57 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+devascii_srcdir = $(top_srcdir)/font/devascii
+DEVASCIIFONTS = R I B BI
+DEVASCIIFONTSFILES = \
+  font/devascii/R font/devascii/I font/devascii/B font/devascii/BI
+
+DEVASCIIRES = 240
+DEVASCIICPI = 10
+DEVASCIILPI = 6
+
+devasciifontdir = $(fontdir)/devascii
+devasciifont_DATA = $(DEVASCIIFONTSFILES) font/devascii/DESC
+MOSTLYCLEANFILES += $(DEVASCIIFONTSFILES) font/devascii/DESC
+EXTRA_DIST += \
+  font/devascii/R.proto \
+  font/devascii/DESC.proto
+
+$(DEVASCIIFONTSFILES): $(devascii_srcdir)/R.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(RM) $@ \
+       && $(SHELL) $(GENFONTSSH) $(devascii_srcdir)/R.proto \
+            $(DEVASCIIRES) $(DEVASCIICPI) `basename $@` > $@
+
+font/devascii/DESC: $(devascii_srcdir)/DESC.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(SHELL) $(GENDESCSH) $(devascii_srcdir)/DESC.proto \
+            $(DEVASCIIRES) $(DEVASCIICPI) $(DEVASCIILPI) \
+            $(DEVASCIIFONTS) > $@
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/font/devcp1047/Makefile.sub b/font/devcp1047/Makefile.sub
deleted file mode 100644 (file)
index eac7306..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-# Makefile.sub for `font devcp1047'
-#
-# File position: <groff-source>/font/devcp1047/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=cp1047
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-MOSTLYCLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-RM=rm -f
-
-$(FONTS): R.proto
-       @echo Making $@
-       @$(RM) $@
-       @charwidth=`expr $(RES) / $(CPI)` ; \
-        sed -e "s/^name [A-Z]*$$/name $@/" \
-            -e \
-             "s/^\\([^ ]*\\)   [0-9][0-9]*     /\\1    $$charwidth     /" \
-            -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
-            -e "s/^internalname .*$$/internalname $@/" \
-            -e "/^internalname/s/BI/3/" \
-            -e "/^internalname/s/B/2/" \
-            -e "/^internalname/s/I/1/" \
-            -e "/^internalname .*[^ 0-9]/d" \
-            $(srcdir)/R.proto >$@
-
-DESC: DESC.proto
-       @echo Making $@
-       @sed -e "s/^res .*$$/res $(RES)/" \
-            -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
-            -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
-            -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
-            $(srcdir)/DESC.proto >$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devcp1047/devcp1047.am b/font/devcp1047/devcp1047.am
new file mode 100644 (file)
index 0000000..34cc8c3
--- /dev/null
@@ -0,0 +1,55 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+devcp1047_srcdir = $(top_srcdir)/font/devcp1047
+DEVCP1047FONTS = R I B BI
+DEVCP1047FONTSFILES = \
+  font/devcp1047/R font/devcp1047/I font/devcp1047/B font/devcp1047/BI
+
+DEVCP1047RES = 240
+DEVCP1047CPI = 10
+DEVCP1047LPI = 6
+
+devcp1047fontdir = $(fontdir)/devcp1047
+devcp1047font_DATA = $(DEVCP1047FONTSFILES) font/devcp1047/DESC
+MOSTLYCLEANFILES += $(DEVCP1047FONTSFILES) font/devcp1047/DESC
+EXTRA_DIST += font/devcp1047/R.proto font/devcp1047/DESC.proto
+
+$(DEVCP1047FONTSFILES): $(devcp1047_srcdir)/R.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(RM) $@ \
+       && $(SHELL) $(GENFONTSSH) $(devcp1047_srcdir)/R.proto \
+            $(DEVCP1047RES) $(DEVCP1047CPI) `basename $@` > $@
+
+font/devcp1047/DESC: $(devcp1047_srcdir)/DESC.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(SHELL) $(GENDESCSH) $(devcp1047_srcdir)/DESC.proto \
+            $(DEVCP1047RES) $(DEVCP1047CPI) $(DEVCP1047LPI) \
+            $(DEVCP1047FONTS) > $@
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index e39575d34642e3131bf722267cb09adace71949e..8db05182e3fa1b23219d3a0fa373acea9469ea56 100644 (file)
@@ -43,8 +43,7 @@ dq    550498,640797,0,182045  2       0042
 "      "
 sh     550498,640797,0,182045  2       0043
 #      "
-Do     550498,640797,0,182045  2       0044
-$      "
+Po     550498,640797,0,182045  2       0044
 %      550498,728178,87381,182045      3       0045
 &      550498,640797,0,182045  2       0046
 cq     550498,640797,0,182045  2       0047
diff --git a/font/devdvi/Makefile.sub b/font/devdvi/Makefile.sub
deleted file mode 100644 (file)
index 8e1384d..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-# Makefile.sub for `font devdvi'
-#
-# File position: <groff-source>/font/devdvi/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=dvi
-DEVFILES=DESC \
-  TR TI TB TBI CW CWI HR HI HB HBI \
-  TREC TIEC TBEC TBIEC CWEC CWIEC HREC HIEC HBEC HBIEC \
-  TRTC TITC TBTC TBITC CWTC CWITC HRTC HITC HBTC HBITC \
-  MI S EX SA SB SC \
-  generate/Makefile \
-  generate/msam.map generate/msbm.map \
-  generate/texb.map generate/texex.map generate/texi.map generate/texmi.map \
-  generate/texr.map generate/texsy.map generate/textt.map generate/textex.map \
-  generate/ec.map generate/tc.map
-DEVSCRIPTS=generate/CompileFonts
-
-MOSTLYCLEANADD=DESC
-
-DESC: DESC.in
-       cat $(srcdir)/DESC.in >DESC
-       if test "$(PAGE)" = A4; then \
-         echo "papersize a4" >>DESC; \
-       else \
-         echo "papersize letter" >>DESC; \
-       fi
-       test -z '$(DVIPRINT)' || echo print '$(DVIPRINT)' >>DESC
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devdvi/devdvi.am b/font/devdvi/devdvi.am
new file mode 100644 (file)
index 0000000..a5b5f11
--- /dev/null
@@ -0,0 +1,102 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+devdvi_srcdir = $(top_srcdir)/font/devdvi
+DEVDVIFONTFILES = \
+  font/devdvi/TR \
+  font/devdvi/TI \
+  font/devdvi/TB \
+  font/devdvi/TBI \
+  font/devdvi/CW \
+  font/devdvi/CWI \
+  font/devdvi/HR \
+  font/devdvi/HI \
+  font/devdvi/HB \
+  font/devdvi/HBI \
+  font/devdvi/TREC \
+  font/devdvi/TIEC \
+  font/devdvi/TBEC \
+  font/devdvi/TBIEC \
+  font/devdvi/CWEC \
+  font/devdvi/CWIEC \
+  font/devdvi/HREC \
+  font/devdvi/HIEC \
+  font/devdvi/HBEC \
+  font/devdvi/HBIEC \
+  font/devdvi/TRTC \
+  font/devdvi/TITC \
+  font/devdvi/TBTC \
+  font/devdvi/TBITC \
+  font/devdvi/CWTC \
+  font/devdvi/CWITC \
+  font/devdvi/HRTC \
+  font/devdvi/HITC \
+  font/devdvi/HBTC \
+  font/devdvi/HBITC \
+  font/devdvi/MI \
+  font/devdvi/S \
+  font/devdvi/EX \
+  font/devdvi/SA \
+  font/devdvi/SB \
+  font/devdvi/SC
+devdvifontdir = $(fontdir)/devdvi
+devdvifont_DATA = $(DEVDVIFONTFILES) font/devdvi/DESC
+
+DEVDVIGENFILES = \
+  font/devdvi/generate/Makefile \
+  font/devdvi/generate/msam.map \
+  font/devdvi/generate/msbm.map \
+  font/devdvi/generate/texb.map \
+  font/devdvi/generate/texex.map \
+  font/devdvi/generate/texi.map \
+  font/devdvi/generate/texmi.map \
+  font/devdvi/generate/texr.map \
+  font/devdvi/generate/texsy.map \
+  font/devdvi/generate/textt.map \
+  font/devdvi/generate/textex.map \
+  font/devdvi/generate/ec.map \
+  font/devdvi/generate/tc.map \
+  font/devdvi/generate/CompileFonts
+devdvigendir = $(fontdir)/devdvi/generate
+devdvigen_DATA = $(DEVDVIGENFILES)
+
+EXTRA_DIST += $(DEVDVIFONTFILES) $(DEVDVIGENFILES) font/devdvi/DESC.in
+MOSTLYCLEANFILES += font/devdvi/DESC
+
+font/devdvi/DESC: $(devdvi_srcdir)/DESC.in
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && cat $(devdvi_srcdir)/DESC.in >$@ \
+       && if test "$(PAGE)" = A4; then \
+            echo "papersize a4" >>$@; \
+          else \
+            echo "papersize letter" >>$@; \
+          fi \
+       && (test -z '$(DVIPRINT)' \
+           || echo print '$(DVIPRINT)' >>$@)
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index cea9ee5f1ef7a70adadae52d5ef8304a02fad7d9..706e43e7edd6644da12b077c9a9a2263afebcd11 100644 (file)
@@ -1,8 +1,8 @@
-# Makefile for `font devdvi/generate'
+# Makefile for 'font devdvi/generate'
 #
 # File position: <groff-source>/font/devdvi/generate/Makefile
 #
-# Copyright (C) 1989-2002, 2009 Free Software Foundation, Inc.
+# Copyright (C) 1989-2018 Free Software Foundation, Inc.
 #      Written by James Clark (jjc@jclark.com)
 #
 # This file is part of groff.
 # Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# groff 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # This is set up so you can do:
 #   make -f generate/Makefile
 # in the parent directory of the directory containing this file.
 
-# Note that the following font files have manually added kerning values for
-# `` and '': B, BI, I, R.
+# Note manually-added kerning values for `` and '' in the font files:
+#   B, BI, I, R.
 
 srcdir=generate
 tfmdir=/usr/local/lib/groff-tfm
@@ -70,9 +70,9 @@ CW: $(srcdir)/textt.map
        $(TFMTODIT) $(SPECIALFLAG) \
          $(tfmdir)/cmtt10.tfm $(srcdir)/textt.map $@
 
-CWI: $(srcdir)/textt.map
+CWI: $(srcdir)/texitt.map
        $(TFMTODIT) \
-         $(tfmdir)/cmitt10.tfm $(srcdir)/textt.map $@
+         $(tfmdir)/cmitt10.tfm $(srcdir)/texitt.map $@
 
 MI: $(srcdir)/texmi.map
        $(TFMTODIT) $(SPECIALFLAG) -k 0177 \
diff --git a/font/devhtml/Makefile.sub b/font/devhtml/Makefile.sub
deleted file mode 100644 (file)
index e2b2e1e..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-# Makefile.sub for `font devhtml'
-#
-# File position: <groff-source>/font/devhtml/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=html
-PROTOFONTS=R I B BI CR CI CB CBI
-FONTS=$(PROTOFONTS) S
-DEVFILES=$(FONTS) DESC
-MOSTLYCLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-RM=rm -f
-
-$(FONTS): R.proto
-       @echo Making $@
-       @$(RM) $@
-       @charwidth=`expr $(RES) / $(CPI)` ; \
-        sed -e "s/^name [A-Z]*$$/name $@/" \
-            -e \
-             "s/^\\([^ ]*\\)   [0-9][0-9]*     /\\1    $$charwidth     /" \
-            -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
-            -e "s/^internalname .*$$/internalname $@/" \
-            -e "/^internalname/s/CR/4/" \
-            -e "/^internalname/s/BI/3/" \
-            -e "/^internalname/s/B/2/" \
-            -e "/^internalname/s/I/1/" \
-            -e "/^internalname .*[^ 0-9]/d" \
-            $(srcdir)/R.proto >$@
-
-DESC: DESC.proto
-       @echo Making $@
-       @sed -e "s/^res .*$$/res $(RES)/" \
-            -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
-            -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
-            -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
-            $(srcdir)/DESC.proto >$@
-       @echo "image_generator $(GHOSTSCRIPT)" >> $@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devhtml/devhtml.am b/font/devhtml/devhtml.am
new file mode 100644 (file)
index 0000000..617e146
--- /dev/null
@@ -0,0 +1,66 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+devhtml_srcdir = $(top_srcdir)/font/devhtml
+DEVHTMLFONTS = R I B BI CR CI CB CBI S
+DEVHTMLFONTSFILES = \
+  font/devhtml/R \
+  font/devhtml/I \
+  font/devhtml/B \
+  font/devhtml/BI \
+  font/devhtml/CR \
+  font/devhtml/CI \
+  font/devhtml/CB \
+  font/devhtml/CBI \
+  font/devhtml/S
+
+DEVHTMLRES = 240
+DEVHTMLCPI = 10
+DEVHTMLLPI = 6
+
+devhtmlfontdir = $(fontdir)/devhtml
+devhtmlfont_DATA = $(DEVHTMLFONTSFILES) font/devhtml/DESC
+MOSTLYCLEANFILES += $(DEVHTMLFONTSFILES) font/devhtml/DESC
+EXTRA_DIST += \
+  font/devhtml/R.proto \
+  font/devhtml/DESC.proto \
+  font/devhtml/R.in
+
+$(DEVHTMLFONTSFILES): $(devhtml_srcdir)/R.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(RM) $@ \
+       && $(SHELL) $(GENFONTSSH) $(devhtml_srcdir)/R.proto \
+            $(DEVHTMLRES) $(DEVHTMLCPI) `basename $@` > $@
+
+font/devhtml/DESC: $(devhtml_srcdir)/DESC.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(SHELL) $(GENDESCSH) $(devhtml_srcdir)/DESC.proto \
+            $(DEVHTMLRES) $(DEVHTMLCPI) $(DEVHTMLLPI) $(DEVHTMLFONTS) > $@ \
+       && echo "image_generator $(GHOSTSCRIPT)" >> $@
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/font/devlatin1/Makefile.sub b/font/devlatin1/Makefile.sub
deleted file mode 100644 (file)
index ae8eb28..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# Makefile.sub for `font devlatin1'
-#
-# File position: <groff-source>/font/devlatin1/Makefile.sub
-#
-# Copyright (C) 2014 Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=latin1
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-MOSTLYCLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-RM=rm -f
-
-$(FONTS): R.proto
-       @echo Making $@
-       @$(RM) $@
-       @charwidth=`expr $(RES) / $(CPI)` ; \
-        sed -e "s/^name [A-Z]*$$/name $@/" \
-            -e \
-             "s/^\\([^ ]*\\)   [0-9][0-9]*     /\\1    $$charwidth     /" \
-            -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
-            -e "s/^internalname .*$$/internalname $@/" \
-            -e "/^internalname/s/BI/3/" \
-            -e "/^internalname/s/B/2/" \
-            -e "/^internalname/s/I/1/" \
-            -e "/^internalname .*[^ 0-9]/d" \
-            $(srcdir)/R.proto >$@
-
-DESC: DESC.proto
-       @echo Making $@
-       @sed -e "s/^res .*$$/res $(RES)/" \
-            -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
-            -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
-            -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
-            $(srcdir)/DESC.proto >$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devlatin1/devlatin1.am b/font/devlatin1/devlatin1.am
new file mode 100644 (file)
index 0000000..6f00e01
--- /dev/null
@@ -0,0 +1,55 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+devlatin1_srcdir = $(top_srcdir)/font/devlatin1
+DEVLATIN1FONTS = R I B BI
+DEVLATIN1FONTSFILES = \
+  font/devlatin1/R font/devlatin1/I font/devlatin1/B font/devlatin1/BI
+
+DEVLATIN1RES = 240
+DEVLATIN1CPI = 10
+DEVLATIN1LPI = 6
+
+devlatin1fontdir = $(fontdir)/devlatin1
+devlatin1font_DATA = $(DEVLATIN1FONTSFILES) font/devlatin1/DESC
+MOSTLYCLEANFILES += $(DEVLATIN1FONTSFILES) font/devlatin1/DESC
+EXTRA_DIST += font/devlatin1/R.proto font/devlatin1/DESC.proto
+
+$(DEVLATIN1FONTSFILES): $(devlatin1_srcdir)/R.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(RM) $@ \
+       && $(SHELL) $(GENFONTSSH) $(devlatin1_srcdir)/R.proto \
+            $(DEVLATIN1RES) $(DEVLATIN1CPI) `basename $@` > $@
+
+font/devlatin1/DESC: $(devlatin1_srcdir)/DESC.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(SHELL) $(GENDESCSH) $(devlatin1_srcdir)/DESC.proto \
+            $(DEVLATIN1RES) $(DEVLATIN1CPI) $(DEVLATIN1LPI) \
+            $(DEVLATIN1FONTS) > $@
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/font/devlbp/Makefile.sub b/font/devlbp/Makefile.sub
deleted file mode 100644 (file)
index c015c8e..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# Makefile.sub for `font devlbp'
-#
-# File position: <groff-source>/font/devlbp/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=lbp
-LBPPRINT=$(PSPRINT)
-DEVFILES=DESC \
-  HB HBI HI HR \
-  HNB HNBI HNI HNR \
-  TB TBI TI TR \
-  CR CB CI \
-  ER EB EI
-
-MOSTLYCLEANADD=DESC
-
-DESC: DESC.in
-       cat $(srcdir)/DESC.in >DESC
-       if test "$(PAGE)" = A4; then \
-         echo "papersize a4" >>DESC; \
-       else \
-         echo "papersize letter" >>DESC; \
-       fi
-       test -z '$(LBPPRINT)' || echo print '$(LBPPRINT)' >>DESC
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devlbp/devlbp.am b/font/devlbp/devlbp.am
new file mode 100644 (file)
index 0000000..30002f8
--- /dev/null
@@ -0,0 +1,66 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+LBPPRINT=$(PSPRINT)
+devlbp_srcdir = $(top_srcdir)/font/devlbp
+DEVLBPFONTFILES = \
+  font/devlbp/HB \
+  font/devlbp/HBI \
+  font/devlbp/HI \
+  font/devlbp/HR \
+  font/devlbp/HNB \
+  font/devlbp/HNBI \
+  font/devlbp/HNI \
+  font/devlbp/HNR \
+  font/devlbp/TB \
+  font/devlbp/TBI \
+  font/devlbp/TI \
+  font/devlbp/TR \
+  font/devlbp/CR \
+  font/devlbp/CB \
+  font/devlbp/CI \
+  font/devlbp/ER \
+  font/devlbp/EB \
+  font/devlbp/EI
+devlbpfontdir = $(fontdir)/devlbp
+devlbpfont_DATA = $(DEVLBPFONTFILES) font/devlbp/DESC
+EXTRA_DIST += $(DEVLBPFONTFILES) font/devlbp/DESC.in
+MOSTLYCLEANFILES += font/devlbp/DESC
+
+font/devlbp/DESC: $(devlbp_srcdir)/DESC.in
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && cat $(devlbp_srcdir)/DESC.in >$@ \
+       && if test "$(PAGE)" = A4; then \
+            echo "papersize a4" >>$@; \
+          else \
+            echo "papersize letter" >>$@; \
+          fi \
+       && (test -z '$(LBPPRINT)' \
+           || echo print '$(LBPPRINT)' >>$@)
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/font/devlj4/Makefile.sub b/font/devlj4/Makefile.sub
deleted file mode 100644 (file)
index 6d499db..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-# Makefile.sub for `font devlj4'
-#
-# File position: <groff-source>/font/devlj4/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#   Written by Werner Lemberg <wl@gnu.org> and
-#   Bernd Warken <groff-bernd.warken-72@web.de>.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `groffer' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=lj4
-LJ4RES=1200
-LJ4PRINT=$(PSPRINT)
-DEVFILES=DESC \
-  AB ABI AI AR \
-  ALBB ALBR \
-  AOB AOI AOR \
-  CB CBI CI CR \
-  GB GBI GI GR \
-  LGB LGI LGR \
-  OB OBI OI OR \
-  TB TBI TI TR \
-  TNRB TNRBI TNRI TNRR \
-  UB UBI UI UR \
-  UCB UCBI UCI UCR \
-  CLARENDON CORONET MARIGOLD S \
-  SYMBOL WINGDINGS \
-  generate/Makefile \
-  generate/special.map \
-  generate/symbol.map \
-  generate/text.map \
-  generate/wingdings.map \
-  generate/special.awk
-
-MOSTLYCLEANADD=DESC
-
-DESC: DESC.in
-       echo "res $(LJ4RES)" >DESC
-       echo "unitwidth `expr 7620000 / $(LJ4RES)`" >>DESC
-       cat $(srcdir)/DESC.in >>DESC
-       if test "$(PAGE)" = A4; then \
-         echo "papersize a4" >>DESC; \
-       else \
-         echo "papersize letter" >>DESC; \
-       fi
-       test -z '$(LJ4PRINT)' || echo print '$(LJ4PRINT)' >>DESC
-
-fonts:
-       $(MAKE) -f $(srcdir)/generate/Makefile srcdir=$(srcdir)/generate \
-         HPFTODIT=$(top_builddir)/src/utils/hpftodit/hpftodit
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devlj4/devlj4.am b/font/devlj4/devlj4.am
new file mode 100644 (file)
index 0000000..f9aaa36
--- /dev/null
@@ -0,0 +1,117 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+devlj4_srcdir = $(top_srcdir)/font/devlj4
+LJ4RES = 1200
+LJ4PRINT = $(PSPRINT)
+DEVLJ4FONTFILES = \
+  font/devlj4/AB \
+  font/devlj4/ABI \
+  font/devlj4/AI \
+  font/devlj4/AR \
+  font/devlj4/ALBB \
+  font/devlj4/ALBR \
+  font/devlj4/AOB \
+  font/devlj4/AOI \
+  font/devlj4/AOR \
+  font/devlj4/CB \
+  font/devlj4/CBI \
+  font/devlj4/CI \
+  font/devlj4/CR \
+  font/devlj4/GB \
+  font/devlj4/GBI \
+  font/devlj4/GI \
+  font/devlj4/GR \
+  font/devlj4/LGB \
+  font/devlj4/LGI \
+  font/devlj4/LGR \
+  font/devlj4/OB \
+  font/devlj4/OBI \
+  font/devlj4/OI \
+  font/devlj4/OR \
+  font/devlj4/TB \
+  font/devlj4/TBI \
+  font/devlj4/TI \
+  font/devlj4/TR \
+  font/devlj4/TNRB \
+  font/devlj4/TNRBI \
+  font/devlj4/TNRI \
+  font/devlj4/TNRR \
+  font/devlj4/UB \
+  font/devlj4/UBI \
+  font/devlj4/UI \
+  font/devlj4/UR \
+  font/devlj4/UCB \
+  font/devlj4/UCBI \
+  font/devlj4/UCI \
+  font/devlj4/UCR \
+  font/devlj4/CLARENDON \
+  font/devlj4/CORONET \
+  font/devlj4/MARIGOLD \
+  font/devlj4/S \
+  font/devlj4/SYMBOL \
+  font/devlj4/WINGDINGS
+
+devlj4fontdir = $(fontdir)/devlj4
+dist_devlj4font_DATA = $(DEVLJ4FONTFILES)
+nodist_devlj4font_DATA = font/devlj4/DESC
+
+DEVLJ4GENFILES = \
+  font/devlj4/generate/Makefile \
+  font/devlj4/generate/special.map \
+  font/devlj4/generate/symbol.map \
+  font/devlj4/generate/text.map \
+  font/devlj4/generate/wingdings.map \
+  font/devlj4/generate/special.awk
+devlj4fontgendir = $(devlj4fontdir)/generate
+dist_devlj4fontgen_DATA = $(DEVLJ4GENFILES)
+
+EXTRA_DIST += font/devlj4/DESC.in
+
+MOSTLYCLEANFILES += font/devlj4/DESC
+
+font/devlj4/DESC: $(devlj4_srcdir)/DESC.in
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && echo "res $(LJ4RES)" >$@ \
+       && echo "unitwidth `expr 7620000 / $(LJ4RES)`" >>$@ \
+       && cat $(devlj4_srcdir)/DESC.in >>$@ \
+       && if test "$(PAGE)" = A4; then \
+            echo "papersize a4" >>$@; \
+          else \
+            echo "papersize letter" >>$@; \
+          fi \
+       && (test -z '$(LJ4PRINT)' \
+           || echo print '$(LJ4PRINT)' >>$@)
+
+fonts: devlj4_fonts
+devlj4_fonts: hpftodit font/devlj4/DESC
+       $(MAKE) -f $(devlj4_srcdir)/generate/Makefile \
+         srcdir=$(devlj4_srcdir)/generate \
+         HPFTODIT=$(top_builddir)/hpftodit
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 6c5c6c818297fada7ef7e66a7feef050574ee4a0..163a3118afdc480c8085de77be912efba1d5cba9 100644 (file)
@@ -1,24 +1,24 @@
-# Makefile for `font devlj4 generate'
+# Makefile for 'font devlj4 generate'
 #
 # File position: <groff-source>/font/devlj4/generate/Makefile
 #
-# Copyright (C) 1994-2014 Free Software Foundation, Inc.
+# Copyright (C) 1994-2018 Free Software Foundation, Inc.
 #   Written by James Clark (jjc@jclark.com)
 #
 # This file is part of groff.
 #
 # groff 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 3 of the License, or
-# (at your option) any later version.
+# Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
 #
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# groff 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # Directory containing Autofont TFM files.
 # The TFM files used are available for ftp as
index 26e8b92d223bd2c40e63fe966eff07bc8e5fdfd6..8e3c702bf033a6263d75ece75c8cfd3f64975434 100644 (file)
@@ -1,5 +1,3 @@
-#! /bin/awk -f
-
 # Correct Intellifont-based height metrics for several glyphs in
 # special font for TrueType CG Times (LaserJet 4000 and later).
 
index 42b8f4f5a64f2e80ae73635c99b7f3ed4d57aa76..18170ff2900f27256ab2948cb2f7349a83ae0611 100644 (file)
@@ -2,7 +2,7 @@
 #
 # Created 30 December 2003 -- you need hpftodit from groff 1.19.1 or newer!
 #
-# Glyphs marked with an asterisk have (also) an entry in `special.umap'.
+# Glyphs marked with an asterisk have (also) an entry in 'special.umap'.
 # Unknown MSL numbers are marked with a question mark; glyphs with an
 # uncertain Unicode mapping are tagged also with a question mark.
 
 # 225 down arrow *
 # 226 right arrow *
 # 227 left arrow *
-# 228 tick up at left (`logicalnotflopped') *
+# 228 tick up at left ('logicalnotflopped') *
 # 229 left/right arrow *
 
 # 230 up solid arrowhead *
 342    0111    u0111
 # 343-369 ?
 
-# 370 `lira' ?
+# 370 'lira' ?
 # 371-374 ?
-# 375 `asciigrave' ?
+# 375 'asciigrave' ?
 
 # 376-399 ?
 
 # 1110 medium open bullet *
 # 1111 large solid bullet ?
 # 1112 visible carriage return *
-# 1113 visible tab (`arrowtab') ?
+# 1113 visible tab ('arrowtab') ?
 # 1114 visible space *
 # 1115 visible soft hyphen -- unused
-# 1116 visible end-of-file (`embox')?
-# 1117 `enspacereverse' ?
-# 1118 `emspacereverse' ?
+# 1116 visible end-of-file ('embox')?
+# 1117 'enspacereverse' ?
+# 1118 'emspacereverse' ?
 # 1119 ?
 
 # 1120-1399 ?
index a6e968f77473c9f06c2fcd3198452e2a3a9b0d34..93e9b662c523646de4e8102b879b02588f9b5d92 100644 (file)
@@ -1,6 +1,6 @@
 # Foundry file
 
-# Copyright (C) 2011 Free Software Foundation, Inc.
+# Copyright (C) 2011-2018 Free Software Foundation, Inc.
 #      Written by Deri James <deri@chuzzlewit.demon.co.uk>
 #
 # This file is part of groff.
@@ -16,7 +16,7 @@
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #=====================================================================
 #Foundry|Name|Searchpath
@@ -25,47 +25,47 @@ foundry||(gs)
 # These are just copies of the grops fonts so MUST not have any flags etc set
 
 #Font|IsBase14|Flags|Map|Encoding|File(!file...)
-AB|N||||URWGothicL-Demi!a010015l.pfb
-ABI|N||||URWGothicL-DemiObli!a010035l.pfb
-AI|N||||URWGothicL-BookObli!a010033l.pfb
-AR|N||||URWGothicL-Book!a010013l.pfb
-BMB|N||||URWBookmanL-DemiBold!b018015l.pfb
-BMBI|N||||URWBookmanL-DemiBoldItal!b018035l.pfb
-BMI|N||||URWBookmanL-LighItal!b018032l.pfb
-BMR|N||||URWBookmanL-Ligh!b018012l.pfb
-CB|Y||||NimbusMonL-Bold!n022004l.pfb
-CBI|Y||||NimbusMonL-BoldObli!n022024l.pfb
-CI|Y||||NimbusMonL-ReguObli!n022023l.pfb
-CR|Y||||NimbusMonL-Regu!n022003l.pfb
+AB|N||||URWGothic-Demi!URWGothicL-Demi!a010015l.pfb
+ABI|N||||URWGothic-DemiOblique!URWGothicL-DemiObli!a010035l.pfb
+AI|N||||URWGothic-BookOblique!URWGothicL-BookObli!a010033l.pfb
+AR|N||||URWGothic-Book!URWGothicL-Book!a010013l.pfb
+BMB|N||||URWBookman-Demi!URWBookmanL-DemiBold!b018015l.pfb
+BMBI|N||||URWBookman-DemiItalic!URWBookmanL-DemiBoldItal!b018035l.pfb
+BMI|N||||URWBookman-Light!URWBookmanL-LighItal!b018032l.pfb
+BMR|N||||URWBookman-LightItalic!URWBookmanL-Ligh!b018012l.pfb
+CB|Y||||NimbusMonoPS-Bold!NimbusMonL-Bold!n022004l.pfb
+CBI|Y||||NimbusMonoPS-BoldItalic!NimbusMonL-BoldObli!n022024l.pfb
+CI|Y||||NimbusMonoPS-Italic!NimbusMonL-ReguObli!n022023l.pfb
+CR|Y||||NimbusMonoPS-Regular!NimbusMonL-Regu!n022003l.pfb
 EURO|N||||*../devps/freeeuro.pfa
-HB|Y||||NimbusSanL-Bold!n019004l.pfb
-HBI|Y||||NimbusSanL-BoldItal!n019024l.pfb
-HI|Y||||NimbusSanL-ReguItal!n019023l.pfb
-HNB|N||||NimbusSanL-BoldCond!n019044l.pfb
-HNBI|N||||NimbusSanL-BoldCondItal!n019064l.pfb
-HNI|N||||NimbusSanL-ReguCondItal!n019063l.pfb
-HNR|N||||NimbusSanL-ReguCond!n019043l.pfb
-HR|Y||||NimbusSanL-Regu!n019003l.pfb
-NB|N||||CenturySchL-Bold!c059016l.pfb
-NBI|N||||CenturySchL-BoldItal!c059036l.pfb
-NI|N||||CenturySchL-Ital!c059033l.pfb
-NR|N||||CenturySchL-Roma!c059013l.pfb
-PB|N||||URWPalladioL-Bold!p052004l.pfb
-PBI|N||||URWPalladioL-BoldItal!p052024l.pfb
-PI|N||||URWPalladioL-Ital!p052023l.pfb
-PR|N||||URWPalladioL-Roma!p052003l.pfb
-S|Y||||StandardSymL!s050000l.pfb
-TB|Y||||NimbusRomNo9L-Medi!n021004l.pfb
-TBI|Y||||NimbusRomNo9L-MediItal!n021024l.pfb
-TI|Y||||NimbusRomNo9L-ReguItal!n021023l.pfb
-TR|Y||||NimbusRomNo9L-Regu!n021003l.pfb
-ZCMI|N||||URWChanceryL-MediItal!z003034l.pfb
+HB|Y||||NimbusSans-Bold!NimbusSanL-Bold!n019004l.pfb
+HBI|Y||||NimbusSans-BoldOblique!NimbusSanL-BoldItal!n019024l.pfb
+HI|Y||||NimbusSans-Oblique!NimbusSanL-ReguItal!n019023l.pfb
+HNB|N||||NimbusSansNarrow-Bold!NimbusSanL-BoldCond!n019044l.pfb
+HNBI|N||||NimbusSansNarrow-BoldOblique!NimbusSansNarrow-BdOblique!NimbusSanL-BoldCondItal!n019064l.pfb
+HNI|N||||NimbusSansNarrow-Oblique!NimbusSanL-ReguCondItal!n019063l.pfb
+HNR|N||||NimbusSansNarrow-Regular!NimbusSanL-ReguCond!n019043l.pfb
+HR|Y||||NimbusSans-Regular!NimbusSans-Regular!NimbusSanL-Regu!n019003l.pfb
+NB|N||||C059-Bold!CenturySchL-Bold!c059016l.pfb
+NBI|N||||C059-BdIta!CenturySchL-BoldItal!c059036l.pfb
+NI|N||||C059-Italic!CenturySchL-Ital!c059033l.pfb
+NR|N||||C059-Roman!CenturySchL-Roma!c059013l.pfb
+PB|N||||P052-Bold!URWPalladioL-Bold!p052004l.pfb
+PBI|N||||P052-BoldItalic!URWPalladioL-BoldItal!p052024l.pfb
+PI|N||||P052-Italic!URWPalladioL-Ital!p052023l.pfb
+PR|N||||P052-Roman!URWPalladioL-Roma!p052003l.pfb
+S|Y||||StandardSymbolsPS!StandardSymL!s050000l.pfb
+TB|Y||||NimbusRoman-Bold!NimbusRomNo9L-Medi!n021004l.pfb
+TBI|Y||||NimbusRoman-BoldItalic!NimbusRomNo9L-MediItal!n021024l.pfb
+TI|Y||||NimbusRoman-Italic!NimbusRomNo9L-ReguItal!n021023l.pfb
+TR|Y||||NimbusRoman-Regular!NimbusRomNo9L-Regu!n021003l.pfb
+ZCMI|N||||Z003-MediumItalic!URWChanceryL-MediItal!z003034l.pfb
 ZD|Y||||Dingbats!d050000l.pfb
 
 #======================================================================
 
 #Foundry|Name|Searchpath
-foundry|U|(gs):/usr/share/fonts/type1/gsfonts :/opt/local/share/fonts/urw-fonts # the URW fonts delivered with ghostscript (may be different)
+foundry|U|(gs):@urwfontsdir@ :/usr/share/fonts/type1/gsfonts :/opt/local/share/fonts/urw-fonts # the URW fonts delivered with ghostscript (may be different)
 #Define Flags for afmtodit
 
 r=-i 0 -m
diff --git a/font/devpdf/Makefile.sub b/font/devpdf/Makefile.sub
deleted file mode 100644 (file)
index e367a34..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-# Makefile.sub for `font devpdf'
-#
-# File position: <groff-source>/font/devpdf/Makefile.sub
-#
-# Copyright (C) 2011-2014 Free Software Foundation, Inc.
-#      Written by Deri James <deri@chuzzlewit.demon.co.uk>
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-
-DEV=pdf
-GROFF_FONT_FILES=`cd $(top_builddir)/font/devpdf \
-                  && find * -maxdepth 0 -type f ! -name 'Makefile.sub*' \
-                            -exec grep -l internalname {} \;`
-ENC_FILES=`cd $(top_builddir)/font/devpdf; ls enc/*`
-MAP_FILES=`cd $(top_builddir)/font/devpdf; ls map/*`
-
-MOSTLYCLEANADD=\
-  download \
-  DESC \
-  Foundry \
-  util/BuildFoundries \
-  $(GROFF_FONT_FILES) \
-  $(ENC_FILES) \
-  $(MAP_FILES)
-
-MOSTLYCLEANDIRADD=enc map
-
-DEVFILES=\
-  Foundry
-
-#DEVSCRIPTS=util/BuildFoundries
-
-DISTFILES=\
-  $(DEVFILES) \
-  $(DEVSCRIPTS)
-
-RM=rm -f
-
-all: DESC
-
-DESC: DESC.in
-       $(RM) DESC
-       cat $(srcdir)/DESC.in >$(top_builddir)/font/devpdf/DESC
-       if test "$(PAGE)" = A4; then \
-         echo "papersize a4" >>$(top_builddir)/font/devpdf/DESC; \
-       else \
-         echo "papersize letter" >>$(top_builddir)/font/devpdf/DESC; \
-       fi
-       $(RM) Foundry
-       cat $(srcdir)/Foundry.in >$(top_builddir)/font/devpdf/Foundry
-       -test -d $(top_builddir)/font/devpdf/enc \
-         || $(mkinstalldirs) $(top_builddir)/font/devpdf/enc
-       -test -d $(top_builddir)/font/devpdf/map \
-         || $(mkinstalldirs) $(top_builddir)/font/devpdf/map
-       cp -f $(top_srcdir)/font/devps/text.enc \
-         $(top_builddir)/font/devpdf/enc
-       cp -f $(top_srcdir)/font/devps/symbolmap \
-         $(top_builddir)/font/devpdf/map
-       cp -f $(top_srcdir)/font/devps/generate/dingbats.map \
-         $(top_builddir)/font/devpdf/map
-       cp -f $(top_srcdir)/font/devps/generate/textmap \
-         $(top_builddir)/font/devpdf/map
-       cp -f $(top_srcdir)/font/devps/generate/symbolchars \
-         $(top_builddir)/font/devpdf/map
-       -test -d util || $(mkinstalldirs) util
-       $(RM) util/BuildFoundries
-       if test -n "$(PERL)"; then \
-         sed -f $(SH_DEPS_SED_SCRIPT) \
-             -e "s|/usr/bin/perl|$(PERL)|" \
-             -e "s|@GROFF_GHOSTSCRIPT_INTERPRETERS@|$(GHOSTSCRIPT)|" \
-             -e "s|@VERSION@|$(version)$(revision)|" \
-             -e "s|@GROFF_FONT_DIR@|$(fontdir)|" \
-             $(srcdir)/util/BuildFoundries.pl \
-         >$(top_builddir)/font/devpdf/util/BuildFoundries ;\
-       else \
-         sed -f $(SH_DEPS_SED_SCRIPT) \
-             -e "s|@VERSION@|$(version)$(revision)|" \
-             -e "s|@GROFF_FONT_DIR@|$(fontdir)|" \
-             $(srcdir)/util/BuildFoundries.pl \
-         >$(top_builddir)/font/devpdf/util/BuildFoundries ;\
-       fi
-       chmod +x util/BuildFoundries
-       echo "# foundry ps name psfile" > $(top_builddir)/font/devpdf/download
-       PATH="$(top_builddir)/src/utils/afmtodit:$(GROFF_PATH_SEPARATOR)$(PATH)" \
-         util/BuildFoundries $(top_builddir)/font/devpdf \
-           '$(top_srcdir)/font/devps : $(top_builddir)/font/devps' \
-          >> $(top_builddir)/font/devpdf/download
-
-install_data:
-       -test -d $(DESTDIR)$(fontsubdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)
-       -test -d $(DESTDIR)$(fontsubdir)/enc \
-         || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/enc
-       -test -d $(DESTDIR)$(fontsubdir)/map \
-         || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/map
-       -test -d $(DESTDIR)$(fontsubdir)/util \
-         || $(mkinstalldirs) $(DESTDIR)$(fontsubdir)/util
-       for f in $(MOSTLYCLEANADD); do \
-         $(RM) $(DESTDIR)$(fontsubdir)/$$f; \
-         if test -f $$f; then \
-           $(INSTALL_DATA) $$f $(DESTDIR)$(fontsubdir)/$$f; \
-         else \
-           $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(fontsubdir)/$$f; \
-         fi; \
-       done
-
-uninstall_sub:
-       -for f in $(MOSTLYCLEANADD); do \
-         $(RM) $(DESTDIR)$(fontsubdir)/$$f; \
-       done
-       -d=$(DESTDIR)$(fontsubdir)/enc; \
-         if test -d $$d; then rmdir $$d; fi
-       -d=$(DESTDIR)$(fontsubdir)/map; \
-         if test -d $$d; then rmdir $$d; fi
-       -d=$(DESTDIR)$(fontsubdir)/util; \
-         if test -d $$d; then rmdir $$d; fi
-       -d=$(DESTDIR)$(fontsubdir); \
-         if test -d $$d; then rmdir $$d; fi
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devpdf/devpdf.am b/font/devpdf/devpdf.am
new file mode 100644 (file)
index 0000000..2864333
--- /dev/null
@@ -0,0 +1,184 @@
+# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+#      Original Makefile.sub written
+#      by Deri James <deri@chuzzlewit.demon.co.uk>
+#      Automake migration by Bertrand Garrigues
+#
+# Last update: 2017-11-02
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or (at your
+# option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+devpdf_srcdir = $(top_srcdir)/font/devpdf
+GROFF_FONT_FILES=`cd $(top_builddir)/font/devpdf \
+  && grep -ls internalname [A-CEG-Z]*`
+ENC_FILES=`cd $(top_builddir)/font/devpdf; ls enc/*`
+MAP_FILES=`cd $(top_builddir)/font/devpdf; ls map/*`
+
+MOSTLYCLEANFILES += \
+  font/devpdf/download \
+  font/devpdf/DESC \
+  font/devpdf/Foundry \
+  font/devpdf/build_font_files \
+  font/devpdf/util/BuildFoundries
+
+devpdffontdir = $(fontdir)/devpdf
+devpdffont_DATA = \
+  font/devpdf/DESC \
+  font/devpdf/Foundry
+
+devpdffontencdir = $(devpdffontdir)/enc
+devpdffontenc_DATA = font/devpdf/enc/text.enc
+
+devpdffontmapdir = $(devpdffontdir)/map
+DEVPDFFONTMAP_1 = \
+  font/devpdf/map/dingbats.map \
+  font/devpdf/map/symbolchars \
+  font/devpdf/map/textmap
+DEVPDFFONTMAP_2 = font/devpdf/map/symbolmap
+devpdffontmap_DATA = $(DEVPDFFONTMAP_1) $(DEVPDFFONTMAP_2)
+
+EXTRA_DIST += \
+  font/devpdf/DESC.in \
+  font/devpdf/Foundry.in \
+  font/devpdf/util/BuildFoundries.pl
+
+font/devpdf/enc/text.enc:
+       @$(MKDIR_P) $(top_builddir)/font/devpdf/enc
+       cp -f $(top_srcdir)/font/devps/text.enc \
+         $(top_builddir)/font/devpdf/enc
+
+font/devpdf/map/symbolmap:
+       @$(MKDIR_P) $(top_builddir)/font/devpdf/map
+       @cp -f $(top_srcdir)/font/devps/symbolmap \
+         $(top_builddir)/font/devpdf/map
+
+$(DEVPDFFONTMAP_1):
+       @$(MKDIR_P) $(top_builddir)/font/devpdf/map
+       @cp -f $(top_srcdir)/font/devps/generate/`basename $@` \
+         $(top_builddir)/font/devpdf/map
+
+font/devpdf/util/BuildFoundries: shdeps.sed \
+  $(devpdf_srcdir)/util/BuildFoundries.pl
+       $(AM_V_GEN)$(MKDIR_P) $(top_builddir)/font/devpdf/util \
+       && $(RM) $(top_builddir)/font/devpdf/util/BuildFoundries \
+       && if test -n "$(PERL)"; then \
+            sed -f $(SH_DEPS_SED_SCRIPT) \
+                -e "s|/usr/bin/perl|$(PERL)|" \
+                -e "s|[@]GROFF_GHOSTSCRIPT_INTERPRETERS[@]|$(GHOSTSCRIPT)|" \
+                -e "s|[@]VERSION[@]|$(VERSION)|" \
+                -e "s|[@]GROFF_FONT_DIR[@]|$(fontdir)|" \
+                $(devpdf_srcdir)/util/BuildFoundries.pl \
+                >$(top_builddir)/font/devpdf/util/BuildFoundries; \
+          else \
+            sed -f $(SH_DEPS_SED_SCRIPT) \
+                -e "s|[@]VERSION[@]|$(VERSION)|" \
+                -e "s|[@]GROFF_FONT_DIR[@]|$(fontdir)|" \
+                $(devpdf_srcdir)/util/BuildFoundries.pl \
+                >$(top_builddir)/font/devpdf/util/BuildFoundries; \
+          fi \
+       && chmod +x $(top_builddir)/font/devpdf/util/BuildFoundries
+
+font/devpdf/DESC: $(devpdf_srcdir)/DESC.in
+       $(AM_V_GEN)$(MKDIR_P) $(top_builddir)/font/devpdf \
+       && $(RM) $(top_builddir)/font/devpdf/DESC \
+       && cat $(devpdf_srcdir)/DESC.in >$(top_builddir)/font/devpdf/DESC \
+       && if test "$(PAGE)" = A4; then \
+            echo "papersize a4" >>$(top_builddir)/font/devpdf/DESC; \
+          else \
+            echo "papersize letter" >>$(top_builddir)/font/devpdf/DESC; \
+          fi
+
+font/devpdf/Foundry:
+       $(AM_V_GEN)$(RM) $(top_builddir)/font/devpdf/Foundry \
+       && sed "s|[@]urwfontsdir[@]|$(urwfontsdir)|" \
+              $(devpdf_srcdir)/Foundry.in >$(top_builddir)/$@
+
+all: font/devpdf/build_font_files
+
+# PATH: path to find afmtodit. We add $(abs_top_builddir) because
+# afmtodit is built in the top builddir.
+font/devpdf/build_font_files: afmtodit font/devpdf/DESC \
+  $(devpdffontenc_DATA) $(devpdffontmap_DATA) $(devpdffont_DATA) \
+  font/devpdf/util/BuildFoundries
+       @if $(AM_V_P); then \
+         set -x; \
+       else \
+         echo "  GEN      $(top_builddir)/font/devpdf/download"; \
+       fi \
+       && $(RM) $@ \
+       && $(MKDIR_P) $(top_builddir)/font/devpdf \
+       && echo "# foundry      ps name psfile" > $(top_builddir)/font/devpdf/download \
+       && PATH="$(abs_top_builddir)$(GROFF_PATH_SEPARATOR)$(abs_top_builddir)/build-aux$(GROFF_PATH_SEPARATOR)$(PATH)" \
+            $(abs_top_builddir)/font/devpdf/util/BuildFoundries \
+              $(abs_top_builddir)/font/devpdf \
+              '$(abs_top_srcdir)/font/devps : $(abs_top_builddir)/font/devps' \
+              >> $(top_builddir)/font/devpdf/download \
+       && touch $@
+
+mostlyclean-local: mostlyclean_devpdf_extra
+mostlyclean_devpdf_extra:
+       @echo Cleaning font/devpdf
+       rm -rf $(top_builddir)/font/devpdf/enc \
+         $(top_builddir)/font/devpdf/map;
+       if test -d $(top_builddir)/font/devpdf; then \
+         for f in $(GROFF_FONT_FILES); do \
+           rm -f $(top_builddir)/font/devpdf/$$f; \
+         done; \
+       fi
+
+install-data-local: install_devpdf
+install_devpdf:
+       @echo Installing devpdf files
+       -@test -d $(DESTDIR)$(devpdffontdir) \
+         || $(mkinstalldirs) $(DESTDIR)$(devpdffontdir)
+       @for f in $(GROFF_FONT_FILES); do \
+         $(RM) $(DESTDIR)$(devpdffontdir)/$$f; \
+         if test -f $$f; then \
+           $(INSTALL_DATA) $$f $(DESTDIR)$(devpdffontdir)/$$f; \
+         else \
+           $(INSTALL_DATA) $(top_builddir)/font/devpdf/$$f \
+             $(DESTDIR)$(devpdffontdir)/$$f; \
+         fi; \
+       done
+       $(INSTALL_DATA) $(top_builddir)/font/devpdf/download \
+         $(DESTDIR)$(devpdffontdir)/
+
+uninstall_groffdirs: uninstall_devpdf
+uninstall_devpdf:
+       @echo Uninstalling devpdf files
+       if test -d $(DESTDIR)$(devpdffontdir); then \
+         for f in $(GROFF_FONT_FILES); do \
+           rm -f $(DESTDIR)$(devpdffontdir)/$$f; \
+         done; \
+         if test -d $(DESTDIR)$(devpdffontencdir); then \
+           rmdir $(DESTDIR)$(devpdffontencdir); \
+         fi; \
+         if test -d $(DESTDIR)$(devpdffontmapdir); then \
+           rmdir $(DESTDIR)$(devpdffontmapdir); \
+         fi; \
+         rm -f $(DESTDIR)$(devpdffontdir)/download; \
+         rmdir $(DESTDIR)$(devpdffontdir); \
+       fi
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 39f2f0d2e8c1b942eac9ff9f99c7706942a8d9b1..f8af82618dccbcf89937dc65e4a4076484b6be45 100644 (file)
@@ -3,7 +3,7 @@
 #   BuildFoundries   : Given a Foundry file generate groff and download files
 #   Deri James       : Monday 07 Feb 2011
 
-# Copyright (C) 2011 Free Software Foundation, Inc.
+# Copyright (C) 2011-2018 Free Software Foundation, Inc.
 #      Written by Deri James <deri@chuzzlewit.demon.co.uk>
 #
 # This file is part of groff.
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 use strict;
 
+(my $progname = $0) =~s @.*/@@;
 my $where=shift||'';
 my $devps=shift||'../devps';
 chdir $where if $where ne '';
@@ -44,8 +45,9 @@ sub LoadFoundry
 {
     my $fn=shift;
     my $foundrypath='';
+    my $notFoundFont=0;
 
-    open(F,"<$fn") or die "No $fn file found";
+    open(F,"<$fn") or Die("No $fn file found");
 
     while (<F>)
     {
@@ -68,9 +70,11 @@ sub LoadFoundry
 
        if (lc($r[0]) eq 'foundry')
        {
+           Warn("\nThe path(s) used for searching:\n$foundrypath\n") if $notFoundFont;
            $foundry=uc($r[1]);
            $foundrypath=$r[2].' : '.$devps;
            $foundrypath=~s/\(gs\)/$GSpath /;
+           $notFoundFont=0;
        }
        else
        {
@@ -106,16 +110,17 @@ sub LoadFoundry
                        {
                            $gotf=0;
                            my $fns=join(',',split('!',$r[5]));
-                           Msg(0,"Unable to locate font(s) $fns on the given path(s)");
+                           Warn("Unable to locate font(s) $fns");
+                           $notFoundFont=1;
                            unlink $gfont;      # Unable to find the postscript file for the font just created by afmtodit
                        }
                    }
-                   print STDERR "Copied grops font $gfont...\n" if $gotf;
+                   Notice("Copied grops font $gfont...") if $gotf;
 
                }
                else
                {
-                   Msg(0,"Can't read grops font '$r[0]' for Foundry '$foundry'");
+                   Warn("Can't read grops font '$r[0]' for Foundry '$foundry'");
                }
            }
            else
@@ -131,18 +136,20 @@ sub LoadFoundry
                    }
                    else
                    {
-                       print STDERR "Generated $gfont...\n";
+                       Notice("Generated $gfont...");
                    }
                }
                else
                {
-                   Msg(0,"Failed to create groff font '$gfont' by running afmtodit");
+                   Warn("Failed to create groff font '$gfont' by running afmtodit");
+                   $notFoundFont=1;
                }
            }
        }
     }
 
     close();
+    Warn("\nThe path(s) used for searching:\n$foundrypath\n") if $notFoundFont;
 }
 
 sub RunAfmtodit
@@ -163,7 +170,7 @@ sub RunAfmtodit
     {
        if (!exists($flg{$f}))
        {
-           Msg(0,"Can't use undefined flag '$f' in calling afmtodit for groff font '$gfont'");
+           Warn("Can't use undefined flag '$f' in calling afmtodit for groff font '$gfont'");
            return('');
        }
 
@@ -189,7 +196,7 @@ sub RunAfmtodit
        }
        else
        {
-           Msg(0,"Unexpected format for grops font '$gfont' for Foundry '$foundry' - ignoring");
+           Warn("Unexpected format for grops font '$gfont' for Foundry '$foundry' - ignoring");
        }
 
        close(GF);
@@ -329,7 +336,7 @@ sub UseGropsVersion
        }
        else
        {
-           Msg(0,"Unexpected format for grops font '$gfont' for Foundry '$foundry' - ignoring");
+           Warn("Unexpected format for grops font '$gfont' for Foundry '$foundry' - ignoring");
        }
 
        close(GF);
@@ -345,19 +352,19 @@ sub UseGropsVersion
            else
            {
                $psfont='';
-               Msg(0,"Failed to create new font '$gfont' for Foundry '$foundry'");
+               Warn("Failed to create new font '$gfont' for Foundry '$foundry'");
            }
        }
        else
        {
-           Msg(0,"Failed to locate postscript internalname in grops font '$gfont' for Foundry '$foundry'");
+           Warn("Failed to locate postscript internalname in grops font '$gfont' for Foundry '$foundry'");
        }
 
        close(GF);
     }
     else
     {
-       Msg(0,"Failed to open grops font '$gfont' for Foundry '$foundry'");
+       Warn("Failed to open grops font '$gfont' for Foundry '$foundry'");
     }
 
     return($psfont);
@@ -417,7 +424,7 @@ sub WriteDownload
     my $fn=shift;
     my $top=1;
 
-    open(F,">$fn") or die "Can't Create new file '$fn'";
+    open(F,">$fn") or Die("Can't Create new file '$fn'");
 
     print F join("\n",@downloadpreamble),"\n";
 
@@ -430,19 +437,24 @@ sub WriteDownload
     close(F);
 }
 
-sub Msg
-{
-    my $sev=shift;
+sub Notice {
     my $msg=shift;
+    Msg("notice: $msg");
+}
 
-    if ($sev)
-    {
-       print STDERR "Error: line $lct: $msg\n";
-       exit 2;
-    }
-    else
-    {
-       print STDERR "Warning: line $lct: $msg\n";
-       $warn=1;
-    }
+sub Warn {
+    my $msg=shift;
+    Msg("warning: line $lct: $msg");
+    $warn=1;
+}
+
+sub Die {
+    my $msg=shift;
+    Msg("error: line $lct: $msg");
+    exit 2;
+}
+
+sub Msg {
+    my $msg=shift;
+    print STDERR "$progname: $msg\n";
 }
diff --git a/font/devps/Makefile.sub b/font/devps/Makefile.sub
deleted file mode 100644 (file)
index 3258486..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-# Makefile.sub for `font devps'
-
-# File position: <groff-source>/font/devps/Makefile.sub
-
-# Copyright (C) 2014 Free Software Foundation, Inc.
-
-# This file is part of `groffer' which is part of `groff'.
-
-# `groff' 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.
-
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-
-########################################################################
-
-DEV=ps
-DISTFILES=\
-  S SS \
-  ZD ZDR ZCMI \
-  AB ABI AI AR \
-  BMB BMBI BMI BMR \
-  CB CBI CI CR \
-  HB HBI HI HR \
-  HNB HNBI HNI HNR \
-  NB NBI NI NR \
-  PB PBI PI PR \
-  TB TBI TI TR \
-  EURO freeeuro.pfa freeeuro.afm \
-  text.enc download
-# these files must be in a subdirectory called `old'
-OLDDISTFILES=\
-  S SS \
-  CB CBI CI CR \
-  HB HBI HI HR \
-  HNB HNBI HNI HNR \
-  NB NBI NI NR \
-  PB PBI PI PR \
-  TB TBI TI TR \
-  symbol.afm symbolsl.afm \
-  zapfdr.afm zapfdr.ps
-
-PSFILES=prologue symbolsl.pfa zapfdr.pfa
-DEVGENFILES=generate/Makefile generate/dingbats.map \
-  generate/dingbats.rmap generate/lgreekmap \
-  generate/symbolchars generate/symbolsl.afm generate/textmap
-DEVGENSCRIPTS=generate/afmname generate/symbol.sed
-DEVFILES=DESC $(PSFILES) $(DISTFILES) $(DEVGENFILES)
-OLDDEVFILES=$(OLDDISTFILES)
-DEVSCRIPTS=$(DEVGENSCRIPTS)
-
-MOSTLYCLEANADD=DESC $(PSFILES)
-
-RM=rm -f
-
-DESC: DESC.in
-       cat $(srcdir)/DESC.in >DESC
-       echo broken $(BROKEN_SPOOLER_FLAGS) >>DESC
-       if test "$(PAGE)" = A4; then \
-         echo "papersize a4" >>DESC; \
-       else \
-         echo "papersize letter" >>DESC; \
-       fi
-       test -z '$(PSPRINT)' || echo print '$(PSPRINT)' >>DESC
-
-fonts: DESC
-       $(MAKE) -f $(srcdir)/generate/Makefile \
-         srcdir=$(srcdir)/generate DESC=$(srcdir)/DESC.in
-
-prologue: prologue.ps
-zapfdr.pfa: zapfdr.ps
-symbolsl.pfa: symbolsl.ps
-
-$(PSFILES):
-       $(RM) $@
-       sed -f $(srcdir)/psstrip.sed $? >$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/font/devps/devps.am b/font/devps/devps.am
new file mode 100644 (file)
index 0000000..3205e3b
--- /dev/null
@@ -0,0 +1,183 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+devps_srcdir = $(top_srcdir)/font/devps
+devps_builddir = $(top_builddir)/font/devps
+DEVPSFONTFILES = \
+  font/devps/S \
+  font/devps/SS \
+  font/devps/ZD \
+  font/devps/ZDR \
+  font/devps/ZCMI \
+  font/devps/AB \
+  font/devps/ABI \
+  font/devps/AI \
+  font/devps/AR \
+  font/devps/BMB \
+  font/devps/BMBI \
+  font/devps/BMI \
+  font/devps/BMR \
+  font/devps/CB \
+  font/devps/CBI \
+  font/devps/CI \
+  font/devps/CR \
+  font/devps/HB \
+  font/devps/HBI \
+  font/devps/HI \
+  font/devps/HR \
+  font/devps/HNB \
+  font/devps/HNBI \
+  font/devps/HNI \
+  font/devps/HNR \
+  font/devps/NB \
+  font/devps/NBI \
+  font/devps/NI \
+  font/devps/NR \
+  font/devps/PB \
+  font/devps/PBI \
+  font/devps/PI \
+  font/devps/PR \
+  font/devps/TB \
+  font/devps/TBI \
+  font/devps/TI \
+  font/devps/TR \
+  font/devps/EURO \
+  font/devps/freeeuro.pfa \
+  font/devps/freeeuro.afm \
+  font/devps/text.enc \
+  font/devps/download
+
+DEVPSFONTFILES_GENERATED = \
+  font/devps/DESC \
+  font/devps/prologue \
+  font/devps/zapfdr.pfa \
+  font/devps/symbolsl.pfa
+devpsfontdir = $(fontdir)/devps
+dist_devpsfont_DATA = $(DEVPSFONTFILES) 
+nodist_devpsfont_DATA = $(DEVPSFONTFILES_GENERATED)
+
+# these files will be installed in oldfontdir
+OLDDEVPSFONTFILES = \
+  font/devps/old/S \
+  font/devps/old/SS \
+  font/devps/old/CB \
+  font/devps/old/CBI \
+  font/devps/old/CI \
+  font/devps/old/CR \
+  font/devps/old/HB \
+  font/devps/old/HBI \
+  font/devps/old/HI \
+  font/devps/old/HR \
+  font/devps/old/HNB \
+  font/devps/old/HNBI \
+  font/devps/old/HNI \
+  font/devps/old/HNR \
+  font/devps/old/NB \
+  font/devps/old/NBI \
+  font/devps/old/NI \
+  font/devps/old/NR \
+  font/devps/old/PB \
+  font/devps/old/PBI \
+  font/devps/old/PI \
+  font/devps/old/PR \
+  font/devps/old/TB \
+  font/devps/old/TBI \
+  font/devps/old/TI \
+  font/devps/old/TR \
+  font/devps/old/symbol.afm \
+  font/devps/old/symbolsl.afm \
+  font/devps/old/zapfdr.afm \
+  font/devps/old/zapfdr.ps
+olddevpsfontdir = $(oldfontdir)/devps
+dist_olddevpsfont_DATA = $(OLDDEVPSFONTFILES)
+
+# Files installed in $(devfontdir)/generate
+DEVPSGENFILES = \
+  font/devps/generate/Makefile \
+  font/devps/generate/dingbats.map \
+  font/devps/generate/dingbats.rmap \
+  font/devps/generate/lgreekmap \
+  font/devps/generate/symbolchars \
+  font/devps/generate/symbolsl.afm \
+  font/devps/generate/textmap
+DEVPSGENSCRIPTS = \
+  font/devps/generate/afmname \
+  font/devps/generate/symbol.sed
+devpsgendir = $(devpsfontdir)/generate
+dist_devpsgen_DATA = $(DEVPSGENFILES) $(DEVPSGENSCRIPTS)
+
+MOSTLYCLEANFILES += $(DEVPSFONTFILES_GENERATED)
+EXTRA_DIST += \
+  font/devps/symbolmap \
+  font/devps/DESC.in  \
+  font/devps/prologue.ps \
+  font/devps/psstrip.sed \
+  font/devps/symbol.afm \
+  font/devps/symbolsl.ps \
+  font/devps/zapfdr.afm \
+  font/devps/zapfdr.ps \
+  font/devps/generate/freeeuro.sfd \
+  font/devps/generate/make-zapfdr \
+  font/devps/generate/symbolsl.awk \
+  font/devps/generate/sfdtopfa.pe \
+  font/devps/generate/zapfdr.sed
+
+font/devps/DESC: $(devps_srcdir)/DESC.in
+       $(AM_V_GEN)$(MKDIR_P) font/devps \
+       && cat $(devps_srcdir)/DESC.in >$@ \
+       && echo broken $(BROKEN_SPOOLER_FLAGS) >>$@ \
+       && if test "$(PAGE)" = A4; then \
+            echo "papersize a4" >>$@; \
+          else \
+            echo "papersize letter" >>$@; \
+          fi \
+       && (test -z '$(PSPRINT)' \
+           || echo print '$(PSPRINT)' >>$@)
+
+fonts: devps_fonts
+# We add top_builddir to the PATH in case the only afmtodit available is
+# the one in the current build.
+devps_fonts: afmtodit font/devps/DESC
+       PATH=$(top_builddir)$(GROFF_PATH_SEPARATOR)$(PATH) \
+         $(MAKE) -f $(devps_srcdir)/generate/Makefile \
+         srcdir=$(devps_srcdir)/generate DESC=$(devps_srcdir)/DESC.in
+
+font/devps/prologue: $(devps_srcdir)/prologue.ps
+       $(AM_V_GEN)$(MKDIR_P) font/devps \
+       && $(RM) $@ \
+       && sed -f $(devps_srcdir)/psstrip.sed $? >$@
+font/devps/zapfdr.pfa: $(devps_srcdir)/zapfdr.ps
+       $(AM_V_GEN)$(MKDIR_P) font/devps \
+       && $(RM) $@ \
+       && sed -f $(devps_srcdir)/psstrip.sed $? >$@
+font/devps/symbolsl.pfa: $(devps_srcdir)/symbolsl.ps
+       $(AM_V_GEN)$(MKDIR_P) font/devps \
+       && $(RM) $@ \
+       && sed -f $(devps_srcdir)/psstrip.sed $? >$@
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 2cf67d291ae27e1a16c39151429fceb1a9f4e489..534519fe16ab76384b55d602160cce9b973972f4 100644 (file)
@@ -1,6 +1,6 @@
 # Location: <groff-source>/font/devps/generate/Makefile
 #
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
+# Copyright (C) 1989-2018 Free Software Foundation, Inc.
 #      Written by James Clark (jjc@jclark.com)
 #
 # This file is part of groff.
 # Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 #
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# groff 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 # This is set up so you can do
 #   make -f generate/Makefile
 SHELL = /bin/sh
 
 # Directory containing AFM files.  Must not be current directory.
-# Either long names (eg Times-Roman.afm) or short names (eg timesr.afm)
-# may be used. See the afmname script.
+# Either long names (e.g., Times-Roman.afm) or short names (e.g.,
+# timesr.afm) may be used. See the afmname script.
 afmdir=/usr/local/lib/afm
 
-# The symbol font which fits to `Symbol.afm'.  For the creation of
-# `symbolsl.afm' we need the `printafm' script from ghostscript.
+# The symbol font which fits to 'Symbol.afm'.  For the creation of
+# 'symbolsl.afm' we need the 'printafm' script from ghostscript.
 symbolfont=/usr/local/lib/fonts/Symbol.pfb
 
 PRINTAFM=printafm
@@ -42,8 +42,15 @@ srcdir=generate
 SPECIALFONTS=S
 DINGBATSFONTS=ZD ZDR
 GREEKFONTS=SS
-TEXTFONTS=AB ABI AI AR BMB BMBI BMI BMR CB CBI CI CR HB HBI HI HR HNB HNBI \
-  HNI HNR NB NBI NI NR PB PBI PI PR TB TBI TI TR ZCMI
+TEXTFONTS=AB ABI AI AR \
+       BMB BMBI BMI BMR \
+       CB CBI CI CR \
+       HB HBI HI HR \
+       HNB HNBI HNI HNR \
+       NB NBI NI NR \
+       PB PBI PI PR \
+       TB TBI TI TR \
+       ZCMI
 
 FONTS=$(TEXTFONTS) $(SPECIALFONTS) $(GREEKFONTS) $(DINGBATSFONTS) EURO
 
@@ -63,139 +70,173 @@ all: $(FONTS)
 
 TR:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Times-Roman.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Times-Roman.afm` \
+         $(TEXTMAP) $@
 
 TB:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Times-Bold.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Times-Bold.afm` \
+         $(TEXTMAP) $@
 
 TI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) -a 7 \
-         `$(AFMNAME) $(afmdir)/Times-Italic.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Times-Italic.afm` \
+         $(TEXTMAP) $@
 
 TBI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/Times-BoldItalic.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Times-BoldItalic.afm` \
+         $(TEXTMAP) $@
 
 HR:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Helvetica.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Helvetica.afm` \
+         $(TEXTMAP) $@
 
 HB:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Helvetica-Bold.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Helvetica-Bold.afm` \
+         $(TEXTMAP) $@
 
 HI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/Helvetica-Oblique.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Helvetica-Oblique.afm` \
+         $(TEXTMAP) $@
 
 HBI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/Helvetica-BoldOblique.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Helvetica-BoldOblique.afm` \
+         $(TEXTMAP) $@
 
 CR:
        $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Courier.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Courier.afm` \
+         $(TEXTMAP) $@
 
 CB:
        $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Courier-Bold.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Courier-Bold.afm` \
+         $(TEXTMAP) $@
 
 CI:
        $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/Courier-Oblique.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Courier-Oblique.afm` \
+         $(TEXTMAP) $@
 
 CBI:
        $(AFMTODIT) $(NOLIGFLAG) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/Courier-BoldOblique.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Courier-BoldOblique.afm` \
+         $(TEXTMAP) $@
 
 PR:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Palatino-Roman.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Palatino-Roman.afm` \
+         $(TEXTMAP) $@
 
 PB:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Palatino-Bold.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Palatino-Bold.afm` \
+         $(TEXTMAP) $@
 
 PI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/Palatino-Italic.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Palatino-Italic.afm` \
+         $(TEXTMAP) $@
 
 PBI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/Palatino-BoldItalic.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Palatino-BoldItalic.afm` \
+         $(TEXTMAP) $@
 
 NR:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Roman.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Roman.afm` \
+         $(TEXTMAP) $@
 
 NB:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Bold.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Bold.afm` \
+         $(TEXTMAP) $@
 
 NI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Italic.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/NewCenturySchlbk-Italic.afm` \
+         $(TEXTMAP) $@
 
 NBI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/NewCenturySchlbk-BoldItalic.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/NewCenturySchlbk-BoldItalic.afm` \
+         $(TEXTMAP) $@
 
 BMR:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Bookman-Light.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Bookman-Light.afm` \
+         $(TEXTMAP) $@
 
 BMB:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Bookman-Demi.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Bookman-Demi.afm` \
+         $(TEXTMAP) $@
 
 BMI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/Bookman-LightItalic.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Bookman-LightItalic.afm` \
+         $(TEXTMAP) $@
 
 BMBI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/Bookman-DemiItalic.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Bookman-DemiItalic.afm` \
+         $(TEXTMAP) $@
 
 AR:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/AvantGarde-Book.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/AvantGarde-Book.afm` \
+         $(TEXTMAP) $@
 
 AB:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/AvantGarde-Demi.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/AvantGarde-Demi.afm` \
+         $(TEXTMAP) $@
 
 AI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/AvantGarde-BookOblique.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/AvantGarde-BookOblique.afm` \
+         $(TEXTMAP) $@
 
 ABI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/AvantGarde-DemiOblique.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/AvantGarde-DemiOblique.afm` \
+         $(TEXTMAP) $@
 
 HNR:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Helvetica-Narrow.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Helvetica-Narrow.afm` \
+         $(TEXTMAP) $@
 
 HNB:
        $(AFMTODIT) $(EFLAG) $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Bold.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Bold.afm` \
+         $(TEXTMAP) $@
 
 HNI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Oblique.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Helvetica-Narrow-Oblique.afm` \
+         $(TEXTMAP) $@
 
 HNBI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/Helvetica-Narrow-BoldOblique.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/Helvetica-Narrow-BoldOblique.afm` \
+         $(TEXTMAP) $@
 
 ZCMI:
        $(AFMTODIT) $(EFLAG) $(IFLAG) \
-         `$(AFMNAME) $(afmdir)/ZapfChancery-MediumItalic.afm` $(TEXTMAP) $@
+         `$(AFMNAME) $(afmdir)/ZapfChancery-MediumItalic.afm` \
+         $(TEXTMAP) $@
 
 ZD:
        $(AFMTODIT) -s $(RFLAG) \
-         `$(AFMNAME) $(afmdir)/ZapfDingbats.afm` $(srcdir)/dingbats.map $@
+         `$(AFMNAME) $(afmdir)/ZapfDingbats.afm` \
+         $(srcdir)/dingbats.map $@
 
 SS: symbolsl.afm
        $(AFMTODIT) -s -x $(IFLAG) \
@@ -219,7 +260,8 @@ freeeuro.afm freeeuro.pfa: $(srcdir)/freeeuro.sfd
 
 symbol.afm: $(srcdir)/symbol.sed
        $(RM) $@
-       sed -f $(srcdir)/symbol.sed `$(AFMNAME) $(afmdir)/Symbol.afm` >$@
+       sed -f $(srcdir)/symbol.sed `$(AFMNAME) $(afmdir)/Symbol.afm` \
+         >$@
 
 symbolsl.afm: $(srcdir)/symbolsl.awk $(srcdir)/../symbolsl.ps
        $(RM) $@ Fontmap
@@ -260,9 +302,11 @@ extraclean: realclean
 .PHONY: all clean realclean extraclean
 
 ########################################################################
-# Emacs settings
+# Editor settings
 ########################################################################
 #
 # Local Variables:
 # mode: makefile
+# fill-column: 72
 # End:
+# vim: set textwidth=72:
index b653802881395ed5c1189eed074b0b885946aec0..9ad3add543356cd42d51cb2d0f4f8afa3bbe7ac0 100755 (executable)
@@ -2,8 +2,7 @@
 #
 # make-zapfdr -- script for creating the file zapfdr.ps
 #
-# Copyright (C) 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 #      Written by Werner Lemberg <wl@gnu.org>
 #
 # This file is part of groff.
@@ -19,7 +18,7 @@
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #
 # usage:
index 153e631462527623f87e54dd71a0680e7a3eeca3..0bc4fb93545a4838538905ff96d70c03f3b56c08 100644 (file)
@@ -1,4 +1,3 @@
-#! /bin/sed -f
 # Set up uniform vertical dimensions for extensible glyphs (needed by eqn).
 /^C .*[ ;]N bracketlefttp[ ;]/bx
 /^C .*[ ;]N bracketleftex[ ;]/bx
index c2cbd1e7956da27a75363368b39057bf2a8eed0e..a69a15abd15f4f5ff21bb4e0901f7e48b331cee2 100644 (file)
        setgray fill
 } bind def
 
-% fill with the ``current color''
+% fill with the "current color"
 
 /FL /fill load def
 
diff --git a/font/devutf8/Makefile.sub b/font/devutf8/Makefile.sub
deleted file mode 100644 (file)
index 4f2da52..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# Makefile.sub for `font devutf8'
-#
-# File position: <groff-source>/font/devutf8/Makefile.sub
-#
-# Copyright (C) 2014 Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-DEV=utf8
-FONTS=R I B BI
-DEVFILES=$(FONTS) DESC
-MOSTLYCLEANADD=$(FONTS) DESC
-
-RES=240
-CPI=10
-LPI=6
-
-RM=rm -f
-
-$(FONTS): R.proto
-       @echo Making $@
-       @$(RM) $@
-       @charwidth=`expr $(RES) / $(CPI)` ; \
-        sed -e "s/^name [A-Z]*$$/name $@/" \
-            -e \
-             "s/^\\([^ ]*\\)   [0-9][0-9]*     /\\1    $$charwidth     /" \
-            -e "s/^spacewidth [0-9][0-9]*$$/spacewidth $$charwidth/" \
-            -e "s/^internalname .*$$/internalname $@/" \
-            -e "/^internalname/s/BI/3/" \
-            -e "/^internalname/s/B/2/" \
-            -e "/^internalname/s/I/1/" \
-            -e "/^internalname .*[^ 0-9]/d" \
-            $(srcdir)/R.proto >$@
-
-DESC: DESC.proto
-       @echo Making $@
-       @sed -e "s/^res .*$$/res $(RES)/" \
-            -e "s/^hor .*$$/hor `expr $(RES) / $(CPI)`/" \
-            -e "s/^vert .*$$/vert `expr $(RES) / $(LPI)`/" \
-            -e "s/^fonts .*$$/fonts `set $(FONTS); echo $$#` $(FONTS)/" \
-            $(srcdir)/DESC.proto >$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 8e724703ddc70e86356900573a8d3aa35118fd4f..e8fe2515718fa7f31297b98725b9c4acd9a385f4 100644 (file)
@@ -11,8 +11,8 @@ HYPHEN-MINUS is so ambiguous that it is unusable for serious typographic
 use.
 
 \[wp] has been mapped to 0x2118, because according to Unicode 4.1's
-NamesList.txt, U+2118 SCRIPT CAPITAL P is really a Weierstrass `p',
-neither SCRIPT not CAPITAL.
+NamesList.txt, U+2118 SCRIPT CAPITAL P is really a Weierstrass 'p',
+neither SCRIPT nor CAPITAL.
 
 The following line could be added; \[space] is known to devps but is not
 documented and not known to devdvi (actually, there is no space glyph within
@@ -20,19 +20,19 @@ the TeX system).
 
   space   24   0   0x0020
 
-devps maps \[a~] and `~' to `asciitilde', which is equivalent to 0x02DC, but
+devps maps \[a~] and '~' to 'asciitilde', which is equivalent to 0x02DC, but
 this glyph is just too small.  We map them to 0x007E instead.
 
-devps maps \[a^] and `^' to `circumflex', which is equivalent to 0x02C6, but
+devps maps \[a^] and '^' to 'circumflex', which is equivalent to 0x02C6, but
 this glyph is just too small.  We map them to 0x005E instead.
 
-devps maps \[*U] to `Upsilon1', which is equivalent to 0x03D2.  We map it to
+devps maps \[*U] to 'Upsilon1', which is equivalent to 0x03D2.  We map it to
 0x03A5 instead.
 
-devps maps \[*W] to `Omega', which is equivalent to either 0x2126 or 0x03A9.
+devps maps \[*W] to 'Omega', which is equivalent to either 0x2126 or 0x03A9.
 We map it to 0x03A9.
 
-devps maps \[*D] to `Delta', which is equivalent to either 0x2206 or 0x0394.
+devps maps \[*D] to 'Delta', which is equivalent to either 0x2206 or 0x0394.
 We map it to 0x0394.
 
 
diff --git a/font/devutf8/devutf8.am b/font/devutf8/devutf8.am
new file mode 100644 (file)
index 0000000..fce120f
--- /dev/null
@@ -0,0 +1,58 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+devutf8_srcdir = $(top_srcdir)/font/devutf8
+DEVUTF8FONTS = R I B BI
+DEVUTF8FONTSFILES = \
+  font/devutf8/R font/devutf8/I font/devutf8/B font/devutf8/BI
+
+DEVUTF8RES = 240
+DEVUTF8CPI = 10
+DEVUTF8LPI = 6
+
+devutf8fontdir = $(fontdir)/devutf8
+devutf8font_DATA = $(DEVUTF8FONTSFILES) font/devutf8/DESC
+MOSTLYCLEANFILES += $(DEVUTF8FONTSFILES) font/devutf8/DESC
+EXTRA_DIST += \
+  font/devutf8/R.proto \
+  font/devutf8/DESC.proto \
+  font/devutf8/NOTES \
+  font/devutf8/R.in
+
+$(DEVUTF8FONTSFILES): $(devutf8_srcdir)/R.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(RM) $@ \
+       && $(SHELL) $(GENFONTSSH) $(devutf8_srcdir)/R.proto \
+            $(DEVUTF8RES) $(DEVUTF8CPI) `basename $@` > $@
+
+font/devutf8/DESC: $(devutf8_srcdir)/DESC.proto
+       $(AM_V_GEN)$(MKDIR_P) `dirname $@` \
+       && $(SHELL) $(GENDESCSH) $(devutf8_srcdir)/DESC.proto \
+            $(DEVUTF8RES) $(DEVUTF8CPI) $(DEVUTF8LPI) $(DEVUTF8FONTS) > $@
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/font/scripts/gendesc.sh b/font/scripts/gendesc.sh
new file mode 100755 (executable)
index 0000000..5bf5376
--- /dev/null
@@ -0,0 +1,18 @@
+#!/bin/sh
+# Usage: gendesc.sh <input .proto> <RES> <CPI> <LPI> <list of fonts>
+if test -z "$1" || test -z "$2" || test -z "$3" || test -z "$4" || \
+    test -z "$5"; then
+    echo "genfonts.sh: missing parameter"; exit 255;
+fi
+INPUT=$1
+RES=$2
+CPI=$3
+LPI=$4
+shift 4
+NBFONTS=`echo $#`
+FONTS=`echo $*`
+sed -e "s/^res .*$/res $RES/" \
+    -e "s/^hor .*$/hor `expr $RES / $CPI`/" \
+    -e "s/^vert .*$/vert `expr $RES / $LPI`/" \
+    -e "s/^fonts .*$/fonts $NBFONTS $FONTS/" \
+    $INPUT
diff --git a/font/scripts/genfonts.sh b/font/scripts/genfonts.sh
new file mode 100755 (executable)
index 0000000..ad45612
--- /dev/null
@@ -0,0 +1,23 @@
+#!/bin/sh -xv
+# Usage:
+# genfonts.sh <input .proto file> <RES> <CPI> <FONT name>
+if test -z "$1" || test -z "$2" || test -z "$3" || test -z "$4"; then
+    echo "genfonts.sh: missing parameter"; exit 255;
+fi
+
+INPUT=$1
+RES=$2
+CPI=$3
+FONT=$4
+charwidth=`expr $RES / $CPI` ;
+sed -e "s|^name [A-Z]*$|name $FONT|" \
+    -e \
+    "s/^\\([^  ]*\\)   [0-9][0-9]*     /\\1    $charwidth      /" \
+    -e "s/^spacewidth [0-9][0-9]*$/spacewidth $charwidth/" \
+    -e "s|^internalname .*$|internalname $FONT|" \
+    -e "/^internalname/s/CR/4/" \
+    -e "/^internalname/s/BI/3/" \
+    -e "/^internalname/s/B/2/" \
+    -e "/^internalname/s/I/1/" \
+    -e "/^internalname .*[^ 0-9]/d" \
+    $INPUT
diff --git a/font/scripts/scripts.am b/font/scripts/scripts.am
new file mode 100644 (file)
index 0000000..251dcea
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright (C) 2015-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+# Scripts for font files generation
+GENFONTSSH=$(top_srcdir)/font/scripts/genfonts.sh
+GENDESCSH = $(top_srcdir)/font/scripts/gendesc.sh
+EXTRA_DIST += $(GENFONTSSH) $(GENDESCSH)
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 4e2470563c3d4d97725a97a4337baeedac8abd9e..f495356ff2d087187e35d88b903f89dde74637ce 100755 (executable)
@@ -2,34 +2,33 @@
 #
 # make-Rproto -- script for creating an R.proto file
 #
-# Copyright (C) 2006, 2009
-# Free Software Foundation, Inc.
+# Copyright (C) 2006-2018 Free Software Foundation, Inc.
 #      Written by Werner Lemberg <wl@gnu.org>
 #
 # This file is part of groff.
 #
 # groff 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 3 of the License, or
-# (at your option) any later version.
+# Software Foundation, either version 3 of the License, or (at your
+# option) any later version.
 #
-# groff is distributed in the hope that it will be useful, but WITHOUT ANY
-# WARRANTY; without even the implied warranty of MERCHANTABILITY or
+# groff 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #
 # usage:
 #
 #   make-Rproto R.proto.in < uniuni.cpp > R.proto
 #
-# `R.proto.in' contains the device specific part of the R.proto file; it
-# should end with a line containing the word `charset'.
+# 'R.proto.in' contains the device specific part of the R.proto file; it
+# should end with a line containing the word 'charset'.
 #
-# `uniuni.cpp' is located in directory `src/libs/libgroff'.
+# 'uniuni.cpp' is located in directory 'src/libs/libgroff'.
 
 prog="$0"
 
index 41a511b065c4a38643d961660fa922fa23cad1df..be41dbe0ff81f695f2c1a8e71c743c5427363bf9 100644 (file)
--- a/gendef.sh
+++ b/gendef.sh
@@ -1,6 +1,6 @@
 #! /bin/sh
 #
-# Copyright (C) 1991-2014 Free Software Foundation, Inc.
+# Copyright (C) 1991-2018 Free Software Foundation, Inc.
 # 
 # This file is part of groff.
 # 
@@ -15,7 +15,7 @@
 # for more details.
 # 
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 #
 # gendef filename var=val var=val ...
diff --git a/gnulib_m4/00gnulib.m4 b/gnulib_m4/00gnulib.m4
new file mode 100644 (file)
index 0000000..bd24796
--- /dev/null
@@ -0,0 +1,46 @@
+# 00gnulib.m4 serial 3
+dnl Copyright (C) 2009-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl This file must be named something that sorts before all other
+dnl gnulib-provided .m4 files.  It is needed until such time as we can
+dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and
+dnl m4_divert semantics.
+
+# Until autoconf 2.63, handling of the diversion stack required m4_init
+# to be called first; but this does not happen with aclocal.  Wrapping
+# the entire execution in another layer of the diversion stack fixes this.
+# Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4
+# for whether it was FIFO or LIFO; in order to properly balance with
+# m4_init, we need to undo our push just before anything wrapped within
+# the m4_init body.  The way to ensure this is to wrap both sides of
+# m4_init with a one-shot macro that does the pop at the right time.
+m4_ifndef([_m4_divert_diversion],
+[m4_divert_push([KILL])
+m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])])
+m4_define([m4_init],
+  [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])])
+
+
+# AC_DEFUN_ONCE([NAME], VALUE)
+# ----------------------------
+# Define NAME to expand to VALUE on the first use (whether by direct
+# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses.
+# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier.  This
+# definition is slower than the version in Autoconf 2.64, because it
+# can only use interfaces that existed since 2.59; but it achieves the
+# same effect.  Quoting is necessary to avoid confusing Automake.
+m4_version_prereq([2.63.263], [],
+[m4_define([AC][_DEFUN_ONCE],
+  [AC][_DEFUN([$1],
+    [AC_REQUIRE([_gl_DEFUN_ONCE([$1])],
+      [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl
+[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])])
+
+# gl_00GNULIB
+# -----------
+# Witness macro that this file has been included.  Needed to force
+# Automake to include this file prior to all other gnulib .m4 files.
+AC_DEFUN([gl_00GNULIB])
diff --git a/gnulib_m4/absolute-header.m4 b/gnulib_m4/absolute-header.m4
new file mode 100644 (file)
index 0000000..4e67e5f
--- /dev/null
@@ -0,0 +1,102 @@
+# absolute-header.m4 serial 16
+dnl Copyright (C) 2006-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Derek Price.
+
+# gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...)
+# ---------------------------------------
+# Find the absolute name of a header file, testing first if the header exists.
+# If the header were sys/inttypes.h, this macro would define
+# ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h
+# in config.h
+# (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"').
+# The three "///" are to pacify Sun C 5.8, which otherwise would say
+# "warning: #include of /usr/include/... may be non-portable".
+# Use '""', not '<>', so that the /// cannot be confused with a C99 comment.
+# Note: This macro assumes that the header file is not empty after
+# preprocessing, i.e. it does not only define preprocessor macros but also
+# provides some type/enum definitions or function/variable declarations.
+AC_DEFUN([gl_ABSOLUTE_HEADER],
+[AC_REQUIRE([AC_CANONICAL_HOST])
+AC_LANG_PREPROC_REQUIRE()dnl
+dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted
+dnl until we can assume autoconf 2.64 or newer.
+m4_foreach_w([gl_HEADER_NAME], [$1],
+  [AS_VAR_PUSHDEF([gl_absolute_header],
+                  [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl
+  AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>],
+    m4_defn([gl_absolute_header]),
+    [AS_VAR_PUSHDEF([ac_header_exists],
+                    [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl
+    AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl
+    if test AS_VAR_GET(ac_header_exists) = yes; then
+      gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME]))
+    fi
+    AS_VAR_POPDEF([ac_header_exists])dnl
+    ])dnl
+  AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])),
+                     ["AS_VAR_GET(gl_absolute_header)"],
+                     [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.])
+  AS_VAR_POPDEF([gl_absolute_header])dnl
+])dnl
+])# gl_ABSOLUTE_HEADER
+
+# gl_ABSOLUTE_HEADER_ONE(HEADER)
+# ------------------------------
+# Like gl_ABSOLUTE_HEADER, except that:
+#   - it assumes that the header exists,
+#   - it uses the current CPPFLAGS,
+#   - it does not cache the result,
+#   - it is silent.
+AC_DEFUN([gl_ABSOLUTE_HEADER_ONE],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])])
+  dnl AIX "xlc -E" and "cc -E" omit #line directives for header files
+  dnl that contain only a #include of other header files and no
+  dnl non-comment tokens of their own. This leads to a failure to
+  dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h>
+  dnl and others. The workaround is to force preservation of comments
+  dnl through option -C. This ensures all necessary #line directives
+  dnl are present. GCC supports option -C as well.
+  case "$host_os" in
+    aix*) gl_absname_cpp="$ac_cpp -C" ;;
+    *)    gl_absname_cpp="$ac_cpp" ;;
+  esac
+changequote(,)
+  case "$host_os" in
+    mingw*)
+      dnl For the sake of native Windows compilers (excluding gcc),
+      dnl treat backslash as a directory separator, like /.
+      dnl Actually, these compilers use a double-backslash as
+      dnl directory separator, inside the
+      dnl   # line "filename"
+      dnl directives.
+      gl_dirsep_regex='[/\\]'
+      ;;
+    *)
+      gl_dirsep_regex='\/'
+      ;;
+  esac
+  dnl A sed expression that turns a string into a basic regular
+  dnl expression, for use within "/.../".
+  gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
+  gl_header_literal_regex=`echo '$1' \
+                           | sed -e "$gl_make_literal_regex_sed"`
+  gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
+      s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
+      s|^/[^/]|//&|
+      p
+      q
+    }'
+changequote([,])
+  dnl eval is necessary to expand gl_absname_cpp.
+  dnl Ultrix and Pyramid sh refuse to redirect output of eval,
+  dnl so use subshell.
+  AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]),
+[`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
+  sed -n "$gl_absolute_header_sed"`])
+])
diff --git a/gnulib_m4/alloca.m4 b/gnulib_m4/alloca.m4
new file mode 100644 (file)
index 0000000..b9d94e8
--- /dev/null
@@ -0,0 +1,121 @@
+# alloca.m4 serial 14
+dnl Copyright (C) 2002-2004, 2006-2007, 2009-2018 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_ALLOCA],
+[
+  AC_REQUIRE([AC_FUNC_ALLOCA])
+  if test $ac_cv_func_alloca_works = no; then
+    gl_PREREQ_ALLOCA
+  fi
+
+  # Define an additional variable used in the Makefile substitution.
+  if test $ac_cv_working_alloca_h = yes; then
+    AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [
+      AC_EGREP_CPP([Need own alloca], [
+#if defined __GNUC__ || defined _AIX || defined _MSC_VER
+        Need own alloca
+#endif
+        ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no])
+    ])
+    if test $gl_cv_rpl_alloca = yes; then
+      dnl OK, alloca can be implemented through a compiler built-in.
+      AC_DEFINE([HAVE_ALLOCA], [1],
+        [Define to 1 if you have 'alloca' after including <alloca.h>,
+         a header that may be supplied by this distribution.])
+      ALLOCA_H=alloca.h
+    else
+      dnl alloca exists as a library function, i.e. it is slow and probably
+      dnl a memory leak. Don't define HAVE_ALLOCA in this case.
+      ALLOCA_H=
+    fi
+  else
+    ALLOCA_H=alloca.h
+  fi
+  AC_SUBST([ALLOCA_H])
+  AM_CONDITIONAL([GL_GENERATE_ALLOCA_H], [test -n "$ALLOCA_H"])
+])
+
+# Prerequisites of lib/alloca.c.
+# STACK_DIRECTION is already handled by AC_FUNC_ALLOCA.
+AC_DEFUN([gl_PREREQ_ALLOCA], [:])
+
+# This works around a bug in autoconf <= 2.68.
+# See <https://lists.gnu.org/r/bug-gnulib/2011-06/msg00277.html>.
+
+m4_version_prereq([2.69], [] ,[
+
+# This is taken from the following Autoconf patch:
+# https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=6cd9f12520b0d6f76d3230d7565feba1ecf29497
+
+# _AC_LIBOBJ_ALLOCA
+# -----------------
+# Set up the LIBOBJ replacement of 'alloca'.  Well, not exactly
+# AC_LIBOBJ since we actually set the output variable 'ALLOCA'.
+# Nevertheless, for Automake, AC_LIBSOURCES it.
+m4_define([_AC_LIBOBJ_ALLOCA],
+[# The SVR3 libPW and SVR4 libucb both contain incompatible functions
+# that cause trouble.  Some versions do not even contain alloca or
+# contain a buggy version.  If you still want to use their alloca,
+# use ar to extract alloca.o from them instead of compiling alloca.c.
+AC_LIBSOURCES(alloca.c)
+AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl
+AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.])
+
+AC_CACHE_CHECK(whether 'alloca.c' needs Cray hooks, ac_cv_os_cray,
+[AC_EGREP_CPP(webecray,
+[#if defined CRAY && ! defined CRAY2
+webecray
+#else
+wenotbecray
+#endif
+], ac_cv_os_cray=yes, ac_cv_os_cray=no)])
+if test $ac_cv_os_cray = yes; then
+  for ac_func in _getb67 GETB67 getb67; do
+    AC_CHECK_FUNC($ac_func,
+                  [AC_DEFINE_UNQUOTED(CRAY_STACKSEG_END, $ac_func,
+                                      [Define to one of '_getb67', 'GETB67',
+                                       'getb67' for Cray-2 and Cray-YMP
+                                       systems. This function is required for
+                                       'alloca.c' support on those systems.])
+    break])
+  done
+fi
+
+AC_CACHE_CHECK([stack direction for C alloca],
+               [ac_cv_c_stack_direction],
+[AC_RUN_IFELSE([AC_LANG_SOURCE(
+[AC_INCLUDES_DEFAULT
+int
+find_stack_direction (int *addr, int depth)
+{
+  int dir, dummy = 0;
+  if (! addr)
+    addr = &dummy;
+  *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1;
+  dir = depth ? find_stack_direction (addr, depth - 1) : 0;
+  return dir + dummy;
+}
+
+int
+main (int argc, char **argv)
+{
+  return find_stack_direction (0, argc + !argv + 20) < 0;
+}])],
+               [ac_cv_c_stack_direction=1],
+               [ac_cv_c_stack_direction=-1],
+               [ac_cv_c_stack_direction=0])])
+AH_VERBATIM([STACK_DIRECTION],
+[/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+        STACK_DIRECTION > 0 => grows toward higher addresses
+        STACK_DIRECTION < 0 => grows toward lower addresses
+        STACK_DIRECTION = 0 => direction of growth unknown */
+@%:@undef STACK_DIRECTION])dnl
+AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction)
+])# _AC_LIBOBJ_ALLOCA
+])
diff --git a/gnulib_m4/asm-underscore.m4 b/gnulib_m4/asm-underscore.m4
new file mode 100644 (file)
index 0000000..58a5299
--- /dev/null
@@ -0,0 +1,72 @@
+# asm-underscore.m4 serial 4
+dnl Copyright (C) 2010-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible. Based on as-underscore.m4 in GNU clisp.
+
+# gl_ASM_SYMBOL_PREFIX
+# Tests for the prefix of C symbols at the assembly language level and the
+# linker level. This prefix is either an underscore or empty. Defines the
+# C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to
+# a stringified variant of this prefix.
+
+AC_DEFUN([gl_ASM_SYMBOL_PREFIX],
+[
+  AC_REQUIRE([AC_PROG_EGREP])
+  dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because
+  dnl 1. It works only for GCC.
+  dnl 2. It is incorrectly defined on some platforms, in some GCC versions.
+  AC_REQUIRE([gl_C_ASM])
+  AC_CACHE_CHECK(
+    [whether C symbols are prefixed with underscore at the linker level],
+    [gl_cv_prog_as_underscore],
+    [cat > conftest.c <<EOF
+#ifdef __cplusplus
+extern "C" int foo (void);
+#endif
+int foo(void) { return 0; }
+EOF
+     # Look for the assembly language name in the .s file.
+     AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
+     if LC_ALL=C $EGREP '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then
+       gl_cv_prog_as_underscore=yes
+     else
+       gl_cv_prog_as_underscore=no
+     fi
+     rm -f conftest*
+    ])
+  if test $gl_cv_prog_as_underscore = yes; then
+    USER_LABEL_PREFIX=_
+  else
+    USER_LABEL_PREFIX=
+  fi
+  AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX],
+    [Define to the prefix of C symbols at the assembler and linker level,
+     either an underscore or empty.])
+  ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"'
+  AC_SUBST([ASM_SYMBOL_PREFIX])
+])
+
+# gl_C_ASM
+# Determines how to produce an assembly language file from C source code.
+# Sets the variables:
+#   gl_asmext - the extension of assembly language output,
+#   gl_c_asm_opt - the C compiler option that produces assembly language output.
+
+AC_DEFUN([gl_C_ASM],
+[
+  AC_EGREP_CPP([MicrosoftCompiler],
+    [
+#ifdef _MSC_VER
+MicrosoftCompiler
+#endif
+    ],
+    [gl_asmext='asm'
+     gl_c_asm_opt='-c -Fa'
+    ],
+    [gl_asmext='s'
+     gl_c_asm_opt='-S'
+    ])
+])
diff --git a/gnulib_m4/errno_h.m4 b/gnulib_m4/errno_h.m4
new file mode 100644 (file)
index 0000000..9dbdedd
--- /dev/null
@@ -0,0 +1,137 @@
+# errno_h.m4 serial 12
+dnl Copyright (C) 2004, 2006, 2008-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_HEADER_ERRNO_H],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [
+    AC_EGREP_CPP([booboo],[
+#include <errno.h>
+#if !defined ETXTBSY
+booboo
+#endif
+#if !defined ENOMSG
+booboo
+#endif
+#if !defined EIDRM
+booboo
+#endif
+#if !defined ENOLINK
+booboo
+#endif
+#if !defined EPROTO
+booboo
+#endif
+#if !defined EMULTIHOP
+booboo
+#endif
+#if !defined EBADMSG
+booboo
+#endif
+#if !defined EOVERFLOW
+booboo
+#endif
+#if !defined ENOTSUP
+booboo
+#endif
+#if !defined ENETRESET
+booboo
+#endif
+#if !defined ECONNABORTED
+booboo
+#endif
+#if !defined ESTALE
+booboo
+#endif
+#if !defined EDQUOT
+booboo
+#endif
+#if !defined ECANCELED
+booboo
+#endif
+#if !defined EOWNERDEAD
+booboo
+#endif
+#if !defined ENOTRECOVERABLE
+booboo
+#endif
+#if !defined EILSEQ
+booboo
+#endif
+      ],
+      [gl_cv_header_errno_h_complete=no],
+      [gl_cv_header_errno_h_complete=yes])
+  ])
+  if test $gl_cv_header_errno_h_complete = yes; then
+    ERRNO_H=''
+  else
+    gl_NEXT_HEADERS([errno.h])
+    ERRNO_H='errno.h'
+  fi
+  AC_SUBST([ERRNO_H])
+  AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"])
+  gl_REPLACE_ERRNO_VALUE([EMULTIHOP])
+  gl_REPLACE_ERRNO_VALUE([ENOLINK])
+  gl_REPLACE_ERRNO_VALUE([EOVERFLOW])
+])
+
+# Assuming $1 = EOVERFLOW.
+# The EOVERFLOW errno value ought to be defined in <errno.h>, according to
+# POSIX.  But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and
+# some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined.
+# Check for the value of EOVERFLOW.
+# Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE.
+AC_DEFUN([gl_REPLACE_ERRNO_VALUE],
+[
+  if test -n "$ERRNO_H"; then
+    AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [
+      AC_EGREP_CPP([yes],[
+#include <errno.h>
+#ifdef ]$1[
+yes
+#endif
+      ],
+      [gl_cv_header_errno_h_]$1[=yes],
+      [gl_cv_header_errno_h_]$1[=no])
+      if test $gl_cv_header_errno_h_]$1[ = no; then
+        AC_EGREP_CPP([yes],[
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+#ifdef ]$1[
+yes
+#endif
+          ], [gl_cv_header_errno_h_]$1[=hidden])
+        if test $gl_cv_header_errno_h_]$1[ = hidden; then
+          dnl The macro exists but is hidden.
+          dnl Define it to the same value.
+          AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [
+#define _XOPEN_SOURCE_EXTENDED 1
+#include <errno.h>
+/* The following two lines are a workaround against an autoconf-2.52 bug.  */
+#include <stdio.h>
+#include <stdlib.h>
+])
+        fi
+      fi
+    ])
+    case $gl_cv_header_errno_h_]$1[ in
+      yes | no)
+        ]$1[_HIDDEN=0; ]$1[_VALUE=
+        ;;
+      *)
+        ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1["
+        ;;
+    esac
+    AC_SUBST($1[_HIDDEN])
+    AC_SUBST($1[_VALUE])
+  fi
+])
+
+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
+dnl Remove this when we can assume autoconf >= 2.61.
+m4_ifdef([AC_COMPUTE_INT], [], [
+  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
+])
diff --git a/gnulib_m4/exponentd.m4 b/gnulib_m4/exponentd.m4
new file mode 100644 (file)
index 0000000..7b02a4c
--- /dev/null
@@ -0,0 +1,116 @@
+# exponentd.m4 serial 3
+dnl Copyright (C) 2007-2008, 2010-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION],
+[
+  AC_CACHE_CHECK([where to find the exponent in a 'double'],
+    [gl_cv_cc_double_expbit0],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { double value; unsigned int word[NWORDS]; } memory_double;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (double x)
+{
+  memory_double m;
+  size_t i;
+  /* Clear it first, in case sizeof (double) < sizeof (memory_double).  */
+  memset (&m, 0, sizeof (memory_double));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25);
+  add_to_ored_words (0.5);
+  add_to_ored_words (1.0);
+  add_to_ored_words (2.0);
+  add_to_ored_words (4.0);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+        ]])],
+        [gl_cv_cc_double_expbit0=`cat conftest.out`],
+        [gl_cv_cc_double_expbit0="unknown"],
+        [
+          dnl On ARM, there are two 'double' floating-point formats, used by
+          dnl different sets of instructions: The older FPA instructions assume
+          dnl that they are stored in big-endian word order, while the words
+          dnl (like integer types) are stored in little-endian byte order.
+          dnl The newer VFP instructions assume little-endian order
+          dnl consistently.
+          AC_EGREP_CPP([mixed_endianness], [
+#if defined arm || defined __arm || defined __arm__
+  mixed_endianness
+#endif
+            ],
+            [gl_cv_cc_double_expbit0="unknown"],
+            [
+              pushdef([AC_MSG_CHECKING],[:])dnl
+              pushdef([AC_MSG_RESULT],[:])dnl
+              pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl
+              AC_C_BIGENDIAN(
+                [gl_cv_cc_double_expbit0="word 0 bit 20"],
+                [gl_cv_cc_double_expbit0="word 1 bit 20"],
+                [gl_cv_cc_double_expbit0="unknown"])
+              popdef([AC_MSG_RESULT_UNQUOTED])dnl
+              popdef([AC_MSG_RESULT])dnl
+              popdef([AC_MSG_CHECKING])dnl
+            ])
+        ])
+      rm -f conftest.out
+    ])
+  case "$gl_cv_cc_double_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'`
+      AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word],
+        [Define as the word index where to find the exponent of 'double'.])
+      AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit],
+        [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.])
+      ;;
+  esac
+])
diff --git a/gnulib_m4/exponentf.m4 b/gnulib_m4/exponentf.m4
new file mode 100644 (file)
index 0000000..b259b91
--- /dev/null
@@ -0,0 +1,92 @@
+# exponentf.m4 serial 2
+dnl Copyright (C) 2007-2008, 2010-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+AC_DEFUN([gl_FLOAT_EXPONENT_LOCATION],
+[
+  AC_CACHE_CHECK([where to find the exponent in a 'float'],
+    [gl_cv_cc_float_expbit0],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { float value; unsigned int word[NWORDS]; } memory_float;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (float x)
+{
+  memory_float m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (float) < sizeof (memory_float).  */
+  memset (&m, 0, sizeof (memory_float));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25f);
+  add_to_ored_words (0.5f);
+  add_to_ored_words (1.0f);
+  add_to_ored_words (2.0f);
+  add_to_ored_words (4.0f);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+        ]])],
+        [gl_cv_cc_float_expbit0=`cat conftest.out`],
+        [gl_cv_cc_float_expbit0="unknown"],
+        [gl_cv_cc_float_expbit0="word 0 bit 23"])
+      rm -f conftest.out
+    ])
+  case "$gl_cv_cc_float_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'`
+      AC_DEFINE_UNQUOTED([FLT_EXPBIT0_WORD], [$word],
+        [Define as the word index where to find the exponent of 'float'.])
+      AC_DEFINE_UNQUOTED([FLT_EXPBIT0_BIT], [$bit],
+        [Define as the bit index in the word where to find bit 0 of the exponent of 'float'.])
+      ;;
+  esac
+])
diff --git a/gnulib_m4/exponentl.m4 b/gnulib_m4/exponentl.m4
new file mode 100644 (file)
index 0000000..136fa61
--- /dev/null
@@ -0,0 +1,114 @@
+# exponentl.m4 serial 4
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+AC_DEFUN([gl_LONG_DOUBLE_EXPONENT_LOCATION],
+[
+  AC_REQUIRE([gl_BIGENDIAN])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([where to find the exponent in a 'long double'],
+    [gl_cv_cc_long_double_expbit0],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { long double value; unsigned int word[NWORDS]; }
+        memory_long_double;
+static unsigned int ored_words[NWORDS];
+static unsigned int anded_words[NWORDS];
+static void add_to_ored_words (long double x)
+{
+  memory_long_double m;
+  size_t i;
+  /* Clear it first, in case
+     sizeof (long double) < sizeof (memory_long_double).  */
+  memset (&m, 0, sizeof (memory_long_double));
+  m.value = x;
+  for (i = 0; i < NWORDS; i++)
+    {
+      ored_words[i] |= m.word[i];
+      anded_words[i] &= m.word[i];
+    }
+}
+int main ()
+{
+  size_t j;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  for (j = 0; j < NWORDS; j++)
+    anded_words[j] = ~ (unsigned int) 0;
+  add_to_ored_words (0.25L);
+  add_to_ored_words (0.5L);
+  add_to_ored_words (1.0L);
+  add_to_ored_words (2.0L);
+  add_to_ored_words (4.0L);
+  /* Remove bits that are common (e.g. if representation of the first mantissa
+     bit is explicit).  */
+  for (j = 0; j < NWORDS; j++)
+    ored_words[j] &= ~anded_words[j];
+  /* Now find the nonzero word.  */
+  for (j = 0; j < NWORDS; j++)
+    if (ored_words[j] != 0)
+      break;
+  if (j < NWORDS)
+    {
+      size_t i;
+      for (i = j + 1; i < NWORDS; i++)
+        if (ored_words[i] != 0)
+          {
+            fprintf (fp, "unknown");
+            return (fclose (fp) != 0);
+          }
+      for (i = 0; ; i++)
+        if ((ored_words[j] >> i) & 1)
+          {
+            fprintf (fp, "word %d bit %d", (int) j, (int) i);
+            return (fclose (fp) != 0);
+          }
+    }
+  fprintf (fp, "unknown");
+  return (fclose (fp) != 0);
+}
+        ]])],
+        [gl_cv_cc_long_double_expbit0=`cat conftest.out`],
+        [gl_cv_cc_long_double_expbit0="unknown"],
+        [
+          dnl When cross-compiling, in general we don't know. It depends on the
+          dnl ABI and compiler version. There are too many cases.
+          gl_cv_cc_long_double_expbit0="unknown"
+          case "$host_os" in
+            mingw*) # On native Windows (little-endian), we know the result
+                    # in two cases: mingw, MSVC.
+              AC_EGREP_CPP([Known], [
+#ifdef __MINGW32__
+ Known
+#endif
+                ], [gl_cv_cc_long_double_expbit0="word 2 bit 0"])
+              AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                ], [gl_cv_cc_long_double_expbit0="word 1 bit 20"])
+              ;;
+          esac
+        ])
+      rm -f conftest.out
+    ])
+  case "$gl_cv_cc_long_double_expbit0" in
+    word*bit*)
+      word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'`
+      AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_WORD], [$word],
+        [Define as the word index where to find the exponent of 'long double'.])
+      AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_BIT], [$bit],
+        [Define as the bit index in the word where to find bit 0 of the exponent of 'long double'.])
+      ;;
+  esac
+])
diff --git a/gnulib_m4/extensions.m4 b/gnulib_m4/extensions.m4
new file mode 100644 (file)
index 0000000..71a854f
--- /dev/null
@@ -0,0 +1,189 @@
+# serial 18  -*- Autoconf -*-
+# Enable extensions on systems that normally disable them.
+
+# Copyright (C) 2003, 2006-2018 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git
+# Autoconf.  Perhaps we can remove this once we can assume Autoconf
+# 2.70 or later everywhere, but since Autoconf mutates rapidly
+# enough in this area it's likely we'll need to redefine
+# AC_USE_SYSTEM_EXTENSIONS for quite some time.
+
+# If autoconf reports a warning
+#     warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# or  warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
+# the fix is
+#   1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked
+#      but always AC_REQUIREd,
+#   2) to ensure that for each occurrence of
+#        AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+#      or
+#        AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+#      the corresponding gnulib module description has 'extensions' among
+#      its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS
+#      invocation occurs in gl_EARLY, not in gl_INIT.
+
+# AC_USE_SYSTEM_EXTENSIONS
+# ------------------------
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+#
+# Remember that #undef in AH_VERBATIM gets replaced with #define by
+# AC_DEFINE.  The goal here is to define all known feature-enabling
+# macros, then, if reports of conflicts are made, disable macros that
+# cause problems on some platforms (such as __EXTENSIONS__).
+AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS],
+[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
+AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
+
+  AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=])
+  if test "$MINIX" = yes; then
+    AC_DEFINE([_POSIX_SOURCE], [1],
+      [Define to 1 if you need to in order for 'stat' and other
+       things to work.])
+    AC_DEFINE([_POSIX_1_SOURCE], [2],
+      [Define to 2 if the system does not provide POSIX.1 features
+       except with this defined.])
+    AC_DEFINE([_MINIX], [1],
+      [Define to 1 if on MINIX.])
+    AC_DEFINE([_NETBSD_SOURCE], [1],
+      [Define to 1 to make NetBSD features available.  MINIX 3 needs this.])
+  fi
+
+dnl Use a different key than __EXTENSIONS__, as that name broke existing
+dnl configure.ac when using autoheader 2.62.
+  AH_VERBATIM([USE_SYSTEM_EXTENSIONS],
+[/* Enable extensions on AIX 3, Interix.  */
+#ifndef _ALL_SOURCE
+# undef _ALL_SOURCE
+#endif
+/* Enable general extensions on macOS.  */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
+/* Enable GNU extensions on systems that have them.  */
+#ifndef _GNU_SOURCE
+# undef _GNU_SOURCE
+#endif
+/* Enable NetBSD extensions on NetBSD.  */
+#ifndef _NETBSD_SOURCE
+# undef _NETBSD_SOURCE
+#endif
+/* Enable OpenBSD extensions on NetBSD.  */
+#ifndef _OPENBSD_SOURCE
+# undef _OPENBSD_SOURCE
+#endif
+/* Enable threading extensions on Solaris.  */
+#ifndef _POSIX_PTHREAD_SEMANTICS
+# undef _POSIX_PTHREAD_SEMANTICS
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014.  */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014.  */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# undef __STDC_WANT_IEC_60559_BFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015.  */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# undef __STDC_WANT_IEC_60559_DFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015.  */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015.  */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# undef __STDC_WANT_IEC_60559_TYPES_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010.  */
+#ifndef __STDC_WANT_LIB_EXT2__
+# undef __STDC_WANT_LIB_EXT2__
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009.  */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# undef __STDC_WANT_MATH_SPEC_FUNCS__
+#endif
+/* Enable extensions on HP NonStop.  */
+#ifndef _TANDEM_SOURCE
+# undef _TANDEM_SOURCE
+#endif
+/* Enable X/Open extensions if necessary.  HP-UX 11.11 defines
+   mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of
+   whether compiling with -Ae or -D_HPUX_SOURCE=1.  */
+#ifndef _XOPEN_SOURCE
+# undef _XOPEN_SOURCE
+#endif
+/* Enable X/Open compliant socket functions that do not require linking
+   with -lxnet on HP-UX 11.11.  */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# undef _HPUX_ALT_XOPEN_SOCKET_API
+#endif
+/* Enable general extensions on Solaris.  */
+#ifndef __EXTENSIONS__
+# undef __EXTENSIONS__
+#endif
+])
+  AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
+    [ac_cv_safe_to_define___extensions__],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[
+#         define __EXTENSIONS__ 1
+          ]AC_INCLUDES_DEFAULT])],
+       [ac_cv_safe_to_define___extensions__=yes],
+       [ac_cv_safe_to_define___extensions__=no])])
+  test $ac_cv_safe_to_define___extensions__ = yes &&
+    AC_DEFINE([__EXTENSIONS__])
+  AC_DEFINE([_ALL_SOURCE])
+  AC_DEFINE([_DARWIN_C_SOURCE])
+  AC_DEFINE([_GNU_SOURCE])
+  AC_DEFINE([_NETBSD_SOURCE])
+  AC_DEFINE([_OPENBSD_SOURCE])
+  AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
+  AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__])
+  AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__])
+  AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__])
+  AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__])
+  AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__])
+  AC_DEFINE([__STDC_WANT_LIB_EXT2__])
+  AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__])
+  AC_DEFINE([_TANDEM_SOURCE])
+  AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined],
+    [ac_cv_should_define__xopen_source],
+    [ac_cv_should_define__xopen_source=no
+     AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[
+          #include <wchar.h>
+          mbstate_t x;]])],
+       [],
+       [AC_COMPILE_IFELSE(
+          [AC_LANG_PROGRAM([[
+             #define _XOPEN_SOURCE 500
+             #include <wchar.h>
+             mbstate_t x;]])],
+          [ac_cv_should_define__xopen_source=yes])])])
+  test $ac_cv_should_define__xopen_source = yes &&
+    AC_DEFINE([_XOPEN_SOURCE], [500])
+  AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API])
+])# AC_USE_SYSTEM_EXTENSIONS
+
+# gl_USE_SYSTEM_EXTENSIONS
+# ------------------------
+# Enable extensions on systems that normally disable them,
+# typically due to standards-conformance issues.
+AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS],
+[
+  dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS.
+  dnl gnulib does not need it. But if it gets required by third-party macros
+  dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a
+  dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS".
+  dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE,
+  dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck.
+  AC_REQUIRE([AC_GNU_SOURCE])
+
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+])
diff --git a/gnulib_m4/extern-inline.m4 b/gnulib_m4/extern-inline.m4
new file mode 100644 (file)
index 0000000..3661cbd
--- /dev/null
@@ -0,0 +1,114 @@
+dnl 'extern inline' a la ISO C99.
+
+dnl Copyright 2012-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_EXTERN_INLINE],
+[
+  AH_VERBATIM([extern_inline],
+[/* Please see the Gnulib manual for how to use these macros.
+
+   Suppress extern inline with HP-UX cc, as it appears to be broken; see
+   <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>.
+
+   Suppress extern inline with Sun C in standards-conformance mode, as it
+   mishandles inline functions that call each other.  E.g., for 'inline void f
+   (void) { } inline void g (void) { f (); }', c99 incorrectly complains
+   'reference to static identifier "f" in extern inline function'.
+   This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
+
+   Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
+   on configurations that mistakenly use 'static inline' to implement
+   functions or macros in standard C headers like <ctype.h>.  For example,
+   if isdigit is mistakenly implemented via a static inline function,
+   a program containing an extern inline function that calls isdigit
+   may not work since the C standard prohibits extern inline functions
+   from calling static functions (ISO C 99 section 6.7.4.(3).
+   This bug is known to occur on:
+
+     OS X 10.8 and earlier; see:
+     https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html
+
+     DragonFly; see
+     http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log
+
+     FreeBSD; see:
+     https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html
+
+   OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
+   for clang but remains for g++; see <https://trac.macports.org/ticket/41033>.
+   Assume DragonFly and FreeBSD will be similar.
+
+   GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+   inline semantics, unless -fgnu89-inline is used.  It defines a macro
+   __GNUC_STDC_INLINE__ to indicate this situation or a macro
+   __GNUC_GNU_INLINE__ to indicate the opposite situation.
+   GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
+   semantics but warns, unless -fgnu89-inline is used:
+     warning: C99 inline functions are not supported; using GNU89
+     warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
+   It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.
+ */
+#if (((defined __APPLE__ && defined __MACH__) \
+      || defined __DragonFly__ || defined __FreeBSD__) \
+     && (defined __header_inline \
+         ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
+            && ! defined __clang__) \
+         : ((! defined _DONT_USE_CTYPE_INLINE_ \
+             && (defined __GNUC__ || defined __cplusplus)) \
+            || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
+                && defined __GNUC__ && ! defined __cplusplus))))
+# define _GL_EXTERN_INLINE_STDHEADER_BUG
+#endif
+#if ((__GNUC__ \
+      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+      : (199901L <= __STDC_VERSION__ \
+         && !defined __HP_cc \
+         && !defined __PGI \
+         && !(defined __SUNPRO_C && __STDC__))) \
+     && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# define _GL_INLINE inline
+# define _GL_EXTERN_INLINE extern inline
+# define _GL_EXTERN_INLINE_IN_USE
+#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
+       && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
+   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
+#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
+# else
+#  define _GL_INLINE extern inline
+# endif
+# define _GL_EXTERN_INLINE extern
+# define _GL_EXTERN_INLINE_IN_USE
+#else
+# define _GL_INLINE static _GL_UNUSED
+# define _GL_EXTERN_INLINE static _GL_UNUSED
+#endif
+
+/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
+   suppress bogus "no previous prototype for 'FOO'"
+   and "no previous declaration for 'FOO'" diagnostics,
+   when FOO is an inline function in the header; see
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>.  */
+#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
+# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
+#  define _GL_INLINE_HEADER_CONST_PRAGMA
+# else
+#  define _GL_INLINE_HEADER_CONST_PRAGMA \
+     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
+# endif
+# define _GL_INLINE_HEADER_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
+    _GL_INLINE_HEADER_CONST_PRAGMA
+# define _GL_INLINE_HEADER_END \
+    _Pragma ("GCC diagnostic pop")
+#else
+# define _GL_INLINE_HEADER_BEGIN
+# define _GL_INLINE_HEADER_END
+#endif])
+])
diff --git a/gnulib_m4/float_h.m4 b/gnulib_m4/float_h.m4
new file mode 100644 (file)
index 0000000..02beb85
--- /dev/null
@@ -0,0 +1,108 @@
+# float_h.m4 serial 12
+dnl Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FLOAT_H],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  FLOAT_H=
+  REPLACE_FLOAT_LDBL=0
+  case "$host_os" in
+    aix* | beos* | openbsd* | mirbsd* | irix*)
+      FLOAT_H=float.h
+      ;;
+    freebsd* | dragonfly*)
+      case "$host_cpu" in
+changequote(,)dnl
+        i[34567]86 )
+changequote([,])dnl
+          FLOAT_H=float.h
+          ;;
+        x86_64 )
+          # On x86_64 systems, the C compiler may still be generating
+          # 32-bit code.
+          AC_COMPILE_IFELSE(
+            [AC_LANG_SOURCE(
+               [[#if defined __LP64__ || defined __x86_64__ || defined __amd64__
+                  int ok;
+                 #else
+                  error fail
+                 #endif
+               ]])],
+            [],
+            [FLOAT_H=float.h])
+          ;;
+      esac
+      ;;
+    linux*)
+      case "$host_cpu" in
+        powerpc*)
+          FLOAT_H=float.h
+          ;;
+      esac
+      ;;
+  esac
+  case "$host_os" in
+    aix* | freebsd* | dragonfly* | linux*)
+      if test -n "$FLOAT_H"; then
+        REPLACE_FLOAT_LDBL=1
+      fi
+      ;;
+  esac
+
+  dnl Test against glibc-2.7 Linux/SPARC64 bug.
+  REPLACE_ITOLD=0
+  AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works],
+    [gl_cv_func_itold_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+int i = -1;
+volatile long double ld;
+int main ()
+{
+  ld += i * 1.0L;
+  if (ld > 0)
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_itold_works=yes],
+        [gl_cv_func_itold_works=no],
+        [case "$host" in
+           sparc*-*-linux*)
+             AC_COMPILE_IFELSE(
+               [AC_LANG_SOURCE(
+                 [[#if defined __LP64__ || defined __arch64__
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+                 ]])],
+               [gl_cv_func_itold_works="guessing no"],
+               [gl_cv_func_itold_works="guessing yes"])
+             ;;
+                   # Guess yes on native Windows.
+           mingw*) gl_cv_func_itold_works="guessing yes" ;;
+           *)      gl_cv_func_itold_works="guessing yes" ;;
+         esac
+        ])
+    ])
+  case "$gl_cv_func_itold_works" in
+    *no)
+      REPLACE_ITOLD=1
+      dnl We add the workaround to <float.h> but also to <math.h>,
+      dnl to increase the chances that the fix function gets pulled in.
+      FLOAT_H=float.h
+      ;;
+  esac
+
+  if test -n "$FLOAT_H"; then
+    gl_NEXT_HEADERS([float.h])
+  fi
+  AC_SUBST([FLOAT_H])
+  AM_CONDITIONAL([GL_GENERATE_FLOAT_H], [test -n "$FLOAT_H"])
+  AC_SUBST([REPLACE_ITOLD])
+])
diff --git a/gnulib_m4/fpieee.m4 b/gnulib_m4/fpieee.m4
new file mode 100644 (file)
index 0000000..b58840f
--- /dev/null
@@ -0,0 +1,54 @@
+# fpieee.m4 serial 2  -*- coding: utf-8 -*-
+dnl Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl IEEE 754 standardized three items:
+dnl - The formats of single-float and double-float - nowadays commonly
+dnl   available as 'float' and 'double' in C and C++.
+dnl   No autoconf test needed.
+dnl - The overflow and division by zero behaviour: The result are values
+dnl   '±Inf' and 'NaN', rather than exceptions as it was before.
+dnl   This file provides an autoconf macro for ensuring this behaviour of
+dnl   floating-point operations.
+dnl - A set of conditions (overflow, underflow, inexact, etc.) which can
+dnl   be configured to trigger an exception.
+dnl   This cannot be done in a portable way: it depends on the compiler,
+dnl   libc, kernel, and CPU.  No autoconf macro is provided for this.
+
+dnl Ensure non-trapping behaviour of floating-point overflow and
+dnl floating-point division by zero.
+dnl (For integer overflow, see gcc's -ftrapv option; for integer division by
+dnl zero, see the autoconf macro in intdiv0.m4.)
+
+AC_DEFUN([gl_FP_IEEE],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  # IEEE behaviour is the default on all CPUs except Alpha and SH
+  # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4
+  # and the GCC 4.1.2 manual).
+  case "$host_cpu" in
+    alpha*)
+      # On Alpha systems, a compiler option provides the behaviour.
+      # See the ieee(3) manual page, also available at
+      # <https://backdrift.org/man/tru64/man3/ieee.3.html>
+      if test -n "$GCC"; then
+        # GCC has the option -mieee.
+        # For full IEEE compliance (rarely needed), use option -mieee-with-inexact.
+        CPPFLAGS="$CPPFLAGS -mieee"
+      else
+        # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact.
+        # For full IEEE compliance (rarely needed), use option -ieee_with_inexact.
+        CPPFLAGS="$CPPFLAGS -ieee"
+      fi
+      ;;
+    sh*)
+      if test -n "$GCC"; then
+        # GCC has the option -mieee.
+        CPPFLAGS="$CPPFLAGS -mieee"
+      fi
+      ;;
+  esac
+])
diff --git a/gnulib_m4/fprintf-posix.m4 b/gnulib_m4/fprintf-posix.m4
new file mode 100644 (file)
index 0000000..b865a7c
--- /dev/null
@@ -0,0 +1,110 @@
+# fprintf-posix.m4 serial 14
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FPRINTF_POSIX],
+[
+  AC_REQUIRE([gl_PRINTF_SIZES_C99])
+  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_INFINITE])
+  AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_N])
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
+  AC_REQUIRE([gl_PRINTF_POSITIONS])
+  AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
+  AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
+  AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+  AC_REQUIRE([gl_PRINTF_PRECISION])
+  AC_REQUIRE([gl_PRINTF_ENOMEM])
+  gl_cv_func_fprintf_posix=no
+  case "$gl_cv_func_printf_sizes_c99" in
+    *yes)
+      case "$gl_cv_func_printf_long_double" in
+        *yes)
+          case "$gl_cv_func_printf_infinite" in
+            *yes)
+              case "$gl_cv_func_printf_infinite_long_double" in
+                *yes)
+                  case "$gl_cv_func_printf_directive_a" in
+                    *yes)
+                      case "$gl_cv_func_printf_directive_f" in
+                        *yes)
+                          case "$gl_cv_func_printf_directive_n" in
+                            *yes)
+                              case "$gl_cv_func_printf_directive_ls" in
+                                *yes)
+                                  case "$gl_cv_func_printf_positions" in
+                                    *yes)
+                                      case "$gl_cv_func_printf_flag_grouping" in
+                                        *yes)
+                                          case "$gl_cv_func_printf_flag_leftadjust" in
+                                            *yes)
+                                              case "$gl_cv_func_printf_flag_zero" in
+                                                *yes)
+                                                  case "$gl_cv_func_printf_precision" in
+                                                    *yes)
+                                                      case "$gl_cv_func_printf_enomem" in
+                                                        *yes)
+                                                          # fprintf exists and is
+                                                          # already POSIX compliant.
+                                                          gl_cv_func_fprintf_posix=yes
+                                                          ;;
+                                                      esac
+                                                      ;;
+                                                  esac
+                                                  ;;
+                                              esac
+                                              ;;
+                                          esac
+                                          ;;
+                                      esac
+                                      ;;
+                                  esac
+                                  ;;
+                              esac
+                              ;;
+                          esac
+                          ;;
+                      esac
+                      ;;
+                  esac
+                  ;;
+              esac
+              ;;
+          esac
+          ;;
+      esac
+      ;;
+  esac
+  if test $gl_cv_func_fprintf_posix = no; then
+    gl_PREREQ_VASNPRINTF_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
+    gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_A
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_F
+    gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
+    gl_PREREQ_VASNPRINTF_FLAG_GROUPING
+    gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
+    gl_PREREQ_VASNPRINTF_FLAG_ZERO
+    gl_PREREQ_VASNPRINTF_PRECISION
+    gl_PREREQ_VASNPRINTF_ENOMEM
+    gl_REPLACE_VASNPRINTF
+    gl_REPLACE_FPRINTF
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_FPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_LIBOBJ([fprintf])
+  REPLACE_FPRINTF=1
+  AC_DEFINE([REPLACE_FPRINTF_POSIX], [1],
+    [Define if fprintf is overridden by a POSIX compliant gnulib implementation.])
+  gl_PREREQ_FPRINTF
+])
+
+AC_DEFUN([gl_PREREQ_FPRINTF], [:])
diff --git a/gnulib_m4/frexp.m4 b/gnulib_m4/frexp.m4
new file mode 100644 (file)
index 0000000..33e07f5
--- /dev/null
@@ -0,0 +1,181 @@
+# frexp.m4 serial 16
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FREXP],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM])
+  FREXP_LIBM=
+  if test $gl_cv_func_frexp_no_libm = no; then
+    AC_CACHE_CHECK([whether frexp() can be used with libm],
+      [gl_cv_func_frexp_in_libm],
+      [
+        save_LIBS="$LIBS"
+        LIBS="$LIBS -lm"
+        AC_LINK_IFELSE(
+          [AC_LANG_PROGRAM(
+             [[#include <math.h>
+               double x;]],
+             [[int e; return frexp (x, &e) > 0;]])],
+          [gl_cv_func_frexp_in_libm=yes],
+          [gl_cv_func_frexp_in_libm=no])
+        LIBS="$save_LIBS"
+      ])
+    if test $gl_cv_func_frexp_in_libm = yes; then
+      FREXP_LIBM=-lm
+    fi
+  fi
+  if test $gl_cv_func_frexp_no_libm = yes \
+     || test $gl_cv_func_frexp_in_libm = yes; then
+    save_LIBS="$LIBS"
+    LIBS="$LIBS $FREXP_LIBM"
+    gl_FUNC_FREXP_WORKS
+    LIBS="$save_LIBS"
+    case "$gl_cv_func_frexp_works" in
+      *yes) gl_func_frexp=yes ;;
+      *)    gl_func_frexp=no; REPLACE_FREXP=1; FREXP_LIBM= ;;
+    esac
+  else
+    gl_func_frexp=no
+  fi
+  if test $gl_func_frexp = yes; then
+    AC_DEFINE([HAVE_FREXP], [1],
+      [Define if the frexp() function is available and works.])
+  fi
+  AC_SUBST([FREXP_LIBM])
+])
+
+AC_DEFUN([gl_FUNC_FREXP_NO_LIBM],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM])
+  if test $gl_cv_func_frexp_no_libm = yes; then
+    gl_FUNC_FREXP_WORKS
+    case "$gl_cv_func_frexp_works" in
+      *yes) gl_func_frexp_no_libm=yes ;;
+      *)    gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;;
+    esac
+  else
+    gl_func_frexp_no_libm=no
+    dnl Set REPLACE_FREXP here because the system may have frexp in libm.
+    REPLACE_FREXP=1
+  fi
+  if test $gl_func_frexp_no_libm = yes; then
+    AC_DEFINE([HAVE_FREXP_IN_LIBC], [1],
+      [Define if the frexp() function is available in libc.])
+  fi
+])
+
+dnl Test whether frexp() can be used without linking with libm.
+dnl Set gl_cv_func_frexp_no_libm to 'yes' or 'no' accordingly.
+AC_DEFUN([gl_CHECK_FREXP_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether frexp() can be used without linking with libm],
+    [gl_cv_func_frexp_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             double x;]],
+           [[int e; return frexp (x, &e) > 0;]])],
+        [gl_cv_func_frexp_no_libm=yes],
+        [gl_cv_func_frexp_no_libm=no])
+    ])
+])
+
+dnl Test whether frexp() works also on denormalized numbers (this fails e.g. on
+dnl NetBSD 3.0), on infinite numbers (this fails e.g. on IRIX 6.5 and mingw),
+dnl and on negative zero (this fails e.g. on NetBSD 4.99 and mingw).
+AC_DEFUN([gl_FUNC_FREXP_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CHECK_DECLS_ONCE([alarm])
+  AC_CACHE_CHECK([whether frexp works], [gl_cv_func_frexp_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <math.h>
+#include <string.h>
+#if HAVE_DECL_ALARM
+# include <signal.h>
+# include <unistd.h>
+#endif
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   ICC 10.0 has a bug when optimizing the expression -zero.
+   The expression -DBL_MIN * DBL_MIN does not work when cross-compiling
+   to PowerPC on Mac OS X 10.5.  */
+#if defined __hpux || defined __sgi || defined __ICC
+static double
+compute_minus_zero (void)
+{
+  return -DBL_MIN * DBL_MIN;
+}
+# define minus_zero compute_minus_zero ()
+#else
+double minus_zero = -0.0;
+#endif
+int main()
+{
+  int result = 0;
+  int i;
+  volatile double x;
+  double zero = 0.0;
+#if HAVE_DECL_ALARM
+  /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite
+     number.  Let the test fail in this case.  */
+  signal (SIGALRM, SIG_DFL);
+  alarm (5);
+#endif
+  /* Test on denormalized numbers.  */
+  for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5)
+    ;
+  if (x > 0.0)
+    {
+      int exp;
+      double y = frexp (x, &exp);
+      /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022.
+         On NetBSD: y = 0.75. Correct: y = 0.5.  */
+      if (y != 0.5)
+        result |= 1;
+    }
+  /* Test on infinite numbers.  */
+  x = 1.0 / zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (y != x)
+      result |= 2;
+  }
+  /* Test on negative zero.  */
+  x = minus_zero;
+  {
+    int exp;
+    double y = frexp (x, &exp);
+    if (memcmp (&y, &x, sizeof x))
+      result |= 4;
+  }
+  return result;
+}]])],
+        [gl_cv_func_frexp_works=yes],
+        [gl_cv_func_frexp_works=no],
+        [case "$host_os" in
+           netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;;
+           mingw*) # Guess yes with MSVC, no with mingw.
+             AC_EGREP_CPP([Good], [
+#ifdef _MSC_VER
+ Good
+#endif
+               ],
+               [gl_cv_func_frexp_works="guessing yes"],
+               [gl_cv_func_frexp_works="guessing no"])
+             ;;
+           *) gl_cv_func_frexp_works="guessing yes" ;;
+         esac
+        ])
+    ])
+])
diff --git a/gnulib_m4/frexpl.m4 b/gnulib_m4/frexpl.m4
new file mode 100644 (file)
index 0000000..d7845d1
--- /dev/null
@@ -0,0 +1,231 @@
+# frexpl.m4 serial 21
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FREXPL],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+
+  dnl Persuade glibc <math.h> to declare frexpl().
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  dnl Check whether it's declared.
+  dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>.
+  AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]])
+
+  FREXPL_LIBM=
+  if test $HAVE_DECL_FREXPL = 1; then
+    gl_CHECK_FREXPL_NO_LIBM
+    if test $gl_cv_func_frexpl_no_libm = no; then
+      AC_CACHE_CHECK([whether frexpl() can be used with libm],
+        [gl_cv_func_frexpl_in_libm],
+        [
+          save_LIBS="$LIBS"
+          LIBS="$LIBS -lm"
+          AC_LINK_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[#include <math.h>
+                 long double x;]],
+               [[int e; return frexpl (x, &e) > 0;]])],
+            [gl_cv_func_frexpl_in_libm=yes],
+            [gl_cv_func_frexpl_in_libm=no])
+          LIBS="$save_LIBS"
+        ])
+      if test $gl_cv_func_frexpl_in_libm = yes; then
+        FREXPL_LIBM=-lm
+      fi
+    fi
+    if test $gl_cv_func_frexpl_no_libm = yes \
+       || test $gl_cv_func_frexpl_in_libm = yes; then
+      save_LIBS="$LIBS"
+      LIBS="$LIBS $FREXPL_LIBM"
+      gl_FUNC_FREXPL_WORKS
+      LIBS="$save_LIBS"
+      case "$gl_cv_func_frexpl_works" in
+        *yes) gl_func_frexpl=yes ;;
+        *)    gl_func_frexpl=no; REPLACE_FREXPL=1 ;;
+      esac
+    else
+      gl_func_frexpl=no
+    fi
+    if test $gl_func_frexpl = yes; then
+      AC_DEFINE([HAVE_FREXPL], [1],
+        [Define if the frexpl() function is available.])
+    fi
+  fi
+  if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then
+    dnl Find libraries needed to link lib/frexpl.c.
+    if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
+      AC_REQUIRE([gl_FUNC_FREXP])
+      FREXPL_LIBM="$FREXP_LIBM"
+    else
+      FREXPL_LIBM=
+    fi
+  fi
+  AC_SUBST([FREXPL_LIBM])
+])
+
+AC_DEFUN([gl_FUNC_FREXPL_NO_LIBM],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+  dnl Check whether it's declared.
+  dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>.
+  AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]])
+  if test $HAVE_DECL_FREXPL = 1; then
+    gl_CHECK_FREXPL_NO_LIBM
+    if test $gl_cv_func_frexpl_no_libm = yes; then
+      gl_FUNC_FREXPL_WORKS
+      case "$gl_cv_func_frexpl_works" in
+        *yes) gl_func_frexpl_no_libm=yes ;;
+        *)    gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;;
+      esac
+    else
+      gl_func_frexpl_no_libm=no
+      dnl Set REPLACE_FREXPL here because the system may have frexpl in libm.
+      REPLACE_FREXPL=1
+    fi
+    if test $gl_func_frexpl_no_libm = yes; then
+      AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1],
+        [Define if the frexpl() function is available in libc.])
+    fi
+  fi
+])
+
+dnl Test whether frexpl() can be used without linking with libm.
+dnl Set gl_cv_func_frexpl_no_libm to 'yes' or 'no' accordingly.
+AC_DEFUN([gl_CHECK_FREXPL_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether frexpl() can be used without linking with libm],
+    [gl_cv_func_frexpl_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             long double x;]],
+           [[int e; return frexpl (x, &e) > 0;]])],
+        [gl_cv_func_frexpl_no_libm=yes],
+        [gl_cv_func_frexpl_no_libm=no])
+    ])
+])
+
+dnl Test whether frexpl() works on finite numbers (this fails on
+dnl Mac OS X 10.4/PowerPC, on AIX 5.1, and on BeOS), on denormalized numbers
+dnl (this fails on Mac OS X 10.5/i386), and also on infinite numbers (this
+dnl fails e.g. on IRIX 6.5 and mingw).
+AC_DEFUN([gl_FUNC_FREXPL_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether frexpl works], [gl_cv_func_frexpl_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <math.h>
+/* Override the values of <float.h>, like done in float.in.h.  */
+#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+#endif
+#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP DBL_MIN_EXP
+#endif
+#if defined __sgi && (LDBL_MANT_DIG >= 106)
+# if defined __GNUC__
+#  undef LDBL_MIN_EXP
+#  define LDBL_MIN_EXP DBL_MIN_EXP
+# endif
+#endif
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double frexpl (long double, int *);
+int main()
+{
+  int result = 0;
+  volatile long double x;
+  /* Test on finite numbers that fails on AIX 5.1.  */
+  x = 16.0L;
+  {
+    int exp = -9999;
+    frexpl (x, &exp);
+    if (exp != 5)
+      result |= 1;
+  }
+  /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl
+     function returns an invalid (incorrectly normalized) value: it returns
+               y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 }
+     but the correct result is
+          0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 }  */
+  x = 1.01L;
+  {
+    int exp = -9999;
+    long double y = frexpl (x, &exp);
+    if (!(exp == 1 && y == 0.505L))
+      result |= 2;
+  }
+  /* Test on large finite numbers.  This fails on BeOS at i = 16322, while
+     LDBL_MAX_EXP = 16384.
+     In the loop end test, we test x against Infinity, rather than comparing
+     i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L)
+      {
+        int exp = -9999;
+        frexpl (x, &exp);
+        if (exp != i)
+          {
+            result |= 4;
+            break;
+          }
+      }
+  }
+  /* Test on denormalized numbers.  */
+  {
+    int i;
+    for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L)
+      ;
+    if (x > 0.0L)
+      {
+        int exp;
+        long double y = frexpl (x, &exp);
+        /* On machines with IEEE854 arithmetic: x = 1.68105e-4932,
+           exp = -16382, y = 0.5.  On Mac OS X 10.5: exp = -16384, y = 0.5.  */
+        if (exp != LDBL_MIN_EXP - 1)
+          result |= 8;
+      }
+  }
+  /* Test on infinite numbers.  */
+  x = 1.0L / 0.0L;
+  {
+    int exp;
+    long double y = frexpl (x, &exp);
+    if (y != x)
+      result |= 16;
+  }
+  return result;
+}]])],
+        [gl_cv_func_frexpl_works=yes],
+        [gl_cv_func_frexpl_works=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*)
+              gl_cv_func_frexpl_works="guessing no";;
+           *) gl_cv_func_frexpl_works="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
diff --git a/gnulib_m4/fseterr.m4 b/gnulib_m4/fseterr.m4
new file mode 100644 (file)
index 0000000..ca920c4
--- /dev/null
@@ -0,0 +1,10 @@
+# fseterr.m4 serial 1
+dnl Copyright (C) 2012-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_FSETERR],
+[
+  AC_CHECK_FUNCS_ONCE([__fseterr])
+])
diff --git a/gnulib_m4/gnulib-cache.m4 b/gnulib_m4/gnulib-cache.m4
new file mode 100644 (file)
index 0000000..b9e7622
--- /dev/null
@@ -0,0 +1,70 @@
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#
+# This file 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 3 of the License, or
+# (at your option) any later version.
+#
+# This file 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 file.  If not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+#
+# This file represents the specification of how gnulib-tool is used.
+# It acts as a cache: It is written and read by gnulib-tool.
+# In projects that use version control, this file is meant to be put under
+# version control, like the configure.ac and various Makefile.am files.
+
+
+# Specification in the form of a command-line invocation:
+# gnulib-tool --import --local-dir=gl \
+#  --lib=libgnu \
+#  --source-base=lib \
+#  --m4-base=gnulib_m4 \
+#  --doc-base=doc \
+#  --tests-base=tests \
+#  --aux-dir=build-aux \
+#  --makefile-name=gnulib.mk \
+#  --no-conditional-dependencies \
+#  --no-libtool \
+#  --macro-prefix=gl \
+#  fprintf-posix \
+#  git-version-gen \
+#  havelib \
+#  non-recursive-gnulib-prefix-hack \
+#  snprintf \
+#  vsnprintf \
+#  wcwidth
+
+# Specification in the form of a few gnulib-tool.m4 macro invocations:
+gl_LOCAL_DIR([gl])
+gl_MODULES([
+  fprintf-posix
+  git-version-gen
+  havelib
+  non-recursive-gnulib-prefix-hack
+  snprintf
+  vsnprintf
+  wcwidth
+])
+gl_AVOID([])
+gl_SOURCE_BASE([lib])
+gl_M4_BASE([gnulib_m4])
+gl_PO_BASE([])
+gl_DOC_BASE([doc])
+gl_TESTS_BASE([tests])
+gl_LIB([libgnu])
+gl_MAKEFILE_NAME([gnulib.mk])
+gl_MACRO_PREFIX([gl])
+gl_PO_DOMAIN([])
+gl_WITNESS_C_MACRO([])
diff --git a/gnulib_m4/gnulib-common.m4 b/gnulib_m4/gnulib-common.m4
new file mode 100644 (file)
index 0000000..5f07855
--- /dev/null
@@ -0,0 +1,474 @@
+# gnulib-common.m4 serial 39
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_COMMON
+# is expanded unconditionally through gnulib-tool magic.
+AC_DEFUN([gl_COMMON], [
+  dnl Use AC_REQUIRE here, so that the code is expanded once only.
+  AC_REQUIRE([gl_00GNULIB])
+  AC_REQUIRE([gl_COMMON_BODY])
+])
+AC_DEFUN([gl_COMMON_BODY], [
+  AH_VERBATIM([_Noreturn],
+[/* The _Noreturn keyword of C11.  */
+#if ! (defined _Noreturn \
+       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+      || 0x5110 <= __SUNPRO_C)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
+])
+  AH_VERBATIM([isoc99_inline],
+[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for Mac OS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif])
+  AH_VERBATIM([unused_parameter],
+[/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+
+/* gcc supports the "unused" attribute on possibly unused labels, and
+   g++ has since version 4.5.  Note to support C++ as well as C,
+   _GL_UNUSED_LABEL should be used with a trailing ;  */
+#if !defined __cplusplus || __GNUC__ > 4 \
+    || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+# define _GL_UNUSED_LABEL _GL_UNUSED
+#else
+# define _GL_UNUSED_LABEL
+#endif
+
+/* The __pure__ attribute was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The __const__ attribute was added in gcc 2.95.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
+/* The __malloc__ attribute was added in gcc 3.  */
+#if 3 <= __GNUC__
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+#else
+# define _GL_ATTRIBUTE_MALLOC /* empty */
+#endif
+])
+  dnl Preparation for running test programs:
+  dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not
+  dnl to /dev/tty, so they can be redirected to log files.  Such diagnostics
+  dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N.
+  LIBC_FATAL_STDERR_=1
+  export LIBC_FATAL_STDERR_
+])
+
+# gl_MODULE_INDICATOR_CONDITION
+# expands to a C preprocessor expression that evaluates to 1 or 0, depending
+# whether a gnulib module that has been requested shall be considered present
+# or not.
+m4_define([gl_MODULE_INDICATOR_CONDITION], [1])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE([modulename])
+# sets the shell variable that indicates the presence of the given module to
+# a C preprocessor expression that will evaluate to 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE],
+[
+  gl_MODULE_INDICATOR_SET_VARIABLE_AUX(
+    [GNULIB_[]m4_translit([[$1]],
+                          [abcdefghijklmnopqrstuvwxyz./-],
+                          [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])],
+    [gl_MODULE_INDICATOR_CONDITION])
+])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable])
+# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION.
+# The shell variable's value is a C preprocessor expression that evaluates
+# to 0 or 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX],
+[
+  m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1],
+    [
+     dnl Simplify the expression VALUE || 1 to 1.
+     $1=1
+    ],
+    [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1],
+                                             [gl_MODULE_INDICATOR_CONDITION])])
+])
+
+# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition])
+# modifies the shell variable to include the given condition.  The shell
+# variable's value is a C preprocessor expression that evaluates to 0 or 1.
+AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR],
+[
+  dnl Simplify the expression 1 || CONDITION to 1.
+  if test "$[]$1" != 1; then
+    dnl Simplify the expression 0 || CONDITION to CONDITION.
+    if test "$[]$1" = 0; then
+      $1=$2
+    else
+      $1="($[]$1 || $2)"
+    fi
+  fi
+])
+
+# gl_MODULE_INDICATOR([modulename])
+# defines a C macro indicating the presence of the given module
+# in a location where it can be used.
+#                                             |  Value  |   Value   |
+#                                             | in lib/ | in tests/ |
+# --------------------------------------------+---------+-----------+
+# Module present among main modules:          |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module present among tests-related modules: |    0    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module not present at all:                  |    0    |     0     |
+# --------------------------------------------+---------+-----------+
+AC_DEFUN([gl_MODULE_INDICATOR],
+[
+  AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]],
+      [abcdefghijklmnopqrstuvwxyz./-],
+      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]),
+    [gl_MODULE_INDICATOR_CONDITION],
+    [Define to a C preprocessor expression that evaluates to 1 or 0,
+     depending whether the gnulib module $1 shall be considered present.])
+])
+
+# gl_MODULE_INDICATOR_FOR_TESTS([modulename])
+# defines a C macro indicating the presence of the given module
+# in lib or tests. This is useful to determine whether the module
+# should be tested.
+#                                             |  Value  |   Value   |
+#                                             | in lib/ | in tests/ |
+# --------------------------------------------+---------+-----------+
+# Module present among main modules:          |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module present among tests-related modules: |    1    |     1     |
+# --------------------------------------------+---------+-----------+
+# Module not present at all:                  |    0    |     0     |
+# --------------------------------------------+---------+-----------+
+AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS],
+[
+  AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]],
+      [abcdefghijklmnopqrstuvwxyz./-],
+      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
+    [Define to 1 when the gnulib module $1 should be tested.])
+])
+
+# gl_ASSERT_NO_GNULIB_POSIXCHECK
+# asserts that there will never be a need to #define GNULIB_POSIXCHECK.
+# and thereby enables an optimization of configure and config.h.
+# Used by Emacs.
+AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK],
+[
+  dnl Override gl_WARN_ON_USE_PREPARE.
+  dnl But hide this definition from 'aclocal'.
+  AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], [])
+])
+
+# gl_ASSERT_NO_GNULIB_TESTS
+# asserts that there will be no gnulib tests in the scope of the configure.ac
+# and thereby enables an optimization of config.h.
+# Used by Emacs.
+AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS],
+[
+  dnl Override gl_MODULE_INDICATOR_FOR_TESTS.
+  AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [])
+])
+
+# Test whether <features.h> exists.
+# Set HAVE_FEATURES_H.
+AC_DEFUN([gl_FEATURES_H],
+[
+  AC_CHECK_HEADERS_ONCE([features.h])
+  if test $ac_cv_header_features_h = yes; then
+    HAVE_FEATURES_H=1
+  else
+    HAVE_FEATURES_H=0
+  fi
+  AC_SUBST([HAVE_FEATURES_H])
+])
+
+# m4_foreach_w
+# is a backport of autoconf-2.59c's m4_foreach_w.
+# Remove this macro when we can assume autoconf >= 2.60.
+m4_ifndef([m4_foreach_w],
+  [m4_define([m4_foreach_w],
+    [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
+
+# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH])
+# ----------------------------------------------------
+# Backport of autoconf-2.63b's macro.
+# Remove this macro when we can assume autoconf >= 2.64.
+m4_ifndef([AS_VAR_IF],
+[m4_define([AS_VAR_IF],
+[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])])
+
+# gl_PROG_CC_C99
+# Modifies the value of the shell variable CC in an attempt to make $CC
+# understand ISO C99 source code.
+# This is like AC_PROG_CC_C99, except that
+# - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60,
+# - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC
+#   <https://lists.gnu.org/r/bug-gnulib/2011-09/msg00367.html>,
+#   but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99
+#   <https://lists.gnu.org/r/bug-gnulib/2011-09/msg00441.html>.
+# Remaining problems:
+# - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options
+#   to CC twice
+#   <https://lists.gnu.org/r/bug-gnulib/2011-09/msg00431.html>.
+# - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard.
+AC_DEFUN([gl_PROG_CC_C99],
+[
+  dnl Change that version number to the minimum Autoconf version that supports
+  dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls.
+  m4_version_prereq([9.0],
+    [AC_REQUIRE([AC_PROG_CC_C99])],
+    [AC_REQUIRE([AC_PROG_CC_STDC])])
+])
+
+# gl_PROG_AR_RANLIB
+# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler.
+# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override
+# the values.
+AC_DEFUN([gl_PROG_AR_RANLIB],
+[
+  dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler
+  dnl as "cc", and GCC as "gcc". They have different object file formats and
+  dnl library formats. In particular, the GNU binutils programs ar and ranlib
+  dnl produce libraries that work only with gcc, not with cc.
+  AC_REQUIRE([AC_PROG_CC])
+  dnl The '][' hides this use from 'aclocal'.
+  AC_BEFORE([$0], [A][M_PROG_AR])
+  AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler],
+    [
+      AC_EGREP_CPP([Amsterdam],
+        [
+#ifdef __ACK__
+Amsterdam
+#endif
+        ],
+        [gl_cv_c_amsterdam_compiler=yes],
+        [gl_cv_c_amsterdam_compiler=no])
+    ])
+
+  dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not
+  dnl building with __ACK__.
+  if test $gl_cv_c_amsterdam_compiler = yes; then
+    if test -z "$AR"; then
+      AR='cc -c.a'
+    fi
+    if test -z "$ARFLAGS"; then
+      ARFLAGS='-o'
+    fi
+  else
+    dnl AM_PROG_AR was added in automake v1.11.2.  AM_PROG_AR does not AC_SUBST
+    dnl ARFLAGS variable (it is filed into Makefile.in directly by automake
+    dnl script on-demand, if not specified by ./configure of course).
+    dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above
+    dnl will be ignored.  Also, pay attention to call AM_PROG_AR in else block
+    dnl because AM_PROG_AR is written so it could re-set AR variable even for
+    dnl __ACK__.  It may seem like its easier to avoid calling the macro here,
+    dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good
+    dnl default value and automake should usually know them).
+    dnl
+    dnl The '][' hides this use from 'aclocal'.
+    m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:])
+  fi
+
+  dnl In case the code above has not helped with setting AR/ARFLAGS, use
+  dnl Automake-documented default values for AR and ARFLAGS, but prefer
+  dnl ${host}-ar over ar (useful for cross-compiling).
+  AC_CHECK_TOOL([AR], [ar], [ar])
+  if test -z "$ARFLAGS"; then
+    ARFLAGS='cr'
+  fi
+
+  AC_SUBST([AR])
+  AC_SUBST([ARFLAGS])
+  if test -z "$RANLIB"; then
+    if test $gl_cv_c_amsterdam_compiler = yes; then
+      RANLIB=':'
+    else
+      dnl Use the ranlib program if it is available.
+      AC_PROG_RANLIB
+    fi
+  fi
+  AC_SUBST([RANLIB])
+])
+
+# AC_PROG_MKDIR_P
+# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix
+# for interoperability with automake-1.9.6 from autoconf-2.62.
+# Remove this macro when we can assume autoconf >= 2.62 or
+# autoconf >= 2.60 && automake >= 1.10.
+# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness.
+m4_ifndef([AC_AUTOCONF_VERSION],[
+m4_ifdef([AC_PROG_MKDIR_P], [
+  dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed.
+  m4_define([AC_PROG_MKDIR_P],
+    m4_defn([AC_PROG_MKDIR_P])[
+    AC_SUBST([MKDIR_P])])], [
+  dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P.
+  AC_DEFUN_ONCE([AC_PROG_MKDIR_P],
+    [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
+     MKDIR_P='$(mkdir_p)'
+     AC_SUBST([MKDIR_P])])])
+])
+
+# AC_C_RESTRICT
+# This definition is copied from post-2.69 Autoconf and overrides the
+# AC_C_RESTRICT macro from autoconf 2.60..2.69.  It can be removed
+# once autoconf >= 2.70 can be assumed.  It's painful to check version
+# numbers, and in practice this macro is more up-to-date than Autoconf
+# is, so override Autoconf unconditionally.
+AC_DEFUN([AC_C_RESTRICT],
+[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict],
+  [ac_cv_c_restrict=no
+   # The order here caters to the fact that C++ does not require restrict.
+   for ac_kw in __restrict __restrict__ _Restrict restrict; do
+     AC_COMPILE_IFELSE(
+      [AC_LANG_PROGRAM(
+         [[typedef int *int_ptr;
+           int foo (int_ptr $ac_kw ip) { return ip[0]; }
+           int bar (int [$ac_kw]); /* Catch GCC bug 14050.  */
+           int bar (int ip[$ac_kw]) { return ip[0]; }
+         ]],
+         [[int s[1];
+           int *$ac_kw t = s;
+           t[0] = 0;
+           return foo (t) + bar (t);
+         ]])],
+      [ac_cv_c_restrict=$ac_kw])
+     test "$ac_cv_c_restrict" != no && break
+   done
+  ])
+ AH_VERBATIM([restrict],
+[/* Define to the equivalent of the C99 'restrict' keyword, or to
+   nothing if this is not supported.  Do not define if restrict is
+   supported directly.  */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif])
+ case $ac_cv_c_restrict in
+   restrict) ;;
+   no) AC_DEFINE([restrict], []) ;;
+   *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
+ esac
+])# AC_C_RESTRICT
+
+# gl_BIGENDIAN
+# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd.
+# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some
+# macros invoke AC_C_BIGENDIAN with arguments.
+AC_DEFUN([gl_BIGENDIAN],
+[
+  AC_C_BIGENDIAN
+])
+
+# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it)
+# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not
+# output a spurious "(cached)" mark in the midst of other configure output.
+# This macro should be used instead of AC_CACHE_VAL when it is not surrounded
+# by an AC_MSG_CHECKING/AC_MSG_RESULT pair.
+AC_DEFUN([gl_CACHE_VAL_SILENT],
+[
+  saved_as_echo_n="$as_echo_n"
+  as_echo_n=':'
+  AC_CACHE_VAL([$1], [$2])
+  as_echo_n="$saved_as_echo_n"
+])
+
+# AS_VAR_COPY was added in autoconf 2.63b
+m4_define_default([AS_VAR_COPY],
+[AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])])
+
+# AC_PROG_SED was added in autoconf 2.59b
+m4_ifndef([AC_PROG_SED],
+[AC_DEFUN([AC_PROG_SED],
+[AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED,
+    [dnl ac_script should not contain more than 99 commands (for HP-UX sed),
+     dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed.
+     ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/
+     for ac_i in 1 2 3 4 5 6 7; do
+       ac_script="$ac_script$as_nl$ac_script"
+     done
+     echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed
+     AS_UNSET([ac_script])
+     if test -z "$SED"; then
+       ac_path_SED_found=false
+       _AS_PATH_WALK([], [
+         for ac_prog in sed gsed; do
+           for ac_exec_ext in '' $ac_executable_extensions; do
+             ac_path_SED="$as_dir/$ac_prog$ac_exec_ext"
+             AS_EXECUTABLE_P(["$ac_path_SED"]) || continue
+             case `"$ac_path_SED" --version 2>&1` in
+               *GNU*) ac_cv_path_SED=$ac_path_SED ac_path_SED_found=:;;
+               *)
+                 ac_count=0
+                 _AS_ECHO_N([0123456789]) >conftest.in
+                 while :
+                 do
+                   cat conftest.in conftest.in >conftest.tmp
+                   mv conftest.tmp conftest.in
+                   cp conftest.in conftest.nl
+                   echo >> conftest.nl
+                   "$ac_path_SED" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break
+                   diff conftest.out conftest.nl >/dev/null 2>&1 || break
+                   ac_count=`expr $ac_count + 1`
+                   if test $ac_count -gt ${ac_path_SED_max-0}; then
+                     # Best so far, but keep looking for better
+                     ac_cv_path_SED=$ac_path_SED
+                     ac_path_SED_max=$ac_count
+                   fi
+                   test $ac_count -gt 10 && break
+                 done
+                 rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
+             esac
+             $ac_path_SED_found && break 3
+           done
+         done])
+       if test -z "$ac_cv_path_SED"; then
+         AC_ERROR([no acceptable sed could be found in \$PATH])
+       fi
+     else
+       ac_cv_path_SED=$SED
+     fi
+    ])
+ SED="$ac_cv_path_SED"
+ AC_SUBST([SED])dnl
+ rm -f conftest.sed
+])
+])
diff --git a/gnulib_m4/gnulib-comp.m4 b/gnulib_m4/gnulib-comp.m4
new file mode 100644 (file)
index 0000000..6797461
--- /dev/null
@@ -0,0 +1,485 @@
+# DO NOT EDIT! GENERATED AUTOMATICALLY!
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#
+# This file 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 3 of the License, or
+# (at your option) any later version.
+#
+# This file 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 file.  If not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+#
+# This file represents the compiled summary of the specification in
+# gnulib-cache.m4. It lists the computed macro invocations that need
+# to be invoked from configure.ac.
+# In projects that use version control, this file can be treated like
+# other built files.
+
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Checks for programs", right after AC_PROG_CC, and certainly before
+# any checks for libraries, header files, types and library functions.
+AC_DEFUN([gl_EARLY],
+[
+  m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
+  m4_pattern_allow([^gl_ES$])dnl a valid locale name
+  m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
+  m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
+
+  # Pre-early section.
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+  AC_REQUIRE([gl_PROG_AR_RANLIB])
+
+  AC_REQUIRE([AM_PROG_CC_C_O])
+  # Code from module absolute-header:
+  # Code from module alloca-opt:
+  # Code from module errno:
+  # Code from module extensions:
+  # Code from module extern-inline:
+  # Code from module float:
+  # Code from module fpieee:
+  AC_REQUIRE([gl_FP_IEEE])
+  # Code from module fprintf-posix:
+  # Code from module fpucw:
+  # Code from module frexp-nolibm:
+  # Code from module frexpl-nolibm:
+  # Code from module fseterr:
+  # Code from module git-version-gen:
+  # Code from module havelib:
+  # Code from module host-cpu-c-abi:
+  # Code from module include_next:
+  # Code from module isnand-nolibm:
+  # Code from module isnanf-nolibm:
+  # Code from module isnanl-nolibm:
+  # Code from module limits-h:
+  # Code from module localcharset:
+  # Code from module math:
+  # Code from module memchr:
+  # Code from module multiarch:
+  # Code from module nocrash:
+  # Code from module non-recursive-gnulib-prefix-hack:
+  # Code from module printf-frexp:
+  # Code from module printf-frexpl:
+  # Code from module printf-safe:
+  # Code from module signbit:
+  # Code from module size_max:
+  # Code from module snippet/arg-nonnull:
+  # Code from module snippet/c++defs:
+  # Code from module snippet/warn-on-use:
+  # Code from module snprintf:
+  # Code from module ssize_t:
+  # Code from module stddef:
+  # Code from module stdint:
+  # Code from module stdio:
+  # Code from module streq:
+  # Code from module string:
+  # Code from module sys_types:
+  # Code from module unitypes:
+  # Code from module uniwidth/base:
+  # Code from module uniwidth/width:
+  # Code from module vasnprintf:
+  # Code from module verify:
+  # Code from module vsnprintf:
+  # Code from module wchar:
+  # Code from module wctype-h:
+  # Code from module wcwidth:
+  # Code from module xsize:
+])
+
+# This macro should be invoked from ./configure.ac, in the section
+# "Check for header files, types and library functions".
+AC_DEFUN([gl_INIT],
+[
+  AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
+  gl_cond_libtool=false
+  gl_libdeps=
+  gl_ltlibdeps=
+  gl_m4_base='gnulib_m4'
+  m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
+  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
+  m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
+  m4_pushdef([gl_LIBSOURCES_LIST], [])
+  m4_pushdef([gl_LIBSOURCES_DIR], [])
+  gl_COMMON
+  gl_source_base='lib'
+  gl_FUNC_ALLOCA
+  gl_HEADER_ERRNO_H
+  AC_REQUIRE([gl_EXTERN_INLINE])
+  gl_FLOAT_H
+  if test $REPLACE_FLOAT_LDBL = 1; then
+    AC_LIBOBJ([float])
+  fi
+  if test $REPLACE_ITOLD = 1; then
+    AC_LIBOBJ([itold])
+  fi
+  gl_FUNC_FPRINTF_POSIX
+  gl_STDIO_MODULE_INDICATOR([fprintf-posix])
+  gl_FUNC_FREXP_NO_LIBM
+  if test $gl_func_frexp_no_libm != yes; then
+    AC_LIBOBJ([frexp])
+  fi
+  gl_MATH_MODULE_INDICATOR([frexp])
+  gl_FUNC_FREXPL_NO_LIBM
+  if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; then
+    AC_LIBOBJ([frexpl])
+  fi
+  gl_MATH_MODULE_INDICATOR([frexpl])
+  gl_FUNC_FSETERR
+  if test $ac_cv_func___fseterr = no; then
+    AC_LIBOBJ([fseterr])
+  fi
+  AC_REQUIRE([gl_HOST_CPU_C_ABI])
+  gl_FUNC_ISNAND_NO_LIBM
+  if test $gl_func_isnand_no_libm != yes; then
+    AC_LIBOBJ([isnand])
+    gl_PREREQ_ISNAND
+  fi
+  gl_FUNC_ISNANF_NO_LIBM
+  if test $gl_func_isnanf_no_libm != yes; then
+    AC_LIBOBJ([isnanf])
+    gl_PREREQ_ISNANF
+  fi
+  gl_FUNC_ISNANL_NO_LIBM
+  if test $gl_func_isnanl_no_libm != yes; then
+    AC_LIBOBJ([isnanl])
+    gl_PREREQ_ISNANL
+  fi
+  gl_LIMITS_H
+  gl_LOCALCHARSET
+  dnl For backward compatibility. Some packages still use this.
+  LOCALCHARSET_TESTS_ENVIRONMENT=
+  AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
+  gl_MATH_H
+  gl_FUNC_MEMCHR
+  if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then
+    AC_LIBOBJ([memchr])
+    gl_PREREQ_MEMCHR
+  fi
+  gl_STRING_MODULE_INDICATOR([memchr])
+  gl_MULTIARCH
+  dnl Run our hack near the end, just before config.status creation.
+  dnl It must happen late, i.e., after gl_LIBOBJS has been finalized.
+  AC_CONFIG_COMMANDS_PRE([
+    dnl Note we can't currently pass $gl_source_base instead of 'lib',
+    dnl because $gl_source_base is unset or the wrong value in the references
+    dnl generated in m4/non-recursive-gnulib-prefix-hack.m4
+    gl_NON_RECURSIVE_GNULIB_PREFIX_HACK([lib])
+    ])
+  gl_FUNC_PRINTF_FREXP
+  gl_FUNC_PRINTF_FREXPL
+  m4_divert_text([INIT_PREPARE], [gl_printf_safe=yes])
+  gl_SIGNBIT
+  if test $REPLACE_SIGNBIT = 1; then
+    AC_LIBOBJ([signbitf])
+    AC_LIBOBJ([signbitd])
+    AC_LIBOBJ([signbitl])
+  fi
+  gl_MATH_MODULE_INDICATOR([signbit])
+  gl_SIZE_MAX
+  gl_FUNC_SNPRINTF
+  gl_STDIO_MODULE_INDICATOR([snprintf])
+  gl_MODULE_INDICATOR([snprintf])
+  gt_TYPE_SSIZE_T
+  gl_STDDEF_H
+  gl_STDINT_H
+  gl_STDIO_H
+  gl_HEADER_STRING_H
+  gl_SYS_TYPES_H
+  AC_PROG_MKDIR_P
+  gl_LIBUNISTRING_LIBHEADER([0.9.4], [unitypes.h])
+  gl_LIBUNISTRING_LIBHEADER([0.9.4], [uniwidth.h])
+  gl_LIBUNISTRING_MODULE([0.9.8], [uniwidth/width])
+  gl_FUNC_VASNPRINTF
+  gl_FUNC_VSNPRINTF
+  gl_STDIO_MODULE_INDICATOR([vsnprintf])
+  gl_WCHAR_H
+  gl_WCTYPE_H
+  gl_FUNC_WCWIDTH
+  if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then
+    AC_LIBOBJ([wcwidth])
+    gl_PREREQ_WCWIDTH
+  fi
+  gl_WCHAR_MODULE_INDICATOR([wcwidth])
+  gl_XSIZE
+  # End of code from modules
+  m4_ifval(gl_LIBSOURCES_LIST, [
+    m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
+      for gl_file in ]gl_LIBSOURCES_LIST[ ; do
+        if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
+          echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
+          exit 1
+        fi
+      done])dnl
+      m4_if(m4_sysval, [0], [],
+        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+  ])
+  m4_popdef([gl_LIBSOURCES_DIR])
+  m4_popdef([gl_LIBSOURCES_LIST])
+  m4_popdef([AC_LIBSOURCES])
+  m4_popdef([AC_REPLACE_FUNCS])
+  m4_popdef([AC_LIBOBJ])
+  AC_CONFIG_COMMANDS_PRE([
+    gl_libobjs=
+    gl_ltlibobjs=
+    if test -n "$gl_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gl_libobjs="$gl_libobjs $i.$ac_objext"
+        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
+      done
+    fi
+    AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
+    AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
+  ])
+  gltests_libdeps=
+  gltests_ltlibdeps=
+  m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
+  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
+  m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
+  m4_pushdef([gltests_LIBSOURCES_LIST], [])
+  m4_pushdef([gltests_LIBSOURCES_DIR], [])
+  gl_COMMON
+  gl_source_base='tests'
+changequote(,)dnl
+  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
+changequote([, ])dnl
+  AC_SUBST([gltests_WITNESS])
+  gl_module_indicator_condition=$gltests_WITNESS
+  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
+  m4_popdef([gl_MODULE_INDICATOR_CONDITION])
+  m4_ifval(gltests_LIBSOURCES_LIST, [
+    m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
+      for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
+        if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
+          echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
+          exit 1
+        fi
+      done])dnl
+      m4_if(m4_sysval, [0], [],
+        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
+  ])
+  m4_popdef([gltests_LIBSOURCES_DIR])
+  m4_popdef([gltests_LIBSOURCES_LIST])
+  m4_popdef([AC_LIBSOURCES])
+  m4_popdef([AC_REPLACE_FUNCS])
+  m4_popdef([AC_LIBOBJ])
+  AC_CONFIG_COMMANDS_PRE([
+    gltests_libobjs=
+    gltests_ltlibobjs=
+    if test -n "$gltests_LIBOBJS"; then
+      # Remove the extension.
+      sed_drop_objext='s/\.o$//;s/\.obj$//'
+      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
+        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
+        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
+      done
+    fi
+    AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
+    AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
+  ])
+  LIBGNU_LIBDEPS="$gl_libdeps"
+  AC_SUBST([LIBGNU_LIBDEPS])
+  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
+  AC_SUBST([LIBGNU_LTLIBDEPS])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into gl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gl_LIBOBJ], [
+  AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
+  gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into gl_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gl_REPLACE_FUNCS], [
+  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+  AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([gl_LIBSOURCES], [
+  m4_foreach([_gl_NAME], [$1], [
+    m4_if(_gl_NAME, [alloca.c], [], [
+      m4_define([gl_LIBSOURCES_DIR], [lib])
+      m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
+    ])
+  ])
+])
+
+# Like AC_LIBOBJ, except that the module name goes
+# into gltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gltests_LIBOBJ], [
+  AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
+  gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
+])
+
+# Like AC_REPLACE_FUNCS, except that the module name goes
+# into gltests_LIBOBJS instead of into LIBOBJS.
+AC_DEFUN([gltests_REPLACE_FUNCS], [
+  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
+  AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
+])
+
+# Like AC_LIBSOURCES, except the directory where the source file is
+# expected is derived from the gnulib-tool parameterization,
+# and alloca is special cased (for the alloca-opt module).
+# We could also entirely rely on EXTRA_lib..._SOURCES.
+AC_DEFUN([gltests_LIBSOURCES], [
+  m4_foreach([_gl_NAME], [$1], [
+    m4_if(_gl_NAME, [alloca.c], [], [
+      m4_define([gltests_LIBSOURCES_DIR], [tests])
+      m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
+    ])
+  ])
+])
+
+# This macro records the list of files which have been installed by
+# gnulib-tool and may be removed by future gnulib-tool invocations.
+AC_DEFUN([gl_FILE_LIST], [
+  build-aux/config.rpath
+  build-aux/git-version-gen
+  build-aux/prefix-gnulib-mk
+  lib/alloca.in.h
+  lib/arg-nonnull.h
+  lib/asnprintf.c
+  lib/c++defs.h
+  lib/errno.in.h
+  lib/float+.h
+  lib/float.c
+  lib/float.in.h
+  lib/fprintf.c
+  lib/fpucw.h
+  lib/frexp.c
+  lib/frexpl.c
+  lib/fseterr.c
+  lib/fseterr.h
+  lib/isnan.c
+  lib/isnand-nolibm.h
+  lib/isnand.c
+  lib/isnanf-nolibm.h
+  lib/isnanf.c
+  lib/isnanl-nolibm.h
+  lib/isnanl.c
+  lib/itold.c
+  lib/limits.in.h
+  lib/localcharset.c
+  lib/localcharset.h
+  lib/math.c
+  lib/math.in.h
+  lib/memchr.c
+  lib/memchr.valgrind
+  lib/printf-args.c
+  lib/printf-args.h
+  lib/printf-frexp.c
+  lib/printf-frexp.h
+  lib/printf-frexpl.c
+  lib/printf-frexpl.h
+  lib/printf-parse.c
+  lib/printf-parse.h
+  lib/signbitd.c
+  lib/signbitf.c
+  lib/signbitl.c
+  lib/size_max.h
+  lib/snprintf.c
+  lib/stddef.in.h
+  lib/stdint.in.h
+  lib/stdio-impl.h
+  lib/stdio.in.h
+  lib/streq.h
+  lib/string.in.h
+  lib/sys_types.in.h
+  lib/unitypes.in.h
+  lib/uniwidth.in.h
+  lib/uniwidth/cjk.h
+  lib/uniwidth/width.c
+  lib/vasnprintf.c
+  lib/vasnprintf.h
+  lib/verify.h
+  lib/vsnprintf.c
+  lib/warn-on-use.h
+  lib/wchar.in.h
+  lib/wctype-h.c
+  lib/wctype.in.h
+  lib/wcwidth.c
+  lib/xsize.c
+  lib/xsize.h
+  m4/00gnulib.m4
+  m4/absolute-header.m4
+  m4/alloca.m4
+  m4/asm-underscore.m4
+  m4/codeset.m4
+  m4/errno_h.m4
+  m4/exponentd.m4
+  m4/exponentf.m4
+  m4/exponentl.m4
+  m4/extensions.m4
+  m4/extern-inline.m4
+  m4/float_h.m4
+  m4/fpieee.m4
+  m4/fprintf-posix.m4
+  m4/frexp.m4
+  m4/frexpl.m4
+  m4/fseterr.m4
+  m4/gnulib-common.m4
+  m4/host-cpu-c-abi.m4
+  m4/include_next.m4
+  m4/intmax_t.m4
+  m4/inttypes_h.m4
+  m4/isnand.m4
+  m4/isnanf.m4
+  m4/isnanl.m4
+  m4/ldexpl.m4
+  m4/lib-ld.m4
+  m4/lib-link.m4
+  m4/lib-prefix.m4
+  m4/libunistring-base.m4
+  m4/limits-h.m4
+  m4/localcharset.m4
+  m4/longlong.m4
+  m4/math_h.m4
+  m4/memchr.m4
+  m4/mmap-anon.m4
+  m4/multiarch.m4
+  m4/nocrash.m4
+  m4/non-recursive-gnulib-prefix-hack.m4
+  m4/off_t.m4
+  m4/printf-frexp.m4
+  m4/printf-frexpl.m4
+  m4/printf.m4
+  m4/signbit.m4
+  m4/size_max.m4
+  m4/snprintf.m4
+  m4/ssize_t.m4
+  m4/stddef_h.m4
+  m4/stdint.m4
+  m4/stdint_h.m4
+  m4/stdio_h.m4
+  m4/string_h.m4
+  m4/sys_types_h.m4
+  m4/vasnprintf.m4
+  m4/vsnprintf.m4
+  m4/warn-on-use.m4
+  m4/wchar_h.m4
+  m4/wchar_t.m4
+  m4/wctype_h.m4
+  m4/wcwidth.m4
+  m4/wint_t.m4
+  m4/xsize.m4
+])
diff --git a/gnulib_m4/host-cpu-c-abi.m4 b/gnulib_m4/host-cpu-c-abi.m4
new file mode 100644 (file)
index 0000000..3fac6f7
--- /dev/null
@@ -0,0 +1,456 @@
+# host-cpu-c-abi.m4 serial 10
+dnl Copyright (C) 2002-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible and Sam Steingold.
+
+dnl Sets the HOST_CPU variable to the canonical name of the CPU.
+dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its
+dnl C language ABI (application binary interface).
+dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in
+dnl config.h.
+dnl
+dnl This canonical name can be used to select a particular assembly language
+dnl source file that will interoperate with C code on the given host.
+dnl
+dnl For example:
+dnl * 'i386' and 'sparc' are different canonical names, because code for i386
+dnl   will not run on SPARC CPUs and vice versa. They have different
+dnl   instruction sets.
+dnl * 'sparc' and 'sparc64' are different canonical names, because code for
+dnl   'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code
+dnl   contains 32-bit instructions, whereas 'sparc64' code contains 64-bit
+dnl   instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit
+dnl   mode, but not both.
+dnl * 'mips' and 'mipsn32' are different canonical names, because they use
+dnl   different argument passing and return conventions for C functions, and
+dnl   although the instruction set of 'mips' is a large subset of the
+dnl   instruction set of 'mipsn32'.
+dnl * 'mipsn32' and 'mips64' are different canonical names, because they use
+dnl   different sizes for the C types like 'int' and 'void *', and although
+dnl   the instruction sets of 'mipsn32' and 'mips64' are the same.
+dnl * The same canonical name is used for different endiannesses. You can
+dnl   determine the endianness through preprocessor symbols:
+dnl   - 'arm': test __ARMEL__.
+dnl   - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL.
+dnl   - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN.
+dnl * The same name 'i386' is used for CPUs of type i386, i486, i586
+dnl   (Pentium), AMD K7, Pentium II, Pentium IV, etc., because
+dnl   - Instructions that do not exist on all of these CPUs (cmpxchg,
+dnl     MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your
+dnl     assembly language source files use such instructions, you will
+dnl     need to make the distinction.
+dnl   - Speed of execution of the common instruction set is reasonable across
+dnl     the entire family of CPUs. If you have assembly language source files
+dnl     that are optimized for particular CPU types (like GNU gmp has), you
+dnl     will need to make the distinction.
+dnl   See <https://en.wikipedia.org/wiki/X86_instruction_listings>.
+AC_DEFUN([gl_HOST_CPU_C_ABI],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_REQUIRE([gl_C_ASM])
+  AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi],
+    [case "$host_cpu" in
+
+changequote(,)dnl
+       i[4567]86 )
+changequote([,])dnl
+         gl_cv_host_cpu_c_abi=i386
+         ;;
+
+       x86_64 )
+         # On x86_64 systems, the C compiler may be generating code in one of
+         # these ABIs:
+         # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64.
+         # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64
+         #   with native Windows (mingw, MSVC).
+         # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32.
+         # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if (defined __x86_64__ || defined __amd64__ \
+                     || defined _M_X64 || defined _M_AMD64)
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if defined __ILP32__ || defined _ILP32
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+                 ]])],
+              [gl_cv_host_cpu_c_abi=x86_64-x32],
+              [gl_cv_host_cpu_c_abi=x86_64])],
+           [gl_cv_host_cpu_c_abi=i386])
+         ;;
+
+changequote(,)dnl
+       alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] )
+changequote([,])dnl
+         gl_cv_host_cpu_c_abi=alpha
+         ;;
+
+       arm* | aarch64 )
+         # Assume arm with EABI.
+         # On arm64 systems, the C compiler may be generating code in one of
+         # these ABIs:
+         # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64.
+         # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32.
+         # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#ifdef __aarch64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                [[#if defined __ILP32__ || defined _ILP32
+                   int ok;
+                  #else
+                   error fail
+                  #endif
+                ]])],
+              [gl_cv_host_cpu_c_abi=arm64-ilp32],
+              [gl_cv_host_cpu_c_abi=arm64])],
+           [# Don't distinguish little-endian and big-endian arm, since they
+            # don't require different machine code for simple operations and
+            # since the user can distinguish them through the preprocessor
+            # defines __ARMEL__ vs. __ARMEB__.
+            # But distinguish arm which passes floating-point arguments and
+            # return values in integer registers (r0, r1, ...) - this is
+            # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which
+            # passes them in float registers (s0, s1, ...) and double registers
+            # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer
+            # sets the preprocessor defines __ARM_PCS (for the first case) and
+            # __ARM_PCS_VFP (for the second case), but older GCC does not.
+            echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c
+            # Look for a reference to the register d0 in the .s file.
+            AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1
+            if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then
+              gl_cv_host_cpu_c_abi=armhf
+            else
+              gl_cv_host_cpu_c_abi=arm
+            fi
+            rm -f conftest*
+           ])
+         ;;
+
+       hppa1.0 | hppa1.1 | hppa2.0* | hppa64 )
+         # On hppa, the C compiler may be generating 32-bit code or 64-bit
+         # code. In the latter case, it defines _LP64 and __LP64__.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#ifdef __LP64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=hppa64],
+           [gl_cv_host_cpu_c_abi=hppa])
+         ;;
+
+       ia64* )
+         # On ia64 on HP-UX, the C compiler may be generating 64-bit code or
+         # 32-bit code. In the latter case, it defines _ILP32.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#ifdef _ILP32
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=ia64-ilp32],
+           [gl_cv_host_cpu_c_abi=ia64])
+         ;;
+
+       mips* )
+         # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this
+         # at 32.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64)
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=mips64],
+           [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but
+            # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32.
+            # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but
+            # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32.
+            AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if (_MIPS_SIM == _ABIN32)
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+                 ]])],
+              [gl_cv_host_cpu_c_abi=mipsn32],
+              [gl_cv_host_cpu_c_abi=mips])])
+         ;;
+
+       powerpc* )
+         # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD.
+         # No need to distinguish them here; the caller may distinguish
+         # them based on the OS.
+         # On powerpc64 systems, the C compiler may still be generating
+         # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may
+         # be generating 64-bit code.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __powerpc64__ || defined _ARCH_PPC64
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [# On powerpc64, there are two ABIs on Linux: The AIX compatible
+            # one and the ELFv2 one. The latter defines _CALL_ELF=2.
+            AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if defined _CALL_ELF && _CALL_ELF == 2
+                    int ok;
+                   #else
+                    error fail
+                   #endif
+                 ]])],
+              [gl_cv_host_cpu_c_abi=powerpc64-elfv2],
+              [gl_cv_host_cpu_c_abi=powerpc64])
+           ],
+           [gl_cv_host_cpu_c_abi=powerpc])
+         ;;
+
+       rs6000 )
+         gl_cv_host_cpu_c_abi=powerpc
+         ;;
+
+       riscv32 | riscv64 )
+         # There are 2 architectures (with variants): rv32* and rv64*.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if __riscv_xlen == 64
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [cpu=riscv64],
+           [cpu=riscv32])
+         # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d.
+         # Size of 'long' and 'void *':
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __LP64__
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [main_abi=lp64],
+           [main_abi=ilp32])
+         # Float ABIs:
+         # __riscv_float_abi_double:
+         #   'float' and 'double' are passed in floating-point registers.
+         # __riscv_float_abi_single:
+         #   'float' are passed in floating-point registers.
+         # __riscv_float_abi_soft:
+         #   No values are passed in floating-point registers.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __riscv_float_abi_double
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [float_abi=d],
+           [AC_COMPILE_IFELSE(
+              [AC_LANG_SOURCE(
+                 [[#if defined __riscv_float_abi_single
+                     int ok;
+                   #else
+                     error fail
+                   #endif
+                 ]])],
+              [float_abi=f],
+              [float_abi=''])
+           ])
+         gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}"
+         ;;
+
+       s390* )
+         # On s390x, the C compiler may be generating 64-bit (= s390x) code
+         # or 31-bit (= s390) code.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __LP64__ || defined __s390x__
+                  int ok;
+                #else
+                  error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=s390x],
+           [gl_cv_host_cpu_c_abi=s390])
+         ;;
+
+       sparc | sparc64 )
+         # UltraSPARCs running Linux have `uname -m` = "sparc64", but the
+         # C compiler still generates 32-bit code.
+         AC_COMPILE_IFELSE(
+           [AC_LANG_SOURCE(
+              [[#if defined __sparcv9 || defined __arch64__
+                 int ok;
+                #else
+                 error fail
+                #endif
+              ]])],
+           [gl_cv_host_cpu_c_abi=sparc64],
+           [gl_cv_host_cpu_c_abi=sparc])
+         ;;
+
+       *)
+         gl_cv_host_cpu_c_abi="$host_cpu"
+         ;;
+     esac
+    ])
+
+  dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same.
+  HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'`
+  HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi"
+  AC_SUBST([HOST_CPU])
+  AC_SUBST([HOST_CPU_C_ABI])
+
+  # This was
+  #   AC_DEFINE_UNQUOTED([__${HOST_CPU}__])
+  #   AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__])
+  # earlier, but KAI C++ 3.2d doesn't like this.
+  sed -e 's/-/_/g' >> confdefs.h <<EOF
+#ifndef __${HOST_CPU}__
+#define __${HOST_CPU}__ 1
+#endif
+#ifndef __${HOST_CPU_C_ABI}__
+#define __${HOST_CPU_C_ABI}__ 1
+#endif
+EOF
+  AH_TOP([/* CPU and C ABI indicator */
+#ifndef __i386__
+#undef __i386__
+#endif
+#ifndef __x86_64_x32__
+#undef __x86_64_x32__
+#endif
+#ifndef __x86_64__
+#undef __x86_64__
+#endif
+#ifndef __alpha__
+#undef __alpha__
+#endif
+#ifndef __arm__
+#undef __arm__
+#endif
+#ifndef __armhf__
+#undef __armhf__
+#endif
+#ifndef __arm64_ilp32__
+#undef __arm64_ilp32__
+#endif
+#ifndef __arm64__
+#undef __arm64__
+#endif
+#ifndef __hppa__
+#undef __hppa__
+#endif
+#ifndef __hppa64__
+#undef __hppa64__
+#endif
+#ifndef __ia64_ilp32__
+#undef __ia64_ilp32__
+#endif
+#ifndef __ia64__
+#undef __ia64__
+#endif
+#ifndef __m68k__
+#undef __m68k__
+#endif
+#ifndef __mips__
+#undef __mips__
+#endif
+#ifndef __mipsn32__
+#undef __mipsn32__
+#endif
+#ifndef __mips64__
+#undef __mips64__
+#endif
+#ifndef __powerpc__
+#undef __powerpc__
+#endif
+#ifndef __powerpc64__
+#undef __powerpc64__
+#endif
+#ifndef __powerpc64_elfv2__
+#undef __powerpc64_elfv2__
+#endif
+#ifndef __riscv32__
+#undef __riscv32__
+#endif
+#ifndef __riscv64__
+#undef __riscv64__
+#endif
+#ifndef __riscv32_ilp32__
+#undef __riscv32_ilp32__
+#endif
+#ifndef __riscv32_ilp32f__
+#undef __riscv32_ilp32f__
+#endif
+#ifndef __riscv32_ilp32d__
+#undef __riscv32_ilp32d__
+#endif
+#ifndef __riscv64_ilp32__
+#undef __riscv64_ilp32__
+#endif
+#ifndef __riscv64_ilp32f__
+#undef __riscv64_ilp32f__
+#endif
+#ifndef __riscv64_ilp32d__
+#undef __riscv64_ilp32d__
+#endif
+#ifndef __riscv64_lp64__
+#undef __riscv64_lp64__
+#endif
+#ifndef __riscv64_lp64f__
+#undef __riscv64_lp64f__
+#endif
+#ifndef __riscv64_lp64d__
+#undef __riscv64_lp64d__
+#endif
+#ifndef __s390__
+#undef __s390__
+#endif
+#ifndef __s390x__
+#undef __s390x__
+#endif
+#ifndef __sh__
+#undef __sh__
+#endif
+#ifndef __sparc__
+#undef __sparc__
+#endif
+#ifndef __sparc64__
+#undef __sparc64__
+#endif
+])
+
+])
diff --git a/gnulib_m4/include_next.m4 b/gnulib_m4/include_next.m4
new file mode 100644 (file)
index 0000000..a363cb0
--- /dev/null
@@ -0,0 +1,224 @@
+# include_next.m4 serial 24
+dnl Copyright (C) 2006-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert and Derek Price.
+
+dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER,
+dnl and PRAGMA_COLUMNS.
+dnl
+dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
+dnl 'include' otherwise.
+dnl
+dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler
+dnl supports it in the special case that it is the first include directive in
+dnl the given file, or to 'include' otherwise.
+dnl
+dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
+dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
+dnl '#pragma GCC system_header' has the same effect as if the file was found
+dnl through the include search path specified with '-isystem' options (as
+dnl opposed to the search path specified with '-I' options). Namely, gcc
+dnl does not warn about some things, and on some systems (Solaris and Interix)
+dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side
+dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead
+dnl of plain '__STDC__'.
+dnl
+dnl PRAGMA_COLUMNS can be used in files that override system header files, so
+dnl as to avoid compilation errors on HP NonStop systems when the gnulib file
+dnl is included by a system header file that does a "#pragma COLUMNS 80" (which
+dnl has the effect of truncating the lines of that file and all files that it
+dnl includes to 80 columns) and the gnulib file has lines longer than 80
+dnl columns.
+
+AC_DEFUN([gl_INCLUDE_NEXT],
+[
+  AC_LANG_PREPROC_REQUIRE()
+  AC_CACHE_CHECK([whether the preprocessor supports include_next],
+    [gl_cv_have_include_next],
+    [rm -rf conftestd1a conftestd1b conftestd2
+     mkdir conftestd1a conftestd1b conftestd2
+     dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on
+     dnl AIX 6.1 support include_next when used as first preprocessor directive
+     dnl in a file, but not when preceded by another include directive. Check
+     dnl for this bug by including <stdio.h>.
+     dnl Additionally, with this same compiler, include_next is a no-op when
+     dnl used in a header file that was included by specifying its absolute
+     dnl file name. Despite these two bugs, include_next is used in the
+     dnl compiler's <math.h>. By virtue of the second bug, we need to use
+     dnl include_next as well in this case.
+     cat <<EOF > conftestd1a/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd1b/conftest.h
+#define DEFINED_IN_CONFTESTD1
+#include <stdio.h>
+#include_next <conftest.h>
+#ifdef DEFINED_IN_CONFTESTD2
+int foo;
+#else
+#error "include_next doesn't work"
+#endif
+EOF
+     cat <<EOF > conftestd2/conftest.h
+#ifndef DEFINED_IN_CONFTESTD1
+#error "include_next test doesn't work"
+#endif
+#define DEFINED_IN_CONFTESTD2
+EOF
+     gl_save_CPPFLAGS="$CPPFLAGS"
+     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
+dnl We intentionally avoid using AC_LANG_SOURCE here.
+     AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
+       [gl_cv_have_include_next=yes],
+       [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
+        AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
+          [gl_cv_have_include_next=buggy],
+          [gl_cv_have_include_next=no])
+       ])
+     CPPFLAGS="$gl_save_CPPFLAGS"
+     rm -rf conftestd1a conftestd1b conftestd2
+    ])
+  PRAGMA_SYSTEM_HEADER=
+  if test $gl_cv_have_include_next = yes; then
+    INCLUDE_NEXT=include_next
+    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    if test -n "$GCC"; then
+      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
+    fi
+  else
+    if test $gl_cv_have_include_next = buggy; then
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
+    else
+      INCLUDE_NEXT=include
+      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
+    fi
+  fi
+  AC_SUBST([INCLUDE_NEXT])
+  AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
+  AC_SUBST([PRAGMA_SYSTEM_HEADER])
+  AC_CACHE_CHECK([whether system header files limit the line length],
+    [gl_cv_pragma_columns],
+    [dnl HP NonStop systems, which define __TANDEM, have this misfeature.
+     AC_EGREP_CPP([choke me],
+       [
+#ifdef __TANDEM
+choke me
+#endif
+       ],
+       [gl_cv_pragma_columns=yes],
+       [gl_cv_pragma_columns=no])
+    ])
+  if test $gl_cv_pragma_columns = yes; then
+    PRAGMA_COLUMNS="#pragma COLUMNS 10000"
+  else
+    PRAGMA_COLUMNS=
+  fi
+  AC_SUBST([PRAGMA_COLUMNS])
+])
+
+# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...)
+# ------------------------------------------
+# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be
+# '<foo.h>'; otherwise define it to be
+# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
+# Also, if #include_next works as first preprocessing directive in a file,
+# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to
+# be
+# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
+# That way, a header file with the following line:
+#       #@INCLUDE_NEXT@ @NEXT_FOO_H@
+# or
+#       #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@
+# behaves (after sed substitution) as if it contained
+#       #include_next <foo.h>
+# even if the compiler does not support include_next.
+# The three "///" are to pacify Sun C 5.8, which otherwise would say
+# "warning: #include of /usr/include/... may be non-portable".
+# Use '""', not '<>', so that the /// cannot be confused with a C99 comment.
+# Note: This macro assumes that the header file is not empty after
+# preprocessing, i.e. it does not only define preprocessor macros but also
+# provides some type/enum definitions or function/variable declarations.
+#
+# This macro also checks whether each header exists, by invoking
+# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument.
+AC_DEFUN([gl_CHECK_NEXT_HEADERS],
+[
+  gl_NEXT_HEADERS_INTERNAL([$1], [check])
+])
+
+# gl_NEXT_HEADERS(HEADER1 HEADER2 ...)
+# ------------------------------------
+# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist.
+# This is suitable for headers like <stddef.h> that are standardized by C89
+# and therefore can be assumed to exist.
+AC_DEFUN([gl_NEXT_HEADERS],
+[
+  gl_NEXT_HEADERS_INTERNAL([$1], [assume])
+])
+
+# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS.
+AC_DEFUN([gl_NEXT_HEADERS_INTERNAL],
+[
+  AC_REQUIRE([gl_INCLUDE_NEXT])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+
+  m4_if([$2], [check],
+    [AC_CHECK_HEADERS_ONCE([$1])
+    ])
+
+dnl FIXME: gl_next_header and gl_header_exists must be used unquoted
+dnl until we can assume autoconf 2.64 or newer.
+  m4_foreach_w([gl_HEADER_NAME], [$1],
+    [AS_VAR_PUSHDEF([gl_next_header],
+                    [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
+     if test $gl_cv_have_include_next = yes; then
+       AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
+     else
+       AC_CACHE_CHECK(
+         [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
+         m4_defn([gl_next_header]),
+         [m4_if([$2], [check],
+            [AS_VAR_PUSHDEF([gl_header_exists],
+                            [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
+             if test AS_VAR_GET(gl_header_exists) = yes; then
+             AS_VAR_POPDEF([gl_header_exists])
+            ])
+           gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME)
+           AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME))
+           AS_VAR_SET(gl_next_header, ['"'$gl_header'"'])
+          m4_if([$2], [check],
+            [else
+               AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
+             fi
+            ])
+         ])
+     fi
+     AC_SUBST(
+       AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
+       [AS_VAR_GET(gl_next_header)])
+     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
+       gl_next_as_first_directive='<'gl_HEADER_NAME'>'
+     else
+       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
+       gl_next_as_first_directive=AS_VAR_GET(gl_next_header)
+     fi
+     AC_SUBST(
+       AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])),
+       [$gl_next_as_first_directive])
+     AS_VAR_POPDEF([gl_next_header])])
+])
+
+# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE;
+# this fallback is safe for all earlier autoconf versions.
+m4_define_default([AC_LANG_DEFINES_PROVIDED])
diff --git a/gnulib_m4/intmax_t.m4 b/gnulib_m4/intmax_t.m4
new file mode 100644 (file)
index 0000000..7ab676e
--- /dev/null
@@ -0,0 +1,67 @@
+# intmax_t.m4 serial 8
+dnl Copyright (C) 1997-2004, 2006-2007, 2009-2018 Free Software Foundation,
+dnl Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+AC_PREREQ([2.53])
+
+# Define intmax_t to 'long' or 'long long'
+# if it is not already defined in <stdint.h> or <inttypes.h>.
+
+AC_DEFUN([gl_AC_TYPE_INTMAX_T],
+[
+  dnl For simplicity, we assume that a header file defines 'intmax_t' if and
+  dnl only if it defines 'uintmax_t'.
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then
+    AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+    test $ac_cv_type_long_long_int = yes \
+      && ac_type='long long' \
+      || ac_type='long'
+    AC_DEFINE_UNQUOTED([intmax_t], [$ac_type],
+     [Define to long or long long if <inttypes.h> and <stdint.h> don't define.])
+  else
+    AC_DEFINE([HAVE_INTMAX_T], [1],
+      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+  fi
+])
+
+dnl An alternative would be to explicitly test for 'intmax_t'.
+
+AC_DEFUN([gt_AC_TYPE_INTMAX_T],
+[
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[
+#include <stddef.h>
+#include <stdlib.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+#include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+#include <inttypes.h>
+#endif
+          ]],
+          [[intmax_t x = -1; return !x;]])],
+       [gt_cv_c_intmax_t=yes],
+       [gt_cv_c_intmax_t=no])])
+  if test $gt_cv_c_intmax_t = yes; then
+    AC_DEFINE([HAVE_INTMAX_T], [1],
+      [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.])
+  else
+    AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+    test $ac_cv_type_long_long_int = yes \
+      && ac_type='long long' \
+      || ac_type='long'
+    AC_DEFINE_UNQUOTED([intmax_t], [$ac_type],
+     [Define to long or long long if <stdint.h> and <inttypes.h> don't define.])
+  fi
+])
diff --git a/gnulib_m4/inttypes_h.m4 b/gnulib_m4/inttypes_h.m4
new file mode 100644 (file)
index 0000000..954848b
--- /dev/null
@@ -0,0 +1,29 @@
+# inttypes_h.m4 serial 10
+dnl Copyright (C) 1997-2004, 2006, 2008-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_INTTYPES_H],
+[
+  AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[
+#include <sys/types.h>
+#include <inttypes.h>
+          ]],
+          [[uintmax_t i = (uintmax_t) -1; return !i;]])],
+       [gl_cv_header_inttypes_h=yes],
+       [gl_cv_header_inttypes_h=no])])
+  if test $gl_cv_header_inttypes_h = yes; then
+    AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1],
+      [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/gnulib_m4/isnand.m4 b/gnulib_m4/isnand.m4
new file mode 100644 (file)
index 0000000..03da55d
--- /dev/null
@@ -0,0 +1,96 @@
+# isnand.m4 serial 11
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check how to get or define isnand().
+
+AC_DEFUN([gl_FUNC_ISNAND],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  ISNAND_LIBM=
+  gl_HAVE_ISNAND_NO_LIBM
+  if test $gl_cv_func_isnand_no_libm = no; then
+    gl_HAVE_ISNAND_IN_LIBM
+    if test $gl_cv_func_isnand_in_libm = yes; then
+      ISNAND_LIBM=-lm
+    fi
+  fi
+  dnl The variable gl_func_isnand set here is used by isnan.m4.
+  if test $gl_cv_func_isnand_no_libm = yes \
+     || test $gl_cv_func_isnand_in_libm = yes; then
+    gl_func_isnand=yes
+  else
+    gl_func_isnand=no
+    HAVE_ISNAND=0
+  fi
+  AC_SUBST([ISNAND_LIBM])
+])
+
+dnl Check how to get or define isnand() without linking with libm.
+
+AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM],
+[
+  gl_HAVE_ISNAND_NO_LIBM
+  gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm
+  if test $gl_cv_func_isnand_no_libm = yes; then
+    AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1],
+      [Define if the isnan(double) function is available in libc.])
+  fi
+])
+
+dnl Prerequisites of replacement isnand definition. It does not need -lm.
+AC_DEFUN([gl_PREREQ_ISNAND],
+[
+  AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION])
+])
+
+dnl Test whether isnand() can be used with libm.
+
+AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(double) can be used with libm],
+    [gl_cv_func_isnand_in_libm],
+    [
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnand
+             # define isnand(x) __builtin_isnan ((double)(x))
+             #elif defined isnan
+             # undef isnand
+             # define isnand(x) isnan ((double)(x))
+             #endif
+             double x;]],
+           [[return isnand (x);]])],
+        [gl_cv_func_isnand_in_libm=yes],
+        [gl_cv_func_isnand_in_libm=no])
+      LIBS="$save_LIBS"
+    ])
+])
+
+AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm],
+    [gl_cv_func_isnand_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnand
+             # define isnand(x) __builtin_isnan ((double)(x))
+             #else
+             # undef isnand
+             # define isnand(x) isnan ((double)(x))
+             #endif
+             double x;]],
+           [[return isnand (x);]])],
+        [gl_cv_func_isnand_no_libm=yes],
+        [gl_cv_func_isnand_no_libm=no])
+    ])
+])
diff --git a/gnulib_m4/isnanf.m4 b/gnulib_m4/isnanf.m4
new file mode 100644 (file)
index 0000000..c0dcdb7
--- /dev/null
@@ -0,0 +1,197 @@
+# isnanf.m4 serial 15
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check how to get or define isnanf().
+
+AC_DEFUN([gl_FUNC_ISNANF],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  ISNANF_LIBM=
+  gl_HAVE_ISNANF_NO_LIBM
+  if test $gl_cv_func_isnanf_no_libm = no; then
+    gl_HAVE_ISNANF_IN_LIBM
+    if test $gl_cv_func_isnanf_in_libm = yes; then
+      ISNANF_LIBM=-lm
+    fi
+  fi
+  dnl The variable gl_func_isnanf set here is used by isnan.m4.
+  if test $gl_cv_func_isnanf_no_libm = yes \
+     || test $gl_cv_func_isnanf_in_libm = yes; then
+    save_LIBS="$LIBS"
+    LIBS="$LIBS $ISNANF_LIBM"
+    gl_ISNANF_WORKS
+    LIBS="$save_LIBS"
+    case "$gl_cv_func_isnanf_works" in
+      *yes) gl_func_isnanf=yes ;;
+      *)    gl_func_isnanf=no; ISNANF_LIBM= ;;
+    esac
+  else
+    gl_func_isnanf=no
+  fi
+  if test $gl_func_isnanf != yes; then
+    HAVE_ISNANF=0
+  fi
+  AC_SUBST([ISNANF_LIBM])
+])
+
+dnl Check how to get or define isnanf() without linking with libm.
+
+AC_DEFUN([gl_FUNC_ISNANF_NO_LIBM],
+[
+  gl_HAVE_ISNANF_NO_LIBM
+  if test $gl_cv_func_isnanf_no_libm = yes; then
+    gl_ISNANF_WORKS
+  fi
+  if test $gl_cv_func_isnanf_no_libm = yes \
+     && { case "$gl_cv_func_isnanf_works" in
+            *yes) true;;
+            *) false;;
+          esac
+        }; then
+    gl_func_isnanf_no_libm=yes
+    AC_DEFINE([HAVE_ISNANF_IN_LIBC], [1],
+      [Define if the isnan(float) function is available in libc.])
+  else
+    gl_func_isnanf_no_libm=no
+  fi
+])
+
+dnl Prerequisites of replacement isnanf definition. It does not need -lm.
+AC_DEFUN([gl_PREREQ_ISNANF],
+[
+  gl_FLOAT_EXPONENT_LOCATION
+])
+
+dnl Test whether isnanf() can be used without libm.
+AC_DEFUN([gl_HAVE_ISNANF_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(float) can be used without linking with libm],
+    [gl_cv_func_isnanf_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanf
+             # define isnanf(x) __builtin_isnanf ((float)(x))
+             #elif defined isnan
+             # undef isnanf
+             # define isnanf(x) isnan ((float)(x))
+             #endif
+             float x;]],
+           [[return isnanf (x);]])],
+        [gl_cv_func_isnanf_no_libm=yes],
+        [gl_cv_func_isnanf_no_libm=no])
+    ])
+])
+
+dnl Test whether isnanf() can be used with libm.
+AC_DEFUN([gl_HAVE_ISNANF_IN_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(float) can be used with libm],
+    [gl_cv_func_isnanf_in_libm],
+    [
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanf
+             # define isnanf(x) __builtin_isnanf ((float)(x))
+             #elif defined isnan
+             # undef isnanf
+             # define isnanf(x) isnan ((float)(x))
+             #endif
+             float x;]],
+           [[return isnanf (x);]])],
+        [gl_cv_func_isnanf_in_libm=yes],
+        [gl_cv_func_isnanf_in_libm=no])
+      LIBS="$save_LIBS"
+    ])
+])
+
+dnl Test whether isnanf() rejects Infinity (this fails on Solaris 2.5.1),
+dnl recognizes a NaN (this fails on IRIX 6.5 with cc), and recognizes a NaN
+dnl with in-memory representation 0x7fbfffff (this fails on IRIX 6.5).
+AC_DEFUN([gl_ISNANF_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION])
+  AC_CACHE_CHECK([whether isnan(float) works], [gl_cv_func_isnanf_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanf
+# define isnanf(x) __builtin_isnanf ((float)(x))
+#elif defined isnan
+# undef isnanf
+# define isnanf(x) isnan ((float)(x))
+#endif
+/* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0.  */
+#ifdef __DECC
+static float
+NaN ()
+{
+  static float zero = 0.0f;
+  return zero / zero;
+}
+#else
+# define NaN() (0.0f / 0.0f)
+#endif
+#define NWORDS \
+  ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; float value; } memory_float;
+int main()
+{
+  int result = 0;
+
+  if (isnanf (1.0f / 0.0f))
+    result |= 1;
+
+  if (!isnanf (NaN ()))
+    result |= 2;
+
+#if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
+  /* The isnanf function should be immune against changes in the sign bit and
+     in the mantissa bits.  The xor operation twiddles a bit that can only be
+     a sign bit or a mantissa bit.  */
+  if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0)
+    {
+      memory_float m;
+
+      m.value = NaN ();
+      /* Set the bits below the exponent to 01111...111.  */
+      m.word[0] &= -1U << FLT_EXPBIT0_BIT;
+      m.word[0] |= 1U << (FLT_EXPBIT0_BIT - 1) - 1;
+      if (!isnanf (m.value))
+        result |= 4;
+    }
+#endif
+
+  return result;
+}]])],
+        [gl_cv_func_isnanf_works=yes],
+        [gl_cv_func_isnanf_works=no],
+        [case "$host_os" in
+           irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;;
+           mingw*) # Guess yes on mingw, no on MSVC.
+             AC_EGREP_CPP([Known], [
+#ifdef __MINGW32__
+ Known
+#endif
+               ],
+               [gl_cv_func_isnanf_works="guessing yes"],
+               [gl_cv_func_isnanf_works="guessing no"])
+             ;;
+           *) gl_cv_func_isnanf_works="guessing yes" ;;
+         esac
+        ])
+    ])
+])
diff --git a/gnulib_m4/isnanl.m4 b/gnulib_m4/isnanl.m4
new file mode 100644 (file)
index 0000000..74014d6
--- /dev/null
@@ -0,0 +1,248 @@
+# isnanl.m4 serial 20
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_ISNANL],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  ISNANL_LIBM=
+  gl_HAVE_ISNANL_NO_LIBM
+  if test $gl_cv_func_isnanl_no_libm = no; then
+    gl_HAVE_ISNANL_IN_LIBM
+    if test $gl_cv_func_isnanl_in_libm = yes; then
+      ISNANL_LIBM=-lm
+    fi
+  fi
+  dnl The variable gl_func_isnanl set here is used by isnan.m4.
+  if test $gl_cv_func_isnanl_no_libm = yes \
+     || test $gl_cv_func_isnanl_in_libm = yes; then
+    save_LIBS="$LIBS"
+    LIBS="$LIBS $ISNANL_LIBM"
+    gl_FUNC_ISNANL_WORKS
+    LIBS="$save_LIBS"
+    case "$gl_cv_func_isnanl_works" in
+      *yes) gl_func_isnanl=yes ;;
+      *)    gl_func_isnanl=no; ISNANL_LIBM= ;;
+    esac
+  else
+    gl_func_isnanl=no
+  fi
+  if test $gl_func_isnanl != yes; then
+    HAVE_ISNANL=0
+  fi
+  AC_SUBST([ISNANL_LIBM])
+])
+
+AC_DEFUN([gl_FUNC_ISNANL_NO_LIBM],
+[
+  gl_HAVE_ISNANL_NO_LIBM
+  gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm
+  if test $gl_func_isnanl_no_libm = yes; then
+    gl_FUNC_ISNANL_WORKS
+    case "$gl_cv_func_isnanl_works" in
+      *yes) ;;
+      *)    gl_func_isnanl_no_libm=no ;;
+    esac
+  fi
+  if test $gl_func_isnanl_no_libm = yes; then
+    AC_DEFINE([HAVE_ISNANL_IN_LIBC], [1],
+      [Define if the isnan(long double) function is available in libc.])
+  fi
+])
+
+dnl Prerequisites of replacement isnanl definition. It does not need -lm.
+AC_DEFUN([gl_PREREQ_ISNANL],
+[
+  gl_LONG_DOUBLE_EXPONENT_LOCATION
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+])
+
+dnl Test whether isnanl() can be used without libm.
+AC_DEFUN([gl_HAVE_ISNANL_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(long double) can be used without linking with libm],
+    [gl_cv_func_isnanl_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanl
+             # define isnanl(x) __builtin_isnanl ((long double)(x))
+             #elif defined isnan
+             # undef isnanl
+             # define isnanl(x) isnan ((long double)(x))
+             #endif
+             long double x;]],
+           [[return isnanl (x);]])],
+        [gl_cv_func_isnanl_no_libm=yes],
+        [gl_cv_func_isnanl_no_libm=no])
+    ])
+])
+
+dnl Test whether isnanl() can be used with libm.
+AC_DEFUN([gl_HAVE_ISNANL_IN_LIBM],
+[
+  AC_CACHE_CHECK([whether isnan(long double) can be used with libm],
+    [gl_cv_func_isnanl_in_libm],
+    [
+      save_LIBS="$LIBS"
+      LIBS="$LIBS -lm"
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             #if __GNUC__ >= 4
+             # undef isnanl
+             # define isnanl(x) __builtin_isnanl ((long double)(x))
+             #elif defined isnan
+             # undef isnanl
+             # define isnanl(x) isnan ((long double)(x))
+             #endif
+             long double x;]],
+           [[return isnanl (x);]])],
+        [gl_cv_func_isnanl_in_libm=yes],
+        [gl_cv_func_isnanl_in_libm=no])
+      LIBS="$save_LIBS"
+    ])
+])
+
+dnl Test whether isnanl() recognizes all canonical numbers which are neither
+dnl finite nor infinite.
+AC_DEFUN([gl_FUNC_ISNANL_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gl_BIGENDIAN])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether isnanl works], [gl_cv_func_isnanl_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <float.h>
+#include <limits.h>
+#include <math.h>
+#if __GNUC__ >= 4
+# undef isnanl
+# define isnanl(x) __builtin_isnanl ((long double)(x))
+#elif defined isnan
+# undef isnanl
+# define isnanl(x) isnan ((long double)(x))
+#endif
+#define NWORDS \
+  ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { unsigned int word[NWORDS]; long double value; }
+        memory_long_double;
+/* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the
+   runtime type conversion.  */
+#ifdef __sgi
+static long double NaNl ()
+{
+  double zero = 0.0;
+  return zero / zero;
+}
+#else
+# define NaNl() (0.0L / 0.0L)
+#endif
+int main ()
+{
+  int result = 0;
+
+  if (!isnanl (NaNl ()))
+    result |= 1;
+
+  {
+    memory_long_double m;
+    unsigned int i;
+
+    /* The isnanl function should be immune against changes in the sign bit and
+       in the mantissa bits.  The xor operation twiddles a bit that can only be
+       a sign bit or a mantissa bit (since the exponent never extends to
+       bit 31).  */
+    m.value = NaNl ();
+    m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1);
+    for (i = 0; i < NWORDS; i++)
+      m.word[i] |= 1;
+    if (!isnanl (m.value))
+      result |= 1;
+  }
+
+#if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+/* Representation of an 80-bit 'long double' as an initializer for a sequence
+   of 'unsigned int' words.  */
+# ifdef WORDS_BIGENDIAN
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
+       ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16),   \
+       (unsigned int) (mantlo) << 16                                        \
+     }
+# else
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { mantlo, manthi, exponent }
+# endif
+  { /* Quiet NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  {
+    /* Signalling NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
+    if (!isnanl (x.value))
+      result |= 2;
+  }
+  /* isnanl should return something even for noncanonical values.  */
+  { /* Pseudo-NaN.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
+    if (isnanl (x.value) && !isnanl (x.value))
+      result |= 4;
+  }
+  { /* Pseudo-Infinity.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
+    if (isnanl (x.value) && !isnanl (x.value))
+      result |= 8;
+  }
+  { /* Pseudo-Zero.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
+    if (isnanl (x.value) && !isnanl (x.value))
+      result |= 16;
+  }
+  { /* Unnormalized number.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
+    if (isnanl (x.value) && !isnanl (x.value))
+      result |= 32;
+  }
+  { /* Pseudo-Denormal.  */
+    static memory_long_double x =
+      { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
+    if (isnanl (x.value) && !isnanl (x.value))
+      result |= 64;
+  }
+#endif
+
+  return result;
+}]])],
+        [gl_cv_func_isnanl_works=yes],
+        [gl_cv_func_isnanl_works=no],
+        [case "$host_os" in
+           mingw*) # Guess yes on mingw, no on MSVC.
+             AC_EGREP_CPP([Known], [
+#ifdef __MINGW32__
+ Known
+#endif
+               ],
+               [gl_cv_func_isnanl_works="guessing yes"],
+               [gl_cv_func_isnanl_works="guessing no"])
+             ;;
+           *) gl_cv_func_isnanl_works="guessing yes" ;;
+         esac
+        ])
+    ])
+])
diff --git a/gnulib_m4/ldexpl.m4 b/gnulib_m4/ldexpl.m4
new file mode 100644 (file)
index 0000000..744dede
--- /dev/null
@@ -0,0 +1,135 @@
+# ldexpl.m4 serial 17
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_LDEXPL],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+  AC_REQUIRE([gl_FUNC_ISNANL]) dnl for ISNANL_LIBM
+
+  dnl Persuade glibc <math.h> to declare ldexpl().
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  dnl Check whether it's declared.
+  dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>.
+  AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]])
+
+  LDEXPL_LIBM=
+  if test $HAVE_DECL_LDEXPL = 1; then
+    gl_CHECK_LDEXPL_NO_LIBM
+    if test $gl_cv_func_ldexpl_no_libm = no; then
+      AC_CACHE_CHECK([whether ldexpl() can be used with libm],
+        [gl_cv_func_ldexpl_in_libm],
+        [
+          save_LIBS="$LIBS"
+          LIBS="$LIBS -lm"
+          AC_LINK_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[#include <math.h>
+                 long double x;]],
+               [[return ldexpl (x, -1) > 0;]])],
+            [gl_cv_func_ldexpl_in_libm=yes],
+            [gl_cv_func_ldexpl_in_libm=no])
+          LIBS="$save_LIBS"
+        ])
+      if test $gl_cv_func_ldexpl_in_libm = yes; then
+        LDEXPL_LIBM=-lm
+      fi
+    fi
+    if test $gl_cv_func_ldexpl_no_libm = yes \
+       || test $gl_cv_func_ldexpl_in_libm = yes; then
+      save_LIBS="$LIBS"
+      LIBS="$LIBS $LDEXPL_LIBM"
+      gl_FUNC_LDEXPL_WORKS
+      LIBS="$save_LIBS"
+      case "$gl_cv_func_ldexpl_works" in
+        *yes) gl_func_ldexpl=yes ;;
+        *)    gl_func_ldexpl=no; REPLACE_LDEXPL=1 ;;
+      esac
+    else
+      gl_func_ldexpl=no
+    fi
+    if test $gl_func_ldexpl = yes; then
+      AC_DEFINE([HAVE_LDEXPL], [1],
+        [Define if the ldexpl() function is available.])
+    fi
+  fi
+  if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then
+    dnl Find libraries needed to link lib/ldexpl.c.
+    if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then
+      AC_REQUIRE([gl_FUNC_LDEXP])
+      LDEXPL_LIBM="$LDEXP_LIBM"
+    else
+      LDEXPL_LIBM="$ISNANL_LIBM"
+    fi
+  fi
+  AC_SUBST([LDEXPL_LIBM])
+])
+
+dnl Test whether ldexpl() can be used without linking with libm.
+dnl Set gl_cv_func_ldexpl_no_libm to 'yes' or 'no' accordingly.
+AC_DEFUN([gl_CHECK_LDEXPL_NO_LIBM],
+[
+  AC_CACHE_CHECK([whether ldexpl() can be used without linking with libm],
+    [gl_cv_func_ldexpl_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             long double x;]],
+           [[return ldexpl (x, -1) > 0;]])],
+        [gl_cv_func_ldexpl_no_libm=yes],
+        [gl_cv_func_ldexpl_no_libm=no])
+    ])
+])
+
+dnl Test whether ldexpl() works on finite numbers (this fails on AIX 5.1
+dnl and Mac OS X 10.4/PowerPC).
+AC_DEFUN([gl_FUNC_LDEXPL_WORKS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether ldexpl works], [gl_cv_func_ldexpl_works],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <math.h>
+extern
+#ifdef __cplusplus
+"C"
+#endif
+long double ldexpl (long double, int);
+int main()
+{
+  int result = 0;
+  {
+    volatile long double x = 1.0;
+    volatile long double y = ldexpl (x, -1);
+    if (y != 0.5L)
+      result |= 1;
+  }
+  {
+    volatile long double x = 1.73205L;
+    volatile long double y = ldexpl (x, 0);
+    if (y != x)
+      result |= 2;
+  }
+  return result;
+}]])],
+        [gl_cv_func_ldexpl_works=yes],
+        [gl_cv_func_ldexpl_works=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;;
+                            # Guess yes on native Windows.
+           mingw*)          gl_cv_func_ldexpl_works="guessing yes" ;;
+           *)               gl_cv_func_ldexpl_works="guessing yes" ;;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
diff --git a/gnulib_m4/libunistring-base.m4 b/gnulib_m4/libunistring-base.m4
new file mode 100644 (file)
index 0000000..1587f36
--- /dev/null
@@ -0,0 +1,141 @@
+# libunistring-base.m4 serial 5
+dnl Copyright (C) 2010-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paolo Bonzini and Bruno Haible.
+
+dnl gl_LIBUNISTRING_MODULE([VERSION], [Module])
+dnl Declares that the source files of Module should be compiled, unless we
+dnl are linking with libunistring and its version is >= the given VERSION.
+dnl Defines an automake conditional LIBUNISTRING_COMPILE_$MODULE that is
+dnl true if the source files of Module should be compiled.
+dnl This macro is to be used for public libunistring API, not for
+dnl undocumented API.
+dnl
+dnl You have to bump the VERSION argument to the next projected version
+dnl number each time you make a change that affects the behaviour of the
+dnl functions defined in Module (even if the sources of Module itself do not
+dnl change).
+
+AC_DEFUN([gl_LIBUNISTRING_MODULE],
+[
+  AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE])
+  dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from
+  dnl gl_LIBUNISTRING_CORE if that macro has been run.
+  AM_CONDITIONAL(AS_TR_CPP([LIBUNISTRING_COMPILE_$2]),
+    [gl_LIBUNISTRING_VERSION_CMP([$1])])
+])
+
+dnl gl_LIBUNISTRING_LIBHEADER([VERSION], [HeaderFile])
+dnl Declares that HeaderFile should be created, unless we are linking
+dnl with libunistring and its version is >= the given VERSION.
+dnl HeaderFile should be relative to the lib directory and end in '.h'.
+dnl Prepares for substituting LIBUNISTRING_HEADERFILE (to HeaderFile or empty).
+dnl
+dnl When we are linking with the already installed libunistring and its version
+dnl is < VERSION, we create HeaderFile here, because we may compile functions
+dnl (via gl_LIBUNISTRING_MODULE above) that are not contained in the installed
+dnl version.
+dnl When we are linking with the already installed libunistring and its version
+dnl is > VERSION, we don't create HeaderFile here: it could cause compilation
+dnl errors in other libunistring header files if some types are missing.
+dnl
+dnl You have to bump the VERSION argument to the next projected version
+dnl number each time you make a non-comment change to the HeaderFile.
+
+AC_DEFUN([gl_LIBUNISTRING_LIBHEADER],
+[
+  AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE])
+  dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from
+  dnl gl_LIBUNISTRING_CORE if that macro has been run.
+  if gl_LIBUNISTRING_VERSION_CMP([$1]); then
+    LIBUNISTRING_[]AS_TR_CPP([$2])='$2'
+  else
+    LIBUNISTRING_[]AS_TR_CPP([$2])=
+  fi
+  AC_SUBST([LIBUNISTRING_]AS_TR_CPP([$2]))
+])
+
+dnl Miscellaneous preparations/initializations.
+
+AC_DEFUN([gl_LIBUNISTRING_LIB_PREPARE],
+[
+  dnl Ensure that HAVE_LIBUNISTRING is fully determined at this point.
+  m4_ifdef([gl_LIBUNISTRING], [AC_REQUIRE([gl_LIBUNISTRING])])
+
+  AC_REQUIRE([AC_PROG_AWK])
+
+dnl Sed expressions to extract the parts of a version number.
+changequote(,)
+gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;}
+i\
+0
+q
+'
+changequote([,])
+
+  if test "$HAVE_LIBUNISTRING" = yes; then
+    LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"`
+    LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"`
+    LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"`
+  fi
+])
+
+dnl gl_LIBUNISTRING_VERSION_CMP([VERSION])
+dnl Expands to a shell statement that evaluates to true if LIBUNISTRING_VERSION
+dnl is less than the VERSION argument.
+AC_DEFUN([gl_LIBUNISTRING_VERSION_CMP],
+[ { test "$HAVE_LIBUNISTRING" != yes \
+    || {
+         dnl AS_LITERAL_IF exists and works fine since autoconf-2.59 at least.
+         AS_LITERAL_IF([$1],
+           [dnl This is the optimized variant, that assumes the argument is a literal:
+            m4_pushdef([requested_version_major],
+              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^\([0-9]*\).*], [\1]), [])])
+            m4_pushdef([requested_version_minor],
+              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.]\([0-9]*\).*], [\1]), [$1])])
+            m4_pushdef([requested_version_subminor],
+              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.][0-9]*[.]\([0-9]*\).*], [\1]), [$1])])
+            test $LIBUNISTRING_VERSION_MAJOR -lt requested_version_major \
+            || { test $LIBUNISTRING_VERSION_MAJOR -eq requested_version_major \
+                 && { test $LIBUNISTRING_VERSION_MINOR -lt requested_version_minor \
+                      || { test $LIBUNISTRING_VERSION_MINOR -eq requested_version_minor \
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt requested_version_subminor
+                         }
+                    }
+               }
+            m4_popdef([requested_version_subminor])
+            m4_popdef([requested_version_minor])
+            m4_popdef([requested_version_major])
+           ],
+           [dnl This is the unoptimized variant:
+            requested_version_major=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_major"`
+            requested_version_minor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_minor"`
+            requested_version_subminor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_subminor"`
+            test $LIBUNISTRING_VERSION_MAJOR -lt $requested_version_major \
+            || { test $LIBUNISTRING_VERSION_MAJOR -eq $requested_version_major \
+                 && { test $LIBUNISTRING_VERSION_MINOR -lt $requested_version_minor \
+                      || { test $LIBUNISTRING_VERSION_MINOR -eq $requested_version_minor \
+                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt $requested_version_subminor
+                         }
+                    }
+               }
+           ])
+       }
+  }])
+
+dnl gl_LIBUNISTRING_ARG_OR_ZERO([ARG], [ORIG]) expands to ARG if it is not the
+dnl same as ORIG, otherwise to 0.
+m4_define([gl_LIBUNISTRING_ARG_OR_ZERO], [m4_if([$1], [$2], [0], [$1])])
diff --git a/gnulib_m4/limits-h.m4 b/gnulib_m4/limits-h.m4
new file mode 100644 (file)
index 0000000..3a2cd91
--- /dev/null
@@ -0,0 +1,43 @@
+dnl Check whether limits.h has needed features.
+
+dnl Copyright 2016-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+AC_DEFUN_ONCE([gl_LIMITS_H],
+[
+  gl_CHECK_NEXT_HEADERS([limits.h])
+
+  AC_CACHE_CHECK([whether limits.h has LLONG_MAX, WORD_BIT, ULLONG_WIDTH etc.],
+    [gl_cv_header_limits_width],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+             #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+            #endif
+            #include <limits.h>
+            long long llm = LLONG_MAX;
+            int wb = WORD_BIT;
+            int ullw = ULLONG_WIDTH;
+          ]])],
+       [gl_cv_header_limits_width=yes],
+       [gl_cv_header_limits_width=no])])
+  if test "$gl_cv_header_limits_width" = yes; then
+    LIMITS_H=
+  else
+    LIMITS_H=limits.h
+  fi
+  AC_SUBST([LIMITS_H])
+  AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"])
+])
+
+dnl Unconditionally enables the replacement of <limits.h>.
+AC_DEFUN([gl_REPLACE_LIMITS_H],
+[
+  AC_REQUIRE([gl_LIMITS_H])
+  LIMITS_H='limits.h'
+  AM_CONDITIONAL([GL_GENERATE_LIMITS_H], [test -n "$LIMITS_H"])
+])
diff --git a/gnulib_m4/longlong.m4 b/gnulib_m4/longlong.m4
new file mode 100644 (file)
index 0000000..27e6326
--- /dev/null
@@ -0,0 +1,113 @@
+# longlong.m4 serial 17
+dnl Copyright (C) 1999-2007, 2009-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_LONG_LONG_INT if 'long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'long long int' exists but is only 32 bits large
+# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
+# defined. In this case you can treat 'long long int' like 'long int'.
+
+AC_DEFUN([AC_TYPE_LONG_LONG_INT],
+[
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
+     [ac_cv_type_long_long_int=yes
+      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
+        if test $ac_cv_type_long_long_int = yes; then
+          dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
+          dnl If cross compiling, assume the bug is not important, since
+          dnl nobody cross compiles for this platform as far as we know.
+          AC_RUN_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[@%:@include <limits.h>
+                 @%:@ifndef LLONG_MAX
+                 @%:@ define HALF \
+                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
+                 @%:@ define LLONG_MAX (HALF - 1 + HALF)
+                 @%:@endif]],
+               [[long long int n = 1;
+                 int i;
+                 for (i = 0; ; i++)
+                   {
+                     long long int m = n << i;
+                     if (m >> i != n)
+                       return 1;
+                     if (LLONG_MAX / 2 < m)
+                       break;
+                   }
+                 return 0;]])],
+            [],
+            [ac_cv_type_long_long_int=no],
+            [:])
+        fi
+      fi])
+  if test $ac_cv_type_long_long_int = yes; then
+    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type 'long long int'.])
+  fi
+])
+
+# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
+# This fixes a bug in Autoconf 2.61, and can be faster
+# than what's in Autoconf 2.62 through 2.68.
+
+# Note: If the type 'unsigned long long int' exists but is only 32 bits
+# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
+# will not be defined. In this case you can treat 'unsigned long long int'
+# like 'unsigned long int'.
+
+AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
+[
+  AC_CACHE_CHECK([for unsigned long long int],
+    [ac_cv_type_unsigned_long_long_int],
+    [ac_cv_type_unsigned_long_long_int=yes
+     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
+       AC_LINK_IFELSE(
+         [_AC_TYPE_LONG_LONG_SNIPPET],
+         [],
+         [ac_cv_type_unsigned_long_long_int=no])
+     fi])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
+      [Define to 1 if the system has the type 'unsigned long long int'.])
+  fi
+])
+
+# Expands to a C program that can be used to test for simultaneous support
+# of 'long long' and 'unsigned long long'. We don't want to say that
+# 'long long' is available if 'unsigned long long' is not, or vice versa,
+# because too many programs rely on the symmetry between signed and unsigned
+# integer types (excluding 'bool').
+AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
+[
+  AC_LANG_PROGRAM(
+    [[/* For now, do not test the preprocessor; as of 2007 there are too many
+         implementations with broken preprocessors.  Perhaps this can
+         be revisited in 2012.  In the meantime, code should not expect
+         #if to work with literals wider than 32 bits.  */
+      /* Test literals.  */
+      long long int ll = 9223372036854775807ll;
+      long long int nll = -9223372036854775807LL;
+      unsigned long long int ull = 18446744073709551615ULL;
+      /* Test constant expressions.   */
+      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
+                     ? 1 : -1)];
+      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
+                     ? 1 : -1)];
+      int i = 63;]],
+    [[/* Test availability of runtime routines for shift and division.  */
+      long long int llmax = 9223372036854775807ll;
+      unsigned long long int ullmax = 18446744073709551615ull;
+      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
+              | (llmax / ll) | (llmax % ll)
+              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
+              | (ullmax / ull) | (ullmax % ull));]])
+])
diff --git a/gnulib_m4/math_h.m4 b/gnulib_m4/math_h.m4
new file mode 100644 (file)
index 0000000..d0c7ed1
--- /dev/null
@@ -0,0 +1,366 @@
+# math_h.m4 serial 116
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_MATH_H],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  gl_CHECK_NEXT_HEADERS([math.h])
+
+  AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]],
+      [[/* Solaris 10 has a broken definition of NAN.  Other platforms
+        fail to provide NAN, or provide it only in C99 mode; this
+        test only needs to fail when NAN is provided but wrong.  */
+         float f = 1.0f;
+#ifdef NAN
+         f = NAN;
+#endif
+         return f == 0;]])],
+      [gl_cv_header_math_nan_works=yes],
+      [gl_cv_header_math_nan_works=no])])
+  if test $gl_cv_header_math_nan_works = no; then
+    REPLACE_NAN=1
+  fi
+  AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[@%:@include <math.h>]],
+      [[/* Solaris 10 has a broken definition of HUGE_VAL.  */
+         double d = HUGE_VAL;
+         return d == 0;]])],
+      [gl_cv_header_math_huge_val_works=yes],
+      [gl_cv_header_math_huge_val_works=no])])
+  if test $gl_cv_header_math_huge_val_works = no; then
+    REPLACE_HUGE_VAL=1
+  fi
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[#include <math.h>]],
+    [acosf acosl asinf asinl atanf atanl
+     cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf
+     expf expl exp2 exp2f exp2l expm1 expm1f expm1l
+     fabsf fabsl floorf floorl fma fmaf fmal
+     fmod fmodf fmodl frexpf frexpl hypotf hypotl
+     ilogb ilogbf ilogbl
+     ldexpf ldexpl
+     log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l
+     logb logbf logbl
+     modf modff modfl powf
+     remainder remainderf remainderl
+     rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl
+     tanf tanl tanhf trunc truncf truncl])
+])
+
+AC_DEFUN([gl_MATH_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_MATH_H_DEFAULTS],
+[
+  GNULIB_ACOSF=0;      AC_SUBST([GNULIB_ACOSF])
+  GNULIB_ACOSL=0;      AC_SUBST([GNULIB_ACOSL])
+  GNULIB_ASINF=0;      AC_SUBST([GNULIB_ASINF])
+  GNULIB_ASINL=0;      AC_SUBST([GNULIB_ASINL])
+  GNULIB_ATANF=0;      AC_SUBST([GNULIB_ATANF])
+  GNULIB_ATANL=0;      AC_SUBST([GNULIB_ATANL])
+  GNULIB_ATAN2F=0;     AC_SUBST([GNULIB_ATAN2F])
+  GNULIB_CBRT=0;       AC_SUBST([GNULIB_CBRT])
+  GNULIB_CBRTF=0;      AC_SUBST([GNULIB_CBRTF])
+  GNULIB_CBRTL=0;      AC_SUBST([GNULIB_CBRTL])
+  GNULIB_CEIL=0;       AC_SUBST([GNULIB_CEIL])
+  GNULIB_CEILF=0;      AC_SUBST([GNULIB_CEILF])
+  GNULIB_CEILL=0;      AC_SUBST([GNULIB_CEILL])
+  GNULIB_COPYSIGN=0;   AC_SUBST([GNULIB_COPYSIGN])
+  GNULIB_COPYSIGNF=0;  AC_SUBST([GNULIB_COPYSIGNF])
+  GNULIB_COPYSIGNL=0;  AC_SUBST([GNULIB_COPYSIGNL])
+  GNULIB_COSF=0;       AC_SUBST([GNULIB_COSF])
+  GNULIB_COSL=0;       AC_SUBST([GNULIB_COSL])
+  GNULIB_COSHF=0;      AC_SUBST([GNULIB_COSHF])
+  GNULIB_EXPF=0;       AC_SUBST([GNULIB_EXPF])
+  GNULIB_EXPL=0;       AC_SUBST([GNULIB_EXPL])
+  GNULIB_EXP2=0;       AC_SUBST([GNULIB_EXP2])
+  GNULIB_EXP2F=0;      AC_SUBST([GNULIB_EXP2F])
+  GNULIB_EXP2L=0;      AC_SUBST([GNULIB_EXP2L])
+  GNULIB_EXPM1=0;      AC_SUBST([GNULIB_EXPM1])
+  GNULIB_EXPM1F=0;     AC_SUBST([GNULIB_EXPM1F])
+  GNULIB_EXPM1L=0;     AC_SUBST([GNULIB_EXPM1L])
+  GNULIB_FABSF=0;      AC_SUBST([GNULIB_FABSF])
+  GNULIB_FABSL=0;      AC_SUBST([GNULIB_FABSL])
+  GNULIB_FLOOR=0;      AC_SUBST([GNULIB_FLOOR])
+  GNULIB_FLOORF=0;     AC_SUBST([GNULIB_FLOORF])
+  GNULIB_FLOORL=0;     AC_SUBST([GNULIB_FLOORL])
+  GNULIB_FMA=0;        AC_SUBST([GNULIB_FMA])
+  GNULIB_FMAF=0;       AC_SUBST([GNULIB_FMAF])
+  GNULIB_FMAL=0;       AC_SUBST([GNULIB_FMAL])
+  GNULIB_FMOD=0;       AC_SUBST([GNULIB_FMOD])
+  GNULIB_FMODF=0;      AC_SUBST([GNULIB_FMODF])
+  GNULIB_FMODL=0;      AC_SUBST([GNULIB_FMODL])
+  GNULIB_FREXPF=0;     AC_SUBST([GNULIB_FREXPF])
+  GNULIB_FREXP=0;      AC_SUBST([GNULIB_FREXP])
+  GNULIB_FREXPL=0;     AC_SUBST([GNULIB_FREXPL])
+  GNULIB_HYPOT=0;      AC_SUBST([GNULIB_HYPOT])
+  GNULIB_HYPOTF=0;     AC_SUBST([GNULIB_HYPOTF])
+  GNULIB_HYPOTL=0;     AC_SUBST([GNULIB_HYPOTL])
+  GNULIB_ILOGB=0;      AC_SUBST([GNULIB_ILOGB])
+  GNULIB_ILOGBF=0;     AC_SUBST([GNULIB_ILOGBF])
+  GNULIB_ILOGBL=0;     AC_SUBST([GNULIB_ILOGBL])
+  GNULIB_ISFINITE=0;   AC_SUBST([GNULIB_ISFINITE])
+  GNULIB_ISINF=0;      AC_SUBST([GNULIB_ISINF])
+  GNULIB_ISNAN=0;      AC_SUBST([GNULIB_ISNAN])
+  GNULIB_ISNANF=0;     AC_SUBST([GNULIB_ISNANF])
+  GNULIB_ISNAND=0;     AC_SUBST([GNULIB_ISNAND])
+  GNULIB_ISNANL=0;     AC_SUBST([GNULIB_ISNANL])
+  GNULIB_LDEXPF=0;     AC_SUBST([GNULIB_LDEXPF])
+  GNULIB_LDEXPL=0;     AC_SUBST([GNULIB_LDEXPL])
+  GNULIB_LOG=0;        AC_SUBST([GNULIB_LOG])
+  GNULIB_LOGF=0;       AC_SUBST([GNULIB_LOGF])
+  GNULIB_LOGL=0;       AC_SUBST([GNULIB_LOGL])
+  GNULIB_LOG10=0;      AC_SUBST([GNULIB_LOG10])
+  GNULIB_LOG10F=0;     AC_SUBST([GNULIB_LOG10F])
+  GNULIB_LOG10L=0;     AC_SUBST([GNULIB_LOG10L])
+  GNULIB_LOG1P=0;      AC_SUBST([GNULIB_LOG1P])
+  GNULIB_LOG1PF=0;     AC_SUBST([GNULIB_LOG1PF])
+  GNULIB_LOG1PL=0;     AC_SUBST([GNULIB_LOG1PL])
+  GNULIB_LOG2=0;       AC_SUBST([GNULIB_LOG2])
+  GNULIB_LOG2F=0;      AC_SUBST([GNULIB_LOG2F])
+  GNULIB_LOG2L=0;      AC_SUBST([GNULIB_LOG2L])
+  GNULIB_LOGB=0;       AC_SUBST([GNULIB_LOGB])
+  GNULIB_LOGBF=0;      AC_SUBST([GNULIB_LOGBF])
+  GNULIB_LOGBL=0;      AC_SUBST([GNULIB_LOGBL])
+  GNULIB_MODF=0;       AC_SUBST([GNULIB_MODF])
+  GNULIB_MODFF=0;      AC_SUBST([GNULIB_MODFF])
+  GNULIB_MODFL=0;      AC_SUBST([GNULIB_MODFL])
+  GNULIB_POWF=0;       AC_SUBST([GNULIB_POWF])
+  GNULIB_REMAINDER=0;  AC_SUBST([GNULIB_REMAINDER])
+  GNULIB_REMAINDERF=0; AC_SUBST([GNULIB_REMAINDERF])
+  GNULIB_REMAINDERL=0; AC_SUBST([GNULIB_REMAINDERL])
+  GNULIB_RINT=0;       AC_SUBST([GNULIB_RINT])
+  GNULIB_RINTF=0;      AC_SUBST([GNULIB_RINTF])
+  GNULIB_RINTL=0;      AC_SUBST([GNULIB_RINTL])
+  GNULIB_ROUND=0;      AC_SUBST([GNULIB_ROUND])
+  GNULIB_ROUNDF=0;     AC_SUBST([GNULIB_ROUNDF])
+  GNULIB_ROUNDL=0;     AC_SUBST([GNULIB_ROUNDL])
+  GNULIB_SIGNBIT=0;    AC_SUBST([GNULIB_SIGNBIT])
+  GNULIB_SINF=0;       AC_SUBST([GNULIB_SINF])
+  GNULIB_SINL=0;       AC_SUBST([GNULIB_SINL])
+  GNULIB_SINHF=0;      AC_SUBST([GNULIB_SINHF])
+  GNULIB_SQRTF=0;      AC_SUBST([GNULIB_SQRTF])
+  GNULIB_SQRTL=0;      AC_SUBST([GNULIB_SQRTL])
+  GNULIB_TANF=0;       AC_SUBST([GNULIB_TANF])
+  GNULIB_TANL=0;       AC_SUBST([GNULIB_TANL])
+  GNULIB_TANHF=0;      AC_SUBST([GNULIB_TANHF])
+  GNULIB_TRUNC=0;      AC_SUBST([GNULIB_TRUNC])
+  GNULIB_TRUNCF=0;     AC_SUBST([GNULIB_TRUNCF])
+  GNULIB_TRUNCL=0;     AC_SUBST([GNULIB_TRUNCL])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_ACOSF=1;                AC_SUBST([HAVE_ACOSF])
+  HAVE_ACOSL=1;                AC_SUBST([HAVE_ACOSL])
+  HAVE_ASINF=1;                AC_SUBST([HAVE_ASINF])
+  HAVE_ASINL=1;                AC_SUBST([HAVE_ASINL])
+  HAVE_ATANF=1;                AC_SUBST([HAVE_ATANF])
+  HAVE_ATANL=1;                AC_SUBST([HAVE_ATANL])
+  HAVE_ATAN2F=1;               AC_SUBST([HAVE_ATAN2F])
+  HAVE_CBRT=1;                 AC_SUBST([HAVE_CBRT])
+  HAVE_CBRTF=1;                AC_SUBST([HAVE_CBRTF])
+  HAVE_CBRTL=1;                AC_SUBST([HAVE_CBRTL])
+  HAVE_COPYSIGN=1;             AC_SUBST([HAVE_COPYSIGN])
+  HAVE_COPYSIGNL=1;            AC_SUBST([HAVE_COPYSIGNL])
+  HAVE_COSF=1;                 AC_SUBST([HAVE_COSF])
+  HAVE_COSL=1;                 AC_SUBST([HAVE_COSL])
+  HAVE_COSHF=1;                AC_SUBST([HAVE_COSHF])
+  HAVE_EXPF=1;                 AC_SUBST([HAVE_EXPF])
+  HAVE_EXPL=1;                 AC_SUBST([HAVE_EXPL])
+  HAVE_EXPM1=1;                AC_SUBST([HAVE_EXPM1])
+  HAVE_EXPM1F=1;               AC_SUBST([HAVE_EXPM1F])
+  HAVE_FABSF=1;                AC_SUBST([HAVE_FABSF])
+  HAVE_FABSL=1;                AC_SUBST([HAVE_FABSL])
+  HAVE_FMA=1;                  AC_SUBST([HAVE_FMA])
+  HAVE_FMAF=1;                 AC_SUBST([HAVE_FMAF])
+  HAVE_FMAL=1;                 AC_SUBST([HAVE_FMAL])
+  HAVE_FMODF=1;                AC_SUBST([HAVE_FMODF])
+  HAVE_FMODL=1;                AC_SUBST([HAVE_FMODL])
+  HAVE_FREXPF=1;               AC_SUBST([HAVE_FREXPF])
+  HAVE_HYPOTF=1;               AC_SUBST([HAVE_HYPOTF])
+  HAVE_HYPOTL=1;               AC_SUBST([HAVE_HYPOTL])
+  HAVE_ILOGB=1;                AC_SUBST([HAVE_ILOGB])
+  HAVE_ILOGBF=1;               AC_SUBST([HAVE_ILOGBF])
+  HAVE_ILOGBL=1;               AC_SUBST([HAVE_ILOGBL])
+  HAVE_ISNANF=1;               AC_SUBST([HAVE_ISNANF])
+  HAVE_ISNAND=1;               AC_SUBST([HAVE_ISNAND])
+  HAVE_ISNANL=1;               AC_SUBST([HAVE_ISNANL])
+  HAVE_LDEXPF=1;               AC_SUBST([HAVE_LDEXPF])
+  HAVE_LOGF=1;                 AC_SUBST([HAVE_LOGF])
+  HAVE_LOGL=1;                 AC_SUBST([HAVE_LOGL])
+  HAVE_LOG10F=1;               AC_SUBST([HAVE_LOG10F])
+  HAVE_LOG10L=1;               AC_SUBST([HAVE_LOG10L])
+  HAVE_LOG1P=1;                AC_SUBST([HAVE_LOG1P])
+  HAVE_LOG1PF=1;               AC_SUBST([HAVE_LOG1PF])
+  HAVE_LOG1PL=1;               AC_SUBST([HAVE_LOG1PL])
+  HAVE_LOGBF=1;                AC_SUBST([HAVE_LOGBF])
+  HAVE_LOGBL=1;                AC_SUBST([HAVE_LOGBL])
+  HAVE_MODFF=1;                AC_SUBST([HAVE_MODFF])
+  HAVE_MODFL=1;                AC_SUBST([HAVE_MODFL])
+  HAVE_POWF=1;                 AC_SUBST([HAVE_POWF])
+  HAVE_REMAINDER=1;            AC_SUBST([HAVE_REMAINDER])
+  HAVE_REMAINDERF=1;           AC_SUBST([HAVE_REMAINDERF])
+  HAVE_RINT=1;                 AC_SUBST([HAVE_RINT])
+  HAVE_RINTL=1;                AC_SUBST([HAVE_RINTL])
+  HAVE_SINF=1;                 AC_SUBST([HAVE_SINF])
+  HAVE_SINL=1;                 AC_SUBST([HAVE_SINL])
+  HAVE_SINHF=1;                AC_SUBST([HAVE_SINHF])
+  HAVE_SQRTF=1;                AC_SUBST([HAVE_SQRTF])
+  HAVE_SQRTL=1;                AC_SUBST([HAVE_SQRTL])
+  HAVE_TANF=1;                 AC_SUBST([HAVE_TANF])
+  HAVE_TANL=1;                 AC_SUBST([HAVE_TANL])
+  HAVE_TANHF=1;                AC_SUBST([HAVE_TANHF])
+  HAVE_DECL_ACOSL=1;           AC_SUBST([HAVE_DECL_ACOSL])
+  HAVE_DECL_ASINL=1;           AC_SUBST([HAVE_DECL_ASINL])
+  HAVE_DECL_ATANL=1;           AC_SUBST([HAVE_DECL_ATANL])
+  HAVE_DECL_CBRTF=1;           AC_SUBST([HAVE_DECL_CBRTF])
+  HAVE_DECL_CBRTL=1;           AC_SUBST([HAVE_DECL_CBRTL])
+  HAVE_DECL_CEILF=1;           AC_SUBST([HAVE_DECL_CEILF])
+  HAVE_DECL_CEILL=1;           AC_SUBST([HAVE_DECL_CEILL])
+  HAVE_DECL_COPYSIGNF=1;       AC_SUBST([HAVE_DECL_COPYSIGNF])
+  HAVE_DECL_COSL=1;            AC_SUBST([HAVE_DECL_COSL])
+  HAVE_DECL_EXPL=1;            AC_SUBST([HAVE_DECL_EXPL])
+  HAVE_DECL_EXP2=1;            AC_SUBST([HAVE_DECL_EXP2])
+  HAVE_DECL_EXP2F=1;           AC_SUBST([HAVE_DECL_EXP2F])
+  HAVE_DECL_EXP2L=1;           AC_SUBST([HAVE_DECL_EXP2L])
+  HAVE_DECL_EXPM1L=1;          AC_SUBST([HAVE_DECL_EXPM1L])
+  HAVE_DECL_FLOORF=1;          AC_SUBST([HAVE_DECL_FLOORF])
+  HAVE_DECL_FLOORL=1;          AC_SUBST([HAVE_DECL_FLOORL])
+  HAVE_DECL_FREXPL=1;          AC_SUBST([HAVE_DECL_FREXPL])
+  HAVE_DECL_LDEXPL=1;          AC_SUBST([HAVE_DECL_LDEXPL])
+  HAVE_DECL_LOGL=1;            AC_SUBST([HAVE_DECL_LOGL])
+  HAVE_DECL_LOG10L=1;          AC_SUBST([HAVE_DECL_LOG10L])
+  HAVE_DECL_LOG2=1;            AC_SUBST([HAVE_DECL_LOG2])
+  HAVE_DECL_LOG2F=1;           AC_SUBST([HAVE_DECL_LOG2F])
+  HAVE_DECL_LOG2L=1;           AC_SUBST([HAVE_DECL_LOG2L])
+  HAVE_DECL_LOGB=1;            AC_SUBST([HAVE_DECL_LOGB])
+  HAVE_DECL_REMAINDER=1;       AC_SUBST([HAVE_DECL_REMAINDER])
+  HAVE_DECL_REMAINDERL=1;      AC_SUBST([HAVE_DECL_REMAINDERL])
+  HAVE_DECL_RINTF=1;           AC_SUBST([HAVE_DECL_RINTF])
+  HAVE_DECL_ROUND=1;           AC_SUBST([HAVE_DECL_ROUND])
+  HAVE_DECL_ROUNDF=1;          AC_SUBST([HAVE_DECL_ROUNDF])
+  HAVE_DECL_ROUNDL=1;          AC_SUBST([HAVE_DECL_ROUNDL])
+  HAVE_DECL_SINL=1;            AC_SUBST([HAVE_DECL_SINL])
+  HAVE_DECL_SQRTL=1;           AC_SUBST([HAVE_DECL_SQRTL])
+  HAVE_DECL_TANL=1;            AC_SUBST([HAVE_DECL_TANL])
+  HAVE_DECL_TRUNC=1;           AC_SUBST([HAVE_DECL_TRUNC])
+  HAVE_DECL_TRUNCF=1;          AC_SUBST([HAVE_DECL_TRUNCF])
+  HAVE_DECL_TRUNCL=1;          AC_SUBST([HAVE_DECL_TRUNCL])
+  REPLACE_ACOSF=0;             AC_SUBST([REPLACE_ACOSF])
+  REPLACE_ASINF=0;             AC_SUBST([REPLACE_ASINF])
+  REPLACE_ATANF=0;             AC_SUBST([REPLACE_ATANF])
+  REPLACE_ATAN2F=0;            AC_SUBST([REPLACE_ATAN2F])
+  REPLACE_CBRTF=0;             AC_SUBST([REPLACE_CBRTF])
+  REPLACE_CBRTL=0;             AC_SUBST([REPLACE_CBRTL])
+  REPLACE_CEIL=0;              AC_SUBST([REPLACE_CEIL])
+  REPLACE_CEILF=0;             AC_SUBST([REPLACE_CEILF])
+  REPLACE_CEILL=0;             AC_SUBST([REPLACE_CEILL])
+  REPLACE_COSF=0;              AC_SUBST([REPLACE_COSF])
+  REPLACE_COSHF=0;             AC_SUBST([REPLACE_COSHF])
+  REPLACE_EXPF=0;              AC_SUBST([REPLACE_EXPF])
+  REPLACE_EXPM1=0;             AC_SUBST([REPLACE_EXPM1])
+  REPLACE_EXPM1F=0;            AC_SUBST([REPLACE_EXPM1F])
+  REPLACE_EXP2=0;              AC_SUBST([REPLACE_EXP2])
+  REPLACE_EXP2L=0;             AC_SUBST([REPLACE_EXP2L])
+  REPLACE_FABSL=0;             AC_SUBST([REPLACE_FABSL])
+  REPLACE_FLOOR=0;             AC_SUBST([REPLACE_FLOOR])
+  REPLACE_FLOORF=0;            AC_SUBST([REPLACE_FLOORF])
+  REPLACE_FLOORL=0;            AC_SUBST([REPLACE_FLOORL])
+  REPLACE_FMA=0;               AC_SUBST([REPLACE_FMA])
+  REPLACE_FMAF=0;              AC_SUBST([REPLACE_FMAF])
+  REPLACE_FMAL=0;              AC_SUBST([REPLACE_FMAL])
+  REPLACE_FMOD=0;              AC_SUBST([REPLACE_FMOD])
+  REPLACE_FMODF=0;             AC_SUBST([REPLACE_FMODF])
+  REPLACE_FMODL=0;             AC_SUBST([REPLACE_FMODL])
+  REPLACE_FREXPF=0;            AC_SUBST([REPLACE_FREXPF])
+  REPLACE_FREXP=0;             AC_SUBST([REPLACE_FREXP])
+  REPLACE_FREXPL=0;            AC_SUBST([REPLACE_FREXPL])
+  REPLACE_HUGE_VAL=0;          AC_SUBST([REPLACE_HUGE_VAL])
+  REPLACE_HYPOT=0;             AC_SUBST([REPLACE_HYPOT])
+  REPLACE_HYPOTF=0;            AC_SUBST([REPLACE_HYPOTF])
+  REPLACE_HYPOTL=0;            AC_SUBST([REPLACE_HYPOTL])
+  REPLACE_ILOGB=0;             AC_SUBST([REPLACE_ILOGB])
+  REPLACE_ILOGBF=0;            AC_SUBST([REPLACE_ILOGBF])
+  REPLACE_ILOGBL=0;            AC_SUBST([REPLACE_ILOGBL])
+  REPLACE_ISFINITE=0;          AC_SUBST([REPLACE_ISFINITE])
+  REPLACE_ISINF=0;             AC_SUBST([REPLACE_ISINF])
+  REPLACE_ISNAN=0;             AC_SUBST([REPLACE_ISNAN])
+  REPLACE_LDEXPL=0;            AC_SUBST([REPLACE_LDEXPL])
+  REPLACE_LOG=0;               AC_SUBST([REPLACE_LOG])
+  REPLACE_LOGF=0;              AC_SUBST([REPLACE_LOGF])
+  REPLACE_LOGL=0;              AC_SUBST([REPLACE_LOGL])
+  REPLACE_LOG10=0;             AC_SUBST([REPLACE_LOG10])
+  REPLACE_LOG10F=0;            AC_SUBST([REPLACE_LOG10F])
+  REPLACE_LOG10L=0;            AC_SUBST([REPLACE_LOG10L])
+  REPLACE_LOG1P=0;             AC_SUBST([REPLACE_LOG1P])
+  REPLACE_LOG1PF=0;            AC_SUBST([REPLACE_LOG1PF])
+  REPLACE_LOG1PL=0;            AC_SUBST([REPLACE_LOG1PL])
+  REPLACE_LOG2=0;              AC_SUBST([REPLACE_LOG2])
+  REPLACE_LOG2F=0;             AC_SUBST([REPLACE_LOG2F])
+  REPLACE_LOG2L=0;             AC_SUBST([REPLACE_LOG2L])
+  REPLACE_LOGB=0;              AC_SUBST([REPLACE_LOGB])
+  REPLACE_LOGBF=0;             AC_SUBST([REPLACE_LOGBF])
+  REPLACE_LOGBL=0;             AC_SUBST([REPLACE_LOGBL])
+  REPLACE_MODF=0;              AC_SUBST([REPLACE_MODF])
+  REPLACE_MODFF=0;             AC_SUBST([REPLACE_MODFF])
+  REPLACE_MODFL=0;             AC_SUBST([REPLACE_MODFL])
+  REPLACE_NAN=0;               AC_SUBST([REPLACE_NAN])
+  REPLACE_REMAINDER=0;         AC_SUBST([REPLACE_REMAINDER])
+  REPLACE_REMAINDERF=0;        AC_SUBST([REPLACE_REMAINDERF])
+  REPLACE_REMAINDERL=0;        AC_SUBST([REPLACE_REMAINDERL])
+  REPLACE_ROUND=0;             AC_SUBST([REPLACE_ROUND])
+  REPLACE_ROUNDF=0;            AC_SUBST([REPLACE_ROUNDF])
+  REPLACE_ROUNDL=0;            AC_SUBST([REPLACE_ROUNDL])
+  REPLACE_SIGNBIT=0;           AC_SUBST([REPLACE_SIGNBIT])
+  REPLACE_SIGNBIT_USING_GCC=0; AC_SUBST([REPLACE_SIGNBIT_USING_GCC])
+  REPLACE_SINF=0;              AC_SUBST([REPLACE_SINF])
+  REPLACE_SINHF=0;             AC_SUBST([REPLACE_SINHF])
+  REPLACE_SQRTF=0;             AC_SUBST([REPLACE_SQRTF])
+  REPLACE_SQRTL=0;             AC_SUBST([REPLACE_SQRTL])
+  REPLACE_TANF=0;              AC_SUBST([REPLACE_TANF])
+  REPLACE_TANHF=0;             AC_SUBST([REPLACE_TANHF])
+  REPLACE_TRUNC=0;             AC_SUBST([REPLACE_TRUNC])
+  REPLACE_TRUNCF=0;            AC_SUBST([REPLACE_TRUNCF])
+  REPLACE_TRUNCL=0;            AC_SUBST([REPLACE_TRUNCL])
+])
+
+# gl_LONG_DOUBLE_VS_DOUBLE
+# determines whether 'long double' and 'double' have the same representation.
+# Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines
+# HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly.
+# The currently known platforms where this is the case are:
+# Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9.
+AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE],
+[
+  AC_CACHE_CHECK([whether long double and double are the same],
+    [gl_cv_long_double_equals_double],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM([[#include <float.h>]],
+          [[typedef int check[sizeof (long double) == sizeof (double)
+                              && LDBL_MANT_DIG == DBL_MANT_DIG
+                              && LDBL_MAX_EXP == DBL_MAX_EXP
+                              && LDBL_MIN_EXP == DBL_MIN_EXP
+                              ? 1 : -1];
+          ]])],
+       [gl_cv_long_double_equals_double=yes],
+       [gl_cv_long_double_equals_double=no])
+    ])
+  if test $gl_cv_long_double_equals_double = yes; then
+    AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1],
+      [Define to 1 if 'long double' and 'double' have the same representation.])
+    HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1
+  else
+    HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0
+  fi
+  AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE])
+])
diff --git a/gnulib_m4/memchr.m4 b/gnulib_m4/memchr.m4
new file mode 100644 (file)
index 0000000..83c65c1
--- /dev/null
@@ -0,0 +1,99 @@
+# memchr.m4 serial 13
+dnl Copyright (C) 2002-2004, 2009-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_FUNC_MEMCHR],
+[
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  dnl Check for prerequisites for memory fence checks.
+  gl_FUNC_MMAP_ANON
+  AC_CHECK_HEADERS_ONCE([sys/mman.h])
+  AC_CHECK_FUNCS_ONCE([mprotect])
+
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [
+    dnl These days, we assume memchr is present.  But if support for old
+    dnl platforms is desired:
+    AC_CHECK_FUNCS_ONCE([memchr])
+    if test $ac_cv_func_memchr = no; then
+      HAVE_MEMCHR=0
+    fi
+  ])
+  if test $HAVE_MEMCHR = 1; then
+    # Detect platform-specific bugs in some versions of glibc:
+    # memchr should not dereference anything with length 0
+    #   https://bugzilla.redhat.com/show_bug.cgi?id=499689
+    # memchr should not dereference overestimated length after a match
+    #   https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737
+    #   https://sourceware.org/bugzilla/show_bug.cgi?id=10162
+    # Assume that memchr works on platforms that lack mprotect.
+    AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works],
+      [AC_RUN_IFELSE([AC_LANG_PROGRAM([[
+#include <string.h>
+#if HAVE_SYS_MMAN_H
+# include <fcntl.h>
+# include <unistd.h>
+# include <sys/types.h>
+# include <sys/mman.h>
+# ifndef MAP_FILE
+#  define MAP_FILE 0
+# endif
+#endif
+]], [[
+  int result = 0;
+  char *fence = NULL;
+#if HAVE_SYS_MMAN_H && HAVE_MPROTECT
+# if HAVE_MAP_ANONYMOUS
+  const int flags = MAP_ANONYMOUS | MAP_PRIVATE;
+  const int fd = -1;
+# else /* !HAVE_MAP_ANONYMOUS */
+  const int flags = MAP_FILE | MAP_PRIVATE;
+  int fd = open ("/dev/zero", O_RDONLY, 0666);
+  if (fd >= 0)
+# endif
+    {
+      int pagesize = getpagesize ();
+      char *two_pages =
+        (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE,
+                       flags, fd, 0);
+      if (two_pages != (char *)(-1)
+          && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0)
+        fence = two_pages + pagesize;
+    }
+#endif
+  if (fence)
+    {
+      if (memchr (fence, 0, 0))
+        result |= 1;
+      strcpy (fence - 9, "12345678");
+      if (memchr (fence - 9, 0, 79) != fence - 1)
+        result |= 2;
+      if (memchr (fence - 1, 0, 3) != fence - 1)
+        result |= 4;
+    }
+  return result;
+]])],
+         [gl_cv_func_memchr_works=yes],
+         [gl_cv_func_memchr_works=no],
+         [case "$host_os" in
+                    # Guess yes on native Windows.
+            mingw*) gl_cv_func_memchr_works="guessing yes" ;;
+                    # Be pessimistic for now.
+            *)      gl_cv_func_memchr_works="guessing no" ;;
+          esac
+         ])
+      ])
+    case "$gl_cv_func_memchr_works" in
+      *yes) ;;
+      *) REPLACE_MEMCHR=1 ;;
+    esac
+  fi
+])
+
+# Prerequisites of lib/memchr.c.
+AC_DEFUN([gl_PREREQ_MEMCHR], [
+  AC_CHECK_HEADERS([bp-sym.h])
+])
diff --git a/gnulib_m4/mmap-anon.m4 b/gnulib_m4/mmap-anon.m4
new file mode 100644 (file)
index 0000000..55fea82
--- /dev/null
@@ -0,0 +1,55 @@
+# mmap-anon.m4 serial 10
+dnl Copyright (C) 2005, 2007, 2009-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Detect how mmap can be used to create anonymous (not file-backed) memory
+# mappings.
+# - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS
+#   and MAP_ANON exist and have the same value.
+# - On HP-UX, only MAP_ANONYMOUS exists.
+# - On Mac OS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists.
+# - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be
+#   used.
+
+AC_DEFUN([gl_FUNC_MMAP_ANON],
+[
+  dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS.
+  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
+
+  # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it
+  # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is
+  # irrelevant for anonymous mappings.
+  AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no])
+
+  # Try to allow MAP_ANONYMOUS.
+  gl_have_mmap_anonymous=no
+  if test $gl_have_mmap = yes; then
+    AC_MSG_CHECKING([for MAP_ANONYMOUS])
+    AC_EGREP_CPP([I cannot identify this map], [
+#include <sys/mman.h>
+#ifdef MAP_ANONYMOUS
+    I cannot identify this map
+#endif
+],
+      [gl_have_mmap_anonymous=yes])
+    if test $gl_have_mmap_anonymous != yes; then
+      AC_EGREP_CPP([I cannot identify this map], [
+#include <sys/mman.h>
+#ifdef MAP_ANON
+    I cannot identify this map
+#endif
+],
+        [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON],
+          [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.])
+         gl_have_mmap_anonymous=yes])
+    fi
+    AC_MSG_RESULT([$gl_have_mmap_anonymous])
+    if test $gl_have_mmap_anonymous = yes; then
+      AC_DEFINE([HAVE_MAP_ANONYMOUS], [1],
+        [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+         config.h and <sys/mman.h>.])
+    fi
+  fi
+])
diff --git a/gnulib_m4/multiarch.m4 b/gnulib_m4/multiarch.m4
new file mode 100644 (file)
index 0000000..38a11cc
--- /dev/null
@@ -0,0 +1,62 @@
+# multiarch.m4 serial 7
+dnl Copyright (C) 2008-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# Determine whether the compiler is or may be producing universal binaries.
+#
+# On Mac OS X 10.5 and later systems, the user can create libraries and
+# executables that work on multiple system types--known as "fat" or
+# "universal" binaries--by specifying multiple '-arch' options to the
+# compiler but only a single '-arch' option to the preprocessor.  Like
+# this:
+#
+#     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+#                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
+#                 CPP="gcc -E" CXXCPP="g++ -E"
+#
+# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly.
+
+AC_DEFUN_ONCE([gl_MULTIARCH],
+[
+  dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN.
+  gl_cv_c_multiarch=no
+  AC_COMPILE_IFELSE(
+    [AC_LANG_SOURCE(
+      [[#ifndef __APPLE_CC__
+         not a universal capable compiler
+        #endif
+        typedef int dummy;
+      ]])],
+    [
+     dnl Check for potential -arch flags.  It is not universal unless
+     dnl there are at least two -arch flags with different values.
+     arch=
+     prev=
+     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
+       if test -n "$prev"; then
+         case $word in
+           i?86 | x86_64 | ppc | ppc64)
+             if test -z "$arch" || test "$arch" = "$word"; then
+               arch="$word"
+             else
+               gl_cv_c_multiarch=yes
+             fi
+             ;;
+         esac
+         prev=
+       else
+         if test "x$word" = "x-arch"; then
+           prev=arch
+         fi
+       fi
+     done
+    ])
+  if test $gl_cv_c_multiarch = yes; then
+    APPLE_UNIVERSAL_BUILD=1
+  else
+    APPLE_UNIVERSAL_BUILD=0
+  fi
+  AC_SUBST([APPLE_UNIVERSAL_BUILD])
+])
diff --git a/gnulib_m4/nocrash.m4 b/gnulib_m4/nocrash.m4
new file mode 100644 (file)
index 0000000..4914007
--- /dev/null
@@ -0,0 +1,131 @@
+# nocrash.m4 serial 5
+dnl Copyright (C) 2005, 2009-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini.
+
+AC_PREREQ([2.13])
+
+dnl Expands to some code for use in .c programs that will cause the configure
+dnl test to exit instead of crashing. This is useful to avoid triggering
+dnl action from a background debugger and to avoid core dumps.
+dnl Usage:   ...
+dnl          ]GL_NOCRASH[
+dnl          ...
+dnl          int main() { nocrash_init(); ... }
+AC_DEFUN([GL_NOCRASH],[[
+#include <stdlib.h>
+#if defined __MACH__ && defined __APPLE__
+/* Avoid a crash on Mac OS X.  */
+#include <mach/mach.h>
+#include <mach/mach_error.h>
+#include <mach/thread_status.h>
+#include <mach/exception.h>
+#include <mach/task.h>
+#include <pthread.h>
+/* The exception port on which our thread listens.  */
+static mach_port_t our_exception_port;
+/* The main function of the thread listening for exceptions of type
+   EXC_BAD_ACCESS.  */
+static void *
+mach_exception_thread (void *arg)
+{
+  /* Buffer for a message to be received.  */
+  struct {
+    mach_msg_header_t head;
+    mach_msg_body_t msgh_body;
+    char data[1024];
+  } msg;
+  mach_msg_return_t retval;
+  /* Wait for a message on the exception port.  */
+  retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg),
+                     our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL);
+  if (retval != MACH_MSG_SUCCESS)
+    abort ();
+  exit (1);
+}
+static void
+nocrash_init (void)
+{
+  mach_port_t self = mach_task_self ();
+  /* Allocate a port on which the thread shall listen for exceptions.  */
+  if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port)
+      == KERN_SUCCESS) {
+    /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html.  */
+    if (mach_port_insert_right (self, our_exception_port, our_exception_port,
+                                MACH_MSG_TYPE_MAKE_SEND)
+        == KERN_SUCCESS) {
+      /* The exceptions we want to catch.  Only EXC_BAD_ACCESS is interesting
+         for us.  */
+      exception_mask_t mask = EXC_MASK_BAD_ACCESS;
+      /* Create the thread listening on the exception port.  */
+      pthread_attr_t attr;
+      pthread_t thread;
+      if (pthread_attr_init (&attr) == 0
+          && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0
+          && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) {
+        pthread_attr_destroy (&attr);
+        /* Replace the exception port info for these exceptions with our own.
+           Note that we replace the exception port for the entire task, not only
+           for a particular thread.  This has the effect that when our exception
+           port gets the message, the thread specific exception port has already
+           been asked, and we don't need to bother about it.
+           See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html.  */
+        task_set_exception_ports (self, mask, our_exception_port,
+                                  EXCEPTION_DEFAULT, MACHINE_THREAD_STATE);
+      }
+    }
+  }
+}
+#elif defined _WIN32 && ! defined __CYGWIN__
+/* Avoid a crash on native Windows.  */
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#include <winerror.h>
+static LONG WINAPI
+exception_filter (EXCEPTION_POINTERS *ExceptionInfo)
+{
+  switch (ExceptionInfo->ExceptionRecord->ExceptionCode)
+    {
+    case EXCEPTION_ACCESS_VIOLATION:
+    case EXCEPTION_IN_PAGE_ERROR:
+    case EXCEPTION_STACK_OVERFLOW:
+    case EXCEPTION_GUARD_PAGE:
+    case EXCEPTION_PRIV_INSTRUCTION:
+    case EXCEPTION_ILLEGAL_INSTRUCTION:
+    case EXCEPTION_DATATYPE_MISALIGNMENT:
+    case EXCEPTION_ARRAY_BOUNDS_EXCEEDED:
+    case EXCEPTION_NONCONTINUABLE_EXCEPTION:
+      exit (1);
+    }
+  return EXCEPTION_CONTINUE_SEARCH;
+}
+static void
+nocrash_init (void)
+{
+  SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter);
+}
+#else
+/* Avoid a crash on POSIX systems.  */
+#include <signal.h>
+#include <unistd.h>
+/* A POSIX signal handler.  */
+static void
+exception_handler (int sig)
+{
+  _exit (1);
+}
+static void
+nocrash_init (void)
+{
+#ifdef SIGSEGV
+  signal (SIGSEGV, exception_handler);
+#endif
+#ifdef SIGBUS
+  signal (SIGBUS, exception_handler);
+#endif
+}
+#endif
+]])
diff --git a/gnulib_m4/non-recursive-gnulib-prefix-hack.m4 b/gnulib_m4/non-recursive-gnulib-prefix-hack.m4
new file mode 100644 (file)
index 0000000..d2cb9e7
--- /dev/null
@@ -0,0 +1,32 @@
+dnl Copyright (C) 2012-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl gl_NON_RECURSIVE_GNULIB_PREFIX_HACK LIB_DIR
+dnl Adjust configure-set $gl_LIBOBJS and each AC_SUBST'd *_H variable
+dnl with a value ending in ".h" to reflect that these files are located
+dnl in the directory specified by LIB_DIR.
+AC_DEFUN([gl_NON_RECURSIVE_GNULIB_PREFIX_HACK],
+[
+  # Tell AC_LIBSOURCES where to find source files like alloca.c.
+  AC_CONFIG_LIBOBJ_DIR([$1])
+
+  # This hack originated in bison.  It is required when using non-recursive
+  # automake rules to build from gnulib-provided lib/ sources.  Hence, LIB_DIR
+  # is usually simply "lib".  Those rules use the list of names like "fchdir.o"
+  # and "strstr.o" in gl_LIBOBJS.  With non-recursive make, we must prefix each
+  # such file name with the "lib/" prefix.  See also build-aux/prefix-gnulib-mk.
+  gl_LIBOBJS=`echo "$gl_LIBOBJS" | sed -e 's, , $1/,g'`
+
+  # Listing the names of the variables to prefix is error-prone.
+  # Rather, adjust each AC_SUBST'd variable whose name ends in '_H'
+  # and whose value ends in '.h'.
+  for ac_var in $ac_subst_vars
+  do
+    eval "ac_val=\$$ac_var"
+    case $ac_var:$ac_val in
+      *_H:*.h) eval "$ac_var=$1/\$$ac_var";;
+    esac
+  done
+])
diff --git a/gnulib_m4/off_t.m4 b/gnulib_m4/off_t.m4
new file mode 100644 (file)
index 0000000..f4d5787
--- /dev/null
@@ -0,0 +1,18 @@
+# off_t.m4 serial 1
+dnl Copyright (C) 2012-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check whether to override the 'off_t' type.
+dnl Set WINDOWS_64_BIT_OFF_T.
+
+AC_DEFUN([gl_TYPE_OFF_T],
+[
+  m4_ifdef([gl_LARGEFILE], [
+    AC_REQUIRE([gl_LARGEFILE])
+  ], [
+    WINDOWS_64_BIT_OFF_T=0
+  ])
+  AC_SUBST([WINDOWS_64_BIT_OFF_T])
+])
diff --git a/gnulib_m4/printf-frexp.m4 b/gnulib_m4/printf-frexp.m4
new file mode 100644 (file)
index 0000000..e730825
--- /dev/null
@@ -0,0 +1,38 @@
+# printf-frexp.m4 serial 5
+dnl Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check how to define printf_frexp() without linking with libm.
+
+AC_DEFUN([gl_FUNC_PRINTF_FREXP],
+[
+  AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM])
+  if test $gl_cv_func_frexp_no_libm = yes; then
+    gl_FUNC_FREXP_WORKS
+    case "$gl_cv_func_frexp_works" in
+      *yes)
+        AC_DEFINE([HAVE_FREXP_IN_LIBC], [1],
+          [Define if the frexp function is available in libc.])
+        ;;
+    esac
+  fi
+
+  AC_CACHE_CHECK([whether ldexp can be used without linking with libm],
+    [gl_cv_func_ldexp_no_libm],
+    [
+      AC_LINK_IFELSE(
+        [AC_LANG_PROGRAM(
+           [[#include <math.h>
+             double x;
+             int y;]],
+           [[return ldexp (x, y) < 1;]])],
+        [gl_cv_func_ldexp_no_libm=yes],
+        [gl_cv_func_ldexp_no_libm=no])
+    ])
+  if test $gl_cv_func_ldexp_no_libm = yes; then
+    AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1],
+      [Define if the ldexp function is available in libc.])
+  fi
+])
diff --git a/gnulib_m4/printf-frexpl.m4 b/gnulib_m4/printf-frexpl.m4
new file mode 100644 (file)
index 0000000..cb8ac45
--- /dev/null
@@ -0,0 +1,48 @@
+# printf-frexpl.m4 serial 10
+dnl Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Check how to define printf_frexpl() without linking with libm.
+
+AC_DEFUN([gl_FUNC_PRINTF_FREXPL],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+
+  dnl Subset of gl_FUNC_FREXPL_NO_LIBM.
+  gl_CHECK_FREXPL_NO_LIBM
+  if test $gl_cv_func_frexpl_no_libm = yes; then
+    gl_FUNC_FREXPL_WORKS
+    case "$gl_cv_func_frexpl_works" in
+      *yes) gl_func_frexpl_no_libm=yes ;;
+      *)    gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;;
+    esac
+  else
+    gl_func_frexpl_no_libm=no
+    dnl Set REPLACE_FREXPL here because the system may have frexpl in libm.
+    REPLACE_FREXPL=1
+  fi
+  if test $gl_func_frexpl_no_libm = yes; then
+    AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1],
+      [Define if the frexpl function is available in libc.])
+    dnl Also check whether it's declared.
+    dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>.
+    AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]])
+  fi
+
+  gl_CHECK_LDEXPL_NO_LIBM
+  if test $gl_cv_func_ldexpl_no_libm = yes; then
+    gl_FUNC_LDEXPL_WORKS
+    case "$gl_cv_func_ldexpl_works" in
+      *yes)
+        AC_DEFINE([HAVE_LDEXPL_IN_LIBC], [1],
+          [Define if the ldexpl function is available in libc.])
+        dnl Also check whether it's declared.
+        dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>.
+        AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]])
+        ;;
+    esac
+  fi
+])
diff --git a/gnulib_m4/printf.m4 b/gnulib_m4/printf.m4
new file mode 100644 (file)
index 0000000..82f48bf
--- /dev/null
@@ -0,0 +1,1631 @@
+# printf.m4 serial 58
+dnl Copyright (C) 2003, 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Test whether the *printf family of functions supports the 'j', 'z', 't',
+dnl 'L' size specifiers. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_sizes_c99.
+
+AC_DEFUN([gl_PRINTF_SIZES_C99],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gl_AC_HEADER_STDINT_H])
+  AC_REQUIRE([gl_AC_HEADER_INTTYPES_H])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports size specifiers as in C99],
+    [gl_cv_func_printf_sizes_c99],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <sys/types.h>
+#if HAVE_STDINT_H_WITH_UINTMAX
+# include <stdint.h>
+#endif
+#if HAVE_INTTYPES_H_WITH_UINTMAX
+# include <inttypes.h>
+#endif
+static char buf[100];
+int main ()
+{
+  int result = 0;
+#if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX
+  buf[0] = '\0';
+  if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0
+      || strcmp (buf, "12345671 33") != 0)
+    result |= 1;
+#else
+  result |= 1;
+#endif
+  buf[0] = '\0';
+  if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0
+      || strcmp (buf, "12345672 33") != 0)
+    result |= 2;
+  buf[0] = '\0';
+  if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0
+      || strcmp (buf, "12345673 33") != 0)
+    result |= 4;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0
+      || strcmp (buf, "1.5 33") != 0)
+    result |= 8;
+  return result;
+}]])],
+        [gl_cv_func_printf_sizes_c99=yes],
+        [gl_cv_func_printf_sizes_c99=no],
+        [
+         case "$host_os" in
+changequote(,)dnl
+                                 # Guess yes on glibc systems.
+           *-gnu* | gnu*)        gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4].*)       gl_cv_func_printf_sizes_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_sizes_c99="guessing no";;
+           darwin*)              gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_printf_sizes_c99="guessing no";;
+           openbsd*)             gl_cv_func_printf_sizes_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
+           solaris*)             gl_cv_func_printf_sizes_c99="guessing no";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_printf_sizes_c99="guessing no";;
+           netbsd*)              gl_cv_func_printf_sizes_c99="guessing yes";;
+changequote([,])dnl
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                                   ],
+                                   [gl_cv_func_printf_sizes_c99="guessing yes"],
+                                   [gl_cv_func_printf_sizes_c99="guessing no"])
+                                 ;;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_sizes_c99="guessing no";;
+         esac
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports 'long double'
+dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_long_double.
+
+AC_DEFUN([gl_PRINTF_LONG_DOUBLE],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports 'long double' arguments],
+    [gl_cv_func_printf_long_double],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[10000];
+int main ()
+{
+  int result = 0;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.750000 33") != 0)
+    result |= 1;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.750000e+00 33") != 0)
+    result |= 2;
+  buf[0] = '\0';
+  if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0
+      || strcmp (buf, "1.75 33") != 0)
+    result |= 4;
+  return result;
+}]])],
+        [gl_cv_func_printf_long_double=yes],
+        [gl_cv_func_printf_long_double=no],
+        [case "$host_os" in
+           beos*)  gl_cv_func_printf_long_double="guessing no";;
+                   # Guess yes on MSVC, no on mingw.
+           mingw*) AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                     ],
+                     [gl_cv_func_printf_long_double="guessing yes"],
+                     [gl_cv_func_printf_long_double="guessing no"])
+                   ;;
+           *)      gl_cv_func_printf_long_double="guessing yes";;
+         esac
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports infinite and NaN
+dnl 'double' arguments and negative zero arguments in the %f, %e, %g
+dnl directives. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_infinite.
+
+AC_DEFUN([gl_PRINTF_INFINITE],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports infinite 'double' arguments],
+    [gl_cv_func_printf_infinite],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static int
+strisnan (const char *string, size_t start_index, size_t end_index)
+{
+  if (start_index < end_index)
+    {
+      if (string[start_index] == '-')
+        start_index++;
+      if (start_index + 3 <= end_index
+          && memcmp (string + start_index, "nan", 3) == 0)
+        {
+          start_index += 3;
+          if (start_index == end_index
+              || (string[start_index] == '(' && string[end_index - 1] == ')'))
+            return 1;
+        }
+    }
+  return 0;
+}
+static int
+have_minus_zero ()
+{
+  static double plus_zero = 0.0;
+  double minus_zero = - plus_zero;
+  return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0;
+}
+static char buf[10000];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%f", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%f", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%f", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 2;
+  if (sprintf (buf, "%e", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 4;
+  if (sprintf (buf, "%e", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 4;
+  if (sprintf (buf, "%e", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 8;
+  if (sprintf (buf, "%g", 1.0 / zero) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 16;
+  if (sprintf (buf, "%g", -1.0 / zero) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 16;
+  if (sprintf (buf, "%g", zero / zero) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 32;
+  /* This test fails on HP-UX 10.20.  */
+  if (have_minus_zero ())
+    if (sprintf (buf, "%g", - zero) < 0
+        || strcmp (buf, "-0") != 0)
+    result |= 64;
+  return result;
+}]])],
+        [gl_cv_func_printf_infinite=yes],
+        [gl_cv_func_printf_infinite=no],
+        [
+         case "$host_os" in
+changequote(,)dnl
+                                 # Guess yes on glibc systems.
+           *-gnu* | gnu*)        gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on FreeBSD >= 6.
+           freebsd[1-5].*)       gl_cv_func_printf_infinite="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_infinite="guessing no";;
+           darwin*)              gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on HP-UX >= 11.
+           hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";;
+           hpux*)                gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_printf_infinite="guessing no";;
+           netbsd*)              gl_cv_func_printf_infinite="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_printf_infinite="guessing yes";;
+changequote([,])dnl
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                                   ],
+                                   [gl_cv_func_printf_infinite="guessing yes"],
+                                   [gl_cv_func_printf_infinite="guessing no"])
+                                 ;;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_infinite="guessing no";;
+         esac
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports infinite and NaN
+dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_infinite_long_double.
+
+AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE],
+[
+  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gl_BIGENDIAN])
+  AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  dnl The user can set or unset the variable gl_printf_safe to indicate
+  dnl that he wishes a safe handling of non-IEEE-754 'long double' values.
+  if test -n "$gl_printf_safe"; then
+    AC_DEFINE([CHECK_PRINTF_SAFE], [1],
+      [Define if you wish *printf() functions that have a safe handling of
+       non-IEEE-754 'long double' values.])
+  fi
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments],
+        [gl_cv_func_printf_infinite_long_double],
+        [
+          AC_RUN_IFELSE(
+            [AC_LANG_SOURCE([[
+]GL_NOCRASH[
+#include <float.h>
+#include <stdio.h>
+#include <string.h>
+static int
+strisnan (const char *string, size_t start_index, size_t end_index)
+{
+  if (start_index < end_index)
+    {
+      if (string[start_index] == '-')
+        start_index++;
+      if (start_index + 3 <= end_index
+          && memcmp (string + start_index, "nan", 3) == 0)
+        {
+          start_index += 3;
+          if (start_index == end_index
+              || (string[start_index] == '(' && string[end_index - 1] == ')'))
+            return 1;
+        }
+    }
+  return 0;
+}
+static char buf[10000];
+static long double zeroL = 0.0L;
+int main ()
+{
+  int result = 0;
+  nocrash_init();
+  if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lf", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+  if (sprintf (buf, "%Le", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Le", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Le", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+  if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0
+      || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0
+      || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0))
+    result |= 1;
+  if (sprintf (buf, "%Lg", zeroL / zeroL) < 0
+      || !strisnan (buf, 0, strlen (buf)))
+    result |= 1;
+#if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+/* Representation of an 80-bit 'long double' as an initializer for a sequence
+   of 'unsigned int' words.  */
+# ifdef WORDS_BIGENDIAN
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \
+       ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16),   \
+       (unsigned int) (mantlo) << 16                                        \
+     }
+# else
+#  define LDBL80_WORDS(exponent,manthi,mantlo) \
+     { mantlo, manthi, exponent }
+# endif
+  { /* Quiet NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+  }
+  {
+    /* Signalling NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Le", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+    if (sprintf (buf, "%Lg", x.value) < 0
+        || !strisnan (buf, 0, strlen (buf)))
+      result |= 2;
+  }
+  { /* Pseudo-NaN.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) <= 0)
+      result |= 4;
+    if (sprintf (buf, "%Le", x.value) <= 0)
+      result |= 4;
+    if (sprintf (buf, "%Lg", x.value) <= 0)
+      result |= 4;
+  }
+  { /* Pseudo-Infinity.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) <= 0)
+      result |= 8;
+    if (sprintf (buf, "%Le", x.value) <= 0)
+      result |= 8;
+    if (sprintf (buf, "%Lg", x.value) <= 0)
+      result |= 8;
+  }
+  { /* Pseudo-Zero.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) <= 0)
+      result |= 16;
+    if (sprintf (buf, "%Le", x.value) <= 0)
+      result |= 16;
+    if (sprintf (buf, "%Lg", x.value) <= 0)
+      result |= 16;
+  }
+  { /* Unnormalized number.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) <= 0)
+      result |= 32;
+    if (sprintf (buf, "%Le", x.value) <= 0)
+      result |= 32;
+    if (sprintf (buf, "%Lg", x.value) <= 0)
+      result |= 32;
+  }
+  { /* Pseudo-Denormal.  */
+    static union { unsigned int word[4]; long double value; } x =
+      { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) };
+    if (sprintf (buf, "%Lf", x.value) <= 0)
+      result |= 64;
+    if (sprintf (buf, "%Le", x.value) <= 0)
+      result |= 64;
+    if (sprintf (buf, "%Lg", x.value) <= 0)
+      result |= 64;
+  }
+#endif
+  return result;
+}]])],
+            [gl_cv_func_printf_infinite_long_double=yes],
+            [gl_cv_func_printf_infinite_long_double=no],
+            [case "$host_cpu" in
+                                     # Guess no on ia64, x86_64, i386.
+               ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";;
+               *)
+                 case "$host_os" in
+changequote(,)dnl
+                                         # Guess yes on glibc systems.
+                   *-gnu* | gnu*)        gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # Guess yes on FreeBSD >= 6.
+                   freebsd[1-5].*)       gl_cv_func_printf_infinite_long_double="guessing no";;
+                   freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";;
+                                         # Guess yes on HP-UX >= 11.
+                   hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";;
+                   hpux*)                gl_cv_func_printf_infinite_long_double="guessing yes";;
+changequote([,])dnl
+                                         # Guess yes on MSVC, no on mingw.
+                   mingw*)               AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                                           ],
+                                           [gl_cv_func_printf_infinite_long_double="guessing yes"],
+                                           [gl_cv_func_printf_infinite_long_double="guessing no"])
+                                         ;;
+                                         # If we don't know, assume the worst.
+                   *)                    gl_cv_func_printf_infinite_long_double="guessing no";;
+                 esac
+                 ;;
+             esac
+            ])
+        ])
+      ;;
+    *)
+      gl_cv_func_printf_infinite_long_double="irrelevant"
+      ;;
+  esac
+])
+
+dnl Test whether the *printf family of functions supports the 'a' and 'A'
+dnl conversion specifier for hexadecimal output of floating-point numbers.
+dnl (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_directive_a.
+
+AC_DEFUN([gl_PRINTF_DIRECTIVE_A],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives],
+    [gl_cv_func_printf_directive_a],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0
+      || (strcmp (buf, "0x1.922p+1 33") != 0
+          && strcmp (buf, "0x3.244p+0 33") != 0
+          && strcmp (buf, "0x6.488p-1 33") != 0
+          && strcmp (buf, "0xc.91p-2 33") != 0))
+    result |= 1;
+  if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0
+      || (strcmp (buf, "-0X1.922P+1 33") != 0
+          && strcmp (buf, "-0X3.244P+0 33") != 0
+          && strcmp (buf, "-0X6.488P-1 33") != 0
+          && strcmp (buf, "-0XC.91P-2 33") != 0))
+    result |= 2;
+  /* This catches a FreeBSD 6.1 bug: it doesn't round.  */
+  if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0
+      || (strcmp (buf, "0x1.83p+0 33") != 0
+          && strcmp (buf, "0x3.05p-1 33") != 0
+          && strcmp (buf, "0x6.0ap-2 33") != 0
+          && strcmp (buf, "0xc.14p-3 33") != 0))
+    result |= 4;
+  /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round.  */
+  if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0
+      || (strcmp (buf, "0x2p+0 33") != 0
+          && strcmp (buf, "0x3p-1 33") != 0
+          && strcmp (buf, "0x6p-2 33") != 0
+          && strcmp (buf, "0xcp-3 33") != 0))
+    result |= 4;
+  /* This catches a FreeBSD 6.1 bug.  See
+     <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */
+  if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0
+      || buf[0] == '0')
+    result |= 8;
+  /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug.  */
+  if (sprintf (buf, "%.1a", 1.999) < 0
+      || (strcmp (buf, "0x1.0p+1") != 0
+          && strcmp (buf, "0x2.0p+0") != 0
+          && strcmp (buf, "0x4.0p-1") != 0
+          && strcmp (buf, "0x8.0p-2") != 0))
+    result |= 16;
+  /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a
+     glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>.  */
+  if (sprintf (buf, "%.1La", 1.999L) < 0
+      || (strcmp (buf, "0x1.0p+1") != 0
+          && strcmp (buf, "0x2.0p+0") != 0
+          && strcmp (buf, "0x4.0p-1") != 0
+          && strcmp (buf, "0x8.0p-2") != 0))
+    result |= 32;
+  return result;
+}]])],
+        [gl_cv_func_printf_directive_a=yes],
+        [gl_cv_func_printf_directive_a=no],
+        [
+         case "$host_os" in
+                                 # Guess yes on glibc >= 2.5 systems.
+           *-gnu* | gnu*)
+             AC_EGREP_CPP([BZ2908], [
+               #include <features.h>
+               #ifdef __GNU_LIBRARY__
+                #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__
+                 BZ2908
+                #endif
+               #endif
+               ],
+               [gl_cv_func_printf_directive_a="guessing yes"],
+               [gl_cv_func_printf_directive_a="guessing no"])
+             ;;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_printf_directive_a="guessing no";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_directive_a="guessing no";;
+         esac
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports the %F format
+dnl directive. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_directive_f.
+
+AC_DEFUN([gl_PRINTF_DIRECTIVE_F],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the 'F' directive],
+    [gl_cv_func_printf_directive_f],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  int result = 0;
+  if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0
+      || strcmp (buf, "1234567.000000 33") != 0)
+    result |= 1;
+  if (sprintf (buf, "%F", 1.0 / zero) < 0
+      || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0))
+    result |= 2;
+  /* This catches a Cygwin 1.5.x bug.  */
+  if (sprintf (buf, "%.F", 1234.0) < 0
+      || strcmp (buf, "1234") != 0)
+    result |= 4;
+  return result;
+}]])],
+        [gl_cv_func_printf_directive_f=yes],
+        [gl_cv_func_printf_directive_f=no],
+        [
+         case "$host_os" in
+changequote(,)dnl
+                                 # Guess yes on glibc systems.
+           *-gnu* | gnu*)        gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on FreeBSD >= 6.
+           freebsd[1-5].*)       gl_cv_func_printf_directive_f="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_printf_directive_f="guessing no";;
+           darwin*)              gl_cv_func_printf_directive_f="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";;
+           solaris*)             gl_cv_func_printf_directive_f="guessing no";;
+changequote([,])dnl
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                                   ],
+                                   [gl_cv_func_printf_directive_f="guessing yes"],
+                                   [gl_cv_func_printf_directive_f="guessing no"])
+                                 ;;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_printf_directive_f="guessing no";;
+         esac
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports the %n format
+dnl directive. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_printf_directive_n.
+
+AC_DEFUN([gl_PRINTF_DIRECTIVE_N],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the 'n' directive],
+    [gl_cv_func_printf_directive_n],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#ifdef _MSC_VER
+/* See page about "Parameter Validation" on msdn.microsoft.com.  */
+static void cdecl
+invalid_parameter_handler (const wchar_t *expression,
+                           const wchar_t *function,
+                           const wchar_t *file, unsigned int line,
+                           uintptr_t dummy)
+{
+  exit (1);
+}
+#endif
+static char fmtstring[10];
+static char buf[100];
+int main ()
+{
+  int count = -1;
+#ifdef _MSC_VER
+  _set_invalid_parameter_handler (invalid_parameter_handler);
+#endif
+  /* Copy the format string.  Some systems (glibc with _FORTIFY_SOURCE=2)
+     support %n in format strings in read-only memory but not in writable
+     memory.  */
+  strcpy (fmtstring, "%d %n");
+  if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0
+      || strcmp (buf, "123 ") != 0
+      || count != 4)
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_printf_directive_n=yes],
+        [gl_cv_func_printf_directive_n=no],
+        [case "$host_os" in
+                   # Guess no on native Windows.
+           mingw*) gl_cv_func_printf_directive_n="guessing no";;
+           *)      gl_cv_func_printf_directive_n="guessing yes";;
+         esac
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports the %ls format
+dnl directive and in particular, when a precision is specified, whether
+dnl the functions stop converting the wide string argument when the number
+dnl of bytes that have been produced by this conversion equals or exceeds
+dnl the precision.
+dnl Result is gl_cv_func_printf_directive_ls.
+
+AC_DEFUN([gl_PRINTF_DIRECTIVE_LS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the 'ls' directive],
+    [gl_cv_func_printf_directive_ls],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#include <string.h>
+int main ()
+{
+  int result = 0;
+  char buf[100];
+  /* Test whether %ls works at all.
+     This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on
+     Cygwin 1.5.  */
+  {
+    static const wchar_t wstring[] = { 'a', 'b', 'c', 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%ls", wstring) < 0
+        || strcmp (buf, "abc") != 0)
+      result |= 1;
+  }
+  /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an
+     assertion failure inside libc), but not on OpenBSD 4.0.  */
+  {
+    static const wchar_t wstring[] = { 'a', 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%ls", wstring) < 0
+        || strcmp (buf, "a") != 0)
+      result |= 2;
+  }
+  /* Test whether precisions in %ls are supported as specified in ISO C 99
+     section 7.19.6.1:
+       "If a precision is specified, no more than that many bytes are written
+        (including shift sequences, if any), and the array shall contain a
+        null wide character if, to equal the multibyte character sequence
+        length given by the precision, the function would need to access a
+        wide character one past the end of the array."
+     This test fails on Solaris 10.  */
+  {
+    static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 };
+    buf[0] = '\0';
+    if (sprintf (buf, "%.2ls", wstring) < 0
+        || strcmp (buf, "ab") != 0)
+      result |= 8;
+  }
+  return result;
+}]])],
+        [gl_cv_func_printf_directive_ls=yes],
+        [gl_cv_func_printf_directive_ls=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           openbsd*)       gl_cv_func_printf_directive_ls="guessing no";;
+           irix*)          gl_cv_func_printf_directive_ls="guessing no";;
+           solaris*)       gl_cv_func_printf_directive_ls="guessing no";;
+           cygwin*)        gl_cv_func_printf_directive_ls="guessing no";;
+           beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";;
+                           # Guess yes on native Windows.
+           mingw*)         gl_cv_func_printf_directive_ls="guessing yes";;
+           *)              gl_cv_func_printf_directive_ls="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports POSIX/XSI format
+dnl strings with positions. (POSIX:2001)
+dnl Result is gl_cv_func_printf_positions.
+
+AC_DEFUN([gl_PRINTF_POSITIONS],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions],
+    [gl_cv_func_printf_positions],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+/* The string "%2$d %1$d", with dollar characters protected from the shell's
+   dollar expansion (possibly an autoconf bug).  */
+static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' };
+static char buf[100];
+int main ()
+{
+  sprintf (buf, format, 33, 55);
+  return (strcmp (buf, "55 33") != 0);
+}]])],
+        [gl_cv_func_printf_positions=yes],
+        [gl_cv_func_printf_positions=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*)
+                         gl_cv_func_printf_positions="guessing no";;
+           beos*)        gl_cv_func_printf_positions="guessing no";;
+                         # Guess no on native Windows.
+           mingw* | pw*) gl_cv_func_printf_positions="guessing no";;
+           *)            gl_cv_func_printf_positions="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports POSIX/XSI format
+dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001)
+dnl Result is gl_cv_func_printf_flag_grouping.
+
+AC_DEFUN([gl_PRINTF_FLAG_GROUPING],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the grouping flag],
+    [gl_cv_func_printf_flag_grouping],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+int main ()
+{
+  if (sprintf (buf, "%'d %d", 1234567, 99) < 0
+      || buf[strlen (buf) - 1] != '9')
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_printf_flag_grouping=yes],
+        [gl_cv_func_printf_flag_grouping=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           cygwin*)      gl_cv_func_printf_flag_grouping="guessing no";;
+           netbsd*)      gl_cv_func_printf_flag_grouping="guessing no";;
+                         # Guess no on native Windows.
+           mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";;
+           *)            gl_cv_func_printf_flag_grouping="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports the - flag correctly.
+dnl (ISO C99.) See
+dnl <https://lists.gnu.org/r/bug-coreutils/2008-02/msg00035.html>
+dnl Result is gl_cv_func_printf_flag_leftadjust.
+
+AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly],
+    [gl_cv_func_printf_flag_leftadjust],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+int main ()
+{
+  /* Check that a '-' flag is not annihilated by a negative width.  */
+  if (sprintf (buf, "a%-*sc", -3, "b") < 0
+      || strcmp (buf, "ab  c") != 0)
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_printf_flag_leftadjust=yes],
+        [gl_cv_func_printf_flag_leftadjust=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                    # Guess yes on HP-UX 11.
+           hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";;
+                    # Guess no on HP-UX 10 and older.
+           hpux*)   gl_cv_func_printf_flag_leftadjust="guessing no";;
+                    # Guess yes on native Windows.
+           mingw*)  gl_cv_func_printf_flag_leftadjust="guessing yes";;
+                    # Guess yes otherwise.
+           *)       gl_cv_func_printf_flag_leftadjust="guessing yes";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports padding of non-finite
+dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See
+dnl <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html>
+dnl Result is gl_cv_func_printf_flag_zero.
+
+AC_DEFUN([gl_PRINTF_FLAG_ZERO],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports the zero flag correctly],
+    [gl_cv_func_printf_flag_zero],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[100];
+static double zero = 0.0;
+int main ()
+{
+  if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0
+      || (strcmp (buf, "       inf") != 0
+          && strcmp (buf, "  infinity") != 0))
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_printf_flag_zero=yes],
+        [gl_cv_func_printf_flag_zero=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";;
+                          # Guess yes on BeOS.
+           beos*)         gl_cv_func_printf_flag_zero="guessing yes";;
+                          # Guess no on native Windows.
+           mingw*)        gl_cv_func_printf_flag_zero="guessing no";;
+                          # If we don't know, assume the worst.
+           *)             gl_cv_func_printf_flag_zero="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions supports large precisions.
+dnl On mingw, precisions larger than 512 are treated like 512, in integer,
+dnl floating-point or pointer output. On Solaris 10/x86, precisions larger
+dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC,
+dnl precisions larger than 510 in floating-point output yield wrong results.
+dnl On AIX 7.1, precisions larger than 998 in floating-point output yield
+dnl wrong results. On BeOS, precisions larger than 1044 crash the program.
+dnl Result is gl_cv_func_printf_precision.
+
+AC_DEFUN([gl_PRINTF_PRECISION],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf supports large precisions],
+    [gl_cv_func_printf_precision],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+static char buf[5000];
+int main ()
+{
+  int result = 0;
+#ifdef __BEOS__
+  /* On BeOS, this would crash and show a dialog box.  Avoid the crash.  */
+  return 1;
+#endif
+  if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3)
+    result |= 1;
+  if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5)
+    result |= 2;
+  if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5
+      || buf[0] != '1')
+    result |= 4;
+  if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5
+      || buf[0] != '1')
+    result |= 4;
+  return result;
+}]])],
+        [gl_cv_func_printf_precision=yes],
+        [gl_cv_func_printf_precision=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+           # Guess no only on Solaris, native Windows, and BeOS systems.
+           solaris*)     gl_cv_func_printf_precision="guessing no" ;;
+           mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;;
+           beos*)        gl_cv_func_printf_precision="guessing no" ;;
+           *)            gl_cv_func_printf_precision="guessing yes" ;;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the *printf family of functions recovers gracefully in case
+dnl of an out-of-memory condition, or whether it crashes the entire program.
+dnl Result is gl_cv_func_printf_enomem.
+
+AC_DEFUN([gl_PRINTF_ENOMEM],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([gl_MULTIARCH])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether printf survives out-of-memory conditions],
+    [gl_cv_func_printf_enomem],
+    [
+      gl_cv_func_printf_enomem="guessing no"
+      if test "$cross_compiling" = no; then
+        if test $APPLE_UNIVERSAL_BUILD = 0; then
+          AC_LANG_CONFTEST([AC_LANG_SOURCE([
+]GL_NOCRASH[
+changequote(,)dnl
+#include <stdio.h>
+#include <sys/types.h>
+#include <sys/time.h>
+#include <sys/resource.h>
+#include <errno.h>
+int main()
+{
+  struct rlimit limit;
+  int ret;
+  nocrash_init ();
+  /* Some printf implementations allocate temporary space with malloc.  */
+  /* On BSD systems, malloc() is limited by RLIMIT_DATA.  */
+#ifdef RLIMIT_DATA
+  if (getrlimit (RLIMIT_DATA, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_DATA, &limit) < 0)
+    return 77;
+#endif
+  /* On Linux systems, malloc() is limited by RLIMIT_AS.  */
+#ifdef RLIMIT_AS
+  if (getrlimit (RLIMIT_AS, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_AS, &limit) < 0)
+    return 77;
+#endif
+  /* Some printf implementations allocate temporary space on the stack.  */
+#ifdef RLIMIT_STACK
+  if (getrlimit (RLIMIT_STACK, &limit) < 0)
+    return 77;
+  if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000)
+    limit.rlim_max = 5000000;
+  limit.rlim_cur = limit.rlim_max;
+  if (setrlimit (RLIMIT_STACK, &limit) < 0)
+    return 77;
+#endif
+  ret = printf ("%.5000000f", 1.0);
+  return !(ret == 5000002 || (ret < 0 && errno == ENOMEM));
+}
+changequote([,])dnl
+          ])])
+          if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then
+            (./conftest 2>&AS_MESSAGE_LOG_FD
+             result=$?
+             _AS_ECHO_LOG([\$? = $result])
+             if test $result != 0 && test $result != 77; then result=1; fi
+             exit $result
+            ) >/dev/null 2>/dev/null
+            case $? in
+              0) gl_cv_func_printf_enomem="yes" ;;
+              77) gl_cv_func_printf_enomem="guessing no" ;;
+              *) gl_cv_func_printf_enomem="no" ;;
+            esac
+          else
+            gl_cv_func_printf_enomem="guessing no"
+          fi
+          rm -fr conftest*
+        else
+          dnl A universal build on Apple Mac OS X platforms.
+          dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode.
+          dnl But we need a configuration result that is valid in both modes.
+          gl_cv_func_printf_enomem="guessing no"
+        fi
+      fi
+      if test "$gl_cv_func_printf_enomem" = "guessing no"; then
+changequote(,)dnl
+        case "$host_os" in
+                         # Guess yes on glibc systems.
+          *-gnu* | gnu*) gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on Solaris.
+          solaris*)      gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on AIX.
+          aix*)          gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on HP-UX/hppa.
+          hpux*)         case "$host_cpu" in
+                           hppa*) gl_cv_func_printf_enomem="guessing yes";;
+                           *)     gl_cv_func_printf_enomem="guessing no";;
+                         esac
+                         ;;
+                         # Guess yes on IRIX.
+          irix*)         gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on OSF/1.
+          osf*)          gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on BeOS.
+          beos*)         gl_cv_func_printf_enomem="guessing yes";;
+                         # Guess yes on Haiku.
+          haiku*)        gl_cv_func_printf_enomem="guessing yes";;
+                         # If we don't know, assume the worst.
+          *)             gl_cv_func_printf_enomem="guessing no";;
+        esac
+changequote([,])dnl
+      fi
+    ])
+])
+
+dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001)
+dnl Result is ac_cv_func_snprintf.
+
+AC_DEFUN([gl_SNPRINTF_PRESENCE],
+[
+  AC_CHECK_FUNCS_ONCE([snprintf])
+])
+
+dnl Test whether the string produced by the snprintf function is always NUL
+dnl terminated. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_snprintf_truncation_c99.
+
+AC_DEFUN([gl_SNPRINTF_TRUNCATION_C99],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_SNPRINTF_PRESENCE])
+  AC_CACHE_CHECK([whether snprintf truncates the result as in C99],
+    [gl_cv_func_snprintf_truncation_c99],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char buf[100];
+int main ()
+{
+  strcpy (buf, "ABCDEF");
+  my_snprintf (buf, 3, "%d %d", 4567, 89);
+  if (memcmp (buf, "45\0DEF", 6) != 0)
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_snprintf_truncation_c99=yes],
+        [gl_cv_func_snprintf_truncation_c99=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu* | gnu*)        gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4].*)       gl_cv_func_snprintf_truncation_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_truncation_c99="guessing no";;
+           darwin*)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           openbsd*)             gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           solaris*)             gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_truncation_c99="guessing no";;
+           aix*)                 gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on HP-UX >= 11.
+           hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";;
+           hpux*)                gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on OSF/1 >= 5.
+           osf[3-4]*)            gl_cv_func_snprintf_truncation_c99="guessing no";;
+           osf*)                 gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_truncation_c99="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_truncation_c99="guessing yes";;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_snprintf_truncation_c99="guessing no";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_truncation_c99="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the return value of the snprintf function is the number
+dnl of bytes (excluding the terminating NUL) that would have been produced
+dnl if the buffer had been large enough. (ISO C99, POSIX:2001)
+dnl For example, this test program fails on IRIX 6.5:
+dnl     ---------------------------------------------------------------------
+dnl     #include <stdio.h>
+dnl     int main()
+dnl     {
+dnl       static char buf[8];
+dnl       int retval = snprintf (buf, 3, "%d", 12345);
+dnl       return retval >= 0 && retval < 3;
+dnl     }
+dnl     ---------------------------------------------------------------------
+dnl Result is gl_cv_func_snprintf_retval_c99.
+
+AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_SNPRINTF_PRESENCE])
+  AC_CACHE_CHECK([whether snprintf returns a byte count as in C99],
+    [gl_cv_func_snprintf_retval_c99],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char buf[100];
+int main ()
+{
+  strcpy (buf, "ABCDEF");
+  if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7)
+    return 1;
+  if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7)
+    return 2;
+  if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7)
+    return 3;
+  return 0;
+}]])],
+        [gl_cv_func_snprintf_retval_c99=yes],
+        [gl_cv_func_snprintf_retval_c99=no],
+        [case "$host_os" in
+changequote(,)dnl
+                                 # Guess yes on glibc systems.
+           *-gnu* | gnu*)        gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4].*)       gl_cv_func_snprintf_retval_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_retval_c99="guessing no";;
+           darwin*)              gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on OpenBSD >= 3.9.
+           openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*)
+                                 gl_cv_func_snprintf_retval_c99="guessing no";;
+           openbsd*)             gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.10.
+           solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";;
+           solaris*)             gl_cv_func_printf_sizes_c99="guessing no";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_retval_c99="guessing no";;
+           aix*)                 gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_retval_c99="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_retval_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_retval_c99="guessing yes";;
+changequote([,])dnl
+                                 # Guess yes on MSVC, no on mingw.
+           mingw*)               AC_EGREP_CPP([Known], [
+#ifdef _MSC_VER
+ Known
+#endif
+                                   ],
+                                   [gl_cv_func_snprintf_retval_c99="guessing yes"],
+                                   [gl_cv_func_snprintf_retval_c99="guessing no"])
+                                 ;;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_retval_c99="guessing no";;
+         esac
+        ])
+    ])
+])
+
+dnl Test whether the snprintf function supports the %n format directive
+dnl also in truncated portions of the format string. (ISO C99, POSIX:2001)
+dnl Result is gl_cv_func_snprintf_directive_n.
+
+AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_SNPRINTF_PRESENCE])
+  AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive],
+    [gl_cv_func_snprintf_directive_n],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#include <string.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+static char fmtstring[10];
+static char buf[100];
+int main ()
+{
+  int count = -1;
+  /* Copy the format string.  Some systems (glibc with _FORTIFY_SOURCE=2)
+     support %n in format strings in read-only memory but not in writable
+     memory.  */
+  strcpy (fmtstring, "%d %n");
+  my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55);
+  if (count != 6)
+    return 1;
+  return 0;
+}]])],
+        [gl_cv_func_snprintf_directive_n=yes],
+        [gl_cv_func_snprintf_directive_n=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu* | gnu*)        gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4].*)       gl_cv_func_snprintf_directive_n="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_snprintf_directive_n="guessing no";;
+           darwin*)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_snprintf_directive_n="guessing no";;
+           solaris*)             gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_snprintf_directive_n="guessing no";;
+           aix*)                 gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on OSF/1 >= 5.
+           osf[3-4]*)            gl_cv_func_snprintf_directive_n="guessing no";;
+           osf*)                 gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_snprintf_directive_n="guessing no";;
+           netbsd*)              gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_snprintf_directive_n="guessing yes";;
+                                 # Guess no on native Windows.
+           mingw*)               gl_cv_func_snprintf_directive_n="guessing no";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_snprintf_directive_n="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl Test whether the snprintf function, when passed a size = 1, writes any
+dnl output without bounds in this case, behaving like sprintf. This is the
+dnl case on Linux libc5.
+dnl Result is gl_cv_func_snprintf_size1.
+
+AC_DEFUN([gl_SNPRINTF_SIZE1],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_REQUIRE([gl_SNPRINTF_PRESENCE])
+  AC_CACHE_CHECK([whether snprintf respects a size of 1],
+    [gl_cv_func_snprintf_size1],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdio.h>
+#if HAVE_SNPRINTF
+# define my_snprintf snprintf
+#else
+# include <stdarg.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+#endif
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 1, "%d", 12345);
+  return buf[1] != 'E';
+}]])],
+        [gl_cv_func_snprintf_size1=yes],
+        [gl_cv_func_snprintf_size1=no],
+        [case "$host_os" in
+                   # Guess yes on native Windows.
+           mingw*) gl_cv_func_snprintf_size1="guessing yes" ;;
+           *)      gl_cv_func_snprintf_size1="guessing yes" ;;
+         esac
+        ])
+    ])
+])
+
+dnl Test whether the vsnprintf function, when passed a zero size, produces no
+dnl output. (ISO C99, POSIX:2001)
+dnl For example, snprintf nevertheless writes a NUL byte in this case
+dnl on OSF/1 5.1:
+dnl     ---------------------------------------------------------------------
+dnl     #include <stdio.h>
+dnl     int main()
+dnl     {
+dnl       static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+dnl       snprintf (buf, 0, "%d", 12345);
+dnl       return buf[0] != 'D';
+dnl     }
+dnl     ---------------------------------------------------------------------
+dnl And vsnprintf writes any output without bounds in this case, behaving like
+dnl vsprintf, on HP-UX 11 and OSF/1 5.1:
+dnl     ---------------------------------------------------------------------
+dnl     #include <stdarg.h>
+dnl     #include <stdio.h>
+dnl     static int my_snprintf (char *buf, int size, const char *format, ...)
+dnl     {
+dnl       va_list args;
+dnl       int ret;
+dnl       va_start (args, format);
+dnl       ret = vsnprintf (buf, size, format, args);
+dnl       va_end (args);
+dnl       return ret;
+dnl     }
+dnl     int main()
+dnl     {
+dnl       static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+dnl       my_snprintf (buf, 0, "%d", 12345);
+dnl       return buf[0] != 'D';
+dnl     }
+dnl     ---------------------------------------------------------------------
+dnl Result is gl_cv_func_vsnprintf_zerosize_c99.
+
+AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99],
+[
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99],
+    [gl_cv_func_vsnprintf_zerosize_c99],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stdarg.h>
+#include <stdio.h>
+static int my_snprintf (char *buf, int size, const char *format, ...)
+{
+  va_list args;
+  int ret;
+  va_start (args, format);
+  ret = vsnprintf (buf, size, format, args);
+  va_end (args);
+  return ret;
+}
+int main()
+{
+  static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' };
+  my_snprintf (buf, 0, "%d", 12345);
+  return buf[0] != 'D';
+}]])],
+        [gl_cv_func_vsnprintf_zerosize_c99=yes],
+        [gl_cv_func_vsnprintf_zerosize_c99=no],
+        [
+changequote(,)dnl
+         case "$host_os" in
+                                 # Guess yes on glibc systems.
+           *-gnu* | gnu*)        gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on FreeBSD >= 5.
+           freebsd[1-4].*)       gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Mac OS X >= 10.3.
+           darwin[1-6].*)        gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           darwin*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Cygwin.
+           cygwin*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on Solaris >= 2.6.
+           solaris2.[0-5] | solaris2.[0-5].*)
+                                 gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           solaris*)             gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on AIX >= 4.
+           aix[1-3]*)            gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           aix*)                 gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on IRIX >= 6.5.
+           irix6.5)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on NetBSD >= 3.
+           netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*)
+                                 gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+           netbsd*)              gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on BeOS.
+           beos*)                gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # Guess yes on native Windows.
+           mingw* | pw*)         gl_cv_func_vsnprintf_zerosize_c99="guessing yes";;
+                                 # If we don't know, assume the worst.
+           *)                    gl_cv_func_vsnprintf_zerosize_c99="guessing no";;
+         esac
+changequote([,])dnl
+        ])
+    ])
+])
+
+dnl The results of these tests on various platforms are:
+dnl
+dnl 1 = gl_PRINTF_SIZES_C99
+dnl 2 = gl_PRINTF_LONG_DOUBLE
+dnl 3 = gl_PRINTF_INFINITE
+dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE
+dnl 5 = gl_PRINTF_DIRECTIVE_A
+dnl 6 = gl_PRINTF_DIRECTIVE_F
+dnl 7 = gl_PRINTF_DIRECTIVE_N
+dnl 8 = gl_PRINTF_DIRECTIVE_LS
+dnl 9 = gl_PRINTF_POSITIONS
+dnl 10 = gl_PRINTF_FLAG_GROUPING
+dnl 11 = gl_PRINTF_FLAG_LEFTADJUST
+dnl 12 = gl_PRINTF_FLAG_ZERO
+dnl 13 = gl_PRINTF_PRECISION
+dnl 14 = gl_PRINTF_ENOMEM
+dnl 15 = gl_SNPRINTF_PRESENCE
+dnl 16 = gl_SNPRINTF_TRUNCATION_C99
+dnl 17 = gl_SNPRINTF_RETVAL_C99
+dnl 18 = gl_SNPRINTF_DIRECTIVE_N
+dnl 19 = gl_SNPRINTF_SIZE1
+dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99
+dnl
+dnl 1 = checking whether printf supports size specifiers as in C99...
+dnl 2 = checking whether printf supports 'long double' arguments...
+dnl 3 = checking whether printf supports infinite 'double' arguments...
+dnl 4 = checking whether printf supports infinite 'long double' arguments...
+dnl 5 = checking whether printf supports the 'a' and 'A' directives...
+dnl 6 = checking whether printf supports the 'F' directive...
+dnl 7 = checking whether printf supports the 'n' directive...
+dnl 8 = checking whether printf supports the 'ls' directive...
+dnl 9 = checking whether printf supports POSIX/XSI format strings with positions...
+dnl 10 = checking whether printf supports the grouping flag...
+dnl 11 = checking whether printf supports the left-adjust flag correctly...
+dnl 12 = checking whether printf supports the zero flag correctly...
+dnl 13 = checking whether printf supports large precisions...
+dnl 14 = checking whether printf survives out-of-memory conditions...
+dnl 15 = checking for snprintf...
+dnl 16 = checking whether snprintf truncates the result as in C99...
+dnl 17 = checking whether snprintf returns a byte count as in C99...
+dnl 18 = checking whether snprintf fully supports the 'n' directive...
+dnl 19 = checking whether snprintf respects a size of 1...
+dnl 20 = checking whether vsnprintf respects a zero size as in C99...
+dnl
+dnl . = yes, # = no.
+dnl
+dnl                                  1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20
+dnl   glibc 2.5                      .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
+dnl   glibc 2.3.6                    .  .  .  .  #  .  .  .  .  .  .  .  .  .  .  .  .  .  .  .
+dnl   FreeBSD 5.4, 6.1               .  .  .  .  #  .  .  .  .  .  .  #  .  #  .  .  .  .  .  .
+dnl   Mac OS X 10.5.8                .  .  .  #  #  .  .  .  .  .  .  #  .  .  .  .  .  .  .  .
+dnl   Mac OS X 10.3.9                .  .  .  .  #  .  .  .  .  .  .  #  .  #  .  .  .  .  .  .
+dnl   OpenBSD 3.9, 4.0               .  .  #  #  #  #  .  #  .  #  .  #  .  #  .  .  .  .  .  .
+dnl   Cygwin 1.7.0 (2009)            .  .  .  #  .  .  .  ?  .  .  .  .  .  ?  .  .  .  .  .  .
+dnl   Cygwin 1.5.25 (2008)           .  .  .  #  #  .  .  #  .  .  .  .  .  #  .  .  .  .  .  .
+dnl   Cygwin 1.5.19 (2006)           #  .  .  #  #  #  .  #  .  #  .  #  #  #  .  .  .  .  .  .
+dnl   Solaris 11.3                   .  .  .  .  #  .  .  #  .  .  .  .  .  .  .  .  .  .  .  .
+dnl   Solaris 11.0                   .  .  #  #  #  .  .  #  .  .  .  #  .  .  .  .  .  .  .  .
+dnl   Solaris 10                     .  .  #  #  #  .  .  #  .  .  .  #  #  .  .  .  .  .  .  .
+dnl   Solaris 2.6 ... 9              #  .  #  #  #  #  .  #  .  .  .  #  #  .  .  .  #  .  .  .
+dnl   Solaris 2.5.1                  #  .  #  #  #  #  .  #  .  .  .  #  .  .  #  #  #  #  #  #
+dnl   AIX 7.1                        .  .  #  #  #  .  .  .  .  .  .  #  #  .  .  .  .  .  .  .
+dnl   AIX 5.2                        .  .  #  #  #  .  .  .  .  .  .  #  .  .  .  .  .  .  .  .
+dnl   AIX 4.3.2, 5.1                 #  .  #  #  #  #  .  .  .  .  .  #  .  .  .  .  #  .  .  .
+dnl   HP-UX 11.31                    .  .  .  .  #  .  .  .  .  .  .  #  .  .  .  .  #  #  .  .
+dnl   HP-UX 11.{00,11,23}            #  .  .  .  #  #  .  .  .  .  .  #  .  .  .  .  #  #  .  #
+dnl   HP-UX 10.20                    #  .  #  .  #  #  .  ?  .  .  #  #  .  .  .  .  #  #  ?  #
+dnl   IRIX 6.5                       #  .  #  #  #  #  .  #  .  .  .  #  .  .  .  .  #  .  .  .
+dnl   OSF/1 5.1                      #  .  #  #  #  #  .  .  .  .  .  #  .  .  .  .  #  .  .  #
+dnl   OSF/1 4.0d                     #  .  #  #  #  #  .  .  .  .  .  #  .  .  #  #  #  #  #  #
+dnl   NetBSD 5.0                     .  .  .  #  #  .  .  .  .  .  .  #  .  #  .  .  .  .  .  .
+dnl   NetBSD 4.0                     .  ?  ?  ?  ?  ?  .  ?  .  ?  ?  ?  ?  ?  .  .  .  ?  ?  ?
+dnl   NetBSD 3.0                     .  .  .  .  #  #  .  ?  #  #  ?  #  .  #  .  .  .  .  .  .
+dnl   Haiku                          .  .  .  #  #  #  .  #  .  .  .  .  .  ?  .  .  ?  .  .  .
+dnl   BeOS                           #  #  .  #  #  #  .  ?  #  .  ?  .  #  ?  .  .  ?  .  .  .
+dnl   old mingw / msvcrt             #  #  #  #  #  #  .  .  #  #  .  #  #  ?  .  #  #  #  .  .
+dnl   MSVC 9                         #  #  #  #  #  #  #  .  #  #  .  #  #  ?  #  #  #  #  .  .
+dnl   mingw 2009-2011                .  #  .  #  .  .  .  .  #  #  .  .  .  ?  .  .  .  .  .  .
+dnl   mingw-w64 2011                 #  #  #  #  #  #  .  .  #  #  .  #  #  ?  .  #  #  #  .  .
diff --git a/gnulib_m4/signbit.m4 b/gnulib_m4/signbit.m4
new file mode 100644 (file)
index 0000000..9e7884d
--- /dev/null
@@ -0,0 +1,377 @@
+# signbit.m4 serial 16
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_SIGNBIT],
+[
+  AC_REQUIRE([gl_MATH_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+  AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <math.h>
+/* If signbit is defined as a function, don't use it, since calling it for
+   'float' or 'long double' arguments would involve conversions.
+   If signbit is not declared at all but exists as a library function, don't
+   use it, since the prototype may not match.
+   If signbit is not declared at all but exists as a compiler built-in, don't
+   use it, since it's preferable to use __builtin_signbit* (no warnings,
+   no conversions).  */
+#ifndef signbit
+# error "signbit should be a macro"
+#endif
+#include <string.h>
+]gl_SIGNBIT_TEST_PROGRAM
+])],
+        [gl_cv_func_signbit=yes],
+        [gl_cv_func_signbit=no],
+        [case "$host_os" in
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;;
+                          # Guess yes on native Windows.
+           mingw*)        gl_cv_func_signbit="guessing yes" ;;
+                          # If we don't know, assume the worst.
+           *)             gl_cv_func_signbit="guessing no" ;;
+         esac
+        ])
+    ])
+  dnl GCC 4.0 and newer provides three built-ins for signbit.
+  dnl They can be used without warnings, also in C++, regardless of <math.h>.
+  dnl But they may expand to calls to functions, which may or may not be in
+  dnl libc.
+  AC_CACHE_CHECK([for signbit compiler built-ins], [gl_cv_func_signbit_gcc],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#if __GNUC__ >= 4
+# define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
+    __builtin_signbitf (x))
+#else
+# error "signbit should be three compiler built-ins"
+#endif
+#include <string.h>
+]gl_SIGNBIT_TEST_PROGRAM
+])],
+        [gl_cv_func_signbit_gcc=yes],
+        [gl_cv_func_signbit_gcc=no],
+        [case "$host_os" in
+                          # Guess yes on glibc systems.
+           *-gnu* | gnu*) gl_cv_func_signbit_gcc="guessing yes" ;;
+                          # Guess yes on mingw, no on MSVC.
+           mingw*)        if test -n "$GCC"; then
+                            gl_cv_func_signbit_gcc="guessing yes"
+                          else
+                            gl_cv_func_signbit_gcc="guessing no"
+                          fi
+                          ;;
+                          # If we don't know, assume the worst.
+           *)             gl_cv_func_signbit_gcc="guessing no" ;;
+         esac
+        ])
+    ])
+  dnl Use the compiler built-ins whenever possible, because they are more
+  dnl efficient than the system library functions (if they exist).
+  case "$gl_cv_func_signbit_gcc" in
+    *yes)
+      REPLACE_SIGNBIT_USING_GCC=1
+      ;;
+    *)
+      case "$gl_cv_func_signbit" in
+        *yes) ;;
+        *)
+          dnl REPLACE_SIGNBIT=1 makes sure the signbit[fdl] functions get built.
+          REPLACE_SIGNBIT=1
+          gl_FLOAT_SIGN_LOCATION
+          gl_DOUBLE_SIGN_LOCATION
+          gl_LONG_DOUBLE_SIGN_LOCATION
+          if test "$gl_cv_cc_float_signbit" = unknown; then
+            dnl Test whether copysignf() is declared.
+            AC_CHECK_DECLS([copysignf], , , [[#include <math.h>]])
+            if test "$ac_cv_have_decl_copysignf" = yes; then
+              dnl Test whether copysignf() can be used without libm.
+              AC_CACHE_CHECK([whether copysignf can be used without linking with libm],
+                [gl_cv_func_copysignf_no_libm],
+                [
+                  AC_LINK_IFELSE(
+                    [AC_LANG_PROGRAM(
+                       [[#include <math.h>
+                         float x, y;]],
+                       [[return copysignf (x, y) < 0;]])],
+                    [gl_cv_func_copysignf_no_libm=yes],
+                    [gl_cv_func_copysignf_no_libm=no])
+                ])
+              if test $gl_cv_func_copysignf_no_libm = yes; then
+                AC_DEFINE([HAVE_COPYSIGNF_IN_LIBC], [1],
+                  [Define if the copysignf function is declared in <math.h> and available in libc.])
+              fi
+            fi
+          fi
+          if test "$gl_cv_cc_double_signbit" = unknown; then
+            dnl Test whether copysign() is declared.
+            AC_CHECK_DECLS([copysign], , , [[#include <math.h>]])
+            if test "$ac_cv_have_decl_copysign" = yes; then
+              dnl Test whether copysign() can be used without libm.
+              AC_CACHE_CHECK([whether copysign can be used without linking with libm],
+                [gl_cv_func_copysign_no_libm],
+                [
+                  AC_LINK_IFELSE(
+                    [AC_LANG_PROGRAM(
+                       [[#include <math.h>
+                         double x, y;]],
+                       [[return copysign (x, y) < 0;]])],
+                    [gl_cv_func_copysign_no_libm=yes],
+                    [gl_cv_func_copysign_no_libm=no])
+                ])
+              if test $gl_cv_func_copysign_no_libm = yes; then
+                AC_DEFINE([HAVE_COPYSIGN_IN_LIBC], [1],
+                  [Define if the copysign function is declared in <math.h> and available in libc.])
+              fi
+            fi
+          fi
+          if test "$gl_cv_cc_long_double_signbit" = unknown; then
+            dnl Test whether copysignl() is declared.
+            AC_CHECK_DECLS([copysignl], , , [[#include <math.h>]])
+            if test "$ac_cv_have_decl_copysignl" = yes; then
+              dnl Test whether copysignl() can be used without libm.
+              AC_CACHE_CHECK([whether copysignl can be used without linking with libm],
+                [gl_cv_func_copysignl_no_libm],
+                [
+                  AC_LINK_IFELSE(
+                    [AC_LANG_PROGRAM(
+                       [[#include <math.h>
+                         long double x, y;]],
+                       [[return copysignl (x, y) < 0;]])],
+                    [gl_cv_func_copysignl_no_libm=yes],
+                    [gl_cv_func_copysignl_no_libm=no])
+                ])
+              if test $gl_cv_func_copysignl_no_libm = yes; then
+                AC_DEFINE([HAVE_COPYSIGNL_IN_LIBC], [1],
+                  [Define if the copysignl function is declared in <math.h> and available in libc.])
+              fi
+            fi
+          fi
+          ;;
+      esac
+      ;;
+  esac
+])
+
+AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[
+/* Global variables.
+   Needed because GCC 4 constant-folds __builtin_signbitl (literal)
+   but cannot constant-fold            __builtin_signbitl (variable).  */
+float vf;
+double vd;
+long double vl;
+int main ()
+{
+/* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0.
+   So we use -p0f and -p0d instead.  */
+float p0f = 0.0f;
+float m0f = -p0f;
+double p0d = 0.0;
+double m0d = -p0d;
+/* On HP-UX 10.20, negating 0.0L does not yield -0.0L.
+   So we use another constant expression instead.
+   But that expression does not work on other platforms, such as when
+   cross-compiling to PowerPC on Mac OS X 10.5.  */
+long double p0l = 0.0L;
+#if defined __hpux || defined __sgi
+long double m0l = -LDBL_MIN * LDBL_MIN;
+#else
+long double m0l = -p0l;
+#endif
+  int result = 0;
+  if (signbit (vf)) /* link check */
+    vf++;
+  {
+    float plus_inf = 1.0f / p0f;
+    float minus_inf = -1.0f / p0f;
+    if (!(!signbit (255.0f)
+          && signbit (-255.0f)
+          && !signbit (p0f)
+          && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 1;
+  }
+  if (signbit (vd)) /* link check */
+    vd++;
+  {
+    double plus_inf = 1.0 / p0d;
+    double minus_inf = -1.0 / p0d;
+    if (!(!signbit (255.0)
+          && signbit (-255.0)
+          && !signbit (p0d)
+          && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d))
+          && !signbit (plus_inf)
+          && signbit (minus_inf)))
+      result |= 2;
+  }
+  if (signbit (vl)) /* link check */
+    vl++;
+  {
+    long double plus_inf = 1.0L / p0l;
+    long double minus_inf = -1.0L / p0l;
+    if (signbit (255.0L))
+      result |= 4;
+    if (!signbit (-255.0L))
+      result |= 4;
+    if (signbit (p0l))
+      result |= 8;
+    if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l)))
+      result |= 16;
+    if (signbit (plus_inf))
+      result |= 32;
+    if (!signbit (minus_inf))
+      result |= 64;
+  }
+  return result;
+}
+]])
+
+AC_DEFUN([gl_FLOAT_SIGN_LOCATION],
+[
+  gl_FLOATTYPE_SIGN_LOCATION([float], [gl_cv_cc_float_signbit], [f], [FLT])
+])
+
+AC_DEFUN([gl_DOUBLE_SIGN_LOCATION],
+[
+  gl_FLOATTYPE_SIGN_LOCATION([double], [gl_cv_cc_double_signbit], [], [DBL])
+])
+
+AC_DEFUN([gl_LONG_DOUBLE_SIGN_LOCATION],
+[
+  gl_FLOATTYPE_SIGN_LOCATION([long double], [gl_cv_cc_long_double_signbit], [L], [LDBL])
+])
+
+AC_DEFUN([gl_FLOATTYPE_SIGN_LOCATION],
+[
+  AC_CACHE_CHECK([where to find the sign bit in a '$1'],
+    [$2],
+    [
+      AC_RUN_IFELSE(
+        [AC_LANG_SOURCE([[
+#include <stddef.h>
+#include <stdio.h>
+#define NWORDS \
+  ((sizeof ($1) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { $1 value; unsigned int word[NWORDS]; }
+        memory_float;
+static memory_float plus = { 1.0$3 };
+static memory_float minus = { -1.0$3 };
+int main ()
+{
+  size_t j, k, i;
+  unsigned int m;
+  FILE *fp = fopen ("conftest.out", "w");
+  if (fp == NULL)
+    return 1;
+  /* Find the different bit.  */
+  k = 0; m = 0;
+  for (j = 0; j < NWORDS; j++)
+    {
+      unsigned int x = plus.word[j] ^ minus.word[j];
+      if ((x & (x - 1)) || (x && m))
+        {
+          /* More than one bit difference.  */
+          fprintf (fp, "unknown");
+          fclose (fp);
+          return 2;
+        }
+      if (x)
+        {
+          k = j;
+          m = x;
+        }
+    }
+  if (m == 0)
+    {
+      /* No difference.  */
+      fprintf (fp, "unknown");
+      fclose (fp);
+      return 3;
+    }
+  /* Now m = plus.word[k] ^ ~minus.word[k].  */
+  if (plus.word[k] & ~minus.word[k])
+    {
+      /* Oh? The sign bit is set in the positive and cleared in the negative
+         numbers?  */
+      fprintf (fp, "unknown");
+      fclose (fp);
+      return 4;
+    }
+  for (i = 0; ; i++)
+    if ((m >> i) & 1)
+      break;
+  fprintf (fp, "word %d bit %d", (int) k, (int) i);
+  if (fclose (fp) != 0)
+    return 5;
+  return 0;
+}
+        ]])],
+        [$2=`cat conftest.out`],
+        [$2="unknown"],
+        [
+          dnl When cross-compiling, we don't know. It depends on the
+          dnl ABI and compiler version. There are too many cases.
+          $2="unknown"
+        ])
+      rm -f conftest.out
+    ])
+  case "$]$2[" in
+    word*bit*)
+      word=`echo "$]$2[" | sed -e 's/word //' -e 's/ bit.*//'`
+      bit=`echo "$]$2[" | sed -e 's/word.*bit //'`
+      AC_DEFINE_UNQUOTED([$4][_SIGNBIT_WORD], [$word],
+        [Define as the word index where to find the sign of '$1'.])
+      AC_DEFINE_UNQUOTED([$4][_SIGNBIT_BIT], [$bit],
+        [Define as the bit index in the word where to find the sign of '$1'.])
+      ;;
+  esac
+])
+
+# Expands to code that defines a function signbitf(float).
+# It extracts the sign bit of a non-NaN value.
+AC_DEFUN([gl_FLOAT_SIGNBIT_CODE],
+[
+  gl_FLOATTYPE_SIGNBIT_CODE([float], [f], [f])
+])
+
+# Expands to code that defines a function signbitd(double).
+# It extracts the sign bit of a non-NaN value.
+AC_DEFUN([gl_DOUBLE_SIGNBIT_CODE],
+[
+  gl_FLOATTYPE_SIGNBIT_CODE([double], [d], [])
+])
+
+# Expands to code that defines a function signbitl(long double).
+# It extracts the sign bit of a non-NaN value.
+AC_DEFUN([gl_LONG_DOUBLE_SIGNBIT_CODE],
+[
+  gl_FLOATTYPE_SIGNBIT_CODE([long double], [l], [L])
+])
+
+AC_DEFUN([gl_FLOATTYPE_SIGNBIT_CODE],
+[[
+static int
+signbit$2 ($1 value)
+{
+  typedef union { $1 f; unsigned char b[sizeof ($1)]; } float_union;
+  static float_union plus_one = { 1.0$3 };   /* unused bits are zero here */
+  static float_union minus_one = { -1.0$3 }; /* unused bits are zero here */
+  /* Compute the sign bit mask as the XOR of plus_one and minus_one.  */
+  float_union u;
+  unsigned int i;
+  u.f = value;
+  for (i = 0; i < sizeof ($1); i++)
+    if (u.b[i] & (plus_one.b[i] ^ minus_one.b[i]))
+      return 1;
+  return 0;
+}
+]])
diff --git a/gnulib_m4/size_max.m4 b/gnulib_m4/size_max.m4
new file mode 100644 (file)
index 0000000..2b770e6
--- /dev/null
@@ -0,0 +1,79 @@
+# size_max.m4 serial 10
+dnl Copyright (C) 2003, 2005-2006, 2008-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+
+AC_DEFUN([gl_SIZE_MAX],
+[
+  AC_CHECK_HEADERS([stdint.h])
+  dnl First test whether the system already has SIZE_MAX.
+  AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [
+    gl_cv_size_max=
+    AC_EGREP_CPP([Found it], [
+#include <limits.h>
+#if HAVE_STDINT_H
+#include <stdint.h>
+#endif
+#ifdef SIZE_MAX
+Found it
+#endif
+], [gl_cv_size_max=yes])
+    if test -z "$gl_cv_size_max"; then
+      dnl Define it ourselves. Here we assume that the type 'size_t' is not wider
+      dnl than the type 'unsigned long'. Try hard to find a definition that can
+      dnl be used in a preprocessor #if, i.e. doesn't contain a cast.
+      AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1],
+        [#include <stddef.h>
+#include <limits.h>], [size_t_bits_minus_1=])
+      AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)],
+        [#include <stddef.h>], [fits_in_uint=])
+      if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then
+        if test $fits_in_uint = 1; then
+          dnl Even though SIZE_MAX fits in an unsigned int, it must be of type
+          dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'.
+          AC_COMPILE_IFELSE(
+            [AC_LANG_PROGRAM(
+               [[#include <stddef.h>
+                 extern size_t foo;
+                 extern unsigned long foo;
+               ]],
+               [[]])],
+            [fits_in_uint=0])
+        fi
+        dnl We cannot use 'expr' to simplify this expression, because 'expr'
+        dnl works only with 'long' integers in the host environment, while we
+        dnl might be cross-compiling from a 32-bit platform to a 64-bit platform.
+        if test $fits_in_uint = 1; then
+          gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        else
+          gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)"
+        fi
+      else
+        dnl Shouldn't happen, but who knows...
+        gl_cv_size_max='((size_t)~(size_t)0)'
+      fi
+    fi
+  ])
+  if test "$gl_cv_size_max" != yes; then
+    AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max],
+      [Define as the maximum value of type 'size_t', if the system doesn't define it.])
+  fi
+  dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after
+  dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with
+  dnl #define by AC_DEFINE_UNQUOTED.
+  AH_VERBATIM([SIZE_MAX],
+[/* Define as the maximum value of type 'size_t', if the system doesn't define
+   it. */
+#ifndef SIZE_MAX
+# undef SIZE_MAX
+#endif])
+])
+
+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
+dnl Remove this when we can assume autoconf >= 2.61.
+m4_ifdef([AC_COMPUTE_INT], [], [
+  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
+])
diff --git a/gnulib_m4/snprintf.m4 b/gnulib_m4/snprintf.m4
new file mode 100644 (file)
index 0000000..decc8e5
--- /dev/null
@@ -0,0 +1,62 @@
+# snprintf.m4 serial 7
+dnl Copyright (C) 2002-2004, 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Libintl 0.17 will replace snprintf only if it does not support %1$s,
+dnl but defers to any gnulib snprintf replacements.  Therefore, gnulib
+dnl must guarantee that the decision for replacing snprintf is a superset
+dnl of the reasons checked by libintl.
+AC_DEFUN([gl_FUNC_SNPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  gl_cv_func_snprintf_usable=no
+  AC_CHECK_FUNCS([snprintf])
+  if test $ac_cv_func_snprintf = yes; then
+    gl_SNPRINTF_SIZE1
+    case "$gl_cv_func_snprintf_size1" in
+      *yes)
+        gl_SNPRINTF_RETVAL_C99
+        case "$gl_cv_func_snprintf_retval_c99" in
+          *yes)
+            gl_PRINTF_POSITIONS
+            case "$gl_cv_func_printf_positions" in
+              *yes)
+                gl_cv_func_snprintf_usable=yes
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_snprintf_usable = no; then
+    gl_REPLACE_SNPRINTF
+  fi
+  AC_CHECK_DECLS_ONCE([snprintf])
+  if test $ac_cv_have_decl_snprintf = no; then
+    HAVE_DECL_SNPRINTF=0
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_SNPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_LIBOBJ([snprintf])
+  if test $ac_cv_func_snprintf = yes; then
+    REPLACE_SNPRINTF=1
+  else
+    AC_CHECK_DECLS_ONCE([snprintf])
+    if test $ac_cv_have_decl_snprintf = yes; then
+      dnl If the function is declared but does not appear to exist, it may be
+      dnl defined as an inline function. In order to avoid a conflict, we have
+      dnl to define rpl_snprintf, not snprintf.
+      REPLACE_SNPRINTF=1
+    fi
+  fi
+  gl_PREREQ_SNPRINTF
+])
+
+# Prerequisites of lib/snprintf.c.
+AC_DEFUN([gl_PREREQ_SNPRINTF], [:])
diff --git a/gnulib_m4/ssize_t.m4 b/gnulib_m4/ssize_t.m4
new file mode 100644 (file)
index 0000000..0977f20
--- /dev/null
@@ -0,0 +1,23 @@
+# ssize_t.m4 serial 5 (gettext-0.18.2)
+dnl Copyright (C) 2001-2003, 2006, 2010-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether ssize_t is defined.
+
+AC_DEFUN([gt_TYPE_SSIZE_T],
+[
+  AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <sys/types.h>]],
+          [[int x = sizeof (ssize_t *) + sizeof (ssize_t);
+            return !x;]])],
+       [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])])
+  if test $gt_cv_ssize_t = no; then
+    AC_DEFINE([ssize_t], [int],
+              [Define as a signed type of the same size as size_t.])
+  fi
+])
diff --git a/gnulib_m4/stddef_h.m4 b/gnulib_m4/stddef_h.m4
new file mode 100644 (file)
index 0000000..07b040a
--- /dev/null
@@ -0,0 +1,72 @@
+dnl A placeholder for <stddef.h>, for platforms that have issues.
+# stddef_h.m4 serial 6
+dnl Copyright (C) 2009-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDDEF_H],
+[
+  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  STDDEF_H=
+
+  dnl Test whether the type max_align_t exists and whether its alignment
+  dnl "is as great as is supported by the implementation in all contexts".
+  AC_CACHE_CHECK([for good max_align_t],
+    [gl_cv_type_max_align_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <stddef.h>
+            unsigned int s = sizeof (max_align_t);
+            #if defined __GNUC__ || defined __IBM__ALIGNOF__
+            int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1];
+            int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1];
+            #endif
+          ]])],
+       [gl_cv_type_max_align_t=yes],
+       [gl_cv_type_max_align_t=no])
+    ])
+  if test $gl_cv_type_max_align_t = no; then
+    HAVE_MAX_ALIGN_T=0
+    STDDEF_H=stddef.h
+  fi
+
+  if test $gt_cv_c_wchar_t = no; then
+    HAVE_WCHAR_T=0
+    STDDEF_H=stddef.h
+  fi
+
+  AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
+    [gl_cv_decl_null_works],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h>
+      int test[2 * (sizeof NULL == sizeof (void *)) -1];
+]])],
+      [gl_cv_decl_null_works=yes],
+      [gl_cv_decl_null_works=no])])
+  if test $gl_cv_decl_null_works = no; then
+    REPLACE_NULL=1
+    STDDEF_H=stddef.h
+  fi
+
+  AC_SUBST([STDDEF_H])
+  AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"])
+  if test -n "$STDDEF_H"; then
+    gl_NEXT_HEADERS([stddef.h])
+  fi
+])
+
+AC_DEFUN([gl_STDDEF_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+])
+
+AC_DEFUN([gl_STDDEF_H_DEFAULTS],
+[
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
+  HAVE_MAX_ALIGN_T=1;            AC_SUBST([HAVE_MAX_ALIGN_T])
+  HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
+])
diff --git a/gnulib_m4/stdint.m4 b/gnulib_m4/stdint.m4
new file mode 100644 (file)
index 0000000..38dbbed
--- /dev/null
@@ -0,0 +1,548 @@
+# stdint.m4 serial 52
+dnl Copyright (C) 2001-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert and Bruno Haible.
+dnl Test whether <stdint.h> is supported or must be substituted.
+
+AC_DEFUN_ONCE([gl_STDINT_H],
+[
+  AC_PREREQ([2.59])dnl
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  AC_REQUIRE([gl_LIMITS_H])
+  AC_REQUIRE([gt_TYPE_WINT_T])
+
+  dnl Check for long long int and unsigned long long int.
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  if test $ac_cv_type_long_long_int = yes; then
+    HAVE_LONG_LONG_INT=1
+  else
+    HAVE_LONG_LONG_INT=0
+  fi
+  AC_SUBST([HAVE_LONG_LONG_INT])
+  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
+  if test $ac_cv_type_unsigned_long_long_int = yes; then
+    HAVE_UNSIGNED_LONG_LONG_INT=1
+  else
+    HAVE_UNSIGNED_LONG_LONG_INT=0
+  fi
+  AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT])
+
+  dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does.
+  AC_CHECK_HEADERS_ONCE([wchar.h])
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+  AC_SUBST([HAVE_WCHAR_H])
+
+  dnl Check for <inttypes.h>.
+  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h.
+  if test $ac_cv_header_inttypes_h = yes; then
+    HAVE_INTTYPES_H=1
+  else
+    HAVE_INTTYPES_H=0
+  fi
+  AC_SUBST([HAVE_INTTYPES_H])
+
+  dnl Check for <sys/types.h>.
+  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h.
+  if test $ac_cv_header_sys_types_h = yes; then
+    HAVE_SYS_TYPES_H=1
+  else
+    HAVE_SYS_TYPES_H=0
+  fi
+  AC_SUBST([HAVE_SYS_TYPES_H])
+
+  gl_CHECK_NEXT_HEADERS([stdint.h])
+  if test $ac_cv_header_stdint_h = yes; then
+    HAVE_STDINT_H=1
+  else
+    HAVE_STDINT_H=0
+  fi
+  AC_SUBST([HAVE_STDINT_H])
+
+  dnl Now see whether we need a substitute <stdint.h>.
+  if test $ac_cv_header_stdint_h = yes; then
+    AC_CACHE_CHECK([whether stdint.h conforms to C99],
+      [gl_cv_header_working_stdint_h],
+      [gl_cv_header_working_stdint_h=no
+       AC_COMPILE_IFELSE([
+         AC_LANG_PROGRAM([[
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
+#include <stdint.h>
+/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
+#if !(defined WCHAR_MIN && defined WCHAR_MAX)
+#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
+#endif
+]
+gl_STDINT_INCLUDES
+[
+#ifdef INT8_MAX
+int8_t a1 = INT8_MAX;
+int8_t a1min = INT8_MIN;
+#endif
+#ifdef INT16_MAX
+int16_t a2 = INT16_MAX;
+int16_t a2min = INT16_MIN;
+#endif
+#ifdef INT32_MAX
+int32_t a3 = INT32_MAX;
+int32_t a3min = INT32_MIN;
+#endif
+#ifdef INT64_MAX
+int64_t a4 = INT64_MAX;
+int64_t a4min = INT64_MIN;
+#endif
+#ifdef UINT8_MAX
+uint8_t b1 = UINT8_MAX;
+#else
+typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
+#endif
+#ifdef UINT16_MAX
+uint16_t b2 = UINT16_MAX;
+#endif
+#ifdef UINT32_MAX
+uint32_t b3 = UINT32_MAX;
+#endif
+#ifdef UINT64_MAX
+uint64_t b4 = UINT64_MAX;
+#endif
+int_least8_t c1 = INT8_C (0x7f);
+int_least8_t c1max = INT_LEAST8_MAX;
+int_least8_t c1min = INT_LEAST8_MIN;
+int_least16_t c2 = INT16_C (0x7fff);
+int_least16_t c2max = INT_LEAST16_MAX;
+int_least16_t c2min = INT_LEAST16_MIN;
+int_least32_t c3 = INT32_C (0x7fffffff);
+int_least32_t c3max = INT_LEAST32_MAX;
+int_least32_t c3min = INT_LEAST32_MIN;
+int_least64_t c4 = INT64_C (0x7fffffffffffffff);
+int_least64_t c4max = INT_LEAST64_MAX;
+int_least64_t c4min = INT_LEAST64_MIN;
+uint_least8_t d1 = UINT8_C (0xff);
+uint_least8_t d1max = UINT_LEAST8_MAX;
+uint_least16_t d2 = UINT16_C (0xffff);
+uint_least16_t d2max = UINT_LEAST16_MAX;
+uint_least32_t d3 = UINT32_C (0xffffffff);
+uint_least32_t d3max = UINT_LEAST32_MAX;
+uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
+uint_least64_t d4max = UINT_LEAST64_MAX;
+int_fast8_t e1 = INT_FAST8_MAX;
+int_fast8_t e1min = INT_FAST8_MIN;
+int_fast16_t e2 = INT_FAST16_MAX;
+int_fast16_t e2min = INT_FAST16_MIN;
+int_fast32_t e3 = INT_FAST32_MAX;
+int_fast32_t e3min = INT_FAST32_MIN;
+int_fast64_t e4 = INT_FAST64_MAX;
+int_fast64_t e4min = INT_FAST64_MIN;
+uint_fast8_t f1 = UINT_FAST8_MAX;
+uint_fast16_t f2 = UINT_FAST16_MAX;
+uint_fast32_t f3 = UINT_FAST32_MAX;
+uint_fast64_t f4 = UINT_FAST64_MAX;
+#ifdef INTPTR_MAX
+intptr_t g = INTPTR_MAX;
+intptr_t gmin = INTPTR_MIN;
+#endif
+#ifdef UINTPTR_MAX
+uintptr_t h = UINTPTR_MAX;
+#endif
+intmax_t i = INTMAX_MAX;
+uintmax_t j = UINTMAX_MAX;
+
+/* Check that SIZE_MAX has the correct type, if possible.  */
+#if 201112 <= __STDC_VERSION__
+int k = _Generic (SIZE_MAX, size_t: 0);
+#elif (2 <= __GNUC__ || defined __IBM__TYPEOF__ \
+       || (0x5110 <= __SUNPRO_C && !__STDC__))
+extern size_t k;
+extern __typeof__ (SIZE_MAX) k;
+#endif
+
+#include <limits.h> /* for CHAR_BIT */
+#define TYPE_MINIMUM(t) \
+  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
+#define TYPE_MAXIMUM(t) \
+  ((t) ((t) 0 < (t) -1 \
+        ? (t) -1 \
+        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
+struct s {
+  int check_PTRDIFF:
+      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
+      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
+      ? 1 : -1;
+  /* Detect bug in FreeBSD 6.0 / ia64.  */
+  int check_SIG_ATOMIC:
+      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
+      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
+      ? 1 : -1;
+  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
+  int check_WCHAR:
+      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
+      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
+      ? 1 : -1;
+  /* Detect bug in mingw.  */
+  int check_WINT:
+      WINT_MIN == TYPE_MINIMUM (wint_t)
+      && WINT_MAX == TYPE_MAXIMUM (wint_t)
+      ? 1 : -1;
+
+  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
+  int check_UINT8_C:
+        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
+  int check_UINT16_C:
+        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
+
+  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
+#ifdef UINT8_MAX
+  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
+#endif
+#ifdef UINT16_MAX
+  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
+#endif
+#ifdef UINT32_MAX
+  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
+#endif
+#ifdef UINT64_MAX
+  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
+#endif
+  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
+  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
+  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
+  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
+  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
+  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
+  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
+  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
+  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
+  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
+  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
+};
+         ]])],
+         [dnl Determine whether the various *_MIN, *_MAX macros are usable
+          dnl in preprocessor expression. We could do it by compiling a test
+          dnl program for each of these macros. It is faster to run a program
+          dnl that inspects the macro expansion.
+          dnl This detects a bug on HP-UX 11.23/ia64.
+          AC_RUN_IFELSE([
+            AC_LANG_PROGRAM([[
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#define __STDC_CONSTANT_MACROS 1
+#define __STDC_LIMIT_MACROS 1
+#include <stdint.h>
+]
+gl_STDINT_INCLUDES
+[
+#include <stdio.h>
+#include <string.h>
+#define MVAL(macro) MVAL1(macro)
+#define MVAL1(expression) #expression
+static const char *macro_values[] =
+  {
+#ifdef INT8_MAX
+    MVAL (INT8_MAX),
+#endif
+#ifdef INT16_MAX
+    MVAL (INT16_MAX),
+#endif
+#ifdef INT32_MAX
+    MVAL (INT32_MAX),
+#endif
+#ifdef INT64_MAX
+    MVAL (INT64_MAX),
+#endif
+#ifdef UINT8_MAX
+    MVAL (UINT8_MAX),
+#endif
+#ifdef UINT16_MAX
+    MVAL (UINT16_MAX),
+#endif
+#ifdef UINT32_MAX
+    MVAL (UINT32_MAX),
+#endif
+#ifdef UINT64_MAX
+    MVAL (UINT64_MAX),
+#endif
+    NULL
+  };
+]], [[
+  const char **mv;
+  for (mv = macro_values; *mv != NULL; mv++)
+    {
+      const char *value = *mv;
+      /* Test whether it looks like a cast expression.  */
+      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
+          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
+          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
+          || strncmp (value, "((int)"/*)*/, 6) == 0
+          || strncmp (value, "((signed short)"/*)*/, 15) == 0
+          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
+        return mv - macro_values + 1;
+    }
+  return 0;
+]])],
+              [gl_cv_header_working_stdint_h=yes],
+              [],
+              [case "$host_os" in
+                         # Guess yes on native Windows.
+                 mingw*) gl_cv_header_working_stdint_h="guessing yes" ;;
+                         # In general, assume it works.
+                 *)      gl_cv_header_working_stdint_h="guessing yes" ;;
+               esac
+              ])
+         ])
+      ])
+  fi
+
+  HAVE_C99_STDINT_H=0
+  HAVE_SYS_BITYPES_H=0
+  HAVE_SYS_INTTYPES_H=0
+  STDINT_H=stdint.h
+  case "$gl_cv_header_working_stdint_h" in
+    *yes)
+      HAVE_C99_STDINT_H=1
+      dnl Now see whether the system <stdint.h> works without
+      dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined.
+      AC_CACHE_CHECK([whether stdint.h predates C++11],
+        [gl_cv_header_stdint_predates_cxx11_h],
+        [gl_cv_header_stdint_predates_cxx11_h=yes
+         AC_COMPILE_IFELSE([
+           AC_LANG_PROGRAM([[
+#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
+#include <stdint.h>
+]
+gl_STDINT_INCLUDES
+[
+intmax_t im = INTMAX_MAX;
+int32_t i32 = INT32_C (0x7fffffff);
+           ]])],
+           [gl_cv_header_stdint_predates_cxx11_h=no])])
+
+      if test "$gl_cv_header_stdint_predates_cxx11_h" = yes; then
+        AC_DEFINE([__STDC_CONSTANT_MACROS], [1],
+                  [Define to 1 if the system <stdint.h> predates C++11.])
+        AC_DEFINE([__STDC_LIMIT_MACROS], [1],
+                  [Define to 1 if the system <stdint.h> predates C++11.])
+      fi
+      AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.],
+        [gl_cv_header_stdint_width],
+        [gl_cv_header_stdint_width=no
+         AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM([[
+              /* Work if build is not clean.  */
+              #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1
+              #ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+               #define __STDC_WANT_IEC_60559_BFP_EXT__ 1
+              #endif
+              #include <stdint.h>
+              ]gl_STDINT_INCLUDES[
+              int iw = UINTMAX_WIDTH;
+              ]])],
+           [gl_cv_header_stdint_width=yes])])
+      if test "$gl_cv_header_stdint_width" = yes; then
+        STDINT_H=
+      fi
+      ;;
+    *)
+      dnl Check for <sys/inttypes.h>, and for
+      dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
+      AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
+      if test $ac_cv_header_sys_inttypes_h = yes; then
+        HAVE_SYS_INTTYPES_H=1
+      fi
+      if test $ac_cv_header_sys_bitypes_h = yes; then
+        HAVE_SYS_BITYPES_H=1
+      fi
+      gl_STDINT_TYPE_PROPERTIES
+      ;;
+  esac
+
+  dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH.
+  gl_REPLACE_LIMITS_H
+
+  AC_SUBST([HAVE_C99_STDINT_H])
+  AC_SUBST([HAVE_SYS_BITYPES_H])
+  AC_SUBST([HAVE_SYS_INTTYPES_H])
+  AC_SUBST([STDINT_H])
+  AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"])
+])
+
+dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
+dnl Determine the size of each of the given types in bits.
+AC_DEFUN([gl_STDINT_BITSIZEOF],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
+       [Define to the number of bits in type ']gltype['.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}],
+      [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT],
+         [$2
+#include <limits.h>], [result=unknown])
+       eval gl_cv_bitsizeof_${gltype}=\$result
+      ])
+    eval result=\$gl_cv_bitsizeof_${gltype}
+    if test $result = unknown; then
+      dnl Use a nonempty default, because some compilers, such as IRIX 5 cc,
+      dnl do a syntax check even on unused #if conditions and give an error
+      dnl on valid C code like this:
+      dnl   #if 0
+      dnl   # if  > 32
+      dnl   # endif
+      dnl   #endif
+      result=0
+    fi
+    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result])
+    eval BITSIZEOF_${GLTYPE}=\$result
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
+])
+
+dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES)
+dnl Determine the signedness of each of the given types.
+dnl Define HAVE_SIGNED_TYPE if type is signed.
+AC_DEFUN([gl_CHECK_TYPES_SIGNED],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
+       [Define to 1 if ']gltype[' is a signed integer type.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed],
+      [AC_COMPILE_IFELSE(
+         [AC_LANG_PROGRAM([$2[
+            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])],
+         result=yes, result=no)
+       eval gl_cv_type_${gltype}_signed=\$result
+      ])
+    eval result=\$gl_cv_type_${gltype}_signed
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    if test "$result" = yes; then
+      AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1])
+      eval HAVE_SIGNED_${GLTYPE}=1
+    else
+      eval HAVE_SIGNED_${GLTYPE}=0
+    fi
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
+])
+
+dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES)
+dnl Determine the suffix to use for integer constants of the given types.
+dnl Define t_SUFFIX for each such type.
+AC_DEFUN([gl_INTEGER_TYPE_SUFFIX],
+[
+  dnl Use a shell loop, to avoid bloating configure, and
+  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
+  dnl   config.h.in,
+  dnl - extra AC_SUBST calls, so that the right substitutions are made.
+  m4_foreach_w([gltype], [$1],
+    [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX],
+       [Define to l, ll, u, ul, ull, etc., as suitable for
+        constants of type ']gltype['.])])
+  for gltype in $1 ; do
+    AC_CACHE_CHECK([for $gltype integer literal suffix],
+      [gl_cv_type_${gltype}_suffix],
+      [eval gl_cv_type_${gltype}_suffix=no
+       eval result=\$gl_cv_type_${gltype}_signed
+       if test "$result" = yes; then
+         glsufu=
+       else
+         glsufu=u
+       fi
+       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
+         case $glsuf in
+           '')  gltype1='int';;
+           l)   gltype1='long int';;
+           ll)  gltype1='long long int';;
+           i64) gltype1='__int64';;
+           u)   gltype1='unsigned int';;
+           ul)  gltype1='unsigned long int';;
+           ull) gltype1='unsigned long long int';;
+           ui64)gltype1='unsigned __int64';;
+         esac
+         AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM([$2[
+              extern $gltype foo;
+              extern $gltype1 foo;]])],
+           [eval gl_cv_type_${gltype}_suffix=\$glsuf])
+         eval result=\$gl_cv_type_${gltype}_suffix
+         test "$result" != no && break
+       done])
+    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
+    eval result=\$gl_cv_type_${gltype}_suffix
+    test "$result" = no && result=
+    eval ${GLTYPE}_SUFFIX=\$result
+    AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result])
+  done
+  m4_foreach_w([gltype], [$1],
+    [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])])
+])
+
+dnl gl_STDINT_INCLUDES
+AC_DEFUN([gl_STDINT_INCLUDES],
+[[
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+  #include <stddef.h>
+  #include <signal.h>
+  #if HAVE_WCHAR_H
+  # include <stdio.h>
+  # include <time.h>
+  # include <wchar.h>
+  #endif
+]])
+
+dnl gl_STDINT_TYPE_PROPERTIES
+dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t
+dnl of interest to stdint.in.h.
+AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
+[
+  AC_REQUIRE([gl_MULTIARCH])
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_STDINT_BITSIZEOF([ptrdiff_t size_t],
+      [gl_STDINT_INCLUDES])
+  fi
+  gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+  gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+  gl_cv_type_ptrdiff_t_signed=yes
+  gl_cv_type_size_t_signed=no
+  if test $APPLE_UNIVERSAL_BUILD = 0; then
+    gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t],
+      [gl_STDINT_INCLUDES])
+  fi
+  gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t],
+    [gl_STDINT_INCLUDES])
+
+  dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99
+  dnl requirement that wint_t is "unchanged by default argument promotions".
+  dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t.
+  dnl Set the variable BITSIZEOF_WINT_T accordingly.
+  if test $GNULIB_OVERRIDES_WINT_T = 1; then
+    BITSIZEOF_WINT_T=32
+  fi
+])
+
+dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
+dnl Remove this when we can assume autoconf >= 2.61.
+m4_ifdef([AC_COMPUTE_INT], [], [
+  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
+])
diff --git a/gnulib_m4/stdint_h.m4 b/gnulib_m4/stdint_h.m4
new file mode 100644 (file)
index 0000000..2d2a33c
--- /dev/null
@@ -0,0 +1,27 @@
+# stdint_h.m4 serial 9
+dnl Copyright (C) 1997-2004, 2006, 2008-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Paul Eggert.
+
+# Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists,
+# doesn't clash with <sys/types.h>, and declares uintmax_t.
+
+AC_DEFUN([gl_AC_HEADER_STDINT_H],
+[
+  AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <sys/types.h>
+            #include <stdint.h>]],
+          [[uintmax_t i = (uintmax_t) -1; return !i;]])],
+       [gl_cv_header_stdint_h=yes],
+       [gl_cv_header_stdint_h=no])])
+  if test $gl_cv_header_stdint_h = yes; then
+    AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1],
+      [Define if <stdint.h> exists, doesn't clash with <sys/types.h>,
+       and declares uintmax_t. ])
+  fi
+])
diff --git a/gnulib_m4/stdio_h.m4 b/gnulib_m4/stdio_h.m4
new file mode 100644 (file)
index 0000000..0debe69
--- /dev/null
@@ -0,0 +1,225 @@
+# stdio_h.m4 serial 49
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_STDIO_H],
+[
+  AH_VERBATIM([MINGW_ANSI_STDIO],
+[/* Use GNU style printf and scanf.  */
+#ifndef __USE_MINGW_ANSI_STDIO
+# undef __USE_MINGW_ANSI_STDIO
+#endif
+])
+  AC_DEFINE([__USE_MINGW_ANSI_STDIO])
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  gl_NEXT_HEADERS([stdio.h])
+
+  dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and
+  dnl inttypes.h behave like gnu instead of system; we must give our
+  dnl printf wrapper the right attribute to match.
+  AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros],
+    [gl_cv_func_printf_attribute_flavor],
+    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
+       #define __STDC_FORMAT_MACROS 1
+       #include <stdio.h>
+       #include <inttypes.h>
+       /* For non-mingw systems, compilation will trivially succeed.
+          For mingw, compilation will succeed for older mingw (system
+          printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */
+       #if (defined _WIN32 && ! defined __CYGWIN__) && \
+         (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+       extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1];
+       #endif
+      ]])], [gl_cv_func_printf_attribute_flavor=system],
+      [gl_cv_func_printf_attribute_flavor=gnu])])
+  if test "$gl_cv_func_printf_attribute_flavor" = gnu; then
+    AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1],
+      [Define to 1 if printf and friends should be labeled with
+       attribute "__gnu_printf__" instead of "__printf__"])
+  fi
+
+  dnl No need to create extra modules for these functions. Everyone who uses
+  dnl <stdio.h> likely needs them.
+  GNULIB_FSCANF=1
+  gl_MODULE_INDICATOR([fscanf])
+  GNULIB_SCANF=1
+  gl_MODULE_INDICATOR([scanf])
+  GNULIB_FGETC=1
+  GNULIB_GETC=1
+  GNULIB_GETCHAR=1
+  GNULIB_FGETS=1
+  GNULIB_FREAD=1
+  dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c"
+  dnl "expected source file, required through AC_LIBSOURCES, not found". It is
+  dnl also an optimization, to avoid performing a configure check whose result
+  dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
+  dnl or GNULIB_NONBLOCKING redundant.
+  m4_ifdef([gl_NONBLOCKING_IO], [
+    gl_NONBLOCKING_IO
+    if test $gl_cv_have_nonblocking != yes; then
+      REPLACE_STDIO_READ_FUNCS=1
+      AC_LIBOBJ([stdio-read])
+    fi
+  ])
+
+  dnl No need to create extra modules for these functions. Everyone who uses
+  dnl <stdio.h> likely needs them.
+  GNULIB_FPRINTF=1
+  GNULIB_PRINTF=1
+  GNULIB_VFPRINTF=1
+  GNULIB_VPRINTF=1
+  GNULIB_FPUTC=1
+  GNULIB_PUTC=1
+  GNULIB_PUTCHAR=1
+  GNULIB_FPUTS=1
+  GNULIB_PUTS=1
+  GNULIB_FWRITE=1
+  dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
+  dnl "expected source file, required through AC_LIBSOURCES, not found". It is
+  dnl also an optimization, to avoid performing a configure check whose result
+  dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or
+  dnl GNULIB_SIGPIPE redundant.
+  m4_ifdef([gl_SIGNAL_SIGPIPE], [
+    gl_SIGNAL_SIGPIPE
+    if test $gl_cv_header_signal_h_SIGPIPE != yes; then
+      REPLACE_STDIO_WRITE_FUNCS=1
+      AC_LIBOBJ([stdio-write])
+    fi
+  ])
+  dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c"
+  dnl "expected source file, required through AC_LIBSOURCES, not found". It is
+  dnl also an optimization, to avoid performing a configure check whose result
+  dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING
+  dnl or GNULIB_NONBLOCKING redundant.
+  m4_ifdef([gl_NONBLOCKING_IO], [
+    gl_NONBLOCKING_IO
+    if test $gl_cv_have_nonblocking != yes; then
+      REPLACE_STDIO_WRITE_FUNCS=1
+      AC_LIBOBJ([stdio-write])
+    fi
+  ])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, and which is not
+  dnl guaranteed by both C89 and C11.
+  gl_WARN_ON_USE_PREPARE([[#include <stdio.h>
+    ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen
+    renameat snprintf tmpfile vdprintf vsnprintf])
+])
+
+AC_DEFUN([gl_STDIO_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_STDIO_H_DEFAULTS],
+[
+  GNULIB_DPRINTF=0;              AC_SUBST([GNULIB_DPRINTF])
+  GNULIB_FCLOSE=0;               AC_SUBST([GNULIB_FCLOSE])
+  GNULIB_FDOPEN=0;               AC_SUBST([GNULIB_FDOPEN])
+  GNULIB_FFLUSH=0;               AC_SUBST([GNULIB_FFLUSH])
+  GNULIB_FGETC=0;                AC_SUBST([GNULIB_FGETC])
+  GNULIB_FGETS=0;                AC_SUBST([GNULIB_FGETS])
+  GNULIB_FOPEN=0;                AC_SUBST([GNULIB_FOPEN])
+  GNULIB_FPRINTF=0;              AC_SUBST([GNULIB_FPRINTF])
+  GNULIB_FPRINTF_POSIX=0;        AC_SUBST([GNULIB_FPRINTF_POSIX])
+  GNULIB_FPURGE=0;               AC_SUBST([GNULIB_FPURGE])
+  GNULIB_FPUTC=0;                AC_SUBST([GNULIB_FPUTC])
+  GNULIB_FPUTS=0;                AC_SUBST([GNULIB_FPUTS])
+  GNULIB_FREAD=0;                AC_SUBST([GNULIB_FREAD])
+  GNULIB_FREOPEN=0;              AC_SUBST([GNULIB_FREOPEN])
+  GNULIB_FSCANF=0;               AC_SUBST([GNULIB_FSCANF])
+  GNULIB_FSEEK=0;                AC_SUBST([GNULIB_FSEEK])
+  GNULIB_FSEEKO=0;               AC_SUBST([GNULIB_FSEEKO])
+  GNULIB_FTELL=0;                AC_SUBST([GNULIB_FTELL])
+  GNULIB_FTELLO=0;               AC_SUBST([GNULIB_FTELLO])
+  GNULIB_FWRITE=0;               AC_SUBST([GNULIB_FWRITE])
+  GNULIB_GETC=0;                 AC_SUBST([GNULIB_GETC])
+  GNULIB_GETCHAR=0;              AC_SUBST([GNULIB_GETCHAR])
+  GNULIB_GETDELIM=0;             AC_SUBST([GNULIB_GETDELIM])
+  GNULIB_GETLINE=0;              AC_SUBST([GNULIB_GETLINE])
+  GNULIB_OBSTACK_PRINTF=0;       AC_SUBST([GNULIB_OBSTACK_PRINTF])
+  GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX])
+  GNULIB_PCLOSE=0;               AC_SUBST([GNULIB_PCLOSE])
+  GNULIB_PERROR=0;               AC_SUBST([GNULIB_PERROR])
+  GNULIB_POPEN=0;                AC_SUBST([GNULIB_POPEN])
+  GNULIB_PRINTF=0;               AC_SUBST([GNULIB_PRINTF])
+  GNULIB_PRINTF_POSIX=0;         AC_SUBST([GNULIB_PRINTF_POSIX])
+  GNULIB_PUTC=0;                 AC_SUBST([GNULIB_PUTC])
+  GNULIB_PUTCHAR=0;              AC_SUBST([GNULIB_PUTCHAR])
+  GNULIB_PUTS=0;                 AC_SUBST([GNULIB_PUTS])
+  GNULIB_REMOVE=0;               AC_SUBST([GNULIB_REMOVE])
+  GNULIB_RENAME=0;               AC_SUBST([GNULIB_RENAME])
+  GNULIB_RENAMEAT=0;             AC_SUBST([GNULIB_RENAMEAT])
+  GNULIB_SCANF=0;                AC_SUBST([GNULIB_SCANF])
+  GNULIB_SNPRINTF=0;             AC_SUBST([GNULIB_SNPRINTF])
+  GNULIB_SPRINTF_POSIX=0;        AC_SUBST([GNULIB_SPRINTF_POSIX])
+  GNULIB_STDIO_H_NONBLOCKING=0;  AC_SUBST([GNULIB_STDIO_H_NONBLOCKING])
+  GNULIB_STDIO_H_SIGPIPE=0;      AC_SUBST([GNULIB_STDIO_H_SIGPIPE])
+  GNULIB_TMPFILE=0;              AC_SUBST([GNULIB_TMPFILE])
+  GNULIB_VASPRINTF=0;            AC_SUBST([GNULIB_VASPRINTF])
+  GNULIB_VFSCANF=0;              AC_SUBST([GNULIB_VFSCANF])
+  GNULIB_VSCANF=0;               AC_SUBST([GNULIB_VSCANF])
+  GNULIB_VDPRINTF=0;             AC_SUBST([GNULIB_VDPRINTF])
+  GNULIB_VFPRINTF=0;             AC_SUBST([GNULIB_VFPRINTF])
+  GNULIB_VFPRINTF_POSIX=0;       AC_SUBST([GNULIB_VFPRINTF_POSIX])
+  GNULIB_VPRINTF=0;              AC_SUBST([GNULIB_VPRINTF])
+  GNULIB_VPRINTF_POSIX=0;        AC_SUBST([GNULIB_VPRINTF_POSIX])
+  GNULIB_VSNPRINTF=0;            AC_SUBST([GNULIB_VSNPRINTF])
+  GNULIB_VSPRINTF_POSIX=0;       AC_SUBST([GNULIB_VSPRINTF_POSIX])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_DECL_FPURGE=1;            AC_SUBST([HAVE_DECL_FPURGE])
+  HAVE_DECL_FSEEKO=1;            AC_SUBST([HAVE_DECL_FSEEKO])
+  HAVE_DECL_FTELLO=1;            AC_SUBST([HAVE_DECL_FTELLO])
+  HAVE_DECL_GETDELIM=1;          AC_SUBST([HAVE_DECL_GETDELIM])
+  HAVE_DECL_GETLINE=1;           AC_SUBST([HAVE_DECL_GETLINE])
+  HAVE_DECL_OBSTACK_PRINTF=1;    AC_SUBST([HAVE_DECL_OBSTACK_PRINTF])
+  HAVE_DECL_SNPRINTF=1;          AC_SUBST([HAVE_DECL_SNPRINTF])
+  HAVE_DECL_VSNPRINTF=1;         AC_SUBST([HAVE_DECL_VSNPRINTF])
+  HAVE_DPRINTF=1;                AC_SUBST([HAVE_DPRINTF])
+  HAVE_FSEEKO=1;                 AC_SUBST([HAVE_FSEEKO])
+  HAVE_FTELLO=1;                 AC_SUBST([HAVE_FTELLO])
+  HAVE_PCLOSE=1;                 AC_SUBST([HAVE_PCLOSE])
+  HAVE_POPEN=1;                  AC_SUBST([HAVE_POPEN])
+  HAVE_RENAMEAT=1;               AC_SUBST([HAVE_RENAMEAT])
+  HAVE_VASPRINTF=1;              AC_SUBST([HAVE_VASPRINTF])
+  HAVE_VDPRINTF=1;               AC_SUBST([HAVE_VDPRINTF])
+  REPLACE_DPRINTF=0;             AC_SUBST([REPLACE_DPRINTF])
+  REPLACE_FCLOSE=0;              AC_SUBST([REPLACE_FCLOSE])
+  REPLACE_FDOPEN=0;              AC_SUBST([REPLACE_FDOPEN])
+  REPLACE_FFLUSH=0;              AC_SUBST([REPLACE_FFLUSH])
+  REPLACE_FOPEN=0;               AC_SUBST([REPLACE_FOPEN])
+  REPLACE_FPRINTF=0;             AC_SUBST([REPLACE_FPRINTF])
+  REPLACE_FPURGE=0;              AC_SUBST([REPLACE_FPURGE])
+  REPLACE_FREOPEN=0;             AC_SUBST([REPLACE_FREOPEN])
+  REPLACE_FSEEK=0;               AC_SUBST([REPLACE_FSEEK])
+  REPLACE_FSEEKO=0;              AC_SUBST([REPLACE_FSEEKO])
+  REPLACE_FTELL=0;               AC_SUBST([REPLACE_FTELL])
+  REPLACE_FTELLO=0;              AC_SUBST([REPLACE_FTELLO])
+  REPLACE_GETDELIM=0;            AC_SUBST([REPLACE_GETDELIM])
+  REPLACE_GETLINE=0;             AC_SUBST([REPLACE_GETLINE])
+  REPLACE_OBSTACK_PRINTF=0;      AC_SUBST([REPLACE_OBSTACK_PRINTF])
+  REPLACE_PERROR=0;              AC_SUBST([REPLACE_PERROR])
+  REPLACE_POPEN=0;               AC_SUBST([REPLACE_POPEN])
+  REPLACE_PRINTF=0;              AC_SUBST([REPLACE_PRINTF])
+  REPLACE_REMOVE=0;              AC_SUBST([REPLACE_REMOVE])
+  REPLACE_RENAME=0;              AC_SUBST([REPLACE_RENAME])
+  REPLACE_RENAMEAT=0;            AC_SUBST([REPLACE_RENAMEAT])
+  REPLACE_SNPRINTF=0;            AC_SUBST([REPLACE_SNPRINTF])
+  REPLACE_SPRINTF=0;             AC_SUBST([REPLACE_SPRINTF])
+  REPLACE_STDIO_READ_FUNCS=0;    AC_SUBST([REPLACE_STDIO_READ_FUNCS])
+  REPLACE_STDIO_WRITE_FUNCS=0;   AC_SUBST([REPLACE_STDIO_WRITE_FUNCS])
+  REPLACE_TMPFILE=0;             AC_SUBST([REPLACE_TMPFILE])
+  REPLACE_VASPRINTF=0;           AC_SUBST([REPLACE_VASPRINTF])
+  REPLACE_VDPRINTF=0;            AC_SUBST([REPLACE_VDPRINTF])
+  REPLACE_VFPRINTF=0;            AC_SUBST([REPLACE_VFPRINTF])
+  REPLACE_VPRINTF=0;             AC_SUBST([REPLACE_VPRINTF])
+  REPLACE_VSNPRINTF=0;           AC_SUBST([REPLACE_VSNPRINTF])
+  REPLACE_VSPRINTF=0;            AC_SUBST([REPLACE_VSPRINTF])
+])
diff --git a/gnulib_m4/string_h.m4 b/gnulib_m4/string_h.m4
new file mode 100644 (file)
index 0000000..97c80dc
--- /dev/null
@@ -0,0 +1,122 @@
+# Configure a GNU-like replacement for <string.h>.
+
+# Copyright (C) 2007-2018 Free Software Foundation, Inc.
+# This file is free software; the Free Software Foundation
+# gives unlimited permission to copy and/or distribute it,
+# with or without modifications, as long as this notice is preserved.
+
+# serial 22
+
+# Written by Paul Eggert.
+
+AC_DEFUN([gl_HEADER_STRING_H],
+[
+  dnl Use AC_REQUIRE here, so that the default behavior below is expanded
+  dnl once only, before all statements that occur in other macros.
+  AC_REQUIRE([gl_HEADER_STRING_H_BODY])
+])
+
+AC_DEFUN([gl_HEADER_STRING_H_BODY],
+[
+  AC_REQUIRE([AC_C_RESTRICT])
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  gl_NEXT_HEADERS([string.h])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use, and which is not
+  dnl guaranteed by C89.
+  gl_WARN_ON_USE_PREPARE([[#include <string.h>
+    ]],
+    [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul
+     strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r
+     strerror_r strsignal strverscmp])
+])
+
+AC_DEFUN([gl_STRING_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_HEADER_STRING_H_DEFAULTS],
+[
+  GNULIB_EXPLICIT_BZERO=0; AC_SUBST([GNULIB_EXPLICIT_BZERO])
+  GNULIB_FFSL=0;        AC_SUBST([GNULIB_FFSL])
+  GNULIB_FFSLL=0;       AC_SUBST([GNULIB_FFSLL])
+  GNULIB_MEMCHR=0;      AC_SUBST([GNULIB_MEMCHR])
+  GNULIB_MEMMEM=0;      AC_SUBST([GNULIB_MEMMEM])
+  GNULIB_MEMPCPY=0;     AC_SUBST([GNULIB_MEMPCPY])
+  GNULIB_MEMRCHR=0;     AC_SUBST([GNULIB_MEMRCHR])
+  GNULIB_RAWMEMCHR=0;   AC_SUBST([GNULIB_RAWMEMCHR])
+  GNULIB_STPCPY=0;      AC_SUBST([GNULIB_STPCPY])
+  GNULIB_STPNCPY=0;     AC_SUBST([GNULIB_STPNCPY])
+  GNULIB_STRCHRNUL=0;   AC_SUBST([GNULIB_STRCHRNUL])
+  GNULIB_STRDUP=0;      AC_SUBST([GNULIB_STRDUP])
+  GNULIB_STRNCAT=0;     AC_SUBST([GNULIB_STRNCAT])
+  GNULIB_STRNDUP=0;     AC_SUBST([GNULIB_STRNDUP])
+  GNULIB_STRNLEN=0;     AC_SUBST([GNULIB_STRNLEN])
+  GNULIB_STRPBRK=0;     AC_SUBST([GNULIB_STRPBRK])
+  GNULIB_STRSEP=0;      AC_SUBST([GNULIB_STRSEP])
+  GNULIB_STRSTR=0;      AC_SUBST([GNULIB_STRSTR])
+  GNULIB_STRCASESTR=0;  AC_SUBST([GNULIB_STRCASESTR])
+  GNULIB_STRTOK_R=0;    AC_SUBST([GNULIB_STRTOK_R])
+  GNULIB_MBSLEN=0;      AC_SUBST([GNULIB_MBSLEN])
+  GNULIB_MBSNLEN=0;     AC_SUBST([GNULIB_MBSNLEN])
+  GNULIB_MBSCHR=0;      AC_SUBST([GNULIB_MBSCHR])
+  GNULIB_MBSRCHR=0;     AC_SUBST([GNULIB_MBSRCHR])
+  GNULIB_MBSSTR=0;      AC_SUBST([GNULIB_MBSSTR])
+  GNULIB_MBSCASECMP=0;  AC_SUBST([GNULIB_MBSCASECMP])
+  GNULIB_MBSNCASECMP=0; AC_SUBST([GNULIB_MBSNCASECMP])
+  GNULIB_MBSPCASECMP=0; AC_SUBST([GNULIB_MBSPCASECMP])
+  GNULIB_MBSCASESTR=0;  AC_SUBST([GNULIB_MBSCASESTR])
+  GNULIB_MBSCSPN=0;     AC_SUBST([GNULIB_MBSCSPN])
+  GNULIB_MBSPBRK=0;     AC_SUBST([GNULIB_MBSPBRK])
+  GNULIB_MBSSPN=0;      AC_SUBST([GNULIB_MBSSPN])
+  GNULIB_MBSSEP=0;      AC_SUBST([GNULIB_MBSSEP])
+  GNULIB_MBSTOK_R=0;    AC_SUBST([GNULIB_MBSTOK_R])
+  GNULIB_STRERROR=0;    AC_SUBST([GNULIB_STRERROR])
+  GNULIB_STRERROR_R=0;  AC_SUBST([GNULIB_STRERROR_R])
+  GNULIB_STRSIGNAL=0;   AC_SUBST([GNULIB_STRSIGNAL])
+  GNULIB_STRVERSCMP=0;  AC_SUBST([GNULIB_STRVERSCMP])
+  HAVE_MBSLEN=0;        AC_SUBST([HAVE_MBSLEN])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_EXPLICIT_BZERO=1;        AC_SUBST([HAVE_EXPLICIT_BZERO])
+  HAVE_FFSL=1;                  AC_SUBST([HAVE_FFSL])
+  HAVE_FFSLL=1;                 AC_SUBST([HAVE_FFSLL])
+  HAVE_MEMCHR=1;                AC_SUBST([HAVE_MEMCHR])
+  HAVE_DECL_MEMMEM=1;           AC_SUBST([HAVE_DECL_MEMMEM])
+  HAVE_MEMPCPY=1;               AC_SUBST([HAVE_MEMPCPY])
+  HAVE_DECL_MEMRCHR=1;          AC_SUBST([HAVE_DECL_MEMRCHR])
+  HAVE_RAWMEMCHR=1;             AC_SUBST([HAVE_RAWMEMCHR])
+  HAVE_STPCPY=1;                AC_SUBST([HAVE_STPCPY])
+  HAVE_STPNCPY=1;               AC_SUBST([HAVE_STPNCPY])
+  HAVE_STRCHRNUL=1;             AC_SUBST([HAVE_STRCHRNUL])
+  HAVE_DECL_STRDUP=1;           AC_SUBST([HAVE_DECL_STRDUP])
+  HAVE_DECL_STRNDUP=1;          AC_SUBST([HAVE_DECL_STRNDUP])
+  HAVE_DECL_STRNLEN=1;          AC_SUBST([HAVE_DECL_STRNLEN])
+  HAVE_STRPBRK=1;               AC_SUBST([HAVE_STRPBRK])
+  HAVE_STRSEP=1;                AC_SUBST([HAVE_STRSEP])
+  HAVE_STRCASESTR=1;            AC_SUBST([HAVE_STRCASESTR])
+  HAVE_DECL_STRTOK_R=1;         AC_SUBST([HAVE_DECL_STRTOK_R])
+  HAVE_DECL_STRERROR_R=1;       AC_SUBST([HAVE_DECL_STRERROR_R])
+  HAVE_DECL_STRSIGNAL=1;        AC_SUBST([HAVE_DECL_STRSIGNAL])
+  HAVE_STRVERSCMP=1;            AC_SUBST([HAVE_STRVERSCMP])
+  REPLACE_MEMCHR=0;             AC_SUBST([REPLACE_MEMCHR])
+  REPLACE_MEMMEM=0;             AC_SUBST([REPLACE_MEMMEM])
+  REPLACE_STPNCPY=0;            AC_SUBST([REPLACE_STPNCPY])
+  REPLACE_STRCHRNUL=0;          AC_SUBST([REPLACE_STRCHRNUL])
+  REPLACE_STRDUP=0;             AC_SUBST([REPLACE_STRDUP])
+  REPLACE_STRNCAT=0;            AC_SUBST([REPLACE_STRNCAT])
+  REPLACE_STRNDUP=0;            AC_SUBST([REPLACE_STRNDUP])
+  REPLACE_STRNLEN=0;            AC_SUBST([REPLACE_STRNLEN])
+  REPLACE_STRSTR=0;             AC_SUBST([REPLACE_STRSTR])
+  REPLACE_STRCASESTR=0;         AC_SUBST([REPLACE_STRCASESTR])
+  REPLACE_STRTOK_R=0;           AC_SUBST([REPLACE_STRTOK_R])
+  REPLACE_STRERROR=0;           AC_SUBST([REPLACE_STRERROR])
+  REPLACE_STRERROR_R=0;         AC_SUBST([REPLACE_STRERROR_R])
+  REPLACE_STRSIGNAL=0;          AC_SUBST([REPLACE_STRSIGNAL])
+  UNDEFINE_STRTOK_R=0;          AC_SUBST([UNDEFINE_STRTOK_R])
+])
diff --git a/gnulib_m4/sys_types_h.m4 b/gnulib_m4/sys_types_h.m4
new file mode 100644 (file)
index 0000000..2debfb0
--- /dev/null
@@ -0,0 +1,60 @@
+# sys_types_h.m4 serial 9
+dnl Copyright (C) 2011-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN_ONCE([gl_SYS_TYPES_H],
+[
+  dnl Use sane struct stat types in OpenVMS 8.2 and later.
+  AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.])
+
+  AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS])
+  gl_NEXT_HEADERS([sys/types.h])
+
+  dnl Ensure the type pid_t gets defined.
+  AC_REQUIRE([AC_TYPE_PID_T])
+
+  dnl Ensure the type mode_t gets defined.
+  AC_REQUIRE([AC_TYPE_MODE_T])
+
+  dnl Whether to override the 'off_t' type.
+  AC_REQUIRE([gl_TYPE_OFF_T])
+
+  dnl Whether to override the 'dev_t' and 'ino_t' types.
+  m4_ifdef([gl_WINDOWS_STAT_INODES], [
+    AC_REQUIRE([gl_WINDOWS_STAT_INODES])
+  ], [
+    WINDOWS_STAT_INODES=0
+  ])
+  AC_SUBST([WINDOWS_STAT_INODES])
+])
+
+AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS],
+[
+])
+
+# This works around a buggy version in autoconf <= 2.69.
+# See <https://lists.gnu.org/r/autoconf/2016-08/msg00014.html>
+
+m4_version_prereq([2.70], [], [
+
+# This is taken from the following Autoconf patch:
+# https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=e17a30e987d7ee695fb4294a82d987ec3dc9b974
+
+m4_undefine([AC_HEADER_MAJOR])
+AC_DEFUN([AC_HEADER_MAJOR],
+[AC_CHECK_HEADERS_ONCE([sys/types.h])
+AC_CHECK_HEADER([sys/mkdev.h],
+  [AC_DEFINE([MAJOR_IN_MKDEV], [1],
+    [Define to 1 if `major', `minor', and `makedev' are declared in
+     <mkdev.h>.])])
+if test $ac_cv_header_sys_mkdev_h = no; then
+  AC_CHECK_HEADER([sys/sysmacros.h],
+    [AC_DEFINE([MAJOR_IN_SYSMACROS], [1],
+      [Define to 1 if `major', `minor', and `makedev' are declared in
+       <sysmacros.h>.])])
+fi
+])
+
+])
diff --git a/gnulib_m4/vasnprintf.m4 b/gnulib_m4/vasnprintf.m4
new file mode 100644 (file)
index 0000000..b3fda27
--- /dev/null
@@ -0,0 +1,291 @@
+# vasnprintf.m4 serial 36
+dnl Copyright (C) 2002-2004, 2006-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_VASNPRINTF],
+[
+  AC_CHECK_FUNCS_ONCE([vasnprintf])
+  if test $ac_cv_func_vasnprintf = no; then
+    gl_REPLACE_VASNPRINTF
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_VASNPRINTF],
+[
+  AC_CHECK_FUNCS_ONCE([vasnprintf])
+  AC_LIBOBJ([vasnprintf])
+  AC_LIBOBJ([printf-args])
+  AC_LIBOBJ([printf-parse])
+  AC_LIBOBJ([asnprintf])
+  if test $ac_cv_func_vasnprintf = yes; then
+    AC_DEFINE([REPLACE_VASNPRINTF], [1],
+      [Define if vasnprintf exists but is overridden by gnulib.])
+  fi
+  gl_PREREQ_PRINTF_ARGS
+  gl_PREREQ_PRINTF_PARSE
+  gl_PREREQ_VASNPRINTF
+  gl_PREREQ_ASNPRINTF
+])
+
+# Prerequisites of lib/printf-args.h, lib/printf-args.c.
+AC_DEFUN([gl_PREREQ_PRINTF_ARGS],
+[
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  AC_REQUIRE([gt_TYPE_WINT_T])
+])
+
+# Prerequisites of lib/printf-parse.h, lib/printf-parse.c.
+AC_DEFUN([gl_PREREQ_PRINTF_PARSE],
+[
+  AC_REQUIRE([gl_FEATURES_H])
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  AC_REQUIRE([AC_TYPE_SIZE_T])
+  AC_CHECK_TYPE([ptrdiff_t], ,
+    [AC_DEFINE([ptrdiff_t], [long],
+       [Define as the type of the result of subtracting two pointers, if the system doesn't define it.])
+    ])
+  AC_REQUIRE([gt_AC_TYPE_INTMAX_T])
+])
+
+# Prerequisites of lib/vasnprintf.c.
+AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF],
+[
+  AC_REQUIRE([AC_FUNC_ALLOCA])
+  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb])
+  dnl Use the _snprintf function only if it is declared (because on NetBSD it
+  dnl is defined as a weak alias of snprintf; we prefer to use the latter).
+  AC_CHECK_DECLS([_snprintf], , , [[#include <stdio.h>]])
+  dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization
+  dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE.
+  AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION])
+  dnl We can avoid a lot of code by assuming that snprintf's return value
+  dnl conforms to ISO C99. So check that.
+  AC_REQUIRE([gl_SNPRINTF_RETVAL_C99])
+  case "$gl_cv_func_snprintf_retval_c99" in
+    *yes)
+      AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1],
+        [Define if the return value of the snprintf function is the number of
+         of bytes (excluding the terminating NUL) that would have been produced
+         if the buffer had been large enough.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting 'long double'
+# arguments.
+AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE],
+[
+  AC_REQUIRE([gl_PRINTF_LONG_DOUBLE])
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         'long double' arguments.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double'
+# arguments.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE],
+[
+  AC_REQUIRE([gl_PRINTF_INFINITE])
+  case "$gl_cv_func_printf_infinite" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         infinite 'double' arguments.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double'
+# arguments.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE],
+[
+  AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE])
+  dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if
+  dnl NEED_PRINTF_LONG_DOUBLE is already set.
+  AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE])
+  case "$gl_cv_func_printf_long_double" in
+    *yes)
+      case "$gl_cv_func_printf_infinite_long_double" in
+        *yes)
+          ;;
+        *)
+          AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1],
+            [Define if the vasnprintf implementation needs special code for
+             infinite 'long double' arguments.])
+          ;;
+      esac
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A],
+[
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_A])
+  case "$gl_cv_func_printf_directive_a" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1],
+        [Define if the vasnprintf implementation needs special code for
+         the 'a' and 'A' directives.])
+      AC_CHECK_FUNCS([nl_langinfo])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F],
+[
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_F])
+  case "$gl_cv_func_printf_directive_f" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1],
+        [Define if the vasnprintf implementation needs special code for
+         the 'F' directive.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS],
+[
+  AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS])
+  case "$gl_cv_func_printf_directive_ls" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1],
+        [Define if the vasnprintf implementation needs special code for
+         the 'ls' directive.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the ' flag.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING],
+[
+  AC_REQUIRE([gl_PRINTF_FLAG_GROUPING])
+  case "$gl_cv_func_printf_flag_grouping" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1],
+        [Define if the vasnprintf implementation needs special code for the
+         ' flag.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST],
+[
+  AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST])
+  case "$gl_cv_func_printf_flag_leftadjust" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1],
+        [Define if the vasnprintf implementation needs special code for the
+         '-' flag.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO],
+[
+  AC_REQUIRE([gl_PRINTF_FLAG_ZERO])
+  case "$gl_cv_func_printf_flag_zero" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1],
+        [Define if the vasnprintf implementation needs special code for the
+         0 flag.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for supporting large precisions.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION],
+[
+  AC_REQUIRE([gl_PRINTF_PRECISION])
+  case "$gl_cv_func_printf_precision" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1],
+        [Define if the vasnprintf implementation needs special code for
+         supporting large precisions without arbitrary bounds.])
+      AC_DEFINE([NEED_PRINTF_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         'double' arguments.])
+      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         'long double' arguments.])
+      ;;
+  esac
+])
+
+# Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory
+# conditions.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM],
+[
+  AC_REQUIRE([gl_PRINTF_ENOMEM])
+  case "$gl_cv_func_printf_enomem" in
+    *yes)
+      ;;
+    *)
+      AC_DEFINE([NEED_PRINTF_ENOMEM], [1],
+        [Define if the vasnprintf implementation needs special code for
+         surviving out-of-memory conditions.])
+      AC_DEFINE([NEED_PRINTF_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         'double' arguments.])
+      AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1],
+        [Define if the vasnprintf implementation needs special code for
+         'long double' arguments.])
+      ;;
+  esac
+])
+
+# Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance.
+AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS],
+[
+  AC_REQUIRE([gl_PREREQ_VASNPRINTF])
+  gl_PREREQ_VASNPRINTF_LONG_DOUBLE
+  gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE
+  gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE
+  gl_PREREQ_VASNPRINTF_DIRECTIVE_A
+  gl_PREREQ_VASNPRINTF_DIRECTIVE_F
+  gl_PREREQ_VASNPRINTF_DIRECTIVE_LS
+  gl_PREREQ_VASNPRINTF_FLAG_GROUPING
+  gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST
+  gl_PREREQ_VASNPRINTF_FLAG_ZERO
+  gl_PREREQ_VASNPRINTF_PRECISION
+  gl_PREREQ_VASNPRINTF_ENOMEM
+])
+
+# Prerequisites of lib/asnprintf.c.
+AC_DEFUN([gl_PREREQ_ASNPRINTF],
+[
+])
diff --git a/gnulib_m4/vsnprintf.m4 b/gnulib_m4/vsnprintf.m4
new file mode 100644 (file)
index 0000000..1ebadda
--- /dev/null
@@ -0,0 +1,62 @@
+# vsnprintf.m4 serial 7
+dnl Copyright (C) 2002-2004, 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Libintl 0.17 will replace vsnprintf only if it does not support %1$s,
+dnl but defers to any gnulib vsnprintf replacements.  Therefore, gnulib
+dnl must guarantee that the decision for replacing vsnprintf is a superset
+dnl of the reasons checked by libintl.
+AC_DEFUN([gl_FUNC_VSNPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  gl_cv_func_vsnprintf_usable=no
+  AC_CHECK_FUNCS([vsnprintf])
+  if test $ac_cv_func_vsnprintf = yes; then
+    gl_SNPRINTF_SIZE1
+    case "$gl_cv_func_snprintf_size1" in
+      *yes)
+        gl_SNPRINTF_RETVAL_C99
+        case "$gl_cv_func_snprintf_retval_c99" in
+          *yes)
+            gl_PRINTF_POSITIONS
+            case "$gl_cv_func_printf_positions" in
+              *yes)
+                gl_cv_func_vsnprintf_usable=yes
+                ;;
+            esac
+            ;;
+        esac
+        ;;
+    esac
+  fi
+  if test $gl_cv_func_vsnprintf_usable = no; then
+    gl_REPLACE_VSNPRINTF
+  fi
+  AC_CHECK_DECLS_ONCE([vsnprintf])
+  if test $ac_cv_have_decl_vsnprintf = no; then
+    HAVE_DECL_VSNPRINTF=0
+  fi
+])
+
+AC_DEFUN([gl_REPLACE_VSNPRINTF],
+[
+  AC_REQUIRE([gl_STDIO_H_DEFAULTS])
+  AC_LIBOBJ([vsnprintf])
+  if test $ac_cv_func_vsnprintf = yes; then
+    REPLACE_VSNPRINTF=1
+  else
+    AC_CHECK_DECLS_ONCE([vsnprintf])
+    if test $ac_cv_have_decl_vsnprintf = yes; then
+      dnl If the function is declared but does not appear to exist, it may be
+      dnl defined as an inline function. In order to avoid a conflict, we have
+      dnl to define rpl_vsnprintf, not vsnprintf.
+      REPLACE_VSNPRINTF=1
+    fi
+  fi
+  gl_PREREQ_VSNPRINTF
+])
+
+# Prerequisites of lib/vsnprintf.c.
+AC_DEFUN([gl_PREREQ_VSNPRINTF], [:])
diff --git a/gnulib_m4/warn-on-use.m4 b/gnulib_m4/warn-on-use.m4
new file mode 100644 (file)
index 0000000..8e270cf
--- /dev/null
@@ -0,0 +1,51 @@
+# warn-on-use.m4 serial 6
+dnl Copyright (C) 2010-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES)
+# ---------------------------------------
+# If the module 'posixcheck' is in use:
+#
+# For each whitespace-separated element in the list of NAMES, define
+# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES
+# even after being undefined as a macro.
+#
+# See warn-on-use.h for some hints on how to poison function names, as
+# well as ideas on poisoning global variables and macros.  NAMES may
+# include global variables, but remember that only functions work with
+# _GL_WARN_ON_USE.  Typically, INCLUDES only needs to list a single
+# header, but if the replacement header pulls in other headers because
+# some systems declare functions in the wrong header, then INCLUDES
+# should do likewise.
+#
+# It is generally safe to assume declarations for functions declared
+# in the intersection of C89 and C11 (such as printf) without
+# needing gl_WARN_ON_USE_PREPARE.
+AC_DEFUN([gl_WARN_ON_USE_PREPARE],
+[
+  m4_ifdef([gl_POSIXCHECK],
+    [m4_foreach_w([gl_decl], [$2],
+       [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])),
+         [Define to 1 if ]m4_defn([gl_decl])[ is declared even after
+          undefining macros.])])dnl
+dnl FIXME: gl_Symbol must be used unquoted until we can assume
+dnl autoconf 2.64 or newer.
+     for gl_func in m4_flatten([$2]); do
+       AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
+       AC_CACHE_CHECK([whether $gl_func is declared without a macro],
+         gl_Symbol,
+         [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1],
+[@%:@undef $gl_func
+  (void) $gl_func;])],
+           [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])])
+       AS_VAR_IF(gl_Symbol, [yes],
+         [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
+          dnl shortcut - if the raw declaration exists, then set a cache
+          dnl variable to allow skipping any later AC_CHECK_DECL efforts
+          eval ac_cv_have_decl_$gl_func=yes])
+       AS_VAR_POPDEF([gl_Symbol])dnl
+     done
+    ])
+])
diff --git a/gnulib_m4/wchar_h.m4 b/gnulib_m4/wchar_h.m4
new file mode 100644 (file)
index 0000000..a062ca9
--- /dev/null
@@ -0,0 +1,240 @@
+dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
+
+dnl Copyright (C) 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Eric Blake.
+
+# wchar_h.m4 serial 43
+
+AC_DEFUN([gl_WCHAR_H],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
+  dnl Prepare for creating substitute <wchar.h>.
+  dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
+  dnl character support).
+  dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK.
+  gl_CHECK_NEXT_HEADERS([wchar.h])
+  if test $ac_cv_header_wchar_h = yes; then
+    HAVE_WCHAR_H=1
+  else
+    HAVE_WCHAR_H=0
+  fi
+  AC_SUBST([HAVE_WCHAR_H])
+
+  AC_REQUIRE([gl_FEATURES_H])
+
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+  AC_SUBST([HAVE_WINT_T])
+
+  AC_REQUIRE([gl_TYPE_WINT_T_PREREQ])
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+    ]],
+    [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
+     wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset
+     wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp
+     wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr
+     wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime
+    ])
+])
+
+dnl Check whether <wchar.h> is usable at all.
+AC_DEFUN([gl_WCHAR_H_INLINE_OK],
+[
+  dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
+  dnl 'gnu_inline'. See <https://sourceware.org/bugzilla/show_bug.cgi?id=4022>
+  dnl and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
+  dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
+  dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
+  AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly],
+    [gl_cv_header_wchar_h_correct_inline],
+    [gl_cv_header_wchar_h_correct_inline=yes
+     AC_LANG_CONFTEST([
+       AC_LANG_SOURCE([[#define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+extern int zero (void);
+int main () { return zero(); }
+]])])
+     dnl Do not rename the object file from conftest.$ac_objext to
+     dnl conftest1.$ac_objext, as this will cause the link to fail on
+     dnl z/OS when using the XPLINK object format (due to duplicate
+     dnl CSECT names). Instead, temporarily redefine $ac_compile so
+     dnl that the object file has the latter name from the start.
+     save_ac_compile="$ac_compile"
+     ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/`
+     if echo '#include "conftest.c"' >conftest1.c &&
+        AC_TRY_EVAL([ac_compile]); then
+       AC_LANG_CONFTEST([
+         AC_LANG_SOURCE([[#define wcstod renamed_wcstod
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+int zero (void) { return 0; }
+]])])
+       dnl See note above about renaming object files.
+       ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/`
+       if echo '#include "conftest.c"' >conftest2.c &&
+          AC_TRY_EVAL([ac_compile]); then
+         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
+           :
+         else
+           gl_cv_header_wchar_h_correct_inline=no
+         fi
+       fi
+     fi
+     ac_compile="$save_ac_compile"
+     rm -f conftest[12].c conftest[12].$ac_objext conftest$ac_exeext
+    ])
+  if test $gl_cv_header_wchar_h_correct_inline = no; then
+    AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
+This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
+C99 mode. You have four options:
+  - Add the flag -fgnu89-inline to CC and reconfigure, or
+  - Fix your include files, using parts of
+    <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
+  - Use a gcc version older than 4.3, or
+  - Don't use the flags -std=c99 or -std=gnu99.
+Configuration aborted.])
+  fi
+])
+
+AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_WCHAR_H_DEFAULTS],
+[
+  GNULIB_BTOWC=0;       AC_SUBST([GNULIB_BTOWC])
+  GNULIB_WCTOB=0;       AC_SUBST([GNULIB_WCTOB])
+  GNULIB_MBSINIT=0;     AC_SUBST([GNULIB_MBSINIT])
+  GNULIB_MBRTOWC=0;     AC_SUBST([GNULIB_MBRTOWC])
+  GNULIB_MBRLEN=0;      AC_SUBST([GNULIB_MBRLEN])
+  GNULIB_MBSRTOWCS=0;   AC_SUBST([GNULIB_MBSRTOWCS])
+  GNULIB_MBSNRTOWCS=0;  AC_SUBST([GNULIB_MBSNRTOWCS])
+  GNULIB_WCRTOMB=0;     AC_SUBST([GNULIB_WCRTOMB])
+  GNULIB_WCSRTOMBS=0;   AC_SUBST([GNULIB_WCSRTOMBS])
+  GNULIB_WCSNRTOMBS=0;  AC_SUBST([GNULIB_WCSNRTOMBS])
+  GNULIB_WCWIDTH=0;     AC_SUBST([GNULIB_WCWIDTH])
+  GNULIB_WMEMCHR=0;     AC_SUBST([GNULIB_WMEMCHR])
+  GNULIB_WMEMCMP=0;     AC_SUBST([GNULIB_WMEMCMP])
+  GNULIB_WMEMCPY=0;     AC_SUBST([GNULIB_WMEMCPY])
+  GNULIB_WMEMMOVE=0;    AC_SUBST([GNULIB_WMEMMOVE])
+  GNULIB_WMEMSET=0;     AC_SUBST([GNULIB_WMEMSET])
+  GNULIB_WCSLEN=0;      AC_SUBST([GNULIB_WCSLEN])
+  GNULIB_WCSNLEN=0;     AC_SUBST([GNULIB_WCSNLEN])
+  GNULIB_WCSCPY=0;      AC_SUBST([GNULIB_WCSCPY])
+  GNULIB_WCPCPY=0;      AC_SUBST([GNULIB_WCPCPY])
+  GNULIB_WCSNCPY=0;     AC_SUBST([GNULIB_WCSNCPY])
+  GNULIB_WCPNCPY=0;     AC_SUBST([GNULIB_WCPNCPY])
+  GNULIB_WCSCAT=0;      AC_SUBST([GNULIB_WCSCAT])
+  GNULIB_WCSNCAT=0;     AC_SUBST([GNULIB_WCSNCAT])
+  GNULIB_WCSCMP=0;      AC_SUBST([GNULIB_WCSCMP])
+  GNULIB_WCSNCMP=0;     AC_SUBST([GNULIB_WCSNCMP])
+  GNULIB_WCSCASECMP=0;  AC_SUBST([GNULIB_WCSCASECMP])
+  GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP])
+  GNULIB_WCSCOLL=0;     AC_SUBST([GNULIB_WCSCOLL])
+  GNULIB_WCSXFRM=0;     AC_SUBST([GNULIB_WCSXFRM])
+  GNULIB_WCSDUP=0;      AC_SUBST([GNULIB_WCSDUP])
+  GNULIB_WCSCHR=0;      AC_SUBST([GNULIB_WCSCHR])
+  GNULIB_WCSRCHR=0;     AC_SUBST([GNULIB_WCSRCHR])
+  GNULIB_WCSCSPN=0;     AC_SUBST([GNULIB_WCSCSPN])
+  GNULIB_WCSSPN=0;      AC_SUBST([GNULIB_WCSSPN])
+  GNULIB_WCSPBRK=0;     AC_SUBST([GNULIB_WCSPBRK])
+  GNULIB_WCSSTR=0;      AC_SUBST([GNULIB_WCSSTR])
+  GNULIB_WCSTOK=0;      AC_SUBST([GNULIB_WCSTOK])
+  GNULIB_WCSWIDTH=0;    AC_SUBST([GNULIB_WCSWIDTH])
+  GNULIB_WCSFTIME=0;    AC_SUBST([GNULIB_WCSFTIME])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_BTOWC=1;         AC_SUBST([HAVE_BTOWC])
+  HAVE_MBSINIT=1;       AC_SUBST([HAVE_MBSINIT])
+  HAVE_MBRTOWC=1;       AC_SUBST([HAVE_MBRTOWC])
+  HAVE_MBRLEN=1;        AC_SUBST([HAVE_MBRLEN])
+  HAVE_MBSRTOWCS=1;     AC_SUBST([HAVE_MBSRTOWCS])
+  HAVE_MBSNRTOWCS=1;    AC_SUBST([HAVE_MBSNRTOWCS])
+  HAVE_WCRTOMB=1;       AC_SUBST([HAVE_WCRTOMB])
+  HAVE_WCSRTOMBS=1;     AC_SUBST([HAVE_WCSRTOMBS])
+  HAVE_WCSNRTOMBS=1;    AC_SUBST([HAVE_WCSNRTOMBS])
+  HAVE_WMEMCHR=1;       AC_SUBST([HAVE_WMEMCHR])
+  HAVE_WMEMCMP=1;       AC_SUBST([HAVE_WMEMCMP])
+  HAVE_WMEMCPY=1;       AC_SUBST([HAVE_WMEMCPY])
+  HAVE_WMEMMOVE=1;      AC_SUBST([HAVE_WMEMMOVE])
+  HAVE_WMEMSET=1;       AC_SUBST([HAVE_WMEMSET])
+  HAVE_WCSLEN=1;        AC_SUBST([HAVE_WCSLEN])
+  HAVE_WCSNLEN=1;       AC_SUBST([HAVE_WCSNLEN])
+  HAVE_WCSCPY=1;        AC_SUBST([HAVE_WCSCPY])
+  HAVE_WCPCPY=1;        AC_SUBST([HAVE_WCPCPY])
+  HAVE_WCSNCPY=1;       AC_SUBST([HAVE_WCSNCPY])
+  HAVE_WCPNCPY=1;       AC_SUBST([HAVE_WCPNCPY])
+  HAVE_WCSCAT=1;        AC_SUBST([HAVE_WCSCAT])
+  HAVE_WCSNCAT=1;       AC_SUBST([HAVE_WCSNCAT])
+  HAVE_WCSCMP=1;        AC_SUBST([HAVE_WCSCMP])
+  HAVE_WCSNCMP=1;       AC_SUBST([HAVE_WCSNCMP])
+  HAVE_WCSCASECMP=1;    AC_SUBST([HAVE_WCSCASECMP])
+  HAVE_WCSNCASECMP=1;   AC_SUBST([HAVE_WCSNCASECMP])
+  HAVE_WCSCOLL=1;       AC_SUBST([HAVE_WCSCOLL])
+  HAVE_WCSXFRM=1;       AC_SUBST([HAVE_WCSXFRM])
+  HAVE_WCSDUP=1;        AC_SUBST([HAVE_WCSDUP])
+  HAVE_WCSCHR=1;        AC_SUBST([HAVE_WCSCHR])
+  HAVE_WCSRCHR=1;       AC_SUBST([HAVE_WCSRCHR])
+  HAVE_WCSCSPN=1;       AC_SUBST([HAVE_WCSCSPN])
+  HAVE_WCSSPN=1;        AC_SUBST([HAVE_WCSSPN])
+  HAVE_WCSPBRK=1;       AC_SUBST([HAVE_WCSPBRK])
+  HAVE_WCSSTR=1;        AC_SUBST([HAVE_WCSSTR])
+  HAVE_WCSTOK=1;        AC_SUBST([HAVE_WCSTOK])
+  HAVE_WCSWIDTH=1;      AC_SUBST([HAVE_WCSWIDTH])
+  HAVE_WCSFTIME=1;      AC_SUBST([HAVE_WCSFTIME])
+  HAVE_DECL_WCTOB=1;    AC_SUBST([HAVE_DECL_WCTOB])
+  HAVE_DECL_WCWIDTH=1;  AC_SUBST([HAVE_DECL_WCWIDTH])
+  REPLACE_MBSTATE_T=0;  AC_SUBST([REPLACE_MBSTATE_T])
+  REPLACE_BTOWC=0;      AC_SUBST([REPLACE_BTOWC])
+  REPLACE_WCTOB=0;      AC_SUBST([REPLACE_WCTOB])
+  REPLACE_MBSINIT=0;    AC_SUBST([REPLACE_MBSINIT])
+  REPLACE_MBRTOWC=0;    AC_SUBST([REPLACE_MBRTOWC])
+  REPLACE_MBRLEN=0;     AC_SUBST([REPLACE_MBRLEN])
+  REPLACE_MBSRTOWCS=0;  AC_SUBST([REPLACE_MBSRTOWCS])
+  REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS])
+  REPLACE_WCRTOMB=0;    AC_SUBST([REPLACE_WCRTOMB])
+  REPLACE_WCSRTOMBS=0;  AC_SUBST([REPLACE_WCSRTOMBS])
+  REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
+  REPLACE_WCWIDTH=0;    AC_SUBST([REPLACE_WCWIDTH])
+  REPLACE_WCSWIDTH=0;   AC_SUBST([REPLACE_WCSWIDTH])
+  REPLACE_WCSFTIME=0;   AC_SUBST([REPLACE_WCSFTIME])
+])
diff --git a/gnulib_m4/wchar_t.m4 b/gnulib_m4/wchar_t.m4
new file mode 100644 (file)
index 0000000..83bc3d5
--- /dev/null
@@ -0,0 +1,24 @@
+# wchar_t.m4 serial 4 (gettext-0.18.2)
+dnl Copyright (C) 2002-2003, 2008-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <stddef.h> has the 'wchar_t' type.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WCHAR_T],
+[
+  AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[#include <stddef.h>
+            wchar_t foo = (wchar_t)'\0';]],
+          [[]])],
+       [gt_cv_c_wchar_t=yes],
+       [gt_cv_c_wchar_t=no])])
+  if test $gt_cv_c_wchar_t = yes; then
+    AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
+  fi
+])
diff --git a/gnulib_m4/wctype_h.m4 b/gnulib_m4/wctype_h.m4
new file mode 100644 (file)
index 0000000..15d1ef3
--- /dev/null
@@ -0,0 +1,212 @@
+# wctype_h.m4 serial 21
+
+dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
+
+dnl Copyright (C) 2006-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl Written by Paul Eggert.
+
+AC_DEFUN([gl_WCTYPE_H],
+[
+  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+  AC_REQUIRE([AC_PROG_CC])
+  AC_REQUIRE([AC_CANONICAL_HOST])
+  AC_CHECK_FUNCS_ONCE([iswcntrl])
+  if test $ac_cv_func_iswcntrl = yes; then
+    HAVE_ISWCNTRL=1
+  else
+    HAVE_ISWCNTRL=0
+  fi
+  AC_SUBST([HAVE_ISWCNTRL])
+
+  AC_REQUIRE([gt_TYPE_WINT_T])
+  if test $gt_cv_c_wint_t = yes; then
+    HAVE_WINT_T=1
+  else
+    HAVE_WINT_T=0
+  fi
+  AC_SUBST([HAVE_WINT_T])
+
+  AC_REQUIRE([gl_TYPE_WINT_T_PREREQ])
+
+  gl_CHECK_NEXT_HEADERS([wctype.h])
+  if test $ac_cv_header_wctype_h = yes; then
+    if test $ac_cv_func_iswcntrl = yes; then
+      dnl Linux libc5 has an iswprint function that returns 0 for all arguments.
+      dnl The other functions are likely broken in the same way.
+      AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works],
+        [
+          AC_RUN_IFELSE(
+            [AC_LANG_SOURCE([[
+               /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+                  included before <wchar.h>.
+                  BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+                  must be included before <wchar.h>.  */
+               #include <stddef.h>
+               #include <stdio.h>
+               #include <time.h>
+               #include <wchar.h>
+               #include <wctype.h>
+               int main () { return iswprint ('x') == 0; }
+            ]])],
+            [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no],
+            [dnl Guess no on Linux libc5, yes otherwise.
+             AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
+                          #if __GNU_LIBRARY__ == 1
+                          Linux libc5 i18n is broken.
+                          #endif]], [])],
+              [gl_cv_func_iswcntrl_works="guessing yes"],
+              [gl_cv_func_iswcntrl_works="guessing no"])
+            ])
+        ])
+    fi
+    HAVE_WCTYPE_H=1
+  else
+    HAVE_WCTYPE_H=0
+  fi
+  AC_SUBST([HAVE_WCTYPE_H])
+
+  case "$gl_cv_func_iswcntrl_works" in
+    *yes) REPLACE_ISWCNTRL=0 ;;
+    *)    REPLACE_ISWCNTRL=1 ;;
+  esac
+  AC_SUBST([REPLACE_ISWCNTRL])
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
+    dnl Redefine all of iswcntrl, ..., iswxdigit in <wctype.h>.
+    :
+  fi
+
+  if test $REPLACE_ISWCNTRL = 1; then
+    REPLACE_TOWLOWER=1
+  else
+    AC_CHECK_FUNCS([towlower])
+    if test $ac_cv_func_towlower = yes; then
+      REPLACE_TOWLOWER=0
+    else
+      AC_CHECK_DECLS([towlower],,,
+        [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+             included before <wchar.h>.
+             BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+             must be included before <wchar.h>.  */
+          #include <stddef.h>
+          #include <stdio.h>
+          #include <time.h>
+          #include <wchar.h>
+          #if HAVE_WCTYPE_H
+          # include <wctype.h>
+          #endif
+        ]])
+      if test $ac_cv_have_decl_towlower = yes; then
+        dnl On Minix 3.1.8, the system's <wctype.h> declares towlower() and
+        dnl towupper() although it does not have the functions. Avoid a
+        dnl collision with gnulib's replacement.
+        REPLACE_TOWLOWER=1
+      else
+        REPLACE_TOWLOWER=0
+      fi
+    fi
+  fi
+  AC_SUBST([REPLACE_TOWLOWER])
+
+  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
+    dnl Redefine towlower, towupper in <wctype.h>.
+    :
+  fi
+
+  dnl We assume that the wctype() and iswctype() functions exist if and only
+  dnl if the type wctype_t is defined in <wchar.h> or in <wctype.h> if that
+  dnl exists.
+  dnl HP-UX 11.00 declares all these in <wchar.h> and lacks <wctype.h>.
+  AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #if HAVE_WCTYPE_H
+            # include <wctype.h>
+            #endif
+            wctype_t a;
+          ]],
+          [[]])],
+       [gl_cv_type_wctype_t=yes],
+       [gl_cv_type_wctype_t=no])
+    ])
+  if test $gl_cv_type_wctype_t = no; then
+    HAVE_WCTYPE_T=0
+  fi
+
+  dnl We assume that the wctrans() and towctrans() functions exist if and only
+  dnl if the type wctrans_t is defined in <wctype.h>.
+  AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
+               included before <wchar.h>.
+               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
+               must be included before <wchar.h>.  */
+            #include <stddef.h>
+            #include <stdio.h>
+            #include <time.h>
+            #include <wchar.h>
+            #include <wctype.h>
+            wctrans_t a;
+          ]],
+          [[]])],
+       [gl_cv_type_wctrans_t=yes],
+       [gl_cv_type_wctrans_t=no])
+    ])
+  if test $gl_cv_type_wctrans_t = no; then
+    HAVE_WCTRANS_T=0
+  fi
+
+  dnl Check for declarations of anything we want to poison if the
+  dnl corresponding gnulib module is not in use.
+  gl_WARN_ON_USE_PREPARE([[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+#include <wctype.h>
+    ]],
+    [wctype iswctype wctrans towctrans
+    ])
+])
+
+AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR],
+[
+  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
+  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
+  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
+  dnl Define it also as a C macro, for the benefit of the unit tests.
+  gl_MODULE_INDICATOR_FOR_TESTS([$1])
+])
+
+AC_DEFUN([gl_WCTYPE_H_DEFAULTS],
+[
+  GNULIB_ISWBLANK=0;    AC_SUBST([GNULIB_ISWBLANK])
+  GNULIB_WCTYPE=0;      AC_SUBST([GNULIB_WCTYPE])
+  GNULIB_ISWCTYPE=0;    AC_SUBST([GNULIB_ISWCTYPE])
+  GNULIB_WCTRANS=0;     AC_SUBST([GNULIB_WCTRANS])
+  GNULIB_TOWCTRANS=0;   AC_SUBST([GNULIB_TOWCTRANS])
+  dnl Assume proper GNU behavior unless another module says otherwise.
+  HAVE_ISWBLANK=1;      AC_SUBST([HAVE_ISWBLANK])
+  HAVE_WCTYPE_T=1;      AC_SUBST([HAVE_WCTYPE_T])
+  HAVE_WCTRANS_T=1;     AC_SUBST([HAVE_WCTRANS_T])
+  REPLACE_ISWBLANK=0;   AC_SUBST([REPLACE_ISWBLANK])
+])
diff --git a/gnulib_m4/wcwidth.m4 b/gnulib_m4/wcwidth.m4
new file mode 100644 (file)
index 0000000..1cd489b
--- /dev/null
@@ -0,0 +1,123 @@
+# wcwidth.m4 serial 27
+dnl Copyright (C) 2006-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_FUNC_WCWIDTH],
+[
+  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
+  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
+
+  dnl Persuade glibc <wchar.h> to declare wcwidth().
+  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
+
+  AC_REQUIRE([gt_TYPE_WCHAR_T])
+  AC_REQUIRE([gt_TYPE_WINT_T])
+
+  AC_CHECK_HEADERS_ONCE([wchar.h])
+  AC_CHECK_FUNCS_ONCE([wcwidth])
+
+  AC_CHECK_DECLS([wcwidth], [], [], [[
+/* AIX 3.2.5 declares wcwidth in <string.h>. */
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+]])
+  if test $ac_cv_have_decl_wcwidth != yes; then
+    HAVE_DECL_WCWIDTH=0
+  fi
+
+  if test $ac_cv_func_wcwidth != yes; then
+    AC_CACHE_CHECK([whether wcwidth is a macro],
+      [gl_cv_func_wcwidth_macro],
+      [AC_EGREP_CPP([wchar_header_defines_wcwidth], [
+#include <wchar.h>
+#ifdef wcwidth
+ wchar_header_defines_wcwidth
+#endif],
+         [gl_cv_func_wcwidth_macro=yes],
+         [gl_cv_func_wcwidth_macro=no])
+      ])
+  fi
+
+  if test $ac_cv_func_wcwidth = yes || test $gl_cv_func_wcwidth_macro = yes; then
+    HAVE_WCWIDTH=1
+    dnl On Mac OS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1.
+    dnl On OpenBSD 5.0, wcwidth(0x05B0) (HEBREW POINT SHEVA) returns 1.
+    dnl On OSF/1 5.1, wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1.
+    dnl On OpenBSD 5.8, wcwidth(0xFF1A) (FULLWIDTH COLON) returns 0.
+    dnl This leads to bugs in 'ls' (coreutils).
+    AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales],
+      [gl_cv_func_wcwidth_works],
+      [
+        AC_RUN_IFELSE(
+          [AC_LANG_SOURCE([[
+#include <locale.h>
+/* AIX 3.2.5 declares wcwidth in <string.h>. */
+#include <string.h>
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+#if !HAVE_DECL_WCWIDTH
+extern
+# ifdef __cplusplus
+"C"
+# endif
+int wcwidth (int);
+#endif
+int main ()
+{
+  int result = 0;
+  if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
+    {
+      if (wcwidth (0x0301) > 0)
+        result |= 1;
+      if (wcwidth (0x05B0) > 0)
+        result |= 2;
+      if (wcwidth (0x200B) > 0)
+        result |= 4;
+      if (wcwidth (0xFF1A) == 0)
+        result |= 8;
+    }
+  return result;
+}]])],
+          [gl_cv_func_wcwidth_works=yes],
+          [gl_cv_func_wcwidth_works=no],
+          [
+changequote(,)dnl
+           case "$host_os" in
+                                        # Guess yes on glibc and AIX 7 systems.
+             *-gnu* | gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";;
+             *)                         gl_cv_func_wcwidth_works="guessing no";;
+           esac
+changequote([,])dnl
+          ])
+      ])
+    case "$gl_cv_func_wcwidth_works" in
+      *yes) ;;
+      *no) REPLACE_WCWIDTH=1 ;;
+    esac
+  else
+    HAVE_WCWIDTH=0
+  fi
+  dnl We don't substitute HAVE_WCWIDTH. We assume that if the system does not
+  dnl have the wcwidth function, then it does not declare it.
+])
+
+# Prerequisites of lib/wcwidth.c.
+AC_DEFUN([gl_PREREQ_WCWIDTH], [
+  AC_REQUIRE([AC_C_INLINE])
+  :
+])
diff --git a/gnulib_m4/wint_t.m4 b/gnulib_m4/wint_t.m4
new file mode 100644 (file)
index 0000000..95f6854
--- /dev/null
@@ -0,0 +1,74 @@
+# wint_t.m4 serial 7
+dnl Copyright (C) 2003, 2007-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+dnl From Bruno Haible.
+dnl Test whether <wchar.h> has the 'wint_t' type and whether gnulib's
+dnl <wchar.h> or <wctype.h> would, if present, override 'wint_t'.
+dnl Prerequisite: AC_PROG_CC
+
+AC_DEFUN([gt_TYPE_WINT_T],
+[
+  AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
+    [AC_COMPILE_IFELSE(
+       [AC_LANG_PROGRAM(
+          [[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
+   before <wchar.h>.  */
+#include <stddef.h>
+#include <stdio.h>
+#include <time.h>
+#include <wchar.h>
+            wint_t foo = (wchar_t)'\0';]],
+          [[]])],
+       [gt_cv_c_wint_t=yes],
+       [gt_cv_c_wint_t=no])])
+  if test $gt_cv_c_wint_t = yes; then
+    AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
+
+    dnl Determine whether gnulib's <wchar.h> or <wctype.h> would, if present,
+    dnl override 'wint_t'.
+    AC_CACHE_CHECK([whether wint_t is too small],
+      [gl_cv_type_wint_t_too_small],
+      [AC_COMPILE_IFELSE(
+           [AC_LANG_PROGRAM([[
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+#endif
+#include <wchar.h>
+              int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1];
+              ]])],
+           [gl_cv_type_wint_t_too_small=no],
+           [gl_cv_type_wint_t_too_small=yes])])
+    if test $gl_cv_type_wint_t_too_small = yes; then
+      GNULIB_OVERRIDES_WINT_T=1
+    else
+      GNULIB_OVERRIDES_WINT_T=0
+    fi
+  else
+    GNULIB_OVERRIDES_WINT_T=0
+  fi
+  AC_SUBST([GNULIB_OVERRIDES_WINT_T])
+])
+
+dnl Prerequisites of the 'wint_t' override.
+AC_DEFUN([gl_TYPE_WINT_T_PREREQ],
+[
+  AC_CHECK_HEADERS_ONCE([crtdefs.h])
+  if test $ac_cv_header_crtdefs_h = yes; then
+    HAVE_CRTDEFS_H=1
+  else
+    HAVE_CRTDEFS_H=0
+  fi
+  AC_SUBST([HAVE_CRTDEFS_H])
+])
diff --git a/gnulib_m4/xsize.m4 b/gnulib_m4/xsize.m4
new file mode 100644 (file)
index 0000000..fc7c1ab
--- /dev/null
@@ -0,0 +1,12 @@
+# xsize.m4 serial 5
+dnl Copyright (C) 2003-2004, 2008-2018 Free Software Foundation, Inc.
+dnl This file is free software; the Free Software Foundation
+dnl gives unlimited permission to copy and/or distribute it,
+dnl with or without modifications, as long as this notice is preserved.
+
+AC_DEFUN([gl_XSIZE],
+[
+  dnl Prerequisites of lib/xsize.h.
+  AC_REQUIRE([gl_SIZE_MAX])
+  AC_CHECK_HEADERS([stdint.h])
+])
diff --git a/install-sh b/install-sh
deleted file mode 100755 (executable)
index 0b0fdcb..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2013-12-25.23; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-tab='  '
-nl='
-'
-IFS=" $tab$nl"
-
-# Set DOITPROG to "echo" to test this script.
-
-doit=${DOITPROG-}
-doit_exec=${doit:-exec}
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-is_target_a_directory=possibly
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-   or: $0 [OPTION]... SRCFILES... DIRECTORY
-   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
-   or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
-     --help     display this help and exit.
-     --version  display version info and exit.
-
-  -c            (ignored)
-  -C            install only if different (preserve the last data modification time)
-  -d            create directories instead of installing files.
-  -g GROUP      $chgrpprog installed files to GROUP.
-  -m MODE       $chmodprog installed files to MODE.
-  -o USER       $chownprog installed files to USER.
-  -s            $stripprog installed files.
-  -t DIRECTORY  install into DIRECTORY.
-  -T            report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
-  RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
-  case $1 in
-    -c) ;;
-
-    -C) copy_on_change=true;;
-
-    -d) dir_arg=true;;
-
-    -g) chgrpcmd="$chgrpprog $2"
-        shift;;
-
-    --help) echo "$usage"; exit $?;;
-
-    -m) mode=$2
-        case $mode in
-          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
-            echo "$0: invalid mode: $mode" >&2
-            exit 1;;
-        esac
-        shift;;
-
-    -o) chowncmd="$chownprog $2"
-        shift;;
-
-    -s) stripcmd=$stripprog;;
-
-    -t)
-        is_target_a_directory=always
-        dst_arg=$2
-        # Protect names problematic for 'test' and other utilities.
-        case $dst_arg in
-          -* | [=\(\)!]) dst_arg=./$dst_arg;;
-        esac
-        shift;;
-
-    -T) is_target_a_directory=never;;
-
-    --version) echo "$0 $scriptversion"; exit $?;;
-
-    --) shift
-        break;;
-
-    -*) echo "$0: invalid option: $1" >&2
-        exit 1;;
-
-    *)  break;;
-  esac
-  shift
-done
-
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
-  if test -n "$dst_arg"; then
-    echo "$0: target directory not allowed when installing a directory." >&2
-    exit 1
-  fi
-fi
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
-  # When -d is used, all remaining arguments are directories to create.
-  # When -t is used, the destination is already specified.
-  # Otherwise, the last argument is the destination.  Remove it from $@.
-  for arg
-  do
-    if test -n "$dst_arg"; then
-      # $@ is not empty: it contains at least $arg.
-      set fnord "$@" "$dst_arg"
-      shift # fnord
-    fi
-    shift # arg
-    dst_arg=$arg
-    # Protect names problematic for 'test' and other utilities.
-    case $dst_arg in
-      -* | [=\(\)!]) dst_arg=./$dst_arg;;
-    esac
-  done
-fi
-
-if test $# -eq 0; then
-  if test -z "$dir_arg"; then
-    echo "$0: no input file specified." >&2
-    exit 1
-  fi
-  # It's OK to call 'install-sh -d' without argument.
-  # This can happen when creating conditional directories.
-  exit 0
-fi
-
-if test -z "$dir_arg"; then
-  if test $# -gt 1 || test "$is_target_a_directory" = always; then
-    if test ! -d "$dst_arg"; then
-      echo "$0: $dst_arg: Is not a directory." >&2
-      exit 1
-    fi
-  fi
-fi
-
-if test -z "$dir_arg"; then
-  do_exit='(exit $ret); exit $ret'
-  trap "ret=129; $do_exit" 1
-  trap "ret=130; $do_exit" 2
-  trap "ret=141; $do_exit" 13
-  trap "ret=143; $do_exit" 15
-
-  # Set umask so as not to create temps with too-generous modes.
-  # However, 'strip' requires both read and write access to temps.
-  case $mode in
-    # Optimize common cases.
-    *644) cp_umask=133;;
-    *755) cp_umask=22;;
-
-    *[0-7])
-      if test -z "$stripcmd"; then
-        u_plus_rw=
-      else
-        u_plus_rw='% 200'
-      fi
-      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
-    *)
-      if test -z "$stripcmd"; then
-        u_plus_rw=
-      else
-        u_plus_rw=,u+rw
-      fi
-      cp_umask=$mode$u_plus_rw;;
-  esac
-fi
-
-for src
-do
-  # Protect names problematic for 'test' and other utilities.
-  case $src in
-    -* | [=\(\)!]) src=./$src;;
-  esac
-
-  if test -n "$dir_arg"; then
-    dst=$src
-    dstdir=$dst
-    test -d "$dstdir"
-    dstdir_status=$?
-  else
-
-    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
-    # might cause directories to be created, which would be especially bad
-    # if $src (and thus $dsttmp) contains '*'.
-    if test ! -f "$src" && test ! -d "$src"; then
-      echo "$0: $src does not exist." >&2
-      exit 1
-    fi
-
-    if test -z "$dst_arg"; then
-      echo "$0: no destination specified." >&2
-      exit 1
-    fi
-    dst=$dst_arg
-
-    # If destination is a directory, append the input filename; won't work
-    # if double slashes aren't ignored.
-    if test -d "$dst"; then
-      if test "$is_target_a_directory" = never; then
-        echo "$0: $dst_arg: Is a directory" >&2
-        exit 1
-      fi
-      dstdir=$dst
-      dst=$dstdir/`basename "$src"`
-      dstdir_status=0
-    else
-      dstdir=`dirname "$dst"`
-      test -d "$dstdir"
-      dstdir_status=$?
-    fi
-  fi
-
-  obsolete_mkdir_used=false
-
-  if test $dstdir_status != 0; then
-    case $posix_mkdir in
-      '')
-        # Create intermediate dirs using mode 755 as modified by the umask.
-        # This is like FreeBSD 'install' as of 1997-10-28.
-        umask=`umask`
-        case $stripcmd.$umask in
-          # Optimize common cases.
-          *[2367][2367]) mkdir_umask=$umask;;
-          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-          *[0-7])
-            mkdir_umask=`expr $umask + 22 \
-              - $umask % 100 % 40 + $umask % 20 \
-              - $umask % 10 % 4 + $umask % 2
-            `;;
-          *) mkdir_umask=$umask,go-w;;
-        esac
-
-        # With -d, create the new directory with the user-specified mode.
-        # Otherwise, rely on $mkdir_umask.
-        if test -n "$dir_arg"; then
-          mkdir_mode=-m$mode
-        else
-          mkdir_mode=
-        fi
-
-        posix_mkdir=false
-        case $umask in
-          *[123567][0-7][0-7])
-            # POSIX mkdir -p sets u+wx bits regardless of umask, which
-            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-            ;;
-          *)
-            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-            if (umask $mkdir_umask &&
-                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-            then
-              if test -z "$dir_arg" || {
-                   # Check for POSIX incompatibilities with -m.
-                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                   # other-writable bit of parent directory when it shouldn't.
-                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
-                   case $ls_ld_tmpdir in
-                     d????-?r-*) different_mode=700;;
-                     d????-?--*) different_mode=755;;
-                     *) false;;
-                   esac &&
-                   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-                   }
-                 }
-              then posix_mkdir=:
-              fi
-              rmdir "$tmpdir/d" "$tmpdir"
-            else
-              # Remove any dirs left behind by ancient mkdir implementations.
-              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-            fi
-            trap '' 0;;
-        esac;;
-    esac
-
-    if
-      $posix_mkdir && (
-        umask $mkdir_umask &&
-        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
-      )
-    then :
-    else
-
-      # The umask is ridiculous, or mkdir does not conform to POSIX,
-      # or it failed possibly due to a race condition.  Create the
-      # directory the slow way, step by step, checking for races as we go.
-
-      case $dstdir in
-        /*) prefix='/';;
-        [-=\(\)!]*) prefix='./';;
-        *)  prefix='';;
-      esac
-
-      oIFS=$IFS
-      IFS=/
-      set -f
-      set fnord $dstdir
-      shift
-      set +f
-      IFS=$oIFS
-
-      prefixes=
-
-      for d
-      do
-        test X"$d" = X && continue
-
-        prefix=$prefix$d
-        if test -d "$prefix"; then
-          prefixes=
-        else
-          if $posix_mkdir; then
-            (umask=$mkdir_umask &&
-             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-            # Don't fail if two instances are running concurrently.
-            test -d "$prefix" || exit 1
-          else
-            case $prefix in
-              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-              *) qprefix=$prefix;;
-            esac
-            prefixes="$prefixes '$qprefix'"
-          fi
-        fi
-        prefix=$prefix/
-      done
-
-      if test -n "$prefixes"; then
-        # Don't fail if two instances are running concurrently.
-        (umask $mkdir_umask &&
-         eval "\$doit_exec \$mkdirprog $prefixes") ||
-          test -d "$dstdir" || exit 1
-        obsolete_mkdir_used=true
-      fi
-    fi
-  fi
-
-  if test -n "$dir_arg"; then
-    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
-    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
-      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
-  else
-
-    # Make a couple of temp file names in the proper directory.
-    dsttmp=$dstdir/_inst.$$_
-    rmtmp=$dstdir/_rm.$$_
-
-    # Trap to clean up those temp files at exit.
-    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
-    # Copy the file name to the temp name.
-    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
-    # and set any options; do chmod last to preserve setuid bits.
-    #
-    # If any of these fail, we abort the whole thing.  If we want to
-    # ignore errors from any of these, just make sure not to ignore
-    # errors from the above "$doit $cpprog $src $dsttmp" command.
-    #
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
-    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
-    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
-    # If -C, don't bother to copy if it wouldn't change the file.
-    if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
-       set -f &&
-       set X $old && old=:$2:$4:$5:$6 &&
-       set X $new && new=:$2:$4:$5:$6 &&
-       set +f &&
-       test "$old" = "$new" &&
-       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
-    then
-      rm -f "$dsttmp"
-    else
-      # Rename the file to the real destination.
-      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
-      # The rename failed, perhaps because mv can't rename something else
-      # to itself, or perhaps because mv is so ancient that it does not
-      # support -f.
-      {
-        # Now remove or move aside any old file at destination location.
-        # We try this two ways since rm can't unlink itself on some
-        # systems and the destination file might be busy for other
-        # reasons.  In this case, the final cleanup might fail but the new
-        # file should still install successfully.
-        {
-          test ! -f "$dst" ||
-          $doit $rmcmd -f "$dst" 2>/dev/null ||
-          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-          } ||
-          { echo "$0: cannot unlink or rename $dst" >&2
-            (exit 1); exit 1
-          }
-        } &&
-
-        # Now rename the file to the real destination.
-        $doit $mvcmd "$dsttmp" "$dst"
-      }
-    fi || exit 1
-
-    trap '' 0
-  fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/lib/alloca.in.h b/lib/alloca.in.h
new file mode 100644 (file)
index 0000000..5ad8af8
--- /dev/null
@@ -0,0 +1,65 @@
+/* Memory allocation on the stack.
+
+   Copyright (C) 1995, 1999, 2001-2004, 2006-2018 Free Software Foundation,
+   Inc.
+
+   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 3, 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, see
+   <https://www.gnu.org/licenses/>.
+  */
+
+/* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H
+   means there is a real alloca function.  */
+#ifndef _GL_ALLOCA_H
+#define _GL_ALLOCA_H
+
+/* alloca (N) returns a pointer to N bytes of memory
+   allocated on the stack, which will last until the function returns.
+   Use of alloca should be avoided:
+     - inside arguments of function calls - undefined behaviour,
+     - in inline functions - the allocation may actually last until the
+       calling function returns,
+     - for huge N (say, N >= 65536) - you never know how large (or small)
+       the stack is, and when the stack cannot fulfill the memory allocation
+       request, the program just crashes.
+ */
+
+#ifndef alloca
+# ifdef __GNUC__
+#  define alloca __builtin_alloca
+# elif defined _AIX
+#  define alloca __alloca
+# elif defined _MSC_VER
+#  include <malloc.h>
+#  define alloca _alloca
+# elif defined __DECC && defined __VMS
+#  define alloca __ALLOCA
+# elif defined __TANDEM && defined _TNS_E_TARGET
+#  ifdef  __cplusplus
+extern "C"
+#  endif
+void *_alloca (unsigned short);
+#  pragma intrinsic (_alloca)
+#  define alloca _alloca
+# elif defined __MVS__
+#  include <stdlib.h>
+# else
+#  include <stddef.h>
+#  ifdef  __cplusplus
+extern "C"
+#  endif
+void *alloca (size_t);
+# endif
+#endif
+
+#endif /* _GL_ALLOCA_H */
diff --git a/lib/arg-nonnull.h b/lib/arg-nonnull.h
new file mode 100644 (file)
index 0000000..5f03408
--- /dev/null
@@ -0,0 +1,26 @@
+/* A C macro for declaring that specific arguments must not be NULL.
+   Copyright (C) 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
+   that the values passed as arguments n, ..., m must be non-NULL pointers.
+   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
+#ifndef _GL_ARG_NONNULL
+# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
+#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
+# else
+#  define _GL_ARG_NONNULL(params)
+# endif
+#endif
diff --git a/lib/asnprintf.c b/lib/asnprintf.c
new file mode 100644 (file)
index 0000000..2298455
--- /dev/null
@@ -0,0 +1,34 @@
+/* Formatted output to strings.
+   Copyright (C) 1999, 2002, 2006, 2009-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "vasnprintf.h"
+
+#include <stdarg.h>
+
+char *
+asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+{
+  va_list args;
+  char *result;
+
+  va_start (args, format);
+  result = vasnprintf (resultbuf, lengthp, format, args);
+  va_end (args);
+  return result;
+}
diff --git a/lib/c++defs.h b/lib/c++defs.h
new file mode 100644 (file)
index 0000000..72ff1ff
--- /dev/null
@@ -0,0 +1,316 @@
+/* C++ compatible function declaration macros.
+   Copyright (C) 2010-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _GL_CXXDEFS_H
+#define _GL_CXXDEFS_H
+
+/* Begin/end the GNULIB_NAMESPACE namespace.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE {
+# define _GL_END_NAMESPACE }
+#else
+# define _GL_BEGIN_NAMESPACE
+# define _GL_END_NAMESPACE
+#endif
+
+/* The three most frequent use cases of these macros are:
+
+   * For providing a substitute for a function that is missing on some
+     platforms, but is declared and works fine on the platforms on which
+     it exists:
+
+       #if @GNULIB_FOO@
+       # if !@HAVE_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       # endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on all platforms,
+     but is broken/insufficient and needs to be replaced on some platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+
+   * For providing a replacement for a function that exists on some platforms
+     but is broken/insufficient and needs to be replaced on some of them and
+     is additionally either missing or undeclared on some other platforms:
+
+       #if @GNULIB_FOO@
+       # if @REPLACE_FOO@
+       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+       #   undef foo
+       #   define foo rpl_foo
+       #  endif
+       _GL_FUNCDECL_RPL (foo, ...);
+       _GL_CXXALIAS_RPL (foo, ...);
+       # else
+       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
+       _GL_FUNCDECL_SYS (foo, ...);
+       #  endif
+       _GL_CXXALIAS_SYS (foo, ...);
+       # endif
+       _GL_CXXALIASWARN (foo);
+       #elif defined GNULIB_POSIXCHECK
+       ...
+       #endif
+*/
+
+/* _GL_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#if defined __cplusplus
+# define _GL_EXTERN_C extern "C"
+#else
+# define _GL_EXTERN_C extern
+#endif
+
+/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
+   declares a replacement function, named rpl_func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
+  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
+#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
+
+/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
+   declares the system function, named func, with the given prototype,
+   consisting of return type, parameters, and attributes.
+   Example:
+     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
+                                  _GL_ARG_NONNULL ((1)));
+ */
+#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
+  _GL_EXTERN_C rettype func parameters_and_attributes
+
+/* _GL_CXXALIAS_RPL (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
+   Example:
+     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
+
+   Wrapping rpl_func in an object with an inline conversion operator
+   avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is
+   actually used in the program.  */
+#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
+  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      static const struct _gl_ ## func ## _wrapper            \
+      {                                                       \
+        typedef rettype (*type) parameters;                   \
+                                                              \
+        inline operator type () const                         \
+        {                                                     \
+          return ::rpl_func;                                  \
+        }                                                     \
+      } func = {};                                            \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
+   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
+   except that the C function rpl_func may have a slightly different
+   declaration.  A cast is used to silence the "invalid conversion" error
+   that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                                     \
+    {                                                              \
+      static const struct _gl_ ## func ## _wrapper                 \
+      {                                                            \
+        typedef rettype (*type) parameters;                        \
+                                                                   \
+        inline operator type () const                              \
+        {                                                          \
+          return reinterpret_cast<type>(::rpl_func);               \
+        }                                                          \
+      } func = {};                                                 \
+    }                                                              \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS (func, rettype, parameters);
+   declares a C++ alias called GNULIB_NAMESPACE::func
+   that redirects to the system provided function func, if GNULIB_NAMESPACE
+   is defined.
+   Example:
+     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
+
+   Wrapping func in an object with an inline conversion operator
+   avoids a reference to func unless GNULIB_NAMESPACE::func is
+   actually used in the program.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS(func,rettype,parameters)            \
+    namespace GNULIB_NAMESPACE                                \
+    {                                                         \
+      static const struct _gl_ ## func ## _wrapper            \
+      {                                                       \
+        typedef rettype (*type) parameters;                   \
+                                                              \
+        inline operator type () const                         \
+        {                                                     \
+          return ::func;                                      \
+        }                                                     \
+      } func = {};                                            \
+    }                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function func may have a slightly different declaration.
+   A cast is used to silence the "invalid conversion" error that would
+   otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    namespace GNULIB_NAMESPACE                          \
+    {                                                   \
+      static const struct _gl_ ## func ## _wrapper      \
+      {                                                 \
+        typedef rettype (*type) parameters;             \
+                                                        \
+        inline operator type () const                   \
+        {                                               \
+          return reinterpret_cast<type>(::func);        \
+        }                                               \
+      } func = {};                                      \
+    }                                                   \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
+   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
+   except that the C function is picked among a set of overloaded functions,
+   namely the one with rettype2 and parameters2.  Two consecutive casts
+   are used to silence the "cannot find a match" and "invalid conversion"
+   errors that would otherwise occur.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+  /* The outer cast must be a reinterpret_cast.
+     The inner cast: When the function is defined as a set of overloaded
+     functions, it works as a static_cast<>, choosing the designated variant.
+     When the function is defined as a single variant, it works as a
+     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    namespace GNULIB_NAMESPACE                                                \
+    {                                                                         \
+      static const struct _gl_ ## func ## _wrapper                            \
+      {                                                                       \
+        typedef rettype (*type) parameters;                                   \
+                                                                              \
+        inline operator type () const                                         \
+        {                                                                     \
+          return reinterpret_cast<type>((rettype2 (*) parameters2)(::func));  \
+        }                                                                     \
+      } func = {};                                                            \
+    }                                                                         \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#else
+# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN (func);
+   causes a warning to be emitted when ::func is used but not when
+   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
+   variants.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN(func) \
+   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN_1(func,namespace) \
+   _GL_CXXALIASWARN_2 (func, namespace)
+/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+    _GL_WARN_ON_USE (func, \
+                     "The symbol ::" #func " refers to the system function. " \
+                     "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN_2(func,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN(func) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
+   causes a warning to be emitted when the given overloaded variant of ::func
+   is used but not when GNULIB_NAMESPACE::func is used.  */
+#if defined __cplusplus && defined GNULIB_NAMESPACE
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
+                        GNULIB_NAMESPACE)
+# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
+   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
+/* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
+   we enable the warning only when not optimizing.  */
+# if !__OPTIMIZE__
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
+                         "The symbol ::" #func " refers to the system function. " \
+                         "Use " #namespace "::" #func " instead.")
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     extern __typeof__ (func) func
+# else
+#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
+     _GL_EXTERN_C int _gl_cxxalias_dummy
+# endif
+#else
+# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
+    _GL_EXTERN_C int _gl_cxxalias_dummy
+#endif
+
+#endif /* _GL_CXXDEFS_H */
diff --git a/lib/errno.in.h b/lib/errno.in.h
new file mode 100644 (file)
index 0000000..b95c4e9
--- /dev/null
@@ -0,0 +1,279 @@
+/* A POSIX-like <errno.h>.
+
+   Copyright (C) 2008-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_ERRNO_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_ERRNO_H@
+
+#ifndef _@GUARD_PREFIX@_ERRNO_H
+#define _@GUARD_PREFIX@_ERRNO_H
+
+
+/* On native Windows platforms, many macros are not defined.  */
+# if defined _WIN32 && ! defined __CYGWIN__
+
+/* These are the same values as defined by MSVC 10, for interoperability.  */
+
+#  ifndef ENOMSG
+#   define ENOMSG    122
+#   define GNULIB_defined_ENOMSG 1
+#  endif
+
+#  ifndef EIDRM
+#   define EIDRM     111
+#   define GNULIB_defined_EIDRM 1
+#  endif
+
+#  ifndef ENOLINK
+#   define ENOLINK   121
+#   define GNULIB_defined_ENOLINK 1
+#  endif
+
+#  ifndef EPROTO
+#   define EPROTO    134
+#   define GNULIB_defined_EPROTO 1
+#  endif
+
+#  ifndef EBADMSG
+#   define EBADMSG   104
+#   define GNULIB_defined_EBADMSG 1
+#  endif
+
+#  ifndef EOVERFLOW
+#   define EOVERFLOW 132
+#   define GNULIB_defined_EOVERFLOW 1
+#  endif
+
+#  ifndef ENOTSUP
+#   define ENOTSUP   129
+#   define GNULIB_defined_ENOTSUP 1
+#  endif
+
+#  ifndef ENETRESET
+#   define ENETRESET 117
+#   define GNULIB_defined_ENETRESET 1
+#  endif
+
+#  ifndef ECONNABORTED
+#   define ECONNABORTED 106
+#   define GNULIB_defined_ECONNABORTED 1
+#  endif
+
+#  ifndef ECANCELED
+#   define ECANCELED 105
+#   define GNULIB_defined_ECANCELED 1
+#  endif
+
+#  ifndef EOWNERDEAD
+#   define EOWNERDEAD 133
+#   define GNULIB_defined_EOWNERDEAD 1
+#  endif
+
+#  ifndef ENOTRECOVERABLE
+#   define ENOTRECOVERABLE 127
+#   define GNULIB_defined_ENOTRECOVERABLE 1
+#  endif
+
+#  ifndef EINPROGRESS
+#   define EINPROGRESS     112
+#   define EALREADY        103
+#   define ENOTSOCK        128
+#   define EDESTADDRREQ    109
+#   define EMSGSIZE        115
+#   define EPROTOTYPE      136
+#   define ENOPROTOOPT     123
+#   define EPROTONOSUPPORT 135
+#   define EOPNOTSUPP      130
+#   define EAFNOSUPPORT    102
+#   define EADDRINUSE      100
+#   define EADDRNOTAVAIL   101
+#   define ENETDOWN        116
+#   define ENETUNREACH     118
+#   define ECONNRESET      108
+#   define ENOBUFS         119
+#   define EISCONN         113
+#   define ENOTCONN        126
+#   define ETIMEDOUT       138
+#   define ECONNREFUSED    107
+#   define ELOOP           114
+#   define EHOSTUNREACH    110
+#   define EWOULDBLOCK     140
+#   define GNULIB_defined_ESOCK 1
+#  endif
+
+#  ifndef ETXTBSY
+#   define ETXTBSY         139
+#   define ENODATA         120  /* not required by POSIX */
+#   define ENOSR           124  /* not required by POSIX */
+#   define ENOSTR          125  /* not required by POSIX */
+#   define ETIME           137  /* not required by POSIX */
+#   define EOTHER          131  /* not required by POSIX */
+#   define GNULIB_defined_ESTREAMS 1
+#  endif
+
+/* These are intentionally the same values as the WSA* error numbers, defined
+   in <winsock2.h>.  */
+#  define ESOCKTNOSUPPORT 10044  /* not required by POSIX */
+#  define EPFNOSUPPORT    10046  /* not required by POSIX */
+#  define ESHUTDOWN       10058  /* not required by POSIX */
+#  define ETOOMANYREFS    10059  /* not required by POSIX */
+#  define EHOSTDOWN       10064  /* not required by POSIX */
+#  define EPROCLIM        10067  /* not required by POSIX */
+#  define EUSERS          10068  /* not required by POSIX */
+#  define EDQUOT          10069
+#  define ESTALE          10070
+#  define EREMOTE         10071  /* not required by POSIX */
+#  define GNULIB_defined_EWINSOCK 1
+
+# endif
+
+
+/* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros
+   EMULTIHOP, ENOLINK, EOVERFLOW are not defined.  */
+# if @EMULTIHOP_HIDDEN@
+#  define EMULTIHOP @EMULTIHOP_VALUE@
+#  define GNULIB_defined_EMULTIHOP 1
+# endif
+# if @ENOLINK_HIDDEN@
+#  define ENOLINK   @ENOLINK_VALUE@
+#  define GNULIB_defined_ENOLINK 1
+# endif
+# if @EOVERFLOW_HIDDEN@
+#  define EOVERFLOW @EOVERFLOW_VALUE@
+#  define GNULIB_defined_EOVERFLOW 1
+# endif
+
+
+/* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK,
+   EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined.
+   Likewise, on NonStop Kernel, EDQUOT is not defined.
+   Define them here.  Values >= 2000 seem safe to use: Solaris ESTALE = 151,
+   HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133.
+
+   Note: When one of these systems defines some of these macros some day,
+   binaries will have to be recompiled so that they recognizes the new
+   errno values from the system.  */
+
+# ifndef ENOMSG
+#  define ENOMSG    2000
+#  define GNULIB_defined_ENOMSG 1
+# endif
+
+# ifndef EIDRM
+#  define EIDRM     2001
+#  define GNULIB_defined_EIDRM 1
+# endif
+
+# ifndef ENOLINK
+#  define ENOLINK   2002
+#  define GNULIB_defined_ENOLINK 1
+# endif
+
+# ifndef EPROTO
+#  define EPROTO    2003
+#  define GNULIB_defined_EPROTO 1
+# endif
+
+# ifndef EMULTIHOP
+#  define EMULTIHOP 2004
+#  define GNULIB_defined_EMULTIHOP 1
+# endif
+
+# ifndef EBADMSG
+#  define EBADMSG   2005
+#  define GNULIB_defined_EBADMSG 1
+# endif
+
+# ifndef EOVERFLOW
+#  define EOVERFLOW 2006
+#  define GNULIB_defined_EOVERFLOW 1
+# endif
+
+# ifndef ENOTSUP
+#  define ENOTSUP   2007
+#  define GNULIB_defined_ENOTSUP 1
+# endif
+
+# ifndef ENETRESET
+#  define ENETRESET 2011
+#  define GNULIB_defined_ENETRESET 1
+# endif
+
+# ifndef ECONNABORTED
+#  define ECONNABORTED 2012
+#  define GNULIB_defined_ECONNABORTED 1
+# endif
+
+# ifndef ESTALE
+#  define ESTALE    2009
+#  define GNULIB_defined_ESTALE 1
+# endif
+
+# ifndef EDQUOT
+#  define EDQUOT 2010
+#  define GNULIB_defined_EDQUOT 1
+# endif
+
+# ifndef ECANCELED
+#  define ECANCELED 2008
+#  define GNULIB_defined_ECANCELED 1
+# endif
+
+/* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not
+   defined.  */
+
+# ifndef EOWNERDEAD
+#  if defined __sun
+    /* Use the same values as defined for Solaris >= 8, for
+       interoperability.  */
+#   define EOWNERDEAD      58
+#   define ENOTRECOVERABLE 59
+#  elif defined _WIN32 && ! defined __CYGWIN__
+    /* We have a conflict here: pthreads-win32 defines these values
+       differently than MSVC 10.  It's hairy to decide which one to use.  */
+#   if defined __MINGW32__ && !defined USE_WINDOWS_THREADS
+     /* Use the same values as defined by pthreads-win32, for
+        interoperability.  */
+#    define EOWNERDEAD      43
+#    define ENOTRECOVERABLE 44
+#   else
+     /* Use the same values as defined by MSVC 10, for
+        interoperability.  */
+#    define EOWNERDEAD      133
+#    define ENOTRECOVERABLE 127
+#   endif
+#  else
+#   define EOWNERDEAD      2013
+#   define ENOTRECOVERABLE 2014
+#  endif
+#  define GNULIB_defined_EOWNERDEAD 1
+#  define GNULIB_defined_ENOTRECOVERABLE 1
+# endif
+
+# ifndef EILSEQ
+#  define EILSEQ 2015
+#  define GNULIB_defined_EILSEQ 1
+# endif
+
+#endif /* _@GUARD_PREFIX@_ERRNO_H */
+#endif /* _@GUARD_PREFIX@_ERRNO_H */
diff --git a/lib/float+.h b/lib/float+.h
new file mode 100644 (file)
index 0000000..2cb858f
--- /dev/null
@@ -0,0 +1,147 @@
+/* Supplemental information about the floating-point formats.
+   Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2007.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _FLOATPLUS_H
+#define _FLOATPLUS_H
+
+#include <float.h>
+#include <limits.h>
+
+/* Number of bits in the mantissa of a floating-point number, including the
+   "hidden bit".  */
+#if FLT_RADIX == 2
+# define FLT_MANT_BIT FLT_MANT_DIG
+# define DBL_MANT_BIT DBL_MANT_DIG
+# define LDBL_MANT_BIT LDBL_MANT_DIG
+#elif FLT_RADIX == 4
+# define FLT_MANT_BIT (FLT_MANT_DIG * 2)
+# define DBL_MANT_BIT (DBL_MANT_DIG * 2)
+# define LDBL_MANT_BIT (LDBL_MANT_DIG * 2)
+#elif FLT_RADIX == 16
+# define FLT_MANT_BIT (FLT_MANT_DIG * 4)
+# define DBL_MANT_BIT (DBL_MANT_DIG * 4)
+# define LDBL_MANT_BIT (LDBL_MANT_DIG * 4)
+#endif
+
+/* Bit mask that can be used to mask the exponent, as an unsigned number.  */
+#define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7)
+#define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7)
+#define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7)
+
+/* Number of bits used for the exponent of a floating-point number, including
+   the exponent's sign.  */
+#define FLT_EXP_BIT \
+  (FLT_EXP_MASK < 0x100 ? 8 : \
+   FLT_EXP_MASK < 0x200 ? 9 : \
+   FLT_EXP_MASK < 0x400 ? 10 : \
+   FLT_EXP_MASK < 0x800 ? 11 : \
+   FLT_EXP_MASK < 0x1000 ? 12 : \
+   FLT_EXP_MASK < 0x2000 ? 13 : \
+   FLT_EXP_MASK < 0x4000 ? 14 : \
+   FLT_EXP_MASK < 0x8000 ? 15 : \
+   FLT_EXP_MASK < 0x10000 ? 16 : \
+   FLT_EXP_MASK < 0x20000 ? 17 : \
+   FLT_EXP_MASK < 0x40000 ? 18 : \
+   FLT_EXP_MASK < 0x80000 ? 19 : \
+   FLT_EXP_MASK < 0x100000 ? 20 : \
+   FLT_EXP_MASK < 0x200000 ? 21 : \
+   FLT_EXP_MASK < 0x400000 ? 22 : \
+   FLT_EXP_MASK < 0x800000 ? 23 : \
+   FLT_EXP_MASK < 0x1000000 ? 24 : \
+   FLT_EXP_MASK < 0x2000000 ? 25 : \
+   FLT_EXP_MASK < 0x4000000 ? 26 : \
+   FLT_EXP_MASK < 0x8000000 ? 27 : \
+   FLT_EXP_MASK < 0x10000000 ? 28 : \
+   FLT_EXP_MASK < 0x20000000 ? 29 : \
+   FLT_EXP_MASK < 0x40000000 ? 30 : \
+   FLT_EXP_MASK <= 0x7fffffff ? 31 : \
+   32)
+#define DBL_EXP_BIT \
+  (DBL_EXP_MASK < 0x100 ? 8 : \
+   DBL_EXP_MASK < 0x200 ? 9 : \
+   DBL_EXP_MASK < 0x400 ? 10 : \
+   DBL_EXP_MASK < 0x800 ? 11 : \
+   DBL_EXP_MASK < 0x1000 ? 12 : \
+   DBL_EXP_MASK < 0x2000 ? 13 : \
+   DBL_EXP_MASK < 0x4000 ? 14 : \
+   DBL_EXP_MASK < 0x8000 ? 15 : \
+   DBL_EXP_MASK < 0x10000 ? 16 : \
+   DBL_EXP_MASK < 0x20000 ? 17 : \
+   DBL_EXP_MASK < 0x40000 ? 18 : \
+   DBL_EXP_MASK < 0x80000 ? 19 : \
+   DBL_EXP_MASK < 0x100000 ? 20 : \
+   DBL_EXP_MASK < 0x200000 ? 21 : \
+   DBL_EXP_MASK < 0x400000 ? 22 : \
+   DBL_EXP_MASK < 0x800000 ? 23 : \
+   DBL_EXP_MASK < 0x1000000 ? 24 : \
+   DBL_EXP_MASK < 0x2000000 ? 25 : \
+   DBL_EXP_MASK < 0x4000000 ? 26 : \
+   DBL_EXP_MASK < 0x8000000 ? 27 : \
+   DBL_EXP_MASK < 0x10000000 ? 28 : \
+   DBL_EXP_MASK < 0x20000000 ? 29 : \
+   DBL_EXP_MASK < 0x40000000 ? 30 : \
+   DBL_EXP_MASK <= 0x7fffffff ? 31 : \
+   32)
+#define LDBL_EXP_BIT \
+  (LDBL_EXP_MASK < 0x100 ? 8 : \
+   LDBL_EXP_MASK < 0x200 ? 9 : \
+   LDBL_EXP_MASK < 0x400 ? 10 : \
+   LDBL_EXP_MASK < 0x800 ? 11 : \
+   LDBL_EXP_MASK < 0x1000 ? 12 : \
+   LDBL_EXP_MASK < 0x2000 ? 13 : \
+   LDBL_EXP_MASK < 0x4000 ? 14 : \
+   LDBL_EXP_MASK < 0x8000 ? 15 : \
+   LDBL_EXP_MASK < 0x10000 ? 16 : \
+   LDBL_EXP_MASK < 0x20000 ? 17 : \
+   LDBL_EXP_MASK < 0x40000 ? 18 : \
+   LDBL_EXP_MASK < 0x80000 ? 19 : \
+   LDBL_EXP_MASK < 0x100000 ? 20 : \
+   LDBL_EXP_MASK < 0x200000 ? 21 : \
+   LDBL_EXP_MASK < 0x400000 ? 22 : \
+   LDBL_EXP_MASK < 0x800000 ? 23 : \
+   LDBL_EXP_MASK < 0x1000000 ? 24 : \
+   LDBL_EXP_MASK < 0x2000000 ? 25 : \
+   LDBL_EXP_MASK < 0x4000000 ? 26 : \
+   LDBL_EXP_MASK < 0x8000000 ? 27 : \
+   LDBL_EXP_MASK < 0x10000000 ? 28 : \
+   LDBL_EXP_MASK < 0x20000000 ? 29 : \
+   LDBL_EXP_MASK < 0x40000000 ? 30 : \
+   LDBL_EXP_MASK <= 0x7fffffff ? 31 : \
+   32)
+
+/* Number of bits used for a floating-point number: the mantissa (not
+   counting the "hidden bit", since it may or may not be explicit), the
+   exponent, and the sign.  */
+#define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1)
+#define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1)
+#define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1)
+
+/* Number of bytes used for a floating-point number.
+   This can be smaller than the 'sizeof'.  For example, on i386 systems,
+   'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence
+   LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but
+   sizeof (long double) = 12 or = 16.  */
+#define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
+#define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
+#define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT)
+
+/* Verify that SIZEOF_FLT <= sizeof (float) etc.  */
+typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1];
+typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1];
+typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1];
+
+#endif /* _FLOATPLUS_H */
diff --git a/lib/float.c b/lib/float.c
new file mode 100644 (file)
index 0000000..7caca83
--- /dev/null
@@ -0,0 +1,33 @@
+/* Auxiliary definitions for <float.h>.
+   Copyright (C) 2011-2018 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2011.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <float.h>
+
+#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__
+const union gl_long_double_union gl_LDBL_MAX =
+  { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } };
+#elif defined __i386__
+const union gl_long_double_union gl_LDBL_MAX =
+  { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } };
+#else
+/* This declaration is solely to ensure that after preprocessing
+   this file is never empty.  */
+typedef int dummy;
+#endif
diff --git a/lib/float.in.h b/lib/float.in.h
new file mode 100644 (file)
index 0000000..2cdbd12
--- /dev/null
@@ -0,0 +1,188 @@
+/* A correct <float.h>.
+
+   Copyright (C) 2007-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_FLOAT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_FLOAT_H@
+
+#ifndef _@GUARD_PREFIX@_FLOAT_H
+#define _@GUARD_PREFIX@_FLOAT_H
+
+/* 'long double' properties.  */
+
+#if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__)
+/* Number of mantissa units, in base FLT_RADIX.  */
+# undef LDBL_MANT_DIG
+# define LDBL_MANT_DIG   64
+/* Number of decimal digits that is sufficient for representing a number.  */
+# undef LDBL_DIG
+# define LDBL_DIG        18
+/* x-1 where x is the smallest representable number > 1.  */
+# undef LDBL_EPSILON
+# define LDBL_EPSILON    1.0842021724855044340E-19L
+/* Minimum e such that FLT_RADIX^(e-1) is a normalized number.  */
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number.  */
+# undef LDBL_MAX_EXP
+# define LDBL_MAX_EXP    16384
+/* Minimum positive normalized number.  */
+# undef LDBL_MIN
+# define LDBL_MIN        3.3621031431120935063E-4932L
+/* Maximum representable finite number.  */
+# undef LDBL_MAX
+# define LDBL_MAX        1.1897314953572317650E+4932L
+/* Minimum e such that 10^e is in the range of normalized numbers.  */
+# undef LDBL_MIN_10_EXP
+# define LDBL_MIN_10_EXP (-4931)
+/* Maximum e such that 10^e is in the range of representable finite numbers.  */
+# undef LDBL_MAX_10_EXP
+# define LDBL_MAX_10_EXP 4932
+#endif
+
+/* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of
+   precision in the compiler but 64 bits of precision at runtime.  See
+   <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>.  */
+#if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__)
+/* Number of mantissa units, in base FLT_RADIX.  */
+# undef LDBL_MANT_DIG
+# define LDBL_MANT_DIG   64
+/* Number of decimal digits that is sufficient for representing a number.  */
+# undef LDBL_DIG
+# define LDBL_DIG        18
+/* x-1 where x is the smallest representable number > 1.  */
+# undef LDBL_EPSILON
+# define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */
+/* Minimum e such that FLT_RADIX^(e-1) is a normalized number.  */
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP    (-16381)
+/* Maximum e such that FLT_RADIX^(e-1) is a representable finite number.  */
+# undef LDBL_MAX_EXP
+# define LDBL_MAX_EXP    16384
+/* Minimum positive normalized number.  */
+# undef LDBL_MIN
+# define LDBL_MIN        3.362103143112093506262677817321752E-4932L /* = 0x1p-16382L */
+/* Maximum representable finite number.  */
+# undef LDBL_MAX
+/* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }.
+   But the largest literal that GCC allows us to write is
+   0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }.
+   So, define it like this through a reference to an external variable
+
+     const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 };
+     extern const long double LDBL_MAX;
+
+   Unfortunately, this is not a constant expression.  */
+union gl_long_double_union
+  {
+    struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd;
+    long double ld;
+  };
+extern const union gl_long_double_union gl_LDBL_MAX;
+# define LDBL_MAX (gl_LDBL_MAX.ld)
+/* Minimum e such that 10^e is in the range of normalized numbers.  */
+# undef LDBL_MIN_10_EXP
+# define LDBL_MIN_10_EXP (-4931)
+/* Maximum e such that 10^e is in the range of representable finite numbers.  */
+# undef LDBL_MAX_10_EXP
+# define LDBL_MAX_10_EXP 4932
+#endif
+
+/* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are
+   wrong.
+   On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong.  */
+#if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MIN_EXP
+# define LDBL_MIN_EXP DBL_MIN_EXP
+# undef LDBL_MIN_10_EXP
+# define LDBL_MIN_10_EXP DBL_MIN_10_EXP
+# undef LDBL_MIN
+# define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */
+#endif
+#if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__
+# undef LDBL_MAX
+/* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }.
+   It is not easy to define:
+     #define LDBL_MAX 1.79769313486231580793728971405302307166e308L
+   is too small, whereas
+     #define LDBL_MAX 1.79769313486231580793728971405302307167e308L
+   is too large.  Apparently a bug in GCC decimal-to-binary conversion.
+   Also, I can't get values larger than
+     #define LDBL63 ((long double) (1ULL << 63))
+     #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)
+     #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)
+     #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63)
+     #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL)
+   which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }.
+   So, define it like this through a reference to an external variable
+
+     const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL };
+     extern const long double LDBL_MAX;
+
+   or through a pointer cast
+
+     #define LDBL_MAX \
+       (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL })
+
+   Unfortunately, this is not a constant expression, and the latter expression
+   does not work well when GCC is optimizing..  */
+union gl_long_double_union
+  {
+    struct { double hi; double lo; } dd;
+    long double ld;
+  };
+extern const union gl_long_double_union gl_LDBL_MAX;
+# define LDBL_MAX (gl_LDBL_MAX.ld)
+#endif
+
+/* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong.
+   On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON
+   are wrong.  */
+#if defined __sgi && (LDBL_MANT_DIG >= 106)
+# undef LDBL_MANT_DIG
+# define LDBL_MANT_DIG 106
+# if defined __GNUC__
+#  undef LDBL_MIN_EXP
+#  define LDBL_MIN_EXP DBL_MIN_EXP
+#  undef LDBL_MIN_10_EXP
+#  define LDBL_MIN_10_EXP DBL_MIN_10_EXP
+#  undef LDBL_MIN
+#  define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */
+#  undef LDBL_EPSILON
+#  define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */
+# endif
+#endif
+
+#if @REPLACE_ITOLD@
+/* Pull in a function that fixes the 'int' to 'long double' conversion
+   of glibc 2.7.  */
+extern
+# ifdef __cplusplus
+"C"
+# endif
+void _Qp_itoq (long double *, int);
+static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq;
+#endif
+
+#endif /* _@GUARD_PREFIX@_FLOAT_H */
+#endif /* _@GUARD_PREFIX@_FLOAT_H */
diff --git a/lib/fprintf.c b/lib/fprintf.c
new file mode 100644 (file)
index 0000000..4ac9fbd
--- /dev/null
@@ -0,0 +1,77 @@
+/* Formatted output to a stream.
+   Copyright (C) 2004, 2006-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdlib.h>
+
+#include "fseterr.h"
+#include "vasnprintf.h"
+
+/* Print formatted output to the stream FP.
+   Return string length of formatted string.  On error, return a negative
+   value.  */
+int
+fprintf (FILE *fp, const char *format, ...)
+{
+  char buf[2000];
+  char *output;
+  size_t len;
+  size_t lenbuf = sizeof (buf);
+  va_list args;
+
+  va_start (args, format);
+  output = vasnprintf (buf, &lenbuf, format, args);
+  len = lenbuf;
+  va_end (args);
+
+  if (!output)
+    {
+      fseterr (fp);
+      return -1;
+    }
+
+  if (fwrite (output, 1, len, fp) < len)
+    {
+      if (output != buf)
+        {
+          int saved_errno = errno;
+          free (output);
+          errno = saved_errno;
+        }
+      return -1;
+    }
+
+  if (output != buf)
+    free (output);
+
+  if (len > INT_MAX)
+    {
+      errno = EOVERFLOW;
+      fseterr (fp);
+      return -1;
+    }
+
+  return len;
+}
diff --git a/lib/fpucw.h b/lib/fpucw.h
new file mode 100644 (file)
index 0000000..0c04800
--- /dev/null
@@ -0,0 +1,108 @@
+/* Manipulating the FPU control word.  -*- coding: utf-8 -*-
+   Copyright (C) 2007-2018 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2007.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _FPUCW_H
+#define _FPUCW_H
+
+/* The i386 floating point hardware (the 387 compatible FPU, not the modern
+   SSE/SSE2 hardware) has a controllable rounding precision.  It is specified
+   through the 'PC' bits in the FPU control word ('fctrl' register).  (See
+   the GNU libc i386 <fpu_control.h> header for details.)
+
+   On some platforms, such as Linux or Solaris, the default precision setting
+   is set to "extended precision".  This means that 'long double' instructions
+   operate correctly, but 'double' computations often produce slightly
+   different results as on strictly IEEE 754 conforming systems.
+
+   On some platforms, such as NetBSD, the default precision is set to
+   "double precision".  This means that 'long double' instructions will operate
+   only as 'double', i.e. lead to wrong results.  Similarly on FreeBSD 6.4, at
+   least for the division of 'long double' numbers.
+
+   The FPU control word is under control of the application, i.e. it is
+   not required to be set either way by the ABI.  (In fact, the i386 ABI
+   https://www.linux-mips.org/pub/linux/mips/doc/ABI/abi386-4.pdf page 3-12 = page 38
+   is not clear about it.  But in any case, gcc treats the control word
+   like a "preserved" register: it emits code that assumes that the control
+   word is preserved across calls, and it restores the control word at the
+   end of functions that modify it.)
+
+   See Vincent Lefèvre's page https://www.vinc17.net/research/extended.en.html
+   for a good explanation.
+   See http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html for
+   some argumentation which setting should be the default.  */
+
+/* This header file provides the following facilities:
+     fpucw_t                        integral type holding the value of 'fctrl'
+     FPU_PC_MASK                    bit mask denoting the precision control
+     FPU_PC_DOUBLE                  precision control for 53 bits mantissa
+     FPU_PC_EXTENDED                precision control for 64 bits mantissa
+     GET_FPUCW ()                   yields the current FPU control word
+     SET_FPUCW (word)               sets the FPU control word
+     DECL_LONG_DOUBLE_ROUNDING      variable declaration for
+                                    BEGIN/END_LONG_DOUBLE_ROUNDING
+     BEGIN_LONG_DOUBLE_ROUNDING ()  starts a sequence of instructions with
+                                    'long double' safe operation precision
+     END_LONG_DOUBLE_ROUNDING ()    ends a sequence of instructions with
+                                    'long double' safe operation precision
+ */
+
+/* Inline assembler like this works only with GNU C.  */
+#if (defined __i386__ || defined __x86_64__) && defined __GNUC__
+
+typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */
+
+# define FPU_PC_MASK 0x0300
+# define FPU_PC_DOUBLE 0x200    /* glibc calls this _FPU_DOUBLE */
+# define FPU_PC_EXTENDED 0x300  /* glibc calls this _FPU_EXTENDED */
+
+# define GET_FPUCW() \
+  ({ fpucw_t _cw;                                               \
+     __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw));         \
+     _cw;                                                       \
+   })
+# define SET_FPUCW(word) \
+  (void)({ fpucw_t _ncw = (word);                               \
+           __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw));  \
+         })
+
+# define DECL_LONG_DOUBLE_ROUNDING \
+  fpucw_t oldcw;
+# define BEGIN_LONG_DOUBLE_ROUNDING() \
+  (void)(oldcw = GET_FPUCW (),                                  \
+         SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED))
+# define END_LONG_DOUBLE_ROUNDING() \
+  SET_FPUCW (oldcw)
+
+#else
+
+typedef unsigned int fpucw_t;
+
+# define FPU_PC_MASK 0
+# define FPU_PC_DOUBLE 0
+# define FPU_PC_EXTENDED 0
+
+# define GET_FPUCW() 0
+# define SET_FPUCW(word) (void)(word)
+
+# define DECL_LONG_DOUBLE_ROUNDING
+# define BEGIN_LONG_DOUBLE_ROUNDING()
+# define END_LONG_DOUBLE_ROUNDING()
+
+#endif
+
+#endif /* _FPUCW_H */
diff --git a/lib/frexp.c b/lib/frexp.c
new file mode 100644 (file)
index 0000000..37ea13a
--- /dev/null
@@ -0,0 +1,168 @@
+/* Split a double into fraction and mantissa.
+   Copyright (C) 2007-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paolo Bonzini <bonzini@gnu.org>, 2003, and
+   Bruno Haible <bruno@clisp.org>, 2007.  */
+
+#if ! defined USE_LONG_DOUBLE
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include <math.h>
+
+#include <float.h>
+#ifdef USE_LONG_DOUBLE
+# include "isnanl-nolibm.h"
+# include "fpucw.h"
+#else
+# include "isnand-nolibm.h"
+#endif
+
+/* This file assumes FLT_RADIX = 2.  If FLT_RADIX is a power of 2 greater
+   than 2, or not even a power of 2, some rounding errors can occur, so that
+   then the returned mantissa is only guaranteed to be <= 1.0, not < 1.0.  */
+
+#ifdef USE_LONG_DOUBLE
+# define FUNC frexpl
+# define DOUBLE long double
+# define ISNAN isnanl
+# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING
+# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING ()
+# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING ()
+# define L_(literal) literal##L
+#else
+# define FUNC frexp
+# define DOUBLE double
+# define ISNAN isnand
+# define DECL_ROUNDING
+# define BEGIN_ROUNDING()
+# define END_ROUNDING()
+# define L_(literal) literal
+#endif
+
+DOUBLE
+FUNC (DOUBLE x, int *expptr)
+{
+  int sign;
+  int exponent;
+  DECL_ROUNDING
+
+  /* Test for NaN, infinity, and zero.  */
+  if (ISNAN (x) || x + x == x)
+    {
+      *expptr = 0;
+      return x;
+    }
+
+  sign = 0;
+  if (x < 0)
+    {
+      x = - x;
+      sign = -1;
+    }
+
+  BEGIN_ROUNDING ();
+
+  {
+    /* Since the exponent is an 'int', it fits in 64 bits.  Therefore the
+       loops are executed no more than 64 times.  */
+    DOUBLE pow2[64]; /* pow2[i] = 2^2^i */
+    DOUBLE powh[64]; /* powh[i] = 2^-2^i */
+    int i;
+
+    exponent = 0;
+    if (x >= L_(1.0))
+      {
+        /* A positive exponent.  */
+        DOUBLE pow2_i; /* = pow2[i] */
+        DOUBLE powh_i; /* = powh[i] */
+
+        /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i,
+           x * 2^exponent = argument, x >= 1.0.  */
+        for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5);
+             ;
+             i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i)
+          {
+            if (x >= pow2_i)
+              {
+                exponent += (1 << i);
+                x *= powh_i;
+              }
+            else
+              break;
+
+            pow2[i] = pow2_i;
+            powh[i] = powh_i;
+          }
+        /* Avoid making x too small, as it could become a denormalized
+           number and thus lose precision.  */
+        while (i > 0 && x < pow2[i - 1])
+          {
+            i--;
+            powh_i = powh[i];
+          }
+        exponent += (1 << i);
+        x *= powh_i;
+        /* Here 2^-2^i <= x < 1.0.  */
+      }
+    else
+      {
+        /* A negative or zero exponent.  */
+        DOUBLE pow2_i; /* = pow2[i] */
+        DOUBLE powh_i; /* = powh[i] */
+
+        /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i,
+           x * 2^exponent = argument, x < 1.0.  */
+        for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5);
+             ;
+             i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i)
+          {
+            if (x < powh_i)
+              {
+                exponent -= (1 << i);
+                x *= pow2_i;
+              }
+            else
+              break;
+
+            pow2[i] = pow2_i;
+            powh[i] = powh_i;
+          }
+        /* Here 2^-2^i <= x < 1.0.  */
+      }
+
+    /* Invariants: x * 2^exponent = argument, and 2^-2^i <= x < 1.0.  */
+    while (i > 0)
+      {
+        i--;
+        if (x < powh[i])
+          {
+            exponent -= (1 << i);
+            x *= pow2[i];
+          }
+      }
+    /* Here 0.5 <= x < 1.0.  */
+  }
+
+  if (sign < 0)
+    x = - x;
+
+  END_ROUNDING ();
+
+  *expptr = exponent;
+  return x;
+}
diff --git a/lib/frexpl.c b/lib/frexpl.c
new file mode 100644 (file)
index 0000000..2ac0c03
--- /dev/null
@@ -0,0 +1,35 @@
+/* Split a 'long double' into fraction and mantissa.
+   Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+
+/* Specification.  */
+# include <math.h>
+
+long double
+frexpl (long double x, int *expptr)
+{
+  return frexp (x, expptr);
+}
+
+#else
+
+# define USE_LONG_DOUBLE
+# include "frexp.c"
+
+#endif
diff --git a/lib/fseterr.c b/lib/fseterr.c
new file mode 100644 (file)
index 0000000..81f51ed
--- /dev/null
@@ -0,0 +1,84 @@
+/* Set the error indicator of a stream.
+   Copyright (C) 2007-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "fseterr.h"
+
+#include <errno.h>
+
+#include "stdio-impl.h"
+
+/* This file is not used on systems that have the __fseterr function,
+   namely musl libc.  */
+
+void
+fseterr (FILE *fp)
+{
+  /* Most systems provide FILE as a struct and the necessary bitmask in
+     <stdio.h>, because they need it for implementing getc() and putc() as
+     fast macros.  */
+#if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1
+  /* GNU libc, BeOS, Haiku, Linux libc5 */
+  fp->_flags |= _IO_ERR_SEEN;
+#elif defined __sferror || defined __DragonFly__ || defined __ANDROID__
+  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
+  fp_->_flags |= __SERR;
+#elif defined __EMX__               /* emx+gcc */
+  fp->_flags |= _IOERR;
+#elif defined __minix               /* Minix */
+  fp->_flags |= _IOERR;
+#elif defined _IOERR                /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, mingw, MSVC, NonStop Kernel, OpenVMS */
+  fp_->_flag |= _IOERR;
+#elif defined __UCLIBC__            /* uClibc */
+  fp->__modeflags |= __FLAG_ERROR;
+#elif defined __QNX__               /* QNX */
+  fp->_Mode |= 0x200 /* _MERR */;
+#elif defined __MINT__              /* Atari FreeMiNT */
+  fp->__error = 1;
+#elif defined EPLAN9                /* Plan9 */
+  if (fp->state != 0 /* CLOSED */)
+    fp->state = 5 /* ERR */;
+#elif 0                             /* unknown  */
+  /* Portable fallback, based on an idea by Rich Felker.
+     Wow! 6 system calls for something that is just a bit operation!
+     Not activated on any system, because there is no way to repair FP when
+     the sequence of system calls fails, and library code should not call
+     abort().  */
+  int saved_errno;
+  int fd;
+  int fd2;
+
+  saved_errno = errno;
+  fflush (fp);
+  fd = fileno (fp);
+  fd2 = dup (fd);
+  if (fd2 >= 0)
+    {
+      close (fd);
+      fputc ('\0', fp); /* This should set the error indicator.  */
+      fflush (fp);      /* Or this.  */
+      if (dup2 (fd2, fd) < 0)
+        /* Whee... we botched the stream and now cannot restore it!  */
+        abort ();
+      close (fd2);
+    }
+  errno = saved_errno;
+#else
+ #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib."
+#endif
+}
diff --git a/lib/fseterr.h b/lib/fseterr.h
new file mode 100644 (file)
index 0000000..d616433
--- /dev/null
@@ -0,0 +1,45 @@
+/* Set the error indicator of a stream.
+   Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _FSETERR_H
+#define _FSETERR_H
+
+#include <stdio.h>
+
+/* Set the error indicator of the stream FP.
+   The "error indicator" is set when an I/O operation on the stream fails, and
+   is cleared (together with the "end-of-file" indicator) by clearerr (FP).  */
+
+#if HAVE___FSETERR /* musl libc */
+
+# include <stdio_ext.h>
+# define fseterr(fp) __fseterr (fp)
+
+#else
+
+# ifdef __cplusplus
+extern "C" {
+# endif
+
+extern void fseterr (FILE *fp);
+
+# ifdef __cplusplus
+}
+# endif
+
+#endif
+
+#endif /* _FSETERR_H */
diff --git a/lib/gnulib.mk b/lib/gnulib.mk
new file mode 100644 (file)
index 0000000..66518b8
--- /dev/null
@@ -0,0 +1,1266 @@
+## DO NOT EDIT! GENERATED AUTOMATICALLY!
+## Process this file with automake to produce Makefile.in.
+# Copyright (C) 2002-2018 Free Software Foundation, Inc.
+#
+# This file 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 3 of the License, or
+# (at your option) any later version.
+#
+# This file 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 file.  If not, see <https://www.gnu.org/licenses/>.
+#
+# As a special exception to the GNU General Public License,
+# this file may be distributed as part of a program that
+# contains a configuration script generated by Autoconf, under
+# the same distribution terms as the rest of that program.
+#
+# Generated by gnulib-tool.
+# Reproduce by:
+# gnulib-tool --import --local-dir=gl \
+#  --lib=libgnu \
+#  --source-base=lib \
+#  --m4-base=gnulib_m4 \
+#  --doc-base=doc \
+#  --tests-base=tests \
+#  --aux-dir=build-aux \
+#  --makefile-name=gnulib.mk \
+#  --no-conditional-dependencies \
+#  --no-libtool \
+#  --macro-prefix=gl \
+#  fprintf-posix \
+#  git-version-gen \
+#  havelib \
+#  non-recursive-gnulib-prefix-hack \
+#  snprintf \
+#  vsnprintf \
+#  wcwidth
+
+
+MOSTLYCLEANFILES += lib/core lib/*.stackdump
+# No GNU Make output.
+
+noinst_LIBRARIES += lib/libgnu.a
+
+lib_libgnu_a_SOURCES =
+lib_libgnu_a_LIBADD = $(gl_LIBOBJS)
+lib_libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
+EXTRA_lib_libgnu_a_SOURCES =
+
+## begin gnulib module absolute-header
+
+# Use this preprocessor expression to decide whether #include_next works.
+# Do not rely on a 'configure'-time test for this, since the expression
+# might appear in an installed header, which is used by some other compiler.
+HAVE_INCLUDE_NEXT = lib/(__GNUC__ lib/|| lib/60000000 lib/<= lib/__DECC_VER)
+
+## end   gnulib module absolute-header
+
+## begin gnulib module alloca-opt
+
+BUILT_SOURCES += $(ALLOCA_H)
+
+# We need the following in order to create <alloca.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_ALLOCA_H
+lib/alloca.h: lib/alloca.in.h $(top_builddir)/config.status
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         cat $(top_srcdir)/lib/alloca.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+else
+lib/alloca.h: $(top_builddir)/config.status
+       rm -f $@
+endif
+MOSTLYCLEANFILES += lib/alloca.h lib/alloca.h-t
+
+EXTRA_DIST += lib/alloca.in.h
+
+## end   gnulib module alloca-opt
+
+## begin gnulib module errno
+
+BUILT_SOURCES += $(ERRNO_H)
+
+# We need the following in order to create <errno.h> when the system
+# doesn't have one that is POSIX compliant.
+if GL_GENERATE_ERRNO_H
+lib/errno.h: lib/errno.in.h $(top_builddir)/config.status
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \
+             -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \
+             -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \
+             -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \
+             -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \
+             -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \
+             -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \
+             < $(top_srcdir)/lib/errno.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+else
+lib/errno.h: $(top_builddir)/config.status
+       rm -f $@
+endif
+MOSTLYCLEANFILES += lib/errno.h lib/errno.h-t
+
+EXTRA_DIST += lib/errno.in.h
+
+## end   gnulib module errno
+
+## begin gnulib module float
+
+BUILT_SOURCES += $(FLOAT_H)
+
+# We need the following in order to create <float.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_FLOAT_H
+lib/float.h: lib/float.in.h $(top_builddir)/config.status
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \
+             -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
+             < $(top_srcdir)/lib/float.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+else
+lib/float.h: $(top_builddir)/config.status
+       rm -f $@
+endif
+MOSTLYCLEANFILES += lib/float.h lib/float.h-t
+
+EXTRA_DIST += lib/float.c lib/float.in.h lib/itold.c
+
+EXTRA_lib_libgnu_a_SOURCES += lib/float.c lib/itold.c
+
+## end   gnulib module float
+
+## begin gnulib module fprintf-posix
+
+
+EXTRA_DIST += lib/fprintf.c
+
+EXTRA_lib_libgnu_a_SOURCES += lib/fprintf.c
+
+## end   gnulib module fprintf-posix
+
+## begin gnulib module fpucw
+
+
+EXTRA_DIST += lib/fpucw.h
+
+## end   gnulib module fpucw
+
+## begin gnulib module frexp-nolibm
+
+
+EXTRA_DIST += lib/frexp.c
+
+EXTRA_lib_libgnu_a_SOURCES += lib/frexp.c
+
+## end   gnulib module frexp-nolibm
+
+## begin gnulib module frexpl-nolibm
+
+
+EXTRA_DIST += lib/frexp.c lib/frexpl.c
+
+EXTRA_lib_libgnu_a_SOURCES += lib/frexp.c lib/frexpl.c
+
+## end   gnulib module frexpl-nolibm
+
+## begin gnulib module fseterr
+
+
+EXTRA_DIST += lib/fseterr.c lib/fseterr.h lib/stdio-impl.h
+
+EXTRA_lib_libgnu_a_SOURCES += lib/fseterr.c
+
+## end   gnulib module fseterr
+
+## begin gnulib module git-version-gen
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/git-version-gen
+
+## end   gnulib module git-version-gen
+
+## begin gnulib module havelib
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath
+
+## end   gnulib module havelib
+
+## begin gnulib module isnand-nolibm
+
+
+EXTRA_DIST += lib/float+.h lib/isnan.c lib/isnand-nolibm.h lib/isnand.c
+
+EXTRA_lib_libgnu_a_SOURCES += lib/isnan.c lib/isnand.c
+
+## end   gnulib module isnand-nolibm
+
+## begin gnulib module isnanf-nolibm
+
+
+EXTRA_DIST += lib/float+.h lib/isnan.c lib/isnanf-nolibm.h lib/isnanf.c
+
+EXTRA_lib_libgnu_a_SOURCES += lib/isnan.c lib/isnanf.c
+
+## end   gnulib module isnanf-nolibm
+
+## begin gnulib module isnanl-nolibm
+
+
+EXTRA_DIST += lib/float+.h lib/isnan.c lib/isnanl-nolibm.h lib/isnanl.c
+
+EXTRA_lib_libgnu_a_SOURCES += lib/isnan.c lib/isnanl.c
+
+## end   gnulib module isnanl-nolibm
+
+## begin gnulib module limits-h
+
+BUILT_SOURCES += $(LIMITS_H)
+
+# We need the following in order to create <limits.h> when the system
+# doesn't have one that is compatible with GNU.
+if GL_GENERATE_LIMITS_H
+lib/limits.h: lib/limits.in.h $(top_builddir)/config.status
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \
+             < $(top_srcdir)/lib/limits.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+else
+lib/limits.h: $(top_builddir)/config.status
+       rm -f $@
+endif
+MOSTLYCLEANFILES += lib/limits.h lib/limits.h-t
+
+EXTRA_DIST += lib/limits.in.h
+
+## end   gnulib module limits-h
+
+## begin gnulib module localcharset
+
+lib_libgnu_a_SOURCES += lib/localcharset.c
+
+EXTRA_DIST += lib/localcharset.h
+
+## end   gnulib module localcharset
+
+## begin gnulib module math
+
+BUILT_SOURCES += lib/math.h
+lib_libgnu_a_SOURCES += lib/math.c
+
+# We need the following in order to create <math.h> when the system
+# doesn't have one that works with the given compiler.
+lib/math.h: lib/math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \
+             -e 's/@''GNULIB_ACOSF''@/$(GNULIB_ACOSF)/g' \
+             -e 's/@''GNULIB_ACOSL''@/$(GNULIB_ACOSL)/g' \
+             -e 's/@''GNULIB_ASINF''@/$(GNULIB_ASINF)/g' \
+             -e 's/@''GNULIB_ASINL''@/$(GNULIB_ASINL)/g' \
+             -e 's/@''GNULIB_ATANF''@/$(GNULIB_ATANF)/g' \
+             -e 's/@''GNULIB_ATANL''@/$(GNULIB_ATANL)/g' \
+             -e 's/@''GNULIB_ATAN2F''@/$(GNULIB_ATAN2F)/g' \
+             -e 's/@''GNULIB_CBRT''@/$(GNULIB_CBRT)/g' \
+             -e 's/@''GNULIB_CBRTF''@/$(GNULIB_CBRTF)/g' \
+             -e 's/@''GNULIB_CBRTL''@/$(GNULIB_CBRTL)/g' \
+             -e 's/@''GNULIB_CEIL''@/$(GNULIB_CEIL)/g' \
+             -e 's/@''GNULIB_CEILF''@/$(GNULIB_CEILF)/g' \
+             -e 's/@''GNULIB_CEILL''@/$(GNULIB_CEILL)/g' \
+             -e 's/@''GNULIB_COPYSIGN''@/$(GNULIB_COPYSIGN)/g' \
+             -e 's/@''GNULIB_COPYSIGNF''@/$(GNULIB_COPYSIGNF)/g' \
+             -e 's/@''GNULIB_COPYSIGNL''@/$(GNULIB_COPYSIGNL)/g' \
+             -e 's/@''GNULIB_COSF''@/$(GNULIB_COSF)/g' \
+             -e 's/@''GNULIB_COSL''@/$(GNULIB_COSL)/g' \
+             -e 's/@''GNULIB_COSHF''@/$(GNULIB_COSHF)/g' \
+             -e 's/@''GNULIB_EXPF''@/$(GNULIB_EXPF)/g' \
+             -e 's/@''GNULIB_EXPL''@/$(GNULIB_EXPL)/g' \
+             -e 's/@''GNULIB_EXP2''@/$(GNULIB_EXP2)/g' \
+             -e 's/@''GNULIB_EXP2F''@/$(GNULIB_EXP2F)/g' \
+             -e 's/@''GNULIB_EXP2L''@/$(GNULIB_EXP2L)/g' \
+             -e 's/@''GNULIB_EXPM1''@/$(GNULIB_EXPM1)/g' \
+             -e 's/@''GNULIB_EXPM1F''@/$(GNULIB_EXPM1F)/g' \
+             -e 's/@''GNULIB_EXPM1L''@/$(GNULIB_EXPM1L)/g' \
+             -e 's/@''GNULIB_FABSF''@/$(GNULIB_FABSF)/g' \
+             -e 's/@''GNULIB_FABSL''@/$(GNULIB_FABSL)/g' \
+             -e 's/@''GNULIB_FLOOR''@/$(GNULIB_FLOOR)/g' \
+             -e 's/@''GNULIB_FLOORF''@/$(GNULIB_FLOORF)/g' \
+             -e 's/@''GNULIB_FLOORL''@/$(GNULIB_FLOORL)/g' \
+             -e 's/@''GNULIB_FMA''@/$(GNULIB_FMA)/g' \
+             -e 's/@''GNULIB_FMAF''@/$(GNULIB_FMAF)/g' \
+             -e 's/@''GNULIB_FMAL''@/$(GNULIB_FMAL)/g' \
+             -e 's/@''GNULIB_FMOD''@/$(GNULIB_FMOD)/g' \
+             -e 's/@''GNULIB_FMODF''@/$(GNULIB_FMODF)/g' \
+             -e 's/@''GNULIB_FMODL''@/$(GNULIB_FMODL)/g' \
+             -e 's/@''GNULIB_FREXPF''@/$(GNULIB_FREXPF)/g' \
+             -e 's/@''GNULIB_FREXP''@/$(GNULIB_FREXP)/g' \
+             -e 's/@''GNULIB_FREXPL''@/$(GNULIB_FREXPL)/g' \
+             -e 's/@''GNULIB_HYPOT''@/$(GNULIB_HYPOT)/g' \
+             -e 's/@''GNULIB_HYPOTF''@/$(GNULIB_HYPOTF)/g' \
+             -e 's/@''GNULIB_HYPOTL''@/$(GNULIB_HYPOTL)/g' \
+             < $(top_srcdir)/lib/math.in.h | \
+         sed -e 's/@''GNULIB_ILOGB''@/$(GNULIB_ILOGB)/g' \
+             -e 's/@''GNULIB_ILOGBF''@/$(GNULIB_ILOGBF)/g' \
+             -e 's/@''GNULIB_ILOGBL''@/$(GNULIB_ILOGBL)/g' \
+             -e 's/@''GNULIB_ISFINITE''@/$(GNULIB_ISFINITE)/g' \
+             -e 's/@''GNULIB_ISINF''@/$(GNULIB_ISINF)/g' \
+             -e 's/@''GNULIB_ISNAN''@/$(GNULIB_ISNAN)/g' \
+             -e 's/@''GNULIB_ISNANF''@/$(GNULIB_ISNANF)/g' \
+             -e 's/@''GNULIB_ISNAND''@/$(GNULIB_ISNAND)/g' \
+             -e 's/@''GNULIB_ISNANL''@/$(GNULIB_ISNANL)/g' \
+             -e 's/@''GNULIB_LDEXPF''@/$(GNULIB_LDEXPF)/g' \
+             -e 's/@''GNULIB_LDEXPL''@/$(GNULIB_LDEXPL)/g' \
+             -e 's/@''GNULIB_LOG''@/$(GNULIB_LOG)/g' \
+             -e 's/@''GNULIB_LOGF''@/$(GNULIB_LOGF)/g' \
+             -e 's/@''GNULIB_LOGL''@/$(GNULIB_LOGL)/g' \
+             -e 's/@''GNULIB_LOG10''@/$(GNULIB_LOG10)/g' \
+             -e 's/@''GNULIB_LOG10F''@/$(GNULIB_LOG10F)/g' \
+             -e 's/@''GNULIB_LOG10L''@/$(GNULIB_LOG10L)/g' \
+             -e 's/@''GNULIB_LOG1P''@/$(GNULIB_LOG1P)/g' \
+             -e 's/@''GNULIB_LOG1PF''@/$(GNULIB_LOG1PF)/g' \
+             -e 's/@''GNULIB_LOG1PL''@/$(GNULIB_LOG1PL)/g' \
+             -e 's/@''GNULIB_LOG2''@/$(GNULIB_LOG2)/g' \
+             -e 's/@''GNULIB_LOG2F''@/$(GNULIB_LOG2F)/g' \
+             -e 's/@''GNULIB_LOG2L''@/$(GNULIB_LOG2L)/g' \
+             -e 's/@''GNULIB_LOGB''@/$(GNULIB_LOGB)/g' \
+             -e 's/@''GNULIB_LOGBF''@/$(GNULIB_LOGBF)/g' \
+             -e 's/@''GNULIB_LOGBL''@/$(GNULIB_LOGBL)/g' \
+             -e 's/@''GNULIB_MODF''@/$(GNULIB_MODF)/g' \
+             -e 's/@''GNULIB_MODFF''@/$(GNULIB_MODFF)/g' \
+             -e 's/@''GNULIB_MODFL''@/$(GNULIB_MODFL)/g' \
+             -e 's/@''GNULIB_POWF''@/$(GNULIB_POWF)/g' \
+             -e 's/@''GNULIB_REMAINDER''@/$(GNULIB_REMAINDER)/g' \
+             -e 's/@''GNULIB_REMAINDERF''@/$(GNULIB_REMAINDERF)/g' \
+             -e 's/@''GNULIB_REMAINDERL''@/$(GNULIB_REMAINDERL)/g' \
+             -e 's/@''GNULIB_RINT''@/$(GNULIB_RINT)/g' \
+             -e 's/@''GNULIB_RINTF''@/$(GNULIB_RINTF)/g' \
+             -e 's/@''GNULIB_RINTL''@/$(GNULIB_RINTL)/g' \
+             -e 's/@''GNULIB_ROUND''@/$(GNULIB_ROUND)/g' \
+             -e 's/@''GNULIB_ROUNDF''@/$(GNULIB_ROUNDF)/g' \
+             -e 's/@''GNULIB_ROUNDL''@/$(GNULIB_ROUNDL)/g' \
+             -e 's/@''GNULIB_SIGNBIT''@/$(GNULIB_SIGNBIT)/g' \
+             -e 's/@''GNULIB_SINF''@/$(GNULIB_SINF)/g' \
+             -e 's/@''GNULIB_SINL''@/$(GNULIB_SINL)/g' \
+             -e 's/@''GNULIB_SINHF''@/$(GNULIB_SINHF)/g' \
+             -e 's/@''GNULIB_SQRTF''@/$(GNULIB_SQRTF)/g' \
+             -e 's/@''GNULIB_SQRTL''@/$(GNULIB_SQRTL)/g' \
+             -e 's/@''GNULIB_TANF''@/$(GNULIB_TANF)/g' \
+             -e 's/@''GNULIB_TANL''@/$(GNULIB_TANL)/g' \
+             -e 's/@''GNULIB_TANHF''@/$(GNULIB_TANHF)/g' \
+             -e 's/@''GNULIB_TRUNC''@/$(GNULIB_TRUNC)/g' \
+             -e 's/@''GNULIB_TRUNCF''@/$(GNULIB_TRUNCF)/g' \
+             -e 's/@''GNULIB_TRUNCL''@/$(GNULIB_TRUNCL)/g' \
+         | \
+         sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \
+             -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \
+             -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \
+             -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \
+             -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \
+             -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \
+             -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \
+             -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \
+             -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \
+             -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \
+             -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \
+             -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \
+             -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \
+             -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \
+             -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \
+             -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \
+             -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \
+             -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \
+             -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \
+             -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \
+             -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \
+             -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \
+             -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \
+             -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \
+             -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \
+             -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \
+             -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \
+             -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \
+             -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \
+             -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \
+             -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \
+             -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \
+             -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \
+             -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \
+             -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \
+             -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \
+             -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \
+             -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \
+             -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \
+             -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \
+             -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \
+             -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \
+             -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \
+             -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \
+             -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \
+             -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \
+             -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \
+             -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \
+             -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \
+             -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \
+             -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \
+             -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \
+             -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \
+             -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \
+             -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \
+             -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \
+             -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \
+             -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \
+             -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \
+             -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \
+             -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \
+             -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \
+             -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \
+             -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \
+             -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \
+             -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \
+             -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \
+             -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \
+             -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \
+             -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \
+             -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \
+             -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \
+             -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \
+             -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \
+             -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \
+             -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \
+             -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \
+             -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \
+             -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \
+             -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \
+             -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \
+             -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \
+             -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \
+             -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \
+             -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \
+             -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \
+             -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \
+             -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \
+             -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \
+             -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \
+             -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \
+             -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \
+             -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \
+             -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \
+             -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \
+             -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \
+         | \
+         sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \
+             -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \
+             -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \
+             -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \
+             -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \
+             -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \
+             -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \
+             -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \
+             -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \
+             -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \
+             -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \
+             -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \
+             -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \
+             -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \
+             -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \
+             -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \
+             -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \
+             -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \
+             -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \
+             -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \
+             -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \
+             -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \
+             -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \
+             -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \
+             -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \
+             -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \
+             -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \
+             -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \
+             -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \
+             -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \
+             -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \
+             -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \
+             -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \
+             -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \
+             -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \
+             -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \
+             -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \
+             -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \
+             -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \
+             -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \
+             -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \
+             -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \
+             -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \
+             -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \
+             -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \
+             -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \
+             -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \
+             -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \
+             -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \
+             -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \
+             -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \
+             -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \
+             -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \
+             -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \
+             -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \
+             -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \
+             -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \
+             -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \
+             -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \
+             -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \
+             -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \
+             -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \
+             -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \
+             -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \
+             -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \
+             -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \
+             -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \
+             -e 's|@''REPLACE_SIGNBIT_USING_GCC''@|$(REPLACE_SIGNBIT_USING_GCC)|g' \
+             -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \
+             -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \
+             -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \
+             -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \
+             -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \
+             -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \
+             -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \
+             -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \
+             -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += lib/math.h lib/math.h-t
+
+EXTRA_DIST += lib/math.in.h
+
+## end   gnulib module math
+
+## begin gnulib module memchr
+
+
+EXTRA_DIST += lib/memchr.c lib/memchr.valgrind
+
+EXTRA_lib_libgnu_a_SOURCES += lib/memchr.c
+
+## end   gnulib module memchr
+
+## begin gnulib module non-recursive-gnulib-prefix-hack
+
+
+EXTRA_DIST += $(top_srcdir)/build-aux/prefix-gnulib-mk
+
+## end   gnulib module non-recursive-gnulib-prefix-hack
+
+## begin gnulib module printf-frexp
+
+lib_libgnu_a_SOURCES += lib/printf-frexp.c
+
+EXTRA_DIST += lib/printf-frexp.h
+
+## end   gnulib module printf-frexp
+
+## begin gnulib module printf-frexpl
+
+lib_libgnu_a_SOURCES += lib/printf-frexpl.c
+
+EXTRA_DIST += lib/printf-frexp.c lib/printf-frexpl.h
+
+EXTRA_lib_libgnu_a_SOURCES += lib/printf-frexp.c
+
+## end   gnulib module printf-frexpl
+
+## begin gnulib module signbit
+
+
+EXTRA_DIST += lib/float+.h lib/signbitd.c lib/signbitf.c lib/signbitl.c
+
+EXTRA_lib_libgnu_a_SOURCES += lib/signbitd.c lib/signbitf.c lib/signbitl.c
+
+## end   gnulib module signbit
+
+## begin gnulib module size_max
+
+lib_libgnu_a_SOURCES += lib/size_max.h
+
+## end   gnulib module size_max
+
+## begin gnulib module snippet/arg-nonnull
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+
+ARG_NONNULL_H=$(top_srcdir)/lib/arg-nonnull.h
+
+EXTRA_DIST += lib/arg-nonnull.h
+
+## end   gnulib module snippet/arg-nonnull
+
+## begin gnulib module snippet/c++defs
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+
+CXXDEFS_H=$(top_srcdir)/lib/c++defs.h
+
+EXTRA_DIST += lib/c++defs.h
+
+## end   gnulib module snippet/c++defs
+
+## begin gnulib module snippet/warn-on-use
+
+# Because this Makefile snippet defines a variable used by other
+# gnulib Makefile snippets, it must be present in all makefiles that
+# need it. This is ensured by the applicability 'all' defined above.
+
+WARN_ON_USE_H=$(top_srcdir)/lib/warn-on-use.h
+
+EXTRA_DIST += lib/warn-on-use.h
+
+## end   gnulib module snippet/warn-on-use
+
+## begin gnulib module snprintf
+
+
+EXTRA_DIST += lib/snprintf.c
+
+EXTRA_lib_libgnu_a_SOURCES += lib/snprintf.c
+
+## end   gnulib module snprintf
+
+## begin gnulib module stddef
+
+BUILT_SOURCES += $(STDDEF_H)
+
+# We need the following in order to create <stddef.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDDEF_H
+lib/stddef.h: lib/stddef.in.h $(top_builddir)/config.status
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
+             -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \
+             -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
+             -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
+             < $(top_srcdir)/lib/stddef.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+else
+lib/stddef.h: $(top_builddir)/config.status
+       rm -f $@
+endif
+MOSTLYCLEANFILES += lib/stddef.h lib/stddef.h-t
+
+EXTRA_DIST += lib/stddef.in.h
+
+## end   gnulib module stddef
+
+## begin gnulib module stdint
+
+BUILT_SOURCES += $(STDINT_H)
+
+# We need the following in order to create <stdint.h> when the system
+# doesn't have one that works with the given compiler.
+if GL_GENERATE_STDINT_H
+lib/stdint.h: lib/stdint.in.h $(top_builddir)/config.status
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
+             -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \
+             -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
+             -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
+             -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
+             -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
+             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
+             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
+             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
+             -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
+             -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
+             -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
+             -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
+             -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
+             -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
+             -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
+             -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
+             -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
+             -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
+             -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
+             < $(top_srcdir)/lib/stdint.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+else
+lib/stdint.h: $(top_builddir)/config.status
+       rm -f $@
+endif
+MOSTLYCLEANFILES += lib/stdint.h lib/stdint.h-t
+
+EXTRA_DIST += lib/stdint.in.h
+
+## end   gnulib module stdint
+
+## begin gnulib module stdio
+
+BUILT_SOURCES += lib/stdio.h
+
+# We need the following in order to create <stdio.h> when the system
+# doesn't have one that works with the given compiler.
+lib/stdio.h: lib/stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \
+             -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \
+             -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \
+             -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \
+             -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \
+             -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \
+             -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \
+             -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \
+             -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \
+             -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \
+             -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \
+             -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \
+             -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \
+             -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \
+             -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \
+             -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \
+             -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \
+             -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \
+             -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \
+             -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \
+             -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \
+             -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \
+             -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \
+             -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \
+             -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \
+             -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \
+             -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \
+             -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \
+             -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \
+             -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \
+             -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \
+             -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \
+             -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \
+             -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \
+             -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \
+             -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \
+             -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \
+             -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \
+             -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \
+             -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \
+             -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \
+             -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \
+             -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \
+             -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \
+             -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \
+             -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \
+             -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \
+             -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \
+             -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \
+             < $(top_srcdir)/lib/stdio.in.h | \
+         sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \
+             -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \
+             -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \
+             -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \
+             -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \
+             -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \
+             -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \
+             -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \
+             -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \
+             -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \
+             -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \
+             -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \
+             -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \
+             -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \
+             -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \
+             -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \
+             -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \
+             -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \
+             -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \
+             -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \
+             -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \
+             -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \
+             -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \
+             -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \
+             -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \
+             -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \
+             -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \
+             -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \
+             -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \
+             -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \
+             -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \
+             -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \
+             -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \
+             -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \
+             -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \
+             -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \
+             -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \
+             -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \
+             -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \
+             -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \
+             -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \
+             -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \
+             -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \
+             -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \
+             -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \
+             -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \
+             -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \
+             -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \
+             -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += lib/stdio.h lib/stdio.h-t
+
+EXTRA_DIST += lib/stdio.in.h
+
+## end   gnulib module stdio
+
+## begin gnulib module streq
+
+
+EXTRA_DIST += lib/streq.h
+
+## end   gnulib module streq
+
+## begin gnulib module string
+
+BUILT_SOURCES += lib/string.h
+
+# We need the following in order to create <string.h> when the system
+# doesn't have one that works with the given compiler.
+lib/string.h: lib/string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \
+             -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GNULIB_EXPLICIT_BZERO)/g' \
+             -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \
+             -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/g' \
+             -e 's/@''GNULIB_MBSLEN''@/$(GNULIB_MBSLEN)/g' \
+             -e 's/@''GNULIB_MBSNLEN''@/$(GNULIB_MBSNLEN)/g' \
+             -e 's/@''GNULIB_MBSCHR''@/$(GNULIB_MBSCHR)/g' \
+             -e 's/@''GNULIB_MBSRCHR''@/$(GNULIB_MBSRCHR)/g' \
+             -e 's/@''GNULIB_MBSSTR''@/$(GNULIB_MBSSTR)/g' \
+             -e 's/@''GNULIB_MBSCASECMP''@/$(GNULIB_MBSCASECMP)/g' \
+             -e 's/@''GNULIB_MBSNCASECMP''@/$(GNULIB_MBSNCASECMP)/g' \
+             -e 's/@''GNULIB_MBSPCASECMP''@/$(GNULIB_MBSPCASECMP)/g' \
+             -e 's/@''GNULIB_MBSCASESTR''@/$(GNULIB_MBSCASESTR)/g' \
+             -e 's/@''GNULIB_MBSCSPN''@/$(GNULIB_MBSCSPN)/g' \
+             -e 's/@''GNULIB_MBSPBRK''@/$(GNULIB_MBSPBRK)/g' \
+             -e 's/@''GNULIB_MBSSPN''@/$(GNULIB_MBSSPN)/g' \
+             -e 's/@''GNULIB_MBSSEP''@/$(GNULIB_MBSSEP)/g' \
+             -e 's/@''GNULIB_MBSTOK_R''@/$(GNULIB_MBSTOK_R)/g' \
+             -e 's/@''GNULIB_MEMCHR''@/$(GNULIB_MEMCHR)/g' \
+             -e 's/@''GNULIB_MEMMEM''@/$(GNULIB_MEMMEM)/g' \
+             -e 's/@''GNULIB_MEMPCPY''@/$(GNULIB_MEMPCPY)/g' \
+             -e 's/@''GNULIB_MEMRCHR''@/$(GNULIB_MEMRCHR)/g' \
+             -e 's/@''GNULIB_RAWMEMCHR''@/$(GNULIB_RAWMEMCHR)/g' \
+             -e 's/@''GNULIB_STPCPY''@/$(GNULIB_STPCPY)/g' \
+             -e 's/@''GNULIB_STPNCPY''@/$(GNULIB_STPNCPY)/g' \
+             -e 's/@''GNULIB_STRCHRNUL''@/$(GNULIB_STRCHRNUL)/g' \
+             -e 's/@''GNULIB_STRDUP''@/$(GNULIB_STRDUP)/g' \
+             -e 's/@''GNULIB_STRNCAT''@/$(GNULIB_STRNCAT)/g' \
+             -e 's/@''GNULIB_STRNDUP''@/$(GNULIB_STRNDUP)/g' \
+             -e 's/@''GNULIB_STRNLEN''@/$(GNULIB_STRNLEN)/g' \
+             -e 's/@''GNULIB_STRPBRK''@/$(GNULIB_STRPBRK)/g' \
+             -e 's/@''GNULIB_STRSEP''@/$(GNULIB_STRSEP)/g' \
+             -e 's/@''GNULIB_STRSTR''@/$(GNULIB_STRSTR)/g' \
+             -e 's/@''GNULIB_STRCASESTR''@/$(GNULIB_STRCASESTR)/g' \
+             -e 's/@''GNULIB_STRTOK_R''@/$(GNULIB_STRTOK_R)/g' \
+             -e 's/@''GNULIB_STRERROR''@/$(GNULIB_STRERROR)/g' \
+             -e 's/@''GNULIB_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \
+             -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \
+             -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \
+             < $(top_srcdir)/lib/string.in.h | \
+         sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \
+             -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \
+             -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \
+             -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \
+             -e 's|@''HAVE_MEMCHR''@|$(HAVE_MEMCHR)|g' \
+             -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \
+             -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \
+             -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \
+             -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \
+             -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \
+             -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \
+             -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \
+             -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \
+             -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \
+             -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \
+             -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \
+             -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \
+             -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \
+             -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \
+             -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \
+             -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \
+             -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \
+             -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \
+             -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \
+             -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \
+             -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \
+             -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \
+             -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \
+             -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \
+             -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \
+             -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \
+             -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \
+             -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \
+             -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \
+             -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \
+             -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+             < $(top_srcdir)/lib/string.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += lib/string.h lib/string.h-t
+
+EXTRA_DIST += lib/string.in.h
+
+## end   gnulib module string
+
+## begin gnulib module sys_types
+
+BUILT_SOURCES += lib/sys/types.h
+
+# We need the following in order to create <sys/types.h> when the system
+# doesn't have one that works with the given compiler.
+lib/sys/types.h: lib/sys_types.in.h $(top_builddir)/config.status
+       $(AM_V_at)$(MKDIR_P) lib/sys
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \
+             -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \
+             -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \
+             < $(top_srcdir)/lib/sys_types.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += lib/sys/types.h lib/sys/types.h-t
+
+EXTRA_DIST += lib/sys_types.in.h
+
+## end   gnulib module sys_types
+
+## begin gnulib module unitypes
+
+BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H)
+
+lib/unitypes.h: lib/unitypes.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         cat $(top_srcdir)/lib/unitypes.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+MOSTLYCLEANFILES += lib/unitypes.h lib/unitypes.h-t
+
+EXTRA_DIST += lib/unitypes.in.h
+
+## end   gnulib module unitypes
+
+## begin gnulib module uniwidth/base
+
+BUILT_SOURCES += $(LIBUNISTRING_UNIWIDTH_H)
+
+lib/uniwidth.h: lib/uniwidth.in.h
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         cat $(top_srcdir)/lib/uniwidth.in.h; \
+       } > $@-t && \
+       mv -f $@-t $@
+MOSTLYCLEANFILES += lib/uniwidth.h lib/uniwidth.h-t
+
+EXTRA_DIST += lib/localcharset.h lib/uniwidth.in.h
+
+## end   gnulib module uniwidth/base
+
+## begin gnulib module uniwidth/width
+
+if LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH
+lib_libgnu_a_SOURCES += lib/uniwidth/width.c
+endif
+
+EXTRA_DIST += lib/uniwidth/cjk.h
+
+## end   gnulib module uniwidth/width
+
+## begin gnulib module vasnprintf
+
+
+EXTRA_DIST += lib/asnprintf.c lib/float+.h lib/printf-args.c lib/printf-args.h lib/printf-parse.c lib/printf-parse.h lib/vasnprintf.c lib/vasnprintf.h
+
+EXTRA_lib_libgnu_a_SOURCES += lib/asnprintf.c lib/printf-args.c lib/printf-parse.c lib/vasnprintf.c
+
+## end   gnulib module vasnprintf
+
+## begin gnulib module verify
+
+
+EXTRA_DIST += lib/verify.h
+
+## end   gnulib module verify
+
+## begin gnulib module vsnprintf
+
+
+EXTRA_DIST += lib/vsnprintf.c
+
+EXTRA_lib_libgnu_a_SOURCES += lib/vsnprintf.c
+
+## end   gnulib module vsnprintf
+
+## begin gnulib module wchar
+
+BUILT_SOURCES += lib/wchar.h
+
+# We need the following in order to create <wchar.h> when the system
+# version does not work standalone.
+lib/wchar.h: lib/wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
+             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
+             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
+             -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+             -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
+             -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
+             -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
+             -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
+             -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
+             -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
+             -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
+             -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
+             -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
+             -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
+             -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
+             -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
+             -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
+             -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
+             -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
+             -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
+             -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
+             -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
+             -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
+             -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
+             -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
+             -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
+             -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
+             -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
+             -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
+             -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
+             -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
+             -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
+             -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
+             -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
+             -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
+             -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
+             -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
+             -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
+             -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
+             -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
+             -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
+             -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
+             -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
+             -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
+             -e 's/@''GNULIB_WCSFTIME''@/$(GNULIB_WCSFTIME)/g' \
+             < $(top_srcdir)/lib/wchar.in.h | \
+         sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
+             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
+             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
+             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
+             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
+             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
+             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
+             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
+             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
+             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
+             -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
+             -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
+             -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
+             -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
+             -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
+             -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
+             -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
+             -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
+             -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
+             -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
+             -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
+             -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
+             -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
+             -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
+             -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
+             -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
+             -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
+             -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
+             -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
+             -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
+             -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
+             -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
+             -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
+             -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
+             -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
+             -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
+             -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
+             -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
+             -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \
+             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
+             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
+         | \
+         sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
+             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
+             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
+             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
+             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
+             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
+             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
+             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
+             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
+             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
+             -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
+             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
+             -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
+             -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += lib/wchar.h lib/wchar.h-t
+
+EXTRA_DIST += lib/wchar.in.h
+
+## end   gnulib module wchar
+
+## begin gnulib module wctype-h
+
+BUILT_SOURCES += lib/wctype.h
+lib_libgnu_a_SOURCES += lib/wctype-h.c
+
+# We need the following in order to create <wctype.h> when the system
+# doesn't have one that works with the given compiler.
+lib/wctype.h: lib/wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
+       $(AM_V_GEN)rm -f $@-t $@ && \
+       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
+         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
+             -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
+             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
+             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
+             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
+             -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
+             -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \
+             -e 's/@''GNULIB_OVERRIDES_WINT_T''@/$(GNULIB_OVERRIDES_WINT_T)/g' \
+             -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
+             -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
+             -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
+             -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
+             -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
+             -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
+             -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
+             -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
+             -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
+             -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
+             -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
+             -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
+             -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
+             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
+             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
+             < $(top_srcdir)/lib/wctype.in.h; \
+       } > $@-t && \
+       mv $@-t $@
+MOSTLYCLEANFILES += lib/wctype.h lib/wctype.h-t
+
+EXTRA_DIST += lib/wctype.in.h
+
+## end   gnulib module wctype-h
+
+## begin gnulib module wcwidth
+
+
+EXTRA_DIST += lib/wcwidth.c
+
+EXTRA_lib_libgnu_a_SOURCES += lib/wcwidth.c
+
+## end   gnulib module wcwidth
+
+## begin gnulib module xsize
+
+lib_libgnu_a_SOURCES += lib/xsize.h lib/xsize.c
+
+## end   gnulib module xsize
+
+
+mostlyclean-local: mostlyclean-generic
+       @for dir in '' $(MOSTLYCLEANDIRS); do \
+         if test -n "$$dir" && test -d $$dir; then \
+           echo "rmdir $$dir"; rmdir $$dir; \
+         fi; \
+       done; \
+       :
diff --git a/lib/isnan.c b/lib/isnan.c
new file mode 100644 (file)
index 0000000..a25c882
--- /dev/null
@@ -0,0 +1,189 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
+
+#include <config.h>
+
+/* Specification.  */
+#ifdef USE_LONG_DOUBLE
+/* Specification found in math.h or isnanl-nolibm.h.  */
+extern int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST;
+#elif ! defined USE_FLOAT
+/* Specification found in math.h or isnand-nolibm.h.  */
+extern int rpl_isnand (double x);
+#else /* defined USE_FLOAT */
+/* Specification found in math.h or isnanf-nolibm.h.  */
+extern int rpl_isnanf (float x);
+#endif
+
+#include <float.h>
+#include <string.h>
+
+#include "float+.h"
+
+#ifdef USE_LONG_DOUBLE
+# define FUNC rpl_isnanl
+# define DOUBLE long double
+# define MAX_EXP LDBL_MAX_EXP
+# define MIN_EXP LDBL_MIN_EXP
+# if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT
+#  define KNOWN_EXPBIT0_LOCATION
+#  define EXPBIT0_WORD LDBL_EXPBIT0_WORD
+#  define EXPBIT0_BIT LDBL_EXPBIT0_BIT
+# endif
+# define SIZE SIZEOF_LDBL
+# define L_(literal) literal##L
+#elif ! defined USE_FLOAT
+# define FUNC rpl_isnand
+# define DOUBLE double
+# define MAX_EXP DBL_MAX_EXP
+# define MIN_EXP DBL_MIN_EXP
+# if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT
+#  define KNOWN_EXPBIT0_LOCATION
+#  define EXPBIT0_WORD DBL_EXPBIT0_WORD
+#  define EXPBIT0_BIT DBL_EXPBIT0_BIT
+# endif
+# define SIZE SIZEOF_DBL
+# define L_(literal) literal
+#else /* defined USE_FLOAT */
+# define FUNC rpl_isnanf
+# define DOUBLE float
+# define MAX_EXP FLT_MAX_EXP
+# define MIN_EXP FLT_MIN_EXP
+# if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT
+#  define KNOWN_EXPBIT0_LOCATION
+#  define EXPBIT0_WORD FLT_EXPBIT0_WORD
+#  define EXPBIT0_BIT FLT_EXPBIT0_BIT
+# endif
+# define SIZE SIZEOF_FLT
+# define L_(literal) literal##f
+#endif
+
+#define EXP_MASK ((MAX_EXP - MIN_EXP) | 7)
+
+#define NWORDS \
+  ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double;
+
+/* Most hosts nowadays use IEEE floating point, so they use IEC 60559
+   representations, have infinities and NaNs, and do not trap on
+   exceptions.  Define IEEE_FLOATING_POINT if this host is one of the
+   typical ones.  The C11 macro __STDC_IEC_559__ is close to what is
+   wanted here, but is not quite right because this file does not require
+   all the features of C11 Annex F (and does not require C11 at all,
+   for that matter).  */
+
+#define IEEE_FLOATING_POINT (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \
+                             && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128)
+
+int
+FUNC (DOUBLE x)
+{
+#if defined KNOWN_EXPBIT0_LOCATION && IEEE_FLOATING_POINT
+# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+  /* Special CPU dependent code is needed to treat bit patterns outside the
+     IEEE 754 specification (such as Pseudo-NaNs, Pseudo-Infinities,
+     Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals) as NaNs.
+     These bit patterns are:
+       - exponent = 0x0001..0x7FFF, mantissa bit 63 = 0,
+       - exponent = 0x0000, mantissa bit 63 = 1.
+     The NaN bit pattern is:
+       - exponent = 0x7FFF, mantissa >= 0x8000000000000001.  */
+  memory_double m;
+  unsigned int exponent;
+
+  m.value = x;
+  exponent = (m.word[EXPBIT0_WORD] >> EXPBIT0_BIT) & EXP_MASK;
+#  ifdef WORDS_BIGENDIAN
+  /* Big endian: EXPBIT0_WORD = 0, EXPBIT0_BIT = 16.  */
+  if (exponent == 0)
+    return 1 & (m.word[0] >> 15);
+  else if (exponent == EXP_MASK)
+    return (((m.word[0] ^ 0x8000U) << 16) | m.word[1] | (m.word[2] >> 16)) != 0;
+  else
+    return 1 & ~(m.word[0] >> 15);
+#  else
+  /* Little endian: EXPBIT0_WORD = 2, EXPBIT0_BIT = 0.  */
+  if (exponent == 0)
+    return (m.word[1] >> 31);
+  else if (exponent == EXP_MASK)
+    return ((m.word[1] ^ 0x80000000U) | m.word[0]) != 0;
+  else
+    return (m.word[1] >> 31) ^ 1;
+#  endif
+# else
+  /* Be careful to not do any floating-point operation on x, such as x == x,
+     because x may be a signaling NaN.  */
+#  if defined __SUNPRO_C || defined __ICC || defined _MSC_VER \
+      || defined __DECC || defined __TINYC__ \
+      || (defined __sgi && !defined __GNUC__)
+  /* The Sun C 5.0, Intel ICC 10.0, Microsoft Visual C/C++ 9.0, Compaq (ex-DEC)
+     6.4, and TinyCC compilers don't recognize the initializers as constant
+     expressions.  The Compaq compiler also fails when constant-folding
+     0.0 / 0.0 even when constant-folding is not required.  The Microsoft
+     Visual C/C++ compiler also fails when constant-folding 1.0 / 0.0 even
+     when constant-folding is not required. The SGI MIPSpro C compiler
+     complains about "floating-point operation result is out of range".  */
+  static DOUBLE zero = L_(0.0);
+  memory_double nan;
+  DOUBLE plus_inf = L_(1.0) / zero;
+  DOUBLE minus_inf = -L_(1.0) / zero;
+  nan.value = zero / zero;
+#  else
+  static memory_double nan = { L_(0.0) / L_(0.0) };
+  static DOUBLE plus_inf = L_(1.0) / L_(0.0);
+  static DOUBLE minus_inf = -L_(1.0) / L_(0.0);
+#  endif
+  {
+    memory_double m;
+
+    /* A NaN can be recognized through its exponent.  But exclude +Infinity and
+       -Infinity, which have the same exponent.  */
+    m.value = x;
+    if (((m.word[EXPBIT0_WORD] ^ nan.word[EXPBIT0_WORD])
+         & (EXP_MASK << EXPBIT0_BIT))
+        == 0)
+      return (memcmp (&m.value, &plus_inf, SIZE) != 0
+              && memcmp (&m.value, &minus_inf, SIZE) != 0);
+    else
+      return 0;
+  }
+# endif
+#else
+  /* The configuration did not find sufficient information, or does
+     not use IEEE floating point.  Give up about the signaling NaNs;
+     handle only the quiet NaNs.  */
+  if (x == x)
+    {
+# if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+      /* Detect any special bit patterns that pass ==; see comment above.  */
+      memory_double m1;
+      memory_double m2;
+
+      memset (&m1.value, 0, SIZE);
+      memset (&m2.value, 0, SIZE);
+      m1.value = x;
+      m2.value = x + (x ? 0.0L : -0.0L);
+      if (memcmp (&m1.value, &m2.value, SIZE) != 0)
+        return 1;
+# endif
+      return 0;
+    }
+  else
+    return 1;
+#endif
+}
diff --git a/lib/isnand-nolibm.h b/lib/isnand-nolibm.h
new file mode 100644 (file)
index 0000000..7be4573
--- /dev/null
@@ -0,0 +1,33 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#if HAVE_ISNAND_IN_LIBC
+/* Get declaration of isnan macro.  */
+# include <math.h>
+# if __GNUC__ >= 4
+   /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#  undef isnand
+#  define isnand(x) __builtin_isnan ((double)(x))
+# else
+#  undef isnand
+#  define isnand(x) isnan ((double)(x))
+# endif
+#else
+/* Test whether X is a NaN.  */
+# undef isnand
+# define isnand rpl_isnand
+extern int isnand (double x);
+#endif
diff --git a/lib/isnand.c b/lib/isnand.c
new file mode 100644 (file)
index 0000000..4871a5c
--- /dev/null
@@ -0,0 +1,19 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2008-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2008.  */
+
+#include "isnan.c"
diff --git a/lib/isnanf-nolibm.h b/lib/isnanf-nolibm.h
new file mode 100644 (file)
index 0000000..8e3764c
--- /dev/null
@@ -0,0 +1,40 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#if HAVE_ISNANF_IN_LIBC
+/* Get declaration of isnan macro or (older) isnanf function.  */
+# include <math.h>
+# if __GNUC__ >= 4
+   /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#  undef isnanf
+#  define isnanf(x) __builtin_isnanf ((float)(x))
+# elif defined isnan
+#  undef isnanf
+#  define isnanf(x) isnan ((float)(x))
+# else
+   /* Get declaration of isnanf(), if not declared in <math.h>.  */
+#  if defined __sgi
+   /* We can't include <ieeefp.h>, because it conflicts with our definition of
+      isnand.  Therefore declare isnanf separately.  */
+extern int isnanf (float x);
+#  endif
+# endif
+#else
+/* Test whether X is a NaN.  */
+# undef isnanf
+# define isnanf rpl_isnanf
+extern int isnanf (float x);
+#endif
diff --git a/lib/isnanf.c b/lib/isnanf.c
new file mode 100644 (file)
index 0000000..786c530
--- /dev/null
@@ -0,0 +1,20 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
+
+#define USE_FLOAT
+#include "isnan.c"
diff --git a/lib/isnanl-nolibm.h b/lib/isnanl-nolibm.h
new file mode 100644 (file)
index 0000000..ddd12f0
--- /dev/null
@@ -0,0 +1,33 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#if HAVE_ISNANL_IN_LIBC
+/* Get declaration of isnan macro or (older) isnanl function.  */
+# include <math.h>
+# if __GNUC__ >= 4
+   /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#  undef isnanl
+#  define isnanl(x) __builtin_isnanl ((long double)(x))
+# elif defined isnan
+#  undef isnanl
+#  define isnanl(x) isnan ((long double)(x))
+# endif
+#else
+/* Test whether X is a NaN.  */
+# undef isnanl
+# define isnanl rpl_isnanl
+extern int isnanl (long double x);
+#endif
diff --git a/lib/isnanl.c b/lib/isnanl.c
new file mode 100644 (file)
index 0000000..f45d1f2
--- /dev/null
@@ -0,0 +1,20 @@
+/* Test for NaN that does not need libm.
+   Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>, 2007.  */
+
+#define USE_LONG_DOUBLE
+#include "isnan.c"
diff --git a/lib/itold.c b/lib/itold.c
new file mode 100644 (file)
index 0000000..6a43bd8
--- /dev/null
@@ -0,0 +1,28 @@
+/* Replacement for 'int' to 'long double' conversion routine.
+   Copyright (C) 2011-2018 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2011.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <float.h>
+
+void
+_Qp_itoq (long double *result, int a)
+{
+  /* Convert from 'int' to 'double', then from 'double' to 'long double'.  */
+  *result = (double) a;
+}
diff --git a/lib/limits.in.h b/lib/limits.in.h
new file mode 100644 (file)
index 0000000..89d7195
--- /dev/null
@@ -0,0 +1,104 @@
+/* A GNU-like <limits.h>.
+
+   Copyright 2016-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_LIMITS_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_LIMITS_H@
+
+#ifndef _@GUARD_PREFIX@_LIMITS_H
+#define _@GUARD_PREFIX@_LIMITS_H
+
+#ifndef LLONG_MIN
+# if defined LONG_LONG_MIN /* HP-UX 11.31 */
+#  define LLONG_MIN LONG_LONG_MIN
+# elif defined LONGLONG_MIN /* IRIX 6.5 */
+#  define LLONG_MIN LONGLONG_MIN
+# elif defined __GNUC__
+#  define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL)
+# endif
+#endif
+#ifndef LLONG_MAX
+# if defined LONG_LONG_MAX /* HP-UX 11.31 */
+#  define LLONG_MAX LONG_LONG_MAX
+# elif defined LONGLONG_MAX /* IRIX 6.5 */
+#  define LLONG_MAX LONGLONG_MAX
+# elif defined __GNUC__
+#  define LLONG_MAX __LONG_LONG_MAX__
+# endif
+#endif
+#ifndef ULLONG_MAX
+# if defined ULONG_LONG_MAX /* HP-UX 11.31 */
+#  define ULLONG_MAX ULONG_LONG_MAX
+# elif defined ULONGLONG_MAX /* IRIX 6.5 */
+#  define ULLONG_MAX ULONGLONG_MAX
+# elif defined __GNUC__
+#  define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL)
+# endif
+#endif
+
+/* The number of usable bits in an unsigned or signed integer type
+   with minimum value MIN and maximum value MAX, as an int expression
+   suitable in #if.  Cover all known practical hosts.  This
+   implementation exploits the fact that MAX is 1 less than a power of
+   2, and merely counts the number of 1 bits in MAX; "COBn" means
+   "count the number of 1 bits in the low-order n bits").  */
+#define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max))
+#define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n))
+#define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n))
+#define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n))
+#define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n))
+#define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n))
+#define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1))
+
+#ifndef WORD_BIT
+/* Assume 'int' is 32 bits wide.  */
+# define WORD_BIT 32
+#endif
+#ifndef LONG_BIT
+/* Assume 'long' is 32 or 64 bits wide.  */
+# if LONG_MAX == INT_MAX
+#  define LONG_BIT 32
+# else
+#  define LONG_BIT 64
+# endif
+#endif
+
+/* Macros specified by ISO/IEC TS 18661-1:2014.  */
+
+#if (! defined ULLONG_WIDTH                                             \
+     && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__))
+# define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX)
+# define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX)
+# define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX)
+# define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX)
+# define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX)
+# define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX)
+# define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX)
+# define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX)
+# define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX)
+# define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX)
+# define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX)
+#endif /* !ULLONG_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */
+
+#endif /* _@GUARD_PREFIX@_LIMITS_H */
+#endif /* _@GUARD_PREFIX@_LIMITS_H */
diff --git a/lib/localcharset.c b/lib/localcharset.c
new file mode 100644 (file)
index 0000000..58c5718
--- /dev/null
@@ -0,0 +1,996 @@
+/* Determine a canonical name for the current locale's character encoding.
+
+   Copyright (C) 2000-2006, 2008-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "localcharset.h"
+
+#include <stddef.h>
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET
+# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
+#endif
+
+#if defined _WIN32 && !defined __CYGWIN__
+# define WINDOWS_NATIVE
+# include <locale.h>
+#endif
+
+#if defined __EMX__
+/* Assume EMX program runs on OS/2, even if compiled under DOS.  */
+# ifndef OS2
+#  define OS2
+# endif
+#endif
+
+#if !defined WINDOWS_NATIVE
+# if HAVE_LANGINFO_CODESET
+#  include <langinfo.h>
+# else
+#  if 0 /* see comment regarding use of setlocale(), below */
+#   include <locale.h>
+#  endif
+# endif
+# ifdef __CYGWIN__
+#  define WIN32_LEAN_AND_MEAN
+#  include <windows.h>
+# endif
+#elif defined WINDOWS_NATIVE
+# define WIN32_LEAN_AND_MEAN
+# include <windows.h>
+#endif
+#if defined OS2
+# define INCL_DOS
+# include <os2.h>
+#endif
+
+/* For MB_CUR_MAX_L */
+#if defined DARWIN7
+# include <xlocale.h>
+#endif
+
+
+#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2
+
+/* On these platforms, we use a mapping from non-canonical encoding name
+   to GNU canonical encoding name.  */
+
+/* With glibc-2.1 or newer, we don't need any canonicalization,
+   because glibc has iconv and both glibc and libiconv support all
+   GNU canonical names directly.  */
+# if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__)
+
+struct table_entry
+{
+  const char alias[11+1];
+  const char canonical[11+1];
+};
+
+/* Table of platform-dependent mappings, sorted in ascending order.  */
+static const struct table_entry alias_table[] =
+  {
+#  if defined __FreeBSD__                                   /* FreeBSD */
+  /*{ "ARMSCII-8",  "ARMSCII-8" },*/
+    { "Big5",       "BIG5" },
+    { "C",          "ASCII" },
+  /*{ "CP1131",     "CP1131" },*/
+  /*{ "CP1251",     "CP1251" },*/
+  /*{ "CP866",      "CP866" },*/
+  /*{ "GB18030",    "GB18030" },*/
+  /*{ "GB2312",     "GB2312" },*/
+  /*{ "GBK",        "GBK" },*/
+  /*{ "ISCII-DEV",  "?" },*/
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-13", "ISO-8859-13" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" },
+    { "ISO8859-9",  "ISO-8859-9" },
+  /*{ "KOI8-R",     "KOI8-R" },*/
+  /*{ "KOI8-U",     "KOI8-U" },*/
+    { "SJIS",       "SHIFT_JIS" },
+    { "US-ASCII",   "ASCII" },
+    { "eucCN",      "GB2312" },
+    { "eucJP",      "EUC-JP" },
+    { "eucKR",      "EUC-KR" }
+#   define alias_table_defined
+#  endif
+#  if defined __NetBSD__                                    /* NetBSD */
+    { "646",        "ASCII" },
+  /*{ "ARMSCII-8",  "ARMSCII-8" },*/
+  /*{ "BIG5",       "BIG5" },*/
+    { "Big5-HKSCS", "BIG5-HKSCS" },
+  /*{ "CP1251",     "CP1251" },*/
+  /*{ "CP866",      "CP866" },*/
+  /*{ "GB18030",    "GB18030" },*/
+  /*{ "GB2312",     "GB2312" },*/
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-13", "ISO-8859-13" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-4",  "ISO-8859-4" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" },
+  /*{ "KOI8-R",     "KOI8-R" },*/
+  /*{ "KOI8-U",     "KOI8-U" },*/
+  /*{ "PT154",      "PT154" },*/
+    { "SJIS",       "SHIFT_JIS" },
+    { "eucCN",      "GB2312" },
+    { "eucJP",      "EUC-JP" },
+    { "eucKR",      "EUC-KR" },
+    { "eucTW",      "EUC-TW" }
+#   define alias_table_defined
+#  endif
+#  if defined __OpenBSD__                                   /* OpenBSD */
+    { "646",        "ASCII" },
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-13", "ISO-8859-13" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-4",  "ISO-8859-4" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" }
+#   define alias_table_defined
+#  endif
+#  if defined __APPLE__ && defined __MACH__                 /* Mac OS X */
+    /* Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is
+       useless:
+       - It returns the empty string when LANG is set to a locale of the
+         form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
+         LC_CTYPE file.
+       - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
+         the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
+       - The documentation says:
+           "... all code that calls BSD system routines should ensure
+            that the const *char parameters of these routines are in UTF-8
+            encoding. All BSD system functions expect their string
+            parameters to be in UTF-8 encoding and nothing else."
+         It also says
+           "An additional caveat is that string parameters for files,
+            paths, and other file-system entities must be in canonical
+            UTF-8. In a canonical UTF-8 Unicode string, all decomposable
+            characters are decomposed ..."
+         but this is not true: You can pass non-decomposed UTF-8 strings
+         to file system functions, and it is the OS which will convert
+         them to decomposed UTF-8 before accessing the file system.
+       - The Apple Terminal application displays UTF-8 by default.
+       - However, other applications are free to use different encodings:
+         - xterm uses ISO-8859-1 by default.
+         - TextEdit uses MacRoman by default.
+       We prefer UTF-8 over decomposed UTF-8-MAC because one should
+       minimize the use of decomposed Unicode. Unfortunately, through the
+       Darwin file system, decomposed UTF-8 strings are leaked into user
+       space nevertheless.
+       Then there are also the locales with encodings other than US-ASCII
+       and UTF-8. These locales can be occasionally useful to users (e.g.
+       when grepping through ISO-8859-1 encoded text files), when all their
+       file names are in US-ASCII.
+     */
+    { "ARMSCII-8",  "ARMSCII-8" },
+    { "Big5",       "BIG5" },
+    { "Big5HKSCS",  "BIG5-HKSCS" },
+    { "CP1131",     "CP1131" },
+    { "CP1251",     "CP1251" },
+    { "CP866",      "CP866" },
+    { "CP949",      "CP949" },
+    { "GB18030",    "GB18030" },
+    { "GB2312",     "GB2312" },
+    { "GBK",        "GBK" },
+  /*{ "ISCII-DEV",  "?" },*/
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-13", "ISO-8859-13" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-4",  "ISO-8859-4" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" },
+    { "ISO8859-9",  "ISO-8859-9" },
+    { "KOI8-R",     "KOI8-R" },
+    { "KOI8-U",     "KOI8-U" },
+    { "PT154",      "PT154" },
+    { "SJIS",       "SHIFT_JIS" },
+    { "eucCN",      "GB2312" },
+    { "eucJP",      "EUC-JP" },
+    { "eucKR",      "EUC-KR" }
+#   define alias_table_defined
+#  endif
+#  if defined _AIX                                          /* AIX */
+  /*{ "GBK",        "GBK" },*/
+    { "IBM-1046",   "CP1046" },
+    { "IBM-1124",   "CP1124" },
+    { "IBM-1129",   "CP1129" },
+    { "IBM-1252",   "CP1252" },
+    { "IBM-850",    "CP850" },
+    { "IBM-856",    "CP856" },
+    { "IBM-921",    "ISO-8859-13" },
+    { "IBM-922",    "CP922" },
+    { "IBM-932",    "CP932" },
+    { "IBM-943",    "CP943" },
+    { "IBM-eucCN",  "GB2312" },
+    { "IBM-eucJP",  "EUC-JP" },
+    { "IBM-eucKR",  "EUC-KR" },
+    { "IBM-eucTW",  "EUC-TW" },
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-6",  "ISO-8859-6" },
+    { "ISO8859-7",  "ISO-8859-7" },
+    { "ISO8859-8",  "ISO-8859-8" },
+    { "ISO8859-9",  "ISO-8859-9" },
+    { "TIS-620",    "TIS-620" },
+  /*{ "UTF-8",      "UTF-8" },*/
+    { "big5",       "BIG5" }
+#   define alias_table_defined
+#  endif
+#  if defined __hpux                                        /* HP-UX */
+    { "SJIS",      "SHIFT_JIS" },
+    { "arabic8",   "HP-ARABIC8" },
+    { "big5",      "BIG5" },
+    { "cp1251",    "CP1251" },
+    { "eucJP",     "EUC-JP" },
+    { "eucKR",     "EUC-KR" },
+    { "eucTW",     "EUC-TW" },
+    { "gb18030",   "GB18030" },
+    { "greek8",    "HP-GREEK8" },
+    { "hebrew8",   "HP-HEBREW8" },
+    { "hkbig5",    "BIG5-HKSCS" },
+    { "hp15CN",    "GB2312" },
+    { "iso88591",  "ISO-8859-1" },
+    { "iso885913", "ISO-8859-13" },
+    { "iso885915", "ISO-8859-15" },
+    { "iso88592",  "ISO-8859-2" },
+    { "iso88594",  "ISO-8859-4" },
+    { "iso88595",  "ISO-8859-5" },
+    { "iso88596",  "ISO-8859-6" },
+    { "iso88597",  "ISO-8859-7" },
+    { "iso88598",  "ISO-8859-8" },
+    { "iso88599",  "ISO-8859-9" },
+    { "kana8",     "HP-KANA8" },
+    { "koi8r",     "KOI8-R" },
+    { "roman8",    "HP-ROMAN8" },
+    { "tis620",    "TIS-620" },
+    { "turkish8",  "HP-TURKISH8" },
+    { "utf8",      "UTF-8" }
+#   define alias_table_defined
+#  endif
+#  if defined __sgi                                         /* IRIX */
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" },
+    { "ISO8859-9",  "ISO-8859-9" },
+    { "eucCN",      "GB2312" },
+    { "eucJP",      "EUC-JP" },
+    { "eucKR",      "EUC-KR" },
+    { "eucTW",      "EUC-TW" }
+#   define alias_table_defined
+#  endif
+#  if defined __osf__                                       /* OSF/1 */
+  /*{ "GBK",        "GBK" },*/
+    { "ISO8859-1",  "ISO-8859-1" },
+    { "ISO8859-15", "ISO-8859-15" },
+    { "ISO8859-2",  "ISO-8859-2" },
+    { "ISO8859-4",  "ISO-8859-4" },
+    { "ISO8859-5",  "ISO-8859-5" },
+    { "ISO8859-7",  "ISO-8859-7" },
+    { "ISO8859-8",  "ISO-8859-8" },
+    { "ISO8859-9",  "ISO-8859-9" },
+    { "KSC5601",    "CP949" },
+    { "SJIS",       "SHIFT_JIS" },
+    { "TACTIS",     "TIS-620" },
+  /*{ "UTF-8",      "UTF-8" },*/
+    { "big5",       "BIG5" },
+    { "cp850",      "CP850" },
+    { "dechanyu",   "DEC-HANYU" },
+    { "dechanzi",   "GB2312" },
+    { "deckanji",   "DEC-KANJI" },
+    { "deckorean",  "EUC-KR" },
+    { "eucJP",      "EUC-JP" },
+    { "eucKR",      "EUC-KR" },
+    { "eucTW",      "EUC-TW" },
+    { "sdeckanji",  "EUC-JP" }
+#   define alias_table_defined
+#  endif
+#  if defined __sun                                         /* Solaris */
+    { "5601",        "EUC-KR" },
+    { "646",         "ASCII" },
+  /*{ "BIG5",        "BIG5" },*/
+    { "Big5-HKSCS",  "BIG5-HKSCS" },
+    { "GB18030",     "GB18030" },
+  /*{ "GBK",         "GBK" },*/
+    { "ISO8859-1",   "ISO-8859-1" },
+    { "ISO8859-11",  "TIS-620" },
+    { "ISO8859-13",  "ISO-8859-13" },
+    { "ISO8859-15",  "ISO-8859-15" },
+    { "ISO8859-2",   "ISO-8859-2" },
+    { "ISO8859-3",   "ISO-8859-3" },
+    { "ISO8859-4",   "ISO-8859-4" },
+    { "ISO8859-5",   "ISO-8859-5" },
+    { "ISO8859-6",   "ISO-8859-6" },
+    { "ISO8859-7",   "ISO-8859-7" },
+    { "ISO8859-8",   "ISO-8859-8" },
+    { "ISO8859-9",   "ISO-8859-9" },
+    { "PCK",         "SHIFT_JIS" },
+    { "TIS620.2533", "TIS-620" },
+  /*{ "UTF-8",       "UTF-8" },*/
+    { "ansi-1251",   "CP1251" },
+    { "cns11643",    "EUC-TW" },
+    { "eucJP",       "EUC-JP" },
+    { "gb2312",      "GB2312" },
+    { "koi8-r",      "KOI8-R" }
+#   define alias_table_defined
+#  endif
+#  if defined __minix                                       /* Minix */
+    { "646", "ASCII" }
+#   define alias_table_defined
+#  endif
+#  if defined WINDOWS_NATIVE || defined __CYGWIN__          /* Windows */
+    { "CP1361",  "JOHAB" },
+    { "CP20127", "ASCII" },
+    { "CP20866", "KOI8-R" },
+    { "CP20936", "GB2312" },
+    { "CP21866", "KOI8-RU" },
+    { "CP28591", "ISO-8859-1" },
+    { "CP28592", "ISO-8859-2" },
+    { "CP28593", "ISO-8859-3" },
+    { "CP28594", "ISO-8859-4" },
+    { "CP28595", "ISO-8859-5" },
+    { "CP28596", "ISO-8859-6" },
+    { "CP28597", "ISO-8859-7" },
+    { "CP28598", "ISO-8859-8" },
+    { "CP28599", "ISO-8859-9" },
+    { "CP28605", "ISO-8859-15" },
+    { "CP38598", "ISO-8859-8" },
+    { "CP51932", "EUC-JP" },
+    { "CP51936", "GB2312" },
+    { "CP51949", "EUC-KR" },
+    { "CP51950", "EUC-TW" },
+    { "CP54936", "GB18030" },
+    { "CP65001", "UTF-8" },
+    { "CP936",   "GBK" }
+#   define alias_table_defined
+#  endif
+#  if defined OS2                                           /* OS/2 */
+    /* The list of encodings is taken from "List of OS/2 Codepages"
+       by Alex Taylor:
+       <http://altsan.org/os2/toolkits/uls/index.html#codepages>.
+       See also "IBM Globalization - Code page identifiers":
+       <https://www-01.ibm.com/software/globalization/cp/cp_cpgid.html>.  */
+    { "CP1089", "ISO-8859-6" },
+    { "CP1208", "UTF-8" },
+    { "CP1381", "GB2312" },
+    { "CP1386", "GBK" },
+    { "CP3372", "EUC-JP" },
+    { "CP813",  "ISO-8859-7" },
+    { "CP819",  "ISO-8859-1" },
+    { "CP878",  "KOI8-R" },
+    { "CP912",  "ISO-8859-2" },
+    { "CP913",  "ISO-8859-3" },
+    { "CP914",  "ISO-8859-4" },
+    { "CP915",  "ISO-8859-5" },
+    { "CP916",  "ISO-8859-8" },
+    { "CP920",  "ISO-8859-9" },
+    { "CP921",  "ISO-8859-13" },
+    { "CP923",  "ISO-8859-15" },
+    { "CP954",  "EUC-JP" },
+    { "CP964",  "EUC-TW" },
+    { "CP970",  "EUC-KR" }
+#   define alias_table_defined
+#  endif
+#  if defined VMS                                           /* OpenVMS */
+    /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
+       "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
+       section 10.7 "Handling Different Character Sets".  */
+    { "DECHANYU",  "DEC-HANYU" },
+    { "DECHANZI",  "GB2312" },
+    { "DECKANJI",  "DEC-KANJI" },
+    { "DECKOREAN", "EUC-KR" },
+    { "ISO8859-1", "ISO-8859-1" },
+    { "ISO8859-2", "ISO-8859-2" },
+    { "ISO8859-5", "ISO-8859-5" },
+    { "ISO8859-7", "ISO-8859-7" },
+    { "ISO8859-8", "ISO-8859-8" },
+    { "ISO8859-9", "ISO-8859-9" },
+    { "SDECKANJI", "EUC-JP" },
+    { "SJIS",      "SHIFT_JIS" },
+    { "eucJP",     "EUC-JP" },
+    { "eucTW",     "EUC-TW" }
+#   define alias_table_defined
+#  endif
+#  ifndef alias_table_defined
+    /* Just a dummy entry, to avoid a C syntax error.  */
+    { "", "" }
+#  endif
+  };
+
+# endif
+
+#else
+
+/* On these platforms, we use a mapping from locale name to GNU canonical
+   encoding name.  */
+
+struct table_entry
+{
+  const char locale[17+1];
+  const char canonical[11+1];
+};
+
+/* Table of platform-dependent mappings, sorted in ascending order.  */
+static const struct table_entry locale_table[] =
+  {
+# if defined __FreeBSD__                                    /* FreeBSD 4.2 */
+    { "cs_CZ.ISO_8859-2",  "ISO-8859-2" },
+    { "da_DK.DIS_8859-15", "ISO-8859-15" },
+    { "da_DK.ISO_8859-1",  "ISO-8859-1" },
+    { "de_AT.DIS_8859-15", "ISO-8859-15" },
+    { "de_AT.ISO_8859-1",  "ISO-8859-1" },
+    { "de_CH.DIS_8859-15", "ISO-8859-15" },
+    { "de_CH.ISO_8859-1",  "ISO-8859-1" },
+    { "de_DE.DIS_8859-15", "ISO-8859-15" },
+    { "de_DE.ISO_8859-1",  "ISO-8859-1" },
+    { "en_AU.DIS_8859-15", "ISO-8859-15" },
+    { "en_AU.ISO_8859-1",  "ISO-8859-1" },
+    { "en_CA.DIS_8859-15", "ISO-8859-15" },
+    { "en_CA.ISO_8859-1",  "ISO-8859-1" },
+    { "en_GB.DIS_8859-15", "ISO-8859-15" },
+    { "en_GB.ISO_8859-1",  "ISO-8859-1" },
+    { "en_US.DIS_8859-15", "ISO-8859-15" },
+    { "en_US.ISO_8859-1",  "ISO-8859-1" },
+    { "es_ES.DIS_8859-15", "ISO-8859-15" },
+    { "es_ES.ISO_8859-1",  "ISO-8859-1" },
+    { "fi_FI.DIS_8859-15", "ISO-8859-15" },
+    { "fi_FI.ISO_8859-1",  "ISO-8859-1" },
+    { "fr_BE.DIS_8859-15", "ISO-8859-15" },
+    { "fr_BE.ISO_8859-1",  "ISO-8859-1" },
+    { "fr_CA.DIS_8859-15", "ISO-8859-15" },
+    { "fr_CA.ISO_8859-1",  "ISO-8859-1" },
+    { "fr_CH.DIS_8859-15", "ISO-8859-15" },
+    { "fr_CH.ISO_8859-1",  "ISO-8859-1" },
+    { "fr_FR.DIS_8859-15", "ISO-8859-15" },
+    { "fr_FR.ISO_8859-1",  "ISO-8859-1" },
+    { "hr_HR.ISO_8859-2",  "ISO-8859-2" },
+    { "hu_HU.ISO_8859-2",  "ISO-8859-2" },
+    { "is_IS.DIS_8859-15", "ISO-8859-15" },
+    { "is_IS.ISO_8859-1",  "ISO-8859-1" },
+    { "it_CH.DIS_8859-15", "ISO-8859-15" },
+    { "it_CH.ISO_8859-1",  "ISO-8859-1" },
+    { "it_IT.DIS_8859-15", "ISO-8859-15" },
+    { "it_IT.ISO_8859-1",  "ISO-8859-1" },
+    { "ja_JP.EUC",         "EUC-JP" },
+    { "ja_JP.SJIS",        "SHIFT_JIS" },
+    { "ja_JP.Shift_JIS",   "SHIFT_JIS" },
+    { "ko_KR.EUC",         "EUC-KR" },
+    { "la_LN.ASCII",       "ASCII" },
+    { "la_LN.DIS_8859-15", "ISO-8859-15" },
+    { "la_LN.ISO_8859-1",  "ISO-8859-1" },
+    { "la_LN.ISO_8859-2",  "ISO-8859-2" },
+    { "la_LN.ISO_8859-4",  "ISO-8859-4" },
+    { "lt_LN.ASCII",       "ASCII" },
+    { "lt_LN.DIS_8859-15", "ISO-8859-15" },
+    { "lt_LN.ISO_8859-1",  "ISO-8859-1" },
+    { "lt_LN.ISO_8859-2",  "ISO-8859-2" },
+    { "lt_LT.ISO_8859-4",  "ISO-8859-4" },
+    { "nl_BE.DIS_8859-15", "ISO-8859-15" },
+    { "nl_BE.ISO_8859-1",  "ISO-8859-1" },
+    { "nl_NL.DIS_8859-15", "ISO-8859-15" },
+    { "nl_NL.ISO_8859-1",  "ISO-8859-1" },
+    { "no_NO.DIS_8859-15", "ISO-8859-15" },
+    { "no_NO.ISO_8859-1",  "ISO-8859-1" },
+    { "pl_PL.ISO_8859-2",  "ISO-8859-2" },
+    { "pt_PT.DIS_8859-15", "ISO-8859-15" },
+    { "pt_PT.ISO_8859-1",  "ISO-8859-1" },
+    { "ru_RU.CP866",       "CP866" },
+    { "ru_RU.ISO_8859-5",  "ISO-8859-5" },
+    { "ru_RU.KOI8-R",      "KOI8-R" },
+    { "ru_SU.CP866",       "CP866" },
+    { "ru_SU.ISO_8859-5",  "ISO-8859-5" },
+    { "ru_SU.KOI8-R",      "KOI8-R" },
+    { "sl_SI.ISO_8859-2",  "ISO-8859-2" },
+    { "sv_SE.DIS_8859-15", "ISO-8859-15" },
+    { "sv_SE.ISO_8859-1",  "ISO-8859-1" },
+    { "uk_UA.KOI8-U",      "KOI8-U" },
+    { "zh_CN.EUC",         "GB2312" },
+    { "zh_TW.BIG5",        "BIG5" },
+    { "zh_TW.Big5",        "BIG5" }
+#  define locale_table_defined
+# endif
+# if defined __DJGPP__                                      /* DOS / DJGPP 2.03 */
+    /* The encodings given here may not all be correct.
+       If you find that the encoding given for your language and
+       country is not the one your DOS machine actually uses, just
+       correct it in this file, and send a mail to
+       Juan Manuel Guerrero <juan.guerrero@gmx.de>
+       and <bug-gnulib@gnu.org>.  */
+    { "C",     "ASCII" },
+    { "ar",    "CP864" },
+    { "ar_AE", "CP864" },
+    { "ar_DZ", "CP864" },
+    { "ar_EG", "CP864" },
+    { "ar_IQ", "CP864" },
+    { "ar_IR", "CP864" },
+    { "ar_JO", "CP864" },
+    { "ar_KW", "CP864" },
+    { "ar_MA", "CP864" },
+    { "ar_OM", "CP864" },
+    { "ar_QA", "CP864" },
+    { "ar_SA", "CP864" },
+    { "ar_SY", "CP864" },
+    { "be",    "CP866" },
+    { "be_BE", "CP866" },
+    { "bg",    "CP866" }, /* not CP855 ?? */
+    { "bg_BG", "CP866" }, /* not CP855 ?? */
+    { "ca",    "CP850" },
+    { "ca_ES", "CP850" },
+    { "cs",    "CP852" },
+    { "cs_CZ", "CP852" },
+    { "da",    "CP865" }, /* not CP850 ?? */
+    { "da_DK", "CP865" }, /* not CP850 ?? */
+    { "de",    "CP850" },
+    { "de_AT", "CP850" },
+    { "de_CH", "CP850" },
+    { "de_DE", "CP850" },
+    { "el",    "CP869" },
+    { "el_GR", "CP869" },
+    { "en",    "CP850" },
+    { "en_AU", "CP850" }, /* not CP437 ?? */
+    { "en_CA", "CP850" },
+    { "en_GB", "CP850" },
+    { "en_NZ", "CP437" },
+    { "en_US", "CP437" },
+    { "en_ZA", "CP850" }, /* not CP437 ?? */
+    { "eo",    "CP850" },
+    { "eo_EO", "CP850" },
+    { "es",    "CP850" },
+    { "es_AR", "CP850" },
+    { "es_BO", "CP850" },
+    { "es_CL", "CP850" },
+    { "es_CO", "CP850" },
+    { "es_CR", "CP850" },
+    { "es_CU", "CP850" },
+    { "es_DO", "CP850" },
+    { "es_EC", "CP850" },
+    { "es_ES", "CP850" },
+    { "es_GT", "CP850" },
+    { "es_HN", "CP850" },
+    { "es_MX", "CP850" },
+    { "es_NI", "CP850" },
+    { "es_PA", "CP850" },
+    { "es_PE", "CP850" },
+    { "es_PY", "CP850" },
+    { "es_SV", "CP850" },
+    { "es_UY", "CP850" },
+    { "es_VE", "CP850" },
+    { "et",    "CP850" },
+    { "et_EE", "CP850" },
+    { "eu",    "CP850" },
+    { "eu_ES", "CP850" },
+    { "fi",    "CP850" },
+    { "fi_FI", "CP850" },
+    { "fr",    "CP850" },
+    { "fr_BE", "CP850" },
+    { "fr_CA", "CP850" },
+    { "fr_CH", "CP850" },
+    { "fr_FR", "CP850" },
+    { "ga",    "CP850" },
+    { "ga_IE", "CP850" },
+    { "gd",    "CP850" },
+    { "gd_GB", "CP850" },
+    { "gl",    "CP850" },
+    { "gl_ES", "CP850" },
+    { "he",    "CP862" },
+    { "he_IL", "CP862" },
+    { "hr",    "CP852" },
+    { "hr_HR", "CP852" },
+    { "hu",    "CP852" },
+    { "hu_HU", "CP852" },
+    { "id",    "CP850" }, /* not CP437 ?? */
+    { "id_ID", "CP850" }, /* not CP437 ?? */
+    { "is",    "CP861" }, /* not CP850 ?? */
+    { "is_IS", "CP861" }, /* not CP850 ?? */
+    { "it",    "CP850" },
+    { "it_CH", "CP850" },
+    { "it_IT", "CP850" },
+    { "ja",    "CP932" },
+    { "ja_JP", "CP932" },
+    { "kr",    "CP949" }, /* not CP934 ?? */
+    { "kr_KR", "CP949" }, /* not CP934 ?? */
+    { "lt",    "CP775" },
+    { "lt_LT", "CP775" },
+    { "lv",    "CP775" },
+    { "lv_LV", "CP775" },
+    { "mk",    "CP866" }, /* not CP855 ?? */
+    { "mk_MK", "CP866" }, /* not CP855 ?? */
+    { "mt",    "CP850" },
+    { "mt_MT", "CP850" },
+    { "nb",    "CP865" }, /* not CP850 ?? */
+    { "nb_NO", "CP865" }, /* not CP850 ?? */
+    { "nl",    "CP850" },
+    { "nl_BE", "CP850" },
+    { "nl_NL", "CP850" },
+    { "nn",    "CP865" }, /* not CP850 ?? */
+    { "nn_NO", "CP865" }, /* not CP850 ?? */
+    { "no",    "CP865" }, /* not CP850 ?? */
+    { "no_NO", "CP865" }, /* not CP850 ?? */
+    { "pl",    "CP852" },
+    { "pl_PL", "CP852" },
+    { "pt",    "CP850" },
+    { "pt_BR", "CP850" },
+    { "pt_PT", "CP850" },
+    { "ro",    "CP852" },
+    { "ro_RO", "CP852" },
+    { "ru",    "CP866" },
+    { "ru_RU", "CP866" },
+    { "sk",    "CP852" },
+    { "sk_SK", "CP852" },
+    { "sl",    "CP852" },
+    { "sl_SI", "CP852" },
+    { "sq",    "CP852" },
+    { "sq_AL", "CP852" },
+    { "sr",    "CP852" }, /* CP852 or CP866 or CP855 ?? */
+    { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */
+    { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */
+    { "sv",    "CP850" },
+    { "sv_SE", "CP850" },
+    { "th",    "CP874" },
+    { "th_TH", "CP874" },
+    { "tr",    "CP857" },
+    { "tr_TR", "CP857" },
+    { "uk",    "CP1125" },
+    { "uk_UA", "CP1125" },
+    { "zh_CN", "GBK" },
+    { "zh_TW", "CP950" } /* not CP938 ?? */
+#  define locale_table_defined
+# endif
+# ifndef locale_table_defined
+    /* Just a dummy entry, to avoid a C syntax error.  */
+    { "", "" }
+# endif
+  };
+
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed in localcharset.h.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+
+#ifdef STATIC
+STATIC
+#endif
+const char *
+locale_charset (void)
+{
+  const char *codeset;
+
+#if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2
+
+# if HAVE_LANGINFO_CODESET
+
+  /* Most systems support nl_langinfo (CODESET) nowadays.  */
+  codeset = nl_langinfo (CODESET);
+
+#  ifdef __CYGWIN__
+  /* Cygwin < 1.7 does not have locales.  nl_langinfo (CODESET) always
+     returns "US-ASCII".  Return the suffix of the locale name from the
+     environment variables (if present) or the codepage as a number.  */
+  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
+    {
+      const char *locale;
+      static char buf[2 + 10 + 1];
+
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+        {
+          locale = getenv ("LC_CTYPE");
+          if (locale == NULL || locale[0] == '\0')
+            locale = getenv ("LANG");
+        }
+      if (locale != NULL && locale[0] != '\0')
+        {
+          /* If the locale name contains an encoding after the dot, return
+             it.  */
+          const char *dot = strchr (locale, '.');
+
+          if (dot != NULL)
+            {
+              const char *modifier;
+
+              dot++;
+              /* Look for the possible @... trailer and remove it, if any.  */
+              modifier = strchr (dot, '@');
+              if (modifier == NULL)
+                return dot;
+              if (modifier - dot < sizeof (buf))
+                {
+                  memcpy (buf, dot, modifier - dot);
+                  buf [modifier - dot] = '\0';
+                  return buf;
+                }
+            }
+        }
+
+      /* The Windows API has a function returning the locale's codepage as a
+         number: GetACP().  This encoding is used by Cygwin, unless the user
+         has set the environment variable CYGWIN=codepage:oem (which very few
+         people do).
+         Output directed to console windows needs to be converted (to
+         GetOEMCP() if the console is using a raster font, or to
+         GetConsoleOutputCP() if it is using a TrueType font).  Cygwin does
+         this conversion transparently (see winsup/cygwin/fhandler_console.cc),
+         converting to GetConsoleOutputCP().  This leads to correct results,
+         except when SetConsoleOutputCP has been called and a raster font is
+         in use.  */
+      sprintf (buf, "CP%u", GetACP ());
+      codeset = buf;
+    }
+#  endif
+
+  if (codeset == NULL)
+    /* The canonical name cannot be determined.  */
+    codeset = "";
+
+# elif defined WINDOWS_NATIVE
+
+  static char buf[2 + 10 + 1];
+
+  /* The Windows API has a function returning the locale's codepage as
+     a number, but the value doesn't change according to what the
+     'setlocale' call specified.  So we use it as a last resort, in
+     case the string returned by 'setlocale' doesn't specify the
+     codepage.  */
+  char *current_locale = setlocale (LC_ALL, NULL);
+  char *pdot;
+
+  /* If they set different locales for different categories,
+     'setlocale' will return a semi-colon separated list of locale
+     values.  To make sure we use the correct one, we choose LC_CTYPE.  */
+  if (strchr (current_locale, ';'))
+    current_locale = setlocale (LC_CTYPE, NULL);
+
+  pdot = strrchr (current_locale, '.');
+  if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf))
+    sprintf (buf, "CP%s", pdot + 1);
+  else
+    {
+      /* The Windows API has a function returning the locale's codepage as a
+        number: GetACP().
+        When the output goes to a console window, it needs to be provided in
+        GetOEMCP() encoding if the console is using a raster font, or in
+        GetConsoleOutputCP() encoding if it is using a TrueType font.
+        But in GUI programs and for output sent to files and pipes, GetACP()
+        encoding is the best bet.  */
+      sprintf (buf, "CP%u", GetACP ());
+    }
+  codeset = buf;
+
+# elif defined OS2
+
+  const char *locale;
+  static char buf[2 + 10 + 1];
+  ULONG cp[3];
+  ULONG cplen;
+
+  codeset = NULL;
+
+  /* Allow user to override the codeset, as set in the operating system,
+     with standard language environment variables.  */
+  locale = getenv ("LC_ALL");
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_CTYPE");
+      if (locale == NULL || locale[0] == '\0')
+        locale = getenv ("LANG");
+    }
+  if (locale != NULL && locale[0] != '\0')
+    {
+      /* If the locale name contains an encoding after the dot, return it.  */
+      const char *dot = strchr (locale, '.');
+
+      if (dot != NULL)
+        {
+          const char *modifier;
+
+          dot++;
+          /* Look for the possible @... trailer and remove it, if any.  */
+          modifier = strchr (dot, '@');
+          if (modifier == NULL)
+            return dot;
+          if (modifier - dot < sizeof (buf))
+            {
+              memcpy (buf, dot, modifier - dot);
+              buf [modifier - dot] = '\0';
+              return buf;
+            }
+        }
+
+      /* For the POSIX locale, don't use the system's codepage.  */
+      if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0)
+        codeset = "";
+    }
+
+  if (codeset == NULL)
+    {
+      /* OS/2 has a function returning the locale's codepage as a number.  */
+      if (DosQueryCp (sizeof (cp), cp, &cplen))
+        codeset = "";
+      else
+        {
+          sprintf (buf, "CP%u", cp[0]);
+          codeset = buf;
+        }
+    }
+
+# else
+
+#  error "Add code for other platforms here."
+
+# endif
+
+  /* Resolve alias.  */
+  {
+# ifdef alias_table_defined
+    /* On some platforms, UTF-8 locales are the most frequently used ones.
+       Speed up the common case and slow down the less common cases by
+       testing for this case first.  */
+#  if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__
+    if (strcmp (codeset, "UTF-8") == 0)
+      goto done_table_lookup;
+    else
+#  endif
+      {
+        const struct table_entry * const table = alias_table;
+        size_t const table_size =
+          sizeof (alias_table) / sizeof (struct table_entry);
+        /* The table is sorted.  Perform a binary search.  */
+        size_t hi = table_size;
+        size_t lo = 0;
+        while (lo < hi)
+          {
+            /* Invariant:
+               for i < lo, strcmp (table[i].alias, codeset) < 0,
+               for i >= hi, strcmp (table[i].alias, codeset) > 0.  */
+            size_t mid = (hi + lo) >> 1; /* >= lo, < hi */
+            int cmp = strcmp (table[mid].alias, codeset);
+            if (cmp < 0)
+              lo = mid + 1;
+            else if (cmp > 0)
+              hi = mid;
+            else
+              {
+                /* Found an i with
+                     strcmp (table[i].alias, codeset) == 0.  */
+                codeset = table[mid].canonical;
+                goto done_table_lookup;
+              }
+          }
+      }
+    if (0)
+      done_table_lookup: ;
+    else
+# endif
+      {
+        /* Did not find it in the table.  */
+        /* On Mac OS X, all modern locales use the UTF-8 encoding.
+           BeOS and Haiku have a single locale, and it has UTF-8 encoding.  */
+# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__
+        codeset = "UTF-8";
+# else
+        /* Don't return an empty string.  GNU libc and GNU libiconv interpret
+           the empty string as denoting "the locale's character encoding",
+           thus GNU libiconv would call this function a second time.  */
+        if (codeset[0] == '\0')
+          codeset = "ASCII";
+# endif
+      }
+  }
+
+#else
+
+  /* On old systems which lack it, use setlocale or getenv.  */
+  const char *locale = NULL;
+
+  /* But most old systems don't have a complete set of locales.  Some
+     (like DJGPP) have only the C locale.  Therefore we don't use setlocale
+     here; it would return "C" when it doesn't support the locale name the
+     user has set.  */
+# if 0
+  locale = setlocale (LC_CTYPE, NULL);
+# endif
+  if (locale == NULL || locale[0] == '\0')
+    {
+      locale = getenv ("LC_ALL");
+      if (locale == NULL || locale[0] == '\0')
+        {
+          locale = getenv ("LC_CTYPE");
+          if (locale == NULL || locale[0] == '\0')
+            locale = getenv ("LANG");
+            if (locale == NULL)
+              locale = "";
+        }
+    }
+
+  /* Map locale name to canonical encoding name.  */
+  {
+# ifdef locale_table_defined
+    const struct table_entry * const table = locale_table;
+    size_t const table_size =
+      sizeof (locale_table) / sizeof (struct table_entry);
+    /* The table is sorted.  Perform a binary search.  */
+    size_t hi = table_size;
+    size_t lo = 0;
+    while (lo < hi)
+      {
+        /* Invariant:
+           for i < lo, strcmp (table[i].locale, locale) < 0,
+           for i >= hi, strcmp (table[i].locale, locale) > 0.  */
+        size_t mid = (hi + lo) >> 1; /* >= lo, < hi */
+        int cmp = strcmp (table[mid].locale, locale);
+        if (cmp < 0)
+          lo = mid + 1;
+        else if (cmp > 0)
+          hi = mid;
+        else
+          {
+            /* Found an i with
+                 strcmp (table[i].locale, locale) == 0.  */
+            codeset = table[mid].canonical;
+            goto done_table_lookup;
+          }
+      }
+    if (0)
+      done_table_lookup: ;
+    else
+# endif
+      {
+        /* Did not find it in the table.  */
+        /* On Mac OS X, all modern locales use the UTF-8 encoding.
+           BeOS and Haiku have a single locale, and it has UTF-8 encoding.  */
+# if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__
+        codeset = "UTF-8";
+# else
+        /* The canonical name cannot be determined.  */
+        /* Don't return an empty string.  GNU libc and GNU libiconv interpret
+           the empty string as denoting "the locale's character encoding",
+           thus GNU libiconv would call this function a second time.  */
+        codeset = "ASCII";
+# endif
+      }
+  }
+
+#endif
+
+#ifdef DARWIN7
+  /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8"
+     (the default codeset) does not work when MB_CUR_MAX is 1.  */
+  if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1)
+    codeset = "ASCII";
+#endif
+
+  return codeset;
+}
diff --git a/lib/localcharset.h b/lib/localcharset.h
new file mode 100644 (file)
index 0000000..e4ba296
--- /dev/null
@@ -0,0 +1,134 @@
+/* Determine a canonical name for the current locale's character encoding.
+   Copyright (C) 2000-2003, 2009-2018 Free Software Foundation, Inc.
+   This file is part of the GNU CHARSET Library.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _LOCALCHARSET_H
+#define _LOCALCHARSET_H
+
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Determine the current locale's character encoding, and canonicalize it
+   into one of the canonical names listed below.
+   The result must not be freed; it is statically allocated.
+   If the canonical name cannot be determined, the result is a non-canonical
+   name.  */
+extern const char * locale_charset (void);
+
+/* About GNU canonical names for character encodings:
+
+   Every canonical name must be supported by GNU libiconv.  Support by GNU libc
+   is also desirable.
+
+   The name is case insensitive.  Usually an upper case MIME charset name is
+   preferred.
+
+   The current list of these GNU canonical names is:
+
+       name              MIME?             used by which systems
+                                    (darwin = Mac OS X, windows = native Windows)
+
+   ASCII, ANSI_X3.4-1968       glibc solaris freebsd netbsd darwin minix cygwin
+   ISO-8859-1              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
+   ISO-8859-2              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
+   ISO-8859-3              Y   glibc solaris cygwin
+   ISO-8859-4              Y   hpux osf solaris freebsd netbsd openbsd darwin
+   ISO-8859-5              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
+   ISO-8859-6              Y   glibc aix hpux solaris cygwin
+   ISO-8859-7              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
+   ISO-8859-8              Y   glibc aix hpux osf solaris cygwin
+   ISO-8859-9              Y   glibc aix hpux irix osf solaris freebsd darwin cygwin
+   ISO-8859-13                 glibc hpux solaris freebsd netbsd openbsd darwin cygwin
+   ISO-8859-14                 glibc cygwin
+   ISO-8859-15                 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin
+   KOI8-R                  Y   glibc hpux solaris freebsd netbsd openbsd darwin
+   KOI8-U                  Y   glibc freebsd netbsd openbsd darwin cygwin
+   KOI8-T                      glibc
+   CP437                       dos
+   CP775                       dos
+   CP850                       aix osf dos
+   CP852                       dos
+   CP855                       dos
+   CP856                       aix
+   CP857                       dos
+   CP861                       dos
+   CP862                       dos
+   CP864                       dos
+   CP865                       dos
+   CP866                       freebsd netbsd openbsd darwin dos
+   CP869                       dos
+   CP874                       windows dos
+   CP922                       aix
+   CP932                       aix cygwin windows dos
+   CP943                       aix
+   CP949                       osf darwin windows dos
+   CP950                       windows dos
+   CP1046                      aix
+   CP1124                      aix
+   CP1125                      dos
+   CP1129                      aix
+   CP1131                      freebsd darwin
+   CP1250                      windows
+   CP1251                      glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows
+   CP1252                      aix windows
+   CP1253                      windows
+   CP1254                      windows
+   CP1255                      glibc windows
+   CP1256                      windows
+   CP1257                      windows
+   GB2312                  Y   glibc aix hpux irix solaris freebsd netbsd darwin cygwin
+   EUC-JP                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin
+   EUC-KR                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin
+   EUC-TW                      glibc aix hpux irix osf solaris netbsd
+   BIG5                    Y   glibc aix hpux osf solaris freebsd netbsd darwin cygwin
+   BIG5-HKSCS                  glibc hpux solaris netbsd darwin
+   GBK                         glibc aix osf solaris freebsd darwin cygwin windows dos
+   GB18030                     glibc hpux solaris freebsd netbsd darwin
+   SHIFT_JIS               Y   hpux osf solaris freebsd netbsd darwin
+   JOHAB                       glibc solaris windows
+   TIS-620                     glibc aix hpux osf solaris cygwin
+   VISCII                  Y   glibc
+   TCVN5712-1                  glibc
+   ARMSCII-8                   glibc freebsd netbsd darwin
+   GEORGIAN-PS                 glibc cygwin
+   PT154                       glibc netbsd cygwin
+   HP-ROMAN8                   hpux
+   HP-ARABIC8                  hpux
+   HP-GREEK8                   hpux
+   HP-HEBREW8                  hpux
+   HP-TURKISH8                 hpux
+   HP-KANA8                    hpux
+   DEC-KANJI                   osf
+   DEC-HANYU                   osf
+   UTF-8                   Y   glibc aix hpux osf solaris netbsd darwin cygwin
+
+   Note: Names which are not marked as being a MIME name should not be used in
+   Internet protocols for information interchange (mail, news, etc.).
+
+   Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names.  Applications
+   must understand both names and treat them as equivalent.
+ */
+
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* _LOCALCHARSET_H */
diff --git a/lib/math.c b/lib/math.c
new file mode 100644 (file)
index 0000000..ba2a6ab
--- /dev/null
@@ -0,0 +1,4 @@
+#include <config.h>
+#define _GL_MATH_INLINE _GL_EXTERN_INLINE
+#include "math.h"
+typedef int dummy;
diff --git a/lib/math.in.h b/lib/math.in.h
new file mode 100644 (file)
index 0000000..c30fc20
--- /dev/null
@@ -0,0 +1,2417 @@
+/* A GNU-like <math.h>.
+
+   Copyright (C) 2002-2003, 2007-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _@GUARD_PREFIX@_MATH_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@
+
+#ifndef _@GUARD_PREFIX@_MATH_H
+#define _@GUARD_PREFIX@_MATH_H
+
+/* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in <fp.h>.  */
+#if defined __VMS && ! defined NAN
+# include <fp.h>
+#endif
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_MATH_INLINE
+# define _GL_MATH_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+#ifdef __cplusplus
+/* Helper macros to define type-generic function FUNC as overloaded functions,
+   rather than as macros like in C.  POSIX declares these with an argument of
+   real-floating (that is, one of float, double, or long double).  */
+# define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \
+static inline int                                                   \
+_gl_cxx_ ## func ## f (float f)                                     \
+{                                                                   \
+  return func (f);                                                  \
+}                                                                   \
+static inline int                                                   \
+_gl_cxx_ ## func ## d (double d)                                    \
+{                                                                   \
+  return func (d);                                                  \
+}                                                                   \
+static inline int                                                   \
+_gl_cxx_ ## func ## l (long double l)                               \
+{                                                                   \
+  return func (l);                                                  \
+}
+# define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func) \
+_GL_BEGIN_NAMESPACE                                                 \
+inline int                                                          \
+func (float f)                                                      \
+{                                                                   \
+  return _gl_cxx_ ## func ## f (f);                                 \
+}                                                                   \
+inline int                                                          \
+func (double d)                                                     \
+{                                                                   \
+  return _gl_cxx_ ## func ## d (d);                                 \
+}                                                                   \
+inline int                                                          \
+func (long double l)                                                \
+{                                                                   \
+  return _gl_cxx_ ## func ## l (l);                                 \
+}                                                                   \
+_GL_END_NAMESPACE
+#endif
+
+/* Helper macros to define a portability warning for the
+   classification macro FUNC called with VALUE.  POSIX declares the
+   classification macros with an argument of real-floating (that is,
+   one of float, double, or long double).  */
+#define _GL_WARN_REAL_FLOATING_DECL(func) \
+_GL_MATH_INLINE int                                                       \
+_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - "                      \
+                           "use gnulib module " #func " for portability") \
+rpl_ ## func ## f (float f)                                               \
+{                                                                         \
+  return func (f);                                                        \
+}                                                                         \
+_GL_MATH_INLINE int                                                       \
+_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - "                      \
+                           "use gnulib module " #func " for portability") \
+rpl_ ## func ## d (double d)                                              \
+{                                                                         \
+  return func (d);                                                        \
+}                                                                         \
+_GL_MATH_INLINE int                                                       \
+_GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - "                      \
+                           "use gnulib module " #func " for portability") \
+rpl_ ## func ## l (long double l)                                         \
+{                                                                         \
+  return func (l);                                                        \
+}
+#define _GL_WARN_REAL_FLOATING_IMPL(func, value) \
+  (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value)     \
+   : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value)  \
+   : rpl_ ## func ## l (value))
+
+
+#if @REPLACE_ITOLD@
+/* Pull in a function that fixes the 'int' to 'long double' conversion
+   of glibc 2.7.  */
+_GL_EXTERN_C void _Qp_itoq (long double *, int);
+static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq;
+#endif
+
+
+/* POSIX allows platforms that don't support NAN.  But all major
+   machines in the past 15 years have supported something close to
+   IEEE NaN, so we define this unconditionally.  We also must define
+   it on platforms like Solaris 10, where NAN is present but defined
+   as a function pointer rather than a floating point constant.  */
+#if !defined NAN || @REPLACE_NAN@
+# if !GNULIB_defined_NAN
+#  undef NAN
+  /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler
+     choke on the expression 0.0 / 0.0.  */
+#  if defined __DECC || defined _MSC_VER
+_GL_MATH_INLINE float
+_NaN ()
+{
+  static float zero = 0.0f;
+  return zero / zero;
+}
+#   define NAN (_NaN())
+#  else
+#   define NAN (0.0f / 0.0f)
+#  endif
+#  define GNULIB_defined_NAN 1
+# endif
+#endif
+
+/* Solaris 10 defines HUGE_VAL, but as a function pointer rather
+   than a floating point constant.  */
+#if @REPLACE_HUGE_VAL@
+# undef HUGE_VALF
+# define HUGE_VALF (1.0f / 0.0f)
+# undef HUGE_VAL
+# define HUGE_VAL (1.0 / 0.0)
+# undef HUGE_VALL
+# define HUGE_VALL (1.0L / 0.0L)
+#endif
+
+/* HUGE_VALF is a 'float' Infinity.  */
+#ifndef HUGE_VALF
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f.  */
+#  define HUGE_VALF (1e25f * 1e25f)
+# else
+#  define HUGE_VALF (1.0f / 0.0f)
+# endif
+#endif
+
+/* HUGE_VAL is a 'double' Infinity.  */
+#ifndef HUGE_VAL
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0.  */
+#  define HUGE_VAL (1e250 * 1e250)
+# else
+#  define HUGE_VAL (1.0 / 0.0)
+# endif
+#endif
+
+/* HUGE_VALL is a 'long double' Infinity.  */
+#ifndef HUGE_VALL
+# if defined _MSC_VER
+/* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L.  */
+#  define HUGE_VALL (1e250L * 1e250L)
+# else
+#  define HUGE_VALL (1.0L / 0.0L)
+# endif
+#endif
+
+
+#if defined FP_ILOGB0 && defined FP_ILOGBNAN
+ /* Ensure FP_ILOGB0 and FP_ILOGBNAN are correct.  */
+# if defined __HAIKU__
+  /* Haiku: match what ilogb() does */
+#  undef FP_ILOGB0
+#  undef FP_ILOGBNAN
+#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
+#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
+# endif
+#else
+ /* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined.  */
+# if defined __NetBSD__ || defined __sgi
+  /* NetBSD, IRIX 6.5: match what ilogb() does */
+#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
+#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
+# elif defined _AIX
+  /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */
+#  define FP_ILOGB0   (- 2147483647 - 1) /* INT_MIN */
+#  define FP_ILOGBNAN 2147483647 /* INT_MAX */
+# elif defined __sun
+  /* Solaris 9: match what ilogb() does */
+#  define FP_ILOGB0   (- 2147483647) /* - INT_MAX */
+#  define FP_ILOGBNAN 2147483647 /* INT_MAX */
+# else
+  /* Gnulib defined values.  */
+#  define FP_ILOGB0   (- 2147483647) /* - INT_MAX */
+#  define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */
+# endif
+#endif
+
+
+#if @GNULIB_ACOSF@
+# if @REPLACE_ACOSF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef acosf
+#   define acosf rpl_acosf
+#  endif
+_GL_FUNCDECL_RPL (acosf, float, (float x));
+_GL_CXXALIAS_RPL (acosf, float, (float x));
+# else
+#  if !@HAVE_ACOSF@
+#   undef acosf
+_GL_FUNCDECL_SYS (acosf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (acosf, float, (float x));
+# endif
+_GL_CXXALIASWARN (acosf);
+#elif defined GNULIB_POSIXCHECK
+# undef acosf
+# if HAVE_RAW_DECL_ACOSF
+_GL_WARN_ON_USE (acosf, "acosf is unportable - "
+                 "use gnulib module acosf for portability");
+# endif
+#endif
+
+#if @GNULIB_ACOSL@
+# if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@
+#  undef acosl
+_GL_FUNCDECL_SYS (acosl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (acosl, long double, (long double x));
+_GL_CXXALIASWARN (acosl);
+#elif defined GNULIB_POSIXCHECK
+# undef acosl
+# if HAVE_RAW_DECL_ACOSL
+_GL_WARN_ON_USE (acosl, "acosl is unportable - "
+                 "use gnulib module acosl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ASINF@
+# if @REPLACE_ASINF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef asinf
+#   define asinf rpl_asinf
+#  endif
+_GL_FUNCDECL_RPL (asinf, float, (float x));
+_GL_CXXALIAS_RPL (asinf, float, (float x));
+# else
+#  if !@HAVE_ASINF@
+#   undef asinf
+_GL_FUNCDECL_SYS (asinf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (asinf, float, (float x));
+# endif
+_GL_CXXALIASWARN (asinf);
+#elif defined GNULIB_POSIXCHECK
+# undef asinf
+# if HAVE_RAW_DECL_ASINF
+_GL_WARN_ON_USE (asinf, "asinf is unportable - "
+                 "use gnulib module asinf for portability");
+# endif
+#endif
+
+#if @GNULIB_ASINL@
+# if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@
+#  undef asinl
+_GL_FUNCDECL_SYS (asinl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (asinl, long double, (long double x));
+_GL_CXXALIASWARN (asinl);
+#elif defined GNULIB_POSIXCHECK
+# undef asinl
+# if HAVE_RAW_DECL_ASINL
+_GL_WARN_ON_USE (asinl, "asinl is unportable - "
+                 "use gnulib module asinl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ATANF@
+# if @REPLACE_ATANF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef atanf
+#   define atanf rpl_atanf
+#  endif
+_GL_FUNCDECL_RPL (atanf, float, (float x));
+_GL_CXXALIAS_RPL (atanf, float, (float x));
+# else
+#  if !@HAVE_ATANF@
+#   undef atanf
+_GL_FUNCDECL_SYS (atanf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (atanf, float, (float x));
+# endif
+_GL_CXXALIASWARN (atanf);
+#elif defined GNULIB_POSIXCHECK
+# undef atanf
+# if HAVE_RAW_DECL_ATANF
+_GL_WARN_ON_USE (atanf, "atanf is unportable - "
+                 "use gnulib module atanf for portability");
+# endif
+#endif
+
+#if @GNULIB_ATANL@
+# if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@
+#  undef atanl
+_GL_FUNCDECL_SYS (atanl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (atanl, long double, (long double x));
+_GL_CXXALIASWARN (atanl);
+#elif defined GNULIB_POSIXCHECK
+# undef atanl
+# if HAVE_RAW_DECL_ATANL
+_GL_WARN_ON_USE (atanl, "atanl is unportable - "
+                 "use gnulib module atanl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ATAN2F@
+# if @REPLACE_ATAN2F@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef atan2f
+#   define atan2f rpl_atan2f
+#  endif
+_GL_FUNCDECL_RPL (atan2f, float, (float y, float x));
+_GL_CXXALIAS_RPL (atan2f, float, (float y, float x));
+# else
+#  if !@HAVE_ATAN2F@
+#   undef atan2f
+_GL_FUNCDECL_SYS (atan2f, float, (float y, float x));
+#  endif
+_GL_CXXALIAS_SYS (atan2f, float, (float y, float x));
+# endif
+_GL_CXXALIASWARN (atan2f);
+#elif defined GNULIB_POSIXCHECK
+# undef atan2f
+# if HAVE_RAW_DECL_ATAN2F
+_GL_WARN_ON_USE (atan2f, "atan2f is unportable - "
+                 "use gnulib module atan2f for portability");
+# endif
+#endif
+
+
+#if @GNULIB_CBRTF@
+# if @REPLACE_CBRTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef cbrtf
+#   define cbrtf rpl_cbrtf
+#  endif
+_GL_FUNCDECL_RPL (cbrtf, float, (float x));
+_GL_CXXALIAS_RPL (cbrtf, float, (float x));
+# else
+#  if !@HAVE_DECL_CBRTF@
+_GL_FUNCDECL_SYS (cbrtf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (cbrtf, float, (float x));
+# endif
+_GL_CXXALIASWARN (cbrtf);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrtf
+# if HAVE_RAW_DECL_CBRTF
+_GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - "
+                 "use gnulib module cbrtf for portability");
+# endif
+#endif
+
+#if @GNULIB_CBRT@
+# if !@HAVE_CBRT@
+_GL_FUNCDECL_SYS (cbrt, double, (double x));
+# endif
+_GL_CXXALIAS_SYS (cbrt, double, (double x));
+_GL_CXXALIASWARN (cbrt);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrt
+# if HAVE_RAW_DECL_CBRT
+_GL_WARN_ON_USE (cbrt, "cbrt is unportable - "
+                 "use gnulib module cbrt for portability");
+# endif
+#endif
+
+#if @GNULIB_CBRTL@
+# if @REPLACE_CBRTL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef cbrtl
+#   define cbrtl rpl_cbrtl
+#  endif
+_GL_FUNCDECL_RPL (cbrtl, long double, (long double x));
+_GL_CXXALIAS_RPL (cbrtl, long double, (long double x));
+# else
+#  if !@HAVE_DECL_CBRTL@
+_GL_FUNCDECL_SYS (cbrtl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (cbrtl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (cbrtl);
+#elif defined GNULIB_POSIXCHECK
+# undef cbrtl
+# if HAVE_RAW_DECL_CBRTL
+_GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - "
+                 "use gnulib module cbrtl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_CEILF@
+# if @REPLACE_CEILF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ceilf
+#   define ceilf rpl_ceilf
+#  endif
+_GL_FUNCDECL_RPL (ceilf, float, (float x));
+_GL_CXXALIAS_RPL (ceilf, float, (float x));
+# else
+#  if !@HAVE_DECL_CEILF@
+#   undef ceilf
+_GL_FUNCDECL_SYS (ceilf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (ceilf, float, (float x));
+# endif
+_GL_CXXALIASWARN (ceilf);
+#elif defined GNULIB_POSIXCHECK
+# undef ceilf
+# if HAVE_RAW_DECL_CEILF
+_GL_WARN_ON_USE (ceilf, "ceilf is unportable - "
+                 "use gnulib module ceilf for portability");
+# endif
+#endif
+
+#if @GNULIB_CEIL@
+# if @REPLACE_CEIL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ceil
+#   define ceil rpl_ceil
+#  endif
+_GL_FUNCDECL_RPL (ceil, double, (double x));
+_GL_CXXALIAS_RPL (ceil, double, (double x));
+# else
+_GL_CXXALIAS_SYS (ceil, double, (double x));
+# endif
+_GL_CXXALIASWARN (ceil);
+#endif
+
+#if @GNULIB_CEILL@
+# if @REPLACE_CEILL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ceill
+#   define ceill rpl_ceill
+#  endif
+_GL_FUNCDECL_RPL (ceill, long double, (long double x));
+_GL_CXXALIAS_RPL (ceill, long double, (long double x));
+# else
+#  if !@HAVE_DECL_CEILL@
+#   undef ceill
+_GL_FUNCDECL_SYS (ceill, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (ceill, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (ceill);
+#elif defined GNULIB_POSIXCHECK
+# undef ceill
+# if HAVE_RAW_DECL_CEILL
+_GL_WARN_ON_USE (ceill, "ceill is unportable - "
+                 "use gnulib module ceill for portability");
+# endif
+#endif
+
+
+#if @GNULIB_COPYSIGNF@
+# if !@HAVE_DECL_COPYSIGNF@
+_GL_FUNCDECL_SYS (copysignf, float, (float x, float y));
+# endif
+_GL_CXXALIAS_SYS (copysignf, float, (float x, float y));
+_GL_CXXALIASWARN (copysignf);
+#elif defined GNULIB_POSIXCHECK
+# undef copysignf
+# if HAVE_RAW_DECL_COPYSIGNF
+_GL_WARN_ON_USE (copysignf, "copysignf is unportable - "
+                 "use gnulib module copysignf for portability");
+# endif
+#endif
+
+#if @GNULIB_COPYSIGN@
+# if !@HAVE_COPYSIGN@
+_GL_FUNCDECL_SYS (copysign, double, (double x, double y));
+# endif
+_GL_CXXALIAS_SYS (copysign, double, (double x, double y));
+_GL_CXXALIASWARN (copysign);
+#elif defined GNULIB_POSIXCHECK
+# undef copysign
+# if HAVE_RAW_DECL_COPYSIGN
+_GL_WARN_ON_USE (copysign, "copysign is unportable - "
+                 "use gnulib module copysign for portability");
+# endif
+#endif
+
+#if @GNULIB_COPYSIGNL@
+# if !@HAVE_COPYSIGNL@
+_GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y));
+_GL_CXXALIASWARN (copysignl);
+#elif defined GNULIB_POSIXCHECK
+# undef copysignl
+# if HAVE_RAW_DECL_COPYSIGNL
+_GL_WARN_ON_USE (copysign, "copysignl is unportable - "
+                 "use gnulib module copysignl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_COSF@
+# if @REPLACE_COSF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef cosf
+#   define cosf rpl_cosf
+#  endif
+_GL_FUNCDECL_RPL (cosf, float, (float x));
+_GL_CXXALIAS_RPL (cosf, float, (float x));
+# else
+#  if !@HAVE_COSF@
+#   undef cosf
+_GL_FUNCDECL_SYS (cosf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (cosf, float, (float x));
+# endif
+_GL_CXXALIASWARN (cosf);
+#elif defined GNULIB_POSIXCHECK
+# undef cosf
+# if HAVE_RAW_DECL_COSF
+_GL_WARN_ON_USE (cosf, "cosf is unportable - "
+                 "use gnulib module cosf for portability");
+# endif
+#endif
+
+#if @GNULIB_COSL@
+# if !@HAVE_COSL@ || !@HAVE_DECL_COSL@
+#  undef cosl
+_GL_FUNCDECL_SYS (cosl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (cosl, long double, (long double x));
+_GL_CXXALIASWARN (cosl);
+#elif defined GNULIB_POSIXCHECK
+# undef cosl
+# if HAVE_RAW_DECL_COSL
+_GL_WARN_ON_USE (cosl, "cosl is unportable - "
+                 "use gnulib module cosl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_COSHF@
+# if @REPLACE_COSHF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef coshf
+#   define coshf rpl_coshf
+#  endif
+_GL_FUNCDECL_RPL (coshf, float, (float x));
+_GL_CXXALIAS_RPL (coshf, float, (float x));
+# else
+#  if !@HAVE_COSHF@
+#   undef coshf
+_GL_FUNCDECL_SYS (coshf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (coshf, float, (float x));
+# endif
+_GL_CXXALIASWARN (coshf);
+#elif defined GNULIB_POSIXCHECK
+# undef coshf
+# if HAVE_RAW_DECL_COSHF
+_GL_WARN_ON_USE (coshf, "coshf is unportable - "
+                 "use gnulib module coshf for portability");
+# endif
+#endif
+
+
+#if @GNULIB_EXPF@
+# if @REPLACE_EXPF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expf
+#   define expf rpl_expf
+#  endif
+_GL_FUNCDECL_RPL (expf, float, (float x));
+_GL_CXXALIAS_RPL (expf, float, (float x));
+# else
+#  if !@HAVE_EXPF@
+#   undef expf
+_GL_FUNCDECL_SYS (expf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (expf, float, (float x));
+# endif
+_GL_CXXALIASWARN (expf);
+#elif defined GNULIB_POSIXCHECK
+# undef expf
+# if HAVE_RAW_DECL_EXPF
+_GL_WARN_ON_USE (expf, "expf is unportable - "
+                 "use gnulib module expf for portability");
+# endif
+#endif
+
+#if @GNULIB_EXPL@
+# if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@
+#  undef expl
+_GL_FUNCDECL_SYS (expl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (expl, long double, (long double x));
+_GL_CXXALIASWARN (expl);
+#elif defined GNULIB_POSIXCHECK
+# undef expl
+# if HAVE_RAW_DECL_EXPL
+_GL_WARN_ON_USE (expl, "expl is unportable - "
+                 "use gnulib module expl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_EXP2F@
+# if !@HAVE_DECL_EXP2F@
+_GL_FUNCDECL_SYS (exp2f, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (exp2f, float, (float x));
+_GL_CXXALIASWARN (exp2f);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2f
+# if HAVE_RAW_DECL_EXP2F
+_GL_WARN_ON_USE (exp2f, "exp2f is unportable - "
+                 "use gnulib module exp2f for portability");
+# endif
+#endif
+
+#if @GNULIB_EXP2@
+# if @REPLACE_EXP2@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef exp2
+#   define exp2 rpl_exp2
+#  endif
+_GL_FUNCDECL_RPL (exp2, double, (double x));
+_GL_CXXALIAS_RPL (exp2, double, (double x));
+# else
+#  if !@HAVE_DECL_EXP2@
+_GL_FUNCDECL_SYS (exp2, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (exp2, double, (double x));
+# endif
+_GL_CXXALIASWARN (exp2);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2
+# if HAVE_RAW_DECL_EXP2
+_GL_WARN_ON_USE (exp2, "exp2 is unportable - "
+                 "use gnulib module exp2 for portability");
+# endif
+#endif
+
+#if @GNULIB_EXP2L@
+# if @REPLACE_EXP2L@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef exp2l
+#   define exp2l rpl_exp2l
+#  endif
+_GL_FUNCDECL_RPL (exp2l, long double, (long double x));
+_GL_CXXALIAS_RPL (exp2l, long double, (long double x));
+# else
+#  if !@HAVE_DECL_EXP2L@
+#   undef exp2l
+_GL_FUNCDECL_SYS (exp2l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (exp2l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (exp2l);
+#elif defined GNULIB_POSIXCHECK
+# undef exp2l
+# if HAVE_RAW_DECL_EXP2L
+_GL_WARN_ON_USE (exp2l, "exp2l is unportable - "
+                 "use gnulib module exp2l for portability");
+# endif
+#endif
+
+
+#if @GNULIB_EXPM1F@
+# if @REPLACE_EXPM1F@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expm1f
+#   define expm1f rpl_expm1f
+#  endif
+_GL_FUNCDECL_RPL (expm1f, float, (float x));
+_GL_CXXALIAS_RPL (expm1f, float, (float x));
+# else
+#  if !@HAVE_EXPM1F@
+_GL_FUNCDECL_SYS (expm1f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (expm1f, float, (float x));
+# endif
+_GL_CXXALIASWARN (expm1f);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1f
+# if HAVE_RAW_DECL_EXPM1F
+_GL_WARN_ON_USE (expm1f, "expm1f is unportable - "
+                 "use gnulib module expm1f for portability");
+# endif
+#endif
+
+#if @GNULIB_EXPM1@
+# if @REPLACE_EXPM1@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef expm1
+#   define expm1 rpl_expm1
+#  endif
+_GL_FUNCDECL_RPL (expm1, double, (double x));
+_GL_CXXALIAS_RPL (expm1, double, (double x));
+# else
+#  if !@HAVE_EXPM1@
+_GL_FUNCDECL_SYS (expm1, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (expm1, double, (double x));
+# endif
+_GL_CXXALIASWARN (expm1);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1
+# if HAVE_RAW_DECL_EXPM1
+_GL_WARN_ON_USE (expm1, "expm1 is unportable - "
+                 "use gnulib module expm1 for portability");
+# endif
+#endif
+
+#if @GNULIB_EXPM1L@
+# if !@HAVE_DECL_EXPM1L@
+#  undef expm1l
+_GL_FUNCDECL_SYS (expm1l, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (expm1l, long double, (long double x));
+_GL_CXXALIASWARN (expm1l);
+#elif defined GNULIB_POSIXCHECK
+# undef expm1l
+# if HAVE_RAW_DECL_EXPM1L
+_GL_WARN_ON_USE (expm1l, "expm1l is unportable - "
+                 "use gnulib module expm1l for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FABSF@
+# if !@HAVE_FABSF@
+#  undef fabsf
+_GL_FUNCDECL_SYS (fabsf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (fabsf, float, (float x));
+_GL_CXXALIASWARN (fabsf);
+#elif defined GNULIB_POSIXCHECK
+# undef fabsf
+# if HAVE_RAW_DECL_FABSF
+_GL_WARN_ON_USE (fabsf, "fabsf is unportable - "
+                 "use gnulib module fabsf for portability");
+# endif
+#endif
+
+#if @GNULIB_FABSL@
+# if @REPLACE_FABSL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fabsl
+#   define fabsl rpl_fabsl
+#  endif
+_GL_FUNCDECL_RPL (fabsl, long double, (long double x));
+_GL_CXXALIAS_RPL (fabsl, long double, (long double x));
+# else
+#  if !@HAVE_FABSL@
+#   undef fabsl
+_GL_FUNCDECL_SYS (fabsl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (fabsl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (fabsl);
+#elif defined GNULIB_POSIXCHECK
+# undef fabsl
+# if HAVE_RAW_DECL_FABSL
+_GL_WARN_ON_USE (fabsl, "fabsl is unportable - "
+                 "use gnulib module fabsl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FLOORF@
+# if @REPLACE_FLOORF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef floorf
+#   define floorf rpl_floorf
+#  endif
+_GL_FUNCDECL_RPL (floorf, float, (float x));
+_GL_CXXALIAS_RPL (floorf, float, (float x));
+# else
+#  if !@HAVE_DECL_FLOORF@
+#   undef floorf
+_GL_FUNCDECL_SYS (floorf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (floorf, float, (float x));
+# endif
+_GL_CXXALIASWARN (floorf);
+#elif defined GNULIB_POSIXCHECK
+# undef floorf
+# if HAVE_RAW_DECL_FLOORF
+_GL_WARN_ON_USE (floorf, "floorf is unportable - "
+                 "use gnulib module floorf for portability");
+# endif
+#endif
+
+#if @GNULIB_FLOOR@
+# if @REPLACE_FLOOR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef floor
+#   define floor rpl_floor
+#  endif
+_GL_FUNCDECL_RPL (floor, double, (double x));
+_GL_CXXALIAS_RPL (floor, double, (double x));
+# else
+_GL_CXXALIAS_SYS (floor, double, (double x));
+# endif
+_GL_CXXALIASWARN (floor);
+#endif
+
+#if @GNULIB_FLOORL@
+# if @REPLACE_FLOORL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef floorl
+#   define floorl rpl_floorl
+#  endif
+_GL_FUNCDECL_RPL (floorl, long double, (long double x));
+_GL_CXXALIAS_RPL (floorl, long double, (long double x));
+# else
+#  if !@HAVE_DECL_FLOORL@
+#   undef floorl
+_GL_FUNCDECL_SYS (floorl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (floorl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (floorl);
+#elif defined GNULIB_POSIXCHECK
+# undef floorl
+# if HAVE_RAW_DECL_FLOORL
+_GL_WARN_ON_USE (floorl, "floorl is unportable - "
+                 "use gnulib module floorl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FMAF@
+# if @REPLACE_FMAF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmaf
+#   define fmaf rpl_fmaf
+#  endif
+_GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z));
+_GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z));
+# else
+#  if !@HAVE_FMAF@
+_GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z));
+#  endif
+_GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z));
+# endif
+_GL_CXXALIASWARN (fmaf);
+#elif defined GNULIB_POSIXCHECK
+# undef fmaf
+# if HAVE_RAW_DECL_FMAF
+_GL_WARN_ON_USE (fmaf, "fmaf is unportable - "
+                 "use gnulib module fmaf for portability");
+# endif
+#endif
+
+#if @GNULIB_FMA@
+# if @REPLACE_FMA@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fma
+#   define fma rpl_fma
+#  endif
+_GL_FUNCDECL_RPL (fma, double, (double x, double y, double z));
+_GL_CXXALIAS_RPL (fma, double, (double x, double y, double z));
+# else
+#  if !@HAVE_FMA@
+_GL_FUNCDECL_SYS (fma, double, (double x, double y, double z));
+#  endif
+_GL_CXXALIAS_SYS (fma, double, (double x, double y, double z));
+# endif
+_GL_CXXALIASWARN (fma);
+#elif defined GNULIB_POSIXCHECK
+# undef fma
+# if HAVE_RAW_DECL_FMA
+_GL_WARN_ON_USE (fma, "fma is unportable - "
+                 "use gnulib module fma for portability");
+# endif
+#endif
+
+#if @GNULIB_FMAL@
+# if @REPLACE_FMAL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmal
+#   define fmal rpl_fmal
+#  endif
+_GL_FUNCDECL_RPL (fmal, long double,
+                  (long double x, long double y, long double z));
+_GL_CXXALIAS_RPL (fmal, long double,
+                  (long double x, long double y, long double z));
+# else
+#  if !@HAVE_FMAL@
+#   undef fmal
+_GL_FUNCDECL_SYS (fmal, long double,
+                  (long double x, long double y, long double z));
+#  endif
+_GL_CXXALIAS_SYS (fmal, long double,
+                  (long double x, long double y, long double z));
+# endif
+_GL_CXXALIASWARN (fmal);
+#elif defined GNULIB_POSIXCHECK
+# undef fmal
+# if HAVE_RAW_DECL_FMAL
+_GL_WARN_ON_USE (fmal, "fmal is unportable - "
+                 "use gnulib module fmal for portability");
+# endif
+#endif
+
+
+#if @GNULIB_FMODF@
+# if @REPLACE_FMODF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmodf
+#   define fmodf rpl_fmodf
+#  endif
+_GL_FUNCDECL_RPL (fmodf, float, (float x, float y));
+_GL_CXXALIAS_RPL (fmodf, float, (float x, float y));
+# else
+#  if !@HAVE_FMODF@
+#   undef fmodf
+_GL_FUNCDECL_SYS (fmodf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (fmodf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (fmodf);
+#elif defined GNULIB_POSIXCHECK
+# undef fmodf
+# if HAVE_RAW_DECL_FMODF
+_GL_WARN_ON_USE (fmodf, "fmodf is unportable - "
+                 "use gnulib module fmodf for portability");
+# endif
+#endif
+
+#if @GNULIB_FMOD@
+# if @REPLACE_FMOD@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmod
+#   define fmod rpl_fmod
+#  endif
+_GL_FUNCDECL_RPL (fmod, double, (double x, double y));
+_GL_CXXALIAS_RPL (fmod, double, (double x, double y));
+# else
+_GL_CXXALIAS_SYS (fmod, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (fmod);
+#elif defined GNULIB_POSIXCHECK
+# undef fmod
+# if HAVE_RAW_DECL_FMOD
+_GL_WARN_ON_USE (fmod, "fmod has portability problems - "
+                 "use gnulib module fmod for portability");
+# endif
+#endif
+
+#if @GNULIB_FMODL@
+# if @REPLACE_FMODL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fmodl
+#   define fmodl rpl_fmodl
+#  endif
+_GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y));
+# else
+#  if !@HAVE_FMODL@
+#   undef fmodl
+_GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (fmodl);
+#elif defined GNULIB_POSIXCHECK
+# undef fmodl
+# if HAVE_RAW_DECL_FMODL
+_GL_WARN_ON_USE (fmodl, "fmodl is unportable - "
+                 "use gnulib module fmodl for portability");
+# endif
+#endif
+
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if @GNULIB_FREXPF@
+# if @REPLACE_FREXPF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef frexpf
+#   define frexpf rpl_frexpf
+#  endif
+_GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr));
+# else
+#  if !@HAVE_FREXPF@
+#   undef frexpf
+_GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr));
+# endif
+_GL_CXXALIASWARN (frexpf);
+#elif defined GNULIB_POSIXCHECK
+# undef frexpf
+# if HAVE_RAW_DECL_FREXPF
+_GL_WARN_ON_USE (frexpf, "frexpf is unportable - "
+                 "use gnulib module frexpf for portability");
+# endif
+#endif
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if @GNULIB_FREXP@
+# if @REPLACE_FREXP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef frexp
+#   define frexp rpl_frexp
+#  endif
+_GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr));
+# else
+_GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr));
+# endif
+_GL_CXXALIASWARN1 (frexp, double, (double x, int *expptr));
+#elif defined GNULIB_POSIXCHECK
+# undef frexp
+/* Assume frexp is always declared.  */
+_GL_WARN_ON_USE (frexp, "frexp is unportable - "
+                 "use gnulib module frexp for portability");
+#endif
+
+/* Write x as
+     x = mantissa * 2^exp
+   where
+     If x finite and nonzero: 0.5 <= |mantissa| < 1.0.
+     If x is zero: mantissa = x, exp = 0.
+     If x is infinite or NaN: mantissa = x, exp unspecified.
+   Store exp in *EXPPTR and return mantissa.  */
+#if @GNULIB_FREXPL@ && @REPLACE_FREXPL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef frexpl
+#  define frexpl rpl_frexpl
+# endif
+_GL_FUNCDECL_RPL (frexpl, long double,
+                  (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr));
+#else
+# if !@HAVE_DECL_FREXPL@
+_GL_FUNCDECL_SYS (frexpl, long double,
+                  (long double x, int *expptr) _GL_ARG_NONNULL ((2)));
+# endif
+# if @GNULIB_FREXPL@
+_GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr));
+# endif
+#endif
+#if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@)
+_GL_CXXALIASWARN (frexpl);
+#endif
+#if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK
+# undef frexpl
+# if HAVE_RAW_DECL_FREXPL
+_GL_WARN_ON_USE (frexpl, "frexpl is unportable - "
+                 "use gnulib module frexpl for portability");
+# endif
+#endif
+
+
+/* Return sqrt(x^2+y^2).  */
+#if @GNULIB_HYPOTF@
+# if @REPLACE_HYPOTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypotf
+#   define hypotf rpl_hypotf
+#  endif
+_GL_FUNCDECL_RPL (hypotf, float, (float x, float y));
+_GL_CXXALIAS_RPL (hypotf, float, (float x, float y));
+# else
+#  if !@HAVE_HYPOTF@
+_GL_FUNCDECL_SYS (hypotf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (hypotf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (hypotf);
+#elif defined GNULIB_POSIXCHECK
+# undef hypotf
+# if HAVE_RAW_DECL_HYPOTF
+_GL_WARN_ON_USE (hypotf, "hypotf is unportable - "
+                 "use gnulib module hypotf for portability");
+# endif
+#endif
+
+/* Return sqrt(x^2+y^2).  */
+#if @GNULIB_HYPOT@
+# if @REPLACE_HYPOT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypot
+#   define hypot rpl_hypot
+#  endif
+_GL_FUNCDECL_RPL (hypot, double, (double x, double y));
+_GL_CXXALIAS_RPL (hypot, double, (double x, double y));
+# else
+_GL_CXXALIAS_SYS (hypot, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (hypot);
+#elif defined GNULIB_POSIXCHECK
+# undef hypot
+# if HAVE_RAW_DECL_HYPOT
+_GL_WARN_ON_USE (hypotf, "hypot has portability problems - "
+                 "use gnulib module hypot for portability");
+# endif
+#endif
+
+/* Return sqrt(x^2+y^2).  */
+#if @GNULIB_HYPOTL@
+# if @REPLACE_HYPOTL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef hypotl
+#   define hypotl rpl_hypotl
+#  endif
+_GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y));
+# else
+#  if !@HAVE_HYPOTL@
+_GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (hypotl);
+#elif defined GNULIB_POSIXCHECK
+# undef hypotl
+# if HAVE_RAW_DECL_HYPOTL
+_GL_WARN_ON_USE (hypotl, "hypotl is unportable - "
+                 "use gnulib module hypotl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ILOGBF@
+# if @REPLACE_ILOGBF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ilogbf
+#   define ilogbf rpl_ilogbf
+#  endif
+_GL_FUNCDECL_RPL (ilogbf, int, (float x));
+_GL_CXXALIAS_RPL (ilogbf, int, (float x));
+# else
+#  if !@HAVE_ILOGBF@
+_GL_FUNCDECL_SYS (ilogbf, int, (float x));
+#  endif
+_GL_CXXALIAS_SYS (ilogbf, int, (float x));
+# endif
+_GL_CXXALIASWARN (ilogbf);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogbf
+# if HAVE_RAW_DECL_ILOGBF
+_GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - "
+                 "use gnulib module ilogbf for portability");
+# endif
+#endif
+
+#if @GNULIB_ILOGB@
+# if @REPLACE_ILOGB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ilogb
+#   define ilogb rpl_ilogb
+#  endif
+_GL_FUNCDECL_RPL (ilogb, int, (double x));
+_GL_CXXALIAS_RPL (ilogb, int, (double x));
+# else
+#  if !@HAVE_ILOGB@
+_GL_FUNCDECL_SYS (ilogb, int, (double x));
+#  endif
+_GL_CXXALIAS_SYS (ilogb, int, (double x));
+# endif
+_GL_CXXALIASWARN (ilogb);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogb
+# if HAVE_RAW_DECL_ILOGB
+_GL_WARN_ON_USE (ilogb, "ilogb is unportable - "
+                 "use gnulib module ilogb for portability");
+# endif
+#endif
+
+#if @GNULIB_ILOGBL@
+# if @REPLACE_ILOGBL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ilogbl
+#   define ilogbl rpl_ilogbl
+#  endif
+_GL_FUNCDECL_RPL (ilogbl, int, (long double x));
+_GL_CXXALIAS_RPL (ilogbl, int, (long double x));
+# else
+#  if !@HAVE_ILOGBL@
+_GL_FUNCDECL_SYS (ilogbl, int, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (ilogbl, int, (long double x));
+# endif
+_GL_CXXALIASWARN (ilogbl);
+#elif defined GNULIB_POSIXCHECK
+# undef ilogbl
+# if HAVE_RAW_DECL_ILOGBL
+_GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - "
+                 "use gnulib module ilogbl for portability");
+# endif
+#endif
+
+
+/* Return x * 2^exp.  */
+#if @GNULIB_LDEXPF@
+# if !@HAVE_LDEXPF@
+#  undef ldexpf
+_GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp));
+# endif
+_GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp));
+_GL_CXXALIASWARN (ldexpf);
+#elif defined GNULIB_POSIXCHECK
+# undef ldexpf
+# if HAVE_RAW_DECL_LDEXPF
+_GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - "
+                 "use gnulib module ldexpf for portability");
+# endif
+#endif
+
+/* Return x * 2^exp.  */
+#if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@
+# if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#  undef ldexpl
+#  define ldexpl rpl_ldexpl
+# endif
+_GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp));
+_GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp));
+#else
+# if !@HAVE_DECL_LDEXPL@
+_GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp));
+# endif
+# if @GNULIB_LDEXPL@
+_GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp));
+# endif
+#endif
+#if @GNULIB_LDEXPL@
+_GL_CXXALIASWARN (ldexpl);
+#endif
+#if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK
+# undef ldexpl
+# if HAVE_RAW_DECL_LDEXPL
+_GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - "
+                 "use gnulib module ldexpl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LOGF@
+# if @REPLACE_LOGF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logf
+#   define logf rpl_logf
+#  endif
+_GL_FUNCDECL_RPL (logf, float, (float x));
+_GL_CXXALIAS_RPL (logf, float, (float x));
+# else
+#  if !@HAVE_LOGF@
+#   undef logf
+_GL_FUNCDECL_SYS (logf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (logf, float, (float x));
+# endif
+_GL_CXXALIASWARN (logf);
+#elif defined GNULIB_POSIXCHECK
+# undef logf
+# if HAVE_RAW_DECL_LOGF
+_GL_WARN_ON_USE (logf, "logf is unportable - "
+                 "use gnulib module logf for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG@
+# if @REPLACE_LOG@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log
+#   define log rpl_log
+#  endif
+_GL_FUNCDECL_RPL (log, double, (double x));
+_GL_CXXALIAS_RPL (log, double, (double x));
+# else
+_GL_CXXALIAS_SYS (log, double, (double x));
+# endif
+_GL_CXXALIASWARN (log);
+#elif defined GNULIB_POSIXCHECK
+# undef log
+# if HAVE_RAW_DECL_LOG
+_GL_WARN_ON_USE (log, "log has portability problems - "
+                 "use gnulib module log for portability");
+# endif
+#endif
+
+#if @GNULIB_LOGL@
+# if @REPLACE_LOGL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logl
+#   define logl rpl_logl
+#  endif
+_GL_FUNCDECL_RPL (logl, long double, (long double x));
+_GL_CXXALIAS_RPL (logl, long double, (long double x));
+# else
+#  if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@
+#   undef logl
+_GL_FUNCDECL_SYS (logl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (logl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (logl);
+#elif defined GNULIB_POSIXCHECK
+# undef logl
+# if HAVE_RAW_DECL_LOGL
+_GL_WARN_ON_USE (logl, "logl is unportable - "
+                 "use gnulib module logl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LOG10F@
+# if @REPLACE_LOG10F@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10f
+#   define log10f rpl_log10f
+#  endif
+_GL_FUNCDECL_RPL (log10f, float, (float x));
+_GL_CXXALIAS_RPL (log10f, float, (float x));
+# else
+#  if !@HAVE_LOG10F@
+#   undef log10f
+_GL_FUNCDECL_SYS (log10f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log10f, float, (float x));
+# endif
+_GL_CXXALIASWARN (log10f);
+#elif defined GNULIB_POSIXCHECK
+# undef log10f
+# if HAVE_RAW_DECL_LOG10F
+_GL_WARN_ON_USE (log10f, "log10f is unportable - "
+                 "use gnulib module log10f for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG10@
+# if @REPLACE_LOG10@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10
+#   define log10 rpl_log10
+#  endif
+_GL_FUNCDECL_RPL (log10, double, (double x));
+_GL_CXXALIAS_RPL (log10, double, (double x));
+# else
+_GL_CXXALIAS_SYS (log10, double, (double x));
+# endif
+_GL_CXXALIASWARN (log10);
+#elif defined GNULIB_POSIXCHECK
+# undef log10
+# if HAVE_RAW_DECL_LOG10
+_GL_WARN_ON_USE (log10, "log10 has portability problems - "
+                 "use gnulib module log10 for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG10L@
+# if @REPLACE_LOG10L@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log10l
+#   define log10l rpl_log10l
+#  endif
+_GL_FUNCDECL_RPL (log10l, long double, (long double x));
+_GL_CXXALIAS_RPL (log10l, long double, (long double x));
+# else
+#  if !@HAVE_LOG10L@ || !@HAVE_DECL_LOG10L@
+#   undef log10l
+_GL_FUNCDECL_SYS (log10l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log10l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log10l);
+#elif defined GNULIB_POSIXCHECK
+# undef log10l
+# if HAVE_RAW_DECL_LOG10L
+_GL_WARN_ON_USE (log10l, "log10l is unportable - "
+                 "use gnulib module log10l for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LOG1PF@
+# if @REPLACE_LOG1PF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1pf
+#   define log1pf rpl_log1pf
+#  endif
+_GL_FUNCDECL_RPL (log1pf, float, (float x));
+_GL_CXXALIAS_RPL (log1pf, float, (float x));
+# else
+#  if !@HAVE_LOG1PF@
+_GL_FUNCDECL_SYS (log1pf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log1pf, float, (float x));
+# endif
+_GL_CXXALIASWARN (log1pf);
+#elif defined GNULIB_POSIXCHECK
+# undef log1pf
+# if HAVE_RAW_DECL_LOG1PF
+_GL_WARN_ON_USE (log1pf, "log1pf is unportable - "
+                 "use gnulib module log1pf for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG1P@
+# if @REPLACE_LOG1P@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1p
+#   define log1p rpl_log1p
+#  endif
+_GL_FUNCDECL_RPL (log1p, double, (double x));
+_GL_CXXALIAS_RPL (log1p, double, (double x));
+# else
+#  if !@HAVE_LOG1P@
+_GL_FUNCDECL_SYS (log1p, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (log1p, double, (double x));
+# endif
+_GL_CXXALIASWARN (log1p);
+#elif defined GNULIB_POSIXCHECK
+# undef log1p
+# if HAVE_RAW_DECL_LOG1P
+_GL_WARN_ON_USE (log1p, "log1p has portability problems - "
+                 "use gnulib module log1p for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG1PL@
+# if @REPLACE_LOG1PL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log1pl
+#   define log1pl rpl_log1pl
+#  endif
+_GL_FUNCDECL_RPL (log1pl, long double, (long double x));
+_GL_CXXALIAS_RPL (log1pl, long double, (long double x));
+# else
+#  if !@HAVE_LOG1PL@
+_GL_FUNCDECL_SYS (log1pl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log1pl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log1pl);
+#elif defined GNULIB_POSIXCHECK
+# undef log1pl
+# if HAVE_RAW_DECL_LOG1PL
+_GL_WARN_ON_USE (log1pl, "log1pl has portability problems - "
+                 "use gnulib module log1pl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LOG2F@
+# if @REPLACE_LOG2F@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2f
+#   define log2f rpl_log2f
+#  endif
+_GL_FUNCDECL_RPL (log2f, float, (float x));
+_GL_CXXALIAS_RPL (log2f, float, (float x));
+# else
+#  if !@HAVE_DECL_LOG2F@
+#   undef log2f
+_GL_FUNCDECL_SYS (log2f, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (log2f, float, (float x));
+# endif
+_GL_CXXALIASWARN (log2f);
+#elif defined GNULIB_POSIXCHECK
+# undef log2f
+# if HAVE_RAW_DECL_LOG2F
+_GL_WARN_ON_USE (log2f, "log2f is unportable - "
+                 "use gnulib module log2f for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG2@
+# if @REPLACE_LOG2@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2
+#   define log2 rpl_log2
+#  endif
+_GL_FUNCDECL_RPL (log2, double, (double x));
+_GL_CXXALIAS_RPL (log2, double, (double x));
+# else
+#  if !@HAVE_DECL_LOG2@
+#   undef log2
+_GL_FUNCDECL_SYS (log2, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (log2, double, (double x));
+# endif
+_GL_CXXALIASWARN (log2);
+#elif defined GNULIB_POSIXCHECK
+# undef log2
+# if HAVE_RAW_DECL_LOG2
+_GL_WARN_ON_USE (log2, "log2 is unportable - "
+                 "use gnulib module log2 for portability");
+# endif
+#endif
+
+#if @GNULIB_LOG2L@
+# if @REPLACE_LOG2L@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef log2l
+#   define log2l rpl_log2l
+#  endif
+_GL_FUNCDECL_RPL (log2l, long double, (long double x));
+_GL_CXXALIAS_RPL (log2l, long double, (long double x));
+# else
+#  if !@HAVE_DECL_LOG2L@
+_GL_FUNCDECL_SYS (log2l, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (log2l, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (log2l);
+#elif defined GNULIB_POSIXCHECK
+# undef log2l
+# if HAVE_RAW_DECL_LOG2L
+_GL_WARN_ON_USE (log2l, "log2l is unportable - "
+                 "use gnulib module log2l for portability");
+# endif
+#endif
+
+
+#if @GNULIB_LOGBF@
+# if @REPLACE_LOGBF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logbf
+#   define logbf rpl_logbf
+#  endif
+_GL_FUNCDECL_RPL (logbf, float, (float x));
+_GL_CXXALIAS_RPL (logbf, float, (float x));
+# else
+#  if !@HAVE_LOGBF@
+_GL_FUNCDECL_SYS (logbf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (logbf, float, (float x));
+# endif
+_GL_CXXALIASWARN (logbf);
+#elif defined GNULIB_POSIXCHECK
+# undef logbf
+# if HAVE_RAW_DECL_LOGBF
+_GL_WARN_ON_USE (logbf, "logbf is unportable - "
+                 "use gnulib module logbf for portability");
+# endif
+#endif
+
+#if @GNULIB_LOGB@
+# if @REPLACE_LOGB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logb
+#   define logb rpl_logb
+#  endif
+_GL_FUNCDECL_RPL (logb, double, (double x));
+_GL_CXXALIAS_RPL (logb, double, (double x));
+# else
+#  if !@HAVE_DECL_LOGB@
+_GL_FUNCDECL_SYS (logb, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (logb, double, (double x));
+# endif
+_GL_CXXALIASWARN (logb);
+#elif defined GNULIB_POSIXCHECK
+# undef logb
+# if HAVE_RAW_DECL_LOGB
+_GL_WARN_ON_USE (logb, "logb is unportable - "
+                 "use gnulib module logb for portability");
+# endif
+#endif
+
+#if @GNULIB_LOGBL@
+# if @REPLACE_LOGBL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef logbl
+#   define logbl rpl_logbl
+#  endif
+_GL_FUNCDECL_RPL (logbl, long double, (long double x));
+_GL_CXXALIAS_RPL (logbl, long double, (long double x));
+# else
+#  if !@HAVE_LOGBL@
+_GL_FUNCDECL_SYS (logbl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (logbl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (logbl);
+#elif defined GNULIB_POSIXCHECK
+# undef logbl
+# if HAVE_RAW_DECL_LOGBL
+_GL_WARN_ON_USE (logbl, "logbl is unportable - "
+                 "use gnulib module logbl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_MODFF@
+# if @REPLACE_MODFF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modff
+#   define modff rpl_modff
+#  endif
+_GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modff, float, (float x, float *iptr));
+# else
+#  if !@HAVE_MODFF@
+#   undef modff
+_GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (modff, float, (float x, float *iptr));
+# endif
+_GL_CXXALIASWARN (modff);
+#elif defined GNULIB_POSIXCHECK
+# undef modff
+# if HAVE_RAW_DECL_MODFF
+_GL_WARN_ON_USE (modff, "modff is unportable - "
+                 "use gnulib module modff for portability");
+# endif
+#endif
+
+#if @GNULIB_MODF@
+# if @REPLACE_MODF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modf
+#   define modf rpl_modf
+#  endif
+_GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modf, double, (double x, double *iptr));
+# else
+_GL_CXXALIAS_SYS (modf, double, (double x, double *iptr));
+# endif
+_GL_CXXALIASWARN (modf);
+#elif defined GNULIB_POSIXCHECK
+# undef modf
+# if HAVE_RAW_DECL_MODF
+_GL_WARN_ON_USE (modf, "modf has portability problems - "
+                 "use gnulib module modf for portability");
+# endif
+#endif
+
+#if @GNULIB_MODFL@
+# if @REPLACE_MODFL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef modfl
+#   define modfl rpl_modfl
+#  endif
+_GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr)
+                                      _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr));
+# else
+#  if !@HAVE_MODFL@
+#   undef modfl
+_GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr)
+                                      _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr));
+# endif
+_GL_CXXALIASWARN (modfl);
+#elif defined GNULIB_POSIXCHECK
+# undef modfl
+# if HAVE_RAW_DECL_MODFL
+_GL_WARN_ON_USE (modfl, "modfl is unportable - "
+                 "use gnulib module modfl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_POWF@
+# if !@HAVE_POWF@
+#  undef powf
+_GL_FUNCDECL_SYS (powf, float, (float x, float y));
+# endif
+_GL_CXXALIAS_SYS (powf, float, (float x, float y));
+_GL_CXXALIASWARN (powf);
+#elif defined GNULIB_POSIXCHECK
+# undef powf
+# if HAVE_RAW_DECL_POWF
+_GL_WARN_ON_USE (powf, "powf is unportable - "
+                 "use gnulib module powf for portability");
+# endif
+#endif
+
+
+#if @GNULIB_REMAINDERF@
+# if @REPLACE_REMAINDERF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainderf
+#   define remainderf rpl_remainderf
+#  endif
+_GL_FUNCDECL_RPL (remainderf, float, (float x, float y));
+_GL_CXXALIAS_RPL (remainderf, float, (float x, float y));
+# else
+#  if !@HAVE_REMAINDERF@
+_GL_FUNCDECL_SYS (remainderf, float, (float x, float y));
+#  endif
+_GL_CXXALIAS_SYS (remainderf, float, (float x, float y));
+# endif
+_GL_CXXALIASWARN (remainderf);
+#elif defined GNULIB_POSIXCHECK
+# undef remainderf
+# if HAVE_RAW_DECL_REMAINDERF
+_GL_WARN_ON_USE (remainderf, "remainderf is unportable - "
+                 "use gnulib module remainderf for portability");
+# endif
+#endif
+
+#if @GNULIB_REMAINDER@
+# if @REPLACE_REMAINDER@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainder
+#   define remainder rpl_remainder
+#  endif
+_GL_FUNCDECL_RPL (remainder, double, (double x, double y));
+_GL_CXXALIAS_RPL (remainder, double, (double x, double y));
+# else
+#  if !@HAVE_REMAINDER@ || !@HAVE_DECL_REMAINDER@
+_GL_FUNCDECL_SYS (remainder, double, (double x, double y));
+#  endif
+_GL_CXXALIAS_SYS (remainder, double, (double x, double y));
+# endif
+_GL_CXXALIASWARN (remainder);
+#elif defined GNULIB_POSIXCHECK
+# undef remainder
+# if HAVE_RAW_DECL_REMAINDER
+_GL_WARN_ON_USE (remainder, "remainder is unportable - "
+                 "use gnulib module remainder for portability");
+# endif
+#endif
+
+#if @GNULIB_REMAINDERL@
+# if @REPLACE_REMAINDERL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remainderl
+#   define remainderl rpl_remainderl
+#  endif
+_GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y));
+_GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y));
+# else
+#  if !@HAVE_DECL_REMAINDERL@
+#   undef remainderl
+_GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y));
+#  endif
+_GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y));
+# endif
+_GL_CXXALIASWARN (remainderl);
+#elif defined GNULIB_POSIXCHECK
+# undef remainderl
+# if HAVE_RAW_DECL_REMAINDERL
+_GL_WARN_ON_USE (remainderl, "remainderl is unportable - "
+                 "use gnulib module remainderl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_RINTF@
+# if !@HAVE_DECL_RINTF@
+_GL_FUNCDECL_SYS (rintf, float, (float x));
+# endif
+_GL_CXXALIAS_SYS (rintf, float, (float x));
+_GL_CXXALIASWARN (rintf);
+#elif defined GNULIB_POSIXCHECK
+# undef rintf
+# if HAVE_RAW_DECL_RINTF
+_GL_WARN_ON_USE (rintf, "rintf is unportable - "
+                 "use gnulib module rintf for portability");
+# endif
+#endif
+
+#if @GNULIB_RINT@
+# if !@HAVE_RINT@
+_GL_FUNCDECL_SYS (rint, double, (double x));
+# endif
+_GL_CXXALIAS_SYS (rint, double, (double x));
+_GL_CXXALIASWARN (rint);
+#elif defined GNULIB_POSIXCHECK
+# undef rint
+# if HAVE_RAW_DECL_RINT
+_GL_WARN_ON_USE (rint, "rint is unportable - "
+                 "use gnulib module rint for portability");
+# endif
+#endif
+
+#if @GNULIB_RINTL@
+# if !@HAVE_RINTL@
+_GL_FUNCDECL_SYS (rintl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (rintl, long double, (long double x));
+_GL_CXXALIASWARN (rintl);
+#elif defined GNULIB_POSIXCHECK
+# undef rintl
+# if HAVE_RAW_DECL_RINTL
+_GL_WARN_ON_USE (rintl, "rintl is unportable - "
+                 "use gnulib module rintl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_ROUNDF@
+# if @REPLACE_ROUNDF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef roundf
+#   define roundf rpl_roundf
+#  endif
+_GL_FUNCDECL_RPL (roundf, float, (float x));
+_GL_CXXALIAS_RPL (roundf, float, (float x));
+# else
+#  if !@HAVE_DECL_ROUNDF@
+_GL_FUNCDECL_SYS (roundf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (roundf, float, (float x));
+# endif
+_GL_CXXALIASWARN (roundf);
+#elif defined GNULIB_POSIXCHECK
+# undef roundf
+# if HAVE_RAW_DECL_ROUNDF
+_GL_WARN_ON_USE (roundf, "roundf is unportable - "
+                 "use gnulib module roundf for portability");
+# endif
+#endif
+
+#if @GNULIB_ROUND@
+# if @REPLACE_ROUND@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef round
+#   define round rpl_round
+#  endif
+_GL_FUNCDECL_RPL (round, double, (double x));
+_GL_CXXALIAS_RPL (round, double, (double x));
+# else
+#  if !@HAVE_DECL_ROUND@
+_GL_FUNCDECL_SYS (round, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (round, double, (double x));
+# endif
+_GL_CXXALIASWARN (round);
+#elif defined GNULIB_POSIXCHECK
+# undef round
+# if HAVE_RAW_DECL_ROUND
+_GL_WARN_ON_USE (round, "round is unportable - "
+                 "use gnulib module round for portability");
+# endif
+#endif
+
+#if @GNULIB_ROUNDL@
+# if @REPLACE_ROUNDL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef roundl
+#   define roundl rpl_roundl
+#  endif
+_GL_FUNCDECL_RPL (roundl, long double, (long double x));
+_GL_CXXALIAS_RPL (roundl, long double, (long double x));
+# else
+#  if !@HAVE_DECL_ROUNDL@
+#   undef roundl
+_GL_FUNCDECL_SYS (roundl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (roundl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (roundl);
+#elif defined GNULIB_POSIXCHECK
+# undef roundl
+# if HAVE_RAW_DECL_ROUNDL
+_GL_WARN_ON_USE (roundl, "roundl is unportable - "
+                 "use gnulib module roundl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SINF@
+# if @REPLACE_SINF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sinf
+#   define sinf rpl_sinf
+#  endif
+_GL_FUNCDECL_RPL (sinf, float, (float x));
+_GL_CXXALIAS_RPL (sinf, float, (float x));
+# else
+#  if !@HAVE_SINF@
+ #  undef sinf
+_GL_FUNCDECL_SYS (sinf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (sinf, float, (float x));
+# endif
+_GL_CXXALIASWARN (sinf);
+#elif defined GNULIB_POSIXCHECK
+# undef sinf
+# if HAVE_RAW_DECL_SINF
+_GL_WARN_ON_USE (sinf, "sinf is unportable - "
+                 "use gnulib module sinf for portability");
+# endif
+#endif
+
+#if @GNULIB_SINL@
+# if !@HAVE_SINL@ || !@HAVE_DECL_SINL@
+#  undef sinl
+_GL_FUNCDECL_SYS (sinl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (sinl, long double, (long double x));
+_GL_CXXALIASWARN (sinl);
+#elif defined GNULIB_POSIXCHECK
+# undef sinl
+# if HAVE_RAW_DECL_SINL
+_GL_WARN_ON_USE (sinl, "sinl is unportable - "
+                 "use gnulib module sinl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SINHF@
+# if @REPLACE_SINHF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sinhf
+#   define sinhf rpl_sinhf
+#  endif
+_GL_FUNCDECL_RPL (sinhf, float, (float x));
+_GL_CXXALIAS_RPL (sinhf, float, (float x));
+# else
+#  if !@HAVE_SINHF@
+#   undef sinhf
+_GL_FUNCDECL_SYS (sinhf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (sinhf, float, (float x));
+# endif
+_GL_CXXALIASWARN (sinhf);
+#elif defined GNULIB_POSIXCHECK
+# undef sinhf
+# if HAVE_RAW_DECL_SINHF
+_GL_WARN_ON_USE (sinhf, "sinhf is unportable - "
+                 "use gnulib module sinhf for portability");
+# endif
+#endif
+
+
+#if @GNULIB_SQRTF@
+# if @REPLACE_SQRTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sqrtf
+#   define sqrtf rpl_sqrtf
+#  endif
+_GL_FUNCDECL_RPL (sqrtf, float, (float x));
+_GL_CXXALIAS_RPL (sqrtf, float, (float x));
+# else
+#  if !@HAVE_SQRTF@
+#   undef sqrtf
+_GL_FUNCDECL_SYS (sqrtf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (sqrtf, float, (float x));
+# endif
+_GL_CXXALIASWARN (sqrtf);
+#elif defined GNULIB_POSIXCHECK
+# undef sqrtf
+# if HAVE_RAW_DECL_SQRTF
+_GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - "
+                 "use gnulib module sqrtf for portability");
+# endif
+#endif
+
+#if @GNULIB_SQRTL@
+# if @REPLACE_SQRTL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef sqrtl
+#   define sqrtl rpl_sqrtl
+#  endif
+_GL_FUNCDECL_RPL (sqrtl, long double, (long double x));
+_GL_CXXALIAS_RPL (sqrtl, long double, (long double x));
+# else
+#  if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@
+#   undef sqrtl
+_GL_FUNCDECL_SYS (sqrtl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (sqrtl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (sqrtl);
+#elif defined GNULIB_POSIXCHECK
+# undef sqrtl
+# if HAVE_RAW_DECL_SQRTL
+_GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - "
+                 "use gnulib module sqrtl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_TANF@
+# if @REPLACE_TANF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef tanf
+#   define tanf rpl_tanf
+#  endif
+_GL_FUNCDECL_RPL (tanf, float, (float x));
+_GL_CXXALIAS_RPL (tanf, float, (float x));
+# else
+#  if !@HAVE_TANF@
+#   undef tanf
+_GL_FUNCDECL_SYS (tanf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (tanf, float, (float x));
+# endif
+_GL_CXXALIASWARN (tanf);
+#elif defined GNULIB_POSIXCHECK
+# undef tanf
+# if HAVE_RAW_DECL_TANF
+_GL_WARN_ON_USE (tanf, "tanf is unportable - "
+                 "use gnulib module tanf for portability");
+# endif
+#endif
+
+#if @GNULIB_TANL@
+# if !@HAVE_TANL@ || !@HAVE_DECL_TANL@
+#  undef tanl
+_GL_FUNCDECL_SYS (tanl, long double, (long double x));
+# endif
+_GL_CXXALIAS_SYS (tanl, long double, (long double x));
+_GL_CXXALIASWARN (tanl);
+#elif defined GNULIB_POSIXCHECK
+# undef tanl
+# if HAVE_RAW_DECL_TANL
+_GL_WARN_ON_USE (tanl, "tanl is unportable - "
+                 "use gnulib module tanl for portability");
+# endif
+#endif
+
+
+#if @GNULIB_TANHF@
+# if @REPLACE_TANHF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef tanhf
+#   define tanhf rpl_tanhf
+#  endif
+_GL_FUNCDECL_RPL (tanhf, float, (float x));
+_GL_CXXALIAS_RPL (tanhf, float, (float x));
+# else
+#  if !@HAVE_TANHF@
+#   undef tanhf
+_GL_FUNCDECL_SYS (tanhf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (tanhf, float, (float x));
+# endif
+_GL_CXXALIASWARN (tanhf);
+#elif defined GNULIB_POSIXCHECK
+# undef tanhf
+# if HAVE_RAW_DECL_TANHF
+_GL_WARN_ON_USE (tanhf, "tanhf is unportable - "
+                 "use gnulib module tanhf for portability");
+# endif
+#endif
+
+
+#if @GNULIB_TRUNCF@
+# if @REPLACE_TRUNCF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef truncf
+#   define truncf rpl_truncf
+#  endif
+_GL_FUNCDECL_RPL (truncf, float, (float x));
+_GL_CXXALIAS_RPL (truncf, float, (float x));
+# else
+#  if !@HAVE_DECL_TRUNCF@
+_GL_FUNCDECL_SYS (truncf, float, (float x));
+#  endif
+_GL_CXXALIAS_SYS (truncf, float, (float x));
+# endif
+_GL_CXXALIASWARN (truncf);
+#elif defined GNULIB_POSIXCHECK
+# undef truncf
+# if HAVE_RAW_DECL_TRUNCF
+_GL_WARN_ON_USE (truncf, "truncf is unportable - "
+                 "use gnulib module truncf for portability");
+# endif
+#endif
+
+#if @GNULIB_TRUNC@
+# if @REPLACE_TRUNC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef trunc
+#   define trunc rpl_trunc
+#  endif
+_GL_FUNCDECL_RPL (trunc, double, (double x));
+_GL_CXXALIAS_RPL (trunc, double, (double x));
+# else
+#  if !@HAVE_DECL_TRUNC@
+_GL_FUNCDECL_SYS (trunc, double, (double x));
+#  endif
+_GL_CXXALIAS_SYS (trunc, double, (double x));
+# endif
+_GL_CXXALIASWARN (trunc);
+#elif defined GNULIB_POSIXCHECK
+# undef trunc
+# if HAVE_RAW_DECL_TRUNC
+_GL_WARN_ON_USE (trunc, "trunc is unportable - "
+                 "use gnulib module trunc for portability");
+# endif
+#endif
+
+#if @GNULIB_TRUNCL@
+# if @REPLACE_TRUNCL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef truncl
+#   define truncl rpl_truncl
+#  endif
+_GL_FUNCDECL_RPL (truncl, long double, (long double x));
+_GL_CXXALIAS_RPL (truncl, long double, (long double x));
+# else
+#  if !@HAVE_DECL_TRUNCL@
+_GL_FUNCDECL_SYS (truncl, long double, (long double x));
+#  endif
+_GL_CXXALIAS_SYS (truncl, long double, (long double x));
+# endif
+_GL_CXXALIASWARN (truncl);
+#elif defined GNULIB_POSIXCHECK
+# undef truncl
+# if HAVE_RAW_DECL_TRUNCL
+_GL_WARN_ON_USE (truncl, "truncl is unportable - "
+                 "use gnulib module truncl for portability");
+# endif
+#endif
+
+
+/* Definitions of function-like macros come here, after the function
+   declarations.  */
+
+
+#if @GNULIB_ISFINITE@
+# if @REPLACE_ISFINITE@
+_GL_EXTERN_C int gl_isfinitef (float x);
+_GL_EXTERN_C int gl_isfinited (double x);
+_GL_EXTERN_C int gl_isfinitel (long double x);
+#  undef isfinite
+#  define isfinite(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \
+    sizeof (x) == sizeof (double) ? gl_isfinited (x) : \
+    gl_isfinitef (x))
+# endif
+# ifdef __cplusplus
+#  if defined isfinite || defined GNULIB_NAMESPACE
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite)
+#   undef isfinite
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isfinite
+_GL_WARN_REAL_FLOATING_DECL (isfinite);
+#  undef isfinite
+#  define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x)
+# endif
+#endif
+
+
+#if @GNULIB_ISINF@
+# if @REPLACE_ISINF@
+_GL_EXTERN_C int gl_isinff (float x);
+_GL_EXTERN_C int gl_isinfd (double x);
+_GL_EXTERN_C int gl_isinfl (long double x);
+#  undef isinf
+#  define isinf(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \
+    sizeof (x) == sizeof (double) ? gl_isinfd (x) : \
+    gl_isinff (x))
+# endif
+# ifdef __cplusplus
+#  if defined isinf || defined GNULIB_NAMESPACE
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf)
+#   undef isinf
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isinf
+_GL_WARN_REAL_FLOATING_DECL (isinf);
+#  undef isinf
+#  define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x)
+# endif
+#endif
+
+
+#if @GNULIB_ISNANF@
+/* Test for NaN for 'float' numbers.  */
+# if @HAVE_ISNANF@
+/* The original <math.h> included above provides a declaration of isnan macro
+   or (older) isnanf function.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnanf
+#   define isnanf(x) __builtin_isnanf ((float)(x))
+#  elif defined isnan
+#   undef isnanf
+#   define isnanf(x) isnan ((float)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnanf
+#  define isnanf rpl_isnanf
+_GL_EXTERN_C int isnanf (float x);
+# endif
+#endif
+
+#if @GNULIB_ISNAND@
+/* Test for NaN for 'double' numbers.
+   This function is a gnulib extension, unlike isnan() which applied only
+   to 'double' numbers earlier but now is a type-generic macro.  */
+# if @HAVE_ISNAND@
+/* The original <math.h> included above provides a declaration of isnan
+   macro.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnand
+#   define isnand(x) __builtin_isnan ((double)(x))
+#  else
+#   undef isnand
+#   define isnand(x) isnan ((double)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnand
+#  define isnand rpl_isnand
+_GL_EXTERN_C int isnand (double x);
+# endif
+#endif
+
+#if @GNULIB_ISNANL@
+/* Test for NaN for 'long double' numbers.  */
+# if @HAVE_ISNANL@
+/* The original <math.h> included above provides a declaration of isnan
+   macro or (older) isnanl function.  */
+#  if __GNUC__ >= 4
+    /* GCC 4.0 and newer provides three built-ins for isnan.  */
+#   undef isnanl
+#   define isnanl(x) __builtin_isnanl ((long double)(x))
+#  elif defined isnan
+#   undef isnanl
+#   define isnanl(x) isnan ((long double)(x))
+#  endif
+# else
+/* Test whether X is a NaN.  */
+#  undef isnanl
+#  define isnanl rpl_isnanl
+_GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST;
+# endif
+#endif
+
+/* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL!  */
+#if @GNULIB_ISNAN@
+# if @REPLACE_ISNAN@
+/* We can't just use the isnanf macro (e.g.) as exposed by
+   isnanf.h (e.g.) here, because those may end up being macros
+   that recursively expand back to isnan.  So use the gnulib
+   replacements for them directly. */
+#  if @HAVE_ISNANF@ && __GNUC__ >= 4
+#   define gl_isnan_f(x) __builtin_isnanf ((float)(x))
+#  else
+_GL_EXTERN_C int rpl_isnanf (float x);
+#   define gl_isnan_f(x) rpl_isnanf (x)
+#  endif
+#  if @HAVE_ISNAND@ && __GNUC__ >= 4
+#   define gl_isnan_d(x) __builtin_isnan ((double)(x))
+#  else
+_GL_EXTERN_C int rpl_isnand (double x);
+#   define gl_isnan_d(x) rpl_isnand (x)
+#  endif
+#  if @HAVE_ISNANL@ && __GNUC__ >= 4
+#   define gl_isnan_l(x) __builtin_isnanl ((long double)(x))
+#  else
+_GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST;
+#   define gl_isnan_l(x) rpl_isnanl (x)
+#  endif
+#  undef isnan
+#  define isnan(x) \
+   (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \
+    sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \
+    gl_isnan_f (x))
+# elif __GNUC__ >= 4
+#  undef isnan
+#  define isnan(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_isnanl ((long double)(x)) : \
+    sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \
+    __builtin_isnanf ((float)(x)))
+# endif
+# ifdef __cplusplus
+#  if defined isnan || defined GNULIB_NAMESPACE
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan)
+#   undef isnan
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan)
+#  endif
+# else
+/* Ensure isnan is a macro.  */
+#  ifndef isnan
+#   define isnan isnan
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined isnan
+_GL_WARN_REAL_FLOATING_DECL (isnan);
+#  undef isnan
+#  define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x)
+# endif
+#endif
+
+
+#if @GNULIB_SIGNBIT@
+# if (@REPLACE_SIGNBIT_USING_GCC@ \
+      && (!defined __cplusplus || __cplusplus < 201103))
+#  undef signbit
+   /* GCC 4.0 and newer provides three built-ins for signbit.  */
+#  define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \
+    __builtin_signbitf (x))
+# endif
+# if @REPLACE_SIGNBIT@
+#  undef signbit
+_GL_EXTERN_C int gl_signbitf (float arg);
+_GL_EXTERN_C int gl_signbitd (double arg);
+_GL_EXTERN_C int gl_signbitl (long double arg);
+#  if __GNUC__ >= 2 && !defined __STRICT_ANSI__
+#   define _GL_NUM_UINT_WORDS(type) \
+      ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+#   if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf
+#    define gl_signbitf_OPTIMIZED_MACRO
+#    define gl_signbitf(arg) \
+       ({ union { float _value;                                         \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (float)];       \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1;          \
+        })
+#   endif
+#   if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd
+#    define gl_signbitd_OPTIMIZED_MACRO
+#    define gl_signbitd(arg) \
+       ({ union { double _value;                                        \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (double)];      \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1;          \
+        })
+#   endif
+#   if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl
+#    define gl_signbitl_OPTIMIZED_MACRO
+#    define gl_signbitl(arg) \
+       ({ union { long double _value;                                   \
+                  unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \
+                } _m;                                                   \
+          _m._value = (arg);                                            \
+          (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1;        \
+        })
+#   endif
+#  endif
+#  define signbit(x) \
+   (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \
+    sizeof (x) == sizeof (double) ? gl_signbitd (x) : \
+    gl_signbitf (x))
+# endif
+# ifdef __cplusplus
+#  if defined signbit || defined GNULIB_NAMESPACE
+_GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit)
+#   undef signbit
+_GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit)
+#  endif
+# endif
+#elif defined GNULIB_POSIXCHECK
+# if defined signbit
+_GL_WARN_REAL_FLOATING_DECL (signbit);
+#  undef signbit
+#  define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x)
+# endif
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _@GUARD_PREFIX@_MATH_H */
+#endif /* _@GUARD_PREFIX@_MATH_H */
diff --git a/lib/memchr.c b/lib/memchr.c
new file mode 100644 (file)
index 0000000..0b47546
--- /dev/null
@@ -0,0 +1,172 @@
+/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2018
+   Free Software Foundation, Inc.
+
+   Based on strlen implementation by Torbjorn Granlund (tege@sics.se),
+   with help from Dan Sahlin (dan@sics.se) and
+   commentary by Jim Blandy (jimb@ai.mit.edu);
+   adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu),
+   and implemented by Roland McGrath (roland@ai.mit.edu).
+
+NOTE: The canonical source of this file is maintained with the GNU C Library.
+Bugs can be reported to bug-glibc@prep.ai.mit.edu.
+
+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 3 of the License, or 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _LIBC
+# include <config.h>
+#endif
+
+#include <string.h>
+
+#include <stddef.h>
+
+#if defined _LIBC
+# include <memcopy.h>
+#else
+# define reg_char char
+#endif
+
+#include <limits.h>
+
+#if HAVE_BP_SYM_H || defined _LIBC
+# include <bp-sym.h>
+#else
+# define BP_SYM(sym) sym
+#endif
+
+#undef __memchr
+#ifdef _LIBC
+# undef memchr
+#endif
+
+#ifndef weak_alias
+# define __memchr memchr
+#endif
+
+/* Search no more than N bytes of S for C.  */
+void *
+__memchr (void const *s, int c_in, size_t n)
+{
+  /* On 32-bit hardware, choosing longword to be a 32-bit unsigned
+     long instead of a 64-bit uintmax_t tends to give better
+     performance.  On 64-bit hardware, unsigned long is generally 64
+     bits already.  Change this typedef to experiment with
+     performance.  */
+  typedef unsigned long int longword;
+
+  const unsigned char *char_ptr;
+  const longword *longword_ptr;
+  longword repeated_one;
+  longword repeated_c;
+  unsigned reg_char c;
+
+  c = (unsigned char) c_in;
+
+  /* Handle the first few bytes by reading one byte at a time.
+     Do this until CHAR_PTR is aligned on a longword boundary.  */
+  for (char_ptr = (const unsigned char *) s;
+       n > 0 && (size_t) char_ptr % sizeof (longword) != 0;
+       --n, ++char_ptr)
+    if (*char_ptr == c)
+      return (void *) char_ptr;
+
+  longword_ptr = (const longword *) char_ptr;
+
+  /* All these elucidatory comments refer to 4-byte longwords,
+     but the theory applies equally well to any size longwords.  */
+
+  /* Compute auxiliary longword values:
+     repeated_one is a value which has a 1 in every byte.
+     repeated_c has c in every byte.  */
+  repeated_one = 0x01010101;
+  repeated_c = c | (c << 8);
+  repeated_c |= repeated_c << 16;
+  if (0xffffffffU < (longword) -1)
+    {
+      repeated_one |= repeated_one << 31 << 1;
+      repeated_c |= repeated_c << 31 << 1;
+      if (8 < sizeof (longword))
+        {
+          size_t i;
+
+          for (i = 64; i < sizeof (longword) * 8; i *= 2)
+            {
+              repeated_one |= repeated_one << i;
+              repeated_c |= repeated_c << i;
+            }
+        }
+    }
+
+  /* Instead of the traditional loop which tests each byte, we will test a
+     longword at a time.  The tricky part is testing if *any of the four*
+     bytes in the longword in question are equal to c.  We first use an xor
+     with repeated_c.  This reduces the task to testing whether *any of the
+     four* bytes in longword1 is zero.
+
+     We compute tmp =
+       ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7).
+     That is, we perform the following operations:
+       1. Subtract repeated_one.
+       2. & ~longword1.
+       3. & a mask consisting of 0x80 in every byte.
+     Consider what happens in each byte:
+       - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff,
+         and step 3 transforms it into 0x80.  A carry can also be propagated
+         to more significant bytes.
+       - If a byte of longword1 is nonzero, let its lowest 1 bit be at
+         position k (0 <= k <= 7); so the lowest k bits are 0.  After step 1,
+         the byte ends in a single bit of value 0 and k bits of value 1.
+         After step 2, the result is just k bits of value 1: 2^k - 1.  After
+         step 3, the result is 0.  And no carry is produced.
+     So, if longword1 has only non-zero bytes, tmp is zero.
+     Whereas if longword1 has a zero byte, call j the position of the least
+     significant zero byte.  Then the result has a zero at positions 0, ...,
+     j-1 and a 0x80 at position j.  We cannot predict the result at the more
+     significant bytes (positions j+1..3), but it does not matter since we
+     already have a non-zero bit at position 8*j+7.
+
+     So, the test whether any byte in longword1 is zero is equivalent to
+     testing whether tmp is nonzero.  */
+
+  while (n >= sizeof (longword))
+    {
+      longword longword1 = *longword_ptr ^ repeated_c;
+
+      if ((((longword1 - repeated_one) & ~longword1)
+           & (repeated_one << 7)) != 0)
+        break;
+      longword_ptr++;
+      n -= sizeof (longword);
+    }
+
+  char_ptr = (const unsigned char *) longword_ptr;
+
+  /* At this point, we know that either n < sizeof (longword), or one of the
+     sizeof (longword) bytes starting at char_ptr is == c.  On little-endian
+     machines, we could determine the first such byte without any further
+     memory accesses, just by looking at the tmp result from the last loop
+     iteration.  But this does not work on big-endian machines.  Choose code
+     that works in both cases.  */
+
+  for (; n > 0; --n, ++char_ptr)
+    {
+      if (*char_ptr == c)
+        return (void *) char_ptr;
+    }
+
+  return NULL;
+}
+#ifdef weak_alias
+weak_alias (__memchr, BP_SYM (memchr))
+#endif
diff --git a/lib/memchr.valgrind b/lib/memchr.valgrind
new file mode 100644 (file)
index 0000000..60f247e
--- /dev/null
@@ -0,0 +1,14 @@
+# Suppress a valgrind message about use of uninitialized memory in memchr().
+# POSIX states that when the character is found, memchr must not read extra
+# bytes in an overestimated length (for example, where memchr is used to
+# implement strnlen).  However, we use a safe word read to provide a speedup.
+{
+    memchr-value4
+    Memcheck:Value4
+    fun:rpl_memchr
+}
+{
+    memchr-value8
+    Memcheck:Value8
+    fun:rpl_memchr
+}
diff --git a/lib/printf-args.c b/lib/printf-args.c
new file mode 100644 (file)
index 0000000..1079e0a
--- /dev/null
@@ -0,0 +1,187 @@
+/* Decomposed printf argument list.
+   Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2018 Free Software
+   Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+/* This file can be parametrized with the following macros:
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
+     PRINTF_FETCHARGS   Name of the function to be defined.
+     STATIC             Set to 'static' to declare the function static.  */
+
+#ifndef PRINTF_FETCHARGS
+# include <config.h>
+#endif
+
+/* Specification.  */
+#ifndef PRINTF_FETCHARGS
+# include "printf-args.h"
+#endif
+
+#ifdef STATIC
+STATIC
+#endif
+int
+PRINTF_FETCHARGS (va_list args, arguments *a)
+{
+  size_t i;
+  argument *ap;
+
+  for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++)
+    switch (ap->type)
+      {
+      case TYPE_SCHAR:
+        ap->a.a_schar = va_arg (args, /*signed char*/ int);
+        break;
+      case TYPE_UCHAR:
+        ap->a.a_uchar = va_arg (args, /*unsigned char*/ int);
+        break;
+      case TYPE_SHORT:
+        ap->a.a_short = va_arg (args, /*short*/ int);
+        break;
+      case TYPE_USHORT:
+        ap->a.a_ushort = va_arg (args, /*unsigned short*/ int);
+        break;
+      case TYPE_INT:
+        ap->a.a_int = va_arg (args, int);
+        break;
+      case TYPE_UINT:
+        ap->a.a_uint = va_arg (args, unsigned int);
+        break;
+      case TYPE_LONGINT:
+        ap->a.a_longint = va_arg (args, long int);
+        break;
+      case TYPE_ULONGINT:
+        ap->a.a_ulongint = va_arg (args, unsigned long int);
+        break;
+#if HAVE_LONG_LONG_INT
+      case TYPE_LONGLONGINT:
+        ap->a.a_longlongint = va_arg (args, long long int);
+        break;
+      case TYPE_ULONGLONGINT:
+        ap->a.a_ulonglongint = va_arg (args, unsigned long long int);
+        break;
+#endif
+      case TYPE_DOUBLE:
+        ap->a.a_double = va_arg (args, double);
+        break;
+      case TYPE_LONGDOUBLE:
+        ap->a.a_longdouble = va_arg (args, long double);
+        break;
+      case TYPE_CHAR:
+        ap->a.a_char = va_arg (args, int);
+        break;
+#if HAVE_WINT_T
+      case TYPE_WIDE_CHAR:
+        /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by
+           default argument promotions", this is not the case in mingw32,
+           where wint_t is 'unsigned short'.  */
+        ap->a.a_wide_char =
+          (sizeof (wint_t) < sizeof (int)
+           ? (wint_t) va_arg (args, int)
+           : va_arg (args, wint_t));
+        break;
+#endif
+      case TYPE_STRING:
+        ap->a.a_string = va_arg (args, const char *);
+        /* A null pointer is an invalid argument for "%s", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_string == NULL)
+          ap->a.a_string = "(NULL)";
+        break;
+#if HAVE_WCHAR_T
+      case TYPE_WIDE_STRING:
+        ap->a.a_wide_string = va_arg (args, const wchar_t *);
+        /* A null pointer is an invalid argument for "%ls", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_wide_string == NULL)
+          {
+            static const wchar_t wide_null_string[] =
+              {
+                (wchar_t)'(',
+                (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L',
+                (wchar_t)')',
+                (wchar_t)0
+              };
+            ap->a.a_wide_string = wide_null_string;
+          }
+        break;
+#endif
+      case TYPE_POINTER:
+        ap->a.a_pointer = va_arg (args, void *);
+        break;
+      case TYPE_COUNT_SCHAR_POINTER:
+        ap->a.a_count_schar_pointer = va_arg (args, signed char *);
+        break;
+      case TYPE_COUNT_SHORT_POINTER:
+        ap->a.a_count_short_pointer = va_arg (args, short *);
+        break;
+      case TYPE_COUNT_INT_POINTER:
+        ap->a.a_count_int_pointer = va_arg (args, int *);
+        break;
+      case TYPE_COUNT_LONGINT_POINTER:
+        ap->a.a_count_longint_pointer = va_arg (args, long int *);
+        break;
+#if HAVE_LONG_LONG_INT
+      case TYPE_COUNT_LONGLONGINT_POINTER:
+        ap->a.a_count_longlongint_pointer = va_arg (args, long long int *);
+        break;
+#endif
+#if ENABLE_UNISTDIO
+      /* The unistdio extensions.  */
+      case TYPE_U8_STRING:
+        ap->a.a_u8_string = va_arg (args, const uint8_t *);
+        /* A null pointer is an invalid argument for "%U", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_u8_string == NULL)
+          {
+            static const uint8_t u8_null_string[] =
+              { '(', 'N', 'U', 'L', 'L', ')', 0 };
+            ap->a.a_u8_string = u8_null_string;
+          }
+        break;
+      case TYPE_U16_STRING:
+        ap->a.a_u16_string = va_arg (args, const uint16_t *);
+        /* A null pointer is an invalid argument for "%lU", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_u16_string == NULL)
+          {
+            static const uint16_t u16_null_string[] =
+              { '(', 'N', 'U', 'L', 'L', ')', 0 };
+            ap->a.a_u16_string = u16_null_string;
+          }
+        break;
+      case TYPE_U32_STRING:
+        ap->a.a_u32_string = va_arg (args, const uint32_t *);
+        /* A null pointer is an invalid argument for "%llU", but in practice
+           it occurs quite frequently in printf statements that produce
+           debug output.  Use a fallback in this case.  */
+        if (ap->a.a_u32_string == NULL)
+          {
+            static const uint32_t u32_null_string[] =
+              { '(', 'N', 'U', 'L', 'L', ')', 0 };
+            ap->a.a_u32_string = u32_null_string;
+          }
+        break;
+#endif
+      default:
+        /* Unknown type.  */
+        return -1;
+      }
+  return 0;
+}
diff --git a/lib/printf-args.h b/lib/printf-args.h
new file mode 100644 (file)
index 0000000..111e8a5
--- /dev/null
@@ -0,0 +1,158 @@
+/* Decomposed printf argument list.
+   Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2018 Free Software
+   Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _PRINTF_ARGS_H
+#define _PRINTF_ARGS_H
+
+/* This file can be parametrized with the following macros:
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
+     PRINTF_FETCHARGS   Name of the function to be declared.
+     STATIC             Set to 'static' to declare the function static.  */
+
+/* Default parameters.  */
+#ifndef PRINTF_FETCHARGS
+# define PRINTF_FETCHARGS printf_fetchargs
+#endif
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get wchar_t.  */
+#if HAVE_WCHAR_T
+# include <stddef.h>
+#endif
+
+/* Get wint_t.  */
+#if HAVE_WINT_T
+# include <wchar.h>
+#endif
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+
+/* Argument types */
+typedef enum
+{
+  TYPE_NONE,
+  TYPE_SCHAR,
+  TYPE_UCHAR,
+  TYPE_SHORT,
+  TYPE_USHORT,
+  TYPE_INT,
+  TYPE_UINT,
+  TYPE_LONGINT,
+  TYPE_ULONGINT,
+#if HAVE_LONG_LONG_INT
+  TYPE_LONGLONGINT,
+  TYPE_ULONGLONGINT,
+#endif
+  TYPE_DOUBLE,
+  TYPE_LONGDOUBLE,
+  TYPE_CHAR,
+#if HAVE_WINT_T
+  TYPE_WIDE_CHAR,
+#endif
+  TYPE_STRING,
+#if HAVE_WCHAR_T
+  TYPE_WIDE_STRING,
+#endif
+  TYPE_POINTER,
+  TYPE_COUNT_SCHAR_POINTER,
+  TYPE_COUNT_SHORT_POINTER,
+  TYPE_COUNT_INT_POINTER,
+  TYPE_COUNT_LONGINT_POINTER
+#if HAVE_LONG_LONG_INT
+, TYPE_COUNT_LONGLONGINT_POINTER
+#endif
+#if ENABLE_UNISTDIO
+  /* The unistdio extensions.  */
+, TYPE_U8_STRING
+, TYPE_U16_STRING
+, TYPE_U32_STRING
+#endif
+} arg_type;
+
+/* Polymorphic argument */
+typedef struct
+{
+  arg_type type;
+  union
+  {
+    signed char                 a_schar;
+    unsigned char               a_uchar;
+    short                       a_short;
+    unsigned short              a_ushort;
+    int                         a_int;
+    unsigned int                a_uint;
+    long int                    a_longint;
+    unsigned long int           a_ulongint;
+#if HAVE_LONG_LONG_INT
+    long long int               a_longlongint;
+    unsigned long long int      a_ulonglongint;
+#endif
+    float                       a_float;
+    double                      a_double;
+    long double                 a_longdouble;
+    int                         a_char;
+#if HAVE_WINT_T
+    wint_t                      a_wide_char;
+#endif
+    const char*                 a_string;
+#if HAVE_WCHAR_T
+    const wchar_t*              a_wide_string;
+#endif
+    void*                       a_pointer;
+    signed char *               a_count_schar_pointer;
+    short *                     a_count_short_pointer;
+    int *                       a_count_int_pointer;
+    long int *                  a_count_longint_pointer;
+#if HAVE_LONG_LONG_INT
+    long long int *             a_count_longlongint_pointer;
+#endif
+#if ENABLE_UNISTDIO
+    /* The unistdio extensions.  */
+    const uint8_t *             a_u8_string;
+    const uint16_t *            a_u16_string;
+    const uint32_t *            a_u32_string;
+#endif
+  }
+  a;
+}
+argument;
+
+/* Number of directly allocated arguments (no malloc() needed).  */
+#define N_DIRECT_ALLOC_ARGUMENTS 7
+
+typedef struct
+{
+  size_t count;
+  argument *arg;
+  argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS];
+}
+arguments;
+
+
+/* Fetch the arguments, putting them into a. */
+#ifdef STATIC
+STATIC
+#else
+extern
+#endif
+int PRINTF_FETCHARGS (va_list args, arguments *a);
+
+#endif /* _PRINTF_ARGS_H */
diff --git a/lib/printf-frexp.c b/lib/printf-frexp.c
new file mode 100644 (file)
index 0000000..c704090
--- /dev/null
@@ -0,0 +1,190 @@
+/* Split a double into fraction and mantissa, for hexadecimal printf.
+   Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#if ! defined USE_LONG_DOUBLE
+# include <config.h>
+#endif
+
+/* Specification.  */
+#ifdef USE_LONG_DOUBLE
+# include "printf-frexpl.h"
+#else
+# include "printf-frexp.h"
+#endif
+
+#include <float.h>
+#include <math.h>
+#ifdef USE_LONG_DOUBLE
+# include "fpucw.h"
+#endif
+
+/* This file assumes FLT_RADIX = 2.  If FLT_RADIX is a power of 2 greater
+   than 2, or not even a power of 2, some rounding errors can occur, so that
+   then the returned mantissa is only guaranteed to be <= 2.0, not < 2.0.  */
+
+#ifdef USE_LONG_DOUBLE
+# define FUNC printf_frexpl
+# define DOUBLE long double
+# define MIN_EXP LDBL_MIN_EXP
+# if HAVE_FREXPL_IN_LIBC && HAVE_LDEXPL_IN_LIBC
+#  define USE_FREXP_LDEXP
+#  define FREXP frexpl
+#  define LDEXP ldexpl
+# endif
+# define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING
+# define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING ()
+# define END_ROUNDING() END_LONG_DOUBLE_ROUNDING ()
+# define L_(literal) literal##L
+#else
+# define FUNC printf_frexp
+# define DOUBLE double
+# define MIN_EXP DBL_MIN_EXP
+# if HAVE_FREXP_IN_LIBC && HAVE_LDEXP_IN_LIBC
+#  define USE_FREXP_LDEXP
+#  define FREXP frexp
+#  define LDEXP ldexp
+# endif
+# define DECL_ROUNDING
+# define BEGIN_ROUNDING()
+# define END_ROUNDING()
+# define L_(literal) literal
+#endif
+
+DOUBLE
+FUNC (DOUBLE x, int *expptr)
+{
+  int exponent;
+  DECL_ROUNDING
+
+  BEGIN_ROUNDING ();
+
+#ifdef USE_FREXP_LDEXP
+  /* frexp and ldexp are usually faster than the loop below.  */
+  x = FREXP (x, &exponent);
+
+  x = x + x;
+  exponent -= 1;
+
+  if (exponent < MIN_EXP - 1)
+    {
+      x = LDEXP (x, exponent - (MIN_EXP - 1));
+      exponent = MIN_EXP - 1;
+    }
+#else
+  {
+    /* Since the exponent is an 'int', it fits in 64 bits.  Therefore the
+       loops are executed no more than 64 times.  */
+    DOUBLE pow2[64]; /* pow2[i] = 2^2^i */
+    DOUBLE powh[64]; /* powh[i] = 2^-2^i */
+    int i;
+
+    exponent = 0;
+    if (x >= L_(1.0))
+      {
+        /* A nonnegative exponent.  */
+        {
+          DOUBLE pow2_i; /* = pow2[i] */
+          DOUBLE powh_i; /* = powh[i] */
+
+          /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i,
+             x * 2^exponent = argument, x >= 1.0.  */
+          for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5);
+               ;
+               i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i)
+            {
+              if (x >= pow2_i)
+                {
+                  exponent += (1 << i);
+                  x *= powh_i;
+                }
+              else
+                break;
+
+              pow2[i] = pow2_i;
+              powh[i] = powh_i;
+            }
+        }
+        /* Here 1.0 <= x < 2^2^i.  */
+      }
+    else
+      {
+        /* A negative exponent.  */
+        {
+          DOUBLE pow2_i; /* = pow2[i] */
+          DOUBLE powh_i; /* = powh[i] */
+
+          /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i,
+             x * 2^exponent = argument, x < 1.0, exponent >= MIN_EXP - 1.  */
+          for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5);
+               ;
+               i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i)
+            {
+              if (exponent - (1 << i) < MIN_EXP - 1)
+                break;
+
+              exponent -= (1 << i);
+              x *= pow2_i;
+              if (x >= L_(1.0))
+                break;
+
+              pow2[i] = pow2_i;
+              powh[i] = powh_i;
+            }
+        }
+        /* Here either x < 1.0 and exponent - 2^i < MIN_EXP - 1 <= exponent,
+           or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1.  */
+
+        if (x < L_(1.0))
+          /* Invariants: x * 2^exponent = argument, x < 1.0 and
+             exponent - 2^i < MIN_EXP - 1 <= exponent.  */
+          while (i > 0)
+            {
+              i--;
+              if (exponent - (1 << i) >= MIN_EXP - 1)
+                {
+                  exponent -= (1 << i);
+                  x *= pow2[i];
+                  if (x >= L_(1.0))
+                    break;
+                }
+            }
+
+        /* Here either x < 1.0 and exponent = MIN_EXP - 1,
+           or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1.  */
+      }
+
+    /* Invariants: x * 2^exponent = argument, and
+       either x < 1.0 and exponent = MIN_EXP - 1,
+       or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1.  */
+    while (i > 0)
+      {
+        i--;
+        if (x >= pow2[i])
+          {
+            exponent += (1 << i);
+            x *= powh[i];
+          }
+      }
+    /* Here either x < 1.0 and exponent = MIN_EXP - 1,
+       or 1.0 <= x < 2.0 and exponent >= MIN_EXP - 1.  */
+  }
+#endif
+
+  END_ROUNDING ();
+
+  *expptr = exponent;
+  return x;
+}
diff --git a/lib/printf-frexp.h b/lib/printf-frexp.h
new file mode 100644 (file)
index 0000000..814229f
--- /dev/null
@@ -0,0 +1,23 @@
+/* Split a double into fraction and mantissa, for hexadecimal printf.
+   Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Write a finite, positive number x as
+     x = mantissa * 2^exp
+   where exp >= DBL_MIN_EXP - 1,
+         mantissa < 2.0,
+         if x is not a denormalized number then mantissa >= 1.0.
+   Store exp in *EXPPTR and return mantissa.  */
+extern double printf_frexp (double x, int *expptr);
diff --git a/lib/printf-frexpl.c b/lib/printf-frexpl.c
new file mode 100644 (file)
index 0000000..cc8db67
--- /dev/null
@@ -0,0 +1,37 @@
+/* Split a 'long double' into fraction and mantissa, for hexadecimal printf.
+   Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+#if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+
+/* Specification.  */
+# include "printf-frexpl.h"
+
+# include "printf-frexp.h"
+
+long double
+printf_frexpl (long double x, int *expptr)
+{
+  return printf_frexp (x, expptr);
+}
+
+#else
+
+# define USE_LONG_DOUBLE
+# include "printf-frexp.c"
+
+#endif
diff --git a/lib/printf-frexpl.h b/lib/printf-frexpl.h
new file mode 100644 (file)
index 0000000..c48c70c
--- /dev/null
@@ -0,0 +1,23 @@
+/* Split a 'long double' into fraction and mantissa, for hexadecimal printf.
+   Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Write a finite, positive number x as
+     x = mantissa * 2^exp
+   where exp >= LDBL_MIN_EXP - 1,
+         mantissa < 2.0,
+         if x is not a denormalized number then mantissa >= 1.0.
+   Store exp in *EXPPTR and return mantissa.  */
+extern long double printf_frexpl (long double x, int *expptr);
diff --git a/lib/printf-parse.c b/lib/printf-parse.c
new file mode 100644 (file)
index 0000000..e625145
--- /dev/null
@@ -0,0 +1,638 @@
+/* Formatted output to strings.
+   Copyright (C) 1999-2000, 2002-2003, 2006-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+/* This file can be parametrized with the following macros:
+     CHAR_T             The element type of the format string.
+     CHAR_T_ONLY_ASCII  Set to 1 to enable verification that all characters
+                        in the format string are ASCII.
+     DIRECTIVE          Structure denoting a format directive.
+                        Depends on CHAR_T.
+     DIRECTIVES         Structure denoting the set of format directives of a
+                        format string.  Depends on CHAR_T.
+     PRINTF_PARSE       Function that parses a format string.
+                        Depends on CHAR_T.
+     STATIC             Set to 'static' to declare the function static.
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.  */
+
+#ifndef PRINTF_PARSE
+# include <config.h>
+#endif
+
+/* Specification.  */
+#ifndef PRINTF_PARSE
+# include "printf-parse.h"
+#endif
+
+/* Default parameters.  */
+#ifndef PRINTF_PARSE
+# define PRINTF_PARSE printf_parse
+# define CHAR_T char
+# define DIRECTIVE char_directive
+# define DIRECTIVES char_directives
+#endif
+
+/* Get size_t, NULL.  */
+#include <stddef.h>
+
+/* Get intmax_t.  */
+#if defined IN_LIBINTL || defined IN_LIBASPRINTF
+# if HAVE_STDINT_H_WITH_UINTMAX
+#  include <stdint.h>
+# endif
+# if HAVE_INTTYPES_H_WITH_UINTMAX
+#  include <inttypes.h>
+# endif
+#else
+# include <stdint.h>
+#endif
+
+/* malloc(), realloc(), free().  */
+#include <stdlib.h>
+
+/* memcpy().  */
+#include <string.h>
+
+/* errno.  */
+#include <errno.h>
+
+/* Checked size_t computations.  */
+#include "xsize.h"
+
+#if CHAR_T_ONLY_ASCII
+/* c_isascii().  */
+# include "c-ctype.h"
+#endif
+
+#ifdef STATIC
+STATIC
+#endif
+int
+PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a)
+{
+  const CHAR_T *cp = format;    /* pointer into format */
+  size_t arg_posn = 0;          /* number of regular arguments consumed */
+  size_t d_allocated;           /* allocated elements of d->dir */
+  size_t a_allocated;           /* allocated elements of a->arg */
+  size_t max_width_length = 0;
+  size_t max_precision_length = 0;
+
+  d->count = 0;
+  d_allocated = N_DIRECT_ALLOC_DIRECTIVES;
+  d->dir = d->direct_alloc_dir;
+
+  a->count = 0;
+  a_allocated = N_DIRECT_ALLOC_ARGUMENTS;
+  a->arg = a->direct_alloc_arg;
+
+#define REGISTER_ARG(_index_,_type_) \
+  {                                                                     \
+    size_t n = (_index_);                                               \
+    if (n >= a_allocated)                                               \
+      {                                                                 \
+        size_t memory_size;                                             \
+        argument *memory;                                               \
+                                                                        \
+        a_allocated = xtimes (a_allocated, 2);                          \
+        if (a_allocated <= n)                                           \
+          a_allocated = xsum (n, 1);                                    \
+        memory_size = xtimes (a_allocated, sizeof (argument));          \
+        if (size_overflow_p (memory_size))                              \
+          /* Overflow, would lead to out of memory.  */                 \
+          goto out_of_memory;                                           \
+        memory = (argument *) (a->arg != a->direct_alloc_arg            \
+                               ? realloc (a->arg, memory_size)          \
+                               : malloc (memory_size));                 \
+        if (memory == NULL)                                             \
+          /* Out of memory.  */                                         \
+          goto out_of_memory;                                           \
+        if (a->arg == a->direct_alloc_arg)                              \
+          memcpy (memory, a->arg, a->count * sizeof (argument));        \
+        a->arg = memory;                                                \
+      }                                                                 \
+    while (a->count <= n)                                               \
+      a->arg[a->count++].type = TYPE_NONE;                              \
+    if (a->arg[n].type == TYPE_NONE)                                    \
+      a->arg[n].type = (_type_);                                        \
+    else if (a->arg[n].type != (_type_))                                \
+      /* Ambiguous type for positional argument.  */                    \
+      goto error;                                                       \
+  }
+
+  while (*cp != '\0')
+    {
+      CHAR_T c = *cp++;
+      if (c == '%')
+        {
+          size_t arg_index = ARG_NONE;
+          DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */
+
+          /* Initialize the next directive.  */
+          dp->dir_start = cp - 1;
+          dp->flags = 0;
+          dp->width_start = NULL;
+          dp->width_end = NULL;
+          dp->width_arg_index = ARG_NONE;
+          dp->precision_start = NULL;
+          dp->precision_end = NULL;
+          dp->precision_arg_index = ARG_NONE;
+          dp->arg_index = ARG_NONE;
+
+          /* Test for positional argument.  */
+          if (*cp >= '0' && *cp <= '9')
+            {
+              const CHAR_T *np;
+
+              for (np = cp; *np >= '0' && *np <= '9'; np++)
+                ;
+              if (*np == '$')
+                {
+                  size_t n = 0;
+
+                  for (np = cp; *np >= '0' && *np <= '9'; np++)
+                    n = xsum (xtimes (n, 10), *np - '0');
+                  if (n == 0)
+                    /* Positional argument 0.  */
+                    goto error;
+                  if (size_overflow_p (n))
+                    /* n too large, would lead to out of memory later.  */
+                    goto error;
+                  arg_index = n - 1;
+                  cp = np + 1;
+                }
+            }
+
+          /* Read the flags.  */
+          for (;;)
+            {
+              if (*cp == '\'')
+                {
+                  dp->flags |= FLAG_GROUP;
+                  cp++;
+                }
+              else if (*cp == '-')
+                {
+                  dp->flags |= FLAG_LEFT;
+                  cp++;
+                }
+              else if (*cp == '+')
+                {
+                  dp->flags |= FLAG_SHOWSIGN;
+                  cp++;
+                }
+              else if (*cp == ' ')
+                {
+                  dp->flags |= FLAG_SPACE;
+                  cp++;
+                }
+              else if (*cp == '#')
+                {
+                  dp->flags |= FLAG_ALT;
+                  cp++;
+                }
+              else if (*cp == '0')
+                {
+                  dp->flags |= FLAG_ZERO;
+                  cp++;
+                }
+#if __GLIBC__ >= 2 && !defined __UCLIBC__
+              else if (*cp == 'I')
+                {
+                  dp->flags |= FLAG_LOCALIZED;
+                  cp++;
+                }
+#endif
+              else
+                break;
+            }
+
+          /* Parse the field width.  */
+          if (*cp == '*')
+            {
+              dp->width_start = cp;
+              cp++;
+              dp->width_end = cp;
+              if (max_width_length < 1)
+                max_width_length = 1;
+
+              /* Test for positional argument.  */
+              if (*cp >= '0' && *cp <= '9')
+                {
+                  const CHAR_T *np;
+
+                  for (np = cp; *np >= '0' && *np <= '9'; np++)
+                    ;
+                  if (*np == '$')
+                    {
+                      size_t n = 0;
+
+                      for (np = cp; *np >= '0' && *np <= '9'; np++)
+                        n = xsum (xtimes (n, 10), *np - '0');
+                      if (n == 0)
+                        /* Positional argument 0.  */
+                        goto error;
+                      if (size_overflow_p (n))
+                        /* n too large, would lead to out of memory later.  */
+                        goto error;
+                      dp->width_arg_index = n - 1;
+                      cp = np + 1;
+                    }
+                }
+              if (dp->width_arg_index == ARG_NONE)
+                {
+                  dp->width_arg_index = arg_posn++;
+                  if (dp->width_arg_index == ARG_NONE)
+                    /* arg_posn wrapped around.  */
+                    goto error;
+                }
+              REGISTER_ARG (dp->width_arg_index, TYPE_INT);
+            }
+          else if (*cp >= '0' && *cp <= '9')
+            {
+              size_t width_length;
+
+              dp->width_start = cp;
+              for (; *cp >= '0' && *cp <= '9'; cp++)
+                ;
+              dp->width_end = cp;
+              width_length = dp->width_end - dp->width_start;
+              if (max_width_length < width_length)
+                max_width_length = width_length;
+            }
+
+          /* Parse the precision.  */
+          if (*cp == '.')
+            {
+              cp++;
+              if (*cp == '*')
+                {
+                  dp->precision_start = cp - 1;
+                  cp++;
+                  dp->precision_end = cp;
+                  if (max_precision_length < 2)
+                    max_precision_length = 2;
+
+                  /* Test for positional argument.  */
+                  if (*cp >= '0' && *cp <= '9')
+                    {
+                      const CHAR_T *np;
+
+                      for (np = cp; *np >= '0' && *np <= '9'; np++)
+                        ;
+                      if (*np == '$')
+                        {
+                          size_t n = 0;
+
+                          for (np = cp; *np >= '0' && *np <= '9'; np++)
+                            n = xsum (xtimes (n, 10), *np - '0');
+                          if (n == 0)
+                            /* Positional argument 0.  */
+                            goto error;
+                          if (size_overflow_p (n))
+                            /* n too large, would lead to out of memory
+                               later.  */
+                            goto error;
+                          dp->precision_arg_index = n - 1;
+                          cp = np + 1;
+                        }
+                    }
+                  if (dp->precision_arg_index == ARG_NONE)
+                    {
+                      dp->precision_arg_index = arg_posn++;
+                      if (dp->precision_arg_index == ARG_NONE)
+                        /* arg_posn wrapped around.  */
+                        goto error;
+                    }
+                  REGISTER_ARG (dp->precision_arg_index, TYPE_INT);
+                }
+              else
+                {
+                  size_t precision_length;
+
+                  dp->precision_start = cp - 1;
+                  for (; *cp >= '0' && *cp <= '9'; cp++)
+                    ;
+                  dp->precision_end = cp;
+                  precision_length = dp->precision_end - dp->precision_start;
+                  if (max_precision_length < precision_length)
+                    max_precision_length = precision_length;
+                }
+            }
+
+          {
+            arg_type type;
+
+            /* Parse argument type/size specifiers.  */
+            {
+              int flags = 0;
+
+              for (;;)
+                {
+                  if (*cp == 'h')
+                    {
+                      flags |= (1 << (flags & 1));
+                      cp++;
+                    }
+                  else if (*cp == 'L')
+                    {
+                      flags |= 4;
+                      cp++;
+                    }
+                  else if (*cp == 'l')
+                    {
+                      flags += 8;
+                      cp++;
+                    }
+                  else if (*cp == 'j')
+                    {
+                      if (sizeof (intmax_t) > sizeof (long))
+                        {
+                          /* intmax_t = long long */
+                          flags += 16;
+                        }
+                      else if (sizeof (intmax_t) > sizeof (int))
+                        {
+                          /* intmax_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+                  else if (*cp == 'z' || *cp == 'Z')
+                    {
+                      /* 'z' is standardized in ISO C 99, but glibc uses 'Z'
+                         because the warning facility in gcc-2.95.2 understands
+                         only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784).  */
+                      if (sizeof (size_t) > sizeof (long))
+                        {
+                          /* size_t = long long */
+                          flags += 16;
+                        }
+                      else if (sizeof (size_t) > sizeof (int))
+                        {
+                          /* size_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+                  else if (*cp == 't')
+                    {
+                      if (sizeof (ptrdiff_t) > sizeof (long))
+                        {
+                          /* ptrdiff_t = long long */
+                          flags += 16;
+                        }
+                      else if (sizeof (ptrdiff_t) > sizeof (int))
+                        {
+                          /* ptrdiff_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+#if defined __APPLE__ && defined __MACH__
+                  /* On Mac OS X 10.3, PRIdMAX is defined as "qd".
+                     We cannot change it to "lld" because PRIdMAX must also
+                     be understood by the system's printf routines.  */
+                  else if (*cp == 'q')
+                    {
+                      if (64 / 8 > sizeof (long))
+                        {
+                          /* int64_t = long long */
+                          flags += 16;
+                        }
+                      else
+                        {
+                          /* int64_t = long */
+                          flags += 8;
+                        }
+                      cp++;
+                    }
+#endif
+#if defined _WIN32 && ! defined __CYGWIN__
+                  /* On native Windows, PRIdMAX is defined as "I64d".
+                     We cannot change it to "lld" because PRIdMAX must also
+                     be understood by the system's printf routines.  */
+                  else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4')
+                    {
+                      if (64 / 8 > sizeof (long))
+                        {
+                          /* __int64 = long long */
+                          flags += 16;
+                        }
+                      else
+                        {
+                          /* __int64 = long */
+                          flags += 8;
+                        }
+                      cp += 3;
+                    }
+#endif
+                  else
+                    break;
+                }
+
+              /* Read the conversion character.  */
+              c = *cp++;
+              switch (c)
+                {
+                case 'd': case 'i':
+#if HAVE_LONG_LONG_INT
+                  /* If 'long long' exists and is larger than 'long':  */
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_LONGLONGINT;
+                  else
+#endif
+                  /* If 'long long' exists and is the same as 'long', we parse
+                     "lld" into TYPE_LONGINT.  */
+                  if (flags >= 8)
+                    type = TYPE_LONGINT;
+                  else if (flags & 2)
+                    type = TYPE_SCHAR;
+                  else if (flags & 1)
+                    type = TYPE_SHORT;
+                  else
+                    type = TYPE_INT;
+                  break;
+                case 'o': case 'u': case 'x': case 'X':
+#if HAVE_LONG_LONG_INT
+                  /* If 'long long' exists and is larger than 'long':  */
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_ULONGLONGINT;
+                  else
+#endif
+                  /* If 'unsigned long long' exists and is the same as
+                     'unsigned long', we parse "llu" into TYPE_ULONGINT.  */
+                  if (flags >= 8)
+                    type = TYPE_ULONGINT;
+                  else if (flags & 2)
+                    type = TYPE_UCHAR;
+                  else if (flags & 1)
+                    type = TYPE_USHORT;
+                  else
+                    type = TYPE_UINT;
+                  break;
+                case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+                case 'a': case 'A':
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_LONGDOUBLE;
+                  else
+                    type = TYPE_DOUBLE;
+                  break;
+                case 'c':
+                  if (flags >= 8)
+#if HAVE_WINT_T
+                    type = TYPE_WIDE_CHAR;
+#else
+                    goto error;
+#endif
+                  else
+                    type = TYPE_CHAR;
+                  break;
+#if HAVE_WINT_T
+                case 'C':
+                  type = TYPE_WIDE_CHAR;
+                  c = 'c';
+                  break;
+#endif
+                case 's':
+                  if (flags >= 8)
+#if HAVE_WCHAR_T
+                    type = TYPE_WIDE_STRING;
+#else
+                    goto error;
+#endif
+                  else
+                    type = TYPE_STRING;
+                  break;
+#if HAVE_WCHAR_T
+                case 'S':
+                  type = TYPE_WIDE_STRING;
+                  c = 's';
+                  break;
+#endif
+                case 'p':
+                  type = TYPE_POINTER;
+                  break;
+                case 'n':
+#if HAVE_LONG_LONG_INT
+                  /* If 'long long' exists and is larger than 'long':  */
+                  if (flags >= 16 || (flags & 4))
+                    type = TYPE_COUNT_LONGLONGINT_POINTER;
+                  else
+#endif
+                  /* If 'long long' exists and is the same as 'long', we parse
+                     "lln" into TYPE_COUNT_LONGINT_POINTER.  */
+                  if (flags >= 8)
+                    type = TYPE_COUNT_LONGINT_POINTER;
+                  else if (flags & 2)
+                    type = TYPE_COUNT_SCHAR_POINTER;
+                  else if (flags & 1)
+                    type = TYPE_COUNT_SHORT_POINTER;
+                  else
+                    type = TYPE_COUNT_INT_POINTER;
+                  break;
+#if ENABLE_UNISTDIO
+                /* The unistdio extensions.  */
+                case 'U':
+                  if (flags >= 16)
+                    type = TYPE_U32_STRING;
+                  else if (flags >= 8)
+                    type = TYPE_U16_STRING;
+                  else
+                    type = TYPE_U8_STRING;
+                  break;
+#endif
+                case '%':
+                  type = TYPE_NONE;
+                  break;
+                default:
+                  /* Unknown conversion character.  */
+                  goto error;
+                }
+            }
+
+            if (type != TYPE_NONE)
+              {
+                dp->arg_index = arg_index;
+                if (dp->arg_index == ARG_NONE)
+                  {
+                    dp->arg_index = arg_posn++;
+                    if (dp->arg_index == ARG_NONE)
+                      /* arg_posn wrapped around.  */
+                      goto error;
+                  }
+                REGISTER_ARG (dp->arg_index, type);
+              }
+            dp->conversion = c;
+            dp->dir_end = cp;
+          }
+
+          d->count++;
+          if (d->count >= d_allocated)
+            {
+              size_t memory_size;
+              DIRECTIVE *memory;
+
+              d_allocated = xtimes (d_allocated, 2);
+              memory_size = xtimes (d_allocated, sizeof (DIRECTIVE));
+              if (size_overflow_p (memory_size))
+                /* Overflow, would lead to out of memory.  */
+                goto out_of_memory;
+              memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir
+                                      ? realloc (d->dir, memory_size)
+                                      : malloc (memory_size));
+              if (memory == NULL)
+                /* Out of memory.  */
+                goto out_of_memory;
+              if (d->dir == d->direct_alloc_dir)
+                memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE));
+              d->dir = memory;
+            }
+        }
+#if CHAR_T_ONLY_ASCII
+      else if (!c_isascii (c))
+        {
+          /* Non-ASCII character.  Not supported.  */
+          goto error;
+        }
+#endif
+    }
+  d->dir[d->count].dir_start = cp;
+
+  d->max_width_length = max_width_length;
+  d->max_precision_length = max_precision_length;
+  return 0;
+
+error:
+  if (a->arg != a->direct_alloc_arg)
+    free (a->arg);
+  if (d->dir != d->direct_alloc_dir)
+    free (d->dir);
+  errno = EINVAL;
+  return -1;
+
+out_of_memory:
+  if (a->arg != a->direct_alloc_arg)
+    free (a->arg);
+  if (d->dir != d->direct_alloc_dir)
+    free (d->dir);
+  errno = ENOMEM;
+  return -1;
+}
+
+#undef PRINTF_PARSE
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef CHAR_T_ONLY_ASCII
+#undef CHAR_T
diff --git a/lib/printf-parse.h b/lib/printf-parse.h
new file mode 100644 (file)
index 0000000..16d817e
--- /dev/null
@@ -0,0 +1,193 @@
+/* Parse printf format string.
+   Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2018 Free Software
+   Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _PRINTF_PARSE_H
+#define _PRINTF_PARSE_H
+
+/* This file can be parametrized with the following macros:
+     ENABLE_UNISTDIO    Set to 1 to enable the unistdio extensions.
+     STATIC             Set to 'static' to declare the function static.  */
+
+#if HAVE_FEATURES_H
+# include <features.h> /* for __GLIBC__, __UCLIBC__ */
+#endif
+
+#include "printf-args.h"
+
+
+/* Flags */
+#define FLAG_GROUP       1      /* ' flag */
+#define FLAG_LEFT        2      /* - flag */
+#define FLAG_SHOWSIGN    4      /* + flag */
+#define FLAG_SPACE       8      /* space flag */
+#define FLAG_ALT        16      /* # flag */
+#define FLAG_ZERO       32
+#if __GLIBC__ >= 2 && !defined __UCLIBC__
+# define FLAG_LOCALIZED 64      /* I flag, uses localized digits */
+#endif
+
+/* arg_index value indicating that no argument is consumed.  */
+#define ARG_NONE        (~(size_t)0)
+
+/* xxx_directive: A parsed directive.
+   xxx_directives: A parsed format string.  */
+
+/* Number of directly allocated directives (no malloc() needed).  */
+#define N_DIRECT_ALLOC_DIRECTIVES 7
+
+/* A parsed directive.  */
+typedef struct
+{
+  const char* dir_start;
+  const char* dir_end;
+  int flags;
+  const char* width_start;
+  const char* width_end;
+  size_t width_arg_index;
+  const char* precision_start;
+  const char* precision_end;
+  size_t precision_arg_index;
+  char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+char_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  char_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+  char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
+}
+char_directives;
+
+#if ENABLE_UNISTDIO
+
+/* A parsed directive.  */
+typedef struct
+{
+  const uint8_t* dir_start;
+  const uint8_t* dir_end;
+  int flags;
+  const uint8_t* width_start;
+  const uint8_t* width_end;
+  size_t width_arg_index;
+  const uint8_t* precision_start;
+  const uint8_t* precision_end;
+  size_t precision_arg_index;
+  uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+u8_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  u8_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+  u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
+}
+u8_directives;
+
+/* A parsed directive.  */
+typedef struct
+{
+  const uint16_t* dir_start;
+  const uint16_t* dir_end;
+  int flags;
+  const uint16_t* width_start;
+  const uint16_t* width_end;
+  size_t width_arg_index;
+  const uint16_t* precision_start;
+  const uint16_t* precision_end;
+  size_t precision_arg_index;
+  uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+u16_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  u16_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+  u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
+}
+u16_directives;
+
+/* A parsed directive.  */
+typedef struct
+{
+  const uint32_t* dir_start;
+  const uint32_t* dir_end;
+  int flags;
+  const uint32_t* width_start;
+  const uint32_t* width_end;
+  size_t width_arg_index;
+  const uint32_t* precision_start;
+  const uint32_t* precision_end;
+  size_t precision_arg_index;
+  uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */
+  size_t arg_index;
+}
+u32_directive;
+
+/* A parsed format string.  */
+typedef struct
+{
+  size_t count;
+  u32_directive *dir;
+  size_t max_width_length;
+  size_t max_precision_length;
+  u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES];
+}
+u32_directives;
+
+#endif
+
+
+/* Parses the format string.  Fills in the number N of directives, and fills
+   in directives[0], ..., directives[N-1], and sets directives[N].dir_start
+   to the end of the format string.  Also fills in the arg_type fields of the
+   arguments and the needed count of arguments.  */
+#if ENABLE_UNISTDIO
+extern int
+       ulc_printf_parse (const char *format, char_directives *d, arguments *a);
+extern int
+       u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a);
+extern int
+       u16_printf_parse (const uint16_t *format, u16_directives *d,
+                         arguments *a);
+extern int
+       u32_printf_parse (const uint32_t *format, u32_directives *d,
+                         arguments *a);
+#else
+# ifdef STATIC
+STATIC
+# else
+extern
+# endif
+int printf_parse (const char *format, char_directives *d, arguments *a);
+#endif
+
+#endif /* _PRINTF_PARSE_H */
diff --git a/lib/signbitd.c b/lib/signbitd.c
new file mode 100644 (file)
index 0000000..c1bec94
--- /dev/null
@@ -0,0 +1,64 @@
+/* signbit() macro: Determine the sign bit of a floating-point number.
+   Copyright (C) 2007-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <math.h>
+
+#include <string.h>
+#include "isnand-nolibm.h"
+#include "float+.h"
+
+#ifdef gl_signbitd_OPTIMIZED_MACRO
+# undef gl_signbitd
+#endif
+
+int
+gl_signbitd (double arg)
+{
+#if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT
+  /* The use of a union to extract the bits of the representation of a
+     'long double' is safe in practice, despite of the "aliasing rules" of
+     C99, because the GCC docs say
+       "Even with '-fstrict-aliasing', type-punning is allowed, provided the
+        memory is accessed through the union type."
+     and similarly for other compilers.  */
+# define NWORDS \
+    ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+  union { double value; unsigned int word[NWORDS]; } m;
+  m.value = arg;
+  return (m.word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1;
+#elif HAVE_COPYSIGN_IN_LIBC
+  return copysign (1.0, arg) < 0;
+#else
+  /* This does not do the right thing for NaN, but this is irrelevant for
+     most use cases.  */
+  if (isnand (arg))
+    return 0;
+  if (arg < 0.0)
+    return 1;
+  else if (arg == 0.0)
+    {
+      /* Distinguish 0.0 and -0.0.  */
+      static double plus_zero = 0.0;
+      double arg_mem = arg;
+      return (memcmp (&plus_zero, &arg_mem, SIZEOF_DBL) != 0);
+    }
+  else
+    return 0;
+#endif
+}
diff --git a/lib/signbitf.c b/lib/signbitf.c
new file mode 100644 (file)
index 0000000..de28325
--- /dev/null
@@ -0,0 +1,64 @@
+/* signbit() macro: Determine the sign bit of a floating-point number.
+   Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <math.h>
+
+#include <string.h>
+#include "isnanf-nolibm.h"
+#include "float+.h"
+
+#ifdef gl_signbitf_OPTIMIZED_MACRO
+# undef gl_signbitf
+#endif
+
+int
+gl_signbitf (float arg)
+{
+#if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT
+  /* The use of a union to extract the bits of the representation of a
+     'long double' is safe in practice, despite of the "aliasing rules" of
+     C99, because the GCC docs say
+       "Even with '-fstrict-aliasing', type-punning is allowed, provided the
+        memory is accessed through the union type."
+     and similarly for other compilers.  */
+# define NWORDS \
+    ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+  union { float value; unsigned int word[NWORDS]; } m;
+  m.value = arg;
+  return (m.word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1;
+#elif HAVE_COPYSIGNF_IN_LIBC
+  return copysignf (1.0f, arg) < 0;
+#else
+  /* This does not do the right thing for NaN, but this is irrelevant for
+     most use cases.  */
+  if (isnanf (arg))
+    return 0;
+  if (arg < 0.0f)
+    return 1;
+  else if (arg == 0.0f)
+    {
+      /* Distinguish 0.0f and -0.0f.  */
+      static float plus_zero = 0.0f;
+      float arg_mem = arg;
+      return (memcmp (&plus_zero, &arg_mem, SIZEOF_FLT) != 0);
+    }
+  else
+    return 0;
+#endif
+}
diff --git a/lib/signbitl.c b/lib/signbitl.c
new file mode 100644 (file)
index 0000000..83760e4
--- /dev/null
@@ -0,0 +1,64 @@
+/* signbit() macro: Determine the sign bit of a floating-point number.
+   Copyright (C) 2007, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <math.h>
+
+#include <string.h>
+#include "isnanl-nolibm.h"
+#include "float+.h"
+
+#ifdef gl_signbitl_OPTIMIZED_MACRO
+# undef gl_signbitl
+#endif
+
+int
+gl_signbitl (long double arg)
+{
+#if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT
+  /* The use of a union to extract the bits of the representation of a
+     'long double' is safe in practice, despite of the "aliasing rules" of
+     C99, because the GCC docs say
+       "Even with '-fstrict-aliasing', type-punning is allowed, provided the
+        memory is accessed through the union type."
+     and similarly for other compilers.  */
+# define NWORDS \
+    ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+  union { long double value; unsigned int word[NWORDS]; } m;
+  m.value = arg;
+  return (m.word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1;
+#elif HAVE_COPYSIGNL_IN_LIBC
+  return copysignl (1.0L, arg) < 0;
+#else
+  /* This does not do the right thing for NaN, but this is irrelevant for
+     most use cases.  */
+  if (isnanl (arg))
+    return 0;
+  if (arg < 0.0L)
+    return 1;
+  else if (arg == 0.0L)
+    {
+      /* Distinguish 0.0L and -0.0L.  */
+      static long double plus_zero = 0.0L;
+      long double arg_mem = arg;
+      return (memcmp (&plus_zero, &arg_mem, SIZEOF_LDBL) != 0);
+    }
+  else
+    return 0;
+#endif
+}
diff --git a/lib/size_max.h b/lib/size_max.h
new file mode 100644 (file)
index 0000000..00500b5
--- /dev/null
@@ -0,0 +1,30 @@
+/* size_max.h -- declare SIZE_MAX through system headers
+   Copyright (C) 2005-2006, 2009-2018 Free Software Foundation, Inc.
+   Written by Simon Josefsson.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef GNULIB_SIZE_MAX_H
+#define GNULIB_SIZE_MAX_H
+
+/* Get SIZE_MAX declaration on systems like Solaris 7/8/9.  */
+# include <limits.h>
+/* Get SIZE_MAX declaration on systems like glibc 2.  */
+# if HAVE_STDINT_H
+#  include <stdint.h>
+# endif
+/* On systems where these include files don't define it, SIZE_MAX is defined
+   in config.h.  */
+
+#endif /* GNULIB_SIZE_MAX_H */
diff --git a/lib/snprintf.c b/lib/snprintf.c
new file mode 100644 (file)
index 0000000..8a9971b
--- /dev/null
@@ -0,0 +1,71 @@
+/* Formatted output to strings.
+   Copyright (C) 2004, 2006-2018 Free Software Foundation, Inc.
+   Written by Simon Josefsson and Paul Eggert.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "vasnprintf.h"
+
+/* Print formatted output to string STR.  Similar to sprintf, but
+   additional length SIZE limit how much is written into STR.  Returns
+   string length of formatted string (which may be larger than SIZE).
+   STR may be NULL, in which case nothing will be written.  On error,
+   return a negative value.  */
+int
+snprintf (char *str, size_t size, const char *format, ...)
+{
+  char *output;
+  size_t len;
+  size_t lenbuf = size;
+  va_list args;
+
+  va_start (args, format);
+  output = vasnprintf (str, &lenbuf, format, args);
+  len = lenbuf;
+  va_end (args);
+
+  if (!output)
+    return -1;
+
+  if (output != str)
+    {
+      if (size)
+        {
+          size_t pruned_len = (len < size ? len : size - 1);
+          memcpy (str, output, pruned_len);
+          str[pruned_len] = '\0';
+        }
+
+      free (output);
+    }
+
+  if (INT_MAX < len)
+    {
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  return len;
+}
diff --git a/lib/stddef.in.h b/lib/stddef.in.h
new file mode 100644 (file)
index 0000000..8329a9b
--- /dev/null
@@ -0,0 +1,114 @@
+/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
+
+   Copyright (C) 2009-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * POSIX 2008 <stddef.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/stddef.h.html>
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_wchar_t || defined __need_size_t  \
+  || defined __need_ptrdiff_t || defined __need_NULL \
+  || defined __need_wint_t
+/* Special invocation convention inside gcc header files.  In
+   particular, gcc provides a version of <stddef.h> that blindly
+   redefines NULL even when __need_wint_t was defined, even though
+   wint_t is not normally provided by <stddef.h>.  Hence, we must
+   remember if special invocation has ever been used to obtain wint_t,
+   in which case we need to clean up NULL yet again.  */
+
+# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T)
+#  ifdef __need_wint_t
+#   define _GL_STDDEF_WINT_T
+#  endif
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+# endif
+
+#else
+/* Normal invocation convention.  */
+
+# ifndef _@GUARD_PREFIX@_STDDEF_H
+
+/* The include_next requires a split double-inclusion guard.  */
+
+#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
+
+/* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
+#  if (@REPLACE_NULL@ \
+       && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T))
+#   undef NULL
+#   ifdef __cplusplus
+   /* ISO C++ says that the macro NULL must expand to an integer constant
+      expression, hence '((void *) 0)' is not allowed in C++.  */
+#    if __GNUG__ >= 3
+    /* GNU C++ has a __null macro that behaves like an integer ('int' or
+       'long') but has the same size as a pointer.  Use that, to avoid
+       warnings.  */
+#     define NULL __null
+#    else
+#     define NULL 0L
+#    endif
+#   else
+#    define NULL ((void *) 0)
+#   endif
+#  endif
+
+#  ifndef _@GUARD_PREFIX@_STDDEF_H
+#   define _@GUARD_PREFIX@_STDDEF_H
+
+/* Some platforms lack wchar_t.  */
+#if !@HAVE_WCHAR_T@
+# define wchar_t int
+#endif
+
+/* Some platforms lack max_align_t.  The check for _GCC_MAX_ALIGN_T is
+   a hack in case the configure-time test was done with g++ even though
+   we are currently compiling with gcc.  */
+#if ! (@HAVE_MAX_ALIGN_T@ || defined _GCC_MAX_ALIGN_T)
+# if !GNULIB_defined_max_align_t
+/* On the x86, the maximum storage alignment of double, long, etc. is 4,
+   but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8,
+   and the C11 standard allows this.  Work around this problem by
+   using __alignof__ (which returns 8 for double) rather than _Alignof
+   (which returns 4), and align each union member accordingly.  */
+#  ifdef __GNUC__
+#   define _GL_STDDEF_ALIGNAS(type) \
+      __attribute__ ((__aligned__ (__alignof__ (type))))
+#  else
+#   define _GL_STDDEF_ALIGNAS(type) /* */
+#  endif
+typedef union
+{
+  char *__p _GL_STDDEF_ALIGNAS (char *);
+  double __d _GL_STDDEF_ALIGNAS (double);
+  long double __ld _GL_STDDEF_ALIGNAS (long double);
+  long int __i _GL_STDDEF_ALIGNAS (long int);
+} rpl_max_align_t;
+#  define max_align_t rpl_max_align_t
+#  define GNULIB_defined_max_align_t 1
+# endif
+#endif
+
+#  endif /* _@GUARD_PREFIX@_STDDEF_H */
+# endif /* _@GUARD_PREFIX@_STDDEF_H */
+#endif /* __need_XXX */
diff --git a/lib/stdint.in.h b/lib/stdint.in.h
new file mode 100644 (file)
index 0000000..94e7c81
--- /dev/null
@@ -0,0 +1,726 @@
+/* Copyright (C) 2001-2002, 2004-2018 Free Software Foundation, Inc.
+   Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
+   This file is part of gnulib.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+/*
+ * ISO C 99 <stdint.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/stdint.h.html>
+ */
+
+#ifndef _@GUARD_PREFIX@_STDINT_H
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+/* When including a system file that in turn includes <inttypes.h>,
+   use the system <inttypes.h>, not our substitute.  This avoids
+   problems with (for example) VMS, whose <sys/bitypes.h> includes
+   <inttypes.h>.  */
+#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* On Android (Bionic libc), <sys/types.h> includes this file before
+   having defined 'time_t'.  Therefore in this case avoid including
+   other system header files; just include the system's <stdint.h>.
+   Ideally we should test __BIONIC__ here, but it is only defined after
+   <sys/cdefs.h> has been included; hence test __ANDROID__ instead.  */
+#if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#else
+
+/* Get those types that are already defined in other system include
+   files, so that we can "#define int8_t signed char" below without
+   worrying about a later system include file containing a "typedef
+   signed char int8_t;" that will get messed up by our macro.  Our
+   macros should all be consistent with the system versions, except
+   for the "fast" types and macros, which we recommend against using
+   in public interfaces due to compiler differences.  */
+
+#if @HAVE_STDINT_H@
+# if defined __sgi && ! defined __c99
+   /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
+      with "This header file is to be used only for c99 mode compilations"
+      diagnostics.  */
+#  define __STDINT_H__
+# endif
+
+  /* Some pre-C++11 <stdint.h> implementations need this.  */
+# ifdef __cplusplus
+#  ifndef __STDC_CONSTANT_MACROS
+#   define __STDC_CONSTANT_MACROS 1
+#  endif
+#  ifndef __STDC_LIMIT_MACROS
+#   define __STDC_LIMIT_MACROS 1
+#  endif
+# endif
+
+  /* Other systems may have an incomplete or buggy <stdint.h>.
+     Include it before <inttypes.h>, since any "#include <stdint.h>"
+     in <inttypes.h> would reinclude us, skipping our contents because
+     _@GUARD_PREFIX@_STDINT_H is defined.
+     The include_next requires a split double-inclusion guard.  */
+# @INCLUDE_NEXT@ @NEXT_STDINT_H@
+#endif
+
+#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
+#define _@GUARD_PREFIX@_STDINT_H
+
+/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX,
+   LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH.  */
+#include <limits.h>
+
+/* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides
+   wint_t.  */
+#if @GNULIB_OVERRIDES_WINT_T@
+# undef WINT_MIN
+# undef WINT_MAX
+# define WINT_MIN 0x0U
+# define WINT_MAX 0xffffffffU
+#endif
+
+#if ! @HAVE_C99_STDINT_H@
+
+/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
+   IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
+   AIX 5.2 <sys/types.h> isn't needed and causes troubles.
+   Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
+   relies on the system <stdint.h> definitions, so include
+   <sys/types.h> after @NEXT_STDINT_H@.  */
+# if @HAVE_SYS_TYPES_H@ && ! defined _AIX
+#  include <sys/types.h>
+# endif
+
+# if @HAVE_INTTYPES_H@
+  /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
+     int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
+     <inttypes.h> also defines intptr_t and uintptr_t.  */
+#  include <inttypes.h>
+# elif @HAVE_SYS_INTTYPES_H@
+  /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
+     the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
+#  include <sys/inttypes.h>
+# endif
+
+# if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
+  /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
+     int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
+     included by <sys/types.h>.  */
+#  include <sys/bitypes.h>
+# endif
+
+# undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
+
+/* Minimum and maximum values for an integer type under the usual assumption.
+   Return an unspecified value if BITS == 0, adding a check to pacify
+   picky compilers.  */
+
+/* These are separate macros, because if you try to merge these macros into
+   a single one, HP-UX cc rejects the resulting expression in constant
+   expressions.  */
+# define _STDINT_UNSIGNED_MIN(bits, zero) \
+    (zero)
+# define _STDINT_SIGNED_MIN(bits, zero) \
+    (~ _STDINT_MAX (1, bits, zero))
+
+# define _STDINT_MAX(signed, bits, zero) \
+    (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
+
+#if !GNULIB_defined_stdint_types
+
+/* 7.18.1.1. Exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+# undef int8_t
+# undef uint8_t
+typedef signed char gl_int8_t;
+typedef unsigned char gl_uint8_t;
+# define int8_t gl_int8_t
+# define uint8_t gl_uint8_t
+
+# undef int16_t
+# undef uint16_t
+typedef short int gl_int16_t;
+typedef unsigned short int gl_uint16_t;
+# define int16_t gl_int16_t
+# define uint16_t gl_uint16_t
+
+# undef int32_t
+# undef uint32_t
+typedef int gl_int32_t;
+typedef unsigned int gl_uint32_t;
+# define int32_t gl_int32_t
+# define uint32_t gl_uint32_t
+
+/* If the system defines INT64_MAX, assume int64_t works.  That way,
+   if the underlying platform defines int64_t to be a 64-bit long long
+   int, the code below won't mistakenly define it to be a 64-bit long
+   int, which would mess up C++ name mangling.  We must use #ifdef
+   rather than #if, to avoid an error with HP-UX 10.20 cc.  */
+
+# ifdef INT64_MAX
+#  define GL_INT64_T
+# else
+/* Do not undefine int64_t if gnulib is not being used with 64-bit
+   types, since otherwise it breaks platforms like Tandem/NSK.  */
+#  if LONG_MAX >> 31 >> 31 == 1
+#   undef int64_t
+typedef long int gl_int64_t;
+#   define int64_t gl_int64_t
+#   define GL_INT64_T
+#  elif defined _MSC_VER
+#   undef int64_t
+typedef __int64 gl_int64_t;
+#   define int64_t gl_int64_t
+#   define GL_INT64_T
+#  elif @HAVE_LONG_LONG_INT@
+#   undef int64_t
+typedef long long int gl_int64_t;
+#   define int64_t gl_int64_t
+#   define GL_INT64_T
+#  endif
+# endif
+
+# ifdef UINT64_MAX
+#  define GL_UINT64_T
+# else
+#  if ULONG_MAX >> 31 >> 31 >> 1 == 1
+#   undef uint64_t
+typedef unsigned long int gl_uint64_t;
+#   define uint64_t gl_uint64_t
+#   define GL_UINT64_T
+#  elif defined _MSC_VER
+#   undef uint64_t
+typedef unsigned __int64 gl_uint64_t;
+#   define uint64_t gl_uint64_t
+#   define GL_UINT64_T
+#  elif @HAVE_UNSIGNED_LONG_LONG_INT@
+#   undef uint64_t
+typedef unsigned long long int gl_uint64_t;
+#   define uint64_t gl_uint64_t
+#   define GL_UINT64_T
+#  endif
+# endif
+
+/* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
+# define _UINT8_T
+# define _UINT32_T
+# define _UINT64_T
+
+
+/* 7.18.1.2. Minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+# undef int_least8_t
+# undef uint_least8_t
+# undef int_least16_t
+# undef uint_least16_t
+# undef int_least32_t
+# undef uint_least32_t
+# undef int_least64_t
+# undef uint_least64_t
+# define int_least8_t int8_t
+# define uint_least8_t uint8_t
+# define int_least16_t int16_t
+# define uint_least16_t uint16_t
+# define int_least32_t int32_t
+# define uint_least32_t uint32_t
+# ifdef GL_INT64_T
+#  define int_least64_t int64_t
+# endif
+# ifdef GL_UINT64_T
+#  define uint_least64_t uint64_t
+# endif
+
+/* 7.18.1.3. Fastest minimum-width integer types */
+
+/* Note: Other <stdint.h> substitutes may define these types differently.
+   It is not recommended to use these types in public header files. */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  The following code normally
+   uses types consistent with glibc, as that lessens the chance of
+   incompatibility with older GNU hosts.  */
+
+# undef int_fast8_t
+# undef uint_fast8_t
+# undef int_fast16_t
+# undef uint_fast16_t
+# undef int_fast32_t
+# undef uint_fast32_t
+# undef int_fast64_t
+# undef uint_fast64_t
+typedef signed char gl_int_fast8_t;
+typedef unsigned char gl_uint_fast8_t;
+
+# ifdef __sun
+/* Define types compatible with SunOS 5.10, so that code compiled under
+   earlier SunOS versions works with code compiled under SunOS 5.10.  */
+typedef int gl_int_fast32_t;
+typedef unsigned int gl_uint_fast32_t;
+# else
+typedef long int gl_int_fast32_t;
+typedef unsigned long int gl_uint_fast32_t;
+# endif
+typedef gl_int_fast32_t gl_int_fast16_t;
+typedef gl_uint_fast32_t gl_uint_fast16_t;
+
+# define int_fast8_t gl_int_fast8_t
+# define uint_fast8_t gl_uint_fast8_t
+# define int_fast16_t gl_int_fast16_t
+# define uint_fast16_t gl_uint_fast16_t
+# define int_fast32_t gl_int_fast32_t
+# define uint_fast32_t gl_uint_fast32_t
+# ifdef GL_INT64_T
+#  define int_fast64_t int64_t
+# endif
+# ifdef GL_UINT64_T
+#  define uint_fast64_t uint64_t
+# endif
+
+/* 7.18.1.4. Integer types capable of holding object pointers */
+
+/* kLIBC's stdint.h defines _INTPTR_T_DECLARED and needs its own
+   definitions of intptr_t and uintptr_t (which use int and unsigned)
+   to avoid clashes with declarations of system functions like sbrk.  */
+# ifndef _INTPTR_T_DECLARED
+# undef intptr_t
+# undef uintptr_t
+typedef long int gl_intptr_t;
+typedef unsigned long int gl_uintptr_t;
+# define intptr_t gl_intptr_t
+# define uintptr_t gl_uintptr_t
+# endif
+
+/* 7.18.1.5. Greatest-width integer types */
+
+/* Note: These types are compiler dependent. It may be unwise to use them in
+   public header files. */
+
+/* If the system defines INTMAX_MAX, assume that intmax_t works, and
+   similarly for UINTMAX_MAX and uintmax_t.  This avoids problems with
+   assuming one type where another is used by the system.  */
+
+# ifndef INTMAX_MAX
+#  undef INTMAX_C
+#  undef intmax_t
+#  if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+typedef long long int gl_intmax_t;
+#   define intmax_t gl_intmax_t
+#  elif defined GL_INT64_T
+#   define intmax_t int64_t
+#  else
+typedef long int gl_intmax_t;
+#   define intmax_t gl_intmax_t
+#  endif
+# endif
+
+# ifndef UINTMAX_MAX
+#  undef UINTMAX_C
+#  undef uintmax_t
+#  if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+typedef unsigned long long int gl_uintmax_t;
+#   define uintmax_t gl_uintmax_t
+#  elif defined GL_UINT64_T
+#   define uintmax_t uint64_t
+#  else
+typedef unsigned long int gl_uintmax_t;
+#   define uintmax_t gl_uintmax_t
+#  endif
+# endif
+
+/* Verify that intmax_t and uintmax_t have the same size.  Too much code
+   breaks if this is not the case.  If this check fails, the reason is likely
+   to be found in the autoconf macros.  */
+typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
+                                ? 1 : -1];
+
+# define GNULIB_defined_stdint_types 1
+# endif /* !GNULIB_defined_stdint_types */
+
+/* 7.18.2. Limits of specified-width integer types */
+
+/* 7.18.2.1. Limits of exact-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits.  */
+
+# undef INT8_MIN
+# undef INT8_MAX
+# undef UINT8_MAX
+# define INT8_MIN  (~ INT8_MAX)
+# define INT8_MAX  127
+# define UINT8_MAX  255
+
+# undef INT16_MIN
+# undef INT16_MAX
+# undef UINT16_MAX
+# define INT16_MIN  (~ INT16_MAX)
+# define INT16_MAX  32767
+# define UINT16_MAX  65535
+
+# undef INT32_MIN
+# undef INT32_MAX
+# undef UINT32_MAX
+# define INT32_MIN  (~ INT32_MAX)
+# define INT32_MAX  2147483647
+# define UINT32_MAX  4294967295U
+
+# if defined GL_INT64_T && ! defined INT64_MAX
+/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
+   evaluates the latter incorrectly in preprocessor expressions.  */
+#  define INT64_MIN  (- INTMAX_C (1) << 63)
+#  define INT64_MAX  INTMAX_C (9223372036854775807)
+# endif
+
+# if defined GL_UINT64_T && ! defined UINT64_MAX
+#  define UINT64_MAX  UINTMAX_C (18446744073709551615)
+# endif
+
+/* 7.18.2.2. Limits of minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
+   are the same as the corresponding N_t types.  */
+
+# undef INT_LEAST8_MIN
+# undef INT_LEAST8_MAX
+# undef UINT_LEAST8_MAX
+# define INT_LEAST8_MIN  INT8_MIN
+# define INT_LEAST8_MAX  INT8_MAX
+# define UINT_LEAST8_MAX  UINT8_MAX
+
+# undef INT_LEAST16_MIN
+# undef INT_LEAST16_MAX
+# undef UINT_LEAST16_MAX
+# define INT_LEAST16_MIN  INT16_MIN
+# define INT_LEAST16_MAX  INT16_MAX
+# define UINT_LEAST16_MAX  UINT16_MAX
+
+# undef INT_LEAST32_MIN
+# undef INT_LEAST32_MAX
+# undef UINT_LEAST32_MAX
+# define INT_LEAST32_MIN  INT32_MIN
+# define INT_LEAST32_MAX  INT32_MAX
+# define UINT_LEAST32_MAX  UINT32_MAX
+
+# undef INT_LEAST64_MIN
+# undef INT_LEAST64_MAX
+# ifdef GL_INT64_T
+#  define INT_LEAST64_MIN  INT64_MIN
+#  define INT_LEAST64_MAX  INT64_MAX
+# endif
+
+# undef UINT_LEAST64_MAX
+# ifdef GL_UINT64_T
+#  define UINT_LEAST64_MAX  UINT64_MAX
+# endif
+
+/* 7.18.2.3. Limits of fastest minimum-width integer types */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
+   are taken from the same list of types.  */
+
+# undef INT_FAST8_MIN
+# undef INT_FAST8_MAX
+# undef UINT_FAST8_MAX
+# define INT_FAST8_MIN  SCHAR_MIN
+# define INT_FAST8_MAX  SCHAR_MAX
+# define UINT_FAST8_MAX  UCHAR_MAX
+
+# undef INT_FAST16_MIN
+# undef INT_FAST16_MAX
+# undef UINT_FAST16_MAX
+# define INT_FAST16_MIN  INT_FAST32_MIN
+# define INT_FAST16_MAX  INT_FAST32_MAX
+# define UINT_FAST16_MAX  UINT_FAST32_MAX
+
+# undef INT_FAST32_MIN
+# undef INT_FAST32_MAX
+# undef UINT_FAST32_MAX
+# ifdef __sun
+#  define INT_FAST32_MIN  INT_MIN
+#  define INT_FAST32_MAX  INT_MAX
+#  define UINT_FAST32_MAX  UINT_MAX
+# else
+#  define INT_FAST32_MIN  LONG_MIN
+#  define INT_FAST32_MAX  LONG_MAX
+#  define UINT_FAST32_MAX  ULONG_MAX
+# endif
+
+# undef INT_FAST64_MIN
+# undef INT_FAST64_MAX
+# ifdef GL_INT64_T
+#  define INT_FAST64_MIN  INT64_MIN
+#  define INT_FAST64_MAX  INT64_MAX
+# endif
+
+# undef UINT_FAST64_MAX
+# ifdef GL_UINT64_T
+#  define UINT_FAST64_MAX  UINT64_MAX
+# endif
+
+/* 7.18.2.4. Limits of integer types capable of holding object pointers */
+
+# undef INTPTR_MIN
+# undef INTPTR_MAX
+# undef UINTPTR_MAX
+# define INTPTR_MIN  LONG_MIN
+# define INTPTR_MAX  LONG_MAX
+# define UINTPTR_MAX  ULONG_MAX
+
+/* 7.18.2.5. Limits of greatest-width integer types */
+
+# ifndef INTMAX_MAX
+#  undef INTMAX_MIN
+#  ifdef INT64_MAX
+#   define INTMAX_MIN  INT64_MIN
+#   define INTMAX_MAX  INT64_MAX
+#  else
+#   define INTMAX_MIN  INT32_MIN
+#   define INTMAX_MAX  INT32_MAX
+#  endif
+# endif
+
+# ifndef UINTMAX_MAX
+#  ifdef UINT64_MAX
+#   define UINTMAX_MAX  UINT64_MAX
+#  else
+#   define UINTMAX_MAX  UINT32_MAX
+#  endif
+# endif
+
+/* 7.18.3. Limits of other integer types */
+
+/* ptrdiff_t limits */
+# undef PTRDIFF_MIN
+# undef PTRDIFF_MAX
+# if @APPLE_UNIVERSAL_BUILD@
+#  ifdef _LP64
+#   define PTRDIFF_MIN  _STDINT_SIGNED_MIN (64, 0l)
+#   define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
+#  else
+#   define PTRDIFF_MIN  _STDINT_SIGNED_MIN (32, 0)
+#   define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
+#  endif
+# else
+#  define PTRDIFF_MIN  \
+    _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+#  define PTRDIFF_MAX  \
+    _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
+# endif
+
+/* sig_atomic_t limits */
+# undef SIG_ATOMIC_MIN
+# undef SIG_ATOMIC_MAX
+# if @HAVE_SIGNED_SIG_ATOMIC_T@
+#  define SIG_ATOMIC_MIN  \
+    _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
+# else
+#  define SIG_ATOMIC_MIN  \
+    _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@)
+# endif
+# define SIG_ATOMIC_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
+                0@SIG_ATOMIC_T_SUFFIX@)
+
+
+/* size_t limit */
+# undef SIZE_MAX
+# if @APPLE_UNIVERSAL_BUILD@
+#  ifdef _LP64
+#   define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
+#  else
+#   define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
+#  endif
+# else
+#  define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
+# endif
+
+/* wchar_t limits */
+/* Get WCHAR_MIN, WCHAR_MAX.
+   This include is not on the top, above, because on OSF/1 4.0 we have a
+   sequence of nested includes
+   <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
+   <stdint.h> and assumes its types are already defined.  */
+# if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX)
+  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+     included before <wchar.h>.  */
+#  include <stddef.h>
+#  include <stdio.h>
+#  include <time.h>
+#  define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+#  include <wchar.h>
+#  undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
+# endif
+# undef WCHAR_MIN
+# undef WCHAR_MAX
+# if @HAVE_SIGNED_WCHAR_T@
+#  define WCHAR_MIN  \
+    _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+# else
+#  define WCHAR_MIN  \
+    _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+# endif
+# define WCHAR_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
+
+/* wint_t limits */
+# undef WINT_MIN
+# undef WINT_MAX
+# if @HAVE_SIGNED_WINT_T@
+#  define WINT_MIN  \
+    _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+# else
+#  define WINT_MIN  \
+    _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+# endif
+# define WINT_MAX  \
+   _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
+
+/* 7.18.4. Macros for integer constants */
+
+/* 7.18.4.1. Macros for minimum-width integer constants */
+/* According to ISO C 99 Technical Corrigendum 1 */
+
+/* Here we assume a standard architecture where the hardware integer
+   types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
+
+# undef INT8_C
+# undef UINT8_C
+# define INT8_C(x) x
+# define UINT8_C(x) x
+
+# undef INT16_C
+# undef UINT16_C
+# define INT16_C(x) x
+# define UINT16_C(x) x
+
+# undef INT32_C
+# undef UINT32_C
+# define INT32_C(x) x
+# define UINT32_C(x) x ## U
+
+# undef INT64_C
+# undef UINT64_C
+# if LONG_MAX >> 31 >> 31 == 1
+#  define INT64_C(x) x##L
+# elif defined _MSC_VER
+#  define INT64_C(x) x##i64
+# elif @HAVE_LONG_LONG_INT@
+#  define INT64_C(x) x##LL
+# endif
+# if ULONG_MAX >> 31 >> 31 >> 1 == 1
+#  define UINT64_C(x) x##UL
+# elif defined _MSC_VER
+#  define UINT64_C(x) x##ui64
+# elif @HAVE_UNSIGNED_LONG_LONG_INT@
+#  define UINT64_C(x) x##ULL
+# endif
+
+/* 7.18.4.2. Macros for greatest-width integer constants */
+
+# ifndef INTMAX_C
+#  if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
+#   define INTMAX_C(x)   x##LL
+#  elif defined GL_INT64_T
+#   define INTMAX_C(x)   INT64_C(x)
+#  else
+#   define INTMAX_C(x)   x##L
+#  endif
+# endif
+
+# ifndef UINTMAX_C
+#  if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
+#   define UINTMAX_C(x)  x##ULL
+#  elif defined GL_UINT64_T
+#   define UINTMAX_C(x)  UINT64_C(x)
+#  else
+#   define UINTMAX_C(x)  x##UL
+#  endif
+# endif
+
+#endif /* !@HAVE_C99_STDINT_H@ */
+
+/* Macros specified by ISO/IEC TS 18661-1:2014.  */
+
+#if (!defined UINTMAX_WIDTH \
+     && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__))
+# ifdef INT8_MAX
+#  define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX)
+# endif
+# ifdef UINT8_MAX
+#  define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX)
+# endif
+# ifdef INT16_MAX
+#  define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX)
+# endif
+# ifdef UINT16_MAX
+#  define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX)
+# endif
+# ifdef INT32_MAX
+#  define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX)
+# endif
+# ifdef UINT32_MAX
+#  define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX)
+# endif
+# ifdef INT64_MAX
+#  define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX)
+# endif
+# ifdef UINT64_MAX
+#  define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX)
+# endif
+# define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX)
+# define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX)
+# define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX)
+# define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX)
+# define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX)
+# define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX)
+# define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX)
+# define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX)
+# define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX)
+# define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX)
+# define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX)
+# define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX)
+# define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX)
+# define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX)
+# define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX)
+# define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX)
+# define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX)
+# define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX)
+# define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX)
+# define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX)
+# define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX)
+# define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX)
+# define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX)
+# ifdef WINT_MAX
+#  define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX)
+# endif
+# ifdef SIG_ATOMIC_MAX
+#  define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX)
+# endif
+#endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */
+
+#endif /* _@GUARD_PREFIX@_STDINT_H */
+#endif /* !(defined __ANDROID__ && ...) */
+#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/lib/stdio-impl.h b/lib/stdio-impl.h
new file mode 100644 (file)
index 0000000..393ef0c
--- /dev/null
@@ -0,0 +1,202 @@
+/* Implementation details of FILE streams.
+   Copyright (C) 2007-2008, 2010-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Many stdio implementations have the same logic and therefore can share
+   the same implementation of stdio extension API, except that some fields
+   have different naming conventions, or their access requires some casts.  */
+
+/* Glibc 2.28 made _IO_IN_BACKUP private.  For now, work around this
+   problem by defining it ourselves.  FIXME: Do not rely on glibc
+   internals.  */
+#if !defined _IO_IN_BACKUP && defined _IO_EOF_SEEN
+# define _IO_IN_BACKUP 0x100
+#endif
+
+/* BSD stdio derived implementations.  */
+
+#if defined __NetBSD__                         /* NetBSD */
+/* Get __NetBSD_Version__.  */
+# include <sys/param.h>
+#endif
+
+#include <errno.h>                             /* For detecting Plan9.  */
+
+#if defined __sferror || defined __DragonFly__ || defined __ANDROID__
+  /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */
+
+# if defined __DragonFly__          /* DragonFly */
+  /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/lib/libc/stdio/priv_stdio.h>.  */
+#  define fp_ ((struct { struct __FILE_public pub; \
+                         struct { unsigned char *_base; int _size; } _bf; \
+                         void *cookie; \
+                         void *_close; \
+                         void *_read; \
+                         void *_seek; \
+                         void *_write; \
+                         struct { unsigned char *_base; int _size; } _ub; \
+                         int _ur; \
+                         unsigned char _ubuf[3]; \
+                         unsigned char _nbuf[1]; \
+                         struct { unsigned char *_base; int _size; } _lb; \
+                         int _blksize; \
+                         fpos_t _offset; \
+                         /* More fields, not relevant here.  */ \
+                       } *) fp)
+  /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/stdio.h>.  */
+#  define _p pub._p
+#  define _flags pub._flags
+#  define _r pub._r
+#  define _w pub._w
+# elif defined __ANDROID__ /* Android */
+  /* Up to this commit from 2015-10-12
+     <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a>
+     the innards of FILE were public, and fp_ub could be defined like for OpenBSD,
+     see <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/fileext.h>
+     and <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/local.h>.
+     After this commit, the innards of FILE are hidden.  */
+#  define fp_ ((struct { unsigned char *_p; \
+                         int _r; \
+                         int _w; \
+                         int _flags; \
+                         int _file; \
+                         struct { unsigned char *_base; size_t _size; } _bf; \
+                         int _lbfsize; \
+                         void *_cookie; \
+                         void *_close; \
+                         void *_read; \
+                         void *_seek; \
+                         void *_write; \
+                         struct { unsigned char *_base; size_t _size; } _ext; \
+                         unsigned char *_up; \
+                         int _ur; \
+                         unsigned char _ubuf[3]; \
+                         unsigned char _nbuf[1]; \
+                         struct { unsigned char *_base; size_t _size; } _lb; \
+                         int _blksize; \
+                         fpos_t _offset; \
+                         /* More fields, not relevant here.  */ \
+                       } *) fp)
+# else
+#  define fp_ fp
+# endif
+
+# if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */
+  /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
+     and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup>
+     and <https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/master/lib/libc/stdio/fileext.h> */
+  struct __sfileext
+    {
+      struct  __sbuf _ub; /* ungetc buffer */
+      /* More fields, not relevant here.  */
+    };
+#  define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub
+# elif defined __ANDROID__                     /* Android */
+  struct __sfileext
+    {
+      struct { unsigned char *_base; size_t _size; } _ub; /* ungetc buffer */
+      /* More fields, not relevant here.  */
+    };
+#  define fp_ub ((struct __sfileext *) fp_->_ext._base)->_ub
+# else                                         /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin */
+#  define fp_ub fp_->_ub
+# endif
+
+# define HASUB(fp) (fp_ub._base != NULL)
+
+# if defined __ANDROID__ /* Android */
+  /* Needed after this commit from 2016-01-25
+     <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7> */
+#  ifndef __SEOF
+#   define __SLBF 1
+#   define __SNBF 2
+#   define __SRD 4
+#   define __SWR 8
+#   define __SRW 0x10
+#   define __SEOF 0x20
+#   define __SERR 0x40
+#  endif
+#  ifndef __SOFF
+#   define __SOFF 0x1000
+#  endif
+# endif
+
+#endif
+
+
+/* SystemV derived implementations.  */
+
+#ifdef __TANDEM                     /* NonStop Kernel */
+# ifndef _IOERR
+/* These values were determined by the program 'stdioext-flags' at
+   <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>.  */
+#  define _IOERR   0x40
+#  define _IOREAD  0x80
+#  define _IOWRT    0x4
+#  define _IORW   0x100
+# endif
+#endif
+
+#if defined _IOERR
+
+# if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */
+#  define fp_ ((struct { unsigned char *_ptr; \
+                         unsigned char *_base; \
+                         unsigned char *_end; \
+                         long _cnt; \
+                         int _file; \
+                         unsigned int _flag; \
+                       } *) fp)
+# elif defined __VMS                /* OpenVMS */
+#  define fp_ ((struct _iobuf *) fp)
+# else
+#  define fp_ fp
+# endif
+
+# if defined _SCO_DS                /* OpenServer */
+#  define _cnt __cnt
+#  define _ptr __ptr
+#  define _base __base
+#  define _flag __flag
+# endif
+
+#elif defined _WIN32 && ! defined __CYGWIN__  /* newer Windows with MSVC */
+
+/* <stdio.h> does not define the innards of FILE any more.  */
+# define WINDOWS_OPAQUE_FILE
+
+struct _gl_real_FILE
+{
+  /* Note: Compared to older Windows and to mingw, it has the fields
+     _base and _cnt swapped. */
+  unsigned char *_ptr;
+  unsigned char *_base;
+  int _cnt;
+  int _flag;
+  int _file;
+  int _charbuf;
+  int _bufsiz;
+};
+# define fp_ ((struct _gl_real_FILE *) fp)
+
+/* These values were determined by a program similar to the one at
+   <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>.  */
+# define _IOREAD   0x1
+# define _IOWRT    0x2
+# define _IORW     0x4
+# define _IOEOF    0x8
+# define _IOERR   0x10
+
+#endif
diff --git a/lib/stdio.in.h b/lib/stdio.in.h
new file mode 100644 (file)
index 0000000..ff7c9c8
--- /dev/null
@@ -0,0 +1,1377 @@
+/* A GNU-like <stdio.h>.
+
+   Copyright (C) 2004, 2007-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H
+/* Special invocation convention:
+   - Inside glibc header files.
+   - On OSF/1 5.1 we have a sequence of nested includes
+     <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> ->
+     <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>.
+     In this situation, the functions are not yet declared, therefore we cannot
+     provide the C++ aliases.  */
+
+#@INCLUDE_NEXT@ @NEXT_STDIO_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_STDIO_H
+
+#define _GL_ALREADY_INCLUDING_STDIO_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STDIO_H@
+
+#undef _GL_ALREADY_INCLUDING_STDIO_H
+
+#ifndef _@GUARD_PREFIX@_STDIO_H
+#define _@GUARD_PREFIX@_STDIO_H
+
+/* Get va_list.  Needed on many systems, including glibc 2.8.  */
+#include <stdarg.h>
+
+#include <stddef.h>
+
+/* Get off_t and ssize_t.  Needed on many systems, including glibc 2.8
+   and eglibc 2.11.2.
+   May also define off_t to a 64-bit type on native Windows.  */
+#include <sys/types.h>
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_PRINTF
+   indicates to GCC that the function takes a format string and arguments,
+   where the format string directives are the ones standardized by ISO C99
+   and POSIX.  */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument))
+#else
+# define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF,
+   except that it indicates to GCC that the supported format string directives
+   are the ones of the system printf(), rather than the ones standardized by
+   ISO C99 and POSIX.  */
+#if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU
+# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \
+  _GL_ATTRIBUTE_FORMAT_PRINTF (formatstring_parameter, first_argument)
+#else
+# define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \
+  _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument))
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_SCANF
+   indicates to GCC that the function takes a format string and arguments,
+   where the format string directives are the ones standardized by ISO C99
+   and POSIX.  */
+#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)
+# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument))
+#else
+# define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \
+   _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
+#endif
+
+/* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF,
+   except that it indicates to GCC that the supported format string directives
+   are the ones of the system scanf(), rather than the ones standardized by
+   ISO C99 and POSIX.  */
+#define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \
+  _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument))
+
+/* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \
+    && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+/* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>.  We must include
+   it before we  #define perror rpl_perror.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \
+    && (defined _WIN32 && ! defined __CYGWIN__) \
+    && ! defined __GLIBC__
+# include <stdlib.h>
+#endif
+
+/* MSVC declares 'remove' in <io.h>, not in <stdio.h>.  We must include
+   it before we  #define remove rpl_remove.  */
+/* MSVC declares 'rename' in <io.h>, not in <stdio.h>.  We must include
+   it before we  #define rename rpl_rename.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \
+    && (defined _WIN32 && ! defined __CYGWIN__) \
+    && ! defined __GLIBC__
+# include <io.h>
+#endif
+
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* Macros for stringification.  */
+#define _GL_STDIO_STRINGIZE(token) #token
+#define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token)
+
+/* When also using extern inline, suppress the use of static inline in
+   standard headers of problematic Apple configurations, as Libc at
+   least through Libc-825.26 (2013-04-09) mishandles it; see, e.g.,
+   <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>.
+   Perhaps Apple will fix this some day.  */
+#if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \
+     && defined __GNUC__ && defined __STDC__)
+# undef putc_unlocked
+#endif
+
+#if @GNULIB_DPRINTF@
+# if @REPLACE_DPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define dprintf rpl_dprintf
+#  endif
+_GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...));
+# else
+#  if !@HAVE_DPRINTF@
+_GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (dprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef dprintf
+# if HAVE_RAW_DECL_DPRINTF
+_GL_WARN_ON_USE (dprintf, "dprintf is unportable - "
+                 "use gnulib module dprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_FCLOSE@
+/* Close STREAM and its underlying file descriptor.  */
+# if @REPLACE_FCLOSE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fclose rpl_fclose
+#  endif
+_GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fclose, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fclose, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (fclose);
+#elif defined GNULIB_POSIXCHECK
+# undef fclose
+/* Assume fclose is always declared.  */
+_GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - "
+                 "use gnulib module fclose for portable POSIX compliance");
+#endif
+
+#if @GNULIB_FDOPEN@
+# if @REPLACE_FDOPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fdopen
+#   define fdopen rpl_fdopen
+#  endif
+_GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode)
+                                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode));
+# else
+_GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode));
+# endif
+_GL_CXXALIASWARN (fdopen);
+#elif defined GNULIB_POSIXCHECK
+# undef fdopen
+/* Assume fdopen is always declared.  */
+_GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module fdopen for portability");
+#endif
+
+#if @GNULIB_FFLUSH@
+/* Flush all pending data on STREAM according to POSIX rules.  Both
+   output and seekable input streams are supported.
+   Note! LOSS OF DATA can occur if fflush is applied on an input stream
+   that is _not_seekable_ or on an update stream that is _not_seekable_
+   and in which the most recent operation was input.  Seekability can
+   be tested with lseek(fileno(fp),0,SEEK_CUR).  */
+# if @REPLACE_FFLUSH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fflush rpl_fflush
+#  endif
+_GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream));
+_GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream));
+# else
+_GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream));
+# endif
+_GL_CXXALIASWARN (fflush);
+#elif defined GNULIB_POSIXCHECK
+# undef fflush
+/* Assume fflush is always declared.  */
+_GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - "
+                 "use gnulib module fflush for portable POSIX compliance");
+#endif
+
+#if @GNULIB_FGETC@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fgetc
+#   define fgetc rpl_fgetc
+#  endif
+_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fgetc, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fgetc, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (fgetc);
+#endif
+
+#if @GNULIB_FGETS@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fgets
+#   define fgets rpl_fgets
+#  endif
+_GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream)
+                                 _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fgets);
+#endif
+
+#if @GNULIB_FOPEN@
+# if @REPLACE_FOPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fopen
+#   define fopen rpl_fopen
+#  endif
+_GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode));
+# else
+_GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode));
+# endif
+_GL_CXXALIASWARN (fopen);
+#elif defined GNULIB_POSIXCHECK
+# undef fopen
+/* Assume fopen is always declared.  */
+_GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module fopen for portability");
+#endif
+
+#if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@
+# if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \
+     || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fprintf rpl_fprintf
+#  endif
+#  define GNULIB_overrides_fprintf 1
+#  if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  else
+_GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (fprintf);
+#endif
+#if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_fprintf
+#  undef fprintf
+# endif
+/* Assume fprintf is always declared.  */
+_GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - "
+                 "use gnulib module fprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_FPURGE@
+/* Discard all pending buffered I/O data on STREAM.
+   STREAM must not be wide-character oriented.
+   When discarding pending output, the file position is set back to where it
+   was before the write calls.  When discarding pending input, the file
+   position is advanced to match the end of the previously read input.
+   Return 0 if successful.  Upon error, return -1 and set errno.  */
+# if @REPLACE_FPURGE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define fpurge rpl_fpurge
+#  endif
+_GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream));
+# else
+#  if !@HAVE_DECL_FPURGE@
+_GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream));
+# endif
+_GL_CXXALIASWARN (fpurge);
+#elif defined GNULIB_POSIXCHECK
+# undef fpurge
+# if HAVE_RAW_DECL_FPURGE
+_GL_WARN_ON_USE (fpurge, "fpurge is not always present - "
+                 "use gnulib module fpurge for portability");
+# endif
+#endif
+
+#if @GNULIB_FPUTC@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fputc
+#   define fputc rpl_fputc
+#  endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fputc);
+#endif
+
+#if @GNULIB_FPUTS@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fputs
+#   define fputs rpl_fputs
+#  endif
+_GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream)
+                              _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fputs);
+#endif
+
+#if @GNULIB_FREAD@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fread
+#   define fread rpl_fread
+#  endif
+_GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)
+                                 _GL_ARG_NONNULL ((4)));
+_GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream));
+# endif
+_GL_CXXALIASWARN (fread);
+#endif
+
+#if @GNULIB_FREOPEN@
+# if @REPLACE_FREOPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef freopen
+#   define freopen rpl_freopen
+#  endif
+_GL_FUNCDECL_RPL (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (freopen, FILE *,
+                  (const char *filename, const char *mode, FILE *stream));
+# endif
+_GL_CXXALIASWARN (freopen);
+#elif defined GNULIB_POSIXCHECK
+# undef freopen
+/* Assume freopen is always declared.  */
+_GL_WARN_ON_USE (freopen,
+                 "freopen on native Windows platforms is not POSIX compliant - "
+                 "use gnulib module freopen for portability");
+#endif
+
+#if @GNULIB_FSCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fscanf
+#   define fscanf rpl_fscanf
+#  endif
+_GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...)
+                               _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3)
+                               _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (fscanf);
+#endif
+
+
+/* Set up the following warnings, based on which modules are in use.
+   GNU Coding Standards discourage the use of fseek, since it imposes
+   an arbitrary limitation on some 32-bit hosts.  Remember that the
+   fseek module depends on the fseeko module, so we only have three
+   cases to consider:
+
+   1. The developer is not using either module.  Issue a warning under
+   GNULIB_POSIXCHECK for both functions, to remind them that both
+   functions have bugs on some systems.  _GL_NO_LARGE_FILES has no
+   impact on this warning.
+
+   2. The developer is using both modules.  They may be unaware of the
+   arbitrary limitations of fseek, so issue a warning under
+   GNULIB_POSIXCHECK.  On the other hand, they may be using both
+   modules intentionally, so the developer can define
+   _GL_NO_LARGE_FILES in the compilation units where the use of fseek
+   is safe, to silence the warning.
+
+   3. The developer is using the fseeko module, but not fseek.  Gnulib
+   guarantees that fseek will still work around platform bugs in that
+   case, but we presume that the developer is aware of the pitfalls of
+   fseek and was trying to avoid it, so issue a warning even when
+   GNULIB_POSIXCHECK is undefined.  Again, _GL_NO_LARGE_FILES can be
+   defined to silence the warning in particular compilation units.
+   In C++ compilations with GNULIB_NAMESPACE, in order to avoid that
+   fseek gets defined as a macro, it is recommended that the developer
+   uses the fseek module, even if he is not calling the fseek function.
+
+   Most gnulib clients that perform stream operations should fall into
+   category 3.  */
+
+#if @GNULIB_FSEEK@
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+#  define _GL_FSEEK_WARN /* Category 2, above.  */
+#  undef fseek
+# endif
+# if @REPLACE_FSEEK@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fseek
+#   define fseek rpl_fseek
+#  endif
+_GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence));
+# else
+_GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence));
+# endif
+_GL_CXXALIASWARN (fseek);
+#endif
+
+#if @GNULIB_FSEEKO@
+# if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES
+#  define _GL_FSEEK_WARN /* Category 3, above.  */
+#  undef fseek
+# endif
+# if @REPLACE_FSEEKO@
+/* Provide an fseeko function that is aware of a preceding fflush(), and which
+   detects pipes.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fseeko
+#   define fseeko rpl_fseeko
+#  endif
+_GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence));
+# else
+#  if ! @HAVE_DECL_FSEEKO@
+_GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)
+                               _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence));
+# endif
+_GL_CXXALIASWARN (fseeko);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FSEEK_WARN /* Category 1, above.  */
+# undef fseek
+# undef fseeko
+# if HAVE_RAW_DECL_FSEEKO
+_GL_WARN_ON_USE (fseeko, "fseeko is unportable - "
+                 "use gnulib module fseeko for portability");
+# endif
+#endif
+
+#ifdef _GL_FSEEK_WARN
+# undef _GL_FSEEK_WARN
+/* Here, either fseek is undefined (but C89 guarantees that it is
+   declared), or it is defined as rpl_fseek (declared above).  */
+_GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB "
+                 "on 32-bit platforms - "
+                 "use fseeko function for handling of large files");
+#endif
+
+
+/* ftell, ftello.  See the comments on fseek/fseeko.  */
+
+#if @GNULIB_FTELL@
+# if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES
+#  define _GL_FTELL_WARN /* Category 2, above.  */
+#  undef ftell
+# endif
+# if @REPLACE_FTELL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftell
+#   define ftell rpl_ftell
+#  endif
+_GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ftell, long, (FILE *fp));
+# else
+_GL_CXXALIAS_SYS (ftell, long, (FILE *fp));
+# endif
+_GL_CXXALIASWARN (ftell);
+#endif
+
+#if @GNULIB_FTELLO@
+# if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES
+#  define _GL_FTELL_WARN /* Category 3, above.  */
+#  undef ftell
+# endif
+# if @REPLACE_FTELLO@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef ftello
+#   define ftello rpl_ftello
+#  endif
+_GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp));
+# else
+#  if ! @HAVE_DECL_FTELLO@
+_GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp));
+# endif
+_GL_CXXALIASWARN (ftello);
+#elif defined GNULIB_POSIXCHECK
+# define _GL_FTELL_WARN /* Category 1, above.  */
+# undef ftell
+# undef ftello
+# if HAVE_RAW_DECL_FTELLO
+_GL_WARN_ON_USE (ftello, "ftello is unportable - "
+                 "use gnulib module ftello for portability");
+# endif
+#endif
+
+#ifdef _GL_FTELL_WARN
+# undef _GL_FTELL_WARN
+/* Here, either ftell is undefined (but C89 guarantees that it is
+   declared), or it is defined as rpl_ftell (declared above).  */
+_GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB "
+                 "on 32-bit platforms - "
+                 "use ftello function for handling of large files");
+#endif
+
+
+#if @GNULIB_FWRITE@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef fwrite
+#   define fwrite rpl_fwrite
+#  endif
+_GL_FUNCDECL_RPL (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 4)));
+_GL_CXXALIAS_RPL (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (fwrite, size_t,
+                  (const void *ptr, size_t s, size_t n, FILE *stream));
+
+/* Work around bug 11959 when fortifying glibc 2.4 through 2.15
+   <https://sourceware.org/bugzilla/show_bug.cgi?id=11959>,
+   which sometimes causes an unwanted diagnostic for fwrite calls.
+   This affects only function declaration attributes under certain
+   versions of gcc and clang, and is not needed for C++.  */
+#  if (0 < __USE_FORTIFY_LEVEL                                          \
+       && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \
+       && 3 < __GNUC__ + (4 <= __GNUC_MINOR__)                          \
+       && !defined __cplusplus)
+#   undef fwrite
+#   undef fwrite_unlocked
+extern size_t __REDIRECT (rpl_fwrite,
+                          (const void *__restrict, size_t, size_t,
+                           FILE *__restrict),
+                          fwrite);
+extern size_t __REDIRECT (rpl_fwrite_unlocked,
+                          (const void *__restrict, size_t, size_t,
+                           FILE *__restrict),
+                          fwrite_unlocked);
+#   define fwrite rpl_fwrite
+#   define fwrite_unlocked rpl_fwrite_unlocked
+#  endif
+# endif
+_GL_CXXALIASWARN (fwrite);
+#endif
+
+#if @GNULIB_GETC@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getc
+#   define getc rpl_fgetc
+#  endif
+_GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream));
+# else
+_GL_CXXALIAS_SYS (getc, int, (FILE *stream));
+# endif
+_GL_CXXALIASWARN (getc);
+#endif
+
+#if @GNULIB_GETCHAR@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getchar
+#   define getchar rpl_getchar
+#  endif
+_GL_FUNCDECL_RPL (getchar, int, (void));
+_GL_CXXALIAS_RPL (getchar, int, (void));
+# else
+_GL_CXXALIAS_SYS (getchar, int, (void));
+# endif
+_GL_CXXALIASWARN (getchar);
+#endif
+
+#if @GNULIB_GETDELIM@
+/* Read input, up to (and including) the next occurrence of DELIMITER, from
+   STREAM, store it in *LINEPTR (and NUL-terminate it).
+   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+   bytes of space.  It is realloc'd as necessary.
+   Return the number of bytes read and stored at *LINEPTR (not including the
+   NUL terminator), or -1 on error or EOF.  */
+# if @REPLACE_GETDELIM@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getdelim
+#   define getdelim rpl_getdelim
+#  endif
+_GL_FUNCDECL_RPL (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 4)));
+_GL_CXXALIAS_RPL (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream));
+# else
+#  if !@HAVE_DECL_GETDELIM@
+_GL_FUNCDECL_SYS (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (getdelim, ssize_t,
+                  (char **lineptr, size_t *linesize, int delimiter,
+                   FILE *stream));
+# endif
+_GL_CXXALIASWARN (getdelim);
+#elif defined GNULIB_POSIXCHECK
+# undef getdelim
+# if HAVE_RAW_DECL_GETDELIM
+_GL_WARN_ON_USE (getdelim, "getdelim is unportable - "
+                 "use gnulib module getdelim for portability");
+# endif
+#endif
+
+#if @GNULIB_GETLINE@
+/* Read a line, up to (and including) the next newline, from STREAM, store it
+   in *LINEPTR (and NUL-terminate it).
+   *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE
+   bytes of space.  It is realloc'd as necessary.
+   Return the number of bytes read and stored at *LINEPTR (not including the
+   NUL terminator), or -1 on error or EOF.  */
+# if @REPLACE_GETLINE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef getline
+#   define getline rpl_getline
+#  endif
+_GL_FUNCDECL_RPL (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+_GL_CXXALIAS_RPL (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream));
+# else
+#  if !@HAVE_DECL_GETLINE@
+_GL_FUNCDECL_SYS (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream)
+                  _GL_ARG_NONNULL ((1, 2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (getline, ssize_t,
+                  (char **lineptr, size_t *linesize, FILE *stream));
+# endif
+# if @HAVE_DECL_GETLINE@
+_GL_CXXALIASWARN (getline);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef getline
+# if HAVE_RAW_DECL_GETLINE
+_GL_WARN_ON_USE (getline, "getline is unportable - "
+                 "use gnulib module getline for portability");
+# endif
+#endif
+
+/* It is very rare that the developer ever has full control of stdin,
+   so any use of gets warrants an unconditional warning; besides, C11
+   removed it.  */
+#undef gets
+#if HAVE_RAW_DECL_GETS && !defined __cplusplus
+_GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead");
+#endif
+
+#if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@
+struct obstack;
+/* Grow an obstack with formatted output.  Return the number of
+   bytes added to OBS.  No trailing nul byte is added, and the
+   object should be closed with obstack_finish before use.  Upon
+   memory allocation error, call obstack_alloc_failed_handler.  Upon
+   other error, return -1.  */
+# if @REPLACE_OBSTACK_PRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define obstack_printf rpl_obstack_printf
+#  endif
+_GL_FUNCDECL_RPL (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...));
+# else
+#  if !@HAVE_DECL_OBSTACK_PRINTF@
+_GL_FUNCDECL_SYS (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (obstack_printf, int,
+                  (struct obstack *obs, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (obstack_printf);
+# if @REPLACE_OBSTACK_PRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define obstack_vprintf rpl_obstack_vprintf
+#  endif
+_GL_FUNCDECL_RPL (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args));
+# else
+#  if !@HAVE_DECL_OBSTACK_PRINTF@
+_GL_FUNCDECL_SYS (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (obstack_vprintf, int,
+                  (struct obstack *obs, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (obstack_vprintf);
+#endif
+
+#if @GNULIB_PCLOSE@
+# if !@HAVE_PCLOSE@
+_GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (pclose, int, (FILE *stream));
+_GL_CXXALIASWARN (pclose);
+#elif defined GNULIB_POSIXCHECK
+# undef pclose
+# if HAVE_RAW_DECL_PCLOSE
+_GL_WARN_ON_USE (pclose, "pclose is unportable - "
+                 "use gnulib module pclose for more portability");
+# endif
+#endif
+
+#if @GNULIB_PERROR@
+/* Print a message to standard error, describing the value of ERRNO,
+   (if STRING is not NULL and not empty) prefixed with STRING and ": ",
+   and terminated with a newline.  */
+# if @REPLACE_PERROR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define perror rpl_perror
+#  endif
+_GL_FUNCDECL_RPL (perror, void, (const char *string));
+_GL_CXXALIAS_RPL (perror, void, (const char *string));
+# else
+_GL_CXXALIAS_SYS (perror, void, (const char *string));
+# endif
+_GL_CXXALIASWARN (perror);
+#elif defined GNULIB_POSIXCHECK
+# undef perror
+/* Assume perror is always declared.  */
+_GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - "
+                 "use gnulib module perror for portability");
+#endif
+
+#if @GNULIB_POPEN@
+# if @REPLACE_POPEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef popen
+#   define popen rpl_popen
+#  endif
+_GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode));
+# else
+#  if !@HAVE_POPEN@
+_GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode));
+# endif
+_GL_CXXALIASWARN (popen);
+#elif defined GNULIB_POSIXCHECK
+# undef popen
+# if HAVE_RAW_DECL_POPEN
+_GL_WARN_ON_USE (popen, "popen is buggy on some platforms - "
+                 "use gnulib module popen or pipe for more portability");
+# endif
+#endif
+
+#if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@
+# if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \
+     || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+#  if defined __GNUC__
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+/* Don't break __attribute__((format(printf,M,N))).  */
+#    define printf __printf__
+#   endif
+#   if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL_1 (__printf__, int,
+                    (const char *format, ...)
+                    __asm__ (@ASM_SYMBOL_PREFIX@
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
+                    _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+#   else
+_GL_FUNCDECL_RPL_1 (__printf__, int,
+                    (const char *format, ...)
+                    __asm__ (@ASM_SYMBOL_PREFIX@
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf))
+                    _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+#   endif
+_GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...));
+#  else
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define printf rpl_printf
+#   endif
+_GL_FUNCDECL_RPL (printf, int,
+                  (const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2)
+                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (printf, int, (const char *format, ...));
+#  endif
+#  define GNULIB_overrides_printf 1
+# else
+_GL_CXXALIAS_SYS (printf, int, (const char *format, ...));
+# endif
+_GL_CXXALIASWARN (printf);
+#endif
+#if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_printf
+#  undef printf
+# endif
+/* Assume printf is always declared.  */
+_GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - "
+                 "use gnulib module printf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_PUTC@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putc
+#   define putc rpl_fputc
+#  endif
+_GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream));
+# else
+_GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream));
+# endif
+_GL_CXXALIASWARN (putc);
+#endif
+
+#if @GNULIB_PUTCHAR@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef putchar
+#   define putchar rpl_putchar
+#  endif
+_GL_FUNCDECL_RPL (putchar, int, (int c));
+_GL_CXXALIAS_RPL (putchar, int, (int c));
+# else
+_GL_CXXALIAS_SYS (putchar, int, (int c));
+# endif
+_GL_CXXALIASWARN (putchar);
+#endif
+
+#if @GNULIB_PUTS@
+# if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef puts
+#   define puts rpl_puts
+#  endif
+_GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (puts, int, (const char *string));
+# else
+_GL_CXXALIAS_SYS (puts, int, (const char *string));
+# endif
+_GL_CXXALIASWARN (puts);
+#endif
+
+#if @GNULIB_REMOVE@
+# if @REPLACE_REMOVE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef remove
+#   define remove rpl_remove
+#  endif
+_GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (remove, int, (const char *name));
+# else
+_GL_CXXALIAS_SYS (remove, int, (const char *name));
+# endif
+_GL_CXXALIASWARN (remove);
+#elif defined GNULIB_POSIXCHECK
+# undef remove
+/* Assume remove is always declared.  */
+_GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - "
+                 "use gnulib module remove for more portability");
+#endif
+
+#if @GNULIB_RENAME@
+# if @REPLACE_RENAME@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef rename
+#   define rename rpl_rename
+#  endif
+_GL_FUNCDECL_RPL (rename, int,
+                  (const char *old_filename, const char *new_filename)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (rename, int,
+                  (const char *old_filename, const char *new_filename));
+# else
+_GL_CXXALIAS_SYS (rename, int,
+                  (const char *old_filename, const char *new_filename));
+# endif
+_GL_CXXALIASWARN (rename);
+#elif defined GNULIB_POSIXCHECK
+# undef rename
+/* Assume rename is always declared.  */
+_GL_WARN_ON_USE (rename, "rename is buggy on some platforms - "
+                 "use gnulib module rename for more portability");
+#endif
+
+#if @GNULIB_RENAMEAT@
+# if @REPLACE_RENAMEAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef renameat
+#   define renameat rpl_renameat
+#  endif
+_GL_FUNCDECL_RPL (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2)
+                  _GL_ARG_NONNULL ((2, 4)));
+_GL_CXXALIAS_RPL (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2));
+# else
+#  if !@HAVE_RENAMEAT@
+_GL_FUNCDECL_SYS (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2)
+                  _GL_ARG_NONNULL ((2, 4)));
+#  endif
+_GL_CXXALIAS_SYS (renameat, int,
+                  (int fd1, char const *file1, int fd2, char const *file2));
+# endif
+_GL_CXXALIASWARN (renameat);
+#elif defined GNULIB_POSIXCHECK
+# undef renameat
+# if HAVE_RAW_DECL_RENAMEAT
+_GL_WARN_ON_USE (renameat, "renameat is not portable - "
+                 "use gnulib module renameat for portability");
+# endif
+#endif
+
+#if @GNULIB_SCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if defined __GNUC__
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef scanf
+/* Don't break __attribute__((format(scanf,M,N))).  */
+#    define scanf __scanf__
+#   endif
+_GL_FUNCDECL_RPL_1 (__scanf__, int,
+                    (const char *format, ...)
+                    __asm__ (@ASM_SYMBOL_PREFIX@
+                             _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf))
+                    _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
+                    _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...));
+#  else
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    undef scanf
+#    define scanf rpl_scanf
+#   endif
+_GL_FUNCDECL_RPL (scanf, int, (const char *format, ...)
+                              _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2)
+                              _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (scanf, int, (const char *format, ...));
+#  endif
+# else
+_GL_CXXALIAS_SYS (scanf, int, (const char *format, ...));
+# endif
+_GL_CXXALIASWARN (scanf);
+#endif
+
+#if @GNULIB_SNPRINTF@
+# if @REPLACE_SNPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define snprintf rpl_snprintf
+#  endif
+_GL_FUNCDECL_RPL (snprintf, int,
+                  (char *str, size_t size, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4)
+                  _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (snprintf, int,
+                  (char *str, size_t size, const char *format, ...));
+# else
+#  if !@HAVE_DECL_SNPRINTF@
+_GL_FUNCDECL_SYS (snprintf, int,
+                  (char *str, size_t size, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4)
+                  _GL_ARG_NONNULL ((3)));
+#  endif
+_GL_CXXALIAS_SYS (snprintf, int,
+                  (char *str, size_t size, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (snprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef snprintf
+# if HAVE_RAW_DECL_SNPRINTF
+_GL_WARN_ON_USE (snprintf, "snprintf is unportable - "
+                 "use gnulib module snprintf for portability");
+# endif
+#endif
+
+/* Some people would argue that all sprintf uses should be warned about
+   (for example, OpenBSD issues a link warning for it),
+   since it can cause security holes due to buffer overruns.
+   However, we believe that sprintf can be used safely, and is more
+   efficient than snprintf in those safe cases; and as proof of our
+   belief, we use sprintf in several gnulib modules.  So this header
+   intentionally avoids adding a warning to sprintf except when
+   GNULIB_POSIXCHECK is defined.  */
+
+#if @GNULIB_SPRINTF_POSIX@
+# if @REPLACE_SPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define sprintf rpl_sprintf
+#  endif
+_GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                                _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...));
+# else
+_GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (sprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef sprintf
+/* Assume sprintf is always declared.  */
+_GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - "
+                 "use gnulib module sprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_TMPFILE@
+# if @REPLACE_TMPFILE@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define tmpfile rpl_tmpfile
+#  endif
+_GL_FUNCDECL_RPL (tmpfile, FILE *, (void));
+_GL_CXXALIAS_RPL (tmpfile, FILE *, (void));
+# else
+_GL_CXXALIAS_SYS (tmpfile, FILE *, (void));
+# endif
+_GL_CXXALIASWARN (tmpfile);
+#elif defined GNULIB_POSIXCHECK
+# undef tmpfile
+# if HAVE_RAW_DECL_TMPFILE
+_GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - "
+                 "use gnulib module tmpfile for portability");
+# endif
+#endif
+
+#if @GNULIB_VASPRINTF@
+/* Write formatted output to a string dynamically allocated with malloc().
+   If the memory allocation succeeds, store the address of the string in
+   *RESULT and return the number of resulting bytes, excluding the trailing
+   NUL.  Upon memory allocation error, or some other error, return -1.  */
+# if @REPLACE_VASPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define asprintf rpl_asprintf
+#  endif
+_GL_FUNCDECL_RPL (asprintf, int,
+                  (char **result, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (asprintf, int,
+                  (char **result, const char *format, ...));
+# else
+#  if !@HAVE_VASPRINTF@
+_GL_FUNCDECL_SYS (asprintf, int,
+                  (char **result, const char *format, ...)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (asprintf, int,
+                  (char **result, const char *format, ...));
+# endif
+_GL_CXXALIASWARN (asprintf);
+# if @REPLACE_VASPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vasprintf rpl_vasprintf
+#  endif
+_GL_FUNCDECL_RPL (vasprintf, int,
+                  (char **result, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vasprintf, int,
+                  (char **result, const char *format, va_list args));
+# else
+#  if !@HAVE_VASPRINTF@
+_GL_FUNCDECL_SYS (vasprintf, int,
+                  (char **result, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (vasprintf, int,
+                  (char **result, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vasprintf);
+#endif
+
+#if @GNULIB_VDPRINTF@
+# if @REPLACE_VDPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vdprintf rpl_vdprintf
+#  endif
+_GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args));
+# else
+#  if !@HAVE_VDPRINTF@
+_GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((2)));
+#  endif
+/* Need to cast, because on Solaris, the third parameter will likely be
+                                                    __va_list args.  */
+_GL_CXXALIAS_SYS_CAST (vdprintf, int,
+                       (int fd, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vdprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vdprintf
+# if HAVE_RAW_DECL_VDPRINTF
+_GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - "
+                 "use gnulib module vdprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@
+# if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \
+     || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vfprintf rpl_vfprintf
+#  endif
+#  define GNULIB_overrides_vfprintf 1
+#  if @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  else
+_GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)
+                                 _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0)
+                                 _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the third parameter is
+                                                      __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vfprintf, int,
+                       (FILE *fp, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vfprintf);
+#endif
+#if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vfprintf
+#  undef vfprintf
+# endif
+/* Assume vfprintf is always declared.  */
+_GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - "
+                 "use gnulib module vfprintf-posix for portable "
+                      "POSIX compliance");
+#endif
+
+#if @GNULIB_VFSCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef vfscanf
+#   define vfscanf rpl_vfscanf
+#  endif
+_GL_FUNCDECL_RPL (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vfscanf, int,
+                  (FILE *stream, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vfscanf);
+#endif
+
+#if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@
+# if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \
+     || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@))
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vprintf rpl_vprintf
+#  endif
+#  define GNULIB_overrides_vprintf 1
+#  if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@
+_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0)
+                                _GL_ARG_NONNULL ((1)));
+#  else
+_GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args)
+                                _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0)
+                                _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the second parameter is
+                                                          __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vprintf);
+#endif
+#if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK
+# if !GNULIB_overrides_vprintf
+#  undef vprintf
+# endif
+/* Assume vprintf is always declared.  */
+_GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - "
+                 "use gnulib module vprintf-posix for portable "
+                 "POSIX compliance");
+#endif
+
+#if @GNULIB_VSCANF@
+# if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef vscanf
+#   define vscanf rpl_vscanf
+#  endif
+_GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args)
+                               _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0)
+                               _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args));
+# else
+_GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vscanf);
+#endif
+
+#if @GNULIB_VSNPRINTF@
+# if @REPLACE_VSNPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vsnprintf rpl_vsnprintf
+#  endif
+_GL_FUNCDECL_RPL (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0)
+                  _GL_ARG_NONNULL ((3)));
+_GL_CXXALIAS_RPL (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args));
+# else
+#  if !@HAVE_DECL_VSNPRINTF@
+_GL_FUNCDECL_SYS (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0)
+                  _GL_ARG_NONNULL ((3)));
+#  endif
+_GL_CXXALIAS_SYS (vsnprintf, int,
+                  (char *str, size_t size, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vsnprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vsnprintf
+# if HAVE_RAW_DECL_VSNPRINTF
+_GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - "
+                 "use gnulib module vsnprintf for portability");
+# endif
+#endif
+
+#if @GNULIB_VSPRINTF_POSIX@
+# if @REPLACE_VSPRINTF@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define vsprintf rpl_vsprintf
+#  endif
+_GL_FUNCDECL_RPL (vsprintf, int,
+                  (char *str, const char *format, va_list args)
+                  _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (vsprintf, int,
+                  (char *str, const char *format, va_list args));
+# else
+/* Need to cast, because on Solaris, the third parameter is
+                                                       __va_list args
+   and GCC's fixincludes did not change this to __gnuc_va_list.  */
+_GL_CXXALIAS_SYS_CAST (vsprintf, int,
+                       (char *str, const char *format, va_list args));
+# endif
+_GL_CXXALIASWARN (vsprintf);
+#elif defined GNULIB_POSIXCHECK
+# undef vsprintf
+/* Assume vsprintf is always declared.  */
+_GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - "
+                 "use gnulib module vsprintf-posix for portable "
+                      "POSIX compliance");
+#endif
+
+#endif /* _@GUARD_PREFIX@_STDIO_H */
+#endif /* _@GUARD_PREFIX@_STDIO_H */
+#endif
diff --git a/lib/streq.h b/lib/streq.h
new file mode 100644 (file)
index 0000000..bde1b95
--- /dev/null
@@ -0,0 +1,176 @@
+/* Optimized string comparison.
+   Copyright (C) 2001-2002, 2007, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible <bruno@clisp.org>.  */
+
+#ifndef _GL_STREQ_H
+#define _GL_STREQ_H
+
+#include <string.h>
+
+/* STREQ_OPT allows to optimize string comparison with a small literal string.
+     STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+   is semantically equivalent to
+     strcmp (s, "EUC-KR") == 0
+   just faster.  */
+
+/* Help GCC to generate good code for string comparisons with
+   immediate strings. */
+#if defined (__GNUC__) && defined (__OPTIMIZE__)
+
+static inline int
+streq9 (const char *s1, const char *s2)
+{
+  return strcmp (s1 + 9, s2 + 9) == 0;
+}
+
+static inline int
+streq8 (const char *s1, const char *s2, char s28)
+{
+  if (s1[8] == s28)
+    {
+      if (s28 == 0)
+        return 1;
+      else
+        return streq9 (s1, s2);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq7 (const char *s1, const char *s2, char s27, char s28)
+{
+  if (s1[7] == s27)
+    {
+      if (s27 == 0)
+        return 1;
+      else
+        return streq8 (s1, s2, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
+{
+  if (s1[6] == s26)
+    {
+      if (s26 == 0)
+        return 1;
+      else
+        return streq7 (s1, s2, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
+{
+  if (s1[5] == s25)
+    {
+      if (s25 == 0)
+        return 1;
+      else
+        return streq6 (s1, s2, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[4] == s24)
+    {
+      if (s24 == 0)
+        return 1;
+      else
+        return streq5 (s1, s2, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[3] == s23)
+    {
+      if (s23 == 0)
+        return 1;
+      else
+        return streq4 (s1, s2, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[2] == s22)
+    {
+      if (s22 == 0)
+        return 1;
+      else
+        return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[1] == s21)
+    {
+      if (s21 == 0)
+        return 1;
+      else
+        return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+static inline int
+streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
+{
+  if (s1[0] == s20)
+    {
+      if (s20 == 0)
+        return 1;
+      else
+        return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
+    }
+  else
+    return 0;
+}
+
+#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
+
+#else
+
+#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
+  (strcmp (s1, s2) == 0)
+
+#endif
+
+#endif /* _GL_STREQ_H */
diff --git a/lib/string.in.h b/lib/string.in.h
new file mode 100644 (file)
index 0000000..29f4ba6
--- /dev/null
@@ -0,0 +1,1063 @@
+/* A GNU-like <string.h>.
+
+   Copyright (C) 1995-1996, 2001-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined _GL_ALREADY_INCLUDING_STRING_H
+/* Special invocation convention:
+   - On OS X/NetBSD we have a sequence of nested includes
+       <string.h> -> <strings.h> -> "string.h"
+     In this situation system _chk variants due to -D_FORTIFY_SOURCE
+     might be used after any replacements defined here.  */
+
+#@INCLUDE_NEXT@ @NEXT_STRING_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_STRING_H
+
+#define _GL_ALREADY_INCLUDING_STRING_H
+
+/* The include_next requires a split double-inclusion guard.  */
+#@INCLUDE_NEXT@ @NEXT_STRING_H@
+
+#undef _GL_ALREADY_INCLUDING_STRING_H
+
+#ifndef _@GUARD_PREFIX@_STRING_H
+#define _@GUARD_PREFIX@_STRING_H
+
+/* NetBSD 5.0 mis-defines NULL.  */
+#include <stddef.h>
+
+/* MirBSD defines mbslen as a macro.  */
+#if @GNULIB_MBSLEN@ && defined __MirBSD__
+# include <wchar.h>
+#endif
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>.  */
+/* But in any case avoid namespace pollution on glibc systems.  */
+#if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \
+    && ! defined __GLIBC__
+# include <unistd.h>
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Clear a block of memory.  The compiler will not delete a call to
+   this function, even if the block is dead after the call.  */
+#if @GNULIB_EXPLICIT_BZERO@
+# if ! @HAVE_EXPLICIT_BZERO@
+_GL_FUNCDECL_SYS (explicit_bzero, void,
+                  (void *__dest, size_t __n) _GL_ARG_NONNULL ((1)));
+# endif
+_GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n));
+_GL_CXXALIASWARN (explicit_bzero);
+#elif defined GNULIB_POSIXCHECK
+# undef explicit_bzero
+# if HAVE_RAW_DECL_EXPLICIT_BZERO
+_GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - "
+                 "use gnulib module explicit_bzero for portability");
+# endif
+#endif
+
+/* Find the index of the least-significant set bit.  */
+#if @GNULIB_FFSL@
+# if !@HAVE_FFSL@
+_GL_FUNCDECL_SYS (ffsl, int, (long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsl, int, (long int i));
+_GL_CXXALIASWARN (ffsl);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsl
+# if HAVE_RAW_DECL_FFSL
+_GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module");
+# endif
+#endif
+
+
+/* Find the index of the least-significant set bit.  */
+#if @GNULIB_FFSLL@
+# if !@HAVE_FFSLL@
+_GL_FUNCDECL_SYS (ffsll, int, (long long int i));
+# endif
+_GL_CXXALIAS_SYS (ffsll, int, (long long int i));
+_GL_CXXALIASWARN (ffsll);
+#elif defined GNULIB_POSIXCHECK
+# undef ffsll
+# if HAVE_RAW_DECL_FFSLL
+_GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module");
+# endif
+#endif
+
+
+/* Return the first instance of C within N bytes of S, or NULL.  */
+#if @GNULIB_MEMCHR@
+# if @REPLACE_MEMCHR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memchr rpl_memchr
+#  endif
+_GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n));
+# else
+#  if ! @HAVE_MEMCHR@
+_GL_FUNCDECL_SYS (memchr, void *, (void const *__s, int __c, size_t __n)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const void * std::memchr (const void *, int, size_t); }
+       extern "C++" { void * std::memchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memchr,
+                        void *, (void const *__s, int __c, size_t __n),
+                        void const *, (void const *__s, int __c, size_t __n));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n));
+_GL_CXXALIASWARN1 (memchr, void const *,
+                   (void const *__s, int __c, size_t __n));
+# else
+_GL_CXXALIASWARN (memchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memchr
+/* Assume memchr is always declared.  */
+_GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - "
+                 "use gnulib module memchr for portability" );
+#endif
+
+/* Return the first occurrence of NEEDLE in HAYSTACK.  */
+#if @GNULIB_MEMMEM@
+# if @REPLACE_MEMMEM@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define memmem rpl_memmem
+#  endif
+_GL_FUNCDECL_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 3)));
+_GL_CXXALIAS_RPL (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# else
+#  if ! @HAVE_DECL_MEMMEM@
+_GL_FUNCDECL_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 3)));
+#  endif
+_GL_CXXALIAS_SYS (memmem, void *,
+                  (void const *__haystack, size_t __haystack_len,
+                   void const *__needle, size_t __needle_len));
+# endif
+_GL_CXXALIASWARN (memmem);
+#elif defined GNULIB_POSIXCHECK
+# undef memmem
+# if HAVE_RAW_DECL_MEMMEM
+_GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - "
+                 "use gnulib module memmem-simple for portability, "
+                 "and module memmem for speed" );
+# endif
+#endif
+
+/* Copy N bytes of SRC to DEST, return pointer to bytes after the
+   last written byte.  */
+#if @GNULIB_MEMPCPY@
+# if ! @HAVE_MEMPCPY@
+_GL_FUNCDECL_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (mempcpy, void *,
+                  (void *restrict __dest, void const *restrict __src,
+                   size_t __n));
+_GL_CXXALIASWARN (mempcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef mempcpy
+# if HAVE_RAW_DECL_MEMPCPY
+_GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - "
+                 "use gnulib module mempcpy for portability");
+# endif
+#endif
+
+/* Search backwards through a block for a byte (specified as an int).  */
+#if @GNULIB_MEMRCHR@
+# if ! @HAVE_DECL_MEMRCHR@
+_GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::memrchr (const void *, int, size_t); }
+       extern "C++" { void * std::memrchr (void *, int, size_t); }  */
+_GL_CXXALIAS_SYS_CAST2 (memrchr,
+                        void *, (void const *, int, size_t),
+                        void const *, (void const *, int, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t));
+_GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t));
+# else
+_GL_CXXALIASWARN (memrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef memrchr
+# if HAVE_RAW_DECL_MEMRCHR
+_GL_WARN_ON_USE (memrchr, "memrchr is unportable - "
+                 "use gnulib module memrchr for portability");
+# endif
+#endif
+
+/* Find the first occurrence of C in S.  More efficient than
+   memchr(S,C,N), at the expense of undefined behavior if C does not
+   occur within N bytes.  */
+#if @GNULIB_RAWMEMCHR@
+# if ! @HAVE_RAWMEMCHR@
+_GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const void * std::rawmemchr (const void *, int); }
+       extern "C++" { void * std::rawmemchr (void *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (rawmemchr,
+                        void *, (void const *__s, int __c_in),
+                        void const *, (void const *__s, int __c_in));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in));
+_GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (rawmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef rawmemchr
+# if HAVE_RAW_DECL_RAWMEMCHR
+_GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - "
+                 "use gnulib module rawmemchr for portability");
+# endif
+#endif
+
+/* Copy SRC to DST, returning the address of the terminating '\0' in DST.  */
+#if @GNULIB_STPCPY@
+# if ! @HAVE_STPCPY@
+_GL_FUNCDECL_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (stpcpy, char *,
+                  (char *restrict __dst, char const *restrict __src));
+_GL_CXXALIASWARN (stpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpcpy
+# if HAVE_RAW_DECL_STPCPY
+_GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - "
+                 "use gnulib module stpcpy for portability");
+# endif
+#endif
+
+/* Copy no more than N bytes of SRC to DST, returning a pointer past the
+   last non-NUL byte written into DST.  */
+#if @GNULIB_STPNCPY@
+# if @REPLACE_STPNCPY@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef stpncpy
+#   define stpncpy rpl_stpncpy
+#  endif
+_GL_FUNCDECL_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# else
+#  if ! @HAVE_STPNCPY@
+_GL_FUNCDECL_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n)
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+_GL_CXXALIAS_SYS (stpncpy, char *,
+                  (char *restrict __dst, char const *restrict __src,
+                   size_t __n));
+# endif
+_GL_CXXALIASWARN (stpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef stpncpy
+# if HAVE_RAW_DECL_STPNCPY
+_GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - "
+                 "use gnulib module stpncpy for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strchr
+/* Assume strchr is always declared.  */
+_GL_WARN_ON_USE (strchr, "strchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbschr if you care about internationalization");
+#endif
+
+/* Find the first occurrence of C in S or the final NUL byte.  */
+#if @GNULIB_STRCHRNUL@
+# if @REPLACE_STRCHRNUL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strchrnul rpl_strchrnul
+#  endif
+_GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strchrnul, char *,
+                  (const char *str, int ch));
+# else
+#  if ! @HAVE_STRCHRNUL@
+_GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in)
+                                     _GL_ATTRIBUTE_PURE
+                                     _GL_ARG_NONNULL ((1)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * std::strchrnul (const char *, int); }
+       extern "C++" { char * std::strchrnul (char *, int); }  */
+_GL_CXXALIAS_SYS_CAST2 (strchrnul,
+                        char *, (char const *__s, int __c_in),
+                        char const *, (char const *__s, int __c_in));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in));
+_GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in));
+# else
+_GL_CXXALIASWARN (strchrnul);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strchrnul
+# if HAVE_RAW_DECL_STRCHRNUL
+_GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - "
+                 "use gnulib module strchrnul for portability");
+# endif
+#endif
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if @GNULIB_STRDUP@
+# if @REPLACE_STRDUP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strdup
+#   define strdup rpl_strdup
+#  endif
+_GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strdup, char *, (char const *__s));
+# else
+#  if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup
+    /* strdup exists as a function and as a macro.  Get rid of the macro.  */
+#   undef strdup
+#  endif
+#  if !(@HAVE_DECL_STRDUP@ || defined strdup)
+_GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strdup, char *, (char const *__s));
+# endif
+_GL_CXXALIASWARN (strdup);
+#elif defined GNULIB_POSIXCHECK
+# undef strdup
+# if HAVE_RAW_DECL_STRDUP
+_GL_WARN_ON_USE (strdup, "strdup is unportable - "
+                 "use gnulib module strdup for portability");
+# endif
+#endif
+
+/* Append no more than N characters from SRC onto DEST.  */
+#if @GNULIB_STRNCAT@
+# if @REPLACE_STRNCAT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strncat
+#   define strncat rpl_strncat
+#  endif
+_GL_FUNCDECL_RPL (strncat, char *, (char *dest, const char *src, size_t n)
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strncat, char *, (char *dest, const char *src, size_t n));
+# else
+_GL_CXXALIAS_SYS (strncat, char *, (char *dest, const char *src, size_t n));
+# endif
+_GL_CXXALIASWARN (strncat);
+#elif defined GNULIB_POSIXCHECK
+# undef strncat
+# if HAVE_RAW_DECL_STRNCAT
+_GL_WARN_ON_USE (strncat, "strncat is unportable - "
+                 "use gnulib module strncat for portability");
+# endif
+#endif
+
+/* Return a newly allocated copy of at most N bytes of STRING.  */
+#if @GNULIB_STRNDUP@
+# if @REPLACE_STRNDUP@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strndup
+#   define strndup rpl_strndup
+#  endif
+_GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n));
+# else
+#  if ! @HAVE_DECL_STRNDUP@
+_GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n)
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n));
+# endif
+_GL_CXXALIASWARN (strndup);
+#elif defined GNULIB_POSIXCHECK
+# undef strndup
+# if HAVE_RAW_DECL_STRNDUP
+_GL_WARN_ON_USE (strndup, "strndup is unportable - "
+                 "use gnulib module strndup for portability");
+# endif
+#endif
+
+/* Find the length (number of bytes) of STRING, but scan at most
+   MAXLEN bytes.  If no '\0' terminator is found in that many bytes,
+   return MAXLEN.  */
+#if @GNULIB_STRNLEN@
+# if @REPLACE_STRNLEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strnlen
+#   define strnlen rpl_strnlen
+#  endif
+_GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen));
+# else
+#  if ! @HAVE_DECL_STRNLEN@
+_GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+#  endif
+_GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen));
+# endif
+_GL_CXXALIASWARN (strnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef strnlen
+# if HAVE_RAW_DECL_STRNLEN
+_GL_WARN_ON_USE (strnlen, "strnlen is unportable - "
+                 "use gnulib module strnlen for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strcspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+# undef strcspn
+/* Assume strcspn is always declared.  */
+_GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbscspn if you care about internationalization");
+#endif
+
+/* Find the first occurrence in S of any character in ACCEPT.  */
+#if @GNULIB_STRPBRK@
+# if ! @HAVE_STRPBRK@
+_GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C" { const char * strpbrk (const char *, const char *); }
+       extern "C++" { char * strpbrk (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strpbrk,
+                        char *, (char const *__s, char const *__accept),
+                        const char *, (char const *__s, char const *__accept));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept));
+_GL_CXXALIASWARN1 (strpbrk, char const *,
+                   (char const *__s, char const *__accept));
+# else
+_GL_CXXALIASWARN (strpbrk);
+# endif
+# if defined GNULIB_POSIXCHECK
+/* strpbrk() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it does not work with multibyte strings if the
+   locale encoding is GB18030 and one of the characters to be searched is a
+   digit.  */
+#  undef strpbrk
+_GL_WARN_ON_USE (strpbrk, "strpbrk cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbspbrk if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strpbrk
+# if HAVE_RAW_DECL_STRPBRK
+_GL_WARN_ON_USE (strpbrk, "strpbrk is unportable - "
+                 "use gnulib module strpbrk for portability");
+# endif
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strspn() assumes the second argument is a list of single-byte characters.
+   Even in this simple case, it cannot work with multibyte strings.  */
+# undef strspn
+/* Assume strspn is always declared.  */
+_GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbsspn if you care about internationalization");
+#endif
+
+#if defined GNULIB_POSIXCHECK
+/* strrchr() does not work with multibyte strings if the locale encoding is
+   GB18030 and the character to be searched is a digit.  */
+# undef strrchr
+/* Assume strrchr is always declared.  */
+_GL_WARN_ON_USE (strrchr, "strrchr cannot work correctly on character strings "
+                 "in some multibyte locales - "
+                 "use mbsrchr if you care about internationalization");
+#endif
+
+/* Search the next delimiter (char listed in DELIM) starting at *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP
+   to point to the next char after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of strtok() that is multithread-safe and supports
+   empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strtok_r().  */
+#if @GNULIB_STRSEP@
+# if ! @HAVE_STRSEP@
+_GL_FUNCDECL_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim)
+                  _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strsep, char *,
+                  (char **restrict __stringp, char const *restrict __delim));
+_GL_CXXALIASWARN (strsep);
+# if defined GNULIB_POSIXCHECK
+#  undef strsep
+_GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings "
+                 "in multibyte locales - "
+                 "use mbssep if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strsep
+# if HAVE_RAW_DECL_STRSEP
+_GL_WARN_ON_USE (strsep, "strsep is unportable - "
+                 "use gnulib module strsep for portability");
+# endif
+#endif
+
+#if @GNULIB_STRSTR@
+# if @REPLACE_STRSTR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strstr rpl_strstr
+#  endif
+_GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle));
+# else
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strstr (const char *, const char *); }
+       extern "C++" { char * strstr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strstr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strstr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strstr() does not work with multibyte strings if the locale encoding is
+   different from UTF-8:
+   POSIX says that it operates on "strings", and "string" in POSIX is defined
+   as a sequence of bytes, not of characters.  */
+# undef strstr
+/* Assume strstr is always declared.  */
+_GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot "
+                 "work correctly on character strings in most "
+                 "multibyte locales - "
+                 "use mbsstr if you care about internationalization, "
+                 "or use strstr if you care about speed");
+#endif
+
+/* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive
+   comparison.  */
+#if @GNULIB_STRCASESTR@
+# if @REPLACE_STRCASESTR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strcasestr rpl_strcasestr
+#  endif
+_GL_FUNCDECL_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (strcasestr, char *,
+                  (const char *haystack, const char *needle));
+# else
+#  if ! @HAVE_STRCASESTR@
+_GL_FUNCDECL_SYS (strcasestr, char *,
+                  (const char *haystack, const char *needle)
+                  _GL_ATTRIBUTE_PURE
+                  _GL_ARG_NONNULL ((1, 2)));
+#  endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" { const char * strcasestr (const char *, const char *); }
+       extern "C++" { char * strcasestr (char *, const char *); }  */
+_GL_CXXALIAS_SYS_CAST2 (strcasestr,
+                        char *, (const char *haystack, const char *needle),
+                        const char *, (const char *haystack, const char *needle));
+# endif
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle));
+_GL_CXXALIASWARN1 (strcasestr, const char *,
+                   (const char *haystack, const char *needle));
+# else
+_GL_CXXALIASWARN (strcasestr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+/* strcasestr() does not work with multibyte strings:
+   It is a glibc extension, and glibc implements it only for unibyte
+   locales.  */
+# undef strcasestr
+# if HAVE_RAW_DECL_STRCASESTR
+_GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbscasestr if you care about "
+                 "internationalization, or use c-strcasestr if you want "
+                 "a locale independent function");
+# endif
+#endif
+
+/* Parse S into tokens separated by characters in DELIM.
+   If S is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = strtok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = strtok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = strtok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   This is a variant of strtok() that is multithread-safe.
+
+   For the POSIX documentation for this function, see:
+   http://www.opengroup.org/susv3xsh/strtok.html
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+   Caveat: It doesn't work with multibyte strings unless all of the delimiter
+           characters are ASCII characters < 0x30.
+
+   See also strsep().  */
+#if @GNULIB_STRTOK_R@
+# if @REPLACE_STRTOK_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strtok_r
+#   define strtok_r rpl_strtok_r
+#  endif
+_GL_FUNCDECL_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+_GL_CXXALIAS_RPL (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# else
+#  if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK
+#   undef strtok_r
+#  endif
+#  if ! @HAVE_DECL_STRTOK_R@
+_GL_FUNCDECL_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr)
+                  _GL_ARG_NONNULL ((2, 3)));
+#  endif
+_GL_CXXALIAS_SYS (strtok_r, char *,
+                  (char *restrict s, char const *restrict delim,
+                   char **restrict save_ptr));
+# endif
+_GL_CXXALIASWARN (strtok_r);
+# if defined GNULIB_POSIXCHECK
+_GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character "
+                 "strings in multibyte locales - "
+                 "use mbstok_r if you care about internationalization");
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strtok_r
+# if HAVE_RAW_DECL_STRTOK_R
+_GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - "
+                 "use gnulib module strtok_r for portability");
+# endif
+#endif
+
+
+/* The following functions are not specified by POSIX.  They are gnulib
+   extensions.  */
+
+#if @GNULIB_MBSLEN@
+/* Return the number of multibyte characters in the character string STRING.
+   This considers multibyte characters, unlike strlen, which counts bytes.  */
+# ifdef __MirBSD__  /* MirBSD defines mbslen as a macro.  Override it.  */
+#  undef mbslen
+# endif
+# if @HAVE_MBSLEN@  /* AIX, OSF/1, MirBSD define mbslen already in libc.  */
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbslen rpl_mbslen
+#  endif
+_GL_FUNCDECL_RPL (mbslen, size_t, (const char *string)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbslen, size_t, (const char *string));
+# else
+_GL_FUNCDECL_SYS (mbslen, size_t, (const char *string)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbslen, size_t, (const char *string));
+# endif
+_GL_CXXALIASWARN (mbslen);
+#endif
+
+#if @GNULIB_MBSNLEN@
+/* Return the number of multibyte characters in the character string starting
+   at STRING and ending at STRING + LEN.  */
+_GL_EXTERN_C size_t mbsnlen (const char *string, size_t len)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1));
+#endif
+
+#if @GNULIB_MBSCHR@
+/* Locate the first single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbschr rpl_mbschr /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c)
+                                  _GL_ATTRIBUTE_PURE
+                                  _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbschr);
+#endif
+
+#if @GNULIB_MBSRCHR@
+/* Locate the last single-byte character C in the character string STRING,
+   and return a pointer to it.  Return NULL if C is not found in STRING.
+   Unlike strrchr(), this function works correctly in multibyte locales with
+   encodings such as GB18030.  */
+# if defined __hpux || defined __INTERIX
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbsrchr rpl_mbsrchr /* avoid collision with system function */
+#  endif
+_GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c));
+# else
+_GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1)));
+_GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c));
+# endif
+_GL_CXXALIASWARN (mbsrchr);
+#endif
+
+#if @GNULIB_MBSSTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK.  Return NULL if NEEDLE is not found in HAYSTACK.
+   Unlike strstr(), this function works correctly in multibyte locales with
+   encodings different from UTF-8.  */
+_GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASECMP@
+/* Compare the character strings S1 and S2, ignoring case, returning less than,
+   equal to or greater than zero if S1 is lexicographically less than, equal to
+   or greater than S2.
+   Note: This function may, in multibyte locales, return 0 for strings of
+   different lengths!
+   Unlike strcasecmp(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSNCASECMP@
+/* Compare the initial segment of the character string S1 consisting of at most
+   N characters with the initial segment of the character string S2 consisting
+   of at most N characters, ignoring case, returning less than, equal to or
+   greater than zero if the initial segment of S1 is lexicographically less
+   than, equal to or greater than the initial segment of S2.
+   Note: This function may, in multibyte locales, return 0 for initial segments
+   of different lengths!
+   Unlike strncasecmp(), this function works correctly in multibyte locales.
+   But beware that N is not a byte count but a character count!  */
+_GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPCASECMP@
+/* Compare the initial segment of the character string STRING consisting of
+   at most mbslen (PREFIX) characters with the character string PREFIX,
+   ignoring case.  If the two match, return a pointer to the first byte
+   after this prefix in STRING.  Otherwise, return NULL.
+   Note: This function may, in multibyte locales, return non-NULL if STRING
+   is of smaller length than PREFIX!
+   Unlike strncasecmp(), this function works correctly in multibyte
+   locales.  */
+_GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCASESTR@
+/* Find the first occurrence of the character string NEEDLE in the character
+   string HAYSTACK, using case-insensitive comparison.
+   Note: This function may, in multibyte locales, return success even if
+   strlen (haystack) < strlen (needle) !
+   Unlike strcasestr(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSCSPN@
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strcspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbscspn (const char *string, const char *accept)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSPBRK@
+/* Find the first occurrence in the character string STRING of any character
+   in the character string ACCEPT.  Return the pointer to it, or NULL if none
+   exists.
+   Unlike strpbrk(), this function works correctly in multibyte locales.  */
+# if defined __hpux
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */
+#  endif
+_GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept));
+# else
+_GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+_GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept));
+# endif
+_GL_CXXALIASWARN (mbspbrk);
+#endif
+
+#if @GNULIB_MBSSPN@
+/* Find the first occurrence in the character string STRING of any character
+   not in the character string REJECT.  Return the number of bytes from the
+   beginning of the string to this occurrence, or to the end of the string
+   if none exists.
+   Unlike strspn(), this function works correctly in multibyte locales.  */
+_GL_EXTERN_C size_t mbsspn (const char *string, const char *reject)
+     _GL_ATTRIBUTE_PURE
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSSEP@
+/* Search the next delimiter (multibyte character listed in the character
+   string DELIM) starting at the character string *STRINGP.
+   If one is found, overwrite it with a NUL, and advance *STRINGP to point
+   to the next multibyte character after it.  Otherwise, set *STRINGP to NULL.
+   If *STRINGP was already NULL, nothing happens.
+   Return the old value of *STRINGP.
+
+   This is a variant of mbstok_r() that supports empty fields.
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbstok_r().  */
+_GL_EXTERN_C char * mbssep (char **stringp, const char *delim)
+     _GL_ARG_NONNULL ((1, 2));
+#endif
+
+#if @GNULIB_MBSTOK_R@
+/* Parse the character string STRING into tokens separated by characters in
+   the character string DELIM.
+   If STRING is NULL, the saved pointer in SAVE_PTR is used as
+   the next starting point.  For example:
+        char s[] = "-abc-=-def";
+        char *sp;
+        x = mbstok_r(s, "-", &sp);      // x = "abc", sp = "=-def"
+        x = mbstok_r(NULL, "-=", &sp);  // x = "def", sp = NULL
+        x = mbstok_r(NULL, "=", &sp);   // x = NULL
+                // s = "abc\0-def\0"
+
+   Caveat: It modifies the original string.
+   Caveat: These functions cannot be used on constant strings.
+   Caveat: The identity of the delimiting character is lost.
+
+   See also mbssep().  */
+_GL_EXTERN_C char * mbstok_r (char *string, const char *delim, char **save_ptr)
+     _GL_ARG_NONNULL ((2, 3));
+#endif
+
+/* Map any int, typically from errno, into an error message.  */
+#if @GNULIB_STRERROR@
+# if @REPLACE_STRERROR@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror
+#   define strerror rpl_strerror
+#  endif
+_GL_FUNCDECL_RPL (strerror, char *, (int));
+_GL_CXXALIAS_RPL (strerror, char *, (int));
+# else
+_GL_CXXALIAS_SYS (strerror, char *, (int));
+# endif
+_GL_CXXALIASWARN (strerror);
+#elif defined GNULIB_POSIXCHECK
+# undef strerror
+/* Assume strerror is always declared.  */
+_GL_WARN_ON_USE (strerror, "strerror is unportable - "
+                 "use gnulib module strerror to guarantee non-NULL result");
+#endif
+
+/* Map any int, typically from errno, into an error message.  Multithread-safe.
+   Uses the POSIX declaration, not the glibc declaration.  */
+#if @GNULIB_STRERROR_R@
+# if @REPLACE_STRERROR_R@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef strerror_r
+#   define strerror_r rpl_strerror_r
+#  endif
+_GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)
+                                   _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# else
+#  if !@HAVE_DECL_STRERROR_R@
+_GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)
+                                   _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen));
+# endif
+# if @HAVE_DECL_STRERROR_R@
+_GL_CXXALIASWARN (strerror_r);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef strerror_r
+# if HAVE_RAW_DECL_STRERROR_R
+_GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - "
+                 "use gnulib module strerror_r-posix for portability");
+# endif
+#endif
+
+#if @GNULIB_STRSIGNAL@
+# if @REPLACE_STRSIGNAL@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define strsignal rpl_strsignal
+#  endif
+_GL_FUNCDECL_RPL (strsignal, char *, (int __sig));
+_GL_CXXALIAS_RPL (strsignal, char *, (int __sig));
+# else
+#  if ! @HAVE_DECL_STRSIGNAL@
+_GL_FUNCDECL_SYS (strsignal, char *, (int __sig));
+#  endif
+/* Need to cast, because on Cygwin 1.5.x systems, the return type is
+   'const char *'.  */
+_GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig));
+# endif
+_GL_CXXALIASWARN (strsignal);
+#elif defined GNULIB_POSIXCHECK
+# undef strsignal
+# if HAVE_RAW_DECL_STRSIGNAL
+_GL_WARN_ON_USE (strsignal, "strsignal is unportable - "
+                 "use gnulib module strsignal for portability");
+# endif
+#endif
+
+#if @GNULIB_STRVERSCMP@
+# if !@HAVE_STRVERSCMP@
+_GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *)
+                                   _GL_ATTRIBUTE_PURE
+                                   _GL_ARG_NONNULL ((1, 2)));
+# endif
+_GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *));
+_GL_CXXALIASWARN (strverscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef strverscmp
+# if HAVE_RAW_DECL_STRVERSCMP
+_GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - "
+                 "use gnulib module strverscmp for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_STRING_H */
+#endif /* _@GUARD_PREFIX@_STRING_H */
+#endif
diff --git a/lib/sys_types.in.h b/lib/sys_types.in.h
new file mode 100644 (file)
index 0000000..7f8c1c4
--- /dev/null
@@ -0,0 +1,106 @@
+/* Provide a more complete sys/types.h.
+
+   Copyright (C) 2011-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if defined _WIN32 && !defined __CYGWIN__ \
+    && (defined __need_off_t || defined __need___off64_t \
+        || defined __need_ssize_t || defined __need_time_t)
+
+/* Special invocation convention inside mingw header files.  */
+
+#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_SYS_TYPES_H
+
+/* The include_next requires a split double-inclusion guard.  */
+# define _GL_INCLUDING_SYS_TYPES_H
+#@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@
+# undef _GL_INCLUDING_SYS_TYPES_H
+
+#ifndef _@GUARD_PREFIX@_SYS_TYPES_H
+#define _@GUARD_PREFIX@_SYS_TYPES_H
+
+/* Override off_t if Large File Support is requested on native Windows.  */
+#if @WINDOWS_64_BIT_OFF_T@
+/* Same as int64_t in <stdint.h>.  */
+# if defined _MSC_VER
+#  define off_t __int64
+# else
+#  define off_t long long int
+# endif
+/* Indicator, for gnulib internal purposes.  */
+# define _GL_WINDOWS_64_BIT_OFF_T 1
+#endif
+
+/* Override dev_t and ino_t if distinguishable inodes support is requested
+   on native Windows.  */
+#if @WINDOWS_STAT_INODES@
+
+# if @WINDOWS_STAT_INODES@ == 2
+/* Experimental, not useful in Windows 10.  */
+
+/* Define dev_t to a 64-bit type.  */
+#  if !defined GNULIB_defined_dev_t
+typedef unsigned long long int rpl_dev_t;
+#   undef dev_t
+#   define dev_t rpl_dev_t
+#   define GNULIB_defined_dev_t 1
+#  endif
+
+/* Define ino_t to a 128-bit type.  */
+#  if !defined GNULIB_defined_ino_t
+/* MSVC does not have a 128-bit integer type.
+   GCC has a 128-bit integer type __int128, but only on 64-bit targets.  */
+typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t;
+#   undef ino_t
+#   define ino_t rpl_ino_t
+#   define GNULIB_defined_ino_t 1
+#  endif
+
+# else /* @WINDOWS_STAT_INODES@ == 1 */
+
+/* Define ino_t to a 64-bit type.  */
+#  if !defined GNULIB_defined_ino_t
+typedef unsigned long long int rpl_ino_t;
+#   undef ino_t
+#   define ino_t rpl_ino_t
+#   define GNULIB_defined_ino_t 1
+#  endif
+
+# endif
+
+/* Indicator, for gnulib internal purposes.  */
+# define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@
+
+#endif
+
+/* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>.  */
+/* But avoid namespace pollution on glibc systems.  */
+#if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__
+# include <stddef.h>
+#endif
+
+#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */
+#endif /* _@GUARD_PREFIX@_SYS_TYPES_H */
+#endif /* __need_XXX */
diff --git a/lib/unitypes.in.h b/lib/unitypes.in.h
new file mode 100644 (file)
index 0000000..13ed4cb
--- /dev/null
@@ -0,0 +1,46 @@
+/* Elementary types and macros for the GNU UniString library.
+   Copyright (C) 2002, 2005-2006, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _UNITYPES_H
+#define _UNITYPES_H
+
+/* Get uint8_t, uint16_t, uint32_t.  */
+#include <stdint.h>
+
+/* Type representing a Unicode character.  */
+typedef uint32_t ucs4_t;
+
+/* Attribute of a function whose result depends only on the arguments
+   (not pointers!) and which has no side effects.  */
+#ifndef _UC_ATTRIBUTE_CONST
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+#  define _UC_ATTRIBUTE_CONST __attribute__ ((__const__))
+# else
+#  define _UC_ATTRIBUTE_CONST
+# endif
+#endif
+
+/* Attribute of a function whose result depends only on the arguments
+   (possibly pointers) and global memory, and which has no side effects.  */
+#ifndef _UC_ATTRIBUTE_PURE
+# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+#  define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__))
+# else
+#  define _UC_ATTRIBUTE_PURE
+# endif
+#endif
+
+#endif /* _UNITYPES_H */
diff --git a/lib/uniwidth.in.h b/lib/uniwidth.in.h
new file mode 100644 (file)
index 0000000..0cacc29
--- /dev/null
@@ -0,0 +1,72 @@
+/* Display width functions.
+   Copyright (C) 2001-2002, 2005, 2007, 2009-2018 Free Software Foundation,
+   Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _UNIWIDTH_H
+#define _UNIWIDTH_H
+
+#include "unitypes.h"
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get locale_charset() declaration.  */
+#include "localcharset.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+/* Display width.  */
+
+/* These functions are locale dependent.  The encoding argument identifies
+   the encoding (e.g. "ISO-8859-2" for Polish).  */
+
+/* Determine number of column positions required for UC.  */
+extern int
+       uc_width (ucs4_t uc, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+/* Determine number of column positions required for first N units
+   (or fewer if S ends before this) in S.  */
+extern int
+       u8_width (const uint8_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u16_width (const uint16_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u32_width (const uint32_t *s, size_t n, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+/* Determine number of column positions required for S.  */
+extern int
+       u8_strwidth (const uint8_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u16_strwidth (const uint16_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+extern int
+       u32_strwidth (const uint32_t *s, const char *encoding)
+       _UC_ATTRIBUTE_PURE;
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _UNIWIDTH_H */
diff --git a/lib/uniwidth/cjk.h b/lib/uniwidth/cjk.h
new file mode 100644 (file)
index 0000000..f7f822c
--- /dev/null
@@ -0,0 +1,37 @@
+/* Test for CJK encoding.
+   Copyright (C) 2001-2002, 2005-2007, 2009-2018 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#include "streq.h"
+
+static int
+is_cjk_encoding (const char *encoding)
+{
+  if (0
+      /* Legacy Japanese encodings */
+      || STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)
+      /* Legacy Chinese encodings */
+      || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
+      || STREQ_OPT (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
+      || STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
+      || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
+      /* Legacy Korean encodings */
+      || STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
+      || STREQ_OPT (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0)
+      || STREQ_OPT (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0))
+    return 1;
+  return 0;
+}
diff --git a/lib/uniwidth/width.c b/lib/uniwidth/width.c
new file mode 100644 (file)
index 0000000..cd27d61
--- /dev/null
@@ -0,0 +1,468 @@
+/* Determine display width of Unicode character.
+   Copyright (C) 2001-2002, 2006-2018 Free Software Foundation, Inc.
+   Written by Bruno Haible <bruno@clisp.org>, 2002.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include "uniwidth.h"
+
+#include "cjk.h"
+
+/*
+ * Non-spacing attribute table.
+ * Consists of:
+ * - Non-spacing characters; generated from PropList.txt or
+ *   "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt"
+ * - Format control characters; generated from
+ *   "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt"
+ * - Zero width characters; generated from
+ *   "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt"
+ */
+static const unsigned char nonspacing_table_data[38*64] = {
+  /* 0x0000-0x01ff */
+  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
+  0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */
+  /* 0x0200-0x03ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */
+  /* 0x0400-0x05ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */
+  0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */
+  0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */
+  0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */
+  /* 0x0600-0x07ff */
+  0x3f, 0x00, 0xff, 0x17, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */
+  0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */
+  0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */
+  0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */
+  0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */
+  0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */
+  /* 0x0800-0x09ff */
+  0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */
+  0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */
+  0x00, 0x00, 0xf0, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x08c0-0x08ff */
+  0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */
+  0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */
+  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */
+  /* 0x0a00-0x0bff */
+  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */
+  0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */
+  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */
+  0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */
+  0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */
+  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */
+  0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */
+  /* 0x0c00-0x0dff */
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */
+  0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */
+  0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */
+  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */
+  0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */
+  /* 0x0e00-0x0fff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */
+  0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */
+  0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */
+  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */
+  0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */
+  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */
+  /* 0x1000-0x11ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */
+  0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */
+  0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */
+  /* 0x1200-0x13ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */
+  0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */
+  /* 0x1600-0x17ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */
+  0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */
+  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */
+  0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */
+  /* 0x1800-0x19ff */
+  0x00, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */
+  0x60, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */
+  0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */
+  /* 0x1a00-0x1bff */
+  0x00, 0x00, 0x80, 0x09, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */
+  0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, 0x7f, /* 0x1a80-0x1abf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */
+  0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */
+  0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */
+  0x03, 0x00, 0x00, 0x00, 0x3c, 0x3b, 0x00, 0x00, /* 0x1b80-0x1bbf */
+  0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */
+  /* 0x1c00-0x1dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */
+  0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x10, 0x03, /* 0x1cc0-0x1cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x3f, 0xf8, /* 0x1dc0-0x1dff */
+  /* 0x2000-0x21ff */
+  0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */
+  0x00, 0x00, 0x00, 0x00, 0xdf, 0xff, 0x00, 0x00, /* 0x2040-0x207f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */
+  0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */
+  /* 0x2c00-0x2dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */
+  0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */
+  /* 0x3000-0x31ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x3000-0x303f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */
+  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */
+  /* 0xa600-0xa7ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xf7, 0x3f, /* 0xa640-0xa67f */
+  0x00, 0x00, 0x00, 0xc0, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */
+  /* 0xa800-0xa9ff */
+  0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */
+  0x30, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, /* 0xa8c0-0xa8ff */
+  0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */
+  0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */
+  0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x13, /* 0xa980-0xa9bf */
+  0x00, 0x00, 0x00, 0x00, 0x20, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */
+  /* 0xaa00-0xabff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */
+  0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0xaa40-0xaa7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x30, 0x40, 0x00, /* 0xaac0-0xaaff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */
+  0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */
+  /* 0xfa00-0xfbff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */
+  0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */
+  /* 0xfe00-0xffff */
+  0xff, 0xff, 0x00, 0x00, 0xff, 0xff, 0x00, 0x00, /* 0xfe00-0xfe3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */
+  /* 0x10000-0x101ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */
+  /* 0x10200-0x103ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10200-0x1023f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10240-0x1027f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10280-0x102bf */
+  0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, /* 0x102c0-0x102ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10300-0x1033f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x07, /* 0x10340-0x1037f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10380-0x103bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x103c0-0x103ff */
+  /* 0x10a00-0x10bff */
+  0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */
+  0x00, 0x00, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */
+  /* 0x11000-0x111ff */
+  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */
+  0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x11040-0x1107f */
+  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */
+  0x07, 0x00, 0x00, 0x00, 0x80, 0xef, 0x1f, 0x00, /* 0x11100-0x1113f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x08, 0x00, /* 0x11140-0x1117f */
+  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, 0x7f, /* 0x11180-0x111bf */
+  0x00, 0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */
+  /* 0x11200-0x113ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0xd3, 0x40, /* 0x11200-0x1123f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11240-0x1127f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11280-0x112bf */
+  0x00, 0x00, 0x00, 0x80, 0xf8, 0x07, 0x00, 0x00, /* 0x112c0-0x112ff */
+  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x11300-0x1133f */
+  0x01, 0x00, 0x00, 0x00, 0xc0, 0x1f, 0x1f, 0x00, /* 0x11340-0x1137f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11380-0x113bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x113c0-0x113ff */
+  /* 0x11400-0x115ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11400-0x1143f */
+  0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11440-0x1147f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x85, /* 0x11480-0x114bf */
+  0x0d, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x114c0-0x114ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11500-0x1153f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11540-0x1157f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x3c, 0xb0, /* 0x11580-0x115bf */
+  0x01, 0x00, 0x00, 0x30, 0x00, 0x00, 0x00, 0x00, /* 0x115c0-0x115ff */
+  /* 0x11600-0x117ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0xa7, /* 0x11600-0x1163f */
+  0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11640-0x1167f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x28, 0xbf, 0x00, /* 0x11680-0x116bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x116c0-0x116ff */
+  0x00, 0x00, 0x00, 0xe0, 0xbc, 0x0f, 0x00, 0x00, /* 0x11700-0x1173f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11740-0x1177f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11780-0x117bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x117c0-0x117ff */
+  /* 0x11c00-0x11dff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x3f, /* 0x11c00-0x11c3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c40-0x11c7f */
+  0x00, 0x00, 0xfc, 0xff, 0xff, 0xfc, 0x6d, 0x00, /* 0x11c80-0x11cbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11cc0-0x11cff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d00-0x11d3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d40-0x11d7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11d80-0x11dbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11dc0-0x11dff */
+  /* 0x16a00-0x16bff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a00-0x16a3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a40-0x16a7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16a80-0x16abf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x1f, 0x00, /* 0x16ac0-0x16aff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x7f, 0x00, /* 0x16b00-0x16b3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b40-0x16b7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16b80-0x16bbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16bc0-0x16bff */
+  /* 0x16e00-0x16fff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e00-0x16e3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e40-0x16e7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16e80-0x16ebf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16ec0-0x16eff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f00-0x16f3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f40-0x16f7f */
+  0x00, 0x80, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16f80-0x16fbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16fc0-0x16fff */
+  /* 0x1bc00-0x1bdff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc00-0x1bc3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bc40-0x1bc7f */
+  0x00, 0x00, 0x00, 0x60, 0x0f, 0x00, 0x00, 0x00, /* 0x1bc80-0x1bcbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bcc0-0x1bcff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd00-0x1bd3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd40-0x1bd7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bd80-0x1bdbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1bdc0-0x1bdff */
+  /* 0x1d000-0x1d1ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */
+  0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */
+  0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */
+  /* 0x1d200-0x1d3ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */
+  0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d3c0-0x1d3ff */
+  /* 0x1da00-0x1dbff */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x7f, 0xf8, /* 0x1da00-0x1da3f */
+  0xff, 0xff, 0xff, 0xff, 0xff, 0x1f, 0x20, 0x00, /* 0x1da40-0x1da7f */
+  0x10, 0x00, 0x00, 0xf8, 0xfe, 0xff, 0x00, 0x00, /* 0x1da80-0x1dabf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dac0-0x1daff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db00-0x1db3f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db40-0x1db7f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1db80-0x1dbbf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1dbc0-0x1dbff */
+  /* 0x1e000-0x1e1ff */
+  0x7f, 0xff, 0xff, 0xf9, 0xdb, 0x07, 0x00, 0x00, /* 0x1e000-0x1e03f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e040-0x1e07f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e080-0x1e0bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e0c0-0x1e0ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e100-0x1e13f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e140-0x1e17f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e180-0x1e1bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e1c0-0x1e1ff */
+  /* 0x1e800-0x1e9ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e800-0x1e83f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e840-0x1e87f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e880-0x1e8bf */
+  0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e8c0-0x1e8ff */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e900-0x1e93f */
+  0xf0, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e940-0x1e97f */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1e980-0x1e9bf */
+  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1e9c0-0x1e9ff */
+};
+static const signed char nonspacing_table_ind[248] = {
+   0,  1,  2,  3,  4,  5,  6,  7, /* 0x0000-0x0fff */
+   8,  9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */
+  14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */
+  16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */
+  -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */
+  -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */
+  22, 23, -1, -1, -1, 24, -1, -1, /* 0x10000-0x10fff */
+  25, 26, 27, 28, -1, -1, 29, -1, /* 0x11000-0x11fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */
+  -1, -1, -1, -1, -1, 30, -1, 31, /* 0x16000-0x16fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */
+  -1, -1, -1, -1, -1, -1, 32, -1, /* 0x1b000-0x1bfff */
+  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
+  33, 34, -1, -1, -1, 35, -1, -1, /* 0x1d000-0x1dfff */
+  36, -1, -1, -1, 37, -1, -1, -1  /* 0x1e000-0x1efff */
+};
+
+/* Determine number of column positions required for UC.  */
+int
+uc_width (ucs4_t uc, const char *encoding)
+{
+  /* Test for non-spacing or control character.  */
+  if ((uc >> 9) < 248)
+    {
+      int ind = nonspacing_table_ind[uc >> 9];
+      if (ind >= 0)
+        if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
+          {
+            if (uc > 0 && uc < 0xa0)
+              return -1;
+            else
+              return 0;
+          }
+    }
+  else if ((uc >> 9) == (0xe0000 >> 9))
+    {
+      if (uc >= 0xe0100)
+        {
+          if (uc <= 0xe01ef)
+            return 0;
+        }
+      else
+        {
+          if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001)
+            return 0;
+        }
+    }
+  /* Test for double-width character.
+   * Generated from "grep '^[^;]\{4,5\};[WF]' EastAsianWidth.txt"
+   * and            "grep '^[^;]\{4,5\};[^WF]' EastAsianWidth.txt"
+   */
+  if (uc >= 0x1100
+      && ((uc < 0x1160) /* Hangul Jamo */
+          || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */
+          || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
+              && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00))
+          || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
+          || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
+          || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */
+          || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
+          || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */
+          || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */
+          || (uc >= 0x20000 && uc <= 0x2ffff) /* Supplementary Ideographic Plane */
+          || (uc >= 0x30000 && uc <= 0x3ffff) /* Tertiary Ideographic Plane */
+     )   )
+    return 2;
+  /* In ancient CJK encodings, Cyrillic and most other characters are
+     double-width as well.  */
+  if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9
+      && is_cjk_encoding (encoding))
+    return 2;
+  return 1;
+}
diff --git a/lib/vasnprintf.c b/lib/vasnprintf.c
new file mode 100644 (file)
index 0000000..5757175
--- /dev/null
@@ -0,0 +1,5621 @@
+/* vsprintf with automatic memory allocation.
+   Copyright (C) 1999, 2002-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+/* This file can be parametrized with the following macros:
+     VASNPRINTF         The name of the function being defined.
+     FCHAR_T            The element type of the format string.
+     DCHAR_T            The element type of the destination (result) string.
+     FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters
+                        in the format string are ASCII. MUST be set if
+                        FCHAR_T and DCHAR_T are not the same type.
+     DIRECTIVE          Structure denoting a format directive.
+                        Depends on FCHAR_T.
+     DIRECTIVES         Structure denoting the set of format directives of a
+                        format string.  Depends on FCHAR_T.
+     PRINTF_PARSE       Function that parses a format string.
+                        Depends on FCHAR_T.
+     DCHAR_CPY          memcpy like function for DCHAR_T[] arrays.
+     DCHAR_SET          memset like function for DCHAR_T[] arrays.
+     DCHAR_MBSNLEN      mbsnlen like function for DCHAR_T[] arrays.
+     SNPRINTF           The system's snprintf (or similar) function.
+                        This may be either snprintf or swprintf.
+     TCHAR_T            The element type of the argument and result string
+                        of the said SNPRINTF function.  This may be either
+                        char or wchar_t.  The code exploits that
+                        sizeof (TCHAR_T) | sizeof (DCHAR_T) and
+                        alignof (TCHAR_T) <= alignof (DCHAR_T).
+     DCHAR_IS_TCHAR     Set to 1 if DCHAR_T and TCHAR_T are the same type.
+     DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[].
+     DCHAR_IS_UINT8_T   Set to 1 if DCHAR_T is uint8_t.
+     DCHAR_IS_UINT16_T  Set to 1 if DCHAR_T is uint16_t.
+     DCHAR_IS_UINT32_T  Set to 1 if DCHAR_T is uint32_t.  */
+
+/* Tell glibc's <stdio.h> to provide a prototype for snprintf().
+   This must come before <config.h> because <config.h> may include
+   <features.h>, and once <features.h> has been included, it's too late.  */
+#ifndef _GNU_SOURCE
+# define _GNU_SOURCE    1
+#endif
+
+#ifndef VASNPRINTF
+# include <config.h>
+#endif
+#ifndef IN_LIBINTL
+# include <alloca.h>
+#endif
+
+/* Specification.  */
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  include "vasnwprintf.h"
+# else
+#  include "vasnprintf.h"
+# endif
+#endif
+
+#include <locale.h>     /* localeconv() */
+#include <stdio.h>      /* snprintf(), sprintf() */
+#include <stdlib.h>     /* abort(), malloc(), realloc(), free() */
+#include <string.h>     /* memcpy(), strlen() */
+#include <errno.h>      /* errno */
+#include <limits.h>     /* CHAR_BIT */
+#include <float.h>      /* DBL_MAX_EXP, LDBL_MAX_EXP */
+#if HAVE_NL_LANGINFO
+# include <langinfo.h>
+#endif
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  include "wprintf-parse.h"
+# else
+#  include "printf-parse.h"
+# endif
+#endif
+
+/* Checked size_t computations.  */
+#include "xsize.h"
+
+#include "verify.h"
+
+#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "float+.h"
+#endif
+
+#if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnand-nolibm.h"
+#endif
+
+#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnanl-nolibm.h"
+# include "fpucw.h"
+#endif
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnand-nolibm.h"
+# include "printf-frexp.h"
+#endif
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+# include <math.h>
+# include "isnanl-nolibm.h"
+# include "printf-frexpl.h"
+# include "fpucw.h"
+#endif
+
+#ifndef FALLTHROUGH
+# if __GNUC__ < 7
+#  define FALLTHROUGH ((void) 0)
+# else
+#  define FALLTHROUGH __attribute__ ((__fallthrough__))
+# endif
+#endif
+
+/* Default parameters.  */
+#ifndef VASNPRINTF
+# if WIDE_CHAR_VERSION
+#  define VASNPRINTF vasnwprintf
+#  define FCHAR_T wchar_t
+#  define DCHAR_T wchar_t
+#  define TCHAR_T wchar_t
+#  define DCHAR_IS_TCHAR 1
+#  define DIRECTIVE wchar_t_directive
+#  define DIRECTIVES wchar_t_directives
+#  define PRINTF_PARSE wprintf_parse
+#  define DCHAR_CPY wmemcpy
+#  define DCHAR_SET wmemset
+# else
+#  define VASNPRINTF vasnprintf
+#  define FCHAR_T char
+#  define DCHAR_T char
+#  define TCHAR_T char
+#  define DCHAR_IS_TCHAR 1
+#  define DIRECTIVE char_directive
+#  define DIRECTIVES char_directives
+#  define PRINTF_PARSE printf_parse
+#  define DCHAR_CPY memcpy
+#  define DCHAR_SET memset
+# endif
+#endif
+#if WIDE_CHAR_VERSION
+  /* TCHAR_T is wchar_t.  */
+# define USE_SNPRINTF 1
+# if HAVE_DECL__SNWPRINTF
+   /* On Windows, the function swprintf() has a different signature than
+      on Unix; we use the function _snwprintf() or - on mingw - snwprintf()
+      instead.  The mingw function snwprintf() has fewer bugs than the
+      MSVCRT function _snwprintf(), so prefer that.  */
+#  if defined __MINGW32__
+#   define SNPRINTF snwprintf
+#  else
+#   define SNPRINTF _snwprintf
+#   define USE_MSVC__SNPRINTF 1
+#  endif
+# else
+   /* Unix.  */
+#  define SNPRINTF swprintf
+# endif
+#else
+  /* TCHAR_T is char.  */
+  /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'.
+     But don't use it on BeOS, since BeOS snprintf produces no output if the
+     size argument is >= 0x3000000.
+     Also don't use it on Linux libc5, since there snprintf with size = 1
+     writes any output without bounds, like sprintf.  */
+# if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1)
+#  define USE_SNPRINTF 1
+# else
+#  define USE_SNPRINTF 0
+# endif
+# if HAVE_DECL__SNPRINTF
+   /* Windows.  The mingw function snprintf() has fewer bugs than the MSVCRT
+      function _snprintf(), so prefer that.  */
+#  if defined __MINGW32__
+#   define SNPRINTF snprintf
+    /* Here we need to call the native snprintf, not rpl_snprintf.  */
+#   undef snprintf
+#  else
+    /* MSVC versions < 14 did not have snprintf, only _snprintf.  */
+#   define SNPRINTF _snprintf
+#   define USE_MSVC__SNPRINTF 1
+#  endif
+# else
+   /* Unix.  */
+#  define SNPRINTF snprintf
+   /* Here we need to call the native snprintf, not rpl_snprintf.  */
+#  undef snprintf
+# endif
+#endif
+/* Here we need to call the native sprintf, not rpl_sprintf.  */
+#undef sprintf
+
+/* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized"
+   warnings in this file.  Use -Dlint to suppress them.  */
+#if defined GCC_LINT || defined lint
+# define IF_LINT(Code) Code
+#else
+# define IF_LINT(Code) /* empty */
+#endif
+
+/* Avoid some warnings from "gcc -Wshadow".
+   This file doesn't use the exp() and remainder() functions.  */
+#undef exp
+#define exp expo
+#undef remainder
+#define remainder rem
+
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && !WIDE_CHAR_VERSION
+# if (HAVE_STRNLEN && !defined _AIX)
+#  define local_strnlen strnlen
+# else
+#  ifndef local_strnlen_defined
+#   define local_strnlen_defined 1
+static size_t
+local_strnlen (const char *string, size_t maxlen)
+{
+  const char *end = memchr (string, '\0', maxlen);
+  return end ? (size_t) (end - string) : maxlen;
+}
+#  endif
+# endif
+#endif
+
+#if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T
+# if HAVE_WCSLEN
+#  define local_wcslen wcslen
+# else
+   /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid
+      a dependency towards this library, here is a local substitute.
+      Define this substitute only once, even if this file is included
+      twice in the same compilation unit.  */
+#  ifndef local_wcslen_defined
+#   define local_wcslen_defined 1
+static size_t
+local_wcslen (const wchar_t *s)
+{
+  const wchar_t *ptr;
+
+  for (ptr = s; *ptr != (wchar_t) 0; ptr++)
+    ;
+  return ptr - s;
+}
+#  endif
+# endif
+#endif
+
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && HAVE_WCHAR_T && WIDE_CHAR_VERSION
+# if HAVE_WCSNLEN
+#  define local_wcsnlen wcsnlen
+# else
+#  ifndef local_wcsnlen_defined
+#   define local_wcsnlen_defined 1
+static size_t
+local_wcsnlen (const wchar_t *s, size_t maxlen)
+{
+  const wchar_t *ptr;
+
+  for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--)
+    ;
+  return ptr - s;
+}
+#  endif
+# endif
+#endif
+
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL
+/* Determine the decimal-point character according to the current locale.  */
+# ifndef decimal_point_char_defined
+#  define decimal_point_char_defined 1
+static char
+decimal_point_char (void)
+{
+  const char *point;
+  /* Determine it in a multithread-safe way.  We know nl_langinfo is
+     multithread-safe on glibc systems and Mac OS X systems, but is not required
+     to be multithread-safe by POSIX.  sprintf(), however, is multithread-safe.
+     localeconv() is rarely multithread-safe.  */
+#  if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__))
+  point = nl_langinfo (RADIXCHAR);
+#  elif 1
+  char pointbuf[5];
+  sprintf (pointbuf, "%#.0f", 1.0);
+  point = &pointbuf[1];
+#  else
+  point = localeconv () -> decimal_point;
+#  endif
+  /* The decimal point is always a single byte: either '.' or ','.  */
+  return (point[0] != '\0' ? point[0] : '.');
+}
+# endif
+#endif
+
+#if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL
+
+/* Equivalent to !isfinite(x) || x == 0, but does not require libm.  */
+static int
+is_infinite_or_zero (double x)
+{
+  return isnand (x) || x + x == x;
+}
+
+#endif
+
+#if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL
+
+/* Equivalent to !isfinite(x) || x == 0, but does not require libm.  */
+static int
+is_infinite_or_zerol (long double x)
+{
+  return isnanl (x) || x + x == x;
+}
+
+#endif
+
+#if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+
+/* Converting 'long double' to decimal without rare rounding bugs requires
+   real bignums.  We use the naming conventions of GNU gmp, but vastly simpler
+   (and slower) algorithms.  */
+
+typedef unsigned int mp_limb_t;
+# define GMP_LIMB_BITS 32
+verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS);
+
+typedef unsigned long long mp_twolimb_t;
+# define GMP_TWOLIMB_BITS 64
+verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS);
+
+/* Representation of a bignum >= 0.  */
+typedef struct
+{
+  size_t nlimbs;
+  mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc().  */
+} mpn_t;
+
+/* Compute the product of two bignums >= 0.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+multiply (mpn_t src1, mpn_t src2, mpn_t *dest)
+{
+  const mp_limb_t *p1;
+  const mp_limb_t *p2;
+  size_t len1;
+  size_t len2;
+
+  if (src1.nlimbs <= src2.nlimbs)
+    {
+      len1 = src1.nlimbs;
+      p1 = src1.limbs;
+      len2 = src2.nlimbs;
+      p2 = src2.limbs;
+    }
+  else
+    {
+      len1 = src2.nlimbs;
+      p1 = src2.limbs;
+      len2 = src1.nlimbs;
+      p2 = src1.limbs;
+    }
+  /* Now 0 <= len1 <= len2.  */
+  if (len1 == 0)
+    {
+      /* src1 or src2 is zero.  */
+      dest->nlimbs = 0;
+      dest->limbs = (mp_limb_t *) malloc (1);
+    }
+  else
+    {
+      /* Here 1 <= len1 <= len2.  */
+      size_t dlen;
+      mp_limb_t *dp;
+      size_t k, i, j;
+
+      dlen = len1 + len2;
+      dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t));
+      if (dp == NULL)
+        return NULL;
+      for (k = len2; k > 0; )
+        dp[--k] = 0;
+      for (i = 0; i < len1; i++)
+        {
+          mp_limb_t digit1 = p1[i];
+          mp_twolimb_t carry = 0;
+          for (j = 0; j < len2; j++)
+            {
+              mp_limb_t digit2 = p2[j];
+              carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
+              carry += dp[i + j];
+              dp[i + j] = (mp_limb_t) carry;
+              carry = carry >> GMP_LIMB_BITS;
+            }
+          dp[i + len2] = (mp_limb_t) carry;
+        }
+      /* Normalise.  */
+      while (dlen > 0 && dp[dlen - 1] == 0)
+        dlen--;
+      dest->nlimbs = dlen;
+      dest->limbs = dp;
+    }
+  return dest->limbs;
+}
+
+/* Compute the quotient of a bignum a >= 0 and a bignum b > 0.
+   a is written as  a = q * b + r  with 0 <= r < b.  q is the quotient, r
+   the remainder.
+   Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd,
+   q is incremented.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+divide (mpn_t a, mpn_t b, mpn_t *q)
+{
+  /* Algorithm:
+     First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]]
+     with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS).
+     If m<n, then q:=0 and r:=a.
+     If m>=n=1, perform a single-precision division:
+       r:=0, j:=m,
+       while j>0 do
+         {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j =
+               = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta}
+         j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j].
+       Normalise [q[m-1],...,q[0]], yields q.
+     If m>=n>1, perform a multiple-precision division:
+       We have a/b < beta^(m-n+1).
+       s:=intDsize-1-(highest bit in b[n-1]), 0<=s<intDsize.
+       Shift a and b left by s bits, copying them. r:=a.
+       r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2.
+       For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).}
+         Compute q* :
+           q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]).
+           In case of overflow (q* >= beta) set q* := beta-1.
+           Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2]
+           and c3 := b[n-2] * q*.
+           {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow
+            occurred.  Furthermore 0 <= c3 < beta^2.
+            If there was overflow and
+            r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2,
+            the next test can be skipped.}
+           While c3 > c2, {Here 0 <= c2 < c3 < beta^2}
+             Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2].
+           If q* > 0:
+             Put r := r - b * q* * beta^j. In detail:
+               [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]].
+               hence: u:=0, for i:=0 to n-1 do
+                              u := u + q* * b[i],
+                              r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry),
+                              u:=u div beta (+ 1, if carry in subtraction)
+                      r[n+j]:=r[n+j]-u.
+               {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1
+                               < q* + 1 <= beta,
+                the carry u does not overflow.}
+             If a negative carry occurs, put q* := q* - 1
+               and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]].
+         Set q[j] := q*.
+       Normalise [q[m-n],..,q[0]]; this yields the quotient q.
+       Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the
+       rest r.
+       The room for q[j] can be allocated at the memory location of r[n+j].
+     Finally, round-to-even:
+       Shift r left by 1 bit.
+       If r > b or if r = b and q[0] is odd, q := q+1.
+   */
+  const mp_limb_t *a_ptr = a.limbs;
+  size_t a_len = a.nlimbs;
+  const mp_limb_t *b_ptr = b.limbs;
+  size_t b_len = b.nlimbs;
+  mp_limb_t *roomptr;
+  mp_limb_t *tmp_roomptr = NULL;
+  mp_limb_t *q_ptr;
+  size_t q_len;
+  mp_limb_t *r_ptr;
+  size_t r_len;
+
+  /* Allocate room for a_len+2 digits.
+     (Need a_len+1 digits for the real division and 1 more digit for the
+     final rounding of q.)  */
+  roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t));
+  if (roomptr == NULL)
+    return NULL;
+
+  /* Normalise a.  */
+  while (a_len > 0 && a_ptr[a_len - 1] == 0)
+    a_len--;
+
+  /* Normalise b.  */
+  for (;;)
+    {
+      if (b_len == 0)
+        /* Division by zero.  */
+        abort ();
+      if (b_ptr[b_len - 1] == 0)
+        b_len--;
+      else
+        break;
+    }
+
+  /* Here m = a_len >= 0 and n = b_len > 0.  */
+
+  if (a_len < b_len)
+    {
+      /* m<n: trivial case.  q=0, r := copy of a.  */
+      r_ptr = roomptr;
+      r_len = a_len;
+      memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
+      q_ptr = roomptr + a_len;
+      q_len = 0;
+    }
+  else if (b_len == 1)
+    {
+      /* n=1: single precision division.
+         beta^(m-1) <= a < beta^m  ==>  beta^(m-2) <= a/b < beta^m  */
+      r_ptr = roomptr;
+      q_ptr = roomptr + 1;
+      {
+        mp_limb_t den = b_ptr[0];
+        mp_limb_t remainder = 0;
+        const mp_limb_t *sourceptr = a_ptr + a_len;
+        mp_limb_t *destptr = q_ptr + a_len;
+        size_t count;
+        for (count = a_len; count > 0; count--)
+          {
+            mp_twolimb_t num =
+              ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr;
+            *--destptr = num / den;
+            remainder = num % den;
+          }
+        /* Normalise and store r.  */
+        if (remainder > 0)
+          {
+            r_ptr[0] = remainder;
+            r_len = 1;
+          }
+        else
+          r_len = 0;
+        /* Normalise q.  */
+        q_len = a_len;
+        if (q_ptr[q_len - 1] == 0)
+          q_len--;
+      }
+    }
+  else
+    {
+      /* n>1: multiple precision division.
+         beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n  ==>
+         beta^(m-n-1) <= a/b < beta^(m-n+1).  */
+      /* Determine s.  */
+      size_t s;
+      {
+        mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */
+        /* Determine s = GMP_LIMB_BITS - integer_length (msd).
+           Code copied from gnulib's integer_length.c.  */
+# if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4)
+        s = __builtin_clz (msd);
+# else
+#  if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT
+        if (GMP_LIMB_BITS <= DBL_MANT_BIT)
+          {
+            /* Use 'double' operations.
+               Assumes an IEEE 754 'double' implementation.  */
+#   define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7)
+#   define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1)
+#   define NWORDS \
+     ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int))
+            union { double value; unsigned int word[NWORDS]; } m;
+
+            /* Use a single integer to floating-point conversion.  */
+            m.value = msd;
+
+            s = GMP_LIMB_BITS
+                - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK)
+                   - DBL_EXP_BIAS);
+          }
+        else
+#   undef NWORDS
+#  endif
+          {
+            s = 31;
+            if (msd >= 0x10000)
+              {
+                msd = msd >> 16;
+                s -= 16;
+              }
+            if (msd >= 0x100)
+              {
+                msd = msd >> 8;
+                s -= 8;
+              }
+            if (msd >= 0x10)
+              {
+                msd = msd >> 4;
+                s -= 4;
+              }
+            if (msd >= 0x4)
+              {
+                msd = msd >> 2;
+                s -= 2;
+              }
+            if (msd >= 0x2)
+              {
+                msd = msd >> 1;
+                s -= 1;
+              }
+          }
+# endif
+      }
+      /* 0 <= s < GMP_LIMB_BITS.
+         Copy b, shifting it left by s bits.  */
+      if (s > 0)
+        {
+          tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t));
+          if (tmp_roomptr == NULL)
+            {
+              free (roomptr);
+              return NULL;
+            }
+          {
+            const mp_limb_t *sourceptr = b_ptr;
+            mp_limb_t *destptr = tmp_roomptr;
+            mp_twolimb_t accu = 0;
+            size_t count;
+            for (count = b_len; count > 0; count--)
+              {
+                accu += (mp_twolimb_t) *sourceptr++ << s;
+                *destptr++ = (mp_limb_t) accu;
+                accu = accu >> GMP_LIMB_BITS;
+              }
+            /* accu must be zero, since that was how s was determined.  */
+            if (accu != 0)
+              abort ();
+          }
+          b_ptr = tmp_roomptr;
+        }
+      /* Copy a, shifting it left by s bits, yields r.
+         Memory layout:
+         At the beginning: r = roomptr[0..a_len],
+         at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len]  */
+      r_ptr = roomptr;
+      if (s == 0)
+        {
+          memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t));
+          r_ptr[a_len] = 0;
+        }
+      else
+        {
+          const mp_limb_t *sourceptr = a_ptr;
+          mp_limb_t *destptr = r_ptr;
+          mp_twolimb_t accu = 0;
+          size_t count;
+          for (count = a_len; count > 0; count--)
+            {
+              accu += (mp_twolimb_t) *sourceptr++ << s;
+              *destptr++ = (mp_limb_t) accu;
+              accu = accu >> GMP_LIMB_BITS;
+            }
+          *destptr++ = (mp_limb_t) accu;
+        }
+      q_ptr = roomptr + b_len;
+      q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */
+      {
+        size_t j = a_len - b_len; /* m-n */
+        mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */
+        mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */
+        mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */
+          ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd;
+        /* Division loop, traversed m-n+1 times.
+           j counts down, b is unchanged, beta/2 <= b[n-1] < beta.  */
+        for (;;)
+          {
+            mp_limb_t q_star;
+            mp_limb_t c1;
+            if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */
+              {
+                /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow.  */
+                mp_twolimb_t num =
+                  ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS)
+                  | r_ptr[j + b_len - 1];
+                q_star = num / b_msd;
+                c1 = num % b_msd;
+              }
+            else
+              {
+                /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1].  */
+                q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */
+                /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta
+                   <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta
+                   <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta)
+                        {<= beta !}.
+                   If yes, jump directly to the subtraction loop.
+                   (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta
+                    <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */
+                if (r_ptr[j + b_len] > b_msd
+                    || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd)
+                  /* r[j+n] >= b[n-1]+1 or
+                     r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a
+                     carry.  */
+                  goto subtract;
+              }
+            /* q_star = q*,
+               c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta).  */
+            {
+              mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */
+                ((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2];
+              mp_twolimb_t c3 = /* b[n-2] * q* */
+                (mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star;
+              /* While c2 < c3, increase c2 and decrease c3.
+                 Consider c3-c2.  While it is > 0, decrease it by
+                 b[n-1]*beta+b[n-2].  Because of b[n-1]*beta+b[n-2] >= beta^2/2
+                 this can happen only twice.  */
+              if (c3 > c2)
+                {
+                  q_star = q_star - 1; /* q* := q* - 1 */
+                  if (c3 - c2 > b_msdd)
+                    q_star = q_star - 1; /* q* := q* - 1 */
+                }
+            }
+            if (q_star > 0)
+              subtract:
+              {
+                /* Subtract r := r - b * q* * beta^j.  */
+                mp_limb_t cr;
+                {
+                  const mp_limb_t *sourceptr = b_ptr;
+                  mp_limb_t *destptr = r_ptr + j;
+                  mp_twolimb_t carry = 0;
+                  size_t count;
+                  for (count = b_len; count > 0; count--)
+                    {
+                      /* Here 0 <= carry <= q*.  */
+                      carry =
+                        carry
+                        + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++
+                        + (mp_limb_t) ~(*destptr);
+                      /* Here 0 <= carry <= beta*q* + beta-1.  */
+                      *destptr++ = ~(mp_limb_t) carry;
+                      carry = carry >> GMP_LIMB_BITS; /* <= q* */
+                    }
+                  cr = (mp_limb_t) carry;
+                }
+                /* Subtract cr from r_ptr[j + b_len], then forget about
+                   r_ptr[j + b_len].  */
+                if (cr > r_ptr[j + b_len])
+                  {
+                    /* Subtraction gave a carry.  */
+                    q_star = q_star - 1; /* q* := q* - 1 */
+                    /* Add b back.  */
+                    {
+                      const mp_limb_t *sourceptr = b_ptr;
+                      mp_limb_t *destptr = r_ptr + j;
+                      mp_limb_t carry = 0;
+                      size_t count;
+                      for (count = b_len; count > 0; count--)
+                        {
+                          mp_limb_t source1 = *sourceptr++;
+                          mp_limb_t source2 = *destptr;
+                          *destptr++ = source1 + source2 + carry;
+                          carry =
+                            (carry
+                             ? source1 >= (mp_limb_t) ~source2
+                             : source1 > (mp_limb_t) ~source2);
+                        }
+                    }
+                    /* Forget about the carry and about r[j+n].  */
+                  }
+              }
+            /* q* is determined.  Store it as q[j].  */
+            q_ptr[j] = q_star;
+            if (j == 0)
+              break;
+            j--;
+          }
+      }
+      r_len = b_len;
+      /* Normalise q.  */
+      if (q_ptr[q_len - 1] == 0)
+        q_len--;
+# if 0 /* Not needed here, since we need r only to compare it with b/2, and
+          b is shifted left by s bits.  */
+      /* Shift r right by s bits.  */
+      if (s > 0)
+        {
+          mp_limb_t ptr = r_ptr + r_len;
+          mp_twolimb_t accu = 0;
+          size_t count;
+          for (count = r_len; count > 0; count--)
+            {
+              accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS;
+              accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s);
+              *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS);
+            }
+        }
+# endif
+      /* Normalise r.  */
+      while (r_len > 0 && r_ptr[r_len - 1] == 0)
+        r_len--;
+    }
+  /* Compare r << 1 with b.  */
+  if (r_len > b_len)
+    goto increment_q;
+  {
+    size_t i;
+    for (i = b_len;;)
+      {
+        mp_limb_t r_i =
+          (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0)
+          | (i < r_len ? r_ptr[i] << 1 : 0);
+        mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0);
+        if (r_i > b_i)
+          goto increment_q;
+        if (r_i < b_i)
+          goto keep_q;
+        if (i == 0)
+          break;
+        i--;
+      }
+  }
+  if (q_len > 0 && ((q_ptr[0] & 1) != 0))
+    /* q is odd.  */
+    increment_q:
+    {
+      size_t i;
+      for (i = 0; i < q_len; i++)
+        if (++(q_ptr[i]) != 0)
+          goto keep_q;
+      q_ptr[q_len++] = 1;
+    }
+  keep_q:
+  if (tmp_roomptr != NULL)
+    free (tmp_roomptr);
+  q->limbs = q_ptr;
+  q->nlimbs = q_len;
+  return roomptr;
+}
+
+/* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal
+   representation.
+   Destroys the contents of a.
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+convert_to_decimal (mpn_t a, size_t extra_zeroes)
+{
+  mp_limb_t *a_ptr = a.limbs;
+  size_t a_len = a.nlimbs;
+  /* 0.03345 is slightly larger than log(2)/(9*log(10)).  */
+  size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1);
+  /* We need extra_zeroes bytes for zeroes, followed by c_len bytes for the
+     digits of a, followed by 1 byte for the terminating NUL.  */
+  char *c_ptr = (char *) malloc (xsum (xsum (extra_zeroes, c_len), 1));
+  if (c_ptr != NULL)
+    {
+      char *d_ptr = c_ptr;
+      for (; extra_zeroes > 0; extra_zeroes--)
+        *d_ptr++ = '0';
+      while (a_len > 0)
+        {
+          /* Divide a by 10^9, in-place.  */
+          mp_limb_t remainder = 0;
+          mp_limb_t *ptr = a_ptr + a_len;
+          size_t count;
+          for (count = a_len; count > 0; count--)
+            {
+              mp_twolimb_t num =
+                ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr;
+              *ptr = num / 1000000000;
+              remainder = num % 1000000000;
+            }
+          /* Store the remainder as 9 decimal digits.  */
+          for (count = 9; count > 0; count--)
+            {
+              *d_ptr++ = '0' + (remainder % 10);
+              remainder = remainder / 10;
+            }
+          /* Normalize a.  */
+          if (a_ptr[a_len - 1] == 0)
+            a_len--;
+        }
+      /* Remove leading zeroes.  */
+      while (d_ptr > c_ptr && d_ptr[-1] == '0')
+        d_ptr--;
+      /* But keep at least one zero.  */
+      if (d_ptr == c_ptr)
+        *d_ptr++ = '0';
+      /* Terminate the string.  */
+      *d_ptr = '\0';
+    }
+  return c_ptr;
+}
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and >= 0:
+   write x as x = 2^e * m, where m is a bignum.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+decode_long_double (long double x, int *ep, mpn_t *mp)
+{
+  mpn_t m;
+  int exp;
+  long double y;
+  size_t i;
+
+  /* Allocate memory for result.  */
+  m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
+  m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
+  if (m.limbs == NULL)
+    return NULL;
+  /* Split into exponential part and mantissa.  */
+  y = frexpl (x, &exp);
+  if (!(y >= 0.0L && y < 1.0L))
+    abort ();
+  /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the
+     latter is an integer.  */
+  /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs.
+     I'm not sure whether it's safe to cast a 'long double' value between
+     2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
+     'long double' values between 0 and 2^16 (to 'unsigned int' or 'int',
+     doesn't matter).  */
+#  if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0
+#   if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2));
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+#   else
+    {
+      mp_limb_t d;
+      y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS);
+      d = (int) y;
+      y -= d;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d;
+    }
+#   endif
+#  endif
+  for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0L && y < 1.0L))
+        abort ();
+      m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+#  if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess
+           precision.  */
+  if (!(y == 0.0L))
+    abort ();
+#  endif
+  /* Normalise.  */
+  while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
+    m.nlimbs--;
+  *mp = m;
+  *ep = exp - LDBL_MANT_BIT;
+  return m.limbs;
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and >= 0:
+   write x as x = 2^e * m, where m is a bignum.
+   Return the allocated memory in case of success, NULL in case of memory
+   allocation failure.  */
+static void *
+decode_double (double x, int *ep, mpn_t *mp)
+{
+  mpn_t m;
+  int exp;
+  double y;
+  size_t i;
+
+  /* Allocate memory for result.  */
+  m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS;
+  m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t));
+  if (m.limbs == NULL)
+    return NULL;
+  /* Split into exponential part and mantissa.  */
+  y = frexp (x, &exp);
+  if (!(y >= 0.0 && y < 1.0))
+    abort ();
+  /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the
+     latter is an integer.  */
+  /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs.
+     I'm not sure whether it's safe to cast a 'double' value between
+     2^31 and 2^32 to 'unsigned int', therefore play safe and cast only
+     'double' values between 0 and 2^16 (to 'unsigned int' or 'int',
+     doesn't matter).  */
+#  if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0
+#   if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2));
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+#   else
+    {
+      mp_limb_t d;
+      y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS);
+      d = (int) y;
+      y -= d;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d;
+    }
+#   endif
+#  endif
+  for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; )
+    {
+      mp_limb_t hi, lo;
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      hi = (int) y;
+      y -= hi;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2);
+      lo = (int) y;
+      y -= lo;
+      if (!(y >= 0.0 && y < 1.0))
+        abort ();
+      m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo;
+    }
+  if (!(y == 0.0))
+    abort ();
+  /* Normalise.  */
+  while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0)
+    m.nlimbs--;
+  *mp = m;
+  *ep = exp - DBL_MANT_BIT;
+  return m.limbs;
+}
+
+# endif
+
+/* Assuming x = 2^e * m is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n)
+{
+  int s;
+  size_t extra_zeroes;
+  unsigned int abs_n;
+  unsigned int abs_s;
+  mp_limb_t *pow5_ptr;
+  size_t pow5_len;
+  unsigned int s_limbs;
+  unsigned int s_bits;
+  mpn_t pow5;
+  mpn_t z;
+  void *z_memory;
+  char *digits;
+
+  if (memory == NULL)
+    return NULL;
+  /* x = 2^e * m, hence
+     y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m)
+       = round (2^s * 5^n * m).  */
+  s = e + n;
+  extra_zeroes = 0;
+  /* Factor out a common power of 10 if possible.  */
+  if (s > 0 && n > 0)
+    {
+      extra_zeroes = (s < n ? s : n);
+      s -= extra_zeroes;
+      n -= extra_zeroes;
+    }
+  /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes.
+     Before converting to decimal, we need to compute
+     z = round (2^s * 5^n * m).  */
+  /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same
+     sign.  2.322 is slightly larger than log(5)/log(2).  */
+  abs_n = (n >= 0 ? n : -n);
+  abs_s = (s >= 0 ? s : -s);
+  pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1
+                                    + abs_s / GMP_LIMB_BITS + 1)
+                                   * sizeof (mp_limb_t));
+  if (pow5_ptr == NULL)
+    {
+      free (memory);
+      return NULL;
+    }
+  /* Initialize with 1.  */
+  pow5_ptr[0] = 1;
+  pow5_len = 1;
+  /* Multiply with 5^|n|.  */
+  if (abs_n > 0)
+    {
+      static mp_limb_t const small_pow5[13 + 1] =
+        {
+          1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625,
+          48828125, 244140625, 1220703125
+        };
+      unsigned int n13;
+      for (n13 = 0; n13 <= abs_n; n13 += 13)
+        {
+          mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13];
+          size_t j;
+          mp_twolimb_t carry = 0;
+          for (j = 0; j < pow5_len; j++)
+            {
+              mp_limb_t digit2 = pow5_ptr[j];
+              carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2;
+              pow5_ptr[j] = (mp_limb_t) carry;
+              carry = carry >> GMP_LIMB_BITS;
+            }
+          if (carry > 0)
+            pow5_ptr[pow5_len++] = (mp_limb_t) carry;
+        }
+    }
+  s_limbs = abs_s / GMP_LIMB_BITS;
+  s_bits = abs_s % GMP_LIMB_BITS;
+  if (n >= 0 ? s >= 0 : s <= 0)
+    {
+      /* Multiply with 2^|s|.  */
+      if (s_bits > 0)
+        {
+          mp_limb_t *ptr = pow5_ptr;
+          mp_twolimb_t accu = 0;
+          size_t count;
+          for (count = pow5_len; count > 0; count--)
+            {
+              accu += (mp_twolimb_t) *ptr << s_bits;
+              *ptr++ = (mp_limb_t) accu;
+              accu = accu >> GMP_LIMB_BITS;
+            }
+          if (accu > 0)
+            {
+              *ptr = (mp_limb_t) accu;
+              pow5_len++;
+            }
+        }
+      if (s_limbs > 0)
+        {
+          size_t count;
+          for (count = pow5_len; count > 0;)
+            {
+              count--;
+              pow5_ptr[s_limbs + count] = pow5_ptr[count];
+            }
+          for (count = s_limbs; count > 0;)
+            {
+              count--;
+              pow5_ptr[count] = 0;
+            }
+          pow5_len += s_limbs;
+        }
+      pow5.limbs = pow5_ptr;
+      pow5.nlimbs = pow5_len;
+      if (n >= 0)
+        {
+          /* Multiply m with pow5.  No division needed.  */
+          z_memory = multiply (m, pow5, &z);
+        }
+      else
+        {
+          /* Divide m by pow5 and round.  */
+          z_memory = divide (m, pow5, &z);
+        }
+    }
+  else
+    {
+      pow5.limbs = pow5_ptr;
+      pow5.nlimbs = pow5_len;
+      if (n >= 0)
+        {
+          /* n >= 0, s < 0.
+             Multiply m with pow5, then divide by 2^|s|.  */
+          mpn_t numerator;
+          mpn_t denominator;
+          void *tmp_memory;
+          tmp_memory = multiply (m, pow5, &numerator);
+          if (tmp_memory == NULL)
+            {
+              free (pow5_ptr);
+              free (memory);
+              return NULL;
+            }
+          /* Construct 2^|s|.  */
+          {
+            mp_limb_t *ptr = pow5_ptr + pow5_len;
+            size_t i;
+            for (i = 0; i < s_limbs; i++)
+              ptr[i] = 0;
+            ptr[s_limbs] = (mp_limb_t) 1 << s_bits;
+            denominator.limbs = ptr;
+            denominator.nlimbs = s_limbs + 1;
+          }
+          z_memory = divide (numerator, denominator, &z);
+          free (tmp_memory);
+        }
+      else
+        {
+          /* n < 0, s > 0.
+             Multiply m with 2^s, then divide by pow5.  */
+          mpn_t numerator;
+          mp_limb_t *num_ptr;
+          num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1)
+                                          * sizeof (mp_limb_t));
+          if (num_ptr == NULL)
+            {
+              free (pow5_ptr);
+              free (memory);
+              return NULL;
+            }
+          {
+            mp_limb_t *destptr = num_ptr;
+            {
+              size_t i;
+              for (i = 0; i < s_limbs; i++)
+                *destptr++ = 0;
+            }
+            if (s_bits > 0)
+              {
+                const mp_limb_t *sourceptr = m.limbs;
+                mp_twolimb_t accu = 0;
+                size_t count;
+                for (count = m.nlimbs; count > 0; count--)
+                  {
+                    accu += (mp_twolimb_t) *sourceptr++ << s_bits;
+                    *destptr++ = (mp_limb_t) accu;
+                    accu = accu >> GMP_LIMB_BITS;
+                  }
+                if (accu > 0)
+                  *destptr++ = (mp_limb_t) accu;
+              }
+            else
+              {
+                const mp_limb_t *sourceptr = m.limbs;
+                size_t count;
+                for (count = m.nlimbs; count > 0; count--)
+                  *destptr++ = *sourceptr++;
+              }
+            numerator.limbs = num_ptr;
+            numerator.nlimbs = destptr - num_ptr;
+          }
+          z_memory = divide (numerator, pow5, &z);
+          free (num_ptr);
+        }
+    }
+  free (pow5_ptr);
+  free (memory);
+
+  /* Here y = round (x * 10^n) = z * 10^extra_zeroes.  */
+
+  if (z_memory == NULL)
+    return NULL;
+  digits = convert_to_decimal (z, extra_zeroes);
+  free (z_memory);
+  return digits;
+}
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_long_double (long double x, int n)
+{
+  int e IF_LINT(= 0);
+  mpn_t m;
+  void *memory = decode_long_double (x, &e, &m);
+  return scale10_round_decimal_decoded (e, m, memory, n);
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and >= 0, and n is an integer:
+   Returns the decimal representation of round (x * 10^n).
+   Return the allocated memory - containing the decimal digits in low-to-high
+   order, terminated with a NUL character - in case of success, NULL in case
+   of memory allocation failure.  */
+static char *
+scale10_round_decimal_double (double x, int n)
+{
+  int e IF_LINT(= 0);
+  mpn_t m;
+  void *memory = decode_double (x, &e, &m);
+  return scale10_round_decimal_decoded (e, m, memory, n);
+}
+
+# endif
+
+# if NEED_PRINTF_LONG_DOUBLE
+
+/* Assuming x is finite and > 0:
+   Return an approximation for n with 10^n <= x < 10^(n+1).
+   The approximation is usually the right n, but may be off by 1 sometimes.  */
+static int
+floorlog10l (long double x)
+{
+  int exp;
+  long double y;
+  double z;
+  double l;
+
+  /* Split into exponential part and mantissa.  */
+  y = frexpl (x, &exp);
+  if (!(y >= 0.0L && y < 1.0L))
+    abort ();
+  if (y == 0.0L)
+    return INT_MIN;
+  if (y < 0.5L)
+    {
+      while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
+        {
+          y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
+          exp -= GMP_LIMB_BITS;
+        }
+      if (y < (1.0L / (1 << 16)))
+        {
+          y *= 1.0L * (1 << 16);
+          exp -= 16;
+        }
+      if (y < (1.0L / (1 << 8)))
+        {
+          y *= 1.0L * (1 << 8);
+          exp -= 8;
+        }
+      if (y < (1.0L / (1 << 4)))
+        {
+          y *= 1.0L * (1 << 4);
+          exp -= 4;
+        }
+      if (y < (1.0L / (1 << 2)))
+        {
+          y *= 1.0L * (1 << 2);
+          exp -= 2;
+        }
+      if (y < (1.0L / (1 << 1)))
+        {
+          y *= 1.0L * (1 << 1);
+          exp -= 1;
+        }
+    }
+  if (!(y >= 0.5L && y < 1.0L))
+    abort ();
+  /* Compute an approximation for l = log2(x) = exp + log2(y).  */
+  l = exp;
+  z = y;
+  if (z < 0.70710678118654752444)
+    {
+      z *= 1.4142135623730950488;
+      l -= 0.5;
+    }
+  if (z < 0.8408964152537145431)
+    {
+      z *= 1.1892071150027210667;
+      l -= 0.25;
+    }
+  if (z < 0.91700404320467123175)
+    {
+      z *= 1.0905077326652576592;
+      l -= 0.125;
+    }
+  if (z < 0.9576032806985736469)
+    {
+      z *= 1.0442737824274138403;
+      l -= 0.0625;
+    }
+  /* Now 0.95 <= z <= 1.01.  */
+  z = 1 - z;
+  /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...)
+     Four terms are enough to get an approximation with error < 10^-7.  */
+  l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
+  /* Finally multiply with log(2)/log(10), yields an approximation for
+     log10(x).  */
+  l *= 0.30102999566398119523;
+  /* Round down to the next integer.  */
+  return (int) l + (l < 0 ? -1 : 0);
+}
+
+# endif
+
+# if NEED_PRINTF_DOUBLE
+
+/* Assuming x is finite and > 0:
+   Return an approximation for n with 10^n <= x < 10^(n+1).
+   The approximation is usually the right n, but may be off by 1 sometimes.  */
+static int
+floorlog10 (double x)
+{
+  int exp;
+  double y;
+  double z;
+  double l;
+
+  /* Split into exponential part and mantissa.  */
+  y = frexp (x, &exp);
+  if (!(y >= 0.0 && y < 1.0))
+    abort ();
+  if (y == 0.0)
+    return INT_MIN;
+  if (y < 0.5)
+    {
+      while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2))))
+        {
+          y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2));
+          exp -= GMP_LIMB_BITS;
+        }
+      if (y < (1.0 / (1 << 16)))
+        {
+          y *= 1.0 * (1 << 16);
+          exp -= 16;
+        }
+      if (y < (1.0 / (1 << 8)))
+        {
+          y *= 1.0 * (1 << 8);
+          exp -= 8;
+        }
+      if (y < (1.0 / (1 << 4)))
+        {
+          y *= 1.0 * (1 << 4);
+          exp -= 4;
+        }
+      if (y < (1.0 / (1 << 2)))
+        {
+          y *= 1.0 * (1 << 2);
+          exp -= 2;
+        }
+      if (y < (1.0 / (1 << 1)))
+        {
+          y *= 1.0 * (1 << 1);
+          exp -= 1;
+        }
+    }
+  if (!(y >= 0.5 && y < 1.0))
+    abort ();
+  /* Compute an approximation for l = log2(x) = exp + log2(y).  */
+  l = exp;
+  z = y;
+  if (z < 0.70710678118654752444)
+    {
+      z *= 1.4142135623730950488;
+      l -= 0.5;
+    }
+  if (z < 0.8408964152537145431)
+    {
+      z *= 1.1892071150027210667;
+      l -= 0.25;
+    }
+  if (z < 0.91700404320467123175)
+    {
+      z *= 1.0905077326652576592;
+      l -= 0.125;
+    }
+  if (z < 0.9576032806985736469)
+    {
+      z *= 1.0442737824274138403;
+      l -= 0.0625;
+    }
+  /* Now 0.95 <= z <= 1.01.  */
+  z = 1 - z;
+  /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...)
+     Four terms are enough to get an approximation with error < 10^-7.  */
+  l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25)));
+  /* Finally multiply with log(2)/log(10), yields an approximation for
+     log10(x).  */
+  l *= 0.30102999566398119523;
+  /* Round down to the next integer.  */
+  return (int) l + (l < 0 ? -1 : 0);
+}
+
+# endif
+
+/* Tests whether a string of digits consists of exactly PRECISION zeroes and
+   a single '1' digit.  */
+static int
+is_borderline (const char *digits, size_t precision)
+{
+  for (; precision > 0; precision--, digits++)
+    if (*digits != '0')
+      return 0;
+  if (*digits != '1')
+    return 0;
+  digits++;
+  return *digits == '\0';
+}
+
+#endif
+
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF
+
+/* Use a different function name, to make it possible that the 'wchar_t'
+   parametrization and the 'char' parametrization get compiled in the same
+   translation unit.  */
+# if WIDE_CHAR_VERSION
+#  define MAX_ROOM_NEEDED wmax_room_needed
+# else
+#  define MAX_ROOM_NEEDED max_room_needed
+# endif
+
+/* Returns the number of TCHAR_T units needed as temporary space for the result
+   of sprintf or SNPRINTF of a single conversion directive.  */
+static size_t
+MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion,
+                 arg_type type, int flags, size_t width, int has_precision,
+                 size_t precision, int pad_ourselves)
+{
+  size_t tmp_length;
+
+  switch (conversion)
+    {
+    case 'd': case 'i': case 'u':
+# if HAVE_LONG_LONG_INT
+      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+                          * 0.30103 /* binary -> decimal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+# endif
+      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+                          * 0.30103 /* binary -> decimal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+        tmp_length =
+          (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+                          * 0.30103 /* binary -> decimal */
+                         )
+          + 1; /* turn floor into ceil */
+      if (tmp_length < precision)
+        tmp_length = precision;
+      /* Multiply by 2, as an estimate for FLAG_GROUP.  */
+      tmp_length = xsum (tmp_length, tmp_length);
+      /* Add 1, to account for a leading sign.  */
+      tmp_length = xsum (tmp_length, 1);
+      break;
+
+    case 'o':
+# if HAVE_LONG_LONG_INT
+      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+                          * 0.333334 /* binary -> octal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+# endif
+      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+                          * 0.333334 /* binary -> octal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+        tmp_length =
+          (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+                          * 0.333334 /* binary -> octal */
+                         )
+          + 1; /* turn floor into ceil */
+      if (tmp_length < precision)
+        tmp_length = precision;
+      /* Add 1, to account for a leading sign.  */
+      tmp_length = xsum (tmp_length, 1);
+      break;
+
+    case 'x': case 'X':
+# if HAVE_LONG_LONG_INT
+      if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long long) * CHAR_BIT
+                          * 0.25 /* binary -> hexadecimal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+# endif
+      if (type == TYPE_LONGINT || type == TYPE_ULONGINT)
+        tmp_length =
+          (unsigned int) (sizeof (unsigned long) * CHAR_BIT
+                          * 0.25 /* binary -> hexadecimal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+        tmp_length =
+          (unsigned int) (sizeof (unsigned int) * CHAR_BIT
+                          * 0.25 /* binary -> hexadecimal */
+                         )
+          + 1; /* turn floor into ceil */
+      if (tmp_length < precision)
+        tmp_length = precision;
+      /* Add 2, to account for a leading sign or alternate form.  */
+      tmp_length = xsum (tmp_length, 2);
+      break;
+
+    case 'f': case 'F':
+      if (type == TYPE_LONGDOUBLE)
+        tmp_length =
+          (unsigned int) (LDBL_MAX_EXP
+                          * 0.30103 /* binary -> decimal */
+                          * 2 /* estimate for FLAG_GROUP */
+                         )
+          + 1 /* turn floor into ceil */
+          + 10; /* sign, decimal point etc. */
+      else
+        tmp_length =
+          (unsigned int) (DBL_MAX_EXP
+                          * 0.30103 /* binary -> decimal */
+                          * 2 /* estimate for FLAG_GROUP */
+                         )
+          + 1 /* turn floor into ceil */
+          + 10; /* sign, decimal point etc. */
+      tmp_length = xsum (tmp_length, precision);
+      break;
+
+    case 'e': case 'E': case 'g': case 'G':
+      tmp_length =
+        12; /* sign, decimal point, exponent etc. */
+      tmp_length = xsum (tmp_length, precision);
+      break;
+
+    case 'a': case 'A':
+      if (type == TYPE_LONGDOUBLE)
+        tmp_length =
+          (unsigned int) (LDBL_DIG
+                          * 0.831 /* decimal -> hexadecimal */
+                         )
+          + 1; /* turn floor into ceil */
+      else
+        tmp_length =
+          (unsigned int) (DBL_DIG
+                          * 0.831 /* decimal -> hexadecimal */
+                         )
+          + 1; /* turn floor into ceil */
+      if (tmp_length < precision)
+        tmp_length = precision;
+      /* Account for sign, decimal point etc. */
+      tmp_length = xsum (tmp_length, 12);
+      break;
+
+    case 'c':
+# if HAVE_WINT_T && !WIDE_CHAR_VERSION
+      if (type == TYPE_WIDE_CHAR)
+        tmp_length = MB_CUR_MAX;
+      else
+# endif
+        tmp_length = 1;
+      break;
+
+    case 's':
+# if HAVE_WCHAR_T
+      if (type == TYPE_WIDE_STRING)
+        {
+#  if WIDE_CHAR_VERSION
+          /* ISO C says about %ls in fwprintf:
+               "If the precision is not specified or is greater than the size
+                of the array, the array shall contain a null wide character."
+             So if there is a precision, we must not use wcslen.  */
+          const wchar_t *arg = ap->arg[arg_index].a.a_wide_string;
+
+          if (has_precision)
+            tmp_length = local_wcsnlen (arg, precision);
+          else
+            tmp_length = local_wcslen (arg);
+#  else
+          /* ISO C says about %ls in fprintf:
+               "If a precision is specified, no more than that many bytes are
+                written (including shift sequences, if any), and the array
+                shall contain a null wide character if, to equal the multibyte
+                character sequence length given by the precision, the function
+                would need to access a wide character one past the end of the
+                array."
+             So if there is a precision, we must not use wcslen.  */
+          /* This case has already been handled separately in VASNPRINTF.  */
+          abort ();
+#  endif
+        }
+      else
+# endif
+        {
+# if WIDE_CHAR_VERSION
+          /* ISO C says about %s in fwprintf:
+               "If the precision is not specified or is greater than the size
+                of the converted array, the converted array shall contain a
+                null wide character."
+             So if there is a precision, we must not use strlen.  */
+          /* This case has already been handled separately in VASNPRINTF.  */
+          abort ();
+# else
+          /* ISO C says about %s in fprintf:
+               "If the precision is not specified or greater than the size of
+                the array, the array shall contain a null character."
+             So if there is a precision, we must not use strlen.  */
+          const char *arg = ap->arg[arg_index].a.a_string;
+
+          if (has_precision)
+            tmp_length = local_strnlen (arg, precision);
+          else
+            tmp_length = strlen (arg);
+# endif
+        }
+      break;
+
+    case 'p':
+      tmp_length =
+        (unsigned int) (sizeof (void *) * CHAR_BIT
+                        * 0.25 /* binary -> hexadecimal */
+                       )
+          + 1 /* turn floor into ceil */
+          + 2; /* account for leading 0x */
+      break;
+
+    default:
+      abort ();
+    }
+
+  if (!pad_ourselves)
+    {
+# if ENABLE_UNISTDIO
+      /* Padding considers the number of characters, therefore the number of
+         elements after padding may be
+           > max (tmp_length, width)
+         but is certainly
+           <= tmp_length + width.  */
+      tmp_length = xsum (tmp_length, width);
+# else
+      /* Padding considers the number of elements, says POSIX.  */
+      if (tmp_length < width)
+        tmp_length = width;
+# endif
+    }
+
+  tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+
+  return tmp_length;
+}
+
+#endif
+
+DCHAR_T *
+VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp,
+            const FCHAR_T *format, va_list args)
+{
+  DIRECTIVES d;
+  arguments a;
+
+  if (PRINTF_PARSE (format, &d, &a) < 0)
+    /* errno is already set.  */
+    return NULL;
+
+#define CLEANUP() \
+  if (d.dir != d.direct_alloc_dir)                                      \
+    free (d.dir);                                                       \
+  if (a.arg != a.direct_alloc_arg)                                      \
+    free (a.arg);
+
+  if (PRINTF_FETCHARGS (args, &a) < 0)
+    {
+      CLEANUP ();
+      errno = EINVAL;
+      return NULL;
+    }
+
+  {
+    size_t buf_neededlength;
+    TCHAR_T *buf;
+    TCHAR_T *buf_malloced;
+    const FCHAR_T *cp;
+    size_t i;
+    DIRECTIVE *dp;
+    /* Output string accumulator.  */
+    DCHAR_T *result;
+    size_t allocated;
+    size_t length;
+
+    /* Allocate a small buffer that will hold a directive passed to
+       sprintf or snprintf.  */
+    buf_neededlength =
+      xsum4 (7, d.max_width_length, d.max_precision_length, 6);
+#if HAVE_ALLOCA
+    if (buf_neededlength < 4000 / sizeof (TCHAR_T))
+      {
+        buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T));
+        buf_malloced = NULL;
+      }
+    else
+#endif
+      {
+        size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T));
+        if (size_overflow_p (buf_memsize))
+          goto out_of_memory_1;
+        buf = (TCHAR_T *) malloc (buf_memsize);
+        if (buf == NULL)
+          goto out_of_memory_1;
+        buf_malloced = buf;
+      }
+
+    if (resultbuf != NULL)
+      {
+        result = resultbuf;
+        allocated = *lengthp;
+      }
+    else
+      {
+        result = NULL;
+        allocated = 0;
+      }
+    length = 0;
+    /* Invariants:
+       result is either == resultbuf or == NULL or malloc-allocated.
+       If length > 0, then result != NULL.  */
+
+    /* Ensures that allocated >= needed.  Aborts through a jump to
+       out_of_memory if needed is SIZE_MAX or otherwise too big.  */
+#define ENSURE_ALLOCATION(needed) \
+    if ((needed) > allocated)                                                \
+      {                                                                      \
+        size_t memory_size;                                                  \
+        DCHAR_T *memory;                                                     \
+                                                                             \
+        allocated = (allocated > 0 ? xtimes (allocated, 2) : 12);            \
+        if ((needed) > allocated)                                            \
+          allocated = (needed);                                              \
+        memory_size = xtimes (allocated, sizeof (DCHAR_T));                  \
+        if (size_overflow_p (memory_size))                                   \
+          goto out_of_memory;                                                \
+        if (result == resultbuf || result == NULL)                           \
+          memory = (DCHAR_T *) malloc (memory_size);                         \
+        else                                                                 \
+          memory = (DCHAR_T *) realloc (result, memory_size);                \
+        if (memory == NULL)                                                  \
+          goto out_of_memory;                                                \
+        if (result == resultbuf && length > 0)                               \
+          DCHAR_CPY (memory, result, length);                                \
+        result = memory;                                                     \
+      }
+
+    for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++)
+      {
+        if (cp != dp->dir_start)
+          {
+            size_t n = dp->dir_start - cp;
+            size_t augmented_length = xsum (length, n);
+
+            ENSURE_ALLOCATION (augmented_length);
+            /* This copies a piece of FCHAR_T[] into a DCHAR_T[].  Here we
+               need that the format string contains only ASCII characters
+               if FCHAR_T and DCHAR_T are not the same type.  */
+            if (sizeof (FCHAR_T) == sizeof (DCHAR_T))
+              {
+                DCHAR_CPY (result + length, (const DCHAR_T *) cp, n);
+                length = augmented_length;
+              }
+            else
+              {
+                do
+                  result[length++] = *cp++;
+                while (--n > 0);
+              }
+          }
+        if (i == d.count)
+          break;
+
+        /* Execute a single directive.  */
+        if (dp->conversion == '%')
+          {
+            size_t augmented_length;
+
+            if (!(dp->arg_index == ARG_NONE))
+              abort ();
+            augmented_length = xsum (length, 1);
+            ENSURE_ALLOCATION (augmented_length);
+            result[length] = '%';
+            length = augmented_length;
+          }
+        else
+          {
+            if (!(dp->arg_index != ARG_NONE))
+              abort ();
+
+            if (dp->conversion == 'n')
+              {
+                switch (a.arg[dp->arg_index].type)
+                  {
+                  case TYPE_COUNT_SCHAR_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_schar_pointer = length;
+                    break;
+                  case TYPE_COUNT_SHORT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_short_pointer = length;
+                    break;
+                  case TYPE_COUNT_INT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_int_pointer = length;
+                    break;
+                  case TYPE_COUNT_LONGINT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_longint_pointer = length;
+                    break;
+#if HAVE_LONG_LONG_INT
+                  case TYPE_COUNT_LONGLONGINT_POINTER:
+                    *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length;
+                    break;
+#endif
+                  default:
+                    abort ();
+                  }
+              }
+#if ENABLE_UNISTDIO
+            /* The unistdio extensions.  */
+            else if (dp->conversion == 'U')
+              {
+                arg_type type = a.arg[dp->arg_index].type;
+                int flags = dp->flags;
+                int has_width;
+                size_t width;
+                int has_precision;
+                size_t precision;
+
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        width = arg;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = -width;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+
+                has_precision = 0;
+                precision = 0;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+                switch (type)
+                  {
+                  case TYPE_U8_STRING:
+                    {
+                      const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string;
+                      const uint8_t *arg_end;
+                      size_t characters;
+
+                      if (has_precision)
+                        {
+                          /* Use only PRECISION characters, from the left.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (; precision > 0; precision--)
+                            {
+                              int count = u8_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else if (has_width)
+                        {
+                          /* Use the entire string, and count the number of
+                             characters.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (;;)
+                            {
+                              int count = u8_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else
+                        {
+                          /* Use the entire string.  */
+                          arg_end = arg + u8_strlen (arg);
+                          /* The number of characters doesn't matter.  */
+                          characters = 0;
+                        }
+
+                      if (characters < width && !(dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+
+# if DCHAR_IS_UINT8_T
+                      {
+                        size_t n = arg_end - arg;
+                        ENSURE_ALLOCATION (xsum (length, n));
+                        DCHAR_CPY (result + length, arg, n);
+                        length += n;
+                      }
+# else
+                      { /* Convert.  */
+                        DCHAR_T *converted = result + length;
+                        size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+                        /* Convert from UTF-8 to locale encoding.  */
+                        converted =
+                          u8_conv_to_encoding (locale_charset (),
+                                               iconveh_question_mark,
+                                               arg, arg_end - arg, NULL,
+                                               converted, &converted_len);
+#  else
+                        /* Convert from UTF-8 to UTF-16/UTF-32.  */
+                        converted =
+                          U8_TO_DCHAR (arg, arg_end - arg,
+                                       converted, &converted_len);
+#  endif
+                        if (converted == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        if (converted != result + length)
+                          {
+                            ENSURE_ALLOCATION (xsum (length, converted_len));
+                            DCHAR_CPY (result + length, converted, converted_len);
+                            free (converted);
+                          }
+                        length += converted_len;
+                      }
+# endif
+
+                      if (characters < width && (dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+                    }
+                    break;
+
+                  case TYPE_U16_STRING:
+                    {
+                      const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string;
+                      const uint16_t *arg_end;
+                      size_t characters;
+
+                      if (has_precision)
+                        {
+                          /* Use only PRECISION characters, from the left.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (; precision > 0; precision--)
+                            {
+                              int count = u16_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else if (has_width)
+                        {
+                          /* Use the entire string, and count the number of
+                             characters.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (;;)
+                            {
+                              int count = u16_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else
+                        {
+                          /* Use the entire string.  */
+                          arg_end = arg + u16_strlen (arg);
+                          /* The number of characters doesn't matter.  */
+                          characters = 0;
+                        }
+
+                      if (characters < width && !(dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+
+# if DCHAR_IS_UINT16_T
+                      {
+                        size_t n = arg_end - arg;
+                        ENSURE_ALLOCATION (xsum (length, n));
+                        DCHAR_CPY (result + length, arg, n);
+                        length += n;
+                      }
+# else
+                      { /* Convert.  */
+                        DCHAR_T *converted = result + length;
+                        size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+                        /* Convert from UTF-16 to locale encoding.  */
+                        converted =
+                          u16_conv_to_encoding (locale_charset (),
+                                                iconveh_question_mark,
+                                                arg, arg_end - arg, NULL,
+                                                converted, &converted_len);
+#  else
+                        /* Convert from UTF-16 to UTF-8/UTF-32.  */
+                        converted =
+                          U16_TO_DCHAR (arg, arg_end - arg,
+                                        converted, &converted_len);
+#  endif
+                        if (converted == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        if (converted != result + length)
+                          {
+                            ENSURE_ALLOCATION (xsum (length, converted_len));
+                            DCHAR_CPY (result + length, converted, converted_len);
+                            free (converted);
+                          }
+                        length += converted_len;
+                      }
+# endif
+
+                      if (characters < width && (dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+                    }
+                    break;
+
+                  case TYPE_U32_STRING:
+                    {
+                      const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string;
+                      const uint32_t *arg_end;
+                      size_t characters;
+
+                      if (has_precision)
+                        {
+                          /* Use only PRECISION characters, from the left.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (; precision > 0; precision--)
+                            {
+                              int count = u32_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else if (has_width)
+                        {
+                          /* Use the entire string, and count the number of
+                             characters.  */
+                          arg_end = arg;
+                          characters = 0;
+                          for (;;)
+                            {
+                              int count = u32_strmblen (arg_end);
+                              if (count == 0)
+                                break;
+                              if (count < 0)
+                                {
+                                  if (!(result == resultbuf || result == NULL))
+                                    free (result);
+                                  if (buf_malloced != NULL)
+                                    free (buf_malloced);
+                                  CLEANUP ();
+                                  errno = EILSEQ;
+                                  return NULL;
+                                }
+                              arg_end += count;
+                              characters++;
+                            }
+                        }
+                      else
+                        {
+                          /* Use the entire string.  */
+                          arg_end = arg + u32_strlen (arg);
+                          /* The number of characters doesn't matter.  */
+                          characters = 0;
+                        }
+
+                      if (characters < width && !(dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+
+# if DCHAR_IS_UINT32_T
+                      {
+                        size_t n = arg_end - arg;
+                        ENSURE_ALLOCATION (xsum (length, n));
+                        DCHAR_CPY (result + length, arg, n);
+                        length += n;
+                      }
+# else
+                      { /* Convert.  */
+                        DCHAR_T *converted = result + length;
+                        size_t converted_len = allocated - length;
+#  if DCHAR_IS_TCHAR
+                        /* Convert from UTF-32 to locale encoding.  */
+                        converted =
+                          u32_conv_to_encoding (locale_charset (),
+                                                iconveh_question_mark,
+                                                arg, arg_end - arg, NULL,
+                                                converted, &converted_len);
+#  else
+                        /* Convert from UTF-32 to UTF-8/UTF-16.  */
+                        converted =
+                          U32_TO_DCHAR (arg, arg_end - arg,
+                                        converted, &converted_len);
+#  endif
+                        if (converted == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        if (converted != result + length)
+                          {
+                            ENSURE_ALLOCATION (xsum (length, converted_len));
+                            DCHAR_CPY (result + length, converted, converted_len);
+                            free (converted);
+                          }
+                        length += converted_len;
+                      }
+# endif
+
+                      if (characters < width && (dp->flags & FLAG_LEFT))
+                        {
+                          size_t n = width - characters;
+                          ENSURE_ALLOCATION (xsum (length, n));
+                          DCHAR_SET (result + length, ' ', n);
+                          length += n;
+                        }
+                    }
+                    break;
+
+                  default:
+                    abort ();
+                  }
+              }
+#endif
+#if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && HAVE_WCHAR_T
+            else if (dp->conversion == 's'
+# if WIDE_CHAR_VERSION
+                     && a.arg[dp->arg_index].type != TYPE_WIDE_STRING
+# else
+                     && a.arg[dp->arg_index].type == TYPE_WIDE_STRING
+# endif
+                    )
+              {
+                /* The normal handling of the 's' directive below requires
+                   allocating a temporary buffer.  The determination of its
+                   length (tmp_length), in the case when a precision is
+                   specified, below requires a conversion between a char[]
+                   string and a wchar_t[] wide string.  It could be done, but
+                   we have no guarantee that the implementation of sprintf will
+                   use the exactly same algorithm.  Without this guarantee, it
+                   is possible to have buffer overrun bugs.  In order to avoid
+                   such bugs, we implement the entire processing of the 's'
+                   directive ourselves.  */
+                int flags = dp->flags;
+                int has_width;
+                size_t width;
+                int has_precision;
+                size_t precision;
+
+                has_width = 0;
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        width = arg;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = -width;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                    has_width = 1;
+                  }
+
+                has_precision = 0;
+                precision = 6;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+# if WIDE_CHAR_VERSION
+                /* %s in vasnwprintf.  See the specification of fwprintf.  */
+                {
+                  const char *arg = a.arg[dp->arg_index].a.a_string;
+                  const char *arg_end;
+                  size_t characters;
+
+                  if (has_precision)
+                    {
+                      /* Use only as many bytes as needed to produce PRECISION
+                         wide characters, from the left.  */
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      for (; precision > 0; precision--)
+                        {
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrlen (arg_end, MB_CUR_MAX, &state);
+#  else
+                          count = mblen (arg_end, MB_CUR_MAX);
+#  endif
+                          if (count == 0)
+                            /* Found the terminating NUL.  */
+                            break;
+                          if (count < 0)
+                            {
+                              /* Invalid or incomplete multibyte character.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          arg_end += count;
+                          characters++;
+                        }
+                    }
+                  else if (has_width)
+                    {
+                      /* Use the entire string, and count the number of wide
+                         characters.  */
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      for (;;)
+                        {
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrlen (arg_end, MB_CUR_MAX, &state);
+#  else
+                          count = mblen (arg_end, MB_CUR_MAX);
+#  endif
+                          if (count == 0)
+                            /* Found the terminating NUL.  */
+                            break;
+                          if (count < 0)
+                            {
+                              /* Invalid or incomplete multibyte character.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          arg_end += count;
+                          characters++;
+                        }
+                    }
+                  else
+                    {
+                      /* Use the entire string.  */
+                      arg_end = arg + strlen (arg);
+                      /* The number of characters doesn't matter.  */
+                      characters = 0;
+                    }
+
+                  if (characters < width && !(dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - characters;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+
+                  if (has_precision || has_width)
+                    {
+                      /* We know the number of wide characters in advance.  */
+                      size_t remaining;
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      ENSURE_ALLOCATION (xsum (length, characters));
+                      for (remaining = characters; remaining > 0; remaining--)
+                        {
+                          wchar_t wc;
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrtowc (&wc, arg, arg_end - arg, &state);
+#  else
+                          count = mbtowc (&wc, arg, arg_end - arg);
+#  endif
+                          if (count <= 0)
+                            /* mbrtowc not consistent with mbrlen, or mbtowc
+                               not consistent with mblen.  */
+                            abort ();
+                          result[length++] = wc;
+                          arg += count;
+                        }
+                      if (!(arg == arg_end))
+                        abort ();
+                    }
+                  else
+                    {
+#  if HAVE_MBRTOWC
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      while (arg < arg_end)
+                        {
+                          wchar_t wc;
+                          int count;
+#  if HAVE_MBRTOWC
+                          count = mbrtowc (&wc, arg, arg_end - arg, &state);
+#  else
+                          count = mbtowc (&wc, arg, arg_end - arg);
+#  endif
+                          if (count <= 0)
+                            /* mbrtowc not consistent with mbrlen, or mbtowc
+                               not consistent with mblen.  */
+                            abort ();
+                          ENSURE_ALLOCATION (xsum (length, 1));
+                          result[length++] = wc;
+                          arg += count;
+                        }
+                    }
+
+                  if (characters < width && (dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - characters;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+                }
+# else
+                /* %ls in vasnprintf.  See the specification of fprintf.  */
+                {
+                  const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
+                  const wchar_t *arg_end;
+                  size_t characters;
+#  if !DCHAR_IS_TCHAR
+                  /* This code assumes that TCHAR_T is 'char'.  */
+                  verify (sizeof (TCHAR_T) == 1);
+                  TCHAR_T *tmpsrc;
+                  DCHAR_T *tmpdst;
+                  size_t tmpdst_len;
+#  endif
+                  size_t w;
+
+                  if (has_precision)
+                    {
+                      /* Use only as many wide characters as needed to produce
+                         at most PRECISION bytes, from the left.  */
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      while (precision > 0)
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg_end == 0)
+                            /* Found the terminating null wide character.  */
+                            break;
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg_end, &state);
+#  else
+                          count = wctomb (cbuf, *arg_end);
+#  endif
+                          if (count < 0)
+                            {
+                              /* Cannot convert.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          if (precision < (unsigned int) count)
+                            break;
+                          arg_end++;
+                          characters += count;
+                          precision -= count;
+                        }
+                    }
+#  if DCHAR_IS_TCHAR
+                  else if (has_width)
+#  else
+                  else
+#  endif
+                    {
+                      /* Use the entire string, and count the number of
+                         bytes.  */
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#  endif
+                      arg_end = arg;
+                      characters = 0;
+                      for (;;)
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg_end == 0)
+                            /* Found the terminating null wide character.  */
+                            break;
+#  if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg_end, &state);
+#  else
+                          count = wctomb (cbuf, *arg_end);
+#  endif
+                          if (count < 0)
+                            {
+                              /* Cannot convert.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          arg_end++;
+                          characters += count;
+                        }
+                    }
+#  if DCHAR_IS_TCHAR
+                  else
+                    {
+                      /* Use the entire string.  */
+                      arg_end = arg + local_wcslen (arg);
+                      /* The number of bytes doesn't matter.  */
+                      characters = 0;
+                    }
+#  endif
+
+#  if !DCHAR_IS_TCHAR
+                  /* Convert the string into a piece of temporary memory.  */
+                  tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T));
+                  if (tmpsrc == NULL)
+                    goto out_of_memory;
+                  {
+                    TCHAR_T *tmpptr = tmpsrc;
+                    size_t remaining;
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                    mbstate_t state;
+                    memset (&state, '\0', sizeof (mbstate_t));
+#   endif
+                    for (remaining = characters; remaining > 0; )
+                      {
+                        char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                        int count;
+
+                        if (*arg == 0)
+                          abort ();
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                        count = wcrtomb (cbuf, *arg, &state);
+#   else
+                        count = wctomb (cbuf, *arg);
+#   endif
+                        if (count <= 0)
+                          /* Inconsistency.  */
+                          abort ();
+                        memcpy (tmpptr, cbuf, count);
+                        tmpptr += count;
+                        arg++;
+                        remaining -= count;
+                      }
+                    if (!(arg == arg_end))
+                      abort ();
+                  }
+
+                  /* Convert from TCHAR_T[] to DCHAR_T[].  */
+                  tmpdst =
+                    DCHAR_CONV_FROM_ENCODING (locale_charset (),
+                                              iconveh_question_mark,
+                                              tmpsrc, characters,
+                                              NULL,
+                                              NULL, &tmpdst_len);
+                  if (tmpdst == NULL)
+                    {
+                      int saved_errno = errno;
+                      free (tmpsrc);
+                      if (!(result == resultbuf || result == NULL))
+                        free (result);
+                      if (buf_malloced != NULL)
+                        free (buf_malloced);
+                      CLEANUP ();
+                      errno = saved_errno;
+                      return NULL;
+                    }
+                  free (tmpsrc);
+#  endif
+
+                  if (has_width)
+                    {
+#  if ENABLE_UNISTDIO
+                      /* Outside POSIX, it's preferable to compare the width
+                         against the number of _characters_ of the converted
+                         value.  */
+                      w = DCHAR_MBSNLEN (result + length, characters);
+#  else
+                      /* The width is compared against the number of _bytes_
+                         of the converted value, says POSIX.  */
+                      w = characters;
+#  endif
+                    }
+                  else
+                    /* w doesn't matter.  */
+                    w = 0;
+
+                  if (w < width && !(dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - w;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+
+#  if DCHAR_IS_TCHAR
+                  if (has_precision || has_width)
+                    {
+                      /* We know the number of bytes in advance.  */
+                      size_t remaining;
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#   endif
+                      ENSURE_ALLOCATION (xsum (length, characters));
+                      for (remaining = characters; remaining > 0; )
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg == 0)
+                            abort ();
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg, &state);
+#   else
+                          count = wctomb (cbuf, *arg);
+#   endif
+                          if (count <= 0)
+                            /* Inconsistency.  */
+                            abort ();
+                          memcpy (result + length, cbuf, count);
+                          length += count;
+                          arg++;
+                          remaining -= count;
+                        }
+                      if (!(arg == arg_end))
+                        abort ();
+                    }
+                  else
+                    {
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                      mbstate_t state;
+                      memset (&state, '\0', sizeof (mbstate_t));
+#   endif
+                      while (arg < arg_end)
+                        {
+                          char cbuf[64]; /* Assume MB_CUR_MAX <= 64.  */
+                          int count;
+
+                          if (*arg == 0)
+                            abort ();
+#   if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t
+                          count = wcrtomb (cbuf, *arg, &state);
+#   else
+                          count = wctomb (cbuf, *arg);
+#   endif
+                          if (count <= 0)
+                            {
+                              /* Cannot convert.  */
+                              if (!(result == resultbuf || result == NULL))
+                                free (result);
+                              if (buf_malloced != NULL)
+                                free (buf_malloced);
+                              CLEANUP ();
+                              errno = EILSEQ;
+                              return NULL;
+                            }
+                          ENSURE_ALLOCATION (xsum (length, count));
+                          memcpy (result + length, cbuf, count);
+                          length += count;
+                          arg++;
+                        }
+                    }
+#  else
+                  ENSURE_ALLOCATION (xsum (length, tmpdst_len));
+                  DCHAR_CPY (result + length, tmpdst, tmpdst_len);
+                  free (tmpdst);
+                  length += tmpdst_len;
+#  endif
+
+                  if (w < width && (dp->flags & FLAG_LEFT))
+                    {
+                      size_t n = width - w;
+                      ENSURE_ALLOCATION (xsum (length, n));
+                      DCHAR_SET (result + length, ' ', n);
+                      length += n;
+                    }
+                }
+# endif
+              }
+#endif
+#if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL
+            else if ((dp->conversion == 'a' || dp->conversion == 'A')
+# if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE))
+                     && (0
+#  if NEED_PRINTF_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_DOUBLE
+#  endif
+#  if NEED_PRINTF_LONG_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+#  endif
+                        )
+# endif
+                    )
+              {
+                arg_type type = a.arg[dp->arg_index].type;
+                int flags = dp->flags;
+                size_t width;
+                int has_precision;
+                size_t precision;
+                size_t tmp_length;
+                size_t count;
+                DCHAR_T tmpbuf[700];
+                DCHAR_T *tmp;
+                DCHAR_T *pad_ptr;
+                DCHAR_T *p;
+
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        width = arg;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = -width;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                  }
+
+                has_precision = 0;
+                precision = 0;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+                /* Allocate a temporary buffer of sufficient size.  */
+                if (type == TYPE_LONGDOUBLE)
+                  tmp_length =
+                    (unsigned int) ((LDBL_DIG + 1)
+                                    * 0.831 /* decimal -> hexadecimal */
+                                   )
+                    + 1; /* turn floor into ceil */
+                else
+                  tmp_length =
+                    (unsigned int) ((DBL_DIG + 1)
+                                    * 0.831 /* decimal -> hexadecimal */
+                                   )
+                    + 1; /* turn floor into ceil */
+                if (tmp_length < precision)
+                  tmp_length = precision;
+                /* Account for sign, decimal point etc. */
+                tmp_length = xsum (tmp_length, 12);
+
+                if (tmp_length < width)
+                  tmp_length = width;
+
+                tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+
+                if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
+                  tmp = tmpbuf;
+                else
+                  {
+                    size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
+
+                    if (size_overflow_p (tmp_memsize))
+                      /* Overflow, would lead to out of memory.  */
+                      goto out_of_memory;
+                    tmp = (DCHAR_T *) malloc (tmp_memsize);
+                    if (tmp == NULL)
+                      /* Out of memory.  */
+                      goto out_of_memory;
+                  }
+
+                pad_ptr = NULL;
+                p = tmp;
+                if (type == TYPE_LONGDOUBLE)
+                  {
+# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE
+                    long double arg = a.arg[dp->arg_index].a.a_longdouble;
+
+                    if (isnanl (arg))
+                      {
+                        if (dp->conversion == 'A')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+                        DECL_LONG_DOUBLE_ROUNDING
+
+                        BEGIN_LONG_DOUBLE_ROUNDING ();
+
+                        if (signbit (arg)) /* arg < 0.0L or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0L && arg + arg == arg)
+                          {
+                            if (dp->conversion == 'A')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+                            int exponent;
+                            long double mantissa;
+
+                            if (arg > 0.0L)
+                              mantissa = printf_frexpl (arg, &exponent);
+                            else
+                              {
+                                exponent = 0;
+                                mantissa = 0.0L;
+                              }
+
+                            if (has_precision
+                                && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1)
+                              {
+                                /* Round the mantissa.  */
+                                long double tail = mantissa;
+                                size_t q;
+
+                                for (q = precision; ; q--)
+                                  {
+                                    int digit = (int) tail;
+                                    tail -= digit;
+                                    if (q == 0)
+                                      {
+                                        if (digit & 1 ? tail >= 0.5L : tail > 0.5L)
+                                          tail = 1 - tail;
+                                        else
+                                          tail = - tail;
+                                        break;
+                                      }
+                                    tail *= 16.0L;
+                                  }
+                                if (tail != 0.0L)
+                                  for (q = precision; q > 0; q--)
+                                    tail *= 0.0625L;
+                                mantissa += tail;
+                              }
+
+                            *p++ = '0';
+                            *p++ = dp->conversion - 'A' + 'X';
+                            pad_ptr = p;
+                            {
+                              int digit;
+
+                              digit = (int) mantissa;
+                              mantissa -= digit;
+                              *p++ = '0' + digit;
+                              if ((flags & FLAG_ALT)
+                                  || mantissa > 0.0L || precision > 0)
+                                {
+                                  *p++ = decimal_point_char ();
+                                  /* This loop terminates because we assume
+                                     that FLT_RADIX is a power of 2.  */
+                                  while (mantissa > 0.0L)
+                                    {
+                                      mantissa *= 16.0L;
+                                      digit = (int) mantissa;
+                                      mantissa -= digit;
+                                      *p++ = digit
+                                             + (digit < 10
+                                                ? '0'
+                                                : dp->conversion - 10);
+                                      if (precision > 0)
+                                        precision--;
+                                    }
+                                  while (precision > 0)
+                                    {
+                                      *p++ = '0';
+                                      precision--;
+                                    }
+                                }
+                              }
+                              *p++ = dp->conversion - 'A' + 'P';
+#  if WIDE_CHAR_VERSION
+                              {
+                                static const wchar_t decimal_format[] =
+                                  { '%', '+', 'd', '\0' };
+                                SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                              }
+                              while (*p != '\0')
+                                p++;
+#  else
+                              if (sizeof (DCHAR_T) == 1)
+                                {
+                                  sprintf ((char *) p, "%+d", exponent);
+                                  while (*p != '\0')
+                                    p++;
+                                }
+                              else
+                                {
+                                  char expbuf[6 + 1];
+                                  const char *ep;
+                                  sprintf (expbuf, "%+d", exponent);
+                                  for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                    p++;
+                                }
+#  endif
+                          }
+
+                        END_LONG_DOUBLE_ROUNDING ();
+                      }
+# else
+                    abort ();
+# endif
+                  }
+                else
+                  {
+# if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE
+                    double arg = a.arg[dp->arg_index].a.a_double;
+
+                    if (isnand (arg))
+                      {
+                        if (dp->conversion == 'A')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+
+                        if (signbit (arg)) /* arg < 0.0 or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0 && arg + arg == arg)
+                          {
+                            if (dp->conversion == 'A')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+                            int exponent;
+                            double mantissa;
+
+                            if (arg > 0.0)
+                              mantissa = printf_frexp (arg, &exponent);
+                            else
+                              {
+                                exponent = 0;
+                                mantissa = 0.0;
+                              }
+
+                            if (has_precision
+                                && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1)
+                              {
+                                /* Round the mantissa.  */
+                                double tail = mantissa;
+                                size_t q;
+
+                                for (q = precision; ; q--)
+                                  {
+                                    int digit = (int) tail;
+                                    tail -= digit;
+                                    if (q == 0)
+                                      {
+                                        if (digit & 1 ? tail >= 0.5 : tail > 0.5)
+                                          tail = 1 - tail;
+                                        else
+                                          tail = - tail;
+                                        break;
+                                      }
+                                    tail *= 16.0;
+                                  }
+                                if (tail != 0.0)
+                                  for (q = precision; q > 0; q--)
+                                    tail *= 0.0625;
+                                mantissa += tail;
+                              }
+
+                            *p++ = '0';
+                            *p++ = dp->conversion - 'A' + 'X';
+                            pad_ptr = p;
+                            {
+                              int digit;
+
+                              digit = (int) mantissa;
+                              mantissa -= digit;
+                              *p++ = '0' + digit;
+                              if ((flags & FLAG_ALT)
+                                  || mantissa > 0.0 || precision > 0)
+                                {
+                                  *p++ = decimal_point_char ();
+                                  /* This loop terminates because we assume
+                                     that FLT_RADIX is a power of 2.  */
+                                  while (mantissa > 0.0)
+                                    {
+                                      mantissa *= 16.0;
+                                      digit = (int) mantissa;
+                                      mantissa -= digit;
+                                      *p++ = digit
+                                             + (digit < 10
+                                                ? '0'
+                                                : dp->conversion - 10);
+                                      if (precision > 0)
+                                        precision--;
+                                    }
+                                  while (precision > 0)
+                                    {
+                                      *p++ = '0';
+                                      precision--;
+                                    }
+                                }
+                              }
+                              *p++ = dp->conversion - 'A' + 'P';
+#  if WIDE_CHAR_VERSION
+                              {
+                                static const wchar_t decimal_format[] =
+                                  { '%', '+', 'd', '\0' };
+                                SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                              }
+                              while (*p != '\0')
+                                p++;
+#  else
+                              if (sizeof (DCHAR_T) == 1)
+                                {
+                                  sprintf ((char *) p, "%+d", exponent);
+                                  while (*p != '\0')
+                                    p++;
+                                }
+                              else
+                                {
+                                  char expbuf[6 + 1];
+                                  const char *ep;
+                                  sprintf (expbuf, "%+d", exponent);
+                                  for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                    p++;
+                                }
+#  endif
+                          }
+                      }
+# else
+                    abort ();
+# endif
+                  }
+
+                /* The generated string now extends from tmp to p, with the
+                   zero padding insertion point being at pad_ptr.  */
+                count = p - tmp;
+
+                if (count < width)
+                  {
+                    size_t pad = width - count;
+                    DCHAR_T *end = p + pad;
+
+                    if (flags & FLAG_LEFT)
+                      {
+                        /* Pad with spaces on the right.  */
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+                    else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+                      {
+                        /* Pad with zeroes.  */
+                        DCHAR_T *q = end;
+
+                        while (p > pad_ptr)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = '0';
+                      }
+                    else
+                      {
+                        /* Pad with spaces on the left.  */
+                        DCHAR_T *q = end;
+
+                        while (p > tmp)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+
+                    p = end;
+                  }
+
+                count = p - tmp;
+
+                if (count >= tmp_length)
+                  /* tmp_length was incorrectly calculated - fix the
+                     code above!  */
+                  abort ();
+
+                /* Make room for the result.  */
+                if (count >= allocated - length)
+                  {
+                    size_t n = xsum (length, count);
+
+                    ENSURE_ALLOCATION (n);
+                  }
+
+                /* Append the result.  */
+                memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+                if (tmp != tmpbuf)
+                  free (tmp);
+                length += count;
+              }
+#endif
+#if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL
+            else if ((dp->conversion == 'f' || dp->conversion == 'F'
+                      || dp->conversion == 'e' || dp->conversion == 'E'
+                      || dp->conversion == 'g' || dp->conversion == 'G'
+                      || dp->conversion == 'a' || dp->conversion == 'A')
+                     && (0
+# if NEED_PRINTF_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_DOUBLE
+# elif NEED_PRINTF_INFINITE_DOUBLE
+                         || (a.arg[dp->arg_index].type == TYPE_DOUBLE
+                             /* The systems (mingw) which produce wrong output
+                                for Inf, -Inf, and NaN also do so for -0.0.
+                                Therefore we treat this case here as well.  */
+                             && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double))
+# endif
+# if NEED_PRINTF_LONG_DOUBLE
+                         || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+# elif NEED_PRINTF_INFINITE_LONG_DOUBLE
+                         || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE
+                             /* Some systems produce wrong output for Inf,
+                                -Inf, and NaN.  Some systems in this category
+                                (IRIX 5.3) also do so for -0.0.  Therefore we
+                                treat this case here as well.  */
+                             && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble))
+# endif
+                        ))
+              {
+# if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE)
+                arg_type type = a.arg[dp->arg_index].type;
+# endif
+                int flags = dp->flags;
+                size_t width;
+                size_t count;
+                int has_precision;
+                size_t precision;
+                size_t tmp_length;
+                DCHAR_T tmpbuf[700];
+                DCHAR_T *tmp;
+                DCHAR_T *pad_ptr;
+                DCHAR_T *p;
+
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        width = arg;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = -width;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+                  }
+
+                has_precision = 0;
+                precision = 0;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+
+                /* POSIX specifies the default precision to be 6 for %f, %F,
+                   %e, %E, but not for %g, %G.  Implementations appear to use
+                   the same default precision also for %g, %G.  But for %a, %A,
+                   the default precision is 0.  */
+                if (!has_precision)
+                  if (!(dp->conversion == 'a' || dp->conversion == 'A'))
+                    precision = 6;
+
+                /* Allocate a temporary buffer of sufficient size.  */
+# if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE
+                tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1);
+# elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE
+                tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0);
+# elif NEED_PRINTF_LONG_DOUBLE
+                tmp_length = LDBL_DIG + 1;
+# elif NEED_PRINTF_DOUBLE
+                tmp_length = DBL_DIG + 1;
+# else
+                tmp_length = 0;
+# endif
+                if (tmp_length < precision)
+                  tmp_length = precision;
+# if NEED_PRINTF_LONG_DOUBLE
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                if (type == TYPE_LONGDOUBLE)
+#  endif
+                  if (dp->conversion == 'f' || dp->conversion == 'F')
+                    {
+                      long double arg = a.arg[dp->arg_index].a.a_longdouble;
+                      if (!(isnanl (arg) || arg + arg == arg))
+                        {
+                          /* arg is finite and nonzero.  */
+                          int exponent = floorlog10l (arg < 0 ? -arg : arg);
+                          if (exponent >= 0 && tmp_length < exponent + precision)
+                            tmp_length = exponent + precision;
+                        }
+                    }
+# endif
+# if NEED_PRINTF_DOUBLE
+#  if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
+                if (type == TYPE_DOUBLE)
+#  endif
+                  if (dp->conversion == 'f' || dp->conversion == 'F')
+                    {
+                      double arg = a.arg[dp->arg_index].a.a_double;
+                      if (!(isnand (arg) || arg + arg == arg))
+                        {
+                          /* arg is finite and nonzero.  */
+                          int exponent = floorlog10 (arg < 0 ? -arg : arg);
+                          if (exponent >= 0 && tmp_length < exponent + precision)
+                            tmp_length = exponent + precision;
+                        }
+                    }
+# endif
+                /* Account for sign, decimal point etc. */
+                tmp_length = xsum (tmp_length, 12);
+
+                if (tmp_length < width)
+                  tmp_length = width;
+
+                tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */
+
+                if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T))
+                  tmp = tmpbuf;
+                else
+                  {
+                    size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T));
+
+                    if (size_overflow_p (tmp_memsize))
+                      /* Overflow, would lead to out of memory.  */
+                      goto out_of_memory;
+                    tmp = (DCHAR_T *) malloc (tmp_memsize);
+                    if (tmp == NULL)
+                      /* Out of memory.  */
+                      goto out_of_memory;
+                  }
+
+                pad_ptr = NULL;
+                p = tmp;
+
+# if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                if (type == TYPE_LONGDOUBLE)
+#  endif
+                  {
+                    long double arg = a.arg[dp->arg_index].a.a_longdouble;
+
+                    if (isnanl (arg))
+                      {
+                        if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+                        DECL_LONG_DOUBLE_ROUNDING
+
+                        BEGIN_LONG_DOUBLE_ROUNDING ();
+
+                        if (signbit (arg)) /* arg < 0.0L or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0L && arg + arg == arg)
+                          {
+                            if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+#  if NEED_PRINTF_LONG_DOUBLE
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                char *digits;
+                                size_t ndigits;
+
+                                digits =
+                                  scale10_round_decimal_long_double (arg, precision);
+                                if (digits == NULL)
+                                  {
+                                    END_LONG_DOUBLE_ROUNDING ();
+                                    goto out_of_memory;
+                                  }
+                                ndigits = strlen (digits);
+
+                                if (ndigits > precision)
+                                  do
+                                    {
+                                      --ndigits;
+                                      *p++ = digits[ndigits];
+                                    }
+                                  while (ndigits > precision);
+                                else
+                                  *p++ = '0';
+                                /* Here ndigits <= precision.  */
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > ndigits; precision--)
+                                      *p++ = '0';
+                                    while (ndigits > 0)
+                                      {
+                                        --ndigits;
+                                        *p++ = digits[ndigits];
+                                      }
+                                  }
+
+                                free (digits);
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                int exponent;
+
+                                if (arg == 0.0L)
+                                  {
+                                    exponent = 0;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        for (; precision > 0; precision--)
+                                          *p++ = '0';
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0L.  */
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+
+                                    exponent = floorlog10l (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)precision - exponent);
+                                        if (digits == NULL)
+                                          {
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision + 1)
+                                          break;
+                                        if (ndigits < precision
+                                            || ndigits > precision + 2)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits == precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision+1.  */
+                                    if (is_borderline (digits, precision))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)precision - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision + 1)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision+1.  */
+
+                                    *p++ = digits[--ndigits];
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > 0)
+                                          {
+                                            --ndigits;
+                                            *p++ = digits[ndigits];
+                                          }
+                                      }
+
+                                    free (digits);
+                                  }
+
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                {
+                                  static const wchar_t decimal_format[] =
+                                    { '%', '+', '.', '2', 'd', '\0' };
+                                  SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                }
+                                while (*p != '\0')
+                                  p++;
+#   else
+                                if (sizeof (DCHAR_T) == 1)
+                                  {
+                                    sprintf ((char *) p, "%+.2d", exponent);
+                                    while (*p != '\0')
+                                      p++;
+                                  }
+                                else
+                                  {
+                                    char expbuf[6 + 1];
+                                    const char *ep;
+                                    sprintf (expbuf, "%+.2d", exponent);
+                                    for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                      p++;
+                                  }
+#   endif
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                if (precision == 0)
+                                  precision = 1;
+                                /* precision >= 1.  */
+
+                                if (arg == 0.0L)
+                                  /* The exponent is 0, >= -4, < precision.
+                                     Use fixed-point notation.  */
+                                  {
+                                    size_t ndigits = precision;
+                                    /* Number of trailing zeroes that have to be
+                                       dropped.  */
+                                    size_t nzeroes =
+                                      (flags & FLAG_ALT ? 0 : precision - 1);
+
+                                    --ndigits;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > nzeroes)
+                                          {
+                                            --ndigits;
+                                            *p++ = '0';
+                                          }
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0L.  */
+                                    int exponent;
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+                                    size_t nzeroes;
+
+                                    exponent = floorlog10l (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)(precision - 1) - exponent);
+                                        if (digits == NULL)
+                                          {
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision)
+                                          break;
+                                        if (ndigits < precision - 1
+                                            || ndigits > precision + 1)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits < precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision.  */
+                                    if (is_borderline (digits, precision - 1))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_long_double (arg,
+                                                                             (int)(precision - 1) - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            END_LONG_DOUBLE_ROUNDING ();
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision.  */
+
+                                    /* Determine the number of trailing zeroes
+                                       that have to be dropped.  */
+                                    nzeroes = 0;
+                                    if ((flags & FLAG_ALT) == 0)
+                                      while (nzeroes < ndigits
+                                             && digits[nzeroes] == '0')
+                                        nzeroes++;
+
+                                    /* The exponent is now determined.  */
+                                    if (exponent >= -4
+                                        && exponent < (long)precision)
+                                      {
+                                        /* Fixed-point notation:
+                                           max(exponent,0)+1 digits, then the
+                                           decimal point, then the remaining
+                                           digits without trailing zeroes.  */
+                                        if (exponent >= 0)
+                                          {
+                                            size_t ecount = exponent + 1;
+                                            /* Note: count <= precision = ndigits.  */
+                                            for (; ecount > 0; ecount--)
+                                              *p++ = digits[--ndigits];
+                                            if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                              {
+                                                *p++ = decimal_point_char ();
+                                                while (ndigits > nzeroes)
+                                                  {
+                                                    --ndigits;
+                                                    *p++ = digits[ndigits];
+                                                  }
+                                              }
+                                          }
+                                        else
+                                          {
+                                            size_t ecount = -exponent - 1;
+                                            *p++ = '0';
+                                            *p++ = decimal_point_char ();
+                                            for (; ecount > 0; ecount--)
+                                              *p++ = '0';
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                      }
+                                    else
+                                      {
+                                        /* Exponential notation.  */
+                                        *p++ = digits[--ndigits];
+                                        if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                          {
+                                            *p++ = decimal_point_char ();
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                        *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                        {
+                                          static const wchar_t decimal_format[] =
+                                            { '%', '+', '.', '2', 'd', '\0' };
+                                          SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                        }
+                                        while (*p != '\0')
+                                          p++;
+#   else
+                                        if (sizeof (DCHAR_T) == 1)
+                                          {
+                                            sprintf ((char *) p, "%+.2d", exponent);
+                                            while (*p != '\0')
+                                              p++;
+                                          }
+                                        else
+                                          {
+                                            char expbuf[6 + 1];
+                                            const char *ep;
+                                            sprintf (expbuf, "%+.2d", exponent);
+                                            for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                              p++;
+                                          }
+#   endif
+                                      }
+
+                                    free (digits);
+                                  }
+                              }
+                            else
+                              abort ();
+#  else
+                            /* arg is finite.  */
+                            if (!(arg == 0.0L))
+                              abort ();
+
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+                                *p++ = '+';
+                                *p++ = '0';
+                                *p++ = '0';
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                *p++ = '0';
+                                if (flags & FLAG_ALT)
+                                  {
+                                    size_t ndigits =
+                                      (precision > 0 ? precision - 1 : 0);
+                                    *p++ = decimal_point_char ();
+                                    for (; ndigits > 0; --ndigits)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else if (dp->conversion == 'a' || dp->conversion == 'A')
+                              {
+                                *p++ = '0';
+                                *p++ = dp->conversion - 'A' + 'X';
+                                pad_ptr = p;
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                                *p++ = dp->conversion - 'A' + 'P';
+                                *p++ = '+';
+                                *p++ = '0';
+                              }
+                            else
+                              abort ();
+#  endif
+                          }
+
+                        END_LONG_DOUBLE_ROUNDING ();
+                      }
+                  }
+#  if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                else
+#  endif
+# endif
+# if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE
+                  {
+                    double arg = a.arg[dp->arg_index].a.a_double;
+
+                    if (isnand (arg))
+                      {
+                        if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                          {
+                            *p++ = 'N'; *p++ = 'A'; *p++ = 'N';
+                          }
+                        else
+                          {
+                            *p++ = 'n'; *p++ = 'a'; *p++ = 'n';
+                          }
+                      }
+                    else
+                      {
+                        int sign = 0;
+
+                        if (signbit (arg)) /* arg < 0.0 or negative zero */
+                          {
+                            sign = -1;
+                            arg = -arg;
+                          }
+
+                        if (sign < 0)
+                          *p++ = '-';
+                        else if (flags & FLAG_SHOWSIGN)
+                          *p++ = '+';
+                        else if (flags & FLAG_SPACE)
+                          *p++ = ' ';
+
+                        if (arg > 0.0 && arg + arg == arg)
+                          {
+                            if (dp->conversion >= 'A' && dp->conversion <= 'Z')
+                              {
+                                *p++ = 'I'; *p++ = 'N'; *p++ = 'F';
+                              }
+                            else
+                              {
+                                *p++ = 'i'; *p++ = 'n'; *p++ = 'f';
+                              }
+                          }
+                        else
+                          {
+#  if NEED_PRINTF_DOUBLE
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                char *digits;
+                                size_t ndigits;
+
+                                digits =
+                                  scale10_round_decimal_double (arg, precision);
+                                if (digits == NULL)
+                                  goto out_of_memory;
+                                ndigits = strlen (digits);
+
+                                if (ndigits > precision)
+                                  do
+                                    {
+                                      --ndigits;
+                                      *p++ = digits[ndigits];
+                                    }
+                                  while (ndigits > precision);
+                                else
+                                  *p++ = '0';
+                                /* Here ndigits <= precision.  */
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > ndigits; precision--)
+                                      *p++ = '0';
+                                    while (ndigits > 0)
+                                      {
+                                        --ndigits;
+                                        *p++ = digits[ndigits];
+                                      }
+                                  }
+
+                                free (digits);
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                int exponent;
+
+                                if (arg == 0.0)
+                                  {
+                                    exponent = 0;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        for (; precision > 0; precision--)
+                                          *p++ = '0';
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0.  */
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+
+                                    exponent = floorlog10 (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)precision - exponent);
+                                        if (digits == NULL)
+                                          goto out_of_memory;
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision + 1)
+                                          break;
+                                        if (ndigits < precision
+                                            || ndigits > precision + 2)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits == precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision+1.  */
+                                    if (is_borderline (digits, precision))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)precision - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision + 1)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision+1.  */
+
+                                    *p++ = digits[--ndigits];
+                                    if ((flags & FLAG_ALT) || precision > 0)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > 0)
+                                          {
+                                            --ndigits;
+                                            *p++ = digits[ndigits];
+                                          }
+                                      }
+
+                                    free (digits);
+                                  }
+
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                {
+                                  static const wchar_t decimal_format[] =
+                                    /* Produce the same number of exponent digits
+                                       as the native printf implementation.  */
+#    if defined _WIN32 && ! defined __CYGWIN__
+                                    { '%', '+', '.', '3', 'd', '\0' };
+#    else
+                                    { '%', '+', '.', '2', 'd', '\0' };
+#    endif
+                                  SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                }
+                                while (*p != '\0')
+                                  p++;
+#   else
+                                {
+                                  static const char decimal_format[] =
+                                    /* Produce the same number of exponent digits
+                                       as the native printf implementation.  */
+#    if defined _WIN32 && ! defined __CYGWIN__
+                                    "%+.3d";
+#    else
+                                    "%+.2d";
+#    endif
+                                  if (sizeof (DCHAR_T) == 1)
+                                    {
+                                      sprintf ((char *) p, decimal_format, exponent);
+                                      while (*p != '\0')
+                                        p++;
+                                    }
+                                  else
+                                    {
+                                      char expbuf[6 + 1];
+                                      const char *ep;
+                                      sprintf (expbuf, decimal_format, exponent);
+                                      for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                        p++;
+                                    }
+                                }
+#   endif
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                if (precision == 0)
+                                  precision = 1;
+                                /* precision >= 1.  */
+
+                                if (arg == 0.0)
+                                  /* The exponent is 0, >= -4, < precision.
+                                     Use fixed-point notation.  */
+                                  {
+                                    size_t ndigits = precision;
+                                    /* Number of trailing zeroes that have to be
+                                       dropped.  */
+                                    size_t nzeroes =
+                                      (flags & FLAG_ALT ? 0 : precision - 1);
+
+                                    --ndigits;
+                                    *p++ = '0';
+                                    if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                      {
+                                        *p++ = decimal_point_char ();
+                                        while (ndigits > nzeroes)
+                                          {
+                                            --ndigits;
+                                            *p++ = '0';
+                                          }
+                                      }
+                                  }
+                                else
+                                  {
+                                    /* arg > 0.0.  */
+                                    int exponent;
+                                    int adjusted;
+                                    char *digits;
+                                    size_t ndigits;
+                                    size_t nzeroes;
+
+                                    exponent = floorlog10 (arg);
+                                    adjusted = 0;
+                                    for (;;)
+                                      {
+                                        digits =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)(precision - 1) - exponent);
+                                        if (digits == NULL)
+                                          goto out_of_memory;
+                                        ndigits = strlen (digits);
+
+                                        if (ndigits == precision)
+                                          break;
+                                        if (ndigits < precision - 1
+                                            || ndigits > precision + 1)
+                                          /* The exponent was not guessed
+                                             precisely enough.  */
+                                          abort ();
+                                        if (adjusted)
+                                          /* None of two values of exponent is
+                                             the right one.  Prevent an endless
+                                             loop.  */
+                                          abort ();
+                                        free (digits);
+                                        if (ndigits < precision)
+                                          exponent -= 1;
+                                        else
+                                          exponent += 1;
+                                        adjusted = 1;
+                                      }
+                                    /* Here ndigits = precision.  */
+                                    if (is_borderline (digits, precision - 1))
+                                      {
+                                        /* Maybe the exponent guess was too high
+                                           and a smaller exponent can be reached
+                                           by turning a 10...0 into 9...9x.  */
+                                        char *digits2 =
+                                          scale10_round_decimal_double (arg,
+                                                                        (int)(precision - 1) - exponent + 1);
+                                        if (digits2 == NULL)
+                                          {
+                                            free (digits);
+                                            goto out_of_memory;
+                                          }
+                                        if (strlen (digits2) == precision)
+                                          {
+                                            free (digits);
+                                            digits = digits2;
+                                            exponent -= 1;
+                                          }
+                                        else
+                                          free (digits2);
+                                      }
+                                    /* Here ndigits = precision.  */
+
+                                    /* Determine the number of trailing zeroes
+                                       that have to be dropped.  */
+                                    nzeroes = 0;
+                                    if ((flags & FLAG_ALT) == 0)
+                                      while (nzeroes < ndigits
+                                             && digits[nzeroes] == '0')
+                                        nzeroes++;
+
+                                    /* The exponent is now determined.  */
+                                    if (exponent >= -4
+                                        && exponent < (long)precision)
+                                      {
+                                        /* Fixed-point notation:
+                                           max(exponent,0)+1 digits, then the
+                                           decimal point, then the remaining
+                                           digits without trailing zeroes.  */
+                                        if (exponent >= 0)
+                                          {
+                                            size_t ecount = exponent + 1;
+                                            /* Note: ecount <= precision = ndigits.  */
+                                            for (; ecount > 0; ecount--)
+                                              *p++ = digits[--ndigits];
+                                            if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                              {
+                                                *p++ = decimal_point_char ();
+                                                while (ndigits > nzeroes)
+                                                  {
+                                                    --ndigits;
+                                                    *p++ = digits[ndigits];
+                                                  }
+                                              }
+                                          }
+                                        else
+                                          {
+                                            size_t ecount = -exponent - 1;
+                                            *p++ = '0';
+                                            *p++ = decimal_point_char ();
+                                            for (; ecount > 0; ecount--)
+                                              *p++ = '0';
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                      }
+                                    else
+                                      {
+                                        /* Exponential notation.  */
+                                        *p++ = digits[--ndigits];
+                                        if ((flags & FLAG_ALT) || ndigits > nzeroes)
+                                          {
+                                            *p++ = decimal_point_char ();
+                                            while (ndigits > nzeroes)
+                                              {
+                                                --ndigits;
+                                                *p++ = digits[ndigits];
+                                              }
+                                          }
+                                        *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */
+#   if WIDE_CHAR_VERSION
+                                        {
+                                          static const wchar_t decimal_format[] =
+                                            /* Produce the same number of exponent digits
+                                               as the native printf implementation.  */
+#    if defined _WIN32 && ! defined __CYGWIN__
+                                            { '%', '+', '.', '3', 'd', '\0' };
+#    else
+                                            { '%', '+', '.', '2', 'd', '\0' };
+#    endif
+                                          SNPRINTF (p, 6 + 1, decimal_format, exponent);
+                                        }
+                                        while (*p != '\0')
+                                          p++;
+#   else
+                                        {
+                                          static const char decimal_format[] =
+                                            /* Produce the same number of exponent digits
+                                               as the native printf implementation.  */
+#    if defined _WIN32 && ! defined __CYGWIN__
+                                            "%+.3d";
+#    else
+                                            "%+.2d";
+#    endif
+                                          if (sizeof (DCHAR_T) == 1)
+                                            {
+                                              sprintf ((char *) p, decimal_format, exponent);
+                                              while (*p != '\0')
+                                                p++;
+                                            }
+                                          else
+                                            {
+                                              char expbuf[6 + 1];
+                                              const char *ep;
+                                              sprintf (expbuf, decimal_format, exponent);
+                                              for (ep = expbuf; (*p = *ep) != '\0'; ep++)
+                                                p++;
+                                            }
+                                        }
+#   endif
+                                      }
+
+                                    free (digits);
+                                  }
+                              }
+                            else
+                              abort ();
+#  else
+                            /* arg is finite.  */
+                            if (!(arg == 0.0))
+                              abort ();
+
+                            pad_ptr = p;
+
+                            if (dp->conversion == 'f' || dp->conversion == 'F')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else if (dp->conversion == 'e' || dp->conversion == 'E')
+                              {
+                                *p++ = '0';
+                                if ((flags & FLAG_ALT) || precision > 0)
+                                  {
+                                    *p++ = decimal_point_char ();
+                                    for (; precision > 0; precision--)
+                                      *p++ = '0';
+                                  }
+                                *p++ = dp->conversion; /* 'e' or 'E' */
+                                *p++ = '+';
+                                /* Produce the same number of exponent digits as
+                                   the native printf implementation.  */
+#   if defined _WIN32 && ! defined __CYGWIN__
+                                *p++ = '0';
+#   endif
+                                *p++ = '0';
+                                *p++ = '0';
+                              }
+                            else if (dp->conversion == 'g' || dp->conversion == 'G')
+                              {
+                                *p++ = '0';
+                                if (flags & FLAG_ALT)
+                                  {
+                                    size_t ndigits =
+                                      (precision > 0 ? precision - 1 : 0);
+                                    *p++ = decimal_point_char ();
+                                    for (; ndigits > 0; --ndigits)
+                                      *p++ = '0';
+                                  }
+                              }
+                            else
+                              abort ();
+#  endif
+                          }
+                      }
+                  }
+# endif
+
+                /* The generated string now extends from tmp to p, with the
+                   zero padding insertion point being at pad_ptr.  */
+                count = p - tmp;
+
+                if (count < width)
+                  {
+                    size_t pad = width - count;
+                    DCHAR_T *end = p + pad;
+
+                    if (flags & FLAG_LEFT)
+                      {
+                        /* Pad with spaces on the right.  */
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+                    else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+                      {
+                        /* Pad with zeroes.  */
+                        DCHAR_T *q = end;
+
+                        while (p > pad_ptr)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = '0';
+                      }
+                    else
+                      {
+                        /* Pad with spaces on the left.  */
+                        DCHAR_T *q = end;
+
+                        while (p > tmp)
+                          *--q = *--p;
+                        for (; pad > 0; pad--)
+                          *p++ = ' ';
+                      }
+
+                    p = end;
+                  }
+
+                count = p - tmp;
+
+                if (count >= tmp_length)
+                  /* tmp_length was incorrectly calculated - fix the
+                     code above!  */
+                  abort ();
+
+                /* Make room for the result.  */
+                if (count >= allocated - length)
+                  {
+                    size_t n = xsum (length, count);
+
+                    ENSURE_ALLOCATION (n);
+                  }
+
+                /* Append the result.  */
+                memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+                if (tmp != tmpbuf)
+                  free (tmp);
+                length += count;
+              }
+#endif
+            else
+              {
+                arg_type type = a.arg[dp->arg_index].type;
+                int flags = dp->flags;
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                int has_width;
+#endif
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                size_t width;
+#endif
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
+                int has_precision;
+                size_t precision;
+#endif
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+                int prec_ourselves;
+#else
+#               define prec_ourselves 0
+#endif
+#if NEED_PRINTF_FLAG_LEFTADJUST
+#               define pad_ourselves 1
+#elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                int pad_ourselves;
+#else
+#               define pad_ourselves 0
+#endif
+                TCHAR_T *fbp;
+                unsigned int prefix_count;
+                int prefixes[2] IF_LINT (= { 0 });
+                int orig_errno;
+#if !USE_SNPRINTF
+                size_t tmp_length;
+                TCHAR_T tmpbuf[700];
+                TCHAR_T *tmp;
+#endif
+
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                has_width = 0;
+#endif
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                width = 0;
+                if (dp->width_start != dp->width_end)
+                  {
+                    if (dp->width_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->width_arg_index].a.a_int;
+                        width = arg;
+                        if (arg < 0)
+                          {
+                            /* "A negative field width is taken as a '-' flag
+                                followed by a positive field width."  */
+                            flags |= FLAG_LEFT;
+                            width = -width;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->width_start;
+
+                        do
+                          width = xsum (xtimes (width, 10), *digitp++ - '0');
+                        while (digitp != dp->width_end);
+                      }
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                    has_width = 1;
+#endif
+                  }
+#endif
+
+#if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION
+                has_precision = 0;
+                precision = 6;
+                if (dp->precision_start != dp->precision_end)
+                  {
+                    if (dp->precision_arg_index != ARG_NONE)
+                      {
+                        int arg;
+
+                        if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                          abort ();
+                        arg = a.arg[dp->precision_arg_index].a.a_int;
+                        /* "A negative precision is taken as if the precision
+                            were omitted."  */
+                        if (arg >= 0)
+                          {
+                            precision = arg;
+                            has_precision = 1;
+                          }
+                      }
+                    else
+                      {
+                        const FCHAR_T *digitp = dp->precision_start + 1;
+
+                        precision = 0;
+                        while (digitp != dp->precision_end)
+                          precision = xsum (xtimes (precision, 10), *digitp++ - '0');
+                        has_precision = 1;
+                      }
+                  }
+#endif
+
+                /* Decide whether to handle the precision ourselves.  */
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+                switch (dp->conversion)
+                  {
+                  case 'd': case 'i': case 'u':
+                  case 'o':
+                  case 'x': case 'X': case 'p':
+                    prec_ourselves = has_precision && (precision > 0);
+                    break;
+                  default:
+                    prec_ourselves = 0;
+                    break;
+                  }
+#endif
+
+                /* Decide whether to perform the padding ourselves.  */
+#if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION)
+                switch (dp->conversion)
+                  {
+# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
+                  /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need
+                     to perform the padding after this conversion.  Functions
+                     with unistdio extensions perform the padding based on
+                     character count rather than element count.  */
+                  case 'c': case 's':
+# endif
+# if NEED_PRINTF_FLAG_ZERO
+                  case 'f': case 'F': case 'e': case 'E': case 'g': case 'G':
+                  case 'a': case 'A':
+# endif
+                    pad_ourselves = 1;
+                    break;
+                  default:
+                    pad_ourselves = prec_ourselves;
+                    break;
+                  }
+#endif
+
+#if !USE_SNPRINTF
+                /* Allocate a temporary buffer of sufficient size for calling
+                   sprintf.  */
+                tmp_length =
+                  MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type,
+                                   flags, width, has_precision, precision,
+                                   pad_ourselves);
+
+                if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T))
+                  tmp = tmpbuf;
+                else
+                  {
+                    size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T));
+
+                    if (size_overflow_p (tmp_memsize))
+                      /* Overflow, would lead to out of memory.  */
+                      goto out_of_memory;
+                    tmp = (TCHAR_T *) malloc (tmp_memsize);
+                    if (tmp == NULL)
+                      /* Out of memory.  */
+                      goto out_of_memory;
+                  }
+#endif
+
+                /* Construct the format string for calling snprintf or
+                   sprintf.  */
+                fbp = buf;
+                *fbp++ = '%';
+#if NEED_PRINTF_FLAG_GROUPING
+                /* The underlying implementation doesn't support the ' flag.
+                   Produce no grouping characters in this case; this is
+                   acceptable because the grouping is locale dependent.  */
+#else
+                if (flags & FLAG_GROUP)
+                  *fbp++ = '\'';
+#endif
+                if (flags & FLAG_LEFT)
+                  *fbp++ = '-';
+                if (flags & FLAG_SHOWSIGN)
+                  *fbp++ = '+';
+                if (flags & FLAG_SPACE)
+                  *fbp++ = ' ';
+                if (flags & FLAG_ALT)
+                  *fbp++ = '#';
+#if __GLIBC__ >= 2 && !defined __UCLIBC__
+                if (flags & FLAG_LOCALIZED)
+                  *fbp++ = 'I';
+#endif
+                if (!pad_ourselves)
+                  {
+                    if (flags & FLAG_ZERO)
+                      *fbp++ = '0';
+                    if (dp->width_start != dp->width_end)
+                      {
+                        size_t n = dp->width_end - dp->width_start;
+                        /* The width specification is known to consist only
+                           of standard ASCII characters.  */
+                        if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
+                          {
+                            memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T));
+                            fbp += n;
+                          }
+                        else
+                          {
+                            const FCHAR_T *mp = dp->width_start;
+                            do
+                              *fbp++ = *mp++;
+                            while (--n > 0);
+                          }
+                      }
+                  }
+                if (!prec_ourselves)
+                  {
+                    if (dp->precision_start != dp->precision_end)
+                      {
+                        size_t n = dp->precision_end - dp->precision_start;
+                        /* The precision specification is known to consist only
+                           of standard ASCII characters.  */
+                        if (sizeof (FCHAR_T) == sizeof (TCHAR_T))
+                          {
+                            memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T));
+                            fbp += n;
+                          }
+                        else
+                          {
+                            const FCHAR_T *mp = dp->precision_start;
+                            do
+                              *fbp++ = *mp++;
+                            while (--n > 0);
+                          }
+                      }
+                  }
+
+                switch (type)
+                  {
+#if HAVE_LONG_LONG_INT
+                  case TYPE_LONGLONGINT:
+                  case TYPE_ULONGLONGINT:
+# if defined _WIN32 && ! defined __CYGWIN__
+                    *fbp++ = 'I';
+                    *fbp++ = '6';
+                    *fbp++ = '4';
+                    break;
+# else
+                    *fbp++ = 'l';
+# endif
+#endif
+                    FALLTHROUGH;
+                  case TYPE_LONGINT:
+                  case TYPE_ULONGINT:
+#if HAVE_WINT_T
+                  case TYPE_WIDE_CHAR:
+#endif
+#if HAVE_WCHAR_T
+                  case TYPE_WIDE_STRING:
+#endif
+                    *fbp++ = 'l';
+                    break;
+                  case TYPE_LONGDOUBLE:
+                    *fbp++ = 'L';
+                    break;
+                  default:
+                    break;
+                  }
+#if NEED_PRINTF_DIRECTIVE_F
+                if (dp->conversion == 'F')
+                  *fbp = 'f';
+                else
+#endif
+                  *fbp = dp->conversion;
+#if USE_SNPRINTF
+# if ! (((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3))        \
+         && !defined __UCLIBC__)                                            \
+        || (defined __APPLE__ && defined __MACH__)                          \
+        || (defined _WIN32 && ! defined __CYGWIN__))
+                fbp[1] = '%';
+                fbp[2] = 'n';
+                fbp[3] = '\0';
+# else
+                /* On glibc2 systems from glibc >= 2.3 - probably also older
+                   ones - we know that snprintf's return value conforms to
+                   ISO C 99: the tests gl_SNPRINTF_RETVAL_C99 and
+                   gl_SNPRINTF_TRUNCATION_C99 pass.
+                   Therefore we can avoid using %n in this situation.
+                   On glibc2 systems from 2004-10-18 or newer, the use of %n
+                   in format strings in writable memory may crash the program
+                   (if compiled with _FORTIFY_SOURCE=2), so we should avoid it
+                   in this situation.  */
+                /* On Mac OS X 10.3 or newer, we know that snprintf's return
+                   value conforms to ISO C 99: the tests gl_SNPRINTF_RETVAL_C99
+                   and gl_SNPRINTF_TRUNCATION_C99 pass.
+                   Therefore we can avoid using %n in this situation.
+                   On Mac OS X 10.13 or newer, the use of %n in format strings
+                   in writable memory by default crashes the program, so we
+                   should avoid it in this situation.  */
+                /* On native Windows systems (such as mingw), we can avoid using
+                   %n because:
+                     - Although the gl_SNPRINTF_TRUNCATION_C99 test fails,
+                       snprintf does not write more than the specified number
+                       of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes
+                       '4', '5', '6' into buf, not '4', '5', '\0'.)
+                     - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf
+                       allows us to recognize the case of an insufficient
+                       buffer size: it returns -1 in this case.
+                   On native Windows systems (such as mingw) where the OS is
+                   Windows Vista, the use of %n in format strings by default
+                   crashes the program. See
+                     <https://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and
+                     <https://msdn.microsoft.com/en-us/library/ms175782.aspx>
+                   So we should avoid %n in this situation.  */
+                fbp[1] = '\0';
+# endif
+#else
+                fbp[1] = '\0';
+#endif
+
+                /* Construct the arguments for calling snprintf or sprintf.  */
+                prefix_count = 0;
+                if (!pad_ourselves && dp->width_arg_index != ARG_NONE)
+                  {
+                    if (!(a.arg[dp->width_arg_index].type == TYPE_INT))
+                      abort ();
+                    prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int;
+                  }
+                if (!prec_ourselves && dp->precision_arg_index != ARG_NONE)
+                  {
+                    if (!(a.arg[dp->precision_arg_index].type == TYPE_INT))
+                      abort ();
+                    prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int;
+                  }
+
+#if USE_SNPRINTF
+                /* The SNPRINTF result is appended after result[0..length].
+                   The latter is an array of DCHAR_T; SNPRINTF appends an
+                   array of TCHAR_T to it.  This is possible because
+                   sizeof (TCHAR_T) divides sizeof (DCHAR_T) and
+                   alignof (TCHAR_T) <= alignof (DCHAR_T).  */
+# define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T))
+                /* Ensure that maxlen below will be >= 2.  Needed on BeOS,
+                   where an snprintf() with maxlen==1 acts like sprintf().  */
+                ENSURE_ALLOCATION (xsum (length,
+                                         (2 + TCHARS_PER_DCHAR - 1)
+                                         / TCHARS_PER_DCHAR));
+                /* Prepare checking whether snprintf returns the count
+                   via %n.  */
+                *(TCHAR_T *) (result + length) = '\0';
+#endif
+
+                orig_errno = errno;
+
+                for (;;)
+                  {
+                    int count = -1;
+
+#if USE_SNPRINTF
+                    int retcount = 0;
+                    size_t maxlen = allocated - length;
+                    /* SNPRINTF can fail if its second argument is
+                       > INT_MAX.  */
+                    if (maxlen > INT_MAX / TCHARS_PER_DCHAR)
+                      maxlen = INT_MAX / TCHARS_PER_DCHAR;
+                    maxlen = maxlen * TCHARS_PER_DCHAR;
+# define SNPRINTF_BUF(arg) \
+                    switch (prefix_count)                                   \
+                      {                                                     \
+                      case 0:                                               \
+                        retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+                                             maxlen, buf,                   \
+                                             arg, &count);                  \
+                        break;                                              \
+                      case 1:                                               \
+                        retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+                                             maxlen, buf,                   \
+                                             prefixes[0], arg, &count);     \
+                        break;                                              \
+                      case 2:                                               \
+                        retcount = SNPRINTF ((TCHAR_T *) (result + length), \
+                                             maxlen, buf,                   \
+                                             prefixes[0], prefixes[1], arg, \
+                                             &count);                       \
+                        break;                                              \
+                      default:                                              \
+                        abort ();                                           \
+                      }
+#else
+# define SNPRINTF_BUF(arg) \
+                    switch (prefix_count)                                   \
+                      {                                                     \
+                      case 0:                                               \
+                        count = sprintf (tmp, buf, arg);                    \
+                        break;                                              \
+                      case 1:                                               \
+                        count = sprintf (tmp, buf, prefixes[0], arg);       \
+                        break;                                              \
+                      case 2:                                               \
+                        count = sprintf (tmp, buf, prefixes[0], prefixes[1],\
+                                         arg);                              \
+                        break;                                              \
+                      default:                                              \
+                        abort ();                                           \
+                      }
+#endif
+
+                    errno = 0;
+                    switch (type)
+                      {
+                      case TYPE_SCHAR:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_schar;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_UCHAR:
+                        {
+                          unsigned int arg = a.arg[dp->arg_index].a.a_uchar;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_SHORT:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_short;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_USHORT:
+                        {
+                          unsigned int arg = a.arg[dp->arg_index].a.a_ushort;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_INT:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_int;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_UINT:
+                        {
+                          unsigned int arg = a.arg[dp->arg_index].a.a_uint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_LONGINT:
+                        {
+                          long int arg = a.arg[dp->arg_index].a.a_longint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_ULONGINT:
+                        {
+                          unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#if HAVE_LONG_LONG_INT
+                      case TYPE_LONGLONGINT:
+                        {
+                          long long int arg = a.arg[dp->arg_index].a.a_longlongint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_ULONGLONGINT:
+                        {
+                          unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#endif
+                      case TYPE_DOUBLE:
+                        {
+                          double arg = a.arg[dp->arg_index].a.a_double;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_LONGDOUBLE:
+                        {
+                          long double arg = a.arg[dp->arg_index].a.a_longdouble;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      case TYPE_CHAR:
+                        {
+                          int arg = a.arg[dp->arg_index].a.a_char;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#if HAVE_WINT_T
+                      case TYPE_WIDE_CHAR:
+                        {
+                          wint_t arg = a.arg[dp->arg_index].a.a_wide_char;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#endif
+                      case TYPE_STRING:
+                        {
+                          const char *arg = a.arg[dp->arg_index].a.a_string;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#if HAVE_WCHAR_T
+                      case TYPE_WIDE_STRING:
+                        {
+                          const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+#endif
+                      case TYPE_POINTER:
+                        {
+                          void *arg = a.arg[dp->arg_index].a.a_pointer;
+                          SNPRINTF_BUF (arg);
+                        }
+                        break;
+                      default:
+                        abort ();
+                      }
+
+#if USE_SNPRINTF
+                    /* Portability: Not all implementations of snprintf()
+                       are ISO C 99 compliant.  Determine the number of
+                       bytes that snprintf() has produced or would have
+                       produced.  */
+                    if (count >= 0)
+                      {
+                        /* Verify that snprintf() has NUL-terminated its
+                           result.  */
+                        if ((unsigned int) count < maxlen
+                            && ((TCHAR_T *) (result + length)) [count] != '\0')
+                          abort ();
+                        /* Portability hack.  */
+                        if (retcount > count)
+                          count = retcount;
+                      }
+                    else
+                      {
+                        /* snprintf() doesn't understand the '%n'
+                           directive.  */
+                        if (fbp[1] != '\0')
+                          {
+                            /* Don't use the '%n' directive; instead, look
+                               at the snprintf() return value.  */
+                            fbp[1] = '\0';
+                            continue;
+                          }
+                        else
+                          {
+                            /* Look at the snprintf() return value.  */
+                            if (retcount < 0)
+                              {
+# if !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF
+                                /* HP-UX 10.20 snprintf() is doubly deficient:
+                                   It doesn't understand the '%n' directive,
+                                   *and* it returns -1 (rather than the length
+                                   that would have been required) when the
+                                   buffer is too small.
+                                   But a failure at this point can also come
+                                   from other reasons than a too small buffer,
+                                   such as an invalid wide string argument to
+                                   the %ls directive, or possibly an invalid
+                                   floating-point argument.  */
+                                size_t tmp_length =
+                                  MAX_ROOM_NEEDED (&a, dp->arg_index,
+                                                   dp->conversion, type, flags,
+                                                   width,
+                                                   has_precision,
+                                                   precision, pad_ourselves);
+
+                                if (maxlen < tmp_length)
+                                  {
+                                    /* Make more room.  But try to do through
+                                       this reallocation only once.  */
+                                    size_t bigger_need =
+                                      xsum (length,
+                                            xsum (tmp_length,
+                                                  TCHARS_PER_DCHAR - 1)
+                                            / TCHARS_PER_DCHAR);
+                                    /* And always grow proportionally.
+                                       (There may be several arguments, each
+                                       needing a little more room than the
+                                       previous one.)  */
+                                    size_t bigger_need2 =
+                                      xsum (xtimes (allocated, 2), 12);
+                                    if (bigger_need < bigger_need2)
+                                      bigger_need = bigger_need2;
+                                    ENSURE_ALLOCATION (bigger_need);
+                                    continue;
+                                  }
+# endif
+                              }
+                            else
+                              count = retcount;
+                          }
+                      }
+#endif
+
+                    /* Attempt to handle failure.  */
+                    if (count < 0)
+                      {
+                        /* SNPRINTF or sprintf failed.  Save and use the errno
+                           that it has set, if any.  */
+                        int saved_errno = errno;
+                        if (saved_errno == 0)
+                          {
+                            if (dp->conversion == 'c' || dp->conversion == 's')
+                              saved_errno = EILSEQ;
+                            else
+                              saved_errno = EINVAL;
+                          }
+
+                        if (!(result == resultbuf || result == NULL))
+                          free (result);
+                        if (buf_malloced != NULL)
+                          free (buf_malloced);
+                        CLEANUP ();
+
+                        errno = saved_errno;
+                        return NULL;
+                      }
+
+#if USE_SNPRINTF
+                    /* Handle overflow of the allocated buffer.
+                       If such an overflow occurs, a C99 compliant snprintf()
+                       returns a count >= maxlen.  However, a non-compliant
+                       snprintf() function returns only count = maxlen - 1.  To
+                       cover both cases, test whether count >= maxlen - 1.  */
+                    if ((unsigned int) count + 1 >= maxlen)
+                      {
+                        /* If maxlen already has attained its allowed maximum,
+                           allocating more memory will not increase maxlen.
+                           Instead of looping, bail out.  */
+                        if (maxlen == INT_MAX / TCHARS_PER_DCHAR)
+                          goto overflow;
+                        else
+                          {
+                            /* Need at least (count + 1) * sizeof (TCHAR_T)
+                               bytes.  (The +1 is for the trailing NUL.)
+                               But ask for (count + 2) * sizeof (TCHAR_T)
+                               bytes, so that in the next round, we likely get
+                                 maxlen > (unsigned int) count + 1
+                               and so we don't get here again.
+                               And allocate proportionally, to avoid looping
+                               eternally if snprintf() reports a too small
+                               count.  */
+                            size_t n =
+                              xmax (xsum (length,
+                                          ((unsigned int) count + 2
+                                           + TCHARS_PER_DCHAR - 1)
+                                          / TCHARS_PER_DCHAR),
+                                    xtimes (allocated, 2));
+
+                            ENSURE_ALLOCATION (n);
+                            continue;
+                          }
+                      }
+#endif
+
+#if NEED_PRINTF_UNBOUNDED_PRECISION
+                    if (prec_ourselves)
+                      {
+                        /* Handle the precision.  */
+                        TCHAR_T *prec_ptr =
+# if USE_SNPRINTF
+                          (TCHAR_T *) (result + length);
+# else
+                          tmp;
+# endif
+                        size_t prefix_count;
+                        size_t move;
+
+                        prefix_count = 0;
+                        /* Put the additional zeroes after the sign.  */
+                        if (count >= 1
+                            && (*prec_ptr == '-' || *prec_ptr == '+'
+                                || *prec_ptr == ' '))
+                          prefix_count = 1;
+                        /* Put the additional zeroes after the 0x prefix if
+                           (flags & FLAG_ALT) || (dp->conversion == 'p').  */
+                        else if (count >= 2
+                                 && prec_ptr[0] == '0'
+                                 && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X'))
+                          prefix_count = 2;
+
+                        move = count - prefix_count;
+                        if (precision > move)
+                          {
+                            /* Insert zeroes.  */
+                            size_t insert = precision - move;
+                            TCHAR_T *prec_end;
+
+# if USE_SNPRINTF
+                            size_t n =
+                              xsum (length,
+                                    (count + insert + TCHARS_PER_DCHAR - 1)
+                                    / TCHARS_PER_DCHAR);
+                            length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
+                            ENSURE_ALLOCATION (n);
+                            length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR;
+                            prec_ptr = (TCHAR_T *) (result + length);
+# endif
+
+                            prec_end = prec_ptr + count;
+                            prec_ptr += prefix_count;
+
+                            while (prec_end > prec_ptr)
+                              {
+                                prec_end--;
+                                prec_end[insert] = prec_end[0];
+                              }
+
+                            prec_end += insert;
+                            do
+                              *--prec_end = '0';
+                            while (prec_end > prec_ptr);
+
+                            count += insert;
+                          }
+                      }
+#endif
+
+#if !USE_SNPRINTF
+                    if (count >= tmp_length)
+                      /* tmp_length was incorrectly calculated - fix the
+                         code above!  */
+                      abort ();
+#endif
+
+#if !DCHAR_IS_TCHAR
+                    /* Convert from TCHAR_T[] to DCHAR_T[].  */
+                    if (dp->conversion == 'c' || dp->conversion == 's')
+                      {
+                        /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING
+                           TYPE_WIDE_STRING.
+                           The result string is not certainly ASCII.  */
+                        const TCHAR_T *tmpsrc;
+                        DCHAR_T *tmpdst;
+                        size_t tmpdst_len;
+                        /* This code assumes that TCHAR_T is 'char'.  */
+                        verify (sizeof (TCHAR_T) == 1);
+# if USE_SNPRINTF
+                        tmpsrc = (TCHAR_T *) (result + length);
+# else
+                        tmpsrc = tmp;
+# endif
+                        tmpdst =
+                          DCHAR_CONV_FROM_ENCODING (locale_charset (),
+                                                    iconveh_question_mark,
+                                                    tmpsrc, count,
+                                                    NULL,
+                                                    NULL, &tmpdst_len);
+                        if (tmpdst == NULL)
+                          {
+                            int saved_errno = errno;
+                            if (!(result == resultbuf || result == NULL))
+                              free (result);
+                            if (buf_malloced != NULL)
+                              free (buf_malloced);
+                            CLEANUP ();
+                            errno = saved_errno;
+                            return NULL;
+                          }
+                        ENSURE_ALLOCATION (xsum (length, tmpdst_len));
+                        DCHAR_CPY (result + length, tmpdst, tmpdst_len);
+                        free (tmpdst);
+                        count = tmpdst_len;
+                      }
+                    else
+                      {
+                        /* The result string is ASCII.
+                           Simple 1:1 conversion.  */
+# if USE_SNPRINTF
+                        /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a
+                           no-op conversion, in-place on the array starting
+                           at (result + length).  */
+                        if (sizeof (DCHAR_T) != sizeof (TCHAR_T))
+# endif
+                          {
+                            const TCHAR_T *tmpsrc;
+                            DCHAR_T *tmpdst;
+                            size_t n;
+
+# if USE_SNPRINTF
+                            if (result == resultbuf)
+                              {
+                                tmpsrc = (TCHAR_T *) (result + length);
+                                /* ENSURE_ALLOCATION will not move tmpsrc
+                                   (because it's part of resultbuf).  */
+                                ENSURE_ALLOCATION (xsum (length, count));
+                              }
+                            else
+                              {
+                                /* ENSURE_ALLOCATION will move the array
+                                   (because it uses realloc().  */
+                                ENSURE_ALLOCATION (xsum (length, count));
+                                tmpsrc = (TCHAR_T *) (result + length);
+                              }
+# else
+                            tmpsrc = tmp;
+                            ENSURE_ALLOCATION (xsum (length, count));
+# endif
+                            tmpdst = result + length;
+                            /* Copy backwards, because of overlapping.  */
+                            tmpsrc += count;
+                            tmpdst += count;
+                            for (n = count; n > 0; n--)
+                              *--tmpdst = *--tmpsrc;
+                          }
+                      }
+#endif
+
+#if DCHAR_IS_TCHAR && !USE_SNPRINTF
+                    /* Make room for the result.  */
+                    if (count > allocated - length)
+                      {
+                        /* Need at least count elements.  But allocate
+                           proportionally.  */
+                        size_t n =
+                          xmax (xsum (length, count), xtimes (allocated, 2));
+
+                        ENSURE_ALLOCATION (n);
+                      }
+#endif
+
+                    /* Here count <= allocated - length.  */
+
+                    /* Perform padding.  */
+#if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION
+                    if (pad_ourselves && has_width)
+                      {
+                        size_t w;
+# if ENABLE_UNISTDIO
+                        /* Outside POSIX, it's preferable to compare the width
+                           against the number of _characters_ of the converted
+                           value.  */
+                        w = DCHAR_MBSNLEN (result + length, count);
+# else
+                        /* The width is compared against the number of _bytes_
+                           of the converted value, says POSIX.  */
+                        w = count;
+# endif
+                        if (w < width)
+                          {
+                            size_t pad = width - w;
+
+                            /* Make room for the result.  */
+                            if (xsum (count, pad) > allocated - length)
+                              {
+                                /* Need at least count + pad elements.  But
+                                   allocate proportionally.  */
+                                size_t n =
+                                  xmax (xsum3 (length, count, pad),
+                                        xtimes (allocated, 2));
+
+# if USE_SNPRINTF
+                                length += count;
+                                ENSURE_ALLOCATION (n);
+                                length -= count;
+# else
+                                ENSURE_ALLOCATION (n);
+# endif
+                              }
+                            /* Here count + pad <= allocated - length.  */
+
+                            {
+# if !DCHAR_IS_TCHAR || USE_SNPRINTF
+                              DCHAR_T * const rp = result + length;
+# else
+                              DCHAR_T * const rp = tmp;
+# endif
+                              DCHAR_T *p = rp + count;
+                              DCHAR_T *end = p + pad;
+                              DCHAR_T *pad_ptr;
+# if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO
+                              if (dp->conversion == 'c'
+                                  || dp->conversion == 's')
+                                /* No zero-padding for string directives.  */
+                                pad_ptr = NULL;
+                              else
+# endif
+                                {
+                                  pad_ptr = (*rp == '-' ? rp + 1 : rp);
+                                  /* No zero-padding of "inf" and "nan".  */
+                                  if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z')
+                                      || (*pad_ptr >= 'a' && *pad_ptr <= 'z'))
+                                    pad_ptr = NULL;
+                                }
+                              /* The generated string now extends from rp to p,
+                                 with the zero padding insertion point being at
+                                 pad_ptr.  */
+
+                              count = count + pad; /* = end - rp */
+
+                              if (flags & FLAG_LEFT)
+                                {
+                                  /* Pad with spaces on the right.  */
+                                  for (; pad > 0; pad--)
+                                    *p++ = ' ';
+                                }
+                              else if ((flags & FLAG_ZERO) && pad_ptr != NULL)
+                                {
+                                  /* Pad with zeroes.  */
+                                  DCHAR_T *q = end;
+
+                                  while (p > pad_ptr)
+                                    *--q = *--p;
+                                  for (; pad > 0; pad--)
+                                    *p++ = '0';
+                                }
+                              else
+                                {
+                                  /* Pad with spaces on the left.  */
+                                  DCHAR_T *q = end;
+
+                                  while (p > rp)
+                                    *--q = *--p;
+                                  for (; pad > 0; pad--)
+                                    *p++ = ' ';
+                                }
+                            }
+                          }
+                      }
+#endif
+
+                    /* Here still count <= allocated - length.  */
+
+#if !DCHAR_IS_TCHAR || USE_SNPRINTF
+                    /* The snprintf() result did fit.  */
+#else
+                    /* Append the sprintf() result.  */
+                    memcpy (result + length, tmp, count * sizeof (DCHAR_T));
+#endif
+#if !USE_SNPRINTF
+                    if (tmp != tmpbuf)
+                      free (tmp);
+#endif
+
+#if NEED_PRINTF_DIRECTIVE_F
+                    if (dp->conversion == 'F')
+                      {
+                        /* Convert the %f result to upper case for %F.  */
+                        DCHAR_T *rp = result + length;
+                        size_t rc;
+                        for (rc = count; rc > 0; rc--, rp++)
+                          if (*rp >= 'a' && *rp <= 'z')
+                            *rp = *rp - 'a' + 'A';
+                      }
+#endif
+
+                    length += count;
+                    break;
+                  }
+                errno = orig_errno;
+#undef pad_ourselves
+#undef prec_ourselves
+              }
+          }
+      }
+
+    /* Add the final NUL.  */
+    ENSURE_ALLOCATION (xsum (length, 1));
+    result[length] = '\0';
+
+    if (result != resultbuf && length + 1 < allocated)
+      {
+        /* Shrink the allocated memory if possible.  */
+        DCHAR_T *memory;
+
+        memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T));
+        if (memory != NULL)
+          result = memory;
+      }
+
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+    CLEANUP ();
+    *lengthp = length;
+    /* Note that we can produce a big string of a length > INT_MAX.  POSIX
+       says that snprintf() fails with errno = EOVERFLOW in this case, but
+       that's only because snprintf() returns an 'int'.  This function does
+       not have this limitation.  */
+    return result;
+
+#if USE_SNPRINTF
+  overflow:
+    if (!(result == resultbuf || result == NULL))
+      free (result);
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+    CLEANUP ();
+    errno = EOVERFLOW;
+    return NULL;
+#endif
+
+  out_of_memory:
+    if (!(result == resultbuf || result == NULL))
+      free (result);
+    if (buf_malloced != NULL)
+      free (buf_malloced);
+  out_of_memory_1:
+    CLEANUP ();
+    errno = ENOMEM;
+    return NULL;
+  }
+}
+
+#undef MAX_ROOM_NEEDED
+#undef TCHARS_PER_DCHAR
+#undef SNPRINTF
+#undef USE_SNPRINTF
+#undef DCHAR_SET
+#undef DCHAR_CPY
+#undef PRINTF_PARSE
+#undef DIRECTIVES
+#undef DIRECTIVE
+#undef DCHAR_IS_TCHAR
+#undef TCHAR_T
+#undef DCHAR_T
+#undef FCHAR_T
+#undef VASNPRINTF
diff --git a/lib/vasnprintf.h b/lib/vasnprintf.h
new file mode 100644 (file)
index 0000000..3eaaa7e
--- /dev/null
@@ -0,0 +1,79 @@
+/* vsprintf with automatic memory allocation.
+   Copyright (C) 2002-2004, 2007-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _VASNPRINTF_H
+#define _VASNPRINTF_H
+
+/* Get va_list.  */
+#include <stdarg.h>
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The __-protected variants of the attributes 'format' and 'printf' are
+   accepted by gcc versions 2.6.4 (effectively 2.7) and later.
+   We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because
+   gnulib and libintl do '#define printf __printf__' when they override
+   the 'printf' function.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec))
+#else
+# define _GL_ATTRIBUTE_FORMAT(spec) /* empty */
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/* Write formatted output to a string dynamically allocated with malloc().
+   You can pass a preallocated buffer for the result in RESULTBUF and its
+   size in *LENGTHP; otherwise you pass RESULTBUF = NULL.
+   If successful, return the address of the string (this may be = RESULTBUF
+   if no dynamic memory allocation was necessary) and set *LENGTHP to the
+   number of resulting bytes, excluding the trailing NUL.  Upon error, set
+   errno and return NULL.
+
+   When dynamic memory allocation occurs, the preallocated buffer is left
+   alone (with possibly modified contents).  This makes it possible to use
+   a statically allocated or stack-allocated buffer, like this:
+
+          char buf[100];
+          size_t len = sizeof (buf);
+          char *output = vasnprintf (buf, &len, format, args);
+          if (output == NULL)
+            ... error handling ...;
+          else
+            {
+              ... use the output string ...;
+              if (output != buf)
+                free (output);
+            }
+  */
+#if REPLACE_VASNPRINTF
+# define asnprintf rpl_asnprintf
+# define vasnprintf rpl_vasnprintf
+#endif
+extern char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...)
+       _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4));
+extern char * vasnprintf (char *resultbuf, size_t *lengthp, const char *format, va_list args)
+       _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 0));
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _VASNPRINTF_H */
diff --git a/lib/verify.h b/lib/verify.h
new file mode 100644 (file)
index 0000000..3b57dde
--- /dev/null
@@ -0,0 +1,285 @@
+/* Compile-time assert-like macros.
+
+   Copyright (C) 2005-2006, 2009-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Paul Eggert, Bruno Haible, and Jim Meyering.  */
+
+#ifndef _GL_VERIFY_H
+#define _GL_VERIFY_H
+
+
+/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11.
+   This is supported by GCC 4.6.0 and later, in C mode, and its use
+   here generates easier-to-read diagnostics when verify (R) fails.
+
+   Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11.
+   This will likely be supported by future GCC versions, in C++ mode.
+
+   Use this only with GCC.  If we were willing to slow 'configure'
+   down we could also use it with other compilers, but since this
+   affects only the quality of diagnostics, why bother?  */
+#if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \
+     && (201112L <= __STDC_VERSION__  || !defined __STRICT_ANSI__) \
+     && !defined __cplusplus)
+# define _GL_HAVE__STATIC_ASSERT 1
+#endif
+/* The condition (99 < __GNUC__) is temporary, until we know about the
+   first G++ release that supports static_assert.  */
+#if (99 < __GNUC__) && defined __cplusplus
+# define _GL_HAVE_STATIC_ASSERT 1
+#endif
+
+/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other
+   system headers, defines a conflicting _Static_assert that is no
+   better than ours; override it.  */
+#ifndef _GL_HAVE_STATIC_ASSERT
+# include <stddef.h>
+# undef _Static_assert
+#endif
+
+/* Each of these macros verifies that its argument R is nonzero.  To
+   be portable, R should be an integer constant expression.  Unlike
+   assert (R), there is no run-time overhead.
+
+   If _Static_assert works, verify (R) uses it directly.  Similarly,
+   _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct
+   that is an operand of sizeof.
+
+   The code below uses several ideas for C++ compilers, and for C
+   compilers that do not support _Static_assert:
+
+   * The first step is ((R) ? 1 : -1).  Given an expression R, of
+     integral or boolean or floating-point type, this yields an
+     expression of integral type, whose value is later verified to be
+     constant and nonnegative.
+
+   * Next this expression W is wrapped in a type
+     struct _gl_verify_type {
+       unsigned int _gl_verify_error_if_negative: W;
+     }.
+     If W is negative, this yields a compile-time error.  No compiler can
+     deal with a bit-field of negative size.
+
+     One might think that an array size check would have the same
+     effect, that is, that the type struct { unsigned int dummy[W]; }
+     would work as well.  However, inside a function, some compilers
+     (such as C++ compilers and GNU C) allow local parameters and
+     variables inside array size expressions.  With these compilers,
+     an array size check would not properly diagnose this misuse of
+     the verify macro:
+
+       void function (int n) { verify (n < 0); }
+
+   * For the verify macro, the struct _gl_verify_type will need to
+     somehow be embedded into a declaration.  To be portable, this
+     declaration must declare an object, a constant, a function, or a
+     typedef name.  If the declared entity uses the type directly,
+     such as in
+
+       struct dummy {...};
+       typedef struct {...} dummy;
+       extern struct {...} *dummy;
+       extern void dummy (struct {...} *);
+       extern struct {...} *dummy (void);
+
+     two uses of the verify macro would yield colliding declarations
+     if the entity names are not disambiguated.  A workaround is to
+     attach the current line number to the entity name:
+
+       #define _GL_CONCAT0(x, y) x##y
+       #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
+       extern struct {...} * _GL_CONCAT (dummy, __LINE__);
+
+     But this has the problem that two invocations of verify from
+     within the same macro would collide, since the __LINE__ value
+     would be the same for both invocations.  (The GCC __COUNTER__
+     macro solves this problem, but is not portable.)
+
+     A solution is to use the sizeof operator.  It yields a number,
+     getting rid of the identity of the type.  Declarations like
+
+       extern int dummy [sizeof (struct {...})];
+       extern void dummy (int [sizeof (struct {...})]);
+       extern int (*dummy (void)) [sizeof (struct {...})];
+
+     can be repeated.
+
+   * Should the implementation use a named struct or an unnamed struct?
+     Which of the following alternatives can be used?
+
+       extern int dummy [sizeof (struct {...})];
+       extern int dummy [sizeof (struct _gl_verify_type {...})];
+       extern void dummy (int [sizeof (struct {...})]);
+       extern void dummy (int [sizeof (struct _gl_verify_type {...})]);
+       extern int (*dummy (void)) [sizeof (struct {...})];
+       extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})];
+
+     In the second and sixth case, the struct type is exported to the
+     outer scope; two such declarations therefore collide.  GCC warns
+     about the first, third, and fourth cases.  So the only remaining
+     possibility is the fifth case:
+
+       extern int (*dummy (void)) [sizeof (struct {...})];
+
+   * GCC warns about duplicate declarations of the dummy function if
+     -Wredundant-decls is used.  GCC 4.3 and later have a builtin
+     __COUNTER__ macro that can let us generate unique identifiers for
+     each dummy function, to suppress this warning.
+
+   * This implementation exploits the fact that older versions of GCC,
+     which do not support _Static_assert, also do not warn about the
+     last declaration mentioned above.
+
+   * GCC warns if -Wnested-externs is enabled and verify() is used
+     within a function body; but inside a function, you can always
+     arrange to use verify_expr() instead.
+
+   * In C++, any struct definition inside sizeof is invalid.
+     Use a template type to work around the problem.  */
+
+/* Concatenate two preprocessor tokens.  */
+#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
+#define _GL_CONCAT0(x, y) x##y
+
+/* _GL_COUNTER is an integer, preferably one that changes each time we
+   use it.  Use __COUNTER__ if it works, falling back on __LINE__
+   otherwise.  __LINE__ isn't perfect, but it's better than a
+   constant.  */
+#if defined __COUNTER__ && __COUNTER__ != __COUNTER__
+# define _GL_COUNTER __COUNTER__
+#else
+# define _GL_COUNTER __LINE__
+#endif
+
+/* Generate a symbol with the given prefix, making it unique if
+   possible.  */
+#define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER)
+
+/* Verify requirement R at compile-time, as an integer constant expression
+   that returns 1.  If R is false, fail at compile-time, preferably
+   with a diagnostic that includes the string-literal DIAGNOSTIC.  */
+
+#define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \
+   (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC)))
+
+#ifdef __cplusplus
+# if !GNULIB_defined_struct__gl_verify_type
+template <int w>
+  struct _gl_verify_type {
+    unsigned int _gl_verify_error_if_negative: w;
+  };
+#  define GNULIB_defined_struct__gl_verify_type 1
+# endif
+# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+    _gl_verify_type<(R) ? 1 : -1>
+#elif defined _GL_HAVE__STATIC_ASSERT
+# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+    struct {                                   \
+      _Static_assert (R, DIAGNOSTIC);          \
+      int _gl_dummy;                          \
+    }
+#else
+# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
+    struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; }
+#endif
+
+/* Verify requirement R at compile-time, as a declaration without a
+   trailing ';'.  If R is false, fail at compile-time, preferably
+   with a diagnostic that includes the string-literal DIAGNOSTIC.
+
+   Unfortunately, unlike C11, this implementation must appear as an
+   ordinary declaration, and cannot appear inside struct { ... }.  */
+
+#ifdef _GL_HAVE__STATIC_ASSERT
+# define _GL_VERIFY _Static_assert
+#else
+# define _GL_VERIFY(R, DIAGNOSTIC)                                    \
+    extern int (*_GL_GENSYM (_gl_verify_function) (void))             \
+      [_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
+#endif
+
+/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h.  */
+#ifdef _GL_STATIC_ASSERT_H
+# if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert
+#  define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC)
+# endif
+# if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert
+#  define static_assert _Static_assert /* C11 requires this #define.  */
+# endif
+#endif
+
+/* @assert.h omit start@  */
+
+/* Each of these macros verifies that its argument R is nonzero.  To
+   be portable, R should be an integer constant expression.  Unlike
+   assert (R), there is no run-time overhead.
+
+   There are two macros, since no single macro can be used in all
+   contexts in C.  verify_true (R) is for scalar contexts, including
+   integer constant expression contexts.  verify (R) is for declaration
+   contexts, e.g., the top level.  */
+
+/* Verify requirement R at compile-time, as an integer constant expression.
+   Return 1.  This is equivalent to verify_expr (R, 1).
+
+   verify_true is obsolescent; please use verify_expr instead.  */
+
+#define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")")
+
+/* Verify requirement R at compile-time.  Return the value of the
+   expression E.  */
+
+#define verify_expr(R, E) \
+   (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E))
+
+/* Verify requirement R at compile-time, as a declaration without a
+   trailing ';'.  */
+
+#ifdef __GNUC__
+# define verify(R) _GL_VERIFY (R, "verify (" #R ")")
+#else
+/* PGI barfs if R is long.  Play it safe.  */
+# define verify(R) _GL_VERIFY (R, "verify (...)")
+#endif
+
+#ifndef __has_builtin
+# define __has_builtin(x) 0
+#endif
+
+/* Assume that R always holds.  This lets the compiler optimize
+   accordingly.  R should not have side-effects; it may or may not be
+   evaluated.  Behavior is undefined if R is false.  */
+
+#if (__has_builtin (__builtin_unreachable) \
+     || 4 < __GNUC__ + (5 <= __GNUC_MINOR__))
+# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ())
+#elif 1200 <= _MSC_VER
+# define assume(R) __assume (R)
+#elif ((defined GCC_LINT || defined lint) \
+       && (__has_builtin (__builtin_trap) \
+           || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__))))
+  /* Doing it this way helps various packages when configured with
+     --enable-gcc-warnings, which compiles with -Dlint.  It's nicer
+     when 'assume' silences warnings even with older GCCs.  */
+# define assume(R) ((R) ? (void) 0 : __builtin_trap ())
+#else
+  /* Some tools grok NOTREACHED, e.g., Oracle Studio 12.6.  */
+# define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0)
+#endif
+
+/* @assert.h omit end@  */
+
+#endif
diff --git a/lib/vsnprintf.c b/lib/vsnprintf.c
new file mode 100644 (file)
index 0000000..e11ab6c
--- /dev/null
@@ -0,0 +1,70 @@
+/* Formatted output to strings.
+   Copyright (C) 2004, 2006-2018 Free Software Foundation, Inc.
+   Written by Simon Josefsson and Yoann Vandoorselaere <yoann@prelude-ids.org>.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifdef HAVE_CONFIG_H
+# include <config.h>
+#endif
+
+/* Specification.  */
+#include <stdio.h>
+
+#include <errno.h>
+#include <limits.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include "vasnprintf.h"
+
+/* Print formatted output to string STR.  Similar to vsprintf, but
+   additional length SIZE limit how much is written into STR.  Returns
+   string length of formatted string (which may be larger than SIZE).
+   STR may be NULL, in which case nothing will be written.  On error,
+   return a negative value.  */
+int
+vsnprintf (char *str, size_t size, const char *format, va_list args)
+{
+  char *output;
+  size_t len;
+  size_t lenbuf = size;
+
+  output = vasnprintf (str, &lenbuf, format, args);
+  len = lenbuf;
+
+  if (!output)
+    return -1;
+
+  if (output != str)
+    {
+      if (size)
+        {
+          size_t pruned_len = (len < size ? len : size - 1);
+          memcpy (str, output, pruned_len);
+          str[pruned_len] = '\0';
+        }
+
+      free (output);
+    }
+
+  if (len > INT_MAX)
+    {
+      errno = EOVERFLOW;
+      return -1;
+    }
+
+  return len;
+}
diff --git a/lib/warn-on-use.h b/lib/warn-on-use.h
new file mode 100644 (file)
index 0000000..72d67cc
--- /dev/null
@@ -0,0 +1,131 @@
+/* A C macro for emitting warnings if a function is used.
+   Copyright (C) 2010-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
+   for FUNCTION which will then trigger a compiler warning containing
+   the text of "literal string" anywhere that function is called, if
+   supported by the compiler.  If the compiler does not support this
+   feature, the macro expands to an unused extern declaration.
+
+   _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the
+   attribute used in _GL_WARN_ON_USE.  If the compiler does not support
+   this feature, it expands to empty.
+
+   These macros are useful for marking a function as a potential
+   portability trap, with the intent that "literal string" include
+   instructions on the replacement function that should be used
+   instead.
+   _GL_WARN_ON_USE is for functions with 'extern' linkage.
+   _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline'
+   linkage.
+
+   However, one of the reasons that a function is a portability trap is
+   if it has the wrong signature.  Declaring FUNCTION with a different
+   signature in C is a compilation error, so this macro must use the
+   same type as any existing declaration so that programs that avoid
+   the problematic FUNCTION do not fail to compile merely because they
+   included a header that poisoned the function.  But this implies that
+   _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already
+   have a declaration.  Use of this macro implies that there must not
+   be any other macro hiding the declaration of FUNCTION; but
+   undefining FUNCTION first is part of the poisoning process anyway
+   (although for symbols that are provided only via a macro, the result
+   is a compilation error rather than a warning containing
+   "literal string").  Also note that in C++, it is only safe to use if
+   FUNCTION has no overloads.
+
+   For an example, it is possible to poison 'getline' by:
+   - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
+     [getline]) in configure.ac, which potentially defines
+     HAVE_RAW_DECL_GETLINE
+   - adding this code to a header that wraps the system <stdio.h>:
+     #undef getline
+     #if HAVE_RAW_DECL_GETLINE
+     _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
+       "not universally present; use the gnulib module getline");
+     #endif
+
+   It is not possible to directly poison global variables.  But it is
+   possible to write a wrapper accessor function, and poison that
+   (less common usage, like &environ, will cause a compilation error
+   rather than issue the nice warning, but the end result of informing
+   the developer about their portability problem is still achieved):
+     #if HAVE_RAW_DECL_ENVIRON
+     static char ***
+     rpl_environ (void) { return &environ; }
+     _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
+     # undef environ
+     # define environ (*rpl_environ ())
+     #endif
+   or better (avoiding contradictory use of 'static' and 'extern'):
+     #if HAVE_RAW_DECL_ENVIRON
+     static char ***
+     _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared")
+     rpl_environ (void) { return &environ; }
+     # undef environ
+     # define environ (*rpl_environ ())
+     #endif
+   */
+#ifndef _GL_WARN_ON_USE
+
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
+#  define _GL_WARN_ON_USE_ATTRIBUTE(message) \
+  __attribute__ ((__warning__ (message)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE(function, message) \
+extern __typeof__ (function) function
+#  define _GL_WARN_ON_USE_ATTRIBUTE(message)
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE(function, message) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+#  define _GL_WARN_ON_USE_ATTRIBUTE(message)
+# endif
+#endif
+
+/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
+   is like _GL_WARN_ON_USE (function, "string"), except that the function is
+   declared with the given prototype, consisting of return type, parameters,
+   and attributes.
+   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
+   not work in this case.  */
+#ifndef _GL_WARN_ON_USE_CXX
+# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes \
+     __attribute__ ((__warning__ (msg)))
+# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
+/* Verify the existence of the function.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+extern rettype function parameters_and_attributes
+# else /* Unsupported.  */
+#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
+_GL_WARN_EXTERN_C int _gl_warn_on_use
+# endif
+#endif
+
+/* _GL_WARN_EXTERN_C declaration;
+   performs the declaration with C linkage.  */
+#ifndef _GL_WARN_EXTERN_C
+# if defined __cplusplus
+#  define _GL_WARN_EXTERN_C extern "C"
+# else
+#  define _GL_WARN_EXTERN_C extern
+# endif
+#endif
diff --git a/lib/wchar.in.h b/lib/wchar.in.h
new file mode 100644 (file)
index 0000000..51a5dda
--- /dev/null
@@ -0,0 +1,1072 @@
+/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
+
+   Copyright (C) 2007-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Eric Blake.  */
+
+/*
+ * ISO C 99 <wchar.h> for platforms that have issues.
+ * <http://www.opengroup.org/susv3xbd/wchar.h.html>
+ *
+ * For now, this just ensures proper prerequisite inclusion order and
+ * the declaration of wcwidth().
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if (((defined __need_mbstate_t || defined __need_wint_t)               \
+      && !defined __MINGW32__)                                          \
+     || (defined __hpux                                                 \
+         && ((defined _INTTYPES_INCLUDED && !defined strtoimax)         \
+             || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H))               \
+     || (defined __MINGW32__ && defined __STRING_H_SOURCED__)           \
+     || defined _GL_ALREADY_INCLUDING_WCHAR_H)
+/* Special invocation convention:
+   - Inside glibc and uClibc header files, but not MinGW.
+   - On HP-UX 11.00 we have a sequence of nested includes
+     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
+     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
+     and once directly.  In both situations 'wint_t' is not yet defined,
+     therefore we cannot provide the function overrides; instead include only
+     the system's <wchar.h>.
+   - With MinGW 3.22, when <string.h> includes <wchar.h>, only some part of
+     <wchar.h> is actually processed, and that doesn't include 'mbstate_t'.
+   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
+     the latter includes <wchar.h>.  But here, we have no way to detect whether
+     <wctype.h> is completely included or is still being included.  */
+
+#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_WCHAR_H
+
+#define _GL_ALREADY_INCLUDING_WCHAR_H
+
+#if @HAVE_FEATURES_H@
+# include <features.h> /* for __GLIBC__ */
+#endif
+
+/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.
+   In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
+   by <stddef.h>.
+   But avoid namespace pollution on glibc systems.  */
+#if !(defined __GLIBC__ && !defined __UCLIBC__)
+# include <stddef.h>
+#endif
+#ifndef __GLIBC__
+# include <stdio.h>
+# include <time.h>
+#endif
+
+/* Include the original <wchar.h> if it exists.
+   Some builds of uClibc lack it.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_WCHAR_H@
+# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
+#endif
+
+#undef _GL_ALREADY_INCLUDING_WCHAR_H
+
+#ifndef _@GUARD_PREFIX@_WCHAR_H
+#define _@GUARD_PREFIX@_WCHAR_H
+
+/* The __attribute__ feature is available in gcc versions 2.5 and later.
+   The attribute __pure__ was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_ARG_NONNULL is copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+
+/* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
+   <stddef.h>.  This is too small: ISO C 99 section 7.24.1.(2) says that
+   wint_t must be "unchanged by default argument promotions".  Override it.  */
+# if @GNULIB_OVERRIDES_WINT_T@
+#  if !GNULIB_defined_wint_t
+#   if @HAVE_CRTDEFS_H@
+#    include <crtdefs.h>
+#   else
+#    include <stddef.h>
+#   endif
+typedef unsigned int rpl_wint_t;
+#   undef wint_t
+#   define wint_t rpl_wint_t
+#   define GNULIB_defined_wint_t 1
+#  endif
+# endif
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+/* Override mbstate_t if it is too small.
+   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
+   implementing mbrtowc for encodings like UTF-8.  */
+#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
+# if !GNULIB_defined_mbstate_t
+typedef int rpl_mbstate_t;
+#  undef mbstate_t
+#  define mbstate_t rpl_mbstate_t
+#  define GNULIB_defined_mbstate_t 1
+# endif
+#endif
+
+
+/* Convert a single-byte character to a wide character.  */
+#if @GNULIB_BTOWC@
+# if @REPLACE_BTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef btowc
+#   define btowc rpl_btowc
+#  endif
+_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
+# else
+#  if !@HAVE_BTOWC@
+_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
+# endif
+_GL_CXXALIASWARN (btowc);
+#elif defined GNULIB_POSIXCHECK
+# undef btowc
+# if HAVE_RAW_DECL_BTOWC
+_GL_WARN_ON_USE (btowc, "btowc is unportable - "
+                 "use gnulib module btowc for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a single-byte character.  */
+#if @GNULIB_WCTOB@
+# if @REPLACE_WCTOB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wctob
+#   define wctob rpl_wctob
+#  endif
+_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
+# else
+#  if !defined wctob && !@HAVE_DECL_WCTOB@
+/* wctob is provided by gnulib, or wctob exists but is not declared.  */
+_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (wctob);
+#elif defined GNULIB_POSIXCHECK
+# undef wctob
+# if HAVE_RAW_DECL_WCTOB
+_GL_WARN_ON_USE (wctob, "wctob is unportable - "
+                 "use gnulib module wctob for portability");
+# endif
+#endif
+
+
+/* Test whether *PS is in the initial state.  */
+#if @GNULIB_MBSINIT@
+# if @REPLACE_MBSINIT@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsinit
+#   define mbsinit rpl_mbsinit
+#  endif
+_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
+# else
+#  if !@HAVE_MBSINIT@
+_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsinit);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsinit
+# if HAVE_RAW_DECL_MBSINIT
+_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
+                 "use gnulib module mbsinit for portability");
+# endif
+#endif
+
+
+/* Convert a multibyte character to a wide character.  */
+#if @GNULIB_MBRTOWC@
+# if @REPLACE_MBRTOWC@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrtowc
+#   define mbrtowc rpl_mbrtowc
+#  endif
+_GL_FUNCDECL_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRTOWC@
+_GL_FUNCDECL_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrtowc, size_t,
+                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrtowc);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrtowc
+# if HAVE_RAW_DECL_MBRTOWC
+_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
+                 "use gnulib module mbrtowc for portability");
+# endif
+#endif
+
+
+/* Recognize a multibyte character.  */
+#if @GNULIB_MBRLEN@
+# if @REPLACE_MBRLEN@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbrlen
+#   define mbrlen rpl_mbrlen
+#  endif
+_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# else
+#  if !@HAVE_MBRLEN@
+_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbrlen);
+#elif defined GNULIB_POSIXCHECK
+# undef mbrlen
+# if HAVE_RAW_DECL_MBRLEN
+_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
+                 "use gnulib module mbrlen for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSRTOWCS@
+# if @REPLACE_MBSRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsrtowcs
+#   define mbsrtowcs rpl_mbsrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSRTOWCS@
+_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsrtowcs
+# if HAVE_RAW_DECL_MBSRTOWCS
+_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
+                 "use gnulib module mbsrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a string to a wide string.  */
+#if @GNULIB_MBSNRTOWCS@
+# if @REPLACE_MBSNRTOWCS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef mbsnrtowcs
+#   define mbsnrtowcs rpl_mbsnrtowcs
+#  endif
+_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_MBSNRTOWCS@
+_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
+                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (mbsnrtowcs);
+#elif defined GNULIB_POSIXCHECK
+# undef mbsnrtowcs
+# if HAVE_RAW_DECL_MBSNRTOWCS
+_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
+                 "use gnulib module mbsnrtowcs for portability");
+# endif
+#endif
+
+
+/* Convert a wide character to a multibyte character.  */
+#if @GNULIB_WCRTOMB@
+# if @REPLACE_WCRTOMB@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcrtomb
+#   define wcrtomb rpl_wcrtomb
+#  endif
+_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# else
+#  if !@HAVE_WCRTOMB@
+_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+#  endif
+_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcrtomb);
+#elif defined GNULIB_POSIXCHECK
+# undef wcrtomb
+# if HAVE_RAW_DECL_WCRTOMB
+_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
+                 "use gnulib module wcrtomb for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSRTOMBS@
+# if @REPLACE_WCSRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsrtombs
+#   define wcsrtombs rpl_wcsrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSRTOMBS@
+_GL_FUNCDECL_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrtombs
+# if HAVE_RAW_DECL_WCSRTOMBS
+_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
+                 "use gnulib module wcsrtombs for portability");
+# endif
+#endif
+
+
+/* Convert a wide string to a string.  */
+#if @GNULIB_WCSNRTOMBS@
+# if @REPLACE_WCSNRTOMBS@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsnrtombs
+#   define wcsnrtombs rpl_wcsnrtombs
+#  endif
+_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# else
+#  if !@HAVE_WCSNRTOMBS@
+_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps)
+                  _GL_ARG_NONNULL ((2)));
+#  endif
+_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
+                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
+                   mbstate_t *ps));
+# endif
+_GL_CXXALIASWARN (wcsnrtombs);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnrtombs
+# if HAVE_RAW_DECL_WCSNRTOMBS
+_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
+                 "use gnulib module wcsnrtombs for portability");
+# endif
+#endif
+
+
+/* Return the number of screen columns needed for WC.  */
+#if @GNULIB_WCWIDTH@
+# if @REPLACE_WCWIDTH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcwidth
+#   define wcwidth rpl_wcwidth
+#  endif
+_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
+# else
+#  if !@HAVE_DECL_WCWIDTH@
+/* wcwidth exists but is not declared.  */
+_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
+# endif
+_GL_CXXALIASWARN (wcwidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcwidth
+# if HAVE_RAW_DECL_WCWIDTH
+_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
+                 "use gnulib module wcwidth for portability");
+# endif
+#endif
+
+
+/* Search N wide characters of S for C.  */
+#if @GNULIB_WMEMCHR@
+# if !@HAVE_WMEMCHR@
+_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
+                                      _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
+         wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wmemchr,
+                        wchar_t *, (const wchar_t *, wchar_t, size_t),
+                        const wchar_t *, (const wchar_t *, wchar_t, size_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+_GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
+                   (const wchar_t *s, wchar_t c, size_t n));
+# else
+_GL_CXXALIASWARN (wmemchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wmemchr
+# if HAVE_RAW_DECL_WMEMCHR
+_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
+                 "use gnulib module wmemchr for portability");
+# endif
+#endif
+
+
+/* Compare N wide characters of S1 and S2.  */
+#if @GNULIB_WMEMCMP@
+# if !@HAVE_WMEMCMP@
+_GL_FUNCDECL_SYS (wmemcmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wmemcmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wmemcmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcmp
+# if HAVE_RAW_DECL_WMEMCMP
+_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
+                 "use gnulib module wmemcmp for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST.  */
+#if @GNULIB_WMEMCPY@
+# if !@HAVE_WMEMCPY@
+_GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wmemcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemcpy
+# if HAVE_RAW_DECL_WMEMCPY
+_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
+                 "use gnulib module wmemcpy for portability");
+# endif
+#endif
+
+
+/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
+   overlapping memory areas.  */
+#if @GNULIB_WMEMMOVE@
+# if !@HAVE_WMEMMOVE@
+_GL_FUNCDECL_SYS (wmemmove, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemmove, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wmemmove);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemmove
+# if HAVE_RAW_DECL_WMEMMOVE
+_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
+                 "use gnulib module wmemmove for portability");
+# endif
+#endif
+
+
+/* Set N wide characters of S to C.  */
+#if @GNULIB_WMEMSET@
+# if !@HAVE_WMEMSET@
+_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
+_GL_CXXALIASWARN (wmemset);
+#elif defined GNULIB_POSIXCHECK
+# undef wmemset
+# if HAVE_RAW_DECL_WMEMSET
+_GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
+                 "use gnulib module wmemset for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S.  */
+#if @GNULIB_WCSLEN@
+# if !@HAVE_WCSLEN@
+_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
+_GL_CXXALIASWARN (wcslen);
+#elif defined GNULIB_POSIXCHECK
+# undef wcslen
+# if HAVE_RAW_DECL_WCSLEN
+_GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
+                 "use gnulib module wcslen for portability");
+# endif
+#endif
+
+
+/* Return the number of wide characters in S, but at most MAXLEN.  */
+#if @GNULIB_WCSNLEN@
+# if !@HAVE_WCSNLEN@
+_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
+_GL_CXXALIASWARN (wcsnlen);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsnlen
+# if HAVE_RAW_DECL_WCSNLEN
+_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
+                 "use gnulib module wcsnlen for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST.  */
+#if @GNULIB_WCSCPY@
+# if !@HAVE_WCSCPY@
+_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcscpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscpy
+# if HAVE_RAW_DECL_WCSCPY
+_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
+                 "use gnulib module wcscpy for portability");
+# endif
+#endif
+
+
+/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST.  */
+#if @GNULIB_WCPCPY@
+# if !@HAVE_WCPCPY@
+_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcpcpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpcpy
+# if HAVE_RAW_DECL_WCPCPY
+_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
+                 "use gnulib module wcpcpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N wide characters of SRC to DEST.  */
+#if @GNULIB_WCSNCPY@
+# if !@HAVE_WCSNCPY@
+_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcsncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncpy
+# if HAVE_RAW_DECL_WCSNCPY
+_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
+                 "use gnulib module wcsncpy for portability");
+# endif
+#endif
+
+
+/* Copy no more than N characters of SRC to DEST, returning the address of
+   the last character written into DEST.  */
+#if @GNULIB_WCPNCPY@
+# if !@HAVE_WCPNCPY@
+_GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcpncpy);
+#elif defined GNULIB_POSIXCHECK
+# undef wcpncpy
+# if HAVE_RAW_DECL_WCPNCPY
+_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
+                 "use gnulib module wcpncpy for portability");
+# endif
+#endif
+
+
+/* Append SRC onto DEST.  */
+#if @GNULIB_WCSCAT@
+# if !@HAVE_WCSCAT@
+_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
+# endif
+_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
+_GL_CXXALIASWARN (wcscat);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscat
+# if HAVE_RAW_DECL_WCSCAT
+_GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
+                 "use gnulib module wcscat for portability");
+# endif
+#endif
+
+
+/* Append no more than N wide characters of SRC onto DEST.  */
+#if @GNULIB_WCSNCAT@
+# if !@HAVE_WCSNCAT@
+_GL_FUNCDECL_SYS (wcsncat, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsncat, wchar_t *,
+                  (wchar_t *dest, const wchar_t *src, size_t n));
+_GL_CXXALIASWARN (wcsncat);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncat
+# if HAVE_RAW_DECL_WCSNCAT
+_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
+                 "use gnulib module wcsncat for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2.  */
+#if @GNULIB_WCSCMP@
+# if !@HAVE_WCSCMP@
+_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
+                               _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscmp
+# if HAVE_RAW_DECL_WCSCMP
+_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
+                 "use gnulib module wcscmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N wide characters of S1 and S2.  */
+#if @GNULIB_WCSNCMP@
+# if !@HAVE_WCSNCMP@
+_GL_FUNCDECL_SYS (wcsncmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsncmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncmp
+# if HAVE_RAW_DECL_WCSNCMP
+_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
+                 "use gnulib module wcsncmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, ignoring case.  */
+#if @GNULIB_WCSCASECMP@
+# if !@HAVE_WCSCASECMP@
+_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscasecmp
+# if HAVE_RAW_DECL_WCSCASECMP
+_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
+                 "use gnulib module wcscasecmp for portability");
+# endif
+#endif
+
+
+/* Compare no more than N chars of S1 and S2, ignoring case.  */
+#if @GNULIB_WCSNCASECMP@
+# if !@HAVE_WCSNCASECMP@
+_GL_FUNCDECL_SYS (wcsncasecmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsncasecmp, int,
+                  (const wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsncasecmp);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsncasecmp
+# if HAVE_RAW_DECL_WCSNCASECMP
+_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
+                 "use gnulib module wcsncasecmp for portability");
+# endif
+#endif
+
+
+/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
+   category of the current locale.  */
+#if @GNULIB_WCSCOLL@
+# if !@HAVE_WCSCOLL@
+_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+# endif
+_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
+_GL_CXXALIASWARN (wcscoll);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscoll
+# if HAVE_RAW_DECL_WCSCOLL
+_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
+                 "use gnulib module wcscoll for portability");
+# endif
+#endif
+
+
+/* Transform S2 into array pointed to by S1 such that if wcscmp is applied
+   to two transformed strings the result is the as applying 'wcscoll' to the
+   original strings.  */
+#if @GNULIB_WCSXFRM@
+# if !@HAVE_WCSXFRM@
+_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
+# endif
+_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
+_GL_CXXALIASWARN (wcsxfrm);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsxfrm
+# if HAVE_RAW_DECL_WCSXFRM
+_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
+                 "use gnulib module wcsxfrm for portability");
+# endif
+#endif
+
+
+/* Duplicate S, returning an identical malloc'd string.  */
+#if @GNULIB_WCSDUP@
+# if !@HAVE_WCSDUP@
+_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+# endif
+_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
+_GL_CXXALIASWARN (wcsdup);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsdup
+# if HAVE_RAW_DECL_WCSDUP
+_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
+                 "use gnulib module wcsdup for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence of WC in WCS.  */
+#if @GNULIB_WCSCHR@
+# if !@HAVE_WCSCHR@
+_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+                                     _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcschr (const wchar_t *, wchar_t);
+         wchar_t * std::wcschr (wchar_t *, wchar_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcschr,
+                        wchar_t *, (const wchar_t *, wchar_t),
+                        const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# else
+_GL_CXXALIASWARN (wcschr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcschr
+# if HAVE_RAW_DECL_WCSCHR
+_GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
+                 "use gnulib module wcschr for portability");
+# endif
+#endif
+
+
+/* Find the last occurrence of WC in WCS.  */
+#if @GNULIB_WCSRCHR@
+# if !@HAVE_WCSRCHR@
+_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
+                                      _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
+         wchar_t * std::wcsrchr (wchar_t *, wchar_t);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcsrchr,
+                        wchar_t *, (const wchar_t *, wchar_t),
+                        const wchar_t *, (const wchar_t *, wchar_t));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
+_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
+# else
+_GL_CXXALIASWARN (wcsrchr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsrchr
+# if HAVE_RAW_DECL_WCSRCHR
+_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
+                 "use gnulib module wcsrchr for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+   of wide characters not in REJECT.  */
+#if @GNULIB_WCSCSPN@
+# if !@HAVE_WCSCSPN@
+_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
+                                   _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
+_GL_CXXALIASWARN (wcscspn);
+#elif defined GNULIB_POSIXCHECK
+# undef wcscspn
+# if HAVE_RAW_DECL_WCSCSPN
+_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
+                 "use gnulib module wcscspn for portability");
+# endif
+#endif
+
+
+/* Return the length of the initial segmet of WCS which consists entirely
+   of wide characters in ACCEPT.  */
+#if @GNULIB_WCSSPN@
+# if !@HAVE_WCSSPN@
+_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
+                                  _GL_ATTRIBUTE_PURE);
+# endif
+_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
+_GL_CXXALIASWARN (wcsspn);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsspn
+# if HAVE_RAW_DECL_WCSSPN
+_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
+                 "use gnulib module wcsspn for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence in WCS of any character in ACCEPT.  */
+#if @GNULIB_WCSPBRK@
+# if !@HAVE_WCSPBRK@
+_GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
+                  (const wchar_t *wcs, const wchar_t *accept)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
+         wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcspbrk,
+                        wchar_t *, (const wchar_t *, const wchar_t *),
+                        const wchar_t *, (const wchar_t *, const wchar_t *));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
+                   (wchar_t *wcs, const wchar_t *accept));
+_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
+                   (const wchar_t *wcs, const wchar_t *accept));
+# else
+_GL_CXXALIASWARN (wcspbrk);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcspbrk
+# if HAVE_RAW_DECL_WCSPBRK
+_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
+                 "use gnulib module wcspbrk for portability");
+# endif
+#endif
+
+
+/* Find the first occurrence of NEEDLE in HAYSTACK.  */
+#if @GNULIB_WCSSTR@
+# if !@HAVE_WCSSTR@
+_GL_FUNCDECL_SYS (wcsstr, wchar_t *,
+                  (const wchar_t *haystack, const wchar_t *needle)
+                  _GL_ATTRIBUTE_PURE);
+# endif
+  /* On some systems, this function is defined as an overloaded function:
+       extern "C++" {
+         const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
+         wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
+       }  */
+_GL_CXXALIAS_SYS_CAST2 (wcsstr,
+                        wchar_t *, (const wchar_t *, const wchar_t *),
+                        const wchar_t *, (const wchar_t *, const wchar_t *));
+# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
+     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
+_GL_CXXALIASWARN1 (wcsstr, wchar_t *,
+                   (wchar_t *haystack, const wchar_t *needle));
+_GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
+                   (const wchar_t *haystack, const wchar_t *needle));
+# else
+_GL_CXXALIASWARN (wcsstr);
+# endif
+#elif defined GNULIB_POSIXCHECK
+# undef wcsstr
+# if HAVE_RAW_DECL_WCSSTR
+_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
+                 "use gnulib module wcsstr for portability");
+# endif
+#endif
+
+
+/* Divide WCS into tokens separated by characters in DELIM.  */
+#if @GNULIB_WCSTOK@
+# if !@HAVE_WCSTOK@
+_GL_FUNCDECL_SYS (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+# endif
+_GL_CXXALIAS_SYS (wcstok, wchar_t *,
+                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
+_GL_CXXALIASWARN (wcstok);
+#elif defined GNULIB_POSIXCHECK
+# undef wcstok
+# if HAVE_RAW_DECL_WCSTOK
+_GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
+                 "use gnulib module wcstok for portability");
+# endif
+#endif
+
+
+/* Determine number of column positions required for first N wide
+   characters (or fewer if S ends before this) in S.  */
+#if @GNULIB_WCSWIDTH@
+# if @REPLACE_WCSWIDTH@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcswidth
+#   define wcswidth rpl_wcswidth
+#  endif
+_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
+                                 _GL_ATTRIBUTE_PURE);
+_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
+# else
+#  if !@HAVE_WCSWIDTH@
+_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
+                                 _GL_ATTRIBUTE_PURE);
+#  endif
+_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
+# endif
+_GL_CXXALIASWARN (wcswidth);
+#elif defined GNULIB_POSIXCHECK
+# undef wcswidth
+# if HAVE_RAW_DECL_WCSWIDTH
+_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
+                 "use gnulib module wcswidth for portability");
+# endif
+#endif
+
+
+/* Convert *TP to a date and time wide string.  See
+   <http://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>.  */
+#if @GNULIB_WCSFTIME@
+# if @REPLACE_WCSFTIME@
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   undef wcsftime
+#   define wcsftime rpl_wcsftime
+#  endif
+_GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
+                                     const wchar_t *__fmt, const struct tm *__tp)
+                                    _GL_ARG_NONNULL ((1, 3, 4)));
+_GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
+                                     const wchar_t *__fmt, const struct tm *__tp));
+# else
+#  if !@HAVE_WCSFTIME@
+_GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
+                                     const wchar_t *__fmt, const struct tm *__tp)
+                                    _GL_ARG_NONNULL ((1, 3, 4)));
+#  endif
+_GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *__buf, size_t __bufsize,
+                                     const wchar_t *__fmt, const struct tm *__tp));
+# endif
+_GL_CXXALIASWARN (wcsftime);
+#elif defined GNULIB_POSIXCHECK
+# undef wcsftime
+# if HAVE_RAW_DECL_WCSFTIME
+_GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - "
+                 "use gnulib module wcsftime for portability");
+# endif
+#endif
+
+
+#endif /* _@GUARD_PREFIX@_WCHAR_H */
+#endif /* _@GUARD_PREFIX@_WCHAR_H */
+#endif
diff --git a/lib/wctype-h.c b/lib/wctype-h.c
new file mode 100644 (file)
index 0000000..bb5f847
--- /dev/null
@@ -0,0 +1,4 @@
+/* Normally this would be wctype.c, but that name's already taken.  */
+#include <config.h>
+#define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE
+#include "wctype.h"
diff --git a/lib/wctype.in.h b/lib/wctype.in.h
new file mode 100644 (file)
index 0000000..3c6e5f2
--- /dev/null
@@ -0,0 +1,533 @@
+/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
+
+   Copyright (C) 2006-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+/* Written by Bruno Haible and Paul Eggert.  */
+
+/*
+ * ISO C 99 <wctype.h> for platforms that lack it.
+ * <http://www.opengroup.org/susv3xbd/wctype.h.html>
+ *
+ * iswctype, towctrans, towlower, towupper, wctrans, wctype,
+ * wctrans_t, and wctype_t are not yet implemented.
+ */
+
+#if __GNUC__ >= 3
+@PRAGMA_SYSTEM_HEADER@
+#endif
+@PRAGMA_COLUMNS@
+
+#if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__)
+
+/* Special invocation convention:
+   - With MinGW 3.22, when <ctype.h> includes <wctype.h>, only some part of
+     <wctype.h> is being processed, which doesn't include the idempotency
+     guard.   */
+
+#@INCLUDE_NEXT@ @NEXT_WCTYPE_H@
+
+#else
+/* Normal invocation convention.  */
+
+#ifndef _@GUARD_PREFIX@_WCTYPE_H
+
+#if @HAVE_WINT_T@
+/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
+   Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
+   <wchar.h>.
+   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
+   included before <wchar.h>.  */
+# include <stddef.h>
+# include <stdio.h>
+# include <time.h>
+# include <wchar.h>
+#endif
+
+/* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and
+   isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>.  Include
+   <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the
+   declarations.  */
+#if defined _WIN32 && ! defined __CYGWIN__
+# include <ctype.h>
+# include <wchar.h>
+#endif
+
+/* Include the original <wctype.h> if it exists.
+   BeOS 5 has the functions but no <wctype.h>.  */
+/* The include_next requires a split double-inclusion guard.  */
+#if @HAVE_WCTYPE_H@
+# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
+#endif
+
+#ifndef _@GUARD_PREFIX@_WCTYPE_H
+#define _@GUARD_PREFIX@_WCTYPE_H
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef _GL_WCTYPE_INLINE
+# define _GL_WCTYPE_INLINE _GL_INLINE
+#endif
+
+/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
+
+/* The definition of _GL_WARN_ON_USE is copied here.  */
+
+/* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which
+   #defines a number of identifiers in the application namespace.  Revert
+   these #defines.  */
+#ifdef __sun
+# undef multibyte
+# undef eucw1
+# undef eucw2
+# undef eucw3
+# undef scrw1
+# undef scrw2
+# undef scrw3
+#endif
+
+/* Define wint_t and WEOF.  (Also done in wchar.in.h.)  */
+#if !@HAVE_WINT_T@ && !defined wint_t
+# define wint_t int
+# ifndef WEOF
+#  define WEOF -1
+# endif
+#else
+/* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or
+   <stddef.h>.  This is too small: ISO C 99 section 7.24.1.(2) says that
+   wint_t must be "unchanged by default argument promotions".  Override it.  */
+# if @GNULIB_OVERRIDES_WINT_T@
+#  if !GNULIB_defined_wint_t
+#   if @HAVE_CRTDEFS_H@
+#    include <crtdefs.h>
+#   else
+#    include <stddef.h>
+#   endif
+typedef unsigned int rpl_wint_t;
+#   undef wint_t
+#   define wint_t rpl_wint_t
+#   define GNULIB_defined_wint_t 1
+#  endif
+# endif
+# ifndef WEOF
+#  define WEOF ((wint_t) -1)
+# endif
+#endif
+
+
+#if !GNULIB_defined_wctype_functions
+
+/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
+   Linux libc5 has <wctype.h> and the functions but they are broken.
+   Assume all 11 functions (all isw* except iswblank) are implemented the
+   same way, or not at all.  */
+# if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
+
+/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
+   undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
+   refer to system functions like _iswctype that are not in the
+   standard C library.  Rather than try to get ancient buggy
+   implementations like this to work, just disable them.  */
+#  undef iswalnum
+#  undef iswalpha
+#  undef iswblank
+#  undef iswcntrl
+#  undef iswdigit
+#  undef iswgraph
+#  undef iswlower
+#  undef iswprint
+#  undef iswpunct
+#  undef iswspace
+#  undef iswupper
+#  undef iswxdigit
+#  undef towlower
+#  undef towupper
+
+/* Linux libc5 has <wctype.h> and the functions but they are broken.  */
+#  if @REPLACE_ISWCNTRL@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define iswalnum rpl_iswalnum
+#    define iswalpha rpl_iswalpha
+#    define iswblank rpl_iswblank
+#    define iswcntrl rpl_iswcntrl
+#    define iswdigit rpl_iswdigit
+#    define iswgraph rpl_iswgraph
+#    define iswlower rpl_iswlower
+#    define iswprint rpl_iswprint
+#    define iswpunct rpl_iswpunct
+#    define iswspace rpl_iswspace
+#    define iswupper rpl_iswupper
+#    define iswxdigit rpl_iswxdigit
+#   endif
+#  endif
+#  if @REPLACE_TOWLOWER@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define towlower rpl_towlower
+#    define towupper rpl_towupper
+#   endif
+#  endif
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswalnum
+#  else
+iswalnum
+#  endif
+         (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswalpha
+#  else
+iswalpha
+#  endif
+         (wint_t wc)
+{
+  return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswblank
+#  else
+iswblank
+#  endif
+         (wint_t wc)
+{
+  return wc == ' ' || wc == '\t';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswcntrl
+#  else
+iswcntrl
+#  endif
+        (wint_t wc)
+{
+  return (wc & ~0x1f) == 0 || wc == 0x7f;
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswdigit
+#  else
+iswdigit
+#  endif
+         (wint_t wc)
+{
+  return wc >= '0' && wc <= '9';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswgraph
+#  else
+iswgraph
+#  endif
+         (wint_t wc)
+{
+  return wc >= '!' && wc <= '~';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswlower
+#  else
+iswlower
+#  endif
+         (wint_t wc)
+{
+  return wc >= 'a' && wc <= 'z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswprint
+#  else
+iswprint
+#  endif
+         (wint_t wc)
+{
+  return wc >= ' ' && wc <= '~';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswpunct
+#  else
+iswpunct
+#  endif
+         (wint_t wc)
+{
+  return (wc >= '!' && wc <= '~'
+          && !((wc >= '0' && wc <= '9')
+               || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswspace
+#  else
+iswspace
+#  endif
+         (wint_t wc)
+{
+  return (wc == ' ' || wc == '\t'
+          || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswupper
+#  else
+iswupper
+#  endif
+         (wint_t wc)
+{
+  return wc >= 'A' && wc <= 'Z';
+}
+
+_GL_WCTYPE_INLINE int
+#  if @REPLACE_ISWCNTRL@
+rpl_iswxdigit
+#  else
+iswxdigit
+#  endif
+          (wint_t wc)
+{
+  return ((wc >= '0' && wc <= '9')
+          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
+}
+
+_GL_WCTYPE_INLINE wint_t
+#  if @REPLACE_TOWLOWER@
+rpl_towlower
+#  else
+towlower
+#  endif
+         (wint_t wc)
+{
+  return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
+}
+
+_GL_WCTYPE_INLINE wint_t
+#  if @REPLACE_TOWLOWER@
+rpl_towupper
+#  else
+towupper
+#  endif
+         (wint_t wc)
+{
+  return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
+}
+
+# elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@)
+/* Only the iswblank function is missing.  */
+
+#  if @REPLACE_ISWBLANK@
+#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#    define iswblank rpl_iswblank
+#   endif
+_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc));
+#  else
+_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc));
+#  endif
+
+# endif
+
+# if defined __MINGW32__
+
+/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
+   The functions towlower and towupper are implemented in the MSVCRT library
+   to take a wchar_t argument and return a wchar_t result.  mingw declares
+   these functions to take a wint_t argument and return a wint_t result.
+   This means that:
+   1. When the user passes an argument outside the range 0x0000..0xFFFF, the
+      function will look only at the lower 16 bits.  This is allowed according
+      to POSIX.
+   2. The return value is returned in the lower 16 bits of the result register.
+      The upper 16 bits are random: whatever happened to be in that part of the
+      result register.  We need to fix this by adding a zero-extend from
+      wchar_t to wint_t after the call.  */
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towlower (wint_t wc)
+{
+  return (wint_t) (wchar_t) towlower (wc);
+}
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define towlower rpl_towlower
+#  endif
+
+_GL_WCTYPE_INLINE wint_t
+rpl_towupper (wint_t wc)
+{
+  return (wint_t) (wchar_t) towupper (wc);
+}
+#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
+#   define towupper rpl_towupper
+#  endif
+
+# endif /* __MINGW32__ */
+
+# define GNULIB_defined_wctype_functions 1
+#endif
+
+#if @REPLACE_ISWCNTRL@
+_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
+_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (iswalnum);
+_GL_CXXALIASWARN (iswalpha);
+_GL_CXXALIASWARN (iswcntrl);
+_GL_CXXALIASWARN (iswdigit);
+_GL_CXXALIASWARN (iswgraph);
+_GL_CXXALIASWARN (iswlower);
+_GL_CXXALIASWARN (iswprint);
+_GL_CXXALIASWARN (iswpunct);
+_GL_CXXALIASWARN (iswspace);
+_GL_CXXALIASWARN (iswupper);
+_GL_CXXALIASWARN (iswxdigit);
+
+#if @GNULIB_ISWBLANK@
+# if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@
+_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
+# else
+_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
+# endif
+_GL_CXXALIASWARN (iswblank);
+#endif
+
+#if !@HAVE_WCTYPE_T@
+# if !GNULIB_defined_wctype_t
+typedef void * wctype_t;
+#  define GNULIB_defined_wctype_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character property.  */
+#if @GNULIB_WCTYPE@
+# if !@HAVE_WCTYPE_T@
+_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name));
+_GL_CXXALIASWARN (wctype);
+#elif defined GNULIB_POSIXCHECK
+# undef wctype
+# if HAVE_RAW_DECL_WCTYPE
+_GL_WARN_ON_USE (wctype, "wctype is unportable - "
+                 "use gnulib module wctype for portability");
+# endif
+#endif
+
+/* Test whether a wide character has a given property.
+   The argument WC must be either a wchar_t value or WEOF.
+   The argument DESC must have been returned by the wctype() function.  */
+#if @GNULIB_ISWCTYPE@
+# if !@HAVE_WCTYPE_T@
+_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+# endif
+_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc));
+_GL_CXXALIASWARN (iswctype);
+#elif defined GNULIB_POSIXCHECK
+# undef iswctype
+# if HAVE_RAW_DECL_ISWCTYPE
+_GL_WARN_ON_USE (iswctype, "iswctype is unportable - "
+                 "use gnulib module iswctype for portability");
+# endif
+#endif
+
+#if @REPLACE_TOWLOWER@ || defined __MINGW32__
+_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
+#else
+_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
+_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
+#endif
+_GL_CXXALIASWARN (towlower);
+_GL_CXXALIASWARN (towupper);
+
+#if !@HAVE_WCTRANS_T@
+# if !GNULIB_defined_wctrans_t
+typedef void * wctrans_t;
+#  define GNULIB_defined_wctrans_t 1
+# endif
+#endif
+
+/* Get a descriptor for a wide character case conversion.  */
+#if @GNULIB_WCTRANS@
+# if !@HAVE_WCTRANS_T@
+_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name));
+# endif
+_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name));
+_GL_CXXALIASWARN (wctrans);
+#elif defined GNULIB_POSIXCHECK
+# undef wctrans
+# if HAVE_RAW_DECL_WCTRANS
+_GL_WARN_ON_USE (wctrans, "wctrans is unportable - "
+                 "use gnulib module wctrans for portability");
+# endif
+#endif
+
+/* Perform a given case conversion on a wide character.
+   The argument WC must be either a wchar_t value or WEOF.
+   The argument DESC must have been returned by the wctrans() function.  */
+#if @GNULIB_TOWCTRANS@
+# if !@HAVE_WCTRANS_T@
+_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+# endif
+_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
+_GL_CXXALIASWARN (towctrans);
+#elif defined GNULIB_POSIXCHECK
+# undef towctrans
+# if HAVE_RAW_DECL_TOWCTRANS
+_GL_WARN_ON_USE (towctrans, "towctrans is unportable - "
+                 "use gnulib module towctrans for portability");
+# endif
+#endif
+
+_GL_INLINE_HEADER_END
+
+#endif /* _@GUARD_PREFIX@_WCTYPE_H */
+#endif /* _@GUARD_PREFIX@_WCTYPE_H */
+#endif
diff --git a/lib/wcwidth.c b/lib/wcwidth.c
new file mode 100644 (file)
index 0000000..d33b6a9
--- /dev/null
@@ -0,0 +1,73 @@
+/* Determine the number of screen columns needed for a character.
+   Copyright (C) 2006-2007, 2010-2018 Free Software Foundation, Inc.
+
+   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 3 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, see <https://www.gnu.org/licenses/>.  */
+
+#include <config.h>
+
+/* Specification.  */
+#include <wchar.h>
+
+/* Get iswprint.  */
+#include <wctype.h>
+
+#include "localcharset.h"
+#include "streq.h"
+#include "uniwidth.h"
+
+/* Returns 1 if the current locale is an UTF-8 locale, 0 otherwise.  */
+static inline int
+is_locale_utf8 (void)
+{
+  const char *encoding = locale_charset ();
+  return STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0);
+}
+
+#if GNULIB_WCHAR_SINGLE
+/* When we know that the locale does not change, provide a speedup by
+   caching the value of is_locale_utf8.  */
+static int cached_is_locale_utf8 = -1;
+static inline int
+is_locale_utf8_cached (void)
+{
+  if (cached_is_locale_utf8 < 0)
+    cached_is_locale_utf8 = is_locale_utf8 ();
+  return cached_is_locale_utf8;
+}
+#else
+/* By default, don't make assumptions, hence no caching.  */
+# define is_locale_utf8_cached is_locale_utf8
+#endif
+
+int
+wcwidth (wchar_t wc)
+#undef wcwidth
+{
+  /* In UTF-8 locales, use a Unicode aware width function.  */
+  if (is_locale_utf8_cached ())
+    {
+      /* We assume that in a UTF-8 locale, a wide character is the same as a
+         Unicode character.  */
+      return uc_width (wc, "UTF-8");
+    }
+  else
+    {
+      /* Otherwise, fall back to the system's wcwidth function.  */
+#if HAVE_WCWIDTH
+      return wcwidth (wc);
+#else
+      return wc == 0 ? 0 : iswprint (wc) ? 1 : -1;
+#endif
+    }
+}
diff --git a/lib/xsize.c b/lib/xsize.c
new file mode 100644 (file)
index 0000000..4b4914c
--- /dev/null
@@ -0,0 +1,3 @@
+#include <config.h>
+#define XSIZE_INLINE _GL_EXTERN_INLINE
+#include "xsize.h"
diff --git a/lib/xsize.h b/lib/xsize.h
new file mode 100644 (file)
index 0000000..8aeb3b7
--- /dev/null
@@ -0,0 +1,117 @@
+/* xsize.h -- Checked size_t computations.
+
+   Copyright (C) 2003, 2008-2018 Free Software Foundation, Inc.
+
+   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 3, 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, see <https://www.gnu.org/licenses/>.  */
+
+#ifndef _XSIZE_H
+#define _XSIZE_H
+
+/* Get size_t.  */
+#include <stddef.h>
+
+/* Get SIZE_MAX.  */
+#include <limits.h>
+#if HAVE_STDINT_H
+# include <stdint.h>
+#endif
+
+#ifndef _GL_INLINE_HEADER_BEGIN
+ #error "Please include config.h first."
+#endif
+_GL_INLINE_HEADER_BEGIN
+#ifndef XSIZE_INLINE
+# define XSIZE_INLINE _GL_INLINE
+#endif
+
+/* The size of memory objects is often computed through expressions of
+   type size_t. Example:
+      void* p = malloc (header_size + n * element_size).
+   These computations can lead to overflow.  When this happens, malloc()
+   returns a piece of memory that is way too small, and the program then
+   crashes while attempting to fill the memory.
+   To avoid this, the functions and macros in this file check for overflow.
+   The convention is that SIZE_MAX represents overflow.
+   malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc
+   implementation that uses mmap --, it's recommended to use size_overflow_p()
+   or size_in_bounds_p() before invoking malloc().
+   The example thus becomes:
+      size_t size = xsum (header_size, xtimes (n, element_size));
+      void *p = (size_in_bounds_p (size) ? malloc (size) : NULL);
+*/
+
+/* Convert an arbitrary value >= 0 to type size_t.  */
+#define xcast_size_t(N) \
+  ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX)
+
+/* Sum of two sizes, with overflow check.  */
+XSIZE_INLINE size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum (size_t size1, size_t size2)
+{
+  size_t sum = size1 + size2;
+  return (sum >= size1 ? sum : SIZE_MAX);
+}
+
+/* Sum of three sizes, with overflow check.  */
+XSIZE_INLINE size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum3 (size_t size1, size_t size2, size_t size3)
+{
+  return xsum (xsum (size1, size2), size3);
+}
+
+/* Sum of four sizes, with overflow check.  */
+XSIZE_INLINE size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xsum4 (size_t size1, size_t size2, size_t size3, size_t size4)
+{
+  return xsum (xsum (xsum (size1, size2), size3), size4);
+}
+
+/* Maximum of two sizes, with overflow check.  */
+XSIZE_INLINE size_t
+#if __GNUC__ >= 3
+__attribute__ ((__pure__))
+#endif
+xmax (size_t size1, size_t size2)
+{
+  /* No explicit check is needed here, because for any n:
+     max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX.  */
+  return (size1 >= size2 ? size1 : size2);
+}
+
+/* Multiplication of a count with an element size, with overflow check.
+   The count must be >= 0 and the element size must be > 0.
+   This is a macro, not a function, so that it works correctly even
+   when N is of a wider type and N > SIZE_MAX.  */
+#define xtimes(N, ELSIZE) \
+  ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX)
+
+/* Check for overflow.  */
+#define size_overflow_p(SIZE) \
+  ((SIZE) == SIZE_MAX)
+/* Check against overflow.  */
+#define size_in_bounds_p(SIZE) \
+  ((SIZE) != SIZE_MAX)
+
+_GL_INLINE_HEADER_END
+
+#endif /* _XSIZE_H */
index d7de8d67e0d2c0a70dcdb911f6ac7893d2c3bca4..4f0972271f41b41bae3150dd65be6940623b7211 100644 (file)
@@ -1,5 +1,5 @@
 # codeset.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2000-2002, 2006, 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2018 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 43c93124ed5874a66282ed01b365a4fcfb9c1632..b0605e49f90e17f63d034d5c045268618bb474c8 100644 (file)
@@ -1,5 +1,5 @@
 # fcntl-o.m4 serial 4
-dnl Copyright (C) 2006, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2006-2018 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index ab58b712137677e1f8aafd8ee561dad5ffac77aa..818b49f1c39e3f12584ca0c1ae211251cbefe50d 100644 (file)
@@ -1,6 +1,5 @@
 # glibc21.m4 serial 5
-dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2014 Free Software Foundation,
-dnl Inc.
+dnl Copyright (C) 2000-2018 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 28ff570b985b2b0da4114aae297b216a6ac0c584..5343f22f5064e35b74398764ac698aa65f1894c5 100644 (file)
@@ -1,5 +1,5 @@
 # Autoconf macros for groff.
-# Copyright (C) 1989-201 Free Software Foundation, Inc.
+# Copyright (C) 1989-2018 Free Software Foundation, Inc.
 #
 # This file is part of groff.
 #
@@ -14,7 +14,7 @@
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 AC_DEFUN([GROFF_PRINT],
   [if test -z "$PSPRINT"; then
@@ -49,11 +49,18 @@ AC_DEFUN([GROFF_PRINT],
    AC_SUBST([DVIPRINT])
    AC_MSG_RESULT([$DVIPRINT])])
 
-# Bison generated parsers have problems with C++ compilers other than g++.
-# So byacc is preferred over bison.
+
+# Bison generated parsers have problems with C++ compilers other than
+# g++.  So byacc is preferred over bison.  If no 'yacc' program is
+# available, we issue an error only if building from the source as in
+# distributed tarball files generated by 'yacc' are already present.
 
 AC_DEFUN([GROFF_PROG_YACC],
-  [AC_CHECK_PROGS([YACC], [byacc 'bison -y'], [yacc])])
+  [AC_CHECK_PROGS([YACC], [byacc 'bison -y' yacc], [missing])
+  if test "x$YACC" = "xmissing" -a -d ${srcdir}/.git; then
+    AC_MSG_ERROR([Could not find 'yacc' or 'bison'], 1)
+  fi
+  ])
 
 
 # We need Perl 5.6.1 or newer.
@@ -74,9 +81,9 @@ AC_DEFUN([GROFF_DOC_CHECK],
   [AC_ARG_WITH([doc],
     [AS_HELP_STRING([--with-doc[[=TYPE]]],
       [choose which manuals (beside man pages) are desirable. \
-       TYPE can be `yes' or `no', or a comma-separated list of \
-       one or multiple of `html', `info', `other', `pdf', and \
-       `examples', to restrict what is produced])],
+       TYPE can be 'yes' or 'no', or a comma-separated list of \
+       one or multiple of 'html', 'info', 'other', 'pdf', and \
+       'examples', to restrict what is produced])],
     [doc="$withval"],
     [doc=yes])
   test "x$doc" = xno && doc=''
@@ -106,7 +113,7 @@ AC_DEFUN([GROFF_DOC_CHECK],
       test "x$i" = xother    && { docadd_other=yes; continue; }
       test "x$i" = xpdf      && { docadd_pdf=yes; continue; }
       test "x$i" = xexamples && { docadd_examples=yes; continue; }
-      AC_MSG_WARN([Invalid `--with-doc' argument:] $i)
+      AC_MSG_WARN([Invalid '--with-doc' argument:] $i)
     done
   fi
   if test $docadd_html = yes; then
@@ -148,11 +155,15 @@ AC_DEFUN([GROFF_DOC_CHECK],
 # We need makeinfo 4.8 or newer.
 
 AC_DEFUN([GROFF_MAKEINFO],
-  [if test $docadd_info = yes; then
+  # By default automake will set MAKEINFO to MAKEINFO = ${SHELL} <top
+  # src dir>/build-aux/missing makeinfo.As we need a more precise
+  # check of makeinfo version, we don't use it.
+  [MAKEINFO=
+   if test $docadd_info = yes; then
      missing=
      AC_CHECK_PROG([MAKEINFO], [makeinfo], [makeinfo])
      if test -z "$MAKEINFO"; then
-       missing="\`makeinfo' is missing."
+       missing="'makeinfo' is missing."
      else
        AC_MSG_CHECKING([for makeinfo version])
        # We need an additional level of quoting to make sed's regexps work.
@@ -165,7 +176,7 @@ AC_DEFUN([GROFF_MAKEINFO],
        makeinfo_version_numeric=`
          expr ${makeinfo_version_major}000 \+ ${makeinfo_version_minor}`
        if test $makeinfo_version_numeric -lt 4008; then
-         missing="\`makeinfo' is too old."
+         missing="'makeinfo' is too old."
        fi
      fi
 
@@ -173,13 +184,13 @@ AC_DEFUN([GROFF_MAKEINFO],
        infofile=doc/groff.info
        test -f ${infofile} || infofile=${srcdir}/${infofile}
        if test ! -f ${infofile} \
-       || test ${srcdir}/doc/groff.texinfo -nt ${infofile}; then
+       || test ${srcdir}/doc/groff.texi -nt ${infofile}; then
         AC_MSG_ERROR($missing
-[Get the `texinfo' package version 4.8 or newer.])
+[Get the 'texinfo' package version 4.8 or newer.])
        else
         AC_MSG_WARN($missing
-[Get the `texinfo' package version 4.8 or newer if you want to convert
-`groff.texinfo' into a PDF or HTML document.])
+[Get the 'texinfo' package version 4.8 or newer if you want to convert
+'groff.texi' into a PDF or HTML document.])
        fi
      fi
 
@@ -195,8 +206,17 @@ AC_DEFUN([GROFF_MAKEINFO],
    AC_SUBST([MAKEINFO])
    AC_SUBST([make_infodoc])
    AC_SUBST([make_install_infodoc])
-   AC_SUBST([make_uninstall_infodoc])])
+   AC_SUBST([make_uninstall_infodoc])
+   AC_SUBST([makeinfo_version_numeric])])
 
+AC_DEFUN([GROFF_TEXI2DVI],
+  [AC_CHECK_PROG([PROG_TEXI2DVI], [texi2dvi], [found], [missing])
+   if test "x$PROG_TEXI2DVI" = "xfound"; then
+      groff_have_texi2dvi=yes;
+   else
+      groff_have_texi2dvi=no;
+   fi
+   ])
 
 # The following programs are needed for grohtml.
 
@@ -214,10 +234,10 @@ AC_DEFUN([GROFF_HTML_PROGRAMS],
      [pnmcut pnmcrop pnmtopng psselect pnmtops],
      [AC_CHECK_PROG(groff_prog, groff_prog, [found], [missing])
       if test $[]groff_prog = missing; then
-       missing="$missing \`groff_prog'"
+       missing="$missing 'groff_prog'"
       fi;])
 
-   test "$GHOSTSCRIPT" = "missing" && missing="$missing \`gs'"
+   test "$GHOSTSCRIPT" = "missing" && missing="$missing 'gs'"
 
    if test -z "$missing"; then
      if test $docadd_html = yes; then
@@ -280,8 +300,8 @@ AC_DEFUN([GROFF_PDFDOC_PROGRAMS],
    AC_REQUIRE([GROFF_GHOSTSCRIPT_PATH])
 
    missing=""
-   test "$AWK" = missing && missing="\`awk'"
-   test "$GHOSTSCRIPT" = missing && missing="$missing \`gs'"
+   test "$AWK" = missing && missing="'awk'"
+   test "$GHOSTSCRIPT" = missing && missing="$missing 'gs'"
    if test -z "$missing"; then
      if test $docadd_pdf = yes; then
        make_pdfdoc=pdfdoc
@@ -318,6 +338,69 @@ AC_DEFUN([GROFF_PDFDOC_PROGRAMS],
    AC_SUBST([make_install_pdfexamples])
    AC_SUBST([make_uninstall_pdfexamples])])
 
+# Option to configure path to URW fonts
+AC_DEFUN([GROFF_URW_FONTS_PATH],
+   [AC_ARG_WITH([urw-fonts-dir],
+     [AS_HELP_STRING([--with-urw-fonts-dir=DIR],
+       [Search for URW fonts in this directory])],
+     [urwfontsdir="$withval"])
+   AC_SUBST(urwfontsdir)])
+
+# Check if URW fonts are available, either in the paths given by `gs
+# -h', in /usr/share/fonts/type1/gsfonts/ ,
+# /opt/local/share/fonts/urw-fonts (where font/devpdf/Foundry.in
+# expect them), or in the custom path passed to configure.
+AC_DEFUN([GROFF_URW_FONTS],
+  [AC_MSG_CHECKING([whether URW fonts in pfb format are available])
+   AC_REQUIRE([GROFF_AWK_PATH])
+   AC_REQUIRE([GROFF_GHOSTSCRIPT_PATH])
+   groff_have_urw_fonts=no
+   if test "$AWK" = "missing" -o "$GHOSTSCRIPT" = "missing"; then
+     AC_MSG_WARN([awk and gs are required, can't look for URW fonts])
+   else
+     _list_paths=`$GHOSTSCRIPT -h | $AWK 'BEGIN { found = 0 } /Search path:/ { found = 1 } /^[ ]*\// { print $'0' }'| tr : ' '`
+     _list_paths="$_list_paths /usr/share/fonts/type1/gsfonts/ \
+               /opt/local/share/fonts/urw-fonts/"
+     if test -n "$urwfontsdir"; then
+       _list_paths="$ _list_paths $urwfontsdir"
+     fi
+     for k in $_list_paths; do
+       if test -f $k/a010013l.pfb; then
+         AC_MSG_RESULT([found in $k])
+         groff_have_urw_fonts=yes
+         break
+       fi
+     done
+   fi
+   if test $groff_have_urw_fonts = no; then
+     AC_MSG_RESULT([no])
+   fi
+   AC_SUBST([groff_have_urw_fonts])
+   ])
+
+# Warning if URW fonts were not found
+AC_DEFUN([GROFF_URW_FONTS_CHECK],
+  [if test "$groff_have_urw_fonts" = no; then
+  AC_MSG_NOTICE([
+  No URW fonts in .pfb format were found on your system, URW fonts
+  generation for 'devpdf' will not work properly.  These fonts can be
+  downloaded here:
+
+    http://downloads.ghostscript.com/public/fonts/urw-base35-v1.10.zip
+
+  By default groff will search these fonts in the paths given by `gs
+  -h' and in these 2 default directories:
+  '/usr/share/fonts/type1/gsfonts/' and
+  '/opt/local/share/fonts/urw-fonts/' (paths used by
+  font/devpdf/Foundry.in).  You can also pass the option
+  '--with-urw-fonts-dir=DIR' to 'configure' to set a custom path.  You
+  would need to re-run the 'configure' script after installing these
+  fonts.
+  
+  ])
+  fi
+  ])
+
 
 # Check whether pnmtops can handle the -nosetpage option.
 
@@ -333,7 +416,7 @@ AC_DEFUN([GROFF_PNMTOPS_NOSETPAGE],
    AC_SUBST([pnmtops_nosetpage])])
 
 
-# Check location of `gs'; allow `--with-gs=PROG' option to override.
+# Check location of 'gs'; allow '--with-gs=PROG' option to override.
 
 AC_DEFUN([GROFF_GHOSTSCRIPT_PATH],
   [AC_REQUIRE([GROFF_GHOSTSCRIPT_PREFS])
@@ -344,7 +427,7 @@ AC_DEFUN([GROFF_GHOSTSCRIPT_PATH],
      [AC_CHECK_TOOLS(GHOSTSCRIPT, [$ALT_GHOSTSCRIPT_PROGS], [missing])])
    test "$GHOSTSCRIPT" = "no" && GHOSTSCRIPT=missing])
 
-# Preferences for choice of `gs' program...
+# Preferences for choice of 'gs' program...
 # (allow --with-alt-gs="LIST" to override).
 
 AC_DEFUN([GROFF_GHOSTSCRIPT_PREFS],
@@ -356,7 +439,7 @@ AC_DEFUN([GROFF_GHOSTSCRIPT_PREFS],
    AC_SUBST([ALT_GHOSTSCRIPT_PROGS])])
 
 
-# Check location of `awk'; allow `--with-awk=PROG' option to override.
+# Check location of 'awk'; allow '--with-awk=PROG' option to override.
 
 AC_DEFUN([GROFF_AWK_PATH],
   [AC_REQUIRE([GROFF_AWK_PREFS])
@@ -368,7 +451,7 @@ AC_DEFUN([GROFF_AWK_PATH],
    test "$AWK" = "no" && AWK=missing])
 
 
-# Preferences for choice of `awk' program; allow --with-alt-awk="LIST"
+# Preferences for choice of 'awk' program; allow --with-alt-awk="LIST"
 # to override.
 
 AC_DEFUN([GROFF_AWK_PREFS],
@@ -487,12 +570,12 @@ int i;
      AC_MSG_RESULT([void])
      AC_DEFINE([RETSIGTYPE], [void],
        [Define as the return type of signal handlers
-       (`int' or `void').])
+       ('int' or 'void').])
    else
      AC_MSG_RESULT([int])
      AC_DEFINE([RETSIGTYPE], [int],
        [Define as the return type of signal handlers
-       (`int' or `void').])
+       ('int' or 'void').])
    fi])
 
 
@@ -643,7 +726,7 @@ delete [] p;
      [AC_MSG_RESULT([yes])],
      [AC_MSG_RESULT([no])
       AC_DEFINE([ARRAY_DELETE_NEEDS_SIZE], [1],
-       [Define if your C++ doesn't understand `delete []'.])])
+       [Define if your C++ doesn't understand 'delete []'.])])
    AC_LANG_POP([C++])])
 
 AC_DEFUN([GROFF_TRADITIONAL_CPP],
@@ -711,15 +794,18 @@ AC_DEFUN([GROFF_PAGE],
   [AC_MSG_CHECKING([default paper size])
    groff_prefix=$prefix
    test "x$prefix" = "xNONE" && groff_prefix=$ac_default_prefix
+   if test -z "$PAGE" && test -r /etc/papersize; then
+     PAGE=`cat /etc/papersize | sed -e 's/^[ ]*#.*//g' | tr -d "\n" | awk '{ print $1 }'`
+   fi
    if test -z "$PAGE"; then
      descfile=
-     if test -r $groff_prefix/share/groff/font/devps/DESC; then
+     if test -r "$groff_prefix"/share/groff/font/devps/DESC; then
        descfile=$groff_prefix/share/groff/font/devps/DESC
-     elif test -r $groff_prefix/lib/groff/font/devps/DESC; then
+     elif test -r "$groff_prefix"/lib/groff/font/devps/DESC; then
        descfile=$groff_prefix/lib/groff/font/devps/DESC
      else
-       for f in $groff_prefix/share/groff/*/font/devps/DESC; do
-        if test -r $f; then
+       for f in "$groff_prefix"/share/groff/*/font/devps/DESC; do
+        if test -r "$f"; then
           descfile=$f
           break
         fi
@@ -727,9 +813,9 @@ AC_DEFUN([GROFF_PAGE],
      fi
 
      if test -n "$descfile"; then
-       if grep ['^paperlength[  ]\+841890'] $descfile >/dev/null 2>&1; then
+       if grep ['^paperlength[  ]\+841890'] "$descfile" >/dev/null 2>&1; then
         PAGE=A4
-       elif grep ['^papersize[  ]\+[aA]4'] $descfile >/dev/null 2>&1; then
+       elif grep ['^papersize[  ]\+[aA]4'] "$descfile" >/dev/null 2>&1; then
         PAGE=A4
        fi
      fi
@@ -745,7 +831,7 @@ AC_DEFUN([GROFF_PAGE],
         dom=`(hostname) 2>/dev/null | grep '\.'`
        fi
      fi
-     # If the top-level domain is two letters and it's not `us' or `ca'
+     # If the top-level domain is two letters and it's not 'us' or 'ca'
      # then they probably use A4 paper.
      case "$dom" in
      [*.[Uu][Ss]|*.[Cc][Aa])]
@@ -902,6 +988,8 @@ AC_DEFUN([GROFF_TMAC],
    AC_SUBST([tmac_wrap])])
 
 
+# Searching if a non-GNU Troff is installed.  The built-in register
+# \n[.g] is always 1 in GNU Troff.
 AC_DEFUN([GROFF_G],
   [AC_MSG_CHECKING([for existing troff installation])
    if test "x`(echo .tm '|n(.g' | tr '|' '\\\\' | troff -z -i 2>&1) 2>/dev/null`" = x0; then
@@ -913,6 +1001,160 @@ AC_DEFUN([GROFF_G],
    fi
    AC_SUBST([g])])
 
+# Controllable groff compatibility wrappers for vendor-provided macro sets
+#
+#   Background
+#
+#     groff's configure script checks for a non-GNU system troff implementation
+#     in GROFF_G above, and uses this to rename programs that would conflict
+#     with the system *roff implementation. On such systems, groff's version of
+#     troff is installed as gtroff, groff's version of nroff is installed as
+#     gnroff, and so forth. See the ENVIRONMENT section of groff(1)'s manual
+#     page for the entry on GROFF_COMMAND_PREFIX, and the SEE ALSO section for
+#     details. The implementation of this can be found in "We use Automake's
+#     Uniform Naming Scheme" in Makefile.am, and its use of NAMEPREFIX.
+#
+#     groff's configure script also checks for vendor-provided macro sets in
+#     GROFF_TMAC above, which sets 'sys_tmac_prefix' to the location of any
+#     vendor-provided macro sets. The script then determines if any of these
+#     vendor-provided macro sets are non-GNU implementations. A space-separated
+#     list of macro sets requiring compatibility wrappers is stored in
+#     'tmac_wrap'.
+#
+#     If 'tmac_wrap' is a non-empty list, the make infrastructure will build
+#     groff compatibility wrappers in the 'tmac' directory for each mentioned
+#     macro set. These wrappers enable compatibility mode (.cp 1) and include
+#     (.so <filepath>) the vendor implementation of that macro set. The 'an'
+#     wrapper gets special treatment, by including the 'andoc.tmac' macro set,
+#     before loading the vendor implementation.
+#
+#     In groff version 1.22.3 and prior, if 'tmac_wrap' is a non-empty list at
+#     installation time (make install), the groff compatibility wrappers are
+#     installed in '<prefix>/lib/groff/site-tmac' directory (technically
+#     'systemtmacdir' in Makefile.am) as the base macro set name (example:
+#     an.tmac), and the groff implementation of these macro sets are installed
+#     with a 'g' prefix in the '<prefix>/share/groff/<version>/tmac' directory
+#     (example: gan.tmac).
+#
+#     If your system has these compatibility wrappers installed, then the
+#     command 'groff -man ...' (as an example) uses your vendor's 'an' macro
+#     set in compatibility mode, while the command 'groff -mgan ...' uses the
+#     groff implementation of the 'an' macro set.
+#
+#     With groff being the principal (but not the only) full-featured *roff
+#     implementation in use today, and most FLOSS Unix-like Operating Systems
+#     using groff as their *roff implementation, the automatic implementation
+#     of compatibility wrappers on systems having their own macro sets needs to
+#     be revisited. Most FLOSS software is now developed on systems having no
+#     other *roff implementation, so manual pages (for example) are developed
+#     and proofread on systems using groff's implementation of the 'an' macro
+#     set.
+#
+#     On systems with their own macro sets (especially 'an'), documents can be
+#     rendered incorrectly from the document author's point of view, when
+#     these compatibility mode wrappers are used. groff's own manual pages are
+#     the perfect case in point, with most not showing the principal usage line
+#     of a command, due to the use of .SY/.OP/.YS macros to display such lines.
+#
+#   Updating groff's use of compatibility mode wrappers
+#
+#     Given the above, on systems with their own (non-GNU) macro sets, groff's
+#     AUTOMATIC installation of these generated vendor compatibility wrappers
+#     as the principal implementation of a macro set for groff(1) users may not
+#     be desirable, especially if the users are principally using groff(1) to
+#     format FLOSS manual pages.
+#
+#     The '--with-compatibility-wrappers=<value>' option to 'configure' gives
+#     these systems control over the default macro set implementation in use
+#     when using the groff family of tools.
+#
+#     The supported values of the '--with-compatibility-wrappers=<value>'
+#     option are:
+#       'check'  [default] Check if system has vendor-provided non-GNU
+#                implementation of any *roff macro set. Based on that use the
+#                'yes' or 'no' value for '--with-compatibility-wrappers'. This
+#                effectively emulates prior groff releases' implementation.
+#       'yes'    Install the vendor compatibility wrappers as groff's default
+#                implementation of these macro sets. This is compatible with
+#                groff implementations up to and including version 1.22.3.
+#                Direct use of the 'yes' option is discouraged, as it will
+#                abort the configure process if no vendor-provided non-GNU
+#                macro set implementations exists.
+#       'no'     Do not install any vendor compatibility wrappers. Use the
+#                groff implementation of all macro sets as the default.
+#       'manual' Install the vendor compatibility wrappers as '<macro>-os.tmac'
+#                in the same directory as 'yes' option ('systemtmacdir').
+#                groff users can access the vendor-provided macro set via the
+#                '-m<macro>-os' option on the command line of a tool from the
+#                groff family. The naming of the option value reflects that now
+#                a manual step must be taken to use the vendor-provided
+#                implementation of the macro set. This option can safely be
+#                used on systems without vendor-provided non-GNU macro set
+#                implementations to allow for cross-platform build
+#                instructions.
+#
+
+AC_DEFUN([GROFF_WITH_COMPATIBILITY_WRAPPERS],
+  [AC_ARG_WITH([compatibility-wrappers],
+    [AS_HELP_STRING([--with-compatibility-wrappers[[=VALUE]]],
+      [choose whether and how groff compatibility wrappers for \
+       vendor-provided non-GNU macro sets are installed. VALUE can be \
+       'check', 'yes', 'no' or 'manual'. \
+       'check' (the default) checks for the existence of vendor-provided \
+       non-GNU macro sets, and implements the 'yes' or 'no' option \
+       accordingly. \
+       'yes' generates compatibility wrappers for vendor-provided non-GNU \
+       macro sets to allow their use with groff-based tools. The \
+       compatibility wrappers are installed with the original macro set name, \
+       while groff implementation of these macro sets are installed with a \
+       'g' prefix. Thus use of the groff implementation of these macro sets \
+       requires use of the '-mg<macro>' option (example: -mgan). \
+       'no' only installs the groff implementation of macro sets. \
+       'manual' generates compatibility wrappers for vendor-provided non-GNU \
+       macro sets as '<macro>-os'. Use of these groff compatibility wrappers \
+       (for vendor-provided non-GNU macro sets) requires the use of the \
+       '-m<macro>-os' option (example: -man-os).])],
+    [compatibility_wrappers="$withval"],
+    [compatibility_wrappers="check"])
+
+    if test "x$compatibility_wrappers" != "xcheck"  -a \
+            "x$compatibility_wrappers" != "xyes"    -a \
+            "x$compatibility_wrappers" != "xno"     -a \
+            "x$compatibility_wrappers" != "xmanual"
+    then
+         AC_MSG_WARN([Invalid '--with-compatibility-wrappers' argument: '$compatibility_wrappers' - assuming 'check' requested.])
+         compatibility_wrappers="check"
+    fi
+
+    if test "x$tmac_wrap" = "x"
+    then
+        # No Operating System Macro Sets Present
+        if   test "x$compatibility_wrappers" = "xcheck"
+        then
+            compatibility_wrappers="no"
+        elif test "x$compatibility_wrappers" = "xyes"
+        then
+            AC_MSG_ERROR([No non-GNU macro sets found - cannot create and install compatibility wrappers])
+        elif test "x$compatibility_wrappers" = "xno"
+        then
+            : # No action required
+        elif test "x$compatibility_wrappers" = "xmanual"
+        then
+            # 'manual' allows quiet conversion to 'no' to support
+            # cross-platform build instructions
+            compatibility_wrappers="no"
+        fi
+    else
+        # One or more Operating System Macro Sets Present
+        if   test "x$compatibility_wrappers" = "xcheck"
+        then
+            compatibility_wrappers="yes"
+        fi
+    fi
+
+    # Now compatibility_wrappers can only be yes, no or manual
+    AC_SUBST([compatibility_wrappers])
+  ])
 
 # We need the path to install-sh to be absolute.
 
@@ -930,7 +1172,7 @@ AC_DEFUN([GROFF_INSTALL_INFO],
    fi])
 
 
-# At least one UNIX system, Apple Macintosh Rhapsody 5.5,
+# At least one Unix system, Apple Macintosh Rhapsody 5.5,
 # does not have -lm ...
 
 AC_DEFUN([GROFF_LIBM],
@@ -991,25 +1233,19 @@ AC_DEFUN([GROFF_OS390],
    fi])
 
 
-# Check whether Windows scripts like `afmtodit.cmd' should be installed.
+# Check whether Windows scripts like 'afmtodit.cmd' should be installed.
 
 AC_DEFUN([GROFF_CMD_FILES],
   [AC_MSG_CHECKING([whether to install .cmd wrapper scripts for Windows])
    case "$host_os" in
    *mingw*)
      make_winscripts=winscripts
-     make_install_winscripts=install_winscripts
-     make_uninstall_winscripts=uninstall_winscripts
      AC_MSG_RESULT([yes]) ;;
    *)
      make_winscripts=
-     make_install_winscripts=
-     make_uninstall_winscripts=
      AC_MSG_RESULT([no]) ;;
    esac
-   AC_SUBST([make_winscripts])
-   AC_SUBST([make_install_winscripts])
-   AC_SUBST([make_uninstall_winscripts])])
+   AC_SUBST([make_winscripts])])
 
 
 # Check whether we need a declaration for a function.
@@ -1116,7 +1352,7 @@ uintmax_t i = (uintmax_t)-1;
    AC_LANG_POP([C++])])
 
 
-# Test for working `unsigned long long'.  Taken from the fileutils package.
+# Test for working 'unsigned long long'.  Taken from the fileutils package.
 
 AC_DEFUN([GROFF_UNSIGNED_LONG_LONG],
   [AC_LANG_PUSH([C++])
@@ -1141,7 +1377,7 @@ return ull << i | ull >> i | ullmax / ull | ullmax % ull;
    AC_LANG_POP([C++])])
 
 
-# Define uintmax_t to `unsigned long' or `unsigned long long'
+# Define uintmax_t to 'unsigned long' or 'unsigned long long'
 # if <inttypes.h> does not exist.  Taken from the fileutils package.
 
 AC_DEFUN([GROFF_UINTMAX_T],
@@ -1152,7 +1388,7 @@ AC_DEFUN([GROFF_UINTMAX_T],
          && ac_type='unsigned long long' \
          || ac_type='unsigned long'
      AC_DEFINE_UNQUOTED([uintmax_t], [$ac_type],
-       [Define uintmax_t to `unsigned long' or `unsigned long long' if
+       [Define uintmax_t to 'unsigned long' or 'unsigned long long' if
        <inttypes.h> does not exist.])
    fi])
 
@@ -1162,7 +1398,7 @@ AC_DEFUN([GROFF_UINTMAX_T],
 # MS-DOS/Win32=';').
 #
 # The logic to resolve this test is already encapsulated in
-# `${srcdir}/src/include/nonposix.h'.
+# '${srcdir}/src/include/nonposix.h'.
 
 AC_DEFUN([GROFF_TARGET_PATH_SEPARATOR],
   [AC_MSG_CHECKING([separator character to use in groff search paths])
@@ -1249,7 +1485,7 @@ AC_DEFUN([GROFF_X11],
    AC_SUBST([XLIBDIRS])])
 
 
-# Set up the `--with-appresdir' command line option.
+# Set up the '--with-appresdir' command-line option.
 
 # Don't quote AS_HELP_STRING!
 AC_DEFUN([GROFF_APPRESDIR_OPTION],
@@ -1260,13 +1496,13 @@ AC_DEFUN([GROFF_APPRESDIR_OPTION],
 
 # Get a default value for the application resource directory.
 #
-# We ignore the `XAPPLRES' and `XUSERFILESEARCHPATH' environment variables.
+# We ignore the 'XAPPLRES' and 'XUSERFILESEARCHPATH' environment variables.
 #
 # By default if --with-appresdir is not used, we will install the
 # gxditview resources in $prefix/lib/X11/app-defaults.
 #
-# Note that if --with-appresdir was passed to `configure', no prefix is
-# added to `appresdir'.
+# Note that if --with-appresdir was passed to 'configure', no prefix is
+# added to 'appresdir'.
 
 AC_DEFUN([GROFF_APPRESDIR_DEFAULT],
   [if test -z "$groff_no_x"; then
@@ -1293,13 +1529,13 @@ AC_DEFUN([GROFF_APPRESDIR_CHECK],
 
     $appresdir
 
-  (existing files will be saved by appending `.old' to the file
+  (existing files will be saved by appending '.old' to the file
   name).
 
   To install them into a different directory, say,
-  `/etc/X11/app-defaults', add
-  `--with-appresdir=/etc/X11/app-defaults' to the configure script
-  command line options and rerun it (`prefix' value has no effect on
+  '/etc/X11/app-defaults', add
+  '--with-appresdir=/etc/X11/app-defaults' to the configure script
+  command-line options and rerun it ('prefix' value has no effect on
   a --with-appresdir option).
 
   If the gxditview resources are installed in a directory that is not
@@ -1308,13 +1544,13 @@ AC_DEFUN([GROFF_APPRESDIR_CHECK],
   /usr/share/X11/app-defaults and /etc/X11/app-defaults), you will
   have to set the environment variable XFILESEARCHPATH to this
   path.  More details can be found in the X(7) manual page, or in "X
-  Toolkit Intrinsics - C Language Interface manual"
+  Toolkit Intrinsics - C Language Interface manual".
        ])
      fi
    fi])
 
 
-# Set up the `--with-grofferdir' command line option.
+# Set up the '--with-grofferdir' command-line option.
 
 AC_DEFUN([GROFF_GROFFERDIR_OPTION],
   [AC_ARG_WITH([grofferdir],
@@ -1353,3 +1589,107 @@ AC_DEFUN([GROFF_GROGDIR_DEFAULT],
 AC_DEFUN([GROFF_REFERDIR_DEFAULT],
   referdir=$libprogramdir/refer
   AC_SUBST([referdir]))
+
+# Check for xpmtoppm, for gnu.eps generation
+AC_DEFUN([GROFF_PROG_XPMTOPPM],
+  [AC_CHECK_PROG([XPMTOPPM], [xpmtoppm], [found], [missing])])
+
+# Check for make built-in variable RM
+AC_DEFUN([GROFF_MAKE_RM],
+  [AC_MSG_CHECKING(whether make has builtin variable RM)
+cat <<EOF > test_make_rm.mk
+all:
+       @if test -n "\$(RM)"; then \
+          echo "yes"; \
+       else \
+          echo "no"; \
+       fi
+EOF
+  groff_is_rm_defined=`make -sf test_make_rm.mk`
+  AC_MSG_RESULT([$groff_is_rm_defined])
+  rm -f test_make_rm.mk])
+
+# Check if diff has option -D, for gdiffmk. If not, check if gdiff is
+# available on the system and make the same test. If either diff or
+# gdiff is working, it is set to DIFF_PROG.  If -D option is not
+# available, DIFF_PROG is left to diff (gdiffmk will report a
+# problem).
+AC_DEFUN([GROFF_DIFF_D],
+  [AC_MSG_CHECKING(for a diff program that supports option -D)
+  groff_has_diff_d_option=no
+  DIFF_PROG=diff
+  diff -Dx /dev/null /dev/null >/dev/null 2>&1 && groff_has_diff_d_option=yes
+  if test "$groff_has_diff_d_option" = no; then
+    AC_CHECK_PROGS([GDIFF], [gdiff])
+    if test -n "$GDIFF"; then
+      "$GDIFF" -Dx /dev/null /dev/null >/dev/null 2>&1 && groff_has_diff_d_option=yes
+      if test "$groff_has_diff_d_option" = yes; then
+        DIFF_PROG="$GDIFF"
+      fi
+    fi
+  fi
+  AC_MSG_RESULT([$groff_has_diff_d_option])
+  AC_SUBST([DIFF_PROG])])
+
+# Check if 'test' supports the option -ef.
+AC_DEFUN([GROFF_HAVE_TEST_EF_OPTION],
+  [AC_MSG_CHECKING(whether test supports option -ef)
+  HAVE_TEST_EF_OPTION=no
+  test /dev/null -ef /dev/null > /dev/null 2>&1 && HAVE_TEST_EF_OPTION=yes
+  AC_MSG_RESULT([$HAVE_TEST_EF_OPTION])
+  AC_SUBST([HAVE_TEST_EF_OPTION])])
+
+# gdiffmk will attempt to use bash (for option -ef of 'test'). If bash
+# is not available it will use /bin/sh.
+AC_DEFUN([GROFF_BASH],
+  [AC_PATH_PROGS([BASH_PROG], [bash], [no])
+  if test x$BASH_PROG = xno; then
+     BASH_PROG=/bin/sh
+  fi
+  AC_SUBST([BASH_PROG])])
+
+# Looking for uchardet library, used by preconv.
+AC_DEFUN([GROFF_UCHARDET],
+  [AC_ARG_WITH([uchardet],
+               AS_HELP_STRING([--with-uchardet],
+                              [Build 'preconv' with uchardet library for file \
+                               encoding automatic detection [=auto|no|yes]]))
+   AS_IF([test "x$with_uchardet" != "xno"],
+         [PKG_CHECK_MODULES([UCHARDET],
+                            [uchardet >= 0.0.1],
+                            [AC_DEFINE([HAVE_UCHARDET],
+                                       [1],
+                                       [uchardet library availability])
+                             groff_have_uchardet=yes],
+                            [if test "x$with_uchardet" = "xyes"; then
+                               AC_MSG_FAILURE([Could not found uchardet library])
+                             else
+                               AC_MSG_WARN([uchardet library not found, preconv \
+might not work properly])
+                             fi
+                             groff_have_uchardet=no])],
+          [groff_have_uchardet=no]
+          )])
+
+# Warning if uchardet library was not found
+AC_DEFUN([GROFF_UCHARDET_CHECK],
+  [if test "x$groff_have_uchardet" = "xno" -a "x$with_uchardet" != "xno"; then
+  AC_MSG_WARN([
+  uchardet library was not found; preprocessor 'preconv', which uses it to detect
+  the input file encoding, might not work properly (to check how and in which
+  order 'preconv' tries to determine the file encoding, see its man page).
+  ])
+  fi
+  ])
+
+# pdftools needed for sanity checks
+AC_DEFUN([GROFF_PDFTOOLS],
+  [AC_CHECK_PROG([PDFINFO], [pdfinfo], [found], [missing])
+   AC_CHECK_PROG([PDFFONTS], [pdffonts], [found], [missing])
+   AC_CHECK_PROG([PDFIMAGES], [pdfimages], [found], [missing])
+   if test "x$PDFINFO" = "xfound" -a "x$PDFFONTS" = "xfound" -a "x$PDFIMAGES" = "xfound"; then
+      groff_have_pdftools=yes;
+   else
+      groff_have_pdftools=no;
+   fi
+   ])
index 4e37363156620d7b2dd33996846464ae3a3c4b2c..ec7cd0a0a8cac9037a57179cd5ee698f7fac7bbb 100644 (file)
@@ -1,5 +1,5 @@
 # iconv.m4 serial 19 (gettext-0.18.2)
-dnl Copyright (C) 2000-2002, 2007-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2000-2018 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
@@ -214,7 +214,7 @@ AC_DEFUN([AM_ICONV_LINK],
 
 dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to
 dnl avoid warnings like
-dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required".
+dnl "warning: AC_REQUIRE: 'AM_ICONV' was expanded before it was required".
 dnl This is tricky because of the way 'aclocal' is implemented:
 dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN.
 dnl   Otherwise aclocal's initial scan pass would miss the macro definition.
index ddc569f73646f480b6bf5f8afa9ba3cf67d21dc4..d3eb0fc62297ae6594d91ac08b0f156b1f347192 100644 (file)
@@ -1,5 +1,5 @@
 # lib-ld.m4 serial 6
-dnl Copyright (C) 1996-2003, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 1996-2018 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 3522d994d271334afbb80d173c3e998a8697f967..4a4a185e3cf14326a0440e781b9a1aba5a0be599 100644 (file)
@@ -1,5 +1,5 @@
 # lib-link.m4 serial 26 (gettext-0.18.2)
-dnl Copyright (C) 2001-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2018 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index 31f49e40aa4bb3ca7f28e14e819395b58438b923..ff90f8fda1034fef832484eff0483edadc15b6f7 100644 (file)
@@ -1,5 +1,5 @@
 # lib-prefix.m4 serial 7 (gettext-0.18)
-dnl Copyright (C) 2001-2005, 2008-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2001-2018 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
index ada2f01f6f75fa767b8fd09db47d2d6e731f7639..be1b281557f1e2138a345b66748c0988ab14b25f 100644 (file)
@@ -1,5 +1,5 @@
 # localcharset.m4 serial 7
-dnl Copyright (C) 2002, 2004, 2006, 2009-2014 Free Software Foundation, Inc.
+dnl Copyright (C) 2002-2018 Free Software Foundation, Inc.
 dnl This file is free software; the Free Software Foundation
 dnl gives unlimited permission to copy and/or distribute it,
 dnl with or without modifications, as long as this notice is preserved.
diff --git a/makevarescape.sed b/makevarescape.sed
new file mode 100644 (file)
index 0000000..8ece3e8
--- /dev/null
@@ -0,0 +1,9 @@
+s/\\/\\\\e/g
+s/ /\\\\ /g
+s/"/\\\\(dq/g
+s/'/\\\\(aq/g
+s/-/\\\\&/g
+s/\^/\\\\(ha/g
+s/`/\\\\(ga/g
+s/~/\\\\(ti/g
+s|[^ ]/\+|&\\\\:|g
diff --git a/man/Makefile.sub b/man/Makefile.sub
deleted file mode 100644 (file)
index fb151b5..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Makefile.sub for `man'
-#
-# File position: <groff-source>/man/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-MAN5=\
-  groff_font.n \
-  groff_out.n \
-  groff_tmac.n
-MAN7=\
-  ditroff.n \
-  groff_char.n \
-  groff_diff.n \
-  groff.n \
-  roff.n
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/man/ditroff.7.man b/man/ditroff.7.man
new file mode 100644 (file)
index 0000000..a55f9f5
--- /dev/null
@@ -0,0 +1,173 @@
+.TH DITROFF @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+ditroff \- classical device-independent roff
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2001-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this
+.\" document under the terms of the GNU Free Documentation License,
+.\" Version 1.3 or any later version published by the Free Software
+.\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
+.\" and with no Back-Cover Texts.
+.\"
+.\" A copy of the Free Documentation License is included as a file
+.\" called FDL in the main directory of the groff source package.
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+The name
+.I ditroff
+refers to a historical development stage of the
+.IR roff (@MAN7EXT@)
+text processing system.
+.
+In
+.I roff
+systems extant today, the name
+.I troff
+is a synonym for
+.IR ditroff .
+.
+.
+.P
+Early versions of
+.I roff
+by Joe Ossanna generated two programs from the same sources,
+using conditional compilation to distinguish them.
+.
+.I nroff
+produced text-oriented TTY output, while
+.I troff
+generated graphical output for exactly one output device, the
+Wang Graphic Systems CAT phototypesetter.
+.
+.
+.P
+In 1979, Brian Kernighan rewrote
+.I troff
+to support more devices by creating an intermediate output format for
+.I troff
+that could be fed into postprocessor programs which actually do the
+printout on the device.
+.
+Kernighan's version marks what is known as \(lqclassical troff\(rq
+today.
+.
+In order to distinguish it from Ossanna's original version, it was
+called
+.I ditroff
+.RI ( d "evice " i "ndependent " t roff)
+on some systems, though this naming isn't mentioned in the classical
+documentation.
+.
+.
+.P
+Today, all existing
+.I roff
+systems are based on Kernighan's multi-device
+.IR troff .
+.
+The distinction between
+.I troff
+and
+.I ditroff
+is no longer necessary; each modern
+.I troff
+provides the complete functionality of
+.IR ditroff .
+.
+.
+.P
+The easiest way to use
+.I ditroff
+is via the GNU
+.I roff
+system,
+.IR groff .
+.
+The
+.IR groff (@MAN1EXT@)
+program is a wrapper around
+.I (di)troff
+that automatically handles device postprocessing.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+This document was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.TP
+CSTR\~#54
+refers to the 1992 revision of the
+.I Nroff/Troff User's Manual
+by J.\& F.\& Ossanna and Brian Kernighan.
+.
+.
+.TP
+CSTR\~#97
+refers to
+.IR "A Typesetter-independent TROFF" ,
+by Brian Kernighan and is the original documentation of the first
+multi-device
+.I troff
+.RI ( ditroff ).
+.
+.
+.TP
+.IR roff (@MAN7EXT@)
+provides a history and conceptual overview of
+.I roff
+systems.
+.
+.
+.TP
+.IR @g@troff (@MAN1EXT@)
+describes the GNU implementation of
+.IR (di)troff .
+.
+.
+.TP
+.IR groff (@MAN1EXT@)
+documents the GNU
+.I roff
+program and includes pointers to further documentation about
+.IR groff .
+.
+.
+.TP
+.IR groff_out (@MAN5EXT@)
+describes the
+.I groff
+version of the intermediate output language, the basis for
+multi-device output.
+.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/man/ditroff.man b/man/ditroff.man
deleted file mode 100644 (file)
index 16a6feb..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-.\" Emacs mode: -*- nroff -*-
-.TH DITROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-ditroff \- classical device independent roff
-.
-.\" ditroff.man
-.
-.
-.de co
-Copyright \[co] 2001-2014 Free Software Foundation, Inc.
-
-This file is part of groff, the GNU roff type-setting system.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package, it is also
-available on-line at the
-.UR http://\:www.gnu.org/\:copyleft/\:fdl.html
-GNU copyleft site
-.UE .
-..
-.de au
-It was written by
-.MT groff-bernd.warken-72@\:web.de
-Bernd Warken
-.ME
-and is maintained by
-.MT wl@\:gnu.org
-Werner Lemberg
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The name
-.I ditroff
-once marked a development level of the
-.I troff
-text processing system.
-.
-In actual
-.BR roff (@MAN7EXT@)
-systems, the name
-.I troff
-is used as a synonym for
-.IR ditroff .
-.
-.P
-The first roff system was written by Joe Ossanna around 1973.
-.
-It supported only two output devices, the
-.B nroff
-program produced text oriented tty output, while the
-.B troff
-program generated graphical output for exactly one output device, the Wang
-.I Graphic Systems CAT
-typesetter.
-.
-.
-.P
-In 1979, Brian Kernighan rewrote troff to support more devices by
-creating an intermediate output format for troff that can be fed into
-postprocessor programs which actually do the printout on the device.
-.
-Kernighan\[aq]s version marks what is known as
-.I classical troff
-today.
-.
-In order to distinguish it from Ossanna\[aq]s original mono-device
-version, it was called
-.I ditroff
-.RI ( d "evice " i "ndependent " troff )
-on some systems, though this naming isn\[aq]t mentioned in the
-classical documentation.
-.
-.
-.P
-Today, any existing roff system is based on Kernighan\[aq]s
-multi-device troff.
-.
-The distinction between
-.I troff
-and
-.I ditroff
-isn\[aq]t necessary any longer, for each modern
-.I troff
-provides already the complete functionality of
-.IR ditroff .
-.
-On most systems, the name
-.I troff
-is used to denote
-.IR ditroff .
-.
-.
-.P
-The easiest way to use ditroff is the GNU roff system,
-.IR groff .
-The
-.BR groff (@MAN1EXT@)
-program is a wrapper around
-.I (di)troff
-that automatically handles postprocessing.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.TP
-.I [CSTR\~#54]
-The 1992 revision of the
-.I Nroff/Troff User\[aq]s Manual
-by
-.I J.\& F.\& Ossanna
-and
-.IR "Brian Kernighan" ,
-see
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz
-Bell Labs CSTR\~#54
-.UE .
-.
-.TP
-.I [CSTR\~#97]
-.I A Typesetter-independent TROFF
-by
-.I Brian Kernighan
-is the original documentation of the first multi-device troff
-.RI ( ditroff ),
-see
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz
-Bell Labs CSTR\~#97
-.UE .
-.
-.TP
-.BR roff (@MAN7EXT@)
-This document gives details on the history and concepts of roff.
-.
-.TP
-.BR @g@troff (@MAN1EXT@)
-The actual implementation of
-.IR ditroff .
-.
-.TP
-.BR groff (@MAN1EXT@)
-The GNU roff program and pointers to all documentation around groff.
-.
-.TP
-.BR groff_out (@MAN5EXT@)
-The groff version of the intermediate output language, the basis for
-multi-devicing.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.au
diff --git a/man/groff.7.man b/man/groff.7.man
new file mode 100644 (file)
index 0000000..24f093f
--- /dev/null
@@ -0,0 +1,4736 @@
+'\" t
+.TH GROFF @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff \- a short reference for the GNU roff language
+.
+.\" Before installation: <top-groff-source>/man/groff.man
+.\" After installation:  </usr or /usr/local>/share/man/man7/groff.7
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2000-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this
+.\" document under the terms of the GNU Free Documentation License,
+.\" Version 1.3 or any later version published by the Free Software
+.\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
+.\" and with no Back-Cover Texts.
+.\"
+.\" A copy of the Free Documentation License is included as a file
+.\" called FDL in the main directory of the groff source package.
+.
+.
+.\" ====================================================================
+.\" Setup
+.\" ====================================================================
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_7_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" start of macro definitions
+.
+.de TPx
+.  TP 10n
+..
+.\" ====================================================================
+.\" .Text anything ...
+.\"
+.\" All arguments are printed as text.
+.\"
+.de Text
+.  nop \)\\$*
+..
+.
+.\" ========= command=line option =========
+.
+.de option
+.  Text \f[CB]\\$*
+.  ft P
+..
+.
+.\" ========= characters =========
+.
+.de squoted_char
+.  Text \[oq]\f[CB]\\$1\f[]\[cq]\\$2
+..
+.de dquoted_char
+.  Text \[lq]\f[CB]\\$1\f[]\[rq]\\$2
+..
+.\" ========= requests =========
+.
+.\" synopsis of a request
+.de REQ
+.  ie \n[.$]=1 \{\
+.    Text \f[CB]\\$1\f[]
+.  \}
+.  el \{\
+.    Text \f[CB]\\$1\~\f[]\f[I]\\$2\f[]
+.  \}
+..
+.
+.\" reference of a request
+.de request
+.  BR \\$*
+..
+.
+.\" ========= numerical elements =========
+.
+.\" number with a trailing unit
+.de scalednumber
+.  Text \\$1\^\f[CB]\\$2\f[]\\$3\f[R]
+.  ft P
+..
+.
+.\" representation of units within the text
+.de scaleindicator
+.  Text \f[CB]\\$1\f[]\\$2\f[R]
+.  ft P
+..
+.
+.\" representation of mathematical operators within the text
+.de operator
+.  squoted_char \\$@
+..
+.
+.
+.\" ========= escape sequences =========
+.
+.\" ====================================================================
+.\" .ESC name [arg]
+.\"
+.\" Synopsis of an escape sequence, optionally with argument
+.\" Args   : 1 or 2; 'name' obligatory, 'arg' optional
+.\"   name : suitable name for an escape sequence (c, (xy, [long])
+.\"   arg  : arbitrary word
+.\" Result : prints \namearg, where 'name' is in CB, 'arg' in I
+.\"
+.de ESC
+.  Text "\f[CB]\e\\$1\,\f[I]\\$2\/\fR"
+..
+.\" ====================================================================
+.\" .ESC[] name arg
+.\"
+.\" Synopsis for escape sequence with a bracketed long argument
+.\" Args   : 2 obligatory
+.\"   name : suitable name for an escape sequence (c, (xy, [long])
+.\"   arg  : arbitrary text
+.\" Result : prints \name[arg], where 'name' is in CB, 'arg' in I
+.\"
+.de ESC[]
+.  Text "\f[CB]\e\\$1\[lB]\f[]\,\f[I]\\$2\/\f[]\f[CB]\[rB]\f[]"
+..
+.\" ====================================================================
+.\" .ESCq name arg
+.\"
+.\" Synopsis for escape sequence with a bracketed long argument
+.\" Args   : 2 obligatory
+.\"   name : suitable name for an escape sequence (c, (xy, [long])
+.\"   arg  : arbitrary text
+.\" Result : prints \name'arg', where 'name' is in CB, 'arg' in I
+.\"
+.de ESCq
+.  Text "\f[CB]\e\\$1\[cq]\f[]\,\f[I]\\$2\/\f[]\f[CB]\[cq]\f[]"
+..
+.\" ====================================================================
+.\" .ESC? arg
+.\"
+.\" Synopsis for escape sequence with a bracketed long argument
+.\" Args   : 1 obligatory
+.\"   arg  : arbitrary text
+.\" Result : prints '\?arg?', where the '?' are in CB, 'arg' in I
+.\"
+.de ESC?
+.  Text "\f[CB]\e?\,\f[I]\\$1\/\f[CB]?\f[R]"
+..
+.\" ====================================================================
+.\" .esc name [punct]
+.\"
+.\" Reference of an escape sequence (no args), possibly punctuation
+.\" Args    : 1 obligatory
+.\"   name  : suitable name for an escape sequence (c, (xy, [long])
+.\"   punct : arbitrary
+.\" Result  : prints \name, where 'name' is in B, 'punct' in R
+.\"
+.de esc
+.  BR "\e\\$1" \\$2
+..
+.\" ====================================================================
+.\" .escarg name arg [punct]
+.\"
+.\" Reference of an escape sequence (no args)
+.\" Args    : 1 obligatory, 1 optional
+.\"   name  : suitable name for an escape sequence (c, (xy, [long])
+.\"   arg   : arbitrary word
+.\" Result  : prints \namearg, where
+.\"           'name' is in B, 'arg' in I
+.\"
+.de escarg
+.  Text \f[B]\e\\$1\f[]\,\f[I]\\$2\/\f[]\\$3
+..
+.\" ====================================================================
+.\" .esc[] name arg [punct]
+.\"
+.\" Reference for escape sequence with a bracketed long argument
+.\" Args   : 2 obligatory
+.\"   name : suitable name for an escape sequence (c, (xy, [long])
+.\"   arg  : arbitrary text
+.\" Result : prints \name[arg], where 'name' is in CB, 'arg' in CI
+.\"
+.de esc[]
+.  Text \f[CB]\e\\$1\[lB]\f[]\,\f[CI]\\$2\/\f[]\f[CB]\[rB]\f[]\\$3
+..
+.
+.\" ====================================================================
+.\" .escq name arg
+.\"
+.\" Reference for escape sequence with a bracketed long argument
+.\" Args   : 2 obligatory
+.\"   name : suitable name for an escape sequence (c, (xy, [long])
+.\"   arg  : arbitrary text
+.\" Result : prints \name'arg', where 'name' is in CB, 'arg' in CI
+.\"
+.de escq
+.  Text \f[CB]\e\\$1\[cq]\f[]\,\f[CI]\\$2\/\f[]\f[CB]\[cq]\f[]\\$3
+..
+.
+.\" ========= strings =========
+.
+.\" synopsis for string, with \*[]
+.de STRING
+.  Text \[rs]*[\f[CB]\\$1\f[]] \\$2
+..
+.\" synopsis for a long string
+.de string
+.  if \n[.$]=0 \
+.    return
+.  Text \f[CB]\[rs]*\[lB]\\$1\[rB]\f[]\\$2
+..
+.
+.\" ========= registers =========
+.
+.\" synopsis for registers, with \n[]
+.de REG
+.  Text \[rs]n[\f[CB]\\$1\f[]]
+..
+.\" reference of a register, without decoration
+.de register
+.  Text register
+.  BR \\$*
+..
+.
+.\" end of macro definitions
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.P
+The name
+.I groff
+stands for
+.I GNU roff
+and is the free implementation of the roff type-setting system.
+.
+See
+.BR roff (@MAN7EXT@)
+for a survey and the background of the groff system.
+.
+.
+.P
+This document provides only short descriptions of roff language
+elements.
+.
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg,
+is the primary
+.I groff
+manual,
+and is written in Texinfo.
+.
+You can browse it interactively with \[lq]info groff\[rq].
+.
+.
+.P
+Historically, the
+.I roff language
+was called
+.IR troff .
+.I groff
+is compatible with the classical system and provides proper
+extensions.
+.
+So in GNU, the terms
+.IR roff ,
+.IR troff ,
+and
+.I groff language
+could be used as synonyms.
+.
+However
+.I troff
+slightly tends to refer more to the classical aspects, whereas
+.I groff
+emphasizes the GNU extensions, and
+.I roff
+is the general term for the language.
+.
+.
+.P
+The general syntax for writing groff documents is relatively easy, but
+writing extensions to the roff language can be a bit harder.
+.
+.
+.P
+The roff language is line-oriented.
+.
+There are only two kinds of lines, control lines and text lines.
+.
+The control lines start with a control character, by default a period
+.dquoted_char .
+or a single quote
+.dquoted_char \[aq] ;
+all other lines are text lines.
+.
+.
+.P
+.B Control lines
+represent commands, optionally with arguments.
+.
+They have the following syntax.
+.
+The leading control character can be followed by a command name;
+arguments, if any, are separated by spaces (but not tab characters)
+from the command name and among themselves, for example,
+.RS
+.P
+.Text .command_name arg1 arg2
+.RE
+.
+.
+.P
+For indentation, any number of space or tab characters can be inserted
+between the leading control character and the command name, but the
+control character must be on the first position of the line.
+.
+.
+.P
+.B Text lines
+represent the parts that is printed.
+They can be modified by escape sequences, which are recognized by a
+leading backslash
+.squoted_char \[rs] .
+These are in-line or even in-word formatting elements or functions.
+.
+Some of these take arguments separated by single quotes
+.dquoted_char \[aq] ,
+others are regulated by a length encoding introduced by an open
+parenthesis
+.squoted_char (
+or enclosed in brackets
+.squoted_char [
+and
+.squoted_char ] .
+.
+.
+.P
+The roff language provides flexible instruments for writing language
+extension, such as macros.
+.
+When interpreting macro definitions, the roff system enters a special
+operating mode, called the
+.BR "copy mode" .
+.
+.
+.P
+The copy mode behaviour can be quite tricky, but there are some rules
+that ensure a safe usage.
+.
+.IP 1.
+Printable backslashes must be denoted as
+.esc e .
+To be more precise,
+.esc e
+represents the current escape character.
+.
+To get a backslash glyph, use
+.esc (rs
+or
+.esc [rs] .
+.IP 2.
+Double all backslashes.
+.IP 3.
+Begin all text lines with the special non-spacing character
+.esc & .
+.
+.
+.P
+This does not produce the most efficient code, but it should work as a
+first measure.
+.
+For better strategies, see the
+.I groff
+Texinfo manual and
+.BR groff_tmac (@MAN5EXT@).
+.
+.
+.P
+Reading roff source files is easier, just reduce all double backslashes
+to a single one in all macro definitions.
+.
+.
+.\" ====================================================================
+.SH "GROFF ELEMENTS"
+.\" ====================================================================
+.
+The roff language elements add formatting information to a text file.
+.
+The fundamental elements are predefined commands and variables that
+make roff a full-blown programming language.
+.
+.
+.P
+There are two kinds of roff commands, possibly with arguments.
+.B Requests
+are written on a line of their own starting with a dot
+.squoted_char .
+or a
+.dquoted_char \[aq] ,
+whereas
+.B Escape sequences
+are in-line functions and in-word formatting elements starting with a
+backslash
+.squoted_char \[rs] .
+.
+.
+.P
+The user can define her own formatting commands using the
+.request de
+request.
+.
+These commands are called
+.BR macros ,
+but they are used exactly like requests.
+.
+Macro packages are pre-defined sets of macros written in the groff
+language.
+.
+A user's possibilities to create escape sequences herself is very
+limited, only special characters can be mapped.
+.
+.
+.P
+The groff language provides several kinds of variables with
+different interfaces.
+.
+There are pre-defined variables, but the user can define her own
+variables as well.
+.
+.
+.P
+.B String
+variables store character sequences.
+.
+They are set with the
+.request ds
+request and retrieved by the
+.esc *
+escape sequences.
+.
+Strings can have variables.
+.
+.
+.P
+.B Register
+variables can store numerical values, numbers with a scale unit, and
+occasionally string-like objects.
+.
+They are set with the
+.request nr
+request and retrieved by the
+.esc n
+escape sequences.
+.
+.
+.P
+.B Environments
+allow the user to temporarily store global formatting parameters like
+line length, font size, etc.\& for later reuse.
+.
+This is done by the
+.request ev
+request.
+.
+.
+.P
+.B Fonts
+are identified either by a name or by an internal number.
+.
+The current font is chosen by the
+.request ft
+request or by the
+.esc f
+escape sequences.
+.
+Each device has special fonts, but the following fonts are available
+for all devices.
+.B R
+is the standard font Roman.
+.B B
+is its
+.B bold
+counterpart.
+.
+The
+.I italic
+font is called
+.B I
+and is available everywhere, but on text devices it is displayed as an
+underlined Roman font.
+.
+For the graphical output devices, there exist constant-width pendants
+of these fonts,
+.BR CR ,
+.BR CI ,
+and
+.BR CB .
+On text devices, all glyphs have a constant width anyway.
+.
+.
+.P
+.B Glyphs
+are visual representation forms of
+.BR characters .
+In groff, the distinction between those two elements is not always
+obvious (and a full discussion is beyond the scope of this man page).
+.
+A first approximation is that glyphs have a specific size and
+colour and are taken from a specific font; they can't be modified any
+more \[en] characters are the input, and glyphs are the output.
+.
+As soon as an output line has been generated, it no longer contains
+characters but glyphs.
+.
+In this man page, we use either \[oq]glyph\[cq] or
+\[oq]character\[cq], whatever is more appropriate.
+.
+.
+.P
+Moreover, there are some advanced roff elements.
+.
+A
+.B diversion
+stores (formatted) information into a macro for later usage.
+See
+.BR groff_tmac (@MAN5EXT@)
+for more details.
+.
+A
+.B trap
+is a positional condition like a certain number of lines from page top
+or in a diversion or in the input.
+.
+Some action can be prescribed to be run automatically when the
+condition is met.
+.
+.
+.P
+More detailed information and examples can be found in the
+.I groff
+Texinfo manual.
+.
+.
+.\" ====================================================================
+.SH "CONTROL CHARACTERS"
+.\" ====================================================================
+.
+There is a small set of characters that have a special controlling
+task in certain conditions.
+.
+.TP
+\&\f[CB].\f[]
+A dot is only special at the beginning of a line or after the
+condition in the requests
+.request if\c
+,
+.request ie\c
+,
+.request el\c
+,
+and
+.request while\c
+\&.
+There it is the control character that introduces a request (or macro).
+.
+By using the
+.request cc
+request, the control character can be set to a different character,
+making the dot
+.squoted_char .
+a non-special character.
+.
+.IP ""
+In all other positions, it just means a dot character.
+.
+In text paragraphs, it is advantageous to start each sentence at a
+line of its own.
+.
+.TP
+\&\f[CB]\[aq]\f[]
+The single quote has two controlling tasks.
+.
+At the beginning of a line and in the conditional requests it is the
+non-breaking control character.
+.
+That means that it introduces a request like the dot, but with the
+additional property that this request doesn't cause a linebreak.
+.
+By using the
+.request c2
+request, the non-break control character can be set to a different
+character.
+.
+.IP ""
+As a second task, it is the most commonly used argument separator in
+some functional escape sequences (but any pair of characters not part
+of the argument do work).
+.
+In all other positions, it denotes the single quote or apostrophe
+character.
+.
+Groff provides a printable representation with the
+.esc (cq
+escape sequence.
+.
+.TP
+\&\f[CB]\[dq]\f[]
+The double quote is used to enclose arguments in macros (but not in
+requests and strings).
+.
+In the
+.request ds
+and
+.request as
+requests, a leading double quote in the argument is stripped off,
+making everything else afterwards the string to be defined (enabling
+leading whitespace).
+.
+The escaped double quote
+.esc \[dq]
+introduces a comment.
+.
+Otherwise, it is not special.
+.
+Groff provides a printable representation with the
+.esc (dq
+escape sequence.
+.
+.TP
+\&\f[CB]\e\f[]
+The backslash usually introduces an escape sequence (this can be
+changed with the
+.request ec
+request).
+.
+A printed version of the escape character is the
+.esc e
+escape; a backslash glyph can be obtained by
+.esc (rs .
+.
+.TP
+\&\f[CB](\f[]
+The open parenthesis is only special in escape sequences when
+introducing an escape name or argument consisting of exactly two
+characters.
+.
+In groff, this behaviour can be replaced by the \f[CB][]\f[] construct.
+.
+.TP
+\&\f[CB][\f[]
+The opening bracket is only special in groff escape sequences; there
+it is used to introduce a long escape name or long escape argument.
+.
+Otherwise, it is non-special, e.g.\& in macro calls.
+.
+.TP
+\&\f[CB]]\f[]
+The closing bracket is only special in groff escape sequences; there
+it terminates a long escape name or long escape argument.
+.
+Otherwise, it is non-special.
+.
+.TP
+\f[CI]space\f[]
+Space characters are only functional characters.
+.
+They separate the arguments in requests, macros, and strings, and the
+words in text lines.
+.
+They are subject to groff's horizontal spacing calculations.
+.
+To get a defined space width, escape sequences like
+.squoted_char "\[rs]\ "
+(this is the escape character followed by a space),
+.esc | ,
+.esc ^ ,
+or
+.esc h
+should be used.
+.
+.IP \f[CI]newline\f[]
+In text paragraphs, newlines mostly behave like space characters.
+.
+Continuation lines can be specified by an escaped newline, i.e., by
+specifying a backslash
+.squoted_char \[rs]
+as the last character of a line.
+.
+.IP \f[CI]tab\f[]
+If a tab character occurs during text the interpreter makes a
+horizontal jump to the next pre-defined tab position.
+.
+There is a sophisticated interface for handling tab positions.
+.
+.
+.\" ====================================================================
+.SH "NUMERICAL EXPRESSIONS"
+.\" ====================================================================
+.
+A
+.B numerical value
+is a signed or unsigned integer or float with or without an appended
+scaling indicator.
+.
+A
+.B scaling indicator
+is a one-character abbreviation for a unit of measurement.
+.
+A number followed by a scaling indicator signifies a size value.
+.
+By default, numerical values do not have a scaling indicator, i.e., they
+are normal numbers.
+.
+.
+.P
+The
+.I roff
+language defines the following scaling indicators.
+.
+.
+.P
+.PD 0
+.RS
+.
+.TPx
+.B c
+centimeter
+.
+.TPx
+.B i
+inch
+.
+.TPx
+.B P
+pica\ \[eq]\ 1/6\ inch
+.
+.TPx
+.B p
+point\ \[eq]\ 1/72\ inch
+.
+.TPx
+.B m
+em\ \[eq]\ \f[R]the font size in points (approx.\& width of letter
+\[oq]\f[CR]m\f[R]\[cq])
+.
+.TPx
+.B M
+100\^th \f[R]of an \f[CR]em
+.
+.TPx
+.B n
+en\ \[eq]\ em/2
+.
+.TPx
+.B u
+Basic unit for actual output device
+.
+.TPx
+.B v
+Vertical line space in basic units
+.
+.TPx
+.B s
+scaled point\ \[eq]\ 1/\f[CI]sizescale\f[R] of a point (defined in
+font \f[I]DESC\f[] file)
+.
+.TPx
+.B f
+Scale by 65536.
+.RE
+.PD
+.
+.
+.P
+.B Numerical expressions
+are combinations of the numerical values defined above with the
+following arithmetical operators already defined in classical troff.
+.
+.
+.P
+.PD 0
+.RS
+.
+.TPx
+.B +
+Addition
+.
+.TPx
+.B \-
+Subtraction
+.
+.TPx
+.B *
+Multiplication
+.
+.TPx
+.B /
+Division
+.
+.TPx
+.B %
+Modulo
+.
+.TPx
+.B =
+Equals
+.
+.TPx
+.B ==
+Equals
+.
+.TPx
+.B <
+Less than
+.
+.TPx
+.B >
+Greater than
+.
+.TPx
+.B <=
+Less or equal
+.
+.TPx
+.B >=
+Greater or equal
+.
+.TPx
+.B &
+Logical and
+.
+.TPx
+.B :
+Logical or
+.
+.TPx
+.B !
+Logical not
+.
+.TPx
+.B (
+Grouping of expressions
+.
+.TPx
+.B )
+Close current grouping
+.
+.RE
+.PD
+.
+.
+.P
+Moreover,
+.I groff
+added the following operators for numerical expressions:
+.
+.
+.P
+.PD 0
+.RS
+.
+.TPx
+\f[I]e1\/\f[CB]>?\,\f[I]e2\f[R]
+The maximum of
+.I e1
+and
+.IR e2 .
+.
+.TPx
+\f[I]e1\/\f[CB]<?\,\f[I]e2\f[R]
+The minimum of
+.I e1
+and
+.IR e2 .
+.
+.TPx
+\f[CB](\,\f[I]c\/\f[CB];\,\f[I]e\/\f[CB])\f[R]
+Evaluate
+.I e
+using
+.I c
+as the default scaling indicator.
+.
+.RE
+.PD
+.
+.
+.P
+For details see the
+.I groff
+Texinfo manual.
+.
+.
+.\" ====================================================================
+.SH CONDITIONS
+.\" ====================================================================
+.
+.B Conditions
+occur in tests raised by the
+.request if\c
+,
+.request ie\c
+,
+and the
+.request while
+requests.
+.
+The following table characterizes the different types of conditions.
+.
+.P
+.
+.PD 0
+.RS
+.
+.TPx
+.I N
+A numerical expression
+.I N
+yields true if its value is greater than\~0.
+.
+.TPx
+.BI ! N
+True if the value of
+.I N
+is\~0 (see below).
+.
+.TPx
+.BI \[aq] s1 \[aq] s2 \[aq]
+True if string\~\c
+.I s1
+is identical to string\~\c
+.IR s2 .
+.
+.TPx
+.BI !\[aq] s1 \[aq] s2 \[aq]
+True if string\~\c
+.I s1
+is not identical to string\~\c
+.I s2
+(see below).
+.
+.TPx
+.BI c ch
+True if there is a glyph\~\c
+.I ch
+available.
+.
+.TPx
+.BI d name
+True if there is a string, macro, diversion, or request called
+.IR name .
+.
+.TPx
+.B e
+Current page number is even.
+.
+.TPx
+.B o
+Current page number is odd.
+.
+.TPx
+.BI m name
+True if there is a color called
+.IR name .
+.
+.TPx
+.B n
+Formatter is
+.BR nroff .
+.
+.TPx
+.BI r reg
+True if there is a register named
+.IR reg .
+.
+.TPx
+.B t
+Formatter is
+.BR troff .
+.
+.TPx
+.BI F font
+True if there exists a font named
+.IR font .
+.
+.TPx
+.BI S style
+True if a style named
+.I style
+has been registered.
+.
+.RE
+.PD
+.
+.
+.P
+Note that the
+.B !
+operator may only appear at the beginning of an expression,
+and negates the entire expression.
+This maintains bug-compatibility with AT&T
+.IR troff .
+.
+.
+.\" ====================================================================
+.SH REQUESTS
+.\" ====================================================================
+.
+This section provides a short reference for the predefined requests.
+.
+In groff, request, macro, and string names can be arbitrarily long.
+.
+No bracketing or marking of long names is needed.
+.
+.
+.P
+Most requests take one or more arguments.
+.
+The arguments are separated by space characters (no tabs!); there is
+no inherent limit for their length or number.
+.
+.
+.P
+Some requests have optional arguments with a different behaviour.
+.
+Not all of these details are outlined here.
+.
+Refer to the
+.I groff
+Texinfo manual and
+.BR groff_diff (@MAN7EXT@)
+for all details.
+.
+.
+.P
+In the following request specifications, most argument names were
+chosen to be descriptive.
+.
+Only the following denotations need clarification.
+.
+.
+.P
+.PD 0
+.RS
+.
+.TPx
+.I c
+denotes a single character.
+.
+.TPx
+.I font
+a font either specified as a font name or a font number.
+.
+.TPx
+.I anything
+all characters up to the end of the line or within
+.esc {
+and
+.esc } .
+.
+.TPx
+.I n
+is a numerical expression that evaluates to an integer value.
+.
+.TPx
+.I N
+is an arbitrary numerical expression, signed or unsigned.
+.
+.TPx
+.I \[+-]N
+has three meanings depending on its sign, described below.
+.
+.RE
+.PD
+.
+.
+.P
+If an expression defined as
+.I \[+-]N
+starts with a
+.squoted_char +
+sign the resulting value of the expression is added to an already
+existing value inherent to the related request, e.g.\& adding to a
+number register.
+.
+If the expression starts with a
+.squoted_char -
+the value of the expression is subtracted from the request value.
+.
+.
+.P
+Without a sign,
+.I N
+replaces the existing value directly.
+.
+To assign a negative number either prepend\~0 or enclose the negative
+number in parentheses.
+.
+.
+.\" ====================================================================
+.SS "Request Short Reference"
+.\" ====================================================================
+.
+.PD 0
+.
+.TPx
+.REQ .
+Empty line, ignored.
+.
+Useful for structuring documents.
+.
+.TPx
+.REQ .\e\[dq] "anything"
+Complete line is a comment.
+.
+.TPx
+.REQ .ab "string"
+Print
+.I string
+on standard error, exit program.
+.
+.TPx
+.REQ .ad
+Begin line adjustment for output lines in current adjust mode.
+.
+.TPx
+.REQ .ad "c"
+Start line adjustment in mode
+.I c
+(\f[CI]c\/\f[]\f[CR]\|\^\[eq]\|l,r,c,b,n\f[]).
+.
+.TPx
+.REQ .af "register c"
+Assign format
+.I c
+to
+.I register
+(\f[CI]c\/\f[]\f[CR]\|\^\[eq]\|l,i,I,a,A\f[]).
+.
+.TPx
+.REQ .aln "alias register"
+Create alias name for
+.IR register .
+.
+.TPx
+.REQ .als "alias object"
+Create alias name for request, string, macro, or diversion
+.IR object .
+.
+.TPx
+.REQ .am "macro"
+Append to
+.I macro
+until
+.B ..\&
+is encountered.
+.
+.TPx
+.REQ .am "macro end"
+Append to
+.I macro
+until
+.BI . end
+is called.
+.
+.TPx
+.REQ .am1 "macro"
+Same as
+.request .am
+but with compatibility mode switched off during macro expansion.
+.
+.TPx
+.REQ .am1 "macro end"
+Same as
+.request .am
+but with compatibility mode switched off during macro expansion.
+.
+.TPx
+.REQ .ami "macro"
+Append to a macro whose name is contained in the string register
+.I macro
+until
+.B ..\&
+is encountered.
+.
+.TPx
+.REQ .ami "macro end"
+Append to a macro indirectly.
+.I macro
+and
+.I end
+are string registers whose contents are interpolated for the macro name
+and the end macro, respectively.
+.
+.TPx
+.REQ .ami1 "macro"
+Same as
+.request .ami
+but with compatibility mode switched off during macro expansion.
+.
+.TPx
+.REQ .ami1 "macro end"
+Same as
+.request .ami
+but with compatibility mode switched off during macro expansion.
+.
+.TPx
+.REQ .as "stringvar anything"
+Append
+.I anything
+to
+.IR stringvar .
+.
+.TPx
+.REQ .as1 "stringvar anything"
+Same as
+.request .as
+but with compatibility mode switched off during string expansion.
+.
+.TPx
+.REQ .asciify "diversion"
+Unformat ASCII characters, spaces, and some escape sequences in
+.IR diversion .
+.
+.TPx
+.REQ .backtrace
+Print a backtrace of the input on stderr.
+.
+.TPx
+.REQ .bd "font N"
+Embolden
+.I font
+by
+.IR N \-1
+units.
+.
+.TPx
+.REQ .bd "S font N"
+Embolden Special Font
+.I S
+when current font is
+.IR font .
+.
+.TPx
+.REQ .blm
+Unset the blank line macro.
+.
+.TPx
+.REQ .blm "macro"
+Set the blank line macro to
+.IR macro .
+.
+.TPx
+.REQ .box
+End current diversion.
+.
+.TPx
+.REQ .box "macro"
+Divert to
+.IR macro ,
+omitting a partially filled line.
+.
+.TPx
+.REQ .boxa
+End current diversion.
+.
+.TPx
+.REQ .boxa "macro"
+Divert and append to
+.IR macro ,
+omitting a partially filled line.
+.
+.TPx
+.REQ .bp
+Eject current page and begin new page.
+.
+.TPx
+.REQ .bp "\[+-]N"
+Eject current page; next page number
+.IR \[+-]N .
+.
+.TPx
+.REQ .br
+Line break.
+.
+.TPx
+.REQ .brp
+Break output line; adjust if applicable.
+.
+.TPx
+.REQ .break
+Break out of a while loop.
+.
+.TPx
+.REQ .c2
+Reset no-break control character to
+.dquoted_char \[aq] .
+.
+.TPx
+.REQ .c2 "c"
+Set no-break control character to
+.IR c .
+.
+.TPx
+.REQ .cc
+Reset control character to
+.squoted_char . .
+.
+.TPx
+.REQ .cc "c"
+Set control character to
+.IR c .
+.
+.TPx
+.REQ .ce
+Center the next input line.
+.
+.TPx
+.REQ .ce "N"
+Center following
+.I N
+input lines.
+.
+.TPx
+.REQ .cf "filename"
+Copy contents of file
+.I filename
+unprocessed to stdout or to the diversion.
+.
+.TPx
+.REQ .cflags "mode c1 c2 \fR\&.\|.\|.\&\fP"
+Treat characters
+.IR c1 ,
+.IR c2 ,
+\&.\|.\|.\&
+according to
+.I mode
+number.
+.
+.TPx
+.REQ .ch "trap N"
+Change
+.I trap
+location
+to
+.IR N .
+.
+.TPx
+.REQ .char "c anything"
+Define entity
+.I c
+as string
+.IR anything .
+.
+.TPx
+.REQ .chop "object"
+Chop the last character off macro, string, or diversion
+.IR object .
+.
+.TPx
+.REQ .class "name c1 c2 \fR\&.\|.\|.\&\fP"
+Assign a set of characters, character ranges, or classes
+.IR c1 ,
+.IR c2 ,
+\&.\|.\|.\&
+to
+.IR name .
+.
+.TPx
+.REQ .close "stream"
+Close the
+.IR stream .
+.
+.TPx
+.REQ .color
+Enable colors.
+.
+.TPx
+.REQ .color "N"
+If
+.I N
+is zero disable colors, otherwise enable them.
+.
+.TPx
+.REQ .composite "from to"
+Map glyph name
+.I from
+to glyph name
+.I to
+while constructing a composite glyph name.
+.
+.TPx
+.REQ .continue
+Finish the current iteration of a while loop.
+.
+.TPx
+.REQ .cp
+Enable compatibility mode.
+.
+.TPx
+.REQ .cp "N"
+If
+.I N
+is zero disable compatibility mode, otherwise enable it.
+.
+.TPx
+.REQ .cs "font N M"
+Set constant character width mode for
+.I font
+to
+.IR N /36
+ems with em
+.IR M .
+.
+.TPx
+.REQ .cu "N"
+Continuous underline in nroff, like
+.request .ul
+in troff.
+.
+.TPx
+.REQ .da
+End current diversion.
+.
+.TPx
+.REQ .da "macro"
+Divert and append to
+.IR macro .
+.
+.TPx
+.REQ .de "macro"
+Define or redefine
+.I macro
+until
+.B ..\&
+is encountered.
+.
+.TPx
+.REQ .de "macro end"
+Define or redefine
+.I macro
+until
+.BI . end
+is called.
+.
+.TPx
+.REQ .de1 "macro"
+Same as
+.request .de
+but with compatibility mode switched off during macro expansion.
+.
+.TPx
+.REQ .de1 "macro end"
+Same as
+.request .de
+but with compatibility mode switched off during macro expansion.
+.
+.TPx
+.REQ .defcolor "color scheme component"
+Define or redefine a color with name
+.IR color .
+.I scheme
+can be
+.BR rgb ,
+.BR cym ,
+.BR cymk ,
+.BR gray ,
+or
+.BR grey .
+.I component
+can be single components specified as fractions in the range 0 to 1
+(default scaling indicator\~\c
+.scaleindicator f ),
+as a string of two-digit hexadecimal color components with a leading
+.BR # ,
+or as a string of four-digit hexadecimal components with two leading
+.BR # .
+The color
+.B default
+can't be redefined.
+.
+.TPx
+.REQ .dei "macro"
+Define or redefine a macro whose name is contained in the string
+register
+.I macro
+until
+.B ..\&
+is encountered.
+.
+.TPx
+.REQ .dei "macro end"
+Define or redefine a macro indirectly.
+.I macro
+and
+.I end
+are string registers whose contents are interpolated for the macro name
+and the end macro, respectively.
+.
+.TPx
+.REQ .dei1 "macro"
+Same as
+.request .dei
+but with compatibility mode switched off during macro expansion.
+.
+.TPx
+.REQ .dei1 "macro end"
+Same as
+.request .dei
+but with compatibility mode switched off during macro expansion.
+.
+.TPx
+.REQ .device "anything"
+Write
+.I anything
+to the intermediate output as a device control function.
+.
+.TPx
+.REQ .devicem "name"
+Write contents of macro or string
+.I name
+uninterpreted to the intermediate output as a device control function.
+.
+.TPx
+.REQ .di
+End current diversion.
+.
+.TPx
+.REQ .di "macro"
+Divert to
+.IR macro .
+See
+.BR groff_tmac (@MAN5EXT@)
+for more details.
+.
+.TPx
+.REQ .do "name"
+Interpret
+.BI . name
+with compatibility mode disabled.
+.
+.TPx
+.REQ .ds "stringvar anything"
+Set
+.I stringvar
+to
+.IR anything .
+.
+.TPx
+.REQ .ds1 "stringvar anything"
+Same as
+.request .ds
+but with compatibility mode switched off during string expansion.
+.
+.TPx
+.REQ .dt "N trap"
+Set diversion trap to position
+.I N
+(default scaling indicator\~\c
+.scaleindicator v ).
+.
+.TPx
+.REQ .ec
+Reset escape character to
+.squoted_char \[rs] .
+.
+.TPx
+.REQ .ec "c"
+Set escape character to
+.IR c .
+.
+.TPx
+.REQ .ecr
+Restore escape character saved with
+.request .ecs\c
+\&.
+.
+.TPx
+.REQ .ecs
+Save current escape character.
+.
+.TPx
+.REQ .el "anything"
+Else part for if-else (\c
+.request .ie\c
+)
+request.
+.
+.TPx
+.REQ .em "macro"
+The
+.I macro
+is run after the end of input.
+.
+.TPx
+.REQ .eo
+Turn off escape character mechanism.
+.
+.TPx
+.REQ .ev
+Switch to previous environment and pop it off the stack.
+.
+.TPx
+.REQ .ev "env"
+Push down environment number or name
+.I env
+to the stack and switch to it.
+.
+.TPx
+.REQ .evc "env"
+Copy the contents of environment
+.I env
+to the current environment.
+No pushing or popping.
+.
+.TPx
+.REQ .ex
+Exit from roff processing.
+.
+.TPx
+.REQ .fam
+Return to previous font family.
+.
+.TPx
+.REQ .fam "name"
+Set the current font family to
+.IR name .
+.
+.TPx
+.REQ .fc
+Disable field mechanism.
+.
+.TPx
+.REQ .fc "a"
+Set field delimiter to\~\c
+.I a
+and pad glyph to space.
+.
+.TPx
+.REQ .fc "a b"
+Set field delimiter to\~\c
+.I a
+and pad glyph to\~\c
+.IR b .
+.
+.TPx
+.REQ .fchar "c anything"
+Define fallback character (or glyph)
+.I c
+as string
+.IR anything .
+.
+.TPx
+.REQ .fcolor
+Set fill color to previous fill color.
+.
+.TPx
+.REQ .fcolor "c"
+Set fill color to
+.IR c .
+.
+.TPx
+.REQ .fi
+Fill output lines.
+.
+.TPx
+.REQ .fl
+Flush output buffer.
+.
+.TPx
+.REQ .fp "n font"
+Mount
+.I font
+on position
+.IR n .
+.
+.TPx
+.REQ .fp "n internal external"
+Mount font with long
+.I external
+name to short
+.I internal
+name on position
+.IR n .
+.
+.TPx
+.REQ .fschar "f c anything"
+Define fallback character (or glyph)
+.I c
+for font
+.I f
+as string
+.IR anything .
+.
+.TPx
+.REQ .fspecial "font"
+Reset list of special fonts for
+.I font
+to be empty.
+.
+.TPx
+.REQ .fspecial "font s1 s2 \fR\&.\|.\|.\&\fP"
+When the current font is
+.IR font ,
+then the fonts
+.IR s1 ,
+.IR s2 ,
+\&.\|.\|.\&
+are special.
+.
+.TPx
+.REQ .ft
+Return to previous font.
+Same as
+.request \[rs]
+or
+.request \[rs]\c
+\&.
+.
+.TPx
+.REQ .ft "font"
+Change to font name or number
+.IR font ;
+same as
+.esc[] f font
+escape sequence.
+.
+.TPx
+.REQ .ftr "font1 font2"
+Translate
+.I font1
+to
+.IR font2 .
+.
+.TPx
+.REQ .fzoom "font"
+Don't magnify
+.IR font .
+.
+.TPx
+.REQ .fzoom "font zoom"
+Set zoom factor for
+.I font
+(in multiples of 1/1000th).
+.
+.TPx
+.REQ .gcolor
+Set glyph color to previous glyph color.
+.
+.TPx
+.REQ .gcolor "c"
+Set glyph color to
+.IR c .
+.
+.TPx
+.REQ .hc
+Remove additional hyphenation indicator character.
+.
+.TPx
+.REQ .hc "c"
+Set up additional hyphenation indicator character\~\c
+.IR c .
+.
+.TPx
+.REQ .hcode "c1 code1 \fR[\fPc2 code2\fR]\fP \fR\&.\|.\|.\&\fP"
+Set the hyphenation code of character
+.I c1
+to
+.IR code1 ,
+that of
+.I c2
+to
+.IR code2 ,
+etc.
+.
+.TPx
+.REQ .hla "lang"
+Set the current hyphenation language to
+.IR lang .
+.
+.TPx
+.REQ .hlm "n"
+Set the maximum number of consecutive hyphenated lines to
+.IR n .
+.
+.TPx
+.REQ .hpf "file"
+Read hyphenation patterns from
+.IR file .
+.
+.TPx
+.REQ .hpfa "file"
+Append hyphenation patterns from
+.IR file .
+.
+.TPx
+.REQ .hpfcode "a b c d \fR\&.\|.\|.\&\fP"
+Set input mapping for
+.request .hpf\c
+\&.
+.
+.TPx
+.REQ .hw "words"
+List of
+.I words
+with exceptional hyphenation.
+.
+.TPx
+.REQ .hy "N"
+Switch to hyphenation mode
+.IR N .
+.
+.TPx
+.REQ .hym "n"
+Set the hyphenation margin to
+.I n
+(default scaling indicator\~\c
+.scaleindicator m ).
+.
+.TPx
+.REQ .hys "n"
+Set the hyphenation space to
+.IR n .
+.
+.TPx
+.REQ .ie "cond anything"
+If
+.I cond
+then
+.I anything
+else goto
+.request .el\c
+\&.
+.
+.TPx
+.REQ .if "cond anything"
+If
+.I cond
+then
+.IR anything ;
+otherwise do nothing.
+.
+.TPx
+.REQ .ig
+Ignore text until
+.B ..\&
+is encountered.
+.
+.TPx
+.REQ .ig "end"
+Ignore text until
+.BI . end
+is called.
+.
+.TPx
+.REQ .in
+Change to previous indentation value.
+.
+.TPx
+.REQ .in "\[+-]N"
+Change indentation according to
+.I \[+-]N
+(default scaling indicator\~\c
+.scaleindicator m ).
+.
+.TPx
+.REQ .it "N trap"
+Set an input-line count trap for the next
+.I N
+lines.
+.
+.TPx
+.REQ .itc "N trap"
+Same as
+.request .it
+but don't count lines interrupted with
+.esc c .
+.
+.TPx
+.REQ .kern
+Enable pairwise kerning.
+.
+.TPx
+.REQ .kern "n"
+If
+.I n
+is zero, disable pairwise kerning, otherwise enable it.
+.
+.TPx
+.REQ .lc
+Remove leader repetition glyph.
+.
+.TPx
+.REQ .lc "c"
+Set leader repetition glyph to\~\c
+.IR c .
+.
+.TPx
+.REQ .length "register anything"
+Write the length of the string
+.I anything
+to
+.IR register .
+.
+.TPx
+.REQ .linetabs
+Enable line-tabs mode (i.e., calculate tab positions relative to output
+line).
+.
+.TPx
+.REQ .linetabs "n"
+If
+.I n
+is zero, disable line-tabs mode, otherwise enable it.
+.
+.TPx
+.REQ .lf "N"
+Set input line number to
+.IR N .
+.
+.TPx
+.REQ .lf "N file"
+Set input line number to
+.I N
+and filename to
+.IR file .
+.
+.TPx
+.REQ .lg "N"
+Ligature mode on if
+.IR N >0.
+.
+.TPx
+.REQ .ll
+Change to previous line length.
+.
+.TPx
+.REQ .ll "\[+-]N"
+Set line length according to
+.I \[+-]N
+(default length
+.scalednumber 6.5 i ,
+default scaling indicator\~\c
+.scaleindicator m ).
+.
+.TPx
+.REQ .lsm
+Unset the leading spaces macro.
+.
+.TPx
+.REQ .lsm "macro"
+Set the leading spaces macro to
+.IR macro .
+.
+.TPx
+.REQ .ls
+Change to the previous value of additional intra-line skip.
+.
+.TPx
+.REQ .ls "N"
+Set additional intra-line skip value to
+.IR N ,
+i.e.,
+.IR N \-1
+blank lines are inserted after each text output line.
+.
+.TPx
+.REQ .lt "\[+-]N"
+Length of title (default scaling indicator\~\c
+.scaleindicator m ).
+.
+.TPx
+.REQ .mc
+Margin glyph off.
+.
+.TPx
+.REQ .mc "c"
+Print glyph\~\c
+.I c
+after each text line at actual distance from right margin.
+.
+.TPx
+.REQ .mc "c N"
+Set margin glyph to\~\c
+.I c
+and distance to\~\c
+.I N
+from right margin (default scaling indicator\~\c
+.scaleindicator m ).
+.
+.TPx
+.REQ .mk "\fR[\fPregister\fR]\fP"
+Mark current vertical position in
+.IR register ,
+or in an internal register used by
+.B .rt
+if no argument.
+.
+.TPx
+.REQ .mso "file"
+The same as
+.request .so
+except that
+.I file
+is searched in the tmac directories.
+.
+.TPx
+.REQ .na
+No output-line adjusting.
+.
+.TPx
+.REQ .ne
+Need a one-line vertical space.
+.
+.TPx
+.REQ .ne "N"
+Need
+.I N
+vertical space (default scaling indicator\~\c
+.scaleindicator v ).
+.
+.TPx
+.REQ .nf
+No filling or adjusting of output lines.
+.
+.TPx
+.REQ .nh
+No hyphenation.
+.
+.TPx
+.REQ .nm
+Number mode off.
+.
+.TPx
+.REQ .nm "\[+-]N \fR[\fPM \fR[\fPS \fR[\fPI\fR]]]\fP"
+In line number mode, set number, multiple, spacing, and indentation.
+.
+.TPx
+.REQ .nn
+Do not number next line.
+.
+.TPx
+.REQ .nn "N"
+Do not number next
+.I N
+lines.
+.
+.TPx
+.REQ .nop "anything"
+Always process
+.IR anything .
+.
+.TPx
+.REQ .nr "register \[+-]N \fR[\fPM\fR]\fP"
+Define or modify
+.I register
+using
+.I \[+-]N
+with auto-increment
+.IR M .
+.
+.TPx
+.REQ .nroff
+Make the built-in conditions
+.B n
+true and
+.B t
+false.
+.
+.TPx
+.REQ .ns
+Turn on no-space mode.
+.
+.TPx
+.REQ .nx
+Immediately jump to end of current file.
+.
+.TPx
+.REQ .nx "filename"
+Immediately continue processing with file
+.IR file .
+.
+.TPx
+.REQ .open "stream filename"
+Open
+.I filename
+for writing and associate the stream named
+.I stream
+with it.
+.
+.TPx
+.REQ .opena "stream filename"
+Like
+.request .open
+but append to it.
+.
+.TPx
+.REQ .os
+Output vertical distance that was saved by the
+.request sv
+request.
+.
+.TPx
+.REQ .output "string"
+Emit
+.I string
+directly to intermediate output, allowing leading whitespace if
+.I string
+starts with
+\&\f[CB]\[dq]\f[]
+(which is stripped off).
+.
+.TPx
+.REQ .pc
+Reset page number character to\~\c
+.squoted_char % .
+.
+.TPx
+.REQ .pc "c"
+Page number character.
+.
+.TPx
+.REQ .pev
+Print the current environment and each defined environment
+state to stderr.
+.
+.TPx
+.REQ .pi "program"
+Pipe output to
+.I program
+(nroff only).
+.
+.TPx
+.REQ .pl
+Set page length to default
+.scalednumber 11 i .
+The current page length is stored in
+.register .p\c
+\&.
+.
+.TPx
+.REQ .pl "\[+-]N"
+Change page length to
+.I \[+-]N
+(default scaling indicator\~\c
+.scaleindicator v ).
+.
+.TPx
+.REQ .pm
+Print macro names and sizes (number of blocks of 128 bytes).
+.
+.TPx
+.REQ .pm "t"
+Print only total of sizes of macros (number of 128 bytes blocks).
+.
+.TPx
+.REQ .pn "\[+-]N"
+Next page number
+.IR N .
+.
+.TPx
+.REQ .pnr
+Print the names and contents of all currently defined number registers
+on stderr.
+.
+.TPx
+.REQ .po
+Change to previous page offset.
+.
+The current page offset is available in
+.register .o\c
+\&.
+.
+.TPx
+.REQ .po "\[+-]N"
+Page offset
+.IR N .
+.
+.TPx
+.REQ .ps
+Return to previous point size.
+.TPx
+.REQ .ps "\[+-]N"
+Point size; same as
+.esc[] s \[+-]N .
+.
+.TPx
+.REQ .psbb "filename"
+Get the bounding box of a PostScript image
+.IR filename .
+.
+.TPx
+.REQ .pso "command"
+This behaves like the
+.request so
+request except that input comes from the standard output of
+.IR command .
+.
+.TPx
+.REQ .ptr
+Print the names and positions of all traps (not including input line
+traps and diversion traps) on stderr.
+.
+.TPx
+.REQ .pvs
+Change to previous post-vertical line spacing.
+.
+.TPx
+.REQ .pvs "\[+-]N"
+Change post-vertical line spacing according to
+.I \[+-]N
+(default scaling indicator\~\c
+.scaleindicator p ).
+.
+.TPx
+.REQ .rchar "c1 c2 \fR\&.\|.\|.\&\fP"
+Remove the definitions of entities
+.IR c1 ,
+.IR c2 ,
+\&.\|.\|.\&
+.
+.TPx
+.REQ .rd "prompt"
+Read insertion.
+.
+.TPx
+.REQ .return
+Return from a macro.
+.
+.TPx
+.REQ .return "anything"
+Return twice, namely from the macro at the current level and from the
+macro one level higher.
+.
+.TPx
+.REQ .rfschar "f c1 c2 \fR\&.\|.\|.\&\fP"
+Remove the definitions of entities
+.IR c1 ,
+.IR c2 ,
+\&.\|.\|.\&
+for font
+.IR f .
+.
+.TPx
+.REQ .rj "n"
+Right justify the next
+.I n
+input lines.
+.
+.TPx
+.REQ .rm "name"
+Remove request, macro, diversion, or string
+.IR name .
+.
+.TPx
+.REQ .rn "old new"
+Rename request, macro, diversion, or string
+.I old
+to
+.IR new .
+.
+.TPx
+.REQ .rnn "reg1 reg2"
+Rename register
+.I reg1
+to
+.IR reg2 .
+.
+.TPx
+.REQ .rr "register"
+Remove
+.IR register .
+.
+.TPx
+.REQ .rs
+Restore spacing; turn no-space mode off.
+.
+.TPx
+.REQ .rt
+Return
+.I (upward only)
+to vertical position marked by
+.B .mk
+on the current page.
+.
+.TPx
+.REQ .rt "\[+-]N"
+Return
+.I (upward only)
+to specified distance from the top of the page (default scaling
+indicator\~\c
+.scaleindicator v ).
+.
+.TPx
+.REQ .schar "c anything"
+Define global fallback character (or glyph)\~\c
+.I c
+as string
+.IR anything .
+.
+.TPx
+.REQ .shc
+Reset soft hyphen glyph to
+.esc (hy .
+.
+.TPx
+.REQ .shc "c"
+Set the soft hyphen glyph to\~\c
+.IR c .
+.
+.TPx
+.REQ .shift "n"
+In a macro, shift the arguments by
+.IR n \~\c
+positions.
+.
+.TPx
+.REQ .sizes "s1 s2 \fR\&.\|.\|.\&\fP s\fRn\fP \fR[\fB0\fP\fR]\fP"
+Set available font sizes similar to the
+.B sizes
+command in a
+.I DESC
+file.
+.
+.TPx
+.REQ .so "filename"
+Include source file.
+.
+.TPx
+.REQ .sp
+Skip one line vertically.
+.
+.TPx
+.REQ .sp "N"
+Space vertical distance
+.I N
+up or down according to sign of
+.I N
+(default scaling indicator\~\c
+.scaleindicator v ).
+.
+.TPx
+.REQ .special
+Reset global list of special fonts to be empty.
+.
+.TPx
+.REQ .special "s1 s2 \fR\&.\|.\|.\&\fR"
+Fonts
+.IR s1 ,
+.IR s2 ,
+etc.\& are special and are searched for glyphs not in the
+current font.
+.
+.TPx
+.REQ .spreadwarn
+Toggle the spread warning on and off without changing its value.
+.
+.TPx
+.REQ .spreadwarn "limit"
+Emit a warning if each space in an output line is widened by
+.I limit
+or more (default scaling indicator\~\c
+.scaleindicator m ).
+.
+.TPx
+.REQ .ss "N"
+Set space glyph size to
+.IR N /12
+of the space width in the current font.
+.
+.TPx
+.REQ .ss "N M"
+Set space glyph size to
+.IR N /12
+and sentence space size set to
+.IR M /12
+of the space width in the current font.
+.
+.TPx
+.REQ .sty "n style"
+Associate
+.I style
+with font position
+.IR n .
+.
+.TPx
+.REQ .substring "xx n1 n2"
+Replace the string named
+.I xx
+with the substring defined by the indices
+.I n1
+and
+.IR n2 .
+.
+.TPx
+.REQ .sv
+Save
+.scalednumber "1 v"
+of vertical space.
+.TPx
+.REQ .sv "N"
+Save the vertical distance
+.I N
+for later output with
+.request os
+request (default scaling indicator\~\c
+.scaleindicator v ).
+.
+.TPx
+.REQ .sy "command-line"
+Execute program
+.IR command-line .
+.
+.TPx
+.REQ .ta "T N"
+Set tabs after every position that is a multiple of
+.I N
+(default scaling indicator\~\c
+.scaleindicator m ).
+.TPx
+.REQ .ta "n1 n2 \fR\&.\|.\|.\&\fP n\fRn\fP \f[CB]T\f[] r1 r2 \
+\fR\&.\|.\|.\&\fP r\fRn\fP"
+Set tabs at positions
+.IR n1 ,
+.IR n2 ,
+\&.\|.\|.\&,
+.IR n n,
+then set tabs at
+.IR n n+ m \[tmu] r n+ r1
+through
+.IR n n+ m \[tmu] r n+ r n,
+where
+.I m
+increments from 0, 1, 2, \&.\|.\|.\& to infinity.
+.
+.\".TPx
+.\".REQ .tar
+.\"Restore internally saved tab positions.
+.\".
+.\".TPx
+.\".REQ .tas
+.\"Save tab positions internally.
+.
+.TPx
+.REQ .tc
+Remove tab repetition glyph.
+.TPx
+.REQ .tc "c"
+Set tab repetition glyph to\~\c
+.IR c .
+.
+.TPx
+.REQ .ti "\[+-]N"
+Temporary indent next line (default scaling indicator\~\c
+.scaleindicator m ).
+.
+.TPx
+.REQ .tkf "font s1 n1 s2 n2"
+Enable track kerning for
+.IR font .
+.
+.TPx
+.REQ .tl "\f[CB]\[cq]\f[]left\f[CB]\[cq]\f[]center\f[CB]\[cq]\f[]right\
+\f[CB]\[cq]\f[]"
+Three-part title.
+.
+.TPx
+.REQ .tm "anything"
+Print
+.I anything
+on stderr.
+.
+.TPx
+.REQ .tm1 "anything"
+Print
+.I anything
+on stderr, allowing leading whitespace if
+.I anything
+starts with
+\&\f[CB]\[dq]\f[]
+(which is stripped off).
+.
+.TPx
+.REQ .tmc "anything"
+Similar to
+.request .tm1
+without emitting a final newline.
+.
+.TPx
+.REQ .tr "abcd\fR\&.\|.\|.\&\fP"
+Translate
+.I a
+to
+.IR b ,
+.I c
+to
+.IR d ,
+etc.\& on output.
+.
+.TPx
+.REQ .trf "filename"
+Transparently output the contents of file
+.IR filename .
+.
+.TPx
+.REQ .trin "abcd\fR\&.\|.\|.\&\fP"
+This is the same as the
+.request tr
+request except that the
+.B asciify
+request uses the character code (if any) before the character
+translation.
+.
+.TPx
+.REQ .trnt "abcd\fR\&.\|.\|.\&\fP"
+This is the same as the
+.request tr
+request except that the translations do not apply to text that is
+transparently throughput into a diversion with
+.esc ! .
+.
+.TPx
+.REQ .troff
+Make the built-in conditions
+.B t
+true and
+.B n
+false.
+.
+.TPx
+.REQ .uf "font"
+Set underline font to
+.I font
+(to be switched to by
+.request .ul\c
+).
+.
+.TPx
+.REQ .ul "N"
+Underline (italicize in troff)
+.I N
+input lines.
+.
+.TPx
+.REQ .unformat "diversion"
+Unformat space characters and tabs in
+.IR diversion ,
+preserving font information.
+.TPx
+.REQ .vpt "n"
+Enable vertical position traps if
+.I n
+is non-zero, disable them otherwise.
+.
+.TPx
+.REQ .vs
+Change to previous vertical base line spacing.
+.
+.TPx
+.REQ .vs "\[+-]N"
+Set vertical base line spacing to
+.I \[+-]N
+(default scaling indicator\~\c
+.scaleindicator p ).
+.
+.TPx
+.REQ .warn "n"
+Set warnings code to
+.IR n .
+.
+.TPx
+.REQ .warnscale "si"
+Set scaling indicator used in warnings to
+.IR si .
+.
+.TPx
+.REQ .wh "N"
+Remove (first) trap at position
+.IR N .
+.
+.TPx
+.REQ .wh "N trap"
+Set location trap; negative means from page bottom.
+.
+.TPx
+.REQ .while "cond anything"
+While condition
+.I cond
+is true, accept
+.I anything
+as input.
+.
+.TPx
+.REQ .write "stream anything"
+Write
+.I anything
+to the stream named
+.IR stream .
+.
+.TPx
+.REQ .writec "stream anything"
+Similar to
+.request .write
+without emitting a final newline.
+.
+.TPx
+.REQ .writem "stream xx"
+Write contents of macro or string
+.I xx
+to the stream named
+.IR stream .
+.
+.PD
+.
+.
+.P
+Besides these standard groff requests, there might be further macro
+calls.
+They can originate from a macro package (see
+.BR roff (@MAN7EXT@)
+for an overview) or from a preprocessor.
+.
+.
+.P
+Preprocessor macros are easy to recognize.
+.
+They enclose their code between a pair of characteristic macros.
+.
+.
+.P
+.TS
+box, center, tab (^);
+c | c | c
+CfCB | CfCB | CfCB.
+preprocessor^start macro^ end macro
+=
+@g@chem^.cstart^.cend
+@g@eqn^.EQ^.EN
+grap^.G1^.G2
+@g@grn^.GS^.GE
+.\" Keep the .IF line below the @g@ideal line.
+@g@ideal^.IS^.IE
+^^.IF
+@g@pic^.PS^.PE
+@g@refer^.R1^.R2
+@g@soelim^\f[I]none^\f[I]none
+@g@tbl^.TS^.TE
+_
+glilypond^.lilypond start^.lilypond stop
+gperl^.Perl start^.Perl stop
+gpinyin^.pinyin start^.pinyin stop
+.TE
+.
+.
+.P
+Note that the \[oq]@g@ideal\[cq] preprocessor is not available in groff
+yet.
+.
+.
+.\" ====================================================================
+.SH "ESCAPE SEQUENCES"
+.\" ====================================================================
+.
+Escape sequences are in-line language elements usually introduced by a
+backslash
+.squoted_char \[rs]
+and followed by an escape name and sometimes by a required argument.
+.
+Input processing is continued directly after the escaped character or
+the argument (without an intervening separation character).
+.
+So there must be a way to determine the end of the escape name and the
+end of the argument.
+.
+.
+.P
+This is done by enclosing names (escape name and arguments consisting
+of a variable name) by a pair of brackets
+.BI \[lB] name \[rB]
+and constant arguments (number expressions and characters) by
+apostrophes (ASCII 0x27) like
+.BI \[cq] constant \[cq] \f[R].
+.
+.
+.P
+There are abbreviations for short names.
+.
+Two-character escape names can be specified by an opening parenthesis
+like
+.esc ( xy
+or
+.esc *( xy
+without a closing counterpart.
+.
+And all one-character names different from the special characters
+.squoted_char [
+and
+.squoted_char (
+can even be specified without a marker, for example
+.esc n c
+or
+.esc $ c.
+.
+.
+.P
+Constant arguments of length\~1 can omit the marker apostrophes, too,
+but there is no two-character analogue.
+.
+.
+.P
+While one-character escape sequences are mainly used for in-line
+functions and system-related tasks, the two-letter names following the
+.esc (
+construct are glyphs predefined by the roff system; these are called
+\[oq]Special Characters\[cq] in the classical documentation.
+.
+Escapes sequences of the form
+.esc[] "" name
+denote glyphs too.
+.
+.
+.\" ====================================================================
+.SS "Single-Character Escapes"
+.\" ====================================================================
+.
+.PD 0
+.
+.\" ========= comments =========
+.
+.TP
+.ESC \[dq]
+Start of a comment.
+.
+Everything up to the end of the line is ignored.
+.
+.TP
+.ESC #
+Everything up to and including the next newline is ignored.
+.
+This is interpreted in copy mode.
+.
+This is like
+.esc \[dq]
+except that the terminating newline is ignored as well.
+.
+.\" ========= strings =========
+.
+.TP
+.ESC * s
+The string stored in the string variable with one-character name\~\c
+.IR s .
+.
+.TP
+.ESC *( st
+The string stored in the string variable with two-character name
+.IR st .
+.
+.TP
+.ESC[] * string
+The string stored in the string variable with name
+.I string
+(with arbitrary length).
+.
+.TP
+.ESC[] * "stringvar arg1 arg2 \fR\&.\|.\|.\fP"
+The string stored in the string variable with arbitrarily long name
+.IR stringvar ,
+taking
+.IR arg1 ,
+.IR arg2 ,
+\&.\|.\|.\&
+as arguments.
+.
+.\" ========= macro arguments =========
+.
+.TP
+.ESC $0
+The name by which the current macro was invoked.
+.
+The
+.request als
+request can make a macro have more than one name.
+.
+.TP
+.ESC $ x
+Macro or string argument with one-digit number\~\c
+.I x
+in the range 1 to\~9.
+.
+.TP
+.ESC $( xy
+Macro or string argument with two-digit number
+.I xy
+(larger than zero).
+.
+.TP
+.ESC[] $ nexp
+Macro or string argument with number
+.IR nexp ,
+where
+.I nexp
+is a numerical expression evaluating to an integer \[>=]1.
+.
+.TP
+.ESC $*
+In a macro or string, the concatenation of all the arguments separated
+by spaces.
+.
+.TP
+.ESC $@
+In a macro or string, the concatenation of all the arguments with each
+surrounded by double quotes, and separated by spaces.
+.
+.TP
+.ESC $^
+In a macro, the representation of all parameters as if they were an
+argument to the
+.request ds
+request.
+.
+.\" ========= escaped characters =========
+.
+.TP
+.ESC \e
+reduces to a single backslash; useful to delay its interpretation as
+escape character in copy mode.
+.
+For a printable backslash, use
+.esc e ,
+or even better
+.esc [rs] ,
+to be independent from the current escape character.
+.
+.TP
+.ESC \[aa]
+The acute accent \[aa]; same as
+.esc (aa .
+Unescaped: apostrophe, right quotation mark, single quote (ASCII 0x27).
+.
+.TP
+.ESC \[ga]
+The grave accent \[ga]; same as
+.esc (ga .
+Unescaped: left quote, backquote (ASCII 0x60).
+.
+.TP
+.ESC \-
+The \- (minus) sign in the current font.
+.
+.TP
+.ESC _
+The same as
+.esc (ul ,
+the underline character.
+.
+.TP
+.ESC .
+The same as a dot (\[oq].\[cq]).
+Necessary in nested macro definitions so that \[oq]\[rs]\[rs]..\[cq]\&
+expands to \[oq]..\[cq].
+.
+.TP
+.ESC %
+Default optional hyphenation character.
+.
+.TP
+.ESC !
+Transparent line indicator.
+.
+.TP
+.ESC? anything
+In a diversion, this transparently embeds
+.I anything
+in the diversion.
+.I anything
+is read in copy mode.
+.
+See also the escape sequences
+.esc !
+and
+.esc ? .
+.
+.
+.\" ========= spacing =========
+.
+.TP
+.ESC \& space
+Unpaddable space size space glyph (no line break).
+.
+.TP
+.ESC 0
+Digit-width space.
+.
+.TP
+.ESC |
+1/6\ em narrow space glyph; zero width in nroff.
+.
+.TP
+.ESC ^
+1/12\ em half-narrow space glyph; zero width in nroff.
+.
+.TP
+.ESC &
+Non-printable, zero-width glyph.
+.
+.TP
+.ESC )
+Like
+.esc &
+except that it behaves like a glyph declared with the
+.request cflags
+request to be transparent for the purposes of end-of-sentence
+recognition.
+.
+.TP
+.ESC /
+Increases the width of the preceding glyph so that the spacing
+between that glyph and the following glyph is correct if
+the following glyph is a roman glyph.
+.
+.TP
+.ESC ,
+Modifies the spacing of the following glyph so that the spacing
+between that glyph and the preceding glyph is correct if the
+preceding glyph is a roman glyph.
+.
+.TP
+.ESC ~
+Unbreakable space that stretches like a normal inter-word space when a
+line is adjusted.
+.
+.TP
+.ESC :
+Inserts a zero-width break point (similar to
+.esc %
+but without a soft hyphen character).
+.
+.TP
+.ESC "" newline
+Ignored newline, for continuation lines.
+.
+.\" ========= structuring =========
+.
+.TP
+.ESC {
+Begin conditional input.
+.
+.TP
+.ESC }
+End conditional input.
+.
+.\" ========= longer escape names =========
+.
+.TP
+.ESC ( sc
+A glyph with two-character name
+.IR sc ;
+see section \[lq]Special Characters\[rq] below.
+.
+.TP
+.ESC[] "" name
+A glyph with name
+.I name
+(of arbitrary length).
+.
+.TP
+.ESC[] "" "comp1 comp2 \fR\&.\|.\|.\&\fP"
+A composite glyph with components
+.IR comp1 ,
+.IR comp2 ,
+\&.\|.\|.\&
+.
+.\" ========= alphabetical escapes =========
+.
+.TP
+.ESC a
+Non-interpreted leader character.
+.
+.TP
+.ESCq A anything
+If
+.I anything
+is acceptable as a name of a string, macro, diversion, register,
+environment or font it expands to\~1, and to\~0 otherwise.
+.
+.TP
+.ESCq b abc\fR\&.\|.\|.\&\fP
+Bracket building function.
+.
+.TP
+.ESCq B anything
+If
+.I anything
+is acceptable as a valid numeric expression it expands to\~1, and
+to\~0 otherwise.
+.
+.TP
+.ESC c
+Continue output line at next input line.
+Anything after this escape on the same line is ignored except
+.ESC R
+(which works as usual).
+Anything before
+.ESC c
+on the same line is appended to the current partial output line.
+The next non-command line after a line interrupted with
+.ESC c
+counts as a new input line.
+.
+.TP
+.ESCq C glyph
+The glyph called
+.IR glyph ;
+same as
+.esc[] "" glyph ,
+but compatible to other roff versions.
+.
+.TP
+.ESC d
+Forward (down) 1/2 em (1/2 line in nroff).
+.
+.TP
+.ESCq D charseq
+Draw a graphical element defined by the characters in
+.IR charseq ;
+see the
+.I groff
+Texinfo manual for details.
+.
+.TP
+.ESC e
+Printable version of the current escape character.
+.
+.TP
+.ESC E
+Equivalent to an escape character, but is not interpreted in copy mode.
+.
+.TP
+.ESC f F
+Change to font with one-character name or one-digit number\~\c
+.IR F .
+.
+.TP
+.ESC fP
+Switch back to previous font.
+.
+.TP
+.ESC f( fo
+Change to font with two-character name or two-digit number
+.IR fo .
+.
+.TP
+.ESC[] f font
+Change to font with arbitrarily long name or number expression
+.IR font .
+.
+.TP
+.ESC[] f ""
+Switch back to previous font.
+.
+.TP
+.ESC F f
+Change to font family with one-character name\~\c
+.IR f .
+.
+.TP
+.ESC F( fm
+Change to font family with two-character name
+.IR fm .
+.
+.TP
+.ESC[] F fam
+Change to font family with arbitrarily long name
+.IR fam .
+.
+.TP
+.ESC[] F ""
+Switch back to previous font family.
+.
+.TP
+.ESC g r
+Return format of register with one-character name\~\c
+.I r
+suitable for
+.request af
+request.
+.
+.TP
+.ESC g( rg
+Return format of register with two-character name
+.I rg
+suitable for
+.request af
+request.
+.
+.TP
+.ESC[] g reg
+Return format of register with arbitrarily long name
+.I reg
+suitable for
+.request af
+request.
+.
+.TP
+.ESCq h N
+Local horizontal motion; move right
+.I N
+(left if negative).
+.
+.TP
+.ESCq H N
+Set height of current font to
+.IR N .
+.
+.TP
+.ESC k r
+Mark horizontal input place in one-character register\~\c
+.IR r .
+.
+.TP
+.ESC k( rg
+Mark horizontal input place in two-character register
+.IR rg .
+.
+.TP
+.ESC[] k reg
+Mark horizontal input place in register with arbitrarily long name
+.IR reg .
+.
+.TP
+.ESCq l Nc
+Horizontal line drawing function (optionally using character
+.IR c ).
+.
+.TP
+.ESCq L Nc
+Vertical line drawing function (optionally using character
+.IR c ).
+.
+.TP
+.ESC m c
+Change to color with one-character name\~\c
+.IR c .
+.
+.TP
+.ESC m( cl
+Change to color with two-character name
+.IR cl .
+.
+.TP
+.ESC[] m color
+Change to color with arbitrarily long name
+.IR color .
+.
+.TP
+.ESC[] m ""
+Switch back to previous color.
+.
+.TP
+.ESC M c
+Change filling color for closed drawn objects to color with
+one-character name\~\c
+.IR c .
+.
+.TP
+.ESC M( cl
+Change filling color for closed drawn objects to color with
+two-character name
+.IR cl .
+.
+.TP
+.ESC[] M color
+Change filling color for closed drawn objects to color with
+arbitrarily long name
+.IR color .
+.
+.TP
+.ESC[] M ""
+Switch to previous fill color.
+.
+.TP
+.ESC n r
+The numerical value stored in the register variable with the
+one-character name\~\c
+.IR r .
+.
+.TP
+.ESC n( re
+The numerical value stored in the register variable with the
+two-character name
+.IR re .
+.
+.TP
+.ESC[] n reg
+The numerical value stored in the register variable with arbitrarily
+long name
+.IR reg .
+.
+.TP
+.ESCq N n
+Typeset the glyph with index\~\c
+.I n
+in the current font.
+.
+No special fonts are searched.
+.
+Useful for adding (named) entities to a document using the
+.request char
+request and friends.
+.
+.TP
+.ESCq o abc\fR\&.\|.\|.\&\fP
+Overstrike glyphs
+.IR a ,
+.IR b ,
+.IR c ,
+etc.
+.
+.TP
+.ESC O0
+Disable glyph output.
+.
+Mainly for internal use.
+.
+.TP
+.ESC O1
+Enable glyph output.
+.
+Mainly for internal use.
+.
+.TP
+.ESC p
+Break output line at next word boundary; adjust if applicable.
+.
+.TP
+.ESC r
+Reverse 1\ em vertical motion (reverse line in nroff).
+.
+.TP
+.ESCq R "name\~\[+-]n"
+The same as
+.request .nr
+.I name
+.IR \[+-]n .
+.
+.TP
+.ESC s \[+-]N
+Set/increase/decrease the point size to/by
+.I N
+scaled points;
+.I N
+is a one-digit number in the range 1 to\~9.
+.
+Same as
+.request ps
+request.
+.
+.TP
+.ESC s( \[+-]N
+.TQ
+.ESC s\[+-]( N
+Set/increase/decrease the point size to/by
+.I N
+scaled points;
+.I N
+is a two-digit number \[>=]1.
+.
+Same as
+.request ps
+request.
+.
+.TP
+.ESC[] s \[+-]N
+.TQ
+.ESC[] s\[+-] N
+.TQ
+.ESCq s \[+-]N
+.TQ
+.ESCq s\[+-] N
+Set/increase/decrease the point size to/by
+.I N
+scaled points.
+.
+Same as
+.request ps
+request.
+.
+.TP
+.ESCq S N
+Slant output by
+.I N
+degrees.
+.
+.TP
+.ESC t
+Non-interpreted horizontal tab.
+.
+.TP
+.ESC u
+Reverse (up) 1/2 em vertical motion (1/2 line in nroff).
+.
+.TP
+.ESCq v N
+Local vertical motion; move down
+.I N
+(up if negative).
+.
+.TP
+.ESC V e
+The contents of the environment variable with one-character
+name\~\c
+.IR e .
+.
+.TP
+.ESC V( ev
+The contents of the environment variable with two-character name
+.IR ev .
+.
+.TP
+.ESC[] V env
+The contents of the environment variable with arbitrarily long name
+.IR env .
+.
+.TP
+.ESCq w string
+The width of the glyph sequence
+.IR string .
+.
+.TP
+.ESCq x N
+Extra line-space function (negative before, positive after).
+.
+.TP
+.ESCq X string
+Output
+.I string
+as device control function.
+.
+.TP
+.ESC Y n
+Output string variable or macro with one-character name\~\c
+.I n
+uninterpreted as device control function.
+.
+.TP
+.ESC Y( nm
+Output string variable or macro with two-character name
+.I nm
+uninterpreted as device control function.
+.
+.TP
+.ESC[] Y name
+Output string variable or macro with arbitrarily long name
+.I name
+uninterpreted as device control function.
+.
+.TP
+.ESC z c
+Print
+.I c
+with zero width (without spacing).
+.
+.TP
+.ESCq Z anything
+Print
+.I anything
+and then restore the horizontal and vertical position;
+.I anything
+may not contain tabs or leaders.
+.
+.
+.PD
+.P
+The escape sequences
+.esc e ,
+.esc . ,
+.esc \[dq] ,
+.esc $ ,
+.esc * ,
+.esc a ,
+.esc n ,
+.esc t ,
+.esc g ,
+and
+.escarg \& newline
+are interpreted in copy mode.
+.
+.
+.P
+Escape sequences starting with
+.esc (
+or
+.esc [
+do not represent single character escape sequences, but introduce escape
+names with two or more characters.
+.
+.
+.P
+If a backslash is followed by a character that does not constitute a
+defined escape sequence, the backslash is silently ignored and the
+character maps to itself.
+.
+.
+.\" ====================================================================
+.SS "Special Characters"
+.\" ====================================================================
+.
+[Note: \[oq]Special Characters\[cq] is a misnomer; those entities are
+(output) glyphs, not (input) characters.]
+.
+.
+.P
+Common special characters are predefined by escape sequences of the
+form
+.BI \e( xy
+with characters
+.I x
+and
+.IR y .
+.
+In
+.IR groff ,
+it is also possible to use the writing
+.BI \e[ xy ]
+as well.
+.
+.
+.P
+Some of these special characters exist in the usual font while most of
+them are only available in the special font.
+.
+Below you can see a small selection of the most important glyphs; a
+complete list can be found in
+.BR groff_char (@MAN7EXT@).
+.RS
+.P
+.PD 0
+.
+.TP
+.ESC (Do
+Dollar
+.B \(Do
+.
+.TP
+.ESC (Eu
+Euro
+.B \(Eu
+.
+.TP
+.ESC (Po
+British pound sterling
+.B \(Po
+.
+.TP
+.ESC (aq
+Apostrophe quote
+.B \(aq
+.
+.TP
+.ESC (bu
+Bullet sign
+.B \(bu
+.
+.TP
+.ESC (co
+Copyright
+.B \(co
+.
+.TP
+.ESC (cq
+Single closing quote (right)
+.B \(cq
+.TP
+.ESC (ct
+Cent
+.B \(ct
+.
+.TP
+.ESC (dd
+Double dagger
+.B  \(dd
+.
+.TP
+.ESC (de
+Degree
+.B \(de
+.
+.TP
+.ESC (dg
+Dagger
+.B \(dg
+.
+.TP
+.ESC (dq
+Double quote (ASCII 34)
+.B \(dq
+.
+.TP
+.ESC (em
+Em-dash
+.B \(em
+.
+.TP
+.ESC (en
+En-dash
+.B \(en
+.
+.TP
+.ESC (hy
+Hyphen
+.B \(hy
+.
+.TP
+.ESC (lq
+Double quote left
+.B \(lq
+.
+.TP
+.ESC (oq
+Single opening quote (left)
+.B \(oq
+.
+.TP
+.ESC (rg
+Registered sign
+.B \(rg
+.
+.TP
+.ESC (rq
+Double quote right
+.B \(rq
+.
+.TP
+.ESC (rs
+Printable backslash character
+.B \(rs
+.
+.TP
+.ESC (sc
+Section sign
+.B \(sc
+.
+.TP
+.ESC (tm
+Trademark symbol
+.B  \(tm
+.
+.TP
+.ESC (ul
+Underline character
+.B  \(ul
+.
+.TP
+.ESC (==
+Identical
+.B \(==
+.
+.TP
+.ESC (>=
+Larger or equal
+.B \(>=
+.
+.TP
+.ESC (<=
+Less or equal
+.B \(<=
+.
+.TP
+.ESC (!=
+Not equal
+.B \(!=
+.
+.TP
+.ESC (->
+Right arrow
+.B \(->
+.
+.TP
+.ESC (<-
+Left arrow
+.B \(<-
+.
+.TP
+.ESC (+-
+Plus-minus sign
+.B \(+-
+.
+.PD
+.RE
+.
+.
+.\" ====================================================================
+.SS "Unicode Characters"
+.\" ====================================================================
+.
+The extended escape
+.B u
+allows the inclusion of all available Unicode characters into a
+.I roff
+file.
+.
+.
+.TP
+.BI \e[u xxxx ]
+.B u
+is the escape name.
+.
+.I xxxx
+is a hexadecimal number of four hex digits, such as
+.B 0041
+for the letter
+.BR A ,
+thus
+.BR \e[u0041] .
+.
+.
+.TP
+.BI \e[u yyyyy ]
+.B u
+is the escape name.
+.
+.I yyyyy
+is a hexadecimal number of five hex digits, such as
+.B 2FA1A
+for a Chinese-looking character from the Unicode block
+.IR "CJK Compatibility Ideographs Supplement" ,
+thus
+.BR \e[u2FA1A] .
+.
+.
+.P
+The hexadecimal value indicates the corresponding Unicode code point for
+a character.
+.
+.
+.TP
+.BI \e[u hex1 _ hex2 ]
+.TQ
+.BI \e[u hex1 _ hex2 _ hex3 ]
+.IR hex1 ,
+.IR hex2 ,
+and
+.I hex3
+are all Unicode hexadecimal codes (4 or 5 hex digits) that are used
+for overstriking, e.g.\&
+.B \e[u0041_0301]
+is
+.IR "A acute" ,
+which can also be specified as
+.BR \['A] ;
+see
+.BR groff_char (7).
+.
+.
+.P
+The availability of the Unicode characters depends on the font used.
+.
+For text mode, the device
+.B \-Tutf8
+is quite complete; for
+.I troff
+modes it might happen that some or many characters will not be
+displayed.
+.
+Please check your fonts.
+.
+.
+.\" ====================================================================
+.SS "Strings"
+.\" ====================================================================
+.
+Strings are defined by the
+.request ds
+request and can be retrieved by the
+.esc *
+escape sequence.
+.
+.
+.P
+Strings share their name space with macros.
+.
+So strings and macros without arguments are roughly equivalent; it is
+possible to call a string like a macro and vice versa, but this often
+leads to unpredictable results.
+.
+The following string is the only one predefined in groff.
+.
+.TPx
+.STRING .T
+The name of the current output device as specified by the
+.option \-T
+command-line option.
+.
+.
+.\" ====================================================================
+.SH REGISTERS
+.\" ====================================================================
+.
+Registers are variables that store a value.
+.
+In groff,
+most registers store numerical values
+(see section \[lq]Numerical Expressions\[rq] above),
+but some can also hold a string value.
+.
+.
+.P
+Each register is given a name.
+Arbitrary registers can be defined and set with the
+.request nr
+request.
+.
+.
+.P
+The value stored in a register can be retrieved by the escape sequences
+introduced by
+.esc n .
+.
+.
+.P
+Most useful are predefined registers.
+.
+In the following the notation
+.I name
+is used to refer to
+.register name
+to make clear that we speak about registers.
+.
+Please keep in mind that the
+.esc[] n ""
+decoration is not part of the register name.
+.
+.
+.\" ====================================================================
+.SS "Read-only Registers"
+.\" ====================================================================
+.
+The following registers have predefined values that should not be
+modified by the user (usually, registers starting with a dot are
+read-only).
+.
+Mostly, they provide information on the current settings or store
+results from request calls.
+.
+.
+.P
+.PD 0
+.
+.TPx
+.REG $$
+The process ID of
+.BR troff .
+.
+.TPx
+.REG .$
+Number of arguments in the current macro or string.
+.
+.TPx
+.REG .a
+Post-line extra line-space most recently utilized using
+.esc x .
+.
+.TPx
+.REG .A
+Set to\~1 in
+.B troff
+if option
+.option \-A
+is used; always\~1 in
+.BR nroff .
+.
+.TPx
+.REG .b
+The emboldening offset while
+.request .bd
+is active.
+.
+.TPx
+.REG .br
+Within a macro, set to\~1 if macro called with the \[oq]normal\[cq]
+control character, and to\~0 otherwise.
+.
+.TPx
+.REG .c
+Current input line number.
+.
+.TPx
+.REG .C
+1\~if compatibility mode is in effect, 0\~otherwise.
+.
+.TPx
+.REG .cdp
+The depth of the last glyph added to the current environment.
+.
+It is positive if the glyph extends below the baseline.
+.
+.TPx
+.REG .ce
+The number of lines remaining to be centered, as set by the
+.request ce
+request.
+.
+.TPx
+.REG .cht
+The height of the last glyph added to the current environment.
+.
+It is positive if the glyph extends above the baseline.
+.
+.TPx
+.REG .color
+1\~if colors are enabled, 0\~otherwise.
+.
+.TPx
+.REG .csk
+The skew of the last glyph added to the current environment.
+.
+The skew of a glyph is how far to the right of the center of a glyph
+the center of an accent over that glyph should be placed.
+.
+.TPx
+.REG .d
+Current vertical place in current diversion; equal to
+.register nl\c
+\&.
+.
+.TPx
+.REG .ev
+The name or number of the current environment (string-valued).
+.
+.TPx
+.REG .f
+Current font number.
+.
+.TPx
+.REG .F
+The name of the current input file (string-valued).
+.
+.TPx
+.REG .fam
+The current font family (string-valued).
+.
+.TPx
+.REG .fn
+The current (internal) real font name (string-valued).
+.
+.TPx
+.REG .fp
+The number of the next free font position.
+.
+.TPx
+.REG .g
+Always 1 in GNU troff.
+.
+Macros should use it to test if running under groff.
+.
+.TPx
+.REG .h
+Text base-line high-water mark on current page or diversion.
+.
+.TPx
+.REG .H
+Number of basic units per horizontal unit of output device resolution.
+.
+.TPx
+.REG .height
+The current font height as set with
+.request \[rs]H\c
+\&.
+.
+.TPx
+.REG .hla
+The current hyphenation language as set by the
+.request hla
+request.
+.
+.TPx
+.REG .hlc
+The number of immediately preceding consecutive hyphenated lines.
+.
+.TPx
+.REG .hlm
+The maximum allowed number of consecutive hyphenated lines, as set by
+the
+.request hlm
+request.
+.
+.TPx
+.REG .hy
+The current hyphenation flags (as set by the
+.request hy
+request).
+.
+.TPx
+.REG .hym
+The current hyphenation margin (as set by the
+.request hym
+request).
+.
+.TPx
+.REG .hys
+The current hyphenation space (as set by the
+.request hys
+request).
+.
+.TPx
+.REG .i
+Current indentation.
+.
+.TPx
+.REG .in
+The indentation that applies to the current output line.
+.
+.TPx
+.REG .int
+Positive if last output line contains
+.esc c .
+.
+.TPx
+.REG .j
+The current adjustment mode.
+It can be stored and used to set adjustment.
+(n\ =\ 1, b\ =\ 1, l\ =\ 0, r\ =\ 5, c\ =\ 3).
+.
+.TPx
+.REG .k
+The current horizontal output position (relative to the current
+indentation).
+.TPx
+.REG .kern
+1\~if pairwise kerning is enabled, 0\~otherwise.
+.
+.TPx
+.REG .l
+Current line length.
+.
+.TPx
+.REG .L
+The current line spacing setting as set by
+.request .ls\c
+\&.
+.
+.TPx
+.REG .lg
+The current ligature mode (as set by the
+.request lg
+request).
+.
+.TPx
+.REG .linetabs
+The current line-tabs mode (as set by the
+.request linetabs
+request).
+.
+.TPx
+.REG .ll
+The line length that applies to the current output line.
+.
+.TPx
+.REG .lt
+The title length (as set by the
+.request lt
+request).
+.
+.TPx
+.REG .m
+The current drawing color (string-valued).
+.
+.TPx
+.REG .M
+The current background color (string-valued).
+.
+.TPx
+.REG .n
+Length of text portion on previous output line.
+.
+.TPx
+.REG .ne
+The amount of space that was needed in the last
+.request ne
+request that caused a trap to be sprung.
+.
+Useful in conjunction with
+.register .trunc\c
+\&.
+.
+.TPx
+.REG .ns
+1\~if in no-space mode, 0\~otherwise.
+.
+.TPx
+.REG .o
+Current page offset.
+.
+.TPx
+.REG .O
+The suppression nesting level (see
+.esc O ).
+.
+.TPx
+.REG .p
+Current page length.
+.
+.TPx
+.REG .P
+1\~if the current page is being printed, 0\~otherwise (as determined by
+the
+.option \-o
+command-line option).
+.
+.TPx
+.REG .pe
+1\~during page ejection, 0\~otherwise.
+.
+.TPx
+.REG .pn
+The number of the next page: either the value set by a
+.request pn
+request, or the number of the current page plus\ 1.
+.
+.TPx
+.REG .ps
+The current point size in scaled points.
+.
+.TPx
+.REG .psr
+The last-requested point size in scaled points.
+.
+.TPx
+.REG .pvs
+The current post-vertical line spacing.
+.
+.TPx
+.REG .R
+The number of unused number registers.
+Always 10000 in GNU troff.
+.
+.TPx
+.REG .rj
+The number of lines to be right-justified as set by the
+.request rj
+request.
+.
+.TPx
+.REG .s
+Current point size as a decimal fraction.
+.
+.TPx
+.REG .slant
+The slant of the current font as set with
+.request \eS\c
+\&.
+.
+.TPx
+.REG .sr
+The last requested point size in points as a decimal fraction
+(string-valued).
+.
+.TPx
+.REG .ss
+The value of the parameters set by the first argument of the
+.request ss
+request.
+.
+.TPx
+.REG .sss
+The value of the parameters set by the second argument of the
+.request ss
+request.
+.
+.TPx
+.REG .sty
+The current font style (string-valued).
+.
+.TPx
+.REG .t
+Vertical distance to the next trap.
+.
+.TPx
+.REG .T
+Set to\~1
+if option
+.option \-T
+is used.
+.
+.TPx
+.REG .tabs
+A string representation of the current tab settings suitable for use
+as an argument to the
+.request ta
+request.
+.
+.TPx
+.REG .trunc
+The amount of vertical space truncated by the most recently sprung
+vertical position trap, or, if the trap was sprung by an
+.request ne
+request, minus the amount of vertical motion produced by
+.request .ne\c
+\&.
+.
+Useful in conjunction with the
+.register .ne\c
+\&.
+.
+.TPx
+.REG .u
+Equal to 1 in fill mode and 0 in no-fill mode.
+.
+.TPx
+.REG .U
+Equal to 1 in safer mode and 0 in unsafe mode.
+.
+.TPx
+.REG .v
+Current vertical line spacing.
+.
+.TPx
+.REG .V
+Number of basic units per vertical unit of output device resolution.
+.
+.TPx
+.REG .vpt
+1\~if vertical position traps are enabled, 0\~otherwise.
+.
+.TPx
+.REG .w
+Width of previous glyph.
+.
+.TPx
+.REG .warn
+The sum of the number codes of the currently enabled warnings.
+.
+.TPx
+.REG .x
+The major version number.
+.
+.TPx
+.REG .y
+The minor version number.
+.
+.TPx
+.REG .Y
+The revision number of groff.
+.
+.TPx
+.REG .z
+Name of current diversion.
+.
+.TPx
+.REG .zoom
+Zoom factor for current font (in multiples of 1/1000th; zero if no
+magnification).
+.PD
+.
+.
+.\" ====================================================================
+.SS "Writable Registers"
+.\" ====================================================================
+.
+The following registers can be read and written by the user.
+They have predefined default values, but these can be modified for
+customizing a document.
+.
+.
+.P
+.PD 0
+.TPx
+.REG %
+Current page number.
+.
+.TPx
+.REG c.
+Current input line number.
+.
+.TPx
+.REG ct
+Character type (set by width function
+.esc w ).
+.
+.TPx
+.REG dl
+Maximal width of last completed diversion.
+.
+.TPx
+.REG dn
+Height of last completed diversion.
+.
+.TPx
+.REG dw
+Current day of week (1\(en7).
+.
+.TPx
+.REG dy
+Current day of month (1\(en31).
+.
+.TPx
+.REG hours
+The number of hours past midnight.
+.
+Initialized at start-up.
+.
+.TPx
+.REG hp
+Current horizontal position at input line.
+.
+.TPx
+.REG llx
+Lower left x-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb\c
+).
+.
+.TPx
+.REG lly
+Lower left y-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb\c
+).
+.
+.TPx
+.REG ln
+Output line number.
+.
+.TPx
+.REG lsn
+The number of leading spaces of an input line.
+.
+.TPx
+.REG lss
+The horizontal space corresponding to the leading spaces of an input
+line.
+.
+.TPx
+.REG minutes
+The number of minutes after the hour.
+.
+Initialized at start-up.
+.
+.TPx
+.REG mo
+Current month (1\(en12).
+.
+.TPx
+.REG nl
+Vertical position of last printed text base-line.
+.
+.TPx
+.REG opmaxx
+.TPx
+.REG opmaxy
+.TPx
+.REG opminx
+.TPx
+.REG opminy
+These four registers mark the top left and bottom right hand corners of
+a box which encompasses all written glyphs.
+They are reset to \-1 by
+.escarg O 0
+or
+.escarg O 1 .
+.
+.TPx
+.REG rsb
+Like
+.register sb\c
+,
+but takes account of the heights and depths of glyphs.
+.
+.TPx
+.REG rst
+Like
+.register st\c
+,
+but takes account of the heights and depths of glyphs.
+.
+.TPx
+.REG sb
+Depth of string below base line (generated by width function
+.esc w ).
+.
+.TPx
+.REG seconds
+The number of seconds after the minute.
+.
+Initialized at start-up.
+.
+.TPx
+.REG skw
+Right skip width from the center of the last glyph in the
+.esc w
+argument.
+.
+.TPx
+.REG slimit
+If greater than 0, the maximum number of objects on the input stack.
+.
+If \[<=]0 there is no limit, i.e., recursion can continue until virtual
+memory is exhausted.
+.
+.TPx
+.REG ssc
+The amount of horizontal space (possibly negative) that should be
+added to the last glyph before a subscript (generated by width
+function
+.esc w ).
+.
+.TPx
+.REG st
+Height of string above base line (generated by width function
+.esc w ).
+.
+.TPx
+.REG systat
+The return value of the
+.I system()
+function executed by the last
+.request sy
+request.
+.
+.TPx
+.REG urx
+Upper right x-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb\c
+).
+.
+.TPx
+.REG ury
+Upper right y-coordinate (in PostScript units) of a given PostScript
+image (set by
+.request .psbb\c
+).
+.
+.TPx
+.REG year
+The current year (year 2000 compliant).
+.
+.TPx
+.REG yr
+Current year minus 1900.
+.
+For Y2K compliance use
+.register year
+instead.
+.
+.PD
+.
+.
+.\" ====================================================================
+.SH HYPHENATION
+.\" ====================================================================
+.
+The
+.REQ .hy
+request,
+given an integer argument,
+controls when hyphenation applies.
+.
+The default value is
+.BR 1 ,
+which enables hyphenation almost everywhere (see below).
+.
+Macro packages often override this default.
+.
+.
+.TP
+.B 1
+disables hyphenation only after the first and before the last
+character of a word.
+.
+.TP
+.B 2
+disables hyphenation only of the last word on a page or column.
+.
+.TP
+.B 4
+disables hyphenation only before the last two characters of a word.
+.
+.TP
+.B 8
+disables hyphenation only after the first two characters of a word.
+.
+.TP
+.B 16
+enables hyphenation before the last character of a word.
+.
+.TP
+.B 32
+enables hyphenation after the first character of a word.
+.
+.P
+The values are additive.
+.
+Some values cannot be used together because they contradict;
+for instance,
+4 and\~16;
+8 and\~32.
+.
+.
+.\" ====================================================================
+.SH UNDERLINING
+.\" ====================================================================
+.
+In the
+.I RUNOFF
+language, the underlining was quite easy.
+.
+But in
+.I roff
+this is much more difficult.
+.
+.
+.\" ====================================================================
+.SS Underlining with .ul
+.\" ====================================================================
+.
+There exists a
+.I groff
+request
+.B .ul
+(see above) that can underline the next or further source lines in
+.BR nroff ,
+but in
+.B troff
+it produces only a font change into
+.IR italic .
+.
+So this request is not really useful.
+.
+.
+.\" ====================================================================
+.SS Underlining with .UL from ms
+.\" ====================================================================
+.
+In the \[oq]ms\[cq] macro package in tmac/s.tmac
+.BR groff_ms (@MAN7EXT@),
+there is the macro
+.BR .UL .
+.
+But this works only in
+.BR troff ,
+not in
+.BR nroff .
+.
+.
+.\" ====================================================================
+.SS Underlining macro definitions
+.\" ====================================================================
+.
+So one can use the
+.I italic
+.B nroff
+idea from
+.B .ul
+and the
+.B troff
+definition
+in
+.I ms
+for writing a useful new macro, something like
+.
+.RS
+.EX
+\&.de UNDERLINE
+\&. ie n \[rs]\[rs]$1\[rs]f[I]\[rs]\[rs]$2\[rs]f[P]\[rs]\[rs]$3
+\&. el \[rs]\[rs]$1\[rs]Z\[aq]\[rs]\[rs]$2\[aq]\[rs]v\[aq].25m\[aq]\
+\[rs]D\[aq]l \[rs]w\[aq]\[rs]\[rs]$2\[aq]u 0\[aq]\[rs]v\[aq]\-.25m\
+\[aq]\[rs]\[rs]$3
+\&..
+.EE
+.RE
+.
+If
+.BR doclifter (1)
+makes trouble, change the macro name
+.B UNDERLINE
+into some 2-letter word, like
+.BR Ul .
+.
+Moreover change the font writing from
+.B \[rs]f[P]
+to
+.BR \[rs]fP .
+.
+.
+.\" ====================================================================
+.SS Underlining without macro definitions
+.\" ====================================================================
+.
+If one does not want to use macro definitions, e.g., when
+.B doclifter
+gets lost, use the following:
+.
+.RS
+.EX
+\&.ds u1 before
+\&.ds u2 in
+\&.ds u3 after
+\&.ie n \[rs]*[u1]\[rs]f[I]\[rs]*[u2]\[rs]f[P]\[rs]*[u3]
+\&.el \[rs]*[u1]\[rs]Z\[aq]\[rs]*[u2]\[aq]\[rs]v\[aq].25m\[aq]\[rs]D\
+\[aq]l \[rs]w\[aq]\[rs]*[u2]\[aq]u 0\[aq]\[rs]v\[aq]\-.25m\[aq]\[rs]*\
+[u3]
+.EE
+.RE
+.
+Due to
+.BR doclifter ,
+it might be necessary to change the variable writing
+.B \e[xy]
+and
+.B \e*[xy]
+into the strange ancient writing
+.B \e*(xy
+and
+.BR \e(xy ,
+and so on.
+.
+.
+.P
+Then these lines could look like
+.RS
+.EX
+\&.ds u1 before
+\&.ds u2 in
+\&.ds u3 after
+\&.ie n \[rs]*[u1]\[rs]fI\[rs]*(u2\[rs]fP\[rs]*(u3
+\&.el \[rs]*(u1\[rs]Z\[aq]\[rs]*(u2\[aq]\[rs]v\[aq].25m'\[rs]D\[aq]l \
+\[rs]w\[aq]\[rs]*(u2\[aq]u 0\[aq]\[rs]v\[aq]\-.25m\[aq]\[rs]*(u3
+.EE
+.RE
+.
+.
+.P
+The result looks like
+.RS
+.ft CR
+before
+\z\[ul]i\
+\z\[ul]n
+after
+.ft R
+.RE
+.
+.
+.\" ====================================================================
+.SS Underlining with Overstriking \ez and \e(ul
+.\" ====================================================================
+.
+There is another possibility for underlining by using overstriking
+with
+.BI \ez c
+(print
+.I c
+with zero width without spacing) and
+.B \e(ul
+(underline character).
+.
+This produces the underlining of 1 character, both in
+.B nroff
+and in
+.BR troff .
+.
+.
+.P
+For example the underlining of a character say
+.B t
+looks like
+.B \ez\e[ul]t
+or
+.B \ez\e(ult
+.
+.
+.P
+Longer words look then a bit strange, but a useful mode is to write
+each character into a whole own line.
+.
+To underlines the 3 character part "tar" of the word "start":
+.
+.RS
+.EX
+.br
+before s\[rs]
+\[rs]z\[rs][ul]t\[rs]
+\[rs]z\[rs][ul]a\[rs]
+\[rs]z\[rs][ul]r\[rs]
+t after
+.EE
+.RE
+.
+or
+.
+.RS
+.EX
+.br
+before s\[rs]
+\[rs]z\[rs](ult\[rs]
+\[rs]z\[rs](ula\[rs]
+\[rs]z\[rs](ulr\[rs]
+t after
+.EE
+.RE
+.
+.
+.P
+The result looks like
+.RS
+.ft CR
+before s\
+\z\[ul]t\
+\z\[ul]a\
+\z\[ul]r\
+t after
+.ft R
+.RE
+.
+.\" ====================================================================
+.SH COMPATIBILITY
+.\" ====================================================================
+.
+The differences between the groff language and classical troff as
+defined by
+[CSTR\~#54]
+are documented in
+.BR groff_diff (@MAN7EXT@).
+.
+.
+.P
+The groff system provides a compatibility mode, see
+.BR groff (@MAN1EXT@)
+on how to invoke this.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+This document was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg,
+is the primary
+.I groff
+manual.
+.
+You can browse it interactively with \(lqinfo groff\(rq.
+.
+Besides the gory details, it contains many examples.
+.
+.
+.TP
+.BR groff (@MAN1EXT@)
+the usage of the groff program and pointers to the documentation and
+availability of the groff system.
+.
+.TP
+.BR groff_diff (@MAN7EXT@)
+describes the differences between the groff language and classical
+troff.
+.
+.IP
+This is the authoritative document for the predefined language
+elements that are specific to groff.
+.
+.TP
+.BR groff_char (@MAN7EXT@)
+the predefined groff special characters (glyphs).
+.
+.TP
+.BR groff_font (@MAN5EXT@)
+the specification of fonts and the DESC file.
+.
+.TP
+.BR groff_tmac (@MAN5EXT@)
+contains an overview of available groff macro packages, instructions on
+how to interface them with a document, guidance on writing macro
+packages and using diversions, and historical information on macro
+package naming conventions.
+.TP
+.BR roff (@MAN7EXT@)
+the history of roff, the common parts shared by all roff systems, and
+pointers to further documentation.
+.
+.TP
+[CSTR\~#54]
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz
+Nroff/\:Troff User's Manual by Ossanna & Kernighan
+.UE
+\[em] the bible for classical troff.
+.
+.TP
+.I Wikipedia
+article about
+.I groff
+.UR https://\:en.wikipedia.org/\:wiki/\:Groff_%28software%29
+.UE .
+.
+.TP
+.I Tutorial about groff
+.UR dl.dropbox.com/\:u/\:4299293/\:grofftut.pdf
+Manas Laha - An Introduction to the GNU Groff Text Processing System
+.UE
+.
+.TP
+.I troff.org
+This is a collection of internet sites with classical
+.I roff
+documentations and other information.
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_7_C]
+.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/man/groff.man b/man/groff.man
deleted file mode 100644 (file)
index ca80f02..0000000
+++ /dev/null
@@ -1,4601 +0,0 @@
-'\" t
-.TH GROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff \- a short reference for the GNU roff language
-.
-.\" Before installation: <top-groff-source>/man/groff.man
-.\" After installation:  </usr or /usr/local>/share/man/man7/groff.7
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright \[co] 2000-2014 Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.  It is also
-available in the internet at
-.UR http://\:www.gnu.org/\:copyleft/\:fdl.html
-.UE .
-..
-.
-.de au
-This documentation was written by
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME
-and is appended and maintained by
-.MT wl@gnu.org
-Werner Lemberg
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do nr groff_C \n[.C]
-.cp 0
-.
-.\" --------------------------------------------------------------------
-.\" start of macro definitions
-.
-.de TPx
-.  TP 10n
-..
-.\" ---------------------------------------------------------------------
-.\" .Text anything ...
-.\"
-.\" All arguments are printed as text.
-.\"
-.de Text
-.  nop \)\\$*
-..
-.
-.\" --------- command line option ---------
-.
-.de option
-.  Text \f[CB]\\$*
-.  ft P
-..
-.
-.\" --------- characters ---------
-.
-.de squoted_char
-.  Text \[oq]\f[CB]\\$1\f[]\[cq]\\$2
-..
-.de dquoted_char
-.  Text \[lq]\f[CB]\\$1\f[]\[rq]\\$2
-..
-.\" --------- requests ---------
-.
-.\" synopsis of a request
-.de REQ
-.  ie \n[.$]=1 \{\
-.    Text \f[CB]\\$1\f[]
-.  \}
-.  el \{\
-.    Text \f[CB]\\$1\~\f[]\f[I]\\$2\f[]
-.  \}
-..
-.
-.\" reference of a request
-.de request
-.  BR \\$*
-..
-.
-.\" --------- numerical elements ---------
-.
-.\" number with a trailing unit
-.de scalednumber
-.  Text \\$1\^\f[CB]\\$2\f[]\\$3\f[R]
-.  ft P
-..
-.
-.\" representation of units within the text
-.de scaleindicator
-.  Text \f[CB]\\$1\f[]\\$2\f[R]
-.  ft P
-..
-.
-.\" representation of mathematical operators within the text
-.de operator
-.  squoted_char \\$@
-..
-.
-.
-.\" --------- escape sequences ---------
-.
-.\" ---------------------------------------------------------------------
-.\" .ESC name [arg]
-.\"
-.\" Synopsis of an escape sequence, optionally with argument
-.\" Args   : 1 or 2; `name' obligatory, `arg' optional
-.\"   name : suitable name for an escape sequence (c, (xy, [long])
-.\"   arg  : arbitrary word
-.\" Result : prints \namearg, where `name' is in CB, `arg' in I
-.\"
-.de ESC
-.  Text "\f[CB]\e\\$1\,\f[I]\\$2\/\fR"
-..
-.\" ---------------------------------------------------------------------
-.\" .ESC[] name arg
-.\"
-.\" Synopsis for escape sequence with a bracketed long argument
-.\" Args   : 2 obligatory
-.\"   name : suitable name for an escape sequence (c, (xy, [long])
-.\"   arg  : arbitrary text
-.\" Result : prints \name[arg], where `name' is in CB, `arg' in I
-.\"
-.de ESC[]
-.  Text "\f[CB]\e\\$1\[lB]\f[]\,\f[I]\\$2\/\f[]\f[CB]\[rB]\f[]"
-..
-.\" ---------------------------------------------------------------------
-.\" .ESCq name arg
-.\"
-.\" Synopsis for escape sequence with a bracketed long argument
-.\" Args   : 2 obligatory
-.\"   name : suitable name for an escape sequence (c, (xy, [long])
-.\"   arg  : arbitrary text
-.\" Result : prints \name'arg', where `name' is in CB, `arg' in I
-.\"
-.de ESCq
-.  Text "\f[CB]\e\\$1\[cq]\f[]\,\f[I]\\$2\/\f[]\f[CB]\[cq]\f[]"
-..
-.\" ---------------------------------------------------------------------
-.\" .ESC? arg
-.\"
-.\" Synopsis for escape sequence with a bracketed long argument
-.\" Args   : 1 obligatory
-.\"   arg  : arbitrary text
-.\" Result : prints `\?arg?', where the `?' are in CB, `arg' in I
-.\"
-.de ESC?
-.  Text "\f[CB]\e?\,\f[I]\\$1\/\f[CB]?\f[R]"
-..
-.\" ---------------------------------------------------------------------
-.\" .esc name [punct]
-.\"
-.\" Reference of an escape sequence (no args), possibly punctuation
-.\" Args    : 1 obligatory
-.\"   name  : suitable name for an escape sequence (c, (xy, [long])
-.\"   punct : arbitrary
-.\" Result  : prints \name, where `name' is in B, `punct' in R
-.\"
-.de esc
-.  BR "\e\\$1" \\$2
-..
-.\" ---------------------------------------------------------------------
-.\" .escarg name arg [punct]
-.\"
-.\" Reference of an escape sequence (no args)
-.\" Args    : 1 obligatory, 1 optional
-.\"   name  : suitable name for an escape sequence (c, (xy, [long])
-.\"   arg   : arbitrary word
-.\" Result  : prints \namearg, where
-.\"           `name' is in B, `arg' in I
-.\"
-.de escarg
-.  Text \f[B]\e\\$1\f[]\,\f[I]\\$2\/\f[]\\$3
-..
-.\" ---------------------------------------------------------------------
-.\" .esc[] name arg [punct]
-.\"
-.\" Reference for escape sequence with a bracketed long argument
-.\" Args   : 2 obligatory
-.\"   name : suitable name for an escape sequence (c, (xy, [long])
-.\"   arg  : arbitrary text
-.\" Result : prints \name[arg], where `name' is in CB, `arg' in CI
-.\"
-.de esc[]
-.  Text \f[CB]\e\\$1\[lB]\f[]\,\f[CI]\\$2\/\f[]\f[CB]\[rB]\f[]\\$3
-..
-.
-.\" ---------------------------------------------------------------------
-.\" .escq name arg
-.\"
-.\" Reference for escape sequence with a bracketed long argument
-.\" Args   : 2 obligatory
-.\"   name : suitable name for an escape sequence (c, (xy, [long])
-.\"   arg  : arbitrary text
-.\" Result : prints \name'arg', where `name' is in CB, `arg' in CI
-.\"
-.de escq
-.  Text \f[CB]\e\\$1\[cq]\f[]\,\f[CI]\\$2\/\f[]\f[CB]\[cq]\f[]\\$3
-..
-.
-.\" --------- strings ---------
-.
-.\" synopsis for string, with \*[]
-.de STRING
-.  Text \[rs]*[\f[CB]\\$1\f[]] \\$2
-..
-.\" synopsis for a long string
-.de string
-.  if \n[.$]=0 \
-.    return
-.  Text \f[CB]\[rs]*\[lB]\\$1\[rB]\f[]\\$2
-..
-.
-.\" --------- registers ---------
-.
-.\" synopsis for registers, with \n[]
-.de REG
-.  Text \[rs]n[\f[CB]\\$1\f[]]
-..
-.\" reference of a register, without decoration
-.de register
-.  Text register
-.  BR \\$*
-..
-.
-.\" end of macro definitions
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The name
-.I groff
-stands for
-.I GNU roff
-and is the free implementation of the roff type-setting system.
-.
-See
-.BR roff (@MAN7EXT@)
-for a survey and the background of the groff system.
-.
-.
-.P
-This document gives only short descriptions of the predefined roff
-language elements as used in groff.
-.
-Both the classical features and the groff extensions are provided.
-.
-.
-.P
-Historically, the
-.I roff language
-was called
-.IR troff .
-.I groff
-is compatible with the classical system and provides proper
-extensions.
-.
-So in GNU, the terms
-.IR roff ,
-.IR troff ,
-and
-.I groff language
-could be used as synonyms.
-.
-However
-.I troff
-slightly tends to refer more to the classical aspects, whereas
-.I groff
-emphasizes the GNU extensions, and
-.I roff
-is the general term for the language.
-.
-.
-.P
-This file is only a short version of the complete documentation that
-is found in the
-.I groff
-.BR info (1)
-file, which contains more detailed, actual, and concise information.
-.
-.P
-The general syntax for writing groff documents is relatively easy, but
-writing extensions to the roff language can be a bit harder.
-.
-.
-.P
-The roff language is line-oriented.
-.
-There are only two kinds of lines, control lines and text lines.
-.
-The control lines start with a control character, by default a period
-.dquoted_char .
-or a single quote
-.dquoted_char \[aq] ;
-all other lines are text lines.
-.
-.
-.P
-.B Control lines
-represent commands, optionally with arguments.
-.
-They have the following syntax.
-.
-The leading control character can be followed by a command name;
-arguments, if any, are separated by spaces (but not tab characters)
-from the command name and among themselves, for example,
-.RS
-.P
-.Text .command_name arg1 arg2
-.RE
-.
-.
-.P
-For indentation, any number of space or tab characters can be inserted
-between the leading control character and the command name, but the
-control character must be on the first position of the line.
-.
-.
-.P
-.B Text lines
-represent the parts that is printed.
-They can be modified by escape sequences, which are recognized by a
-leading backslash
-.squoted_char \[rs] .
-These are in-line or even in-word formatting elements or functions.
-.
-Some of these take arguments separated by single quotes
-.dquoted_char \[aq] ,
-others are regulated by a length encoding introduced by an open
-parenthesis
-.squoted_char (
-or enclosed in brackets
-.squoted_char [
-and
-.squoted_char ] .
-.
-.
-.P
-The roff language provides flexible instruments for writing language
-extension, such as macros.
-.
-When interpreting macro definitions, the roff system enters a special
-operating mode, called the
-.BR "copy mode" .
-.
-.
-.P
-The copy mode behaviour can be quite tricky, but there are some rules
-that ensure a safe usage.
-.
-.IP 1.
-Printable backslashes must be denoted as
-.esc e .
-To be more precise,
-.esc e
-represents the current escape character.
-.
-To get a backslash glyph, use
-.esc (rs
-or
-.esc [rs] .
-.IP 2.
-Double all backslashes.
-.IP 3.
-Begin all text lines with the special non-spacing character
-.esc & .
-.
-.
-.P
-This does not produce the most efficient code, but it should work as a
-first measure.
-.
-For better strategies, see the groff info file and
-.BR groff_tmac (@MAN5EXT@).
-.
-.
-.P
-Reading roff source files is easier, just reduce all double backslashes
-to a single one in all macro definitions.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "GROFF ELEMENTS"
-.\" --------------------------------------------------------------------
-.
-The roff language elements add formatting information to a text file.
-.
-The fundamental elements are predefined commands and variables that
-make roff a full-blown programming language.
-.
-.
-.P
-There are two kinds of roff commands, possibly with arguments.
-.B Requests
-are written on a line of their own starting with a dot
-.squoted_char .
-or a
-.dquoted_char \[aq] ,
-whereas
-.B Escape sequences
-are in-line functions and in-word formatting elements starting with a
-backslash
-.squoted_char \[rs] .
-.
-.
-.P
-The user can define her own formatting commands using the
-.request de
-request.
-.
-These commands are called
-.BR macros ,
-but they are used exactly like requests.
-.
-Macro packages are pre-defined sets of macros written in the groff
-language.
-.
-A user\[aq]s possibilities to create escape sequences herself is very
-limited, only special characters can be mapped.
-.
-.
-.P
-The groff language provides several kinds of variables with
-different interfaces.
-.
-There are pre-defined variables, but the user can define her own
-variables as well.
-.
-.
-.P
-.B String
-variables store character sequences.
-.
-They are set with the
-.request ds
-request and retrieved by the
-.esc *
-escape sequences.
-.
-Strings can have variables.
-.
-.
-.P
-.B Register
-variables can store numerical values, numbers with a scale unit, and
-occasionally string-like objects.
-.
-They are set with the
-.request nr
-request and retrieved by the
-.esc n
-escape sequences.
-.
-.
-.P
-.B Environments
-allow the user to temporarily store global formatting parameters like
-line length, font size, etc.\& for later reuse.
-.
-This is done by the
-.request ev
-request.
-.
-.
-.P
-.B Fonts
-are identified either by a name or by an internal number.
-.
-The current font is chosen by the
-.request ft
-request or by the
-.esc f
-escape sequences.
-.
-Each device has special fonts, but the following fonts are available
-for all devices.
-.B R
-is the standard font Roman.
-.B B
-is its
-.B bold
-counterpart.
-.
-The
-.I italic
-font is called
-.B I
-and is available everywhere, but on text devices it is displayed as an
-underlined Roman font.
-.
-For the graphical output devices, there exist constant-width pendants
-of these fonts,
-.BR CR ,
-.BR CI ,
-and
-.BR CB .
-On text devices, all glyphs have a constant width anyway.
-.
-.
-.P
-.B Glyphs
-are visual representation forms of
-.BR characters .
-In groff, the distinction between those two elements is not always
-obvious (and a full discussion is beyond the scope of this man page).
-.
-A first approximation is that glyphs have a specific size and
-colour and are taken from a specific font; they can\[aq]t be modified any
-more \[en] characters are the input, and glyphs are the output.
-.
-As soon as an output line has been generated, it no longer contains
-characters but glyphs.
-.
-In this man page, we use either \[oq]glyph\[cq] or
-\[oq]character\[cq], whatever is more appropriate.
-.
-.
-.P
-Moreover, there are some advanced roff elements.
-.
-A
-.B diversion
-stores (formatted) information into a macro for later usage.
-.
-A
-.B trap
-is a positional condition like a certain number of lines from page top
-or in a diversion or in the input.
-.
-Some action can be prescribed to be run automatically when the
-condition is met.
-.
-.
-.P
-More detailed information and examples can be found in the groff info
-file.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "CONTROL CHARACTERS"
-.\" --------------------------------------------------------------------
-.
-There is a small set of characters that have a special controlling
-task in certain conditions.
-.
-.TP
-\&\f[CB].\f[]
-A dot is only special at the beginning of a line or after the
-condition in the requests
-.request if ,
-.request ie ,
-.request el ,
-and
-.request while .
-There it is the control character that introduces a request (or macro).
-.
-By using the
-.request cc
-request, the control character can be set to a different character,
-making the dot
-.squoted_char .
-a non-special character.
-.
-.IP ""
-In all other positions, it just means a dot character.
-.
-In text paragraphs, it is advantageous to start each sentence at a
-line of its own.
-.
-.TP
-\&\f[CB]\[aq]\f[]
-The single quote has two controlling tasks.
-.
-At the beginning of a line and in the conditional requests it is the
-non-breaking control character.
-.
-That means that it introduces a request like the dot, but with the
-additional property that this request doesn\[aq]t cause a linebreak.
-.
-By using the
-.request c2
-request, the non-break control character can be set to a different
-character.
-.
-.IP ""
-As a second task, it is the most commonly used argument separator in
-some functional escape sequences (but any pair of characters not part
-of the argument do work).
-.
-In all other positions, it denotes the single quote or apostrophe
-character.
-.
-Groff provides a printable representation with the
-.esc (cq
-escape sequence.
-.
-.TP
-\&\f[CB]\[dq]\f[]
-The double quote is used to enclose arguments in macros (but not in
-requests and strings).
-.
-In the
-.request ds
-and
-.request as
-requests, a leading double quote in the argument is stripped off,
-making everything else afterwards the string to be defined (enabling
-leading whitespace).
-.
-The escaped double quote
-.esc \[dq]
-introduces a comment.
-.
-Otherwise, it is not special.
-.
-Groff provides a printable representation with the
-.esc (dq
-escape sequence.
-.
-.TP
-\&\f[CB]\e\f[]
-The backslash usually introduces an escape sequence (this can be
-changed with the
-.request ec
-request).
-.
-A printed version of the escape character is the
-.esc e
-escape; a backslash glyph can be obtained by
-.esc (rs .
-.
-.TP
-\&\f[CB](\f[]
-The open parenthesis is only special in escape sequences when
-introducing an escape name or argument consisting of exactly two
-characters.
-.
-In groff, this behaviour can be replaced by the \f[CB][]\f[] construct.
-.
-.TP
-\&\f[CB][\f[]
-The opening bracket is only special in groff escape sequences; there
-it is used to introduce a long escape name or long escape argument.
-.
-Otherwise, it is non-special, e.g.\& in macro calls.
-.
-.TP
-\&\f[CB]]\f[]
-The closing bracket is only special in groff escape sequences; there
-it terminates a long escape name or long escape argument.
-.
-Otherwise, it is non-special.
-.
-.TP
-\f[CI]space\f[]
-Space characters are only functional characters.
-.
-They separate the arguments in requests, macros, and strings, and the words
-in text lines.
-.
-They are subject to groff\[aq]s horizontal spacing calculations.
-.
-To get a defined space width, escape sequences like
-.squoted_char "\[rs]\ "
-(this is the escape character followed by a space),
-.esc | ,
-.esc ^ ,
-or
-.esc h
-should be used.
-.
-.IP \f[CI]newline\f[]
-In text paragraphs, newlines mostly behave like space characters.
-.
-Continuation lines can be specified by an escaped newline, i.e., by
-specifying a backslash
-.squoted_char \[rs]
-as the last character of a line.
-.
-.IP \f[CI]tab\f[]
-If a tab character occurs during text the interpreter makes a
-horizontal jump to the next pre-defined tab position.
-.
-There is a sophisticated interface for handling tab positions.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "NUMERICAL EXPRESSIONS"
-.\" --------------------------------------------------------------------
-.
-A
-.B numerical value
-is a signed or unsigned integer or float with or without an appended
-scaling indicator.
-.
-A
-.B scaling indicator
-is a one-character abbreviation for a unit of measurement.
-.
-A number followed by a scaling indicator signifies a size value.
-.
-By default, numerical values do not have a scaling indicator, i.e., they
-are normal numbers.
-.
-.
-.P
-The
-.I roff
-language defines the following scaling indicators.
-.
-.
-.P
-.PD 0
-.RS
-.
-.TPx
-.B c
-Centimeter
-.
-.TPx
-.B i
-Inch
-.
-.TPx
-.B P
-Pica\ \[eq]\ 1/6\ inch
-.
-.TPx
-.B p
-Point\ \[eq]\ 1/72\ inch
-.
-.TPx
-.B m
-Em\ \[eq]\ \f[R]the font size in points (approx.\& width of letter
-\[oq]\f[CR]m\f[R]\[cq])
-.
-.TPx
-.B M
-100\^th \f[R]of an \f[CR]Em
-.
-.TPx
-.B n
-En\ \[eq]\ Em/2
-.
-.TPx
-.B u
-Basic unit for actual output device
-.
-.TPx
-.B v
-Vertical line space in basic units
-scaled point\ \[eq]\ 1/\f[CI]sizescale\f[R] of a point (defined in
-font \f[I]DESC\f[] file)
-.
-.TPx
-.B f
-Scale by 65536.
-.RE
-.PD
-.
-.
-.P
-.B Numerical expressions
-are combinations of the numerical values defined above with the
-following arithmetical operators already defined in classical troff.
-.
-.
-.P
-.PD 0
-.RS
-.
-.TPx
-.B +
-Addition
-.
-.TPx
-.B \-
-Subtraction
-.
-.TPx
-.B *
-Multiplication
-.
-.TPx
-.B /
-Division
-.
-.TPx
-.B %
-Modulo
-.
-.TPx
-.B =
-Equals
-.
-.TPx
-.B ==
-Equals
-.
-.TPx
-.B <
-Less than
-.
-.TPx
-.B >
-Greater than
-.
-.TPx
-.B <=
-Less or equal
-.
-.TPx
-.B >=
-Greater or equal
-.
-.TPx
-.B &
-Logical and
-.
-.TPx
-.B :
-Logical or
-.
-.TPx
-.B !
-Logical not
-.
-.TPx
-.B (
-Grouping of expressions
-.
-.TPx
-.B )
-Close current grouping
-.
-.RE
-.PD
-.
-.
-.P
-Moreover,
-.I groff
-added the following operators for numerical expressions:
-.
-.
-.P
-.PD 0
-.RS
-.
-.TPx
-\f[I]e1\/\f[CB]>?\,\f[I]e2\f[R]
-The maximum of
-.I e1
-and
-.IR e2 .
-.
-.TPx
-\f[I]e1\/\f[CB]<?\,\f[I]e2\f[R]
-The minimum of
-.I e1
-and
-.IR e2 .
-.
-.TPx
-\f[CB](\,\f[I]c\/\f[CB];\,\f[I]e\/\f[CB])\f[R]
-Evaluate
-.I e
-using
-.I c
-as the default scaling indicator.
-.
-.RE
-.PD
-.
-.
-.P
-For details see the groff info file.
-.
-.
-.\" --------------------------------------------------------------------
-.SH CONDITIONS
-.\" --------------------------------------------------------------------
-.
-.B Conditions
-occur in tests raised by the
-.request if ,
-.request ie ,
-and the
-.request while
-requests.
-.
-The following table characterizes the different types of conditions.
-.
-.P
-.
-.PD 0
-.RS
-.
-.TPx
-.I N
-A numerical expression
-.I N
-yields true if its value is greater than\~0.
-.
-.TPx
-.BI ! N
-True if the value of
-.I N
-is\~0 (see below).
-.
-.TPx
-.BI \[aq] s1 \[aq] s2 \[aq]
-True if string\~\c
-.I s1
-is identical to string\~\c
-.IR s2 .
-.
-.TPx
-.BI !\[aq] s1 \[aq] s2 \[aq]
-True if string\~\c
-.I s1
-is not identical to string\~\c
-.I s2
-(see below).
-.
-.TPx
-.BI c ch
-True if there is a glyph\~\c
-.I ch
-available.
-.
-.TPx
-.BI d name
-True if there is a string, macro, diversion, or request called
-.IR name .
-.
-.TPx
-.B e
-Current page number is even.
-.
-.TPx
-.B o
-Current page number is odd.
-.
-.TPx
-.BI m name
-True if there is a color called
-.IR name .
-.
-.TPx
-.B n
-Formatter is
-.BR nroff .
-.
-.TPx
-.BI r reg
-True if there is a register named
-.IR reg .
-.
-.TPx
-.B t
-Formatter is
-.BR troff .
-.
-.TPx
-.BI F font
-True if there exists a font named
-.IR font .
-.
-.TPx
-.BI S style
-True if a style named
-.I style
-has been registered.
-.
-.RE
-.PD
-.
-.
-.P
-Note that the
-.B !
-operator may only appear at the beginning of an expression,
-and negates the entire expression.
-This maintains bug-compatibility with AT&T
-.IR troff .
-.
-.
-.\" --------------------------------------------------------------------
-.SH REQUESTS
-.\" --------------------------------------------------------------------
-.
-This section provides a short reference for the predefined requests.
-.
-In groff, request, macro, and string names can be arbitrarily long.
-.
-No bracketing or marking of long names is needed.
-.
-.
-.P
-Most requests take one or more arguments.
-.
-The arguments are separated by space characters (no tabs!); there is
-no inherent limit for their length or number.
-.
-.
-.P
-Some requests have optional arguments with a different behaviour.
-.
-Not all of these details are outlined here.
-.
-Refer to the groff info file and
-.BR groff_diff (@MAN7EXT@)
-for all details.
-.
-.
-.P
-In the following request specifications, most argument names were
-chosen to be descriptive.
-.
-Only the following denotations need clarification.
-.
-.
-.P
-.PD 0
-.RS
-.
-.TPx
-.I c
-denotes a single character.
-.
-.TPx
-.I font
-a font either specified as a font name or a font number.
-.
-.TPx
-.I anything
-all characters up to the end of the line or within
-.esc {
-and
-.esc } .
-.
-.TPx
-.I n
-is a numerical expression that evaluates to an integer value.
-.
-.TPx
-.I N
-is an arbitrary numerical expression, signed or unsigned.
-.
-.TPx
-.I \[+-]N
-has three meanings depending on its sign, described below.
-.
-.RE
-.PD
-.
-.
-.P
-If an expression defined as
-.I \[+-]N
-starts with a
-.squoted_char +
-sign the resulting value of the expression is added to an already
-existing value inherent to the related request, e.g.\& adding to a number
-register.
-.
-If the expression starts with a
-.squoted_char -
-the value of the expression is subtracted from the request value.
-.
-.
-.P
-Without a sign,
-.I N
-replaces the existing value directly.
-.
-To assign a negative number either prepend\~0 or enclose the negative
-number in parentheses.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Request Short Reference"
-.\" --------------------------------------------------------------------
-.
-.PD 0
-.
-.TPx
-.REQ .
-Empty line, ignored.
-.
-Useful for structuring documents.
-.
-.TPx
-.REQ .\e\[dq] "anything"
-Complete line is a comment.
-.
-.TPx
-.REQ .ab "string"
-Print
-.I string
-on standard error, exit program.
-.
-.TPx
-.REQ .ad
-Begin line adjustment for output lines in current adjust mode.
-.
-.TPx
-.REQ .ad "c"
-Start line adjustment in mode
-.I c
-(\f[CI]c\/\f[]\f[CR]\|\^\[eq]\|l,r,c,b,n\f[]).
-.
-.TPx
-.REQ .af "register c"
-Assign format
-.I c
-to
-.I register
-(\f[CI]c\/\f[]\f[CR]\|\^\[eq]\|l,i,I,a,A\f[]).
-.
-.TPx
-.REQ .aln "alias register"
-Create alias name for
-.IR register .
-.
-.TPx
-.REQ .als "alias object"
-Create alias name for request, string, macro, or diversion
-.IR object .
-.
-.TPx
-.REQ .am "macro"
-Append to
-.I macro
-until
-.B ..\&
-is encountered.
-.
-.TPx
-.REQ .am "macro end"
-Append to
-.I macro
-until
-.BI . end
-is called.
-.
-.TPx
-.REQ .am1 "macro"
-Same as
-.request .am
-but with compatibility mode switched off during macro expansion.
-.
-.TPx
-.REQ .am1 "macro end"
-Same as
-.request .am
-but with compatibility mode switched off during macro expansion.
-.
-.TPx
-.REQ .ami "macro"
-Append to a macro whose name is contained in the string register
-.I macro
-until
-.B ..\&
-is encountered.
-.
-.TPx
-.REQ .ami "macro end"
-Append to a macro indirectly.
-.I macro
-and
-.I end
-are string registers whose contents are interpolated for the macro name
-and the end macro, respectively.
-.
-.TPx
-.REQ .ami1 "macro"
-Same as
-.request .ami
-but with compatibility mode switched off during macro expansion.
-.
-.TPx
-.REQ .ami1 "macro end"
-Same as
-.request .ami
-but with compatibility mode switched off during macro expansion.
-.
-.TPx
-.REQ .as "stringvar anything"
-Append
-.I anything
-to
-.IR stringvar .
-.
-.TPx
-.REQ .as1 "stringvar anything"
-Same as
-.request .as
-but with compatibility mode switched off during string expansion.
-.
-.TPx
-.REQ .asciify "diversion"
-Unformat ASCII characters, spaces, and some escape sequences in
-.IR diversion .
-.
-.TPx
-.REQ .backtrace
-Print a backtrace of the input on stderr.
-.
-.TPx
-.REQ .bd "font N"
-Embolden
-.I font
-by
-.IR N \\-1
-units.
-.
-.TPx
-.REQ .bd "S font N"
-Embolden Special Font
-.I S
-when current font is
-.IR font .
-.
-.TPx
-.REQ .blm
-Unset the blank line macro.
-.
-.TPx
-.REQ .blm "macro"
-Set the blank line macro to
-.IR macro .
-.
-.TPx
-.REQ .box
-End current diversion.
-.
-.TPx
-.REQ .box "macro"
-Divert to
-.IR macro ,
-omitting a partially filled line.
-.
-.TPx
-.REQ .boxa
-End current diversion.
-.
-.TPx
-.REQ .boxa "macro"
-Divert and append to
-.IR macro ,
-omitting a partially filled line.
-.
-.TPx
-.REQ .bp
-Eject current page and begin new page.
-.
-.TPx
-.REQ .bp "\[+-]N"
-Eject current page; next page number
-.IR \[+-]N .
-.
-.TPx
-.REQ .br
-Line break.
-.
-.TPx
-.REQ .brp
-Break and spread output line.
-Same as
-.esc p .
-.
-.TPx
-.REQ .break
-Break out of a while loop.
-.
-.TPx
-.REQ .c2
-Reset no-break control character to
-.dquoted_char \[aq] .
-.
-.TPx
-.REQ .c2 "c"
-Set no-break control character to
-.IR c .
-.
-.TPx
-.REQ .cc
-Reset control character to
-.squoted_char . .
-.
-.TPx
-.REQ .cc "c"
-Set control character to
-.IR c .
-.
-.TPx
-.REQ .ce
-Center the next input line.
-.
-.TPx
-.REQ .ce "N"
-Center following
-.I N
-input lines.
-.
-.TPx
-.REQ .cf "filename"
-Copy contents of file
-.I filename
-unprocessed to stdout or to the diversion.
-.
-.TPx
-.REQ .cflags "mode c1 c2 .\|.\|.\&"
-Treat characters
-.IR c1 ,
-.IR c2 ,
-.I .\|.\|.\&
-according to
-.I mode
-number.
-.
-.TPx
-.REQ .ch "trap N"
-Change
-.I trap
-location
-to
-.IR N .
-.
-.TPx
-.REQ .char "c anything"
-Define entity
-.I c
-as string
-.IR anything .
-.
-.TPx
-.REQ .chop "object"
-Chop the last character off macro, string, or diversion
-.IR object .
-.
-.TPx
-.REQ .class "name c1 c2 .\|.\|.\&"
-Assign a set of characters, character ranges, or classes
-.IR c1 ,
-.IR c2 ,
-.I .\|.\|.\&
-to
-.IR name .
-.
-.TPx
-.REQ .close "stream"
-Close the
-.IR stream .
-.
-.TPx
-.REQ .color
-Enable colors.
-.
-.TPx
-.REQ .color "N"
-If
-.I N
-is zero disable colors, otherwise enable them.
-.
-.TPx
-.REQ .composite "from to"
-Map glyph name
-.I from
-to glyph name
-.I to
-while constructing a composite glyph name.
-.
-.TPx
-.REQ .continue
-Finish the current iteration of a while loop.
-.
-.TPx
-.REQ .cp
-Enable compatibility mode.
-.
-.TPx
-.REQ .cp "N"
-If
-.I N
-is zero disable compatibility mode, otherwise enable it.
-.
-.TPx
-.REQ .cs "font N M"
-Set constant character width mode for
-.I font
-to
-.IR N /36
-ems with em
-.IR M .
-.
-.TPx
-.REQ .cu "N"
-Continuous underline in nroff, like
-.request .ul
-in troff.
-.
-.TPx
-.REQ .da
-End current diversion.
-.
-.TPx
-.REQ .da "macro"
-Divert and append to
-.IR macro .
-.
-.TPx
-.REQ .de "macro"
-Define or redefine
-.I macro
-until
-.B ..\&
-is encountered.
-.
-.TPx
-.REQ .de "macro end"
-Define or redefine
-.I macro
-until
-.BI . end
-is called.
-.
-.TPx
-.REQ .de1 "macro"
-Same as
-.request .de
-but with compatibility mode switched off during macro expansion.
-.
-.TPx
-.REQ .de1 "macro end"
-Same as
-.request .de
-but with compatibility mode switched off during macro expansion.
-.
-.TPx
-.REQ .defcolor "color scheme component"
-Define or redefine a color with name
-.IR color .
-.I scheme
-can be
-.BR rgb ,
-.BR cym ,
-.BR cymk ,
-.BR gray ,
-or
-.BR grey .
-.I component
-can be single components specified as fractions in the range 0 to 1
-(default scaling indicator\~\c
-.scaleindicator f ),
-as a string of two-digit hexadecimal color components with a leading
-.BR # ,
-or as a string of four-digit hexadecimal components with two leading
-.BR # .
-The color
-.B default
-can\[aq]t be redefined.
-.
-.TPx
-.REQ .dei "macro"
-Define or redefine a macro whose name is contained in the string register
-.I macro
-until
-.B ..\&
-is encountered.
-.
-.TPx
-.REQ .dei "macro end"
-Define or redefine a macro indirectly.
-.I macro
-and
-.I end
-are string registers whose contents are interpolated for the macro name
-and the end macro, respectively.
-.
-.TPx
-.REQ .dei1 "macro"
-Same as
-.request .dei
-but with compatibility mode switched off during macro expansion.
-.
-.TPx
-.REQ .dei1 "macro end"
-Same as
-.request .dei
-but with compatibility mode switched off during macro expansion.
-.
-.TPx
-.REQ .device "anything"
-Write
-.I anything
-to the intermediate output as a device control function.
-.
-.TPx
-.REQ .devicem "name"
-Write contents of macro or string
-.I name
-uninterpreted to the intermediate output as a device control function.
-.
-.TPx
-.REQ .di
-End current diversion.
-.
-.TPx
-.REQ .di "macro"
-Divert to
-.IR macro .
-.
-.TPx
-.REQ .do "name"
-Interpret
-.BI . name
-with compatibility mode disabled.
-.
-.TPx
-.REQ .ds "stringvar anything"
-Set
-.I stringvar
-to
-.IR anything .
-.
-.TPx
-.REQ .ds1 "stringvar anything"
-Same as
-.request .ds
-but with compatibility mode switched off during string expansion.
-.
-.TPx
-.REQ .dt "N trap"
-Set diversion trap to position
-.I N
-(default scaling indicator\~\c
-.scaleindicator v ).
-.
-.TPx
-.REQ .ec
-Reset escape character to
-.squoted_char \[rs] .
-.
-.TPx
-.REQ .ec "c"
-Set escape character to
-.IR c .
-.
-.TPx
-.REQ .ecr
-Restore escape character saved with
-.request .ecs .
-.
-.TPx
-.REQ .ecs
-Save current escape character.
-.
-.TPx
-.REQ .el "anything"
-Else part for if-else (\c
-.request ie )
-request.
-.
-.TPx
-.REQ .em "macro"
-The
-.I macro
-is run after the end of input.
-.
-.TPx
-.REQ .eo
-Turn off escape character mechanism.
-.
-.TPx
-.REQ .ev
-Switch to previous environment and pop it off the stack.
-.
-.TPx
-.REQ .ev "env"
-Push down environment number or name
-.I env
-to the stack and switch to it.
-.
-.TPx
-.REQ .evc "env"
-Copy the contents of environment
-.I env
-to the current environment.
-No pushing or popping.
-.
-.TPx
-.REQ .ex
-Exit from roff processing.
-.
-.TPx
-.REQ .fam
-Return to previous font family.
-.
-.TPx
-.REQ .fam "name"
-Set the current font family to
-.IR name .
-.
-.TPx
-.REQ .fc
-Disable field mechanism.
-.
-.TPx
-.REQ .fc "a"
-Set field delimiter to\~\c
-.I a
-and pad glyph to space.
-.
-.TPx
-.REQ .fc "a b"
-Set field delimiter to\~\c
-.I a
-and pad glyph to\~\c
-.IR b .
-.
-.TPx
-.REQ .fchar "c anything"
-Define fallback character (or glyph)
-.I c
-as string
-.IR anything .
-.
-.TPx
-.REQ .fcolor
-Set fill color to previous fill color.
-.
-.TPx
-.REQ .fcolor "c"
-Set fill color to
-.IR c .
-.
-.TPx
-.REQ .fi
-Fill output lines.
-.
-.TPx
-.REQ .fl
-Flush output buffer.
-.
-.TPx
-.REQ .fp "n font"
-Mount
-.I font
-on position
-.IR n .
-.
-.TPx
-.REQ .fp "n internal external"
-Mount font with long
-.I external
-name to short
-.I internal
-name on position
-.IR n .
-.
-.TPx
-.REQ .fschar "f c anything"
-Define fallback character (or glyph)
-.I c
-for font
-.I f
-as string
-.IR anything .
-.
-.TPx
-.REQ .fspecial "font"
-Reset list of special fonts for
-.I font
-to be empty.
-.
-.TPx
-.REQ .fspecial "font s1 s2 .\|.\|.\&"
-When the current font is
-.IR font ,
-then the fonts
-.IR s1 ,
-.IR s2 ,
-.I .\|.\|.\&
-are special.
-.
-.TPx
-.REQ .ft
-Return to previous font.
-Same as
-.request \[rs]f[]
-or
-.request \[rs]fP .
-.
-.TPx
-.REQ .ft "font"
-Change to font name or number
-.IR font ;
-same as
-.esc[] f font
-escape sequence.
-.
-.TPx
-.REQ .ftr "font1 font2"
-Translate
-.I font1
-to
-.IR font2 .
-.
-.TPx
-.REQ .fzoom "font"
-Don\[aq]t magnify
-.IR font .
-.
-.TPx
-.REQ .fzoom "font zoom"
-Set zoom factor for
-.I font
-(in multiples of 1/1000th).
-.
-.TPx
-.REQ .gcolor
-Set glyph color to previous glyph color.
-.
-.TPx
-.REQ .gcolor "c"
-Set glyph color to
-.IR c .
-.
-.TPx
-.REQ .hc
-Remove additional hyphenation indicator character.
-.
-.TPx
-.REQ .hc "c"
-Set up additional hyphenation indicator character\~\c
-.IR c .
-.
-.TPx
-.REQ .hcode "c1 code1 c2 code2 .\|.\|.\&"
-Set the hyphenation code of character
-.I c1
-to
-.IR code1 ,
-that of
-.I c2
-to
-.IR code2 ,
-etc.
-.
-.TPx
-.REQ .hla "lang"
-Set the current hyphenation language to
-.IR lang .
-.
-.TPx
-.REQ .hlm "n"
-Set the maximum number of consecutive hyphenated lines to
-.IR n .
-.
-.TPx
-.REQ .hpf "file"
-Read hyphenation patterns from
-.IR file .
-.
-.TPx
-.REQ .hpfa "file"
-Append hyphenation patterns from
-.IR file .
-.
-.TPx
-.REQ .hpfcode "a b c d .\|.\|.\&"
-Set input mapping for
-.request .hpf .
-.
-.TPx
-.REQ .hw "words"
-List of
-.I words
-with exceptional hyphenation.
-.
-.TPx
-.REQ .hy "N"
-Switch to hyphenation mode
-.IR N .
-.
-.TPx
-.REQ .hym "n"
-Set the hyphenation margin to
-.I n
-(default scaling indicator\~\c
-.scaleindicator m ).
-.
-.TPx
-.REQ .hys "n"
-Set the hyphenation space to
-.IR n .
-.
-.TPx
-.REQ .ie "cond anything"
-If
-.I cond
-then
-.I anything
-else goto
-.request .el .
-.
-.TPx
-.REQ .if "cond anything"
-If
-.I cond
-then
-.IR anything ;
-otherwise do nothing.
-.
-.TPx
-.REQ .ig
-Ignore text until
-.B ..\&
-is encountered.
-.
-.TPx
-.REQ .ig "end"
-Ignore text until
-.BI . end
-is called.
-.
-.TPx
-.REQ .in
-Change to previous indentation value.
-.
-.TPx
-.REQ .in "\[+-]N"
-Change indentation according to
-.I \[+-]N
-(default scaling indicator\~\c
-.scaleindicator m ).
-.
-.TPx
-.REQ .it "N trap"
-Set an input-line count trap for the next
-.I N
-lines.
-.
-.TPx
-.REQ .itc "N trap"
-Same as
-.request .it
-but count lines interrupted with
-.esc c
-as one line.
-.
-.TPx
-.REQ .kern
-Enable pairwise kerning.
-.
-.TPx
-.REQ .kern "n"
-If
-.I n
-is zero, disable pairwise kerning, otherwise enable it.
-.
-.TPx
-.REQ .lc
-Remove leader repetition glyph.
-.
-.TPx
-.REQ .lc "c"
-Set leader repetition glyph to\~\c
-.IR c .
-.
-.TPx
-.REQ .length "register anything"
-Write the length of the string
-.I anything
-to
-.IR register .
-.
-.TPx
-.REQ .linetabs
-Enable line-tabs mode (i.e., calculate tab positions relative to output
-line).
-.
-.TPx
-.REQ .linetabs "n"
-If
-.I n
-is zero, disable line-tabs mode, otherwise enable it.
-.
-.TPx
-.REQ .lf "N"
-Set input line number to
-.IR N .
-.
-.TPx
-.REQ .lf "N file"
-Set input line number to
-.I N
-and filename to
-.IR file .
-.
-.TPx
-.REQ .lg "N"
-Ligature mode on if
-.IR N >0.
-.
-.TPx
-.REQ .ll
-Change to previous line length.
-.
-.TPx
-.REQ .ll "\[+-]N"
-Set line length according to
-.I \[+-]N
-(default length
-.scalednumber 6.5 i ,
-default scaling indicator\~\c
-.scaleindicator m ).
-.
-.TPx
-.REQ .lsm
-Unset the leading spaces macro.
-.
-.TPx
-.REQ .lsm "macro"
-Set the leading spaces macro to
-.IR macro .
-.
-.TPx
-.REQ .ls
-Change to the previous value of additional intra-line skip.
-.
-.TPx
-.REQ .ls "N"
-Set additional intra-line skip value to
-.IR N ,
-i.e.,
-.IR N \\-1
-blank lines are inserted after each text output line.
-.
-.TPx
-.REQ .lt "\[+-]N"
-Length of title (default scaling indicator\~\c
-.scaleindicator m ).
-.
-.TPx
-.REQ .mc
-Margin glyph off.
-.
-.TPx
-.REQ .mc "c"
-Print glyph\~\c
-.I c
-after each text line at actual distance from right margin.
-.
-.TPx
-.REQ .mc "c N"
-Set margin glyph to\~\c
-.I c
-and distance to\~\c
-.I N
-from right margin (default scaling indicator\~\c
-.scaleindicator m ).
-.
-.TPx
-.REQ .mk "register"
-Mark current vertical position in
-.IR register .
-.
-.TPx
-.REQ .mso "file"
-The same as
-.request .so
-except that
-.I file
-is searched in the tmac directories.
-.
-.TPx
-.REQ .na
-No output-line adjusting.
-.
-.TPx
-.REQ .ne
-Need a one-line vertical space.
-.
-.TPx
-.REQ .ne "N"
-Need
-.I N
-vertical space (default scaling indicator\~\c
-.scaleindicator v ).
-.
-.TPx
-.REQ .nf
-No filling or adjusting of output-lines.
-.
-.TPx
-.REQ .nh
-No hyphenation.
-.
-.TPx
-.REQ .nm
-Number mode off.
-.
-.TPx
-.REQ .nm "\[+-]N \fR[\fPM \fR[\fPS \fR[\fPI\fR]]]\fP"
-In line number mode, set number, multiple, spacing, and indentation.
-.
-.TPx
-.REQ .nn
-Do not number next line.
-.
-.TPx
-.REQ .nn "N"
-Do not number next
-.I N
-lines.
-.
-.TPx
-.REQ .nop "anything"
-Always process
-.IR anything .
-.
-.TPx
-.REQ .nr "register \[+-]N \fR[\fPM\fR]\fP"
-Define or modify
-.I register
-using
-.I \[+-]N
-with auto-increment
-.IR M .
-.
-.TPx
-.REQ .nroff
-Make the built-in conditions
-.B n
-true and
-.B t
-false.
-.
-.TPx
-.REQ .ns
-Turn on no-space mode.
-.
-.TPx
-.REQ .nx
-Immediately jump to end of current file.
-.
-.TPx
-.REQ .nx "filename"
-Immediately continue processing with file
-.IR file .
-.
-.TPx
-.REQ .open "stream filename"
-Open
-.I filename
-for writing and associate the stream named
-.I stream
-with it.
-.
-.TPx
-.REQ .opena "stream filename"
-Like
-.request .open
-but append to it.
-.
-.TPx
-.REQ .os
-Output vertical distance that was saved by the
-.request sv
-request.
-.
-.TPx
-.REQ .output "string"
-Emit
-.I string
-directly to intermediate output, allowing leading whitespace if
-.I string
-starts with
-\&\f[CB]\[dq]\f[]
-(which is stripped off).
-.
-.TPx
-.REQ .pc
-Reset page number character to\~\c
-.squoted_char % .
-.
-.TPx
-.REQ .pc "c"
-Page number character.
-.
-.TPx
-.REQ .pev
-Print the current environment and each defined environment
-state to stderr.
-.
-.TPx
-.REQ .pi "program"
-Pipe output to
-.I program
-(nroff only).
-.
-.TPx
-.REQ .pl
-Set page length to default
-.scalednumber 11 i .
-The current page length is stored in
-.register .p .
-.
-.TPx
-.REQ .pl "\[+-]N"
-Change page length to
-.I \[+-]N
-(default scaling indicator\~\c
-.scaleindicator v ).
-.
-.TPx
-.REQ .pm
-Print macro names and sizes (number of blocks of 128 bytes).
-.
-.TPx
-.REQ .pm "t"
-Print only total of sizes of macros (number of 128 bytes blocks).
-.
-.TPx
-.REQ .pn "\[+-]N"
-Next page number
-.IR N .
-.
-.TPx
-.REQ .pnr
-Print the names and contents of all currently defined number registers
-on stderr.
-.
-.TPx
-.REQ .po
-Change to previous page offset.
-.
-The current page offset is available in
-.register .o .
-.
-.TPx
-.REQ .po "\[+-]N"
-Page offset
-.IR N .
-.
-.TPx
-.REQ .ps
-Return to previous point size.
-.TPx
-.REQ .ps "\[+-]N"
-Point size; same as
-.esc[] s \[+-]N .
-.
-.TPx
-.REQ .psbb "filename"
-Get the bounding box of a PostScript image
-.IR filename .
-.
-.TPx
-.REQ .pso "command"
-This behaves like the
-.request so
-request except that input comes from the standard output of
-.IR command .
-.
-.TPx
-.REQ .ptr
-Print the names and positions of all traps (not including input line
-traps and diversion traps) on stderr.
-.
-.TPx
-.REQ .pvs
-Change to previous post-vertical line spacing.
-.
-.TPx
-.REQ .pvs "\[+-]N"
-Change post-vertical line spacing according to
-.I \[+-]N
-(default scaling indicator\~\c
-.scaleindicator p ).
-.
-.TPx
-.REQ .rchar "c1 c2 .\|.\|.\&"
-Remove the definitions of entities
-.IR c1 ,
-.IR c2 ,
-.I .\|.\|.\&
-.
-.TPx
-.REQ .rd "prompt"
-Read insertion.
-.
-.TPx
-.REQ .return
-Return from a macro.
-.
-.TPx
-.REQ .return "anything"
-Return twice, namely from the macro at the current level and from the macro
-one level higher.
-.
-.TPx
-.REQ .rfschar "f c1 c2 .\|.\|.\&"
-Remove the definitions of entities
-.IR c1 ,
-.IR c2 ,
-.I .\|.\|.\&
-for font
-.IR f .
-.
-.TPx
-.REQ .rj "n"
-Right justify the next
-.I n
-input lines.
-.
-.TPx
-.REQ .rm "name"
-Remove request, macro, or string
-.IR name .
-.
-.TPx
-.REQ .rn "old new"
-Rename request, macro, or string
-.I old
-to
-.IR new .
-.
-.TPx
-.REQ .rnn "reg1 reg2"
-Rename register
-.I reg1
-to
-.IR reg2 .
-.
-.TPx
-.REQ .rr "register"
-Remove
-.IR register .
-.
-.TPx
-.REQ .rs
-Restore spacing; turn no-space mode off.
-.
-.TPx
-.REQ .rt "\[+-]N"
-Return
-.I (upward only)
-to marked vertical place (default scaling indicator\~\c
-.scaleindicator v ).
-.
-.TPx
-.REQ .schar "c anything"
-Define global fallback character (or glyph)\~\c
-.I c
-as string
-.IR anything .
-.
-.TPx
-.REQ .shc
-Reset soft hyphen glyph to
-.esc (hy .
-.
-.TPx
-.REQ .shc "c"
-Set the soft hyphen glyph to\~\c
-.IR c .
-.
-.TPx
-.REQ .shift "n"
-In a macro, shift the arguments by
-.IR n \~\c
-positions.
-.
-.TPx
-.REQ .sizes "s1 s2 .\|.\|.\& sn \fB[0]\fP"
-Set available font sizes similar to the
-.B sizes
-command in a
-.B DESC
-file.
-.
-.TPx
-.REQ .so "filename"
-Include source file.
-.
-.TPx
-.REQ .sp
-Skip one line vertically.
-.
-.TPx
-.REQ .sp "N"
-Space vertical distance
-.I N
-up or down according to sign of
-.I N
-(default scaling indicator\~\c
-.scaleindicator v ).
-.
-.TPx
-.REQ .special
-Reset global list of special fonts to be empty.
-.
-.TPx
-.REQ .special "s1 s2 .\|.\|.\&"
-Fonts
-.IR s1 ,
-.IR s2 ,
-etc.\& are special and are searched for glyphs not in the
-current font.
-.
-.TPx
-.REQ .spreadwarn
-Toggle the spread warning on and off without changing its value.
-.
-.TPx
-.REQ .spreadwarn "limit"
-Emit a warning if each space in an output line is widened by
-.I limit
-or more (default scaling indicator\~\c
-.scaleindicator m ).
-.
-.TPx
-.REQ .ss "N"
-Set space glyph size to
-.IR N /12
-of the space width in the current font.
-.
-.TPx
-.REQ .ss "N M"
-Set space glyph size to
-.IR N /12
-and sentence space size set to
-.IR M /12
-of the space width in the current font.
-.
-.TPx
-.REQ .sty "n style"
-Associate
-.I style
-with font position
-.IR n .
-.
-.TPx
-.REQ .substring "xx n1 n2"
-Replace the string named
-.I xx
-with the substring defined by the indices
-.I n1
-and
-.IR n2 .
-.
-.TPx
-.REQ .sv
-Save
-.scalednumber "1 v"
-of vertical space.
-.TPx
-.REQ .sv "N"
-Save the vertical distance
-.I N
-for later output with
-.request os
-request (default scaling indicator\~\c
-.scaleindicator v ).
-.
-.TPx
-.REQ .sy "command-line"
-Execute program
-.IR command-line .
-.
-.TPx
-.REQ .ta "T N"
-Set tabs after every position that is a multiple of
-.I N
-(default scaling indicator\~\c
-.scaleindicator m ).
-.TPx
-.REQ .ta "n1 n2 .\|.\|.\& nn \f[CB]T\f[] r1 r2 .\|.\|.\& rn"
-Set tabs at positions
-.IR n1 ,
-.IR n2 ,
-.Text .\|.\|.,
-.IR nn ,
-then set tabs at
-.IR nn + r1 ,
-.IR nn + r2 ,
-.Text .\|.\|.,
-.IR nn + rn ,
-then at
-.IR nn + rn + r1 ,
-.IR nn + rn + r2 ,
-.Text .\|.\|.,
-.IR nn + rn + rn ,
-and so on.
-.
-.\".TPx
-.\".REQ .tar
-.\"Restore internally saved tab positions.
-.\".
-.\".TPx
-.\".REQ .tas
-.\"Save tab positions internally.
-.
-.TPx
-.REQ .tc
-Remove tab repetition glyph.
-.TPx
-.REQ .tc "c"
-Set tab repetition glyph to\~\c
-.IR c .
-.
-.TPx
-.REQ .ti "\[+-]N"
-Temporary indent next line (default scaling indicator\~\c
-.scaleindicator m ).
-.
-.TPx
-.REQ .tkf "font s1 n1 s2 n2"
-Enable track kerning for
-.IR font .
-.
-.TPx
-.REQ .tl "\f[CB]\[cq]\f[]left\f[CB]\[cq]\f[]center\f[CB]\[cq]\f[]right\f[CB]\[cq]\f[]"
-Three-part title.
-.
-.TPx
-.REQ .tm "anything"
-Print
-.I anything
-on stdout.
-.
-.TPx
-.REQ .tm1 "anything"
-Print
-.I anything
-on stdout, allowing leading whitespace if
-.I anything
-starts with
-\&\f[CB]\[dq]\f[]
-(which is stripped off).
-.
-.TPx
-.REQ .tmc "anything"
-Similar to
-.request .tm1
-without emitting a final newline.
-.
-.TPx
-.REQ .tr "abcd.\|.\|.\&"
-Translate
-.I a
-to
-.IR b ,
-.I c
-to
-.IR d ,
-etc.\& on output.
-.
-.TPx
-.REQ .trf "filename"
-Transparently output the contents of file
-.IR filename .
-.
-.TPx
-.REQ .trin "abcd.\|.\|.\&"
-This is the same as the
-.request tr
-request except that the
-.B asciify
-request uses the character code (if any) before the character
-translation.
-.
-.TPx
-.REQ .trnt "abcd.\|.\|.\&"
-This is the same as the
-.request tr
-request except that the translations do not apply to text that is
-transparently throughput into a diversion with
-.esc ! .
-.
-.TPx
-.REQ .troff
-Make the built-in conditions
-.B t
-true and
-.B n
-false.
-.
-.TPx
-.REQ .uf "font"
-Set underline font to
-.I font
-(to be switched to by
-.request .ul ).
-.
-.TPx
-.REQ .ul "N"
-Underline (italicize in troff)
-.I N
-input lines.
-.
-.TPx
-.REQ .unformat "diversion"
-Unformat space characters and tabs in
-.IR diversion ,
-preserving font information.
-.TPx
-.REQ .vpt "n"
-Enable vertical position traps if
-.I n
-is non-zero, disable them otherwise.
-.
-.TPx
-.REQ .vs
-Change to previous vertical base line spacing.
-.
-.TPx
-.REQ .vs "\[+-]N"
-Set vertical base line spacing to
-.I \[+-]N
-(default scaling indicator\~\c
-.scaleindicator p ).
-.
-.TPx
-.REQ .warn "n"
-Set warnings code to
-.IR n .
-.
-.TPx
-.REQ .warnscale "si"
-Set scaling indicator used in warnings to
-.IR si .
-.
-.TPx
-.REQ .wh "N"
-Remove (first) trap at position
-.IR N .
-.
-.TPx
-.REQ .wh "N trap"
-Set location trap; negative means from page bottom.
-.
-.TPx
-.REQ .while "cond anything"
-While condition
-.I cond
-is true, accept
-.I anything
-as input.
-.
-.TPx
-.REQ .write "stream anything"
-Write
-.I anything
-to the stream named
-.IR stream .
-.
-.TPx
-.REQ .writec "stream anything"
-Similar to
-.request .write
-without emitting a final newline.
-.
-.TPx
-.REQ .writem "stream xx"
-Write contents of macro or string
-.I xx
-to the stream named
-.IR stream .
-.
-.PD
-.
-.
-.P
-Besides these standard groff requests, there might be further macro
-calls.
-They can originate from a macro package (see
-.BR roff (@MAN7EXT@)
-for an overview) or from a preprocessor.
-.
-.
-.P
-Preprocessor macros are easy to be recognized.
-.
-They enclose their code into a pair of characteristic macros.
-.
-.
-.P
-.TS
-box, center, tab (@);
-c | c | c
-CfCB | CfCB | CfCB.
-preprocessor@start macro@ end macro
-=
-chem@.cstart@.cend
-eqn@.EQ@.EN
-gideal@.IS@.IE
-grap@.G1@.G2
-grn@.GS@.GE
-@@.IF
-pic@.PS@.PE
-refer@.R1@.R2
-soelim@\f[I]none@\f[I]none
-tbl@.TS@.TE
-_
-glilypond@.lilypond start@.lilypond stop
-gperl@.Perl start@.Perl stop
-gpinyin@.pinyin start@.pinyin stop
-.TE
-.
-.
-.P
-Note that the \[oq]ideal\[cq] preprocessor is not available in groff yet.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "ESCAPE SEQUENCES"
-.\" --------------------------------------------------------------------
-.
-Escape sequences are in-line language elements usually introduced by a
-backslash
-.squoted_char \[rs]
-and followed by an escape name and sometimes by a required argument.
-.
-Input processing is continued directly after the escaped character or
-the argument (without an intervening separation character).
-.
-So there must be a way to determine the end of the escape name and the
-end of the argument.
-.
-.
-.P
-This is done by enclosing names (escape name and arguments consisting
-of a variable name) by a pair of brackets
-.BI \[lB] name \[rB] 
-and constant arguments (number expressions and characters) by
-apostrophes (ASCII 0x27) like
-.BI \[cq] constant \[cq] \f[R].
-.
-.
-.P
-There are abbreviations for short names.
-.
-Two-character escape names can be specified by an opening parenthesis
-like
-.esc ( xy
-or
-.esc *( xy
-without a closing counterpart.
-.
-And all one-character names different from the special characters
-.squoted_char [
-and
-.squoted_char (
-can even be specified without a marker, for example
-.esc n c
-or
-.esc $ c.
-.
-.
-.P
-Constant arguments of length\~1 can omit the marker apostrophes, too,
-but there is no two-character analogue.
-.
-.
-.P
-While one-character escape sequences are mainly used for in-line
-functions and system related tasks, the two-letter names following the
-.esc (
-construct are glyphs predefined by the roff system; these are called
-\[oq]Special Characters\[cq] in the classical documentation.
-.
-Escapes sequences of the form
-.esc[] "" name
-denote glyphs too.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Single-Character Escapes"
-.\" --------------------------------------------------------------------
-.
-.PD 0
-.
-.\" --------- comments ---------
-.
-.TP
-.ESC \[dq]
-Start of a comment.
-.
-Everything up to the end of the line is ignored.
-.
-.TP
-.ESC #
-Everything up to and including the next newline is ignored.
-.
-This is interpreted in copy mode.
-.
-This is like
-.esc \[dq]
-except that the terminating newline is ignored as well.
-.
-.\" --------- strings ---------
-.
-.TP
-.ESC * s
-The string stored in the string variable with one-character name\~\c
-.IR s .
-.
-.TP
-.ESC *( st
-The string stored in the string variable with two-character name
-.IR st .
-.
-.TP
-.ESC[] * string
-The string stored in the string variable with name
-.I string
-(with arbitrary length).
-.
-.TP
-.ESC[] * "stringvar arg1 arg2 .\|.\|."
-The string stored in the string variable with arbitrarily long name
-.IR stringvar ,
-taking
-.IR arg1 ,
-.IR arg2 ,
-.I .\|.\|.\&
-as arguments.
-.
-.\" --------- macro arguments ---------
-.
-.TP
-.ESC $0
-The name by which the current macro was invoked.
-.
-The
-.request als
-request can make a macro have more than one name.
-.
-.TP
-.ESC $ x
-Macro or string argument with one-digit number\~\c
-.I x
-in the range 1 to\~9.
-.
-.TP
-.ESC $( xy
-Macro or string argument with two-digit number
-.I xy
-(larger than zero).
-.
-.TP
-.ESC[] $ nexp
-Macro or string argument with number
-.IR nexp ,
-where
-.I nexp
-is a numerical expression evaluating to an integer \[>=]1.
-.
-.TP
-.ESC $*
-In a macro or string, the concatenation of all the arguments separated
-by spaces.
-.
-.TP
-.ESC $@
-In a macro or string, the concatenation of all the arguments with each
-surrounded by double quotes, and separated by spaces.
-.
-.TP
-.ESC $^
-In a macro, the representation of all parameters as if they were an
-argument to the
-.request ds
-request.
-.
-.\" --------- escaped characters ---------
-.
-.TP
-.ESC \e
-reduces to a single backslash; useful to delay its interpretation as
-escape character in copy mode.
-.
-For a printable backslash, use
-.esc e ,
-or even better
-.esc [rs] ,
-to be independent from the current escape character.
-.
-.TP
-.ESC \[aa]
-The acute accent \[aa]; same as
-.esc (aa .
-Unescaped: apostrophe, right quotation mark, single quote (ASCII 0x27).
-.
-.TP
-.ESC \[ga]
-The grave accent \[ga]; same as
-.esc (ga .
-Unescaped: left quote, backquote (ASCII 0x60).
-.
-.TP
-.ESC -
-The \- (minus) sign in the current font.
-.
-.TP
-.ESC _
-The same as
-.esc (ul ,
-the underline character.
-.
-.TP
-.ESC .
-The same as a dot (\[oq].\[cq]).  Necessary in nested macro
-definitions so that \[oq]\[rs]\[rs]..\[cq] expands to \[oq]..\[cq].
-.
-.TP
-.ESC %
-Default optional hyphenation character.
-.
-.TP
-.ESC !
-Transparent line indicator.
-.
-.TP
-.ESC? anything
-In a diversion, this transparently embeds
-.I anything
-in the diversion.
-.I anything
-is read in copy mode.
-.
-See also the escape sequences
-.esc !
-and
-.esc ? .
-.
-.
-.\" --------- spacing ---------
-.
-.TP
-.ESC \& space
-Unpaddable space size space glyph (no line break).
-.
-.TP
-.ESC 0
-Digit-width space.
-.
-.TP
-.ESC |
-1/6\ em narrow space glyph; zero width in nroff.
-.
-.TP
-.ESC ^
-1/12\ em half-narrow space glyph; zero width in nroff.
-.
-.TP
-.ESC &
-Non-printable, zero-width glyph.
-.
-.TP
-.ESC )
-Like
-.esc &
-except that it behaves like a glyph declared with the
-.request cflags
-request to be transparent for the purposes of end-of-sentence
-recognition.
-.
-.TP
-.ESC /
-Increases the width of the preceding glyph so that the spacing
-between that glyph and the following glyph is correct if
-the following glyph is a roman glyph.
-.
-.TP
-.ESC ,
-Modifies the spacing of the following glyph so that the spacing
-between that glyph and the preceding glyph is correct if the
-preceding glyph is a roman glyph.
-.
-.TP
-.ESC ~
-Unbreakable space that stretches like a normal inter-word space when a
-line is adjusted.
-.
-.TP
-.ESC :
-Inserts a zero-width break point (similar to
-.esc %
-but without a soft hyphen character).
-.
-.TP
-.ESC "" newline
-Ignored newline, for continuation lines.
-.
-.\" --------- structuring ---------
-.
-.TP
-.ESC {
-Begin conditional input.
-.
-.TP
-.ESC }
-End conditional input.
-.
-.\" --------- longer escape names ---------
-.
-.TP
-.ESC ( sc
-A glyph with two-character name
-.IR sc ;
-see section
-.BR "Special Characters" .
-.
-.TP
-.ESC[] "" name
-A glyph with name
-.I name
-(of arbitrary length).
-.
-.TP
-.ESC[] "" "comp1 comp2 .\|.\|."
-A composite glyph with components
-.IR comp1 ,
-.IR comp2 ,
-.I .\|.\|.
-.
-.\" --------- alphabetical escapes ---------
-.
-.TP
-.ESC a
-Non-interpreted leader character.
-.
-.TP
-.ESCq A anything
-If
-.I anything
-is acceptable as a name of a string, macro, diversion, register,
-environment or font it expands to\~1, and to\~0 otherwise.
-.
-.TP
-.ESCq b abc.\|.\|.\&
-Bracket building function.
-.
-.TP
-.ESCq B anything
-If
-.I anything
-is acceptable as a valid numeric expression it expands to\~1, and
-to\~0 otherwise.
-.
-.TP
-.ESC c
-Interrupt text processing.
-.
-.TP
-.ESCq C glyph
-The glyph called
-.IR glyph ;
-same as
-.esc[] "" glyph ,
-but compatible to other roff versions.
-.
-.TP
-.ESC d
-Forward (down) 1/2 em (1/2 line in nroff).
-.
-.TP
-.ESCq D charseq
-Draw a graphical element defined by the characters in
-.IR charseq ;
-see the groff info file for details.
-.
-.TP
-.ESC e
-Printable version of the current escape character.
-.
-.TP
-.ESC E
-Equivalent to an escape character, but is not interpreted in copy mode.
-.
-.TP
-.ESC f F
-Change to font with one-character name or one-digit number\~\c
-.IR F .
-.
-.TP
-.ESC fP
-Switch back to previous font.
-.
-.TP
-.ESC f( fo
-Change to font with two-character name or two-digit number
-.IR fo .
-.
-.TP
-.ESC[] f font
-Change to font with arbitrarily long name or number expression
-.IR font .
-.
-.TP
-.ESC[] f ""
-Switch back to previous font.
-.
-.TP
-.ESC F f
-Change to font family with one-character name\~\c
-.IR f .
-.
-.TP
-.ESC F( fm
-Change to font family with two-character name
-.IR fm .
-.
-.TP
-.ESC[] F fam
-Change to font family with arbitrarily long name
-.IR fam .
-.
-.TP
-.ESC[] F ""
-Switch back to previous font family.
-.
-.TP
-.ESC g r
-Return format of register with one-character name\~\c
-.I r
-suitable for
-.request af
-request.
-.
-.TP
-.ESC g( rg
-Return format of register with two-character name
-.I rg
-suitable for
-.request af
-request.
-.
-.TP
-.ESC[] g reg
-Return format of register with arbitrarily long name
-.I reg
-suitable for
-.request af
-request.
-.
-.TP
-.ESCq h N
-Local horizontal motion; move right
-.I N
-(left if negative).
-.
-.TP
-.ESCq H N
-Set height of current font to
-.IR N .
-.
-.TP
-.ESC k r
-Mark horizontal input place in one-character register\~\c
-.IR r .
-.
-.TP
-.ESC k( rg
-Mark horizontal input place in two-character register
-.IR rg .
-.
-.TP
-.ESC[] k reg
-Mark horizontal input place in register with arbitrarily long name
-.IR reg .
-.
-.TP
-.ESCq l Nc
-Horizontal line drawing function (optionally using character
-.IR c ).
-.
-.TP
-.ESCq L Nc
-Vertical line drawing function (optionally using character
-.IR c ).
-.
-.TP
-.ESC m c
-Change to color with one-character name\~\c
-.IR c .
-.
-.TP
-.ESC m( cl
-Change to color with two-character name
-.IR cl .
-.
-.TP
-.ESC[] m color
-Change to color with arbitrarily long name
-.IR color .
-.
-.TP
-.ESC[] m ""
-Switch back to previous color.
-.
-.TP
-.ESC M c
-Change filling color for closed drawn objects to color with
-one-character name\~\c
-.IR c .
-.
-.TP
-.ESC M( cl
-Change filling color for closed drawn objects to color with
-two-character name
-.IR cl .
-.
-.TP
-.ESC[] M color
-Change filling color for closed drawn objects to color with
-arbitrarily long name
-.IR color .
-.
-.TP
-.ESC[] M ""
-Switch to previous fill color.
-.
-.TP
-.ESC n r
-The numerical value stored in the register variable with the
-one-character name\~\c
-.IR r .
-.
-.TP
-.ESC n( re
-The numerical value stored in the register variable with the
-two-character name
-.IR re .
-.
-.TP
-.ESC[] n reg
-The numerical value stored in the register variable with arbitrarily
-long name
-.IR reg .
-.
-.TP
-.ESCq N n
-Typeset the glyph with index\~\c
-.I n
-in the current font.
-.
-No special fonts are searched.
-.
-Useful for adding (named) entities to a document using the
-.request char
-request and friends.
-.
-.TP
-.ESCq o abc.\|.\|.\&
-Overstrike glyphs
-.IR a ,
-.IR b ,
-.IR c ,
-etc.
-.
-.TP
-.ESC O0
-Disable glyph output.
-.
-Mainly for internal use.
-.
-.TP
-.ESC O1
-Enable glyph output.
-.
-Mainly for internal use.
-.
-.TP
-.ESC p
-Break and spread output line.
-.
-.TP
-.ESC r
-Reverse 1\ em vertical motion (reverse line in nroff).
-.
-.TP
-.ESCq R "name\~\[+-]n"
-The same as
-.request .nr
-.I name
-.IR \[+-]n .
-.
-.TP
-.ESC s \[+-]N
-Set/increase/decrease the point size to/by
-.I N
-scaled points;
-.I N
-is a one-digit number in the range 1 to\~9.
-.
-Same as
-.request ps
-request.
-.
-.TP
-.ESC s( \[+-]N
-.TQ
-.ESC s\[+-]( N
-Set/increase/decrease the point size to/by
-.I N
-scaled points;
-.I N
-is a two-digit number \[>=]1.
-.
-Same as
-.request ps
-request.
-.
-.TP
-.ESC[] s \[+-]N
-.TQ
-.ESC[] s\[+-] N
-.TQ
-.ESCq s \[+-]N
-.TQ
-.ESCq s\[+-] N
-Set/increase/decrease the point size to/by
-.I N
-scaled points.
-.
-Same as
-.request ps
-request.
-.
-.TP
-.ESCq S N
-Slant output by
-.I N
-degrees.
-.
-.TP
-.ESC t
-Non-interpreted horizontal tab.
-.
-.TP
-.ESC u
-Reverse (up) 1/2 em vertical motion (1/2 line in nroff).
-.
-.TP
-.ESCq v N
-Local vertical motion; move down
-.I N
-(up if negative).
-.
-.TP
-.ESC V e
-The contents of the environment variable with one-character
-name\~\c
-.IR e .
-.
-.TP
-.ESC V( ev
-The contents of the environment variable with two-character name
-.IR ev .
-.
-.TP
-.ESC[] V env
-The contents of the environment variable with arbitrarily long name
-.IR env .
-.
-.TP
-.ESCq w string
-The width of the glyph sequence
-.IR string .
-.
-.TP
-.ESCq x N
-Extra line-space function (negative before, positive after).
-.
-.TP
-.ESCq X string
-Output
-.I string
-as device control function.
-.
-.TP
-.ESC Y n
-Output string variable or macro with one-character name\~\c
-.I n
-uninterpreted as device control function.
-.
-.TP
-.ESC Y( nm
-Output string variable or macro with two-character name
-.I nm
-uninterpreted as device control function.
-.
-.TP
-.ESC[] Y name
-Output string variable or macro with arbitrarily long name
-.I name
-uninterpreted as device control function.
-.
-.TP
-.ESC z c
-Print
-.I c
-with zero width (without spacing).
-.
-.TP
-.ESCq Z anything
-Print
-.I anything
-and then restore the horizontal and vertical position;
-.I anything
-may not contain tabs or leaders.
-.
-.
-.PD
-.P
-The escape sequences
-.esc e ,
-.esc . ,
-.esc \[dq] ,
-.esc $ ,
-.esc * ,
-.esc a ,
-.esc n ,
-.esc t ,
-.esc g ,
-and
-.escarg \& newline
-are interpreted in copy mode.
-.
-.
-.P
-Escape sequences starting with
-.esc (
-or
-.esc [
-do not represent single character escape sequences, but introduce escape
-names with two or more characters.
-.
-.
-.P
-If a backslash is followed by a character that does not constitute a
-defined escape sequence, the backslash is silently ignored and the
-character maps to itself.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Special Characters"
-.\" --------------------------------------------------------------------
-.
-[Note: \[oq]Special Characters\[cq] is a misnomer; those entities are
-(output) glyphs, not (input) characters.]
-.
-.
-.P
-Common special characters are predefined by escape sequences of the
-form
-.BI \e( xy
-with characters
-.I x
-and
-.IR y .
-.
-In
-.IR groff ,
-it is also possible to use the writing
-.BI \e[ xy ]
-as well.
-.
-.
-.P
-Some of these special characters exist in the usual font while most of
-them are only available in the special font.
-.
-Below you can see a small selection of the most important glyphs; a
-complete list can be found in
-.BR groff_char (@MAN7EXT@).
-.RS
-.P
-.PD 0
-.
-.TP
-.ESC (Do
-Dollar
-.B \(Do
-.
-.TP
-.ESC (Eu
-Euro
-.B \(Eu
-.
-.TP
-.ESC (Po
-British pound sterling
-.B \(Po
-.
-.TP
-.ESC (aq
-Apostrophe quote
-.B \(aq
-.
-.TP
-.ESC (bu
-Bullet sign
-.B \(bu
-.
-.TP
-.ESC (co
-Copyright
-.B \(co
-.
-.TP
-.ESC (cq
-Single closing quote (right)
-.B \(cq
-.TP
-.ESC (ct
-Cent
-.B \(ct
-.
-.TP
-.ESC (dd
-Double dagger
-.B  \(dd
-.
-.TP
-.ESC (de
-Degree
-.B \(de
-.
-.TP
-.ESC (dg
-Dagger
-.B \(dg
-.
-.TP
-.ESC (dq
-Double quote (ASCII 34)
-.B \(dq
-.
-.TP
-.ESC (em
-Em-dash
-.B \(em
-.
-.TP
-.ESC (en
-En-dash
-.B \(en
-.
-.TP
-.ESC (hy
-Hyphen
-.B \(hy
-.
-.TP
-.ESC (lq
-Double quote left
-.B \(lq
-.
-.TP
-.ESC (oq
-Single opening quote (left)
-.B \(oq
-.
-.TP
-.ESC (rg
-Registered sign
-.B \(rg
-.
-.TP
-.ESC (rq
-Double quote right
-.B \(rq
-.
-.TP
-.ESC (rs
-Printable backslash character
-.B \(rs
-.
-.TP
-.ESC (sc
-Section sign
-.B \(sc
-.
-.TP
-.ESC (tm
-Trademark symbol
-.B  \(tm
-.
-.TP
-.ESC (ul
-Underline character
-.B  \(ul
-.
-.TP
-.ESC (==
-Identical
-.B \(==
-.
-.TP
-.ESC (>=
-Larger or equal
-.B \(>=
-.
-.TP
-.ESC (<=
-Less or equal
-.B \(<=
-.
-.TP
-.ESC (!=
-Not equal
-.B \(!=
-.
-.TP
-.ESC (->
-Right arrow
-.B \(->
-.
-.TP
-.ESC (<-
-Left arrow
-.B \(<-
-.
-.TP
-.ESC (+-
-Plus-minus sign
-.B \(+-
-.
-.PD
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Unicode Characters"
-.\" --------------------------------------------------------------------
-.
-There is the extended escape
-.B u
-that allows to include all available Unicode characters into some
-.I roff
-file.
-.
-.
-.TP
-.BI \e[u xxxx ]
-.B u
-is the escape name.
-.
-.I xxxx
-is a hexadecimal number of 4 hex digits, such as
-.B 0041
-for the letter
-.BR A ,
-see
-.BR \e[u0041] .
-. 
-.
-.TP
-.BI \e[u yyyyy ]
-.B u
-is the escape name.
-.
-.I yyyyy
-is a hexadecimal number of 5 hex digits, such as
-.B 2FA1A
-for a Chinese looking character for
-.IR "CJK Compatibility Ideographs Supplement" ,
-see
-.BR \e[u2FA1A] .
-.
-.
-.P
-Both hexadecimal collections mean the corresponding Unicode code for a
-character.
-.
-.
-.TP
-.BI \e[u hex1 _ hex2 ]
-.TQ
-.BI \e[u hex1 _ hex2 _ hex3 ]
-.IR hex1 ,
-.IR hex2 ,
-and
-.I hex3
-are all Unicode hexadecimal codes (4 or 5 hex digits) that are used
-for overstriking, e.g.
-.B \e[u0041_0301]
-is
-.I "A acute"
-.BR \['A] .
-.
-.
-.P
-The availability of the Unicode characters depends on the used font.
-.
-For text mode, the device
-.B -Tutf8
-is quite complete, for
-.I troff
-modes it might happen that some or many characters will not be
-displayed.
-.
-Please check your fonts.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Strings"
-.\" --------------------------------------------------------------------
-.
-Strings are defined by the
-.request ds
-request and can be retrieved by the
-.esc *
-escape sequence.
-.
-.
-.P
-Strings share their name space with macros.
-.
-So strings and macros without arguments are roughly equivalent; it is
-possible to call a string like a macro and vice-versa, but this often
-leads to unpredictable results.
-.
-The following string is the only one predefined in groff.
-.
-.TPx
-.STRING .T
-The name of the current output device as specified by the
-.option \-T
-command line option.
-.
-.
-.\" --------------------------------------------------------------------
-.SH REGISTERS
-.\" --------------------------------------------------------------------
-.
-Registers are variables that store a value.
-In groff, most registers store numerical values (see section
-.B NUMERICAL EXPRESSIONS
-above), but some can also hold a string value.
-.
-.
-.P
-Each register is given a name.
-Arbitrary registers can be defined and set with the
-.request nr
-request.
-.
-.
-.P
-The value stored in a register can be retrieved by the escape sequences
-introduced by
-.esc n .
-.
-.
-.P
-Most useful are predefined registers.
-.
-In the following the notation
-.I name
-is used to refer to
-.register name
-to make clear that we speak about registers.
-.
-Please keep in mind that the
-.esc[] n ""
-decoration is not part of the register name.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Read-only Registers"
-.\" --------------------------------------------------------------------
-.
-The following registers have predefined values that should not be
-modified by the user (usually, registers starting with a dot are
-read-only).
-.
-Mostly, they provide information on the current settings or store
-results from request calls.
-.
-.
-.P
-.PD 0
-.
-.TPx
-.REG $$
-The process ID of
-.BR troff .
-.
-.TPx
-.REG .$
-Number of arguments in the current macro or string.
-.
-.TPx
-.REG .a
-Post-line extra line-space most recently utilized using
-.esc x .
-.
-.TPx
-.REG .A
-Set to\~1 in
-.B troff
-if option
-.option \-A
-is used; always\~1 in
-.BR nroff .
-.
-.TPx
-.REG .b
-The emboldening offset while
-.request .bd
-is active.
-.
-.TPx
-.REG .br
-Within a macro, set to\~1 if macro called with the \[oq]normal\[cq]
-control character, and to\~0 otherwise.
-.
-.TPx
-.REG .c
-Current input line number.
-.
-.TPx
-.REG .C
-1\~if compatibility mode is in effect, 0\~otherwise.
-.
-.TPx
-.REG .cdp
-The depth of the last glyph added to the current environment.
-.
-It is positive if the glyph extends below the baseline.
-.
-.TPx
-.REG .ce
-The number of lines remaining to be centered, as set by the
-.request ce
-request.
-.
-.TPx
-.REG .cht
-The height of the last glyph added to the current environment.
-.
-It is positive if the glyph extends above the baseline.
-.
-.TPx
-.REG .color
-1\~if colors are enabled, 0\~otherwise.
-.
-.TPx
-.REG .csk
-The skew of the last glyph added to the current environment.
-.
-The skew of a glyph is how far to the right of the center of a glyph
-the center of an accent over that glyph should be placed.
-.
-.TPx
-.REG .d
-Current vertical place in current diversion; equal to
-.register nl .
-.
-.TPx
-.REG .ev
-The name or number of the current environment (string-valued).
-.
-.TPx
-.REG .f
-Current font number.
-.
-.TPx
-.REG .F
-The name of the current input file (string-valued).
-.
-.TPx
-.REG .fam
-The current font family (string-valued).
-.
-.TPx
-.REG .fn
-The current (internal) real font name (string-valued).
-.
-.TPx
-.REG .fp
-The number of the next free font position.
-.
-.TPx
-.REG .g
-Always 1 in GNU troff.
-.
-Macros should use it to test if running under groff.
-.
-.TPx
-.REG .h
-Text base-line high-water mark on current page or diversion.
-.
-.TPx
-.REG .H
-Available horizontal resolution in basic units.
-.
-.TPx
-.REG .height
-The current font height as set with
-.request \[rs]H .
-.
-.TPx
-.REG .hla
-The current hyphenation language as set by the
-.request hla
-request.
-.
-.TPx
-.REG .hlc
-The number of immediately preceding consecutive hyphenated lines.
-.
-.TPx
-.REG .hlm
-The maximum allowed number of consecutive hyphenated lines, as set by
-the
-.request hlm
-request.
-.
-.TPx
-.REG .hy
-The current hyphenation flags (as set by the
-.request hy
-request).
-.
-.TPx
-.REG .hym
-The current hyphenation margin (as set by the
-.request hym
-request).
-.
-.TPx
-.REG .hys
-The current hyphenation space (as set by the
-.request hys
-request).
-.
-.TPx
-.REG .i
-Current indentation.
-.
-.TPx
-.REG .in
-The indentation that applies to the current output line.
-.
-.TPx
-.REG .int
-Positive if last output line contains
-.esc c .
-.
-.TPx
-.REG .j
-The current adjustment mode.
-It can be stored and used to set adjustment.
-(n\ =\ 1, b\ =\ 1, l\ =\ 0, r\ =\ 5, c\ =\ 3).
-.
-.TPx
-.REG .k
-The current horizontal output position (relative to the current indentation).
-.TPx
-.REG .kern
-1\~if pairwise kerning is enabled, 0\~otherwise.
-.
-.TPx
-.REG .l
-Current line length.
-.
-.TPx
-.REG .L
-The current line spacing setting as set by
-.request .ls .
-.
-.TPx
-.REG .lg
-The current ligature mode (as set by the
-.request lg
-request).
-.
-.TPx
-.REG .linetabs
-The current line-tabs mode (as set by the
-.request linetabs
-request).
-.
-.TPx
-.REG .ll
-The line length that applies to the current output line.
-.
-.TPx
-.REG .lt
-The title length (as set by the
-.request lt
-request).
-.
-.TPx
-.REG .m
-The current drawing color (string-valued).
-.
-.TPx
-.REG .M
-The current background color (string-valued).
-.
-.TPx
-.REG .n
-Length of text portion on previous output line.
-.
-.TPx
-.REG .ne
-The amount of space that was needed in the last
-.request ne
-request that caused a trap to be sprung.
-.
-Useful in conjunction with
-.register .trunc .
-.
-.TPx
-.REG .ns
-1\~if in no-space mode, 0\~otherwise.
-.
-.TPx
-.REG .o
-Current page offset.
-.
-.TPx
-.REG .O
-The suppression nesting level (see
-.esc O ).
-.
-.TPx
-.REG .p
-Current page length.
-.
-.TPx
-.REG .P
-1\~if the current page is being printed, 0\~otherwise (as determined by the
-.option \-o
-command line option).
-.
-.TPx
-.REG .pe
-1\~during page ejection, 0\~otherwise.
-.
-.TPx
-.REG .pn
-The number of the next page: either the value set by a
-.request pn
-request, or the number of the current page plus\ 1.
-.
-.TPx
-.REG .ps
-The current point size in scaled points.
-.
-.TPx
-.REG .psr
-The last-requested point size in scaled points.
-.
-.TPx
-.REG .pvs
-The current post-vertical line spacing.
-.
-.TPx
-.REG .R
-The number of unused number registers.
-Always 10000 in GNU troff.
-.
-.TPx
-.REG .rj
-The number of lines to be right-justified as set by the
-.request rj
-request.
-.
-.TPx
-.REG .s
-Current point size as a decimal fraction.
-.
-.TPx
-.REG .slant
-The slant of the current font as set with
-.request \eS .
-.
-.TPx
-.REG .sr
-The last requested point size in points as a decimal fraction
-(string-valued).
-.
-.TPx
-.REG .ss
-The value of the parameters set by the first argument of the
-.request ss
-request.
-.
-.TPx
-.REG .sss
-The value of the parameters set by the second argument of the
-.request ss
-request.
-.
-.TPx
-.REG .sty
-The current font style (string-valued).
-.
-.TPx
-.REG .t
-Vertical distance to the next trap.
-.
-.TPx
-.REG .T
-Set to\~1
-if option
-.option \-T
-is used.
-.
-.TPx
-.REG .tabs
-A string representation of the current tab settings suitable for use
-as an argument to the
-.request ta
-request.
-.
-.TPx
-.REG .trunc
-The amount of vertical space truncated by the most recently sprung
-vertical position trap, or, if the trap was sprung by a
-.request ne
-request, minus the amount of vertical motion produced by
-.request .ne .
-.
-Useful in conjunction with the
-.register .ne .
-.
-.TPx
-.REG .u
-Equal to 1 in fill mode and 0 in no-fill mode.
-.
-.TPx
-.REG .U
-Equal to 1 in safer mode and 0 in unsafe mode.
-.
-.TPx
-.REG .v
-Current vertical line spacing.
-.
-.TPx
-.REG .V
-Available vertical resolution in basic units.
-.
-.TPx
-.REG .vpt
-1\~if vertical position traps are enabled, 0\~otherwise.
-.
-.TPx
-.REG .w
-Width of previous glyph.
-.
-.TPx
-.REG .warn
-The sum of the number codes of the currently enabled warnings.
-.
-.TPx
-.REG .x
-The major version number.
-.
-.TPx
-.REG .y
-The minor version number.
-.
-.TPx
-.REG .Y
-The revision number of groff.
-.
-.TPx
-.REG .z
-Name of current diversion.
-.
-.TPx
-.REG .zoom
-Zoom factor for current font (in multiples of 1/1000th; zero if no
-magnification).
-.PD
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Writable Registers"
-.\" --------------------------------------------------------------------
-.
-The following registers can be read and written by the user.
-They have predefined default values, but these can be modified for
-customizing a document.
-.
-.
-.P
-.PD 0
-.TPx
-.REG %
-Current page number.
-.
-.TPx
-.REG c.
-Current input line number.
-.
-.TPx
-.REG ct
-Character type (set by width function
-.esc w ).
-.
-.TPx
-.REG dl
-Maximal width of last completed diversion.
-.
-.TPx
-.REG dn
-Height of last completed diversion.
-.
-.TPx
-.REG dw
-Current day of week (1\(en7).
-.
-.TPx
-.REG dy
-Current day of month (1\(en31).
-.
-.TPx
-.REG hours
-The number of hours past midnight.
-.
-Initialized at start-up.
-.
-.TPx
-.REG hp
-Current horizontal position at input line.
-.
-.TPx
-.REG llx
-Lower left x-coordinate (in PostScript units) of a given PostScript
-image (set by
-.request .psbb ).
-.
-.TPx
-.REG lly
-Lower left y-coordinate (in PostScript units) of a given PostScript
-image (set by
-.request .psbb ).
-.
-.TPx
-.REG ln
-Output line number.
-.
-.TPx
-.REG lsn
-The number of leading spaces of an input line.
-.
-.TPx
-.REG lss
-The horizontal space corresponding to the leading spaces of an input
-line.
-.
-.TPx
-.REG minutes
-The number of minutes after the hour.
-.
-Initialized at start-up.
-.
-.TPx
-.REG mo
-Current month (1\(en12).
-.
-.TPx
-.REG nl
-Vertical position of last printed text base-line.
-.
-.TPx
-.REG opmaxx
-.TPx
-.REG opmaxy
-.TPx
-.REG opminx
-.TPx
-.REG opminy
-These four registers mark the top left and bottom right hand corners of a box
-which encompasses all written glyphs.
-They are reset to \-1 by
-.escarg O 0
-or
-.escarg O 1 .
-.
-.TPx
-.REG rsb
-Like
-.register sb ,
-but takes account of the heights and depths of glyphs.
-.
-.TPx
-.REG rst
-Like
-.register st ,
-but takes account of the heights and depths of glyphs.
-.
-.TPx
-.REG sb
-Depth of string below base line (generated by width function
-.esc w ).
-.
-.TPx
-.REG seconds
-The number of seconds after the minute.
-.
-Initialized at start-up.
-.
-.TPx
-.REG skw
-Right skip width from the center of the last glyph in the
-.esc w
-argument.
-.
-.TPx
-.REG slimit
-If greater than 0, the maximum number of objects on the input stack.
-.
-If \[<=]0 there is no limit, i.e., recursion can continue until virtual
-memory is exhausted.
-.
-.TPx
-.REG ssc
-The amount of horizontal space (possibly negative) that should be
-added to the last glyph before a subscript (generated by width
-function
-.esc w ).
-.
-.TPx
-.REG st
-Height of string above base line (generated by width function
-.esc w ).
-.
-.TPx
-.REG systat
-The return value of the
-.I system()
-function executed by the last
-.request sy
-request.
-.
-.TPx
-.REG urx
-Upper right x-coordinate (in PostScript units) of a given PostScript
-image (set by
-.request .psbb ).
-.
-.TPx
-.REG ury
-Upper right y-coordinate (in PostScript units) of a given PostScript
-image (set by
-.request .psbb ).
-.
-.TPx
-.REG year
-The current year (year 2000 compliant).
-.
-.TPx
-.REG yr
-Current year minus 1900.
-.
-For Y2K compliance use
-.register year
-instead.
-.
-.PD
-.
-.
-.\" --------------------------------------------------------------------
-.SH UNDERLINING
-.\" --------------------------------------------------------------------
-.
-In the
-.I RUNOFF
-language, the underlining was quite easy.
-.
-But in
-.I roff
-this is much more difficult.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Underlining with .ul
-.\" --------------------------------------------------------------------
-.
-There exists a
-.I groff
-request
-.B .ul
-(see above) that can underline the next or further source lines in
-.BR nroff ,
-but in
-.B troff
-it produces only a font change into
-.IR italic .
-.
-So this request is not really useful.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Underlining with .UL from ms
-.\" --------------------------------------------------------------------
-.
-In the \[oq]ms\[cq] macro package in tmac/s.tmac
-.BR groff_ms (@MAN7EXT@),
-there is the macro
-.BR .UL .
-.
-But this works only in
-.BR troff ,
-not in
-.BR nroff .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Underlining macro definitions
-.\" --------------------------------------------------------------------
-.
-So one can use the
-.I italic
-.B nroff
-idea from
-.B .ul
-and the
-.B troff
-definition
-in
-.I ms
-for writing a useful new macro, something like
-.
-.RS
-.EX
-\&.de UNDERLINE
-\&. ie n \[rs]\[rs]$1\[rs]f[I]\[rs]\[rs]$2\[rs]f[P]\[rs]\[rs]$3
-\&. el \[rs]\[rs]$1\[rs]Z\[aq]\[rs]\[rs]$2\[aq]\[rs]v\[aq].25m\[aq]\
-\[rs]D\[aq]l \[rs]w\[aq]\[rs]\[rs]$2\[aq]u 0\[aq]\[rs]v\[aq]-.25m\
-\[aq]\\[rs]\[rs]$3
-\&..
-.EE
-.RE
-.
-If
-.B doclifter (1)
-makes trouble, change the macro name
-.B UNDERLINE
-into some 2-letter word, like
-.BR Ul .
-.
-Moreover change the font writing from
-.B \[rs]f[P]
-to
-.BR \[rs]fP .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Underlining without macro definitions
-.\" --------------------------------------------------------------------
-.
-If one does not want to use macro definitions, e.g. when
-.B doclifter
-gets lost, use the following:
-.
-.RS
-.EX
-\&.ds u1 before
-\&.ds u2 in
-\&.ds u3 after
-\&.ie n \[rs]*[u1]\[rs]f[I]\[rs]*[u2]\[rs]f[P]\[rs]*[u3]
-\&.el \[rs]*[u1]\[rs]Z\[aq]\[rs]*[u2]\[aq]\[rs]v\[aq].25m\[aq]\[rs]D\
-\[aq]l \[rs]w\[aq]\[rs]*[u2]\[aq]u 0\[aq]\[rs]v\[aq]-.25m\[aq]\[rs]*[u3]
-.EE
-.RE
-.
-Due to
-.BR doclifter ,
-it might be necessary to change the variable writing
-.B \e[xy]
-and
-.B \e*[xy]
-into the strange ancient writing
-.B \e*(xy
-and
-.BR \e(xy ,
-and so on.
-.
-.
-.P
-Then these lines could look like
-.RS
-.EX
-\&.ds u1 before
-\&.ds u2 in
-\&.ds u3 after
-\&.ie n \[rs]*[u1]\[rs]fI\[rs]*(u2\[rs]fP\[rs]*(u3
-\&.el \[rs]*(u1\[rs]Z\[aq]\[rs]*(u2\[aq]\[rs]v\[aq].25m'\[rs]D\[aq]l \
-\[rs]w\[aq]\[rs]*(u2\[aq]u 0\[aq]\[rs]v\[aq]-.25m\[aq]\[rs]*(u3
-.EE
-.RE
-.
-.
-.P
-The result looks like
-.RS
-.ft CR
-before
-\z\[ul]i\
-\z\[ul]n
-after
-.ft R
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS Underlining with Overstriking \ez and \e(ul
-.\" --------------------------------------------------------------------
-.
-There is another possibility for underlining by using overstriking
-with
-.BI \ez c
-(print
-.I c
-with zero width without spacing) and
-.B \e(ul
-(underline character).
-.
-This produces the underlining of 1 character, both in
-.B nroff
-and in
-.BR troff .
-.
-.
-.P
-For example the underlining of a character say
-.B t
-looks like
-.B \ez\e[ul]t
-or
-.B \ez\e(ult
-.
-.
-.P
-Longer words look then a bit strange, but a useful mode is to write
-each character into a whole own line.
-.
-To underlines the 3 character part "tar" of the word "start":
-.
-.RS
-.EX
-.br
-before s\[rs]
-\[rs]z\[rs][ul]t\[rs]
-\[rs]z\[rs][ul]a\[rs]
-\[rs]z\[rs][ul]r\[rs]
-t after
-.EE
-.RE
-.
-or
-.
-.RS
-.EX
-.br
-before s\[rs]
-\[rs]z\[rs](ult\[rs]
-\[rs]z\[rs](ula\[rs]
-\[rs]z\[rs](ulr\[rs]
-t after
-.EE
-.RE
-.
-.
-.P
-The result looks like
-.RS
-.ft CR
-before s\
-\z\[ul]t\
-\z\[ul]a\
-\z\[ul]r\
-t after
-.ft R
-.RE
-.
-.\" --------------------------------------------------------------------
-.SH COMPATIBILITY
-.\" --------------------------------------------------------------------
-.
-The differences of the groff language in comparison to classical troff
-as defined by
-.I [CSTR\~#54]
-are documented in
-.BR groff_diff (@MAN7EXT@).
-.
-.
-.P
-The groff system provides a compatibility mode, see
-.BR groff (@MAN1EXT@)
-on how to invoke this.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-Report bugs to the
-.MT bug-groff@gnu.org
-groff bug mailing list
-.ME .
-Include a complete, self-contained example that will allow the bug to
-be reproduced, and say which version of groff you are using.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-The main source of information for the groff language is the
-.B groff
-.BR info (1)
-file.
-.
-Besides the gory details, it contains many examples.
-.
-.TP
-.BR groff (@MAN1EXT@)
-the usage of the groff program and pointers to the documentation and
-availability of the groff system.
-.
-.TP
-.BR groff_diff (@MAN7EXT@)
-the differences of the groff language as compared to classical roff.
-.
-This is the authoritative document for the predefined language
-elements that are specific to groff.
-.
-.TP
-.BR groff_char (@MAN7EXT@)
-the predefined groff special characters (glyphs).
-.
-.TP
-.BR groff_font (@MAN5EXT@)
-the specification of fonts and the DESC file.
-.
-.TP
-.BR roff (@MAN7EXT@)
-the history of roff, the common parts shared by all roff systems, and
-pointers to further documentation.
-.
-.TP
-.I [CSTR\~#54]
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz
-Nroff/\:Troff User\[aq]s Manual by Ossanna & Kernighan
-.UE
-\[em] the bible for classical troff.
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.cp \n[groff_C]
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs Setup
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/man/groff_char.7.man b/man/groff_char.7.man
new file mode 100644 (file)
index 0000000..1fefea3
--- /dev/null
@@ -0,0 +1,1403 @@
+'\" t
+.TH GROFF_CHAR @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_char \- groff glyph names
+.
+.\" For best results, format this document with 'groff' (GNU roff).
+.
+.\" groff_char(7):
+.\" Source file position: <groff_source>/man/groff_char.man
+.\" Installed position: <prefix>/share/man/man7/groff_char.7
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff (GNU roff), which is a free software
+.\" project.
+.\"
+.\" 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.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program.
+.\"
+.\" If not, see <http://www.gnu.org/licenses/gpl-2.0.html>.
+.
+.
+.\" ====================================================================
+.\" Setup
+.\" ====================================================================
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_char_C \n[.C]
+.cp 0
+.
+.
+.\" groff only
+.\".if \n(.g .ne 2v
+.\".if \n(.g .sv 2v
+.
+.ds aq \(aq
+.
+.\" non-groff
+.if !\n(.g .if '\(aq'' .ds aq \'
+.
+.nr Sp 2n
+.
+.do if !r ECFONTS .do fspecial CR R
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This manual page lists the standard
+.B groff
+glyph names and the default input mapping, \%latin1.
+.
+The glyphs in this document look different depending on which output
+device was chosen (with option
+.B \-T
+for the
+.BR man (1)
+program or the roff formatter).
+.
+Glyphs not available for the device that is being used to print or
+view this manual page are marked with
+.ie \n(.g \[oq](N/A)\[cq]; the device currently used is \[oq]\*(.T\[cq].
+.el \[oq](N/A)\[cq].
+.
+.
+.P
+In the actual version,
+.B groff
+provides only \%8-bit characters for direct input and named entities
+for further glyphs.
+.
+On ASCII platforms, input character codes in the range 0 to 127
+(decimal) represent the usual \%7-bit ASCII characters, while codes
+between 127 and 255 are interpreted as the corresponding characters in
+the
+.I \%latin1
+.RI ( \%ISO-8859-1 )
+code set by default.
+.
+This mapping is contained in the file \f(CWlatin1.tmac\fP
+and can be changed by loading a different input encoding.
+.
+Note that some of the input characters are reserved by
+.BR groff ,
+either for internal use or for special input purposes.
+.
+On EBCDIC platforms, only code page
+.I cp1047
+is supported (which contains the same characters as \%latin1; the
+input encoding file is called \f(CWcp1047.tmac\fP).
+.
+Again, some input characters are reserved for internal and special
+purposes.
+.
+.
+.P
+All roff systems provide the concept of named glyphs.
+.
+In traditional roff systems, only names of length\ 2 were used, while
+groff also provides support for longer names.
+.
+It is strongly suggested that only named glyphs are used for all
+character representations outside of the printable \%7-bit ASCII range.
+.
+.
+.P
+Some of the predefined groff escape sequences (with names of length\ 1)
+also produce single glyphs; these exist for historical reasons or
+are printable versions of syntactical characters.
+.
+They include
+\[oq]\f(CW\e\e\fP\[cq],
+\[oq]\f(CW\e\[aq]\fP\[cq],
+\[oq]\f(CW\e\[ga]\fP\[cq],
+\[oq]\f(CW\e\-\fP\[cq],
+\[oq]\f(CW\e.\fP\[cq],
+and
+\[oq]\f(CW\ee\fP\[cq];
+see
+.BR groff (@MAN7EXT@).
+.
+.
+.P
+In groff, all of these different types of characters and glyphs can be
+tested positively with the \[oq]\f(CW.if\ c\fP\[cq] conditional.
+.
+.
+.\" ====================================================================
+.SH REFERENCE
+.\" ====================================================================
+.
+In this section, the glyphs in groff are specified in tabular
+form.
+.
+The meaning of the columns is as follows.
+.
+.
+.TP
+.I "Output"
+shows how the glyph is printed for the current device; although
+this can have quite a different shape on other devices, it always
+represents the same glyph.
+.
+.
+.TP
+.I "Input"
+specifies how the glyph is input either directly by a key on the
+keyboard, or by a groff escape sequence.
+.
+.
+.TP
+.I "Code"
+applies to glyphs which can be input with a single character, and
+gives the ISO \%latin1 decimal code of that input character.
+.
+Note that this code is equivalent to the lowest 256 Unicode characters,
+including \%7-bit ASCII in the range 0 to\ 127.
+.
+.
+.TP
+.I "PostScript"
+gives the usual PostScript name of the glyph.
+.
+.
+.TP
+.I "Unicode"
+is the glyph name used in composite glyph names.
+.
+The names in the Unicode column look like
+.B u0021
+or
+.BR u0041_0300 .
+.
+In groff, the corresponding Unicode characters can be constructed
+by adding a backslash and a pair of square brackets, for example
+.B \e[u0021]
+or
+.BR \e[u0041_0300] .
+.
+.
+.\" ====================================================================
+.SS "7-bit Character Codes 32\(en126"
+.\" ====================================================================
+.
+These are the basic glyphs having 7-bit ASCII code values assigned.
+.
+They are identical to the printable characters of the
+character standards \%ISO-8859-1 (\%latin1) and Unicode (range
+.IR "Basic Latin" ).
+.
+The glyph names used in composite glyph names are \[oq]u0020\[cq] up
+to \[oq]u007E\[cq].
+.
+.
+.P
+Note that input characters in the range \%0\-31 and character 127 are
+.I not
+printable characters.
+.
+Most of them are invalid input characters for
+.B groff
+anyway, and the valid ones have special meaning.
+.
+For EBCDIC, the printable characters are in the range \%66\-255.
+.
+.
+.TP
+48\-57
+Decimal digits 0 to\ 9 (print as themselves).
+.
+.
+.TP
+65\-90
+Upper case letters A\-Z (print as themselves).
+.
+.
+.TP
+97\-122
+Lower case letters a\(enz (print as themselves).
+.
+.
+.P
+Most of the remaining characters not in the just described ranges print
+as themselves; the only exceptions are the following characters:
+.
+.
+.TP
+.B \`
+the ISO \%latin1 \[oq]Grave Accent\[cq] (code\ 96) prints as \[oq], a
+left single quotation mark (Unicode u2018).
+The same output glyph can be requested explicitly
+with \[oq]\f(CW\e(oq\fP\[cq].
+The original character can be obtained
+with \[oq]\f(CW\e`\fP\[cq] (Unicode u0060).
+.
+.
+.TP
+.B \*(aq
+the ISO \%latin1 \[oq]Apostrophe\[cq] (code\ 39) prints as \[cq],
+a right single quotation mark (Unicode u2019).
+The same output glyph is commonly used in typography to represent
+a punctation apostrophe, for example in contractions.
+It can be requested explicitly with \[oq]\f(CW\e(cq\fP\[cq].
+The original character can be obtained with
+\[oq]\f(CW\e(aq\fP\[cq] (Unicode u0027).
+.
+.
+.TP
+.B -
+the ISO \%latin1 \[oq]Hyphen, Minus Sign\[cq] (code\ 45) prints as a
+hyphen (Unicode u2010).
+The same output glyph can be requested explicitly
+with \[oq]\f(CW\e(hy\fP\[cq].
+A minus sign can be obtained with \[oq]\f(CW\e-\fP\[cq] (Unicode u2212).
+.
+.
+.TP
+.B ~
+the ISO \%latin1 \[oq]Tilde\[cq] (code\ 126) is reduced in size to be
+usable as a diacritic (Unicode u02DC).
+A larger glyph can be obtained with
+\[oq]\f(CW\e(ti\fP\[cq] (Unicode u007E).
+.
+.
+.TP
+.B ^
+the ISO \%latin1 \[oq]Circumflex Accent\[cq] (code\ 94) is reduced in
+size to be usable as a diacritic (Unicode u02C6); a larger glyph
+can be obtained with \[oq]\f(CW\e(ha\fP\[cq] (Unicode u005E).
+.
+.
+.P
+.na
+.TS
+l l l l l lx.
+Output Input   Code    PostScript      Unicode Notes
+_
+\[char33]      \[char33]       33      exclam  u0021   exclamation mark (bang)
+\[char34]      \[char34]       34      quotedbl        u0022   double quote
+\[char35]      \[char35]       35      numbersign      u0023   number sign
+\[char36]      \[char36]       36      dollar  u0024   currency dollar sign
+\[char37]      \[char37]       37      percent u0025   percent
+\[char38]      \[char38]       38      ampersand       u0026   ampersand
+\[cq]  \[aq]   39      quoteright      u2019   right quote
+\[aq]  \e(aq           quotesingle     u0027   apostrophe quote
+\[char40]      \[char40]       40      parenleft       u0028   parentheses left
+\[char41]      \[char41]       41      parenright      u0029   parentheses right
+\[char42]      \[char42]       42      asterisk        u002A   asterisk
+\[char43]      \[char43]       43      plus    u002B   plus
+\[char44]      \[char44]       44      comma   u002C   comma
+\[hy]  \[char45]       45      hyphen  u2010   hyphen
+\-     \e-             minus   u2212   minus sign
+\[char46]      \[char46]       46      period  u002E   period, dot
+\[char47]      \[char47]       47      slash   u002F   slash
+\[char58]      \[char58]       58      colon   u003A   colon
+\[char59]      \[char59]       59      semicolon       u003B   semicolon
+\[char60]      \[char60]       60      less    u003C   less than
+\[char61]      \[char61]       61      equal   u003D   equal
+\[char62]      \[char62]       62      greater u003E   greater than
+\[char63]      \[char63]       63      question        u003F   question mark
+\[char64]      \[char64]       64      at      u0040   at
+\[char91]      \[char91]       91      bracketleft     u005B   square bracket left
+\[char92]      \[char92]       92      backslash       u005C   backslash
+\[char93]      \[char93]       93      bracketright    u005D   square bracket right
+\[a^]  \[ha]   94      circumflex      u02C6   modifier circumflex
+\[ha]  \e(ha           asciicircum     u005E   circumflex accent
+\[char95]      \[char95]       95      underscore      u005F   underscore
+\[oq]  \[ga]   96      quoteleft       u2018   left quote
+\[ga]  \e(ga           grave   u0060   grave accent
+\[char123]     \[char123]      123     braceleft       u007B   curly brace left
+\[char124]     \[char124]      124     bar     u007C   bar
+\[char125]     \[char125]      125     braceright      u007D   curly brace right
+\[u02DC]       \[ti]   126     tilde   u02DC   small tilde
+\[ti]  \e(ti           asciitilde      u007E   tilde
+.TE
+.ad
+.
+.
+.\" ====================================================================
+.SS "8-bit Character Codes 160 to 255"
+.\" ====================================================================
+.
+They are interpreted as printable characters according to the
+.I latin1
+.RI ( ISO-8859-1 )
+code set, being identical to the Unicode range
+.IR "Latin-1 Supplement" .
+.
+.
+.P
+Input characters in range 128\-159 (on non-EBCDIC hosts) are not
+printable characters.
+.
+.
+.TP
+160
+.
+the ISO \%latin1
+.I no-break space
+is mapped to \[oq]\f(CW\e\(ti\fP\[cq], the stretchable space
+character.
+.
+.
+.TP
+173
+.
+the soft hyphen control character.
+.
+.B groff
+never uses this character for output (thus it is omitted in the table
+below); the input character\ 173 is mapped onto \[oq]\f(CW\e%\fP\[cq].
+.
+.
+.P
+The remaining ranges (\%161\-172, \%174\-255)
+are printable characters that print as themselves.
+.
+Although they can be specified directly with the keyboard on systems
+with a \%latin1 code page, it is better to use their glyph names;
+see the next section.
+.
+.P
+.na
+.TS
+l l l l l lx.
+Output Input   Code    PostScript      Unicode Notes
+_
+\[char161]     \[char161]      161     exclamdown      u00A1   inverted exclamation mark
+\[char162]     \[char162]      162     cent    u00A2   currency unit
+\[char163]     \[char163]      163     sterling        u00A3   pound sterling
+\[char164]     \[char164]      164     currency        u00A4   generic currency symbol
+\[char165]     \[char165]      165     yen     u00A5   Japanese currency symbol
+\[char166]     \[char166]      166     brokenbar       u00A6   broken bar
+\[char167]     \[char167]      167     section u00A7   section sign
+\[char168]     \[char168]      168     dieresis        u00A8   dieresis (umlaut)
+\[char169]     \[char169]      169     copyright       u00A9   copyright symbol
+\[char170]     \[char170]      170     ordfeminine     u00AA   feminine ordinal (Spanish)
+\[char171]     \[char171]      171     guillemotleft   u00AB   left guillemet [sic]
+\[char172]     \[char172]      172     logicalnot      u00AC   logical not
+\[char174]     \[char174]      174     registered      u00AE   registered mark symbol
+\[char175]     \[char175]      175     macron  u00AF   overbar accent
+\[char176]     \[char176]      176     degree  u00B0   degree sign
+\[char177]     \[char177]      177     plusminus       u00B1   plus-minus sign
+\[char178]     \[char178]      178     twosuperior     u00B2   superscript 2
+\[char179]     \[char179]      179     threesuperior   u00B3   superscript 3
+\[char180]     \[char180]      180     acute   u00B4   acute accent
+\[char181]     \[char181]      181     mu      u00B5   micro sign
+\[char182]     \[char182]      182     paragraph       u00B6   end of paragraphs marker
+\[char183]     \[char183]      183     periodcentered  u00B7   centered period
+\[char184]     \[char184]      184     cedilla u00B8   cedilla accent
+\[char185]     \[char185]      185     onesuperior     u00B9   superscript 1
+\[char186]     \[char186]      186     ordmasculine    u00BA   masculine ordinal (Spanish)
+\[char187]     \[char187]      187     guillemotright  u00BB   right guillemet [sic]
+\[char188]     \[char188]      188     onequarter      u00BC   1/4 symbol
+\[char189]     \[char189]      189     onehalf u00BD   1/2 symbol
+\[char190]     \[char190]      190     threequarters   u00BE   3/4 symbol
+\[char191]     \[char191]      191     questiondown    u00BF   inverted question mark
+\[char192]     \[char192]      192     Agrave  u0041_0300      A grave
+\[char193]     \[char193]      193     Aacute  u0041_0301      A acute
+\[char194]     \[char194]      194     Acircumflex     u0041_0302      A circumflex
+\[char195]     \[char195]      195     Atilde  u0041_0303      A tilde
+\[char196]     \[char196]      196     Adieresis       u0041_0308      A dieresis (umlaut)
+\[char197]     \[char197]      197     Aring   u0041_030A      A ring
+\[char198]     \[char198]      198     AE      u00C6   A+E combined
+\[char199]     \[char199]      199     Ccedilla        u0043_0327      C cedilla
+\[char200]     \[char200]      200     Egrave  u0045_0300      E grave
+\[char201]     \[char201]      201     Eacute  u0045_0301      E acute
+\[char202]     \[char202]      202     Ecircumflex     u0045_0302      E circumflex
+\[char203]     \[char203]      203     Edieresis       u0045_0308      E dieresis (umlaut)
+\[char204]     \[char204]      204     Igrave  u0049_0300      I grave
+\[char205]     \[char205]      205     Iacute  u0049_0301      I acute
+\[char206]     \[char206]      206     Icircumflex     u0049_0302      I circumflex
+\[char207]     \[char207]      207     Idieresis       u0049_0308      I dieresis
+\[char208]     \[char208]      208     Eth     u00D0   E th
+\[char209]     \[char209]      209     Ntilde  u004E_0303      N tilde
+\[char210]     \[char210]      210     Ograve  u004F_0300      O grave
+\[char211]     \[char211]      211     Oacute  u004F_0301      O acute
+\[char212]     \[char212]      212     Ocircumflex     u004F_0302      O circumflex
+\[char213]     \[char213]      213     Otilde  u004F_0303      O tilde
+\[char214]     \[char214]      214     Odieresis       u004F_0308      O dieresis (umlaut)
+\[char215]     \[char215]      215     multiply        u00D7   multiply
+\[char216]     \[char216]      216     Oslash  u00D8   O slash
+\[char217]     \[char217]      217     Ugrave  u0055_0300      U grave
+\[char218]     \[char218]      218     Uacute  u0055_0301      U acute
+\[char219]     \[char219]      219     Ucircumflex     u0055_0302      U circumflex
+\[char220]     \[char220]      220     Udieresis       u0055_0308      U dieresis (umlaut)
+\[char221]     \[char221]      221     Yacute  u0059_0301      Y acute
+\[char222]     \[char222]      222     Thorn   u00DE   Thorn
+\[char223]     \[char223]      223     germandbls      u00DF   German double s (sharp s)
+\[char224]     \[char224]      224     agrave  u0061_0300      a grave
+\[char225]     \[char225]      225     aacute  u0061_0301      a acute
+\[char226]     \[char226]      226     acircumflex     u0061_0302      a circumflex
+\[char227]     \[char227]      227     atilde  u0061_0303      a tilde
+\[char228]     \[char228]      228     adieresis       u0061_0308      a dieresis (umlaut)
+\[char229]     \[char229]      229     aring   u0061_030A      a ring
+\[char230]     \[char230]      230     ae      u00E6   a+e combined
+\[char231]     \[char231]      231     ccedilla        u0063_0327      c cedilla
+\[char232]     \[char232]      232     egrave  u0065_0300      e grave
+\[char233]     \[char233]      233     eacute  u0065_0301      e acute
+\[char234]     \[char234]      234     ecircumflex     u0065_0302      e circumflex
+\[char235]     \[char235]      235     edieresis       u0065_0308      e dieresis (umlaut)
+\[char236]     \[char236]      236     igrave  u0069_0300      i grave
+\[char237]     \[char237]      237     iacute  u0069_0301      i acute
+\[char238]     \[char238]      238     icircumflex     u0069_0302      i circumflex
+\[char239]     \[char239]      239     idieresis       u0069_0308      i dieresis (umlaut)
+\[char240]     \[char240]      240     eth     u00F0   e th
+\[char241]     \[char241]      241     ntilde  u006E_0303      n tilde
+\[char242]     \[char242]      242     ograve  u006F_0300      o grave
+\[char243]     \[char243]      243     oacute  u006F_0301      o acute
+\[char244]     \[char244]      244     ocircumflex     u006F_0302      o circumflex
+\[char245]     \[char245]      245     otilde  u006F_0303      o tilde
+\[char246]     \[char246]      246     odieresis       u006F_0308      o dieresis (umlaut)
+\[char247]     \[char247]      247     divide  u00F7   divide
+\[char248]     \[char248]      248     oslash  u00F8   o slash
+\[char249]     \[char249]      249     ugrave  u0075_0300      u grave
+\[char250]     \[char250]      250     uacute  u0075_0301      u acute
+\[char251]     \[char251]      251     ucircumflex     u0075_0302      u circumflex
+\[char252]     \[char252]      252     udieresis       u0075_0308      u dieresis (umlaut)
+\[char253]     \[char253]      253     yacute  u0079_0301      y acute
+\[char254]     \[char254]      254     thorn   u00FE   thorn
+\[char255]     \[char255]      255     ydieresis       u0079_0308      y dieresis (umlaut)
+.TE
+.ad
+.
+.
+.\" ====================================================================
+.SS "Named Glyphs"
+.\" ====================================================================
+.
+Glyph names can be embedded into the document text by using escape
+sequences.
+.
+.BR groff (@MAN7EXT@)
+describes how these escape sequences look.
+.
+Glyph names can consist of quite arbitrary characters from the
+ASCII or \%latin1 code set, not only alphanumeric characters.
+.
+Here some examples:
+.
+.TP
+\f(CW\e(\fP\fIch\fP
+A glyph having the 2-character name
+.IR ch .
+.
+.TP
+\f(CW\e[\fP\,\fIchar_name\/\fP\f(CW]\fP
+A glyph having the name
+.I char_name
+(having length 1, 2, 3, \&.\|.\|.).
+.
+Note that \[oq]\fIc\fP\[cq] is not the same as
+\[oq]\f(CW\e[\fP\,\fIc\/\fP\f(CW]\fP\[cq] (\,\fIc\fP\ a single
+character): The latter is internally mapped to glyph name
+\[oq]\e\fIc\fP\[cq].
+.
+By default, groff defines a single glyph name starting with a
+backslash, namely \%\[oq]\e-\[cq], which can be either accessed as
+\[oq]\f(CW\e\-\fP\[cq] or \[oq]\f(CW\e[-]\fP\[cq].
+.
+.TP
+\f(CW\e[\fP\,\fIbase_glyph composite_1 composite_2 \&.\|.\|.\/\fP\
+\f(CW]\fP
+A composite glyph; see below for a more detailed description.
+.
+.
+.P
+In groff, each \%8-bit input character can also referred to by the
+construct
+\[oq]\f(CW\e[char\fP\,\fIn\/\fP\f(CW]\fP\[cq] where
+.I n
+is the decimal code of the character, a number between 0 and\ 255
+without leading zeros (those entities are
+.I not
+glyph names).
+.
+They are normally mapped onto glyphs using the \f(CW.trin\fP request.
+.
+.
+.P
+Another special convention is the handling of glyphs with names directly
+derived from a Unicode code point; this is shown in the
+\[oq]Unicode\[cq] column of the table below.
+.
+In general, all glyphs not having a name as listed in this manual page
+can be accessed with the
+\[oq]\f(CW\e[u\fP\,\fIXXXX\/\fP\f(CW]\fP\[cq]
+construct.
+.
+Refer to section \[lq]Using Symbols\[rq] in
+.IR "Groff: The GNU Implementation of troff" ,
+the
+.I groff
+Texinfo manual,
+which describes how
+.I groff
+glyph names are constructed.
+.
+.
+.P
+Moreover, new glyph names can be created by the \f(CW.char\fP request;
+see
+.BR groff (@MAN7EXT@).
+.
+.P
+In the following, a plus sign \[oq]+\[cq] in the \[oq]Notes\[cq] column
+indicates that this particular glyph name appears in the PS version of
+the original troff documentation, CSTR\ 54.
+.
+.P
+Entries marked with \[oq]***\[cq] denote glyphs for mathematical
+purposes (mainly used for DVI output).
+.
+Normally, such glyphs have metrics which make them unusable in normal
+text.
+.
+.
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[-D]  \e[-D]  Eth     u00D0   uppercase eth
+\[Sd]  \e[Sd]  eth     u00F0   lowercase eth
+\[TP]  \e[TP]  Thorn   u00DE   uppercase thorn
+\[Tp]  \e[Tp]  thorn   u00FE   lowercase thorn
+\[ss]  \e[ss]  germandbls      u00DF   German double s (sharp s)
+.TE
+.ad
+.
+.P
+.I Ligatures and Other Latin Glyphs
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[ff]  \e[ff]  ff      u0066_0066      ff ligature +
+\[fi]  \e[fi]  fi      u0066_0069      fi ligature +
+\[fl]  \e[fl]  fl      u0066_006C      fl ligature +
+\[Fi]  \e[Fi]  ffi     u0066_0066_0069 ffi ligature +
+\[Fl]  \e[Fl]  ffl     u0066_0066_006C ffl ligature +
+\[/L]  \e[/L]  Lslash  u0141   L slash (Polish)
+\[/l]  \e[/l]  lslash  u0142   l slash (Polish)
+\[/O]  \e[/O]  Oslash  u00D8   O slash (Scandinavian)
+\[/o]  \e[/o]  oslash  u00F8   o slash (Scandinavian)
+\[AE]  \e[AE]  AE      u00C6   A+E combined
+\[ae]  \e[ae]  ae      u00E6   a+e combined
+\[OE]  \e[OE]  OE      u0152   O+E combined
+\[oe]  \e[oe]  oe      u0153   o+e combined
+\[IJ]  \e[IJ]  IJ      u0132   I+J combined (Dutch)
+\[ij]  \e[ij]  ij      u0133   i+j combined(Dutch)
+\[.i]  \e[.i]  dotlessi        u0131   i without a dot (Turkish)
+\[.j]  \e[.j]  dotlessj        u0237   j without a dot
+.TE
+.ad
+.
+.P
+.I Accented Characters
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\['A]  \e['A]  Aacute  u0041_0301      A acute
+\['C]  \e['C]  Cacute  u0043_0301      C acute
+\['E]  \e['E]  Eacute  u0045_0301      E acute
+\['I]  \e['I]  Iacute  u0049_0301      I acute
+\['O]  \e['O]  Oacute  u004F_0301      O acute
+\['U]  \e['U]  Uacute  u0055_0301      U acute
+\['Y]  \e['Y]  Yacute  u0059_0301      Y acute
+\['a]  \e['a]  aacute  u0061_0301      a acute
+\['c]  \e['c]  cacute  u0063_0301      c acute
+\['e]  \e['e]  eacute  u0065_0301      e acute
+\['i]  \e['i]  iacute  u0069_0301      i acute
+\['o]  \e['o]  oacute  u006F_0301      o acute
+\['u]  \e['u]  uacute  u0075_0301      u acute
+\['y]  \e['y]  yacute  u0079_0301      y acute
+\[:A]  \e[:A]  Adieresis       u0041_0308      A dieresis (umlaut)
+\[:E]  \e[:E]  Edieresis       u0045_0308      E dieresis (umlaut)
+\[:I]  \e[:I]  Idieresis       u0049_0308      I dieresis (umlaut)
+\[:O]  \e[:O]  Odieresis       u004F_0308      O dieresis (umlaut)
+\[:U]  \e[:U]  Udieresis       u0055_0308      U dieresis (umlaut)
+\[:Y]  \e[:Y]  Ydieresis       u0059_0308      Y dieresis (umlaut)
+\[:a]  \e[:a]  adieresis       u0061_0308      a dieresis (umlaut)
+\[:e]  \e[:e]  edieresis       u0065_0308      e dieresis (umlaut)
+\[:i]  \e[:i]  idieresis       u0069_0308      i dieresis (umlaut)
+\[:o]  \e[:o]  odieresis       u006F_0308      o dieresis (umlaut)
+\[:u]  \e[:u]  udieresis       u0075_0308      u dieresis (umlaut)
+\[:y]  \e[:y]  ydieresis       u0079_0308      y dieresis (umlaut)
+\[^A]  \e[^A]  Acircumflex     u0041_0302      A circumflex
+\[^E]  \e[^E]  Ecircumflex     u0045_0302      E circumflex
+\[^I]  \e[^I]  Icircumflex     u0049_0302      I circumflex
+\[^O]  \e[^O]  Ocircumflex     u004F_0302      O circumflex
+\[^U]  \e[^U]  Ucircumflex     u0055_0302      U circumflex
+\[^a]  \e[^a]  acircumflex     u0061_0302      a circumflex
+\[^e]  \e[^e]  ecircumflex     u0065_0302      e circumflex
+\[^i]  \e[^i]  icircumflex     u0069_0302      i circumflex
+\[^o]  \e[^o]  ocircumflex     u006F_0302      o circumflex
+\[^u]  \e[^u]  ucircumflex     u0075_0302      u circumflex
+\[`A]  \e[`A]  Agrave  u0041_0300      A grave
+\[`E]  \e[`E]  Egrave  u0045_0300      E grave
+\[`I]  \e[`I]  Igrave  u0049_0300      I grave
+\[`O]  \e[`O]  Ograve  u004F_0300      O grave
+\[`U]  \e[`U]  Ugrave  u0055_0300      U grave
+\[`a]  \e[`a]  agrave  u0061_0300      a grave
+\[`e]  \e[`e]  egrave  u0065_0300      e grave
+\[`i]  \e[`i]  igrave  u0069_0300      i grave
+\[`o]  \e[`o]  ograve  u006F_0300      o grave
+\[`u]  \e[`u]  ugrave  u0075_0300      u grave
+\[~A]  \e[~A]  Atilde  u0041_0303      A tilde
+\[~N]  \e[~N]  Ntilde  u004E_0303      N tilde
+\[~O]  \e[~O]  Otilde  u004F_0303      O tilde
+\[~a]  \e[~a]  atilde  u0061_0303      a tilde
+\[~n]  \e[~n]  ntilde  u006E_0303      n tilde
+\[~o]  \e[~o]  otilde  u006F_0303      o tilde
+\[vS]  \e[vS]  Scaron  u0053_030C      S caron
+\[vs]  \e[vs]  scaron  u0073_030C      s caron
+\[vZ]  \e[vZ]  Zcaron  u005A_030C      Z caron
+\[vz]  \e[vz]  zcaron  u007A_030C      z caron
+\[,C]  \e[,C]  Ccedilla        u0043_0327      C cedilla
+\[,c]  \e[,c]  ccedilla        u0063_0327      c cedilla
+\[oA]  \e[oA]  Aring   u0041_030A      A ring
+\[oa]  \e[oa]  aring   u0061_030A      a ring
+.TE
+.ad
+.
+.P
+.I Accents
+.P
+The
+.B composite
+request is used to map most of the accents to non-spacing glyph names;
+the values given in parentheses are the original (spacing) ones.
+.
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[a"]  \e[a"]  hungarumlaut    u030B (u02DD)   Hungarian umlaut
+\[a-]  \e[a-]  macron  u0304 (u00AF)   overbar accent
+\[a.]  \e[a.]  dotaccent       u0307 (u02D9)   dot accent
+\[a^]  \e[a^]  circumflex      u0302 (u005E)   circumflex accent
+\[aa]  \e[aa]  acute   u0301 (u00B4)   acute accent +
+\[ga]  \e[ga]  grave   u0300 (u0060)   grave accent +
+\[ab]  \e[ab]  breve   u0306 (u02D8)   breve accent
+\[ac]  \e[ac]  cedilla u0327 (u00B8)   cedilla accent
+\[ad]  \e[ad]  dieresis        u0308 (u00A8)   umlaut accent
+\[ah]  \e[ah]  caron   u030C (u02C7)   caron accent
+\[ao]  \e[ao]  ring    u030A (u02DA)   small circle, ring accent
+\[a~]  \e[a~]  tilde   u0303 (u007E)   tilde accent
+\[ho]  \e[ho]  ogonek  u0328 (u02DB)   hook accent
+\[ha]  \e[ha]  asciicircum     u005E   T{
+high circumflex, ASCII character, in mathematics the power sign
+T}
+\[ti]  \e[ti]  asciitilde      u007E   T{
+tilde in vertical middle, ASCII, in Unix-like the home directory
+T}
+.TE
+.ad
+.
+.P
+.I Quotes
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[Bq]  \e[Bq]  quotedblbase    u201E   low double comma quote
+\[bq]  \e[bq]  quotesinglbase  u201A   low single comma quote
+\[lq]  \e[lq]  quotedblleft    u201C   left double quote
+\[rq]  \e[rq]  quotedblright   u201D   right double quote
+\[oq]  \e[oq]  quoteleft       u2018   single open (left) quote
+\[cq]  \e[cq]  quoteright      u2019   single closing (right) quote
+\[aq]  \e[aq]  quotesingle     u0027   apostrophe quote (ASCII 39)
+\[dq]  \e[dq]  quotedbl        u0022   double quote (ASCII 34)
+\[Fo]  \e[Fo]  guillemotleft   u00AB   left guillemet [sic]
+\[Fc]  \e[Fc]  guillemotright  u00BB   right guillemet [sic]
+\[fo]  \e[fo]  guilsinglleft   u2039   T{
+single left-pointing angle quotation mark
+T}
+\[fc]  \e[fc]  guilsinglright  u203A   T{
+single right-pointing angle quotation mark
+T}
+.TE
+.ad
+.
+.P
+.I Punctuation
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[r!]  \e[r!]  exclamdown      u00A1   inverted exclamation mark
+\[r?]  \e[r?]  questiondown    u00BF   inverted question mark
+\[em]  \e[em]  emdash  u2014   em-dash symbol +
+\[en]  \e[en]  endash  u2013   en-dash symbol
+\[hy]  \e[hy]  hyphen  u2010   hyphen symbol +
+.TE
+.ad
+.
+.P
+.I Brackets
+.P
+The extensible bracket pieces are font-invariant glyphs.
+.
+In classical troff only one glyph was available to vertically extend
+brackets, braces, and parentheses: \[oq]bv\[cq].
+.
+We map it rather arbitrarily to u23AA.
+.
+.P
+Note that not all devices contain extensible bracket pieces which can
+be piled up with \[oq]\f(CW\eb\fP\[cq] due to the restrictions of the
+escape's piling algorithm.
+.
+A general solution to build brackets out of pieces is the following
+macro:
+.
+.P
+.nf
+.RS
+.ft C
+\&.\e" Make a pile centered vertically 0.5em
+\&.\e" above the baseline.
+\&.\e" The first argument is placed at the top.
+\&.\e" The pile is returned in string 'pile'
+\&.eo
+\&.de pile-make
+\&.  nr pile-wd 0
+\&.  nr pile-ht 0
+\&.  ds pile-args
+\&.
+\&.  nr pile-# \en[.$]
+\&.  while \en[pile-#] \e{\e
+\&.    nr pile-wd (\en[pile-wd] >? \ew'\e$[\en[pile-#]]')
+\&.    nr pile-ht +(\en[rst] - \en[rsb])
+\&.    as pile-args \ev'\en[rsb]u'\e"
+\&.    as pile-args \eZ'\e$[\en[pile-#]]'\e"
+\&.    as pile-args \ev'-\en[rst]u'\e"
+\&.    nr pile-# -1
+\&.  \e}
+\&.
+\&.  ds pile \ev'(-0.5m + (\en[pile-ht]u / 2u))'\e"
+\&.  as pile \e*[pile-args]\e"
+\&.  as pile \ev'((\en[pile-ht]u / 2u) + 0.5m)'\e"
+\&.  as pile \eh'\en[pile-wd]u'\e"
+\&..
+\&.ec
+.ft
+.RE
+.fi
+.
+.P
+Another complication is the fact that some glyphs which represent
+bracket pieces in original troff can be used for other mathematical
+symbols also, for example \[oq]lf\[cq] and \[oq]rf\[cq] which provide
+the \[oq]floor\[cq] operator.
+.
+Other devices (most notably for DVI output) don't unify such
+glyphs.
+.
+For this reason, the four glyphs \[oq]lf\[cq], \[oq]rf\[cq],
+\[oq]lc\[cq], and \[oq]rc\[cq] are not unified with similarly looking
+bracket pieces.
+.
+In
+.BR groff ,
+only glyphs with long names are guaranteed to pile up correctly for all
+devices (provided those glyphs exist).
+.
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[lB]  \e[lB]  bracketleft     u005B   T{
+left square bracket
+T}
+\[rB]  \e[rB]  bracketright    u005D   T{
+right square bracket
+T}
+\[lC]  \e[lC]  braceleft       u007B   T{
+left curly brace
+T}
+\[rC]  \e[rC]  braceright      u007D   T{
+right curly brace
+T}
+\[la]  \e[la]  angleleft       u27E8   T{
+left angle bracket
+T}
+\[ra]  \e[ra]  angleright      u27E9   T{
+right angle bracket
+T}
+
+\[bv]  \e[bv]  braceex u23AA   T{
+curly brace vertical extension *** +
+T}
+\[braceex]     \e[braceex]     braceex u23AA   T{
+curly brace vertical extension
+T}
+
+\[bracketlefttp]       \e[bracketlefttp]       bracketlefttp   u23A1   T{
+left square bracket top
+T}
+\[bracketleftbt]       \e[bracketleftbt]       bracketleftbt   u23A3   T{
+left square bracket bottom
+T}
+\[bracketleftex]       \e[bracketleftex]       bracketleftex   u23A2   T{
+left square bracket extension
+T}
+\[bracketrighttp]      \e[bracketrighttp]      bracketrighttp  u23A4   T{
+right square bracket top
+T}
+\[bracketrightbt]      \e[bracketrightbt]      bracketrightbt  u23A6   T{
+right square bracket bottom
+T}
+\[bracketrightex]      \e[bracketrightex]      bracketrightex  u23A5   T{
+right square bracket extension
+T}
+
+\[lt]  \e[lt]  bracelefttp     u23A7   T{
+left curly brace top +
+T}
+\[bracelefttp] \e[bracelefttp] bracelefttp     u23A7   T{
+left curly brace top
+T}
+\[lk]  \e[lk]  braceleftmid    u23A8   T{
+left curly brace middle +
+T}
+\[braceleftmid]        \e[braceleftmid]        braceleftmid    u23A8   T{
+left curly brace middle
+T}
+\[lb]  \e[lb]  braceleftbt     u23A9   T{
+left curly brace bottom +
+T}
+\[braceleftbt] \e[braceleftbt] braceleftbt     u23A9   T{
+left curly brace bottom
+T}
+\[braceleftex] \e[braceleftex] braceleftex     u23AA   T{
+left curly brace extension
+T}
+\[rt]  \e[rt]  bracerighttp    u23AB   T{
+right curly brace top +
+T}
+\[bracerighttp]        \e[bracerighttp]        bracerighttp    u23AB   T{
+right curly brace top
+T}
+\[rk]  \e[rk]  bracerightmid   u23AC   T{
+right curly brace middle +
+T}
+\[bracerightmid]       \e[bracerightmid]       bracerightmid   u23AC   T{
+right curly brace middle
+T}
+\[rb]  \e[rb]  bracerightbt    u23AD   T{
+right curly brace bottom +
+T}
+\[bracerightbt]        \e[bracerightbt]        bracerightbt    u23AD   T{
+right curly brace bottom
+T}
+\[bracerightex]        \e[bracerightex]        bracerightex    u23AA   T{
+right curly brace extension
+T}
+\[parenlefttp] \e[parenlefttp] parenlefttp     u239B   T{
+left parenthesis top
+T}
+\[parenleftbt] \e[parenleftbt] parenleftbt     u239D   T{
+left parenthesis bottom
+T}
+\[parenleftex] \e[parenleftex] parenleftex     u239C   T{
+left parenthesis extension
+T}
+\[parenrighttp]        \e[parenrighttp]        parenrighttp    u239E   T{
+right parenthesis top
+T}
+\[parenrightbt]        \e[parenrightbt]        parenrightbt    u23A0   T{
+right parenthesis bottoom
+T}
+\[parenrightex]        \e[parenrightex]        parenrightex    u239F   T{
+right parenthesis extension
+T}
+.TE
+.ad
+.
+.P
+.I Arrows
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[<-]  \e[<-]  arrowleft       u2190   horizontal arrow left +
+\[->]  \e[->]  arrowright      u2192   horizontal arrow right +
+\[<>]  \e[<>]  arrowboth       u2194   T{
+horizontal arrow in both directions
+T}
+\[da]  \e[da]  arrowdown       u2193   vertical arrow down +
+\[ua]  \e[ua]  arrowup u2191   vertical arrow up +
+\[va]  \e[va]  arrowupdn       u2195   T{
+vertical arrow in both directions
+T}
+\[lA]  \e[lA]  arrowdblleft    u21D0   horizontal double arrow left
+\[rA]  \e[rA]  arrowdblright   u21D2   horizontal double arrow right
+\[hA]  \e[hA]  arrowdblboth    u21D4   T{
+horizontal double arrow in both directions
+T}
+\[dA]  \e[dA]  arrowdbldown    u21D3   vertical double arrow down
+\[uA]  \e[uA]  arrowdblup      u21D1   vertical double arrow up
+\[vA]  \e[vA]  uni21D5 u21D5   T{
+vertical double arrow in both directions
+T}
+\[an]  \e[an]  arrowhorizex    u23AF   horizontal arrow extension
+.TE
+.ad
+.
+.P
+.I Lines
+.P
+The font-invariant glyphs \[oq]br\[cq], \[oq]ul\[cq], and \[oq]rn\[cq]
+form corners; they can be used to build boxes.
+.
+Note that both the PostScript and the Unicode-derived names of
+these three glyphs are just rough approximations.
+.
+.P
+\[oq]rn\[cq] also serves in classical troff as the horizontal
+extension of the square root sign.
+.
+.P
+\[oq]ru\[cq] is a font-invariant glyph, namely a rule of length 0.5m.
+.
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[ba]  \e[ba]  bar     u007C
+\[br]  \e[br]  SF110000        u2502   box rule +
+\[ul]  \e[ul]  underscore      u005F   +
+\[rn]  \e[rn]  overline        u203E   +
+\[ru]  \e[ru]  ---     ---     baseline rule +
+\[bb]  \e[bb]  brokenbar       u00A6
+\[sl]  \e[sl]  slash   u002F   +
+\[rs]  \e[rs]  backslash       u005C   reverse solidus
+.TE
+.ad
+.
+.P
+Use \[oq]\f(CW\e[radicalex]\fP\[cq], not
+\[oq]\f(CW\e[overline]\fP\[cq], for continuation of square root.
+.
+.P
+.I Text markers
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[ci]  \e[ci]  circle  u25CB   +
+\[bu]  \e[bu]  bullet  u2022   +
+\[dd]  \e[dd]  daggerdbl       u2021   double dagger sign +
+\[dg]  \e[dg]  dagger  u2020   dagger +
+\[lz]  \e[lz]  lozenge u25CA   lozenge, diamond, pound key
+\[sq]  \e[sq]  uni25A1 u25A1   white square +
+\[ps]  \e[ps]  paragraph       u00B6   end of paragraph marker
+\[sc]  \e[sc]  section u00A7   section sign +
+\[lh]  \e[lh]  uni261C u261C   hand pointing left +
+\[rh]  \e[rh]  a14     u261E   hand pointing right +
+\[at]  \e[at]  at      u0040   at
+\[sh]  \e[sh]  numbersign      u0023   number sign
+\[CR]  \e[CR]  carriagereturn  u21B5   carriage return
+\[OK]  \e[OK]  a19     u2713   check mark, tick
+.TE
+.ad
+.
+.P
+.I Legal Symbols
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[co]  \e[co]  copyright       u00A9   +
+\[rg]  \e[rg]  registered      u00AE   +
+\[tm]  \e[tm]  trademark       u2122
+\[bs]  \e[bs]  ---     ---     AT&T Bell Labs logo +
+.TE
+.ad
+.
+.P
+The Bell Labs logo is not supported in groff.
+.
+.P
+.I Currency symbols
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[Do]  \e[Do]  dollar  u0024   dollar
+\[ct]  \e[ct]  cent    u00A2   cent +
+\[eu]  \e[eu]  ---     u20AC   official Euro symbol
+\[Eu]  \e[Eu]  Euro    u20AC   font-specific Euro glyph variant
+\[Ye]  \e[Ye]  yen     u00A5   Japanese Yen
+\[Po]  \e[Po]  sterling        u00A3   pound sterling (British)
+\[Cs]  \e[Cs]  currency        u00A4   Scandinavian currency sign
+\[Fn]  \e[Fn]  florin  u0192   Dutch currency sign
+.TE
+.ad
+.
+.P
+.I Units
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[de]  \e[de]  degree  u00B0   degree +
+\[%0]  \e[%0]  perthousand     u2030   per thousand, per mille sign
+\[fm]  \e[fm]  minute  u2032   arc minute sign +
+\[sd]  \e[sd]  second  u2033   acr second sign
+\[mc]  \e[mc]  mu      u00B5   mu, micro sign
+\[Of]  \e[Of]  ordfeminine     u00AA   feminine ordinal (Spanish)
+\[Om]  \e[Om]  ordmasculine    u00BA   masculine ordinal (Spanish)
+.TE
+.ad
+.
+.P
+.I Logical Symbols
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[AN]  \e[AN]  logicaland      u2227   logical and
+\[OR]  \e[OR]  logicalor       u2228   logical or
+\[no]  \e[no]  logicalnot      u00AC   logical not + ***
+\[tno] \e[tno] logicalnot      u00AC   text variant of \[oq]no\[cq]
+\[te]  \e[te]  existential     u2203   there exists
+\[fa]  \e[fa]  universal       u2200   for all
+\[st]  \e[st]  suchthat        u220B   sucht that
+\[3d]  \e[3d]  therefore       u2234   therefore
+\[tf]  \e[tf]  therefore       u2234   therefore
+\[or]  \e[or]  bar     u007C   T{
+bitwise OR operator (as used in\ C) +
+T}
+.TE
+.ad
+.
+.P
+.I Mathematical Symbols
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[12]  \e[12]  onehalf u00BD   1/2 symbol +
+\[14]  \e[14]  onequarter      u00BC   1/4 symbol +
+\[34]  \e[34]  threequarters   u00BE   3/4 symbol +
+\[18]  \e[18]  oneeighth       u215B   1/8 symbol
+\[38]  \e[38]  threeeighths    u215C   3/8 symbol
+\[58]  \e[58]  fiveeighths     u215D   5/8 symbol
+\[78]  \e[78]  seveneighths    u215E   7/8 symbol
+\[S1]  \e[S1]  onesuperior     u00B9   superscript 1
+\[S2]  \e[S2]  twosuperior     u00B2   superscript 2
+\[S3]  \e[S3]  threesuperior   u00B3   superscript 3
+
+\[pl]  \e[pl]  plus    u002B   plus in special font +
+\[mi]  \e[mi]  minus   u2212   minus in special font +
+\[-+]  \e[-+]  uni2213 u2213   minus-plus
+\[+-]  \e[+-]  plusminus       u00B1   plus-minus + ***
+\[t+-] \e[t+-] plusminus       u00B1   text variant of \e[+-]
+\[pc]  \e[pc]  periodcentered  u00B7   period centered
+\[md]  \e[md]  dotmath u22C5   multiplication dot
+\[mu]  \e[mu]  multiply        u00D7   multiply sign + ***
+\[tmu] \e[tmu] multiply        u00D7   text variant of \e[mu]
+\[c*]  \e[c*]  circlemultiply  u2297   multiply sign in circle
+\[c+]  \e[c+]  circleplus      u2295   plus sign in circle
+\[di]  \e[di]  divide  u00F7   division sign + ***
+\[tdi] \e[tdi] divide  u00F7   text variant of \e[di]
+\[f/]  \e[f/]  fraction        u2044   bar for fractions
+\[**]  \e[**]  asteriskmath    u2217   mathematical asterisk +
+
+\[<=]  \e[<=]  lessequal       u2264   less or equal +
+\[>=]  \e[>=]  greaterequal    u2265   greater or equal +
+\[<<]  \e[<<]  uni226A u226A   much less
+\[>>]  \e[>>]  uni226B u226B   much greater
+\[eq]  \e[eq]  equal   u003D   equals in special font +
+\[!=]  \e[!=]  notequal        u003D_0338      not equal +
+\[==]  \e[==]  equivalence     u2261   equivalent +
+\[ne]  \e[ne]  uni2262 u2261_0338      not equivalent
+\[=~]  \e[=~]  congruent       u2245   T{
+congruent, approx.\& equal
+T}
+\[|=]  \e[|=]  uni2243 u2243   asymptot.\& equal to +
+\[ap]  \e[ap]  similar u223C   similar +
+\[~~]  \e[~~]  approxequal     u2248   almost equal to
+\[~=]  \e[~=]  approxequal     u2248   almost equal to
+\[pt]  \e[pt]  proportional    u221D   proportional +
+
+\[es]  \e[es]  emptyset        u2205   empty set +
+\[mo]  \e[mo]  element u2208   element of a set +
+\[nm]  \e[nm]  notelement      u2208_0338      not element of set
+\[sb]  \e[sb]  propersubset    u2282   proper subset +
+\[nb]  \e[nb]  notsubset       u2282_0338      not supset
+\[sp]  \e[sp]  propersuperset  u2283   proper superset +
+\[nc]  \e[nc]  uni2285 u2283_0338      not superset
+\[ib]  \e[ib]  reflexsubset    u2286   subset or equal +
+\[ip]  \e[ip]  reflexsuperset  u2287   superset or equal +
+\[ca]  \e[ca]  intersection    u2229   intersection, cap +
+\[cu]  \e[cu]  union   u222A   union, cup +
+
+\[/_]  \e[/_]  angle   u2220   angle
+\[pp]  \e[pp]  perpendicular   u22A5   perpendicular
+\[is]  \e[is]  integral        u222B   integral +
+\[integral]    \e[integral]    integral        u222B   integral ***
+\[sum] \e[sum] summation       u2211   summation ***
+\[product]     \e[product]     product u220F   product ***
+\[coproduct]   \e[coproduct]   uni2210 u2210   coproduct ***
+\[gr]  \e[gr]  gradient        u2207   gradient +
+\[sr]  \e[sr]  radical u221A   square root +
+\[sqrt]        \e[sqrt]        radical u221A   square root
+\[radicalex]   \e[radicalex]   radicalex       ---     T{
+square root continuation ***
+T}
+\[sqrtex]      \e[sqrtex]      radicalex       ---     T{
+square root continuation ***
+T}
+
+\[lc]  \e[lc]  uni2308 u2308   left ceiling +
+\[rc]  \e[rc]  uni2309 u2309   right ceiling +
+\[lf]  \e[lf]  uni230A u230A   left floor +
+\[rf]  \e[rf]  uni230B u230B   right floor +
+
+\[if]  \e[if]  infinity        u221E   infinity +
+\[Ah]  \e[Ah]  aleph   u2135   aleph
+\[Im]  \e[Im]  Ifraktur        u2111   Gothic I, imaginary
+\[Re]  \e[Re]  Rfraktur        u211C   Gothic R, real
+\[wp]  \e[wp]  weierstrass     u2118   Weierstrass\~p
+\[pd]  \e[pd]  partialdiff     u2202   T{
+partial differentiation +
+T}
+\[-h]  \e[-h]  uni210F u210F   T{
+Planck\ constant\ /\ 2pi (h-bar)
+T}
+\[hbar]        \e[hbar]        uni210F u210F   T{
+Planck\ constant\ /\ 2pi (h-bar)
+T}
+.TE
+.ad
+.
+.P
+.I Greek glyphs
+.P
+These glyphs are intended for technical use, not for real Greek;
+normally, the uppercase letters have upright shape, and the lowercase
+ones are slanted.
+.
+There is a problem with the mapping of letter phi to Unicode.
+.
+Prior to Unicode version\ 3.0, the difference between U+03C6, GREEK
+SMALL LETTER PHI, and U+03D5, GREEK PHI SYMBOL, was not clearly
+described; only the glyph shapes in the Unicode book could be used as a
+reference.
+.
+Starting with Unicode\ 3.0, the reference glyphs have been exchanged and
+described verbally also: In mathematical context, U+03D5 is the stroked
+variant and U+03C6 the curly glyph.
+.
+Unfortunately, most font vendors didn't update their fonts to
+this (incompatible) change in Unicode.
+.
+At the time of this writing (January 2006), it is not clear yet
+whether the Adobe Glyph Names \[oq]phi\[cq] and \[oq]phi1\[cq] also
+change its meaning if used for mathematics, thus compatibility
+problems are likely to happen \[en] being conservative, groff
+currently assumes that \[oq]phi\[cq] in a PostScript symbol font is
+the stroked version.
+.P
+In groff, symbol \[oq]\f(CW\e[*f]\fP\[cq] always denotes the stroked
+version of phi, and \[oq]\f(CW\e[+f]\fP\[cq] the curly variant.
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[*A]  \e[*A]  Alpha   u0391   +
+\[*B]  \e[*B]  Beta    u0392   +
+\[*G]  \e[*G]  Gamma   u0393   +
+\[*D]  \e[*D]  Delta   u0394   +
+\[*E]  \e[*E]  Epsilon u0395   +
+\[*Z]  \e[*Z]  Zeta    u0396   +
+\[*Y]  \e[*Y]  Eta     u0397   +
+\[*H]  \e[*H]  Theta   u0398   +
+\[*I]  \e[*I]  Iota    u0399   +
+\[*K]  \e[*K]  Kappa   u039A   +
+\[*L]  \e[*L]  Lambda  u039B   +
+\[*M]  \e[*M]  Mu      u039C   +
+\[*N]  \e[*N]  Nu      u039D   +
+\[*C]  \e[*C]  Xi      u039E   +
+\[*O]  \e[*O]  Omicron u039F   +
+\[*P]  \e[*P]  Pi      u03A0   +
+\[*R]  \e[*R]  Rho     u03A1   +
+\[*S]  \e[*S]  Sigma   u03A3   +
+\[*T]  \e[*T]  Tau     u03A4   +
+\[*U]  \e[*U]  Upsilon u03A5   +
+\[*F]  \e[*F]  Phi     u03A6   +
+\[*X]  \e[*X]  Chi     u03A7   +
+\[*Q]  \e[*Q]  Psi     u03A8   +
+\[*W]  \e[*W]  Omega   u03A9   +
+\[*a]  \e[*a]  alpha   u03B1   +
+\[*b]  \e[*b]  beta    u03B2   +
+\[*g]  \e[*g]  gamma   u03B3   +
+\[*d]  \e[*d]  delta   u03B4   +
+\[*e]  \e[*e]  epsilon u03B5   +
+\[*z]  \e[*z]  zeta    u03B6   +
+\[*y]  \e[*y]  eta     u03B7   +
+\[*h]  \e[*h]  theta   u03B8   +
+\[*i]  \e[*i]  iota    u03B9   +
+\[*k]  \e[*k]  kappa   u03BA   +
+\[*l]  \e[*l]  lambda  u03BB   +
+\[*m]  \e[*m]  mu      u03BC   +
+\[*n]  \e[*n]  nu      u03BD   +
+\[*c]  \e[*c]  xi      u03BE   +
+\[*o]  \e[*o]  omicron u03BF   +
+\[*p]  \e[*p]  pi      u03C0   +
+\[*r]  \e[*r]  rho     u03C1   +
+\[ts]  \e[ts]  sigma1  u03C2   terminal sigma +
+\[*s]  \e[*s]  sigma   u03C3   +
+\[*t]  \e[*t]  tau     u03C4   +
+\[*u]  \e[*u]  upsilon u03C5   +
+\[*f]  \e[*f]  phi     u03D5   (stroked glyph) +
+\[*x]  \e[*x]  chi     u03C7   +
+\[*q]  \e[*q]  psi     u03C8   +
+\[*w]  \e[*w]  omega   u03C9   +
+\[+h]  \e[+h]  theta1  u03D1   variant theta
+\[+f]  \e[+f]  phi1    u03C6   variant phi (curly shape)
+\[+p]  \e[+p]  omega1  u03D6   variant pi, looking like omega
+\[+e]  \e[+e]  uni03F5 u03F5   variant epsilon
+.TE
+.ad
+.
+.P
+.I Card symbols
+.P
+.na
+.TS
+l l l l lx.
+Output Input   PostScript      Unicode Notes
+_
+\[CL]  \e[CL]  club    u2663   black club suit
+\[SP]  \e[SP]  spade   u2660   black spade suit
+\[HE]  \e[HE]  heart   u2665   black heart suit
+\[u2661]       \e[u2661]       uni2661 u2661   white heart suit
+\[DI]  \e[DI]  diamond u2666   black diamond suit
+\[u2662]       \e[u2662]       uni2662 u2662   white diamond suit
+.TE
+.ad
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+This document was written by
+.MT jjc@\:jclark.com
+James Clark
+.ME ,
+with additions by
+.MT wl@\:gnu.org
+Werner Lemberg
+.ME
+and
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME ,
+and revised to use real tables by
+.MT esr@\:thyrsus.com
+Eric S.\& Raymond
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg,
+is the primary
+.I groff
+manual.
+.
+Section \[lq]Using Symbols\[rq] may be of particular note.
+.
+You can browse it interactively with \[lq]info \[aq](groff)Using
+Symbols\[aq]\[rq].
+.
+.
+.TP
+.BR groff (@MAN1EXT@)
+the GNU roff formatter
+.
+.TP
+.BR groff (@MAN7EXT@)
+a short reference of the groff formatting language
+.
+.
+.P
+.IR "An extension to the troff character set for Europe" ,
+E.G.\& Keizer, K.J.\& Simonsen, J.\& Akkerhuis; EUUG Newsletter,
+Volume 9, No.\& 2, Summer 1989
+.
+.
+.P
+.UR http://\:www.unicode.org
+The Unicode Standard
+.UE
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_char_C]
+.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" tab-width: 20
+.\" End:
+.\" vim: set filetype=groff tabstop=20 textwidth=72:
diff --git a/man/groff_char.man b/man/groff_char.man
deleted file mode 100644 (file)
index b35049b..0000000
+++ /dev/null
@@ -1,1361 +0,0 @@
-'\" t
-.TH GROFF_CHAR @MAN7EXT@ "@MDATE@" "@VERSION@"
-.SH NAME
-groff_char \- groff glyph names
-.
-.\" The lines above were designed to satisfy `apropos'.
-.
-.\" For best results, format this document with `groff' (GNU roff).
-.
-.\" groff_char(7):
-.\" Source file position: <groff_source>/man/groff_char.man
-.\" Installed position: <prefix>/share/man/man7/groff_char.7
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \(co 1989-2014 Free Software Foundation, Inc.
-
-This file is part of groff (GNU roff), which is a free software project.
-
-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.
-
-You should have received a copy of the GNU General Public License
-along with this program.
-.
-If not, see
-.UR http://www.gnu.org/licenses/gpl-2.0.html
-GPL2
-.UE .
-..
-.
-.de au
-This document was written by
-.MT jjc@jclark.com
-James Clark
-.ME
-with additions by
-.MT wl@gnu.org
-Werner Lemberg
-.ME
-and
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME .
-.
-This document was revised to use real tables by
-.MT esr@thyrsus.com
-Eric S. Raymond
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do nr groff_char_C \n[.C]
-.cp 0
-.
-.\" groff only
-.\".if \n(.g .ne 2v
-.\".if \n(.g .sv 2v
-.
-.ds aq \(aq
-.
-.\" non-groff
-.if !\n(.g .if '\(aq'' .ds aq \'
-.
-.nr Sp 2n
-.
-.do if !r ECFONTS .do fspecial CR R
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page lists the standard
-.B groff
-glyph names and the default input mapping, \%latin1.
-.
-The glyphs in this document look different depending on which output
-device was chosen (with option
-.B \-T
-for the
-.BR man (1)
-program or the roff formatter).
-.
-Glyphs not available for the device that is being used to print or
-view this manual page are marked with
-.ie \n(.g \[oq](N/A)\[cq]; the device currently used is \[oq]\*(.T\[cq].
-.el \[oq](N/A)\[cq].
-.
-.
-.P
-In the actual version,
-.B groff
-provides only \%8-bit characters for direct input and named entities
-for further glyphs.
-.
-On ASCII platforms, input character codes in the range 0 to 127
-(decimal) represent the usual \%7-bit ASCII characters, while codes
-between 127 and 255 are interpreted as the corresponding characters in
-the
-.I \%latin1
-.RI ( \%ISO-8859-1 )
-code set by default.
-.
-This mapping is contained in the file \f(CWlatin1.tmac\fP
-and can be changed by loading a different input encoding.
-.
-Note that some of the input characters are reserved by
-.BR groff ,
-either for internal use or for special input purposes.
-.
-On EBCDIC platforms, only code page
-.I cp1047
-is supported (which contains the same characters as \%latin1; the
-input encoding file is called \f(CWcp1047.tmac\fP).
-.
-Again, some input characters are reserved for internal and special purposes.
-.
-.
-.P
-All roff systems provide the concept of named glyphs.
-.
-In traditional roff systems, only names of length\ 2 were used, while
-groff also provides support for longer names.
-.
-It is strongly suggested that only named glyphs are used for all
-character representations outside of the printable \%7-bit ASCII range.
-.
-.
-.P
-Some of the predefined groff escape sequences (with names of length\ 1)
-also produce single glyphs; these exist for historical reasons or
-are printable versions of syntactical characters.
-.
-They include \[oq]\f(CW\e\e\fP\[cq], \[oq]\f(CW\e\'\fP\[cq],
-\[oq]\f(CW\e`\fP\[cq], \[oq]\f(CW\e-\fP\[cq], \[oq]\f(CW\e.\fP\[cq],
-and \[oq]\f(CW\ee\fP\[cq]; see
-.BR groff (@MAN7EXT@).
-.
-.
-.P
-In groff, all of these different types of characters and glyphs can be
-tested positively with the \[oq]\f(CW.if\ c\fP\[cq] conditional.
-.
-.
-.\" --------------------------------------------------------------------
-.SH REFERENCE
-.\" --------------------------------------------------------------------
-.
-In this section, the glyphs in groff are specified in tabular
-form.
-.
-The meaning of the columns is as follows.
-.
-.
-.TP
-.I "Output"
-shows how the glyph is printed for the current device; although
-this can have quite a different shape on other devices, it always
-represents the same glyph.
-.
-.
-.TP
-.I "Input"
-specifies how the glyph is input either directly by a key on the
-keyboard, or by a groff escape sequence.
-.
-.
-.TP
-.I "Code"
-applies to glyphs which can be input with a single character, and
-gives the ISO \%latin1 decimal code of that input character.
-.
-Note that this code is equivalent to the lowest 256 Unicode characters,
-including \%7-bit ASCII in the range 0 to\ 127.
-.
-.
-.TP
-.I "PostScript"
-gives the usual PostScript name of the glyph.
-.
-.
-.TP
-.I "Unicode"
-is the glyph name used in composite glyph names.
-.
-The names in the Unicode column look like
-.B u0021
-or
-.BR u0041_0300 .
-.
-In groff, the corresponding Unicode characters can be constructed
-by adding a backslash and a pair of square brackets, for example
-.B \e[u0021]
-or
-.BR \e[u0041_0300] .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "7-bit Character Codes 32\(en126"
-.\" --------------------------------------------------------------------
-.
-These are the basic glyphs having 7-bit ASCII code values assigned.
-.
-They are identical to the printable characters of the
-character standards \%ISO-8859-1 (\%latin1) and Unicode (range
-.IR "Basic Latin" ).
-.
-The glyph names used in composite glyph names are \[oq]u0020\[cq] up
-to \[oq]u007E\[cq].
-.
-.
-.P
-Note that input characters in the range \%0\-31 and character 127 are
-.I not
-printable characters.
-.
-Most of them are invalid input characters for
-.B groff
-anyway, and the valid ones have special meaning.
-.
-For EBCDIC, the printable characters are in the range \%66\-255.
-.
-.
-.TP
-48\-57
-Decimal digits 0 to\ 9 (print as themselves).
-.
-.
-.TP
-65\-90
-Upper case letters A\-Z (print as themselves).
-.
-.
-.TP
-97\-122
-Lower case letters a\(enz (print as themselves).
-.
-.
-.P
-Most of the remaining characters not in the just described ranges print as
-themselves; the only exceptions are the following characters:
-.
-.
-.TP
-.B \`
-the ISO \%latin1 \[oq]Grave Accent\[cq] (code\ 96) prints as \[oq], a
-left single quotation mark; the original character can be obtained
-with \[oq]\f(CW\e`\fP\[cq].
-.
-.
-.TP
-.B \*(aq
-the ISO \%latin1 \[oq]Apostrophe\[cq] (code\ 39) prints as ', a right
-single quotation mark; the original character can be obtained with
-\[oq]\f(CW\e(aq\fP\[cq].
-.
-.
-.TP
-.B -
-the ISO \%latin1 \[oq]Hyphen, Minus Sign\[cq] (code\ 45) prints as a
-hyphen; a minus sign can be obtained with \[oq]\f(CW\e-\fP\[cq].
-.
-.
-.TP
-.B ~
-the ISO \%latin1 \[oq]Tilde\[cq] (code\ 126) is reduced in size to be
-usable as a diacritic; a larger glyph can be obtained with
-\[oq]\f(CW\e(ti\fP\[cq].
-.
-.
-.TP
-.B ^
-the ISO \%latin1 \[oq]Circumflex Accent\[cq] (code\ 94) is reduced in
-size to be usable as a diacritic; a larger glyph can be obtained with
-\[oq]\f(CW\e(ha\fP\[cq].
-.
-.
-.P
-.na
-.TS
-l l l l l lx.
-Output Input   Code    PostScript      Unicode Notes
-_
-\[char33]      \[char33]       33      exclam  u0021   exclamation mark (bang)
-\[char34]      \[char34]       34      quotedbl        u0022   double quote
-\[char35]      \[char35]       35      numbersign      u0023   number sign
-\[char36]      \[char36]       36      dollar  u0024   currency dollar sign
-\[char37]      \[char37]       37      percent u0025   percent
-\[char38]      \[char38]       38      ampersand       u0026   ampersand
-\[char39]      \[char39]       39      quoteright      u0027   right quote
-\[char40]      \[char40]       40      parenleft       u0028   parentheses left
-\[char41]      \[char41]       41      parenright      u0029   parentheses right
-\[char42]      \[char42]       42      asterisk        u002A   asterisk
-\[char43]      \[char43]       43      plus    u002B   plus
-\[char44]      \[char44]       44      comma   u002C   comma
-\[char45]      \[char45]       45      hyphen  u2010   hyphen
-\[char46]      \[char46]       46      period  u002E   period, dot
-\[char47]      \[char47]       47      slash   u002F   slash
-\[char58]      \[char58]       58      colon   u003A   colon
-\[char59]      \[char59]       59      semicolon       u003B   semicolon
-\[char60]      \[char60]       60      less    u003C   less than
-\[char61]      \[char61]       61      equal   u003D   equal
-\[char62]      \[char62]       62      greater u003E   greater than
-\[char63]      \[char63]       63      question        u003F   question mark
-\[char64]      \[char64]       64      at      u0040   at
-\[char91]      \[char91]       91      bracketleft     u005B   square bracket left
-\[char92]      \[char92]       92      backslash       u005C   backslash
-\[char93]      \[char93]       93      bracketright    u005D   square bracket right
-\[char94]      \[char94]       94      circumflex      u005E   circumflex accent
-\[char95]      \[char95]       95      underscore      u005F   underscore
-\[char96]      \[char96]       96      quoteleft       u0060   quote left
-\[char123]     \[char123]      123     braceleft       u007B   curly brace left
-\[char124]     \[char124]      124     bar     u007C   bar
-\[char125]     \[char125]      125     braceright      u007D   curly brace right
-\[char126]     \[char126]      126     tilde   u007E   tilde accent
-.TE
-.ad
-.
-.
-.\" --------------------------------------------------------------------
-.SS "8-bit Character Codes 160 to 255"
-.\" --------------------------------------------------------------------
-.
-They are interpreted as printable characters according to the
-.I latin1
-.RI ( ISO-8859-1 )
-code set, being identical to the Unicode range
-.IR "Latin-1 Supplement" .
-.
-.
-.P
-Input characters in range 128\-159 (on non-EBCDIC hosts) are not
-printable characters.
-.
-.
-.TP
-160
-.
-the ISO \%latin1
-.I no-break space
-is mapped to \[oq]\f(CW\e\(ti\fP\[cq], the stretchable space
-character.
-.
-.
-.TP
-173
-.
-the soft hyphen control character.
-.
-.B groff
-never uses this character for output (thus it is omitted in the table
-below); the input character\ 173 is mapped onto \[oq]\f(CW\e%\fP\[cq].
-.
-.
-.P
-The remaining ranges (\%161\-172, \%174\-255)
-are printable characters that print as themselves.
-.
-Although they can be specified directly with the keyboard on systems
-with a \%latin1 code page, it is better to use their glyph names;
-see next section.
-.
-.P
-.na
-.TS
-l l l l l lx.
-Output Input   Code    PostScript      Unicode Notes
-_
-\[char161]     \[char161]      161     exclamdown      u00A1   inverted exclamation mark
-\[char162]     \[char162]      162     cent    u00A2   currency unit
-\[char163]     \[char163]      163     sterling        u00A3   pound sterling
-\[char164]     \[char164]      164     currency        u00A4   generic currency symbol
-\[char165]     \[char165]      165     yen     u00A5   Japanese currency symbol
-\[char166]     \[char166]      166     brokenbar       u00A6   broken bar
-\[char167]     \[char167]      167     section u00A7   section sign
-\[char168]     \[char168]      168     dieresis        u00A8   dieresis (umlaut)
-\[char169]     \[char169]      169     copyright       u00A9   copyright symbol
-\[char170]     \[char170]      170     ordfeminine     u00AA   feminine ordinal (Spanish)
-\[char171]     \[char171]      171     guillemotleft   u00AB   left guillemet [sic]
-\[char172]     \[char172]      172     logicalnot      u00AC   logical not
-\[char174]     \[char174]      174     registered      u00AE   registered mark symbol
-\[char175]     \[char175]      175     macron  u00AF   overbar accent
-\[char176]     \[char176]      176     degree  u00B0   degree sign
-\[char177]     \[char177]      177     plusminus       u00B1   plus-minus sign
-\[char178]     \[char178]      178     twosuperior     u00B2   superscript 2
-\[char179]     \[char179]      179     threesuperior   u00B3   superscript 3
-\[char180]     \[char180]      180     acute   u00B4   acute accent
-\[char181]     \[char181]      181     mu      u00B5   micro sign
-\[char182]     \[char182]      182     paragraph       u00B6   end of paragraphs marker
-\[char183]     \[char183]      183     periodcentered  u00B7   centered period
-\[char184]     \[char184]      184     cedilla u00B8   cedilla accent
-\[char185]     \[char185]      185     onesuperior     u00B9   superscript 1
-\[char186]     \[char186]      186     ordmasculine    u00BA   masculine ordinal (Spanish)
-\[char187]     \[char187]      187     guillemotright  u00BB   right guillemet [sic]
-\[char188]     \[char188]      188     onequarter      u00BC   1/4 symbol
-\[char189]     \[char189]      189     onehalf u00BD   1/2 symbol
-\[char190]     \[char190]      190     threequarters   u00BE   3/4 symbol
-\[char191]     \[char191]      191     questiondown    u00BF   inverted question mark
-\[char192]     \[char192]      192     Agrave  u0041_0300      A grave
-\[char193]     \[char193]      193     Aacute  u0041_0301      A acute
-\[char194]     \[char194]      194     Acircumflex     u0041_0302      A circumflex
-\[char195]     \[char195]      195     Atilde  u0041_0303      A tilde
-\[char196]     \[char196]      196     Adieresis       u0041_0308      A dieresis (umlaut)
-\[char197]     \[char197]      197     Aring   u0041_030A      A ring
-\[char198]     \[char198]      198     AE      u00C6   A+E combined
-\[char199]     \[char199]      199     Ccedilla        u0043_0327      C cedilla
-\[char200]     \[char200]      200     Egrave  u0045_0300      E grave
-\[char201]     \[char201]      201     Eacute  u0045_0301      E acute
-\[char202]     \[char202]      202     Ecircumflex     u0045_0302      E circumflex
-\[char203]     \[char203]      203     Edieresis       u0045_0308      E dieresis (umlaut)
-\[char204]     \[char204]      204     Igrave  u0049_0300      I grave
-\[char205]     \[char205]      205     Iacute  u0049_0301      I acute
-\[char206]     \[char206]      206     Icircumflex     u0049_0302      I circumflex
-\[char207]     \[char207]      207     Idieresis       u0049_0308      I dieresis
-\[char208]     \[char208]      208     Eth     u00D0   E th
-\[char209]     \[char209]      209     Ntilde  u004E_0303      N tilde
-\[char210]     \[char210]      210     Ograve  u004F_0300      O grave
-\[char211]     \[char211]      211     Oacute  u004F_0301      O acute
-\[char212]     \[char212]      212     Ocircumflex     u004F_0302      O circumflex
-\[char213]     \[char213]      213     Otilde  u004F_0303      O tilde
-\[char214]     \[char214]      214     Odieresis       u004F_0308      O dieresis (umlaut)
-\[char215]     \[char215]      215     multiply        u00D7   multiply
-\[char216]     \[char216]      216     Oslash  u00D8   O slash
-\[char217]     \[char217]      217     Ugrave  u0055_0300      U grave
-\[char218]     \[char218]      218     Uacute  u0055_0301      U acute
-\[char219]     \[char219]      219     Ucircumflex     u0055_0302      U circumflex
-\[char220]     \[char220]      220     Udieresis       u0055_0308      U dieresis (umlaut)
-\[char221]     \[char221]      221     Yacute  u0059_0301      Y acute
-\[char222]     \[char222]      222     Thorn   u00DE   Thorn
-\[char223]     \[char223]      223     germandbls      u00DF   German double s (sharp s)
-\[char224]     \[char224]      224     agrave  u0061_0300      a grave
-\[char225]     \[char225]      225     aacute  u0061_0301      a acute
-\[char226]     \[char226]      226     acircumflex     u0061_0302      a circumflex
-\[char227]     \[char227]      227     atilde  u0061_0303      a tilde
-\[char228]     \[char228]      228     adieresis       u0061_0308      a dieresis (umlaut)
-\[char229]     \[char229]      229     aring   u0061_030A      a ring
-\[char230]     \[char230]      230     ae      u00E6   a+e combined
-\[char231]     \[char231]      231     ccedilla        u0063_0327      c cedilla
-\[char232]     \[char232]      232     egrave  u0065_0300      e grave
-\[char233]     \[char233]      233     eacute  u0065_0301      e acute
-\[char234]     \[char234]      234     ecircumflex     u0065_0302      e circumflex
-\[char235]     \[char235]      235     edieresis       u0065_0308      e dieresis (umlaut)
-\[char236]     \[char236]      236     igrave  u0069_0300      i grave
-\[char237]     \[char237]      237     iacute  u0069_0301      i acute
-\[char238]     \[char238]      238     icircumflex     u0069_0302      i circumflex
-\[char239]     \[char239]      239     idieresis       u0069_0308      i dieresis (umlaut)
-\[char240]     \[char240]      240     eth     u00F0   e th
-\[char241]     \[char241]      241     ntilde  u006E_0303      n tilde
-\[char242]     \[char242]      242     ograve  u006F_0300      o grave
-\[char243]     \[char243]      243     oacute  u006F_0301      o acute
-\[char244]     \[char244]      244     ocircumflex     u006F_0302      o circumflex
-\[char245]     \[char245]      245     otilde  u006F_0303      o tilde
-\[char246]     \[char246]      246     odieresis       u006F_0308      o dieresis (umlaut)
-\[char247]     \[char247]      247     divide  u00F7   divide
-\[char248]     \[char248]      248     oslash  u00F8   o slash
-\[char249]     \[char249]      249     ugrave  u0075_0300      u grave
-\[char250]     \[char250]      250     uacute  u0075_0301      u acute
-\[char251]     \[char251]      251     ucircumflex     u0075_0302      u circumflex
-\[char252]     \[char252]      252     udieresis       u0075_0308      u dieresis (umlaut)
-\[char253]     \[char253]      253     yacute  u0079_0301      y acute
-\[char254]     \[char254]      254     thorn   u00FE   thorn
-\[char255]     \[char255]      255     ydieresis       u0079_0308      y dieresis (umlaut)
-.TE
-.ad
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Named Glyphs"
-.\" --------------------------------------------------------------------
-.
-Glyph names can be embedded into the document text by using escape
-sequences.
-.
-.BR groff (@MAN7EXT@)
-describes how these escape sequences look.
-.
-Glyph names can consist of quite arbitrary characters from the
-ASCII or \%latin1 code set, not only alphanumeric characters.
-.
-Here some examples:
-.
-.TP
-\f(CW\e(\fP\fIch\fP
-A glyph having the 2-character name
-.IR ch .
-.
-.TP
-\f(CW\e[\fP\,\fIchar_name\/\fP\f(CW]\fP
-A glyph having the name
-.I char_name
-(having length 1, 2, 3, \&.\|.\|.).
-.
-Note that \[oq]\fIc\fP\[cq] is not the same as
-\[oq]\f(CW\e[\fP\,\fIc\/\fP\f(CW]\fP\[cq] (\,\fIc\fP\ a single
-character): The latter is internally mapped to glyph name
-\[oq]\e\fIc\fP\[cq].
-.
-By default, groff defines a single glyph name starting with a
-backslash, namely \%\[oq]\e-\[cq], which can be either accessed as
-\[oq]\f(CW\e\-\fP\[cq] or \[oq]\f(CW\e[-]\fP\[cq].
-.
-.TP
-\f(CW\e[\fP\,\fIbase_glyph composite_1 composite_2 \&.\|.\|.\/\fP\f(CW]\fP
-A composite glyph; see below for a more detailed description.
-.
-.
-.P
-In groff, each \%8-bit input character can also referred to by the construct
-\[oq]\f(CW\e[char\fP\,\fIn\/\fP\f(CW]\fP\[cq] where
-.I n
-is the decimal code of the character, a number between 0 and\ 255
-without leading zeros (those entities are
-.I not
-glyph names).
-.
-They are normally mapped onto glyphs using the \f(CW.trin\fP request.
-.
-.
-.P
-Another special convention is the handling of glyphs with names directly
-derived from a Unicode code point; this is shown in the 
-\[oq]Unicode\[cq] column of the table below.
-.
-In general, all glyphs not having a name as listed in this manual page can
-be accessed with the \[oq]\f(CW\e[u\fP\,\fIXXXX\/\fP\f(CW]\fP\[cq]
-construct; please go to section \[oq]Using Symbols\[cq] in the groff info
-manual for more details.
-.
-.
-.P
-Moreover, new glyph names can be created by the \f(CW.char\fP request; see
-.BR groff (@MAN7EXT@).
-.
-.P
-In the following, a plus sign in the \[oq]Notes\[cq] column indicates
-that this particular glyph name appears in the PS version of the
-original troff documentation, CSTR\ 54.
-.
-.P
-Entries marked with \[oq]***\[cq] denote glyphs for mathematical
-purposes (mainly used for DVI output).
-.
-Normally, such glyphs have metrics which make them unusable in normal
-text.
-.
-.
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[-D]  \e[-D]  Eth     u00D0   uppercase eth
-\[Sd]  \e[Sd]  eth     u00F0   lowercase eth
-\[TP]  \e[TP]  Thorn   u00DE   uppercase thorn
-\[Tp]  \e[Tp]  thorn   u00FE   lowercase thorn
-\[ss]  \e[ss]  germandbls      u00DF   German double s (sharp s)
-.TE
-.ad
-.
-.P
-.I Ligatures and Other Latin Glyphs
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[ff]  \e[ff]  ff      u0066_0066      ff ligature +
-\[fi]  \e[fi]  fi      u0066_0069      fi ligature +
-\[fl]  \e[fl]  fl      u0066_006C      fl ligature +
-\[Fi]  \e[Fi]  ffi     u0066_0066_0069 ffi ligature +
-\[Fl]  \e[Fl]  ffl     u0066_0066_006C ffl ligature +
-\[/L]  \e[/L]  Lslash  u0141   L slash (Polish)
-\[/l]  \e[/l]  lslash  u0142   l slash (Polish)
-\[/O]  \e[/O]  Oslash  u00D8   O slash (Scandinavian)
-\[/o]  \e[/o]  oslash  u00F8   o slash (Scandinavian)
-\[AE]  \e[AE]  AE      u00C6   A+E combined
-\[ae]  \e[ae]  ae      u00E6   a+e combined
-\[OE]  \e[OE]  OE      u0152   O+E combined
-\[oe]  \e[oe]  oe      u0153   o+e combined
-\[IJ]  \e[IJ]  IJ      u0132   I+J combined (Dutch)
-\[ij]  \e[ij]  ij      u0133   i+j combined(Dutch)
-\[.i]  \e[.i]  dotlessi        u0131   i without a dot (Turkish)
-\[.j]  \e[.j]  dotlessj        u0237   j without a dot
-.TE
-.ad
-.
-.P
-.I Accented Characters
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\['A]  \e['A]  Aacute  u0041_0301      A acute
-\['C]  \e['C]  Cacute  u0043_0301      C acute
-\['E]  \e['E]  Eacute  u0045_0301      E acute
-\['I]  \e['I]  Iacute  u0049_0301      I acute
-\['O]  \e['O]  Oacute  u004F_0301      O acute
-\['U]  \e['U]  Uacute  u0055_0301      U acute
-\['Y]  \e['Y]  Yacute  u0059_0301      Y acute
-\['a]  \e['a]  aacute  u0061_0301      a acute
-\['c]  \e['c]  cacute  u0063_0301      c acute
-\['e]  \e['e]  eacute  u0065_0301      e acute
-\['i]  \e['i]  iacute  u0069_0301      i acute
-\['o]  \e['o]  oacute  u006F_0301      o acute
-\['u]  \e['u]  uacute  u0075_0301      u acute
-\['y]  \e['y]  yacute  u0079_0301      y acute
-\[:A]  \e[:A]  Adieresis       u0041_0308      A dieresis (umlaut)
-\[:E]  \e[:E]  Edieresis       u0045_0308      E dieresis (umlaut)
-\[:I]  \e[:I]  Idieresis       u0049_0308      I dieresis (umlaut)
-\[:O]  \e[:O]  Odieresis       u004F_0308      O dieresis (umlaut)
-\[:U]  \e[:U]  Udieresis       u0055_0308      U dieresis (umlaut)
-\[:Y]  \e[:Y]  Ydieresis       u0059_0308      Y dieresis (umlaut)
-\[:a]  \e[:a]  adieresis       u0061_0308      a dieresis (umlaut)
-\[:e]  \e[:e]  edieresis       u0065_0308      e dieresis (umlaut)
-\[:i]  \e[:i]  idieresis       u0069_0308      i dieresis (umlaut)
-\[:o]  \e[:o]  odieresis       u006F_0308      o dieresis (umlaut)
-\[:u]  \e[:u]  udieresis       u0075_0308      u dieresis (umlaut)
-\[:y]  \e[:y]  ydieresis       u0079_0308      y dieresis (umlaut)
-\[^A]  \e[^A]  Acircumflex     u0041_0302      A circumflex
-\[^E]  \e[^E]  Ecircumflex     u0045_0302      E circumflex
-\[^I]  \e[^I]  Icircumflex     u0049_0302      I circumflex
-\[^O]  \e[^O]  Ocircumflex     u004F_0302      O circumflex
-\[^U]  \e[^U]  Ucircumflex     u0055_0302      U circumflex
-\[^a]  \e[^a]  acircumflex     u0061_0302      a circumflex
-\[^e]  \e[^e]  ecircumflex     u0065_0302      e circumflex
-\[^i]  \e[^i]  icircumflex     u0069_0302      i circumflex
-\[^o]  \e[^o]  ocircumflex     u006F_0302      o circumflex
-\[^u]  \e[^u]  ucircumflex     u0075_0302      u circumflex
-\[`A]  \e[`A]  Agrave  u0041_0300      A grave
-\[`E]  \e[`E]  Egrave  u0045_0300      E grave
-\[`I]  \e[`I]  Igrave  u0049_0300      I grave
-\[`O]  \e[`O]  Ograve  u004F_0300      O grave
-\[`U]  \e[`U]  Ugrave  u0055_0300      U grave
-\[`a]  \e[`a]  agrave  u0061_0300      a grave
-\[`e]  \e[`e]  egrave  u0065_0300      e grave
-\[`i]  \e[`i]  igrave  u0069_0300      i grave
-\[`o]  \e[`o]  ograve  u006F_0300      o grave
-\[`u]  \e[`u]  ugrave  u0075_0300      u grave
-\[~A]  \e[~A]  Atilde  u0041_0303      A tilde
-\[~N]  \e[~N]  Ntilde  u004E_0303      N tilde
-\[~O]  \e[~O]  Otilde  u004F_0303      O tilde
-\[~a]  \e[~a]  atilde  u0061_0303      a tilde
-\[~n]  \e[~n]  ntilde  u006E_0303      n tilde
-\[~o]  \e[~o]  otilde  u006F_0303      o tilde
-\[vS]  \e[vS]  Scaron  u0053_030C      S caron
-\[vs]  \e[vs]  scaron  u0073_030C      s caron
-\[vZ]  \e[vZ]  Zcaron  u005A_030C      Z caron
-\[vz]  \e[vz]  zcaron  u007A_030C      z caron
-\[,C]  \e[,C]  Ccedilla        u0043_0327      C cedilla
-\[,c]  \e[,c]  ccedilla        u0063_0327      c cedilla
-\[oA]  \e[oA]  Aring   u0041_030A      A ring
-\[oa]  \e[oa]  aring   u0061_030A      a ring
-.TE
-.ad
-.
-.P
-.I Accents
-.P
-The
-.B composite
-request is used to map most of the accents to non-spacing glyph names;
-the values given in parentheses are the original (spacing) ones.
-.
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[a"]  \e[a"]  hungarumlaut    u030B (u02DD)   Hungarian umlaut
-\[a-]  \e[a-]  macron  u0304 (u00AF)   overbar accent
-\[a.]  \e[a.]  dotaccent       u0307 (u02D9)   dot accent
-\[a^]  \e[a^]  circumflex      u0302 (u005E)   circumflex accent
-\[aa]  \e[aa]  acute   u0301 (u00B4)   acute accent
-\[ga]  \e[ga]  grave   u0300 (u0060)   grave accent
-\[ab]  \e[ab]  breve   u0306 (u02D8)   breve accent
-\[ac]  \e[ac]  cedilla u0327 (u00B8)   cedilla accent
-\[ad]  \e[ad]  dieresis        u0308 (u00A8)   umlaut accent
-\[ah]  \e[ah]  caron   u030C (u02C7)   caron accent
-\[ao]  \e[ao]  ring    u030A (u02DA)   small circle, ring accent
-\[a~]  \e[a~]  tilde   u0303 (u007E)   tilde accent
-\[ho]  \e[ho]  ogonek  u0328 (u02DB)   hook accent
-\[ha]  \e[ha]  asciicircum     u005E   T{
-high circumflex, ASCII character, in mathematics the power sign
-T}
-\[ti]  \e[ti]  asciitilde      u007E   T{
-tilde in vertical middle, ASCII, in Unix-like the home directory
-T}
-.TE
-.ad
-.
-.P
-.I Quotes
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[Bq]  \e[Bq]  quotedblbase    u201E   low double comma quote
-\[bq]  \e[bq]  quotesinglbase  u201A   low single comma quote
-\[lq]  \e[lq]  quotedblleft    u201C   left double quote
-\[rq]  \e[rq]  quotedblright   u201D   right double quote
-\[oq]  \e[oq]  quoteleft       u2018   single open (left) quote
-\[cq]  \e[cq]  quoteright      u2019   single closing (right) quote
-\[aq]  \e[aq]  quotesingle     u0027   apostrophe quote (ASCII 39)
-\[dq]  \e[dq]  quotedbl        u0022   double quote (ASCII 34)
-\[Fo]  \e[Fo]  guillemotleft   u00AB   left guillemet [sic]
-\[Fc]  \e[Fc]  guillemotright  u00BB   right guillemet [sic]
-\[fo]  \e[fo]  guilsinglleft   u2039   T{
-single left-pointing angle quotation mark
-T}
-\[fc]  \e[fc]  guilsinglright  u203A   T{
-single right-pointing angle quotation mark
-T}
-.TE
-.ad
-.
-.P
-.I Punctuation
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[r!]  \e[r!]  exclamdown      u00A1   inverted exclamation mark
-\[r?]  \e[r?]  questiondown    u00BF   inverted question mark
-\[em]  \e[em]  emdash  u2014   em-dash symbol
-\[en]  \e[en]  endash  u2013   en-dash symbol
-\[hy]  \e[hy]  hyphen  u2010   hyphen symbol
-.TE
-.ad
-.
-.P
-.I Brackets
-.P
-The extensible bracket pieces are font-invariant glyphs.
-.
-In classical troff only one glyph was available to vertically extend
-brackets, braces, and parentheses: \[oq]bv\[cq].
-.
-We map it rather arbitrarily to u23AA.
-.
-.P
-Note that not all devices contain extensible bracket pieces which can
-be piled up with \[oq]\f(CW\eb\fP\[cq] due to the restrictions of the
-escape\[aq]s piling algorithm.
-.
-A general solution to build brackets out of pieces is the following
-macro:
-.
-.P
-.nf
-.RS
-.ft C
-\&.\e" Make a pile centered vertically 0.5em\""
-\&.\e" above the baseline.\""
-\&.\e" The first argument is placed at the top.\""
-\&.\e" The pile is returned in string `pile'\""
-\&.eo
-\&.de pile-make
-\&.  nr pile-wd 0
-\&.  nr pile-ht 0
-\&.  ds pile-args
-\&.
-\&.  nr pile-# \en[.$]
-\&.  while \en[pile-#] \e{\e
-\&.    nr pile-wd (\en[pile-wd] >? \ew'\e$[\en[pile-#]]')
-\&.    nr pile-ht +(\en[rst] - \en[rsb])
-\&.    as pile-args \ev'\en[rsb]u'\e"\""
-\&.    as pile-args \eZ'\e$[\en[pile-#]]'\e"\""
-\&.    as pile-args \ev'-\en[rst]u'\e"\""
-\&.    nr pile-# -1
-\&.  \e}
-\&.
-\&.  ds pile \ev'(-0.5m + (\en[pile-ht]u / 2u))'\e"\""
-\&.  as pile \e*[pile-args]\e"\""
-\&.  as pile \ev'((\en[pile-ht]u / 2u) + 0.5m)'\e"\""
-\&.  as pile \eh'\en[pile-wd]u'\e"\""
-\&..
-\&.ec
-.ft
-.RE
-.fi
-.
-.P
-Another complication is the fact that some glyphs which represent
-bracket pieces in original troff can be used for other mathematical
-symbols also, for example \[oq]lf\[cq] and \[oq]rf\[cq] which provide
-the \[oq]floor\[cq] operator.
-.
-Other devices (most notably for DVI output) don\[aq]t unify such
-glyphs.
-.
-For this reason, the four glyphs \[oq]lf\[cq], \[oq]rf\[cq],
-\[o]lc\[cq], and \[oq]rc\[cq] are not unified with similarly looking
-bracket pieces.
-.
-In
-.BR groff ,
-only glyphs with long names are guaranteed to pile up correctly for all
-devices (provided those glyphs exist).
-.
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[lB]  \e[lB]  bracketleft     u005B   T{
-left square bracket
-T}
-\[rB]  \e[rB]  bracketright    u005D   T{
-right square bracket
-T}
-\[lC]  \e[lC]  braceleft       u007B   T{
-left curly brace
-T}
-\[rC]  \e[rC]  braceright      u007D   T{
-right curly brace
-T}
-\[la]  \e[la]  angleleft       u27E8   T{
-left angle bracket
-T}
-\[ra]  \e[ra]  angleright      u27E9   T{
-right angle bracket
-T}
-
-\[bv]  \e[bv]  braceex u23AA   T{
-curly brace vertical extension
-T}
-\[braceex]     \e[braceex]     braceex u23AA   T{
-curly brace vertical extension
-T}
-
-\[bracketlefttp]       \e[bracketlefttp]       bracketlefttp   u23A1   T{
-left square bracket top
-T}
-\[bracketleftbt]       \e[bracketleftbt]       bracketleftbt   u23A3   T{
-left square bracket bottom
-T}
-\[bracketleftex]       \e[bracketleftex]       bracketleftex   u23A2   T{
-left square bracket extension
-T}
-\[bracketrighttp]      \e[bracketrighttp]      bracketrighttp  u23A4   T{
-right square bracket top
-T}
-\[bracketrightbt]      \e[bracketrightbt]      bracketrightbt  u23A6   T{
-right square bracket bottom
-T}
-\[bracketrightex]      \e[bracketrightex]      bracketrightex  u23A5   T{
-right square bracket extension
-T}
-
-\[lt]  \e[lt]  bracelefttp     u23A7   T{
-left curly brace top
-T}
-\[bracelefttp] \e[bracelefttp] bracelefttp     u23A7   T{
-left curly brace top
-T}
-\[lk]  \e[lk]  braceleftmid    u23A8   T{
-left curly brace middle
-T}
-\[braceleftmid]        \e[braceleftmid]        braceleftmid    u23A8   T{
-left curly brace middle
-T}
-\[lb]  \e[lb]  braceleftbt     u23A9   T{
-left curly brace bottom
-T}
-\[braceleftbt] \e[braceleftbt] braceleftbt     u23A9   T{
-left curly brace bottom
-T}
-\[braceleftex] \e[braceleftex] braceleftex     u23AA   T{
-left curly brace extension
-T}
-\[rt]  \e[rt]  bracerighttp    u23AB   T{
-right curly brace top
-T}
-\[bracerighttp]        \e[bracerighttp]        bracerighttp    u23AB   T{
-right curly brace top
-T}
-\[rk]  \e[rk]  bracerightmid   u23AC   T{
-right curly brace middle
-T}
-\[bracerightmid]       \e[bracerightmid]       bracerightmid   u23AC   T{
-right curly brace middle
-T}
-\[rb]  \e[rb]  bracerightbt    u23AD   T{
-right curly brace bottom
-T}
-\[bracerightbt]        \e[bracerightbt]        bracerightbt    u23AD   T{
-right curly brace bottom
-T}
-\[bracerightex]        \e[bracerightex]        bracerightex    u23AA   T{
-right curly brace extension
-T}
-\[parenlefttp] \e[parenlefttp] parenlefttp     u239B   T{
-left parenthesis top
-T}
-\[parenleftbt] \e[parenleftbt] parenleftbt     u239D   T{
-left parenthesis bottom
-T}
-\[parenleftex] \e[parenleftex] parenleftex     u239C   T{
-left parenthesis extension
-T}
-\[parenrighttp]        \e[parenrighttp]        parenrighttp    u239E   T{
-right parenthesis top
-T}
-\[parenrightbt]        \e[parenrightbt]        parenrightbt    u23A0   T{
-right parenthesis bottoom
-T}
-\[parenrightex]        \e[parenrightex]        parenrightex    u239F   T{
-right parenthesis extension
-T}
-.TE
-.ad
-.
-.P
-.I Arrows
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[<-]  \e[<-]  arrowleft       u2190   horizontal arrow left
-\[->]  \e[->]  arrowright      u2192   horizontal arrow right
-\[<>]  \e[<>]  arrowboth       u2194   T{
-horizontal arrow in both directions
-T}
-\[da]  \e[da]  arrowdown       u2193   vertical arrow down
-\[ua]  \e[ua]  arrowup u2191   vertical arrow up
-\[va]  \e[va]  arrowupdn       u2195   T{
-vertical arrow in both directions
-T}
-\[lA]  \e[lA]  arrowdblleft    u21D0   horizontal double arrow left
-\[rA]  \e[rA]  arrowdblright   u21D2   horizontal double arrow right
-\[hA]  \e[hA]  arrowdblboth    u21D4   T{
-horizontal double arrow in both directions
-T}
-\[dA]  \e[dA]  arrowdbldown    u21D3   vertical double arrow down
-\[uA]  \e[uA]  arrowdblup      u21D1   vertical double arrow up
-\[vA]  \e[vA]  uni21D5 u21D5   T{
-vertical double arrow in both directions
-T}
-\[an]  \e[an]  arrowhorizex    u23AF   horizontal arrow extension
-.TE
-.ad
-.
-.P
-.I Lines
-.P
-The font-invariant glyphs \[oq]br\[cq], \[oq]ul\[cq], and \[oq]rn\[cq]
-form corners; they can be used to build boxes.
-.
-Note that both the PostScript and the Unicode-derived names of
-these three glyphs are just rough approximations.
-.
-.P
-\[oq]rn\[cq] also serves in classical troff as the horizontal
-extension of the square root sign.
-.
-.P
-\[oq]ru\[cq] is a font-invariant glyph, namely a rule of length 0.5m.
-.
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[ba]  \e[ba]  bar     u007C   bar
-\[br]  \e[br]  SF110000        u2502   box rule
-\[ul]  \e[ul]  underscore      u005F   underscore
-\[rn]  \e[rn]  overline        u203E   overline
-\[ru]  \e[ru]  ---     ---     baseline rule
-\[bb]  \e[bb]  brokenbar       u00A6   broken bar
-\[sl]  \e[sl]  slash   u002F   slash, solidus
-\[rs]  \e[rs]  backslash       u005C   reverse slash, reverse solidus
-.TE
-.ad
-.
-.P
-Use \[oq]\f(CW\e[radicalex]\fP\[cq], not
-\[oq]\f(CW\e[overline]\fP\[cq], for continuation of square root.
-.
-.P
-.I Text markers
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[ci]  \e[ci]  circle  u25CB   circle
-\[bu]  \e[bu]  bullet  u2022   bullet
-\[dd]  \e[dd]  daggerdbl       u2021   double dagger sign
-\[dg]  \e[dg]  dagger  u2020   dagger
-\[lz]  \e[lz]  lozenge u25CA   lozenge, diamond, pound key
-\[sq]  \e[sq]  uni25A1 u25A1   white square
-\[ps]  \e[ps]  paragraph       u00B6   end of paragraphs marker
-\[sc]  \e[sc]  section u00A7   section sign
-\[lh]  \e[lh]  uni261C u261C   hand pointing left
-\[rh]  \e[rh]  a14     u261E   hand pointing right
-\[at]  \e[at]  at      u0040   at
-\[sh]  \e[sh]  numbersign      u0023   number sign
-\[CR]  \e[CR]  carriagereturn  u21B5   carriage return
-\[OK]  \e[OK]  a19     u2713   check mark, tick
-.TE
-.ad
-.
-.P
-.I Legal Symbols
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[co]  \e[co]  copyright       u00A9   copyright sign
-\[rg]  \e[rg]  registered      u00AE   registered mark
-\[tm]  \e[tm]  trademark       u2122   trademark symbol
-\[bs]  \e[bs]  ---     ---     AT&T Bell Labs logo +
-.TE
-.ad
-.
-.P
-The Bell Labs logo is not supported in groff.
-.
-.P
-.I Currency symbols
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[Do]  \e[Do]  dollar  u0024   dollar
-\[ct]  \e[ct]  cent    u00A2   cent
-\[eu]  \e[eu]  ---     u20AC   official Euro symbol
-\[Eu]  \e[Eu]  Euro    u20AC   font-specific Euro glyph variant
-\[Ye]  \e[Ye]  yen     u00A5   Japanese Yen
-\[Po]  \e[Po]  sterling        u00A3   pound sterling (British)
-\[Cs]  \e[Cs]  currency        u00A4   Scandinavian currency sign
-\[Fn]  \e[Fn]  florin  u0192   Dutch currency sign
-.TE
-.ad
-.
-.P
-.I Units
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[de]  \e[de]  degree  u00B0   degree
-\[%0]  \e[%0]  perthousand     u2030   per thousand, per mille sign
-\[fm]  \e[fm]  minute  u2032   arc minute sign
-\[sd]  \e[sd]  second  u2033   acr second sign
-\[mc]  \e[mc]  mu      u00B5   mu, micro sign
-\[Of]  \e[Of]  ordfeminine     u00AA   feminine ordinal (Spanish)
-\[Om]  \e[Om]  ordmasculine    u00BA   masculine ordinal (Spanish)
-.TE
-.ad
-.
-.P
-.I Logical Symbols
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[AN]  \e[AN]  logicaland      u2227   logical and
-\[OR]  \e[OR]  logicalor       u2228   logical or
-\[no]  \e[no]  logicalnot      u00AC   logical not
-\[tno] \e[tno] logicalnot      u00AC   text variant of \[oq]no\[cq]
-\[te]  \e[te]  existential     u2203   there exists
-\[fa]  \e[fa]  universal       u2200   for all
-\[st]  \e[st]  suchthat        u220B   sucht that
-\[3d]  \e[3d]  therefore       u2234   therefore
-\[tf]  \e[tf]  therefore       u2234   therefore
-\[or]  \e[or]  bar     u007C   T{
-bitwise OR operator (as used in\ C)
-T}
-.TE
-.ad
-.
-.P
-.I Mathematical Symbols
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[12]  \e[12]  onehalf u00BD   1/2 symbol
-\[14]  \e[14]  onequarter      u00BC   1/4 symbol
-\[34]  \e[34]  threequarters   u00BE   3/4 symbol
-\[18]  \e[18]  oneeighth       u215B   1/8 symbol
-\[38]  \e[38]  threeeighths    u215C   3/8 symbol
-\[58]  \e[58]  fiveeighths     u215D   5/8 symbol
-\[78]  \e[78]  seveneighths    u215E   7/8 symbol
-\[S1]  \e[S1]  onesuperior     u00B9   superscript 1
-\[S2]  \e[S2]  twosuperior     u00B2   superscript 2
-\[S3]  \e[S3]  threesuperior   u00B3   superscript 3
-
-\[pl]  \e[pl]  plus    u002B   plus in special font
-\[mi]  \e[mi]  minus   u2212   minus in special font
-\[-+]  \e[-+]  uni2213 u2213   minus-plus
-\[+-]  \e[+-]  plusminus       u00B1   plus-minus
-\[t+-] \e[t+-] plusminus       u00B1   text variant of \e[+-]
-\[pc]  \e[pc]  periodcentered  u00B7   period centered
-\[md]  \e[md]  dotmath u22C5   multiplication dot
-\[mu]  \e[mu]  multiply        u00D7   multiply sign
-\[tmu] \e[tmu] multiply        u00D7   text variant of \e[mu]
-\[c*]  \e[c*]  circlemultiply  u2297   multiply sign in circle
-\[c+]  \e[c+]  circleplus      u2295   plus sign in circle
-\[di]  \e[di]  divide  u00F7   division sign
-\[tdi] \e[tdi] divide  u00F7   text variant of \e[di]
-\[f/]  \e[f/]  fraction        u2044   bar for fractions
-\[**]  \e[**]  asteriskmath    u2217   mathematical asterisk
-
-\[<=]  \e[<=]  lessequal       u2264   less or equal
-\[>=]  \e[>=]  greaterequal    u2265   greater or equal
-\[<<]  \e[<<]  uni226A u226A   much less
-\[>>]  \e[>>]  uni226B u226B   much greater
-\[eq]  \e[eq]  equal   u003D   equals in special font
-\[!=]  \e[!=]  notequal        u003D_0338      not equal       
-\[==]  \e[==]  equivalence     u2261   equivalent
-\[ne]  \e[ne]  uni2262 u2261_0338      not equivalent
-\[=~]  \e[=~]  congruent       u2245   T{
-congruent, approx. equal
-T}
-\[|=]  \e[|=]  uni2243 u2243   asymptot. equal to
-\[ap]  \e[ap]  similar u223C   similar
-\[~~]  \e[~~]  approxequal     u2248   almost equal to
-\[~=]  \e[~=]  approxequal     u2248   almost equal to
-\[pt]  \e[pt]  proportional    u221D   proportional
-
-\[es]  \e[es]  emptyset        u2205   empty set
-\[mo]  \e[mo]  element u2208   element of a set
-\[nm]  \e[nm]  notelement      u2208_0338      not element of set
-\[sb]  \e[sb]  propersubset    u2282   proper subset
-\[nb]  \e[nb]  notsubset       u2282_0338      not supset
-\[sp]  \e[sp]  propersuperset  u2283   proper superset
-\[nc]  \e[nc]  uni2285 u2283_0338      not superset
-\[ib]  \e[ib]  reflexsubset    u2286   subset or equal
-\[ip]  \e[ip]  reflexsuperset  u2287   superset or equal
-\[ca]  \e[ca]  intersection    u2229   intersection, cap
-\[cu]  \e[cu]  union   u222A   union, cup
-
-\[/_]  \e[/_]  angle   u2220   angle
-\[pp]  \e[pp]  perpendicular   u22A5   perpendicular
-\[is]  \e[is]  integral        u222B   integral
-\[integral]    \e[integral]    integral        u222B   integral
-\[sum] \e[sum] summation       u2211   summation
-\[product]     \e[product]     product u220F   product
-\[coproduct]   \e[coproduct]   uni2210 u2210   coproduct
-\[gr]  \e[gr]  gradient        u2207   gradient
-\[sr]  \e[sr]  radical u221A   square root
-\[sqrt]        \e[sqrt]        radical u221A   square root
-\[radicalex]   \e[radicalex]   radicalex       ---     T{
-square root continuation
-T}
-\[sqrtex]      \e[sqrtex]      radicalex       ---     T{
-square root continuation
-T}
-
-\[lc]  \e[lc]  uni2308 u2308   left ceiling
-\[rc]  \e[rc]  uni2309 u2309   right ceiling
-\[lf]  \e[lf]  uni230A u230A   left floor
-\[rf]  \e[rf]  uni230B u230B   right floor
-
-\[if]  \e[if]  infinity        u221E   infinity
-\[Ah]  \e[Ah]  aleph   u2135   aleph
-\[Im]  \e[Im]  Ifraktur        u2111   Gothic I, imaginary
-\[Re]  \e[Re]  Rfraktur        u211C   Gothic R, real
-\[wp]  \e[wp]  weierstrass     u2118   Weierstrass\~p
-\[pd]  \e[pd]  partialdiff     u2202   T{
-partial differentiation
-T}
-\[-h]  \e[-h]  uni210F u210F   T{
-Planck\ constant\ /\ 2pi (h-bar)
-T}
-\[hbar]        \e[hbar]        uni210F u210F   T{
-Planck\ constant\ /\ 2pi (h-bar)
-T}
-.TE
-.ad
-.
-.P
-.I Greek glyphs
-.P
-These glyphs are intended for technical use, not for real Greek; normally,
-the uppercase letters have upright shape, and the lowercase ones are
-slanted.
-.
-There is a problem with the mapping of letter phi to Unicode.
-.
-Prior to Unicode version\ 3.0, the difference between U+03C6, GREEK
-SMALL LETTER PHI, and U+03D5, GREEK PHI SYMBOL, was not clearly described;
-only the glyph shapes in the Unicode book could be used as a reference.
-.
-Starting with Unicode\ 3.0, the reference glyphs have been exchanged and
-described verbally also: In mathematical context, U+03D5 is the stroked
-variant and U+03C6 the curly glyph.
-.
-Unfortunately, most font vendors didn\[aq]t update their fonts to
-this (incompatible) change in Unicode.
-.
-At the time of this writing (January 2006), it is not clear yet
-whether the Adobe Glyph Names \[oq]phi\[cq] and \[oq]phi1\[cq] also
-change its meaning if used for mathematics, thus compatibility
-problems are likely to happen \[en] being conservative, groff
-currently assumes that \[oq]phi\[cq] in a PostScript symbol font is
-the stroked version.
-.P
-In groff, symbol \[oq]\f(CW\e[*f]\fP\[cq] always denotes the stroked
-version of phi, and \[oq]\f(CW\e[+f]\fP\[cq] the curly variant.
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[*A]  \e[*A]  Alpha   u0391   Alpha
-\[*B]  \e[*B]  Beta    u0392   Beta
-\[*G]  \e[*G]  Gamma   u0393   Gamma
-\[*D]  \e[*D]  Delta   u0394   Delta
-\[*E]  \e[*E]  Epsilon u0395   Epsilon
-\[*Z]  \e[*Z]  Zeta    u0396   Zeta
-\[*Y]  \e[*Y]  Eta     u0397   Eta
-\[*H]  \e[*H]  Theta   u0398   Theta
-\[*I]  \e[*I]  Iota    u0399   Iota
-\[*K]  \e[*K]  Kappa   u039A   Kappa
-\[*L]  \e[*L]  Lambda  u039B   Lamda
-\[*M]  \e[*M]  Mu      u039C   Mu
-\[*N]  \e[*N]  Nu      u039D   Nu
-\[*C]  \e[*C]  Xi      u039E   Xi
-\[*O]  \e[*O]  Omicron u039F   Omicron
-\[*P]  \e[*P]  Pi      u03A0   Pi
-\[*R]  \e[*R]  Rho     u03A1   Rho
-\[*S]  \e[*S]  Sigma   u03A3   Sigma
-\[*T]  \e[*T]  Tau     u03A4   Tau
-\[*U]  \e[*U]  Upsilon u03A5   Upsilon
-\[*F]  \e[*F]  Phi     u03A6   Phi
-\[*X]  \e[*X]  Chi     u03A7   Chi
-\[*Q]  \e[*Q]  Psi     u03A8   Psi
-\[*W]  \e[*W]  Omega   u03A9   Omega
-\[*a]  \e[*a]  alpha   u03B1   alpha
-\[*b]  \e[*b]  beta    u03B2   beta
-\[*g]  \e[*g]  gamma   u03B3   gamma
-\[*d]  \e[*d]  delta   u03B4   delta
-\[*e]  \e[*e]  epsilon u03B5   epsilon
-\[*z]  \e[*z]  zeta    u03B6   zeta
-\[*y]  \e[*y]  eta     u03B7   eta
-\[*h]  \e[*h]  theta   u03B8   theta
-\[*i]  \e[*i]  iota    u03B9   iota
-\[*k]  \e[*k]  kappa   u03BA   kappa
-\[*l]  \e[*l]  lambda  u03BB   lambda
-\[*m]  \e[*m]  mu      u03BC   mu
-\[*n]  \e[*n]  nu      u03BD   nu
-\[*c]  \e[*c]  xi      u03BE   xi
-\[*o]  \e[*o]  omicron u03BF   omicron
-\[*p]  \e[*p]  pi      u03C0   pi
-\[*r]  \e[*r]  rho     u03C1   rho
-\[ts]  \e[ts]  sigma1  u03C2   terminal sigma
-\[*s]  \e[*s]  sigma   u03C3   sigma
-\[*t]  \e[*t]  tau     u03C4   tau
-\[*u]  \e[*u]  upsilon u03C5   upsilon
-\[*f]  \e[*f]  phi     u03D5   phi oked glyph)
-\[*x]  \e[*x]  chi     u03C7   chi
-\[*q]  \e[*q]  psi     u03C8   psi
-\[*w]  \e[*w]  omega   u03C9   omega
-\[+h]  \e[+h]  theta1  u03D1   variant theta
-\[+f]  \e[+f]  phi1    u03C6   variant phi (curly shape)
-\[+p]  \e[+p]  omega1  u03D6   variant pi, looking like omega
-\[+e]  \e[+e]  uni03F5 u03F5   variant epsilon
-.TE
-.ad
-.
-.P
-.I Card symbols
-.P
-.na
-.TS
-l l l l lx.
-Output Input   PostScript      Unicode Notes
-_
-\[CL]  \e[CL]  club    u2663   black club suit
-\[SP]  \e[SP]  spade   u2660   black spade suit
-\[HE]  \e[HE]  heart   u2665   black heart suit
-\[u2661]       \e[u2661]       uni2661 u2661   white heart suit
-\[DI]  \e[DI]  diamond u2666   black diamond suit
-\[u2662]       \e[u2662]       uni2662 u2662   white diamond suit
-.TE
-.ad
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BR groff (@MAN1EXT@)
-the GNU roff formatter
-.
-.TP
-.BR groff (@MAN7EXT@)
-a short reference of the groff formatting language
-.
-.
-.P
-.IR "An extension to the troff character set for Europe" ,
-E.G.\& Keizer, K.J.\& Simonsen, J.\& Akkerhuis; EUUG Newsletter, Volume 9,
-No.\& 2, Summer 1989
-.
-.
-.P
-.UR http://\:www.unicode.org
-The Unicode Standard
-.UE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.cp \n[groff_char_C]
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.\" Local Variables:
-.\" mode: nroff
-.\" tab-width: 20
-.\" End:
diff --git a/man/groff_diff.7.man b/man/groff_diff.7.man
new file mode 100644 (file)
index 0000000..39d1747
--- /dev/null
@@ -0,0 +1,3984 @@
+'\" e
+.TH GROFF_DIFF @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_diff \- differences between GNU troff and classical troff
+.
+.\" groff_diff.man:
+.\" Source file position: <groff_source>/man/groff_diff.man
+.\" Installed position: <prefix>/share/man/man7/groff_diff.7
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_diff_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this
+.\" document under the terms of the GNU Free Documentation License,
+.\" Version 1.3 or any later version published by the Free Software
+.\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
+.\" and with no Back-Cover Texts.
+.\"
+.\" A copy of the Free Documentation License is included as a file
+.\" called FDL in the main directory of the groff source package.
+.
+.
+.\" ====================================================================
+.\" Local definitions
+.\" ====================================================================
+.
+.\" define a string tx for the TeX logo
+.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+.el   .ds tx TeX
+.
+.
+.\" from old groff_out.man
+.ie \n(.g \
+.  ds ic \/
+.el \
+.  ds ic \^
+.
+.\" ellipsis
+.ds ellipsis \&.\|.\|.\&
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This manual page describes the language differences between
+.IR groff ,
+the GNU
+.I roff
+text processing system, and the classical
+.I roff
+formatter of the freely available Unix\~7 of the 1970s, documented in
+the
+.I Troff User's Manual
+by
+.I Ossanna
+and
+.IR Kernighan .
+.
+This includes the roff language as well as the intermediate output
+format (troff output).
+.
+.
+.P
+Section \[lq]See Also\[rq] below gives pointers to both the classical
+.I roff
+and the modern
+.I groff
+documentation.
+.
+.
+.\" ====================================================================
+.SH "GROFF LANGUAGE"
+.\" ====================================================================
+.
+In this section, all additional features of
+.I groff
+compared to the classical Unix\~7
+.I troff
+are described in detail.
+.
+.
+.\" ====================================================================
+.SS "Long names"
+.\" ====================================================================
+.
+The names of number registers, fonts, strings/\:macros/\:diversions,
+special characters (glyphs), and colors can be of any length.
+.
+In escape sequences, additionally to the classical
+\[oq]\fB(\fP\,\fIxx\/\fP\[cq]
+construction for a two-character glyph name,
+you can use
+\[oq]\fB[\fP\,\fIxxx\/\fP\fB]\fP\[cq]
+for a name of arbitrary length.
+.
+.TP
+.BI \[rs][ xxx ]
+Print the special character (glyph) called
+.IR xxx .
+.
+.TP
+.BI \[rs][ "comp1 comp2 \*[ellipsis]" ]
+Print composite glyph consisting of multiple components.
+.
+Example: \[oq]\[rs][A\~ho]\[cq] is capital letter A with ogonek which
+finally maps to glyph name \[oq]u0041_0328\[cq].
+.
+See
+.IR "Groff: The GNU Implementation of troff" ,
+the
+.I groff
+Texinfo manual,
+for details of how a glyph name for a composite glyph is constructed,
+and
+.BR groff_char (@MAN7EXT@)
+for a list of glyph name components used in composite glyph names.
+.
+.TP
+.BI \[rs]f[ xxx ]
+Set font
+.IR xxx .
+.
+Additionally,
+.B \[rs]f[]
+is a new syntax form equal to
+.BR \[rs]fP ,
+i.e., to return to the previous font.
+.
+.TP
+.BI \[rs]*[ "xxx arg1 arg2 \*[ellipsis]" ]
+Interpolate string
+.IR xxx ,
+taking
+.IR arg1 ,
+.IR arg2 ,
+.IR \*[ellipsis] ,
+as arguments.
+.
+.TP
+.BI \[rs]n[ xxx ]
+Interpolate number register
+.IR xxx .
+.
+.
+.\" ====================================================================
+.SS "Fractional point sizes"
+.\" ====================================================================
+.
+A
+.I scaled point
+is equal to
+.B 1/sizescale
+points, where
+.B sizescale
+is specified in the
+.I DESC
+file (1 by default).
+.
+There is a new scale indicator\~\c
+.B z
+that has the effect of multiplying by sizescale.
+.
+Requests and escape sequences in troff interpret arguments that
+represent a point size as being in units of scaled points, but they
+evaluate each such argument using a default scale indicator of\~\c
+.BR z .
+Arguments treated in this way are the argument to the
+.B ps
+request, the third argument to the
+.B cs
+request, the second and fourth arguments to the
+.B tkf
+request, the argument to the
+.B \[rs]H
+escape sequence, and those variants of the
+.B \[rs]s
+escape sequence that take a numeric expression as their argument.
+.
+.
+.P
+For example, suppose sizescale is 1000; then a scaled point is
+equivalent to a millipoint; the call
+.B .ps\ 10.25
+is equivalent to
+.B .ps\ 10.25z
+and so sets the point size to 10250 scaled points, which is equal to
+10.25 points.
+.
+.
+.P
+The number register
+.B \[rs]n[.s]
+returns the point size in points as decimal fraction.
+.
+There is also a new number register
+.B \[rs]n[.ps]
+that returns the point size in scaled points.
+.
+.
+.P
+It would make no sense to use the
+.BR z \~\c
+scale indicator in a numeric expression whose default scale indicator
+was neither
+.B u
+nor\~\c
+.BR z ,
+and so
+.B troff
+disallows this.
+.
+Similarly it would make no sense to use a scaling indicator other than
+.B z
+or\~\c
+.B u
+in a numeric expression whose default scale indicator was\~\c
+.BR z ,
+and so
+.B troff
+disallows this as well.
+.
+.P
+There is also new scale indicator\~\c
+.B s
+which multiplies by the number of units in a scaled point.
+.
+So, for example,
+.B \[rs]n[.ps]s
+is equal to
+.BR 1m .
+Be sure not to confuse the
+.B s
+and
+.BR z \~\c
+scale indicators.
+.
+.
+.\" ====================================================================
+.SS "Numeric expressions"
+.\" ====================================================================
+.
+Spaces are permitted in a number expression within parentheses.
+.
+.
+.P
+.B M
+indicates a scale of 100ths of an em.
+.B f
+indicates a scale of 65536 units, providing fractions for color
+definitions with the
+.B defcolor
+request.
+.
+For example, 0.5f = 32768u.
+.
+.TP
+.IB e1 >? e2
+The maximum of
+.I e1
+and
+.IR e2 .
+.
+.TP
+.IB e1 <? e2
+The minimum of
+.I e1
+and
+.IR e2 .
+.
+.TP
+.BI ( c ; e )
+Evaluate
+.I e
+using
+.I c
+as the default scaling indicator.
+.
+If
+.I c
+is missing, ignore scaling indicators in the evaluation of\~\c
+.IR e .
+.
+.
+.\" ====================================================================
+.SS "New escape sequences"
+.\" ====================================================================
+.
+.TP
+.BI \[rs]A' anything '
+This expands to
+.B 1
+or\~\c
+.BR 0 ,
+depending on whether
+.I anything
+is or is not acceptable as the name of a string, macro, diversion,
+number register, environment, font, or color.
+.
+It returns\~\c
+.B 0
+if
+.I anything
+is empty.
+.
+This is useful if you want to look up user input in some sort of
+associative table.
+.
+.TP
+.BI \[rs]B' anything '
+This expands to
+.B 1
+or\~\c
+.BR 0 ,
+depending on whether
+.I anything
+is or is not a valid numeric expression.
+.
+It returns\~\c
+.B 0
+if
+.I anything
+is empty.
+.
+.TP
+.BI \[rs]C' xxx '
+Typeset glyph named
+.IR xxx .
+Normally it is more convenient to use
+.BI \[rs][ xxx ]\f[R].
+But
+.B \[rs]C
+has the advantage that it is compatible with recent versions of Unix and
+is available in compatibility mode.
+.
+.TP
+.B \[rs]E
+This is equivalent to an escape character, but it is not interpreted in
+copy mode.
+.
+For example, strings to start and end superscripting could be defined
+like this
+.
+.RS
+.IP
+.EX
+\&.ds { \[rs]v'\-.3m'\[rs]s'\[rs]En[.s]*6u/10u'
+\&.ds } \[rs]s0\[rs]v'.3m'
+.EE
+.RE
+.
+.IP
+The use of
+.B \[rs]E
+ensures that these definitions work even if
+.B \[rs]*{
+gets interpreted in copy mode (for example, by being used in a macro
+argument).
+.RE
+.
+.TP
+.BI \[rs]F f
+.TQ
+.BI \[rs]F( fm
+.TQ
+.BI \[rs]F[ fam ]
+Change font family.
+.
+This is the same as the
+.B fam
+request.
+.
+.B \[rs]F[]
+switches back to the previous font family (note that
+.B \[rs]FP
+won't work; it selects font family \[oq]P\[cq] instead).
+.
+.TP
+.BI \[rs]m x
+.TQ
+.BI \[rs]m( xx
+.TQ
+.BI \[rs]m[ xxx ]
+Set drawing color.
+.B \[rs]m[]
+switches back to the previous color.
+.
+.TP
+.BI \[rs]M x
+.TQ
+.BI \[rs]M( xx
+.TQ
+.BI \[rs]M[ xxx ]
+Set background color for filled objects drawn with the
+.BI \[rs]D' \*[ellipsis] '
+commands.
+.B \[rs]M[]
+switches back to the previous color.
+.
+.TP
+.BI \[rs]N' n '
+Typeset the glyph with index\~\c
+.I n
+in the current font.
+.IR n \~\c
+can be any integer.
+.
+Most devices only have glyphs with indices between 0 and 255.
+.
+If the current font does not contain a glyph with that code,
+special fonts are
+.I not
+searched.
+.
+The
+.B \[rs]N
+escape sequence can be conveniently used in conjunction with the
+.B char
+request, for example
+.
+.RS
+.IP
+.EX
+\&.char \[rs][phone] \[rs]f(ZD\[rs]N'37'
+.EE
+.RE
+.
+.IP
+The index of each glyph is given in the fourth column in the font
+description file after the
+.B charset
+command.
+.
+It is possible to include unnamed glyphs in the font description
+file by using a name of
+.BR \-\-\- ;
+the
+.B \[rs]N
+escape sequence is the only way to use these.
+.
+.TP
+.BI \[rs]O n
+.TQ
+.BI \[rs]O[ n ]
+Suppress troff output.
+.
+The escapes
+.BR \[rs]O2 ,
+.BR \[rs]O3 ,
+.BR \[rs]O4 ,
+and
+.B \[rs]O5
+are intended for internal use by
+.BR \%grohtml .
+.
+.RS
+.TP
+.B \[rs]O0
+Disable any ditroff glyphs from being emitted to the device driver,
+provided that the escape occurs at the outer level (see
+.B \[rs]O3
+and
+.BR \[rs]O4 ).
+.
+.TP
+.B \[rs]O1
+Enable output of glyphs, provided that the escape occurs at the outer
+level.
+.IP
+.B \[rs]O0
+and
+.B \[rs]O1
+also reset the registers
+.BR \[rs]n[opminx] ,
+.BR \[rs]n[opminy] ,
+.BR \[rs]n[opmaxx] ,
+and
+.B \[rs]n[opmaxy]
+to\~\-1.
+.
+These four registers mark the top left and bottom right hand corners
+of a box which encompasses all written glyphs.
+.
+.TP
+.B \[rs]O2
+Provided that the escape occurs at the outer level, enable output of
+glyphs and also write out to stderr the page number and four registers
+encompassing the glyphs previously written since the last call to
+.BR \[rs]O .
+.
+.TP
+.B \[rs]O3
+Begin a nesting level.
+.
+At start-up,
+.B troff
+is at outer level.
+.
+This is really an internal mechanism for
+.B \%grohtml
+while producing images.
+.
+They are generated by running the troff source through
+.B troff
+to the PostScript device and
+.B ghostscript
+to produce images in PNG format.
+.
+The
+.B \[rs]O3
+escape starts a new page if the device is not html (to reduce the
+possibility of images crossing a page boundary).
+.
+.TP
+.B \[rs]O4
+End a nesting level.
+.
+.TP
+.BI \[rs]O5[ Pfilename ]
+This escape is
+.B \%grohtml
+specific.
+.
+Provided that this escape occurs at the outer nesting level, write
+.I filename
+to stderr.
+.
+The position of the image,
+.IR P ,
+must be specified and must be one of
+.BR l ,
+.BR r ,
+.BR c ,
+or
+.B i
+(left, right, centered, inline).
+.
+.I filename
+is associated with the production of the next inline image.
+.RE
+.
+.TP
+.BI \[rs]R' name\ \[+-]n '
+This has the same effect as
+.
+.RS
+.IP
+.BI .nr\  name\ \[+-]n
+.RE
+.
+.TP
+.BI \[rs]s( nn
+.TQ
+.BI \[rs]s\[+-]( nn
+Set the point size to
+.I nn
+points;
+.I nn
+must be exactly two digits.
+.
+.TP
+.BI \[rs]s[\[+-] n ]
+.TQ
+.BI \[rs]s\[+-][ n ]
+.TQ
+.BI \[rs]s'\[+-] n '
+.TQ
+.BI \[rs]s\[+-]' n '
+Set the point size to
+.I n
+scaled points;
+.I n
+is a numeric expression with a default scale indicator of\~\c
+.BR z .
+.
+.TP
+.BI \[rs]V x
+.TQ
+.BI \[rs]V( xx
+.TQ
+.BI \[rs]V[ xxx ]
+Interpolate the contents of the environment variable
+.IR xxx ,
+as returned by
+.BR getenv (3).
+.B \[rs]V
+is interpreted in copy mode.
+.
+.TP
+.BI \[rs]Y x
+.TQ
+.BI \[rs]Y( xx
+.TQ
+.BI \[rs]Y[ xxx ]
+This is approximately equivalent to
+.BI \[rs]X'\[rs]*[ xxx ]'\f[R].
+However the contents of the string or macro
+.I xxx
+are not interpreted; also it is permitted for
+.I xxx
+to have been defined as a macro and thus contain newlines (it is not
+permitted for the argument to
+.B \[rs]X
+to contain newlines).
+.
+The inclusion of newlines requires an extension to the Unix troff output
+format, and confuses drivers that do not know about this extension.
+.
+.TP
+.BI \[rs]Z' anything '
+Print anything and then restore the horizontal and vertical position;
+.I anything
+may not contain tabs or leaders.
+.
+.TP
+.B \[rs]$0
+The name by which the current macro was invoked.
+.
+The
+.B als
+request can make a macro have more than one name.
+.
+.TP
+.B \[rs]$*
+In a macro or string, the concatenation of all the arguments separated
+by spaces.
+.
+.TP
+.B \[rs]$@
+In a macro or string, the concatenation of all the arguments with each
+surrounded by double quotes, and separated by spaces.
+.
+.TP
+.B \[rs]$^
+In a macro, the representation of all parameters as if they were an
+argument to the
+.B ds
+request.
+.
+.TP
+.BI \[rs]$( nn
+.TQ
+.BI \[rs]$[ nnn ]
+In a macro or string, this gives the
+.IR nn -th
+or
+.IR nnn -th
+argument.
+.
+Macros and strings can have an unlimited number of arguments.
+.
+.TP
+.BI \[rs]? anything \[rs]?
+When used in a diversion, this transparently embeds
+.I anything
+in the diversion.
+.I anything
+is read in copy mode.
+.
+When the diversion is reread,
+.I anything
+is interpreted.
+.I anything
+may not contain newlines; use
+.B \[rs]!\&
+if you want to embed newlines in a diversion.
+.
+The escape sequence
+.B \[rs]?\&
+is also recognized in copy mode and turned into a single internal
+code; it is this code that terminates
+.IR anything .
+Thus
+.
+.RS
+.IP
+.EX
+.ne 14v+\n(.Vu
+\&.nr x 1
+\&.nf
+\&.di d
+\&\[rs]?\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\
+\[rs]\c
+\&\[rs]nx\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]?\[rs]?
+\&.di
+\&.nr x 2
+\&.di e
+\&.d
+\&.di
+\&.nr x 3
+\&.di f
+\&.e
+\&.di
+\&.nr x 4
+\&.f
+.EE
+.RE
+.
+.IP
+prints\~\c
+.BR 4 .
+.
+.TP
+.B \[rs]/
+This increases the width of the preceding glyph so that the
+spacing between that glyph and the following glyph is
+correct if the following glyph is a roman glyph.
+.
+.if t \{\
+.  nop For example, if an italic\~f is immediately followed by a roman
+.  nop right parenthesis, then in many fonts the top right portion of
+.  nop the\~f overlaps the top left of the right parenthesis
+.  nop producing \f[I]f\f[R]), which is ugly.
+.  nop Inserting
+.  B \[rs]/
+.  nop produces
+.  ie \n(.g \f[I]f\/\f[R])
+.  el       \f[I]f\|\f[R])
+.  nop and avoids this problem.
+.\}
+It is a good idea to use this escape sequence whenever an italic
+glyph is immediately followed by a roman glyph without any
+intervening space.
+.
+.TP
+.B \[rs],
+This modifies the spacing of the following glyph so that the
+spacing between that glyph and the preceding glyph is
+correct if the preceding glyph is a roman glyph.
+.
+.if t \{\
+.  nop For example, inserting
+.  B \[rs],
+.  nop between the parenthesis and the\~f changes
+.  nop \f[R](\f[I]f\f[R] to
+.  ie \n(.g \f[R](\,\f[I]f\f[R].
+.  el       \f[R](\^\f[I]f\f[R].
+.\}
+It is a good idea to use this escape sequence whenever a roman
+glyph is immediately followed by an italic glyph without any
+intervening space.
+.
+.TP
+.B \[rs])
+Like
+.B \[rs]&
+except that it behaves like a character declared with the
+.B cflags
+request to be transparent for the purposes of end-of-sentence
+recognition.
+.
+.TP
+.B \[rs]\[ti]
+This produces an unbreakable space that stretches like a normal
+inter-word space when a line is adjusted.
+.
+.TP
+.B \[rs]:
+This causes the insertion of a zero-width break point.
+.
+It is equal to
+.B \[rs]%
+within a word but without insertion of a soft hyphen glyph.
+.
+.TP
+.B \[rs]#
+Everything up to and including the next newline is ignored.
+.
+This is interpreted in copy mode.
+.
+It is like
+.B \[rs]"
+except that
+.B \[rs]"
+does not ignore the terminating newline.
+.
+.
+.\" ====================================================================
+.SS "New requests"
+.\" ====================================================================
+.
+.TP
+.BI .aln\  xx\ yy
+Create an alias
+.I xx
+for number register object named
+.IR yy .
+The new name and the old name are exactly equivalent.
+.
+If
+.I yy
+is undefined, a warning of type
+.B reg
+is generated, and the request is ignored.
+.
+.TP
+.BI .als\  xx\ yy
+Create an alias
+.I xx
+for request, string, macro, or diversion object named
+.IR yy .
+.
+The new name and the old name are exactly equivalent (it is
+similar to a hard rather than a soft link).
+.
+If
+.I yy
+is undefined, a warning of type
+.B mac
+is generated, and the request is ignored.
+.
+The
+.BR de ,
+.BR am ,
+.BR di ,
+.BR da ,
+.BR ds ,
+and
+.B as
+requests only create a new object if the name of the macro, diversion
+or string is currently undefined or if it is defined to be a
+request; normally they modify the value of an existing object.
+.
+.TP
+.BI .am1\  xx\ yy
+Similar to
+.BR .am ,
+but compatibility mode is switched off during execution.
+.
+To be more precise, a \[oq]compatibility save\[cq] token is inserted
+at the beginning of the macro addition, and a \[oq]compatibility
+restore\[cq] token at the end.
+.
+As a consequence, the requests
+.BR am ,
+.BR am1 ,
+.BR de ,
+and
+.B de1
+can be intermixed freely since the compatibility save/\:restore tokens
+only affect the macro parts defined by
+.B .am1
+and
+.BR .ds1 .
+.
+.TP
+.BI .ami\  xx\ yy
+Append to macro indirectly.
+.
+See the
+.B dei
+request below for more information.
+.
+.TP
+.BI .ami1\  xx\ yy
+Same as the
+.B ami
+request but compatibility mode is switched off during execution.
+.
+.TP
+.BI .as1\  xx\ yy
+Similar to
+.BR .as ,
+but compatibility mode is switched off during expansion.
+.
+To be more precise, a \[oq]compatibility save\[cq] token is inserted
+at the beginning of the string, and a \[oq]compatibility restore\[cq]
+token at the end.
+.
+As a consequence, the requests
+.BR as ,
+.BR as1 ,
+.BR ds ,
+and
+.B ds1
+can be intermixed freely since the compatibility save/\:restore tokens
+only affect the (sub)strings defined by
+.B as1
+and
+.BR ds1 .
+.
+.TP
+.BI .asciify\  xx
+This request \[oq]unformats\[cq] the diversion
+.I xx
+in such a way that ASCII and space characters (and some escape
+sequences) that were formatted
+and diverted into
+.I xx
+are treated like ordinary input characters when
+.I xx
+is reread.
+Useful for diversions in conjunction with the
+.B writem
+request.
+.
+It can be also used for gross hacks; for example, this
+.
+.RS
+.IP
+.EX
+.ne 7v+\n(.Vu
+\&.tr @.
+\&.di x
+\&@nr n 1
+\&.br
+\&.di
+\&.tr @@
+\&.asciify x
+\&.x
+.EE
+.RE
+.
+.IP
+sets register\~\c
+.B n
+to\~1.
+.
+Note that glyph information (font, font size, etc.) is not preserved;
+use
+.B .unformat
+instead.
+.
+.TP
+.B .backtrace
+Print a backtrace of the input stack on stderr.
+.
+.TP
+.BI .blm\  xx
+Set the blank line macro to
+.IR xx .
+If there is a blank line macro, it is invoked when a blank line
+is encountered instead of the usual troff behaviour.
+.
+.TP
+.BI .box\  xx
+.TQ
+.BI .boxa\  xx
+These requests are similar to the
+.B di
+and
+.B da
+requests with the exception that a partially filled line does not
+become part of the diversion (i.e., the diversion always starts with a
+new line) but is restored after ending the diversion, discarding the
+partially filled line which possibly comes from the diversion.
+.
+.TP
+.B .break
+Break out of a while loop.
+.
+See also the
+.B while
+and
+.B continue
+requests.
+.
+Be sure not to confuse this with the
+.B br
+request.
+.
+.TP
+.B .brp
+This is the same as
+.BR \[rs]p .
+.
+.TP
+.BI .cflags\  "n c1 c2 \*[ellipsis]"
+Characters
+.IR c1 ,
+.IR c2 ,
+.IR \*[ellipsis] ,
+have properties determined by
+.IR n ,
+which is ORed from the following:
+.
+.RS
+.IP 1
+The character ends sentences (initially characters
+.B .?!\&
+have this property).
+.
+.IP 2
+Lines can be broken before the character (initially no characters have
+this property); a line is not broken at a character with this property
+unless the characters on each side both have non-zero hyphenation
+codes.
+This can be overridden with value 64.
+.
+.IP 4
+Lines can be broken after the character (initially characters
+.B \-\[rs][hy]\[rs][em]
+have this property); a line is not broken at a character with this
+property unless the characters on each side both have non-zero
+hyphenation codes.
+This can be overridden with value 64.
+.
+.IP 8
+The glyph associated with this character overlaps horizontally
+(initially characters
+.B \[rs][ul]\[rs][rn]\[rs][ru]\[rs][radicalex]\[rs][sqrtex]
+have this property).
+.
+.IP 16
+The glyph associated with this character overlaps vertically
+(initially glyph
+.B \[rs][br]
+has this property).
+.
+.IP 32
+An end-of-sentence character followed by any number of characters with
+this property is treated as the end of a sentence if followed by a
+newline or two spaces; in other words the character is transparent for
+the purposes of end-of-sentence recognition; this is the same as having
+a zero space factor in \*[tx] (initially characters
+.B \[dq]')]*\[rs][dg]\[rs][rq]\[rs][cq]
+have this property).
+.
+.IP 64
+Ignore hyphenation code values of the surrounding characters.
+Use this in combination with values 2 and\~4 (initially no characters
+have this property).
+.
+.IP 128
+Prohibit a line break before the character, but allow a line break after
+the character.
+This works only in combination with flags 256 and 512 and has no effect
+otherwise.
+.
+.IP 256
+Prohibit a line break after the character, but allow a line break before
+the character.
+This works only in combination with flags 128 and 512 and has no effect
+otherwise.
+.
+.IP 512
+Allow line break before or after the character.
+This works only in combination with flags 128 and 256 and has no effect
+otherwise.
+.RE
+.
+.IP
+Contrary to flag values 2 and\~4, the flags 128, 256, and 512 work
+pairwise.
+.
+If, for example, the left character has value 512, and the right
+character 128, no line break gets inserted.
+.
+If we use value\~6 instead for the left character, a line break after
+the character can't be suppressed since the right neighbour character
+doesn't get examined.
+.
+.TP
+.BI .char\  c\ string
+[This request can both define characters and glyphs.]
+.
+.IP
+Define entity\~\c
+.I c
+to be
+.IR string .
+.
+To be more precise, define (or even override) a groff entity which
+can be accessed with name\~\c
+.I c
+on the input side, and which uses
+.I string
+on the output side.
+.
+Every time glyph\~\c
+.I c
+needs to be printed,
+.I string
+is processed in a temporary environment and the result is
+wrapped up into a single object.
+.
+Compatibility mode is turned off and the escape character is
+set to\~\c
+.B \[rs]
+while
+.I string
+is being processed.
+.
+Any emboldening, constant spacing or track kerning is applied to
+this object rather than to individual glyphs in
+.IR string .
+.
+.IP
+A groff object defined by this request can be used just like a
+normal glyph provided by the output device.
+.
+In particular other characters can be translated to it with the
+.B tr
+request; it can be made the leader glyph by the
+.B lc
+request; repeated patterns can be drawn with the glyph using the
+.B \[rs]l
+and
+.B \[rs]L
+escape sequences; words containing\~\c
+.I c
+can be hyphenated correctly, if the
+.B hcode
+request is used to give the object a hyphenation code.
+.
+.IP
+There is a special anti-recursion feature: Use of glyph within the
+glyph's definition is handled like normal glyphs not defined with
+.BR char .
+.IP
+A glyph definition can be removed with the
+.B rchar
+request.
+.
+.TP
+.BI .chop\  xx
+Chop the last element off macro, string, or diversion
+.IR xx .
+This is useful for removing the newline from the end of diversions
+that are to be interpolated as strings.
+.
+.TP
+.BI .class\  "name c1 c2 \*[ellipsis]"
+Assign
+.I name
+to a set of characters
+.IR c1 ,
+.IR c2 ,
+.IR \*[ellipsis] ,
+so that they can be referred to from other requests easily (currently
+.B .cflags
+only).
+.
+Character ranges (indicated by an intermediate \[oq]\-\[cq]) and
+nested classes are possible also.
+.
+This is useful to assign properties to a large set of characters.
+.
+.TP
+.BI .close\  stream
+Close the stream named
+.IR stream ;
+.I stream
+will no longer be an acceptable argument to the
+.B write
+request.
+.
+See the
+.B open
+request.
+.
+.TP
+.BI .composite\  glyph1\ glyph2
+Map glyph name
+.I glyph1
+to glyph name
+.I glyph2
+if it is used in
+.BI \[rs][ \*[ellipsis] ]
+with more than one component.
+.
+.TP
+.B .continue
+Finish the current iteration of a while loop.
+.
+See also the
+.B while
+and
+.B break
+requests.
+.
+.TP
+.BI .color\  n
+If
+.I n
+is non-zero or missing, enable colors (this is the default), otherwise
+disable them.
+.
+.TP
+.BI .cp\  n
+If
+.I n
+is non-zero or missing, enable compatibility mode, otherwise disable
+it.
+.
+In compatibility mode, long names are not recognized, and the
+incompatibilities caused by long names do not arise.
+.
+.TP
+.BI .defcolor\  xxx\ scheme\ color_components
+Define color
+.IR xxx .
+.I scheme
+can be one of the following values:
+.B rgb
+(three components),
+.B cmy
+(three components),
+.B cmyk
+(four components), and
+.B gray
+or
+.B grey
+(one component).
+.
+Color components can be given either as a hexadecimal string or as
+positive decimal integers in the range 0\[en]65535.
+.
+A hexadecimal string contains all color components concatenated; it
+must start with either
+.B #
+or
+.BR ## .
+The former specifies hex values in the range 0\[en]255 (which are
+internally multiplied by\~257), the latter in the range 0\[en]65535.
+.
+Examples: #FFC0CB (pink), ##ffff0000ffff (magenta).
+.
+A new scaling indicator\~\c
+.B f
+has been introduced which multiplies its value by\~65536; this makes
+it convenient to specify color components as fractions in the range 0
+to\~1.
+.
+Example:
+.
+.RS
+.IP
+.EX
+\&.defcolor darkgreen rgb 0.1f 0.5f 0.2f
+.EE
+.RE
+.
+.IP
+Note that
+.B f
+is the default scaling indicator for the
+.B defcolor
+request, thus the above statement is equivalent to
+.
+.RS
+.IP
+.EX
+\&.defcolor darkgreen rgb 0.1 0.5 0.2
+.EE
+.RE
+.
+.IP
+The color named
+.B default
+(which is device-specific) can't be redefined.
+.
+It is possible that the default color for
+.B \[rs]M
+and
+.B \[rs]m
+is not the same.
+.
+.TP
+.BI .de1\  xx\ yy
+Similar to
+.BR .de ,
+but compatibility mode is switched off during execution.
+.
+On entry, the current compatibility mode is saved and restored at exit.
+.
+.TP
+.BI .dei\  xx\ yy
+Define macro indirectly.
+.
+The following example
+.
+.RS
+.IP
+.ne 2v+\n(.Vu
+.EX
+\&.ds xx aa
+\&.ds yy bb
+\&.dei xx yy
+.EE
+.RE
+.
+.IP
+is equivalent to
+.
+.RS
+.IP
+.EX
+\&.de aa bb
+.EE
+.RE
+.
+.TP
+.BI .dei1\  xx\ yy
+Similar to the
+.B dei
+request but compatibility mode is switched off during execution.
+.
+.TP
+.BI .device\  anything
+This is (almost) the same as the
+.B \[rs]X
+escape.
+.I anything
+is read in copy mode; a leading\~\c
+.B \[dq]
+is stripped.
+.
+.TP
+.BI .devicem\  xx
+This is the same as the
+.B \[rs]Y
+escape (to embed the contents of a macro into the intermediate
+output preceded with \[oq]x\~X\[cq]).
+.
+.TP
+.BI .do\  xxx
+Interpret
+.I .xxx
+with compatibility mode disabled.
+.
+For example,
+.
+.RS
+.
+.IP
+.EX
+\&.do fam T
+.EE
+.
+.P
+would have the same effect as
+.
+.IP
+.EX
+\&.fam T
+.EE
+.
+.P
+except that it would work even if compatibility mode had been enabled.
+.
+Note that the previous compatibility mode is restored before any files
+sourced by
+.I xxx
+are interpreted.
+.
+.RE
+.
+.TP
+.BI .ds1\  xx\ yy
+Similar to
+.BR .ds ,
+but compatibility mode is switched off during expansion.
+.
+To be more precise, a \[oq]compatibility save\[cq] token is inserted
+at the beginning of the string, and a \[oq]compatibility restore\[cq]
+token at the end.
+.
+.TP
+.B .ecs
+Save current escape character.
+.
+.TP
+.B .ecr
+Restore escape character saved with
+.BR ecs .
+Without a previous call to
+.BR ecs ,
+.RB \[oq] \[rs] \[cq]
+will be the new escape character.
+.
+.TP
+.BI .evc\  xx
+Copy the contents of environment
+.I xx
+to the current environment.
+.
+No pushing or popping of environments is done.
+.
+.TP
+.BI .fam\  xx
+Set the current font family to
+.IR xx .
+The current font family is part of the current environment.
+If
+.I xx
+is missing, switch back to previous font family.
+.
+The value at start-up is \[oq]T\[cq].
+.
+See the description of the
+.B sty
+request for more information on font families.
+.
+.TP
+.BI .fchar\  c\ string
+Define fallback character (or glyph)\~\c
+.I c
+to be
+.IR string .
+.
+The syntax of this request is the same as the
+.B char
+request; the only difference is that a glyph defined with
+.B char
+hides the glyph with the same name in the current font, whereas a
+glyph defined with
+.B fchar
+is checked only if the particular glyph isn't found in the current
+font.
+.
+This test happens before checking special fonts.
+.
+.TP
+.BI .fcolor\  c
+Set the fill color to\~\c
+.IR c .
+If
+.I c
+is missing,
+switch to the previous fill color.
+.
+.TP
+.BI .fschar\  f\ c\ string
+Define fallback character (or glyph)\~\c
+.I c
+for font\~\c
+.I f
+to be
+.IR string .
+.
+The syntax of this request is the same as the
+.B char
+request (with an additional argument to specify the font); a glyph
+defined with
+.B fschar
+is searched after the list of fonts declared with the
+.B fspecial
+request but before the list of fonts declared with
+.BR .special .
+.
+.TP
+.BI .fspecial\  "f s1 s2 \*[ellipsis]"
+When the current font is\~\c
+.IR f ,
+fonts
+.IR s1 ,
+.IR s2 ,
+.IR \*[ellipsis] ,
+are special, that is, they are searched for glyphs not in
+the current font.
+.
+Any fonts specified in the
+.B special
+request are searched after fonts specified in the
+.B fspecial
+request.
+.
+Without argument, reset the list of global special fonts to be empty.
+.
+.TP
+.BI .ftr\  f\ g
+Translate font\~\c
+.I f
+to\~\c
+.IR g .
+Whenever a font named\~\c
+.I f
+is referred to in an
+.B \[rs]f
+escape sequence, in the
+.B F
+and
+.B S
+conditional operators, or in the
+.BR ft ,
+.BR ul ,
+.BR bd ,
+.BR cs ,
+.BR tkf ,
+.BR special ,
+.BR fspecial ,
+.BR fp ,
+or
+.B sty
+requests, font\~\c
+.I g
+is used.
+If
+.I g
+is missing, or equal to\~\c
+.I f
+then font\~\c
+.I f
+is not translated.
+.
+.TP
+.BI .fzoom\  f\ zoom
+Set zoom factor
+.I zoom
+for font\~\c
+.IR f .
+.I zoom
+must a non-negative integer multiple of 1/1000th.
+If it is missing or is equal to zero, it means the same as 1000, namely
+no magnification.
+.IR f \~\c
+must be a real font name, not a style.
+.
+.TP
+.BI .gcolor\  c
+Set the glyph color to\~\c
+.IR c .
+If
+.I c
+is missing,
+switch to the previous glyph color.
+.
+.TP
+.BI .hcode\  "c1 code1 c2 code2 \*[ellipsis]"
+Set the hyphenation code of character
+.I c1
+to
+.I code1
+and that of
+.I c2
+to
+.IR code2 ,
+and so on.
+A hyphenation code must be a single input character (not a special
+character) other than a digit or a space.
+.
+Initially each lower-case letter \%a\[en]z has a hyphenation code, which
+is itself, and each upper-case letter \%A\[en]Z has a hyphenation code
+which is the lower-case version of itself.
+.
+See also the
+.B hpf
+request.
+.
+.TP
+.BI .hla\  lang
+Set the current hyphenation language to
+.IR lang .
+Hyphenation exceptions specified with the
+.B hw
+request and hyphenation patterns specified with the
+.B hpf
+request are both associated with the current hyphenation language.
+.
+The
+.B hla
+request is usually invoked by the
+.B troffrc
+file to set up a default language.
+.
+.TP
+.BI .hlm\  n
+Set the maximum number of consecutive hyphenated lines to\~\c
+.IR n .
+If
+.I n
+is negative, there is no maximum.
+.
+The default value is\~\-1.
+.
+This value is associated with the current environment.
+.
+Only lines output from an environment count towards the maximum
+associated with that environment.
+.
+Hyphens resulting from
+.B \[rs]%
+are counted; explicit hyphens are not.
+.
+.TP
+.BI .hpf\  file
+Read hyphenation patterns from
+.IR file ;
+this is searched for in the same way that
+.IB name .tmac
+is searched for when the
+.BI \-m name
+option is specified.
+.
+It should have the same format as (simple) \*[tx] patterns files.
+.
+More specifically, the following scanning rules are implemented.
+.
+.RS
+.IP \[bu]
+A percent sign starts a comment (up to the end of the line) even if
+preceded by a backslash.
+.
+.IP \[bu]
+No support for \[oq]digraphs\[cq] like
+.BR \[rs]$ .
+.
+.IP \[bu]
+.BI ^^ xx
+.RI ( x
+is 0\[en]9 or a\[en]f) and
+.BI ^^ x
+(character code of\~\c
+.I x
+in the range 0\[en]127) are recognized; other use of\~\c
+.B ^
+causes an error.
+.
+.IP \[bu]
+No macro expansion.
+.
+.IP \[bu]
+.B hpf
+checks for the expression
+.BR \[rs]patterns{ \*[ellipsis] }
+(possibly with whitespace before and after the braces).
+.
+Everything between the braces is taken as hyphenation patterns.
+.
+Consequently,
+.BR { \~\c
+and\~\c
+.B }
+are not allowed in patterns.
+.
+.IP \[bu]
+Similarly,
+.BR \[rs]hyphenation{ \*[ellipsis] }
+gives a list of hyphenation exceptions.
+.
+.IP \[bu]
+.B \[rs]endinput
+is recognized also.
+.
+.IP \[bu]
+For backwards compatibility, if
+.B \[rs]patterns
+is missing, the whole file is treated as a list of hyphenation patterns
+(only recognizing the
+.BR % \~\c
+character as the start of a comment).
+.RE
+.
+.IP
+Use the
+.B hpfcode
+request to map the encoding used in hyphenation patterns files to
+.BR groff 's
+input encoding.
+.
+By default, everything maps to itself except letters \[oq]A\[cq] to
+\[oq]Z\[cq] which map to \[oq]a\[cq] to \[oq]z\[cq].
+.
+.IP
+The set of hyphenation patterns is associated with the current language
+set by the
+.B hla
+request.
+.
+The
+.B hpf
+request is usually invoked by the
+.B troffrc
+file; a second call replaces the old patterns with the new ones.
+.
+.TP
+.BI .hpfa\  file
+The same as
+.B hpf
+except that the hyphenation patterns from
+.I file
+are appended to the patterns already loaded in the current language.
+.
+.TP
+.BI .hpfcode\  "a b c d \*[ellipsis]"
+After reading a hyphenation patterns file with the
+.B hpf
+or
+.B hpfa
+request, convert all characters with character code\~\c
+.I a
+in the recently read patterns to character code\~\c
+.IR b ,
+character code\~\c
+.I c
+to\~\c
+.IR d ,
+etc.
+.
+Initially, all character codes map to themselves.
+.
+The arguments of
+.B hpfcode
+must be integers in the range 0 to\~255.
+.
+Note that it is even possible to use character codes which are invalid
+in
+.B groff
+otherwise.
+.
+.TP
+.BI .hym\  n
+Set the
+.I hyphenation margin
+to\~\c
+.IR n :
+when the current adjustment mode is not\~\c
+.BR b ,
+the line is not hyphenated if the line is no more than
+.I n
+short.
+.
+The default hyphenation margin is\~0.
+.
+The default scaling indicator for this request is\~\c
+.BR m .
+The hyphenation margin is associated with the current environment.
+.
+The current hyphenation margin is available in the
+.B \[rs]n[.hym]
+register.
+.
+.TP
+.BI .hys\  n
+Set the
+.I hyphenation space
+to\~\c
+.IR n :
+When the current adjustment mode is\~\c
+.B b
+don't hyphenate the line if the line can be justified by adding no
+more than
+.I n
+extra space to each word space.
+.
+The default hyphenation space is\~0.
+.
+The default scaling indicator for this request is\~\c
+.BR m .
+The hyphenation space is associated with the current environment.
+.
+The current hyphenation space is available in the
+.B \[rs]n[.hys]
+register.
+.
+.TP
+.BI .itc\  n\ macro
+Variant of
+.B .it
+for which a line interrupted with
+.B \[rs]c
+is not counted as an input line.
+.
+.TP
+.BI .kern\  n
+If
+.I n
+is non-zero or missing, enable pairwise kerning, otherwise disable it.
+.
+.TP
+.BI .length\  xx\ string
+Compute the length of
+.I string
+and return it in the number register
+.I xx
+(which is not necessarily defined before).
+.
+.TP
+.BI .linetabs\  n
+If
+.I n
+is non-zero or missing, enable line-tabs mode, otherwise disable it
+(which is the default).
+.
+In line-tabs mode, tab distances are computed relative to the
+(current) output line.
+.
+Otherwise they are taken relative to the input line.
+.
+For example, the following
+.
+.RS
+.IP
+.ne 6v+\n(.Vu
+.EX
+\&.ds x a\[rs]t\[rs]c
+\&.ds y b\[rs]t\[rs]c
+\&.ds z c
+\&.ta 1i 3i
+\&\[rs]*x
+\&\[rs]*y
+\&\[rs]*z
+.EE
+.RE
+.
+.IP
+yields
+.
+.RS
+.IP
+.EX
+a         b         c
+.EE
+.RE
+.
+.IP
+In line-tabs mode, the same code gives
+.
+.RS
+.IP
+.EX
+a         b                   c
+.EE
+.RE
+.
+.IP
+Line-tabs mode is associated with the current environment; the
+read-only number register
+.B \[rs]n[.linetabs]
+is set to\~1 if in line-tabs mode, and 0 otherwise.
+.
+.TP
+.BI .lsm\  xx
+Set the leading spaces macro to
+.IR xx .
+If there are leading spaces in an input line, it is invoked instead of
+the usual troff behaviour; the leading spaces are removed.
+Registers
+.B \[rs]n[lsn]
+and
+.B \[rs]n[lss]
+hold the number of removed leading spaces and the corresponding
+horizontal space, respectively.
+.
+.TP
+.BI .mso\  file
+The same as the
+.B so
+request except that
+.I file
+is searched for in the same directories as macro files for the
+.B \-m
+command-line option.
+.
+If the file name to be included has the form
+.IB name .tmac
+and it isn't found,
+.B mso
+tries to include
+.BI tmac. name
+instead and vice versa.
+.
+A warning of type
+.B file
+is generated if
+.I file
+can't be loaded, and the request is ignored.
+.
+.TP
+.BI .nop \ anything
+Execute
+.IR anything .
+This is similar to \[oq].if\ 1\[cq].
+.
+.TP
+.B .nroff
+Make the
+.B n
+built-in condition true and the
+.B t
+built-in condition false.
+.
+This can be reversed using the
+.B troff
+request.
+.
+.TP
+.BI .open\  stream\ filename
+Open
+.I filename
+for writing and associate the stream named
+.I stream
+with it.
+.
+See also the
+.B close
+and
+.B write
+requests.
+.
+.TP
+.BI .opena\  stream\ filename
+Like
+.BR open ,
+but if
+.I filename
+exists, append to it instead of truncating it.
+.
+.TP
+.BI .output\  string
+Emit
+.I string
+directly to the intermediate output (subject to copy-mode
+interpretation);
+this is similar to
+.B \[rs]!\&
+used at the top level.
+.
+An initial double quote in
+.I string
+is stripped off to allow initial blanks.
+.
+.TP
+.B .pev
+Print the current environment and each defined environment state on
+stderr.
+.
+.TP
+.B .pnr
+Print the names and contents of all currently defined number registers
+on stderr.
+.
+.TP
+.BI .psbb \ filename
+Get the bounding box of a PostScript image
+.IR filename .
+.
+This file must conform to Adobe's Document Structuring
+Conventions; the command looks for a
+.B \%%%BoundingBox
+comment to extract the bounding box values.
+.
+After a successful call, the coordinates (in PostScript units) of the
+lower left and upper right corner can be found in the registers
+.BR \[rs]n[llx] ,
+.BR \[rs]n[lly] ,
+.BR \[rs]n[urx] ,
+and
+.BR \[rs]n[ury] ,
+respectively.
+.
+If some error has occurred, the four registers are set to zero.
+.
+.TP
+.BI .pso \ command
+This behaves like the
+.B so
+request except that input comes from the standard output of
+.IR command .
+.
+.TP
+.B .ptr
+Print the names and positions of all traps (not including input line
+traps and diversion traps) on stderr.
+.
+Empty slots in the page trap list are printed as well, because they
+can affect the priority of subsequently planted traps.
+.
+.TP
+.BI .pvs \ \[+-]n
+Set the post-vertical line space to\~\c
+.IR n ;
+default scale indicator is\~\c
+.BR p .
+.
+This value is added to each line after it has been output.
+.
+With no argument, the post-vertical line space is set to its previous
+value.
+.
+.IP
+The total vertical line spacing consists of four components:
+.B .vs
+and
+.B \[rs]x
+with a negative value which are applied before the line is output, and
+.B .pvs
+and
+.B \[rs]x
+with a positive value which are applied after the line is output.
+.
+.TP
+.BI .rchar\  "c1 c2 \*[ellipsis]"
+Remove the definitions of glyphs
+.IR c1 ,
+.IR c2 ,
+.I \*[ellipsis]\ \"Add a sentence space
+This undoes the effect of a
+.B char
+request.
+.
+.TP
+.B .return
+Within a macro, return immediately.
+.
+If called with an argument, return twice, namely from the current macro
+and from the macro one level higher.
+.
+No effect otherwise.
+.
+.TP
+.BI .rfschar\  "c1 c2 \*[ellipsis]"
+Remove the font-specific definitions of glyphs
+.IR c1 ,
+.IR c2 ,
+.I \*[ellipsis]\ \"Add a sentence space
+This undoes the effect of an
+.B fschar
+request.
+.
+.TP
+.B .rj
+.TQ
+.BI .rj \~n
+Right justify the next
+.IR n \~\c
+input lines.
+.
+Without an argument right justify the next input line.
+.
+The number of lines to be right justified is available in the
+.B \[rs]n[.rj]
+register.
+.
+This implicitly does
+.BR .ce\~0 .
+The
+.B ce
+request implicitly does
+.BR .rj\~0 .
+.
+.TP
+.BI .rnn \ xx\ yy
+Rename number register
+.I xx
+to
+.IR yy .
+.
+.TP
+.BI .schar\  c\ string
+Define global fallback character (or glyph)\~\c
+.I c
+to be
+.IR string .
+.
+The syntax of this request is the same as the
+.B char
+request; a glyph defined with
+.B schar
+is searched after the list of fonts declared with the
+.B special
+request but before the mounted special fonts.
+.
+.TP
+.BI .shc\  c
+Set the soft hyphen character to\~\c
+.IR c .
+If
+.I c
+is omitted, the soft hyphen character is set to the default
+.BR \[rs][hy] .
+The soft hyphen character is the glyph which is inserted when
+a word is hyphenated at a line break.
+.
+If the soft hyphen character does not exist in the font of the
+glyph immediately preceding a potential break point, then the line
+is not broken at that point.
+.
+Neither definitions (specified with the
+.B char
+request) nor translations (specified with the
+.B tr
+request) are considered when finding the soft hyphen character.
+.
+.TP
+.BI .shift\  n
+In a macro, shift the arguments by
+.I n
+positions: argument\~\c
+.I i
+becomes argument
+.IR i \|\-\| n ;
+arguments 1 to\~\c
+.I n
+are no longer available.
+.
+If
+.I n
+is missing, arguments are shifted by\~1.
+.
+Shifting by negative amounts is currently undefined.
+.
+.TP
+.BI .sizes\  s1\ s2\ \*[ellipsis]\ sn\  [0]
+This command is similar to the
+.B sizes
+command of a
+.I DESC
+file.
+.
+It sets the available font sizes for the current font to
+.IR s1 ,
+.IR s2 ,
+.IR \*[ellipsis]\| ,\~ sn
+scaled points.
+.
+The list of sizes can be terminated by an optional\~\c
+.BR 0 .
+.
+Each
+.I si
+can also be a range of sizes
+.IR m \(en n .
+.
+Contrary to the font file command, the list can't extend over more
+than a single line.
+.
+.TP
+.BI .special\  "s1 s2 \*[ellipsis]"
+Fonts
+.IR s1 ,
+.IR s2 ,
+.IR \*[ellipsis] ,
+are special and are searched for glyphs not in the current
+font.
+.
+Without arguments, reset the list of special fonts to be empty.
+.
+.TP
+.BI .spreadwarn\  limit
+Make
+.B troff
+emit a warning if the additional space inserted for each space between
+words in an output line is larger or equal to
+.IR limit .
+.
+A negative value is changed to zero; no argument toggles the warning on
+and off without changing
+.IR limit .
+.
+The default scaling indicator is\~\c
+.BR m .
+.
+At startup,
+.B spreadwarn
+is deactivated, and
+.I limit
+is set to 3m.
+.
+For example,
+.B .spreadwarn\ 0.2m
+causes a warning if
+.B troff
+must add 0.2m or more for each interword space in a line.
+.
+This request is active only if text is justified to both margins (using
+.BR .ad\ b ).
+.
+.TP
+.BI .sty\  n\ f
+Associate style\~\c
+.I f
+with font position\~\c
+.IR n .
+A font position can be associated either with a font or with a style.
+.
+The current font is the index of a font position and so is also either
+a font or a style.
+.
+When it is a style, the font that is actually used is the font the
+name of which is the concatenation of the name of the current family
+and the name of the current style.
+.
+For example, if the current font is\~1 and font position\~1 is
+associated with style\~\c
+.B R
+and the current font family is\~\c
+.BR T ,
+then font
+.B TR
+is used.
+.
+If the current font is not a style, then the current family is ignored.
+.
+When the requests
+.BR cs ,
+.BR bd ,
+.BR tkf ,
+.BR uf ,
+or
+.B fspecial
+are applied to a style, then they are applied instead to the
+member of the current family corresponding to that style.
+.
+The default family can be set with the
+.B \-f
+command-line option.
+.
+The
+.B styles
+command in the
+DESC
+file controls which font positions (if any) are initially associated
+with styles rather than fonts.
+.
+.TP
+.BI .substring\  xx\ n1\  [ n2 ]
+Replace the string named
+.I xx
+with the substring defined by the indices
+.I n1
+and
+.IR n2 .
+The first character in the string has index\~0.
+.
+If
+.I n2
+is omitted, it is taken to be equal to the string's length.
+.
+If the index value
+.I n1
+or
+.I n2
+is negative, it is counted from the end of the string,
+going backwards:
+.
+The last character has index\~\-1, the character before the last
+character has index\~\-2, etc.
+.
+.TP
+.BI .tkf\  f\ s1\ n1\ s2\ n2
+Enable track kerning for font\~\c
+.IR f .
+When the current font is\~\c
+.I f
+the width of every glyph is increased by an amount between
+.I n1
+and
+.IR n2 ;
+when the current point size is less than or equal to
+.I s1
+the width is increased by
+.IR n1 ;
+when it is greater than or equal to
+.I s2
+the width is increased by
+.IR n2 ;
+when the point size is greater than or equal to
+.I s1
+and less than or equal to
+.I s2
+the increase in width is a linear function of the point size.
+.
+.TP
+.BI .tm1\  string
+Similar to the
+.B tm
+request,
+.I string
+is read in copy mode and written on the standard error, but an initial
+double quote in
+.I string
+is stripped off to allow initial blanks.
+.
+.TP
+.BI .tmc\  string
+Similar to
+.B tm1
+but without writing a final newline.
+.
+.TP
+.BI .trf\  filename
+Transparently output the contents of file
+.IR filename .
+Each line is output as if preceded by
+.BR \[rs]! ;
+however, the lines are not subject to copy-mode interpretation.
+.
+If the file does not end with a newline, then a newline is added.
+.
+For example, you can define a macro\~\c
+.I x
+containing the contents of file\~\c
+.IR f ,
+using
+.
+.RS
+.IP
+.ne 2v+\n(.Vu
+.EX
+\&.di x
+\&.trf f
+\&.di
+.EE
+.RE
+.
+.IP
+Unlike with the
+.B cf
+request, the file cannot contain characters, such as NUL,
+that are not valid troff input characters.
+.
+.TP
+.BI .trin\  abcd
+This is the same as the
+.B tr
+request except that the
+.B asciify
+request uses the character code (if any) before the character
+translation.
+.
+Example:
+.
+.RS
+.IP
+.EX
+\&.trin ax
+\&.di xxx
+\&a
+\&.br
+\&.di
+\&.xxx
+\&.trin aa
+\&.asciify xxx
+\&.xxx
+.EE
+.RE
+.
+.IP
+The result is
+.BR x\ a .
+.
+Using
+.BR tr ,
+the result would be
+.BR x\ x .
+.
+.TP
+.BI .trnt\  abcd
+This is the same as the
+.B tr
+request except that the translations do not apply to text that is
+transparently throughput into a diversion with
+.BR \[rs]! .
+For example,
+.
+.RS
+.IP
+.EX
+\&.tr ab
+\&.di x
+\&\[rs]!.tm a
+\&.di
+\&.x
+.EE
+.RE
+.
+.IP
+prints\~\c
+.BR b ;
+if
+.B trnt
+is used instead of
+.B tr
+it prints\~\c
+.BR a .
+.RE
+.
+.TP
+.B .troff
+Make the
+.B n
+built-in condition false, and the
+.B t
+built-in condition true.
+.
+This undoes the effect of the
+.B nroff
+request.
+.
+.TP
+.BI .unformat\  xx
+This request \[oq]unformats\[cq] the diversion
+.IR xx .
+.
+Contrary to the
+.B asciify
+request, which tries to convert formatted elements of the diversion
+back to input tokens as much as possible,
+.B .unformat
+only handles tabs and spaces between words (usually caused by spaces
+or newlines in the input) specially.
+.
+The former are treated as if they were input tokens, and the latter
+are stretchable again.
+.
+Note that the vertical size of lines is not preserved.
+.
+Glyph information (font, font size, space width, etc.) is retained.
+.
+Useful in conjunction with the
+.B box
+and
+.B boxa
+requests.
+.
+.TP
+.BI .vpt\  n
+Enable vertical position traps if
+.I n
+is non-zero, disable them otherwise.
+.
+Vertical position traps are traps set by the
+.B wh
+or
+.B dt
+requests.
+.
+Traps set by the
+.B it
+request are not vertical position traps.
+.
+The parameter that controls whether vertical position traps are
+enabled is global.
+.
+Initially vertical position traps are enabled.
+.
+.TP
+.BI .warn\  n
+Control warnings.
+.IR n \~\c
+is the sum of the numbers associated with each warning that is to be
+enabled; all other warnings are disabled.
+.
+The number associated with each warning is listed in
+.BR @g@troff (@MAN1EXT@).
+.
+For example,
+.B .warn\~0
+disables all warnings, and
+.B .warn\~1
+disables all warnings except that about missing glyphs.
+.
+If
+.I n
+is not given, all warnings are enabled.
+.
+.TP
+.BI .warnscale\  si
+Set the scaling indicator used in warnings to
+.IR si .
+.
+Valid values for
+.I si
+are
+.BR u ,
+.BR i ,
+.BR c ,
+.BR p ,
+and\~\c
+.BR P .
+.
+At startup, it is set to\~\c
+.BR i .
+.
+.TP
+.BI .while \ c\ anything
+While condition\~\c
+.I c
+is true, accept
+.I anything
+as input;
+.IR c \~\c
+can be any condition acceptable to an
+.B if
+request;
+.I anything
+can comprise multiple lines if the first line starts with
+.B \[rs]{
+and the last line ends with
+.BR \[rs]} .
+See also the
+.B break
+and
+.B continue
+requests.
+.
+.TP
+.BI .write\  stream\ anything
+Write
+.I anything
+to the stream named
+.IR stream .
+.I stream
+must previously have been the subject of an
+.B open
+request.
+.I anything
+is read in copy mode;
+a leading\~\c
+.B \[dq]
+is stripped.
+.
+.TP
+.BI .writec\  stream\ anything
+Similar to
+.B write
+but without writing a final newline.
+.
+.TP
+.BI .writem\  stream\ xx
+Write the contents of the macro or string
+.I xx
+to the stream named
+.IR stream .
+.I stream
+must previously have been the subject of an
+.B open
+request.
+.I xx
+is read in copy mode.
+.
+.
+.\" ====================================================================
+.SS "Extended escape sequences"
+.\" ====================================================================
+.
+.TP
+.BR \[rs]D' \*[ellipsis] '
+All drawing commands of groff's intermediate output are accepted.
+.
+See subsection \[lq]Drawing Commands\[rq] below.
+.
+.
+.\" ====================================================================
+.SS "Extended requests"
+.\" ====================================================================
+.
+.TP
+.BI .cf\  filename
+When used in a diversion, this embeds in the diversion an object
+which, when reread, will cause the contents of
+.I filename
+to be transparently copied through to the output.
+.
+In Unix troff, the contents of
+.I filename
+is immediately copied through to the output regardless of whether
+there is a current diversion; this behaviour is so anomalous that it
+must be considered a bug.
+.
+.TP
+.BI .de\  xx\ yy
+.TQ
+.BI .am\  xx\ yy
+.TQ
+.BI .ds\  xx\ yy
+.TQ
+.BI .as\  xx\ yy
+In compatibility mode, these requests behaves similar to
+.BR .de1 ,
+.BR .am1 ,
+.BR .ds1 ,
+and
+.BR .as1 ,
+respectively: A \[oq]compatibility save\[cq] token is inserted at the
+beginning, and a \[oq]compatibility restore\[cq] token at the end,
+with compatibility mode switched on during execution.
+.
+.TP
+.BI .ev\  xx
+If
+.I xx
+is not a number, this switches to a named environment called
+.IR xx .
+The environment should be popped with a matching
+.B ev
+request without any arguments, just as for numbered environments.
+.
+There is no limit on the number of named environments; they are
+created the first time that they are referenced.
+.
+.TP
+.BI .hy\  n
+New additive values 16 and\~32 are available; the former enables
+hyphenation before the last character, the latter enables hyphenation
+after the first character.
+.
+.TP
+.BI .ss\  m\ n
+When two arguments are given to the
+.B ss
+request, the second argument gives the
+.IR "sentence space size" .
+If the second argument is not given, the sentence space size
+is the same as the word space size.
+.
+Like the word space size, the sentence space is in units of
+one twelfth of the spacewidth parameter for the current font.
+.
+Initially both the word space size and the sentence
+space size are\~12.
+.
+Contrary to Unix troff, GNU troff handles this request in nroff mode
+also; a given value is then rounded down to the nearest multiple
+of\~12.
+.
+The sentence space size is used in two circumstances.
+.
+If the end of a sentence occurs at the end of a line in fill mode,
+then both an inter-word space and a sentence space are added; if
+two spaces follow the end of a sentence in the middle of a line, then
+the second space is a sentence space.
+.
+Note that the behaviour of Unix troff is exactly that exhibited
+by GNU troff if a second argument is never given to the
+.B ss
+request.
+.
+In GNU troff, as in Unix troff, you should always follow a sentence
+with either a newline or two spaces.
+.
+.TP
+.BI .ta\  "n1 n2 \*[ellipsis] nn " "T " "r1 r2 \*[ellipsis] rn"
+Set tabs at positions
+.IR n1 ,
+.IR n2 ,
+.IR \*[ellipsis] ,
+.I nn
+and then set tabs at
+.IR nn \|+\| r1 ,
+.IR nn \|+\| r2 ,
+.IR \*[ellipsis] ,
+.IR nn \|+\| rn
+and then at
+.IR nn \|+\| rn \|+\| r1 ,
+.IR nn \|+\| rn \|+\| r2 ,
+.IR \*[ellipsis] ,
+.IR nn \|+\| rn \|+\| rn ,
+and so on.
+For example,
+.
+.RS
+.IP
+.EX
+\&.ta T .5i
+.EE
+.
+.P
+sets tabs every half an inch.
+.RE
+.
+.
+.\" ====================================================================
+.SS "New number registers"
+.\" ====================================================================
+.
+The following read-only registers are available:
+.
+.TP
+.B \[rs]n[.br]
+Within a macro call, it is set to\~1 if the macro is called with the
+\[oq]normal\[cq] control character (\[oq].\[cq] by default), and set
+to\~0 otherwise.
+.
+This allows the reliable modification of requests.
+.
+.RS
+.IP
+.ne 6v+\n(.Vu
+.EX
+\&.als bp*orig bp
+\&.de bp
+\&.tm before bp
+\&.ie \[rs]\[rs]n[.br] .bp*orig
+\&.el 'bp*orig
+\&.tm after bp
+\&..
+.EE
+.RE
+.
+.IP
+Using this register outside of a macro makes no sense (it always returns
+zero in such cases).
+.
+.TP
+.B \[rs]n[.C]
+1\~if compatibility mode is in effect, 0\~otherwise.
+.
+.TP
+.B \[rs]n[.cdp]
+The depth of the last glyph added to the current environment.
+.
+It is positive if the glyph extends below the baseline.
+.
+.TP
+.B \[rs]n[.ce]
+The number of lines remaining to be centered, as set by the
+.B ce
+request.
+.
+.TP
+.B \[rs]n[.cht]
+The height of the last glyph added to the current environment.
+.
+It is positive if the glyph extends above the baseline.
+.
+.TP
+.B \[rs]n[.color]
+1\~if colors are enabled, 0\~otherwise.
+.
+.TP
+.B \[rs]n[.csk]
+The skew of the last glyph added to the current environment.
+.
+The
+.I skew
+of a glyph is how far to the right of the center of a glyph
+the center of an accent over that glyph should be placed.
+.
+.TP
+.B \[rs]n[.ev]
+The name or number of the current environment.
+.
+This is a string-valued register.
+.
+.TP
+.B \[rs]n[.fam]
+The current font family.
+.
+This is a string-valued register.
+.
+.TP
+.B \[rs]n[.fn]
+The current (internal) real font name.
+.
+This is a string-valued register.
+.
+If the current font is a style, the value of
+.B \[rs]n[.fn]
+is the proper concatenation of family and style name.
+.
+.TP
+.B \[rs]n[.fp]
+The number of the next free font position.
+.
+.TP
+.B \[rs]n[.g]
+Always\~1.
+.
+Macros should use this to determine whether they are running under GNU
+troff.
+.
+.TP
+.B \[rs]n[.height]
+The current height of the font as set with
+.BR \[rs]H .
+.
+.TP
+.B \[rs]n[.hla]
+The current hyphenation language as set by the
+.B hla
+request.
+.
+.TP
+.B \[rs]n[.hlc]
+The number of immediately preceding consecutive hyphenated lines.
+.
+.TP
+.B \[rs]n[.hlm]
+The maximum allowed number of consecutive hyphenated lines, as set by
+the
+.B hlm
+request.
+.
+.TP
+.B \[rs]n[.hy]
+The current hyphenation flags (as set by the
+.B hy
+request).
+.
+.TP
+.B \[rs]n[.hym]
+The current hyphenation margin (as set by the
+.B hym
+request).
+.
+.TP
+.B \[rs]n[.hys]
+The current hyphenation space (as set by the
+.B hys
+request).
+.
+.TP
+.B \[rs]n[.in]
+The indentation that applies to the current output line.
+.
+.TP
+.B \[rs]n[.int]
+Set to a positive value if last output line is interrupted (i.e., if
+it contains
+.BR \[rs]c ).
+.
+.TP
+.B \[rs]n[.kern]
+1\~if pairwise kerning is enabled, 0\~otherwise.
+.
+.TP
+.B \[rs]n[.lg]
+The current ligature mode (as set by the
+.B lg
+request).
+.
+.TP
+.B \[rs]n[.linetabs]
+The current line-tabs mode (as set by the
+.B linetabs
+request).
+.
+.TP
+.B \[rs]n[.ll]
+The line length that applies to the current output line.
+.
+.TP
+.B \[rs]n[.lt]
+The title length as set by the
+.B lt
+request.
+.
+.TP
+.B \[rs]n[.m]
+The name of the current drawing color.
+.
+This is a string-valued register.
+.
+.TP
+.B \[rs]n[.M]
+The name of the current background color.
+.
+This is a string-valued register.
+.
+.TP
+.B \[rs]n[.ne]
+The amount of space that was needed in the last
+.B ne
+request that caused a trap to be sprung.
+.
+Useful in conjunction with the
+.B \[rs]n[.trunc]
+register.
+.
+.TP
+.B \[rs]n[.ns]
+1\~if no-space mode is active, 0\~otherwise.
+.
+.TP
+.B \[rs]n[.O]
+The current output level as set with
+.BR \[rs]O .
+.
+.TP
+.B \[rs]n[.P]
+1\~if the current page is in the output list set with
+.BR \-o .
+.
+.TP
+.B \[rs]n[.pe]
+1\~during a page ejection caused by the
+.B bp
+request, 0\~otherwise.
+.
+.TP
+.B \[rs]n[.pn]
+The number of the next page, either the value set by a
+.B pn
+request, or the number of the current page plus\~1.
+.
+.TP
+.B \[rs]n[.ps]
+The current point size in scaled points.
+.
+.TP
+.B \[rs]n[.psr]
+The last-requested point size in scaled points.
+.
+.TP
+.B \[rs]n[.pvs]
+The current post-vertical line space as set with the
+.B pvs
+request.
+.
+.TP
+.B \[rs]n[.rj]
+The number of lines to be right-justified as set by the
+.B rj
+request.
+.
+.TP
+.B \[rs]n[.slant]
+The slant of the current font as set with
+.BR \[rs]S .
+.
+.TP
+.B \[rs]n[.sr]
+The last requested point size in points as a decimal fraction.
+.
+This is a string-valued register.
+.
+.TP
+.B \[rs]n[.ss]
+.TQ
+.B \[rs]n[.sss]
+These give the values of the parameters set by the first and second
+arguments of the
+.B ss
+request.
+.
+.TP
+.B \[rs]n[.sty]
+The current font style.
+.
+This is a string-valued register.
+.
+.TP
+.B \[rs]n[.tabs]
+A string representation of the current tab settings suitable for use
+as an argument to the
+.B ta
+request.
+.
+.TP
+.B \[rs]n[.trunc]
+The amount of vertical space truncated by the most recently sprung
+vertical position trap, or, if the trap was sprung by an
+.B ne
+request, minus the amount of vertical motion produced by the
+.B ne
+request.
+.
+In other words, at the point a trap is sprung, it represents the
+difference of what the vertical position would have been but for the
+trap, and what the vertical position actually is.
+.
+Useful in conjunction with the
+.B \[rs]n[.ne]
+register.
+.
+.TP
+.B \[rs]n[.U]
+Set to\~1 if in safer mode and to\~0 if in unsafe mode (as given with
+the
+.B \-U
+command-line option).
+.
+.TP
+.B \[rs]n[.vpt]
+1\~if vertical position traps are enabled, 0\~otherwise.
+.
+.TP
+.B \[rs]n[.warn]
+The sum of the numbers associated with each of the currently enabled
+warnings.
+.
+The number associated with each warning is listed in
+.BR @g@troff (@MAN1EXT@).
+.
+.TP
+.B \[rs]n[.x]
+The major version number.
+.
+For example, if the version number is 1.03, then
+.B \[rs]n[.x]
+contains\~1.
+.
+.TP
+.B \[rs]n[.y]
+The minor version number.
+.
+For example, if the version number is 1.03, then
+.B \[rs]n[.y]
+contains\~03.
+.
+.TP
+.B \[rs]n[.Y]
+The revision number of groff.
+.
+.TP
+.B \[rs]n[.zoom]
+The zoom value of the current font, in multiples of 1/1000th.
+Zero if no magnification.
+.
+.TP
+.B \[rs]n[llx]
+.TQ
+.B \[rs]n[lly]
+.TQ
+.B \[rs]n[urx]
+.TQ
+.B \[rs]n[ury]
+These four read/\:write registers are set by the
+.B psbb
+request and contain the bounding box values (in PostScript units) of a
+given PostScript image.
+.
+.P
+The following read/\:write registers are set by the
+.B \[rs]w
+escape sequence:
+.
+.TP
+.B \[rs]n[rst]
+.TQ
+.B \[rs]n[rsb]
+Like the
+.B st
+and
+.B sb
+registers, but take account of the heights and depths of glyphs.
+.
+.TP
+.B \[rs]n[ssc]
+The amount of horizontal space (possibly negative) that should be
+added to the last glyph before a subscript.
+.
+.TP
+.B \[rs]n[skw]
+How far to right of the center of the last glyph in the
+.B \[rs]w
+argument, the center of an accent from a roman font should be placed
+over that glyph.
+.
+.P
+Other available read/write number registers are:
+.
+.TP
+.B \[rs]n[c.]
+The current input line number.
+.B \[rs]n[.c]
+is a read-only alias to this register.
+.
+.TP
+.B \[rs]n[hours]
+The number of hours past midnight.
+.
+Initialized at start-up.
+.
+.TP
+.B \[rs]n[hp]
+The current horizontal position at input line.
+.
+.TP
+.B \[rs]n[lsn]
+.TQ
+.B \[rs]n[lss]
+If there are leading spaces in an input line, these registers
+hold the number of leading spaces and the corresponding
+horizontal space, respectively.
+.
+.TP
+.B \[rs]n[minutes]
+The number of minutes after the hour.
+.
+Initialized at start-up.
+.
+.TP
+.B \[rs]n[seconds]
+The number of seconds after the minute.
+.
+Initialized at start-up.
+.
+.TP
+.B \[rs]n[systat]
+The return value of the system() function executed by the last
+.B sy
+request.
+.
+.TP
+.B \[rs]n[slimit]
+If greater than\~0, the maximum number of objects on the input stack.
+.
+If less than or equal to\~0, there is no limit on the number of
+objects on the input stack.
+.
+With no limit, recursion can continue until virtual memory is
+exhausted.
+.
+.TP
+.B \[rs]n[year]
+The current year.
+.
+Note that the traditional
+.B troff
+number register
+.B \[rs]n[yr]
+is the current year minus 1900.
+.
+.
+.\" ====================================================================
+.SS Miscellaneous
+.\" ====================================================================
+.
+.B @g@troff
+predefines a single (read/write) string-based register,
+.BR \[rs]*[.T] ,
+which contains the argument given to the
+.B \-T
+command-line option, namely the current output device (for example,
+.I latin1
+or
+.IR ascii ).
+Note that this is not the same as the (read-only) number register
+.B \[rs]n[.T]
+which is defined to be\~1 if
+.B troff
+is called with the
+.B \-T
+command-line option, and zero otherwise.
+.
+This behaviour is different from Unix troff.
+.
+.P
+Fonts not listed in the
+DESC
+file are automatically mounted on the next available font position
+when they are referenced.
+.
+If a font is to be mounted explicitly with the
+.B fp
+request on an unused font position, it should be mounted on the first
+unused font position, which can be found in the
+.B \[rs]n[.fp]
+register; although
+.B troff
+does not enforce this strictly, it does not allow a font to be mounted
+at a position whose number is much greater than that of any currently
+used position.
+.
+.P
+Interpolating a string does not hide existing macro arguments.
+.
+Thus in a macro, a more efficient way of doing
+.
+.IP
+.BI . xx\  \[rs]\[rs]$@
+.P
+is
+.
+.IP
+.BI \[rs]\[rs]*[ xx ]\[rs]\[rs]
+.
+.P
+If the font description file contains pairwise kerning information,
+glyphs from that font are kerned.
+.
+Kerning between two glyphs can be inhibited by placing a
+.B \[rs]&
+between them.
+.
+.P
+In a string comparison in a condition, characters that appear at
+different input levels to the first delimiter character are not
+recognized as the second or third delimiters.
+.
+This applies also to the
+.B tl
+request.
+.
+In a
+.B \[rs]w
+escape sequence, a character that appears at a different input level
+to the starting delimiter character is not recognized as the
+closing delimiter character.
+.
+The same is true for
+.BR \[rs]A ,
+.BR \[rs]b ,
+.BR \[rs]B ,
+.BR \[rs]C ,
+.BR \[rs]l ,
+.BR \[rs]L ,
+.BR \[rs]o ,
+.BR \[rs]X ,
+and
+.BR \[rs]Z .
+.
+When decoding a macro or string argument that is delimited by double
+quotes, a character that appears at a different input level to the
+starting delimiter character is not recognized as the closing delimiter
+character.
+.
+The implementation of
+.B \[rs]$@
+ensures that the double quotes surrounding an argument appear at the
+same input level, which is different to the input level of the
+argument itself.
+.
+In a long escape name
+.B ]
+is not recognized as a closing delimiter except when it occurs at
+the same input level as the opening\~\c
+.BR [ .
+.
+In compatibility mode, no attention is paid to the input-level.
+.
+.P
+There are some new types of condition:
+.
+.TP
+.BI .if\ r xxx
+True if there is a number register named
+.IR xxx .
+.
+.TP
+.BI .if\ d xxx
+True if there is a string, macro, diversion, or request named
+.IR xxx .
+.
+.TP
+.BI .if\ m xxx
+True if there is a color named
+.IR xxx .
+.
+.TP
+.BI .if\ c ch
+True if there is a character (or glyph)
+.I ch
+available;
+.I ch
+is either an ASCII character or a glyph (special character)
+.BI \[rs]N' xxx '\f[R],
+.BI \[rs]( xx
+or
+.BI \[rs][ xxx ]\f[R];
+the condition is also true if
+.I ch
+has been defined by the
+.B char
+request.
+.
+.TP
+.BI .if\ F f
+True if font\~\c
+.I f
+exists.
+.
+.BR f \~\c
+is handled as if it was opened with the
+.B ft
+request (this is, font translation and styles are applied), without
+actually mounting it.
+.
+.TP
+.BI .if\ S s
+True if style\~\c
+.I s
+has been registered.
+.
+Font translation is applied.
+.
+.P
+The
+.B tr
+request can now map characters onto
+.BR \[rs]\[ti] .
+.
+.P
+The space width emitted by the
+.B \[rs]|
+and
+.B \[rs]^
+escape sequences can be controlled on a per-font basis.
+If there is a glyph named
+.B \[rs]|
+or
+.BR \[rs]^ ,
+respectively (note the leading backslash), defined in the current font
+file, use this glyph's width instead of the default value.
+.
+.P
+It is now possible to have whitespace between the first and second dot
+(or the name of the ending macro) to end a macro definition.
+.
+Example:
+.
+.IP
+.ne 6v+\n(.Vu
+.EX
+\&.if t \[rs]{\[rs]
+\&.  de bar
+\&.    nop Hello, I'm \[oq]bar\[cq].
+\&.  .
+\&.\[rs]}
+.EE
+.
+.
+.\" ====================================================================
+.SH "INTERMEDIATE OUTPUT FORMAT"
+.\" ====================================================================
+.
+This section describes the format output by GNU troff.
+.
+The output format used by GNU troff is very similar to that used
+by Unix device-independent troff.
+.
+Only the differences are documented here.
+.
+.
+.\" ====================================================================
+.SS "Units"
+.\" ====================================================================
+.
+The argument to the
+.BR s \~\c
+command is in scaled points (units of
+.RI points/ n ,
+where
+.I n
+is the argument to the
+.B sizescale
+command  in the DESC file).
+.
+The argument to the
+.B x\ Height
+command is also in scaled points.
+.
+.
+.\" ====================================================================
+.SS "Text Commands"
+.\" ====================================================================
+.
+.TP
+.BI N n
+Print glyph with index\~\c
+.I n
+(a non-negative integer) of the current font.
+.
+.P
+If the
+.B tcommand
+line is present in the DESC file, troff uses the following two
+commands.
+.
+.TP
+.BI t xxx
+.I xxx
+is any sequence of characters terminated by a space or a newline (to
+be more precise, it is a sequence of glyphs which are accessed with
+the corresponding characters); the first character should be printed at
+the current position, the current horizontal position should be
+increased by the width of the first character, and so on for each
+character.
+.
+The width of the glyph is that given in the font file,
+appropriately scaled for the current point size, and rounded so that
+it is a multiple of the horizontal resolution.
+.
+Special characters cannot be printed using this command.
+.
+.TP
+.BI u n\ xxx
+This is same as the
+.BR t \~\c
+command except that after printing each character, the current
+horizontal position is increased by the sum of the width of that
+character and\~\c
+.IR n .
+.
+.P
+Note that single characters can have the eighth bit set, as can the
+names of fonts and special characters.
+.
+.P
+The names of glyphs and fonts can be of arbitrary length; drivers
+should not assume that they are only two characters long.
+.
+.P
+When a glyph is to be printed, that glyph is always
+in the current font.
+.
+Unlike device-independent troff, it is not necessary for drivers to
+search special fonts to find a glyph.
+.
+.P
+For color support, some new commands have been added:
+.
+.TP
+\f[B]mc \f[I]cyan magenta yellow\f[R]
+.TQ
+\f[B]md\f[R]
+.TQ
+\f[B]mg \f[I]gray\f[R]
+.TQ
+\f[B]mk \f[I]cyan magenta yellow black\f[R]
+.TQ
+\f[B]mr \f[I]red green blue\f[R]
+Set the color components of the current drawing color, using various
+color schemes.
+.
+.B md
+resets the drawing color to the default value.
+.
+The arguments are integers in the range 0 to 65536.
+.
+.P
+The
+.BR x \~\c
+device control command has been extended.
+.
+.TP
+\f[B]x u \f[I]n\f[R]
+If
+.I n
+is\~1, start underlining of spaces.
+.
+If
+.I n
+is\~0, stop underlining of spaces.
+.
+This is needed for the
+.B cu
+request in nroff mode and is ignored otherwise.
+.
+.
+.\" ====================================================================
+.SS "Drawing Commands"
+.\" ====================================================================
+.
+The
+.B D
+drawing command has been extended.
+.
+These extensions are not used by GNU pic if the
+.B \-n
+option is given.
+.
+.TP
+\f[B]Df \f[I]n\/\f[R]\*[ic]\[rs]n
+Set the shade of gray to be used for filling solid objects to
+.IR n ;
+.I n
+must be an integer between 0 and 1000, where 0 corresponds solid white
+and 1000 to solid black, and values in between correspond to
+intermediate shades of gray.
+.
+This applies only to solid circles, solid ellipses and solid
+polygons.
+.
+By default, a level of 1000 is used.
+.
+Whatever color a solid object has, it should completely obscure
+everything beneath it.
+.
+A value greater than 1000 or less than\~0 can also be used: this means
+fill with the shade of gray that is currently being used for lines and
+text.
+.
+Normally this is black, but some drivers may provide a way of
+changing this.
+.
+.IP
+The corresponding
+.BI \[rs]D'f \*[ellipsis] '
+command shouldn't be used since its argument is always rounded to an
+integer multiple of the horizontal resolution which can lead to
+surprising results.
+.
+.TP
+\f[B]DC \f[I]\/d\f[R]\*[ic]\[rs]n
+Draw a solid circle with a diameter of
+.I d
+with the leftmost point at the current position.
+.
+.TP
+\f[B]DE \f[I]dx dy\/\f[R]\*[ic]\[rs]n
+Draw a solid ellipse with a horizontal diameter of
+.I dx
+and a vertical diameter of
+.I dy
+with the leftmost point at the current position.
+.EQ
+delim $$
+.EN
+.
+.TP
+\f[B]Dp\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ \
+$dx sub n$ $dy sub n$\[rs]n
+Draw a polygon with, for $i = 1 ,..., n+1$, the
+.IR i -th
+vertex at the current position
+.
+$+ sum from j=1 to i-1 ( dx sub j , dy sub j )$.
+.
+At the moment, GNU pic only uses this command to generate triangles
+and rectangles.
+.
+.TP
+\f[B]DP\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ \
+$dx sub n$ $dy sub n$\[rs]n
+.
+Like
+.B Dp
+but draw a solid rather than outlined polygon.
+.
+.TP
+\f[B]Dt \f[I]n\/\f[R]\*[ic]\[rs]n
+Set the current line thickness to
+.IR n \~\c
+machine units.
+.
+Traditionally Unix troff drivers use a line thickness proportional to
+the current point size; drivers should continue to do this if no
+.B Dt
+command has been given, or if a
+.B Dt
+command has been given with a negative value of\~\c
+.IR n .
+A zero value of\~\c
+.I n
+selects the smallest available line thickness.
+.
+.P
+A difficulty arises in how the current position should be changed after
+the execution of these commands.
+.
+This is not of great importance since the code generated by GNU pic
+does not depend on this.
+.
+Given a drawing command of the form
+.IP
+\f[B]\[rs]D'\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ \
+$x sub n$ $y sub n$\f[B]'\f[R]
+.
+.P
+where
+.I c
+is not one of
+.BR c ,
+.BR e ,
+.BR l ,
+.BR a ,
+or\~\c
+.BR \[ti] ,
+Unix troff treats each of the $x sub i$ as a horizontal quantity,
+and each of the $y sub i$ as a vertical quantity and assumes that
+the width of the drawn object is $sum from i=1 to n x sub i$,
+and that the height is $sum from i=1 to n y sub i$.
+.
+(The assumption about the height can be seen by examining the
+.B st
+and
+.B sb
+registers after using such a
+.BR D \~\c
+command in a
+.B \[rs]w
+escape sequence).
+.
+This rule also holds for all the original drawing commands with the
+exception of
+.BR De .
+For the sake of compatibility GNU troff also follows this rule, even
+though it produces an ugly result in the case of the
+.B Dt
+and
+.BR Df ,
+and, to a lesser extent,
+.B DE
+commands.
+.
+Thus after executing a
+.BR D \~\c
+command of the form
+.IP
+\f[B]D\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ \
+$x sub n$ $y sub n$\[rs]n
+.
+.P
+the current position should be increased by
+.
+$( sum from i=1 to n x sub i , sum from i=1 to n y sub i )$.
+.
+.P
+Another set of extensions is
+.
+.TP
+\f[B]DFc \f[I]cyan magenta yellow\f[R]\*[ic]\[rs]n
+.TQ
+\f[B]DFd\f[R]\*[ic]\[rs]n
+.TQ
+\f[B]DFg \f[I]gray\/\f[R]\*[ic]\[rs]n
+.TQ
+\f[B]DFk \f[I]cyan magenta yellow black\f[R]\*[ic]\[rs]n
+.TQ
+\f[B]DFr \f[I]red green blue\f[R]\*[ic]\[rs]n
+Set the color components of the filling color similar to the
+.BR m \~\c
+commands above.
+.
+.P
+The current position isn't changed by those colour commands
+(contrary to
+.BR Df ).
+.
+.
+.\" ====================================================================
+.SS "Device Control Commands"
+.\" ====================================================================
+.
+There is a continuation convention which permits the argument to the
+.B x\ X
+command to contain newlines: when outputting the argument to the
+.B x\ X
+command, GNU troff follows each newline in the argument with a
+.B +
+character (as usual, it terminates the entire argument with a
+newline); thus if the line after the line containing the
+.B x\ X
+command starts with
+.BR + ,
+then the newline ending the line containing the
+.B x\ X
+command should be treated as part of the argument to the
+.B x\ X
+command, the
+.B +
+should be ignored, and the part of the line following the
+.B +
+should be treated like the part of the line following the
+.B x\ X
+command.
+.
+.P
+The first three output commands are guaranteed to be:
+.IP
+.BI x\ T\  device
+.br
+.BI x\ res\  n\ h\ v
+.br
+.B x init
+.
+.
+.\" ====================================================================
+.SH INCOMPATIBILITIES
+.\" ====================================================================
+.
+In spite of the many extensions, groff has retained compatibility to
+classical troff to a large degree.
+.
+For the cases where the extensions lead to collisions, a special
+compatibility mode with the restricted, old functionality was created
+for groff.
+.
+.
+.\" ====================================================================
+.SS "Groff Language"
+.\" ====================================================================
+.
+.I groff
+provides a
+.B compatibility mode
+that allows the processing of roff code written for classical
+.B troff
+or for other implementations of roff in a consistent way.
+.
+.P
+Compatibility mode can be turned on with the
+.B \-C
+command-line option, and turned on or off with the
+.B .cp
+request.
+.
+The number register
+.B \[rs]n(.C
+is\~1 if compatibility mode is on, 0\~otherwise.
+.
+.P
+This became necessary because the GNU concept for long names causes
+some incompatibilities.
+.I Classical troff
+interprets
+.IP
+.B .dsabcd
+.
+.P
+as defining a string
+.B ab
+with contents
+.BR cd .
+In
+.I groff
+mode, this is considered as a call of a macro named
+.BR dsabcd .
+.
+.P
+Also
+.I classical troff
+interprets
+.B \[rs]*[
+or
+.B \[rs]n[
+as references to a string or number register called\~\c
+.B [
+while
+.I groff
+takes this as the start of a long name.
+.
+.P
+In
+.IR "compatibility mode" ,
+groff interprets these things in the traditional way; so long
+names are not recognized.
+.
+.P
+On the other hand, groff in
+.I GNU native mode
+does not allow to use the single-character escapes
+.B \[rs]\[rs]
+(backslash),
+.B \[rs]|
+(vertical bar),
+.B \[rs]\[ha]
+(caret),
+.B \[rs]&
+(ampersand),
+.B \[rs]{
+(opening brace),
+.B \[rs]}
+(closing brace),
+.RB \[oq] \[rs]\  \[cq]
+(space),
+.B \[rs]\[aq]
+(single quote),
+.B \[rs]\[ga]
+(backquote),
+.B \[rs]\-
+(minus),
+.B \[rs]_
+(underline),
+.B \[rs]!\&
+(bang),
+.B \[rs]%
+(percent),
+and
+.B \[rs]c
+(character\~c) in names of strings, macros, diversions, number
+registers, fonts or environments, whereas
+.I classical troff
+does.
+.
+.P
+The
+.B \[rs]A
+escape sequence can be helpful in avoiding these escape sequences in
+names.
+.
+.P
+Fractional point sizes cause one noteworthy incompatibility.
+.
+In
+.I classical
+.IR troff ,
+the
+.B ps
+request ignores scale indicators and so
+.RS
+.P
+.B .ps\~10u
+.RE
+.
+.P
+sets the point size to 10\~points, whereas in groff native mode the
+point size is set to 10\~scaled points.
+.
+.P
+In
+.IR groff ,
+there is a fundamental difference between unformatted input
+characters, and formatted output characters (glyphs).
+.
+Everything that affects how a glyph is output is
+stored with the glyph; once a glyph has been
+constructed it is unaffected by any subsequent requests that are
+executed, including the
+.BR bd ,
+.BR cs ,
+.BR tkf ,
+.BR tr ,
+or
+.B fp
+requests.
+.
+.P
+Normally glyphs are constructed from input characters at
+the moment immediately before the glyph is added to the current
+output line.
+.
+Macros, diversions and strings are all, in fact, the same type of
+object; they contain lists of input characters and glyphs
+in any combination.
+.
+.P
+Special characters can be both; before being added to the output, they
+act as input entities, afterwards they denote glyphs.
+.
+.P
+A glyph does not behave like an input character for the
+purposes of macro processing; it does not inherit any of the special
+properties that the input character from which it was constructed
+might have had.
+.
+The following example makes things clearer.
+.
+.P
+.RS
+.EX
+\&.di x
+\[rs]\[rs]\[rs]\[rs]
+\&.br
+\&.di
+\&.x
+.EE
+.RE
+.
+.P
+With
+.I GNU troff
+this is printed as
+.BR \[rs]\[rs] .
+So each pair of input backslashes \[oq]\[rs]\[rs]\[cq] is turned
+into a single output backslash glyph \[oq]\[rs]\[cq] and the
+resulting output backslashes are not interpreted as escape characters
+when they are reread.
+.
+.P
+.I Classical troff
+would interpret them as escape characters when they were reread and
+would end up printing a single backslash \[oq]\[rs]\[cq].
+.
+.P
+In GNU, the correct way to get a printable version of the backslash
+character \[cq]\[rs]\[cq]
+is the
+.B \[rs](rs
+escape sequence, but classical troff does not provide a clean feature
+for getting a non-syntactical backslash.
+.
+A close method is the printable version of the current escape
+character using the
+.B \[rs]e
+escape sequence; this works if the current escape character is not
+redefined.
+.
+It works in both GNU mode and compatibility mode, while dirty tricks
+like specifying a sequence of multiple backslashes do not work
+reliably; for the different handling in diversions, macro definitions,
+or text mode quickly leads to a confusion about the necessary number of
+backslashes.
+.
+.P
+To store an escape sequence in a diversion that is interpreted
+when the diversion is reread, either the traditional
+.B \[rs]!\&
+transparent output facility or the
+new
+.B \[rs]?\&
+escape sequence can be used.
+.
+.
+.\" ====================================================================
+.SS "Intermediate Output"
+.\" ====================================================================
+.
+The groff intermediate output format is in a state of evolution.
+.
+So far it has some incompatibilities, but it is intended to establish
+a full compatibility to the classical troff output format.
+.
+Actually the following incompatibilities exist:
+.
+.IP \[bu] 2m
+The positioning after the drawing of the polygons conflicts with the
+classical definition.
+.
+.IP \[bu] 2m
+The intermediate output cannot be rescaled to other devices as
+classical \[oq]device-independent\[cq] troff did.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+This document was written by
+.MT jjc@\:jclark.com
+James Clark
+.ME
+and modified by
+.MT wl@\:gnu.org
+Werner Lemberg
+.ME
+and
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg,
+is the primary
+.I groff
+manual.
+.
+You can browse it interactively with \[lq]info groff\[rq].
+.
+.
+.TP
+.BR groff (@MAN1EXT@)
+A list of all documentation around
+.IR groff .
+.
+.TP
+.BR groff (@MAN7EXT@)
+A description of the
+.I groff
+language, including a short, but complete reference of all predefined
+requests, registers, and escapes of plain
+.IR groff .
+From the command line, this is called using
+.
+.RS
+.IP
+.EX
+man 7 groff
+.EE
+.RE
+.
+.TP
+.BR roff (@MAN7EXT@)
+A survey of
+.I roff
+systems, including pointers to further historical documentation.
+.
+.TP
+.RI [ CSTR\~#54\/ ]
+The
+.I Nroff/\:Troff User's Manual
+by
+.I J.\& F.\& Ossanna
+of 1976 in the revision of
+.I Brian Kernighan
+of 1992, being the
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz
+classical troff documentation
+.UE .
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_diff_C]
+.
+.
+.\" ====================================================================
+.\" Emacs variables
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/man/groff_diff.man b/man/groff_diff.man
deleted file mode 100644 (file)
index eacccd3..0000000
+++ /dev/null
@@ -1,3973 +0,0 @@
-'\" e
-.\" The above line should force the use of eqn as a preprocessor
-.TH GROFF_DIFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_diff \- differences between GNU troff and classical troff
-.
-.\" groff_diff.man:
-.\" Source file position: <groff_source>/man/groff_diff.man
-.\" Installed position: <prefix>/share/man/man7/groff_diff.7
-.
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-.
-.P
-This file is part of groff, the GNU roff type-setting system.
-.
-It is the source of the man-page groff_diff(7).
-.P
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Front-Cover Texts, and with no Back-Cover Texts.
-.P
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package, it is also
-available in the internet at
-.UR http://\:www.gnu.org/\:copyleft/\:fdl.html
-GNU FDL license
-.UE .
-..
-.
-.de au
-This document was written by
-.MT jjc@jclark.com
-James Clark
-.ME ,
-was modified by
-.MT wl@gnu.org
-Werner Lemberg
-.ME
-and
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME .
-..
-.
-.
-.\" --------------------------------------------------------------------
-.\" Local definitions
-.\" --------------------------------------------------------------------
-.
-.\" define a string tx for the TeX logo
-.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-.el   .ds tx TeX
-.
-.
-.\" from old groff_out.man
-.ie \n(.g \
-.  ds ic \/
-.el \
-.  ds ic \^
-.
-.\" ellipsis
-.ds ellipsis \&.\|.\|.\&
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the language differences between
-.IR groff ,
-the GNU
-.I roff
-text processing system, and the classical
-.I roff
-formatter of the freely available Unix\~7 of the 1970s, documented in
-the
-.I Troff User\[aq]s Manual
-by
-.I Ossanna
-and
-.IR Kernighan .
-.
-This includes the roff language as well as the intermediate output
-format (troff output).
-.
-.
-.P
-The section
-.I SEE ALSO
-gives pointers to both the classical
-.I roff
-and the modern
-.I groff
-documentation.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "GROFF LANGUAGE"
-.\" --------------------------------------------------------------------
-.
-In this section, all additional features of
-.I groff
-compared to the classical Unix\~7
-.I troff
-are described in detail.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Long names"
-.\" --------------------------------------------------------------------
-.
-The names of number registers, fonts, strings/\:macros/\:diversions,
-special characters (glyphs), and colors can be of any length.
-.
-In escape sequences, additionally to the classical
-\[oq]\fB(\fP\fIxx\fP\[cq] construction for a two-character glyph name,
-you can use \[oq]\fB[\fP\,\fIxxx\/\fP\fB]\fP\[cq] for a name of
-arbitrary length.
-.
-.TP
-.BI \[rs][ xxx ]
-Print the special character (glyph) called
-.IR xxx .
-.
-.TP
-.BI \[rs][ "comp1 comp2 \*[ellipsis]" ]
-Print composite glyph consisting of multiple components.
-.
-Example: \[oq]\[rs][A\~ho]\[cq] is capital letter A with ogonek which
-finally maps to glyph name \[oq]u0041_0328\[cq].
-.
-See the
-.I groff info file
-for details how a glyph name for a composite glyph is constructed, and
-.BR groff_char (@MAN7EXT@)
-for a list of glyph name components used in composite glyph names.
-.
-.TP
-.BI \[rs]f[ xxx ]
-Set font
-.IR xxx .
-.
-Additionally,
-.B \[rs]f[]
-is a new syntax form equal to
-.BR \[rs]fP ,
-i.e., to return to the previous font.
-.
-.TP
-.BI \[rs]*[ "xxx arg1 arg2 \*[ellipsis]" ]
-Interpolate string
-.IR xxx ,
-taking
-.IR arg1 ,
-.IR arg2 ,
-.IR \*[ellipsis] ,
-as arguments.
-.
-.TP
-.BI \[rs]n[ xxx ]
-Interpolate number register
-.IR xxx .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Fractional point sizes"
-.\" --------------------------------------------------------------------
-.
-A
-.I scaled point
-is equal to
-.B 1/sizescale
-points, where
-.B sizescale
-is specified in the
-.B DESC
-file (1 by default).
-.
-There is a new scale indicator\~\c
-.B z
-that has the effect of multiplying by sizescale.
-.
-Requests and escape sequences in troff interpret arguments that
-represent a point size as being in units of scaled points, but they
-evaluate each such argument using a default scale indicator of\~\c
-.BR z .
-Arguments treated in this way are the argument to the
-.B ps
-request, the third argument to the
-.B cs
-request, the second and fourth arguments to the
-.B tkf
-request, the argument to the
-.B \[rs]H
-escape sequence, and those variants of the
-.B \[rs]s
-escape sequence that take a numeric expression as their argument.
-.
-.
-.P
-For example, suppose sizescale is 1000; then a scaled point is
-equivalent to a millipoint; the call
-.B .ps\ 10.25
-is equivalent to
-.B .ps\ 10.25z
-and so sets the point size to 10250 scaled points, which is equal to
-10.25 points.
-.
-.
-.P
-The number register
-.B \[rs]n[.s]
-returns the point size in points as decimal fraction.
-.
-There is also a new number register
-.B \[rs]n[.ps]
-that returns the point size in scaled points.
-.
-.
-.P
-It would make no sense to use the
-.BR z \~\c
-scale indicator in a numeric expression whose default scale indicator
-was neither
-.B u
-nor\~\c
-.BR z ,
-and so
-.B troff
-disallows this.
-.
-Similarly it would make no sense to use a scaling indicator other than
-.B z
-or\~\c
-.B u
-in a numeric expression whose default scale indicator was\~\c
-.BR z ,
-and so
-.B troff
-disallows this as well.
-.
-.P
-There is also new scale indicator\~\c
-.B s
-which multiplies by the number of units in a scaled point.
-.
-So, for example,
-.B \[rs]n[.ps]s
-is equal to
-.BR 1m .
-Be sure not to confuse the
-.B s
-and
-.BR z \~\c
-scale indicators.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Numeric expressions"
-.\" --------------------------------------------------------------------
-.
-Spaces are permitted in a number expression within parentheses.
-.
-.
-.P
-.B M
-indicates a scale of 100ths of an em.
-.B f
-indicates a scale of 65536 units, providing fractions for color
-definitions with the
-.B defcolor
-request.
-.
-For example, 0.5f = 32768u.
-.
-.TP
-.IB e1 >? e2
-The maximum of
-.I e1
-and
-.IR e2 .
-.
-.TP
-.IB e1 <? e2
-The minimum of
-.I e1
-and
-.IR e2 .
-.
-.TP
-.BI ( c ; e )
-Evaluate
-.I e
-using
-.I c
-as the default scaling indicator.
-.
-If
-.I c
-is missing, ignore scaling indicators in the evaluation of\~\c
-.IR e .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "New escape sequences"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI \[rs]A' anything '
-This expands to
-.B 1
-or\~\c
-.BR 0 ,
-depending on whether
-.I anything
-is or is not acceptable as the name of a string, macro, diversion, number
-register, environment, font, or color.
-.
-It returns\~\c
-.B 0
-if
-.I anything
-is empty.
-.
-This is useful if you want to look up user input in some sort of
-associative table.
-.
-.TP
-.BI \[rs]B' anything '
-This expands to
-.B 1
-or\~\c
-.BR 0 ,
-depending on whether
-.I anything
-is or is not a valid numeric expression.
-.
-It returns\~\c
-.B 0
-if
-.I anything
-is empty.
-.
-.TP
-.BI \[rs]C' xxx '
-Typeset glyph named
-.IR xxx .
-Normally it is more convenient to use
-.BI \[rs][ xxx ]\f[R].
-But
-.B \[rs]C
-has the advantage that it is compatible with recent versions of
-.SM UNIX
-and is available in compatibility mode.
-.
-.TP
-.B \[rs]E
-This is equivalent to an escape character, but it is not interpreted in
-copy mode.
-.
-For example, strings to start and end superscripting could be defined
-like this
-.
-.RS
-.IP
-.EX
-\&.ds { \[rs]v'\-.3m'\[rs]s'\[rs]En[.s]*6u/10u'
-\&.ds } \[rs]s0\[rs]v'.3m'
-.EE
-.RE
-.
-.IP
-The use of
-.B \[rs]E
-ensures that these definitions work even if
-.B \[rs]*{
-gets interpreted in copy mode (for example, by being used in a macro
-argument).
-.RE
-.
-.TP
-.BI \[rs]F f
-.TQ
-.BI \[rs]F( fm
-.TQ
-.BI \[rs]F[ fam ]
-Change font family.
-.
-This is the same as the
-.B fam
-request.
-.
-.B \[rs]F[]
-switches back to the previous font family (note that
-.B \[rs]FP
-won\[aq]t work; it selects font family \[oq]P\[cq] instead).
-.
-.TP
-.BI \[rs]m x
-.TQ
-.BI \[rs]m( xx
-.TQ
-.BI \[rs]m[ xxx ]
-Set drawing color.
-.B \[rs]m[]
-switches back to the previous color.
-.
-.TP
-.BI \[rs]M x
-.TQ
-.BI \[rs]M( xx
-.TQ
-.BI \[rs]M[ xxx ]
-Set background color for filled objects drawn with the
-.BI \[rs]D' \*[ellipsis] '
-commands.
-.B \[rs]M[]
-switches back to the previous color.
-.
-.TP
-.BI \[rs]N' n '
-Typeset the glyph with index\~\c
-.I n
-in the current font.
-.IR n \~\c
-can be any integer.
-.
-Most devices only have glyphs with indices between 0 and 255.
-.
-If the current font does not contain a glyph with that code,
-special fonts are
-.I not
-searched.
-.
-The
-.B \[rs]N
-escape sequence can be conveniently used in conjunction with the
-.B char
-request, for example
-.
-.RS
-.IP
-.EX
-\&.char \[rs][phone] \[rs]f(ZD\[rs]N'37'
-.EE
-.RE
-.
-.IP
-The index of each glyph is given in the fourth column in the font
-description file after the
-.B charset
-command.
-.
-It is possible to include unnamed glyphs in the font description
-file by using a name of
-.BR \-\-\- ;
-the
-.B \[rs]N
-escape sequence is the only way to use these.
-.
-.TP
-.BI \[rs]O n
-.TQ
-.BI \[rs]O[ n ]
-Suppress troff output.
-.
-The escapes
-.BR \[rs]O2 ,
-.BR \[rs]O3 ,
-.BR \[rs]O4 ,
-and
-.B \[rs]O5
-are intended for internal use by
-.BR \%grohtml .
-.
-.RS
-.TP
-.B \[rs]O0
-Disable any ditroff glyphs from being emitted to the device driver,
-provided that the escape occurs at the outer level (see
-.B \[rs]O3
-and
-.BR \[rs]O4 ).
-.
-.TP
-.B \[rs]O1
-Enable output of glyphs, provided that the escape occurs at the outer
-level.
-.IP
-.B \[rs]O0
-and
-.B \[rs]O1
-also reset the registers
-.BR \[rs]n[opminx] ,
-.BR \[rs]n[opminy] ,
-.BR \[rs]n[opmaxx] ,
-and
-.B \[rs]n[opmaxy]
-to\~\-1.
-.
-These four registers mark the top left and bottom right hand corners
-of a box which encompasses all written glyphs.
-.
-.TP
-.B \[rs]O2
-Provided that the escape occurs at the outer level, enable output of
-glyphs and also write out to stderr the page number and four registers
-encompassing the glyphs previously written since the last call to
-.BR \[rs]O .
-.
-.TP
-.B \[rs]O3
-Begin a nesting level.
-.
-At start-up,
-.B troff
-is at outer level.
-.
-This is really an internal mechanism for
-.B \%grohtml
-while producing images.
-.
-They are generated by running the troff source through
-.B troff
-to the postscript device and
-.B ghostscript
-to produce images in PNG format.
-.
-The
-.B \[rs]O3
-escape starts a new page if the device is not html (to reduce the
-possibility of images crossing a page boundary).
-.
-.TP
-.B \[rs]O4
-End a nesting level.
-.
-.TP
-.BI \[rs]O5[ Pfilename ]
-This escape is
-.B \%grohtml
-specific.
-.
-Provided that this escape occurs at the outer nesting level, write
-.I filename
-to stderr.
-.
-The position of the image,
-.IR P ,
-must be specified and must be one of
-.BR l ,
-.BR r ,
-.BR c ,
-or
-.B i
-(left, right, centered, inline).
-.
-.I filename
-is associated with the production of the next inline image.
-.RE
-.
-.TP
-.BI \[rs]R' name\ \[+-]n '
-This has the same effect as
-.
-.RS
-.IP
-.BI .nr\  name\ \[+-]n
-.RE
-.
-.TP
-.BI \[rs]s( nn
-.TQ
-.BI \[rs]s\[+-]( nn
-Set the point size to
-.I nn
-points;
-.I nn
-must be exactly two digits.
-.
-.TP
-.BI \[rs]s[\[+-] n ]
-.TQ
-.BI \[rs]s\[+-][ n ]
-.TQ
-.BI \[rs]s'\[+-] n '
-.TQ
-.BI \[rs]s\[+-]' n '
-Set the point size to
-.I n
-scaled points;
-.I n
-is a numeric expression with a default scale indicator of\~\c
-.BR z .
-.
-.TP
-.BI \[rs]V x
-.TQ
-.BI \[rs]V( xx
-.TQ
-.BI \[rs]V[ xxx ]
-Interpolate the contents of the environment variable
-.IR xxx ,
-as returned by
-.BR getenv (3).
-.B \[rs]V
-is interpreted in copy mode.
-.
-.TP
-.BI \[rs]Y x
-.TQ
-.BI \[rs]Y( xx
-.TQ
-.BI \[rs]Y[ xxx ]
-This is approximately equivalent to
-.BI \[rs]X'\[rs]*[ xxx ]'\f[R].
-However the contents of the string or macro
-.I xxx
-are not interpreted; also it is permitted for
-.I xxx
-to have been defined as a macro and thus contain newlines (it is not
-permitted for the argument to
-.B \[rs]X
-to contain newlines).
-.
-The inclusion of newlines requires an extension to the UNIX troff
-output format, and confuses drivers that do not know about this
-extension.
-.
-.TP
-.BI \[rs]Z' anything '
-Print anything and then restore the horizontal and vertical position;
-.I anything
-may not contain tabs or leaders.
-.
-.TP
-.B \[rs]$0
-The name by which the current macro was invoked.
-.
-The
-.B als
-request can make a macro have more than one name.
-.
-.TP
-.B \[rs]$*
-In a macro or string, the concatenation of all the arguments separated
-by spaces.
-.
-.TP
-.B \[rs]$@
-In a macro or string, the concatenation of all the arguments with each
-surrounded by double quotes, and separated by spaces.
-.
-.TP
-.B \[rs]$^
-In a macro, the representation of all parameters as if they were an
-argument to the
-.B ds
-request.
-.
-.TP
-.BI \[rs]$( nn
-.TQ
-.BI \[rs]$[ nnn ]
-In a macro or string, this gives the
-.IR nn -th
-or
-.IR nnn -th
-argument.
-.
-Macros and strings can have an unlimited number of arguments.
-.
-.TP
-.BI \[rs]? anything \[rs]?
-When used in a diversion, this transparently embeds
-.I anything
-in the diversion.
-.I anything
-is read in copy mode.
-.
-When the diversion is reread,
-.I anything
-is interpreted.
-.I anything
-may not contain newlines; use
-.B \[rs]!\&
-if you want to embed newlines in a diversion.
-.
-The escape sequence
-.B \[rs]?\&
-is also recognized in copy mode and turned into a single internal
-code; it is this code that terminates
-.IR anything .
-Thus
-.
-.RS
-.IP
-.EX
-.ne 14v+\n(.Vu
-\&.nr x 1
-\&.nf
-\&.di d
-\&\[rs]?\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\[rs]\c
-\&\[rs]nx\[rs]\[rs]\[rs]\[rs]?\[rs]\[rs]?\[rs]?
-\&.di
-\&.nr x 2
-\&.di e
-\&.d
-\&.di
-\&.nr x 3
-\&.di f
-\&.e
-\&.di
-\&.nr x 4
-\&.f
-.EE
-.RE
-.
-.IP
-prints\~\c
-.BR 4 .
-.
-.TP
-.B \[rs]/
-This increases the width of the preceding glyph so that the
-spacing between that glyph and the following glyph is
-correct if the following glyph is a roman glyph.
-.
-.if t \{\
-.  nop For example, if an italic\~f is immediately followed by a roman
-.  nop right parenthesis, then in many fonts the top right portion of
-.  nop the\~f overlaps the top left of the right parenthesis
-.  nop producing \f[I]f\f[R]), which is ugly.
-.  nop Inserting
-.  B \[rs]/
-.  nop produces
-.  ie \n(.g \f[I]f\/\f[R])
-.  el       \f[I]f\|\f[R])
-.  nop and avoids this problem.
-.\}
-It is a good idea to use this escape sequence whenever an italic
-glyph is immediately followed by a roman glyph without any
-intervening space.
-.
-.TP
-.B \[rs],
-This modifies the spacing of the following glyph so that the
-spacing between that glyph and the preceding glyph is
-correct if the preceding glyph is a roman glyph.
-.
-.if t \{\
-.  nop For example, inserting
-.  B \[rs],
-.  nop between the parenthesis and the\~f changes
-.  nop \f[R](\f[I]f\f[R] to
-.  ie \n(.g \f[R](\,\f[I]f\f[R].
-.  el       \f[R](\^\f[I]f\f[R].
-.\}
-It is a good idea to use this escape sequence whenever a roman
-glyph is immediately followed by an italic glyph without any
-intervening space.
-.
-.TP
-.B \[rs])
-Like
-.B \[rs]&
-except that it behaves like a character declared with the
-.B cflags
-request to be transparent for the purposes of end-of-sentence
-recognition.
-.
-.TP
-.B \[rs]\[ti]
-This produces an unbreakable space that stretches like a normal
-inter-word space when a line is adjusted.
-.
-.TP
-.B \[rs]:
-This causes the insertion of a zero-width break point.
-.
-It is equal to
-.B \[rs]%
-within a word but without insertion of a soft hyphen glyph.
-.
-.TP
-.B \[rs]#
-Everything up to and including the next newline is ignored.
-.
-This is interpreted in copy mode.
-.
-It is like
-.B \[rs]"
-except that
-.B \[rs]"
-does not ignore the terminating newline.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "New requests"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI .aln\  xx\ yy
-Create an alias
-.I xx
-for number register object named
-.IR yy .
-The new name and the old name are exactly equivalent.
-.
-If
-.I yy
-is undefined, a warning of type
-.B reg
-is generated, and the request is ignored.
-.
-.TP
-.BI .als\  xx\ yy
-Create an alias
-.I xx
-for request, string, macro, or diversion object named
-.IR yy .
-.
-The new name and the old name are exactly equivalent (it is
-similar to a hard rather than a soft link).
-.
-If
-.I yy
-is undefined, a warning of type
-.B mac
-is generated, and the request is ignored.
-.
-The
-.BR de ,
-.BR am ,
-.BR di ,
-.BR da ,
-.BR ds ,
-and
-.B as
-requests only create a new object if the name of the macro, diversion
-or string is currently undefined or if it is defined to be a
-request; normally they modify the value of an existing object.
-.
-.TP
-.BI .am1\  xx\ yy
-Similar to
-.BR .am ,
-but compatibility mode is switched off during execution.
-.
-To be more precise, a \[oq]compatibility save\[cq] token is inserted
-at the beginning of the macro addition, and a \[oq]compatibility
-restore\[cq] token at the end.
-.
-As a consequence, the requests
-.BR am ,
-.BR am1 ,
-.BR de ,
-and
-.B de1
-can be intermixed freely since the compatibility save/\:restore tokens
-only affect the macro parts defined by
-.B .am1
-and
-.BR .ds1 .
-.
-.TP
-.BI .ami\  xx\ yy
-Append to macro indirectly.
-.
-See the
-.B dei
-request below for more information.
-.
-.TP
-.BI .ami1\  xx\ yy
-Same as the
-.B ami
-request but compatibility mode is switched off during execution.
-.
-.TP
-.BI .as1\  xx\ yy
-Similar to
-.BR .as ,
-but compatibility mode is switched off during expansion.
-.
-To be more precise, a \[oq]compatibility save\[cq] token is inserted
-at the beginning of the string, and a \[oq]compatibility restore\[cq]
-token at the end.
-.
-As a consequence, the requests
-.BR as ,
-.BR as1 ,
-.BR ds ,
-and
-.B ds1
-can be intermixed freely since the compatibility save/\:restore tokens
-only affect the (sub)strings defined by
-.B as1
-and
-.BR ds1 .
-.
-.TP
-.BI .asciify\  xx
-This request \[oq]unformats\[cq] the diversion
-.I xx
-in such a way that
-.SM ASCII
-and space characters (and some escape sequences) that were formatted
-and diverted into
-.I xx
-are treated like ordinary input characters when
-.I xx
-is reread.
-Useful for diversions in conjunction with the
-.B writem
-request.
-.
-It can be also used for gross hacks; for example, this
-.
-.RS
-.IP
-.EX
-.ne 7v+\n(.Vu
-\&.tr @.
-\&.di x
-\&@nr n 1
-\&.br
-\&.di
-\&.tr @@
-\&.asciify x
-\&.x
-.EE
-.RE
-.
-.IP
-sets register\~\c
-.B n
-to\~1.
-.
-Note that glyph information (font, font size, etc.\&) is not preserved;
-use
-.B .unformat
-instead.
-.
-.TP
-.B .backtrace
-Print a backtrace of the input stack on stderr.
-.
-.TP
-.BI .blm\  xx
-Set the blank line macro to
-.IR xx .
-If there is a blank line macro, it is invoked when a blank line
-is encountered instead of the usual troff behaviour.
-.
-.TP
-.BI .box\  xx
-.TQ
-.BI .boxa\  xx
-These requests are similar to the
-.B di
-and
-.B da
-requests with the exception that a partially filled line does not
-become part of the diversion (i.e., the diversion always starts with a
-new line) but is restored after ending the diversion, discarding the
-partially filled line which possibly comes from the diversion.
-.
-.TP
-.B .break
-Break out of a while loop.
-.
-See also the
-.B while
-and
-.B continue
-requests.
-.
-Be sure not to confuse this with the
-.B br
-request.
-.
-.TP
-.B .brp
-This is the same as
-.BR \[rs]p .
-.
-.TP
-.BI .cflags\  "n c1 c2 \*[ellipsis]"
-Characters
-.IR c1 ,
-.IR c2 ,
-.IR \*[ellipsis] ,
-have properties determined by
-.IR n ,
-which is ORed from the following:
-.
-.RS
-.IP 1
-The character ends sentences (initially characters
-.B .?!\&
-have this property).
-.
-.IP 2
-Lines can be broken before the character (initially no characters have
-this property); a line is not broken at a character with this property
-unless the characters on each side both have non-zero hyphenation
-codes.
-This can be overridden with value 64.
-.
-.IP 4
-Lines can be broken after the character (initially characters
-.B \-\[rs][hy]\[rs][em]
-have this property); a line is not broken at a character with this
-property unless the characters on each side both have non-zero
-hyphenation codes.
-This can be overridden with value 64.
-.
-.IP 8
-The glyph associated with this character overlaps horizontally
-(initially characters
-.B \[rs][ul]\[rs][rn]\[rs][ru]\[rs][radicalex]\[rs][sqrtex]
-have this property).
-.
-.IP 16
-The glyph associated with this character overlaps vertically
-(initially glyph
-.B \[rs][br]
-has this property).
-.
-.IP 32
-An end-of-sentence character followed by any number of characters with
-this property is treated as the end of a sentence if followed by a
-newline or two spaces; in other words the character is transparent for
-the purposes of end-of-sentence recognition; this is the same as having
-a zero space factor in \*[tx] (initially characters
-.B \[dq]')]*\[rs][dg]\[rs][rq]\[rs][cq]
-have this property).
-.
-.IP 64
-Ignore hyphenation code values of the surrounding characters.
-Use this in combination with values 2 and\~4 (initially no characters
-have this property).
-.
-.IP 128
-Prohibit a line break before the character, but allow a line break after the
-character.
-This works only in combination with flags 256 and 512 and has no effect
-otherwise.
-.
-.IP 256
-Prohibit a line break after the character, but allow a line break before
-the character.
-This works only in combination with flags 128 and 512 and has no effect
-otherwise.
-.
-.IP 512
-Allow line break before or after the character.
-This works only in combination with flags 128 and 256 and has no effect
-otherwise.
-.RE
-.
-.IP
-Contrary to flag values 2 and\~4, the flags 128, 256, and 512 work
-pairwise.
-.
-If, for example, the left character has value 512, and the right
-character 128, no line break gets inserted.  If we use value\~6
-instead for the left character, a line break after the character
-can\[aq]t be suppressed since the right neighbour character
-doesn\[aq]t get examined.
-.
-.TP
-.BI .char\  c\ string
-[This request can both define characters and glyphs.]
-.
-.IP
-Define entity\~\c
-.I c
-to be
-.IR string .
-.
-To be more precise, define (or even override) a groff entity which
-can be accessed with name\~\c
-.I c
-on the input side, and which uses
-.I string
-on the output side.
-.
-Every time glyph\~\c
-.I c
-needs to be printed,
-.I string
-is processed in a temporary environment and the result is
-wrapped up into a single object.
-.
-Compatibility mode is turned off and the escape character is
-set to\~\c
-.B \[rs]
-while
-.I string
-is being processed.
-.
-Any emboldening, constant spacing or track kerning is applied to
-this object rather than to individual glyphs in
-.IR string .
-.
-.IP
-A groff object defined by this request can be used just like a
-normal glyph provided by the output device.
-.
-In particular other characters can be translated to it with the
-.B tr
-request; it can be made the leader glyph by the
-.B lc
-request; repeated patterns can be drawn with the glyph using the
-.B \[rs]l
-and
-.B \[rs]L
-escape sequences; words containing\~\c
-.I c
-can be hyphenated correctly, if the
-.B hcode
-request is used to give the object a hyphenation code.
-.
-.IP
-There is a special anti-recursion feature: Use of glyph within the
-glyph\[aq]s definition is handled like normal glyphs not defined with
-.BR char .
-.IP
-A glyph definition can be removed with the
-.B rchar
-request.
-.
-.TP
-.BI .chop\  xx
-Chop the last element off macro, string, or diversion
-.IR xx .
-This is useful for removing the newline from the end of diversions
-that are to be interpolated as strings.
-.
-.TP
-.BI .class\  "name c1 c2 \*[ellipsis]"
-Assign
-.I name
-to a set of characters
-.IR c1 ,
-.IR c2 ,
-.IR \*[ellipsis] ,
-so that they can be referred to from other requests easily (currently
-.B .cflags
-only).
-.
-Character ranges (indicated by an intermediate \[oq]\-\[cq]) and
-nested classes are possible also.
-.
-This is useful to assign properties to a large set of characters.
-.
-.TP
-.BI .close\  stream
-Close the stream named
-.IR stream ;
-.I stream
-will no longer be an acceptable argument to the
-.B write
-request.
-.
-See the
-.B open
-request.
-.
-.TP
-.BI .composite\  glyph1\ glyph2
-Map glyph name
-.I glyph1
-to glyph name
-.I glyph2
-if it is used in
-.BI \[rs][ \*[ellipsis] ]
-with more than one component.
-.
-.TP
-.B .continue
-Finish the current iteration of a while loop.
-.
-See also the
-.B while
-and
-.B break
-requests.
-.
-.TP
-.BI .color\  n
-If
-.I n
-is non-zero or missing, enable colors (this is the default), otherwise
-disable them.
-.
-.TP
-.BI .cp\  n
-If
-.I n
-is non-zero or missing, enable compatibility mode, otherwise disable
-it.
-.
-In compatibility mode, long names are not recognized, and the
-incompatibilities caused by long names do not arise.
-.
-.TP
-.BI .defcolor\  xxx\ scheme\ color_components
-Define color
-.IR xxx .
-.I scheme
-can be one of the following values:
-.B rgb
-(three components),
-.B cmy
-(three components),
-.B cmyk
-(four components), and
-.B gray
-or
-.B grey
-(one component).
-.
-Color components can be given either as a hexadecimal string or as
-positive decimal integers in the range 0\[en]65535.
-.
-A hexadecimal string contains all color components concatenated; it
-must start with either
-.B #
-or
-.BR ## .
-The former specifies hex values in the range 0\[en]255 (which are
-internally multiplied by\~257), the latter in the range 0\[en]65535.
-.
-Examples: #FFC0CB (pink), ##ffff0000ffff (magenta).
-.
-A new scaling indicator\~\c
-.B f
-has been introduced which multiplies its value by\~65536; this makes
-it convenient to specify color components as fractions in the range 0
-to\~1.
-.
-Example:
-.
-.RS
-.IP
-.EX
-\&.defcolor darkgreen rgb 0.1f 0.5f 0.2f
-.EE
-.RE
-.
-.IP
-Note that
-.B f
-is the default scaling indicator for the
-.B defcolor
-request, thus the above statement is equivalent to
-.
-.RS
-.IP
-.EX
-\&.defcolor darkgreen rgb 0.1 0.5 0.2
-.EE
-.RE
-.
-.IP
-The color named
-.B default
-(which is device-specific) can\[aq]t be redefined.
-.
-It is possible that the default color for
-.B \[rs]M
-and
-.B \[rs]m
-is not the same.
-.
-.TP
-.BI .de1\  xx\ yy
-Similar to
-.BR .de ,
-but compatibility mode is switched off during execution.
-.
-On entry, the current compatibility mode is saved and restored at exit.
-.
-.TP
-.BI .dei\  xx\ yy
-Define macro indirectly.
-.
-The following example
-.
-.RS
-.IP
-.ne 2v+\n(.Vu
-.EX
-\&.ds xx aa
-\&.ds yy bb
-\&.dei xx yy
-.EE
-.RE
-.
-.IP
-is equivalent to
-.
-.RS
-.IP
-.EX
-\&.de aa bb
-.EE
-.RE
-.
-.TP
-.BI .dei1\  xx\ yy
-Similar to the
-.B dei
-request but compatibility mode is switched off during execution.
-.
-.TP
-.BI .device\  anything
-This is (almost) the same as the
-.B \[rs]X
-escape.
-.I anything
-is read in copy mode; a leading\~\c
-.B \[dq]
-is stripped.
-.
-.TP
-.BI .devicem\  xx
-This is the same as the
-.B \[rs]Y
-escape (to embed the contents of a macro into the intermediate
-output preceded with \[oq]x\~X\[cq]).
-.
-.TP
-.BI .do\  xxx
-Interpret
-.I .xxx
-with compatibility mode disabled.
-.
-For example,
-.
-.RS
-.
-.IP
-.EX
-\&.do fam T
-.EE
-.
-.P
-would have the same effect as
-.
-.IP
-.EX
-\&.fam T
-.EE
-.
-.P
-except that it would work even if compatibility mode had been enabled.
-.
-Note that the previous compatibility mode is restored before any files
-sourced by
-.I xxx
-are interpreted.
-.
-.RE
-.
-.TP
-.BI .ds1\  xx\ yy
-Similar to
-.BR .ds ,
-but compatibility mode is switched off during expansion.
-.
-To be more precise, a \[oq]compatibility save\[cq] token is inserted
-at the beginning of the string, and a \[oq]compatibility restore\[cq]
-token at the end.
-.
-.TP
-.B .ecs
-Save current escape character.
-.
-.TP
-.B .ecr
-Restore escape character saved with
-.BR ecs .
-Without a previous call to
-.BR ecs ,
-.RB \[oq] \[rs] \[cq]
-will be the new escape character.
-.
-.TP
-.BI .evc\  xx
-Copy the contents of environment
-.I xx
-to the current environment.
-.
-No pushing or popping of environments is done.
-.
-.TP
-.BI .fam\  xx
-Set the current font family to
-.IR xx .
-The current font family is part of the current environment.
-If
-.I xx
-is missing, switch back to previous font family.
-.
-The value at start-up is \[oq]T\[cq].
-.
-See the description of the
-.B sty
-request for more information on font families.
-.
-.TP
-.BI .fchar\  c\ string
-Define fallback character (or glyph)\~\c
-.I c
-to be
-.IR string .
-.
-The syntax of this request is the same as the
-.B char
-request; the only difference is that a glyph defined with
-.B char
-hides the glyph with the same name in the current font, whereas a
-glyph defined with
-.B fchar
-is checked only if the particular glyph isn\[aq]t found in the current
-font.
-.
-This test happens before checking special fonts.
-.
-.TP
-.BI .fcolor\  c
-Set the fill color to\~\c
-.IR c .
-If
-.I c
-is missing,
-switch to the previous fill color.
-.
-.TP
-.BI .fschar\  f\ c\ string
-Define fallback character (or glyph)\~\c
-.I c
-for font\~\c
-.I f
-to be
-.IR string .
-.
-The syntax of this request is the same as the
-.B char
-request (with an additional argument to specify the font); a glyph
-defined with
-.B fschar
-is searched after the list of fonts declared with the
-.B fspecial
-request but before the list of fonts declared with
-.BR .special .
-.
-.TP
-.BI .fspecial\  "f s1 s2 \*[ellipsis]"
-When the current font is\~\c
-.IR f ,
-fonts
-.IR s1 ,
-.IR s2 ,
-.IR \*[ellipsis] ,
-are special, that is, they are searched for glyphs not in
-the current font.
-.
-Any fonts specified in the
-.B special
-request are searched after fonts specified in the
-.B fspecial
-request.
-.
-Without argument, reset the list of global special fonts to be empty.
-.
-.TP
-.BI .ftr\  f\ g
-Translate font\~\c
-.I f
-to\~\c
-.IR g .
-Whenever a font named\~\c
-.I f
-is referred to in an
-.B \[rs]f
-escape sequence, in the
-.B F
-and
-.B S
-conditional operators, or in the
-.BR ft ,
-.BR ul ,
-.BR bd ,
-.BR cs ,
-.BR tkf ,
-.BR special ,
-.BR fspecial ,
-.BR fp ,
-or
-.BR sty
-requests, font\~\c
-.I g
-is used.
-If
-.I g
-is missing, or equal to\~\c
-.I f
-then font\~\c
-.I f
-is not translated.
-.
-.TP
-.BI .fzoom\  f\ zoom
-Set zoom factor
-.I zoom
-for font\~\c
-.IR f .
-.I zoom
-must a non-negative integer multiple of 1/1000th.
-If it is missing or is equal to zero, it means the same as 1000, namely no
-magnification.
-.IR f \~\c
-must be a real font name, not a style.
-.
-.TP
-.BI .gcolor\  c
-Set the glyph color to\~\c
-.IR c .
-If
-.I c
-is missing,
-switch to the previous glyph color.
-.
-.TP
-.BI .hcode\  "c1 code1 c2 code2 \*[ellipsis]"
-Set the hyphenation code of character
-.I c1
-to
-.I code1
-and that of
-.I c2
-to
-.IR code2 ,
-and so on.
-A hyphenation code must be a single input character (not a special
-character) other than a digit or a space.
-.
-Initially each lower-case letter \%a\[en]z has a hyphenation code, which is
-itself, and each upper-case letter \%A\[en]Z has a hyphenation code which is
-the lower-case version of itself.
-.
-See also the
-.B hpf
-request.
-.
-.TP
-.BI .hla\  lang
-Set the current hyphenation language to
-.IR lang .
-Hyphenation exceptions specified with the
-.B hw
-request and hyphenation patterns specified with the
-.B hpf
-request are both associated with the current hyphenation language.
-.
-The
-.B hla
-request is usually invoked by the
-.B troffrc
-file to set up a default language.
-.
-.TP
-.BI .hlm\  n
-Set the maximum number of consecutive hyphenated lines to\~\c
-.IR n .
-If
-.I n
-is negative, there is no maximum.
-.
-The default value is\~\-1.
-.
-This value is associated with the current environment.
-.
-Only lines output from an environment count towards the maximum
-associated with that environment.
-.
-Hyphens resulting from
-.B \[rs]%
-are counted; explicit hyphens are not.
-.
-.TP
-.BI .hpf\  file
-Read hyphenation patterns from
-.IR file ;
-this is searched for in the same way that
-.IB name .tmac
-is searched for when the
-.BI \-m name
-option is specified.
-.
-It should have the same format as (simple) \*[tx] patterns files.
-.
-More specifically, the following scanning rules are implemented.
-.
-.RS
-.IP \[bu]
-A percent sign starts a comment (up to the end of the line) even if
-preceded by a backslash.
-.
-.IP \[bu]
-No support for \[oq]digraphs\[cq] like
-.BR \[rs]$ .
-.
-.IP \[bu]
-.BI ^^ xx
-.RI ( x
-is 0\[en]9 or a\[en]f) and
-.BI ^^ x
-(character code of\~\c
-.I x
-in the range 0\[en]127) are recognized; other use of\~\c
-.B ^
-causes an error.
-.
-.IP \[bu]
-No macro expansion.
-.
-.IP \[bu]
-.B hpf
-checks for the expression
-.BR \[rs]patterns{ \*[ellipsis] }
-(possibly with whitespace before and after the braces).
-.
-Everything between the braces is taken as hyphenation patterns.
-.
-Consequently,
-.BR { \~\c
-and\~\c
-.B }
-are not allowed in patterns.
-.
-.IP \[bu]
-Similarly,
-.BR \[rs]hyphenation{ \*[ellipsis] }
-gives a list of hyphenation exceptions.
-.
-.IP \[bu]
-.B \[rs]endinput
-is recognized also.
-.
-.IP \[bu]
-For backwards compatibility, if
-.B \[rs]patterns
-is missing, the whole file is treated as a list of hyphenation patterns
-(only recognizing the
-.BR % \~\c
-character as the start of a comment).
-.RE
-.
-.IP
-Use the
-.B hpfcode
-request to map the encoding used in hyphenation patterns files to
-.BR groff \[aq]s
-input encoding.
-.
-By default, everything maps to itself except letters \[oq]A\[cq] to
-\[oq]Z\[cq] which map to \[oq]a\[cq] to \[oq]z\[cq].
-.
-.IP
-The set of hyphenation patterns is associated with the current language
-set by the
-.B hla
-request.
-.
-The
-.B hpf
-request is usually invoked by the
-.B troffrc
-file; a second call replaces the old patterns with the new ones.
-.
-.TP
-.BI .hpfa\  file
-The same as
-.B hpf
-except that the hyphenation patterns from
-.I file
-are appended to the patterns already loaded in the current language.
-.
-.TP
-.BI .hpfcode\  "a b c d \*[ellipsis]"
-After reading a hyphenation patterns file with the
-.B hpf
-or
-.B hpfa
-request, convert all characters with character code\~\c
-.I a
-in the recently read patterns to character code\~\c
-.IR b ,
-character code\~\c
-.I c
-to\~\c
-.IR d ,
-etc.
-.
-Initially, all character codes map to themselves.
-.
-The arguments of
-.B hpfcode
-must be integers in the range 0 to\~255.
-.
-Note that it is even possible to use character codes which are invalid in
-.B groff
-otherwise.
-.
-.TP
-.BI .hym\  n
-Set the
-.I hyphenation margin
-to\~\c
-.IR n :
-when the current adjustment mode is not\~\c
-.BR b ,
-the line is not hyphenated if the line is no more than
-.I n
-short.
-.
-The default hyphenation margin is\~0.
-.
-The default scaling indicator for this request is\~\c
-.BR m .
-The hyphenation margin is associated with the current environment.
-.
-The current hyphenation margin is available in the
-.B \[rs]n[.hym]
-register.
-.
-.TP
-.BI .hys\  n
-Set the
-.I hyphenation space
-to\~\c
-.IR n :
-When the current adjustment mode is\~\c
-.B b
-don\[aq]t hyphenate the line if the line can be justified by adding no
-more than
-.I n
-extra space to each word space.
-.
-The default hyphenation space is\~0.
-.
-The default scaling indicator for this request is\~\c
-.BR m .
-The hyphenation space is associated with the current environment.
-.
-The current hyphenation space is available in the
-.B \[rs]n[.hys]
-register.
-.
-.TP
-.BI .itc\  n\ macro
-Variant of
-.B .it
-for which a line interrupted with
-.B \[rs]c
-counts as one input line.
-.
-.TP
-.BI .kern\  n
-If
-.I n
-is non-zero or missing, enable pairwise kerning, otherwise disable it.
-.
-.TP
-.BI .length\  xx\ string
-Compute the length of
-.I string
-and return it in the number register
-.I xx
-(which is not necessarily defined before).
-.
-.TP
-.BI .linetabs\  n
-If
-.I n
-is non-zero or missing, enable line-tabs mode, otherwise disable it
-(which is the default).
-.
-In line-tabs mode, tab distances are computed relative to the
-(current) output line.
-.
-Otherwise they are taken relative to the input line.
-.
-For example, the following
-.
-.RS
-.IP
-.ne 6v+\n(.Vu
-.EX
-\&.ds x a\[rs]t\[rs]c
-\&.ds y b\[rs]t\[rs]c
-\&.ds z c
-\&.ta 1i 3i
-\&\[rs]*x
-\&\[rs]*y
-\&\[rs]*z
-.EE
-.RE
-.
-.IP
-yields
-.
-.RS
-.IP
-.EX
-a         b         c
-.EE
-.RE
-.
-.IP
-In line-tabs mode, the same code gives
-.
-.RS
-.IP
-.EX
-a         b                   c
-.EE
-.RE
-.
-.IP
-Line-tabs mode is associated with the current environment; the
-read-only number register
-.B \[rs]n[.linetabs]
-is set to\~1 if in line-tabs mode, and 0 otherwise.
-.
-.TP
-.BI .lsm\  xx
-Set the leading spaces macro to
-.IR xx .
-If there are leading spaces in an input line, it is invoked instead of
-the usual troff behaviour; the leading spaces are removed.
-Registers
-.B \[rs]n[lsn]
-and
-.B \[rs]n[lss]
-hold the number of removed leading spaces and the corresponding
-horizontal space, respectively.
-.
-.TP
-.BI .mso\  file
-The same as the
-.B so
-request except that
-.I file
-is searched for in the same directories as macro files for the the
-.B \-m
-command line option.
-.
-If the file name to be included has the form
-.IB name .tmac
-and it isn\[aq]t found,
-.B mso
-tries to include
-.BI tmac. name
-instead and vice versa.
-.
-A warning of type
-.B file
-is generated if
-.I file
-can\[aq]t be loaded, and the request is ignored.
-.
-.TP
-.BI .nop \ anything
-Execute
-.IR anything .
-This is similar to \[oq].if\ 1\[cq].
-.
-.TP
-.B .nroff
-Make the
-.B n
-built-in condition true and the
-.B t
-built-in condition false.
-.
-This can be reversed using the
-.B troff
-request.
-.
-.TP
-.BI .open\  stream\ filename
-Open
-.I filename
-for writing and associate the stream named
-.I stream
-with it.
-.
-See also the
-.B close
-and
-.B write
-requests.
-.
-.TP
-.BI .opena\  stream\ filename
-Like
-.BR open ,
-but if
-.I filename
-exists, append to it instead of truncating it.
-.
-.TP
-.BI .output\  string
-Emit
-.I string
-directly to the intermediate output (subject to copy-mode interpretation);
-this is similar to
-.B \[rs]!\&
-used at the top level.
-.
-An initial double quote in
-.I string
-is stripped off to allow initial blanks.
-.
-.TP
-.B .pev
-Print the current environment and each defined environment state on
-stderr.
-.
-.TP
-.B .pnr
-Print the names and contents of all currently defined number registers
-on stderr.
-.
-.TP
-.BI .psbb \ filename
-Get the bounding box of a PostScript image
-.IR filename .
-.
-This file must conform to Adobe\[aq]s Document Structuring
-Conventions; the command looks for a
-.B \%%%BoundingBox
-comment to extract the bounding box values.
-.
-After a successful call, the coordinates (in PostScript units) of the
-lower left and upper right corner can be found in the registers
-.BR \[rs]n[llx] ,
-.BR \[rs]n[lly] ,
-.BR \[rs]n[urx] ,
-and
-.BR \[rs]n[ury] ,
-respectively.
-.
-If some error has occurred, the four registers are set to zero.
-.
-.TP
-.BI .pso \ command
-This behaves like the
-.B so
-request except that input comes from the standard output of
-.IR command .
-.
-.TP
-.B .ptr
-Print the names and positions of all traps (not including input line
-traps and diversion traps) on stderr.
-.
-Empty slots in the page trap list are printed as well, because they
-can affect the priority of subsequently planted traps.
-.
-.TP
-.BI .pvs \ \[+-]n
-Set the post-vertical line space to\~\c
-.IR n ;
-default scale indicator is\~\c
-.BR p .
-.
-This value is added to each line after it has been output.
-.
-With no argument, the post-vertical line space is set to its previous
-value.
-.
-.IP
-The total vertical line spacing consists of four components:
-.B .vs
-and
-.B \[rs]x
-with a negative value which are applied before the line is output, and
-.B .pvs
-and
-.B \[rs]x
-with a positive value which are applied after the line is output.
-.
-.TP
-.BI .rchar\  "c1 c2 \*[ellipsis]"
-Remove the definitions of glyphs
-.IR c1 ,
-.IR c2 ,
-.I \*[ellipsis]
-This undoes the effect of a
-.B char
-request.
-.
-.TP
-.B .return
-Within a macro, return immediately.
-.
-If called with an argument, return twice, namely from the current macro and
-from the macro one level higher.
-.
-No effect otherwise.
-.
-.TP
-.BI .rfschar\  "c1 c2 \*[ellipsis]"
-Remove the font-specific definitions of glyphs
-.IR c1 ,
-.IR c2 ,
-.I \*[ellipsis]
-This undoes the effect of a
-.B fschar
-request.
-.
-.TP
-.B .rj
-.TQ
-.BI .rj \~n
-Right justify the next
-.IR n \~\c
-input lines.
-.
-Without an argument right justify the next input line.
-.
-The number of lines to be right justified is available in the
-.B \[rs]n[.rj]
-register.
-.
-This implicitly does
-.BR .ce\~0 .
-The
-.B ce
-request implicitly does
-.BR .rj\~0 .
-.
-.TP
-.BI .rnn \ xx\ yy
-Rename number register
-.I xx
-to
-.IR yy .
-.
-.TP
-.BI .schar\  c\ string
-Define global fallback character (or glyph)\~\c
-.I c
-to be
-.IR string .
-.
-The syntax of this request is the same as the
-.B char
-request; a glyph defined with
-.B schar
-is searched after the list of fonts declared with the
-.B special
-request but before the mounted special fonts.
-.
-.TP
-.BI .shc\  c
-Set the soft hyphen character to\~\c
-.IR c .
-If
-.I c
-is omitted, the soft hyphen character is set to the default
-.BR \[rs][hy] .
-The soft hyphen character is the glyph which is inserted when
-a word is hyphenated at a line break.
-.
-If the soft hyphen character does not exist in the font of the
-glyph immediately preceding a potential break point, then the line
-is not broken at that point.
-.
-Neither definitions (specified with the
-.B char
-request) nor translations (specified with the
-.B tr
-request) are considered when finding the soft hyphen character.
-.
-.TP
-.BI .shift\  n
-In a macro, shift the arguments by
-.I n
-positions: argument\~\c
-.I i
-becomes argument
-.IR i \|\-\| n ;
-arguments 1 to\~\c
-.I n
-are no longer available.
-.
-If
-.I n
-is missing, arguments are shifted by\~1.
-.
-Shifting by negative amounts is currently undefined.
-.
-.TP
-.BI .sizes\  s1\ s2\ \*[ellipsis]\ sn\  [0]
-This command is similar to the
-.B sizes
-command of a
-.B DESC
-file.
-.
-It sets the available font sizes for the current font to
-.IR s1 ,
-.IR s2 ,
-.IR \*[ellipsis]\| ,\~ sn
-scaled points.
-.
-The list of sizes can be terminated by an optional\~\c
-.BR 0 .
-.
-Each
-.I si
-can also be a range of sizes
-.IR m \(en n .
-.
-Contrary to the font file command, the list can\[aq]t extend over more
-than a single line.
-.
-.TP
-.BI .special\  "s1 s2 \*[ellipsis]"
-Fonts
-.IR s1 ,
-.IR s2 ,
-.IR \*[ellipsis] ,
-are special and are searched for glyphs not in the current
-font.
-.
-Without arguments, reset the list of special fonts to be empty.
-.
-.TP
-.BI .spreadwarn\  limit
-Make
-.B troff
-emit a warning if the additional space inserted for each space between
-words in an output line is larger or equal to
-.IR limit .
-.
-A negative value is changed to zero; no argument toggles the warning on
-and off without changing
-.IR limit .
-.
-The default scaling indicator is\~\c
-.BR m .
-.
-At startup,
-.B spreadwarn
-is deactivated, and
-.I limit
-is set to 3m.
-.
-For example,
-.B .spreadwarn\ 0.2m
-causes a warning if
-.B troff
-must add 0.2m or more for each interword space in a line.
-.
-This request is active only if text is justified to both margins (using
-.BR .ad\ b ).
-.
-.TP
-.BI .sty\  n\ f
-Associate style\~\c
-.I f
-with font position\~\c
-.IR n .
-A font position can be associated either with a font or with a style.
-.
-The current font is the index of a font position and so is also either
-a font or a style.
-.
-When it is a style, the font that is actually used is the font the
-name of which is the concatenation of the name of the current family
-and the name of the current style.
-.
-For example, if the current font is\~1 and font position\~1 is
-associated with style\~\c
-.B R
-and the current font family is\~\c
-.BR T ,
-then font
-.BR TR
-is used.
-.
-If the current font is not a style, then the current family is ignored.
-.
-When the requests
-.BR cs ,
-.BR bd ,
-.BR tkf ,
-.BR uf ,
-or
-.B fspecial
-are applied to a style, then they are applied instead to the
-member of the current family corresponding to that style.
-.
-The default family can be set with the
-.B \-f
-command line option.
-.
-The
-.B styles
-command in the
-.SM DESC
-file controls which font positions (if any) are initially associated
-with styles rather than fonts.
-.
-.TP
-.BI .substring\  xx\ n1\  [ n2 ]
-Replace the string named
-.I xx
-with the substring defined by the indices
-.I n1
-and
-.IR n2 .
-The first character in the string has index\~0.
-.
-If
-.I n2
-is omitted, it is taken to be equal to the string\[aq]s length.
-.
-If the index value
-.I n1
-or
-.I n2
-is negative, it is counted from the end of the string,
-going backwards:
-.
-The last character has index\~\-1, the character before the last
-character has index\~\-2, etc.
-.
-.TP
-.BI .tkf\  f\ s1\ n1\ s2\ n2
-Enable track kerning for font\~\c
-.IR f .
-When the current font is\~\c
-.I f
-the width of every glyph is increased by an amount between
-.I n1
-and
-.IR n2 ;
-when the current point size is less than or equal to
-.I s1
-the width is increased by
-.IR n1 ;
-when it is greater than or equal to
-.I s2
-the width is increased by
-.IR n2 ;
-when the point size is greater than or equal to
-.I s1
-and less than or equal to
-.I s2
-the increase in width is a linear function of the point size.
-.
-.TP
-.BI .tm1\  string
-Similar to the
-.B tm
-request,
-.I string
-is read in copy mode and written on the standard error, but an initial
-double quote in
-.I string
-is stripped off to allow initial blanks.
-.
-.TP
-.BI .tmc\  string
-Similar to
-.B tm1
-but without writing a final newline.
-.
-.TP
-.BI .trf\  filename
-Transparently output the contents of file
-.IR filename .
-Each line is output as if preceded by
-.BR \[rs]! ;
-however, the lines are not subject to copy-mode interpretation.
-.
-If the file does not end with a newline, then a newline is added.
-.
-For example, you can define a macro\~\c
-.I x
-containing the contents of file\~\c
-.IR f ,
-using
-.
-.RS
-.IP
-.ne 2v+\n(.Vu
-.EX
-\&.di x
-\&.trf f
-\&.di
-.EE
-.RE
-.
-.IP
-Unlike with the
-.B cf
-request, the file cannot contain characters such as
-.SM NUL
-that are not valid troff input characters.
-.
-.TP
-.BI .trin\  abcd
-This is the same as the
-.B tr
-request except that the
-.B asciify
-request uses the character code (if any) before the character
-translation.
-.
-Example:
-.
-.RS
-.IP
-.EX
-\&.trin ax
-\&.di xxx
-\&a
-\&.br
-\&.di
-\&.xxx
-\&.trin aa
-\&.asciify xxx
-\&.xxx
-.EE
-.RE
-.
-.IP
-The result is
-.BR x\ a .
-.
-Using
-.BR tr ,
-the result would be
-.BR x\ x .
-.
-.TP
-.BI .trnt\  abcd
-This is the same as the
-.B tr
-request except that the translations do not apply to text that is
-transparently throughput into a diversion with
-.BR \[rs]! .
-For example,
-.
-.RS
-.IP
-.EX
-\&.tr ab
-\&.di x
-\&\[rs]!.tm a
-\&.di
-\&.x
-.EE
-.RE
-.
-.IP
-prints\~\c
-.BR b ;
-if
-.B trnt
-is used instead of
-.B tr
-it prints\~\c
-.BR a .
-.RE
-.
-.TP
-.B .troff
-Make the
-.B n
-built-in condition false, and the
-.B t
-built-in condition true.
-.
-This undoes the effect of the
-.B nroff
-request.
-.
-.TP
-.BI .unformat\  xx
-This request \[oq]unformats\[cq] the diversion
-.IR xx .
-.
-Contrary to the
-.B asciify
-request, which tries to convert formatted elements of the diversion
-back to input tokens as much as possible,
-.B .unformat
-only handles tabs and spaces between words (usually caused by spaces
-or newlines in the input) specially.
-.
-The former are treated as if they were input tokens, and the latter
-are stretchable again.
-.
-Note that the vertical size of lines is not preserved.
-.
-Glyph information (font, font size, space width, etc.\&) is retained.
-.
-Useful in conjunction with the
-.B box
-and
-.B boxa
-requests.
-.
-.TP
-.BI .vpt\  n
-Enable vertical position traps if
-.I n
-is non-zero, disable them otherwise.
-.
-Vertical position traps are traps set by the
-.B wh
-or
-.B dt
-requests.
-.
-Traps set by the
-.B it
-request are not vertical position traps.
-.
-The parameter that controls whether vertical position traps are
-enabled is global.
-.
-Initially vertical position traps are enabled.
-.
-.TP
-.BI .warn\  n
-Control warnings.
-.IR n \~\c
-is the sum of the numbers associated with each warning that is to be
-enabled; all other warnings are disabled.
-.
-The number associated with each warning is listed in
-.BR @g@troff (@MAN1EXT@).
-.
-For example,
-.B .warn\~0
-disables all warnings, and
-.B .warn\~1
-disables all warnings except that about missing glyphs.
-.
-If
-.I n
-is not given, all warnings are enabled.
-.
-.TP
-.BI .warnscale\  si
-Set the scaling indicator used in warnings to
-.IR si .
-.
-Valid values for
-.I si
-are
-.BR u ,
-.BR i ,
-.BR c ,
-.BR p ,
-and\~\c
-.BR P .
-.
-At startup, it is set to\~\c
-.BR i .
-.
-.TP
-.BI .while \ c\ anything
-While condition\~\c
-.I c
-is true, accept
-.I anything
-as input;
-.IR c \~\c
-can be any condition acceptable to an
-.B if
-request;
-.I anything
-can comprise multiple lines if the first line starts with
-.B \[rs]{
-and the last line ends with
-.BR \[rs]} .
-See also the
-.B break
-and
-.B continue
-requests.
-.
-.TP
-.BI .write\  stream\ anything
-Write
-.I anything
-to the stream named
-.IR stream .
-.I stream
-must previously have been the subject of an
-.B open
-request.
-.I anything
-is read in copy mode;
-a leading\~\c
-.B \[dq]
-is stripped.
-.
-.TP
-.BI .writec\  stream\ anything
-Similar to
-.B write
-but without writing a final newline.
-.
-.TP
-.BI .writem\  stream\ xx
-Write the contents of the macro or string
-.I xx
-to the stream named
-.IR stream .
-.I stream
-must previously have been the subject of an
-.B open
-request.
-.I xx
-is read in copy mode.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Extended escape sequences"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BR \[rs]D' \*[ellipsis] '
-All drawing commands of groff\[aq]s intermediate output are accepted.
-.
-See subsection
-.B "Drawing Commands"
-below for more information.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Extended requests"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI .cf\  filename
-When used in a diversion, this embeds in the diversion an object
-which, when reread, will cause the contents of
-.I filename
-to be transparently copied through to the output.
-.
-In UNIX troff, the contents of
-.I filename
-is immediately copied through to the output regardless of whether
-there is a current diversion; this behaviour is so anomalous that it
-must be considered a bug.
-.
-.TP
-.BI .de\  xx\ yy
-.TQ
-.BI .am\  xx\ yy
-.TQ
-.BI .ds\  xx\ yy
-.TQ
-.BI .as\  xx\ yy
-In compatibility mode, these requests behaves similar to
-.BR .de1 ,
-.BR .am1 ,
-.BR .ds1 ,
-and
-.BR .as1 ,
-respectively: A \[oq]compatibility save\[cq] token is inserted at the
-beginning, and a \[oq]compatibility restore\[cq] token at the end,
-with compatibility mode switched on during execution.
-.
-.TP
-.BI .ev\  xx
-If
-.I xx
-is not a number, this switches to a named environment called
-.IR xx .
-The environment should be popped with a matching
-.B ev
-request without any arguments, just as for numbered environments.
-.
-There is no limit on the number of named environments; they are
-created the first time that they are referenced.
-.
-.TP
-.BI .ss\  m\ n
-When two arguments are given to the
-.B ss
-request, the second argument gives the
-.IR "sentence space size" .
-If the second argument is not given, the sentence space size
-is the same as the word space size.
-.
-Like the word space size, the sentence space is in units of
-one twelfth of the spacewidth parameter for the current font.
-.
-Initially both the word space size and the sentence
-space size are\~12.
-.
-Contrary to UNIX troff, GNU troff handles this request in nroff mode
-also; a given value is then rounded down to the nearest multiple
-of\~12.
-.
-The sentence space size is used in two circumstances.
-.
-If the end of a sentence occurs at the end of a line in fill mode,
-then both an inter-word space and a sentence space are added; if
-two spaces follow the end of a sentence in the middle of a line, then
-the second space is a sentence space.
-.
-Note that the behaviour of UNIX troff are exactly that exhibited
-by GNU troff if a second argument is never given to the
-.B ss
-request.
-.
-In GNU troff, as in UNIX troff, you should always follow a sentence
-with either a newline or two spaces.
-.
-.TP
-.BI .ta\  "n1 n2 \*[ellipsis] nn " "T " "r1 r2 \*[ellipsis] rn"
-Set tabs at positions
-.IR n1 ,
-.IR n2 ,
-.IR \*[ellipsis] ,
-.I nn
-and then set tabs at
-.IR nn \|+\| r1 ,
-.IR nn \|+\| r2 ,
-.IR \*[ellipsis] ,
-.IR nn \|+\| rn
-and then at
-.IR nn \|+\| rn \|+\| r1 ,
-.IR nn \|+\| rn \|+\| r2 ,
-.IR \*[ellipsis] ,
-.IR nn \|+\| rn \|+\| rn ,
-and so on.
-For example,
-.
-.RS
-.IP
-.EX
-\&.ta T .5i
-.EE
-.
-.P
-sets tabs every half an inch.
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "New number registers"
-.\" --------------------------------------------------------------------
-.
-The following read-only registers are available:
-.
-.TP
-.B \[rs]n[.br]
-Within a macro call, it is set to\~1 if the macro is called with the
-\[oq]normal\[cq] control character (\[oq].\[cq] by default), and set
-to\~0 otherwise.
-.
-This allows to reliably modify requests.
-.
-.RS
-.IP
-.ne 6v+\n(.Vu
-.EX
-\&.als bp*orig bp
-\&.de bp
-\&.tm before bp
-\&.ie \[rs]\[rs]n[.br] .bp*orig
-\&.el 'bp*orig
-\&.tm after bp
-\&..
-.EE
-.RE
-.
-.IP
-Using this register outside of a macro makes no sense (it always returns
-zero in such cases).
-.
-.TP
-.B \[rs]n[.C]
-1\~if compatibility mode is in effect, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.cdp]
-The depth of the last glyph added to the current environment.
-.
-It is positive if the glyph extends below the baseline.
-.
-.TP
-.B \[rs]n[.ce]
-The number of lines remaining to be centered, as set by the
-.B ce
-request.
-.
-.TP
-.B \[rs]n[.cht]
-The height of the last glyph added to the current environment.
-.
-It is positive if the glyph extends above the baseline.
-.
-.TP
-.B \[rs]n[.color]
-1\~if colors are enabled, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.csk]
-The skew of the last glyph added to the current environment.
-.
-The
-.I skew
-of a glyph is how far to the right of the center of a glyph
-the center of an accent over that glyph should be placed.
-.
-.TP
-.B \[rs]n[.ev]
-The name or number of the current environment.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.fam]
-The current font family.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.fn]
-The current (internal) real font name.
-.
-This is a string-valued register.
-.
-If the current font is a style, the value of
-.B \[rs]n[.fn]
-is the proper concatenation of family and style name.
-.
-.TP
-.B \[rs]n[.fp]
-The number of the next free font position.
-.
-.TP
-.B \[rs]n[.g]
-Always\~1.
-.
-Macros should use this to determine whether they are running under GNU
-troff.
-.
-.TP
-.B \[rs]n[.height]
-The current height of the font as set with
-.BR \[rs]H .
-.
-.TP
-.B \[rs]n[.hla]
-The current hyphenation language as set by the
-.B hla
-request.
-.
-.TP
-.B \[rs]n[.hlc]
-The number of immediately preceding consecutive hyphenated lines.
-.
-.TP
-.B \[rs]n[.hlm]
-The maximum allowed number of consecutive hyphenated lines, as set by
-the
-.B hlm
-request.
-.
-.TP
-.B \[rs]n[.hy]
-The current hyphenation flags (as set by the
-.B hy
-request).
-.
-.TP
-.B \[rs]n[.hym]
-The current hyphenation margin (as set by the
-.B hym
-request).
-.
-.TP
-.B \[rs]n[.hys]
-The current hyphenation space (as set by the
-.B hys
-request).
-.
-.TP
-.B \[rs]n[.in]
-The indentation that applies to the current output line.
-.
-.TP
-.B \[rs]n[.int]
-Set to a positive value if last output line is interrupted (i.e., if
-it contains
-.BR \[rs]c ).
-.
-.TP
-.B \[rs]n[.kern]
-1\~if pairwise kerning is enabled, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.lg]
-The current ligature mode (as set by the
-.B lg
-request).
-.
-.TP
-.B \[rs]n[.linetabs]
-The current line-tabs mode (as set by the
-.B linetabs
-request).
-.
-.TP
-.B \[rs]n[.ll]
-The line length that applies to the current output line.
-.
-.TP
-.B \[rs]n[.lt]
-The title length as set by the
-.B lt
-request.
-.
-.TP
-.B \[rs]n[.m]
-The name of the current drawing color.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.M]
-The name of the current background color.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.ne]
-The amount of space that was needed in the last
-.B ne
-request that caused a trap to be sprung.
-.
-Useful in conjunction with the
-.B \[rs]n[.trunc]
-register.
-.
-.TP
-.B \[rs]n[.ns]
-1\~if no-space mode is active, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.O]
-The current output level as set with
-.BR \[rs]O .
-.
-.TP
-.B \[rs]n[.P]
-1\~if the current page is in the output list set with
-.BR \-o .
-.
-.TP
-.B \[rs]n[.pe]
-1\~during a page ejection caused by the
-.B bp
-request, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.pn]
-The number of the next page, either the value set by a
-.B pn
-request, or the number of the current page plus\~1.
-.
-.TP
-.B \[rs]n[.ps]
-The current point size in scaled points.
-.
-.TP
-.B \[rs]n[.psr]
-The last-requested point size in scaled points.
-.
-.TP
-.B \[rs]n[.pvs]
-The current post-vertical line space as set with the
-.B pvs
-request.
-.
-.TP
-.B \[rs]n[.rj]
-The number of lines to be right-justified as set by the
-.B rj
-request.
-.
-.TP
-.B \[rs]n[.slant]
-The slant of the current font as set with
-.BR \[rs]S .
-.
-.TP
-.B \[rs]n[.sr]
-The last requested point size in points as a decimal fraction.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.ss]
-.TQ
-.B \[rs]n[.sss]
-These give the values of the parameters set by the first and second
-arguments of the
-.B ss
-request.
-.
-.TP
-.B \[rs]n[.sty]
-The current font style.
-.
-This is a string-valued register.
-.
-.TP
-.B \[rs]n[.tabs]
-A string representation of the current tab settings suitable for use
-as an argument to the
-.B ta
-request.
-.
-.TP
-.B \[rs]n[.trunc]
-The amount of vertical space truncated by the most recently sprung
-vertical position trap, or, if the trap was sprung by a
-.B ne
-request, minus the amount of vertical motion produced by the
-.B ne
-request.
-.
-In other words, at the point a trap is sprung, it represents the
-difference of what the vertical position would have been but for the
-trap, and what the vertical position actually is.
-.
-Useful in conjunction with the
-.B \[rs]n[.ne]
-register.
-.
-.TP
-.B \[rs]n[.U]
-Set to\~1 if in safer mode and to\~0 if in unsafe mode (as given with
-the
-.B \-U
-command line option).
-.
-.TP
-.B \[rs]n[.vpt]
-1\~if vertical position traps are enabled, 0\~otherwise.
-.
-.TP
-.B \[rs]n[.warn]
-The sum of the numbers associated with each of the currently enabled
-warnings.
-.
-The number associated with each warning is listed in
-.BR @g@troff (@MAN1EXT@).
-.
-.TP
-.B \[rs]n[.x]
-The major version number.
-.
-For example, if the version number is 1.03, then
-.B \[rs]n[.x]
-contains\~1.
-.
-.TP
-.B \[rs]n[.y]
-The minor version number.
-.
-For example, if the version number is 1.03, then
-.B \[rs]n[.y]
-contains\~03.
-.
-.TP
-.B \[rs]n[.Y]
-The revision number of groff.
-.
-.TP
-.B \[rs]n[.zoom]
-The zoom value of the current font, in multiples of 1/1000th.
-Zero if no magnification.
-.
-.TP
-.B \[rs]n[llx]
-.TQ
-.B \[rs]n[lly]
-.TQ
-.B \[rs]n[urx]
-.TQ
-.B \[rs]n[ury]
-These four read/\:write registers are set by the
-.B psbb
-request and contain the bounding box values (in PostScript units) of a
-given PostScript image.
-.
-.P
-The following read/\:write registers are set by the
-.B \[rs]w
-escape sequence:
-.
-.TP
-.B \[rs]n[rst]
-.TQ
-.B \[rs]n[rsb]
-Like the
-.B st
-and
-.B sb
-registers, but take account of the heights and depths of glyphs.
-.
-.TP
-.B \[rs]n[ssc]
-The amount of horizontal space (possibly negative) that should be
-added to the last glyph before a subscript.
-.
-.TP
-.B \[rs]n[skw]
-How far to right of the center of the last glyph in the
-.B \[rs]w
-argument, the center of an accent from a roman font should be placed
-over that glyph.
-.
-.P
-Other available read/write number registers are:
-.
-.TP
-.B \[rs]n[c.]
-The current input line number.
-.B \[rs]n[.c]
-is a read-only alias to this register.
-.
-.TP
-.B \[rs]n[hours]
-The number of hours past midnight.
-.
-Initialized at start-up.
-.
-.TP
-.B \[rs]n[hp]
-The current horizontal position at input line.
-.
-.TP
-.B \[rs]n[lsn]
-.TQ
-.B \[rs]n[lss]
-If there are leading spaces in an input line, these registers
-hold the number of leading spaces and the corresponding
-horizontal space, respectively.
-.
-.TP
-.B \[rs]n[minutes]
-The number of minutes after the hour.
-.
-Initialized at start-up.
-.
-.TP
-.B \[rs]n[seconds]
-The number of seconds after the minute.
-.
-Initialized at start-up.
-.
-.TP
-.B \[rs]n[systat]
-The return value of the system() function executed by the last
-.B sy
-request.
-.
-.TP
-.B \[rs]n[slimit]
-If greater than\~0, the maximum number of objects on the input stack.
-.
-If less than or equal to\~0, there is no limit on the number of
-objects on the input stack.
-.
-With no limit, recursion can continue until virtual memory is
-exhausted.
-.
-.TP
-.B \[rs]n[year]
-The current year.
-.
-Note that the traditional
-.B troff
-number register
-.B \[rs]n[yr]
-is the current year minus 1900.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Miscellaneous
-.\" --------------------------------------------------------------------
-.
-.B @g@troff
-predefines a single (read/write) string-based register,
-.BR \[rs]*[.T] ,
-which contains the argument given to the
-.B \-T
-command line option, namely the current output device (for example,
-.I latin1
-or
-.IR ascii ).
-Note that this is not the same as the (read-only) number register
-.B \[rs]n[.T]
-which is defined to be\~1 if
-.B troff
-is called with the
-.B \-T
-command line option, and zero otherwise.
-.
-This behaviour is different to UNIX troff.
-.
-.P
-Fonts not listed in the
-.SM DESC
-file are automatically mounted on the next available font position
-when they are referenced.
-.
-If a font is to be mounted explicitly with the
-.B fp
-request on an unused font position, it should be mounted on the first
-unused font position, which can be found in the
-.B \[rs]n[.fp]
-register; although
-.B troff
-does not enforce this strictly, it does not allow a font to be mounted
-at a position whose number is much greater than that of any currently
-used position.
-.
-.P
-Interpolating a string does not hide existing macro arguments.
-.
-Thus in a macro, a more efficient way of doing
-.
-.IP
-.BI . xx\  \[rs]\[rs]$@
-.P
-is
-.
-.IP
-.BI \[rs]\[rs]*[ xx ]\[rs]\[rs]
-.
-.P
-If the font description file contains pairwise kerning information,
-glyphs from that font are kerned.
-.
-Kerning between two glyphs can be inhibited by placing a
-.B \[rs]&
-between them.
-.
-.P
-In a string comparison in a condition, characters that appear at
-different input levels to the first delimiter character are not
-recognized as the second or third delimiters.
-.
-This applies also to the
-.B tl
-request.
-.
-In a
-.B \[rs]w
-escape sequence, a character that appears at a different input level
-to the starting delimiter character is not recognized as the
-closing delimiter character.
-.
-The same is true for
-.BR \[rs]A ,
-.BR \[rs]b ,
-.BR \[rs]B ,
-.BR \[rs]C ,
-.BR \[rs]l ,
-.BR \[rs]L ,
-.BR \[rs]o ,
-.BR \[rs]X ,
-and
-.BR \[rs]Z .
-.
-When decoding a macro or string argument that is delimited by double
-quotes, a character that appears at a different input level to the starting
-delimiter character is not recognized as the closing delimiter
-character.
-.
-The implementation of
-.B \[rs]$@
-ensures that the double quotes surrounding an argument appear at the
-same input level, which is different to the input level of the
-argument itself.
-.
-In a long escape name
-.B ]
-is not recognized as a closing delimiter except when it occurs at
-the same input level as the opening\~\c
-.BR [ .
-.
-In compatibility mode, no attention is paid to the input-level.
-.
-.P
-There are some new types of condition:
-.
-.TP
-.BI .if\ r xxx
-True if there is a number register named
-.IR xxx .
-.
-.TP
-.BI .if\ d xxx
-True if there is a string, macro, diversion, or request named
-.IR xxx .
-.
-.TP
-.BI .if\ m xxx
-True if there is a color named
-.IR xxx .
-.
-.TP
-.BI .if\ c ch
-True if there is a character (or glyph)
-.IR ch
-available;
-.I ch
-is either an
-.SM ASCII
-character or a glyph (special character)
-.BI \[rs]N' xxx '\f[R],
-.BI \[rs]( xx
-or
-.BI \[rs][ xxx ]\f[R];
-the condition is also true if
-.I ch
-has been defined by the
-.B char
-request.
-.
-.TP
-.BI .if\ F f
-True if font\~\c
-.I f
-exists.
-.
-.BR f \~\c
-is handled as if it was opened with the
-.B ft
-request (this is, font translation and styles are applied), without
-actually mounting it.
-.
-.TP
-.BI .if\ S s
-True if style\~\c
-.I s
-has been registered.
-.
-Font translation is applied.
-.
-.P
-The
-.B tr
-request can now map characters onto
-.BR \[rs]\[ti] .
-.
-.P
-The space width emitted by the
-.B \[rs]|
-and
-.B \[rs]^
-escape sequences can be controlled on a per-font basis.
-If there is a glyph named
-.B \[rs]|
-or
-.BR \[rs]^ ,
-respectively (note the leading backslash), defined in the current font file,
-use this glyph\[aq]s width instead of the default value.
-.
-.P
-It is now possible to have whitespace between the first and second dot
-(or the name of the ending macro) to end a macro definition.
-.
-Example:
-.
-.IP
-.ne 6v+\n(.Vu
-.EX
-\&.if t \[rs]{\[rs]
-\&.  de bar
-\&.    nop Hello, I\[aq]m \[oq]bar\[cq].
-\&.  .
-\&.\[rs]}
-.EE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "INTERMEDIATE OUTPUT FORMAT"
-.\" --------------------------------------------------------------------
-.
-This section describes the format output by GNU troff.
-.
-The output format used by GNU troff is very similar to that used
-by Unix device-independent troff.
-.
-Only the differences are documented here.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Units"
-.\" --------------------------------------------------------------------
-.
-The argument to the
-.BR s \~\c
-command is in scaled points (units of
-.RI points/ n ,
-where
-.I n
-is the argument to the
-.B sizescale
-command  in the DESC file).
-.
-The argument to the
-.B x\ Height
-command is also in scaled points.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Text Commands"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI N n
-Print glyph with index\~\c
-.I n
-(a non-negative integer) of the current font.
-.
-.P
-If the
-.B tcommand
-line is present in the DESC file, troff uses the following two
-commands.
-.
-.TP
-.BI t xxx
-.I xxx
-is any sequence of characters terminated by a space or a newline (to
-be more precise, it is a sequence of glyphs which are accessed with
-the corresponding characters); the first character should be printed at
-the current position, the current horizontal position should be increased
-by the width of the first character, and so on for each character.
-.
-The width of the glyph is that given in the font file,
-appropriately scaled for the current point size, and rounded so that
-it is a multiple of the horizontal resolution.
-.
-Special characters cannot be printed using this command.
-.
-.TP
-.BI u n\ xxx
-This is same as the
-.BR t \~\c
-command except that after printing each character, the current
-horizontal position is increased by the sum of the width of that
-character and\~\c
-.IR n .
-.
-.P
-Note that single characters can have the eighth bit set, as can the
-names of fonts and special characters.
-.
-.P
-The names of glyphs and fonts can be of arbitrary length; drivers
-should not assume that they are only two characters long.
-.
-.P
-When a glyph is to be printed, that glyph is always
-in the current font.
-.
-Unlike device-independent troff, it is not necessary for drivers to
-search special fonts to find a glyph.
-.
-.P
-For color support, some new commands have been added:
-.
-.TP
-\f[B]mc \f[I]cyan magenta yellow\f[R]
-.TQ
-\f[B]md\f[R]
-.TQ
-\f[B]mg \f[I]gray\f[R]
-.TQ
-\f[B]mk \f[I]cyan magenta yellow black\f[R]
-.TQ
-\f[B]mr \f[I]red green blue\f[R]
-Set the color components of the current drawing color, using various
-color schemes.
-.
-.B md
-resets the drawing color to the default value.
-.
-The arguments are integers in the range 0 to 65536.
-.
-.P
-The
-.BR x \~\c
-device control command has been extended.
-.
-.TP
-\f[B]x u \f[I]n\f[R]
-If
-.I n
-is\~1, start underlining of spaces.
-.
-If
-.I n
-is\~0, stop underlining of spaces.
-.
-This is needed for the
-.B cu
-request in nroff mode and is ignored otherwise.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Drawing Commands"
-.\" --------------------------------------------------------------------
-.
-The
-.B D
-drawing command has been extended.
-.
-These extensions are not used by GNU pic if the
-.B \-n
-option is given.
-.
-.TP
-\f[B]Df \f[I]n\/\f[R]\*[ic]\[rs]n
-Set the shade of gray to be used for filling solid objects to
-.IR n ;
-.I n
-must be an integer between 0 and 1000, where 0 corresponds solid white
-and 1000 to solid black, and values in between correspond to
-intermediate shades of gray.
-.
-This applies only to solid circles, solid ellipses and solid
-polygons.
-.
-By default, a level of 1000 is used.
-.
-Whatever color a solid object has, it should completely obscure
-everything beneath it.
-.
-A value greater than 1000 or less than\~0 can also be used: this means
-fill with the shade of gray that is currently being used for lines and
-text.
-.
-Normally this is black, but some drivers may provide a way of
-changing this.
-.
-.IP
-The corresponding
-.BI \[rs]D'f \*[ellipsis] '
-command shouldn\[aq]t be used since its argument is always rounded to an
-integer multiple of the horizontal resolution which can lead to
-surprising results.
-.
-.TP
-\f[B]DC \f[I]\/d\f[R]\*[ic]\[rs]n
-Draw a solid circle with a diameter of
-.I d
-with the leftmost point at the current position.
-.
-.TP
-\f[B]DE \f[I]dx dy\/\f[R]\*[ic]\[rs]n
-Draw a solid ellipse with a horizontal diameter of
-.I dx
-and a vertical diameter of
-.I dy
-with the leftmost point at the current position.
-.EQ
-delim $$
-.EN
-.
-.TP
-\f[B]Dp\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n
-Draw a polygon with, for $i = 1 ,..., n+1$, the
-.IR i -th
-vertex at the current position
-.
-$+ sum from j=1 to i-1 ( dx sub j , dy sub j )$.
-.
-At the moment, GNU pic only uses this command to generate triangles
-and rectangles.
-.
-.TP
-\f[B]DP\f[R] $dx sub 1$ $dy sub 1$ $dx sub 2$ $dy sub 2$ $...$ $dx sub n$ $dy sub n$\[rs]n
-.
-Like
-.B Dp
-but draw a solid rather than outlined polygon.
-.
-.TP
-\f[B]Dt \f[I]n\/\f[R]\*[ic]\[rs]n
-Set the current line thickness to
-.IR n \~\c
-machine units.
-.
-Traditionally Unix troff drivers use a line thickness proportional to
-the current point size; drivers should continue to do this if no
-.B Dt
-command has been given, or if a
-.B Dt
-command has been given with a negative value of\~\c
-.IR n .
-A zero value of\~\c
-.I n
-selects the smallest available line thickness.
-.
-.P
-A difficulty arises in how the current position should be changed after
-the execution of these commands.
-.
-This is not of great importance since the code generated by GNU pic
-does not depend on this.
-.
-Given a drawing command of the form
-.IP
-\f[B]\[rs]D'\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\f[B]'\f[R]
-.
-.P
-where
-.I c
-is not one of
-.BR c ,
-.BR e ,
-.BR l ,
-.BR a ,
-or\~\c
-.BR \[ti] ,
-Unix troff treats each of the $x sub i$ as a horizontal quantity,
-and each of the $y sub i$ as a vertical quantity and assumes that
-the width of the drawn object is $sum from i=1 to n x sub i$,
-and that the height is $sum from i=1 to n y sub i$.
-.
-(The assumption about the height can be seen by examining the
-.B st
-and
-.B sb
-registers after using such a
-.BR D \~\c
-command in a
-.B \[rs]w
-escape sequence).
-.
-This rule also holds for all the original drawing commands with the
-exception of
-.BR De .
-For the sake of compatibility GNU troff also follows this rule, even
-though it produces an ugly result in the case of the
-.B Dt
-and
-.BR Df ,
-and, to a lesser extent,
-.B DE
-commands.
-.
-Thus after executing a
-.BR D \~\c
-command of the form
-.IP
-\f[B]D\f[I]c\f[R] $x sub 1$ $y sub 1$ $x sub 2$ $y sub 2$ $...$ $x sub n$ $y sub n$\[rs]n
-.
-.P
-the current position should be increased by
-.
-$( sum from i=1 to n x sub i , sum from i=1 to n y sub i )$.
-.
-.P
-Another set of extensions is
-.
-.TP
-\f[B]DFc \f[I]cyan magenta yellow\f[R]\*[ic]\[rs]n
-.TQ
-\f[B]DFd\f[R]\*[ic]\[rs]n
-.TQ
-\f[B]DFg \f[I]gray\/\f[R]\*[ic]\[rs]n
-.TQ
-\f[B]DFk \f[I]cyan magenta yellow black\f[R]\*[ic]\[rs]n
-.TQ
-\f[B]DFr \f[I]red green blue\f[R]\*[ic]\[rs]n
-Set the color components of the filling color similar to the
-.BR m \~\c
-commands above.
-.
-.P
-The current position isn\[aq]t changed by those colour commands
-(contrary to
-.BR Df ).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Device Control Commands"
-.\" --------------------------------------------------------------------
-.
-There is a continuation convention which permits the argument to the
-.B x\ X
-command to contain newlines: when outputting the argument to the
-.B x\ X
-command, GNU troff follows each newline in the argument with a
-.B +
-character (as usual, it terminates the entire argument with a
-newline); thus if the line after the line containing the
-.B x\ X
-command starts with
-.BR + ,
-then the newline ending the line containing the
-.B x\ X
-command should be treated as part of the argument to the
-.B x\ X
-command, the
-.B +
-should be ignored, and the part of the line following the
-.B +
-should be treated like the part of the line following the
-.B x\ X
-command.
-.
-.P
-The first three output commands are guaranteed to be:
-.IP
-.BI x\ T\  device
-.br
-.BI x\ res\  n\ h\ v
-.br
-.B x init
-.
-.
-.\" --------------------------------------------------------------------
-.SH INCOMPATIBILITIES
-.\" --------------------------------------------------------------------
-.
-In spite of the many extensions, groff has retained compatibility to
-classical troff to a large degree.
-.
-For the cases where the extensions lead to collisions, a special
-compatibility mode with the restricted, old functionality was created
-for groff.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Groff Language"
-.\" --------------------------------------------------------------------
-.
-.I groff
-provides a
-.B compatibility mode
-that allows to process roff code written for classical
-.B troff
-or for other implementations of roff in a consistent way.
-.
-.P
-Compatibility mode can be turned on with the
-.B \-C
-command line option, and turned on or off with the
-.B .cp
-request.
-.
-The number register
-.B \[rs]n(.C
-is\~1 if compatibility mode is on, 0\~otherwise.
-.
-.P
-This became necessary because the GNU concept for long names causes
-some incompatibilities.
-.I Classical troff
-interprets
-.IP
-.B .dsabcd
-.
-.P
-as defining a string
-.B ab
-with contents
-.BR cd .
-In
-.IR groff
-mode, this is considered as a call of a macro named
-.BR dsabcd .
-.
-.P
-Also
-.I classical troff
-interprets
-.B \[rs]*[
-or
-.B \[rs]n[
-as references to a string or number register called\~\c
-.B [
-while
-.I groff
-takes this as the start of a long name.
-.
-.P
-In
-.IR "compatibility mode" ,
-groff interprets these things in the traditional way; so long
-names are not recognized.
-.
-.P
-On the other hand, groff in
-.I GNU native mode
-does not allow to use the single-character escapes
-.B \[rs]\[rs]
-(backslash),
-.B \[rs]|
-(vertical bar),
-.B \[rs]^
-(caret),
-.B \[rs]&
-(ampersand),
-.B \[rs]{
-(opening brace),
-.B \[rs]}
-(closing brace),
-.RB \[oq] \[rs]\  \[cq]
-(space),
-.B \[rs]'
-(single quote),
-.B \[rs]`
-(backquote),
-.B \[rs]\-
-(minus),
-.B \[rs]_
-(underline),
-.B \[rs]!\&
-(bang),
-.B \[rs]%
-(percent),
-and
-.B \[rs]c
-(character\~c) in names of strings, macros, diversions, number
-registers, fonts or environments, whereas
-.I classical troff
-does.
-.
-.P
-The
-.B \[rs]A
-escape sequence can be helpful in avoiding these escape sequences in
-names.
-.
-.P
-Fractional point sizes cause one noteworthy incompatibility.
-.
-In
-.I classical
-.IR troff ,
-the
-.B ps
-request ignores scale indicators and so
-.RS
-.P
-.B .ps\~10u
-.RE
-.
-.P
-sets the point size to 10\~points, whereas in groff native mode the
-point size is set to 10\~scaled points.
-.
-.P
-In
-.IR groff ,
-there is a fundamental difference between unformatted input
-characters, and formatted output characters (glyphs).
-.
-Everything that affects how a glyph is output is
-stored with the glyph; once a glyph has been
-constructed it is unaffected by any subsequent requests that are
-executed, including the
-.BR bd ,
-.BR cs ,
-.BR tkf ,
-.BR tr ,
-or
-.B fp
-requests.
-.
-.P
-Normally glyphs are constructed from input characters at
-the moment immediately before the glyph is added to the current
-output line.
-.
-Macros, diversions and strings are all, in fact, the same type of
-object; they contain lists of input characters and glyphs
-in any combination.
-.
-.P
-Special characters can be both; before being added to the output, they
-act as input entities, afterwards they denote glyphs.
-.
-.P
-A glyph does not behave like an input character for the
-purposes of macro processing; it does not inherit any of the special
-properties that the input character from which it was constructed
-might have had.
-.
-The following example makes things clearer.
-.
-.P
-.RS
-.EX
-\&.di x
-\[rs]\[rs]\[rs]\[rs]
-\&.br
-\&.di
-\&.x
-.EE
-.RE
-.
-.P
-With
-.I GNU troff
-this is printed as
-.BR \[rs]\[rs] .
-So each pair of input backslashes \&\[oq]\[rs]\[rs]\[cq] is turned
-into a single output backslash glyph \&\[oq]\[rs]\[cq] and the
-resulting output backslashes are not interpreted as escape characters
-when they are reread.
-.
-.P
-.I Classical troff
-would interpret them as escape characters when they were reread and
-would end up printing a single backslash \[oq]\[rs]\[cq].
-.
-.P
-In GNU, the correct way to get a printable version of the backslash
-character \[cq]\[rs]\[cq]
-is the
-.B \[rs](rs
-escape sequence, but classical troff does not provide a clean feature
-for getting a non-syntactical backslash.
-.
-A close method is the printable version of the current escape
-character using the
-.B \[rs]e
-escape sequence; this works if the current escape character is not
-redefined.
-.
-It works in both GNU mode and compatibility mode, while dirty tricks
-like specifying a sequence of multiple backslashes do not work
-reliably; for the different handling in diversions, macro definitions,
-or text mode quickly leads to a confusion about the necessary number of
-backslashes.
-.
-.P
-To store an escape sequence in a diversion that is interpreted
-when the diversion is reread, either the traditional
-.B \[rs]!\&
-transparent output facility or the
-new
-.B \[rs]?\&
-escape sequence can be used.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Intermediate Output"
-.\" --------------------------------------------------------------------
-.
-The groff intermediate output format is in a state of evolution.
-.
-So far it has some incompatibilities, but it is intended to establish
-a full compatibility to the classical troff output format.
-.
-Actually the following incompatibilities exist:
-.
-.IP \[bu] 2m
-The positioning after the drawing of the polygons conflicts with the
-classical definition.
-.
-.IP \[bu] 2m
-The intermediate output cannot be rescaled to other devices as
-classical \[oq]device-independent\[cq] troff did.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-The
-.I groff info
-.IR file ,
-cf.\&
-.BR info (1)
-presents all groff documentation within a single document.
-.
-.TP
-.BR groff (@MAN1EXT@)
-A list of all documentation around
-.IR groff .
-.
-.TP
-.BR groff (@MAN7EXT@)
-A description of the
-.I groff
-language, including a short, but complete reference of all predefined
-requests, registers, and escapes of plain
-.IR groff .
-From the command line, this is called using
-.
-.RS
-.IP
-.EX
-man 7 groff
-.EE
-.RE
-.
-.TP
-.BR roff (@MAN7EXT@)
-A survey of
-.I roff
-systems, including pointers to further historical documentation.
-.
-.TP
-.RI [ CSTR\~#54\/ ]
-The
-.I Nroff/\:Troff User\[aq]s Manual
-by
-.I J.\& F.\& Ossanna
-of 1976 in the revision of
-.I Brian Kernighan
-of 1992, being the
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz
-classical troff documentation
-.UE .
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs variables
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/man/groff_font.5.man b/man/groff_font.5.man
new file mode 100644 (file)
index 0000000..cb3bbf0
--- /dev/null
@@ -0,0 +1,723 @@
+.TH GROFF_FONT @MAN5EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_font \- format of groff device and font description files
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff (GNU roff), which is a free software
+.\" project.
+.\"
+.\" 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.
+.\"
+.\" You should have received a copy of the GNU General Public License
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/gpl-2.0.html>.
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_font_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+The groff font format is roughly a superset of the ditroff
+font format.
+.
+The font files for device
+.I name
+are stored in a directory
+.IR dev name.
+.
+There are two types of file:
+a device description file called
+.I DESC
+and for each
+.RI font \~F ,
+a font file called\~F.
+.
+These are text files;
+unlike the ditroff font format,
+there is no associated binary format.
+.
+.
+.\" ====================================================================
+.SS DESC file format
+.\" ====================================================================
+.
+The
+.I DESC
+file can contain the following types of line as shown below.
+.
+Later entries in the file override previous values.
+.
+.LP
+Empty lines are ignored.
+.
+.TP
+.B charset
+This line and everything following in the file are ignored.
+.
+It is allowed for the sake of backwards compatibility.
+.
+.TP
+.BI "family " fam
+The default font family is
+.IR fam .
+.
+.TP
+.BI "fonts " "n F1 F2 F3 \|.\|.\|.\| Fn"
+Fonts
+.IR F1 ", \|.\|.\|., " Fn
+are mounted in the font positions
+.IR m "\|+\|1, \|.\|.\|., " m \|+\| n
+where
+.I m
+is the number of styles.
+.
+This command may extend over more than one line.
+.
+A font name of\~\c
+.B 0
+causes no font to be mounted on the corresponding font position.
+.
+.TP
+.BI "hor " n
+The horizontal resolution is
+.IR n \~\c
+machine units.
+.
+.TP
+.BI "image_generator "  string
+Needed for
+.B \%grohtml
+only.
+.
+It specifies the program to generate PNG images from
+PostScript input.
+.
+Under GNU/Linux this is usually
+.I gs
+but under other systems (notably cygwin) it might be set to another
+name.
+.
+.TP
+.BI "paperlength " n
+The physical vertical dimension of the output medium in machine units.
+.
+This isn't used by
+.B troff
+itself but by output devices.
+.
+Deprecated.
+.
+Use
+.B papersize
+instead.
+.
+.TP
+.BI "papersize " string
+Select a paper size.
+.
+Valid values for
+.I string
+are the ISO paper types A0\[en]A7, B0\[en]B7, C0\[en]C7, D0\[en]D7,
+DL, and the US paper
+types letter, legal, tabloid, ledger, statement, executive, com10, and
+monarch.
+.
+Case is not significant for
+.I string
+if it holds predefined paper types.
+.
+Alternatively,
+.I string
+can be a file name (e.g.\&
+.IR /etc/papersize );
+if the file can be opened,
+.B groff
+reads the first line and tests for the above paper sizes.
+.
+Finally,
+.I string
+can be a custom paper size in the format
+.IB length , width
+(no spaces before and after the comma).
+.
+Both
+.I length
+and
+.I width
+must have a unit appended; valid values are \[oq]i\[cq] for inches,
+\[oq]c\[cq] for centimeters, \[oq]p\[cq] for points, and \[oq]P\[cq]
+for picas.
+.
+Example:
+.BR 12c,235p .
+.
+An argument which starts with a digit is always treated as a custom
+paper format.
+.
+.B papersize
+sets both the vertical and horizontal dimension of the output medium.
+.
+.IP
+More than one argument can be specified;
+.B groff
+scans from left to right and uses the first valid paper specification.
+.
+.TP
+.BI "paperwidth " n
+The physical horizontal dimension of the output medium in machine units.
+.
+Deprecated.
+.
+Use
+.B papersize
+instead.
+.
+This isn't used by
+.B troff
+itself but by output devices.
+.
+.TP
+.B pass_filenames
+Make troff tell the driver the source file name being processed.
+.
+This is achieved by another tcommand:
+.BR F \~\c
+.IR filename .
+.
+.TP
+.BI "postpro " program
+Use
+.I program
+as the postprocessor.
+.
+.TP
+.BI "prepro " program
+Call
+.I program
+as a preprocessor.
+.
+.TP
+.BI "print "  program
+Use
+.I program
+as the spooler program for printing.
+.
+If omitted, the
+.B \-l
+and
+.B \-L
+options of
+.B groff
+are ignored.
+.
+.TP
+.BI "res " n
+There are
+.I n
+machine units per inch.
+.
+.TP
+.BI "sizes " "s1 s2 \|.\|.\|.\| sn " 0
+This means that the device has fonts at
+.IR s1 ,
+.IR s2 ", \|.\|.\|., " sn
+scaled points.
+.
+The list of sizes must be terminated by a
+.BR 0 .
+.
+Each
+.I si
+can also be a range of sizes
+.IR m \(en n .
+.
+The list can extend over more than one line.
+.
+.TP
+.BI "sizescale " n
+The scale factor for point sizes.
+.
+By default this has a value of 1.
+.
+One
+.I
+scaled point
+is equal to
+one
+.RI point\|/\| n .
+.
+The arguments to the
+.B unitwidth
+and
+.B sizes
+commands are given in scaled points.
+.
+.TP
+.BI "styles " "S1 S2 \|.\|.\|.\| Sm"
+The first
+.I m
+font positions are associated with styles
+.IR S1 ", \|.\|.\|., " Sm .
+.
+.TP
+.B tcommand
+This means that the postprocessor can handle the
+.B t
+and\~\c
+.B u
+output commands.
+.
+.TP
+.B unicode
+Indicate that the output device supports the complete Unicode
+repertoire.
+.
+Useful only for devices which produce
+.I character entities
+instead of glyphs.
+.
+.IP
+If
+.B unicode
+is present, no
+.B charset
+section is required in the font description files since the Unicode
+handling built into
+.B groff
+is used.
+.
+However, if there are entries in a
+.B charset
+section, they either override the default mappings for those
+particular characters or add new mappings (normally for composite
+characters).
+.
+.IP
+This is used for
+.BR \-Tutf8 ,
+.BR \-Thtml ,
+and
+.BR \-Txhtml .
+.
+.TP
+.BI "unitwidth " n
+Quantities in the font files are given in machine units
+for fonts whose point size is
+.IR n \~\c
+scaled points.
+.
+.TP
+.B unscaled_charwidths
+Make the font handling module always return unscaled glyph widths.
+.
+Needed for the
+.B \%grohtml
+device.
+.
+.TP
+.B use_charnames_in_special
+This command indicates that troff should encode named glyphs inside
+special commands.
+.
+.TP
+.BI "vert " n
+The vertical resolution is
+.IR n \~\c
+machine units.
+.
+.LP
+The
+.BR res ,
+.BR unitwidth ,
+.BR fonts ,
+and
+.B sizes
+lines are compulsory.
+.
+Not all commands in the
+.I DESC
+file are used by
+.B troff
+itself; some of the keywords (or even additional ones) are used by
+postprocessors to store arbitrary information about the device.
+.
+.LP
+Here a list of obsolete keywords which are recognized by
+.B groff
+but completely ignored:
+.BR spare1 ,
+.BR spare2 ,
+.BR biggestfont .
+.
+.
+.\" ====================================================================
+.SS Font file format
+.\" ====================================================================
+.
+A font file has two sections; empty lines are ignored in both of them.
+.
+.LP
+The first section is a sequence of lines each containing a sequence of
+blank delimited words; the first word in the line is a key, and
+subsequent words give a value for that key.
+.
+.TP
+.BI "ligatures " "lig1 lig2 \|.\|.\|.\| lign \fR[" 0 \fR]
+Glyphs
+.IR lig1 ,
+.IR lig2 ", \|.\|.\|., " lign
+are ligatures; possible ligatures are
+.BR ff ,
+.BR fi ,
+.BR fl ,
+.BR ffi ,
+and
+.BR ffl .
+.
+For backwards compatibility, the list of ligatures may be terminated
+with a\~\c
+.BR 0 .
+.
+The list of ligatures may not extend over more than one line.
+.
+.TP
+.BI "name " F
+The name of the font is\~\c
+.IR F .
+.
+.TP
+.BI "slant " n
+The glyphs of the font have a slant of
+.IR n \~\c
+degrees.
+.
+(Positive means forward.)
+.
+.TP
+.BI "spacewidth "  n
+The normal width of a space is\~\c
+.IR n .
+.
+.TP
+.B special
+The font is
+.IR special ;
+this means that when a glyph is requested that is not present in
+the current font, it is searched for in any special fonts that are
+mounted.
+.
+.LP
+Other commands are ignored by
+.B troff
+but may be used by postprocessors to store arbitrary information
+about the font in the font file.
+.
+.LP
+The first section can contain comments which start with the
+.B #
+character and extend to the end of a line.
+.
+.LP
+The second section contains one or two subsections.
+.
+It must contain a
+.I charset
+subsection
+and it may also contain a
+.I kernpairs
+subsection.
+.
+These subsections can appear in any order.
+.
+Each subsection starts with a word on a line by itself.
+.
+.LP
+The word
+.B charset
+starts the charset subsection.
+.
+The
+.B charset
+line is followed by a sequence of lines.
+.
+Each line gives information for one glyph.
+.
+A line comprises a number of fields separated
+by blanks or tabs.
+.
+The format is
+.
+.IP
+.I name metrics type code
+.RI [ entity_name ]
+.RB [ \-\-
+.IR comment ]
+.
+.LP
+.I name
+identifies the glyph:
+if
+.I name
+is a single glyph
+.I c
+then it corresponds to the groff input character
+.IR c ;
+if it is of the form
+.BI \[rs] c
+where c is a single character, then it
+corresponds to the special character
+.BI \[rs][ c ]\fR;
+otherwise it corresponds to the groff input character
+.BI \[rs][ name ]\fR.
+.
+If it is exactly two characters
+.I xx
+it can be entered as
+.BI \[rs]( xx\fR.
+.
+Note that single-letter special characters can't be accessed as
+.BI \[rs] c\fR;
+the only exception is \[oq]\[rs]\-\[cq] which is identical to
+\[oq]\[rs][\-]\[cq].
+.
+The name
+.B \-\-\-
+is special and indicates that the glyph is unnamed;
+such glyphs can only be used by means of the
+.B \[rs]N
+escape sequence in
+.BR troff .
+.
+.LP
+The
+.I type
+field gives the glyph type:
+.
+.TP
+1
+means the glyph has a descender, for example, \[oq]p\[cq];
+.
+.TP
+2
+means the glyph has an ascender, for example, \[oq]b\[cq];
+.
+.TP
+3
+means the glyph has both an ascender and a descender, for example,
+\[oq](\[cq].
+.
+.LP
+The
+.I code
+field gives the code which the postprocessor uses to print the glyph.
+.
+The glyph can also be input to groff using this code by means of the
+.B \[rs]N
+escape sequence.
+.
+The code can be any integer.
+.
+If it starts with a\~\c
+.B 0
+it is interpreted as octal;
+if it starts with
+.B 0x
+or
+.B 0X
+it is interpreted as hexadecimal.
+.
+Note, however, that the
+.B \[rs]N
+escape sequence only accepts a decimal integer.
+.
+.LP
+The
+.I entity_name
+field gives an ASCII string identifying the glyph which the
+postprocessor uses to print that glyph.
+.
+This field is optional and is currently used by
+.B grops
+to build sub-encoding arrays for PS fonts containing more than 256
+glyphs.
+.
+(It has also been used for
+.BR \%grohtml 's
+entity names but for efficiency reasons this data is now compiled
+directly into
+.BR \%grohtml .)
+.
+.LP
+Anything on the line after the encoding field or \[oq]\-\-\[cq] are
+ignored.
+.
+.LP
+The
+.I metrics
+field has the form (in one line; it is broken here for the sake of
+readability):
+.
+.IP
+.I width\/\c
+.RI [\fB, height\/\c
+.RI [\fB, depth\/\c
+.RI [\fB, italic-correction
+.br
+.RI [\fB, left-italic-correction\/\c
+.RI [\fB, subscript-correction ]]]]]
+.
+.LP
+There must not be any spaces between these subfields.
+.
+Missing subfields are assumed to be\~0.
+.
+The subfields are all decimal integers.
+.
+Since there is no associated binary format, these
+values are not required to fit into a variable of type
+.B char
+as they are in ditroff.
+.
+The
+.I width
+subfields gives the width of the glyph.
+.
+The
+.I height
+subfield gives the height of the glyph (upwards is positive);
+if a glyph does not extend above the baseline, it should be
+given a zero height, rather than a negative height.
+.
+The
+.I depth
+subfield gives the depth of the glyph, that is, the distance
+below the baseline to which the glyph extends (downwards is positive);
+if a glyph does not extend below the baseline, it should be
+given a zero depth, rather than a negative depth.
+.
+The
+.I italic-correction
+subfield gives the amount of space that should be added after the
+glyph when it is immediately to be followed by a glyph
+from a roman font.
+.
+The
+.I left-italic-correction
+subfield gives the amount of space that should be added before the
+glyph when it is immediately to be preceded by a glyph
+from a roman font.
+.
+The
+.I subscript-correction
+gives the amount of space that should be added after a glyph
+before adding a subscript.
+.
+This should be less than the italic correction.
+.
+.LP
+A line in the charset section can also have the format
+.
+.IP
+.I name \fB\[dq]
+.
+.LP
+This indicates that
+.I name
+is just another name for the glyph mentioned in the
+preceding line.
+.
+.LP
+The word
+.B kernpairs
+starts the kernpairs section.
+.
+This contains a sequence of lines of the form:
+.
+.IP
+.I c1 c2 n
+.
+.LP
+This means that when glyph
+.I c1
+appears next to glyph
+.I c2
+the space between them should be increased by\~\c
+.IR n .
+.
+Most entries in kernpairs section have a negative value for\~\c
+.IR n .
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.IR @FONTDIR@/dev name /DESC
+Device description file for device
+.IR name .
+.
+.TP
+.IR @FONTDIR@/dev name / F
+Font file for font\~\c
+.I F
+of device
+.IR name .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR groff_out (@MAN5EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR addftinfo (@MAN1EXT@),
+.BR afmtodit (@MAN1EXT@)
+.
+.
+.P
+.\" XXX: Why is this paragraph _here_, of all places?
+A man page
+.IR name ( n )
+of section
+.I n
+can be viewed either with
+.RS
+\[Do]
+.BI man " n name"
+.RE
+for text mode or
+.RS
+\[Do]
+.BI groffer " n name"
+.RE
+for graphical mode (default is PDF mode).
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_font_C]
+.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/man/groff_font.man b/man/groff_font.man
deleted file mode 100644 (file)
index 58da9cd..0000000
+++ /dev/null
@@ -1,726 +0,0 @@
-.\" Emacs mode: -*- nroff -*-
-.TH GROFF_FONT @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_font \- format of groff device and font description files
-.
-.
-.\" --------------------------------------------------------------------
-.\" License
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \(co 1989\-2014 Free Software Foundation, Inc.
-
-This file is part of groff (GNU roff), which is a free software project.
-
-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.
-
-You should have received a copy of the GNU General Public License
-along with this program.  If not, see
-.UR http://www.gnu.org/licenses/gpl-2.0.html
-GPL2
-.UE .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Macro definitions
-.\" --------------------------------------------------------------------
-.
-.do nr groff_font_C \n[.C]
-.cp 0
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.  ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.  el .TP "\\$1"
-..
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The groff font format is roughly a superset of the ditroff
-font format.
-.
-The font files for device
-.I name
-are stored in a directory
-.BI dev name\c
-\&.
-.
-There are two types of file: a device description file called
-.B DESC
-and for each font\~\c
-.I F
-a font file called\~\c
-.IR F .
-.
-These are text files;
-unlike the ditroff font format,
-there is no associated binary format.
-.
-.
-.\" --------------------------------------------------------------------
-.SS DESC file format
-.\" --------------------------------------------------------------------
-.
-The DESC file can contain the following types of line as shown below.
-.
-Later entries in the file override previous values.
-.
-.LP
-Empty lines are ignored.
-.
-.TP
-.B charset
-This line and everything following in the file are ignored.
-.
-It is allowed for the sake of backwards compatibility.
-.
-.TP
-.BI "family " fam
-The default font family is
-.IR fam .
-.
-.TP
-.BI "fonts " "n F1 F2 F3 \|.\|.\|.\| Fn"
-Fonts
-.IR F1 ", \|.\|.\|., " Fn
-are mounted in the font positions
-.IR m "\|+\|1, \|.\|.\|., " m \|+\| n
-where
-.I m
-is the number of styles.
-.
-This command may extend over more than one line.
-.
-A font name of\~\c
-.B 0
-causes no font to be mounted on the corresponding font position.
-.
-.TP
-.BI "hor " n
-The horizontal resolution is
-.IR n \~\c
-machine units.
-.
-.TP
-.BI "image_generator "  string
-Needed for
-.B \%grohtml
-only.
-.
-It specifies the program to generate PNG images from
-PostScript input.
-.
-Under GNU/Linux this is usually
-.I gs
-but under other systems (notably cygwin) it might be set to another name.
-.
-.TP
-.BI "paperlength " n
-The physical vertical dimension of the output medium in machine units.
-.
-This isn\[aq]t used by
-.B troff
-itself but by output devices.
-.
-Deprecated.
-.
-Use
-.B papersize
-instead.
-.
-.TP
-.BI "papersize " string
-Select a paper size.
-.
-Valid values for
-.I string
-are the ISO paper types A0\[en]A7, B0\[en]B7, C0\[en]C7, D0\[en]D7,
-DL, and the US paper
-types letter, legal, tabloid, ledger, statement, executive, com10, and
-monarch.
-.
-Case is not significant for
-.IR string
-if it holds predefined paper types.
-.
-Alternatively,
-.I string
-can be a file name (e.g.\& \[oq]/etc/papersize\[cq]); if the file can
-be opened,
-.B groff
-reads the first line and tests for the above paper sizes.
-.
-Finally,
-.I string
-can be a custom paper size in the format
-.IB length , width
-(no spaces before and after the comma).
-.
-Both
-.I length
-and
-.I width
-must have a unit appended; valid values are \[oq]i\[cq] for inches,
-\[oq]c\[cq] for centimeters, \[oq]p\[cq] for points, and \[oq]P\[cq]
-for picas.
-.
-Example:
-.BR 12c,235p .
-.
-An argument which starts with a digit is always treated as a custom paper
-format.
-.
-.B papersize
-sets both the vertical and horizontal dimension of the output medium.
-.
-.IP
-More than one argument can be specified;
-.B groff
-scans from left to right and uses the first valid paper specification.
-.
-.TP
-.BI "paperwidth " n
-The physical horizontal dimension of the output medium in machine units.
-.
-Deprecated.
-.
-Use
-.B papersize
-instead.
-.
-This isn\[aq]t used by
-.BR troff
-itself but by output devices.
-.
-.TP
-.B pass_filenames
-Make troff tell the driver the source file name being processed.
-.
-This is achieved by another tcommand:
-.BR F \~\c
-.IR filename .
-.
-.TP
-.BI "postpro " program
-Use
-.I program
-as the postprocessor.
-.
-.TP
-.BI "prepro " program
-Call
-.I program
-as a preprocessor.
-.
-.TP
-.BI "print "  program
-Use
-.I program
-as the spooler program for printing.
-.
-If omitted, the
-.B \-l
-and
-.B \-L
-options of
-.B groff
-are ignored.
-.
-.TP
-.BI "res " n
-There are
-.I n
-machine units per inch.
-.
-.TP
-.BI "sizes " "s1 s2 \|.\|.\|.\| sn " 0
-This means that the device has fonts at
-.IR s1 ,
-.IR s2 ", \|.\|.\|., " sn
-scaled points.
-.
-The list of sizes must be terminated by a
-.BR 0 .
-.
-Each
-.I si
-can also be a range of sizes
-.IR m \(en n .
-.
-The list can extend over more than one line.
-.
-.TP
-.BI "sizescale " n
-The scale factor for point sizes.
-.
-By default this has a value of 1.
-.
-One
-.I
-scaled point
-is equal to
-one
-.RI point\|/\| n .
-.
-The arguments to the
-.B unitwidth
-and
-.B sizes
-commands are given in scaled points.
-.
-.TP
-.BI "styles " "S1 S2 \|.\|.\|.\| Sm"
-The first
-.I m
-font positions are associated with styles
-.IR S1 ", \|.\|.\|., " Sm .
-.
-.TP
-.B tcommand
-This means that the postprocessor can handle the
-.B t
-and\~\c
-.B u
-output commands.
-.
-.TP
-.B unicode
-Indicate that the output device supports the complete Unicode
-repertoire.
-.
-Useful only for devices which produce
-.I character entities
-instead of glyphs.
-.
-.IP
-If
-.B unicode
-is present, no
-.B charset
-section is required in the font description files since the Unicode
-handling built into
-.B groff
-is used.
-.
-However, if there are entries in a
-.B charset
-section, they either override the default mappings for those
-particular characters or add new mappings (normally for composite
-characters).
-.
-.IP
-This is used for
-.BR \-Tutf8 ,
-.BR \-Thtml ,
-and
-.BR \-Txhtml .
-.
-.TP
-.BI "unitwidth " n
-Quantities in the font files are given in machine units
-for fonts whose point size is
-.IR n \~\c
-scaled points.
-.
-.TP
-.B unscaled_charwidths
-Make the font handling module always return unscaled glyph widths.
-.
-Needed for the
-.B \%grohtml
-device.
-.
-.TP
-.B use_charnames_in_special
-This command indicates that troff should encode named glyphs inside
-special commands.
-.
-.TP
-.BI "vert " n
-The vertical resolution is
-.IR n \~\c
-machine units.
-.
-.LP
-The
-.BR res ,
-.BR unitwidth ,
-.BR fonts ,
-and
-.B sizes
-lines are compulsory.
-.
-Not all commands in the DESC file are used by
-.B troff
-itself; some of the keywords (or even additional ones) are used by
-postprocessors to store arbitrary information about the device.
-.
-.LP
-Here a list of obsolete keywords which are recognized by
-.B groff
-but completely ignored:
-.BR spare1 ,
-.BR spare2 ,
-.BR biggestfont .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Font file format
-.\" --------------------------------------------------------------------
-.
-A font file has two sections; empty lines are ignored in both of them.
-.
-.LP
-The first section is a sequence of lines each containing a sequence of
-blank delimited words; the first word in the line is a key, and
-subsequent words give a value for that key.
-.
-.TP
-.BI "ligatures " "lig1 lig2 \|.\|.\|.\| lign \fR[" 0 \fR]
-Glyphs
-.IR lig1 ,
-.IR lig2 ", \|.\|.\|., " lign
-are ligatures; possible ligatures are
-.BR ff ,
-.BR fi ,
-.BR fl ,
-.BR ffi ,
-and
-.BR ffl .
-.
-For backwards compatibility, the list of ligatures may be terminated
-with a\~\c
-.BR 0 .
-.
-The list of ligatures may not extend over more than one line.
-.
-.TP
-.BI "name " F
-The name of the font is\~\c
-.IR F .
-.
-.TP
-.BI "slant " n
-The glyphs of the font have a slant of
-.IR n \~\c
-degrees.
-.
-(Positive means forward.)
-.
-.TP
-.BI "spacewidth "  n
-The normal width of a space is\~\c
-.IR n .
-.
-.TP
-.B special
-The font is
-.IR special ;
-this means that when a glyph is requested that is not present in
-the current font, it is searched for in any special fonts that are
-mounted.
-.
-.LP
-Other commands are ignored by
-.B troff
-but may be used by postprocessors to store arbitrary information
-about the font in the font file.
-.
-.LP
-The first section can contain comments which start with the
-.B #
-character and extend to the end of a line.
-.
-.LP
-The second section contains one or two subsections.
-.
-It must contain a
-.I charset
-subsection
-and it may also contain a
-.I kernpairs
-subsection.
-.
-These subsections can appear in any order.
-.
-Each subsection starts with a word on a line by itself.
-.
-.LP
-The word
-.B charset
-starts the charset subsection.
-.
-The
-.B charset
-line is followed by a sequence of lines.
-.
-Each line gives information for one glyph.
-.
-A line comprises a number of fields separated
-by blanks or tabs.
-.
-The format is
-.
-.IP
-.I name metrics type code
-.RI [ entity_name ]
-.RB [ \-\-
-.IR comment ]
-.
-.LP
-.I name
-identifies the glyph:
-if
-.I name
-is a single glyph
-.I c
-then it corresponds to the groff input character
-.IR c ;
-if it is of the form
-.BI \[rs] c
-where c is a single character, then it
-corresponds to the special character
-.BI \[rs][ c ]\fR;
-otherwise it corresponds to the groff input character
-.BI \[rs][ name ]\fR.
-.
-If it is exactly two characters
-.I xx
-it can be entered as
-.BI \[rs]( xx\fR.
-.
-Note that single-letter special characters can\[aq]t be accessed as
-.BI \[rs] c\fR;
-the only exception is \[oq]\[rs]\-\[cq] which is identical to
-\[oq]\[rs][\-]\[cq].
-.
-The name
-.B \-\-\-
-is special and indicates that the glyph is unnamed;
-such glyphs can only be used by means of the
-.B \[rs]N
-escape sequence in
-.BR troff .
-.
-.LP
-The
-.I type
-field gives the glyph type:
-.
-.TP
-1
-means the glyph has a descender, for example, \[oq]p\[cq];
-.
-.TP
-2
-means the glyph has an ascender, for example, \[oq]b\[cq];
-.
-.TP
-3
-means the glyph has both an ascender and a descender, for example,
-\[oq](\[cq].
-.
-.LP
-The
-.I code
-field gives the code which the postprocessor uses to print the glyph.
-.
-The glyph can also be input to groff using this code by means of the
-.B \[rs]N
-escape sequence.
-.
-The code can be any integer.
-.
-If it starts with a\~\c
-.B 0
-it is interpreted as octal;
-if it starts with
-.B 0x
-or
-.B 0X
-it is interpreted as hexadecimal.
-.
-Note, however, that the
-.B \[rs]N
-escape sequence only accepts a decimal integer.
-.
-.LP
-The
-.I entity_name
-field gives an ASCII string identifying the glyph which the
-postprocessor uses to print that glyph.
-.
-This field is optional and is currently used by
-.B grops
-to build sub-encoding arrays for PS fonts containing more than 256
-glyphs.
-.
-(It has also been used for
-.BR \%grohtml \[aq]s
-entity names but for efficiency reasons this data is now compiled
-directly into
-.BR \%grohtml .)
-.
-.LP
-Anything on the line after the encoding field or \[oq]\-\-\[cq] are
-ignored.
-.
-.LP
-The
-.I metrics
-field has the form (in one line; it is broken here for the sake of
-readability):
-.
-.IP
-.I width\c
-.RI [\fB, height\c
-.RI [\fB, depth\c
-.RI [\fB, italic-correction
-.br
-.RI [\fB, left-italic-correction\c
-.RI [\fB, subscript-correction ]]]]]
-.
-.LP
-There must not be any spaces between these subfields.
-.
-Missing subfields are assumed to be\~0.
-.
-The subfields are all decimal integers.
-.
-Since there is no associated binary format, these
-values are not required to fit into a variable of type
-.B char
-as they are in ditroff.
-.
-The
-.I width
-subfields gives the width of the glyph.
-.
-The
-.I height
-subfield gives the height of the glyph (upwards is positive);
-if a glyph does not extend above the baseline, it should be
-given a zero height, rather than a negative height.
-.
-The
-.I depth
-subfield gives the depth of the glyph, that is, the distance
-below the lowest point below the baseline to which the
-glyph extends (downwards is positive);
-if a glyph does not extend below above the baseline, it should be
-given a zero depth, rather than a negative depth.
-.
-The
-.I italic-correction
-subfield gives the amount of space that should be added after the
-glyph when it is immediately to be followed by a glyph
-from a roman font.
-.
-The
-.I left-italic-correction
-subfield gives the amount of space that should be added before the
-glyph when it is immediately to be preceded by a glyph
-from a roman font.
-.
-The
-.I subscript-correction
-gives the amount of space that should be added after a glyph
-before adding a subscript.
-.
-This should be less than the italic correction.
-.
-.LP
-A line in the charset section can also have the format
-.
-.IP
-.I name \fB\[dq]
-.
-.LP
-This indicates that
-.I name
-is just another name for the glyph mentioned in the
-preceding line.
-.
-.LP
-The word
-.B kernpairs
-starts the kernpairs section.
-.
-This contains a sequence of lines of the form:
-.
-.IP
-.I c1 c2 n
-.
-.LP
-This means that when glyph
-.I c1
-appears next to glyph
-.I c2
-the space between them should be increased by\~\c
-.IR n .
-.
-Most entries in kernpairs section have a negative value for\~\c
-.IR n .
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'@FONTDIR@/devname/DESC'u+3n
-.BI @FONTDIR@/dev name /DESC
-Device description file for device
-.IR name .
-.
-.TP
-.BI @FONTDIR@/dev name / F
-Font file for font\~\c
-.I F
-of device
-.IR name .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff_out (@MAN5EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR addftinfo (@MAN1EXT@),
-.BR afmtodit (@MAN1EXT@)
-.
-.
-.P
-A man\-page
-.IR name ( n )
-of section
-.I n
-can be viewed either with
-.RS
-\[Do]
-.BI man " n name"
-.RE
-for text mode or
-.RS
-\[Do]
-.BI "groffer " n  name"
-.RE
-for graphical mode (default is PDF mode).
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.cp \n[groff_font_C]
diff --git a/man/groff_out.5.man b/man/groff_out.5.man
new file mode 100644 (file)
index 0000000..6f1bd18
--- /dev/null
@@ -0,0 +1,2006 @@
+'\" e
+.TH GROFF_OUT @MAN5EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_out \- groff intermediate output format
+.
+.\" groff_out(5):
+.\" Source file position: <groff_source>/man/groff_out.man
+.\" Installed position: <prefix>/share/man/man5/groff_out.5
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_out_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this
+.\" document under the terms of the GNU Free Documentation License,
+.\" Version 1.3 or any later version published by the Free Software
+.\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
+.\" and with no Back-Cover Texts.
+.\"
+.\" A copy of the Free Documentation License is included as a file
+.\" called FDL in the main directory of the groff source package.
+.
+.
+.\" ====================================================================
+.\" Setup
+.\" ====================================================================
+.
+.\" ================= Document configuration
+.
+.\" Number register to decide whether the commands '{' and '}' are used
+.\" 0: disable (actual default); 1: enable
+.nr @USE_ENV_STACK 0
+.
+.ig
+Unfortunately, old versions of groff used an illogical position change
+after some D\~commands (Dp, DP, Dt).  If the number register
+@STUPID_DRAWING_POSITIONING is 1 (actual default) then change position
+after these commands, otherwise the position is not changed.
+..
+.nr @STUPID_DRAWING_POSITIONING 1
+.
+.\" ================= Semantical definitions
+.
+.nr @maxcolor 65536
+.ds @backslash \[rs]\"
+.ds @linebreak \fR\[la]line-break\[ra]\fP\"
+.
+.\" Begin of macro definitions
+.
+.de offset
+.RI ( \,\\$1\/ ,\  \,\\$2\/ )\\$3
+..
+.de indexed_offset
+.offset \fI\\$1\/\fP\d\s-3\\$2\s+3\u\x'\n[.v]/4' \fI\\$3\/\fP\
+\d\s-3\\$4\s+3\u\x'\n[.v]/4' \\$5\x'\n[.v]/4'
+..
+.\" format: .command <name> "<arguments>" <punctuation>
+.de command
+\fB\\$1\fP\ \fI\,\\$2\/\fP\\$3
+..
+.\" format: .D-command <subcommand> "<arguments>"
+.de D-command
+\fBD\\$1\fP\ \fI\,\\$2\/\fP\|\*[@linebreak]
+..
+.
+.\" We set these as troff micromotions rather than eqn because \d and \u
+.\" can be lifted to XML subscript/superscript tags.  Don't change
+.\" these to a parameterized string, man2html won't handle that.
+.ds hv1 \fIh\d\s-3\&1\s+3\u\~v\d\s-3\&1\s+3\u\fP\x'\n[.v]/4'
+.ds hv2 \fIh\d\s-3\&2\s+3\u\~v\d\s-3\&2\s+3\u\fP\x'\n[.v]/4'
+.ds hvn \fIh\d\s-3\&n\s+3\u\~v\d\s-3\&n\s+3\u\fP\x'\n[.v]/4'
+.
+.de Da-command
+\fBDa\fP\ \*[hv1] \*[hv2]\|\*[@linebreak]
+..
+.\" graphics command .D with a variable number of arguments
+.\" format: .D-multiarg <subcommand>
+.de D-multiarg
+\fBD\\$1\fP\ \*[hv1] \*[hv2] .\|.\|. \*[hvn]\|\*[@linebreak]
+..
+.\" format: .x-command <subname> "<arguments>"
+.de x-command
+\fBx\\$1\fP\ \fI\\$2\fP\|\*[@linebreak]
+..
+.de xsub
+.RI "(" "\\$1" " control command)"
+.br
+..
+.\" End of macro definitions
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This manual page describes the
+.I intermediate output
+format of the GNU
+.BR roff (@MAN7EXT@)
+text processing system
+.BR groff (@MAN1EXT@).
+.
+This output is produced by a run of the GNU
+.BR @g@troff (@MAN1EXT@)
+program.
+.
+It contains already all device-specific information, but it is not yet
+fed into a device postprocessor program.
+.
+.
+.P
+As the GNU
+.I roff
+processor
+.BR groff (@MAN1EXT@)
+is a wrapper program around
+.B @g@troff
+that automatically calls a
+postprocessor, this output does not show up normally.
+.
+This is why it is called
+.I intermediate
+within the
+.I groff
+.IR system .
+.
+The
+.B groff
+program provides the option
+.B \-Z
+to inhibit postprocessing, such that the produced
+.I intermediate output
+is sent to standard output just like calling
+.B @g@troff
+manually.
+.
+.
+.P
+In this document, the term
+.I @g@troff output
+describes what is output by the GNU
+.B @g@troff
+program, while
+.I intermediate output
+refers to the language that is accepted by the parser that prepares
+this output for the postprocessors.
+.
+This parser is smarter on whitespace and implements obsolete elements
+for compatibility, otherwise both formats are the same.
+.
+Both formats can be viewed directly with
+.BR \%gxditview (@MAN1EXT@).
+.
+.
+.P
+The main purpose of the
+.I intermediate output
+concept is to facilitate the development of postprocessors by
+providing a common programming interface for all devices.
+.
+It has a language of its own that is completely different from the
+.BR groff (@MAN7EXT@)
+language.
+.
+While the
+.I groff
+language is a high-level programming language for text processing, the
+.I intermediate output
+language is a kind of low-level assembler language by specifying all
+positions on the page for writing and drawing.
+.
+.
+.P
+The
+.RI pre- groff
+.I roff
+versions are denoted as
+.I classical
+.IR troff .
+The
+.I intermediate output
+produced by
+.B groff
+is fairly readable, while
+.I classical troff
+output was hard to understand because of strange habits that are
+still supported, but not used any longer by
+.I GNU
+.IR @g@troff .
+.
+.
+.\" ====================================================================
+.SH "LANGUAGE CONCEPTS"
+.\" ====================================================================
+.
+During the run of
+.BR @g@troff ,
+the
+.I roff
+input is cracked down to the information on what has to be printed at
+what position on the intended device.
+.
+So the language of the
+.I intermediate output
+format can be quite small.
+.
+Its only elements are commands with or without arguments.
+.
+In this document, the term \[lq]command\[rq] always refers to the
+.I intermediate output
+language, never to the
+.I roff
+language used for document formatting.
+.
+There are commands for positioning and text writing, for drawing, and
+for device controlling.
+.
+.
+.\" ====================================================================
+.SS "Separation"
+.\" ====================================================================
+.
+.I Classical troff output
+had strange requirements on whitespace.
+.
+The
+.B groff
+output parser, however, is smart about whitespace by making it
+maximally optional.
+.
+The whitespace characters, i.e., the
+.IR tab ,
+.IR space ,
+and
+.I newline
+characters, always have a syntactical meaning.
+.
+They are never printable because spacing within the output is always
+done by positioning commands.
+.
+.
+.P
+Any sequence of
+.I space
+or
+.I tab
+characters is treated as a single
+.I syntactical
+.IR space .
+.
+It separates commands and arguments, but is only required when there
+would occur a clashing between the command code and the arguments
+without the space.
+.
+Most often, this happens when variable length command names,
+arguments, argument lists, or command clusters meet.
+.
+Commands and arguments with a known, fixed length need not be
+separated by
+.I syntactical
+.IR space .
+.
+.
+.P
+A line break is a syntactical element, too.
+.
+Every command argument can be followed by whitespace, a comment, or a
+newline character.
+.
+Thus a
+.I syntactical line break
+is defined to consist of optional
+.I syntactical space
+that is optionally followed by a comment, and a newline character.
+.
+.
+.P
+The normal commands, those for positioning and text, consist of a
+single letter taking a fixed number of arguments.
+.
+For historical reasons, the parser allows stacking of such commands on
+the same line, but fortunately, in
+.I groff intermediate
+.IR output ,
+every command with at least one argument is followed by a line break,
+thus providing excellent readability.
+.
+.P
+The other commands \[em] those for drawing and device controlling \[em]
+have a more complicated structure; some recognize long command names,
+and some take a variable number of arguments.
+.
+So all
+.B D
+and
+.B x
+commands were designed to request a
+.I syntactical line break
+after their last argument.
+.
+Only one command,
+.RB \[oq] x\ X \[cq]
+has an argument that can stretch over several lines, all other
+commands must have all of their arguments on the same line as the
+command, i.e., the arguments may not be split by a line break.
+.
+.P
+Empty lines, i.e., lines containing only space and/or a comment, can
+occur everywhere.
+.
+They are just ignored.
+.
+.
+.\" ====================================================================
+.SS "Argument Units"
+.\" ====================================================================
+.
+Some commands take integer arguments that are assumed to represent
+values in a measurement unit, but the letter for the corresponding
+.I scale indicator
+is not written with the output command arguments;
+see
+.BR groff (@MAN7EXT@)
+and
+.IR "Groff: The GNU Implementation of troff" ,
+the
+.I groff
+Texinfo manual,
+for more on this topic.
+.
+Most commands assume the scale indicator\~\c
+.BR u ,
+the basic unit of the device, some use\~\c
+.BR z ,
+the
+.I scaled point unit
+of the device, while others, such as the color commands expect plain
+integers.
+.
+Note that these scale indicators are relative to the chosen device.
+.
+They are defined by the parameters specified in the device's
+.I DESC
+file; see
+.BR groff_font (@MAN5EXT@).
+.
+.
+.P
+Note that single characters can have the eighth bit set, as can the
+names of fonts and special characters (this is, glyphs).
+.
+The names of glyphs and fonts can be of arbitrary length.
+.
+A glyph that is to be printed will always be in the current font.
+.
+.
+.P
+A string argument is always terminated by the next whitespace
+character (space, tab, or newline); an embedded
+.B #
+character is regarded as part of the argument, not as the beginning of
+a comment command.
+.
+An integer argument is already terminated by the next non-digit
+character, which then is regarded as the first character of the next
+argument or command.
+.
+.
+.\" ====================================================================
+.SS "Document Parts"
+.\" ====================================================================
+A correct
+.I intermediate output
+document consists of two parts, the
+.I prologue
+and the
+.IR body .
+.
+.P
+The task of the
+.I prologue
+is to set the general device parameters using three exactly specified
+commands.
+.
+The
+.I groff prologue
+is guaranteed to consist of the following three lines (in that order):
+.RS
+.P
+.B x\ T
+.I device
+.br
+.B x\ res
+.I n\ h\ v
+.br
+.B x init
+.RE
+.P
+with the arguments set as outlined in subsection \[lq]Device Control
+Commands\[rq] below.
+.
+However, the parser for the
+.I intermediate output
+format is able to swallow additional whitespace and comments as well.
+.
+.
+.P
+The
+.I body
+is the main section for processing the document data.
+.
+Syntactically, it is a sequence of any commands different from the
+ones used in the
+.IR prologue .
+.
+Processing is terminated as soon as the first
+.B x\ stop
+command is encountered; the last line of any
+.I groff intermediate output
+always contains such a command.
+.
+.
+.P
+Semantically, the
+.I body
+is page oriented.
+.
+A new page is started by a
+.BR p \~command.
+.
+Positioning, writing, and drawing commands are always done within the
+current page, so they cannot occur before the first
+.BR p \~command.
+.
+Absolute positioning (by the
+.B H
+and
+.BR V \~commands)
+is done relative to the current page, all other positioning
+is done relative to the current location within this page.
+.
+.
+.\" ====================================================================
+.SH "COMMAND REFERENCE"
+.\" ====================================================================
+.
+This section describes all
+.I intermediate output
+commands, the classical commands as well as the
+.I groff
+extensions.
+.
+.
+.\" ====================================================================
+.SS "Comment Command"
+.\" ====================================================================
+.
+.TP
+.BI # anything \[la]end-of-line\[ra]
+A comment.
+.
+Ignore any characters from the
+.BR # \~\c
+character up to the next newline character.
+.
+.P
+This command is the only possibility for commenting in the
+.I intermediate
+.IR output .
+.
+Each comment can be preceded by arbitrary
+.I syntactical
+.IR space ;
+every command can be terminated by a comment.
+.
+.
+.\" ====================================================================
+.SS "Simple Commands"
+.\" ====================================================================
+.
+The commands in this subsection have a command code consisting of a
+single character, taking a fixed number of arguments.
+.
+Most of them are commands for positioning and text writing.
+.
+These commands are smart about whitespace.
+.
+Optionally,
+.I syntactical space
+can be inserted before, after, and between the command letter and its
+arguments.
+.
+All of these commands are stackable, i.e., they can be preceded by
+other simple commands or followed by arbitrary other commands on the
+same line.
+.
+A separating
+.I syntactical space
+is only necessary when two integer arguments would clash or if the
+preceding argument ends with a string argument.
+.
+.
+.if \n[@USE_ENV_STACK]=1 \{\
+.TP
+.command {
+Open a new environment by copying the actual device configuration data
+to the environment stack.
+.
+The current environment is setup by the device specification and
+manipulated by the setting commands.
+.
+.
+.TP
+.command }
+Close the actual environment (opened by a preceding
+.BR { \~command)
+and restore the previous environment from the environment
+stack as the actual device configuration data.
+.
+.\}              \" endif @USE_ENV_STACK
+.
+.
+.TP
+.command C xxx \[la]white-space\[ra]
+Print a glyph (special character) named
+.IR xxx .
+.
+The trailing
+.I syntactical space
+or
+.I line break
+is necessary to allow glyph names of arbitrary length.
+.
+The glyph is printed at the current print position; the
+glyph's size is read from the font file.
+.
+The print position is not changed.
+.
+.
+.TP
+.command c c
+Print glyph with single-letter name\~\c
+.I c
+at the current print position;
+the glyph's size is read from the font file.
+.
+The print position is not changed.
+.
+.
+.TP
+.command f n
+Set font to font number\~\c
+.I n
+(a non-negative integer).
+.
+.
+.TP
+.command H n
+Move right to the absolute vertical position\~\c
+.I n
+(a non-negative integer in basic units\~\c
+.BR u )
+relative to left edge of current page.
+.
+.
+.TP
+.command h n
+Move
+.I n
+(a non-negative integer) basic units\~\c
+.B u
+horizontally to the right.
+.
+[CSTR\~#54]
+allows negative values for
+.I n
+also, but
+.I groff
+doesn't use this.
+.
+.
+.TP
+.command m "color-scheme \fR[\fPcomponent .\|.\|.\fR]\fP"
+Set the color for text (glyphs), line drawing, and the outline of
+graphic objects using different color schemes; the analogous command
+for the filling color of graphic objects is
+.BR DF .
+.
+The color components are specified as integer arguments between 0 and
+\n[@maxcolor].
+.
+The number of color components and their meaning vary for the
+different color schemes.
+.
+These commands are generated by the
+.I groff
+escape sequence
+.BR \*[@backslash]m .
+.
+No position changing.
+.
+These commands are a
+.I groff
+extension.
+.
+.
+.RS
+.
+.TP
+.command mc "cyan magenta yellow"
+Set color using the CMY color scheme, having the 3\~color components
+cyan, magenta, and yellow.
+.
+.
+.TP
+.command md
+Set color to the default color value
+(black in most cases).
+.
+No component arguments.
+.
+.
+.TP
+.command mg "gray"
+Set color to the shade of gray given by the argument, an integer
+between 0 (black) and \n[@maxcolor] (white).
+.
+.
+.TP
+.command mk "cyan magenta yellow black"
+Set color using the CMYK color scheme, having the 4\~color components
+cyan, magenta, yellow, and black.
+.
+.TP
+.command mr "red green blue"
+Set color using the RGB color scheme, having the 3\~color components
+red, green, and blue.
+.
+.RE
+.
+.
+.TP
+.command N n
+Print glyph with index\~\c
+.I n
+(an integer, normally non-negative) of the current font.
+.
+The print position is not changed.
+.
+If
+.B \-T\~html
+or
+.B \-T\~xhtml
+is used, negative values are emitted also to indicate an unbreakable
+space with given width.
+.
+For example,
+.B N\~\-193
+represents an unbreakable space which has a width of 193\|u.
+.
+This command is a
+.I groff
+extension.
+.
+.
+.TP
+.command n b\ a
+Inform the device about a line break, but no positioning is done by
+this command.
+.
+In
+.I classical
+.IR troff ,
+the integer arguments
+.I b
+and\~\c
+.I a
+informed about the space before and after the current line to
+make the
+.I intermediate output
+more human readable without performing any action.
+.
+In
+.IR groff ,
+they are just ignored, but they must be provided for compatibility
+reasons.
+.
+.
+.TP
+.command p n
+Begin a new page in the outprint.
+.
+The page number is set to\~\c
+.IR n .
+.
+This page is completely independent of pages formerly processed even
+if those have the same page number.
+.
+The vertical position on the outprint is automatically set to\~0.
+.
+All positioning, writing, and drawing is always done relative to a
+page, so a
+.BR p \~command
+must be issued before any of these commands.
+.
+.
+.TP
+.command s n
+Set point size to
+.I n
+scaled points
+(this is unit\~\c
+.B z
+in GNU
+.BR @g@troff ).
+.
+.I Classical troff
+used the unit
+.I points
+(\c
+.BR p )
+instead;
+see section \[lq]Compatibility\[rq] below.
+.
+.
+.TP
+.command t xyz\|.\|.\|. \[la]white-space\[ra]
+.TQ
+.command t "xyz\|.\|.\|.\& dummy-arg" \[la]white-space\[ra]
+Print a word, i.e., a sequence of glyphs with single-letter names
+.IR x ,
+.IR y ,
+.IR z ,
+etc., terminated by a space character or a line break; an optional
+second integer argument is ignored (this allows the formatter to
+generate an even number of arguments).
+.
+The first glyph should be printed at the current position, the
+current horizontal position should then be increased by the width of
+the first glyph, and so on for each glyph.
+.
+The widths of the glyph are read from the font file, scaled for the
+current point size, and rounded to a multiple of the horizontal
+resolution.
+.
+Special characters (glyphs with names longer than a single letter)
+cannot be printed using this command; use the
+.B C
+command for those glyphs.
+.
+This command is a
+.I groff
+extension; it is only used for devices whose
+.I DESC
+file contains the
+.B tcommand
+keyword; see
+.BR groff_font (@MAN5EXT@).
+.
+.
+.TP
+.command u "n xyz\|.\|.\|." \[la]white-space\[ra]
+Print word with track kerning.
+.
+This is the same as the
+.B t
+command except that after printing each glyph, the current
+horizontal position is increased by the sum of the width of that
+glyph and\~\c
+.I n
+(an integer in
+basic units\~\c
+.BR u ).
+This command is a
+.I groff
+extension; it is only used for devices whose
+.I DESC
+file contains the
+.B tcommand
+keyword; see
+.BR groff_font (@MAN5EXT@).
+.
+.
+.TP
+.command V n
+Move down to the absolute vertical position\~\c
+.I n
+(a non-negative integer in basic units\~\c
+.BR u )
+relative to upper edge of current page.
+.
+.
+.TP
+.command v n
+Move
+.I n
+basic units\~\c
+.B u
+down
+.RI ( n
+is a non-negative integer).
+.
+[CSTR\~#54]
+allows negative values for
+.I n
+also, but
+.I groff
+doesn't use this.
+.
+.
+.TP
+.command w
+Informs about a paddable whitespace to increase readability.
+.
+The spacing itself must be performed explicitly by a move command.
+.
+.
+.\" ====================================================================
+.SS "Graphics Commands"
+.\" ====================================================================
+.
+Each graphics or drawing command in the
+.I intermediate output
+starts with the letter\~\c
+.B D
+followed by one or two characters that specify a subcommand; this
+is followed by a fixed or variable number of integer arguments that
+are separated by a single space character.
+.
+A
+.BR D \~command
+may not be followed by another command on the same line (apart from a
+comment), so each
+.BR D \~command
+is terminated by a
+.I syntactical line
+.IR break .
+.
+.
+.P
+.B @g@troff
+output follows the classical spacing rules (no space between command
+and subcommand, all arguments are preceded by a single space
+character), but the parser allows optional space between the command
+letters and makes the space before the first argument optional.
+.
+As usual, each space can be any sequence of tab and space characters.
+.
+.
+.P
+Some graphics commands can take a variable number of arguments.
+.
+In this case, they are integers representing a size measured in basic
+units\~\c
+.BR u .
+.
+The
+.I h
+arguments
+stand for horizontal distances where positive means right, negative
+left.
+.
+The
+.I v
+arguments
+stand for vertical distances where positive means down, negative up.
+.
+All these distances are offsets relative to the current location.
+.
+.
+.P
+Unless indicated otherwise, each graphics command directly corresponds
+to a similar
+.I groff
+.B \*[@backslash]D
+escape sequence; see
+.BR groff (@MAN7EXT@).
+.
+.
+.P
+Unknown
+.BR D \~commands
+are assumed to be device-specific.
+.
+Its arguments are parsed as strings; the whole information is then
+sent to the postprocessor.
+.
+.
+.P
+In the following command reference, the syntax element
+.I \[la]line-break\[ra]
+means a
+.I syntactical line break
+as defined in subsection \[lq]Separation\[rq] above.
+.
+.
+.TP
+.D-multiarg \[ti]
+Draw B-spline from current position to offset
+.indexed_offset h 1 v 1 ,
+then to offset
+.indexed_offset h 2 v 2
+if given, etc., up to
+.indexed_offset h n v n .
+This command takes a variable number of argument pairs; the current
+position is moved to the terminal point of the drawn curve.
+.
+.
+.TP
+.Da-command
+Draw arc from current position to
+.indexed_offset h 1 v 1 \|+\|\c
+.indexed_offset h 2 v 2
+with center at
+.indexed_offset h 1 v 1 ;
+then move the current position to the final point of the arc.
+.
+.
+.TP
+.D-command C d
+.TQ
+.D-command C "d dummy-arg"
+Draw a solid circle using the current fill color with diameter\~\c
+.I d
+(integer in basic units\~\c
+.BR u )
+with leftmost point at the current position; then move the current
+position to the rightmost point of the circle.
+.
+An optional second integer argument is ignored (this allows the
+formatter to generate an even number of arguments).
+.
+This command is a
+.I groff
+extension.
+.
+.
+.TP
+.D-command c d
+Draw circle line with diameter\~\c
+.I d
+(integer in basic units\~\c
+.BR u )
+with leftmost point at the current position; then move the current
+position to the rightmost point of the circle.
+.
+.
+.TP
+.D-command E "h v"
+Draw a solid ellipse in the current fill color with a horizontal
+diameter of\~\c
+.I h
+and a vertical diameter of\~\c
+.I v
+(both integers in basic units\~\c
+.BR u )
+with the leftmost point at the current position; then move to the
+rightmost point of the ellipse.
+.
+This command is a
+.I groff
+extension.
+.
+.
+.TP
+.D-command e "h v"
+Draw an outlined ellipse with a horizontal diameter of\~\c
+.I h
+and a vertical diameter of\~\c
+.I v
+(both integers in basic units\~\c
+.BR u )
+with the leftmost point at current position; then move to the
+rightmost point of the ellipse.
+.
+.
+.TP
+.D-command F "color-scheme \fR[\fPcomponent .\|.\|.\fR]\fP"
+Set fill color for solid drawing objects using different color
+schemes; the analogous command for setting the color of text, line
+graphics, and the outline of graphic objects is
+.BR m .
+.
+The color components are specified as integer arguments between 0 and
+\n[@maxcolor].
+.
+The number of color components and their meaning vary for the
+different color schemes.
+.
+These commands are generated by the
+.I groff
+escape sequences
+.BR \*[@backslash]D'F\  .\|.\|. '
+and
+.B \*[@backslash]M
+(with no other corresponding graphics commands).
+.
+No position changing.
+.
+This command is a
+.I groff
+extension.
+.
+.
+.RS
+.
+.TP
+.D-command Fc "cyan magenta yellow"
+Set fill color for solid drawing objects using the CMY color scheme,
+having the 3\~color components cyan, magenta, and yellow.
+.
+.
+.TP
+.D-command Fd
+Set fill color for solid drawing objects to the default fill color value
+(black in most cases).
+.
+No component arguments.
+.
+.
+.TP
+.D-command Fg "gray"
+Set fill color for solid drawing objects to the shade of gray given by
+the argument, an integer between 0 (black) and \n[@maxcolor] (white).
+.
+.
+.TP
+.D-command Fk "cyan magenta yellow black"
+Set fill color for solid drawing objects using the CMYK color scheme,
+having the 4\~color components cyan, magenta, yellow, and black.
+.
+.TP
+.D-command Fr "red green blue"
+Set fill color for solid drawing objects using the RGB color scheme,
+having the 3\~color components red, green, and blue.
+.
+.RE
+.
+.
+.TP
+.D-command f n
+The argument
+.I n
+must be an integer in the range \-32767 to 32767.
+.
+.RS
+.TP
+.RI 0\|\[<=]\| n \|\[<=]\|1000
+Set the color for filling solid drawing objects to a shade of gray,
+where 0 corresponds to solid white, 1000 (the default) to solid black,
+and values in between to intermediate shades of gray; this is
+obsoleted by command
+.BR DFg .
+.
+.TP
+.IR n "\|<\|0 or " n \|>\|1000
+Set the filling color to the color that is currently being used for
+the text and the outline, see command
+.BR m .
+For example, the command sequence
+.
+.RS
+.IP
+.EX
+mg 0 0 \n[@maxcolor]
+Df \-1
+.EE
+.RE
+.
+.IP
+sets all colors to blue.
+.
+.P
+No position changing.
+.
+This command is a
+.I groff
+extension.
+.
+.RE
+.
+.
+.TP
+.D-command l "h v"
+Draw line from current position to offset
+.offset h v
+(integers in basic units\~\c
+.BR u );
+then set current position to the end of the drawn line.
+.
+.
+.TP
+.D-multiarg p
+Draw a polygon line from current position to offset
+.indexed_offset h 1 v 1 ,
+from there to offset
+.indexed_offset h 2 v 2 ,
+etc., up to offset
+.indexed_offset h n v n ,
+and from there back to the starting position.
+.
+.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
+For historical reasons, the position is changed by adding the sum of
+all arguments with odd index to the actual horizontal position and the
+even ones to the vertical position.
+.
+Although this doesn't make sense it is kept for compatibility.
+.
+.\}
+.el \{\
+As the polygon is closed, the end of drawing is the starting point, so
+the position doesn't change.
+.\}
+.
+This command is a
+.I groff
+extension.
+.
+.
+.TP
+.D-multiarg P
+The same macro as the corresponding
+.B Dp
+command with the same arguments, but draws a solid polygon in the
+current fill color rather than an outlined polygon.
+.
+.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
+The position is changed in the same way as with
+.BR Dp .
+.\}
+.el \
+No position changing.
+.
+This command is a
+.I groff
+extension.
+.
+.
+.TP
+.D-command t n
+Set the current line thickness to\~\c
+.I n
+(an integer in basic units\~\c
+.BR u )
+if
+.IR n \|>\|0;
+if
+.IR n \|=\|0
+select the smallest available line thickness; if
+.IR n \|<\|0
+set the line thickness proportional to the point size (this is the
+default before the first
+.B Dt
+command was specified).
+.
+.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
+For historical reasons, the horizontal position is changed by adding
+the argument to the actual horizontal position, while the vertical
+position is not changed.
+.
+Although this doesn't make sense it is kept for compatibility.
+.
+.\}
+.el \
+No position changing.
+.
+This command is a
+.I groff
+extension.
+.
+.
+.\" ====================================================================
+.SS "Device Control Commands"
+.\" ====================================================================
+.
+Each device control command starts with the letter
+.B x
+followed by a space character (optional or arbitrary space/\:tab in
+.IR groff )
+and a subcommand letter or word; each argument (if any) must be
+preceded by a
+.I syntactical
+.IR space .
+.
+All
+.B x
+commands are terminated by a
+.IR "syntactical line break" ;
+no device control command can be followed by another command on the same
+line (except a comment).
+.
+.P
+The subcommand is basically a single letter, but to increase
+readability, it can be written as a word, i.e., an arbitrary sequence
+of characters terminated by the next tab, space, or newline character.
+.
+All characters of the subcommand word but the first are simply ignored.
+.
+For example,
+.B @g@troff
+outputs the initialization command
+.B x\ i
+as
+.B x\ init
+and the resolution command
+.B x\ r
+as
+.BR "x\ res" .
+.
+But writings like
+.B x\ i_like_groff
+and
+.B x\ roff_is_groff
+are accepted as well to mean the same commands.
+.
+.P
+In the following, the syntax element
+.I \[la]line-break\[ra]
+means a
+.I syntactical line break
+as defined in subsection \[lq]Separation\[rq] above.
+.
+.TP
+.x-command F name
+.xsub Filename
+Use
+.I name
+as the intended name for the current file in error reports.
+.
+This is useful for remembering the original file name when
+.B groff
+uses an internal piping mechanism.
+.
+The input file is not changed by this command.
+.
+This command is a
+.I groff
+extension.
+.
+.
+.TP
+.x-command f "n\ s"
+.xsub font
+Mount font position\~\c
+.I n
+(a non-negative integer) with font named\~\c
+.I s
+(a text word);
+see
+.BR groff_font (@MAN5EXT@).
+.
+.
+.TP
+.x-command H n
+.xsub Height
+Set character height to\~\c
+.I n
+(a positive integer in scaled points\~\c
+.BR z ).
+.
+.I Classical troff
+used the unit points (\c
+.BR p )
+instead;
+see section \[lq]Compatibility\[rq] below.
+.
+.
+.TP
+.x-command i
+.xsub init
+Initialize device.
+.
+This is the third command of the
+.IR prologue .
+.
+.
+.TP
+.x-command p
+.xsub pause
+Parsed but ignored.
+.
+The classical documentation reads
+.I pause device, can be
+.IR restarted .
+.
+.
+.TP
+.x-command r "n\ h\ v"
+.xsub resolution
+Resolution is\~\c
+.IR n ,
+while
+.I h
+is the minimal horizontal motion, and
+.I v
+the minimal vertical motion possible with this device; all arguments
+are positive integers in basic units\~\c
+.B u
+per inch.
+.
+This is the second command of the
+.IR prologue .
+.
+.
+.TP
+.x-command S n
+.xsub Slant
+Set slant to\~\c
+.I n
+degrees (an integer in basic units\~\c
+.BR u ).
+.
+.
+.TP
+.x-command s
+.xsub stop
+Terminates the processing of the current file; issued as the last
+command of any
+.I intermediate @g@troff
+.IR output .
+.
+.
+.TP
+.x-command t
+.xsub trailer
+Generate trailer information, if any.
+.
+In
+.BR groff ,
+this is actually just ignored.
+.
+.
+.TP
+.x-command T xxx
+.xsub Typesetter
+Set name of device to word
+.IR xxx ,
+a sequence of characters ended by the next whitespace character.
+.
+The possible device names coincide with those from the groff
+.B \-T
+option.
+.
+This is the first command of the
+.IR prologue .
+.
+.
+.TP
+.x-command u n
+.xsub underline
+Configure underlining of spaces.
+.
+If
+.I n
+is\~1, start underlining of spaces;
+if
+.I n
+is\~0, stop underlining of spaces.
+.
+This is needed for the
+.B cu
+request in
+.B @g@nroff
+mode and is ignored otherwise.
+.
+This command is a
+.I groff
+extension.
+.
+.
+.TP
+.x-command X anything
+.xsub X-escape
+Send string
+.I anything
+uninterpreted to the device.
+.
+If the line following this command starts with a
+.B +
+character this line is interpreted as a continuation line in the
+following sense.
+.
+The
+.B +
+is ignored, but a newline character is sent instead to the device, the
+rest of the line is sent uninterpreted.
+.
+The same applies to all following lines until the first character of a
+line is not a
+.B +
+character.
+.
+This command is generated by the
+.I groff
+escape sequence
+.BR \*[@backslash]X .
+.
+The line-continuing feature is a
+.I groff
+extension.
+.
+.
+.\" ====================================================================
+.SS "Obsolete Command"
+.\" ====================================================================
+.
+In
+.I classical troff
+output, emitting a single glyph was mostly done by a very
+strange command that combined a horizontal move and the printing of a
+glyph.
+.
+It didn't have a command code, but is represented by a 3-character
+argument consisting of exactly 2\~digits and a character.
+.
+.TP
+.I ddc
+Move right
+.I dd
+(exactly two decimal digits) basic units\~\c
+.BR u ,
+then print glyph with single-letter name\~\c
+.IR c .
+.
+.
+.RS
+.P
+In
+.IR groff ,
+arbitrary
+.I syntactical space
+around and within this command is allowed to be added.
+.
+Only when a preceding command on the same line ends with an argument
+of variable length a separating space is obligatory.
+.
+In
+.I classical
+.IR troff ,
+large clusters of these and other commands were used, mostly without
+spaces; this made such output almost unreadable.
+.
+.RE
+.
+.
+.P
+For modern high-resolution devices, this command does not make sense
+because the width of the glyphs can become much larger than two
+decimal digits.
+.
+In
+.BR groff ,
+this is only used for the devices
+.BR X75 ,
+.BR X75-12 ,
+.BR X100 ,
+and
+.BR X100-12 .
+.
+For other devices,
+the commands
+.B t
+and\~\c
+.B u
+provide a better functionality.
+.
+.
+.\" ====================================================================
+.SH "POSTPROCESSING"
+.\" ====================================================================
+.
+The
+.I roff
+postprocessors are programs that have the task to translate the
+.I intermediate output
+into actions that are sent to a device.
+.
+A device can be some piece of hardware such as a printer, or a software
+file format suitable for graphical or text processing.
+.
+The
+.I groff
+system provides powerful means that make the programming of such
+postprocessors an easy task.
+.P
+There is a library function that parses the
+.I intermediate output
+and sends the information obtained to the device via methods of a
+class with a common interface for each device.
+.
+So a
+.I groff
+postprocessor must only redefine the methods of this class.
+.
+For details,
+see the reference in section \[lq]Files\[rq] below.
+.
+.
+.\" ====================================================================
+.SH "EXAMPLES"
+.\" ====================================================================
+.
+This section presents the
+.I intermediate output
+generated from the same input for three different devices.
+.
+The input is the sentence
+.I hell world
+fed into
+.B groff
+on the command line.
+.
+.
+.IP \[bu] 2m
+High-resolution device
+.I ps
+.
+.
+.RS
+.P
+.EX
+\fBshell>\fP echo "hell world" | groff \-Z \-T ps
+.EE
+.
+.
+.P
+.nf
+.ft CB
+x T ps
+x res 72000 1 1
+x init
+p1
+x font 5 TR
+f5
+s10000
+V12000
+H72000
+thell
+wh2500
+tw
+H96620
+torld
+n12000 0
+x trailer
+V792000
+x stop
+.ft P
+.fi
+.RE
+.
+.
+.P
+This output can be fed into the postprocessor
+.BR grops (@MAN1EXT@)
+to get its representation as a PostScript file, or
+.BR gropdf (@MAN1EXT@)
+to output directly to PDF.
+.
+.
+.IP \[bu] 2m
+Low-resolution device
+.I latin1
+.
+.
+.RS
+.P
+This is similar to the high-resolution device except that the
+positioning is done at a minor scale.
+.
+Some comments (lines starting with
+.IR # )
+were added for clarification; they were not generated by the
+formatter.
+.
+.
+.P
+.EX
+\fBshell>\fP "hell world" | groff \-Z \-T latin1
+.EE
+.
+.
+.P
+.nf
+.I "# prologue"
+.ft CB
+x T latin1
+x res 240 24 40
+x init
+.I "# begin a new page"
+.ft CB
+p1
+.I "# font setup"
+.ft CB
+x font 1 R
+f1
+s10
+.I "# initial positioning on the page"
+.ft CB
+V40
+H0
+.I "# write text \[oq]hell\[cq]"
+.ft CB
+thell
+.I "# inform about a space, and do it by a horizontal jump"
+.ft CB
+wh24
+.I "# write text \[oq]world\[cq]"
+.ft CB
+tworld
+.I "# announce line break, but do nothing because ..."
+.ft CB
+n40 0
+.I "# ... the end of the document has been reached"
+.ft CB
+x trailer
+V2640
+x stop
+.ft P
+.fi
+.RE
+.
+.
+.P
+This output can be fed into the postprocessor
+.BR grotty (@MAN1EXT@)
+to get a formatted text document.
+.
+.
+.IP \[bu] 2m
+Classical style output
+.
+.
+.RS
+.P
+As a computer monitor has a very low resolution compared to modern
+printers the
+.I intermediate output
+for the X\~devices can use the jump-and-write command with its 2-digit
+displacements.
+.
+.
+.P
+.EX
+\fBshell>\fP "hell world" | groff \-Z \-T X100
+.EE
+.
+.
+.P
+.nf
+.ft CB
+x T X100
+x res 100 1 1
+x init
+p1
+x font 5 TR
+f5
+s10
+V16
+H100
+.I "# write text with old-style jump-and-write command"
+.ft CB
+ch07e07l03lw06w11o07r05l03dh7
+n16 0
+x trailer
+V1100
+x stop
+.ft P
+.fi
+.RE
+.
+.
+.P
+This output can be fed into the postprocessor
+.BR \%xditview (1x)
+or
+.BR \%gxditview (@MAN1EXT@)
+for displaying in\~X.
+.
+.
+.P
+Due to the obsolete jump-and-write command, the text clusters in the
+classical output are almost unreadable.
+.
+.
+.\" ====================================================================
+.SH "COMPATIBILITY"
+.\" ====================================================================
+.
+The
+.I intermediate output
+language of the
+.I classical troff
+was first documented in
+[CSTR\~#97] .
+.
+The
+.I groff intermediate output
+format is compatible with this specification except for the following
+features.
+.
+.
+.IP \[bu] 2m
+The classical quasi device independence is not yet implemented.
+.
+.
+.IP \[bu] 2m
+The old hardware was very different from what we use today.
+.
+So the
+.I groff
+devices are also fundamentally different from the ones in
+.I classical
+.IR troff .
+.
+For example, the classical PostScript device was called
+.I post
+and had a resolution of 720 units per inch,
+while
+.IR groff 's
+.I ps
+device has a resolution of 72000 units per inch.
+.
+Maybe, by implementing some rescaling mechanism similar to the
+classical quasi device independence, these could be integrated into
+modern
+.IR groff .
+.
+.
+.IP \[bu] 2m
+The B-spline command
+.B D\[ti]
+is correctly handled by the
+.I intermediate output
+parser, but the drawing routines aren't implemented in some of the
+postprocessor programs.
+.
+.
+.IP \[bu] 2m
+The argument of the commands
+.B s
+and
+.B x H
+has the implicit unit scaled point\~\c
+.B z
+in
+.IR groff ,
+while
+.I classical troff
+had point (\c
+.BR p ).
+.
+This isn't an incompatibility, but a compatible extension, for both
+units coincide for all devices without a
+.I sizescale
+parameter, including all classical and the
+.I groff
+text devices.
+.
+The few
+.I groff
+devices with a sizescale parameter either did not exist, had a
+different name, or seem to have had a different resolution.
+.
+So conflicts with classical devices are very unlikely.
+.
+.
+.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
+.IP \[bu] 2m
+The position changing after the commands
+.BR Dp ,
+.BR DP ,
+and
+.B Dt
+is illogical, but as old versions of groff used this feature it is
+kept for compatibility reasons.
+.\}             \" @STUPID_DRAWING_POSITIONING
+.el \{\
+.IP \[bu] 2m
+Temporarily, there existed some confusion on the positioning after the
+.B D
+commands that are
+.I groff
+extensions.
+.
+This has been clarified by establishing the classical rule for all
+groff drawing commands:
+.
+.
+.RS
+.P
+.ft I
+The position after a graphic object has been drawn is at its end;
+for circles and ellipses, the "end" is at the right side.
+.ft
+.RE
+.
+.
+.P
+From this, the positionings specified for the drawing commands above
+follow quite naturally.
+.\}             \" @STUPID_DRAWING_POSITIONING
+.
+.P
+The differences between
+.I groff
+and
+.I classical troff
+are documented in
+.BR groff_diff (@MAN7EXT@).
+.
+.
+.\" ====================================================================
+.SH "FILES"
+.\" ====================================================================
+.
+.TP
+.IR @FONTDIR@/dev name /DESC
+Device description file for device
+.IR name .
+.
+.TP
+.I src/libs/libdriver/input.cpp
+Defines the parser and postprocessor for the
+.I intermediate
+.IR output .
+.
+It is located relative to the top directory of the
+.I groff
+source tree.
+.
+This parser is the definitive specification of the
+.I groff intermediate output
+format.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+James Clark wrote an early version of this document, which described
+only the differences between
+.BR ditroff (7)'s
+output format and that of GNU
+.IR roff .
+.
+The present version was completely rewritten in 2001 by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+A reference like
+.BR groff (@MAN7EXT@)
+refers to a manual page; here
+.B groff
+in section\~\c
+.I @MAN7EXT@
+of the man page documentation system.
+.
+To read the example, look up section\~@MAN7EXT@ in your desktop help
+system or call from the shell prompt
+.
+.
+.RS
+.P
+.EX
+\fBshell>\fP man @MAN7EXT@ groff
+.EE
+.RE
+.
+.
+.P
+For more details, see
+.BR man (1).
+.
+.
+.TP
+.BR groff (@MAN1EXT@)
+option
+.B \-Z
+and further readings on groff.
+.
+.
+.TP
+.BR groff (@MAN7EXT@)
+for details of the
+.I groff
+language such as numerical units and escape sequences.
+.
+.
+.TP
+.BR groff_font (@MAN5EXT@)
+for details on the device scaling parameters of the
+.I DESC
+file.
+.
+.
+.TP
+.BR @g@troff (@MAN1EXT@)
+generates the device-independent intermediate output.
+.
+.
+.TP
+.BR roff (@MAN7EXT@)
+for historical aspects and the general structure of roff systems.
+.
+.
+.TP
+.BR groff_diff (@MAN7EXT@)
+The differences between the intermediate output in groff and classical
+troff.
+.
+.
+.TP
+.BR gxditview (@MAN1EXT@)
+Viewer for the
+.I intermediate
+.IR output .
+.
+.
+.P
+.BR \%grodvi (@MAN1EXT@),
+.BR \%grohtml (@MAN1EXT@),
+.BR \%grolbp (@MAN1EXT@),
+.BR \%grolj4 (@MAN1EXT@),
+.BR \%grops (@MAN1EXT@),
+.BR \%grotty (@MAN1EXT@)
+.br
+.RS
+the groff postprocessor programs.
+.RE
+.
+.
+.P
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg,
+is the primary
+.I groff
+manual.
+.
+You can browse it interactively with \[lq]info groff\[rq].
+.
+.
+.P
+The
+.I classical troff output language
+is described in two AT&T Bell Labs CSTR documents available on-line at
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr.html
+Bell Labs CSTR site
+.UE .
+.
+.
+.TP
+[CSTR #97]
+.I A Typesetter-independent TROFF
+by
+.I Brian Kernighan
+is the original and most comprehensive documentation on the output
+language; see
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz
+CSTR\~#97
+.UE .
+.
+.
+.TP
+[CSTR\~#54]
+The 1992 revision of the
+.I Nroff/\:Troff User's Manual
+by
+.I J.\& F.\& Ossanna
+and
+.I Brian Kernighan
+isn't as comprehensive as
+[CSTR\~#97]
+regarding the output language; see
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz
+CSTR\~#54
+.UE .
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_out_C]
+.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/man/groff_out.man b/man/groff_out.man
deleted file mode 100644 (file)
index f9ef631..0000000
+++ /dev/null
@@ -1,2011 +0,0 @@
-'\" e
-.\" The above line should force the use of eqn as a preprocessor
-.TH GROFF_OUT @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_out \- groff intermediate output format
-.
-.\" groff_out(5):
-.\" Source file position: <groff_source>/man/groff_out.man
-.\" Installed position: <prefix>/share/man/man5/groff_out.5
-.
-.
-.\" --------------------------------------------------------------------
-.\" License and authors
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-This file is part of groff, the GNU roff type-setting system, which is
-a free software project.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Invariant Sections, with no Front-Cover Texts, and with no Back-Cover
-Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package, it is also
-available in the internet at
-.UR http://\:www.gnu.org/\:copyleft/\:fdl.html
-GNU FDL license
-.UE .
-..
-.
-.de au
-In 2001, this document was rewritten from scrach by
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME .
-..
-.
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.\" ----------------- Document configuration
-.
-.\" Number register to decide whether the commands `{' and `}' are used
-.\" 0: disable (actual default); 1: enable
-.nr @USE_ENV_STACK 0
-.
-.ig
-Unfortunately, old versions of groff used an illogical position change
-after some D\~commands (Dp, DP, Dt).  If the number register
-@STUPID_DRAWING_POSITIONING is 1 (actual default) then change position
-after these commands, otherwise the position is not changed.
-..
-.nr @STUPID_DRAWING_POSITIONING 1
-.
-.\" ----------------- Semantical definitions
-.
-.nr @maxcolor 65536
-.ds @backslash \[rs]\"
-.ds @linebreak \fR\[la]line-break\[ra]\fP\"
-.
-.\" Begin of macro definitions
-.
-.de offset
-.RI ( \,\\$1\/ ,\  \,\\$2\/ )\\$3
-..
-.de indexed_offset
-.offset \fI\\$1\/\fP\d\s-3\\$2\s+3\u\x'\n[.v]/4' \fI\\$3\/\fP\d\s-3\\$4\s+3\u\x'\n[.v]/4' \\$5\x'\n[.v]/4'
-..
-.\" format: .command <name> "<arguments>" <punctuation>
-.de command
-\fB\\$1\fP\ \fI\,\\$2\/\fP\\$3
-..
-.\" format: .D-command <subcommand> "<arguments>"
-.de D-command
-\fBD\\$1\fP\ \fI\,\\$2\/\fP\|\*[@linebreak]
-..
-.
-.\" We set these as troff micromotions rather than eqn because \d and \u
-.\" can be lifted to XML subscript/superscript tags.  Don't change
-.\" these to a parameterized string, man2html won't handle that.
-.ds hv1 \fIh\d\s-3\&1\s+3\u\~v\d\s-3\&1\s+3\u\fP\x'\n[.v]/4'
-.ds hv2 \fIh\d\s-3\&2\s+3\u\~v\d\s-3\&2\s+3\u\fP\x'\n[.v]/4'
-.ds hvn \fIh\d\s-3\&n\s+3\u\~v\d\s-3\&n\s+3\u\fP\x'\n[.v]/4'
-.
-.de Da-command
-\fBDa\fP\ \*[hv1] \*[hv2]\|\*[@linebreak]
-..
-.\" graphics command .D with a variable number of arguments
-.\" format: .D-multiarg <subcommand>
-.de D-multiarg
-\fBD\\$1\fP\ \*[hv1] \*[hv2] .\|.\|. \*[hvn]\|\*[@linebreak]
-..
-.\" format: .x-command <subname> "<arguments>"
-.de x-command
-\fBx\\$1\fP\ \fI\\$2\fP\|\*[@linebreak]
-..
-.de xsub
-.RI "(" "\\$1" " control command)"
-.br
-..
-.\" End of macro definitions
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the
-.I intermediate output
-format of the GNU
-.BR roff (@MAN7EXT@)
-text processing system
-.BR groff (@MAN1EXT@).
-.
-This output is produced by a run of the GNU
-.BR @g@troff (@MAN1EXT@)
-program.
-.
-It contains already all device-specific information, but it is not yet
-fed into a device postprocessor program.
-.
-.
-.P
-As the GNU
-.I roff
-processor
-.BR groff (@MAN1EXT@)
-is a wrapper program around
-.B @g@troff
-that automatically calls a
-postprocessor, this output does not show up normally.
-.
-This is why it is called
-.I intermediate
-within the
-.I groff
-.IR system .
-.
-The
-.B groff
-program provides the option
-.B \-Z
-to inhibit postprocessing, such that the produced
-.I intermediate output
-is sent to standard output just like calling
-.B @g@troff
-manually.
-.
-.
-.P
-In this document, the term
-.I @g@troff output
-describes what is output by the GNU
-.B @g@troff
-program, while
-.I intermediate output
-refers to the language that is accepted by the parser that prepares
-this output for the postprocessors.
-.
-This parser is smarter on whitespace and implements obsolete elements
-for compatibility, otherwise both formats are the same.
-.
-Both formats can be viewed directly with
-.BR \%gxditview (@MAN1EXT@).
-.
-.
-.P
-The main purpose of the
-.I intermediate output
-concept is to facilitate the development of postprocessors by
-providing a common programming interface for all devices.
-.
-It has a language of its own that is completely different from the
-.BR groff (@MAN7EXT@)
-language.
-.
-While the
-.I groff
-language is a high-level programming language for text processing, the
-.I intermediate output
-language is a kind of low-level assembler language by specifying all
-positions on the page for writing and drawing.
-.
-.
-.P
-The
-.RI pre- groff
-.I roff
-versions are denoted as
-.I classical
-.IR troff .
-The
-.I intermediate output
-produced by
-.B groff
-is fairly readable, while
-.I classical troff
-output was hard to understand because of strange habits that are
-still supported, but not used any longer by
-.I GNU
-.IR @g@troff .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "LANGUAGE CONCEPTS"
-.\" --------------------------------------------------------------------
-.
-During the run of
-.BR @g@troff ,
-the
-.I roff
-input is cracked down to the information on what has to be printed at
-what position on the intended device.
-.
-So the language of the
-.I intermediate output
-format can be quite small.
-.
-Its only elements are commands with or without arguments.
-.
-In this document, the term \[lq]command\[rq] always refers to the
-.I intermediate output
-language, never to the
-.I roff
-language used for document formatting.
-.
-There are commands for positioning and text writing, for drawing, and
-for device controlling.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Separation"
-.\" --------------------------------------------------------------------
-.
-.I Classical troff output
-had strange requirements on whitespace.
-.
-The
-.B groff
-output parser, however, is smart about whitespace by making it
-maximally optional.
-.
-The whitespace characters, i.e., the
-.IR tab ,
-.IR space ,
-and
-.I newline
-characters, always have a syntactical meaning.
-.
-They are never printable because spacing within the output is always
-done by positioning commands.
-.
-.
-.P
-Any sequence of
-.I space
-or
-.I tab
-characters is treated as a single
-.I syntactical
-.IR space .
-.
-It separates commands and arguments, but is only required when there
-would occur a clashing between the command code and the arguments
-without the space.
-.
-Most often, this happens when variable length command names,
-arguments, argument lists, or command clusters meet.
-.
-Commands and arguments with a known, fixed length need not be
-separated by
-.I syntactical
-.IR space .
-.
-.
-.P
-A line break is a syntactical element, too.
-.
-Every command argument can be followed by whitespace, a comment, or a
-newline character.
-.
-Thus a
-.I syntactical line break
-is defined to consist of optional
-.I syntactical space
-that is optionally followed by a comment, and a newline character.
-.
-.
-.P
-The normal commands, those for positioning and text, consist of a
-single letter taking a fixed number of arguments.
-.
-For historical reasons, the parser allows to stack such commands on
-the same line, but fortunately, in
-.I groff intermediate
-.IR output ,
-every command with at least one argument is followed by a line break,
-thus providing excellent readability.
-.
-.P
-The other commands \[em] those for drawing and device controlling \[em]
-have a more complicated structure; some recognize long command names,
-and some take a variable number of arguments.
-.
-So all
-.B D
-and
-.B x
-commands were designed to request a
-.I syntactical line break
-after their last argument.
-.
-Only one command,
-.RB \[oq] x\ X \[cq]
-has an argument that can stretch over several lines, all other
-commands must have all of their arguments on the same line as the
-command, i.e., the arguments may not be split by a line break.
-.
-.P
-Empty lines, i.e., lines containing only space and/or a comment, can
-occur everywhere.
-.
-They are just ignored.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Argument Units"
-.\" --------------------------------------------------------------------
-.
-Some commands take integer arguments that are assumed to represent
-values in a measurement unit, but the letter for the corresponding
-.I scale indicator
-is not written with the output command arguments; see
-.BR groff (@MAN7EXT@)
-and the
-.I groff info file
-for more on this topic.
-.
-Most commands assume the scale indicator\~\c
-.BR u ,
-the basic unit of the device, some use\~\c
-.BR z ,
-the
-.I scaled point unit
-of the device, while others, such as the color commands expect plain
-integers.
-.
-Note that these scale indicators are relative to the chosen device.
-.
-They are defined by the parameters specified in the device's
-.I DESC
-file; see
-.BR groff_font (@MAN5EXT@).
-.
-.
-.P
-Note that single characters can have the eighth bit set, as can the
-names of fonts and special characters (this is, glyphs).
-.
-The names of glyphs and fonts can be of arbitrary length.
-.
-A glyph that is to be printed will always be in the current font.
-.
-.
-.P
-A string argument is always terminated by the next whitespace
-character (space, tab, or newline); an embedded
-.B #
-character is regarded as part of the argument, not as the beginning of
-a comment command.
-.
-An integer argument is already terminated by the next non-digit
-character, which then is regarded as the first character of the next
-argument or command.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Document Parts"
-.\" --------------------------------------------------------------------
-A correct
-.I intermediate output
-document consists of two parts, the
-.I prologue
-and the
-.IR body .
-.
-.P
-The task of the
-.I prologue
-is to set the general device parameters using three exactly specified
-commands.
-.
-The
-.I groff prologue
-is guaranteed to consist of the following three lines (in that order):
-.RS
-.P
-.B x\ T
-.I device
-.br
-.B x\ res
-.I n\ h\ v
-.br
-.B x init
-.RE
-.P
-with the arguments set as outlined in the section
-.BR "Device Control Commands" .
-.
-However, the parser for the
-.I intermediate output
-format is able to swallow additional whitespace and comments as well.
-.
-.
-.P
-The
-.I body
-is the main section for processing the document data.
-.
-Syntactically, it is a sequence of any commands different from the
-ones used in the
-.IR prologue .
-.
-Processing is terminated as soon as the first
-.B x\ stop
-command is encountered; the last line of any
-.I groff intermediate output
-always contains such a command.
-.
-.
-.P
-Semantically, the
-.I body
-is page oriented.
-.
-A new page is started by a
-.BR p \~command.
-.
-Positioning, writing, and drawing commands are always done within the
-current page, so they cannot occur before the first
-.BR p \~command.
-.
-Absolute positioning (by the
-.B H
-and
-.BR V \~commands)
-is done relative to the current page, all other positioning
-is done relative to the current location within this page.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COMMAND REFERENCE"
-.\" --------------------------------------------------------------------
-.
-This section describes all
-.I intermediate output
-commands, the classical commands as well as the
-.I groff
-extensions.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Comment Command"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI # anything \[la]end-of-line\[ra]
-A comment.
-.
-Ignore any characters from the
-.BR # \~\c
-character up to the next newline character.
-.
-.P
-This command is the only possibility for commenting in the
-.I intermediate
-.IR output .
-.
-Each comment can be preceded by arbitrary
-.I syntactical
-.IR space ;
-every command can be terminated by a comment.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Simple Commands"
-.\" --------------------------------------------------------------------
-.
-The commands in this subsection have a command code consisting of a
-single character, taking a fixed number of arguments.
-.
-Most of them are commands for positioning and text writing.
-.
-These commands are smart about whitespace.
-.
-Optionally,
-.I syntactical space
-can be inserted before, after, and between the command letter and its
-arguments.
-.
-All of these commands are stackable, i.e., they can be preceded by
-other simple commands or followed by arbitrary other commands on the
-same line.
-.
-A separating
-.I syntactical space
-is only necessary when two integer arguments would clash or if the
-preceding argument ends with a string argument.
-.
-.
-.if \n[@USE_ENV_STACK]=1 \{\
-.TP
-.command {
-Open a new environment by copying the actual device configuration data
-to the environment stack.
-.
-The current environment is setup by the device specification and
-manipulated by the setting commands.
-.
-.
-.TP
-.command }
-Close the actual environment (opened by a preceding
-.BR { \~command)
-and restore the previous environment from the environment
-stack as the actual device configuration data.
-.
-.\}              \" endif @USE_ENV_STACK
-.
-.
-.TP
-.command C xxx \[la]white-space\[ra]
-Print a glyph (special character) named
-.IR xxx .
-.
-The trailing
-.I syntactical space
-or
-.I line break
-is necessary to allow glyph names of arbitrary length.
-.
-The glyph is printed at the current print position; the
-glyph's size is read from the font file.
-.
-The print position is not changed.
-.
-.
-.TP
-.command c c
-Print glyph with single-letter name\~\c
-.I c
-at the current print position;
-the glyph's size is read from the font file.
-.
-The print position is not changed.
-.
-.
-.TP
-.command f n
-Set font to font number\~\c
-.I n
-(a non-negative integer).
-.
-.
-.TP
-.command H n
-Move right to the absolute vertical position\~\c
-.I n
-(a non-negative integer in basic units\~\c
-.BR u )
-relative to left edge of current page.
-.
-.
-.TP
-.command h n
-Move
-.I n
-(a non-negative integer) basic units\~\c
-.B u
-horizontally to the right.
-.
-.I [CSTR\~#54]
-allows negative values for
-.I n
-also, but
-.I groff
-doesn't use this.
-.
-.
-.TP
-.command m "color-scheme \fR[\fPcomponent .\|.\|.\fR]\fP"
-Set the color for text (glyphs), line drawing, and the outline of
-graphic objects using different color schemes; the analogous command
-for the filling color of graphic objects is
-.BR DF .
-.
-The color components are specified as integer arguments between 0 and
-\n[@maxcolor].
-.
-The number of color components and their meaning vary for the
-different color schemes.
-.
-These commands are generated by the
-.I groff
-escape sequence
-.BR \*[@backslash]m .
-.
-No position changing.
-.
-These commands are a
-.I groff
-extension.
-.
-.
-.RS
-.
-.TP
-.command mc "cyan magenta yellow"
-Set color using the CMY color scheme, having the 3\~color components
-cyan, magenta, and yellow.
-.
-.
-.TP
-.command md
-Set color to the default color value
-(black in most cases).
-.
-No component arguments.
-.
-.
-.TP
-.command mg "gray"
-Set color to the shade of gray given by the argument, an integer
-between 0 (black) and \n[@maxcolor] (white).
-.
-.
-.TP
-.command mk "cyan magenta yellow black"
-Set color using the CMYK color scheme, having the 4\~color components
-cyan, magenta, yellow, and black.
-.
-.TP
-.command mr "red green blue"
-Set color using the RGB color scheme, having the 3\~color components
-red, green, and blue.
-.
-.RE
-.
-.
-.TP
-.command N n
-Print glyph with index\~\c
-.I n
-(an integer, normally non-negative) of the current font.
-.
-The print position is not changed.
-.
-If
-.B \-T\~html
-or
-.B \-T\~xhtml
-is used, negative values are emitted also to indicate an unbreakable space
-with given width.
-.
-For example,
-.B N\~\-193
-represents an unbreakable space which has a width of 193\|u.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.TP
-.command n b\ a
-Inform the device about a line break, but no positioning is done by
-this command.
-.
-In
-.I classical
-.IR troff ,
-the integer arguments
-.I b
-and\~\c
-.I a
-informed about the space before and after the current line to
-make the
-.I intermediate output
-more human readable without performing any action.
-.
-In
-.IR groff ,
-they are just ignored, but they must be provided for compatibility
-reasons.
-.
-.
-.TP
-.command p n
-Begin a new page in the outprint.
-.
-The page number is set to\~\c
-.IR n .
-.
-This page is completely independent of pages formerly processed even
-if those have the same page number.
-.
-The vertical position on the outprint is automatically set to\~0.
-.
-All positioning, writing, and drawing is always done relative to a
-page, so a
-.BR p \~command
-must be issued before any of these commands.
-.
-.
-.TP
-.command s n
-Set point size to
-.I n
-scaled points
-(this is unit\~\c
-.B z
-in GNU
-.BR @g@troff ).
-.
-.I Classical troff
-used the unit
-.I points
-(\c
-.BR p )
-instead; see section
-.BR COMPATIBILITY .
-.
-.
-.TP
-.command t xyz\|.\|.\|. \[la]white-space\[ra]
-.TQ
-.command t "xyz\|.\|.\|.\& dummy-arg" \[la]white-space\[ra]
-Print a word, i.e., a sequence of glyphs with single-letter names
-.IR x ,
-.IR y ,
-.IR z ,
-etc., terminated by a space character or a line break; an optional
-second integer argument is ignored (this allows the formatter to
-generate an even number of arguments).
-.
-The first glyph should be printed at the current position, the
-current horizontal position should then be increased by the width of
-the first glyph, and so on for each glyph.
-.
-The widths of the glyph are read from the font file, scaled for the
-current point size, and rounded to a multiple of the horizontal
-resolution.
-.
-Special characters (glyphs with names longer than a single letter)
-cannot be printed using this command; use the
-.B C
-command for those glyphs.
-.
-This command is a
-.I groff
-extension; it is only used for devices whose
-.I DESC
-file contains the
-.B tcommand
-keyword; see
-.BR groff_font (@MAN5EXT@).
-.
-.
-.TP
-.command u "n xyz\|.\|.\|." \[la]white-space\[ra]
-Print word with track kerning.
-.
-This is the same as the
-.B t
-command except that after printing each glyph, the current
-horizontal position is increased by the sum of the width of that
-glyph and\~\c
-.I n
-(an integer in
-basic units\~\c
-.BR u ).
-This command is a
-.I groff
-extension; it is only used for devices whose
-.I DESC
-file contains the
-.B tcommand
-keyword; see
-.BR groff_font (@MAN5EXT@).
-.
-.
-.TP
-.command V n
-Move down to the absolute vertical position\~\c
-.I n
-(a non-negative integer in basic units\~\c
-.BR u )
-relative to upper edge of current page.
-.
-.
-.TP
-.command v n
-Move
-.I n
-basic units\~\c
-.B u
-down
-.RI ( n
-is a non-negative integer).
-.
-.I [CSTR\~#54]
-allows negative values for
-.I n
-also, but
-.I groff
-doesn't use this.
-.
-.
-.TP
-.command w
-Informs about a paddable whitespace to increase readability.
-.
-The spacing itself must be performed explicitly by a move command.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Graphics Commands"
-.\" --------------------------------------------------------------------
-.
-Each graphics or drawing command in the
-.I intermediate output
-starts with the letter\~\c
-.B D
-followed by one or two characters that specify a subcommand; this
-is followed by a fixed or variable number of integer arguments that
-are separated by a single space character.
-.
-A
-.B D\c
-\~command
-may not be followed by another command on the same line (apart from a
-comment), so each
-.B D\c
-\~command
-is terminated by a
-.I syntactical line
-.IR break .
-.
-.
-.P
-.B @g@troff
-output follows the classical spacing rules (no space between command
-and subcommand, all arguments are preceded by a single space
-character), but the parser allows optional space between the command
-letters and makes the space before the first argument optional.
-.
-As usual, each space can be any sequence of tab and space characters.
-.
-.
-.P
-Some graphics commands can take a variable number of arguments.
-.
-In this case, they are integers representing a size measured in basic
-units\~\c
-.BR u .
-.
-The
-.I h
-arguments
-stand for horizontal distances where positive means right, negative
-left.
-.
-The
-.I v
-arguments
-stand for vertical distances where positive means down, negative up.
-.
-All these distances are offsets relative to the current location.
-.
-.
-.P
-Unless indicated otherwise, each graphics command directly corresponds
-to a similar
-.I groff
-.B \*[@backslash]D
-escape sequence; see
-.BR groff (@MAN7EXT@).
-.
-.
-.P
-Unknown
-.B D\c
-\~commands are assumed to be device-specific.
-.
-Its arguments are parsed as strings; the whole information is then
-sent to the postprocessor.
-.
-.
-.P
-In the following command reference, the syntax element
-.I \[la]line-break\[ra]
-means a
-.I syntactical line break
-as defined in section
-.BR Separation .
-.
-.
-.TP
-.D-multiarg \[ti]
-Draw B-spline from current position to offset
-.indexed_offset h 1 v 1 ,
-then to offset
-.indexed_offset h 2 v 2
-if given, etc., up to
-.indexed_offset h n v n .
-This command takes a variable number of argument pairs; the current
-position is moved to the terminal point of the drawn curve.
-.
-.
-.TP
-.Da-command
-Draw arc from current position to
-.indexed_offset h 1 v 1 \|+\|\c
-.indexed_offset h 2 v 2
-with center at
-.indexed_offset h 1 v 1 ;
-then move the current position to the final point of the arc.
-.
-.
-.TP
-.D-command C d
-.TQ
-.D-command C "d dummy-arg"
-Draw a solid circle using the current fill color with diameter\~\c
-.I d
-(integer in basic units\~\c
-.BR u )
-with leftmost point at the current position; then move the current
-position to the rightmost point of the circle.
-.
-An optional second integer argument is ignored (this allows to the
-formatter to generate an even number of arguments).
-.
-This command is a
-.I groff
-extension.
-.
-.
-.TP
-.D-command c d
-Draw circle line with diameter\~\c
-.I d
-(integer in basic units\~\c
-.BR u )
-with leftmost point at the current position; then move the current
-position to the rightmost point of the circle.
-.
-.
-.TP
-.D-command E "h v"
-Draw a solid ellipse in the current fill color with a horizontal
-diameter of\~\c
-.I h
-and a vertical diameter of\~\c
-.I v
-(both integers in basic units\~\c
-.BR u )
-with the leftmost point at the current position; then move to the
-rightmost point of the ellipse.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.TP
-.D-command e "h v"
-Draw an outlined ellipse with a horizontal diameter of\~\c
-.I h
-and a vertical diameter of\~\c
-.I v
-(both integers in basic units\~\c
-.BR u )
-with the leftmost point at current position; then move to the
-rightmost point of the ellipse.
-.
-.
-.TP
-.D-command F "color-scheme \fR[\fPcomponent .\|.\|.\fR]\fP"
-Set fill color for solid drawing objects using different color
-schemes; the analogous command for setting the color of text, line
-graphics, and the outline of graphic objects is
-.BR m .
-.
-The color components are specified as integer arguments between 0 and
-\n[@maxcolor].
-.
-The number of color components and their meaning vary for the
-different color schemes.
-.
-These commands are generated by the
-.I groff
-escape sequences
-.BR \*[@backslash]D'F\  .\|.\|. '
-and
-.B \*[@backslash]M
-(with no other corresponding graphics commands).
-.
-No position changing.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.RS
-.
-.TP
-.D-command Fc "cyan magenta yellow"
-Set fill color for solid drawing objects using the CMY color scheme,
-having the 3\~color components cyan, magenta, and yellow.
-.
-.
-.TP
-.D-command Fd
-Set fill color for solid drawing objects to the default fill color value
-(black in most cases).
-.
-No component arguments.
-.
-.
-.TP
-.D-command Fg "gray"
-Set fill color for solid drawing objects to the shade of gray given by
-the argument, an integer between 0 (black) and \n[@maxcolor] (white).
-.
-.
-.TP
-.D-command Fk "cyan magenta yellow black"
-Set fill color for solid drawing objects using the CMYK color scheme,
-having the 4\~color components cyan, magenta, yellow, and black.
-.
-.TP
-.D-command Fr "red green blue"
-Set fill color for solid drawing objects using the RGB color scheme,
-having the 3\~color components red, green, and blue.
-.
-.RE
-.
-.
-.TP
-.D-command f n
-The argument
-.I n
-must be an integer in the range \-32767 to 32767.
-.
-.RS
-.TP
-.RI 0\|\[<=]\| n \|\[<=]\|1000
-Set the color for filling solid drawing objects to a shade of gray,
-where 0 corresponds to solid white, 1000 (the default) to solid black,
-and values in between to intermediate shades of gray; this is
-obsoleted by command
-.BR DFg .
-.
-.TP
-.IR n "\|<\|0 or " n \|>\|1000
-Set the filling color to the color that is currently being used for
-the text and the outline, see command
-.BR m .
-For example, the command sequence
-.
-.RS
-.IP
-.EX
-mg 0 0 \n[@maxcolor]
-Df \-1
-.EE
-.RE
-.
-.IP
-sets all colors to blue.
-.
-.P
-No position changing.
-.
-This command is a
-.I groff
-extension.
-.
-.RE
-.
-.
-.TP
-.D-command l "h v"
-Draw line from current position to offset
-.offset h v
-(integers in basic units\~\c
-.BR u );
-then set current position to the end of the drawn line.
-.
-.
-.TP
-.D-multiarg p
-Draw a polygon line from current position to offset
-.indexed_offset h 1 v 1 ,
-from there to offset
-.indexed_offset h 2 v 2 ,
-etc., up to offset
-.indexed_offset h n v n ,
-and from there back to the starting position.
-.
-.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
-For historical reasons, the position is changed by adding the sum of
-all arguments with odd index to the actual horizontal position and the
-even ones to the vertical position.
-.
-Although this doesn't make sense it is kept for compatibility.
-.
-.\}
-.el \{\
-As the polygon is closed, the end of drawing is the starting point, so
-the position doesn't change.
-.\}
-.
-This command is a
-.I groff
-extension.
-.
-.
-.TP
-.D-multiarg P
-The same macro as the corresponding
-.B Dp
-command with the same arguments, but draws a solid polygon in the
-current fill color rather than an outlined polygon.
-.
-.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
-The position is changed in the same way as with
-.BR Dp .
-.\}
-.el \
-No position changing.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.TP
-.D-command t n
-Set the current line thickness to\~\c
-.I n
-(an integer in basic units\~\c
-.BR u )
-if
-.IR n \|>\|0;
-if
-.IR n \|=\|0
-select the smallest available line thickness; if
-.IR n \|<\|0
-set the line thickness proportional to the point size (this is the
-default before the first
-.B Dt
-command was specified).
-.
-.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
-For historical reasons, the horizontal position is changed by adding
-the argument to the actual horizontal position, while the vertical
-position is not changed.
-.
-Although this doesn't make sense it is kept for compatibility.
-.
-.\}
-.el \
-No position changing.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Device Control Commands"
-.\" --------------------------------------------------------------------
-.
-Each device control command starts with the letter
-.B x
-followed by a space character (optional or arbitrary space/\:tab in
-.IR groff )
-and a subcommand letter or word; each argument (if any) must be
-preceded by a
-.I syntactical
-.IR space .
-.
-All
-.B x
-commands are terminated by a
-.IR "syntactical line break" ;
-no device control command can be followed by another command on the same
-line (except a comment).
-.
-.P
-The subcommand is basically a single letter, but to increase
-readability, it can be written as a word, i.e., an arbitrary sequence
-of characters terminated by the next tab, space, or newline character.
-.
-All characters of the subcommand word but the first are simply ignored.
-.
-For example,
-.B @g@troff
-outputs the initialization command
-.B x\ i
-as
-.B x\ init
-and the resolution command
-.B x\ r
-as
-.BR "x\ res" .
-.
-But writings like
-.B x\ i_like_groff
-and
-.B x\ roff_is_groff
-are accepted as well to mean the same commands.
-.
-.P
-In the following, the syntax element
-.I \[la]line-break\[ra]
-means a
-.I syntactical line break
-as defined in section
-.BR Separation .
-.
-.TP
-.x-command F name
-.xsub Filename
-Use
-.I name
-as the intended name for the current file in error reports.
-.
-This is useful for remembering the original file name when
-.B groff
-uses an internal piping mechanism.
-.
-The input file is not changed by this command.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.TP
-.x-command f "n\ s"
-.xsub font
-Mount font position\~\c
-.I n
-(a non-negative integer) with font named\~\c
-.I s
-(a text word),
-cf.
-.BR groff_font (@MAN5EXT@).
-.
-.
-.TP
-.x-command H n
-.xsub Height
-Set character height to\~\c
-.I n
-(a positive integer in scaled points\~\c
-.BR z ).
-.
-.I Classical troff
-used the unit points (\c
-.BR p )
-instead; see section
-.BR COMPATIBILITY .
-.
-.
-.TP
-.x-command i
-.xsub init
-Initialize device.
-.
-This is the third command of the
-.IR prologue .
-.
-.
-.TP
-.x-command p
-.xsub pause
-Parsed but ignored.
-.
-The classical documentation reads
-.I pause device, can be
-.IR restarted .
-.
-.
-.TP
-.x-command r "n\ h\ v"
-.xsub resolution
-Resolution is\~\c
-.IR n ,
-while
-.I h
-is the minimal horizontal motion, and
-.I v
-the minimal vertical motion possible with this device; all arguments
-are positive integers in basic units\~\c
-.B u
-per inch.
-.
-This is the second command of the
-.IR prologue .
-.
-.
-.TP
-.x-command S n
-.xsub Slant
-Set slant to\~\c
-.I n
-degrees (an integer in basic units\~\c
-.BR u ).
-.
-.
-.TP
-.x-command s
-.xsub stop
-Terminates the processing of the current file; issued as the last
-command of any
-.I intermediate @g@troff
-.IR output .
-.
-.
-.TP
-.x-command t
-.xsub trailer
-Generate trailer information, if any.
-.
-In
-.BR groff ,
-this is actually just ignored.
-.
-.
-.TP
-.x-command T xxx
-.xsub Typesetter
-Set name of device to word
-.IR xxx ,
-a sequence of characters ended by the next whitespace character.
-.
-The possible device names coincide with those from the groff
-.B \-T
-option.
-.
-This is the first command of the
-.IR prologue .
-.
-.
-.TP
-.x-command u n
-.xsub underline
-Configure underlining of spaces.
-.
-If
-.I n
-is\~1, start underlining of spaces;
-if
-.I n
-is\~0, stop underlining of spaces.
-.
-This is needed for the
-.B cu
-request in
-.B @g@nroff
-mode and is ignored otherwise.
-.
-This command is a
-.I groff
-extension.
-.
-.
-.TP
-.x-command X anything
-.xsub X-escape
-Send string
-.I anything
-uninterpreted to the device.
-.
-If the line following this command starts with a
-.B +
-character this line is interpreted as a continuation line in the
-following sense.
-.
-The
-.B +
-is ignored, but a newline character is sent instead to the device, the
-rest of the line is sent uninterpreted.
-.
-The same applies to all following lines until the first character of a
-line is not a
-.B +
-character.
-.
-This command is generated by the
-.I groff
-escape sequence
-.BR \*[@backslash]X .
-.
-The line-continuing feature is a
-.I groff
-extension.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Obsolete Command"
-.\" --------------------------------------------------------------------
-.
-In
-.I classical troff
-output, emitting a single glyph was mostly done by a very
-strange command that combined a horizontal move and the printing of a
-glyph.
-.
-It didn't have a command code, but is represented by a 3-character
-argument consisting of exactly 2\~digits and a character.
-.
-.TP
-.I ddc
-Move right
-.I dd
-(exactly two decimal digits) basic units\~\c
-.BR u ,
-then print glyph with single-letter name\~\c
-.IR c .
-.
-.
-.RS
-.P
-In
-.IR groff ,
-arbitrary
-.I syntactical space
-around and within this command is allowed to be added.
-.
-Only when a preceding command on the same line ends with an argument
-of variable length a separating space is obligatory.
-.
-In
-.I classical
-.IR troff ,
-large clusters of these and other commands were used, mostly without
-spaces; this made such output almost unreadable.
-.
-.RE
-.
-.
-.P
-For modern high-resolution devices, this command does not make sense
-because the width of the glyphs can become much larger than two
-decimal digits.
-.
-In
-.BR groff ,
-this is only used for the devices
-.BR X75 ,
-.BR X75-12 ,
-.BR X100 ,
-and
-.BR X100-12 .
-.
-For other devices,
-the commands
-.B t
-and\~\c
-.B u
-provide a better functionality.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "POSTPROCESSING"
-.\" --------------------------------------------------------------------
-.
-The
-.I roff
-postprocessors are programs that have the task to translate the
-.I intermediate output
-into actions that are sent to a device.
-.
-A device can be some piece of hardware such as a printer, or a software
-file format suitable for graphical or text processing.
-.
-The
-.I groff
-system provides powerful means that make the programming of such
-postprocessors an easy task.
-.P
-There is a library function that parses the
-.I intermediate output
-and sends the information obtained to the device via methods of a
-class with a common interface for each device.
-.
-So a
-.I groff
-postprocessor must only redefine the methods of this class.
-.
-For details, see the reference in section
-.BR FILES .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "EXAMPLES"
-.\" --------------------------------------------------------------------
-.
-This section presents the
-.I intermediate output
-generated from the same input for three different devices.
-.
-The input is the sentence
-.I hell world
-fed into
-.B groff
-on the command line.
-.
-.
-.IP \[bu] 2m
-High-resolution device
-.I ps
-.
-.
-.RS
-.P
-.EX
-\fBshell>\fP echo "hell world" | groff \-Z \-T ps
-.EE
-.
-.
-.P
-.nf
-.ft CB
-x T ps
-x res 72000 1 1
-x init
-p1
-x font 5 TR
-f5
-s10000
-V12000
-H72000
-thell
-wh2500
-tw
-H96620
-torld
-n12000 0
-x trailer
-V792000
-x stop
-.ft P
-.fi
-.RE
-.
-.
-.P
-This output can be fed into the postprocessor
-.BR grops (@MAN1EXT@)
-to get its representation as a PostScript file, or
-.BR gropdf (@MAN1EXT@)
-to output directly to PDF.
-.
-.
-.IP \[bu] 2m
-Low-resolution device
-.I latin1
-.
-.
-.RS
-.P
-This is similar to the high-resolution device except that the
-positioning is done at a minor scale.
-.
-Some comments (lines starting with
-.IR # )
-were added for clarification; they were not generated by the
-formatter.
-.
-.
-.P
-.EX
-\fBshell>\fP "hell world" | groff \-Z \-T latin1
-.EE
-.
-.
-.P
-.nf
-.I "# prologue"
-.ft CB
-x T latin1
-x res 240 24 40
-x init
-.I "# begin a new page"
-.ft CB
-p1
-.I "# font setup"
-.ft CB
-x font 1 R
-f1
-s10
-.I "# initial positioning on the page"
-.ft CB
-V40
-H0
-.I "# write text \[oq]hell\[cq]"
-.ft CB
-thell
-.I "# inform about a space, and do it by a horizontal jump"
-.ft CB
-wh24
-.I "# write text \[oq]world\[cq]"
-.ft CB
-tworld
-.I "# announce line break, but do nothing because ..."
-.ft CB
-n40 0
-.I "# ... the end of the document has been reached"
-.ft CB
-x trailer
-V2640
-x stop
-.ft P
-.fi
-.RE
-.
-.
-.P
-This output can be fed into the postprocessor
-.BR grotty (@MAN1EXT@)
-to get a formatted text document.
-.
-.
-.IP \[bu] 2m
-Classical style output
-.
-.
-.RS
-.P
-As a computer monitor has a very low resolution compared to modern
-printers the
-.I intermediate output
-for the X\~devices can use the jump-and-write command with its 2-digit
-displacements.
-.
-.
-.P
-.EX
-\fBshell>\fP "hell world" | groff \-Z \-T X100
-.EE
-.
-.
-.P
-.nf
-.ft CB
-x T X100
-x res 100 1 1
-x init
-p1
-x font 5 TR
-f5
-s10
-V16
-H100
-.I "# write text with old-style jump-and-write command"
-.ft CB
-ch07e07l03lw06w11o07r05l03dh7
-n16 0
-x trailer
-V1100
-x stop
-.ft P
-.fi
-.RE
-.
-.
-.P
-This output can be fed into the postprocessor
-.BR \%xditview (1x)
-or
-.BR \%gxditview (@MAN1EXT@)
-for displaying in\~X.
-.
-.
-.P
-Due to the obsolete jump-and-write command, the text clusters in the
-classical output are almost unreadable.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COMPATIBILITY"
-.\" --------------------------------------------------------------------
-.
-The
-.I intermediate output
-language of the
-.I classical troff
-was first documented in
-.IR [CSTR\~#97] .
-.
-The
-.I groff intermediate output
-format is compatible with this specification except for the following
-features.
-.
-.
-.IP \[bu] 2m
-The classical quasi device independence is not yet implemented.
-.
-.
-.IP \[bu] 2m
-The old hardware was very different from what we use today.
-.
-So the
-.I groff
-devices are also fundamentally different from the ones in
-.I classical
-.IR troff .
-.
-For example, the classical PostScript device was called
-.I post
-and had a resolution of 720 units per inch,
-while
-.IR groff 's
-.I ps
-device has a resolution of 72000 units per inch.
-.
-Maybe, by implementing some rescaling mechanism similar to the
-classical quasi device independence, these could be integrated into
-modern
-.IR groff .
-.
-.
-.IP \[bu] 2m
-The B-spline command
-.B D\[ti]
-is correctly handled by the
-.I intermediate output
-parser, but the drawing routines aren't implemented in some of the
-postprocessor programs.
-.
-.
-.IP \[bu] 2m
-The argument of the commands
-.B s
-and
-.B x H
-has the implicit unit scaled point\~\c
-.B z
-in
-.IR groff ,
-while
-.I classical troff
-had point (\c
-.BR p ).
-.
-This isn't an incompatibility, but a compatible extension, for both
-units coincide for all devices without a
-.I sizescale
-parameter, including all classical and the
-.I groff
-text devices.
-.
-The few
-.I groff
-devices with a sizescale parameter either did not exist, had a
-different name, or seem to have had a different resolution.
-.
-So conflicts with classical devices are very unlikely.
-.
-.
-.ie \n[@STUPID_DRAWING_POSITIONING]=1 \{\
-.IP \[bu] 2m
-The position changing after the commands
-.BR Dp ,
-.BR DP ,
-and
-.B Dt
-is illogical, but as old versions of groff used this feature it is
-kept for compatibility reasons.
-.\}             \" @STUPID_DRAWING_POSITIONING
-.el \{\
-.IP \[bu] 2m
-Temporarily, there existed some confusion on the positioning after the
-.B D
-commands that are
-.I groff
-extensions.
-.
-This has been clarified by establishing the classical rule for all
-groff drawing commands:
-.
-.
-.RS
-.P
-.ft I
-The position after a graphic object has been drawn is at its end;
-for circles and ellipses, the "end" is at the right side.
-.ft
-.RE
-.
-.
-.P
-From this, the positionings specified for the drawing commands above
-follow quite naturally.
-.\}             \" @STUPID_DRAWING_POSITIONING
-.
-.P
-The differences between
-.I groff
-and
-.I classical troff
-are documented in
-.BR groff_diff (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SH "FILES"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI @FONTDIR@/dev name /DESC
-Device description file for device
-.IR name .
-.
-.TP
-.IB \[la]groff-source-dir\[ra] /src/libs/libdriver/input.cpp
-Defines the parser and postprocessor for the
-.I intermediate
-.IR output .
-.
-It is located relative to the top directory of the
-.I groff
-source tree.
-.
-This parser is the definitive specification of the
-.I groff intermediate output
-format.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-A reference like
-.BR groff (@MAN7EXT@)
-refers to a manual page; here
-.B groff
-in section\~\c
-.I @MAN7EXT@
-of the man-page documentation system.
-.
-To read the example, look up section\~@MAN7EXT@ in your desktop help
-system or call from the shell prompt
-.
-.
-.RS
-.P
-.EX
-\fBshell>\fP man @MAN7EXT@ groff
-.EE
-.RE
-.
-.
-.P
-For more details, see
-.BR man (1).
-.
-.
-.TP
-.BR groff (@MAN1EXT@)
-option
-.B \-Z
-and further readings on groff.
-.
-.
-.TP
-.BR groff (@MAN7EXT@)
-for details of the
-.I groff
-language such as numerical units and escape sequences.
-.
-.
-.TP
-.BR groff_font (@MAN5EXT@)
-for details on the device scaling parameters of the
-.B DESC
-file.
-.
-.
-.TP
-.BR @g@troff (@MAN1EXT@)
-generates the device-independent intermediate output.
-.
-.
-.TP
-.BR roff (@MAN7EXT@)
-for historical aspects and the general structure of roff systems.
-.
-.
-.TP
-.BR groff_diff (@MAN7EXT@)
-The differences between the intermediate output in groff and classical
-troff.
-.
-.
-.TP
-.BR gxditview (@MAN1EXT@)
-Viewer for the
-.I intermediate
-.IR output .
-.
-.
-.P
-.BR \%grodvi (@MAN1EXT@),
-.BR \%grohtml (@MAN1EXT@),
-.BR \%grolbp (@MAN1EXT@),
-.BR \%grolj4 (@MAN1EXT@),
-.BR \%grops (@MAN1EXT@),
-.BR \%grotty (@MAN1EXT@)
-.br
-.RS
-the groff postprocessor programs.
-.RE
-.
-.
-.P
-For a treatment of all aspects of the groff system within a single
-document, see the
-.I groff info
-.IR file .
-.
-It can be read within the integrated help systems, within
-.BR emacs (1)
-or from the shell prompt by
-.
-.RS
-.EX
-\fBshell>\fP info groff
-.EE
-.RE
-.
-.
-.P
-The
-.I classical troff output language
-is described in two AT&T Bell Labs CSTR documents available on-line at
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html
-Bell Labs CSTR site
-.UE .
-.
-.
-.TP
-.I [CSTR #97]
-.I A Typesetter-independent TROFF
-by
-.I Brian Kernighan
-is the original and most comprehensive documentation on the output
-language; see
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz
-CSTR\~#97
-.UE .
-.
-.
-.TP
-.I [CSTR\~#54]
-The 1992 revision of the
-.I Nroff/\:Troff User's Manual
-by
-.I J.\& F.\& Ossanna
-and
-.I Brian Kernighan
-isn't as comprehensive as
-.I [CSTR\~#97]
-regarding the output language; see
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz
-CSTR\~#54
-.UE .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.\"
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/man/groff_tmac.5.man b/man/groff_tmac.5.man
new file mode 100644 (file)
index 0000000..750fd50
--- /dev/null
@@ -0,0 +1,1333 @@
+.TH GROFF_TMAC @MAN5EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_tmac \- macro files in the roff typesetting system
+.
+.\" groff_tmac(5):
+.\" Source file position: <groff_source>/man/groff_tmac.man
+.\" Installed position: <prefix>/share/man/man5/groff_tmac.5
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_tmac_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2000-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this
+.\" document under the terms of the GNU Free Documentation License,
+.\" Version 1.3 or any later version published by the Free Software
+.\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
+.\" and with no Back-Cover Texts.
+.\"
+.\" A copy of the Free Documentation License is included as a file
+.\" called FDL in the main directory of the groff source package.
+.
+.
+.ds Ellipsis \&.\|.\|.\&\"
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+The
+.BR roff (@MAN7EXT@)
+type-setting system provides a set of macro packages suitable for
+special kinds of documents.
+.
+Each macro package stores its macros and definitions in a file called
+the package's
+.BR "tmac file" .
+.
+The name is deduced from
+.RB \[oq] T\c
+.IB roff MAC\c
+.IR ros \[cq].
+.
+.
+.P
+The tmac files are normal roff source documents, except that they
+usually contain only definitions and setup commands, but no text.
+.
+All tmac files are kept in a single or a small number of directories,
+the
+.B tmac
+directories.
+.
+.
+.\" ====================================================================
+.SH "GROFF MACRO PACKAGES"
+.\" ====================================================================
+.
+.I groff
+provides all classical macro packages, some more full packages, and
+some secondary packages for special purposes.
+.
+Note that it is not possible to use multiple primary macro packages at
+the same time; saying e.g.\&
+.
+.IP
+.EX
+\fIsh#\fP groff \-m man \-m ms foo
+.EE
+.
+.
+.P
+or
+.
+.IP
+.EX
+\fIsh#\fP groff \-m man foo \-m ms bar
+.EE
+.
+.P
+fails.
+.
+Exception to this is the use of man pages written with either the
+.B mdoc
+or the
+.B man
+macro package.
+See below the description of the
+.I andoc.tmac
+file.
+.
+.
+.\" ====================================================================
+.SS "Man\~Pages"
+.\" ====================================================================
+.
+.TP
+.I man
+This is the classical macro package for Unix manual pages
+(man\~pages); it is quite handy and easy to use; see
+.BR groff_man (@MAN7EXT@).
+.
+.
+.TP
+.I doc
+.TQ
+.I mdoc
+An alternative macro package for man\~pages mainly used in BSD
+systems; it provides many new features, but it is not the standard for
+man\~pages; see
+.BR groff_mdoc (@MAN7EXT@).
+.
+.
+.TP
+.I andoc
+.TQ
+.I mandoc
+Use this file in case you don't know whether the
+.B man
+macros or the
+.B mdoc
+package should be used.
+Multiple man pages (in either format) can be handled.
+.
+.
+.\" ====================================================================
+.SS "Full Packages"
+.\" ====================================================================
+.
+The packages in this section provide a complete set of macros for
+writing documents of any kind, up to whole books.
+.
+They are similar in functionality; it is a matter of taste which one
+to use.
+.
+.
+.TP
+.I me
+The classical
+.I me
+macro package; see
+.BR groff_me (@MAN7EXT@).
+.
+.
+.TP
+.I mm
+The semi-classical
+.I mm
+macro package; see
+.BR groff_mm (@MAN7EXT@).
+.
+.
+.TP
+.I mom
+The new
+.I mom
+macro package, only available in groff.
+.
+As this is not based on other packages, it can be freely designed.
+.
+So it is expected to become quite a nice, modern macro package.
+.
+See
+.BR groff_mom (@MAN7EXT@).
+.
+.
+.TP
+.I ms
+The classical
+.I ms
+macro package; see
+.BR groff_ms (@MAN7EXT@).
+.
+.
+.\" ====================================================================
+.SS "Language-specific Packages"
+.\" ====================================================================
+.
+.TP
+.I cs
+This file adds support for Czech localization, including the main macro
+packages (me, mom, mm, and ms).
+.
+.IP
+Note that
+.I cs.tmac
+sets the input encoding to latin-2.
+.
+.
+.TP
+.I de
+.TQ
+.I den
+German localization support, including the main macro packages (me, mom,
+mm, and ms).
+.
+.IP
+.I de.tmac
+selects hyphenation patterns for traditional orthography, and
+.I den.tmac
+does the same for the new orthography
+(\[oq]Recht\%schreib\%reform\[cq]).
+.
+It should be used as the last macro package on the command line.
+.
+.
+.TP
+.I fr
+This file adds support for French localization, including the main macro
+packages (me, mom, mm, and ms).
+.
+.
+Example:
+.RS
+.IP
+.EX
+\fIsh#\fP groff \-ms \-mfr foo.ms > foo.ps
+.EE
+.RE
+.
+.IP
+Note that
+.I fr.tmac
+sets the input encoding to latin-9 to get proper support of the
+\[oq]oe\[cq] ligature.
+.
+.
+.TP
+.I sv
+Swedish localization support, including the me, mom, and ms macro
+packages.
+.
+Note that Swedish for the mm macros is handled separately; see
+.BR groff_mmse (@MAN7EXT@).
+.
+It should be used as the last macro package on the command line.
+.
+.
+.\" ====================================================================
+.SS "Input Encodings"
+.\" ====================================================================
+.
+.
+.TP
+.I latin1
+.TQ
+.I latin2
+.TQ
+.I latin5
+.TQ
+.I latin9
+Various input encodings supported directly by groff.
+.
+Normally, this macro is loaded at the very beginning of a document or
+specified as the first macro argument on the command line.
+.
+.B @g@roff
+loads latin1 by default at start-up.
+.
+Note that these macro packages don't work on EBCDIC hosts.
+.
+.
+.TP
+.I cp1047
+Encoding support for EBCDIC.
+.
+On those platforms it is loaded automatically at start-up.
+.
+Due to different character ranges used in
+.B @g@roff
+it doesn't work on architectures which are based on ASCII.
+.
+.
+.P
+Note that it can happen that some input encoding characters are not
+available for a particular output device.
+.
+For example, saying
+.
+.P
+.EX
+groff \-Tlatin1 \-mlatin9 ...
+.EE
+.
+.P
+fails if you use the Euro character in the input.
+.
+Usually, this limitation is present only for devices which have a
+limited set of output glyphs
+.RB ( \-Tascii ,
+.BR \-Tlatin1 );
+for other devices it is usually sufficient to install proper
+fonts which contain the necessary glyphs.
+.
+.
+.\" ====================================================================
+.SS "Special Packages"
+.\" ====================================================================
+.
+The macro packages in this section are not intended for stand-alone
+usage, but can be used to add special functionality to any other
+macro package or to plain groff.
+.
+.
+.TP
+.I 62bit
+Provides macros for addition, multiplication, and division of 62-bit
+integers (allowing safe multiplication of 31-bit integers, for example).
+.
+.
+.TP
+.I ec
+Switch to the EC and TC font families.
+.
+To be used with
+.BR \%grodvi (@MAN1EXT@)
+\[en] this man page also gives more details of how to use it.
+.
+.
+.TP
+.I hdtbl
+The Heidelberger table macros, contributed by Joachim Walsdorff, allow
+the generation of tables through a syntax similar to the HTML table
+model.
+.
+Note that
+.I hdtbl
+is a macro package, not a preprocessor like
+.BR tbl (@MAN1EXT@).
+.
+.I hdtbl
+works only with the
+.B \-Tps
+and
+.B \-Tpdf
+output devices.
+.
+See
+.BR groff_hdtbl (@MAN7EXT@) .
+.
+.
+.TP
+.I papersize
+This macro file is already loaded at start-up by
+.B @g@troff
+so it isn't necessary to call it explicitly.
+.
+It provides an interface to set the paper size on the command line with
+the option \f[B]\%\-dpaper=\f[]\,\f[I]size\f[].
+.
+Possible values for
+.I size
+are the same as the predefined
+.B papersize
+values in the DESC file (only lowercase; see
+.BR groff_font (@MAN5EXT@)
+for more) except
+.BR a7 \[en] d7 .
+.
+An appended
+.B l
+(ell) character denotes landscape orientation.
+.
+Examples:
+.BR a4 ,
+.BR c3l ,
+.BR letterl .
+.
+.IP
+Most output drivers need additional command-line switches
+.B \-p
+and
+.B \-l
+to override the default paper length and orientation as set in the
+driver-specific DESC file.
+.
+For example, use the following for PS output on A4 paper in landscape
+orientation:
+.
+.IP
+.EX
+\fIsh#\fP groff \-Tps \-dpaper=a4l \-P\-pa4 \-P\-l \-ms foo.ms > foo.ps
+.EE
+.
+.
+.TP
+.I pdfpic
+A single macro is provided in this file,
+.BR PSPIC ,
+to include a PDF graphic in a document, i.e., under the output device
+.BR \-Tpdf .
+.
+For all other devices,
+.I pspic
+is used.
+.
+So
+.I pdfpic
+is an extension of
+.IR pspic .
+.
+By that you can now even replace all
+.B PSPIC
+by
+.BR PDFPIC ,
+nothing gets lost by that.
+.
+The options of
+.B PDFPIC
+are identical to the
+.B PSDIF
+options.
+.
+.
+.TP
+.I pic
+This file provides proper definitions for the macros
+.B PS
+and
+.BR PE ,
+needed for the
+.BR @g@pic (@MAN1EXT@)
+preprocessor.
+.
+They center each picture.
+.
+Use it only if your macro package doesn't provide proper
+definitions for those two macros (actually, most of them already do).
+.
+.
+.TP
+.I pspic
+A single macro is provided in this file,
+.BR PSPIC ,
+to include a PostScript graphic in a document.
+.
+The following output devices support inclusion of PS images:
+.BR \-Tps ,
+.BR \-Tdvi ,
+.BR \-Thtml ,
+and
+.BR \-Txhtml ;
+for all other devices the image is replaced with a hollow rectangle
+of the same size.
+.
+This macro file is already loaded at start-up by
+.B @g@troff
+so it isn't necessary to call it explicitly.
+.
+.IP
+Syntax:
+.RS
+.IP
+\&\fB.PSPIC\fP \
+[\fB\-L\fP\|\
+|\|\fB\-R\fP\|\
+|\|\fB\-C\fP\|\
+|\|\fB\-I\fP\ \fIn\fP] \
+\fI\|file\fP [\fIwidth\fP [\,\fIheight\/\fP]]
+.RE
+.
+.IP
+.I file
+is the name of the PostScript file;
+.I width
+and
+.I height
+give the desired width and height of the image.
+.
+If neither a
+.I width
+nor a
+.I height
+argument is specified, the image's natural width (as given in the
+file's bounding box) or the current line length is used as the
+width, whatever is smaller.
+.
+The
+.I width
+and
+.I height
+arguments may have scaling indicators attached;
+the default scaling indicator is\~\c
+.BR i .
+.
+This macro scales the graphic uniformly
+in the x and y\~directions so that it is no more than
+.I width
+wide
+and
+.I height
+high.
+.
+Option
+.B \-C
+centers the graphic horizontally, which is the default.
+.
+The
+.B \-L
+and
+.B \-R
+options cause the graphic to be left-aligned and right-aligned,
+respectively.
+.
+The
+.B \-I
+option causes the graphic to be indented by\~\c
+.I n
+(default scaling indicator is\~\c
+.BR m ).
+.
+.IP
+For use of
+.B .PSPIC
+within a diversion it is recommended to extend it with the following
+code, assuring that the diversion's width completely covers the
+image's width.
+.
+.RS
+.IP
+.EX
+\&.am PSPIC
+\&.\ \ vpt 0
+\&\[rs]h'(\[rs]\[rs]n[ps-offset]u + \[rs]\[rs]n[ps-deswid]u)'
+\&.\ \ sp \-1
+\&.\ \ vpt 1
+\&..
+.EE
+.RE
+.
+.
+.TP
+.I ptx
+A single macro is provided in this file,
+.BR xx ,
+for formatting permuted index entries as produced by the GNU
+.BR ptx (1)
+program.
+.
+In case you need a different formatting, copy the macro into
+your document and adapt it to your needs.
+.
+.
+.TP
+.I trace
+Use this for tracing macro calls.
+.
+It is only useful for debugging.
+.
+See
+.BR groff_trace (@MAN7EXT@) .
+.
+.
+.TP
+.I tty\-char
+Overrides the definition of standard troff characters and some groff
+characters for TTY devices.
+.
+The optical appearance is intentionally inferior compared to that of
+normal TTY formatting to allow processing with critical equipment.
+.
+.
+.TP
+.I www
+Additions of elements known from the HTML format, as used in the
+internet (World Wide Web) pages; this includes URL links and mail
+addresses; see
+.BR groff_www (@MAN7EXT@).
+.
+.
+.\" ====================================================================
+.SH NAMING
+.\" ====================================================================
+.
+Classical roff systems were designed before the conventions of the
+modern C
+.BR getopt (3)
+call evolved, and used a naming scheme for macro packages that looks
+odd to modern eyes.
+.
+Macro packages were always included with the option
+.BR \-m ;
+when this option was directly followed by its argument without an
+intervening space, this looked like a long option preceded by a single
+minus \[em] a sensation in the computer stone age.
+.
+To make this invocation form work, classical troff
+macro packages used names that started with the letter \[oq]m\[cq],
+which was omitted in the naming of the macro file.
+.
+.
+.P
+For example, the macro package for the man pages was called
+.IR man ,
+while its macro file
+.IR tmac.an .
+So it could be activated by the argument
+.I an
+to option
+.BR \-m ,
+or
+.B \-man
+for short.
+.
+.
+.P
+For similar reasons, macro packages that did not start with an
+\[oq]m\[cq] had a leading \[oq]m\[cq] added in the documentation and
+in speech; for example, the package corresponding to
+.I tmac.doc
+was called
+.I mdoc
+in the documentation, although a more suitable name would be
+.IR doc .
+For, when omitting the space between the option and its argument, the
+command-line option for activating this package reads
+.BR \-mdoc .
+.
+.
+.P
+To cope with all situations, actual versions of
+.BR groff (@MAN1EXT@)
+are smart about both naming schemes by providing two macro files
+for the inflicted macro packages; one with a leading \[oq]m\[cq]
+the other one without it.
+.
+So in
+.IR groff ,
+the
+.I man
+macro package may be specified as one of the following four methods:
+.
+.IP
+.EX
+\fIsh#\fP groff\ \-m\ man
+\fIsh#\fP groff\ \-man
+\fIsh#\fP groff\ \-mman
+\fIsh#\fP groff\ \-m\ an
+.EE
+.
+.
+.P
+Recent packages that do not start with \[oq]m\[cq] do not use an
+additional \[oq]m\[cq] in the documentation.
+.
+For example, the
+.I www
+macro package may be specified only as one of the two methods:
+.
+.IP
+.EX
+\fIsh#\fP groff\ \-m\ www
+\fIsh#\fP groff\ \-mwww
+.EE
+.
+.
+.P
+Obviously, variants like
+.I \-mmwww
+would not make much sense.
+.
+.
+.P
+A second strange feature of classical troff was to name macro files
+in the form
+.IR tmac. name.
+In modern operating systems, the type of a file is specified as a
+postfix, the file name extension.
+.
+Again, groff copes with this situation by searching both
+.IB anything .tmac
+and
+.BI tmac. anything
+if only
+.I anything
+is specified.
+.
+.
+.P
+The easiest way to find out which macro packages are available on a
+system is to check the man\~page
+.BR groff (@MAN1EXT@),
+or the contents of the
+.I tmac
+directories.
+.
+.
+.P
+In
+.IR groff ,
+most macro packages are described in\~man pages called
+.BR groff_\f[I]name\f[] (@MAN7EXT@),
+with a leading \[oq]m\[cq] for the classical packages.
+.
+.
+.\" ====================================================================
+.SH INCLUSION
+.\" ====================================================================
+.
+There are several ways to use a macro package in a document.
+.
+The classical way is to specify the troff/groff option
+.B \-m
+.I name
+at run-time; this makes the contents of the macro package
+.I name
+available.
+.
+In groff, the file
+.RI name .tmac
+is searched within the tmac path; if not found,
+.IR tmac. name
+is searched for instead.
+.
+.
+.P
+Alternatively, it is also possible to include a macro file by adding
+the request
+.B .so
+.I filename
+into the document; the argument must be the full file name of an
+existing file, possibly with the directory where it is kept.
+.
+In groff, this was improved by the similar request
+.B .mso
+.IR package ,
+which added searching in the tmac path, just like option
+.B \-m
+does.
+.
+.
+.P
+Note that in order to resolve the
+.B .so
+and
+.B .mso
+requests, the roff preprocessor
+.BR soelim (@MAN1EXT@)
+must be called if the files to be included need preprocessing.
+.
+This can be done either directly by a pipeline on the command line or
+by using the troff/groff option
+.BR \-s .
+.
+.I man
+calls soelim automatically.
+.
+.
+.P
+For example, suppose a macro file is stored as
+.
+.IP
+.I @MACRODIR@/macros.tmac
+.
+.P
+and is used in some document called
+.IR docu.roff .
+.
+.
+.P
+At run-time, the formatter call for this is
+.
+.IP
+.EX
+\fIsh#\fP groff \-m macros docu.roff
+.EE
+.
+.
+.P
+To include the macro file directly in the document either
+.
+.IP
+.EX
+\&.mso macros.tmac
+.EE
+.
+.P
+is used or
+.
+.IP
+.EX
+\&.so @MACRODIR@/macros.tmac
+.EE
+.
+.
+.P
+In both cases, the formatter should be called with option
+.B \-s
+to invoke
+.BR soelim .
+.IP
+.EX
+\fIsh#\fP groff \-s docu.roff
+.EE
+.
+.
+.P
+If you want to write your own groff macro file, call it
+.RI whatever .tmac
+and put it in a directory in the tmac path;
+see section \[lq]Files\[rq] below.
+.
+Then documents can include it with the
+.B .mso
+request or the option
+.BR \-m .
+.
+.
+.ig
+.\" ====================================================================
+.SH CONVENTION
+.\" ====================================================================
+.
+.\" This section does not fit into the framework of this document.
+.
+There is a convention that is supported by many modern roff
+type-setters and
+.BR man (1)
+programs, the
+.I preprocessor word
+described in the following.
+.
+.P
+If the first line in a document is a comment, the first word (after the
+comment characters and a blank) constitutes the
+.B preprocessor
+.BR word .
+That means that the letters of this word are interpreted as
+abbreviations for those preprocessor commands that should be run
+when formatting the document.
+.
+Mostly, only the letters corresponding to the options for the
+preprocessors are recognized,
+\[oq]e\[cq]
+(for
+.BR eqn ),
+.\" \[oq]G\[cq],
+.\" \[oq]g\[cq],
+\[oq]p\[cq]
+(for
+.BR pic ),
+\[oq]R\[cq]
+(for
+.BR refer ),
+\[oq]s\[cq]
+(for
+.BR soelim ),
+and
+\[oq]t\[cq]
+(for
+.BR tbl ).
+(see
+.BR roff (@MAN7EXT@)).
+.
+.
+.P
+Besides being a good reminder for the user, some formatters (like the
+.BR man (1)
+program) are even able to automatically start the preprocessors
+specified in the preprocessor word, but do not bet on this.
+.
+.
+.P
+The
+.I man
+program handles some preprocessors automatically, such that in
+man\~pages only the following characters should be used:
+\[oq]e\[cq], \[oq]p\[cq], and \[oq]t\[cq].
+.
+.
+..
+.\" ====================================================================
+.SH "WRITING MACROS"
+.\" ====================================================================
+.
+A
+.BR roff (@MAN7EXT@)
+document is a text file that is enriched by predefined formatting
+constructs, such as requests, escape sequences, strings, numeric
+registers, and macros from a macro package.
+.
+These elements are described in
+.BR roff (@MAN7EXT@).
+.
+.
+.P
+To give a document a personal style, it is most useful to extend the
+existing elements by defining some macros for repeating tasks; the best
+place for this is near the beginning of the document or in a separate
+file.
+.
+.
+.P
+Macros without arguments are just like strings.
+.
+But the full power of macros reveals when arguments are passed with a
+macro call.
+.
+Within the macro definition, the arguments are available as the escape
+sequences
+.BR \[rs]$1 ,
+\*[Ellipsis],
+.BR \[rs]$9 ,
+.BR \[rs]$[ \*[Ellipsis] ] ,
+.BR \[rs]$* ,
+and
+.BR \[rs]$@ ,
+the name under which the macro was called is in
+.BR \[rs]$0 ,
+and the number of arguments is in register
+.BR \[rs]n[.$] ;
+see
+.BR groff (@MAN7EXT@).
+.
+.
+.\" ====================================================================
+.SS "Copy-in Mode"
+.\" ====================================================================
+.
+The phase when groff reads a macro is called
+.I "copy-in mode"
+or
+.I "copy mode"
+in roff-talk.
+.
+This is comparable to the C\~preprocessing phase during the development
+of a program written in the C\~language.
+.
+.
+.P
+In this phase, groff interprets all backslashes; that means that all
+escape sequences in the macro body are interpreted and replaced by
+their value.
+.
+For constant expressions, this is wanted, but strings and registers
+that might change between calls of the macro must be protected from
+being evaluated.
+.
+This is most easily done by doubling the backslash that introduces the
+escape sequence.
+.
+This doubling is most important for the positional parameters.
+.
+For example, to print information on the arguments that were passed to
+the macro to the terminal, define a macro named \[oq].print_args\[cq],
+say.
+.
+.
+.IP
+.ds @1 \[rs]f[I]\[rs]\[rs]$0\[rs]f[]\"
+.ds @2 arguments:\"
+.EX
+\&.ds midpart was called with
+\&.de print_args
+\&.\ \ tm\ \*[@1]\ \[rs]*[midpart]\ \[rs]\[rs]n[.$]\ \*[@2]
+\&.\ \ tm\ \[rs]\[rs]$*
+\&..
+.EE
+.rm @1
+.rm @2
+.
+.
+.P
+When calling this macro by
+.
+.IP
+.EX
+\&.print_args arg1 arg2
+.EE
+.
+.P
+the following text is printed to the terminal:
+.
+.IP
+.EX
+\&\f[CI]print_args\f[] was called with the following 2 arguments:
+arg1 arg2
+.EE
+.
+.
+.P
+Let's analyze each backslash in the macro definition.
+.
+As the positional parameters and the number of arguments change
+with each call of the macro their leading backslash must be doubled,
+which results in
+.RI \[rs]\[rs] $*
+and
+.RI \[rs]\[rs] [.$] .
+The same applies to the macro name because it could be called with an
+alias name, so
+.RI \[rs]\[rs] $0 .
+.
+.
+.P
+On the other hand,
+.I midpart
+is a constant string, it does not change, so no doubling for
+.RI \[rs] *[midpart] .
+The
+.RI \[rs] f
+escape sequences are predefined groff elements for setting the font
+within the text.
+.
+Of course, this behavior does not change, so no doubling with
+.RI \[rs] f[I]
+and
+.RI \[rs] f[] .
+.
+.
+.\" ====================================================================
+.SS "Draft Mode"
+.\" ====================================================================
+.
+Writing groff macros is easy when the escaping mechanism is temporarily
+disabled.
+.
+In groff, this is done by enclosing the macro definition(s) into a
+pair of
+.B .eo
+and
+.B .ec
+requests.
+.
+Then the body in the macro definition is just like a normal part of
+the document \[em] text enhanced by calls of requests, macros,
+strings, registers, etc.
+.
+For example, the code above can be written in a simpler way by
+.
+.
+.IP
+.ds @1 \[rs]f[I]\[rs]$0\[rs]f[]\"
+.ds @2 arguments:\"
+.EX
+\&.eo
+\&.ds midpart was called with
+\&.de print_args
+\&.\ \ tm\ \*[@1]\ \[rs]*[midpart]\ \[rs]n[.$]\ \*[@2]
+\&.\ \ tm\ \[rs]$*
+\&..
+\&.ec
+.EE
+.rm @1
+.rm @2
+.
+.
+.P
+Unfortunately, draft mode cannot be used universally.
+.
+Although it is good enough for defining normal macros, draft mode
+fails with advanced applications, such as indirectly defined
+strings, registers, etc.
+.
+An optimal way is to define and test all macros in draft mode and then
+do the backslash doubling as a final step; do not forget to remove the
+.I .eo
+request.
+.
+.
+.\" ====================================================================
+.SS "Tips for Macro Definitions"
+.\" ====================================================================
+.
+.IP \(bu
+Start every line with a dot, for example, by using the groff request
+.B .nop
+for text lines, or write your own macro that handles also text lines
+with a leading dot.
+.
+.RS
+.IP
+.EX
+\&.de Text
+\&.\ \ if (\[rs]\[rs]n[.$] == 0)\ \[rs]
+\&.\ \ \ \ return
+\&.\ \ nop\ \[rs])\[rs]\[rs]$*\[rs])
+\&..
+.EE
+.RE
+.
+.IP \(bu
+Write a comment macro that works both for copy-in and draft mode; for
+as escaping is off in draft mode, trouble might occur when normal
+comments are used.
+.
+For example, the following macro just ignores its arguments, so it
+acts like a comment line:
+.
+.RS
+.IP
+.EX
+\&.de\ c
+\&..
+\&.c\ This\ is\ like\ a\ comment\ line.
+.EE
+.RE
+.
+.IP \(bu
+In long macro definitions, make ample use of comment lines or
+almost-empty lines (this is, lines which have a leading dot
+and nothing else) for a better structuring.
+.
+.IP \(bu
+To increase readability, use groff's indentation facility for
+requests and macro calls (arbitrary whitespace after the leading dot).
+.
+.
+.\" ====================================================================
+.SS "Diversions"
+.\" ====================================================================
+.
+Diversions can be used to implement quite advanced programming
+constructs.
+.
+They are comparable to pointers to large data structures in the
+C\~programming language, but their usage is quite different.
+.
+.
+.P
+In their simplest form, diversions are multi-line strings, but
+they get their power when diversions are used dynamically within macros.
+.
+The (formatted) information stored in a diversion can be retrieved by
+calling the diversion just like a macro.
+.
+.
+.P
+Most of the problems arising with diversions can be avoided if you
+remain aware of the fact that diversions always store complete lines.
+.
+If diversions are used when the line buffer has not been flushed,
+strange results are produced; not knowing this, many people get
+desperate about diversions.
+.
+To ensure that a diversion works, line breaks should be added at the
+right places.
+.
+To be on the secure side, enclose everything that has to do with
+diversions into a pair of line breaks; for example, by explicitly using
+.B .br
+requests.
+.
+This rule should be applied to diversion definition, both inside and
+outside, and to all calls of diversions.
+.
+This is a bit of overkill, but it works nicely.
+.
+.
+.P
+[If you really need diversions which should ignore the current partial
+line, use environments to save the current partial line and/\:or use the
+.B .box
+request.]
+.
+.
+.P
+The most powerful feature using diversions is to start a diversion
+within a macro definition and end it within another macro.
+.
+Then everything between each call of this macro pair is stored within
+the diversion and can be manipulated from within the macros.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+All macro package files must be named
+.RI name .tmac
+to fully use the tmac mechanism.
+.
+.IR tmac. name
+as with classical packages is possible as well, but deprecated.
+.
+.
+.P
+The macro files are kept in the
+.IR "tmac directories" ;
+a colon separated list of these constitutes the
+.IR "tmac path" .
+.
+.
+.P
+The search sequence for macro files is (in that order):
+.
+.IP \(bu
+the directories specified with troff/groff's
+.B \-M
+command-line option
+.
+.IP \(bu
+the directories given in the
+.I GROFF_TMAC_PATH
+environment variable
+.
+.IP \(bu
+the current directory (only if in unsafe mode, which is enabled by the
+.B \-U
+command-line switch)
+.
+.IP \(bu
+the home directory
+.
+.IP \(bu
+a platform-specific directory, being
+.
+.RS
+.IP
+.I @SYSTEMMACRODIR@
+.RE
+.
+.IP
+in this installation
+.
+.IP \(bu
+a site-specific (platform-independent) directory, being
+.
+.RS
+.IP
+.I @LOCALMACRODIR@
+.RE
+.
+.IP
+in this installation
+.
+.IP \(bu
+the main tmac directory, being
+.
+.RS
+.IP
+.I @MACRODIR@
+.RE
+.
+.IP
+in this installation
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROFF_TMAC_PATH
+A colon separated list of additional tmac directories in which to search
+for macro files.
+.
+See the previous section for a detailed description.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+This document was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME
+and
+.MT wl@\:gnu.org
+Werner Lemberg
+.ME .
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg,
+is the primary
+.I groff
+manual.
+.
+You can browse it interactively with \[lq]info groff\[rq].
+.
+.
+.TP
+.BR groff (@MAN1EXT@)
+an overview of the groff system.
+.
+.
+.TP
+.BR groff_man (@MAN7EXT@),
+.TQ
+.BR groff_mdoc (@MAN7EXT@),
+.TQ
+.BR groff_me (@MAN7EXT@),
+.TQ
+.BR groff_mm (@MAN7EXT@),
+.TQ
+.BR groff_mom (@MAN7EXT@),
+.TQ
+.BR groff_ms (@MAN7EXT@),
+.TQ
+.BR groff_trace (@MAN7EXT@),
+.TQ
+.BR groff_www (@MAN7EXT@).
+the groff tmac macro packages.
+.
+.
+.TP
+.BR groff (@MAN7EXT@)
+the groff language.
+.
+.
+.P
+The Filesystem Hierarchy Standard is available at the
+.UR http://\:www.pathname.com/\:fhs/
+FHS web site
+.UE .
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_tmac_C]
+.
+.
+.\" ====================================================================
+.\" Emacs settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/man/groff_tmac.man b/man/groff_tmac.man
deleted file mode 100644 (file)
index 5017dcb..0000000
+++ /dev/null
@@ -1,1271 +0,0 @@
-.\" Emacs mode: -*- nroff -*-
-.TH GROFF_TMAC @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_tmac \- macro files in the roff typesetting system
-.
-.\" groff_tmac(5):
-.\" Source file position: <groff_source>/man/groff_tmac.man
-.\" Installed position: <prefix>/share/man/man5/groff_tmac.5
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2000-2014 Free Software Foundation, Inc.
-
-This file is part of groff, the GNU roff type-setting system.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package, it is also
-available on\-line at the
-.UR http://\:www.gnu.org/\:copyleft/\:fdl.html
-GNU copyleft site
-.UE .
-..
-.
-.de au
-This file was written by
-.ME groff-bernd.warken-72@web.de
-Bernd Warken
-.ME
-and
-.MT wl@gnu.org
-Werner Lemberg
-.ME .
-..
-.
-.ds Ellipsis \&.\|.\|.\&\"
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.BR roff (@MAN7EXT@)
-type-setting system provides a set of macro packages suitable for
-special kinds of documents.
-.
-Each macro package stores its macros and definitions in a file called
-the package\[aq]s
-.BR "tmac file" .
-.
-The name is deduced from
-.RB \[oq] T\c
-.IB roff MAC\c
-.IR ros \[cq].
-.
-.
-.P
-The tmac files are normal roff source documents, except that they
-usually contain only definitions and setup commands, but no text.
-.
-All tmac files are kept in a single or a small number of directories,
-the
-.B tmac
-directories.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "GROFF MACRO PACKAGES"
-.\" --------------------------------------------------------------------
-.
-.I groff
-provides all classical macro packages, some more full packages, and
-some secondary packages for special purposes.
-.
-Note that it is not possible to use multiple primary macro packages at the
-same time; saying e.g.\&
-.
-.IP
-.EX
-\fIsh#\fP groff \-m man \-m ms foo
-.EE
-.
-.
-.P
-or
-.
-.IP
-.EX
-\fIsh#\fP groff \-m man foo \-m ms bar
-.EE
-.
-.P
-fails.
-.
-Exception to this is the use of man pages written with either the
-.B mdoc
-or the
-.B man
-macro package.
-See below the description of the
-.B andoc.tmac
-file.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Man\~Pages"
-.\" --------------------------------------------------------------------
-.
-.TP
-.B man
-This is the classical macro package for UNIX manual pages
-(man\~pages); it is quite handy and easy to use; see
-.BR groff_man (@MAN7EXT@).
-.
-.
-.TP
-.B doc
-.TQ
-.B mdoc
-An alternative macro package for man\~pages mainly used in BSD
-systems; it provides many new features, but it is not the standard for
-man\~pages; see
-.BR groff_mdoc (@MAN7EXT@).
-.
-.
-.TP
-.B andoc
-.TQ
-.B mandoc
-Use this file in case you don\[aq]t know whether the
-.B man
-macros or the
-.B mdoc
-package should be used.
-Multiple man pages (in either format) can be handled.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Full Packages"
-.\" --------------------------------------------------------------------
-.
-The packages in this section provide a complete set of macros for
-writing documents of any kind, up to whole books.
-.
-They are similar in functionality; it is a matter of taste which one
-to use.
-.
-.
-.TP
-.B me
-The classical
-.I me
-macro package; see
-.BR groff_me (@MAN7EXT@).
-.
-.
-.TP
-.B mm
-The semi-classical
-.I mm
-macro package; see
-.BR groff_mm (@MAN7EXT@).
-.
-.
-.TP
-.B mom
-The new
-.I mom
-macro package, only available in groff.
-.
-As this is not based on other packages, it can be freely designed.
-.
-So it is expected to become quite a nice, modern macro package.
-.
-See
-.BR groff_mom (@MAN7EXT@).
-.
-.
-.TP
-.B ms
-The classical
-.I ms
-macro package; see
-.BR groff_ms (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Language-specific Packages"
-.\" --------------------------------------------------------------------
-.
-.TP
-.B cs
-This file adds support for Czech localization, including the main macro
-packages (me, mom, mm, and ms).
-.
-.IP
-Note that
-.B cs.tmac
-sets the input encoding to latin-2.
-.
-.
-.TP
-.B de
-.TQ
-.B den
-German localization support, including the main macro packages (me, mom, mm,
-and ms).
-.
-.IP
-.B de.tmac
-selects hyphenation patterns for traditional orthography, and
-.B den.tmac
-does the same for the new orthography
-(\[oq]Recht\%schreib\%reform\[cq]).
-.
-It should be used as the last macro package on the command line.
-.
-.
-.TP
-.B fr
-This file adds support for French localization, including the main macro
-packages (me, mom, mm, and ms).
-.
-.
-Example:
-.RS
-.IP
-.EX
-\fIsh#\fP groff \-ms \-mfr foo.ms > foo.ps
-.EE
-.RE
-.
-.IP
-Note that
-.B fr.tmac
-sets the input encoding to latin-9 to get proper support of the
-\[oq]oe\[cq] ligature.
-.
-.
-.TP
-.B sv
-Swedish localization support, including the me, mom, and ms macro packages.
-.
-Note that Swedish for the mm macros is handled separately; see
-.BR groff_mmse (@MAN7EXT@).
-.
-It should be used as the last macro package on the command line.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Input Encodings"
-.\" --------------------------------------------------------------------
-.
-.
-.TP
-.B latin1
-.TQ
-.B latin2
-.TQ
-.B latin5
-.TQ
-.B latin9
-Various input encodings supported directly by groff.
-.
-Normally, this macro is loaded at the very beginning of a document or
-specified as the first macro argument on the command line.
-.
-.B @g@roff
-loads latin1 by default at start-up.
-.
-Note that these macro packages don\[aq]t work on EBCDIC hosts.
-.
-.
-.TP
-.B cp1047
-Encoding support for EBCDIC.
-.
-On those platforms it is loaded automatically at start-up.
-.
-Due to different character ranges used in
-.B @g@roff
-it doesn\[aq]t work on architectures which are based on ASCII.
-.
-.
-.P
-Note that it can happen that some input encoding characters are not
-available for a particular output device.
-.
-For example, saying
-.
-.P
-.EX
-groff \-Tlatin1 \-mlatin9 ...
-.EE
-.
-.P
-fails if you use the Euro character in the input.
-.
-Usually, this limitation is present only for devices which have a
-limited set of output glyphs
-.RB ( \-Tascii ,
-.BR \-Tlatin1 );
-for other devices it is usually sufficient to install proper
-fonts which contain the necessary glyphs.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Special Packages"
-.\" --------------------------------------------------------------------
-.
-The macro packages in this section are not intended for stand-alone
-usage, but can be used to add special functionality to any other
-macro package or to plain groff.
-.
-.
-.TP
-.B 62bit
-Provide some macros for addition, multiplication, and division of 60bit
-integers (allowing safe multiplication of 31bit integers, for example).
-.
-.
-.TP
-.B ec
-Switch to the EC and TC font families.
-.
-To be used with
-.BR \%grodvi (@MAN1EXT@)
-\[en] this man page also gives more details of how to use it.
-.
-.
-.TP
-.B papersize
-This macro file is already loaded at start-up by
-.B @g@troff
-so it isn\[aq]t necessary to call it explicitly.
-.
-It provides an interface to set the paper size on the command line with
-the option \f[B]\%\-dpaper=\f[]\,\f[I]size\f[].
-.
-Possible values for
-.I size
-are the same as the predefined
-.B papersize
-values in the DESC file (only lowercase; see
-.BR groff_font (@MAN5EXT@)
-for more) except
-.BR a7 \[en] d7 .
-.
-An appended
-.B l
-(ell) character denotes landscape orientation.
-.
-Examples:
-.BR a4 ,
-.BR c3l ,
-.BR letterl .
-.
-.IP
-Most output drivers need additional command line switches
-.B \-p
-and
-.B \-l
-to override the default paper length and orientation as set in the driver
-specific DESC file.
-.
-For example, use the following for PS output on A4 paper in landscape
-orientation:
-.
-.IP
-.EX
-.SM
-\fIsh#\fP groff \-Tps \-dpaper=a4l \-P\-pa4 \-P\-l \-ms foo.ms > foo.ps
-.EE
-.
-.
-.TP
-.B pic
-This file provides proper definitions for the macros
-.B PS
-and
-.BR PE ,
-needed for the
-.BR @g@pic (@MAN1EXT@)
-preprocessor.
-.
-They center each picture.
-.
-Use it only if your macro package doesn\[aq]t provide proper
-definitions for those two macros (actually, most of them already do).
-.
-.
-.TP
-.B pspic
-A single macro is provided in this file,
-.BR PSPIC ,
-to include a PostScript graphic in a document.
-.
-The following output devices support inclusion of PS images:
-.BR \-Tps ,
-.BR \-Tdvi ,
-.BR \-Thtml ,
-and
-.BR \-Txhtml ;
-for all other devices the image is replaced with a hollow rectangle
-of the same size.
-.
-This macro file is already loaded at start-up by
-.B @g@troff
-so it isn\[aq]t necessary to call it explicitly.
-.
-.IP
-Syntax:
-.RS
-.IP
-\&\fB.PSPIC\fP \
-[\fB\-L\fP\|\
-|\|\fB\-R\fP\|\
-|\|\fB\-C\fP\|\
-|\|\fB\-I\fP\ \fIn\fP] \
-\fI\|file\fP [\fIwidth\fP [\,\fIheight\/\fP]]
-.RE
-.
-.IP
-.I file
-is the name of the PostScript file;
-.I width
-and
-.I height
-give the desired width and height of the image.
-.
-If neither a
-.I width
-nor a
-.I height
-argument is specified, the image\[aq]s natural width (as given in the
-file\[aq]s bounding box) or the current line length is used as the
-width, whatever is smaller.
-.
-The
-.I width
-and
-.I height
-arguments may have scaling indicators attached;
-the default scaling indicator is\~\c
-.BR i .
-.
-This macro scales the graphic uniformly
-in the x and y\~directions so that it is no more than
-.I width
-wide
-and
-.I height
-high.
-.
-Option
-.B \-C
-centers the graphic horizontally, which is the default.
-.
-The
-.B \-L
-and
-.B \-R
-options cause the graphic to be left-aligned and right-aligned,
-respectively.
-.
-The
-.B \-I
-option causes the graphic to be indented by\~\c
-.I n
-(default scaling indicator is\~\c
-.BR m ).
-.
-.IP
-For use of
-.B .PSPIC
-within a diversion it is recommended to extend it with the following
-code, assuring that the diversion\[aq]s width completely covers the
-image\[aq]s width.
-.
-.RS
-.IP
-.EX
-\&.am PSPIC
-\&.\ \ vpt 0
-\&\[rs]h'(\[rs]\[rs]n[ps-offset]u + \[rs]\[rs]n[ps-deswid]u)'
-\&.\ \ sp \-1
-\&.\ \ vpt 1
-\&..
-.EE
-.RE
-.
-.
-.TP
-.B ptx
-A single macro is provided in this file,
-.BR xx ,
-for formatting permuted index entries as produced by the GNU
-.BR ptx (1)
-program.
-.
-In case you need a different formatting, copy the macro into
-your document and adapt it to your needs.
-.
-.
-.TP
-.B trace
-Use this for tracing macro calls.
-.
-It is only useful for debugging.
-.
-See
-.BR groff_trace (@MAN7EXT@) .
-.
-.
-.TP
-.B tty-char
-Overrides the definition of standard troff characters and some groff
-characters for TTY devices.
-.
-The optical appearance is intentionally inferior compared to that of
-normal TTY formatting to allow processing with critical equipment.
-.
-.
-.TP
-.B www
-Additions of elements known from the HTML format, as used in the
-internet (World Wide Web) pages; this includes URL links and mail
-addresses; see
-.BR groff_www (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SH NAMING
-.\" --------------------------------------------------------------------
-.
-Classical roff systems were designed before the conventions of the
-modern C
-.BR getopt (3)
-call evolved, and used a naming scheme for macro packages that looks
-odd to modern eyes.
-.
-Macro packages were always included with the option
-.BR \-m ;
-when this option was directly followed by its argument without an
-intervening space, this looked like a long option preceded by a single
-minus \[em] a sensation in the computer stone age.
-.
-To make this invocation form work, classical troff
-macro packages used names that started with the letter \[oq]m\[cq],
-which was omitted in the naming of the macro file.
-.
-.
-.P
-For example, the macro package for the man pages was called
-.IR man ,
-while its macro file
-.IR tmac.an .
-So it could be activated by the argument
-.I an
-to option
-.BR \-m ,
-or
-.BR \-man
-for short.
-.
-.
-.P
-For similar reasons, macro packages that did not start with an
-\[oq]m\[cq] had a leading \[oq]m\[cq] added in the documentation and
-in speech; for example, the package corresponding to
-.I tmac.doc
-was called
-.I mdoc
-in the documentation, although a more suitable name would be
-.IR doc .
-For, when omitting the space between the option and its argument, the
-command line option for activating this package reads
-.BR \-mdoc .
-.
-.
-.P
-To cope with all situations, actual versions of
-.BR groff (@MAN1EXT@)
-are smart about both naming schemes by providing two macro files
-for the inflicted macro packages; one with a leading \[oq]m\[cq]
-the other one without it.
-.
-So in
-.IR groff ,
-the
-.I man
-macro package may be specified as on of the following four methods:
-.
-.IP
-.EX
-\fIsh#\fP groff\ \-m\ man
-\fIsh#\fP groff\ \-man
-\fIsh#\fP groff\ \-mman
-\fIsh#\fP groff\ \-m\ an
-.EE
-.
-.
-.P
-Recent packages that do not start with \[oq]m\[cq] do not use an
-additional \[oq]m\[cq] in the documentation.
-.
-For example, the
-.I www
-macro package may be specified only as one of the two methods:
-.
-.IP
-.EX
-\fIsh#\fP groff\ \-m\ www
-\fIsh#\fP groff\ \-mwww
-.EE
-.
-.
-.P
-Obviously, variants like
-.I \-mmwww
-would not make much sense.
-.
-.
-.P
-A second strange feature of classical troff was to name macro files
-in the form \f[B]tmac.\f[]\,\f[I]name\f[].
-In modern operating systems, the type of a file is specified as a
-postfix, the file name extension.
-.
-Again, groff copes with this situation by searching both
-.IB anything .tmac
-and
-.BI tmac. anything
-if only
-.I anything
-is specified.
-.
-.
-.P
-The easiest way to find out which macro packages are available on a
-system is to check the man\~page
-.BR groff (@MAN1EXT@),
-or the contents of the
-.I tmac
-directories.
-.
-.
-.P
-In
-.IR groff ,
-most macro packages are described in\~man pages called
-.BR groff_\f[I]name\f[] (@MAN7EXT@),
-with a leading \[oq]m\[cq] for the classical packages.
-.
-.
-.\" --------------------------------------------------------------------
-.SH INCLUSION
-.\" --------------------------------------------------------------------
-.
-There are several ways to use a macro package in a document.
-.
-The classical way is to specify the troff/groff option
-.BR \-m
-.I name
-at run-time; this makes the contents of the macro package
-.I name
-available.
-.
-In groff, the file
-.IB name .tmac
-is searched within the tmac path; if not found,
-.BI tmac. name
-is searched for instead.
-.
-.
-.P
-Alternatively, it is also possible to include a macro file by adding
-the request
-.B .so
-.I filename
-into the document; the argument must be the full file name of an
-existing file, possibly with the directory where it is kept.
-.
-In groff, this was improved by the similar request
-.B .mso
-.IR package ,
-which added searching in the tmac path, just like option
-.BR \-m
-does.
-.
-.
-.P
-Note that in order to resolve the
-.B .so
-and
-.B .mso
-requests, the roff preprocessor
-.BR soelim (@MAN1EXT@)
-must be called if the files to be included need preprocessing.
-.
-This can be done either directly by a pipeline on the command line or
-by using the troff/groff option
-.BR \-s .
-.
-.I man
-calls soelim automatically.
-.
-.
-.P
-For example, suppose a macro file is stored as
-.
-.IP
-.I @MACRODIR@/macros.tmac
-.
-.P
-and is used in some document called
-.IR docu.roff .
-.
-.
-.P
-At run-time, the formatter call for this is
-.
-.IP
-.EX
-\fIsh#\fP groff \-m macros docu.roff
-.EE
-.
-.
-.P
-To include the macro file directly in the document either
-.
-.IP
-.EX
-\&.mso macros.tmac
-.EE
-.
-.P
-is used or
-.
-.IP
-.EX
-\&.so @MACRODIR@/macros.tmac
-.EE
-.
-.
-.P
-In both cases, the formatter should be called with option
-.B \-s
-to invoke
-.BR soelim .
-.IP
-.EX
-\fIsh#\fP groff \-s docu.roff
-.EE
-.
-.
-.P
-If you want to write your own groff macro file, call it
-.IB whatever .tmac
-and put it in some directory of the tmac path, see section
-.BR FILES .
-Then documents can include it with the
-.B .mso
-request or the option
-.BR \-m .
-.
-.
-.ig
-.\" --------------------------------------------------------------------
-.SH CONVENTION
-.\" --------------------------------------------------------------------
-.
-.\" This section does not fit into the framework of this document.
-.
-There is a convention that is supported by many modern roff
-type-setters and
-.BR man (1)
-programs, the
-.I preprocessor word
-described in the following.
-.
-.P
-If the first line in a document is a comment, the first word (after the
-comment characters and a blank) constitutes the
-.B preprocessor
-.BR word .
-That means that the letters of this word are interpreted as
-abbreviations for those preprocessor commands that should be run
-when formatting the document.
-.
-Mostly, only the letters corresponding to the options for the
-preprocessors are recognized,
-\[oq]e\[cq]
-(for
-.BR eqn ),
-.\" `G',
-.\" `g',
-\[oq]p\[cq]
-(for
-.BR pic ),
-\[oq]R\[cq]
-(for
-.BR refer ),
-\[oq]s\[cq]
-(for
-.BR soelim ),
-and
-\[oq]t\[cq]
-(for
-.BR tbl ).
-(see
-.BR roff (@MAN7EXT@)).
-.
-.
-.P
-Besides being a good reminder for the user, some formatters (like the
-.BR man (1)
-program) are even able to automatically start the preprocessors
-specified in the preprocessor word, but do not bet on this.
-.
-.
-.P
-The
-.I man
-program handles some preprocessors automatically, such that in
-man\~pages only the following characters should be used:
-\[oq]e\[cq], \[oq]p\[cq], and \[oq]t\[cq].
-.
-.
-..
-.\" --------------------------------------------------------------------
-.SH "WRITING MACROS"
-.\" --------------------------------------------------------------------
-.
-A
-.BR roff (@MAN7EXT@)
-document is a text file that is enriched by predefined formatting
-constructs, such as requests, escape sequences, strings, numeric
-registers, and macros from a macro package.
-.
-These elements are described in
-.BR roff (@MAN7EXT@).
-.
-.
-.P
-To give a document a personal style, it is most useful to extend the
-existing elements by defining some macros for repeating tasks; the best
-place for this is near the beginning of the document or in a separate
-file.
-.
-.
-.P
-Macros without arguments are just like strings.
-.
-But the full power of macros reveals when arguments are passed with a
-macro call.
-.
-Within the macro definition, the arguments are available as the escape
-sequences
-.BR \[rs]$1 ,
-\*[Ellipsis],
-.BR \[rs]$9 ,
-.BR \[rs]$[ \*[Ellipsis] ] ,
-.BR \[rs]$* ,
-and
-.BR \[rs]$@ ,
-the name under which the macro was called is in
-.BR \[rs]$0 ,
-and the number of arguments is in register
-.BR \[rs]n[.$] ;
-see
-.BR groff (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Copy-in Mode"
-.\" --------------------------------------------------------------------
-.
-The phase when groff reads a macro is called
-.I "copy-in mode"
-or
-.I "copy mode"
-in roff-talk.
-.
-This is comparable to the C\~preprocessing phase during the development
-of a program written in the C\~language.
-.
-.
-.P
-In this phase, groff interprets all backslashes; that means that all
-escape sequences in the macro body are interpreted and replaced by
-their value.
-.
-For constant expressions, this is wanted, but strings and registers
-that might change between calls of the macro must be protected from
-being evaluated.
-.
-This is most easily done by doubling the backslash that introduces the
-escape sequence.
-.
-This doubling is most important for the positional parameters.
-.
-For example, to print information on the arguments that were passed to
-the macro to the terminal, define a macro named \[oq].print_args\[cq],
-say.
-.
-.
-.IP
-.ds @1 \[rs]f[I]\[rs]\[rs]$0\[rs]f[]\"
-.ds @2 arguments:\"
-.EX
-\&.ds midpart was called with
-\&.de print_args
-\&.\ \ tm\ \*[@1]\ \[rs]*[midpart]\ \[rs]\[rs]n[.$]\ \*[@2]
-\&.\ \ tm\ \[rs]\[rs]$*
-\&..
-.EE
-.rm @1
-.rm @2
-.
-.
-.P
-When calling this macro by
-.
-.IP
-.EX
-\&.print_args arg1 arg2
-.EE
-.
-.P
-the following text is printed to the terminal:
-.
-.IP
-.EX
-\&\f[CI]print_args\f[] was called with the following 2 arguments:
-arg1 arg2
-.EE
-.
-.
-.P
-Let\[aq]s analyze each backslash in the macro definition.
-.
-As the positional parameters and the number of arguments change
-with each call of the macro their leading backslash must be doubled,
-which results in
-.RI \[rs]\[rs] $*
-and
-.RI \[rs]\[rs] [.$] .
-The same applies to the macro name because it could be called with an
-alias name, so
-.RI \[rs]\[rs] $0 .
-.
-.
-.P
-On the other hand,
-.I midpart
-is a constant string, it does not change, so no doubling for
-.RI \[rs] *[midpart] .
-The
-.RI \[rs] f
-escape sequences are predefined groff elements for setting the font
-within the text.
-.
-Of course, this behavior does not change, so no doubling with
-.RI \[rs] f[I]
-and
-.RI \[rs] f[] .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Draft Mode"
-.\" --------------------------------------------------------------------
-.
-Writing groff macros is easy when the escaping mechanism is temporarily
-disabled.
-.
-In groff, this is done by enclosing the macro definition(s) into a
-pair of
-.B .eo
-and
-.B .ec
-requests.
-.
-Then the body in the macro definition is just like a normal part of
-the document \[em] text enhanced by calls of requests, macros,
-strings, registers, etc.
-.
-For example, the code above can be written in a simpler way by
-.
-.
-.IP
-.ds @1 \[rs]f[I]\[rs]$0\[rs]f[]\"
-.ds @2 arguments:\"
-.EX
-\&.eo
-\&.ds midpart was called with
-\&.de print_args
-\&.\ \ tm\ \*[@1]\ \[rs]*[midpart]\ \[rs]n[.$]\ \*[@2]
-\&.\ \ tm\ \[rs]$*
-\&..
-\&.ec
-.EE
-.rm @1
-.rm @2
-.
-.
-.P
-Unfortunately, draft mode cannot be used universally.
-.
-Although it is good enough for defining normal macros, draft mode
-fails with advanced applications, such as indirectly defined
-strings, registers, etc.
-.
-An optimal way is to define and test all macros in draft mode and then
-do the backslash doubling as a final step; do not forget to remove the
-.I .eo
-request.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Tips for Macro Definitions"
-.\" --------------------------------------------------------------------
-.
-.IP \(bu
-Start every line with a dot, for example, by using the groff request
-.B .nop
-for text lines, or write your own macro that handles also text lines
-with a leading dot.
-.
-.RS
-.IP
-.EX
-\&.de Text
-\&.\ \ if (\[rs]\[rs]n[.$] == 0)\ \[rs]
-\&.\ \ \ \ return
-\&.\ \ nop\ \[rs])\[rs]\[rs]$*\[rs])
-\&..
-.EE
-.RE
-.
-.IP \(bu
-Write a comment macro that works both for copy-in and draft mode; for
-as escaping is off in draft mode, trouble might occur when normal
-comments are used.
-.
-For example, the following macro just ignores its arguments, so it
-acts like a comment line:
-.
-.RS
-.IP
-.EX
-\&.de\ c
-\&..
-\&.c\ This\ is\ like\ a\ comment\ line.
-.EE
-.RE
-.
-.IP \(bu
-In long macro definitions, make ample use of comment lines or
-almost-empty lines (this is, lines which have a leading dot
-and nothing else) for a better structuring.
-.
-.IP \(bu
-To increase readability, use groff\[aq]s indentation facility for
-requests and macro calls (arbitrary whitespace after the leading dot).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Diversions"
-.\" --------------------------------------------------------------------
-.
-Diversions can be used to implement quite advanced programming
-constructs.
-.
-They are comparable to pointers to large data structures in the
-C\~programming language, but their usage is quite different.
-.
-.
-.P
-In their simplest form, diversions are multi-line strings, but
-they get their power when diversions are used dynamically within macros.
-.
-The (formatted) information stored in a diversion can be retrieved by
-calling the diversion just like a macro.
-.
-.
-.P
-Most of the problems arising with diversions can be avoided if you remain
-aware of the fact that diversions always store complete lines.
-.
-If diversions are used when the line buffer has not been flushed,
-strange results are produced; not knowing this, many people get
-desperate about diversions.
-.
-To ensure that a diversion works, line breaks should be added at the
-right places.
-.
-To be on the secure side, enclose everything that has to do with
-diversions into a pair of line breaks; for example, by explicitly using
-.B .br
-requests.
-.
-This rule should be applied to diversion definition, both inside and
-outside, and to all calls of diversions.
-.
-This is a bit of overkill, but it works nicely.
-.
-.
-.P
-[If you really need diversions which should ignore the current partial
-line, use environments to save the current partial line and/\:or use the
-.B .box
-request.]
-.
-.
-.P
-The most powerful feature using diversions is to start a diversion
-within a macro definition and end it within another macro.
-.
-Then everything between each call of this macro pair is stored within
-the diversion and can be manipulated from within the macros.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-All macro names must be named
-.IB name .tmac
-to fully use the tmac mechanism.
-.
-.BI tmac. name
-as with classical packages is possible as well, but deprecated.
-.
-.
-.P
-The macro files are kept in the
-.IR "tmac directories" ;
-a colon separated list of these constitutes the
-.IR "tmac path" .
-.
-.
-.P
-The search sequence for macro files is (in that order):
-.
-.IP \(bu
-the directories specified with troff/groff\[aq]s
-.B \-M
-command line option
-.
-.IP \(bu
-the directories given in the
-.B $GROFF_TMAC_PATH
-environment variable
-.
-.IP \(bu
-the current directory (only if in unsafe mode, which is enabled by the
-.B \-U
-command line switch)
-.
-.IP \(bu
-the home directory
-.
-.IP \(bu
-a platform-specific directory, being
-.
-.RS
-.IP
-.B @SYSTEMMACRODIR@
-.RE
-.
-.IP
-in this installation
-.
-.IP \(bu
-a site-specific (platform-independent) directory, being
-.
-.RS
-.IP
-.B @LOCALMACRODIR@
-.RE
-.
-.IP
-in this installation
-.
-.IP \(bu
-the main tmac directory, being
-.
-.RS
-.IP
-.B @MACRODIR@
-.RE
-.
-.IP
-in this installation
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.B $GROFF_TMAC_PATH
-A colon separated list of additional tmac directories in which to search
-for macro files.
-.
-See the previous section for a detailed description.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-A complete reference for all parts of the groff system is found in the
-groff
-.BR info (1)
-file.
-.
-.
-.TP
-.BR groff (@MAN1EXT@)
-an overview of the groff system.
-.
-.
-.TP
-.BR groff_man (@MAN7EXT@),
-.TQ
-.BR groff_mdoc (@MAN7EXT@),
-.TQ
-.BR groff_me (@MAN7EXT@),
-.TQ
-.BR groff_mm (@MAN7EXT@),
-.TQ
-.BR groff_mom (@MAN7EXT@),
-.TQ
-.BR groff_ms (@MAN7EXT@),
-.TQ
-.BR groff_trace (@MAN7EXT@),
-.TQ
-.BR groff_www (@MAN7EXT@).
-the groff tmac macro packages.
-.
-.
-.TP
-.BR groff (@MAN7EXT@)
-the groff language.
-.
-.
-.P
-The Filesystem Hierarchy Standard is available at the
-.UR http://\:www.pathname.com/\:fhs/
-FHS web site
-.UE .
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHOR
-.\" --------------------------------------------------------------------
-.au
diff --git a/man/man.am b/man/man.am
new file mode 100644 (file)
index 0000000..da7276a
--- /dev/null
@@ -0,0 +1,54 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+man5_MANS += \
+  man/groff_font.5 \
+  man/groff_out.5 \
+  man/groff_tmac.5
+man7_MANS += \
+  man/ditroff.7 \
+  man/groff_char.7 \
+  man/groff_diff.7 \
+  man/groff.7 \
+  man/roff.7
+EXTRA_DIST += \
+  man/groff_font.5.man \
+  man/groff_out.5.man \
+  man/groff_tmac.5.man \
+  man/ditroff.7.man \
+  man/groff_char.7.man \
+  man/groff_diff.7.man \
+  man/groff.7.man \
+  man/roff.7.man
+
+# Case of out-of-source build: we must create the 'man' directory.
+BUILT_SOURCES += man
+man:
+       $(MKDIR_P) $(top_builddir)/man
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/man/roff.7.man b/man/roff.7.man
new file mode 100644 (file)
index 0000000..deff211
--- /dev/null
@@ -0,0 +1,1428 @@
+'\" t
+.TH ROFF @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+roff \- concepts and history of roff typesetting
+.
+.\" this is the man page roff.7
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr roff_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2000-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this
+.\" document under the terms of the GNU Free Documentation License,
+.\" Version 1.3 or any later version published by the Free Software
+.\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
+.\" and with no Back-Cover Texts.
+.\"
+.\" A copy of the Free Documentation License is included as a file
+.\" called FDL in the main directory of the groff source package.
+.
+.
+.\" ====================================================================
+.\" Local macros
+.
+.de Esc
+.  ds @1 \\$1
+.  shift
+.  nop \f[B]\[rs]\\*[@1]\f[]\\$*
+.  rm @1
+..
+.
+.
+.de QuotedChar
+.  ds @1 \\$1
+.  shift
+.  nop \[oq]\f[B]\\*[@1]\f[]\[cq]\\$*
+.  rm @1
+..
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I roff
+is the general name for a set of text formatting programs, known under
+names like
+.BR troff ,
+.BR nroff ,
+.BR ditroff ,
+.BR groff ,
+etc.
+.
+A
+.I roff
+system consists of an extensible text formatting language and a set of
+programs for printing and converting to other text formats.
+.
+Unix-like operating systems distribute a
+.I roff
+system as a core package.
+.
+.
+.P
+The most common
+.I roff
+system today is the free software implementation \f[CR]GNU\f[]
+.IR roff ,
+.BR groff (@MAN1EXT@).
+.
+.I groff
+implements the look-and-feel and functionality of its ancestors, with
+many extensions.
+.
+.
+.P
+The ancestry of
+.I roff
+is described in section \[lq]History\[rq] below.
+.
+In this document, the term
+.I roff
+always refers to the general class of roff programs, not to the
+.B roff
+command provided in early Unix systems.
+.
+.
+.P
+In spite of its age,
+.I roff
+is in wide use today, for example, the manual pages on Unix systems
+.RI ( man\~pages ),
+many software books, system documentation, standards, and corporate
+documents are written in roff.
+.
+The
+.I roff
+output for text devices is still unmatched, and its graphical output
+has the same quality as other free type-setting programs and is better
+than some of the commercial systems.
+.
+.
+.P
+.I roff
+is used to format Unix
+.IR "manual pages" ,
+(or
+.IR "man pages" ),
+the standard documentation system on many Unix-derived operating
+systems.
+.
+.
+.P
+This document describes the history of the development of the
+.IR "roff system" ;
+some usage aspects common to all
+.I roff
+versions, details on the
+.I roff
+pipeline, which is usually hidden behind front-ends like
+.BR groff (@MAN1EXT@);
+a general overview of the formatting language; some tips for editing
+.I roff
+files; and many pointers to further readings.
+.
+.
+.\" ====================================================================
+.SH "HISTORY"
+.\" ====================================================================
+.
+Document formatting by computer dates back to the 1960s.
+.
+The
+.I roff
+system itself is intimately connected to the Unix operating system, but
+its roots go back to the earlier operating systems CTSS and Multics.
+.
+.
+.\" ====================================================================
+.SS "The Predecessor RUNOFF"
+.\" ====================================================================
+.
+.BR roff 's
+ancestor
+.B RUNOFF
+was written in the MAD language by
+.I Jerry Saltzer
+for the
+.IR "Compatible Time Sharing System (CTSS)" ,
+a project of the Massachusetts Institute of Technology (MIT), in 1963
+and 1964\[em]note that CTSS commands were all uppercase.
+.
+.P
+In 1965, MIT's Project MAC teamed with Bell Telephone Laboratories
+(BTL) and General Electric to begin the
+.UR http://\:www.multicians.org
+.I Multics
+system
+.UE .
+.
+A command called
+.B runoff
+was written for Multics in the late 60s in the BCPL language, by
+.IR "Bob Morris" ,
+.IR "Doug McIlroy" ,
+and other members of the Multics team.
+.
+.
+.P
+Like its CTSS ancestor, Multics
+.B runoff
+formatted an input file consisting of text and command lines; commands
+began with a period and were two letters.
+.
+Output from these commands was to terminal devices such as IBM Selectric
+terminals.
+.
+Multics
+.B runoff
+had additional features added, such as the ability to do two-pass
+formatting; it became the main format for Multics documentation and text
+processing.
+.
+.
+.P
+BCPL and
+.B runoff
+were ported to the GCOS system at Bell Labs when BTL left the
+development of Multics.
+.
+.
+.P
+There is a free archive about
+.I historical RUNOFF
+documents.
+.
+You can get it anonymously by the shell command
+.RS
+.EX
+$git clone https://github.com/bwarken/RUNOFF_historical.git
+.EE
+.RE
+.
+.
+.P
+As well, there is a new project for writing a program that can read
+.I "RUNOFF files" ,
+but it does not yet work so far.
+.
+You can get an early version anonymously by the shell command
+.RS
+.EX
+$git clone https://github.com/bwarken/runoff.git
+.EE
+.RE
+.
+.
+.\" ====================================================================
+.SS "The Classical nroff/troff System"
+.\" ====================================================================
+.
+At BTL, there was a need to drive the
+.I Graphic Systems CAT
+typesetter, a graphical output device from a PDP-11 computer running
+Unix.
+.
+As
+.B runoff
+was too limited for this task it was further developed into a more
+powerful text formatting system by
+.IR "Joseph F.\& Ossanna" ,
+who already programmed several runoff ports.
+.
+.
+.P
+The name
+.I runoff
+was shortened to
+.IR roff .
+.
+The greatly enlarged language of Ossanna's version already
+included all elements of a full
+.IR "roff system" .
+.
+All modern
+.I roff
+systems try to implement compatibility to this system.
+.
+So Joe Ossanna can be called the father of all
+.I roff
+systems.
+.
+.
+.P
+This first
+.I roff system
+had three formatter programs.
+.
+.TP
+.B troff
+.RI ( "typesetter roff\/" )
+generated a graphical output for the
+.I CAT
+typesetter as its only device.
+.
+.TP
+.B nroff
+produced text output suitable for terminals and line printers.
+.
+.TP
+.B roff
+was the reimplementation of the former
+.B runoff
+program with its limited features; this program was abandoned in later
+versions.
+.
+Today, the name
+.I roff
+is used to refer to a
+.I troff/\:nroff
+system as a whole.
+.
+.
+.P
+Ossanna's first version was written in the PDP-11 assembly
+language and released in 1973.
+.
+.I Brian Kernighan
+joined the
+.I roff
+development by rewriting it in the C\~programming language.
+.
+The C\~version was released in 1975.
+.
+.
+.P
+The syntax of the formatting language of the
+.BR nroff /\: troff
+programs was documented in the famous
+.I "Troff User's Manual"
+[CSTR\~#54],
+first published in 1976, with further revisions up to 1992 by Brian
+Kernighan.
+.
+This document is the specification of the
+.IR "classical troff" .
+.
+All later
+.I roff
+systems tried to establish compatibility with this specification.
+.
+.
+.P
+After Ossanna's death in 1977, Kernighan went on with developing
+.IR troff .
+.
+In the late 1970s, Kernighan equipped
+.I troff
+with a general interface to support more devices, the intermediate
+output format, and the postprocessor system.
+.
+This completed the structure of a
+.I "roff system"
+as it is still in use today;
+see section \[lq]Using Roff\[rq] below.
+.
+In 1979, these novelties were described in the paper
+[CSTR\~#97].
+.
+This new
+.I troff
+version is the basis for all existing newer troff systems, including
+.IR groff .
+.
+On some systems, this
+.I device independent troff
+got a binary of its own, called
+.BR ditroff (@MAN7EXT@).
+.
+All modern
+.B troff
+programs already provide the full
+.B ditroff
+capabilities automatically.
+.
+.
+.\" ====================================================================
+.SS "Availability"
+.\" ====================================================================
+.
+The source code of both the ancient Unix and classical
+.I troff
+weren't available for two decades.
+.
+Nowadays, it is accessible again (on-line) for non-commercial use;
+see
+.BR "SEE ALSO" ,
+below.
+.
+.
+.\" ====================================================================
+.SS "groff \[em] free GNU roff"
+.\" ====================================================================
+.
+The most important free
+.I roff
+project was the \f[CR]GNU\f[] implementation of
+.IR troff ,
+written from scratch by
+.I James Clark
+and put under the
+.UR http://\:www.gnu.org/\:copyleft
+GNU Public License
+.UE .
+.
+It was called
+.I groff
+(\f[CR]GNU\f[]
+.IR roff ).
+.
+See
+.BR groff (@MAN1EXT@)
+for an overview.
+.
+.
+.P
+The
+.I groff
+system is still actively developed.
+.
+It is compatible to the classical
+.IR troff ,
+but many extensions were added.
+.
+It is the first
+.I roff
+system that is available on almost all operating systems \[em] and it
+is free.
+.
+This makes
+.I groff
+the de facto
+.I roff
+standard today.
+.
+.
+.\" ====================================================================
+.SS "Free Heirloom roff"
+.\" ====================================================================
+.
+An alternative is
+.UR https://\:github.com/\:n\-t\-roff/\:heirloom\-doctools
+.I Gunnar Ritter's Heirloom roff project
+.UE
+project, started in 2005, which provides enhanced versions of the
+various roff tools found in the OpenSolaris and Plan\~9 operating
+systems, now available under free licenses.
+.
+You can get this package with the shell command:
+.RS
+.EX
+\[Do] git clone https://github.com/n\-t\-roff/heirloom\-doctools
+.EE
+.RE
+.
+.
+.P
+Moreover, one finds there the
+.UR https://\:github.com/\:n\-t\-roff/\:DWB3.3
+.I Original Documenter's Workbench Release 3.3
+.UE .
+.
+.
+.\" ====================================================================
+.SH "USING ROFF"
+.\" ====================================================================
+.
+Most people won't even notice that they are actually using
+.IR roff .
+.
+When you read a system manual page (man page)
+.I roff
+is working in the background.
+.
+But using
+.I roff
+explicitly isn't difficult either.
+.
+.
+.P
+Some
+.I roff
+implementations provide wrapper programs that make it easy to use the
+.I roff
+system on the shell command line.
+.
+For example, the \f[CR]GNU\f[]
+.I roff
+implementation
+.BR groff (@MAN1EXT@)
+provides command-line options to avoid the long command pipes of
+classical
+.IR troff ;
+a program
+.BR grog (@MAN1EXT@)
+tries to guess from the document which arguments should be used for a
+run of
+.BR groff ;
+people who do not like specifying command-line options should try the
+.BR groffer (@MAN1EXT@)
+program for graphically displaying
+.I groff
+files and man pages.
+.
+.
+.\" ====================================================================
+.SS "The roff Pipe"
+.\" ====================================================================
+.
+Each
+.I roff
+system consists of preprocessors,
+.I roff
+formatter programs, and a set of device postprocessors.
+.
+This concept makes heavy use of the
+.I piping
+mechanism, that is, a series of programs is called one after the other,
+where the output of each program in the queue is taken as the input
+for the next program.
+.
+.RS
+.P
+cat \f[I]file\f[P] \
+| .\|.\|. \
+| \f[I]preproc\f[P] \
+| .\|.\|. \
+| troff \f[I]options\f[P] \
+| \f[I]postproc\f[P]
+.RE
+.
+.
+.P
+The preprocessors generate
+.I roff
+code that is fed into a
+.I roff
+formatter (e.g.\&
+.BR troff ),
+which in turn generates
+.I intermediate output
+that is fed into a device postprocessor program for printing or final
+output.
+.
+.
+.P
+All of these parts use programming languages of their own; each
+language is totally unrelated to the other parts.
+.
+Moreover,
+.I roff
+macro packages that were tailored for special purposes can be
+included.
+.
+.
+.P
+Most
+.I roff
+documents use the macros of some package, intermixed with code for one
+or more preprocessors, spiced with some elements from the plain
+.I roff
+language.
+.
+The full power of the
+.I roff
+formatting language is seldom needed by users; only programmers of
+macro packages need to know about the gory details.
+.
+.
+.
+.\" ====================================================================
+.SS "Preprocessors"
+.\" ====================================================================
+.
+A
+.I roff
+preprocessor is any program that generates output that syntactically
+obeys the rules of the
+.I roff
+formatting language.
+.
+Each preprocessor defines a language of its own that is translated
+into
+.I roff
+code when run through the preprocessor program.
+.
+Parts written in these languages may be included within a
+.I roff
+document; they are identified by special
+.I roff
+requests or macros.
+.
+Each document that is enhanced by preprocessor code must be run
+through all corresponding preprocessors before it is fed into the
+actual
+.I roff
+formatter program, for the formatter just ignores all alien code.
+.
+The preprocessor programs extract and transform only the document
+parts that are determined for them.
+.
+.
+.P
+There are a lot of free and commercial
+.I roff
+preprocessors.
+.
+Some of them aren't available on each system, but there is a small
+set of preprocessors that are considered as an integral part of each
+.I roff
+system.
+.
+The classical preprocessors are
+.
+.RS
+.TS
+tab (@);
+lb l.
+tbl@for tables.
+eqn@for mathematical formulae.
+pic@for drawing diagrams.
+refer@for bibliographic references.
+soelim@for including macro files from standard locations.
+chem@for drawing chemical formul\[ae].
+.TE
+.RE
+.
+.
+.P
+Other known preprocessors that are not available on all systems
+include
+.
+.RS
+.TS
+tab (@);
+lb l.
+grap@for constructing graphical elements.
+grn@for including \fBgremlin\fR(1) pictures.
+.TE
+.RE
+.
+.
+.\" ====================================================================
+.SS "Formatter Programs"
+.\" ====================================================================
+.
+A
+.I roff formatter
+is a program that parses documents written in the
+.I roff
+formatting language or uses some of the
+.I roff
+macro packages.
+.
+It generates
+.IR "intermediate output" ,
+which is intended to be fed into a single device postprocessor that
+must be specified by a command-line option to the formatter program.
+.
+The documents must have been run through all necessary preprocessors
+before.
+.
+.
+.P
+The output produced by a
+.I roff
+formatter is represented in yet another language, the
+.IR "intermediate output format"
+or
+.IR "troff output" .
+.
+This language was first specified in
+[CSTR\~#97];
+its \f[CR]GNU\f[] extension is documented in
+.BR groff_out (@MAN5EXT@).
+.
+The intermediate output language is a kind of assembly language
+compared to the high-level
+.I roff
+language.
+.
+The generated intermediate output is optimized for a special device,
+but the language is the same for every device.
+.
+.
+.P
+The
+.I roff
+formatter is the heart of the
+.I roff
+system.
+.
+The traditional
+.I roff
+had two formatters,
+.B nroff
+for text devices and
+.B troff
+for graphical devices.
+.
+.
+.P
+Often, the name
+.I troff
+is used as a general term to refer to both formatters.
+.
+.
+.\" ====================================================================
+.SS "Devices and Postprocessors"
+.\" ====================================================================
+.
+Devices are hardware interfaces like printers, text or graphical
+terminals, etc., or software interfaces such as a conversion into a
+different text or graphical format.
+.
+.
+.P
+A
+.I roff
+postprocessor is a program that transforms
+.I troff
+output into a form suitable for a special device.
+.
+The
+.I roff
+postprocessors are like device drivers for the output target.
+.
+.
+.P
+For each device there is a postprocessor program that fits the device
+optimally.
+.
+The postprocessor parses the generated intermediate output and
+generates device-specific code that is sent directly to the device.
+.
+.
+.P
+The names of the devices and the postprocessor programs are not fixed
+because they greatly depend on the software and hardware abilities of
+the actual computer.
+.
+For example, the classical devices mentioned in
+[CSTR\~#54]
+have greatly changed since the classical times.
+.
+The old hardware doesn't exist any longer and the old graphical
+conversions were quite imprecise when compared to their modern
+counterparts.
+.
+.
+.P
+For example, the PostScript device
+.I post
+in classical
+.I troff
+had a resolution of 720 units per inch, while
+.IR groff 's
+.I ps
+device has 72000, a refinement of factor 100.
+.
+.
+.P
+Today the operating systems provide device drivers for most
+printer-like hardware, so it isn't necessary to write a special
+hardware postprocessor for each printer.
+.
+.
+.\" ====================================================================
+.SH "ROFF PROGRAMMING"
+.\" ====================================================================
+.
+Documents using
+.I roff
+are normal text files decorated by
+.I roff
+formatting elements.
+.
+The
+.I roff
+formatting language is quite powerful; it is almost a full programming
+language and provides elements to enlarge the language.
+.
+With these, it became possible to develop macro packages that are
+tailored for special applications.
+.
+Such macro packages are much handier than plain
+.IR roff .
+.
+So most people will choose a macro package without worrying about the
+internals of the
+.I roff
+language.
+.
+.
+.\" ====================================================================
+.SS "Macro Packages"
+.\" ====================================================================
+.
+Macro packages are collections of macros that are suitable to format a
+special kind of documents in a convenient way.
+.
+This greatly eases the usage of
+.IR roff .
+.
+The macro definitions of a package are kept in a file called
+.IB name .tmac
+(classically
+.BI tmac. name\/\c\" Italic correction comes before \c !
+).
+.
+All tmac files are stored in one or more directories at standardized
+positions.
+.
+Details on the naming of macro packages and their placement is found
+in
+.BR groff_tmac (@MAN5EXT@).
+.
+.
+.P
+A macro package that is to be used in a document can be announced to
+the formatter by the command-line option
+.BR \-m ,
+see
+.BR troff (@MAN1EXT@),
+or it can be specified within a document using the file inclusion
+requests of the
+.I roff
+language, see
+.BR groff (@MAN7EXT@).
+.
+.
+.P
+Famous classical macro packages are
+.I man
+for traditional man pages,
+.I mdoc
+for \f[CR]BSD\f[]-style manual pages;
+the macro sets for books, articles, and letters are
+.I me
+(probably from the first name of its creator
+.I Eric
+Allman),
+.I ms
+(from
+.IR "Manuscript Macros\/" ),
+and
+.I mm
+(from
+.IR "Memorandum Macros\/" ).
+.
+.
+.\" ====================================================================
+.SS "The roff Formatting Language"
+.\" ====================================================================
+.
+The classical
+.I roff
+formatting language is documented in the
+.I Troff User's Manual
+[CSTR\~#54].
+.
+The
+.I roff
+language is a full programming language providing requests, definition
+of macros, escape sequences, string variables, number or size
+registers, and flow controls.
+.
+.
+.P
+.I Requests
+are the predefined basic formatting commands similar to the commands
+at the shell prompt.
+.
+The user can define request-like elements using predefined
+.I roff
+elements.
+.
+These are then called
+.IR macros .
+.
+A document writer will not note any difference in usage for requests
+or macros; both are written on a line on their own starting with a dot.
+.
+.
+.P
+.I Escape sequences
+are
+.I roff
+elements starting with a backslash
+.QuotedChar \[rs] .
+.
+They can be inserted anywhere, also in the midst of text in a line.
+.
+They are used to implement various features, including the insertion of
+non-\f[CR]ASCII\f[] characters with
+.Esc ( ,
+font changes with
+.Esc f ,
+in-line comments with
+.Esc \[dq] ,
+the escaping of special control characters like
+.Esc \[rs] ,
+and many other features.
+.
+.
+.P
+.I Strings
+are variables that can store a string.
+.
+A string is stored by the
+.B .ds
+request.
+.
+The stored string can be retrieved later by the
+.B \[rs]*
+escape sequence.
+.
+.
+.P
+.I Registers
+store numbers and sizes.
+.
+A register can be set with the request
+.B .nr
+and its value can be retrieved by the escape sequence
+.BR "\[rs]n" .
+.
+.
+.\" ====================================================================
+.SH "FILE NAME EXTENSIONS"
+.\" ====================================================================
+.
+Manual pages (man pages) take the section number as a file name
+extension, e.g., the filename for this document is
+.IR roff.7 ,
+i.e., it is kept in section\~7
+of the man pages.
+.
+.
+.P
+The classical macro packages take the package name as an extension,
+e.g.\&
+.IB file. me
+for a document using the
+.I me
+macro package,
+.IB file. mm
+for
+.IR mm ,
+.IB file. ms
+for
+.IR ms ,
+.IB file. pic
+for
+.I pic
+files,
+etc.
+.
+.
+.P
+But there is no general naming scheme for
+.I roff
+documents, though
+.IB file. tr
+for
+.I troff file
+is seen now and then.
+.
+Maybe there should be a standardization for the filename extensions of
+.I roff
+files.
+.
+.
+.P
+File name extensions can be very handy in conjunction with the
+.BR less (1)
+pager.
+.
+It provides the possibility to feed all input into a command-line pipe
+that is specified in the shell environment variable
+.BR LESSOPEN .
+.
+This process is not well documented, so here an example:
+.
+.RS
+.P
+.EX
+LESSOPEN='|lesspipe %s'
+.EE
+.RE
+.
+.
+.P
+where
+.B lesspipe
+is either a system supplied command or a shell script of your own.
+.
+.
+.P
+More details for
+.I file name extensions
+can be found at
+.BR groff_filenames (5).
+.
+.
+.\" ====================================================================
+.SH "EDITING ROFF"
+.\" ====================================================================
+.
+All
+.I roff
+formatters provide automated line breaks and horizontal and vertical
+spacing.
+.
+In order to not disturb this, the following tips can be helpful.
+.
+.IP \(bu
+Never include empty or blank lines in a
+.I roff
+document.
+.
+Instead, use the empty request (a line consisting of a dot only) or a
+line comment
+.B .\[rs]"\""
+if a structuring element is needed.
+.
+.IP \(bu
+Never start a line with whitespace because this can lead to unexpected
+behavior.
+.
+Indented paragraphs can be constructed in a controlled way by
+.I roff
+requests.
+.
+.IP \(bu
+Start each sentence on a line of its own, for the spacing after a dot
+is handled differently depending on whether it terminates an
+abbreviation or a sentence.
+.
+To distinguish both cases, do a line break after each sentence.
+.
+.IP \(bu
+To additionally use the auto-fill mode in Emacs, it is best to insert
+an empty
+.I roff
+request (a line consisting of a dot only) after each sentence.
+.
+.
+.P
+The following example shows judicious line breaking in a
+.I roff
+input file.
+.
+.RS
+.P
+.EX
+.\" Keep the text width to 65 columns or fewer in this example so that
+.\" it doesn't overrun the right margin when set in Courier (-Tps,
+.\" -Tpdf).
+This is an example of a
+\&.I roff
+document that you can type into your text editor.
+\&.
+.
+This is the next sentence in the same paragraph.
+\&.
+.
+This is a longer sentence stretching over several input lines;
+abbreviations like cf.\& are easily identified because the dot is
+not followed by a line break.
+\&.
+.
+In the output, this sentence continues the same paragraph.
+.EE
+.RE
+.
+.
+.\" ====================================================================
+.SS "Editing with Emacs"
+.\" ====================================================================
+.
+The best program for editing a
+.I roff
+document is Emacs (or XEmacs); see
+.BR emacs (1).
+.
+It provides an
+.I nroff
+mode that is suitable for all kinds of
+.I roff
+dialects.
+.
+This mode can be activated by the following methods.
+.
+.
+.P
+When editing a file within Emacs the mode can be changed by typing
+.RI \[oq] "M-x nroff\-mode" \[cq],
+where
+.B M-x
+means to hold down the
+.B Meta
+key (or
+.BR Alt )
+and press the
+.BR x\~ key
+at the same time.
+.
+.
+.P
+But it is also possible to have the mode automatically selected when
+the file is loaded into the editor.
+.
+.IP \(bu
+The most general method is to include the following 3 comment lines at
+the end of the file.
+.
+.RS
+.IP
+.EX
+\&.\[rs]" Local Variables:
+\&.\[rs]" mode: nroff
+\&.\[rs]" End:
+.EE
+.RE
+.
+.IP \(bu
+There is a set of file name extensions, e.g.\& the man pages that
+trigger the automatic activation of the
+.I nroff
+mode.
+.
+.IP \(bu
+Theoretically, it is possible to write the sequence
+.
+.RS
+.IP
+.EX
+\&.\[rs]" \%\-*\-\ nroff\ \-*\-\""
+.EE
+.RE
+.
+.IP
+as the first line of a file to have it started in
+.I nroff
+mode when loaded.
+.
+Unfortunately, some applications such as the
+.B man
+program are confused by this; so this is deprecated.
+.
+.
+.\" ====================================================================
+.SS "Editing with Vim"
+.\" ====================================================================
+.
+.\" TODO: elvis, vile.  Nvi does not support highlighting at all, and
+.\" gedit does but has no rules for roff yet.  Other editors TBD.
+Besides Emacs, some other editors provide
+.I nroff
+style files too, e.g.\&
+.BR vim (1),
+an extension of the
+.BR vi (1)
+program.
+.
+Vim's highlighting can be made to recognize
+.I roff
+files by setting the
+.I filetype
+option in a Vim
+.IR modeline .
+.
+For this feature to work, your copy of
+.B vim
+must be built with support for, and configured to enable, several
+features; consult the editor's online help topics
+\[lq]auto\-setting\[rq], \[lq]filetype\[rq], and \[lq]syntax\[rq].
+.
+Then put the following at the end of your
+.I roff
+files, after any Emacs configuration:
+.\" ...because Emacs pattern-matches against ~3000 bytes from the end of
+.\" the buffer for "Local variables:", but Vim only checks as many lines
+.\" as its 'modelines' variable tells it to.  A common default is "5",
+.\" but Emacs settings can be longer than that.
+.
+.P
+.
+.RS
+.IP
+.EX
+\&.\[rs]" vim: set filetype=groff:
+.EE
+.RE
+.
+.
+.P
+Replace \[lq]groff\[rq] in the above with \[lq]nroff\[rq] if you want
+highlighing that does
+.I not
+recognize many of the \f[CR]GNU\f[] extensions to
+.IR roff ,
+such as request, register, and string names longer than two characters.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+This document was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+There is a lot of documentation on
+.IR roff .
+.
+The original papers on classical
+.I troff
+are still available, and all aspects of
+.I groff
+are documented in great detail.
+.
+.
+.\" ====================================================================
+.SS "Internet sites"
+.\" ====================================================================
+.
+.TP
+History of Unix Manpages
+.UR http://\:manpages.bsd.lv/\:history.html
+The history page
+.UE
+of the mdocml project provides an overview of
+.I roff
+development up to date, with links to original documentation
+and comments of the original authors.
+.
+.TP
+troff.org
+.UR http://\:www.troff.org
+The historical troff site
+.UE
+provides an overview and pointers to the historical aspects of
+.IR roff .
+.
+.TP
+Multics
+.UR http://\:www.multicians.org
+The Multics site
+.UE
+contains a lot of information on the MIT projects, CTSS, Multics,
+early Unix, including
+.IR runoff ;
+especially useful are a glossary and the many links to ancient
+documents.
+.
+.TP
+Unix Archive
+.UR http://\:www.tuhs.org/\:Archive/
+The Ancient Unixes Archive
+.UE
+.
+provides the source code and some binaries of the ancient Unixes
+(including the source code of
+.I troff
+and its documentation) that were made public by Caldera since 2001,
+e.g.\& of the famous Unix version\~7 for PDP-11 at the
+.UR http://\:www.tuhs.org/\:Archive/\:PDP\-11/\:Trees/\:V7
+Unix V7 site
+.UE .
+.
+.TP
+Developers at AT&T Bell Labs
+.UR http://\:www.bell\-labs.com/
+Bell Labs Computing and Mathematical Sciences Research
+.UE
+.
+provides a search facility for tracking information on the early
+developers.
+.
+.TP
+Plan 9
+.UR http://\:plan9.bell\-labs.com
+The Plan\~9 operating system
+.UE
+.
+by AT&T Bell Labs.
+.
+.TP
+runoff
+.UR http://\:web.mit.edu/\:Saltzer/\:www/\:publications/\:pubs.html
+Jerry Saltzer's home page
+.UE
+.
+stores some documents using the ancient RUNOFF formatting language.
+.
+.TP
+CSTR Papers
+.UR https://\:www.alcatel\-lucent.com/\:bell\-labs\-journals
+The Bell Labs (now Alcatel) CSTR site
+.UE
+.
+stores the original
+.I troff
+manuals (CSTR #54, #97, #114, #116, #122) and famous historical
+documents on programming.
+.
+.TP
+\f[CR]GNU\f[] \f[I]roff\f[]
+.UR http://\:www.gnu.org/\:software/\:groff
+The groff web site
+.UE
+provides the free
+.I roff
+implementation
+.IR groff ,
+the actual standard
+.IR roff .
+.
+.
+.\" ====================================================================
+.SS "Historical roff Documentation"
+.\" ====================================================================
+.
+Many classical
+.B troff
+documents are still available on-line.
+.
+The two main manuals of the
+.I troff
+language are
+.
+.TP
+[CSTR\~#54]
+J.\& F.\& Ossanna,
+.UR http://\:www.troff.org/\:54.pdf
+.I "Nroff/\:Troff User's Manual"
+.UE ;
+.
+Bell Labs, 1976; revised by Brian Kernighan, 1992.
+.
+.TP
+[CSTR\~#97]
+Brian Kernighan,
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz
+.I "A Typesetter-independent TROFF"
+.UE ,
+.
+Bell Labs, 1981, revised March 1982.
+.
+.P
+The \[lq]little language\[rq]
+.I roff
+papers are
+.
+.TP
+[CSTR\~#114]
+Jon L.\& Bentley and Brian W.\& Kernighan,
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:114.ps.gz
+.I "GRAP \[en] A Language for Typesetting Graphs"
+.UE ;
+.
+Bell Labs, August 1984.
+.
+.TP
+[CSTR\~#116]
+Brian W.\& Kernighan,
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:116.ps.gz
+.I "PIC \[en] A Graphics Language for Typesetting"
+.UE ;
+.
+Bell Labs, December 1984.
+.
+.TP
+[CSTR\~#122]
+J.\& L.\& Bentley, L.\& W.\& Jelinski, and B.\& W.\& Kernighan,
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:122.ps.gz
+.I "CHEM \[en] A Program for Typesetting Chemical Structure Diagrams,"
+.I "Computers and Chemistry"
+.UE ;
+.
+Bell Labs, April 1986.
+.
+.
+.P
+You can get an archive with most
+.I classical roff documentation
+as reasonable
+.I PDF files
+at
+.I github
+using the
+.I shell command
+.RS
+.EX
+$ git clone https://github.com/bwarken/roff_classical.git
+.EE
+.RE
+.
+.
+.\" ====================================================================
+.SS "Manual Pages"
+.\" ====================================================================
+.
+Due to its complex structure, a full
+.I roff
+system has many man pages, each describing a single aspect of
+.IR roff .
+.
+Unfortunately, there is no general naming scheme for the documentation
+among the different
+.I roff
+implementations.
+.
+.
+.P
+In
+.IR groff ,
+the man page
+.BR groff (@MAN1EXT@)
+contains a survey of all documentation available in
+.IR groff .
+.
+.
+.P
+On other systems, you are on your own, but
+.BR troff (1)
+might be a good starting point.
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[roff_C]
+.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/man/roff.man b/man/roff.man
deleted file mode 100644 (file)
index 6ce18e7..0000000
+++ /dev/null
@@ -1,1368 +0,0 @@
-'\" t
-.TH ROFF @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-roff \- concepts and history of roff typesetting
-.
-.\" this is man-page roff.7
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2000-2014      Free Software Foundation, Inc.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the FDL (GNU Free Documentation License) Version
-1.3 or any later version published by the Free Software Foundation.
-with the Invariant Sections being the .au and .co macro definitions,
-with no Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-
-The license text is also available on-line at the
-.UR http://\:www.gnu.org/\:copyleft/\:fdl.html
-GNU copyleft site
-.UE .
-..
-.
-.de au
-This man-page was written by
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME
-and is maintained by
-.MT wl@gnu.org
-Werner Lemberg
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Local macros
-.
-.de Esc
-.  ds @1 \\$1
-.  shift
-.  nop \f[B]\[rs]\\*[@1]\f[]\\$*
-.  rm @1
-..
-.
-.
-.de QuotedChar
-.  ds @1 \\$1
-.  shift
-.  nop \[oq]\f[B]\\*[@1]\f[]\[cq]\\$*
-.  rm @1
-..
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.I roff
-is the general name for a set of text formatting programs, known under
-names like
-.BR troff ,
-.BR nroff ,
-.BR ditroff ,
-.BR groff ,
-etc.
-.
-A
-.I roff
-system consists of an extensible text formatting language and a set of
-programs for printing and converting to other text formats.
-.
-Unix-like operating systems distribute a
-.I roff
-system as a core package.
-.
-.
-.P
-The most common
-.I roff
-system today is the free software implementation \f[CR]GNU\f[]
-.IR roff ,
-.BR groff (@MAN1EXT@).
-.
-.I groff
-implements the look-and-feel and functionality of its ancestors, with many
-extensions.
-.
-.
-.P
-The ancestry of
-.I roff
-is described in section
-.BR HISTORY .
-.
-In this document, the term
-.I roff
-always refers to the general class of roff programs, not to the
-.B roff
-command provided in early UNIX systems.
-.
-.
-.P
-In spite of its age,
-.I roff
-is in wide use today, for example, the manual pages on UNIX systems
-.RI ( man\~pages ),
-many software books, system documentation, standards, and corporate
-documents are written in roff.
-.
-The
-.I roff
-output for text devices is still unmatched, and its graphical output
-has the same quality as other free type-setting programs and is better
-than some of the commercial systems.
-.
-.
-.P
-.I roff
-is used to format UNIX
-.IR "manual pages" ,
-(or
-.IR "man pages" ),
-the standard documentation system on many UNIX-derived operating systems.
-.
-.
-.P
-This document describes the history of the development of the
-.IR "roff system" ;
-some usage aspects common to all
-.I roff
-versions, details on the
-.I roff
-pipeline, which is usually hidden behind front-ends like
-.BR groff (@MAN1EXT@);
-a general overview of the formatting language; some tips for editing
-.I roff
-files; and many pointers to further readings.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "HISTORY"
-.\" --------------------------------------------------------------------
-.
-Document formatting by computer dates back to the 1960s.
-.
-The
-.I roff
-system itself is intimately connected to the Unix operating system, but its
-roots go back to the earlier operating systems CTSS and Multics.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "The Predecessor RUNOFF"
-.\" --------------------------------------------------------------------
-.
-.BR roff \[aq]s
-ancestor
-.B RUNOFF
-was written in the MAD language by
-.I Jerry Saltzer
-for the
-.IR "Compatible Time Sharing System (CTSS)" ,
-a project of the Massachusetts Institute of Technology (MIT), in 1963 and
-1964 \[en] note that CTSS commands were all uppercase.
-.
-.P
-In 1965, MIT\[aq]s Project MAC teamed with Bell Telephone Laboratories
-(BTL) and General Electric to begin the
-.UR http://\:www.multicians.org
-.I Multics
-system
-.UE .
-.
-A command called
-.B runoff
-was written for Multics in the late 60s in the BCPL language, by
-.IR "Bob Morris" ,
-.IR "Doug McIlroy" ,
-and other members of the Multics team.
-.
-.
-.P
-Like its CTSS ancestor, Multics
-.B runoff
-formatted an input file consisting of text and command lines; commands began
-with a period and were two letters.
-.
-Output from these commands was to terminal devices such as IBM Selectric
-terminals.
-.
-Multics
-.B runoff
-had additional features added, such as the ability to do two-pass
-formatting; it became the main format for Multics documentation and text
-processing.
-.
-.
-.P
-BCPL and
-.B runoff
-were ported to the GCOS system at Bell Labs when BTL left the development of
-Multics.
-.
-.
-.P
-There is a free archive about
-.I historical RUNOFF
-documents.
-.
-You can get it anonymously by the shell command
-.RS
-.EX
-$git clone https://github.com/bwarken/RUNOFF_historical.git
-.EE
-.RE
-.
-.
-.P
-As well, there is a new project for writing a program that can read
-.I "RUNOFF files" ,
-but it does not yet work so far.
-.
-You can get an early version anonymously by the shell command
-.RS
-.EX
-$git clone https://github.com/bwarken/runoff.git
-.EE
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "The Classical nroff/troff System"
-.\" --------------------------------------------------------------------
-.
-At BTL, there was a need to drive the
-.I Graphic Systems CAT
-typesetter, a graphical output device from a PDP-11 computer running Unix.
-.
-As
-.B runoff
-was too limited for this task it was further developed into a more
-powerful text formatting system by
-.IR "Joseph F.\& Ossanna" ,
-who already programmed several runoff ports.
-.
-.
-.P
-The name
-.I runoff
-was shortened to
-.IR roff .
-.
-The greatly enlarged language of Ossanna\[aq]s version already
-included all elements of a full
-.IR "roff system" .
-.
-All modern
-.I roff
-systems try to implement compatibility to this system.
-.
-So Joe Ossanna can be called the father of all
-.I roff
-systems.
-.
-.
-.P
-This first
-.I roff system
-had three formatter programs.
-.
-.TP
-.B troff
-.RI ( "typesetter roff\/" )
-generated a graphical output for the
-.I CAT
-typesetter as its only device.
-.
-.TP
-.B nroff
-produced text output suitable for terminals and line printers.
-.
-.TP
-.B roff
-was the reimplementation of the former
-.B runoff
-program with its limited features; this program was abandoned in later
-versions.
-.
-Today, the name
-.I roff
-is used to refer to a
-.I troff/\:nroff
-system as a whole.
-.
-.
-.P
-Ossanna\[aq]s first version was written in the PDP-11 assembly
-language and released in 1973.
-.
-.I Brian Kernighan
-joined the
-.I roff
-development by rewriting it in the C\~programming language.
-.
-The C\~version was released in 1975.
-.
-.
-.P
-The syntax of the formatting language of the
-.BR nroff /\: troff
-programs was documented in the famous
-.IR "Troff User\[aq]s Manual [CSTR\~#54]" ,
-first published in 1976, with further revisions up to 1992 by Brian
-Kernighan.
-.
-This document is the specification of the
-.IR "classical troff" .
-.
-All later
-.I roff
-systems tried to establish compatibility with this specification.
-.
-.
-.P
-After Ossanna\[aq]s death in 1977, Kernighan went on with developing
-.IR troff .
-.
-In the late 1970s, Kernighan equipped
-.I troff
-with a general interface to support more devices, the intermediate
-output format, and the postprocessor system.
-.
-This completed the structure of a
-.I "roff system"
-as it is still in use today; see section
-.BR "USING ROFF" .
-.
-In 1979, these novelties were described in the paper
-.IR "[CSTR\~#97]" .
-.
-This new
-.I troff
-version is the basis for all existing newer troff systems, including
-.IR groff .
-.
-On some systems, this
-.I device independent troff
-got a binary of its own, called
-.BR ditroff (@MAN7EXT@).
-.
-All modern
-.B troff
-programs already provide the full
-.B ditroff
-capabilities automatically.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Availability"
-.\" --------------------------------------------------------------------
-.
-The source code of both the ancient Unix and classical
-.I troff
-weren\[aq]t available for two decades.
-.
-Meanwhile, it is accessible again (on-line) for non-commercial use,
-cf.\& section
-.BR "SEE ALSO" .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "groff \[em] free GNU roff"
-.\" --------------------------------------------------------------------
-.
-The most important free
-.I roff
-project was the \f[CR]GNU\f[] implementation of
-.IR troff ,
-written from scratch by
-.I James Clark
-and put under the
-.UR http://\:www.gnu.org/\:copyleft
-GNU Public License
-.UE .
-.
-It was called
-.I groff
-(\f[CR]GNU\f[]
-.IR roff ).
-.
-See
-.BR groff (@MAN1EXT@)
-for an overview.
-.
-.
-.P
-The
-.I groff
-system is still actively developed.
-.
-It is compatible to the classical
-.IR troff ,
-but many extensions were added.
-.
-It is the first
-.I roff
-system that is available on almost all operating systems \[em] and it
-is free.
-.
-This makes
-.I groff
-the de-facto
-.I roff
-standard today.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Free Heirloom roff"
-.\" --------------------------------------------------------------------
-.
-An alternative is
-.UR https://\:github.com/\:n-t-roff/\:heirloom-doctools
-.I Gunnar Ritter\[aq]s Heirloom roff project
-.UE
-project, started in 2005, which provides enhanced versions of the various
-roff tools found in the OpenSolaris and Plan\~9 operating systems, now
-available under free licenses.
-.
-You can get this package with the shell command:
-.RS
-.EX
-\[Do] git clone https://github.com/n-t-roff/heirloom-doctools
-.EE
-.RE
-.
-.
-.P
-Moreover, one finds there the
-.UR https://github.com/n-t-roff/DWB3.3
-.I Original Documenter\[aq]s Workbench Release 3.3
-.UE .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "USING ROFF"
-.\" --------------------------------------------------------------------
-.
-Most people won\[aq]t even notice that they are actually using
-.IR roff .
-.
-When you read a system manual page (man page)
-.I roff
-is working in the background.
-.
-.I roff
-documents can be viewed with a native viewer called
-.BR \%xditview (1x),
-a standard program of the X window distribution, see
-.BR X (7x).
-.
-But using
-.I roff
-explicitly isn\[aq]t difficult either.
-.
-.
-.P
-Some
-.I roff
-implementations provide wrapper programs that make it easy to use the
-.I roff
-system on the shell command line.
-.
-For example, the \f[CR]GNU\f[]
-.I roff
-implementation
-.BR groff (@MAN1EXT@)
-provides command line options to avoid the long command pipes of
-classical
-.IR troff ;
-a program
-.BR grog (@MAN1EXT@)
-tries to guess from the document which arguments should be used for a
-run of
-.BR groff ;
-people who do not like specifying command line options should try the
-.BR groffer (@MAN1EXT@)
-program for graphically displaying
-.I groff
-files and man pages.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "The roff Pipe"
-.\" --------------------------------------------------------------------
-.
-Each
-.I roff
-system consists of preprocessors,
-.I roff
-formatter programs, and a set of device postprocessors.
-.
-This concept makes heavy use of the
-.I piping
-mechanism, that is, a series of programs is called one after the other,
-where the output of each program in the queue is taken as the input
-for the next program.
-.
-.RS
-.P
-cat \f[I]file\f[P] \
-| .\|.\|. \
-| \f[I]preproc\f[P] \
-| .\|.\|. \
-| troff \f[I]options\f[P] \
-| \f[I]postproc\f[P]
-.RE
-.
-.
-.P
-The preprocessors generate
-.I roff
-code that is fed into a
-.I roff
-formatter (e.g.\&
-.BR troff ),
-which in turn generates
-.I intermediate output
-that is fed into a device postprocessor program for printing or final
-output.
-.
-.
-.P
-All of these parts use programming languages of their own; each
-language is totally unrelated to the other parts.
-.
-Moreover,
-.I roff
-macro packages that were tailored for special purposes can be
-included.
-.
-.
-.P
-Most
-.I roff
-documents use the macros of some package, intermixed with code for one
-or more preprocessors, spiced with some elements from the plain
-.I roff
-language.
-.
-The full power of the
-.I roff
-formatting language is seldom needed by users; only programmers of
-macro packages need to know about the gory details.
-.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Preprocessors"
-.\" --------------------------------------------------------------------
-.
-A
-.I roff
-preprocessor is any program that generates output that syntactically
-obeys the rules of the
-.I roff
-formatting language.
-.
-Each preprocessor defines a language of its own that is translated
-into
-.I roff
-code when run through the preprocessor program.
-.
-Parts written in these languages may be included within a
-.I roff
-document; they are identified by special
-.I roff
-requests or macros.
-.
-Each document that is enhanced by preprocessor code must be run
-through all corresponding preprocessors before it is fed into the
-actual
-.I roff
-formatter program, for the formatter just ignores all alien code.
-.
-The preprocessor programs extract and transform only the document
-parts that are determined for them.
-.
-.
-.P
-There are a lot of free and commercial
-.I roff
-preprocessors.
-.
-Some of them aren\[aq]t available on each system, but there is a small
-set of preprocessors that are considered as an integral part of each
-.I roff
-system.
-.
-The classical preprocessors are
-.
-.RS
-.TS
-tab (@);
-lb l.
-tbl@for tables.
-eqn@for mathematical formulae.
-pic@for drawing diagrams.
-refer@for bibliographic references.
-soelim@for including macro files from standard locations.
-chem@for drawing chemical formul\[ae].
-.TE
-.RE
-.
-.
-.P
-Other known preprocessors that are not available on all systems
-include
-.
-.RS
-.TS
-tab (@);
-lb l.
-grap@for constructing graphical elements.
-grn@for including \fBgremlin\fR(1) pictures.
-.TE
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Formatter Programs"
-.\" --------------------------------------------------------------------
-.
-A
-.I roff formatter
-is a program that parses documents written in the
-.I roff
-formatting language or uses some of the
-.I roff
-macro packages.
-.
-It generates
-.IR "intermediate output" ,
-which is intended to be fed into a single device postprocessor that
-must be specified by a command-line option to the formatter program.
-.
-The documents must have been run through all necessary preprocessors
-before.
-.
-.
-.P
-The output produced by a
-.I roff
-formatter is represented in yet another language, the
-.IR "intermediate output format"
-or
-.IR "troff output" .
-.
-This language was first specified in
-.IR "[CSTR\~#97]" ;
-its \f[CR]GNU\f[] extension is documented in
-.BR groff_out (@MAN5EXT@).
-.
-The intermediate output language is a kind of assembly language
-compared to the high-level
-.I roff
-language.
-.
-The generated intermediate output is optimized for a special device,
-but the language is the same for every device.
-.
-.
-.P
-The
-.I roff
-formatter is the heart of the
-.I roff
-system.
-.
-The traditional
-.I roff
-had two formatters,
-.B nroff
-for text devices and
-.B troff
-for graphical devices.
-.
-.
-.P
-Often, the name
-.I troff
-is used as a general term to refer to both formatters.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Devices and Postprocessors"
-.\" --------------------------------------------------------------------
-.
-Devices are hardware interfaces like printers, text or graphical
-terminals, etc., or software interfaces such as a conversion into a
-different text or graphical format.
-.
-.
-.P
-A
-.I roff
-postprocessor is a program that transforms
-.I troff
-output into a form suitable for a special device.
-.
-The
-.I roff
-postprocessors are like device drivers for the output target.
-.
-.
-.P
-For each device there is a postprocessor program that fits the device
-optimally.
-.
-The postprocessor parses the generated intermediate output and
-generates device-specific code that is sent directly to the device.
-.
-.
-.P
-The names of the devices and the postprocessor programs are not fixed
-because they greatly depend on the software and hardware abilities of
-the actual computer.
-.
-For example, the classical devices mentioned in
-.I [CSTR\~#54]
-have greatly changed since the classical times.
-.
-The old hardware doesn\[aq]t exist any longer and the old graphical
-conversions were quite imprecise when compared to their modern
-counterparts.
-.
-.
-.P
-For example, the Postscript device
-.I post
-in classical
-.I troff
-had a resolution of 720 units per inch, while
-.IR groff \[aq]s
-.I ps
-device has 72000, a refinement of factor 100.
-.
-.
-.P
-Today the operating systems provide device drivers for most
-printer-like hardware, so it isn\[aq]t necessary to write a special
-hardware postprocessor for each printer.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "ROFF PROGRAMMING"
-.\" --------------------------------------------------------------------
-.
-Documents using
-.I roff
-are normal text files decorated by
-.I roff
-formatting elements.
-.
-The
-.I roff
-formatting language is quite powerful; it is almost a full programming
-language and provides elements to enlarge the language.
-.
-With these, it became possible to develop macro packages that are
-tailored for special applications.
-.
-Such macro packages are much handier than plain
-.IR roff .
-.
-So most people will choose a macro package without worrying about the
-internals of the
-.I roff
-language.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Macro Packages"
-.\" --------------------------------------------------------------------
-.
-Macro packages are collections of macros that are suitable to format a
-special kind of documents in a convenient way.
-.
-This greatly eases the usage of
-.IR roff .
-.
-The macro definitions of a package are kept in a file called
-.IB name .tmac
-(classically
-.BI tmac. name\c
-).
-.
-All tmac files are stored in one or more directories at standardized
-positions.
-.
-Details on the naming of macro packages and their placement is found
-in
-.BR groff_tmac (@MAN5EXT@).
-.
-.
-.P
-A macro package that is to be used in a document can be announced to
-the formatter by the command line option
-.BR \-m ,
-see
-.BR troff (@MAN1EXT@),
-or it can be specified within a document using the file inclusion
-requests of the
-.I roff
-language, see
-.BR groff (@MAN7EXT@).
-.
-.
-.P
-Famous classical macro packages are
-.I man
-for traditional man pages,
-.I mdoc
-for \f[CR]BSD\f[]-style manual pages;
-the macro sets for books, articles, and letters are
-.I me
-(probably from the first name of its creator
-.I Eric
-Allman),
-.I ms
-(from
-.IR "Manuscript Macros\/" ),
-and
-.I mm
-(from
-.IR "Memorandum Macros\/" ).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "The roff Formatting Language"
-.\" --------------------------------------------------------------------
-.
-The classical
-.I roff
-formatting language is documented in the
-.I Troff User\[aq]s Manual
-.IR "[CSTR\~#54]" .
-.
-The
-.I roff
-language is a full programming language providing requests, definition
-of macros, escape sequences, string variables, number or size
-registers, and flow controls.
-.
-.
-.P
-.I Requests
-are the predefined basic formatting commands similar to the commands
-at the shell prompt.
-.
-The user can define request-like elements using predefined
-.I roff
-elements.
-.
-These are then called
-.IR macros .
-.
-A document writer will not note any difference in usage for requests
-or macros; both are written on a line on their own starting with a dot.
-.
-.
-.P
-.I Escape sequences
-are
-.I roff
-elements starting with a backslash
-.QuotedChar \[rs] .
-.
-They can be inserted anywhere, also in the midst of text in a line.
-.
-They are used to implement various features, including the insertion of
-non-\f[CR]ASCII\f[] characters with
-.Esc ( ,
-font changes with
-.Esc f ,
-in-line comments with
-.Esc \[dq] ,
-the escaping of special control characters like
-.Esc \[rs] ,
-and many other features.
-.
-.
-.P
-.I Strings
-are variables that can store a string.
-.
-A string is stored by the
-.B .ds
-request.
-.
-The stored string can be retrieved later by the
-.B \[rs]*
-escape sequence.
-.
-.
-.P
-.I Registers
-store numbers and sizes.
-.
-A register can be set with the request
-.B .nr
-and its value can be retrieved by the escape sequence
-.BR "\[rs]n" .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "FILE NAME EXTENSIONS"
-.\" --------------------------------------------------------------------
-.
-Manual pages (man pages) take the section number as a file name
-extension, e.g., the filename for this document is
-.IR roff.7 ,
-i.e., it is kept in section\~7
-of the man pages.
-.
-.
-.P
-The classical macro packages take the package name as an extension, e.g.\&
-.IB file. me
-for a document using the
-.I me
-macro package,
-.IB file. mm
-for
-.IR mm ,
-.IB file. ms
-for
-.IR ms ,
-.IB file. pic
-for
-.I pic
-files,
-etc.
-.
-.
-.P
-But there is no general naming scheme for
-.I roff
-documents, though
-.IB file. tr
-for
-.I troff file
-is seen now and then.
-.
-Maybe there should be a standardization for the filename extensions of
-.I roff
-files.
-.
-.
-.P
-File name extensions can be very handy in conjunction with the
-.BR less (1)
-pager.
-.
-It provides the possibility to feed all input into a command-line pipe
-that is specified in the shell environment variable
-.BR LESSOPEN .
-.
-This process is not well documented, so here an example:
-.
-.RS
-.P
-.EX
-LESSOPEN='|lesspipe %s'
-.EE
-.RE
-.
-.
-.P
-where
-.B lesspipe
-is either a system supplied command or a shell script of your own.
-.
-.
-.P
-More details for
-.I file name extensions
-can be found at
-.BR groff_filenames (7).
-.
-.
-.\" --------------------------------------------------------------------
-.SH "EDITING ROFF"
-.\" --------------------------------------------------------------------
-.
-The best program for editing a
-.I roff
-document is Emacs (or Xemacs), see
-.BR emacs (1).
-.
-It provides an
-.I nroff
-mode that is suitable for all kinds of
-.I roff
-dialects.
-.
-This mode can be activated by the following methods.
-.
-.
-.P
-When editing a file within Emacs the mode can be changed by typing
-.RI \[oq] "M-x nroff-mode" \[cq],
-where
-.B M-x
-means to hold down the
-.B Meta
-key (or
-.BR Alt )
-and hitting the
-.BR x\~ key
-at the same time.
-.
-.
-.P
-But it is also possible to have the mode automatically selected when
-the file is loaded into the editor.
-.
-.IP \(bu
-The most general method is to include the following 3 comment lines at
-the end of the file.
-.
-.RS
-.IP
-.EX
-\&.\[rs]" Local Variables:\""
-\&.\[rs]" mode: nroff\""
-\&.\[rs]" End:\""
-.EE
-.RE
-.
-.IP \(bu
-There is a set of file name extensions, e.g.\& the man pages that
-trigger the automatic activation of the
-.I nroff
-mode.
-.
-.IP \(bu
-Theoretically, it is possible to write the sequence
-.
-.RS
-.IP
-.EX
-\&.\[rs]" \%-*-\ nroff\ -*-\""
-.EE
-.RE
-.
-.IP
-as the first line of a file to have it started in
-.I nroff
-mode when loaded.
-.
-Unfortunately, some applications such as the
-.B man
-program are confused by this; so this is deprecated.
-.
-.
-.P
-All
-.I roff
-formatters provide automated line breaks and horizontal and vertical
-spacing.
-.
-In order to not disturb this, the following tips can be helpful.
-.
-.IP \(bu
-Never include empty or blank lines in a
-.I roff
-document.
-.
-Instead, use the empty request (a line consisting of a dot only) or a
-line comment
-.B .\[rs]"\""
-if a structuring element is needed.
-.
-.IP \(bu
-Never start a line with whitespace because this can lead to unexpected
-behavior.
-.
-Indented paragraphs can be constructed in a controlled way by
-.I roff
-requests.
-.
-.IP \(bu
-Start each sentence on a line of its own, for the spacing after a dot
-is handled differently depending on whether it terminates an
-abbreviation or a sentence.
-.
-To distinguish both cases, do a line break after each sentence.
-.
-.IP \(bu
-To additionally use the auto-fill mode in Emacs, it is best to insert
-an empty
-.I roff
-request (a line consisting of a dot only) after each sentence.
-.
-.
-.P
-The following example shows how optimal
-.I roff
-editing could look.
-.
-.RS
-.P
-.EX
-This is an example for a \&.I roff document.  \&.
-.
-This is the next sentence in the same paragraph.  \&.
-.
-This is a longer sentence stretching over several lines; abbreviations
-like \[oq]cf.\[cq] are easily identified because the dot is not
-followed by a line break.  \&.  In the output, this will still go to
-the same paragraph.
-.EE
-.RE
-.
-.
-.P
-Besides Emacs, some other editors provide
-.I nroff
-style files too, e.g.\&
-.BR vim (1),
-an extension of the
-.BR vi (1)
-program.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-There is a lot of documentation on
-.IR roff .
-.
-The original papers on classical
-.I troff
-are still available, and all aspects of
-.I groff
-are documented in great detail.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Internet sites"
-.\" --------------------------------------------------------------------
-.
-.TP
-troff.org
-.UR http://\:www.troff.org
-The historical troff site
-.UE
-provides an overview and pointers to all historical aspects of
-.IR roff .
-.
-.TP
-Multics
-.UR http://\:www.multicians.org
-The Multics site
-.UE
-contains a lot of information on the MIT projects, CTSS, Multics,
-early Unix, including
-.IR runoff ;
-especially useful are a glossary and the many links to ancient
-documents.
-.
-.TP
-Unix Archive
-.UR http://\:www.tuhs.org/\:Archive/
-The Ancient Unixes Archive
-.UE
-.
-provides the source code and some binaries of the ancient Unixes
-(including the source code of
-.I troff
-and its documentation) that were made public by Caldera since 2001,
-e.g.\& of the famous Unix version\~7 for PDP-11 at the
-.UR http://\:www.tuhs.org/\:Archive/\:PDP-11/\:Trees/\:V7
-Unix V7 site
-.UE .
-.
-.TP
-Developers at AT&T Bell Labs
-.UR http://\:www.bell-labs.com/
-Bell Labs Computing and Mathematical Sciences Research
-.UE
-.
-provides a search facility for tracking information on the early
-developers.
-.
-.TP
-Plan 9
-.UR http://\:plan9.bell-labs.com
-The Plan\~9 operating system
-.UE
-.
-by AT&T Bell Labs.
-.
-.TP
-runoff
-.UR http://\:web.mit.edu/\:Saltzer/\:www/\:publications/\:pubs.html
-Jerry Saltzer\[aq]s home page
-.UE
-.
-stores some documents using the ancient RUNOFF formatting language.
-.
-.TP
-CSTR Papers
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr.html
-The Bell Labs CSTR site
-.UE
-.
-stores the original
-.I troff
-manuals (CSTR #54, #97, #114, #116, #122) and famous historical
-documents on programming.
-.
-.TP
-\f[CR]GNU\f[] \f[I]roff\f[]
-.UR http://\:www.gnu.org/\:software/\:groff
-The groff web site
-.UE
-provides the free
-.I roff
-implementation
-.IR groff ,
-the actual standard
-.IR roff .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Historical roff Documentation"
-.\" --------------------------------------------------------------------
-.
-Many classical
-.B troff
-documents are still available on-line.
-.
-The two main manuals of the
-.I troff
-language are
-.
-.TP
-[CSTR\~#54]
-J.\& F.\& Ossanna,
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:54.ps.gz
-.I "Nroff/\:Troff User\[aq]s Manual"
-.UE ;
-.
-Bell Labs, 1976; revised by Brian Kernighan, 1992.
-.
-.TP
-[CSTR\~#97]
-Brian Kernighan,
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:97.ps.gz
-.I "A Typesetter-independent TROFF"
-.UE ,
-.
-Bell Labs, 1981, revised March 1982.
-.
-.P
-The \[lq]little language\[rq]
-.I roff
-papers are
-.
-.TP
-[CSTR\~#114]
-Jon L.\& Bentley and Brian W.\& Kernighan,
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:114.ps.gz
-.I "GRAP \[en] A Language for Typesetting Graphs"
-.UE ;
-.
-Bell Labs, August 1984.
-.
-.TP
-[CSTR\~#116]
-Brian W.\& Kernighan,
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:116.ps.gz
-.I "PIC \[en] A Graphics Language for Typesetting"
-.UE ;
-.
-Bell Labs, December 1984.
-.
-.TP
-[CSTR\~#122]
-J.\& L.\& Bentley, L.\& W.\& Jelinski, and B.\& W.\& Kernighan,
-.UR http://\:cm.bell-labs.com/\:cm/\:cs/\:cstr/\:122.ps.gz
-.I "CHEM \[en] A Program for Typesetting Chemical Structure Diagrams,"
-.I "Computers and Chemistry"
-.UE ;
-.
-Bell Labs, April 1986.
-.
-.
-.P
-You can get an archive with most
-.I classical roff documentation
-as reasonable
-.I PDF files
-at
-.I github
-using the
-.I shell command
-.RS
-.EX
-$ git clone https://github.com/bwarken/roff_classical.git
-.EE
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Manual Pages"
-.\" --------------------------------------------------------------------
-.
-Due to its complex structure, a full
-.I roff
-system has many man pages, each describing a single aspect of
-.IR roff .
-.
-Unfortunately, there is no general naming scheme for the documentation
-among the different
-.I roff
-implementations.
-.
-.
-.P
-In
-.IR groff ,
-the man page
-.BR groff (@MAN1EXT@)
-contains a survey of all documentation available in
-.IR groff .
-.
-.
-.P
-On other systems, you are on your own, but
-.BR troff (1)
-might be a good starting point.
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs setup
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/mdate.pl b/mdate.pl
new file mode 100755 (executable)
index 0000000..fd6e5b5
--- /dev/null
+++ b/mdate.pl
@@ -0,0 +1,32 @@
+#! /usr/bin/env perl
+#
+# Copyright (C) 1991-2018 Free Software Foundation, Inc.
+# 
+# This file is part of groff.
+# 
+# groff 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 3 of the License, or
+# (at your option) any later version.
+# 
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+# Print the modification date of $1 `nicely'.
+
+use warnings;
+use strict;
+use POSIX qw(LC_ALL setlocale strftime);
+
+# Don't want localized dates.
+setlocale(LC_ALL, "C");
+
+my @mtime = gmtime($ENV{SOURCE_DATE_EPOCH} || (stat $ARGV[0])[9]);
+my $mdate = strftime("%e %B %Y", @mtime);
+$mdate =~ s/^ //;
+print "$mdate\n";
diff --git a/mdate.sh b/mdate.sh
deleted file mode 100644 (file)
index 2c24a00..0000000
--- a/mdate.sh
+++ /dev/null
@@ -1,59 +0,0 @@
-#! /bin/sh
-#
-# Copyright (C) 1991-2014 Free Software Foundation, Inc.
-# 
-# This file is part of groff.
-# 
-# groff 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 3 of the License, or
-# (at your option) any later version.
-# 
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-# Print the modification date of $1 `nicely'.
-
-# Don't want foreign dates.
-
-LANGUAGE=
-LC_ALL=C; export LC_ALL
-
-
-(date;
-if ls -L /dev/null 1>/dev/null 2>&1; then ls -L -l $1; else ls -l $1; fi
-) | awk '
-BEGIN {
-       full["Jan"] = "January"; number["Jan"] = 1;
-       full["Feb"] = "February"; number["Feb"] = 2;
-       full["Mar"] = "March"; number["Mar"] = 3;
-       full["Apr"] = "April"; number["Apr"] = 4;
-       full["May"] = "May"; number["May"] = 5;
-       full["Jun"] = "June"; number["Jun"] = 6;
-       full["Jul"] = "July"; number["Jul"] = 7;
-       full["Aug"] = "August"; number["Aug"] = 8;
-       full["Sep"] = "September"; number["Sep"] = 9;
-       full["Oct"] = "October"; number["Oct"] = 10;
-       full["Nov"] = "November"; number["Nov"] = 11;
-       full["Dec"] = "December"; number["Dec"] = 12;
-}
-
-NR == 1 {
-       month = $2;
-       year = $NF;
-}
-
-NR == 2 {
-       if ($(NF-1) ~ /:/) {
-               if (number[$(NF-3)] > number[month])
-                       year--;
-       }
-       else
-               year = $(NF-1);
-       print $(NF-2), full[$(NF-3)], year
-}'
diff --git a/mkinstalldirs b/mkinstalldirs
deleted file mode 100755 (executable)
index 55d537f..0000000
+++ /dev/null
@@ -1,162 +0,0 @@
-#! /bin/sh
-# mkinstalldirs --- make directory hierarchy
-
-scriptversion=2009-04-28.21; # UTC
-
-# Original author: Noah Friedman <friedman@prep.ai.mit.edu>
-# Created: 1993-05-16
-# Public domain.
-#
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-nl='
-'
-IFS=" ""       $nl"
-errstatus=0
-dirmode=
-
-usage="\
-Usage: mkinstalldirs [-h] [--help] [--version] [-m MODE] DIR ...
-
-Create each directory DIR (with mode MODE, if specified), including all
-leading file name components.
-
-Report bugs to <bug-automake@gnu.org>."
-
-# process command line arguments
-while test $# -gt 0 ; do
-  case $1 in
-    -h | --help | --h*)         # -h for help
-      echo "$usage"
-      exit $?
-      ;;
-    -m)                         # -m PERM arg
-      shift
-      test $# -eq 0 && { echo "$usage" 1>&2; exit 1; }
-      dirmode=$1
-      shift
-      ;;
-    --version)
-      echo "$0 $scriptversion"
-      exit $?
-      ;;
-    --)                         # stop option processing
-      shift
-      break
-      ;;
-    -*)                         # unknown option
-      echo "$usage" 1>&2
-      exit 1
-      ;;
-    *)                          # first non-opt arg
-      break
-      ;;
-  esac
-done
-
-for file
-do
-  if test -d "$file"; then
-    shift
-  else
-    break
-  fi
-done
-
-case $# in
-  0) exit 0 ;;
-esac
-
-# Solaris 8's mkdir -p isn't thread-safe.  If you mkdir -p a/b and
-# mkdir -p a/c at the same time, both will detect that a is missing,
-# one will create a, then the other will try to create a and die with
-# a "File exists" error.  This is a problem when calling mkinstalldirs
-# from a parallel make.  We use --version in the probe to restrict
-# ourselves to GNU mkdir, which is thread-safe.
-case $dirmode in
-  '')
-    if mkdir -p --version . >/dev/null 2>&1 && test ! -d ./--version; then
-      echo "mkdir -p -- $*"
-      exec mkdir -p -- "$@"
-    else
-      # On NextStep and OpenStep, the 'mkdir' command does not
-      # recognize any option.  It will interpret all options as
-      # directories to create, and then abort because '.' already
-      # exists.
-      test -d ./-p && rmdir ./-p
-      test -d ./--version && rmdir ./--version
-    fi
-    ;;
-  *)
-    if mkdir -m "$dirmode" -p --version . >/dev/null 2>&1 &&
-       test ! -d ./--version; then
-      echo "mkdir -m $dirmode -p -- $*"
-      exec mkdir -m "$dirmode" -p -- "$@"
-    else
-      # Clean up after NextStep and OpenStep mkdir.
-      for d in ./-m ./-p ./--version "./$dirmode";
-      do
-        test -d $d && rmdir $d
-      done
-    fi
-    ;;
-esac
-
-for file
-do
-  case $file in
-    /*) pathcomp=/ ;;
-    *)  pathcomp= ;;
-  esac
-  oIFS=$IFS
-  IFS=/
-  set fnord $file
-  shift
-  IFS=$oIFS
-
-  for d
-  do
-    test "x$d" = x && continue
-
-    pathcomp=$pathcomp$d
-    case $pathcomp in
-      -*) pathcomp=./$pathcomp ;;
-    esac
-
-    if test ! -d "$pathcomp"; then
-      echo "mkdir $pathcomp"
-
-      mkdir "$pathcomp" || lasterr=$?
-
-      if test ! -d "$pathcomp"; then
-       errstatus=$lasterr
-      else
-       if test ! -z "$dirmode"; then
-         echo "chmod $dirmode $pathcomp"
-         lasterr=
-         chmod "$dirmode" "$pathcomp" || lasterr=$?
-
-         if test ! -z "$lasterr"; then
-           errstatus=$lasterr
-         fi
-       fi
-      fi
-    fi
-
-    pathcomp=$pathcomp/
-  done
-done
-
-exit $errstatus
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/src/devices/grodvi/Makefile.sub b/src/devices/grodvi/Makefile.sub
deleted file mode 100644 (file)
index 35b0f3a..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# Makefile.sub for `grodvi'
-#
-# File position: <groff-source>/src/devices/grodvi/Makefile.sub
-#
-# Copyright (C) 2014
-#   Free Software Foundation, Inc.
-#
-# Last update: 2 Sep 2014
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grodvi$(EXEEXT)
-MAN1=grodvi.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=dvi.$(OBJEXT)
-CCSRCS=$(srcdir)/dvi.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 6bcc64f6a35044673d285da7bb3c8f76bfb840c0..ed05056abff29a6453e7bf2a989ebe061a6a46dd 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "driver.h"
 #include "nonposix.h"
@@ -85,7 +85,7 @@ void dvi_font::handle_unknown_font_command(const char *command,
   if (strcmp(command, "checksum") == 0) {
     if (arg == 0)
       fatal_with_file_and_line(filename, lineno,
-                              "`checksum' command requires an argument");
+                              "'checksum' command requires an argument");
     checksum = int(strtol(arg, &ptr, 10));
     if (checksum == 0 && ptr == arg) {
       fatal_with_file_and_line(filename, lineno, "bad checksum");
@@ -94,7 +94,7 @@ void dvi_font::handle_unknown_font_command(const char *command,
   else if (strcmp(command, "designsize") == 0) {
     if (arg == 0)
       fatal_with_file_and_line(filename, lineno,
-                              "`designsize' command requires an argument");
+                              "'designsize' command requires an argument");
     design_size = int(strtol(arg, &ptr, 10));
     if (design_size == 0 && ptr == arg) {
       fatal_with_file_and_line(filename, lineno, "bad design size");
@@ -885,7 +885,7 @@ void draw_dvi_printer::draw(int code, int *p, int np, const environment *env)
       break;
     }
   default:
-    error("unrecognised drawing command `%1'", char(code));
+    error("unrecognised drawing command '%1'", char(code));
     break;
   }
 }
@@ -935,7 +935,7 @@ int main(int argc, char **argv)
     case 'p':
       if (!font::scan_papersize(optarg, 0,
                                &user_paper_length, &user_paper_width))
-       error("invalid custom paper size `%1' ignored", optarg);
+       error("invalid custom paper size '%1' ignored", optarg);
       break;
     case 'v':
       {
diff --git a/src/devices/grodvi/grodvi.1.man b/src/devices/grodvi/grodvi.1.man
new file mode 100644 (file)
index 0000000..843a1f9
--- /dev/null
@@ -0,0 +1,476 @@
+.TH GRODVI @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+grodvi \- convert groff output to TeX DVI format
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr grodvi_C \n[.C]
+.cp 0
+.
+.
+.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+.el .ds tx TeX
+.
+.de FT
+.  if '\\*(.T'dvi' .ft \\$1
+..
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY grodvi
+.OP \-dl
+.OP \-F dir
+.OP \-p papersize
+.OP \-w n
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.SY grodvi
+.B \-\-help
+.YS
+.
+.SY grodvi
+.B \-v
+.SY grodvi
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B grodvi
+is a driver for
+.B groff
+that produces \*(tx DVI format.
+.
+Normally it should be run by
+.BR groff\ \-Tdvi .
+.
+This will run
+.BR @g@troff\ \-Tdvi ;
+it will also input the macros in
+.IR @MACRODIR@/\:dvi.tmac .
+.
+.LP
+The DVI file generated by
+.B grodvi
+can be printed by any correctly-written DVI driver.
+.
+The troff drawing primitives are implemented
+using the tpic version\~2 specials.
+.
+If the driver does not support these, the
+.B \[rs]D
+commands will not produce any output.
+.
+.LP
+There is an additional drawing command available:
+.
+.TP
+.BI \[rs]D'R\  dh\ dv '
+Draw a rule (solid black rectangle), with one corner
+at the current position, and the diagonally opposite corner
+at the current position
+.RI +( dh , dv ).
+.
+Afterwards the current position will be at the opposite corner.
+.
+This produces a rule in the DVI file and so can be printed even with a
+driver that does not support the tpic specials unlike the other
+.B \[rs]D
+commands.
+.
+.LP
+The groff command
+.BI \[rs]X' anything '
+is translated into the same command in the DVI file as would be
+produced by
+.BI \[rs]special{ anything }
+in \*(tx;
+.I anything
+may not contain a newline.
+.
+.LP
+For inclusion of EPS image files,
+.B \-Tdvi
+loads
+.I pspic.tmac
+automatically, providing the
+.B PSPIC
+macro.
+.
+Please check
+.BR groff_tmac (@MAN5EXT@)
+for a detailed description.
+.
+.LP
+Font files for
+.B grodvi
+can be created from tfm files using
+.BR tfmtodit (@MAN1EXT@).
+.
+The font description file should contain the following
+additional commands:
+.
+.TP
+.BI internalname\   name
+The name of the tfm file (without the
+.I .tfm
+extension) is
+.IR name .
+.
+.TP
+.BI checksum\  n
+The checksum in the tfm file is
+.IR n .
+.
+.TP
+.BI designsize\  n
+The designsize in the tfm file is
+.IR n .
+.
+.LP
+These are automatically generated by
+.B tfmtodit.
+.
+.LP
+The default color for
+.B \[rs]m
+and
+.B \[rs]M
+is black.
+.
+Currently, the drawing color for
+.B \[rs]D
+commands is always black, and fill color values are translated to gray.
+.
+.LP
+In
+.B troff
+the
+.B \[rs]N
+escape sequence can be used to access characters by their position
+in the corresponding tfm file;
+all characters in the tfm file can be accessed this way.
+.
+.LP
+By design, the DVI format doesn't care about physical dimensions of the
+output medium.
+.
+Instead,
+.B grodvi
+emits the equivalent to \*[tx]'s
+.BI \[rs]special{papersize= width , length }
+on the first page;
+.B dvips
+(and possibly other DVI drivers) then sets the page size accordingly.
+.
+If either the page width or length is not positive, no papersize special
+is output.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.B \-d
+Do not use tpic specials to implement drawing commands.
+.
+Horizontal and vertical lines will be implemented by rules.
+.
+Other drawing commands will be ignored.
+.
+.TP
+.BI \-F dir
+Prepend directory
+.RI dir /dev name
+to the search path for font and device description files;
+.I name
+is the name of the device, usually
+.BR dvi .
+.
+.TP
+.B \-l
+Specify landscape orientation.
+.
+.TP
+.BI \-p papersize
+Specify paper dimensions.
+.
+This overrides the
+.BR papersize ,
+.BR paperlength ,
+and
+.B paperwidth
+commands in the
+.I DESC
+file; it accepts the same arguments as the
+.B papersize
+command (see
+.BR groff_font (@MAN5EXT@)
+for details).
+.
+.TP
+.B \-v
+Print the version number.
+.
+.TP
+.BI \-w n
+Set the default line thickness to
+.I n
+thousandths of an em.
+.
+If this option isn't specified, the line thickness defaults to
+0.04\~em.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+There are styles called
+.BR R ,
+.BR I ,
+.BR B ,
+and
+.B BI
+mounted at font positions 1 to\ 4.
+The fonts are grouped into families
+.B T
+and
+.B H
+having members in each of these styles:
+.
+.RS
+.TP
+.B TR
+.FT TR
+CM Roman (cmr10)
+.FT
+.
+.TQ
+.B TI
+.FT TI
+CM Text Italic (cmti10)
+.FT
+.
+.TQ
+.B TB
+.FT TB
+CM Bold Extended Roman (cmbx10)
+.FT
+.
+.TQ
+.B TBI
+.FT TBI
+CM Bold Extended Text Italic (cmbxti10)
+.FT
+.
+.TQ
+.B HR
+.FT HR
+CM Sans Serif (cmss10)
+.FT
+.
+.TQ
+.B HI
+.FT HI
+CM Slanted Sans Serif (cmssi10)
+.FT
+.
+.TQ
+.B HB
+.FT HB
+CM Sans Serif Bold Extended (cmssbx10)
+.FT
+.
+.TQ
+.B HBI
+.FT HBI
+CM Slanted Sans Serif Bold Extended (cmssbxo10)
+.FT
+.RE
+.
+.LP
+There are also the following fonts which are not members of a family:
+.
+.RS
+.TP
+.B CW
+CM Typewriter Text (cmtt10)
+.FT CW
+.FT
+.
+.TQ
+.B CWI
+CM Italic Typewriter Text (cmitt10)
+.FT CWI
+.FT
+.RE
+.
+.LP
+Special fonts are
+.B MI
+(cmmi10),
+.B S
+(cmsy10),
+.B EX
+(cmex10),
+.B SC
+(cmtex10, only for
+.BR CW ),
+and, perhaps surprisingly,
+.BR TR ,
+.BR TI ,
+and
+.BR CW ,
+due to the different font encodings of text fonts.
+.
+For italic fonts,
+.B CWI
+is used instead of
+.BR CW .
+.
+.LP
+Finally, the symbol fonts of the American Mathematical Society are available
+as special fonts
+.B SA
+(msam10) and
+.B SB
+(msbm10).
+.
+These two fonts are not mounted by default.
+.
+.LP
+Using the option
+.B \-mec
+(which loads the file
+.IR ec.tmac )
+provides the EC and TC fonts.
+.
+The design of the EC family is very similar to that of the CM fonts;
+additionally, they give a much better coverage of groff symbols.
+.
+Note that
+.I ec.tmac
+must be called before any language-specific files; it doesn't take
+care of hcode values.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROFF_FONT_PATH
+A list of directories in which to search for the
+.IR dev name
+directory in addition to the default ones.
+.
+See
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_font (@MAN5EXT@)
+for more details.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @FONTDIR@/devdvi/DESC
+Device description file.
+.
+.TP
+.IR @FONTDIR@/devdvi/ F
+Font description file for font
+.IR F .
+.
+.TP
+.I @MACRODIR@/dvi.tmac
+Macros for use with
+.BR grodvi .
+.
+.TP
+.I @MACRODIR@/ec.tmac
+Macros to switch to EC fonts.
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+.
+Dvi files produced by
+.B grodvi
+use a different resolution (57816 units per inch) from those produced by
+\*(tx.
+.
+Incorrectly written drivers which assume the resolution used by \*(tx,
+rather than using the resolution specified in the DVI file will not
+work with
+.BR grodvi .
+.
+.LP
+When using the
+.B \-d
+option with boxed tables,
+vertical and horizontal lines can sometimes protrude by one pixel.
+.
+This is a consequence of the way \*(tx requires that the heights
+and widths of rules be rounded.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR tfmtodit (@MAN1EXT@),
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR groff_out (@MAN5EXT@),
+.BR groff_font (@MAN5EXT@),
+.BR groff_char (@MAN7EXT@),
+.BR groff_tmac (@MAN5EXT@)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[grodvi_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/devices/grodvi/grodvi.am b/src/devices/grodvi/grodvi.am
new file mode 100644 (file)
index 0000000..928298a
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += grodvi
+grodvi_SOURCES = src/devices/grodvi/dvi.cpp
+grodvi_LDADD = \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a $(LIBM)
+man1_MANS += src/devices/grodvi/grodvi.1
+EXTRA_DIST += src/devices/grodvi/grodvi.1.man
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/src/devices/grodvi/grodvi.man b/src/devices/grodvi/grodvi.man
deleted file mode 100644 (file)
index 1ff44e9..0000000
+++ /dev/null
@@ -1,478 +0,0 @@
-.\" -*- nroff -*-
-.TH GRODVI @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grodvi \- convert groff output to TeX dvi format
-.
-.\" copying (license)
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.do nr grodvi_C \n[.C]
-.cp 0
-.
-.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-.el .ds tx TeX
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.  ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.  el .TP "\\$1"
-..
-.
-.de TQ
-.  br
-.  ns
-.  TP \$1
-..
-.
-.de FT
-.  if '\\*(.T'dvi' .ft \\$1
-..
-.
-.ad l
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B grodvi
-[
-.B \-dlv
-] [
-.BI \-F dir
-] [
-.BI \-p papersize
-] [
-.BI \-w n
-] [
-.IR files \|.\|.\|.\&
-]
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B grodvi
-is a driver for
-.B groff
-that produces \*(tx dvi format.
-.
-Normally it should be run by
-.BR groff\ \-Tdvi .
-.
-This will run
-.BR @g@troff\ \-Tdvi ;
-it will also input the macros in
-.BR @MACRODIR@/dvi.tmac .
-.
-.LP
-The dvi file generated by
-.B grodvi
-can be printed by any correctly-written dvi driver.
-.
-The troff drawing primitives are implemented
-using the tpic version\~2 specials.
-.
-If the driver does not support these, the
-.B \[rs]D
-commands will not produce any output.
-.
-.LP
-There is an additional drawing command available:
-.
-.TP
-.BI \[rs]D'R\  dh\ dv '
-Draw a rule (solid black rectangle), with one corner
-at the current position, and the diagonally opposite corner
-at the current position
-.RI +( dh , dv ).
-.
-Afterwards the current position will be at the opposite corner.
-.
-This produces a rule in the dvi file and so can be printed even with a
-driver that does not support the tpic specials unlike the other
-.B \[rs]D
-commands.
-.
-.LP
-The groff command
-.BI \[rs]X' anything '
-is translated into the same command in the dvi file as would be
-produced by
-.BI \[rs]special{ anything }
-in \*(tx;
-.I anything
-may not contain a newline.
-.
-.LP
-For inclusion of EPS image files,
-.B \-Tdvi
-loads
-.B pspic.tmac
-automatically, providing the
-.B PSPIC
-macro.
-.
-Please check
-.BR groff_tmac (@MAN5EXT@)
-for a detailed description.
-.
-.LP
-Font files for
-.B grodvi
-can be created from tfm files using
-.BR tfmtodit (@MAN1EXT@).
-.
-The font description file should contain the following
-additional commands:
-.
-.Tp \w'\fBinternalname'u+2n
-.BI internalname\   name
-The name of the tfm file (without the
-.B .tfm
-extension) is
-.IR name .
-.
-.TP
-.BI checksum\  n
-The checksum in the tfm file is
-.IR n .
-.
-.TP
-.BI designsize\  n
-The designsize in the tfm file is
-.IR n .
-.
-.LP
-These are automatically generated by
-.B tfmtodit.
-.
-.LP
-The default color for
-.B \[rs]m
-and
-.B \[rs]M
-is black.
-.
-Currently, the drawing color for
-.B \[rs]D
-commands is always black, and fill color values are translated to gray.
-.
-.LP
-In
-.B troff
-the
-.B \[rs]N
-escape sequence can be used to access characters by their position
-in the corresponding tfm file;
-all characters in the tfm file can be accessed this way.
-.
-.LP
-By design, the DVI format doesn\[aq]t care about physical dimensions of the
-output medium.
-.
-Instead,
-.B grodvi
-emits the equivalent to \*[tx]\[aq]s
-.BI \[rs]special{papersize= width , length }
-on the first page;
-.B dvips
-(and possibly other DVI drivers) then sets the page size accordingly.
-.
-If either the page width or length is not positive, no papersize special
-is output.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.B \-d
-Do not use tpic specials to implement drawing commands.
-.
-Horizontal and vertical lines will be implemented by rules.
-.
-Other drawing commands will be ignored.
-.
-.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for font and device description files;
-.I name
-is the name of the device, usually
-.BR dvi .
-.
-.TP
-.B \-l
-Specify landscape orientation.
-.
-.TP
-.BI \-p papersize
-Specify paper dimensions.
-.
-This overrides the
-.BR papersize ,
-.BR paperlength ,
-and
-.B paperwidth
-commands in the
-.B DESC
-file; it accepts the same arguments as the
-.B papersize
-command (see
-.BR groff_font (@MAN5EXT@)
-for details).
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.BI \-w n
-Set the default line thickness to
-.I n
-thousandths of an em.
-.
-If this option isn\[aq]t specified, the line thickness defaults to
-0.04\~em.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-There are styles called
-.BR R ,
-.BR I ,
-.BR B ,
-and
-.B BI
-mounted at font positions 1 to\ 4.
-The fonts are grouped into families
-.B T
-and
-.B H\ \c
-having members in each of these styles:
-.
-.RS
-.TP
-.B TR
-.FT TR
-CM Roman (cmr10)
-.FT
-.
-.TQ
-.B TI
-.FT TI
-CM Text Italic (cmti10)
-.FT
-.
-.TQ
-.B TB
-.FT TB
-CM Bold Extended Roman (cmbx10)
-.FT
-.
-.TQ
-.B TBI
-.FT TBI
-CM Bold Extended Text Italic (cmbxti10)
-.FT
-.
-.TQ
-.B HR
-.FT HR
-CM Sans Serif (cmss10)
-.FT
-.
-.TQ
-.B HI
-.FT HI
-CM Slanted Sans Serif (cmssi10)
-.FT
-.
-.TQ
-.B HB
-.FT HB
-CM Sans Serif Bold Extended (cmssbx10)
-.FT
-.
-.TQ
-.B HBI
-.FT HBI
-CM Slanted Sans Serif Bold Extended (cmssbxo10)
-.FT
-.RE
-.
-.LP
-There are also the following fonts which are not members of a family:
-.
-.RS
-.TP
-.B CW
-CM Typewriter Text (cmtt10)
-.FT CW
-.FT
-.
-.TQ
-.B CWI
-CM Italic Typewriter Text (cmitt10)
-.FT CWI
-.FT
-.RE
-.
-.LP
-Special fonts are
-.B MI
-(cmmi10),
-.B S
-(cmsy10),
-.B EX
-(cmex10),
-.B SC
-(cmtex10, only for
-.BR CW ),
-and, perhaps surprisingly,
-.BR TR ,
-.BR TI ,
-and
-.BR CW ,
-due to the different font encodings of text fonts.
-.
-For italic fonts,
-.B CWI
-is used instead of
-.BR CW .
-.
-.LP
-Finally, the symbol fonts of the American Mathematical Society are available
-as special fonts
-.B SA
-(msam10) and
-.B SB
-(msbm10).
-.
-These two fonts are not mounted by default.
-.
-.LP
-Using the option
-.B \-mec
-(which loads the file
-.BR ec.tmac )
-provides the EC and TC fonts.
-.
-The design of the EC family is very similar to that of the CM fonts;
-additionally, they give a much better coverage of groff symbols.
-.
-Note that
-.B ec.tmac
-must be called before any language-specific files; it doesn\[aq]t take
-care of hcode values.
-.
-.
-.SH ENVIRONMENT
-.TP
-.SM
-.B GROFF_FONT_PATH
-A list of directories in which to search for the
-.BI dev name
-directory in addition to the default ones.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_font (@MAN5EXT@)
-for more details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP
-.B @FONTDIR@/devdvi/DESC
-Device description file.
-.
-.TP
-.BI @FONTDIR@/devdvi/ F
-Font description file for font
-.IR F .
-.
-.TP
-.B @MACRODIR@/dvi.tmac
-Macros for use with
-.BR grodvi .
-.
-.TP
-.B @MACRODIR@/ec.tmac
-Macros to switch to EC fonts.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-Dvi files produced by
-.B grodvi
-use a different resolution (57816 units per inch) to those produced by
-\*(tx.
-.
-Incorrectly written drivers which assume the resolution used by \*(tx,
-rather than using the resolution specified in the dvi file will not
-work with
-.BR grodvi .
-.
-.LP
-When using the
-.B \-d
-option with boxed tables,
-vertical and horizontal lines can sometimes protrude by one pixel.
-.
-This is a consequence of the way \*(tx requires that the heights
-and widths of rules be rounded.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR tfmtodit (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@),
-.BR groff_tmac (@MAN5EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.cp \n[grodvi_C]
diff --git a/src/devices/grohtml/Makefile.sub b/src/devices/grohtml/Makefile.sub
deleted file mode 100644 (file)
index 948a2ba..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# Makefile.sub for `grohtml'
-#
-# File position: <groff-source>/src/devices/grohtml/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=post-grohtml$(EXEEXT)
-MAN1=grohtml.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=\
-  post-html.$(OBJEXT) \
-  html-table.$(OBJEXT) \
-  html-text.$(OBJEXT) \
-  output.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/post-html.cpp \
-  $(srcdir)/html-table.cpp \
-  $(srcdir)/html-text.cpp \
-  $(srcdir)/output.cpp
-HDRS=\
-  $(srcdir)/html.h \
-  $(srcdir)/html-table.h \
-  $(srcdir)/html-text.h
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/devices/grohtml/grohtml.1.man b/src/devices/grohtml/grohtml.1.man
new file mode 100644 (file)
index 0000000..a54ae98
--- /dev/null
@@ -0,0 +1,446 @@
+.TH GROHTML @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+grohtml \- HTML driver for groff
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1999-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY grohtml
+.OP \-bhlnprVy
+.OP \-a aa-text-bits
+.OP \-D dir
+.OP \-F dir
+.OP \-g aa-graphic-bits
+.OP \-i resolution
+.OP \-I image-stem
+.OP \-j filename
+.OP \-o image-vertical-offset
+.OP \-s size
+.OP \-S level
+.OP \-x html-dialect
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.SY grohtml
+.B \-\-help
+.YS
+.
+.SY grohtml
+.B \-v
+.SY grohtml
+.B \-\-version
+.YS
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+The
+.B grohtml
+front end (which consists of a preprocessor,
+.BR pre-grohtml ,
+and a device driver,
+.BR post-grohtml )
+translates the output of GNU
+.B troff
+to HTML.
+.
+Users should always invoke
+.B grohtml
+via the groff command with a
+.B \-Thtml
+option.
+.
+If no files are given,
+.B grohtml
+will read the standard input.
+.
+A filename of
+.B \-
+will also cause
+.B grohtml
+to read the standard input.
+.
+Html output is written to the standard output.
+.
+When
+.B grohtml
+is run by
+.B groff
+options can be passed to
+.B grohtml
+using
+.BR groff 's
+.B \-P
+option.
+.
+.
+.PP
+.B grohtml
+invokes
+.B groff
+twice.
+In the first pass, pictures, equations, and tables are rendered
+using the
+.B ps
+device, and in the second pass HTML output is generated by the
+.B html
+device.
+.
+.
+.PP
+.B grohtml
+always writes output in \%UTF-8 encoding and has built-in entities for
+all non-composite unicode characters.
+.
+In spite of this, groff may issue warnings about unknown special
+characters if they can't be found during the first pass.
+.
+Such warnings can be safely ignored unless the special characters
+appear inside a table or equation.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.TP
+.BI \-a aa-text-bits
+Number of bits of antialiasing information to be used by
+.I text
+when generating PNG images.
+.
+The default is\~4 but valid values are 0, 1, 2, and\~4.
+.
+Note your version of
+.B gs
+needs to support the
+.B \%\-dTextAlphaBits
+and
+.B \%\-dGraphicAlphaBits
+options in order to exploit antialiasing.
+.
+A value of\~0 stops
+.B grohtml
+from issuing antialiasing commands to
+.BR gs .
+.
+.TP
+.B \-b
+Initialize the background color to white.
+.
+.TP
+.BI \-D dir
+Inform
+.B grohtml
+to place all image files into directory
+.IR dir .
+.
+.TP
+.B \-e
+This option should not be directly invoked by the user as it is an
+internal option utilized by
+.B groff
+when
+.B \-Thtml
+or
+.B \-Txhtml
+is specified.
+It is used by the
+.B grohtml
+preprocessor to determine whether
+.B eqn
+should attempt to produce MathML (if
+.B \-Txhtml
+is specified).
+.
+.TP
+.BI \-F dir
+Prepend directory
+.RI dir /dev name
+to the search path for font and device description files;
+.I name
+is the name of the device, usually
+.BR html .
+.
+.TP
+.BI \-g aa-graphic-bits
+Number of bits of antialiasing information to be used by
+.I graphics
+when generating PNG images.
+.
+The default is\~4 but valid values are 0, 1, 2, and\~4.
+.
+Note your version of
+.B gs
+needs to support the
+.B \%\-dTextAlphaBits
+and
+.B \%\-dGraphicAlphaBits
+options in order to exploit antialiasing.
+.
+A value of\~0 stops
+.B grohtml
+from issuing antialiasing commands to
+.BR gs .
+.
+.TP
+.B \-h
+Generate section and number headings by using
+.BR <B> .\|.\|. </B>
+and increasing the font size, rather than using the
+.BI <H n >\c
+\&.\|.\|.\c
+.BI </H n >
+tags.
+.
+.TP
+.BI \-i resolution
+Select the resolution for all images.
+.
+By default this is 100 pixels per inch.
+.
+Example:
+.B \-i200
+indicates 200 pixels per inch.
+.
+.TP
+.BI \-I stem
+Determine the image stem name.
+.
+If omitted grohtml uses
+.BI \%grohtml- XXX
+.RI ( XXX
+is the process ID).
+.
+.TP
+.BI \-j filename
+Inform
+.B grohtml
+to split the HTML output into multiple files.
+.
+The
+.I filename
+is the stem and specified section headings (default is level one)
+start a new file, named
+.IR filename-n.html .
+.
+.TP
+.B \-l
+Turn off the production of automatic section links at the top of the
+document.
+.
+.TP
+.B \-n
+Generate simple heading anchors whenever a section/number heading is
+found.
+.
+Without the option the anchor value is the textual heading.
+.
+This can cause problems when a heading contains a \(oq?\(cqa on older
+versions of some browsers (Netscape).
+.
+This flag is automatically turned on if a heading contains an image.
+.
+.TP
+.BI \-o vertical-offset
+Specify the vertical offset of images in points.
+.
+.TP
+.B \-p
+Display page rendering progress to stderr.
+.B grohtml
+only displays a page number when an image is required.
+.
+.TP
+.B \-r
+Turn off the automatic header and footer line (HTML rule).
+.
+.TP
+.B \-s size
+Set the base point size of the source file.
+.
+Thereafter when this point size is used in the source it will
+correspond to the HTML base size.
+.
+Every increase of two points in the source will yield a
+.B <big>
+tag, and conversely when a decrease of two points is seen a
+.B <small>
+tag is emitted.
+.
+.TP
+.BI \-S level
+When splitting HTML output,
+split at the heading level (or higher) defined by
+.IR level .
+.
+.TP
+.B \-v
+Print the version number.
+.
+.TP
+.B \-V
+Create an XHTML or HTML validator button at the bottom of each page of
+the document.
+.
+.TP
+.BI \-x dialect
+Select HTML dialect.
+.
+Currently,
+.I dialect
+should be either the digit\~\c
+.B 4
+or the letter\~\c
+.B x
+which indicates whether
+.B grohtml
+should generate HTML\~4 or XHTML, respectively.
+.
+This option should not be directly invoked by the user as it is
+an internal option utilized by
+.B groff
+when
+.B \-Thtml
+or
+.B \-Txhtml
+is specified.
+.
+.TP
+.B \-y
+Produce a right-justified groff signature at the end of the document.
+.
+This is only generated if the
+.B \-V
+flag is also specified.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+There are styles called
+.BR R ,
+.BR I ,
+.BR B ,
+and
+.B BI
+mounted at font positions 1 to\~4.
+.
+.
+.\" ====================================================================
+.SH DEPENDENCIES
+.\" ====================================================================
+.
+.B grohtml
+is dependent upon the PNG utilities
+.RB ( \%pnmcut ,
+.BR \%pnmcrop ,
+.BR \%pnmtopng )
+and GhostScript
+.RB ( gs ).
+.
+.B \%pnmtopng
+(version 2.37.6 or greater)
+and
+.B \%pnmcut
+from the netpbm package (version 9.16 or greater) will work also.
+.
+It is also dependent upon
+.B \%psselect
+from the
+.B PSUtils
+package.
+.
+Images are generated whenever a table, picture, equation or line is
+encountered.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.B grohtml
+uses temporary files.
+.
+See the
+.BR groff (@MAN1EXT@)
+man page for details where such files are created.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROFF_FONT_PATH
+A list of directories in which to search for the
+.IR dev name
+directory in addition to the default ones.
+.
+See
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_font (@MAN5EXT@)
+for more details.
+.
+.
+.TP
+.I SOURCE_DATE_EPOCH
+A timestamp (expressed as seconds since the Unix epoch) to use as the
+creation timestamp in place of the current time.
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+.
+.B Grohtml
+has been completely redesigned and rewritten.
+.
+It is still beta code.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR afmtodit (@MAN1EXT@),
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR psbb (@MAN1EXT@),
+.BR groff_out (@MAN5EXT@),
+.BR groff_font (@MAN5EXT@),
+.BR groff_char (@MAN7EXT@)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/devices/grohtml/grohtml.am b/src/devices/grohtml/grohtml.am
new file mode 100644 (file)
index 0000000..d7a529f
--- /dev/null
@@ -0,0 +1,42 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += post-grohtml
+post_grohtml_SOURCES = \
+  src/devices/grohtml/post-html.cpp \
+  src/devices/grohtml/html-table.cpp \
+  src/devices/grohtml/html-text.cpp \
+  src/devices/grohtml/output.cpp \
+  src/devices/grohtml/html.h \
+  src/devices/grohtml/html-text.h \
+  src/devices/grohtml/html-table.h
+
+post_grohtml_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a 
+man1_MANS += src/devices/grohtml/grohtml.1
+EXTRA_DIST += src/devices/grohtml/grohtml.1.man
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/src/devices/grohtml/grohtml.man b/src/devices/grohtml/grohtml.man
deleted file mode 100644 (file)
index 51eae22..0000000
+++ /dev/null
@@ -1,453 +0,0 @@
-.TH GROHTML @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grohtml \- html driver for groff
-.
-.
-.\" license
-.de co
-Copyright \[co] 1999-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.  ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.  el .TP "\\$1"
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fBgrohtml 'u
-.ti \niu
-.B grohtml
-.
-.de OP
-.  ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.  el .RB "[\ " "\\$1" "\ ]"
-..
-.
-.OP \-bhlnprv
-.OP \-a \%aa-text-bits
-.OP \-D dir
-.OP \-F dir
-.OP \-g \%aa-graphic-bits
-.OP \-i \%resolution
-.OP \-I \%image-stem
-.OP \-j \%filename
-.OP \-o \%image-vertical-offset
-.OP \-s size
-.OP \-S level
-.OP \-x \%html-dialect
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.B grohtml
-front end (which consists of a preprocessor,
-.BR pre-grohtml ,
-and a device driver,
-.BR post-grohtml )
-translates the output of GNU
-.B troff
-to html.
-.
-Users should always invoke
-.B grohtml
-via the groff command with a
-.B \-Thtml
-option.
-.
-If no files are given,
-.B grohtml
-will read the standard input.
-.
-A filename of
-.B \-
-will also cause
-.B grohtml
-to read the standard input.
-.
-Html output is written to the standard output.
-.
-When
-.B grohtml
-is run by
-.B groff
-options can be passed to
-.B grohtml
-using
-.BR groff \[aq]s
-.B \-P
-option.
-.
-.
-.PP
-.B grohtml
-invokes
-.B groff
-twice.
-In the first pass, pictures, equations, and tables are rendered
-using the
-.B ps
-device, and in the second pass HTML output is generated by the
-.B html
-device.
-.
-.
-.PP
-.B grohtml
-always writes output in \%UTF-8 encoding and has built-in entities for
-all non-composite unicode characters.
-.
-In spite of this, groff may issue warnings about unknown special
-characters if they can\[aq]t be found during the first pass.
-.
-Such warnings can be safely ignored unless the special characters
-appear inside a table or equation.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI \-a aa-text-bits
-Number of bits of antialiasing information to be used by
-.I text
-when generating png images.
-.
-The default is\~4 but valid values are 0, 1, 2, and\~4.
-.
-Note your version of
-.B gs
-needs to support the
-.B \%\-dTextAlphaBits
-and
-.B \%\-dGraphicAlphaBits
-options in order to exploit antialiasing.
-.
-A value of\~0 stops
-.B grohtml
-from issuing antialiasing commands to
-.BR gs .
-.
-.TP
-.B \-b
-Initialize the background color to white.
-.
-.TP
-.BI \-D dir
-Inform
-.B grohtml
-to place all image files into directory
-.IR dir .
-.
-.TP
-.B \-e
-This option should not be directly invoked by the user as it is an
-internal option utilized by
-.B groff
-when
-.B \-Thtml
-or
-.B \-Txhtml
-is specified.
-It is used by the
-.B grohtml
-preprocessor to determine whether
-.B eqn
-should attempt to produce MathML (if
-.B \-Txhtml
-is specified).
-.
-.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for font and device description files;
-.I name
-is the name of the device, usually
-.BR html .
-.
-.TP
-.BI \-g aa-graphic-bits
-Number of bits of antialiasing information to be used by
-.I graphics
-when generating png images.
-.
-The default is\~4 but valid values are 0, 1, 2, and\~4.
-.
-Note your version of
-.B gs
-needs to support the
-.B \%\-dTextAlphaBits
-and
-.B \%\-dGraphicAlphaBits
-options in order to exploit antialiasing.
-.
-A value of\~0 stops
-.B grohtml
-from issuing antialiasing commands to
-.BR gs .
-.
-.TP
-.B \-h
-Generate section and number headings by using
-.BR <B> .\|.\|. </B>
-and increasing the font size, rather than using the
-.BI <H n >\c
-\&.\|.\|.\c
-.BI </H n >
-tags.
-.
-.TP
-.BI \-i resolution
-Select the resolution for all images.
-.
-By default this is 100 pixels per inch.
-.
-Example:
-.B \-i200
-indicates 200 pixels per inch.
-.
-.TP
-.BI \-I stem
-Determine the image stem name.
-.
-If omitted grohtml uses
-.BI \%grohtml- XXX
-.RI ( XXX
-is the process ID).
-.
-.TP
-.BI \-j filename
-Inform
-.B grohtml
-to split the html output into multiple files.
-.
-The
-.I filename
-is the stem and specified section headings (default is level one)
-start a new file, named
-.IR filename-n.html .
-.
-.TP
-.B \-l
-Turn off the production of automatic section links at the top of the
-document.
-.
-.TP
-.B \-n
-Generate simple heading anchors whenever a section/number heading is
-found.
-.
-Without the option the anchor value is the textual heading.
-.
-This can cause problems when a heading contains a \[oq]?\[cq] on older
-versions of some browsers (Netscape).
-.
-This flag is automatically turned on if a heading contains an image.
-.
-.TP
-.BI \-o vertical-offset
-Specify the vertical offset of images in points.
-.
-.TP
-.B \-p
-Display page rendering progress to stderr.
-.B grohtml
-only displays a page number when an image is required.
-.
-.TP
-.B \-r
-Turn off the automatic header and footer line (html rule).
-.
-.TP
-.B \-s size
-Set the base point size of the source file.
-.
-Thereafter when this point size is used in the source it will
-correspond to the html base size.
-.
-Every increase of two points in the source will yield a
-.B <big>
-tag, and conversely when a decrease of two points is seen a
-.B <small>
-tag is emitted.
-.
-.TP
-.BI \-S level
-When splitting html output,
-split at the heading level (or higher) defined by
-.IR level .
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.B \-V
-Create an XHTML or HTML validator button at the bottom of each page of
-the document.
-.
-.TP
-.BI \-x dialect
-Select HTML dialect.
-.
-Currently,
-.I dialect
-should be either the digit\~\c
-.B 4
-or the letter\~\c
-.B x
-which indicates whether
-.B grohtml
-should generate HTML\~4 or XHTML, respectively.
-.
-This option should not be directly invoked by the user as it is
-an internal option utilized by
-.B groff
-when
-.B \-Thtml
-or
-.B \-Txhtml
-is specified.
-.
-.TP
-.B \-y
-Produce a right-justified groff signature at the end of the document.
-.
-This is only generated if the
-.B \-V
-flag is also specified.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-There are styles called
-.BR R ,
-.BR I ,
-.BR B ,
-and
-.B BI
-mounted at font positions 1 to\~4.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DEPENDENCIES
-.\" --------------------------------------------------------------------
-.
-.B grohtml
-is dependent upon the png utilities
-.RB ( \%pnmcut ,
-.BR \%pnmcrop ,
-.BR \%pnmtopng )
-and GhostScript
-.RB ( gs ).
-.
-.B \%pnmtopng
-(version 2.37.6 or greater)
-and
-.B \%pnmcut
-from the netpbm package (version 9.16 or greater) will work also.
-.
-It is also dependent upon
-.B \%psselect
-from the
-.B PSUtils
-package.
-.
-Images are generated whenever a table, picture, equation or line is
-encountered.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.B grohtml
-uses temporary files.
-.
-See the
-.BR groff (@MAN1EXT@)
-man page for details where such files are created.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.SM
-.B GROFF_FONT_PATH
-A list of directories in which to search for the
-.BI dev name
-directory in addition to the default ones.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_font (@MAN5EXT@)
-for more details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-.B Grohtml
-has been completely redesigned and rewritten.
-.
-It is still beta code.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR afmtodit (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR psbb (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH "LICENSE"
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index e0430a1ed4c6d56ceeb4956d4fba3f00ecbb2bd7..82157f3c2025a09c217843057c6dfb135092533d 100644 (file)
@@ -23,7 +23,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "driver.h"
 #include "stringclass.h"
index cea73bdfa396ea6fe51e005610da3fce6287b480..b4fe23ac93fe108da537a05bc86d4fb1698834e7 100644 (file)
@@ -23,7 +23,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "html.h"
 
@@ -101,7 +101,7 @@ private:
   cols          *columns;      /* column entries */
   int            linelength;
   cols          *last_col;     /* last column started */
-  int            start_space;  /* have we seen a `.sp' tag? */
+  int            start_space;  /* have we seen a '.sp' tag? */
 
   void  remove_cols (cols *c);
 };
index 7ba1fae2f9d2901b356e2c0b38957675e32fb42e..2475cc4527054234b69b1c92c3248c67991ba042 100644 (file)
@@ -1,6 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2000-2014
- * Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
  *
  *  Gaius Mulley (gaius@glam.ac.uk) wrote html-text.cpp
  *
@@ -24,7 +23,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "driver.h"
 #include "stringclass.h"
@@ -756,7 +755,7 @@ html_indent *html_text::remove_indent (HTML_TAG tag)
 
 /*
  *  remove_para_space - removes the leading space to a paragraph
- *                      (effectively this trims off a leading `.sp' tag).
+ *                      (effectively this trims off a leading '.sp' tag).
  */
 
 void html_text::remove_para_space (void)
index e5be5e1a07f0f97ed01dd1ed61e38b248b241fa9..2871427f55bfd63d4b93f263e56b410d326c8813 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
  *
  *  Gaius Mulley (gaius@glam.ac.uk) wrote html-text.h
  *
@@ -22,7 +22,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "html.h"
 #include "html-table.h"
index a8fb51a17807c7ecd1c60c5b12fedb64af4ca259..8cb653421881e690a1f923df963f85cfd15c150f 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #if !defined(HTML_H)
 #  define HTML_H
index b3149018331f659ca8af68ef2577be68fbbb65d2..efd9c30db5c9852b6446f34312476bfe9833b53f 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
  *
  *  Gaius Mulley (gaius@glam.ac.uk) wrote output.cpp
  *  but it owes a huge amount of ideas and raw code from
@@ -24,7 +24,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "driver.h"
 #include "stringclass.h"
index fefbf014987dce8baec7d2c837f40231d89b4c73..7bc017e051b9e8d2c8c02dbbcf4a0142a2b07442 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
  *
  *  Gaius Mulley (gaius@glam.ac.uk) wrote post-html.cpp
  *  but it owes a huge amount of ideas and raw code from
@@ -20,7 +20,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "driver.h"
 #include "stringclass.h"
@@ -28,6 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 #include "html.h"
 #include "html-text.h"
 #include "html-table.h"
+#include "curtime.h"
 
 #include <time.h>
 
@@ -79,7 +80,7 @@ static int manufacture_headings = FALSE;             /* default is to use the Hn
                                                      /* rather than manufacture our own.         */
 static color *default_background = NULL;             /* has user requested initial bg color?     */
 static string job_name;                              /* if set then the output is split into     */
-                                                     /* multiple files with `job_name'-%d.html   */
+                                                     /* multiple files with 'job_name'-%d.html   */
 static int multiple_files = FALSE;                   /* must we the output be divided into       */
                                                      /* multiple html files, one for each        */
                                                      /* heading?                                 */
@@ -1741,7 +1742,7 @@ void assert_state::add (assert_pos **h,
        l = "<none>";
       if (v == NULL)
        v = "no value at all";
-      fprintf(stderr, "%s:%s:error in assert format of id=%s expecting value to be prefixed with an `=' got %s\n",
+      fprintf(stderr, "%s:%s:error in assert format of id=%s expecting value to be prefixed with an '=' got %s\n",
              f, l, i, v);
     }
     t->id = i;
@@ -2866,7 +2867,7 @@ void html_printer::do_eol (void)
 }
 
 /*
- *  do_check_center - checks to see whether we have seen a `.ce' tag
+ *  do_check_center - checks to see whether we have seen a '.ce' tag
  *                    during the previous line.
  */
 
@@ -4239,7 +4240,7 @@ void html_printer::draw(int code, int *p, int np, const environment *env)
     break;
 
   default:
-    error("unrecognised drawing command `%1'", char(code));
+    error("unrecognised drawing command '%1'", char(code));
     break;
   }
 }
@@ -4702,7 +4703,7 @@ void html_printer::set_char(glyph *g, font *f, const environment *env,
   style sty(f, env->size, env->height, env->slant, env->fontno, *env->col);
   if (sty.slant != 0) {
     if (sty.slant > 80 || sty.slant < -80) {
-      error("silly slant `%1' degrees", sty.slant);
+      error("silly slant '%1' degrees", sty.slant);
       sty.slant = 0;
     }
   }
@@ -4740,16 +4741,16 @@ void html_printer::set_numbered_char(int num, const environment *env,
   glyph *g = number_to_glyph(num);
   int fn = env->fontno;
   if (fn < 0 || fn >= nfonts) {
-    error("bad font position `%1'", fn);
+    error("bad font position '%1'", fn);
     return;
   }
   font *f = font_table[fn];
   if (f == 0) {
-    error("no font mounted at `%1'", fn);
+    error("no font mounted at '%1'", fn);
     return;
   }
   if (!f->contains(g)) {
-    error("font `%1' does not contain numbered character %2",
+    error("font '%1' does not contain numbered character %2",
          f->get_name(),
          num);
     return;
@@ -4771,21 +4772,21 @@ glyph *html_printer::set_char_and_width(const char *nm, const environment *env,
   glyph *g = name_to_glyph(nm);
   int fn = env->fontno;
   if (fn < 0 || fn >= nfonts) {
-    error("bad font position `%1'", fn);
+    error("bad font position '%1'", fn);
     return UNDEFINED_GLYPH;
   }
   *f = font_table[fn];
   if (*f == 0) {
-    error("no font mounted at `%1'", fn);
+    error("no font mounted at '%1'", fn);
     return UNDEFINED_GLYPH;
   }
   if (!(*f)->contains(g)) {
     if (nm[0] != '\0' && nm[1] == '\0')
-      error("font `%1' does not contain ascii character `%2'",
+      error("font '%1' does not contain ascii character '%2'",
            (*f)->get_name(),
            nm[0]);
     else
-      error("font `%1' does not contain special character `%2'",
+      error("font '%1' does not contain special character '%2'",
            (*f)->get_name(),
            nm);
     return UNDEFINED_GLYPH;
@@ -4820,7 +4821,7 @@ void html_printer::write_title (int in_head)
       }
     }
   } else if (in_head) {
-    // place empty title tags to help conform to `tidy'
+    // place empty title tags to help conform to 'tidy'
     html.put_string("<title></title>").nl();
   }
 }
@@ -5013,7 +5014,7 @@ void html_printer::do_file_components (void)
        .put_string(Version_string)
        .end_comment();
 
-      t = time(0);
+      t = current_time();
       html.begin_comment("CreationDate: ")
        .put_string(ctime(&t), strlen(ctime(&t))-1)
        .end_comment();
@@ -5126,7 +5127,7 @@ html_printer::~html_printer()
     .put_string(Version_string)
     .end_comment();
 
-  t = time(0);
+  t = current_time();
   html.begin_comment("CreationDate: ")
     .put_string(ctime(&t), strlen(ctime(&t))-1)
     .end_comment();
@@ -5364,7 +5365,7 @@ void html_printer::special(char *s, const environment *env, char type)
 }
 
 /*
- *  devtag - handles device troff tags sent from the `troff'.
+ *  devtag - handles device troff tags sent from the 'troff'.
  *           These include the troff state machine tags:
  *           .br, .sp, .in, .tl, .ll etc
  *
diff --git a/src/devices/grolbp/Makefile.sub b/src/devices/grolbp/Makefile.sub
deleted file mode 100644 (file)
index 784287a..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-# Makefile.sub for `grolbp'
-#
-# File position: <groff-source>/src/devices/grolbp/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grolbp$(EXEEXT)
-MAN1=grolbp.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=lbp.$(OBJEXT)
-CCSRCS=$(srcdir)/lbp.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 971e07336ebcb6b632a396adf3c3483c3e5bd7da..048b1202e87ab575db5ea53fab2f9d4c759ed7bc 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
      Written by Francisco Andrés Verdú <pandres@dragonet.es> with many ideas
      taken from the other groff drivers.
 
@@ -16,7 +16,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 // Definition of the WP54 character set
 
diff --git a/src/devices/grolbp/grolbp.1.man b/src/devices/grolbp/grolbp.1.man
new file mode 100644 (file)
index 0000000..bdd1c0f
--- /dev/null
@@ -0,0 +1,456 @@
+'\" t
+.TH GROLBP @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+grolbp \- groff driver for Canon CAPSL printers (LBP-4 and LBP-8 \
+series laser printers)
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr grolbp_C \n[.C]
+.cp 0
+.
+.
+.\" Modified by Francisco Andrés Verdú <pandres@dragonet.es> for the
+.\" grolbp program.
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1994-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY grolbp
+.OP \-l
+.OP \-c num-copies
+.OP \-F font-directory
+.OP \-o orientation
+.OP \-p paper-size
+.OP \-w width
+.RI [ file
+\&.\|.\|.\&]
+.SY grolbp
+[\c
+.BI \-\-copies= num-copies\c
+] [\c
+.BI \-\-fontdir= font-directory\c
+] [\c
+.B \-\-landscape\c
+] [\c
+.BI \-\-linewidth= width\c
+] [\c
+.BI \-\-orientation= orientation\c
+] [\c
+.BI \-\-papersize= paper-size\c
+]
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.SY grolbp
+.B \-h
+.SY grolbp
+.B \-\-help
+.YS
+.
+.SY grolbp
+.B \-v
+.SY grolbp
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B grolbp
+is a driver for
+.B groff
+that produces output in CAPSL and VDM format suitable for Canon LBP-4
+and LBP-8 printers.
+.
+.
+.LP
+For compatibility with
+.BR grolj4 (@MAN1EXT@)
+there is an additional drawing command available:
+.
+.TP
+.BI \eD'R\  dh\ dv '
+Draw a rule
+(i.e., a solid black rectangle),
+with one corner at the current position,
+and the diagonally opposite corner at the current
+position
+.RI +( dh , dv ).
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Note that there can be whitespace between a one-letter option and its
+argument;
+on the other hand, there must be whitespace and/or an equal sign
+(\(oq=\(cq) between a long-name option and its argument.
+.
+.
+.TP
+.BI \-c " num-copies"
+.TQ
+.BI \-\-copies= num-copies
+Print
+.I num-copies
+copies of each page.
+.
+.
+.TP
+.BI \-F " font-directory"
+.TQ
+.BI \-\-fontdir= font-directory
+Prepend directory
+.RI font-directory /dev name
+to the search path for font and device description files;
+.I name
+is the name of the device, usually
+.BR lbp .
+.
+.
+.TP
+.B \-h
+.TQ
+.B \-\-help
+Print a short help text.
+.
+.
+.TP
+.B \-l
+.TQ
+.B \-\-landscape
+Print the document with a landscape orientation.
+.
+.
+.TP
+.BI \-o " orientation"
+.TQ
+.BI \-\-orientation= orientation
+Print the document with
+.I orientation
+orientation, which must be \(oqportrait\(cq or \(oqlandscape\(cq.
+.
+.
+.TP
+.BI \-p " paper-size"
+.TQ
+.BI \-\-papersize= paper-size
+Set the paper size to
+.IR paper-size ,
+which must be a valid paper size description as indicated in section
+\[lq]Paper Sizes\[rq], below.
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Print the version number.
+.
+.
+.TP
+.BI \-w " width"
+.TQ
+.BI \-\-linewidth= width
+Set the default line thickness to
+.I width
+thousandths of an em.
+.
+If this option isn't specified, the line thickness defaults to 0.04\~em.
+.
+.
+.\" ====================================================================
+.SH TYPEFACES
+.\" ====================================================================
+.
+The driver supports the Dutch, Swiss and Swiss-Narrow scalable
+typefaces, each one in the Regular, Bold, Italic and Bold-Italic styles.
+.
+Additionally, the Courier and Elite monospaced typefaces at the sizes 8
+and 12 points (for Courier) resp.\& 8 and 10 points (for Elite) are
+supported, each one in the Regular, Bold and Italic styles.
+.
+.
+.PP
+The following chart summarizes the font names you can use to access
+these fonts:
+.
+.
+.PP
+.TS
+tab(|) allbox center;
+c c c c c
+ab c c c c
+.
+Typeface | Regular | Bold | Italic | Bold-Italic
+Dutch | TR | TB | TI | TBI
+Swiss | HR | HB | HI | HBI
+Swiss Narrow | HNR | HNB | HNI | HNBI
+Courier | CR | CB | CI |
+Elite | ER | EB | EI |
+.TE
+.
+.
+.\" ====================================================================
+.SH PAPER SIZES
+.\" ====================================================================
+.
+The paper size can be set in the
+.I DESC
+file or with command-line options to
+.BR grolbp .
+If the paper size is specified both ways, the command-line options take
+precedence over the contents of the
+.I DESC
+file (this applies to the page orientation too).
+.
+.
+.PP
+See
+.BR groff_font (@MAN5EXT@)
+how to set the paper dimensions in the
+.I DESC
+file.
+.
+.
+.PP
+To set the paper size in the command line, add
+.sp 1
+.in +2m
+.BI \-p \ paper-size
+.in -2m
+.sp 1
+or
+.sp 1
+.in +2m
+.BI \-\-papersize= paper-size
+.in -2m
+.sp 1
+to the other
+.B grolbp
+options, where
+.I paper-size
+is in the same format as in the
+.I DESC
+file.
+.
+.
+.PP
+If no paper size is specified in the
+.I DESC
+file or the command line, a default size of A4 is used.
+.
+.
+.\" ====================================================================
+.SH PAGE ORIENTATION
+.\" ====================================================================
+.
+As with the page size, the orientation of the printed page
+.RB ( portrait
+or
+.BR landscape )
+can be set in the
+.I DESC
+file or with command-line options.
+.
+It is also case insensitive.
+.
+.
+.PP
+To set the orientation in the
+.I DESC
+file, insert a line with the following content:
+.sp 1
+.in +2m
+.B orientation
+.RB [ portrait | landscape ]
+.in -2m
+.sp 1
+.
+Only the first valid orientation command in the
+.I DESC
+file is used.
+.
+.
+.PP
+To set the page orientation with command-line options you can use the
+.B \-o
+or
+.B \-\-orientation
+option with the same parameters
+.RB ( portrait
+or
+.BR landscape )
+as in the
+.I DESC
+file.
+Or you can use the
+.B \-l
+option to force the pages to be printed in landscape.
+.
+.
+.\" ====================================================================
+.SH FONT FILE FORMAT
+.\" ====================================================================
+.
+In addition to the usual commands described in
+.BR groff_font (@MAN5EXT@),
+.B grolbp
+provides the command
+.I lbpname
+which sets the font name sent to the printer when requesting this font.
+.
+The syntax of this command is:
+.sp 1
+.in +2m
+.B lbpname
+.I printer_font_name
+.in -2m
+.
+.IP \(bu
+For bitmapped fonts,
+.I printer_font_name
+has the form
+.sp 1
+.in +2m
+.RI N\(la base_fontname \(ra\(la font_style \(ra
+.in -2m
+.sp 1
+.I base_fontname
+is the font name as it appears in the printers font listings without the
+first letter, up to (but not including) the font size.
+.I font_style
+can be one of the letters
+.BR R ,
+.BR I ,
+or
+.BR B ,
+indicating the font styles Roman, Italic and Bold respectively.
+.
+.IP
+For instance, if the printer's
+.I font listing A
+shows font \(oqNelite12I.ISO_USA\(cq, the corresponding entry in the
+font description file is
+.sp 1
+.in +2m
+.B lbpname NeliteI
+.in -2m
+.
+.IP
+Note that you may need to modify
+.B grolbp
+to add support for new bitmapped fonts, since the available font names
+and font sizes of bitmapped fonts (as documented above) are hard-coded
+into the program.
+.
+.IP \(bu
+For scalable fonts,
+.I printer_font_name
+is identical to the font name as it appears in the printer's
+.IR "font listing A" .
+.
+.IP
+For instance, to select the \(oqSwiss\(cq font in bold style, which
+appears in the printer's
+.I font listing A
+as \(oqSwiss-Bold\(cq, the required
+.B lbpname
+command line is
+.sp 1
+.in +2m
+.B lbpname Swiss-Bold
+.in -2m
+.sp 1
+.
+.PP
+The argument of
+.B lbpname
+is case sensitive.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROFF_FONT_PATH
+A list of directories in which to search for the
+.IR dev name
+directory in addition to the default ones.
+.
+See
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_font (@MAN5EXT@)
+for more details.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @FONTDIR@/devlbp/DESC
+Device description file.
+.
+.TP
+.IR @FONTDIR@/devlbp/ F
+Font description file for font
+.IR F .
+.
+.TP
+.I @MACRODIR@/lbp.tmac
+Macros for use with
+.BR grolbp .
+.
+.
+.\" ====================================================================
+.SH SEE ALSO
+.\" ====================================================================
+.
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR groff_out (@MAN5EXT@),
+.BR groff_font (@MAN5EXT@),
+.BR groff_char (@MAN7EXT@)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[grolbp_C]
+.
+.
+.\"
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/devices/grolbp/grolbp.am b/src/devices/grolbp/grolbp.am
new file mode 100644 (file)
index 0000000..64c9f4a
--- /dev/null
@@ -0,0 +1,38 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += grolbp
+grolbp_SOURCES = \
+  src/devices/grolbp/lbp.cpp \
+  src/devices/grolbp/lbp.h \
+  src/devices/grolbp/charset.h
+
+grolbp_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+man1_MANS += src/devices/grolbp/grolbp.1
+EXTRA_DIST += src/devices/grolbp/grolbp.1.man
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/src/devices/grolbp/grolbp.man b/src/devices/grolbp/grolbp.man
deleted file mode 100644 (file)
index 37f30b9..0000000
+++ /dev/null
@@ -1,450 +0,0 @@
-'\" t
-.\" The above line should force the use of tbl as a preprocessor
-.\" vim: set syntax=nroff :
-.\" The above line should set vim into nroff mode
-.TH GROLBP @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grolbp \- groff driver for Canon CAPSL printers (LBP-4 and LBP-8 \
-series laser printers).
-.
-.
-.\" license
-.de co
-Copyright \[co] 1994-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-
-Modified by Francisco Andrés Verdú <pandres@dragonet.es> for the grolbp
-program.
-..
-.
-.
-.de TQ
-.  br
-.  ns
-.  TP \\$1
-..
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.  ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.  el .TP "\\$1"
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.nr a \n(.j
-.ad l
-.nh
-.nr i \n(.i
-.in +\w'\fBgrolbp 'u
-.ti \niu
-.B grolbp
-.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.el .RB "[\ " "\\$1" "\ ]"
-..
-.
-.OP \-l
-.OP \-\-landscape
-.OP \-v
-.OP \-\-version
-.OP \-c n
-.OP \-\-copies= numcopies
-.OP \-p paper_size
-.OP \-\-papersize= paper_size
-.OP \-o orientation
-.OP \-\-orientation= orientation
-.OP \-w width
-.OP \-\-linewidth= width
-.OP \-F dir
-.OP \-\-fontdir= dir
-.OP \-h
-.OP \-\-help
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.hy
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B grolbp
-is a driver for
-.B groff
-that produces output in CAPSL and VDM format suitable for Canon LBP\-4 and
-LBP\-8 printers.
-.
-.
-.LP
-For compatibility with grolj4 there is an additional drawing command
-available:
-.
-.TP
-.BI \eD'R\  dh\ dv '
-Draw a rule (i.e.\ a solid black rectangle), with one corner at the current
-position, and the diagonally opposite corner at the current position
-.RI +( dh , dv ).
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-Note that there can be whitespace between a one-letter option and its
-argument; on the other hand, there must be whitespace and/or an equal sign
-(\[oq]=\[cq]) between a long-name option and its argument.
-.
-.TP
-.BI \-c numcopies
-.TQ
-.BI \-\-copies= numcopies
-Print
-.I numcopies
-copies of each page.
-.
-.TP
-.B \-l
-.TQ
-.B \-\-landscape
-Print the document with a landscape orientation.
-.
-.TP
-.BI \-p paper_size
-.TQ
-.BI \-\-papersize= paper_size
-Set the paper size to
-.IR paper_size ,
-which must be a valid paper size description as indicated in the section
-.BR "PAPER SIZES" .
-.
-.TP
-.BI \-o orientation
-.TQ
-.BI \-\-orientation= orientation
-Print the document with
-.I orientation
-orientation, which must be \[oq]portrait\[cq] or \[oq]landscape\[cq].
-.
-.TP
-.BI \-w width
-.TQ
-.BI \-\-linewidth= width
-Set the default line thickness to
-.I width
-thousandths of an em.
-.
-If this option isn\[aq]t specified, the line thickness defaults to 0.04\~em.
-.
-.TP
-.B \-v
-.TQ
-.B \-\-version
-Print the version number.
-.
-.TP
-.BI \-F dir
-.TQ
-.BI \-\-fontdir= dir
-Prepend directory
-.IB dir /dev name
-to the search path for font and device description files;
-.I name
-is the name of the device, usually
-.BR lbp .
-.
-.TP
-.B \-h
-.TQ
-.B \-\-help
-Print a short help text.
-.
-.
-.\" --------------------------------------------------------------------
-.SH TYPEFACES
-.\" --------------------------------------------------------------------
-.
-The driver supports the Dutch, Swiss and Swiss-Narrow scalable typefaces,
-each one in the Regular, Bold, Italic and Bold-Italic styles.
-.
-Additionally, the Courier and Elite monospaced typefaces at the sizes 8 and
-12 points (for Courier) resp.\& 8 and 10 points (for Elite) are supported,
-each one in the Regular, Bold and Italic styles.
-.
-.
-.PP
-The following chart summarizes the font names you can use to access these
-fonts:
-.
-.
-.PP
-.TS
-tab(|) allbox center;
-c c c c c
-ab c c c c
-.
-Typeface | Regular | Bold | Italic | Bold-Italic
-Dutch | TR | TB | TI | TBI
-Swiss | HR | HB | HI | HBI
-Swiss Narrow | HNR | HNB | HNI | HNBI
-Courier | CR | CB | CI |
-Elite | ER | EB | EI |
-.TE
-.
-.
-.\" --------------------------------------------------------------------
-.SH PAPER SIZES
-.\" --------------------------------------------------------------------
-.
-The paper size can be set in the
-.B DESC
-file or with command line options to
-.BR grolbp .
-If the paper size is specified both ways, the command line options take
-precedence over the contents of the
-.B DESC
-file (this applies to the page orientation too).
-.
-.
-.PP
-See
-.BR groff_font (@MAN5EXT@)
-how to set the paper dimensions in the
-.B DESC
-file.
-.
-.
-.PP
-To set the paper size in the command line, add
-.sp 1
-.in +2m
-.BI \-p \ paper-size
-.in -2m
-.sp 1
-or
-.sp 1
-.in +2m
-.BI \-\-papersize= paper-size
-.in -2m
-.sp 1
-to the other
-.B grolbp
-options, where
-.I paper-size
-is in the same format as in the
-.B DESC
-file.
-.
-.
-.PP
-If no paper size is specified in the
-.B DESC
-file or the command line, a default size of A4 is used.
-.
-.
-.\" --------------------------------------------------------------------
-.SH PAGE ORIENTATION
-.\" --------------------------------------------------------------------
-.
-As with the page size, the orientation of the printed page
-.RB ( portrait
-or
-.BR landscape )
-can be set in the
-.B DESC
-file or with command line options.
-.
-It is also case insensitive.
-.
-.
-.PP
-To set the orientation in the
-.B DESC
-file, insert a line with the following content:
-.sp 1
-.in +2m
-.B orientation
-.RB [ portrait | landscape ]
-.in -2m
-.sp 1
-.
-Only the first valid orientation command in the
-.B DESC
-file is used.
-.
-.
-.PP
-To set the page orientation with command line options you can use the
-.B \-o
-or
-.B \-\-orientation
-option with the same parameters
-.RB ( portrait
-or
-.BR landscape )
-as in the
-.B DESC
-file.
-Or you can use the
-.B \-l
-option to force the pages to be printed in landscape.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FONT FILE FORMAT
-.\" --------------------------------------------------------------------
-.
-In addition to the usual commands described in
-.BR groff_font (@MAN5EXT@),
-.B grolbp
-provides the command
-.I lbpname
-which sets the font name sent to the printer when requesting this font.
-.
-The syntax of this command is:
-.sp 1
-.in +2m
-.B lbpname
-.I printer_font_name
-.in -2m
-.
-.IP \(bu
-For bitmapped fonts,
-.I printer_font_name
-has the form
-.sp 1
-.in +2m
-.RI N\(la base_fontname \(ra\(la font_style \(ra
-.in -2m
-.sp 1
-.I base_fontname
-is the font name as it appears in the printers font listings without the
-first letter, up to (but not including) the font size.
-.I font_style
-can be one of the letters
-.BR R ,
-.BR I ,
-or
-.BR B ,
-indicating the font styles Roman, Italic and Bold respectively.
-.
-.IP
-For instance, if the printer\[aq]s
-.I font listing A
-shows font \[oq]Nelite12I.ISO_USA\[cq], the corresponding entry in the
-font description file is
-.sp 1
-.in +2m
-.B lbpname NeliteI
-.in -2m
-.
-.IP
-Note that you may need to modify
-.B grolbp
-to add support for new bitmapped fonts, since the available font names and
-font sizes of bitmapped fonts (as documented above) are hard-coded into the
-program.
-.
-.IP \(bu
-For scalable fonts,
-.I printer_font_name
-is identical to the font name as it appears in the printer\[aq]s
-.IR "font listing A" .
-.
-.IP
-For instance, to select the \[oq]Swiss\[cq] font in bold style, which
-appears in the printer\[aq]s
-.I font listing A
-as \[oq]Swiss-Bold\[cq], the required
-.B lbpname
-command line is
-.sp 1
-.in +2m
-.B lbpname Swiss-Bold
-.in -2m
-.sp 1
-.
-.PP
-The argument of
-.B lbpname
-is case sensitive.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.SM
-.B GROFF_FONT_PATH
-A list of directories in which to search for the
-.BI dev name
-directory in addition to the default ones.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_font (@MAN5EXT@)
-for more details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP
-.B @FONTDIR@/devlbp/DESC
-Device description file.
-.
-.TP
-.BI @FONTDIR@/devlbp/ F
-Font description file for font
-.IR F .
-.
-.TP
-.B @MACRODIR@/lbp.tmac
-Macros for use with
-.BR grolbp .
-.
-.
-.\" --------------------------------------------------------------------
-.SH SEE ALSO
-.\" --------------------------------------------------------------------
-.
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.
-.co
-.
-.
-.\"
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index fbd1bbf5a58089d062d96469c0b9636816be8387..0109d3ac7f2be9ae98c618091b8ad440dfcf6792 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1994-2014 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2018 Free Software Foundation, Inc.
      Written by Francisco Andrés Verdú <pandres@dragonet.es> with many ideas
      taken from the other groff drivers.
 
@@ -16,7 +16,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /*
 TODO
@@ -117,7 +117,7 @@ void lbp_font::handle_unknown_font_command(const char *command,
   if (strcmp(command, "lbpname") == 0) {
     if (arg == 0)
       fatal_with_file_and_line(filename, lineno,
-                              "`%1' command requires an argument",
+                              "'%1' command requires an argument",
                               command);
     this->lbpname = new char[strlen(arg) + 1];
     strcpy(this->lbpname, arg);
@@ -388,9 +388,10 @@ inline void lbp_printer::setfillmode(int mode)
     if (mode != 1)
       vdmsetfillmode(mode, 1, 0);
     else
-      vdmsetfillmode(mode, 1, 1);      // To get black we must use white
-                                       // inverted
-      fill_mode = mode;
+      // To get black, we must use white inverted.
+      vdmsetfillmode(mode, 1, 1);
+
+    fill_mode = mode;
   }
 }
 
@@ -400,7 +401,7 @@ inline void lbp_printer::polygon(int hpos, int vpos, int np, int *p)
   points = new int[np + 2];
   points[0] = hpos;
   points[1] = vpos;
-  // fprintf(stderr, "Poligon (%d,%d) ", points[0], points[1]);
+  // fprintf(stderr, "Polygon (%d,%d) ", points[0], points[1]);
   for (i = 0; i < np; i++)
     points[i + 2] = p[i];
   // for (i = 0; i < np; i++) fprintf(stderr, " %d ", p[i]);
@@ -540,7 +541,7 @@ void lbp_printer::draw(int code, int *p, int np, const environment *env)
     // not implemented yet
     break;
   default:
-    error("unrecognised drawing command `%1'", char(code));
+    error("unrecognised drawing command '%1'", char(code));
     break;
   }
   return;
@@ -585,12 +586,12 @@ static void handle_unknown_desc_command(const char *command, const char *arg,
 {
   // orientation command
   if (strcasecmp(command, "orientation") == 0) {
-    // We give priority to command line options
+    // We give priority to command-line options
     if (orientation > 0)
       return;
     if (arg == 0)
       error_with_file_and_line(filename, lineno,
-                              "`orientation' command requires an argument");
+                              "'orientation' command requires an argument");
     else {
       if (strcasecmp(arg, "portrait") == 0)
        orientation = 0;
@@ -599,7 +600,7 @@ static void handle_unknown_desc_command(const char *command, const char *arg,
          orientation = 1;
        else
          error_with_file_and_line(filename, lineno,
-                                  "invalid argument to `orientation' command");
+                                  "invalid argument to 'orientation' command");
       }
     }
   }
@@ -657,7 +658,7 @@ int main(int argc, char **argv)
        const char *s;
        if (!font::scan_papersize(optarg, &s,
                                  &user_paperlength, &user_paperwidth))
-         error("invalid paper size `%1' ignored", optarg);
+         error("invalid paper size '%1' ignored", optarg);
        else
          user_papersize = set_papersize(s);
        break;
index 68cd8dce1b552e6d710c15c013dea64fcb156d75..6255bdd54c3e1283ad5a6ca607225ab126fe7a56 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C -*-
-/* Copyright (C) 1994-201 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2018 Free Software Foundation, Inc.
      Written by Francisco Andrés Verdú <pandres@dragonet.es>
 
 groff is free software; you can redistribute it and/or modify it under
@@ -13,7 +13,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /*  This file contains a set of utility functions to use canon CAPSL printers
  *  (lbp-4 and lbp-8 series printers) */
diff --git a/src/devices/grolj4/Makefile.sub b/src/devices/grolj4/Makefile.sub
deleted file mode 100644 (file)
index 60f7bf9..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# Makefile.sub for `grolj4'
-#
-# File position: <groff-source>/src/devices/grolj4/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grolj4$(EXEEXT)
-MAN1=grolj4.n
-MAN5=lj4_font.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=lj4.$(OBJEXT)
-CCSRCS=$(srcdir)/lj4.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/devices/grolj4/grolj4.1.man b/src/devices/grolj4/grolj4.1.man
new file mode 100644 (file)
index 0000000..079f9c0
--- /dev/null
@@ -0,0 +1,232 @@
+.TH GROLJ4 @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+grolj4 \- groff driver for HP LaserJet 4 family
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1994-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY grolj4
+.OP \-l
+.OP \-c num-copies
+.RB [ \-d
+.RI [ n ]]
+.OP \-F font-directory
+.OP \-p paper-size
+.OP \-w line-width
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.SY grolj4
+.B \-\-help
+.YS
+.
+.SY grolj4
+.B \-v
+.SY grolj4
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B grolj4
+is a driver for
+.B groff
+that produces output in PCL5 format suitable for an HP LaserJet 4
+printer.
+.
+.
+.LP
+There is an additional drawing command available:
+.
+.TP
+.BI \eD'R\  dh\ dv '
+Draw a rule (solid black rectangle), with one corner at the current
+position, and the diagonally opposite corner at the current position
+.RI +( dh , dv ).
+.
+Afterwards the current position will be at the opposite corner.
+.
+This generates a PCL fill rectangle command, and so will work on
+printers that do not support HPGL/2 unlike the other
+.B \eD
+commands.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.BI \-c " num-copies"
+Print
+.I num-copies
+copies of each page.
+.
+.
+.TP
+.B \-l
+Print the document with a landscape orientation.
+.
+.
+.TP
+.B \-d\c
+.RI " [" n ]
+Use duplex mode
+.IR n :
+1\ is long-side binding; 2\ is short-side binding;
+default is\ 1.
+.
+.
+.TP
+.BI \-p " paper-size"
+Set the paper size to
+.IR paper-size ,
+which must be one of
+letter, legal, executive, a4, com10, monarch, c5, b5, dl.
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Print the version number.
+.
+.
+.TP
+.BI \-w " line-width"
+Set the default line thickness to
+.I line-width
+thousandths of an em.
+.
+If this option isn't specified, the line thickness defaults to
+0.04\~em.
+.
+.
+.TP
+.BI \-F " font-directory"
+Prepend directory
+.IR font-directory /dev name
+to the search path for font and device description files;
+.I name
+is the name of the device, usually
+.BR lj4 .
+.
+.
+.LP
+The following four commands are available additionally in the
+font description files:
+.
+.
+.TP
+.BI pclweight \ N
+The integer value
+.I N
+must be in the range \-7 to +7; default is\~0.
+.
+.
+.TP
+.BI pclstyle \ N
+The integer value
+.I N
+must be in the range 0 to 32767; default is\~0.
+.
+.
+.TP
+.BI pclproportional \ N
+A boolean flag which can be either 0 or\~1; default is\~0.
+.
+.
+.TP
+.BI pcltypeface \ N
+The integer value
+.I N
+must be in the range 0 to 65535; default is\~0.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROFF_FONT_PATH
+A list of directories in which to search for the
+.IR dev name
+directory in addition to the default ones.
+.
+See
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_font (@MAN5EXT@)
+for more details.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @FONTDIR@/devlj4/DESC
+Device description file.
+.
+.TP
+.IR @FONTDIR@/devlj4/ F
+Font description file for font
+.IR F .
+.
+.TP
+.I @MACRODIR@/lj4.tmac
+Macros for use with
+.BR grolj4 .
+.
+.
+.SH BUGS
+Small dots.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR lj4_font (@MAN5EXT@),
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR groff_out (@MAN5EXT@),
+.BR groff_font (@MAN5EXT@),
+.BR groff_char (@MAN7EXT@)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/devices/grolj4/grolj4.am b/src/devices/grolj4/grolj4.am
new file mode 100644 (file)
index 0000000..b4ab70b
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += grolj4
+grolj4_SOURCES = src/devices/grolj4/lj4.cpp
+grolj4_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+man1_MANS += src/devices/grolj4/grolj4.1
+man5_MANS += src/devices/grolj4/lj4_font.5
+EXTRA_DIST += \
+  src/devices/grolj4/grolj4.1.man \
+  src/devices/grolj4/lj4_font.5.man
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/src/devices/grolj4/grolj4.man b/src/devices/grolj4/grolj4.man
deleted file mode 100644 (file)
index bddcbb0..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-.\" -*- nroff -*-
-.TH GROLJ4 @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grolj4 \- groff driver for HP Laserjet 4 family
-.
-.
-.\" license
-.de co
-Copyright \[co] 1994-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-. ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-. el .TP "\\$1"
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fBgrolj4 'u
-.ti \niu
-.B grolj4
-.
-.de OP
-.  ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.  el .RB "[\ " "\\$1" "\ ]"
-..
-.
-.OP \-lv
-.OP \-d \fR[\fPn\fR]\fP
-.OP \-c n
-.OP \-p paper_size
-.OP \-w n
-.OP \-F dir
-.RI "[\ " files\|.\|.\|. "\ ]"
-.br
-.ad \na
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B grolj4
-is a driver for
-.B groff
-that produces output in PCL5 format suitable for an HP Laserjet 4
-printer.
-.
-.
-.LP
-There is an additional drawing command available:
-.
-.TP
-.BI \eD'R\  dh\ dv '
-Draw a rule (solid black rectangle), with one corner at the current
-position, and the diagonally opposite corner at the current position
-.RI +( dh , dv ).
-.
-Afterwards the current position will be at the opposite corner.
-.
-This generates a PCL fill rectangle command, and so will work on
-printers that do not support HPGL/2 unlike the other
-.B \eD
-commands.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.TP
-.BI \-c n
-Print
-.I n
-copies of each page.
-.
-.TP
-.B \-l
-Print the document with a landscape orientation.
-.
-.TP
-.BI "\-d [" n ]
-Use duplex mode
-.IR n :
-1\ is long-side binding; 2\ is short-side binding;
-default is\ 1.
-.
-.TP
-.BI \-p size
-Set the paper size to
-.IR size ,
-which must be one of
-letter, legal, executive, a4, com10, monarch, c5, b5, dl.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.BI \-w n
-Set the default line thickness to
-.I n
-thousandths of an em.
-.
-If this option isn\[aq]t specified, the line thickness defaults to
-0.04\~em.
-.
-.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for font and device description files;
-.I name
-is the name of the device, usually
-.BR lj4 .
-.
-.
-.LP
-The following four commands are available additionally in the
-font description files:
-.
-.TP
-.BI pclweight \ N
-The integer value
-.I N
-must be in the range \-7 to +7; default is\~0.
-.
-.TP
-.BI pclstyle \ N
-The integer value
-.I N
-must be in the range 0 to 32767; default is\~0.
-.
-.TP
-.BI pclproportional \ N
-A boolean flag which can be either 0 or\~1; default is\~0.
-.
-.TP
-.BI pcltypeface \ N
-The integer value
-.I N
-must be in the range 0 to 65535; default is\~0.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.SM
-.B GROFF_FONT_PATH
-A list of directories in which to search for the
-.BI dev name
-directory in addition to the default ones.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_font (@MAN5EXT@)
-for more details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP
-.B @FONTDIR@/devlj4/DESC
-Device description file.
-.
-.TP
-.BI @FONTDIR@/devlj4/ F
-Font description file for font
-.IR F .
-.
-.TP
-.B @MACRODIR@/lj4.tmac
-Macros for use with
-.BR grolj4 .
-.
-.
-.SH BUGS
-Small dots.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR lj4_font (@MAN5EXT@),
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
index 859fe2eaefe854f07d7c57d9067755ff4644c18f..41b58bd696791ff284f9cf773eefa4e4cf670609 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1994-201 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /*
 TODO
@@ -131,23 +131,23 @@ void lj4_font::handle_unknown_font_command(const char *command,
     if (strcmp(command, command_table[i].s) == 0) {
       if (arg == 0)
        fatal_with_file_and_line(filename, lineno,
-                                "`%1' command requires an argument",
+                                "'%1' command requires an argument",
                                 command);
       char *ptr;
       long n = strtol(arg, &ptr, 10);
       if (n == 0 && ptr == arg)
        fatal_with_file_and_line(filename, lineno,
-                                "`%1' command requires numeric argument",
+                                "'%1' command requires numeric argument",
                                 command);
       if (n < command_table[i].min) {
        error_with_file_and_line(filename, lineno,
-                                "argument for `%1' command must not be less than %2",
+                                "argument for '%1' command must not be less than %2",
                                 command, command_table[i].min);
        n = command_table[i].min;
       }
       else if (n > command_table[i].max) {
        error_with_file_and_line(filename, lineno,
-                                "argument for `%1' command must not be greater than %2",
+                                "argument for '%1' command must not be greater than %2",
                                 command, command_table[i].max);
        n = command_table[i].max;
       }
@@ -230,7 +230,7 @@ lj4_printer::lj4_printer(int ps)
   if (font::papersize) {
     int n = lookup_paper_size(font::papersize);
     if (n < 0)
-      error("unknown paper size `%1'", font::papersize);
+      error("unknown paper size '%1'", font::papersize);
     else
       paper_size = n;
   }
@@ -532,7 +532,7 @@ void lj4_printer::draw(int code, int *p, int np, const environment *env)
       break;
     }
   default:
-    error("unrecognised drawing command `%1'", char(code));
+    error("unrecognised drawing command '%1'", char(code));
     break;
   }
 }
@@ -640,7 +640,7 @@ int main(int argc, char **argv)
       {
        int n = lookup_paper_size(optarg);
        if (n < 0)
-         error("unknown paper size `%1'", optarg);
+         error("unknown paper size '%1'", optarg);
        else
          user_paper_size = n;
        break;
diff --git a/src/devices/grolj4/lj4_font.5.man b/src/devices/grolj4/lj4_font.5.man
new file mode 100644 (file)
index 0000000..e78168e
--- /dev/null
@@ -0,0 +1,263 @@
+.TH LJ4_FONT @MAN5EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+lj4_font \- groff fonts for use with devlj4
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2004-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+Nominally,
+all Hewlett-Packard LaserJet\~\%4-series and newer printers have the
+same internal fonts:
+45 scalable fonts and one bitmapped Lineprinter font.
+.
+The scalable fonts are available in sizes between 0.25 points and 999.75
+points,
+in 0.25-point increments;
+the Lineprinter font is available only in 8.5-point size.
+.
+.
+.LP
+The LaserJet font files included with
+.B groff
+assume that all printers since the LaserJet\~4 are identical.
+.
+There are some differences between fonts in the earlier and more recent
+printers,
+however.
+.
+The LaserJet\~4 printer used Agfa Intellifont technology for 35 of the
+internal scalable fonts;
+the remaining 10 scalable fonts were TrueType.
+.
+Beginning with the LaserJet\~\%4000-series printers introduced in 1997,
+all scalable internal fonts have been TrueType.
+.
+The number of printable glyphs differs slightly between Intellifont and
+TrueType fonts
+(generally,
+the TrueType fonts include more glyphs),
+and
+there are some minor differences in glyph metrics.
+.
+Differences among printer models are described in the
+.I "PCL\~5 Comparison Guide"
+and the
+.I "PCL\~5 Comparison Guide Addendum"
+(for printers introduced since approximately 2001).
+.
+.
+.LP
+LaserJet printers reference a glyph by a combination of a 256-glyph
+symbol set and an index within that symbol set.
+.
+Many glyphs appear in more than one symbol set;
+all combinations of symbol set and index that reference the same glyph
+are equivalent.
+.
+For each glyph,
+.BR hpftodit (@MAN1EXT@)
+searches a list of symbol sets,
+and selects the first set that contains the glyph.
+.
+The printing code generated by
+.B hpftodit
+is an integer that encodes a numerical value for the symbol set in the
+high byte(s),
+and the index in the low byte.
+.
+See
+.BR groff_font (@MAN5EXT@)
+for a complete description of the font file format;
+symbol sets are described in greater detail in the
+.IR "PCL\~5 Printer Language Technical Reference Manual" .
+.
+.
+.LP
+Two of the scalable fonts,
+Symbol and Wingdings,
+are bound to 256-glyph symbol sets;
+the remaining scalable fonts,
+as well as the Lineprinter font,
+support numerous symbol sets,
+sufficient to enable printing of more than 600 glyphs.
+.
+.
+.LP
+The metrics generated by
+.B hpftodit
+assume that the DESC file contains values of 1200 for
+.I res
+and 6350 for
+.IR unitwidth ,
+or any combination
+(e.g.,
+2400 and 3175)
+for which
+.IR res \~\[tmu]\~ unitwidth \~=\~7\|620\|000.
+.
+Although HP PCL\~5 LaserJet printers support an internal resolution of
+7200 units per inch,
+they use a 16-bit signed integer for cursor positioning;
+if
+.B devlj4
+is to support U.S.\& ledger paper (11\~in\~\[mu]\~17\~in;
+in = inch),
+the maximum usable resolution is 32\|767\~\[di]\~17,
+or 1927 units per inch,
+which rounds down to 1200 units per inch.
+.
+If the largest required paper size is less
+(e.g.,
+8.5\~in\~\[mu]\~11\~in,
+or A5),
+a greater
+.I res
+(and lesser
+.IR unitwidth )
+can be specified.
+.
+.
+.\" ====================================================================
+.SH LIMITATIONS
+.\" ====================================================================
+.
+Font metrics for Intellifont fonts were provided by Tagged Font Metric
+(TFM) files originally developed by Agfa/Compugraphic.
+.
+The TFM files provided for these fonts supported 600+ glyphs and
+contained extensive lists of kerning pairs.
+.
+.
+.LP
+To accommodate developers who had become accustomed to TFM files,
+HP also provided TFM files for the 10 TrueType fonts included in the
+LaserJet\~4.
+.
+The TFM files for TrueType fonts generally included less information
+than the Intellifont TFMs,
+supporting fewer glyphs,
+and in most cases,
+providing no kerning information.
+.
+By the time the LaserJet\~4000 printer was introduced,
+most developers had migrated to other means of obtaining font metrics,
+and support for new TFM files was very limited.
+.
+The TFM files provided for the TrueType fonts in the LaserJet\~4000
+support only the Latin 2 (ISO 8859-2) symbol set,
+and include no kerning information;
+consequently,
+they are of little value for any but the most rudimentary documents.
+.
+.
+.LP
+Because the Intellifont TFM files contain considerably more information,
+they generally are preferable to the TrueType TFM files even for use
+with the TrueType fonts in the newer printers.
+.
+The metrics for the TrueType fonts are very close,
+though not identical,
+to those for the earlier Intellifont fonts of the same names.
+.
+Although most output using the Intellifont metrics with the newer
+printers is quite acceptable,
+a few glyphs may fail to print as expected.
+.
+The differences in glyph metrics may be particularly noticeable with
+composite parentheses,
+brackets,
+and braces used by
+.BR eqn (@MAN1EXT@) .
+.
+A script,
+located in
+.IR @FONTDIR@/\:devlj4/\:generate ,
+can be used to adjust the metrics for these glyphs in the special font
+\[lq]S\[rq] for use with printers that have all TrueType fonts.
+.
+.
+.LP
+At the time HP last supported TFM files,
+only version 1.0 of the Unicode standard was available.
+.
+Consequently,
+many glyphs lacking assigned code points were assigned by HP to the
+Private Use Area (PUA).
+.
+Later versions of the Unicode standard included code points outside the
+PUA for many of these glyphs.
+.
+The HP-supplied TrueType TFM files use the PUA assignments;
+TFM files generated from more recent TrueType font files require the
+later Unicode values to access the same glyphs.
+.
+Consequently,
+two different mapping files may be required:
+one for the HP-supplied TFM files,
+and one for more recent TFM files.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @FONTDIR@/\:devlj4/\:DESC
+device description file
+.
+.
+.TP
+.IR @FONTDIR@/\:devlj4/\: F
+font description file for font
+.I F
+.
+.
+.TP
+.I @FONTDIR@/\:devlj4/\:generate
+corrects Intellifont-based height metrics for several glyphs in the
+special font for TrueType CG Times (LaserJet\~4000 and later).
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR groff (@MAN1EXT@),
+.BR hpftodit (@MAN1EXT@),
+.BR grolj4 (@MAN1EXT@),
+.BR groff_font (@MAN5EXT@)
+.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/src/devices/grolj4/lj4_font.man b/src/devices/grolj4/lj4_font.man
deleted file mode 100644 (file)
index fff7209..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-.tr ~
-.TH LJ4_FONT @MAN5EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-lj4_font \- groff fonts for use with devlj4
-.
-.
-.\" license
-.de co
-Copyright \[co] 2004-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.
-.tr ~
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-Nominally, all Hewlett-Packard LaserJet~4\(enseries and newer printers
-have the same internal fonts: 45 scalable fonts and one bitmapped
-Lineprinter font.
-.
-The scalable fonts are available in sizes between 0.25 point and
-999.75 points, in 0.25-point increments; the Lineprinter font is
-available only in 8.5-point size.
-.
-.
-.LP
-The LaserJet font files included with
-.B groff
-assume that all printers since the LaserJet~4 are identical.
-.
-There are some differences between fonts in the earlier and more
-recent printers, however.
-.
-The LaserJet~4 printer used Agfa Intellifont technology for 35 of the
-internal scalable fonts; the remaining 10 scalable fonts were
-TrueType.
-.
-Beginning with the LaserJet~4000\(enseries printers introduced in
-1997, all scalable internal fonts have been TrueType.
-.
-The number of printable glyphs differs slightly between Intellifont
-and TrueType fonts (generally, the TrueType fonts include more
-glyphs), and there are some minor differences in glyph metrics.
-.
-Differences among printer models are described in the
-.I "PCL~5 Comparison Guide"
-and the
-.I "PCL~5 Comparison Guide Addendum"
-(for printers introduced since approximately 2001).
-.
-.
-.LP
-LaserJet printers reference a glyph by a combination of a 256-glyph
-symbol set and an index within that symbol set.
-.
-Many glyphs appear in more than one symbol set; all combinations of
-symbol set and index that reference the same glyph are equivalent.
-.
-For each glyph,
-.BR hpftodit (@MAN1EXT@)
-searches a list of symbol sets, and selects the first set that
-contains the glyph.
-.
-The printing code generated by
-.BR hpftodit (@MAN1EXT@)
-is an integer that encodes a numerical value for the symbol set in the
-high byte(s), and the index in the low byte.
-.
-See
-.BR groff_font (@MAN5EXT@)
-for a complete description of the font file format; symbol sets are
-described in greater detail in the
-.IR "PCL~5 Printer Language Technical Reference Manual" .
-.
-.
-.LP
-Two of the scalable fonts, Symbol and Wingdings, are bound to
-256-glyph symbol sets; the remaining scalable fonts, as well as the
-Lineprinter font, support numerous symbol sets, sufficient to enable
-printing of more than 600 glyphs.
-.
-.
-.LP
-The metrics generated by
-.BR hpftodit (@MAN1EXT@)
-assume that the DESC file contains values of 1200 for res and 6350 for
-unitwidth (or any combination (e.g., 2400 and 3175) for which
-res~\(mu~unitwidth~=~7\|620\|000).
-.
-Although HP PCL~5 LaserJet printers support an internal resolution of
-7200 units per inch, they use a 16-bit signed integer for cursor
-positioning; if
-.B devlj4
-is to support U.S.\& ledger paper (11"~\(mu~17"), the maximum usable
-resolution is 32\|767~/~17, or 1927, units per inch, which rounds down
-to 1200 units per inch.
-.
-If the largest required paper size is less (e.g., 8.5"~\(mu~11" or
-A5), a greater resolution (and lesser unitwidth) can be specified.
-.
-.
-.\" --------------------------------------------------------------------
-.SH LIMITATIONS
-.\" --------------------------------------------------------------------
-.
-Font metrics for Intellifont fonts were provided by Tagged Font Metric
-(TFM) files originally developed by Agfa/Compugraphic.
-.
-The TFM files provided for these fonts supported 600+ glyphs and
-contained extensive lists of kern pairs.
-.
-.
-.LP
-To accommodate developers who had become accustomed to TFM files, HP also
-provided TFM files for the 10 TrueType fonts included in the LaserJet~4.
-.
-The TFM files for TrueType fonts generally included less information
-than the Intellifont TFMs, supporting fewer glyphs, and in most cases,
-providing no kerning information.
-.
-By the time the LaserJet~4000 printer was introduced, most
-developers had migrated to other means of obtaining font metrics,
-and support for new TFM files was very limited.
-.
-The TFM files provided for the TrueType fonts in the LaserJet~4000
-support only the Latin 2 (ISO 8859-2) symbol set, and include no kerning
-information; consequently, they are of little value for any but the most
-rudimentary documents.
-.
-.
-.LP
-Because the Intellifont TFM files contain considerably more
-information, they generally are preferable to the TrueType TFM files
-even for use with the TrueType fonts in the newer printers.
-.
-The metrics for the TrueType fonts are very close, though not identical,
-to those for the earlier Intellifont fonts of the same names.
-.
-Although most output using the Intellifont metrics with the newer
-printers is quite acceptable, a few glyphs may fail to print as
-expected.
-.
-The differences in glyph metrics may be particularly noticeable with
-composite parentheses, brackets, and braces used by
-.BR eqn (@MAN1EXT@) .
-.
-A script, located in
-.BR @FONTDIR@/devlj4/generate ,
-can be used to adjust the metrics for these glyphs in the special font S
-for use with printers that have all TrueType fonts.
-.
-.
-.LP
-At the time HP last supported TFM files, only Version 1 of the Unicode
-standard was available.
-.
-Consequently, many glyphs lacking assigned code points were assigned by
-HP to the Private Use Area (PUA).
-.
-Later versions of the Unicode standard included code points outside the
-PUA for many of these glyphs.
-.
-The HP-supplied TrueType TFM files use the PUA assignments;
-TFM files generated from more recent TrueType font files require the
-later Unicode values to access the same glyphs.
-.
-Consequently, two different mapping files may be required: one for the
-HP-supplied TFM files, and one for more recent TFM files.
-.
-.
-.\" --------------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------------
-.
-.Tp \w'\fB@FONTDIR@/devlj4/DESC'u+2n
-.B @FONTDIR@/devlj4/DESC
-Device description file.
-.TP
-.BI @FONTDIR@/devlj4/ F
-Font description file for font
-.IR F .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.ad 0
-.BR groff (@MAN1EXT@),
-.BR groff_diff (@MAN1EXT@),
-.BR hpftodit (@MAN1EXT@),
-.BR grolj4 (@MAN1EXT@),
-.BR groff_font (@MAN5EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/src/devices/gropdf/Makefile.sub b/src/devices/gropdf/Makefile.sub
deleted file mode 100644 (file)
index d3c868d..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-# Makefile.sub for `gropdf'
-#
-# File position: <groff-source>/src/devices/gropbf/Makefile.sub
-#
-# Copyright (C) 2011-2014  Free Software Foundation, Inc.
-#      Written by Deri James <deri@chuzzlewit.demon.co.uk>
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-########################################################################
-
-MAN1=\
-  gropdf.n \
-  pdfmom.n
-
-CMDFILES=\
-  gropdf \
-  pdfmom
-
-MOSTLYCLEANADD=\
-  gropdf \
-  pdfmom \
-  $(MAN1)
-
-RM=rm -f
-
-all: gropdf pdfmom
-
-
-gropdf: gropdf.pl $(SH_DEPS_SED_SCRIPT)
-       $(RM) $@
-       sed -f $(SH_DEPS_SED_SCRIPT) \
-           -e "s|@VERSION@|$(version)$(revision)|" \
-           -e "s|@PERL@|$(PERL)|" \
-           -e "s|@GROFF_FONT_DIR@|$(fontpath)|" \
-           -e "s|@RT_SEP@|$(RT_SEP)|" $(srcdir)/gropdf.pl >$@
-       chmod +x $@
-
-pdfmom: pdfmom.pl $(SH_DEPS_SED_SCRIPT)
-       $(RM) $@
-       sed -f $(SH_DEPS_SED_SCRIPT) \
-           -e "s|@VERSION@|$(version)$(revision)|" \
-           -e "s|@PERL@|$(PERL)|" $(srcdir)/pdfmom.pl >$@
-       chmod +x $@
-
-install_data:
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       for f in $(CMDFILES); do \
-         $(RM) $(DESTDIR)$(bindir)/$$f; \
-         $(INSTALL_SCRIPT) $$f $(DESTDIR)$(bindir)/$$f; \
-       done
-
-uninstall_sub:
-       -for f in $(CMDFILES); do $(RM) $(DESTDIR)$(bindir)/$$f; done
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/devices/gropdf/gropdf.1.man b/src/devices/gropdf/gropdf.1.man
new file mode 100644 (file)
index 0000000..8b6e959
--- /dev/null
@@ -0,0 +1,1356 @@
+.TH GROPDF @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+gropdf \- PDF driver for groff
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr gropdf_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2011-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.de FT
+.  if '\\*(.T'ps' .ft \\$1
+.  if '\\*(.T'pdf' .ft \\$1
+..
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY gropdf
+.OP \-dels
+.OP \-F dir
+.OP \-I dir
+.OP \-p paper-size
+\#.OP \-w n
+.RB [ \-u
+.RI [ cmapfile ]]
+.OP \-y foundry
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.SY gropdf
+.B \-v
+.SY gropdf
+.B \-\-version
+.YS
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B gropdf
+translates the output of GNU
+.B troff
+to PDF.
+.
+Normally
+.B gropdf
+should be invoked by using the groff command
+with a
+.B \-Tpdf
+option.
+.
+If no files are given,
+.B gropdf
+reads the standard input.
+.
+A filename of
+.B \-
+also causes
+.B gropdf
+to read the standard input.
+.
+PDF output is written to the standard output.
+.
+When
+.B gropdf
+is run by
+.B groff
+options can be passed to
+.B gropdf
+using
+.BR groff 's
+.B \-P
+option.
+.
+.
+.LP
+See section \[lq]Font Installation\[rq] below for a guide how to install
+fonts for
+.BR gropdf .
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.B \-d
+Include debug information as comments within the PDF.
+.
+Also produces an uncompressed PDF.
+.
+.
+.TP
+.B \-e
+Forces
+.B gropdf
+to embed
+.I all
+fonts (even the 14 base PDF fonts).
+.
+.
+.TP
+.BI \-F " dir"
+Prepend directory
+.IR dir /dev name
+to the search path for font, and device description files;
+.I name
+is the name of the device, usually
+.BR pdf .
+.
+.TP
+.BI \-I " dir"
+This option may be used to add a directory to the search path for
+files named in
+.B \[rs]X'pdf: pdfpic'
+escape.
+.
+The current directory is always searched first.
+.
+This option may be specified more than once; the directories are then
+searched in the order specified.
+.
+.IP
+No directory search is performed for files with an absolute file name.
+.
+.TP
+.B \-l
+Orient the document in landscape format.
+.
+.TP
+.BI \-p " paper-size"
+Set physical dimension of output medium.
+.
+This overrides the
+.BR papersize ,
+.BR paperlength ,
+and
+.B paperwidth
+commands in the
+.I DESC
+file; it accepts the same arguments as the
+.B papersize
+command.
+.
+See
+.BR groff_font (@MAN5EXT@)
+for details.
+.
+.
+.TP
+.B \-s
+Append a comment line to end of PDF showing statistics,
+i.e.\& number of pages in document.
+.
+Ghostscript's
+.B ps2pdf
+complains about this line if it is included, but works anyway.
+.
+.
+.TP
+.B \-u\c
+.RI " [" cmapfile ]
+.B Gropdf
+normally includes a ToUnicode CMap with any font created using
+.I text.enc
+as the encoding file,
+this makes it easier to search for words which contain ligatures.
+.
+You can include your own CMap by specifying a
+.I cmapfile
+or have no CMap at all by omitting the argument.
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Print the version number and exit.
+.
+.
+.\" .TP
+.\" .BI \-w n
+.\" Lines should be drawn using a thickness of
+.\" .IR n \~\c
+.\" thousandths of an em.
+.\" .
+.\" If this option is not given, the line thickness defaults to 0.04\~em.
+.\" .
+.\" .
+.TP
+.BI \-y " foundry"
+Set the foundry to use for selecting fonts of the same name.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+The input to
+.B gropdf
+must be in the format output by
+.BR @g@troff (@MAN1EXT@).
+.
+This is described in
+.BR groff_out (@MAN5EXT@).
+.
+.
+.LP
+In addition, the device and font description files for the device used
+must meet certain requirements:
+.
+The resolution must be an integer multiple of\~72 times the
+.BR sizescale .
+.
+The
+.B pdf
+device uses a resolution of 72000 and a sizescale of 1000.
+.
+.
+.LP
+The device description file must contain a valid paper size; see
+.BR groff_font (@MAN5EXT@)
+for more information.
+.
+.B gropdf
+uses the same Type\~1 Adobe PostScript fonts as the
+.B grops
+device driver.
+.
+Although the PDF Standard allows the use of other font types (like
+TrueType) this implementation only accepts the Type\~1 PostScript
+font.
+.
+Fewer Type\~1 fonts are supported natively in PDF documents than the
+standard 35 fonts supported by
+.B grops
+and all PostScript printers, but all the fonts are available since any
+which aren't supported natively are automatically embedded in the
+PDF.
+.
+.
+.LP
+.B gropdf
+supports the concept of foundries, that is different versions of basically
+the same font.
+.
+During install a
+.I Foundry
+file controls where fonts are found and builds
+.B groff
+fonts from the files it discovers on your system.
+.
+.
+.LP
+Each font description file must contain a command
+.
+.IP
+.BI internalname\  psname
+.
+.LP
+which says that the PostScript name of the font is
+.IR psname .
+.
+Lines starting with
+.B #
+and blank lines are ignored.
+.
+The code for each character given in the font file must correspond
+to the code in the default encoding for the font.
+.
+This code can be used with the
+.B \[rs]N
+escape sequence in
+.B troff
+to select the character,
+even if the character does not have a groff name.
+.
+Every character in the font file must exist in the PostScript font, and
+the widths given in the font file must match the widths used
+in the PostScript font.
+.
+.
+.LP
+Note that
+.B gropdf
+is currently only able to display the first 256 glyphs in any font.
+This restriction will be lifted in a later version.
+.
+.
+.\" .LP
+.\" Note that
+.\" .B grops
+.\" is able to display all glyphs in a PostScript font, not only 256.
+.\" .I enc_file
+.\" (or the default encoding if no encoding file specified) just defines the
+.\" order of glyphs for the first 256 characters; all other glyphs are
+.\" accessed with additional encoding vectors which
+.\" .B grops
+.\" produces on the fly.
+.
+.
+.LP
+.B gropdf
+can automatically include the downloadable fonts necessary
+to print the document.
+.
+Fonts may be in PFA or PFB format.
+.LP
+.
+Any downloadable fonts which should, when required, be included by
+.B gropdf
+must be listed in the file
+.IR @FONTDIR@/devpdf/download ;
+this should consist of lines of the form
+.
+.IP
+.I
+foundry font filename
+.
+.LP
+where
+.I foundry
+is the foundry name or blank for the default foundry.
+.
+.I font
+is the PostScript name of the font,
+and
+.I filename
+is the name of the file containing the font;
+lines beginning with
+.B #
+and blank lines are ignored;
+fields must be separated by tabs
+(spaces are
+.B not
+allowed);
+.I filename
+is searched for using the same mechanism that is used
+for groff font metric files.
+.
+The
+.I download
+file itself is also searched for using this mechanism;
+currently, only the first found file in the font path is used.
+.
+Foundry names are usually a single character (such as \[oq]U\[cq] for
+the URW Foundry) or blank for the default foundry.
+.
+This default uses the same fonts as
+.B ghostscript
+uses when it embeds fonts in a PDF file.
+.
+.
+.LP
+In the default setup there are styles called
+.BR R ,
+.BR I ,
+.BR B ,
+and
+.B BI
+mounted at font positions 1 to\~4.
+.
+The fonts are grouped into families
+.BR A ,
+.BR BM ,
+.BR C ,
+.BR H ,
+.BR HN ,
+.BR N ,
+.BR P ,
+and\~\c
+.B T
+having members in each of these styles:
+.
+.RS
+.TP
+.B AR
+.FT AR
+AvantGarde-Book
+.FT
+.
+.TQ
+.B AI
+.FT AI
+AvantGarde-BookOblique
+.FT
+.
+.TQ
+.B AB
+.FT AB
+AvantGarde-Demi
+.FT
+.
+.TQ
+.B ABI
+.FT ABI
+AvantGarde-DemiOblique
+.FT
+.
+.TQ
+.B BMR
+.FT BMR
+Bookman-Light
+.FT
+.
+.TQ
+.B BMI
+.FT BMI
+Bookman-LightItalic
+.FT
+.
+.TQ
+.B BMB
+.FT BMB
+Bookman-Demi
+.FT
+.
+.TQ
+.B BMBI
+.FT BMBI
+Bookman-DemiItalic
+.FT
+.
+.TQ
+.B CR
+.FT CR
+Courier
+.FT
+.
+.TQ
+.B CI
+.FT CI
+Courier-Oblique
+.FT
+.
+.TQ
+.B CB
+.FT CB
+Courier-Bold
+.FT
+.
+.TQ
+.B CBI
+.FT CBI
+Courier-BoldOblique
+.FT
+.
+.TQ
+.B HR
+.FT HR
+Helvetica
+.FT
+.
+.TQ
+.B HI
+.FT HI
+Helvetica-Oblique
+.FT
+.
+.TQ
+.B HB
+.FT HB
+Helvetica-Bold
+.FT
+.
+.TQ
+.B HBI
+.FT HBI
+Helvetica-BoldOblique
+.FT
+.
+.TQ
+.B HNR
+.FT HNR
+Helvetica-Narrow
+.FT
+.
+.TQ
+.B HNI
+.FT HNI
+Helvetica-Narrow-Oblique
+.FT
+.
+.TQ
+.B HNB
+.FT HNB
+Helvetica-Narrow-Bold
+.FT
+.
+.TQ
+.B HNBI
+.FT HNBI
+Helvetica-Narrow-BoldOblique
+.FT
+.
+.TQ
+.B NR
+.FT NR
+NewCenturySchlbk-Roman
+.FT
+.
+.TQ
+.B NI
+.FT NI
+NewCenturySchlbk-Italic
+.FT
+.
+.TQ
+.B NB
+.FT NB
+NewCenturySchlbk-Bold
+.FT
+.
+.TQ
+.B NBI
+.FT NBI
+NewCenturySchlbk-BoldItalic
+.FT
+.
+.TQ
+.B PR
+.FT PR
+Palatino-Roman
+.FT
+.
+.TQ
+.B PI
+.FT PI
+Palatino-Italic
+.FT
+.
+.TQ
+.B PB
+.FT PB
+Palatino-Bold
+.FT
+.
+.TQ
+.B PBI
+.FT PBI
+Palatino-BoldItalic
+.FT
+.
+.TQ
+.B TR
+.FT TR
+Times-Roman
+.FT
+.
+.TQ
+.B TI
+.FT TI
+Times-Italic
+.FT
+.
+.TQ
+.B TB
+.FT TB
+Times-Bold
+.FT
+.
+.TQ
+.B TBI
+.FT TBI
+Times-BoldItalic
+.FT
+.RE
+.
+.
+.LP
+There is also the following font which is not a member of a family:
+.
+.RS
+.TP
+.B ZCMI
+.FT ZCMI
+ZapfChancery-MediumItalic
+.FT
+.RE
+.
+.
+.LP
+There are also some special fonts called
+.B S
+for the PS Symbol font.
+.
+The lower case greek characters are automatically slanted (to match
+the SymbolSlanted font (SS) available to PostScript).
+.
+Zapf Dingbats is available as
+.BR ZD ,
+the "hand pointing left" glyph (\[rs][lh]) is available since it has
+been defined using the \[rs]X'pdf: xrev' extension which reverses the
+direction of letters within words.
+.
+.
+.LP
+The default color for
+.B \[rs]m
+and
+.B \[rs]M
+is black.
+.
+.LP
+.B gropdf
+understands some of the X\~commands produced using the
+.B \[rs]X
+escape sequences supported by
+.B grops.
+Specifically, the following is supported.
+.
+.TP
+.B "\[rs]X'ps: invis'"
+Suppress output.
+.
+.TP
+.B "\[rs]X'ps: endinvis'"
+Stop suppressing output.
+.
+.TP
+.B "\[rs]X'ps: exec gsave currentpoint 2 copy translate \fIn\fP rotate neg exch neg exch translate'"
+where
+.I n
+is the angle of rotation.
+This is to support the
+.I align
+command in
+.BR gpic .
+.
+.TP
+.B "\[rs]X'ps: exec grestore'"
+Again used by
+.B gpic
+to restore after rotation.
+.
+.TP
+.BI "\[rs]X'ps: exec " "n " "setlinejoin'"
+where
+.I n
+can be one of the following values.
+.IP
+0 = Miter join
+.br
+1 = Round join
+.br
+2 = Bevel join
+.
+.TP
+.BI "\[rs]X'ps: exec " "n " "setlinecap'"
+where
+.I n
+can be one of the following values.
+.IP
+0 = Butt cap
+.br
+1 = Round cap, and
+.br
+2 = Projecting square cap
+.
+.
+.LP
+.TP
+.B "\[rs]X'ps: ... pdfmark'"
+All the
+.I pdfmark
+macros installed by using
+.I \-m pdfmark
+or
+.I \-m mspdf
+(see documentation in
+.IR pdfmark.pdf ).
+.
+A subset of these macros are installed automatically when you use
+.B \-Tpdf
+so you should not need to use \[oq]\-m pdfmark\[cq] for using most of
+the PDF functionality.
+.
+.LP
+.B gropdf
+also supports a subset of the commands introduced in present.tmac.
+Specifically it supports:-
+.IP
+PAUSE
+.br
+BLOCKS
+.br
+BLOCKE
+.
+.LP
+Which allows you to create presentation type PDFs.
+Many of the other
+commands are already available in other macro packages.
+.LP
+These commands are implemented with
+.B groff
+X commands:-
+.LP
+.TP
+.B "\[rs]X'ps: exec %%%%PAUSE"
+The section before this is treated as a block and is introduced using the
+current BLOCK transition setting (see \[oq]pdf: transition\[cq] below).
+This command
+can be introduced using the macro
+.BR .pdfpause .
+.TP
+.B "\[rs]X'ps: exec %%%%BEGINONCE"
+Any text following this command (up to %%%%ENDONCE) is shown only once,
+the next %%%%PAUSE will remove it.
+If producing a non presentation pdf, i.e.\&
+ignoring the pauses, see
+.I \%GROPDF_NOSLIDE
+below, this text is ignored.
+.LP
+.TP
+.B "\[rs]X'ps: exec %%%%ENDONCE"
+This terminates the block defined by %%%%BEGINONCE.
+This pair of commands
+is what implements the .BLOCKS Once/.BLOCKE commands in present.tmac.
+.LP
+The
+.B mom
+macro set already has integration with these extensions so you can build
+slides with
+.BR mom .
+.LP
+If you use present.tmac with
+.B gropdf
+there is no need to run the program
+.BR presentps (@MAN1EXT@)
+since the output will already be a presentation pdf.
+.LP
+All other
+.B ps:
+tags are silently ignored.
+.
+.
+.LP
+One
+.B \[rs]X
+special used by the DVI driver is also recognised:
+.
+.TP
+.BI \[rs]X'papersize= paper-size '
+where the
+.I paper-size
+parameter is the same as the
+.B papersize
+command.
+.
+See
+.BR groff_font (@MAN5EXT@)
+for details.
+.
+This means that you can alter the page size at will within the PDF file
+being created by
+.BR gropdf .
+.
+If you do want to change the paper size, it must be done before you start
+creating the page.
+.
+.LP
+In addition,
+.B gropdf
+supports its own suite of
+.B pdf:
+tags.
+.
+The following tags are supported:
+.
+.TP
+.BI "\[rs]X'pdf: pdfpic " "file alignment width height line-length" '
+Place an image of the specified
+.I width
+containing the PDF drawing from file
+.I file
+of desired
+.I width
+and
+.I height
+(if
+.I height
+is missing or zero then it is scaled proportionally).
+.
+If
+.I alignment
+is
+.B \-L
+the drawing is left aligned.
+.
+If it is
+.B \-C
+or
+.B \-R
+a
+.I linelength
+greater than the width of the drawing is required as well.
+.
+If
+.I width
+is specified as zero then the width is scaled in proportion to the height.
+.
+.\" .IP
+.\" See
+.\" .BR groff_tmac (@MAN7EXT@)
+.\" for a description of the
+.\" .B PSPIC
+.\" macro which provides a convenient high-level interface for inclusion of
+.\" PostScript graphics.
+.
+.TP
+.B \[rs]X'pdf: xrev'
+This toggles a flag which reverses the direction of printing
+.IR "letter by letter" ,
+i.e., each separate letter is reversed, not the entire word.
+.
+This is useful for reversing the direction of glyphs in the Dingbats font.
+.
+To return to normal printing repeat the command again.
+.
+.TP
+.BI "\[rs]X'pdf: markstart " "/ANN definition" '
+The macros which support PDF Bookmarks use this call internally to
+start the definition of bookmark hotspot (user will have called
+\[oq].pdfhref\~L\[cq] with the text which will become the \[oq]hot
+spot\[cq] region).
+.
+Normally this is never used except from within the pdfmark macros.
+.
+.TP
+.B \[rs]X'pdf: markend'
+The macros which support PDF Bookmarks use this call internally to
+stop the definition of bookmark hotspot (user will have called
+\[oq].pdfhref\~L\[cq] with the text which will become the \[oq]hot
+spot\[cq] region).
+.
+Normally this is never used except from within the pdfmark macros.
+.
+.TP
+.B \[rs]X'pdf: marksuspend'
+.TQ
+.B \[rs]X'pdf: markrestart'
+If you are using page traps to produce headings, footings, etc., you
+need to use these in case a \[oq]hot spot\[cq] crosses a page
+boundary, otherwise any text output by the heading or footing macro
+will be marked as part of the \[oq]hot spot\[cq].
+.
+To stop this happening just place \[oq].pdfmarksuspend\[cq] and
+\[oq].pdfmarkrestart\[cq] at the start and end of the page trap macro,
+respectively.
+.
+(These are just convenience macros which emit the \[rs]X code.
+.
+These macros must only be used within page traps.)
+.
+.TP
+.BR "\[rs]X'pdf: transition'" "feature mode duration dimension motion direction scale bool"
+where
+.IP
+.I feature
+can be either SLIDE or BLOCK.
+When it is SLIDE the transition is used
+when a new slide is introduced to the screen, if BLOCK then this transition
+is used for the individual blocks which make up the slide.
+.br
+.I mode
+is the transition type between slides:-
+.RS
+.IP
+.B Split
+- Two lines sweep across the screen, revealing the new page.
+The lines
+may be either horizontal or vertical and may move inward from the
+edges of the page or outward from the center, as specified by the
+.I dimension
+and
+.I motion
+entries, respectively.
+.br
+.B Blinds
+- Multiple lines, evenly spaced across the screen, synchronously
+sweep in the same direction to reveal the new page.
+The lines may be
+either horizontal or vertical, as specified by the
+.I dimension
+ entry.
+Horizontal
+lines move downward; vertical lines move to the right.
+.br
+.B Box
+- A rectangular box sweeps inward from the edges of the page or
+outward from the center, as specified by the
+.I motion
+entry, revealing the new page.
+.br
+.B Wipe
+- A single line sweeps across the screen from one edge to the other in
+the direction specified by the
+.I direction
+entry, revealing the new page.
+.br
+.B Dissolve
+- The old page dissolves gradually to reveal the new one.
+.br
+.B Glitter
+- Similar to Dissolve, except that the effect sweeps across the page in a
+wide band moving from one side of the screen to the other in the
+direction specified by the
+.I direction
+entry.
+.br
+.B R
+- The new page simply replaces the old one with no special transition
+effect; the
+.I direction
+entry shall be ignored.
+.br
+.B Fly
+- (PDF 1.5) Changes are flown out or in (as specified by
+.IR motion ),
+in the
+direction specified by
+.IR direction ,
+to or from a location that is offscreen except
+when
+.I direction
+is
+.BR None .
+.br
+.B Push
+- (PDF 1.5) The old page slides off the screen while the new page
+slides in, pushing the old page out in the direction specified by
+.IR direction .
+.br
+.B Cover
+- (PDF 1.5) The new page slides on to the screen in the direction
+specified by
+.IR direction ,
+covering the old page.
+.br
+.B Uncover
+- (PDF 1.5) The old page slides off the screen in the direction
+specified by
+.IR direction ,
+uncovering the new page in the direction
+specified by
+.IR direction .
+.br
+.B Fade
+- (PDF 1.5) The new page gradually becomes visible through the
+old one.
+.LP
+.RE
+.IP
+.I duration
+is the length of the transition in seconds (default 1).
+.LP
+.IP
+.I dimension
+(Optional;
+.BR Split " and " Blinds
+transition styles only) The dimension in which the
+specified transition effect shall occur:
+.B H
+Horizontal, or
+.B V
+Vertical.
+.LP
+.IP
+.I motion
+(Optional;
+.BR Split ,
+.BR Box " and " Fly
+transition styles only) The direction of motion for
+the specified transition effect:
+.B I
+Inward from the edges of the page, or
+.B O
+Outward from the center of the page.
+.LP
+.IP
+.I direction
+(Optional;
+.BR Wipe ,
+.BR Glitter ,
+.BR Fly ,
+.BR Cover ,
+.BR Uncover " and " Push
+transition styles only)
+The direction in which the specified transition effect shall moves, expressed in
+degrees counterclockwise starting from a left-to-right direction.
+If the value is a number, it shall be one of:
+.B 0
+= Left to right,
+.B 90
+= Bottom to top (Wipe only),
+.B 180
+= Right to left (Wipe only),
+.B 270
+= Top to bottom,
+.B 315
+= Top-left to bottom-right (Glitter only)
+The value can be
+.BR None ,
+which is relevant only for the
+.B Fly
+transition when the value of
+.I scale
+is not 1.0.
+.LP
+.IP
+.I scale
+(Optional; PDF 1.5;
+.B Fly
+transition style only) The starting or ending scale at
+which the changes shall be drawn.
+If
+.I motion
+specifies an inward transition, the scale
+of the changes drawn shall progress from
+.I scale
+to 1.0 over the course of the
+transition.
+If
+.I motion
+specifies an outward transition, the scale of the changes drawn
+shall progress from 1.0 to
+.I scale
+over the course of the transition
+.LP
+.IP
+.I bool
+(Optional; PDF 1.5;
+.B Fly
+transition style only) If
+.BR true ,
+the area that shall be flown
+in is rectangular and opaque.
+.LP
+.IP
+This command can be used by calling the macro
+.B .pdftransition
+using the parameters described above.
+Any of the parameters may be
+replaced with a "." which signifies the parameter retains its
+previous value, also any trailing missing parameters are ignored.
+.LP
+.IP
+.B Note:
+not all PDF Readers support any or all these transitions.
+.LP
+.
+.\" ====================================================================
+.SS Importing graphics
+.\" ====================================================================
+.
+.B gropdf
+only supports importing other PDF files as graphics.
+.
+But that PDF file may contain any of the graphic formats supported by
+the PDF standard (such as JPEG, PNG, GIF, etc.).
+.
+So any application which outputs PDF can be used as an embedded file
+in
+.BR gropdf .
+.
+The PDF file you wish to insert must be a single page and the drawing
+must just fit inside the media size of the PDF file.
+.
+So, in
+.BR inkscape (1)
+or
+.BR gimp (1)
+(for example) make sure the canvas size just fits the image.
+.
+.
+.LP
+The PDF parser used in
+.B gropdf
+has not been rigorously tested with all possible applications which
+produce PDFs.
+.
+If you find a single page PDF which fails to import properly, it is
+worth running it through the
+.
+.BR pdftk (1)
+program by issuing the command:
+.
+.
+.RS
+.LP
+.B pdftk
+.I oldfile.pdf
+.B output
+.I newfile.pdf
+.RE
+.
+.
+.LP
+You may find that
+.I newfile.pdf
+will now load successfully.
+.
+.
+.\" ====================================================================
+.SS TrueType and other font formats
+.\" ====================================================================
+.
+.B gropdf
+does not support any other fonts except Adobe Type 1 (PFA or PFB).
+.
+.
+.\" ====================================================================
+.SH FONT INSTALLATION
+.\" ====================================================================
+.
+This section gives a summary of the above explanations; it can serve
+as a step-by-step font installation guide for
+.BR gropdf .
+.
+.ds BU \[bu]\ \ \"
+.de LI
+.IP "" 4
+\h'-\w'\*[BU]'u'\*[BU]\c
+..
+.LI
+Convert your font to something groff understands.
+.
+This is either a PostScript Type\~1 font in either PFA or PFB,
+together with an AFM file.
+.
+.IP
+The very first line in a PFA/PFB file contains this:
+.
+.RS
+.IP
+.B %!PS\-AdobeFont\-1.0:
+.RE
+.
+.IP
+A PFB file has this also in the first line, but the string is
+preceded with some binary bytes.
+.
+.LI
+Convert the AFM file to a groff font description file with the
+.BR \%afmtodit (@MAN1EXT@)
+program.
+.
+An example call is
+.
+.RS
+.IP
+afmtodit Foo\-Bar\-Bold.afm map/textmap FBB
+.RE
+.
+.IP
+which converts the metric file \[oq]Foo\-Bar\-Bold.afm\[cq] to the groff
+font \[oq]FBB\[cq].
+.
+If you have a font family which comes with normal, bold, italic, and
+bold italic faces, it is recommended to use the letters
+.BR R ,
+.BR B ,
+.BR I ,
+and
+.BR BI ,
+respectively, as postfixes in the groff font names to make groff's
+\[oq].fam\[cq] request work.
+.
+An example is groff's built-in Times-Roman font: The font family
+name is
+.BR T ,
+and the groff font names are
+.BR TR ,
+.BR TB ,
+.BR TI ,
+and
+.BR TBI .
+.
+.LI
+Install both the groff font description files and the fonts in a
+\[oq]devpdf\[cq] subdirectory of the font path which groff finds.
+.
+See section \[lq]Environment\[rq] in
+.BR @g@troff (@MAN1EXT@)
+for the actual value of the font path.
+.
+Note that groff doesn't use the AFM files (but it is a good idea to
+store them anyway).
+.
+.LI
+Register all fonts which must be downloaded to the printer in the
+.I devpdf/download
+file.
+.
+Only the first occurrence of this file in the font path is read.
+.
+This means that you should copy the default
+.I download
+file to the first directory in your font path and add your fonts there.
+.
+To continue the above example we assume that the PS font name for
+Foo\-Bar\-Bold.pfa is \[oq]XY\-Foo\-Bar\-Bold\[cq] (the PS font name is
+stored in the
+.B internalname
+field in the
+.I FBB
+file) and belongs to foundry \[oq]F\[cq]
+thus the following line should be added to
+.IR download :
+.
+.RS
+.IP
+.B F XY\-Foo\-Bar\-Bold Foo\-Bar\-Bold.pfa
+.
+.
+.LP
+Use a tab character to separate the fields, and the \[oq]foundry\[cq]
+field should be null for the default foundry.
+.RE
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROFF_FONT_PATH
+A list of directories in which to search for the
+.IR dev name
+directory in addition to the default ones.
+.
+If, in the
+.I download
+file,
+the font file has been specified with a full path,
+no directories are searched.
+.
+See
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_font (@MAN5EXT@)
+for more details.
+.
+.
+.TP
+.I GROPDF_NOSLIDE
+If this is set true,
+.B gropdf
+will ignore all commands which produce a presentation pdf,
+and produce a normal pdf instead.
+.TP
+.I SOURCE_DATE_EPOCH
+A timestamp (expressed as seconds since the Unix epoch) to use as the
+creation timestamp in place of the current time.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @FONTDIR@/devpdf/DESC
+Device description file.
+.
+.TP
+.IR @FONTDIR@/devpdf/ F
+Font description file for font\~\c
+.IR F .
+.
+.TP
+.IR @FONTDIR@/devpdf/ U\-F
+Font description file for font\~\c
+.I F
+(using foundry\~\c
+.I U
+rather than the default foundry).
+.
+.TP
+.I @FONTDIR@/devpdf/download
+List of downloadable fonts.
+.
+.TP
+.I @FONTDIR@/devpdf/Foundry
+A Perl script used during install to locate suitable fonts.
+.
+.TP
+.I @FONTDIR@/devpdf/enc/text.enc
+Encoding used for text fonts.
+.
+.TP
+.I @MACRODIR@/pdf.tmac
+Macros for use with
+.BR gropdf ;
+automatically loaded by
+.BR troffrc .
+.
+.\" .TP
+.\" .B @MACRODIR@/pspic.tmac
+.\" Definition of
+.\" .B PSPIC
+.\" macro,
+.\" automatically loaded by
+.\" .BR ps.tmac .
+.\" .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR \%afmtodit (@MAN1EXT@),
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR \%groff_font (@MAN5EXT@),
+.BR \%groff_out (@MAN5EXT@)
+.\" Not actually referenced in above discussion.
+.\" .BR \%pfbtops (@MAN1EXT@),
+.\" .BR \%groff_tmac (@MAN5EXT@),
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[gropdf_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/devices/gropdf/gropdf.am b/src/devices/gropdf/gropdf.am
new file mode 100644 (file)
index 0000000..f035995
--- /dev/null
@@ -0,0 +1,60 @@
+# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+#  Original Makefile.sub written by Deri James <deri@chuzzlewit.demon.co.uk>.
+#  Automake migration by Bertrand Garrigues
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+gropdf_dir = $(top_srcdir)/src/devices/gropdf
+
+bin_SCRIPTS += gropdf pdfmom
+EXTRA_DIST += \
+  src/devices/gropdf/TODO \
+  src/devices/gropdf/gropdf.pl \
+  src/devices/gropdf/pdfmom.pl \
+  src/devices/gropdf/gropdf.1.man \
+  src/devices/gropdf/pdfmom.1.man
+
+man1_MANS += \
+  src/devices/gropdf/gropdf.1 \
+  src/devices/gropdf/pdfmom.1
+
+gropdf: $(gropdf_dir)/gropdf.pl $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f $(SH_DEPS_SED_SCRIPT) \
+              -e "s|[@]VERSION[@]|$(VERSION)|" \
+              -e "s|[@]PERL[@]|$(PERL)|" \
+              -e "s|[@]GROFF_FONT_DIR[@]|$(fontpath)|" \
+              -e "s|[@]RT_SEP[@]|$(RT_SEP)|" $(gropdf_dir)/gropdf.pl \
+              >$@ \
+       && chmod +x $@
+
+pdfmom: $(gropdf_dir)/pdfmom.pl $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f $(SH_DEPS_SED_SCRIPT) \
+              -e "s|[@]VERSION[@]|$(VERSION)|" \
+              -e "s|[@]RT_SEP[@]|$(RT_SEP)|" \
+              -e "s|[@]PERL[@]|$(PERL)|" $(gropdf_dir)/pdfmom.pl \
+              >$@ \
+       && chmod +x $@
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/src/devices/gropdf/gropdf.man b/src/devices/gropdf/gropdf.man
deleted file mode 100644 (file)
index 3bbace6..0000000
+++ /dev/null
@@ -1,1108 +0,0 @@
-.\" -*- nroff -*-
-.TH GROPDF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-gropdf \- PDF driver for groff
-.
-.
-.\" license
-.de co
-Copyright \[co] 2011-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.  ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.  el .TP "\\$1"
-..
-.
-.de FT
-.  if '\\*(.T'ps' .ft \\$1
-.  if '\\*(.T'pdf' .ft \\$1
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY gropdf
-.OP \-delvs
-.OP \-F dir
-\#.OP \-I dir
-.OP \-p papersize
-\#.OP \-w n
-.OP \-y foundry
-.OP \-u [cmapfile]
-.RI [ files
-.IR .\|.\|. ]
-.YS
-.
-.
-.LP
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B gropdf
-translates the output of GNU
-.B troff
-to PDF.
-.
-Normally
-.B gropdf
-should be invoked by using the groff command
-with a
-.B \-Tpdf
-option.
-.
-If no files are given,
-.B gropdf
-reads the standard input.
-.
-A filename of
-.B \-
-also causes
-.B gropdf
-to read the standard input.
-.
-PDF output is written to the standard output.
-.
-When
-.B gropdf
-is run by
-.B groff
-options can be passed to
-.B gropdf
-using
-.BR groff \[aq]s
-.B \-P
-option.
-.
-.
-.LP
-See section
-.B FONT INSTALLATION
-below for a guide how to install fonts for
-.BR gropdf .
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.B \-d
-Include debug information as comments within the PDF.
-.
-Also produces an uncompressed PDF.
-.
-.TP
-.B \-e
-Force all fonts to be embedded in the PDF.
-.
-.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for font, and device description files;
-.I name
-is the name of the device, usually
-.BR pdf .
-.
-.\" .TP
-.\" .BI \-I dir
-.\" This option may be used to add a directory to the search path for
-.\" files on the command line and files named in
-.\" .B \[rs]X'ps: import'
-.\" and
-.\" .B \[rs]X'ps: file'
-.\" escapes.
-.\" .
-.\" The search path is initialized with the current directory.
-.\" .
-.\" This option may be specified more than once; the directories are then
-.\" searched in the order specified (but before the current directory).
-.\" .
-.\" If you want to make the current directory be read before other directories,
-.\" add
-.\" .B \-I.\&
-.\" at the appropriate place.
-.\" .
-.\" .IP
-.\" No directory search is performed for files with an absolute file name.
-.\" .
-.\" .TP
-.
-.TP
-.B \-l
-Print the document in landscape format.
-.
-.TP
-.BI \-p paper-size
-Set physical dimension of output medium.
-.
-This overrides the
-.BR papersize ,
-.BR paperlength ,
-and
-.B paperwidth
-commands in the
-.B DESC
-file; it accepts the same arguments as the
-.B papersize
-command.
-.
-See
-.B groff_font (@MAN5EXT@)
-for details.
-.
-.\" .TP
-.\" .BI \-w n
-.\" Lines should be drawn using a thickness of
-.\" .IR n \~\c
-.\" thousandths of an em.
-.\" .
-.\" If this option is not given, the line thickness defaults to 0.04\~em.
-.\" .
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.BI \-y foundry
-Set the foundry to use for selecting fonts of the same name.
-.
-.TP
-.B \-e
-Forces
-.B gropdf
-to embed ALL fonts (even the 14 base PDF fonts).
-.
-.TP
-.B \-s
-Append a comment line to end of PDF showing statistics,
-i.e.\& number of pages in document.
-.
-Ghostscript\[aq]s
-.B ps2pdf
-complains about this line if it is included, but works anyway.
-.
-.TP
-.B \-u
-.TQ
-.BI \-u cmapfilename
-.B Gropdf
-normally includes a ToUnicode CMap with any font created using
-.B text.enc
-as the encoding file,
-this makes it easier to search for words which contain ligatures.
-.
-You can include your own CMap by specifying a
-.I cmapfilename
-or have no CMap at all by omitting the argument.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-The input to
-.B gropdf
-must be in the format output by
-.BR @g@troff (@MAN1EXT@).
-.
-This is described in
-.BR groff_out (@MAN5EXT@).
-.
-.
-.LP
-In addition, the device and font description files for the device used
-must meet certain requirements:
-.
-The resolution must be an integer multiple of\~72 times the
-.BR sizescale .
-.
-The
-.B pdf
-device uses a resolution of 72000 and a sizescale of 1000.
-.
-.
-.LP
-The device description file must contain a valid paper size; see
-.BR groff_font (@MAN5EXT@)
-for more information.
-.
-.B gropdf
-uses the same Type\~1 Adobe postscript fonts as the
-.B grops
-device driver.
-.
-Although the PDF Standard allows the use of other font types (like
-TrueType) this implementation only accepts the Type\~1 postscript
-font.
-.
-Fewer Type\~1 fonts are supported natively in PDF documents than the
-standard 35 fonts supported by
-.B grops
-and all postscript printers, but all the fonts are available since any
-which aren\[aq]t supported natively are automatically embedded in the
-PDF.
-.
-.
-.LP
-.B gropdf
-supports the concept of foundries, that is different versions of basically
-the same font.
-.
-During install a
-.B Foundry
-file controls where fonts are found and builds
-.B groff
-fonts from the files it discovers on your system.
-.
-.
-.LP
-Each font description file must contain a command
-.
-.IP
-.BI internalname\  psname
-.
-.LP
-which says that the PostScript name of the font is
-.IR psname .
-.
-Lines starting with
-.B #
-and blank lines are ignored.
-.
-The code for each character given in the font file must correspond
-to the code in the default encoding for the font.
-.
-This code can be used with the
-.B \[rs]N
-escape sequence in
-.B troff
-to select the character,
-even if the character does not have a groff name.
-.
-Every character in the font file must exist in the PostScript font, and
-the widths given in the font file must match the widths used
-in the PostScript font.
-.
-.
-.LP
-Note that
-.B gropdf
-is currently only able to display the first 256 glyphs in any font.
-This restriction will be lifted in a later version.
-.
-.
-.\" .LP
-.\" Note that
-.\" .B grops
-.\" is able to display all glyphs in a PostScript font, not only 256.
-.\" .I enc_file
-.\" (or the default encoding if no encoding file specified) just defines the
-.\" order of glyphs for the first 256 characters; all other glyphs are
-.\" accessed with additional encoding vectors which
-.\" .B grops
-.\" produces on the fly.
-.
-.
-.LP
-.B gropdf
-can automatically include the downloadable fonts necessary
-to print the document.
-.
-Fonts may be in PFA or PFB format.
-.LP
-.
-Any downloadable fonts which should, when required, be included by
-.B gropdf
-must be listed in the file
-.BR @FONTDIR@/devpdf/download ;
-this should consist of lines of the form
-.
-.IP
-.I
-foundry font filename
-.
-.LP
-where
-.I foundry
-is the foundry name or blank for the default foundry.
-.
-.I font
-is the PostScript name of the font,
-and
-.I filename
-is the name of the file containing the font;
-lines beginning with
-.B #
-and blank lines are ignored;
-fields must be separated by tabs
-(spaces are
-.B not
-allowed);
-.I filename
-is searched for using the same mechanism that is used
-for groff font metric files.
-.
-The
-.B download
-file itself is also searched for using this mechanism;
-currently, only the first found file in the font path is used.
-.
-Foundry names are usually a single character (such as \[oq]U\[cq] for
-the URW Foundry) or blank for the default foundry.
-.
-This default uses the same fonts as
-.B ghostscript
-uses when it embeds fonts in a PDF file.
-.
-.
-.LP
-In the default setup there are styles called
-.BR R ,
-.BR I ,
-.BR B ,
-and
-.B BI
-mounted at font positions 1 to\~4.
-.
-The fonts are grouped into families
-.BR A ,
-.BR BM ,
-.BR C ,
-.BR H ,
-.BR HN ,
-.BR N ,
-.BR P ,
-and\~\c
-.B T
-having members in each of these styles:
-.
-.RS
-.TP
-.B AR
-.FT AR
-AvantGarde-Book
-.FT
-.
-.TQ
-.B AI
-.FT AI
-AvantGarde-BookOblique
-.FT
-.
-.TQ
-.B AB
-.FT AB
-AvantGarde-Demi
-.FT
-.
-.TQ
-.B ABI
-.FT ABI
-AvantGarde-DemiOblique
-.FT
-.
-.TQ
-.B BMR
-.FT BMR
-Bookman-Light
-.FT
-.
-.TQ
-.B BMI
-.FT BMI
-Bookman-LightItalic
-.FT
-.
-.TQ
-.B BMB
-.FT BMB
-Bookman-Demi
-.FT
-.
-.TQ
-.B BMBI
-.FT BMBI
-Bookman-DemiItalic
-.FT
-.
-.TQ
-.B CR
-.FT CR
-Courier
-.FT
-.
-.TQ
-.B CI
-.FT CI
-Courier-Oblique
-.FT
-.
-.TQ
-.B CB
-.FT CB
-Courier-Bold
-.FT
-.
-.TQ
-.B CBI
-.FT CBI
-Courier-BoldOblique
-.FT
-.
-.TQ
-.B HR
-.FT HR
-Helvetica
-.FT
-.
-.TQ
-.B HI
-.FT HI
-Helvetica-Oblique
-.FT
-.
-.TQ
-.B HB
-.FT HB
-Helvetica-Bold
-.FT
-.
-.TQ
-.B HBI
-.FT HBI
-Helvetica-BoldOblique
-.FT
-.
-.TQ
-.B HNR
-.FT HNR
-Helvetica-Narrow
-.FT
-.
-.TQ
-.B HNI
-.FT HNI
-Helvetica-Narrow-Oblique
-.FT
-.
-.TQ
-.B HNB
-.FT HNB
-Helvetica-Narrow-Bold
-.FT
-.
-.TQ
-.B HNBI
-.FT HNBI
-Helvetica-Narrow-BoldOblique
-.FT
-.
-.TQ
-.B NR
-.FT NR
-NewCenturySchlbk-Roman
-.FT
-.
-.TQ
-.B NI
-.FT NI
-NewCenturySchlbk-Italic
-.FT
-.
-.TQ
-.B NB
-.FT NB
-NewCenturySchlbk-Bold
-.FT
-.
-.TQ
-.B NBI
-.FT NBI
-NewCenturySchlbk-BoldItalic
-.FT
-.
-.TQ
-.B PR
-.FT PR
-Palatino-Roman
-.FT
-.
-.TQ
-.B PI
-.FT PI
-Palatino-Italic
-.FT
-.
-.TQ
-.B PB
-.FT PB
-Palatino-Bold
-.FT
-.
-.TQ
-.B PBI
-.FT PBI
-Palatino-BoldItalic
-.FT
-.
-.TQ
-.B TR
-.FT TR
-Times-Roman
-.FT
-.
-.TQ
-.B TI
-.FT TI
-Times-Italic
-.FT
-.
-.TQ
-.B TB
-.FT TB
-Times-Bold
-.FT
-.
-.TQ
-.B TBI
-.FT TBI
-Times-BoldItalic
-.FT
-.RE
-.
-.
-.LP
-There is also the following font which is not a member of a family:
-.
-.RS
-.TP
-.B ZCMI
-.FT ZCMI
-ZapfChancery-MediumItalic
-.FT
-.RE
-.
-.
-.LP
-There are also some special fonts called
-.B S
-for the PS Symbol font.
-.
-The lower case greek characters are automatically slanted (to match
-the SymbolSlanted font (SS) available to postscript).
-.
-Zapf Dingbats is available as
-.BR ZD ,
-the "hand pointing left" glyph (\[rs][lh]) is available since it has
-been defined using the \[rs]X'pdf: xrev' extension which reverses the
-direction of letters within words.
-.
-.
-.LP
-The default color for
-.B \[rs]m
-and
-.B \[rs]M
-is black; for colors defined in the \[oq]rgb\[cq] color space
-.B setrgbcolor
-is used, for \[oq]cmy\[cq] and \[oq]cmyk\[cq]
-.BR setcmykcolor ,
-and for \[oq]gray\[cq]
-.BR setgray .
-.
-Note that
-.B setcmykcolor
-is a PostScript LanguageLevel\~2 command and thus not available on
-some older printers.
-.
-.
-.LP
-.B gropdf
-understands some of the X\~commands produced using the
-.B \[rs]X
-escape sequences supported by
-.B grops.
-Specifically, the following is supported.
-.
-.TP
-.B "\[rs]X'ps: invis'"
-Suppress output.
-.
-.TP
-.B "\[rs]X'ps: endinvis'"
-Stop suppressing output.
-.
-.TP
-.B "\[rs]X'ps: exec gsave currentpoint 2 copy translate \fIn\fP rotate neg exch neg exch translate'"
-where
-.I n
-is the angle of rotation.
-This is to support the
-.I align
-command in
-.BR gpic .
-.
-.TP
-.B "\[rs]X'ps: exec grestore'"
-Again used by
-.B gpic
-to restore after rotation.
-.
-.TP
-.BI "\[rs]X'ps: exec " "n " "setlinejoin'"
-where
-.I n
-can be one of the following values.
-.IP
-0 = Miter join
-.br
-1 = Round join
-.br
-2 = Bevel join
-.
-.TP
-.BI "\[rs]X'ps: exec " "n " "setlinecap'"
-where
-.I n
-can be one of the following values.
-.IP
-0 = Butt cap
-.br
-1 = Round cap, and
-.br
-2 = Projecting square cap
-.
-.
-.LP
-.TP
-.B "\[rs]X'ps: ... pdfmark'"
-All the
-.I pdfmark
-macros installed by using
-.I \-m pdfmark
-or
-.I \-m mspdf
-(see documentation in \[oq]pdfmark.pdf\[cq]).
-.
-A subset of these macros are installed automatically when you use
-.B \-Tpdf
-so you should not need to use \[oq]\-m pdfmark\[cq] for using most of
-the PDF functionality.
-.
-.
-.LP
-All other
-.B ps:
-tags are silently ignored.
-.
-.
-.LP
-One
-.B \[rs]X
-special used by the DVI driver is also recognised:
-.
-.TP
-.BI \[rs]X'papersize= paper-size '
-where the
-.I paper-size
-parameter is the same as the
-.B papersize
-command.
-.
-See
-.BR groff_font (@MAN5EXT@)
-for details.
-.
-This means that you can alter the page size at will within the PDF file
-being created by
-.BR gropdf .
-.
-If you do want to change the paper size, it must be done before you start
-creating the page.
-.
-.LP
-In addition,
-.B gropdf
-supports its own suite of
-.B pdf:
-tags.
-.
-The following tags are supported:
-.
-.TP
-.BI "\[rs]X'pdf: pdfpic " "file alignment width height line-length" '
-Place an image of the specified
-.I width
-containing the PDF drawing from file
-.I file
-of desired
-.I width
-and
-.I height
-(if
-.I height
-is missing or zero then it is scaled proportionally).
-.
-If
-.I alignment
-is
-.B \-L
-the drawing is left aligned.
-.
-If it is
-.B \-C
-or
-.B \-R
-a
-.I linelength
-greater than the width of the drawing is required as well.
-.
-If
-.I width
-is specified as zero then the width is scaled in proportion to the height.
-.
-.\" .IP
-.\" See
-.\" .BR groff_tmac (@MAN5EXT@)
-.\" for a description of the
-.\" .B PSPIC
-.\" macro which provides a convenient high-level interface for inclusion of
-.\" PostScript graphics.
-.
-.TP
-.B \[rs]X'pdf: xrev'
-This toggles a flag which reverses the direction of printing
-.IR "letter by letter" ,
-i.e., each separate letter is reversed, not the entire word.
-.
-This is useful for reversing the direction of glyphs in the Dingbats font.
-.
-To return to normal printing repeat the command again.
-.
-.TP
-.BI "\[rs]X'pdf: markstart " "/ANN definition" '
-The macros which support PDF Bookmarks use this call internally to
-start the definition of bookmark hotspot (user will have called
-\[oq].pdfhref\~L\[cq] with the text which will become the \[oq]hot
-spot\[cq] region).
-.
-Normally this is never used except from within the pdfmark macros.
-.
-.TP
-.B \[rs]X'pdf: markend'
-The macros which support PDF Bookmarks use this call internally to
-stop the definition of bookmark hotspot (user will have called
-\[oq].pdfhref\~L\[cq] with the text which will become the \[oq]hot
-spot\[cq] region).
-.
-Normally this is never used except from within the pdfmark macros.
-.
-.TP
-.B \[rs]X'pdf: marksuspend'
-.TQ
-.B \[rs]X'pdf: markrestart'
-If you are using page traps to produce headings, footings, etc., you
-need to use these in case a \[oq]hot spot\[cq] crosses a page
-boundary, otherwise any text output by the heading or footing macro
-will be marked as part of the \[oq]hot spot\[cq].
-.
-To stop this happening just place \[oq].pdfmarksuspend\[cq] and
-\[oq].pdfmarkrestart\[cq] at the start and end of the page trap macro,
-respectively.
-.
-(These are just convenience macros which emit the \[rs]X code.
-.
-These macros must only be used within page traps.)
-.
-.
-.\" --------------------------------------------------------------------
-.SS Importing graphics
-.\" --------------------------------------------------------------------
-.
-.B gropdf
-only supports importing other PDF files as graphics.
-.
-But that PDF file may contain any of the graphic formats supported by
-the PDF standard (such as JPEG, PNG, GIF, etc.).
-.
-So any application which outputs PDF can be used as an embedded file
-in
-.BR gropdf .
-.
-The PDF file you wish to insert must be a single page and the drawing
-must just fit inside the media size of the PDF file.
-.
-So, in
-.BR inkscape (1)
-or
-.BR gimp (1)
-(for example) make sure the canvas size just fits the image.
-.
-.
-.LP
-The PDF parser used in
-.B gropdf
-has not been rigorously tested with all possible applications which
-produce PDFs.
-.
-If you find a single page PDF which fails to import properly, it is
-worth running it through the
-.
-.BR pdftk (1)
-program by issuing the command:
-.
-.
-.RS
-.LP
-.B pdftk
-.I oldfile.pdf
-.B output
-.I newfile.pdf
-.RE
-.
-.
-.LP
-You may find that
-.I newfile.pdf
-will now load successfully.
-.
-.
-.\" --------------------------------------------------------------------
-.SS TrueType and other font formats
-.\" --------------------------------------------------------------------
-.
-.B gropdf
-does not support any other fonts except Adobe Type 1 (PFA or PFB).
-.
-.
-.\" --------------------------------------------------------------------
-.SH FONT INSTALLATION
-.\" --------------------------------------------------------------------
-.
-This section gives a summary of the above explanations; it can serve
-as a step-by-step font installation guide for
-.BR gropdf .
-.
-.ds BU \[bu]\ \ \"
-.de LI
-.IP "" 4
-\h'-\w'\*[BU]'u'\*[BU]\c
-..
-.LI
-Convert your font to something groff understands.
-.
-This is either a PostScript Type\~1 font in either PFA or PFB,
-together with an AFM file.
-.
-.IP
-The very first line in a PFA/PFB file contains this:
-.
-.RS
-.IP
-.B %!PS-AdobeFont-1.0:
-.RE
-.
-.IP
-A PFB file has this also in the first line, but the string is
-preceded with some binary bytes.
-.
-.LI
-Convert the AFM file to a groff font description file with the
-.BR \%afmtodit (@MAN1EXT@)
-program.
-.
-An example call is
-.
-.RS
-.IP
-afmtodit Foo-Bar-Bold.afm map/textmap FBB
-.RE
-.
-.IP
-which converts the metric file \[oq]Foo-Bar-Bold.afm\[cq] to the groff
-font \[oq]FBB\[cq].
-.
-If you have a font family which comes with normal, bold, italic, and
-bold italic faces, it is recommended to use the letters
-.BR R ,
-.BR B ,
-.BR I ,
-and
-.BR BI ,
-respectively, as postfixes in the groff font names to make groff\[aq]s
-\[oq].fam\[cq] request work.
-.
-An example is groff\[aq]s built-in Times-Roman font: The font family
-name is
-.BR T ,
-and the groff font names are
-.BR TR ,
-.BR TB ,
-.BR TI ,
-and
-.BR TBI .
-.
-.LI
-Install both the groff font description files and the fonts in a
-\[oq]devpdf\[cq] subdirectory of the font path which groff finds.
-.
-See the
-.B ENVIRONMENT
-section in the
-.BR troff (@MAN1EXT@)
-man page which lists the actual value of the font path.
-.
-Note that groff doesn\[aq]t use the AFM files (but it is a good idea to
-store them anyway).
-.
-.LI
-Register all fonts which must be downloaded to the printer in the
-\[oq]devpdf/download\[cq] file.
-.
-Only the first occurrence of this file in the font path is read.
-.
-This means that you should copy the default \[oq]download\[cq] file to
-the first directory in your font path and add your fonts there.
-.
-To continue the above example we assume that the PS font name for
-Foo-Bar-Bold.pfa is \[oq]XY-Foo-Bar-Bold\[cq] (the PS font name is
-stored in the
-.B internalname
-field in the \[oq]FBB\[cq] file) and belongs to foundry \[oq]F\[]cq]
-thus the following line should be added to \[oq]download\[cq]:
-.
-.RS
-.IP
-.B F XY-Foo-Bar-Bold Foo-Bar-Bold.pfa
-.
-.
-.LP
-Use a tab character to separate the fields, and the \[oq]foundry\[cq]
-field should be null for the default foundry.
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.SM
-.B GROFF_FONT_PATH
-A list of directories in which to search for the
-.BI dev name
-directory in addition to the default ones.
-.
-If, in the \[oq]download\[cq] file, the
-font file has been specified with a full path, no directories are searched.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_font (@MAN5EXT@)
-for more details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'\fB@FONTDIR@/devpdf/download'u+2n
-.B @FONTDIR@/devpdf/DESC
-Device description file.
-.
-.TP
-.BI @FONTDIR@/devpdf/ F
-Font description file for font\~\c
-.IR F .
-.
-.TP
-.BI @FONTDIR@/devpdf/ U-F
-Font description file for font\~\c
-.I F
-(using foundry\~\c
-.I U
-rather than the default foundry).
-.
-.TP
-.B @FONTDIR@/devpdf/download
-List of downloadable fonts.
-.
-.TP
-.B @FONTDIR@/devpdf/Foundry
-A Perl script used during install to locate suitable fonts.
-.
-.TP
-.B @FONTDIR@/devpdf/enc/text.enc
-Encoding used for text fonts.
-.
-.TP
-.B @MACRODIR@/pdf.tmac
-Macros for use with
-.BR gropdf ;
-automatically loaded by
-.BR troffrc .
-.
-.\" .TP
-.\" .B @MACRODIR@/pspic.tmac
-.\" Definition of
-.\" .B PSPIC
-.\" macro,
-.\" automatically loaded by
-.\" .BR ps.tmac .
-.\" .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.ad l
-.
-.BR \%afmtodit (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR grops (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR grops (@MAN1EXT@),
-.BR \%pfbtops (@MAN1EXT@),
-.BR \%groff_out (@MAN5EXT@),
-.BR \%groff_font (@MAN5EXT@),
-.BR \%groff_char (@MAN7EXT@),
-.BR \%groff_tmac (@MAN5EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH LICENSE
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 035d1238d8a6ecd937942c23775d2b078357996a..2ec52d06a514900ce91324fd9c5a1c073e93cd2a 100644 (file)
@@ -2,8 +2,8 @@
 #
 #      gropdf          : PDF post processor for groff
 #
-# Copyright (C) 2011-201 Free Software Foundation, Inc.
-#      Written by Deri James <deri@chuzzlewit.demon.co.uk>
+# Copyright (C) 2011-2018 Free Software Foundation, Inc.
+#      Written by Deri James <deri@chuzzlewit.myzen.co.uk>
 #
 # This file is part of groff.
 #
 
 use strict;
 use Getopt::Long qw(:config bundling);
-use Compress::Zlib;
+
+use constant
+{
+    WIDTH              => 0,
+    CHRCODE            => 1,
+    PSNAME             => 2,
+    ASSIGNED           => 3,
+    USED               => 4,
+};
+
+my $gotzlib=0;
+
+my $rc = eval
+{
+  require Compress::Zlib;
+  Compress::Zlib->import();
+  1;
+};
+
+if($rc)
+{
+  $gotzlib=1;
+}
+else
+{
+    Msg(0,"Perl module Compress::Zlib not available - cannot compress this pdf");
+}
 
 my %cfg;
 
@@ -95,12 +121,24 @@ my $wt=-1;
 my $thislev=1;
 my $mark=undef;
 my $suspendmark=undef;
+
+
+
 my $n_flg=1;
 my $pginsert=-1;    # Growth point for kids array
 my %pgnames;        # 'names' of pages for switchtopage
 my @outlines=();    # State of Bookmark Outlines at end of each page
 my $custompaper=0;  # Has there been an X papersize
 my $textenccmap=''; # CMap for groff text.enc encoding
+my @XOstream=();
+my @PageAnnots={};
+my $noslide=0;
+my $transition={PAGE => {Type => '/Trans', S => '', D => 1, Dm => '/H', M => '/I', Di => 0, SS => 1.0, B => 0},
+               BLOCK => {Type => '/Trans', S => '', D => 1, Dm => '/H', M => '/I', Di => 0, SS => 1.0, B => 0}};
+my $firstpause=0;
+my $present=0;
+
+$noslide=1 if exists($ENV{GROPDF_NOSLIDE}) and $ENV{GROPDF_NOSLIDE};
 
 my %ppsz=(     'ledger'=>[1224,792],
        'legal'=>[612,1008],
@@ -163,10 +201,13 @@ my $debug=0;
 my $version=0;
 my $stats=0;
 my $unicodemap;
+my @idirs;
 
 #Load_Config();
 
-GetOptions("F=s" => \$fd, 'l' => \$frot, 'p=s' => \$fpsz, 'd!' => \$debug, 'v' => \$version, 'e' => \$embedall, 'y=s' => \$Foundry, 's' => \$stats, 'u:s' => \$unicodemap);
+GetOptions("F=s" => \$fd, 'I=s' => \@idirs, 'l' => \$frot, 'p=s' => \$fpsz, 'd!' => \$debug, 'v' => \$version, 'version' => \$version, 'e' => \$embedall, 'y=s' => \$Foundry, 's' => \$stats, 'u:s' => \$unicodemap);
+
+unshift(@idirs,'.');
 
 if ($version)
 {
@@ -239,13 +280,14 @@ elsif (exists($ppsz{$papersz}))
     @defaultmb=@mediabox=(0,0,$ppsz{$papersz}->[0],$ppsz{$papersz}->[1]);
 }
 
-my (@dt)=localtime(time);
+my (@dt)=localtime($ENV{SOURCE_DATE_EPOCH} || time);
 my $dt=PDFDate(\@dt);
 
 my %info=('Creator' => "(groff version $cfg{GROFF_VERSION})",
                                'Producer' => "(gropdf version $cfg{GROFF_VERSION})",
                                'ModDate' => "($dt)",
                                'CreationDate' => "($dt)");
+
 while (<>)
 {
     chomp;
@@ -298,14 +340,34 @@ while (<>)
 
 }
 
+exit 0 if $lct==0;
 
 if ($cpageno > 0)
 {
-    $cpage->{MediaBox}=\@mediabox if $custompaper;
-    PutObj($cpageno);
-    OutStream($cpageno+1);
+       my $trans='BLOCK';
+
+       $trans='PAGE' if $firstpause;
+
+       if (scalar(@XOstream))
+       {
+           MakeXO() if $stream;
+           $stream=join("\n",@XOstream)."\n";
+       }
+
+       my %t=%{$transition->{$trans}};
+       $cpage->{MediaBox}=\@mediabox if $custompaper;
+       $cpage->{Trans}=FixTrans(\%t) if $t{S};
+
+       if ($#PageAnnots >= 0)
+       {
+           @{$cpage->{Annots}}=@PageAnnots;
+       }
+
+       PutObj($cpageno);
+       OutStream($cpageno+1);
 }
 
+$cat->{PageMode}='/FullScreen' if $present;
 
 PutOutlines(\@outlev);
 
@@ -318,13 +380,24 @@ PutObj($objct);
 foreach my $fontno (keys %fontlst)
 {
     my $o=$fontlst{$fontno}->{FNT};
+
+    foreach my $ch (@{$o->{NO}})
+    {
+       my $psname=$o->{NAM}->{$ch->[1]}->[PSNAME] || '/.notdef';
+       my $wid=$o->{NAM}->{$ch->[1]}->[WIDTH] || 0;
+
+       push(@{$o->{DIFF}},$psname);
+       push(@{$o->{WIDTH}},$wid);
+       last if $#{$o->{DIFF}} >= 255;
+    }
+    unshift(@{$o->{DIFF}},0);
     my $p=GetObj($fontlst{$fontno}->{OBJ});
 
     if (exists($p->{LastChar}) and $p->{LastChar} > 255)
     {
        $p->{LastChar} = 255;
-       splice(@{$o->{GNO}},256);
-       splice(@{$o->{WID}},256);
+       splice(@{$o->{DIFF}},256);
+       splice(@{$o->{WIDTH}},256);
     }
 }
 
@@ -465,7 +538,7 @@ sub GetObj
 sub PDFDate
 {
     my $dt=shift;
-    return(sprintf("D:%04d%02d%02d%02d%02d%02d% +02d'00'",$dt->[5]+1900,$dt->[4]+1,$dt->[3],$dt->[2],$dt->[1],$dt->[0],( localtime time() + 3600*( 12 - (gmtime)[2] ) )[2] - 12));
+    return(sprintf("D:%04d%02d%02d%02d%02d%02d%+03d'00'",$dt->[5]+1900,$dt->[4]+1,$dt->[3],$dt->[2],$dt->[1],$dt->[0],( localtime time() + 3600*( 12 - (gmtime)[2] ) )[2] - 12));
 }
 
 sub ToPoints
@@ -521,26 +594,36 @@ sub Load_Config
 sub LoadDownload
 {
     my $f;
+    my $found=0;
 
-    OpenFile(\$f,$fontdir,"download");
-    Msg(1,"Failed to open 'download'") if !defined($f);
+    my (@dirs)=split($cfg{RT_SEP},$fontdir);
 
-    while (<$f>)
+    foreach my $dir (@dirs)
     {
-       chomp;
-       s/#.*$//;
-       next if $_ eq '';
-       my ($foundry,$name,$file)=split(/\t+/);
-       if (substr($file,0,1) eq '*')
+       $f=undef;
+       OpenFile(\$f,$dir,"download");
+       next if !defined($f);
+       $found++;
+
+       while (<$f>)
        {
-           next if !$embedall;
-           $file=substr($file,1);
+           chomp;
+           s/#.*$//;
+           next if $_ eq '';
+           my ($foundry,$name,$file)=split(/\t+/);
+           if (substr($file,0,1) eq '*')
+           {
+               next if !$embedall;
+               $file=substr($file,1);
+           }
+
+           $download{"$foundry $name"}=$file;
        }
 
-       $download{"$foundry $name"}=$file;
+       close($f);
     }
 
-    close($f);
+    Msg(1,"Failed to open 'download'") if !$found;
 }
 
 sub OpenFile
@@ -705,6 +788,53 @@ sub do_x
                $linecap=$1;
                $stream.="$linecap J\n";
            }
+           elsif ($par=~m/exec %%%%PAUSE/i and !$noslide)
+           {
+               my $trans='BLOCK';
+
+               if ($firstpause)
+               {
+                   $trans='PAGE';
+                   $firstpause=0;
+               }
+               MakeXO();
+               NewPage($trans);
+               $present=1;
+           }
+           elsif ($par=~m/exec %%%%BEGINONCE/)
+           {
+               if ($noslide)
+               {
+                   $suppress=1;
+               }
+               else
+               {
+                   my $trans='BLOCK';
+
+                   if ($firstpause)
+                   {
+                       $trans='PAGE';
+                       $firstpause=0;
+                   }
+                   MakeXO();
+                   NewPage($trans);
+                   $present=1;
+               }
+           }
+           elsif ($par=~m/exec %%%%ENDONCE/)
+           {
+               if ($noslide)
+               {
+                   $suppress=0;
+               }
+               else
+               {
+                   MakeXO();
+                   NewPage('BLOCK');
+                   $cat->{PageMode}='/FullScreen';
+                   pop(@XOstream);
+               }
+           }
            elsif ($par=~m/\[(.+) pdfmark/)
            {
                my $pdfmark=$1;
@@ -763,11 +893,18 @@ sub do_x
                    $annot->{DATA}->{Type}='/Annot';
                    FixRect($annot->{DATA}->{Rect}); # Y origin to ll
                    FixPDFColour($annot->{DATA});
-                   push(@{$cpage->{Annots}},$annotno);
+                   push(@PageAnnots,$annotno);
                }
                elsif ($pdfmark=~m/(.+) \/OUT/)
                {
-                   my @xwds=split(' ',"<< $1 >>");
+                   my $t=$1;
+                   $t=~s/\\\) /\\\\\) /g;
+                   $t=~s/\\e/\\\\/g;
+                   $t=~m/(^.*\/Title \()(.*)(\).*)/;
+                   my ($pre,$title,$post)=($1,$2,$3);
+                   $title=~s/(?<!\\)\(/\\\(/g;
+                   $title=~s/(?<!\\)\)/\\\)/g;
+                   my @xwds=split(' ',"<< $pre$title$post >>");
                    my $out=ParsePDFValue(\@xwds);
 
                    my $this=[$out,[]];
@@ -890,8 +1027,11 @@ sub do_x
                    if ($fil=~m/\.pdf$/)
                    {
                        my $bbox=$incfil{$fil}->[1];
-                       my $xscale=$wid/($bbox->[2]-$bbox->[0]+1);
-                       my $yscale=($hgt<=0)?$xscale:($hgt/($bbox->[3]-$bbox->[1]+1));
+                       my $xscale=d3($wid/($bbox->[2]-$bbox->[0]+1));
+                       my $yscale=d3(($hgt<=0)?$xscale:($hgt/($bbox->[3]-$bbox->[1]+1)));
+                       $wid=($bbox->[2]-$bbox->[0])*$xscale;
+                       $hgt=($bbox->[3]-$bbox->[1])*$yscale;
+                       $ypos+=$hgt;
                        $stream.="q $xscale 0 0 $yscale ".PutXY($xpos,$ypos)." cm";
                        $stream.=" 0 1 -1 0 0 0 cm" if $rot;
                        $stream.=" /$incfil{$fil}->[0] Do Q\n";
@@ -905,7 +1045,7 @@ sub do_x
            elsif (lc($xprm[1]) eq 'pdfpic')
            {
                my $fil=$xprm[2];
-               my $flag=uc($xprm[3])||'-L';
+               my $flag=uc($xprm[3]||'-L');
                my $wid=GetPoints($xprm[4])||-1;
                my $hgt=GetPoints($xprm[5]||-1);
                my $ll=GetPoints($xprm[6]||0);
@@ -921,8 +1061,8 @@ sub do_x
                    IsGraphic();
                    my $bbox=$incfil{$fil}->[1];
                    $wid=($bbox->[2]-$bbox->[0]) if $wid <= 0;
-                   my $xscale=$wid/($bbox->[2]-$bbox->[0]);
-                   my $yscale=($hgt<=0)?$xscale:($hgt/($bbox->[3]-$bbox->[1]));
+                   my $xscale=d3($wid/($bbox->[2]-$bbox->[0]));
+                   my $yscale=d3(($hgt<=0)?$xscale:($hgt/($bbox->[3]-$bbox->[1])));
                    $xscale=($wid<=0)?$yscale:$xscale;
                    $xscale=$yscale if $yscale < $xscale;
                    $yscale=$xscale if $xscale < $yscale;
@@ -1060,6 +1200,33 @@ sub do_x
                    }
                }
            }
+           elsif (lc($xprm[1]) eq 'transition' and !$noslide)
+           {
+               if (uc($xprm[2]) eq 'PAGE' or uc($xprm[2] eq 'SLIDE'))
+               {
+                   $transition->{PAGE}->{S}='/'.ucfirst($xprm[3]) if $xprm[3] and $xprm[3] ne '.';
+                   $transition->{PAGE}->{D}=$xprm[4] if $xprm[4] and $xprm[4] ne '.';
+                   $transition->{PAGE}->{Dm}='/'.$xprm[5] if $xprm[5] and $xprm[5] ne '.';
+                   $transition->{PAGE}->{M}='/'.$xprm[6] if $xprm[6] and $xprm[6] ne '.';
+                   $xprm[7]='/None' if $xprm[7] and uc($xprm[7]) eq 'NONE';
+                   $transition->{PAGE}->{Di}=$xprm[7] if $xprm[7] and $xprm[7] ne '.';
+                   $transition->{PAGE}->{SS}=$xprm[8] if $xprm[8] and $xprm[8] ne '.';
+                   $transition->{PAGE}->{B}=$xprm[9] if $xprm[9] and $xprm[9] ne '.';
+               }
+               elsif (uc($xprm[2]) eq 'BLOCK')
+               {
+                   $transition->{BLOCK}->{S}='/'.ucfirst($xprm[3]) if $xprm[3] and $xprm[3] ne '.';
+                   $transition->{BLOCK}->{D}=$xprm[4] if $xprm[4] and $xprm[4] ne '.';
+                   $transition->{BLOCK}->{Dm}='/'.$xprm[5] if $xprm[5] and $xprm[5] ne '.';
+                   $transition->{BLOCK}->{M}='/'.$xprm[6] if $xprm[6] and $xprm[6] ne '.';
+                   $xprm[7]='/None' if $xprm[7] and uc($xprm[7]) eq 'NONE';
+                   $transition->{BLOCK}->{Di}=$xprm[7] if $xprm[7] and $xprm[7] ne '.';
+                   $transition->{BLOCK}->{SS}=$xprm[8] if $xprm[8] and $xprm[8] ne '.';
+                   $transition->{BLOCK}->{B}=$xprm[9] if $xprm[9] and $xprm[9] ne '.';
+               }
+
+               $present=1;
+           }
        }
        elsif (lc(substr($xprm[0],0,9)) eq 'papersize')
        {
@@ -1132,7 +1299,7 @@ sub PutHotSpot
     $annot->{DATA}->{Rect}=[$mark->{xpos},$mark->{ypos}-$mark->{rsb},$endx+$mark->{lead},$mark->{ypos}-$mark->{rst}];
     FixPDFColour($annot->{DATA});
     FixRect($annot->{DATA}->{Rect}); # Y origin to ll
-    push(@{$cpage->{Annots}},$annotno);
+    push(@PageAnnots,$annotno);
 }
 
 sub sgn
@@ -1155,7 +1322,7 @@ sub GetPoints
 {
     my $val=shift;
 
-    $val=ToPoints($1,$2) if ($val=~m/(-?[\d.]+)([cipnz])/);
+    $val=ToPoints($1,$2) if ($val and $val=~m/(-?[\d.]+)([cipnz])/);
 
     return $val;
 }
@@ -1282,6 +1449,35 @@ sub LoadSWF
     return $xonm;
 }
 
+sub OpenInc
+{
+    my $fn=shift;
+    my $fnm=$fn;
+    my $F;
+
+    if (substr($fnm,0,1)  eq '/' or substr($fnm,1,1) eq ':') # dos
+    {
+       if (-r $fnm and open($F,"<$fnm"))
+       {
+           return($F,$fnm);
+       }
+    }
+    else
+    {
+       foreach my $dir (@idirs)
+       {
+           $fnm="$dir/$fn";
+
+           if (-r "$fnm" and open($F,"<$fnm"))
+           {
+               return($F,$fnm);
+           }
+       }
+    }
+
+    return(undef,$fn);
+}
+
 sub LoadPDF
 {
     my $pdfnm=shift;
@@ -1295,18 +1491,22 @@ sub LoadPDF
     my $curobj=-1;
     my $instream=0;
     my $cont;
+    my $adj=0;
+    my $keepsep=$/;
+
+    my ($PD,$PDnm)=OpenInc($pdfnm);
 
-    if (!open(PD,"<$pdfnm"))
+    if (!defined($PD))
     {
        Msg(0,"Failed to open PDF '$pdfnm'");
        return undef;
     }
 
-    my $hdr=<PD>;
+    my $hdr=<$PD>;
 
-    $/="\r" if (length($hdr) > 10);
+    $/="\r",$adj=1 if (length($hdr) > 10);
 
-    while (<PD>)
+    while (<$PD>)
     {
        chomp;
 
@@ -1343,8 +1543,8 @@ sub LoadPDF
        {
            if ($curobj > -1)
            {
-               $pdf->[$curobj]->{STREAMPOS}=[tell(PD),$strmlen];
-               seek(PD,$strmlen,1);
+               $pdf->[$curobj]->{STREAMPOS}=[tell($PD)+$adj,$strmlen];
+               seek($PD,$strmlen,1);
                $instream=1;
            }
            else
@@ -1357,9 +1557,9 @@ sub LoadPDF
        $pdftxt.=$_.' ';
     }
 
-    close(PD);
+    close($PD);
 
-    open(PD,"<$pdfnm");
+    open(PD,"<$PDnm");
 #      $pdftxt=~s/\]/ \]/g;
     my (@pdfwds)=split(' ',$pdftxt);
     my $wd;
@@ -1404,7 +1604,7 @@ sub LoadPDF
            sysseek(PD,$o->{STREAMPOS}->[0],0);
            Msg(0,'Failed to read all the stream') if $l != sysread(PD,$o->{STREAM},$l);
 
-           if (exists($o->{OBJ}->{'Filter'}) and $o->{OBJ}->{'Filter'} eq '/FlateDecode')
+           if ($gotzlib and exists($o->{OBJ}->{'Filter'}) and $o->{OBJ}->{'Filter'} eq '/FlateDecode')
            {
                $o->{STREAM}=Compress::Zlib::uncompress($o->{STREAM});
                delete($o->{OBJ }->{'Filter'});
@@ -1427,8 +1627,8 @@ sub LoadPDF
     $BBox=[0,0,595,842] if !defined($BBox);
 
     $wid=($BBox->[2]-$BBox->[0]+1) if $wid==0;
-    my $xscale=abs($wid)/($BBox->[2]-$BBox->[0]+1);
-    my $yscale=($hgt<=0)?$xscale:(abs($hgt)/($BBox->[3]-$BBox->[1]+1));
+    my $xscale=d3(abs($wid)/($BBox->[2]-$BBox->[0]+1));
+    my $yscale=d3(($hgt<=0)?$xscale:(abs($hgt)/($BBox->[3]-$BBox->[1]+1)));
     $hgt=($BBox->[3]-$BBox->[1]+1)*$yscale;
 
     if ($type eq "import")
@@ -1462,6 +1662,7 @@ sub LoadPDF
 
     BuildStream($xobj,$pdf,$pdf->[$page]->{OBJ}->{Contents});
 
+    $/=$keepsep;
     return([$xonm,$BBox] );
 }
 
@@ -1851,12 +2052,12 @@ sub PutXY
 
     if ($frot)
     {
-       return("$y $x");
+       return(d3($y)." ".d3($x));
     }
     else
     {
        $y=$mediabox[3]-$y;
-       return("$x $y");
+       return(d3($x)." ".d3($y));
     }
 }
 
@@ -1889,10 +2090,10 @@ sub PutObj
     $obj[$ono]->{XREF}=$fct;
     if (exists($obj[$ono]->{STREAM}))
     {
-       if (!$debug && !exists($obj[$ono]->{DATA}->{'Filter'}))
+       if ($gotzlib && !$debug && !exists($obj[$ono]->{DATA}->{'Filter'}))
        {
            $obj[$ono]->{STREAM}=Compress::Zlib::compress($obj[$ono]->{STREAM});
-           $obj[$ono]->{DATA}->{'Filter'}=['/FlateDecode'];
+           $obj[$ono]->{DATA}->{'Filter'}='/FlateDecode';
        }
 
        $obj[$ono]->{DATA}->{'Length'}=length($obj[$ono]->{STREAM});
@@ -1984,6 +2185,7 @@ sub LoadFont
     my @fntbbox=(0,0,0,0);
     my $capheight=0;
     my $lastchr=0;
+    my $lastnm;
     my $t1flags=0;
     my $fixwid=-1;
     my $ascent=0;
@@ -2012,7 +2214,7 @@ sub LoadFont
            $stg=3,next if lc($_) eq 'charset';
 
            my ($ch1,$ch2,$k)=split;
-           $fnt{KERN}->{$ch1}->{$ch2}=$k;
+#          $fnt{KERN}->{$ch1}->{$ch2}=$k;
        }
        else
        {
@@ -2021,15 +2223,16 @@ sub LoadFont
 
            if ($r[1] eq '"')
            {
-               $fnt{GNM}->{$r[0]}=$lastchr;
+               $fnt{NAM}->{$r[0]}=$fnt{NAM}->{$lastnm};
                next;
            }
 
            $r[0]='u0020' if $r[3] == 32;
+           $r[0]="u00".hex($r[3]) if $r[0] eq '---';
 #          next if $r[3] >255;
-           $fnt{GNM}->{$r[0]}=$r[3];
-           $fnt{GNO}->[$r[3]]='/'.$r[4];
-           $fnt{WID}->[$r[3]]=$p[0];
+           $fnt{NAM}->{$r[0]}=[$p[0],$r[3],'/'.$r[4],$r[3],0];
+           $fnt{NO}->[$r[3]]=[$r[0],$r[0]];
+           $lastnm=$r[0];
            $lastchr=$r[3] if $r[3] > $lastchr;
            $fixwid=$p[0] if $fixwid == -1;
            $fixwid=-2 if $fixwid > 0 and $p[0] != $fixwid;
@@ -2045,20 +2248,16 @@ sub LoadFont
 
     close($f);
 
-    unshift(@{$fnt{GNO}},0);
-
-    foreach my $glyph (@{$fnt{GNO}})
-    {
-       $glyph='/.notdef' if !defined($glyph);
-    }
-
-    foreach my $w (@{$fnt{WID}})
+    foreach my $j (0..$lastchr)
     {
-       $w=0 if !defined($w);
+       $fnt{NO}->[$j]=['',''] if !defined($fnt{NO}->[$j]);
     }
 
     my $fno=0;
     my $slant=0;
+    $fnt{DIFF}=[];
+    $fnt{WIDTH}=[];
+    $fnt{NAM}->{''}=[0,-1,'/.notdef',-1,0];
     $slant=-$fnt{'slant'} if exists($fnt{'slant'});
     $fnt{'spacewidth'}=700 if !exists($fnt{'spacewidth'});
 
@@ -2077,12 +2276,12 @@ sub LoadFont
                        {'Type' => '/Font',
                        'Subtype' => '/Type1',
                        'BaseFont' => '/'.$fnt{internalname},
-                       'Widths' => $fnt{WID},
+                       'Widths' => $fnt{WIDTH},
                        'FirstChar' => 0,
                        'LastChar' => $lastchr,
                        'Encoding' => BuildObj($objct+1,
                                    {'Type' => '/Encoding',
-                                   'Differences' => $fnt{GNO}
+                                   'Differences' => $fnt{DIFF}
                                    }
                                    ),
                        'FontDescriptor' => BuildObj($objct+2,
@@ -2095,7 +2294,7 @@ sub LoadFont
                                        'Descent' => $fntbbox[1],
                                        'CapHeight' => $capheight,
                                        'StemV' => 0,
-                                       'CharSet' => "($charset)",
+#                                      'CharSet' => "($charset)",
                                        'FontFile' => BuildObj($objct+3,
                                                    {'Length1' => $l1,
                                                    'Length2' => $l2,
@@ -2121,14 +2320,31 @@ sub LoadFont
                        {'Type' => '/Font',
                        'Subtype' => '/Type1',
                        'BaseFont' => '/'.$fnt{internalname},
+                       'Widths' => $fnt{WIDTH},
+                       'FirstChar' => 0,
+                       'LastChar' => $lastchr,
                        'Encoding' => BuildObj($objct+1,
                                    {'Type' => '/Encoding',
-                                   'Differences' => $fnt{GNO}
+                                   'Differences' => $fnt{DIFF}
                                    }
-                                   )
+                                   ),
+                       'FontDescriptor' => BuildObj($objct+2,
+                                       {'Type' => '/FontDescriptor',
+                                       'FontName' => '/'.$fnt{internalname},
+                                       'Flags' => $t1flags,
+                                       'FontBBox' => \@fntbbox,
+                                       'ItalicAngle' => $slant,
+                                       'Ascent' => $ascent,
+                                       'Descent' => $fntbbox[1],
+                                       'CapHeight' => $capheight,
+                                       'StemV' => 0,
+                                       'CharSet' => "($charset)",
+                                       }
+                                       )
                        }
                        );
-       $objct+=1;
+
+       $objct+=2;
        $fontlst{$fontno}->{NM}='/F'.$fontno;
        $pages->{'Resources'}->{'Font'}->{'F'.$fontno}=$fontlst{$fontno}->{OBJ};
        $fontlst{$fontno}->{FNT}=\%fnt;
@@ -2160,130 +2376,108 @@ sub GetType1
 
     OpenFile(\$f,$fontdir,"$file");
     Msg(1,"Failed to open '$file'") if !defined($f);
-    binmode($f);
 
-    my $l=<$f>;
+    $head=GetChunk($f,1,"currentfile eexec");
+    $body=GetChunk($f,2,"00000000") if !eof($f);
+    $tail=GetChunk($f,3,"cleartomark") if !eof($f);
 
-    if (substr($l,0,1) eq "\x80")
-    {
-       # PFB file
-       sysseek($f,0,0);
-       my $hdr='';
-       $l1=$l2=$l3=0;
-       my $typ=0;
-       my $data='';
-       my $sl=0;
+    $l1=length($head);
+    $l2=length($body);
+    $l3=length($tail);
 
-       while ($typ != 3)
-       {
-           my $chk=sysread($f,$hdr,6);
+    return($l1,$l2,$l3,"$head$body$tail");
+}
 
-           if ($chk < 2)
-           {
-               # eof($f) uses buffered i/o (since file was open not sysopen)
-               # which screws up next sysread. So this will terminate loop if font
-               # has no terminating section type 3.
-               last if $l3;
-               return(5,$l2,$l3,undef);
-           }
+sub GetChunk
+{
+    my $F=shift;
+    my $segno=shift;
+    my $ascterm=shift;
+    my ($type,$hdr,$chunk,@msg);
+    binmode($F);
+    my $enc="ascii";
 
-           $typ=ord(substr($hdr,1,1));
+    while (1)
+    {
+       # There may be multiple chunks of the same type
 
-           if ($chk == 6)
-           {
-               $sl=unpack('L',substr($hdr,2,4));
-               $chk=sysread($f,$data,$sl);
-               return(1,$l2,$l3,undef) if $chk != $sl;
-           }
+       my $ct=read($F,$hdr,2);
 
-           if ($typ == 1)
+       if ($ct==2)
+       {
+           if (substr($hdr,0,1) eq "\x80")
            {
-               if ($l2 == 0)
-               {
-                   # First text bit(s) must be head
-                   $head.=$data;
-                   $l1+=$sl;
-               }
-               else
+               # binary chunk
+
+               my $chunktype=ord(substr($hdr,1,1));
+               $enc="binary";
+
+               if (defined($type) and $type != $chunktype)
                {
-                   # A text bit after the binary sections must be tail
-                   $tail.=$data;
-                   $l3+=$sl;
+                   seek($F,-2,1);
+                   last;
                }
-           }
-           elsif ($typ == 2)
-           {
-               return(2,$l2,$l3,undef) if $l3; # Found a binary bit after the tail
-               $body.=$data;
-               $l2+=$sl;
-           }
-           elsif ($typ != 3)
-           {
-               # What segment type is this!
-               return(3,$l2,$l3,undef);
-           }
-       }
 
-       close($f);
-       return($l1,$l2,$l3,"$head$body$tail");
-    }
+               $type=$chunktype;
+               return if $chunktype == 3;
 
-    my (@lines)=(<$f>);
-    unshift(@lines,$l);
+               $ct=read($F,$hdr,4);
 
-    close($f);
+               Msg(1,"Failed to read binary segment length"), return if $ct != 4;
 
-    Msg(1,"Font file '$file' must be an Adobe type 1 font file") if $lines[0]!~m/\%\!PS.Adobe/i;
-    $head=$body=$tail='';
+               my $sl=unpack('V',$hdr);
+               my $data;
+               my $chk=read($F,$data,$sl);
 
-    foreach my $line (@lines)
-    {
-       if (!defined($l1))
-       {
-           if (length($line) > 19 and $line=~s/^(currentfile eexec)//)
-           {
-               $head.=$1;
-               $l1=length($head);
-               redo;
-           }
-
-           $head.=$line;
+               Msg(1 ,"Failed to read binary segment"), return if $chk != $sl;
 
-           if ($line=~m/eexec$/)
-           {
-               #                               chomp($head);
-               #                               $head.="\x0d";
-               $l1=length($head);
-           }
-       }
-       elsif (!defined($l2))
-       {
-           #$line=~s/(\0\0)0+$/&1/;
-           if ($line=~m/^0+$/)
-           {
-               $l2=length($body);
-               $tail=$line;
+               $chunk.=$data;
            }
            else
            {
-               chomp($line);
-               $body.=pack('H*',$line);
+               # ascii chunk
+
+               my $hex=0;
+               seek($F,-2,1);
+               my $ct=0;
+
+               while (1)
+               {
+                   my $lin=<$F>;
+
+                   last if !$lin;
+
+                   $hex=1,$enc.=" hex" if $segno == 2 and !$ct and $lin=~m/^[A-F0-9a-f]{4,4}/;
+
+                   if ($segno !=2 and $lin=~m/^(.*$ascterm\n?)(.*)/)
+                   {
+                       $chunk.=$1;
+                       seek($F,-length($2)-1,1) if $2;
+                       last;
+                   }
+                   elsif ($segno == 2 and $lin=~m/^(.*?)($ascterm.*)/)
+                   {
+                       $chunk.=$1;
+                       seek($F,-length($2)-1,1) if $2;
+                       last;
+                   }
+
+                   chomp($lin), $lin=pack('H*',$lin) if $hex;
+                   $chunk.=$lin; $ct++;
+               }
+
+               last;
            }
        }
        else
        {
-           $tail.=$line;
+           push(@msg,"Failed to read 2 header bytes");
        }
     }
 
-    $l1=length($head);
-    $l2=length($body);
-    $l3=length($tail);
-
-    return($l1,$l2,$l3,"$head$body$tail");
+    return $chunk;
 }
 
-
 sub OutStream
 {
     my $ono=shift;
@@ -2298,11 +2492,54 @@ sub OutStream
 
 sub do_p
 {
+    my $trans='BLOCK';
+
+    $trans='PAGE' if $firstpause;
+    NewPage($trans);
+    @XOstream=();
+    @PageAnnots=();
+    $firstpause=1;
+}
+
+sub FixTrans
+{
+    my $t=shift;
+    my $style=$t->{S};
+
+    if ($style)
+    {
+       delete($t->{Dm}) if $style ne '/Split' and $style ne '/Blinds';
+       delete($t->{M})  if !($style eq '/Split' or $style eq '/Box' or $style eq '/Fly');
+       delete($t->{Di}) if !($style eq '/Wipe' or $style eq '/Glitter' or $style eq '/Fly' or $style eq '/Cover' or $style eq '/Uncover' or $style eq '/Push') or ($style eq '/Fly' and $t->{Di} eq '/None' and $t->{SS} != 1);
+       delete($t->{SS}) if !($style eq '/Fly');
+       delete($t->{B})  if !($style eq '/Fly');
+    }
+
+    return($t);
+}
+
+sub NewPage
+{
+    my $trans=shift;
     # Start of pages
 
     if ($cpageno > 0)
     {
+       if ($#XOstream>=0)
+       {
+           MakeXO() if $stream;
+           $stream=join("\n",@XOstream,'');
+       }
+
+       my %t=%{$transition->{$trans}};
        $cpage->{MediaBox}=\@mediabox if $custompaper;
+       $cpage->{Trans}=FixTrans(\%t) if $t{S};
+
+       if ($#PageAnnots >= 0)
+       {
+           @{$cpage->{Annots}}=@PageAnnots;
+       }
+
        PutObj($cpageno);
        OutStream($cpageno+1);
     }
@@ -2325,24 +2562,45 @@ sub do_p
     $objct+=1;
     $cpage=$obj[$cpageno]->{DATA};
     $pages->{'Count'}++;
-    $stream="q 1 0 0 1 0 0 cm\n$linejoin J\n$linecap j\n";
+    $stream="q 1 0 0 1 0 0 cm\n$linejoin J\n$linecap j\n0.4 w\n";
     $stream.=$strkcol."\n", $curstrk=$strkcol if $strkcol ne '';
     $mode='g';
     $curfill='';
 #    @mediabox=@defaultmb;
 }
 
+sub MakeXO
+{
+    $stream.="%mode=$mode\n";
+    IsGraphic();
+    $stream.="Q\n";
+    my $xobj=++$objct;
+    my $xonm="XO$xobj";
+    $pages->{'Resources'}->{'XObject'}->{$xonm}=BuildObj($xobj,{'Type' => '/XObject', 'BBox' => \@mediabox, 'Name' => "/$xonm", 'FormType' => 1, 'Subtype' => '/Form', 'Length' => 0, 'Type' => "/XObject"});
+    $obj[$xobj]->{STREAM}=$stream;
+    $stream='';
+    push(@XOstream,"q") if $#XOstream==-1;
+    push(@XOstream,"/$xonm Do");
+}
+
 sub do_f
 {
     my $par=shift;
+    my $fnt=$fontlst{$par}->{FNT};
 
 #      IsText();
     $cft="$par";
     $fontchg=1;
 #      $stream.="/F$cft $cftsz Tf\n" if $cftsz;
     $widtbl=CacheWid($par);
-    $origwidtbl=$fontlst{$par}->{FNT}->{WID};
-    $krntbl=$fontlst{$par}->{FNT}->{KERN};
+    $origwidtbl=[];
+
+    foreach my $w (@{$fnt->{NO}})
+    {
+       push(@{$origwidtbl},$fnt->{NAM}->{$w->[1]}->[WIDTH]);
+    }
+
+#     $krntbl=$fnt->{KERN};
 }
 
 sub CacheWid
@@ -2351,7 +2609,7 @@ sub CacheWid
 
     if (!defined($fontlst{$par}->{CACHE}->{$cftsz}))
     {
-       $fontlst{$par}->{CACHE}->{$cftsz}=BuildCache($fontlst{$par}->{FNT}->{WID});
+       $fontlst{$par}->{CACHE}->{$cftsz}=BuildCache($fontlst{$par}->{FNT});
     }
 
     return($fontlst{$par}->{CACHE}->{$cftsz});
@@ -2359,13 +2617,15 @@ sub CacheWid
 
 sub BuildCache
 {
-    my $wid=shift;
-    return([]);
+    my $fnt=shift;
     my @cwid;
+    $origwidtbl=[];
 
-    foreach my $w (@{$wid})
+    foreach my $w (@{$fnt->{NO}})
     {
-       push(@cwid,$w*$cftsz);
+       my $wid=(defined($w) and defined($w->[1]))?$fnt->{NAM}->{$w->[1]}->[WIDTH]:0;
+       push(@cwid,$wid*$cftsz);
+       push(@{$origwidtbl},$wid);
     }
 
     return(\@cwid);
@@ -2512,22 +2772,22 @@ sub set_col
     if ($mcmd eq 'c')
     {
        # Text CMY
-       return(($c[0]/65535).' '.($c[1]/65535).' '.($c[2]/65535)." 0 $oper[1]");
+       return(d3($c[0]/65535).' '.d3($c[1]/65535).' '.d3($c[2]/65535)." 0 $oper[1]");
     }
     elsif ($mcmd eq 'k')
     {
        # Text CMYK
-       return(($c[0]/65535).' '.($c[1]/65535).' '.($c[2]/65535).' '.($c[3]/65535)." $oper[1]");
+       return(d3($c[0]/65535).' '.d3($c[1]/65535).' '.d3($c[2]/65535).' '.d3($c[3]/65535)." $oper[1]");
     }
     elsif ($mcmd eq 'g')
     {
        # Text Grey
-       return(($c[0]/65535)." $oper[0]");
+       return(d3($c[0]/65535)." $oper[0]");
     }
     elsif ($mcmd eq 'r')
     {
        # Text RGB0
-       return(($c[0]/65535).' '.($c[1]/65535).' '.($c[2]/65535)." $oper[2]");
+       return(d3($c[0]/65535).' '.d3($c[1]/65535).' '.d3($c[2]/65535)." $oper[2]");
     }
 }
 
@@ -2683,7 +2943,7 @@ sub do_D
        $ypos+=$p[1];
        $stream.=PutXY($xpos,$ypos)." l\n";
 
-       $stream.="s\n";
+       $stream.="S\n";
        $poschg=1;
     }
     elsif ($Dcmd eq 't')
@@ -2866,6 +3126,16 @@ sub PutLine
     $pendmv-=$nomove;
     $lin[$#lin]->[1]=-$pendmv/$cftsz if ($pendmv != 0);
 
+    foreach my $wd (@lin)
+    {
+       next if !defined($wd->[0]);
+       $wd->[0]=~s/\\/\\\\/g;
+       $wd->[0]=~s/\(/\\(/g;
+       $wd->[0]=~s/\)/\\)/g;
+       $wd->[0]=~s/!\|!\|/\\/g;
+       $wd->[1]=d3($wd->[1]);
+    }
+
     if (0)
     {
        if (scalar(@lin) == 1 and (!defined($lin[0]->[1]) or $lin[0]->[1] == 0))
@@ -2967,6 +3237,11 @@ sub PutLine
     $wt=-1;
 }
 
+sub d3
+{
+    return(sprintf("%.3f",shift || 0));
+}
+
 sub  LoadAhead
 {
     my $no=shift;
@@ -3005,11 +3280,11 @@ sub do_V
     {
        $xpos=substr($ahead[0],1)/$unitwidth;
 
+       $nomove=$pendmv=0;
        @ahead=();
 
     }
 
-#    $nomove=$pendmv=0;
     $poschg=1;
 }
 
@@ -3017,7 +3292,7 @@ sub do_v
 {
     my $par=shift;
 
-    PutLine();
+    PutLine() if $mode eq 't';
 
     $ypos+=$par/$unitwidth;
 
@@ -3027,6 +3302,7 @@ sub do_v
 sub TextWid
 {
     my $txt=shift;
+    my $fnt=shift;
     my $w=0;
     my $ck=0;
 
@@ -3045,6 +3321,7 @@ sub TextWid
 sub do_t
 {
     my $par=shift;
+    my $fnt=$fontlst{$cft}->{FNT};
 
     if ($kernadjust != $curkern)
     {
@@ -3053,9 +3330,44 @@ sub do_t
        $curkern=$kernadjust;
     }
 
-    my $wid=TextWid($par);
+    my $par2=$par;
+    $par2=~s/^!\|!\|(\d\d\d)/chr(oct($1))/e;
+
+    foreach my $j (0..length($par2)-1)
+    {
+       my $cn=ord(substr($par2,$j,1));
+       my $chnm=$fnt->{NAM}->{$fnt->{NO}->[$cn]->[1]};
+
+       if ($chnm->[USED]==0)
+       {
+           $chnm->[USED]=1;
+       }
+       elsif ($fnt->{NO}->[$cn]->[0] ne $fnt->{NO}->[$cn]->[1])
+       {
+           # A glyph has already been remapped to this char, so find a spare
+
+           my $cn2=RemapChr($cn,$fnt,$fnt->{NO}->[$cn]->[0]);
+           $stream.="% MMM Remap $cn to $cn2\n" if $debug;
+
+           if ($cn2)
+           {
+               substr($par2,$j,1)=chr($cn2);
+
+               if ($par=~m/^!\|!\|(\d\d\d)/)
+               {
+                   substr($par,4,3)=sprintf("%03o",$cn2);
+               }
+               else
+               {
+                   substr($par,$j,1)=chr($cn2);
+               }
+           }
+       }
+    }
+    my $wid=TextWid($par2,$fnt);
+
+    $par=reverse(split('',$par)) if $xrev and $par!~m/^!\|!\|(\d\d\d)/;
 
-    $par=reverse(split('',$par)) if $xrev;
     if ($n_flg and defined($mark))
     {
        $mark->{ypos}=$ypos;
@@ -3069,9 +3381,6 @@ sub do_t
     $xpos+=($pendmv-$nomove)/$unitwidth;
 
     $stream.="% == '$par'=$wid 'xpos=$xpos\n" if $debug;
-    $par=~s/\\(?!\d\d\d)/\\\\/g;
-    $par=~s/\)/\\)/g;
-    $par=~s/\(/\\(/g;
 
     # $pendmv = 'h' move since last 't'
     # $nomove = width of char(s) added by 'C', 'N' or 'c'
@@ -3181,12 +3490,11 @@ sub do_H
 sub do_C
 {
     my $par=shift;
-    my $nm;
 
-    ($par,$nm)=FindChar($par);
+    my ($par2,$nm)=FindChar($par);
 
-    do_t($par);
-    $nomove=$nm;
+    do_t($par2);
+    $nomove=$fontlst{$cft}->{FNT}->{NAM}->{$par}->[WIDTH]*$cftsz ;
 }
 
 sub FindChar
@@ -3194,12 +3502,13 @@ sub FindChar
     my $chnm=shift;
     my $fnt=$fontlst{$cft}->{FNT};
 
-    if (exists($fnt->{GNM}->{$chnm}))
+    if (exists($fnt->{NAM}->{$chnm}))
     {
-       my $ch=$fnt->{GNM}->{$chnm};
+       my $ch=$fnt->{NAM}->{$chnm}->[ASSIGNED];
        $ch=RemapChr($ch,$fnt,$chnm) if ($ch > 255);
+       $fnt->{NAM}->{$chnm}->[USED]=0 if $fnt->{NO}->[$ch]->[1] eq $chnm;
 
-       return(($ch<32)?sprintf("\\%03o",$ch):chr($ch),$fnt->{WID}->[$ch]*$cftsz);
+       return(($ch<32)?sprintf("!|!|%03o",$ch):chr($ch),$widtbl->[$ch]);
     }
     else
     {
@@ -3214,17 +3523,33 @@ sub RemapChr
     my $chnm=shift;
     my $unused=0;
 
-    foreach my $un (2..$#{$fnt->{GNO}})
+    foreach my $un (0..$#{$fnt->{NO}})
+    {
+       next if $un >= 139 and $un <= 144;
+       $unused=$un,last if $fnt->{NO}->[$un]->[1] eq '';
+    }
+
+    if (!$unused)
     {
-       $unused=$un,last if $fnt->{GNO}->[$un] eq '/.notdef';
+       foreach my $un (128..255)
+       {
+           next if $un >= 139 and $un <= 144;
+           my $glyph=$fnt->{NO}->[$un]->[1];
+           $unused=$un,last if $fnt->{NAM}->{$glyph}->[USED] == 0;
+       }
     }
 
-    if (--$unused <= 255)
+    if ($unused && $unused <= 255)
     {
-       $fnt->{GNM}->{$chnm}=$unused++;
-       $fnt->{GNO}->[$unused]=$fnt->{GNO}->[$ch+1];
-       $fnt->{WID}->[$unused]=$fnt->{WID}->[$ch+1];
-       $ch=$unused-1;
+       my $glyph=$fnt->{NO}->[$unused]->[1];
+       delete($fontlst{$cft}->{CACHE}->{$cftsz});
+       $fnt->{NAM}->{$chnm}->[ASSIGNED]=$unused;
+       $fnt->{NO}->[$unused]->[1]=$chnm;
+       $widtbl=CacheWid($cft);
+
+       $stream.="% AAA Assign $chnm ($ch) to $unused\n" if $debug;
+
+       $ch=$unused;
        return($ch);
     }
     else
@@ -3242,34 +3567,27 @@ sub do_c
     $par=substr($par,0,1);
     my $ch=ord($par);
     do_N($ch);
-    $nomove=$fontlst{$cft}->{FNT}->{WID}->[$ch]*$cftsz;
 }
 
 sub do_N
 {
     my $par=shift;
+    my $fnt=$fontlst{$cft}->{FNT};
 
-    if ($par > 255)
+    if (!defined($fnt->{NO}->[$par]))
     {
-       my $fnt=$fontlst{$cft}->{FNT};
-       my $chnm='';
-
-       foreach my $c (keys %{$fnt->{GNM}})
-       {
-           $chnm=$c,last if $fnt->{GNM}->{$c} == $par;
-       }
-
-       $par=RemapChr($par,$fnt,$chnm);
+       Msg(0,"No chr($par) in font $fnt->{internalname}");
+       return;
     }
 
-    do_t(chr($par));
-    $nomove=$fontlst{$cft}->{FNT}->{WID}->[$par]*$cftsz;
+    my $chnm=$fnt->{NO}->[$par]->[0];
+    do_C($chnm);
 }
 
 sub do_n
 {
     $gotT=0;
-    PutLine();
+    PutLine(0);
     $pendmv=$nomove=0;
     $n_flg=1;
     @lin=();
diff --git a/src/devices/gropdf/pdfmom.1.man b/src/devices/gropdf/pdfmom.1.man
new file mode 100644 (file)
index 0000000..d25abaf
--- /dev/null
@@ -0,0 +1,190 @@
+.TH PDFMOM @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+pdfmom \- produce PDF documents using the mom macro package for groff
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2012-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY pdfmom
+.OP \-Tpdf
+.RI [ groff-options ]
+.I file
+\&.\|.\|.\&
+.YS
+.
+.SY pdfmom
+.B \-Tps
+.RI [ pdfroff-options ]
+.RI [ groff-options ]
+.I file
+\&.\|.\|.\&
+.YS
+.
+.SY pdfmom
+.B \-v
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I pdfmom
+is a wrapper around
+.IR groff (@MAN1EXT@)
+that facilitates the production of PDF documents from files
+formatted with the
+.I mom
+macros.
+.
+.
+.P
+.I pdfmom
+prints to the standard output,
+so output must usually be redirected to a destination file.
+The size of the final PDF can be reduced by piping the output
+through
+.IR ps2pdf (1).
+.
+.
+.P
+If called with the
+.B \-Tpdf
+option (which is the default),
+.I pdfmom
+processes files using groff's native PDF driver,
+.IR gropdf (@MAN1EXT@).
+.
+If
+.B \-Tps
+is given, processing is passed over to
+.IR pdfroff ,
+which uses
+.IR groff 's
+PostScript driver.
+.
+In either case, multiple runs of the source file are performed in
+order to satisfy any forward references in the document.
+.
+.
+.P
+.I pdfmom
+accepts all the same options as
+.IR groff .
+If
+.B \-Tps
+is given, the options associated with
+.I pdfroff
+are accepted as well.
+.
+Please note that when
+.I pdfmom
+calls
+.IR pdfroff ,
+the
+.RS
+.B \-mpdfmark \-mom \-\-no-toc
+.RE
+options are implied and should not be given on the
+command line.
+.
+Equally, it is not necessary to supply the
+.B \-mom
+or
+.B "\-m\~mom"
+options when
+.B \-Tps
+is absent.
+.
+.
+.P
+PDF integration with the
+.I mom
+macros is discussed in full in the manual
+.IR "Producing PDFs with groff and mom" ,
+which was itself produced with
+.IR pdfmom .
+.
+.
+.P
+If called with the
+.B \-v
+option,
+.I pdfmom
+simply displays its version information and exits.
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+.
+.I pdfmom
+sometimes issues warnings of the type
+.RS
+\&.\|.\|.:
+can't transparently output node at top level
+.RE
+.
+but this is more of an annoyance than a bug, and may safely be ignored.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+.I pfdmom
+was written by
+.MT deri@\:chuzzlewit.demon.co.uk
+Deri James
+.ME
+and
+.MT peter@\:schaffter.ca
+Peter Schaffter
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR "Producing PDFs with groff and mom" ,
+by Deri James and Peter Schaffter;
+a copy is installed at
+.IR \%@PDFDOCDIR@/\:mom\-pdf.pdf .
+.
+.
+.P
+.IR groff (@MAN1EXT@),
+.IR gropdf (@MAN1EXT@),
+.IR pdfroff (@MAN1EXT@),
+.IR ps2pdf (1)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/devices/gropdf/pdfmom.man b/src/devices/gropdf/pdfmom.man
deleted file mode 100644 (file)
index c93ed22..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-.TH PDFMOM @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-pdfmom \- Produce PDF documents using the mom macro set
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2012-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.de au
-This document was written by
-.MT deri@chuzzlewit.demon.co.uk
-Deri James
-.ME
-and
-.MT peter@schaffter.ca
-Peter Schaffter
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY pdfmom
-.OP \-Tps "\fR[pdfroff options]"
-[groff options]
-.I files .\|.\|.
-.YS
-.
-.SY pdfmom
-.OP \-Tpdf
-[groff options]
-.I files .\|.\|.
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B pdfmom
-is a wrapper around
-.B groff
-that facilitates the production of PDF documents from files
-formatted with the mom macros.
-.
-.
-.P
-.B pdfmom
-prints to stdout, so output must be redirected to a destination
-file.  The size of the final PDF can be reduced by piping the output
-through
-.BR ps2pdf .
-.
-.
-.P
-If called with the
-.B \-Tpdf
-option (which is the default),
-.B pdfmom
-processes files using groff\[aq]s native PDF driver,
-.BR gropdf .
-.
-If
-.B \-Tps
-is given, processing is passed over to
-.BR pdfroff ,
-which uses
-.BR groff \[aq]s
-PostScript driver.
-.
-In either case, multiple runs of the source file are peformed in
-order to satisfy any forward references in the document.
-.
-.
-.P
-.B pdfmom
-accepts all the same options as
-.BR groff .
-If
-.B \-Tps
-is given, the options associated with
-.B pdfroff
-are accepted as well.
-.
-Please note that when
-.B pdfmom
-calls
-.BR pdfroff ,
-the
-.
-.P
-.RS
-.B \-mpdfmark \-mom \-\-no-toc
-.RE
-.
-.
-.P
-options are implied and should not be given on the
-command line.
-.
-Equally, it is not necessary to supply the
-.B \-mom
-or
-.B "\-m\~mom"
-options when
-.B \-Tps
-is absent.
-.
-.
-.P
-PDF integration with the
-.B mom
-macros is discussed in full in the PDF manual,
-.IR "Producing PDFs with groff and mom" .
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-.B pdfmom
-sometimes issues warnings of the type
-.
-.P
-.RS 2
-\&.\|.\|.:
-.B can\[aq]t transparently output node at top level
-.RE
-.
-.P
-This is more of an annoyance than a bug, and may safely be ignored.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff (@MAN1EXT@),
-.BR pdfroff (@MAN1EXT@),
-.BR ps2pdf (@MAN1EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index beec82050dd60e7ccae4e73028eaa4517669e89e..c9b08b2359c0b14ba246ad82e8730bec9c1ba269 100644 (file)
@@ -4,8 +4,7 @@
 #      Deri James      : Friday 16 Mar 2012
 #
 
-# Copyright (C) 2012-2014
-#      Free Software Foundation, Inc.
+# Copyright (C) 2012-2018 Free Software Foundation, Inc.
 #      Written by Deri James <deri@chuzzlewit.demon.co.uk>
 #
 # This file is part of groff.
@@ -21,7 +20,7 @@
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 use strict;
 use File::Temp qw/tempfile/;
@@ -29,8 +28,9 @@ my @cmd;
 my $dev='pdf';
 my $preconv='';
 my $readstdin=1;
+my $RT_SEP='@RT_SEP@';
 
-$ENV{PATH}=$ENV{GROFF_BIN_PATH}.':'.$ENV{PATH} if exists($ENV{GROFF_BIN_PATH});
+$ENV{PATH}=$ENV{GROFF_BIN_PATH}.$RT_SEP.$ENV{PATH} if exists($ENV{GROFF_BIN_PATH});
 $ENV{TMPDIR}=$ENV{GROFF_TMPDIR} if exists($ENV{GROFF_TMPDIR});
 
 while (my $c=shift)
@@ -122,11 +122,11 @@ if ($readstdin)
 
 if ($dev eq 'pdf')
 {
-    system("groff -Tpdf -dPDF.EXPORT=1 -mom -z $cmdstring 2>&1 | grep '^\.ds' | groff -Tpdf -mom - $preconv $cmdstring");
+    system("groff -Tpdf -dLABEL.REFS=1 -mom -z $cmdstring 2>&1 | LC_ALL=C grep '^\\. *ds' | groff -Tpdf -dPDF.EXPORT=1 -dLABEL.REFS=1 -mom -z - $cmdstring 2>&1 | LC_ALL=C grep '^\\. *ds' | groff -Tpdf -mom $preconv - $cmdstring");
 }
 elsif ($dev eq 'ps')
 {
-    system("pdfroff -mpdfmark -mom --no-toc $cmdstring");
+    system("groff -Tpdf -dLABEL.REFS=1 -mom -z $cmdstring 2>&1 | LC_ALL=C grep '^\\. *ds' | pdfroff -mpdfmark -mom --no-toc - $preconv $cmdstring");
 }
 elsif ($dev eq '-z') # pseudo dev - just compile for warnings
 {
diff --git a/src/devices/grops/Makefile.sub b/src/devices/grops/Makefile.sub
deleted file mode 100644 (file)
index 87eb54f..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# Makefile.sub for `grops'
-#
-# File position: <groff-source>/src/devices/grops/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grops$(EXEEXT)
-MAN1=grops.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=\
-  ps.$(OBJEXT) \
-  psrm.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/ps.cpp \
-  $(srcdir)/psrm.cpp
-HDRS=\
-  $(srcdir)/ps.h
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/devices/grops/grops.1.man b/src/devices/grops/grops.1.man
new file mode 100644 (file)
index 0000000..8d730ba
--- /dev/null
@@ -0,0 +1,1509 @@
+.TH GROPS @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+grops \- PostScript driver for groff
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr grops_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.de FT
+.  if '\\*(.T'ps' .ft \\$1
+.  if '\\*(.T'pdf' .ft \\$1
+..
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY grops
+.OP \-glmv
+.OP \-b n
+.OP \-c n
+.OP \-F dir
+.OP \-I dir
+.OP \-p papersize
+.OP \-P prologue
+.OP \-w n
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B grops
+translates the output of GNU
+.B troff
+to PostScript.
+.
+Normally
+.B grops
+should be invoked by using the groff command with a
+.B \-Tps
+option.
+.
+.if '@DEVICE@'ps' (Actually, this is the default for groff.)
+.
+If no files are given,
+.B grops
+reads the standard input.
+.
+A filename of
+.B \-
+also causes
+.B grops
+to read the standard input.
+.
+PostScript output is written to the standard output.
+.
+When
+.B grops
+is run by
+.B groff
+options can be passed to
+.B grops
+using
+.BR groff 's
+.B \-P
+option.
+.
+.
+.LP
+Note that
+.B grops
+doesn't produce a valid document structure (conforming to the
+Document Structuring Convention) if called with multiple file
+arguments.
+.
+To print such concatenated output it is necessary to deactivate DSC
+handling in the printing program or previewer.
+.
+See section \[lq]Font Installation\[rq] below for a guide how to install
+fonts for
+.BR grops .
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.BI \-b n
+Provide workarounds for older printers, broken spoolers, and previewers.
+.
+Normally
+.B grops
+produces output at PostScript LanguageLevel\~2 that conforms to the
+Document Structuring Conventions version 3.0.
+.
+Some older printers, spoolers, and previewers can't handle such
+output.
+.
+The value of\~\c
+.I n
+controls what
+.B grops
+does to make its output acceptable to such programs.
+.
+A value of\~0 causes grops not to employ any workarounds.
+.
+.IP
+Add\~1 if no
+.B %%Begin\%Document\%Setup
+and
+.B %%End\%Document\%Setup
+comments should be generated;
+this is needed for early versions of TranScript that get confused by
+anything between the
+.B %%End\%Prolog
+comment and the first
+.B %%Page
+comment.
+.
+.IP
+Add\~2 if lines in included files beginning with
+.B %!\&
+should be stripped out; this is needed for Sun's pageview
+previewer.
+.
+.IP
+Add\~4 if
+.BR %%Page ,
+.B %%Trailer
+and
+.B %%End\%Prolog
+comments should be
+stripped out of included files; this is needed for spoolers that
+don't understand the
+.B %%Begin\%Document
+and
+.B %%End\%Document
+comments.
+.
+.IP
+Add\~8 if the first line of the PostScript output should be
+.B %!PS-Adobe-2.0
+rather than
+.BR %!PS-Adobe-3.0 ;
+this is needed when using Sun's Newsprint with a printer that
+requires page reversal.
+.
+.IP
+Add\~16 if no media size information should be included in the
+document (this is, neither use
+.B %%Document\%Media
+nor the
+.B setpagedevice
+PostScript command).
+.
+This was the behaviour of groff version 1.18.1 and earlier; it is
+needed for older printers which don't understand PostScript
+LanguageLevel\~2.
+.
+It is also necessary if the output is further processed to get an
+encapsulated PS (EPS) file \[en] see below.
+.
+.IP
+The default value can be specified by a
+.
+.RS
+.IP
+.BI broken\  n
+.
+.LP
+command in the
+.I DESC
+file.
+.
+Otherwise the default value is\~0.
+.RE
+.
+.TP
+.BI \-c n
+Print
+.I n
+copies of each page.
+.
+.TP
+.BI \-F dir
+Prepend directory
+.RI dir /dev name
+to the search path for prologue, font, and device description files;
+.I name
+is the name of the device, usually
+.BR ps .
+.
+.TP
+.B \-g
+Guess the page length.
+.
+This generates PostScript code that guesses the page length.
+.
+The guess is correct only if the imageable area is vertically
+centered on the page.
+.
+This option allows you to generate documents that can be printed
+both on letter (8.5\[mu]11) paper and on A4 paper without change.
+.
+.TP
+.BI \-I dir
+This option may be used to add a directory to the search path for
+files on the command line and files named in
+.B \[rs]X'ps: import'
+and
+.B \[rs]X'ps: file'
+escapes.
+.
+The search path is initialized with the current directory.
+.
+This option may be specified more than once; the directories are then
+searched in the order specified (but before the current directory).
+.
+If you want to make the current directory be read before other directories,
+add
+.B \-I.\&
+at the appropriate place.
+.
+.IP
+No directory search is performed for files with an absolute file name.
+.
+.TP
+.B \-l
+Print the document in landscape format.
+.
+.TP
+.B \-m
+Turn manual feed on for the document.
+.
+.TP
+.BI \-p paper-size
+Set physical dimension of output medium.
+.
+This overrides the
+.BR papersize ,
+.BR paperlength ,
+and
+.B paperwidth
+commands in the
+.I DESC
+file; it accepts the same arguments as the
+.B papersize
+command.
+.
+See
+.B groff_font (@MAN5EXT@)
+for details.
+.
+.TP
+.BI \-P prologue-file
+Use the file
+.I prologue-file
+(in the font path) as the prologue instead of the default prologue file
+.BR prologue .
+.
+This option overrides the environment variable
+.I GROPS_PROLOGUE.
+.
+.TP
+.BI \-w n
+Lines should be drawn using a thickness of
+.IR n \~\c
+thousandths of an em.
+.
+If this option is not given, the line thickness defaults to 0.04\~em.
+.
+.TP
+.B \-v
+Print the version number.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+The input to
+.B grops
+must be in the format output by
+.BR @g@troff (@MAN1EXT@).
+.
+This is described in
+.BR groff_out (@MAN5EXT@).
+.
+.LP
+In addition, the device and font description files for the device used
+must meet certain requirements:
+.
+The resolution must be an integer multiple of\~72 times the
+.BR sizescale .
+.
+The
+.B ps
+device uses a resolution of 72000 and a sizescale of 1000.
+.
+.
+.LP
+The device description file must contain a valid paper size; see
+.BR groff_font (@MAN5EXT@)
+for more information.
+.
+.
+.LP
+Each font description file must contain a command
+.IP
+.BI internalname\  psname
+.LP
+which says that the PostScript name of the font is
+.IR psname .
+.
+It may also contain a command
+.IP
+.BI encoding\  enc_file
+.LP
+which says that
+the PostScript font should be reencoded using the encoding described in
+.IR enc_file ;
+this file should consist of a sequence of lines of the form:
+.IP
+.I
+pschar code
+.LP
+where
+.I pschar
+is the PostScript name of the character,
+and
+.I code
+is its position in the encoding expressed as a decimal integer; valid
+values are in the range 0 to\~255.
+.
+Lines starting with
+.B #
+and blank lines are ignored.
+.
+The code for each character given in the font file must correspond
+to the code for the character in encoding file, or to the code in the default
+encoding for the font if the PostScript font is not to be reencoded.
+.
+This code can be used with the
+.B \[rs]N
+escape sequence in
+.B troff
+to select the character,
+even if the character does not have a groff name.
+.
+Every character in the font file must exist in the PostScript font, and
+the widths given in the font file must match the widths used
+in the PostScript font.
+.
+.B grops
+assumes that a character with a groff name of
+.B space
+is blank (makes no marks on the page);
+it can make use of such a character to generate more efficient and
+compact PostScript output.
+.
+.
+.LP
+Note that
+.B grops
+is able to display all glyphs in a PostScript font, not only 256.
+.I enc_file
+(or the default encoding if no encoding file specified) just defines the
+order of glyphs for the first 256 characters; all other glyphs are
+accessed with additional encoding vectors which
+.B grops
+produces on the fly.
+.
+.
+.LP
+.B grops
+can automatically include the downloadable fonts necessary
+to print the document.
+.
+Such fonts must be in PFA format.
+.
+Use
+.BR \%pfbtops (@MAN1EXT@)
+to convert a Type\~1 font in PFB format.
+.
+Any downloadable fonts which should, when required, be included by
+.B grops
+must be listed in the file
+.IR @FONTDIR@/devps/download ;
+this should consist of lines of the form
+.
+.IP
+.I
+font filename
+.
+.
+.LP
+where
+.I font
+is the PostScript name of the font,
+and
+.I filename
+is the name of the file containing the font;
+lines beginning with
+.B #
+and blank lines are ignored;
+fields may be separated by tabs or spaces;
+.I filename
+is searched for using the same mechanism that is used
+for groff font metric files.
+.
+The
+.I download
+file itself is also searched for using this mechanism;
+currently, only the first found file in the font path is used.
+.
+.
+.LP
+If the file containing a downloadable font or imported document
+conforms to the Adobe Document Structuring Conventions,
+then
+.B grops
+interprets any comments in the files sufficiently to ensure that its
+own output is conforming.
+.
+It also supplies any needed font resources that are listed in the
+.I download
+file
+as well as any needed file resources.
+.
+It is also able to handle inter-resource dependencies.
+.
+For example, suppose that you have a downloadable font called
+Garamond, and also a downloadable font called Garamond-Outline which
+depends on Garamond (typically it would be defined to copy
+Garamond's font dictionary, and change the PaintType), then it is
+necessary for Garamond to appear before Garamond-Outline in the
+PostScript document.
+.
+.B grops
+handles this automatically provided that the downloadable font file
+for Garamond-Outline indicates its dependence on Garamond by means of
+the Document Structuring Conventions, for example by beginning with
+the following lines
+.
+.IP
+.B
+%!PS-Adobe-3.0 Resource-Font
+.br
+.B
+%%DocumentNeededResources: font Garamond
+.br
+.B
+%%EndComments
+.br
+.B
+%%IncludeResource: font Garamond
+.
+.
+.LP
+In this case both Garamond and Garamond-Outline would need to be listed
+in the
+.I download
+file.
+.
+A downloadable font should not include its own name in a
+.B %%Document\%Supplied\%Resources
+comment.
+.
+.
+.LP
+.B grops
+does not interpret
+.B %%Document\%Fonts
+comments.
+.
+The
+.BR %%Document\%Needed\%Resources ,
+.BR %%Document\%Supplied\%Resources ,
+.BR %%Include\%Resource ,
+.BR %%Begin\%Resource ,
+and
+.B %%End\%Resource
+comments
+(or possibly the old
+.BR %%Document\%Needed\%Fonts ,
+.BR %%Document\%Supplied\%Fonts ,
+.BR %%Include\%Font ,
+.BR %%Begin\%Font ,
+and
+.B %%End\%Font
+comments)
+should be used.
+.
+.
+.LP
+In the default setup
+there are styles called
+.BR R ,
+.BR I ,
+.BR B ,
+and
+.B BI
+mounted at font positions 1 to\~4.
+.
+The fonts are grouped into families
+.BR A ,
+.BR BM ,
+.BR C ,
+.BR H ,
+.BR HN ,
+.BR N ,
+.BR P ,
+and\~\c
+.B T
+having members in each of these styles:
+.
+.RS
+.TP
+.B AR
+.FT AR
+AvantGarde-Book
+.FT
+.
+.TQ
+.B AI
+.FT AI
+AvantGarde-BookOblique
+.FT
+.
+.TQ
+.B AB
+.FT AB
+AvantGarde-Demi
+.FT
+.
+.TQ
+.B ABI
+.FT ABI
+AvantGarde-DemiOblique
+.FT
+.
+.TQ
+.B BMR
+.FT BMR
+Bookman-Light
+.FT
+.
+.TQ
+.B BMI
+.FT BMI
+Bookman-LightItalic
+.FT
+.
+.TQ
+.B BMB
+.FT BMB
+Bookman-Demi
+.FT
+.
+.TQ
+.B BMBI
+.FT BMBI
+Bookman-DemiItalic
+.FT
+.
+.TQ
+.B CR
+.FT CR
+Courier
+.FT
+.
+.TQ
+.B CI
+.FT CI
+Courier-Oblique
+.FT
+.
+.TQ
+.B CB
+.FT CB
+Courier-Bold
+.FT
+.
+.TQ
+.B CBI
+.FT CBI
+Courier-BoldOblique
+.FT
+.
+.TQ
+.B HR
+.FT HR
+Helvetica
+.FT
+.
+.TQ
+.B HI
+.FT HI
+Helvetica-Oblique
+.FT
+.
+.TQ
+.B HB
+.FT HB
+Helvetica-Bold
+.FT
+.
+.TQ
+.B HBI
+.FT HBI
+Helvetica-BoldOblique
+.FT
+.
+.TQ
+.B HNR
+.FT HNR
+Helvetica-Narrow
+.FT
+.
+.TQ
+.B HNI
+.FT HNI
+Helvetica-Narrow-Oblique
+.FT
+.
+.TQ
+.B HNB
+.FT HNB
+Helvetica-Narrow-Bold
+.FT
+.
+.TQ
+.B HNBI
+.FT HNBI
+Helvetica-Narrow-BoldOblique
+.FT
+.
+.TQ
+.B NR
+.FT NR
+NewCenturySchlbk-Roman
+.FT
+.
+.TQ
+.B NI
+.FT NI
+NewCenturySchlbk-Italic
+.FT
+.
+.TQ
+.B NB
+.FT NB
+NewCenturySchlbk-Bold
+.FT
+.
+.TQ
+.B NBI
+.FT NBI
+NewCenturySchlbk-BoldItalic
+.FT
+.
+.TQ
+.B PR
+.FT PR
+Palatino-Roman
+.FT
+.
+.TQ
+.B PI
+.FT PI
+Palatino-Italic
+.FT
+.
+.TQ
+.B PB
+.FT PB
+Palatino-Bold
+.FT
+.
+.TQ
+.B PBI
+.FT PBI
+Palatino-BoldItalic
+.FT
+.
+.TQ
+.B TR
+.FT TR
+Times-Roman
+.FT
+.
+.TQ
+.B TI
+.FT TI
+Times-Italic
+.FT
+.
+.TQ
+.B TB
+.FT TB
+Times-Bold
+.FT
+.
+.TQ
+.B TBI
+.FT TBI
+Times-BoldItalic
+.FT
+.RE
+.
+.
+.LP
+There is also the following font which is not a member of a family:
+.
+.RS
+.TP
+.B ZCMI
+.FT ZCMI
+ZapfChancery-MediumItalic
+.FT
+.RE
+.
+.
+.LP
+There are also some special fonts called
+.B S
+for the PS Symbol font, and
+.BR SS ,
+containing slanted lowercase Greek letters taken from PS Symbol.
+.
+Zapf Dingbats is available as
+.BR ZD ,
+and a reversed version of ZapfDingbats (with symbols pointing in the opposite
+direction) is available as
+.BR ZDR ;
+most characters in these fonts are unnamed and must be accessed using
+.BR \[rs]N .
+.
+.
+.LP
+The default color for
+.B \[rs]m
+and
+.B \[rs]M
+is black; for colors defined in the \[oq]rgb\[cq] color space
+.B setrgbcolor
+is used, for \[oq]cmy\[cq] and \[oq]cmyk\[cq]
+.BR setcmykcolor ,
+and for \[oq]gray\[cq]
+.BR setgray .
+.
+Note that
+.B setcmykcolor
+is a PostScript LanguageLevel\~2 command and thus not available on some
+older printers.
+.
+.
+.LP
+.B grops
+understands various X\~commands produced using the
+.B \[rs]X
+escape sequence;
+.B grops
+only interprets commands that begin with a
+.B ps:
+tag.
+.
+.TP
+.BI \[rs]X'ps:\ exec\  code '
+This executes the arbitrary PostScript commands in
+.IR code .
+.
+The PostScript currentpoint is set to the position of the
+.B \[rs]X
+command before executing
+.IR code .
+.
+The origin is at the top left corner of the page,
+and y\~coordinates increase down the page.
+.
+A procedure\~\c
+.B u
+is defined that converts groff units to the coordinate system in
+effect (provided the user doesn't change the scale).
+.
+For example,
+.
+.RS
+.IP
+.B
+\&.nr x 1i
+.br
+.B
+\[rs]X'ps: exec \[rs]nx u 0 rlineto stroke'
+.br
+.RE
+.
+.IP
+draws a horizontal line one inch long.
+.
+.I code
+may make changes to the graphics state,
+but any changes persist only to the end of the page.
+.
+A dictionary containing the definitions specified by the
+.B def
+and
+.B mdef
+is on top of the dictionary stack.
+.
+If your code adds definitions to this dictionary,
+you should allocate space for them using
+.BI \[rs]X'ps\ mdef \ n '\fR.
+.
+Any definitions persist only until the end of the page.
+.
+If you use the
+.B \[rs]Y
+escape sequence with an argument that names a macro,
+.I code
+can extend over multiple lines.
+.
+For example,
+.
+.RS
+.IP
+.nf
+.ft B
+\&.nr x 1i
+\&.de y
+\&ps: exec
+\&\[rs]nx u 0 rlineto
+\&stroke
+\&..
+\&\[rs]Yy
+.ft R
+.fi
+.
+.LP
+is another way to draw a horizontal line one inch long.
+.
+Note the single backslash before \[oq]nx\[cq] \[en] the only reason to
+use a number register while defining the macro \[oq]y\[cq] is to
+convert a user-specified dimension \[oq]1i\[cq] to internal groff
+units which are in turn converted to PS units with the
+.B u
+procedure.
+.
+.
+.LP
+.B grops
+wraps user-specified PostScript code into a dictionary, nothing more.
+.
+In particular, it doesn't start and end the inserted code with
+.B save
+and
+.BR restore ,
+respectively.
+.
+This must be supplied by the user, if necessary.
+.
+.RE
+.
+.TP
+.BI \[rs]X'ps:\ file\  name '
+This is the same as the
+.B exec
+command except that the PostScript code is read from file
+.IR name .
+.
+.TP
+.BI \[rs]X'ps:\ def\  code '
+Place a PostScript definition contained in
+.I code
+in the prologue.
+.
+There should be at most one definition per
+.B \[rs]X
+command.
+.
+Long definitions can be split over several
+.B \[rs]X
+commands;
+all the
+.I code
+arguments are simply joined together separated by newlines.
+.
+The definitions are placed in a dictionary which is automatically
+pushed on the dictionary stack when an
+.B exec
+command is executed.
+.
+If you use the
+.B \[rs]Y
+escape sequence with an argument that names a macro,
+.I code
+can extend over multiple lines.
+.
+.TP
+.BI \[rs]X'ps:\ mdef\  n\ code  '
+Like
+.BR def ,
+except that
+.I code
+may contain up to
+.IR n \~\c
+definitions.
+.
+.B grops
+needs to know how many definitions
+.I code
+contains
+so that it can create an appropriately sized PostScript dictionary
+to contain them.
+.
+.TP
+.BI \[rs]X'ps:\ import\  file\ llx\ lly\ urx\ ury\ width\ \fR[\fP\ height\ \fR]\fP '
+Import a PostScript graphic from
+.IR file .
+.
+The arguments
+.IR llx ,
+.IR lly ,
+.IR urx ,
+and
+.I ury
+give the bounding box of the graphic in the default PostScript
+coordinate system; they should all be integers;
+.I llx
+and
+.I lly
+are the x and y\~coordinates of the lower left
+corner of the graphic;
+.I urx
+and
+.I ury
+are the x and y\~coordinates of the upper right corner of the graphic;
+.I width
+and
+.I height
+are integers that give the desired width and height in groff
+units of the graphic.
+.
+.IP
+The graphic is scaled so that it has this width and height
+and translated so that the lower left corner of the graphic is
+located at the position associated with
+.B \[rs]X
+command.
+.
+If the height argument is omitted it is scaled uniformly in the
+x and y\~directions so that it has the specified width.
+.
+.IP
+Note that the contents of the
+.B \[rs]X
+command are not interpreted by
+.BR troff ;
+so vertical space for the graphic is not automatically added,
+and the
+.I width
+and
+.I height
+arguments are not allowed to have attached scaling indicators.
+.
+.IP
+If the PostScript file complies with the Adobe Document Structuring
+Conventions and contains a
+.B %%Bounding\%Box
+comment, then the bounding box can be automatically
+extracted from within groff by using the
+.B psbb
+request.
+.
+.IP
+See
+.BR groff_tmac (@MAN5EXT@)
+for a description of the
+.B PSPIC
+macro which provides a convenient high-level interface for inclusion of
+PostScript graphics.
+.
+.TP
+.B \[rs]X'ps:\ invis'
+.TQ
+.B \[rs]X'ps:\ endinvis'
+No output is generated for text and drawing commands
+that are bracketed with these
+.B \[rs]X
+commands.
+.
+These commands are intended for use when output from
+.B troff
+is previewed before being processed with
+.BR grops ;
+if the previewer is unable to display certain characters
+or other constructs, then other substitute characters or constructs
+can be used for previewing by bracketing them with these
+.B \[rs]X
+commands.
+.
+.
+.RS
+.LP
+For example,
+.B \%gxditview
+is not able to display a proper
+.B \[rs](em
+character because the standard X11 fonts do not provide it;
+this problem can be overcome by executing the following
+request
+.
+.IP
+.ft B
+.nf
+\&.char \[rs](em \[rs]X'ps: invis'\[rs]
+\[rs]Z'\[rs]v'-.25m'\[rs]h'.05m'\[rs]D'l .9m 0'\[rs]h'.05m''\[rs]
+\[rs]X'ps: endinvis'\[rs](em
+.ft
+.fi
+.
+.
+.LP
+In this case,
+.B \%gxditview
+is unable to display the
+.B \[rs](em
+character and draws the line,
+whereas
+.B grops
+prints the
+.B \[rs](em
+character
+and ignores the line (this code is already in file
+.B Xps.tmac
+which is loaded if a document intended for
+.B grops
+is previewed with
+.BR \%gxditview ).
+.RE
+.
+.
+.LP
+If a PostScript procedure
+.B BPhook
+has been defined via a
+.RB \[oq] ps:\ def \[cq]
+or
+.RB \[oq] ps:\ mdef \[cq]
+device command, it is executed at the beginning of every page (before
+anything is drawn or written by groff).
+.
+For example, to underlay the page contents with the word
+\[oq]DRAFT\[cq] in light gray, you might use
+.RS
+.LP
+.nf
+.ft B
+\&.de XX
+ps: def
+/BPhook
+{ gsave .9 setgray clippath pathbbox exch 2 copy
+  .5 mul exch .5 mul translate atan rotate pop pop
+  /NewCenturySchlbk-Roman findfont 200 scalefont setfont
+  (DRAFT) dup stringwidth pop \-.5 mul \-70 moveto show
+  grestore }
+def
+\&..
+\&.devicem XX
+.ft R
+.fi
+.RE
+.LP
+Or, to cause lines and polygons to be drawn with square linecaps
+and mitered linejoins instead of the round linecaps and linejoins
+normally used by
+.BR grops ,
+use
+.RS
+.LP
+.nf
+.ft B
+\&.de XX
+ps: def
+/BPhook { 2 setlinecap 0 setlinejoin } def
+\&..
+\&.devicem XX
+.ft R
+.fi
+.RE
+.LP
+(square linecaps, as opposed to butt linecaps (0 setlinecap),
+give true corners in boxed tables even though the lines are
+drawn unconnected).
+.
+.
+.\" ====================================================================
+.SS Encapsulated PostScript
+.\" ====================================================================
+.
+.B grops
+itself doesn't emit bounding box information.
+.
+With the help of Ghostscript the following simple script,
+.BR groff2eps ,
+produces an encapsulated PS file.
+.
+.
+.RS
+.LP
+.nf
+.ft B
+#! /bin/sh
+groff \-P\-b16 $1 > $1.ps
+gs \-dNOPAUSE \-sDEVICE=bbox \-\- $1.ps 2> $1.bbox
+sed \-e "/\[ha]%%Orientation/r $1.bbox" \[rs]
+    \-e "/\[ha]%!PS-Adobe-3.0/s/$/ EPSF-3.0/" $1.ps > $1.eps
+rm $1.ps $1.bbox
+.ft R
+.fi
+.RE
+.
+.
+.LP
+Just say
+.
+.IP
+.B
+groff2eps foo
+.
+.LP
+to convert file
+.B foo
+to
+.BR foo.eps .
+.
+.
+.\" ====================================================================
+.SS TrueType and other font formats
+.\" ====================================================================
+.
+TrueType fonts can be used with
+.B grops
+if converted first to
+.B "Type\~42"
+format, a special PostScript wrapper equivalent to the PFA format
+mentioned in
+.BR \%pfbtops (@MAN1EXT@).
+.
+There are several different methods to generate a type42 wrapper and
+most of them involve the use of a PostScript interpreter such as
+Ghostscript \[en] see
+.BR gs (1).
+.
+.
+.LP
+Yet, the easiest method involves the use of the application
+.BR ttftot42 (1).
+.
+This program uses
+.BR freetype (3)
+(version 1.3.1) to generate type42
+font wrappers and well-formed AFM files that can be fed to
+the
+.BR \%afmtodit (@MAN1EXT@)
+script to create appropriate metric files.
+.
+The resulting font wrappers should be added to the
+.I download
+file.
+.B ttftot42
+source code can be downloaded from
+.UR ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/
+ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/
+.UE .
+.
+.
+.LP
+Another solution for creating type42 wrappers is to use FontForge,
+available from
+.UR http://\:fontforge.sf.net
+http://\:fontforge.sf.net
+.UE .
+This font editor can convert most outline font formats.
+.
+.
+.\" ====================================================================
+.SH "FONT INSTALLATION"
+.\" ====================================================================
+.
+This section gives a summary of the above explanations; it can serve
+as a step-by-step font installation guide for
+.BR grops .
+.
+.ds BU \[bu]\ \ \"
+.de LI
+.IP "" 4
+\h'-\w'\*[BU]'u'\*[BU]\c
+..
+.LI
+Convert your font to something groff understands.
+.
+This is either a PostScript Type\~1 font in PFA format or a PostScript
+Type\~42 font, together with an AFM file.
+.
+.IP
+The very first characters in a PFA file look like this:
+.
+.RS
+.IP
+.B %!PS-AdobeFont-1.0:
+.RE
+.
+.IP
+A PFB file has this also in the first line, but the string is
+preceded with some binary bytes.
+.
+.IP
+The very first characters in a Type\~42 font file look like this:
+.
+.RS
+.IP
+.B %!PS-TrueTypeFont
+.RE
+.
+.IP
+This is a wrapper format for TrueType fonts.
+.
+Old PS printers might not support it (this is, they don't have a
+built-in TrueType font interpreter).
+.
+.IP
+If your font is in PFB format (such fonts normally have
+.I .pfb
+as the file extension), you might use groff's
+.BR \%pfbtops (@MAN1EXT@)
+program to convert it to PFA.
+.
+For TrueType fonts, try
+.B ttftot42
+or
+.BR fontforge .
+For all other font formats use
+.B fontforge
+which can convert most outline font formats.
+.
+.LI
+Convert the AFM file to a groff font description file with the
+.BR \%afmtodit (@MAN1EXT@)
+program.
+.
+An example call is
+.
+.RS
+.IP
+afmtodit Foo-Bar-Bold.afm textmap FBB
+.RE
+.
+.IP
+which converts the metric file
+.I Foo-Bar-Bold.afm
+to the groff
+font
+.IR FBB .
+.
+If you have a font family which comes with normal, bold, italic,
+and bold italic faces, it is recommended to use the letters
+.BR R ,
+.BR B ,
+.BR I ,
+and
+.BR BI ,
+respectively, as postfixes in the groff font names to make groff's
+\[oq].fam\[cq] request work.
+.
+An example is groff's built-in Times-Roman font: The font family
+name is
+.BR T ,
+and the groff font names are
+.BR TR ,
+.BR TB ,
+.BR TI ,
+and
+.BR TBI .
+.
+.LI
+Install both the groff font description files and the fonts in a
+.I devps
+subdirectory of the font path which groff finds.
+.
+See section \[lq]Environment\[rq] in
+.BR troff (@MAN1EXT@)
+for the actual value of the font path.
+.
+Note that groff doesn't use the AFM files (but it is a good idea
+to store them anyway).
+.
+.LI
+Register all fonts which must be downloaded to the printer in the
+.I devps/download
+file.
+.
+Only the first occurrence of this file in the font path is read.
+.
+This means that you should copy the default
+.I download
+file to the first directory in your font path and add your fonts there.
+.
+To continue the above example we assume that the PS font name for
+.I Foo-Bar-Bold.pfa
+is \[oq]XY-Foo-Bar-Bold\[cq] (the PS font name is stored in the
+.B internalname
+field in the
+.I FBB
+file),
+thus the following line should be added to
+.IR download .
+.
+.RS
+.IP
+.B XY-Foo-Bar-Bold Foo-Bar-Bold.pfa
+.
+.RE
+.
+.
+.\" ====================================================================
+.SH OLD FONTS
+.\" ====================================================================
+.
+groff versions 1.19.2 and earlier contain a slightly different set of
+the 35 Adobe core fonts; the difference is mainly the lack of the
+\[oq]Euro\[cq] glyph and a reduced set of kerning pairs.
+.
+For backwards compatibility, these old fonts are installed also in the
+.
+.IP
+.I @OLDFONTDIR@/devps
+.
+.LP
+directory.
+.
+.
+.LP
+To use them, make sure that
+.B grops
+finds the fonts before the default system fonts (with the same names):
+Either add command-line option
+.B \-F
+to
+.B grops
+.
+.IP
+.B groff \-Tps \-P\-F \-P@OLDFONTDIR@ .\|.\|.
+.
+.LP
+or add the directory to groff's font path environment variable
+.
+.IP
+.B GROFF_FONT_PATH=@OLDFONTDIR@
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROPS_PROLOGUE
+If this is set to
+.IR foo ,
+then
+.B grops
+uses the file
+.I foo
+(in the font path) instead of the default prologue file
+.BR prologue .
+.
+The option
+.B \-P
+overrides this environment variable.
+.
+.
+.TP
+.I GROFF_FONT_PATH
+A list of directories in which to search for the
+.IR dev name
+directory in addition to the default ones.
+.
+See
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_font (@MAN5EXT@)
+for more details.
+.
+.
+.TP
+.I SOURCE_DATE_EPOCH
+A timestamp (expressed as seconds since the Unix epoch) to use as the
+creation timestamp in place of the current time.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @FONTDIR@/devps/DESC
+Device description file.
+.
+.TP
+.IR @FONTDIR@/devps/ F
+Font description file for font
+.IR F .
+.
+.TP
+.I @FONTDIR@/devps/download
+List of downloadable fonts.
+.
+.TP
+.I @FONTDIR@/devps/text.enc
+Encoding used for text fonts.
+.
+.TP
+.I @MACRODIR@/ps.tmac
+Macros for use with
+.BR grops ;
+automatically loaded by
+.B troffrc
+.
+.TP
+.I @MACRODIR@/pspic.tmac
+Definition of
+.B PSPIC
+macro,
+automatically loaded by
+.IR ps.tmac .
+.
+.TP
+.I @MACRODIR@/psold.tmac
+Macros to disable use of characters not present in older
+PostScript printers (e.g., \[oq]eth\[cq] or \[oq]thorn\[cq]).
+.
+.TP
+.IR /tmp/grops XXXXXX
+Temporary file.
+See
+.BR groff (@MAN1EXT@)
+for details on the location of temporary files.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR \%afmtodit (@MAN1EXT@),
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR \%pfbtops (@MAN1EXT@),
+.BR \%groff_out (@MAN5EXT@),
+.BR \%groff_font (@MAN5EXT@),
+.BR \%groff_char (@MAN7EXT@),
+.BR \%groff_tmac (@MAN5EXT@)
+.
+.
+.LP
+.UR http://\:partners.adobe.com/\:public/\:developer/\:en/\:ps/\:5001.DSC_Spec.pdf
+PostScript Language Document Structuring Conventions Specification
+.UE
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[grops_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/devices/grops/grops.am b/src/devices/grops/grops.am
new file mode 100644 (file)
index 0000000..1e550ca
--- /dev/null
@@ -0,0 +1,40 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += grops
+grops_SOURCES = \
+  src/devices/grops/ps.cpp \
+  src/devices/grops/psrm.cpp \
+  src/devices/grops/ps.h
+grops_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+man1_MANS += src/devices/grops/grops.1
+EXTRA_DIST += \
+  src/devices/grops/grops.1.man \
+  src/devices/grops/psfig.diff \
+  src/devices/grops/TODO
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/src/devices/grops/grops.man b/src/devices/grops/grops.man
deleted file mode 100644 (file)
index 99fb748..0000000
+++ /dev/null
@@ -1,1499 +0,0 @@
-.TH GROPS @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grops \- PostScript driver for groff
-.
-.
-.\" license
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.  ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.  el .TP "\\$1"
-..
-.
-.de FT
-.  if '\\*(.T'ps' .ft \\$1
-.  if '\\*(.T'pdf' .ft \\$1
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY grops
-.OP \-glmv
-.OP \-b n
-.OP \-c n
-.OP \-F dir
-.OP \-I dir
-.OP \-p papersize
-.OP \-P prologue
-.OP \-w n
-.RI [ files
-.IR .\|.\|. ]
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B grops
-translates the output of GNU
-.B troff
-to PostScript.
-.
-Normally
-.B grops
-should be invoked by using the groff command with a
-.B \-Tps
-option.
-.
-.if '@DEVICE@'ps' (Actually, this is the default for groff.)
-.
-If no files are given,
-.B grops
-reads the standard input.
-.
-A filename of
-.B \-
-also causes
-.B grops
-to read the standard input.
-.
-PostScript output is written to the standard output.
-.
-When
-.B grops
-is run by
-.B groff
-options can be passed to
-.B grops
-using
-.BR groff \[aq]s
-.B \-P
-option.
-.
-.
-.LP
-Note that
-.B grops
-doesn\[aq]t produce a valid document structure (conforming to the
-Document Structuring Convention) if called with multiple file
-arguments.
-.
-To print such concatenated output it is necessary to deactivate DSC
-handling in the printing program or previewer.
-.
-See section
-.B FONT INSTALLATION
-below for a guide how to install fonts for
-.BR grops .
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.TP
-.BI \-b n
-Provide workarounds for older printers, broken spoolers, and previewers.
-.
-Normally
-.B grops
-produces output at PostScript LanguageLevel\~2 that conforms to the
-Document Structuring Conventions version 3.0.
-.
-Some older printers, spoolers, and previewers can\[aq]t handle such
-output.
-.
-The value of\~\c
-.I n
-controls what
-.B grops
-does to make its output acceptable to such programs.
-.
-A value of\~0 causes grops not to employ any workarounds.
-.
-.IP
-Add\~1 if no
-.B %%Begin\%Document\%Setup
-and
-.B %%End\%Document\%Setup
-comments should be generated;
-this is needed for early versions of TranScript that get confused by
-anything between the
-.B %%End\%Prolog
-comment and the first
-.B %%Page
-comment.
-.
-.IP
-Add\~2 if lines in included files beginning with
-.B %!\&
-should be stripped out; this is needed for Sun\[aq]s pageview
-previewer.
-.
-.IP
-Add\~4 if
-.BR %%Page ,
-.BR %%Trailer
-and
-.B %%End\%Prolog
-comments should be
-stripped out of included files; this is needed for spoolers that
-don\[aq]t understand the
-.B %%Begin\%Document
-and
-.B %%End\%Document
-comments.
-.
-.IP
-Add\~8 if the first line of the PostScript output should be
-.B %!PS-Adobe-2.0
-rather than
-.BR %!PS-Adobe-3.0 ;
-this is needed when using Sun\[aq]s Newsprint with a printer that
-requires page reversal.
-.
-.IP
-Add\~16 if no media size information should be included in the
-document (this is, neither use
-.B %%Document\%Media
-nor the
-.B setpagedevice
-PostScript command).
-.
-This was the behaviour of groff version 1.18.1 and earlier; it is
-needed for older printers which don\[aq]t understand PostScript
-LanguageLevel\~2.
-.
-It is also necessary if the output is further processed to get an
-encapsulated PS (EPS) file \[en] see below.
-.
-.IP
-The default value can be specified by a
-.
-.RS
-.IP
-.BI broken\  n
-.
-.LP
-command in the DESC file.
-.
-Otherwise the default value is\~0.
-.RE
-.
-.TP
-.BI \-c n
-Print
-.I n
-copies of each page.
-.
-.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for prologue, font, and device description files;
-.I name
-is the name of the device, usually
-.BR ps .
-.
-.TP
-.BI \-g
-Guess the page length.
-.
-This generates PostScript code that guesses the page length.
-.
-The guess is correct only if the imageable area is vertically
-centered on the page.
-.
-This option allows you to generate documents that can be printed
-both on letter (8.5\[mu]11) paper and on A4 paper without change.
-.
-.TP
-.BI \-I dir
-This option may be used to add a directory to the search path for
-files on the command line and files named in
-.B \[rs]X'ps: import'
-and
-.B \[rs]X'ps: file'
-escapes.
-.
-The search path is initialized with the current directory.
-.
-This option may be specified more than once; the directories are then
-searched in the order specified (but before the current directory).
-.
-If you want to make the current directory be read before other directories,
-add
-.B \-I.\&
-at the appropriate place.
-.
-.IP
-No directory search is performed for files with an absolute file name.
-.
-.TP
-.B \-l
-Print the document in landscape format.
-.
-.TP
-.B \-m
-Turn manual feed on for the document.
-.
-.TP
-.BI \-p paper-size
-Set physical dimension of output medium.
-.
-This overrides the
-.BR papersize ,
-.BR paperlength ,
-and
-.B paperwidth
-commands in the
-.B DESC
-file; it accepts the same arguments as the
-.B papersize
-command.
-.
-See
-.B groff_font (@MAN5EXT@)
-for details.
-.
-.TP
-.BI \-P prologue-file
-Use the file
-.I prologue-file
-(in the font path) as the prologue instead of the default prologue file
-.BR prologue .
-.
-This option overrides the environment variable
-.SM GROPS_PROLOGUE.
-.
-.TP
-.BI \-w n
-Lines should be drawn using a thickness of
-.IR n \~\c
-thousandths of an em.
-.
-If this option is not given, the line thickness defaults to 0.04\~em.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-The input to
-.B grops
-must be in the format output by
-.BR @g@troff (@MAN1EXT@).
-.
-This is described in
-.BR groff_out (@MAN5EXT@).
-.
-.LP
-In addition, the device and font description files for the device used
-must meet certain requirements:
-.
-The resolution must be an integer multiple of\~72 times the
-.BR sizescale .
-.
-The
-.B ps
-device uses a resolution of 72000 and a sizescale of 1000.
-.
-.
-.LP
-The device description file must contain a valid paper size; see
-.BR groff_font (@MAN5EXT@)
-for more information.
-.
-.
-.LP
-Each font description file must contain a command
-.IP
-.BI internalname\  psname
-.LP
-which says that the PostScript name of the font is
-.IR psname .
-.
-It may also contain a command
-.IP
-.BI encoding\  enc_file
-.LP
-which says that
-the PostScript font should be reencoded using the encoding described in
-.IR enc_file ;
-this file should consist of a sequence of lines of the form:
-.IP
-.I
-pschar code
-.LP
-where
-.I pschar
-is the PostScript name of the character,
-and
-.I code
-is its position in the encoding expressed as a decimal integer; valid
-values are in the range 0 to\~255.
-.
-Lines starting with
-.B #
-and blank lines are ignored.
-.
-The code for each character given in the font file must correspond
-to the code for the character in encoding file, or to the code in the default
-encoding for the font if the PostScript font is not to be reencoded.
-.
-This code can be used with the
-.B \[rs]N
-escape sequence in
-.B troff
-to select the character,
-even if the character does not have a groff name.
-.
-Every character in the font file must exist in the PostScript font, and
-the widths given in the font file must match the widths used
-in the PostScript font.
-.
-.B grops
-assumes that a character with a groff name of
-.B space
-is blank (makes no marks on the page);
-it can make use of such a character to generate more efficient and
-compact PostScript output.
-.
-.
-.LP
-Note that
-.B grops
-is able to display all glyphs in a PostScript font, not only 256.
-.I enc_file
-(or the default encoding if no encoding file specified) just defines the
-order of glyphs for the first 256 characters; all other glyphs are
-accessed with additional encoding vectors which
-.B grops
-produces on the fly.
-.
-.
-.LP
-.B grops
-can automatically include the downloadable fonts necessary
-to print the document.
-.
-Such fonts must be in PFA format.
-.
-Use
-.BR \%pfbtops (@MAN1EXT@)
-to convert a Type\~1 font in PFB format.
-.
-Any downloadable fonts which should, when required, be included by
-.B grops
-must be listed in the file
-.BR @FONTDIR@/devps/download ;
-this should consist of lines of the form
-.
-.IP
-.I
-font filename
-.
-.
-.LP
-where
-.I font
-is the PostScript name of the font,
-and
-.I filename
-is the name of the file containing the font;
-lines beginning with
-.B #
-and blank lines are ignored;
-fields may be separated by tabs or spaces;
-.I filename
-is searched for using the same mechanism that is used
-for groff font metric files.
-.
-The
-.B download
-file itself is also searched for using this mechanism;
-currently, only the first found file in the font path is used.
-.
-.
-.LP
-If the file containing a downloadable font or imported document
-conforms to the Adobe Document Structuring Conventions,
-then
-.B grops
-interprets any comments in the files sufficiently to ensure that its
-own output is conforming.
-.
-It also supplies any needed font resources that are listed in the
-.B download
-file
-as well as any needed file resources.
-.
-It is also able to handle inter-resource dependencies.
-.
-For example, suppose that you have a downloadable font called
-Garamond, and also a downloadable font called Garamond-Outline which
-depends on Garamond (typically it would be defined to copy
-Garamond\[aq]s font dictionary, and change the PaintType), then it is
-necessary for Garamond to appear before Garamond-Outline in the
-PostScript document.
-.
-.B grops
-handles this automatically provided that the downloadable font file
-for Garamond-Outline indicates its dependence on Garamond by means of
-the Document Structuring Conventions, for example by beginning with
-the following lines
-.
-.IP
-.B
-%!PS-Adobe-3.0 Resource-Font
-.br
-.B
-%%DocumentNeededResources: font Garamond
-.br
-.B
-%%EndComments
-.br
-.B
-%%IncludeResource: font Garamond
-.
-.
-.LP
-In this case both Garamond and Garamond-Outline would need to be listed
-in the
-.B download
-file.
-.
-A downloadable font should not include its own name in a
-.B %%Document\%Supplied\%Resources
-comment.
-.
-.
-.LP
-.B grops
-does not interpret
-.B %%Document\%Fonts
-comments.
-.
-The
-.BR %%Document\%Needed\%Resources ,
-.BR %%Document\%Supplied\%Resources ,
-.BR %%Include\%Resource ,
-.BR %%Begin\%Resource ,
-and
-.BR %%End\%Resource
-comments
-(or possibly the old
-.BR %%Document\%Needed\%Fonts ,
-.BR %%Document\%Supplied\%Fonts ,
-.BR %%Include\%Font ,
-.BR %%Begin\%Font ,
-and
-.BR %%End\%Font
-comments)
-should be used.
-.
-.
-.LP
-In the default setup
-there are styles called
-.BR R ,
-.BR I ,
-.BR B ,
-and
-.B BI
-mounted at font positions 1 to\~4.
-.
-The fonts are grouped into families
-.BR A ,
-.BR BM ,
-.BR C ,
-.BR H ,
-.BR HN ,
-.BR N ,
-.BR P ,
-and\~\c
-.B T
-having members in each of these styles:
-.
-.RS
-.TP
-.B AR
-.FT AR
-AvantGarde-Book
-.FT
-.
-.TQ
-.B AI
-.FT AI
-AvantGarde-BookOblique
-.FT
-.
-.TQ
-.B AB
-.FT AB
-AvantGarde-Demi
-.FT
-.
-.TQ
-.B ABI
-.FT ABI
-AvantGarde-DemiOblique
-.FT
-.
-.TQ
-.B BMR
-.FT BMR
-Bookman-Light
-.FT
-.
-.TQ
-.B BMI
-.FT BMI
-Bookman-LightItalic
-.FT
-.
-.TQ
-.B BMB
-.FT BMB
-Bookman-Demi
-.FT
-.
-.TQ
-.B BMBI
-.FT BMBI
-Bookman-DemiItalic
-.FT
-.
-.TQ
-.B CR
-.FT CR
-Courier
-.FT
-.
-.TQ
-.B CI
-.FT CI
-Courier-Oblique
-.FT
-.
-.TQ
-.B CB
-.FT CB
-Courier-Bold
-.FT
-.
-.TQ
-.B CBI
-.FT CBI
-Courier-BoldOblique
-.FT
-.
-.TQ
-.B HR
-.FT HR
-Helvetica
-.FT
-.
-.TQ
-.B HI
-.FT HI
-Helvetica-Oblique
-.FT
-.
-.TQ
-.B HB
-.FT HB
-Helvetica-Bold
-.FT
-.
-.TQ
-.B HBI
-.FT HBI
-Helvetica-BoldOblique
-.FT
-.
-.TQ
-.B HNR
-.FT HNR
-Helvetica-Narrow
-.FT
-.
-.TQ
-.B HNI
-.FT HNI
-Helvetica-Narrow-Oblique
-.FT
-.
-.TQ
-.B HNB
-.FT HNB
-Helvetica-Narrow-Bold
-.FT
-.
-.TQ
-.B HNBI
-.FT HNBI
-Helvetica-Narrow-BoldOblique
-.FT
-.
-.TQ
-.B NR
-.FT NR
-NewCenturySchlbk-Roman
-.FT
-.
-.TQ
-.B NI
-.FT NI
-NewCenturySchlbk-Italic
-.FT
-.
-.TQ
-.B NB
-.FT NB
-NewCenturySchlbk-Bold
-.FT
-.
-.TQ
-.B NBI
-.FT NBI
-NewCenturySchlbk-BoldItalic
-.FT
-.
-.TQ
-.B PR
-.FT PR
-Palatino-Roman
-.FT
-.
-.TQ
-.B PI
-.FT PI
-Palatino-Italic
-.FT
-.
-.TQ
-.B PB
-.FT PB
-Palatino-Bold
-.FT
-.
-.TQ
-.B PBI
-.FT PBI
-Palatino-BoldItalic
-.FT
-.
-.TQ
-.B TR
-.FT TR
-Times-Roman
-.FT
-.
-.TQ
-.B TI
-.FT TI
-Times-Italic
-.FT
-.
-.TQ
-.B TB
-.FT TB
-Times-Bold
-.FT
-.
-.TQ
-.B TBI
-.FT TBI
-Times-BoldItalic
-.FT
-.RE
-.
-.
-.LP
-There is also the following font which is not a member of a family:
-.
-.RS
-.TP
-.B ZCMI
-.FT ZCMI
-ZapfChancery-MediumItalic
-.FT
-.RE
-.
-.
-.LP
-There are also some special fonts called
-.B S
-for the PS Symbol font, and
-.BR SS ,
-containing slanted lowercase Greek letters taken from PS Symbol.
-.
-Zapf Dingbats is available as
-.BR ZD ,
-and a reversed version of ZapfDingbats (with symbols pointing in the opposite
-direction) is available as
-.BR ZDR ;
-most characters in these fonts are unnamed and must be accessed using
-.BR \[rs]N .
-.
-.
-.LP
-The default color for
-.B \[rs]m
-and
-.B \[rs]M
-is black; for colors defined in the \[oq]rgb\[cq] color space
-.B setrgbcolor
-is used, for \[oq]cmy\[cq] and \[oq]cmyk\[cq]
-.BR setcmykcolor ,
-and for \[oq]gray\[cq]
-.BR setgray .
-.
-Note that
-.B setcmykcolor
-is a PostScript LanguageLevel\~2 command and thus not available on some
-older printers.
-.
-.
-.LP
-.B grops
-understands various X\~commands produced using the
-.B \[rs]X
-escape sequence;
-.B grops
-only interprets commands that begin with a
-.B ps:
-tag.
-.
-.TP
-.BI \[rs]X'ps:\ exec\  code '
-This executes the arbitrary PostScript commands in
-.IR code .
-.
-The PostScript currentpoint is set to the position of the
-.B \[rs]X
-command before executing
-.IR code .
-.
-The origin is at the top left corner of the page,
-and y\~coordinates increase down the page.
-.
-A procedure\~\c
-.B u
-is defined that converts groff units to the coordinate system in
-effect (provided the user doesn\[aq]t change the scale).
-.
-For example,
-.
-.RS
-.IP
-.B
-\&.nr x 1i
-.br
-.B
-\[rs]X'ps: exec \[rs]nx u 0 rlineto stroke'
-.br
-.RE
-.
-.IP
-draws a horizontal line one inch long.
-.
-.I code
-may make changes to the graphics state,
-but any changes persist only to the end of the page.
-.
-A dictionary containing the definitions specified by the
-.B def
-and
-.B mdef
-is on top of the dictionary stack.
-.
-If your code adds definitions to this dictionary,
-you should allocate space for them using
-.BI \[rs]X'ps\ mdef \ n '\fR.
-.
-Any definitions persist only until the end of the page.
-.
-If you use the
-.B \[rs]Y
-escape sequence with an argument that names a macro,
-.I code
-can extend over multiple lines.
-.
-For example,
-.
-.RS
-.IP
-.nf
-.ft B
-\&.nr x 1i
-\&.de y
-\&ps: exec
-\&\[rs]nx u 0 rlineto
-\&stroke
-\&..
-\&\[rs]Yy
-.ft R
-.fi
-.
-.LP
-is another way to draw a horizontal line one inch long.
-.
-Note the single backslash before \[oq]nx\[cq] \[en] the only reason to
-use a number register while defining the macro \[oq]y\[cq] is to
-convert a user-specified dimension \[oq]1i\[cq] to internal groff
-units which are in turn converted to PS units with the
-.B u
-procedure.
-.
-.
-.LP
-.B grops
-wraps user-specified PostScript code into a dictionary, nothing more.
-.
-In particular, it doesn\[aq]t start and end the inserted code with
-.B save
-and
-.BR restore ,
-respectively.
-.
-This must be supplied by the user, if necessary.
-.
-.RE
-.
-.TP
-.BI \[rs]X'ps:\ file\  name '
-This is the same as the
-.B exec
-command except that the PostScript code is read from file
-.IR name .
-.
-.TP
-.BI \[rs]X'ps:\ def\  code '
-Place a PostScript definition contained in
-.I code
-in the prologue.
-.
-There should be at most one definition per
-.B \[rs]X
-command.
-.
-Long definitions can be split over several
-.B \[rs]X
-commands;
-all the
-.I code
-arguments are simply joined together separated by newlines.
-.
-The definitions are placed in a dictionary which is automatically
-pushed on the dictionary stack when an
-.B exec
-command is executed.
-.
-If you use the
-.B \[rs]Y
-escape sequence with an argument that names a macro,
-.I code
-can extend over multiple lines.
-.
-.TP
-.BI \[rs]X'ps:\ mdef\  n\ code  '
-Like
-.BR def ,
-except that
-.I code
-may contain up to
-.IR n \~\c
-definitions.
-.
-.B grops
-needs to know how many definitions
-.I code
-contains
-so that it can create an appropriately sized PostScript dictionary
-to contain them.
-.
-.TP
-.BI \[rs]X'ps:\ import\  file\ llx\ lly\ urx\ ury\ width\ \fR[\fP\ height\ \fR]\fP '
-Import a PostScript graphic from
-.IR file .
-.
-The arguments
-.IR llx ,
-.IR lly ,
-.IR urx ,
-and
-.I ury
-give the bounding box of the graphic in the default PostScript
-coordinate system; they should all be integers;
-.I llx
-and
-.I lly
-are the x and y\~coordinates of the lower left
-corner of the graphic;
-.I urx
-and
-.I ury
-are the x and y\~coordinates of the upper right corner of the graphic;
-.I width
-and
-.I height
-are integers that give the desired width and height in groff
-units of the graphic.
-.
-.IP
-The graphic is scaled so that it has this width and height
-and translated so that the lower left corner of the graphic is
-located at the position associated with
-.B \[rs]X
-command.
-.
-If the height argument is omitted it is scaled uniformly in the
-x and y\~directions so that it has the specified width.
-.
-.IP
-Note that the contents of the
-.B \[rs]X
-command are not interpreted by
-.BR troff ;
-so vertical space for the graphic is not automatically added,
-and the
-.I width
-and
-.I height
-arguments are not allowed to have attached scaling indicators.
-.
-.IP
-If the PostScript file complies with the Adobe Document Structuring
-Conventions and contains a
-.B %%Bounding\%Box
-comment, then the bounding box can be automatically
-extracted from within groff by using the
-.B psbb
-request.
-.
-.IP
-See
-.BR groff_tmac (@MAN5EXT@)
-for a description of the
-.B PSPIC
-macro which provides a convenient high-level interface for inclusion of
-PostScript graphics.
-.
-.TP
-.B \[rs]X'ps:\ invis'
-.TQ
-.B \[rs]X'ps:\ endinvis'
-No output is generated for text and drawing commands
-that are bracketed with these
-.B \[rs]X
-commands.
-.
-These commands are intended for use when output from
-.B troff
-is previewed before being processed with
-.BR grops ;
-if the previewer is unable to display certain characters
-or other constructs, then other substitute characters or constructs
-can be used for previewing by bracketing them with these
-.B \[rs]X
-commands.
-.
-.
-.RS
-.LP
-For example,
-.B \%gxditview
-is not able to display a proper
-.B \[rs](em
-character because the standard X11 fonts do not provide it;
-this problem can be overcome by executing the following
-request
-.
-.IP
-.ft B
-.nf
-\&.char \[rs](em \[rs]X'ps: invis'\[rs]
-\[rs]Z'\[rs]v'-.25m'\[rs]h'.05m'\[rs]D'l .9m 0'\[rs]h'.05m''\[rs]
-\[rs]X'ps: endinvis'\[rs](em
-.ft
-.fi
-.
-.
-.LP
-In this case,
-.B \%gxditview
-is unable to display the
-.B \[rs](em
-character and draws the line,
-whereas
-.B grops
-prints the
-.B \[rs](em
-character
-and ignores the line (this code is already in file
-.B Xps.tmac
-which is loaded if a document intended for
-.B grops
-is previewed with
-.BR \%gxditview ).
-.RE
-.
-.
-.LP
-If a PostScript procedure
-.B BPhook
-has been defined via a
-.RB \[oq] ps:\ def \[cq]
-or
-.RB \[oq] ps:\ mdef \[cq]
-device command, it is executed at the beginning of every page (before
-anything is drawn or written by groff).
-.
-For example, to underlay the page contents with the word
-\[oq]DRAFT\[cq] in light gray, you might use
-.RS
-.LP
-.nf
-.ft B
-\&.de XX
-ps: def
-/BPhook
-{ gsave .9 setgray clippath pathbbox exch 2 copy
-  .5 mul exch .5 mul translate atan rotate pop pop
-  /NewCenturySchlbk-Roman findfont 200 scalefont setfont
-  (DRAFT) dup stringwidth pop \-.5 mul \-70 moveto show
-  grestore }
-def
-\&..
-\&.devicem XX
-.ft R
-.fi
-.RE
-.LP
-Or, to cause lines and polygons to be drawn with square linecaps
-and mitered linejoins instead of the round linecaps and linejoins
-normally used by
-.BR grops ,
-use
-.RS
-.LP
-.nf
-.ft B
-\&.de XX
-ps: def
-/BPhook { 2 setlinecap 0 setlinejoin } def
-\&..
-\&.devicem XX
-.ft R
-.fi
-.RE
-.LP
-(square linecaps, as opposed to butt linecaps (0 setlinecap),
-give true corners in boxed tables even though the lines are
-drawn unconnected).
-.
-.
-.\" --------------------------------------------------------------------
-.SS Encapsulated PostScript
-.\" --------------------------------------------------------------------
-.
-.B grops
-itself doesn\[aq]t emit bounding box information.
-.
-With the help of Ghostscript the following simple script,
-.BR groff2eps ,
-produces an encapsulated PS file.
-.
-.
-.RS
-.LP
-.nf
-.ft B
-#! /bin/sh
-groff \-P\-b16 $1 > $1.ps
-gs \-dNOPAUSE \-sDEVICE=bbox \-\- $1.ps 2> $1.bbox
-sed \-e "/\[ha]%%Orientation/r $1.bbox" \[rs]
-    \-e "/\[ha]%!PS-Adobe-3.0/s/$/ EPSF-3.0/" $1.ps > $1.eps
-rm $1.ps $1.bbox
-.ft R
-.fi
-.RE
-.
-.
-.LP
-Just say
-.
-.IP
-.B
-groff2eps foo
-.
-.LP
-to convert file
-.B foo
-to
-.BR foo.eps .
-.
-.
-.\" --------------------------------------------------------------------
-.SS TrueType and other font formats
-.\" --------------------------------------------------------------------
-.
-TrueType fonts can be used with
-.B grops
-if converted first to
-.B "Type\~42"
-format, a special PostScript wrapper equivalent to the PFA format
-mentioned in
-.BR \%pfbtops (@MAN1EXT@).
-.
-There are several different methods to generate a type42 wrapper and
-most of them involve the use of a PostScript interpreter such as
-Ghostscript \[en] see
-.BR gs (1).
-.
-.
-.LP
-Yet, the easiest method involves the use of the application
-.BR ttftot42 (1).
-.
-This program uses
-.BR freetype (3)
-(version 1.3.1) to generate type42
-font wrappers and well-formed AFM files that can be fed to
-the
-.BR \%afmtodit (@MAN1EXT@)
-script to create appropriate metric files.
-.
-The resulting font wrappers should be added to the
-.B download
-file.
-.B ttftot42
-source code can be downloaded from
-.UR ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/
-ftp://\:www.giga.or.at/\:pub/\:nih/\:ttftot42/
-.UE .
-.
-.
-.LP
-Another solution for creating type42 wrappers is to use FontForge,
-available from
-.UR http://\:fontforge.sf.net
-http://\:fontforge.sf.net
-.UE .
-This font editor can convert most outline font formats.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "FONT INSTALLATION"
-.\" --------------------------------------------------------------------
-.
-This section gives a summary of the above explanations; it can serve
-as a step-by-step font installation guide for
-.BR grops .
-.
-.ds BU \[bu]\ \ \"
-.de LI
-.IP "" 4
-\h'-\w'\*[BU]'u'\*[BU]\c
-..
-.LI
-Convert your font to something groff understands.
-.
-This is either a PostScript Type\~1 font in PFA format or a PostScript
-Type\~42 font, together with an AFM file.
-.
-.IP
-The very first characters in a PFA file look like this:
-.
-.RS
-.IP
-.B %!PS-AdobeFont-1.0:
-.RE
-.
-.IP
-A PFB file has this also in the first line, but the string is
-preceded with some binary bytes.
-.
-.IP
-The very first characters in a Type\~42 font file look like this:
-.
-.RS
-.IP
-.B %!PS-TrueTypeFont
-.RE
-.
-.IP
-This is a wrapper format for TrueType fonts.
-.
-Old PS printers might not support it (this is, they don\[aq]t have a
-built-in TrueType font interpreter).
-.
-.IP
-If your font is in PFB format (such fonts normally have \[oq].pfb\[cq]
-as the file extension), you might use groff\[aq]s
-.BR \%pfbtops (@MAN1EXT@)
-program to convert it to PFA.
-.
-For TrueType fonts, try
-.B ttftot42
-or
-.BR fontforge .
-For all other font formats use
-.B fontforge
-which can convert most outline font formats.
-.
-.LI
-Convert the AFM file to a groff font description file with the
-.BR \%afmtodit (@MAN1EXT@)
-program.
-.
-An example call is
-.
-.RS
-.IP
-afmtodit Foo-Bar-Bold.afm textmap FBB
-.RE
-.
-.IP
-which converts the metric file \[oq]Foo-Bar-Bold.afm\[cq] to the groff
-font \[oq]FBB\[cq].
-.
-If you have a font family which comes with normal, bold, italic,
-and bold italic faces, it is recommended to use the letters
-.BR R ,
-.BR B ,
-.BR I ,
-and
-.BR BI ,
-respectively, as postfixes in the groff font names to make groff\[aq]s
-\[oq].fam\[cq] request work.
-.
-An example is groff\[aq]s built-in Times-Roman font: The font family
-name is
-.BR T ,
-and the groff font names are
-.BR TR ,
-.BR TB ,
-.BR TI ,
-and
-.BR TBI .
-.
-.LI
-Install both the groff font description files and the fonts in a
-\[oq]devps\[cq] subdirectory of the font path which groff finds.
-.
-See the
-.B ENVIRONMENT
-section in the
-.BR troff (@MAN1EXT@)
-man page which lists the actual value of the font path.
-.
-Note that groff doesn\[aq]t use the AFM files (but it is a good idea
-to store them anyway).
-.
-.LI
-Register all fonts which must be downloaded to the printer in the
-\[oq]devps/download\[cq] file.
-.
-Only the first occurrence of this file in the font path is read.
-.
-This means that you should copy the default \[oq]download\[cq] file to
-the first directory in your font path and add your fonts there.
-.
-To continue the above example we assume that the PS font name for
-Foo-Bar-Bold.pfa is \[oq]XY-Foo-Bar-Bold\[cq] (the PS font name is
-stored in the
-.B internalname
-field in the \[oq]FBB\[cq] file), thus the following line should be
-added to \[cq]download\[cq].
-.
-.RS
-.IP
-.B XY-Foo-Bar-Bold Foo-Bar-Bold.pfa
-.
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH OLD FONTS
-.\" --------------------------------------------------------------------
-.
-groff versions 1.19.2 and earlier contain a slightly different set of
-the 35 Adobe core fonts; the difference is mainly the lack of the
-\[oq]Euro\[cq] glyph and a reduced set of kerning pairs.
-.
-For backwards compatibility, these old fonts are installed also in the
-.
-.IP
-.BR @OLDFONTDIR@/devps
-.
-.LP
-directory.
-.
-.
-.LP
-To use them, make sure that
-.B grops
-finds the fonts before the default system fonts (with the same names):
-Either add command line option
-.B \-F
-to
-.B grops
-.
-.IP
-.B groff \-Tps \-P\-F \-P@OLDFONTDIR@ .\|.\|.
-.
-.LP
-or add the directory to groff\[aq]s font path environment variable
-.
-.IP
-.B GROFF_FONT_PATH=@OLDFONTDIR@
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.SM
-.B GROPS_PROLOGUE
-If this is set to
-.IR foo ,
-then
-.B grops
-uses the file
-.I foo
-(in the font path) instead of the default prologue file
-.BR prologue .
-.
-The option
-.B \-P
-overrides this environment variable.
-.
-.
-.TP
-.SM
-.B GROFF_FONT_PATH
-A list of directories in which to search for the
-.BI dev name
-directory in addition to the default ones.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_font (@MAN5EXT@)
-for more details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'\fB@FONTDIR@/devps/download'u+2n
-.B @FONTDIR@/devps/DESC
-Device description file.
-.
-.TP
-.BI @FONTDIR@/devps/ F
-Font description file for font
-.IR F .
-.
-.TP
-.B @FONTDIR@/devps/download
-List of downloadable fonts.
-.
-.TP
-.B @FONTDIR@/devps/text.enc
-Encoding used for text fonts.
-.
-.TP
-.B @MACRODIR@/ps.tmac
-Macros for use with
-.BR grops ;
-automatically loaded by
-.BR troffrc
-.
-.TP
-.B @MACRODIR@/pspic.tmac
-Definition of
-.B PSPIC
-macro,
-automatically loaded by
-.BR ps.tmac .
-.
-.TP
-.B @MACRODIR@/psold.tmac
-Macros to disable use of characters not present in older
-PostScript printers (e.g., \[oq]eth\[cq] or \[oq]thorn\[cq]).
-.
-.TP
-.BI /tmp/grops XXXXXX
-Temporary file.
-See
-.BR groff (@MAN1EXT@)
-for details on the location of temporary files.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR \%afmtodit (@MAN1EXT@),
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR \%pfbtops (@MAN1EXT@),
-.BR \%groff_out (@MAN5EXT@),
-.BR \%groff_font (@MAN5EXT@),
-.BR \%groff_char (@MAN7EXT@),
-.BR \%groff_tmac (@MAN5EXT@)
-.
-.
-.LP
-.UR http://\:partners.adobe.com/\:public/\:developer/\:en/\:ps/\:5001.DSC_Spec.pdf
-PostScript Language Document Structuring Conventions Specification
-.UE
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 745a503b81bef3f7b76608f39ca56e24bd1eff7e..ab3b1d730ca77815ea11ac1026ead9edfe55e1f3 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /*
  * PostScript documentation:
@@ -28,6 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 #include "cset.h"
 #include "nonposix.h"
 #include "paper.h"
+#include "curtime.h"
 
 #include "ps.h"
 #include <time.h>
@@ -430,7 +431,7 @@ ps_font::ps_font(const char *nm)
 
 ps_font::~ps_font()
 {
-  a_delete encoding;
+  free(encoding);
   a_delete reencoded_name;
 }
 
@@ -440,7 +441,7 @@ void ps_font::handle_unknown_font_command(const char *command, const char *arg,
   if (strcmp(command, "encoding") == 0) {
     if (arg == 0)
       error_with_file_and_line(filename, lineno,
-                              "`encoding' command requires an argument");
+                              "'encoding' command requires an argument");
     else
       encoding = strsave(arg);
   }
@@ -452,7 +453,7 @@ static void handle_unknown_desc_command(const char *command, const char *arg,
   if (strcmp(command, "broken") == 0) {
     if (arg == 0)
       error_with_file_and_line(filename, lineno,
-                              "`broken' command requires an argument");
+                              "'broken' command requires an argument");
     else if (!bflag)
       broken_flags = atoi(arg);
   }
@@ -594,7 +595,7 @@ public:
   void end_of_line();
 };
 
-// `pl' is in inches
+// 'pl' is in inches
 ps_printer::ps_printer(double pl)
 : out(0, MAX_LINE_LENGTH),
   pages_output(0),
@@ -693,7 +694,7 @@ void ps_printer::set_char(glyph *g, font *f, const environment *env, int w,
   style sty(f, sub, env->size, env->height, env->slant);
   if (sty.slant != 0) {
     if (sty.slant > 80 || sty.slant < -80) {
-      error("silly slant `%1' degrees", sty.slant);
+      error("silly slant '%1' degrees", sty.slant);
       sty.slant = 0;
     }
   }
@@ -785,7 +786,7 @@ void ps_printer::define_encoding(const char *encoding, int encoding_index)
   char *path;
   FILE *fp = font::open_file(encoding, &path);
   if (fp == 0)
-    fatal("can't open encoding file `%1'", encoding);
+    fatal("can't open encoding file '%1'", encoding);
   int lineno = 1;
   const int BUFFER_SIZE = 512;
   char buf[BUFFER_SIZE];
@@ -803,7 +804,7 @@ void ps_printer::define_encoding(const char *encoding, int encoding_index)
     }
     lineno++;
   }
-  a_delete path;
+  free(path);
   out.put_literal_symbol(make_encoding_name(encoding_index))
      .put_delimiter('[');
   for (i = 0; i < 256; i++) {
@@ -879,7 +880,7 @@ void ps_printer::set_style(const style &sty)
   out.put_literal_symbol(buf);
   const char *psname = sty.f->get_internal_name();
   if (psname == 0)
-    fatal("no internalname specified for font `%1'", sty.f->get_name());
+    fatal("no internalname specified for font '%1'", sty.f->get_name());
   char *encoding = ((ps_font *)sty.f)->encoding;
   if (sty.sub == 0) {
     if (encoding != 0) {
@@ -1242,7 +1243,7 @@ void ps_printer::draw(int code, int *p, int np, const environment *env)
     }
     break;
   default:
-    error("unrecognised drawing command `%1'", char(code));
+    error("unrecognised drawing command '%1'", char(code));
     break;
   }
   output_hpos = output_vpos = -1;
@@ -1353,7 +1354,7 @@ void ps_printer::end_page(int)
   set_color(&default_color);
   out.put_symbol("EP");
   if (invis_count != 0) {
-    error("missing `endinvis' command");
+    error("missing 'endinvis' command");
     invis_count = 0;
   }
 }
@@ -1390,7 +1391,7 @@ ps_printer::~ps_printer()
 #else
     time_t
 #endif
-    t = time(0);
+    t = current_time();
     fputs(ctime(&t), out.get_file());
   }
   for (font_pointer_list *f = font_list; f; f = f->next) {
@@ -1540,7 +1541,7 @@ void ps_printer::special(char *arg, const environment *env, char type)
   for (; *p != '\0' && *p != ':' && *p != ' ' && *p != '\n'; p++)
     ;
   if (*p == '\0' || strncmp(tag, "ps", p - tag) != 0) {
-    error("X command without `ps:' tag ignored");
+    error("X command without 'ps:' tag ignored");
     return;
   }
   p++;
@@ -1561,7 +1562,7 @@ void ps_printer::special(char *arg, const environment *env, char type)
       (this->*(proc_table[i].proc))(p, env);
       return;
     }
-  error("X command `%1' not recognised", command);
+  error("X command '%1' not recognised", command);
 }
 
 // A conforming PostScript document must not have lines longer
@@ -1657,7 +1658,7 @@ void ps_printer::do_mdef(char *arg, const environment *)
     return;
   }
   if (n < 0) {
-    error("out of range argument `%1' to X mdef command", int(n));
+    error("out of range argument '%1' to X mdef command", int(n));
     return;
   }
   arg = p;
@@ -1701,11 +1702,11 @@ void ps_printer::do_import(char *arg, const environment *env)
     if (*p == '\0')
       error("too few arguments for X import command");
     else
-      error("invalid argument `%1' for X import command", p);
+      error("invalid argument '%1' for X import command", p);
     return;
   }
   if (*p != '\0') {
-    error("superfluous argument `%1' for X import command", p);
+    error("superfluous argument '%1' for X import command", p);
     return;
   }
   int llx = parms[0];
@@ -1715,12 +1716,12 @@ void ps_printer::do_import(char *arg, const environment *env)
   int desired_width = parms[4];
   int desired_height = parms[5];
   if (desired_width <= 0) {
-    error("bad width argument `%1' for X import command: must be > 0",
+    error("bad width argument '%1' for X import command: must be > 0",
          desired_width);
     return;
   }
   if (nparms == 6 && desired_height <= 0) {
-    error("bad height argument `%1' for X import command: must be > 0",
+    error("bad height argument '%1' for X import command: must be > 0",
          desired_height);
     return;
   }
@@ -1766,7 +1767,7 @@ void ps_printer::do_invis(char *, const environment *)
 void ps_printer::do_endinvis(char *, const environment *)
 {
   if (invis_count == 0)
-    error("unbalanced `endinvis' command");
+    error("unbalanced 'endinvis' command");
   else
     --invis_count;
 }
@@ -1801,7 +1802,7 @@ int main(int argc, char **argv)
       break;
     case 'c':
       if (sscanf(optarg, "%d", &ncopies) != 1 || ncopies <= 0) {
-       error("bad number of copies `%s'", optarg);
+       error("bad number of copies '%1'", optarg);
        ncopies = 1;
       }
       break;
@@ -1823,7 +1824,7 @@ int main(int argc, char **argv)
     case 'p':
       if (!font::scan_papersize(optarg, 0,
                                &user_paper_length, &user_paper_width))
-       error("invalid custom paper size `%1' ignored", optarg);
+       error("invalid custom paper size '%1' ignored", optarg);
       break;
     case 'P':
       env = "GROPS_PROLOGUE";
@@ -1839,7 +1840,7 @@ int main(int argc, char **argv)
       break;
     case 'w':
       if (sscanf(optarg, "%d", &linewidth) != 1 || linewidth < 0) {
-       error("bad linewidth `%1'", optarg);
+       error("bad linewidth '%1'", optarg);
        linewidth = -1;
       }
       break;
index c6428530108e079795fa1fb30aeedd8277c423e7..816c7aba7c658e8f1073d99d3f0a5213b35305b5 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 class ps_output {
 public:
@@ -52,7 +52,7 @@ inline FILE *ps_output::get_file()
   return fp;
 }
 
-// this must stay in sync with `resource_table' in `psrm.cpp'
+// this must stay in sync with 'resource_table' in 'psrm.cpp'
 enum resource_type {
   RESOURCE_FONT,
   RESOURCE_FONTSET,
index 5be080ddd933b741629c4e33f3f1a0c19b60e45d..4e0d1f9858af1cb836f067413e61f339fe1956e1 100644 (file)
@@ -5,7 +5,7 @@ work only with groff, so you might want to install it under a
 different name.  The output of this psfig must be processed using the
 macros in the file ../tmac/tmac.psfig.  These will automatically add
 the necessary PostScript code to the prologue output by grops.  Use of
-the `global' feature in psfig will result in non-conformant PostScript
+the 'global' feature in psfig will result in non-conformant PostScript
 which will fail if processed by a page reversal program.  Note that
 psfig is unsupported by me (I'm not interested in hearing about psfig
 problems.)  For new documents, I recommend using the PostScript
index 2c00b6c7ada6d9f7070dfc2a3f0c323936f3bdb4..152f9d9a89b9d41cd81f0ca133ba85cd8a3ffc42 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "driver.h"
 #include "stringclass.h"
@@ -85,7 +85,7 @@ const char *extension_table[] = {
 
 const int NEXTENSIONS = sizeof(extension_table)/sizeof(extension_table[0]);
 
-// this must stay in sync with `resource_type' in `ps.h'
+// this must stay in sync with 'resource_type' in 'ps.h'
 const char *resource_table[] = {
   "font",
   "fontset",
@@ -150,7 +150,7 @@ resource::resource(resource_type t, string &n, string &v, unsigned r)
 
 resource::~resource()
 {
-  a_delete filename;
+  free(filename);
 }
 
 void resource::print_type_and_name(FILE *outfp)
@@ -317,13 +317,13 @@ void resource_manager::output_prolog(ps_output &out)
   char *prologue = getenv("GROPS_PROLOGUE");
   FILE *fp = font::open_file(prologue, &path);
   if (!fp)
-    fatal("can't find `%1'", prologue);
+    fatal("can't find '%1'", prologue);
   fputs("%%BeginResource: ", outfp);
   procset_resource->print_type_and_name(outfp);
   putc('\n', outfp);
   process_file(-1, fp, path, outfp);
   fclose(fp);
-  a_delete path;
+  free(path);
   fputs("%%EndResource\n", outfp);
 }
 
@@ -340,7 +340,7 @@ void resource_manager::supply_resource(resource *r, int rank, FILE *outfp,
 {
   if (r->flags & resource::BUSY) {
     r->name += '\0';
-    fatal("loop detected in dependency graph for %1 `%2'",
+    fatal("loop detected in dependency graph for %1 '%2'",
          resource_table[r->type],
          r->name.contents());
   }
@@ -353,7 +353,7 @@ void resource_manager::supply_resource(resource *r, int rank, FILE *outfp,
     if (r->type == RESOURCE_FONT) {
       fp = font::open_file(r->filename, &path);
       if (!fp) {
-       error("can't find `%1'", r->filename);
+       error("can't find '%1'", r->filename);
        a_delete r->filename;
        r->filename = 0;
       }
@@ -362,7 +362,7 @@ void resource_manager::supply_resource(resource *r, int rank, FILE *outfp,
       errno = 0;
       fp = include_search_path.open_file_cautious(r->filename);
       if (!fp) {
-       error("can't open `%1': %2", r->filename, strerror(errno));
+       error("can't open '%1': %2", r->filename, strerror(errno));
        a_delete r->filename;
        r->filename = 0;
       }
@@ -386,7 +386,7 @@ void resource_manager::supply_resource(resource *r, int rank, FILE *outfp,
     process_file(rank, fp, path, outfp);
     fclose(fp);
     if (r->type == RESOURCE_FONT)
-      a_delete path;
+      free(path);
     if (outfp) {
       if (r->type == RESOURCE_FILE && is_document)
        fputs("%%EndDocument\n", outfp);
@@ -810,7 +810,7 @@ int resource_manager::do_begin_data(const char *ptr, int, FILE *fp,
     if (*ptr != '\0') {
       unit = read_one_of(&ptr, units, 2);
       if (unit < 0) {
-       error("expected `Bytes' or `Lines'");
+       error("expected 'Bytes' or 'Lines'");
        return 0;
       }
     }
@@ -928,7 +928,7 @@ static unsigned parse_extensions(const char *ptr)
     if (i >= NEXTENSIONS) {
       string s(name, ptr - name);
       s += '\0';
-      error("unknown extension `%1'", s.contents());
+      error("unknown extension '%1'", s.contents());
     }
   }
   return flags;
@@ -1077,7 +1077,7 @@ void resource_manager::read_download_file()
   char *path = 0;
   FILE *fp = font::open_file("download", &path);
   if (!fp)
-    fatal("can't find `download'");
+    fatal("can't find 'download'");
   char buf[512];
   int lineno = 0;
   while (fgets(buf, sizeof(buf), fp)) {
@@ -1090,7 +1090,7 @@ void resource_manager::read_download_file()
       fatal_with_file_and_line(path, lineno, "missing filename");
     lookup_font(p)->filename = strsave(q);
   }
-  a_delete path;
+  free(path);
   fclose(fp);
 }
 
diff --git a/src/devices/grotty/Makefile.sub b/src/devices/grotty/Makefile.sub
deleted file mode 100644 (file)
index b3d0900..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-# Makefile.sub for `grotty'
-#
-# File position: <groff-source>/src/devices/grotty/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grotty$(EXEEXT)
-MAN1=grotty.n
-XLIBS=$(LIBDRIVER) $(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=tty.$(OBJEXT)
-CCSRCS=$(srcdir)/tty.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/devices/grotty/grotty.1.man b/src/devices/grotty/grotty.1.man
new file mode 100644 (file)
index 0000000..1d9b5f8
--- /dev/null
@@ -0,0 +1,542 @@
+.TH GROTTY @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+grotty \- groff driver for typewriter-like devices
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr grotty_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY grotty
+.OP \-bBcdfhioruUv
+.OP \-F dir
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B grotty
+translates the output of GNU
+.B troff
+into a form suitable for typewriter-like devices.
+.
+Normally
+.B grotty
+should be invoked by using the
+.B groff
+command with a
+.BR \-Tascii ,
+.B \-Tlatin1
+or
+.B \-Tutf8
+option on ASCII based systems, and with
+.B \-Tcp1047
+and
+.B \-Tutf8
+on EBCDIC based hosts.
+.
+If no files are given,
+.B grotty
+reads the standard input.
+.
+A filename of
+.B \-
+also causes
+.B grotty
+to read the standard input.
+.
+Output is written to the standard output.
+.
+.
+.LP
+By default,
+.B grotty
+emits SGR escape sequences (from ISO 6429, also called ANSI color
+escapes) to change text attributes (bold, italic, colors).
+.
+This makes it possible to have eight different background and
+foreground colors; additionally, bold and italic attributes can be
+used \f[BI]at the same time\f[] (by using the BI font).
+.
+.
+.LP
+The following colors are defined in
+.BR tty.tmac :
+black, white, red, green, blue, yellow, magenta, cyan.
+.
+Unknown colors are mapped to the default color (which is dependent on
+the settings of the terminal; in most cases, this is black for the
+foreground and white for the background).
+.
+.
+.LP
+Use the
+.B \-c
+switch to revert to the old behaviour, printing a bold character
+.I c
+with the sequence
+.RI \[lq] c
+BACKSPACE
+.IR c \[rq]
+and an italic character
+.I c
+by the sequence
+.RB \[lq] _
+BACKSPACE
+.IR c \[rq].
+.
+At the same time, color output is disabled.
+.
+The same effect can be achieved by setting either the
+.I GROFF_NO_SGR
+environment variable or using the \[oq]sgr\[cq] X command (see below).
+.
+.
+.LP
+For SGR support, it is necessary to use the
+.B \-R
+option of
+.BR less (1)
+to disable the interpretation of
+.BR grotty 's
+old output format.
+.
+Consequently, all programs which use
+.B less
+as the pager program have to pass this option to it.
+.
+For
+.BR man (1)
+in particular, either add
+.B \-R
+to the
+.I PAGER
+environment variable, e.g.\&
+.
+.RS
+.LP
+.B PAGER="/usr/bin/less \-R"
+.br
+.B export PAGER
+.RE
+.LP
+.
+or use the
+.B \-P
+option of
+.B man
+to set the pager executable and its options, or modify the
+configuration file of
+.B man
+in a similar fashion.
+.
+Note that with some
+.BR man (1)
+versions, you have to use the
+.I \%MANPAGER
+environment variable instead.
+.
+.
+.LP
+.BR grotty 's
+old output format can be displayed on a terminal
+by piping through
+.BR ul (1).
+Pagers such as
+.BR more (1)
+or
+.BR less (1)
+are also able to display these sequences.
+Use either
+.B \-B
+or
+.B \-U
+when piping into
+.BR less (1);
+use
+.B \-b
+when piping into
+.BR more (1).
+There is no need to filter the output through
+.BR col (1)
+since
+.B grotty
+never outputs reverse line feeds.
+.
+.
+.LP
+The font description file may contain a command
+.
+.IP
+.BI internalname\  n
+.LP
+.
+where
+.I n
+is a decimal integer.
+.
+If the 01 bit in
+.I n
+is set,
+then the font is treated as an italic font;
+if the 02 bit is set,
+then it is treated as a bold font.
+.
+The code field in the font description field gives the code which is
+used to output the character.
+.
+This code can also be used in the
+.B \[rs]N
+escape sequence in
+.BR troff .
+.
+.
+.LP
+If the
+.I DESC
+file contains the keyword
+.BR unicode ,
+.B grotty
+emits Unicode characters in UTF-8 encoding.
+.
+Otherwise, it emits characters in a single-byte encoding depending on
+the data in the font description files.
+.
+See the
+.BR groff_font (@MAN5EXT@)
+man page for more details.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.B \-b
+Suppress the use of overstriking for bold characters.
+.
+Ignored if
+.B \-c
+isn't used.
+.
+.TP
+.B \-B
+Use only overstriking for bold-italic characters.
+Ignored if
+.B \-c
+isn't used.
+.
+.TP
+.B \-c
+Use
+.BR grotty 's
+old output format (see above).
+This also disables color output.
+.
+.TP
+.B \-d
+Ignore all
+.B \[rs]D
+commands.
+.
+Without this
+.B grotty
+renders
+.B \[rs]D'l\|.\|.\|.\&'
+commands that have at least one zero argument
+(and so are either horizontal or vertical)
+using
+.BR \- ,
+.BR | ,
+and
+.B +
+characters.
+.
+In a similar way,
+.B grotty
+handles
+.B \[rs]D'p\|.\|.\|.\&'
+commands which consist entirely of horizontal and vertical lines.
+.
+.
+.TP
+.B \-f
+Use form feeds in the output.
+.
+A form feed is output at the end of each page that has no output on
+its last line.
+.
+.TP
+.BI \-F dir
+Prepend directory
+.RI dir /dev name
+to the search path for font and device description files;
+.I name
+is the name of the device, usually
+.BR ascii ,
+.BR latin1 ,
+.BR utf8 ,
+or
+.BR cp1047 .
+.
+.TP
+.B \-h
+Use horizontal tabs in the output.
+.
+Tabs are assumed to be set every 8 columns.
+.
+.TP
+.B \-i
+Use escape sequences to set the italic text attribute instead of the
+underline attribute for italic fonts (\[oq]I\[cq] and \[oq]BI\[cq]).
+.
+Note that most terminals (including xterm) don't support this.
+.
+Ignored if
+.B \-c
+is active.
+.
+.TP
+.B \-o
+Suppress overstriking (other than for bold or underlined characters in
+case the old output format has been activated with
+.BR \-c ).
+.
+.TP
+.B \-r
+Use escape sequences to set the reverse text attribute instead of the
+underline attribute for italic fonts (\[oq]I\[cq] and \[oq]BI\[cq]).
+.
+Ignored if
+.B \-c
+is active.
+.
+.TP
+.B \-u
+Suppress the use of underlining for italic characters.
+.
+Ignored if
+.B \-c
+isn't used.
+.
+.TP
+.B \-U
+Use only underlining for bold-italic characters.
+.
+Ignored if
+.B \-c
+isn't used.
+.
+.TP
+.B \-v
+Print the version number.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+.B grotty
+understands a single X command produced using the
+.B \[rs]X
+escape sequence.
+.
+.TP
+.BI \[rs]X'tty:\ sgr\  n '
+.
+If
+.I n
+is non-zero or missing, enable SGR output (this is the default),
+otherwise use the old drawing scheme for bold and underline.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROFF_NO_SGR
+If set, the old drawing scheme for bold and underline (using the
+backspace character) is active.
+.
+Colors are disabled.
+.
+.
+.TP
+.I GROFF_FONT_PATH
+A list of directories in which to search for the
+.IR dev name
+directory in addition to the default ones.
+.
+See
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_font (@MAN5EXT@)
+for more details.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @FONTDIR@/devascii/DESC
+Device description file for the
+.B ascii
+device.
+.
+.TP
+.IR @FONTDIR@/devascii/ F
+Font description file for font
+.I F
+of the
+.B ascii
+device.
+.
+.TP
+.I @FONTDIR@/devlatin1/DESC
+Device description file for the
+.B latin1
+device.
+.
+.TP
+.IR @FONTDIR@/devlatin1/ F
+Font description file for font
+.I F
+of the
+.B latin1
+device.
+.
+.TP
+.I @FONTDIR@/devutf8/DESC
+Device description file for the
+.B utf8
+device.
+.
+.TP
+.IR @FONTDIR@/devutf8/ F
+Font description file for font
+.I F
+of the
+.B utf8
+device.
+.
+.TP
+.I @FONTDIR@/devcp1047/DESC
+Device description file for the
+.B cp1047
+device.
+.
+.TP
+.IR @FONTDIR@/devcp1047/ F
+Font description file for font
+.I F
+of the
+.B cp1047
+device.
+.
+.TP
+.I @MACRODIR@/tty.tmac
+Macros for use with
+.BR grotty .
+.
+.TP
+.I @MACRODIR@/tty\-char.tmac
+Additional character definitions for use with
+.BR grotty .
+.
+.LP
+Note that on EBCDIC hosts, only files for the
+.B cp1047
+device is installed.
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+.
+.B grotty
+is intended only for simple documents.
+.
+.
+.LP
+There is no support for fractional horizontal or vertical motions.
+.
+.
+.LP
+There is no support for
+.B \[rs]D
+commands other than horizontal and vertical lines.
+.
+.
+.LP
+Characters above the first line (i.e.\& with a vertical position
+of\~0) cannot be printed.
+.
+.
+.LP
+Color handling differs from
+.BR grops (@MAN1EXT@).
+.B \[rs]M
+doesn't set the fill color for closed graphic objects (which
+.B grotty
+doesn't support anyway) but changes the background color of the
+character cell, affecting all subsequent operations.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR groff_out (@MAN5EXT@),
+.BR groff_font (@MAN5EXT@),
+.BR groff_char (@MAN7EXT@),
+.BR ul (1),
+.BR more (1),
+.BR man (1),
+.BR less (1)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[grotty_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/devices/grotty/grotty.am b/src/devices/grotty/grotty.am
new file mode 100644 (file)
index 0000000..98d137a
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += grotty
+grotty_SOURCES = src/devices/grotty/tty.cpp
+grotty_LDADD = $(LIBM) \
+  libdriver.a \
+  libgroff.a \
+  lib/libgnu.a
+man1_MANS += src/devices/grotty/grotty.1
+EXTRA_DIST += \
+  src/devices/grotty/grotty.1.man \
+  src/devices/grotty/TODO
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/src/devices/grotty/grotty.man b/src/devices/grotty/grotty.man
deleted file mode 100644 (file)
index 07ab62a..0000000
+++ /dev/null
@@ -1,544 +0,0 @@
-.\" -*- nroff -*-
-.TH GROTTY @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grotty \- groff driver for typewriter-like devices
-.
-.
-.\" license
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.do nr grotty_C \n[.C]
-.cp 0
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B grotty
-[
-.B \-bBcdfhioruUv
-] [
-.BI \-F dir
-] [
-.IR files \|.\|.\|.\&
-]
-.PP
-It is possible to have whitespace between the
-.B \-F
-option and its parameter.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B grotty
-translates the output of GNU
-.B troff
-into a form suitable for typewriter-like devices.
-.
-Normally
-.B grotty
-should be invoked by using the
-.B groff
-command with a
-.BR \-Tascii ,
-.B \-Tlatin1
-or
-.B \-Tutf8
-option on ASCII based systems, and with
-.B \-Tcp1047
-and
-.B \-Tutf8
-on EBCDIC based hosts.
-.
-If no files are given,
-.B grotty
-reads the standard input.
-.
-A filename of
-.B \-
-also causes
-.B grotty
-to read the standard input.
-.
-Output is written to the standard output.
-.
-.
-.LP
-By default,
-.B grotty
-emits SGR escape sequences (from ISO 6429, also called ANSI color
-escapes) to change text attributes (bold, italic, colors).
-.
-This makes it possible to have eight different background and
-foreground colors; additionally, bold and italic attributes can be
-used \f[BI]at the same time\f[] (by using the BI font).
-.
-.
-.LP
-The following colors are defined in
-.BR tty.tmac :
-black, white, red, green, blue, yellow, magenta, cyan.
-.
-Unknown colors are mapped to the default color (which is dependent on
-the settings of the terminal; in most cases, this is black for the
-foreground and white for the background).
-.
-.
-.LP
-Use the
-.B \-c
-switch to revert to the old behaviour, printing a bold character
-.I c
-with the sequence
-.RI ` c
-.SM BACKSPACE
-.IR c '
-and an italic character
-.I c
-by the sequence
-.RB ` _
-.SM BACKSPACE
-.IR c '.
-.
-At the same time, color output is disabled.
-.
-The same effect can be achieved by setting either the
-.B GROFF_NO_SGR
-environment variable or using the \[oq]sgr\[cq] X command (see below).
-.
-.
-.LP
-For SGR support, it is necessary to use the
-.B \-R
-option of
-.BR less (1)
-to disable the interpretation of
-.BR grotty \[aq]s
-old output format.
-.
-Consequently, all programs which use
-.B less
-as the pager program have to pass this option to it.
-.
-For
-.BR man (1)
-in particular, either add
-.B \-R
-to the
-.B $PAGER
-environment variable, e.g.\&
-.
-.RS
-.LP
-.B PAGER="/usr/bin/less \-R"
-.br
-.B export PAGER
-.RE
-.LP
-.
-or use the
-.B \-P
-option of
-.B man
-to set the pager executable and its options, or modify the
-configuration file of
-.B man
-in a similar fashion.
-.
-Note that with some
-.BR man (1)
-versions, you have to use the
-.B $MANPAGER
-environment variable instead.
-.
-.
-.LP
-.BR grotty \[aq]s
-old output format can be displayed on a terminal
-by piping through
-.BR ul (1).
-Pagers such as
-.BR more (1)
-or
-.BR less (1)
-are also able to display these sequences.
-Use either
-.B \-B
-or
-.B \-U
-when piping into
-.BR less (1);
-use
-.B \-b
-when piping into
-.BR more (1).
-There is no need to filter the output through
-.BR col (1)
-since
-.B grotty
-never outputs reverse line feeds.
-.
-.
-.LP
-The font description file may contain a command
-.
-.IP
-.BI internalname\  n
-.LP
-.
-where
-.I n
-is a decimal integer.
-.
-If the 01 bit in
-.I n
-is set,
-then the font is treated as an italic font;
-if the 02 bit is set,
-then it is treated as a bold font.
-.
-The code field in the font description field gives the code which is
-used to output the character.
-.
-This code can also be used in the
-.B \[rs]N
-escape sequence in
-.BR troff .
-.
-.
-.LP
-If the
-.B DESC
-file contains the keyword
-.BR unicode ,
-.B grotty
-emits Unicode characters in UTF-8 encoding.
-.
-Otherwise, it emits characters in a single-byte encoding depending on
-the data in the font description files.
-.
-See the
-.BR groff_font (@MAN5EXT@)
-man page for more details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.B \-b
-Suppress the use of overstriking for bold characters.
-.
-Ignored if
-.B \-c
-isn\[aq]t used.
-.
-.TP
-.B \-B
-Use only overstriking for bold-italic characters.
-Ignored if
-.B \-c
-isn\[aq]t used.
-.
-.TP
-.B \-c
-Use
-.BR grotty \[aq]s
-old output format (see above).
-This also disables color output.
-.
-.TP
-.B \-d
-Ignore all
-.B \[rs]D
-commands.
-.
-Without this
-.B grotty
-renders
-.B \[rs]D'l\|.\|.\|.\&'
-commands that have at least one zero argument
-(and so are either horizontal or vertical)
-using
-.BR \- ,
-.BR | ,
-and
-.B +
-characters.
-.
-In a similar way,
-.B grotty
-handles
-.B \[rs]D'p\|.\|.\|.\&'
-commands which consist entirely of horizontal and vertical lines.
-.
-.
-.TP
-.B \-f
-Use form feeds in the output.
-.
-A form feed is output at the end of each page that has no output on
-its last line.
-.
-.TP
-.BI \-F dir
-Prepend directory
-.IB dir /dev name
-to the search path for font and device description files;
-.I name
-is the name of the device, usually
-.BR ascii ,
-.BR latin1 ,
-.BR utf8 ,
-or
-.BR cp1047 .
-.
-.TP
-.B \-h
-Use horizontal tabs in the output.
-.
-Tabs are assumed to be set every 8 columns.
-.
-.TP
-.B \-i
-Use escape sequences to set the italic text attribute instead of the
-underline attribute for italic fonts (\[oq]I\[cq] and \[oq]BI\[cq]).
-.
-Note that most terminals (including xterm) don\[aq]t support this.
-.
-Ignored if
-.B \-c
-is active.
-.
-.TP
-.B \-o
-Suppress overstriking (other than for bold or underlined characters in
-case the old output format has been activated with
-.BR \-c ).
-.
-.TP
-.B \-r
-Use escape sequences to set the reverse text attribute instead of the
-underline attribute for italic fonts (\[oq]I\[cq] and \[oq]BI\[cq]).
-.
-Ignored if
-.B \-c
-is active.
-.
-.TP
-.B \-u
-Suppress the use of underlining for italic characters.
-.
-Ignored if
-.B \-c
-isn\[aq]t used.
-.
-.TP
-.B \-U
-Use only underlining for bold-italic characters.
-.
-Ignored if
-.B \-c
-isn\[aq]t used.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-.B grotty
-understands a single X command produced using the
-.B \[rs]X
-escape sequence.
-.
-.TP
-.BI \[rs]X'tty:\ sgr\  n '
-.
-If
-.I n
-is non-zero or missing, enable SGR output (this is the default),
-otherwise use the old drawing scheme for bold and underline.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.SM
-.B GROFF_NO_SGR
-If set, the old drawing scheme for bold and underline (using the
-backspace character) is active.
-.
-Colors are disabled.
-.
-.
-.TP
-.SM
-.B GROFF_FONT_PATH
-A list of directories in which to search for the
-.BI dev name
-directory in addition to the default ones.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_font (@MAN5EXT@)
-for more details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP
-.B @FONTDIR@/devascii/DESC
-Device description file for
-.B ascii
-device.
-.
-.TP
-.BI @FONTDIR@/devascii/ F
-Font description file for font
-.I F
-of
-.B ascii
-device.
-.
-.TP
-.B @FONTDIR@/devlatin1/DESC
-Device description file for
-.B latin1
-device.
-.
-.TP
-.BI @FONTDIR@/devlatin1/ F
-Font description file for font
-.I F
-of
-.B latin1
-device.
-.
-.TP
-.B @FONTDIR@/devutf8/DESC
-Device description file for
-.B utf8
-device.
-.
-.TP
-.BI @FONTDIR@/devutf8/ F
-Font description file for font
-.I F
-of
-.B utf8
-device.
-.
-.TP
-.B @FONTDIR@/devcp1047/DESC
-Device description file for
-.B cp1047
-device.
-.
-.TP
-.BI @FONTDIR@/devcp1047/ F
-Font description file for font
-.I F
-of
-.B cp1047
-device.
-.
-.TP
-.B @MACRODIR@/tty.tmac
-Macros for use with
-.BR grotty .
-.
-.TP
-.B @MACRODIR@/tty-char.tmac
-Additional kludgy character definitions for use with
-.BR grotty .
-.
-.LP
-Note that on EBCDIC hosts, only files for the
-.B cp1047
-device is installed.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-.B grotty
-is intended only for simple documents.
-.
-.
-.LP
-There is no support for fractional horizontal or vertical motions.
-.
-.
-.LP
-There is no support for
-.B \[rs]D
-commands other than horizontal and vertical lines.
-.
-.
-.LP
-Characters above the first line (i.e.\& with a vertical position
-of\~0) cannot be printed.
-.
-.
-.LP
-Color handling is different compared to
-.BR grops (@MAN1EXT@).
-.B \[rs]M
-doesn\[aq]t set the fill color for closed graphic objects (which
-.B grotty
-doesn\[aq]t support anyway) but changes the background color of the
-character cell, affecting all subsequent operations.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR groff_char (@MAN7EXT@),
-.BR ul (1),
-.BR more (1),
-.BR man (1),
-.BR less (1)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.cp \n[grotty_C]
index 60d46e8a9640c563fa1267c2bfccca0a76e28652..9c405db3daa4b34d58d98463ca14adb33939ac2e 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "driver.h"
 #include "device.h"
@@ -93,9 +93,9 @@ static unsigned char bold_underline_mode;
 #define SGR_NO_UNDERLINE CSI "24m"
 #define SGR_REVERSE CSI "7m"
 #define SGR_NO_REVERSE CSI "27m"
-// many terminals can't handle `CSI 39 m' and `CSI 49 m' to reset
+// many terminals can't handle 'CSI 39 m' and 'CSI 49 m' to reset
 // the foreground and background color, respectively; we thus use
-// `CSI 0 m' exclusively
+// 'CSI 0 m' exclusively
 #define SGR_DEFAULT CSI "0m"
 
 #define DEFAULT_COLOR_IDX -1
@@ -153,7 +153,6 @@ void tty_font::handle_x_command(int argc, const char **argv)
 #endif
 
 class tty_glyph {
-  static tty_glyph *free_list;
 public:
   tty_glyph *next;
   int w;
@@ -162,37 +161,11 @@ public:
   unsigned char mode;
   schar back_color_idx;
   schar fore_color_idx;
-  void *operator new(size_t);
-  void operator delete(void *);
   inline int draw_mode() { return mode & (VDRAW_MODE|HDRAW_MODE); }
   inline int order() {
     return mode & (VDRAW_MODE|HDRAW_MODE|CU_MODE|COLOR_CHANGE); }
 };
 
-tty_glyph *tty_glyph::free_list = 0;
-
-void *tty_glyph::operator new(size_t)
-{
-  if (!free_list) {
-    const int BLOCK = 1024;
-    free_list = (tty_glyph *)new char[sizeof(tty_glyph) * BLOCK];
-    for (int i = 0; i < BLOCK - 1; i++)
-      free_list[i].next = free_list + i + 1;
-    free_list[BLOCK - 1].next = 0;
-  }
-  tty_glyph *p = free_list;
-  free_list = free_list->next;
-  p->next = 0;
-  return p;
-}
-
-void tty_glyph::operator delete(void *p)
-{
-  if (p) {
-    ((tty_glyph *)p)->next = free_list;
-    free_list = (tty_glyph *)p;
-  }
-}
 
 class tty_printer : public printer {
   tty_glyph **lines;
@@ -447,7 +420,7 @@ void tty_printer::special(char *arg, const environment *env, char type)
   for (; *p != '\0' && *p != ':' && *p != ' ' && *p != '\n'; p++)
     ;
   if (*p == '\0' || strncmp(tag, "tty", p - tag) != 0) {
-    error("X command without `tty:' tag ignored");
+    error("X command without 'tty:' tag ignored");
     return;
   }
   p++;
@@ -652,9 +625,9 @@ void tty_printer::put_color(schar color_index, int back)
 
 // The possible Unicode combinations for crossing characters.
 //
-// `  ' = 0, ` -' = 4, `- ' = 8, `--' = 12,
+// '  ' = 0, ' -' = 4, '- ' = 8, '--' = 12,
 //
-// `  ' = 0, ` ' = 1, `|' = 2, `|' = 3
+// '  ' = 0, ' ' = 1, '|' = 2, '|' = 3
 //            |                 |
 
 static output_character crossings[4*4] = {
index 024e59f0907ca2007fe558349532eed4f2e0ce63..6b44a14f030d901d86422117312752d4a542340b 100644 (file)
@@ -1,3 +1,13 @@
+2015-08-22  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * gxditview.1.man: Rename `gxditview.man'.
+
+       * xditview.am: Include renaming.
+
+2015-08-05  Bernd Warken  <groff-bernd.warken-72@web.de>
+
+       * xditview.am: Add `Last update'.  Setup Emacs mode.
+
 2004-05-29  Werner LEMBERG  <wl@gnu.org>
 
        gxditview and xtotroff have been integrated into the normal groff
@@ -541,8 +551,9 @@ Sun May 26 14:14:01 1991  James Clark  (jjc at jclark)
 
        * Started separate ChangeLog.
 
-Copyright 1991-1995, 1999, 200, 2001, 2002, 2003, 2004
-  Free Software Foundation, Inc.
+________________________________________________________________________
+
+Copyright 1991-2018 Free Software Foundation, Inc.
 
 Copying and distribution of this file, with or without modification,
 are permitted in any medium without royalty provided the copyright
@@ -550,5 +561,6 @@ notice and this notice are preserved.
 
 Local Variables:
 version-control: never
+mode: change-log
 coding: latin-1
 End:
index f849fb14a9b7a106c4af9355b3d93049682f5bd7..28512ae421ccf668b874bdb93aaaffe1827b8902 100644 (file)
@@ -20,7 +20,11 @@ static char Xrcsid[] = "$XConsortium: Dvi.c,v 1.9 89/12/10 16:12:25 rws Exp $";
 #include <X11/Xmu/Converters.h>
 #include <stdio.h>
 #include <ctype.h>
+
 #include "DviP.h"
+#include "font.h"
+#include "page.h"
+#include "parse.h"
 
 /****************************************************************
  *
@@ -116,20 +120,6 @@ static void                FindPage (DviWidget);
 
 static void            SaveToFile (Widget, FILE *);
 
-/* font.c */
-extern void ParseFontMap(DviWidget);
-extern void DestroyFontMap(DviFontMap *);
-extern void ForgetFonts(DviWidget);
-
-/* page.c */
-extern void DestroyFileMap(DviFileMap *);
-extern long SearchPagePosition(DviWidget, int);
-extern void FileSeek(DviWidget, long);
-extern void ForgetPagePositions(DviWidget);
-
-/* parse.c */
-extern int ParseInput(register DviWidget);
-
 DviClassRec dviClassRec = {
 {
        &widgetClassRec,                /* superclass             */    
index 545661c58661ef3edb4ca94220f3f61940e65196..8b71c698e66eafa629e7d64f6ac341bcc9ede149 100644 (file)
@@ -132,7 +132,7 @@ typedef struct {
        XFontStruct     *default_font;
        FILE            *file;
        Boolean         noPolyText;
-       Boolean         seek;           /* file is `seekable' */
+       Boolean         seek;           /* file is 'seekable' */
        int             default_resolution;
        /*
         * private state
@@ -230,4 +230,6 @@ DeviceFont  *QueryDeviceFont (DviWidget, int);
 
 char *GetWord(DviWidget, char *, int);
 char *GetLine(DviWidget, char *, int);
+
+void SetDevice (DviWidget dw, const char *name);
 #endif /* _XtDviP_h */
diff --git a/src/devices/xditview/Makefile.sub b/src/devices/xditview/Makefile.sub
deleted file mode 100644 (file)
index 4bc7b50..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-# Makefile.sub for `xditview'
-#
-# File position: <groff-source>/src/devices/xditview/Makefile.sub
-#
-# Copyright (C) 2014 Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=gxditview$(EXEEXT)
-MAN1=gxditview.n
-MLIB=$(LIBM)
-XLIBS=$(LIBXUTIL)
-EXTRA_CFLAGS=$(X_CFLAGS) -Dlint
-EXTRA_LDFLAGS=$(X_LIBS) $(X_PRE_LIBS) -lXaw -lXmu -lXt -lX11 $(X_EXTRA_LIBS)
-OBJS=\
-  device.$(OBJEXT) \
-  draw.$(OBJEXT) \
-  Dvi.$(OBJEXT) \
-  font.$(OBJEXT) \
-  lex.$(OBJEXT) \
-  page.$(OBJEXT) \
-  parse.$(OBJEXT) \
-  xditview.$(OBJEXT)
-CSRCS=\
-  $(srcdir)/device.c \
-  $(srcdir)/draw.c \
-  $(srcdir)/Dvi.c \
-  $(srcdir)/font.c \
-  $(srcdir)/lex.c \
-  $(srcdir)/page.c \
-  $(srcdir)/parse.c \
-  $(srcdir)/xditview.c
-HDRS=\
-  $(srcdir)/device.h \
-  $(srcdir)/Dvi.h \
-  $(srcdir)/DviP.h \
-  $(srcdir)/Menu.h
-GENHDRS=GXditview-ad.h
-RM=rm -f
-
-all depend: $(GENHDRS)
-
-GXditview-ad.h: $(srcdir)/GXditview.ad
-       @echo Making $@
-       $(SHELL) $(srcdir)/ad2c $(srcdir)/GXditview.ad > $@
-
-install_data: $(srcdir)/GXditview.ad $(srcdir)/GXditview-color.ad
-       -test -d $(DESTDIR)$(appresdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(appresdir)
-       if test -f $(DESTDIR)$(appresdir)/GXditview; then \
-         mv $(DESTDIR)$(appresdir)/GXditview \
-           $(DESTDIR)$(appresdir)/GXditview.old; \
-       fi
-       if test -f $(DESTDIR)$(appresdir)/GXditview-color; then \
-         mv $(DESTDIR)$(appresdir)/GXditview-color \
-           $(DESTDIR)$(appresdir)/GXditview-color.old; \
-       fi
-       $(INSTALL_DATA) $(srcdir)/GXditview.ad \
-         $(DESTDIR)$(appresdir)/GXditview
-       $(INSTALL_DATA) $(srcdir)/GXditview-color.ad \
-         $(DESTDIR)$(appresdir)/GXditview-color
-
-uninstall_sub:
-       $(RM) $(DESTDIR)$(appresdir)/GXditview
-       $(RM) $(DESTDIR)$(appresdir)/GXditview-color
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 1461b5ab6039acbe6c3a8496f7855f77f0aec27f..9de78693789a90a52baa22185bf060ea8f6dea15 100644 (file)
@@ -10,4 +10,4 @@ xditview is copyrighted by MIT under the usual X terms (see
 gxditview.man); the changes to that which come along with the groff package
 are in the public domain.
 
-Please report bugs to bug-groff@gnu.org.
+Please report bugs at http://savannah.gnu.org/bugs/?group=groff.
index 98bbbad7563fcece7aae23ea42eacc5f0b1ec11d..0b5b140705fbce74c1b1495eaadd16157beeb306 100644 (file)
@@ -1,7 +1,7 @@
 Open the main window with the correct width and height, depending on
 both the selected device and the paper dimensions.
 
-Add a command line option to specify the paper dimensions (similar to
+Add a command-line option to specify the paper dimensions (similar to
 other groff devices).
 
 Better error handling.
index ad5d12157e5d5840041ed5448525ca253637737f..2ec45ed9afd52f4720f01547fd8efacb424d85d9 100644 (file)
@@ -18,7 +18,7 @@
 #              some versions of sed don't like them. The comments are
 #              now given here in the header.
 #      31 May 2004: Werner Lemberg <wl@gnu.org>
-#              Force casts to `String'.
+#              Force casts to 'String'.
 #
 # Comments on the script by line:
 # /^!/d                Remove comments
index 2cb221944ac4aa7a3db17f6d71978fcb7cf57a54..1eaafbefccb2e26b20ccbeca9d66d991e1395858 100644 (file)
@@ -26,7 +26,7 @@ searching for device and font description files. */
 #define WS " \t\r\n"
 
 #ifndef INT_MIN
-/* Minimum and maximum values a `signed int' can hold.  */
+/* Minimum and maximum values a 'signed int' can hold.  */
 #define INT_MIN (-INT_MAX-1)
 #define INT_MAX 2147483647
 #endif
@@ -416,7 +416,7 @@ int read_charset_section(DeviceFont *f, FILE *fp)
            break;
        if (strcmp(p, "\"") == 0) {
            if (!last_charinfo) {
-               error("first line of charset section cannot use `\"'");
+               error("first line of charset section cannot use '\"'");
                return 0;
            }
            else
@@ -532,7 +532,7 @@ FILE *open_device_file(const char *device_name, const char *file_name,
   sprintf(buf, "dev%s/%s", device_name, file_name);
   fp = find_file(buf, result);
   if (!fp) {
-      fprintf(stderr, "can't find device file `%s'\n", file_name);
+      fprintf(stderr, "can't find device file '%s'\n", file_name);
       fflush(stderr);
   }
   XtFree(buf);
index a808abafbb0239c8d2e1450a69db614b13848e4b..288d98abc35408b4fa14b8793b12d588b13a7bf8 100644 (file)
@@ -3,6 +3,9 @@
  *
  * accept dvi function calls and translate to X
  */
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
 
 #include <X11/Xos.h>
 #include <X11/IntrinsicP.h>
 #endif
 
 #include "DviP.h"
+#include "draw.h"
+#include "font.h"
 
 #define DeviceToX(dw, n) ((int)((n) * (dw)->dvi.scale_factor + .5))
 #define XPos(dw) (DeviceToX((dw), (dw)->dvi.state->x - \
                   (dw)->dvi.text_device_width) + (dw)->dvi.text_x_width)
 #define YPos(dw) (DeviceToX((dw), (dw)->dvi.state->y))
 
+/* forward reference */
 static int FakeCharacter(DviWidget, char *, int);
 
-/* font.c */
-extern int MaxFontPosition(DviWidget);
-
-void
+/* shadowed by a macro definition in parse.c, and unused elsewhere */
+#if 0
+static void
 HorizontalMove(DviWidget dw, int delta)
 {
        dw->dvi.state->x += delta;
 }
+#endif
 
 void
 HorizontalGoto(DviWidget dw, int NewPosition)
@@ -52,7 +58,7 @@ VerticalGoto(DviWidget dw, int NewPosition)
        dw->dvi.state->y = NewPosition;
 }
 
-void
+static void
 AdjustCacheDeltas (DviWidget dw)
 {
        int extra;
@@ -141,7 +147,7 @@ int charExists (XFontStruct *fi, int c)
 {
        XCharStruct *p;
 
-       /* `c' is always >= 0 */
+       /* 'c' is always >= 0 */
        if (fi->per_char == NULL
            || (unsigned int)c < fi->min_char_or_byte2
            || (unsigned int)c > fi->max_char_or_byte2)
@@ -151,7 +157,7 @@ int charExists (XFontStruct *fi, int c)
                || p->ascent != 0 || p->descent != 0 || p->attributes != 0);
 }
 
-/* `wid' is in device units */
+/* 'wid' is in device units */
 static void
 DoCharacter (DviWidget dw, int c, int wid)
 {
@@ -271,7 +277,8 @@ int FindCharWidth (DviWidget dw, char *buf, int *widp)
 
 /* Return the width of the character in device units. */
 
-int PutCharacter (DviWidget dw, char *buf)
+int
+PutCharacter (DviWidget dw, char *buf)
 {
        int             prevFont;
        int             c = -1;
@@ -379,11 +386,14 @@ PutNumberedCharacter (DviWidget dw, int c)
        }
 }
 
-void
+/* unused */
+#if 0
+static void
 ClearPage (DviWidget dw)
 {
        XClearWindow (XtDisplay (dw), XtWindow (dw));
 }
+#endif
 
 static void
 setGC (DviWidget dw)
diff --git a/src/devices/xditview/draw.h b/src/devices/xditview/draw.h
new file mode 100644 (file)
index 0000000..7a3772c
--- /dev/null
@@ -0,0 +1,18 @@
+void HorizontalGoto(DviWidget, int);
+void VerticalGoto(DviWidget, int);
+void VerticalMove(DviWidget, int);
+void FlushCharCache(DviWidget);
+void Newline(DviWidget);
+void Word(DviWidget);
+int PutCharacter(DviWidget, char *);
+void PutNumberedCharacter(DviWidget, int);
+void DrawLine(DviWidget, int, int);
+void DrawCircle(DviWidget, int);
+void DrawFilledCircle(DviWidget, int);
+void DrawEllipse(DviWidget, int, int);
+void DrawFilledEllipse(DviWidget, int, int);
+void DrawArc(DviWidget, int, int, int, int);
+void DrawPolygon(DviWidget, int *, int);
+void DrawFilledPolygon(DviWidget, int *, int);
+void DrawSpline(DviWidget, int *, int);
+
index c111a7b9f8ede0ed0c19970f15a39c5c4d207f7b..97eb46e7ee9bda782ddb05cbcd7f8b0162513343 100644 (file)
 #include <stdio.h>
 #include <ctype.h>
 #include <stdlib.h>
+
 #include "DviP.h"
 #include "XFontName.h"
+#include "font.h"
 
+/* forward reference */
 static void DisposeFontSizes(DviWidget, DviFontSizeList *);
-void DestroyFontMap(DviFontMap *);
 
 static char *
 savestr (const char *s)
@@ -135,7 +137,7 @@ ConvertFontNameToEncoding (char *n)
        return n;
 }
 
-DviFontSizeList *
+static DviFontSizeList *
 InstallFontSizes (DviWidget dw, const char *x_name, Boolean *scalablep)
 {
        char    fontNameString[2048];
diff --git a/src/devices/xditview/font.h b/src/devices/xditview/font.h
new file mode 100644 (file)
index 0000000..ae6c765
--- /dev/null
@@ -0,0 +1,6 @@
+void DestroyFontMap(DviFontMap *);
+void ForgetFonts (DviWidget dw);
+int MaxFontPosition (DviWidget dw);
+void ParseFontMap (DviWidget dw);
+void SetFontPosition (DviWidget dw, int position, const char *dvi_name,
+                      const char *extra);
diff --git a/src/devices/xditview/gxditview.1.man b/src/devices/xditview/gxditview.1.man
new file mode 100644 (file)
index 0000000..a44de7d
--- /dev/null
@@ -0,0 +1,563 @@
+.TH GXDITVIEW @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+gxditview \- display groff intermediate output files
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright 1991 Massachusetts Institute of Technology
+.\"
+.\" Permission to use, copy, modify, distribute, and sell this software
+.\" and its documentation for any purpose is hereby granted without fee,
+.\" provided that the above copyright notice appear in all copies and
+.\" that both that copyright notice and this permission notice appear in
+.\" supporting documentation, and that the name of M.I.T. not be used in
+.\" advertising or publicity pertaining to distribution of the software
+.\" without specific, written prior permission.  M.I.T. makes no
+.\" representations about the suitability of this software for any
+.\" purpose.  It is provided "as is" without express or implied
+.\" warranty.
+.\"
+.\" M.I.T. DISCLAIMS ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
+.\" INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN
+.\" NO EVENT SHALL M.I.T.  BE LIABLE FOR ANY SPECIAL, 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.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY gxditview
+.RI [ X-toolkit-option \&.\|.\|.\&]
+.OP \-backingStore backing-store-type
+.OP \-filename string
+.OP \-page n
+.OP \-printCommand string
+.OP \-resolution res
+.RI [ file ]
+.YS
+.
+.SY gxditview
+.B \-help
+.SY gxditview
+.B \-\-help
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+The
+.B \%gxditview
+program displays the
+.I groff intermediate
+.IR output ,
+see
+.BR groff_out (@MAN5EXT@),
+on an X\~display.
+.
+It uses the standard X11 fonts, so it does not require access to the
+server machine for font loading.
+.
+There are several ways to use
+.BR \%gxditview .
+.
+.
+.PP
+The
+.I groff intermediate output
+can be generated by
+.BR groff\~\-Z .
+This can be viewed by explicitly calling
+.B \%gxditview
+.IR \%filename .
+.
+If
+.I filename
+is
+.BR \- ,
+.B \%gxditview
+will read the standard input;
+.I \%filename
+cannot be omitted.
+.
+The
+.I groff intermediate output
+is different for all devices.
+.
+.B \%gxditview
+can view it for all devices, but the quality is device dependent.
+.
+.
+.PP
+The best results are achieved with the
+.BR X *
+devices for
+.BR groff 's
+option
+.BR \-T .
+.
+There are four
+.BR X *
+devices:
+.BR \%\-TX75 ,
+.BR \%\-TX75\-12 ,
+.BR \%\-TX100 ,
+.BR \%\-TX100\-12 .
+They differ by the X\~resolution (75dpi or 100dpi) and the used base font
+size (10pt or 12pt).
+.
+They are especially built for
+.BR \%gxditview .
+.
+When using one of them
+.B groff
+generates the
+.I intermediate output
+for this device and calls
+.B \%gxditview
+automatically for viewing.
+.
+For example, to view this man page with a base resolution of 12pt, say
+.
+.IP
+.B groff \-TX100\-12 \-man \-rS12 gxditview.@MAN1EXT@
+.
+.
+.PP
+(option
+.BI \-rS XX
+is documented in the
+.BR groff_man (@MAN7EXT@)
+man page).
+.
+.
+.PP
+.BR groff 's
+option
+.B \-X
+produces
+.I intermediate output
+for the
+.I PostScript
+device and subsequently uses
+.B \%gxditview
+as a viewer for it.
+.
+The quality of the result depends mainly on the chosen point size and
+display resolution; for rapid previewing, however, something like
+.
+.IP
+.BI "groff \-X \-P\-resolution \-P100 " document
+.
+.
+.PP
+yields acceptable results.
+.
+.
+.PP
+During the run of
+.BR \%gxditview ,
+the left mouse button brings up a menu with the following entries:
+.
+.TP 8
+.B "Next Page"
+Display the next page.
+.
+.TP
+.B "Previous Page"
+Display the previous page.
+.
+.TP
+.B "Select Page"
+Select a particular numbered page specified by a dialog box.
+.
+.TP
+.B Print
+Print the
+.I groff intermediate output
+using a command specified by a dialog box.
+.
+The default command initially displayed is controlled by the
+.B printCommand
+application resource, and by the
+.B \-printCommand
+option.
+.
+.TP
+.B Open
+Open for display a new file specified by a dialog box.
+.
+The file should contain some
+.I groff intermediate
+.IR output .
+.
+If the filename starts with
+.B |
+it will be taken to be a command to read from.
+.
+.TP
+.B Quit
+Exit from
+.BR \%gxditview .
+.
+.
+.PP
+The
+.IR n ,
+.IR Space ,
+.IR Return ,
+and
+.I Next
+.RI ( PgDn )
+keys are bound to the
+.B Next\ Page
+action.
+.
+The
+.IR p ,
+.IR b ,
+.IR BackSpace ,
+.IR Delete ,
+and
+.I Prior
+.RI ( PgUp )
+keys are bound to the
+.B Previous\ Page
+action.
+.
+The
+.I g
+key is bound to the
+.B SelectPage
+action.
+.
+The
+.I o
+key is bound to the
+.B OpenFile
+action.
+.
+The
+.I q
+key is bound to the
+.B Quit
+action.
+.
+The
+.I r
+key is bound to the
+.B Rerasterize
+action which rereads the current file, and redisplays the current
+page; if the current file is a command, the command will be
+reexecuted.
+.
+Vertical scrolling can be done with the
+.I k
+and
+.I j
+keys;
+horizontal scrolling is bound to the
+.I h
+and
+.I l
+keys.
+.
+The arrow keys
+.RI ( up ,
+.IR down ,
+.IR left ,
+and
+.IR right )
+are also bound to the obvious scrolling actions.
+.
+.
+.PP
+The
+.B paperlength
+and
+.B paperwidth
+commands in the
+.I DESC
+file specify the length and width in machine units of the virtual page
+displayed by
+.BR \%gxditview .
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+The
+.B \%gxditview
+program accepts all of the standard X\~Toolkit command-line options
+along with the additional options listed below:
+.
+.TP 8
+.B \-help
+This option indicates that a brief summary of the allowed options should be
+printed.
+.
+.TP
+.B \-page
+This option specifies the page number of the document to be displayed.
+.
+.TP
+.BI \-backingStore\  backing-store-type
+Redisplay of the
+.I groff intermediate output
+window can take up to a second or so, this option causes the server to
+save the window contents so that when it is scrolled around the
+viewport, the window is painted from contents saved in backing store.
+.
+.I backing-store-type
+can be one of
+.BR Always ,
+.B WhenMapped
+or
+.BR NotUseful .
+.
+.TP
+.BI \-printCommand\  command
+The default command displayed in the dialog box for the
+.B Print
+menu entry will be
+.IR command .
+.
+.TP
+.BI \-resolution\  res
+The
+.I groff intermediate output
+file will be displayed at a resolution of
+.I res
+dpi, unless the
+.I DESC
+file contains the
+.B X11
+command, in which case the device resolution will be used.
+.
+This corresponds to the
+.I Dvi
+widget's
+.B resolution
+resource.
+.
+The default is 75.
+.
+.TP
+.BI \-filename\  string
+The default filename displayed in the dialog box for the
+.B Open
+menu entry will be
+.IR string .
+This can be either a filename, or a command starting with
+.BR | .
+.
+.
+.PP
+The following standard X\~Toolkit command-line arguments are commonly
+used with
+.BR \%gxditview :
+.
+.TP 8
+.BI \-bg\  color
+This option specifies the color to use for the background of the window.
+.
+The default is \fIwhite\fP.
+.
+.TP
+.BI \-bd\  color
+This option specifies the color to use for the border of the window.
+.
+The default is \fIblack\fP.
+.
+.TP
+.BI \-bw\  number
+This option specifies the width in pixels of the border surrounding the
+window.
+.
+.TP
+.BI \-fg\  color
+This option specifies the color to use for displaying text.
+.
+The default is
+\fIblack\fP.
+.
+.TP
+.BI \-fn\  font
+This option specifies the font to be used for displaying widget text.
+.
+The default is \fIfixed\fP.
+.
+.TP
+.B \-rv
+This option indicates that reverse video should be simulated by swapping
+the foreground and background colors.
+.
+.TP
+.BI \-geometry\  geometry
+This option specifies the preferred size and position of the window.
+.
+.TP
+.BI \-display\  host : display
+This option specifies the X\~server to contact.
+.
+.TP
+.BI \-xrm\  resourcestring
+This option specifies a resource string to be used.
+.
+.
+.\" ====================================================================
+.SH X DEFAULTS
+.\" ====================================================================
+.
+This program uses the
+.I Dvi
+widget in the X\~Toolkit.
+.
+It understands all of the core resource names and classes as well as:
+.
+.TP 8
+.BR width\  (class\  Width )
+Specifies the width of the window.
+.
+.TP
+.BR height\  (class\  Height )
+Specifies the height of the window.
+.
+.TP
+.BR foreground\  (class\  Foreground )
+Specifies the default foreground color.
+.
+.TP
+.BR font\  (class\  Font )
+Specifies the font to be used for error messages.
+.
+.TP
+.BR fontMap\  (class\  FontMap )
+Specifies the mapping from
+.I groff
+font names to X\~font names.
+.
+This must be a string containing a sequence of lines.
+.
+Each line contains two whitespace separated fields: first the
+.I groff
+font name, and secondly the X\~font name.
+.
+The default is
+.nf
+"\e
+TR     -adobe-times-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
+TI     -adobe-times-medium-i-normal--*-100-*-*-*-*-iso8859-1\en\e
+TB     -adobe-times-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
+TBI    -adobe-times-bold-i-normal--*-100-*-*-*-*-iso8859-1\en\e
+CR     -adobe-courier-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
+CI     -adobe-courier-medium-o-normal--*-100-*-*-*-*-iso8859-1\en\e
+CB     -adobe-courier-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
+CBI    -adobe-courier-bold-o-normal--*-100-*-*-*-*-iso8859-1\en\e
+HR     -adobe-helvetica-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
+HI     -adobe-helvetica-medium-o-normal--*-100-*-*-*-*-iso8859-1\en\e
+HB     -adobe-helvetica-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
+HBI    -adobe-helvetica-bold-o-normal--*-100-*-*-*-*-iso8859-1\en\e
+NR     -adobe-new century schoolbook-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
+NI     -adobe-new century schoolbook-medium-i-normal--*-100-*-*-*-*-iso8859-1\en\e
+NB     -adobe-new century schoolbook-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
+NBI    -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\en\e
+S      -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\en\e
+SS     -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\en\e
+"
+.fi
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROFF_FONT_PATH
+A list of directories in which to search for the
+.IR dev name
+directory in addition to the default ones.
+.
+See
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_font (@MAN5EXT@)
+for more details.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @APPRESDIR@/GXditview
+.TQ
+.I @APPRESDIR@/GXditview\-color
+The default resource files of
+.BR \%gxditview .
+.
+Users should override these values in the
+.I .Xdefaults
+file, normally located in the user's home directory.
+.
+See
+.BR xrdb (1)
+and
+.BR appres (1)
+for more.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.B gxditview
+and its predecessor
+.B xditview
+were written by
+Keith Packard (MIT X Consortium),
+Richard L.\& Hyde (Purdue),
+David Slattengren (Berkeley),
+Malcolm Slaney (Schlumberger Palo Alto Research),
+Mark Moraes (University of Toronto),
+and
+James Clark.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR X (7),
+.BR xrdb (1),
+.BR xditview (1),
+.BR groff (@MAN1EXT@),
+.BR groff_out (@MAN5EXT@)
+.
+.
+.\" ====================================================================
+.SH ORIGIN
+.\" ====================================================================
+.
+This program is derived from
+.BR \%xditview ;
+portions of
+.B \%xditview
+originated in
+.B \%xtroff
+which was derived from
+.BR \%suntroff .
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/devices/xditview/gxditview.man b/src/devices/xditview/gxditview.man
deleted file mode 100644 (file)
index d644b53..0000000
+++ /dev/null
@@ -1,542 +0,0 @@
-.TH GXDITVIEW @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-gxditview \- display groff intermediate output files
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989, Massachusetts Institute of Technology.
-.br
-See
-.BR X (7)
-for a full statement of rights and permissions.
-..
-.
-.de au
-Keith Packard (MIT X Consortium)
-.br
-Richard L.\& Hyde (Purdue)
-.br
-David Slattengren (Berkeley)
-.br
-Malcolm Slaney (Schlumberger Palo Alto Research)
-.br
-Mark Moraes (University of Toronto)
-.br
-James Clark
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B \%gxditview
-.RI [\fB\- toolkitoption\  .\|.\|.\|]
-.RI [\fB\- option\  .\|.\|.\|]
-.RI [ filename ]
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.B \%gxditview
-program displays the
-.I groff intermediate
-.IR output ,
-see
-.BR groff_out (@MAN5EXT@),
-on an X\~display.
-.
-It uses the standard X11 fonts, so it does not require access to the
-server machine for font loading.
-.
-There are several ways to use
-.BR \%gxditview .
-.
-.
-.PP
-The
-.I groff intermediate output
-can be generated by
-.BR groff\~\-Z .
-This can be viewed by explicitly calling
-.B \%gxditview
-.IR \%filename .
-.
-If
-.I filename
-is
-.BR \- ,
-.B \%gxditview
-will read the standard input;
-.I \%filename
-cannot be omitted.
-.
-The
-.I groff intermediate output
-is different for all devices.
-.
-.B \%gxditview
-can view it for all devices, but the quality is device dependent.
-.
-.
-.PP
-The best results are achieved with the
-.BR X *
-devices for
-.BR groff 's
-option
-.BR \-T .
-.
-There are four
-.BR X *
-devices:
-.BR \%\-TX75 ,
-.BR \%\-TX75\-12 ,
-.BR \%\-TX100 ,
-.BR \%\-TX100\-12 .
-They differ by the X\~resolution (75dpi or 100dpi) and the used base font
-size (10pt or 12pt).
-.
-They are especially built for
-.BR \%gxditview .
-.
-When using one of them
-.B groff
-generates the
-.I intermediate output
-for this device and calls
-.B \%gxditview
-automatically for viewing.
-.
-For example, to view this man page with a base resolution of 12pt, say
-.
-.IP
-.B groff \-TX100\-12 \-man \-rS12 gxditview.@MAN1EXT@
-.
-.
-.PP
-(option
-.BI \-rS XX
-is documented in the
-.BR groff_man (@MAN7EXT@)
-man page).
-.
-.
-.PP
-.BR groff 's
-option
-.B \-X
-produces
-.I intermediate output
-for the
-.I Postscript
-device and subsequently uses
-.B \%gxditview
-as a viewer for it.
-.
-The quality of the result depends mainly on the chosen point size and
-display resolution; for rapid previewing, however, something like
-.
-.IP
-.BI "groff \-X \-P\-resolution \-P100 " document
-.
-.
-.PP
-yields acceptable results.
-.
-.
-.PP
-During the run of
-.BR \%gxditview ,
-the left mouse button brings up a menu with the following entries:
-.
-.TP 8
-.B "Next Page"
-Display the next page.
-.
-.TP
-.B "Previous Page"
-Display the previous page.
-.
-.TP
-.B "Select Page"
-Select a particular numbered page specified by a dialog box.
-.
-.TP
-.B Print
-Print the
-.I groff intermediate output
-using a command specified by a dialog box.
-.
-The default command initially displayed is controlled by the
-.B printCommand
-application resource, and by the
-.B \-printCommand
-option.
-.
-.TP
-.B Open
-Open for display a new file specified by a dialog box.
-.
-The file should contain some
-.I groff intermediate
-.IR output .
-.
-If the filename starts with
-.B |
-it will be taken to be a command to read from.
-.
-.TP
-.B Quit
-Exit from
-.BR \%gxditview .
-.
-.
-.PP
-The
-.IR n ,
-.IR Space ,
-.IR Return ,
-and
-.I Next
-.RI ( PgDn )
-keys are bound to the
-.B Next\ Page
-action.
-.
-The
-.IR p ,
-.IR b ,
-.IR BackSpace ,
-.IR Delete ,
-and
-.I Prior
-.RI ( PgUp )
-keys are bound to the
-.B Previous\ Page
-action.
-.
-The
-.I g
-key is bound to the
-.B SelectPage
-action.
-.
-The
-.I o
-key is bound to the
-.B OpenFile
-action.
-.
-The
-.I q
-key is bound to the
-.B Quit
-action.
-.
-The
-.I r
-key is bound to the
-.B Rerasterize
-action which rereads the current file, and redisplays the current
-page; if the current file is a command, the command will be
-reexecuted.
-.
-Vertical scrolling can be done with the
-.I k
-and
-.I j
-keys;
-horizontal scrolling is bound to the
-.I h
-and
-.I l
-keys.
-.
-The arrow keys
-.RI ( up ,
-.IR down ,
-.IR left ,
-and
-.IR right )
-are also bound to the obvious scrolling actions.
-.
-.
-.PP
-The
-.B paperlength
-and
-.B paperwidth
-commands in the DESC file specify the length and width in machine units
-of the virtual page displayed by
-.BR \%gxditview .
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-The
-.B \%gxditview
-program accepts all of the standard X\~Toolkit command line options
-along with the additional options listed below:
-.
-.TP 8
-.B \-help
-This option indicates that a brief summary of the allowed options should be
-printed.
-.
-.TP
-.B \-page
-This option specifies the page number of the document to be displayed.
-.
-.TP
-.BI \-backingStore\  backing-store-type
-Redisplay of the
-.I groff intermediate output
-window can take up to a second or so, this option causes the server to
-save the window contents so that when it is scrolled around the
-viewport, the window is painted from contents saved in backing store.
-.
-.I backing-store-type
-can be one of
-.BR Always ,
-.B WhenMapped
-or
-.BR NotUseful .
-.
-.TP
-.BI \-printCommand\  command
-The default command displayed in the dialog box for the
-.B Print
-menu entry will be
-.IR command .
-.
-.TP
-.BI \-resolution\  res
-The
-.I groff intermediate output
-file will be displayed at a resolution of
-.I res
-dpi, unless the DESC file contains the
-.B X11
-command, in which case the device resolution will be used.
-.
-This corresponds to the
-.I Dvi
-widget's
-.B resolution
-resource.
-.
-The default is 75.
-.
-.TP
-.BI \-filename\  string
-The default filename displayed in the dialog box for the
-.B Open
-menu entry will be
-.IR string .
-This can be either a filename, or a command starting with
-.BR | .
-.
-.
-.PP
-The following standard X\~Toolkit command line arguments are commonly
-used with
-.BR \%gxditview :
-.
-.TP 8
-.BI \-bg\  color
-This option specifies the color to use for the background of the window.
-.
-The default is \fIwhite\fP.
-.
-.TP
-.BI \-bd\  color
-This option specifies the color to use for the border of the window.
-.
-The default is \fIblack\fP.
-.
-.TP
-.BI \-bw\  number
-This option specifies the width in pixels of the border surrounding the
-window.
-.
-.TP
-.BI \-fg\  color
-This option specifies the color to use for displaying text.
-.
-The default is
-\fIblack\fP.
-.
-.TP
-.BI \-fn\  font
-This option specifies the font to be used for displaying widget text.
-.
-The default is \fIfixed\fP.
-.
-.TP
-.B \-rv
-This option indicates that reverse video should be simulated by swapping
-the foreground and background colors.
-.
-.TP
-.BI \-geometry\  geometry
-This option specifies the preferred size and position of the window.
-.
-.TP
-.BI \-display\  host : display
-This option specifies the X\~server to contact.
-.
-.TP
-.BI \-xrm\  resourcestring
-This option specifies a resource string to be used.
-.
-.
-.\" --------------------------------------------------------------------
-.SH X DEFAULTS
-.\" --------------------------------------------------------------------
-.
-This program uses the
-.I Dvi
-widget in the X\~Toolkit.
-.
-It understands all of the core resource names and classes as well as:
-.
-.TP 8
-.BR width\  (class\  Width )
-Specifies the width of the window.
-.
-.TP
-.BR height\  (class\  Height )
-Specifies the height of the window.
-.
-.TP
-.BR foreground\  (class\  Foreground )
-Specifies the default foreground color.
-.
-.TP
-.BR font\  (class\  Font )
-Specifies the font to be used for error messages.
-.
-.TP
-.BR fontMap\  (class\  FontMap )
-Specifies the mapping from
-.I groff
-font names to X\~font names.
-.
-This must be a string containing a sequence of lines.
-.
-Each line contains two whitespace separated fields: first the
-.I groff
-font name, and secondly the X\~font name.
-.
-The default is
-.nf
-"\e
-TR     -adobe-times-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-TI     -adobe-times-medium-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-TB     -adobe-times-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-TBI    -adobe-times-bold-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-CR     -adobe-courier-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-CI     -adobe-courier-medium-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-CB     -adobe-courier-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-CBI    -adobe-courier-bold-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-HR     -adobe-helvetica-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-HI     -adobe-helvetica-medium-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-HB     -adobe-helvetica-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-HBI    -adobe-helvetica-bold-o-normal--*-100-*-*-*-*-iso8859-1\en\e
-NR     -adobe-new century schoolbook-medium-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-NI     -adobe-new century schoolbook-medium-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-NB     -adobe-new century schoolbook-bold-r-normal--*-100-*-*-*-*-iso8859-1\en\e
-NBI    -adobe-new century schoolbook-bold-i-normal--*-100-*-*-*-*-iso8859-1\en\e
-S      -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\en\e
-SS     -adobe-symbol-medium-r-normal--*-100-*-*-*-*-adobe-fontspecific\en\e
-"
-.fi
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.SM
-.B GROFF_FONT_PATH
-A list of directories in which to search for the
-.BI dev name
-directory in addition to the default ones.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_font (@MAN5EXT@)
-for more details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP
-.B @APPRESDIR@/GXditview
-.TQ
-.B @APPRESDIR@/GXditview-color
-The default resource files of
-.BR \%gxditview .
-.
-Users should override these values in the
-.B .Xdefaults
-file, normally located in the user's home directory.
-.
-See
-.BR xrdb (1)
-and
-.BR appres (1)
-for more.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR X (7),
-.BR xrdb (1),
-.BR xditview (1),
-.BR groff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH ORIGIN
-.\" --------------------------------------------------------------------
-.
-This program is derived from
-.BR \%xditview ;
-portions of
-.B \%xditview
-originated in
-.B \%xtroff
-which was derived from
-.BR \%suntroff .
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYRIGHT
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index dfe1e0d4bd2297ab5394d04cebb84d69d0935a86..7571101699a3285d59271e79d756cf720a5693a2 100644 (file)
@@ -2,7 +2,9 @@
 #include <X11/IntrinsicP.h>
 #include <X11/StringDefs.h>
 #include <stdio.h>
+
 #include "DviP.h"
+#include "lex.h"
 
 int
 DviGetAndPut(DviWidget dw, int *cp)
diff --git a/src/devices/xditview/lex.h b/src/devices/xditview/lex.h
new file mode 100644 (file)
index 0000000..0a4cba0
--- /dev/null
@@ -0,0 +1 @@
+int GetNumber(DviWidget);
index d1c5c9f657cb4ada6ce5f00e7cb37d992ff38295..dcc655a480765169bd97c10833ac3d0b40578bcf 100644 (file)
@@ -9,7 +9,9 @@
 #include <X11/StringDefs.h>
 #include <stdio.h>
 #include <ctype.h>
+
 #include "DviP.h"
+#include "page.h"
 
 #ifdef X_NOT_STDC_ENV
 extern long    ftell();
diff --git a/src/devices/xditview/page.h b/src/devices/xditview/page.h
new file mode 100644 (file)
index 0000000..e2c938d
--- /dev/null
@@ -0,0 +1,5 @@
+void DestroyFileMap(DviFileMap *);
+void FileSeek(DviWidget, long);
+void ForgetPagePositions(DviWidget);
+void RememberPagePosition(DviWidget, int);
+long SearchPagePosition(DviWidget, int);
index de7d6baa08a343b067b1dbd14a3a00a9c34157e0..2584a8c926d7b241c1f37332bbcfa5953ee4a9f2 100644 (file)
@@ -9,7 +9,13 @@
 #include <X11/StringDefs.h>
 #include <stdio.h>
 #include <ctype.h>
+
 #include "DviP.h"
+#include "draw.h"
+#include "font.h"
+#include "lex.h"
+#include "page.h"
+#include "parse.h"
 
 static int StopSeen = 0;
 static void ParseDrawFunction(DviWidget, char *);
@@ -17,37 +23,6 @@ static void ParseDeviceControl(DviWidget);
 static void push_env(DviWidget);
 static void pop_env(DviWidget);
 
-/* draw.c */
-extern int PutCharacter(DviWidget, char *);
-extern int PutNumberedCharacter(DviWidget, int);
-extern void HorizontalGoto(DviWidget, int);
-extern void Word(DviWidget);
-extern void VerticalGoto(DviWidget, int);
-extern void VerticalMove(DviWidget, int);
-extern void FlushCharCache(DviWidget);
-extern void Newline(DviWidget);
-extern void DrawLine(DviWidget, int, int);
-extern void DrawCircle(DviWidget, int);
-extern void DrawFilledCircle(DviWidget, int);
-extern void DrawEllipse(DviWidget, int, int);
-extern void DrawFilledEllipse(DviWidget, int, int);
-extern void DrawArc(DviWidget, int, int, int, int);
-extern void DrawPolygon(DviWidget, int *, int);
-extern void DrawFilledPolygon(DviWidget, int *, int);
-extern void DrawSpline(DviWidget, int *, int);
-
-/* Dvi.c */
-extern void SetDevice(DviWidget, const char *);
-
-/* page.c */
-extern void RememberPagePosition(DviWidget, int);
-
-/* font.c */
-extern void SetFontPosition(DviWidget, int, const char *, const char *);
-
-/* lex.c */
-extern int GetNumber(DviWidget);
-
 #define HorizontalMove(dw, delta)      ((dw)->dvi.state->x += (delta))
 
 
diff --git a/src/devices/xditview/parse.h b/src/devices/xditview/parse.h
new file mode 100644 (file)
index 0000000..636f3a6
--- /dev/null
@@ -0,0 +1 @@
+int ParseInput(register DviWidget dw);
diff --git a/src/devices/xditview/xditview.am b/src/devices/xditview/xditview.am
new file mode 100644 (file)
index 0000000..8da379a
--- /dev/null
@@ -0,0 +1,121 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Last update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+GXDITVIEWSOURCES = \
+  src/devices/xditview/device.c \
+  src/devices/xditview/draw.c \
+  src/devices/xditview/draw.h \
+  src/devices/xditview/Dvi.c \
+  src/devices/xditview/font.c \
+  src/devices/xditview/font.h \
+  src/devices/xditview/lex.c \
+  src/devices/xditview/lex.h \
+  src/devices/xditview/page.c \
+  src/devices/xditview/page.h \
+  src/devices/xditview/parse.c \
+  src/devices/xditview/parse.h \
+  src/devices/xditview/xditview.c \
+  src/devices/xditview/device.h \
+  src/devices/xditview/DviP.h \
+  src/devices/xditview/Menu.h \
+  src/devices/xditview/Dvi.h
+
+if WITHOUT_X11
+EXTRA_DIST += $(GXDITVIEWSOURCES)
+else
+xditview_srcdir = $(top_srcdir)/src/devices/xditview
+bin_PROGRAMS += gxditview
+gxditview_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS) -Dlint \
+  -I$(top_builddir)/src/devices/xditview
+gxditview_LDADD = $(X_LIBS) $(X_PRE_LIBS) -lXaw -lXmu -lXt -lX11 \
+  $(X_EXTRA_LIBS) $(LIBM) libxutil.a lib/libgnu.a
+XDITVIEW_GENHDRS = src/devices/xditview/GXditview-ad.h
+gxditview_SOURCES = $(GXDITVIEWSOURCES)
+nodist_gxditview_SOURCES = $(XDITVIEW_GENHDRS)
+CLEANFILES += $(XDITVIEW_GENHDRS)
+
+man1_MANS += src/devices/xditview/gxditview.1
+
+# Because we defined gxditview_CPPFLAGS, automake renames all the xditview's 
+# objects, adding an "gxditview-" prefix. 
+src/devices/xditview/gxditview-device.$(OBJEXT): defs.h
+src/devices/xditview/gxditview-xditview.$(OBJEXT): $(XDITVIEW_GENHDRS)
+
+src/devices/xditview/GXditview-ad.h: $(xditview_srcdir)/GXditview.ad
+       @echo Making $@
+       $(SHELL) $(xditview_srcdir)/ad2c $(xditview_srcdir)/GXditview.ad > $@
+endif
+
+EXTRA_DIST += \
+  src/devices/xditview/ad2c \
+  src/devices/xditview/ChangeLog \
+  src/devices/xditview/DESC.in \
+  src/devices/xditview/FontMap \
+  src/devices/xditview/GXditview-color.ad \
+  src/devices/xditview/GXditview.ad \
+  src/devices/xditview/README \
+  src/devices/xditview/TODO \
+  src/devices/xditview/gray1.bm \
+  src/devices/xditview/gray2.bm \
+  src/devices/xditview/gray3.bm \
+  src/devices/xditview/gray4.bm \
+  src/devices/xditview/gray5.bm \
+  src/devices/xditview/gray6.bm \
+  src/devices/xditview/gray7.bm \
+  src/devices/xditview/gray8.bm \
+  src/devices/xditview/xdit.bm \
+  src/devices/xditview/xdit_mask.bm \
+  src/devices/xditview/gxditview.1.man
+
+# Custom installation of GXditview.ad and GXditview-color.ad
+install-data-local: install_xditview
+uninstall-local: uninstall_xditview
+
+if WITHOUT_X11
+install_xditview:
+uninstall_xditview:
+else
+install_xditview: $(xditview_srcdir)/GXditview.ad $(xditview_srcdir)/GXditview-color.ad
+       -test -d $(DESTDIR)$(appresdir) \
+         || $(mkinstalldirs) $(DESTDIR)$(appresdir)
+       if test -f $(DESTDIR)$(appresdir)/GXditview; then \
+         mv $(DESTDIR)$(appresdir)/GXditview \
+           $(DESTDIR)$(appresdir)/GXditview.old; \
+       fi
+       if test -f $(DESTDIR)$(appresdir)/GXditview-color; then \
+         mv $(DESTDIR)$(appresdir)/GXditview-color \
+           $(DESTDIR)$(appresdir)/GXditview-color.old; \
+       fi
+       $(INSTALL_DATA) $(xditview_srcdir)/GXditview.ad \
+         $(DESTDIR)$(appresdir)/GXditview
+       $(INSTALL_DATA) $(xditview_srcdir)/GXditview-color.ad \
+         $(DESTDIR)$(appresdir)/GXditview-color
+
+uninstall_xditview:
+       rm -f $(DESTDIR)$(appresdir)/GXditview
+       rm -f $(DESTDIR)$(appresdir)/GXditview-color
+
+endif
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index bd9088fb8c9696ea09586045630b1200da0f2d9b..fbc0f665bfe2dd1689d72572d258bfe3d2676dcc 100644 (file)
@@ -1,5 +1,5 @@
 /* -*- C -*- */
-/* Copyright (C) 2014  Free Software Foundation, Inc.
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 This file is part of groff.
 
diff --git a/src/include/Makefile.sub b/src/include/Makefile.sub
deleted file mode 100644 (file)
index f282e86..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-# Makefile.sub for `include'
-#
-# File position: <groff-source>/src/include/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-HDRS=\
-  assert.h \
-  cmap.h \
-  cset.h \
-  color.h \
-  device.h \
-  driver.h \
-  DviChar.h \
-  errarg.h \
-  error.h \
-  font.h \
-  geometry.h \
-  getopt.h \
-  getopt_int.h \
-  gettext.h \
-  htmlhint.h \
-  index.h \
-  lib.h \
-  macropath.h \
-  nonposix.h \
-  posix.h \
-  printer.h \
-  ptable.h \
-  refid.h \
-  relocate.h \
-  search.h \
-  searchpath.h \
-  stringclass.h \
-  symbol.h \
-  unicode.h \
-  XFontName.h
-GENHDRS=defs.h
-
-all depend: $(GENHDRS)
-
-defs.h: FORCE
-       @$(SHELL) $(top_srcdir)/gendef.sh defs.h \
-       "PROG_PREFIX=\"$(g)\"" \
-       "DEVICE=\"$(DEVICE)\"" \
-       "INSTALLPATH=\"$(prefix)\"" \
-       "BINPATH=\"$(bindir)\"" \
-       "FONTPATH=\"$(fontpath)\"" \
-       "MACROPATH=\"$(tmacpath)\"" \
-       "INDEX_SUFFIX=\"$(indexext)\"" \
-       "COMMON_WORDS_FILE=\"$(common_words_file)\"" \
-       "DEFAULT_INDEX_DIR=\"$(indexdir)\"" \
-       "DEFAULT_INDEX_NAME=\"$(indexname)\"" \
-       "DEFAULT_INDEX=\"$(indexdir)/$(indexname)\""
-
-FORCE:
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 5cdcfa846e05b88a0af1d482d9ec5c54368a7c9d..d717c986bc707e9a85c867712fb22a7bda9a44c2 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifndef ASSERT_H
 #define ASSERT_H
index 5e21f46311b456b5008c151014444419a204c275..72037ee4ed5ef85dc4aa99f37ecac9912203c288 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifndef UCHAR_MAX
 #define UCHAR_MAX 255
index 97656867134f55c9124536c15d7166a6c5332bdf..502ca6f30b4069ff8c617fcd422295002f94eb72 100644 (file)
@@ -1,6 +1,6 @@
 // -*- C++ -*-
 /* <groff_src_dir>/src/include/color.h
-Copyright (C) 2001-201 Free Software Foundation, Inc.
+Copyright (C) 2001-2018 Free Software Foundation, Inc.
     Written by Gaius Mulley <gaius@glam.ac.uk>
 
 This file is part of groff.
@@ -16,7 +16,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <stddef.h>
 #include "symbol.h"
@@ -28,7 +28,6 @@ private:
   color_scheme scheme;
   unsigned int components[4];
   color *next;
-  static color *free_list;
 
   int read_encoding(const color_scheme, const char * const,
                    const size_t);
@@ -39,8 +38,6 @@ public:
   color(symbol s = default_symbol) : scheme(DEFAULT), nm(s) {}
   color(const color * const);
   ~color();
-  void *operator new(size_t);
-  void operator delete(void *);
 
   int operator==(const color & c) const;
   int operator!=(const color & c) const;
index 3f1ff1efcfee938d83a4abf1f29b632b54557e46..7c271f4093c2da1b1145edd50ed0a989ea8fed0b 100644 (file)
 /* src/include/config.hin.  Generated from configure.ac by autoheader.  */
 
+/* CPU and C ABI indicator */
+#ifndef __i386__
+#undef __i386__
+#endif
+#ifndef __x86_64_x32__
+#undef __x86_64_x32__
+#endif
+#ifndef __x86_64__
+#undef __x86_64__
+#endif
+#ifndef __alpha__
+#undef __alpha__
+#endif
+#ifndef __arm__
+#undef __arm__
+#endif
+#ifndef __armhf__
+#undef __armhf__
+#endif
+#ifndef __arm64_ilp32__
+#undef __arm64_ilp32__
+#endif
+#ifndef __arm64__
+#undef __arm64__
+#endif
+#ifndef __hppa__
+#undef __hppa__
+#endif
+#ifndef __hppa64__
+#undef __hppa64__
+#endif
+#ifndef __ia64_ilp32__
+#undef __ia64_ilp32__
+#endif
+#ifndef __ia64__
+#undef __ia64__
+#endif
+#ifndef __m68k__
+#undef __m68k__
+#endif
+#ifndef __mips__
+#undef __mips__
+#endif
+#ifndef __mipsn32__
+#undef __mipsn32__
+#endif
+#ifndef __mips64__
+#undef __mips64__
+#endif
+#ifndef __powerpc__
+#undef __powerpc__
+#endif
+#ifndef __powerpc64__
+#undef __powerpc64__
+#endif
+#ifndef __powerpc64_elfv2__
+#undef __powerpc64_elfv2__
+#endif
+#ifndef __riscv32__
+#undef __riscv32__
+#endif
+#ifndef __riscv64__
+#undef __riscv64__
+#endif
+#ifndef __riscv32_ilp32__
+#undef __riscv32_ilp32__
+#endif
+#ifndef __riscv32_ilp32f__
+#undef __riscv32_ilp32f__
+#endif
+#ifndef __riscv32_ilp32d__
+#undef __riscv32_ilp32d__
+#endif
+#ifndef __riscv64_ilp32__
+#undef __riscv64_ilp32__
+#endif
+#ifndef __riscv64_ilp32f__
+#undef __riscv64_ilp32f__
+#endif
+#ifndef __riscv64_ilp32d__
+#undef __riscv64_ilp32d__
+#endif
+#ifndef __riscv64_lp64__
+#undef __riscv64_lp64__
+#endif
+#ifndef __riscv64_lp64f__
+#undef __riscv64_lp64f__
+#endif
+#ifndef __riscv64_lp64d__
+#undef __riscv64_lp64d__
+#endif
+#ifndef __s390__
+#undef __s390__
+#endif
+#ifndef __s390x__
+#undef __s390x__
+#endif
+#ifndef __sh__
+#undef __sh__
+#endif
+#ifndef __sparc__
+#undef __sparc__
+#endif
+#ifndef __sparc64__
+#undef __sparc64__
+#endif
+
+
 /* Define if building universal (internal helper macro) */
 #undef AC_APPLE_UNIVERSAL_BUILD
 
-/* Define if your C++ doesn't understand `delete []'. */
+/* Define if your C++ doesn't understand 'delete []'. */
 #undef ARRAY_DELETE_NEEDS_SIZE
 
+/* Define to the number of bits in type 'ptrdiff_t'. */
+#undef BITSIZEOF_PTRDIFF_T
+
+/* Define to the number of bits in type 'sig_atomic_t'. */
+#undef BITSIZEOF_SIG_ATOMIC_T
+
+/* Define to the number of bits in type 'size_t'. */
+#undef BITSIZEOF_SIZE_T
+
+/* Define to the number of bits in type 'wchar_t'. */
+#undef BITSIZEOF_WCHAR_T
+
+/* Define to the number of bits in type 'wint_t'. */
+#undef BITSIZEOF_WINT_T
+
+/* Define if you wish *printf() functions that have a safe handling of
+   non-IEEE-754 'long double' values. */
+#undef CHECK_PRINTF_SAFE
+
+/* Define to one of `_getb67', `GETB67', `getb67' for Cray-2 and Cray-YMP
+   systems. This function is required for `alloca.c' support on those systems.
+   */
+#undef CRAY_STACKSEG_END
+
+/* Define to 1 if using `alloca.c'. */
+#undef C_ALLOCA
+
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'double'. */
+#undef DBL_EXPBIT0_BIT
+
+/* Define as the word index where to find the exponent of 'double'. */
+#undef DBL_EXPBIT0_WORD
+
+/* Define as the bit index in the word where to find the sign of 'double'. */
+#undef DBL_SIGNBIT_BIT
+
+/* Define as the word index where to find the sign of 'double'. */
+#undef DBL_SIGNBIT_WORD
+
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'float'. */
+#undef FLT_EXPBIT0_BIT
+
+/* Define as the word index where to find the exponent of 'float'. */
+#undef FLT_EXPBIT0_WORD
+
+/* Define as the bit index in the word where to find the sign of 'float'. */
+#undef FLT_SIGNBIT_BIT
+
+/* Define as the word index where to find the sign of 'float'. */
+#undef FLT_SIGNBIT_WORD
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module fscanf shall be considered present. */
+#undef GNULIB_FSCANF
+
+/* Define to 1 if printf and friends should be labeled with attribute
+   "__gnu_printf__" instead of "__printf__" */
+#undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module scanf shall be considered present. */
+#undef GNULIB_SCANF
+
+/* Define to a C preprocessor expression that evaluates to 1 or 0, depending
+   whether the gnulib module snprintf shall be considered present. */
+#undef GNULIB_SNPRINTF
+
+/* Define to 1 when the gnulib module fprintf-posix should be tested. */
+#undef GNULIB_TEST_FPRINTF_POSIX
+
+/* Define to 1 when the gnulib module frexp should be tested. */
+#undef GNULIB_TEST_FREXP
+
+/* Define to 1 when the gnulib module frexpl should be tested. */
+#undef GNULIB_TEST_FREXPL
+
+/* Define to 1 when the gnulib module memchr should be tested. */
+#undef GNULIB_TEST_MEMCHR
+
+/* Define to 1 when the gnulib module signbit should be tested. */
+#undef GNULIB_TEST_SIGNBIT
+
+/* Define to 1 when the gnulib module snprintf should be tested. */
+#undef GNULIB_TEST_SNPRINTF
+
+/* Define to 1 when the gnulib module vsnprintf should be tested. */
+#undef GNULIB_TEST_VSNPRINTF
+
+/* Define to 1 when the gnulib module wcwidth should be tested. */
+#undef GNULIB_TEST_WCWIDTH
+
+/* Define to 1 if you have 'alloca' after including <alloca.h>, a header that
+   may be supplied by this distribution. */
+#undef HAVE_ALLOCA
+
+/* Define to 1 if you have <alloca.h> and it should be used (not on Ultrix).
+   */
+#undef HAVE_ALLOCA_H
+
+/* Define to 1 if you have the <bp-sym.h> header file. */
+#undef HAVE_BP_SYM_H
+
 /* Define if you have a C++ <inttypes.h>. */
 #undef HAVE_CC_INTTYPES_H
 
 /* Define if you have a C++ <osfcn.h>. */
 #undef HAVE_CC_OSFCN_H
 
+/* Define if the copysignf function is declared in <math.h> and available in
+   libc. */
+#undef HAVE_COPYSIGNF_IN_LIBC
+
+/* Define if the copysignl function is declared in <math.h> and available in
+   libc. */
+#undef HAVE_COPYSIGNL_IN_LIBC
+
+/* Define if the copysign function is declared in <math.h> and available in
+   libc. */
+#undef HAVE_COPYSIGN_IN_LIBC
+
+/* Define to 1 if you have the <crtdefs.h> header file. */
+#undef HAVE_CRTDEFS_H
+
+/* Define to 1 if you have the declaration of `alarm', and to 0 if you don't.
+   */
+#undef HAVE_DECL_ALARM
+
+/* Define to 1 if you have the declaration of `copysign', and to 0 if you
+   don't. */
+#undef HAVE_DECL_COPYSIGN
+
+/* Define to 1 if you have the declaration of `copysignf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_COPYSIGNF
+
+/* Define to 1 if you have the declaration of `copysignl', and to 0 if you
+   don't. */
+#undef HAVE_DECL_COPYSIGNL
+
 /* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
    don't. */
 #undef HAVE_DECL_GETC_UNLOCKED
 
+/* Define to 1 if you have the declaration of `snprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_SNPRINTF
+
 /* Define to 1 if you have the declaration of `sys_siglist', and to 0 if you
    don't. */
 #undef HAVE_DECL_SYS_SIGLIST
 
+/* Define to 1 if you have the declaration of `towlower', and to 0 if you
+   don't. */
+#undef HAVE_DECL_TOWLOWER
+
+/* Define to 1 if you have the declaration of `vsnprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL_VSNPRINTF
+
+/* Define to 1 if you have the declaration of `wcwidth', and to 0 if you
+   don't. */
+#undef HAVE_DECL_WCWIDTH
+
+/* Define to 1 if you have the declaration of `_snprintf', and to 0 if you
+   don't. */
+#undef HAVE_DECL__SNPRINTF
+
 /* Define to 1 if you have the <direct.h> header file. */
 #undef HAVE_DIRECT_H
 
 /* Define to 1 if you have the <dirent.h> header file. */
 #undef HAVE_DIRENT_H
 
+/* Define to 1 if you have the <features.h> header file. */
+#undef HAVE_FEATURES_H
+
 /* Define to 1 if you have the `fmod' function. */
 #undef HAVE_FMOD
 
+/* Define if the frexpl function is available in libc. */
+#undef HAVE_FREXPL_IN_LIBC
+
+/* Define if the frexp function is available in libc. */
+#undef HAVE_FREXP_IN_LIBC
+
 /* Define to 1 if you have the `getcwd' function. */
 #undef HAVE_GETCWD
 
 /* Define if you have the iconv() function and it works. */
 #undef HAVE_ICONV
 
+/* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */
+#undef HAVE_INTMAX_T
+
 /* Define to 1 if you have the <inttypes.h> header file. */
 #undef HAVE_INTTYPES_H
 
+/* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and
+   declares uintmax_t. */
+#undef HAVE_INTTYPES_H_WITH_UINTMAX
+
 /* Define to 1 if you have the `isatty' function. */
 #undef HAVE_ISATTY
 
+/* Define if the isnan(double) function is available in libc. */
+#undef HAVE_ISNAND_IN_LIBC
+
+/* Define if the isnan(float) function is available in libc. */
+#undef HAVE_ISNANF_IN_LIBC
+
+/* Define if the isnan(long double) function is available in libc. */
+#undef HAVE_ISNANL_IN_LIBC
+
+/* Define to 1 if you have the `iswcntrl' function. */
+#undef HAVE_ISWCNTRL
+
 /* Define to 1 if you have the `kill' function. */
 #undef HAVE_KILL
 
 /* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
 #undef HAVE_LANGINFO_CODESET
 
+/* Define if the ldexpl function is available in libc. */
+#undef HAVE_LDEXPL_IN_LIBC
+
+/* Define if the ldexp function is available in libc. */
+#undef HAVE_LDEXP_IN_LIBC
+
 /* Define to 1 if you have the <limits.h> header file. */
 #undef HAVE_LIMITS_H
 
+/* Define to 1 if the system has the type 'long long int'. */
+#undef HAVE_LONG_LONG_INT
+
+/* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including
+   config.h and <sys/mman.h>. */
+#undef HAVE_MAP_ANONYMOUS
+
 /* Define to 1 if you have the <math.h> header file. */
 #undef HAVE_MATH_H
 
+/* Define to 1 if you have the `mbrtowc' function. */
+#undef HAVE_MBRTOWC
+
 /* Define to 1 if you have the <memory.h> header file. */
 #undef HAVE_MEMORY_H
 
 /* Define to 1 if you have a working `mmap' system call. */
 #undef HAVE_MMAP
 
+/* Define to 1 if you have the `mprotect' function. */
+#undef HAVE_MPROTECT
+
+/* Define to 1 if you have the `nl_langinfo' function. */
+#undef HAVE_NL_LANGINFO
+
 /* Define to 1 if you have the <process.h> header file. */
 #undef HAVE_PROCESS_H
 
 /* Define to 1 if you have the `rename' function. */
 #undef HAVE_RENAME
 
+/* Define to 1 if 'long double' and 'double' have the same representation. */
+#undef HAVE_SAME_LONG_DOUBLE_AS_DOUBLE
+
 /* Define to 1 if you have the `setlocale' function. */
 #undef HAVE_SETLOCALE
 
+/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
+#undef HAVE_SIGNED_SIG_ATOMIC_T
+
+/* Define to 1 if 'wchar_t' is a signed integer type. */
+#undef HAVE_SIGNED_WCHAR_T
+
+/* Define to 1 if 'wint_t' is a signed integer type. */
+#undef HAVE_SIGNED_WINT_T
+
 /* Define to 1 if you have the `snprintf' function. */
 #undef HAVE_SNPRINTF
 
+/* Define if the return value of the snprintf function is the number of of
+   bytes (excluding the terminating NUL) that would have been produced if the
+   buffer had been large enough. */
+#undef HAVE_SNPRINTF_RETVAL_C99
+
 /* Define to 1 if you have the <stddef.h> header file. */
 #undef HAVE_STDDEF_H
 
 /* Define to 1 if you have the <stdint.h> header file. */
 #undef HAVE_STDINT_H
 
+/* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares
+   uintmax_t. */
+#undef HAVE_STDINT_H_WITH_UINTMAX
+
 /* Define to 1 if you have the <stdlib.h> header file. */
 #undef HAVE_STDLIB_H
 
 /* Define to 1 if you have the `strncasecmp' function. */
 #undef HAVE_STRNCASECMP
 
+/* Define to 1 if you have the `strnlen' function. */
+#undef HAVE_STRNLEN
+
 /* Define to 1 if you have the `strsep' function. */
 #undef HAVE_STRSEP
 
 /* Define to 1 if you have the `symlink' function. */
 #undef HAVE_SYMLINK
 
+/* Define to 1 if you have the <sys/bitypes.h> header file. */
+#undef HAVE_SYS_BITYPES_H
+
 /* Define to 1 if you have the <sys/dir.h> header file. */
 #undef HAVE_SYS_DIR_H
 
 /* Define if you have sys_errlist in <errno.h>, <stdio.h>, or <stdlib.h>. */
 #undef HAVE_SYS_ERRLIST
 
+/* Define to 1 if you have the <sys/inttypes.h> header file. */
+#undef HAVE_SYS_INTTYPES_H
+
+/* Define to 1 if you have the <sys/mman.h> header file. */
+#undef HAVE_SYS_MMAN_H
+
 /* Define if you have sys_nerr in <errno.h>, <stdio.h>, or <stdio.h>. */
 #undef HAVE_SYS_NERR
 
 /* Define to 1 if you have the <sys/types.h> header file. */
 #undef HAVE_SYS_TYPES_H
 
+/* Define to 1 if you have the `towlower' function. */
+#undef HAVE_TOWLOWER
+
+/* uchardet library availability */
+#undef HAVE_UCHARDET
+
 /* Define to 1 if you have the <unistd.h> header file. */
 #undef HAVE_UNISTD_H
 
+/* Define to 1 if the system has the type 'unsigned long long int'. */
+#undef HAVE_UNSIGNED_LONG_LONG_INT
+
+/* Define to 1 if you have the `vasnprintf' function. */
+#undef HAVE_VASNPRINTF
+
 /* Define to 1 if you have the `vsnprintf' function. */
 #undef HAVE_VSNPRINTF
 
+/* Define to 1 if you have the <wchar.h> header file. */
+#undef HAVE_WCHAR_H
+
+/* Define if you have the 'wchar_t' type. */
+#undef HAVE_WCHAR_T
+
+/* Define to 1 if you have the `wcrtomb' function. */
+#undef HAVE_WCRTOMB
+
+/* Define to 1 if you have the `wcslen' function. */
+#undef HAVE_WCSLEN
+
+/* Define to 1 if you have the `wcsnlen' function. */
+#undef HAVE_WCSNLEN
+
+/* Define to 1 if you have the <wctype.h> header file. */
+#undef HAVE_WCTYPE_H
+
+/* Define to 1 if you have the `wcwidth' function. */
+#undef HAVE_WCWIDTH
+
+/* Define if you have the 'wint_t' type. */
+#undef HAVE_WINT_T
+
 /* Define to 1 if O_NOATIME works. */
 #undef HAVE_WORKING_O_NOATIME
 
 /* Define to 1 if O_NOFOLLOW works. */
 #undef HAVE_WORKING_O_NOFOLLOW
 
+/* Define to 1 if you have the `__fseterr' function. */
+#undef HAVE___FSETERR
+
 /* Define as const if the declaration of iconv() needs const. */
 #undef ICONV_CONST
 
 /* Define if the host's encoding is EBCDIC. */
 #undef IS_EBCDIC_HOST
 
+/* Define as the bit index in the word where to find bit 0 of the exponent of
+   'long double'. */
+#undef LDBL_EXPBIT0_BIT
+
+/* Define as the word index where to find the exponent of 'long double'. */
+#undef LDBL_EXPBIT0_WORD
+
+/* Define as the bit index in the word where to find the sign of 'long
+   double'. */
+#undef LDBL_SIGNBIT_BIT
+
+/* Define as the word index where to find the sign of 'long double'. */
+#undef LDBL_SIGNBIT_WORD
+
 /* Define if localtime() takes a long * not a time_t *. */
 #undef LONG_FOR_TIME_T
 
+/* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */
+#undef MAP_ANONYMOUS
+
+/* Use GNU style printf and scanf.  */
+#ifndef __USE_MINGW_ANSI_STDIO
+# undef __USE_MINGW_ANSI_STDIO
+#endif
+
+
 /* Define if your C++ doesn't declare gettimeofday(). */
 #undef NEED_DECLARATION_GETTIMEOFDAY
 
-/* Define if your C++ doesn't declare hypot(). */
-#undef NEED_DECLARATION_HYPOT
-
 /* Define if your C++ doesn't declare pclose(). */
 #undef NEED_DECLARATION_PCLOSE
 
 /* Define if your C++ doesn't declare rand(). */
 #undef NEED_DECLARATION_RAND
 
-/* Define if your C++ doesn't declare snprintf(). */
-#undef NEED_DECLARATION_SNPRINTF
-
 /* Define if your C++ doesn't declare srand(). */
 #undef NEED_DECLARATION_SRAND
 
 /* Define if your C++ doesn't declare vfprintf(). */
 #undef NEED_DECLARATION_VFPRINTF
 
-/* Define if your C++ doesn't declare vsnprintf(). */
-#undef NEED_DECLARATION_VSNPRINTF
+/* Define if the vasnprintf implementation needs special code for the 'a' and
+   'A' directives. */
+#undef NEED_PRINTF_DIRECTIVE_A
+
+/* Define if the vasnprintf implementation needs special code for the 'F'
+   directive. */
+#undef NEED_PRINTF_DIRECTIVE_F
+
+/* Define if the vasnprintf implementation needs special code for the 'ls'
+   directive. */
+#undef NEED_PRINTF_DIRECTIVE_LS
+
+/* Define if the vasnprintf implementation needs special code for 'double'
+   arguments. */
+#undef NEED_PRINTF_DOUBLE
+
+/* Define if the vasnprintf implementation needs special code for surviving
+   out-of-memory conditions. */
+#undef NEED_PRINTF_ENOMEM
+
+/* Define if the vasnprintf implementation needs special code for the ' flag.
+   */
+#undef NEED_PRINTF_FLAG_GROUPING
+
+/* Define if the vasnprintf implementation needs special code for the '-'
+   flag. */
+#undef NEED_PRINTF_FLAG_LEFTADJUST
+
+/* Define if the vasnprintf implementation needs special code for the 0 flag.
+   */
+#undef NEED_PRINTF_FLAG_ZERO
+
+/* Define if the vasnprintf implementation needs special code for infinite
+   'double' arguments. */
+#undef NEED_PRINTF_INFINITE_DOUBLE
+
+/* Define if the vasnprintf implementation needs special code for infinite
+   'long double' arguments. */
+#undef NEED_PRINTF_INFINITE_LONG_DOUBLE
+
+/* Define if the vasnprintf implementation needs special code for 'long
+   double' arguments. */
+#undef NEED_PRINTF_LONG_DOUBLE
+
+/* Define if the vasnprintf implementation needs special code for supporting
+   large precisions without arbitrary bounds. */
+#undef NEED_PRINTF_UNBOUNDED_PRECISION
+
+/* Name of package */
+#undef PACKAGE
 
 /* Define to the address where bug reports for this package should be sent. */
 #undef PACKAGE_BUGREPORT
 /* Define if the printer's page size is A4. */
 #undef PAGEA4
 
-/* Define as the return type of signal handlers (`int' or `void'). */
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'ptrdiff_t'. */
+#undef PTRDIFF_T_SUFFIX
+
+/* Define if fprintf is overridden by a POSIX compliant gnulib implementation.
+   */
+#undef REPLACE_FPRINTF_POSIX
+
+/* Define if vasnprintf exists but is overridden by gnulib. */
+#undef REPLACE_VASNPRINTF
+
+/* Define as the return type of signal handlers ('int' or 'void'). */
 #undef RETSIGTYPE
 
 /* Define if srand() returns void not int. */
 #undef RET_TYPE_SRAND_IS_VOID
 
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'sig_atomic_t'. */
+#undef SIG_ATOMIC_T_SUFFIX
+
+/* Define as the maximum value of type 'size_t', if the system doesn't define
+   it. */
+#ifndef SIZE_MAX
+# undef SIZE_MAX
+#endif
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'size_t'. */
+#undef SIZE_T_SUFFIX
+
+/* If using the C implementation of alloca, define if you know the
+   direction of stack growth for your system; otherwise it will be
+   automatically deduced at runtime.
+       STACK_DIRECTION > 0 => grows toward higher addresses
+       STACK_DIRECTION < 0 => grows toward lower addresses
+       STACK_DIRECTION = 0 => direction of growth unknown */
+#undef STACK_DIRECTION
+
 /* Define to 1 if you have the ANSI C header files. */
 #undef STDC_HEADERS
 
 #ifndef _ALL_SOURCE
 # undef _ALL_SOURCE
 #endif
+/* Enable general extensions on macOS.  */
+#ifndef _DARWIN_C_SOURCE
+# undef _DARWIN_C_SOURCE
+#endif
 /* Enable GNU extensions on systems that have them.  */
 #ifndef _GNU_SOURCE
 # undef _GNU_SOURCE
 #endif
+/* Enable NetBSD extensions on NetBSD.  */
+#ifndef _NETBSD_SOURCE
+# undef _NETBSD_SOURCE
+#endif
+/* Enable OpenBSD extensions on NetBSD.  */
+#ifndef _OPENBSD_SOURCE
+# undef _OPENBSD_SOURCE
+#endif
 /* Enable threading extensions on Solaris.  */
 #ifndef _POSIX_PTHREAD_SEMANTICS
 # undef _POSIX_PTHREAD_SEMANTICS
 #endif
+/* Enable extensions specified by ISO/IEC TS 18661-5:2014.  */
+#ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+# undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-1:2014.  */
+#ifndef __STDC_WANT_IEC_60559_BFP_EXT__
+# undef __STDC_WANT_IEC_60559_BFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-2:2015.  */
+#ifndef __STDC_WANT_IEC_60559_DFP_EXT__
+# undef __STDC_WANT_IEC_60559_DFP_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-4:2015.  */
+#ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__
+# undef __STDC_WANT_IEC_60559_FUNCS_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TS 18661-3:2015.  */
+#ifndef __STDC_WANT_IEC_60559_TYPES_EXT__
+# undef __STDC_WANT_IEC_60559_TYPES_EXT__
+#endif
+/* Enable extensions specified by ISO/IEC TR 24731-2:2010.  */
+#ifndef __STDC_WANT_LIB_EXT2__
+# undef __STDC_WANT_LIB_EXT2__
+#endif
+/* Enable extensions specified by ISO/IEC 24747:2009.  */
+#ifndef __STDC_WANT_MATH_SPEC_FUNCS__
+# undef __STDC_WANT_MATH_SPEC_FUNCS__
+#endif
 /* Enable extensions on HP NonStop.  */
 #ifndef _TANDEM_SOURCE
 # undef _TANDEM_SOURCE
 #endif
+/* Enable X/Open extensions if necessary.  HP-UX 11.11 defines
+   mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of
+   whether compiling with -Ae or -D_HPUX_SOURCE=1.  */
+#ifndef _XOPEN_SOURCE
+# undef _XOPEN_SOURCE
+#endif
+/* Enable X/Open compliant socket functions that do not require linking
+   with -lxnet on HP-UX 11.11.  */
+#ifndef _HPUX_ALT_XOPEN_SOCKET_API
+# undef _HPUX_ALT_XOPEN_SOCKET_API
+#endif
 /* Enable general extensions on Solaris.  */
 #ifndef __EXTENSIONS__
 # undef __EXTENSIONS__
 #endif
 
 
+/* Version number of package */
+#undef VERSION
+
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wchar_t'. */
+#undef WCHAR_T_SUFFIX
+
 /* Define if the 0200 bit of the status returned by wait() indicates whether a
    core image was produced for a process that was terminated by a signal. */
 #undef WCOREFLAG
 
+/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
+   'wint_t'. */
+#undef WINT_T_SUFFIX
+
 /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most
    significant byte first (like Motorola and SPARC, unlike Intel). */
 #if defined AC_APPLE_UNIVERSAL_BUILD
 /* Define to 1 if on MINIX. */
 #undef _MINIX
 
+/* Define to 1 to make NetBSD features available. MINIX 3 needs this. */
+#undef _NETBSD_SOURCE
+
+/* The _Noreturn keyword of C11.  */
+#if ! (defined _Noreturn \
+       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
+# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
+      || 0x5110 <= __SUNPRO_C)
+#  define _Noreturn __attribute__ ((__noreturn__))
+# elif defined _MSC_VER && 1200 <= _MSC_VER
+#  define _Noreturn __declspec (noreturn)
+# else
+#  define _Noreturn
+# endif
+#endif
+
+
 /* Define to 2 if the system does not provide POSIX.1 features except with
    this defined. */
 #undef _POSIX_1_SOURCE
 /* Define if you have ISC 3.x or 4.x. */
 #undef _SYSV3
 
-/* Define uintmax_t to `unsigned long' or `unsigned long long' if <inttypes.h>
+/* For standard stat data types on VMS. */
+#undef _USE_STD_STAT
+
+/* Define to 1 if the system <stdint.h> predates C++11. */
+#undef __STDC_CONSTANT_MACROS
+
+/* Define to 1 if the system <stdint.h> predates C++11. */
+#undef __STDC_LIMIT_MACROS
+
+/* Please see the Gnulib manual for how to use these macros.
+
+   Suppress extern inline with HP-UX cc, as it appears to be broken; see
+   <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>.
+
+   Suppress extern inline with Sun C in standards-conformance mode, as it
+   mishandles inline functions that call each other.  E.g., for 'inline void f
+   (void) { } inline void g (void) { f (); }', c99 incorrectly complains
+   'reference to static identifier "f" in extern inline function'.
+   This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16.
+
+   Suppress extern inline (with or without __attribute__ ((__gnu_inline__)))
+   on configurations that mistakenly use 'static inline' to implement
+   functions or macros in standard C headers like <ctype.h>.  For example,
+   if isdigit is mistakenly implemented via a static inline function,
+   a program containing an extern inline function that calls isdigit
+   may not work since the C standard prohibits extern inline functions
+   from calling static functions (ISO C 99 section 6.7.4.(3).
+   This bug is known to occur on:
+
+     OS X 10.8 and earlier; see:
+     https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html
+
+     DragonFly; see
+     http://muscles.dragonflybsd.org/bulk/bleeding-edge-potential/latest-per-pkg/ah-tty-0.3.12.log
+
+     FreeBSD; see:
+     https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html
+
+   OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and
+   for clang but remains for g++; see <https://trac.macports.org/ticket/41033>.
+   Assume DragonFly and FreeBSD will be similar.
+
+   GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99
+   inline semantics, unless -fgnu89-inline is used.  It defines a macro
+   __GNUC_STDC_INLINE__ to indicate this situation or a macro
+   __GNUC_GNU_INLINE__ to indicate the opposite situation.
+   GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline
+   semantics but warns, unless -fgnu89-inline is used:
+     warning: C99 inline functions are not supported; using GNU89
+     warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute
+   It defines a macro __GNUC_GNU_INLINE__ to indicate this situation.
+ */
+#if (((defined __APPLE__ && defined __MACH__) \
+      || defined __DragonFly__ || defined __FreeBSD__) \
+     && (defined __header_inline \
+         ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \
+            && ! defined __clang__) \
+         : ((! defined _DONT_USE_CTYPE_INLINE_ \
+             && (defined __GNUC__ || defined __cplusplus)) \
+            || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \
+                && defined __GNUC__ && ! defined __cplusplus))))
+# define _GL_EXTERN_INLINE_STDHEADER_BUG
+#endif
+#if ((__GNUC__ \
+      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
+      : (199901L <= __STDC_VERSION__ \
+         && !defined __HP_cc \
+         && !defined __PGI \
+         && !(defined __SUNPRO_C && __STDC__))) \
+     && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# define _GL_INLINE inline
+# define _GL_EXTERN_INLINE extern inline
+# define _GL_EXTERN_INLINE_IN_USE
+#elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \
+       && !defined _GL_EXTERN_INLINE_STDHEADER_BUG)
+# if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__
+   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
+#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
+# else
+#  define _GL_INLINE extern inline
+# endif
+# define _GL_EXTERN_INLINE extern
+# define _GL_EXTERN_INLINE_IN_USE
+#else
+# define _GL_INLINE static _GL_UNUSED
+# define _GL_EXTERN_INLINE static _GL_UNUSED
+#endif
+
+/* In GCC 4.6 (inclusive) to 5.1 (exclusive),
+   suppress bogus "no previous prototype for 'FOO'"
+   and "no previous declaration for 'FOO'" diagnostics,
+   when FOO is an inline function in the header; see
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and
+   <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>.  */
+#if __GNUC__ == 4 && 6 <= __GNUC_MINOR__
+# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
+#  define _GL_INLINE_HEADER_CONST_PRAGMA
+# else
+#  define _GL_INLINE_HEADER_CONST_PRAGMA \
+     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
+# endif
+# define _GL_INLINE_HEADER_BEGIN \
+    _Pragma ("GCC diagnostic push") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
+    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
+    _GL_INLINE_HEADER_CONST_PRAGMA
+# define _GL_INLINE_HEADER_END \
+    _Pragma ("GCC diagnostic pop")
+#else
+# define _GL_INLINE_HEADER_BEGIN
+# define _GL_INLINE_HEADER_END
+#endif
+
+/* Define to `__inline__' or `__inline' if that's what the C compiler
+   calls it, or to nothing if 'inline' is not supported under any name.  */
+#ifndef __cplusplus
+#undef inline
+#endif
+
+/* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */
+#undef intmax_t
+
+/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
+   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
+   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
+   __APPLE__ && __MACH__ test for Mac OS X.
+   __APPLE_CC__ tests for the Apple compiler and its version.
+   __STDC_VERSION__ tests for the C99 mode.  */
+#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
+# define __GNUC_STDC_INLINE__ 1
+#endif
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef mode_t
+
+/* Define to `int' if <sys/types.h> does not define. */
+#undef pid_t
+
+/* Define as the type of the result of subtracting two pointers, if the system
+   doesn't define it. */
+#undef ptrdiff_t
+
+/* Define to the equivalent of the C99 'restrict' keyword, or to
+   nothing if this is not supported.  Do not define if restrict is
+   supported directly.  */
+#undef restrict
+/* Work around a bug in Sun C++: it does not support _Restrict or
+   __restrict__, even though the corresponding Sun C compiler ends up with
+   "#define restrict _Restrict" or "#define restrict __restrict__" in the
+   previous line.  Perhaps some future version of Sun C++ will work with
+   restrict; if so, hopefully it defines __RESTRICT like Sun C does.  */
+#if defined __SUNPRO_CC && !defined __RESTRICT
+# define _Restrict
+# define __restrict__
+#endif
+
+/* Define to `unsigned int' if <sys/types.h> does not define. */
+#undef size_t
+
+/* Define as a signed type of the same size as size_t. */
+#undef ssize_t
+
+/* Define uintmax_t to 'unsigned long' or 'unsigned long long' if <inttypes.h>
    does not exist. */
 #undef uintmax_t
+
+/* Define as a marker that can be attached to declarations that might not
+    be used.  This helps to reduce warnings, such as from
+    GCC -Wunused-parameter.  */
+#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
+# define _GL_UNUSED __attribute__ ((__unused__))
+#else
+# define _GL_UNUSED
+#endif
+/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
+   is a misnomer outside of parameter lists.  */
+#define _UNUSED_PARAMETER_ _GL_UNUSED
+
+/* gcc supports the "unused" attribute on possibly unused labels, and
+   g++ has since version 4.5.  Note to support C++ as well as C,
+   _GL_UNUSED_LABEL should be used with a trailing ;  */
+#if !defined __cplusplus || __GNUC__ > 4 \
+    || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)
+# define _GL_UNUSED_LABEL _GL_UNUSED
+#else
+# define _GL_UNUSED_LABEL
+#endif
+
+/* The __pure__ attribute was added in gcc 2.96.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
+# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
+#else
+# define _GL_ATTRIBUTE_PURE /* empty */
+#endif
+
+/* The __const__ attribute was added in gcc 2.95.  */
+#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
+# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
+#else
+# define _GL_ATTRIBUTE_CONST /* empty */
+#endif
+
+/* The __malloc__ attribute was added in gcc 3.  */
+#if 3 <= __GNUC__
+# define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__))
+#else
+# define _GL_ATTRIBUTE_MALLOC /* empty */
+#endif
+
index 42f4b6e882d6aaae7f12783b7ef02c9d66301727..92861cfc138da01d4185b435a1c58155c5c480d3 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifdef HAVE_CC_LIMITS_H
 #include <limits.h>
diff --git a/src/include/curtime.h b/src/include/curtime.h
new file mode 100644 (file)
index 0000000..4d99fb0
--- /dev/null
@@ -0,0 +1,23 @@
+/* Copyright (C) 2015-2018 Free Software Foundation, Inc.
+
+This file is part of groff.
+
+groff 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.
+
+groff 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.
+
+The GNU General Public License version 2 (GPL2) is available in the
+internet at <http://www.gnu.org/licenses/gpl-2.0.txt>. */
+
+#ifdef LONG_FOR_TIME_T
+long
+#else
+time_t
+#endif
+current_time();
index 48d71e1566af3a4fcbd7cb7f4f9ea24e0bed19a9..9191f4edb324c4021a2394bdcc7eca05ac53213c 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,11 +15,11 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 // The target device.  Once initialized, the device doesn't change during
-// the entire program run.  Sample devices are `ps' (for Postscript), `html'
-// (for HTML), and `ascii', `latin1', `utf8' for TTY output.
+// the entire program run.  Sample devices are 'ps' (for Postscript), 'html'
+// (for HTML), and 'ascii', 'latin1', 'utf8' for TTY output.
 extern const char *device;
 
 // end of device.h
index f94dfefceb4a4d94d6d5f31acdfaa3ff3f6766c9..e323de69d7d80ab9db565ce578375d8da9c8f8ca 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
index e53912750776cc9beded869676de854c90ab6202..4bc92bb93e3a17c5d8a0f166629bfcb91276b9be 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 class errarg {
   enum { EMPTY, STRING, CHAR, INTEGER, UNSIGNED_INTEGER, DOUBLE } type;
index 737efa82bde56c2b9de5e1b267d2322abd245c9c..d86e47ef1bf4baba9c9e51c89a185eabd0afabb3 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 extern void fatal_with_file_and_line(const char *filename, int lineno,
                                     const char *format,
index 155651a8ae35f951f8d4305ad7e935662fa14c0c..ed99751105802a5113e50578f8cc2ddeffe3fac9 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 // A function of this type can be registered to define the semantics of
 // arbitrary commands in a font DESC file.
@@ -24,22 +24,22 @@ typedef void (*FONT_COMMAND_HANDLER)(const char *,  // command
                                     const char *,      // file
                                     int);              // lineno
 
-// A glyph is represented by a font-independent `glyph *' pointer.
+// A glyph is represented by a font-independent 'glyph *' pointer.
 // The functions name_to_glyph and number_to_glyph return such a pointer.
 //
 // There are two types of glyphs:
 //
 //   - those with a name, and among these in particular:
-//     `charNNN' denoting a single `char' in the input character set,
-//     `uXXXX' denoting a Unicode character,
+//     'charNNN' denoting a single 'char' in the input character set,
+//     'uXXXX' denoting a Unicode character,
 //
-//   - those with a number, referring to the the font-dependent glyph with
+//   - those with a number, referring to the font-dependent glyph with
 //     the given number.
 
 // The statically allocated information about a glyph.
 //
-// This is an abstract class; only its subclass `charinfo' is instantiated.
-// `charinfo' exists in two versions: one in roff/troff/input.cpp for troff,
+// This is an abstract class; only its subclass 'charinfo' is instantiated.
+// 'charinfo' exists in two versions: one in roff/troff/input.cpp for troff,
 // and one in libs/libgroff/nametoindex.cpp for the preprocessors and the
 // postprocessors.
 struct glyph {
@@ -55,14 +55,14 @@ struct glyph {
 // libs/libgroff/nametoindex.cpp for the preprocessors and the
 // postprocessors.
 extern glyph *name_to_glyph(const char *);     // Convert the glyph with
-                       // the given name (arg1) to a `glyph' object.  This
+                       // the given name (arg1) to a 'glyph' object.  This
                        // has the same semantics as the groff escape sequence
-                       // \C'name'.  If such a `glyph' object does not yet
+                       // \C'name'.  If such a 'glyph' object does not yet
                        // exist, a new one is allocated.
 extern glyph *number_to_glyph(int);    // Convert the font-dependent glyph
-                       // with the given number (in the font) to a `glyph'
+                       // with the given number (in the font) to a 'glyph'
                        // object.  This has the same semantics as the groff
-                       // escape sequence \N'number'.  If such a `glyph'
+                       // escape sequence \N'number'.  If such a 'glyph'
                        // object does not yet exist, a new one is allocated.
 extern const char *glyph_to_name(glyph *);     // Convert the given glyph
                        // back to its name.  Return NULL if the glyph
@@ -86,17 +86,17 @@ inline int glyph_to_index(glyph *g)
   return g->index;
 }
 
-// Types used in non-public members of `class font'.
+// Types used in non-public members of 'class font'.
 struct font_kern_list;
 struct font_char_metric;
 struct font_widths_cache;
 
-// A `class font' instance represents the relevant information of a font of
+// A 'class font' instance represents the relevant information of a font of
 // the given device.  This includes the set of glyphs represented by the
 // font, and metrics for each glyph.
 class font {
 public:
-  enum {               // The valid argument values of `has_ligature'.
+  enum {               // The valid argument values of 'has_ligature'.
     LIG_ff = 1,
     LIG_fi = 2,
     LIG_fl = 4,
@@ -107,8 +107,8 @@ public:
   virtual ~font();     // Destructor.
   int contains(glyph *);       // Return 1 if this font contains the given
                        // glyph, 0 otherwise.
-  int is_special();    // Return 1 if this font is special, 0 otherwise. 
-                       // See section `Special Fonts' in the info file of
+  int is_special();    // Return 1 if this font is special, 0 otherwise.
+                       // See section 'Special Fonts' in the info file of
                        // groff.  Used by make_glyph_node().
   int get_width(glyph *, int); // A rectangle represents the shape of the
                        // given glyph (arg1) at the given point size
@@ -118,14 +118,14 @@ public:
                        // given glyph (arg1) at the given point size
                        // (arg2).  Return the distance between the base
                        // line and the top of this rectangle.
-                       // This is often also called the `ascent' of the
+                       // This is often also called the 'ascent' of the
                        // glyph.  If the top is above the base line, this
                        // value is positive.
   int get_depth(glyph *, int); // A rectangle represents the shape of the
                        // given glyph (arg1) at the given point size
                        // (arg2).  Return the distance between the base
-                       // line and the bottom of this rectangle. 
-                       // This is often also called the `descent' of the
+                       // line and the bottom of this rectangle.
+                       // This is often also called the 'descent' of the
                        // glyph.  If the bottom is below the base line,
                        // this value is positive.
   int get_space_width(int);    // Return the normal width of a space at the
@@ -134,7 +134,7 @@ public:
                        // shape of the given glyph.  Bit 0 is set if the
                        // character has a descender.  Bit 1 is set if the
                        // character has a tall glyph.  See groff manual,
-                       // description of \w and the `ct' register.
+                       // description of \w and the 'ct' register.
   int get_kern(glyph *, glyph *, int); // Return the kerning between the
                        // given glyphs (arg1 and arg2), both at the given
                        // point size (arg3).
@@ -178,7 +178,7 @@ public:
                        // subscript glyph, the horizontal position may need
                        // to be advanced by some (possibly negative)
                        // amount.  See groff manual, description of \w and
-                       // the `ssc' register.  Return this amount.
+                       // the 'ssc' register.  Return this amount.
   void set_zoom(int);  // Set the font's zoom factor * 1000.  Must be a
                        // non-negative value.
   int get_zoom();      // Return the font's zoom factor * 1000.
@@ -189,27 +189,27 @@ public:
                        // glyph.  Return NULL if there is no special
                        // information.
   const char *get_name();      // Return the name of this font.
-  const char *get_internal_name();     // Return the `internalname'
+  const char *get_internal_name();     // Return the 'internalname'
                        // attribute of this font.  Return NULL if it has
                        // none.
-  const char *get_image_generator();   // Return the `image_generator'
+  const char *get_image_generator();   // Return the 'image_generator'
                        // attribute of this font.  Return NULL if it has
                        // none.
   static int scan_papersize(const char *, const char **,
                            double *, double *);        // Parse the
-                       // `papersize' attribute in a DESC file (given in
+                       // 'papersize' attribute in a DESC file (given in
                        // arg1).  Return the name of the size (in arg2),
-                       // and the length and width (in arg3 and arg4). 
+                       // and the length and width (in arg3 and arg4).
                        // Return 1 in case of success, 0 otherwise.
   static font *load_font(const char *, int * = 0, int = 0);    // Load the
                        // font description file with the given name (arg1)
-                       // and return it as a `font' class.  If arg2 points
+                       // and return it as a 'font' class.  If arg2 points
                        // to an integer variable, set it to 1 if the file
-                       // is not found, without emitting an error message. 
+                       // is not found, without emitting an error message.
                        // If arg2 is NULL, print an error message if the
                        // file is not found.  If arg3 is nonzero, only the
                        // part of the font description file before the
-                       // `charset' and `kernpairs' sections is loaded. 
+                       // 'charset' and 'kernpairs' sections is loaded.
                        // Return NULL in case of failure.
   static void command_line_font_dir(const char *);     // Prepend given
                        // path (arg1) to the list of directories in which
@@ -229,60 +229,60 @@ public:
                        // a function which defines the semantics of
                        // arbitrary commands in the font DESC file.
   // Now the variables from the DESC file, shared by all fonts.
-  static int res;      // The `res' attribute given in the DESC file.
-  static int hor;      // The `hor' attribute given in the DESC file.
-  static int vert;     // The `vert' attribute given in the DESC file.
-  static int unitwidth;        // The `unitwidth' attribute given in the DESC file.
-  static int paperwidth;       // The `paperwidth' attribute given in the
-                       // DESC file, or derived from the `papersize'
+  static int res;      // The 'res' attribute given in the DESC file.
+  static int hor;      // The 'hor' attribute given in the DESC file.
+  static int vert;     // The 'vert' attribute given in the DESC file.
+  static int unitwidth;        // The 'unitwidth' attribute given in the DESC file.
+  static int paperwidth;       // The 'paperwidth' attribute given in the
+                       // DESC file, or derived from the 'papersize'
                        // attribute given in the DESC file.
-  static int paperlength;      // The `paperlength' attribute given in the
-                       // DESC file, or derived from the `papersize'
+  static int paperlength;      // The 'paperlength' attribute given in the
+                       // DESC file, or derived from the 'papersize'
                        // attribute given in the DESC file.
   static const char *papersize;
-  static int biggestfont;      // The `biggestfont' attribute given in the
+  static int biggestfont;      // The 'biggestfont' attribute given in the
                        // DESC file.
   static int spare2;
-  static int sizescale;        // The `sizescale' attribute given in the DESC file.
-  static int tcommand;  // Nonzero if the DESC file has the `tcommand'
+  static int sizescale;        // The 'sizescale' attribute given in the DESC file.
+  static int tcommand;  // Nonzero if the DESC file has the 'tcommand'
                        // attribute.
   static int unscaled_charwidths;      // Nonzero if the DESC file has the
-                       // `unscaled_charwidths' attribute.
+                       // 'unscaled_charwidths' attribute.
   static int pass_filenames;   // Nonzero if the DESC file has the
-                       // `pass_filenames' attribute.
+                       // 'pass_filenames' attribute.
   static int use_charnames_in_special; // Nonzero if the DESC file has the
-                       // `use_charnames_in_special' attribute.
-  static int is_unicode; // Nonzero if the DESC file has the `unicode'
+                       // 'use_charnames_in_special' attribute.
+  static int is_unicode; // Nonzero if the DESC file has the 'unicode'
                        // attribute.
-  static const char *image_generator;  // The `image_generator' attribute
+  static const char *image_generator;  // The 'image_generator' attribute
                        // given in the DESC file.
-  static const char **font_name_table; // The `fonts' attribute given in
+  static const char **font_name_table; // The 'fonts' attribute given in
                        // the DESC file, as a NULL-terminated array of
                        // strings.
-  static const char **style_table;     // The `styles' attribute given in
+  static const char **style_table;     // The 'styles' attribute given in
                        // the DESC file, as a NULL-terminated array of
                        // strings.
-  static const char *family;   // The `family' attribute given in the DESC
+  static const char *family;   // The 'family' attribute given in the DESC
                        // file.
-  static int *sizes;   // The `sizes' attribute given in the DESC file, as
+  static int *sizes;   // The 'sizes' attribute given in the DESC file, as
                        // an array of intervals of the form { lower1,
                        // upper1, ... lowerN, upperN, 0 }.
 
 private:
   unsigned ligatures;  // Bit mask of available ligatures.  Used by
                        // has_ligature().
-  font_kern_list **kern_hash_table;    // Hash table of kerning pairs. 
+  font_kern_list **kern_hash_table;    // Hash table of kerning pairs.
                        // Used by get_kern().
   int space_width;     // The normal width of a space.  Used by
                        // get_space_width().
   int special;         // 1 if this font is special, 0 otherwise.  Used by
                        // is_special().
   char *name;          // The name of this font.  Used by get_name().
-  char *internalname;  // The `internalname' attribute of this font, or
+  char *internalname;  // The 'internalname' attribute of this font, or
                        // NULL.  Used by get_internal_name().
   double slant;                // The natural slant angle (in degrees) of this font.
   int zoom;            // The font's magnification, multiplied by 1000.
-                       // Used by scale().  A zero value means `no zoom'.
+                       // Used by scale().  A zero value means 'no zoom'.
   int *ch_index;       // Conversion table from font-independent character
                        // indices to indices for this particular font.
   int nindices;
@@ -319,9 +319,9 @@ private:
   /* Returns w * pointsize / unitwidth, rounded to the nearest integer.  */
   int scale(int w, int pointsize);
   static int unit_scale(double *, char); // Convert value in arg1 from the
-                       // given unit (arg2; possible values are `i', `c',
-                       // `p', and `P' as documented in the info file of
-                       // groff, section `Measurements') to inches.  Store
+                       // given unit (arg2; possible values are 'i', 'c',
+                       // 'p', and 'P' as documented in the info file of
+                       // groff, section 'Measurements') to inches.  Store
                        // the result in arg1 and return 1.  If the unit is
                        // invalid, return 0.
   virtual void handle_unknown_font_command(const char *,       // command
@@ -337,10 +337,10 @@ protected:
                        // object.  If arg1 points to an integer variable,
                        // set it to 1 if the file is not found, without
                        // emitting an error message.  If arg1 is NULL,
-                       // print an error message if the file is not found. 
+                       // print an error message if the file is not found.
                        // If arg2 is nonzero, only the part of the font
-                       // description file before the `charset' and
-                       // `kernpairs' sections is loaded.  Return NULL in
+                       // description file before the 'charset' and
+                       // 'kernpairs' sections is loaded.  Return NULL in
                        // case of failure.
 };
 
index 1e53e00d9ff228775ec6beea7188726482c1a083..bceaf74ee2fd53cb5a494afea7d073513cae560a 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2001-201 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2018 Free Software Foundation, Inc.
      Written by Gaius Mulley <gaius@glam.ac.uk>
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 int adjust_arc_center(const int *, double *);
 void check_output_arc_limits(int x, int y,
index d0c716f2cbe9af5cd25ba89751ce633f505470f2..6d91fe6f3e78bfa87cf6d24407dec58fd774f512 100644 (file)
@@ -1,5 +1,5 @@
 /* Declarations for getopt.
-   Copyright (C) 1989-201 Free Software Foundation, Inc.
+   Copyright (C) 1989-2018 Free Software Foundation, Inc.
 
    This file is part of the GNU C Library.
 
@@ -14,7 +14,7 @@
    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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _GETOPT_H
 
@@ -62,7 +62,7 @@
    getopt_long_only can permute argv; this is required for backward
    compatibility (e.g., for LSB 2.0.1).
 
-   This used to be `#if defined __GETOPT_PREFIX && !defined __need_getopt',
+   This used to be '#if defined __GETOPT_PREFIX && !defined __need_getopt',
    but it caused redefinition warnings if both unistd.h and getopt.h were
    included, since unistd.h includes getopt.h having previously defined
    __need_getopt.
 extern "C" {
 #endif
 
-/* For communication from `getopt' to the caller.
-   When `getopt' finds an option that takes an argument,
+/* For communication from 'getopt' to the caller.
+   When 'getopt' finds an option that takes an argument,
    the argument value is returned here.
-   Also, when `ordering' is RETURN_IN_ORDER,
+   Also, when 'ordering' is RETURN_IN_ORDER,
    each non-option ARGV-element is returned here.  */
 
 extern char *optarg;
 
 /* Index in ARGV of the next element to be scanned.
    This is used for communication to and from the caller
-   and for communication between successive calls to `getopt'.
+   and for communication between successive calls to 'getopt'.
 
-   On entry to `getopt', zero means this is the first call; initialize.
+   On entry to 'getopt', zero means this is the first call; initialize.
 
-   When `getopt' returns -1, this is the index of the first of the
+   When 'getopt' returns -1, this is the index of the first of the
    non-option elements that the caller should itself scan.
 
-   Otherwise, `optind' communicates from one call to the next
+   Otherwise, 'optind' communicates from one call to the next
    how much of ARGV has been scanned so far.  */
 
 extern int optind;
 
-/* Callers store zero here to inhibit the error message `getopt' prints
+/* Callers store zero here to inhibit the error message 'getopt' prints
    for unrecognized options.  */
 
 extern int opterr;
@@ -140,24 +140,24 @@ extern int optopt;
 #ifndef __need_getopt
 /* Describe the long-named options requested by the application.
    The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector
-   of `struct option' terminated by an element containing a name which is
+   of 'struct option' terminated by an element containing a name which is
    zero.
 
-   The field `has_arg' is:
+   The field 'has_arg' is:
    no_argument         (or 0) if the option does not take an argument,
    required_argument   (or 1) if the option requires an argument,
    optional_argument   (or 2) if the option takes an optional argument.
 
-   If the field `flag' is not NULL, it points to a variable that is set
-   to the value given in the field `val' when the option is found, but
+   If the field 'flag' is not NULL, it points to a variable that is set
+   to the value given in the field 'val' when the option is found, but
    left unchanged if the option is not found.
 
-   To have a long-named option do something other than set an `int' to
-   a compiled-in constant, such as set a value from `optarg', set the
-   option's `flag' field to zero and its `val' field to a nonzero
+   To have a long-named option do something other than set an 'int' to
+   a compiled-in constant, such as set a value from 'optarg', set the
+   option's 'flag' field to zero and its 'val' field to a nonzero
    value (the equivalent single-letter option character, if there is
-   one).  For long options that have a zero `flag' field, `getopt'
-   returns the contents of the `val' field.  */
+   one).  For long options that have a zero 'flag' field, 'getopt'
+   returns the contents of the 'val' field.  */
 
 struct option
 {
@@ -169,7 +169,7 @@ struct option
   int val;
 };
 
-/* Names for the values of the `has_arg' field of `struct option'.  */
+/* Names for the values of the 'has_arg' field of 'struct option'.  */
 
 # define no_argument           0
 # define required_argument     1
@@ -183,23 +183,23 @@ struct option
 
    Return the option character from OPTS just read.  Return -1 when
    there are no more options.  For unrecognized options, or options
-   missing arguments, `optopt' is set to the option letter, and '?' is
+   missing arguments, 'optopt' is set to the option letter, and '?' is
    returned.
 
    The OPTS string is a list of characters which are recognized option
    letters, optionally followed by colons, specifying that that letter
-   takes an argument, to be placed in `optarg'.
+   takes an argument, to be placed in 'optarg'.
 
    If a letter in OPTS is followed by two colons, its argument is
-   optional.  This behavior is specific to the GNU `getopt'.
+   optional.  This behavior is specific to the GNU 'getopt'.
 
-   The argument `--' causes premature termination of argument
-   scanning, explicitly telling `getopt' that there are no more
+   The argument '--' causes premature termination of argument
+   scanning, explicitly telling 'getopt' that there are no more
    options.
 
-   If OPTS begins with `--', then non-option arguments are treated as
+   If OPTS begins with '--', then non-option arguments are treated as
    arguments to the option '\0'.  This behavior is specific to the GNU
-   `getopt'.  */
+   'getopt'.  */
 
 extern int getopt (int ___argc, char *const *___argv, const char *__shortopts)
        __THROW;
index 0ddbad1f20e0d90cd1571bed1d94dda69b4d2072..cb614840f6c76f3cb915acb67223f87ab66e9cfa 100644 (file)
@@ -1,5 +1,5 @@
 /* Internal declarations for getopt.
-   Copyright (C) 1989-201 Free Software Foundation, Inc.
+   Copyright (C) 1989-2018 Free Software Foundation, Inc.
 
    This file is part of the GNU C Library.
 
@@ -14,7 +14,7 @@
    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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifndef _GETOPT_INT_H
 #define _GETOPT_INT_H  1
@@ -62,7 +62,7 @@ struct _getopt_data
      stop option processing when the first non-option is seen.
      This is what Unix does.
      This mode of operation is selected by either setting the environment
-     variable POSIXLY_CORRECT, or using `+' as the first character
+     variable POSIXLY_CORRECT, or using '+' as the first character
      of the list of option characters, or by calling getopt.
 
      PERMUTE is the default.  We permute the contents of ARGV as we
@@ -74,12 +74,12 @@ struct _getopt_data
      written to expect options and other ARGV-elements in any order
      and that care about the ordering of the two.  We describe each
      non-option ARGV-element as if it were the argument of an option
-     with character code 1.  Using `-' as the first character of the
+     with character code 1.  Using '-' as the first character of the
      list of option characters selects this mode of operation.
 
-     The special argument `--' forces an end of option-scanning regardless
-     of the value of `ordering'.  In the case of RETURN_IN_ORDER, only
-     `--' can cause `getopt' to return -1 with `optind' != ARGC.  */
+     The special argument '--' forces an end of option-scanning regardless
+     of the value of 'ordering'.  In the case of RETURN_IN_ORDER, only
+     '--' can cause 'getopt' to return -1 with 'optind' != ARGC.  */
 
   enum
     {
@@ -94,8 +94,8 @@ struct _getopt_data
   /* Handle permutation of arguments.  */
 
   /* Describe the part of ARGV that contains non-options that have
-     been skipped.  `first_nonopt' is the index in ARGV of the first
-     of them; `last_nonopt' is the index after the last of them.  */
+     been skipped.  'first_nonopt' is the index in ARGV of the first
+     of them; 'last_nonopt' is the index after the last of them.  */
 
   int __first_nonopt;
   int __last_nonopt;
index feadcafbf0141f4d93e8c5da80d587a5f12ed353..6f0c1b18e74b67d7737df4b9958c500fc3896da7 100644 (file)
@@ -1,5 +1,5 @@
 /* -*- C -*- */
-/* Copyright (C) 2014  Free Software Foundation, Inc.
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 This file is part of groff.
 
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /* This is a dummy header file to make getopt compile without gettext
    support. */
index 9739a8bc3c6a6b36d8a217ccf2caf68b0742abfa..737eea9b24dea667aa95b47732e967bd886acdb9 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2001-201 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2018 Free Software Foundation, Inc.
      Written by Gaius Mulley (gaius@glam.ac.uk).
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /*
  *  defines the image tags issued by the pre-processors (tbl, pic, eqn)
index db2a5df72e52c07e47965363f7b4a853b0eef3eb..08edf10e8964162269d92a510e3f74079d3ac6e2 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
      Written by Gaius Mulley <gaius@glam.ac.uk>
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifndef HTMLINDICATE_H
 #define HTMLINDICATE_H
diff --git a/src/include/include.am b/src/include/include.am
new file mode 100644 (file)
index 0000000..4a3b8e0
--- /dev/null
@@ -0,0 +1,55 @@
+# Automake rules for 'include'
+#
+# File position: <groff-source>/src/include/include.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+nodist_noinst_HEADERS = defs.h
+CLEANFILES += defs.h
+defs.h: config.status
+       @$(SHELL) $(top_srcdir)/gendef.sh defs.h \
+       "PROG_PREFIX=\"$(g)\"" \
+       "DEVICE=\"$(DEVICE)\"" \
+       "INSTALLPATH=\"$(prefix)\"" \
+       "BINPATH=\"$(bindir)\"" \
+       "FONTPATH=\"$(fontpath)\"" \
+       "MACROPATH=\"$(tmacpath)\"" \
+       "INDEX_SUFFIX=\"$(indexext)\"" \
+       "COMMON_WORDS_FILE=\"$(common_words_file)\"" \
+       "DEFAULT_INDEX_DIR=\"$(indexdir)\"" \
+       "DEFAULT_INDEX_NAME=\"$(indexname)\"" \
+       "DEFAULT_INDEX=\"$(indexdir)/$(indexname)\""
+
+dist-hook: dist_include
+dist_include:
+       chmod u+w $(distdir)/src/include
+       cp -f $(top_srcdir)/src/include/*.h $(distdir)/src/include
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 4d85ff8a56edf677dd2f8f45deec06361a3e79ba..8fca7831fc1ddc857c5fa2f3e547c4327accd5de 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #define INDEX_MAGIC 0x23021964
 #define INDEX_VERSION 1
index ad73691014b958d9cd05c33314f6e8ac090ce8ee..f5eb5d51fc3b684f7ea03ac83a38807c729c8b3e 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <assert.h>
 
@@ -27,14 +27,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 # define name2x(a,b) a ## b
 #endif /* not TRADITIONAL_CPP */
 
-// `class ITABLE(T)' is the type of a hash table mapping an integer (int >= 0)
+// 'class ITABLE(T)' is the type of a hash table mapping an integer (int >= 0)
 // to an object of type T.
 //
-// `struct IASSOC(T)' is the type of a association (pair) between an integer
+// 'struct IASSOC(T)' is the type of a association (pair) between an integer
 // (int >= 0) and an object of type T.
 //
-// `class ITABLE_ITERATOR(T)' is the type of an iterator iterating through a
-// `class ITABLE(T)'.
+// 'class ITABLE_ITERATOR(T)' is the type of an iterator iterating through a
+// 'class ITABLE(T)'.
 //
 // Nowadays one would use templates for this; this code predates the addition
 // of templates to C++.
@@ -50,8 +50,8 @@ extern unsigned next_ptable_size(unsigned);   // Return the first suitable
                                // value.
 #endif
 
-// Declare the types `class ITABLE(T)', `struct IASSOC(T)', and `class
-// ITABLE_ITERATOR(T)' for the type `T'.
+// Declare the types 'class ITABLE(T)', 'struct IASSOC(T)', and 'class
+// ITABLE_ITERATOR(T)' for the type 'T'.
 #define declare_itable(T)                                                    \
                                                                              \
 struct IASSOC(T) {                                                           \
@@ -100,8 +100,8 @@ public:                                                                           \
 // Values must be allocated by the caller (always using new[], not new)
 // and are freed by ITABLE.
 
-// Define the implementations of the members of the types `class ITABLE(T)',
-// `struct IASSOC(T)', `class ITABLE_ITERATOR(T)' for the type `T'.
+// Define the implementations of the members of the types 'class ITABLE(T)',
+// 'struct IASSOC(T)', 'class ITABLE_ITERATOR(T)' for the type 'T'.
 #define implement_itable(T)                                                  \
                                                                              \
 IASSOC(T)::IASSOC(T)()                                                       \
diff --git a/src/include/lf.h b/src/include/lf.h
new file mode 100644 (file)
index 0000000..4e44756
--- /dev/null
@@ -0,0 +1,21 @@
+// -*- C++ -*-
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
+     Written by Werner Lemberg (wl@gnu.org)
+
+This file is part of groff.
+
+groff 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 3 of the License, or
+(at your option) any later version.
+
+groff 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, see <http://www.gnu.org/licenses/>. */
+
+int interpret_lf_args(const char *p);
+void normalize_for_lf (string &fn);
index a0b79fa876ecd2e1e6fadb0d3a7a6256d4c96f32..abb69b890ad12ac9e435a63bb6f8b0a5c17b85af 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -59,16 +59,6 @@ double groff_hypot(double, double);
 
 #include <stdarg.h>
 
-/* HP-UX 10.20 and LynxOS 4.0.0 don't declare snprintf() */
-#if !defined(HAVE_SNPRINTF) || defined(NEED_DECLARATION_SNPRINTF)
-extern "C" { int snprintf(char *, size_t, const char *, /*args*/ ...); }
-#endif
-
-/* LynxOS 4.0.0 has snprintf() but no vsnprintf() */
-#if !defined(HAVE_VSNPRINTF) || defined(NEED_DECLARATION_VSNPRINTF)
-extern "C" { int vsnprintf(char *, size_t, const char *, va_list); }
-#endif
-
 /* LynxOS 4.0.0 doesn't declare vfprintf() */
 #ifdef NEED_DECLARATION_VFPRINTF
 extern "C" { int vfprintf(FILE *, const char *, va_list); }
@@ -98,8 +88,6 @@ extern "C" { int pclose (FILE *); }
 size_t file_name_max(const char *fname);
 size_t path_name_max();
 
-int interpret_lf_args(const char *p);
-
 extern char invalid_char_table[];
 
 inline int invalid_input_char(int c)
index 795a9306896feb543f234c3bc412ce527bf338d4..b94f7d2cef2b5a08962cdf5e2f26cfc995cb6d42 100644 (file)
@@ -1,5 +1,5 @@
 /* Determine a canonical name for the current locale's character encoding.
-   Copyright (C) 2000-2003, 2009-2014 Free Software Foundation, Inc.
+   Copyright (C) 2000-2018 Free Software Foundation, Inc.
    This file is part of the GNU CHARSET Library.
 
    This program is free software; you can redistribute it and/or modify
index 8a6cc138a02b8eedbbd683be9534e2e8e77de410..2be649f31d65e3a5549edd403dc9cf486be9aa21 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 extern search_path macro_path;
 extern search_path safer_macro_path;
index fbd282328713db56c6403933d6ad0d4fff2b5a28..dbc34a39b27bf03c1847fe7a2f5722d6745174d4 100644 (file)
@@ -1,5 +1,5 @@
 /* -*- C -*- */
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
      Written by Eli Zaretskii (eliz@is.elta.co.il)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /* This header file compartmentalize all idiosyncrasies of non-Posix
    systems, such as MS-DOS, MS-Windows, etc.  It should be loaded after
@@ -133,7 +133,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 #if defined(_WIN32) && !defined(_UWIN) && !defined(__CYGWIN__)
 /* Win32 implementations which use the Microsoft runtime library
  * are prone to hanging when a pipe reader quits with unread data in the pipe.
- * `gtroff' avoids this, by invoking `FLUSH_INPUT_PIPE()', defined as ... */
+ * 'gtroff' avoids this, by invoking 'FLUSH_INPUT_PIPE()', defined as ... */
 # define FLUSH_INPUT_PIPE(fd)                \
  do if (!isatty(fd))                         \
  {                                           \
@@ -144,9 +144,9 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 
 /* The Microsoft runtime library also has a broken argument passing mechanism,
  * which may result in improper grouping of arguments passed to a child process
- * by the `spawn()' family of functions.  In `groff', only the `spawnvp()'
+ * by the 'spawn()' family of functions.  In 'groff', only the 'spawnvp()'
  * function is affected; we work around this defect, by substituting a
- * wrapper function in place of `spawnvp()' calls. */
+ * wrapper function in place of 'spawnvp()' calls. */
 
 # ifdef __cplusplus
   extern "C" {
@@ -164,7 +164,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 
 #else
 /* Other implementations do not suffer from Microsoft runtime bugs,
- * but `gtroff' requires a dummy definition for FLUSH_INPUT_PIPE() */
+ * but 'gtroff' requires a dummy definition for FLUSH_INPUT_PIPE() */
 # define FLUSH_INPUT_PIPE(fd)  do {} while(0)
 #endif
 
index 1708cd340243302bc40847fea7acdd53c61a0672..5cb7126054364a693cb7f922324dac882f614026 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2002-201 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg (wl@gnu.org)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 struct paper {
   char *name;
index f1763a0f848dbe2085255775232341316b12a826..333b0b4586e62f6264a52b2980ea3335ba77dd75 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1992-201 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <sys/types.h>
 #include <sys/stat.h>
index 52ba15bb573c26d6340aac64ffb79e633fd915b4..a29295579c426c823c562a3231983a146539664a 100644 (file)
@@ -2,7 +2,7 @@
 
 // <groff_src_dir>/src/include/printer.h
 
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
 
    Written by James Clark (jjc@jclark.com)
 
    General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program. If not, see <http://www.gnu.org/licenses/>.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /* Description
 
-   The class `printer' performs the postprocessing.  Each
-   postprocessor only needs to implement a derived class of `printer' and
-   a suitable function `make_printer' for the device-dependent tasks.
-   Then the methods of class `printer' are called automatically by
-   `do_file()' in `input.cpp'.
+   The class 'printer' performs the postprocessing.  Each
+   postprocessor only needs to implement a derived class of 'printer' and
+   a suitable function 'make_printer' for the device-dependent tasks.
+   Then the methods of class 'printer' are called automatically by
+   'do_file()' in 'input.cpp'.
 */
 
 #include "color.h"
index c43a070772158dddd00b2a911bb25deb7eb77be6..97d745d53c9f31d25c7daaa08bf531893f0c9614 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <assert.h>
 #include <string.h>
@@ -28,14 +28,14 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 # define name2x(a,b) a ## b
 #endif /* not TRADITIONAL_CPP */
 
-// `class PTABLE(T)' is the type of a hash table mapping a string
+// 'class PTABLE(T)' is the type of a hash table mapping a string
 // (const char *) to an object of type T.
 //
-// `struct PASSOC(T)' is the type of a association (pair) between a
+// 'struct PASSOC(T)' is the type of a association (pair) between a
 // string (const char *) and an object of type T.
 //
-// `class PTABLE_ITERATOR(T)' is the type of an iterator iterating through a
-// `class PTABLE(T)'.
+// 'class PTABLE_ITERATOR(T)' is the type of an iterator iterating through a
+// 'class PTABLE(T)'.
 //
 // Nowadays one would use templates for this; this code predates the addition
 // of templates to C++.
@@ -55,8 +55,8 @@ extern unsigned long hash_string(const char *);       // Return a hash code of the
                                // given string.  The hash function is
                                // platform dependent.  */
 
-// Declare the types `class PTABLE(T)', `struct PASSOC(T)', and `class
-// PTABLE_ITERATOR(T)' for the type `T'.
+// Declare the types 'class PTABLE(T)', 'struct PASSOC(T)', and 'class
+// PTABLE_ITERATOR(T)' for the type 'T'.
 #define declare_ptable(T)                                                    \
                                                                              \
 struct PASSOC(T) {                                                           \
@@ -115,8 +115,8 @@ public:                                                                           \
 // Values must be allocated by the caller (always using new[], not new)
 // and are freed by PTABLE.
 
-// Define the implementations of the members of the types `class PTABLE(T)',
-// `struct PASSOC(T)', `class PTABLE_ITERATOR(T)' for the type `T'.
+// Define the implementations of the members of the types 'class PTABLE(T)',
+// 'struct PASSOC(T)', 'class PTABLE_ITERATOR(T)' for the type 'T'.
 #define implement_ptable(T)                                                  \
                                                                              \
 PASSOC(T)::PASSOC(T)()                                                       \
@@ -133,8 +133,10 @@ PTABLE(T)::PTABLE(T)()                                                           \
 PTABLE(T)::~PTABLE(T)()                                                              \
 {                                                                            \
   for (unsigned i = 0; i < size; i++) {                                              \
-    a_delete v[i].key;                                                       \
-    a_delete v[i].val;                                                       \
+    free(v[i].key);                                                          \
+    /* XXX leak, because we don't know whether */                            \
+    /* 'free', 'delete', or 'delete[]' should be used */                     \
+    /* a_delete v[i].val; */                                                 \
   }                                                                          \
   a_delete v;                                                                \
 }                                                                            \
@@ -148,7 +150,9 @@ const char *PTABLE(T)::define(const char *key, T *val)                            \
        v[n].key != 0;                                                        \
        n = (n == 0 ? size - 1 : n - 1))                                              \
     if (strcmp(v[n].key, key) == 0) {                                        \
-      a_delete v[n].val;                                                     \
+      /* XXX leak, because we don't know whether */                          \
+      /* 'free', 'delete', or 'delete[]' should be used */                   \
+      /* a_delete v[n].val; */                                               \
       v[n].val = val;                                                        \
       return v[n].key;                                                       \
     }                                                                        \
@@ -162,7 +166,7 @@ const char *PTABLE(T)::define(const char *key, T *val)                            \
     for (unsigned i = 0; i < old_size; i++)                                  \
       if (oldv[i].key != 0) {                                                \
        if (oldv[i].val == 0)                                                 \
-         a_delete oldv[i].key;                                               \
+         free(oldv[i].key);                                                  \
        else {                                                                \
          unsigned j;                                                         \
          for (j = unsigned(hash_string(oldv[i].key) % size);                 \
@@ -179,7 +183,7 @@ const char *PTABLE(T)::define(const char *key, T *val)                            \
       ;                                                                              \
     a_delete oldv;                                                           \
   }                                                                          \
-  char *temp = new char[strlen(key)+1];                                              \
+  char *temp = (char*)malloc(strlen(key)+1);                                 \
   strcpy(temp, key);                                                         \
   v[n].key = temp;                                                           \
   v[n].val = val;                                                            \
index b9a9a21180fbc21aad9090ff42a7e2d57967269f..a931c5692f10783ef2593cfd0d9e98147f3b18c3 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 class reference_id {
   int filename_id;
index 905dcbb2334ceb000ba7ce396448c6590f5d9a12..e6956c03e89ded640a5a8c75e1b0f81a987c4293 100644 (file)
@@ -1,7 +1,7 @@
 /* -*- C -*- */
 /* Provide relocation for macro and font files.
 
-   Copyright (C) 2005-201 Free Software Foundation, Inc.
+   Copyright (C) 2005-2018 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU Library General Public License as published
@@ -14,7 +14,7 @@
    Library General Public License for more details.
 
    You should have received a copy of the GNU Library General Public License
-   along with this program. If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifdef __cplusplus
 extern char *curr_prefix;
index 102e97d07c721d080484dd57142395133a1a0d69..4fe18f2f7a9af48b7157899497874a2bcf844d1b 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 class search_item;
 class search_item_iterator;
index 2e09b5018f53d2c98209549b2dc140eb6079b033..4a4b6c224ffcef571a5c86613dd3f919ba92f09d 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 class search_path {
   char *dirs;
index e11d834f29df52a46477e3573f602a6d3e78f2bc..22e7ffa7b9fdab986f95e14195ddf48f1fc0df5b 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <string.h>
 #include <stdio.h>
index 3a73e98390f6a05ad235f4ff270ece865f124adf..ce9e6454d252cb7dcc02c10bc3112f5b30976547 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #define DONT_STORE 1
 #define MUST_ALREADY_EXIST 2
index 7537d7394dbc7755ffae8bb32c64de54d494281f..164f3c8ffcefcb4caf88f1361a0677ba1fba83c9 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2002-201 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg <wl@gnu.org>
 
 This file is part of groff.
@@ -15,14 +15,14 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 // Convert a groff glyph name to a string containing an underscore-separated
 // list of Unicode code points.  For example,
 //
-//   `-'   ->  `2010'
-//   `,c'  ->  `00E7'
-//   `fl'  ->  `0066_006C'
+//   '-'   ->  '2010'
+//   ',c'  ->  '00E7'
+//   'fl'  ->  '0066_006C'
 //
 // Return NULL if there is no equivalent.
 const char *glyph_name_to_unicode(const char *);
@@ -30,8 +30,8 @@ const char *glyph_name_to_unicode(const char *);
 // Convert a string containing an underscore-separated list of Unicode code
 // points to a groff glyph name.  For example,
 //
-//   `2010'       ->  `hy'
-//   `0066_006C'  ->  `fl'
+//   '2010'       ->  'hy'
+//   '0066_006C'  ->  'fl'
 //
 // Return NULL if there is no equivalent.
 const char *unicode_to_glyph_name(const char *);
@@ -41,22 +41,22 @@ const char *unicode_to_glyph_name(const char *);
 // representing its canonical decomposition.  Also perform compatibility
 // equivalent replacement.  For example,
 //
-//   `1F3A' -> `0399_0313_0300'
-//   `FA6A' -> `983B'
+//   '1F3A' -> '0399_0313_0300'
+//   'FA6A' -> '983B'
 //
 // Return NULL if there is no equivalent.
 const char *decompose_unicode(const char *);
 
 // Test whether the given string denotes a Unicode character.  It must
-// be of the form `uNNNN', obeying the following rules.
+// be of the form 'uNNNN', obeying the following rules.
 //
-//   - `NNNN' must consist of at least 4 hexadecimal digits in upper case.
+//   - 'NNNN' must consist of at least 4 hexadecimal digits in upper case.
 //   - If there are more than 4 hexadecimal digits, the leading one must not
 //     be zero,
-//   - `NNNN' must denote a valid Unicode code point (U+0000..U+10FFFF,
+//   - 'NNNN' must denote a valid Unicode code point (U+0000..U+10FFFF,
 //     excluding surrogate code points.
 //
-// Return a pointer to `NNNN' (skipping the leading `u' character) in case
+// Return a pointer to 'NNNN' (skipping the leading 'u' character) in case
 // of success, NULL otherwise.
 const char *check_unicode_name(const char *);
 
diff --git a/src/libs/gnulib/Makefile.am b/src/libs/gnulib/Makefile.am
deleted file mode 100644 (file)
index 7610e3a..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-## Process this file with automake to produce Makefile.in.
-
-# Makefile.am
-
-# Copyright (C) 1994-2014  Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even
-# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-# PURPOSE.
-
-AUTOMAKE_OPTIONS = 1.5 foreign
-
-SUBDIRS = lib m4
-
-ACLOCAL_AMFLAGS = -I m4
diff --git a/src/libs/gnulib/Makefile.in b/src/libs/gnulib/Makefile.in
deleted file mode 100644 (file)
index 4a0711f..0000000
+++ /dev/null
@@ -1,972 +0,0 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-# Makefile.am
-
-# Copyright (C) 1994-2014  Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation gives
-# unlimited permission to copy and/or distribute it, with or without
-# modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY, to the extent permitted by law; without even
-# the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
-# PURPOSE.
-VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \  ]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = .
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/configure $(am__configure_deps) \
-       $(srcdir)/config.h.in build-aux/compile build-aux/config.guess \
-       build-aux/config.sub build-aux/depcomp build-aux/install-sh \
-       build-aux/missing $(top_srcdir)/build-aux/compile \
-       $(top_srcdir)/build-aux/config.guess \
-       $(top_srcdir)/build-aux/config.sub \
-       $(top_srcdir)/build-aux/install-sh \
-       $(top_srcdir)/build-aux/missing
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
-       $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/configmake.m4 \
-       $(top_srcdir)/m4/extensions.m4 \
-       $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
-       $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
-       $(top_srcdir)/m4/include_next.m4 \
-       $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
-       $(top_srcdir)/m4/libunistring-base.m4 \
-       $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/longlong.m4 \
-       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/onceonly.m4 \
-       $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
-       $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/warn-on-use.m4 \
-       $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
-       $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
-       $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \
- configure.lineno config.status.lineno
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-SOURCES =
-DIST_SOURCES =
-RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
-       ctags-recursive dvi-recursive html-recursive info-recursive \
-       install-data-recursive install-dvi-recursive \
-       install-exec-recursive install-html-recursive \
-       install-info-recursive install-pdf-recursive \
-       install-ps-recursive install-recursive installcheck-recursive \
-       installdirs-recursive pdf-recursive ps-recursive \
-       tags-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
-  distclean-recursive maintainer-clean-recursive
-am__recursive_targets = \
-  $(RECURSIVE_TARGETS) \
-  $(RECURSIVE_CLEAN_TARGETS) \
-  $(am__extra_recursive_targets)
-AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
-       cscope distdir dist dist-all distcheck
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \
-       $(LISP)config.h.in
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-CSCOPE = cscope
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-distdir = $(PACKAGE)-$(VERSION)
-top_distdir = $(distdir)
-am__remove_distdir = \
-  if test -d "$(distdir)"; then \
-    find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \
-      && rm -rf "$(distdir)" \
-      || { sleep 5 && rm -rf "$(distdir)"; }; \
-  else :; fi
-am__post_remove_distdir = $(am__remove_distdir)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-DIST_ARCHIVES = $(distdir).tar.gz
-GZIP_ENV = --best
-DIST_TARGETS = dist-gzip
-distuninstallcheck_listfiles = find . -type f -print
-am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \
-  | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$'
-distcleancheck_listfiles = find . -type f -print
-pkglibexecdir = @pkglibexecdir@
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
-AR = @AR@
-ARFLAGS = @ARFLAGS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
-BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
-BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
-BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
-BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-GLIBC21 = @GLIBC21@
-GNULIB_BTOWC = @GNULIB_BTOWC@
-GNULIB_IMAXABS = @GNULIB_IMAXABS@
-GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
-GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
-GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
-GNULIB_MBRLEN = @GNULIB_MBRLEN@
-GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
-GNULIB_MBSINIT = @GNULIB_MBSINIT@
-GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
-GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
-GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
-GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
-GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
-GNULIB_WCPCPY = @GNULIB_WCPCPY@
-GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
-GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
-GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
-GNULIB_WCSCAT = @GNULIB_WCSCAT@
-GNULIB_WCSCHR = @GNULIB_WCSCHR@
-GNULIB_WCSCMP = @GNULIB_WCSCMP@
-GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
-GNULIB_WCSCPY = @GNULIB_WCSCPY@
-GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
-GNULIB_WCSDUP = @GNULIB_WCSDUP@
-GNULIB_WCSLEN = @GNULIB_WCSLEN@
-GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
-GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
-GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
-GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
-GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
-GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
-GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
-GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
-GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
-GNULIB_WCSSPN = @GNULIB_WCSSPN@
-GNULIB_WCSSTR = @GNULIB_WCSSTR@
-GNULIB_WCSTOK = @GNULIB_WCSTOK@
-GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
-GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
-GNULIB_WCTOB = @GNULIB_WCTOB@
-GNULIB_WCTRANS = @GNULIB_WCTRANS@
-GNULIB_WCTYPE = @GNULIB_WCTYPE@
-GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
-GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
-GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
-GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
-GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
-GNULIB_WMEMSET = @GNULIB_WMEMSET@
-GREP = @GREP@
-HAVE_BTOWC = @HAVE_BTOWC@
-HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
-HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
-HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
-HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
-HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
-HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
-HAVE_FEATURES_H = @HAVE_FEATURES_H@
-HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
-HAVE_ISWBLANK = @HAVE_ISWBLANK@
-HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
-HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
-HAVE_MBRLEN = @HAVE_MBRLEN@
-HAVE_MBRTOWC = @HAVE_MBRTOWC@
-HAVE_MBSINIT = @HAVE_MBSINIT@
-HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
-HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
-HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
-HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
-HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
-HAVE_STDINT_H = @HAVE_STDINT_H@
-HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
-HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
-HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
-HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
-HAVE_WCHAR_H = @HAVE_WCHAR_H@
-HAVE_WCHAR_T = @HAVE_WCHAR_T@
-HAVE_WCPCPY = @HAVE_WCPCPY@
-HAVE_WCPNCPY = @HAVE_WCPNCPY@
-HAVE_WCRTOMB = @HAVE_WCRTOMB@
-HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
-HAVE_WCSCAT = @HAVE_WCSCAT@
-HAVE_WCSCHR = @HAVE_WCSCHR@
-HAVE_WCSCMP = @HAVE_WCSCMP@
-HAVE_WCSCOLL = @HAVE_WCSCOLL@
-HAVE_WCSCPY = @HAVE_WCSCPY@
-HAVE_WCSCSPN = @HAVE_WCSCSPN@
-HAVE_WCSDUP = @HAVE_WCSDUP@
-HAVE_WCSLEN = @HAVE_WCSLEN@
-HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
-HAVE_WCSNCAT = @HAVE_WCSNCAT@
-HAVE_WCSNCMP = @HAVE_WCSNCMP@
-HAVE_WCSNCPY = @HAVE_WCSNCPY@
-HAVE_WCSNLEN = @HAVE_WCSNLEN@
-HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
-HAVE_WCSPBRK = @HAVE_WCSPBRK@
-HAVE_WCSRCHR = @HAVE_WCSRCHR@
-HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
-HAVE_WCSSPN = @HAVE_WCSSPN@
-HAVE_WCSSTR = @HAVE_WCSSTR@
-HAVE_WCSTOK = @HAVE_WCSTOK@
-HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
-HAVE_WCSXFRM = @HAVE_WCSXFRM@
-HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
-HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
-HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
-HAVE_WINT_T = @HAVE_WINT_T@
-HAVE_WMEMCHR = @HAVE_WMEMCHR@
-HAVE_WMEMCMP = @HAVE_WMEMCMP@
-HAVE_WMEMCPY = @HAVE_WMEMCPY@
-HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
-HAVE_WMEMSET = @HAVE_WMEMSET@
-HAVE__BOOL = @HAVE__BOOL@
-INCLUDE_NEXT = @INCLUDE_NEXT@
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
-INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
-LDFLAGS = @LDFLAGS@
-LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
-LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
-LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
-LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
-NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
-NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
-NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
-NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
-NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
-NEXT_STDDEF_H = @NEXT_STDDEF_H@
-NEXT_STDINT_H = @NEXT_STDINT_H@
-NEXT_WCHAR_H = @NEXT_WCHAR_H@
-NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
-PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
-PRIPTR_PREFIX = @PRIPTR_PREFIX@
-PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
-PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
-RANLIB = @RANLIB@
-REPLACE_BTOWC = @REPLACE_BTOWC@
-REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
-REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
-REPLACE_MBRLEN = @REPLACE_MBRLEN@
-REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
-REPLACE_MBSINIT = @REPLACE_MBSINIT@
-REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
-REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
-REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
-REPLACE_NULL = @REPLACE_NULL@
-REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
-REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
-REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
-REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
-REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
-REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
-REPLACE_WCTOB = @REPLACE_WCTOB@
-REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
-SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
-STDBOOL_H = @STDBOOL_H@
-STDDEF_H = @STDDEF_H@
-STDINT_H = @STDINT_H@
-STRIP = @STRIP@
-UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
-UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
-VERSION = @VERSION@
-WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WINT_T_SUFFIX = @WINT_T_SUFFIX@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-gl_LIBOBJS = @gl_LIBOBJS@
-gl_LTLIBOBJS = @gl_LTLIBOBJS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-lispdir = @lispdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-runstatedir = @runstatedir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = 1.5 foreign
-SUBDIRS = lib m4
-ACLOCAL_AMFLAGS = -I m4
-all: config.h
-       $(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-.SUFFIXES:
-am--refresh: Makefile
-       @:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-       @for dep in $?; do \
-         case '$(am__configure_deps)' in \
-           *$$dep*) \
-             echo ' cd $(srcdir) && $(AUTOMAKE) --foreign'; \
-             $(am__cd) $(srcdir) && $(AUTOMAKE) --foreign \
-               && exit 0; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --foreign Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-       @case '$?' in \
-         *config.status*) \
-           echo ' $(SHELL) ./config.status'; \
-           $(SHELL) ./config.status;; \
-         *) \
-           echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe)'; \
-           cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__depfiles_maybe);; \
-       esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-       $(SHELL) ./config.status --recheck
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-       $(am__cd) $(srcdir) && $(AUTOCONF)
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS)
-$(am__aclocal_m4_deps):
-
-config.h: stamp-h1
-       @test -f $@ || rm -f stamp-h1
-       @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1
-
-stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status
-       @rm -f stamp-h1
-       cd $(top_builddir) && $(SHELL) ./config.status config.h
-$(srcdir)/config.h.in:  $(am__configure_deps) 
-       ($(am__cd) $(top_srcdir) && $(AUTOHEADER))
-       rm -f stamp-h1
-       touch $@
-
-distclean-hdr:
-       -rm -f config.h stamp-h1
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(am__recursive_targets):
-       @fail=; \
-       if $(am__make_keepgoing); then \
-         failcom='fail=yes'; \
-       else \
-         failcom='exit 1'; \
-       fi; \
-       dot_seen=no; \
-       target=`echo $@ | sed s/-recursive//`; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       for subdir in $$list; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           dot_seen=yes; \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done; \
-       if test "$$dot_seen" = "no"; then \
-         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-       fi; test -z "$$fail"
-
-ID: $(am__tagged_files)
-       $(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-recursive
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-       set x; \
-       here=`pwd`; \
-       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-         include_option=--etags-include; \
-         empty_fix=.; \
-       else \
-         include_option=--include; \
-         empty_fix=; \
-       fi; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           test ! -f $$subdir/TAGS || \
-             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-         fi; \
-       done; \
-       $(am__define_uniq_tagged_files); \
-       shift; \
-       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-         test -n "$$unique" || unique=$$empty_fix; \
-         if test $$# -gt 0; then \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             "$$@" $$unique; \
-         else \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             $$unique; \
-         fi; \
-       fi
-ctags: ctags-recursive
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-       $(am__define_uniq_tagged_files); \
-       test -z "$(CTAGS_ARGS)$$unique" \
-         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$unique
-
-GTAGS:
-       here=`$(am__cd) $(top_builddir) && pwd` \
-         && $(am__cd) $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) "$$here"
-cscope: cscope.files
-       test ! -s cscope.files \
-         || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS)
-clean-cscope:
-       -rm -f cscope.files
-cscope.files: clean-cscope cscopelist
-cscopelist: cscopelist-recursive
-
-cscopelist-am: $(am__tagged_files)
-       list='$(am__tagged_files)'; \
-       case "$(srcdir)" in \
-         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-         *) sdir=$(subdir)/$(srcdir) ;; \
-       esac; \
-       for i in $$list; do \
-         if test -f "$$i"; then \
-           echo "$(subdir)/$$i"; \
-         else \
-           echo "$$sdir/$$i"; \
-         fi; \
-       done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-       -rm -f cscope.out cscope.in.out cscope.po.out cscope.files
-
-distdir: $(DISTFILES)
-       $(am__remove_distdir)
-       test -d "$(distdir)" || mkdir "$(distdir)"
-       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       list='$(DISTFILES)'; \
-         dist_files=`for file in $$list; do echo $$file; done | \
-         sed -e "s|^$$srcdirstrip/||;t" \
-             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-       case $$dist_files in \
-         */*) $(MKDIR_P) `echo "$$dist_files" | \
-                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-                          sort -u` ;; \
-       esac; \
-       for file in $$dist_files; do \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         if test -d $$d/$$file; then \
-           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-           if test -d "$(distdir)/$$file"; then \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-         else \
-           test -f "$(distdir)/$$file" \
-           || cp -p $$d/$$file "$(distdir)/$$file" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           $(am__make_dryrun) \
-             || test -d "$(distdir)/$$subdir" \
-             || $(MKDIR_P) "$(distdir)/$$subdir" \
-             || exit 1; \
-           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-           $(am__relativize); \
-           new_distdir=$$reldir; \
-           dir1=$$subdir; dir2="$(top_distdir)"; \
-           $(am__relativize); \
-           new_top_distdir=$$reldir; \
-           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-           ($(am__cd) $$subdir && \
-             $(MAKE) $(AM_MAKEFLAGS) \
-               top_distdir="$$new_top_distdir" \
-               distdir="$$new_distdir" \
-               am__remove_distdir=: \
-               am__skip_length_check=: \
-               am__skip_mode_fix=: \
-               distdir) \
-             || exit 1; \
-         fi; \
-       done
-       -test -n "$(am__skip_mode_fix)" \
-       || find "$(distdir)" -type d ! -perm -755 \
-               -exec chmod u+rwx,go+rx {} \; -o \
-         ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \
-         ! -type d ! -perm -400 -exec chmod a+r {} \; -o \
-         ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \
-       || chmod -R a+r "$(distdir)"
-dist-gzip: distdir
-       tardir=$(distdir) && $(am__tar) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).tar.gz
-       $(am__post_remove_distdir)
-
-dist-bzip2: distdir
-       tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2
-       $(am__post_remove_distdir)
-
-dist-lzip: distdir
-       tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz
-       $(am__post_remove_distdir)
-
-dist-xz: distdir
-       tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz
-       $(am__post_remove_distdir)
-
-dist-tarZ: distdir
-       @echo WARNING: "Support for shar distribution archives is" \
-                      "deprecated." >&2
-       @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
-       tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z
-       $(am__post_remove_distdir)
-
-dist-shar: distdir
-       @echo WARNING: "Support for distribution archives compressed with" \
-                      "legacy program 'compress' is deprecated." >&2
-       @echo WARNING: "It will be removed altogether in Automake 2.0" >&2
-       shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz
-       $(am__post_remove_distdir)
-
-dist-zip: distdir
-       -rm -f $(distdir).zip
-       zip -rq $(distdir).zip $(distdir)
-       $(am__post_remove_distdir)
-
-dist dist-all:
-       $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:'
-       $(am__post_remove_distdir)
-
-# This target untars the dist file and tries a VPATH configuration.  Then
-# it guarantees that the distribution is self-contained by making another
-# tarfile.
-distcheck: dist
-       case '$(DIST_ARCHIVES)' in \
-       *.tar.gz*) \
-         GZIP=$(GZIP_ENV) gzip -dc $(distdir).tar.gz | $(am__untar) ;;\
-       *.tar.bz2*) \
-         bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\
-       *.tar.lz*) \
-         lzip -dc $(distdir).tar.lz | $(am__untar) ;;\
-       *.tar.xz*) \
-         xz -dc $(distdir).tar.xz | $(am__untar) ;;\
-       *.tar.Z*) \
-         uncompress -c $(distdir).tar.Z | $(am__untar) ;;\
-       *.shar.gz*) \
-         GZIP=$(GZIP_ENV) gzip -dc $(distdir).shar.gz | unshar ;;\
-       *.zip*) \
-         unzip $(distdir).zip ;;\
-       esac
-       chmod -R a-w $(distdir)
-       chmod u+w $(distdir)
-       mkdir $(distdir)/_build $(distdir)/_inst
-       chmod a-w $(distdir)
-       test -d $(distdir)/_build || exit 0; \
-       dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \
-         && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \
-         && am__cwd=`pwd` \
-         && $(am__cd) $(distdir)/_build \
-         && ../configure --srcdir=.. --prefix="$$dc_install_base" \
-           $(AM_DISTCHECK_CONFIGURE_FLAGS) \
-           $(DISTCHECK_CONFIGURE_FLAGS) \
-         && $(MAKE) $(AM_MAKEFLAGS) \
-         && $(MAKE) $(AM_MAKEFLAGS) dvi \
-         && $(MAKE) $(AM_MAKEFLAGS) check \
-         && $(MAKE) $(AM_MAKEFLAGS) install \
-         && $(MAKE) $(AM_MAKEFLAGS) installcheck \
-         && $(MAKE) $(AM_MAKEFLAGS) uninstall \
-         && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \
-               distuninstallcheck \
-         && chmod -R a-w "$$dc_install_base" \
-         && ({ \
-              (cd ../.. && umask 077 && mkdir "$$dc_destdir") \
-              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \
-              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \
-              && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \
-                   distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \
-             } || { rm -rf "$$dc_destdir"; exit 1; }) \
-         && rm -rf "$$dc_destdir" \
-         && $(MAKE) $(AM_MAKEFLAGS) dist \
-         && rm -rf $(DIST_ARCHIVES) \
-         && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \
-         && cd "$$am__cwd" \
-         || exit 1
-       $(am__post_remove_distdir)
-       @(echo "$(distdir) archives ready for distribution: "; \
-         list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \
-         sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x'
-distuninstallcheck:
-       @test -n '$(distuninstallcheck_dir)' || { \
-         echo 'ERROR: trying to run $@ with an empty' \
-              '$$(distuninstallcheck_dir)' >&2; \
-         exit 1; \
-       }; \
-       $(am__cd) '$(distuninstallcheck_dir)' || { \
-         echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \
-         exit 1; \
-       }; \
-       test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \
-          || { echo "ERROR: files left after uninstall:" ; \
-               if test -n "$(DESTDIR)"; then \
-                 echo "  (check DESTDIR support)"; \
-               fi ; \
-               $(distuninstallcheck_listfiles) ; \
-               exit 1; } >&2
-distcleancheck: distclean
-       @if test '$(srcdir)' = . ; then \
-         echo "ERROR: distcleancheck can only run from a VPATH build" ; \
-         exit 1 ; \
-       fi
-       @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \
-         || { echo "ERROR: files left in build directory after distclean:" ; \
-              $(distcleancheck_listfiles) ; \
-              exit 1; } >&2
-check-am: all-am
-check: check-recursive
-all-am: Makefile config.h
-installdirs: installdirs-recursive
-installdirs-am:
-install: install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-       if test -z '$(STRIP)'; then \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-             install; \
-       else \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-       fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-clean: clean-recursive
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-recursive
-       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
-       -rm -f Makefile
-distclean-am: clean-am distclean-generic distclean-hdr distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-       -rm -f $(am__CONFIG_DISTCLEAN_FILES)
-       -rm -rf $(top_srcdir)/autom4te.cache
-       -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: $(am__recursive_targets) all install-am install-strip
-
-.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \
-       am--refresh check check-am clean clean-cscope clean-generic \
-       cscope cscopelist-am ctags ctags-am dist dist-all dist-bzip2 \
-       dist-gzip dist-lzip dist-shar dist-tarZ dist-xz dist-zip \
-       distcheck distclean distclean-generic distclean-hdr \
-       distclean-tags distcleancheck distdir distuninstallcheck dvi \
-       dvi-am html html-am info info-am install install-am \
-       install-data install-data-am install-dvi install-dvi-am \
-       install-exec install-exec-am install-html install-html-am \
-       install-info install-info-am install-man install-pdf \
-       install-pdf-am install-ps install-ps-am install-strip \
-       installcheck installcheck-am installdirs installdirs-am \
-       maintainer-clean maintainer-clean-generic mostlyclean \
-       mostlyclean-generic pdf pdf-am ps ps-am tags tags-am uninstall \
-       uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/libs/gnulib/aclocal.m4 b/src/libs/gnulib/aclocal.m4
deleted file mode 100644 (file)
index aae8734..0000000
+++ /dev/null
@@ -1,1174 +0,0 @@
-# generated automatically by aclocal 1.14 -*- Autoconf -*-
-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
-
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])])
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],,
-[m4_warning([this file was generated for autoconf 2.69.
-You have another version of autoconf.  It may work, but is not guaranteed to.
-If you have problems, you may need to regenerate the build system entirely.
-To do so, use the procedure documented by the package, typically 'autoreconf'.])])
-
-# Copyright (C) 2002-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_AUTOMAKE_VERSION(VERSION)
-# ----------------------------
-# Automake X.Y traces this macro to ensure aclocal.m4 has been
-# generated from the m4 files accompanying Automake X.Y.
-# (This private macro should not be called outside this file.)
-AC_DEFUN([AM_AUTOMAKE_VERSION],
-[am__api_version='1.14'
-dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to
-dnl require some minimum version.  Point them to the right macro.
-m4_if([$1], [1.14], [],
-      [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl
-])
-
-# _AM_AUTOCONF_VERSION(VERSION)
-# -----------------------------
-# aclocal traces this macro to find the Autoconf version.
-# This is a private macro too.  Using m4_define simplifies
-# the logic in aclocal, which can simply ignore this definition.
-m4_define([_AM_AUTOCONF_VERSION], [])
-
-# AM_SET_CURRENT_AUTOMAKE_VERSION
-# -------------------------------
-# Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced.
-# This function is AC_REQUIREd by AM_INIT_AUTOMAKE.
-AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION],
-[AM_AUTOMAKE_VERSION([1.14])dnl
-m4_ifndef([AC_AUTOCONF_VERSION],
-  [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl
-_AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))])
-
-# AM_AUX_DIR_EXPAND                                         -*- Autoconf -*-
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets
-# $ac_aux_dir to '$srcdir/foo'.  In other projects, it is set to
-# '$srcdir', '$srcdir/..', or '$srcdir/../..'.
-#
-# Of course, Automake must honor this variable whenever it calls a
-# tool from the auxiliary directory.  The problem is that $srcdir (and
-# therefore $ac_aux_dir as well) can be either absolute or relative,
-# depending on how configure is run.  This is pretty annoying, since
-# it makes $ac_aux_dir quite unusable in subdirectories: in the top
-# source directory, any form will work fine, but in subdirectories a
-# relative path needs to be adjusted first.
-#
-# $ac_aux_dir/missing
-#    fails when called from a subdirectory if $ac_aux_dir is relative
-# $top_srcdir/$ac_aux_dir/missing
-#    fails if $ac_aux_dir is absolute,
-#    fails when called from a subdirectory in a VPATH build with
-#          a relative $ac_aux_dir
-#
-# The reason of the latter failure is that $top_srcdir and $ac_aux_dir
-# are both prefixed by $srcdir.  In an in-source build this is usually
-# harmless because $srcdir is '.', but things will broke when you
-# start a VPATH build or use an absolute $srcdir.
-#
-# So we could use something similar to $top_srcdir/$ac_aux_dir/missing,
-# iff we strip the leading $srcdir from $ac_aux_dir.  That would be:
-#   am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"`
-# and then we would define $MISSING as
-#   MISSING="\${SHELL} $am_aux_dir/missing"
-# This will work as long as MISSING is not called from configure, because
-# unfortunately $(top_srcdir) has no meaning in configure.
-# However there are other variables, like CC, which are often used in
-# configure, and could therefore not use this "fixed" $ac_aux_dir.
-#
-# Another solution, used here, is to always expand $ac_aux_dir to an
-# absolute PATH.  The drawback is that using absolute paths prevent a
-# configured tree to be moved without reconfiguration.
-
-AC_DEFUN([AM_AUX_DIR_EXPAND],
-[dnl Rely on autoconf to set up CDPATH properly.
-AC_PREREQ([2.50])dnl
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-])
-
-# AM_CONDITIONAL                                            -*- Autoconf -*-
-
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_CONDITIONAL(NAME, SHELL-CONDITION)
-# -------------------------------------
-# Define a conditional.
-AC_DEFUN([AM_CONDITIONAL],
-[AC_PREREQ([2.52])dnl
- m4_if([$1], [TRUE],  [AC_FATAL([$0: invalid condition: $1])],
-       [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl
-AC_SUBST([$1_TRUE])dnl
-AC_SUBST([$1_FALSE])dnl
-_AM_SUBST_NOTMAKE([$1_TRUE])dnl
-_AM_SUBST_NOTMAKE([$1_FALSE])dnl
-m4_define([_AM_COND_VALUE_$1], [$2])dnl
-if $2; then
-  $1_TRUE=
-  $1_FALSE='#'
-else
-  $1_TRUE='#'
-  $1_FALSE=
-fi
-AC_CONFIG_COMMANDS_PRE(
-[if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then
-  AC_MSG_ERROR([[conditional "$1" was never defined.
-Usually this means the macro was only invoked conditionally.]])
-fi])])
-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-
-# There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be
-# written in clear, in which case automake, when reading aclocal.m4,
-# will think it sees a *use*, and therefore will trigger all it's
-# C support machinery.  Also note that it means that autoscan, seeing
-# CC etc. in the Makefile, will ask for an AC_PROG_CC use...
-
-
-# _AM_DEPENDENCIES(NAME)
-# ----------------------
-# See how the compiler implements dependency checking.
-# NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC".
-# We try a few techniques and use that to set a single cache variable.
-#
-# We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was
-# modified to invoke _AM_DEPENDENCIES(CC); we would have a circular
-# dependency, and given that the user is not expected to run this macro,
-# just rely on AC_PROG_CC.
-AC_DEFUN([_AM_DEPENDENCIES],
-[AC_REQUIRE([AM_SET_DEPDIR])dnl
-AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl
-AC_REQUIRE([AM_MAKE_INCLUDE])dnl
-AC_REQUIRE([AM_DEP_TRACK])dnl
-
-m4_if([$1], [CC],   [depcc="$CC"   am_compiler_list=],
-      [$1], [CXX],  [depcc="$CXX"  am_compiler_list=],
-      [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'],
-      [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'],
-      [$1], [UPC],  [depcc="$UPC"  am_compiler_list=],
-      [$1], [GCJ],  [depcc="$GCJ"  am_compiler_list='gcc3 gcc'],
-                    [depcc="$$1"   am_compiler_list=])
-
-AC_CACHE_CHECK([dependency style of $depcc],
-               [am_cv_$1_dependencies_compiler_type],
-[if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named 'D' -- because '-MD' means "put the output
-  # in D".
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_$1_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp`
-  fi
-  am__universal=false
-  m4_case([$1], [CC],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac],
-    [CXX],
-    [case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac])
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
-      # Solaris 10 /bin/sh.
-      echo '/* dummy */' > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with '-c' and '-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle '-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs.
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # After this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested.
-      if test "x$enable_dependency_tracking" = xyes; then
-       continue
-      else
-       break
-      fi
-      ;;
-    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok '-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_$1_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_$1_dependencies_compiler_type=none
-fi
-])
-AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type])
-AM_CONDITIONAL([am__fastdep$1], [
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_$1_dependencies_compiler_type" = gcc3])
-])
-
-
-# AM_SET_DEPDIR
-# -------------
-# Choose a directory name for dependency files.
-# This macro is AC_REQUIREd in _AM_DEPENDENCIES.
-AC_DEFUN([AM_SET_DEPDIR],
-[AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl
-])
-
-
-# AM_DEP_TRACK
-# ------------
-AC_DEFUN([AM_DEP_TRACK],
-[AC_ARG_ENABLE([dependency-tracking], [dnl
-AS_HELP_STRING(
-  [--enable-dependency-tracking],
-  [do not reject slow dependency extractors])
-AS_HELP_STRING(
-  [--disable-dependency-tracking],
-  [speeds up one-time build])])
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-  am__nodep='_no'
-fi
-AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno])
-AC_SUBST([AMDEPBACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl
-AC_SUBST([am__nodep])dnl
-_AM_SUBST_NOTMAKE([am__nodep])dnl
-])
-
-# Generate code to set up dependency tracking.              -*- Autoconf -*-
-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-
-# _AM_OUTPUT_DEPENDENCY_COMMANDS
-# ------------------------------
-AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS],
-[{
-  # Older Autoconf quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named 'Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`AS_DIRNAME("$mf")`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running 'make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "$am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`AS_DIRNAME(["$file"])`
-      AS_MKDIR_P([$dirpart/$fdir])
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
-])# _AM_OUTPUT_DEPENDENCY_COMMANDS
-
-
-# AM_OUTPUT_DEPENDENCY_COMMANDS
-# -----------------------------
-# This macro should only be invoked once -- use via AC_REQUIRE.
-#
-# This code is only required when automatic dependency tracking
-# is enabled.  FIXME.  This creates each '.P' file that we will
-# need in order to bootstrap the dependency handling code.
-AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS],
-[AC_CONFIG_COMMANDS([depfiles],
-     [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS],
-     [AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"])
-])
-
-# Do all the work for Automake.                             -*- Autoconf -*-
-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This macro actually does too much.  Some checks are only needed if
-# your package does certain things.  But this isn't really a big deal.
-
-dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O.
-m4_define([AC_PROG_CC],
-m4_defn([AC_PROG_CC])
-[_AM_PROG_CC_C_O
-])
-
-# AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE])
-# AM_INIT_AUTOMAKE([OPTIONS])
-# -----------------------------------------------
-# The call with PACKAGE and VERSION arguments is the old style
-# call (pre autoconf-2.50), which is being phased out.  PACKAGE
-# and VERSION should now be passed to AC_INIT and removed from
-# the call to AM_INIT_AUTOMAKE.
-# We support both call styles for the transition.  After
-# the next Automake release, Autoconf can make the AC_INIT
-# arguments mandatory, and then we can depend on a new Autoconf
-# release and drop the old call support.
-AC_DEFUN([AM_INIT_AUTOMAKE],
-[AC_PREREQ([2.65])dnl
-dnl Autoconf wants to disallow AM_ names.  We explicitly allow
-dnl the ones we care about.
-m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl
-AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl
-AC_REQUIRE([AC_PROG_INSTALL])dnl
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    AC_MSG_ERROR([source directory already configured; run "make distclean" there first])
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-AC_SUBST([CYGPATH_W])
-
-# Define the identity of the package.
-dnl Distinguish between old-style and new-style calls.
-m4_ifval([$2],
-[AC_DIAGNOSE([obsolete],
-             [$0: two- and three-arguments forms are deprecated.])
-m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl
- AC_SUBST([PACKAGE], [$1])dnl
- AC_SUBST([VERSION], [$2])],
-[_AM_SET_OPTIONS([$1])dnl
-dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT.
-m4_if(
-  m4_ifdef([AC_PACKAGE_NAME], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]),
-  [ok:ok],,
-  [m4_fatal([AC_INIT should be called with package and version arguments])])dnl
- AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl
- AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl
-
-_AM_IF_OPTION([no-define],,
-[AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package])
- AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl
-
-# Some tools Automake needs.
-AC_REQUIRE([AM_SANITY_CHECK])dnl
-AC_REQUIRE([AC_ARG_PROGRAM])dnl
-AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}])
-AM_MISSING_PROG([AUTOCONF], [autoconf])
-AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}])
-AM_MISSING_PROG([AUTOHEADER], [autoheader])
-AM_MISSING_PROG([MAKEINFO], [makeinfo])
-AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl
-AC_REQUIRE([AC_PROG_MKDIR_P])dnl
-# For better backward compatibility.  To be removed once Automake 1.9.x
-# dies out for good.  For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
-AC_SUBST([mkdir_p], ['$(MKDIR_P)'])
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-AC_REQUIRE([AC_PROG_AWK])dnl
-AC_REQUIRE([AC_PROG_MAKE_SET])dnl
-AC_REQUIRE([AM_SET_LEADING_DOT])dnl
-_AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])],
-             [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])],
-                            [_AM_PROG_TAR([v7])])])
-_AM_IF_OPTION([no-dependencies],,
-[AC_PROVIDE_IFELSE([AC_PROG_CC],
-                 [_AM_DEPENDENCIES([CC])],
-                 [m4_define([AC_PROG_CC],
-                            m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_CXX],
-                 [_AM_DEPENDENCIES([CXX])],
-                 [m4_define([AC_PROG_CXX],
-                            m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJC],
-                 [_AM_DEPENDENCIES([OBJC])],
-                 [m4_define([AC_PROG_OBJC],
-                            m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl
-AC_PROVIDE_IFELSE([AC_PROG_OBJCXX],
-                 [_AM_DEPENDENCIES([OBJCXX])],
-                 [m4_define([AC_PROG_OBJCXX],
-                            m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl
-])
-AC_REQUIRE([AM_SILENT_RULES])dnl
-dnl The testsuite driver may need to know about EXEEXT, so add the
-dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen.  This
-dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below.
-AC_CONFIG_COMMANDS_PRE(dnl
-[m4_provide_if([_AM_COMPILER_EXEEXT],
-  [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl
-
-# POSIX will say in a future version that running "rm -f" with no argument
-# is OK; and we want to be able to make that assumption in our Makefile
-# recipes.  So use an aggressive probe to check that the usage we want is
-# actually supported "in the wild" to an acceptable degree.
-# See automake bug#10828.
-# To make any issue more visible, cause the running configure to be aborted
-# by default if the 'rm' program in use doesn't match our expectations; the
-# user can still override this though.
-if rm -f && rm -fr && rm -rf; then : OK; else
-  cat >&2 <<'END'
-Oops!
-
-Your 'rm' program seems unable to run without file operands specified
-on the command line, even when the '-f' option is present.  This is contrary
-to the behaviour of most rm programs out there, and not conforming with
-the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
-
-Please tell bug-automake@gnu.org about your system, including the value
-of your $PATH and any error possibly output before this message.  This
-can help us improve future automake versions.
-
-END
-  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
-    echo 'Configuration will proceed anyway, since you have set the' >&2
-    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
-    echo >&2
-  else
-    cat >&2 <<'END'
-Aborting the configuration process, to ensure you take notice of the issue.
-
-You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
-
-If you want to complete the configuration process using your problematic
-'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
-to "yes", and re-run configure.
-
-END
-    AC_MSG_ERROR([Your 'rm' program is bad, sorry.])
-  fi
-fi])
-
-dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion.  Do not
-dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further
-dnl mangled by Autoconf and run in a shell conditional statement.
-m4_define([_AC_COMPILER_EXEEXT],
-m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])])
-
-# When config.status generates a header, we must update the stamp-h file.
-# This file resides in the same directory as the config header
-# that is generated.  The stamp files are numbered to have different names.
-
-# Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the
-# loop where config.status creates the headers, so we can generate
-# our stamp files there.
-AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK],
-[# Compute $1's index in $config_headers.
-_am_arg=$1
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count])
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_SH
-# ------------------
-# Define $install_sh.
-AC_DEFUN([AM_PROG_INSTALL_SH],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-AC_SUBST([install_sh])])
-
-# Copyright (C) 2003-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# Check whether the underlying file-system supports filenames
-# with a leading dot.  For instance MS-DOS doesn't.
-AC_DEFUN([AM_SET_LEADING_DOT],
-[rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-AC_SUBST([am__leading_dot])])
-
-# Check to see how 'make' treats includes.                 -*- Autoconf -*-
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_MAKE_INCLUDE()
-# -----------------
-# Check to see how make treats includes.
-AC_DEFUN([AM_MAKE_INCLUDE],
-[am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-       @echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-AC_MSG_CHECKING([for style of include used by $am_make])
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-AC_SUBST([am__include])
-AC_SUBST([am__quote])
-AC_MSG_RESULT([$_am_result])
-rm -f confinc confmf
-])
-
-# Fake the existence of programs that GNU maintainers use.  -*- Autoconf -*-
-
-# Copyright (C) 1997-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_MISSING_PROG(NAME, PROGRAM)
-# ------------------------------
-AC_DEFUN([AM_MISSING_PROG],
-[AC_REQUIRE([AM_MISSING_HAS_RUN])
-$1=${$1-"${am_missing_run}$2"}
-AC_SUBST($1)])
-
-# AM_MISSING_HAS_RUN
-# ------------------
-# Define MISSING if not defined so far and test if it is modern enough.
-# If it is, set am_missing_run to use it, otherwise, to nothing.
-AC_DEFUN([AM_MISSING_HAS_RUN],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([missing])dnl
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --is-lightweight"; then
-  am_missing_run="$MISSING "
-else
-  am_missing_run=
-  AC_MSG_WARN(['missing' script is too old or missing])
-fi
-])
-
-# Helper functions for option handling.                     -*- Autoconf -*-
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# _AM_MANGLE_OPTION(NAME)
-# -----------------------
-AC_DEFUN([_AM_MANGLE_OPTION],
-[[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])])
-
-# _AM_SET_OPTION(NAME)
-# --------------------
-# Set option NAME.  Presently that only means defining a flag for this option.
-AC_DEFUN([_AM_SET_OPTION],
-[m4_define(_AM_MANGLE_OPTION([$1]), [1])])
-
-# _AM_SET_OPTIONS(OPTIONS)
-# ------------------------
-# OPTIONS is a space-separated list of Automake options.
-AC_DEFUN([_AM_SET_OPTIONS],
-[m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])])
-
-# _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET])
-# -------------------------------------------
-# Execute IF-SET if OPTION is set, IF-NOT-SET otherwise.
-AC_DEFUN([_AM_IF_OPTION],
-[m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])])
-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# _AM_PROG_CC_C_O
-# ---------------
-# Like AC_PROG_CC_C_O, but changed for automake.  We rewrite AC_PROG_CC
-# to automatically call this.
-AC_DEFUN([_AM_PROG_CC_C_O],
-[AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl
-AC_REQUIRE_AUX_FILE([compile])dnl
-AC_LANG_PUSH([C])dnl
-AC_CACHE_CHECK(
-  [whether $CC understands -c and -o together],
-  [am_cv_prog_cc_c_o],
-  [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])])
-  # Make sure it works both with $CC and with simple cc.
-  # Following AC_PROG_CC_C_O, we do the test twice because some
-  # compilers refuse to overwrite an existing .o file with -o,
-  # though they will create one.
-  am_cv_prog_cc_c_o=yes
-  for am_i in 1 2; do
-    if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \
-         && test -f conftest2.$ac_objext; then
-      : OK
-    else
-      am_cv_prog_cc_c_o=no
-      break
-    fi
-  done
-  rm -f core conftest*
-  unset am_i])
-if test "$am_cv_prog_cc_c_o" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-AC_LANG_POP([C])])
-
-# For backward compatibility.
-AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])])
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_RUN_LOG(COMMAND)
-# -------------------
-# Run COMMAND, save the exit status in ac_status, and log it.
-# (This has been adapted from Autoconf's _AC_RUN_LOG macro.)
-AC_DEFUN([AM_RUN_LOG],
-[{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD
-   ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD
-   ac_status=$?
-   echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD
-   (exit $ac_status); }])
-
-# Check to make sure that the build environment is sane.    -*- Autoconf -*-
-
-# Copyright (C) 1996-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_SANITY_CHECK
-# ---------------
-AC_DEFUN([AM_SANITY_CHECK],
-[AC_MSG_CHECKING([whether build environment is sane])
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[[\\\"\#\$\&\'\`$am_lf]]*)
-    AC_MSG_ERROR([unsafe absolute working directory name]);;
-esac
-case $srcdir in
-  *[[\\\"\#\$\&\'\`$am_lf\ \   ]]*)
-    AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);;
-esac
-
-# Do 'set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   am_has_slept=no
-   for am_try in 1 2; do
-     echo "timestamp, slept: $am_has_slept" > conftest.file
-     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-     if test "$[*]" = "X"; then
-       # -L didn't work.
-       set X `ls -t "$srcdir/configure" conftest.file`
-     fi
-     if test "$[*]" != "X $srcdir/configure conftest.file" \
-       && test "$[*]" != "X conftest.file $srcdir/configure"; then
-
-       # If neither matched, then we have a broken ls.  This can happen
-       # if, for instance, CONFIG_SHELL is bash and it inherits a
-       # broken ls alias from the environment.  This has actually
-       # happened.  Such a system could not be considered "sane".
-       AC_MSG_ERROR([ls -t appears to fail.  Make sure there is not a broken
-  alias in your environment])
-     fi
-     if test "$[2]" = conftest.file || test $am_try -eq 2; then
-       break
-     fi
-     # Just in case.
-     sleep 1
-     am_has_slept=yes
-   done
-   test "$[2]" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   AC_MSG_ERROR([newly created file is older than distributed files!
-Check your system clock])
-fi
-AC_MSG_RESULT([yes])
-# If we didn't sleep, we still need to ensure time stamps of config.status and
-# generated files are strictly newer.
-am_sleep_pid=
-if grep 'slept: no' conftest.file >/dev/null 2>&1; then
-  ( sleep 1 ) &
-  am_sleep_pid=$!
-fi
-AC_CONFIG_COMMANDS_PRE(
-  [AC_MSG_CHECKING([that generated files are newer than configure])
-   if test -n "$am_sleep_pid"; then
-     # Hide warnings about reused PIDs.
-     wait $am_sleep_pid 2>/dev/null
-   fi
-   AC_MSG_RESULT([done])])
-rm -f conftest.file
-])
-
-# Copyright (C) 2009-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_SILENT_RULES([DEFAULT])
-# --------------------------
-# Enable less verbose build rules; with the default set to DEFAULT
-# ("yes" being less verbose, "no" or empty being verbose).
-AC_DEFUN([AM_SILENT_RULES],
-[AC_ARG_ENABLE([silent-rules], [dnl
-AS_HELP_STRING(
-  [--enable-silent-rules],
-  [less verbose build output (undo: "make V=1")])
-AS_HELP_STRING(
-  [--disable-silent-rules],
-  [verbose build output (undo: "make V=0")])dnl
-])
-case $enable_silent_rules in @%:@ (((
-  yes) AM_DEFAULT_VERBOSITY=0;;
-   no) AM_DEFAULT_VERBOSITY=1;;
-    *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);;
-esac
-dnl
-dnl A few 'make' implementations (e.g., NonStop OS and NextStep)
-dnl do not support nested variable expansions.
-dnl See automake bug#9928 and bug#10237.
-am_make=${MAKE-make}
-AC_CACHE_CHECK([whether $am_make supports nested variables],
-   [am_cv_make_support_nested_variables],
-   [if AS_ECHO([['TRUE=$(BAR$(V))
-BAR0=false
-BAR1=true
-V=1
-am__doit:
-       @$(TRUE)
-.PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then
-  am_cv_make_support_nested_variables=yes
-else
-  am_cv_make_support_nested_variables=no
-fi])
-if test $am_cv_make_support_nested_variables = yes; then
-  dnl Using '$V' instead of '$(V)' breaks IRIX make.
-  AM_V='$(V)'
-  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
-else
-  AM_V=$AM_DEFAULT_VERBOSITY
-  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
-fi
-AC_SUBST([AM_V])dnl
-AM_SUBST_NOTMAKE([AM_V])dnl
-AC_SUBST([AM_DEFAULT_V])dnl
-AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl
-AC_SUBST([AM_DEFAULT_VERBOSITY])dnl
-AM_BACKSLASH='\'
-AC_SUBST([AM_BACKSLASH])dnl
-_AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl
-])
-
-# Copyright (C) 2001-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# AM_PROG_INSTALL_STRIP
-# ---------------------
-# One issue with vendor 'install' (even GNU) is that you can't
-# specify the program used to strip binaries.  This is especially
-# annoying in cross-compiling environments, where the build's strip
-# is unlikely to handle the host's binaries.
-# Fortunately install-sh will honor a STRIPPROG variable, so we
-# always use install-sh in "make install-strip", and initialize
-# STRIPPROG with the value of the STRIP variable (set by the user).
-AC_DEFUN([AM_PROG_INSTALL_STRIP],
-[AC_REQUIRE([AM_PROG_INSTALL_SH])dnl
-# Installed binaries are usually stripped using 'strip' when the user
-# run "make install-strip".  However 'strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the 'STRIP' environment variable to overrule this program.
-dnl Don't test for $cross_compiling = yes, because it might be 'maybe'.
-if test "$cross_compiling" != no; then
-  AC_CHECK_TOOL([STRIP], [strip], :)
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-AC_SUBST([INSTALL_STRIP_PROGRAM])])
-
-# Copyright (C) 2006-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# _AM_SUBST_NOTMAKE(VARIABLE)
-# ---------------------------
-# Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in.
-# This macro is traced by Automake.
-AC_DEFUN([_AM_SUBST_NOTMAKE])
-
-# AM_SUBST_NOTMAKE(VARIABLE)
-# --------------------------
-# Public sister of _AM_SUBST_NOTMAKE.
-AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)])
-
-# Check how to create a tarball.                            -*- Autoconf -*-
-
-# Copyright (C) 2004-2013 Free Software Foundation, Inc.
-#
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# _AM_PROG_TAR(FORMAT)
-# --------------------
-# Check how to create a tarball in format FORMAT.
-# FORMAT should be one of 'v7', 'ustar', or 'pax'.
-#
-# Substitute a variable $(am__tar) that is a command
-# writing to stdout a FORMAT-tarball containing the directory
-# $tardir.
-#     tardir=directory && $(am__tar) > result.tar
-#
-# Substitute a variable $(am__untar) that extract such
-# a tarball read from stdin.
-#     $(am__untar) < result.tar
-#
-AC_DEFUN([_AM_PROG_TAR],
-[# Always define AMTAR for backward compatibility.  Yes, it's still used
-# in the wild :-(  We should find a proper way to deprecate it ...
-AC_SUBST([AMTAR], ['$${TAR-tar}'])
-
-# We'll loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none'
-
-m4_if([$1], [v7],
-  [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'],
-
-  [m4_case([$1],
-    [ustar],
-     [# The POSIX 1988 'ustar' format is defined with fixed-size fields.
-      # There is notably a 21 bits limit for the UID and the GID.  In fact,
-      # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343
-      # and bug#13588).
-      am_max_uid=2097151 # 2^21 - 1
-      am_max_gid=$am_max_uid
-      # The $UID and $GID variables are not portable, so we need to resort
-      # to the POSIX-mandated id(1) utility.  Errors in the 'id' calls
-      # below are definitely unexpected, so allow the users to see them
-      # (that is, avoid stderr redirection).
-      am_uid=`id -u || echo unknown`
-      am_gid=`id -g || echo unknown`
-      AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format])
-      if test $am_uid -le $am_max_uid; then
-         AC_MSG_RESULT([yes])
-      else
-         AC_MSG_RESULT([no])
-         _am_tools=none
-      fi
-      AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format])
-      if test $am_gid -le $am_max_gid; then
-         AC_MSG_RESULT([yes])
-      else
-        AC_MSG_RESULT([no])
-        _am_tools=none
-      fi],
-
-  [pax],
-    [],
-
-  [m4_fatal([Unknown tar format])])
-
-  AC_MSG_CHECKING([how to create a $1 tar archive])
-
-  # Go ahead even if we have the value already cached.  We do so because we
-  # need to set the values for the 'am__tar' and 'am__untar' variables.
-  _am_tools=${am_cv_prog_tar_$1-$_am_tools}
-
-  for _am_tool in $_am_tools; do
-    case $_am_tool in
-    gnutar)
-      for _am_tar in tar gnutar gtar; do
-        AM_RUN_LOG([$_am_tar --version]) && break
-      done
-      am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"'
-      am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"'
-      am__untar="$_am_tar -xf -"
-      ;;
-    plaintar)
-      # Must skip GNU tar: if it does not support --format= it doesn't create
-      # ustar tarball either.
-      (tar --version) >/dev/null 2>&1 && continue
-      am__tar='tar chf - "$$tardir"'
-      am__tar_='tar chf - "$tardir"'
-      am__untar='tar xf -'
-      ;;
-    pax)
-      am__tar='pax -L -x $1 -w "$$tardir"'
-      am__tar_='pax -L -x $1 -w "$tardir"'
-      am__untar='pax -r'
-      ;;
-    cpio)
-      am__tar='find "$$tardir" -print | cpio -o -H $1 -L'
-      am__tar_='find "$tardir" -print | cpio -o -H $1 -L'
-      am__untar='cpio -i -H $1 -d'
-      ;;
-    none)
-      am__tar=false
-      am__tar_=false
-      am__untar=false
-      ;;
-    esac
-
-    # If the value was cached, stop now.  We just wanted to have am__tar
-    # and am__untar set.
-    test -n "${am_cv_prog_tar_$1}" && break
-
-    # tar/untar a dummy directory, and stop if the command works.
-    rm -rf conftest.dir
-    mkdir conftest.dir
-    echo GrepMe > conftest.dir/file
-    AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar])
-    rm -rf conftest.dir
-    if test -s conftest.tar; then
-      AM_RUN_LOG([$am__untar <conftest.tar])
-      AM_RUN_LOG([cat conftest.dir/file])
-      grep GrepMe conftest.dir/file >/dev/null 2>&1 && break
-    fi
-  done
-  rm -rf conftest.dir
-
-  AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool])
-  AC_MSG_RESULT([$am_cv_prog_tar_$1])])
-
-AC_SUBST([am__tar])
-AC_SUBST([am__untar])
-]) # _AM_PROG_TAR
-
-m4_include([m4/00gnulib.m4])
-m4_include([m4/codeset.m4])
-m4_include([m4/configmake.m4])
-m4_include([m4/extensions.m4])
-m4_include([m4/extern-inline.m4])
-m4_include([m4/fcntl-o.m4])
-m4_include([m4/glibc21.m4])
-m4_include([m4/gnulib-common.m4])
-m4_include([m4/include_next.m4])
-m4_include([m4/inttypes-pri.m4])
-m4_include([m4/inttypes.m4])
-m4_include([m4/libunistring-base.m4])
-m4_include([m4/localcharset.m4])
-m4_include([m4/longlong.m4])
-m4_include([m4/multiarch.m4])
-m4_include([m4/onceonly.m4])
-m4_include([m4/stdbool.m4])
-m4_include([m4/stddef_h.m4])
-m4_include([m4/stdint.m4])
-m4_include([m4/warn-on-use.m4])
-m4_include([m4/wchar_h.m4])
-m4_include([m4/wchar_t.m4])
-m4_include([m4/wctype_h.m4])
-m4_include([m4/wcwidth.m4])
-m4_include([m4/wint_t.m4])
diff --git a/src/libs/gnulib/build-aux/compile b/src/libs/gnulib/build-aux/compile
deleted file mode 100755 (executable)
index 531136b..0000000
+++ /dev/null
@@ -1,347 +0,0 @@
-#! /bin/sh
-# Wrapper for compilers which do not understand '-c -o'.
-
-scriptversion=2012-10-14.11; # UTC
-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
-# Written by Tom Tromey <tromey@cygnus.com>.
-#
-# 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, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# This file is maintained in Automake, please report
-# bugs to <bug-automake@gnu.org> or send patches to
-# <automake-patches@gnu.org>.
-
-nl='
-'
-
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent tools from complaining about whitespace usage.
-IFS=" ""       $nl"
-
-file_conv=
-
-# func_file_conv build_file lazy
-# Convert a $build file to $host form and store it in $file
-# Currently only supports Windows hosts. If the determined conversion
-# type is listed in (the comma separated) LAZY, no conversion will
-# take place.
-func_file_conv ()
-{
-  file=$1
-  case $file in
-    / | /[!/]*) # absolute file, and not a UNC file
-      if test -z "$file_conv"; then
-       # lazily determine how to convert abs files
-       case `uname -s` in
-         MINGW*)
-           file_conv=mingw
-           ;;
-         CYGWIN*)
-           file_conv=cygwin
-           ;;
-         *)
-           file_conv=wine
-           ;;
-       esac
-      fi
-      case $file_conv/,$2, in
-       *,$file_conv,*)
-         ;;
-       mingw/*)
-         file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'`
-         ;;
-       cygwin/*)
-         file=`cygpath -m "$file" || echo "$file"`
-         ;;
-       wine/*)
-         file=`winepath -w "$file" || echo "$file"`
-         ;;
-      esac
-      ;;
-  esac
-}
-
-# func_cl_dashL linkdir
-# Make cl look for libraries in LINKDIR
-func_cl_dashL ()
-{
-  func_file_conv "$1"
-  if test -z "$lib_path"; then
-    lib_path=$file
-  else
-    lib_path="$lib_path;$file"
-  fi
-  linker_opts="$linker_opts -LIBPATH:$file"
-}
-
-# func_cl_dashl library
-# Do a library search-path lookup for cl
-func_cl_dashl ()
-{
-  lib=$1
-  found=no
-  save_IFS=$IFS
-  IFS=';'
-  for dir in $lib_path $LIB
-  do
-    IFS=$save_IFS
-    if $shared && test -f "$dir/$lib.dll.lib"; then
-      found=yes
-      lib=$dir/$lib.dll.lib
-      break
-    fi
-    if test -f "$dir/$lib.lib"; then
-      found=yes
-      lib=$dir/$lib.lib
-      break
-    fi
-    if test -f "$dir/lib$lib.a"; then
-      found=yes
-      lib=$dir/lib$lib.a
-      break
-    fi
-  done
-  IFS=$save_IFS
-
-  if test "$found" != yes; then
-    lib=$lib.lib
-  fi
-}
-
-# func_cl_wrapper cl arg...
-# Adjust compile command to suit cl
-func_cl_wrapper ()
-{
-  # Assume a capable shell
-  lib_path=
-  shared=:
-  linker_opts=
-  for arg
-  do
-    if test -n "$eat"; then
-      eat=
-    else
-      case $1 in
-       -o)
-         # configure might choose to run compile as 'compile cc -o foo foo.c'.
-         eat=1
-         case $2 in
-           *.o | *.[oO][bB][jJ])
-             func_file_conv "$2"
-             set x "$@" -Fo"$file"
-             shift
-             ;;
-           *)
-             func_file_conv "$2"
-             set x "$@" -Fe"$file"
-             shift
-             ;;
-         esac
-         ;;
-       -I)
-         eat=1
-         func_file_conv "$2" mingw
-         set x "$@" -I"$file"
-         shift
-         ;;
-       -I*)
-         func_file_conv "${1#-I}" mingw
-         set x "$@" -I"$file"
-         shift
-         ;;
-       -l)
-         eat=1
-         func_cl_dashl "$2"
-         set x "$@" "$lib"
-         shift
-         ;;
-       -l*)
-         func_cl_dashl "${1#-l}"
-         set x "$@" "$lib"
-         shift
-         ;;
-       -L)
-         eat=1
-         func_cl_dashL "$2"
-         ;;
-       -L*)
-         func_cl_dashL "${1#-L}"
-         ;;
-       -static)
-         shared=false
-         ;;
-       -Wl,*)
-         arg=${1#-Wl,}
-         save_ifs="$IFS"; IFS=','
-         for flag in $arg; do
-           IFS="$save_ifs"
-           linker_opts="$linker_opts $flag"
-         done
-         IFS="$save_ifs"
-         ;;
-       -Xlinker)
-         eat=1
-         linker_opts="$linker_opts $2"
-         ;;
-       -*)
-         set x "$@" "$1"
-         shift
-         ;;
-       *.cc | *.CC | *.cxx | *.CXX | *.[cC]++)
-         func_file_conv "$1"
-         set x "$@" -Tp"$file"
-         shift
-         ;;
-       *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO])
-         func_file_conv "$1" mingw
-         set x "$@" "$file"
-         shift
-         ;;
-       *)
-         set x "$@" "$1"
-         shift
-         ;;
-      esac
-    fi
-    shift
-  done
-  if test -n "$linker_opts"; then
-    linker_opts="-link$linker_opts"
-  fi
-  exec "$@" $linker_opts
-  exit 1
-}
-
-eat=
-
-case $1 in
-  '')
-     echo "$0: No command.  Try '$0 --help' for more information." 1>&2
-     exit 1;
-     ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: compile [--help] [--version] PROGRAM [ARGS]
-
-Wrapper for compilers which do not understand '-c -o'.
-Remove '-o dest.o' from ARGS, run PROGRAM with the remaining
-arguments, and rename the output as expected.
-
-If you are trying to build a whole package this is not the
-right script to run: please start by reading the file 'INSTALL'.
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "compile $scriptversion"
-    exit $?
-    ;;
-  cl | *[/\\]cl | cl.exe | *[/\\]cl.exe )
-    func_cl_wrapper "$@"      # Doesn't return...
-    ;;
-esac
-
-ofile=
-cfile=
-
-for arg
-do
-  if test -n "$eat"; then
-    eat=
-  else
-    case $1 in
-      -o)
-       # configure might choose to run compile as 'compile cc -o foo foo.c'.
-       # So we strip '-o arg' only if arg is an object.
-       eat=1
-       case $2 in
-         *.o | *.obj)
-           ofile=$2
-           ;;
-         *)
-           set x "$@" -o "$2"
-           shift
-           ;;
-       esac
-       ;;
-      *.c)
-       cfile=$1
-       set x "$@" "$1"
-       shift
-       ;;
-      *)
-       set x "$@" "$1"
-       shift
-       ;;
-    esac
-  fi
-  shift
-done
-
-if test -z "$ofile" || test -z "$cfile"; then
-  # If no '-o' option was seen then we might have been invoked from a
-  # pattern rule where we don't need one.  That is ok -- this is a
-  # normal compilation that the losing compiler can handle.  If no
-  # '.c' file was seen then we are probably linking.  That is also
-  # ok.
-  exec "$@"
-fi
-
-# Name of file we expect compiler to create.
-cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'`
-
-# Create the lock directory.
-# Note: use '[/\\:.-]' here to ensure that we don't use the same name
-# that we are using for the .o file.  Also, base the name on the expected
-# object file name, since that is what matters with a parallel build.
-lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d
-while true; do
-  if mkdir "$lockdir" >/dev/null 2>&1; then
-    break
-  fi
-  sleep 1
-done
-# FIXME: race condition here if user kills between mkdir and trap.
-trap "rmdir '$lockdir'; exit 1" 1 2 15
-
-# Run the compile.
-"$@"
-ret=$?
-
-if test -f "$cofile"; then
-  test "$cofile" = "$ofile" || mv "$cofile" "$ofile"
-elif test -f "${cofile}bj"; then
-  test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile"
-fi
-
-rmdir "$lockdir"
-exit $ret
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/src/libs/gnulib/build-aux/config.guess b/src/libs/gnulib/build-aux/config.guess
deleted file mode 100755 (executable)
index 1f5c50c..0000000
+++ /dev/null
@@ -1,1420 +0,0 @@
-#! /bin/sh
-# Attempt to guess a canonical system name.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-03-23'
-
-# This file 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-#
-# Originally written by Per Bothner.
-#
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-#
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION]
-
-Output the configuration name of the system \`$me' is run on.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.guess ($timestamp)
-
-Originally written by Per Bothner.
-Copyright 1992-2014 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )        # Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help" >&2
-       exit 1 ;;
-    * )
-       break ;;
-  esac
-done
-
-if test $# != 0; then
-  echo "$me: too many arguments$help" >&2
-  exit 1
-fi
-
-trap 'exit 1' 1 2 15
-
-# CC_FOR_BUILD -- compiler used by this script. Note that the use of a
-# compiler to aid in system detection is discouraged as it requires
-# temporary files to be created and, as you can see below, it is a
-# headache to deal with in a portable fashion.
-
-# Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still
-# use `HOST_CC' if defined, but it is deprecated.
-
-# Portable tmp directory creation inspired by the Autoconf team.
-
-set_cc_for_build='
-trap "exitcode=\$?; (rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null) && exit \$exitcode" 0 ;
-trap "rm -f \$tmpfiles 2>/dev/null; rmdir \$tmp 2>/dev/null; exit 1" 1 2 13 15 ;
-: ${TMPDIR=/tmp} ;
- { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } ||
- { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir $tmp) ; } ||
- { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir $tmp) && echo "Warning: creating insecure temp directory" >&2 ; } ||
- { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } ;
-dummy=$tmp/dummy ;
-tmpfiles="$dummy.c $dummy.o $dummy.rel $dummy" ;
-case $CC_FOR_BUILD,$HOST_CC,$CC in
- ,,)    echo "int x;" > $dummy.c ;
-       for c in cc gcc c89 c99 ; do
-         if ($c -c -o $dummy.o $dummy.c) >/dev/null 2>&1 ; then
-            CC_FOR_BUILD="$c"; break ;
-         fi ;
-       done ;
-       if test x"$CC_FOR_BUILD" = x ; then
-         CC_FOR_BUILD=no_compiler_found ;
-       fi
-       ;;
- ,,*)   CC_FOR_BUILD=$CC ;;
- ,*,*)  CC_FOR_BUILD=$HOST_CC ;;
-esac ; set_cc_for_build= ;'
-
-# This is needed to find uname on a Pyramid OSx when run in the BSD universe.
-# (ghazi@noc.rutgers.edu 1994-08-24)
-if (test -f /.attbin/uname) >/dev/null 2>&1 ; then
-       PATH=$PATH:/.attbin ; export PATH
-fi
-
-UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown
-UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown
-UNAME_SYSTEM=`(uname -s) 2>/dev/null`  || UNAME_SYSTEM=unknown
-UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown
-
-case "${UNAME_SYSTEM}" in
-Linux|GNU|GNU/*)
-       # If the system lacks a compiler, then just pick glibc.
-       # We could probably try harder.
-       LIBC=gnu
-
-       eval $set_cc_for_build
-       cat <<-EOF > $dummy.c
-       #include <features.h>
-       #if defined(__UCLIBC__)
-       LIBC=uclibc
-       #elif defined(__dietlibc__)
-       LIBC=dietlibc
-       #else
-       LIBC=gnu
-       #endif
-       EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'`
-       ;;
-esac
-
-# Note: order is significant - the case branches are not exclusive.
-
-case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
-    *:NetBSD:*:*)
-       # NetBSD (nbsd) targets should (where applicable) match one or
-       # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*,
-       # *-*-netbsdecoff* and *-*-netbsd*.  For targets that recently
-       # switched to ELF, *-*-netbsd* would select the old
-       # object file format.  This provides both forward
-       # compatibility and a consistent mechanism for selecting the
-       # object file format.
-       #
-       # Note: NetBSD doesn't particularly care about the vendor
-       # portion of the name.  We always set it to "unknown".
-       sysctl="sysctl -n hw.machine_arch"
-       UNAME_MACHINE_ARCH=`(/sbin/$sysctl 2>/dev/null || \
-           /usr/sbin/$sysctl 2>/dev/null || echo unknown)`
-       case "${UNAME_MACHINE_ARCH}" in
-           armeb) machine=armeb-unknown ;;
-           arm*) machine=arm-unknown ;;
-           sh3el) machine=shl-unknown ;;
-           sh3eb) machine=sh-unknown ;;
-           sh5el) machine=sh5le-unknown ;;
-           *) machine=${UNAME_MACHINE_ARCH}-unknown ;;
-       esac
-       # The Operating System including object format, if it has switched
-       # to ELF recently, or will in the future.
-       case "${UNAME_MACHINE_ARCH}" in
-           arm*|i386|m68k|ns32k|sh3*|sparc|vax)
-               eval $set_cc_for_build
-               if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \
-                       | grep -q __ELF__
-               then
-                   # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout).
-                   # Return netbsd for either.  FIX?
-                   os=netbsd
-               else
-                   os=netbsdelf
-               fi
-               ;;
-           *)
-               os=netbsd
-               ;;
-       esac
-       # The OS release
-       # Debian GNU/NetBSD machines have a different userland, and
-       # thus, need a distinct triplet. However, they do not need
-       # kernel version information, so it can be replaced with a
-       # suitable tag, in the style of linux-gnu.
-       case "${UNAME_VERSION}" in
-           Debian*)
-               release='-gnu'
-               ;;
-           *)
-               release=`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
-               ;;
-       esac
-       # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM:
-       # contains redundant information, the shorter form:
-       # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used.
-       echo "${machine}-${os}${release}"
-       exit ;;
-    *:Bitrig:*:*)
-       UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_RELEASE}
-       exit ;;
-    *:OpenBSD:*:*)
-       UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'`
-       echo ${UNAME_MACHINE_ARCH}-unknown-openbsd${UNAME_RELEASE}
-       exit ;;
-    *:ekkoBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-ekkobsd${UNAME_RELEASE}
-       exit ;;
-    *:SolidBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-solidbsd${UNAME_RELEASE}
-       exit ;;
-    macppc:MirBSD:*:*)
-       echo powerpc-unknown-mirbsd${UNAME_RELEASE}
-       exit ;;
-    *:MirBSD:*:*)
-       echo ${UNAME_MACHINE}-unknown-mirbsd${UNAME_RELEASE}
-       exit ;;
-    alpha:OSF1:*:*)
-       case $UNAME_RELEASE in
-       *4.0)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
-               ;;
-       *5.*)
-               UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'`
-               ;;
-       esac
-       # According to Compaq, /usr/sbin/psrinfo has been available on
-       # OSF/1 and Tru64 systems produced since 1995.  I hope that
-       # covers most systems running today.  This code pipes the CPU
-       # types through head -n 1, so we only detect the type of CPU 0.
-       ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^  The alpha \(.*\) processor.*$/\1/p' | head -n 1`
-       case "$ALPHA_CPU_TYPE" in
-           "EV4 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "EV4.5 (21064)")
-               UNAME_MACHINE="alpha" ;;
-           "LCA4 (21066/21068)")
-               UNAME_MACHINE="alpha" ;;
-           "EV5 (21164)")
-               UNAME_MACHINE="alphaev5" ;;
-           "EV5.6 (21164A)")
-               UNAME_MACHINE="alphaev56" ;;
-           "EV5.6 (21164PC)")
-               UNAME_MACHINE="alphapca56" ;;
-           "EV5.7 (21164PC)")
-               UNAME_MACHINE="alphapca57" ;;
-           "EV6 (21264)")
-               UNAME_MACHINE="alphaev6" ;;
-           "EV6.7 (21264A)")
-               UNAME_MACHINE="alphaev67" ;;
-           "EV6.8CB (21264C)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8AL (21264B)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.8CX (21264D)")
-               UNAME_MACHINE="alphaev68" ;;
-           "EV6.9A (21264/EV69A)")
-               UNAME_MACHINE="alphaev69" ;;
-           "EV7 (21364)")
-               UNAME_MACHINE="alphaev7" ;;
-           "EV7.9 (21364A)")
-               UNAME_MACHINE="alphaev79" ;;
-       esac
-       # A Pn.n version is a patched version.
-       # A Vn.n version is a released version.
-       # A Tn.n version is a released field test version.
-       # A Xn.n version is an unreleased experimental baselevel.
-       # 1.2 uses "1.2" for uname -r.
-       echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[PVTX]//' | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       # Reset EXIT trap before exiting to avoid spurious non-zero exit code.
-       exitcode=$?
-       trap '' 0
-       exit $exitcode ;;
-    Alpha\ *:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # Should we change UNAME_MACHINE based on the output of uname instead
-       # of the specific Alpha model?
-       echo alpha-pc-interix
-       exit ;;
-    21064:Windows_NT:50:3)
-       echo alpha-dec-winnt3.5
-       exit ;;
-    Amiga*:UNIX_System_V:4.0:*)
-       echo m68k-unknown-sysv4
-       exit ;;
-    *:[Aa]miga[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-amigaos
-       exit ;;
-    *:[Mm]orph[Oo][Ss]:*:*)
-       echo ${UNAME_MACHINE}-unknown-morphos
-       exit ;;
-    *:OS/390:*:*)
-       echo i370-ibm-openedition
-       exit ;;
-    *:z/VM:*:*)
-       echo s390-ibm-zvmoe
-       exit ;;
-    *:OS400:*:*)
-       echo powerpc-ibm-os400
-       exit ;;
-    arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
-       echo arm-acorn-riscix${UNAME_RELEASE}
-       exit ;;
-    arm*:riscos:*:*|arm*:RISCOS:*:*)
-       echo arm-unknown-riscos
-       exit ;;
-    SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*)
-       echo hppa1.1-hitachi-hiuxmpp
-       exit ;;
-    Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*)
-       # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
-       if test "`(/bin/universe) 2>/dev/null`" = att ; then
-               echo pyramid-pyramid-sysv3
-       else
-               echo pyramid-pyramid-bsd
-       fi
-       exit ;;
-    NILE*:*:*:dcosx)
-       echo pyramid-pyramid-svr4
-       exit ;;
-    DRS?6000:unix:4.0:6*)
-       echo sparc-icl-nx6
-       exit ;;
-    DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*)
-       case `/usr/bin/uname -p` in
-           sparc) echo sparc-icl-nx7; exit ;;
-       esac ;;
-    s390x:SunOS:*:*)
-       echo ${UNAME_MACHINE}-ibm-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4H:SunOS:5.*:*)
-       echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
-       echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*)
-       echo i386-pc-auroraux${UNAME_RELEASE}
-       exit ;;
-    i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*)
-       eval $set_cc_for_build
-       SUN_ARCH="i386"
-       # If there is a compiler, see if it is configured for 64-bit objects.
-       # Note that the Sun cc does not turn __LP64__ into 1 like gcc does.
-       # This test works for both compilers.
-       if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-           if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \
-               (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-               grep IS_64BIT_ARCH >/dev/null
-           then
-               SUN_ARCH="x86_64"
-           fi
-       fi
-       echo ${SUN_ARCH}-pc-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:6*:*)
-       # According to config.sub, this is the proper way to canonicalize
-       # SunOS6.  Hard to guess exactly what SunOS6 will be like, but
-       # it's likely to be more like Solaris than SunOS4.
-       echo sparc-sun-solaris3`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    sun4*:SunOS:*:*)
-       case "`/usr/bin/arch -k`" in
-           Series*|S4*)
-               UNAME_RELEASE=`uname -v`
-               ;;
-       esac
-       # Japanese Language versions have a version number like `4.1.3-JL'.
-       echo sparc-sun-sunos`echo ${UNAME_RELEASE}|sed -e 's/-/_/'`
-       exit ;;
-    sun3*:SunOS:*:*)
-       echo m68k-sun-sunos${UNAME_RELEASE}
-       exit ;;
-    sun*:*:4.2BSD:*)
-       UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
-       test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
-       case "`/bin/arch`" in
-           sun3)
-               echo m68k-sun-sunos${UNAME_RELEASE}
-               ;;
-           sun4)
-               echo sparc-sun-sunos${UNAME_RELEASE}
-               ;;
-       esac
-       exit ;;
-    aushp:SunOS:*:*)
-       echo sparc-auspex-sunos${UNAME_RELEASE}
-       exit ;;
-    # The situation for MiNT is a little confusing.  The machine name
-    # can be virtually everything (everything which is not
-    # "atarist" or "atariste" at least should have a processor
-    # > m68000).  The system name ranges from "MiNT" over "FreeMiNT"
-    # to the lowercase version "mint" (or "freemint").  Finally
-    # the system name "TOS" denotes a system which is actually not
-    # MiNT.  But MiNT is downward compatible to TOS, so this should
-    # be no problem.
-    atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-       exit ;;
-    atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-       exit ;;
-    *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*)
-       echo m68k-atari-mint${UNAME_RELEASE}
-       exit ;;
-    milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*)
-       echo m68k-milan-mint${UNAME_RELEASE}
-       exit ;;
-    hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*)
-       echo m68k-hades-mint${UNAME_RELEASE}
-       exit ;;
-    *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*)
-       echo m68k-unknown-mint${UNAME_RELEASE}
-       exit ;;
-    m68k:machten:*:*)
-       echo m68k-apple-machten${UNAME_RELEASE}
-       exit ;;
-    powerpc:machten:*:*)
-       echo powerpc-apple-machten${UNAME_RELEASE}
-       exit ;;
-    RISC*:Mach:*:*)
-       echo mips-dec-mach_bsd4.3
-       exit ;;
-    RISC*:ULTRIX:*:*)
-       echo mips-dec-ultrix${UNAME_RELEASE}
-       exit ;;
-    VAX*:ULTRIX*:*:*)
-       echo vax-dec-ultrix${UNAME_RELEASE}
-       exit ;;
-    2020:CLIX:*:* | 2430:CLIX:*:*)
-       echo clipper-intergraph-clix${UNAME_RELEASE}
-       exit ;;
-    mips:*:*:UMIPS | mips:*:*:RISCos)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-#ifdef __cplusplus
-#include <stdio.h>  /* for printf() prototype */
-       int main (int argc, char *argv[]) {
-#else
-       int main (argc, argv) int argc; char *argv[]; {
-#endif
-       #if defined (host_mips) && defined (MIPSEB)
-       #if defined (SYSTYPE_SYSV)
-         printf ("mips-mips-riscos%ssysv\n", argv[1]); exit (0);
-       #endif
-       #if defined (SYSTYPE_SVR4)
-         printf ("mips-mips-riscos%ssvr4\n", argv[1]); exit (0);
-       #endif
-       #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD)
-         printf ("mips-mips-riscos%sbsd\n", argv[1]); exit (0);
-       #endif
-       #endif
-         exit (-1);
-       }
-EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c &&
-         dummyarg=`echo "${UNAME_RELEASE}" | sed -n 's/\([0-9]*\).*/\1/p'` &&
-         SYSTEM_NAME=`$dummy $dummyarg` &&
-           { echo "$SYSTEM_NAME"; exit; }
-       echo mips-mips-riscos${UNAME_RELEASE}
-       exit ;;
-    Motorola:PowerMAX_OS:*:*)
-       echo powerpc-motorola-powermax
-       exit ;;
-    Motorola:*:4.3:PL8-*)
-       echo powerpc-harris-powermax
-       exit ;;
-    Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*)
-       echo powerpc-harris-powermax
-       exit ;;
-    Night_Hawk:Power_UNIX:*:*)
-       echo powerpc-harris-powerunix
-       exit ;;
-    m88k:CX/UX:7*:*)
-       echo m88k-harris-cxux7
-       exit ;;
-    m88k:*:4*:R4*)
-       echo m88k-motorola-sysv4
-       exit ;;
-    m88k:*:3*:R3*)
-       echo m88k-motorola-sysv3
-       exit ;;
-    AViiON:dgux:*:*)
-       # DG/UX returns AViiON for all architectures
-       UNAME_PROCESSOR=`/usr/bin/uname -p`
-       if [ $UNAME_PROCESSOR = mc88100 ] || [ $UNAME_PROCESSOR = mc88110 ]
-       then
-           if [ ${TARGET_BINARY_INTERFACE}x = m88kdguxelfx ] || \
-              [ ${TARGET_BINARY_INTERFACE}x = x ]
-           then
-               echo m88k-dg-dgux${UNAME_RELEASE}
-           else
-               echo m88k-dg-dguxbcs${UNAME_RELEASE}
-           fi
-       else
-           echo i586-dg-dgux${UNAME_RELEASE}
-       fi
-       exit ;;
-    M88*:DolphinOS:*:*)        # DolphinOS (SVR3)
-       echo m88k-dolphin-sysv3
-       exit ;;
-    M88*:*:R3*:*)
-       # Delta 88k system running SVR3
-       echo m88k-motorola-sysv3
-       exit ;;
-    XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3)
-       echo m88k-tektronix-sysv3
-       exit ;;
-    Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD)
-       echo m68k-tektronix-bsd
-       exit ;;
-    *:IRIX*:*:*)
-       echo mips-sgi-irix`echo ${UNAME_RELEASE}|sed -e 's/-/_/g'`
-       exit ;;
-    ????????:AIX?:[12].1:2)   # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX.
-       echo romp-ibm-aix     # uname -m gives an 8 hex-code CPU id
-       exit ;;               # Note that: echo "'`uname -s`'" gives 'AIX '
-    i*86:AIX:*:*)
-       echo i386-ibm-aix
-       exit ;;
-    ia64:AIX:*:*)
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
-       else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-       fi
-       echo ${UNAME_MACHINE}-ibm-aix${IBM_REV}
-       exit ;;
-    *:AIX:2:3)
-       if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
-               eval $set_cc_for_build
-               sed 's/^                //' << EOF >$dummy.c
-               #include <sys/systemcfg.h>
-
-               main()
-                       {
-                       if (!__power_pc())
-                               exit(1);
-                       puts("powerpc-ibm-aix3.2.5");
-                       exit(0);
-                       }
-EOF
-               if $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy`
-               then
-                       echo "$SYSTEM_NAME"
-               else
-                       echo rs6000-ibm-aix3.2.5
-               fi
-       elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then
-               echo rs6000-ibm-aix3.2.4
-       else
-               echo rs6000-ibm-aix3.2
-       fi
-       exit ;;
-    *:AIX:*:[4567])
-       IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'`
-       if /usr/sbin/lsattr -El ${IBM_CPU_ID} | grep ' POWER' >/dev/null 2>&1; then
-               IBM_ARCH=rs6000
-       else
-               IBM_ARCH=powerpc
-       fi
-       if [ -x /usr/bin/oslevel ] ; then
-               IBM_REV=`/usr/bin/oslevel`
-       else
-               IBM_REV=${UNAME_VERSION}.${UNAME_RELEASE}
-       fi
-       echo ${IBM_ARCH}-ibm-aix${IBM_REV}
-       exit ;;
-    *:AIX:*:*)
-       echo rs6000-ibm-aix
-       exit ;;
-    ibmrt:4.4BSD:*|romp-ibm:BSD:*)
-       echo romp-ibm-bsd4.4
-       exit ;;
-    ibmrt:*BSD:*|romp-ibm:BSD:*)            # covers RT/PC BSD and
-       echo romp-ibm-bsd${UNAME_RELEASE}   # 4.3 with uname added to
-       exit ;;                             # report: romp-ibm BSD 4.3
-    *:BOSX:*:*)
-       echo rs6000-bull-bosx
-       exit ;;
-    DPX/2?00:B.O.S.:*:*)
-       echo m68k-bull-sysv3
-       exit ;;
-    9000/[34]??:4.3bsd:1.*:*)
-       echo m68k-hp-bsd
-       exit ;;
-    hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
-       echo m68k-hp-bsd4.4
-       exit ;;
-    9000/[34678]??:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       case "${UNAME_MACHINE}" in
-           9000/31? )            HP_ARCH=m68000 ;;
-           9000/[34]?? )         HP_ARCH=m68k ;;
-           9000/[678][0-9][0-9])
-               if [ -x /usr/bin/getconf ]; then
-                   sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null`
-                   sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null`
-                   case "${sc_cpu_version}" in
-                     523) HP_ARCH="hppa1.0" ;; # CPU_PA_RISC1_0
-                     528) HP_ARCH="hppa1.1" ;; # CPU_PA_RISC1_1
-                     532)                      # CPU_PA_RISC2_0
-                       case "${sc_kernel_bits}" in
-                         32) HP_ARCH="hppa2.0n" ;;
-                         64) HP_ARCH="hppa2.0w" ;;
-                         '') HP_ARCH="hppa2.0" ;;   # HP-UX 10.20
-                       esac ;;
-                   esac
-               fi
-               if [ "${HP_ARCH}" = "" ]; then
-                   eval $set_cc_for_build
-                   sed 's/^            //' << EOF >$dummy.c
-
-               #define _HPUX_SOURCE
-               #include <stdlib.h>
-               #include <unistd.h>
-
-               int main ()
-               {
-               #if defined(_SC_KERNEL_BITS)
-                   long bits = sysconf(_SC_KERNEL_BITS);
-               #endif
-                   long cpu  = sysconf (_SC_CPU_VERSION);
-
-                   switch (cpu)
-                       {
-                       case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
-                       case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
-                       case CPU_PA_RISC2_0:
-               #if defined(_SC_KERNEL_BITS)
-                           switch (bits)
-                               {
-                               case 64: puts ("hppa2.0w"); break;
-                               case 32: puts ("hppa2.0n"); break;
-                               default: puts ("hppa2.0"); break;
-                               } break;
-               #else  /* !defined(_SC_KERNEL_BITS) */
-                           puts ("hppa2.0"); break;
-               #endif
-                       default: puts ("hppa1.0"); break;
-                       }
-                   exit (0);
-               }
-EOF
-                   (CCOPTS= $CC_FOR_BUILD -o $dummy $dummy.c 2>/dev/null) && HP_ARCH=`$dummy`
-                   test -z "$HP_ARCH" && HP_ARCH=hppa
-               fi ;;
-       esac
-       if [ ${HP_ARCH} = "hppa2.0w" ]
-       then
-           eval $set_cc_for_build
-
-           # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating
-           # 32-bit code.  hppa64-hp-hpux* has the same kernel and a compiler
-           # generating 64-bit code.  GNU and HP use different nomenclature:
-           #
-           # $ CC_FOR_BUILD=cc ./config.guess
-           # => hppa2.0w-hp-hpux11.23
-           # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess
-           # => hppa64-hp-hpux11.23
-
-           if echo __LP64__ | (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) |
-               grep -q __LP64__
-           then
-               HP_ARCH="hppa2.0w"
-           else
-               HP_ARCH="hppa64"
-           fi
-       fi
-       echo ${HP_ARCH}-hp-hpux${HPUX_REV}
-       exit ;;
-    ia64:HP-UX:*:*)
-       HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
-       echo ia64-hp-hpux${HPUX_REV}
-       exit ;;
-    3050*:HI-UX:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #include <unistd.h>
-       int
-       main ()
-       {
-         long cpu = sysconf (_SC_CPU_VERSION);
-         /* The order matters, because CPU_IS_HP_MC68K erroneously returns
-            true for CPU_PA_RISC1_0.  CPU_IS_PA_RISC returns correct
-            results, however.  */
-         if (CPU_IS_PA_RISC (cpu))
-           {
-             switch (cpu)
-               {
-                 case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break;
-                 case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break;
-                 case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break;
-                 default: puts ("hppa-hitachi-hiuxwe2"); break;
-               }
-           }
-         else if (CPU_IS_HP_MC68K (cpu))
-           puts ("m68k-hitachi-hiuxwe2");
-         else puts ("unknown-hitachi-hiuxwe2");
-         exit (0);
-       }
-EOF
-       $CC_FOR_BUILD -o $dummy $dummy.c && SYSTEM_NAME=`$dummy` &&
-               { echo "$SYSTEM_NAME"; exit; }
-       echo unknown-hitachi-hiuxwe2
-       exit ;;
-    9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:* )
-       echo hppa1.1-hp-bsd
-       exit ;;
-    9000/8??:4.3bsd:*:*)
-       echo hppa1.0-hp-bsd
-       exit ;;
-    *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*)
-       echo hppa1.0-hp-mpeix
-       exit ;;
-    hp7??:OSF1:*:* | hp8?[79]:OSF1:*:* )
-       echo hppa1.1-hp-osf
-       exit ;;
-    hp8??:OSF1:*:*)
-       echo hppa1.0-hp-osf
-       exit ;;
-    i*86:OSF1:*:*)
-       if [ -x /usr/sbin/sysversion ] ; then
-           echo ${UNAME_MACHINE}-unknown-osf1mk
-       else
-           echo ${UNAME_MACHINE}-unknown-osf1
-       fi
-       exit ;;
-    parisc*:Lites*:*:*)
-       echo hppa1.1-hp-lites
-       exit ;;
-    C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*)
-       echo c1-convex-bsd
-       exit ;;
-    C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*)
-       if getsysinfo -f scalar_acc
-       then echo c32-convex-bsd
-       else echo c2-convex-bsd
-       fi
-       exit ;;
-    C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*)
-       echo c34-convex-bsd
-       exit ;;
-    C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*)
-       echo c38-convex-bsd
-       exit ;;
-    C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*)
-       echo c4-convex-bsd
-       exit ;;
-    CRAY*Y-MP:*:*:*)
-       echo ymp-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*[A-Z]90:*:*:*)
-       echo ${UNAME_MACHINE}-cray-unicos${UNAME_RELEASE} \
-       | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \
-             -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \
-             -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*TS:*:*:*)
-       echo t90-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*T3E:*:*:*)
-       echo alphaev5-cray-unicosmk${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    CRAY*SV1:*:*:*)
-       echo sv1-cray-unicos${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    *:UNICOS/mp:*:*)
-       echo craynv-cray-unicosmp${UNAME_RELEASE} | sed -e 's/\.[^.]*$/.X/'
-       exit ;;
-    F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*)
-       FUJITSU_PROC=`uname -m | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz'`
-       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-       FUJITSU_REL=`echo ${UNAME_RELEASE} | sed -e 's/ /_/'`
-       echo "${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-       exit ;;
-    5000:UNIX_System_V:4.*:*)
-       FUJITSU_SYS=`uname -p | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/\///'`
-       FUJITSU_REL=`echo ${UNAME_RELEASE} | tr 'ABCDEFGHIJKLMNOPQRSTUVWXYZ' 'abcdefghijklmnopqrstuvwxyz' | sed -e 's/ /_/'`
-       echo "sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL}"
-       exit ;;
-    i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*)
-       echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
-       exit ;;
-    sparc*:BSD/OS:*:*)
-       echo sparc-unknown-bsdi${UNAME_RELEASE}
-       exit ;;
-    *:BSD/OS:*:*)
-       echo ${UNAME_MACHINE}-unknown-bsdi${UNAME_RELEASE}
-       exit ;;
-    *:FreeBSD:*:*)
-       UNAME_PROCESSOR=`/usr/bin/uname -p`
-       case ${UNAME_PROCESSOR} in
-           amd64)
-               echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-           *)
-               echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;;
-       esac
-       exit ;;
-    i*:CYGWIN*:*)
-       echo ${UNAME_MACHINE}-pc-cygwin
-       exit ;;
-    *:MINGW64*:*)
-       echo ${UNAME_MACHINE}-pc-mingw64
-       exit ;;
-    *:MINGW*:*)
-       echo ${UNAME_MACHINE}-pc-mingw32
-       exit ;;
-    *:MSYS*:*)
-       echo ${UNAME_MACHINE}-pc-msys
-       exit ;;
-    i*:windows32*:*)
-       # uname -m includes "-pc" on this system.
-       echo ${UNAME_MACHINE}-mingw32
-       exit ;;
-    i*:PW*:*)
-       echo ${UNAME_MACHINE}-pc-pw32
-       exit ;;
-    *:Interix*:*)
-       case ${UNAME_MACHINE} in
-           x86)
-               echo i586-pc-interix${UNAME_RELEASE}
-               exit ;;
-           authenticamd | genuineintel | EM64T)
-               echo x86_64-unknown-interix${UNAME_RELEASE}
-               exit ;;
-           IA64)
-               echo ia64-unknown-interix${UNAME_RELEASE}
-               exit ;;
-       esac ;;
-    [345]86:Windows_95:* | [345]86:Windows_98:* | [345]86:Windows_NT:*)
-       echo i${UNAME_MACHINE}-pc-mks
-       exit ;;
-    8664:Windows_NT:*)
-       echo x86_64-pc-mks
-       exit ;;
-    i*:Windows_NT*:* | Pentium*:Windows_NT*:*)
-       # How do we know it's Interix rather than the generic POSIX subsystem?
-       # It also conflicts with pre-2.0 versions of AT&T UWIN. Should we
-       # UNAME_MACHINE based on the output of uname instead of i386?
-       echo i586-pc-interix
-       exit ;;
-    i*:UWIN*:*)
-       echo ${UNAME_MACHINE}-pc-uwin
-       exit ;;
-    amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*)
-       echo x86_64-unknown-cygwin
-       exit ;;
-    p*:CYGWIN*:*)
-       echo powerpcle-unknown-cygwin
-       exit ;;
-    prep*:SunOS:5.*:*)
-       echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
-       exit ;;
-    *:GNU:*:*)
-       # the GNU system
-       echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-${LIBC}`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
-       exit ;;
-    *:GNU/*:*:*)
-       # other systems with GNU libc and userland
-       echo ${UNAME_MACHINE}-unknown-`echo ${UNAME_SYSTEM} | sed 's,^[^/]*/,,' | tr '[A-Z]' '[a-z]'``echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`-${LIBC}
-       exit ;;
-    i*86:Minix:*:*)
-       echo ${UNAME_MACHINE}-pc-minix
-       exit ;;
-    aarch64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    aarch64_be:Linux:*:*)
-       UNAME_MACHINE=aarch64_be
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    alpha:Linux:*:*)
-       case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' < /proc/cpuinfo` in
-         EV5)   UNAME_MACHINE=alphaev5 ;;
-         EV56)  UNAME_MACHINE=alphaev56 ;;
-         PCA56) UNAME_MACHINE=alphapca56 ;;
-         PCA57) UNAME_MACHINE=alphapca56 ;;
-         EV6)   UNAME_MACHINE=alphaev6 ;;
-         EV67)  UNAME_MACHINE=alphaev67 ;;
-         EV68*) UNAME_MACHINE=alphaev68 ;;
-       esac
-       objdump --private-headers /bin/sh | grep -q ld.so.1
-       if test "$?" = 0 ; then LIBC="gnulibc1" ; fi
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    arc:Linux:*:* | arceb:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    arm*:Linux:*:*)
-       eval $set_cc_for_build
-       if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \
-           | grep -q __ARM_EABI__
-       then
-           echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       else
-           if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \
-               | grep -q __ARM_PCS_VFP
-           then
-               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi
-           else
-               echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf
-           fi
-       fi
-       exit ;;
-    avr32*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    cris:Linux:*:*)
-       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-       exit ;;
-    crisv32:Linux:*:*)
-       echo ${UNAME_MACHINE}-axis-linux-${LIBC}
-       exit ;;
-    frv:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    hexagon:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    i*86:Linux:*:*)
-       echo ${UNAME_MACHINE}-pc-linux-${LIBC}
-       exit ;;
-    ia64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    m32r*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    m68*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    mips:Linux:*:* | mips64:Linux:*:*)
-       eval $set_cc_for_build
-       sed 's/^        //' << EOF >$dummy.c
-       #undef CPU
-       #undef ${UNAME_MACHINE}
-       #undef ${UNAME_MACHINE}el
-       #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL)
-       CPU=${UNAME_MACHINE}el
-       #else
-       #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB)
-       CPU=${UNAME_MACHINE}
-       #else
-       CPU=
-       #endif
-       #endif
-EOF
-       eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^CPU'`
-       test x"${CPU}" != x && { echo "${CPU}-unknown-linux-${LIBC}"; exit; }
-       ;;
-    openrisc*:Linux:*:*)
-       echo or1k-unknown-linux-${LIBC}
-       exit ;;
-    or32:Linux:*:* | or1k*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    padre:Linux:*:*)
-       echo sparc-unknown-linux-${LIBC}
-       exit ;;
-    parisc64:Linux:*:* | hppa64:Linux:*:*)
-       echo hppa64-unknown-linux-${LIBC}
-       exit ;;
-    parisc:Linux:*:* | hppa:Linux:*:*)
-       # Look for CPU level
-       case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in
-         PA7*) echo hppa1.1-unknown-linux-${LIBC} ;;
-         PA8*) echo hppa2.0-unknown-linux-${LIBC} ;;
-         *)    echo hppa-unknown-linux-${LIBC} ;;
-       esac
-       exit ;;
-    ppc64:Linux:*:*)
-       echo powerpc64-unknown-linux-${LIBC}
-       exit ;;
-    ppc:Linux:*:*)
-       echo powerpc-unknown-linux-${LIBC}
-       exit ;;
-    ppc64le:Linux:*:*)
-       echo powerpc64le-unknown-linux-${LIBC}
-       exit ;;
-    ppcle:Linux:*:*)
-       echo powerpcle-unknown-linux-${LIBC}
-       exit ;;
-    s390:Linux:*:* | s390x:Linux:*:*)
-       echo ${UNAME_MACHINE}-ibm-linux-${LIBC}
-       exit ;;
-    sh64*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    sh*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    sparc:Linux:*:* | sparc64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    tile*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    vax:Linux:*:*)
-       echo ${UNAME_MACHINE}-dec-linux-${LIBC}
-       exit ;;
-    x86_64:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    xtensa*:Linux:*:*)
-       echo ${UNAME_MACHINE}-unknown-linux-${LIBC}
-       exit ;;
-    i*86:DYNIX/ptx:4*:*)
-       # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there.
-       # earlier versions are messed up and put the nodename in both
-       # sysname and nodename.
-       echo i386-sequent-sysv4
-       exit ;;
-    i*86:UNIX_SV:4.2MP:2.*)
-       # Unixware is an offshoot of SVR4, but it has its own version
-       # number series starting with 2...
-       # I am not positive that other SVR4 systems won't match this,
-       # I just have to hope.  -- rms.
-       # Use sysv4.2uw... so that sysv4* matches it.
-       echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
-       exit ;;
-    i*86:OS/2:*:*)
-       # If we were able to find `uname', then EMX Unix compatibility
-       # is probably installed.
-       echo ${UNAME_MACHINE}-pc-os2-emx
-       exit ;;
-    i*86:XTS-300:*:STOP)
-       echo ${UNAME_MACHINE}-unknown-stop
-       exit ;;
-    i*86:atheos:*:*)
-       echo ${UNAME_MACHINE}-unknown-atheos
-       exit ;;
-    i*86:syllable:*:*)
-       echo ${UNAME_MACHINE}-pc-syllable
-       exit ;;
-    i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*)
-       echo i386-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    i*86:*DOS:*:*)
-       echo ${UNAME_MACHINE}-pc-msdosdjgpp
-       exit ;;
-    i*86:*:4.*:* | i*86:SYSTEM_V:4.*:*)
-       UNAME_REL=`echo ${UNAME_RELEASE} | sed 's/\/MP$//'`
-       if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
-               echo ${UNAME_MACHINE}-univel-sysv${UNAME_REL}
-       else
-               echo ${UNAME_MACHINE}-pc-sysv${UNAME_REL}
-       fi
-       exit ;;
-    i*86:*:5:[678]*)
-       # UnixWare 7.x, OpenUNIX and OpenServer 6.
-       case `/bin/uname -X | grep "^Machine"` in
-           *486*)           UNAME_MACHINE=i486 ;;
-           *Pentium)        UNAME_MACHINE=i586 ;;
-           *Pent*|*Celeron) UNAME_MACHINE=i686 ;;
-       esac
-       echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION}
-       exit ;;
-    i*86:*:3.2:*)
-       if test -f /usr/options/cb.name; then
-               UNAME_REL=`sed -n 's/.*Version //p' </usr/options/cb.name`
-               echo ${UNAME_MACHINE}-pc-isc$UNAME_REL
-       elif /bin/uname -X 2>/dev/null >/dev/null ; then
-               UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')`
-               (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486
-               (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \
-                       && UNAME_MACHINE=i586
-               (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \
-                       && UNAME_MACHINE=i686
-               echo ${UNAME_MACHINE}-pc-sco$UNAME_REL
-       else
-               echo ${UNAME_MACHINE}-pc-sysv32
-       fi
-       exit ;;
-    pc:*:*:*)
-       # Left here for compatibility:
-       # uname -m prints for DJGPP always 'pc', but it prints nothing about
-       # the processor, so we play safe by assuming i586.
-       # Note: whatever this is, it MUST be the same as what config.sub
-       # prints for the "djgpp" host, or else GDB configury will decide that
-       # this is a cross-build.
-       echo i586-pc-msdosdjgpp
-       exit ;;
-    Intel:Mach:3*:*)
-       echo i386-pc-mach3
-       exit ;;
-    paragon:*:*:*)
-       echo i860-intel-osf1
-       exit ;;
-    i860:*:4.*:*) # i860-SVR4
-       if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then
-         echo i860-stardent-sysv${UNAME_RELEASE} # Stardent Vistra i860-SVR4
-       else # Add other i860-SVR4 vendors below as they are discovered.
-         echo i860-unknown-sysv${UNAME_RELEASE}  # Unknown i860-SVR4
-       fi
-       exit ;;
-    mini*:CTIX:SYS*5:*)
-       # "miniframe"
-       echo m68010-convergent-sysv
-       exit ;;
-    mc68k:UNIX:SYSTEM5:3.51m)
-       echo m68k-convergent-sysv
-       exit ;;
-    M680?0:D-NIX:5.3:*)
-       echo m68k-diab-dnix
-       exit ;;
-    M68*:*:R3V[5678]*:*)
-       test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;;
-    3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0)
-       OS_REL=''
-       test -r /etc/.relid \
-       && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-         && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-         && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*)
-       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-         && { echo i486-ncr-sysv4; exit; } ;;
-    NCR*:*:4.2:* | MPRAS*:*:4.2:*)
-       OS_REL='.3'
-       test -r /etc/.relid \
-           && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid`
-       /bin/uname -p 2>/dev/null | grep 86 >/dev/null \
-           && { echo i486-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; }
-       /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \
-           && { echo i586-ncr-sysv4.3${OS_REL}; exit; } ;;
-    m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*)
-       echo m68k-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    mc68030:UNIX_System_V:4.*:*)
-       echo m68k-atari-sysv4
-       exit ;;
-    TSUNAMI:LynxOS:2.*:*)
-       echo sparc-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    rs6000:LynxOS:2.*:*)
-       echo rs6000-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*)
-       echo powerpc-unknown-lynxos${UNAME_RELEASE}
-       exit ;;
-    SM[BE]S:UNIX_SV:*:*)
-       echo mips-dde-sysv${UNAME_RELEASE}
-       exit ;;
-    RM*:ReliantUNIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
-    RM*:SINIX-*:*:*)
-       echo mips-sni-sysv4
-       exit ;;
-    *:SINIX-*:*:*)
-       if uname -p 2>/dev/null >/dev/null ; then
-               UNAME_MACHINE=`(uname -p) 2>/dev/null`
-               echo ${UNAME_MACHINE}-sni-sysv4
-       else
-               echo ns32k-sni-sysv
-       fi
-       exit ;;
-    PENTIUM:*:4.0*:*)  # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
-                       # says <Richard.M.Bartel@ccMail.Census.GOV>
-       echo i586-unisys-sysv4
-       exit ;;
-    *:UNIX_System_V:4*:FTX*)
-       # From Gerald Hewes <hewes@openmarket.com>.
-       # How about differentiating between stratus architectures? -djm
-       echo hppa1.1-stratus-sysv4
-       exit ;;
-    *:*:*:FTX*)
-       # From seanf@swdc.stratus.com.
-       echo i860-stratus-sysv4
-       exit ;;
-    i*86:VOS:*:*)
-       # From Paul.Green@stratus.com.
-       echo ${UNAME_MACHINE}-stratus-vos
-       exit ;;
-    *:VOS:*:*)
-       # From Paul.Green@stratus.com.
-       echo hppa1.1-stratus-vos
-       exit ;;
-    mc68*:A/UX:*:*)
-       echo m68k-apple-aux${UNAME_RELEASE}
-       exit ;;
-    news*:NEWS-OS:6*:*)
-       echo mips-sony-newsos6
-       exit ;;
-    R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*)
-       if [ -d /usr/nec ]; then
-               echo mips-nec-sysv${UNAME_RELEASE}
-       else
-               echo mips-unknown-sysv${UNAME_RELEASE}
-       fi
-       exit ;;
-    BeBox:BeOS:*:*)    # BeOS running on hardware made by Be, PPC only.
-       echo powerpc-be-beos
-       exit ;;
-    BeMac:BeOS:*:*)    # BeOS running on Mac or Mac clone, PPC only.
-       echo powerpc-apple-beos
-       exit ;;
-    BePC:BeOS:*:*)     # BeOS running on Intel PC compatible.
-       echo i586-pc-beos
-       exit ;;
-    BePC:Haiku:*:*)    # Haiku running on Intel PC compatible.
-       echo i586-pc-haiku
-       exit ;;
-    x86_64:Haiku:*:*)
-       echo x86_64-unknown-haiku
-       exit ;;
-    SX-4:SUPER-UX:*:*)
-       echo sx4-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-5:SUPER-UX:*:*)
-       echo sx5-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-6:SUPER-UX:*:*)
-       echo sx6-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-7:SUPER-UX:*:*)
-       echo sx7-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-8:SUPER-UX:*:*)
-       echo sx8-nec-superux${UNAME_RELEASE}
-       exit ;;
-    SX-8R:SUPER-UX:*:*)
-       echo sx8r-nec-superux${UNAME_RELEASE}
-       exit ;;
-    Power*:Rhapsody:*:*)
-       echo powerpc-apple-rhapsody${UNAME_RELEASE}
-       exit ;;
-    *:Rhapsody:*:*)
-       echo ${UNAME_MACHINE}-apple-rhapsody${UNAME_RELEASE}
-       exit ;;
-    *:Darwin:*:*)
-       UNAME_PROCESSOR=`uname -p` || UNAME_PROCESSOR=unknown
-       eval $set_cc_for_build
-       if test "$UNAME_PROCESSOR" = unknown ; then
-           UNAME_PROCESSOR=powerpc
-       fi
-       if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then
-           if [ "$CC_FOR_BUILD" != 'no_compiler_found' ]; then
-               if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \
-                   (CCOPTS= $CC_FOR_BUILD -E - 2>/dev/null) | \
-                   grep IS_64BIT_ARCH >/dev/null
-               then
-                   case $UNAME_PROCESSOR in
-                       i386) UNAME_PROCESSOR=x86_64 ;;
-                       powerpc) UNAME_PROCESSOR=powerpc64 ;;
-                   esac
-               fi
-           fi
-       elif test "$UNAME_PROCESSOR" = i386 ; then
-           # Avoid executing cc on OS X 10.9, as it ships with a stub
-           # that puts up a graphical alert prompting to install
-           # developer tools.  Any system running Mac OS X 10.7 or
-           # later (Darwin 11 and later) is required to have a 64-bit
-           # processor. This is not true of the ARM version of Darwin
-           # that Apple uses in portable devices.
-           UNAME_PROCESSOR=x86_64
-       fi
-       echo ${UNAME_PROCESSOR}-apple-darwin${UNAME_RELEASE}
-       exit ;;
-    *:procnto*:*:* | *:QNX:[0123456789]*:*)
-       UNAME_PROCESSOR=`uname -p`
-       if test "$UNAME_PROCESSOR" = "x86"; then
-               UNAME_PROCESSOR=i386
-               UNAME_MACHINE=pc
-       fi
-       echo ${UNAME_PROCESSOR}-${UNAME_MACHINE}-nto-qnx${UNAME_RELEASE}
-       exit ;;
-    *:QNX:*:4*)
-       echo i386-pc-qnx
-       exit ;;
-    NEO-?:NONSTOP_KERNEL:*:*)
-       echo neo-tandem-nsk${UNAME_RELEASE}
-       exit ;;
-    NSE-*:NONSTOP_KERNEL:*:*)
-       echo nse-tandem-nsk${UNAME_RELEASE}
-       exit ;;
-    NSR-?:NONSTOP_KERNEL:*:*)
-       echo nsr-tandem-nsk${UNAME_RELEASE}
-       exit ;;
-    *:NonStop-UX:*:*)
-       echo mips-compaq-nonstopux
-       exit ;;
-    BS2000:POSIX*:*:*)
-       echo bs2000-siemens-sysv
-       exit ;;
-    DS/*:UNIX_System_V:*:*)
-       echo ${UNAME_MACHINE}-${UNAME_SYSTEM}-${UNAME_RELEASE}
-       exit ;;
-    *:Plan9:*:*)
-       # "uname -m" is not consistent, so use $cputype instead. 386
-       # is converted to i386 for consistency with other x86
-       # operating systems.
-       if test "$cputype" = "386"; then
-           UNAME_MACHINE=i386
-       else
-           UNAME_MACHINE="$cputype"
-       fi
-       echo ${UNAME_MACHINE}-unknown-plan9
-       exit ;;
-    *:TOPS-10:*:*)
-       echo pdp10-unknown-tops10
-       exit ;;
-    *:TENEX:*:*)
-       echo pdp10-unknown-tenex
-       exit ;;
-    KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*)
-       echo pdp10-dec-tops20
-       exit ;;
-    XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*)
-       echo pdp10-xkl-tops20
-       exit ;;
-    *:TOPS-20:*:*)
-       echo pdp10-unknown-tops20
-       exit ;;
-    *:ITS:*:*)
-       echo pdp10-unknown-its
-       exit ;;
-    SEI:*:*:SEIUX)
-       echo mips-sei-seiux${UNAME_RELEASE}
-       exit ;;
-    *:DragonFly:*:*)
-       echo ${UNAME_MACHINE}-unknown-dragonfly`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'`
-       exit ;;
-    *:*VMS:*:*)
-       UNAME_MACHINE=`(uname -p) 2>/dev/null`
-       case "${UNAME_MACHINE}" in
-           A*) echo alpha-dec-vms ; exit ;;
-           I*) echo ia64-dec-vms ; exit ;;
-           V*) echo vax-dec-vms ; exit ;;
-       esac ;;
-    *:XENIX:*:SysV)
-       echo i386-pc-xenix
-       exit ;;
-    i*86:skyos:*:*)
-       echo ${UNAME_MACHINE}-pc-skyos`echo ${UNAME_RELEASE}` | sed -e 's/ .*$//'
-       exit ;;
-    i*86:rdos:*:*)
-       echo ${UNAME_MACHINE}-pc-rdos
-       exit ;;
-    i*86:AROS:*:*)
-       echo ${UNAME_MACHINE}-pc-aros
-       exit ;;
-    x86_64:VMkernel:*:*)
-       echo ${UNAME_MACHINE}-unknown-esx
-       exit ;;
-esac
-
-cat >&2 <<EOF
-$0: unable to guess system type
-
-This script, last modified $timestamp, has failed to recognize
-the operating system you are using. It is advised that you
-download the most up to date version of the config scripts from
-
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.guess;hb=HEAD
-and
-  http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-If the version you run ($0) is already up to date, please
-send the following data and any information you think might be
-pertinent to <config-patches@gnu.org> in order to provide the needed
-information to handle your system.
-
-config.guess timestamp = $timestamp
-
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null`
-
-hostinfo               = `(hostinfo) 2>/dev/null`
-/bin/universe          = `(/bin/universe) 2>/dev/null`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null`
-/bin/arch              = `(/bin/arch) 2>/dev/null`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null`
-
-UNAME_MACHINE = ${UNAME_MACHINE}
-UNAME_RELEASE = ${UNAME_RELEASE}
-UNAME_SYSTEM  = ${UNAME_SYSTEM}
-UNAME_VERSION = ${UNAME_VERSION}
-EOF
-
-exit 1
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/src/libs/gnulib/build-aux/config.sub b/src/libs/gnulib/build-aux/config.sub
deleted file mode 100755 (executable)
index d4c8338..0000000
+++ /dev/null
@@ -1,1805 +0,0 @@
-#! /bin/sh
-# Configuration validation subroutine script.
-#   Copyright 1992-2014 Free Software Foundation, Inc.
-
-timestamp='2014-09-26'
-
-# This file 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 3 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, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that
-# program.  This Exception is an additional permission under section 7
-# of the GNU General Public License, version 3 ("GPLv3").
-
-
-# Please send patches with a ChangeLog entry to config-patches@gnu.org.
-#
-# Configuration subroutine to validate and canonicalize a configuration type.
-# Supply the specified configuration type as an argument.
-# If it is invalid, we print an error message on stderr and exit with code 1.
-# Otherwise, we print the canonical config type on stdout and succeed.
-
-# You can get the latest version of this script from:
-# http://git.savannah.gnu.org/gitweb/?p=config.git;a=blob_plain;f=config.sub;hb=HEAD
-
-# This file is supposed to be the same for all GNU packages
-# and recognize all the CPU types, system types and aliases
-# that are meaningful with *any* GNU software.
-# Each package is responsible for reporting which valid configurations
-# it does not support.  The user should be able to distinguish
-# a failure to support a valid configuration from a meaningless
-# configuration.
-
-# The goal of this file is to map all the various variations of a given
-# machine specification into a single specification in the form:
-#      CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or in some cases, the newer four-part form:
-#      CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-# It is wrong to echo any other type of specification.
-
-me=`echo "$0" | sed -e 's,.*/,,'`
-
-usage="\
-Usage: $0 [OPTION] CPU-MFR-OPSYS
-       $0 [OPTION] ALIAS
-
-Canonicalize a configuration name.
-
-Operation modes:
-  -h, --help         print this help, then exit
-  -t, --time-stamp   print date of last modification, then exit
-  -v, --version      print version number, then exit
-
-Report bugs and patches to <config-patches@gnu.org>."
-
-version="\
-GNU config.sub ($timestamp)
-
-Copyright 1992-2014 Free Software Foundation, Inc.
-
-This is free software; see the source for copying conditions.  There is NO
-warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE."
-
-help="
-Try \`$me --help' for more information."
-
-# Parse command line
-while test $# -gt 0 ; do
-  case $1 in
-    --time-stamp | --time* | -t )
-       echo "$timestamp" ; exit ;;
-    --version | -v )
-       echo "$version" ; exit ;;
-    --help | --h* | -h )
-       echo "$usage"; exit ;;
-    -- )     # Stop option processing
-       shift; break ;;
-    - )        # Use stdin as input.
-       break ;;
-    -* )
-       echo "$me: invalid option $1$help"
-       exit 1 ;;
-
-    *local*)
-       # First pass through any local machine types.
-       echo $1
-       exit ;;
-
-    * )
-       break ;;
-  esac
-done
-
-case $# in
- 0) echo "$me: missing argument$help" >&2
-    exit 1;;
- 1) ;;
- *) echo "$me: too many arguments$help" >&2
-    exit 1;;
-esac
-
-# Separate what the user gave into CPU-COMPANY and OS or KERNEL-OS (if any).
-# Here we must recognize all the valid KERNEL-OS combinations.
-maybe_os=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\2/'`
-case $maybe_os in
-  nto-qnx* | linux-gnu* | linux-android* | linux-dietlibc | linux-newlib* | \
-  linux-musl* | linux-uclibc* | uclinux-uclibc* | uclinux-gnu* | kfreebsd*-gnu* | \
-  knetbsd*-gnu* | netbsd*-gnu* | \
-  kopensolaris*-gnu* | \
-  storm-chaos* | os2-emx* | rtmk-nova*)
-    os=-$maybe_os
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`
-    ;;
-  android-linux)
-    os=-linux-android
-    basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown
-    ;;
-  *)
-    basic_machine=`echo $1 | sed 's/-[^-]*$//'`
-    if [ $basic_machine != $1 ]
-    then os=`echo $1 | sed 's/.*-/-/'`
-    else os=; fi
-    ;;
-esac
-
-### Let's recognize common machines as not being operating systems so
-### that things like config.sub decstation-3100 work.  We also
-### recognize some manufacturers as not being operating systems, so we
-### can provide default operating systems below.
-case $os in
-       -sun*os*)
-               # Prevent following clause from handling this invalid input.
-               ;;
-       -dec* | -mips* | -sequent* | -encore* | -pc532* | -sgi* | -sony* | \
-       -att* | -7300* | -3300* | -delta* | -motorola* | -sun[234]* | \
-       -unicom* | -ibm* | -next | -hp | -isi* | -apollo | -altos* | \
-       -convergent* | -ncr* | -news | -32* | -3600* | -3100* | -hitachi* |\
-       -c[123]* | -convex* | -sun | -crds | -omron* | -dg | -ultra | -tti* | \
-       -harris | -dolphin | -highlevel | -gould | -cbm | -ns | -masscomp | \
-       -apple | -axis | -knuth | -cray | -microblaze*)
-               os=
-               basic_machine=$1
-               ;;
-       -bluegene*)
-               os=-cnk
-               ;;
-       -sim | -cisco | -oki | -wec | -winbond)
-               os=
-               basic_machine=$1
-               ;;
-       -scout)
-               ;;
-       -wrs)
-               os=-vxworks
-               basic_machine=$1
-               ;;
-       -chorusos*)
-               os=-chorusos
-               basic_machine=$1
-               ;;
-       -chorusrdb)
-               os=-chorusrdb
-               basic_machine=$1
-               ;;
-       -hiux*)
-               os=-hiuxwe2
-               ;;
-       -sco6)
-               os=-sco5v6
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5)
-               os=-sco3.2v5
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco4)
-               os=-sco3.2v4
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2.[4-9]*)
-               os=`echo $os | sed -e 's/sco3.2./sco3.2v/'`
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco3.2v[4-9]*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco5v6*)
-               # Don't forget version if it is 3.2v4 or newer.
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -sco*)
-               os=-sco3.2v2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -udk*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -isc)
-               os=-isc2.2
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -clix*)
-               basic_machine=clipper-intergraph
-               ;;
-       -isc*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-pc/'`
-               ;;
-       -lynx*178)
-               os=-lynxos178
-               ;;
-       -lynx*5)
-               os=-lynxos5
-               ;;
-       -lynx*)
-               os=-lynxos
-               ;;
-       -ptx*)
-               basic_machine=`echo $1 | sed -e 's/86-.*/86-sequent/'`
-               ;;
-       -windowsnt*)
-               os=`echo $os | sed -e 's/windowsnt/winnt/'`
-               ;;
-       -psos*)
-               os=-psos
-               ;;
-       -mint | -mint[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-esac
-
-# Decode aliases for certain CPU-COMPANY combinations.
-case $basic_machine in
-       # Recognize the basic CPU types without company name.
-       # Some are omitted here because they have special meanings below.
-       1750a | 580 \
-       | a29k \
-       | aarch64 | aarch64_be \
-       | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \
-       | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \
-       | am33_2.0 \
-       | arc | arceb \
-       | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \
-       | avr | avr32 \
-       | be32 | be64 \
-       | bfin \
-       | c4x | c8051 | clipper \
-       | d10v | d30v | dlx | dsp16xx \
-       | epiphany \
-       | fido | fr30 | frv \
-       | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \
-       | hexagon \
-       | i370 | i860 | i960 | ia64 \
-       | ip2k | iq2000 \
-       | k1om \
-       | le32 | le64 \
-       | lm32 \
-       | m32c | m32r | m32rle | m68000 | m68k | m88k \
-       | maxq | mb | microblaze | microblazeel | mcore | mep | metag \
-       | mips | mipsbe | mipseb | mipsel | mipsle \
-       | mips16 \
-       | mips64 | mips64el \
-       | mips64octeon | mips64octeonel \
-       | mips64orion | mips64orionel \
-       | mips64r5900 | mips64r5900el \
-       | mips64vr | mips64vrel \
-       | mips64vr4100 | mips64vr4100el \
-       | mips64vr4300 | mips64vr4300el \
-       | mips64vr5000 | mips64vr5000el \
-       | mips64vr5900 | mips64vr5900el \
-       | mipsisa32 | mipsisa32el \
-       | mipsisa32r2 | mipsisa32r2el \
-       | mipsisa32r6 | mipsisa32r6el \
-       | mipsisa64 | mipsisa64el \
-       | mipsisa64r2 | mipsisa64r2el \
-       | mipsisa64r6 | mipsisa64r6el \
-       | mipsisa64sb1 | mipsisa64sb1el \
-       | mipsisa64sr71k | mipsisa64sr71kel \
-       | mipsr5900 | mipsr5900el \
-       | mipstx39 | mipstx39el \
-       | mn10200 | mn10300 \
-       | moxie \
-       | mt \
-       | msp430 \
-       | nds32 | nds32le | nds32be \
-       | nios | nios2 | nios2eb | nios2el \
-       | ns16k | ns32k \
-       | open8 | or1k | or1knd | or32 \
-       | pdp10 | pdp11 | pj | pjl \
-       | powerpc | powerpc64 | powerpc64le | powerpcle \
-       | pyramid \
-       | riscv32 | riscv64 \
-       | rl78 | rx \
-       | score \
-       | sh | sh[1234] | sh[24]a | sh[24]aeb | sh[23]e | sh[34]eb | sheb | shbe | shle | sh[1234]le | sh3ele \
-       | sh64 | sh64le \
-       | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet | sparclite \
-       | sparcv8 | sparcv9 | sparcv9b | sparcv9v \
-       | spu \
-       | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \
-       | ubicom32 \
-       | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \
-       | we32k \
-       | x86 | xc16x | xstormy16 | xtensa \
-       | z8k | z80)
-               basic_machine=$basic_machine-unknown
-               ;;
-       c54x)
-               basic_machine=tic54x-unknown
-               ;;
-       c55x)
-               basic_machine=tic55x-unknown
-               ;;
-       c6x)
-               basic_machine=tic6x-unknown
-               ;;
-       leon|leon[3-9])
-               basic_machine=sparc-$basic_machine
-               ;;
-       m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip)
-               basic_machine=$basic_machine-unknown
-               os=-none
-               ;;
-       m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k)
-               ;;
-       ms1)
-               basic_machine=mt-unknown
-               ;;
-
-       strongarm | thumb | xscale)
-               basic_machine=arm-unknown
-               ;;
-       xgate)
-               basic_machine=$basic_machine-unknown
-               os=-none
-               ;;
-       xscaleeb)
-               basic_machine=armeb-unknown
-               ;;
-
-       xscaleel)
-               basic_machine=armel-unknown
-               ;;
-
-       # We use `pc' rather than `unknown'
-       # because (1) that's what they normally are, and
-       # (2) the word "unknown" tends to confuse beginning users.
-       i*86 | x86_64)
-         basic_machine=$basic_machine-pc
-         ;;
-       # Object if more than one company name word.
-       *-*-*)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-       # Recognize the basic CPU types with company name.
-       580-* \
-       | a29k-* \
-       | aarch64-* | aarch64_be-* \
-       | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \
-       | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \
-       | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \
-       | arm-*  | armbe-* | armle-* | armeb-* | armv*-* \
-       | avr-* | avr32-* \
-       | be32-* | be64-* \
-       | bfin-* | bs2000-* \
-       | c[123]* | c30-* | [cjt]90-* | c4x-* \
-       | c8051-* | clipper-* | craynv-* | cydra-* \
-       | d10v-* | d30v-* | dlx-* \
-       | elxsi-* \
-       | f30[01]-* | f700-* | fido-* | fr30-* | frv-* | fx80-* \
-       | h8300-* | h8500-* \
-       | hppa-* | hppa1.[01]-* | hppa2.0-* | hppa2.0[nw]-* | hppa64-* \
-       | hexagon-* \
-       | i*86-* | i860-* | i960-* | ia64-* \
-       | ip2k-* | iq2000-* \
-       | k1om-* \
-       | le32-* | le64-* \
-       | lm32-* \
-       | m32c-* | m32r-* | m32rle-* \
-       | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \
-       | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \
-       | microblaze-* | microblazeel-* \
-       | mips-* | mipsbe-* | mipseb-* | mipsel-* | mipsle-* \
-       | mips16-* \
-       | mips64-* | mips64el-* \
-       | mips64octeon-* | mips64octeonel-* \
-       | mips64orion-* | mips64orionel-* \
-       | mips64r5900-* | mips64r5900el-* \
-       | mips64vr-* | mips64vrel-* \
-       | mips64vr4100-* | mips64vr4100el-* \
-       | mips64vr4300-* | mips64vr4300el-* \
-       | mips64vr5000-* | mips64vr5000el-* \
-       | mips64vr5900-* | mips64vr5900el-* \
-       | mipsisa32-* | mipsisa32el-* \
-       | mipsisa32r2-* | mipsisa32r2el-* \
-       | mipsisa32r6-* | mipsisa32r6el-* \
-       | mipsisa64-* | mipsisa64el-* \
-       | mipsisa64r2-* | mipsisa64r2el-* \
-       | mipsisa64r6-* | mipsisa64r6el-* \
-       | mipsisa64sb1-* | mipsisa64sb1el-* \
-       | mipsisa64sr71k-* | mipsisa64sr71kel-* \
-       | mipsr5900-* | mipsr5900el-* \
-       | mipstx39-* | mipstx39el-* \
-       | mmix-* \
-       | mt-* \
-       | msp430-* \
-       | nds32-* | nds32le-* | nds32be-* \
-       | nios-* | nios2-* | nios2eb-* | nios2el-* \
-       | none-* | np1-* | ns16k-* | ns32k-* \
-       | open8-* \
-       | or1k*-* \
-       | orion-* \
-       | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \
-       | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \
-       | pyramid-* \
-       | rl78-* | romp-* | rs6000-* | rx-* \
-       | sh-* | sh[1234]-* | sh[24]a-* | sh[24]aeb-* | sh[23]e-* | sh[34]eb-* | sheb-* | shbe-* \
-       | shle-* | sh[1234]le-* | sh3ele-* | sh64-* | sh64le-* \
-       | sparc-* | sparc64-* | sparc64b-* | sparc64v-* | sparc86x-* | sparclet-* \
-       | sparclite-* \
-       | sparcv8-* | sparcv9-* | sparcv9b-* | sparcv9v-* | sv1-* | sx?-* \
-       | tahoe-* \
-       | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \
-       | tile*-* \
-       | tron-* \
-       | ubicom32-* \
-       | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \
-       | vax-* \
-       | we32k-* \
-       | x86-* | x86_64-* | xc16x-* | xps100-* \
-       | xstormy16-* | xtensa*-* \
-       | ymp-* \
-       | z8k-* | z80-*)
-               ;;
-       # Recognize the basic CPU types without company name, with glob match.
-       xtensa*)
-               basic_machine=$basic_machine-unknown
-               ;;
-       # Recognize the various machine names and aliases which stand
-       # for a CPU type and a company and sometimes even an OS.
-       386bsd)
-               basic_machine=i386-unknown
-               os=-bsd
-               ;;
-       3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc)
-               basic_machine=m68000-att
-               ;;
-       3b*)
-               basic_machine=we32k-att
-               ;;
-       a29khif)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       abacus)
-               basic_machine=abacus-unknown
-               ;;
-       adobe68k)
-               basic_machine=m68010-adobe
-               os=-scout
-               ;;
-       alliant | fx80)
-               basic_machine=fx80-alliant
-               ;;
-       altos | altos3068)
-               basic_machine=m68k-altos
-               ;;
-       am29k)
-               basic_machine=a29k-none
-               os=-bsd
-               ;;
-       amd64)
-               basic_machine=x86_64-pc
-               ;;
-       amd64-*)
-               basic_machine=x86_64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       amdahl)
-               basic_machine=580-amdahl
-               os=-sysv
-               ;;
-       amiga | amiga-*)
-               basic_machine=m68k-unknown
-               ;;
-       amigaos | amigados)
-               basic_machine=m68k-unknown
-               os=-amigaos
-               ;;
-       amigaunix | amix)
-               basic_machine=m68k-unknown
-               os=-sysv4
-               ;;
-       apollo68)
-               basic_machine=m68k-apollo
-               os=-sysv
-               ;;
-       apollo68bsd)
-               basic_machine=m68k-apollo
-               os=-bsd
-               ;;
-       aros)
-               basic_machine=i386-pc
-               os=-aros
-               ;;
-       aux)
-               basic_machine=m68k-apple
-               os=-aux
-               ;;
-       balance)
-               basic_machine=ns32k-sequent
-               os=-dynix
-               ;;
-       blackfin)
-               basic_machine=bfin-unknown
-               os=-linux
-               ;;
-       blackfin-*)
-               basic_machine=bfin-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       bluegene*)
-               basic_machine=powerpc-ibm
-               os=-cnk
-               ;;
-       c54x-*)
-               basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c55x-*)
-               basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c6x-*)
-               basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       c90)
-               basic_machine=c90-cray
-               os=-unicos
-               ;;
-       cegcc)
-               basic_machine=arm-unknown
-               os=-cegcc
-               ;;
-       convex-c1)
-               basic_machine=c1-convex
-               os=-bsd
-               ;;
-       convex-c2)
-               basic_machine=c2-convex
-               os=-bsd
-               ;;
-       convex-c32)
-               basic_machine=c32-convex
-               os=-bsd
-               ;;
-       convex-c34)
-               basic_machine=c34-convex
-               os=-bsd
-               ;;
-       convex-c38)
-               basic_machine=c38-convex
-               os=-bsd
-               ;;
-       cray | j90)
-               basic_machine=j90-cray
-               os=-unicos
-               ;;
-       craynv)
-               basic_machine=craynv-cray
-               os=-unicosmp
-               ;;
-       cr16 | cr16-*)
-               basic_machine=cr16-unknown
-               os=-elf
-               ;;
-       crds | unos)
-               basic_machine=m68k-crds
-               ;;
-       crisv32 | crisv32-* | etraxfs*)
-               basic_machine=crisv32-axis
-               ;;
-       cris | cris-* | etrax*)
-               basic_machine=cris-axis
-               ;;
-       crx)
-               basic_machine=crx-unknown
-               os=-elf
-               ;;
-       da30 | da30-*)
-               basic_machine=m68k-da30
-               ;;
-       decstation | decstation-3100 | pmax | pmax-* | pmin | dec3100 | decstatn)
-               basic_machine=mips-dec
-               ;;
-       decsystem10* | dec10*)
-               basic_machine=pdp10-dec
-               os=-tops10
-               ;;
-       decsystem20* | dec20*)
-               basic_machine=pdp10-dec
-               os=-tops20
-               ;;
-       delta | 3300 | motorola-3300 | motorola-delta \
-             | 3300-motorola | delta-motorola)
-               basic_machine=m68k-motorola
-               ;;
-       delta88)
-               basic_machine=m88k-motorola
-               os=-sysv3
-               ;;
-       dicos)
-               basic_machine=i686-pc
-               os=-dicos
-               ;;
-       djgpp)
-               basic_machine=i586-pc
-               os=-msdosdjgpp
-               ;;
-       dpx20 | dpx20-*)
-               basic_machine=rs6000-bull
-               os=-bosx
-               ;;
-       dpx2* | dpx2*-bull)
-               basic_machine=m68k-bull
-               os=-sysv3
-               ;;
-       ebmon29k)
-               basic_machine=a29k-amd
-               os=-ebmon
-               ;;
-       elxsi)
-               basic_machine=elxsi-elxsi
-               os=-bsd
-               ;;
-       encore | umax | mmax)
-               basic_machine=ns32k-encore
-               ;;
-       es1800 | OSE68k | ose68k | ose | OSE)
-               basic_machine=m68k-ericsson
-               os=-ose
-               ;;
-       fx2800)
-               basic_machine=i860-alliant
-               ;;
-       genix)
-               basic_machine=ns32k-ns
-               ;;
-       gmicro)
-               basic_machine=tron-gmicro
-               os=-sysv
-               ;;
-       go32)
-               basic_machine=i386-pc
-               os=-go32
-               ;;
-       h3050r* | hiux*)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       h8300hms)
-               basic_machine=h8300-hitachi
-               os=-hms
-               ;;
-       h8300xray)
-               basic_machine=h8300-hitachi
-               os=-xray
-               ;;
-       h8500hms)
-               basic_machine=h8500-hitachi
-               os=-hms
-               ;;
-       harris)
-               basic_machine=m88k-harris
-               os=-sysv3
-               ;;
-       hp300-*)
-               basic_machine=m68k-hp
-               ;;
-       hp300bsd)
-               basic_machine=m68k-hp
-               os=-bsd
-               ;;
-       hp300hpux)
-               basic_machine=m68k-hp
-               os=-hpux
-               ;;
-       hp3k9[0-9][0-9] | hp9[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hp9k2[0-9][0-9] | hp9k31[0-9])
-               basic_machine=m68000-hp
-               ;;
-       hp9k3[2-9][0-9])
-               basic_machine=m68k-hp
-               ;;
-       hp9k6[0-9][0-9] | hp6[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hp9k7[0-79][0-9] | hp7[0-79][0-9])
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k78[0-9] | hp78[0-9])
-               # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893)
-               # FIXME: really hppa2.0-hp
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[0-9][13679] | hp8[0-9][13679])
-               basic_machine=hppa1.1-hp
-               ;;
-       hp9k8[0-9][0-9] | hp8[0-9][0-9])
-               basic_machine=hppa1.0-hp
-               ;;
-       hppa-next)
-               os=-nextstep3
-               ;;
-       hppaosf)
-               basic_machine=hppa1.1-hp
-               os=-osf
-               ;;
-       hppro)
-               basic_machine=hppa1.1-hp
-               os=-proelf
-               ;;
-       i370-ibm* | ibm*)
-               basic_machine=i370-ibm
-               ;;
-       i*86v32)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv32
-               ;;
-       i*86v4*)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv4
-               ;;
-       i*86v)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-sysv
-               ;;
-       i*86sol2)
-               basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
-               os=-solaris2
-               ;;
-       i386mach)
-               basic_machine=i386-mach
-               os=-mach
-               ;;
-       i386-vsta | vsta)
-               basic_machine=i386-unknown
-               os=-vsta
-               ;;
-       iris | iris4d)
-               basic_machine=mips-sgi
-               case $os in
-                   -irix*)
-                       ;;
-                   *)
-                       os=-irix4
-                       ;;
-               esac
-               ;;
-       isi68 | isi)
-               basic_machine=m68k-isi
-               os=-sysv
-               ;;
-       leon-*|leon[3-9]-*)
-               basic_machine=sparc-`echo $basic_machine | sed 's/-.*//'`
-               ;;
-       m68knommu)
-               basic_machine=m68k-unknown
-               os=-linux
-               ;;
-       m68knommu-*)
-               basic_machine=m68k-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       m88k-omron*)
-               basic_machine=m88k-omron
-               ;;
-       magnum | m3230)
-               basic_machine=mips-mips
-               os=-sysv
-               ;;
-       merlin)
-               basic_machine=ns32k-utek
-               os=-sysv
-               ;;
-       microblaze*)
-               basic_machine=microblaze-xilinx
-               ;;
-       mingw64)
-               basic_machine=x86_64-pc
-               os=-mingw64
-               ;;
-       mingw32)
-               basic_machine=i686-pc
-               os=-mingw32
-               ;;
-       mingw32ce)
-               basic_machine=arm-unknown
-               os=-mingw32ce
-               ;;
-       miniframe)
-               basic_machine=m68000-convergent
-               ;;
-       *mint | -mint[0-9]* | *MiNT | *MiNT[0-9]*)
-               basic_machine=m68k-atari
-               os=-mint
-               ;;
-       mips3*-*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
-               ;;
-       mips3*)
-               basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`-unknown
-               ;;
-       monitor)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       morphos)
-               basic_machine=powerpc-unknown
-               os=-morphos
-               ;;
-       moxiebox)
-               basic_machine=moxie-unknown
-               os=-moxiebox
-               ;;
-       msdos)
-               basic_machine=i386-pc
-               os=-msdos
-               ;;
-       ms1-*)
-               basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'`
-               ;;
-       msys)
-               basic_machine=i686-pc
-               os=-msys
-               ;;
-       mvs)
-               basic_machine=i370-ibm
-               os=-mvs
-               ;;
-       nacl)
-               basic_machine=le32-unknown
-               os=-nacl
-               ;;
-       ncr3000)
-               basic_machine=i486-ncr
-               os=-sysv4
-               ;;
-       netbsd386)
-               basic_machine=i386-unknown
-               os=-netbsd
-               ;;
-       netwinder)
-               basic_machine=armv4l-rebel
-               os=-linux
-               ;;
-       news | news700 | news800 | news900)
-               basic_machine=m68k-sony
-               os=-newsos
-               ;;
-       news1000)
-               basic_machine=m68030-sony
-               os=-newsos
-               ;;
-       news-3600 | risc-news)
-               basic_machine=mips-sony
-               os=-newsos
-               ;;
-       necv70)
-               basic_machine=v70-nec
-               os=-sysv
-               ;;
-       next | m*-next )
-               basic_machine=m68k-next
-               case $os in
-                   -nextstep* )
-                       ;;
-                   -ns2*)
-                     os=-nextstep2
-                       ;;
-                   *)
-                     os=-nextstep3
-                       ;;
-               esac
-               ;;
-       nh3000)
-               basic_machine=m68k-harris
-               os=-cxux
-               ;;
-       nh[45]000)
-               basic_machine=m88k-harris
-               os=-cxux
-               ;;
-       nindy960)
-               basic_machine=i960-intel
-               os=-nindy
-               ;;
-       mon960)
-               basic_machine=i960-intel
-               os=-mon960
-               ;;
-       nonstopux)
-               basic_machine=mips-compaq
-               os=-nonstopux
-               ;;
-       np1)
-               basic_machine=np1-gould
-               ;;
-       neo-tandem)
-               basic_machine=neo-tandem
-               ;;
-       nse-tandem)
-               basic_machine=nse-tandem
-               ;;
-       nsr-tandem)
-               basic_machine=nsr-tandem
-               ;;
-       op50n-* | op60c-*)
-               basic_machine=hppa1.1-oki
-               os=-proelf
-               ;;
-       openrisc | openrisc-*)
-               basic_machine=or32-unknown
-               ;;
-       os400)
-               basic_machine=powerpc-ibm
-               os=-os400
-               ;;
-       OSE68000 | ose68000)
-               basic_machine=m68000-ericsson
-               os=-ose
-               ;;
-       os68k)
-               basic_machine=m68k-none
-               os=-os68k
-               ;;
-       pa-hitachi)
-               basic_machine=hppa1.1-hitachi
-               os=-hiuxwe2
-               ;;
-       paragon)
-               basic_machine=i860-intel
-               os=-osf
-               ;;
-       parisc)
-               basic_machine=hppa-unknown
-               os=-linux
-               ;;
-       parisc-*)
-               basic_machine=hppa-`echo $basic_machine | sed 's/^[^-]*-//'`
-               os=-linux
-               ;;
-       pbd)
-               basic_machine=sparc-tti
-               ;;
-       pbb)
-               basic_machine=m68k-tti
-               ;;
-       pc532 | pc532-*)
-               basic_machine=ns32k-pc532
-               ;;
-       pc98)
-               basic_machine=i386-pc
-               ;;
-       pc98-*)
-               basic_machine=i386-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium | p5 | k5 | k6 | nexgen | viac3)
-               basic_machine=i586-pc
-               ;;
-       pentiumpro | p6 | 6x86 | athlon | athlon_*)
-               basic_machine=i686-pc
-               ;;
-       pentiumii | pentium2 | pentiumiii | pentium3)
-               basic_machine=i686-pc
-               ;;
-       pentium4)
-               basic_machine=i786-pc
-               ;;
-       pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*)
-               basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumpro-* | p6-* | 6x86-* | athlon-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*)
-               basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pentium4-*)
-               basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       pn)
-               basic_machine=pn-gould
-               ;;
-       power)  basic_machine=power-ibm
-               ;;
-       ppc | ppcbe)    basic_machine=powerpc-unknown
-               ;;
-       ppc-* | ppcbe-*)
-               basic_machine=powerpc-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppcle | powerpclittle | ppc-le | powerpc-little)
-               basic_machine=powerpcle-unknown
-               ;;
-       ppcle-* | powerpclittle-*)
-               basic_machine=powerpcle-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64)  basic_machine=powerpc64-unknown
-               ;;
-       ppc64-*) basic_machine=powerpc64-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ppc64le | powerpc64little | ppc64-le | powerpc64-little)
-               basic_machine=powerpc64le-unknown
-               ;;
-       ppc64le-* | powerpc64little-*)
-               basic_machine=powerpc64le-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       ps2)
-               basic_machine=i386-ibm
-               ;;
-       pw32)
-               basic_machine=i586-unknown
-               os=-pw32
-               ;;
-       rdos | rdos64)
-               basic_machine=x86_64-pc
-               os=-rdos
-               ;;
-       rdos32)
-               basic_machine=i386-pc
-               os=-rdos
-               ;;
-       rom68k)
-               basic_machine=m68k-rom68k
-               os=-coff
-               ;;
-       rm[46]00)
-               basic_machine=mips-siemens
-               ;;
-       rtpc | rtpc-*)
-               basic_machine=romp-ibm
-               ;;
-       s390 | s390-*)
-               basic_machine=s390-ibm
-               ;;
-       s390x | s390x-*)
-               basic_machine=s390x-ibm
-               ;;
-       sa29200)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       sb1)
-               basic_machine=mipsisa64sb1-unknown
-               ;;
-       sb1el)
-               basic_machine=mipsisa64sb1el-unknown
-               ;;
-       sde)
-               basic_machine=mipsisa32-sde
-               os=-elf
-               ;;
-       sei)
-               basic_machine=mips-sei
-               os=-seiux
-               ;;
-       sequent)
-               basic_machine=i386-sequent
-               ;;
-       sh)
-               basic_machine=sh-hitachi
-               os=-hms
-               ;;
-       sh5el)
-               basic_machine=sh5le-unknown
-               ;;
-       sh64)
-               basic_machine=sh64-unknown
-               ;;
-       sparclite-wrs | simso-wrs)
-               basic_machine=sparclite-wrs
-               os=-vxworks
-               ;;
-       sps7)
-               basic_machine=m68k-bull
-               os=-sysv2
-               ;;
-       spur)
-               basic_machine=spur-unknown
-               ;;
-       st2000)
-               basic_machine=m68k-tandem
-               ;;
-       stratus)
-               basic_machine=i860-stratus
-               os=-sysv4
-               ;;
-       strongarm-* | thumb-*)
-               basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'`
-               ;;
-       sun2)
-               basic_machine=m68000-sun
-               ;;
-       sun2os3)
-               basic_machine=m68000-sun
-               os=-sunos3
-               ;;
-       sun2os4)
-               basic_machine=m68000-sun
-               os=-sunos4
-               ;;
-       sun3os3)
-               basic_machine=m68k-sun
-               os=-sunos3
-               ;;
-       sun3os4)
-               basic_machine=m68k-sun
-               os=-sunos4
-               ;;
-       sun4os3)
-               basic_machine=sparc-sun
-               os=-sunos3
-               ;;
-       sun4os4)
-               basic_machine=sparc-sun
-               os=-sunos4
-               ;;
-       sun4sol2)
-               basic_machine=sparc-sun
-               os=-solaris2
-               ;;
-       sun3 | sun3-*)
-               basic_machine=m68k-sun
-               ;;
-       sun4)
-               basic_machine=sparc-sun
-               ;;
-       sun386 | sun386i | roadrunner)
-               basic_machine=i386-sun
-               ;;
-       sv1)
-               basic_machine=sv1-cray
-               os=-unicos
-               ;;
-       symmetry)
-               basic_machine=i386-sequent
-               os=-dynix
-               ;;
-       t3e)
-               basic_machine=alphaev5-cray
-               os=-unicos
-               ;;
-       t90)
-               basic_machine=t90-cray
-               os=-unicos
-               ;;
-       tile*)
-               basic_machine=$basic_machine-unknown
-               os=-linux-gnu
-               ;;
-       tx39)
-               basic_machine=mipstx39-unknown
-               ;;
-       tx39el)
-               basic_machine=mipstx39el-unknown
-               ;;
-       toad1)
-               basic_machine=pdp10-xkl
-               os=-tops20
-               ;;
-       tower | tower-32)
-               basic_machine=m68k-ncr
-               ;;
-       tpf)
-               basic_machine=s390x-ibm
-               os=-tpf
-               ;;
-       udi29k)
-               basic_machine=a29k-amd
-               os=-udi
-               ;;
-       ultra3)
-               basic_machine=a29k-nyu
-               os=-sym1
-               ;;
-       v810 | necv810)
-               basic_machine=v810-nec
-               os=-none
-               ;;
-       vaxv)
-               basic_machine=vax-dec
-               os=-sysv
-               ;;
-       vms)
-               basic_machine=vax-dec
-               os=-vms
-               ;;
-       vpp*|vx|vx-*)
-               basic_machine=f301-fujitsu
-               ;;
-       vxworks960)
-               basic_machine=i960-wrs
-               os=-vxworks
-               ;;
-       vxworks68)
-               basic_machine=m68k-wrs
-               os=-vxworks
-               ;;
-       vxworks29k)
-               basic_machine=a29k-wrs
-               os=-vxworks
-               ;;
-       w65*)
-               basic_machine=w65-wdc
-               os=-none
-               ;;
-       w89k-*)
-               basic_machine=hppa1.1-winbond
-               os=-proelf
-               ;;
-       xbox)
-               basic_machine=i686-pc
-               os=-mingw32
-               ;;
-       xps | xps100)
-               basic_machine=xps100-honeywell
-               ;;
-       xscale-* | xscalee[bl]-*)
-               basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'`
-               ;;
-       ymp)
-               basic_machine=ymp-cray
-               os=-unicos
-               ;;
-       z8k-*-coff)
-               basic_machine=z8k-unknown
-               os=-sim
-               ;;
-       z80-*-coff)
-               basic_machine=z80-unknown
-               os=-sim
-               ;;
-       none)
-               basic_machine=none-none
-               os=-none
-               ;;
-
-# Here we handle the default manufacturer of certain CPU types.  It is in
-# some cases the only manufacturer, in others, it is the most popular.
-       w89k)
-               basic_machine=hppa1.1-winbond
-               ;;
-       op50n)
-               basic_machine=hppa1.1-oki
-               ;;
-       op60c)
-               basic_machine=hppa1.1-oki
-               ;;
-       romp)
-               basic_machine=romp-ibm
-               ;;
-       mmix)
-               basic_machine=mmix-knuth
-               ;;
-       rs6000)
-               basic_machine=rs6000-ibm
-               ;;
-       vax)
-               basic_machine=vax-dec
-               ;;
-       pdp10)
-               # there are many clones, so DEC is not a safe bet
-               basic_machine=pdp10-unknown
-               ;;
-       pdp11)
-               basic_machine=pdp11-dec
-               ;;
-       we32k)
-               basic_machine=we32k-att
-               ;;
-       sh[1234] | sh[24]a | sh[24]aeb | sh[34]eb | sh[1234]le | sh[23]ele)
-               basic_machine=sh-unknown
-               ;;
-       sparc | sparcv8 | sparcv9 | sparcv9b | sparcv9v)
-               basic_machine=sparc-sun
-               ;;
-       cydra)
-               basic_machine=cydra-cydrome
-               ;;
-       orion)
-               basic_machine=orion-highlevel
-               ;;
-       orion105)
-               basic_machine=clipper-highlevel
-               ;;
-       mac | mpw | mac-mpw)
-               basic_machine=m68k-apple
-               ;;
-       pmac | pmac-mpw)
-               basic_machine=powerpc-apple
-               ;;
-       *-unknown)
-               # Make sure to match an already-canonicalized machine name.
-               ;;
-       *)
-               echo Invalid configuration \`$1\': machine \`$basic_machine\' not recognized 1>&2
-               exit 1
-               ;;
-esac
-
-# Here we canonicalize certain aliases for manufacturers.
-case $basic_machine in
-       *-digital*)
-               basic_machine=`echo $basic_machine | sed 's/digital.*/dec/'`
-               ;;
-       *-commodore*)
-               basic_machine=`echo $basic_machine | sed 's/commodore.*/cbm/'`
-               ;;
-       *)
-               ;;
-esac
-
-# Decode manufacturer-specific aliases for certain operating systems.
-
-if [ x"$os" != x"" ]
-then
-case $os in
-       # First match some system type aliases
-       # that might get confused with valid system types.
-       # -solaris* is a basic system type, with this one exception.
-       -auroraux)
-               os=-auroraux
-               ;;
-       -solaris1 | -solaris1.*)
-               os=`echo $os | sed -e 's|solaris1|sunos4|'`
-               ;;
-       -solaris)
-               os=-solaris2
-               ;;
-       -svr4*)
-               os=-sysv4
-               ;;
-       -unixware*)
-               os=-sysv4.2uw
-               ;;
-       -gnu/linux*)
-               os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
-               ;;
-       # First accept the basic system types.
-       # The portable systems comes first.
-       # Each alternative MUST END IN A *, to match a version number.
-       # -sysv* is not here because it comes later, after sysvr4.
-       -gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
-             | -*vms* | -sco* | -esix* | -isc* | -aix* | -cnk* | -sunos | -sunos[34]*\
-             | -hpux* | -unos* | -osf* | -luna* | -dgux* | -auroraux* | -solaris* \
-             | -sym* | -kopensolaris* | -plan9* \
-             | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
-             | -aos* | -aros* \
-             | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
-             | -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
-             | -hiux* | -386bsd* | -knetbsd* | -mirbsd* | -netbsd* \
-             | -bitrig* | -openbsd* | -solidbsd* \
-             | -ekkobsd* | -kfreebsd* | -freebsd* | -riscix* | -lynxos* \
-             | -bosx* | -nextstep* | -cxux* | -aout* | -elf* | -oabi* \
-             | -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
-             | -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
-             | -chorusos* | -chorusrdb* | -cegcc* \
-             | -cygwin* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
-             | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \
-             | -linux-newlib* | -linux-musl* | -linux-uclibc* \
-             | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \
-             | -interix* | -uwin* | -mks* | -rhapsody* | -darwin* | -opened* \
-             | -openstep* | -oskit* | -conix* | -pw32* | -nonstopux* \
-             | -storm-chaos* | -tops10* | -tenex* | -tops20* | -its* \
-             | -os2* | -vos* | -palmos* | -uclinux* | -nucleus* \
-             | -morphos* | -superux* | -rtmk* | -rtmk-nova* | -windiss* \
-             | -powermax* | -dnix* | -nx6 | -nx7 | -sei* | -dragonfly* \
-             | -skyos* | -haiku* | -rdos* | -toppers* | -drops* | -es* | -tirtos*)
-       # Remember, each alternative MUST END IN *, to match a version number.
-               ;;
-       -qnx*)
-               case $basic_machine in
-                   x86-* | i*86-*)
-                       ;;
-                   *)
-                       os=-nto$os
-                       ;;
-               esac
-               ;;
-       -nto-qnx*)
-               ;;
-       -nto*)
-               os=`echo $os | sed -e 's|nto|nto-qnx|'`
-               ;;
-       -sim | -es1800* | -hms* | -xray | -os68k* | -none* | -v88r* \
-             | -windows* | -osx | -abug | -netware* | -os9* | -beos* | -haiku* \
-             | -macos* | -mpw* | -magic* | -mmixware* | -mon960* | -lnews*)
-               ;;
-       -mac*)
-               os=`echo $os | sed -e 's|mac|macos|'`
-               ;;
-       -linux-dietlibc)
-               os=-linux-dietlibc
-               ;;
-       -linux*)
-               os=`echo $os | sed -e 's|linux|linux-gnu|'`
-               ;;
-       -sunos5*)
-               os=`echo $os | sed -e 's|sunos5|solaris2|'`
-               ;;
-       -sunos6*)
-               os=`echo $os | sed -e 's|sunos6|solaris3|'`
-               ;;
-       -opened*)
-               os=-openedition
-               ;;
-       -os400*)
-               os=-os400
-               ;;
-       -wince*)
-               os=-wince
-               ;;
-       -osfrose*)
-               os=-osfrose
-               ;;
-       -osf*)
-               os=-osf
-               ;;
-       -utek*)
-               os=-bsd
-               ;;
-       -dynix*)
-               os=-bsd
-               ;;
-       -acis*)
-               os=-aos
-               ;;
-       -atheos*)
-               os=-atheos
-               ;;
-       -syllable*)
-               os=-syllable
-               ;;
-       -386bsd)
-               os=-bsd
-               ;;
-       -ctix* | -uts*)
-               os=-sysv
-               ;;
-       -nova*)
-               os=-rtmk-nova
-               ;;
-       -ns2 )
-               os=-nextstep2
-               ;;
-       -nsk*)
-               os=-nsk
-               ;;
-       # Preserve the version number of sinix5.
-       -sinix5.*)
-               os=`echo $os | sed -e 's|sinix|sysv|'`
-               ;;
-       -sinix*)
-               os=-sysv4
-               ;;
-       -tpf*)
-               os=-tpf
-               ;;
-       -triton*)
-               os=-sysv3
-               ;;
-       -oss*)
-               os=-sysv3
-               ;;
-       -svr4)
-               os=-sysv4
-               ;;
-       -svr3)
-               os=-sysv3
-               ;;
-       -sysvr4)
-               os=-sysv4
-               ;;
-       # This must come after -sysvr4.
-       -sysv*)
-               ;;
-       -ose*)
-               os=-ose
-               ;;
-       -es1800*)
-               os=-ose
-               ;;
-       -xenix)
-               os=-xenix
-               ;;
-       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-               os=-mint
-               ;;
-       -aros*)
-               os=-aros
-               ;;
-       -zvmoe)
-               os=-zvmoe
-               ;;
-       -dicos*)
-               os=-dicos
-               ;;
-       -nacl*)
-               ;;
-       -none)
-               ;;
-       *)
-               # Get rid of the `-' at the beginning of $os.
-               os=`echo $os | sed 's/[^-]*-//'`
-               echo Invalid configuration \`$1\': system \`$os\' not recognized 1>&2
-               exit 1
-               ;;
-esac
-else
-
-# Here we handle the default operating systems that come with various machines.
-# The value should be what the vendor currently ships out the door with their
-# machine or put another way, the most popular os provided with the machine.
-
-# Note that if you're going to try to match "-MANUFACTURER" here (say,
-# "-sun"), then you have to tell the case statement up towards the top
-# that MANUFACTURER isn't an operating system.  Otherwise, code above
-# will signal an error saying that MANUFACTURER isn't an operating
-# system, and we'll never get to this point.
-
-case $basic_machine in
-       score-*)
-               os=-elf
-               ;;
-       spu-*)
-               os=-elf
-               ;;
-       *-acorn)
-               os=-riscix1.2
-               ;;
-       arm*-rebel)
-               os=-linux
-               ;;
-       arm*-semi)
-               os=-aout
-               ;;
-       c4x-* | tic4x-*)
-               os=-coff
-               ;;
-       c8051-*)
-               os=-elf
-               ;;
-       hexagon-*)
-               os=-elf
-               ;;
-       tic54x-*)
-               os=-coff
-               ;;
-       tic55x-*)
-               os=-coff
-               ;;
-       tic6x-*)
-               os=-coff
-               ;;
-       # This must come before the *-dec entry.
-       pdp10-*)
-               os=-tops20
-               ;;
-       pdp11-*)
-               os=-none
-               ;;
-       *-dec | vax-*)
-               os=-ultrix4.2
-               ;;
-       m68*-apollo)
-               os=-domain
-               ;;
-       i386-sun)
-               os=-sunos4.0.2
-               ;;
-       m68000-sun)
-               os=-sunos3
-               ;;
-       m68*-cisco)
-               os=-aout
-               ;;
-       mep-*)
-               os=-elf
-               ;;
-       mips*-cisco)
-               os=-elf
-               ;;
-       mips*-*)
-               os=-elf
-               ;;
-       or32-*)
-               os=-coff
-               ;;
-       *-tti)  # must be before sparc entry or we get the wrong os.
-               os=-sysv3
-               ;;
-       sparc-* | *-sun)
-               os=-sunos4.1.1
-               ;;
-       *-be)
-               os=-beos
-               ;;
-       *-haiku)
-               os=-haiku
-               ;;
-       *-ibm)
-               os=-aix
-               ;;
-       *-knuth)
-               os=-mmixware
-               ;;
-       *-wec)
-               os=-proelf
-               ;;
-       *-winbond)
-               os=-proelf
-               ;;
-       *-oki)
-               os=-proelf
-               ;;
-       *-hp)
-               os=-hpux
-               ;;
-       *-hitachi)
-               os=-hiux
-               ;;
-       i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent)
-               os=-sysv
-               ;;
-       *-cbm)
-               os=-amigaos
-               ;;
-       *-dg)
-               os=-dgux
-               ;;
-       *-dolphin)
-               os=-sysv3
-               ;;
-       m68k-ccur)
-               os=-rtu
-               ;;
-       m88k-omron*)
-               os=-luna
-               ;;
-       *-next )
-               os=-nextstep
-               ;;
-       *-sequent)
-               os=-ptx
-               ;;
-       *-crds)
-               os=-unos
-               ;;
-       *-ns)
-               os=-genix
-               ;;
-       i370-*)
-               os=-mvs
-               ;;
-       *-next)
-               os=-nextstep3
-               ;;
-       *-gould)
-               os=-sysv
-               ;;
-       *-highlevel)
-               os=-bsd
-               ;;
-       *-encore)
-               os=-bsd
-               ;;
-       *-sgi)
-               os=-irix
-               ;;
-       *-siemens)
-               os=-sysv4
-               ;;
-       *-masscomp)
-               os=-rtu
-               ;;
-       f30[01]-fujitsu | f700-fujitsu)
-               os=-uxpv
-               ;;
-       *-rom68k)
-               os=-coff
-               ;;
-       *-*bug)
-               os=-coff
-               ;;
-       *-apple)
-               os=-macos
-               ;;
-       *-atari*)
-               os=-mint
-               ;;
-       *)
-               os=-none
-               ;;
-esac
-fi
-
-# Here we handle the case where we know the os, and the CPU type, but not the
-# manufacturer.  We pick the logical manufacturer.
-vendor=unknown
-case $basic_machine in
-       *-unknown)
-               case $os in
-                       -riscix*)
-                               vendor=acorn
-                               ;;
-                       -sunos*)
-                               vendor=sun
-                               ;;
-                       -cnk*|-aix*)
-                               vendor=ibm
-                               ;;
-                       -beos*)
-                               vendor=be
-                               ;;
-                       -hpux*)
-                               vendor=hp
-                               ;;
-                       -mpeix*)
-                               vendor=hp
-                               ;;
-                       -hiux*)
-                               vendor=hitachi
-                               ;;
-                       -unos*)
-                               vendor=crds
-                               ;;
-                       -dgux*)
-                               vendor=dg
-                               ;;
-                       -luna*)
-                               vendor=omron
-                               ;;
-                       -genix*)
-                               vendor=ns
-                               ;;
-                       -mvs* | -opened*)
-                               vendor=ibm
-                               ;;
-                       -os400*)
-                               vendor=ibm
-                               ;;
-                       -ptx*)
-                               vendor=sequent
-                               ;;
-                       -tpf*)
-                               vendor=ibm
-                               ;;
-                       -vxsim* | -vxworks* | -windiss*)
-                               vendor=wrs
-                               ;;
-                       -aux*)
-                               vendor=apple
-                               ;;
-                       -hms*)
-                               vendor=hitachi
-                               ;;
-                       -mpw* | -macos*)
-                               vendor=apple
-                               ;;
-                       -*mint | -mint[0-9]* | -*MiNT | -MiNT[0-9]*)
-                               vendor=atari
-                               ;;
-                       -vos*)
-                               vendor=stratus
-                               ;;
-               esac
-               basic_machine=`echo $basic_machine | sed "s/unknown/$vendor/"`
-               ;;
-esac
-
-echo $basic_machine$os
-exit
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "timestamp='"
-# time-stamp-format: "%:y-%02m-%02d"
-# time-stamp-end: "'"
-# End:
diff --git a/src/libs/gnulib/build-aux/depcomp b/src/libs/gnulib/build-aux/depcomp
deleted file mode 100755 (executable)
index 3178801..0000000
+++ /dev/null
@@ -1,756 +0,0 @@
-#! /bin/sh
-# depcomp - compile a program generating dependencies as side-effects
-
-scriptversion=2013-05-30.07; # UTC
-
-# Copyright (C) 1999-2013 Free Software Foundation, Inc.
-
-# 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, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-# Originally written by Alexandre Oliva <oliva@dcc.unicamp.br>.
-
-case $1 in
-  '')
-    echo "$0: No command.  Try '$0 --help' for more information." 1>&2
-    exit 1;
-    ;;
-  -h | --h*)
-    cat <<\EOF
-Usage: depcomp [--help] [--version] PROGRAM [ARGS]
-
-Run PROGRAMS ARGS to compile a file, generating dependencies
-as side-effects.
-
-Environment variables:
-  depmode     Dependency tracking mode.
-  source      Source file read by 'PROGRAMS ARGS'.
-  object      Object file output by 'PROGRAMS ARGS'.
-  DEPDIR      directory where to store dependencies.
-  depfile     Dependency file to output.
-  tmpdepfile  Temporary file to use when outputting dependencies.
-  libtool     Whether libtool is used (yes/no).
-
-Report bugs to <bug-automake@gnu.org>.
-EOF
-    exit $?
-    ;;
-  -v | --v*)
-    echo "depcomp $scriptversion"
-    exit $?
-    ;;
-esac
-
-# Get the directory component of the given path, and save it in the
-# global variables '$dir'.  Note that this directory component will
-# be either empty or ending with a '/' character.  This is deliberate.
-set_dir_from ()
-{
-  case $1 in
-    */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;;
-      *) dir=;;
-  esac
-}
-
-# Get the suffix-stripped basename of the given path, and save it the
-# global variable '$base'.
-set_base_from ()
-{
-  base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'`
-}
-
-# If no dependency file was actually created by the compiler invocation,
-# we still have to create a dummy depfile, to avoid errors with the
-# Makefile "include basename.Plo" scheme.
-make_dummy_depfile ()
-{
-  echo "#dummy" > "$depfile"
-}
-
-# Factor out some common post-processing of the generated depfile.
-# Requires the auxiliary global variable '$tmpdepfile' to be set.
-aix_post_process_depfile ()
-{
-  # If the compiler actually managed to produce a dependency file,
-  # post-process it.
-  if test -f "$tmpdepfile"; then
-    # Each line is of the form 'foo.o: dependency.h'.
-    # Do two passes, one to just change these to
-    #   $object: dependency.h
-    # and one to simply output
-    #   dependency.h:
-    # which is needed to avoid the deleted-header problem.
-    { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile"
-      sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile"
-    } > "$depfile"
-    rm -f "$tmpdepfile"
-  else
-    make_dummy_depfile
-  fi
-}
-
-# A tabulation character.
-tab='  '
-# A newline character.
-nl='
-'
-# Character ranges might be problematic outside the C locale.
-# These definitions help.
-upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ
-lower=abcdefghijklmnopqrstuvwxyz
-digits=0123456789
-alpha=${upper}${lower}
-
-if test -z "$depmode" || test -z "$source" || test -z "$object"; then
-  echo "depcomp: Variables source, object and depmode must be set" 1>&2
-  exit 1
-fi
-
-# Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po.
-depfile=${depfile-`echo "$object" |
-  sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`}
-tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`}
-
-rm -f "$tmpdepfile"
-
-# Avoid interferences from the environment.
-gccflag= dashmflag=
-
-# Some modes work just like other modes, but use different flags.  We
-# parameterize here, but still list the modes in the big case below,
-# to make depend.m4 easier to write.  Note that we *cannot* use a case
-# here, because this file can only contain one case statement.
-if test "$depmode" = hp; then
-  # HP compiler uses -M and no extra arg.
-  gccflag=-M
-  depmode=gcc
-fi
-
-if test "$depmode" = dashXmstdout; then
-  # This is just like dashmstdout with a different argument.
-  dashmflag=-xM
-  depmode=dashmstdout
-fi
-
-cygpath_u="cygpath -u -f -"
-if test "$depmode" = msvcmsys; then
-  # This is just like msvisualcpp but w/o cygpath translation.
-  # Just convert the backslash-escaped backslashes to single forward
-  # slashes to satisfy depend.m4
-  cygpath_u='sed s,\\\\,/,g'
-  depmode=msvisualcpp
-fi
-
-if test "$depmode" = msvc7msys; then
-  # This is just like msvc7 but w/o cygpath translation.
-  # Just convert the backslash-escaped backslashes to single forward
-  # slashes to satisfy depend.m4
-  cygpath_u='sed s,\\\\,/,g'
-  depmode=msvc7
-fi
-
-if test "$depmode" = xlc; then
-  # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information.
-  gccflag=-qmakedep=gcc,-MF
-  depmode=gcc
-fi
-
-case "$depmode" in
-gcc3)
-## gcc 3 implements dependency tracking that does exactly what
-## we want.  Yay!  Note: for some reason libtool 1.4 doesn't like
-## it if -MD -MP comes after the -MF stuff.  Hmm.
-## Unfortunately, FreeBSD c89 acceptance of flags depends upon
-## the command line argument order; so add the flags where they
-## appear in depend2.am.  Note that the slowdown incurred here
-## affects only configure: in makefiles, %FASTDEP% shortcuts this.
-  for arg
-  do
-    case $arg in
-    -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;;
-    *)  set fnord "$@" "$arg" ;;
-    esac
-    shift # fnord
-    shift # $arg
-  done
-  "$@"
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  mv "$tmpdepfile" "$depfile"
-  ;;
-
-gcc)
-## Note that this doesn't just cater to obsosete pre-3.x GCC compilers.
-## but also to in-use compilers like IMB xlc/xlC and the HP C compiler.
-## (see the conditional assignment to $gccflag above).
-## There are various ways to get dependency output from gcc.  Here's
-## why we pick this rather obscure method:
-## - Don't want to use -MD because we'd like the dependencies to end
-##   up in a subdir.  Having to rename by hand is ugly.
-##   (We might end up doing this anyway to support other compilers.)
-## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like
-##   -MM, not -M (despite what the docs say).  Also, it might not be
-##   supported by the other compilers which use the 'gcc' depmode.
-## - Using -M directly means running the compiler twice (even worse
-##   than renaming).
-  if test -z "$gccflag"; then
-    gccflag=-MD,
-  fi
-  "$@" -Wp,"$gccflag$tmpdepfile"
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  # The second -e expression handles DOS-style file names with drive
-  # letters.
-  sed -e 's/^[^:]*: / /' \
-      -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile"
-## This next piece of magic avoids the "deleted header file" problem.
-## The problem is that when a header file which appears in a .P file
-## is deleted, the dependency causes make to die (because there is
-## typically no way to rebuild the header).  We avoid this by adding
-## dummy dependencies for each header file.  Too bad gcc doesn't do
-## this for us directly.
-## Some versions of gcc put a space before the ':'.  On the theory
-## that the space means something, we add a space to the output as
-## well.  hp depmode also adds that space, but also prefixes the VPATH
-## to the object.  Take care to not repeat it in the output.
-## Some versions of the HPUX 10.20 sed can't process this invocation
-## correctly.  Breaking it into two sed invocations is a workaround.
-  tr ' ' "$nl" < "$tmpdepfile" \
-    | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-hp)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-xlc)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-aix)
-  # The C for AIX Compiler uses -M and outputs the dependencies
-  # in a .u file.  In older versions, this file always lives in the
-  # current directory.  Also, the AIX compiler puts '$object:' at the
-  # start of each line; $object doesn't have directory information.
-  # Version 6 uses the directory in both cases.
-  set_dir_from "$object"
-  set_base_from "$object"
-  if test "$libtool" = yes; then
-    tmpdepfile1=$dir$base.u
-    tmpdepfile2=$base.u
-    tmpdepfile3=$dir.libs/$base.u
-    "$@" -Wc,-M
-  else
-    tmpdepfile1=$dir$base.u
-    tmpdepfile2=$dir$base.u
-    tmpdepfile3=$dir$base.u
-    "$@" -M
-  fi
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-    exit $stat
-  fi
-
-  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-  do
-    test -f "$tmpdepfile" && break
-  done
-  aix_post_process_depfile
-  ;;
-
-tcc)
-  # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26
-  # FIXME: That version still under development at the moment of writing.
-  #        Make that this statement remains true also for stable, released
-  #        versions.
-  # It will wrap lines (doesn't matter whether long or short) with a
-  # trailing '\', as in:
-  #
-  #   foo.o : \
-  #    foo.c \
-  #    foo.h \
-  #
-  # It will put a trailing '\' even on the last line, and will use leading
-  # spaces rather than leading tabs (at least since its commit 0394caf7
-  # "Emit spaces for -MD").
-  "$@" -MD -MF "$tmpdepfile"
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'.
-  # We have to change lines of the first kind to '$object: \'.
-  sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile"
-  # And for each line of the second kind, we have to emit a 'dep.h:'
-  # dummy dependency, to avoid the deleted-header problem.
-  sed -n -e 's|^  *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-## The order of this option in the case statement is important, since the
-## shell code in configure will try each of these formats in the order
-## listed in this file.  A plain '-MD' option would be understood by many
-## compilers, so we must ensure this comes after the gcc and icc options.
-pgcc)
-  # Portland's C compiler understands '-MD'.
-  # Will always output deps to 'file.d' where file is the root name of the
-  # source file under compilation, even if file resides in a subdirectory.
-  # The object file name does not affect the name of the '.d' file.
-  # pgcc 10.2 will output
-  #    foo.o: sub/foo.c sub/foo.h
-  # and will wrap long lines using '\' :
-  #    foo.o: sub/foo.c ... \
-  #     sub/foo.h ... \
-  #     ...
-  set_dir_from "$object"
-  # Use the source, not the object, to determine the base name, since
-  # that's sadly what pgcc will do too.
-  set_base_from "$source"
-  tmpdepfile=$base.d
-
-  # For projects that build the same source file twice into different object
-  # files, the pgcc approach of using the *source* file root name can cause
-  # problems in parallel builds.  Use a locking strategy to avoid stomping on
-  # the same $tmpdepfile.
-  lockdir=$base.d-lock
-  trap "
-    echo '$0: caught signal, cleaning up...' >&2
-    rmdir '$lockdir'
-    exit 1
-  " 1 2 13 15
-  numtries=100
-  i=$numtries
-  while test $i -gt 0; do
-    # mkdir is a portable test-and-set.
-    if mkdir "$lockdir" 2>/dev/null; then
-      # This process acquired the lock.
-      "$@" -MD
-      stat=$?
-      # Release the lock.
-      rmdir "$lockdir"
-      break
-    else
-      # If the lock is being held by a different process, wait
-      # until the winning process is done or we timeout.
-      while test -d "$lockdir" && test $i -gt 0; do
-        sleep 1
-        i=`expr $i - 1`
-      done
-    fi
-    i=`expr $i - 1`
-  done
-  trap - 1 2 13 15
-  if test $i -le 0; then
-    echo "$0: failed to acquire lock after $numtries attempts" >&2
-    echo "$0: check lockdir '$lockdir'" >&2
-    exit 1
-  fi
-
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  # Each line is of the form `foo.o: dependent.h',
-  # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'.
-  # Do two passes, one to just change these to
-  # `$object: dependent.h' and one to simply `dependent.h:'.
-  sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-hp2)
-  # The "hp" stanza above does not work with aCC (C++) and HP's ia64
-  # compilers, which have integrated preprocessors.  The correct option
-  # to use with these is +Maked; it writes dependencies to a file named
-  # 'foo.d', which lands next to the object file, wherever that
-  # happens to be.
-  # Much of this is similar to the tru64 case; see comments there.
-  set_dir_from  "$object"
-  set_base_from "$object"
-  if test "$libtool" = yes; then
-    tmpdepfile1=$dir$base.d
-    tmpdepfile2=$dir.libs/$base.d
-    "$@" -Wc,+Maked
-  else
-    tmpdepfile1=$dir$base.d
-    tmpdepfile2=$dir$base.d
-    "$@" +Maked
-  fi
-  stat=$?
-  if test $stat -ne 0; then
-     rm -f "$tmpdepfile1" "$tmpdepfile2"
-     exit $stat
-  fi
-
-  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2"
-  do
-    test -f "$tmpdepfile" && break
-  done
-  if test -f "$tmpdepfile"; then
-    sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile"
-    # Add 'dependent.h:' lines.
-    sed -ne '2,${
-               s/^ *//
-               s/ \\*$//
-               s/$/:/
-               p
-             }' "$tmpdepfile" >> "$depfile"
-  else
-    make_dummy_depfile
-  fi
-  rm -f "$tmpdepfile" "$tmpdepfile2"
-  ;;
-
-tru64)
-  # The Tru64 compiler uses -MD to generate dependencies as a side
-  # effect.  'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'.
-  # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put
-  # dependencies in 'foo.d' instead, so we check for that too.
-  # Subdirectories are respected.
-  set_dir_from  "$object"
-  set_base_from "$object"
-
-  if test "$libtool" = yes; then
-    # Libtool generates 2 separate objects for the 2 libraries.  These
-    # two compilations output dependencies in $dir.libs/$base.o.d and
-    # in $dir$base.o.d.  We have to check for both files, because
-    # one of the two compilations can be disabled.  We should prefer
-    # $dir$base.o.d over $dir.libs/$base.o.d because the latter is
-    # automatically cleaned when .libs/ is deleted, while ignoring
-    # the former would cause a distcleancheck panic.
-    tmpdepfile1=$dir$base.o.d          # libtool 1.5
-    tmpdepfile2=$dir.libs/$base.o.d    # Likewise.
-    tmpdepfile3=$dir.libs/$base.d      # Compaq CCC V6.2-504
-    "$@" -Wc,-MD
-  else
-    tmpdepfile1=$dir$base.d
-    tmpdepfile2=$dir$base.d
-    tmpdepfile3=$dir$base.d
-    "$@" -MD
-  fi
-
-  stat=$?
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-    exit $stat
-  fi
-
-  for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3"
-  do
-    test -f "$tmpdepfile" && break
-  done
-  # Same post-processing that is required for AIX mode.
-  aix_post_process_depfile
-  ;;
-
-msvc7)
-  if test "$libtool" = yes; then
-    showIncludes=-Wc,-showIncludes
-  else
-    showIncludes=-showIncludes
-  fi
-  "$@" $showIncludes > "$tmpdepfile"
-  stat=$?
-  grep -v '^Note: including file: ' "$tmpdepfile"
-  if test $stat -ne 0; then
-    rm -f "$tmpdepfile"
-    exit $stat
-  fi
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  # The first sed program below extracts the file names and escapes
-  # backslashes for cygpath.  The second sed program outputs the file
-  # name when reading, but also accumulates all include files in the
-  # hold buffer in order to output them again at the end.  This only
-  # works with sed implementations that can handle large buffers.
-  sed < "$tmpdepfile" -n '
-/^Note: including file:  *\(.*\)/ {
-  s//\1/
-  s/\\/\\\\/g
-  p
-}' | $cygpath_u | sort -u | sed -n '
-s/ /\\ /g
-s/\(.*\)/'"$tab"'\1 \\/p
-s/.\(.*\) \\/\1:/
-H
-$ {
-  s/.*/'"$tab"'/
-  G
-  p
-}' >> "$depfile"
-  echo >> "$depfile" # make sure the fragment doesn't end with a backslash
-  rm -f "$tmpdepfile"
-  ;;
-
-msvc7msys)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-#nosideeffect)
-  # This comment above is used by automake to tell side-effect
-  # dependency tracking mechanisms from slower ones.
-
-dashmstdout)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout, regardless of -o.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  # Remove '-o $object'.
-  IFS=" "
-  for arg
-  do
-    case $arg in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    *)
-      set fnord "$@" "$arg"
-      shift # fnord
-      shift # $arg
-      ;;
-    esac
-  done
-
-  test -z "$dashmflag" && dashmflag=-M
-  # Require at least two characters before searching for ':'
-  # in the target name.  This is to cope with DOS-style filenames:
-  # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise.
-  "$@" $dashmflag |
-    sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile"
-  rm -f "$depfile"
-  cat < "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process this sed invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  tr ' ' "$nl" < "$tmpdepfile" \
-    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-dashXmstdout)
-  # This case only exists to satisfy depend.m4.  It is never actually
-  # run, as this mode is specially recognized in the preamble.
-  exit 1
-  ;;
-
-makedepend)
-  "$@" || exit $?
-  # Remove any Libtool call
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-  # X makedepend
-  shift
-  cleared=no eat=no
-  for arg
-  do
-    case $cleared in
-    no)
-      set ""; shift
-      cleared=yes ;;
-    esac
-    if test $eat = yes; then
-      eat=no
-      continue
-    fi
-    case "$arg" in
-    -D*|-I*)
-      set fnord "$@" "$arg"; shift ;;
-    # Strip any option that makedepend may not understand.  Remove
-    # the object too, otherwise makedepend will parse it as a source file.
-    -arch)
-      eat=yes ;;
-    -*|$object)
-      ;;
-    *)
-      set fnord "$@" "$arg"; shift ;;
-    esac
-  done
-  obj_suffix=`echo "$object" | sed 's/^.*\././'`
-  touch "$tmpdepfile"
-  ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@"
-  rm -f "$depfile"
-  # makedepend may prepend the VPATH from the source file name to the object.
-  # No need to regex-escape $object, excess matching of '.' is harmless.
-  sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile"
-  # Some versions of the HPUX 10.20 sed can't process the last invocation
-  # correctly.  Breaking it into two sed invocations is a workaround.
-  sed '1,2d' "$tmpdepfile" \
-    | tr ' ' "$nl" \
-    | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \
-    | sed -e 's/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile" "$tmpdepfile".bak
-  ;;
-
-cpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  # Remove '-o $object'.
-  IFS=" "
-  for arg
-  do
-    case $arg in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    *)
-      set fnord "$@" "$arg"
-      shift # fnord
-      shift # $arg
-      ;;
-    esac
-  done
-
-  "$@" -E \
-    | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-             -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \
-    | sed '$ s: \\$::' > "$tmpdepfile"
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  cat < "$tmpdepfile" >> "$depfile"
-  sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-msvisualcpp)
-  # Important note: in order to support this mode, a compiler *must*
-  # always write the preprocessed file to stdout.
-  "$@" || exit $?
-
-  # Remove the call to Libtool.
-  if test "$libtool" = yes; then
-    while test "X$1" != 'X--mode=compile'; do
-      shift
-    done
-    shift
-  fi
-
-  IFS=" "
-  for arg
-  do
-    case "$arg" in
-    -o)
-      shift
-      ;;
-    $object)
-      shift
-      ;;
-    "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI")
-        set fnord "$@"
-        shift
-        shift
-        ;;
-    *)
-        set fnord "$@" "$arg"
-        shift
-        shift
-        ;;
-    esac
-  done
-  "$@" -E 2>/dev/null |
-  sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile"
-  rm -f "$depfile"
-  echo "$object : \\" > "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile"
-  echo "$tab" >> "$depfile"
-  sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile"
-  rm -f "$tmpdepfile"
-  ;;
-
-msvcmsys)
-  # This case exists only to let depend.m4 do its work.  It works by
-  # looking at the text of this script.  This case will never be run,
-  # since it is checked for above.
-  exit 1
-  ;;
-
-none)
-  exec "$@"
-  ;;
-
-*)
-  echo "Unknown depmode $depmode" 1>&2
-  exit 1
-  ;;
-esac
-
-exit 0
-
-# Local Variables:
-# mode: shell-script
-# sh-indentation: 2
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/src/libs/gnulib/build-aux/install-sh b/src/libs/gnulib/build-aux/install-sh
deleted file mode 100755 (executable)
index 0b0fdcb..0000000
+++ /dev/null
@@ -1,501 +0,0 @@
-#!/bin/sh
-# install - install a program, script, or datafile
-
-scriptversion=2013-12-25.23; # UTC
-
-# This originates from X11R5 (mit/util/scripts/install.sh), which was
-# later released in X11R6 (xc/config/util/install.sh) with the
-# following copyright and license.
-#
-# Copyright (C) 1994 X Consortium
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to
-# deal in the Software without restriction, including without limitation the
-# rights to use, copy, modify, merge, publish, distribute, sublicense, and/or
-# sell copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL THE
-# X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN
-# AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC-
-# TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
-#
-# Except as contained in this notice, the name of the X Consortium shall not
-# be used in advertising or otherwise to promote the sale, use or other deal-
-# ings in this Software without prior written authorization from the X Consor-
-# tium.
-#
-#
-# FSF changes to this file are in the public domain.
-#
-# Calling this script install-sh is preferred over install.sh, to prevent
-# 'make' implicit rules from creating a file called install from it
-# when there is no Makefile.
-#
-# This script is compatible with the BSD install script, but was written
-# from scratch.
-
-tab='  '
-nl='
-'
-IFS=" $tab$nl"
-
-# Set DOITPROG to "echo" to test this script.
-
-doit=${DOITPROG-}
-doit_exec=${doit:-exec}
-
-# Put in absolute file names if you don't have them in your path;
-# or use environment vars.
-
-chgrpprog=${CHGRPPROG-chgrp}
-chmodprog=${CHMODPROG-chmod}
-chownprog=${CHOWNPROG-chown}
-cmpprog=${CMPPROG-cmp}
-cpprog=${CPPROG-cp}
-mkdirprog=${MKDIRPROG-mkdir}
-mvprog=${MVPROG-mv}
-rmprog=${RMPROG-rm}
-stripprog=${STRIPPROG-strip}
-
-posix_mkdir=
-
-# Desired mode of installed file.
-mode=0755
-
-chgrpcmd=
-chmodcmd=$chmodprog
-chowncmd=
-mvcmd=$mvprog
-rmcmd="$rmprog -f"
-stripcmd=
-
-src=
-dst=
-dir_arg=
-dst_arg=
-
-copy_on_change=false
-is_target_a_directory=possibly
-
-usage="\
-Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE
-   or: $0 [OPTION]... SRCFILES... DIRECTORY
-   or: $0 [OPTION]... -t DIRECTORY SRCFILES...
-   or: $0 [OPTION]... -d DIRECTORIES...
-
-In the 1st form, copy SRCFILE to DSTFILE.
-In the 2nd and 3rd, copy all SRCFILES to DIRECTORY.
-In the 4th, create DIRECTORIES.
-
-Options:
-     --help     display this help and exit.
-     --version  display version info and exit.
-
-  -c            (ignored)
-  -C            install only if different (preserve the last data modification time)
-  -d            create directories instead of installing files.
-  -g GROUP      $chgrpprog installed files to GROUP.
-  -m MODE       $chmodprog installed files to MODE.
-  -o USER       $chownprog installed files to USER.
-  -s            $stripprog installed files.
-  -t DIRECTORY  install into DIRECTORY.
-  -T            report an error if DSTFILE is a directory.
-
-Environment variables override the default commands:
-  CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG
-  RMPROG STRIPPROG
-"
-
-while test $# -ne 0; do
-  case $1 in
-    -c) ;;
-
-    -C) copy_on_change=true;;
-
-    -d) dir_arg=true;;
-
-    -g) chgrpcmd="$chgrpprog $2"
-        shift;;
-
-    --help) echo "$usage"; exit $?;;
-
-    -m) mode=$2
-        case $mode in
-          *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*)
-            echo "$0: invalid mode: $mode" >&2
-            exit 1;;
-        esac
-        shift;;
-
-    -o) chowncmd="$chownprog $2"
-        shift;;
-
-    -s) stripcmd=$stripprog;;
-
-    -t)
-        is_target_a_directory=always
-        dst_arg=$2
-        # Protect names problematic for 'test' and other utilities.
-        case $dst_arg in
-          -* | [=\(\)!]) dst_arg=./$dst_arg;;
-        esac
-        shift;;
-
-    -T) is_target_a_directory=never;;
-
-    --version) echo "$0 $scriptversion"; exit $?;;
-
-    --) shift
-        break;;
-
-    -*) echo "$0: invalid option: $1" >&2
-        exit 1;;
-
-    *)  break;;
-  esac
-  shift
-done
-
-# We allow the use of options -d and -T together, by making -d
-# take the precedence; this is for compatibility with GNU install.
-
-if test -n "$dir_arg"; then
-  if test -n "$dst_arg"; then
-    echo "$0: target directory not allowed when installing a directory." >&2
-    exit 1
-  fi
-fi
-
-if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then
-  # When -d is used, all remaining arguments are directories to create.
-  # When -t is used, the destination is already specified.
-  # Otherwise, the last argument is the destination.  Remove it from $@.
-  for arg
-  do
-    if test -n "$dst_arg"; then
-      # $@ is not empty: it contains at least $arg.
-      set fnord "$@" "$dst_arg"
-      shift # fnord
-    fi
-    shift # arg
-    dst_arg=$arg
-    # Protect names problematic for 'test' and other utilities.
-    case $dst_arg in
-      -* | [=\(\)!]) dst_arg=./$dst_arg;;
-    esac
-  done
-fi
-
-if test $# -eq 0; then
-  if test -z "$dir_arg"; then
-    echo "$0: no input file specified." >&2
-    exit 1
-  fi
-  # It's OK to call 'install-sh -d' without argument.
-  # This can happen when creating conditional directories.
-  exit 0
-fi
-
-if test -z "$dir_arg"; then
-  if test $# -gt 1 || test "$is_target_a_directory" = always; then
-    if test ! -d "$dst_arg"; then
-      echo "$0: $dst_arg: Is not a directory." >&2
-      exit 1
-    fi
-  fi
-fi
-
-if test -z "$dir_arg"; then
-  do_exit='(exit $ret); exit $ret'
-  trap "ret=129; $do_exit" 1
-  trap "ret=130; $do_exit" 2
-  trap "ret=141; $do_exit" 13
-  trap "ret=143; $do_exit" 15
-
-  # Set umask so as not to create temps with too-generous modes.
-  # However, 'strip' requires both read and write access to temps.
-  case $mode in
-    # Optimize common cases.
-    *644) cp_umask=133;;
-    *755) cp_umask=22;;
-
-    *[0-7])
-      if test -z "$stripcmd"; then
-        u_plus_rw=
-      else
-        u_plus_rw='% 200'
-      fi
-      cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;;
-    *)
-      if test -z "$stripcmd"; then
-        u_plus_rw=
-      else
-        u_plus_rw=,u+rw
-      fi
-      cp_umask=$mode$u_plus_rw;;
-  esac
-fi
-
-for src
-do
-  # Protect names problematic for 'test' and other utilities.
-  case $src in
-    -* | [=\(\)!]) src=./$src;;
-  esac
-
-  if test -n "$dir_arg"; then
-    dst=$src
-    dstdir=$dst
-    test -d "$dstdir"
-    dstdir_status=$?
-  else
-
-    # Waiting for this to be detected by the "$cpprog $src $dsttmp" command
-    # might cause directories to be created, which would be especially bad
-    # if $src (and thus $dsttmp) contains '*'.
-    if test ! -f "$src" && test ! -d "$src"; then
-      echo "$0: $src does not exist." >&2
-      exit 1
-    fi
-
-    if test -z "$dst_arg"; then
-      echo "$0: no destination specified." >&2
-      exit 1
-    fi
-    dst=$dst_arg
-
-    # If destination is a directory, append the input filename; won't work
-    # if double slashes aren't ignored.
-    if test -d "$dst"; then
-      if test "$is_target_a_directory" = never; then
-        echo "$0: $dst_arg: Is a directory" >&2
-        exit 1
-      fi
-      dstdir=$dst
-      dst=$dstdir/`basename "$src"`
-      dstdir_status=0
-    else
-      dstdir=`dirname "$dst"`
-      test -d "$dstdir"
-      dstdir_status=$?
-    fi
-  fi
-
-  obsolete_mkdir_used=false
-
-  if test $dstdir_status != 0; then
-    case $posix_mkdir in
-      '')
-        # Create intermediate dirs using mode 755 as modified by the umask.
-        # This is like FreeBSD 'install' as of 1997-10-28.
-        umask=`umask`
-        case $stripcmd.$umask in
-          # Optimize common cases.
-          *[2367][2367]) mkdir_umask=$umask;;
-          .*0[02][02] | .[02][02] | .[02]) mkdir_umask=22;;
-
-          *[0-7])
-            mkdir_umask=`expr $umask + 22 \
-              - $umask % 100 % 40 + $umask % 20 \
-              - $umask % 10 % 4 + $umask % 2
-            `;;
-          *) mkdir_umask=$umask,go-w;;
-        esac
-
-        # With -d, create the new directory with the user-specified mode.
-        # Otherwise, rely on $mkdir_umask.
-        if test -n "$dir_arg"; then
-          mkdir_mode=-m$mode
-        else
-          mkdir_mode=
-        fi
-
-        posix_mkdir=false
-        case $umask in
-          *[123567][0-7][0-7])
-            # POSIX mkdir -p sets u+wx bits regardless of umask, which
-            # is incompatible with FreeBSD 'install' when (umask & 300) != 0.
-            ;;
-          *)
-            tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$
-            trap 'ret=$?; rmdir "$tmpdir/d" "$tmpdir" 2>/dev/null; exit $ret' 0
-
-            if (umask $mkdir_umask &&
-                exec $mkdirprog $mkdir_mode -p -- "$tmpdir/d") >/dev/null 2>&1
-            then
-              if test -z "$dir_arg" || {
-                   # Check for POSIX incompatibilities with -m.
-                   # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or
-                   # other-writable bit of parent directory when it shouldn't.
-                   # FreeBSD 6.1 mkdir -m -p sets mode of existing directory.
-                   ls_ld_tmpdir=`ls -ld "$tmpdir"`
-                   case $ls_ld_tmpdir in
-                     d????-?r-*) different_mode=700;;
-                     d????-?--*) different_mode=755;;
-                     *) false;;
-                   esac &&
-                   $mkdirprog -m$different_mode -p -- "$tmpdir" && {
-                     ls_ld_tmpdir_1=`ls -ld "$tmpdir"`
-                     test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1"
-                   }
-                 }
-              then posix_mkdir=:
-              fi
-              rmdir "$tmpdir/d" "$tmpdir"
-            else
-              # Remove any dirs left behind by ancient mkdir implementations.
-              rmdir ./$mkdir_mode ./-p ./-- 2>/dev/null
-            fi
-            trap '' 0;;
-        esac;;
-    esac
-
-    if
-      $posix_mkdir && (
-        umask $mkdir_umask &&
-        $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir"
-      )
-    then :
-    else
-
-      # The umask is ridiculous, or mkdir does not conform to POSIX,
-      # or it failed possibly due to a race condition.  Create the
-      # directory the slow way, step by step, checking for races as we go.
-
-      case $dstdir in
-        /*) prefix='/';;
-        [-=\(\)!]*) prefix='./';;
-        *)  prefix='';;
-      esac
-
-      oIFS=$IFS
-      IFS=/
-      set -f
-      set fnord $dstdir
-      shift
-      set +f
-      IFS=$oIFS
-
-      prefixes=
-
-      for d
-      do
-        test X"$d" = X && continue
-
-        prefix=$prefix$d
-        if test -d "$prefix"; then
-          prefixes=
-        else
-          if $posix_mkdir; then
-            (umask=$mkdir_umask &&
-             $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break
-            # Don't fail if two instances are running concurrently.
-            test -d "$prefix" || exit 1
-          else
-            case $prefix in
-              *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;;
-              *) qprefix=$prefix;;
-            esac
-            prefixes="$prefixes '$qprefix'"
-          fi
-        fi
-        prefix=$prefix/
-      done
-
-      if test -n "$prefixes"; then
-        # Don't fail if two instances are running concurrently.
-        (umask $mkdir_umask &&
-         eval "\$doit_exec \$mkdirprog $prefixes") ||
-          test -d "$dstdir" || exit 1
-        obsolete_mkdir_used=true
-      fi
-    fi
-  fi
-
-  if test -n "$dir_arg"; then
-    { test -z "$chowncmd" || $doit $chowncmd "$dst"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } &&
-    { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false ||
-      test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1
-  else
-
-    # Make a couple of temp file names in the proper directory.
-    dsttmp=$dstdir/_inst.$$_
-    rmtmp=$dstdir/_rm.$$_
-
-    # Trap to clean up those temp files at exit.
-    trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0
-
-    # Copy the file name to the temp name.
-    (umask $cp_umask && $doit_exec $cpprog "$src" "$dsttmp") &&
-
-    # and set any options; do chmod last to preserve setuid bits.
-    #
-    # If any of these fail, we abort the whole thing.  If we want to
-    # ignore errors from any of these, just make sure not to ignore
-    # errors from the above "$doit $cpprog $src $dsttmp" command.
-    #
-    { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } &&
-    { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } &&
-    { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } &&
-    { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } &&
-
-    # If -C, don't bother to copy if it wouldn't change the file.
-    if $copy_on_change &&
-       old=`LC_ALL=C ls -dlL "$dst"     2>/dev/null` &&
-       new=`LC_ALL=C ls -dlL "$dsttmp"  2>/dev/null` &&
-       set -f &&
-       set X $old && old=:$2:$4:$5:$6 &&
-       set X $new && new=:$2:$4:$5:$6 &&
-       set +f &&
-       test "$old" = "$new" &&
-       $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1
-    then
-      rm -f "$dsttmp"
-    else
-      # Rename the file to the real destination.
-      $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null ||
-
-      # The rename failed, perhaps because mv can't rename something else
-      # to itself, or perhaps because mv is so ancient that it does not
-      # support -f.
-      {
-        # Now remove or move aside any old file at destination location.
-        # We try this two ways since rm can't unlink itself on some
-        # systems and the destination file might be busy for other
-        # reasons.  In this case, the final cleanup might fail but the new
-        # file should still install successfully.
-        {
-          test ! -f "$dst" ||
-          $doit $rmcmd -f "$dst" 2>/dev/null ||
-          { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null &&
-            { $doit $rmcmd -f "$rmtmp" 2>/dev/null; :; }
-          } ||
-          { echo "$0: cannot unlink or rename $dst" >&2
-            (exit 1); exit 1
-          }
-        } &&
-
-        # Now rename the file to the real destination.
-        $doit $mvcmd "$dsttmp" "$dst"
-      }
-    fi || exit 1
-
-    trap '' 0
-  fi
-done
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/src/libs/gnulib/build-aux/missing b/src/libs/gnulib/build-aux/missing
deleted file mode 100755 (executable)
index dada1ba..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-#! /bin/sh
-# Common stub for a few missing GNU programs while installing.
-
-scriptversion=2014-09-17.17; # UTC
-
-# Copyright (C) 1996-2014 Free Software Foundation, Inc.
-# Originally by Fran,cois Pinard <pinard@iro.umontreal.ca>, 1996.
-
-# 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, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-if test $# -eq 0; then
-  echo 1>&2 "Try '$0 --help' for more information"
-  exit 1
-fi
-
-run=:
-sed_output='s/.* --output[ =]\([^ ]*\).*/\1/p'
-sed_minuso='s/.* -o \([^ ]*\).*/\1/p'
-
-# In the cases where this matters, 'missing' is being run in the
-# srcdir already.
-if test -f configure.ac; then
-  configure_ac=configure.ac
-else
-  configure_ac=configure.in
-fi
-
-msg="missing on your system"
-
-case $1 in
---run)
-  # Try to run requested program, and just exit if it succeeds.
-  run=
-  shift
-  "$@" && exit 0
-  # Exit code 63 means version mismatch.  This often happens
-  # when the user try to use an ancient version of a tool on
-  # a file that requires a minimum version.  In this case we
-  # we should proceed has if the program had been absent, or
-  # if --run hadn't been passed.
-  if test $? = 63; then
-    run=:
-    msg="probably too old"
-  fi
-  ;;
-
-  -h|--h|--he|--hel|--help)
-    echo "\
-$0 [OPTION]... PROGRAM [ARGUMENT]...
-
-Handle 'PROGRAM [ARGUMENT]...' for when PROGRAM is missing, or return an
-error status if there is no known handling for PROGRAM.
-
-Options:
-  -h, --help      display this help and exit
-  -v, --version   output version information and exit
-  --run           try to run the given command, and emulate it if it fails
-
-Supported PROGRAM values:
-  aclocal      touch file 'aclocal.m4'
-  autoconf     touch file 'configure'
-  autoheader   touch file 'config.h.in'
-  autom4te     touch the output file, or create a stub one
-  automake     touch all 'Makefile.in' files
-  bison        create 'y.tab.[ch]', if possible, from existing .[ch]
-  flex         create 'lex.yy.c', if possible, from existing .c
-  help2man     touch the output file
-  lex          create 'lex.yy.c', if possible, from existing .c
-  makeinfo     touch the output file
-  yacc         create 'y.tab.[ch]', if possible, from existing .[ch]
-
-Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and
-'g' are ignored when checking the name.
-
-Send bug reports to <bug-automake@gnu.org>."
-    exit $?
-    ;;
-
-  -v|--v|--ve|--ver|--vers|--versi|--versio|--version)
-    echo "missing $scriptversion (GNU Automake)"
-    exit $?
-    ;;
-
-  -*)
-    echo 1>&2 "$0: Unknown '$1' option"
-    echo 1>&2 "Try '$0 --help' for more information"
-    exit 1
-    ;;
-
-esac
-
-# normalize program name to check for.
-program=`echo "$1" | sed '
-  s/^gnu-//; t
-  s/^gnu//; t
-  s/^g//; t'`
-
-# Now exit if we have it, but it failed.  Also exit now if we
-# don't have it and --version was passed (most likely to detect
-# the program).  This is about non-GNU programs, so use $1 not
-# $program.
-case $1 in
-  lex*|yacc*)
-    # Not GNU programs, they don't have --version.
-    ;;
-
-  *)
-    if test -z "$run" && ($1 --version) > /dev/null 2>&1; then
-       # We have it, but it failed.
-       exit 1
-    elif test "x$2" = "x--version" || test "x$2" = "x--help"; then
-       # Could not run --version or --help.  This is probably someone
-       # running '$TOOL --version' or '$TOOL --help' to check whether
-       # $TOOL exists and not knowing $TOOL uses missing.
-       exit 1
-    fi
-    ;;
-esac
-
-# If it does not exist, or fails to run (possibly an outdated version),
-# try to emulate it.
-case $program in
-  aclocal*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'acinclude.m4' or '${configure_ac}'.  You might want
-         to install the Automake and Perl packages.  Grab them from
-         any GNU archive site."
-    touch aclocal.m4
-    ;;
-
-  autoconf*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified '${configure_ac}'.  You might want to install the
-         Autoconf and GNU m4 packages.  Grab them from any GNU
-         archive site."
-    touch configure
-    ;;
-
-  autoheader*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'acconfig.h' or '${configure_ac}'.  You might want
-         to install the Autoconf and GNU m4 packages.  Grab them
-         from any GNU archive site."
-    files=`sed -n 's/^[ ]*A[CM]_CONFIG_HEADER(\([^)]*\)).*/\1/p' ${configure_ac}`
-    test -z "$files" && files="config.h"
-    touch_files=
-    for f in $files; do
-      case $f in
-      *:*) touch_files="$touch_files "`echo "$f" |
-                                      sed -e 's/^[^:]*://' -e 's/:.*//'`;;
-      *) touch_files="$touch_files $f.in";;
-      esac
-    done
-    touch $touch_files
-    ;;
-
-  automake*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified 'Makefile.am', 'acinclude.m4' or '${configure_ac}'.
-         You might want to install the Automake and Perl packages.
-         Grab them from any GNU archive site."
-    find . -type f -name Makefile.am -print |
-          sed 's/\.am$/.in/' |
-          while read f; do touch "$f"; done
-    ;;
-
-  autom4te*)
-    echo 1>&2 "\
-WARNING: '$1' is needed, but is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.
-         You can get '$1' as part of Autoconf from any GNU
-         archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-       touch $file
-    else
-       test -z "$file" || exec >$file
-       echo "#! /bin/sh"
-       echo "# Created by GNU Automake missing as a replacement of"
-       echo "#  $ $@"
-       echo "exit 0"
-       chmod +x $file
-       exit 1
-    fi
-    ;;
-
-  bison*|yacc*)
-    echo 1>&2 "\
-WARNING: '$1' $msg.  You should only need it if
-         you modified a '.y' file.  You may need the Bison package
-         in order for those modifications to take effect.  You can get
-         Bison from any GNU archive site."
-    rm -f y.tab.c y.tab.h
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-       case $LASTARG in
-       *.y)
-           SRCFILE=`echo "$LASTARG" | sed 's/y$/c/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" y.tab.c
-           fi
-           SRCFILE=`echo "$LASTARG" | sed 's/y$/h/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" y.tab.h
-           fi
-         ;;
-       esac
-    fi
-    if test ! -f y.tab.h; then
-       echo >y.tab.h
-    fi
-    if test ! -f y.tab.c; then
-       echo 'main() { return 0; }' >y.tab.c
-    fi
-    ;;
-
-  lex*|flex*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified a '.l' file.  You may need the Flex package
-         in order for those modifications to take effect.  You can get
-         Flex from any GNU archive site."
-    rm -f lex.yy.c
-    if test $# -ne 1; then
-        eval LASTARG=\${$#}
-       case $LASTARG in
-       *.l)
-           SRCFILE=`echo "$LASTARG" | sed 's/l$/c/'`
-           if test -f "$SRCFILE"; then
-                cp "$SRCFILE" lex.yy.c
-           fi
-         ;;
-       esac
-    fi
-    if test ! -f lex.yy.c; then
-       echo 'main() { return 0; }' >lex.yy.c
-    fi
-    ;;
-
-  help2man*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-        you modified a dependency of a manual page.  You may need the
-        Help2man package in order for those modifications to take
-        effect.  You can get Help2man from any GNU archive site."
-
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -f "$file"; then
-       touch $file
-    else
-       test -z "$file" || exec >$file
-       echo ".ab help2man is required to generate this page"
-       exit $?
-    fi
-    ;;
-
-  makeinfo*)
-    echo 1>&2 "\
-WARNING: '$1' is $msg.  You should only need it if
-         you modified a '.texi' or '.texinfo' file, or any other file
-         indirectly affecting the aspect of the manual.  The spurious
-         call might also be the consequence of using a buggy 'make' (AIX,
-         DU, IRIX).  You might want to install the Texinfo package or
-         the GNU make package.  Grab either from any GNU archive site."
-    # The file to touch is that specified with -o ...
-    file=`echo "$*" | sed -n "$sed_output"`
-    test -z "$file" && file=`echo "$*" | sed -n "$sed_minuso"`
-    if test -z "$file"; then
-      # ... or it is the one specified with @setfilename ...
-      infile=`echo "$*" | sed 's/.* \([^ ]*\) *$/\1/'`
-      file=`sed -n '
-       /^@setfilename/{
-         s/.* \([^ ]*\) *$/\1/
-         p
-         q
-       }' $infile`
-      # ... or it is derived from the source name (dir/f.texi becomes f.info)
-      test -z "$file" && file=`echo "$infile" | sed 's,.*/,,;s,.[^.]*$,,'`.info
-    fi
-    # If the file does not exist, the user really needs makeinfo;
-    # let's fail without touching anything.
-    test -f $file || exit 1
-    touch $file
-    ;;
-
-  *)
-    echo 1>&2 "\
-WARNING: '$1' is needed, and is $msg.
-         You might have modified some files without having the
-         proper tools for further handling them.  Check the 'README' file,
-         it often tells you about the needed prerequisites for installing
-         this package.  You may also peek at any GNU archive site, in case
-         some other package would contain this missing '$1' program."
-    exit 1
-    ;;
-esac
-
-exit 0
-
-# Local variables:
-# eval: (add-hook 'write-file-hooks 'time-stamp)
-# time-stamp-start: "scriptversion="
-# time-stamp-format: "%:y-%02m-%02d.%02H"
-# time-stamp-time-zone: "UTC"
-# time-stamp-end: "; # UTC"
-# End:
diff --git a/src/libs/gnulib/build-aux/snippet/arg-nonnull.h b/src/libs/gnulib/build-aux/snippet/arg-nonnull.h
deleted file mode 100644 (file)
index 48742df..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-/* A C macro for declaring that specific arguments must not be NULL.
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools
-   that the values passed as arguments n, ..., m must be non-NULL pointers.
-   n = 1 stands for the first argument, n = 2 for the second argument etc.  */
-#ifndef _GL_ARG_NONNULL
-# if (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || __GNUC__ > 3
-#  define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params))
-# else
-#  define _GL_ARG_NONNULL(params)
-# endif
-#endif
diff --git a/src/libs/gnulib/build-aux/snippet/c++defs.h b/src/libs/gnulib/build-aux/snippet/c++defs.h
deleted file mode 100644 (file)
index 254498a..0000000
+++ /dev/null
@@ -1,271 +0,0 @@
-/* C++ compatible function declaration macros.
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _GL_CXXDEFS_H
-#define _GL_CXXDEFS_H
-
-/* The three most frequent use cases of these macros are:
-
-   * For providing a substitute for a function that is missing on some
-     platforms, but is declared and works fine on the platforms on which
-     it exists:
-
-       #if @GNULIB_FOO@
-       # if !@HAVE_FOO@
-       _GL_FUNCDECL_SYS (foo, ...);
-       # endif
-       _GL_CXXALIAS_SYS (foo, ...);
-       _GL_CXXALIASWARN (foo);
-       #elif defined GNULIB_POSIXCHECK
-       ...
-       #endif
-
-   * For providing a replacement for a function that exists on all platforms,
-     but is broken/insufficient and needs to be replaced on some platforms:
-
-       #if @GNULIB_FOO@
-       # if @REPLACE_FOO@
-       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-       #   undef foo
-       #   define foo rpl_foo
-       #  endif
-       _GL_FUNCDECL_RPL (foo, ...);
-       _GL_CXXALIAS_RPL (foo, ...);
-       # else
-       _GL_CXXALIAS_SYS (foo, ...);
-       # endif
-       _GL_CXXALIASWARN (foo);
-       #elif defined GNULIB_POSIXCHECK
-       ...
-       #endif
-
-   * For providing a replacement for a function that exists on some platforms
-     but is broken/insufficient and needs to be replaced on some of them and
-     is additionally either missing or undeclared on some other platforms:
-
-       #if @GNULIB_FOO@
-       # if @REPLACE_FOO@
-       #  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-       #   undef foo
-       #   define foo rpl_foo
-       #  endif
-       _GL_FUNCDECL_RPL (foo, ...);
-       _GL_CXXALIAS_RPL (foo, ...);
-       # else
-       #  if !@HAVE_FOO@   or   if !@HAVE_DECL_FOO@
-       _GL_FUNCDECL_SYS (foo, ...);
-       #  endif
-       _GL_CXXALIAS_SYS (foo, ...);
-       # endif
-       _GL_CXXALIASWARN (foo);
-       #elif defined GNULIB_POSIXCHECK
-       ...
-       #endif
-*/
-
-/* _GL_EXTERN_C declaration;
-   performs the declaration with C linkage.  */
-#if defined __cplusplus
-# define _GL_EXTERN_C extern "C"
-#else
-# define _GL_EXTERN_C extern
-#endif
-
-/* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes);
-   declares a replacement function, named rpl_func, with the given prototype,
-   consisting of return type, parameters, and attributes.
-   Example:
-     _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...)
-                                  _GL_ARG_NONNULL ((1)));
- */
-#define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \
-  _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes)
-#define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \
-  _GL_EXTERN_C rettype rpl_func parameters_and_attributes
-
-/* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes);
-   declares the system function, named func, with the given prototype,
-   consisting of return type, parameters, and attributes.
-   Example:
-     _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...)
-                                  _GL_ARG_NONNULL ((1)));
- */
-#define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \
-  _GL_EXTERN_C rettype func parameters_and_attributes
-
-/* _GL_CXXALIAS_RPL (func, rettype, parameters);
-   declares a C++ alias called GNULIB_NAMESPACE::func
-   that redirects to rpl_func, if GNULIB_NAMESPACE is defined.
-   Example:
-     _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...));
- */
-#define _GL_CXXALIAS_RPL(func,rettype,parameters) \
-  _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters)
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                                \
-    {                                                         \
-      rettype (*const func) parameters = ::rpl_func;          \
-    }                                                         \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters);
-   is like  _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters);
-   except that the C function rpl_func may have a slightly different
-   declaration.  A cast is used to silence the "invalid conversion" error
-   that would otherwise occur.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                                     \
-    {                                                              \
-      rettype (*const func) parameters =                           \
-        reinterpret_cast<rettype(*)parameters>(::rpl_func);        \
-    }                                                              \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_SYS (func, rettype, parameters);
-   declares a C++ alias called GNULIB_NAMESPACE::func
-   that redirects to the system provided function func, if GNULIB_NAMESPACE
-   is defined.
-   Example:
-     _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...));
- */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-  /* If we were to write
-       rettype (*const func) parameters = ::func;
-     like above in _GL_CXXALIAS_RPL_1, the compiler could optimize calls
-     better (remove an indirection through a 'static' pointer variable),
-     but then the _GL_CXXALIASWARN macro below would cause a warning not only
-     for uses of ::func but also for uses of GNULIB_NAMESPACE::func.  */
-# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                     \
-    {                                              \
-      static rettype (*func) parameters = ::func;  \
-    }                                              \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_SYS(func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters);
-   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
-   except that the C function func may have a slightly different declaration.
-   A cast is used to silence the "invalid conversion" error that would
-   otherwise occur.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
-    namespace GNULIB_NAMESPACE                          \
-    {                                                   \
-      static rettype (*func) parameters =               \
-        reinterpret_cast<rettype(*)parameters>(::func); \
-    }                                                   \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2);
-   is like  _GL_CXXALIAS_SYS (func, rettype, parameters);
-   except that the C function is picked among a set of overloaded functions,
-   namely the one with rettype2 and parameters2.  Two consecutive casts
-   are used to silence the "cannot find a match" and "invalid conversion"
-   errors that would otherwise occur.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-  /* The outer cast must be a reinterpret_cast.
-     The inner cast: When the function is defined as a set of overloaded
-     functions, it works as a static_cast<>, choosing the designated variant.
-     When the function is defined as a single variant, it works as a
-     reinterpret_cast<>. The parenthesized cast syntax works both ways.  */
-# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
-    namespace GNULIB_NAMESPACE                                                \
-    {                                                                         \
-      static rettype (*func) parameters =                                     \
-        reinterpret_cast<rettype(*)parameters>(                               \
-          (rettype2(*)parameters2)(::func));                                  \
-    }                                                                         \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#else
-# define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIASWARN (func);
-   causes a warning to be emitted when ::func is used but not when
-   GNULIB_NAMESPACE::func is used.  func must be defined without overloaded
-   variants.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIASWARN(func) \
-   _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE)
-# define _GL_CXXALIASWARN_1(func,namespace) \
-   _GL_CXXALIASWARN_2 (func, namespace)
-/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
-   we enable the warning only when not optimizing.  */
-# if !__OPTIMIZE__
-#  define _GL_CXXALIASWARN_2(func,namespace) \
-    _GL_WARN_ON_USE (func, \
-                     "The symbol ::" #func " refers to the system function. " \
-                     "Use " #namespace "::" #func " instead.")
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-#  define _GL_CXXALIASWARN_2(func,namespace) \
-     extern __typeof__ (func) func
-# else
-#  define _GL_CXXALIASWARN_2(func,namespace) \
-     _GL_EXTERN_C int _gl_cxxalias_dummy
-# endif
-#else
-# define _GL_CXXALIASWARN(func) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-/* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes);
-   causes a warning to be emitted when the given overloaded variant of ::func
-   is used but not when GNULIB_NAMESPACE::func is used.  */
-#if defined __cplusplus && defined GNULIB_NAMESPACE
-# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
-   _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \
-                        GNULIB_NAMESPACE)
-# define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \
-   _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace)
-/* To work around GCC bug <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>,
-   we enable the warning only when not optimizing.  */
-# if !__OPTIMIZE__
-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
-    _GL_WARN_ON_USE_CXX (func, rettype, parameters_and_attributes, \
-                         "The symbol ::" #func " refers to the system function. " \
-                         "Use " #namespace "::" #func " instead.")
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
-     extern __typeof__ (func) func
-# else
-#  define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \
-     _GL_EXTERN_C int _gl_cxxalias_dummy
-# endif
-#else
-# define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \
-    _GL_EXTERN_C int _gl_cxxalias_dummy
-#endif
-
-#endif /* _GL_CXXDEFS_H */
diff --git a/src/libs/gnulib/build-aux/snippet/warn-on-use.h b/src/libs/gnulib/build-aux/snippet/warn-on-use.h
deleted file mode 100644 (file)
index ae0515c..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-/* A C macro for emitting warnings if a function is used.
-   Copyright (C) 2010-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* _GL_WARN_ON_USE (function, "literal string") issues a declaration
-   for FUNCTION which will then trigger a compiler warning containing
-   the text of "literal string" anywhere that function is called, if
-   supported by the compiler.  If the compiler does not support this
-   feature, the macro expands to an unused extern declaration.
-
-   This macro is useful for marking a function as a potential
-   portability trap, with the intent that "literal string" include
-   instructions on the replacement function that should be used
-   instead.  However, one of the reasons that a function is a
-   portability trap is if it has the wrong signature.  Declaring
-   FUNCTION with a different signature in C is a compilation error, so
-   this macro must use the same type as any existing declaration so
-   that programs that avoid the problematic FUNCTION do not fail to
-   compile merely because they included a header that poisoned the
-   function.  But this implies that _GL_WARN_ON_USE is only safe to
-   use if FUNCTION is known to already have a declaration.  Use of
-   this macro implies that there must not be any other macro hiding
-   the declaration of FUNCTION; but undefining FUNCTION first is part
-   of the poisoning process anyway (although for symbols that are
-   provided only via a macro, the result is a compilation error rather
-   than a warning containing "literal string").  Also note that in
-   C++, it is only safe to use if FUNCTION has no overloads.
-
-   For an example, it is possible to poison 'getline' by:
-   - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]],
-     [getline]) in configure.ac, which potentially defines
-     HAVE_RAW_DECL_GETLINE
-   - adding this code to a header that wraps the system <stdio.h>:
-     #undef getline
-     #if HAVE_RAW_DECL_GETLINE
-     _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but"
-       "not universally present; use the gnulib module getline");
-     #endif
-
-   It is not possible to directly poison global variables.  But it is
-   possible to write a wrapper accessor function, and poison that
-   (less common usage, like &environ, will cause a compilation error
-   rather than issue the nice warning, but the end result of informing
-   the developer about their portability problem is still achieved):
-   #if HAVE_RAW_DECL_ENVIRON
-   static char ***rpl_environ (void) { return &environ; }
-   _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared");
-   # undef environ
-   # define environ (*rpl_environ ())
-   #endif
-   */
-#ifndef _GL_WARN_ON_USE
-
-# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
-/* A compiler attribute is available in gcc versions 4.3.0 and later.  */
-#  define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function __attribute__ ((__warning__ (message)))
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-/* Verify the existence of the function.  */
-#  define _GL_WARN_ON_USE(function, message) \
-extern __typeof__ (function) function
-# else /* Unsupported.  */
-#  define _GL_WARN_ON_USE(function, message) \
-_GL_WARN_EXTERN_C int _gl_warn_on_use
-# endif
-#endif
-
-/* _GL_WARN_ON_USE_CXX (function, rettype, parameters_and_attributes, "string")
-   is like _GL_WARN_ON_USE (function, "string"), except that the function is
-   declared with the given prototype, consisting of return type, parameters,
-   and attributes.
-   This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does
-   not work in this case.  */
-#ifndef _GL_WARN_ON_USE_CXX
-# if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__)
-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
-extern rettype function parameters_and_attributes \
-     __attribute__ ((__warning__ (msg)))
-# elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING
-/* Verify the existence of the function.  */
-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
-extern rettype function parameters_and_attributes
-# else /* Unsupported.  */
-#  define _GL_WARN_ON_USE_CXX(function,rettype,parameters_and_attributes,msg) \
-_GL_WARN_EXTERN_C int _gl_warn_on_use
-# endif
-#endif
-
-/* _GL_WARN_EXTERN_C declaration;
-   performs the declaration with C linkage.  */
-#ifndef _GL_WARN_EXTERN_C
-# if defined __cplusplus
-#  define _GL_WARN_EXTERN_C extern "C"
-# else
-#  define _GL_WARN_EXTERN_C extern
-# endif
-#endif
diff --git a/src/libs/gnulib/config.h.in b/src/libs/gnulib/config.h.in
deleted file mode 100644 (file)
index e92dd75..0000000
+++ /dev/null
@@ -1,457 +0,0 @@
-/* config.h.in.  Generated from configure.ac by autoheader.  */
-
-/* Define to the number of bits in type 'ptrdiff_t'. */
-#undef BITSIZEOF_PTRDIFF_T
-
-/* Define to the number of bits in type 'sig_atomic_t'. */
-#undef BITSIZEOF_SIG_ATOMIC_T
-
-/* Define to the number of bits in type 'size_t'. */
-#undef BITSIZEOF_SIZE_T
-
-/* Define to the number of bits in type 'wchar_t'. */
-#undef BITSIZEOF_WCHAR_T
-
-/* Define to the number of bits in type 'wint_t'. */
-#undef BITSIZEOF_WINT_T
-
-/* Define to 1 when the gnulib module wcwidth should be tested. */
-#undef GNULIB_TEST_WCWIDTH
-
-/* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you
-   don't. */
-#undef HAVE_DECL_GETC_UNLOCKED
-
-/* Define to 1 if you have the declaration of `towlower', and to 0 if you
-   don't. */
-#undef HAVE_DECL_TOWLOWER
-
-/* Define to 1 if you have the declaration of `wcwidth', and to 0 if you
-   don't. */
-#undef HAVE_DECL_WCWIDTH
-
-/* Define to 1 if you have the <features.h> header file. */
-#undef HAVE_FEATURES_H
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#undef HAVE_INTTYPES_H
-
-/* Define to 1 if you have the 'iswcntrl' function. */
-#undef HAVE_ISWCNTRL
-
-/* Define if you have <langinfo.h> and nl_langinfo(CODESET). */
-#undef HAVE_LANGINFO_CODESET
-
-/* Define to 1 if the system has the type 'long long int'. */
-#undef HAVE_LONG_LONG_INT
-
-/* Define to 1 if you have the <memory.h> header file. */
-#undef HAVE_MEMORY_H
-
-/* Define to 1 if btowc is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_BTOWC
-
-/* Define to 1 if imaxabs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_IMAXABS
-
-/* Define to 1 if imaxdiv is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_IMAXDIV
-
-/* Define to 1 if iswctype is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_ISWCTYPE
-
-/* Define to 1 if mbrlen is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBRLEN
-
-/* Define to 1 if mbrtowc is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBRTOWC
-
-/* Define to 1 if mbsinit is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBSINIT
-
-/* Define to 1 if mbsnrtowcs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBSNRTOWCS
-
-/* Define to 1 if mbsrtowcs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_MBSRTOWCS
-
-/* Define to 1 if strtoimax is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRTOIMAX
-
-/* Define to 1 if strtoumax is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_STRTOUMAX
-
-/* Define to 1 if towctrans is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_TOWCTRANS
-
-/* Define to 1 if wcpcpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCPCPY
-
-/* Define to 1 if wcpncpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCPNCPY
-
-/* Define to 1 if wcrtomb is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCRTOMB
-
-/* Define to 1 if wcscasecmp is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCASECMP
-
-/* Define to 1 if wcscat is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCAT
-
-/* Define to 1 if wcschr is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCHR
-
-/* Define to 1 if wcscmp is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCMP
-
-/* Define to 1 if wcscoll is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCOLL
-
-/* Define to 1 if wcscpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCPY
-
-/* Define to 1 if wcscspn is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSCSPN
-
-/* Define to 1 if wcsdup is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSDUP
-
-/* Define to 1 if wcslen is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSLEN
-
-/* Define to 1 if wcsncasecmp is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNCASECMP
-
-/* Define to 1 if wcsncat is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNCAT
-
-/* Define to 1 if wcsncmp is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNCMP
-
-/* Define to 1 if wcsncpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNCPY
-
-/* Define to 1 if wcsnlen is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNLEN
-
-/* Define to 1 if wcsnrtombs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSNRTOMBS
-
-/* Define to 1 if wcspbrk is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSPBRK
-
-/* Define to 1 if wcsrchr is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSRCHR
-
-/* Define to 1 if wcsrtombs is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSRTOMBS
-
-/* Define to 1 if wcsspn is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSSPN
-
-/* Define to 1 if wcsstr is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSSTR
-
-/* Define to 1 if wcstok is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSTOK
-
-/* Define to 1 if wcswidth is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSWIDTH
-
-/* Define to 1 if wcsxfrm is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCSXFRM
-
-/* Define to 1 if wctob is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCTOB
-
-/* Define to 1 if wctrans is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCTRANS
-
-/* Define to 1 if wctype is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCTYPE
-
-/* Define to 1 if wcwidth is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WCWIDTH
-
-/* Define to 1 if wmemchr is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WMEMCHR
-
-/* Define to 1 if wmemcmp is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WMEMCMP
-
-/* Define to 1 if wmemcpy is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WMEMCPY
-
-/* Define to 1 if wmemmove is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WMEMMOVE
-
-/* Define to 1 if wmemset is declared even after undefining macros. */
-#undef HAVE_RAW_DECL_WMEMSET
-
-/* Define to 1 if 'sig_atomic_t' is a signed integer type. */
-#undef HAVE_SIGNED_SIG_ATOMIC_T
-
-/* Define to 1 if 'wchar_t' is a signed integer type. */
-#undef HAVE_SIGNED_WCHAR_T
-
-/* Define to 1 if 'wint_t' is a signed integer type. */
-#undef HAVE_SIGNED_WINT_T
-
-/* Define to 1 if you have the <stdint.h> header file. */
-#undef HAVE_STDINT_H
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#undef HAVE_STDLIB_H
-
-/* Define to 1 if you have the <strings.h> header file. */
-#undef HAVE_STRINGS_H
-
-/* Define to 1 if you have the <string.h> header file. */
-#undef HAVE_STRING_H
-
-/* Define to 1 if you have the 'symlink' function. */
-#undef HAVE_SYMLINK
-
-/* Define to 1 if you have the <sys/bitypes.h> header file. */
-#undef HAVE_SYS_BITYPES_H
-
-/* Define to 1 if you have the <sys/inttypes.h> header file. */
-#undef HAVE_SYS_INTTYPES_H
-
-/* Define to 1 if you have the <sys/stat.h> header file. */
-#undef HAVE_SYS_STAT_H
-
-/* Define to 1 if you have the <sys/types.h> header file. */
-#undef HAVE_SYS_TYPES_H
-
-/* Define to 1 if you have the `towlower' function. */
-#undef HAVE_TOWLOWER
-
-/* Define to 1 if you have the <unistd.h> header file. */
-#undef HAVE_UNISTD_H
-
-/* Define to 1 if the system has the type 'unsigned long long int'. */
-#undef HAVE_UNSIGNED_LONG_LONG_INT
-
-/* Define to 1 if you have the <wchar.h> header file. */
-#undef HAVE_WCHAR_H
-
-/* Define if you have the 'wchar_t' type. */
-#undef HAVE_WCHAR_T
-
-/* Define to 1 if you have the <wctype.h> header file. */
-#undef HAVE_WCTYPE_H
-
-/* Define to 1 if you have the 'wcwidth' function. */
-#undef HAVE_WCWIDTH
-
-/* Define if you have the 'wint_t' type. */
-#undef HAVE_WINT_T
-
-/* Define to 1 if O_NOATIME works. */
-#undef HAVE_WORKING_O_NOATIME
-
-/* Define to 1 if O_NOFOLLOW works. */
-#undef HAVE_WORKING_O_NOFOLLOW
-
-/* Define to 1 if the system has the type `_Bool'. */
-#undef HAVE__BOOL
-
-/* Name of package */
-#undef PACKAGE
-
-/* Define to the address where bug reports for this package should be sent. */
-#undef PACKAGE_BUGREPORT
-
-/* Define to the full name of this package. */
-#undef PACKAGE_NAME
-
-/* Define to the full name and version of this package. */
-#undef PACKAGE_STRING
-
-/* Define to the one symbol short name of this package. */
-#undef PACKAGE_TARNAME
-
-/* Define to the home page for this package. */
-#undef PACKAGE_URL
-
-/* Define to the version of this package. */
-#undef PACKAGE_VERSION
-
-/* Define if <inttypes.h> exists and defines unusable PRI* macros. */
-#undef PRI_MACROS_BROKEN
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'ptrdiff_t'. */
-#undef PTRDIFF_T_SUFFIX
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'sig_atomic_t'. */
-#undef SIG_ATOMIC_T_SUFFIX
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'size_t'. */
-#undef SIZE_T_SUFFIX
-
-/* Define to 1 if you have the ANSI C header files. */
-#undef STDC_HEADERS
-
-/* Enable extensions on AIX 3, Interix.  */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-/* Enable general extensions on OS X.  */
-#ifndef _DARWIN_C_SOURCE
-# undef _DARWIN_C_SOURCE
-#endif
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-/* Enable threading extensions on Solaris.  */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-/* Enable extensions on HP NonStop.  */
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-/* Enable X/Open extensions if necessary.  HP-UX 11.11 defines
-   mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of
-   whether compiling with -Ae or -D_HPUX_SOURCE=1.  */
-#ifndef _XOPEN_SOURCE
-# undef _XOPEN_SOURCE
-#endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-
-
-/* Version number of package */
-#undef VERSION
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'wchar_t'. */
-#undef WCHAR_T_SUFFIX
-
-/* Define to l, ll, u, ul, ull, etc., as suitable for constants of type
-   'wint_t'. */
-#undef WINT_T_SUFFIX
-
-/* Define to 1 if on MINIX. */
-#undef _MINIX
-
-/* Define to 1 to make NetBSD features available. MINIX 3 needs this. */
-#undef _NETBSD_SOURCE
-
-/* The _Noreturn keyword of C11.  */
-#if ! (defined _Noreturn \
-       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
-# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
-      || 0x5110 <= __SUNPRO_C)
-#  define _Noreturn __attribute__ ((__noreturn__))
-# elif defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn
-# endif
-#endif
-
-
-/* Define to 2 if the system does not provide POSIX.1 features except with
-   this defined. */
-#undef _POSIX_1_SOURCE
-
-/* Define to 1 if you need to in order for 'stat' and other things to work. */
-#undef _POSIX_SOURCE
-
-/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'.
-   _GL_EXTERN_INLINE is a portable alternative to 'extern inline'.
-   _GL_INLINE_HEADER_BEGIN contains useful stuff to put
-     in an include file, before uses of _GL_INLINE.
-     It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic,
-     when FOO is an inline function in the header; see
-     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.
-   _GL_INLINE_HEADER_END contains useful stuff to put
-     in the same include file, after uses of _GL_INLINE.
-
-   Suppress the use of extern inline on Apple's platforms,
-   as Libc-825.25 (2012-09-19) is incompatible with it; see
-   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
-   Perhaps Apple will fix this some day.  */
-#if ((__GNUC__ \
-      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
-      : 199901L <= __STDC_VERSION__) \
-     && !defined __APPLE__)
-# define _GL_INLINE inline
-# define _GL_EXTERN_INLINE extern inline
-#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
-# if __GNUC_GNU_INLINE__
-   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
-#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
-# else
-#  define _GL_INLINE extern inline
-# endif
-# define _GL_EXTERN_INLINE extern
-#else
-# define _GL_INLINE static _GL_UNUSED
-# define _GL_EXTERN_INLINE static _GL_UNUSED
-#endif
-
-#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
-# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
-#  define _GL_INLINE_HEADER_CONST_PRAGMA
-# else
-#  define _GL_INLINE_HEADER_CONST_PRAGMA \
-     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
-# endif
-# define _GL_INLINE_HEADER_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
-    _GL_INLINE_HEADER_CONST_PRAGMA
-# define _GL_INLINE_HEADER_END \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define _GL_INLINE_HEADER_BEGIN
-# define _GL_INLINE_HEADER_END
-#endif
-
-/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
-   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
-   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
-   __APPLE__ && __MACH__ test for Mac OS X.
-   __APPLE_CC__ tests for the Apple compiler and its version.
-   __STDC_VERSION__ tests for the C99 mode.  */
-#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
-# define __GNUC_STDC_INLINE__ 1
-#endif
-
-/* Define as a marker that can be attached to declarations that might not
-    be used.  This helps to reduce warnings, such as from
-    GCC -Wunused-parameter.  */
-#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-# define _GL_UNUSED __attribute__ ((__unused__))
-#else
-# define _GL_UNUSED
-#endif
-/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
-   is a misnomer outside of parameter lists.  */
-#define _UNUSED_PARAMETER_ _GL_UNUSED
-
-/* The __pure__ attribute was added in gcc 2.96.  */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
-# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
-#else
-# define _GL_ATTRIBUTE_PURE /* empty */
-#endif
-
-/* The __const__ attribute was added in gcc 2.95.  */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
-# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
-#else
-# define _GL_ATTRIBUTE_CONST /* empty */
-#endif
-
diff --git a/src/libs/gnulib/configure b/src/libs/gnulib/configure
deleted file mode 100755 (executable)
index e55c825..0000000
+++ /dev/null
@@ -1,9840 +0,0 @@
-#! /bin/sh
-# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for dummy 0.
-#
-#
-# Copyright (C) 1992-1996, 1998-2012 Free Software Foundation, Inc.
-#
-#
-# This configure script is free software; the Free Software Foundation
-# gives unlimited permission to copy, distribute and modify it.
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-# Use a proper internal environment variable to ensure we don't fall
-  # into an infinite loop, continuously re-executing ourselves.
-  if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then
-    _as_can_reexec=no; export _as_can_reexec;
-    # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-as_fn_exit 255
-  fi
-  # We don't want this to propagate to other subprocesses.
-          { _as_can_reexec=; unset _as_can_reexec;}
-if test "x$CONFIG_SHELL" = x; then
-  as_bourne_compatible="if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on \${1+\"\$@\"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '\${1+\"\$@\"}'='\"\$@\"'
-  setopt NO_GLOB_SUBST
-else
-  case \`(set -o) 2>/dev/null\` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-"
-  as_required="as_fn_return () { (exit \$1); }
-as_fn_success () { as_fn_return 0; }
-as_fn_failure () { as_fn_return 1; }
-as_fn_ret_success () { return 0; }
-as_fn_ret_failure () { return 1; }
-
-exitcode=0
-as_fn_success || { exitcode=1; echo as_fn_success failed.; }
-as_fn_failure && { exitcode=1; echo as_fn_failure succeeded.; }
-as_fn_ret_success || { exitcode=1; echo as_fn_ret_success failed.; }
-as_fn_ret_failure && { exitcode=1; echo as_fn_ret_failure succeeded.; }
-if ( set x; as_fn_ret_success y && test x = \"\$1\" ); then :
-
-else
-  exitcode=1; echo positional parameters were not saved.
-fi
-test x\$exitcode = x0 || exit 1
-test -x / || exit 1"
-  as_suggested="  as_lineno_1=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_1a=\$LINENO
-  as_lineno_2=";as_suggested=$as_suggested$LINENO;as_suggested=$as_suggested" as_lineno_2a=\$LINENO
-  eval 'test \"x\$as_lineno_1'\$as_run'\" != \"x\$as_lineno_2'\$as_run'\" &&
-  test \"x\`expr \$as_lineno_1'\$as_run' + 1\`\" = \"x\$as_lineno_2'\$as_run'\"' || exit 1
-test \$(( 1 + 1 )) = 2 || exit 1"
-  if (eval "$as_required") 2>/dev/null; then :
-  as_have_required=yes
-else
-  as_have_required=no
-fi
-  if test x$as_have_required = xyes && (eval "$as_suggested") 2>/dev/null; then :
-
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-as_found=false
-for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-  as_found=:
-  case $as_dir in #(
-        /*)
-          for as_base in sh bash ksh sh5; do
-            # Try only shells that exist, to save several forks.
-            as_shell=$as_dir/$as_base
-            if { test -f "$as_shell" || test -f "$as_shell.exe"; } &&
-                   { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  CONFIG_SHELL=$as_shell as_have_required=yes
-                  if { $as_echo "$as_bourne_compatible""$as_suggested" | as_run=a "$as_shell"; } 2>/dev/null; then :
-  break 2
-fi
-fi
-          done;;
-       esac
-  as_found=false
-done
-$as_found || { if { test -f "$SHELL" || test -f "$SHELL.exe"; } &&
-             { $as_echo "$as_bourne_compatible""$as_required" | as_run=a "$SHELL"; } 2>/dev/null; then :
-  CONFIG_SHELL=$SHELL as_have_required=yes
-fi; }
-IFS=$as_save_IFS
-
-
-      if test "x$CONFIG_SHELL" != x; then :
-  export CONFIG_SHELL
-             # We cannot yet assume a decent shell, so we have to provide a
-# neutralization value for shells without unset; and this also
-# works around shells that cannot unset nonexistent variables.
-# Preserve -v and -x to the replacement shell.
-BASH_ENV=/dev/null
-ENV=/dev/null
-(unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV
-case $- in # ((((
-  *v*x* | *x*v* ) as_opts=-vx ;;
-  *v* ) as_opts=-v ;;
-  *x* ) as_opts=-x ;;
-  * ) as_opts= ;;
-esac
-exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"}
-# Admittedly, this is quite paranoid, since all the known shells bail
-# out after a failed `exec'.
-$as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2
-exit 255
-fi
-
-    if test x$as_have_required = xno; then :
-  $as_echo "$0: This script requires a shell more modern than all"
-  $as_echo "$0: the shells that I found on your system."
-  if test x${ZSH_VERSION+set} = xset ; then
-    $as_echo "$0: In particular, zsh $ZSH_VERSION has bugs and should"
-    $as_echo "$0: be upgraded to zsh 4.3.4 or later."
-  else
-    $as_echo "$0: Please tell bug-autoconf@gnu.org about your system,
-$0: including any error possibly output before this
-$0: message. Then install a modern shell, or manually run
-$0: the script under such a shell if you do have one."
-  fi
-  exit 1
-fi
-fi
-fi
-SHELL=${CONFIG_SHELL-/bin/sh}
-export SHELL
-# Unset more variables known to interfere with behavior of common tools.
-CLICOLOR_FORCE= GREP_OPTIONS=
-unset CLICOLOR_FORCE GREP_OPTIONS
-
-## --------------------- ##
-## M4sh Shell Functions. ##
-## --------------------- ##
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$as_dir" : 'X\(//\)[^/]' \| \
-        X"$as_dir" : 'X\(//\)$' \| \
-        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-
-  as_lineno_1=$LINENO as_lineno_1a=$LINENO
-  as_lineno_2=$LINENO as_lineno_2a=$LINENO
-  eval 'test "x$as_lineno_1'$as_run'" != "x$as_lineno_2'$as_run'" &&
-  test "x`expr $as_lineno_1'$as_run' + 1`" = "x$as_lineno_2'$as_run'"' || {
-  # Blame Lee E. McMahon (1931-1989) for sed's syntax.  :-)
-  sed -n '
-    p
-    /[$]LINENO/=
-  ' <$as_myself |
-    sed '
-      s/[$]LINENO.*/&-/
-      t lineno
-      b
-      :lineno
-      N
-      :loop
-      s/[$]LINENO\([^'$as_cr_alnum'_].*\n\)\(.*\)/\2\1\2/
-      t loop
-      s/-\n.*//
-    ' >$as_me.lineno &&
-  chmod +x "$as_me.lineno" ||
-    { $as_echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2; as_fn_exit 1; }
-
-  # If we had to re-execute with $CONFIG_SHELL, we're ensured to have
-  # already done that, so ensure we don't try to do so again and fall
-  # in an infinite loop.  This has already happened in practice.
-  _as_can_reexec=no; export _as_can_reexec
-  # Don't try to exec as it changes $[0], causing all sort of problems
-  # (the dirname of $[0] is not the place where we might find the
-  # original and so on.  Autoconf is especially sensitive to this).
-  . "./$as_me.lineno"
-  # Exit status is that of the last command.
-  exit
-}
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='        ';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-test -n "$DJDIR" || exec 7<&0 </dev/null
-exec 6>&1
-
-# Name of the host.
-# hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status,
-# so uname gets run too.
-ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q`
-
-#
-# Initializations.
-#
-ac_default_prefix=/usr/local
-ac_clean_files=
-ac_config_libobj_dir=.
-LIBOBJS=
-cross_compiling=no
-subdirs=
-MFLAGS=
-MAKEFLAGS=
-
-# Identity of this package.
-PACKAGE_NAME='dummy'
-PACKAGE_TARNAME='dummy'
-PACKAGE_VERSION='0'
-PACKAGE_STRING='dummy 0'
-PACKAGE_BUGREPORT=''
-PACKAGE_URL=''
-
-# Factoring default headers for most tests.
-ac_includes_default="\
-#include <stdio.h>
-#ifdef HAVE_SYS_TYPES_H
-# include <sys/types.h>
-#endif
-#ifdef HAVE_SYS_STAT_H
-# include <sys/stat.h>
-#endif
-#ifdef STDC_HEADERS
-# include <stdlib.h>
-# include <stddef.h>
-#else
-# ifdef HAVE_STDLIB_H
-#  include <stdlib.h>
-# endif
-#endif
-#ifdef HAVE_STRING_H
-# if !defined STDC_HEADERS && defined HAVE_MEMORY_H
-#  include <memory.h>
-# endif
-# include <string.h>
-#endif
-#ifdef HAVE_STRINGS_H
-# include <strings.h>
-#endif
-#ifdef HAVE_INTTYPES_H
-# include <inttypes.h>
-#endif
-#ifdef HAVE_STDINT_H
-# include <stdint.h>
-#endif
-#ifdef HAVE_UNISTD_H
-# include <unistd.h>
-#endif"
-
-gl_header_list=
-gl_func_list=
-ac_subst_vars='gl_LTLIBOBJS
-gl_LIBOBJS
-am__EXEEXT_FALSE
-am__EXEEXT_TRUE
-LTLIBOBJS
-LIBOBJS
-LIBGNU_LTLIBDEPS
-LIBGNU_LIBDEPS
-REPLACE_TOWLOWER
-REPLACE_ISWCNTRL
-HAVE_WCTYPE_H
-NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H
-NEXT_WCTYPE_H
-HAVE_ISWCNTRL
-REPLACE_ISWBLANK
-HAVE_WCTRANS_T
-HAVE_WCTYPE_T
-HAVE_ISWBLANK
-GNULIB_TOWCTRANS
-GNULIB_WCTRANS
-GNULIB_ISWCTYPE
-GNULIB_WCTYPE
-GNULIB_ISWBLANK
-HAVE_WINT_T
-HAVE_FEATURES_H
-NEXT_AS_FIRST_DIRECTIVE_WCHAR_H
-NEXT_WCHAR_H
-REPLACE_WCSWIDTH
-REPLACE_WCWIDTH
-REPLACE_WCSNRTOMBS
-REPLACE_WCSRTOMBS
-REPLACE_WCRTOMB
-REPLACE_MBSNRTOWCS
-REPLACE_MBSRTOWCS
-REPLACE_MBRLEN
-REPLACE_MBRTOWC
-REPLACE_MBSINIT
-REPLACE_WCTOB
-REPLACE_BTOWC
-REPLACE_MBSTATE_T
-HAVE_DECL_WCWIDTH
-HAVE_DECL_WCTOB
-HAVE_WCSWIDTH
-HAVE_WCSTOK
-HAVE_WCSSTR
-HAVE_WCSPBRK
-HAVE_WCSSPN
-HAVE_WCSCSPN
-HAVE_WCSRCHR
-HAVE_WCSCHR
-HAVE_WCSDUP
-HAVE_WCSXFRM
-HAVE_WCSCOLL
-HAVE_WCSNCASECMP
-HAVE_WCSCASECMP
-HAVE_WCSNCMP
-HAVE_WCSCMP
-HAVE_WCSNCAT
-HAVE_WCSCAT
-HAVE_WCPNCPY
-HAVE_WCSNCPY
-HAVE_WCPCPY
-HAVE_WCSCPY
-HAVE_WCSNLEN
-HAVE_WCSLEN
-HAVE_WMEMSET
-HAVE_WMEMMOVE
-HAVE_WMEMCPY
-HAVE_WMEMCMP
-HAVE_WMEMCHR
-HAVE_WCSNRTOMBS
-HAVE_WCSRTOMBS
-HAVE_WCRTOMB
-HAVE_MBSNRTOWCS
-HAVE_MBSRTOWCS
-HAVE_MBRLEN
-HAVE_MBRTOWC
-HAVE_MBSINIT
-HAVE_BTOWC
-GNULIB_WCSWIDTH
-GNULIB_WCSTOK
-GNULIB_WCSSTR
-GNULIB_WCSPBRK
-GNULIB_WCSSPN
-GNULIB_WCSCSPN
-GNULIB_WCSRCHR
-GNULIB_WCSCHR
-GNULIB_WCSDUP
-GNULIB_WCSXFRM
-GNULIB_WCSCOLL
-GNULIB_WCSNCASECMP
-GNULIB_WCSCASECMP
-GNULIB_WCSNCMP
-GNULIB_WCSCMP
-GNULIB_WCSNCAT
-GNULIB_WCSCAT
-GNULIB_WCPNCPY
-GNULIB_WCSNCPY
-GNULIB_WCPCPY
-GNULIB_WCSCPY
-GNULIB_WCSNLEN
-GNULIB_WCSLEN
-GNULIB_WMEMSET
-GNULIB_WMEMMOVE
-GNULIB_WMEMCPY
-GNULIB_WMEMCMP
-GNULIB_WMEMCHR
-GNULIB_WCWIDTH
-GNULIB_WCSNRTOMBS
-GNULIB_WCSRTOMBS
-GNULIB_WCRTOMB
-GNULIB_MBSNRTOWCS
-GNULIB_MBSRTOWCS
-GNULIB_MBRLEN
-GNULIB_MBRTOWC
-GNULIB_MBSINIT
-GNULIB_WCTOB
-GNULIB_BTOWC
-LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE
-LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE
-LIBUNISTRING_UNIWIDTH_H
-LIBUNISTRING_UNITYPES_H
-NEXT_AS_FIRST_DIRECTIVE_STDDEF_H
-NEXT_STDDEF_H
-GL_GENERATE_STDDEF_H_FALSE
-GL_GENERATE_STDDEF_H_TRUE
-STDDEF_H
-HAVE_WCHAR_T
-REPLACE_NULL
-HAVE__BOOL
-GL_GENERATE_STDBOOL_H_FALSE
-GL_GENERATE_STDBOOL_H_TRUE
-STDBOOL_H
-LOCALCHARSET_TESTS_ENVIRONMENT
-GLIBC21
-NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H
-NEXT_INTTYPES_H
-UINT64_MAX_EQ_ULONG_MAX
-UINT32_MAX_LT_UINTMAX_MAX
-PRIPTR_PREFIX
-PRI_MACROS_BROKEN
-INT64_MAX_EQ_LONG_MAX
-INT32_MAX_LT_INTMAX_MAX
-REPLACE_STRTOIMAX
-HAVE_DECL_STRTOUMAX
-HAVE_DECL_STRTOIMAX
-HAVE_DECL_IMAXDIV
-HAVE_DECL_IMAXABS
-GNULIB_STRTOUMAX
-GNULIB_STRTOIMAX
-GNULIB_IMAXDIV
-GNULIB_IMAXABS
-GL_GENERATE_STDINT_H_FALSE
-GL_GENERATE_STDINT_H_TRUE
-STDINT_H
-WINT_T_SUFFIX
-WCHAR_T_SUFFIX
-SIG_ATOMIC_T_SUFFIX
-SIZE_T_SUFFIX
-PTRDIFF_T_SUFFIX
-HAVE_SIGNED_WINT_T
-HAVE_SIGNED_WCHAR_T
-HAVE_SIGNED_SIG_ATOMIC_T
-BITSIZEOF_WINT_T
-BITSIZEOF_WCHAR_T
-BITSIZEOF_SIG_ATOMIC_T
-BITSIZEOF_SIZE_T
-BITSIZEOF_PTRDIFF_T
-APPLE_UNIVERSAL_BUILD
-HAVE_SYS_BITYPES_H
-HAVE_SYS_INTTYPES_H
-HAVE_STDINT_H
-NEXT_AS_FIRST_DIRECTIVE_STDINT_H
-NEXT_STDINT_H
-PRAGMA_COLUMNS
-PRAGMA_SYSTEM_HEADER
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE
-INCLUDE_NEXT
-HAVE_SYS_TYPES_H
-HAVE_INTTYPES_H
-HAVE_WCHAR_H
-HAVE_UNSIGNED_LONG_LONG_INT
-HAVE_LONG_LONG_INT
-pkglibexecdir
-runstatedir
-lispdir
-GL_COND_LIBTOOL_FALSE
-GL_COND_LIBTOOL_TRUE
-RANLIB
-ARFLAGS
-AR
-EGREP
-GREP
-CPP
-host_os
-host_vendor
-host_cpu
-host
-build_os
-build_vendor
-build_cpu
-build
-am__fastdepCC_FALSE
-am__fastdepCC_TRUE
-CCDEPMODE
-am__nodep
-AMDEPBACKSLASH
-AMDEP_FALSE
-AMDEP_TRUE
-am__quote
-am__include
-DEPDIR
-OBJEXT
-EXEEXT
-ac_ct_CC
-CPPFLAGS
-LDFLAGS
-CFLAGS
-CC
-AM_BACKSLASH
-AM_DEFAULT_VERBOSITY
-AM_DEFAULT_V
-AM_V
-am__untar
-am__tar
-AMTAR
-am__leading_dot
-SET_MAKE
-AWK
-mkdir_p
-MKDIR_P
-INSTALL_STRIP_PROGRAM
-STRIP
-install_sh
-MAKEINFO
-AUTOHEADER
-AUTOMAKE
-AUTOCONF
-ACLOCAL
-VERSION
-PACKAGE
-CYGPATH_W
-am__isrc
-INSTALL_DATA
-INSTALL_SCRIPT
-INSTALL_PROGRAM
-target_alias
-host_alias
-build_alias
-LIBS
-ECHO_T
-ECHO_N
-ECHO_C
-DEFS
-mandir
-localedir
-libdir
-psdir
-pdfdir
-dvidir
-htmldir
-infodir
-docdir
-oldincludedir
-includedir
-localstatedir
-sharedstatedir
-sysconfdir
-datadir
-datarootdir
-libexecdir
-sbindir
-bindir
-program_transform_name
-prefix
-exec_prefix
-PACKAGE_URL
-PACKAGE_BUGREPORT
-PACKAGE_STRING
-PACKAGE_VERSION
-PACKAGE_TARNAME
-PACKAGE_NAME
-PATH_SEPARATOR
-SHELL'
-ac_subst_files=''
-ac_user_opts='
-enable_option_checking
-enable_silent_rules
-enable_dependency_tracking
-'
-      ac_precious_vars='build_alias
-host_alias
-target_alias
-CC
-CFLAGS
-LDFLAGS
-LIBS
-CPPFLAGS
-CPP'
-
-
-# Initialize some variables set by options.
-ac_init_help=
-ac_init_version=false
-ac_unrecognized_opts=
-ac_unrecognized_sep=
-# The variables have the same names as the options, with
-# dashes changed to underlines.
-cache_file=/dev/null
-exec_prefix=NONE
-no_create=
-no_recursion=
-prefix=NONE
-program_prefix=NONE
-program_suffix=NONE
-program_transform_name=s,x,x,
-silent=
-site=
-srcdir=
-verbose=
-x_includes=NONE
-x_libraries=NONE
-
-# Installation directory options.
-# These are left unexpanded so users can "make install exec_prefix=/foo"
-# and all the variables that are supposed to be based on exec_prefix
-# by default will actually change.
-# Use braces instead of parens because sh, perl, etc. also accept them.
-# (The list follows the same order as the GNU Coding Standards.)
-bindir='${exec_prefix}/bin'
-sbindir='${exec_prefix}/sbin'
-libexecdir='${exec_prefix}/libexec'
-datarootdir='${prefix}/share'
-datadir='${datarootdir}'
-sysconfdir='${prefix}/etc'
-sharedstatedir='${prefix}/com'
-localstatedir='${prefix}/var'
-includedir='${prefix}/include'
-oldincludedir='/usr/include'
-docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-infodir='${datarootdir}/info'
-htmldir='${docdir}'
-dvidir='${docdir}'
-pdfdir='${docdir}'
-psdir='${docdir}'
-libdir='${exec_prefix}/lib'
-localedir='${datarootdir}/locale'
-mandir='${datarootdir}/man'
-
-ac_prev=
-ac_dashdash=
-for ac_option
-do
-  # If the previous option needs an argument, assign it.
-  if test -n "$ac_prev"; then
-    eval $ac_prev=\$ac_option
-    ac_prev=
-    continue
-  fi
-
-  case $ac_option in
-  *=?*) ac_optarg=`expr "X$ac_option" : '[^=]*=\(.*\)'` ;;
-  *=)   ac_optarg= ;;
-  *)    ac_optarg=yes ;;
-  esac
-
-  # Accept the important Cygnus configure options, so we can diagnose typos.
-
-  case $ac_dashdash$ac_option in
-  --)
-    ac_dashdash=yes ;;
-
-  -bindir | --bindir | --bindi | --bind | --bin | --bi)
-    ac_prev=bindir ;;
-  -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
-    bindir=$ac_optarg ;;
-
-  -build | --build | --buil | --bui | --bu)
-    ac_prev=build_alias ;;
-  -build=* | --build=* | --buil=* | --bui=* | --bu=*)
-    build_alias=$ac_optarg ;;
-
-  -cache-file | --cache-file | --cache-fil | --cache-fi \
-  | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
-    ac_prev=cache_file ;;
-  -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
-  | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
-    cache_file=$ac_optarg ;;
-
-  --config-cache | -C)
-    cache_file=config.cache ;;
-
-  -datadir | --datadir | --datadi | --datad)
-    ac_prev=datadir ;;
-  -datadir=* | --datadir=* | --datadi=* | --datad=*)
-    datadir=$ac_optarg ;;
-
-  -datarootdir | --datarootdir | --datarootdi | --datarootd | --dataroot \
-  | --dataroo | --dataro | --datar)
-    ac_prev=datarootdir ;;
-  -datarootdir=* | --datarootdir=* | --datarootdi=* | --datarootd=* \
-  | --dataroot=* | --dataroo=* | --dataro=* | --datar=*)
-    datarootdir=$ac_optarg ;;
-
-  -disable-* | --disable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*disable-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--disable-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=no ;;
-
-  -docdir | --docdir | --docdi | --doc | --do)
-    ac_prev=docdir ;;
-  -docdir=* | --docdir=* | --docdi=* | --doc=* | --do=*)
-    docdir=$ac_optarg ;;
-
-  -dvidir | --dvidir | --dvidi | --dvid | --dvi | --dv)
-    ac_prev=dvidir ;;
-  -dvidir=* | --dvidir=* | --dvidi=* | --dvid=* | --dvi=* | --dv=*)
-    dvidir=$ac_optarg ;;
-
-  -enable-* | --enable-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*enable-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid feature name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"enable_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--enable-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval enable_$ac_useropt=\$ac_optarg ;;
-
-  -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
-  | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
-  | --exec | --exe | --ex)
-    ac_prev=exec_prefix ;;
-  -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
-  | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
-  | --exec=* | --exe=* | --ex=*)
-    exec_prefix=$ac_optarg ;;
-
-  -gas | --gas | --ga | --g)
-    # Obsolete; use --with-gas.
-    with_gas=yes ;;
-
-  -help | --help | --hel | --he | -h)
-    ac_init_help=long ;;
-  -help=r* | --help=r* | --hel=r* | --he=r* | -hr*)
-    ac_init_help=recursive ;;
-  -help=s* | --help=s* | --hel=s* | --he=s* | -hs*)
-    ac_init_help=short ;;
-
-  -host | --host | --hos | --ho)
-    ac_prev=host_alias ;;
-  -host=* | --host=* | --hos=* | --ho=*)
-    host_alias=$ac_optarg ;;
-
-  -htmldir | --htmldir | --htmldi | --htmld | --html | --htm | --ht)
-    ac_prev=htmldir ;;
-  -htmldir=* | --htmldir=* | --htmldi=* | --htmld=* | --html=* | --htm=* \
-  | --ht=*)
-    htmldir=$ac_optarg ;;
-
-  -includedir | --includedir | --includedi | --included | --include \
-  | --includ | --inclu | --incl | --inc)
-    ac_prev=includedir ;;
-  -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
-  | --includ=* | --inclu=* | --incl=* | --inc=*)
-    includedir=$ac_optarg ;;
-
-  -infodir | --infodir | --infodi | --infod | --info | --inf)
-    ac_prev=infodir ;;
-  -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
-    infodir=$ac_optarg ;;
-
-  -libdir | --libdir | --libdi | --libd)
-    ac_prev=libdir ;;
-  -libdir=* | --libdir=* | --libdi=* | --libd=*)
-    libdir=$ac_optarg ;;
-
-  -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
-  | --libexe | --libex | --libe)
-    ac_prev=libexecdir ;;
-  -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
-  | --libexe=* | --libex=* | --libe=*)
-    libexecdir=$ac_optarg ;;
-
-  -localedir | --localedir | --localedi | --localed | --locale)
-    ac_prev=localedir ;;
-  -localedir=* | --localedir=* | --localedi=* | --localed=* | --locale=*)
-    localedir=$ac_optarg ;;
-
-  -localstatedir | --localstatedir | --localstatedi | --localstated \
-  | --localstate | --localstat | --localsta | --localst | --locals)
-    ac_prev=localstatedir ;;
-  -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
-  | --localstate=* | --localstat=* | --localsta=* | --localst=* | --locals=*)
-    localstatedir=$ac_optarg ;;
-
-  -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
-    ac_prev=mandir ;;
-  -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
-    mandir=$ac_optarg ;;
-
-  -nfp | --nfp | --nf)
-    # Obsolete; use --without-fp.
-    with_fp=no ;;
-
-  -no-create | --no-create | --no-creat | --no-crea | --no-cre \
-  | --no-cr | --no-c | -n)
-    no_create=yes ;;
-
-  -no-recursion | --no-recursion | --no-recursio | --no-recursi \
-  | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
-    no_recursion=yes ;;
-
-  -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
-  | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
-  | --oldin | --oldi | --old | --ol | --o)
-    ac_prev=oldincludedir ;;
-  -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
-  | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
-  | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
-    oldincludedir=$ac_optarg ;;
-
-  -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
-    ac_prev=prefix ;;
-  -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
-    prefix=$ac_optarg ;;
-
-  -program-prefix | --program-prefix | --program-prefi | --program-pref \
-  | --program-pre | --program-pr | --program-p)
-    ac_prev=program_prefix ;;
-  -program-prefix=* | --program-prefix=* | --program-prefi=* \
-  | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
-    program_prefix=$ac_optarg ;;
-
-  -program-suffix | --program-suffix | --program-suffi | --program-suff \
-  | --program-suf | --program-su | --program-s)
-    ac_prev=program_suffix ;;
-  -program-suffix=* | --program-suffix=* | --program-suffi=* \
-  | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
-    program_suffix=$ac_optarg ;;
-
-  -program-transform-name | --program-transform-name \
-  | --program-transform-nam | --program-transform-na \
-  | --program-transform-n | --program-transform- \
-  | --program-transform | --program-transfor \
-  | --program-transfo | --program-transf \
-  | --program-trans | --program-tran \
-  | --progr-tra | --program-tr | --program-t)
-    ac_prev=program_transform_name ;;
-  -program-transform-name=* | --program-transform-name=* \
-  | --program-transform-nam=* | --program-transform-na=* \
-  | --program-transform-n=* | --program-transform-=* \
-  | --program-transform=* | --program-transfor=* \
-  | --program-transfo=* | --program-transf=* \
-  | --program-trans=* | --program-tran=* \
-  | --progr-tra=* | --program-tr=* | --program-t=*)
-    program_transform_name=$ac_optarg ;;
-
-  -pdfdir | --pdfdir | --pdfdi | --pdfd | --pdf | --pd)
-    ac_prev=pdfdir ;;
-  -pdfdir=* | --pdfdir=* | --pdfdi=* | --pdfd=* | --pdf=* | --pd=*)
-    pdfdir=$ac_optarg ;;
-
-  -psdir | --psdir | --psdi | --psd | --ps)
-    ac_prev=psdir ;;
-  -psdir=* | --psdir=* | --psdi=* | --psd=* | --ps=*)
-    psdir=$ac_optarg ;;
-
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil)
-    silent=yes ;;
-
-  -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
-    ac_prev=sbindir ;;
-  -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
-  | --sbi=* | --sb=*)
-    sbindir=$ac_optarg ;;
-
-  -sharedstatedir | --sharedstatedir | --sharedstatedi \
-  | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
-  | --sharedst | --shareds | --shared | --share | --shar \
-  | --sha | --sh)
-    ac_prev=sharedstatedir ;;
-  -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
-  | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
-  | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
-  | --sha=* | --sh=*)
-    sharedstatedir=$ac_optarg ;;
-
-  -site | --site | --sit)
-    ac_prev=site ;;
-  -site=* | --site=* | --sit=*)
-    site=$ac_optarg ;;
-
-  -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
-    ac_prev=srcdir ;;
-  -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
-    srcdir=$ac_optarg ;;
-
-  -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
-  | --syscon | --sysco | --sysc | --sys | --sy)
-    ac_prev=sysconfdir ;;
-  -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
-  | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
-    sysconfdir=$ac_optarg ;;
-
-  -target | --target | --targe | --targ | --tar | --ta | --t)
-    ac_prev=target_alias ;;
-  -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
-    target_alias=$ac_optarg ;;
-
-  -v | -verbose | --verbose | --verbos | --verbo | --verb)
-    verbose=yes ;;
-
-  -version | --version | --versio | --versi | --vers | -V)
-    ac_init_version=: ;;
-
-  -with-* | --with-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*with-\([^=]*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--with-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=\$ac_optarg ;;
-
-  -without-* | --without-*)
-    ac_useropt=`expr "x$ac_option" : 'x-*without-\(.*\)'`
-    # Reject names that are not valid shell variable names.
-    expr "x$ac_useropt" : ".*[^-+._$as_cr_alnum]" >/dev/null &&
-      as_fn_error $? "invalid package name: $ac_useropt"
-    ac_useropt_orig=$ac_useropt
-    ac_useropt=`$as_echo "$ac_useropt" | sed 's/[-+.]/_/g'`
-    case $ac_user_opts in
-      *"
-"with_$ac_useropt"
-"*) ;;
-      *) ac_unrecognized_opts="$ac_unrecognized_opts$ac_unrecognized_sep--without-$ac_useropt_orig"
-        ac_unrecognized_sep=', ';;
-    esac
-    eval with_$ac_useropt=no ;;
-
-  --x)
-    # Obsolete; use --with-x.
-    with_x=yes ;;
-
-  -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
-  | --x-incl | --x-inc | --x-in | --x-i)
-    ac_prev=x_includes ;;
-  -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
-  | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
-    x_includes=$ac_optarg ;;
-
-  -x-libraries | --x-libraries | --x-librarie | --x-librari \
-  | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
-    ac_prev=x_libraries ;;
-  -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
-  | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
-    x_libraries=$ac_optarg ;;
-
-  -*) as_fn_error $? "unrecognized option: \`$ac_option'
-Try \`$0 --help' for more information"
-    ;;
-
-  *=*)
-    ac_envvar=`expr "x$ac_option" : 'x\([^=]*\)='`
-    # Reject names that are not valid shell variable names.
-    case $ac_envvar in #(
-      '' | [0-9]* | *[!_$as_cr_alnum]* )
-      as_fn_error $? "invalid variable name: \`$ac_envvar'" ;;
-    esac
-    eval $ac_envvar=\$ac_optarg
-    export $ac_envvar ;;
-
-  *)
-    # FIXME: should be removed in autoconf 3.0.
-    $as_echo "$as_me: WARNING: you should use --build, --host, --target" >&2
-    expr "x$ac_option" : ".*[^-._$as_cr_alnum]" >/dev/null &&
-      $as_echo "$as_me: WARNING: invalid host type: $ac_option" >&2
-    : "${build_alias=$ac_option} ${host_alias=$ac_option} ${target_alias=$ac_option}"
-    ;;
-
-  esac
-done
-
-if test -n "$ac_prev"; then
-  ac_option=--`echo $ac_prev | sed 's/_/-/g'`
-  as_fn_error $? "missing argument to $ac_option"
-fi
-
-if test -n "$ac_unrecognized_opts"; then
-  case $enable_option_checking in
-    no) ;;
-    fatal) as_fn_error $? "unrecognized options: $ac_unrecognized_opts" ;;
-    *)     $as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2 ;;
-  esac
-fi
-
-# Check all directory arguments for consistency.
-for ac_var in  exec_prefix prefix bindir sbindir libexecdir datarootdir \
-               datadir sysconfdir sharedstatedir localstatedir includedir \
-               oldincludedir docdir infodir htmldir dvidir pdfdir psdir \
-               libdir localedir mandir
-do
-  eval ac_val=\$$ac_var
-  # Remove trailing slashes.
-  case $ac_val in
-    */ )
-      ac_val=`expr "X$ac_val" : 'X\(.*[^/]\)' \| "X$ac_val" : 'X\(.*\)'`
-      eval $ac_var=\$ac_val;;
-  esac
-  # Be sure to have absolute directory names.
-  case $ac_val in
-    [\\/$]* | ?:[\\/]* )  continue;;
-    NONE | '' ) case $ac_var in *prefix ) continue;; esac;;
-  esac
-  as_fn_error $? "expected an absolute directory name for --$ac_var: $ac_val"
-done
-
-# There might be people who depend on the old broken behavior: `$host'
-# used to hold the argument of --host etc.
-# FIXME: To remove some day.
-build=$build_alias
-host=$host_alias
-target=$target_alias
-
-# FIXME: To remove some day.
-if test "x$host_alias" != x; then
-  if test "x$build_alias" = x; then
-    cross_compiling=maybe
-  elif test "x$build_alias" != "x$host_alias"; then
-    cross_compiling=yes
-  fi
-fi
-
-ac_tool_prefix=
-test -n "$host_alias" && ac_tool_prefix=$host_alias-
-
-test "$silent" = yes && exec 6>/dev/null
-
-
-ac_pwd=`pwd` && test -n "$ac_pwd" &&
-ac_ls_di=`ls -di .` &&
-ac_pwd_ls_di=`cd "$ac_pwd" && ls -di .` ||
-  as_fn_error $? "working directory cannot be determined"
-test "X$ac_ls_di" = "X$ac_pwd_ls_di" ||
-  as_fn_error $? "pwd does not report name of working directory"
-
-
-# Find the source files, if location was not specified.
-if test -z "$srcdir"; then
-  ac_srcdir_defaulted=yes
-  # Try the directory containing this script, then the parent directory.
-  ac_confdir=`$as_dirname -- "$as_myself" ||
-$as_expr X"$as_myself" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$as_myself" : 'X\(//\)[^/]' \| \
-        X"$as_myself" : 'X\(//\)$' \| \
-        X"$as_myself" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_myself" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-  srcdir=$ac_confdir
-  if test ! -r "$srcdir/$ac_unique_file"; then
-    srcdir=..
-  fi
-else
-  ac_srcdir_defaulted=no
-fi
-if test ! -r "$srcdir/$ac_unique_file"; then
-  test "$ac_srcdir_defaulted" = yes && srcdir="$ac_confdir or .."
-  as_fn_error $? "cannot find sources ($ac_unique_file) in $srcdir"
-fi
-ac_msg="sources are in $srcdir, but \`cd $srcdir' does not work"
-ac_abs_confdir=`(
-       cd "$srcdir" && test -r "./$ac_unique_file" || as_fn_error $? "$ac_msg"
-       pwd)`
-# When building in place, set srcdir=.
-if test "$ac_abs_confdir" = "$ac_pwd"; then
-  srcdir=.
-fi
-# Remove unnecessary trailing slashes from srcdir.
-# Double slashes in file names in object file debugging info
-# mess up M-x gdb in Emacs.
-case $srcdir in
-*/) srcdir=`expr "X$srcdir" : 'X\(.*[^/]\)' \| "X$srcdir" : 'X\(.*\)'`;;
-esac
-for ac_var in $ac_precious_vars; do
-  eval ac_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_env_${ac_var}_value=\$${ac_var}
-  eval ac_cv_env_${ac_var}_set=\${${ac_var}+set}
-  eval ac_cv_env_${ac_var}_value=\$${ac_var}
-done
-
-#
-# Report the --help message.
-#
-if test "$ac_init_help" = "long"; then
-  # Omit some internal or obsolete options to make the list less imposing.
-  # This message is too long to be a string in the A/UX 3.1 sh.
-  cat <<_ACEOF
-\`configure' configures dummy 0 to adapt to many kinds of systems.
-
-Usage: $0 [OPTION]... [VAR=VALUE]...
-
-To assign environment variables (e.g., CC, CFLAGS...), specify them as
-VAR=VALUE.  See below for descriptions of some of the useful variables.
-
-Defaults for the options are specified in brackets.
-
-Configuration:
-  -h, --help              display this help and exit
-      --help=short        display options specific to this package
-      --help=recursive    display the short help of all the included packages
-  -V, --version           display version information and exit
-  -q, --quiet, --silent   do not print \`checking ...' messages
-      --cache-file=FILE   cache test results in FILE [disabled]
-  -C, --config-cache      alias for \`--cache-file=config.cache'
-  -n, --no-create         do not create output files
-      --srcdir=DIR        find the sources in DIR [configure dir or \`..']
-
-Installation directories:
-  --prefix=PREFIX         install architecture-independent files in PREFIX
-                          [$ac_default_prefix]
-  --exec-prefix=EPREFIX   install architecture-dependent files in EPREFIX
-                          [PREFIX]
-
-By default, \`make install' will install all the files in
-\`$ac_default_prefix/bin', \`$ac_default_prefix/lib' etc.  You can specify
-an installation prefix other than \`$ac_default_prefix' using \`--prefix',
-for instance \`--prefix=\$HOME'.
-
-For better control, use the options below.
-
-Fine tuning of the installation directories:
-  --bindir=DIR            user executables [EPREFIX/bin]
-  --sbindir=DIR           system admin executables [EPREFIX/sbin]
-  --libexecdir=DIR        program executables [EPREFIX/libexec]
-  --sysconfdir=DIR        read-only single-machine data [PREFIX/etc]
-  --sharedstatedir=DIR    modifiable architecture-independent data [PREFIX/com]
-  --localstatedir=DIR     modifiable single-machine data [PREFIX/var]
-  --libdir=DIR            object code libraries [EPREFIX/lib]
-  --includedir=DIR        C header files [PREFIX/include]
-  --oldincludedir=DIR     C header files for non-gcc [/usr/include]
-  --datarootdir=DIR       read-only arch.-independent data root [PREFIX/share]
-  --datadir=DIR           read-only architecture-independent data [DATAROOTDIR]
-  --infodir=DIR           info documentation [DATAROOTDIR/info]
-  --localedir=DIR         locale-dependent data [DATAROOTDIR/locale]
-  --mandir=DIR            man documentation [DATAROOTDIR/man]
-  --docdir=DIR            documentation root [DATAROOTDIR/doc/dummy]
-  --htmldir=DIR           html documentation [DOCDIR]
-  --dvidir=DIR            dvi documentation [DOCDIR]
-  --pdfdir=DIR            pdf documentation [DOCDIR]
-  --psdir=DIR             ps documentation [DOCDIR]
-_ACEOF
-
-  cat <<\_ACEOF
-
-Program names:
-  --program-prefix=PREFIX            prepend PREFIX to installed program names
-  --program-suffix=SUFFIX            append SUFFIX to installed program names
-  --program-transform-name=PROGRAM   run sed PROGRAM on installed program names
-
-System types:
-  --build=BUILD     configure for building on BUILD [guessed]
-  --host=HOST       cross-compile to build programs to run on HOST [BUILD]
-_ACEOF
-fi
-
-if test -n "$ac_init_help"; then
-  case $ac_init_help in
-     short | recursive ) echo "Configuration of dummy 0:";;
-   esac
-  cat <<\_ACEOF
-
-Optional Features:
-  --disable-option-checking  ignore unrecognized --enable/--with options
-  --disable-FEATURE       do not include FEATURE (same as --enable-FEATURE=no)
-  --enable-FEATURE[=ARG]  include FEATURE [ARG=yes]
-  --enable-silent-rules   less verbose build output (undo: "make V=1")
-  --disable-silent-rules  verbose build output (undo: "make V=0")
-  --enable-dependency-tracking
-                          do not reject slow dependency extractors
-  --disable-dependency-tracking
-                          speeds up one-time build
-
-Some influential environment variables:
-  CC          C compiler command
-  CFLAGS      C compiler flags
-  LDFLAGS     linker flags, e.g. -L<lib dir> if you have libraries in a
-              nonstandard directory <lib dir>
-  LIBS        libraries to pass to the linker, e.g. -l<library>
-  CPPFLAGS    (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if
-              you have headers in a nonstandard directory <include dir>
-  CPP         C preprocessor
-
-Use these variables to override the choices made by `configure' or to help
-it to find libraries and programs with nonstandard names/locations.
-
-Report bugs to the package provider.
-_ACEOF
-ac_status=$?
-fi
-
-if test "$ac_init_help" = "recursive"; then
-  # If there are subdirs, report their specific --help.
-  for ac_dir in : $ac_subdirs_all; do test "x$ac_dir" = x: && continue
-    test -d "$ac_dir" ||
-      { cd "$srcdir" && ac_pwd=`pwd` && srcdir=. && test -d "$ac_dir"; } ||
-      continue
-    ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-    cd "$ac_dir" || { ac_status=$?; continue; }
-    # Check for guested configure.
-    if test -f "$ac_srcdir/configure.gnu"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure.gnu" --help=recursive
-    elif test -f "$ac_srcdir/configure"; then
-      echo &&
-      $SHELL "$ac_srcdir/configure" --help=recursive
-    else
-      $as_echo "$as_me: WARNING: no configuration information is in $ac_dir" >&2
-    fi || ac_status=$?
-    cd "$ac_pwd" || { ac_status=$?; break; }
-  done
-fi
-
-test -n "$ac_init_help" && exit $ac_status
-if $ac_init_version; then
-  cat <<\_ACEOF
-dummy configure 0
-generated by GNU Autoconf 2.69
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This configure script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it.
-_ACEOF
-  exit
-fi
-
-## ------------------------ ##
-## Autoconf initialization. ##
-## ------------------------ ##
-
-# ac_fn_c_try_compile LINENO
-# --------------------------
-# Try to compile conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext
-  if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest.$ac_objext; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_compile
-
-# ac_fn_c_try_cpp LINENO
-# ----------------------
-# Try to preprocess conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_cpp ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_cpp conftest.$ac_ext"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_cpp conftest.$ac_ext") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } > conftest.i && {
-        test -z "$ac_c_preproc_warn_flag$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-    ac_retval=1
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_cpp
-
-# ac_fn_c_check_header_mongrel LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists, giving a warning if it cannot be compiled using
-# the include files in INCLUDES and setting the cache variable VAR
-# accordingly.
-ac_fn_c_check_header_mongrel ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if eval \${$3+:} false; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-else
-  # Is the header compilable?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 usability" >&5
-$as_echo_n "checking $2 usability... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_header_compiler=yes
-else
-  ac_header_compiler=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_compiler" >&5
-$as_echo "$ac_header_compiler" >&6; }
-
-# Is the header present?
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking $2 presence" >&5
-$as_echo_n "checking $2 presence... " >&6; }
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <$2>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  ac_header_preproc=yes
-else
-  ac_header_preproc=no
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_header_preproc" >&5
-$as_echo "$ac_header_preproc" >&6; }
-
-# So?  What about this header?
-case $ac_header_compiler:$ac_header_preproc:$ac_c_preproc_warn_flag in #((
-  yes:no: )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&5
-$as_echo "$as_me: WARNING: $2: accepted by the compiler, rejected by the preprocessor!" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-  no:yes:* )
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: present but cannot be compiled" >&5
-$as_echo "$as_me: WARNING: $2: present but cannot be compiled" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     check for missing prerequisite headers?" >&5
-$as_echo "$as_me: WARNING: $2:     check for missing prerequisite headers?" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: see the Autoconf documentation" >&5
-$as_echo "$as_me: WARNING: $2: see the Autoconf documentation" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&5
-$as_echo "$as_me: WARNING: $2:     section \"Present But Cannot Be Compiled\"" >&2;}
-    { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $2: proceeding with the compiler's result" >&5
-$as_echo "$as_me: WARNING: $2: proceeding with the compiler's result" >&2;}
-    ;;
-esac
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=\$ac_header_compiler"
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_mongrel
-
-# ac_fn_c_try_run LINENO
-# ----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded. Assumes
-# that executables *can* be run.
-ac_fn_c_try_run ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && { ac_try='./conftest$ac_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: program exited with status $ac_status" >&5
-       $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=$ac_status
-fi
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_run
-
-# ac_fn_c_check_header_compile LINENO HEADER VAR INCLUDES
-# -------------------------------------------------------
-# Tests whether HEADER exists and can be compiled using the include files in
-# INCLUDES, setting the cache variable VAR accordingly.
-ac_fn_c_check_header_compile ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-#include <$2>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_header_compile
-
-# ac_fn_c_try_link LINENO
-# -----------------------
-# Try to link conftest.$ac_ext, and return whether this succeeded.
-ac_fn_c_try_link ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  rm -f conftest.$ac_objext conftest$ac_exeext
-  if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    grep -v '^ *+' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-    mv -f conftest.er1 conftest.err
-  fi
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; } && {
-        test -z "$ac_c_werror_flag" ||
-        test ! -s conftest.err
-       } && test -s conftest$ac_exeext && {
-        test "$cross_compiling" = yes ||
-        test -x conftest$ac_exeext
-       }; then :
-  ac_retval=0
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-       ac_retval=1
-fi
-  # Delete the IPA/IPO (Inter Procedural Analysis/Optimization) information
-  # created by the PGI compiler (conftest_ipa8_conftest.oo), as it would
-  # interfere with the next link command; also delete a directory that is
-  # left behind by Apple's compiler.  We do this before executing the actions.
-  rm -rf conftest.dSYM conftest_ipa8_conftest.oo
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_try_link
-
-# ac_fn_c_compute_int LINENO EXPR VAR INCLUDES
-# --------------------------------------------
-# Tries to find the compile-time value of EXPR in a program that includes
-# INCLUDES, setting VAR accordingly. Returns whether the value could be
-# computed
-ac_fn_c_compute_int ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  if test "$cross_compiling" = yes; then
-    # Depending upon the size, compute the lo and hi bounds.
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= 0)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=0 ac_mid=0
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid; break
-else
-  as_fn_arith $ac_mid + 1 && ac_lo=$as_val
-                       if test $ac_lo -le $ac_mid; then
-                         ac_lo= ac_hi=
-                         break
-                       fi
-                       as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) < 0)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=-1 ac_mid=-1
-  while :; do
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) >= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_lo=$ac_mid; break
-else
-  as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val
-                       if test $ac_mid -le $ac_hi; then
-                         ac_lo= ac_hi=
-                         break
-                       fi
-                       as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  done
-else
-  ac_lo= ac_hi=
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-# Binary search between lo and hi bounds.
-while test "x$ac_lo" != "x$ac_hi"; do
-  as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-static int test_array [1 - 2 * !(($2) <= $ac_mid)];
-test_array [0] = 0;
-return test_array [0];
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_hi=$ac_mid
-else
-  as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-done
-case $ac_lo in #((
-?*) eval "$3=\$ac_lo"; ac_retval=0 ;;
-'') ac_retval=1 ;;
-esac
-  else
-    cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-static long int longval () { return $2; }
-static unsigned long int ulongval () { return $2; }
-#include <stdio.h>
-#include <stdlib.h>
-int
-main ()
-{
-
-  FILE *f = fopen ("conftest.val", "w");
-  if (! f)
-    return 1;
-  if (($2) < 0)
-    {
-      long int i = longval ();
-      if (i != ($2))
-       return 1;
-      fprintf (f, "%ld", i);
-    }
-  else
-    {
-      unsigned long int i = ulongval ();
-      if (i != ($2))
-       return 1;
-      fprintf (f, "%lu", i);
-    }
-  /* Do not output a trailing newline, as this causes \r\n confusion
-     on some platforms.  */
-  return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  echo >>conftest.val; read $3 <conftest.val; ac_retval=0
-else
-  ac_retval=1
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-rm -f conftest.val
-
-  fi
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-  as_fn_set_status $ac_retval
-
-} # ac_fn_c_compute_int
-
-# ac_fn_c_check_func LINENO FUNC VAR
-# ----------------------------------
-# Tests whether FUNC exists, setting the cache variable VAR accordingly
-ac_fn_c_check_func ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Define $2 to an innocuous variant, in case <limits.h> declares $2.
-   For example, HP-UX 11i <limits.h> declares gettimeofday.  */
-#define $2 innocuous_$2
-
-/* System header to define __stub macros and hopefully few prototypes,
-    which can conflict with char $2 (); below.
-    Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-    <limits.h> exists even on freestanding compilers.  */
-
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-
-#undef $2
-
-/* Override any GCC internal prototype to avoid an error.
-   Use char because int might match the return type of a GCC
-   builtin and then its argument prototype would still apply.  */
-#ifdef __cplusplus
-extern "C"
-#endif
-char $2 ();
-/* The GNU C library defines this for functions which it implements
-    to always fail with ENOSYS.  Some functions are actually named
-    something starting with __ and the normal name is an alias.  */
-#if defined __stub_$2 || defined __stub___$2
-choke me
-#endif
-
-int
-main ()
-{
-return $2 ();
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_func
-
-# ac_fn_c_check_decl LINENO SYMBOL VAR INCLUDES
-# ---------------------------------------------
-# Tests whether SYMBOL is declared in INCLUDES, setting cache variable VAR
-# accordingly.
-ac_fn_c_check_decl ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  as_decl_name=`echo $2|sed 's/ *(.*//'`
-  as_decl_use=`echo $2|sed -e 's/(/((/' -e 's/)/) 0&/' -e 's/,/) 0& (/g'`
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $as_decl_name is declared" >&5
-$as_echo_n "checking whether $as_decl_name is declared... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-#ifndef $as_decl_name
-#ifdef __cplusplus
-  (void) $as_decl_use;
-#else
-  (void) $as_decl_name;
-#endif
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$3=yes"
-else
-  eval "$3=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_decl
-
-# ac_fn_c_check_type LINENO TYPE VAR INCLUDES
-# -------------------------------------------
-# Tests whether TYPE exists after having included INCLUDES, setting cache
-# variable VAR accordingly.
-ac_fn_c_check_type ()
-{
-  as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5
-$as_echo_n "checking for $2... " >&6; }
-if eval \${$3+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval "$3=no"
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof ($2))
-        return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-$4
-int
-main ()
-{
-if (sizeof (($2)))
-           return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  eval "$3=yes"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$3
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-  eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno
-
-} # ac_fn_c_check_type
-cat >config.log <<_ACEOF
-This file contains any messages produced by compilers while
-running configure, to aid debugging if configure makes a mistake.
-
-It was created by dummy $as_me 0, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  $ $0 $@
-
-_ACEOF
-exec 5>>config.log
-{
-cat <<_ASUNAME
-## --------- ##
-## Platform. ##
-## --------- ##
-
-hostname = `(hostname || uname -n) 2>/dev/null | sed 1q`
-uname -m = `(uname -m) 2>/dev/null || echo unknown`
-uname -r = `(uname -r) 2>/dev/null || echo unknown`
-uname -s = `(uname -s) 2>/dev/null || echo unknown`
-uname -v = `(uname -v) 2>/dev/null || echo unknown`
-
-/usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null || echo unknown`
-/bin/uname -X     = `(/bin/uname -X) 2>/dev/null     || echo unknown`
-
-/bin/arch              = `(/bin/arch) 2>/dev/null              || echo unknown`
-/usr/bin/arch -k       = `(/usr/bin/arch -k) 2>/dev/null       || echo unknown`
-/usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null || echo unknown`
-/usr/bin/hostinfo      = `(/usr/bin/hostinfo) 2>/dev/null      || echo unknown`
-/bin/machine           = `(/bin/machine) 2>/dev/null           || echo unknown`
-/usr/bin/oslevel       = `(/usr/bin/oslevel) 2>/dev/null       || echo unknown`
-/bin/universe          = `(/bin/universe) 2>/dev/null          || echo unknown`
-
-_ASUNAME
-
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    $as_echo "PATH: $as_dir"
-  done
-IFS=$as_save_IFS
-
-} >&5
-
-cat >&5 <<_ACEOF
-
-
-## ----------- ##
-## Core tests. ##
-## ----------- ##
-
-_ACEOF
-
-
-# Keep a trace of the command line.
-# Strip out --no-create and --no-recursion so they do not pile up.
-# Strip out --silent because we don't want to record it for future runs.
-# Also quote any args containing shell meta-characters.
-# Make two passes to allow for proper duplicate-argument suppression.
-ac_configure_args=
-ac_configure_args0=
-ac_configure_args1=
-ac_must_keep_next=false
-for ac_pass in 1 2
-do
-  for ac_arg
-  do
-    case $ac_arg in
-    -no-create | --no-c* | -n | -no-recursion | --no-r*) continue ;;
-    -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-    | -silent | --silent | --silen | --sile | --sil)
-      continue ;;
-    *\'*)
-      ac_arg=`$as_echo "$ac_arg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    case $ac_pass in
-    1) as_fn_append ac_configure_args0 " '$ac_arg'" ;;
-    2)
-      as_fn_append ac_configure_args1 " '$ac_arg'"
-      if test $ac_must_keep_next = true; then
-       ac_must_keep_next=false # Got value, back to normal.
-      else
-       case $ac_arg in
-         *=* | --config-cache | -C | -disable-* | --disable-* \
-         | -enable-* | --enable-* | -gas | --g* | -nfp | --nf* \
-         | -q | -quiet | --q* | -silent | --sil* | -v | -verb* \
-         | -with-* | --with-* | -without-* | --without-* | --x)
-           case "$ac_configure_args0 " in
-             "$ac_configure_args1"*" '$ac_arg' "* ) continue ;;
-           esac
-           ;;
-         -* ) ac_must_keep_next=true ;;
-       esac
-      fi
-      as_fn_append ac_configure_args " '$ac_arg'"
-      ;;
-    esac
-  done
-done
-{ ac_configure_args0=; unset ac_configure_args0;}
-{ ac_configure_args1=; unset ac_configure_args1;}
-
-# When interrupted or exit'd, cleanup temporary files, and complete
-# config.log.  We remove comments because anyway the quotes in there
-# would cause problems or look ugly.
-# WARNING: Use '\'' to represent an apostrophe within the trap.
-# WARNING: Do not start the trap code with a newline, due to a FreeBSD 4.0 bug.
-trap 'exit_status=$?
-  # Save into config.log some information that might help in debugging.
-  {
-    echo
-
-    $as_echo "## ---------------- ##
-## Cache variables. ##
-## ---------------- ##"
-    echo
-    # The following way of writing the cache mishandles newlines in values,
-(
-  for ac_var in `(set) 2>&1 | sed -n '\''s/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'\''`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-  (set) 2>&1 |
-    case $as_nl`(ac_space='\'' '\''; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      sed -n \
-       "s/'\''/'\''\\\\'\'''\''/g;
-         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\''\\2'\''/p"
-      ;; #(
-    *)
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-)
-    echo
-
-    $as_echo "## ----------------- ##
-## Output variables. ##
-## ----------------- ##"
-    echo
-    for ac_var in $ac_subst_vars
-    do
-      eval ac_val=\$$ac_var
-      case $ac_val in
-      *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-      esac
-      $as_echo "$ac_var='\''$ac_val'\''"
-    done | sort
-    echo
-
-    if test -n "$ac_subst_files"; then
-      $as_echo "## ------------------- ##
-## File substitutions. ##
-## ------------------- ##"
-      echo
-      for ac_var in $ac_subst_files
-      do
-       eval ac_val=\$$ac_var
-       case $ac_val in
-       *\'\''*) ac_val=`$as_echo "$ac_val" | sed "s/'\''/'\''\\\\\\\\'\'''\''/g"`;;
-       esac
-       $as_echo "$ac_var='\''$ac_val'\''"
-      done | sort
-      echo
-    fi
-
-    if test -s confdefs.h; then
-      $as_echo "## ----------- ##
-## confdefs.h. ##
-## ----------- ##"
-      echo
-      cat confdefs.h
-      echo
-    fi
-    test "$ac_signal" != 0 &&
-      $as_echo "$as_me: caught signal $ac_signal"
-    $as_echo "$as_me: exit $exit_status"
-  } >&5
-  rm -f core *.core core.conftest.* &&
-    rm -f -r conftest* confdefs* conf$$* $ac_clean_files &&
-    exit $exit_status
-' 0
-for ac_signal in 1 2 13 15; do
-  trap 'ac_signal='$ac_signal'; as_fn_exit 1' $ac_signal
-done
-ac_signal=0
-
-# confdefs.h avoids OS command line length limits that DEFS can exceed.
-rm -f -r conftest* confdefs.h
-
-$as_echo "/* confdefs.h */" > confdefs.h
-
-# Predefined preprocessor variables.
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_NAME "$PACKAGE_NAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_TARNAME "$PACKAGE_TARNAME"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_VERSION "$PACKAGE_VERSION"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_STRING "$PACKAGE_STRING"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_BUGREPORT "$PACKAGE_BUGREPORT"
-_ACEOF
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE_URL "$PACKAGE_URL"
-_ACEOF
-
-
-# Let the site file select an alternate cache file if it wants to.
-# Prefer an explicitly selected file to automatically selected ones.
-ac_site_file1=NONE
-ac_site_file2=NONE
-if test -n "$CONFIG_SITE"; then
-  # We do not want a PATH search for config.site.
-  case $CONFIG_SITE in #((
-    -*)  ac_site_file1=./$CONFIG_SITE;;
-    */*) ac_site_file1=$CONFIG_SITE;;
-    *)   ac_site_file1=./$CONFIG_SITE;;
-  esac
-elif test "x$prefix" != xNONE; then
-  ac_site_file1=$prefix/share/config.site
-  ac_site_file2=$prefix/etc/config.site
-else
-  ac_site_file1=$ac_default_prefix/share/config.site
-  ac_site_file2=$ac_default_prefix/etc/config.site
-fi
-for ac_site_file in "$ac_site_file1" "$ac_site_file2"
-do
-  test "x$ac_site_file" = xNONE && continue
-  if test /dev/null != "$ac_site_file" && test -r "$ac_site_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading site script $ac_site_file" >&5
-$as_echo "$as_me: loading site script $ac_site_file" >&6;}
-    sed 's/^/| /' "$ac_site_file" >&5
-    . "$ac_site_file" \
-      || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "failed to load site script $ac_site_file
-See \`config.log' for more details" "$LINENO" 5; }
-  fi
-done
-
-if test -r "$cache_file"; then
-  # Some versions of bash will fail to source /dev/null (special files
-  # actually), so we avoid doing that.  DJGPP emulates it as a regular file.
-  if test /dev/null != "$cache_file" && test -f "$cache_file"; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: loading cache $cache_file" >&5
-$as_echo "$as_me: loading cache $cache_file" >&6;}
-    case $cache_file in
-      [\\/]* | ?:[\\/]* ) . "$cache_file";;
-      *)                      . "./$cache_file";;
-    esac
-  fi
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: creating cache $cache_file" >&5
-$as_echo "$as_me: creating cache $cache_file" >&6;}
-  >$cache_file
-fi
-
-gl_header_list="$gl_header_list wchar.h"
-gl_header_list="$gl_header_list stdint.h"
-gl_header_list="$gl_header_list inttypes.h"
-gl_header_list="$gl_header_list unistd.h"
-gl_func_list="$gl_func_list symlink"
-gl_header_list="$gl_header_list features.h"
-gl_func_list="$gl_func_list iswcntrl"
-gl_header_list="$gl_header_list wctype.h"
-gl_func_list="$gl_func_list wcwidth"
-# Check that the precious variables saved in the cache have kept the same
-# value.
-ac_cache_corrupted=false
-for ac_var in $ac_precious_vars; do
-  eval ac_old_set=\$ac_cv_env_${ac_var}_set
-  eval ac_new_set=\$ac_env_${ac_var}_set
-  eval ac_old_val=\$ac_cv_env_${ac_var}_value
-  eval ac_new_val=\$ac_env_${ac_var}_value
-  case $ac_old_set,$ac_new_set in
-    set,)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was set to \`$ac_old_val' in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,set)
-      { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' was not set in the previous run" >&5
-$as_echo "$as_me: error: \`$ac_var' was not set in the previous run" >&2;}
-      ac_cache_corrupted=: ;;
-    ,);;
-    *)
-      if test "x$ac_old_val" != "x$ac_new_val"; then
-       # differences in whitespace do not lead to failure.
-       ac_old_val_w=`echo x $ac_old_val`
-       ac_new_val_w=`echo x $ac_new_val`
-       if test "$ac_old_val_w" != "$ac_new_val_w"; then
-         { $as_echo "$as_me:${as_lineno-$LINENO}: error: \`$ac_var' has changed since the previous run:" >&5
-$as_echo "$as_me: error: \`$ac_var' has changed since the previous run:" >&2;}
-         ac_cache_corrupted=:
-       else
-         { $as_echo "$as_me:${as_lineno-$LINENO}: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&5
-$as_echo "$as_me: warning: ignoring whitespace changes in \`$ac_var' since the previous run:" >&2;}
-         eval $ac_var=\$ac_old_val
-       fi
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   former value:  \`$ac_old_val'" >&5
-$as_echo "$as_me:   former value:  \`$ac_old_val'" >&2;}
-       { $as_echo "$as_me:${as_lineno-$LINENO}:   current value: \`$ac_new_val'" >&5
-$as_echo "$as_me:   current value: \`$ac_new_val'" >&2;}
-      fi;;
-  esac
-  # Pass precious variables to config.status.
-  if test "$ac_new_set" = set; then
-    case $ac_new_val in
-    *\'*) ac_arg=$ac_var=`$as_echo "$ac_new_val" | sed "s/'/'\\\\\\\\''/g"` ;;
-    *) ac_arg=$ac_var=$ac_new_val ;;
-    esac
-    case " $ac_configure_args " in
-      *" '$ac_arg' "*) ;; # Avoid dups.  Use of quotes ensures accuracy.
-      *) as_fn_append ac_configure_args " '$ac_arg'" ;;
-    esac
-  fi
-done
-if $ac_cache_corrupted; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-  { $as_echo "$as_me:${as_lineno-$LINENO}: error: changes in the environment can compromise the build" >&5
-$as_echo "$as_me: error: changes in the environment can compromise the build" >&2;}
-  as_fn_error $? "run \`make distclean' and/or \`rm $cache_file' and start over" "$LINENO" 5
-fi
-## -------------------- ##
-## Main body of script. ##
-## -------------------- ##
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-ac_aux_dir=
-for ac_dir in build-aux "$srcdir"/build-aux; do
-  if test -f "$ac_dir/install-sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install-sh -c"
-    break
-  elif test -f "$ac_dir/install.sh"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/install.sh -c"
-    break
-  elif test -f "$ac_dir/shtool"; then
-    ac_aux_dir=$ac_dir
-    ac_install_sh="$ac_aux_dir/shtool install -c"
-    break
-  fi
-done
-if test -z "$ac_aux_dir"; then
-  as_fn_error $? "cannot find install-sh, install.sh, or shtool in build-aux \"$srcdir\"/build-aux" "$LINENO" 5
-fi
-
-# These three variables are undocumented and unsupported,
-# and are intended to be withdrawn in a future Autoconf release.
-# They can cause serious problems if a builder's source tree is in a directory
-# whose full name contains unusual characters.
-ac_config_guess="$SHELL $ac_aux_dir/config.guess"  # Please don't use this var.
-ac_config_sub="$SHELL $ac_aux_dir/config.sub"  # Please don't use this var.
-ac_configure="$SHELL $ac_aux_dir/configure"  # Please don't use this var.
-
-
-am__api_version='1.14'
-
-# Find a good install program.  We prefer a C program (faster),
-# so one script is as good as another.  But avoid the broken or
-# incompatible versions:
-# SysV /etc/install, /usr/sbin/install
-# SunOS /usr/etc/install
-# IRIX /sbin/install
-# AIX /bin/install
-# AmigaOS /C/install, which installs bootblocks on floppy discs
-# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
-# AFS /usr/afsws/bin/install, which mishandles nonexistent args
-# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
-# OS/2's system install, which has a completely different semantic
-# ./install, which can be erroneously created by make from ./install.sh.
-# Reject install programs that cannot install multiple files.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5
-$as_echo_n "checking for a BSD-compatible install... " >&6; }
-if test -z "$INSTALL"; then
-if ${ac_cv_path_install+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    # Account for people who put trailing slashes in PATH elements.
-case $as_dir/ in #((
-  ./ | .// | /[cC]/* | \
-  /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \
-  ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \
-  /usr/ucb/* ) ;;
-  *)
-    # OSF1 and SCO ODT 3.0 have their own names for install.
-    # Don't use installbsd from OSF since it installs stuff as root
-    # by default.
-    for ac_prog in ginstall scoinst install; do
-      for ac_exec_ext in '' $ac_executable_extensions; do
-       if as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext"; then
-         if test $ac_prog = install &&
-           grep dspmsg "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-           # AIX install.  It has an incompatible calling convention.
-           :
-         elif test $ac_prog = install &&
-           grep pwplus "$as_dir/$ac_prog$ac_exec_ext" >/dev/null 2>&1; then
-           # program-specific install script used by HP pwplus--don't use.
-           :
-         else
-           rm -rf conftest.one conftest.two conftest.dir
-           echo one > conftest.one
-           echo two > conftest.two
-           mkdir conftest.dir
-           if "$as_dir/$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir" &&
-             test -s conftest.one && test -s conftest.two &&
-             test -s conftest.dir/conftest.one &&
-             test -s conftest.dir/conftest.two
-           then
-             ac_cv_path_install="$as_dir/$ac_prog$ac_exec_ext -c"
-             break 3
-           fi
-         fi
-       fi
-      done
-    done
-    ;;
-esac
-
-  done
-IFS=$as_save_IFS
-
-rm -rf conftest.one conftest.two conftest.dir
-
-fi
-  if test "${ac_cv_path_install+set}" = set; then
-    INSTALL=$ac_cv_path_install
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for INSTALL within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    INSTALL=$ac_install_sh
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5
-$as_echo "$INSTALL" >&6; }
-
-# Use test -z because SunOS4 sh mishandles braces in ${var-val}.
-# It thinks the first close brace ends the variable substitution.
-test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
-
-test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}'
-
-test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5
-$as_echo_n "checking whether build environment is sane... " >&6; }
-# Reject unsafe characters in $srcdir or the absolute working directory
-# name.  Accept space and tab only in the latter.
-am_lf='
-'
-case `pwd` in
-  *[\\\"\#\$\&\'\`$am_lf]*)
-    as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;;
-esac
-case $srcdir in
-  *[\\\"\#\$\&\'\`$am_lf\ \    ]*)
-    as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;;
-esac
-
-# Do 'set' in a subshell so we don't clobber the current shell's
-# arguments.  Must try -L first in case configure is actually a
-# symlink; some systems play weird games with the mod time of symlinks
-# (eg FreeBSD returns the mod time of the symlink's containing
-# directory).
-if (
-   am_has_slept=no
-   for am_try in 1 2; do
-     echo "timestamp, slept: $am_has_slept" > conftest.file
-     set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null`
-     if test "$*" = "X"; then
-       # -L didn't work.
-       set X `ls -t "$srcdir/configure" conftest.file`
-     fi
-     if test "$*" != "X $srcdir/configure conftest.file" \
-       && test "$*" != "X conftest.file $srcdir/configure"; then
-
-       # If neither matched, then we have a broken ls.  This can happen
-       # if, for instance, CONFIG_SHELL is bash and it inherits a
-       # broken ls alias from the environment.  This has actually
-       # happened.  Such a system could not be considered "sane".
-       as_fn_error $? "ls -t appears to fail.  Make sure there is not a broken
-  alias in your environment" "$LINENO" 5
-     fi
-     if test "$2" = conftest.file || test $am_try -eq 2; then
-       break
-     fi
-     # Just in case.
-     sleep 1
-     am_has_slept=yes
-   done
-   test "$2" = conftest.file
-   )
-then
-   # Ok.
-   :
-else
-   as_fn_error $? "newly created file is older than distributed files!
-Check your system clock" "$LINENO" 5
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-# If we didn't sleep, we still need to ensure time stamps of config.status and
-# generated files are strictly newer.
-am_sleep_pid=
-if grep 'slept: no' conftest.file >/dev/null 2>&1; then
-  ( sleep 1 ) &
-  am_sleep_pid=$!
-fi
-
-rm -f conftest.file
-
-test "$program_prefix" != NONE &&
-  program_transform_name="s&^&$program_prefix&;$program_transform_name"
-# Use a double $ so make ignores it.
-test "$program_suffix" != NONE &&
-  program_transform_name="s&\$&$program_suffix&;$program_transform_name"
-# Double any \ or $.
-# By default was `s,x,x', remove it if useless.
-ac_script='s/[\\$]/&&/g;s/;s,x,x,$//'
-program_transform_name=`$as_echo "$program_transform_name" | sed "$ac_script"`
-
-# expand $ac_aux_dir to an absolute path
-am_aux_dir=`cd $ac_aux_dir && pwd`
-
-if test x"${MISSING+set}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    MISSING="\${SHELL} \"$am_aux_dir/missing\"" ;;
-  *)
-    MISSING="\${SHELL} $am_aux_dir/missing" ;;
-  esac
-fi
-# Use eval to expand $SHELL
-if eval "$MISSING --is-lightweight"; then
-  am_missing_run="$MISSING "
-else
-  am_missing_run=
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5
-$as_echo "$as_me: WARNING: 'missing' script is too old or missing" >&2;}
-fi
-
-if test x"${install_sh}" != xset; then
-  case $am_aux_dir in
-  *\ * | *\    *)
-    install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;;
-  *)
-    install_sh="\${SHELL} $am_aux_dir/install-sh"
-  esac
-fi
-
-# Installed binaries are usually stripped using 'strip' when the user
-# run "make install-strip".  However 'strip' might not be the right
-# tool to use in cross-compilation environments, therefore Automake
-# will honor the 'STRIP' environment variable to overrule this program.
-if test "$cross_compiling" != no; then
-  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args.
-set dummy ${ac_tool_prefix}strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$STRIP"; then
-  ac_cv_prog_STRIP="$STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_STRIP="${ac_tool_prefix}strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-STRIP=$ac_cv_prog_STRIP
-if test -n "$STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5
-$as_echo "$STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_STRIP"; then
-  ac_ct_STRIP=$STRIP
-  # Extract the first word of "strip", so it can be a program name with args.
-set dummy strip; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_STRIP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_STRIP"; then
-  ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_STRIP="strip"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_STRIP=$ac_cv_prog_ac_ct_STRIP
-if test -n "$ac_ct_STRIP"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5
-$as_echo "$ac_ct_STRIP" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_STRIP" = x; then
-    STRIP=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    STRIP=$ac_ct_STRIP
-  fi
-else
-  STRIP="$ac_cv_prog_STRIP"
-fi
-
-fi
-INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s"
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for a thread-safe mkdir -p" >&5
-$as_echo_n "checking for a thread-safe mkdir -p... " >&6; }
-if test -z "$MKDIR_P"; then
-  if ${ac_cv_path_mkdir+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in mkdir gmkdir; do
-        for ac_exec_ext in '' $ac_executable_extensions; do
-          as_fn_executable_p "$as_dir/$ac_prog$ac_exec_ext" || continue
-          case `"$as_dir/$ac_prog$ac_exec_ext" --version 2>&1` in #(
-            'mkdir (GNU coreutils) '* | \
-            'mkdir (coreutils) '* | \
-            'mkdir (fileutils) '4.1*)
-              ac_cv_path_mkdir=$as_dir/$ac_prog$ac_exec_ext
-              break 3;;
-          esac
-        done
-       done
-  done
-IFS=$as_save_IFS
-
-fi
-
-  test -d ./--version && rmdir ./--version
-  if test "${ac_cv_path_mkdir+set}" = set; then
-    MKDIR_P="$ac_cv_path_mkdir -p"
-  else
-    # As a last resort, use the slow shell script.  Don't cache a
-    # value for MKDIR_P within a source directory, because that will
-    # break other packages using the cache if that directory is
-    # removed, or if the value is a relative name.
-    MKDIR_P="$ac_install_sh -d"
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5
-$as_echo "$MKDIR_P" >&6; }
-
-for ac_prog in gawk mawk nawk awk
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AWK+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AWK"; then
-  ac_cv_prog_AWK="$AWK" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AWK="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AWK=$ac_cv_prog_AWK
-if test -n "$AWK"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5
-$as_echo "$AWK" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$AWK" && break
-done
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
-       @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
-  *@@@%%%=?*=@@@%%%*)
-    eval ac_cv_prog_make_${ac_make}_set=yes;;
-  *)
-    eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  SET_MAKE=
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-rm -rf .tst 2>/dev/null
-mkdir .tst 2>/dev/null
-if test -d .tst; then
-  am__leading_dot=.
-else
-  am__leading_dot=_
-fi
-rmdir .tst 2>/dev/null
-
-# Check whether --enable-silent-rules was given.
-if test "${enable_silent_rules+set}" = set; then :
-  enableval=$enable_silent_rules;
-fi
-
-case $enable_silent_rules in # (((
-  yes) AM_DEFAULT_VERBOSITY=0;;
-   no) AM_DEFAULT_VERBOSITY=1;;
-    *) AM_DEFAULT_VERBOSITY=1;;
-esac
-am_make=${MAKE-make}
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5
-$as_echo_n "checking whether $am_make supports nested variables... " >&6; }
-if ${am_cv_make_support_nested_variables+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if $as_echo 'TRUE=$(BAR$(V))
-BAR0=false
-BAR1=true
-V=1
-am__doit:
-       @$(TRUE)
-.PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then
-  am_cv_make_support_nested_variables=yes
-else
-  am_cv_make_support_nested_variables=no
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5
-$as_echo "$am_cv_make_support_nested_variables" >&6; }
-if test $am_cv_make_support_nested_variables = yes; then
-    AM_V='$(V)'
-  AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)'
-else
-  AM_V=$AM_DEFAULT_VERBOSITY
-  AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY
-fi
-AM_BACKSLASH='\'
-
-if test "`cd $srcdir && pwd`" != "`pwd`"; then
-  # Use -I$(srcdir) only when $(srcdir) != ., so that make's output
-  # is not polluted with repeated "-I."
-  am__isrc=' -I$(srcdir)'
-  # test to see if srcdir already configured
-  if test -f $srcdir/config.status; then
-    as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5
-  fi
-fi
-
-# test whether we have cygpath
-if test -z "$CYGPATH_W"; then
-  if (cygpath --version) >/dev/null 2>/dev/null; then
-    CYGPATH_W='cygpath -w'
-  else
-    CYGPATH_W=echo
-  fi
-fi
-
-
-# Define the identity of the package.
- PACKAGE='dummy'
- VERSION='0'
-
-
-cat >>confdefs.h <<_ACEOF
-#define PACKAGE "$PACKAGE"
-_ACEOF
-
-
-cat >>confdefs.h <<_ACEOF
-#define VERSION "$VERSION"
-_ACEOF
-
-# Some tools Automake needs.
-
-ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"}
-
-
-AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"}
-
-
-AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"}
-
-
-AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"}
-
-
-MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"}
-
-# For better backward compatibility.  To be removed once Automake 1.9.x
-# dies out for good.  For more background, see:
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00001.html>
-# <http://lists.gnu.org/archive/html/automake/2012-07/msg00014.html>
-mkdir_p='$(MKDIR_P)'
-
-# We need awk for the "check" target.  The system "awk" is bad on
-# some platforms.
-# Always define AMTAR for backward compatibility.  Yes, it's still used
-# in the wild :-(  We should find a proper way to deprecate it ...
-AMTAR='$${TAR-tar}'
-
-
-# We'll loop over all known methods to create a tar archive until one works.
-_am_tools='gnutar  pax cpio none'
-
-am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'
-
-
-
-
-
-
-# POSIX will say in a future version that running "rm -f" with no argument
-# is OK; and we want to be able to make that assumption in our Makefile
-# recipes.  So use an aggressive probe to check that the usage we want is
-# actually supported "in the wild" to an acceptable degree.
-# See automake bug#10828.
-# To make any issue more visible, cause the running configure to be aborted
-# by default if the 'rm' program in use doesn't match our expectations; the
-# user can still override this though.
-if rm -f && rm -fr && rm -rf; then : OK; else
-  cat >&2 <<'END'
-Oops!
-
-Your 'rm' program seems unable to run without file operands specified
-on the command line, even when the '-f' option is present.  This is contrary
-to the behaviour of most rm programs out there, and not conforming with
-the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542>
-
-Please tell bug-automake@gnu.org about your system, including the value
-of your $PATH and any error possibly output before this message.  This
-can help us improve future automake versions.
-
-END
-  if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then
-    echo 'Configuration will proceed anyway, since you have set the' >&2
-    echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2
-    echo >&2
-  else
-    cat >&2 <<'END'
-Aborting the configuration process, to ensure you take notice of the issue.
-
-You can download and install GNU coreutils to get an 'rm' implementation
-that behaves properly: <http://www.gnu.org/software/coreutils/>.
-
-If you want to complete the configuration process using your problematic
-'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM
-to "yes", and re-run configure.
-
-END
-    as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5
-  fi
-fi
-
-ac_config_headers="$ac_config_headers config.h"
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}gcc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_CC"; then
-  ac_ct_CC=$CC
-  # Extract the first word of "gcc", so it can be a program name with args.
-set dummy gcc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="gcc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-else
-  CC="$ac_cv_prog_CC"
-fi
-
-if test -z "$CC"; then
-          if test -n "$ac_tool_prefix"; then
-    # Extract the first word of "${ac_tool_prefix}cc", so it can be a program name with args.
-set dummy ${ac_tool_prefix}cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="${ac_tool_prefix}cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  fi
-fi
-if test -z "$CC"; then
-  # Extract the first word of "cc", so it can be a program name with args.
-set dummy cc; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-  ac_prog_rejected=no
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    if test "$as_dir/$ac_word$ac_exec_ext" = "/usr/ucb/cc"; then
-       ac_prog_rejected=yes
-       continue
-     fi
-    ac_cv_prog_CC="cc"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-if test $ac_prog_rejected = yes; then
-  # We found a bogon in the path, so make sure we never use it.
-  set dummy $ac_cv_prog_CC
-  shift
-  if test $# != 0; then
-    # We chose a different compiler from the bogus one.
-    # However, it has the same basename, so the bogon will be chosen
-    # first if we set CC to just the basename; use the full file name.
-    shift
-    ac_cv_prog_CC="$as_dir/$ac_word${1+' '}$@"
-  fi
-fi
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$CC"; then
-  if test -n "$ac_tool_prefix"; then
-  for ac_prog in cl.exe
-  do
-    # Extract the first word of "$ac_tool_prefix$ac_prog", so it can be a program name with args.
-set dummy $ac_tool_prefix$ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$CC"; then
-  ac_cv_prog_CC="$CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_CC="$ac_tool_prefix$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-CC=$ac_cv_prog_CC
-if test -n "$CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $CC" >&5
-$as_echo "$CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-    test -n "$CC" && break
-  done
-fi
-if test -z "$CC"; then
-  ac_ct_CC=$CC
-  for ac_prog in cl.exe
-do
-  # Extract the first word of "$ac_prog", so it can be a program name with args.
-set dummy $ac_prog; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_CC+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_CC"; then
-  ac_cv_prog_ac_ct_CC="$ac_ct_CC" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_CC="$ac_prog"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_CC=$ac_cv_prog_ac_ct_CC
-if test -n "$ac_ct_CC"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_CC" >&5
-$as_echo "$ac_ct_CC" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-  test -n "$ac_ct_CC" && break
-done
-
-  if test "x$ac_ct_CC" = x; then
-    CC=""
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    CC=$ac_ct_CC
-  fi
-fi
-
-fi
-
-
-test -z "$CC" && { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "no acceptable C compiler found in \$PATH
-See \`config.log' for more details" "$LINENO" 5; }
-
-# Provide some information about the compiler.
-$as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler version" >&5
-set X $ac_compile
-ac_compiler=$2
-for ac_option in --version -v -V -qversion; do
-  { { ac_try="$ac_compiler $ac_option >&5"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compiler $ac_option >&5") 2>conftest.err
-  ac_status=$?
-  if test -s conftest.err; then
-    sed '10a\
-... rest of stderr output deleted ...
-         10q' conftest.err >conftest.er1
-    cat conftest.er1 >&5
-  fi
-  rm -f conftest.er1 conftest.err
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-done
-
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files a.out a.out.dSYM a.exe b.out"
-# Try to create an executable without -o first, disregard a.out.
-# It will help us diagnose broken compilers, and finding out an intuition
-# of exeext.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the C compiler works" >&5
-$as_echo_n "checking whether the C compiler works... " >&6; }
-ac_link_default=`$as_echo "$ac_link" | sed 's/ -o *conftest[^ ]*//'`
-
-# The possible output files:
-ac_files="a.out conftest.exe conftest a.exe a_out.exe b.out conftest.*"
-
-ac_rmfiles=
-for ac_file in $ac_files
-do
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    * ) ac_rmfiles="$ac_rmfiles $ac_file";;
-  esac
-done
-rm -f $ac_rmfiles
-
-if { { ac_try="$ac_link_default"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link_default") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # Autoconf-2.13 could set the ac_cv_exeext variable to `no'.
-# So ignore a value of `no', otherwise this would lead to `EXEEXT = no'
-# in a Makefile.  We should not override ac_cv_exeext if it was cached,
-# so that the user can short-circuit this test for compilers unknown to
-# Autoconf.
-for ac_file in $ac_files ''
-do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj )
-       ;;
-    [ab].out )
-       # We found the default executable, but exeext='' is most
-       # certainly right.
-       break;;
-    *.* )
-       if test "${ac_cv_exeext+set}" = set && test "$ac_cv_exeext" != no;
-       then :; else
-          ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-       fi
-       # We set ac_cv_exeext here because the later test for it is not
-       # safe: cross compilers may not add the suffix if given an `-o'
-       # argument, so we may need to know it at that point already.
-       # Even if this section looks crufty: it has the advantage of
-       # actually working.
-       break;;
-    * )
-       break;;
-  esac
-done
-test "$ac_cv_exeext" = no && ac_cv_exeext=
-
-else
-  ac_file=''
-fi
-if test -z "$ac_file"; then :
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-$as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error 77 "C compiler cannot create executables
-See \`config.log' for more details" "$LINENO" 5; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for C compiler default output file name" >&5
-$as_echo_n "checking for C compiler default output file name... " >&6; }
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_file" >&5
-$as_echo "$ac_file" >&6; }
-ac_exeext=$ac_cv_exeext
-
-rm -f -r a.out a.out.dSYM a.exe conftest$ac_cv_exeext b.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of executables" >&5
-$as_echo_n "checking for suffix of executables... " >&6; }
-if { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  # If both `conftest.exe' and `conftest' are `present' (well, observable)
-# catch `conftest.exe'.  For instance with Cygwin, `ls conftest' will
-# work properly (i.e., refer to `conftest.exe'), while it won't with
-# `rm'.
-for ac_file in conftest.exe conftest conftest.*; do
-  test -f "$ac_file" || continue
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM | *.o | *.obj ) ;;
-    *.* ) ac_cv_exeext=`expr "$ac_file" : '[^.]*\(\..*\)'`
-         break;;
-    * ) break;;
-  esac
-done
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of executables: cannot compile and link
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest conftest$ac_cv_exeext
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_exeext" >&5
-$as_echo "$ac_cv_exeext" >&6; }
-
-rm -f conftest.$ac_ext
-EXEEXT=$ac_cv_exeext
-ac_exeext=$EXEEXT
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdio.h>
-int
-main ()
-{
-FILE *f = fopen ("conftest.out", "w");
- return ferror (f) || fclose (f) != 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-ac_clean_files="$ac_clean_files conftest.out"
-# Check that the compiler produces executables we can run.  If not, either
-# the compiler is broken, or we cross compile.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are cross compiling" >&5
-$as_echo_n "checking whether we are cross compiling... " >&6; }
-if test "$cross_compiling" != yes; then
-  { { ac_try="$ac_link"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_link") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }
-  if { ac_try='./conftest$ac_cv_exeext'
-  { { case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_try") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; }; then
-    cross_compiling=no
-  else
-    if test "$cross_compiling" = maybe; then
-       cross_compiling=yes
-    else
-       { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot run C compiled programs.
-If you meant to cross compile, use \`--host'.
-See \`config.log' for more details" "$LINENO" 5; }
-    fi
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $cross_compiling" >&5
-$as_echo "$cross_compiling" >&6; }
-
-rm -f conftest.$ac_ext conftest$ac_cv_exeext conftest.out
-ac_clean_files=$ac_clean_files_save
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for suffix of object files" >&5
-$as_echo_n "checking for suffix of object files... " >&6; }
-if ${ac_cv_objext+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-rm -f conftest.o conftest.obj
-if { { ac_try="$ac_compile"
-case "(($ac_try" in
-  *\"* | *\`* | *\\*) ac_try_echo=\$ac_try;;
-  *) ac_try_echo=$ac_try;;
-esac
-eval ac_try_echo="\"\$as_me:${as_lineno-$LINENO}: $ac_try_echo\""
-$as_echo "$ac_try_echo"; } >&5
-  (eval "$ac_compile") 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then :
-  for ac_file in conftest.o conftest.obj conftest.*; do
-  test -f "$ac_file" || continue;
-  case $ac_file in
-    *.$ac_ext | *.xcoff | *.tds | *.d | *.pdb | *.xSYM | *.bb | *.bbg | *.map | *.inf | *.dSYM ) ;;
-    *) ac_cv_objext=`expr "$ac_file" : '.*\.\(.*\)'`
-       break;;
-  esac
-done
-else
-  $as_echo "$as_me: failed program was:" >&5
-sed 's/^/| /' conftest.$ac_ext >&5
-
-{ { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "cannot compute suffix of object files: cannot compile
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-rm -f conftest.$ac_cv_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_objext" >&5
-$as_echo "$ac_cv_objext" >&6; }
-OBJEXT=$ac_cv_objext
-ac_objext=$OBJEXT
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C compiler" >&5
-$as_echo_n "checking whether we are using the GNU C compiler... " >&6; }
-if ${ac_cv_c_compiler_gnu+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-#ifndef __GNUC__
-       choke me
-#endif
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_compiler_gnu=yes
-else
-  ac_compiler_gnu=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-ac_cv_c_compiler_gnu=$ac_compiler_gnu
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_compiler_gnu" >&5
-$as_echo "$ac_cv_c_compiler_gnu" >&6; }
-if test $ac_compiler_gnu = yes; then
-  GCC=yes
-else
-  GCC=
-fi
-ac_test_CFLAGS=${CFLAGS+set}
-ac_save_CFLAGS=$CFLAGS
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC accepts -g" >&5
-$as_echo_n "checking whether $CC accepts -g... " >&6; }
-if ${ac_cv_prog_cc_g+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_save_c_werror_flag=$ac_c_werror_flag
-   ac_c_werror_flag=yes
-   ac_cv_prog_cc_g=no
-   CFLAGS="-g"
-   cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-else
-  CFLAGS=""
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  ac_c_werror_flag=$ac_save_c_werror_flag
-        CFLAGS="-g"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_g=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-   ac_c_werror_flag=$ac_save_c_werror_flag
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_g" >&5
-$as_echo "$ac_cv_prog_cc_g" >&6; }
-if test "$ac_test_CFLAGS" = set; then
-  CFLAGS=$ac_save_CFLAGS
-elif test $ac_cv_prog_cc_g = yes; then
-  if test "$GCC" = yes; then
-    CFLAGS="-g -O2"
-  else
-    CFLAGS="-g"
-  fi
-else
-  if test "$GCC" = yes; then
-    CFLAGS="-O2"
-  else
-    CFLAGS=
-  fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $CC option to accept ISO C89" >&5
-$as_echo_n "checking for $CC option to accept ISO C89... " >&6; }
-if ${ac_cv_prog_cc_c89+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_prog_cc_c89=no
-ac_save_CC=$CC
-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdarg.h>
-#include <stdio.h>
-struct stat;
-/* Most of the following tests are stolen from RCS 5.7's src/conf.sh.  */
-struct buf { int x; };
-FILE * (*rcsopen) (struct buf *, struct stat *, int);
-static char *e (p, i)
-     char **p;
-     int i;
-{
-  return p[i];
-}
-static char *f (char * (*g) (char **, int), char **p, ...)
-{
-  char *s;
-  va_list v;
-  va_start (v,p);
-  s = g (p, va_arg (v,int));
-  va_end (v);
-  return s;
-}
-
-/* OSF 4.0 Compaq cc is some sort of almost-ANSI by default.  It has
-   function prototypes and stuff, but not '\xHH' hex character constants.
-   These don't provoke an error unfortunately, instead are silently treated
-   as 'x'.  The following induces an error, until -std is added to get
-   proper ANSI mode.  Curiously '\x00'!='x' always comes out true, for an
-   array size at least.  It's necessary to write '\x00'==0 to get something
-   that's true only with -std.  */
-int osf4_cc_array ['\x00' == 0 ? 1 : -1];
-
-/* IBM C 6 for AIX is almost-ANSI by default, but it replaces macro parameters
-   inside strings and character constants.  */
-#define FOO(x) 'x'
-int xlc6_cc_array[FOO(a) == 'x' ? 1 : -1];
-
-int test (int i, double x);
-struct s1 {int (*f) (int a);};
-struct s2 {int (*f) (double a);};
-int pairnames (int, char **, FILE *(*)(struct buf *, struct stat *, int), int, int);
-int argc;
-char **argv;
-int
-main ()
-{
-return f (e, argv, 0) != argv[0]  ||  f (e, argv, 1) != argv[1];
-  ;
-  return 0;
-}
-_ACEOF
-for ac_arg in '' -qlanglvl=extc89 -qlanglvl=ansi -std \
-       -Ae "-Aa -D_HPUX_SOURCE" "-Xc -D__EXTENSIONS__"
-do
-  CC="$ac_save_CC $ac_arg"
-  if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_prog_cc_c89=$ac_arg
-fi
-rm -f core conftest.err conftest.$ac_objext
-  test "x$ac_cv_prog_cc_c89" != "xno" && break
-done
-rm -f conftest.$ac_ext
-CC=$ac_save_CC
-
-fi
-# AC_CACHE_VAL
-case "x$ac_cv_prog_cc_c89" in
-  x)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: none needed" >&5
-$as_echo "none needed" >&6; } ;;
-  xno)
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: unsupported" >&5
-$as_echo "unsupported" >&6; } ;;
-  *)
-    CC="$CC $ac_cv_prog_cc_c89"
-    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_prog_cc_c89" >&5
-$as_echo "$ac_cv_prog_cc_c89" >&6; } ;;
-esac
-if test "x$ac_cv_prog_cc_c89" != xno; then :
-
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $CC understands -c and -o together" >&5
-$as_echo_n "checking whether $CC understands -c and -o together... " >&6; }
-if ${am_cv_prog_cc_c_o+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-  # Make sure it works both with $CC and with simple cc.
-  # Following AC_PROG_CC_C_O, we do the test twice because some
-  # compilers refuse to overwrite an existing .o file with -o,
-  # though they will create one.
-  am_cv_prog_cc_c_o=yes
-  for am_i in 1 2; do
-    if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5
-   ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5
-   ac_status=$?
-   echo "$as_me:$LINENO: \$? = $ac_status" >&5
-   (exit $ac_status); } \
-         && test -f conftest2.$ac_objext; then
-      : OK
-    else
-      am_cv_prog_cc_c_o=no
-      break
-    fi
-  done
-  rm -f core conftest*
-  unset am_i
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5
-$as_echo "$am_cv_prog_cc_c_o" >&6; }
-if test "$am_cv_prog_cc_c_o" != yes; then
-   # Losing compiler, so override with the script.
-   # FIXME: It is wrong to rewrite CC.
-   # But if we don't then we get into trouble of one sort or another.
-   # A longer-term fix would be to have automake use am__CC in this case,
-   # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)"
-   CC="$am_aux_dir/compile $CC"
-fi
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-DEPDIR="${am__leading_dot}deps"
-
-ac_config_commands="$ac_config_commands depfiles"
-
-
-am_make=${MAKE-make}
-cat > confinc << 'END'
-am__doit:
-       @echo this is the am__doit target
-.PHONY: am__doit
-END
-# If we don't find an include directive, just comment out the code.
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for style of include used by $am_make" >&5
-$as_echo_n "checking for style of include used by $am_make... " >&6; }
-am__include="#"
-am__quote=
-_am_result=none
-# First try GNU make style include.
-echo "include confinc" > confmf
-# Ignore all kinds of additional output from 'make'.
-case `$am_make -s -f confmf 2> /dev/null` in #(
-*the\ am__doit\ target*)
-  am__include=include
-  am__quote=
-  _am_result=GNU
-  ;;
-esac
-# Now try BSD make style include.
-if test "$am__include" = "#"; then
-   echo '.include "confinc"' > confmf
-   case `$am_make -s -f confmf 2> /dev/null` in #(
-   *the\ am__doit\ target*)
-     am__include=.include
-     am__quote="\""
-     _am_result=BSD
-     ;;
-   esac
-fi
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $_am_result" >&5
-$as_echo "$_am_result" >&6; }
-rm -f confinc confmf
-
-# Check whether --enable-dependency-tracking was given.
-if test "${enable_dependency_tracking+set}" = set; then :
-  enableval=$enable_dependency_tracking;
-fi
-
-if test "x$enable_dependency_tracking" != xno; then
-  am_depcomp="$ac_aux_dir/depcomp"
-  AMDEPBACKSLASH='\'
-  am__nodep='_no'
-fi
- if test "x$enable_dependency_tracking" != xno; then
-  AMDEP_TRUE=
-  AMDEP_FALSE='#'
-else
-  AMDEP_TRUE='#'
-  AMDEP_FALSE=
-fi
-
-
-
-depcc="$CC"   am_compiler_list=
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5
-$as_echo_n "checking dependency style of $depcc... " >&6; }
-if ${am_cv_CC_dependencies_compiler_type+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then
-  # We make a subdir and do the tests there.  Otherwise we can end up
-  # making bogus files that we don't know about and never remove.  For
-  # instance it was reported that on HP-UX the gcc test will end up
-  # making a dummy file named 'D' -- because '-MD' means "put the output
-  # in D".
-  rm -rf conftest.dir
-  mkdir conftest.dir
-  # Copy depcomp to subdir because otherwise we won't find it if we're
-  # using a relative directory.
-  cp "$am_depcomp" conftest.dir
-  cd conftest.dir
-  # We will build objects and dependencies in a subdirectory because
-  # it helps to detect inapplicable dependency modes.  For instance
-  # both Tru64's cc and ICC support -MD to output dependencies as a
-  # side effect of compilation, but ICC will put the dependencies in
-  # the current directory while Tru64 will put them in the object
-  # directory.
-  mkdir sub
-
-  am_cv_CC_dependencies_compiler_type=none
-  if test "$am_compiler_list" = ""; then
-     am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp`
-  fi
-  am__universal=false
-  case " $depcc " in #(
-     *\ -arch\ *\ -arch\ *) am__universal=true ;;
-     esac
-
-  for depmode in $am_compiler_list; do
-    # Setup a source with many dependencies, because some compilers
-    # like to wrap large dependency lists on column 80 (with \), and
-    # we should not choose a depcomp mode which is confused by this.
-    #
-    # We need to recreate these files for each test, as the compiler may
-    # overwrite some of them when testing with obscure command lines.
-    # This happens at least with the AIX C compiler.
-    : > sub/conftest.c
-    for i in 1 2 3 4 5 6; do
-      echo '#include "conftst'$i'.h"' >> sub/conftest.c
-      # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with
-      # Solaris 10 /bin/sh.
-      echo '/* dummy */' > sub/conftst$i.h
-    done
-    echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf
-
-    # We check with '-c' and '-o' for the sake of the "dashmstdout"
-    # mode.  It turns out that the SunPro C++ compiler does not properly
-    # handle '-M -o', and we need to detect this.  Also, some Intel
-    # versions had trouble with output in subdirs.
-    am__obj=sub/conftest.${OBJEXT-o}
-    am__minus_obj="-o $am__obj"
-    case $depmode in
-    gcc)
-      # This depmode causes a compiler race in universal mode.
-      test "$am__universal" = false || continue
-      ;;
-    nosideeffect)
-      # After this tag, mechanisms are not by side-effect, so they'll
-      # only be used when explicitly requested.
-      if test "x$enable_dependency_tracking" = xyes; then
-       continue
-      else
-       break
-      fi
-      ;;
-    msvc7 | msvc7msys | msvisualcpp | msvcmsys)
-      # This compiler won't grok '-c -o', but also, the minuso test has
-      # not run yet.  These depmodes are late enough in the game, and
-      # so weak that their functioning should not be impacted.
-      am__obj=conftest.${OBJEXT-o}
-      am__minus_obj=
-      ;;
-    none) break ;;
-    esac
-    if depmode=$depmode \
-       source=sub/conftest.c object=$am__obj \
-       depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \
-       $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \
-         >/dev/null 2>conftest.err &&
-       grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 &&
-       grep $am__obj sub/conftest.Po > /dev/null 2>&1 &&
-       ${MAKE-make} -s -f confmf > /dev/null 2>&1; then
-      # icc doesn't choke on unknown options, it will just issue warnings
-      # or remarks (even with -Werror).  So we grep stderr for any message
-      # that says an option was ignored or not supported.
-      # When given -MP, icc 7.0 and 7.1 complain thusly:
-      #   icc: Command line warning: ignoring option '-M'; no argument required
-      # The diagnosis changed in icc 8.0:
-      #   icc: Command line remark: option '-MP' not supported
-      if (grep 'ignoring option' conftest.err ||
-          grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else
-        am_cv_CC_dependencies_compiler_type=$depmode
-        break
-      fi
-    fi
-  done
-
-  cd ..
-  rm -rf conftest.dir
-else
-  am_cv_CC_dependencies_compiler_type=none
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5
-$as_echo "$am_cv_CC_dependencies_compiler_type" >&6; }
-CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type
-
- if
-  test "x$enable_dependency_tracking" != xno \
-  && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then
-  am__fastdepCC_TRUE=
-  am__fastdepCC_FALSE='#'
-else
-  am__fastdepCC_TRUE='#'
-  am__fastdepCC_FALSE=
-fi
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} sets \$(MAKE)" >&5
-$as_echo_n "checking whether ${MAKE-make} sets \$(MAKE)... " >&6; }
-set x ${MAKE-make}
-ac_make=`$as_echo "$2" | sed 's/+/p/g; s/[^a-zA-Z0-9_]/_/g'`
-if eval \${ac_cv_prog_make_${ac_make}_set+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat >conftest.make <<\_ACEOF
-SHELL = /bin/sh
-all:
-       @echo '@@@%%%=$(MAKE)=@@@%%%'
-_ACEOF
-# GNU make sometimes prints "make[1]: Entering ...", which would confuse us.
-case `${MAKE-make} -f conftest.make 2>/dev/null` in
-  *@@@%%%=?*=@@@%%%*)
-    eval ac_cv_prog_make_${ac_make}_set=yes;;
-  *)
-    eval ac_cv_prog_make_${ac_make}_set=no;;
-esac
-rm -f conftest.make
-fi
-if eval test \$ac_cv_prog_make_${ac_make}_set = yes; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
-  SET_MAKE=
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-  SET_MAKE="MAKE=${MAKE-make}"
-fi
-
-
-# For autobuild.
-# Make sure we can run config.sub.
-$SHELL "$ac_aux_dir/config.sub" sun4 >/dev/null 2>&1 ||
-  as_fn_error $? "cannot run $SHELL $ac_aux_dir/config.sub" "$LINENO" 5
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking build system type" >&5
-$as_echo_n "checking build system type... " >&6; }
-if ${ac_cv_build+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_build_alias=$build_alias
-test "x$ac_build_alias" = x &&
-  ac_build_alias=`$SHELL "$ac_aux_dir/config.guess"`
-test "x$ac_build_alias" = x &&
-  as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5
-ac_cv_build=`$SHELL "$ac_aux_dir/config.sub" $ac_build_alias` ||
-  as_fn_error $? "$SHELL $ac_aux_dir/config.sub $ac_build_alias failed" "$LINENO" 5
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5
-$as_echo "$ac_cv_build" >&6; }
-case $ac_cv_build in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;;
-esac
-build=$ac_cv_build
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_build
-shift
-build_cpu=$1
-build_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-build_os=$*
-IFS=$ac_save_IFS
-case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking host system type" >&5
-$as_echo_n "checking host system type... " >&6; }
-if ${ac_cv_host+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "x$host_alias" = x; then
-  ac_cv_host=$ac_cv_build
-else
-  ac_cv_host=`$SHELL "$ac_aux_dir/config.sub" $host_alias` ||
-    as_fn_error $? "$SHELL $ac_aux_dir/config.sub $host_alias failed" "$LINENO" 5
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5
-$as_echo "$ac_cv_host" >&6; }
-case $ac_cv_host in
-*-*-*) ;;
-*) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;;
-esac
-host=$ac_cv_host
-ac_save_IFS=$IFS; IFS='-'
-set x $ac_cv_host
-shift
-host_cpu=$1
-host_vendor=$2
-shift; shift
-# Remember, the first character of IFS is used to create $*,
-# except with old shells:
-host_os=$*
-IFS=$ac_save_IFS
-case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac
-
-
-
-
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking how to run the C preprocessor" >&5
-$as_echo_n "checking how to run the C preprocessor... " >&6; }
-# On Suns, sometimes $CPP names a directory.
-if test -n "$CPP" && test -d "$CPP"; then
-  CPP=
-fi
-if test -z "$CPP"; then
-  if ${ac_cv_prog_CPP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-      # Double quotes because CPP needs to be expanded
-    for CPP in "$CC -E" "$CC -E -traditional-cpp" "/lib/cpp"
-    do
-      ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-  break
-fi
-
-    done
-    ac_cv_prog_CPP=$CPP
-
-fi
-  CPP=$ac_cv_prog_CPP
-else
-  ac_cv_prog_CPP=$CPP
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $CPP" >&5
-$as_echo "$CPP" >&6; }
-ac_preproc_ok=false
-for ac_c_preproc_warn_flag in '' yes
-do
-  # Use a header file that comes with gcc, so configuring glibc
-  # with a fresh cross-compiler works.
-  # Prefer <limits.h> to <assert.h> if __STDC__ is defined, since
-  # <limits.h> exists even on freestanding compilers.
-  # On the NeXT, cc -E runs the code through the compiler's parser,
-  # not just through cpp. "Syntax error" is here to catch this case.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifdef __STDC__
-# include <limits.h>
-#else
-# include <assert.h>
-#endif
-                    Syntax error
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-
-else
-  # Broken: fails on valid input.
-continue
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-  # OK, works on sane cases.  Now check whether nonexistent headers
-  # can be detected and how.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ac_nonexistent.h>
-_ACEOF
-if ac_fn_c_try_cpp "$LINENO"; then :
-  # Broken: success on invalid input.
-continue
-else
-  # Passes both tests.
-ac_preproc_ok=:
-break
-fi
-rm -f conftest.err conftest.i conftest.$ac_ext
-
-done
-# Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped.
-rm -f conftest.i conftest.err conftest.$ac_ext
-if $ac_preproc_ok; then :
-
-else
-  { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
-$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
-as_fn_error $? "C preprocessor \"$CPP\" fails sanity check
-See \`config.log' for more details" "$LINENO" 5; }
-fi
-
-ac_ext=c
-ac_cpp='$CPP $CPPFLAGS'
-ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5'
-ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5'
-ac_compiler_gnu=$ac_cv_c_compiler_gnu
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for grep that handles long lines and -e" >&5
-$as_echo_n "checking for grep that handles long lines and -e... " >&6; }
-if ${ac_cv_path_GREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -z "$GREP"; then
-  ac_path_GREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in grep ggrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_GREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_GREP" || continue
-# Check for GNU ac_path_GREP and select it if it is found.
-  # Check for GNU $ac_path_GREP
-case `"$ac_path_GREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_GREP="$ac_path_GREP" ac_path_GREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'GREP' >> "conftest.nl"
-    "$ac_path_GREP" -e 'GREP$' -e '-(cannot match)-' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_GREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_GREP="$ac_path_GREP"
-      ac_path_GREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_GREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_GREP"; then
-    as_fn_error $? "no acceptable grep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_GREP=$GREP
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_GREP" >&5
-$as_echo "$ac_cv_path_GREP" >&6; }
- GREP="$ac_cv_path_GREP"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for egrep" >&5
-$as_echo_n "checking for egrep... " >&6; }
-if ${ac_cv_path_EGREP+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if echo a | $GREP -E '(a|b)' >/dev/null 2>&1
-   then ac_cv_path_EGREP="$GREP -E"
-   else
-     if test -z "$EGREP"; then
-  ac_path_EGREP_found=false
-  # Loop through the user's path and test for each of PROGNAME-LIST
-  as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH$PATH_SEPARATOR/usr/xpg4/bin
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_prog in egrep; do
-    for ac_exec_ext in '' $ac_executable_extensions; do
-      ac_path_EGREP="$as_dir/$ac_prog$ac_exec_ext"
-      as_fn_executable_p "$ac_path_EGREP" || continue
-# Check for GNU ac_path_EGREP and select it if it is found.
-  # Check for GNU $ac_path_EGREP
-case `"$ac_path_EGREP" --version 2>&1` in
-*GNU*)
-  ac_cv_path_EGREP="$ac_path_EGREP" ac_path_EGREP_found=:;;
-*)
-  ac_count=0
-  $as_echo_n 0123456789 >"conftest.in"
-  while :
-  do
-    cat "conftest.in" "conftest.in" >"conftest.tmp"
-    mv "conftest.tmp" "conftest.in"
-    cp "conftest.in" "conftest.nl"
-    $as_echo 'EGREP' >> "conftest.nl"
-    "$ac_path_EGREP" 'EGREP$' < "conftest.nl" >"conftest.out" 2>/dev/null || break
-    diff "conftest.out" "conftest.nl" >/dev/null 2>&1 || break
-    as_fn_arith $ac_count + 1 && ac_count=$as_val
-    if test $ac_count -gt ${ac_path_EGREP_max-0}; then
-      # Best one so far, save it but keep looking for a better one
-      ac_cv_path_EGREP="$ac_path_EGREP"
-      ac_path_EGREP_max=$ac_count
-    fi
-    # 10*(2^10) chars as input seems more than enough
-    test $ac_count -gt 10 && break
-  done
-  rm -f conftest.in conftest.tmp conftest.nl conftest.out;;
-esac
-
-      $ac_path_EGREP_found && break 3
-    done
-  done
-  done
-IFS=$as_save_IFS
-  if test -z "$ac_cv_path_EGREP"; then
-    as_fn_error $? "no acceptable egrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5
-  fi
-else
-  ac_cv_path_EGREP=$EGREP
-fi
-
-   fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_EGREP" >&5
-$as_echo "$ac_cv_path_EGREP" >&6; }
- EGREP="$ac_cv_path_EGREP"
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for Minix Amsterdam compiler" >&5
-$as_echo_n "checking for Minix Amsterdam compiler... " >&6; }
-if ${gl_cv_c_amsterdam_compiler+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#ifdef __ACK__
-Amsterdam
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Amsterdam" >/dev/null 2>&1; then :
-  gl_cv_c_amsterdam_compiler=yes
-else
-  gl_cv_c_amsterdam_compiler=no
-fi
-rm -f conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5
-$as_echo "$gl_cv_c_amsterdam_compiler" >&6; }
-  if test -z "$AR"; then
-    if test $gl_cv_c_amsterdam_compiler = yes; then
-      AR='cc -c.a'
-      if test -z "$ARFLAGS"; then
-        ARFLAGS='-o'
-      fi
-    else
-                  if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$AR"; then
-  ac_cv_prog_AR="$AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_AR="${ac_tool_prefix}ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-AR=$ac_cv_prog_AR
-if test -n "$AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $AR" >&5
-$as_echo "$AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_AR"; then
-  ac_ct_AR=$AR
-  # Extract the first word of "ar", so it can be a program name with args.
-set dummy ar; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_AR+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_AR"; then
-  ac_cv_prog_ac_ct_AR="$ac_ct_AR" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_AR="ar"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_AR=$ac_cv_prog_ac_ct_AR
-if test -n "$ac_ct_AR"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_AR" >&5
-$as_echo "$ac_ct_AR" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_AR" = x; then
-    AR="ar"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    AR=$ac_ct_AR
-  fi
-else
-  AR="$ac_cv_prog_AR"
-fi
-
-      if test -z "$ARFLAGS"; then
-        ARFLAGS='cru'
-      fi
-    fi
-  else
-    if test -z "$ARFLAGS"; then
-      ARFLAGS='cru'
-    fi
-  fi
-
-
-  if test -z "$RANLIB"; then
-    if test $gl_cv_c_amsterdam_compiler = yes; then
-      RANLIB=':'
-    else
-            if test -n "$ac_tool_prefix"; then
-  # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args.
-set dummy ${ac_tool_prefix}ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$RANLIB"; then
-  ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-RANLIB=$ac_cv_prog_RANLIB
-if test -n "$RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $RANLIB" >&5
-$as_echo "$RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-
-fi
-if test -z "$ac_cv_prog_RANLIB"; then
-  ac_ct_RANLIB=$RANLIB
-  # Extract the first word of "ranlib", so it can be a program name with args.
-set dummy ranlib; ac_word=$2
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5
-$as_echo_n "checking for $ac_word... " >&6; }
-if ${ac_cv_prog_ac_ct_RANLIB+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test -n "$ac_ct_RANLIB"; then
-  ac_cv_prog_ac_ct_RANLIB="$ac_ct_RANLIB" # Let the user override the test.
-else
-as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    for ac_exec_ext in '' $ac_executable_extensions; do
-  if as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then
-    ac_cv_prog_ac_ct_RANLIB="ranlib"
-    $as_echo "$as_me:${as_lineno-$LINENO}: found $as_dir/$ac_word$ac_exec_ext" >&5
-    break 2
-  fi
-done
-  done
-IFS=$as_save_IFS
-
-fi
-fi
-ac_ct_RANLIB=$ac_cv_prog_ac_ct_RANLIB
-if test -n "$ac_ct_RANLIB"; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_RANLIB" >&5
-$as_echo "$ac_ct_RANLIB" >&6; }
-else
-  { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
-fi
-
-  if test "x$ac_ct_RANLIB" = x; then
-    RANLIB=":"
-  else
-    case $cross_compiling:$ac_tool_warned in
-yes:)
-{ $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: using cross tools not prefixed with host triplet" >&5
-$as_echo "$as_me: WARNING: using cross tools not prefixed with host triplet" >&2;}
-ac_tool_warned=yes ;;
-esac
-    RANLIB=$ac_ct_RANLIB
-  fi
-else
-  RANLIB="$ac_cv_prog_RANLIB"
-fi
-
-    fi
-  fi
-
-
-
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for ANSI C header files" >&5
-$as_echo_n "checking for ANSI C header files... " >&6; }
-if ${ac_cv_header_stdc+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-#include <stdarg.h>
-#include <string.h>
-#include <float.h>
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdc=yes
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-if test $ac_cv_header_stdc = yes; then
-  # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <string.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "memchr" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "free" >/dev/null 2>&1; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f conftest*
-
-fi
-
-if test $ac_cv_header_stdc = yes; then
-  # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
-  if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <ctype.h>
-#include <stdlib.h>
-#if ((' ' & 0x0FF) == 0x020)
-# define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
-# define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
-#else
-# define ISLOWER(c) \
-                  (('a' <= (c) && (c) <= 'i') \
-                    || ('j' <= (c) && (c) <= 'r') \
-                    || ('s' <= (c) && (c) <= 'z'))
-# define TOUPPER(c) (ISLOWER(c) ? ((c) | 0x40) : (c))
-#endif
-
-#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
-int
-main ()
-{
-  int i;
-  for (i = 0; i < 256; i++)
-    if (XOR (islower (i), ISLOWER (i))
-       || toupper (i) != TOUPPER (i))
-      return 2;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_header_stdc=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdc" >&5
-$as_echo "$ac_cv_header_stdc" >&6; }
-if test $ac_cv_header_stdc = yes; then
-
-$as_echo "#define STDC_HEADERS 1" >>confdefs.h
-
-fi
-
-# On IRIX 5.3, sys/types and inttypes.h are conflicting.
-for ac_header in sys/types.h sys/stat.h stdlib.h string.h memory.h strings.h \
-                 inttypes.h stdint.h unistd.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_compile "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default
-"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-  ac_fn_c_check_header_mongrel "$LINENO" "minix/config.h" "ac_cv_header_minix_config_h" "$ac_includes_default"
-if test "x$ac_cv_header_minix_config_h" = xyes; then :
-  MINIX=yes
-else
-  MINIX=
-fi
-
-
-  if test "$MINIX" = yes; then
-
-$as_echo "#define _POSIX_SOURCE 1" >>confdefs.h
-
-
-$as_echo "#define _POSIX_1_SOURCE 2" >>confdefs.h
-
-
-$as_echo "#define _MINIX 1" >>confdefs.h
-
-
-$as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h
-
-  fi
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5
-$as_echo_n "checking whether it is safe to define __EXTENSIONS__... " >&6; }
-if ${ac_cv_safe_to_define___extensions__+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#         define __EXTENSIONS__ 1
-          $ac_includes_default
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_safe_to_define___extensions__=yes
-else
-  ac_cv_safe_to_define___extensions__=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_safe_to_define___extensions__" >&5
-$as_echo "$ac_cv_safe_to_define___extensions__" >&6; }
-  test $ac_cv_safe_to_define___extensions__ = yes &&
-    $as_echo "#define __EXTENSIONS__ 1" >>confdefs.h
-
-  $as_echo "#define _ALL_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _DARWIN_C_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _GNU_SOURCE 1" >>confdefs.h
-
-  $as_echo "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h
-
-  $as_echo "#define _TANDEM_SOURCE 1" >>confdefs.h
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5
-$as_echo_n "checking whether _XOPEN_SOURCE should be defined... " >&6; }
-if ${ac_cv_should_define__xopen_source+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_should_define__xopen_source=no
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-          #include <wchar.h>
-          mbstate_t x;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-             #define _XOPEN_SOURCE 500
-             #include <wchar.h>
-             mbstate_t x;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_should_define__xopen_source=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5
-$as_echo "$ac_cv_should_define__xopen_source" >&6; }
-  test $ac_cv_should_define__xopen_source = yes &&
-    $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h
-
-
-
-
-
-
-
-
- if false; then
-  GL_COND_LIBTOOL_TRUE=
-  GL_COND_LIBTOOL_FALSE='#'
-else
-  GL_COND_LIBTOOL_TRUE='#'
-  GL_COND_LIBTOOL_FALSE=
-fi
-
-gl_cond_libtool=false
-gl_libdeps=
-gl_ltlibdeps=
-
-
-# Like AC_LIBOBJ, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-
-
-# Like AC_REPLACE_FUNCS, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-
-
-# Like AC_LIBSOURCES, except the directory where the source file is
-# expected is derived from the gnulib-tool parameterization,
-# and alloca is special cased (for the alloca-opt module).
-# We could also entirely rely on EXTRA_lib..._SOURCES.
-
-
-
-
-
-
-
-          LIBC_FATAL_STDERR_=1
-  export LIBC_FATAL_STDERR_
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for unsigned long long int" >&5
-$as_echo_n "checking for unsigned long long int... " >&6; }
-if ${ac_cv_type_unsigned_long_long_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_type_unsigned_long_long_int=yes
-     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* For now, do not test the preprocessor; as of 2007 there are too many
-         implementations with broken preprocessors.  Perhaps this can
-         be revisited in 2012.  In the meantime, code should not expect
-         #if to work with literals wider than 32 bits.  */
-      /* Test literals.  */
-      long long int ll = 9223372036854775807ll;
-      long long int nll = -9223372036854775807LL;
-      unsigned long long int ull = 18446744073709551615ULL;
-      /* Test constant expressions.   */
-      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                     ? 1 : -1)];
-      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                     ? 1 : -1)];
-      int i = 63;
-int
-main ()
-{
-/* Test availability of runtime routines for shift and division.  */
-      long long int llmax = 9223372036854775807ll;
-      unsigned long long int ullmax = 18446744073709551615ull;
-      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-              | (llmax / ll) | (llmax % ll)
-              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-              | (ullmax / ull) | (ullmax % ull));
-  ;
-  return 0;
-}
-
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-
-else
-  ac_cv_type_unsigned_long_long_int=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-     fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_unsigned_long_long_int" >&5
-$as_echo "$ac_cv_type_unsigned_long_long_int" >&6; }
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-
-$as_echo "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h
-
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for long long int" >&5
-$as_echo_n "checking for long long int... " >&6; }
-if ${ac_cv_type_long_long_int+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  ac_cv_type_long_long_int=yes
-      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
-        if test $ac_cv_type_long_long_int = yes; then
-                                        if test "$cross_compiling" = yes; then :
-  :
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <limits.h>
-                 #ifndef LLONG_MAX
-                 # define HALF \
-                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-                 # define LLONG_MAX (HALF - 1 + HALF)
-                 #endif
-int
-main ()
-{
-long long int n = 1;
-                 int i;
-                 for (i = 0; ; i++)
-                   {
-                     long long int m = n << i;
-                     if (m >> i != n)
-                       return 1;
-                     if (LLONG_MAX / 2 < m)
-                       break;
-                   }
-                 return 0;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-
-else
-  ac_cv_type_long_long_int=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-        fi
-      fi
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_long_long_int" >&5
-$as_echo "$ac_cv_type_long_long_int" >&6; }
-  if test $ac_cv_type_long_long_int = yes; then
-
-$as_echo "#define HAVE_LONG_LONG_INT 1" >>confdefs.h
-
-  fi
-
-
-
-
-
-  for ac_header in $gl_header_list
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5
-$as_echo_n "checking whether the preprocessor supports include_next... " >&6; }
-if ${gl_cv_have_include_next+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  rm -rf conftestd1a conftestd1b conftestd2
-     mkdir conftestd1a conftestd1b conftestd2
-                                                  cat <<EOF > conftestd1a/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd1b/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include <stdio.h>
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd2/conftest.h
-#ifndef DEFINED_IN_CONFTESTD1
-#error "include_next test doesn't work"
-#endif
-#define DEFINED_IN_CONFTESTD2
-EOF
-     gl_save_CPPFLAGS="$CPPFLAGS"
-     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <conftest.h>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_have_include_next=yes
-else
-  CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <conftest.h>
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_have_include_next=buggy
-else
-  gl_cv_have_include_next=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-     CPPFLAGS="$gl_save_CPPFLAGS"
-     rm -rf conftestd1a conftestd1b conftestd2
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5
-$as_echo "$gl_cv_have_include_next" >&6; }
-  PRAGMA_SYSTEM_HEADER=
-  if test $gl_cv_have_include_next = yes; then
-    INCLUDE_NEXT=include_next
-    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    if test -n "$GCC"; then
-      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
-    fi
-  else
-    if test $gl_cv_have_include_next = buggy; then
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    else
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
-    fi
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5
-$as_echo_n "checking whether system header files limit the line length... " >&6; }
-if ${gl_cv_pragma_columns+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#ifdef __TANDEM
-choke me
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "choke me" >/dev/null 2>&1; then :
-  gl_cv_pragma_columns=yes
-else
-  gl_cv_pragma_columns=no
-fi
-rm -f conftest*
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5
-$as_echo "$gl_cv_pragma_columns" >&6; }
-  if test $gl_cv_pragma_columns = yes; then
-    PRAGMA_COLUMNS="#pragma COLUMNS 10000"
-  else
-    PRAGMA_COLUMNS=
-  fi
-
-
-
-
-
-
-
-
-    gl_cv_c_multiarch=no
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#ifndef __APPLE_CC__
-         not a universal capable compiler
-        #endif
-        typedef int dummy;
-
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-
-               arch=
-     prev=
-     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
-       if test -n "$prev"; then
-         case $word in
-           i?86 | x86_64 | ppc | ppc64)
-             if test -z "$arch" || test "$arch" = "$word"; then
-               arch="$word"
-             else
-               gl_cv_c_multiarch=yes
-             fi
-             ;;
-         esac
-         prev=
-       else
-         if test "x$word" = "x-arch"; then
-           prev=arch
-         fi
-       fi
-     done
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-  if test $gl_cv_c_multiarch = yes; then
-    APPLE_UNIVERSAL_BUILD=1
-  else
-    APPLE_UNIVERSAL_BUILD=0
-  fi
-
-
-
-
-
-  if test $ac_cv_type_long_long_int = yes; then
-    HAVE_LONG_LONG_INT=1
-  else
-    HAVE_LONG_LONG_INT=0
-  fi
-
-
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-    HAVE_UNSIGNED_LONG_LONG_INT=1
-  else
-    HAVE_UNSIGNED_LONG_LONG_INT=0
-  fi
-
-
-
-  :
-
-
-
-
-
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
-
-
-      if test $ac_cv_header_inttypes_h = yes; then
-    HAVE_INTTYPES_H=1
-  else
-    HAVE_INTTYPES_H=0
-  fi
-
-
-      if test $ac_cv_header_sys_types_h = yes; then
-    HAVE_SYS_TYPES_H=1
-  else
-    HAVE_SYS_TYPES_H=0
-  fi
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_stdint_h='<'stdint.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5
-$as_echo_n "checking absolute name of <stdint.h>... " >&6; }
-if ${gl_cv_next_stdint_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-             if test $ac_cv_header_stdint_h = yes; then
-
-
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdint.h>
-
-_ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'stdint.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_stdint_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
-          else
-               gl_cv_next_stdint_h='<'stdint.h'>'
-             fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5
-$as_echo "$gl_cv_next_stdint_h" >&6; }
-     fi
-     NEXT_STDINT_H=$gl_cv_next_stdint_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'stdint.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_stdint_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive
-
-
-
-
-  if test $ac_cv_header_stdint_h = yes; then
-    HAVE_STDINT_H=1
-  else
-    HAVE_STDINT_H=0
-  fi
-
-
-    if test $ac_cv_header_stdint_h = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5
-$as_echo_n "checking whether stdint.h conforms to C99... " >&6; }
-if ${gl_cv_header_working_stdint_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  gl_cv_header_working_stdint_h=no
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
-#if !(defined WCHAR_MIN && defined WCHAR_MAX)
-#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
-#endif
-
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-
-#ifdef INT8_MAX
-int8_t a1 = INT8_MAX;
-int8_t a1min = INT8_MIN;
-#endif
-#ifdef INT16_MAX
-int16_t a2 = INT16_MAX;
-int16_t a2min = INT16_MIN;
-#endif
-#ifdef INT32_MAX
-int32_t a3 = INT32_MAX;
-int32_t a3min = INT32_MIN;
-#endif
-#ifdef INT64_MAX
-int64_t a4 = INT64_MAX;
-int64_t a4min = INT64_MIN;
-#endif
-#ifdef UINT8_MAX
-uint8_t b1 = UINT8_MAX;
-#else
-typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
-#endif
-#ifdef UINT16_MAX
-uint16_t b2 = UINT16_MAX;
-#endif
-#ifdef UINT32_MAX
-uint32_t b3 = UINT32_MAX;
-#endif
-#ifdef UINT64_MAX
-uint64_t b4 = UINT64_MAX;
-#endif
-int_least8_t c1 = INT8_C (0x7f);
-int_least8_t c1max = INT_LEAST8_MAX;
-int_least8_t c1min = INT_LEAST8_MIN;
-int_least16_t c2 = INT16_C (0x7fff);
-int_least16_t c2max = INT_LEAST16_MAX;
-int_least16_t c2min = INT_LEAST16_MIN;
-int_least32_t c3 = INT32_C (0x7fffffff);
-int_least32_t c3max = INT_LEAST32_MAX;
-int_least32_t c3min = INT_LEAST32_MIN;
-int_least64_t c4 = INT64_C (0x7fffffffffffffff);
-int_least64_t c4max = INT_LEAST64_MAX;
-int_least64_t c4min = INT_LEAST64_MIN;
-uint_least8_t d1 = UINT8_C (0xff);
-uint_least8_t d1max = UINT_LEAST8_MAX;
-uint_least16_t d2 = UINT16_C (0xffff);
-uint_least16_t d2max = UINT_LEAST16_MAX;
-uint_least32_t d3 = UINT32_C (0xffffffff);
-uint_least32_t d3max = UINT_LEAST32_MAX;
-uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
-uint_least64_t d4max = UINT_LEAST64_MAX;
-int_fast8_t e1 = INT_FAST8_MAX;
-int_fast8_t e1min = INT_FAST8_MIN;
-int_fast16_t e2 = INT_FAST16_MAX;
-int_fast16_t e2min = INT_FAST16_MIN;
-int_fast32_t e3 = INT_FAST32_MAX;
-int_fast32_t e3min = INT_FAST32_MIN;
-int_fast64_t e4 = INT_FAST64_MAX;
-int_fast64_t e4min = INT_FAST64_MIN;
-uint_fast8_t f1 = UINT_FAST8_MAX;
-uint_fast16_t f2 = UINT_FAST16_MAX;
-uint_fast32_t f3 = UINT_FAST32_MAX;
-uint_fast64_t f4 = UINT_FAST64_MAX;
-#ifdef INTPTR_MAX
-intptr_t g = INTPTR_MAX;
-intptr_t gmin = INTPTR_MIN;
-#endif
-#ifdef UINTPTR_MAX
-uintptr_t h = UINTPTR_MAX;
-#endif
-intmax_t i = INTMAX_MAX;
-uintmax_t j = UINTMAX_MAX;
-
-#include <limits.h> /* for CHAR_BIT */
-#define TYPE_MINIMUM(t) \
-  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
-#define TYPE_MAXIMUM(t) \
-  ((t) ((t) 0 < (t) -1 \
-        ? (t) -1 \
-        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
-struct s {
-  int check_PTRDIFF:
-      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
-      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
-      ? 1 : -1;
-  /* Detect bug in FreeBSD 6.0 / ia64.  */
-  int check_SIG_ATOMIC:
-      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
-      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
-      ? 1 : -1;
-  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
-  int check_WCHAR:
-      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
-      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
-      ? 1 : -1;
-  /* Detect bug in mingw.  */
-  int check_WINT:
-      WINT_MIN == TYPE_MINIMUM (wint_t)
-      && WINT_MAX == TYPE_MAXIMUM (wint_t)
-      ? 1 : -1;
-
-  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
-  int check_UINT8_C:
-        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
-  int check_UINT16_C:
-        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
-
-  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
-#ifdef UINT8_MAX
-  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
-#endif
-#ifdef UINT16_MAX
-  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
-#endif
-#ifdef UINT32_MAX
-  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
-#endif
-#ifdef UINT64_MAX
-  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
-#endif
-  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
-  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
-  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
-  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
-  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
-  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
-  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
-  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
-  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
-  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
-  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
-};
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-                                                    if test "$cross_compiling" = yes; then :
-                 gl_cv_header_working_stdint_h=yes
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-
-#include <stdio.h>
-#include <string.h>
-#define MVAL(macro) MVAL1(macro)
-#define MVAL1(expression) #expression
-static const char *macro_values[] =
-  {
-#ifdef INT8_MAX
-    MVAL (INT8_MAX),
-#endif
-#ifdef INT16_MAX
-    MVAL (INT16_MAX),
-#endif
-#ifdef INT32_MAX
-    MVAL (INT32_MAX),
-#endif
-#ifdef INT64_MAX
-    MVAL (INT64_MAX),
-#endif
-#ifdef UINT8_MAX
-    MVAL (UINT8_MAX),
-#endif
-#ifdef UINT16_MAX
-    MVAL (UINT16_MAX),
-#endif
-#ifdef UINT32_MAX
-    MVAL (UINT32_MAX),
-#endif
-#ifdef UINT64_MAX
-    MVAL (UINT64_MAX),
-#endif
-    NULL
-  };
-
-int
-main ()
-{
-
-  const char **mv;
-  for (mv = macro_values; *mv != NULL; mv++)
-    {
-      const char *value = *mv;
-      /* Test whether it looks like a cast expression.  */
-      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
-          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
-          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
-          || strncmp (value, "((int)"/*)*/, 6) == 0
-          || strncmp (value, "((signed short)"/*)*/, 15) == 0
-          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
-        return mv - macro_values + 1;
-    }
-  return 0;
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_header_working_stdint_h=yes
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5
-$as_echo "$gl_cv_header_working_stdint_h" >&6; }
-  fi
-  if test "$gl_cv_header_working_stdint_h" = yes; then
-    STDINT_H=
-  else
-            for ac_header in sys/inttypes.h sys/bitypes.h
-do :
-  as_ac_Header=`$as_echo "ac_cv_header_$ac_header" | $as_tr_sh`
-ac_fn_c_check_header_mongrel "$LINENO" "$ac_header" "$as_ac_Header" "$ac_includes_default"
-if eval test \"x\$"$as_ac_Header"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_header" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-
-done
-
-    if test $ac_cv_header_sys_inttypes_h = yes; then
-      HAVE_SYS_INTTYPES_H=1
-    else
-      HAVE_SYS_INTTYPES_H=0
-    fi
-
-    if test $ac_cv_header_sys_bitypes_h = yes; then
-      HAVE_SYS_BITYPES_H=1
-    else
-      HAVE_SYS_BITYPES_H=0
-    fi
-
-
-
-
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-
-
-  for gltype in ptrdiff_t size_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
-$as_echo_n "checking for bit size of $gltype... " >&6; }
-if eval \${gl_cv_bitsizeof_${gltype}+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-#include <limits.h>"; then :
-
-else
-  result=unknown
-fi
-
-       eval gl_cv_bitsizeof_${gltype}=\$result
-
-fi
-eval ac_res=\$gl_cv_bitsizeof_${gltype}
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    eval result=\$gl_cv_bitsizeof_${gltype}
-    if test $result = unknown; then
-                                                result=0
-    fi
-    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    cat >>confdefs.h <<_ACEOF
-#define BITSIZEOF_${GLTYPE} $result
-_ACEOF
-
-    eval BITSIZEOF_${GLTYPE}=\$result
-  done
-
-
-  fi
-
-
-  for gltype in sig_atomic_t wchar_t wint_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5
-$as_echo_n "checking for bit size of $gltype... " >&6; }
-if eval \${gl_cv_bitsizeof_${gltype}+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result"        "
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-#include <limits.h>"; then :
-
-else
-  result=unknown
-fi
-
-       eval gl_cv_bitsizeof_${gltype}=\$result
-
-fi
-eval ac_res=\$gl_cv_bitsizeof_${gltype}
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    eval result=\$gl_cv_bitsizeof_${gltype}
-    if test $result = unknown; then
-                                                result=0
-    fi
-    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    cat >>confdefs.h <<_ACEOF
-#define BITSIZEOF_${GLTYPE} $result
-_ACEOF
-
-    eval BITSIZEOF_${GLTYPE}=\$result
-  done
-
-
-
-
-  for gltype in sig_atomic_t wchar_t wint_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5
-$as_echo_n "checking whether $gltype is signed... " >&6; }
-if eval \${gl_cv_type_${gltype}_signed+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  result=yes
-else
-  result=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-       eval gl_cv_type_${gltype}_signed=\$result
-
-fi
-eval ac_res=\$gl_cv_type_${gltype}_signed
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    eval result=\$gl_cv_type_${gltype}_signed
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    if test "$result" = yes; then
-      cat >>confdefs.h <<_ACEOF
-#define HAVE_SIGNED_${GLTYPE} 1
-_ACEOF
-
-      eval HAVE_SIGNED_${GLTYPE}=1
-    else
-      eval HAVE_SIGNED_${GLTYPE}=0
-    fi
-  done
-
-
-  gl_cv_type_ptrdiff_t_signed=yes
-  gl_cv_type_size_t_signed=no
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-
-
-  for gltype in ptrdiff_t size_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
-$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
-if eval \${gl_cv_type_${gltype}_suffix+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval gl_cv_type_${gltype}_suffix=no
-       eval result=\$gl_cv_type_${gltype}_signed
-       if test "$result" = yes; then
-         glsufu=
-       else
-         glsufu=u
-       fi
-       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
-         case $glsuf in
-           '')  gltype1='int';;
-           l)   gltype1='long int';;
-           ll)  gltype1='long long int';;
-           i64) gltype1='__int64';;
-           u)   gltype1='unsigned int';;
-           ul)  gltype1='unsigned long int';;
-           ull) gltype1='unsigned long long int';;
-           ui64)gltype1='unsigned __int64';;
-         esac
-         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-              extern $gltype foo;
-              extern $gltype1 foo;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval gl_cv_type_${gltype}_suffix=\$glsuf
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-         eval result=\$gl_cv_type_${gltype}_suffix
-         test "$result" != no && break
-       done
-fi
-eval ac_res=\$gl_cv_type_${gltype}_suffix
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    eval result=\$gl_cv_type_${gltype}_suffix
-    test "$result" = no && result=
-    eval ${GLTYPE}_SUFFIX=\$result
-    cat >>confdefs.h <<_ACEOF
-#define ${GLTYPE}_SUFFIX $result
-_ACEOF
-
-  done
-
-
-  fi
-
-
-  for gltype in sig_atomic_t wchar_t wint_t ; do
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5
-$as_echo_n "checking for $gltype integer literal suffix... " >&6; }
-if eval \${gl_cv_type_${gltype}_suffix+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  eval gl_cv_type_${gltype}_suffix=no
-       eval result=\$gl_cv_type_${gltype}_signed
-       if test "$result" = yes; then
-         glsufu=
-       else
-         glsufu=u
-       fi
-       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
-         case $glsuf in
-           '')  gltype1='int';;
-           l)   gltype1='long int';;
-           ll)  gltype1='long long int';;
-           i64) gltype1='__int64';;
-           u)   gltype1='unsigned int';;
-           ul)  gltype1='unsigned long int';;
-           ull) gltype1='unsigned long long int';;
-           ui64)gltype1='unsigned __int64';;
-         esac
-         cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-
-              extern $gltype foo;
-              extern $gltype1 foo;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval gl_cv_type_${gltype}_suffix=\$glsuf
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-         eval result=\$gl_cv_type_${gltype}_suffix
-         test "$result" != no && break
-       done
-fi
-eval ac_res=\$gl_cv_type_${gltype}_suffix
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    eval result=\$gl_cv_type_${gltype}_suffix
-    test "$result" = no && result=
-    eval ${GLTYPE}_SUFFIX=\$result
-    cat >>confdefs.h <<_ACEOF
-#define ${GLTYPE}_SUFFIX $result
-_ACEOF
-
-  done
-
-
-
-          if test $BITSIZEOF_WINT_T -lt 32; then
-    BITSIZEOF_WINT_T=32
-  fi
-
-    STDINT_H=stdint.h
-  fi
-
-   if test -n "$STDINT_H"; then
-  GL_GENERATE_STDINT_H_TRUE=
-  GL_GENERATE_STDINT_H_FALSE='#'
-else
-  GL_GENERATE_STDINT_H_TRUE='#'
-  GL_GENERATE_STDINT_H_FALSE=
-fi
-
-
-
-
-
-
-
-
-  GNULIB_IMAXABS=0;
-  GNULIB_IMAXDIV=0;
-  GNULIB_STRTOIMAX=0;
-  GNULIB_STRTOUMAX=0;
-    HAVE_DECL_IMAXABS=1;
-  HAVE_DECL_IMAXDIV=1;
-  HAVE_DECL_STRTOIMAX=1;
-  HAVE_DECL_STRTOUMAX=1;
-  REPLACE_STRTOIMAX=0;
-  INT32_MAX_LT_INTMAX_MAX=1;
-  INT64_MAX_EQ_LONG_MAX='defined _LP64';
-  PRI_MACROS_BROKEN=0;
-  PRIPTR_PREFIX=__PRIPTR_PREFIX;
-  UINT32_MAX_LT_UINTMAX_MAX=1;
-  UINT64_MAX_EQ_ULONG_MAX='defined _LP64';
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_inttypes_h='<'inttypes.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <inttypes.h>" >&5
-$as_echo_n "checking absolute name of <inttypes.h>... " >&6; }
-if ${gl_cv_next_inttypes_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-             if test $ac_cv_header_inttypes_h = yes; then
-
-
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <inttypes.h>
-
-_ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'inttypes.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_inttypes_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
-          else
-               gl_cv_next_inttypes_h='<'inttypes.h'>'
-             fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5
-$as_echo "$gl_cv_next_inttypes_h" >&6; }
-     fi
-     NEXT_INTTYPES_H=$gl_cv_next_inttypes_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'inttypes.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_inttypes_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive
-
-
-
-
-
-
-
-
-    for gl_func in imaxabs imaxdiv strtoimax strtoumax; do
-    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
-$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
-if eval \${$as_gl_Symbol+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <inttypes.h>
-
-int
-main ()
-{
-#undef $gl_func
-  (void) $gl_func;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_gl_Symbol=yes"
-else
-  eval "$as_gl_Symbol=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_gl_Symbol
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
-_ACEOF
-
-                     eval ac_cv_have_decl_$gl_func=yes
-fi
-      done
-
-
-
-  for ac_header in inttypes.h
-do :
-  ac_fn_c_check_header_mongrel "$LINENO" "inttypes.h" "ac_cv_header_inttypes_h" "$ac_includes_default"
-if test "x$ac_cv_header_inttypes_h" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_INTTYPES_H 1
-_ACEOF
-
-fi
-
-done
-
-  if test $ac_cv_header_inttypes_h = yes; then
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the inttypes.h PRIxNN macros are broken" >&5
-$as_echo_n "checking whether the inttypes.h PRIxNN macros are broken... " >&6; }
-if ${gt_cv_inttypes_pri_broken+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-        cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <inttypes.h>
-#ifdef PRId32
-char *p = PRId32;
-#endif
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_inttypes_pri_broken=no
-else
-  gt_cv_inttypes_pri_broken=yes
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_inttypes_pri_broken" >&5
-$as_echo "$gt_cv_inttypes_pri_broken" >&6; }
-  fi
-  if test "$gt_cv_inttypes_pri_broken" = yes; then
-
-cat >>confdefs.h <<_ACEOF
-#define PRI_MACROS_BROKEN 1
-_ACEOF
-
-    PRI_MACROS_BROKEN=1
-  else
-    PRI_MACROS_BROKEN=0
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5
-$as_echo_n "checking for nl_langinfo and CODESET... " >&6; }
-if ${am_cv_langinfo_codeset+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <langinfo.h>
-int
-main ()
-{
-char* cs = nl_langinfo(CODESET); return !cs;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_link "$LINENO"; then :
-  am_cv_langinfo_codeset=yes
-else
-  am_cv_langinfo_codeset=no
-fi
-rm -f core conftest.err conftest.$ac_objext \
-    conftest$ac_exeext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_langinfo_codeset" >&5
-$as_echo "$am_cv_langinfo_codeset" >&6; }
-  if test $am_cv_langinfo_codeset = yes; then
-
-$as_echo "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h
-
-  fi
-
-
-
-
-
-
-
-
-
-
-  for ac_func in $gl_func_list
-do :
-  as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh`
-ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var"
-if eval test \"x\$"$as_ac_var"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1
-_ACEOF
-
-fi
-done
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5
-$as_echo_n "checking for working fcntl.h... " >&6; }
-if ${gl_cv_header_working_fcntl_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  if test "$cross_compiling" = yes; then :
-  gl_cv_header_working_fcntl_h=cross-compiling
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <sys/types.h>
-           #include <sys/stat.h>
-           #if HAVE_UNISTD_H
-           # include <unistd.h>
-           #else /* on Windows with MSVC */
-           # include <io.h>
-           # include <stdlib.h>
-           # defined sleep(n) _sleep ((n) * 1000)
-           #endif
-           #include <fcntl.h>
-           #ifndef O_NOATIME
-            #define O_NOATIME 0
-           #endif
-           #ifndef O_NOFOLLOW
-            #define O_NOFOLLOW 0
-           #endif
-           static int const constants[] =
-            {
-              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
-            };
-
-int
-main ()
-{
-
-            int result = !constants;
-            #if HAVE_SYMLINK
-            {
-              static char const sym[] = "conftest.sym";
-              if (symlink ("/dev/null", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              if (unlink (sym) != 0 || symlink (".", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              unlink (sym);
-            }
-            #endif
-            {
-              static char const file[] = "confdefs.h";
-              int fd = open (file, O_RDONLY | O_NOATIME);
-              if (fd < 0)
-                result |= 8;
-              else
-                {
-                  struct stat st0;
-                  if (fstat (fd, &st0) != 0)
-                    result |= 16;
-                  else
-                    {
-                      char c;
-                      sleep (1);
-                      if (read (fd, &c, 1) != 1)
-                        result |= 24;
-                      else
-                        {
-                          if (close (fd) != 0)
-                            result |= 32;
-                          else
-                            {
-                              struct stat st1;
-                              if (stat (file, &st1) != 0)
-                                result |= 40;
-                              else
-                                if (st0.st_atime != st1.st_atime)
-                                  result |= 64;
-                            }
-                        }
-                    }
-                }
-            }
-            return result;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_header_working_fcntl_h=yes
-else
-  case $? in #(
-        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
-        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
-        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
-         *) gl_cv_header_working_fcntl_h='no';;
-        esac
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_fcntl_h" >&5
-$as_echo "$gl_cv_header_working_fcntl_h" >&6; }
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOATIME $ac_val
-_ACEOF
-
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_WORKING_O_NOFOLLOW $ac_val
-_ACEOF
-
-
-
-      ac_fn_c_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default"
-if test "x$ac_cv_have_decl_getc_unlocked" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl
-_ACEOF
-
-
-
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether we are using the GNU C Library >= 2.1 or uClibc" >&5
-$as_echo_n "checking whether we are using the GNU C Library >= 2.1 or uClibc... " >&6; }
-if ${ac_cv_gnu_library_2_1+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
-  Lucky GNU user
- #endif
-#endif
-#ifdef __UCLIBC__
- Lucky user
-#endif
-
-_ACEOF
-if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
-  $EGREP "Lucky" >/dev/null 2>&1; then :
-  ac_cv_gnu_library_2_1=yes
-else
-  ac_cv_gnu_library_2_1=no
-fi
-rm -f conftest*
-
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_gnu_library_2_1" >&5
-$as_echo "$ac_cv_gnu_library_2_1" >&6; }
-
-    GLIBC21="$ac_cv_gnu_library_2_1"
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5
-$as_echo_n "checking for stdbool.h that conforms to C99... " >&6; }
-if ${ac_cv_header_stdbool_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-             #include <stdbool.h>
-             #ifndef bool
-              "error: bool is not defined"
-             #endif
-             #ifndef false
-              "error: false is not defined"
-             #endif
-             #if false
-              "error: false is not 0"
-             #endif
-             #ifndef true
-              "error: true is not defined"
-             #endif
-             #if true != 1
-              "error: true is not 1"
-             #endif
-             #ifndef __bool_true_false_are_defined
-              "error: __bool_true_false_are_defined is not defined"
-             #endif
-
-             struct s { _Bool s: 1; _Bool t; } s;
-
-             char a[true == 1 ? 1 : -1];
-             char b[false == 0 ? 1 : -1];
-             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-             char d[(bool) 0.5 == true ? 1 : -1];
-             /* See body of main program for 'e'.  */
-             char f[(_Bool) 0.0 == false ? 1 : -1];
-             char g[true];
-             char h[sizeof (_Bool)];
-             char i[sizeof s.t];
-             enum { j = false, k = true, l = false * true, m = true * 256 };
-             /* The following fails for
-                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
-             _Bool n[m];
-             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
-             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
-             /* Catch a bug in an HP-UX C compiler.  See
-                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-              */
-             _Bool q = true;
-             _Bool *pq = &q;
-
-int
-main ()
-{
-
-             bool e = &s;
-             *pq |= q;
-             *pq |= ! q;
-             /* Refer to every declared value, to avoid compiler optimizations.  */
-             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
-                     + !m + !n + !o + !p + !q + !pq);
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  ac_cv_header_stdbool_h=yes
-else
-  ac_cv_header_stdbool_h=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5
-$as_echo "$ac_cv_header_stdbool_h" >&6; }
-   ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default"
-if test "x$ac_cv_type__Bool" = xyes; then :
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE__BOOL 1
-_ACEOF
-
-
-fi
-
-
-
-    REPLACE_NULL=0;
-  HAVE_WCHAR_T=1;
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5
-$as_echo_n "checking for wchar_t... " >&6; }
-if ${gt_cv_c_wchar_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stddef.h>
-            wchar_t foo = (wchar_t)'\0';
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_c_wchar_t=yes
-else
-  gt_cv_c_wchar_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wchar_t" >&5
-$as_echo "$gt_cv_c_wchar_t" >&6; }
-  if test $gt_cv_c_wchar_t = yes; then
-
-$as_echo "#define HAVE_WCHAR_T 1" >>confdefs.h
-
-  fi
-
-
-
-
-
-
-
-gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-
-
-  if test "$HAVE_LIBUNISTRING" = yes; then
-    LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"`
-    LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"`
-    LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"`
-  fi
-
-
-  GNULIB_BTOWC=0;
-  GNULIB_WCTOB=0;
-  GNULIB_MBSINIT=0;
-  GNULIB_MBRTOWC=0;
-  GNULIB_MBRLEN=0;
-  GNULIB_MBSRTOWCS=0;
-  GNULIB_MBSNRTOWCS=0;
-  GNULIB_WCRTOMB=0;
-  GNULIB_WCSRTOMBS=0;
-  GNULIB_WCSNRTOMBS=0;
-  GNULIB_WCWIDTH=0;
-  GNULIB_WMEMCHR=0;
-  GNULIB_WMEMCMP=0;
-  GNULIB_WMEMCPY=0;
-  GNULIB_WMEMMOVE=0;
-  GNULIB_WMEMSET=0;
-  GNULIB_WCSLEN=0;
-  GNULIB_WCSNLEN=0;
-  GNULIB_WCSCPY=0;
-  GNULIB_WCPCPY=0;
-  GNULIB_WCSNCPY=0;
-  GNULIB_WCPNCPY=0;
-  GNULIB_WCSCAT=0;
-  GNULIB_WCSNCAT=0;
-  GNULIB_WCSCMP=0;
-  GNULIB_WCSNCMP=0;
-  GNULIB_WCSCASECMP=0;
-  GNULIB_WCSNCASECMP=0;
-  GNULIB_WCSCOLL=0;
-  GNULIB_WCSXFRM=0;
-  GNULIB_WCSDUP=0;
-  GNULIB_WCSCHR=0;
-  GNULIB_WCSRCHR=0;
-  GNULIB_WCSCSPN=0;
-  GNULIB_WCSSPN=0;
-  GNULIB_WCSPBRK=0;
-  GNULIB_WCSSTR=0;
-  GNULIB_WCSTOK=0;
-  GNULIB_WCSWIDTH=0;
-    HAVE_BTOWC=1;
-  HAVE_MBSINIT=1;
-  HAVE_MBRTOWC=1;
-  HAVE_MBRLEN=1;
-  HAVE_MBSRTOWCS=1;
-  HAVE_MBSNRTOWCS=1;
-  HAVE_WCRTOMB=1;
-  HAVE_WCSRTOMBS=1;
-  HAVE_WCSNRTOMBS=1;
-  HAVE_WMEMCHR=1;
-  HAVE_WMEMCMP=1;
-  HAVE_WMEMCPY=1;
-  HAVE_WMEMMOVE=1;
-  HAVE_WMEMSET=1;
-  HAVE_WCSLEN=1;
-  HAVE_WCSNLEN=1;
-  HAVE_WCSCPY=1;
-  HAVE_WCPCPY=1;
-  HAVE_WCSNCPY=1;
-  HAVE_WCPNCPY=1;
-  HAVE_WCSCAT=1;
-  HAVE_WCSNCAT=1;
-  HAVE_WCSCMP=1;
-  HAVE_WCSNCMP=1;
-  HAVE_WCSCASECMP=1;
-  HAVE_WCSNCASECMP=1;
-  HAVE_WCSCOLL=1;
-  HAVE_WCSXFRM=1;
-  HAVE_WCSDUP=1;
-  HAVE_WCSCHR=1;
-  HAVE_WCSRCHR=1;
-  HAVE_WCSCSPN=1;
-  HAVE_WCSSPN=1;
-  HAVE_WCSPBRK=1;
-  HAVE_WCSSTR=1;
-  HAVE_WCSTOK=1;
-  HAVE_WCSWIDTH=1;
-  HAVE_DECL_WCTOB=1;
-  HAVE_DECL_WCWIDTH=1;
-  REPLACE_MBSTATE_T=0;
-  REPLACE_BTOWC=0;
-  REPLACE_WCTOB=0;
-  REPLACE_MBSINIT=0;
-  REPLACE_MBRTOWC=0;
-  REPLACE_MBRLEN=0;
-  REPLACE_MBSRTOWCS=0;
-  REPLACE_MBSNRTOWCS=0;
-  REPLACE_WCRTOMB=0;
-  REPLACE_WCSRTOMBS=0;
-  REPLACE_WCSNRTOMBS=0;
-  REPLACE_WCWIDTH=0;
-  REPLACE_WCSWIDTH=0;
-
-
-            { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5
-$as_echo_n "checking whether <wchar.h> uses 'inline' correctly... " >&6; }
-if ${gl_cv_header_wchar_h_correct_inline+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  gl_cv_header_wchar_h_correct_inline=yes
-     cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-       #define wcstod renamed_wcstod
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-extern int zero (void);
-int main () { return zero(); }
-
-_ACEOF
-     if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-       mv conftest.$ac_objext conftest1.$ac_objext
-       cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-         #define wcstod renamed_wcstod
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-int zero (void) { return 0; }
-
-_ACEOF
-       if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5
-  (eval $ac_compile) 2>&5
-  ac_status=$?
-  $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5
-  test $ac_status = 0; }; then
-         mv conftest.$ac_objext conftest2.$ac_objext
-         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then
-           :
-         else
-           gl_cv_header_wchar_h_correct_inline=no
-         fi
-       fi
-     fi
-     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5
-$as_echo "$gl_cv_header_wchar_h_correct_inline" >&6; }
-  if test $gl_cv_header_wchar_h_correct_inline = no; then
-    as_fn_error $? "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
-This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
-C99 mode. You have four options:
-  - Add the flag -fgnu89-inline to CC and reconfigure, or
-  - Fix your include files, using parts of
-    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
-  - Use a gcc version older than 4.3, or
-  - Don't use the flags -std=c99 or -std=gnu99.
-Configuration aborted." "$LINENO" 5
-  fi
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-  if test $ac_cv_header_features_h = yes; then
-    HAVE_FEATURES_H=1
-  else
-    HAVE_FEATURES_H=0
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5
-$as_echo_n "checking for wint_t... " >&6; }
-if ${gt_cv_c_wint_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-            wint_t foo = (wchar_t)'\0';
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gt_cv_c_wint_t=yes
-else
-  gt_cv_c_wint_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_c_wint_t" >&5
-$as_echo "$gt_cv_c_wint_t" >&6; }
-  if test $gt_cv_c_wint_t = yes; then
-
-$as_echo "#define HAVE_WINT_T 1" >>confdefs.h
-
-  fi
-
-
-  GNULIB_ISWBLANK=0;
-  GNULIB_WCTYPE=0;
-  GNULIB_ISWCTYPE=0;
-  GNULIB_WCTRANS=0;
-  GNULIB_TOWCTRANS=0;
-    HAVE_ISWBLANK=1;
-  HAVE_WCTYPE_T=1;
-  HAVE_WCTRANS_T=1;
-  REPLACE_ISWBLANK=0;
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-gl_m4_base='m4'
-
-
-
-
-
-
-
-
-
-gl_source_base='lib'
-
-          if test "x$datarootdir" = x; then
-    datarootdir='${datadir}'
-
-  fi
-    if test "x$docdir" = x; then
-    docdir='${datarootdir}/doc/${PACKAGE_TARNAME}'
-
-  fi
-    if test "x$htmldir" = x; then
-    htmldir='${docdir}'
-
-  fi
-  if test "x$dvidir" = x; then
-    dvidir='${docdir}'
-
-  fi
-  if test "x$pdfdir" = x; then
-    pdfdir='${docdir}'
-
-  fi
-  if test "x$psdir" = x; then
-    psdir='${docdir}'
-
-  fi
-  if test "x$lispdir" = x; then
-    lispdir='${datarootdir}/emacs/site-lisp'
-
-  fi
-  if test "x$localedir" = x; then
-    localedir='${datarootdir}/locale'
-
-  fi
-    if test "x$runstatedir" = x; then
-    runstatedir='${localstatedir}/run'
-
-  fi
-
-      pkglibexecdir='${libexecdir}/${PACKAGE}'
-
-
-
-
-
-
-
-
-  PRIPTR_PREFIX=
-  if test -n "$STDINT_H"; then
-        PRIPTR_PREFIX='"l"'
-  else
-        for glpfx in '' l ll I64; do
-      case $glpfx in
-        '')  gltype1='int';;
-        l)   gltype1='long int';;
-        ll)  gltype1='long long int';;
-        I64) gltype1='__int64';;
-      esac
-      cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdint.h>
-           extern intptr_t foo;
-           extern $gltype1 foo;
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  PRIPTR_PREFIX='"'$glpfx'"'
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-      test -n "$PRIPTR_PREFIX" && break
-    done
-  fi
-
-
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT32_MAX < INTMAX_MAX" >&5
-$as_echo_n "checking whether INT32_MAX < INTMAX_MAX... " >&6; }
-if ${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Work also in C++ mode.  */
-            #define __STDC_LIMIT_MACROS 1
-
-            /* Work if build is not clean.  */
-            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-            #include <limits.h>
-            #if HAVE_STDINT_H
-             #include <stdint.h>
-            #endif
-
-            #if defined INT32_MAX && defined INTMAX_MAX
-             #define CONDITION (INT32_MAX < INTMAX_MAX)
-            #elif HAVE_LONG_LONG_INT
-             #define CONDITION (sizeof (int) < sizeof (long long int))
-            #else
-             #define CONDITION 0
-            #endif
-            int test[CONDITION ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes
-else
-  gl_cv_test_INT32_MAX_LT_INTMAX_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5
-$as_echo "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; }
-  if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then
-    INT32_MAX_LT_INTMAX_MAX=1;
-  else
-    INT32_MAX_LT_INTMAX_MAX=0;
-  fi
-
-
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether INT64_MAX == LONG_MAX" >&5
-$as_echo_n "checking whether INT64_MAX == LONG_MAX... " >&6; }
-if ${gl_cv_test_INT64_MAX_EQ_LONG_MAX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Work also in C++ mode.  */
-            #define __STDC_LIMIT_MACROS 1
-
-            /* Work if build is not clean.  */
-            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-            #include <limits.h>
-            #if HAVE_STDINT_H
-             #include <stdint.h>
-            #endif
-
-            #if defined INT64_MAX
-             #define CONDITION (INT64_MAX == LONG_MAX)
-            #elif HAVE_LONG_LONG_INT
-             #define CONDITION (sizeof (long long int) == sizeof (long int))
-            #else
-             #define CONDITION 0
-            #endif
-            int test[CONDITION ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes
-else
-  gl_cv_test_INT64_MAX_EQ_LONG_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5
-$as_echo "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; }
-  if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then
-    INT64_MAX_EQ_LONG_MAX=1;
-  else
-    INT64_MAX_EQ_LONG_MAX=0;
-  fi
-
-
-  else
-    INT64_MAX_EQ_LONG_MAX=-1
-  fi
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT32_MAX < UINTMAX_MAX" >&5
-$as_echo_n "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; }
-if ${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Work also in C++ mode.  */
-            #define __STDC_LIMIT_MACROS 1
-
-            /* Work if build is not clean.  */
-            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-            #include <limits.h>
-            #if HAVE_STDINT_H
-             #include <stdint.h>
-            #endif
-
-            #if defined UINT32_MAX && defined UINTMAX_MAX
-             #define CONDITION (UINT32_MAX < UINTMAX_MAX)
-            #elif HAVE_LONG_LONG_INT
-             #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int))
-            #else
-             #define CONDITION 0
-            #endif
-            int test[CONDITION ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes
-else
-  gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5
-$as_echo "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; }
-  if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then
-    UINT32_MAX_LT_UINTMAX_MAX=1;
-  else
-    UINT32_MAX_LT_UINTMAX_MAX=0;
-  fi
-
-
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether UINT64_MAX == ULONG_MAX" >&5
-$as_echo_n "checking whether UINT64_MAX == ULONG_MAX... " >&6; }
-if ${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Work also in C++ mode.  */
-            #define __STDC_LIMIT_MACROS 1
-
-            /* Work if build is not clean.  */
-            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-            #include <limits.h>
-            #if HAVE_STDINT_H
-             #include <stdint.h>
-            #endif
-
-            #if defined UINT64_MAX
-             #define CONDITION (UINT64_MAX == ULONG_MAX)
-            #elif HAVE_LONG_LONG_INT
-             #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int))
-            #else
-             #define CONDITION 0
-            #endif
-            int test[CONDITION ? 1 : -1];
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes
-else
-  gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5
-$as_echo "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; }
-  if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then
-    UINT64_MAX_EQ_ULONG_MAX=1;
-  else
-    UINT64_MAX_EQ_ULONG_MAX=0;
-  fi
-
-
-  else
-    UINT64_MAX_EQ_ULONG_MAX=-1
-  fi
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-
-  LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
-
-
-
-
-
-  # Define two additional variables used in the Makefile substitution.
-
-  if test "$ac_cv_header_stdbool_h" = yes; then
-    STDBOOL_H=''
-  else
-    STDBOOL_H='stdbool.h'
-  fi
-
-   if test -n "$STDBOOL_H"; then
-  GL_GENERATE_STDBOOL_H_TRUE=
-  GL_GENERATE_STDBOOL_H_FALSE='#'
-else
-  GL_GENERATE_STDBOOL_H_TRUE='#'
-  GL_GENERATE_STDBOOL_H_FALSE=
-fi
-
-
-  if test "$ac_cv_type__Bool" = yes; then
-    HAVE__BOOL=1
-  else
-    HAVE__BOOL=0
-  fi
-
-
-
-
-
-  STDDEF_H=
-  if test $gt_cv_c_wchar_t = no; then
-    HAVE_WCHAR_T=0
-    STDDEF_H=stddef.h
-  fi
-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5
-$as_echo_n "checking whether NULL can be used in arbitrary expressions... " >&6; }
-if ${gl_cv_decl_null_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stddef.h>
-      int test[2 * (sizeof NULL == sizeof (void *)) -1];
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_decl_null_works=yes
-else
-  gl_cv_decl_null_works=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_decl_null_works" >&5
-$as_echo "$gl_cv_decl_null_works" >&6; }
-  if test $gl_cv_decl_null_works = no; then
-    REPLACE_NULL=1
-    STDDEF_H=stddef.h
-  fi
-
-   if test -n "$STDDEF_H"; then
-  GL_GENERATE_STDDEF_H_TRUE=
-  GL_GENERATE_STDDEF_H_FALSE='#'
-else
-  GL_GENERATE_STDDEF_H_TRUE='#'
-  GL_GENERATE_STDDEF_H_FALSE=
-fi
-
-  if test -n "$STDDEF_H"; then
-
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_stddef_h='<'stddef.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5
-$as_echo_n "checking absolute name of <stddef.h>... " >&6; }
-if ${gl_cv_next_stddef_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stddef.h>
-
-_ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'stddef.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_stddef_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5
-$as_echo "$gl_cv_next_stddef_h" >&6; }
-     fi
-     NEXT_STDDEF_H=$gl_cv_next_stddef_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'stddef.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_stddef_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive
-
-
-
-
-  fi
-
-
-
-
-      if  { test "$HAVE_LIBUNISTRING" != yes \
-    || {
-
-
-
-            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
-            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
-                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
-                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0
-                         }
-                    }
-               }
-
-
-
-
-       }
-  }; then
-    LIBUNISTRING_UNITYPES_H='unitypes.h'
-  else
-    LIBUNISTRING_UNITYPES_H=
-  fi
-
-
-
-
-      if  { test "$HAVE_LIBUNISTRING" != yes \
-    || {
-
-
-
-            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
-            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
-                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
-                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 0
-                         }
-                    }
-               }
-
-
-
-
-       }
-  }; then
-    LIBUNISTRING_UNIWIDTH_H='uniwidth.h'
-  else
-    LIBUNISTRING_UNIWIDTH_H=
-  fi
-
-
-
-
-       if  { test "$HAVE_LIBUNISTRING" != yes \
-    || {
-
-
-
-            test $LIBUNISTRING_VERSION_MAJOR -lt 0 \
-            || { test $LIBUNISTRING_VERSION_MAJOR -eq 0 \
-                 && { test $LIBUNISTRING_VERSION_MINOR -lt 9 \
-                      || { test $LIBUNISTRING_VERSION_MINOR -eq 9 \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt 4
-                         }
-                    }
-               }
-
-
-
-
-       }
-  }; then
-  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE=
-  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE='#'
-else
-  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE='#'
-  LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE=
-fi
-
-
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_wchar_h='<'wchar.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5
-$as_echo_n "checking absolute name of <wchar.h>... " >&6; }
-if ${gl_cv_next_wchar_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-             if test $ac_cv_header_wchar_h = yes; then
-
-
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <wchar.h>
-
-_ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'wchar.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_wchar_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
-          else
-               gl_cv_next_wchar_h='<'wchar.h'>'
-             fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5
-$as_echo "$gl_cv_next_wchar_h" >&6; }
-     fi
-     NEXT_WCHAR_H=$gl_cv_next_wchar_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'wchar.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_wchar_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive
-
-
-
-
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
-
-
-
-
-
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-
-
-
-    for gl_func in btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb      wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset      wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp      wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr      wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth     ; do
-    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
-$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
-if eval \${$as_gl_Symbol+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#if !(defined __GLIBC__ && !defined __UCLIBC__)
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-#endif
-#include <wchar.h>
-
-int
-main ()
-{
-#undef $gl_func
-  (void) $gl_func;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_gl_Symbol=yes"
-else
-  eval "$as_gl_Symbol=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_gl_Symbol
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
-_ACEOF
-
-                     eval ac_cv_have_decl_$gl_func=yes
-fi
-      done
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-  if test $ac_cv_func_iswcntrl = yes; then
-    HAVE_ISWCNTRL=1
-  else
-    HAVE_ISWCNTRL=0
-  fi
-
-
-
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-
-
-     if test $gl_cv_have_include_next = yes; then
-       gl_cv_next_wctype_h='<'wctype.h'>'
-     else
-       { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5
-$as_echo_n "checking absolute name of <wctype.h>... " >&6; }
-if ${gl_cv_next_wctype_h+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-             if test $ac_cv_header_wctype_h = yes; then
-
-
-               cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <wctype.h>
-
-_ACEOF
-                                                                                                                        case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-
-               case "$host_os" in
-                 mingw*)
-                                                                                                                                     gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-                                             gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-
-               gl_header_literal_regex=`echo 'wctype.h' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-                   s|^/[^/]|//&|
-                   p
-                   q
-                 }'
-                                                            gl_cv_next_wctype_h='"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 |
-                      sed -n "$gl_absolute_header_sed"`'"'
-          else
-               gl_cv_next_wctype_h='<'wctype.h'>'
-             fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5
-$as_echo "$gl_cv_next_wctype_h" >&6; }
-     fi
-     NEXT_WCTYPE_H=$gl_cv_next_wctype_h
-
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'wctype.h'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=$gl_cv_next_wctype_h
-     fi
-     NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive
-
-
-
-
-  if test $ac_cv_header_wctype_h = yes; then
-    if test $ac_cv_func_iswcntrl = yes; then
-                  { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5
-$as_echo_n "checking whether iswcntrl works... " >&6; }
-if ${gl_cv_func_iswcntrl_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-          if test "$cross_compiling" = yes; then :
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-#include <stdlib.h>
-                          #if __GNU_LIBRARY__ == 1
-                          Linux libc5 i18n is broken.
-                          #endif
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_func_iswcntrl_works="guessing yes"
-else
-  gl_cv_func_iswcntrl_works="guessing no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-               /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-                  included before <wchar.h>.
-                  BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-                  must be included before <wchar.h>.  */
-               #include <stddef.h>
-               #include <stdio.h>
-               #include <time.h>
-               #include <wchar.h>
-               #include <wctype.h>
-               int main () { return iswprint ('x') == 0; }
-
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_func_iswcntrl_works=yes
-else
-  gl_cv_func_iswcntrl_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_iswcntrl_works" >&5
-$as_echo "$gl_cv_func_iswcntrl_works" >&6; }
-    fi
-    HAVE_WCTYPE_H=1
-  else
-    HAVE_WCTYPE_H=0
-  fi
-
-
-  case "$gl_cv_func_iswcntrl_works" in
-    *yes) REPLACE_ISWCNTRL=0 ;;
-    *)    REPLACE_ISWCNTRL=1 ;;
-  esac
-
-
-  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
-        :
-  fi
-
-  if test $REPLACE_ISWCNTRL = 1; then
-    REPLACE_TOWLOWER=1
-  else
-    for ac_func in towlower
-do :
-  ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower"
-if test "x$ac_cv_func_towlower" = xyes; then :
-  cat >>confdefs.h <<_ACEOF
-#define HAVE_TOWLOWER 1
-_ACEOF
-
-fi
-done
-
-    if test $ac_cv_func_towlower = yes; then
-      REPLACE_TOWLOWER=0
-    else
-      ac_fn_c_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-             included before <wchar.h>.
-             BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-             must be included before <wchar.h>.  */
-          #include <stddef.h>
-          #include <stdio.h>
-          #include <time.h>
-          #include <wchar.h>
-          #if HAVE_WCTYPE_H
-          # include <wctype.h>
-          #endif
-
-"
-if test "x$ac_cv_have_decl_towlower" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_TOWLOWER $ac_have_decl
-_ACEOF
-
-      if test $ac_cv_have_decl_towlower = yes; then
-                                REPLACE_TOWLOWER=1
-      else
-        REPLACE_TOWLOWER=0
-      fi
-    fi
-  fi
-
-
-  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
-        :
-  fi
-
-          { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5
-$as_echo_n "checking for wctype_t... " >&6; }
-if ${gl_cv_type_wctype_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-               included before <wchar.h>.
-               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-               must be included before <wchar.h>.  */
-            #include <stddef.h>
-            #include <stdio.h>
-            #include <time.h>
-            #include <wchar.h>
-            #if HAVE_WCTYPE_H
-            # include <wctype.h>
-            #endif
-            wctype_t a;
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_type_wctype_t=yes
-else
-  gl_cv_type_wctype_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctype_t" >&5
-$as_echo "$gl_cv_type_wctype_t" >&6; }
-  if test $gl_cv_type_wctype_t = no; then
-    HAVE_WCTYPE_T=0
-  fi
-
-      { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5
-$as_echo_n "checking for wctrans_t... " >&6; }
-if ${gl_cv_type_wctrans_t+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-               included before <wchar.h>.
-               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-               must be included before <wchar.h>.  */
-            #include <stddef.h>
-            #include <stdio.h>
-            #include <time.h>
-            #include <wchar.h>
-            #include <wctype.h>
-            wctrans_t a;
-
-int
-main ()
-{
-
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  gl_cv_type_wctrans_t=yes
-else
-  gl_cv_type_wctrans_t=no
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_type_wctrans_t" >&5
-$as_echo "$gl_cv_type_wctrans_t" >&6; }
-  if test $gl_cv_type_wctrans_t = no; then
-    HAVE_WCTRANS_T=0
-  fi
-
-
-    for gl_func in wctype iswctype wctrans towctrans     ; do
-    as_gl_Symbol=`$as_echo "gl_cv_have_raw_decl_$gl_func" | $as_tr_sh`
-    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $gl_func is declared without a macro" >&5
-$as_echo_n "checking whether $gl_func is declared without a macro... " >&6; }
-if eval \${$as_gl_Symbol+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#if !(defined __GLIBC__ && !defined __UCLIBC__)
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-# include <wchar.h>
-#endif
-#include <wctype.h>
-
-int
-main ()
-{
-#undef $gl_func
-  (void) $gl_func;
-  ;
-  return 0;
-}
-_ACEOF
-if ac_fn_c_try_compile "$LINENO"; then :
-  eval "$as_gl_Symbol=yes"
-else
-  eval "$as_gl_Symbol=no"
-fi
-rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext
-fi
-eval ac_res=\$$as_gl_Symbol
-              { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5
-$as_echo "$ac_res" >&6; }
-    if eval test \"x\$"$as_gl_Symbol"\" = x"yes"; then :
-  cat >>confdefs.h <<_ACEOF
-#define `$as_echo "HAVE_RAW_DECL_$gl_func" | $as_tr_cpp` 1
-_ACEOF
-
-                     eval ac_cv_have_decl_$gl_func=yes
-fi
-      done
-
-
-
-
-
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  :
-
-
-
-
-
-
-  ac_fn_c_check_decl "$LINENO" "wcwidth" "ac_cv_have_decl_wcwidth" "
-/* AIX 3.2.5 declares wcwidth in <string.h>. */
-#include <string.h>
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-
-"
-if test "x$ac_cv_have_decl_wcwidth" = xyes; then :
-  ac_have_decl=1
-else
-  ac_have_decl=0
-fi
-
-cat >>confdefs.h <<_ACEOF
-#define HAVE_DECL_WCWIDTH $ac_have_decl
-_ACEOF
-
-  if test $ac_cv_have_decl_wcwidth != yes; then
-    HAVE_DECL_WCWIDTH=0
-  fi
-
-  if test $ac_cv_func_wcwidth = yes; then
-    HAVE_WCWIDTH=1
-                    { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether wcwidth works reasonably in UTF-8 locales" >&5
-$as_echo_n "checking whether wcwidth works reasonably in UTF-8 locales... " >&6; }
-if ${gl_cv_func_wcwidth_works+:} false; then :
-  $as_echo_n "(cached) " >&6
-else
-
-        if test "$cross_compiling" = yes; then :
-
-           case "$host_os" in
-                     # Guess yes on glibc and AIX 7 systems.
-             *-gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";;
-             *)                  gl_cv_func_wcwidth_works="guessing no";;
-           esac
-
-else
-  cat confdefs.h - <<_ACEOF >conftest.$ac_ext
-/* end confdefs.h.  */
-
-#include <locale.h>
-/* AIX 3.2.5 declares wcwidth in <string.h>. */
-#include <string.h>
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-#if !HAVE_DECL_WCWIDTH
-extern
-# ifdef __cplusplus
-"C"
-# endif
-int wcwidth (int);
-#endif
-int main ()
-{
-  int result = 0;
-  if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
-    {
-      if (wcwidth (0x0301) > 0)
-        result |= 1;
-      if (wcwidth (0x05B0) > 0)
-        result |= 2;
-      if (wcwidth (0x200B) > 0)
-        result |= 4;
-    }
-  return result;
-}
-_ACEOF
-if ac_fn_c_try_run "$LINENO"; then :
-  gl_cv_func_wcwidth_works=yes
-else
-  gl_cv_func_wcwidth_works=no
-fi
-rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
-  conftest.$ac_objext conftest.beam conftest.$ac_ext
-fi
-
-
-fi
-{ $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcwidth_works" >&5
-$as_echo "$gl_cv_func_wcwidth_works" >&6; }
-    case "$gl_cv_func_wcwidth_works" in
-      *yes) ;;
-      *no) REPLACE_WCWIDTH=1 ;;
-    esac
-  else
-    HAVE_WCWIDTH=0
-  fi
-
-  if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then
-
-
-
-
-
-
-
-
-  gl_LIBOBJS="$gl_LIBOBJS wcwidth.$ac_objext"
-
-  fi
-
-
-
-
-
-          GNULIB_WCWIDTH=1
-
-
-
-
-
-$as_echo "#define GNULIB_TEST_WCWIDTH 1" >>confdefs.h
-
-
-
-
-
-
-
-
-
-
-
-
-  LIBGNU_LIBDEPS="$gl_libdeps"
-
-  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
-
-
-
-ac_config_files="$ac_config_files Makefile lib/Makefile m4/Makefile"
-
-cat >confcache <<\_ACEOF
-# This file is a shell script that caches the results of configure
-# tests run on this system so they can be shared between configure
-# scripts and configure runs, see configure's option --config-cache.
-# It is not useful on other systems.  If it contains results you don't
-# want to keep, you may remove or edit it.
-#
-# config.status only pays attention to the cache file if you give it
-# the --recheck option to rerun configure.
-#
-# `ac_cv_env_foo' variables (set or unset) will be overridden when
-# loading this file, other *unset* `ac_cv_foo' will be assigned the
-# following values.
-
-_ACEOF
-
-# The following way of writing the cache mishandles newlines in values,
-# but we know of no workaround that is simple, portable, and efficient.
-# So, we kill variables containing newlines.
-# Ultrix sh set writes to stderr and can't be redirected directly,
-# and sets the high bit in the cache file unless we assign to the vars.
-(
-  for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do
-    eval ac_val=\$$ac_var
-    case $ac_val in #(
-    *${as_nl}*)
-      case $ac_var in #(
-      *_cv_*) { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: cache variable $ac_var contains a newline" >&5
-$as_echo "$as_me: WARNING: cache variable $ac_var contains a newline" >&2;} ;;
-      esac
-      case $ac_var in #(
-      _ | IFS | as_nl) ;; #(
-      BASH_ARGV | BASH_SOURCE) eval $ac_var= ;; #(
-      *) { eval $ac_var=; unset $ac_var;} ;;
-      esac ;;
-    esac
-  done
-
-  (set) 2>&1 |
-    case $as_nl`(ac_space=' '; set) 2>&1` in #(
-    *${as_nl}ac_space=\ *)
-      # `set' does not quote correctly, so add quotes: double-quote
-      # substitution turns \\\\ into \\, and sed turns \\ into \.
-      sed -n \
-       "s/'/'\\\\''/g;
-         s/^\\([_$as_cr_alnum]*_cv_[_$as_cr_alnum]*\\)=\\(.*\\)/\\1='\\2'/p"
-      ;; #(
-    *)
-      # `set' quotes correctly as required by POSIX, so do not add quotes.
-      sed -n "/^[_$as_cr_alnum]*_cv_[_$as_cr_alnum]*=/p"
-      ;;
-    esac |
-    sort
-) |
-  sed '
-     /^ac_cv_env_/b end
-     t clear
-     :clear
-     s/^\([^=]*\)=\(.*[{}].*\)$/test "${\1+set}" = set || &/
-     t end
-     s/^\([^=]*\)=\(.*\)$/\1=${\1=\2}/
-     :end' >>confcache
-if diff "$cache_file" confcache >/dev/null 2>&1; then :; else
-  if test -w "$cache_file"; then
-    if test "x$cache_file" != "x/dev/null"; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5
-$as_echo "$as_me: updating cache $cache_file" >&6;}
-      if test ! -f "$cache_file" || test -h "$cache_file"; then
-       cat confcache >"$cache_file"
-      else
-        case $cache_file in #(
-        */* | ?:*)
-         mv -f confcache "$cache_file"$$ &&
-         mv -f "$cache_file"$$ "$cache_file" ;; #(
-        *)
-         mv -f confcache "$cache_file" ;;
-       esac
-      fi
-    fi
-  else
-    { $as_echo "$as_me:${as_lineno-$LINENO}: not updating unwritable cache $cache_file" >&5
-$as_echo "$as_me: not updating unwritable cache $cache_file" >&6;}
-  fi
-fi
-rm -f confcache
-
-test "x$prefix" = xNONE && prefix=$ac_default_prefix
-# Let make expand exec_prefix.
-test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
-
-DEFS=-DHAVE_CONFIG_H
-
-ac_libobjs=
-ac_ltlibobjs=
-U=
-for ac_i in : $LIBOBJS; do test "x$ac_i" = x: && continue
-  # 1. Remove the extension, and $U if already installed.
-  ac_script='s/\$U\././;s/\.o$//;s/\.obj$//'
-  ac_i=`$as_echo "$ac_i" | sed "$ac_script"`
-  # 2. Prepend LIBOBJDIR.  When used with automake>=1.10 LIBOBJDIR
-  #    will be set to the directory where LIBOBJS objects are built.
-  as_fn_append ac_libobjs " \${LIBOBJDIR}$ac_i\$U.$ac_objext"
-  as_fn_append ac_ltlibobjs " \${LIBOBJDIR}$ac_i"'$U.lo'
-done
-LIBOBJS=$ac_libobjs
-
-LTLIBOBJS=$ac_ltlibobjs
-
-
-{ $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5
-$as_echo_n "checking that generated files are newer than configure... " >&6; }
-   if test -n "$am_sleep_pid"; then
-     # Hide warnings about reused PIDs.
-     wait $am_sleep_pid 2>/dev/null
-   fi
-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5
-$as_echo "done" >&6; }
- if test -n "$EXEEXT"; then
-  am__EXEEXT_TRUE=
-  am__EXEEXT_FALSE='#'
-else
-  am__EXEEXT_TRUE='#'
-  am__EXEEXT_FALSE=
-fi
-
-if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then
-  as_fn_error $? "conditional \"AMDEP\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then
-  as_fn_error $? "conditional \"am__fastdepCC\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then
-  as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then
-  as_fn_error $? "conditional \"GL_GENERATE_STDINT_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then
-  as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then
-  as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-if test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE}" && test -z "${LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_FALSE}"; then
-  as_fn_error $? "conditional \"LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH\" was never defined.
-Usually this means the macro was only invoked conditionally." "$LINENO" 5
-fi
-
-    gl_libobjs=
-    gl_ltlibobjs=
-    if test -n "$gl_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gl_libobjs="$gl_libobjs $i.$ac_objext"
-        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
-      done
-    fi
-    gl_LIBOBJS=$gl_libobjs
-
-    gl_LTLIBOBJS=$gl_ltlibobjs
-
-
-
-: "${CONFIG_STATUS=./config.status}"
-ac_write_fail=0
-ac_clean_files_save=$ac_clean_files
-ac_clean_files="$ac_clean_files $CONFIG_STATUS"
-{ $as_echo "$as_me:${as_lineno-$LINENO}: creating $CONFIG_STATUS" >&5
-$as_echo "$as_me: creating $CONFIG_STATUS" >&6;}
-as_write_fail=0
-cat >$CONFIG_STATUS <<_ASEOF || as_write_fail=1
-#! $SHELL
-# Generated by $as_me.
-# Run this file to recreate the current configuration.
-# Compiler output produced by configure, useful for debugging
-# configure, is in config.log if it exists.
-
-debug=false
-ac_cs_recheck=false
-ac_cs_silent=false
-
-SHELL=\${CONFIG_SHELL-$SHELL}
-export SHELL
-_ASEOF
-cat >>$CONFIG_STATUS <<\_ASEOF || as_write_fail=1
-## -------------------- ##
-## M4sh Initialization. ##
-## -------------------- ##
-
-# Be more Bourne compatible
-DUALCASE=1; export DUALCASE # for MKS sh
-if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then :
-  emulate sh
-  NULLCMD=:
-  # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which
-  # is contrary to our usage.  Disable this feature.
-  alias -g '${1+"$@"}'='"$@"'
-  setopt NO_GLOB_SUBST
-else
-  case `(set -o) 2>/dev/null` in #(
-  *posix*) :
-    set -o posix ;; #(
-  *) :
-     ;;
-esac
-fi
-
-
-as_nl='
-'
-export as_nl
-# Printing a long string crashes Solaris 7 /usr/bin/printf.
-as_echo='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\'
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo
-as_echo=$as_echo$as_echo$as_echo$as_echo$as_echo$as_echo
-# Prefer a ksh shell builtin over an external printf program on Solaris,
-# but without wasting forks for bash or zsh.
-if test -z "$BASH_VERSION$ZSH_VERSION" \
-    && (test "X`print -r -- $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='print -r --'
-  as_echo_n='print -rn --'
-elif (test "X`printf %s $as_echo`" = "X$as_echo") 2>/dev/null; then
-  as_echo='printf %s\n'
-  as_echo_n='printf %s'
-else
-  if test "X`(/usr/ucb/echo -n -n $as_echo) 2>/dev/null`" = "X-n $as_echo"; then
-    as_echo_body='eval /usr/ucb/echo -n "$1$as_nl"'
-    as_echo_n='/usr/ucb/echo -n'
-  else
-    as_echo_body='eval expr "X$1" : "X\\(.*\\)"'
-    as_echo_n_body='eval
-      arg=$1;
-      case $arg in #(
-      *"$as_nl"*)
-       expr "X$arg" : "X\\(.*\\)$as_nl";
-       arg=`expr "X$arg" : ".*$as_nl\\(.*\\)"`;;
-      esac;
-      expr "X$arg" : "X\\(.*\\)" | tr -d "$as_nl"
-    '
-    export as_echo_n_body
-    as_echo_n='sh -c $as_echo_n_body as_echo'
-  fi
-  export as_echo_body
-  as_echo='sh -c $as_echo_body as_echo'
-fi
-
-# The user is always right.
-if test "${PATH_SEPARATOR+set}" != set; then
-  PATH_SEPARATOR=:
-  (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && {
-    (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 ||
-      PATH_SEPARATOR=';'
-  }
-fi
-
-
-# IFS
-# We need space, tab and new line, in precisely that order.  Quoting is
-# there to prevent editors from complaining about space-tab.
-# (If _AS_PATH_WALK were called with IFS unset, it would disable word
-# splitting by setting IFS to empty value.)
-IFS=" ""       $as_nl"
-
-# Find who we are.  Look in the path if we contain no directory separator.
-as_myself=
-case $0 in #((
-  *[\\/]* ) as_myself=$0 ;;
-  *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
-for as_dir in $PATH
-do
-  IFS=$as_save_IFS
-  test -z "$as_dir" && as_dir=.
-    test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
-  done
-IFS=$as_save_IFS
-
-     ;;
-esac
-# We did not find ourselves, most probably we were run as `sh COMMAND'
-# in which case we are not to be found in the path.
-if test "x$as_myself" = x; then
-  as_myself=$0
-fi
-if test ! -f "$as_myself"; then
-  $as_echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2
-  exit 1
-fi
-
-# Unset variables that we do not need and which cause bugs (e.g. in
-# pre-3.0 UWIN ksh).  But do not cause bugs in bash 2.01; the "|| exit 1"
-# suppresses any "Segmentation fault" message there.  '((' could
-# trigger a bug in pdksh 5.2.14.
-for as_var in BASH_ENV ENV MAIL MAILPATH
-do eval test x\${$as_var+set} = xset \
-  && ( (unset $as_var) || exit 1) >/dev/null 2>&1 && unset $as_var || :
-done
-PS1='$ '
-PS2='> '
-PS4='+ '
-
-# NLS nuisances.
-LC_ALL=C
-export LC_ALL
-LANGUAGE=C
-export LANGUAGE
-
-# CDPATH.
-(unset CDPATH) >/dev/null 2>&1 && unset CDPATH
-
-
-# as_fn_error STATUS ERROR [LINENO LOG_FD]
-# ----------------------------------------
-# Output "`basename $0`: error: ERROR" to stderr. If LINENO and LOG_FD are
-# provided, also output the error to LOG_FD, referencing LINENO. Then exit the
-# script with STATUS, using 1 if that was 0.
-as_fn_error ()
-{
-  as_status=$1; test $as_status -eq 0 && as_status=1
-  if test "$4"; then
-    as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack
-    $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4
-  fi
-  $as_echo "$as_me: error: $2" >&2
-  as_fn_exit $as_status
-} # as_fn_error
-
-
-# as_fn_set_status STATUS
-# -----------------------
-# Set $? to STATUS, without forking.
-as_fn_set_status ()
-{
-  return $1
-} # as_fn_set_status
-
-# as_fn_exit STATUS
-# -----------------
-# Exit the shell with STATUS, even in a "trap 0" or "set -e" context.
-as_fn_exit ()
-{
-  set +e
-  as_fn_set_status $1
-  exit $1
-} # as_fn_exit
-
-# as_fn_unset VAR
-# ---------------
-# Portably unset VAR.
-as_fn_unset ()
-{
-  { eval $1=; unset $1;}
-}
-as_unset=as_fn_unset
-# as_fn_append VAR VALUE
-# ----------------------
-# Append the text in VALUE to the end of the definition contained in VAR. Take
-# advantage of any shell optimizations that allow amortized linear growth over
-# repeated appends, instead of the typical quadratic growth present in naive
-# implementations.
-if (eval "as_var=1; as_var+=2; test x\$as_var = x12") 2>/dev/null; then :
-  eval 'as_fn_append ()
-  {
-    eval $1+=\$2
-  }'
-else
-  as_fn_append ()
-  {
-    eval $1=\$$1\$2
-  }
-fi # as_fn_append
-
-# as_fn_arith ARG...
-# ------------------
-# Perform arithmetic evaluation on the ARGs, and store the result in the
-# global $as_val. Take advantage of shells that can avoid forks. The arguments
-# must be portable across $(()) and expr.
-if (eval "test \$(( 1 + 1 )) = 2") 2>/dev/null; then :
-  eval 'as_fn_arith ()
-  {
-    as_val=$(( $* ))
-  }'
-else
-  as_fn_arith ()
-  {
-    as_val=`expr "$@" || test $? -eq 1`
-  }
-fi # as_fn_arith
-
-
-if expr a : '\(a\)' >/dev/null 2>&1 &&
-   test "X`expr 00001 : '.*\(...\)'`" = X001; then
-  as_expr=expr
-else
-  as_expr=false
-fi
-
-if (basename -- /) >/dev/null 2>&1 && test "X`basename -- / 2>&1`" = "X/"; then
-  as_basename=basename
-else
-  as_basename=false
-fi
-
-if (as_dir=`dirname -- /` && test "X$as_dir" = X/) >/dev/null 2>&1; then
-  as_dirname=dirname
-else
-  as_dirname=false
-fi
-
-as_me=`$as_basename -- "$0" ||
-$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
-        X"$0" : 'X\(//\)$' \| \
-        X"$0" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X/"$0" |
-    sed '/^.*\/\([^/][^/]*\)\/*$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\/\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-
-# Avoid depending upon Character Ranges.
-as_cr_letters='abcdefghijklmnopqrstuvwxyz'
-as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
-as_cr_Letters=$as_cr_letters$as_cr_LETTERS
-as_cr_digits='0123456789'
-as_cr_alnum=$as_cr_Letters$as_cr_digits
-
-ECHO_C= ECHO_N= ECHO_T=
-case `echo -n x` in #(((((
--n*)
-  case `echo 'xy\c'` in
-  *c*) ECHO_T='        ';;     # ECHO_T is single tab character.
-  xy)  ECHO_C='\c';;
-  *)   echo `echo ksh88 bug on AIX 6.1` > /dev/null
-       ECHO_T='        ';;
-  esac;;
-*)
-  ECHO_N='-n';;
-esac
-
-rm -f conf$$ conf$$.exe conf$$.file
-if test -d conf$$.dir; then
-  rm -f conf$$.dir/conf$$.file
-else
-  rm -f conf$$.dir
-  mkdir conf$$.dir 2>/dev/null
-fi
-if (echo >conf$$.file) 2>/dev/null; then
-  if ln -s conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s='ln -s'
-    # ... but there are two gotchas:
-    # 1) On MSYS, both `ln -s file dir' and `ln file dir' fail.
-    # 2) DJGPP < 2.04 has no symlinks; `ln -s' creates a wrapper executable.
-    # In both cases, we have to default to `cp -pR'.
-    ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe ||
-      as_ln_s='cp -pR'
-  elif ln conf$$.file conf$$ 2>/dev/null; then
-    as_ln_s=ln
-  else
-    as_ln_s='cp -pR'
-  fi
-else
-  as_ln_s='cp -pR'
-fi
-rm -f conf$$ conf$$.exe conf$$.dir/conf$$.file conf$$.file
-rmdir conf$$.dir 2>/dev/null
-
-
-# as_fn_mkdir_p
-# -------------
-# Create "$as_dir" as a directory, including parents if necessary.
-as_fn_mkdir_p ()
-{
-
-  case $as_dir in #(
-  -*) as_dir=./$as_dir;;
-  esac
-  test -d "$as_dir" || eval $as_mkdir_p || {
-    as_dirs=
-    while :; do
-      case $as_dir in #(
-      *\'*) as_qdir=`$as_echo "$as_dir" | sed "s/'/'\\\\\\\\''/g"`;; #'(
-      *) as_qdir=$as_dir;;
-      esac
-      as_dirs="'$as_qdir' $as_dirs"
-      as_dir=`$as_dirname -- "$as_dir" ||
-$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$as_dir" : 'X\(//\)[^/]' \| \
-        X"$as_dir" : 'X\(//\)$' \| \
-        X"$as_dir" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$as_dir" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-      test -d "$as_dir" && break
-    done
-    test -z "$as_dirs" || eval "mkdir $as_dirs"
-  } || test -d "$as_dir" || as_fn_error $? "cannot create directory $as_dir"
-
-
-} # as_fn_mkdir_p
-if mkdir -p . 2>/dev/null; then
-  as_mkdir_p='mkdir -p "$as_dir"'
-else
-  test -d ./-p && rmdir ./-p
-  as_mkdir_p=false
-fi
-
-
-# as_fn_executable_p FILE
-# -----------------------
-# Test if FILE is an executable regular file.
-as_fn_executable_p ()
-{
-  test -f "$1" && test -x "$1"
-} # as_fn_executable_p
-as_test_x='test -x'
-as_executable_p=as_fn_executable_p
-
-# Sed expression to map a string onto a valid CPP name.
-as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
-
-# Sed expression to map a string onto a valid variable name.
-as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
-
-
-exec 6>&1
-## ----------------------------------- ##
-## Main body of $CONFIG_STATUS script. ##
-## ----------------------------------- ##
-_ASEOF
-test $as_write_fail = 0 && chmod +x $CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# Save the log message, to keep $0 and so on meaningful, and to
-# report actual input values of CONFIG_FILES etc. instead of their
-# values after options handling.
-ac_log="
-This file was extended by dummy $as_me 0, which was
-generated by GNU Autoconf 2.69.  Invocation command line was
-
-  CONFIG_FILES    = $CONFIG_FILES
-  CONFIG_HEADERS  = $CONFIG_HEADERS
-  CONFIG_LINKS    = $CONFIG_LINKS
-  CONFIG_COMMANDS = $CONFIG_COMMANDS
-  $ $0 $@
-
-on `(hostname || uname -n) 2>/dev/null | sed 1q`
-"
-
-_ACEOF
-
-case $ac_config_files in *"
-"*) set x $ac_config_files; shift; ac_config_files=$*;;
-esac
-
-case $ac_config_headers in *"
-"*) set x $ac_config_headers; shift; ac_config_headers=$*;;
-esac
-
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-# Files that config.status was made for.
-config_files="$ac_config_files"
-config_headers="$ac_config_headers"
-config_commands="$ac_config_commands"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-ac_cs_usage="\
-\`$as_me' instantiates files and other configuration actions
-from templates according to the current configuration.  Unless the files
-and actions are specified as TAGs, all are instantiated by default.
-
-Usage: $0 [OPTION]... [TAG]...
-
-  -h, --help       print this help, then exit
-  -V, --version    print version number and configuration settings, then exit
-      --config     print configuration, then exit
-  -q, --quiet, --silent
-                   do not print progress messages
-  -d, --debug      don't remove temporary files
-      --recheck    update $as_me by reconfiguring in the same conditions
-      --file=FILE[:TEMPLATE]
-                   instantiate the configuration file FILE
-      --header=FILE[:TEMPLATE]
-                   instantiate the configuration header FILE
-
-Configuration files:
-$config_files
-
-Configuration headers:
-$config_headers
-
-Configuration commands:
-$config_commands
-
-Report bugs to the package provider."
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
-ac_cs_version="\\
-dummy config.status 0
-configured by $0, generated by GNU Autoconf 2.69,
-  with options \\"\$ac_cs_config\\"
-
-Copyright (C) 2012 Free Software Foundation, Inc.
-This config.status script is free software; the Free Software Foundation
-gives unlimited permission to copy, distribute and modify it."
-
-ac_pwd='$ac_pwd'
-srcdir='$srcdir'
-INSTALL='$INSTALL'
-MKDIR_P='$MKDIR_P'
-AWK='$AWK'
-test -n "\$AWK" || AWK=awk
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# The default lists apply if the user does not specify any file.
-ac_need_defaults=:
-while test $# != 0
-do
-  case $1 in
-  --*=?*)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'`
-    ac_shift=:
-    ;;
-  --*=)
-    ac_option=`expr "X$1" : 'X\([^=]*\)='`
-    ac_optarg=
-    ac_shift=:
-    ;;
-  *)
-    ac_option=$1
-    ac_optarg=$2
-    ac_shift=shift
-    ;;
-  esac
-
-  case $ac_option in
-  # Handling of the options.
-  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
-    ac_cs_recheck=: ;;
-  --version | --versio | --versi | --vers | --ver | --ve | --v | -V )
-    $as_echo "$ac_cs_version"; exit ;;
-  --config | --confi | --conf | --con | --co | --c )
-    $as_echo "$ac_cs_config"; exit ;;
-  --debug | --debu | --deb | --de | --d | -d )
-    debug=: ;;
-  --file | --fil | --fi | --f )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    '') as_fn_error $? "missing file argument" ;;
-    esac
-    as_fn_append CONFIG_FILES " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --header | --heade | --head | --hea )
-    $ac_shift
-    case $ac_optarg in
-    *\'*) ac_optarg=`$as_echo "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;;
-    esac
-    as_fn_append CONFIG_HEADERS " '$ac_optarg'"
-    ac_need_defaults=false;;
-  --he | --h)
-    # Conflict between --help and --header
-    as_fn_error $? "ambiguous option: \`$1'
-Try \`$0 --help' for more information.";;
-  --help | --hel | -h )
-    $as_echo "$ac_cs_usage"; exit ;;
-  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
-  | -silent | --silent | --silen | --sile | --sil | --si | --s)
-    ac_cs_silent=: ;;
-
-  # This is an error.
-  -*) as_fn_error $? "unrecognized option: \`$1'
-Try \`$0 --help' for more information." ;;
-
-  *) as_fn_append ac_config_targets " $1"
-     ac_need_defaults=false ;;
-
-  esac
-  shift
-done
-
-ac_configure_extra_args=
-
-if $ac_cs_silent; then
-  exec 6>/dev/null
-  ac_configure_extra_args="$ac_configure_extra_args --silent"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-if \$ac_cs_recheck; then
-  set X $SHELL '$0' $ac_configure_args \$ac_configure_extra_args --no-create --no-recursion
-  shift
-  \$as_echo "running CONFIG_SHELL=$SHELL \$*" >&6
-  CONFIG_SHELL='$SHELL'
-  export CONFIG_SHELL
-  exec "\$@"
-fi
-
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-exec 5>>config.log
-{
-  echo
-  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
-## Running $as_me. ##
-_ASBOX
-  $as_echo "$ac_log"
-} >&5
-
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-#
-# INIT-COMMANDS
-#
-AMDEP_TRUE="$AMDEP_TRUE" ac_aux_dir="$ac_aux_dir"
-
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-
-# Handling of arguments.
-for ac_config_target in $ac_config_targets
-do
-  case $ac_config_target in
-    "config.h") CONFIG_HEADERS="$CONFIG_HEADERS config.h" ;;
-    "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;;
-    "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;;
-    "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;;
-    "m4/Makefile") CONFIG_FILES="$CONFIG_FILES m4/Makefile" ;;
-
-  *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;;
-  esac
-done
-
-
-# If the user did not use the arguments to specify the items to instantiate,
-# then the envvar interface is used.  Set only those that are not.
-# We use the long form for the default assignment because of an extremely
-# bizarre bug on SunOS 4.1.3.
-if $ac_need_defaults; then
-  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
-  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
-  test "${CONFIG_COMMANDS+set}" = set || CONFIG_COMMANDS=$config_commands
-fi
-
-# Have a temporary directory for convenience.  Make it in the build tree
-# simply because there is no reason against having it here, and in addition,
-# creating and moving files from /tmp can sometimes cause problems.
-# Hook for its removal unless debugging.
-# Note that there is a small window in which the directory will not be cleaned:
-# after its creation but before its name has been assigned to `$tmp'.
-$debug ||
-{
-  tmp= ac_tmp=
-  trap 'exit_status=$?
-  : "${ac_tmp:=$tmp}"
-  { test ! -d "$ac_tmp" || rm -fr "$ac_tmp"; } && exit $exit_status
-' 0
-  trap 'as_fn_exit 1' 1 2 13 15
-}
-# Create a (secure) tmp directory for tmp files.
-
-{
-  tmp=`(umask 077 && mktemp -d "./confXXXXXX") 2>/dev/null` &&
-  test -d "$tmp"
-}  ||
-{
-  tmp=./conf$$-$RANDOM
-  (umask 077 && mkdir "$tmp")
-} || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5
-ac_tmp=$tmp
-
-# Set up the scripts for CONFIG_FILES section.
-# No need to generate them if there are no CONFIG_FILES.
-# This happens for instance with `./config.status config.h'.
-if test -n "$CONFIG_FILES"; then
-
-
-ac_cr=`echo X | tr X '\015'`
-# On cygwin, bash can eat \r inside `` if the user requested igncr.
-# But we know of no other shell where ac_cr would be empty at this
-# point, so we can use a bashism as a fallback.
-if test "x$ac_cr" = x; then
-  eval ac_cr=\$\'\\r\'
-fi
-ac_cs_awk_cr=`$AWK 'BEGIN { print "a\rb" }' </dev/null 2>/dev/null`
-if test "$ac_cs_awk_cr" = "a${ac_cr}b"; then
-  ac_cs_awk_cr='\\r'
-else
-  ac_cs_awk_cr=$ac_cr
-fi
-
-echo 'BEGIN {' >"$ac_tmp/subs1.awk" &&
-_ACEOF
-
-
-{
-  echo "cat >conf$$subs.awk <<_ACEOF" &&
-  echo "$ac_subst_vars" | sed 's/.*/&!$&$ac_delim/' &&
-  echo "_ACEOF"
-} >conf$$subs.sh ||
-  as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-ac_delim_num=`echo "$ac_subst_vars" | grep -c '^'`
-ac_delim='%!_!# '
-for ac_last_try in false false false false false :; do
-  . ./conf$$subs.sh ||
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-
-  ac_delim_n=`sed -n "s/.*$ac_delim\$/X/p" conf$$subs.awk | grep -c X`
-  if test $ac_delim_n = $ac_delim_num; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_STATUS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-rm -f conf$$subs.sh
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-cat >>"\$ac_tmp/subs1.awk" <<\\_ACAWK &&
-_ACEOF
-sed -n '
-h
-s/^/S["/; s/!.*/"]=/
-p
-g
-s/^[^!]*!//
-:repl
-t repl
-s/'"$ac_delim"'$//
-t delim
-:nl
-h
-s/\(.\{148\}\)..*/\1/
-t more1
-s/["\\]/\\&/g; s/^/"/; s/$/\\n"\\/
-p
-n
-b repl
-:more1
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t nl
-:delim
-h
-s/\(.\{148\}\)..*/\1/
-t more2
-s/["\\]/\\&/g; s/^/"/; s/$/"/
-p
-b
-:more2
-s/["\\]/\\&/g; s/^/"/; s/$/"\\/
-p
-g
-s/.\{148\}//
-t delim
-' <conf$$subs.awk | sed '
-/^[^""]/{
-  N
-  s/\n//
-}
-' >>$CONFIG_STATUS || ac_write_fail=1
-rm -f conf$$subs.awk
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-_ACAWK
-cat >>"\$ac_tmp/subs1.awk" <<_ACAWK &&
-  for (key in S) S_is_set[key] = 1
-  FS = "\a"
-
-}
-{
-  line = $ 0
-  nfields = split(line, field, "@")
-  substed = 0
-  len = length(field[1])
-  for (i = 2; i < nfields; i++) {
-    key = field[i]
-    keylen = length(key)
-    if (S_is_set[key]) {
-      value = S[key]
-      line = substr(line, 1, len) "" value "" substr(line, len + keylen + 3)
-      len += length(value) + length(field[++i])
-      substed = 1
-    } else
-      len += 1 + keylen
-  }
-
-  print line
-}
-
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-if sed "s/$ac_cr//" < /dev/null > /dev/null 2>&1; then
-  sed "s/$ac_cr\$//; s/$ac_cr/$ac_cs_awk_cr/g"
-else
-  cat
-fi < "$ac_tmp/subs1.awk" > "$ac_tmp/subs.awk" \
-  || as_fn_error $? "could not setup config files machinery" "$LINENO" 5
-_ACEOF
-
-# VPATH may cause trouble with some makes, so we remove sole $(srcdir),
-# ${srcdir} and @srcdir@ entries from VPATH if srcdir is ".", strip leading and
-# trailing colons and then remove the whole line if VPATH becomes empty
-# (actually we leave an empty line to preserve line numbers).
-if test "x$srcdir" = x.; then
-  ac_vpsub='/^[         ]*VPATH[        ]*=[    ]*/{
-h
-s///
-s/^/:/
-s/[     ]*$/:/
-s/:\$(srcdir):/:/g
-s/:\${srcdir}:/:/g
-s/:@srcdir@:/:/g
-s/^:*//
-s/:*$//
-x
-s/\(=[  ]*\).*/\1/
-G
-s/\n//
-s/^[^=]*=[      ]*$//
-}'
-fi
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-fi # test -n "$CONFIG_FILES"
-
-# Set up the scripts for CONFIG_HEADERS section.
-# No need to generate them if there are no CONFIG_HEADERS.
-# This happens for instance with `./config.status Makefile'.
-if test -n "$CONFIG_HEADERS"; then
-cat >"$ac_tmp/defines.awk" <<\_ACAWK ||
-BEGIN {
-_ACEOF
-
-# Transform confdefs.h into an awk script `defines.awk', embedded as
-# here-document in config.status, that substitutes the proper values into
-# config.h.in to produce config.h.
-
-# Create a delimiter string that does not exist in confdefs.h, to ease
-# handling of long lines.
-ac_delim='%!_!# '
-for ac_last_try in false false :; do
-  ac_tt=`sed -n "/$ac_delim/p" confdefs.h`
-  if test -z "$ac_tt"; then
-    break
-  elif $ac_last_try; then
-    as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5
-  else
-    ac_delim="$ac_delim!$ac_delim _$ac_delim!! "
-  fi
-done
-
-# For the awk script, D is an array of macro values keyed by name,
-# likewise P contains macro parameters if any.  Preserve backslash
-# newline sequences.
-
-ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]*
-sed -n '
-s/.\{148\}/&'"$ac_delim"'/g
-t rset
-:rset
-s/^[    ]*#[    ]*define[       ][      ]*/ /
-t def
-d
-:def
-s/\\$//
-t bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3"/p
-s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2"/p
-d
-:bsnl
-s/["\\]/\\&/g
-s/^ \('"$ac_word_re"'\)\(([^()]*)\)[    ]*\(.*\)/P["\1"]="\2"\
-D["\1"]=" \3\\\\\\n"\\/p
-t cont
-s/^ \('"$ac_word_re"'\)[        ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p
-t cont
-d
-:cont
-n
-s/.\{148\}/&'"$ac_delim"'/g
-t clear
-:clear
-s/\\$//
-t bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/"/p
-d
-:bsnlc
-s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p
-b cont
-' <confdefs.h | sed '
-s/'"$ac_delim"'/"\\\
-"/g' >>$CONFIG_STATUS || ac_write_fail=1
-
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  for (key in D) D_is_set[key] = 1
-  FS = "\a"
-}
-/^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ {
-  line = \$ 0
-  split(line, arg, " ")
-  if (arg[1] == "#") {
-    defundef = arg[2]
-    mac1 = arg[3]
-  } else {
-    defundef = substr(arg[1], 2)
-    mac1 = arg[2]
-  }
-  split(mac1, mac2, "(") #)
-  macro = mac2[1]
-  prefix = substr(line, 1, index(line, defundef) - 1)
-  if (D_is_set[macro]) {
-    # Preserve the white space surrounding the "#".
-    print prefix "define", macro P[macro] D[macro]
-    next
-  } else {
-    # Replace #undef with comments.  This is necessary, for example,
-    # in the case of _POSIX_SOURCE, which is predefined and required
-    # on some systems where configure will not decide to define it.
-    if (defundef == "undef") {
-      print "/*", prefix defundef, macro, "*/"
-      next
-    }
-  }
-}
-{ print }
-_ACAWK
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-  as_fn_error $? "could not setup config headers machinery" "$LINENO" 5
-fi # test -n "$CONFIG_HEADERS"
-
-
-eval set X "  :F $CONFIG_FILES  :H $CONFIG_HEADERS    :C $CONFIG_COMMANDS"
-shift
-for ac_tag
-do
-  case $ac_tag in
-  :[FHLC]) ac_mode=$ac_tag; continue;;
-  esac
-  case $ac_mode$ac_tag in
-  :[FHL]*:*);;
-  :L* | :C*:*) as_fn_error $? "invalid tag \`$ac_tag'" "$LINENO" 5;;
-  :[FH]-) ac_tag=-:-;;
-  :[FH]*) ac_tag=$ac_tag:$ac_tag.in;;
-  esac
-  ac_save_IFS=$IFS
-  IFS=:
-  set x $ac_tag
-  IFS=$ac_save_IFS
-  shift
-  ac_file=$1
-  shift
-
-  case $ac_mode in
-  :L) ac_source=$1;;
-  :[FH])
-    ac_file_inputs=
-    for ac_f
-    do
-      case $ac_f in
-      -) ac_f="$ac_tmp/stdin";;
-      *) # Look for the file first in the build tree, then in the source tree
-        # (if the path is not absolute).  The absolute path cannot be DOS-style,
-        # because $ac_f cannot contain `:'.
-        test -f "$ac_f" ||
-          case $ac_f in
-          [\\/$]*) false;;
-          *) test -f "$srcdir/$ac_f" && ac_f="$srcdir/$ac_f";;
-          esac ||
-          as_fn_error 1 "cannot find input file: \`$ac_f'" "$LINENO" 5;;
-      esac
-      case $ac_f in *\'*) ac_f=`$as_echo "$ac_f" | sed "s/'/'\\\\\\\\''/g"`;; esac
-      as_fn_append ac_file_inputs " '$ac_f'"
-    done
-
-    # Let's still pretend it is `configure' which instantiates (i.e., don't
-    # use $as_me), people would be surprised to read:
-    #    /* config.h.  Generated by config.status.  */
-    configure_input='Generated from '`
-         $as_echo "$*" | sed 's|^[^:]*/||;s|:[^:]*/|, |g'
-       `' by configure.'
-    if test x"$ac_file" != x-; then
-      configure_input="$ac_file.  $configure_input"
-      { $as_echo "$as_me:${as_lineno-$LINENO}: creating $ac_file" >&5
-$as_echo "$as_me: creating $ac_file" >&6;}
-    fi
-    # Neutralize special characters interpreted by sed in replacement strings.
-    case $configure_input in #(
-    *\&* | *\|* | *\\* )
-       ac_sed_conf_input=`$as_echo "$configure_input" |
-       sed 's/[\\\\&|]/\\\\&/g'`;; #(
-    *) ac_sed_conf_input=$configure_input;;
-    esac
-
-    case $ac_tag in
-    *:-:* | *:-) cat >"$ac_tmp/stdin" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5 ;;
-    esac
-    ;;
-  esac
-
-  ac_dir=`$as_dirname -- "$ac_file" ||
-$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$ac_file" : 'X\(//\)[^/]' \| \
-        X"$ac_file" : 'X\(//\)$' \| \
-        X"$ac_file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$ac_file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-  as_dir="$ac_dir"; as_fn_mkdir_p
-  ac_builddir=.
-
-case "$ac_dir" in
-.) ac_dir_suffix= ac_top_builddir_sub=. ac_top_build_prefix= ;;
-*)
-  ac_dir_suffix=/`$as_echo "$ac_dir" | sed 's|^\.[\\/]||'`
-  # A ".." for each directory in $ac_dir_suffix.
-  ac_top_builddir_sub=`$as_echo "$ac_dir_suffix" | sed 's|/[^\\/]*|/..|g;s|/||'`
-  case $ac_top_builddir_sub in
-  "") ac_top_builddir_sub=. ac_top_build_prefix= ;;
-  *)  ac_top_build_prefix=$ac_top_builddir_sub/ ;;
-  esac ;;
-esac
-ac_abs_top_builddir=$ac_pwd
-ac_abs_builddir=$ac_pwd$ac_dir_suffix
-# for backward compatibility:
-ac_top_builddir=$ac_top_build_prefix
-
-case $srcdir in
-  .)  # We are building in place.
-    ac_srcdir=.
-    ac_top_srcdir=$ac_top_builddir_sub
-    ac_abs_top_srcdir=$ac_pwd ;;
-  [\\/]* | ?:[\\/]* )  # Absolute name.
-    ac_srcdir=$srcdir$ac_dir_suffix;
-    ac_top_srcdir=$srcdir
-    ac_abs_top_srcdir=$srcdir ;;
-  *) # Relative name.
-    ac_srcdir=$ac_top_build_prefix$srcdir$ac_dir_suffix
-    ac_top_srcdir=$ac_top_build_prefix$srcdir
-    ac_abs_top_srcdir=$ac_pwd/$srcdir ;;
-esac
-ac_abs_srcdir=$ac_abs_top_srcdir$ac_dir_suffix
-
-
-  case $ac_mode in
-  :F)
-  #
-  # CONFIG_FILE
-  #
-
-  case $INSTALL in
-  [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;;
-  *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;;
-  esac
-  ac_MKDIR_P=$MKDIR_P
-  case $MKDIR_P in
-  [\\/$]* | ?:[\\/]* ) ;;
-  */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;;
-  esac
-_ACEOF
-
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-# If the template does not know about datarootdir, expand it.
-# FIXME: This hack should be removed a few years after 2.60.
-ac_datarootdir_hack=; ac_datarootdir_seen=
-ac_sed_dataroot='
-/datarootdir/ {
-  p
-  q
-}
-/@datadir@/p
-/@docdir@/p
-/@infodir@/p
-/@localedir@/p
-/@mandir@/p'
-case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in
-*datarootdir*) ac_datarootdir_seen=yes;;
-*@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*)
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&5
-$as_echo "$as_me: WARNING: $ac_file_inputs seems to ignore the --datarootdir setting" >&2;}
-_ACEOF
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-  ac_datarootdir_hack='
-  s&@datadir@&$datadir&g
-  s&@docdir@&$docdir&g
-  s&@infodir@&$infodir&g
-  s&@localedir@&$localedir&g
-  s&@mandir@&$mandir&g
-  s&\\\${datarootdir}&$datarootdir&g' ;;
-esac
-_ACEOF
-
-# Neutralize VPATH when `$srcdir' = `.'.
-# Shell code in configure.ac might set extrasub.
-# FIXME: do we really want to maintain this feature?
-cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
-ac_sed_extra="$ac_vpsub
-$extrasub
-_ACEOF
-cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
-:t
-/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
-s|@configure_input@|$ac_sed_conf_input|;t t
-s&@top_builddir@&$ac_top_builddir_sub&;t t
-s&@top_build_prefix@&$ac_top_build_prefix&;t t
-s&@srcdir@&$ac_srcdir&;t t
-s&@abs_srcdir@&$ac_abs_srcdir&;t t
-s&@top_srcdir@&$ac_top_srcdir&;t t
-s&@abs_top_srcdir@&$ac_abs_top_srcdir&;t t
-s&@builddir@&$ac_builddir&;t t
-s&@abs_builddir@&$ac_abs_builddir&;t t
-s&@abs_top_builddir@&$ac_abs_top_builddir&;t t
-s&@INSTALL@&$ac_INSTALL&;t t
-s&@MKDIR_P@&$ac_MKDIR_P&;t t
-$ac_datarootdir_hack
-"
-eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \
-  >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-
-test -z "$ac_datarootdir_hack$ac_datarootdir_seen" &&
-  { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } &&
-  { ac_out=`sed -n '/^[         ]*datarootdir[  ]*:*=/p' \
-      "$ac_tmp/out"`; test -z "$ac_out"; } &&
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&5
-$as_echo "$as_me: WARNING: $ac_file contains a reference to the variable \`datarootdir'
-which seems to be undefined.  Please make sure it is defined" >&2;}
-
-  rm -f "$ac_tmp/stdin"
-  case $ac_file in
-  -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";;
-  *) rm -f "$ac_file" && mv "$ac_tmp/out" "$ac_file";;
-  esac \
-  || as_fn_error $? "could not create $ac_file" "$LINENO" 5
- ;;
-  :H)
-  #
-  # CONFIG_HEADER
-  #
-  if test x"$ac_file" != x-; then
-    {
-      $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs"
-    } >"$ac_tmp/config.h" \
-      || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then
-      { $as_echo "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5
-$as_echo "$as_me: $ac_file is unchanged" >&6;}
-    else
-      rm -f "$ac_file"
-      mv "$ac_tmp/config.h" "$ac_file" \
-       || as_fn_error $? "could not create $ac_file" "$LINENO" 5
-    fi
-  else
-    $as_echo "/* $configure_input  */" \
-      && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \
-      || as_fn_error $? "could not create -" "$LINENO" 5
-  fi
-# Compute "$ac_file"'s index in $config_headers.
-_am_arg="$ac_file"
-_am_stamp_count=1
-for _am_header in $config_headers :; do
-  case $_am_header in
-    $_am_arg | $_am_arg:* )
-      break ;;
-    * )
-      _am_stamp_count=`expr $_am_stamp_count + 1` ;;
-  esac
-done
-echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" ||
-$as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$_am_arg" : 'X\(//\)[^/]' \| \
-        X"$_am_arg" : 'X\(//\)$' \| \
-        X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$_am_arg" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`/stamp-h$_am_stamp_count
- ;;
-
-  :C)  { $as_echo "$as_me:${as_lineno-$LINENO}: executing $ac_file commands" >&5
-$as_echo "$as_me: executing $ac_file commands" >&6;}
- ;;
-  esac
-
-
-  case $ac_file$ac_mode in
-    "depfiles":C) test x"$AMDEP_TRUE" != x"" || {
-  # Older Autoconf quotes --file arguments for eval, but not when files
-  # are listed without --file.  Let's play safe and only enable the eval
-  # if we detect the quoting.
-  case $CONFIG_FILES in
-  *\'*) eval set x "$CONFIG_FILES" ;;
-  *)   set x $CONFIG_FILES ;;
-  esac
-  shift
-  for mf
-  do
-    # Strip MF so we end up with the name of the file.
-    mf=`echo "$mf" | sed -e 's/:.*$//'`
-    # Check whether this is an Automake generated Makefile or not.
-    # We used to match only the files named 'Makefile.in', but
-    # some people rename them; so instead we look at the file content.
-    # Grep'ing the first line is not enough: some people post-process
-    # each Makefile.in and add a new line on top of each file to say so.
-    # Grep'ing the whole file is not good either: AIX grep has a line
-    # limit of 2048, but all sed's we know have understand at least 4000.
-    if sed -n 's,^#.*generated by automake.*,X,p' "$mf" | grep X >/dev/null 2>&1; then
-      dirpart=`$as_dirname -- "$mf" ||
-$as_expr X"$mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$mf" : 'X\(//\)[^/]' \| \
-        X"$mf" : 'X\(//\)$' \| \
-        X"$mf" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$mf" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-    else
-      continue
-    fi
-    # Extract the definition of DEPDIR, am__include, and am__quote
-    # from the Makefile without running 'make'.
-    DEPDIR=`sed -n 's/^DEPDIR = //p' < "$mf"`
-    test -z "$DEPDIR" && continue
-    am__include=`sed -n 's/^am__include = //p' < "$mf"`
-    test -z "$am__include" && continue
-    am__quote=`sed -n 's/^am__quote = //p' < "$mf"`
-    # Find all dependency output files, they are included files with
-    # $(DEPDIR) in their names.  We invoke sed twice because it is the
-    # simplest approach to changing $(DEPDIR) to its actual value in the
-    # expansion.
-    for file in `sed -n "
-      s/^$am__include $am__quote\(.*(DEPDIR).*\)$am__quote"'$/\1/p' <"$mf" | \
-        sed -e 's/\$(DEPDIR)/'"$DEPDIR"'/g'`; do
-      # Make sure the directory exists.
-      test -f "$dirpart/$file" && continue
-      fdir=`$as_dirname -- "$file" ||
-$as_expr X"$file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
-        X"$file" : 'X\(//\)[^/]' \| \
-        X"$file" : 'X\(//\)$' \| \
-        X"$file" : 'X\(/\)' \| . 2>/dev/null ||
-$as_echo X"$file" |
-    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)[^/].*/{
-           s//\1/
-           q
-         }
-         /^X\(\/\/\)$/{
-           s//\1/
-           q
-         }
-         /^X\(\/\).*/{
-           s//\1/
-           q
-         }
-         s/.*/./; q'`
-      as_dir=$dirpart/$fdir; as_fn_mkdir_p
-      # echo "creating $dirpart/$file"
-      echo '# dummy' > "$dirpart/$file"
-    done
-  done
-}
- ;;
-
-  esac
-done # for ac_tag
-
-
-as_fn_exit 0
-_ACEOF
-ac_clean_files=$ac_clean_files_save
-
-test $ac_write_fail = 0 ||
-  as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5
-
-
-# configure is writing to config.log, and then calls config.status.
-# config.status does its own redirection, appending to config.log.
-# Unfortunately, on DOS this fails, as config.log is still kept open
-# by configure, so config.status won't be able to write to it; its
-# output is simply discarded.  So we exec the FD to /dev/null,
-# effectively closing config.log, so it can be properly (re)opened and
-# appended to by config.status.  When coming back to configure, we
-# need to make the FD available again.
-if test "$no_create" != yes; then
-  ac_cs_success=:
-  ac_config_status_args=
-  test "$silent" = yes &&
-    ac_config_status_args="$ac_config_status_args --quiet"
-  exec 5>/dev/null
-  $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false
-  exec 5>>config.log
-  # Use ||, not &&, to avoid exiting from the if with $? = 1, which
-  # would make configure fail if this is the last instruction.
-  $ac_cs_success || as_fn_exit 1
-fi
-if test -n "$ac_unrecognized_opts" && test "$enable_option_checking" != no; then
-  { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: unrecognized options: $ac_unrecognized_opts" >&5
-$as_echo "$as_me: WARNING: unrecognized options: $ac_unrecognized_opts" >&2;}
-fi
-
diff --git a/src/libs/gnulib/configure.ac b/src/libs/gnulib/configure.ac
deleted file mode 100644 (file)
index e55d498..0000000
+++ /dev/null
@@ -1,143 +0,0 @@
-# Process this file with autoconf to produce a configure script.
-#
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff 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.
-#
-# groff 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 can find the license text of GPL2 in the internet at
-# <http://www.gnu.org/licenses/gpl-2.0.txt>.
-
-AC_INIT([dummy], [0])
-AC_CONFIG_AUX_DIR([build-aux])
-AM_INIT_AUTOMAKE
-
-AC_CONFIG_HEADERS([config.h])
-
-AC_PROG_CC
-AC_PROG_INSTALL
-AC_PROG_MAKE_SET
-
-# For autobuild.
-AC_CANONICAL_BUILD
-AC_CANONICAL_HOST
-
-m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
-m4_pattern_allow([^gl_ES$])dnl a valid locale name
-m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
-m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
-
-gl_PROG_AR_RANLIB
-
-AM_PROG_CC_C_O
-
-gl_USE_SYSTEM_EXTENSIONS
-AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
-gl_cond_libtool=false
-gl_libdeps=
-gl_ltlibdeps=
-AC_DEFUN([gl_INIT], [
-gl_m4_base='m4'
-  m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
-  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
-  m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
-  m4_pushdef([gl_LIBSOURCES_LIST], [])
-  m4_pushdef([gl_LIBSOURCES_DIR], [])
-  gl_COMMON
-gl_source_base='lib'
-  gl_CONFIGMAKE_PREP
-  AC_REQUIRE([gl_EXTERN_INLINE])
-  gl_INTTYPES_H
-  gl_INTTYPES_INCOMPLETE
-  gl_LOCALCHARSET
-  LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
-  AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
-  gl_MULTIARCH
-  AM_STDBOOL_H
-  gl_STDDEF_H
-  gl_STDINT_H
-  gl_LIBUNISTRING_LIBHEADER([0.9], [unitypes.h])
-  gl_LIBUNISTRING_LIBHEADER([0.9], [uniwidth.h])
-  gl_LIBUNISTRING_MODULE([0.9.4], [uniwidth/width])
-  gl_WCHAR_H
-  gl_WCTYPE_H
-  gl_FUNC_WCWIDTH
-  if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then
-    AC_LIBOBJ([wcwidth])
-  fi
-  gl_WCHAR_MODULE_INDICATOR([wcwidth])
-  m4_ifval(gl_LIBSOURCES_LIST, [
-    m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
-      for gl_file in ]gl_LIBSOURCES_LIST[ ; do
-        if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
-          echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
-          exit 1
-        fi
-      done])dnl
-      m4_if(m4_sysval, [0], [],
-        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
-  ])
-  m4_popdef([gl_LIBSOURCES_DIR])
-  m4_popdef([gl_LIBSOURCES_LIST])
-  m4_popdef([AC_LIBSOURCES])
-  m4_popdef([AC_REPLACE_FUNCS])
-  m4_popdef([AC_LIBOBJ])
-  AC_CONFIG_COMMANDS_PRE([
-    gl_libobjs=
-    gl_ltlibobjs=
-    if test -n "$gl_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gl_libobjs="$gl_libobjs $i.$ac_objext"
-        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
-      done
-    fi
-    AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
-    AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
-  ])
-  LIBGNU_LIBDEPS="$gl_libdeps"
-  AC_SUBST([LIBGNU_LIBDEPS])
-  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
-  AC_SUBST([LIBGNU_LTLIBDEPS])
-])
-
-# Like AC_LIBOBJ, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gl_LIBOBJ], [
-  AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
-  gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
-])
-
-# Like AC_REPLACE_FUNCS, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gl_REPLACE_FUNCS], [
-  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
-  AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
-])
-
-# Like AC_LIBSOURCES, except the directory where the source file is
-# expected is derived from the gnulib-tool parameterization,
-# and alloca is special cased (for the alloca-opt module).
-# We could also entirely rely on EXTRA_lib..._SOURCES.
-AC_DEFUN([gl_LIBSOURCES], [
-  m4_foreach([_gl_NAME], [$1], [
-    m4_if(_gl_NAME, [alloca.c], [], [
-      m4_define([gl_LIBSOURCES_DIR], [lib])
-      m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
-    ])
-  ])
-])
-
-gl_INIT
-
-AC_CONFIG_FILES([Makefile lib/Makefile m4/Makefile])
-AC_OUTPUT
diff --git a/src/libs/gnulib/lib/Makefile.am b/src/libs/gnulib/lib/Makefile.am
deleted file mode 100644 (file)
index be7b521..0000000
+++ /dev/null
@@ -1,544 +0,0 @@
-## DO NOT EDIT! GENERATED AUTOMATICALLY!
-## Process this file with automake to produce Makefile.in.
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
-#
-# This file 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 3 of the License, or
-# (at your option) any later version.
-#
-# This file 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 file.  If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License,
-# this file may be distributed as part of a program that
-# contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=src/libs/gnulib --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl wcwidth
-
-AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
-
-SUBDIRS =
-noinst_HEADERS =
-noinst_LIBRARIES =
-noinst_LTLIBRARIES =
-EXTRA_DIST =
-BUILT_SOURCES =
-SUFFIXES =
-MOSTLYCLEANFILES = core *.stackdump
-MOSTLYCLEANDIRS =
-CLEANFILES =
-DISTCLEANFILES =
-MAINTAINERCLEANFILES =
-
-AM_CPPFLAGS =
-AM_CFLAGS =
-
-noinst_LIBRARIES += libgnu.a
-
-libgnu_a_SOURCES =
-libgnu_a_LIBADD = $(gl_LIBOBJS)
-libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
-EXTRA_libgnu_a_SOURCES =
-
-## begin gnulib module configmake
-
-# Listed in the same order as the GNU makefile conventions, and
-# provided by autoconf 2.59c+.
-# The Automake-defined pkg* macros are appended, in the order
-# listed in the Automake 1.10a+ documentation.
-configmake.h: Makefile
-       $(AM_V_GEN)rm -f $@-t && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         echo '#define PREFIX "$(prefix)"'; \
-         echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
-         echo '#define BINDIR "$(bindir)"'; \
-         echo '#define SBINDIR "$(sbindir)"'; \
-         echo '#define LIBEXECDIR "$(libexecdir)"'; \
-         echo '#define DATAROOTDIR "$(datarootdir)"'; \
-         echo '#define DATADIR "$(datadir)"'; \
-         echo '#define SYSCONFDIR "$(sysconfdir)"'; \
-         echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
-         echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
-         echo '#define INCLUDEDIR "$(includedir)"'; \
-         echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
-         echo '#define DOCDIR "$(docdir)"'; \
-         echo '#define INFODIR "$(infodir)"'; \
-         echo '#define HTMLDIR "$(htmldir)"'; \
-         echo '#define DVIDIR "$(dvidir)"'; \
-         echo '#define PDFDIR "$(pdfdir)"'; \
-         echo '#define PSDIR "$(psdir)"'; \
-         echo '#define LIBDIR "$(libdir)"'; \
-         echo '#define LISPDIR "$(lispdir)"'; \
-         echo '#define LOCALEDIR "$(localedir)"'; \
-         echo '#define MANDIR "$(mandir)"'; \
-         echo '#define MANEXT "$(manext)"'; \
-         echo '#define PKGDATADIR "$(pkgdatadir)"'; \
-         echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
-         echo '#define PKGLIBDIR "$(pkglibdir)"'; \
-         echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
-       } | sed '/""/d' > $@-t && \
-       mv -f $@-t $@
-
-BUILT_SOURCES += configmake.h
-CLEANFILES += configmake.h configmake.h-t
-
-## end   gnulib module configmake
-
-## begin gnulib module localcharset
-
-libgnu_a_SOURCES += localcharset.h localcharset.c
-
-# We need the following in order to install a simple file in $(libdir)
-# which is shared with other installed packages. We use a list of referencing
-# packages so that "make uninstall" will remove the file if and only if it
-# is not used by another installed package.
-# On systems with glibc-2.1 or newer, the file is redundant, therefore we
-# avoid installing it.
-
-all-local: charset.alias ref-add.sed ref-del.sed
-
-charset_alias = $(DESTDIR)$(libdir)/charset.alias
-charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
-install-exec-local: install-exec-localcharset
-install-exec-localcharset: all-local
-       if test $(GLIBC21) = no; then \
-         case '$(host_os)' in \
-           darwin[56]*) \
-             need_charset_alias=true ;; \
-           darwin* | cygwin* | mingw* | pw32* | cegcc*) \
-             need_charset_alias=false ;; \
-           *) \
-             need_charset_alias=true ;; \
-         esac ; \
-       else \
-         need_charset_alias=false ; \
-       fi ; \
-       if $$need_charset_alias; then \
-         $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
-       fi ; \
-       if test -f $(charset_alias); then \
-         sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
-         $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-         rm -f $(charset_tmp) ; \
-       else \
-         if $$need_charset_alias; then \
-           sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
-           $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-           rm -f $(charset_tmp) ; \
-         fi ; \
-       fi
-
-uninstall-local: uninstall-localcharset
-uninstall-localcharset: all-local
-       if test -f $(charset_alias); then \
-         sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
-         if grep '^# Packages using this file: $$' $(charset_tmp) \
-             > /dev/null; then \
-           rm -f $(charset_alias); \
-         else \
-           $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
-         fi; \
-         rm -f $(charset_tmp); \
-       fi
-
-charset.alias: config.charset
-       $(AM_V_GEN)rm -f t-$@ $@ && \
-       $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
-       mv t-$@ $@
-
-SUFFIXES += .sed .sin
-.sin.sed:
-       $(AM_V_GEN)rm -f t-$@ $@ && \
-       sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
-       mv t-$@ $@
-
-CLEANFILES += charset.alias ref-add.sed ref-del.sed
-
-EXTRA_DIST += config.charset ref-add.sin ref-del.sin
-
-## end   gnulib module localcharset
-
-## begin gnulib module snippet/arg-nonnull
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-
-BUILT_SOURCES += arg-nonnull.h
-# The arg-nonnull.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
-# off.
-arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       sed -n -e '/GL_ARG_NONNULL/,$$p' \
-         < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \
-         > $@-t && \
-       mv $@-t $@
-MOSTLYCLEANFILES += arg-nonnull.h arg-nonnull.h-t
-
-ARG_NONNULL_H=arg-nonnull.h
-
-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/arg-nonnull.h
-
-## end   gnulib module snippet/arg-nonnull
-
-## begin gnulib module snippet/c++defs
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-
-BUILT_SOURCES += c++defs.h
-# The c++defs.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
-c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       sed -n -e '/_GL_CXXDEFS/,$$p' \
-         < $(top_srcdir)/build-aux/snippet/c++defs.h \
-         > $@-t && \
-       mv $@-t $@
-MOSTLYCLEANFILES += c++defs.h c++defs.h-t
-
-CXXDEFS_H=c++defs.h
-
-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/c++defs.h
-
-## end   gnulib module snippet/c++defs
-
-## begin gnulib module snippet/warn-on-use
-
-BUILT_SOURCES += warn-on-use.h
-# The warn-on-use.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
-# off.
-warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       sed -n -e '/^.ifndef/,$$p' \
-         < $(top_srcdir)/build-aux/snippet/warn-on-use.h \
-         > $@-t && \
-       mv $@-t $@
-MOSTLYCLEANFILES += warn-on-use.h warn-on-use.h-t
-
-WARN_ON_USE_H=warn-on-use.h
-
-EXTRA_DIST += $(top_srcdir)/build-aux/snippet/warn-on-use.h
-
-## end   gnulib module snippet/warn-on-use
-
-## begin gnulib module stddef
-
-BUILT_SOURCES += $(STDDEF_H)
-
-# We need the following in order to create <stddef.h> when the system
-# doesn't have one that works with the given compiler.
-if GL_GENERATE_STDDEF_H
-stddef.h: stddef.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-             -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
-             -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
-             -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
-             < $(srcdir)/stddef.in.h; \
-       } > $@-t && \
-       mv $@-t $@
-else
-stddef.h: $(top_builddir)/config.status
-       rm -f $@
-endif
-MOSTLYCLEANFILES += stddef.h stddef.h-t
-
-EXTRA_DIST += stddef.in.h
-
-## end   gnulib module stddef
-
-## begin gnulib module stdint
-
-BUILT_SOURCES += $(STDINT_H)
-
-# We need the following in order to create <stdint.h> when the system
-# doesn't have one that works with the given compiler.
-if GL_GENERATE_STDINT_H
-stdint.h: stdint.in.h $(top_builddir)/config.status
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-             -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-             -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
-             -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
-             -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-             -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
-             -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
-             -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
-             -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
-             -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
-             -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-             -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
-             -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
-             -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
-             -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
-             -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
-             -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
-             -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
-             -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
-             -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
-             -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
-             < $(srcdir)/stdint.in.h; \
-       } > $@-t && \
-       mv $@-t $@
-else
-stdint.h: $(top_builddir)/config.status
-       rm -f $@
-endif
-MOSTLYCLEANFILES += stdint.h stdint.h-t
-
-EXTRA_DIST += stdint.in.h
-
-## end   gnulib module stdint
-
-## begin gnulib module streq
-
-
-EXTRA_DIST += streq.h
-
-## end   gnulib module streq
-
-## begin gnulib module unitypes
-
-BUILT_SOURCES += $(LIBUNISTRING_UNITYPES_H)
-
-unitypes.h: unitypes.in.h
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/unitypes.in.h; \
-       } > $@-t && \
-       mv -f $@-t $@
-MOSTLYCLEANFILES += unitypes.h unitypes.h-t
-
-EXTRA_DIST += unitypes.in.h
-
-## end   gnulib module unitypes
-
-## begin gnulib module uniwidth/base
-
-BUILT_SOURCES += $(LIBUNISTRING_UNIWIDTH_H)
-
-uniwidth.h: uniwidth.in.h
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/uniwidth.in.h; \
-       } > $@-t && \
-       mv -f $@-t $@
-MOSTLYCLEANFILES += uniwidth.h uniwidth.h-t
-
-EXTRA_DIST += localcharset.h uniwidth.in.h
-
-## end   gnulib module uniwidth/base
-
-## begin gnulib module uniwidth/width
-
-if LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH
-libgnu_a_SOURCES += uniwidth/width.c
-endif
-
-EXTRA_DIST += uniwidth/cjk.h
-
-## end   gnulib module uniwidth/width
-
-## begin gnulib module wchar
-
-BUILT_SOURCES += wchar.h
-
-# We need the following in order to create <wchar.h> when the system
-# version does not work standalone.
-wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-             -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
-             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
-             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
-             -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
-             -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
-             -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
-             -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
-             -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
-             -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
-             -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
-             -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
-             -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
-             -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
-             -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
-             -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
-             -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
-             -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
-             -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
-             -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
-             -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
-             -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
-             -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
-             -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
-             -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
-             -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
-             -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
-             -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
-             -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
-             -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
-             -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
-             -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
-             -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
-             -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
-             -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
-             -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
-             -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
-             -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
-             -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
-             -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
-             -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
-             -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
-             -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
-             < $(srcdir)/wchar.in.h | \
-         sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
-             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
-             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
-             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
-             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
-             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
-             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
-             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
-             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
-             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
-             -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
-             -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
-             -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
-             -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
-             -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
-             -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
-             -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
-             -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
-             -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
-             -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
-             -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
-             -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
-             -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
-             -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
-             -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
-             -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
-             -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
-             -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
-             -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
-             -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
-             -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
-             -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
-             -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
-             -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
-             -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
-             -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
-             -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
-             -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
-             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
-             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
-         | \
-         sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
-             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
-             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
-             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
-             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
-             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
-             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
-             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
-             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
-             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
-             -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
-             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
-             -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
-             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
-       } > $@-t && \
-       mv $@-t $@
-MOSTLYCLEANFILES += wchar.h wchar.h-t
-
-EXTRA_DIST += wchar.in.h
-
-## end   gnulib module wchar
-
-## begin gnulib module wctype-h
-
-BUILT_SOURCES += wctype.h
-libgnu_a_SOURCES += wctype-h.c
-
-# We need the following in order to create <wctype.h> when the system
-# doesn't have one that works with the given compiler.
-wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-             -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-             -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
-             -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
-             -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
-             -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
-             -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
-             -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
-             -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
-             -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
-             -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
-             -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
-             -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
-             -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
-             -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
-             -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
-             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-             < $(srcdir)/wctype.in.h; \
-       } > $@-t && \
-       mv $@-t $@
-MOSTLYCLEANFILES += wctype.h wctype.h-t
-
-EXTRA_DIST += wctype.in.h
-
-## end   gnulib module wctype-h
-
-## begin gnulib module wcwidth
-
-
-EXTRA_DIST += wcwidth.c
-
-EXTRA_libgnu_a_SOURCES += wcwidth.c
-
-## end   gnulib module wcwidth
-
-
-mostlyclean-local: mostlyclean-generic
-       @for dir in '' $(MOSTLYCLEANDIRS); do \
-         if test -n "$$dir" && test -d $$dir; then \
-           echo "rmdir $$dir"; rmdir $$dir; \
-         fi; \
-       done; \
-       :
diff --git a/src/libs/gnulib/lib/Makefile.in b/src/libs/gnulib/lib/Makefile.in
deleted file mode 100644 (file)
index c3f4c1d..0000000
+++ /dev/null
@@ -1,1285 +0,0 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
-#
-# This file 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 3 of the License, or
-# (at your option) any later version.
-#
-# This file 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 file.  If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License,
-# this file may be distributed as part of a program that
-# contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-# Reproduce by: gnulib-tool --import --dir=src/libs/gnulib --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl wcwidth
-
-
-
-VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \  ]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__append_1 = uniwidth/width.c
-subdir = lib
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \
-       $(top_srcdir)/build-aux/depcomp $(noinst_HEADERS)
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
-       $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/configmake.m4 \
-       $(top_srcdir)/m4/extensions.m4 \
-       $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
-       $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
-       $(top_srcdir)/m4/include_next.m4 \
-       $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
-       $(top_srcdir)/m4/libunistring-base.m4 \
-       $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/longlong.m4 \
-       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/onceonly.m4 \
-       $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
-       $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/warn-on-use.m4 \
-       $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
-       $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
-       $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-LIBRARIES = $(noinst_LIBRARIES)
-AM_V_AR = $(am__v_AR_@AM_V@)
-am__v_AR_ = $(am__v_AR_@AM_DEFAULT_V@)
-am__v_AR_0 = @echo "  AR      " $@;
-am__v_AR_1 = 
-libgnu_a_AR = $(AR) $(ARFLAGS)
-am__DEPENDENCIES_1 =
-am__libgnu_a_SOURCES_DIST = localcharset.h localcharset.c \
-       uniwidth/width.c wctype-h.c
-am__dirstamp = $(am__leading_dot)dirstamp
-@LIBUNISTRING_COMPILE_UNIWIDTH_WIDTH_TRUE@am__objects_1 = uniwidth/width.$(OBJEXT)
-am_libgnu_a_OBJECTS = localcharset.$(OBJEXT) $(am__objects_1) \
-       wctype-h.$(OBJEXT)
-libgnu_a_OBJECTS = $(am_libgnu_a_OBJECTS)
-LTLIBRARIES = $(noinst_LTLIBRARIES)
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp
-am__depfiles_maybe = depfiles
-am__mv = mv -f
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-       $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-AM_V_CC = $(am__v_CC_@AM_V@)
-am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@)
-am__v_CC_0 = @echo "  CC      " $@;
-am__v_CC_1 = 
-CCLD = $(CC)
-LINK = $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@
-AM_V_CCLD = $(am__v_CCLD_@AM_V@)
-am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@)
-am__v_CCLD_0 = @echo "  CCLD    " $@;
-am__v_CCLD_1 = 
-SOURCES = $(libgnu_a_SOURCES) $(EXTRA_libgnu_a_SOURCES)
-DIST_SOURCES = $(am__libgnu_a_SOURCES_DIST) $(EXTRA_libgnu_a_SOURCES)
-RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \
-       ctags-recursive dvi-recursive html-recursive info-recursive \
-       install-data-recursive install-dvi-recursive \
-       install-exec-recursive install-html-recursive \
-       install-info-recursive install-pdf-recursive \
-       install-ps-recursive install-recursive installcheck-recursive \
-       installdirs-recursive pdf-recursive ps-recursive \
-       tags-recursive uninstall-recursive
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-HEADERS = $(noinst_HEADERS)
-RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive        \
-  distclean-recursive maintainer-clean-recursive
-am__recursive_targets = \
-  $(RECURSIVE_TARGETS) \
-  $(RECURSIVE_CLEAN_TARGETS) \
-  $(am__extra_recursive_targets)
-AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \
-       distdir
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-# Read a list of newline-separated strings from the standard input,
-# and print each of them once, without duplicates.  Input order is
-# *not* preserved.
-am__uniquify_input = $(AWK) '\
-  BEGIN { nonempty = 0; } \
-  { items[$$0] = 1; nonempty = 1; } \
-  END { if (nonempty) { for (i in items) print i; }; } \
-'
-# Make sure the list of sources is unique.  This is necessary because,
-# e.g., the same source file might be shared among _SOURCES variables
-# for different programs/libraries.
-am__define_uniq_tagged_files = \
-  list='$(am__tagged_files)'; \
-  unique=`for i in $$list; do \
-    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-  done | $(am__uniquify_input)`
-ETAGS = etags
-CTAGS = ctags
-DIST_SUBDIRS = $(SUBDIRS)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-am__relativize = \
-  dir0=`pwd`; \
-  sed_first='s,^\([^/]*\)/.*$$,\1,'; \
-  sed_rest='s,^[^/]*/*,,'; \
-  sed_last='s,^.*/\([^/]*\)$$,\1,'; \
-  sed_butlast='s,/*[^/]*$$,,'; \
-  while test -n "$$dir1"; do \
-    first=`echo "$$dir1" | sed -e "$$sed_first"`; \
-    if test "$$first" != "."; then \
-      if test "$$first" = ".."; then \
-        dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \
-        dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \
-      else \
-        first2=`echo "$$dir2" | sed -e "$$sed_first"`; \
-        if test "$$first2" = "$$first"; then \
-          dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \
-        else \
-          dir2="../$$dir2"; \
-        fi; \
-        dir0="$$dir0"/"$$first"; \
-      fi; \
-    fi; \
-    dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \
-  done; \
-  reldir="$$dir2"
-pkglibexecdir = @pkglibexecdir@
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
-AR = @AR@
-ARFLAGS = @ARFLAGS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
-BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
-BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
-BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
-BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-GLIBC21 = @GLIBC21@
-GNULIB_BTOWC = @GNULIB_BTOWC@
-GNULIB_IMAXABS = @GNULIB_IMAXABS@
-GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
-GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
-GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
-GNULIB_MBRLEN = @GNULIB_MBRLEN@
-GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
-GNULIB_MBSINIT = @GNULIB_MBSINIT@
-GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
-GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
-GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
-GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
-GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
-GNULIB_WCPCPY = @GNULIB_WCPCPY@
-GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
-GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
-GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
-GNULIB_WCSCAT = @GNULIB_WCSCAT@
-GNULIB_WCSCHR = @GNULIB_WCSCHR@
-GNULIB_WCSCMP = @GNULIB_WCSCMP@
-GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
-GNULIB_WCSCPY = @GNULIB_WCSCPY@
-GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
-GNULIB_WCSDUP = @GNULIB_WCSDUP@
-GNULIB_WCSLEN = @GNULIB_WCSLEN@
-GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
-GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
-GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
-GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
-GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
-GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
-GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
-GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
-GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
-GNULIB_WCSSPN = @GNULIB_WCSSPN@
-GNULIB_WCSSTR = @GNULIB_WCSSTR@
-GNULIB_WCSTOK = @GNULIB_WCSTOK@
-GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
-GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
-GNULIB_WCTOB = @GNULIB_WCTOB@
-GNULIB_WCTRANS = @GNULIB_WCTRANS@
-GNULIB_WCTYPE = @GNULIB_WCTYPE@
-GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
-GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
-GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
-GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
-GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
-GNULIB_WMEMSET = @GNULIB_WMEMSET@
-GREP = @GREP@
-HAVE_BTOWC = @HAVE_BTOWC@
-HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
-HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
-HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
-HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
-HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
-HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
-HAVE_FEATURES_H = @HAVE_FEATURES_H@
-HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
-HAVE_ISWBLANK = @HAVE_ISWBLANK@
-HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
-HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
-HAVE_MBRLEN = @HAVE_MBRLEN@
-HAVE_MBRTOWC = @HAVE_MBRTOWC@
-HAVE_MBSINIT = @HAVE_MBSINIT@
-HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
-HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
-HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
-HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
-HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
-HAVE_STDINT_H = @HAVE_STDINT_H@
-HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
-HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
-HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
-HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
-HAVE_WCHAR_H = @HAVE_WCHAR_H@
-HAVE_WCHAR_T = @HAVE_WCHAR_T@
-HAVE_WCPCPY = @HAVE_WCPCPY@
-HAVE_WCPNCPY = @HAVE_WCPNCPY@
-HAVE_WCRTOMB = @HAVE_WCRTOMB@
-HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
-HAVE_WCSCAT = @HAVE_WCSCAT@
-HAVE_WCSCHR = @HAVE_WCSCHR@
-HAVE_WCSCMP = @HAVE_WCSCMP@
-HAVE_WCSCOLL = @HAVE_WCSCOLL@
-HAVE_WCSCPY = @HAVE_WCSCPY@
-HAVE_WCSCSPN = @HAVE_WCSCSPN@
-HAVE_WCSDUP = @HAVE_WCSDUP@
-HAVE_WCSLEN = @HAVE_WCSLEN@
-HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
-HAVE_WCSNCAT = @HAVE_WCSNCAT@
-HAVE_WCSNCMP = @HAVE_WCSNCMP@
-HAVE_WCSNCPY = @HAVE_WCSNCPY@
-HAVE_WCSNLEN = @HAVE_WCSNLEN@
-HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
-HAVE_WCSPBRK = @HAVE_WCSPBRK@
-HAVE_WCSRCHR = @HAVE_WCSRCHR@
-HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
-HAVE_WCSSPN = @HAVE_WCSSPN@
-HAVE_WCSSTR = @HAVE_WCSSTR@
-HAVE_WCSTOK = @HAVE_WCSTOK@
-HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
-HAVE_WCSXFRM = @HAVE_WCSXFRM@
-HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
-HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
-HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
-HAVE_WINT_T = @HAVE_WINT_T@
-HAVE_WMEMCHR = @HAVE_WMEMCHR@
-HAVE_WMEMCMP = @HAVE_WMEMCMP@
-HAVE_WMEMCPY = @HAVE_WMEMCPY@
-HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
-HAVE_WMEMSET = @HAVE_WMEMSET@
-HAVE__BOOL = @HAVE__BOOL@
-INCLUDE_NEXT = @INCLUDE_NEXT@
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
-INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
-LDFLAGS = @LDFLAGS@
-LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
-LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
-LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
-LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
-NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
-NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
-NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
-NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
-NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
-NEXT_STDDEF_H = @NEXT_STDDEF_H@
-NEXT_STDINT_H = @NEXT_STDINT_H@
-NEXT_WCHAR_H = @NEXT_WCHAR_H@
-NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
-PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
-PRIPTR_PREFIX = @PRIPTR_PREFIX@
-PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
-PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
-RANLIB = @RANLIB@
-REPLACE_BTOWC = @REPLACE_BTOWC@
-REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
-REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
-REPLACE_MBRLEN = @REPLACE_MBRLEN@
-REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
-REPLACE_MBSINIT = @REPLACE_MBSINIT@
-REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
-REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
-REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
-REPLACE_NULL = @REPLACE_NULL@
-REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
-REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
-REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
-REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
-REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
-REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
-REPLACE_WCTOB = @REPLACE_WCTOB@
-REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
-SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
-STDBOOL_H = @STDBOOL_H@
-STDDEF_H = @STDDEF_H@
-STDINT_H = @STDINT_H@
-STRIP = @STRIP@
-UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
-UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
-VERSION = @VERSION@
-WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WINT_T_SUFFIX = @WINT_T_SUFFIX@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-gl_LIBOBJS = @gl_LIBOBJS@
-gl_LTLIBOBJS = @gl_LTLIBOBJS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-lispdir = @lispdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-runstatedir = @runstatedir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-AUTOMAKE_OPTIONS = 1.5 gnits subdir-objects
-SUBDIRS = 
-noinst_HEADERS = 
-noinst_LIBRARIES = libgnu.a
-noinst_LTLIBRARIES = 
-EXTRA_DIST = config.charset ref-add.sin ref-del.sin \
-       $(top_srcdir)/build-aux/snippet/arg-nonnull.h \
-       $(top_srcdir)/build-aux/snippet/c++defs.h \
-       $(top_srcdir)/build-aux/snippet/warn-on-use.h stddef.in.h \
-       stdint.in.h streq.h unitypes.in.h localcharset.h uniwidth.in.h \
-       uniwidth/cjk.h wchar.in.h wctype.in.h wcwidth.c
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-
-# The BUILT_SOURCES created by this Makefile snippet are not used via #include
-# statements but through direct file reference. Therefore this snippet must be
-# present in all Makefile.am that need it. This is ensured by the applicability
-# 'all' defined above.
-BUILT_SOURCES = configmake.h arg-nonnull.h c++defs.h warn-on-use.h \
-       $(STDDEF_H) $(STDINT_H) $(LIBUNISTRING_UNITYPES_H) \
-       $(LIBUNISTRING_UNIWIDTH_H) wchar.h wctype.h
-SUFFIXES = .sed .sin
-MOSTLYCLEANFILES = core *.stackdump arg-nonnull.h arg-nonnull.h-t \
-       c++defs.h c++defs.h-t warn-on-use.h warn-on-use.h-t stddef.h \
-       stddef.h-t stdint.h stdint.h-t unitypes.h unitypes.h-t \
-       uniwidth.h uniwidth.h-t wchar.h wchar.h-t wctype.h wctype.h-t
-MOSTLYCLEANDIRS = 
-CLEANFILES = configmake.h configmake.h-t charset.alias ref-add.sed \
-       ref-del.sed
-DISTCLEANFILES = 
-MAINTAINERCLEANFILES = 
-AM_CPPFLAGS = 
-AM_CFLAGS = 
-libgnu_a_SOURCES = localcharset.h localcharset.c $(am__append_1) \
-       wctype-h.c
-libgnu_a_LIBADD = $(gl_LIBOBJS)
-libgnu_a_DEPENDENCIES = $(gl_LIBOBJS)
-EXTRA_libgnu_a_SOURCES = wcwidth.c
-charset_alias = $(DESTDIR)$(libdir)/charset.alias
-charset_tmp = $(DESTDIR)$(libdir)/charset.tmp
-ARG_NONNULL_H = arg-nonnull.h
-CXXDEFS_H = c++defs.h
-WARN_ON_USE_H = warn-on-use.h
-all: $(BUILT_SOURCES)
-       $(MAKE) $(AM_MAKEFLAGS) all-recursive
-
-.SUFFIXES:
-.SUFFIXES: .sed .sin .c .o .obj
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-       @for dep in $?; do \
-         case '$(am__configure_deps)' in \
-           *$$dep*) \
-             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-               && { if test -f $@; then exit 0; else break; fi; }; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnits lib/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-       @case '$?' in \
-         *config.status*) \
-           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-         *) \
-           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-       esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-
-clean-noinstLIBRARIES:
-       -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES)
-uniwidth/$(am__dirstamp):
-       @$(MKDIR_P) uniwidth
-       @: > uniwidth/$(am__dirstamp)
-uniwidth/$(DEPDIR)/$(am__dirstamp):
-       @$(MKDIR_P) uniwidth/$(DEPDIR)
-       @: > uniwidth/$(DEPDIR)/$(am__dirstamp)
-uniwidth/width.$(OBJEXT): uniwidth/$(am__dirstamp) \
-       uniwidth/$(DEPDIR)/$(am__dirstamp)
-
-libgnu.a: $(libgnu_a_OBJECTS) $(libgnu_a_DEPENDENCIES) $(EXTRA_libgnu_a_DEPENDENCIES) 
-       $(AM_V_at)-rm -f libgnu.a
-       $(AM_V_AR)$(libgnu_a_AR) libgnu.a $(libgnu_a_OBJECTS) $(libgnu_a_LIBADD)
-       $(AM_V_at)$(RANLIB) libgnu.a
-
-clean-noinstLTLIBRARIES:
-       -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES)
-       @list='$(noinst_LTLIBRARIES)'; \
-       locs=`for p in $$list; do echo $$p; done | \
-             sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \
-             sort -u`; \
-       test -z "$$locs" || { \
-         echo rm -f $${locs}; \
-         rm -f $${locs}; \
-       }
-
-mostlyclean-compile:
-       -rm -f *.$(OBJEXT)
-       -rm -f uniwidth/*.$(OBJEXT)
-
-distclean-compile:
-       -rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localcharset.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wctype-h.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/wcwidth.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@uniwidth/$(DEPDIR)/width.Po@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\
-@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $<
-
-.c.obj:
-@am__fastdepCC_TRUE@   $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\
-@am__fastdepCC_TRUE@   $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\
-@am__fastdepCC_TRUE@   $(am__mv) $$depbase.Tpo $$depbase.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@      DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@  $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'`
-
-# This directory's subdirectories are mostly independent; you can cd
-# into them and run 'make' without going through this Makefile.
-# To change the values of 'make' variables: instead of editing Makefiles,
-# (1) if the variable is set in 'config.status', edit 'config.status'
-#     (which will cause the Makefiles to be regenerated when you run 'make');
-# (2) otherwise, pass the desired values on the 'make' command line.
-$(am__recursive_targets):
-       @fail=; \
-       if $(am__make_keepgoing); then \
-         failcom='fail=yes'; \
-       else \
-         failcom='exit 1'; \
-       fi; \
-       dot_seen=no; \
-       target=`echo $@ | sed s/-recursive//`; \
-       case "$@" in \
-         distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \
-         *) list='$(SUBDIRS)' ;; \
-       esac; \
-       for subdir in $$list; do \
-         echo "Making $$target in $$subdir"; \
-         if test "$$subdir" = "."; then \
-           dot_seen=yes; \
-           local_target="$$target-am"; \
-         else \
-           local_target="$$target"; \
-         fi; \
-         ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \
-         || eval $$failcom; \
-       done; \
-       if test "$$dot_seen" = "no"; then \
-         $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \
-       fi; test -z "$$fail"
-
-ID: $(am__tagged_files)
-       $(am__define_uniq_tagged_files); mkid -fID $$unique
-tags: tags-recursive
-TAGS: tags
-
-tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-       set x; \
-       here=`pwd`; \
-       if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \
-         include_option=--etags-include; \
-         empty_fix=.; \
-       else \
-         include_option=--include; \
-         empty_fix=; \
-       fi; \
-       list='$(SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           test ! -f $$subdir/TAGS || \
-             set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \
-         fi; \
-       done; \
-       $(am__define_uniq_tagged_files); \
-       shift; \
-       if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \
-         test -n "$$unique" || unique=$$empty_fix; \
-         if test $$# -gt 0; then \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             "$$@" $$unique; \
-         else \
-           $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-             $$unique; \
-         fi; \
-       fi
-ctags: ctags-recursive
-
-CTAGS: ctags
-ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files)
-       $(am__define_uniq_tagged_files); \
-       test -z "$(CTAGS_ARGS)$$unique" \
-         || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-            $$unique
-
-GTAGS:
-       here=`$(am__cd) $(top_builddir) && pwd` \
-         && $(am__cd) $(top_srcdir) \
-         && gtags -i $(GTAGS_ARGS) "$$here"
-cscopelist: cscopelist-recursive
-
-cscopelist-am: $(am__tagged_files)
-       list='$(am__tagged_files)'; \
-       case "$(srcdir)" in \
-         [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \
-         *) sdir=$(subdir)/$(srcdir) ;; \
-       esac; \
-       for i in $$list; do \
-         if test -f "$$i"; then \
-           echo "$(subdir)/$$i"; \
-         else \
-           echo "$$sdir/$$i"; \
-         fi; \
-       done >> $(top_builddir)/cscope.files
-
-distclean-tags:
-       -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-distdir: $(DISTFILES)
-       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       list='$(DISTFILES)'; \
-         dist_files=`for file in $$list; do echo $$file; done | \
-         sed -e "s|^$$srcdirstrip/||;t" \
-             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-       case $$dist_files in \
-         */*) $(MKDIR_P) `echo "$$dist_files" | \
-                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-                          sort -u` ;; \
-       esac; \
-       for file in $$dist_files; do \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         if test -d $$d/$$file; then \
-           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-           if test -d "$(distdir)/$$file"; then \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-         else \
-           test -f "$(distdir)/$$file" \
-           || cp -p $$d/$$file "$(distdir)/$$file" \
-           || exit 1; \
-         fi; \
-       done
-       @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \
-         if test "$$subdir" = .; then :; else \
-           $(am__make_dryrun) \
-             || test -d "$(distdir)/$$subdir" \
-             || $(MKDIR_P) "$(distdir)/$$subdir" \
-             || exit 1; \
-           dir1=$$subdir; dir2="$(distdir)/$$subdir"; \
-           $(am__relativize); \
-           new_distdir=$$reldir; \
-           dir1=$$subdir; dir2="$(top_distdir)"; \
-           $(am__relativize); \
-           new_top_distdir=$$reldir; \
-           echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \
-           echo "     am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \
-           ($(am__cd) $$subdir && \
-             $(MAKE) $(AM_MAKEFLAGS) \
-               top_distdir="$$new_top_distdir" \
-               distdir="$$new_distdir" \
-               am__remove_distdir=: \
-               am__skip_length_check=: \
-               am__skip_mode_fix=: \
-               distdir) \
-             || exit 1; \
-         fi; \
-       done
-check-am: all-am
-check: $(BUILT_SOURCES)
-       $(MAKE) $(AM_MAKEFLAGS) check-recursive
-all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) all-local
-installdirs: installdirs-recursive
-installdirs-am:
-install: $(BUILT_SOURCES)
-       $(MAKE) $(AM_MAKEFLAGS) install-recursive
-install-exec: install-exec-recursive
-install-data: install-data-recursive
-uninstall: uninstall-recursive
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-recursive
-install-strip:
-       if test -z '$(STRIP)'; then \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-             install; \
-       else \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-       fi
-mostlyclean-generic:
-       -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES)
-
-clean-generic:
-       -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES)
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-       -rm -f uniwidth/$(DEPDIR)/$(am__dirstamp)
-       -rm -f uniwidth/$(am__dirstamp)
-       -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-       -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-       -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES)
-clean: clean-recursive
-
-clean-am: clean-generic clean-noinstLIBRARIES clean-noinstLTLIBRARIES \
-       mostlyclean-am
-
-distclean: distclean-recursive
-       -rm -rf ./$(DEPDIR) uniwidth/$(DEPDIR)
-       -rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-       distclean-tags
-
-dvi: dvi-recursive
-
-dvi-am:
-
-html: html-recursive
-
-html-am:
-
-info: info-recursive
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-recursive
-
-install-dvi-am:
-
-install-exec-am: install-exec-local
-
-install-html: install-html-recursive
-
-install-html-am:
-
-install-info: install-info-recursive
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-recursive
-
-install-pdf-am:
-
-install-ps: install-ps-recursive
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-recursive
-       -rm -rf ./$(DEPDIR) uniwidth/$(DEPDIR)
-       -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-recursive
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-       mostlyclean-local
-
-pdf: pdf-recursive
-
-pdf-am:
-
-ps: ps-recursive
-
-ps-am:
-
-uninstall-am: uninstall-local
-
-.MAKE: $(am__recursive_targets) all check install install-am \
-       install-strip
-
-.PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am all-local \
-       check check-am clean clean-generic clean-noinstLIBRARIES \
-       clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am distclean \
-       distclean-compile distclean-generic distclean-tags distdir dvi \
-       dvi-am html html-am info info-am install install-am \
-       install-data install-data-am install-dvi install-dvi-am \
-       install-exec install-exec-am install-exec-local install-html \
-       install-html-am install-info install-info-am install-man \
-       install-pdf install-pdf-am install-ps install-ps-am \
-       install-strip installcheck installcheck-am installdirs \
-       installdirs-am maintainer-clean maintainer-clean-generic \
-       mostlyclean mostlyclean-compile mostlyclean-generic \
-       mostlyclean-local pdf pdf-am ps ps-am tags tags-am uninstall \
-       uninstall-am uninstall-local
-
-
-# Listed in the same order as the GNU makefile conventions, and
-# provided by autoconf 2.59c+.
-# The Automake-defined pkg* macros are appended, in the order
-# listed in the Automake 1.10a+ documentation.
-configmake.h: Makefile
-       $(AM_V_GEN)rm -f $@-t && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         echo '#define PREFIX "$(prefix)"'; \
-         echo '#define EXEC_PREFIX "$(exec_prefix)"'; \
-         echo '#define BINDIR "$(bindir)"'; \
-         echo '#define SBINDIR "$(sbindir)"'; \
-         echo '#define LIBEXECDIR "$(libexecdir)"'; \
-         echo '#define DATAROOTDIR "$(datarootdir)"'; \
-         echo '#define DATADIR "$(datadir)"'; \
-         echo '#define SYSCONFDIR "$(sysconfdir)"'; \
-         echo '#define SHAREDSTATEDIR "$(sharedstatedir)"'; \
-         echo '#define LOCALSTATEDIR "$(localstatedir)"'; \
-         echo '#define INCLUDEDIR "$(includedir)"'; \
-         echo '#define OLDINCLUDEDIR "$(oldincludedir)"'; \
-         echo '#define DOCDIR "$(docdir)"'; \
-         echo '#define INFODIR "$(infodir)"'; \
-         echo '#define HTMLDIR "$(htmldir)"'; \
-         echo '#define DVIDIR "$(dvidir)"'; \
-         echo '#define PDFDIR "$(pdfdir)"'; \
-         echo '#define PSDIR "$(psdir)"'; \
-         echo '#define LIBDIR "$(libdir)"'; \
-         echo '#define LISPDIR "$(lispdir)"'; \
-         echo '#define LOCALEDIR "$(localedir)"'; \
-         echo '#define MANDIR "$(mandir)"'; \
-         echo '#define MANEXT "$(manext)"'; \
-         echo '#define PKGDATADIR "$(pkgdatadir)"'; \
-         echo '#define PKGINCLUDEDIR "$(pkgincludedir)"'; \
-         echo '#define PKGLIBDIR "$(pkglibdir)"'; \
-         echo '#define PKGLIBEXECDIR "$(pkglibexecdir)"'; \
-       } | sed '/""/d' > $@-t && \
-       mv -f $@-t $@
-
-# We need the following in order to install a simple file in $(libdir)
-# which is shared with other installed packages. We use a list of referencing
-# packages so that "make uninstall" will remove the file if and only if it
-# is not used by another installed package.
-# On systems with glibc-2.1 or newer, the file is redundant, therefore we
-# avoid installing it.
-
-all-local: charset.alias ref-add.sed ref-del.sed
-install-exec-local: install-exec-localcharset
-install-exec-localcharset: all-local
-       if test $(GLIBC21) = no; then \
-         case '$(host_os)' in \
-           darwin[56]*) \
-             need_charset_alias=true ;; \
-           darwin* | cygwin* | mingw* | pw32* | cegcc*) \
-             need_charset_alias=false ;; \
-           *) \
-             need_charset_alias=true ;; \
-         esac ; \
-       else \
-         need_charset_alias=false ; \
-       fi ; \
-       if $$need_charset_alias; then \
-         $(mkinstalldirs) $(DESTDIR)$(libdir) ; \
-       fi ; \
-       if test -f $(charset_alias); then \
-         sed -f ref-add.sed $(charset_alias) > $(charset_tmp) ; \
-         $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-         rm -f $(charset_tmp) ; \
-       else \
-         if $$need_charset_alias; then \
-           sed -f ref-add.sed charset.alias > $(charset_tmp) ; \
-           $(INSTALL_DATA) $(charset_tmp) $(charset_alias) ; \
-           rm -f $(charset_tmp) ; \
-         fi ; \
-       fi
-
-uninstall-local: uninstall-localcharset
-uninstall-localcharset: all-local
-       if test -f $(charset_alias); then \
-         sed -f ref-del.sed $(charset_alias) > $(charset_tmp); \
-         if grep '^# Packages using this file: $$' $(charset_tmp) \
-             > /dev/null; then \
-           rm -f $(charset_alias); \
-         else \
-           $(INSTALL_DATA) $(charset_tmp) $(charset_alias); \
-         fi; \
-         rm -f $(charset_tmp); \
-       fi
-
-charset.alias: config.charset
-       $(AM_V_GEN)rm -f t-$@ $@ && \
-       $(SHELL) $(srcdir)/config.charset '$(host)' > t-$@ && \
-       mv t-$@ $@
-.sin.sed:
-       $(AM_V_GEN)rm -f t-$@ $@ && \
-       sed -e '/^#/d' -e 's/@''PACKAGE''@/$(PACKAGE)/g' $< > t-$@ && \
-       mv t-$@ $@
-# The arg-nonnull.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut
-# off.
-arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       sed -n -e '/GL_ARG_NONNULL/,$$p' \
-         < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \
-         > $@-t && \
-       mv $@-t $@
-# The c++defs.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/c++defs.h, except that it has the copyright header cut off.
-c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       sed -n -e '/_GL_CXXDEFS/,$$p' \
-         < $(top_srcdir)/build-aux/snippet/c++defs.h \
-         > $@-t && \
-       mv $@-t $@
-# The warn-on-use.h that gets inserted into generated .h files is the same as
-# build-aux/snippet/warn-on-use.h, except that it has the copyright header cut
-# off.
-warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       sed -n -e '/^.ifndef/,$$p' \
-         < $(top_srcdir)/build-aux/snippet/warn-on-use.h \
-         > $@-t && \
-       mv $@-t $@
-
-# We need the following in order to create <stddef.h> when the system
-# doesn't have one that works with the given compiler.
-@GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status
-@GL_GENERATE_STDDEF_H_TRUE@    $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_STDDEF_H_TRUE@    { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \
-@GL_GENERATE_STDDEF_H_TRUE@      sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \
-@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \
-@GL_GENERATE_STDDEF_H_TRUE@          -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \
-@GL_GENERATE_STDDEF_H_TRUE@          < $(srcdir)/stddef.in.h; \
-@GL_GENERATE_STDDEF_H_TRUE@    } > $@-t && \
-@GL_GENERATE_STDDEF_H_TRUE@    mv $@-t $@
-@GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status
-@GL_GENERATE_STDDEF_H_FALSE@   rm -f $@
-
-# We need the following in order to create <stdint.h> when the system
-# doesn't have one that works with the given compiler.
-@GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status
-@GL_GENERATE_STDINT_H_TRUE@    $(AM_V_GEN)rm -f $@-t $@ && \
-@GL_GENERATE_STDINT_H_TRUE@    { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-@GL_GENERATE_STDINT_H_TRUE@      sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_LONG_LONG_INT''@/$(HAVE_LONG_LONG_INT)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_UNSIGNED_LONG_LONG_INT''@/$(HAVE_UNSIGNED_LONG_LONG_INT)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \
-@GL_GENERATE_STDINT_H_TRUE@          < $(srcdir)/stdint.in.h; \
-@GL_GENERATE_STDINT_H_TRUE@    } > $@-t && \
-@GL_GENERATE_STDINT_H_TRUE@    mv $@-t $@
-@GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status
-@GL_GENERATE_STDINT_H_FALSE@   rm -f $@
-
-unitypes.h: unitypes.in.h
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/unitypes.in.h; \
-       } > $@-t && \
-       mv -f $@-t $@
-
-uniwidth.h: uniwidth.in.h
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         cat $(srcdir)/uniwidth.in.h; \
-       } > $@-t && \
-       mv -f $@-t $@
-
-# We need the following in order to create <wchar.h> when the system
-# version does not work standalone.
-wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-             -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \
-             -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \
-             -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \
-             -e 's/@''GNULIB_BTOWC''@/$(GNULIB_BTOWC)/g' \
-             -e 's/@''GNULIB_WCTOB''@/$(GNULIB_WCTOB)/g' \
-             -e 's/@''GNULIB_MBSINIT''@/$(GNULIB_MBSINIT)/g' \
-             -e 's/@''GNULIB_MBRTOWC''@/$(GNULIB_MBRTOWC)/g' \
-             -e 's/@''GNULIB_MBRLEN''@/$(GNULIB_MBRLEN)/g' \
-             -e 's/@''GNULIB_MBSRTOWCS''@/$(GNULIB_MBSRTOWCS)/g' \
-             -e 's/@''GNULIB_MBSNRTOWCS''@/$(GNULIB_MBSNRTOWCS)/g' \
-             -e 's/@''GNULIB_WCRTOMB''@/$(GNULIB_WCRTOMB)/g' \
-             -e 's/@''GNULIB_WCSRTOMBS''@/$(GNULIB_WCSRTOMBS)/g' \
-             -e 's/@''GNULIB_WCSNRTOMBS''@/$(GNULIB_WCSNRTOMBS)/g' \
-             -e 's/@''GNULIB_WCWIDTH''@/$(GNULIB_WCWIDTH)/g' \
-             -e 's/@''GNULIB_WMEMCHR''@/$(GNULIB_WMEMCHR)/g' \
-             -e 's/@''GNULIB_WMEMCMP''@/$(GNULIB_WMEMCMP)/g' \
-             -e 's/@''GNULIB_WMEMCPY''@/$(GNULIB_WMEMCPY)/g' \
-             -e 's/@''GNULIB_WMEMMOVE''@/$(GNULIB_WMEMMOVE)/g' \
-             -e 's/@''GNULIB_WMEMSET''@/$(GNULIB_WMEMSET)/g' \
-             -e 's/@''GNULIB_WCSLEN''@/$(GNULIB_WCSLEN)/g' \
-             -e 's/@''GNULIB_WCSNLEN''@/$(GNULIB_WCSNLEN)/g' \
-             -e 's/@''GNULIB_WCSCPY''@/$(GNULIB_WCSCPY)/g' \
-             -e 's/@''GNULIB_WCPCPY''@/$(GNULIB_WCPCPY)/g' \
-             -e 's/@''GNULIB_WCSNCPY''@/$(GNULIB_WCSNCPY)/g' \
-             -e 's/@''GNULIB_WCPNCPY''@/$(GNULIB_WCPNCPY)/g' \
-             -e 's/@''GNULIB_WCSCAT''@/$(GNULIB_WCSCAT)/g' \
-             -e 's/@''GNULIB_WCSNCAT''@/$(GNULIB_WCSNCAT)/g' \
-             -e 's/@''GNULIB_WCSCMP''@/$(GNULIB_WCSCMP)/g' \
-             -e 's/@''GNULIB_WCSNCMP''@/$(GNULIB_WCSNCMP)/g' \
-             -e 's/@''GNULIB_WCSCASECMP''@/$(GNULIB_WCSCASECMP)/g' \
-             -e 's/@''GNULIB_WCSNCASECMP''@/$(GNULIB_WCSNCASECMP)/g' \
-             -e 's/@''GNULIB_WCSCOLL''@/$(GNULIB_WCSCOLL)/g' \
-             -e 's/@''GNULIB_WCSXFRM''@/$(GNULIB_WCSXFRM)/g' \
-             -e 's/@''GNULIB_WCSDUP''@/$(GNULIB_WCSDUP)/g' \
-             -e 's/@''GNULIB_WCSCHR''@/$(GNULIB_WCSCHR)/g' \
-             -e 's/@''GNULIB_WCSRCHR''@/$(GNULIB_WCSRCHR)/g' \
-             -e 's/@''GNULIB_WCSCSPN''@/$(GNULIB_WCSCSPN)/g' \
-             -e 's/@''GNULIB_WCSSPN''@/$(GNULIB_WCSSPN)/g' \
-             -e 's/@''GNULIB_WCSPBRK''@/$(GNULIB_WCSPBRK)/g' \
-             -e 's/@''GNULIB_WCSSTR''@/$(GNULIB_WCSSTR)/g' \
-             -e 's/@''GNULIB_WCSTOK''@/$(GNULIB_WCSTOK)/g' \
-             -e 's/@''GNULIB_WCSWIDTH''@/$(GNULIB_WCSWIDTH)/g' \
-             < $(srcdir)/wchar.in.h | \
-         sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \
-             -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \
-             -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \
-             -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \
-             -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \
-             -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \
-             -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \
-             -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \
-             -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \
-             -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \
-             -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \
-             -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \
-             -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \
-             -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \
-             -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \
-             -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \
-             -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \
-             -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \
-             -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \
-             -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \
-             -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \
-             -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \
-             -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \
-             -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \
-             -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \
-             -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \
-             -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \
-             -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \
-             -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \
-             -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \
-             -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \
-             -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \
-             -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \
-             -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \
-             -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \
-             -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \
-             -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \
-             -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \
-             -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \
-             -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \
-         | \
-         sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \
-             -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \
-             -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \
-             -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \
-             -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \
-             -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \
-             -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \
-             -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \
-             -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \
-             -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \
-             -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \
-             -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \
-             -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \
-             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-             -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \
-             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)'; \
-       } > $@-t && \
-       mv $@-t $@
-
-# We need the following in order to create <wctype.h> when the system
-# doesn't have one that works with the given compiler.
-wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H)
-       $(AM_V_GEN)rm -f $@-t $@ && \
-       { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \
-         sed -e 's|@''GUARD_PREFIX''@|GL|g' \
-             -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \
-             -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \
-             -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \
-             -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \
-             -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \
-             -e 's/@''GNULIB_ISWBLANK''@/$(GNULIB_ISWBLANK)/g' \
-             -e 's/@''GNULIB_WCTYPE''@/$(GNULIB_WCTYPE)/g' \
-             -e 's/@''GNULIB_ISWCTYPE''@/$(GNULIB_ISWCTYPE)/g' \
-             -e 's/@''GNULIB_WCTRANS''@/$(GNULIB_WCTRANS)/g' \
-             -e 's/@''GNULIB_TOWCTRANS''@/$(GNULIB_TOWCTRANS)/g' \
-             -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \
-             -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \
-             -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \
-             -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \
-             -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \
-             -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \
-             -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \
-             -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \
-             -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \
-             -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \
-             < $(srcdir)/wctype.in.h; \
-       } > $@-t && \
-       mv $@-t $@
-
-mostlyclean-local: mostlyclean-generic
-       @for dir in '' $(MOSTLYCLEANDIRS); do \
-         if test -n "$$dir" && test -d $$dir; then \
-           echo "rmdir $$dir"; rmdir $$dir; \
-         fi; \
-       done; \
-       :
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/libs/gnulib/lib/config.charset b/src/libs/gnulib/lib/config.charset
deleted file mode 100644 (file)
index 4e4c7ed..0000000
+++ /dev/null
@@ -1,684 +0,0 @@
-#! /bin/sh
-# Output a system dependent table of character encoding aliases.
-#
-#   Copyright (C) 2000-2004, 2006-2014 Free Software Foundation, Inc.
-#
-#   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, see <http://www.gnu.org/licenses/>.
-#
-# The table consists of lines of the form
-#    ALIAS  CANONICAL
-#
-# ALIAS is the (system dependent) result of "nl_langinfo (CODESET)".
-# ALIAS is compared in a case sensitive way.
-#
-# CANONICAL is the GNU canonical name for this character encoding.
-# It must be an encoding supported by libiconv. Support by GNU libc is
-# also desirable. CANONICAL is case insensitive. Usually an upper case
-# MIME charset name is preferred.
-# The current list of GNU canonical charset names is as follows.
-#
-#       name              MIME?             used by which systems
-#                                    (darwin = Mac OS X, woe32 = native Windows)
-#
-#   ASCII, ANSI_X3.4-1968       glibc solaris freebsd netbsd darwin cygwin
-#   ISO-8859-1              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
-#   ISO-8859-2              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
-#   ISO-8859-3              Y   glibc solaris cygwin
-#   ISO-8859-4              Y   osf solaris freebsd netbsd openbsd darwin
-#   ISO-8859-5              Y   glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin
-#   ISO-8859-6              Y   glibc aix hpux solaris cygwin
-#   ISO-8859-7              Y   glibc aix hpux irix osf solaris netbsd openbsd darwin cygwin
-#   ISO-8859-8              Y   glibc aix hpux osf solaris cygwin
-#   ISO-8859-9              Y   glibc aix hpux irix osf solaris darwin cygwin
-#   ISO-8859-13                 glibc netbsd openbsd darwin cygwin
-#   ISO-8859-14                 glibc cygwin
-#   ISO-8859-15                 glibc aix osf solaris freebsd netbsd openbsd darwin cygwin
-#   KOI8-R                  Y   glibc solaris freebsd netbsd openbsd darwin
-#   KOI8-U                  Y   glibc freebsd netbsd openbsd darwin cygwin
-#   KOI8-T                      glibc
-#   CP437                       dos
-#   CP775                       dos
-#   CP850                       aix osf dos
-#   CP852                       dos
-#   CP855                       dos
-#   CP856                       aix
-#   CP857                       dos
-#   CP861                       dos
-#   CP862                       dos
-#   CP864                       dos
-#   CP865                       dos
-#   CP866                       freebsd netbsd openbsd darwin dos
-#   CP869                       dos
-#   CP874                       woe32 dos
-#   CP922                       aix
-#   CP932                       aix cygwin woe32 dos
-#   CP943                       aix
-#   CP949                       osf darwin woe32 dos
-#   CP950                       woe32 dos
-#   CP1046                      aix
-#   CP1124                      aix
-#   CP1125                      dos
-#   CP1129                      aix
-#   CP1131                      darwin
-#   CP1250                      woe32
-#   CP1251                      glibc solaris netbsd openbsd darwin cygwin woe32
-#   CP1252                      aix woe32
-#   CP1253                      woe32
-#   CP1254                      woe32
-#   CP1255                      glibc woe32
-#   CP1256                      woe32
-#   CP1257                      woe32
-#   GB2312                  Y   glibc aix hpux irix solaris freebsd netbsd darwin
-#   EUC-JP                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin
-#   EUC-KR                  Y   glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin
-#   EUC-TW                      glibc aix hpux irix osf solaris netbsd
-#   BIG5                    Y   glibc aix hpux osf solaris freebsd netbsd darwin cygwin
-#   BIG5-HKSCS                  glibc solaris darwin
-#   GBK                         glibc aix osf solaris darwin cygwin woe32 dos
-#   GB18030                     glibc solaris netbsd darwin
-#   SHIFT_JIS               Y   hpux osf solaris freebsd netbsd darwin
-#   JOHAB                       glibc solaris woe32
-#   TIS-620                     glibc aix hpux osf solaris cygwin
-#   VISCII                  Y   glibc
-#   TCVN5712-1                  glibc
-#   ARMSCII-8                   glibc darwin
-#   GEORGIAN-PS                 glibc cygwin
-#   PT154                       glibc
-#   HP-ROMAN8                   hpux
-#   HP-ARABIC8                  hpux
-#   HP-GREEK8                   hpux
-#   HP-HEBREW8                  hpux
-#   HP-TURKISH8                 hpux
-#   HP-KANA8                    hpux
-#   DEC-KANJI                   osf
-#   DEC-HANYU                   osf
-#   UTF-8                   Y   glibc aix hpux osf solaris netbsd darwin cygwin
-#
-# Note: Names which are not marked as being a MIME name should not be used in
-# Internet protocols for information interchange (mail, news, etc.).
-#
-# Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications
-# must understand both names and treat them as equivalent.
-#
-# The first argument passed to this file is the canonical host specification,
-#    CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM
-# or
-#    CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM
-
-host="$1"
-os=`echo "$host" | sed -e 's/^[^-]*-[^-]*-\(.*\)$/\1/'`
-echo "# This file contains a table of character encoding aliases,"
-echo "# suitable for operating system '${os}'."
-echo "# It was automatically generated from config.charset."
-# List of references, updated during installation:
-echo "# Packages using this file: "
-case "$os" in
-  linux-gnulibc1*)
-    # Linux libc5 doesn't have nl_langinfo(CODESET); therefore
-    # localcharset.c falls back to using the full locale name
-    # from the environment variables.
-    echo "C ASCII"
-    echo "POSIX ASCII"
-    for l in af af_ZA ca ca_ES da da_DK de de_AT de_BE de_CH de_DE de_LU \
-             en en_AU en_BW en_CA en_DK en_GB en_IE en_NZ en_US en_ZA \
-             en_ZW es es_AR es_BO es_CL es_CO es_DO es_EC es_ES es_GT \
-             es_HN es_MX es_PA es_PE es_PY es_SV es_US es_UY es_VE et \
-             et_EE eu eu_ES fi fi_FI fo fo_FO fr fr_BE fr_CA fr_CH fr_FR \
-             fr_LU ga ga_IE gl gl_ES id id_ID in in_ID is is_IS it it_CH \
-             it_IT kl kl_GL nl nl_BE nl_NL no no_NO pt pt_BR pt_PT sv \
-             sv_FI sv_SE; do
-      echo "$l ISO-8859-1"
-      echo "$l.iso-8859-1 ISO-8859-1"
-      echo "$l.iso-8859-15 ISO-8859-15"
-      echo "$l.iso-8859-15@euro ISO-8859-15"
-      echo "$l@euro ISO-8859-15"
-      echo "$l.cp-437 CP437"
-      echo "$l.cp-850 CP850"
-      echo "$l.cp-1252 CP1252"
-      echo "$l.cp-1252@euro CP1252"
-      #echo "$l.atari-st ATARI-ST" # not a commonly used encoding
-      echo "$l.utf-8 UTF-8"
-      echo "$l.utf-8@euro UTF-8"
-    done
-    for l in cs cs_CZ hr hr_HR hu hu_HU pl pl_PL ro ro_RO sk sk_SK sl \
-             sl_SI sr sr_CS sr_YU; do
-      echo "$l ISO-8859-2"
-      echo "$l.iso-8859-2 ISO-8859-2"
-      echo "$l.cp-852 CP852"
-      echo "$l.cp-1250 CP1250"
-      echo "$l.utf-8 UTF-8"
-    done
-    for l in mk mk_MK ru ru_RU; do
-      echo "$l ISO-8859-5"
-      echo "$l.iso-8859-5 ISO-8859-5"
-      echo "$l.koi8-r KOI8-R"
-      echo "$l.cp-866 CP866"
-      echo "$l.cp-1251 CP1251"
-      echo "$l.utf-8 UTF-8"
-    done
-    for l in ar ar_SA; do
-      echo "$l ISO-8859-6"
-      echo "$l.iso-8859-6 ISO-8859-6"
-      echo "$l.cp-864 CP864"
-      #echo "$l.cp-868 CP868" # not a commonly used encoding
-      echo "$l.cp-1256 CP1256"
-      echo "$l.utf-8 UTF-8"
-    done
-    for l in el el_GR gr gr_GR; do
-      echo "$l ISO-8859-7"
-      echo "$l.iso-8859-7 ISO-8859-7"
-      echo "$l.cp-869 CP869"
-      echo "$l.cp-1253 CP1253"
-      echo "$l.cp-1253@euro CP1253"
-      echo "$l.utf-8 UTF-8"
-      echo "$l.utf-8@euro UTF-8"
-    done
-    for l in he he_IL iw iw_IL; do
-      echo "$l ISO-8859-8"
-      echo "$l.iso-8859-8 ISO-8859-8"
-      echo "$l.cp-862 CP862"
-      echo "$l.cp-1255 CP1255"
-      echo "$l.utf-8 UTF-8"
-    done
-    for l in tr tr_TR; do
-      echo "$l ISO-8859-9"
-      echo "$l.iso-8859-9 ISO-8859-9"
-      echo "$l.cp-857 CP857"
-      echo "$l.cp-1254 CP1254"
-      echo "$l.utf-8 UTF-8"
-    done
-    for l in lt lt_LT lv lv_LV; do
-      #echo "$l BALTIC" # not a commonly used encoding, wrong encoding name
-      echo "$l ISO-8859-13"
-    done
-    for l in ru_UA uk uk_UA; do
-      echo "$l KOI8-U"
-    done
-    for l in zh zh_CN; do
-      #echo "$l GB_2312-80" # not a commonly used encoding, wrong encoding name
-      echo "$l GB2312"
-    done
-    for l in ja ja_JP ja_JP.EUC; do
-      echo "$l EUC-JP"
-    done
-    for l in ko ko_KR; do
-      echo "$l EUC-KR"
-    done
-    for l in th th_TH; do
-      echo "$l TIS-620"
-    done
-    for l in fa fa_IR; do
-      #echo "$l ISIRI-3342" # a broken encoding
-      echo "$l.utf-8 UTF-8"
-    done
-    ;;
-  linux* | *-gnu*)
-    # With glibc-2.1 or newer, we don't need any canonicalization,
-    # because glibc has iconv and both glibc and libiconv support all
-    # GNU canonical names directly. Therefore, the Makefile does not
-    # need to install the alias file at all.
-    # The following applies only to glibc-2.0.x and older libcs.
-    echo "ISO_646.IRV:1983 ASCII"
-    ;;
-  aix*)
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-6 ISO-8859-6"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-8 ISO-8859-8"
-    echo "ISO8859-9 ISO-8859-9"
-    echo "ISO8859-15 ISO-8859-15"
-    echo "IBM-850 CP850"
-    echo "IBM-856 CP856"
-    echo "IBM-921 ISO-8859-13"
-    echo "IBM-922 CP922"
-    echo "IBM-932 CP932"
-    echo "IBM-943 CP943"
-    echo "IBM-1046 CP1046"
-    echo "IBM-1124 CP1124"
-    echo "IBM-1129 CP1129"
-    echo "IBM-1252 CP1252"
-    echo "IBM-eucCN GB2312"
-    echo "IBM-eucJP EUC-JP"
-    echo "IBM-eucKR EUC-KR"
-    echo "IBM-eucTW EUC-TW"
-    echo "big5 BIG5"
-    echo "GBK GBK"
-    echo "TIS-620 TIS-620"
-    echo "UTF-8 UTF-8"
-    ;;
-  hpux*)
-    echo "iso88591 ISO-8859-1"
-    echo "iso88592 ISO-8859-2"
-    echo "iso88595 ISO-8859-5"
-    echo "iso88596 ISO-8859-6"
-    echo "iso88597 ISO-8859-7"
-    echo "iso88598 ISO-8859-8"
-    echo "iso88599 ISO-8859-9"
-    echo "iso885915 ISO-8859-15"
-    echo "roman8 HP-ROMAN8"
-    echo "arabic8 HP-ARABIC8"
-    echo "greek8 HP-GREEK8"
-    echo "hebrew8 HP-HEBREW8"
-    echo "turkish8 HP-TURKISH8"
-    echo "kana8 HP-KANA8"
-    echo "tis620 TIS-620"
-    echo "big5 BIG5"
-    echo "eucJP EUC-JP"
-    echo "eucKR EUC-KR"
-    echo "eucTW EUC-TW"
-    echo "hp15CN GB2312"
-    #echo "ccdc ?" # what is this?
-    echo "SJIS SHIFT_JIS"
-    echo "utf8 UTF-8"
-    ;;
-  irix*)
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-9 ISO-8859-9"
-    echo "eucCN GB2312"
-    echo "eucJP EUC-JP"
-    echo "eucKR EUC-KR"
-    echo "eucTW EUC-TW"
-    ;;
-  osf*)
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-4 ISO-8859-4"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-8 ISO-8859-8"
-    echo "ISO8859-9 ISO-8859-9"
-    echo "ISO8859-15 ISO-8859-15"
-    echo "cp850 CP850"
-    echo "big5 BIG5"
-    echo "dechanyu DEC-HANYU"
-    echo "dechanzi GB2312"
-    echo "deckanji DEC-KANJI"
-    echo "deckorean EUC-KR"
-    echo "eucJP EUC-JP"
-    echo "eucKR EUC-KR"
-    echo "eucTW EUC-TW"
-    echo "GBK GBK"
-    echo "KSC5601 CP949"
-    echo "sdeckanji EUC-JP"
-    echo "SJIS SHIFT_JIS"
-    echo "TACTIS TIS-620"
-    echo "UTF-8 UTF-8"
-    ;;
-  solaris*)
-    echo "646 ASCII"
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-3 ISO-8859-3"
-    echo "ISO8859-4 ISO-8859-4"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-6 ISO-8859-6"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-8 ISO-8859-8"
-    echo "ISO8859-9 ISO-8859-9"
-    echo "ISO8859-15 ISO-8859-15"
-    echo "koi8-r KOI8-R"
-    echo "ansi-1251 CP1251"
-    echo "BIG5 BIG5"
-    echo "Big5-HKSCS BIG5-HKSCS"
-    echo "gb2312 GB2312"
-    echo "GBK GBK"
-    echo "GB18030 GB18030"
-    echo "cns11643 EUC-TW"
-    echo "5601 EUC-KR"
-    echo "ko_KR.johap92 JOHAB"
-    echo "eucJP EUC-JP"
-    echo "PCK SHIFT_JIS"
-    echo "TIS620.2533 TIS-620"
-    #echo "sun_eu_greek ?" # what is this?
-    echo "UTF-8 UTF-8"
-    ;;
-  freebsd* | os2*)
-    # FreeBSD 4.2 doesn't have nl_langinfo(CODESET); therefore
-    # localcharset.c falls back to using the full locale name
-    # from the environment variables.
-    # Likewise for OS/2. OS/2 has XFree86 just like FreeBSD. Just
-    # reuse FreeBSD's locale data for OS/2.
-    echo "C ASCII"
-    echo "US-ASCII ASCII"
-    for l in la_LN lt_LN; do
-      echo "$l.ASCII ASCII"
-    done
-    for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
-             fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT la_LN \
-             lt_LN nl_BE nl_NL no_NO pt_PT sv_SE; do
-      echo "$l.ISO_8859-1 ISO-8859-1"
-      echo "$l.DIS_8859-15 ISO-8859-15"
-    done
-    for l in cs_CZ hr_HR hu_HU la_LN lt_LN pl_PL sl_SI; do
-      echo "$l.ISO_8859-2 ISO-8859-2"
-    done
-    for l in la_LN lt_LT; do
-      echo "$l.ISO_8859-4 ISO-8859-4"
-    done
-    for l in ru_RU ru_SU; do
-      echo "$l.KOI8-R KOI8-R"
-      echo "$l.ISO_8859-5 ISO-8859-5"
-      echo "$l.CP866 CP866"
-    done
-    echo "uk_UA.KOI8-U KOI8-U"
-    echo "zh_TW.BIG5 BIG5"
-    echo "zh_TW.Big5 BIG5"
-    echo "zh_CN.EUC GB2312"
-    echo "ja_JP.EUC EUC-JP"
-    echo "ja_JP.SJIS SHIFT_JIS"
-    echo "ja_JP.Shift_JIS SHIFT_JIS"
-    echo "ko_KR.EUC EUC-KR"
-    ;;
-  netbsd*)
-    echo "646 ASCII"
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-4 ISO-8859-4"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-13 ISO-8859-13"
-    echo "ISO8859-15 ISO-8859-15"
-    echo "eucCN GB2312"
-    echo "eucJP EUC-JP"
-    echo "eucKR EUC-KR"
-    echo "eucTW EUC-TW"
-    echo "BIG5 BIG5"
-    echo "SJIS SHIFT_JIS"
-    ;;
-  openbsd*)
-    echo "646 ASCII"
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-4 ISO-8859-4"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-13 ISO-8859-13"
-    echo "ISO8859-15 ISO-8859-15"
-    ;;
-  darwin[56]*)
-    # Darwin 6.8 doesn't have nl_langinfo(CODESET); therefore
-    # localcharset.c falls back to using the full locale name
-    # from the environment variables.
-    echo "C ASCII"
-    for l in en_AU en_CA en_GB en_US la_LN; do
-      echo "$l.US-ASCII ASCII"
-    done
-    for l in da_DK de_AT de_CH de_DE en_AU en_CA en_GB en_US es_ES \
-             fi_FI fr_BE fr_CA fr_CH fr_FR is_IS it_CH it_IT nl_BE \
-             nl_NL no_NO pt_PT sv_SE; do
-      echo "$l ISO-8859-1"
-      echo "$l.ISO8859-1 ISO-8859-1"
-      echo "$l.ISO8859-15 ISO-8859-15"
-    done
-    for l in la_LN; do
-      echo "$l.ISO8859-1 ISO-8859-1"
-      echo "$l.ISO8859-15 ISO-8859-15"
-    done
-    for l in cs_CZ hr_HR hu_HU la_LN pl_PL sl_SI; do
-      echo "$l.ISO8859-2 ISO-8859-2"
-    done
-    for l in la_LN lt_LT; do
-      echo "$l.ISO8859-4 ISO-8859-4"
-    done
-    for l in ru_RU; do
-      echo "$l.KOI8-R KOI8-R"
-      echo "$l.ISO8859-5 ISO-8859-5"
-      echo "$l.CP866 CP866"
-    done
-    for l in bg_BG; do
-      echo "$l.CP1251 CP1251"
-    done
-    echo "uk_UA.KOI8-U KOI8-U"
-    echo "zh_TW.BIG5 BIG5"
-    echo "zh_TW.Big5 BIG5"
-    echo "zh_CN.EUC GB2312"
-    echo "ja_JP.EUC EUC-JP"
-    echo "ja_JP.SJIS SHIFT_JIS"
-    echo "ko_KR.EUC EUC-KR"
-    ;;
-  darwin*)
-    # Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is
-    # useless:
-    # - It returns the empty string when LANG is set to a locale of the
-    #   form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8
-    #   LC_CTYPE file.
-    # - The environment variables LANG, LC_CTYPE, LC_ALL are not set by
-    #   the system; nl_langinfo(CODESET) returns "US-ASCII" in this case.
-    # - The documentation says:
-    #     "... all code that calls BSD system routines should ensure
-    #      that the const *char parameters of these routines are in UTF-8
-    #      encoding. All BSD system functions expect their string
-    #      parameters to be in UTF-8 encoding and nothing else."
-    #   It also says
-    #     "An additional caveat is that string parameters for files,
-    #      paths, and other file-system entities must be in canonical
-    #      UTF-8. In a canonical UTF-8 Unicode string, all decomposable
-    #      characters are decomposed ..."
-    #   but this is not true: You can pass non-decomposed UTF-8 strings
-    #   to file system functions, and it is the OS which will convert
-    #   them to decomposed UTF-8 before accessing the file system.
-    # - The Apple Terminal application displays UTF-8 by default.
-    # - However, other applications are free to use different encodings:
-    #   - xterm uses ISO-8859-1 by default.
-    #   - TextEdit uses MacRoman by default.
-    # We prefer UTF-8 over decomposed UTF-8-MAC because one should
-    # minimize the use of decomposed Unicode. Unfortunately, through the
-    # Darwin file system, decomposed UTF-8 strings are leaked into user
-    # space nevertheless.
-    # Then there are also the locales with encodings other than US-ASCII
-    # and UTF-8. These locales can be occasionally useful to users (e.g.
-    # when grepping through ISO-8859-1 encoded text files), when all their
-    # file names are in US-ASCII.
-    echo "ISO8859-1 ISO-8859-1"
-    echo "ISO8859-2 ISO-8859-2"
-    echo "ISO8859-4 ISO-8859-4"
-    echo "ISO8859-5 ISO-8859-5"
-    echo "ISO8859-7 ISO-8859-7"
-    echo "ISO8859-9 ISO-8859-9"
-    echo "ISO8859-13 ISO-8859-13"
-    echo "ISO8859-15 ISO-8859-15"
-    echo "KOI8-R KOI8-R"
-    echo "KOI8-U KOI8-U"
-    echo "CP866 CP866"
-    echo "CP949 CP949"
-    echo "CP1131 CP1131"
-    echo "CP1251 CP1251"
-    echo "eucCN GB2312"
-    echo "GB2312 GB2312"
-    echo "eucJP EUC-JP"
-    echo "eucKR EUC-KR"
-    echo "Big5 BIG5"
-    echo "Big5HKSCS BIG5-HKSCS"
-    echo "GBK GBK"
-    echo "GB18030 GB18030"
-    echo "SJIS SHIFT_JIS"
-    echo "ARMSCII-8 ARMSCII-8"
-    echo "PT154 PT154"
-    #echo "ISCII-DEV ?"
-    echo "* UTF-8"
-    ;;
-  beos* | haiku*)
-    # BeOS and Haiku have a single locale, and it has UTF-8 encoding.
-    echo "* UTF-8"
-    ;;
-  msdosdjgpp*)
-    # DJGPP 2.03 doesn't have nl_langinfo(CODESET); therefore
-    # localcharset.c falls back to using the full locale name
-    # from the environment variables.
-    echo "#"
-    echo "# The encodings given here may not all be correct."
-    echo "# If you find that the encoding given for your language and"
-    echo "# country is not the one your DOS machine actually uses, just"
-    echo "# correct it in this file, and send a mail to"
-    echo "# Juan Manuel Guerrero <juan.guerrero@gmx.de>"
-    echo "# and Bruno Haible <bruno@clisp.org>."
-    echo "#"
-    echo "C ASCII"
-    # ISO-8859-1 languages
-    echo "ca CP850"
-    echo "ca_ES CP850"
-    echo "da CP865"    # not CP850 ??
-    echo "da_DK CP865" # not CP850 ??
-    echo "de CP850"
-    echo "de_AT CP850"
-    echo "de_CH CP850"
-    echo "de_DE CP850"
-    echo "en CP850"
-    echo "en_AU CP850" # not CP437 ??
-    echo "en_CA CP850"
-    echo "en_GB CP850"
-    echo "en_NZ CP437"
-    echo "en_US CP437"
-    echo "en_ZA CP850" # not CP437 ??
-    echo "es CP850"
-    echo "es_AR CP850"
-    echo "es_BO CP850"
-    echo "es_CL CP850"
-    echo "es_CO CP850"
-    echo "es_CR CP850"
-    echo "es_CU CP850"
-    echo "es_DO CP850"
-    echo "es_EC CP850"
-    echo "es_ES CP850"
-    echo "es_GT CP850"
-    echo "es_HN CP850"
-    echo "es_MX CP850"
-    echo "es_NI CP850"
-    echo "es_PA CP850"
-    echo "es_PY CP850"
-    echo "es_PE CP850"
-    echo "es_SV CP850"
-    echo "es_UY CP850"
-    echo "es_VE CP850"
-    echo "et CP850"
-    echo "et_EE CP850"
-    echo "eu CP850"
-    echo "eu_ES CP850"
-    echo "fi CP850"
-    echo "fi_FI CP850"
-    echo "fr CP850"
-    echo "fr_BE CP850"
-    echo "fr_CA CP850"
-    echo "fr_CH CP850"
-    echo "fr_FR CP850"
-    echo "ga CP850"
-    echo "ga_IE CP850"
-    echo "gd CP850"
-    echo "gd_GB CP850"
-    echo "gl CP850"
-    echo "gl_ES CP850"
-    echo "id CP850"    # not CP437 ??
-    echo "id_ID CP850" # not CP437 ??
-    echo "is CP861"    # not CP850 ??
-    echo "is_IS CP861" # not CP850 ??
-    echo "it CP850"
-    echo "it_CH CP850"
-    echo "it_IT CP850"
-    echo "lt CP775"
-    echo "lt_LT CP775"
-    echo "lv CP775"
-    echo "lv_LV CP775"
-    echo "nb CP865"    # not CP850 ??
-    echo "nb_NO CP865" # not CP850 ??
-    echo "nl CP850"
-    echo "nl_BE CP850"
-    echo "nl_NL CP850"
-    echo "nn CP865"    # not CP850 ??
-    echo "nn_NO CP865" # not CP850 ??
-    echo "no CP865"    # not CP850 ??
-    echo "no_NO CP865" # not CP850 ??
-    echo "pt CP850"
-    echo "pt_BR CP850"
-    echo "pt_PT CP850"
-    echo "sv CP850"
-    echo "sv_SE CP850"
-    # ISO-8859-2 languages
-    echo "cs CP852"
-    echo "cs_CZ CP852"
-    echo "hr CP852"
-    echo "hr_HR CP852"
-    echo "hu CP852"
-    echo "hu_HU CP852"
-    echo "pl CP852"
-    echo "pl_PL CP852"
-    echo "ro CP852"
-    echo "ro_RO CP852"
-    echo "sk CP852"
-    echo "sk_SK CP852"
-    echo "sl CP852"
-    echo "sl_SI CP852"
-    echo "sq CP852"
-    echo "sq_AL CP852"
-    echo "sr CP852"    # CP852 or CP866 or CP855 ??
-    echo "sr_CS CP852" # CP852 or CP866 or CP855 ??
-    echo "sr_YU CP852" # CP852 or CP866 or CP855 ??
-    # ISO-8859-3 languages
-    echo "mt CP850"
-    echo "mt_MT CP850"
-    # ISO-8859-5 languages
-    echo "be CP866"
-    echo "be_BE CP866"
-    echo "bg CP866"    # not CP855 ??
-    echo "bg_BG CP866" # not CP855 ??
-    echo "mk CP866"    # not CP855 ??
-    echo "mk_MK CP866" # not CP855 ??
-    echo "ru CP866"
-    echo "ru_RU CP866"
-    echo "uk CP1125"
-    echo "uk_UA CP1125"
-    # ISO-8859-6 languages
-    echo "ar CP864"
-    echo "ar_AE CP864"
-    echo "ar_DZ CP864"
-    echo "ar_EG CP864"
-    echo "ar_IQ CP864"
-    echo "ar_IR CP864"
-    echo "ar_JO CP864"
-    echo "ar_KW CP864"
-    echo "ar_MA CP864"
-    echo "ar_OM CP864"
-    echo "ar_QA CP864"
-    echo "ar_SA CP864"
-    echo "ar_SY CP864"
-    # ISO-8859-7 languages
-    echo "el CP869"
-    echo "el_GR CP869"
-    # ISO-8859-8 languages
-    echo "he CP862"
-    echo "he_IL CP862"
-    # ISO-8859-9 languages
-    echo "tr CP857"
-    echo "tr_TR CP857"
-    # Japanese
-    echo "ja CP932"
-    echo "ja_JP CP932"
-    # Chinese
-    echo "zh_CN GBK"
-    echo "zh_TW CP950" # not CP938 ??
-    # Korean
-    echo "kr CP949"    # not CP934 ??
-    echo "kr_KR CP949" # not CP934 ??
-    # Thai
-    echo "th CP874"
-    echo "th_TH CP874"
-    # Other
-    echo "eo CP850"
-    echo "eo_EO CP850"
-    ;;
-esac
diff --git a/src/libs/gnulib/lib/intprops.h b/src/libs/gnulib/lib/intprops.h
deleted file mode 100644 (file)
index d0bb7a6..0000000
+++ /dev/null
@@ -1,320 +0,0 @@
-/* intprops.h -- properties of integer types
-
-   Copyright (C) 2001-2005, 2009-2014 Free Software Foundation, Inc.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Paul Eggert.  */
-
-#ifndef _GL_INTPROPS_H
-#define _GL_INTPROPS_H
-
-#include <limits.h>
-
-/* Return an integer value, converted to the same type as the integer
-   expression E after integer type promotion.  V is the unconverted value.  */
-#define _GL_INT_CONVERT(e, v) (0 * (e) + (v))
-
-/* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see
-   <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00406.html>.  */
-#define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v))
-
-/* The extra casts in the following macros work around compiler bugs,
-   e.g., in Cray C 5.0.3.0.  */
-
-/* True if the arithmetic type T is an integer type.  bool counts as
-   an integer.  */
-#define TYPE_IS_INTEGER(t) ((t) 1.5 == 1)
-
-/* True if negative values of the signed integer type T use two's
-   complement, ones' complement, or signed magnitude representation,
-   respectively.  Much GNU code assumes two's complement, but some
-   people like to be portable to all possible C hosts.  */
-#define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1)
-#define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0)
-#define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1)
-
-/* True if the signed integer expression E uses two's complement.  */
-#define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1)
-
-/* True if the arithmetic type T is signed.  */
-#define TYPE_SIGNED(t) (! ((t) 0 < (t) -1))
-
-/* Return 1 if the integer expression E, after integer promotion, has
-   a signed type.  */
-#define _GL_INT_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0)
-
-
-/* Minimum and maximum values for integer types and expressions.  These
-   macros have undefined behavior if T is signed and has padding bits.
-   If this is a problem for you, please let us know how to fix it for
-   your host.  */
-
-/* The maximum and minimum values for the integer type T.  */
-#define TYPE_MINIMUM(t)                                                 \
-  ((t) (! TYPE_SIGNED (t)                                               \
-        ? (t) 0                                                         \
-        : TYPE_SIGNED_MAGNITUDE (t)                                     \
-        ? ~ (t) 0                                                       \
-        : ~ TYPE_MAXIMUM (t)))
-#define TYPE_MAXIMUM(t)                                                 \
-  ((t) (! TYPE_SIGNED (t)                                               \
-        ? (t) -1                                                        \
-        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
-
-/* The maximum and minimum values for the type of the expression E,
-   after integer promotion.  E should not have side effects.  */
-#define _GL_INT_MINIMUM(e)                                              \
-  (_GL_INT_SIGNED (e)                                                   \
-   ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e)         \
-   : _GL_INT_CONVERT (e, 0))
-#define _GL_INT_MAXIMUM(e)                                              \
-  (_GL_INT_SIGNED (e)                                                   \
-   ? _GL_SIGNED_INT_MAXIMUM (e)                                         \
-   : _GL_INT_NEGATE_CONVERT (e, 1))
-#define _GL_SIGNED_INT_MAXIMUM(e)                                       \
-  (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1)
-
-
-/* Return 1 if the __typeof__ keyword works.  This could be done by
-   'configure', but for now it's easier to do it by hand.  */
-#if (2 <= __GNUC__ || defined __IBM__TYPEOF__ \
-     || (0x5110 <= __SUNPRO_C && !__STDC__))
-# define _GL_HAVE___TYPEOF__ 1
-#else
-# define _GL_HAVE___TYPEOF__ 0
-#endif
-
-/* Return 1 if the integer type or expression T might be signed.  Return 0
-   if it is definitely unsigned.  This macro does not evaluate its argument,
-   and expands to an integer constant expression.  */
-#if _GL_HAVE___TYPEOF__
-# define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t))
-#else
-# define _GL_SIGNED_TYPE_OR_EXPR(t) 1
-#endif
-
-/* Bound on length of the string representing an unsigned integer
-   value representable in B bits.  log10 (2.0) < 146/485.  The
-   smallest value of B where this bound is not tight is 2621.  */
-#define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485)
-
-/* Bound on length of the string representing an integer type or expression T.
-   Subtract 1 for the sign bit if T is signed, and then add 1 more for
-   a minus sign if needed.
-
-   Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is
-   signed, this macro may overestimate the true bound by one byte when
-   applied to unsigned types of size 2, 4, 16, ... bytes.  */
-#define INT_STRLEN_BOUND(t)                                     \
-  (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT                 \
-                          - _GL_SIGNED_TYPE_OR_EXPR (t))        \
-   + _GL_SIGNED_TYPE_OR_EXPR (t))
-
-/* Bound on buffer size needed to represent an integer type or expression T,
-   including the terminating null.  */
-#define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1)
-
-
-/* Range overflow checks.
-
-   The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C
-   operators might not yield numerically correct answers due to
-   arithmetic overflow.  They do not rely on undefined or
-   implementation-defined behavior.  Their implementations are simple
-   and straightforward, but they are a bit harder to use than the
-   INT_<op>_OVERFLOW macros described below.
-
-   Example usage:
-
-     long int i = ...;
-     long int j = ...;
-     if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX))
-       printf ("multiply would overflow");
-     else
-       printf ("product is %ld", i * j);
-
-   Restrictions on *_RANGE_OVERFLOW macros:
-
-   These macros do not check for all possible numerical problems or
-   undefined or unspecified behavior: they do not check for division
-   by zero, for bad shift counts, or for shifting negative numbers.
-
-   These macros may evaluate their arguments zero or multiple times,
-   so the arguments should not have side effects.  The arithmetic
-   arguments (including the MIN and MAX arguments) must be of the same
-   integer type after the usual arithmetic conversions, and the type
-   must have minimum value MIN and maximum MAX.  Unsigned types should
-   use a zero MIN of the proper type.
-
-   These macros are tuned for constant MIN and MAX.  For commutative
-   operations such as A + B, they are also tuned for constant B.  */
-
-/* Return 1 if A + B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  */
-#define INT_ADD_RANGE_OVERFLOW(a, b, min, max)          \
-  ((b) < 0                                              \
-   ? (a) < (min) - (b)                                  \
-   : (max) - (b) < (a))
-
-/* Return 1 if A - B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  */
-#define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max)     \
-  ((b) < 0                                              \
-   ? (max) + (b) < (a)                                  \
-   : (a) < (min) + (b))
-
-/* Return 1 if - A would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  */
-#define INT_NEGATE_RANGE_OVERFLOW(a, min, max)          \
-  ((min) < 0                                            \
-   ? (a) < - (max)                                      \
-   : 0 < (a))
-
-/* Return 1 if A * B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  Avoid && and || as they tickle
-   bugs in Sun C 5.11 2010/08/13 and other compilers; see
-   <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00401.html>.  */
-#define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max)     \
-  ((b) < 0                                              \
-   ? ((a) < 0                                           \
-      ? (a) < (max) / (b)                               \
-      : (b) == -1                                       \
-      ? 0                                               \
-      : (min) / (b) < (a))                              \
-   : (b) == 0                                           \
-   ? 0                                                  \
-   : ((a) < 0                                           \
-      ? (a) < (min) / (b)                               \
-      : (max) / (b) < (a)))
-
-/* Return 1 if A / B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  Do not check for division by zero.  */
-#define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max)       \
-  ((min) < 0 && (b) == -1 && (a) < - (max))
-
-/* Return 1 if A % B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  Do not check for division by zero.
-   Mathematically, % should never overflow, but on x86-like hosts
-   INT_MIN % -1 traps, and the C standard permits this, so treat this
-   as an overflow too.  */
-#define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max)    \
-  INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max)
-
-/* Return 1 if A << B would overflow in [MIN,MAX] arithmetic.
-   See above for restrictions.  Here, MIN and MAX are for A only, and B need
-   not be of the same type as the other arguments.  The C standard says that
-   behavior is undefined for shifts unless 0 <= B < wordwidth, and that when
-   A is negative then A << B has undefined behavior and A >> B has
-   implementation-defined behavior, but do not check these other
-   restrictions.  */
-#define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max)   \
-  ((a) < 0                                              \
-   ? (a) < (min) >> (b)                                 \
-   : (max) >> (b) < (a))
-
-
-/* The _GL*_OVERFLOW macros have the same restrictions as the
-   *_RANGE_OVERFLOW macros, except that they do not assume that operands
-   (e.g., A and B) have the same type as MIN and MAX.  Instead, they assume
-   that the result (e.g., A + B) has that type.  */
-#define _GL_ADD_OVERFLOW(a, b, min, max)                                \
-  ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max)                  \
-   : (a) < 0 ? (b) <= (a) + (b)                                         \
-   : (b) < 0 ? (a) <= (a) + (b)                                         \
-   : (a) + (b) < (b))
-#define _GL_SUBTRACT_OVERFLOW(a, b, min, max)                           \
-  ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max)             \
-   : (a) < 0 ? 1                                                        \
-   : (b) < 0 ? (a) - (b) <= (a)                                         \
-   : (a) < (b))
-#define _GL_MULTIPLY_OVERFLOW(a, b, min, max)                           \
-  (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a))))       \
-   || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max))
-#define _GL_DIVIDE_OVERFLOW(a, b, min, max)                             \
-  ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max)  \
-   : (a) < 0 ? (b) <= (a) + (b) - 1                                     \
-   : (b) < 0 && (a) + (b) <= (a))
-#define _GL_REMAINDER_OVERFLOW(a, b, min, max)                          \
-  ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max)  \
-   : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b)                     \
-   : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max))
-
-/* Return a nonzero value if A is a mathematical multiple of B, where
-   A is unsigned, B is negative, and MAX is the maximum value of A's
-   type.  A's type must be the same as (A % B)'s type.  Normally (A %
-   -B == 0) suffices, but things get tricky if -B would overflow.  */
-#define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max)                            \
-  (((b) < -_GL_SIGNED_INT_MAXIMUM (b)                                   \
-    ? (_GL_SIGNED_INT_MAXIMUM (b) == (max)                              \
-       ? (a)                                                            \
-       : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1))   \
-    : (a) % - (b))                                                      \
-   == 0)
-
-
-/* Integer overflow checks.
-
-   The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators
-   might not yield numerically correct answers due to arithmetic overflow.
-   They work correctly on all known practical hosts, and do not rely
-   on undefined behavior due to signed arithmetic overflow.
-
-   Example usage:
-
-     long int i = ...;
-     long int j = ...;
-     if (INT_MULTIPLY_OVERFLOW (i, j))
-       printf ("multiply would overflow");
-     else
-       printf ("product is %ld", i * j);
-
-   These macros do not check for all possible numerical problems or
-   undefined or unspecified behavior: they do not check for division
-   by zero, for bad shift counts, or for shifting negative numbers.
-
-   These macros may evaluate their arguments zero or multiple times, so the
-   arguments should not have side effects.
-
-   These macros are tuned for their last argument being a constant.
-
-   Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B,
-   A % B, and A << B would overflow, respectively.  */
-
-#define INT_ADD_OVERFLOW(a, b) \
-  _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW)
-#define INT_SUBTRACT_OVERFLOW(a, b) \
-  _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW)
-#define INT_NEGATE_OVERFLOW(a) \
-  INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
-#define INT_MULTIPLY_OVERFLOW(a, b) \
-  _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW)
-#define INT_DIVIDE_OVERFLOW(a, b) \
-  _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW)
-#define INT_REMAINDER_OVERFLOW(a, b) \
-  _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW)
-#define INT_LEFT_SHIFT_OVERFLOW(a, b) \
-  INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \
-                                 _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a))
-
-/* Return 1 if the expression A <op> B would overflow,
-   where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test,
-   assuming MIN and MAX are the minimum and maximum for the result type.
-   Arguments should be free of side effects.  */
-#define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow)        \
-  op_result_overflow (a, b,                                     \
-                      _GL_INT_MINIMUM (0 * (b) + (a)),          \
-                      _GL_INT_MAXIMUM (0 * (b) + (a)))
-
-#endif /* _GL_INTPROPS_H */
diff --git a/src/libs/gnulib/lib/inttypes.in.h b/src/libs/gnulib/lib/inttypes.in.h
deleted file mode 100644 (file)
index 2219b74..0000000
+++ /dev/null
@@ -1,1130 +0,0 @@
-/* Copyright (C) 2006-2014 Free Software Foundation, Inc.
-   Written by Paul Eggert, Bruno Haible, Derek Price.
-   This file is part of gnulib.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-/*
- * ISO C 99 <inttypes.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/inttypes.h.html>
- */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-@PRAGMA_COLUMNS@
-
-/* Include the original <inttypes.h> if it exists, and if this file
-   has not been included yet or if this file includes gnulib stdint.h
-   which in turn includes this file.
-   The include_next requires a split double-inclusion guard.  */
-#if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-# if @HAVE_INTTYPES_H@
-
-   /* Some pre-C++11 <stdint.h> implementations need this.  */
-#  if defined __cplusplus && ! defined __STDC_FORMAT_MACROS
-#   define __STDC_FORMAT_MACROS 1
-#  endif
-
-#  @INCLUDE_NEXT@ @NEXT_INTTYPES_H@
-# endif
-#endif
-
-#if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-#define INTTYPES_H
-
-/* Include <stdint.h> or the gnulib replacement.
-   But avoid namespace pollution on glibc systems.  */
-#ifndef __GLIBC__
-# include <stdint.h>
-#endif
-/* Get CHAR_BIT.  */
-#include <limits.h>
-
-#if !(INT_MIN == INT32_MIN && INT_MAX == INT32_MAX)
-# error "This file assumes that 'int' has exactly 32 bits. Please report your platform and compiler to <bug-gnulib@gnu.org>."
-#endif
-
-/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
-
-/* The definition of _GL_ARG_NONNULL is copied here.  */
-
-/* The definition of _GL_WARN_ON_USE is copied here.  */
-
-/* 7.8.1 Macros for format specifiers */
-
-#if defined _TNS_R_TARGET
-   /* Tandem NonStop R series and compatible platforms released before
-      July 2005 support %Ld but not %lld.  */
-# define _LONG_LONG_FORMAT_PREFIX "L"
-#else
-# define _LONG_LONG_FORMAT_PREFIX "ll"
-#endif
-
-#if !defined PRId8 || @PRI_MACROS_BROKEN@
-# undef PRId8
-# ifdef INT8_MAX
-#  define PRId8 "d"
-# endif
-#endif
-#if !defined PRIi8 || @PRI_MACROS_BROKEN@
-# undef PRIi8
-# ifdef INT8_MAX
-#  define PRIi8 "i"
-# endif
-#endif
-#if !defined PRIo8 || @PRI_MACROS_BROKEN@
-# undef PRIo8
-# ifdef UINT8_MAX
-#  define PRIo8 "o"
-# endif
-#endif
-#if !defined PRIu8 || @PRI_MACROS_BROKEN@
-# undef PRIu8
-# ifdef UINT8_MAX
-#  define PRIu8 "u"
-# endif
-#endif
-#if !defined PRIx8 || @PRI_MACROS_BROKEN@
-# undef PRIx8
-# ifdef UINT8_MAX
-#  define PRIx8 "x"
-# endif
-#endif
-#if !defined PRIX8 || @PRI_MACROS_BROKEN@
-# undef PRIX8
-# ifdef UINT8_MAX
-#  define PRIX8 "X"
-# endif
-#endif
-#if !defined PRId16 || @PRI_MACROS_BROKEN@
-# undef PRId16
-# ifdef INT16_MAX
-#  define PRId16 "d"
-# endif
-#endif
-#if !defined PRIi16 || @PRI_MACROS_BROKEN@
-# undef PRIi16
-# ifdef INT16_MAX
-#  define PRIi16 "i"
-# endif
-#endif
-#if !defined PRIo16 || @PRI_MACROS_BROKEN@
-# undef PRIo16
-# ifdef UINT16_MAX
-#  define PRIo16 "o"
-# endif
-#endif
-#if !defined PRIu16 || @PRI_MACROS_BROKEN@
-# undef PRIu16
-# ifdef UINT16_MAX
-#  define PRIu16 "u"
-# endif
-#endif
-#if !defined PRIx16 || @PRI_MACROS_BROKEN@
-# undef PRIx16
-# ifdef UINT16_MAX
-#  define PRIx16 "x"
-# endif
-#endif
-#if !defined PRIX16 || @PRI_MACROS_BROKEN@
-# undef PRIX16
-# ifdef UINT16_MAX
-#  define PRIX16 "X"
-# endif
-#endif
-#if !defined PRId32 || @PRI_MACROS_BROKEN@
-# undef PRId32
-# ifdef INT32_MAX
-#  define PRId32 "d"
-# endif
-#endif
-#if !defined PRIi32 || @PRI_MACROS_BROKEN@
-# undef PRIi32
-# ifdef INT32_MAX
-#  define PRIi32 "i"
-# endif
-#endif
-#if !defined PRIo32 || @PRI_MACROS_BROKEN@
-# undef PRIo32
-# ifdef UINT32_MAX
-#  define PRIo32 "o"
-# endif
-#endif
-#if !defined PRIu32 || @PRI_MACROS_BROKEN@
-# undef PRIu32
-# ifdef UINT32_MAX
-#  define PRIu32 "u"
-# endif
-#endif
-#if !defined PRIx32 || @PRI_MACROS_BROKEN@
-# undef PRIx32
-# ifdef UINT32_MAX
-#  define PRIx32 "x"
-# endif
-#endif
-#if !defined PRIX32 || @PRI_MACROS_BROKEN@
-# undef PRIX32
-# ifdef UINT32_MAX
-#  define PRIX32 "X"
-# endif
-#endif
-#ifdef INT64_MAX
-# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
-#  define _PRI64_PREFIX "l"
-# elif defined _MSC_VER || defined __MINGW32__
-#  define _PRI64_PREFIX "I64"
-# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-#  define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX
-# endif
-# if !defined PRId64 || @PRI_MACROS_BROKEN@
-#  undef PRId64
-#  define PRId64 _PRI64_PREFIX "d"
-# endif
-# if !defined PRIi64 || @PRI_MACROS_BROKEN@
-#  undef PRIi64
-#  define PRIi64 _PRI64_PREFIX "i"
-# endif
-#endif
-#ifdef UINT64_MAX
-# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
-#  define _PRIu64_PREFIX "l"
-# elif defined _MSC_VER || defined __MINGW32__
-#  define _PRIu64_PREFIX "I64"
-# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-#  define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX
-# endif
-# if !defined PRIo64 || @PRI_MACROS_BROKEN@
-#  undef PRIo64
-#  define PRIo64 _PRIu64_PREFIX "o"
-# endif
-# if !defined PRIu64 || @PRI_MACROS_BROKEN@
-#  undef PRIu64
-#  define PRIu64 _PRIu64_PREFIX "u"
-# endif
-# if !defined PRIx64 || @PRI_MACROS_BROKEN@
-#  undef PRIx64
-#  define PRIx64 _PRIu64_PREFIX "x"
-# endif
-# if !defined PRIX64 || @PRI_MACROS_BROKEN@
-#  undef PRIX64
-#  define PRIX64 _PRIu64_PREFIX "X"
-# endif
-#endif
-
-#if !defined PRIdLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIdLEAST8
-# define PRIdLEAST8 "d"
-#endif
-#if !defined PRIiLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIiLEAST8
-# define PRIiLEAST8 "i"
-#endif
-#if !defined PRIoLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIoLEAST8
-# define PRIoLEAST8 "o"
-#endif
-#if !defined PRIuLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIuLEAST8
-# define PRIuLEAST8 "u"
-#endif
-#if !defined PRIxLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIxLEAST8
-# define PRIxLEAST8 "x"
-#endif
-#if !defined PRIXLEAST8 || @PRI_MACROS_BROKEN@
-# undef PRIXLEAST8
-# define PRIXLEAST8 "X"
-#endif
-#if !defined PRIdLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIdLEAST16
-# define PRIdLEAST16 "d"
-#endif
-#if !defined PRIiLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIiLEAST16
-# define PRIiLEAST16 "i"
-#endif
-#if !defined PRIoLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIoLEAST16
-# define PRIoLEAST16 "o"
-#endif
-#if !defined PRIuLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIuLEAST16
-# define PRIuLEAST16 "u"
-#endif
-#if !defined PRIxLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIxLEAST16
-# define PRIxLEAST16 "x"
-#endif
-#if !defined PRIXLEAST16 || @PRI_MACROS_BROKEN@
-# undef PRIXLEAST16
-# define PRIXLEAST16 "X"
-#endif
-#if !defined PRIdLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIdLEAST32
-# define PRIdLEAST32 "d"
-#endif
-#if !defined PRIiLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIiLEAST32
-# define PRIiLEAST32 "i"
-#endif
-#if !defined PRIoLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIoLEAST32
-# define PRIoLEAST32 "o"
-#endif
-#if !defined PRIuLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIuLEAST32
-# define PRIuLEAST32 "u"
-#endif
-#if !defined PRIxLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIxLEAST32
-# define PRIxLEAST32 "x"
-#endif
-#if !defined PRIXLEAST32 || @PRI_MACROS_BROKEN@
-# undef PRIXLEAST32
-# define PRIXLEAST32 "X"
-#endif
-#ifdef INT64_MAX
-# if !defined PRIdLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIdLEAST64
-#  define PRIdLEAST64 PRId64
-# endif
-# if !defined PRIiLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIiLEAST64
-#  define PRIiLEAST64 PRIi64
-# endif
-#endif
-#ifdef UINT64_MAX
-# if !defined PRIoLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIoLEAST64
-#  define PRIoLEAST64 PRIo64
-# endif
-# if !defined PRIuLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIuLEAST64
-#  define PRIuLEAST64 PRIu64
-# endif
-# if !defined PRIxLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIxLEAST64
-#  define PRIxLEAST64 PRIx64
-# endif
-# if !defined PRIXLEAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIXLEAST64
-#  define PRIXLEAST64 PRIX64
-# endif
-#endif
-
-#if !defined PRIdFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIdFAST8
-# if INT_FAST8_MAX > INT32_MAX
-#  define PRIdFAST8 PRId64
-# else
-#  define PRIdFAST8 "d"
-# endif
-#endif
-#if !defined PRIiFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIiFAST8
-# if INT_FAST8_MAX > INT32_MAX
-#  define PRIiFAST8 PRIi64
-# else
-#  define PRIiFAST8 "i"
-# endif
-#endif
-#if !defined PRIoFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIoFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define PRIoFAST8 PRIo64
-# else
-#  define PRIoFAST8 "o"
-# endif
-#endif
-#if !defined PRIuFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIuFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define PRIuFAST8 PRIu64
-# else
-#  define PRIuFAST8 "u"
-# endif
-#endif
-#if !defined PRIxFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIxFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define PRIxFAST8 PRIx64
-# else
-#  define PRIxFAST8 "x"
-# endif
-#endif
-#if !defined PRIXFAST8 || @PRI_MACROS_BROKEN@
-# undef PRIXFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define PRIXFAST8 PRIX64
-# else
-#  define PRIXFAST8 "X"
-# endif
-#endif
-#if !defined PRIdFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIdFAST16
-# if INT_FAST16_MAX > INT32_MAX
-#  define PRIdFAST16 PRId64
-# else
-#  define PRIdFAST16 "d"
-# endif
-#endif
-#if !defined PRIiFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIiFAST16
-# if INT_FAST16_MAX > INT32_MAX
-#  define PRIiFAST16 PRIi64
-# else
-#  define PRIiFAST16 "i"
-# endif
-#endif
-#if !defined PRIoFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIoFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define PRIoFAST16 PRIo64
-# else
-#  define PRIoFAST16 "o"
-# endif
-#endif
-#if !defined PRIuFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIuFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define PRIuFAST16 PRIu64
-# else
-#  define PRIuFAST16 "u"
-# endif
-#endif
-#if !defined PRIxFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIxFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define PRIxFAST16 PRIx64
-# else
-#  define PRIxFAST16 "x"
-# endif
-#endif
-#if !defined PRIXFAST16 || @PRI_MACROS_BROKEN@
-# undef PRIXFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define PRIXFAST16 PRIX64
-# else
-#  define PRIXFAST16 "X"
-# endif
-#endif
-#if !defined PRIdFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIdFAST32
-# if INT_FAST32_MAX > INT32_MAX
-#  define PRIdFAST32 PRId64
-# else
-#  define PRIdFAST32 "d"
-# endif
-#endif
-#if !defined PRIiFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIiFAST32
-# if INT_FAST32_MAX > INT32_MAX
-#  define PRIiFAST32 PRIi64
-# else
-#  define PRIiFAST32 "i"
-# endif
-#endif
-#if !defined PRIoFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIoFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define PRIoFAST32 PRIo64
-# else
-#  define PRIoFAST32 "o"
-# endif
-#endif
-#if !defined PRIuFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIuFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define PRIuFAST32 PRIu64
-# else
-#  define PRIuFAST32 "u"
-# endif
-#endif
-#if !defined PRIxFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIxFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define PRIxFAST32 PRIx64
-# else
-#  define PRIxFAST32 "x"
-# endif
-#endif
-#if !defined PRIXFAST32 || @PRI_MACROS_BROKEN@
-# undef PRIXFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define PRIXFAST32 PRIX64
-# else
-#  define PRIXFAST32 "X"
-# endif
-#endif
-#ifdef INT64_MAX
-# if !defined PRIdFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIdFAST64
-#  define PRIdFAST64 PRId64
-# endif
-# if !defined PRIiFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIiFAST64
-#  define PRIiFAST64 PRIi64
-# endif
-#endif
-#ifdef UINT64_MAX
-# if !defined PRIoFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIoFAST64
-#  define PRIoFAST64 PRIo64
-# endif
-# if !defined PRIuFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIuFAST64
-#  define PRIuFAST64 PRIu64
-# endif
-# if !defined PRIxFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIxFAST64
-#  define PRIxFAST64 PRIx64
-# endif
-# if !defined PRIXFAST64 || @PRI_MACROS_BROKEN@
-#  undef PRIXFAST64
-#  define PRIXFAST64 PRIX64
-# endif
-#endif
-
-#if !defined PRIdMAX || @PRI_MACROS_BROKEN@
-# undef PRIdMAX
-# if @INT32_MAX_LT_INTMAX_MAX@
-#  define PRIdMAX PRId64
-# else
-#  define PRIdMAX "ld"
-# endif
-#endif
-#if !defined PRIiMAX || @PRI_MACROS_BROKEN@
-# undef PRIiMAX
-# if @INT32_MAX_LT_INTMAX_MAX@
-#  define PRIiMAX PRIi64
-# else
-#  define PRIiMAX "li"
-# endif
-#endif
-#if !defined PRIoMAX || @PRI_MACROS_BROKEN@
-# undef PRIoMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define PRIoMAX PRIo64
-# else
-#  define PRIoMAX "lo"
-# endif
-#endif
-#if !defined PRIuMAX || @PRI_MACROS_BROKEN@
-# undef PRIuMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define PRIuMAX PRIu64
-# else
-#  define PRIuMAX "lu"
-# endif
-#endif
-#if !defined PRIxMAX || @PRI_MACROS_BROKEN@
-# undef PRIxMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define PRIxMAX PRIx64
-# else
-#  define PRIxMAX "lx"
-# endif
-#endif
-#if !defined PRIXMAX || @PRI_MACROS_BROKEN@
-# undef PRIXMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define PRIXMAX PRIX64
-# else
-#  define PRIXMAX "lX"
-# endif
-#endif
-
-#if !defined PRIdPTR || @PRI_MACROS_BROKEN@
-# undef PRIdPTR
-# ifdef INTPTR_MAX
-#  define PRIdPTR @PRIPTR_PREFIX@ "d"
-# endif
-#endif
-#if !defined PRIiPTR || @PRI_MACROS_BROKEN@
-# undef PRIiPTR
-# ifdef INTPTR_MAX
-#  define PRIiPTR @PRIPTR_PREFIX@ "i"
-# endif
-#endif
-#if !defined PRIoPTR || @PRI_MACROS_BROKEN@
-# undef PRIoPTR
-# ifdef UINTPTR_MAX
-#  define PRIoPTR @PRIPTR_PREFIX@ "o"
-# endif
-#endif
-#if !defined PRIuPTR || @PRI_MACROS_BROKEN@
-# undef PRIuPTR
-# ifdef UINTPTR_MAX
-#  define PRIuPTR @PRIPTR_PREFIX@ "u"
-# endif
-#endif
-#if !defined PRIxPTR || @PRI_MACROS_BROKEN@
-# undef PRIxPTR
-# ifdef UINTPTR_MAX
-#  define PRIxPTR @PRIPTR_PREFIX@ "x"
-# endif
-#endif
-#if !defined PRIXPTR || @PRI_MACROS_BROKEN@
-# undef PRIXPTR
-# ifdef UINTPTR_MAX
-#  define PRIXPTR @PRIPTR_PREFIX@ "X"
-# endif
-#endif
-
-#if !defined SCNd8 || @PRI_MACROS_BROKEN@
-# undef SCNd8
-# ifdef INT8_MAX
-#  define SCNd8 "hhd"
-# endif
-#endif
-#if !defined SCNi8 || @PRI_MACROS_BROKEN@
-# undef SCNi8
-# ifdef INT8_MAX
-#  define SCNi8 "hhi"
-# endif
-#endif
-#if !defined SCNo8 || @PRI_MACROS_BROKEN@
-# undef SCNo8
-# ifdef UINT8_MAX
-#  define SCNo8 "hho"
-# endif
-#endif
-#if !defined SCNu8 || @PRI_MACROS_BROKEN@
-# undef SCNu8
-# ifdef UINT8_MAX
-#  define SCNu8 "hhu"
-# endif
-#endif
-#if !defined SCNx8 || @PRI_MACROS_BROKEN@
-# undef SCNx8
-# ifdef UINT8_MAX
-#  define SCNx8 "hhx"
-# endif
-#endif
-#if !defined SCNd16 || @PRI_MACROS_BROKEN@
-# undef SCNd16
-# ifdef INT16_MAX
-#  define SCNd16 "hd"
-# endif
-#endif
-#if !defined SCNi16 || @PRI_MACROS_BROKEN@
-# undef SCNi16
-# ifdef INT16_MAX
-#  define SCNi16 "hi"
-# endif
-#endif
-#if !defined SCNo16 || @PRI_MACROS_BROKEN@
-# undef SCNo16
-# ifdef UINT16_MAX
-#  define SCNo16 "ho"
-# endif
-#endif
-#if !defined SCNu16 || @PRI_MACROS_BROKEN@
-# undef SCNu16
-# ifdef UINT16_MAX
-#  define SCNu16 "hu"
-# endif
-#endif
-#if !defined SCNx16 || @PRI_MACROS_BROKEN@
-# undef SCNx16
-# ifdef UINT16_MAX
-#  define SCNx16 "hx"
-# endif
-#endif
-#if !defined SCNd32 || @PRI_MACROS_BROKEN@
-# undef SCNd32
-# ifdef INT32_MAX
-#  define SCNd32 "d"
-# endif
-#endif
-#if !defined SCNi32 || @PRI_MACROS_BROKEN@
-# undef SCNi32
-# ifdef INT32_MAX
-#  define SCNi32 "i"
-# endif
-#endif
-#if !defined SCNo32 || @PRI_MACROS_BROKEN@
-# undef SCNo32
-# ifdef UINT32_MAX
-#  define SCNo32 "o"
-# endif
-#endif
-#if !defined SCNu32 || @PRI_MACROS_BROKEN@
-# undef SCNu32
-# ifdef UINT32_MAX
-#  define SCNu32 "u"
-# endif
-#endif
-#if !defined SCNx32 || @PRI_MACROS_BROKEN@
-# undef SCNx32
-# ifdef UINT32_MAX
-#  define SCNx32 "x"
-# endif
-#endif
-#ifdef INT64_MAX
-# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@)
-#  define _SCN64_PREFIX "l"
-# elif defined _MSC_VER || defined __MINGW32__
-#  define _SCN64_PREFIX "I64"
-# elif @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-#  define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX
-# endif
-# if !defined SCNd64 || @PRI_MACROS_BROKEN@
-#  undef SCNd64
-#  define SCNd64 _SCN64_PREFIX "d"
-# endif
-# if !defined SCNi64 || @PRI_MACROS_BROKEN@
-#  undef SCNi64
-#  define SCNi64 _SCN64_PREFIX "i"
-# endif
-#endif
-#ifdef UINT64_MAX
-# if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@)
-#  define _SCNu64_PREFIX "l"
-# elif defined _MSC_VER || defined __MINGW32__
-#  define _SCNu64_PREFIX "I64"
-# elif @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-#  define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX
-# endif
-# if !defined SCNo64 || @PRI_MACROS_BROKEN@
-#  undef SCNo64
-#  define SCNo64 _SCNu64_PREFIX "o"
-# endif
-# if !defined SCNu64 || @PRI_MACROS_BROKEN@
-#  undef SCNu64
-#  define SCNu64 _SCNu64_PREFIX "u"
-# endif
-# if !defined SCNx64 || @PRI_MACROS_BROKEN@
-#  undef SCNx64
-#  define SCNx64 _SCNu64_PREFIX "x"
-# endif
-#endif
-
-#if !defined SCNdLEAST8 || @PRI_MACROS_BROKEN@
-# undef SCNdLEAST8
-# define SCNdLEAST8 "hhd"
-#endif
-#if !defined SCNiLEAST8 || @PRI_MACROS_BROKEN@
-# undef SCNiLEAST8
-# define SCNiLEAST8 "hhi"
-#endif
-#if !defined SCNoLEAST8 || @PRI_MACROS_BROKEN@
-# undef SCNoLEAST8
-# define SCNoLEAST8 "hho"
-#endif
-#if !defined SCNuLEAST8 || @PRI_MACROS_BROKEN@
-# undef SCNuLEAST8
-# define SCNuLEAST8 "hhu"
-#endif
-#if !defined SCNxLEAST8 || @PRI_MACROS_BROKEN@
-# undef SCNxLEAST8
-# define SCNxLEAST8 "hhx"
-#endif
-#if !defined SCNdLEAST16 || @PRI_MACROS_BROKEN@
-# undef SCNdLEAST16
-# define SCNdLEAST16 "hd"
-#endif
-#if !defined SCNiLEAST16 || @PRI_MACROS_BROKEN@
-# undef SCNiLEAST16
-# define SCNiLEAST16 "hi"
-#endif
-#if !defined SCNoLEAST16 || @PRI_MACROS_BROKEN@
-# undef SCNoLEAST16
-# define SCNoLEAST16 "ho"
-#endif
-#if !defined SCNuLEAST16 || @PRI_MACROS_BROKEN@
-# undef SCNuLEAST16
-# define SCNuLEAST16 "hu"
-#endif
-#if !defined SCNxLEAST16 || @PRI_MACROS_BROKEN@
-# undef SCNxLEAST16
-# define SCNxLEAST16 "hx"
-#endif
-#if !defined SCNdLEAST32 || @PRI_MACROS_BROKEN@
-# undef SCNdLEAST32
-# define SCNdLEAST32 "d"
-#endif
-#if !defined SCNiLEAST32 || @PRI_MACROS_BROKEN@
-# undef SCNiLEAST32
-# define SCNiLEAST32 "i"
-#endif
-#if !defined SCNoLEAST32 || @PRI_MACROS_BROKEN@
-# undef SCNoLEAST32
-# define SCNoLEAST32 "o"
-#endif
-#if !defined SCNuLEAST32 || @PRI_MACROS_BROKEN@
-# undef SCNuLEAST32
-# define SCNuLEAST32 "u"
-#endif
-#if !defined SCNxLEAST32 || @PRI_MACROS_BROKEN@
-# undef SCNxLEAST32
-# define SCNxLEAST32 "x"
-#endif
-#ifdef INT64_MAX
-# if !defined SCNdLEAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNdLEAST64
-#  define SCNdLEAST64 SCNd64
-# endif
-# if !defined SCNiLEAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNiLEAST64
-#  define SCNiLEAST64 SCNi64
-# endif
-#endif
-#ifdef UINT64_MAX
-# if !defined SCNoLEAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNoLEAST64
-#  define SCNoLEAST64 SCNo64
-# endif
-# if !defined SCNuLEAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNuLEAST64
-#  define SCNuLEAST64 SCNu64
-# endif
-# if !defined SCNxLEAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNxLEAST64
-#  define SCNxLEAST64 SCNx64
-# endif
-#endif
-
-#if !defined SCNdFAST8 || @PRI_MACROS_BROKEN@
-# undef SCNdFAST8
-# if INT_FAST8_MAX > INT32_MAX
-#  define SCNdFAST8 SCNd64
-# elif INT_FAST8_MAX == 0x7fff
-#  define SCNdFAST8 "hd"
-# elif INT_FAST8_MAX == 0x7f
-#  define SCNdFAST8 "hhd"
-# else
-#  define SCNdFAST8 "d"
-# endif
-#endif
-#if !defined SCNiFAST8 || @PRI_MACROS_BROKEN@
-# undef SCNiFAST8
-# if INT_FAST8_MAX > INT32_MAX
-#  define SCNiFAST8 SCNi64
-# elif INT_FAST8_MAX == 0x7fff
-#  define SCNiFAST8 "hi"
-# elif INT_FAST8_MAX == 0x7f
-#  define SCNiFAST8 "hhi"
-# else
-#  define SCNiFAST8 "i"
-# endif
-#endif
-#if !defined SCNoFAST8 || @PRI_MACROS_BROKEN@
-# undef SCNoFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define SCNoFAST8 SCNo64
-# elif UINT_FAST8_MAX == 0xffff
-#  define SCNoFAST8 "ho"
-# elif UINT_FAST8_MAX == 0xff
-#  define SCNoFAST8 "hho"
-# else
-#  define SCNoFAST8 "o"
-# endif
-#endif
-#if !defined SCNuFAST8 || @PRI_MACROS_BROKEN@
-# undef SCNuFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define SCNuFAST8 SCNu64
-# elif UINT_FAST8_MAX == 0xffff
-#  define SCNuFAST8 "hu"
-# elif UINT_FAST8_MAX == 0xff
-#  define SCNuFAST8 "hhu"
-# else
-#  define SCNuFAST8 "u"
-# endif
-#endif
-#if !defined SCNxFAST8 || @PRI_MACROS_BROKEN@
-# undef SCNxFAST8
-# if UINT_FAST8_MAX > UINT32_MAX
-#  define SCNxFAST8 SCNx64
-# elif UINT_FAST8_MAX == 0xffff
-#  define SCNxFAST8 "hx"
-# elif UINT_FAST8_MAX == 0xff
-#  define SCNxFAST8 "hhx"
-# else
-#  define SCNxFAST8 "x"
-# endif
-#endif
-#if !defined SCNdFAST16 || @PRI_MACROS_BROKEN@
-# undef SCNdFAST16
-# if INT_FAST16_MAX > INT32_MAX
-#  define SCNdFAST16 SCNd64
-# elif INT_FAST16_MAX == 0x7fff
-#  define SCNdFAST16 "hd"
-# else
-#  define SCNdFAST16 "d"
-# endif
-#endif
-#if !defined SCNiFAST16 || @PRI_MACROS_BROKEN@
-# undef SCNiFAST16
-# if INT_FAST16_MAX > INT32_MAX
-#  define SCNiFAST16 SCNi64
-# elif INT_FAST16_MAX == 0x7fff
-#  define SCNiFAST16 "hi"
-# else
-#  define SCNiFAST16 "i"
-# endif
-#endif
-#if !defined SCNoFAST16 || @PRI_MACROS_BROKEN@
-# undef SCNoFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define SCNoFAST16 SCNo64
-# elif UINT_FAST16_MAX == 0xffff
-#  define SCNoFAST16 "ho"
-# else
-#  define SCNoFAST16 "o"
-# endif
-#endif
-#if !defined SCNuFAST16 || @PRI_MACROS_BROKEN@
-# undef SCNuFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define SCNuFAST16 SCNu64
-# elif UINT_FAST16_MAX == 0xffff
-#  define SCNuFAST16 "hu"
-# else
-#  define SCNuFAST16 "u"
-# endif
-#endif
-#if !defined SCNxFAST16 || @PRI_MACROS_BROKEN@
-# undef SCNxFAST16
-# if UINT_FAST16_MAX > UINT32_MAX
-#  define SCNxFAST16 SCNx64
-# elif UINT_FAST16_MAX == 0xffff
-#  define SCNxFAST16 "hx"
-# else
-#  define SCNxFAST16 "x"
-# endif
-#endif
-#if !defined SCNdFAST32 || @PRI_MACROS_BROKEN@
-# undef SCNdFAST32
-# if INT_FAST32_MAX > INT32_MAX
-#  define SCNdFAST32 SCNd64
-# else
-#  define SCNdFAST32 "d"
-# endif
-#endif
-#if !defined SCNiFAST32 || @PRI_MACROS_BROKEN@
-# undef SCNiFAST32
-# if INT_FAST32_MAX > INT32_MAX
-#  define SCNiFAST32 SCNi64
-# else
-#  define SCNiFAST32 "i"
-# endif
-#endif
-#if !defined SCNoFAST32 || @PRI_MACROS_BROKEN@
-# undef SCNoFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define SCNoFAST32 SCNo64
-# else
-#  define SCNoFAST32 "o"
-# endif
-#endif
-#if !defined SCNuFAST32 || @PRI_MACROS_BROKEN@
-# undef SCNuFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define SCNuFAST32 SCNu64
-# else
-#  define SCNuFAST32 "u"
-# endif
-#endif
-#if !defined SCNxFAST32 || @PRI_MACROS_BROKEN@
-# undef SCNxFAST32
-# if UINT_FAST32_MAX > UINT32_MAX
-#  define SCNxFAST32 SCNx64
-# else
-#  define SCNxFAST32 "x"
-# endif
-#endif
-#ifdef INT64_MAX
-# if !defined SCNdFAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNdFAST64
-#  define SCNdFAST64 SCNd64
-# endif
-# if !defined SCNiFAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNiFAST64
-#  define SCNiFAST64 SCNi64
-# endif
-#endif
-#ifdef UINT64_MAX
-# if !defined SCNoFAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNoFAST64
-#  define SCNoFAST64 SCNo64
-# endif
-# if !defined SCNuFAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNuFAST64
-#  define SCNuFAST64 SCNu64
-# endif
-# if !defined SCNxFAST64 || @PRI_MACROS_BROKEN@
-#  undef SCNxFAST64
-#  define SCNxFAST64 SCNx64
-# endif
-#endif
-
-#if !defined SCNdMAX || @PRI_MACROS_BROKEN@
-# undef SCNdMAX
-# if @INT32_MAX_LT_INTMAX_MAX@
-#  define SCNdMAX SCNd64
-# else
-#  define SCNdMAX "ld"
-# endif
-#endif
-#if !defined SCNiMAX || @PRI_MACROS_BROKEN@
-# undef SCNiMAX
-# if @INT32_MAX_LT_INTMAX_MAX@
-#  define SCNiMAX SCNi64
-# else
-#  define SCNiMAX "li"
-# endif
-#endif
-#if !defined SCNoMAX || @PRI_MACROS_BROKEN@
-# undef SCNoMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define SCNoMAX SCNo64
-# else
-#  define SCNoMAX "lo"
-# endif
-#endif
-#if !defined SCNuMAX || @PRI_MACROS_BROKEN@
-# undef SCNuMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define SCNuMAX SCNu64
-# else
-#  define SCNuMAX "lu"
-# endif
-#endif
-#if !defined SCNxMAX || @PRI_MACROS_BROKEN@
-# undef SCNxMAX
-# if @UINT32_MAX_LT_UINTMAX_MAX@
-#  define SCNxMAX SCNx64
-# else
-#  define SCNxMAX "lx"
-# endif
-#endif
-
-#if !defined SCNdPTR || @PRI_MACROS_BROKEN@
-# undef SCNdPTR
-# ifdef INTPTR_MAX
-#  define SCNdPTR @PRIPTR_PREFIX@ "d"
-# endif
-#endif
-#if !defined SCNiPTR || @PRI_MACROS_BROKEN@
-# undef SCNiPTR
-# ifdef INTPTR_MAX
-#  define SCNiPTR @PRIPTR_PREFIX@ "i"
-# endif
-#endif
-#if !defined SCNoPTR || @PRI_MACROS_BROKEN@
-# undef SCNoPTR
-# ifdef UINTPTR_MAX
-#  define SCNoPTR @PRIPTR_PREFIX@ "o"
-# endif
-#endif
-#if !defined SCNuPTR || @PRI_MACROS_BROKEN@
-# undef SCNuPTR
-# ifdef UINTPTR_MAX
-#  define SCNuPTR @PRIPTR_PREFIX@ "u"
-# endif
-#endif
-#if !defined SCNxPTR || @PRI_MACROS_BROKEN@
-# undef SCNxPTR
-# ifdef UINTPTR_MAX
-#  define SCNxPTR @PRIPTR_PREFIX@ "x"
-# endif
-#endif
-
-/* 7.8.2 Functions for greatest-width integer types */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if @GNULIB_IMAXABS@
-# if !@HAVE_DECL_IMAXABS@
-extern intmax_t imaxabs (intmax_t);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef imaxabs
-# if HAVE_RAW_DECL_IMAXABS
-_GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - "
-                 "use gnulib module imaxabs for portability");
-# endif
-#endif
-
-#if @GNULIB_IMAXDIV@
-# if !@HAVE_DECL_IMAXDIV@
-#  if !GNULIB_defined_imaxdiv_t
-typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t;
-#   define GNULIB_defined_imaxdiv_t 1
-#  endif
-extern imaxdiv_t imaxdiv (intmax_t, intmax_t);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef imaxdiv
-# if HAVE_RAW_DECL_IMAXDIV
-_GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - "
-                 "use gnulib module imaxdiv for portability");
-# endif
-#endif
-
-#if @GNULIB_STRTOIMAX@
-# if @REPLACE_STRTOIMAX@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef strtoimax
-#   define strtoimax rpl_strtoimax
-#  endif
-_GL_FUNCDECL_RPL (strtoimax, intmax_t,
-                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
-_GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *, char **, int));
-# else
-#  if !@HAVE_DECL_STRTOIMAX@
-#   undef strtoimax
-_GL_FUNCDECL_SYS (strtoimax, intmax_t,
-                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
-#  endif
-_GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *, char **, int));
-# endif
-_GL_CXXALIASWARN (strtoimax);
-#elif defined GNULIB_POSIXCHECK
-# undef strtoimax
-# if HAVE_RAW_DECL_STRTOIMAX
-_GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - "
-                 "use gnulib module strtoimax for portability");
-# endif
-#endif
-
-#if @GNULIB_STRTOUMAX@
-# if !@HAVE_DECL_STRTOUMAX@
-#  undef strtoumax
-_GL_FUNCDECL_SYS (strtoumax, uintmax_t,
-                  (const char *, char **, int) _GL_ARG_NONNULL ((1)));
-# endif
-_GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *, char **, int));
-_GL_CXXALIASWARN (strtoumax);
-#elif defined GNULIB_POSIXCHECK
-# undef strtoumax
-# if HAVE_RAW_DECL_STRTOUMAX
-_GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - "
-                 "use gnulib module strtoumax for portability");
-# endif
-#endif
-
-/* Don't bother defining or declaring wcstoimax and wcstoumax, since
-   wide-character functions like this are hardly ever useful.  */
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */
diff --git a/src/libs/gnulib/lib/localcharset.c b/src/libs/gnulib/lib/localcharset.c
deleted file mode 100644 (file)
index 1c17af0..0000000
+++ /dev/null
@@ -1,579 +0,0 @@
-/* Determine a canonical name for the current locale's character encoding.
-
-   Copyright (C) 2000-2006, 2008-2014 Free Software Foundation, Inc.
-
-   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, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Bruno Haible <bruno@clisp.org>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "localcharset.h"
-
-#include <fcntl.h>
-#include <stddef.h>
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET
-# define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */
-#endif
-
-#if defined _WIN32 || defined __WIN32__
-# define WINDOWS_NATIVE
-# include <locale.h>
-#endif
-
-#if defined __EMX__
-/* Assume EMX program runs on OS/2, even if compiled under DOS.  */
-# ifndef OS2
-#  define OS2
-# endif
-#endif
-
-#if !defined WINDOWS_NATIVE
-# include <unistd.h>
-# if HAVE_LANGINFO_CODESET
-#  include <langinfo.h>
-# else
-#  if 0 /* see comment below */
-#   include <locale.h>
-#  endif
-# endif
-# ifdef __CYGWIN__
-#  define WIN32_LEAN_AND_MEAN
-#  include <windows.h>
-# endif
-#elif defined WINDOWS_NATIVE
-# define WIN32_LEAN_AND_MEAN
-# include <windows.h>
-#endif
-#if defined OS2
-# define INCL_DOS
-# include <os2.h>
-#endif
-
-/* For MB_CUR_MAX_L */
-#if defined DARWIN7
-# include <xlocale.h>
-#endif
-
-#if ENABLE_RELOCATABLE
-# include "relocatable.h"
-#else
-# define relocate(pathname) (pathname)
-#endif
-
-/* Get LIBDIR.  */
-#ifndef LIBDIR
-# include "configmake.h"
-#endif
-
-/* Define O_NOFOLLOW to 0 on platforms where it does not exist.  */
-#ifndef O_NOFOLLOW
-# define O_NOFOLLOW 0
-#endif
-
-#if defined _WIN32 || defined __WIN32__ || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__
-  /* Native Windows, Cygwin, OS/2, DOS */
-# define ISSLASH(C) ((C) == '/' || (C) == '\\')
-#endif
-
-#ifndef DIRECTORY_SEPARATOR
-# define DIRECTORY_SEPARATOR '/'
-#endif
-
-#ifndef ISSLASH
-# define ISSLASH(C) ((C) == DIRECTORY_SEPARATOR)
-#endif
-
-#if HAVE_DECL_GETC_UNLOCKED
-# undef getc
-# define getc getc_unlocked
-#endif
-
-/* The following static variable is declared 'volatile' to avoid a
-   possible multithread problem in the function get_charset_aliases. If we
-   are running in a threaded environment, and if two threads initialize
-   'charset_aliases' simultaneously, both will produce the same value,
-   and everything will be ok if the two assignments to 'charset_aliases'
-   are atomic. But I don't know what will happen if the two assignments mix.  */
-#if __STDC__ != 1
-# define volatile /* empty */
-#endif
-/* Pointer to the contents of the charset.alias file, if it has already been
-   read, else NULL.  Its format is:
-   ALIAS_1 '\0' CANONICAL_1 '\0' ... ALIAS_n '\0' CANONICAL_n '\0' '\0'  */
-static const char * volatile charset_aliases;
-
-/* Return a pointer to the contents of the charset.alias file.  */
-static const char *
-get_charset_aliases (void)
-{
-  const char *cp;
-
-  cp = charset_aliases;
-  if (cp == NULL)
-    {
-#if !(defined DARWIN7 || defined VMS || defined WINDOWS_NATIVE || defined __CYGWIN__)
-      const char *dir;
-      const char *base = "charset.alias";
-      char *file_name;
-
-      /* Make it possible to override the charset.alias location.  This is
-         necessary for running the testsuite before "make install".  */
-      dir = getenv ("CHARSETALIASDIR");
-      if (dir == NULL || dir[0] == '\0')
-        dir = relocate (LIBDIR);
-
-      /* Concatenate dir and base into freshly allocated file_name.  */
-      {
-        size_t dir_len = strlen (dir);
-        size_t base_len = strlen (base);
-        int add_slash = (dir_len > 0 && !ISSLASH (dir[dir_len - 1]));
-        file_name = (char *) malloc (dir_len + add_slash + base_len + 1);
-        if (file_name != NULL)
-          {
-            memcpy (file_name, dir, dir_len);
-            if (add_slash)
-              file_name[dir_len] = DIRECTORY_SEPARATOR;
-            memcpy (file_name + dir_len + add_slash, base, base_len + 1);
-          }
-      }
-
-      if (file_name == NULL)
-        /* Out of memory.  Treat the file as empty.  */
-        cp = "";
-      else
-        {
-          int fd;
-
-          /* Open the file.  Reject symbolic links on platforms that support
-             O_NOFOLLOW.  This is a security feature.  Without it, an attacker
-             could retrieve parts of the contents (namely, the tail of the
-             first line that starts with "* ") of an arbitrary file by placing
-             a symbolic link to that file under the name "charset.alias" in
-             some writable directory and defining the environment variable
-             CHARSETALIASDIR to point to that directory.  */
-          fd = open (file_name,
-                     O_RDONLY | (HAVE_WORKING_O_NOFOLLOW ? O_NOFOLLOW : 0));
-          if (fd < 0)
-            /* File not found.  Treat it as empty.  */
-            cp = "";
-          else
-            {
-              FILE *fp;
-
-              fp = fdopen (fd, "r");
-              if (fp == NULL)
-                {
-                  /* Out of memory.  Treat the file as empty.  */
-                  close (fd);
-                  cp = "";
-                }
-              else
-                {
-                  /* Parse the file's contents.  */
-                  char *res_ptr = NULL;
-                  size_t res_size = 0;
-
-                  for (;;)
-                    {
-                      int c;
-                      char buf1[50+1];
-                      char buf2[50+1];
-                      size_t l1, l2;
-                      char *old_res_ptr;
-
-                      c = getc (fp);
-                      if (c == EOF)
-                        break;
-                      if (c == '\n' || c == ' ' || c == '\t')
-                        continue;
-                      if (c == '#')
-                        {
-                          /* Skip comment, to end of line.  */
-                          do
-                            c = getc (fp);
-                          while (!(c == EOF || c == '\n'));
-                          if (c == EOF)
-                            break;
-                          continue;
-                        }
-                      ungetc (c, fp);
-                      if (fscanf (fp, "%50s %50s", buf1, buf2) < 2)
-                        break;
-                      l1 = strlen (buf1);
-                      l2 = strlen (buf2);
-                      old_res_ptr = res_ptr;
-                      if (res_size == 0)
-                        {
-                          res_size = l1 + 1 + l2 + 1;
-                          res_ptr = (char *) malloc (res_size + 1);
-                        }
-                      else
-                        {
-                          res_size += l1 + 1 + l2 + 1;
-                          res_ptr = (char *) realloc (res_ptr, res_size + 1);
-                        }
-                      if (res_ptr == NULL)
-                        {
-                          /* Out of memory. */
-                          res_size = 0;
-                          free (old_res_ptr);
-                          break;
-                        }
-                      strcpy (res_ptr + res_size - (l2 + 1) - (l1 + 1), buf1);
-                      strcpy (res_ptr + res_size - (l2 + 1), buf2);
-                    }
-                  fclose (fp);
-                  if (res_size == 0)
-                    cp = "";
-                  else
-                    {
-                      *(res_ptr + res_size) = '\0';
-                      cp = res_ptr;
-                    }
-                }
-            }
-
-          free (file_name);
-        }
-
-#else
-
-# if defined DARWIN7
-      /* To avoid the trouble of installing a file that is shared by many
-         GNU packages -- many packaging systems have problems with this --,
-         simply inline the aliases here.  */
-      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
-           "ISO8859-2" "\0" "ISO-8859-2" "\0"
-           "ISO8859-4" "\0" "ISO-8859-4" "\0"
-           "ISO8859-5" "\0" "ISO-8859-5" "\0"
-           "ISO8859-7" "\0" "ISO-8859-7" "\0"
-           "ISO8859-9" "\0" "ISO-8859-9" "\0"
-           "ISO8859-13" "\0" "ISO-8859-13" "\0"
-           "ISO8859-15" "\0" "ISO-8859-15" "\0"
-           "KOI8-R" "\0" "KOI8-R" "\0"
-           "KOI8-U" "\0" "KOI8-U" "\0"
-           "CP866" "\0" "CP866" "\0"
-           "CP949" "\0" "CP949" "\0"
-           "CP1131" "\0" "CP1131" "\0"
-           "CP1251" "\0" "CP1251" "\0"
-           "eucCN" "\0" "GB2312" "\0"
-           "GB2312" "\0" "GB2312" "\0"
-           "eucJP" "\0" "EUC-JP" "\0"
-           "eucKR" "\0" "EUC-KR" "\0"
-           "Big5" "\0" "BIG5" "\0"
-           "Big5HKSCS" "\0" "BIG5-HKSCS" "\0"
-           "GBK" "\0" "GBK" "\0"
-           "GB18030" "\0" "GB18030" "\0"
-           "SJIS" "\0" "SHIFT_JIS" "\0"
-           "ARMSCII-8" "\0" "ARMSCII-8" "\0"
-           "PT154" "\0" "PT154" "\0"
-         /*"ISCII-DEV" "\0" "?" "\0"*/
-           "*" "\0" "UTF-8" "\0";
-# endif
-
-# if defined VMS
-      /* To avoid the troubles of an extra file charset.alias_vms in the
-         sources of many GNU packages, simply inline the aliases here.  */
-      /* The list of encodings is taken from the OpenVMS 7.3-1 documentation
-         "Compaq C Run-Time Library Reference Manual for OpenVMS systems"
-         section 10.7 "Handling Different Character Sets".  */
-      cp = "ISO8859-1" "\0" "ISO-8859-1" "\0"
-           "ISO8859-2" "\0" "ISO-8859-2" "\0"
-           "ISO8859-5" "\0" "ISO-8859-5" "\0"
-           "ISO8859-7" "\0" "ISO-8859-7" "\0"
-           "ISO8859-8" "\0" "ISO-8859-8" "\0"
-           "ISO8859-9" "\0" "ISO-8859-9" "\0"
-           /* Japanese */
-           "eucJP" "\0" "EUC-JP" "\0"
-           "SJIS" "\0" "SHIFT_JIS" "\0"
-           "DECKANJI" "\0" "DEC-KANJI" "\0"
-           "SDECKANJI" "\0" "EUC-JP" "\0"
-           /* Chinese */
-           "eucTW" "\0" "EUC-TW" "\0"
-           "DECHANYU" "\0" "DEC-HANYU" "\0"
-           "DECHANZI" "\0" "GB2312" "\0"
-           /* Korean */
-           "DECKOREAN" "\0" "EUC-KR" "\0";
-# endif
-
-# if defined WINDOWS_NATIVE || defined __CYGWIN__
-      /* To avoid the troubles of installing a separate file in the same
-         directory as the DLL and of retrieving the DLL's directory at
-         runtime, simply inline the aliases here.  */
-
-      cp = "CP936" "\0" "GBK" "\0"
-           "CP1361" "\0" "JOHAB" "\0"
-           "CP20127" "\0" "ASCII" "\0"
-           "CP20866" "\0" "KOI8-R" "\0"
-           "CP20936" "\0" "GB2312" "\0"
-           "CP21866" "\0" "KOI8-RU" "\0"
-           "CP28591" "\0" "ISO-8859-1" "\0"
-           "CP28592" "\0" "ISO-8859-2" "\0"
-           "CP28593" "\0" "ISO-8859-3" "\0"
-           "CP28594" "\0" "ISO-8859-4" "\0"
-           "CP28595" "\0" "ISO-8859-5" "\0"
-           "CP28596" "\0" "ISO-8859-6" "\0"
-           "CP28597" "\0" "ISO-8859-7" "\0"
-           "CP28598" "\0" "ISO-8859-8" "\0"
-           "CP28599" "\0" "ISO-8859-9" "\0"
-           "CP28605" "\0" "ISO-8859-15" "\0"
-           "CP38598" "\0" "ISO-8859-8" "\0"
-           "CP51932" "\0" "EUC-JP" "\0"
-           "CP51936" "\0" "GB2312" "\0"
-           "CP51949" "\0" "EUC-KR" "\0"
-           "CP51950" "\0" "EUC-TW" "\0"
-           "CP54936" "\0" "GB18030" "\0"
-           "CP65001" "\0" "UTF-8" "\0";
-# endif
-#endif
-
-      charset_aliases = cp;
-    }
-
-  return cp;
-}
-
-/* Determine the current locale's character encoding, and canonicalize it
-   into one of the canonical names listed in config.charset.
-   The result must not be freed; it is statically allocated.
-   If the canonical name cannot be determined, the result is a non-canonical
-   name.  */
-
-#ifdef STATIC
-STATIC
-#endif
-const char *
-locale_charset (void)
-{
-  const char *codeset;
-  const char *aliases;
-
-#if !(defined WINDOWS_NATIVE || defined OS2)
-
-# if HAVE_LANGINFO_CODESET
-
-  /* Most systems support nl_langinfo (CODESET) nowadays.  */
-  codeset = nl_langinfo (CODESET);
-
-#  ifdef __CYGWIN__
-  /* Cygwin < 1.7 does not have locales.  nl_langinfo (CODESET) always
-     returns "US-ASCII".  Return the suffix of the locale name from the
-     environment variables (if present) or the codepage as a number.  */
-  if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0)
-    {
-      const char *locale;
-      static char buf[2 + 10 + 1];
-
-      locale = getenv ("LC_ALL");
-      if (locale == NULL || locale[0] == '\0')
-        {
-          locale = getenv ("LC_CTYPE");
-          if (locale == NULL || locale[0] == '\0')
-            locale = getenv ("LANG");
-        }
-      if (locale != NULL && locale[0] != '\0')
-        {
-          /* If the locale name contains an encoding after the dot, return
-             it.  */
-          const char *dot = strchr (locale, '.');
-
-          if (dot != NULL)
-            {
-              const char *modifier;
-
-              dot++;
-              /* Look for the possible @... trailer and remove it, if any.  */
-              modifier = strchr (dot, '@');
-              if (modifier == NULL)
-                return dot;
-              if (modifier - dot < sizeof (buf))
-                {
-                  memcpy (buf, dot, modifier - dot);
-                  buf [modifier - dot] = '\0';
-                  return buf;
-                }
-            }
-        }
-
-      /* The Windows API has a function returning the locale's codepage as a
-         number: GetACP().  This encoding is used by Cygwin, unless the user
-         has set the environment variable CYGWIN=codepage:oem (which very few
-         people do).
-         Output directed to console windows needs to be converted (to
-         GetOEMCP() if the console is using a raster font, or to
-         GetConsoleOutputCP() if it is using a TrueType font).  Cygwin does
-         this conversion transparently (see winsup/cygwin/fhandler_console.cc),
-         converting to GetConsoleOutputCP().  This leads to correct results,
-         except when SetConsoleOutputCP has been called and a raster font is
-         in use.  */
-      sprintf (buf, "CP%u", GetACP ());
-      codeset = buf;
-    }
-#  endif
-
-# else
-
-  /* On old systems which lack it, use setlocale or getenv.  */
-  const char *locale = NULL;
-
-  /* But most old systems don't have a complete set of locales.  Some
-     (like SunOS 4 or DJGPP) have only the C locale.  Therefore we don't
-     use setlocale here; it would return "C" when it doesn't support the
-     locale name the user has set.  */
-#  if 0
-  locale = setlocale (LC_CTYPE, NULL);
-#  endif
-  if (locale == NULL || locale[0] == '\0')
-    {
-      locale = getenv ("LC_ALL");
-      if (locale == NULL || locale[0] == '\0')
-        {
-          locale = getenv ("LC_CTYPE");
-          if (locale == NULL || locale[0] == '\0')
-            locale = getenv ("LANG");
-        }
-    }
-
-  /* On some old systems, one used to set locale = "iso8859_1". On others,
-     you set it to "language_COUNTRY.charset". In any case, we resolve it
-     through the charset.alias file.  */
-  codeset = locale;
-
-# endif
-
-#elif defined WINDOWS_NATIVE
-
-  static char buf[2 + 10 + 1];
-
-  /* The Windows API has a function returning the locale's codepage as
-     a number, but the value doesn't change according to what the
-     'setlocale' call specified.  So we use it as a last resort, in
-     case the string returned by 'setlocale' doesn't specify the
-     codepage.  */
-  char *current_locale = setlocale (LC_ALL, NULL);
-  char *pdot;
-
-  /* If they set different locales for different categories,
-     'setlocale' will return a semi-colon separated list of locale
-     values.  To make sure we use the correct one, we choose LC_CTYPE.  */
-  if (strchr (current_locale, ';'))
-    current_locale = setlocale (LC_CTYPE, NULL);
-
-  pdot = strrchr (current_locale, '.');
-  if (pdot)
-    sprintf (buf, "CP%s", pdot + 1);
-  else
-    {
-      /* The Windows API has a function returning the locale's codepage as a
-        number: GetACP().
-        When the output goes to a console window, it needs to be provided in
-        GetOEMCP() encoding if the console is using a raster font, or in
-        GetConsoleOutputCP() encoding if it is using a TrueType font.
-        But in GUI programs and for output sent to files and pipes, GetACP()
-        encoding is the best bet.  */
-      sprintf (buf, "CP%u", GetACP ());
-    }
-  codeset = buf;
-
-#elif defined OS2
-
-  const char *locale;
-  static char buf[2 + 10 + 1];
-  ULONG cp[3];
-  ULONG cplen;
-
-  /* Allow user to override the codeset, as set in the operating system,
-     with standard language environment variables.  */
-  locale = getenv ("LC_ALL");
-  if (locale == NULL || locale[0] == '\0')
-    {
-      locale = getenv ("LC_CTYPE");
-      if (locale == NULL || locale[0] == '\0')
-        locale = getenv ("LANG");
-    }
-  if (locale != NULL && locale[0] != '\0')
-    {
-      /* If the locale name contains an encoding after the dot, return it.  */
-      const char *dot = strchr (locale, '.');
-
-      if (dot != NULL)
-        {
-          const char *modifier;
-
-          dot++;
-          /* Look for the possible @... trailer and remove it, if any.  */
-          modifier = strchr (dot, '@');
-          if (modifier == NULL)
-            return dot;
-          if (modifier - dot < sizeof (buf))
-            {
-              memcpy (buf, dot, modifier - dot);
-              buf [modifier - dot] = '\0';
-              return buf;
-            }
-        }
-
-      /* Resolve through the charset.alias file.  */
-      codeset = locale;
-    }
-  else
-    {
-      /* OS/2 has a function returning the locale's codepage as a number.  */
-      if (DosQueryCp (sizeof (cp), cp, &cplen))
-        codeset = "";
-      else
-        {
-          sprintf (buf, "CP%u", cp[0]);
-          codeset = buf;
-        }
-    }
-
-#endif
-
-  if (codeset == NULL)
-    /* The canonical name cannot be determined.  */
-    codeset = "";
-
-  /* Resolve alias. */
-  for (aliases = get_charset_aliases ();
-       *aliases != '\0';
-       aliases += strlen (aliases) + 1, aliases += strlen (aliases) + 1)
-    if (strcmp (codeset, aliases) == 0
-        || (aliases[0] == '*' && aliases[1] == '\0'))
-      {
-        codeset = aliases + strlen (aliases) + 1;
-        break;
-      }
-
-  /* Don't return an empty string.  GNU libc and GNU libiconv interpret
-     the empty string as denoting "the locale's character encoding",
-     thus GNU libiconv would call this function a second time.  */
-  if (codeset[0] == '\0')
-    codeset = "ASCII";
-
-#ifdef DARWIN7
-  /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8"
-     (the default codeset) does not work when MB_CUR_MAX is 1.  */
-  if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1)
-    codeset = "ASCII";
-#endif
-
-  return codeset;
-}
diff --git a/src/libs/gnulib/lib/localcharset.h b/src/libs/gnulib/lib/localcharset.h
deleted file mode 100644 (file)
index 795a930..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-/* Determine a canonical name for the current locale's character encoding.
-   Copyright (C) 2000-2003, 2009-2014 Free Software Foundation, Inc.
-   This file is part of the GNU CHARSET Library.
-
-   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, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _LOCALCHARSET_H
-#define _LOCALCHARSET_H
-
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Determine the current locale's character encoding, and canonicalize it
-   into one of the canonical names listed in config.charset.
-   The result must not be freed; it is statically allocated.
-   If the canonical name cannot be determined, the result is a non-canonical
-   name.  */
-extern const char * locale_charset (void);
-
-
-#ifdef __cplusplus
-}
-#endif
-
-
-#endif /* _LOCALCHARSET_H */
diff --git a/src/libs/gnulib/lib/ref-add.sin b/src/libs/gnulib/lib/ref-add.sin
deleted file mode 100644 (file)
index 4379dfe..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# Add this package to a list of references stored in a text file.
-#
-#   Copyright (C) 2000, 2009-2014 Free Software Foundation, Inc.
-#
-#   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, see <http://www.gnu.org/licenses/>.
-#
-# Written by Bruno Haible <haible@clisp.cons.org>.
-#
-/^# Packages using this file: / {
-  s/# Packages using this file://
-  ta
-  :a
-  s/ @PACKAGE@ / @PACKAGE@ /
-  tb
-  s/ $/ @PACKAGE@ /
-  :b
-  s/^/# Packages using this file:/
-}
diff --git a/src/libs/gnulib/lib/ref-del.sin b/src/libs/gnulib/lib/ref-del.sin
deleted file mode 100644 (file)
index d36b125..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# Remove this package from a list of references stored in a text file.
-#
-#   Copyright (C) 2000, 2009-2014 Free Software Foundation, Inc.
-#
-#   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, see <http://www.gnu.org/licenses/>.
-#
-# Written by Bruno Haible <haible@clisp.cons.org>.
-#
-/^# Packages using this file: / {
-  s/# Packages using this file://
-  s/ @PACKAGE@ / /
-  s/^/# Packages using this file:/
-}
diff --git a/src/libs/gnulib/lib/stdbool.in.h b/src/libs/gnulib/lib/stdbool.in.h
deleted file mode 100644 (file)
index 4a6d7ba..0000000
+++ /dev/null
@@ -1,132 +0,0 @@
-/* Copyright (C) 2001-2003, 2006-2014 Free Software Foundation, Inc.
-   Written by Bruno Haible <haible@clisp.cons.org>, 2001.
-
-   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, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _GL_STDBOOL_H
-#define _GL_STDBOOL_H
-
-/* ISO C 99 <stdbool.h> for platforms that lack it.  */
-
-/* Usage suggestions:
-
-   Programs that use <stdbool.h> should be aware of some limitations
-   and standards compliance issues.
-
-   Standards compliance:
-
-       - <stdbool.h> must be #included before 'bool', 'false', 'true'
-         can be used.
-
-       - You cannot assume that sizeof (bool) == 1.
-
-       - Programs should not undefine the macros bool, true, and false,
-         as C99 lists that as an "obsolescent feature".
-
-   Limitations of this substitute, when used in a C89 environment:
-
-       - <stdbool.h> must be #included before the '_Bool' type can be used.
-
-       - You cannot assume that _Bool is a typedef; it might be a macro.
-
-       - Bit-fields of type 'bool' are not supported.  Portable code
-         should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'.
-
-       - In C99, casts and automatic conversions to '_Bool' or 'bool' are
-         performed in such a way that every nonzero value gets converted
-         to 'true', and zero gets converted to 'false'.  This doesn't work
-         with this substitute.  With this substitute, only the values 0 and 1
-         give the expected result when converted to _Bool' or 'bool'.
-
-       - C99 allows the use of (_Bool)0.0 in constant expressions, but
-         this substitute cannot always provide this property.
-
-   Also, it is suggested that programs use 'bool' rather than '_Bool';
-   this isn't required, but 'bool' is more common.  */
-
-
-/* 7.16. Boolean type and values */
-
-/* BeOS <sys/socket.h> already #defines false 0, true 1.  We use the same
-   definitions below, but temporarily we have to #undef them.  */
-#if defined __BEOS__ && !defined __HAIKU__
-# include <OS.h> /* defines bool but not _Bool */
-# undef false
-# undef true
-#endif
-
-#ifdef __cplusplus
-# define _Bool bool
-# define bool bool
-#else
-# if defined __BEOS__ && !defined __HAIKU__
-  /* A compiler known to have 'bool'.  */
-  /* If the compiler already has both 'bool' and '_Bool', we can assume they
-     are the same types.  */
-#  if !@HAVE__BOOL@
-typedef bool _Bool;
-#  endif
-# else
-#  if !defined __GNUC__
-   /* If @HAVE__BOOL@:
-        Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when
-        the built-in _Bool type is used.  See
-          http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-          http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-          http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html
-        Similar bugs are likely with other compilers as well; this file
-        wouldn't be used if <stdbool.h> was working.
-        So we override the _Bool type.
-      If !@HAVE__BOOL@:
-        Need to define _Bool ourselves. As 'signed char' or as an enum type?
-        Use of a typedef, with SunPRO C, leads to a stupid
-          "warning: _Bool is a keyword in ISO C99".
-        Use of an enum type, with IRIX cc, leads to a stupid
-          "warning(1185): enumerated type mixed with another type".
-        Even the existence of an enum type, without a typedef,
-          "Invalid enumerator. (badenum)" with HP-UX cc on Tru64.
-        The only benefit of the enum, debuggability, is not important
-        with these compilers.  So use 'signed char' and no enum.  */
-#   define _Bool signed char
-#  else
-   /* With this compiler, trust the _Bool type if the compiler has it.  */
-#   if !@HAVE__BOOL@
-   /* For the sake of symbolic names in gdb, define true and false as
-      enum constants, not only as macros.
-      It is tempting to write
-         typedef enum { false = 0, true = 1 } _Bool;
-      so that gdb prints values of type 'bool' symbolically.  But then
-      values of type '_Bool' might promote to 'int' or 'unsigned int'
-      (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int'
-      (see ISO C 99 6.3.1.1.(2)).  So add a negative value to the
-      enum; this ensures that '_Bool' promotes to 'int'.  */
-typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool;
-#   endif
-#  endif
-# endif
-# define bool _Bool
-#endif
-
-/* The other macros must be usable in preprocessor directives.  */
-#ifdef __cplusplus
-# define false false
-# define true true
-#else
-# define false 0
-# define true 1
-#endif
-
-#define __bool_true_false_are_defined 1
-
-#endif /* _GL_STDBOOL_H */
diff --git a/src/libs/gnulib/lib/stddef.in.h b/src/libs/gnulib/lib/stddef.in.h
deleted file mode 100644 (file)
index 11b58be..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues.
-
-   Copyright (C) 2009-2014 Free Software Foundation, Inc.
-
-   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, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Eric Blake.  */
-
-/*
- * POSIX 2008 <stddef.h> for platforms that have issues.
- * <http://www.opengroup.org/susv3xbd/stddef.h.html>
- */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-@PRAGMA_COLUMNS@
-
-#if defined __need_wchar_t || defined __need_size_t  \
-  || defined __need_ptrdiff_t || defined __need_NULL \
-  || defined __need_wint_t
-/* Special invocation convention inside gcc header files.  In
-   particular, gcc provides a version of <stddef.h> that blindly
-   redefines NULL even when __need_wint_t was defined, even though
-   wint_t is not normally provided by <stddef.h>.  Hence, we must
-   remember if special invocation has ever been used to obtain wint_t,
-   in which case we need to clean up NULL yet again.  */
-
-# if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T)
-#  ifdef __need_wint_t
-#   undef _@GUARD_PREFIX@_STDDEF_H
-#   define _GL_STDDEF_WINT_T
-#  endif
-#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
-# endif
-
-#else
-/* Normal invocation convention.  */
-
-# ifndef _@GUARD_PREFIX@_STDDEF_H
-
-/* The include_next requires a split double-inclusion guard.  */
-
-#  @INCLUDE_NEXT@ @NEXT_STDDEF_H@
-
-#  ifndef _@GUARD_PREFIX@_STDDEF_H
-#   define _@GUARD_PREFIX@_STDDEF_H
-
-/* On NetBSD 5.0, the definition of NULL lacks proper parentheses.  */
-#if @REPLACE_NULL@
-# undef NULL
-# ifdef __cplusplus
-   /* ISO C++ says that the macro NULL must expand to an integer constant
-      expression, hence '((void *) 0)' is not allowed in C++.  */
-#  if __GNUG__ >= 3
-    /* GNU C++ has a __null macro that behaves like an integer ('int' or
-       'long') but has the same size as a pointer.  Use that, to avoid
-       warnings.  */
-#   define NULL __null
-#  else
-#   define NULL 0L
-#  endif
-# else
-#  define NULL ((void *) 0)
-# endif
-#endif
-
-/* Some platforms lack wchar_t.  */
-#if !@HAVE_WCHAR_T@
-# define wchar_t int
-#endif
-
-#  endif /* _@GUARD_PREFIX@_STDDEF_H */
-# endif /* _@GUARD_PREFIX@_STDDEF_H */
-#endif /* __need_XXX */
diff --git a/src/libs/gnulib/lib/stdint.in.h b/src/libs/gnulib/lib/stdint.in.h
deleted file mode 100644 (file)
index 1e77b6d..0000000
+++ /dev/null
@@ -1,636 +0,0 @@
-/* Copyright (C) 2001-2014  Free Software Foundation, Inc.
-   Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood.
-   This file is part of gnulib.
-
-   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 3, 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, see <http://www.gnu.org/licenses/>.  */
-
-/*
- * ISO C 99 <stdint.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/stdint.h.html>
- */
-
-#ifndef _@GUARD_PREFIX@_STDINT_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-@PRAGMA_COLUMNS@
-
-/* When including a system file that in turn includes <inttypes.h>,
-   use the system <inttypes.h>, not our substitute.  This avoids
-   problems with (for example) VMS, whose <sys/bitypes.h> includes
-   <inttypes.h>.  */
-#define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-
-/* On Android (Bionic libc), <sys/types.h> includes this file before
-   having defined 'time_t'.  Therefore in this case avoid including
-   other system header files; just include the system's <stdint.h>.
-   Ideally we should test __BIONIC__ here, but it is only defined after
-   <sys/cdefs.h> has been included; hence test __ANDROID__ instead.  */
-#if defined __ANDROID__ \
-    && defined _SYS_TYPES_H_ && !defined __need_size_t
-# @INCLUDE_NEXT@ @NEXT_STDINT_H@
-#else
-
-/* Get those types that are already defined in other system include
-   files, so that we can "#define int8_t signed char" below without
-   worrying about a later system include file containing a "typedef
-   signed char int8_t;" that will get messed up by our macro.  Our
-   macros should all be consistent with the system versions, except
-   for the "fast" types and macros, which we recommend against using
-   in public interfaces due to compiler differences.  */
-
-#if @HAVE_STDINT_H@
-# if defined __sgi && ! defined __c99
-   /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users
-      with "This header file is to be used only for c99 mode compilations"
-      diagnostics.  */
-#  define __STDINT_H__
-# endif
-
-  /* Some pre-C++11 <stdint.h> implementations need this.  */
-# ifdef __cplusplus
-#  ifndef __STDC_CONSTANT_MACROS
-#   define __STDC_CONSTANT_MACROS 1
-#  endif
-#  ifndef __STDC_LIMIT_MACROS
-#   define __STDC_LIMIT_MACROS 1
-#  endif
-# endif
-
-  /* Other systems may have an incomplete or buggy <stdint.h>.
-     Include it before <inttypes.h>, since any "#include <stdint.h>"
-     in <inttypes.h> would reinclude us, skipping our contents because
-     _@GUARD_PREFIX@_STDINT_H is defined.
-     The include_next requires a split double-inclusion guard.  */
-# @INCLUDE_NEXT@ @NEXT_STDINT_H@
-#endif
-
-#if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-#define _@GUARD_PREFIX@_STDINT_H
-
-/* <sys/types.h> defines some of the stdint.h types as well, on glibc,
-   IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>).
-   AIX 5.2 <sys/types.h> isn't needed and causes troubles.
-   Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but
-   relies on the system <stdint.h> definitions, so include
-   <sys/types.h> after @NEXT_STDINT_H@.  */
-#if @HAVE_SYS_TYPES_H@ && ! defined _AIX
-# include <sys/types.h>
-#endif
-
-/* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX,
-   LONG_MIN, LONG_MAX, ULONG_MAX.  */
-#include <limits.h>
-
-#if @HAVE_INTTYPES_H@
-  /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines
-     int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__.
-     <inttypes.h> also defines intptr_t and uintptr_t.  */
-# include <inttypes.h>
-#elif @HAVE_SYS_INTTYPES_H@
-  /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and
-     the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX.  */
-# include <sys/inttypes.h>
-#endif
-
-#if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__
-  /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines
-     int{8,16,32,64}_t and __BIT_TYPES_DEFINED__.  In libc5 >= 5.2.2 it is
-     included by <sys/types.h>.  */
-# include <sys/bitypes.h>
-#endif
-
-#undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H
-
-/* Minimum and maximum values for an integer type under the usual assumption.
-   Return an unspecified value if BITS == 0, adding a check to pacify
-   picky compilers.  */
-
-#define _STDINT_MIN(signed, bits, zero) \
-  ((signed) ? (- ((zero) + 1) << ((bits) ? (bits) - 1 : 0)) : (zero))
-
-#define _STDINT_MAX(signed, bits, zero) \
-  ((signed) \
-   ? ~ _STDINT_MIN (signed, bits, zero) \
-   : /* The expression for the unsigned case.  The subtraction of (signed) \
-        is a nop in the unsigned case and avoids "signed integer overflow" \
-        warnings in the signed case.  */ \
-     ((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1)
-
-#if !GNULIB_defined_stdint_types
-
-/* 7.18.1.1. Exact-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits.  */
-
-#undef int8_t
-#undef uint8_t
-typedef signed char gl_int8_t;
-typedef unsigned char gl_uint8_t;
-#define int8_t gl_int8_t
-#define uint8_t gl_uint8_t
-
-#undef int16_t
-#undef uint16_t
-typedef short int gl_int16_t;
-typedef unsigned short int gl_uint16_t;
-#define int16_t gl_int16_t
-#define uint16_t gl_uint16_t
-
-#undef int32_t
-#undef uint32_t
-typedef int gl_int32_t;
-typedef unsigned int gl_uint32_t;
-#define int32_t gl_int32_t
-#define uint32_t gl_uint32_t
-
-/* If the system defines INT64_MAX, assume int64_t works.  That way,
-   if the underlying platform defines int64_t to be a 64-bit long long
-   int, the code below won't mistakenly define it to be a 64-bit long
-   int, which would mess up C++ name mangling.  We must use #ifdef
-   rather than #if, to avoid an error with HP-UX 10.20 cc.  */
-
-#ifdef INT64_MAX
-# define GL_INT64_T
-#else
-/* Do not undefine int64_t if gnulib is not being used with 64-bit
-   types, since otherwise it breaks platforms like Tandem/NSK.  */
-# if LONG_MAX >> 31 >> 31 == 1
-#  undef int64_t
-typedef long int gl_int64_t;
-#  define int64_t gl_int64_t
-#  define GL_INT64_T
-# elif defined _MSC_VER
-#  undef int64_t
-typedef __int64 gl_int64_t;
-#  define int64_t gl_int64_t
-#  define GL_INT64_T
-# elif @HAVE_LONG_LONG_INT@
-#  undef int64_t
-typedef long long int gl_int64_t;
-#  define int64_t gl_int64_t
-#  define GL_INT64_T
-# endif
-#endif
-
-#ifdef UINT64_MAX
-# define GL_UINT64_T
-#else
-# if ULONG_MAX >> 31 >> 31 >> 1 == 1
-#  undef uint64_t
-typedef unsigned long int gl_uint64_t;
-#  define uint64_t gl_uint64_t
-#  define GL_UINT64_T
-# elif defined _MSC_VER
-#  undef uint64_t
-typedef unsigned __int64 gl_uint64_t;
-#  define uint64_t gl_uint64_t
-#  define GL_UINT64_T
-# elif @HAVE_UNSIGNED_LONG_LONG_INT@
-#  undef uint64_t
-typedef unsigned long long int gl_uint64_t;
-#  define uint64_t gl_uint64_t
-#  define GL_UINT64_T
-# endif
-#endif
-
-/* Avoid collision with Solaris 2.5.1 <pthread.h> etc.  */
-#define _UINT8_T
-#define _UINT32_T
-#define _UINT64_T
-
-
-/* 7.18.1.2. Minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
-   are the same as the corresponding N_t types.  */
-
-#undef int_least8_t
-#undef uint_least8_t
-#undef int_least16_t
-#undef uint_least16_t
-#undef int_least32_t
-#undef uint_least32_t
-#undef int_least64_t
-#undef uint_least64_t
-#define int_least8_t int8_t
-#define uint_least8_t uint8_t
-#define int_least16_t int16_t
-#define uint_least16_t uint16_t
-#define int_least32_t int32_t
-#define uint_least32_t uint32_t
-#ifdef GL_INT64_T
-# define int_least64_t int64_t
-#endif
-#ifdef GL_UINT64_T
-# define uint_least64_t uint64_t
-#endif
-
-/* 7.18.1.3. Fastest minimum-width integer types */
-
-/* Note: Other <stdint.h> substitutes may define these types differently.
-   It is not recommended to use these types in public header files. */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
-   are taken from the same list of types.  The following code normally
-   uses types consistent with glibc, as that lessens the chance of
-   incompatibility with older GNU hosts.  */
-
-#undef int_fast8_t
-#undef uint_fast8_t
-#undef int_fast16_t
-#undef uint_fast16_t
-#undef int_fast32_t
-#undef uint_fast32_t
-#undef int_fast64_t
-#undef uint_fast64_t
-typedef signed char gl_int_fast8_t;
-typedef unsigned char gl_uint_fast8_t;
-
-#ifdef __sun
-/* Define types compatible with SunOS 5.10, so that code compiled under
-   earlier SunOS versions works with code compiled under SunOS 5.10.  */
-typedef int gl_int_fast32_t;
-typedef unsigned int gl_uint_fast32_t;
-#else
-typedef long int gl_int_fast32_t;
-typedef unsigned long int gl_uint_fast32_t;
-#endif
-typedef gl_int_fast32_t gl_int_fast16_t;
-typedef gl_uint_fast32_t gl_uint_fast16_t;
-
-#define int_fast8_t gl_int_fast8_t
-#define uint_fast8_t gl_uint_fast8_t
-#define int_fast16_t gl_int_fast16_t
-#define uint_fast16_t gl_uint_fast16_t
-#define int_fast32_t gl_int_fast32_t
-#define uint_fast32_t gl_uint_fast32_t
-#ifdef GL_INT64_T
-# define int_fast64_t int64_t
-#endif
-#ifdef GL_UINT64_T
-# define uint_fast64_t uint64_t
-#endif
-
-/* 7.18.1.4. Integer types capable of holding object pointers */
-
-#undef intptr_t
-#undef uintptr_t
-typedef long int gl_intptr_t;
-typedef unsigned long int gl_uintptr_t;
-#define intptr_t gl_intptr_t
-#define uintptr_t gl_uintptr_t
-
-/* 7.18.1.5. Greatest-width integer types */
-
-/* Note: These types are compiler dependent. It may be unwise to use them in
-   public header files. */
-
-/* If the system defines INTMAX_MAX, assume that intmax_t works, and
-   similarly for UINTMAX_MAX and uintmax_t.  This avoids problems with
-   assuming one type where another is used by the system.  */
-
-#ifndef INTMAX_MAX
-# undef INTMAX_C
-# undef intmax_t
-# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-typedef long long int gl_intmax_t;
-#  define intmax_t gl_intmax_t
-# elif defined GL_INT64_T
-#  define intmax_t int64_t
-# else
-typedef long int gl_intmax_t;
-#  define intmax_t gl_intmax_t
-# endif
-#endif
-
-#ifndef UINTMAX_MAX
-# undef UINTMAX_C
-# undef uintmax_t
-# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-typedef unsigned long long int gl_uintmax_t;
-#  define uintmax_t gl_uintmax_t
-# elif defined GL_UINT64_T
-#  define uintmax_t uint64_t
-# else
-typedef unsigned long int gl_uintmax_t;
-#  define uintmax_t gl_uintmax_t
-# endif
-#endif
-
-/* Verify that intmax_t and uintmax_t have the same size.  Too much code
-   breaks if this is not the case.  If this check fails, the reason is likely
-   to be found in the autoconf macros.  */
-typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t)
-                                ? 1 : -1];
-
-#define GNULIB_defined_stdint_types 1
-#endif /* !GNULIB_defined_stdint_types */
-
-/* 7.18.2. Limits of specified-width integer types */
-
-/* 7.18.2.1. Limits of exact-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits.  */
-
-#undef INT8_MIN
-#undef INT8_MAX
-#undef UINT8_MAX
-#define INT8_MIN  (~ INT8_MAX)
-#define INT8_MAX  127
-#define UINT8_MAX  255
-
-#undef INT16_MIN
-#undef INT16_MAX
-#undef UINT16_MAX
-#define INT16_MIN  (~ INT16_MAX)
-#define INT16_MAX  32767
-#define UINT16_MAX  65535
-
-#undef INT32_MIN
-#undef INT32_MAX
-#undef UINT32_MAX
-#define INT32_MIN  (~ INT32_MAX)
-#define INT32_MAX  2147483647
-#define UINT32_MAX  4294967295U
-
-#if defined GL_INT64_T && ! defined INT64_MAX
-/* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0
-   evaluates the latter incorrectly in preprocessor expressions.  */
-# define INT64_MIN  (- INTMAX_C (1) << 63)
-# define INT64_MAX  INTMAX_C (9223372036854775807)
-#endif
-
-#if defined GL_UINT64_T && ! defined UINT64_MAX
-# define UINT64_MAX  UINTMAX_C (18446744073709551615)
-#endif
-
-/* 7.18.2.2. Limits of minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types
-   are the same as the corresponding N_t types.  */
-
-#undef INT_LEAST8_MIN
-#undef INT_LEAST8_MAX
-#undef UINT_LEAST8_MAX
-#define INT_LEAST8_MIN  INT8_MIN
-#define INT_LEAST8_MAX  INT8_MAX
-#define UINT_LEAST8_MAX  UINT8_MAX
-
-#undef INT_LEAST16_MIN
-#undef INT_LEAST16_MAX
-#undef UINT_LEAST16_MAX
-#define INT_LEAST16_MIN  INT16_MIN
-#define INT_LEAST16_MAX  INT16_MAX
-#define UINT_LEAST16_MAX  UINT16_MAX
-
-#undef INT_LEAST32_MIN
-#undef INT_LEAST32_MAX
-#undef UINT_LEAST32_MAX
-#define INT_LEAST32_MIN  INT32_MIN
-#define INT_LEAST32_MAX  INT32_MAX
-#define UINT_LEAST32_MAX  UINT32_MAX
-
-#undef INT_LEAST64_MIN
-#undef INT_LEAST64_MAX
-#ifdef GL_INT64_T
-# define INT_LEAST64_MIN  INT64_MIN
-# define INT_LEAST64_MAX  INT64_MAX
-#endif
-
-#undef UINT_LEAST64_MAX
-#ifdef GL_UINT64_T
-# define UINT_LEAST64_MAX  UINT64_MAX
-#endif
-
-/* 7.18.2.3. Limits of fastest minimum-width integer types */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types
-   are taken from the same list of types.  */
-
-#undef INT_FAST8_MIN
-#undef INT_FAST8_MAX
-#undef UINT_FAST8_MAX
-#define INT_FAST8_MIN  SCHAR_MIN
-#define INT_FAST8_MAX  SCHAR_MAX
-#define UINT_FAST8_MAX  UCHAR_MAX
-
-#undef INT_FAST16_MIN
-#undef INT_FAST16_MAX
-#undef UINT_FAST16_MAX
-#define INT_FAST16_MIN  INT_FAST32_MIN
-#define INT_FAST16_MAX  INT_FAST32_MAX
-#define UINT_FAST16_MAX  UINT_FAST32_MAX
-
-#undef INT_FAST32_MIN
-#undef INT_FAST32_MAX
-#undef UINT_FAST32_MAX
-#ifdef __sun
-# define INT_FAST32_MIN  INT_MIN
-# define INT_FAST32_MAX  INT_MAX
-# define UINT_FAST32_MAX  UINT_MAX
-#else
-# define INT_FAST32_MIN  LONG_MIN
-# define INT_FAST32_MAX  LONG_MAX
-# define UINT_FAST32_MAX  ULONG_MAX
-#endif
-
-#undef INT_FAST64_MIN
-#undef INT_FAST64_MAX
-#ifdef GL_INT64_T
-# define INT_FAST64_MIN  INT64_MIN
-# define INT_FAST64_MAX  INT64_MAX
-#endif
-
-#undef UINT_FAST64_MAX
-#ifdef GL_UINT64_T
-# define UINT_FAST64_MAX  UINT64_MAX
-#endif
-
-/* 7.18.2.4. Limits of integer types capable of holding object pointers */
-
-#undef INTPTR_MIN
-#undef INTPTR_MAX
-#undef UINTPTR_MAX
-#define INTPTR_MIN  LONG_MIN
-#define INTPTR_MAX  LONG_MAX
-#define UINTPTR_MAX  ULONG_MAX
-
-/* 7.18.2.5. Limits of greatest-width integer types */
-
-#ifndef INTMAX_MAX
-# undef INTMAX_MIN
-# ifdef INT64_MAX
-#  define INTMAX_MIN  INT64_MIN
-#  define INTMAX_MAX  INT64_MAX
-# else
-#  define INTMAX_MIN  INT32_MIN
-#  define INTMAX_MAX  INT32_MAX
-# endif
-#endif
-
-#ifndef UINTMAX_MAX
-# ifdef UINT64_MAX
-#  define UINTMAX_MAX  UINT64_MAX
-# else
-#  define UINTMAX_MAX  UINT32_MAX
-# endif
-#endif
-
-/* 7.18.3. Limits of other integer types */
-
-/* ptrdiff_t limits */
-#undef PTRDIFF_MIN
-#undef PTRDIFF_MAX
-#if @APPLE_UNIVERSAL_BUILD@
-# ifdef _LP64
-#  define PTRDIFF_MIN  _STDINT_MIN (1, 64, 0l)
-#  define PTRDIFF_MAX  _STDINT_MAX (1, 64, 0l)
-# else
-#  define PTRDIFF_MIN  _STDINT_MIN (1, 32, 0)
-#  define PTRDIFF_MAX  _STDINT_MAX (1, 32, 0)
-# endif
-#else
-# define PTRDIFF_MIN  \
-    _STDINT_MIN (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
-# define PTRDIFF_MAX  \
-    _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@)
-#endif
-
-/* sig_atomic_t limits */
-#undef SIG_ATOMIC_MIN
-#undef SIG_ATOMIC_MAX
-#define SIG_ATOMIC_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
-                0@SIG_ATOMIC_T_SUFFIX@)
-#define SIG_ATOMIC_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \
-                0@SIG_ATOMIC_T_SUFFIX@)
-
-
-/* size_t limit */
-#undef SIZE_MAX
-#if @APPLE_UNIVERSAL_BUILD@
-# ifdef _LP64
-#  define SIZE_MAX  _STDINT_MAX (0, 64, 0ul)
-# else
-#  define SIZE_MAX  _STDINT_MAX (0, 32, 0ul)
-# endif
-#else
-# define SIZE_MAX  _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@)
-#endif
-
-/* wchar_t limits */
-/* Get WCHAR_MIN, WCHAR_MAX.
-   This include is not on the top, above, because on OSF/1 4.0 we have a
-   sequence of nested includes
-   <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes
-   <stdint.h> and assumes its types are already defined.  */
-#if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX)
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-# define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
-# include <wchar.h>
-# undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H
-#endif
-#undef WCHAR_MIN
-#undef WCHAR_MAX
-#define WCHAR_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
-#define WCHAR_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@)
-
-/* wint_t limits */
-#undef WINT_MIN
-#undef WINT_MAX
-#define WINT_MIN  \
-   _STDINT_MIN (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
-#define WINT_MAX  \
-   _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@)
-
-/* 7.18.4. Macros for integer constants */
-
-/* 7.18.4.1. Macros for minimum-width integer constants */
-/* According to ISO C 99 Technical Corrigendum 1 */
-
-/* Here we assume a standard architecture where the hardware integer
-   types have 8, 16, 32, optionally 64 bits, and int is 32 bits.  */
-
-#undef INT8_C
-#undef UINT8_C
-#define INT8_C(x) x
-#define UINT8_C(x) x
-
-#undef INT16_C
-#undef UINT16_C
-#define INT16_C(x) x
-#define UINT16_C(x) x
-
-#undef INT32_C
-#undef UINT32_C
-#define INT32_C(x) x
-#define UINT32_C(x) x ## U
-
-#undef INT64_C
-#undef UINT64_C
-#if LONG_MAX >> 31 >> 31 == 1
-# define INT64_C(x) x##L
-#elif defined _MSC_VER
-# define INT64_C(x) x##i64
-#elif @HAVE_LONG_LONG_INT@
-# define INT64_C(x) x##LL
-#endif
-#if ULONG_MAX >> 31 >> 31 >> 1 == 1
-# define UINT64_C(x) x##UL
-#elif defined _MSC_VER
-# define UINT64_C(x) x##ui64
-#elif @HAVE_UNSIGNED_LONG_LONG_INT@
-# define UINT64_C(x) x##ULL
-#endif
-
-/* 7.18.4.2. Macros for greatest-width integer constants */
-
-#ifndef INTMAX_C
-# if @HAVE_LONG_LONG_INT@ && LONG_MAX >> 30 == 1
-#  define INTMAX_C(x)   x##LL
-# elif defined GL_INT64_T
-#  define INTMAX_C(x)   INT64_C(x)
-# else
-#  define INTMAX_C(x)   x##L
-# endif
-#endif
-
-#ifndef UINTMAX_C
-# if @HAVE_UNSIGNED_LONG_LONG_INT@ && ULONG_MAX >> 31 == 1
-#  define UINTMAX_C(x)  x##ULL
-# elif defined GL_UINT64_T
-#  define UINTMAX_C(x)  UINT64_C(x)
-# else
-#  define UINTMAX_C(x)  x##UL
-# endif
-#endif
-
-#endif /* _@GUARD_PREFIX@_STDINT_H */
-#endif /* !(defined __ANDROID__ && ...) */
-#endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */
diff --git a/src/libs/gnulib/lib/streq.h b/src/libs/gnulib/lib/streq.h
deleted file mode 100644 (file)
index 0f7bc72..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/* Optimized string comparison.
-   Copyright (C) 2001-2002, 2007, 2009-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 3 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Bruno Haible <bruno@clisp.org>.  */
-
-#ifndef _GL_STREQ_H
-#define _GL_STREQ_H
-
-#include <string.h>
-
-/* STREQ_OPT allows to optimize string comparison with a small literal string.
-     STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
-   is semantically equivalent to
-     strcmp (s, "EUC-KR") == 0
-   just faster.  */
-
-/* Help GCC to generate good code for string comparisons with
-   immediate strings. */
-#if defined (__GNUC__) && defined (__OPTIMIZE__)
-
-static inline int
-streq9 (const char *s1, const char *s2)
-{
-  return strcmp (s1 + 9, s2 + 9) == 0;
-}
-
-static inline int
-streq8 (const char *s1, const char *s2, char s28)
-{
-  if (s1[8] == s28)
-    {
-      if (s28 == 0)
-        return 1;
-      else
-        return streq9 (s1, s2);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq7 (const char *s1, const char *s2, char s27, char s28)
-{
-  if (s1[7] == s27)
-    {
-      if (s27 == 0)
-        return 1;
-      else
-        return streq8 (s1, s2, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq6 (const char *s1, const char *s2, char s26, char s27, char s28)
-{
-  if (s1[6] == s26)
-    {
-      if (s26 == 0)
-        return 1;
-      else
-        return streq7 (s1, s2, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28)
-{
-  if (s1[5] == s25)
-    {
-      if (s25 == 0)
-        return 1;
-      else
-        return streq6 (s1, s2, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[4] == s24)
-    {
-      if (s24 == 0)
-        return 1;
-      else
-        return streq5 (s1, s2, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[3] == s23)
-    {
-      if (s23 == 0)
-        return 1;
-      else
-        return streq4 (s1, s2, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[2] == s22)
-    {
-      if (s22 == 0)
-        return 1;
-      else
-        return streq3 (s1, s2, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[1] == s21)
-    {
-      if (s21 == 0)
-        return 1;
-      else
-        return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-static inline int
-streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28)
-{
-  if (s1[0] == s20)
-    {
-      if (s20 == 0)
-        return 1;
-      else
-        return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28);
-    }
-  else
-    return 0;
-}
-
-#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
-  streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28)
-
-#else
-
-#define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \
-  (strcmp (s1, s2) == 0)
-
-#endif
-
-#endif /* _GL_STREQ_H */
diff --git a/src/libs/gnulib/lib/unitypes.in.h b/src/libs/gnulib/lib/unitypes.in.h
deleted file mode 100644 (file)
index e5ff992..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/* Elementary types and macros for the GNU UniString library.
-   Copyright (C) 2002, 2005-2006, 2009-2014 Free Software Foundation, Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 3 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _UNITYPES_H
-#define _UNITYPES_H
-
-/* Get uint8_t, uint16_t, uint32_t.  */
-#include <stdint.h>
-
-/* Type representing a Unicode character.  */
-typedef uint32_t ucs4_t;
-
-/* Attribute of a function whose result depends only on the arguments
-   (not pointers!) and which has no side effects.  */
-#ifndef _UC_ATTRIBUTE_CONST
-# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
-#  define _UC_ATTRIBUTE_CONST __attribute__ ((__const__))
-# else
-#  define _UC_ATTRIBUTE_CONST
-# endif
-#endif
-
-/* Attribute of a function whose result depends only on the arguments
-   (possibly pointers) and global memory, and which has no side effects.  */
-#ifndef _UC_ATTRIBUTE_PURE
-# if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
-#  define _UC_ATTRIBUTE_PURE __attribute__ ((__pure__))
-# else
-#  define _UC_ATTRIBUTE_PURE
-# endif
-#endif
-
-#endif /* _UNITYPES_H */
diff --git a/src/libs/gnulib/lib/uniwidth.in.h b/src/libs/gnulib/lib/uniwidth.in.h
deleted file mode 100644 (file)
index 38e8778..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-/* Display width functions.
-   Copyright (C) 2001-2002, 2005, 2007, 2009-2014 Free Software Foundation,
-   Inc.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 3 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#ifndef _UNIWIDTH_H
-#define _UNIWIDTH_H
-
-#include "unitypes.h"
-
-/* Get size_t.  */
-#include <stddef.h>
-
-/* Get locale_charset() declaration.  */
-#include "localcharset.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/* Display width.  */
-
-/* These functions are locale dependent.  The encoding argument identifies
-   the encoding (e.g. "ISO-8859-2" for Polish).  */
-
-/* Determine number of column positions required for UC.  */
-extern int
-       uc_width (ucs4_t uc, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-
-/* Determine number of column positions required for first N units
-   (or fewer if S ends before this) in S.  */
-extern int
-       u8_width (const uint8_t *s, size_t n, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-extern int
-       u16_width (const uint16_t *s, size_t n, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-extern int
-       u32_width (const uint32_t *s, size_t n, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-
-/* Determine number of column positions required for S.  */
-extern int
-       u8_strwidth (const uint8_t *s, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-extern int
-       u16_strwidth (const uint16_t *s, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-extern int
-       u32_strwidth (const uint32_t *s, const char *encoding)
-       _UC_ATTRIBUTE_PURE;
-
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* _UNIWIDTH_H */
diff --git a/src/libs/gnulib/lib/uniwidth/cjk.h b/src/libs/gnulib/lib/uniwidth/cjk.h
deleted file mode 100644 (file)
index 1ecd655..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-/* Test for CJK encoding.
-   Copyright (C) 2001-2002, 2005-2007, 2009-2014 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2002.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 3 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include "streq.h"
-
-static int
-is_cjk_encoding (const char *encoding)
-{
-  if (0
-      /* Legacy Japanese encodings */
-      || STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)
-      /* Legacy Chinese encodings */
-      || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0)
-      || STREQ_OPT (encoding, "GBK", 'G', 'B', 'K', 0, 0, 0, 0, 0, 0)
-      || STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)
-      || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)
-      /* Legacy Korean encodings */
-      || STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0)
-      || STREQ_OPT (encoding, "CP949", 'C', 'P', '9', '4', '9', 0, 0, 0, 0)
-      || STREQ_OPT (encoding, "JOHAB", 'J', 'O', 'H', 'A', 'B', 0, 0, 0, 0))
-    return 1;
-  return 0;
-}
diff --git a/src/libs/gnulib/lib/uniwidth/width.c b/src/libs/gnulib/lib/uniwidth/width.c
deleted file mode 100644 (file)
index 3ed398e..0000000
+++ /dev/null
@@ -1,368 +0,0 @@
-/* Determine display width of Unicode character.
-   Copyright (C) 2001-2002, 2006-2014 Free Software Foundation, Inc.
-   Written by Bruno Haible <bruno@clisp.org>, 2002.
-
-   This program is free software: you can redistribute it and/or modify it
-   under the terms of the GNU Lesser General Public License as published
-   by the Free Software Foundation; either version 3 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
-   Lesser General Public License for more details.
-
-   You should have received a copy of the GNU Lesser General Public License
-   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include "uniwidth.h"
-
-#include "cjk.h"
-
-/*
- * Non-spacing attribute table.
- * Consists of:
- * - Non-spacing characters; generated from PropList.txt or
- *   "grep '^[^;]*;[^;]*;[^;]*;[^;]*;NSM;' UnicodeData.txt"
- * - Format control characters; generated from
- *   "grep '^[^;]*;[^;]*;Cf;' UnicodeData.txt"
- * - Zero width characters; generated from
- *   "grep '^[^;]*;ZERO WIDTH ' UnicodeData.txt"
- */
-static const unsigned char nonspacing_table_data[27*64] = {
-  /* 0x0000-0x01ff */
-  0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, /* 0x0000-0x003f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x0040-0x007f */
-  0xff, 0xff, 0xff, 0xff, 0x00, 0x20, 0x00, 0x00, /* 0x0080-0x00bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x00c0-0x00ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0100-0x013f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0140-0x017f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0180-0x01bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x01c0-0x01ff */
-  /* 0x0200-0x03ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0200-0x023f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0240-0x027f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0280-0x02bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x02c0-0x02ff */
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, /* 0x0300-0x033f */
-  0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00, 0x00, /* 0x0340-0x037f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0380-0x03bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x03c0-0x03ff */
-  /* 0x0400-0x05ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0400-0x043f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0440-0x047f */
-  0xf8, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0480-0x04bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x04c0-0x04ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0500-0x053f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0540-0x057f */
-  0x00, 0x00, 0xfe, 0xff, 0xff, 0xff, 0xff, 0xbf, /* 0x0580-0x05bf */
-  0xb6, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x05c0-0x05ff */
-  /* 0x0600-0x07ff */
-  0x0f, 0x00, 0xff, 0x07, 0x00, 0x00, 0x00, 0x00, /* 0x0600-0x063f */
-  0x00, 0xf8, 0xff, 0xff, 0x00, 0x00, 0x01, 0x00, /* 0x0640-0x067f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0680-0x06bf */
-  0x00, 0x00, 0xc0, 0xbf, 0x9f, 0x3d, 0x00, 0x00, /* 0x06c0-0x06ff */
-  0x00, 0x80, 0x02, 0x00, 0x00, 0x00, 0xff, 0xff, /* 0x0700-0x073f */
-  0xff, 0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0740-0x077f */
-  0x00, 0x00, 0x00, 0x00, 0xc0, 0xff, 0x01, 0x00, /* 0x0780-0x07bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x07c0-0x07ff */
-  /* 0x0800-0x09ff */
-  0x00, 0x00, 0xc0, 0xfb, 0xef, 0x3e, 0x00, 0x00, /* 0x0800-0x083f */
-  0x00, 0x00, 0x00, 0x0e, 0x00, 0x00, 0x00, 0x00, /* 0x0840-0x087f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0880-0x08bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x08c0-0x08ff */
-  0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x14, /* 0x0900-0x093f */
-  0xfe, 0x21, 0xfe, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0940-0x097f */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0980-0x09bf */
-  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x09c0-0x09ff */
-  /* 0x0a00-0x0bff */
-  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a00-0x0a3f */
-  0x86, 0x39, 0x02, 0x00, 0x00, 0x00, 0x23, 0x00, /* 0x0a40-0x0a7f */
-  0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0a80-0x0abf */
-  0xbe, 0x21, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0ac0-0x0aff */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x90, /* 0x0b00-0x0b3f */
-  0x1e, 0x20, 0x40, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0b40-0x0b7f */
-  0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0b80-0x0bbf */
-  0x01, 0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0bc0-0x0bff */
-  /* 0x0c00-0x0dff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc0, /* 0x0c00-0x0c3f */
-  0xc1, 0x3d, 0x60, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0c40-0x0c7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x10, /* 0x0c80-0x0cbf */
-  0x00, 0x30, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0cc0-0x0cff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d00-0x0d3f */
-  0x1e, 0x20, 0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, /* 0x0d40-0x0d7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0d80-0x0dbf */
-  0x00, 0x04, 0x5c, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0dc0-0x0dff */
-  /* 0x0e00-0x0fff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x07, /* 0x0e00-0x0e3f */
-  0x80, 0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0e40-0x0e7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xf2, 0x1b, /* 0x0e80-0x0ebf */
-  0x00, 0x3f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0ec0-0x0eff */
-  0x00, 0x00, 0x00, 0x03, 0x00, 0x00, 0xa0, 0x02, /* 0x0f00-0x0f3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xfe, 0x7f, /* 0x0f40-0x0f7f */
-  0xdf, 0xe0, 0xff, 0xfe, 0xff, 0xff, 0xff, 0x1f, /* 0x0f80-0x0fbf */
-  0x40, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x0fc0-0x0fff */
-  /* 0x1000-0x11ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xe0, 0xfd, 0x66, /* 0x1000-0x103f */
-  0x00, 0x00, 0x00, 0xc3, 0x01, 0x00, 0x1e, 0x00, /* 0x1040-0x107f */
-  0x64, 0x20, 0x00, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x1080-0x10bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10c0-0x10ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1100-0x113f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1140-0x117f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1180-0x11bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11c0-0x11ff */
-  /* 0x1200-0x13ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1200-0x123f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1240-0x127f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1280-0x12bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x12c0-0x12ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1300-0x133f */
-  0x00, 0x00, 0x00, 0xe0, 0x00, 0x00, 0x00, 0x00, /* 0x1340-0x137f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1380-0x13bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x13c0-0x13ff */
-  /* 0x1600-0x17ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1600-0x163f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1640-0x167f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1680-0x16bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x16c0-0x16ff */
-  0x00, 0x00, 0x1c, 0x00, 0x00, 0x00, 0x1c, 0x00, /* 0x1700-0x173f */
-  0x00, 0x00, 0x0c, 0x00, 0x00, 0x00, 0x0c, 0x00, /* 0x1740-0x177f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xb0, 0x3f, /* 0x1780-0x17bf */
-  0x40, 0xfe, 0x0f, 0x20, 0x00, 0x00, 0x00, 0x00, /* 0x17c0-0x17ff */
-  /* 0x1800-0x19ff */
-  0x00, 0x38, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1800-0x183f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1840-0x187f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, /* 0x1880-0x18bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x18c0-0x18ff */
-  0x00, 0x00, 0x00, 0x00, 0x87, 0x01, 0x04, 0x0e, /* 0x1900-0x193f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1940-0x197f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1980-0x19bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x19c0-0x19ff */
-  /* 0x1a00-0x1bff */
-  0x00, 0x00, 0x80, 0x01, 0x00, 0x00, 0x00, 0x00, /* 0x1a00-0x1a3f */
-  0x00, 0x00, 0x40, 0x7f, 0xe5, 0x1f, 0xf8, 0x9f, /* 0x1a40-0x1a7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1a80-0x1abf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1ac0-0x1aff */
-  0x0f, 0x00, 0x00, 0x00, 0x00, 0x00, 0xd0, 0x17, /* 0x1b00-0x1b3f */
-  0x04, 0x00, 0x00, 0x00, 0x00, 0xf8, 0x0f, 0x00, /* 0x1b40-0x1b7f */
-  0x03, 0x00, 0x00, 0x00, 0x3c, 0x03, 0x00, 0x00, /* 0x1b80-0x1bbf */
-  0x00, 0x00, 0x00, 0x00, 0x40, 0xa3, 0x03, 0x00, /* 0x1bc0-0x1bff */
-  /* 0x1c00-0x1dff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xf0, 0xcf, 0x00, /* 0x1c00-0x1c3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c40-0x1c7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1c80-0x1cbf */
-  0x00, 0x00, 0xf7, 0xff, 0xfd, 0x21, 0x00, 0x00, /* 0x1cc0-0x1cff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d00-0x1d3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d40-0x1d7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d80-0x1dbf */
-  0xff, 0xff, 0xff, 0xff, 0x7f, 0x00, 0x00, 0xf0, /* 0x1dc0-0x1dff */
-  /* 0x2000-0x21ff */
-  0x00, 0xf8, 0x00, 0x00, 0x00, 0x7c, 0x00, 0x00, /* 0x2000-0x203f */
-  0x00, 0x00, 0x00, 0x00, 0x1f, 0xfc, 0x00, 0x00, /* 0x2040-0x207f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2080-0x20bf */
-  0x00, 0x00, 0xff, 0xff, 0xff, 0xff, 0x01, 0x00, /* 0x20c0-0x20ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2100-0x213f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2140-0x217f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2180-0x21bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x21c0-0x21ff */
-  /* 0x2c00-0x2dff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c00-0x2c3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c40-0x2c7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2c80-0x2cbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0x00, /* 0x2cc0-0x2cff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d00-0x2d3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0x2d40-0x2d7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x2d80-0x2dbf */
-  0x00, 0x00, 0x00, 0x00, 0xff, 0xff, 0xff, 0xff, /* 0x2dc0-0x2dff */
-  /* 0x3000-0x31ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0xfc, 0x00, 0x00, /* 0x3000-0x303f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3040-0x307f */
-  0x00, 0x00, 0x00, 0x06, 0x00, 0x00, 0x00, 0x00, /* 0x3080-0x30bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x30c0-0x30ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3100-0x313f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3140-0x317f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x3180-0x31bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x31c0-0x31ff */
-  /* 0xa600-0xa7ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa600-0xa63f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x80, 0x07, 0x30, /* 0xa640-0xa67f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa680-0xa6bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00, /* 0xa6c0-0xa6ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa700-0xa73f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa740-0xa77f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa780-0xa7bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa7c0-0xa7ff */
-  /* 0xa800-0xa9ff */
-  0x44, 0x08, 0x00, 0x00, 0x60, 0x00, 0x00, 0x00, /* 0xa800-0xa83f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa840-0xa87f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa880-0xa8bf */
-  0x10, 0x00, 0x00, 0x00, 0xff, 0xff, 0x03, 0x00, /* 0xa8c0-0xa8ff */
-  0x00, 0x00, 0x00, 0x00, 0xc0, 0x3f, 0x00, 0x00, /* 0xa900-0xa93f */
-  0x80, 0xff, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa940-0xa97f */
-  0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0xc8, 0x13, /* 0xa980-0xa9bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xa9c0-0xa9ff */
-  /* 0xaa00-0xabff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x7e, 0x66, 0x00, /* 0xaa00-0xaa3f */
-  0x08, 0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaa40-0xaa7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x9d, 0xc1, /* 0xaa80-0xaabf */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xaac0-0xaaff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab00-0xab3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab40-0xab7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xab80-0xabbf */
-  0x00, 0x00, 0x00, 0x00, 0x20, 0x21, 0x00, 0x00, /* 0xabc0-0xabff */
-  /* 0xfa00-0xfbff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa00-0xfa3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa40-0xfa7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfa80-0xfabf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfac0-0xfaff */
-  0x00, 0x00, 0x00, 0x40, 0x00, 0x00, 0x00, 0x00, /* 0xfb00-0xfb3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb40-0xfb7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfb80-0xfbbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfbc0-0xfbff */
-  /* 0xfe00-0xffff */
-  0xff, 0xff, 0x00, 0x00, 0x7f, 0x00, 0x00, 0x00, /* 0xfe00-0xfe3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe40-0xfe7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xfe80-0xfebf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x80, /* 0xfec0-0xfeff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff00-0xff3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff40-0xff7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0xff80-0xffbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, /* 0xffc0-0xffff */
-  /* 0x10000-0x101ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10000-0x1003f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10040-0x1007f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10080-0x100bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x100c0-0x100ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10100-0x1013f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10140-0x1017f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10180-0x101bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x20, /* 0x101c0-0x101ff */
-  /* 0x10a00-0x10bff */
-  0x6e, 0xf0, 0x00, 0x00, 0x00, 0x00, 0x00, 0x87, /* 0x10a00-0x10a3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a40-0x10a7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10a80-0x10abf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10ac0-0x10aff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b00-0x10b3f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b40-0x10b7f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10b80-0x10bbf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x10bc0-0x10bff */
-  /* 0x11000-0x111ff */
-  0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xff, /* 0x11000-0x1103f */
-  0x7f, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11040-0x1107f */
-  0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x78, 0x26, /* 0x11080-0x110bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x110c0-0x110ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11100-0x1113f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11140-0x1117f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x11180-0x111bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x111c0-0x111ff */
-  /* 0x1d000-0x1d1ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d000-0x1d03f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d040-0x1d07f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d080-0x1d0bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d0c0-0x1d0ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d100-0x1d13f */
-  0x00, 0x00, 0x00, 0x00, 0x80, 0x03, 0xf8, 0xff, /* 0x1d140-0x1d17f */
-  0xe7, 0x0f, 0x00, 0x00, 0x00, 0x3c, 0x00, 0x00, /* 0x1d180-0x1d1bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d1c0-0x1d1ff */
-  /* 0x1d200-0x1d3ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d200-0x1d23f */
-  0x1c, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d240-0x1d27f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d280-0x1d2bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d2c0-0x1d2ff */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d300-0x1d33f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d340-0x1d37f */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, /* 0x1d380-0x1d3bf */
-  0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00  /* 0x1d3c0-0x1d3ff */
-};
-static const signed char nonspacing_table_ind[240] = {
-   0,  1,  2,  3,  4,  5,  6,  7, /* 0x0000-0x0fff */
-   8,  9, -1, 10, 11, 12, 13, -1, /* 0x1000-0x1fff */
-  14, -1, -1, -1, -1, -1, 15, -1, /* 0x2000-0x2fff */
-  16, -1, -1, -1, -1, -1, -1, -1, /* 0x3000-0x3fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x4000-0x4fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x5000-0x5fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x6000-0x6fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x7000-0x7fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x8000-0x8fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x9000-0x9fff */
-  -1, -1, -1, 17, 18, 19, -1, -1, /* 0xa000-0xafff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xb000-0xbfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xc000-0xcfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xd000-0xdfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0xe000-0xefff */
-  -1, -1, -1, -1, -1, 20, -1, 21, /* 0xf000-0xffff */
-  22, -1, -1, -1, -1, 23, -1, -1, /* 0x10000-0x10fff */
-  24, -1, -1, -1, -1, -1, -1, -1, /* 0x11000-0x11fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x12000-0x12fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x13000-0x13fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x14000-0x14fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x15000-0x15fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x16000-0x16fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x17000-0x17fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x18000-0x18fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x19000-0x19fff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1a000-0x1afff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1b000-0x1bfff */
-  -1, -1, -1, -1, -1, -1, -1, -1, /* 0x1c000-0x1cfff */
-  25, 26, -1, -1, -1, -1, -1, -1  /* 0x1d000-0x1dfff */
-};
-
-/* Determine number of column positions required for UC.  */
-int
-uc_width (ucs4_t uc, const char *encoding)
-{
-  /* Test for non-spacing or control character.  */
-  if ((uc >> 9) < 240)
-    {
-      int ind = nonspacing_table_ind[uc >> 9];
-      if (ind >= 0)
-        if ((nonspacing_table_data[64*ind + ((uc >> 3) & 63)] >> (uc & 7)) & 1)
-          {
-            if (uc > 0 && uc < 0xa0)
-              return -1;
-            else
-              return 0;
-          }
-    }
-  else if ((uc >> 9) == (0xe0000 >> 9))
-    {
-      if (uc >= 0xe0100)
-        {
-          if (uc <= 0xe01ef)
-            return 0;
-        }
-      else
-        {
-          if (uc >= 0xe0020 ? uc <= 0xe007f : uc == 0xe0001)
-            return 0;
-        }
-    }
-  /* Test for double-width character.
-   * Generated from "grep '^[^;]\{4,5\};[WF]' EastAsianWidth.txt"
-   * and            "grep '^[^;]\{4,5\};[^WF]' EastAsianWidth.txt"
-   */
-  if (uc >= 0x1100
-      && ((uc < 0x1160) /* Hangul Jamo */
-          || (uc >= 0x2329 && uc < 0x232b) /* Angle Brackets */
-          || (uc >= 0x2e80 && uc < 0xa4d0  /* CJK ... Yi */
-              && !(uc == 0x303f) && !(uc >= 0x4dc0 && uc < 0x4e00))
-          || (uc >= 0xac00 && uc < 0xd7a4) /* Hangul Syllables */
-          || (uc >= 0xf900 && uc < 0xfb00) /* CJK Compatibility Ideographs */
-          || (uc >= 0xfe10 && uc < 0xfe20) /* Presentation Forms for Vertical */
-          || (uc >= 0xfe30 && uc < 0xfe70) /* CJK Compatibility Forms */
-          || (uc >= 0xff00 && uc < 0xff61) /* Fullwidth Forms */
-          || (uc >= 0xffe0 && uc < 0xffe7) /* Fullwidth Signs */
-          || (uc >= 0x20000 && uc <= 0x2ffff) /* Supplementary Ideographic Plane */
-          || (uc >= 0x30000 && uc <= 0x3ffff) /* Tertiary Ideographic Plane */
-     )   )
-    return 2;
-  /* In ancient CJK encodings, Cyrillic and most other characters are
-     double-width as well.  */
-  if (uc >= 0x00A1 && uc < 0xFF61 && uc != 0x20A9
-      && is_cjk_encoding (encoding))
-    return 2;
-  return 1;
-}
diff --git a/src/libs/gnulib/lib/verify.h b/src/libs/gnulib/lib/verify.h
deleted file mode 100644 (file)
index a25e514..0000000
+++ /dev/null
@@ -1,279 +0,0 @@
-/* Compile-time assert-like macros.
-
-   Copyright (C) 2005-2006, 2009-2014 Free Software Foundation, Inc.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Paul Eggert, Bruno Haible, and Jim Meyering.  */
-
-#ifndef _GL_VERIFY_H
-#define _GL_VERIFY_H
-
-
-/* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11.
-   This is supported by GCC 4.6.0 and later, in C mode, and its use
-   here generates easier-to-read diagnostics when verify (R) fails.
-
-   Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11.
-   This will likely be supported by future GCC versions, in C++ mode.
-
-   Use this only with GCC.  If we were willing to slow 'configure'
-   down we could also use it with other compilers, but since this
-   affects only the quality of diagnostics, why bother?  */
-#if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \
-     && (201112L <= __STDC_VERSION__  || !defined __STRICT_ANSI__) \
-     && !defined __cplusplus)
-# define _GL_HAVE__STATIC_ASSERT 1
-#endif
-/* The condition (99 < __GNUC__) is temporary, until we know about the
-   first G++ release that supports static_assert.  */
-#if (99 < __GNUC__) && defined __cplusplus
-# define _GL_HAVE_STATIC_ASSERT 1
-#endif
-
-/* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other
-   system headers, defines a conflicting _Static_assert that is no
-   better than ours; override it.  */
-#ifndef _GL_HAVE_STATIC_ASSERT
-# include <stddef.h>
-# undef _Static_assert
-#endif
-
-/* Each of these macros verifies that its argument R is nonzero.  To
-   be portable, R should be an integer constant expression.  Unlike
-   assert (R), there is no run-time overhead.
-
-   If _Static_assert works, verify (R) uses it directly.  Similarly,
-   _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct
-   that is an operand of sizeof.
-
-   The code below uses several ideas for C++ compilers, and for C
-   compilers that do not support _Static_assert:
-
-   * The first step is ((R) ? 1 : -1).  Given an expression R, of
-     integral or boolean or floating-point type, this yields an
-     expression of integral type, whose value is later verified to be
-     constant and nonnegative.
-
-   * Next this expression W is wrapped in a type
-     struct _gl_verify_type {
-       unsigned int _gl_verify_error_if_negative: W;
-     }.
-     If W is negative, this yields a compile-time error.  No compiler can
-     deal with a bit-field of negative size.
-
-     One might think that an array size check would have the same
-     effect, that is, that the type struct { unsigned int dummy[W]; }
-     would work as well.  However, inside a function, some compilers
-     (such as C++ compilers and GNU C) allow local parameters and
-     variables inside array size expressions.  With these compilers,
-     an array size check would not properly diagnose this misuse of
-     the verify macro:
-
-       void function (int n) { verify (n < 0); }
-
-   * For the verify macro, the struct _gl_verify_type will need to
-     somehow be embedded into a declaration.  To be portable, this
-     declaration must declare an object, a constant, a function, or a
-     typedef name.  If the declared entity uses the type directly,
-     such as in
-
-       struct dummy {...};
-       typedef struct {...} dummy;
-       extern struct {...} *dummy;
-       extern void dummy (struct {...} *);
-       extern struct {...} *dummy (void);
-
-     two uses of the verify macro would yield colliding declarations
-     if the entity names are not disambiguated.  A workaround is to
-     attach the current line number to the entity name:
-
-       #define _GL_CONCAT0(x, y) x##y
-       #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
-       extern struct {...} * _GL_CONCAT (dummy, __LINE__);
-
-     But this has the problem that two invocations of verify from
-     within the same macro would collide, since the __LINE__ value
-     would be the same for both invocations.  (The GCC __COUNTER__
-     macro solves this problem, but is not portable.)
-
-     A solution is to use the sizeof operator.  It yields a number,
-     getting rid of the identity of the type.  Declarations like
-
-       extern int dummy [sizeof (struct {...})];
-       extern void dummy (int [sizeof (struct {...})]);
-       extern int (*dummy (void)) [sizeof (struct {...})];
-
-     can be repeated.
-
-   * Should the implementation use a named struct or an unnamed struct?
-     Which of the following alternatives can be used?
-
-       extern int dummy [sizeof (struct {...})];
-       extern int dummy [sizeof (struct _gl_verify_type {...})];
-       extern void dummy (int [sizeof (struct {...})]);
-       extern void dummy (int [sizeof (struct _gl_verify_type {...})]);
-       extern int (*dummy (void)) [sizeof (struct {...})];
-       extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})];
-
-     In the second and sixth case, the struct type is exported to the
-     outer scope; two such declarations therefore collide.  GCC warns
-     about the first, third, and fourth cases.  So the only remaining
-     possibility is the fifth case:
-
-       extern int (*dummy (void)) [sizeof (struct {...})];
-
-   * GCC warns about duplicate declarations of the dummy function if
-     -Wredundant-decls is used.  GCC 4.3 and later have a builtin
-     __COUNTER__ macro that can let us generate unique identifiers for
-     each dummy function, to suppress this warning.
-
-   * This implementation exploits the fact that older versions of GCC,
-     which do not support _Static_assert, also do not warn about the
-     last declaration mentioned above.
-
-   * GCC warns if -Wnested-externs is enabled and verify() is used
-     within a function body; but inside a function, you can always
-     arrange to use verify_expr() instead.
-
-   * In C++, any struct definition inside sizeof is invalid.
-     Use a template type to work around the problem.  */
-
-/* Concatenate two preprocessor tokens.  */
-#define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y)
-#define _GL_CONCAT0(x, y) x##y
-
-/* _GL_COUNTER is an integer, preferably one that changes each time we
-   use it.  Use __COUNTER__ if it works, falling back on __LINE__
-   otherwise.  __LINE__ isn't perfect, but it's better than a
-   constant.  */
-#if defined __COUNTER__ && __COUNTER__ != __COUNTER__
-# define _GL_COUNTER __COUNTER__
-#else
-# define _GL_COUNTER __LINE__
-#endif
-
-/* Generate a symbol with the given prefix, making it unique if
-   possible.  */
-#define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER)
-
-/* Verify requirement R at compile-time, as an integer constant expression
-   that returns 1.  If R is false, fail at compile-time, preferably
-   with a diagnostic that includes the string-literal DIAGNOSTIC.  */
-
-#define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \
-   (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC)))
-
-#ifdef __cplusplus
-# if !GNULIB_defined_struct__gl_verify_type
-template <int w>
-  struct _gl_verify_type {
-    unsigned int _gl_verify_error_if_negative: w;
-  };
-#  define GNULIB_defined_struct__gl_verify_type 1
-# endif
-# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
-    _gl_verify_type<(R) ? 1 : -1>
-#elif defined _GL_HAVE__STATIC_ASSERT
-# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
-    struct {                                   \
-      _Static_assert (R, DIAGNOSTIC);          \
-      int _gl_dummy;                          \
-    }
-#else
-# define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \
-    struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; }
-#endif
-
-/* Verify requirement R at compile-time, as a declaration without a
-   trailing ';'.  If R is false, fail at compile-time, preferably
-   with a diagnostic that includes the string-literal DIAGNOSTIC.
-
-   Unfortunately, unlike C11, this implementation must appear as an
-   ordinary declaration, and cannot appear inside struct { ... }.  */
-
-#ifdef _GL_HAVE__STATIC_ASSERT
-# define _GL_VERIFY _Static_assert
-#else
-# define _GL_VERIFY(R, DIAGNOSTIC)                                    \
-    extern int (*_GL_GENSYM (_gl_verify_function) (void))             \
-      [_GL_VERIFY_TRUE (R, DIAGNOSTIC)]
-#endif
-
-/* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h.  */
-#ifdef _GL_STATIC_ASSERT_H
-# if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert
-#  define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC)
-# endif
-# if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert
-#  define static_assert _Static_assert /* C11 requires this #define.  */
-# endif
-#endif
-
-/* @assert.h omit start@  */
-
-/* Each of these macros verifies that its argument R is nonzero.  To
-   be portable, R should be an integer constant expression.  Unlike
-   assert (R), there is no run-time overhead.
-
-   There are two macros, since no single macro can be used in all
-   contexts in C.  verify_true (R) is for scalar contexts, including
-   integer constant expression contexts.  verify (R) is for declaration
-   contexts, e.g., the top level.  */
-
-/* Verify requirement R at compile-time, as an integer constant expression.
-   Return 1.  This is equivalent to verify_expr (R, 1).
-
-   verify_true is obsolescent; please use verify_expr instead.  */
-
-#define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")")
-
-/* Verify requirement R at compile-time.  Return the value of the
-   expression E.  */
-
-#define verify_expr(R, E) \
-   (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E))
-
-/* Verify requirement R at compile-time, as a declaration without a
-   trailing ';'.  */
-
-#define verify(R) _GL_VERIFY (R, "verify (" #R ")")
-
-#ifndef __has_builtin
-# define __has_builtin(x) 0
-#endif
-
-/* Assume that R always holds.  This lets the compiler optimize
-   accordingly.  R should not have side-effects; it may or may not be
-   evaluated.  Behavior is undefined if R is false.  */
-
-#if (__has_builtin (__builtin_unreachable) \
-     || 4 < __GNUC__ + (5 <= __GNUC_MINOR__))
-# define assume(R) ((R) ? (void) 0 : __builtin_unreachable ())
-#elif 1200 <= _MSC_VER
-# define assume(R) __assume (R)
-#elif (defined lint \
-       && (__has_builtin (__builtin_trap) \
-           || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__))))
-  /* Doing it this way helps various packages when configured with
-     --enable-gcc-warnings, which compiles with -Dlint.  It's nicer
-     when 'assume' silences warnings even with older GCCs.  */
-# define assume(R) ((R) ? (void) 0 : __builtin_trap ())
-#else
-# define assume(R) ((void) (0 && (R)))
-#endif
-
-/* @assert.h omit end@  */
-
-#endif
diff --git a/src/libs/gnulib/lib/wchar.in.h b/src/libs/gnulib/lib/wchar.in.h
deleted file mode 100644 (file)
index a512d58..0000000
+++ /dev/null
@@ -1,1028 +0,0 @@
-/* A substitute for ISO C99 <wchar.h>, for platforms that have issues.
-
-   Copyright (C) 2007-2014 Free Software Foundation, Inc.
-
-   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, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Eric Blake.  */
-
-/*
- * ISO C 99 <wchar.h> for platforms that have issues.
- * <http://www.opengroup.org/susv3xbd/wchar.h.html>
- *
- * For now, this just ensures proper prerequisite inclusion order and
- * the declaration of wcwidth().
- */
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-@PRAGMA_COLUMNS@
-
-#if defined __need_mbstate_t || defined __need_wint_t || (defined __hpux && ((defined _INTTYPES_INCLUDED && !defined strtoimax) || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) || defined _GL_ALREADY_INCLUDING_WCHAR_H
-/* Special invocation convention:
-   - Inside glibc and uClibc header files.
-   - On HP-UX 11.00 we have a sequence of nested includes
-     <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>,
-     once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h>
-     and once directly.  In both situations 'wint_t' is not yet defined,
-     therefore we cannot provide the function overrides; instead include only
-     the system's <wchar.h>.
-   - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and
-     the latter includes <wchar.h>.  But here, we have no way to detect whether
-     <wctype.h> is completely included or is still being included.  */
-
-#@INCLUDE_NEXT@ @NEXT_WCHAR_H@
-
-#else
-/* Normal invocation convention.  */
-
-#ifndef _@GUARD_PREFIX@_WCHAR_H
-
-#define _GL_ALREADY_INCLUDING_WCHAR_H
-
-#if @HAVE_FEATURES_H@
-# include <features.h> /* for __GLIBC__ */
-#endif
-
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.
-   In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined
-   by <stddef.h>.
-   But avoid namespace pollution on glibc systems.  */
-#if !(defined __GLIBC__ && !defined __UCLIBC__)
-# include <stddef.h>
-#endif
-#ifndef __GLIBC__
-# include <stdio.h>
-# include <time.h>
-#endif
-
-/* Include the original <wchar.h> if it exists.
-   Some builds of uClibc lack it.  */
-/* The include_next requires a split double-inclusion guard.  */
-#if @HAVE_WCHAR_H@
-# @INCLUDE_NEXT@ @NEXT_WCHAR_H@
-#endif
-
-#undef _GL_ALREADY_INCLUDING_WCHAR_H
-
-#ifndef _@GUARD_PREFIX@_WCHAR_H
-#define _@GUARD_PREFIX@_WCHAR_H
-
-/* The __attribute__ feature is available in gcc versions 2.5 and later.
-   The attribute __pure__ was added in gcc 2.96.  */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
-# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
-#else
-# define _GL_ATTRIBUTE_PURE /* empty */
-#endif
-
-/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
-
-/* The definition of _GL_ARG_NONNULL is copied here.  */
-
-/* The definition of _GL_WARN_ON_USE is copied here.  */
-
-
-/* Define wint_t and WEOF.  (Also done in wctype.in.h.)  */
-#if !@HAVE_WINT_T@ && !defined wint_t
-# define wint_t int
-# ifndef WEOF
-#  define WEOF -1
-# endif
-#else
-/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
-   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
-   "unchanged by default argument promotions".  Override it.  */
-# if defined _MSC_VER
-#  if !GNULIB_defined_wint_t
-#   include <crtdefs.h>
-typedef unsigned int rpl_wint_t;
-#   undef wint_t
-#   define wint_t rpl_wint_t
-#   define GNULIB_defined_wint_t 1
-#  endif
-# endif
-# ifndef WEOF
-#  define WEOF ((wint_t) -1)
-# endif
-#endif
-
-
-/* Override mbstate_t if it is too small.
-   On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for
-   implementing mbrtowc for encodings like UTF-8.  */
-#if !(@HAVE_MBSINIT@ && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@
-# if !GNULIB_defined_mbstate_t
-typedef int rpl_mbstate_t;
-#  undef mbstate_t
-#  define mbstate_t rpl_mbstate_t
-#  define GNULIB_defined_mbstate_t 1
-# endif
-#endif
-
-
-/* Convert a single-byte character to a wide character.  */
-#if @GNULIB_BTOWC@
-# if @REPLACE_BTOWC@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef btowc
-#   define btowc rpl_btowc
-#  endif
-_GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
-_GL_CXXALIAS_RPL (btowc, wint_t, (int c));
-# else
-#  if !@HAVE_BTOWC@
-_GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE);
-#  endif
-_GL_CXXALIAS_SYS (btowc, wint_t, (int c));
-# endif
-_GL_CXXALIASWARN (btowc);
-#elif defined GNULIB_POSIXCHECK
-# undef btowc
-# if HAVE_RAW_DECL_BTOWC
-_GL_WARN_ON_USE (btowc, "btowc is unportable - "
-                 "use gnulib module btowc for portability");
-# endif
-#endif
-
-
-/* Convert a wide character to a single-byte character.  */
-#if @GNULIB_WCTOB@
-# if @REPLACE_WCTOB@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wctob
-#   define wctob rpl_wctob
-#  endif
-_GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
-_GL_CXXALIAS_RPL (wctob, int, (wint_t wc));
-# else
-#  if !defined wctob && !@HAVE_DECL_WCTOB@
-/* wctob is provided by gnulib, or wctob exists but is not declared.  */
-_GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE);
-#  endif
-_GL_CXXALIAS_SYS (wctob, int, (wint_t wc));
-# endif
-_GL_CXXALIASWARN (wctob);
-#elif defined GNULIB_POSIXCHECK
-# undef wctob
-# if HAVE_RAW_DECL_WCTOB
-_GL_WARN_ON_USE (wctob, "wctob is unportable - "
-                 "use gnulib module wctob for portability");
-# endif
-#endif
-
-
-/* Test whether *PS is in the initial state.  */
-#if @GNULIB_MBSINIT@
-# if @REPLACE_MBSINIT@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbsinit
-#   define mbsinit rpl_mbsinit
-#  endif
-_GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps));
-_GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps));
-# else
-#  if !@HAVE_MBSINIT@
-_GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbsinit);
-#elif defined GNULIB_POSIXCHECK
-# undef mbsinit
-# if HAVE_RAW_DECL_MBSINIT
-_GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - "
-                 "use gnulib module mbsinit for portability");
-# endif
-#endif
-
-
-/* Convert a multibyte character to a wide character.  */
-#if @GNULIB_MBRTOWC@
-# if @REPLACE_MBRTOWC@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbrtowc
-#   define mbrtowc rpl_mbrtowc
-#  endif
-_GL_FUNCDECL_RPL (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-_GL_CXXALIAS_RPL (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-# else
-#  if !@HAVE_MBRTOWC@
-_GL_FUNCDECL_SYS (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (mbrtowc, size_t,
-                  (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbrtowc);
-#elif defined GNULIB_POSIXCHECK
-# undef mbrtowc
-# if HAVE_RAW_DECL_MBRTOWC
-_GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - "
-                 "use gnulib module mbrtowc for portability");
-# endif
-#endif
-
-
-/* Recognize a multibyte character.  */
-#if @GNULIB_MBRLEN@
-# if @REPLACE_MBRLEN@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbrlen
-#   define mbrlen rpl_mbrlen
-#  endif
-_GL_FUNCDECL_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-_GL_CXXALIAS_RPL (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-# else
-#  if !@HAVE_MBRLEN@
-_GL_FUNCDECL_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (mbrlen, size_t, (const char *s, size_t n, mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbrlen);
-#elif defined GNULIB_POSIXCHECK
-# undef mbrlen
-# if HAVE_RAW_DECL_MBRLEN
-_GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - "
-                 "use gnulib module mbrlen for portability");
-# endif
-#endif
-
-
-/* Convert a string to a wide string.  */
-#if @GNULIB_MBSRTOWCS@
-# if @REPLACE_MBSRTOWCS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbsrtowcs
-#   define mbsrtowcs rpl_mbsrtowcs
-#  endif
-_GL_FUNCDECL_RPL (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_MBSRTOWCS@
-_GL_FUNCDECL_SYS (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (mbsrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbsrtowcs);
-#elif defined GNULIB_POSIXCHECK
-# undef mbsrtowcs
-# if HAVE_RAW_DECL_MBSRTOWCS
-_GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - "
-                 "use gnulib module mbsrtowcs for portability");
-# endif
-#endif
-
-
-/* Convert a string to a wide string.  */
-#if @GNULIB_MBSNRTOWCS@
-# if @REPLACE_MBSNRTOWCS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef mbsnrtowcs
-#   define mbsnrtowcs rpl_mbsnrtowcs
-#  endif
-_GL_FUNCDECL_RPL (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_MBSNRTOWCS@
-_GL_FUNCDECL_SYS (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (mbsnrtowcs, size_t,
-                  (wchar_t *dest, const char **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (mbsnrtowcs);
-#elif defined GNULIB_POSIXCHECK
-# undef mbsnrtowcs
-# if HAVE_RAW_DECL_MBSNRTOWCS
-_GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - "
-                 "use gnulib module mbsnrtowcs for portability");
-# endif
-#endif
-
-
-/* Convert a wide character to a multibyte character.  */
-#if @GNULIB_WCRTOMB@
-# if @REPLACE_WCRTOMB@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcrtomb
-#   define wcrtomb rpl_wcrtomb
-#  endif
-_GL_FUNCDECL_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-_GL_CXXALIAS_RPL (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-# else
-#  if !@HAVE_WCRTOMB@
-_GL_FUNCDECL_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-#  endif
-_GL_CXXALIAS_SYS (wcrtomb, size_t, (char *s, wchar_t wc, mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (wcrtomb);
-#elif defined GNULIB_POSIXCHECK
-# undef wcrtomb
-# if HAVE_RAW_DECL_WCRTOMB
-_GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - "
-                 "use gnulib module wcrtomb for portability");
-# endif
-#endif
-
-
-/* Convert a wide string to a string.  */
-#if @GNULIB_WCSRTOMBS@
-# if @REPLACE_WCSRTOMBS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcsrtombs
-#   define wcsrtombs rpl_wcsrtombs
-#  endif
-_GL_FUNCDECL_RPL (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_WCSRTOMBS@
-_GL_FUNCDECL_SYS (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len, mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (wcsrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (wcsrtombs);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsrtombs
-# if HAVE_RAW_DECL_WCSRTOMBS
-_GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - "
-                 "use gnulib module wcsrtombs for portability");
-# endif
-#endif
-
-
-/* Convert a wide string to a string.  */
-#if @GNULIB_WCSNRTOMBS@
-# if @REPLACE_WCSNRTOMBS@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcsnrtombs
-#   define wcsnrtombs rpl_wcsnrtombs
-#  endif
-_GL_FUNCDECL_RPL (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-_GL_CXXALIAS_RPL (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# else
-#  if !@HAVE_WCSNRTOMBS@
-_GL_FUNCDECL_SYS (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps)
-                  _GL_ARG_NONNULL ((2)));
-#  endif
-_GL_CXXALIAS_SYS (wcsnrtombs, size_t,
-                  (char *dest, const wchar_t **srcp, size_t srclen, size_t len,
-                   mbstate_t *ps));
-# endif
-_GL_CXXALIASWARN (wcsnrtombs);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsnrtombs
-# if HAVE_RAW_DECL_WCSNRTOMBS
-_GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - "
-                 "use gnulib module wcsnrtombs for portability");
-# endif
-#endif
-
-
-/* Return the number of screen columns needed for WC.  */
-#if @GNULIB_WCWIDTH@
-# if @REPLACE_WCWIDTH@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcwidth
-#   define wcwidth rpl_wcwidth
-#  endif
-_GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
-_GL_CXXALIAS_RPL (wcwidth, int, (wchar_t));
-# else
-#  if !@HAVE_DECL_WCWIDTH@
-/* wcwidth exists but is not declared.  */
-_GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE);
-#  endif
-_GL_CXXALIAS_SYS (wcwidth, int, (wchar_t));
-# endif
-_GL_CXXALIASWARN (wcwidth);
-#elif defined GNULIB_POSIXCHECK
-# undef wcwidth
-# if HAVE_RAW_DECL_WCWIDTH
-_GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - "
-                 "use gnulib module wcwidth for portability");
-# endif
-#endif
-
-
-/* Search N wide characters of S for C.  */
-#if @GNULIB_WMEMCHR@
-# if !@HAVE_WMEMCHR@
-_GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n)
-                                      _GL_ATTRIBUTE_PURE);
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" {
-         const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t);
-         wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t);
-       }  */
-_GL_CXXALIAS_SYS_CAST2 (wmemchr,
-                        wchar_t *, (const wchar_t *, wchar_t, size_t),
-                        const wchar_t *, (const wchar_t *, wchar_t, size_t));
-# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
-_GL_CXXALIASWARN1 (wmemchr, const wchar_t *,
-                   (const wchar_t *s, wchar_t c, size_t n));
-# else
-_GL_CXXALIASWARN (wmemchr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wmemchr
-# if HAVE_RAW_DECL_WMEMCHR
-_GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - "
-                 "use gnulib module wmemchr for portability");
-# endif
-#endif
-
-
-/* Compare N wide characters of S1 and S2.  */
-#if @GNULIB_WMEMCMP@
-# if !@HAVE_WMEMCMP@
-_GL_FUNCDECL_SYS (wmemcmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n)
-                  _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wmemcmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n));
-_GL_CXXALIASWARN (wmemcmp);
-#elif defined GNULIB_POSIXCHECK
-# undef wmemcmp
-# if HAVE_RAW_DECL_WMEMCMP
-_GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - "
-                 "use gnulib module wmemcmp for portability");
-# endif
-#endif
-
-
-/* Copy N wide characters of SRC to DEST.  */
-#if @GNULIB_WMEMCPY@
-# if !@HAVE_WMEMCPY@
-_GL_FUNCDECL_SYS (wmemcpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wmemcpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-_GL_CXXALIASWARN (wmemcpy);
-#elif defined GNULIB_POSIXCHECK
-# undef wmemcpy
-# if HAVE_RAW_DECL_WMEMCPY
-_GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - "
-                 "use gnulib module wmemcpy for portability");
-# endif
-#endif
-
-
-/* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for
-   overlapping memory areas.  */
-#if @GNULIB_WMEMMOVE@
-# if !@HAVE_WMEMMOVE@
-_GL_FUNCDECL_SYS (wmemmove, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wmemmove, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-_GL_CXXALIASWARN (wmemmove);
-#elif defined GNULIB_POSIXCHECK
-# undef wmemmove
-# if HAVE_RAW_DECL_WMEMMOVE
-_GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - "
-                 "use gnulib module wmemmove for portability");
-# endif
-#endif
-
-
-/* Set N wide characters of S to C.  */
-#if @GNULIB_WMEMSET@
-# if !@HAVE_WMEMSET@
-_GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n));
-_GL_CXXALIASWARN (wmemset);
-#elif defined GNULIB_POSIXCHECK
-# undef wmemset
-# if HAVE_RAW_DECL_WMEMSET
-_GL_WARN_ON_USE (wmemset, "wmemset is unportable - "
-                 "use gnulib module wmemset for portability");
-# endif
-#endif
-
-
-/* Return the number of wide characters in S.  */
-#if @GNULIB_WCSLEN@
-# if !@HAVE_WCSLEN@
-_GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s));
-_GL_CXXALIASWARN (wcslen);
-#elif defined GNULIB_POSIXCHECK
-# undef wcslen
-# if HAVE_RAW_DECL_WCSLEN
-_GL_WARN_ON_USE (wcslen, "wcslen is unportable - "
-                 "use gnulib module wcslen for portability");
-# endif
-#endif
-
-
-/* Return the number of wide characters in S, but at most MAXLEN.  */
-#if @GNULIB_WCSNLEN@
-# if !@HAVE_WCSNLEN@
-_GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)
-                                   _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen));
-_GL_CXXALIASWARN (wcsnlen);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsnlen
-# if HAVE_RAW_DECL_WCSNLEN
-_GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - "
-                 "use gnulib module wcsnlen for portability");
-# endif
-#endif
-
-
-/* Copy SRC to DEST.  */
-#if @GNULIB_WCSCPY@
-# if !@HAVE_WCSCPY@
-_GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
-# endif
-_GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
-_GL_CXXALIASWARN (wcscpy);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscpy
-# if HAVE_RAW_DECL_WCSCPY
-_GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - "
-                 "use gnulib module wcscpy for portability");
-# endif
-#endif
-
-
-/* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST.  */
-#if @GNULIB_WCPCPY@
-# if !@HAVE_WCPCPY@
-_GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
-# endif
-_GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *dest, const wchar_t *src));
-_GL_CXXALIASWARN (wcpcpy);
-#elif defined GNULIB_POSIXCHECK
-# undef wcpcpy
-# if HAVE_RAW_DECL_WCPCPY
-_GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - "
-                 "use gnulib module wcpcpy for portability");
-# endif
-#endif
-
-
-/* Copy no more than N wide characters of SRC to DEST.  */
-#if @GNULIB_WCSNCPY@
-# if !@HAVE_WCSNCPY@
-_GL_FUNCDECL_SYS (wcsncpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wcsncpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-_GL_CXXALIASWARN (wcsncpy);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsncpy
-# if HAVE_RAW_DECL_WCSNCPY
-_GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - "
-                 "use gnulib module wcsncpy for portability");
-# endif
-#endif
-
-
-/* Copy no more than N characters of SRC to DEST, returning the address of
-   the last character written into DEST.  */
-#if @GNULIB_WCPNCPY@
-# if !@HAVE_WCPNCPY@
-_GL_FUNCDECL_SYS (wcpncpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wcpncpy, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-_GL_CXXALIASWARN (wcpncpy);
-#elif defined GNULIB_POSIXCHECK
-# undef wcpncpy
-# if HAVE_RAW_DECL_WCPNCPY
-_GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - "
-                 "use gnulib module wcpncpy for portability");
-# endif
-#endif
-
-
-/* Append SRC onto DEST.  */
-#if @GNULIB_WCSCAT@
-# if !@HAVE_WCSCAT@
-_GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
-# endif
-_GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *dest, const wchar_t *src));
-_GL_CXXALIASWARN (wcscat);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscat
-# if HAVE_RAW_DECL_WCSCAT
-_GL_WARN_ON_USE (wcscat, "wcscat is unportable - "
-                 "use gnulib module wcscat for portability");
-# endif
-#endif
-
-
-/* Append no more than N wide characters of SRC onto DEST.  */
-#if @GNULIB_WCSNCAT@
-# if !@HAVE_WCSNCAT@
-_GL_FUNCDECL_SYS (wcsncat, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wcsncat, wchar_t *,
-                  (wchar_t *dest, const wchar_t *src, size_t n));
-_GL_CXXALIASWARN (wcsncat);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsncat
-# if HAVE_RAW_DECL_WCSNCAT
-_GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - "
-                 "use gnulib module wcsncat for portability");
-# endif
-#endif
-
-
-/* Compare S1 and S2.  */
-#if @GNULIB_WCSCMP@
-# if !@HAVE_WCSCMP@
-_GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)
-                               _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2));
-_GL_CXXALIASWARN (wcscmp);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscmp
-# if HAVE_RAW_DECL_WCSCMP
-_GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - "
-                 "use gnulib module wcscmp for portability");
-# endif
-#endif
-
-
-/* Compare no more than N wide characters of S1 and S2.  */
-#if @GNULIB_WCSNCMP@
-# if !@HAVE_WCSNCMP@
-_GL_FUNCDECL_SYS (wcsncmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n)
-                  _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcsncmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n));
-_GL_CXXALIASWARN (wcsncmp);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsncmp
-# if HAVE_RAW_DECL_WCSNCMP
-_GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - "
-                 "use gnulib module wcsncmp for portability");
-# endif
-#endif
-
-
-/* Compare S1 and S2, ignoring case.  */
-#if @GNULIB_WCSCASECMP@
-# if !@HAVE_WCSCASECMP@
-_GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)
-                                   _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2));
-_GL_CXXALIASWARN (wcscasecmp);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscasecmp
-# if HAVE_RAW_DECL_WCSCASECMP
-_GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - "
-                 "use gnulib module wcscasecmp for portability");
-# endif
-#endif
-
-
-/* Compare no more than N chars of S1 and S2, ignoring case.  */
-#if @GNULIB_WCSNCASECMP@
-# if !@HAVE_WCSNCASECMP@
-_GL_FUNCDECL_SYS (wcsncasecmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n)
-                  _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcsncasecmp, int,
-                  (const wchar_t *s1, const wchar_t *s2, size_t n));
-_GL_CXXALIASWARN (wcsncasecmp);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsncasecmp
-# if HAVE_RAW_DECL_WCSNCASECMP
-_GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - "
-                 "use gnulib module wcsncasecmp for portability");
-# endif
-#endif
-
-
-/* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE
-   category of the current locale.  */
-#if @GNULIB_WCSCOLL@
-# if !@HAVE_WCSCOLL@
-_GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
-# endif
-_GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2));
-_GL_CXXALIASWARN (wcscoll);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscoll
-# if HAVE_RAW_DECL_WCSCOLL
-_GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - "
-                 "use gnulib module wcscoll for portability");
-# endif
-#endif
-
-
-/* Transform S2 into array pointed to by S1 such that if wcscmp is applied
-   to two transformed strings the result is the as applying 'wcscoll' to the
-   original strings.  */
-#if @GNULIB_WCSXFRM@
-# if !@HAVE_WCSXFRM@
-_GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
-# endif
-_GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *s1, const wchar_t *s2, size_t n));
-_GL_CXXALIASWARN (wcsxfrm);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsxfrm
-# if HAVE_RAW_DECL_WCSXFRM
-_GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - "
-                 "use gnulib module wcsxfrm for portability");
-# endif
-#endif
-
-
-/* Duplicate S, returning an identical malloc'd string.  */
-#if @GNULIB_WCSDUP@
-# if !@HAVE_WCSDUP@
-_GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s));
-# endif
-_GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s));
-_GL_CXXALIASWARN (wcsdup);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsdup
-# if HAVE_RAW_DECL_WCSDUP
-_GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - "
-                 "use gnulib module wcsdup for portability");
-# endif
-#endif
-
-
-/* Find the first occurrence of WC in WCS.  */
-#if @GNULIB_WCSCHR@
-# if !@HAVE_WCSCHR@
-_GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
-                                     _GL_ATTRIBUTE_PURE);
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" {
-         const wchar_t * std::wcschr (const wchar_t *, wchar_t);
-         wchar_t * std::wcschr (wchar_t *, wchar_t);
-       }  */
-_GL_CXXALIAS_SYS_CAST2 (wcschr,
-                        wchar_t *, (const wchar_t *, wchar_t),
-                        const wchar_t *, (const wchar_t *, wchar_t));
-# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc));
-_GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
-# else
-_GL_CXXALIASWARN (wcschr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcschr
-# if HAVE_RAW_DECL_WCSCHR
-_GL_WARN_ON_USE (wcschr, "wcschr is unportable - "
-                 "use gnulib module wcschr for portability");
-# endif
-#endif
-
-
-/* Find the last occurrence of WC in WCS.  */
-#if @GNULIB_WCSRCHR@
-# if !@HAVE_WCSRCHR@
-_GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc)
-                                      _GL_ATTRIBUTE_PURE);
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" {
-         const wchar_t * std::wcsrchr (const wchar_t *, wchar_t);
-         wchar_t * std::wcsrchr (wchar_t *, wchar_t);
-       }  */
-_GL_CXXALIAS_SYS_CAST2 (wcsrchr,
-                        wchar_t *, (const wchar_t *, wchar_t),
-                        const wchar_t *, (const wchar_t *, wchar_t));
-# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc));
-_GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc));
-# else
-_GL_CXXALIASWARN (wcsrchr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcsrchr
-# if HAVE_RAW_DECL_WCSRCHR
-_GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - "
-                 "use gnulib module wcsrchr for portability");
-# endif
-#endif
-
-
-/* Return the length of the initial segmet of WCS which consists entirely
-   of wide characters not in REJECT.  */
-#if @GNULIB_WCSCSPN@
-# if !@HAVE_WCSCSPN@
-_GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)
-                                   _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject));
-_GL_CXXALIASWARN (wcscspn);
-#elif defined GNULIB_POSIXCHECK
-# undef wcscspn
-# if HAVE_RAW_DECL_WCSCSPN
-_GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - "
-                 "use gnulib module wcscspn for portability");
-# endif
-#endif
-
-
-/* Return the length of the initial segmet of WCS which consists entirely
-   of wide characters in ACCEPT.  */
-#if @GNULIB_WCSSPN@
-# if !@HAVE_WCSSPN@
-_GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)
-                                  _GL_ATTRIBUTE_PURE);
-# endif
-_GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept));
-_GL_CXXALIASWARN (wcsspn);
-#elif defined GNULIB_POSIXCHECK
-# undef wcsspn
-# if HAVE_RAW_DECL_WCSSPN
-_GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - "
-                 "use gnulib module wcsspn for portability");
-# endif
-#endif
-
-
-/* Find the first occurrence in WCS of any character in ACCEPT.  */
-#if @GNULIB_WCSPBRK@
-# if !@HAVE_WCSPBRK@
-_GL_FUNCDECL_SYS (wcspbrk, wchar_t *,
-                  (const wchar_t *wcs, const wchar_t *accept)
-                  _GL_ATTRIBUTE_PURE);
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" {
-         const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *);
-         wchar_t * std::wcspbrk (wchar_t *, const wchar_t *);
-       }  */
-_GL_CXXALIAS_SYS_CAST2 (wcspbrk,
-                        wchar_t *, (const wchar_t *, const wchar_t *),
-                        const wchar_t *, (const wchar_t *, const wchar_t *));
-# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (wcspbrk, wchar_t *,
-                   (wchar_t *wcs, const wchar_t *accept));
-_GL_CXXALIASWARN1 (wcspbrk, const wchar_t *,
-                   (const wchar_t *wcs, const wchar_t *accept));
-# else
-_GL_CXXALIASWARN (wcspbrk);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcspbrk
-# if HAVE_RAW_DECL_WCSPBRK
-_GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - "
-                 "use gnulib module wcspbrk for portability");
-# endif
-#endif
-
-
-/* Find the first occurrence of NEEDLE in HAYSTACK.  */
-#if @GNULIB_WCSSTR@
-# if !@HAVE_WCSSTR@
-_GL_FUNCDECL_SYS (wcsstr, wchar_t *,
-                  (const wchar_t *haystack, const wchar_t *needle)
-                  _GL_ATTRIBUTE_PURE);
-# endif
-  /* On some systems, this function is defined as an overloaded function:
-       extern "C++" {
-         const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *);
-         wchar_t * std::wcsstr (wchar_t *, const wchar_t *);
-       }  */
-_GL_CXXALIAS_SYS_CAST2 (wcsstr,
-                        wchar_t *, (const wchar_t *, const wchar_t *),
-                        const wchar_t *, (const wchar_t *, const wchar_t *));
-# if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \
-     && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4))
-_GL_CXXALIASWARN1 (wcsstr, wchar_t *,
-                   (wchar_t *haystack, const wchar_t *needle));
-_GL_CXXALIASWARN1 (wcsstr, const wchar_t *,
-                   (const wchar_t *haystack, const wchar_t *needle));
-# else
-_GL_CXXALIASWARN (wcsstr);
-# endif
-#elif defined GNULIB_POSIXCHECK
-# undef wcsstr
-# if HAVE_RAW_DECL_WCSSTR
-_GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - "
-                 "use gnulib module wcsstr for portability");
-# endif
-#endif
-
-
-/* Divide WCS into tokens separated by characters in DELIM.  */
-#if @GNULIB_WCSTOK@
-# if !@HAVE_WCSTOK@
-_GL_FUNCDECL_SYS (wcstok, wchar_t *,
-                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
-# endif
-_GL_CXXALIAS_SYS (wcstok, wchar_t *,
-                  (wchar_t *wcs, const wchar_t *delim, wchar_t **ptr));
-_GL_CXXALIASWARN (wcstok);
-#elif defined GNULIB_POSIXCHECK
-# undef wcstok
-# if HAVE_RAW_DECL_WCSTOK
-_GL_WARN_ON_USE (wcstok, "wcstok is unportable - "
-                 "use gnulib module wcstok for portability");
-# endif
-#endif
-
-
-/* Determine number of column positions required for first N wide
-   characters (or fewer if S ends before this) in S.  */
-#if @GNULIB_WCSWIDTH@
-# if @REPLACE_WCSWIDTH@
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   undef wcswidth
-#   define wcswidth rpl_wcswidth
-#  endif
-_GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n)
-                                 _GL_ATTRIBUTE_PURE);
-_GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n));
-# else
-#  if !@HAVE_WCSWIDTH@
-_GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n)
-                                 _GL_ATTRIBUTE_PURE);
-#  endif
-_GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n));
-# endif
-_GL_CXXALIASWARN (wcswidth);
-#elif defined GNULIB_POSIXCHECK
-# undef wcswidth
-# if HAVE_RAW_DECL_WCSWIDTH
-_GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - "
-                 "use gnulib module wcswidth for portability");
-# endif
-#endif
-
-
-#endif /* _@GUARD_PREFIX@_WCHAR_H */
-#endif /* _@GUARD_PREFIX@_WCHAR_H */
-#endif
diff --git a/src/libs/gnulib/lib/wctype-h.c b/src/libs/gnulib/lib/wctype-h.c
deleted file mode 100644 (file)
index bb5f847..0000000
+++ /dev/null
@@ -1,4 +0,0 @@
-/* Normally this would be wctype.c, but that name's already taken.  */
-#include <config.h>
-#define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE
-#include "wctype.h"
diff --git a/src/libs/gnulib/lib/wctype.in.h b/src/libs/gnulib/lib/wctype.in.h
deleted file mode 100644 (file)
index e8d097a..0000000
+++ /dev/null
@@ -1,523 +0,0 @@
-/* A substitute for ISO C99 <wctype.h>, for platforms that lack it.
-
-   Copyright (C) 2006-2014 Free Software Foundation, Inc.
-
-   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, see <http://www.gnu.org/licenses/>.  */
-
-/* Written by Bruno Haible and Paul Eggert.  */
-
-/*
- * ISO C 99 <wctype.h> for platforms that lack it.
- * <http://www.opengroup.org/susv3xbd/wctype.h.html>
- *
- * iswctype, towctrans, towlower, towupper, wctrans, wctype,
- * wctrans_t, and wctype_t are not yet implemented.
- */
-
-#ifndef _@GUARD_PREFIX@_WCTYPE_H
-
-#if __GNUC__ >= 3
-@PRAGMA_SYSTEM_HEADER@
-#endif
-@PRAGMA_COLUMNS@
-
-
-/*
- * XXX: As soon as groff uses gnulib in a saner way (i.e., only a single
- *      `config.h' file for the whole package) this file should be replaced
- *      with an unpatched version, not containing the next #include line.
- */
-#include "../config.h"
-
-
-#if @HAVE_WINT_T@
-/* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>.
-   Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-# include <wchar.h>
-#endif
-
-/* mingw has declarations of towupper and towlower in <ctype.h> as
-   well <wctype.h>.  Include <ctype.h> in advance to avoid rpl_ prefix
-   being added to the declarations.  */
-#ifdef __MINGW32__
-# include <ctype.h>
-#endif
-
-/* Include the original <wctype.h> if it exists.
-   BeOS 5 has the functions but no <wctype.h>.  */
-/* The include_next requires a split double-inclusion guard.  */
-#if @HAVE_WCTYPE_H@
-# @INCLUDE_NEXT@ @NEXT_WCTYPE_H@
-#endif
-
-#ifndef _@GUARD_PREFIX@_WCTYPE_H
-#define _@GUARD_PREFIX@_WCTYPE_H
-
-#ifndef _GL_INLINE_HEADER_BEGIN
- #error "Please include config.h first."
-#endif
-_GL_INLINE_HEADER_BEGIN
-#ifndef _GL_WCTYPE_INLINE
-# define _GL_WCTYPE_INLINE _GL_INLINE
-#endif
-
-/* The definitions of _GL_FUNCDECL_RPL etc. are copied here.  */
-
-/* The definition of _GL_WARN_ON_USE is copied here.  */
-
-/* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which
-   #defines a number of identifiers in the application namespace.  Revert
-   these #defines.  */
-#ifdef __sun
-# undef multibyte
-# undef eucw1
-# undef eucw2
-# undef eucw3
-# undef scrw1
-# undef scrw2
-# undef scrw3
-#endif
-
-/* Define wint_t and WEOF.  (Also done in wchar.in.h.)  */
-#if !@HAVE_WINT_T@ && !defined wint_t
-# define wint_t int
-# ifndef WEOF
-#  define WEOF -1
-# endif
-#else
-/* MSVC defines wint_t as 'unsigned short' in <crtdefs.h>.
-   This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be
-   "unchanged by default argument promotions".  Override it.  */
-# if defined _MSC_VER
-#  if !GNULIB_defined_wint_t
-#   include <crtdefs.h>
-typedef unsigned int rpl_wint_t;
-#   undef wint_t
-#   define wint_t rpl_wint_t
-#   define GNULIB_defined_wint_t 1
-#  endif
-# endif
-# ifndef WEOF
-#  define WEOF ((wint_t) -1)
-# endif
-#endif
-
-
-#if !GNULIB_defined_wctype_functions
-
-/* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions.
-   Linux libc5 has <wctype.h> and the functions but they are broken.
-   Assume all 11 functions (all isw* except iswblank) are implemented the
-   same way, or not at all.  */
-# if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@
-
-/* IRIX 5.3 has macros but no functions, its isw* macros refer to an
-   undefined variable _ctmp_ and to <ctype.h> macros like _P, and they
-   refer to system functions like _iswctype that are not in the
-   standard C library.  Rather than try to get ancient buggy
-   implementations like this to work, just disable them.  */
-#  undef iswalnum
-#  undef iswalpha
-#  undef iswblank
-#  undef iswcntrl
-#  undef iswdigit
-#  undef iswgraph
-#  undef iswlower
-#  undef iswprint
-#  undef iswpunct
-#  undef iswspace
-#  undef iswupper
-#  undef iswxdigit
-#  undef towlower
-#  undef towupper
-
-/* Linux libc5 has <wctype.h> and the functions but they are broken.  */
-#  if @REPLACE_ISWCNTRL@
-#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#    define iswalnum rpl_iswalnum
-#    define iswalpha rpl_iswalpha
-#    define iswblank rpl_iswblank
-#    define iswcntrl rpl_iswcntrl
-#    define iswdigit rpl_iswdigit
-#    define iswgraph rpl_iswgraph
-#    define iswlower rpl_iswlower
-#    define iswprint rpl_iswprint
-#    define iswpunct rpl_iswpunct
-#    define iswspace rpl_iswspace
-#    define iswupper rpl_iswupper
-#    define iswxdigit rpl_iswxdigit
-#   endif
-#  endif
-#  if @REPLACE_TOWLOWER@
-#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#    define towlower rpl_towlower
-#    define towupper rpl_towupper
-#   endif
-#  endif
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswalnum
-#  else
-iswalnum
-#  endif
-         (wint_t wc)
-{
-  return ((wc >= '0' && wc <= '9')
-          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'));
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswalpha
-#  else
-iswalpha
-#  endif
-         (wint_t wc)
-{
-  return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswblank
-#  else
-iswblank
-#  endif
-         (wint_t wc)
-{
-  return wc == ' ' || wc == '\t';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswcntrl
-#  else
-iswcntrl
-#  endif
-        (wint_t wc)
-{
-  return (wc & ~0x1f) == 0 || wc == 0x7f;
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswdigit
-#  else
-iswdigit
-#  endif
-         (wint_t wc)
-{
-  return wc >= '0' && wc <= '9';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswgraph
-#  else
-iswgraph
-#  endif
-         (wint_t wc)
-{
-  return wc >= '!' && wc <= '~';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswlower
-#  else
-iswlower
-#  endif
-         (wint_t wc)
-{
-  return wc >= 'a' && wc <= 'z';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswprint
-#  else
-iswprint
-#  endif
-         (wint_t wc)
-{
-  return wc >= ' ' && wc <= '~';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswpunct
-#  else
-iswpunct
-#  endif
-         (wint_t wc)
-{
-  return (wc >= '!' && wc <= '~'
-          && !((wc >= '0' && wc <= '9')
-               || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')));
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswspace
-#  else
-iswspace
-#  endif
-         (wint_t wc)
-{
-  return (wc == ' ' || wc == '\t'
-          || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r');
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswupper
-#  else
-iswupper
-#  endif
-         (wint_t wc)
-{
-  return wc >= 'A' && wc <= 'Z';
-}
-
-_GL_WCTYPE_INLINE int
-#  if @REPLACE_ISWCNTRL@
-rpl_iswxdigit
-#  else
-iswxdigit
-#  endif
-          (wint_t wc)
-{
-  return ((wc >= '0' && wc <= '9')
-          || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F'));
-}
-
-_GL_WCTYPE_INLINE wint_t
-#  if @REPLACE_TOWLOWER@
-rpl_towlower
-#  else
-towlower
-#  endif
-         (wint_t wc)
-{
-  return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc);
-}
-
-_GL_WCTYPE_INLINE wint_t
-#  if @REPLACE_TOWLOWER@
-rpl_towupper
-#  else
-towupper
-#  endif
-         (wint_t wc)
-{
-  return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc);
-}
-
-# elif @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@)
-/* Only the iswblank function is missing.  */
-
-#  if @REPLACE_ISWBLANK@
-#   if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#    define iswblank rpl_iswblank
-#   endif
-_GL_FUNCDECL_RPL (iswblank, int, (wint_t wc));
-#  else
-_GL_FUNCDECL_SYS (iswblank, int, (wint_t wc));
-#  endif
-
-# endif
-
-# if defined __MINGW32__
-
-/* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t.
-   The functions towlower and towupper are implemented in the MSVCRT library
-   to take a wchar_t argument and return a wchar_t result.  mingw declares
-   these functions to take a wint_t argument and return a wint_t result.
-   This means that:
-   1. When the user passes an argument outside the range 0x0000..0xFFFF, the
-      function will look only at the lower 16 bits.  This is allowed according
-      to POSIX.
-   2. The return value is returned in the lower 16 bits of the result register.
-      The upper 16 bits are random: whatever happened to be in that part of the
-      result register.  We need to fix this by adding a zero-extend from
-      wchar_t to wint_t after the call.  */
-
-_GL_WCTYPE_INLINE wint_t
-rpl_towlower (wint_t wc)
-{
-  return (wint_t) (wchar_t) towlower (wc);
-}
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define towlower rpl_towlower
-#  endif
-
-_GL_WCTYPE_INLINE wint_t
-rpl_towupper (wint_t wc)
-{
-  return (wint_t) (wchar_t) towupper (wc);
-}
-#  if !(defined __cplusplus && defined GNULIB_NAMESPACE)
-#   define towupper rpl_towupper
-#  endif
-
-# endif /* __MINGW32__ */
-
-# define GNULIB_defined_wctype_functions 1
-#endif
-
-#if @REPLACE_ISWCNTRL@
-_GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswlower, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswprint, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswspace, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswupper, int, (wint_t wc));
-_GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc));
-#else
-_GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswlower, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswprint, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswspace, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswupper, int, (wint_t wc));
-_GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc));
-#endif
-_GL_CXXALIASWARN (iswalnum);
-_GL_CXXALIASWARN (iswalpha);
-_GL_CXXALIASWARN (iswcntrl);
-_GL_CXXALIASWARN (iswdigit);
-_GL_CXXALIASWARN (iswgraph);
-_GL_CXXALIASWARN (iswlower);
-_GL_CXXALIASWARN (iswprint);
-_GL_CXXALIASWARN (iswpunct);
-_GL_CXXALIASWARN (iswspace);
-_GL_CXXALIASWARN (iswupper);
-_GL_CXXALIASWARN (iswxdigit);
-
-#if @GNULIB_ISWBLANK@
-# if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@
-_GL_CXXALIAS_RPL (iswblank, int, (wint_t wc));
-# else
-_GL_CXXALIAS_SYS (iswblank, int, (wint_t wc));
-# endif
-_GL_CXXALIASWARN (iswblank);
-#endif
-
-#if !@HAVE_WCTYPE_T@
-# if !GNULIB_defined_wctype_t
-typedef void * wctype_t;
-#  define GNULIB_defined_wctype_t 1
-# endif
-#endif
-
-/* Get a descriptor for a wide character property.  */
-#if @GNULIB_WCTYPE@
-# if !@HAVE_WCTYPE_T@
-_GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name));
-# endif
-_GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name));
-_GL_CXXALIASWARN (wctype);
-#elif defined GNULIB_POSIXCHECK
-# undef wctype
-# if HAVE_RAW_DECL_WCTYPE
-_GL_WARN_ON_USE (wctype, "wctype is unportable - "
-                 "use gnulib module wctype for portability");
-# endif
-#endif
-
-/* Test whether a wide character has a given property.
-   The argument WC must be either a wchar_t value or WEOF.
-   The argument DESC must have been returned by the wctype() function.  */
-#if @GNULIB_ISWCTYPE@
-# if !@HAVE_WCTYPE_T@
-_GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc));
-# endif
-_GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc));
-_GL_CXXALIASWARN (iswctype);
-#elif defined GNULIB_POSIXCHECK
-# undef iswctype
-# if HAVE_RAW_DECL_ISWCTYPE
-_GL_WARN_ON_USE (iswctype, "iswctype is unportable - "
-                 "use gnulib module iswctype for portability");
-# endif
-#endif
-
-#if @REPLACE_TOWLOWER@ || defined __MINGW32__
-_GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc));
-_GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc));
-#else
-_GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc));
-_GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc));
-#endif
-_GL_CXXALIASWARN (towlower);
-_GL_CXXALIASWARN (towupper);
-
-#if !@HAVE_WCTRANS_T@
-# if !GNULIB_defined_wctrans_t
-typedef void * wctrans_t;
-#  define GNULIB_defined_wctrans_t 1
-# endif
-#endif
-
-/* Get a descriptor for a wide character case conversion.  */
-#if @GNULIB_WCTRANS@
-# if !@HAVE_WCTRANS_T@
-_GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name));
-# endif
-_GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name));
-_GL_CXXALIASWARN (wctrans);
-#elif defined GNULIB_POSIXCHECK
-# undef wctrans
-# if HAVE_RAW_DECL_WCTRANS
-_GL_WARN_ON_USE (wctrans, "wctrans is unportable - "
-                 "use gnulib module wctrans for portability");
-# endif
-#endif
-
-/* Perform a given case conversion on a wide character.
-   The argument WC must be either a wchar_t value or WEOF.
-   The argument DESC must have been returned by the wctrans() function.  */
-#if @GNULIB_TOWCTRANS@
-# if !@HAVE_WCTRANS_T@
-_GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
-# endif
-_GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc));
-_GL_CXXALIASWARN (towctrans);
-#elif defined GNULIB_POSIXCHECK
-# undef towctrans
-# if HAVE_RAW_DECL_TOWCTRANS
-_GL_WARN_ON_USE (towctrans, "towctrans is unportable - "
-                 "use gnulib module towctrans for portability");
-# endif
-#endif
-
-_GL_INLINE_HEADER_END
-
-#endif /* _@GUARD_PREFIX@_WCTYPE_H */
-#endif /* _@GUARD_PREFIX@_WCTYPE_H */
diff --git a/src/libs/gnulib/lib/wcwidth.c b/src/libs/gnulib/lib/wcwidth.c
deleted file mode 100644 (file)
index d7837bb..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-/* Determine the number of screen columns needed for a character.
-   Copyright (C) 2006-2007, 2010-2014 Free Software Foundation, Inc.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-#include <config.h>
-
-/* Specification.  */
-#include <wchar.h>
-
-/* Get iswprint.  */
-#include <wctype.h>
-
-#include "localcharset.h"
-#include "streq.h"
-#include "uniwidth.h"
-
-int
-wcwidth (wchar_t wc)
-#undef wcwidth
-{
-  /* In UTF-8 locales, use a Unicode aware width function.  */
-  const char *encoding = locale_charset ();
-  if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0 ,0))
-    {
-      /* We assume that in a UTF-8 locale, a wide character is the same as a
-         Unicode character.  */
-      return uc_width (wc, encoding);
-    }
-  else
-    {
-      /* Otherwise, fall back to the system's wcwidth function.  */
-#if HAVE_WCWIDTH
-      return wcwidth (wc);
-#else
-      return wc == 0 ? 0 : iswprint (wc) ? 1 : -1;
-#endif
-    }
-}
diff --git a/src/libs/gnulib/m4/00gnulib.m4 b/src/libs/gnulib/m4/00gnulib.m4
deleted file mode 100644 (file)
index 8eca551..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# 00gnulib.m4 serial 3
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl This file must be named something that sorts before all other
-dnl gnulib-provided .m4 files.  It is needed until such time as we can
-dnl assume Autoconf 2.64, with its improved AC_DEFUN_ONCE and
-dnl m4_divert semantics.
-
-# Until autoconf 2.63, handling of the diversion stack required m4_init
-# to be called first; but this does not happen with aclocal.  Wrapping
-# the entire execution in another layer of the diversion stack fixes this.
-# Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4
-# for whether it was FIFO or LIFO; in order to properly balance with
-# m4_init, we need to undo our push just before anything wrapped within
-# the m4_init body.  The way to ensure this is to wrap both sides of
-# m4_init with a one-shot macro that does the pop at the right time.
-m4_ifndef([_m4_divert_diversion],
-[m4_divert_push([KILL])
-m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])])
-m4_define([m4_init],
-  [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])])
-
-
-# AC_DEFUN_ONCE([NAME], VALUE)
-# ----------------------------
-# Define NAME to expand to VALUE on the first use (whether by direct
-# expansion, or by AC_REQUIRE), and to nothing on all subsequent uses.
-# Avoid bugs in AC_REQUIRE in Autoconf 2.63 and earlier.  This
-# definition is slower than the version in Autoconf 2.64, because it
-# can only use interfaces that existed since 2.59; but it achieves the
-# same effect.  Quoting is necessary to avoid confusing Automake.
-m4_version_prereq([2.63.263], [],
-[m4_define([AC][_DEFUN_ONCE],
-  [AC][_DEFUN([$1],
-    [AC_REQUIRE([_gl_DEFUN_ONCE([$1])],
-      [m4_indir([_gl_DEFUN_ONCE([$1])])])])]dnl
-[AC][_DEFUN([_gl_DEFUN_ONCE([$1])], [$2])])])
-
-# gl_00GNULIB
-# -----------
-# Witness macro that this file has been included.  Needed to force
-# Automake to include this file prior to all other gnulib .m4 files.
-AC_DEFUN([gl_00GNULIB])
diff --git a/src/libs/gnulib/m4/Makefile.am b/src/libs/gnulib/m4/Makefile.am
deleted file mode 100644 (file)
index 6a9ba10..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-## Process this file with automake to produce Makefile.in.
-
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# 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, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-
-EXTRA_DIST =
-EXTRA_DIST += 00gnulib.m4
-EXTRA_DIST += codeset.m4
-EXTRA_DIST += configmake.m4
-EXTRA_DIST += extensions.m4
-EXTRA_DIST += extern-inline.m4
-EXTRA_DIST += fcntl-o.m4
-EXTRA_DIST += glibc21.m4
-EXTRA_DIST += gnulib-common.m4
-EXTRA_DIST += include_next.m4
-EXTRA_DIST += inttypes-pri.m4
-EXTRA_DIST += inttypes.m4
-EXTRA_DIST += libunistring-base.m4
-EXTRA_DIST += localcharset.m4
-EXTRA_DIST += longlong.m4
-EXTRA_DIST += multiarch.m4
-EXTRA_DIST += stdbool.m4
-EXTRA_DIST += stddef_h.m4
-EXTRA_DIST += stdint.m4
-EXTRA_DIST += warn-on-use.m4
-EXTRA_DIST += wchar_h.m4
-EXTRA_DIST += wchar_t.m4
-EXTRA_DIST += wctype_h.m4
-EXTRA_DIST += wcwidth.m4
-EXTRA_DIST += wint_t.m4
diff --git a/src/libs/gnulib/m4/Makefile.in b/src/libs/gnulib/m4/Makefile.in
deleted file mode 100644 (file)
index 2a8f7b2..0000000
+++ /dev/null
@@ -1,608 +0,0 @@
-# Makefile.in generated by automake 1.14 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994-2013 Free Software Foundation, Inc.
-
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# 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, see <http://www.gnu.org/licenses/>.
-
-# As a special exception to the GNU General Public License, if you
-# distribute this file as part of a program that contains a
-# configuration script generated by Autoconf, you may include it under
-# the same distribution terms that you use for the rest of that program.
-VPATH = @srcdir@
-am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)'
-am__make_running_with_option = \
-  case $${target_option-} in \
-      ?) ;; \
-      *) echo "am__make_running_with_option: internal error: invalid" \
-              "target option '$${target_option-}' specified" >&2; \
-         exit 1;; \
-  esac; \
-  has_opt=no; \
-  sane_makeflags=$$MAKEFLAGS; \
-  if $(am__is_gnu_make); then \
-    sane_makeflags=$$MFLAGS; \
-  else \
-    case $$MAKEFLAGS in \
-      *\\[\ \  ]*) \
-        bs=\\; \
-        sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \
-          | sed "s/$$bs$$bs[$$bs $$bs  ]*//g"`;; \
-    esac; \
-  fi; \
-  skip_next=no; \
-  strip_trailopt () \
-  { \
-    flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \
-  }; \
-  for flg in $$sane_makeflags; do \
-    test $$skip_next = yes && { skip_next=no; continue; }; \
-    case $$flg in \
-      *=*|--*) continue;; \
-        -*I) strip_trailopt 'I'; skip_next=yes;; \
-      -*I?*) strip_trailopt 'I';; \
-        -*O) strip_trailopt 'O'; skip_next=yes;; \
-      -*O?*) strip_trailopt 'O';; \
-        -*l) strip_trailopt 'l'; skip_next=yes;; \
-      -*l?*) strip_trailopt 'l';; \
-      -[dEDm]) skip_next=yes;; \
-      -[JT]) skip_next=yes;; \
-    esac; \
-    case $$flg in \
-      *$$target_option*) has_opt=yes; break;; \
-    esac; \
-  done; \
-  test $$has_opt = yes
-am__make_dryrun = (target_option=n; $(am__make_running_with_option))
-am__make_keepgoing = (target_option=k; $(am__make_running_with_option))
-pkgdatadir = $(datadir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-subdir = m4
-DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \
-       $(top_srcdir)/m4/codeset.m4 $(top_srcdir)/m4/configmake.m4 \
-       $(top_srcdir)/m4/extensions.m4 \
-       $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/fcntl-o.m4 \
-       $(top_srcdir)/m4/glibc21.m4 $(top_srcdir)/m4/gnulib-common.m4 \
-       $(top_srcdir)/m4/include_next.m4 \
-       $(top_srcdir)/m4/inttypes-pri.m4 $(top_srcdir)/m4/inttypes.m4 \
-       $(top_srcdir)/m4/libunistring-base.m4 \
-       $(top_srcdir)/m4/localcharset.m4 $(top_srcdir)/m4/longlong.m4 \
-       $(top_srcdir)/m4/multiarch.m4 $(top_srcdir)/m4/onceonly.m4 \
-       $(top_srcdir)/m4/stdbool.m4 $(top_srcdir)/m4/stddef_h.m4 \
-       $(top_srcdir)/m4/stdint.m4 $(top_srcdir)/m4/warn-on-use.m4 \
-       $(top_srcdir)/m4/wchar_h.m4 $(top_srcdir)/m4/wchar_t.m4 \
-       $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wcwidth.m4 \
-       $(top_srcdir)/m4/wint_t.m4 $(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-       $(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-CONFIG_CLEAN_VPATH_FILES =
-AM_V_P = $(am__v_P_@AM_V@)
-am__v_P_ = $(am__v_P_@AM_DEFAULT_V@)
-am__v_P_0 = false
-am__v_P_1 = :
-AM_V_GEN = $(am__v_GEN_@AM_V@)
-am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@)
-am__v_GEN_0 = @echo "  GEN     " $@;
-am__v_GEN_1 = 
-AM_V_at = $(am__v_at_@AM_V@)
-am__v_at_ = $(am__v_at_@AM_DEFAULT_V@)
-am__v_at_0 = @
-am__v_at_1 = 
-SOURCES =
-DIST_SOURCES =
-am__can_run_installinfo = \
-  case $$AM_UPDATE_INFO_DIR in \
-    n|no|NO) false;; \
-    *) (install-info --version) >/dev/null 2>&1;; \
-  esac
-am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP)
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-pkglibexecdir = @pkglibexecdir@
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@
-APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@
-AR = @AR@
-ARFLAGS = @ARFLAGS@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@
-BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@
-BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@
-BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@
-BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-GLIBC21 = @GLIBC21@
-GNULIB_BTOWC = @GNULIB_BTOWC@
-GNULIB_IMAXABS = @GNULIB_IMAXABS@
-GNULIB_IMAXDIV = @GNULIB_IMAXDIV@
-GNULIB_ISWBLANK = @GNULIB_ISWBLANK@
-GNULIB_ISWCTYPE = @GNULIB_ISWCTYPE@
-GNULIB_MBRLEN = @GNULIB_MBRLEN@
-GNULIB_MBRTOWC = @GNULIB_MBRTOWC@
-GNULIB_MBSINIT = @GNULIB_MBSINIT@
-GNULIB_MBSNRTOWCS = @GNULIB_MBSNRTOWCS@
-GNULIB_MBSRTOWCS = @GNULIB_MBSRTOWCS@
-GNULIB_STRTOIMAX = @GNULIB_STRTOIMAX@
-GNULIB_STRTOUMAX = @GNULIB_STRTOUMAX@
-GNULIB_TOWCTRANS = @GNULIB_TOWCTRANS@
-GNULIB_WCPCPY = @GNULIB_WCPCPY@
-GNULIB_WCPNCPY = @GNULIB_WCPNCPY@
-GNULIB_WCRTOMB = @GNULIB_WCRTOMB@
-GNULIB_WCSCASECMP = @GNULIB_WCSCASECMP@
-GNULIB_WCSCAT = @GNULIB_WCSCAT@
-GNULIB_WCSCHR = @GNULIB_WCSCHR@
-GNULIB_WCSCMP = @GNULIB_WCSCMP@
-GNULIB_WCSCOLL = @GNULIB_WCSCOLL@
-GNULIB_WCSCPY = @GNULIB_WCSCPY@
-GNULIB_WCSCSPN = @GNULIB_WCSCSPN@
-GNULIB_WCSDUP = @GNULIB_WCSDUP@
-GNULIB_WCSLEN = @GNULIB_WCSLEN@
-GNULIB_WCSNCASECMP = @GNULIB_WCSNCASECMP@
-GNULIB_WCSNCAT = @GNULIB_WCSNCAT@
-GNULIB_WCSNCMP = @GNULIB_WCSNCMP@
-GNULIB_WCSNCPY = @GNULIB_WCSNCPY@
-GNULIB_WCSNLEN = @GNULIB_WCSNLEN@
-GNULIB_WCSNRTOMBS = @GNULIB_WCSNRTOMBS@
-GNULIB_WCSPBRK = @GNULIB_WCSPBRK@
-GNULIB_WCSRCHR = @GNULIB_WCSRCHR@
-GNULIB_WCSRTOMBS = @GNULIB_WCSRTOMBS@
-GNULIB_WCSSPN = @GNULIB_WCSSPN@
-GNULIB_WCSSTR = @GNULIB_WCSSTR@
-GNULIB_WCSTOK = @GNULIB_WCSTOK@
-GNULIB_WCSWIDTH = @GNULIB_WCSWIDTH@
-GNULIB_WCSXFRM = @GNULIB_WCSXFRM@
-GNULIB_WCTOB = @GNULIB_WCTOB@
-GNULIB_WCTRANS = @GNULIB_WCTRANS@
-GNULIB_WCTYPE = @GNULIB_WCTYPE@
-GNULIB_WCWIDTH = @GNULIB_WCWIDTH@
-GNULIB_WMEMCHR = @GNULIB_WMEMCHR@
-GNULIB_WMEMCMP = @GNULIB_WMEMCMP@
-GNULIB_WMEMCPY = @GNULIB_WMEMCPY@
-GNULIB_WMEMMOVE = @GNULIB_WMEMMOVE@
-GNULIB_WMEMSET = @GNULIB_WMEMSET@
-GREP = @GREP@
-HAVE_BTOWC = @HAVE_BTOWC@
-HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@
-HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@
-HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@
-HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@
-HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@
-HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@
-HAVE_FEATURES_H = @HAVE_FEATURES_H@
-HAVE_INTTYPES_H = @HAVE_INTTYPES_H@
-HAVE_ISWBLANK = @HAVE_ISWBLANK@
-HAVE_ISWCNTRL = @HAVE_ISWCNTRL@
-HAVE_LONG_LONG_INT = @HAVE_LONG_LONG_INT@
-HAVE_MBRLEN = @HAVE_MBRLEN@
-HAVE_MBRTOWC = @HAVE_MBRTOWC@
-HAVE_MBSINIT = @HAVE_MBSINIT@
-HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@
-HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@
-HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@
-HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@
-HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@
-HAVE_STDINT_H = @HAVE_STDINT_H@
-HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@
-HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@
-HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@
-HAVE_UNSIGNED_LONG_LONG_INT = @HAVE_UNSIGNED_LONG_LONG_INT@
-HAVE_WCHAR_H = @HAVE_WCHAR_H@
-HAVE_WCHAR_T = @HAVE_WCHAR_T@
-HAVE_WCPCPY = @HAVE_WCPCPY@
-HAVE_WCPNCPY = @HAVE_WCPNCPY@
-HAVE_WCRTOMB = @HAVE_WCRTOMB@
-HAVE_WCSCASECMP = @HAVE_WCSCASECMP@
-HAVE_WCSCAT = @HAVE_WCSCAT@
-HAVE_WCSCHR = @HAVE_WCSCHR@
-HAVE_WCSCMP = @HAVE_WCSCMP@
-HAVE_WCSCOLL = @HAVE_WCSCOLL@
-HAVE_WCSCPY = @HAVE_WCSCPY@
-HAVE_WCSCSPN = @HAVE_WCSCSPN@
-HAVE_WCSDUP = @HAVE_WCSDUP@
-HAVE_WCSLEN = @HAVE_WCSLEN@
-HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@
-HAVE_WCSNCAT = @HAVE_WCSNCAT@
-HAVE_WCSNCMP = @HAVE_WCSNCMP@
-HAVE_WCSNCPY = @HAVE_WCSNCPY@
-HAVE_WCSNLEN = @HAVE_WCSNLEN@
-HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@
-HAVE_WCSPBRK = @HAVE_WCSPBRK@
-HAVE_WCSRCHR = @HAVE_WCSRCHR@
-HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@
-HAVE_WCSSPN = @HAVE_WCSSPN@
-HAVE_WCSSTR = @HAVE_WCSSTR@
-HAVE_WCSTOK = @HAVE_WCSTOK@
-HAVE_WCSWIDTH = @HAVE_WCSWIDTH@
-HAVE_WCSXFRM = @HAVE_WCSXFRM@
-HAVE_WCTRANS_T = @HAVE_WCTRANS_T@
-HAVE_WCTYPE_H = @HAVE_WCTYPE_H@
-HAVE_WCTYPE_T = @HAVE_WCTYPE_T@
-HAVE_WINT_T = @HAVE_WINT_T@
-HAVE_WMEMCHR = @HAVE_WMEMCHR@
-HAVE_WMEMCMP = @HAVE_WMEMCMP@
-HAVE_WMEMCPY = @HAVE_WMEMCPY@
-HAVE_WMEMMOVE = @HAVE_WMEMMOVE@
-HAVE_WMEMSET = @HAVE_WMEMSET@
-HAVE__BOOL = @HAVE__BOOL@
-INCLUDE_NEXT = @INCLUDE_NEXT@
-INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@
-INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@
-LDFLAGS = @LDFLAGS@
-LIBGNU_LIBDEPS = @LIBGNU_LIBDEPS@
-LIBGNU_LTLIBDEPS = @LIBGNU_LTLIBDEPS@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBUNISTRING_UNITYPES_H = @LIBUNISTRING_UNITYPES_H@
-LIBUNISTRING_UNIWIDTH_H = @LIBUNISTRING_UNIWIDTH_H@
-LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@
-NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@
-NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@
-NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@
-NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@
-NEXT_INTTYPES_H = @NEXT_INTTYPES_H@
-NEXT_STDDEF_H = @NEXT_STDDEF_H@
-NEXT_STDINT_H = @NEXT_STDINT_H@
-NEXT_WCHAR_H = @NEXT_WCHAR_H@
-NEXT_WCTYPE_H = @NEXT_WCTYPE_H@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_URL = @PACKAGE_URL@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-PRAGMA_COLUMNS = @PRAGMA_COLUMNS@
-PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@
-PRIPTR_PREFIX = @PRIPTR_PREFIX@
-PRI_MACROS_BROKEN = @PRI_MACROS_BROKEN@
-PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@
-RANLIB = @RANLIB@
-REPLACE_BTOWC = @REPLACE_BTOWC@
-REPLACE_ISWBLANK = @REPLACE_ISWBLANK@
-REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@
-REPLACE_MBRLEN = @REPLACE_MBRLEN@
-REPLACE_MBRTOWC = @REPLACE_MBRTOWC@
-REPLACE_MBSINIT = @REPLACE_MBSINIT@
-REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@
-REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@
-REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@
-REPLACE_NULL = @REPLACE_NULL@
-REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@
-REPLACE_TOWLOWER = @REPLACE_TOWLOWER@
-REPLACE_WCRTOMB = @REPLACE_WCRTOMB@
-REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@
-REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@
-REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@
-REPLACE_WCTOB = @REPLACE_WCTOB@
-REPLACE_WCWIDTH = @REPLACE_WCWIDTH@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@
-SIZE_T_SUFFIX = @SIZE_T_SUFFIX@
-STDBOOL_H = @STDBOOL_H@
-STDDEF_H = @STDDEF_H@
-STDINT_H = @STDINT_H@
-STRIP = @STRIP@
-UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@
-UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@
-VERSION = @VERSION@
-WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@
-WINT_T_SUFFIX = @WINT_T_SUFFIX@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-gl_LIBOBJS = @gl_LIBOBJS@
-gl_LTLIBOBJS = @gl_LTLIBOBJS@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-lispdir = @lispdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-runstatedir = @runstatedir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_build_prefix = @top_build_prefix@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-EXTRA_DIST = 00gnulib.m4 codeset.m4 configmake.m4 extensions.m4 \
-       extern-inline.m4 fcntl-o.m4 glibc21.m4 gnulib-common.m4 \
-       include_next.m4 inttypes-pri.m4 inttypes.m4 \
-       libunistring-base.m4 localcharset.m4 longlong.m4 multiarch.m4 \
-       stdbool.m4 stddef_h.m4 stdint.m4 warn-on-use.m4 wchar_h.m4 \
-       wchar_t.m4 wctype_h.m4 wcwidth.m4 wint_t.m4
-all: all-am
-
-.SUFFIXES:
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-       @for dep in $?; do \
-         case '$(am__configure_deps)' in \
-           *$$dep*) \
-             ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \
-               && { if test -f $@; then exit 0; else break; fi; }; \
-             exit 1;; \
-         esac; \
-       done; \
-       echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu m4/Makefile'; \
-       $(am__cd) $(top_srcdir) && \
-         $(AUTOMAKE) --gnu m4/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-       @case '$?' in \
-         *config.status*) \
-           cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-         *) \
-           echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-           cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-       esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-       cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(am__aclocal_m4_deps):
-tags TAGS:
-
-ctags CTAGS:
-
-cscope cscopelist:
-
-
-distdir: $(DISTFILES)
-       @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-       list='$(DISTFILES)'; \
-         dist_files=`for file in $$list; do echo $$file; done | \
-         sed -e "s|^$$srcdirstrip/||;t" \
-             -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-       case $$dist_files in \
-         */*) $(MKDIR_P) `echo "$$dist_files" | \
-                          sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-                          sort -u` ;; \
-       esac; \
-       for file in $$dist_files; do \
-         if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-         if test -d $$d/$$file; then \
-           dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-           if test -d "$(distdir)/$$file"; then \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-             cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \
-             find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \
-           fi; \
-           cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \
-         else \
-           test -f "$(distdir)/$$file" \
-           || cp -p $$d/$$file "$(distdir)/$$file" \
-           || exit 1; \
-         fi; \
-       done
-check-am: all-am
-check: check-am
-all-am: Makefile
-installdirs:
-install: install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-       @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-       if test -z '$(STRIP)'; then \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-             install; \
-       else \
-         $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-           install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-           "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \
-       fi
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-       -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-       -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES)
-
-maintainer-clean-generic:
-       @echo "This command is intended for maintainers to use"
-       @echo "it deletes files that may require special tools to rebuild."
-clean: clean-am
-
-clean-am: clean-generic mostlyclean-am
-
-distclean: distclean-am
-       -rm -f Makefile
-distclean-am: clean-am distclean-generic
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-html-am:
-
-info: info-am
-
-info-am:
-
-install-data-am:
-
-install-dvi: install-dvi-am
-
-install-dvi-am:
-
-install-exec-am:
-
-install-html: install-html-am
-
-install-html-am:
-
-install-info: install-info-am
-
-install-info-am:
-
-install-man:
-
-install-pdf: install-pdf-am
-
-install-pdf-am:
-
-install-ps: install-ps-am
-
-install-ps-am:
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-       -rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-generic
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am:
-
-.MAKE: install-am install-strip
-
-.PHONY: all all-am check check-am clean clean-generic cscopelist-am \
-       ctags-am distclean distclean-generic distdir dvi dvi-am html \
-       html-am info info-am install install-am install-data \
-       install-data-am install-dvi install-dvi-am install-exec \
-       install-exec-am install-html install-html-am install-info \
-       install-info-am install-man install-pdf install-pdf-am \
-       install-ps install-ps-am install-strip installcheck \
-       installcheck-am installdirs maintainer-clean \
-       maintainer-clean-generic mostlyclean mostlyclean-generic pdf \
-       pdf-am ps ps-am tags-am uninstall uninstall-am
-
-
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/libs/gnulib/m4/codeset.m4 b/src/libs/gnulib/m4/codeset.m4
deleted file mode 100644 (file)
index d7de8d6..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# codeset.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2000-2002, 2006, 2008-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_DEFUN([AM_LANGINFO_CODESET],
-[
-  AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset],
-    [AC_LINK_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <langinfo.h>]],
-          [[char* cs = nl_langinfo(CODESET); return !cs;]])],
-       [am_cv_langinfo_codeset=yes],
-       [am_cv_langinfo_codeset=no])
-    ])
-  if test $am_cv_langinfo_codeset = yes; then
-    AC_DEFINE([HAVE_LANGINFO_CODESET], [1],
-      [Define if you have <langinfo.h> and nl_langinfo(CODESET).])
-  fi
-])
diff --git a/src/libs/gnulib/m4/configmake.m4 b/src/libs/gnulib/m4/configmake.m4
deleted file mode 100644 (file)
index 0cd86cf..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-# configmake.m4 serial 2
-dnl Copyright (C) 2010-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# gl_CONFIGMAKE_PREP
-# ------------------
-# Guarantee all of the standard directory variables, even when used with
-# autoconf 2.59 (datarootdir wasn't supported until 2.59c, and runstatedir
-# in 2.70) or automake 1.9.6 (pkglibexecdir wasn't supported until 1.10b,
-# and runstatedir in 1.14.1).
-AC_DEFUN([gl_CONFIGMAKE_PREP],
-[
-  dnl Technically, datadir should default to datarootdir.  But if
-  dnl autoconf is too old to provide datarootdir, then reversing the
-  dnl definition is a reasonable compromise.  Only AC_SUBST a variable
-  dnl if it was not already defined earlier by autoconf.
-  if test "x$datarootdir" = x; then
-    AC_SUBST([datarootdir], ['${datadir}'])
-  fi
-  dnl Copy the approach used in autoconf 2.60.
-  if test "x$docdir" = x; then
-    AC_SUBST([docdir], [m4_ifset([AC_PACKAGE_TARNAME],
-      ['${datarootdir}/doc/${PACKAGE_TARNAME}'],
-      ['${datarootdir}/doc/${PACKAGE}'])])
-  fi
-  dnl The remaining variables missing from autoconf 2.59 are easier.
-  if test "x$htmldir" = x; then
-    AC_SUBST([htmldir], ['${docdir}'])
-  fi
-  if test "x$dvidir" = x; then
-    AC_SUBST([dvidir], ['${docdir}'])
-  fi
-  if test "x$pdfdir" = x; then
-    AC_SUBST([pdfdir], ['${docdir}'])
-  fi
-  if test "x$psdir" = x; then
-    AC_SUBST([psdir], ['${docdir}'])
-  fi
-  if test "x$lispdir" = x; then
-    AC_SUBST([lispdir], ['${datarootdir}/emacs/site-lisp'])
-  fi
-  if test "x$localedir" = x; then
-    AC_SUBST([localedir], ['${datarootdir}/locale'])
-  fi
-  dnl Added in autoconf 2.70
-  if test "x$runstatedir" = x; then
-    AC_SUBST([runstatedir], ['${localstatedir}/run'])
-  fi
-
-  dnl Automake 1.9.6 only lacks pkglibexecdir; and since 1.11 merely
-  dnl provides it without AC_SUBST, this blind use of AC_SUBST is safe.
-  AC_SUBST([pkglibexecdir], ['${libexecdir}/${PACKAGE}'])
-])
diff --git a/src/libs/gnulib/m4/extensions.m4 b/src/libs/gnulib/m4/extensions.m4
deleted file mode 100644 (file)
index 37f55ca..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-# serial 13  -*- Autoconf -*-
-# Enable extensions on systems that normally disable them.
-
-# Copyright (C) 2003, 2006-2014 Free Software Foundation, Inc.
-# This file is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git
-# Autoconf.  Perhaps we can remove this once we can assume Autoconf
-# 2.70 or later everywhere, but since Autoconf mutates rapidly
-# enough in this area it's likely we'll need to redefine
-# AC_USE_SYSTEM_EXTENSIONS for quite some time.
-
-# If autoconf reports a warning
-#     warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
-# or  warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS
-# the fix is
-#   1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked
-#      but always AC_REQUIREd,
-#   2) to ensure that for each occurrence of
-#        AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-#      or
-#        AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
-#      the corresponding gnulib module description has 'extensions' among
-#      its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS
-#      invocation occurs in gl_EARLY, not in gl_INIT.
-
-# AC_USE_SYSTEM_EXTENSIONS
-# ------------------------
-# Enable extensions on systems that normally disable them,
-# typically due to standards-conformance issues.
-#
-# Remember that #undef in AH_VERBATIM gets replaced with #define by
-# AC_DEFINE.  The goal here is to define all known feature-enabling
-# macros, then, if reports of conflicts are made, disable macros that
-# cause problems on some platforms (such as __EXTENSIONS__).
-AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS],
-[AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl
-AC_BEFORE([$0], [AC_RUN_IFELSE])dnl
-
-  AC_CHECK_HEADER([minix/config.h], [MINIX=yes], [MINIX=])
-  if test "$MINIX" = yes; then
-    AC_DEFINE([_POSIX_SOURCE], [1],
-      [Define to 1 if you need to in order for 'stat' and other
-       things to work.])
-    AC_DEFINE([_POSIX_1_SOURCE], [2],
-      [Define to 2 if the system does not provide POSIX.1 features
-       except with this defined.])
-    AC_DEFINE([_MINIX], [1],
-      [Define to 1 if on MINIX.])
-    AC_DEFINE([_NETBSD_SOURCE], [1],
-      [Define to 1 to make NetBSD features available.  MINIX 3 needs this.])
-  fi
-
-dnl Use a different key than __EXTENSIONS__, as that name broke existing
-dnl configure.ac when using autoheader 2.62.
-  AH_VERBATIM([USE_SYSTEM_EXTENSIONS],
-[/* Enable extensions on AIX 3, Interix.  */
-#ifndef _ALL_SOURCE
-# undef _ALL_SOURCE
-#endif
-/* Enable general extensions on OS X.  */
-#ifndef _DARWIN_C_SOURCE
-# undef _DARWIN_C_SOURCE
-#endif
-/* Enable GNU extensions on systems that have them.  */
-#ifndef _GNU_SOURCE
-# undef _GNU_SOURCE
-#endif
-/* Enable threading extensions on Solaris.  */
-#ifndef _POSIX_PTHREAD_SEMANTICS
-# undef _POSIX_PTHREAD_SEMANTICS
-#endif
-/* Enable extensions on HP NonStop.  */
-#ifndef _TANDEM_SOURCE
-# undef _TANDEM_SOURCE
-#endif
-/* Enable X/Open extensions if necessary.  HP-UX 11.11 defines
-   mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of
-   whether compiling with -Ae or -D_HPUX_SOURCE=1.  */
-#ifndef _XOPEN_SOURCE
-# undef _XOPEN_SOURCE
-#endif
-/* Enable general extensions on Solaris.  */
-#ifndef __EXTENSIONS__
-# undef __EXTENSIONS__
-#endif
-])
-  AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__],
-    [ac_cv_safe_to_define___extensions__],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM([[
-#         define __EXTENSIONS__ 1
-          ]AC_INCLUDES_DEFAULT])],
-       [ac_cv_safe_to_define___extensions__=yes],
-       [ac_cv_safe_to_define___extensions__=no])])
-  test $ac_cv_safe_to_define___extensions__ = yes &&
-    AC_DEFINE([__EXTENSIONS__])
-  AC_DEFINE([_ALL_SOURCE])
-  AC_DEFINE([_DARWIN_C_SOURCE])
-  AC_DEFINE([_GNU_SOURCE])
-  AC_DEFINE([_POSIX_PTHREAD_SEMANTICS])
-  AC_DEFINE([_TANDEM_SOURCE])
-  AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined],
-    [ac_cv_should_define__xopen_source],
-    [ac_cv_should_define__xopen_source=no
-     AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM([[
-          #include <wchar.h>
-          mbstate_t x;]])],
-       [],
-       [AC_COMPILE_IFELSE(
-          [AC_LANG_PROGRAM([[
-             #define _XOPEN_SOURCE 500
-             #include <wchar.h>
-             mbstate_t x;]])],
-          [ac_cv_should_define__xopen_source=yes])])])
-  test $ac_cv_should_define__xopen_source = yes &&
-    AC_DEFINE([_XOPEN_SOURCE], [500])
-])# AC_USE_SYSTEM_EXTENSIONS
-
-# gl_USE_SYSTEM_EXTENSIONS
-# ------------------------
-# Enable extensions on systems that normally disable them,
-# typically due to standards-conformance issues.
-AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS],
-[
-  dnl Require this macro before AC_USE_SYSTEM_EXTENSIONS.
-  dnl gnulib does not need it. But if it gets required by third-party macros
-  dnl after AC_USE_SYSTEM_EXTENSIONS is required, autoconf 2.62..2.63 emit a
-  dnl warning: "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS".
-  dnl Note: We can do this only for one of the macros AC_AIX, AC_GNU_SOURCE,
-  dnl AC_MINIX. If people still use AC_AIX or AC_MINIX, they are out of luck.
-  AC_REQUIRE([AC_GNU_SOURCE])
-
-  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-])
diff --git a/src/libs/gnulib/m4/extern-inline.m4 b/src/libs/gnulib/m4/extern-inline.m4
deleted file mode 100644 (file)
index 8f8e8e2..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-dnl 'extern inline' a la ISO C99.
-
-dnl Copyright 2012-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_EXTERN_INLINE],
-[
-  AH_VERBATIM([extern_inline],
-[/* _GL_INLINE is a portable alternative to ISO C99 plain 'inline'.
-   _GL_EXTERN_INLINE is a portable alternative to 'extern inline'.
-   _GL_INLINE_HEADER_BEGIN contains useful stuff to put
-     in an include file, before uses of _GL_INLINE.
-     It suppresses GCC's bogus "no previous prototype for 'FOO'" diagnostic,
-     when FOO is an inline function in the header; see
-     <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>.
-   _GL_INLINE_HEADER_END contains useful stuff to put
-     in the same include file, after uses of _GL_INLINE.
-
-   Suppress the use of extern inline on Apple's platforms,
-   as Libc-825.25 (2012-09-19) is incompatible with it; see
-   <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>.
-   Perhaps Apple will fix this some day.  */
-#if ((__GNUC__ \
-      ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \
-      : 199901L <= __STDC_VERSION__) \
-     && !defined __APPLE__)
-# define _GL_INLINE inline
-# define _GL_EXTERN_INLINE extern inline
-#elif 2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __APPLE__
-# if __GNUC_GNU_INLINE__
-   /* __gnu_inline__ suppresses a GCC 4.2 diagnostic.  */
-#  define _GL_INLINE extern inline __attribute__ ((__gnu_inline__))
-# else
-#  define _GL_INLINE extern inline
-# endif
-# define _GL_EXTERN_INLINE extern
-#else
-# define _GL_INLINE static _GL_UNUSED
-# define _GL_EXTERN_INLINE static _GL_UNUSED
-#endif
-
-#if 4 < __GNUC__ + (6 <= __GNUC_MINOR__)
-# if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__
-#  define _GL_INLINE_HEADER_CONST_PRAGMA
-# else
-#  define _GL_INLINE_HEADER_CONST_PRAGMA \
-     _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"")
-# endif
-# define _GL_INLINE_HEADER_BEGIN \
-    _Pragma ("GCC diagnostic push") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \
-    _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \
-    _GL_INLINE_HEADER_CONST_PRAGMA
-# define _GL_INLINE_HEADER_END \
-    _Pragma ("GCC diagnostic pop")
-#else
-# define _GL_INLINE_HEADER_BEGIN
-# define _GL_INLINE_HEADER_END
-#endif])
-])
diff --git a/src/libs/gnulib/m4/fcntl-o.m4 b/src/libs/gnulib/m4/fcntl-o.m4
deleted file mode 100644 (file)
index 43c9312..0000000
+++ /dev/null
@@ -1,134 +0,0 @@
-# fcntl-o.m4 serial 4
-dnl Copyright (C) 2006, 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Written by Paul Eggert.
-
-# Test whether the flags O_NOATIME and O_NOFOLLOW actually work.
-# Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise.
-# Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise.
-AC_DEFUN([gl_FCNTL_O_FLAGS],
-[
-  dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW.
-  dnl AC_USE_SYSTEM_EXTENSIONS was introduced in autoconf 2.60 and obsoletes
-  dnl AC_GNU_SOURCE.
-  m4_ifdef([AC_USE_SYSTEM_EXTENSIONS],
-    [AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])],
-    [AC_REQUIRE([AC_GNU_SOURCE])])
-
-  AC_CHECK_HEADERS_ONCE([unistd.h])
-  AC_CHECK_FUNCS_ONCE([symlink])
-  AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h],
-    [AC_RUN_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <sys/types.h>
-           #include <sys/stat.h>
-           #if HAVE_UNISTD_H
-           # include <unistd.h>
-           #else /* on Windows with MSVC */
-           # include <io.h>
-           # include <stdlib.h>
-           # defined sleep(n) _sleep ((n) * 1000)
-           #endif
-           #include <fcntl.h>
-           #ifndef O_NOATIME
-            #define O_NOATIME 0
-           #endif
-           #ifndef O_NOFOLLOW
-            #define O_NOFOLLOW 0
-           #endif
-           static int const constants[] =
-            {
-              O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND,
-              O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY
-            };
-          ]],
-          [[
-            int result = !constants;
-            #if HAVE_SYMLINK
-            {
-              static char const sym[] = "conftest.sym";
-              if (symlink ("/dev/null", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              if (unlink (sym) != 0 || symlink (".", sym) != 0)
-                result |= 2;
-              else
-                {
-                  int fd = open (sym, O_RDONLY | O_NOFOLLOW);
-                  if (fd >= 0)
-                    {
-                      close (fd);
-                      result |= 4;
-                    }
-                }
-              unlink (sym);
-            }
-            #endif
-            {
-              static char const file[] = "confdefs.h";
-              int fd = open (file, O_RDONLY | O_NOATIME);
-              if (fd < 0)
-                result |= 8;
-              else
-                {
-                  struct stat st0;
-                  if (fstat (fd, &st0) != 0)
-                    result |= 16;
-                  else
-                    {
-                      char c;
-                      sleep (1);
-                      if (read (fd, &c, 1) != 1)
-                        result |= 24;
-                      else
-                        {
-                          if (close (fd) != 0)
-                            result |= 32;
-                          else
-                            {
-                              struct stat st1;
-                              if (stat (file, &st1) != 0)
-                                result |= 40;
-                              else
-                                if (st0.st_atime != st1.st_atime)
-                                  result |= 64;
-                            }
-                        }
-                    }
-                }
-            }
-            return result;]])],
-       [gl_cv_header_working_fcntl_h=yes],
-       [case $? in #(
-        4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #(
-        64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #(
-        68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #(
-         *) gl_cv_header_working_fcntl_h='no';;
-        esac],
-       [gl_cv_header_working_fcntl_h=cross-compiling])])
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOATIME* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val],
-    [Define to 1 if O_NOATIME works.])
-
-  case $gl_cv_header_working_fcntl_h in #(
-  *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #(
-  *) ac_val=1;;
-  esac
-  AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val],
-    [Define to 1 if O_NOFOLLOW works.])
-])
diff --git a/src/libs/gnulib/m4/glibc21.m4 b/src/libs/gnulib/m4/glibc21.m4
deleted file mode 100644 (file)
index ab58b71..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# glibc21.m4 serial 5
-dnl Copyright (C) 2000-2002, 2004, 2008, 2010-2014 Free Software Foundation,
-dnl Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# Test for the GNU C Library, version 2.1 or newer, or uClibc.
-# From Bruno Haible.
-
-AC_DEFUN([gl_GLIBC21],
-  [
-    AC_CACHE_CHECK([whether we are using the GNU C Library >= 2.1 or uClibc],
-      [ac_cv_gnu_library_2_1],
-      [AC_EGREP_CPP([Lucky],
-        [
-#include <features.h>
-#ifdef __GNU_LIBRARY__
- #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 1) || (__GLIBC__ > 2)
-  Lucky GNU user
- #endif
-#endif
-#ifdef __UCLIBC__
- Lucky user
-#endif
-        ],
-        [ac_cv_gnu_library_2_1=yes],
-        [ac_cv_gnu_library_2_1=no])
-      ]
-    )
-    AC_SUBST([GLIBC21])
-    GLIBC21="$ac_cv_gnu_library_2_1"
-  ]
-)
diff --git a/src/libs/gnulib/m4/gnulib-cache.m4 b/src/libs/gnulib/m4/gnulib-cache.m4
deleted file mode 100644 (file)
index 3be3a1d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# Copyright (C) 2002-2014 Free Software Foundation, Inc.
-#
-# This file 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 3 of the License, or
-# (at your option) any later version.
-#
-# This file 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 file.  If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License,
-# this file may be distributed as part of a program that
-# contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-#
-# This file represents the specification of how gnulib-tool is used.
-# It acts as a cache: It is written and read by gnulib-tool.
-# In projects that use version control, this file is meant to be put under
-# version control, like the configure.ac and various Makefile.am files.
-
-
-# Specification in the form of a command-line invocation:
-#   gnulib-tool --import --dir=src/libs/gnulib --lib=libgnu --source-base=lib --m4-base=m4 --doc-base=doc --tests-base=tests --aux-dir=build-aux --no-conditional-dependencies --no-libtool --macro-prefix=gl wcwidth
-
-# Specification in the form of a few gnulib-tool.m4 macro invocations:
-gl_LOCAL_DIR([])
-gl_MODULES([
-  wcwidth
-])
-gl_AVOID([])
-gl_SOURCE_BASE([lib])
-gl_M4_BASE([m4])
-gl_PO_BASE([])
-gl_DOC_BASE([doc])
-gl_TESTS_BASE([tests])
-gl_LIB([libgnu])
-gl_MAKEFILE_NAME([])
-gl_MACRO_PREFIX([gl])
-gl_PO_DOMAIN([])
-gl_WITNESS_C_MACRO([])
diff --git a/src/libs/gnulib/m4/gnulib-common.m4 b/src/libs/gnulib/m4/gnulib-common.m4
deleted file mode 100644 (file)
index ae31e80..0000000
+++ /dev/null
@@ -1,377 +0,0 @@
-# gnulib-common.m4 serial 33
-dnl Copyright (C) 2007-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# gl_COMMON
-# is expanded unconditionally through gnulib-tool magic.
-AC_DEFUN([gl_COMMON], [
-  dnl Use AC_REQUIRE here, so that the code is expanded once only.
-  AC_REQUIRE([gl_00GNULIB])
-  AC_REQUIRE([gl_COMMON_BODY])
-])
-AC_DEFUN([gl_COMMON_BODY], [
-  AH_VERBATIM([_Noreturn],
-[/* The _Noreturn keyword of C11.  */
-#if ! (defined _Noreturn \
-       || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__))
-# if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \
-      || 0x5110 <= __SUNPRO_C)
-#  define _Noreturn __attribute__ ((__noreturn__))
-# elif defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn
-# endif
-#endif
-])
-  AH_VERBATIM([isoc99_inline],
-[/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports
-   the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of
-   earlier versions), but does not display it by setting __GNUC_STDC_INLINE__.
-   __APPLE__ && __MACH__ test for Mac OS X.
-   __APPLE_CC__ tests for the Apple compiler and its version.
-   __STDC_VERSION__ tests for the C99 mode.  */
-#if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__
-# define __GNUC_STDC_INLINE__ 1
-#endif])
-  AH_VERBATIM([unused_parameter],
-[/* Define as a marker that can be attached to declarations that might not
-    be used.  This helps to reduce warnings, such as from
-    GCC -Wunused-parameter.  */
-#if __GNUC__ >= 3 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-# define _GL_UNUSED __attribute__ ((__unused__))
-#else
-# define _GL_UNUSED
-#endif
-/* The name _UNUSED_PARAMETER_ is an earlier spelling, although the name
-   is a misnomer outside of parameter lists.  */
-#define _UNUSED_PARAMETER_ _GL_UNUSED
-
-/* The __pure__ attribute was added in gcc 2.96.  */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96)
-# define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__))
-#else
-# define _GL_ATTRIBUTE_PURE /* empty */
-#endif
-
-/* The __const__ attribute was added in gcc 2.95.  */
-#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95)
-# define _GL_ATTRIBUTE_CONST __attribute__ ((__const__))
-#else
-# define _GL_ATTRIBUTE_CONST /* empty */
-#endif
-])
-  dnl Preparation for running test programs:
-  dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not
-  dnl to /dev/tty, so they can be redirected to log files.  Such diagnostics
-  dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N.
-  LIBC_FATAL_STDERR_=1
-  export LIBC_FATAL_STDERR_
-])
-
-# gl_MODULE_INDICATOR_CONDITION
-# expands to a C preprocessor expression that evaluates to 1 or 0, depending
-# whether a gnulib module that has been requested shall be considered present
-# or not.
-m4_define([gl_MODULE_INDICATOR_CONDITION], [1])
-
-# gl_MODULE_INDICATOR_SET_VARIABLE([modulename])
-# sets the shell variable that indicates the presence of the given module to
-# a C preprocessor expression that will evaluate to 1.
-AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE],
-[
-  gl_MODULE_INDICATOR_SET_VARIABLE_AUX(
-    [GNULIB_[]m4_translit([[$1]],
-                          [abcdefghijklmnopqrstuvwxyz./-],
-                          [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])],
-    [gl_MODULE_INDICATOR_CONDITION])
-])
-
-# gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable])
-# modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION.
-# The shell variable's value is a C preprocessor expression that evaluates
-# to 0 or 1.
-AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX],
-[
-  m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1],
-    [
-     dnl Simplify the expression VALUE || 1 to 1.
-     $1=1
-    ],
-    [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1],
-                                             [gl_MODULE_INDICATOR_CONDITION])])
-])
-
-# gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition])
-# modifies the shell variable to include the given condition.  The shell
-# variable's value is a C preprocessor expression that evaluates to 0 or 1.
-AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR],
-[
-  dnl Simplify the expression 1 || CONDITION to 1.
-  if test "$[]$1" != 1; then
-    dnl Simplify the expression 0 || CONDITION to CONDITION.
-    if test "$[]$1" = 0; then
-      $1=$2
-    else
-      $1="($[]$1 || $2)"
-    fi
-  fi
-])
-
-# gl_MODULE_INDICATOR([modulename])
-# defines a C macro indicating the presence of the given module
-# in a location where it can be used.
-#                                             |  Value  |   Value   |
-#                                             | in lib/ | in tests/ |
-# --------------------------------------------+---------+-----------+
-# Module present among main modules:          |    1    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module present among tests-related modules: |    0    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module not present at all:                  |    0    |     0     |
-# --------------------------------------------+---------+-----------+
-AC_DEFUN([gl_MODULE_INDICATOR],
-[
-  AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]],
-      [abcdefghijklmnopqrstuvwxyz./-],
-      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]),
-    [gl_MODULE_INDICATOR_CONDITION],
-    [Define to a C preprocessor expression that evaluates to 1 or 0,
-     depending whether the gnulib module $1 shall be considered present.])
-])
-
-# gl_MODULE_INDICATOR_FOR_TESTS([modulename])
-# defines a C macro indicating the presence of the given module
-# in lib or tests. This is useful to determine whether the module
-# should be tested.
-#                                             |  Value  |   Value   |
-#                                             | in lib/ | in tests/ |
-# --------------------------------------------+---------+-----------+
-# Module present among main modules:          |    1    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module present among tests-related modules: |    1    |     1     |
-# --------------------------------------------+---------+-----------+
-# Module not present at all:                  |    0    |     0     |
-# --------------------------------------------+---------+-----------+
-AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS],
-[
-  AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]],
-      [abcdefghijklmnopqrstuvwxyz./-],
-      [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1],
-    [Define to 1 when the gnulib module $1 should be tested.])
-])
-
-# gl_ASSERT_NO_GNULIB_POSIXCHECK
-# asserts that there will never be a need to #define GNULIB_POSIXCHECK.
-# and thereby enables an optimization of configure and config.h.
-# Used by Emacs.
-AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK],
-[
-  dnl Override gl_WARN_ON_USE_PREPARE.
-  dnl But hide this definition from 'aclocal'.
-  AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], [])
-])
-
-# gl_ASSERT_NO_GNULIB_TESTS
-# asserts that there will be no gnulib tests in the scope of the configure.ac
-# and thereby enables an optimization of config.h.
-# Used by Emacs.
-AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS],
-[
-  dnl Override gl_MODULE_INDICATOR_FOR_TESTS.
-  AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [])
-])
-
-# Test whether <features.h> exists.
-# Set HAVE_FEATURES_H.
-AC_DEFUN([gl_FEATURES_H],
-[
-  AC_CHECK_HEADERS_ONCE([features.h])
-  if test $ac_cv_header_features_h = yes; then
-    HAVE_FEATURES_H=1
-  else
-    HAVE_FEATURES_H=0
-  fi
-  AC_SUBST([HAVE_FEATURES_H])
-])
-
-# m4_foreach_w
-# is a backport of autoconf-2.59c's m4_foreach_w.
-# Remove this macro when we can assume autoconf >= 2.60.
-m4_ifndef([m4_foreach_w],
-  [m4_define([m4_foreach_w],
-    [m4_foreach([$1], m4_split(m4_normalize([$2]), [ ]), [$3])])])
-
-# AS_VAR_IF(VAR, VALUE, [IF-MATCH], [IF-NOT-MATCH])
-# ----------------------------------------------------
-# Backport of autoconf-2.63b's macro.
-# Remove this macro when we can assume autoconf >= 2.64.
-m4_ifndef([AS_VAR_IF],
-[m4_define([AS_VAR_IF],
-[AS_IF([test x"AS_VAR_GET([$1])" = x""$2], [$3], [$4])])])
-
-# gl_PROG_CC_C99
-# Modifies the value of the shell variable CC in an attempt to make $CC
-# understand ISO C99 source code.
-# This is like AC_PROG_CC_C99, except that
-# - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60,
-# - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC
-#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00367.html>,
-#   but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99
-#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00441.html>.
-# Remaining problems:
-# - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options
-#   to CC twice
-#   <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00431.html>.
-# - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard.
-AC_DEFUN([gl_PROG_CC_C99],
-[
-  dnl Change that version number to the minimum Autoconf version that supports
-  dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls.
-  m4_version_prereq([9.0],
-    [AC_REQUIRE([AC_PROG_CC_C99])],
-    [AC_REQUIRE([AC_PROG_CC_STDC])])
-])
-
-# gl_PROG_AR_RANLIB
-# Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler.
-# The user can set the variables AR, ARFLAGS, RANLIB if he wants to override
-# the values.
-AC_DEFUN([gl_PROG_AR_RANLIB],
-[
-  dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler
-  dnl as "cc", and GCC as "gcc". They have different object file formats and
-  dnl library formats. In particular, the GNU binutils programs ar, ranlib
-  dnl produce libraries that work only with gcc, not with cc.
-  AC_REQUIRE([AC_PROG_CC])
-  AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler],
-    [
-      AC_EGREP_CPP([Amsterdam],
-        [
-#ifdef __ACK__
-Amsterdam
-#endif
-        ],
-        [gl_cv_c_amsterdam_compiler=yes],
-        [gl_cv_c_amsterdam_compiler=no])
-    ])
-  if test -z "$AR"; then
-    if test $gl_cv_c_amsterdam_compiler = yes; then
-      AR='cc -c.a'
-      if test -z "$ARFLAGS"; then
-        ARFLAGS='-o'
-      fi
-    else
-      dnl Use the Automake-documented default values for AR and ARFLAGS,
-      dnl but prefer ${host}-ar over ar (useful for cross-compiling).
-      AC_CHECK_TOOL([AR], [ar], [ar])
-      if test -z "$ARFLAGS"; then
-        ARFLAGS='cru'
-      fi
-    fi
-  else
-    if test -z "$ARFLAGS"; then
-      ARFLAGS='cru'
-    fi
-  fi
-  AC_SUBST([AR])
-  AC_SUBST([ARFLAGS])
-  if test -z "$RANLIB"; then
-    if test $gl_cv_c_amsterdam_compiler = yes; then
-      RANLIB=':'
-    else
-      dnl Use the ranlib program if it is available.
-      AC_PROG_RANLIB
-    fi
-  fi
-  AC_SUBST([RANLIB])
-])
-
-# AC_PROG_MKDIR_P
-# is a backport of autoconf-2.60's AC_PROG_MKDIR_P, with a fix
-# for interoperability with automake-1.9.6 from autoconf-2.62.
-# Remove this macro when we can assume autoconf >= 2.62 or
-# autoconf >= 2.60 && automake >= 1.10.
-# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness.
-m4_ifndef([AC_AUTOCONF_VERSION],[
-m4_ifdef([AC_PROG_MKDIR_P], [
-  dnl For automake-1.9.6 && autoconf < 2.62: Ensure MKDIR_P is AC_SUBSTed.
-  m4_define([AC_PROG_MKDIR_P],
-    m4_defn([AC_PROG_MKDIR_P])[
-    AC_SUBST([MKDIR_P])])], [
-  dnl For autoconf < 2.60: Backport of AC_PROG_MKDIR_P.
-  AC_DEFUN_ONCE([AC_PROG_MKDIR_P],
-    [AC_REQUIRE([AM_PROG_MKDIR_P])dnl defined by automake
-     MKDIR_P='$(mkdir_p)'
-     AC_SUBST([MKDIR_P])])])
-])
-
-# AC_C_RESTRICT
-# This definition overrides the AC_C_RESTRICT macro from autoconf 2.60..2.61,
-# so that mixed use of GNU C and GNU C++ and mixed use of Sun C and Sun C++
-# works.
-# This definition can be removed once autoconf >= 2.62 can be assumed.
-# AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness.
-m4_ifndef([AC_AUTOCONF_VERSION],[
-AC_DEFUN([AC_C_RESTRICT],
-[AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict],
-  [ac_cv_c_restrict=no
-   # The order here caters to the fact that C++ does not require restrict.
-   for ac_kw in __restrict __restrict__ _Restrict restrict; do
-     AC_COMPILE_IFELSE([AC_LANG_PROGRAM(
-      [[typedef int * int_ptr;
-        int foo (int_ptr $ac_kw ip) {
-        return ip[0];
-       }]],
-      [[int s[1];
-        int * $ac_kw t = s;
-        t[0] = 0;
-        return foo(t)]])],
-      [ac_cv_c_restrict=$ac_kw])
-     test "$ac_cv_c_restrict" != no && break
-   done
-  ])
- AH_VERBATIM([restrict],
-[/* Define to the equivalent of the C99 'restrict' keyword, or to
-   nothing if this is not supported.  Do not define if restrict is
-   supported directly.  */
-#undef restrict
-/* Work around a bug in Sun C++: it does not support _Restrict, even
-   though the corresponding Sun C compiler does, which causes
-   "#define restrict _Restrict" in the previous line.  Perhaps some future
-   version of Sun C++ will work with _Restrict; if so, it'll probably
-   define __RESTRICT, just as Sun C does.  */
-#if defined __SUNPRO_CC && !defined __RESTRICT
-# define _Restrict
-#endif])
- case $ac_cv_c_restrict in
-   restrict) ;;
-   no) AC_DEFINE([restrict], []) ;;
-   *)  AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;;
- esac
-])
-])
-
-# gl_BIGENDIAN
-# is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd.
-# Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some
-# macros invoke AC_C_BIGENDIAN with arguments.
-AC_DEFUN([gl_BIGENDIAN],
-[
-  AC_C_BIGENDIAN
-])
-
-# gl_CACHE_VAL_SILENT(cache-id, command-to-set-it)
-# is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not
-# output a spurious "(cached)" mark in the midst of other configure output.
-# This macro should be used instead of AC_CACHE_VAL when it is not surrounded
-# by an AC_MSG_CHECKING/AC_MSG_RESULT pair.
-AC_DEFUN([gl_CACHE_VAL_SILENT],
-[
-  saved_as_echo_n="$as_echo_n"
-  as_echo_n=':'
-  AC_CACHE_VAL([$1], [$2])
-  as_echo_n="$saved_as_echo_n"
-])
diff --git a/src/libs/gnulib/m4/gnulib-comp.m4 b/src/libs/gnulib/m4/gnulib-comp.m4
deleted file mode 100644 (file)
index 4c779a0..0000000
+++ /dev/null
@@ -1,278 +0,0 @@
-# DO NOT EDIT! GENERATED AUTOMATICALLY!
-# Copyright (C) 2002-2014  Free Software Foundation, Inc.
-#
-# This file 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 3 of the License, or
-# (at your option) any later version.
-#
-# This file 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 file.  If not, see <http://www.gnu.org/licenses/>.
-#
-# As a special exception to the GNU General Public License,
-# this file may be distributed as part of a program that
-# contains a configuration script generated by Autoconf, under
-# the same distribution terms as the rest of that program.
-#
-# Generated by gnulib-tool.
-#
-# This file represents the compiled summary of the specification in
-# gnulib-cache.m4. It lists the computed macro invocations that need
-# to be invoked from configure.ac.
-# In projects that use version control, this file can be treated like
-# other built files.
-
-
-# This macro should be invoked from src/libs/gnulib/configure.ac, in the section
-# "Checks for programs", right after AC_PROG_CC, and certainly before
-# any checks for libraries, header files, types and library functions.
-AC_DEFUN([gl_EARLY],
-[
-  m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace
-  m4_pattern_allow([^gl_ES$])dnl a valid locale name
-  m4_pattern_allow([^gl_LIBOBJS$])dnl a variable
-  m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable
-  AC_REQUIRE([gl_PROG_AR_RANLIB])
-  AC_REQUIRE([AM_PROG_CC_C_O])
-  # Code from module configmake:
-  # Code from module extensions:
-  AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS])
-  # Code from module extern-inline:
-  # Code from module include_next:
-  # Code from module localcharset:
-  # Code from module multiarch:
-  # Code from module snippet/arg-nonnull:
-  # Code from module snippet/c++defs:
-  # Code from module snippet/warn-on-use:
-  # Code from module stddef:
-  # Code from module stdint:
-  # Code from module streq:
-  # Code from module unitypes:
-  # Code from module uniwidth/base:
-  # Code from module uniwidth/width:
-  # Code from module wchar:
-  # Code from module wctype-h:
-  # Code from module wcwidth:
-])
-
-# This macro should be invoked from src/libs/gnulib/configure.ac, in the section
-# "Check for header files, types and library functions".
-AC_DEFUN([gl_INIT],
-[
-  AM_CONDITIONAL([GL_COND_LIBTOOL], [false])
-  gl_cond_libtool=false
-  gl_libdeps=
-  gl_ltlibdeps=
-  gl_m4_base='m4'
-  m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ]))
-  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS]))
-  m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES]))
-  m4_pushdef([gl_LIBSOURCES_LIST], [])
-  m4_pushdef([gl_LIBSOURCES_DIR], [])
-  gl_COMMON
-  gl_source_base='lib'
-  gl_CONFIGMAKE_PREP
-  AC_REQUIRE([gl_EXTERN_INLINE])
-  gl_LOCALCHARSET
-  LOCALCHARSET_TESTS_ENVIRONMENT="CHARSETALIASDIR=\"\$(abs_top_builddir)/$gl_source_base\""
-  AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT])
-  gl_MULTIARCH
-  gl_STDDEF_H
-  gl_STDINT_H
-  gl_LIBUNISTRING_LIBHEADER([0.9], [unitypes.h])
-  gl_LIBUNISTRING_LIBHEADER([0.9], [uniwidth.h])
-  gl_LIBUNISTRING_MODULE([0.9.4], [uniwidth/width])
-  gl_WCHAR_H
-  gl_WCTYPE_H
-  gl_FUNC_WCWIDTH
-  if test $HAVE_WCWIDTH = 0 || test $REPLACE_WCWIDTH = 1; then
-    AC_LIBOBJ([wcwidth])
-  fi
-  gl_WCHAR_MODULE_INDICATOR([wcwidth])
-  # End of code from modules
-  m4_ifval(gl_LIBSOURCES_LIST, [
-    m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ ||
-      for gl_file in ]gl_LIBSOURCES_LIST[ ; do
-        if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then
-          echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2
-          exit 1
-        fi
-      done])dnl
-      m4_if(m4_sysval, [0], [],
-        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
-  ])
-  m4_popdef([gl_LIBSOURCES_DIR])
-  m4_popdef([gl_LIBSOURCES_LIST])
-  m4_popdef([AC_LIBSOURCES])
-  m4_popdef([AC_REPLACE_FUNCS])
-  m4_popdef([AC_LIBOBJ])
-  AC_CONFIG_COMMANDS_PRE([
-    gl_libobjs=
-    gl_ltlibobjs=
-    if test -n "$gl_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gl_libobjs="$gl_libobjs $i.$ac_objext"
-        gl_ltlibobjs="$gl_ltlibobjs $i.lo"
-      done
-    fi
-    AC_SUBST([gl_LIBOBJS], [$gl_libobjs])
-    AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs])
-  ])
-  gltests_libdeps=
-  gltests_ltlibdeps=
-  m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ]))
-  m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS]))
-  m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES]))
-  m4_pushdef([gltests_LIBSOURCES_LIST], [])
-  m4_pushdef([gltests_LIBSOURCES_DIR], [])
-  gl_COMMON
-  gl_source_base='tests'
-changequote(,)dnl
-  gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS
-changequote([, ])dnl
-  AC_SUBST([gltests_WITNESS])
-  gl_module_indicator_condition=$gltests_WITNESS
-  m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition])
-  m4_popdef([gl_MODULE_INDICATOR_CONDITION])
-  m4_ifval(gltests_LIBSOURCES_LIST, [
-    m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ ||
-      for gl_file in ]gltests_LIBSOURCES_LIST[ ; do
-        if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then
-          echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2
-          exit 1
-        fi
-      done])dnl
-      m4_if(m4_sysval, [0], [],
-        [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])])
-  ])
-  m4_popdef([gltests_LIBSOURCES_DIR])
-  m4_popdef([gltests_LIBSOURCES_LIST])
-  m4_popdef([AC_LIBSOURCES])
-  m4_popdef([AC_REPLACE_FUNCS])
-  m4_popdef([AC_LIBOBJ])
-  AC_CONFIG_COMMANDS_PRE([
-    gltests_libobjs=
-    gltests_ltlibobjs=
-    if test -n "$gltests_LIBOBJS"; then
-      # Remove the extension.
-      sed_drop_objext='s/\.o$//;s/\.obj$//'
-      for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do
-        gltests_libobjs="$gltests_libobjs $i.$ac_objext"
-        gltests_ltlibobjs="$gltests_ltlibobjs $i.lo"
-      done
-    fi
-    AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs])
-    AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs])
-  ])
-  LIBGNU_LIBDEPS="$gl_libdeps"
-  AC_SUBST([LIBGNU_LIBDEPS])
-  LIBGNU_LTLIBDEPS="$gl_ltlibdeps"
-  AC_SUBST([LIBGNU_LTLIBDEPS])
-])
-
-# Like AC_LIBOBJ, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gl_LIBOBJ], [
-  AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl
-  gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext"
-])
-
-# Like AC_REPLACE_FUNCS, except that the module name goes
-# into gl_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gl_REPLACE_FUNCS], [
-  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
-  AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)])
-])
-
-# Like AC_LIBSOURCES, except the directory where the source file is
-# expected is derived from the gnulib-tool parameterization,
-# and alloca is special cased (for the alloca-opt module).
-# We could also entirely rely on EXTRA_lib..._SOURCES.
-AC_DEFUN([gl_LIBSOURCES], [
-  m4_foreach([_gl_NAME], [$1], [
-    m4_if(_gl_NAME, [alloca.c], [], [
-      m4_define([gl_LIBSOURCES_DIR], [lib])
-      m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ])
-    ])
-  ])
-])
-
-# Like AC_LIBOBJ, except that the module name goes
-# into gltests_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gltests_LIBOBJ], [
-  AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl
-  gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext"
-])
-
-# Like AC_REPLACE_FUNCS, except that the module name goes
-# into gltests_LIBOBJS instead of into LIBOBJS.
-AC_DEFUN([gltests_REPLACE_FUNCS], [
-  m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl
-  AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)])
-])
-
-# Like AC_LIBSOURCES, except the directory where the source file is
-# expected is derived from the gnulib-tool parameterization,
-# and alloca is special cased (for the alloca-opt module).
-# We could also entirely rely on EXTRA_lib..._SOURCES.
-AC_DEFUN([gltests_LIBSOURCES], [
-  m4_foreach([_gl_NAME], [$1], [
-    m4_if(_gl_NAME, [alloca.c], [], [
-      m4_define([gltests_LIBSOURCES_DIR], [tests])
-      m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ])
-    ])
-  ])
-])
-
-# This macro records the list of files which have been installed by
-# gnulib-tool and may be removed by future gnulib-tool invocations.
-AC_DEFUN([gl_FILE_LIST], [
-  build-aux/snippet/arg-nonnull.h
-  build-aux/snippet/c++defs.h
-  build-aux/snippet/warn-on-use.h
-  lib/config.charset
-  lib/localcharset.c
-  lib/localcharset.h
-  lib/ref-add.sin
-  lib/ref-del.sin
-  lib/stddef.in.h
-  lib/stdint.in.h
-  lib/streq.h
-  lib/unitypes.in.h
-  lib/uniwidth.in.h
-  lib/uniwidth/cjk.h
-  lib/uniwidth/width.c
-  lib/wchar.in.h
-  lib/wctype-h.c
-  lib/wctype.in.h
-  lib/wcwidth.c
-  m4/00gnulib.m4
-  m4/codeset.m4
-  m4/configmake.m4
-  m4/extensions.m4
-  m4/extern-inline.m4
-  m4/fcntl-o.m4
-  m4/glibc21.m4
-  m4/gnulib-common.m4
-  m4/include_next.m4
-  m4/libunistring-base.m4
-  m4/localcharset.m4
-  m4/longlong.m4
-  m4/multiarch.m4
-  m4/onceonly.m4
-  m4/stddef_h.m4
-  m4/stdint.m4
-  m4/warn-on-use.m4
-  m4/wchar_h.m4
-  m4/wchar_t.m4
-  m4/wctype_h.m4
-  m4/wcwidth.m4
-  m4/wint_t.m4
-])
diff --git a/src/libs/gnulib/m4/gnulib-tool.m4 b/src/libs/gnulib/m4/gnulib-tool.m4
deleted file mode 100644 (file)
index a588e15..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-# gnulib-tool.m4 serial 2
-dnl Copyright (C) 2004-2005, 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl The following macros need not be invoked explicitly.
-dnl Invoking them does nothing except to declare default arguments
-dnl for "gnulib-tool --import".
-
-dnl Usage: gl_LOCAL_DIR([DIR])
-AC_DEFUN([gl_LOCAL_DIR], [])
-
-dnl Usage: gl_MODULES([module1 module2 ...])
-AC_DEFUN([gl_MODULES], [])
-
-dnl Usage: gl_AVOID([module1 module2 ...])
-AC_DEFUN([gl_AVOID], [])
-
-dnl Usage: gl_SOURCE_BASE([DIR])
-AC_DEFUN([gl_SOURCE_BASE], [])
-
-dnl Usage: gl_M4_BASE([DIR])
-AC_DEFUN([gl_M4_BASE], [])
-
-dnl Usage: gl_PO_BASE([DIR])
-AC_DEFUN([gl_PO_BASE], [])
-
-dnl Usage: gl_DOC_BASE([DIR])
-AC_DEFUN([gl_DOC_BASE], [])
-
-dnl Usage: gl_TESTS_BASE([DIR])
-AC_DEFUN([gl_TESTS_BASE], [])
-
-dnl Usage: gl_WITH_TESTS
-AC_DEFUN([gl_WITH_TESTS], [])
-
-dnl Usage: gl_LIB([LIBNAME])
-AC_DEFUN([gl_LIB], [])
-
-dnl Usage: gl_LGPL or gl_LGPL([VERSION])
-AC_DEFUN([gl_LGPL], [])
-
-dnl Usage: gl_MAKEFILE_NAME([FILENAME])
-AC_DEFUN([gl_MAKEFILE_NAME], [])
-
-dnl Usage: gl_LIBTOOL
-AC_DEFUN([gl_LIBTOOL], [])
-
-dnl Usage: gl_MACRO_PREFIX([PREFIX])
-AC_DEFUN([gl_MACRO_PREFIX], [])
-
-dnl Usage: gl_PO_DOMAIN([DOMAIN])
-AC_DEFUN([gl_PO_DOMAIN], [])
-
-dnl Usage: gl_VC_FILES([BOOLEAN])
-AC_DEFUN([gl_VC_FILES], [])
diff --git a/src/libs/gnulib/m4/include_next.m4 b/src/libs/gnulib/m4/include_next.m4
deleted file mode 100644 (file)
index 7c4c5ef..0000000
+++ /dev/null
@@ -1,270 +0,0 @@
-# include_next.m4 serial 23
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert and Derek Price.
-
-dnl Sets INCLUDE_NEXT and PRAGMA_SYSTEM_HEADER.
-dnl
-dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to
-dnl 'include' otherwise.
-dnl
-dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler
-dnl supports it in the special case that it is the first include directive in
-dnl the given file, or to 'include' otherwise.
-dnl
-dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next,
-dnl so as to avoid GCC warnings when the gcc option -pedantic is used.
-dnl '#pragma GCC system_header' has the same effect as if the file was found
-dnl through the include search path specified with '-isystem' options (as
-dnl opposed to the search path specified with '-I' options). Namely, gcc
-dnl does not warn about some things, and on some systems (Solaris and Interix)
-dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side
-dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead
-dnl of plain '__STDC__'.
-dnl
-dnl PRAGMA_COLUMNS can be used in files that override system header files, so
-dnl as to avoid compilation errors on HP NonStop systems when the gnulib file
-dnl is included by a system header file that does a "#pragma COLUMNS 80" (which
-dnl has the effect of truncating the lines of that file and all files that it
-dnl includes to 80 columns) and the gnulib file has lines longer than 80
-dnl columns.
-
-AC_DEFUN([gl_INCLUDE_NEXT],
-[
-  AC_LANG_PREPROC_REQUIRE()
-  AC_CACHE_CHECK([whether the preprocessor supports include_next],
-    [gl_cv_have_include_next],
-    [rm -rf conftestd1a conftestd1b conftestd2
-     mkdir conftestd1a conftestd1b conftestd2
-     dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on
-     dnl AIX 6.1 support include_next when used as first preprocessor directive
-     dnl in a file, but not when preceded by another include directive. Check
-     dnl for this bug by including <stdio.h>.
-     dnl Additionally, with this same compiler, include_next is a no-op when
-     dnl used in a header file that was included by specifying its absolute
-     dnl file name. Despite these two bugs, include_next is used in the
-     dnl compiler's <math.h>. By virtue of the second bug, we need to use
-     dnl include_next as well in this case.
-     cat <<EOF > conftestd1a/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd1b/conftest.h
-#define DEFINED_IN_CONFTESTD1
-#include <stdio.h>
-#include_next <conftest.h>
-#ifdef DEFINED_IN_CONFTESTD2
-int foo;
-#else
-#error "include_next doesn't work"
-#endif
-EOF
-     cat <<EOF > conftestd2/conftest.h
-#ifndef DEFINED_IN_CONFTESTD1
-#error "include_next test doesn't work"
-#endif
-#define DEFINED_IN_CONFTESTD2
-EOF
-     gl_save_CPPFLAGS="$CPPFLAGS"
-     CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2"
-dnl We intentionally avoid using AC_LANG_SOURCE here.
-     AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
-       [gl_cv_have_include_next=yes],
-       [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2"
-        AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]],
-          [gl_cv_have_include_next=buggy],
-          [gl_cv_have_include_next=no])
-       ])
-     CPPFLAGS="$gl_save_CPPFLAGS"
-     rm -rf conftestd1a conftestd1b conftestd2
-    ])
-  PRAGMA_SYSTEM_HEADER=
-  if test $gl_cv_have_include_next = yes; then
-    INCLUDE_NEXT=include_next
-    INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    if test -n "$GCC"; then
-      PRAGMA_SYSTEM_HEADER='#pragma GCC system_header'
-    fi
-  else
-    if test $gl_cv_have_include_next = buggy; then
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next
-    else
-      INCLUDE_NEXT=include
-      INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include
-    fi
-  fi
-  AC_SUBST([INCLUDE_NEXT])
-  AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE])
-  AC_SUBST([PRAGMA_SYSTEM_HEADER])
-  AC_CACHE_CHECK([whether system header files limit the line length],
-    [gl_cv_pragma_columns],
-    [dnl HP NonStop systems, which define __TANDEM, have this misfeature.
-     AC_EGREP_CPP([choke me],
-       [
-#ifdef __TANDEM
-choke me
-#endif
-       ],
-       [gl_cv_pragma_columns=yes],
-       [gl_cv_pragma_columns=no])
-    ])
-  if test $gl_cv_pragma_columns = yes; then
-    PRAGMA_COLUMNS="#pragma COLUMNS 10000"
-  else
-    PRAGMA_COLUMNS=
-  fi
-  AC_SUBST([PRAGMA_COLUMNS])
-])
-
-# gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...)
-# ------------------------------------------
-# For each arg foo.h, if #include_next works, define NEXT_FOO_H to be
-# '<foo.h>'; otherwise define it to be
-# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
-# Also, if #include_next works as first preprocessing directive in a file,
-# define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to
-# be
-# '"///usr/include/foo.h"', or whatever other absolute file name is suitable.
-# That way, a header file with the following line:
-#       #@INCLUDE_NEXT@ @NEXT_FOO_H@
-# or
-#       #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@
-# behaves (after sed substitution) as if it contained
-#       #include_next <foo.h>
-# even if the compiler does not support include_next.
-# The three "///" are to pacify Sun C 5.8, which otherwise would say
-# "warning: #include of /usr/include/... may be non-portable".
-# Use '""', not '<>', so that the /// cannot be confused with a C99 comment.
-# Note: This macro assumes that the header file is not empty after
-# preprocessing, i.e. it does not only define preprocessor macros but also
-# provides some type/enum definitions or function/variable declarations.
-#
-# This macro also checks whether each header exists, by invoking
-# AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument.
-AC_DEFUN([gl_CHECK_NEXT_HEADERS],
-[
-  gl_NEXT_HEADERS_INTERNAL([$1], [check])
-])
-
-# gl_NEXT_HEADERS(HEADER1 HEADER2 ...)
-# ------------------------------------
-# Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist.
-# This is suitable for headers like <stddef.h> that are standardized by C89
-# and therefore can be assumed to exist.
-AC_DEFUN([gl_NEXT_HEADERS],
-[
-  gl_NEXT_HEADERS_INTERNAL([$1], [assume])
-])
-
-# The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS.
-AC_DEFUN([gl_NEXT_HEADERS_INTERNAL],
-[
-  AC_REQUIRE([gl_INCLUDE_NEXT])
-  AC_REQUIRE([AC_CANONICAL_HOST])
-
-  m4_if([$2], [check],
-    [AC_CHECK_HEADERS_ONCE([$1])
-    ])
-
-dnl FIXME: gl_next_header and gl_header_exists must be used unquoted
-dnl until we can assume autoconf 2.64 or newer.
-  m4_foreach_w([gl_HEADER_NAME], [$1],
-    [AS_VAR_PUSHDEF([gl_next_header],
-                    [gl_cv_next_]m4_defn([gl_HEADER_NAME]))
-     if test $gl_cv_have_include_next = yes; then
-       AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
-     else
-       AC_CACHE_CHECK(
-         [absolute name of <]m4_defn([gl_HEADER_NAME])[>],
-         m4_defn([gl_next_header]),
-         [m4_if([$2], [check],
-            [AS_VAR_PUSHDEF([gl_header_exists],
-                            [ac_cv_header_]m4_defn([gl_HEADER_NAME]))
-             if test AS_VAR_GET(gl_header_exists) = yes; then
-             AS_VAR_POPDEF([gl_header_exists])
-            ])
-               AC_LANG_CONFTEST(
-                 [AC_LANG_SOURCE(
-                    [[#include <]]m4_dquote(m4_defn([gl_HEADER_NAME]))[[>]]
-                  )])
-               dnl AIX "xlc -E" and "cc -E" omit #line directives for header
-               dnl files that contain only a #include of other header files and
-               dnl no non-comment tokens of their own. This leads to a failure
-               dnl to detect the absolute name of <dirent.h>, <signal.h>,
-               dnl <poll.h> and others. The workaround is to force preservation
-               dnl of comments through option -C. This ensures all necessary
-               dnl #line directives are present. GCC supports option -C as well.
-               case "$host_os" in
-                 aix*) gl_absname_cpp="$ac_cpp -C" ;;
-                 *)    gl_absname_cpp="$ac_cpp" ;;
-               esac
-changequote(,)
-               case "$host_os" in
-                 mingw*)
-                   dnl For the sake of native Windows compilers (excluding gcc),
-                   dnl treat backslash as a directory separator, like /.
-                   dnl Actually, these compilers use a double-backslash as
-                   dnl directory separator, inside the
-                   dnl   # line "filename"
-                   dnl directives.
-                   gl_dirsep_regex='[/\\]'
-                   ;;
-                 *)
-                   gl_dirsep_regex='\/'
-                   ;;
-               esac
-               dnl A sed expression that turns a string into a basic regular
-               dnl expression, for use within "/.../".
-               gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g'
-changequote([,])
-               gl_header_literal_regex=`echo ']m4_defn([gl_HEADER_NAME])[' \
-                                        | sed -e "$gl_make_literal_regex_sed"`
-               gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{
-                   s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/
-changequote(,)dnl
-                   s|^/[^/]|//&|
-changequote([,])dnl
-                   p
-                   q
-                 }'
-               dnl eval is necessary to expand gl_absname_cpp.
-               dnl Ultrix and Pyramid sh refuse to redirect output of eval,
-               dnl so use subshell.
-               AS_VAR_SET(gl_next_header,
-                 ['"'`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD |
-                      sed -n "$gl_absolute_header_sed"`'"'])
-          m4_if([$2], [check],
-            [else
-               AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>'])
-             fi
-            ])
-         ])
-     fi
-     AC_SUBST(
-       AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])),
-       [AS_VAR_GET(gl_next_header)])
-     if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next'
-       gl_next_as_first_directive='<'gl_HEADER_NAME'>'
-     else
-       # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include'
-       gl_next_as_first_directive=AS_VAR_GET(gl_next_header)
-     fi
-     AC_SUBST(
-       AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])),
-       [$gl_next_as_first_directive])
-     AS_VAR_POPDEF([gl_next_header])])
-])
-
-# Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE;
-# this fallback is safe for all earlier autoconf versions.
-m4_define_default([AC_LANG_DEFINES_PROVIDED])
diff --git a/src/libs/gnulib/m4/inttypes-pri.m4 b/src/libs/gnulib/m4/inttypes-pri.m4
deleted file mode 100644 (file)
index 00251e1..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# inttypes-pri.m4 serial 7 (gettext-0.18.2)
-dnl Copyright (C) 1997-2002, 2006, 2008-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-
-AC_PREREQ([2.53])
-
-# Define PRI_MACROS_BROKEN if <inttypes.h> exists and defines the PRI*
-# macros to non-string values.  This is the case on AIX 4.3.3.
-
-AC_DEFUN([gt_INTTYPES_PRI],
-[
-  AC_CHECK_HEADERS([inttypes.h])
-  if test $ac_cv_header_inttypes_h = yes; then
-    AC_CACHE_CHECK([whether the inttypes.h PRIxNN macros are broken],
-      [gt_cv_inttypes_pri_broken],
-      [
-        AC_COMPILE_IFELSE(
-          [AC_LANG_PROGRAM(
-             [[
-#include <inttypes.h>
-#ifdef PRId32
-char *p = PRId32;
-#endif
-             ]],
-             [[]])],
-          [gt_cv_inttypes_pri_broken=no],
-          [gt_cv_inttypes_pri_broken=yes])
-      ])
-  fi
-  if test "$gt_cv_inttypes_pri_broken" = yes; then
-    AC_DEFINE_UNQUOTED([PRI_MACROS_BROKEN], [1],
-      [Define if <inttypes.h> exists and defines unusable PRI* macros.])
-    PRI_MACROS_BROKEN=1
-  else
-    PRI_MACROS_BROKEN=0
-  fi
-  AC_SUBST([PRI_MACROS_BROKEN])
-])
diff --git a/src/libs/gnulib/m4/inttypes.m4 b/src/libs/gnulib/m4/inttypes.m4
deleted file mode 100644 (file)
index fc570a1..0000000
+++ /dev/null
@@ -1,157 +0,0 @@
-# inttypes.m4 serial 26
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Derek Price, Bruno Haible.
-dnl Test whether <inttypes.h> is supported or must be substituted.
-
-AC_DEFUN([gl_INTTYPES_H],
-[
-  AC_REQUIRE([gl_INTTYPES_INCOMPLETE])
-  gl_INTTYPES_PRI_SCN
-])
-
-AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE],
-[
-  AC_REQUIRE([gl_STDINT_H])
-  AC_CHECK_HEADERS_ONCE([inttypes.h])
-
-  dnl Override <inttypes.h> always, so that the portability warnings work.
-  AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
-  gl_CHECK_NEXT_HEADERS([inttypes.h])
-
-  AC_REQUIRE([gl_MULTIARCH])
-
-  dnl Check for declarations of anything we want to poison if the
-  dnl corresponding gnulib module is not in use.
-  gl_WARN_ON_USE_PREPARE([[#include <inttypes.h>
-    ]], [imaxabs imaxdiv strtoimax strtoumax])
-])
-
-# Ensure that the PRI* and SCN* macros are defined appropriately.
-AC_DEFUN([gl_INTTYPES_PRI_SCN],
-[
-  AC_REQUIRE([gt_INTTYPES_PRI])
-
-  PRIPTR_PREFIX=
-  if test -n "$STDINT_H"; then
-    dnl Using the gnulib <stdint.h>. It always defines intptr_t to 'long'.
-    PRIPTR_PREFIX='"l"'
-  else
-    dnl Using the system's <stdint.h>.
-    for glpfx in '' l ll I64; do
-      case $glpfx in
-        '')  gltype1='int';;
-        l)   gltype1='long int';;
-        ll)  gltype1='long long int';;
-        I64) gltype1='__int64';;
-      esac
-      AC_COMPILE_IFELSE(
-        [AC_LANG_PROGRAM([[#include <stdint.h>
-           extern intptr_t foo;
-           extern $gltype1 foo;]])],
-        [PRIPTR_PREFIX='"'$glpfx'"'])
-      test -n "$PRIPTR_PREFIX" && break
-    done
-  fi
-  AC_SUBST([PRIPTR_PREFIX])
-
-  gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-    [INT32_MAX_LT_INTMAX_MAX],
-    [defined INT32_MAX && defined INTMAX_MAX],
-    [INT32_MAX < INTMAX_MAX],
-    [sizeof (int) < sizeof (long long int)])
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-    gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-      [INT64_MAX_EQ_LONG_MAX],
-      [defined INT64_MAX],
-      [INT64_MAX == LONG_MAX],
-      [sizeof (long long int) == sizeof (long int)])
-  else
-    INT64_MAX_EQ_LONG_MAX=-1
-  fi
-  gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-    [UINT32_MAX_LT_UINTMAX_MAX],
-    [defined UINT32_MAX && defined UINTMAX_MAX],
-    [UINT32_MAX < UINTMAX_MAX],
-    [sizeof (unsigned int) < sizeof (unsigned long long int)])
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-    gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION(
-      [UINT64_MAX_EQ_ULONG_MAX],
-      [defined UINT64_MAX],
-      [UINT64_MAX == ULONG_MAX],
-      [sizeof (unsigned long long int) == sizeof (unsigned long int)])
-  else
-    UINT64_MAX_EQ_ULONG_MAX=-1
-  fi
-])
-
-# Define the symbol $1 to be 1 if the condition is true, 0 otherwise.
-# If $2 is true, the condition is $3; otherwise if long long int is supported
-# approximate the condition with $4; otherwise, assume the condition is false.
-# The condition should work on all C99 platforms; the approximations should be
-# good enough to work on all practical pre-C99 platforms.
-# $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants.
-AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION],
-[
-  AC_CACHE_CHECK([whether $3],
-    [gl_cv_test_$1],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[/* Work also in C++ mode.  */
-            #define __STDC_LIMIT_MACROS 1
-
-            /* Work if build is not clean.  */
-            #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H
-
-            #include <limits.h>
-            #if HAVE_STDINT_H
-             #include <stdint.h>
-            #endif
-
-            #if $2
-             #define CONDITION ($3)
-            #elif HAVE_LONG_LONG_INT
-             #define CONDITION ($4)
-            #else
-             #define CONDITION 0
-            #endif
-            int test[CONDITION ? 1 : -1];]])],
-       [gl_cv_test_$1=yes],
-       [gl_cv_test_$1=no])])
-  if test $gl_cv_test_$1 = yes; then
-    $1=1;
-  else
-    $1=0;
-  fi
-  AC_SUBST([$1])
-])
-
-AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_INTTYPES_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-])
-
-AC_DEFUN([gl_INTTYPES_H_DEFAULTS],
-[
-  GNULIB_IMAXABS=0;      AC_SUBST([GNULIB_IMAXABS])
-  GNULIB_IMAXDIV=0;      AC_SUBST([GNULIB_IMAXDIV])
-  GNULIB_STRTOIMAX=0;    AC_SUBST([GNULIB_STRTOIMAX])
-  GNULIB_STRTOUMAX=0;    AC_SUBST([GNULIB_STRTOUMAX])
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_DECL_IMAXABS=1;   AC_SUBST([HAVE_DECL_IMAXABS])
-  HAVE_DECL_IMAXDIV=1;   AC_SUBST([HAVE_DECL_IMAXDIV])
-  HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX])
-  HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX])
-  REPLACE_STRTOIMAX=0;   AC_SUBST([REPLACE_STRTOIMAX])
-  INT32_MAX_LT_INTMAX_MAX=1;  AC_SUBST([INT32_MAX_LT_INTMAX_MAX])
-  INT64_MAX_EQ_LONG_MAX='defined _LP64';  AC_SUBST([INT64_MAX_EQ_LONG_MAX])
-  PRI_MACROS_BROKEN=0;   AC_SUBST([PRI_MACROS_BROKEN])
-  PRIPTR_PREFIX=__PRIPTR_PREFIX;  AC_SUBST([PRIPTR_PREFIX])
-  UINT32_MAX_LT_UINTMAX_MAX=1;  AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX])
-  UINT64_MAX_EQ_ULONG_MAX='defined _LP64';  AC_SUBST([UINT64_MAX_EQ_ULONG_MAX])
-])
diff --git a/src/libs/gnulib/m4/libunistring-base.m4 b/src/libs/gnulib/m4/libunistring-base.m4
deleted file mode 100644 (file)
index d003267..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-# libunistring-base.m4 serial 5
-dnl Copyright (C) 2010-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paolo Bonzini and Bruno Haible.
-
-dnl gl_LIBUNISTRING_MODULE([VERSION], [Module])
-dnl Declares that the source files of Module should be compiled, unless we
-dnl are linking with libunistring and its version is >= the given VERSION.
-dnl Defines an automake conditional LIBUNISTRING_COMPILE_$MODULE that is
-dnl true if the source files of Module should be compiled.
-dnl This macro is to be used for public libunistring API, not for
-dnl undocumented API.
-dnl
-dnl You have to bump the VERSION argument to the next projected version
-dnl number each time you make a change that affects the behaviour of the
-dnl functions defined in Module (even if the sources of Module itself do not
-dnl change).
-
-AC_DEFUN([gl_LIBUNISTRING_MODULE],
-[
-  AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE])
-  dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from
-  dnl gl_LIBUNISTRING_CORE if that macro has been run.
-  AM_CONDITIONAL(AS_TR_CPP([LIBUNISTRING_COMPILE_$2]),
-    [gl_LIBUNISTRING_VERSION_CMP([$1])])
-])
-
-dnl gl_LIBUNISTRING_LIBHEADER([VERSION], [HeaderFile])
-dnl Declares that HeaderFile should be created, unless we are linking
-dnl with libunistring and its version is >= the given VERSION.
-dnl HeaderFile should be relative to the lib directory and end in '.h'.
-dnl Prepares for substituting LIBUNISTRING_HEADERFILE (to HeaderFile or empty).
-dnl
-dnl When we are linking with the already installed libunistring and its version
-dnl is < VERSION, we create HeaderFile here, because we may compile functions
-dnl (via gl_LIBUNISTRING_MODULE above) that are not contained in the installed
-dnl version.
-dnl When we are linking with the already installed libunistring and its version
-dnl is > VERSION, we don't create HeaderFile here: it could cause compilation
-dnl errors in other libunistring header files if some types are missing.
-dnl
-dnl You have to bump the VERSION argument to the next projected version
-dnl number each time you make a non-comment change to the HeaderFile.
-
-AC_DEFUN([gl_LIBUNISTRING_LIBHEADER],
-[
-  AC_REQUIRE([gl_LIBUNISTRING_LIB_PREPARE])
-  dnl Use the variables HAVE_LIBUNISTRING, LIBUNISTRING_VERSION from
-  dnl gl_LIBUNISTRING_CORE if that macro has been run.
-  if gl_LIBUNISTRING_VERSION_CMP([$1]); then
-    LIBUNISTRING_[]AS_TR_CPP([$2])='$2'
-  else
-    LIBUNISTRING_[]AS_TR_CPP([$2])=
-  fi
-  AC_SUBST([LIBUNISTRING_]AS_TR_CPP([$2]))
-])
-
-dnl Miscellaneous preparations/initializations.
-
-AC_DEFUN([gl_LIBUNISTRING_LIB_PREPARE],
-[
-  dnl Ensure that HAVE_LIBUNISTRING is fully determined at this point.
-  m4_ifdef([gl_LIBUNISTRING], [AC_REQUIRE([gl_LIBUNISTRING])])
-
-  AC_REQUIRE([AC_PROG_AWK])
-
-dnl Sed expressions to extract the parts of a version number.
-changequote(,)
-gl_libunistring_sed_extract_major='/^[0-9]/{s/^\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-gl_libunistring_sed_extract_minor='/^[0-9][0-9]*[.][0-9]/{s/^[0-9]*[.]\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-gl_libunistring_sed_extract_subminor='/^[0-9][0-9]*[.][0-9][0-9]*[.][0-9]/{s/^[0-9]*[.][0-9]*[.]\([0-9]*\).*/\1/p;q;}
-i\
-0
-q
-'
-changequote([,])
-
-  if test "$HAVE_LIBUNISTRING" = yes; then
-    LIBUNISTRING_VERSION_MAJOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_major"`
-    LIBUNISTRING_VERSION_MINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_minor"`
-    LIBUNISTRING_VERSION_SUBMINOR=`echo "$LIBUNISTRING_VERSION" | sed -n -e "$gl_libunistring_sed_extract_subminor"`
-  fi
-])
-
-dnl gl_LIBUNISTRING_VERSION_CMP([VERSION])
-dnl Expands to a shell statement that evaluates to true if LIBUNISTRING_VERSION
-dnl is less than the VERSION argument.
-AC_DEFUN([gl_LIBUNISTRING_VERSION_CMP],
-[ { test "$HAVE_LIBUNISTRING" != yes \
-    || {
-         dnl AS_LITERAL_IF exists and works fine since autoconf-2.59 at least.
-         AS_LITERAL_IF([$1],
-           [dnl This is the optimized variant, that assumes the argument is a literal:
-            m4_pushdef([requested_version_major],
-              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^\([0-9]*\).*], [\1]), [])])
-            m4_pushdef([requested_version_minor],
-              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.]\([0-9]*\).*], [\1]), [$1])])
-            m4_pushdef([requested_version_subminor],
-              [gl_LIBUNISTRING_ARG_OR_ZERO(m4_bpatsubst([$1], [^[0-9]*[.][0-9]*[.]\([0-9]*\).*], [\1]), [$1])])
-            test $LIBUNISTRING_VERSION_MAJOR -lt requested_version_major \
-            || { test $LIBUNISTRING_VERSION_MAJOR -eq requested_version_major \
-                 && { test $LIBUNISTRING_VERSION_MINOR -lt requested_version_minor \
-                      || { test $LIBUNISTRING_VERSION_MINOR -eq requested_version_minor \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt requested_version_subminor
-                         }
-                    }
-               }
-            m4_popdef([requested_version_subminor])
-            m4_popdef([requested_version_minor])
-            m4_popdef([requested_version_major])
-           ],
-           [dnl This is the unoptimized variant:
-            requested_version_major=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_major"`
-            requested_version_minor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_minor"`
-            requested_version_subminor=`echo '$1' | sed -n -e "$gl_libunistring_sed_extract_subminor"`
-            test $LIBUNISTRING_VERSION_MAJOR -lt $requested_version_major \
-            || { test $LIBUNISTRING_VERSION_MAJOR -eq $requested_version_major \
-                 && { test $LIBUNISTRING_VERSION_MINOR -lt $requested_version_minor \
-                      || { test $LIBUNISTRING_VERSION_MINOR -eq $requested_version_minor \
-                           && test $LIBUNISTRING_VERSION_SUBMINOR -lt $requested_version_subminor
-                         }
-                    }
-               }
-           ])
-       }
-  }])
-
-dnl gl_LIBUNISTRING_ARG_OR_ZERO([ARG], [ORIG]) expands to ARG if it is not the
-dnl same as ORIG, otherwise to 0.
-m4_define([gl_LIBUNISTRING_ARG_OR_ZERO], [m4_if([$1], [$2], [0], [$1])])
diff --git a/src/libs/gnulib/m4/localcharset.m4 b/src/libs/gnulib/m4/localcharset.m4
deleted file mode 100644 (file)
index ada2f01..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-# localcharset.m4 serial 7
-dnl Copyright (C) 2002, 2004, 2006, 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_LOCALCHARSET],
-[
-  dnl Prerequisites of lib/localcharset.c.
-  AC_REQUIRE([AM_LANGINFO_CODESET])
-  AC_REQUIRE([gl_FCNTL_O_FLAGS])
-  AC_CHECK_DECLS_ONCE([getc_unlocked])
-
-  dnl Prerequisites of the lib/Makefile.am snippet.
-  AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_REQUIRE([gl_GLIBC21])
-])
diff --git a/src/libs/gnulib/m4/longlong.m4 b/src/libs/gnulib/m4/longlong.m4
deleted file mode 100644 (file)
index eefb37c..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-# longlong.m4 serial 17
-dnl Copyright (C) 1999-2007, 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert.
-
-# Define HAVE_LONG_LONG_INT if 'long long int' works.
-# This fixes a bug in Autoconf 2.61, and can be faster
-# than what's in Autoconf 2.62 through 2.68.
-
-# Note: If the type 'long long int' exists but is only 32 bits large
-# (as on some very old compilers), HAVE_LONG_LONG_INT will not be
-# defined. In this case you can treat 'long long int' like 'long int'.
-
-AC_DEFUN([AC_TYPE_LONG_LONG_INT],
-[
-  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
-  AC_CACHE_CHECK([for long long int], [ac_cv_type_long_long_int],
-     [ac_cv_type_long_long_int=yes
-      if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-        ac_cv_type_long_long_int=$ac_cv_type_unsigned_long_long_int
-        if test $ac_cv_type_long_long_int = yes; then
-          dnl Catch a bug in Tandem NonStop Kernel (OSS) cc -O circa 2004.
-          dnl If cross compiling, assume the bug is not important, since
-          dnl nobody cross compiles for this platform as far as we know.
-          AC_RUN_IFELSE(
-            [AC_LANG_PROGRAM(
-               [[@%:@include <limits.h>
-                 @%:@ifndef LLONG_MAX
-                 @%:@ define HALF \
-                          (1LL << (sizeof (long long int) * CHAR_BIT - 2))
-                 @%:@ define LLONG_MAX (HALF - 1 + HALF)
-                 @%:@endif]],
-               [[long long int n = 1;
-                 int i;
-                 for (i = 0; ; i++)
-                   {
-                     long long int m = n << i;
-                     if (m >> i != n)
-                       return 1;
-                     if (LLONG_MAX / 2 < m)
-                       break;
-                   }
-                 return 0;]])],
-            [],
-            [ac_cv_type_long_long_int=no],
-            [:])
-        fi
-      fi])
-  if test $ac_cv_type_long_long_int = yes; then
-    AC_DEFINE([HAVE_LONG_LONG_INT], [1],
-      [Define to 1 if the system has the type 'long long int'.])
-  fi
-])
-
-# Define HAVE_UNSIGNED_LONG_LONG_INT if 'unsigned long long int' works.
-# This fixes a bug in Autoconf 2.61, and can be faster
-# than what's in Autoconf 2.62 through 2.68.
-
-# Note: If the type 'unsigned long long int' exists but is only 32 bits
-# large (as on some very old compilers), AC_TYPE_UNSIGNED_LONG_LONG_INT
-# will not be defined. In this case you can treat 'unsigned long long int'
-# like 'unsigned long int'.
-
-AC_DEFUN([AC_TYPE_UNSIGNED_LONG_LONG_INT],
-[
-  AC_CACHE_CHECK([for unsigned long long int],
-    [ac_cv_type_unsigned_long_long_int],
-    [ac_cv_type_unsigned_long_long_int=yes
-     if test "x${ac_cv_prog_cc_c99-no}" = xno; then
-       AC_LINK_IFELSE(
-         [_AC_TYPE_LONG_LONG_SNIPPET],
-         [],
-         [ac_cv_type_unsigned_long_long_int=no])
-     fi])
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-    AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1],
-      [Define to 1 if the system has the type 'unsigned long long int'.])
-  fi
-])
-
-# Expands to a C program that can be used to test for simultaneous support
-# of 'long long' and 'unsigned long long'. We don't want to say that
-# 'long long' is available if 'unsigned long long' is not, or vice versa,
-# because too many programs rely on the symmetry between signed and unsigned
-# integer types (excluding 'bool').
-AC_DEFUN([_AC_TYPE_LONG_LONG_SNIPPET],
-[
-  AC_LANG_PROGRAM(
-    [[/* For now, do not test the preprocessor; as of 2007 there are too many
-         implementations with broken preprocessors.  Perhaps this can
-         be revisited in 2012.  In the meantime, code should not expect
-         #if to work with literals wider than 32 bits.  */
-      /* Test literals.  */
-      long long int ll = 9223372036854775807ll;
-      long long int nll = -9223372036854775807LL;
-      unsigned long long int ull = 18446744073709551615ULL;
-      /* Test constant expressions.   */
-      typedef int a[((-9223372036854775807LL < 0 && 0 < 9223372036854775807ll)
-                     ? 1 : -1)];
-      typedef int b[(18446744073709551615ULL <= (unsigned long long int) -1
-                     ? 1 : -1)];
-      int i = 63;]],
-    [[/* Test availability of runtime routines for shift and division.  */
-      long long int llmax = 9223372036854775807ll;
-      unsigned long long int ullmax = 18446744073709551615ull;
-      return ((ll << 63) | (ll >> 63) | (ll < i) | (ll > i)
-              | (llmax / ll) | (llmax % ll)
-              | (ull << 63) | (ull >> 63) | (ull << i) | (ull >> i)
-              | (ullmax / ull) | (ullmax % ull));]])
-])
diff --git a/src/libs/gnulib/m4/multiarch.m4 b/src/libs/gnulib/m4/multiarch.m4
deleted file mode 100644 (file)
index 2cb956d..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-# multiarch.m4 serial 7
-dnl Copyright (C) 2008-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# Determine whether the compiler is or may be producing universal binaries.
-#
-# On Mac OS X 10.5 and later systems, the user can create libraries and
-# executables that work on multiple system types--known as "fat" or
-# "universal" binaries--by specifying multiple '-arch' options to the
-# compiler but only a single '-arch' option to the preprocessor.  Like
-# this:
-#
-#     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-#                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
-#                 CPP="gcc -E" CXXCPP="g++ -E"
-#
-# Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly.
-
-AC_DEFUN_ONCE([gl_MULTIARCH],
-[
-  dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN.
-  gl_cv_c_multiarch=no
-  AC_COMPILE_IFELSE(
-    [AC_LANG_SOURCE(
-      [[#ifndef __APPLE_CC__
-         not a universal capable compiler
-        #endif
-        typedef int dummy;
-      ]])],
-    [
-     dnl Check for potential -arch flags.  It is not universal unless
-     dnl there are at least two -arch flags with different values.
-     arch=
-     prev=
-     for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do
-       if test -n "$prev"; then
-         case $word in
-           i?86 | x86_64 | ppc | ppc64)
-             if test -z "$arch" || test "$arch" = "$word"; then
-               arch="$word"
-             else
-               gl_cv_c_multiarch=yes
-             fi
-             ;;
-         esac
-         prev=
-       else
-         if test "x$word" = "x-arch"; then
-           prev=arch
-         fi
-       fi
-     done
-    ])
-  if test $gl_cv_c_multiarch = yes; then
-    APPLE_UNIVERSAL_BUILD=1
-  else
-    APPLE_UNIVERSAL_BUILD=0
-  fi
-  AC_SUBST([APPLE_UNIVERSAL_BUILD])
-])
diff --git a/src/libs/gnulib/m4/onceonly.m4 b/src/libs/gnulib/m4/onceonly.m4
deleted file mode 100644 (file)
index 15f94ce..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-# onceonly.m4 serial 9
-dnl Copyright (C) 2002-2003, 2005-2006, 2008-2014 Free Software Foundation,
-dnl Inc.
-dnl
-dnl This file is free software; you can redistribute it and/or modify
-dnl it under the terms of the GNU General Public License as published by
-dnl the Free Software Foundation; either version 3 of the License, or
-dnl (at your option) any later version.
-dnl
-dnl This file is distributed in the hope that it will be useful,
-dnl but WITHOUT ANY WARRANTY; without even the implied warranty of
-dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-dnl GNU General Public License for more details.
-dnl
-dnl You should have received a copy of the GNU General Public License
-dnl along with this file.  If not, see <http://www.gnu.org/licenses/>.
-dnl
-dnl As a special exception to the GNU General Public License,
-dnl this file may be distributed as part of a program
-dnl that contains a configuration script generated by Autoconf, under
-dnl the same distribution terms as the rest of that program.
-
-dnl This file defines some "once only" variants of standard autoconf macros.
-dnl   AC_CHECK_HEADERS_ONCE          like  AC_CHECK_HEADERS
-dnl   AC_CHECK_FUNCS_ONCE            like  AC_CHECK_FUNCS
-dnl   AC_CHECK_DECLS_ONCE            like  AC_CHECK_DECLS
-dnl   AC_REQUIRE([AC_FUNC_STRCOLL])  like  AC_FUNC_STRCOLL
-dnl The advantage is that the check for each of the headers/functions/decls
-dnl will be put only once into the 'configure' file. It keeps the size of
-dnl the 'configure' file down, and avoids redundant output when 'configure'
-dnl is run.
-dnl The drawback is that the checks cannot be conditionalized. If you write
-dnl   if some_condition; then gl_CHECK_HEADERS(stdlib.h); fi
-dnl inside an AC_DEFUNed function, the gl_CHECK_HEADERS macro call expands to
-dnl empty, and the check will be inserted before the body of the AC_DEFUNed
-dnl function.
-
-dnl The original code implemented AC_CHECK_HEADERS_ONCE and AC_CHECK_FUNCS_ONCE
-dnl in terms of AC_DEFUN and AC_REQUIRE. This implementation uses diversions to
-dnl named sections DEFAULTS and INIT_PREPARE in order to check all requested
-dnl headers at once, thus reducing the size of 'configure'. It is known to work
-dnl with autoconf 2.57..2.62 at least . The size reduction is ca. 9%.
-
-dnl Autoconf version 2.59 plus gnulib is required; this file is not needed
-dnl with Autoconf 2.60 or greater. But note that autoconf's implementation of
-dnl AC_CHECK_DECLS_ONCE expects a comma-separated list of symbols as first
-dnl argument!
-AC_PREREQ([2.59])
-
-# AC_CHECK_HEADERS_ONCE(HEADER1 HEADER2 ...) is a once-only variant of
-# AC_CHECK_HEADERS(HEADER1 HEADER2 ...).
-AC_DEFUN([AC_CHECK_HEADERS_ONCE], [
-  :
-  m4_foreach_w([gl_HEADER_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME,
-                                                    [./-], [___])), [
-      m4_divert_text([INIT_PREPARE],
-        [gl_header_list="$gl_header_list gl_HEADER_NAME"])
-      gl_HEADERS_EXPANSION
-      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_HEADER_NAME])),
-        [Define to 1 if you have the <]m4_defn([gl_HEADER_NAME])[> header file.])
-    ])
-    AC_REQUIRE([gl_CHECK_HEADER_]m4_quote(m4_translit(gl_HEADER_NAME,
-                                                      [./-], [___])))
-  ])
-])
-m4_define([gl_HEADERS_EXPANSION], [
-  m4_divert_text([DEFAULTS], [gl_header_list=])
-  AC_CHECK_HEADERS([$gl_header_list])
-  m4_define([gl_HEADERS_EXPANSION], [])
-])
-
-# AC_CHECK_FUNCS_ONCE(FUNC1 FUNC2 ...) is a once-only variant of
-# AC_CHECK_FUNCS(FUNC1 FUNC2 ...).
-AC_DEFUN([AC_CHECK_FUNCS_ONCE], [
-  :
-  m4_foreach_w([gl_FUNC_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]), [
-      m4_divert_text([INIT_PREPARE],
-        [gl_func_list="$gl_func_list gl_FUNC_NAME"])
-      gl_FUNCS_EXPANSION
-      AH_TEMPLATE(AS_TR_CPP([HAVE_]m4_defn([gl_FUNC_NAME])),
-        [Define to 1 if you have the ']m4_defn([gl_FUNC_NAME])[' function.])
-    ])
-    AC_REQUIRE([gl_CHECK_FUNC_]m4_defn([gl_FUNC_NAME]))
-  ])
-])
-m4_define([gl_FUNCS_EXPANSION], [
-  m4_divert_text([DEFAULTS], [gl_func_list=])
-  AC_CHECK_FUNCS([$gl_func_list])
-  m4_define([gl_FUNCS_EXPANSION], [])
-])
-
-# AC_CHECK_DECLS_ONCE(DECL1 DECL2 ...) is a once-only variant of
-# AC_CHECK_DECLS(DECL1, DECL2, ...).
-AC_DEFUN([AC_CHECK_DECLS_ONCE], [
-  :
-  m4_foreach_w([gl_DECL_NAME], [$1], [
-    AC_DEFUN([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]), [
-      AC_CHECK_DECLS(m4_defn([gl_DECL_NAME]))
-    ])
-    AC_REQUIRE([gl_CHECK_DECL_]m4_defn([gl_DECL_NAME]))
-  ])
-])
diff --git a/src/libs/gnulib/m4/stdbool.m4 b/src/libs/gnulib/m4/stdbool.m4
deleted file mode 100644 (file)
index 006ed52..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-# Check for stdbool.h that conforms to C99.
-
-dnl Copyright (C) 2002-2006, 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-#serial 5
-
-# Prepare for substituting <stdbool.h> if it is not supported.
-
-AC_DEFUN([AM_STDBOOL_H],
-[
-  AC_REQUIRE([AC_CHECK_HEADER_STDBOOL])
-
-  # Define two additional variables used in the Makefile substitution.
-
-  if test "$ac_cv_header_stdbool_h" = yes; then
-    STDBOOL_H=''
-  else
-    STDBOOL_H='stdbool.h'
-  fi
-  AC_SUBST([STDBOOL_H])
-  AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"])
-
-  if test "$ac_cv_type__Bool" = yes; then
-    HAVE__BOOL=1
-  else
-    HAVE__BOOL=0
-  fi
-  AC_SUBST([HAVE__BOOL])
-])
-
-# AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future.
-AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H])
-
-# This version of the macro is needed in autoconf <= 2.68.
-
-AC_DEFUN([AC_CHECK_HEADER_STDBOOL],
-  [AC_CACHE_CHECK([for stdbool.h that conforms to C99],
-     [ac_cv_header_stdbool_h],
-     [AC_COMPILE_IFELSE(
-        [AC_LANG_PROGRAM(
-           [[
-             #include <stdbool.h>
-             #ifndef bool
-              "error: bool is not defined"
-             #endif
-             #ifndef false
-              "error: false is not defined"
-             #endif
-             #if false
-              "error: false is not 0"
-             #endif
-             #ifndef true
-              "error: true is not defined"
-             #endif
-             #if true != 1
-              "error: true is not 1"
-             #endif
-             #ifndef __bool_true_false_are_defined
-              "error: __bool_true_false_are_defined is not defined"
-             #endif
-
-             struct s { _Bool s: 1; _Bool t; } s;
-
-             char a[true == 1 ? 1 : -1];
-             char b[false == 0 ? 1 : -1];
-             char c[__bool_true_false_are_defined == 1 ? 1 : -1];
-             char d[(bool) 0.5 == true ? 1 : -1];
-             /* See body of main program for 'e'.  */
-             char f[(_Bool) 0.0 == false ? 1 : -1];
-             char g[true];
-             char h[sizeof (_Bool)];
-             char i[sizeof s.t];
-             enum { j = false, k = true, l = false * true, m = true * 256 };
-             /* The following fails for
-                HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */
-             _Bool n[m];
-             char o[sizeof n == m * sizeof n[0] ? 1 : -1];
-             char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1];
-             /* Catch a bug in an HP-UX C compiler.  See
-                http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html
-                http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html
-              */
-             _Bool q = true;
-             _Bool *pq = &q;
-           ]],
-           [[
-             bool e = &s;
-             *pq |= q;
-             *pq |= ! q;
-             /* Refer to every declared value, to avoid compiler optimizations.  */
-             return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l
-                     + !m + !n + !o + !p + !q + !pq);
-           ]])],
-        [ac_cv_header_stdbool_h=yes],
-        [ac_cv_header_stdbool_h=no])])
-   AC_CHECK_TYPES([_Bool])
-])
diff --git a/src/libs/gnulib/m4/stddef_h.m4 b/src/libs/gnulib/m4/stddef_h.m4
deleted file mode 100644 (file)
index c555e29..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues.
-# stddef_h.m4 serial 4
-dnl Copyright (C) 2009-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_STDDEF_H],
-[
-  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
-  AC_REQUIRE([gt_TYPE_WCHAR_T])
-  STDDEF_H=
-  if test $gt_cv_c_wchar_t = no; then
-    HAVE_WCHAR_T=0
-    STDDEF_H=stddef.h
-  fi
-  AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions],
-    [gl_cv_decl_null_works],
-    [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h>
-      int test[2 * (sizeof NULL == sizeof (void *)) -1];
-]])],
-      [gl_cv_decl_null_works=yes],
-      [gl_cv_decl_null_works=no])])
-  if test $gl_cv_decl_null_works = no; then
-    REPLACE_NULL=1
-    STDDEF_H=stddef.h
-  fi
-  AC_SUBST([STDDEF_H])
-  AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"])
-  if test -n "$STDDEF_H"; then
-    gl_NEXT_HEADERS([stddef.h])
-  fi
-])
-
-AC_DEFUN([gl_STDDEF_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_STDDEF_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-])
-
-AC_DEFUN([gl_STDDEF_H_DEFAULTS],
-[
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  REPLACE_NULL=0;                AC_SUBST([REPLACE_NULL])
-  HAVE_WCHAR_T=1;                AC_SUBST([HAVE_WCHAR_T])
-])
diff --git a/src/libs/gnulib/m4/stdint.m4 b/src/libs/gnulib/m4/stdint.m4
deleted file mode 100644 (file)
index 1981d9d..0000000
+++ /dev/null
@@ -1,484 +0,0 @@
-# stdint.m4 serial 43
-dnl Copyright (C) 2001-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Paul Eggert and Bruno Haible.
-dnl Test whether <stdint.h> is supported or must be substituted.
-
-AC_DEFUN_ONCE([gl_STDINT_H],
-[
-  AC_PREREQ([2.59])dnl
-
-  dnl Check for long long int and unsigned long long int.
-  AC_REQUIRE([AC_TYPE_LONG_LONG_INT])
-  if test $ac_cv_type_long_long_int = yes; then
-    HAVE_LONG_LONG_INT=1
-  else
-    HAVE_LONG_LONG_INT=0
-  fi
-  AC_SUBST([HAVE_LONG_LONG_INT])
-  AC_REQUIRE([AC_TYPE_UNSIGNED_LONG_LONG_INT])
-  if test $ac_cv_type_unsigned_long_long_int = yes; then
-    HAVE_UNSIGNED_LONG_LONG_INT=1
-  else
-    HAVE_UNSIGNED_LONG_LONG_INT=0
-  fi
-  AC_SUBST([HAVE_UNSIGNED_LONG_LONG_INT])
-
-  dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does.
-  AC_CHECK_HEADERS_ONCE([wchar.h])
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
-  AC_SUBST([HAVE_WCHAR_H])
-
-  dnl Check for <inttypes.h>.
-  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_inttypes_h.
-  if test $ac_cv_header_inttypes_h = yes; then
-    HAVE_INTTYPES_H=1
-  else
-    HAVE_INTTYPES_H=0
-  fi
-  AC_SUBST([HAVE_INTTYPES_H])
-
-  dnl Check for <sys/types.h>.
-  dnl AC_INCLUDES_DEFAULT defines $ac_cv_header_sys_types_h.
-  if test $ac_cv_header_sys_types_h = yes; then
-    HAVE_SYS_TYPES_H=1
-  else
-    HAVE_SYS_TYPES_H=0
-  fi
-  AC_SUBST([HAVE_SYS_TYPES_H])
-
-  gl_CHECK_NEXT_HEADERS([stdint.h])
-  if test $ac_cv_header_stdint_h = yes; then
-    HAVE_STDINT_H=1
-  else
-    HAVE_STDINT_H=0
-  fi
-  AC_SUBST([HAVE_STDINT_H])
-
-  dnl Now see whether we need a substitute <stdint.h>.
-  if test $ac_cv_header_stdint_h = yes; then
-    AC_CACHE_CHECK([whether stdint.h conforms to C99],
-      [gl_cv_header_working_stdint_h],
-      [gl_cv_header_working_stdint_h=no
-       AC_COMPILE_IFELSE([
-         AC_LANG_PROGRAM([[
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-/* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>.  */
-#if !(defined WCHAR_MIN && defined WCHAR_MAX)
-#error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>"
-#endif
-]
-gl_STDINT_INCLUDES
-[
-#ifdef INT8_MAX
-int8_t a1 = INT8_MAX;
-int8_t a1min = INT8_MIN;
-#endif
-#ifdef INT16_MAX
-int16_t a2 = INT16_MAX;
-int16_t a2min = INT16_MIN;
-#endif
-#ifdef INT32_MAX
-int32_t a3 = INT32_MAX;
-int32_t a3min = INT32_MIN;
-#endif
-#ifdef INT64_MAX
-int64_t a4 = INT64_MAX;
-int64_t a4min = INT64_MIN;
-#endif
-#ifdef UINT8_MAX
-uint8_t b1 = UINT8_MAX;
-#else
-typedef int b1[(unsigned char) -1 != 255 ? 1 : -1];
-#endif
-#ifdef UINT16_MAX
-uint16_t b2 = UINT16_MAX;
-#endif
-#ifdef UINT32_MAX
-uint32_t b3 = UINT32_MAX;
-#endif
-#ifdef UINT64_MAX
-uint64_t b4 = UINT64_MAX;
-#endif
-int_least8_t c1 = INT8_C (0x7f);
-int_least8_t c1max = INT_LEAST8_MAX;
-int_least8_t c1min = INT_LEAST8_MIN;
-int_least16_t c2 = INT16_C (0x7fff);
-int_least16_t c2max = INT_LEAST16_MAX;
-int_least16_t c2min = INT_LEAST16_MIN;
-int_least32_t c3 = INT32_C (0x7fffffff);
-int_least32_t c3max = INT_LEAST32_MAX;
-int_least32_t c3min = INT_LEAST32_MIN;
-int_least64_t c4 = INT64_C (0x7fffffffffffffff);
-int_least64_t c4max = INT_LEAST64_MAX;
-int_least64_t c4min = INT_LEAST64_MIN;
-uint_least8_t d1 = UINT8_C (0xff);
-uint_least8_t d1max = UINT_LEAST8_MAX;
-uint_least16_t d2 = UINT16_C (0xffff);
-uint_least16_t d2max = UINT_LEAST16_MAX;
-uint_least32_t d3 = UINT32_C (0xffffffff);
-uint_least32_t d3max = UINT_LEAST32_MAX;
-uint_least64_t d4 = UINT64_C (0xffffffffffffffff);
-uint_least64_t d4max = UINT_LEAST64_MAX;
-int_fast8_t e1 = INT_FAST8_MAX;
-int_fast8_t e1min = INT_FAST8_MIN;
-int_fast16_t e2 = INT_FAST16_MAX;
-int_fast16_t e2min = INT_FAST16_MIN;
-int_fast32_t e3 = INT_FAST32_MAX;
-int_fast32_t e3min = INT_FAST32_MIN;
-int_fast64_t e4 = INT_FAST64_MAX;
-int_fast64_t e4min = INT_FAST64_MIN;
-uint_fast8_t f1 = UINT_FAST8_MAX;
-uint_fast16_t f2 = UINT_FAST16_MAX;
-uint_fast32_t f3 = UINT_FAST32_MAX;
-uint_fast64_t f4 = UINT_FAST64_MAX;
-#ifdef INTPTR_MAX
-intptr_t g = INTPTR_MAX;
-intptr_t gmin = INTPTR_MIN;
-#endif
-#ifdef UINTPTR_MAX
-uintptr_t h = UINTPTR_MAX;
-#endif
-intmax_t i = INTMAX_MAX;
-uintmax_t j = UINTMAX_MAX;
-
-#include <limits.h> /* for CHAR_BIT */
-#define TYPE_MINIMUM(t) \
-  ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t)))
-#define TYPE_MAXIMUM(t) \
-  ((t) ((t) 0 < (t) -1 \
-        ? (t) -1 \
-        : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1)))
-struct s {
-  int check_PTRDIFF:
-      PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t)
-      && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t)
-      ? 1 : -1;
-  /* Detect bug in FreeBSD 6.0 / ia64.  */
-  int check_SIG_ATOMIC:
-      SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t)
-      && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t)
-      ? 1 : -1;
-  int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1;
-  int check_WCHAR:
-      WCHAR_MIN == TYPE_MINIMUM (wchar_t)
-      && WCHAR_MAX == TYPE_MAXIMUM (wchar_t)
-      ? 1 : -1;
-  /* Detect bug in mingw.  */
-  int check_WINT:
-      WINT_MIN == TYPE_MINIMUM (wint_t)
-      && WINT_MAX == TYPE_MAXIMUM (wint_t)
-      ? 1 : -1;
-
-  /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others.  */
-  int check_UINT8_C:
-        (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1;
-  int check_UINT16_C:
-        (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1;
-
-  /* Detect bugs in OpenBSD 3.9 stdint.h.  */
-#ifdef UINT8_MAX
-  int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1;
-#endif
-#ifdef UINT16_MAX
-  int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1;
-#endif
-#ifdef UINT32_MAX
-  int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1;
-#endif
-#ifdef UINT64_MAX
-  int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1;
-#endif
-  int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1;
-  int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1;
-  int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1;
-  int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1;
-  int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1;
-  int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1;
-  int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1;
-  int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1;
-  int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1;
-  int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1;
-  int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1;
-};
-         ]])],
-         [dnl Determine whether the various *_MIN, *_MAX macros are usable
-          dnl in preprocessor expression. We could do it by compiling a test
-          dnl program for each of these macros. It is faster to run a program
-          dnl that inspects the macro expansion.
-          dnl This detects a bug on HP-UX 11.23/ia64.
-          AC_RUN_IFELSE([
-            AC_LANG_PROGRAM([[
-#define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */
-#include <stdint.h>
-]
-gl_STDINT_INCLUDES
-[
-#include <stdio.h>
-#include <string.h>
-#define MVAL(macro) MVAL1(macro)
-#define MVAL1(expression) #expression
-static const char *macro_values[] =
-  {
-#ifdef INT8_MAX
-    MVAL (INT8_MAX),
-#endif
-#ifdef INT16_MAX
-    MVAL (INT16_MAX),
-#endif
-#ifdef INT32_MAX
-    MVAL (INT32_MAX),
-#endif
-#ifdef INT64_MAX
-    MVAL (INT64_MAX),
-#endif
-#ifdef UINT8_MAX
-    MVAL (UINT8_MAX),
-#endif
-#ifdef UINT16_MAX
-    MVAL (UINT16_MAX),
-#endif
-#ifdef UINT32_MAX
-    MVAL (UINT32_MAX),
-#endif
-#ifdef UINT64_MAX
-    MVAL (UINT64_MAX),
-#endif
-    NULL
-  };
-]], [[
-  const char **mv;
-  for (mv = macro_values; *mv != NULL; mv++)
-    {
-      const char *value = *mv;
-      /* Test whether it looks like a cast expression.  */
-      if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0
-          || strncmp (value, "((unsigned short)"/*)*/, 17) == 0
-          || strncmp (value, "((unsigned char)"/*)*/, 16) == 0
-          || strncmp (value, "((int)"/*)*/, 6) == 0
-          || strncmp (value, "((signed short)"/*)*/, 15) == 0
-          || strncmp (value, "((signed char)"/*)*/, 14) == 0)
-        return mv - macro_values + 1;
-    }
-  return 0;
-]])],
-              [gl_cv_header_working_stdint_h=yes],
-              [],
-              [dnl When cross-compiling, assume it works.
-               gl_cv_header_working_stdint_h=yes
-              ])
-         ])
-      ])
-  fi
-  if test "$gl_cv_header_working_stdint_h" = yes; then
-    STDINT_H=
-  else
-    dnl Check for <sys/inttypes.h>, and for
-    dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5).
-    AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h])
-    if test $ac_cv_header_sys_inttypes_h = yes; then
-      HAVE_SYS_INTTYPES_H=1
-    else
-      HAVE_SYS_INTTYPES_H=0
-    fi
-    AC_SUBST([HAVE_SYS_INTTYPES_H])
-    if test $ac_cv_header_sys_bitypes_h = yes; then
-      HAVE_SYS_BITYPES_H=1
-    else
-      HAVE_SYS_BITYPES_H=0
-    fi
-    AC_SUBST([HAVE_SYS_BITYPES_H])
-
-    gl_STDINT_TYPE_PROPERTIES
-    STDINT_H=stdint.h
-  fi
-  AC_SUBST([STDINT_H])
-  AM_CONDITIONAL([GL_GENERATE_STDINT_H], [test -n "$STDINT_H"])
-])
-
-dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES)
-dnl Determine the size of each of the given types in bits.
-AC_DEFUN([gl_STDINT_BITSIZEOF],
-[
-  dnl Use a shell loop, to avoid bloating configure, and
-  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
-  dnl   config.h.in,
-  dnl - extra AC_SUBST calls, so that the right substitutions are made.
-  m4_foreach_w([gltype], [$1],
-    [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
-       [Define to the number of bits in type ']gltype['.])])
-  for gltype in $1 ; do
-    AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}],
-      [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT],
-         [$2
-#include <limits.h>], [result=unknown])
-       eval gl_cv_bitsizeof_${gltype}=\$result
-      ])
-    eval result=\$gl_cv_bitsizeof_${gltype}
-    if test $result = unknown; then
-      dnl Use a nonempty default, because some compilers, such as IRIX 5 cc,
-      dnl do a syntax check even on unused #if conditions and give an error
-      dnl on valid C code like this:
-      dnl   #if 0
-      dnl   # if  > 32
-      dnl   # endif
-      dnl   #endif
-      result=0
-    fi
-    GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result])
-    eval BITSIZEOF_${GLTYPE}=\$result
-  done
-  m4_foreach_w([gltype], [$1],
-    [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
-])
-
-dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES)
-dnl Determine the signedness of each of the given types.
-dnl Define HAVE_SIGNED_TYPE if type is signed.
-AC_DEFUN([gl_CHECK_TYPES_SIGNED],
-[
-  dnl Use a shell loop, to avoid bloating configure, and
-  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
-  dnl   config.h.in,
-  dnl - extra AC_SUBST calls, so that the right substitutions are made.
-  m4_foreach_w([gltype], [$1],
-    [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]),
-       [Define to 1 if ']gltype[' is a signed integer type.])])
-  for gltype in $1 ; do
-    AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed],
-      [AC_COMPILE_IFELSE(
-         [AC_LANG_PROGRAM([$2[
-            int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])],
-         result=yes, result=no)
-       eval gl_cv_type_${gltype}_signed=\$result
-      ])
-    eval result=\$gl_cv_type_${gltype}_signed
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    if test "$result" = yes; then
-      AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1])
-      eval HAVE_SIGNED_${GLTYPE}=1
-    else
-      eval HAVE_SIGNED_${GLTYPE}=0
-    fi
-  done
-  m4_foreach_w([gltype], [$1],
-    [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))])
-])
-
-dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES)
-dnl Determine the suffix to use for integer constants of the given types.
-dnl Define t_SUFFIX for each such type.
-AC_DEFUN([gl_INTEGER_TYPE_SUFFIX],
-[
-  dnl Use a shell loop, to avoid bloating configure, and
-  dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into
-  dnl   config.h.in,
-  dnl - extra AC_SUBST calls, so that the right substitutions are made.
-  m4_foreach_w([gltype], [$1],
-    [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX],
-       [Define to l, ll, u, ul, ull, etc., as suitable for
-        constants of type ']gltype['.])])
-  for gltype in $1 ; do
-    AC_CACHE_CHECK([for $gltype integer literal suffix],
-      [gl_cv_type_${gltype}_suffix],
-      [eval gl_cv_type_${gltype}_suffix=no
-       eval result=\$gl_cv_type_${gltype}_signed
-       if test "$result" = yes; then
-         glsufu=
-       else
-         glsufu=u
-       fi
-       for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do
-         case $glsuf in
-           '')  gltype1='int';;
-           l)   gltype1='long int';;
-           ll)  gltype1='long long int';;
-           i64) gltype1='__int64';;
-           u)   gltype1='unsigned int';;
-           ul)  gltype1='unsigned long int';;
-           ull) gltype1='unsigned long long int';;
-           ui64)gltype1='unsigned __int64';;
-         esac
-         AC_COMPILE_IFELSE(
-           [AC_LANG_PROGRAM([$2[
-              extern $gltype foo;
-              extern $gltype1 foo;]])],
-           [eval gl_cv_type_${gltype}_suffix=\$glsuf])
-         eval result=\$gl_cv_type_${gltype}_suffix
-         test "$result" != no && break
-       done])
-    GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'`
-    eval result=\$gl_cv_type_${gltype}_suffix
-    test "$result" = no && result=
-    eval ${GLTYPE}_SUFFIX=\$result
-    AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result])
-  done
-  m4_foreach_w([gltype], [$1],
-    [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])])
-])
-
-dnl gl_STDINT_INCLUDES
-AC_DEFUN([gl_STDINT_INCLUDES],
-[[
-  /* BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-     included before <wchar.h>.  */
-  #include <stddef.h>
-  #include <signal.h>
-  #if HAVE_WCHAR_H
-  # include <stdio.h>
-  # include <time.h>
-  # include <wchar.h>
-  #endif
-]])
-
-dnl gl_STDINT_TYPE_PROPERTIES
-dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t
-dnl of interest to stdint.in.h.
-AC_DEFUN([gl_STDINT_TYPE_PROPERTIES],
-[
-  AC_REQUIRE([gl_MULTIARCH])
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-    gl_STDINT_BITSIZEOF([ptrdiff_t size_t],
-      [gl_STDINT_INCLUDES])
-  fi
-  gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t],
-    [gl_STDINT_INCLUDES])
-  gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t],
-    [gl_STDINT_INCLUDES])
-  gl_cv_type_ptrdiff_t_signed=yes
-  gl_cv_type_size_t_signed=no
-  if test $APPLE_UNIVERSAL_BUILD = 0; then
-    gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t],
-      [gl_STDINT_INCLUDES])
-  fi
-  gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t],
-    [gl_STDINT_INCLUDES])
-
-  dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99
-  dnl requirement that wint_t is "unchanged by default argument promotions".
-  dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t.
-  dnl Set the variable BITSIZEOF_WINT_T accordingly.
-  if test $BITSIZEOF_WINT_T -lt 32; then
-    BITSIZEOF_WINT_T=32
-  fi
-])
-
-dnl Autoconf >= 2.61 has AC_COMPUTE_INT built-in.
-dnl Remove this when we can assume autoconf >= 2.61.
-m4_ifdef([AC_COMPUTE_INT], [], [
-  AC_DEFUN([AC_COMPUTE_INT], [_AC_COMPUTE_INT([$2],[$1],[$3],[$4])])
-])
-
-# Hey Emacs!
-# Local Variables:
-# indent-tabs-mode: nil
-# End:
diff --git a/src/libs/gnulib/m4/warn-on-use.m4 b/src/libs/gnulib/m4/warn-on-use.m4
deleted file mode 100644 (file)
index cc690f8..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# warn-on-use.m4 serial 5
-dnl Copyright (C) 2010-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-# gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES)
-# ---------------------------------------
-# For each whitespace-separated element in the list of NAMES, define
-# HAVE_RAW_DECL_name if the function has a declaration among INCLUDES
-# even after being undefined as a macro.
-#
-# See warn-on-use.h for some hints on how to poison function names, as
-# well as ideas on poisoning global variables and macros.  NAMES may
-# include global variables, but remember that only functions work with
-# _GL_WARN_ON_USE.  Typically, INCLUDES only needs to list a single
-# header, but if the replacement header pulls in other headers because
-# some systems declare functions in the wrong header, then INCLUDES
-# should do likewise.
-#
-# It is generally safe to assume declarations for functions declared
-# in the intersection of C89 and C11 (such as printf) without
-# needing gl_WARN_ON_USE_PREPARE.
-AC_DEFUN([gl_WARN_ON_USE_PREPARE],
-[
-  m4_foreach_w([gl_decl], [$2],
-    [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])),
-      [Define to 1 if ]m4_defn([gl_decl])[ is declared even after
-       undefining macros.])])dnl
-dnl FIXME: gl_Symbol must be used unquoted until we can assume
-dnl autoconf 2.64 or newer.
-  for gl_func in m4_flatten([$2]); do
-    AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl
-    AC_CACHE_CHECK([whether $gl_func is declared without a macro],
-      gl_Symbol,
-      [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1],
-[@%:@undef $gl_func
-  (void) $gl_func;])],
-        [AS_VAR_SET(gl_Symbol, [yes])], [AS_VAR_SET(gl_Symbol, [no])])])
-    AS_VAR_IF(gl_Symbol, [yes],
-      [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1])
-       dnl shortcut - if the raw declaration exists, then set a cache
-       dnl variable to allow skipping any later AC_CHECK_DECL efforts
-       eval ac_cv_have_decl_$gl_func=yes])
-    AS_VAR_POPDEF([gl_Symbol])dnl
-  done
-])
diff --git a/src/libs/gnulib/m4/wchar_h.m4 b/src/libs/gnulib/m4/wchar_h.m4
deleted file mode 100644 (file)
index 85db952..0000000
+++ /dev/null
@@ -1,225 +0,0 @@
-dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues.
-
-dnl Copyright (C) 2007-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Written by Eric Blake.
-
-# wchar_h.m4 serial 39
-
-AC_DEFUN([gl_WCHAR_H],
-[
-  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
-  AC_REQUIRE([gl_WCHAR_H_INLINE_OK])
-  dnl Prepare for creating substitute <wchar.h>.
-  dnl Check for <wchar.h> (missing in Linux uClibc when built without wide
-  dnl character support).
-  dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK.
-  gl_CHECK_NEXT_HEADERS([wchar.h])
-  if test $ac_cv_header_wchar_h = yes; then
-    HAVE_WCHAR_H=1
-  else
-    HAVE_WCHAR_H=0
-  fi
-  AC_SUBST([HAVE_WCHAR_H])
-
-  AC_REQUIRE([gl_FEATURES_H])
-
-  AC_REQUIRE([gt_TYPE_WINT_T])
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-  AC_SUBST([HAVE_WINT_T])
-
-  dnl Check for declarations of anything we want to poison if the
-  dnl corresponding gnulib module is not in use.
-  gl_WARN_ON_USE_PREPARE([[
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#if !(defined __GLIBC__ && !defined __UCLIBC__)
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-#endif
-#include <wchar.h>
-    ]],
-    [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb
-     wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmemset
-     wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp
-     wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr
-     wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth
-    ])
-])
-
-dnl Check whether <wchar.h> is usable at all.
-AC_DEFUN([gl_WCHAR_H_INLINE_OK],
-[
-  dnl Test whether <wchar.h> suffers due to the transition from '__inline' to
-  dnl 'gnu_inline'. See <http://sourceware.org/bugzilla/show_bug.cgi?id=4022>
-  dnl and <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary,
-  dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and
-  dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>.
-  AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly],
-    [gl_cv_header_wchar_h_correct_inline],
-    [gl_cv_header_wchar_h_correct_inline=yes
-     AC_LANG_CONFTEST([
-       AC_LANG_SOURCE([[#define wcstod renamed_wcstod
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-extern int zero (void);
-int main () { return zero(); }
-]])])
-     if AC_TRY_EVAL([ac_compile]); then
-       mv conftest.$ac_objext conftest1.$ac_objext
-       AC_LANG_CONFTEST([
-         AC_LANG_SOURCE([[#define wcstod renamed_wcstod
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-int zero (void) { return 0; }
-]])])
-       if AC_TRY_EVAL([ac_compile]); then
-         mv conftest.$ac_objext conftest2.$ac_objext
-         if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then
-           :
-         else
-           gl_cv_header_wchar_h_correct_inline=no
-         fi
-       fi
-     fi
-     rm -f conftest1.$ac_objext conftest2.$ac_objext conftest$ac_exeext
-    ])
-  if test $gl_cv_header_wchar_h_correct_inline = no; then
-    AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS).
-This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in
-C99 mode. You have four options:
-  - Add the flag -fgnu89-inline to CC and reconfigure, or
-  - Fix your include files, using parts of
-    <http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or
-  - Use a gcc version older than 4.3, or
-  - Don't use the flags -std=c99 or -std=gnu99.
-Configuration aborted.])
-  fi
-])
-
-AC_DEFUN([gl_WCHAR_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-  dnl Define it also as a C macro, for the benefit of the unit tests.
-  gl_MODULE_INDICATOR_FOR_TESTS([$1])
-])
-
-AC_DEFUN([gl_WCHAR_H_DEFAULTS],
-[
-  GNULIB_BTOWC=0;       AC_SUBST([GNULIB_BTOWC])
-  GNULIB_WCTOB=0;       AC_SUBST([GNULIB_WCTOB])
-  GNULIB_MBSINIT=0;     AC_SUBST([GNULIB_MBSINIT])
-  GNULIB_MBRTOWC=0;     AC_SUBST([GNULIB_MBRTOWC])
-  GNULIB_MBRLEN=0;      AC_SUBST([GNULIB_MBRLEN])
-  GNULIB_MBSRTOWCS=0;   AC_SUBST([GNULIB_MBSRTOWCS])
-  GNULIB_MBSNRTOWCS=0;  AC_SUBST([GNULIB_MBSNRTOWCS])
-  GNULIB_WCRTOMB=0;     AC_SUBST([GNULIB_WCRTOMB])
-  GNULIB_WCSRTOMBS=0;   AC_SUBST([GNULIB_WCSRTOMBS])
-  GNULIB_WCSNRTOMBS=0;  AC_SUBST([GNULIB_WCSNRTOMBS])
-  GNULIB_WCWIDTH=0;     AC_SUBST([GNULIB_WCWIDTH])
-  GNULIB_WMEMCHR=0;     AC_SUBST([GNULIB_WMEMCHR])
-  GNULIB_WMEMCMP=0;     AC_SUBST([GNULIB_WMEMCMP])
-  GNULIB_WMEMCPY=0;     AC_SUBST([GNULIB_WMEMCPY])
-  GNULIB_WMEMMOVE=0;    AC_SUBST([GNULIB_WMEMMOVE])
-  GNULIB_WMEMSET=0;     AC_SUBST([GNULIB_WMEMSET])
-  GNULIB_WCSLEN=0;      AC_SUBST([GNULIB_WCSLEN])
-  GNULIB_WCSNLEN=0;     AC_SUBST([GNULIB_WCSNLEN])
-  GNULIB_WCSCPY=0;      AC_SUBST([GNULIB_WCSCPY])
-  GNULIB_WCPCPY=0;      AC_SUBST([GNULIB_WCPCPY])
-  GNULIB_WCSNCPY=0;     AC_SUBST([GNULIB_WCSNCPY])
-  GNULIB_WCPNCPY=0;     AC_SUBST([GNULIB_WCPNCPY])
-  GNULIB_WCSCAT=0;      AC_SUBST([GNULIB_WCSCAT])
-  GNULIB_WCSNCAT=0;     AC_SUBST([GNULIB_WCSNCAT])
-  GNULIB_WCSCMP=0;      AC_SUBST([GNULIB_WCSCMP])
-  GNULIB_WCSNCMP=0;     AC_SUBST([GNULIB_WCSNCMP])
-  GNULIB_WCSCASECMP=0;  AC_SUBST([GNULIB_WCSCASECMP])
-  GNULIB_WCSNCASECMP=0; AC_SUBST([GNULIB_WCSNCASECMP])
-  GNULIB_WCSCOLL=0;     AC_SUBST([GNULIB_WCSCOLL])
-  GNULIB_WCSXFRM=0;     AC_SUBST([GNULIB_WCSXFRM])
-  GNULIB_WCSDUP=0;      AC_SUBST([GNULIB_WCSDUP])
-  GNULIB_WCSCHR=0;      AC_SUBST([GNULIB_WCSCHR])
-  GNULIB_WCSRCHR=0;     AC_SUBST([GNULIB_WCSRCHR])
-  GNULIB_WCSCSPN=0;     AC_SUBST([GNULIB_WCSCSPN])
-  GNULIB_WCSSPN=0;      AC_SUBST([GNULIB_WCSSPN])
-  GNULIB_WCSPBRK=0;     AC_SUBST([GNULIB_WCSPBRK])
-  GNULIB_WCSSTR=0;      AC_SUBST([GNULIB_WCSSTR])
-  GNULIB_WCSTOK=0;      AC_SUBST([GNULIB_WCSTOK])
-  GNULIB_WCSWIDTH=0;    AC_SUBST([GNULIB_WCSWIDTH])
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_BTOWC=1;         AC_SUBST([HAVE_BTOWC])
-  HAVE_MBSINIT=1;       AC_SUBST([HAVE_MBSINIT])
-  HAVE_MBRTOWC=1;       AC_SUBST([HAVE_MBRTOWC])
-  HAVE_MBRLEN=1;        AC_SUBST([HAVE_MBRLEN])
-  HAVE_MBSRTOWCS=1;     AC_SUBST([HAVE_MBSRTOWCS])
-  HAVE_MBSNRTOWCS=1;    AC_SUBST([HAVE_MBSNRTOWCS])
-  HAVE_WCRTOMB=1;       AC_SUBST([HAVE_WCRTOMB])
-  HAVE_WCSRTOMBS=1;     AC_SUBST([HAVE_WCSRTOMBS])
-  HAVE_WCSNRTOMBS=1;    AC_SUBST([HAVE_WCSNRTOMBS])
-  HAVE_WMEMCHR=1;       AC_SUBST([HAVE_WMEMCHR])
-  HAVE_WMEMCMP=1;       AC_SUBST([HAVE_WMEMCMP])
-  HAVE_WMEMCPY=1;       AC_SUBST([HAVE_WMEMCPY])
-  HAVE_WMEMMOVE=1;      AC_SUBST([HAVE_WMEMMOVE])
-  HAVE_WMEMSET=1;       AC_SUBST([HAVE_WMEMSET])
-  HAVE_WCSLEN=1;        AC_SUBST([HAVE_WCSLEN])
-  HAVE_WCSNLEN=1;       AC_SUBST([HAVE_WCSNLEN])
-  HAVE_WCSCPY=1;        AC_SUBST([HAVE_WCSCPY])
-  HAVE_WCPCPY=1;        AC_SUBST([HAVE_WCPCPY])
-  HAVE_WCSNCPY=1;       AC_SUBST([HAVE_WCSNCPY])
-  HAVE_WCPNCPY=1;       AC_SUBST([HAVE_WCPNCPY])
-  HAVE_WCSCAT=1;        AC_SUBST([HAVE_WCSCAT])
-  HAVE_WCSNCAT=1;       AC_SUBST([HAVE_WCSNCAT])
-  HAVE_WCSCMP=1;        AC_SUBST([HAVE_WCSCMP])
-  HAVE_WCSNCMP=1;       AC_SUBST([HAVE_WCSNCMP])
-  HAVE_WCSCASECMP=1;    AC_SUBST([HAVE_WCSCASECMP])
-  HAVE_WCSNCASECMP=1;   AC_SUBST([HAVE_WCSNCASECMP])
-  HAVE_WCSCOLL=1;       AC_SUBST([HAVE_WCSCOLL])
-  HAVE_WCSXFRM=1;       AC_SUBST([HAVE_WCSXFRM])
-  HAVE_WCSDUP=1;        AC_SUBST([HAVE_WCSDUP])
-  HAVE_WCSCHR=1;        AC_SUBST([HAVE_WCSCHR])
-  HAVE_WCSRCHR=1;       AC_SUBST([HAVE_WCSRCHR])
-  HAVE_WCSCSPN=1;       AC_SUBST([HAVE_WCSCSPN])
-  HAVE_WCSSPN=1;        AC_SUBST([HAVE_WCSSPN])
-  HAVE_WCSPBRK=1;       AC_SUBST([HAVE_WCSPBRK])
-  HAVE_WCSSTR=1;        AC_SUBST([HAVE_WCSSTR])
-  HAVE_WCSTOK=1;        AC_SUBST([HAVE_WCSTOK])
-  HAVE_WCSWIDTH=1;      AC_SUBST([HAVE_WCSWIDTH])
-  HAVE_DECL_WCTOB=1;    AC_SUBST([HAVE_DECL_WCTOB])
-  HAVE_DECL_WCWIDTH=1;  AC_SUBST([HAVE_DECL_WCWIDTH])
-  REPLACE_MBSTATE_T=0;  AC_SUBST([REPLACE_MBSTATE_T])
-  REPLACE_BTOWC=0;      AC_SUBST([REPLACE_BTOWC])
-  REPLACE_WCTOB=0;      AC_SUBST([REPLACE_WCTOB])
-  REPLACE_MBSINIT=0;    AC_SUBST([REPLACE_MBSINIT])
-  REPLACE_MBRTOWC=0;    AC_SUBST([REPLACE_MBRTOWC])
-  REPLACE_MBRLEN=0;     AC_SUBST([REPLACE_MBRLEN])
-  REPLACE_MBSRTOWCS=0;  AC_SUBST([REPLACE_MBSRTOWCS])
-  REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS])
-  REPLACE_WCRTOMB=0;    AC_SUBST([REPLACE_WCRTOMB])
-  REPLACE_WCSRTOMBS=0;  AC_SUBST([REPLACE_WCSRTOMBS])
-  REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS])
-  REPLACE_WCWIDTH=0;    AC_SUBST([REPLACE_WCWIDTH])
-  REPLACE_WCSWIDTH=0;   AC_SUBST([REPLACE_WCSWIDTH])
-])
diff --git a/src/libs/gnulib/m4/wchar_t.m4 b/src/libs/gnulib/m4/wchar_t.m4
deleted file mode 100644 (file)
index 839a04c..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# wchar_t.m4 serial 4 (gettext-0.18.2)
-dnl Copyright (C) 2002-2003, 2008-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-dnl Test whether <stddef.h> has the 'wchar_t' type.
-dnl Prerequisite: AC_PROG_CC
-
-AC_DEFUN([gt_TYPE_WCHAR_T],
-[
-  AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[#include <stddef.h>
-            wchar_t foo = (wchar_t)'\0';]],
-          [[]])],
-       [gt_cv_c_wchar_t=yes],
-       [gt_cv_c_wchar_t=no])])
-  if test $gt_cv_c_wchar_t = yes; then
-    AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.])
-  fi
-])
diff --git a/src/libs/gnulib/m4/wctype_h.m4 b/src/libs/gnulib/m4/wctype_h.m4
deleted file mode 100644 (file)
index 3fac0ee..0000000
+++ /dev/null
@@ -1,209 +0,0 @@
-# wctype_h.m4 serial 18
-
-dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it.
-
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl Written by Paul Eggert.
-
-AC_DEFUN([gl_WCTYPE_H],
-[
-  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
-  AC_REQUIRE([AC_PROG_CC])
-  AC_REQUIRE([AC_CANONICAL_HOST])
-  AC_CHECK_FUNCS_ONCE([iswcntrl])
-  if test $ac_cv_func_iswcntrl = yes; then
-    HAVE_ISWCNTRL=1
-  else
-    HAVE_ISWCNTRL=0
-  fi
-  AC_SUBST([HAVE_ISWCNTRL])
-
-  AC_REQUIRE([gt_TYPE_WINT_T])
-  if test $gt_cv_c_wint_t = yes; then
-    HAVE_WINT_T=1
-  else
-    HAVE_WINT_T=0
-  fi
-  AC_SUBST([HAVE_WINT_T])
-
-  gl_CHECK_NEXT_HEADERS([wctype.h])
-  if test $ac_cv_header_wctype_h = yes; then
-    if test $ac_cv_func_iswcntrl = yes; then
-      dnl Linux libc5 has an iswprint function that returns 0 for all arguments.
-      dnl The other functions are likely broken in the same way.
-      AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works],
-        [
-          AC_RUN_IFELSE(
-            [AC_LANG_SOURCE([[
-               /* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-                  included before <wchar.h>.
-                  BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-                  must be included before <wchar.h>.  */
-               #include <stddef.h>
-               #include <stdio.h>
-               #include <time.h>
-               #include <wchar.h>
-               #include <wctype.h>
-               int main () { return iswprint ('x') == 0; }
-            ]])],
-            [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no],
-            [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h>
-                          #if __GNU_LIBRARY__ == 1
-                          Linux libc5 i18n is broken.
-                          #endif]], [])],
-              [gl_cv_func_iswcntrl_works="guessing yes"],
-              [gl_cv_func_iswcntrl_works="guessing no"])
-            ])
-        ])
-    fi
-    HAVE_WCTYPE_H=1
-  else
-    HAVE_WCTYPE_H=0
-  fi
-  AC_SUBST([HAVE_WCTYPE_H])
-
-  case "$gl_cv_func_iswcntrl_works" in
-    *yes) REPLACE_ISWCNTRL=0 ;;
-    *)    REPLACE_ISWCNTRL=1 ;;
-  esac
-  AC_SUBST([REPLACE_ISWCNTRL])
-
-  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then
-    dnl Redefine all of iswcntrl, ..., iswxdigit in <wctype.h>.
-    :
-  fi
-
-  if test $REPLACE_ISWCNTRL = 1; then
-    REPLACE_TOWLOWER=1
-  else
-    AC_CHECK_FUNCS([towlower])
-    if test $ac_cv_func_towlower = yes; then
-      REPLACE_TOWLOWER=0
-    else
-      AC_CHECK_DECLS([towlower],,,
-        [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-             included before <wchar.h>.
-             BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-             must be included before <wchar.h>.  */
-          #include <stddef.h>
-          #include <stdio.h>
-          #include <time.h>
-          #include <wchar.h>
-          #if HAVE_WCTYPE_H
-          # include <wctype.h>
-          #endif
-        ]])
-      if test $ac_cv_have_decl_towlower = yes; then
-        dnl On Minix 3.1.8, the system's <wctype.h> declares towlower() and
-        dnl towupper() although it does not have the functions. Avoid a
-        dnl collision with gnulib's replacement.
-        REPLACE_TOWLOWER=1
-      else
-        REPLACE_TOWLOWER=0
-      fi
-    fi
-  fi
-  AC_SUBST([REPLACE_TOWLOWER])
-
-  if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then
-    dnl Redefine towlower, towupper in <wctype.h>.
-    :
-  fi
-
-  dnl We assume that the wctype() and iswctype() functions exist if and only
-  dnl if the type wctype_t is defined in <wchar.h> or in <wctype.h> if that
-  dnl exists.
-  dnl HP-UX 11.00 declares all these in <wchar.h> and lacks <wctype.h>.
-  AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-               included before <wchar.h>.
-               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-               must be included before <wchar.h>.  */
-            #include <stddef.h>
-            #include <stdio.h>
-            #include <time.h>
-            #include <wchar.h>
-            #if HAVE_WCTYPE_H
-            # include <wctype.h>
-            #endif
-            wctype_t a;
-          ]],
-          [[]])],
-       [gl_cv_type_wctype_t=yes],
-       [gl_cv_type_wctype_t=no])
-    ])
-  if test $gl_cv_type_wctype_t = no; then
-    HAVE_WCTYPE_T=0
-  fi
-
-  dnl We assume that the wctrans() and towctrans() functions exist if and only
-  dnl if the type wctrans_t is defined in <wctype.h>.
-  AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be
-               included before <wchar.h>.
-               BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h>
-               must be included before <wchar.h>.  */
-            #include <stddef.h>
-            #include <stdio.h>
-            #include <time.h>
-            #include <wchar.h>
-            #include <wctype.h>
-            wctrans_t a;
-          ]],
-          [[]])],
-       [gl_cv_type_wctrans_t=yes],
-       [gl_cv_type_wctrans_t=no])
-    ])
-  if test $gl_cv_type_wctrans_t = no; then
-    HAVE_WCTRANS_T=0
-  fi
-
-  dnl Check for declarations of anything we want to poison if the
-  dnl corresponding gnulib module is not in use.
-  gl_WARN_ON_USE_PREPARE([[
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be
-   included before <wchar.h>.  */
-#if !(defined __GLIBC__ && !defined __UCLIBC__)
-# include <stddef.h>
-# include <stdio.h>
-# include <time.h>
-# include <wchar.h>
-#endif
-#include <wctype.h>
-    ]],
-    [wctype iswctype wctrans towctrans
-    ])
-])
-
-AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR],
-[
-  dnl Use AC_REQUIRE here, so that the default settings are expanded once only.
-  AC_REQUIRE([gl_WCTYPE_H_DEFAULTS])
-  gl_MODULE_INDICATOR_SET_VARIABLE([$1])
-  dnl Define it also as a C macro, for the benefit of the unit tests.
-  gl_MODULE_INDICATOR_FOR_TESTS([$1])
-])
-
-AC_DEFUN([gl_WCTYPE_H_DEFAULTS],
-[
-  GNULIB_ISWBLANK=0;    AC_SUBST([GNULIB_ISWBLANK])
-  GNULIB_WCTYPE=0;      AC_SUBST([GNULIB_WCTYPE])
-  GNULIB_ISWCTYPE=0;    AC_SUBST([GNULIB_ISWCTYPE])
-  GNULIB_WCTRANS=0;     AC_SUBST([GNULIB_WCTRANS])
-  GNULIB_TOWCTRANS=0;   AC_SUBST([GNULIB_TOWCTRANS])
-  dnl Assume proper GNU behavior unless another module says otherwise.
-  HAVE_ISWBLANK=1;      AC_SUBST([HAVE_ISWBLANK])
-  HAVE_WCTYPE_T=1;      AC_SUBST([HAVE_WCTYPE_T])
-  HAVE_WCTRANS_T=1;     AC_SUBST([HAVE_WCTRANS_T])
-  REPLACE_ISWBLANK=0;   AC_SUBST([REPLACE_ISWBLANK])
-])
diff --git a/src/libs/gnulib/m4/wcwidth.m4 b/src/libs/gnulib/m4/wcwidth.m4
deleted file mode 100644 (file)
index f00a6cc..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# wcwidth.m4 serial 23
-dnl Copyright (C) 2006-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-AC_DEFUN([gl_FUNC_WCWIDTH],
-[
-  AC_REQUIRE([gl_WCHAR_H_DEFAULTS])
-  AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles
-
-  dnl Persuade glibc <wchar.h> to declare wcwidth().
-  AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS])
-
-  AC_REQUIRE([gt_TYPE_WCHAR_T])
-  AC_REQUIRE([gt_TYPE_WINT_T])
-
-  AC_CHECK_HEADERS_ONCE([wchar.h])
-  AC_CHECK_FUNCS_ONCE([wcwidth])
-
-  AC_CHECK_DECLS([wcwidth], [], [], [[
-/* AIX 3.2.5 declares wcwidth in <string.h>. */
-#include <string.h>
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-]])
-  if test $ac_cv_have_decl_wcwidth != yes; then
-    HAVE_DECL_WCWIDTH=0
-  fi
-
-  if test $ac_cv_func_wcwidth = yes; then
-    HAVE_WCWIDTH=1
-    dnl On Mac OS X 10.3, wcwidth(0x0301) (COMBINING ACUTE ACCENT) returns 1.
-    dnl On OpenBSD 5.0, wcwidth(0x05B0) (HEBREW POINT SHEVA) returns 1.
-    dnl On OSF/1 5.1, wcwidth(0x200B) (ZERO WIDTH SPACE) returns 1.
-    dnl This leads to bugs in 'ls' (coreutils).
-    AC_CACHE_CHECK([whether wcwidth works reasonably in UTF-8 locales],
-      [gl_cv_func_wcwidth_works],
-      [
-        AC_RUN_IFELSE(
-          [AC_LANG_SOURCE([[
-#include <locale.h>
-/* AIX 3.2.5 declares wcwidth in <string.h>. */
-#include <string.h>
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-#if !HAVE_DECL_WCWIDTH
-extern
-# ifdef __cplusplus
-"C"
-# endif
-int wcwidth (int);
-#endif
-int main ()
-{
-  int result = 0;
-  if (setlocale (LC_ALL, "fr_FR.UTF-8") != NULL)
-    {
-      if (wcwidth (0x0301) > 0)
-        result |= 1;
-      if (wcwidth (0x05B0) > 0)
-        result |= 2;
-      if (wcwidth (0x200B) > 0)
-        result |= 4;
-    }
-  return result;
-}]])],
-          [gl_cv_func_wcwidth_works=yes],
-          [gl_cv_func_wcwidth_works=no],
-          [
-changequote(,)dnl
-           case "$host_os" in
-                     # Guess yes on glibc and AIX 7 systems.
-             *-gnu* | aix[7-9]*) gl_cv_func_wcwidth_works="guessing yes";;
-             *)                  gl_cv_func_wcwidth_works="guessing no";;
-           esac
-changequote([,])dnl
-          ])
-      ])
-    case "$gl_cv_func_wcwidth_works" in
-      *yes) ;;
-      *no) REPLACE_WCWIDTH=1 ;;
-    esac
-  else
-    HAVE_WCWIDTH=0
-  fi
-  dnl We don't substitute HAVE_WCWIDTH. We assume that if the system does not
-  dnl have the wcwidth function, then it does not declare it.
-])
diff --git a/src/libs/gnulib/m4/wint_t.m4 b/src/libs/gnulib/m4/wint_t.m4
deleted file mode 100644 (file)
index 9b07b07..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# wint_t.m4 serial 5 (gettext-0.18.2)
-dnl Copyright (C) 2003, 2007-2014 Free Software Foundation, Inc.
-dnl This file is free software; the Free Software Foundation
-dnl gives unlimited permission to copy and/or distribute it,
-dnl with or without modifications, as long as this notice is preserved.
-
-dnl From Bruno Haible.
-dnl Test whether <wchar.h> has the 'wint_t' type.
-dnl Prerequisite: AC_PROG_CC
-
-AC_DEFUN([gt_TYPE_WINT_T],
-[
-  AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t],
-    [AC_COMPILE_IFELSE(
-       [AC_LANG_PROGRAM(
-          [[
-/* Tru64 with Desktop Toolkit C has a bug: <stdio.h> must be included before
-   <wchar.h>.
-   BSD/OS 4.0.1 has a bug: <stddef.h>, <stdio.h> and <time.h> must be included
-   before <wchar.h>.  */
-#include <stddef.h>
-#include <stdio.h>
-#include <time.h>
-#include <wchar.h>
-            wint_t foo = (wchar_t)'\0';]],
-          [[]])],
-       [gt_cv_c_wint_t=yes],
-       [gt_cv_c_wint_t=no])])
-  if test $gt_cv_c_wint_t = yes; then
-    AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.])
-  fi
-])
diff --git a/src/libs/libbib/Makefile.sub b/src/libs/libbib/Makefile.sub
deleted file mode 100644 (file)
index e8986ab..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# Makefile.sub for `libbib'
-#
-# File position: <groff-source>/src/libs/libbib/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-LIB=bib
-OBJS=\
-  common.$(OBJEXT) \
-  index.$(OBJEXT) \
-  linear.$(OBJEXT) \
-  search.$(OBJEXT) \
-  map.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/common.cpp \
-  $(srcdir)/index.cpp \
-  $(srcdir)/linear.cpp \
-  $(srcdir)/search.cpp
-CSRCS=\
-  $(srcdir)/map.c
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 5f7b0104be7f5e69b04fb4948fefd0445939f72c..9ccfebf2f40048f6bb2b89810031c46f480c72f5 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 unsigned hash(const char *s, int len)
 {
index ea4df53c38410fa3ce09747c5c7d41d08ee8ddfc..39d473bfccf5af140ad21249514aaf436e387e6f 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -149,15 +149,19 @@ int index_search_item::load(int fd)
   unused(&fd_closer);
   struct stat sb;
   if (fstat(fd, &sb) < 0) {
-    error("can't fstat `%1': %2", name, strerror(errno));
+    error("can't fstat '%1': %2", name, strerror(errno));
     return 0;
   }
   if (!S_ISREG(sb.st_mode)) {
-    error("`%1' is not a regular file", name);
+    error("'%1' is not a regular file", name);
     return 0;
   }
   mtime = sb.st_mtime;
   int size = int(sb.st_size);
+  if (size == 0) {
+    error("'%1' is an empty file", name);
+    return 0;
+  }
   char *addr;
   map_addr = mapread(fd, size);
   if (map_addr) {
@@ -167,7 +171,7 @@ int index_search_item::load(int fd)
   else {
     addr = buffer = (char *)malloc(size);
     if (buffer == 0) {
-      error("can't allocate buffer for `%1'", name);
+      error("can't allocate buffer for '%1'", name);
       return 0;
     }
     char *ptr = buffer;
@@ -175,11 +179,11 @@ int index_search_item::load(int fd)
     while (bytes_to_read > 0) {
       int nread = read(fd, ptr, bytes_to_read);
       if (nread == 0) {
-       error("unexpected EOF on `%1'", name);
+       error("unexpected EOF on '%1'", name);
        return 0;
       }
       if (nread < 0) {
-       error("read error on `%1': %2", name, strerror(errno));
+       error("read error on '%1': %2", name, strerror(errno));
        return 0;
       }
       bytes_to_read -= nread;
@@ -188,11 +192,11 @@ int index_search_item::load(int fd)
   }
   header = *(index_header *)addr;
   if (header.magic != INDEX_MAGIC) {
-    error("`%1' is not an index file: wrong magic number", name);
+    error("'%1' is not an index file: wrong magic number", name);
     return 0;
   }
   if (header.version != INDEX_VERSION) {
-    error("version number in `%1' is wrong: was %2, should be %3",
+    error("version number in '%1' is wrong: was %2, should be %3",
          name, header.version, INDEX_VERSION);
     return 0;
   }
@@ -202,7 +206,7 @@ int index_search_item::load(int fd)
            + header.strings_size
            + sizeof(header));
   if (sz != size) {
-    error("size of `%1' is wrong: was %2, should be %3",
+    error("size of '%1' is wrong: was %2, should be %3",
          name, size, sz);
     return 0;
   }
@@ -254,7 +258,7 @@ int index_search_item::verify()
   const char *reason = do_verify();
   if (!reason)
     return 1;
-  error("`%1' is bad: %2", name, reason);
+  error("'%1' is bad: %2", name, reason);
   return 0;
 }
 
@@ -305,7 +309,7 @@ index_search_item_iterator::index_search_item_iterator(index_search_item *ind,
   found_list = indx->search(q, strlen(q), &temp_list);
   if (!found_list) {
     found_list = &minus_one;
-    warning("all keys would have been discarded in constructing index `%1'",
+    warning("all keys would have been discarded in constructing index '%1'",
            indx->name);
   }
 }
@@ -360,7 +364,7 @@ int index_search_item_iterator::get_tag(int tagno,
   const char *filename = indx->munge_filename(indx->pool + tp->filename_index);
   int fd = open(filename, O_RDONLY | O_BINARY);
   if (fd < 0) {
-    error("can't open `%1': %2", filename, strerror(errno));
+    error("can't open '%1': %2", filename, strerror(errno));
     return 0;
   }
   struct stat sb;
@@ -383,17 +387,17 @@ int index_search_item_iterator::get_tag(int tagno,
     return 0;
   }
   if (tp->start != 0 && fseek(fp, long(tp->start), 0) < 0)
-    error("can't seek on `%1': %2", filename, strerror(errno));
+    error("can't seek on '%1': %2", filename, strerror(errno));
   else {
     int length = tp->length;
     int err = 0;
     if (length == 0) {
       if (fstat(fileno(fp), &sb) < 0) {
-       error("can't stat `%1': %2", filename, strerror(errno));
+       error("can't stat '%1': %2", filename, strerror(errno));
        err = 1;
       }
       else if (!S_ISREG(sb.st_mode)) {
-       error("`%1' is not a regular file", filename);
+       error("'%1' is not a regular file", filename);
        err = 1;
       }
       else
@@ -406,7 +410,7 @@ int index_search_item_iterator::get_tag(int tagno,
        buf = new char[buflen];
       }
       if (fread(buf + 1, 1, length, fp) != (size_t)length)
-       error("fread on `%1' failed: %2", filename, strerror(errno));
+       error("fread on '%1' failed: %2", filename, strerror(errno));
       else {
        buf[0] = '\n';
        // Remove the CR characters from CRLF pairs.
@@ -564,7 +568,7 @@ void index_search_item::read_common_words_file()
   errno = 0;
   FILE *fp = fopen(common_words_file, "r");
   if (!fp) {
-    error("can't open `%1': %2", common_words_file, strerror(errno));
+    error("can't open '%1': %2", common_words_file, strerror(errno));
     return;
   }
   common_words_table_size = 2*header.common + 1;
@@ -614,7 +618,7 @@ void index_search_item::add_out_of_date_file(int fd, const char *filename,
     if ((*pp)->is_named(filename))
       return;
   *pp = make_linear_search_item(fd, filename, fid);
-  warning("`%1' modified since `%2' created", filename, name);
+  warning("'%1' modified since '%2' created", filename, name);
 }
 
 void index_search_item::check_files()
@@ -626,11 +630,11 @@ void index_search_item::check_files()
     const char *path = munge_filename(ptr);
     struct stat sb;
     if (stat(path, &sb) < 0)
-      error("can't stat `%1': %2", path, strerror(errno));
+      error("can't stat '%1': %2", path, strerror(errno));
     else if (sb.st_mtime > mtime) {
       int fd = open(path, O_RDONLY | O_BINARY);
       if (fd < 0)
-       error("can't open `%1': %2", path, strerror(errno));
+       error("can't open '%1': %2", path, strerror(errno));
       else
        add_out_of_date_file(fd, path, filename_id + (ptr - pool));
     }
diff --git a/src/libs/libbib/libbib.am b/src/libs/libbib/libbib.am
new file mode 100644 (file)
index 0000000..7fdeee6
--- /dev/null
@@ -0,0 +1,43 @@
+# Automake rules for 'libbib'
+#
+# File position: <groff-source>/src/libs/libbib/libbib.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+noinst_LIBRARIES += libbib.a
+libbib_a_SOURCES = \
+  src/libs/libbib/common.cpp \
+  src/libs/libbib/index.cpp \
+  src/libs/libbib/linear.cpp \
+  src/libs/libbib/search.cpp \
+  src/libs/libbib/map.c
+src/libs/libbib/index.$(OBJEXT): defs.h
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index e62d66065f2d295c5558b0e06fd60bd70331bbf3..f583c6888c7a11b338f4087b8891447077c79995 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -303,9 +303,9 @@ int file_buffer::load(int fd, const char *filename)
 {
   struct stat sb;
   if (fstat(fd, &sb) < 0)
-    error("can't fstat `%1': %2", filename, strerror(errno));
+    error("can't fstat '%1': %2", filename, strerror(errno));
   else if (!S_ISREG(sb.st_mode))
-    error("`%1' is not a regular file", filename);
+    error("'%1' is not a regular file", filename);
   else {
     // We need one character extra at the beginning for an additional newline
     // used as a sentinel.  We get 4 instead so that the read buffer will be
@@ -316,16 +316,16 @@ int file_buffer::load(int fd, const char *filename)
     buffer = new char[size + 4 + 1];
     int nread = read(fd, buffer + 4, size);
     if (nread < 0)
-      error("error reading `%1': %2", filename, strerror(errno));
+      error("error reading '%1': %2", filename, strerror(errno));
     else if (nread != size)
-      error("size of `%1' decreased", filename);
+      error("size of '%1' decreased", filename);
     else {
       char c;
       nread = read(fd, &c, 1);
       if (nread != 0)
-       error("size of `%1' increased", filename);
+       error("size of '%1' increased", filename);
       else if (memchr(buffer + 4, '\0', size < 1024 ? size : 1024) != 0)
-       error("database `%1' is a binary file", filename);
+       error("database '%1' is a binary file", filename);
       else {
        close(fd);
        buffer[3] = '\n';
index c8d7962d6cc5b7af638a18a5a4fe2e95335355d5..5d635afa03b99971ab62e3db7981004470bff4ed 100644 (file)
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <stdlib.h>
 
@@ -36,6 +36,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 extern "C" {
 #endif
 
+/* Prototypes */
+char *mapread(int, int);
+int unmap(char *, int);
+
 char *mapread(int fd, int nbytes)
 {
   char *p = (char *)mmap((void *)0, (size_t)nbytes, PROT_READ,
index 06bd19b239eb64933f3dfdf4acbafca76b2d037a..9d0cab18f2b592e5a120187727e2cf565f127771 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*- 
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -56,7 +56,7 @@ void search_list::add_file(const char *filename, int silent)
     int fd = open(filename, O_RDONLY | O_BINARY);
     if (fd < 0) {
       if (!silent)
-       error("can't open `%1': %2", filename, strerror(errno));
+        error("can't open '%1': %2", filename, strerror(errno));
     }
     else
       p = make_linear_search_item(fd, filename, next_fid);
diff --git a/src/libs/libdriver/Makefile.sub b/src/libs/libdriver/Makefile.sub
deleted file mode 100644 (file)
index 4659ffe..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# Makefile.sub for `libdriver'
-#
-# File position: <groff-source>/src/libs/libdriver/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-LIB=driver
-OBJS=\
-  input.$(OBJEXT) \
-  printer.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/input.cpp \
-  $(srcdir)/printer.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index da0895e6c380d50f0412cbe0a42663064432b756..fd46d777efbf99423028e1f21972dddb38656094 100644 (file)
@@ -2,7 +2,7 @@
 
 // <groff_src_dir>/src/libs/libdriver/input.cpp
 
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
 
    Written by James Clark (jjc@jclark.com)
    Major rewrite 2001 by Bernd Warken <groff-bernd.warken-72@web.de>
@@ -20,7 +20,7 @@
    General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program. If not, see <http://www.gnu.org/licenses/>.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /* Description
@@ -30,7 +30,7 @@
 
    All parsed information is processed within the function do_file().
    A device postprocessor just needs to fill in the methods for the class
-   `printer' (or rather a derived class) without having to worry about
+   'printer' (or rather a derived class) without having to worry about
    the syntax of the intermediate output format.  Consequently, the
    programming of groff postprocessors is similar to the development of
    device drivers.
    making groff fully compatible with classical troff without pain.
 
    Bugs fixed
-   - Unknown subcommands of `D' and `x' are now ignored like in the
+   - Unknown subcommands of 'D' and 'x' are now ignored like in the
      classical case, but a warning is issued.  This was also
      implemented for the other commands.
-   - A warning is emitted if `x stop' is missing.
-   - `DC' and `DE' commands didn't position to the right end after
+   - A warning is emitted if 'x stop' is missing.
+   - 'DC' and 'DE' commands didn't position to the right end after
      drawing (now they do), see discussion below.
-   - So far, `x stop' was ignored.  Now it terminates the processing
+   - So far, 'x stop' was ignored.  Now it terminates the processing
      of the current intermediate output file like the classical troff.
-   - The command `c' didn't check correctly on white-space.
+   - The command 'c' didn't check correctly on white-space.
    - The environment stack wasn't suitable for the color extensions
      (replaced by a class).
    - The old groff parser could only handle a prologue with the first
@@ -71,9 +71,9 @@
    - Range checks for numbers implemented.
 
    New and improved features
-   - The color commands `m' and `DF' are added.
-   - The old color command `Df' is now converted and delegated to `DFg'.
-   - The command `F' is implemented as `use intended file name'.  It
+   - The color commands 'm' and 'DF' are added.
+   - The old color command 'Df' is now converted and delegated to 'DFg'.
+   - The command 'F' is implemented as 'use intended file name'.  It
      checks whether its argument agrees with the file name used so far,
      otherwise a warning is issued.  Then the new name is remembered
      and used for the following error messages.
      It extends the rule of the classical troff output language in a
      logical way instead of the rather strange actual positioning.
      For details, see the discussion below.
-   - For the `D' commands that only set the environment, the calling of
+   - For the 'D' commands that only set the environment, the calling of
      pr->send_draw() was removed because this doesn't make sense for
-     the `DF' commands; the (changed) environment is sent with the
+     the 'DF' commands; the (changed) environment is sent with the
      next command anyway.
    - Error handling was clearly separated into warnings and fatal.
-   - The error behavior on additional arguments for `D' and `x'
+   - The error behavior on additional arguments for 'D' and 'x'
      commands with a fixed number of arguments was changed from being
      ignored (former groff) to issue a warning and ignore (now), see
      skip_line_x().  No fatal was chosen because both string and
    - All D commands with a variable number of args expect an even
      number of trailing integer arguments, so fatal on error was
      implemented.
-   - Disable environment stack and the commands `{' and `}' by making
+   - Disable environment stack and the commands '{' and '}' by making
      them conditional on macro USE_ENV_STACK; actually, this is
      undefined by default.  There isn't any known application for these
      features.
 
    Cosmetics
-   - Nested `switch' commands are avoided by using more functions.
+   - Nested 'switch' commands are avoided by using more functions.
      Dangerous 'fall-through's avoided.
    - Commands and functions are sorted alphabetically (where possible).
    - Dynamic arrays/buffers are now implemented as container classes.
      streamlined by using classes.
    - Use standard C math functions for number handling, so getting rid
      of differences to '0'.
-   - The macro `IntArg' has been created for an easier transition
-     to guaranteed 32 bits integers (`int' is enough for GNU, while
-     ANSI only guarantees `long int' to have a length of 32 bits).
-   - The many usages of type `int' are differentiated by using `Char',
-     `bool', and `IntArg' where appropriate.
+   - The macro 'IntArg' has been created for an easier transition
+     to guaranteed 32 bits integers ('int' is enough for GNU, while
+     ANSI only guarantees 'long int' to have a length of 32 bits).
+   - The many usages of type 'int' are differentiated by using 'Char',
+     'bool', and 'IntArg' where appropriate.
    - To ease the calls of the local utility functions, the parser
-     variables `current_file', `npages', and `current_env'
+     variables 'current_file', 'npages', and 'current_env'
      (formerly env) were made global to the file (formerly they were
      local to the do_file() function)
    - Various comments were added.
 
    TODO
    - Get rid of the stupid drawing positioning.
-   - Can the `Dt' command be completely handled by setting environment
+   - Can the 'Dt' command be completely handled by setting environment
      within do_file() instead of sending to pr?
    - Integer arguments must be >= 32 bits, use conditional #define.
    - Add scaling facility for classical device independence and
      non-groff devices.  Classical troff output had a quasi device
      independence by scaling the intermediate output to the resolution
      of the postprocessor device if different from the one specified
-     with `x T', groff have not.  So implement full quasi device
+     with 'x T', groff have not.  So implement full quasi device
      indepedence, including the mapping of the strange classical
      devices to the postprocessor device (seems to be reasonably
      easy).
    - The external, global pointer variables are not optimally handled.
-     - The global variables `current_filename',
-       `current_source_filename', and `current_lineno' are only used for
-       error reporting.  So implement a static class `Error'
-       (`::' calls).
-     - The global `device' is the name used during the formatting
+     - The global variables 'current_filename',
+       'current_source_filename', and 'current_lineno' are only used for
+       error reporting.  So implement a static class 'Error'
+       ('::' calls).
+     - The global 'device' is the name used during the formatting
        process; there should be a new variable for the device name used
        during the postprocessing.
-  - Implement the B-spline drawing `D~' for all graphical devices.
-  - Make `environment' a class with an overflow check for its members
+  - Implement the B-spline drawing 'D~' for all graphical devices.
+  - Make 'environment' a class with an overflow check for its members
     and a delete method to get rid of delete_current_env().
-  - Implement the `EnvStack' to use `new' instead of `malloc'.
+  - Implement the 'EnvStack' to use 'new' instead of 'malloc'.
   - The class definitions of this document could go into a new file.
-  - The comments in this section should go to a `Changelog' or some
-    `README' file in this directory.
+  - The comments in this section should go to a 'Changelog' or some
+    'README' file in this directory.
 */
 
 /*
   Discussion of the positioning by drawing commands
 
   There was some confusion about the positioning of the graphical
-  pointer at the printout after having executed a `D' command.
+  pointer at the printout after having executed a 'D' command.
   The classical troff manual of Ossanna & Kernighan specified,
 
-    `The position after a graphical object has been drawn is
+    'The position after a graphical object has been drawn is
      at its end; for circles and ellipses, the "end" is at the
      right side.'
 
 
   The former groff_out(5) specified to use the alternative arguments
   sum displacement for calculating the drawing positioning of
-  non-classical commands, including the `Dt' command (setting-only)
+  non-classical commands, including the 'Dt' command (setting-only)
   and closed polygons.  Applying this to the new groff color commands
   will lead to disaster.  For their arguments can take large values (>
   65000).  On low resolution devices, the displacement of such large
   nonsense specification has come to a natural end anyway.
 
   The groff source code, however, had no positioning for the
-  setting-only commands (esp. `Dt'), the right-end positioning for
+  setting-only commands (esp. 'Dt'), the right-end positioning for
   outlined circles and ellipses, and the alternative argument sum
   displacement for all other commands (including filled circles and
   ellipses).
   The reason why no one seems to have suffered from this mayhem so
   far is that the graphical objects are usually generated by
   preprocessors like pic that do not depend on the automatic
-  positioning.  When using the low level `\D' escape sequences or `D'
+  positioning.  When using the low level '\D' escape sequences or 'D'
   output commands, the strange positionings can be circumvented by
-  absolute positionings or by tricks like `\Z'.
+  absolute positionings or by tricks like '\Z'.
 
   So doing an exorcism on the strange, incompatible displacements might
   not harm any existing documents, but will make the usage of the
   provided for testing the funny former behavior.
 
   The new rule implies the following behavior.
-  - Setting commands (`Dt', `Df', `DF') and polygons (`Dp' and `DP')
+  - Setting commands ('Dt', 'Df', 'DF') and polygons ('Dp' and 'DP')
     do not change position now.
-  - Filled circles and ellipses (`DC' and `DE') position at their
-    most right point (outlined ones `Dc' and `De' did this anyway).
+  - Filled circles and ellipses ('DC' and 'DE') position at their
+    most right point (outlined ones 'Dc' and 'De' did this anyway).
   - As before, all open graphical objects position to their final
     drawing point (alternate sum of the command arguments).
 
 #define STUPID_DRAWING_POSITIONING
 #endif
 
-// Decide whether the commands `{' and `}' for different environments
+// Decide whether the commands '{' and '}' for different environments
 // should be used.
 #undef USE_ENV_STACK
 
@@ -304,12 +304,12 @@ class StringBuf {
 public:
   StringBuf(void);             // allocate without storing
   ~StringBuf(void);
-  void append(const Char);     // append character to `data'
-  char *make_string(void);     // return new copy of `data' with '\0'
+  void append(const Char);     // append character to 'data'
+  char *make_string(void);     // return new copy of 'data' with '\0'
   bool is_empty(void) {                // true if none stored
     return (num_stored > 0) ? false : true;
   }
-  void reset(void);            // set `num_stored' to 0
+  void reset(void);            // set 'num_stored' to 0
 };
 
 #ifdef USE_ENV_STACK
@@ -344,7 +344,7 @@ printer *pr;
 
 // Note:
 //
-//   We rely on an implementation of the `new' operator which aborts
+//   We rely on an implementation of the 'new' operator which aborts
 //   gracefully if it can't allocate memory (e.g. from libgroff/new.cpp).
 
 
@@ -355,7 +355,7 @@ printer *pr;
 FILE *current_file = 0;                // current input stream for parser
 
 // npages: number of pages processed so far (including current page),
-//         _not_ the page number in the printout (can be set with `p').
+//         _not_ the page number in the printout (can be set with 'p').
 int npages = 0;
 
 const ColorArg
@@ -392,7 +392,7 @@ IntArray *get_D_fixed_args_odd_dummy(const size_t);
                                // arguments plus optional dummy
 IntArray *get_D_variable_args(void);
                                 // variable, even number of int args
-char *get_extended_arg(void);  // argument for `x X' (several lines)
+char *get_extended_arg(void);  // argument for 'x X' (several lines)
 IntArg get_integer_arg(void);  // read in next integer argument
 IntArray *get_possibly_integer_args();
                                // 0 or more integer arguments
@@ -612,7 +612,7 @@ void delete_current_env(void)
 void
 fatal_command(char command)
 {
-  fatal("`%1' command invalid before first `p' command", command);
+  fatal("'%1' command invalid before first 'p' command", command);
 }
 
 //////////////////////////////////////////////////////////////////////
@@ -654,8 +654,8 @@ get_color_arg(void)
 
    number: In-parameter, the number of arguments to be retrieved.
    ignore: In-parameter, ignore next argument -- GNU troff always emits
-           pairs of parameters for `D' extensions added by groff.
-           Default is `false'.
+           pairs of parameters for 'D' extensions added by groff.
+           Default is 'false'.
 
    Return: New IntArray containing the arguments.
 */
@@ -732,7 +732,7 @@ get_D_variable_args()
 
 //////////////////////////////////////////////////////////////////////
 /* get_extended_arg():
-   Retrieve extended arg for `x X' command.
+   Retrieve extended arg for 'x X' command.
 
    - Skip leading spaces and tabs, error on EOL or newline.
    - Return everything before the next NL or EOF ('#' is not a comment);
@@ -1175,7 +1175,7 @@ skip_line_warn(void)
 
 //////////////////////////////////////////////////////////////////////
 /* skip_line_D ():
-   Skip line in `D' commands.
+   Skip line in 'D' commands.
 
    Decide whether in case of an additional argument a fatal error is
    raised (the documented classical behavior), only a warning is
@@ -1192,7 +1192,7 @@ skip_line_D(void)
 
 //////////////////////////////////////////////////////////////////////
 /* skip_line_x ():
-   Skip line in `x' commands.
+   Skip line in 'x' commands.
 
    Decide whether in case of an additional argument a fatal error is
    raised (the documented classical behavior), only a warning is
@@ -1296,7 +1296,7 @@ parse_color_command(color *col)
     col->set_rgb(red, green, blue);
     break;
   default:
-    error("invalid color scheme `%1'", (int) subcmd);
+    error("invalid color scheme '%1'", (int) subcmd);
     break;
   } // end of color subcommands
 }
@@ -1377,7 +1377,7 @@ parse_D_command()
        current_env->fill = new color(current_env->col);
       }
       pr->change_fill_color(current_env);
-      // skip unused `vertical' component (\D'...' always emits pairs)
+      // skip unused 'vertical' component (\D'...' always emits pairs)
       (void) get_integer_arg();
 #   ifdef STUPID_DRAWING_POSITIONING
       current_env->hpos += arg;
@@ -1440,8 +1440,8 @@ parse_D_command()
    - current_env: is set by many subcommands.
    - npages: page counting variable
 
-   Return: boolean in the meaning of `stopped'
-           - true if parsing should be stopped (`x stop').
+   Return: boolean in the meaning of 'stopped'
+           - true if parsing should be stopped ('x stop').
            - false if parsing should continue.
 */
 bool
@@ -1464,7 +1464,7 @@ parse_x_command(void)
     {
       char *str_arg = get_extended_arg();
       if (str_arg == 0)
-       warning("empty argument for `x F' command");
+       warning("empty argument for 'x F' command");
       else {
        remember_source_filename(str_arg);
        a_delete str_arg;
@@ -1478,14 +1478,14 @@ parse_x_command(void)
     skip_line_x();
     break;
   case 'i':                    // x init: initialize device
-    error("duplicate `x init' command");
+    error("duplicate 'x init' command");
     skip_line_x();
     break;
   case 'p':                    // x pause: pause device
     skip_line_x();
     break;
   case 'r':                    // x res: set resolution
-    error("duplicate `x res' command");
+    error("duplicate 'x res' command");
     skip_line_x();
     break;
   case 's':                    // x stop: stop device
@@ -1500,7 +1500,7 @@ parse_x_command(void)
     skip_line_x();
     break;
   case 'T':                    // x Typesetter: set typesetter
-    error("duplicate `x T' command");
+    error("duplicate 'x T' command");
     skip_line();
     break;
   case 'u':                    // x underline: from .cu
@@ -1515,7 +1515,7 @@ parse_x_command(void)
     {
       char *str_arg = get_extended_arg(); // includes line skip
       if (npages <= 0)
-       error("`x X' command invalid before first `p' command");
+       error("'x X' command invalid before first 'p' command");
       else if (str_arg && (strncmp(str_arg, "devtag:",
                                   strlen("devtag:")) == 0))
        pr->devtag(str_arg, current_env);
@@ -1525,7 +1525,7 @@ parse_x_command(void)
       break;
     }
   default:                     // ignore unknown x commands, but warn
-    warning("unknown command `x %1'", subcmd);
+    warning("unknown command 'x %1'", subcmd);
     skip_line();
   }
   a_delete subcmd_str;
@@ -1556,8 +1556,8 @@ do_file(const char *filename)
   // setup of global variables
   npages = 0;
   current_lineno = 1;
-  // `pr' is initialized after the prologue.
-  // `device' is set by the 1st prologue command.
+  // 'pr' is initialized after the prologue.
+  // 'device' is set by the 1st prologue command.
 
   if (filename[0] == '-' && filename[1] == '\0')
     current_file = stdin;
@@ -1565,7 +1565,7 @@ do_file(const char *filename)
     errno = 0;
     current_file = fopen(filename, "r");
     if (errno != 0 || current_file == 0) {
-      error("can't open file `%1'", filename);
+      error("can't open file '%1'", filename);
       return;
     }
   }
@@ -1588,18 +1588,18 @@ do_file(const char *filename)
     char *str_arg;
     IntArg int_arg;
 
-    // 1st command `x T'
-    command = next_command();  
+    // 1st command 'x T'
+    command = next_command();
     if ((int) command == EOF)
       return;
     if ((int) command != 'x')
-      fatal("the first command must be `x T'");
+      fatal("the first command must be 'x T'");
     str_arg = get_string_arg();
     if (str_arg[0] != 'T')
-      fatal("the first command must be `x T'");
+      fatal("the first command must be 'x T'");
     a_delete str_arg;
     char *tmp_dev = get_string_arg();
-    if (pr == 0) {             // note: `pr' initialized after prologue
+    if (pr == 0) {             // note: 'pr' initialized after prologue
       device = tmp_dev;
       if (!font::load_desc())
        fatal("couldn't load DESC file, can't continue");
@@ -1612,13 +1612,13 @@ do_file(const char *filename)
     skip_line_x();             // ignore further arguments
     current_env->size = 10 * font::sizescale;
 
-    // 2nd command `x res'
+    // 2nd command 'x res'
     command = next_command();
     if ((int) command != 'x')
-      fatal("the second command must be `x res'");
+      fatal("the second command must be 'x res'");
     str_arg = get_string_arg();
     if (str_arg[0] != 'r')
-      fatal("the second command must be `x res'");
+      fatal("the second command must be 'x res'");
     a_delete str_arg;
     int_arg = get_integer_arg();
     EnvInt font_res = font::res;
@@ -1632,13 +1632,13 @@ do_file(const char *filename)
       fatal("minimum vertical motion does not match");
     skip_line_x();             // ignore further arguments
 
-    // 3rd command `x init'
+    // 3rd command 'x init'
     command = next_command();
     if (command != 'x')
-      fatal("the third command must be `x init'");
+      fatal("the third command must be 'x init'");
     str_arg = get_string_arg();
     if (str_arg[0] != 'i')
-      fatal("the third command must be `x init'");
+      fatal("the third command must be 'x init'");
     a_delete str_arg;
     skip_line_x();
   }
@@ -1705,7 +1705,7 @@ do_file(const char *filename)
          fatal_command(command);
        Char c = next_arg_begin();
        if (c == '\n' || c == EOF)
-         error("missing argument to `c' command");
+         error("missing argument to 'c' command");
        else
          pr->set_ascii_char((unsigned char) c, current_env);
        break;
@@ -1727,7 +1727,7 @@ do_file(const char *filename)
     case 'f':                  // f: set font to number
       current_env->fontno = get_integer_arg();
       break;
-    case 'F':                  // F: obsolete, replaced by `x F'
+    case 'F':                  // F: obsolete, replaced by 'x F'
       {
        char *str_arg = get_extended_arg();
        remember_source_filename(str_arg);
@@ -1812,7 +1812,7 @@ do_file(const char *filename)
       stopped = parse_x_command();
       break;
     default:
-      warning("unrecognized command `%1'", (unsigned char) command);
+      warning("unrecognized command '%1'", (unsigned char) command);
       skip_line();
       break;
     } // end of switch
@@ -1824,8 +1824,8 @@ do_file(const char *filename)
   delete pr;
   pr = 0;
   fclose(current_file);
-  // If `stopped' is not `true' here then there wasn't any `x stop'.
+  // If 'stopped' is not 'true' here then there wasn't any 'x stop'.
   if (!stopped)
-    warning("no final `x stop' command");
+    warning("no final 'x stop' command");
   delete_current_env();
 }
diff --git a/src/libs/libdriver/libdriver.am b/src/libs/libdriver/libdriver.am
new file mode 100644 (file)
index 0000000..efe2873
--- /dev/null
@@ -0,0 +1,39 @@
+# Automake rules for 'libdriver'
+#
+# File position: <groff-source>/src/libs/libdriver/libdriver.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+noinst_LIBRARIES += libdriver.a
+libdriver_a_SOURCES = \
+  src/libs/libdriver/input.cpp \
+  src/libs/libdriver/printer.cpp
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index db6e7493abfbcfe15ef062df00447a4ca0cd4616..f20e4b0a9ffd75e8bfb736987bc9a84c88ad8668 100644 (file)
@@ -2,7 +2,7 @@
 
 // <groff_src_dir>/src/libs/libdriver/printer.cpp
 
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
    Written by James Clark (jjc@jclark.com)
 
    This file is part of groff.
@@ -18,7 +18,7 @@
    General Public License for more details.
 
    You should have received a copy of the GNU General Public License
-   along with this program. If not, see <http://www.gnu.org/licenses/>.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "driver.h"
@@ -203,21 +203,21 @@ glyph *printer::set_char_and_width(const char *nm, const environment *env,
   glyph *g = name_to_glyph(nm);
   int fn = env->fontno;
   if (fn < 0 || fn >= nfonts) {
-    error("bad font position `%1'", fn);
+    error("bad font position '%1'", fn);
     return UNDEFINED_GLYPH;
   }
   *f = font_table[fn];
   if (*f == 0) {
-    error("no font mounted at `%1'", fn);
+    error("no font mounted at '%1'", fn);
     return UNDEFINED_GLYPH;
   }
   if (!(*f)->contains(g)) {
     if (nm[0] != '\0' && nm[1] == '\0')
-      error("font `%1' does not contain ascii character `%2'",
+      error("font '%1' does not contain ascii character '%2'",
            (*f)->get_name(),
            nm[0]);
     else
-      error("font `%1' does not contain special character `%2'",
+      error("font '%1' does not contain special character '%2'",
            (*f)->get_name(),
            nm);
     return UNDEFINED_GLYPH;
@@ -233,16 +233,16 @@ void printer::set_numbered_char(int num, const environment *env, int *widthp)
   glyph *g = number_to_glyph(num);
   int fn = env->fontno;
   if (fn < 0 || fn >= nfonts) {
-    error("bad font position `%1'", fn);
+    error("bad font position '%1'", fn);
     return;
   }
   font *f = font_table[fn];
   if (f == 0) {
-    error("no font mounted at `%1'", fn);
+    error("no font mounted at '%1'", fn);
     return;
   }
   if (!f->contains(g)) {
-    error("font `%1' does not contain numbered character %2",
+    error("font '%1' does not contain numbered character %2",
          f->get_name(),
          num);
     return;
diff --git a/src/libs/libgroff/Makefile.sub b/src/libs/libgroff/Makefile.sub
deleted file mode 100644 (file)
index 840d993..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-# Makefile.sub for `libgroff'
-#
-# File position: <groff-source>/src/libs/libgroff/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-LIB=groff
-EXTRA_CFLAGS=-D__GETOPT_PREFIX=groff_ \
-             -DENABLE_RELOCATABLE=1 \
-             -DLIBDIR=\"$(libdir)\"
-OBJS=\
-  assert.$(OBJEXT) \
-  change_lf.$(OBJEXT) \
-  cmap.$(OBJEXT) \
-  color.$(OBJEXT) \
-  cset.$(OBJEXT) \
-  device.$(OBJEXT) \
-  errarg.$(OBJEXT) \
-  error.$(OBJEXT) \
-  fatal.$(OBJEXT) \
-  filename.$(OBJEXT) \
-  font.$(OBJEXT) \
-  fontfile.$(OBJEXT) \
-  geometry.$(OBJEXT) \
-  getopt.$(OBJEXT) \
-  getopt1.$(OBJEXT) \
-  glyphuni.$(OBJEXT) \
-  htmlhint.$(OBJEXT) \
-  hypot.$(OBJEXT) \
-  iftoa.$(OBJEXT) \
-  invalid.$(OBJEXT) \
-  itoa.$(OBJEXT) \
-  lf.$(OBJEXT) \
-  lineno.$(OBJEXT) \
-  localcharset.$(OBJEXT) \
-  macropath.$(OBJEXT) \
-  matherr.$(OBJEXT) \
-  maxfilename.$(OBJEXT) \
-  maxpathname.$(OBJEXT) \
-  mksdir.$(OBJEXT) \
-  nametoindex.$(OBJEXT) \
-  new.$(OBJEXT) \
-  paper.$(OBJEXT) \
-  prime.$(OBJEXT) \
-  progname.$(OBJEXT) \
-  ptable.$(OBJEXT) \
-  quotearg.$(OBJEXT) \
-  relocate.$(OBJEXT) \
-  searchpath.$(OBJEXT) \
-  spawnvp.$(OBJEXT) \
-  string.$(OBJEXT) \
-  strsave.$(OBJEXT) \
-  symbol.$(OBJEXT) \
-  tmpfile.$(OBJEXT) \
-  tmpname.$(OBJEXT) \
-  unicode.$(OBJEXT) \
-  uniglyph.$(OBJEXT) \
-  uniuni.$(OBJEXT) \
-  version.$(OBJEXT) \
-  $(LIBOBJS)
-CCSRCS=\
-  $(srcdir)/assert.cpp \
-  $(srcdir)/change_lf.cpp \
-  $(srcdir)/cmap.cpp \
-  $(srcdir)/color.cpp \
-  $(srcdir)/cset.cpp \
-  $(srcdir)/device.cpp \
-  $(srcdir)/errarg.cpp \
-  $(srcdir)/error.cpp \
-  $(srcdir)/fatal.cpp \
-  $(srcdir)/filename.cpp \
-  $(srcdir)/font.cpp \
-  $(srcdir)/fontfile.cpp \
-  $(srcdir)/geometry.cpp \
-  $(srcdir)/glyphuni.cpp \
-  $(srcdir)/htmlhint.cpp \
-  $(srcdir)/hypot.cpp \
-  $(srcdir)/invalid.cpp \
-  $(srcdir)/lf.cpp \
-  $(srcdir)/lineno.cpp \
-  $(srcdir)/macropath.cpp \
-  $(srcdir)/maxfilename.cpp \
-  $(srcdir)/maxpathname.cpp \
-  $(srcdir)/mksdir.cpp \
-  $(srcdir)/mkstemp.cpp \
-  $(srcdir)/nametoindex.cpp \
-  $(srcdir)/new.cpp \
-  $(srcdir)/paper.cpp \
-  $(srcdir)/prime.cpp \
-  $(srcdir)/ptable.cpp \
-  $(srcdir)/relocate.cpp \
-  $(srcdir)/searchpath.cpp \
-  $(srcdir)/string.cpp \
-  $(srcdir)/strsave.cpp \
-  $(srcdir)/symbol.cpp \
-  $(srcdir)/tmpfile.cpp \
-  $(srcdir)/tmpname.cpp \
-  $(srcdir)/unicode.cpp \
-  $(srcdir)/uniglyph.cpp \
-  $(srcdir)/uniuni.cpp \
-  version.cpp
-CSRCS=\
-  $(srcdir)/fmod.c \
-  $(srcdir)/getcwd.c \
-  $(srcdir)/getopt.c \
-  $(srcdir)/getopt1.c \
-  $(srcdir)/iftoa.c \
-  $(srcdir)/itoa.c \
-  $(srcdir)/localcharset.c \
-  $(srcdir)/matherr.c \
-  $(srcdir)/progname.c \
-  $(srcdir)/putenv.c \
-  $(srcdir)/quotearg.c \
-  $(srcdir)/spawnvp.c \
-  $(srcdir)/strcasecmp.c \
-  $(srcdir)/strerror.c \
-  $(srcdir)/strncasecmp.c \
-  $(srcdir)/strtol.c \
-  $(srcdir)/../snprintf/snprintf.c
-GENSRCS=\
-  version.cpp
-RM=rm -f
-
-src_version=`cat $(top_srcdir)/VERSION`
-src_revision=`cat $(top_srcdir)/REVISION`
-
-version.cpp: $(top_srcdir)/VERSION $(top_srcdir)/REVISION
-       @echo Making version.cpp
-       @echo const char \*version_string = \"$(src_version)\"\; >$@
-       @echo const char \*revision_string = \"$(src_revision)\"\; >>$@
-       @echo extern \"C\" const char \*Version_string = \"$(src_version).$(src_revision)\"\; \
-         | sed -e 's/\.0\"/\"/' >>$@
-
-# We have to avoid $(COMPILE.c) since we must not use groff's `assert.h'
-snprintf.$(OBJEXT): $(srcdir)/../snprintf/snprintf.c
-       $(CC) -c $(CDEFINES) $(CFLAGS) $(CPPFLAGS) \
-         $(srcdir)/../snprintf/snprintf.c
-
-# Data for localcharset.c.  Taken from libiconv/libcharset.
-
-all: charset.alias ref-add.sed ref-del.sed
-
-charset.alias: $(srcdir)/config.charset
-       $(SHELL) $(srcdir)/config.charset '$(HOST)' > t-$@
-       mv t-$@ $@
-
-PACKAGE=groff
-
-ref-add.sed : $(srcdir)/ref-add.sin
-       sed -e '/^#/d' \
-           -e 's/@''PACKAGE''@/$(PACKAGE)/g' $(srcdir)/ref-add.sin > t-$@
-       mv t-$@ $@
-
-ref-del.sed : $(srcdir)/ref-del.sin
-       sed -e '/^#/d' \
-           -e 's/@''PACKAGE''@/$(PACKAGE)/g' $(srcdir)/ref-del.sin > t-$@
-       mv t-$@ $@
-
-MKINSTALLDIRS = $(SHELL) $(top_srcdir)/mkinstalldirs
-
-install_data: install_charset_data
-install_charset_data:
-       -test $(GLIBC21) != no || $(MKINSTALLDIRS) $(DESTDIR)$(libdir)
-       if test -f $(DESTDIR)$(libdir)/charset.alias; then \
-         sed -f ref-add.sed $(DESTDIR)$(libdir)/charset.alias \
-           > $(DESTDIR)$(libdir)/t-charset.alias; \
-         $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
-           $(DESTDIR)$(libdir)/charset.alias; \
-         $(RM) $(DESTDIR)$(libdir)/t-charset.alias; \
-       else \
-         if test $(GLIBC21) = no; then \
-           sed -f ref-add.sed charset.alias \
-             > $(DESTDIR)$(libdir)/t-charset.alias; \
-           $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
-             $(DESTDIR)$(libdir)/charset.alias; \
-           $(RM) $(DESTDIR)$(libdir)/t-charset.alias; \
-         fi; \
-       fi
-
-uninstall_sub: uninstall_charset_data
-uninstall_charset_data:
-       -if test -f $(DESTDIR)$(libdir)/charset.alias; then \
-         sed -f ref-del.sed $(DESTDIR)$(libdir)/charset.alias \
-           > $(DESTDIR)$(libdir)/t-charset.alias; \
-         if grep '^# Packages using this file: $$' \
-                 $(DESTDIR)$(libdir)/t-charset.alias > /dev/null; then \
-           $(RM) $(DESTDIR)$(libdir)/charset.alias; \
-         else \
-           $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
-             $(DESTDIR)$(libdir)/charset.alias; \
-         fi; \
-         $(RM) $(DESTDIR)$(libdir)/t-charset.alias; \
-       fi
-
-clean: clean_charset
-clean_charset:
-       $(RM) charset.alias ref-add.sed ref-del.sed
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index d2d66333ed8d4579ec264662e58704a92f467732..aceed05ad489df5435a1c754dbf0182fcb90fa0f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -26,7 +26,7 @@ void assertion_failed(int lineno, const char *filename)
 {
   if (program_name != 0)
     fprintf(stderr, "%s: ", program_name);
-  fprintf(stderr, "Failed assertion at line %d, file `%s'.\n",
+  fprintf(stderr, "Failed assertion at line %d, file '%s'.\n",
          lineno, filename);
   fflush(stderr);
   abort();
index 9d507a9e0f3490fd2da9cba82afbecd3714fa37e..c2044fb745e0faaafe9efc9184556ea44f680aaf 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <string.h>
 
index e1fbea58120a952589d86f7ca9335e4f9ec3540d..2ffbfe470ea2e58da63ca43a25c08ae0e2bf474a 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <ctype.h>
 #include "cmap.h"
index 3efc09795c0c5b76818a1530ce182a685c8c29ff..18ee741a922baf63121ebfeefe255b5df9a3f330 100644 (file)
@@ -2,7 +2,7 @@
 
 /* <groff_src_dir>/src/libs/libgroff/color.cpp
 
-Copyright (C) 2001-201 Free Software Foundation, Inc.
+Copyright (C) 2001-2018 Free Software Foundation, Inc.
     Written by Gaius Mulley <gaius@glam.ac.uk>
 
 This file is part of groff.
@@ -18,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 #include "color.h"
@@ -43,31 +43,6 @@ min(const unsigned int a, const unsigned int b)
     return b;
 }
 
-color *color::free_list = 0;
-
-void *color::operator new(size_t n)
-{
-  assert(n == sizeof(color));
-  if (!free_list) {
-    const int BLOCK = 128;
-    free_list = (color *)new char[sizeof(color)*BLOCK];
-    for (int i = 0; i < BLOCK - 1; i++)
-      free_list[i].next = free_list + i + 1;
-    free_list[BLOCK-1].next = 0;
-  }
-  color *p = free_list;
-  free_list = (color *)(free_list->next);
-  p->next = 0;
-  return p;
-}
-
-void color::operator delete(void *p)
-{
-  if (p) {
-    ((color *)p)->next = free_list;
-    free_list = (color *)p;
-  }
-}
 
 color::color(const color * const c)
 {
@@ -178,7 +153,7 @@ void color::set_gray(const unsigned int g)
 
 /*
  *  atoh - computes the decimal value of a hexadecimal number string.
- *         `length' characters of `s' are read.  Returns 1 if successful.
+ *         'length' characters of 's' are read.  Returns 1 if successful.
  */
 
 static int atoh(unsigned int *result,
@@ -204,7 +179,7 @@ static int atoh(unsigned int *result,
 /*
  *  read_encoding - set color from a hexadecimal color string.
  *
- *  Use color scheme `cs' to parse `n' color components from string `s'.
+ *  Use color scheme 'cs' to parse 'n' color components from string 's'.
  *  Returns 1 if successful.
  */
 
@@ -364,7 +339,7 @@ void color::get_cmyk(unsigned int *c, unsigned int *m,
   }
 }
 
-// we use `0.222r + 0.707g + 0.071b' (this is the ITU standard)
+// we use '0.222r + 0.707g + 0.071b' (this is the ITU standard)
 // as an approximation for gray
 
 void color::get_gray(unsigned int *g) const
index 4e4c7edabdfbf1a9308e32dd27e03ffab525f80d..9e2fea1db2a30dba17efef9cd4475b719da04375 100755 (executable)
@@ -1,7 +1,7 @@
 #! /bin/sh
 # Output a system dependent table of character encoding aliases.
 #
-#   Copyright (C) 2000-2004, 2006-2014 Free Software Foundation, Inc.
+#   Copyright (C) 2000-2018 Free Software Foundation, Inc.
 #
 #   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
index f4cf2a9eecce3ba1a878c651cfa7dbf1440e114f..508adbc59ad83b0309f5c580d61601986e59cbb3 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <ctype.h>
 
diff --git a/src/libs/libgroff/curtime.cpp b/src/libs/libgroff/curtime.cpp
new file mode 100644 (file)
index 0000000..72fe067
--- /dev/null
@@ -0,0 +1,51 @@
+/* Copyright (C) 2015-2018 Free Software Foundation, Inc.
+
+This file is part of groff.
+
+groff 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.
+
+groff 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.
+
+The GNU General Public License version 2 (GPL2) is available in the
+internet at <http://www.gnu.org/licenses/gpl-2.0.txt>. */
+
+#include <errno.h>
+#include <limits.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "errarg.h"
+#include "error.h"
+
+#ifdef LONG_FOR_TIME_T
+long
+#else
+time_t
+#endif
+current_time()
+{
+  char *source_date_epoch = getenv("SOURCE_DATE_EPOCH");
+
+  if (source_date_epoch) {
+    errno = 0;
+    char *endptr;
+    long epoch = strtol(source_date_epoch, &endptr, 10);
+
+    if ((errno == ERANGE && (epoch == LONG_MAX || epoch == LONG_MIN)) ||
+       (errno != 0 && epoch == 0))
+      fatal("$SOURCE_DATE_EPOCH: strtol: %1", strerror(errno));
+    if (endptr == source_date_epoch)
+      fatal("$SOURCE_DATE_EPOCH: no digits found: %1", endptr);
+    if (*endptr != '\0')
+      fatal("$SOURCE_DATE_EPOCH: trailing garbage: %1", endptr);
+    return epoch;
+  } else
+    return time(0);
+}
index aea4d04ea546fca40f1187d3fbedd74d29b1a48b..0d28b8545e51e267416e609637ad117a7c35f41f 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <stdlib.h>
 #include "device.h"
index 1e99a2b1700a14b40d457b6f74831204e38927f0..b0df24abd08dcd5d67487c01d425aba59211bc29 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <stdio.h>
 #include "assert.h"
index 1275b895bb5620c64a9e23a404948d2054a31981..9a188034669cf74086b4a3ace9b8b5563534e79b 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -50,6 +50,10 @@ static void do_error_with_file_and_line(const char *filename,
       fprintf(stderr, "%s:%d:", filename, lineno);
     need_space = 1;
   }
+  if (need_space) {
+    fputc(' ', stderr);
+    need_space = 0;
+  }
   switch (type) {
   case FATAL:
     fputs("fatal error:", stderr);
index fd2c68d17df0d8deceb82d893fb1c2fdede0dcfc..c0dcb3563b34db8bf0776cc965fb1c22c7aefb5b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <stdlib.h>
 
index d07fda6d6ba270e305fc0e80049153d9043cf745..d413bdbb3016d165060e0b715fc138e5319e8f1b 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014  Free Software Foundation, Inc.
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 This file is part of groff.
 
index 6d040f819d736d0649712c7533270bd9c7291cea..7799f9eb00efa54a09411f8a83473bba8c42081a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <math.h>
 
index 047a0b8861718fc9a6dd52e44f18b32efdeefe7f..17e6f425029d27882057a62b456afa4db6879af0 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -90,7 +90,7 @@ text_file::text_file(FILE *p, char *s)
 text_file::~text_file()
 {
   a_delete buf;
-  a_delete path;
+  free(path);
   if (fp)
     fclose(fp);
 }
@@ -110,7 +110,7 @@ int text_file::next()
       if (c == EOF)
        break;
       if (invalid_input_char(c))
-       error("invalid input character code `%1'", int(c));
+       error("invalid input character code '%1'", int(c));
       else {
        if (i + 1 >= size) {
          char *old_buf = buf;
@@ -172,7 +172,7 @@ int glyph_to_unicode(glyph *g)
       char *ignore;
       return (int)strtol(nm + 1, &ignore, 16);
     }
-    // If `nm' is a single letter `x', the glyph name is `\x'.
+    // If 'nm' is a single letter 'x', the glyph name is '\x'.
     char buf[] = { '\\', '\0', '\0' };
     if (nm[1] == '\0') {
       buf[1] = nm[0];
@@ -561,7 +561,7 @@ int font::get_code(glyph *g)
     if (n >= 0)
       return n;
   }
-  // The caller must check `contains(g)' before calling get_code(g).
+  // The caller must check 'contains(g)' before calling get_code(g).
   abort();
 }
 
@@ -764,7 +764,7 @@ int font::load(int *not_found, int head_only)
     if (not_found)
       *not_found = 1;
     else
-      error("`DESC' is not a valid font file name");
+      error("'DESC' is not a valid font file name");
     return 0;
   }
   char *path;
@@ -773,7 +773,7 @@ int font::load(int *not_found, int head_only)
     if (not_found)
       *not_found = 1;
     else
-      error("can't find font file `%1'", name);
+      error("can't find font file '%1'", name);
     return 0;
   }
   text_file t(fp, path);
@@ -792,7 +792,7 @@ int font::load(int *not_found, int head_only)
       p = strtok(0, WS);
       int n;
       if (p == 0 || sscanf(p, "%d", &n) != 1 || n <= 0) {
-       t.error("bad argument for `spacewidth' command");
+       t.error("bad argument for 'spacewidth' command");
        return 0;
       }
       space_width = n;
@@ -801,7 +801,7 @@ int font::load(int *not_found, int head_only)
       p = strtok(0, WS);
       double n;
       if (p == 0 || sscanf(p, "%lf", &n) != 1 || n >= 90.0 || n <= -90.0) {
-       t.error("bad argument for `slant' command", p);
+       t.error("bad argument for 'slant' command", p);
        return 0;
       }
       slant = n;
@@ -822,7 +822,7 @@ int font::load(int *not_found, int head_only)
        else if (strcmp(p, "ffl") == 0)
          ligatures |= LIG_ffl;
        else {
-         t.error("unrecognised ligature `%1'", p);
+         t.error("unrecognised ligature '%1'", p);
          return 0;
        }
       }
@@ -830,7 +830,7 @@ int font::load(int *not_found, int head_only)
     else if (strcmp(p, "internalname") == 0) {
       p = strtok(0, WS);
       if (!p) {
-       t.error("`internalname' command requires argument");
+       t.error("'internalname' command requires argument");
        return 0;
       }
       internalname = new char[strlen(p) + 1];
@@ -880,7 +880,7 @@ int font::load(int *not_found, int head_only)
          }
          int n;
          if (sscanf(p, "%d", &n) != 1) {
-           t.error("bad kern amount `%1'", p);
+           t.error("bad kern amount '%1'", p);
            return 0;
          }
          glyph *g1 = name_to_glyph(c1);
@@ -931,33 +931,33 @@ int font::load(int *not_found, int head_only)
                                &metric.pre_math_space,
                                &metric.subscript_correction);
            if (nparms < 1) {
-             t.error("bad width for `%1'", nm);
+             t.error("bad width for '%1'", nm);
              return 0;
            }
            p = strtok(0, WS);
            if (p == 0) {
-             t.error("missing character type for `%1'", nm);
+             t.error("missing character type for '%1'", nm);
              return 0;
            }
            int type;
            if (sscanf(p, "%d", &type) != 1) {
-             t.error("bad character type for `%1'", nm);
+             t.error("bad character type for '%1'", nm);
              return 0;
            }
            if (type < 0 || type > 255) {
-             t.error("character type `%1' out of range", type);
+             t.error("character type '%1' out of range", type);
              return 0;
            }
            metric.type = type;
            p = strtok(0, WS);
            if (p == 0) {
-             t.error("missing code for `%1'", nm);
+             t.error("missing code for '%1'", nm);
              return 0;
            }
            char *ptr;
            metric.code = (int)strtol(p, &ptr, 0);
            if (metric.code == 0 && ptr == p) {
-             t.error("bad code `%1' for character `%2'", p, nm);
+             t.error("bad code '%1' for character '%2'", p, nm);
              return 0;
            }
            if (is_unicode) {
@@ -991,8 +991,8 @@ int font::load(int *not_found, int head_only)
        }
       }
       else {
-       t.error("unrecognised command `%1' "
-               "after `kernpairs' or `charset' command",
+       t.error("unrecognised command '%1' "
+               "after 'kernpairs' or 'charset' command",
                  command);
        return 0;
       }
@@ -1000,7 +1000,7 @@ int font::load(int *not_found, int head_only)
     compact();
   }
   if (!is_unicode && !had_charset) {
-    t.error("missing `charset' command");
+    t.error("missing 'charset' command");
     return 0;
   }
   if (space_width == 0) {
@@ -1034,7 +1034,7 @@ int font::load_desc()
   FILE *fp;
   char *path;
   if ((fp = open_file("DESC", &path)) == 0) {
-    error("can't find `DESC' file");
+    error("can't find 'DESC' file");
     return 0;
   }
   text_file t(fp, path);
@@ -1050,13 +1050,13 @@ int font::load_desc()
     if (found) {
       char *q = strtok(0, WS);
       if (!q) {
-       t.error("missing value for command `%1'", p);
+       t.error("missing value for command '%1'", p);
        return 0;
       }
       //int *ptr = &(this->*(table[idx-1].ptr));
       int *ptr = table[idx-1].ptr;
       if (sscanf(q, "%d", ptr) != 1) {
-       t.error("bad number `%1'", q);
+       t.error("bad number '%1'", q);
        return 0;
       }
     }
@@ -1073,7 +1073,7 @@ int font::load_desc()
     else if (strcmp("fonts", p) == 0) {
       p = strtok(0, WS);
       if (!p || sscanf(p, "%d", &nfonts) != 1 || nfonts <= 0) {
-       t.error("bad number of fonts `%1'", p);
+       t.error("bad number of fonts '%1'", p);
        return 0;
       }
       font_name_table = (const char **)new char *[nfonts+1]; 
@@ -1132,7 +1132,7 @@ int font::load_desc()
        p = strtok(0, WS);
        while (p == 0) {
          if (!t.next()) {
-           t.error("list of sizes must be terminated by `0'");
+           t.error("list of sizes must be terminated by '0'");
            return 0;
          }
          p = strtok(t.buf, WS);
@@ -1147,7 +1147,7 @@ int font::load_desc()
            break;
          // fall through
        default:
-         t.error("bad size range `%1'", p);
+         t.error("bad size range '%1'", p);
          return 0;
        }
        if (i + 2 > n) {
@@ -1217,31 +1217,31 @@ int font::load_desc()
     }
   }
   if (res == 0) {
-    t.error("missing `res' command");
+    t.error("missing 'res' command");
     return 0;
   }
   if (unitwidth == 0) {
-    t.error("missing `unitwidth' command");
+    t.error("missing 'unitwidth' command");
     return 0;
   }
   if (font_name_table == 0) {
-    t.error("missing `fonts' command");
+    t.error("missing 'fonts' command");
     return 0;
   }
   if (sizes == 0) {
-    t.error("missing `sizes' command");
+    t.error("missing 'sizes' command");
     return 0;
   }
   if (sizescale < 1) {
-    t.error("bad `sizescale' value");
+    t.error("bad 'sizescale' value");
     return 0;
   }
   if (hor < 1) {
-    t.error("bad `hor' value");
+    t.error("bad 'hor' value");
     return 0;
   }
   if (vert < 1) {
-    t.error("bad `vert' value");
+    t.error("bad 'vert' value");
     return 0;
   }
   return 1;
index 9c78dcefddcd422a300ff10ab1e50881cea90631..7cc31292572ac73ccfdbffbd31ef9baaf0f52123 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
index e6d88b1afa6be5a100f22f133130baed760d46f1..c63a41a162ced0de61e170041cb2867ebcb93a67 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by Gaius Mulley <gaius@glam.ac.uk>
      using adjust_arc_center() from printer.cpp, written by James Clark.
 
@@ -16,8 +16,11 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
 
 #include <stdio.h>
 #include <math.h>
index f06e641327909d2349f50d7f4c23b7ebaf900c41..0920abc7cbb012fb810a9821b73e5c8d157ee810 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /* Partial emulation of getcwd in terms of getwd. */
 
index e3f23641a7ba188d21a2528150d6c200389e0a3f..4e218e1cbd4ff434bcf45e5c2ae24ade4cab53ad 100644 (file)
@@ -2,7 +2,7 @@
    NOTE: getopt is now part of the C library, so if you don't know what
    "Keep this file name-space clean" means, talk to drepper@gnu.org
    before changing it!
-   Copyright (C) 1987-201 Free Software Foundation, Inc.
+   Copyright (C) 1987-2018 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software; you can redistribute it and/or modify
@@ -16,7 +16,7 @@
    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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 \f
 /* This tells Alpha OSF/1 not to define a getopt prototype in <stdio.h>.
    Ditto for AIX 3.2 and <stdlib.h>.  */
 # define attribute_hidden
 #endif
 
-/* Unlike standard Unix `getopt', functions like `getopt_long'
+/* Unlike standard Unix 'getopt', functions like 'getopt_long'
    let the user intersperse the options with the other arguments.
 
-   As `getopt_long' works, it permutes the elements of ARGV so that,
+   As 'getopt_long' works, it permutes the elements of ARGV so that,
    when it is done, all the options precede everything else.  Thus
    all application programs are extended to handle flexible argument order.
 
-   Using `getopt' or setting the environment variable POSIXLY_CORRECT
+   Using 'getopt' or setting the environment variable POSIXLY_CORRECT
    disables permutation.
    Then the application's behavior is completely standard.
 
 #include "getopt.h"
 #include "getopt_int.h"
 
-/* For communication from `getopt' to the caller.
-   When `getopt' finds an option that takes an argument,
+/* For communication from 'getopt' to the caller.
+   When 'getopt' finds an option that takes an argument,
    the argument value is returned here.
-   Also, when `ordering' is RETURN_IN_ORDER,
+   Also, when 'ordering' is RETURN_IN_ORDER,
    each non-option ARGV-element is returned here.  */
 
 char *optarg;
 
 /* Index in ARGV of the next element to be scanned.
    This is used for communication to and from the caller
-   and for communication between successive calls to `getopt'.
+   and for communication between successive calls to 'getopt'.
 
-   On entry to `getopt', zero means this is the first call; initialize.
+   On entry to 'getopt', zero means this is the first call; initialize.
 
-   When `getopt' returns -1, this is the index of the first of the
+   When 'getopt' returns -1, this is the index of the first of the
    non-option elements that the caller should itself scan.
 
-   Otherwise, `optind' communicates from one call to the next
+   Otherwise, 'optind' communicates from one call to the next
    how much of ARGV has been scanned so far.  */
 
 /* 1003.2 says this must be 1 before any call.  */
@@ -163,7 +163,7 @@ extern char *__getopt_nonoption_flags;
    The other is elements [last_nonopt,optind), which contains all
    the options processed since those non-options were skipped.
 
-   `first_nonopt' and `last_nonopt' are relocated so that they describe
+   'first_nonopt' and 'last_nonopt' are relocated so that they describe
    the new indices of the non-options in ARGV after they are moved.  */
 
 static void
@@ -180,7 +180,7 @@ exchange (char **argv, struct _getopt_data *d)
      but it consists of two parts that need to be swapped next.  */
 
 #if defined _LIBC && defined USE_NONOPTION_FLAGS
-  /* First make sure the handling of the `__getopt_nonoption_flags'
+  /* First make sure the handling of the '__getopt_nonoption_flags'
      string can work normally.  Our top argument must be in the range
      of the string.  */
   if (d->__nonoption_flags_len > 0 && top >= d->__nonoption_flags_max_len)
@@ -248,8 +248,10 @@ exchange (char **argv, struct _getopt_data *d)
 /* Initialize the internal data when the first call is made.  */
 
 static const char *
-_getopt_initialize (int argc, char **argv, const char *optstring,
-                   int posixly_correct, struct _getopt_data *d)
+_getopt_initialize (__attribute__((__unused__)) int argc,
+                   __attribute__((__unused__)) char **argv,
+                   const char *optstring, int posixly_correct,
+                   struct _getopt_data *d)
 {
   /* Start processing options with ARGV-element 1 (since ARGV-element 0
      is the program name); the sequence of previously skipped
@@ -316,44 +318,44 @@ _getopt_initialize (int argc, char **argv, const char *optstring,
 
    If an element of ARGV starts with '-', and is not exactly "-" or "--",
    then it is an option element.  The characters of this element
-   (aside from the initial '-') are option characters.  If `getopt'
+   (aside from the initial '-') are option characters.  If 'getopt'
    is called repeatedly, it returns successively each of the option characters
    from each of the option elements.
 
-   If `getopt' finds another option character, it returns that character,
-   updating `optind' and `nextchar' so that the next call to `getopt' can
+   If 'getopt' finds another option character, it returns that character,
+   updating 'optind' and 'nextchar' so that the next call to 'getopt' can
    resume the scan with the following option character or ARGV-element.
 
-   If there are no more option characters, `getopt' returns -1.
-   Then `optind' is the index in ARGV of the first ARGV-element
+   If there are no more option characters, 'getopt' returns -1.
+   Then 'optind' is the index in ARGV of the first ARGV-element
    that is not an option.  (The ARGV-elements have been permuted
    so that those that are not options now come last.)
 
    OPTSTRING is a string containing the legitimate option characters.
    If an option character is seen that is not listed in OPTSTRING,
-   return '?' after printing an error message.  If you set `opterr' to
+   return '?' after printing an error message.  If you set 'opterr' to
    zero, the error message is suppressed but we still return '?'.
 
    If a char in OPTSTRING is followed by a colon, that means it wants an arg,
    so the following text in the same ARGV-element, or the text of the following
-   ARGV-element, is returned in `optarg'.  Two colons mean an option that
+   ARGV-element, is returned in 'optarg'.  Two colons mean an option that
    wants an optional arg; if there is text in the current ARGV-element,
-   it is returned in `optarg', otherwise `optarg' is set to zero.
+   it is returned in 'optarg', otherwise 'optarg' is set to zero.
 
-   If OPTSTRING starts with `-' or `+', it requests different methods of
+   If OPTSTRING starts with '-' or '+', it requests different methods of
    handling the non-option ARGV-elements.
    See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above.
 
-   Long-named options begin with `--' instead of `-'.
+   Long-named options begin with '--' instead of '-'.
    Their names may be abbreviated as long as the abbreviation is unique
    or is an exact match for some defined option.  If they have an
    argument, it follows the option name in the same ARGV-element, separated
-   from the option name by a `=', or else the in next ARGV-element.
-   When `getopt' finds a long-named option, it returns 0 if that option's
-   `flag' field is nonzero, the value of the option's `val' field
-   if the `flag' field is zero.
+   from the option name by a '=', or else the in next ARGV-element.
+   When 'getopt' finds a long-named option, it returns 0 if that option's
+   'flag' field is nonzero, the value of the option's 'val' field
+   if the 'flag' field is zero.
 
-   LONGOPTS is a vector of `struct option' terminated by an
+   LONGOPTS is a vector of 'struct option' terminated by an
    element containing a name which is zero.
 
    LONGIND returns the index in LONGOPT of the long-named option found.
@@ -431,7 +433,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
          d->__last_nonopt = d->optind;
        }
 
-      /* The special ARGV-element `--' means premature end of options.
+      /* The special ARGV-element '--' means premature end of options.
         Skip it like a null option,
         then exchange with previous non-options as if it were an option,
         then skip everything else like a non-option.  */
@@ -546,7 +548,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
 #if defined _LIBC && defined USE_IN_LIBIO
              char *buf;
 
-             if (__asprintf (&buf, _("%s: option `%s' is ambiguous\n"),
+             if (__asprintf (&buf, _("%s: option '%s' is ambiguous\n"),
                              argv[0], argv[d->optind]) >= 0)
                {
                  _IO_flockfile (stderr);
@@ -565,7 +567,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                  free (buf);
                }
 #else
-             fprintf (stderr, _("%s: option `%s' is ambiguous\n"),
+             fprintf (stderr, _("%s: option '%s' is ambiguous\n"),
                       argv[0], argv[d->optind]);
 #endif
            }
@@ -599,11 +601,11 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                          /* --option */
 #if defined _LIBC && defined USE_IN_LIBIO
                          n = __asprintf (&buf, _("\
-%s: option `--%s' doesn't allow an argument\n"),
+%s: option '--%s' doesn't allow an argument\n"),
                                          argv[0], pfound->name);
 #else
                          fprintf (stderr, _("\
-%s: option `--%s' doesn't allow an argument\n"),
+%s: option '--%s' doesn't allow an argument\n"),
                                   argv[0], pfound->name);
 #endif
                        }
@@ -612,12 +614,12 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                          /* +option or -option */
 #if defined _LIBC && defined USE_IN_LIBIO
                          n = __asprintf (&buf, _("\
-%s: option `%c%s' doesn't allow an argument\n"),
+%s: option '%c%s' doesn't allow an argument\n"),
                                          argv[0], argv[d->optind - 1][0],
                                          pfound->name);
 #else
                          fprintf (stderr, _("\
-%s: option `%c%s' doesn't allow an argument\n"),
+%s: option '%c%s' doesn't allow an argument\n"),
                                   argv[0], argv[d->optind - 1][0],
                                   pfound->name);
 #endif
@@ -663,7 +665,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                      char *buf;
 
                      if (__asprintf (&buf, _("\
-%s: option `%s' requires an argument\n"),
+%s: option '%s' requires an argument\n"),
                                      argv[0], argv[d->optind - 1]) >= 0)
                        {
                          _IO_flockfile (stderr);
@@ -684,7 +686,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                        }
 #else
                      fprintf (stderr,
-                              _("%s: option `%s' requires an argument\n"),
+                              _("%s: option '%s' requires an argument\n"),
                               argv[0], argv[d->optind - 1]);
 #endif
                    }
@@ -722,10 +724,10 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                {
                  /* --option */
 #if defined _LIBC && defined USE_IN_LIBIO
-                 n = __asprintf (&buf, _("%s: unrecognized option `--%s'\n"),
+                 n = __asprintf (&buf, _("%s: unrecognized option '--%s'\n"),
                                  argv[0], d->__nextchar);
 #else
-                 fprintf (stderr, _("%s: unrecognized option `--%s'\n"),
+                 fprintf (stderr, _("%s: unrecognized option '--%s'\n"),
                           argv[0], d->__nextchar);
 #endif
                }
@@ -733,10 +735,10 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                {
                  /* +option or -option */
 #if defined _LIBC && defined USE_IN_LIBIO
-                 n = __asprintf (&buf, _("%s: unrecognized option `%c%s'\n"),
+                 n = __asprintf (&buf, _("%s: unrecognized option '%c%s'\n"),
                                  argv[0], argv[d->optind][0], d->__nextchar);
 #else
-                 fprintf (stderr, _("%s: unrecognized option `%c%s'\n"),
+                 fprintf (stderr, _("%s: unrecognized option '%c%s'\n"),
                           argv[0], argv[d->optind][0], d->__nextchar);
 #endif
                }
@@ -774,7 +776,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
     char c = *d->__nextchar++;
     char *temp = strchr (optstring, c);
 
-    /* Increment `optind' when we start to process its last character.  */
+    /* Increment 'optind' when we start to process its last character.  */
     if (*d->__nextchar == '\0')
       ++d->optind;
 
@@ -889,7 +891,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
            return c;
          }
        else
-         /* We already incremented `d->optind' once;
+         /* We already incremented 'd->optind' once;
             increment it again when taking next ARGV-elt as argument.  */
          d->optarg = argv[d->optind++];
 
@@ -930,7 +932,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
 #if defined _LIBC && defined USE_IN_LIBIO
                char *buf;
 
-               if (__asprintf (&buf, _("%s: option `-W %s' is ambiguous\n"),
+               if (__asprintf (&buf, _("%s: option '-W %s' is ambiguous\n"),
                                argv[0], argv[d->optind]) >= 0)
                  {
                    _IO_flockfile (stderr);
@@ -949,7 +951,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                    free (buf);
                  }
 #else
-               fprintf (stderr, _("%s: option `-W %s' is ambiguous\n"),
+               fprintf (stderr, _("%s: option '-W %s' is ambiguous\n"),
                         argv[0], argv[d->optind]);
 #endif
              }
@@ -974,7 +976,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                        char *buf;
 
                        if (__asprintf (&buf, _("\
-%s: option `-W %s' doesn't allow an argument\n"),
+%s: option '-W %s' doesn't allow an argument\n"),
                                        argv[0], pfound->name) >= 0)
                          {
                            _IO_flockfile (stderr);
@@ -995,7 +997,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                          }
 #else
                        fprintf (stderr, _("\
-%s: option `-W %s' doesn't allow an argument\n"),
+%s: option '-W %s' doesn't allow an argument\n"),
                                 argv[0], pfound->name);
 #endif
                      }
@@ -1016,7 +1018,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                        char *buf;
 
                        if (__asprintf (&buf, _("\
-%s: option `%s' requires an argument\n"),
+%s: option '%s' requires an argument\n"),
                                        argv[0], argv[d->optind - 1]) >= 0)
                          {
                            _IO_flockfile (stderr);
@@ -1037,7 +1039,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                          }
 #else
                        fprintf (stderr,
-                                _("%s: option `%s' requires an argument\n"),
+                                _("%s: option '%s' requires an argument\n"),
                                 argv[0], argv[d->optind - 1]);
 #endif
                      }
@@ -1122,7 +1124,7 @@ _getopt_internal_r (int argc, char **argv, const char *optstring,
                  c = '?';
              }
            else
-             /* We already incremented `optind' once;
+             /* We already incremented 'optind' once;
                 increment it again when taking next ARGV-elt as argument.  */
              d->optarg = argv[d->optind++];
            d->__nextchar = NULL;
@@ -1171,7 +1173,7 @@ getopt (int argc, char *const *argv, const char *optstring)
 #ifdef TEST
 
 /* Compile with -DTEST to make an executable for use in testing
-   the above definition of `getopt'.  */
+   the above definition of 'getopt'.  */
 
 int
 main (int argc, char **argv)
@@ -1214,7 +1216,7 @@ main (int argc, char **argv)
          break;
 
        case 'c':
-         printf ("option c with value `%s'\n", optarg);
+         printf ("option c with value '%s'\n", optarg);
          break;
 
        case '?':
index f31c42f8a8d2fa6c2e16c4762eb9741187465188..0eb8eddcab27bf262972db6519f2a272ea82da6a 100644 (file)
@@ -1,5 +1,5 @@
 /* getopt_long and getopt_long_only entry points for GNU getopt.
-   Copyright (C) 1987-201 Free Software Foundation, Inc.
+   Copyright (C) 1987-2018 Free Software Foundation, Inc.
    This file is part of the GNU C Library.
 
    This program is free software; you can redistribute it and/or modify
@@ -13,7 +13,7 @@
    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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 \f
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -143,11 +143,11 @@ main (int argc, char **argv)
          break;
 
        case 'c':
-         printf ("option c with value `%s'\n", optarg);
+         printf ("option c with value '%s'\n", optarg);
          break;
 
        case 'd':
-         printf ("option d with value `%s'\n", optarg);
+         printf ("option d with value '%s'\n", optarg);
          break;
 
        case '?':
index bed2060e7ba40002f434fbc863ff4d9a34d83a9e..4b1ac6bb22b01c25d2128a6ca75604fa96034619 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2002-201 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg <wl@gnu.org>
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 #include "stringclass.h"
@@ -334,9 +334,9 @@ struct S {
   { "*f", "03D5" },
   { "+p", "03D6" },
   { "+e", "03F5" },
-  // `-' and `hy' denote a HYPHEN, usually a glyph with a smaller width than
+  // '-' and 'hy' denote a HYPHEN, usually a glyph with a smaller width than
   // the MINUS sign.  Users who are viewing broken man pages that assume
-  // that `-' denotes a U+002D character can either fix the broken man pages
+  // that '-' denotes a U+002D character can either fix the broken man pages
   // or apply the workaround described in the PROBLEMS file.
   { "-", "2010" },
   { "hy", "2010" },
@@ -397,8 +397,8 @@ struct S {
   { "product", "220F" },
   { "coproduct", "2210" },
   { "sum", "2211" },
-  // `mi' and `\-' represent a MINUS sign.  But it is used in many man pages
-  // to denote the U+002D character that introduces a command-line option. 
+  // 'mi' and '\-' represent a MINUS sign.  But it is used in many man pages
+  // to denote the U+002D character that introduces a command-line option.
   // For devices that support copy&paste, such as devhtml and devutf8, the
   // user can apply the workaround described in the PROBLEMS file.
   { "\\-", "2212" },
@@ -474,12 +474,6 @@ struct S {
   { "bracerightbt", "23AD" },
   { "an", "23AF" },
   { "br", "2502" },
-  { "rk", "251D" },
-  { "lk", "2525" },
-  { "lt", "256D" },
-  { "rt", "256E" },
-  { "rb", "256F" },
-  { "lb", "2570" },
   { "sq", "25A1" },
   { "lz", "25CA" },
   { "ci", "25CB" },
@@ -490,17 +484,17 @@ struct S {
   { "HE", "2665" },
   { "DI", "2666" },
   { "OK", "2713" },
-  // The `left angle bracket' and `right angle bracket' could be mapped to
+  // The 'left angle bracket' and 'right angle bracket' could be mapped to
   // either U+2329,U+232A or U+3008,U+3009 or U+27E8,U+27E9.  But the first
   // and second possibility are double-width characters (see Unicode's
-  // `DerivedEastAsianWidth.txt' file) and are therefore not suitable for
+  // 'DerivedEastAsianWidth.txt' file) and are therefore not suitable for
   // general use, whereas the third possibility is single-width.
   //
   // The devhtml device overrides this mapping, because
   //
   //   http://www.w3.org/TR/html401/sgml/entities.html
   //
-  // says that in HTML, `&lang;' and `&rang;' are U+2329,U+232A,
+  // says that in HTML, '&lang;' and '&rang;' are U+2329,U+232A,
   // respectively.
   { "la", "27E8" },
   { "ra", "27E9" },
index 4ba9569b56ccd506141ab9700812f952be63947d..065e591c6d442c764141439c5637d90ee295b1ad 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
      Written by Gaius Mulley (gaius@glam.ac.uk)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -33,7 +33,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
  *  the image name and suppression escapes.
  *
  *  pre-html runs troff twice, once with -Thtml (or -Txhtml) and once
- *  with -Tps.  `troff -Thtml' (and `troff -Txhtml') emits a
+ *  with -Tps.  'troff -Thtml' (and 'troff -Txhtml') emits a
  *  <src='image'.png> tag and the postscript device driver works out
  *  the min/max limits of the graphic region.  These region limits are
  *  read by pre-html and an image is generated via
index 2927ce345538a56c5eb5d2f77cdef5913a534fbb..1fa44d466a08777b9362d578d394f75c759595d2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2005-201 Free Software Foundation, Inc.
+/* Copyright (C) 2005-2018 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -12,7 +12,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Library General Public License for more details.
 
 You should have received a copy of the GNU Library General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.  */
+along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -20,10 +20,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.  */
 
 #include <math.h>
 
-#ifdef NEED_DECLARATION_HYPOT
-  double hypot(double, double);
-#endif /* NEED_DECLARATION_HYPOT */
-  
 double groff_hypot(double x, double y)
 {
   double result = hypot(x, y);
index 7f39fa0703facd6b63baa045f4e5c52ed5982fa8..1bd584970d312020689daf8e1dbf814eb3f7fe63 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #define INT_DIGITS 19          /* enough for 64-bit integer */
 
@@ -22,10 +22,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 extern "C" {
 #endif
 
+/* Prototype */
+char *if_to_a(int, int);
+
 char *if_to_a(int i, int decimal_point)
 {
   /* room for a -, INT_DIGITS digits, a decimal point, and a terminating '\0' */
-  static char buf[INT_DIGITS + 3];                     
+  static char buf[INT_DIGITS + 3];
   char *p = buf + INT_DIGITS + 2;
   int point = 0;
   buf[INT_DIGITS + 2] = '\0';
index e9992fdc35f1b920c5298344729d412f9563c065..49926fce858d1956afe491d46db9442573ebf391 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
index fdeca06eb5da53ec370b83d03de2d1f149d75302..3bfe7e45b19cf1d47991b8fd209a95a80033b1e5 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #define INT_DIGITS 19          /* enough for 64 bit integer */
 #define UINT_DIGITS 20
@@ -23,6 +23,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 extern "C" {
 #endif
 
+/* Prototypes */
+char *i_to_a(int);
+char *ui_to_a(unsigned int);
+
 char *i_to_a(int i)
 {
   /* Room for INT_DIGITS digits, - and '\0' */
index b35683bfe3e2a78810847e6ec456a95d96893c58..279011dc674641bce6f38f8ec5a3f5314f246e33 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,13 +15,14 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <ctype.h>
 
 #include "lib.h"
 #include "cset.h"
 #include "stringclass.h"
+#include "lf.h"
 
 extern void change_filename(const char *);
 extern void change_lineno(int);
@@ -60,3 +61,18 @@ int interpret_lf_args(const char *p)
   change_lineno(ln);
   return 1;
 }
+
+#if defined(__MSDOS__) || (defined(_WIN32) && !defined(__CYGWIN__))
+void normalize_for_lf (string &fn)
+{
+  int fnlen = fn.length();
+  for (int i = 0; i < fnlen; i++) {
+    if (fn[i] == '\\')
+      fn[i] = '/';
+  }
+}
+#else
+void normalize_for_lf (string &)
+{
+}
+#endif
diff --git a/src/libs/libgroff/libgroff.am b/src/libs/libgroff/libgroff.am
new file mode 100644 (file)
index 0000000..7e191e1
--- /dev/null
@@ -0,0 +1,180 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+libgroff_srcdir = $(top_srcdir)/src/libs/libgroff
+noinst_LIBRARIES += libgroff.a
+libgroff_a_CPPFLAGS = \
+  $(AM_CPPFLAGS) \
+  -D__GETOPT_PREFIX=groff_ \
+  -DENABLE_RELOCATABLE=1 \
+  -DLIBDIR=\"$(libdir)\"
+
+# Build from OBJS
+libgroff_a_SOURCES = \
+  src/libs/libgroff/assert.cpp \
+  src/libs/libgroff/change_lf.cpp \
+  src/libs/libgroff/cmap.cpp \
+  src/libs/libgroff/color.cpp \
+  src/libs/libgroff/cset.cpp\
+  src/libs/libgroff/curtime.cpp \
+  src/libs/libgroff/device.cpp \
+  src/libs/libgroff/errarg.cpp \
+  src/libs/libgroff/error.cpp \
+  src/libs/libgroff/fatal.cpp \
+  src/libs/libgroff/filename.cpp \
+  src/libs/libgroff/font.cpp \
+  src/libs/libgroff/fontfile.cpp \
+  src/libs/libgroff/geometry.cpp \
+  src/libs/libgroff/getopt.c \
+  src/libs/libgroff/getopt1.c \
+  src/libs/libgroff/glyphuni.cpp \
+  src/libs/libgroff/htmlhint.cpp \
+  src/libs/libgroff/hypot.cpp \
+  src/libs/libgroff/iftoa.c \
+  src/libs/libgroff/invalid.cpp \
+  src/libs/libgroff/itoa.c \
+  src/libs/libgroff/lf.cpp \
+  src/libs/libgroff/lineno.cpp \
+  src/libs/libgroff/localcharset.c \
+  src/libs/libgroff/macropath.cpp \
+  src/libs/libgroff/matherr.c \
+  src/libs/libgroff/maxfilename.cpp \
+  src/libs/libgroff/maxpathname.cpp \
+  src/libs/libgroff/mksdir.cpp \
+  src/libs/libgroff/nametoindex.cpp \
+  src/libs/libgroff/new.cpp \
+  src/libs/libgroff/paper.cpp \
+  src/libs/libgroff/prime.cpp \
+  src/libs/libgroff/progname.c \
+  src/libs/libgroff/ptable.cpp \
+  src/libs/libgroff/quotearg.c \
+  src/libs/libgroff/relocate.cpp \
+  src/libs/libgroff/searchpath.cpp \
+  src/libs/libgroff/spawnvp.c \
+  src/libs/libgroff/string.cpp \
+  src/libs/libgroff/strsave.cpp \
+  src/libs/libgroff/symbol.cpp \
+  src/libs/libgroff/tmpfile.cpp \
+  src/libs/libgroff/tmpname.cpp \
+  src/libs/libgroff/unicode.cpp \
+  src/libs/libgroff/uniglyph.cpp \
+  src/libs/libgroff/uniuni.cpp \
+  src/libs/libgroff/relocatable.h
+nodist_libgroff_a_SOURCES = src/libs/libgroff/version.cpp
+
+# TODO: these .c files could be removed (use gnulib instead).
+EXTRA_DIST += \
+  src/libs/libgroff/mkstemp.cpp \
+  src/libs/libgroff/fmod.c \
+  src/libs/libgroff/getcwd.c \
+  src/libs/libgroff/putenv.c \
+  src/libs/libgroff/strcasecmp.c \
+  src/libs/libgroff/strerror.c \
+  src/libs/libgroff/strncasecmp.c \
+  src/libs/libgroff/strtol.c \
+  src/libs/libgroff/config.charset \
+  src/libs/libgroff/ref-add.sin \
+  src/libs/libgroff/ref-del.sin \
+  src/libs/libgroff/make-uniuni
+
+CLEANFILES += \
+  src/libs/libgroff/version.cpp \
+  charset.alias \
+  ref-add.sed \
+  ref-del.sed
+
+# .o files have a 'libgroff_a-' prefix because we set libgroff_a_CPPFLAGS
+src/libs/libgroff/libgroff_a-device.$(OBJEXT): defs.h
+src/libs/libgroff/libgroff_a-fontfile.$(OBJEXT): defs.h
+src/libs/libgroff/libgroff_a-macropath.$(OBJEXT): defs.h
+src/libs/libgroff/libgroff_a-relocate.$(OBJEXT): defs.h
+
+src/libs/libgroff/version.cpp: $(top_srcdir)/.version
+       @echo Making version.cpp
+       @echo const char \*version_string = \"$(MAJOR_VERSION).$(MINOR_VERSION)\"\; >$@
+       @echo const char \*revision_string = \"$(REVISION)\"\; >>$@
+       @echo extern \"C\" { >>$@
+       @echo const char \*Version_string = \"$(VERSION)\"\; >>$@
+       @echo } >>$@ \
+         | sed -e 's/\.0\"/\"/' >>$@
+
+# Data for localcharset.c.  Taken from libiconv/libcharset.
+
+LIBGROFF_PACKAGE = groff
+
+all: charset.alias ref-add.sed ref-del.sed
+
+charset.alias: $(libgroff_srcdir)/config.charset
+       $(SHELL) $(libgroff_srcdir)/config.charset '$(HOST)' > t-$@
+       mv t-$@ $@
+
+ref-add.sed : $(libgroff_srcdir)/ref-add.sin
+       sed -e '/^#/d' \
+           -e 's/@''PACKAGE''@/$(LIBGROFF_PACKAGE)/g' $(libgroff_srcdir)/ref-add.sin > t-$@
+       mv t-$@ $@
+
+ref-del.sed : $(libgroff_srcdir)/ref-del.sin
+       sed -e '/^#/d' \
+           -e 's/@''PACKAGE''@/$(LIBGROFF_PACKAGE)/g' $(libgroff_srcdir)/ref-del.sin > t-$@
+       mv t-$@ $@
+
+install-data-local: install_charset_data
+install_charset_data:
+       -test $(GLIBC21) != no || $(mkinstalldirs) $(DESTDIR)$(libdir)
+       if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+         sed -f ref-add.sed $(DESTDIR)$(libdir)/charset.alias \
+           > $(DESTDIR)$(libdir)/t-charset.alias; \
+         $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
+           $(DESTDIR)$(libdir)/charset.alias; \
+         rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
+       else \
+         if test $(GLIBC21) = no; then \
+           sed -f ref-add.sed charset.alias \
+             > $(DESTDIR)$(libdir)/t-charset.alias; \
+           $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
+             $(DESTDIR)$(libdir)/charset.alias; \
+           rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
+         fi; \
+       fi
+
+uninstall-local: uninstall_charset_data
+uninstall_charset_data:
+       -if test -f $(DESTDIR)$(libdir)/charset.alias; then \
+         sed -f ref-del.sed $(DESTDIR)$(libdir)/charset.alias \
+           > $(DESTDIR)$(libdir)/t-charset.alias; \
+         if grep '^# Packages using this file: $$' \
+                 $(DESTDIR)$(libdir)/t-charset.alias > /dev/null; then \
+           rm -f $(DESTDIR)$(libdir)/charset.alias; \
+         else \
+           $(INSTALL_DATA) $(DESTDIR)$(libdir)/t-charset.alias \
+             $(DESTDIR)$(libdir)/charset.alias; \
+         fi; \
+         rm -f $(DESTDIR)$(libdir)/t-charset.alias; \
+       fi
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index bb741c197795884d3f61d3e5073111f1ff6c17c5..8e1e4fcc0cdfcef20b0fa8c0242cc653c3e93a47 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014  Free Software Foundation, Inc.
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 This file is part of groff.
 
index 1c17af0eac74be118ad18c3ce157673e255d2860..4322ca5aa56ba850ad966d9e77e30853fc276457 100644 (file)
@@ -1,6 +1,6 @@
 /* Determine a canonical name for the current locale's character encoding.
 
-   Copyright (C) 2000-2006, 2008-2014 Free Software Foundation, Inc.
+   Copyright (C) 2000-2018 Free Software Foundation, Inc.
 
    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
index 373125223ea6ce3a3438b6922a8f3f683d40d89b..5cd24e1a6a0fe95effee7f3f88d9e6b7db69b356 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 #include "searchpath.h"
index a2721826d13bb81c4eb17087435c041dd3200498..c81e61af65fb36ca9277753e744451ea2c82d858 100755 (executable)
@@ -2,7 +2,7 @@
 #
 # make-uniuni -- script for creating the file uniuni.cpp
 #
-# Copyright (C) 2005-201 Free Software Foundation, Inc.
+# Copyright (C) 2005-2018 Free Software Foundation, Inc.
 #      Written by Werner Lemberg <wl@gnu.org>
 #
 # This file is part of groff.
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #
 # usage:
 #
 #   make-uniuni <version-string> < UnicodeData.txt > uniuni.cpp
 #
-# `UnicodeData.txt' is the central database file from the Unicode standard.
+# 'UnicodeData.txt' is the central database file from the Unicode standard.
 # Unfortunately, it doesn't contain a version number which must be thus
 # provided manually as a parameter to the filter.
 #
@@ -74,8 +74,7 @@ cat $$3 \
 # Write preamble.
 cat <<END
 // -*- C++ -*-
-/* Copyright (C) 2002, 2003, 2004, 2005
-   Free Software Foundation, Inc.
+/* Copyright (C) 2002-2014  Free Software Foundation, Inc.
      Written by Werner Lemberg <wl@gnu.org>
 
 This file is part of groff.
@@ -91,7 +90,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 // This code has been algorithmically derived from the file
 // UnicodeData.txt, version $version_string, available from unicode.org,
index e9f5c2c30cb431ef31610adb99b0412eeb97e871..1c48771d9893a7af27cd15d1a78d1d63d818746a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
index 3162fabff6a5bf3cc86f235e3b640da506b32b5e..777f82c185ddd0158b82577dcaa053ed44cba189 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1992-201 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /* file_name_max(dir) does the same as pathconf(dir, _PC_NAME_MAX) */
 
index ee58cc2b0e3c9b2c5011f4dd0bf9fca69efcdbf8..ca5312332a1c14a5f6f6475aa927882c6f5ff113 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2005-201 Free Software Foundation, Inc.
+/* Copyright (C) 2005-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg (wl@gnu.org)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /* path_name_max(dir) does the same as pathconf(dir, _PC_PATH_MAX) */
 
index f466a05b0454028d76f2b3de59c151f7f2fbba14..5b60744568036859dae589da60838af15063fe97 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-201 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg (wl@gnu.org)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 /* This file is heavily based on the file mkstemp.c which is part of the
index 30615fe69babac786990f7e8403bb07a1691beb7..e867f8e6e94ad5d572a04655d7b5525d20dd3424 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-2014 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg (wl@gnu.org)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 /* This file is heavily based on the file mkstemp.c which is part of the
index 3a495c75c08b987bb3e71a54bd1235ea49b72837..7708610ae847d99c3beb61a3dc77c5bcd639d24f 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -35,11 +35,11 @@ public:
   friend class character_indexer;
 };
 
-// PTABLE(charinfo) is a hash table mapping `const char *' to `charinfo *'.
+// PTABLE(charinfo) is a hash table mapping 'const char *' to 'charinfo *'.
 declare_ptable(charinfo)
 implement_ptable(charinfo)
 
-// ITABLE(charinfo) is a hash table mapping `int >= 0' to `charinfo *'.
+// ITABLE(charinfo) is a hash table mapping 'int >= 0' to 'charinfo *'.
 declare_itable(charinfo)
 implement_itable(charinfo)
 
@@ -95,7 +95,7 @@ glyph *character_indexer::ascii_char_glyph(unsigned char c)
 
 inline glyph *character_indexer::named_char_glyph(const char *s)
 {
-  // Glyphs with name `charNNN' are only stored in ascii_glyph[], not
+  // Glyphs with name 'charNNN' are only stored in ascii_glyph[], not
   // in the table.  Therefore treat them specially here.
   if (s[0] == 'c' && s[1] == 'h' && s[2] == 'a' && s[3] == 'r') {
     char *val;
index 74a5dc2ba48594e9a550385b9e62ec67b567d933..74f1d27168b30925f033ed8c9c02a5640a843439 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -67,3 +67,22 @@ void operator delete(void *p)
     free(p);
 #endif /* COOKIE_BUG */
 }
+
+void operator delete(void *p,
+                    __attribute__((__unused__)) long unsigned int size)
+{
+  // It's ugly to duplicate the code from delete(void *) above, but if
+  // we don't, g++ 6.3 can't figure out we're calling through it to
+  // free().
+  //
+  // In function 'void operator delete(void*, long unsigned int)':
+  //   warning: deleting 'void*' is undefined [-Wdelete-incomplete]
+  //delete p;
+#ifdef COOKIE_BUG
+  if (p)
+    free((void *)((char *)p - 8));
+#else
+  if (p)
+    free(p);
+#endif /* COOKIE_BUG */
+}
index ecfdfdabe8f42745ae136b2edfd4b22e3137e921..4c90e7d8f6be7c817b1d4673ea2fc212f7608181 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2002-201 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg (wl@gnu.org)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 #include "paper.h"
index a19a8ae38f9f243391d172533402371a3b8ab648..c75d45aa46007eda8704b15e8a384ec7aa525e63 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014  Free Software Foundation, Inc.
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 This file is part of groff.
 
@@ -15,6 +15,9 @@ for more details.
 The GNU General Public License version 2 (GPL2) is available in the
 internet at <http://www.gnu.org/licenses/gpl-2.0.txt>. */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
 #include <math.h>
 
 int is_prime(unsigned n)
index 1d6e2fd7015a8cf35e4b1b9a3cd4cb4cd1f5da88..34d320a19438c84272a2befa1f67830f3a4a39ea 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014  Free Software Foundation, Inc.
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 This file is part of groff.
 
index 97cabcb2f08cc2408f205b9b7b050149405a4c88..06d5550fafe85b9bfe588680a58d9109c11db20f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "ptable.h"
 #include "errarg.h"
index 86e3786e4cb9319b45c62e47bd9442bcdbef85f1..9fbd8ef5d35e68c109618e52aad50ef88433c7ee 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1991-201 Free Software Foundation, Inc.
+/* Copyright (C) 1991-2018 Free Software Foundation, Inc.
 This file is part of the GNU C Library.
 
 The GNU C Library is free software; you can redistribute it and/or
@@ -12,7 +12,7 @@ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 Library General Public License for more details.
 
 You should have received a copy of the GNU Library General Public License
-along with this program. If not, see <http://www.gnu.org/licenses/>.  */
+along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 /* Hacked slightly by jjc@jclark.com for groff. */
 
@@ -43,7 +43,7 @@ PTR malloc();
 
 extern char **environ;
 
-/* Put STRING, which is of the form `NAME=VALUE', in the environment.  */
+/* Put STRING, which is of the form 'NAME=VALUE', in the environment.  */
 
 int putenv(const char *string)
 {
index 535fce93cc17e7730cb60d9ffbe79dde83143bb1..afef93f0bb486673abe1be216ceaf1d1a72fa2c1 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004-201 Free Software Foundation, Inc.
+/* Copyright (C) 2004-2018 Free Software Foundation, Inc.
      Written by:  Jeff Conrad    (jeff_conrad@msn.com)
        and        Keith Marshall (keith.d.marshall@ntlworld.com)
 
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <stdio.h>
 #include <stdlib.h>
@@ -26,7 +26,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 /* Define the default mechanism, and messages, for error reporting
  * (user may substitute a preferred alternative, by defining his own
  *  implementation of the macros REPORT_ERROR, QUOTE_ARG_MALLOC_FAILED
- *  and QUOTE_ARG_REALLOC_FAILED, in the header file `nonposix.h').
+ *  and QUOTE_ARG_REALLOC_FAILED, in the header file 'nonposix.h').
  */
 
 #include "nonposix.h"
@@ -43,6 +43,10 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 
 extern char *program_name;     /* main program must define this */
 
+/* Prototypes */
+char *quote_arg(char *);
+void purge_quoted_args(char **);
+
 #undef FALSE
 #undef TRUE
 #define FALSE 0
@@ -51,7 +55,7 @@ extern char *program_name;    /* main program must define this */
 static int
 needs_quoting(const char *string)
 {
-  /* Scan `string' to see whether it needs quoting for MSVC `spawn'/`exec'
+  /* Scan 'string' to see whether it needs quoting for MSVC 'spawn'/'exec'
    * (i.e., whether it contains whitespace or embedded quotes).
    */
 
@@ -75,7 +79,7 @@ needs_quoting(const char *string)
   }
 
   /* Fall through, if no quotes or white space found,
-   * in which case, return `FALSE'.
+   * in which case, return 'FALSE'.
    */
 
   return FALSE;
@@ -93,11 +97,11 @@ quote_arg(char *string)
   char *quoted, *p, *q;
 
   if (needs_quoting(string)) {
-    /* Need to create a quoted copy of `string';
+    /* Need to create a quoted copy of 'string';
      * maximum buffer space needed is twice the original length,
-     * plus two enclosing quotes and one `\0' terminator.
+     * plus two enclosing quotes and one '\0' terminator.
      */
-    
+
     if ((quoted = (char *)malloc(2 * strlen(string) + 3)) == NULL) {
       /* Couldn't get a buffer for the quoted string,
        * so complain, and bail out gracefully.
@@ -177,7 +181,7 @@ quote_arg(char *string)
     }
   }
 
-  /* `string' now refers to the argument,
+  /* 'string' now refers to the argument,
    * quoted and escaped, as required.
    */
 
@@ -188,16 +192,16 @@ void
 purge_quoted_args(char **argv)
 {
   /* To avoid memory leaks,
-   * free all memory previously allocated by `quoted_arg()',
-   * within the scope of the referring argument vector, `argv'.
+   * free all memory previously allocated by 'quoted_arg()',
+   * within the scope of the referring argument vector, 'argv'.
    */
 
   if (argv)
     while (*argv) {
       /* Any argument beginning with a double quote
-       * SHOULD have been allocated by `quoted_arg()'.
+       * SHOULD have been allocated by 'quoted_arg()'.
        */
-      
+
       if (**argv == '"')
         free( *argv );         /* so free its allocation */
       ++argv;                  /* and continue to the next argument */
index 4379dfed696ce0b786f1881da78bb2ec29c16a9b..0f5f20b9fd7f1150260f660594b4ad9f2cc0606e 100644 (file)
@@ -1,6 +1,6 @@
 # Add this package to a list of references stored in a text file.
 #
-#   Copyright (C) 2000, 2009-2014 Free Software Foundation, Inc.
+#   Copyright (C) 2000-2018 Free Software Foundation, Inc.
 #
 #   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
index d36b1258bdccde503131e9a0d1fc32a760d96be8..48551142bc5dd5f0c77ec51c4d496308a3b79d87 100644 (file)
@@ -1,6 +1,6 @@
 # Remove this package from a list of references stored in a text file.
 #
-#   Copyright (C) 2000, 2009-2014 Free Software Foundation, Inc.
+#   Copyright (C) 2000-2018 Free Software Foundation, Inc.
 #
 #   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
index 8280809a6f1681b0d447ce6d28839be9da0ff4e0..2207fcb5817ea89b40bbd26a5477d0a392ac5fbe 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014  Free Software Foundation, Inc.
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 This file is part of groff.
 
index ead2d6bd5c55f951b2bb7cc774098c6baed09fc4..4273e5ae1ad7a048f305b9802cafdc9ab2e48489 100644 (file)
@@ -1,6 +1,6 @@
 // -*- C++ -*-
 /* Provide relocation for macro and font files.
-   Copyright (C) 2005-201 Free Software Foundation, Inc.
+   Copyright (C) 2005-2018 Free Software Foundation, Inc.
 
    This program is free software; you can redistribute it and/or modify it
    under the terms of the GNU Library General Public License as published
@@ -13,7 +13,7 @@
    Library General Public License for more details.
 
    You should have received a copy of the GNU Library General Public License
-   along with this program. If not, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 // Made after relocation code in kpathsea and gettext.
 
@@ -43,7 +43,7 @@ extern "C" const char *program_name;
 char *curr_prefix = 0;
 size_t curr_prefix_len = 0;
 
-// Return the directory part of a filename, or `.' if no path separators.
+// Return the directory part of a filename, or '.' if no path separators.
 char *xdirname(char *s)
 {
   static const char dot[] = ".";
@@ -75,8 +75,8 @@ char *searchpath(const char *name, const char *pathp)
   if (!name || !*name)
     return 0;
 #if DEBUG
-  fprintf(stderr, "searchpath: pathp: `%s'\n", pathp);
-  fprintf(stderr, "searchpath: trying `%s'\n", name);
+  fprintf(stderr, "searchpath: pathp: '%s'\n", pathp);
+  fprintf(stderr, "searchpath: trying '%s'\n", name);
 #endif
   // Try first NAME as such; success if NAME is an absolute filename,
   // or if NAME is found in the current directory.
@@ -88,7 +88,7 @@ char *searchpath(const char *name, const char *pathp)
     path = realpath(name, path);
 #endif
 #if DEBUG
-    fprintf(stderr, "searchpath: found `%s'\n", path);
+    fprintf(stderr, "searchpath: found '%s'\n", path);
 #endif
     return path;
   }
@@ -107,11 +107,11 @@ char *searchpath(const char *name, const char *pathp)
       path[end - p] = '/';
     strcpy(path + (end - p) + need_slash, name);
 #if DEBUG
-    fprintf(stderr, "searchpath: trying `%s'\n", path);
+    fprintf(stderr, "searchpath: trying '%s'\n", path);
 #endif
     if (!access(path, F_OK)) {
 #if DEBUG
-      fprintf(stderr, "searchpath: found `%s'\n", name);
+      fprintf(stderr, "searchpath: found '%s'\n", name);
 #endif
       return path;
     }
index f9efe111a3f8017d70d0c0b42af24bdba271500c..18a5c4eb09a141b6b60965c9d716a3cb76154726 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -118,22 +118,22 @@ FILE *search_path::open_file(const char *name, char **pathp)
       origpath[end - p] = '/';
     strcpy(origpath + (end - p) + need_slash, name);
 #if 0
-    fprintf(stderr, "origpath `%s'\n", origpath);
+    fprintf(stderr, "origpath '%s'\n", origpath);
 #endif
     char *path = relocate(origpath);
     a_delete origpath;
 #if 0
-    fprintf(stderr, "trying `%s'\n", path);
+    fprintf(stderr, "trying '%s'\n", path);
 #endif
     FILE *fp = fopen(path, "r");
     if (fp) {
       if (pathp)
        *pathp = path;
       else
-       a_delete path;
+       free(path);
       return fp;
     }
-    a_delete path;
+    free(path);
     if (*end == '\0')
       break;
     p = end + 1;
@@ -175,23 +175,23 @@ FILE *search_path::open_file_cautious(const char *name, char **pathp,
       origpath[end - p] = '/';
     strcpy(origpath + (end - p) + need_slash, name);
 #if 0
-    fprintf(stderr, "origpath `%s'\n", origpath);
+    fprintf(stderr, "origpath '%s'\n", origpath);
 #endif
     char *path = relocate(origpath);
     a_delete origpath;
 #if 0
-    fprintf(stderr, "trying `%s'\n", path);
+    fprintf(stderr, "trying '%s'\n", path);
 #endif
     FILE *fp = fopen(path, mode);
     if (fp) {
       if (pathp)
        *pathp = path;
       else
-       a_delete path;
+       free(path);
       return fp;
     }
     int err = errno;
-    a_delete path;
+    free(path);
     if (err != ENOENT)
     {
       errno = err;
index 0cc6fb182536858e26bd3cbaf1d8c1a8c18bef35..902d03db0a30069620ef5560337fa3d1cc41581f 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2004-201 Free Software Foundation, Inc.
+/* Copyright (C) 2004-2018 Free Software Foundation, Inc.
      Written by: Keith Marshall (keith.d.marshall@ntlworld.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifdef HAVE_CONFIG_H
 # include "config.h"
@@ -36,7 +36,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 /* Define the default mechanism, and messages, for error reporting
  * (user may substitute a preferred alternative, by defining his own
  *  implementation of the macros REPORT_ERROR and ARGV_MALLOC_ERROR,
- *  in the header file `nonposix.h').
+ *  in the header file 'nonposix.h').
  */
 
 #include "nonposix.h"
@@ -56,19 +56,19 @@ extern void purge_quoted_args(char **argv);
 int
 spawnvp_wrapper(int mode, char *path, char **argv)
 {
-  /* Invoke the system `spawnvp' service
+  /* Invoke the system 'spawnvp' service
    * enclosing the passed arguments in double quotes, as required,
    * so that the (broken) default parsing in the MSVC runtime doesn't
    * split them at whitespace. */
 
-  char **quoted_argv;  /* used to build a quoted local copy of `argv' */
+  char **quoted_argv;  /* used to build a quoted local copy of 'argv' */
 
-  int i;               /* used as an index into `argv' or `quoted_argv' */
+  int i;               /* used as an index into 'argv' or 'quoted_argv' */
   int status = -1;     /* initialise return code, in case we fail */
   int argc = 0;                /* initialise argument count; may be none  */
 
   /* First count the number of arguments
-   * which are actually present in the passed `argv'. */
+   * which are actually present in the passed 'argv'. */
 
   if (argv)
     for (quoted_argv = argv; *quoted_argv; ++argc, ++quoted_argv)
@@ -76,10 +76,10 @@ spawnvp_wrapper(int mode, char *path, char **argv)
 
   /* If we do not now have an argument count,
    * then we must fall through and fail. */
-  
+
   if (argc) {
     /* We do have at least one argument:
-     * We will use a copy of the `argv', in which to do the quoting,
+     * We will use a copy of the 'argv', in which to do the quoting,
      * so we must allocate space for it. */
 
     if ((quoted_argv = (char **)malloc(++argc * sizeof(char **))) == NULL) {
@@ -90,26 +90,26 @@ spawnvp_wrapper(int mode, char *path, char **argv)
       exit(1);
     }
 
-    /* Now copy the passed `argv' into our new vector,
+    /* Now copy the passed 'argv' into our new vector,
      * quoting its contents as required. */
-    
+
     for (i = 0; i < argc; i++)
       quoted_argv[i] = quote_arg(argv[i]);
 
-    /* Invoke the MSVC `spawnvp' service
-     * passing our now appropriately quoted copy of `argv'. */
+    /* Invoke the MSVC 'spawnvp' service
+     * passing our now appropriately quoted copy of 'argv'. */
 
     status = spawnvp(mode, path, quoted_argv);
 
     /* Clean up our memory allocations
-     * for the quoted copy of `argv', which is no longer required. */
+     * for the quoted copy of 'argv', which is no longer required. */
 
     purge_quoted_args(quoted_argv);
     free(quoted_argv);
   }
 
   /* Finally,
-   * return the status code returned by `spawnvp',
+   * return the status code returned by 'spawnvp',
    * or a failure code if we fell through. */
 
   return status;
index 4eb99bef26f180e667ce552ee442b9d1f3329da1..2d99f4fb615c77099bb16da44092a91a213165fb 100644 (file)
@@ -1,5 +1,5 @@
 /* strcasecmp.c -- case insensitive string comparator
-   Copyright (C) 1998-201 Free Software Foundation, Inc.
+   Copyright (C) 1998-2018 Free Software Foundation, Inc.
 
    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
@@ -12,7 +12,7 @@
    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, see <http://www.gnu.org/licenses/>.  */
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
 
 #if HAVE_CONFIG_H
 # include <config.h>
index c62d5a4aa01b7b4977ac4136ca046982fb751989..b6e946845abe8796cffb1ea1d0442b580c03861a 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
index da3b2dc2fa6ca0728f38b22ada7ef362346b3014..46c015c0490ca97ab4975eb09a1298535ed8cbc2 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,9 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
 
 #include "lib.h"
 
@@ -98,7 +100,8 @@ string::string(const char *p)
   else {
     len = strlen(p);
     ptr = salloc(len, &sz);
-    memcpy(ptr, p, len);
+    if (len != 0)
+      memcpy(ptr, p, len);
   }
 }
 
@@ -141,7 +144,8 @@ string &string::operator=(const char *p)
     int slen = strlen(p);
     ptr = sfree_alloc(ptr, sz, slen, &sz);
     len = slen;
-    memcpy(ptr, p, len);
+    if (len != 0)
+      memcpy(ptr, p, len);
   }
   return *this;
 }
@@ -284,7 +288,7 @@ char *string::extract() const
   for (i = 0; i < n; i++)
     if (p[i] == '\0')
       nnuls++;
-  char *q = new char[n + 1 - nnuls];
+  char *q =(char*)malloc(n + 1 - nnuls);
   char *r = q;
   for (i = 0; i < n; i++)
     if (p[i] != '\0')
index 2ee553ffba474ab07b647c190ede423b965c2dc0..19046a8635e5613d59a2c30d10b75bdba40adcc3 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014  Free Software Foundation, Inc.
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 This file is part of groff.
 
index b8b69ccdcbf2c72c08b53cd40797a6a4d1cae04c..f95c05e5e7c53a04334be0892b2e5baa0c9860da 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,15 +15,16 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <string.h>
+#include <stdlib.h>
 
 char *strsave(const char *s)
 {
   if (s == 0)
     return 0;
-  char *p = new char[strlen(s) + 1];
+  char *p = (char*)malloc(strlen(s) + 1);
   strcpy(p, s);
   return p;
 }
index 78bab703deb0e4b1fb5a36c3c32fd96280cae8d2..9928a228d8fd55697144d5877820d7beb69a1a05 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
index b298d3d8b22332e0481dc9946f47545ae3f104cb..6ce943d8ecb180bca05e09d371e8fe895496594c 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
index 07ecf2e15e5eff0e1babda597d15cfe85e3189e6..19285c4c8289b94ae53eadfeebc07700d99f75bb 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -146,7 +146,7 @@ xtmpfile_list_init::~xtmpfile_list_init()
   xtmpfile_list *x = xtmpfiles_to_delete;
   while (x != 0) {
     if (unlink(x->fname) < 0)
-      error("cannot unlink `%1': %2", x->fname, strerror(errno));
+      error("cannot unlink '%1': %2", x->fname, strerror(errno));
     xtmpfile_list *tmp = x;
     x = x->next;
     a_delete tmp->fname;
index 0a6a1e507c1cc64edd7cb93b1583eee7ba5f946f..c78400139e236b0a507176da95af2996ae8d86d8 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2001-201 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg (wl@gnu.org)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 /* This file is heavily based on the function __gen_tempname() in the
index 366982ec21aaea921cbd5a8de0a322b18cd4dda1..784c0b5f8e237a6eb126d263fb965ae21966cf7e 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2002-201 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg <wl@gnu.org>
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 #include "cset.h"
index 7c6708fa827c005ae7a7ddbc40e75d5fe9a1b85a..911f4c820c1b732030389a965b72e899c2884d9a 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2002-201 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg <wl@gnu.org>
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 #include "stringclass.h"
@@ -229,7 +229,7 @@ struct S {
   { "00AC", "no" },
 //{ "00AC", "tno" },
   // In groff, U+00AD is an input character only; it is not mapped to
-  // a glyph but to `\%'.
+  // a glyph but to '\%'.
   { "00AE", "rg" },
   { "00AF", "a-" },
   { "00B0", "de" },
@@ -460,12 +460,6 @@ struct S {
 //{ "23AD", "bracerightbt" },
   { "23AF", "an" },
   { "2502", "br" },
-  { "251D", "rk" },
-  { "2525", "lk" },
-  { "256D", "lt" },
-  { "256E", "rt" },
-  { "256F", "rb" },
-  { "2570", "lb" },
   { "25A1", "sq" },
   { "25CA", "lz" },
   { "25CB", "ci" },
index 7991139ebfa64be2298e49702c07e78cec9e0c54..165435549d5eb2962977430032eb037f9a2ee41c 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2002-201 Free Software Foundation, Inc.
+/* Copyright (C) 2002-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg <wl@gnu.org>
 
 This file is part of groff.
@@ -15,11 +15,11 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 // This code has been algorithmically derived from the file
-// UnicodeData.txt, version 4.1.0, available from unicode.org,
-// on 2005-12-09.
+// UnicodeData.txt, version 7.0.0, available from unicode.org,
+// on 2014-12-16.
 
 #include "lib.h"
 #include "stringclass.h"
@@ -446,6 +446,17 @@ struct S {
   { "0FAC", "20FAB_0FB7" },
   { "0FB9", "20F90_0FB5" },
   { "1026", "21025_102E" },
+  { "1B06", "21B05_1B35" },
+  { "1B08", "21B07_1B35" },
+  { "1B0A", "21B09_1B35" },
+  { "1B0C", "21B0B_1B35" },
+  { "1B0E", "21B0D_1B35" },
+  { "1B12", "21B11_1B35" },
+  { "1B3B", "21B3A_1B35" },
+  { "1B3D", "21B3C_1B35" },
+  { "1B40", "21B3E_1B35" },
+  { "1B41", "21B3F_1B35" },
+  { "1B43", "21B42_1B35" },
   { "1E00", "20041_0325" },
   { "1E01", "20061_0325" },
   { "1E02", "20042_0307" },
@@ -1320,6 +1331,8 @@ struct S {
   { "FA2B", "198FC" },
   { "FA2C", "19928" },
   { "FA2D", "19DB4" },
+  { "FA2E", "190DE" },
+  { "FA2F", "196B7" },
   { "FA30", "14FAE" },
   { "FA31", "150E7" },
   { "FA32", "1514D" },
@@ -1379,6 +1392,9 @@ struct S {
   { "FA68", "196E3" },
   { "FA69", "197FF" },
   { "FA6A", "1983B" },
+  { "FA6B", "16075" },
+  { "FA6C", "1242EE" },
+  { "FA6D", "18218" },
   { "FA70", "14E26" },
   { "FA71", "151B5" },
   { "FA72", "15168" },
@@ -1519,6 +1535,18 @@ struct S {
   { "FB4C", "205D1_05BF" },
   { "FB4D", "205DB_05BF" },
   { "FB4E", "205E4_05BF" },
+  { "1109A", "211099_110BA" },
+  { "1109C", "21109B_110BA" },
+  { "110AB", "2110A5_110BA" },
+  { "1112E", "211131_11127" },
+  { "1112F", "211132_11127" },
+  { "1134B", "211347_1133E" },
+  { "1134C", "211347_11357" },
+  { "114BB", "2114B9_114BA" },
+  { "114BC", "2114B9_114B0" },
+  { "114BE", "2114B9_114BD" },
+  { "115BA", "2115B8_115AF" },
+  { "115BB", "2115B9_115AF" },
   { "1D15E", "21D157_1D165" },
   { "1D15F", "21D158_1D165" },
   { "1D160", "31D158_1D165_1D16E" },
index 3891763fda01da4ca2988a081751688d3d170855..26cffa7f88081b3f26cbd5e4a2c7782e59082024 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014  Free Software Foundation, Inc.
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 This file is part of groff.
 
@@ -401,7 +401,8 @@ static DviCharNameMap ISO8859_1_map = {
 {      "'y",                   /* 253 */},
 {      "Tp",                   /* 254 */},
 {      ":y",                   /* 255 */},
-}};
+},
+       {0} /* buckets */};
 
 static DviCharNameMap Adobe_Symbol_map = {
        "adobe-fontspecific",
@@ -663,7 +664,8 @@ static DviCharNameMap Adobe_Symbol_map = {
 {      "bracerightmid", "rk",                          /* 253 */},
 {      "bracerightbt", "rb",                           /* 254 */},
 {      0,                                              /* 255 */},
-}};
+},
+       {0} /* buckets */};
 
 
 static void
diff --git a/src/libs/libxutil/Makefile.sub b/src/libs/libxutil/Makefile.sub
deleted file mode 100644 (file)
index df8eb02..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# Makefile.sub for `libxutil'
-#
-# File position: <groff-source>/src/libs/libxutil/Makefile.sub
-#
-# Copyright (C) 2014 Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-LIB=xutil
-EXTRA_CFLAGS=$(X_CFLAGS)
-OBJS=\
-  DviChar.$(OBJEXT) \
-  XFontName.$(OBJEXT) \
-  xmalloc.$(OBJEXT)
-CSRCS=\
-  $(srcdir)/DviChar.c \
-  $(srcdir)/XFontName.c \
-  $(srcdir)/xmalloc.c
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index d3c509b6f3811bef18a3bc310f1404c57e27879a..9ac4f970c19a092d36c48d8090bb73c60f7b58b2 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014  Free Software Foundation, Inc.
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 This file is part of groff.
 
diff --git a/src/libs/libxutil/libxutil.am b/src/libs/libxutil/libxutil.am
new file mode 100644 (file)
index 0000000..8ebad5c
--- /dev/null
@@ -0,0 +1,43 @@
+# Automake rules for 'libxutil'
+#
+# File position: <groff-source>/src/libs/libxutil/libxutil.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+if !WITHOUT_X11
+noinst_LIBRARIES += libxutil.a
+libxutil_a_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS)
+libxutil_a_SOURCES = \
+  src/libs/libxutil/DviChar.c \
+  src/libs/libxutil/XFontName.c \
+  src/libs/libxutil/xmalloc.c
+endif
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 9ccebe40aa315e421a87caa03fb15eb14a61203d..5550acc0384406d98b1b65ab2019f0d85b4521c9 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014  Free Software Foundation, Inc.
+/* Copyright (C) 2014-2018 Free Software Foundation, Inc.
 
 This file is part of groff.
 
@@ -18,6 +18,8 @@ internet at <http://www.gnu.org/licenses/gpl-2.0.txt>. */
 #include <X11/Xlib.h>
 #include <X11/Intrinsic.h>
 
+char *xmalloc(int n);
+
 char *xmalloc(int n)
 {
     return XtMalloc(n);
diff --git a/src/libs/snprintf/snprintf.c b/src/libs/snprintf/snprintf.c
deleted file mode 100644 (file)
index fc245f1..0000000
+++ /dev/null
@@ -1,1131 +0,0 @@
-/*
- * snprintf.c - a portable implementation of snprintf
- *
- * AUTHOR
- *   Mark Martinec <mark.martinec@ijs.si>, April 1999.
- *
- *   Copyright 1999-2002 Mark Martinec. All rights reserved.
- *
- * TERMS AND CONDITIONS
- *   This program is free software; it is dual licensed, the terms of the
- *   "Frontier Artistic License" or the "GNU General Public License"
- *   can be chosen at your discretion. The chosen license then applies
- *   solely and in its entirety. Both licenses come with this Kit.
- *
- *   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 license for more details.
- *
- *   You should have received a copy of the "Frontier Artistic License"
- *   with this Kit in the file named LICENSE.txt, and the copy of
- *   the "GNU General Public License" in the file named LICENSE-GPL.txt.
- *   If not, I'll be glad to provide one.
- *
- * FEATURES
- * - careful adherence to specs regarding flags, field width and precision;
- * - good performance for large string handling (large format, large
- *   argument or large paddings). Performance is similar to system's sprintf
- *   and in several cases significantly better (make sure you compile with
- *   optimizations turned on, tell the compiler the code is strict ANSI
- *   if necessary to give it more freedom for optimizations);
- * - return value semantics per ISO/IEC 9899:1999 ("ISO C99");
- * - written in standard ISO/ANSI C - requires an ANSI C compiler;
- * - works also with non-ASCII 8-bit character sets (e.g. EBCDIC)
- *   provided strings are '\0'-terminated.
- *
- * SUPPORTED CONVERSION SPECIFIERS AND DATA TYPES
- *
- * This snprintf only supports the following conversion specifiers:
- * s, c, d, u, o, x, X, p  (and synonyms: i, D, U, O - see below)
- * with flags: '-', '+', ' ', '0' and '#'.
- * An asterisk is supported for field width and for the precision.
- *
- * Length modifiers 'h' (short int), 'l' (long int),
- * and 'll' (long long int) are supported.
- * NOTE:
- *   If macro SNPRINTF_LONGLONG_SUPPORT is not defined (default) the
- *   length modifier 'll' is recognized but treated the same as 'l',
- *   which may cause argument value truncation! Defining
- *   SNPRINTF_LONGLONG_SUPPORT requires that your system's sprintf also
- *   handles length modifier 'll'.  long long int is a language extension
- *   which may not be portable.
- *
- * Conversion of numeric data (conversion specifiers d, u, o, x, X, p)
- * with length modifiers (none or h, l, ll) is left to the system routine
- * sprintf, but all handling of flags, field width and precision as well as
- * c and s conversions is done very carefully by this portable routine.
- * If a string precision (truncation) is specified (e.g. %.8s) it is
- * guaranteed the string beyond the specified precision will not be referenced.
- *
- * Length modifiers h, l and ll are ignored for c and s conversions (data
- * types wint_t and wchar_t are not supported).
- *
- * The following common synonyms for conversion characters are supported:
- *   - i is a synonym for d
- *   - D is a synonym for ld, explicit length modifiers are ignored
- *   - U is a synonym for lu, explicit length modifiers are ignored
- *   - O is a synonym for lo, explicit length modifiers are ignored
- * The D, O and U conversion characters are nonstandard, they are supported
- * for backward compatibility only, and should not be used for new code.
- *
- * The following is specifically NOT supported:
- *   - flag ' (thousands' grouping character) is recognized but ignored
- *   - numeric conversion specifiers: f, e, E, g, G and synonym F,
- *     as well as the new a and A conversion specifiers
- *   - length modifier 'L' (long double) and 'q' (quad - use 'll' instead)
- *   - wide character/string conversions: lc, ls, and nonstandard
- *     synonyms C and S
- *   - writeback of converted string length: conversion character n
- *   - the n$ specification for direct reference to n-th argument
- *   - locales
- *
- * It is permitted for str_m to be zero, and it is permitted to specify NULL
- * pointer for resulting string argument if str_m is zero (as per ISO C99).
- *
- * The return value is the number of characters which would be generated
- * for the given input, excluding the trailing null. If this value
- * is greater or equal to str_m, not all characters from the result
- * have been stored in str, output bytes beyond the (str_m-1) -th character
- * are discarded. If str_m is greater than zero it is guaranteed
- * the resulting string will be null-terminated.
- *
- * NOTE that this matches the ISO C99, OpenBSD, and GNU C library 2.1,
- * but is different from some older and vendor implementations,
- * and is also different from XPG, XSH5, SUSv2 specifications.
- * For historical discussion on changes in the semantics and standards
- * of snprintf see printf(3) man page in the Linux programmers manual.
- *
- * Routines asprintf and vasprintf return a pointer (in the ptr argument)
- * to a buffer sufficiently large to hold the resulting string. This pointer
- * should be passed to free(3) to release the allocated storage when it is
- * no longer needed. If sufficient space cannot be allocated, these functions
- * will return -1 and set ptr to be a NULL pointer. These two routines are a
- * GNU C library extensions (glibc).
- *
- * Routines asnprintf and vasnprintf are similar to asprintf and vasprintf,
- * yet, like snprintf and vsnprintf counterparts, will write at most str_m-1
- * characters into the allocated output string, the last character in the
- * allocated buffer then gets the terminating null. If the formatted string
- * length (the return value) is greater than or equal to the str_m argument,
- * the resulting string was truncated and some of the formatted characters
- * were discarded. These routines present a handy way to limit the amount
- * of allocated memory to some sane value.
- *
- * AVAILABILITY
- *   http://www.ijs.si/software/snprintf/
- *
- * REVISION HISTORY
- * 1999-04     V0.9  Mark Martinec
- *             - initial version, some modifications after comparing printf
- *               man pages for Digital Unix 4.0, Solaris 2.6 and HPUX 10,
- *               and checking how Perl handles sprintf (differently!);
- * 1999-04-09  V1.0  Mark Martinec <mark.martinec@ijs.si>
- *             - added main test program, fixed remaining inconsistencies,
- *               added optional (long long int) support;
- * 1999-04-12  V1.1  Mark Martinec <mark.martinec@ijs.si>
- *             - support the 'p' conversion (pointer to void);
- *             - if a string precision is specified
- *               make sure the string beyond the specified precision
- *               will not be referenced (e.g. by strlen);
- * 1999-04-13  V1.2  Mark Martinec <mark.martinec@ijs.si>
- *             - support synonyms %D=%ld, %U=%lu, %O=%lo;
- *             - speed up the case of long format string with few conversions;
- * 1999-06-30  V1.3  Mark Martinec <mark.martinec@ijs.si>
- *             - fixed runaway loop (eventually crashing when str_l wraps
- *               beyond 2^31) while copying format string without
- *               conversion specifiers to a buffer that is too short
- *               (thanks to Edwin Young <edwiny@autonomy.com> for
- *               spotting the problem);
- *             - added macros PORTABLE_SNPRINTF_VERSION_(MAJOR|MINOR)
- *               to snprintf.h
- * 2000-02-14  V2.0 (never released) Mark Martinec <mark.martinec@ijs.si>
- *             - relaxed license terms: The Artistic License now applies.
- *               You may still apply the GNU GENERAL PUBLIC LICENSE
- *               as was distributed with previous versions, if you prefer;
- *             - changed REVISION HISTORY dates to use ISO 8601 date format;
- *             - added vsnprintf (patch also independently proposed by
- *               Caolan McNamara 2000-05-04, and Keith M Willenson 2000-06-01)
- * 2000-06-27  V2.1  Mark Martinec <mark.martinec@ijs.si>
- *             - removed POSIX check for str_m<1; value 0 for str_m is
- *               allowed by ISO C99 (and GNU C library 2.1) - (pointed out
- *               on 2000-05-04 by Caolan McNamara, caolan@ csn dot ul dot ie).
- *               Besides relaxed license this change in standards adherence
- *               is the main reason to bump up the major version number;
- *             - added nonstandard routines asnprintf, vasnprintf, asprintf,
- *               vasprintf that dynamically allocate storage for the
- *               resulting string; these routines are not compiled by default,
- *               see comments where NEED_V?ASN?PRINTF macros are defined;
- *             - autoconf contributed by Caolan McNamara
- * 2000-10-06  V2.2  Mark Martinec <mark.martinec@ijs.si>
- *             - BUG FIX: the %c conversion used a temporary variable
- *               that was no longer in scope when referenced,
- *               possibly causing incorrect resulting character;
- *             - BUG FIX: make precision and minimal field width unsigned
- *               to handle huge values (2^31 <= n < 2^32) correctly;
- *               also be more careful in the use of signed/unsigned/size_t
- *               internal variables - probably more careful than many
- *               vendor implementations, but there may still be a case
- *               where huge values of str_m, precision or minimal field
- *               could cause incorrect behaviour;
- *             - use separate variables for signed/unsigned arguments,
- *               and for short/int, long, and long long argument lengths
- *               to avoid possible incompatibilities on certain
- *               computer architectures. Also use separate variable
- *               arg_sign to hold sign of a numeric argument,
- *               to make code more transparent;
- *             - some fiddling with zero padding and "0x" to make it
- *               Linux compatible;
- *             - systematically use macros fast_memcpy and fast_memset
- *               instead of case-by-case hand optimization; determine some
- *               breakeven string lengths for different architectures;
- *             - terminology change: 'format' -> 'conversion specifier',
- *               'C9x' -> 'ISO/IEC 9899:1999 ("ISO C99")',
- *               'alternative form' -> 'alternate form',
- *               'data type modifier' -> 'length modifier';
- *             - several comments rephrased and new ones added;
- *             - make compiler not complain about 'credits' defined but
- *               not used;
- * 2001-08     V2.3  Mark Martinec <mark.martinec@ijs.si>
- *  .. 2002-02 - writeback conversion specifier 'n' is now supported;
- *             - bump the size of a temporary buffer for simple
- *               numeric->string conversion from 32 to 48 characters
- *               in anticipation of 128-bit machines;
- *             - added #include <stddef.h> and <stdarg.h> to snprintf.h;
- *             - fixed one assert in test.c
- *               (thanks to Tuomo A Turunen for reporting this problem);
- *             - portability fix: use isdigit() provided with <ctype.h>
- *               and do not assume character set is ASCII - call strtoul()
- *               if needed to convert field width and precision;
- *             - check for broken or non-ANSI native sprintf (e.g. SunOS)
- *               which does not return string lenth, and work around it;
- *             - shouldn't happen, but just in case (applies to numeric
- *               conversions only): added assertion after a call to
- *               system's sprintf to make sure we detect a problem
- *               as it happens (or very shortly - but still - after a
- *               buffer overflow occured for some strange reason
- *               in system's sprintf);
- *             - cleanup: avoid comparing signed and unsigned values
- *               (ANSI c++ complaint); added a couple of 'const' qualifiers;
- *             - changed few comments, new references to some other
- *               implementations added to the README file;
- *             - it appears the Artistic License and its variant the Frontier
- *               Artistic License are incompatible with GPL and precludes
- *               this work to be included with GPL-licensed work. This was
- *               not my intention. The fact that this package is dual licensed
- *               comes to the rescue. Changed the credits[] string, and
- *               TERMS AND CONDITIONS to explicitly say so, stressing
- *               the fact that this work is dual licensed.
- */
-
-
-/* Define HAVE_SNPRINTF if your system already has snprintf and vsnprintf.
- *
- * If HAVE_SNPRINTF is defined this module will not produce code for
- * snprintf and vsnprintf, unless PREFER_PORTABLE_SNPRINTF is defined as well,
- * causing this portable version of snprintf to be called portable_snprintf
- * (and portable_vsnprintf).
- */
-/* #define HAVE_SNPRINTF */
-
-/* Define PREFER_PORTABLE_SNPRINTF if your system does have snprintf and
- * vsnprintf but you would prefer to use the portable routine(s) instead.
- * In this case the portable routine is declared as portable_snprintf
- * (and portable_vsnprintf) and a macro 'snprintf' (and 'vsnprintf')
- * is defined to expand to 'portable_v?snprintf' - see file snprintf.h .
- * Defining this macro is only useful if HAVE_SNPRINTF is also defined,
- * but does no harm if defined nevertheless.
- */
-/* #define PREFER_PORTABLE_SNPRINTF */
-
-/* Define SNPRINTF_LONGLONG_SUPPORT if you want to support
- * data type (long long int) and length modifier 'll' (e.g. %lld).
- * If undefined, 'll' is recognized but treated as a single 'l'.
- *
- * If the system's sprintf does not handle 'll'
- * the SNPRINTF_LONGLONG_SUPPORT must not be defined!
- *
- * This is off by default as (long long int) is a language extension.
- */
-/* #define SNPRINTF_LONGLONG_SUPPORT */
-
-/* Define NEED_SNPRINTF_ONLY if you only need snprintf, and not vsnprintf.
- * If NEED_SNPRINTF_ONLY is defined, the snprintf will be defined directly,
- * otherwise both snprintf and vsnprintf routines will be defined
- * and snprintf will be a simple wrapper around vsnprintf, at the expense
- * of an extra procedure call.
- */
-/* #define NEED_SNPRINTF_ONLY */
-
-/* Define NEED_V?ASN?PRINTF macros if you need library extension
- * routines asprintf, vasprintf, asnprintf, vasnprintf respectively,
- * and your system library does not provide them. They are all small
- * wrapper routines around portable_vsnprintf. Defining any of the four
- * NEED_V?ASN?PRINTF macros automatically turns off NEED_SNPRINTF_ONLY
- * and turns on PREFER_PORTABLE_SNPRINTF.
- *
- * Watch for name conflicts with the system library if these routines
- * are already present there.
- *
- * NOTE: vasprintf and vasnprintf routines need va_copy() from stdarg.h, as
- * specified by C99, to be able to traverse the same list of arguments twice.
- * I don't know of any other standard and portable way of achieving the same.
- * With some versions of gcc you may use __va_copy(). You might even get away
- * with "ap2 = ap", in this case you must not call va_end(ap2) !
- *   #define va_copy(ap2,ap) __va_copy((ap2),(ap))
- *   #define va_copy(ap2,ap) (ap2) = (ap)
- */
-/* #define NEED_ASPRINTF   */
-/* #define NEED_ASNPRINTF  */
-/* #define NEED_VASPRINTF  */
-/* #define NEED_VASNPRINTF */
-
-/* Define the following macros if desired:
- *   SOLARIS_COMPATIBLE, SOLARIS_BUG_COMPATIBLE,
- *   HPUX_COMPATIBLE, HPUX_BUG_COMPATIBLE, LINUX_COMPATIBLE,
- *   DIGITAL_UNIX_COMPATIBLE, DIGITAL_UNIX_BUG_COMPATIBLE,
- *   PERL_COMPATIBLE, PERL_BUG_COMPATIBLE,
- *
- * - For portable applications it is best not to rely on peculiarities
- *   of a given implementation so it may be best not to define any
- *   of the macros that select compatibility and to avoid features
- *   that vary among the systems.
- *
- * - Selecting compatibility with more than one operating system
- *   is not strictly forbidden but is not recommended.
- *
- * - 'x'_BUG_COMPATIBLE implies 'x'_COMPATIBLE .
- *
- * - 'x'_COMPATIBLE refers to (and enables) a behaviour that is
- *   documented in a sprintf man page on a given operating system
- *   and actually adhered to by the system's sprintf (but not on
- *   most other operating systems). It may also refer to and enable
- *   a behaviour that is declared 'undefined' or 'implementation specific'
- *   in the man page but a given implementation behaves predictably
- *   in a certain way.
- *
- * - 'x'_BUG_COMPATIBLE refers to (and enables) a behaviour of system's sprintf
- *   that contradicts the sprintf man page on the same operating system.
- *
- * - I do not claim that the 'x'_COMPATIBLE and 'x'_BUG_COMPATIBLE
- *   conditionals take into account all idiosyncrasies of a particular
- *   implementation, there may be other incompatibilities.
- */
-
-
-\f
-/* ============================================= */
-/* NO USER SERVICABLE PARTS FOLLOWING THIS POINT */
-/* ============================================= */
-
-#define PORTABLE_SNPRINTF_VERSION_MAJOR 2
-#define PORTABLE_SNPRINTF_VERSION_MINOR 3
-
-#if defined(NEED_ASPRINTF) || defined(NEED_ASNPRINTF) || defined(NEED_VASPRINTF) || defined(NEED_VASNPRINTF)
-# if defined(NEED_SNPRINTF_ONLY)
-# undef NEED_SNPRINTF_ONLY
-# endif
-# if !defined(PREFER_PORTABLE_SNPRINTF)
-# define PREFER_PORTABLE_SNPRINTF
-# endif
-#endif
-
-#if defined(SOLARIS_BUG_COMPATIBLE) && !defined(SOLARIS_COMPATIBLE)
-#define SOLARIS_COMPATIBLE
-#endif
-
-#if defined(HPUX_BUG_COMPATIBLE) && !defined(HPUX_COMPATIBLE)
-#define HPUX_COMPATIBLE
-#endif
-
-#if defined(DIGITAL_UNIX_BUG_COMPATIBLE) && !defined(DIGITAL_UNIX_COMPATIBLE)
-#define DIGITAL_UNIX_COMPATIBLE
-#endif
-
-#if defined(PERL_BUG_COMPATIBLE) && !defined(PERL_COMPATIBLE)
-#define PERL_COMPATIBLE
-#endif
-
-#if defined(LINUX_BUG_COMPATIBLE) && !defined(LINUX_COMPATIBLE)
-#define LINUX_COMPATIBLE
-#endif
-
-#include <sys/types.h>
-#include <ctype.h>
-#include <string.h>
-#include <stdlib.h>
-#include <stdio.h>
-#include <stdarg.h>
-#include <assert.h>
-#include <errno.h>
-
-/* For copying strings longer or equal to 'breakeven_point'
- * it is more efficient to call memcpy() than to do it inline.
- * The value depends mostly on the processor architecture,
- * but also on the compiler and its optimization capabilities.
- * The value is not critical, some small value greater than zero
- * will be just fine if you don't care to squeeze every drop
- * of performance out of the code.
- *
- * Small values favour memcpy & memset (extra procedure call, less code),
- * large values favour inline code (saves procedure call, more code).
- */
-#if defined(__alpha__) || defined(__alpha)
-#  define breakeven_point   2  /* AXP (DEC Alpha)     - gcc or cc */
-#endif
-#if defined(__i386__)  || defined(__i386)
-#  define breakeven_point  15  /* Intel Pentium/Linux - gcc 2.96 (12..30) */
-#endif
-#if defined(__hppa)
-#  define breakeven_point  10  /* HP-PA               - gcc */
-#endif
-#if defined(__sparc__) || defined(__sparc)
-#  define breakeven_point  33  /* Sun Sparc 5         - gcc 2.8.1 */
-#endif
-
-/* some other values of possible interest: */
-/* #define breakeven_point  8 */  /* VAX 4000         - vaxc */
-/* #define breakeven_point 19 */  /* VAX 4000         - gcc 2.7.0 */
-
-#ifndef breakeven_point
-#  define breakeven_point   6  /* some reasonable one-size-fits-all value */
-#endif
-
-#define fast_memcpy(d,s,n) \
-  { register size_t nn = (size_t)(n); \
-    if (nn >= breakeven_point) memcpy((d), (s), nn); \
-    else if (nn > 0) { /* call overhead is worth only for large strings*/ \
-      register char *dd; register const char *ss; \
-      for (ss=(s), dd=(d); nn>0; nn--) *dd++ = *ss++; } }
-
-#define fast_memset(d,c,n) \
-  { register size_t nn = (size_t)(n); \
-    if (nn >= breakeven_point) memset((d), (int)(c), nn); \
-    else if (nn > 0) { /* call overhead is worth only for large strings*/ \
-      register char *dd; register const int cc=(int)(c); \
-      for (dd=(d); nn>0; nn--) *dd++ = cc; } }
-
-/* The following isdigit() is not portable (e.g. may not work
- * with non-ASCII character sets). Use the system-provided isdigit()
- * if available, otherwise uncomment:
- *   #define isdigit(c) ((c) >= '0' && (c) <= '9')
- */
-
-/* atosizet converts a span of decimal digits to a number of type size_t.
- * It is a macro, similar to:  (but not quite, p will be modified!)
- *   void atosizet(const char *p, const char **endp, size_t *result);
- * endp will point to just beyond the digits substring.
- * This is _not_ a general-purpose macro:
- *  - the first argument will be modified;
- *  - the first character must already be checked to be a digit!
- * NOTE: size_t could be wider than unsigned int;
- *       but we treat numeric string like common implementations do!
- * If character set is ASCII (checking with a quick and simple-minded test)
- * we convert string to a number inline for speed, otherwise we call strtoul.
- */
-#define atosizet(p, endp, result)                                      \
-  if ((int)'0' == 48) {  /* a compile-time constant expression, */     \
-                         /* hoping the code from one branch     */     \
-                         /* will be optimized away */                  \
-    /* looks like ASCII character set, let's hope it really is */      \
-    register unsigned int uj = (unsigned int)(*(p)++ - '0');           \
-    while (isdigit((int)(*(p))))                                       \
-      uj = 10*uj + (unsigned int)(*(p)++ - '0');                       \
-    if ((endp) != NULL) *(endp) = (p);                                 \
-    *(result) = (size_t) uj;                                           \
-  } else {                                                             \
-    /* non-ASCII character set, play by the rules */                   \
-    char *ep;  /* NOTE: no 'const' to make strtoul happy! */           \
-    /* NOTE: clip (unsigned long) to (unsigned int) as is common !!! */        \
-    const unsigned int uj = (unsigned int) strtoul((p), &ep, 10);      \
-    /* The following assignment is legal: the address of a non-const */        \
-    /* object can be assigned to a pointer to a const object, but    */        \
-    /* that pointer cannot be used to alter the value of the object. */        \
-    if ((endp) != NULL) *(endp) = ep;                                  \
-    /* if num too large the result will be ULONG_MAX and errno=ERANGE */ \
-    *(result) = (size_t) uj;                                           \
-  }                                                                    \
-
-/* prototypes */
-
-#if defined(NEED_ASPRINTF)
-int asprintf   (char **ptr, const char *fmt, /*args*/ ...);
-#endif
-#if defined(NEED_VASPRINTF)
-int vasprintf  (char **ptr, const char *fmt, va_list ap);
-#endif
-#if defined(NEED_ASNPRINTF)
-int asnprintf  (char **ptr, size_t str_m, const char *fmt, /*args*/ ...);
-#endif
-#if defined(NEED_VASNPRINTF)
-int vasnprintf (char **ptr, size_t str_m, const char *fmt, va_list ap);
-#endif
-
-#if defined(HAVE_SNPRINTF)
-/* declare our portable snprintf  routine under name portable_snprintf  */
-/* declare our portable vsnprintf routine under name portable_vsnprintf */
-#else
-/* declare our portable routines under names snprintf and vsnprintf */
-#define portable_snprintf snprintf
-#if !defined(NEED_SNPRINTF_ONLY)
-#define portable_vsnprintf vsnprintf
-#endif
-#endif
-
-#if !defined(HAVE_SNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF)
-int portable_snprintf(char *str, size_t str_m, const char *fmt, /*args*/ ...);
-#if !defined(NEED_SNPRINTF_ONLY)
-int portable_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap);
-#endif
-#endif
-
-/* declarations */
-
-static const char credits[] = "\n\
-@(#)snprintf.c, v2.3: Mark Martinec, <mark.martinec@ijs.si>\n\
-@(#)snprintf.c, v2.3: Copyright 1999-2002 Mark Martinec. Dual licensed: Frontier Artistic License or GNU General Public License applies.\n\
-@(#)snprintf.c, v2.3: http://www.ijs.si/software/snprintf/\n";
-
-#if defined(NEED_ASPRINTF)
-int asprintf(char **ptr, const char *fmt, /*args*/ ...) {
-  va_list ap;
-  size_t str_m;
-  int str_l;
-
-  *ptr = NULL;
-  va_start(ap, fmt);                            /* measure the required size */
-  str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap);
-  va_end(ap);
-  assert(str_l >= 0);        /* possible integer overflow if str_m > INT_MAX */
-  *ptr = (char *) malloc(str_m = (size_t)str_l + 1);
-  if (*ptr == NULL) { errno = ENOMEM; str_l = -1; }
-  else {
-    int str_l2;
-    va_start(ap, fmt);
-    str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);
-    va_end(ap);
-    assert(str_l2 == str_l);
-  }
-  return str_l;
-}
-#endif
-
-#if defined(NEED_VASPRINTF)
-int vasprintf(char **ptr, const char *fmt, va_list ap) {
-  size_t str_m;
-  int str_l;
-
-  *ptr = NULL;
-  { va_list ap2;
-    va_copy(ap2, ap);  /* don't consume the original ap, we'll need it again */
-    str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap2);/*get required size*/
-    va_end(ap2);
-  }
-  assert(str_l >= 0);        /* possible integer overflow if str_m > INT_MAX */
-  *ptr = (char *) malloc(str_m = (size_t)str_l + 1);
-  if (*ptr == NULL) { errno = ENOMEM; str_l = -1; }
-  else {
-    const int str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);
-    assert(str_l2 == str_l);
-  }
-  return str_l;
-}
-#endif
-
-#if defined(NEED_ASNPRINTF)
-int asnprintf(char **ptr, size_t str_m, const char *fmt, /*args*/ ...) {
-  va_list ap;
-  int str_l;
-
-  *ptr = NULL;
-  va_start(ap, fmt);                            /* measure the required size */
-  str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap);
-  va_end(ap);
-  assert(str_l >= 0);        /* possible integer overflow if str_m > INT_MAX */
-  if ((size_t)str_l + 1 < str_m) str_m = (size_t)str_l + 1;      /* truncate */
-  /* if str_m is 0, no buffer is allocated, just set *ptr to NULL */
-  if (str_m == 0) {  /* not interested in resulting string, just return size */
-  } else {
-    *ptr = (char *) malloc(str_m);
-    if (*ptr == NULL) { errno = ENOMEM; str_l = -1; }
-    else {
-      int str_l2;
-      va_start(ap, fmt);
-      str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);
-      va_end(ap);
-      assert(str_l2 == str_l);
-    }
-  }
-  return str_l;
-}
-#endif
-
-#if defined(NEED_VASNPRINTF)
-int vasnprintf(char **ptr, size_t str_m, const char *fmt, va_list ap) {
-  int str_l;
-
-  *ptr = NULL;
-  { va_list ap2;
-    va_copy(ap2, ap);  /* don't consume the original ap, we'll need it again */
-    str_l = portable_vsnprintf(NULL, (size_t)0, fmt, ap2);/*get required size*/
-    va_end(ap2);
-  }
-  assert(str_l >= 0);        /* possible integer overflow if str_m > INT_MAX */
-  if ((size_t)str_l + 1 < str_m) str_m = (size_t)str_l + 1;      /* truncate */
-  /* if str_m is 0, no buffer is allocated, just set *ptr to NULL */
-  if (str_m == 0) {  /* not interested in resulting string, just return size */
-  } else {
-    *ptr = (char *) malloc(str_m);
-    if (*ptr == NULL) { errno = ENOMEM; str_l = -1; }
-    else {
-      const int str_l2 = portable_vsnprintf(*ptr, str_m, fmt, ap);
-      assert(str_l2 == str_l);
-    }
-  }
-  return str_l;
-}
-#endif
-
-/*
- * If the system does have snprintf and the portable routine is not
- * specifically required, this module produces no code for snprintf/vsnprintf.
- */
-#if !defined(HAVE_SNPRINTF) || defined(PREFER_PORTABLE_SNPRINTF)
-
-#if !defined(NEED_SNPRINTF_ONLY)
-int portable_snprintf(char *str, size_t str_m, const char *fmt, /*args*/ ...) {
-  va_list ap;
-  int str_l;
-
-  va_start(ap, fmt);
-  str_l = portable_vsnprintf(str, str_m, fmt, ap);
-  va_end(ap);
-  return str_l;
-}
-#endif
-
-#if defined(NEED_SNPRINTF_ONLY)
-int portable_snprintf(char *str, size_t str_m, const char *fmt, /*args*/ ...) {
-#else
-int portable_vsnprintf(char *str, size_t str_m, const char *fmt, va_list ap) {
-#endif
-
-#if defined(NEED_SNPRINTF_ONLY)
-  va_list ap;
-#endif
-  size_t str_l = 0;
-  const char *p = fmt;
-
-/* In contrast to POSIX, the ISO C99 now says
- * that str can be NULL and str_m can be 0.
- * This is more useful than the old:  if (str_m < 1) return -1; */
-
-#if defined(NEED_SNPRINTF_ONLY)
-  va_start(ap, fmt);
-#endif
-  if (!p) p = "";
-  while (*p) {
-    if (*p != '%') {
-      if (0) {  /* compile time decision between two equivalent alternatives */
-     /* this is simple but slow */
-        if (str_l < str_m) str[str_l] = *p;
-        p++; str_l++;
-      } else {
-     /* this usually achieves much better performance for cases
-      * where format string is long and contains few conversions */
-        const char *const q = strchr(p+1,'%');
-        const size_t n = !q ? strlen(p) : (q-p);
-        if (str_l < str_m) {
-          const size_t avail = str_m-str_l;
-          fast_memcpy(str+str_l, p, (n>avail?avail:n));
-        }
-        p += n; str_l += n;
-      }
-    } else {
-      const char *starting_p;
-      size_t min_field_width = 0, precision = 0;
-      int zero_padding = 0, precision_specified = 0, justify_left = 0;
-      int alternate_form = 0, force_sign = 0;
-      int space_for_positive = 1; /* If both the ' ' and '+' flags appear,
-                                     the ' ' flag should be ignored. */
-      char length_modifier = '\0';            /* allowed values: \0, h, l, L */
-      char tmp[48];/* temporary buffer for simple numeric->string conversion */
-
-      const char *str_arg;      /* string address in case of string argument */
-      size_t str_arg_l;         /* natural field width of arg without padding
-                                   and sign */
-      unsigned char uchar_arg;
-        /* unsigned char argument value - only defined for c conversion.
-           N.B. standard explicitly states the char argument for
-           the c conversion is unsigned */
-
-      size_t number_of_zeros_to_pad = 0;
-        /* number of zeros to be inserted for numeric conversions
-           as required by the precision or minimal field width */
-
-      size_t zero_padding_insertion_ind = 0;
-        /* index into tmp where zero padding is to be inserted */
-
-      char fmt_spec = '\0';
-        /* current conversion specifier character */
-
-      str_arg = credits;/* just to make compiler happy (defined but not used)*/
-      str_arg = NULL;
-      starting_p = p; p++;  /* skip '%' */
-   /* parse flags */
-      while (*p == '0' || *p == '-' || *p == '+' ||
-             *p == ' ' || *p == '#' || *p == '\'') {
-        switch (*p) {
-        case '0': zero_padding = 1; break;
-        case '-': justify_left = 1; break;
-        case '+': force_sign = 1; space_for_positive = 0; break;
-        case ' ': force_sign = 1;
-     /* If both the ' ' and '+' flags appear, the ' ' flag should be ignored */
-#ifdef PERL_COMPATIBLE
-     /* ... but in Perl the last of ' ' and '+' applies */
-                  space_for_positive = 1;
-#endif
-                  break;
-        case '#': alternate_form = 1; break;
-        case '\'': break;
-        }
-        p++;
-      }
-   /* If flags '0' and '-' both appear, the '0' flag should be ignored. */
-
-   /* parse field width */
-      if (*p == '*') {
-        const int j = va_arg(ap, int);
-        p++;
-        if (j >= 0) min_field_width = j;
-        else { min_field_width = -j; justify_left = 1; }
-      } else if (isdigit((int)(*p))) {
-        atosizet(p, &p, &min_field_width);
-      }
-   /* parse precision */
-      if (*p == '.') {
-        p++; precision_specified = 1;
-        if (*p == '*') {
-          const int j = va_arg(ap, int);
-          p++;
-          if (j >= 0) precision = j;
-          else {
-            precision_specified = 0; precision = 0;
-         /* NOTE:
-          *   Solaris 2.6 man page claims that in this case the precision
-          *   should be set to 0.  Digital Unix 4.0, HPUX 10 and BSD man page
-          *   claim that this case should be treated as unspecified precision,
-          *   which is what we do here.
-          */
-          }
-        } else if (isdigit((int)(*p))) {
-          atosizet(p, &p, &precision);
-        }
-      }
-   /* parse 'h', 'l' and 'll' length modifiers */
-      if (*p == 'h' || *p == 'l') {
-        length_modifier = *p; p++;
-        if (length_modifier == 'l' && *p == 'l') {  /* double el = long long */
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-          length_modifier = '2';          /* double letter el encoded as '2' */
-#else
-          length_modifier = 'l';     /* treat it as a single 'l' (letter el) */
-#endif
-          p++;
-        }
-      }
-      fmt_spec = *p;
-   /* common synonyms: */
-      switch (fmt_spec) {
-      case 'i': fmt_spec = 'd'; break;
-      case 'D': fmt_spec = 'd'; length_modifier = 'l'; break;
-      case 'U': fmt_spec = 'u'; length_modifier = 'l'; break;
-      case 'O': fmt_spec = 'o'; length_modifier = 'l'; break;
-      default: break;
-      }
-   /* get parameter value, do initial processing */
-      switch (fmt_spec) {
-      case '%': /* % behaves similar to 's' regarding flags and field widths */
-      case 'c': /* c behaves similar to 's' regarding flags and field widths */
-      case 's':
-        length_modifier = '\0';          /* wint_t and wchar_t not supported */
-     /* the result of zero padding flag with non-numeric conversion specifier*/
-     /* is undefined. Solaris and HPUX 10 does zero padding in this case,    */
-     /* Digital Unix and Linux does not. */
-#if !defined(SOLARIS_COMPATIBLE) && !defined(HPUX_COMPATIBLE)
-        zero_padding = 0;    /* turn zero padding off for string conversions */
-#endif
-        str_arg_l = 1;
-        switch (fmt_spec) {
-        case '%':
-          str_arg = p; break;
-        case 'c': {
-          const int j = va_arg(ap, int);
-          uchar_arg = (unsigned char) j;   /* standard demands unsigned char */
-          str_arg = (const char *) &uchar_arg;
-          break;
-        }
-        case 's':
-          str_arg = va_arg(ap, const char *);
-          if (!str_arg) str_arg_l = 0;
-       /* make sure not to address string beyond the specified precision !!! */
-          else if (!precision_specified) str_arg_l = strlen(str_arg);
-       /* truncate string if necessary as requested by precision */
-          else if (precision == 0) str_arg_l = 0;
-          else {
-       /* memchr on HP does not like n > 2^31  !!! */
-            const char *const q = (const char *) memchr(str_arg, '\0',
-                             precision <= 0x7fffffff ? precision : 0x7fffffff);
-            str_arg_l = !q ? precision : (q-str_arg);
-          }
-          break;
-        default: break;
-        }
-        break;
-      case 'd': case 'u': case 'o': case 'x': case 'X': case 'p': {
-        /* NOTE: the u, o, x, X and p conversion specifiers imply
-                 the value is unsigned;  d implies a signed value */
-
-        int arg_sign = 0;
-          /* 0 if numeric argument is zero (or if pointer is NULL for 'p'),
-            +1 if greater than zero (or nonzero for unsigned arguments),
-            -1 if negative (unsigned argument is never negative) */
-
-        int int_arg = 0;  unsigned int uint_arg = 0;
-          /* only defined for length modifier h, or for no length modifiers */
-
-        long int long_arg = 0;  unsigned long int ulong_arg = 0;
-          /* only defined for length modifier l (letter el) */
-
-        void *ptr_arg = NULL;
-          /* pointer argument value - only defined for p conversion */
-
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-        long long int long_long_arg = 0;
-        unsigned long long int ulong_long_arg = 0;
-          /* only defined for length modifier ll (double letter el) */
-#endif
-        if (fmt_spec == 'p') {
-        /* HPUX 10: An l, h, ll or L before any other conversion character
-         *   (other than d, i, u, o, x, or X) is ignored.
-         * Digital Unix:
-         *   not specified, but seems to behave as HPUX does.
-         * Solaris: If an h, l, or L appears before any other conversion
-         *   specifier (other than d, i, u, o, x, or X), the behavior
-         *   is undefined. (Actually %hp converts only 16-bits of address
-         *   and %llp treats address as 64-bit data which is incompatible
-         *   with (void *) argument on a 32-bit system).
-         */
-#ifdef SOLARIS_COMPATIBLE
-#  ifdef SOLARIS_BUG_COMPATIBLE
-          /* keep length modifiers even if it represents 'll' */
-#  else
-          if (length_modifier == '2') length_modifier = '\0';
-#  endif
-#else
-          length_modifier = '\0';
-#endif
-          ptr_arg = va_arg(ap, void *);
-          if (ptr_arg != NULL) arg_sign = 1;
-        } else if (fmt_spec == 'd') {  /* signed */
-          switch (length_modifier) {
-          case '\0':
-          case 'h':
-         /* It is non-portable to specify char or short as the second argument
-          * to va_arg, because arguments seen by the called function
-          * are not char or short.  C converts char and short arguments
-          * to int before passing them to a function.
-          */
-            int_arg = va_arg(ap, int);
-            if      (int_arg > 0) arg_sign =  1;
-            else if (int_arg < 0) arg_sign = -1;
-            break;
-          case 'l':  /* letter el */
-            long_arg = va_arg(ap, long int);
-            if      (long_arg > 0) arg_sign =  1;
-            else if (long_arg < 0) arg_sign = -1;
-            break;
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-          case '2':
-            long_long_arg = va_arg(ap, long long int);
-            if      (long_long_arg > 0) arg_sign =  1;
-            else if (long_long_arg < 0) arg_sign = -1;
-            break;
-#endif
-          }
-        } else {  /* unsigned */
-          switch (length_modifier) {
-          case '\0':
-          case 'h':
-            uint_arg = va_arg(ap, unsigned int);
-            if (uint_arg) arg_sign = 1;
-            break;
-          case 'l':  /* letter el */
-            ulong_arg = va_arg(ap, unsigned long int);
-            if (ulong_arg) arg_sign = 1;
-            break;
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-          case '2':
-            ulong_long_arg = va_arg(ap, unsigned long long int);
-            if (ulong_long_arg) arg_sign = 1;
-            break;
-#endif
-          }
-        }
-        str_arg = tmp; str_arg_l = 0;
-     /* NOTE:
-      *   For d, i, u, o, x, and X conversions, if precision is specified,
-      *   the '0' flag should be ignored. This is so with Solaris 2.6,
-      *   Digital UNIX 4.0, HPUX 10, Linux, FreeBSD, NetBSD; but not with Perl.
-      */
-#ifndef PERL_COMPATIBLE
-        if (precision_specified) zero_padding = 0;
-#endif
-        if (fmt_spec == 'd') {
-          if (force_sign && arg_sign >= 0)
-            tmp[str_arg_l++] = space_for_positive ? ' ' : '+';
-         /* leave negative numbers for sprintf to handle,
-            to avoid handling tricky cases like (short int)(-32768) */
-#ifdef LINUX_COMPATIBLE
-        } else if (fmt_spec == 'p' && force_sign && arg_sign > 0) {
-          tmp[str_arg_l++] = space_for_positive ? ' ' : '+';
-#endif
-        } else if (alternate_form) {
-          if (arg_sign != 0 && (fmt_spec == 'x' || fmt_spec == 'X') )
-            { tmp[str_arg_l++] = '0'; tmp[str_arg_l++] = fmt_spec; }
-         /* alternate form should have no effect for p conversion, but ... */
-#ifdef HPUX_COMPATIBLE
-          else if (fmt_spec == 'p'
-         /* HPUX 10: for an alternate form of p conversion,
-          *          a nonzero result is prefixed by 0x. */
-#ifndef HPUX_BUG_COMPATIBLE
-         /* Actually it uses 0x prefix even for a zero value. */
-                   && arg_sign != 0
-#endif
-                  ) { tmp[str_arg_l++] = '0'; tmp[str_arg_l++] = 'x'; }
-#endif
-        }
-        zero_padding_insertion_ind = str_arg_l;
-        if (!precision_specified) precision = 1;   /* default precision is 1 */
-        if (precision == 0 && arg_sign == 0
-#if defined(HPUX_BUG_COMPATIBLE) || defined(LINUX_COMPATIBLE)
-            && fmt_spec != 'p'
-         /* HPUX 10 man page claims: With conversion character p the result of
-          * converting a zero value with a precision of zero is a null string.
-          * Actually HP returns all zeroes, and Linux returns "(nil)". */
-#endif
-        ) {
-         /* converted to null string */
-         /* When zero value is formatted with an explicit precision 0,
-            the resulting formatted string is empty (d, i, u, o, x, X, p).   */
-        } else {
-          static int sprintf_return_value_is_ansi_compliant = -1; /* unknown */
-          char f[5]; int f_l = 0, sprintf_l = 0;
-          f[f_l++] = '%';    /* construct a simple format string for sprintf */
-          if (!length_modifier) { }
-          else if (length_modifier=='2') { f[f_l++] = 'l'; f[f_l++] = 'l'; }
-          else f[f_l++] = length_modifier;
-          f[f_l++] = fmt_spec; f[f_l++] = '\0';
-          if (sprintf_return_value_is_ansi_compliant < 0) { /* not yet known */
-         /* let's do a little run-time experiment (only once) to see if the
-          * native sprintf returns a string length as required by ANSI, or has
-          * some other ideas like the old SunOS which returns buffer address */
-            sprintf_return_value_is_ansi_compliant =
-              (sprintf(tmp+str_arg_l, "%d", 19) == 2);
-          }
-          if (fmt_spec == 'p') sprintf_l=sprintf(tmp+str_arg_l, f, ptr_arg);
-          else if (fmt_spec == 'd') {  /* signed */
-            switch (length_modifier) {
-            case '\0':
-            case 'h': sprintf_l=sprintf(tmp+str_arg_l, f, int_arg);  break;
-            case 'l': sprintf_l=sprintf(tmp+str_arg_l, f, long_arg); break;
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-            case '2': sprintf_l=sprintf(tmp+str_arg_l,f,long_long_arg); break;
-#endif
-            }
-          } else {  /* unsigned */
-            switch (length_modifier) {
-            case '\0':
-            case 'h': sprintf_l=sprintf(tmp+str_arg_l, f, uint_arg);  break;
-            case 'l': sprintf_l=sprintf(tmp+str_arg_l, f, ulong_arg); break;
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-            case '2': sprintf_l=sprintf(tmp+str_arg_l,f,ulong_long_arg);break;
-#endif
-            }
-          }
-          if (!sprintf_return_value_is_ansi_compliant) {  /* broken sprintf? */
-            tmp[sizeof(tmp)-1] = '\0'; sprintf_l = strlen(tmp+str_arg_l);
-          }
-          assert(sprintf_l >= 0);  /* should not happen; problem in sprintf? */
-          assert(sprintf_l+str_arg_l < sizeof(tmp)); /*better late then never*/
-          str_arg_l += sprintf_l;
-         /* include the optional minus sign and possible "0x"
-            in the region before the zero padding insertion point */
-          if (zero_padding_insertion_ind < str_arg_l &&
-              tmp[zero_padding_insertion_ind] == '-') {
-            zero_padding_insertion_ind++;
-          }
-          if (zero_padding_insertion_ind+1 < str_arg_l &&
-              tmp[zero_padding_insertion_ind]   == '0' &&
-             (tmp[zero_padding_insertion_ind+1] == 'x' ||
-              tmp[zero_padding_insertion_ind+1] == 'X') ) {
-            zero_padding_insertion_ind += 2;
-          }
-        }
-        { const size_t num_of_digits = str_arg_l - zero_padding_insertion_ind;
-          if (alternate_form && fmt_spec == 'o'
-#ifdef HPUX_COMPATIBLE                                  /* ("%#.o",0) -> ""  */
-              && (str_arg_l > 0)
-#endif
-#ifdef DIGITAL_UNIX_BUG_COMPATIBLE                      /* ("%#o",0) -> "00" */
-#else
-              /* unless zero is already the first character */
-              && !(zero_padding_insertion_ind < str_arg_l
-                   && tmp[zero_padding_insertion_ind] == '0')
-#endif
-          ) {        /* assure leading zero for alternate-form octal numbers */
-            if (!precision_specified || precision < num_of_digits+1) {
-             /* precision is increased to force the first character to be zero,
-                except if a zero value is formatted with an explicit precision
-                of zero */
-              precision = num_of_digits+1; precision_specified = 1;
-            }
-          }
-       /* zero padding to specified precision? */
-          if (num_of_digits < precision) 
-            number_of_zeros_to_pad = precision - num_of_digits;
-        }
-     /* zero padding to specified minimal field width? */
-        if (!justify_left && zero_padding) {
-          const int n = min_field_width - (str_arg_l+number_of_zeros_to_pad);
-          if (n > 0) number_of_zeros_to_pad += n;
-        }
-        break;
-      }
-      case 'n': {
-        void *const ptr = va_arg(ap, void *);
-        if (ptr != NULL) {
-       /* same problem of size_t -> int type conversion as with the
-        * snprintf return value - see comment at the end of this procedure */
-          switch (length_modifier) {
-          case '\0': *(      int *const)ptr = str_l; break;
-          case 'h':  *(short int *const)ptr = str_l; break;
-          case 'l':  *(long  int *const)ptr = str_l; break;
-#ifdef SNPRINTF_LONGLONG_SUPPORT
-          case '2':  *(long long int *const)ptr = str_l; break;
-#endif
-          }
-        }
-     /* no argument converted */
-        min_field_width = number_of_zeros_to_pad = str_arg_l = 0;
-        break;
-      }
-      default: /* unrecognized conversion specifier, keep format string as-is*/
-        zero_padding = 0;  /* turn zero padding off for non-numeric convers. */
-#ifndef DIGITAL_UNIX_COMPATIBLE
-        justify_left = 1; min_field_width = 0;                /* reset flags */
-#endif
-#if defined(PERL_COMPATIBLE) || defined(LINUX_COMPATIBLE)
-     /* keep the entire format string unchanged */
-        str_arg = starting_p; str_arg_l = p - starting_p;
-     /* well, not exactly so for Linux, which does something inbetween,
-      * and I don't feel an urge to imitate it: "%+++++hy" -> "%+y"  */
-#else
-     /* discard the unrecognized conversion, just keep *
-      * the unrecognized conversion character          */
-        str_arg = p; str_arg_l = 0;
-#endif
-        if (*p) str_arg_l++;  /* include invalid conversion specifier unchanged
-                                 if not at end-of-string */
-        break;
-      }
-      if (*p) p++;      /* step over the just processed conversion specifier */
-   /* insert padding to the left as requested by min_field_width;
-      this does not include the zero padding in case of numerical conversions*/
-      if (!justify_left) {                /* left padding with blank or zero */
-        const int n = min_field_width - (str_arg_l+number_of_zeros_to_pad);
-        if (n > 0) {
-          if (str_l < str_m) {
-            const size_t avail = str_m-str_l;
-            fast_memset(str+str_l, (zero_padding?'0':' '),
-                        ((unsigned int)n > avail ? avail : (unsigned int)n));
-          }
-          str_l += n;
-        }
-      }
-   /* is zero padding as requested by the precision or by the
-    * minimal field width for numeric conversions required? */
-      if (number_of_zeros_to_pad <= 0) {
-     /* will not copy the first part of numeric right now, *
-      * force it to be copied later in its entirety        */
-        zero_padding_insertion_ind = 0;
-      } else {
-     /* insert first part of numerics (sign or '0x') before zero padding */
-        { const int n = zero_padding_insertion_ind;
-          if (n > 0) {
-            if (str_l < str_m) {
-              const size_t avail = str_m-str_l;
-              fast_memcpy(str+str_l, str_arg,
-                          ((unsigned int)n > avail ? avail : (unsigned int)n));
-            }
-            str_l += n;
-          }
-        }
-     /* insert zero padding as requested by the precision or min field width */
-        { const int n = number_of_zeros_to_pad;
-          if (n > 0) {
-            if (str_l < str_m) {
-              const size_t avail = str_m-str_l;
-              fast_memset(str+str_l, '0',
-                          ((unsigned int)n > avail ? avail : (unsigned int)n));
-            }
-            str_l += n;
-          }
-        }
-      }
-   /* insert formatted string
-    * (or as-is conversion specifier for unknown conversions) */
-      { const int n = str_arg_l - zero_padding_insertion_ind;
-        if (n > 0) {
-          if (str_l < str_m) {
-            const size_t avail = str_m-str_l;
-            fast_memcpy(str+str_l, str_arg+zero_padding_insertion_ind,
-                        ((unsigned int)n > avail ? avail : (unsigned int)n));
-          }
-          str_l += n;
-        }
-      }
-   /* insert right padding */
-      if (justify_left) {          /* right blank padding to the field width */
-        const int n = min_field_width - (str_arg_l+number_of_zeros_to_pad);
-        if (n > 0) {
-          if (str_l < str_m) {
-            const size_t avail = str_m-str_l;
-            fast_memset(str+str_l, ' ',
-                        ((unsigned int)n > avail ? avail : (unsigned int)n));
-          }
-          str_l += n;
-        }
-      }
-    }
-  }
-#if defined(NEED_SNPRINTF_ONLY)
-  va_end(ap);
-#endif
-  if (str_m > 0) { /* make sure the string is null-terminated, possibly
-                      at the expense of overwriting the last character */
-    str[str_l <= str_m-1 ? str_l : str_m-1] = '\0';
-  }
-  /* Return the number of characters formatted (excluding trailing null
-   * character), that is, the number of characters that would have been
-   * written to the buffer if it were large enough.
-   *
-   * The value of str_l should be returned, but str_l is of unsigned type
-   * size_t, and snprintf is int, possibly leading to an undetected
-   * integer overflow, resulting in a negative return value, which is invalid.
-   * Both XSH5 and ISO C99 (at least the draft) are silent on this issue.
-   * Should errno be set to EOVERFLOW and EOF returned in this case???
-   */
-  return (int) str_l;
-}
-#endif
diff --git a/src/preproc/eqn/Makefile.sub b/src/preproc/eqn/Makefile.sub
deleted file mode 100644 (file)
index fc82b3a..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# Makefile.sub for `preproc eqn'
-#
-# File position: <groff-source>/src/preproc/eqn/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=eqn$(EXEEXT)
-MAN1=eqn.n neqn.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
-  eqn.$(OBJEXT) \
-  main.$(OBJEXT) \
-  lex.$(OBJEXT) \
-  box.$(OBJEXT) \
-  limit.$(OBJEXT) \
-  list.$(OBJEXT) \
-  over.$(OBJEXT) \
-  text.$(OBJEXT) \
-  script.$(OBJEXT) \
-  mark.$(OBJEXT) \
-  other.$(OBJEXT) \
-  delim.$(OBJEXT) \
-  sqrt.$(OBJEXT) \
-  pile.$(OBJEXT) \
-  special.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/main.cpp \
-  $(srcdir)/lex.cpp \
-  $(srcdir)/box.cpp \
-  $(srcdir)/limit.cpp \
-  $(srcdir)/list.cpp \
-  $(srcdir)/over.cpp \
-  $(srcdir)/text.cpp \
-  $(srcdir)/script.cpp \
-  $(srcdir)/mark.cpp \
-  $(srcdir)/other.cpp \
-  $(srcdir)/delim.cpp \
-  $(srcdir)/sqrt.cpp \
-  $(srcdir)/pile.cpp \
-  $(srcdir)/special.cpp
-HDRS=\
-  $(srcdir)/box.h \
-  $(srcdir)/eqn.h \
-  $(srcdir)/pbox.h
-GRAM=$(srcdir)/eqn.y
-YTABC=eqn.cpp
-YTABH=eqn_tab.h
-NAMEPREFIX=$(g)
-MOSTLYCLEANADD=neqn
-RM=rm -f
-
-all: neqn
-
-neqn: neqn.sh $(SH_DEPS_SED_SCRIPT)
-       $(RM) $@
-       sed -e 's/@g@/$(g)/g' \
-           -f $(SH_DEPS_SED_SCRIPT) \
-           -e $(SH_SCRIPT_SED_CMD) $(srcdir)/neqn.sh >$@
-       chmod +x $@
-
-install_data: neqn
-       $(RM) $(DESTDIR)$(bindir)/$(NAMEPREFIX)neqn
-       $(INSTALL_SCRIPT) neqn $(DESTDIR)$(bindir)/$(NAMEPREFIX)neqn
-
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/$(NAMEPREFIX)neqn
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 210d0ab06e4d8d7b9c430c9b80694d3bf22b55af..2a221837ebee3d1d3b77204acc26fc9b97b2a916 100644 (file)
@@ -17,7 +17,7 @@ Consider whether there should be extra space at the side of piles.
 
 Provide scriptstyle displaystyle etc.
 
-Provide a nicer matrix syntax, eg
+Provide a nicer matrix syntax, e.g.,
 matrix ccc {
 a then b then c above
 e then f then g above
index a711ebc8b3ae7b5c7be7134c658cf3d225f50abd..1d51cb75a4da663c1136a41793506df210c3722c 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
 #include "pbox.h"
@@ -131,7 +131,7 @@ void set_param(const char *name, int value)
       *param_table[i].ptr = value;
       return;
     }
-  error("unrecognised parameter `%1'", name);
+  error("unrecognised parameter '%1'", name);
 }
 
 int script_style(int style)
@@ -360,7 +360,7 @@ void box::top_level()
   next_uid = 0;
 }
 
-// gpic defines this register so as to make geqn not produce `\x's
+// gpic defines this register so as to make geqn not produce '\x's
 #define EQN_NO_EXTRA_SPACE_REG "0x"
 
 void box::extra_space()
@@ -551,7 +551,7 @@ quoted_text_box::quoted_text_box(char *s) : text(s)
 
 quoted_text_box::~quoted_text_box()
 {
-  a_delete text;
+  free(text);
 }
 
 void quoted_text_box::output()
index 781971096b0349550c6fa1f55726f05aa403bac2..2ae647b37cd500ca07564300d02d5b736be1a989 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 class list_box;
 
index 10b5176b54f57082e9b61f30eab970aba2e70fc6..f6b7e78f2f7736e00697e5258587cbaa9a13937c 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
 #include "pbox.h"
@@ -301,7 +301,7 @@ static void define_extensible_string(char *delim, int uid,
        && (left_or_right & d->flags) != 0)
       break;
   if (i >= DELIM_TABLE_SIZE) {
-    error("there is no `%1' delimiter", delim);
+    error("there is no '%1' delimiter", delim);
     printf(".nr " DELIM_WIDTH_REG " 0\n");
     return;
   }
diff --git a/src/preproc/eqn/eqn.1.man b/src/preproc/eqn/eqn.1.man
new file mode 100644 (file)
index 0000000..022de4f
--- /dev/null
@@ -0,0 +1,1375 @@
+'\" t
+.TH @G@EQN @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@eqn \- format equations for troff or MathML
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr eqn_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.ie \n(.V<\n(.v \
+.  ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+.el \
+.  ds tx TeX
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY @g@eqn
+.OP \-rvCNR
+.OP \-d xy
+.OP \-T name
+.OP \-M dir
+.OP \-f F
+.OP \-s n
+.OP \-p n
+.OP \-m n
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This manual page describes the GNU version of
+.BR eqn ,
+which is part of the groff document formatting system.
+.
+.B eqn
+compiles descriptions of equations embedded within
+.B troff
+input files into commands that are understood by
+.BR troff .
+.
+Normally, it should be invoked using the
+.B \-e
+option of
+.BR groff .
+.
+The syntax is quite compatible with Unix eqn.
+.
+The output of GNU
+.B eqn
+cannot be processed with Unix troff;
+it must be processed with GNU troff.
+.
+If no files are given on the command line, the standard input is read.
+.
+A filename of
+.B \-
+causes the standard input to be read.
+.
+.
+.LP
+.B eqn
+searches for the file
+.I eqnrc
+in the directories given with the
+.B \-M
+option first, then in
+.IR @SYSTEMMACRODIR@ ,
+.IR @LOCALMACRODIR@ ,
+and finally in the standard macro directory
+.IR @MACRODIR@ .
+.
+If it exists,
+.B eqn
+processes it before the other input files.
+.
+The
+.B \-R
+option prevents this.
+.
+.
+.LP
+GNU
+.B eqn
+does not provide the functionality of neqn:
+it does not support low-resolution, typewriter-like devices
+(although it may work adequately for very simple input).
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.BI \-d xy
+Specify delimiters
+.I x
+and\~\c
+.I y
+for the left and right end, respectively, of in-line equations.
+.
+Any
+.B delim
+statements in the source file overrides this.
+.
+.TP
+.B \-C
+Recognize
+.B .EQ
+and
+.B .EN
+even when followed by a character other than space or newline.
+.
+Also, the statement
+.RB \[oq] "delim on" \[cq]
+is not handled specially.
+.
+.TP
+.B \-N
+Don't allow newlines within delimiters.
+.
+This option allows
+.B eqn
+to recover better from missing closing delimiters.
+.
+.TP
+.B \-v
+Print the version number.
+.
+.TP
+.B \-r
+Only one size reduction.
+.
+.TP
+.BI \-m n
+The minimum point-size is\~\c
+.IR n .
+.
+.B eqn
+does not reduce the size of subscripts or superscripts to
+a smaller size than\~\c
+.IR n .
+.
+.TP
+.BI \-T name
+The output is for device
+.IR name .
+.
+Normally, the only effect of this is to define a macro
+.I name
+with a value of\~\c
+.BR 1 ;
+.I eqnrc
+uses this to provide definitions appropriate for the output device.
+.
+However, if the specified device is \[lq]MathML\[rq], the output is
+MathML markup rather than troff commands, and
+.I eqnrc
+is not loaded at all.
+.
+The default output device is
+.BR @DEVICE@ .
+.
+.TP
+.BI \-M dir
+Search
+.I dir
+for
+.I eqnrc
+before the default directories.
+.
+.TP
+.B \-R
+Don't load
+.IR eqnrc .
+.
+.TP
+.BI \-f F
+This is equivalent to a
+.BI gfont\  F
+command.
+.
+.TP
+.BI \-s n
+This is equivalent to a
+.BI gsize\  n
+command.
+.
+This option is deprecated.
+.B eqn
+normally sets equations at whatever the current point size
+is when the equation is encountered.
+.
+.TP
+.BI \-p n
+This says that subscripts and superscripts should be
+.IR n \~points
+smaller than the surrounding text.
+.
+This option is deprecated.
+.
+Normally
+.B eqn
+sets subscripts and superscripts at 70% of the size of the surrounding
+text.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+Only the differences between GNU
+.B eqn
+and Unix eqn are described here.
+.
+.
+.LP
+GNU
+.B eqn
+emits Presentation MathML output when invoked with the
+.B "-T\~MathML"
+option.
+.
+.
+.LP
+GNU eqn sets the input token
+.B \&"..."
+as three periods or low dots, rather than the three centered dots of
+classic eqn.  To get three centered dots, write
+.B "cdots"
+or
+.BR "cdot cdot cdot".
+.
+.
+.LP
+Most of the new features of the GNU
+.B eqn
+input language are based on \*(tx.
+.
+There are some references to the differences between \*(tx and GNU
+.B eqn
+below;
+these may safely be ignored if you do not know \*(tx.
+.
+.
+.\" ====================================================================
+.SS Controlling delimiters
+.\" ====================================================================
+.
+If not in compatibility mode,
+.B eqn
+recognizes
+.
+.RS
+.LP
+.B delim on
+.RE
+.
+.LP
+to restore the delimiters which have been previously disabled
+with a call to
+.RB \[oq] "delim off" \[cq].
+.
+If delimiters haven't been specified, the call has no effect.
+.
+.
+.\" ====================================================================
+.SS Automatic spacing
+.\" ====================================================================
+.
+.B eqn
+gives each component of an equation a type, and adjusts the spacing
+between components using that type.
+.
+Possible types are described in the table below.
+.
+.
+.TS
+lB l.
+ordinary       T{
+an ordinary character such as \[oq]1\[cq] or
+.RI \[oq] x \[cq]
+T}
+operator       T{
+a large operator such as
+.ds Su \[oq]\s+5\(*S\s0\[cq]
+.if \n(.g .if !c\(*S .ds Su the summation operator
+\*(Su
+T}
+binary a binary operator such as \[oq]\[pl]\[cq]
+relation       a relation such as \[oq]=\[cq]
+opening        a opening bracket such as \[oq](\[cq]
+closing        a closing bracket such as \[oq])\[cq]
+punctuation    a punctuation character such as \[oq],\[cq]
+inner  a subformula contained within brackets
+suppress       a type that suppresses automatic spacing adjustment
+.TE
+.
+.
+.LP
+Components of an equation
+get a type in one of two ways.
+.
+.TP
+.BI type\  t\ e
+This yields an equation component that contains\~\c
+.I e
+but that has type\~\c
+.IR t ,
+where
+.I t
+is one of the types mentioned above.
+.
+For example,
+.B times
+is defined as
+.
+.RS
+.IP
+.B
+type "binary" \e(mu
+.RE
+.
+.IP
+The name of the type doesn't have to be quoted, but quoting protects
+from macro expansion.
+.
+.TP
+.BI chartype\  t\ text
+Unquoted groups of characters are split up into individual characters,
+and the type of each character is looked up;
+this changes the type that is stored for each character;
+it says that the characters in
+.I text
+from now on have type\~\c
+.IR t .
+For example,
+.
+.RS
+.IP
+.B
+chartype "punctuation" .,;:
+.RE
+.
+.IP
+would make the characters \[oq].,;:\[cq] have type punctuation
+whenever they subsequently appeared in an equation.
+.
+The type\~\c
+.I t
+can also be
+.B letter
+or
+.BR digit ;
+in these cases
+.B chartype
+changes the font type of the characters.
+.
+See subsection \[lq]Fonts\[rq] below.
+.
+.
+.\" ====================================================================
+.SS New primitives
+.\" ====================================================================
+.
+.TP
+.BI big\  e
+Enlarges the expression it modifies; intended to have semantics like
+CSS \[oq]large\[cq].
+.
+In troff output, the point size is increased by\~5; in MathML output,
+the expression uses
+.
+.RS
+.IP
+.EX
+<mstyle \%mathsize='big'>
+.EE
+.RE
+.
+.TP
+.IB e1\  smallover\  e2
+This is similar to
+.BR over ;
+.B smallover
+reduces the size of
+.I e1
+and
+.IR e2 ;
+it also puts less vertical space between
+.I e1
+or
+.I e2
+and the fraction bar.
+.
+The
+.B over
+primitive corresponds to the \*(tx
+.B \eover
+primitive in display styles;
+.B smallover
+corresponds to
+.B \eover
+in non-display styles.
+.
+.TP
+.BI vcenter\  e
+This vertically centers
+.I e
+about the math axis.
+.
+The math axis is the vertical position about which characters such as
+\[oq]\[pl]\[cq] and \[oq]\[mi]\[cq] are centered; also it is the
+vertical position used for the bar of fractions.
+.
+For example,
+.B sum
+is defined as
+.
+.RS
+.IP
+.B
+{ type "operator" vcenter size +5 \e(*S }
+.RE
+.
+.IP
+(Note that vcenter is silently ignored when generating MathML.)
+.
+.TP
+.IB e1\  accent\  e2
+This sets
+.I e2
+as an accent over
+.IR e1 .
+.I e2
+is assumed to be at the correct height for a lowercase letter;
+.I e2
+is moved down according to whether
+.I e1
+is taller or shorter than a lowercase letter.
+.
+For example,
+.B hat
+is defined as
+.
+.RS
+.IP
+.B
+accent { "^" }
+.RE
+.
+.IP
+.BR dotdot ,
+.BR dot ,
+.BR tilde ,
+.BR vec ,
+and
+.B dyad
+are also defined using the
+.B accent
+primitive.
+.
+.TP
+.IB e1\  uaccent\  e2
+This sets
+.I e2
+as an accent under
+.IR e1 .
+.I e2
+is assumed to be at the correct height for a character without a descender;
+.I e2
+is moved down if
+.I e1
+has a descender.
+.
+.B utilde
+is pre-defined using
+.B uaccent
+as a tilde accent below the baseline.
+.
+.TP
+.BI split\ \[dq] text \[dq]
+This has the same effect as simply
+.
+.RS
+.IP
+.I text
+.RE
+.
+.IP
+but
+.I text
+is not subject to macro expansion because it is quoted;
+.I text
+is split up and the spacing between individual characters is adjusted.
+.
+.TP
+.BI nosplit\  text
+This has the same effect as
+.
+.RS
+.IP
+.BI \[dq] text \[dq]
+.RE
+.
+.IP
+but because
+.I text
+is not quoted it is subject to macro expansion;
+.I text
+is not split up
+and the spacing between individual characters is not adjusted.
+.
+.TP
+.IB e\  opprime
+This is a variant of
+.B prime
+that acts as an operator on\~\c
+.IR e .
+.
+It produces a different result from
+.B prime
+in a case such as
+.BR A\ opprime\ sub\ 1 :
+with
+.B opprime
+the\~\c
+.B 1
+is tucked under the prime as a subscript to the\~\c
+.B A
+(as is conventional in mathematical typesetting),
+whereas with
+.B prime
+the\~\c
+.B 1
+is a subscript to the prime character.
+.
+The precedence of
+.B opprime
+is the same as that of
+.B bar
+and
+.BR under ,
+which is higher than that of everything except
+.B accent
+and
+.BR uaccent .
+.
+In unquoted text a\~\c
+.B \[aq]
+that is not the first character is treated like
+.BR opprime .
+.
+.TP
+.BI special\  text\ e
+This constructs a new object from\~\c
+.I e
+using a
+.BR @g@troff (@MAN1EXT@)
+macro named
+.IR text .
+.
+When the macro is called,
+the string
+.B 0s
+contains the output for\~\c
+.IR e ,
+and the number registers
+.BR 0w ,
+.BR 0h ,
+.BR 0d ,
+.BR 0skern ,
+and
+.B 0skew
+contain the width, height, depth, subscript kern, and skew of\~\c
+.IR e .
+.
+(The
+.I "subscript kern"
+of an object says how much a subscript on that object should be tucked in;
+the
+.I skew
+of an object says how far to the right of the center of the object an
+accent over the object should be placed.)
+.
+The macro must modify
+.B 0s
+so that it outputs the desired result with its origin at the current
+point, and increase the current horizontal position by the width
+of the object.
+.
+The number registers must also be modified so that they correspond to the
+result.
+.
+.IP
+For example, suppose you wanted a construct that \[oq]cancels\[cq] an
+expression by drawing a diagonal line through it.
+.
+.RS
+.IP
+.ft B
+.if t .ne 6+\n(.Vu
+.br
+\&.EQ
+.br
+define cancel 'special Ca'
+.br
+\&.EN
+.br
+\&.de Ca
+.br
+\&.\ \ ds 0s \e
+.br
+\eZ'\e\e*(0s'\e
+.br
+\ev'\e\en(0du'\e
+.br
+\eD'l \e\en(0wu -\e\en(0hu-\e\en(0du'\e
+.br
+\ev'\e\en(0hu'
+.br
+\&..
+.ft
+.RE
+.
+.IP
+Then you could cancel an expression\~\c
+.I e
+with
+.BI \%cancel\ {\  e\  }
+.
+.IP
+Here's a more complicated construct that draws a box round an
+expression:
+.
+.RS
+.IP
+.ft B
+.if t .ne 11+\n(.Vu
+\&.EQ
+.br
+define box 'special Bx'
+.br
+\&.EN
+.br
+\&.de Bx
+.br
+\&.\ \ ds 0s \e
+.br
+\eZ'\eh'1n'\e\e*(0s'\e
+.br
+\eZ'\e
+.br
+\ev'\e\en(0du+1n'\e
+.br
+\eD'l \e\en(0wu+2n 0'\e
+.br
+\eD'l 0 -\e\en(0hu-\e\en(0du-2n'\e
+.br
+\eD'l -\e\en(0wu-2n 0'\e
+.br
+\eD'l 0 \e\en(0hu+\e\en(0du+2n'\e
+.br
+\&'\e
+.br
+\eh'\e\en(0wu+2n'
+.br
+\&.\ \ nr 0w +2n
+.br
+\&.\ \ nr 0d +1n
+.br
+\&.\ \ nr 0h +1n
+.br
+\&..
+.ft
+.RE
+.
+.TP
+.BI space\  n
+A positive value of the integer\~\c
+.I n
+(in hundredths of an em) sets the vertical spacing before the
+equation, a negative value sets the spacing after the equation,
+replacing the default values.
+.
+This primitive provides an interface to
+.BR groff 's
+.B \ex
+escape (but with opposite sign).
+.
+.IP
+This keyword has no effect if the equation is part of a
+.B pic
+picture.
+.
+.
+.\" ====================================================================
+.SS Extended primitives
+.\" ====================================================================
+.
+.TP
+.BI col\  n\  {\  .\|.\|.\  }
+.TQ
+.BI ccol\  n\  {\  .\|.\|.\  }
+.TQ
+.BI lcol\  n\  {\  .\|.\|.\  }
+.TQ
+.BI rcol\  n\  {\  .\|.\|.\  }
+.TQ
+.BI pile\  n\  {\  .\|.\|.\  }
+.TQ
+.BI cpile\  n\  {\  .\|.\|.\  }
+.TQ
+.BI lpile\  n\  {\  .\|.\|.\  }
+.TQ
+.BI rpile\  n\  {\  .\|.\|.\  }
+The integer value\~\c
+.I n
+(in hundredths of an em) increases the vertical spacing between rows,
+using
+.BR groff 's
+.B \ex
+escape (the value has no effect in MathML mode).
+Negative values are possible but have no effect.
+If there is more than a single value given in a matrix, the biggest one
+is used.
+.
+.
+.\" ====================================================================
+.SS Customization
+.\" ====================================================================
+.
+When
+.B eqn
+is generating troff markup, the appearance of equations is controlled
+by a large number of parameters.
+.
+They have no effect when generating MathML mode, which pushes
+typesetting and fine motions downstream to a MathML rendering engine.
+.
+These parameters can be set using the
+.B set
+command.
+.
+.TP
+.BI set\  p\ n
+This sets parameter\~\c
+.I p
+to value\~\c
+.IR n ;
+.IR n \~is
+an integer.
+.
+For example,
+.
+.RS
+.IP
+.B
+set x_height 45
+.RE
+.
+.IP
+says that
+.B eqn
+should assume an x\~height of 0.45\~ems.
+.
+.
+.RS
+.LP
+Possible parameters are as follows.
+.
+Values are in units of hundredths of an em unless otherwise stated.
+.
+These descriptions are intended to be expository rather than
+definitive.
+.
+.TP
+.B minimum_size
+.B eqn
+doesn't set anything at a smaller point-size than this.
+.
+The value is in points.
+.
+.TP
+.B fat_offset
+The
+.B fat
+primitive emboldens an equation by overprinting two copies of the
+equation horizontally offset by this amount.
+.
+This parameter is not used in MathML mode; instead, fat text uses
+.
+.RS
+.IP
+.EX
+<mstyle mathvariant='double-struck'>
+.EE
+.RE
+.
+.TP
+.B over_hang
+A fraction bar is longer by twice this amount than
+the maximum of the widths of the numerator and denominator;
+in other words, it overhangs the numerator and
+denominator by at least this amount.
+.
+.TP
+.B accent_width
+When
+.B bar
+or
+.B under
+is applied to a single character,
+the line is this long.
+.
+Normally,
+.B bar
+or
+.B under
+produces a line whose length is the width of the object to which it applies;
+in the case of a single character,
+this tends to produce a line that looks too long.
+.
+.TP
+.B delimiter_factor
+Extensible delimiters produced with the
+.B left
+and
+.B right
+primitives have a combined height and depth of at least this many
+thousandths of twice the maximum amount by which the sub-equation that
+the delimiters enclose extends away from the axis.
+.
+.TP
+.B delimiter_shortfall
+Extensible delimiters produced with the
+.B left
+and
+.B right
+primitives have a combined height and depth not less than the
+difference of twice the maximum amount by which the sub-equation that
+the delimiters enclose extends away from the axis and this amount.
+.
+.TP
+.B null_delimiter_space
+This much horizontal space is inserted on each side of a fraction.
+.
+.TP
+.B script_space
+The width of subscripts and superscripts is increased by this amount.
+.
+.TP
+.B thin_space
+This amount of space is automatically inserted after punctuation
+characters.
+.
+.TP
+.B medium_space
+This amount of space is automatically inserted on either side of
+binary operators.
+.
+.TP
+.B thick_space
+This amount of space is automatically inserted on either side of
+relations.
+.
+.TP
+.B x_height
+The height of lowercase letters without ascenders such as \[oq]x\[cq].
+.
+.TP
+.B axis_height
+The height above the baseline of the center of characters such as
+\[oq]\[pl]\[cq] and \[oq]\[mi]\[cq].
+.
+It is important that this value is correct for the font
+you are using.
+.
+.TP
+.B default_rule_thickness
+This should set to the thickness of the
+.B \e(ru
+character, or the thickness of horizontal lines produced with the
+.B \eD
+escape sequence.
+.
+.TP
+.B num1
+The
+.B over
+command shifts up the numerator by at least this amount.
+.
+.TP
+.B num2
+The
+.B smallover
+command shifts up the numerator by at least this amount.
+.
+.TP
+.B denom1
+The
+.B over
+command shifts down the denominator by at least this amount.
+.
+.TP
+.B denom2
+The
+.B smallover
+command shifts down the denominator by at least this amount.
+.
+.TP
+.B sup1
+Normally superscripts are shifted up by at least this amount.
+.
+.TP
+.B sup2
+Superscripts within superscripts or upper limits
+or numerators of
+.B smallover
+fractions are shifted up by at least this amount.
+.
+This is usually less than sup1.
+.
+.TP
+.B sup3
+Superscripts within denominators or square roots
+or subscripts or lower limits are shifted up by at least
+this amount.
+.
+This is usually less than sup2.
+.
+.TP
+.B sub1
+Subscripts are normally shifted down by at least this amount.
+.
+.TP
+.B sub2
+When there is both a subscript and a superscript, the subscript is
+shifted down by at least this amount.
+.
+.TP
+.B sup_drop
+The baseline of a superscript is no more than this much amount below
+the top of the object on which the superscript is set.
+.
+.TP
+.B sub_drop
+The baseline of a subscript is at least this much below the bottom of
+the object on which the subscript is set.
+.
+.TP
+.B big_op_spacing1
+The baseline of an upper limit is at least this much above the top of
+the object on which the limit is set.
+.
+.TP
+.B big_op_spacing2
+The baseline of a lower limit is at least this much below the bottom
+of the object on which the limit is set.
+.
+.TP
+.B big_op_spacing3
+The bottom of an upper limit is at least this much above the top of
+the object on which the limit is set.
+.
+.TP
+.B big_op_spacing4
+The top of a lower limit is at least this much below the bottom of the
+object on which the limit is set.
+.
+.TP
+.B big_op_spacing5
+This much vertical space is added above and below limits.
+.
+.TP
+.B baseline_sep
+The baselines of the rows in a pile or matrix are normally this far
+apart.
+.
+In most cases this should be equal to the sum of
+.B num1
+and
+.BR denom1 .
+.
+.TP
+.B shift_down
+The midpoint between the top baseline and the bottom baseline in a
+matrix or pile is shifted down by this much from the axis.
+.
+In most cases this should be equal to
+.BR axis_height .
+.
+.TP
+.B column_sep
+This much space is added between columns in a matrix.
+.
+.TP
+.B matrix_side_sep
+This much space is added at each side of a matrix.
+.
+.TP
+.B draw_lines
+If this is non-zero, lines are drawn using the
+.B \eD
+escape sequence, rather than with the
+.B \el
+escape sequence and the
+.B \e(ru
+character.
+.
+.TP
+.B body_height
+The amount by which the height of the equation exceeds this is added
+as extra space before the line containing the equation (using
+.BR \ex ).
+.
+The default value is 85.
+.
+.TP
+.B body_depth
+The amount by which the depth of the equation exceeds this is added as
+extra space after the line containing the equation (using
+.BR \ex ).
+.
+The default value is 35.
+.
+.TP
+.B nroff
+If this is non-zero,
+then
+.B ndefine
+behaves like
+.B define
+and
+.B tdefine
+is ignored, otherwise
+.B tdefine
+behaves like
+.B define
+and
+.B ndefine
+is ignored.
+.
+The default value is\~0 (This is typically changed to\~1 by the
+.I eqnrc
+file for the
+.BR ascii ,
+.BR latin1 ,
+.BR utf8 ,
+and
+.B cp1047
+devices.)
+.
+.
+.LP
+A more precise description of the role of many of these
+parameters can be found in Appendix\~H of
+.IR "The \*(txbook" .
+.RE
+.
+.
+.\" ====================================================================
+.SS Macros
+.\" ====================================================================
+.
+Macros can take arguments.
+.
+In a macro body,
+.BI $ n
+where
+.I n
+is between 1 and\~9, is replaced by the
+.IR n th
+argument if the macro is called with arguments;
+if there are fewer than
+.IR n \~arguments,
+it is replaced by nothing.
+.
+A word containing a left parenthesis where the part of the word
+before the left parenthesis has been defined using the
+.B define
+command is recognized as a macro call with arguments; characters
+following the left parenthesis up to a matching right parenthesis are
+treated as comma-separated arguments; commas inside nested parentheses
+do not terminate an argument.
+.
+.TP
+.BI sdefine\  name\ X\ anything\ X
+This is like the
+.B define
+command, but
+.I name
+is not recognized if called with arguments.
+.
+.TP
+.BI include\ \[dq] file \[dq]
+.TQ
+.BI copy\ \[dq] file \[dq]
+Include the contents of
+.I file
+.RB ( include
+and
+.B copy
+are synonyms).
+.
+Lines of
+.I file
+beginning with
+.B .EQ
+or
+.B .EN
+are ignored.
+.
+.TP
+.BI ifdef\  name\ X\ anything\ X
+If
+.I name
+has been defined by
+.B define
+(or has been automatically defined because
+.I name
+is the output device) process
+.IR anything ;
+otherwise ignore
+.IR anything .
+.
+.I X
+can be any character not appearing in
+.IR anything .
+.
+.TP
+.BI undef\  name
+Remove definition of
+.IR name ,
+making it undefined.
+.
+.
+.LP
+Besides the macros mentioned above, the following definitions are available:
+.BR Alpha ,
+.BR Beta ,
+\&.\|.\|.,
+.B Omega
+(this is the same as
+.BR ALPHA ,
+.BR BETA ,
+\&.\|.\|.,
+.BR OMEGA ),
+.B ldots
+(three dots on the base line), and
+.BR dollar .
+.
+.
+.\" ====================================================================
+.SS Fonts
+.\" ====================================================================
+.
+.B eqn
+normally uses at least two fonts to set an equation:
+an italic font for letters,
+and a roman font for everything else.
+.
+The existing
+.B gfont
+command
+changes the font that is used as the italic font.
+.
+By default this is\~\c
+.BR I .
+The font that is used as the roman font can be changed using the new
+.B grfont
+command.
+.
+.TP
+.BI grfont\  f
+Set the roman font to\~\c
+.IR f .
+.
+.
+.LP
+The
+.B italic
+primitive uses the current italic font set by
+.BR gfont ;
+the
+.B roman
+primitive uses the current roman font set by
+.BR grfont .
+.
+There is also a new
+.B gbfont
+command, which changes the font used by the
+.B bold
+primitive.
+.
+If you only use the
+.BR roman ,
+.B italic
+and
+.B bold
+primitives to changes fonts within an equation, you can change all the
+fonts used by your equations just by using
+.BR gfont ,
+.B grfont
+and
+.B gbfont
+commands.
+.
+.
+.LP
+You can control which characters are treated as letters
+(and therefore set in italics) by using the
+.B chartype
+command described above.
+.
+A type of
+.B letter
+causes a character to be set in italic type.
+.
+A type of
+.B digit
+causes a character to be set in roman type.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @MACRODIR@/eqnrc
+Initialization file.
+.
+.
+.\" ====================================================================
+.SH MATHML MODE LIMITATIONS
+.\" ====================================================================
+.
+MathML is designed on the assumption that it cannot know the exact
+physical characteristics of the media and devices on which it will
+be rendered.
+.
+It does not support fine control of motions and sizes to the same
+degree troff does.
+.
+Thus:
+.
+.IP *
+.B eqn
+parameters have no effect on the generated MathML.
+.
+.IP *
+The
+.BR special ,
+.BR up ,
+.BR down ,
+.BR fwd ,
+and
+.B back
+operations cannot be implemented, and yield a MathML
+\[oq]<merror>\[cq] message instead.
+.
+.IP *
+The
+.B vcenter
+keyword is silently ignored, as centering on the math axis is the
+MathML default.
+.
+.IP *
+Characters that
+.B eqn
+over troff sets extra large \(en notably the integral sign \(en may
+appear too small and need to have their \[oq]<mstyle>\[cq] wrappers
+adjusted by hand.
+.
+.
+.LP
+As in its troff mode,
+.B eqn
+in MathML mode leaves the
+.B .EQ
+and
+.B .EN
+delimiters in place for displayed equations, but emits no explicit
+delimiters around inline equations.
+.
+They can, however, be recognized as strings that begin with
+\[oq]<math>\[cq] and end with \[oq]</math>\[cq] and do not cross line
+boundaries.
+.
+.
+.LP
+See section \[lq]Bugs\[rq] below for translation limits specific to
+.BR eqn .
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+.
+Inline equations are set at the point size that is current at the
+beginning of the input line.
+.
+.
+.LP
+In MathML mode, the
+.B mark
+and
+.B lineup
+features don't work.
+.
+These could, in theory, be implemented with \[oq]<maligngroup>\[cq]
+elements.
+.
+.
+.LP
+In MathML mode, each digit of a numeric literal gets a separate
+\[oq]<mn>\:</mn>\[cq] pair, and decimal points are tagged with
+\[oq]<mo>\:</mo>\[cq].
+.
+This is allowed by the specification, but inefficient.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR @g@pic (@MAN1EXT@),
+.BR groff_font (@MAN5EXT@),
+.I The\ \*[tx]book
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[eqn_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" tab-width: 12
+.\" End:
+.\" vim: set filetype=groff tabstop=12:
diff --git a/src/preproc/eqn/eqn.am b/src/preproc/eqn/eqn.am
new file mode 100644 (file)
index 0000000..a610781
--- /dev/null
@@ -0,0 +1,74 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += eqn
+prefixexecbin_SCRIPTS += neqn
+eqn_CPPFLAGS = \
+  $(AM_CPPFLAGS) \
+  -I $(top_srcdir)/src/preproc/eqn \
+  -I $(top_builddir)/src/preproc/eqn
+eqn_LDADD = $(LIBM) libgroff.a lib/libgnu.a
+eqn_SOURCES = \
+  src/preproc/eqn/main.cpp \
+  src/preproc/eqn/lex.cpp \
+  src/preproc/eqn/box.cpp \
+  src/preproc/eqn/limit.cpp \
+  src/preproc/eqn/list.cpp \
+  src/preproc/eqn/over.cpp \
+  src/preproc/eqn/text.cpp \
+  src/preproc/eqn/script.cpp \
+  src/preproc/eqn/mark.cpp \
+  src/preproc/eqn/other.cpp \
+  src/preproc/eqn/delim.cpp \
+  src/preproc/eqn/sqrt.cpp \
+  src/preproc/eqn/pile.cpp \
+  src/preproc/eqn/special.cpp \
+  src/preproc/eqn/eqn.ypp \
+  src/preproc/eqn/box.h \
+  src/preproc/eqn/pbox.h \
+  src/preproc/eqn/eqn.h
+
+PREFIXMAN1 += src/preproc/eqn/eqn.1 src/preproc/eqn/neqn.1
+EXTRA_DIST += \
+  src/preproc/eqn/TODO \
+  src/preproc/eqn/neqn.sh \
+  src/preproc/eqn/eqn.1.man \
+  src/preproc/eqn/neqn.1.man
+
+src/preproc/eqn/eqn-lex.$(OBJEXT): src/preproc/eqn/eqn.hpp
+CLEANFILES += \
+  src/preproc/eqn/eqn.hpp \
+  src/preproc/eqn/eqn.cpp \
+  src/preproc/eqn/eqn.output
+
+neqn: $(top_srcdir)/src/preproc/eqn/neqn.sh $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -e 's/[@]g[@]/$(g)/g' \
+              -f $(SH_DEPS_SED_SCRIPT) \
+              -e $(SH_SCRIPT_SED_CMD) \
+              $(top_srcdir)/src/preproc/eqn/neqn.sh \
+              >$@ \
+       && chmod +x $@
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index ea96fc1e60c278dadec543befcb90232384801f0..4ede4651fac6b27070ca702c6290b3962bf16204 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
+/* A Bison parser, made by GNU Bison 3.2.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
 
    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
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
 /* Identify Bison output.  */
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.0.2"
+#define YYBISON_VERSION "3.2"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -61,8 +64,8 @@
 
 
 
-/* Copy the first part of user declarations.  */
-#line 18 "eqn.y" /* yacc.c:339  */
+/* First part of user prologue.  */
+#line 18 "../src/preproc/eqn/eqn.ypp" /* yacc.c:338  */
 
 #include <stdio.h>
 #include <string.h>
@@ -74,13 +77,16 @@ extern int non_empty_flag;
 int yylex();
 void yyerror(const char *);
 
-#line 78 "eqn.cpp" /* yacc.c:339  */
-
+#line 81 "src/preproc/eqn/eqn.cpp" /* yacc.c:338  */
 # ifndef YY_NULLPTR
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTR nullptr
+#   else
+#    define YY_NULLPTR 0
+#   endif
 #  else
-#   define YY_NULLPTR 0
+#   define YY_NULLPTR ((void*)0)
 #  endif
 # endif
 
@@ -94,8 +100,8 @@ void yyerror(const char *);
 
 /* In a future release of Bison, this section will be replaced
    by #include "y.tab.h".  */
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
+#ifndef YY_YY_SRC_PREPROC_EQN_EQN_HPP_INCLUDED
+# define YY_YY_SRC_PREPROC_EQN_EQN_HPP_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -231,10 +237,10 @@ extern int yydebug;
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
+
 union YYSTYPE
 {
-#line 30 "eqn.y" /* yacc.c:355  */
+#line 30 "../src/preproc/eqn/eqn.ypp" /* yacc.c:353  */
 
        char *str;
        box *b;
@@ -243,8 +249,10 @@ union YYSTYPE
        int n;
        column *col;
 
-#line 247 "eqn.cpp" /* yacc.c:355  */
+#line 253 "src/preproc/eqn/eqn.cpp" /* yacc.c:353  */
 };
+
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
 #endif
@@ -254,11 +262,9 @@ extern YYSTYPE yylval;
 
 int yyparse (void);
 
-#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
+#endif /* !YY_YY_SRC_PREPROC_EQN_EQN_HPP_INCLUDED  */
 
-/* Copy the second part of user declarations.  */
 
-#line 262 "eqn.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -279,13 +285,13 @@ typedef signed char yytype_int8;
 #ifdef YYTYPE_UINT16
 typedef YYTYPE_UINT16 yytype_uint16;
 #else
-typedef unsigned short int yytype_uint16;
+typedef unsigned short yytype_uint16;
 #endif
 
 #ifdef YYTYPE_INT16
 typedef YYTYPE_INT16 yytype_int16;
 #else
-typedef short int yytype_int16;
+typedef short yytype_int16;
 #endif
 
 #ifndef YYSIZE_T
@@ -297,7 +303,7 @@ typedef short int yytype_int16;
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
@@ -333,15 +339,6 @@ typedef short int yytype_int16;
 # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
 #endif
 
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
-# endif
-#endif
-
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
 # define YYUSE(E) ((void) (E))
@@ -349,7 +346,7 @@ typedef short int yytype_int16;
 # define YYUSE(E) /* empty */
 #endif
 
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
     _Pragma ("GCC diagnostic push") \
@@ -517,7 +514,7 @@ union yyalloc
 #define YYMAXUTOK   315
 
 #define YYTRANSLATE(YYX)                                                \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+  ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
    as returned by yylex, without out-of-bounds checking.  */
@@ -876,37 +873,37 @@ do {                                                                      \
 } while (0)
 
 
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
 
 static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
 {
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
 # endif
   YYUSE (yytype);
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
 static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
 {
-  YYFPRINTF (yyoutput, "%s %s (",
+  YYFPRINTF (yyo, "%s %s (",
              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yytype, yyvaluep);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -940,7 +937,7 @@ do {                                                            \
 static void
 yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
 {
-  unsigned long int yylno = yyrline[yyrule];
+  unsigned long yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
@@ -1073,7 +1070,7 @@ yytnamerr (char *yyres, const char *yystr)
   if (! yyres)
     return yystrlen (yystr);
 
-  return yystpcpy (yyres, yystr) - yyres;
+  return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres);
 }
 # endif
 
@@ -1166,6 +1163,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
       case N:                               \
         yyformat = S;                       \
       break
+    default: /* Avoid compiler warnings. */
       YYCASE_(0, YY_("syntax error"));
       YYCASE_(1, YY_("syntax error, unexpected %s"));
       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
@@ -1314,12 +1312,12 @@ yyparse (void)
   yyssp++;
 
  yysetstate:
-  *yyssp = yystate;
+  *yyssp = (yytype_int16) yystate;
 
   if (yyss + yystacksize - 1 <= yyssp)
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
 
 #ifdef yyoverflow
       {
@@ -1337,7 +1335,6 @@ yyparse (void)
                     &yyss1, yysize * sizeof (*yyssp),
                     &yyvs1, yysize * sizeof (*yyvsp),
                     &yystacksize);
-
         yyss = yyss1;
         yyvs = yyvs1;
       }
@@ -1371,7 +1368,7 @@ yyparse (void)
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long int) yystacksize));
+                  (unsigned long) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
         YYABORT;
@@ -1482,19 +1479,19 @@ yyreduce:
   switch (yyn)
     {
         case 3:
-#line 124 "eqn.y" /* yacc.c:1646  */
+#line 124 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[0].b)->top_level(); non_empty_flag = 1; }
-#line 1488 "eqn.cpp" /* yacc.c:1646  */
+#line 1485 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 4:
-#line 129 "eqn.y" /* yacc.c:1646  */
+#line 129 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = (yyvsp[0].b); }
-#line 1494 "eqn.cpp" /* yacc.c:1646  */
+#line 1491 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 5:
-#line 131 "eqn.y" /* yacc.c:1646  */
+#line 131 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     {
                  list_box *lb = (yyvsp[-1].b)->to_list_box();
                  if (!lb)
@@ -1502,436 +1499,436 @@ yyreduce:
                  lb->append((yyvsp[0].b));
                  (yyval.b) = lb;
                }
-#line 1506 "eqn.cpp" /* yacc.c:1646  */
+#line 1503 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 6:
-#line 142 "eqn.y" /* yacc.c:1646  */
+#line 142 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = (yyvsp[0].b); }
-#line 1512 "eqn.cpp" /* yacc.c:1646  */
+#line 1509 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 7:
-#line 144 "eqn.y" /* yacc.c:1646  */
+#line 144 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_mark_box((yyvsp[0].b)); }
-#line 1518 "eqn.cpp" /* yacc.c:1646  */
+#line 1515 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 8:
-#line 146 "eqn.y" /* yacc.c:1646  */
+#line 146 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_lineup_box((yyvsp[0].b)); }
-#line 1524 "eqn.cpp" /* yacc.c:1646  */
+#line 1521 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 9:
-#line 151 "eqn.y" /* yacc.c:1646  */
+#line 151 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = (yyvsp[0].b); }
-#line 1530 "eqn.cpp" /* yacc.c:1646  */
+#line 1527 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 10:
-#line 153 "eqn.y" /* yacc.c:1646  */
+#line 153 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_limit_box((yyvsp[-2].b), 0, (yyvsp[0].b)); }
-#line 1536 "eqn.cpp" /* yacc.c:1646  */
+#line 1533 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 11:
-#line 155 "eqn.y" /* yacc.c:1646  */
+#line 155 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_limit_box((yyvsp[-2].b), (yyvsp[0].b), 0); }
-#line 1542 "eqn.cpp" /* yacc.c:1646  */
+#line 1539 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 12:
-#line 157 "eqn.y" /* yacc.c:1646  */
+#line 157 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_limit_box((yyvsp[-4].b), (yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1548 "eqn.cpp" /* yacc.c:1646  */
+#line 1545 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 13:
-#line 159 "eqn.y" /* yacc.c:1646  */
+#line 159 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_limit_box((yyvsp[-4].b), make_limit_box((yyvsp[-2].b), (yyvsp[0].b), 0), 0); }
-#line 1554 "eqn.cpp" /* yacc.c:1646  */
+#line 1551 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 14:
-#line 164 "eqn.y" /* yacc.c:1646  */
+#line 164 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = (yyvsp[0].b); }
-#line 1560 "eqn.cpp" /* yacc.c:1646  */
+#line 1557 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 15:
-#line 166 "eqn.y" /* yacc.c:1646  */
+#line 166 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_sqrt_box((yyvsp[0].b)); }
-#line 1566 "eqn.cpp" /* yacc.c:1646  */
+#line 1563 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 16:
-#line 168 "eqn.y" /* yacc.c:1646  */
+#line 168 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_over_box((yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1572 "eqn.cpp" /* yacc.c:1646  */
+#line 1569 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 17:
-#line 170 "eqn.y" /* yacc.c:1646  */
+#line 170 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_small_over_box((yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1578 "eqn.cpp" /* yacc.c:1646  */
+#line 1575 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 18:
-#line 175 "eqn.y" /* yacc.c:1646  */
+#line 175 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = (yyvsp[0].b); }
-#line 1584 "eqn.cpp" /* yacc.c:1646  */
+#line 1581 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 19:
-#line 177 "eqn.y" /* yacc.c:1646  */
+#line 177 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_script_box((yyvsp[-2].b), 0, (yyvsp[0].b)); }
-#line 1590 "eqn.cpp" /* yacc.c:1646  */
+#line 1587 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 20:
-#line 182 "eqn.y" /* yacc.c:1646  */
+#line 182 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = (yyvsp[0].b); }
-#line 1596 "eqn.cpp" /* yacc.c:1646  */
+#line 1593 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 21:
-#line 184 "eqn.y" /* yacc.c:1646  */
+#line 184 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_script_box((yyvsp[-2].b), (yyvsp[0].b), 0); }
-#line 1602 "eqn.cpp" /* yacc.c:1646  */
+#line 1599 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 22:
-#line 186 "eqn.y" /* yacc.c:1646  */
+#line 186 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_script_box((yyvsp[-4].b), (yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1608 "eqn.cpp" /* yacc.c:1646  */
+#line 1605 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 23:
-#line 191 "eqn.y" /* yacc.c:1646  */
+#line 191 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = split_text((yyvsp[0].str)); }
-#line 1614 "eqn.cpp" /* yacc.c:1646  */
+#line 1611 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 24:
-#line 193 "eqn.y" /* yacc.c:1646  */
+#line 193 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new quoted_text_box((yyvsp[0].str)); }
-#line 1620 "eqn.cpp" /* yacc.c:1646  */
+#line 1617 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 25:
-#line 195 "eqn.y" /* yacc.c:1646  */
+#line 195 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = split_text((yyvsp[0].str)); }
-#line 1626 "eqn.cpp" /* yacc.c:1646  */
+#line 1623 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 26:
-#line 197 "eqn.y" /* yacc.c:1646  */
+#line 197 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new quoted_text_box((yyvsp[0].str)); }
-#line 1632 "eqn.cpp" /* yacc.c:1646  */
+#line 1629 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 27:
-#line 199 "eqn.y" /* yacc.c:1646  */
+#line 199 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new half_space_box; }
-#line 1638 "eqn.cpp" /* yacc.c:1646  */
+#line 1635 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 28:
-#line 201 "eqn.y" /* yacc.c:1646  */
+#line 201 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new space_box; }
-#line 1644 "eqn.cpp" /* yacc.c:1646  */
+#line 1641 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 29:
-#line 203 "eqn.y" /* yacc.c:1646  */
+#line 203 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new tab_box; }
-#line 1650 "eqn.cpp" /* yacc.c:1646  */
+#line 1647 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 30:
-#line 205 "eqn.y" /* yacc.c:1646  */
+#line 205 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = (yyvsp[-1].b); }
-#line 1656 "eqn.cpp" /* yacc.c:1646  */
+#line 1653 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 31:
-#line 207 "eqn.y" /* yacc.c:1646  */
+#line 207 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[0].pb)->set_alignment(CENTER_ALIGN); (yyval.b) = (yyvsp[0].pb); }
-#line 1662 "eqn.cpp" /* yacc.c:1646  */
+#line 1659 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 32:
-#line 209 "eqn.y" /* yacc.c:1646  */
+#line 209 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[0].pb)->set_alignment(LEFT_ALIGN); (yyval.b) = (yyvsp[0].pb); }
-#line 1668 "eqn.cpp" /* yacc.c:1646  */
+#line 1665 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 33:
-#line 211 "eqn.y" /* yacc.c:1646  */
+#line 211 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[0].pb)->set_alignment(RIGHT_ALIGN); (yyval.b) = (yyvsp[0].pb); }
-#line 1674 "eqn.cpp" /* yacc.c:1646  */
+#line 1671 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 34:
-#line 213 "eqn.y" /* yacc.c:1646  */
+#line 213 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[0].pb)->set_alignment(CENTER_ALIGN); (yyval.b) = (yyvsp[0].pb); }
-#line 1680 "eqn.cpp" /* yacc.c:1646  */
+#line 1677 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 35:
-#line 215 "eqn.y" /* yacc.c:1646  */
+#line 215 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = (yyvsp[-1].mb); }
-#line 1686 "eqn.cpp" /* yacc.c:1646  */
+#line 1683 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 36:
-#line 217 "eqn.y" /* yacc.c:1646  */
+#line 217 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_delim_box((yyvsp[-3].str), (yyvsp[-2].b), (yyvsp[0].str)); }
-#line 1692 "eqn.cpp" /* yacc.c:1646  */
+#line 1689 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 37:
-#line 219 "eqn.y" /* yacc.c:1646  */
+#line 219 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_delim_box((yyvsp[-1].str), (yyvsp[0].b), 0); }
-#line 1698 "eqn.cpp" /* yacc.c:1646  */
+#line 1695 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 38:
-#line 221 "eqn.y" /* yacc.c:1646  */
+#line 221 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_overline_box((yyvsp[-1].b)); }
-#line 1704 "eqn.cpp" /* yacc.c:1646  */
+#line 1701 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 39:
-#line 223 "eqn.y" /* yacc.c:1646  */
+#line 223 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_underline_box((yyvsp[-1].b)); }
-#line 1710 "eqn.cpp" /* yacc.c:1646  */
+#line 1707 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 40:
-#line 225 "eqn.y" /* yacc.c:1646  */
+#line 225 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_prime_box((yyvsp[-1].b)); }
-#line 1716 "eqn.cpp" /* yacc.c:1646  */
+#line 1713 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 41:
-#line 227 "eqn.y" /* yacc.c:1646  */
+#line 227 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_accent_box((yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1722 "eqn.cpp" /* yacc.c:1646  */
+#line 1719 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 42:
-#line 229 "eqn.y" /* yacc.c:1646  */
+#line 229 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_uaccent_box((yyvsp[-2].b), (yyvsp[0].b)); }
-#line 1728 "eqn.cpp" /* yacc.c:1646  */
+#line 1725 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 43:
-#line 231 "eqn.y" /* yacc.c:1646  */
+#line 231 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new font_box(strsave(get_grfont()), (yyvsp[0].b)); }
-#line 1734 "eqn.cpp" /* yacc.c:1646  */
+#line 1731 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 44:
-#line 233 "eqn.y" /* yacc.c:1646  */
+#line 233 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new font_box(strsave(get_gbfont()), (yyvsp[0].b)); }
-#line 1740 "eqn.cpp" /* yacc.c:1646  */
+#line 1737 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 45:
-#line 235 "eqn.y" /* yacc.c:1646  */
+#line 235 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new font_box(strsave(get_gfont()), (yyvsp[0].b)); }
-#line 1746 "eqn.cpp" /* yacc.c:1646  */
+#line 1743 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 46:
-#line 237 "eqn.y" /* yacc.c:1646  */
+#line 237 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new fat_box((yyvsp[0].b)); }
-#line 1752 "eqn.cpp" /* yacc.c:1646  */
+#line 1749 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 47:
-#line 239 "eqn.y" /* yacc.c:1646  */
+#line 239 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new font_box((yyvsp[-1].str), (yyvsp[0].b)); }
-#line 1758 "eqn.cpp" /* yacc.c:1646  */
+#line 1755 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 48:
-#line 241 "eqn.y" /* yacc.c:1646  */
+#line 241 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new size_box((yyvsp[-1].str), (yyvsp[0].b)); }
-#line 1764 "eqn.cpp" /* yacc.c:1646  */
+#line 1761 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 49:
-#line 243 "eqn.y" /* yacc.c:1646  */
+#line 243 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new hmotion_box((yyvsp[-1].n), (yyvsp[0].b)); }
-#line 1770 "eqn.cpp" /* yacc.c:1646  */
+#line 1767 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 50:
-#line 245 "eqn.y" /* yacc.c:1646  */
+#line 245 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new hmotion_box(-(yyvsp[-1].n), (yyvsp[0].b)); }
-#line 1776 "eqn.cpp" /* yacc.c:1646  */
+#line 1773 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 51:
-#line 247 "eqn.y" /* yacc.c:1646  */
+#line 247 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new vmotion_box((yyvsp[-1].n), (yyvsp[0].b)); }
-#line 1782 "eqn.cpp" /* yacc.c:1646  */
+#line 1779 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 52:
-#line 249 "eqn.y" /* yacc.c:1646  */
+#line 249 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new vmotion_box(-(yyvsp[-1].n), (yyvsp[0].b)); }
-#line 1788 "eqn.cpp" /* yacc.c:1646  */
+#line 1785 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 53:
-#line 251 "eqn.y" /* yacc.c:1646  */
+#line 251 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[0].b)->set_spacing_type((yyvsp[-1].str)); (yyval.b) = (yyvsp[0].b); }
-#line 1794 "eqn.cpp" /* yacc.c:1646  */
+#line 1791 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 54:
-#line 253 "eqn.y" /* yacc.c:1646  */
+#line 253 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = new vcenter_box((yyvsp[0].b)); }
-#line 1800 "eqn.cpp" /* yacc.c:1646  */
+#line 1797 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 55:
-#line 255 "eqn.y" /* yacc.c:1646  */
+#line 255 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.b) = make_special_box((yyvsp[-1].str), (yyvsp[0].b)); }
-#line 1806 "eqn.cpp" /* yacc.c:1646  */
+#line 1803 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 56:
-#line 260 "eqn.y" /* yacc.c:1646  */
+#line 260 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     {
                  int n;
                  if (sscanf((yyvsp[0].str), "%d", &n) == 1)
                    (yyval.n) = n;
                  a_delete (yyvsp[0].str);
                }
-#line 1817 "eqn.cpp" /* yacc.c:1646  */
+#line 1814 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 57:
-#line 270 "eqn.y" /* yacc.c:1646  */
+#line 270 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.pb) = new pile_box((yyvsp[0].b)); }
-#line 1823 "eqn.cpp" /* yacc.c:1646  */
+#line 1820 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 58:
-#line 272 "eqn.y" /* yacc.c:1646  */
+#line 272 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[-2].pb)->append((yyvsp[0].b)); (yyval.pb) = (yyvsp[-2].pb); }
-#line 1829 "eqn.cpp" /* yacc.c:1646  */
+#line 1826 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 59:
-#line 277 "eqn.y" /* yacc.c:1646  */
+#line 277 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.pb) = (yyvsp[-1].pb); }
-#line 1835 "eqn.cpp" /* yacc.c:1646  */
+#line 1832 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 60:
-#line 279 "eqn.y" /* yacc.c:1646  */
+#line 279 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[-1].pb)->set_space((yyvsp[-3].n)); (yyval.pb) = (yyvsp[-1].pb); }
-#line 1841 "eqn.cpp" /* yacc.c:1646  */
+#line 1838 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 61:
-#line 284 "eqn.y" /* yacc.c:1646  */
+#line 284 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.mb) = new matrix_box((yyvsp[0].col)); }
-#line 1847 "eqn.cpp" /* yacc.c:1646  */
+#line 1844 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 62:
-#line 286 "eqn.y" /* yacc.c:1646  */
+#line 286 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[-1].mb)->append((yyvsp[0].col)); (yyval.mb) = (yyvsp[-1].mb); }
-#line 1853 "eqn.cpp" /* yacc.c:1646  */
+#line 1850 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 63:
-#line 291 "eqn.y" /* yacc.c:1646  */
+#line 291 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.col) = new column((yyvsp[0].b)); }
-#line 1859 "eqn.cpp" /* yacc.c:1646  */
+#line 1856 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 64:
-#line 293 "eqn.y" /* yacc.c:1646  */
+#line 293 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[-2].col)->append((yyvsp[0].b)); (yyval.col) = (yyvsp[-2].col); }
-#line 1865 "eqn.cpp" /* yacc.c:1646  */
+#line 1862 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 65:
-#line 298 "eqn.y" /* yacc.c:1646  */
+#line 298 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.col) = (yyvsp[-1].col); }
-#line 1871 "eqn.cpp" /* yacc.c:1646  */
+#line 1868 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 66:
-#line 300 "eqn.y" /* yacc.c:1646  */
+#line 300 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[-1].col)->set_space((yyvsp[-3].n)); (yyval.col) = (yyvsp[-1].col); }
-#line 1877 "eqn.cpp" /* yacc.c:1646  */
+#line 1874 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 67:
-#line 305 "eqn.y" /* yacc.c:1646  */
+#line 305 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[0].col)->set_alignment(CENTER_ALIGN); (yyval.col) = (yyvsp[0].col); }
-#line 1883 "eqn.cpp" /* yacc.c:1646  */
+#line 1880 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 68:
-#line 307 "eqn.y" /* yacc.c:1646  */
+#line 307 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[0].col)->set_alignment(LEFT_ALIGN); (yyval.col) = (yyvsp[0].col); }
-#line 1889 "eqn.cpp" /* yacc.c:1646  */
+#line 1886 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 69:
-#line 309 "eqn.y" /* yacc.c:1646  */
+#line 309 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[0].col)->set_alignment(RIGHT_ALIGN); (yyval.col) = (yyvsp[0].col); }
-#line 1895 "eqn.cpp" /* yacc.c:1646  */
+#line 1892 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 70:
-#line 311 "eqn.y" /* yacc.c:1646  */
+#line 311 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyvsp[0].col)->set_alignment(CENTER_ALIGN); (yyval.col) = (yyvsp[0].col); }
-#line 1901 "eqn.cpp" /* yacc.c:1646  */
+#line 1898 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 71:
-#line 315 "eqn.y" /* yacc.c:1646  */
+#line 315 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.str) = (yyvsp[0].str); }
-#line 1907 "eqn.cpp" /* yacc.c:1646  */
+#line 1904 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 72:
-#line 317 "eqn.y" /* yacc.c:1646  */
+#line 317 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.str) = (yyvsp[0].str); }
-#line 1913 "eqn.cpp" /* yacc.c:1646  */
+#line 1910 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 73:
-#line 322 "eqn.y" /* yacc.c:1646  */
+#line 322 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.str) = (yyvsp[0].str); }
-#line 1919 "eqn.cpp" /* yacc.c:1646  */
+#line 1916 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 74:
-#line 324 "eqn.y" /* yacc.c:1646  */
+#line 324 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.str) = strsave("{"); }
-#line 1925 "eqn.cpp" /* yacc.c:1646  */
+#line 1922 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
   case 75:
-#line 326 "eqn.y" /* yacc.c:1646  */
+#line 326 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1645  */
     { (yyval.str) = strsave("}"); }
-#line 1931 "eqn.cpp" /* yacc.c:1646  */
+#line 1928 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
     break;
 
 
-#line 1935 "eqn.cpp" /* yacc.c:1646  */
+#line 1932 "src/preproc/eqn/eqn.cpp" /* yacc.c:1645  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -1956,14 +1953,13 @@ yyreduce:
   /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   goto yynewstate;
 
@@ -2159,5 +2155,5 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 329 "eqn.y" /* yacc.c:1906  */
+#line 329 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1903  */
 
index ed2d420961bb114023c2323a0fa57690133980ab..0a506a0026ce2f1adf37b1e17db7a1da1873cefb 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
diff --git a/src/preproc/eqn/eqn.hpp b/src/preproc/eqn/eqn.hpp
new file mode 100644 (file)
index 0000000..32a32a5
--- /dev/null
@@ -0,0 +1,198 @@
+/* A Bison parser, made by GNU Bison 3.2.  */
+
+/* Bison interface for Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
+#ifndef YY_YY_SRC_PREPROC_EQN_EQN_HPP_INCLUDED
+# define YY_YY_SRC_PREPROC_EQN_EQN_HPP_INCLUDED
+/* Debug traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token type.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+  enum yytokentype
+  {
+    OVER = 258,
+    SMALLOVER = 259,
+    SQRT = 260,
+    SUB = 261,
+    SUP = 262,
+    LPILE = 263,
+    RPILE = 264,
+    CPILE = 265,
+    PILE = 266,
+    LEFT = 267,
+    RIGHT = 268,
+    TO = 269,
+    FROM = 270,
+    SIZE = 271,
+    FONT = 272,
+    ROMAN = 273,
+    BOLD = 274,
+    ITALIC = 275,
+    FAT = 276,
+    ACCENT = 277,
+    BAR = 278,
+    UNDER = 279,
+    ABOVE = 280,
+    TEXT = 281,
+    QUOTED_TEXT = 282,
+    FWD = 283,
+    BACK = 284,
+    DOWN = 285,
+    UP = 286,
+    MATRIX = 287,
+    COL = 288,
+    LCOL = 289,
+    RCOL = 290,
+    CCOL = 291,
+    MARK = 292,
+    LINEUP = 293,
+    TYPE = 294,
+    VCENTER = 295,
+    PRIME = 296,
+    SPLIT = 297,
+    NOSPLIT = 298,
+    UACCENT = 299,
+    SPECIAL = 300,
+    SPACE = 301,
+    GFONT = 302,
+    GSIZE = 303,
+    DEFINE = 304,
+    NDEFINE = 305,
+    TDEFINE = 306,
+    SDEFINE = 307,
+    UNDEF = 308,
+    IFDEF = 309,
+    INCLUDE = 310,
+    DELIM = 311,
+    CHARTYPE = 312,
+    SET = 313,
+    GRFONT = 314,
+    GBFONT = 315
+  };
+#endif
+/* Tokens.  */
+#define OVER 258
+#define SMALLOVER 259
+#define SQRT 260
+#define SUB 261
+#define SUP 262
+#define LPILE 263
+#define RPILE 264
+#define CPILE 265
+#define PILE 266
+#define LEFT 267
+#define RIGHT 268
+#define TO 269
+#define FROM 270
+#define SIZE 271
+#define FONT 272
+#define ROMAN 273
+#define BOLD 274
+#define ITALIC 275
+#define FAT 276
+#define ACCENT 277
+#define BAR 278
+#define UNDER 279
+#define ABOVE 280
+#define TEXT 281
+#define QUOTED_TEXT 282
+#define FWD 283
+#define BACK 284
+#define DOWN 285
+#define UP 286
+#define MATRIX 287
+#define COL 288
+#define LCOL 289
+#define RCOL 290
+#define CCOL 291
+#define MARK 292
+#define LINEUP 293
+#define TYPE 294
+#define VCENTER 295
+#define PRIME 296
+#define SPLIT 297
+#define NOSPLIT 298
+#define UACCENT 299
+#define SPECIAL 300
+#define SPACE 301
+#define GFONT 302
+#define GSIZE 303
+#define DEFINE 304
+#define NDEFINE 305
+#define TDEFINE 306
+#define SDEFINE 307
+#define UNDEF 308
+#define IFDEF 309
+#define INCLUDE 310
+#define DELIM 311
+#define CHARTYPE 312
+#define SET 313
+#define GRFONT 314
+#define GBFONT 315
+
+/* Value type.  */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+
+union YYSTYPE
+{
+#line 30 "../src/preproc/eqn/eqn.ypp" /* yacc.c:1906  */
+
+       char *str;
+       box *b;
+       pile_box *pb;
+       matrix_box *mb;
+       int n;
+       column *col;
+
+#line 186 "src/preproc/eqn/eqn.hpp" /* yacc.c:1906  */
+};
+
+typedef union YYSTYPE YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+#endif /* !YY_YY_SRC_PREPROC_EQN_EQN_HPP_INCLUDED  */
diff --git a/src/preproc/eqn/eqn.man b/src/preproc/eqn/eqn.man
deleted file mode 100644 (file)
index 1936daa..0000000
+++ /dev/null
@@ -1,1406 +0,0 @@
-.TH @G@EQN @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@eqn \- format equations for troff or MathML
-.
-.
-.\" license (copying)
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.ie \n(.V<\n(.v \
-.  ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-.el \
-.  ds tx TeX
-.
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.  ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.  el .TP "\\$1"
-..
-.
-.\" The BSD man macros can't handle " in arguments to font change macros,
-.\" so use \(ts instead of ".
-.tr \(ts"\""
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY @g@eqn
-.OP \-rvCNR
-.OP \-d xy
-.OP \-T name
-.OP \-M dir
-.OP \-f F
-.OP \-s n
-.OP \-p n
-.OP \-m n
-.RI [ files\|.\|.\|. ]
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the GNU version of
-.BR eqn ,
-which is part of the groff document formatting system.
-.
-.B eqn
-compiles descriptions of equations embedded within
-.B troff
-input files into commands that are understood by
-.BR troff .
-.
-Normally, it should be invoked using the
-.B \-e
-option of
-.BR groff .
-.
-The syntax is quite compatible with Unix eqn.
-.
-The output of GNU
-.B eqn
-cannot be processed with Unix troff;
-it must be processed with GNU troff.
-.
-If no files are given on the command line, the standard input is read.
-.
-A filename of
-.B \-
-causes the standard input to be read.
-.
-.
-.LP
-.B eqn
-searches for the file
-.B eqnrc
-in the directories given with the
-.B \-M
-option first, then in
-.BR @SYSTEMMACRODIR@ ,
-.BR @LOCALMACRODIR@ ,
-and finally in the standard macro directory
-.BR @MACRODIR@ .
-.
-If it exists,
-.B eqn
-processes it before the other input files.
-.
-The
-.B \-R
-option prevents this.
-.
-.
-.LP
-GNU
-.B eqn
-does not provide the functionality of neqn:
-it does not support low-resolution, typewriter-like devices
-(although it may work adequately for very simple input).
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.LP
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.TP
-.BI \-d xy
-Specify delimiters
-.I x
-and\~\c
-.I y
-for the left and right end, respectively, of in-line equations.
-.
-Any
-.B delim
-statements in the source file overrides this.
-.
-.TP
-.B \-C
-Recognize
-.B .EQ
-and
-.B .EN
-even when followed by a character other than space or newline.
-.
-Also, the statement
-.RB \[oq] "delim on" \[cq]
-is not handled specially.
-.
-.TP
-.B \-N
-Don\[aq]t allow newlines within delimiters.
-.
-This option allows
-.B eqn
-to recover better from missing closing delimiters.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.B \-r
-Only one size reduction.
-.
-.TP
-.BI \-m n
-The minimum point-size is\~\c
-.IR n .
-.
-.B eqn
-does not reduce the size of subscripts or superscripts to
-a smaller size than\~\c
-.IR n .
-.
-.TP
-.BI \-T name
-The output is for device
-.IR name .
-.
-Normally, the only effect of this is to define a macro
-.I name
-with a value of\~\c
-.BR 1 ;
-.B eqnrc
-uses this to provide definitions appropriate for the output device.
-.
-However, if the specified device is \[lq]MathML\[rq], the output is
-MathML markup rather than troff commands, and
-.B eqnrc
-is not loaded at all.
-.
-The default output device is
-.BR @DEVICE@ .
-.
-.TP
-.BI \-M dir
-Search
-.I dir
-for
-.B eqnrc
-before the default directories.
-.
-.TP
-.B \-R
-Don\[aq]t load
-.BR eqnrc .
-.
-.TP
-.BI \-f F
-This is equivalent to a
-.BI gfont\  F
-command.
-.
-.TP
-.BI \-s n
-This is equivalent to a
-.BI gsize\  n
-command.
-.
-This option is deprecated.
-.B eqn
-normally sets equations at whatever the current point size
-is when the equation is encountered.
-.
-.TP
-.BI \-p n
-This says that subscripts and superscripts should be
-.I n\~\c
-points smaller than the surrounding text.
-.
-This option is deprecated.
-.
-Normally
-.B eqn
-sets subscripts and superscripts at 70% of the size of the surrounding
-text.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-Only the differences between GNU
-.B eqn
-and Unix eqn are described here.
-.
-.
-.LP
-GNU
-.B eqn
-emits Presentation MathML output when invoked with the
-.B "-T\~MathML"
-option.
-.
-.
-.LP
-GNU eqn sets the input token
-.B \&"..."
-as three periods or low dots, rather than the three centered dots of
-classic eqn.  To get three centered dots, write
-.B "cdots"
-or
-.BR "cdot cdot cdot".
-.
-.
-.LP
-Most of the new features of the GNU
-.B eqn
-input language are based on \*(tx.
-.
-There are some references to the differences between \*(tx and GNU
-.B eqn
-below;
-these may safely be ignored if you do not know \*(tx.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Controlling delimiters
-.\" --------------------------------------------------------------------
-.
-If not in compatibility mode,
-.B eqn
-recognizes
-.
-.RS
-.LP
-.B delim on
-.RE
-.
-.LP
-to restore the delimiters which have been previously disabled
-with a call to
-.RB \[oq] "delim off" \[cq].
-.
-If delimiters haven\[aq]t been specified, the call has no effect.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Automatic spacing
-.\" --------------------------------------------------------------------
-.
-.B eqn
-gives each component of an equation a type, and adjusts the spacing
-between components using that type.
-.
-Possible types are:
-.
-.RS
-.TP \w'punctuation'u+2n
-ordinary an ordinary character such as \[oq]1\[cq] or \[oq]\c
-.IR x \[cq];
-.
-.TP
-operator
-a large operator such as
-.ds Su \[oq]\s+5\(*S\s0\[cq]
-.if \n(.g .if !c\(*S .ds Su the summation operator
-\*(Su;
-.
-.TP
-binary
-a binary operator such as \[oq]\[pl]\[cq];
-.
-.TP
-relation
-a relation such as \[oq]=\[cq];
-.
-.TP
-opening
-a opening bracket such as \[oq](\[cq];
-.
-.TP
-closing
-a closing bracket such as \[oq])\[cq];
-.
-.TP
-punctuation
-a punctuation character such as \[oq],\[cl];
-.
-.TP
-inner
-a subformula contained within brackets;
-.
-.TP
-suppress spacing
-that suppresses automatic spacing adjustment.
-.RE
-.
-.
-.LP
-Components of an equation
-get a type in one of two ways.
-.
-.TP
-.BI type\  t\ e
-This yields an equation component that contains\~\c
-.I e
-but that has type\~\c
-.IR t ,
-where
-.I t
-is one of the types mentioned above.
-.
-For example,
-.B times
-is defined as
-.
-.RS
-.IP
-.B
-type "binary" \e(mu
-.RE
-.
-.IP
-The name of the type doesn\[aq]t have to be quoted, but quoting protects
-from macro expansion.
-.
-.TP
-.BI chartype\  t\ text
-Unquoted groups of characters are split up into individual characters,
-and the type of each character is looked up;
-this changes the type that is stored for each character;
-it says that the characters in
-.I text
-from now on have type\~\c
-.IR t .
-For example,
-.
-.RS
-.IP
-.B
-chartype "punctuation" .,;:
-.RE
-.
-.IP
-would make the characters \[oq].,;:\[cq] have type punctuation
-whenever they subsequently appeared in an equation.
-.
-The type\~\c
-.I t
-can also be
-.B letter
-or
-.BR digit ;
-in these cases
-.B chartype
-changes the font type of the characters.
-.
-See the
-.B Fonts
-subsection.
-.
-.
-.\" --------------------------------------------------------------------
-.SS New primitives
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI big\  e
-Enlarges the expression it modifies; intended to have semantics like
-CSS \[oq]large\[cq].
-.
-In troff output, the point size is increased by\~5; in MathML output,
-the expression uses
-.
-.RS
-.IP
-.EX
-<mstyle \%mathsize='big'>
-.EE
-.RE
-.
-.TP
-.IB e1\  smallover\  e2
-This is similar to
-.BR over ;
-.B smallover
-reduces the size of
-.I e1
-and
-.IR e2 ;
-it also puts less vertical space between
-.I e1
-or
-.I e2
-and the fraction bar.
-.
-The
-.B over
-primitive corresponds to the \*(tx
-.B \eover
-primitive in display styles;
-.B smallover
-corresponds to
-.B \eover
-in non-display styles.
-.
-.TP
-.BI vcenter\  e
-This vertically centers
-.I e
-about the math axis.
-.
-The math axis is the vertical position about which characters such as
-\[oq]\[pl]\[]cq and \[oq]\[mi]\[cq] are centered; also it is the
-vertical position used for the bar of fractions.
-.
-For example,
-.B sum
-is defined as
-.
-.RS
-.IP
-.B
-{ type "operator" vcenter size +5 \e(*S }
-.RE
-.
-.IP
-(Note that vcenter is silently ignored when generating MathML.)
-.
-.TP
-.IB e1\  accent\  e2
-This sets
-.I e2
-as an accent over
-.IR e1 .
-.I e2
-is assumed to be at the correct height for a lowercase letter;
-.I e2
-is moved down according to whether
-.I e1
-is taller or shorter than a lowercase letter.
-.
-For example,
-.B hat
-is defined as
-.
-.RS
-.IP
-.B
-accent { "^" }
-.RE
-.
-.IP
-.BR dotdot ,
-.BR dot ,
-.BR tilde ,
-.BR vec ,
-and
-.B dyad
-are also defined using the
-.B accent
-primitive.
-.
-.TP
-.IB e1\  uaccent\  e2
-This sets
-.I e2
-as an accent under
-.IR e1 .
-.I e2
-is assumed to be at the correct height for a character without a descender;
-.I e2
-is moved down if
-.I e1
-has a descender.
-.
-.B utilde
-is pre-defined using
-.B uaccent
-as a tilde accent below the baseline.
-.
-.TP
-.BI split\ \(ts text \(ts
-This has the same effect as simply
-.
-.RS
-.IP
-.I text
-.RE
-.
-.IP
-but
-.I text
-is not subject to macro expansion because it is quoted;
-.I text
-is split up and the spacing between individual characters is adjusted.
-.
-.TP
-.BI nosplit\  text
-This has the same effect as
-.
-.RS
-.IP
-.BI \(ts text \(ts
-.RE
-.
-.IP
-but because
-.I text
-is not quoted it is subject to macro expansion;
-.I text
-is not split up
-and the spacing between individual characters is not adjusted.
-.
-.TP
-.IB e\  opprime
-This is a variant of
-.B prime
-that acts as an operator on\~\c
-.IR e .
-.
-It produces a different result from
-.B prime
-in a case such as
-.BR A\ opprime\ sub\ 1 :
-with
-.B opprime
-the\~\c
-.B 1
-is tucked under the prime as a subscript to the\~\c
-.B A
-(as is conventional in mathematical typesetting),
-whereas with
-.B prime
-the\~\c
-.B 1
-is a subscript to the prime character.
-.
-The precedence of
-.B opprime
-is the same as that of
-.B bar
-and
-.BR under ,
-which is higher than that of everything except
-.B accent
-and
-.BR uaccent .
-.
-In unquoted text a\~\c
-.B \[aq]
-that is not the first character is treated like
-.BR opprime .
-.
-.TP
-.BI special\  text\ e
-This constructs a new object from\~\c
-.I e
-using a
-.BR @g@troff (@MAN1EXT@)
-macro named
-.IR text .
-.
-When the macro is called,
-the string
-.B 0s
-contains the output for\~\c
-.IR e ,
-and the number registers
-.BR 0w ,
-.BR 0h ,
-.BR 0d ,
-.BR 0skern ,
-and
-.BR 0skew
-contain the width, height, depth, subscript kern, and skew of\~\c
-.IR e .
-.
-(The
-.I "subscript kern"
-of an object says how much a subscript on that object should be tucked in;
-the
-.I skew
-of an object says how far to the right of the center of the object an
-accent over the object should be placed.)
-.
-The macro must modify
-.B 0s
-so that it outputs the desired result with its origin at the current
-point, and increase the current horizontal position by the width
-of the object.
-.
-The number registers must also be modified so that they correspond to the
-result.
-.
-.IP
-For example, suppose you wanted a construct that \[oq]cancels\[cq] an
-expression by drawing a diagonal line through it.
-.
-.RS
-.IP
-.ft B
-.if t .ne 6+\n(.Vu
-.br
-\&.EQ
-.br
-define cancel 'special Ca'
-.br
-\&.EN
-.br
-\&.de Ca
-.br
-\&.\ \ ds 0s \e
-.br
-\eZ'\e\e*(0s'\e
-.br
-\ev'\e\en(0du'\e
-.br
-\eD'l \e\en(0wu -\e\en(0hu-\e\en(0du'\e
-.br
-\ev'\e\en(0hu'
-.br
-\&..
-.ft
-.RE
-.
-.IP
-Then you could cancel an expression\~\c
-.I e
-with
-.BI \%cancel\ {\  e\  }
-.
-.IP
-Here\[aq]s a more complicated construct that draws a box round an
-expression:
-.
-.RS
-.IP
-.ft B
-.if t .ne 11+\n(.Vu
-\&.EQ
-.br
-define box 'special Bx'
-.br
-\&.EN
-.br
-\&.de Bx
-.br
-\&.\ \ ds 0s \e
-.br
-\eZ'\eh'1n'\e\e*(0s'\e
-.br
-\eZ'\e
-.br
-\ev'\e\en(0du+1n'\e
-.br
-\eD'l \e\en(0wu+2n 0'\e
-.br
-\eD'l 0 -\e\en(0hu-\e\en(0du-2n'\e
-.br
-\eD'l -\e\en(0wu-2n 0'\e
-.br
-\eD'l 0 \e\en(0hu+\e\en(0du+2n'\e
-.br
-\&'\e
-.br
-\eh'\e\en(0wu+2n'
-.br
-\&.\ \ nr 0w +2n
-.br
-\&.\ \ nr 0d +1n
-.br
-\&.\ \ nr 0h +1n
-.br
-\&..
-.ft
-.RE
-.
-.TP
-.BI space\  n
-A positive value of the integer\~\c
-.I n
-(in hundredths of an em) sets the vertical spacing before the
-equation, a negative value sets the spacing after the equation,
-replacing the default values.
-.
-This primitive provides an interface to
-.BR groff \[aq]s
-.B \ex
-escape (but with opposite sign).
-.
-.IP
-This keyword has no effect if the equation is part of a
-.B pic
-picture.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Extended primitives
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI col\  n\  {\  .\|.\|.\  }
-.TQ
-.BI ccol\  n\  {\  .\|.\|.\  }
-.TQ
-.BI lcol\  n\  {\  .\|.\|.\  }
-.TQ
-.BI rcol\  n\  {\  .\|.\|.\  }
-.TQ
-.BI pile\  n\  {\  .\|.\|.\  }
-.TQ
-.BI cpile\  n\  {\  .\|.\|.\  }
-.TQ
-.BI lpile\  n\  {\  .\|.\|.\  }
-.TQ
-.BI rpile\  n\  {\  .\|.\|.\  }
-The integer value\~\c
-.I n
-(in hundredths of an em) increases the vertical spacing between rows,
-using
-.BR groff \[aq]s
-.B \ex
-escape (the value has no effect in MathML mode).
-Negative values are possible but have no effect.
-If there is more than a single value given in a matrix, the biggest one
-is used.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Customization
-.\" --------------------------------------------------------------------
-.
-When
-.B eqn
-is generating troff markup, the appearance of equations is controlled
-by a large number of parameters.
-.
-They have no effect when generating MathML mode, which pushes
-typesetting and fine motions downstream to a MathML rendering engine.
-.
-These parameters can be set using the
-.B set
-command.
-.
-.TP
-.BI set\  p\ n
-This sets parameter\~\c
-.I p
-to value\~\c
-.IR n ;
-.I n\~\c
-is an integer.
-.
-For example,
-.
-.RS
-.IP
-.B
-set x_height 45
-.RE
-.
-.IP
-says that
-.B eqn
-should assume an x\~height of 0.45\~ems.
-.
-.
-.RS
-.LP
-Possible parameters are as follows.
-.
-Values are in units of hundredths of an em unless otherwise stated.
-.
-These descriptions are intended to be expository rather than
-definitive.
-.
-.ie t \
-.  TP \w'\fBdefault_rule_thickness'u+2n
-.el \
-.  TP
-.B minimum_size
-.B eqn
-doesn\[aq]t set anything at a smaller point-size than this.
-.
-The value is in points.
-.
-.TP
-.B fat_offset
-The
-.B fat
-primitive emboldens an equation by overprinting two copies of the
-equation horizontally offset by this amount.
-.
-This parameter is not used in MathML mode; instead, fat text uses
-.
-.RS
-.IP
-.EX
-<mstyle mathvariant='double-struck'>
-.EE
-.RE
-.
-.TP
-.B over_hang
-A fraction bar is longer by twice this amount than
-the maximum of the widths of the numerator and denominator;
-in other words, it overhangs the numerator and
-denominator by at least this amount.
-.
-.TP
-.B accent_width
-When
-.B bar
-or
-.B under
-is applied to a single character,
-the line is this long.
-.
-Normally,
-.B bar
-or
-.B under
-produces a line whose length is the width of the object to which it applies;
-in the case of a single character,
-this tends to produce a line that looks too long.
-.
-.TP
-.B delimiter_factor
-Extensible delimiters produced with the
-.B left
-and
-.B right
-primitives have a combined height and depth of at least this many
-thousandths of twice the maximum amount by which the sub-equation that
-the delimiters enclose extends away from the axis.
-.
-.TP
-.B delimiter_shortfall
-Extensible delimiters produced with the
-.B left
-and
-.B right
-primitives have a combined height and depth not less than the
-difference of twice the maximum amount by which the sub-equation that
-the delimiters enclose extends away from the axis and this amount.
-.
-.TP
-.B null_delimiter_space
-This much horizontal space is inserted on each side of a fraction.
-.
-.TP
-.B script_space
-The width of subscripts and superscripts is increased by this amount.
-.
-.TP
-.B thin_space
-This amount of space is automatically inserted after punctuation
-characters.
-.
-.TP
-.B medium_space
-This amount of space is automatically inserted on either side of
-binary operators.
-.
-.TP
-.B thick_space
-This amount of space is automatically inserted on either side of
-relations.
-.
-.TP
-.B x_height
-The height of lowercase letters without ascenders such as \[oq]x\[cq].
-.
-.TP
-.B axis_height
-The height above the baseline of the center of characters such as
-\[oq]\[pl]\[cq] and \[oq]\[mi]\[cq].
-.
-It is important that this value is correct for the font
-you are using.
-.
-.TP
-.B default_rule_thickness
-This should set to the thickness of the
-.B \e(ru
-character, or the thickness of horizontal lines produced with the
-.B \eD
-escape sequence.
-.
-.TP
-.B num1
-The
-.B over
-command shifts up the numerator by at least this amount.
-.
-.TP
-.B num2
-The
-.B smallover
-command shifts up the numerator by at least this amount.
-.
-.TP
-.B denom1
-The
-.B over
-command shifts down the denominator by at least this amount.
-.
-.TP
-.B denom2
-The
-.B smallover
-command shifts down the denominator by at least this amount.
-.
-.TP
-.B sup1
-Normally superscripts are shifted up by at least this amount.
-.
-.TP
-.B sup2
-Superscripts within superscripts or upper limits
-or numerators of
-.B smallover
-fractions are shifted up by at least this amount.
-.
-This is usually less than sup1.
-.
-.TP
-.B sup3
-Superscripts within denominators or square roots
-or subscripts or lower limits are shifted up by at least
-this amount.
-.
-This is usually less than sup2.
-.
-.TP
-.B sub1
-Subscripts are normally shifted down by at least this amount.
-.
-.TP
-.B sub2
-When there is both a subscript and a superscript, the subscript is
-shifted down by at least this amount.
-.
-.TP
-.B sup_drop
-The baseline of a superscript is no more than this much amount below
-the top of the object on which the superscript is set.
-.
-.TP
-.B sub_drop
-The baseline of a subscript is at least this much below the bottom of
-the object on which the subscript is set.
-.
-.TP
-.B big_op_spacing1
-The baseline of an upper limit is at least this much above the top of
-the object on which the limit is set.
-.
-.TP
-.B big_op_spacing2
-The baseline of a lower limit is at least this much below the bottom
-of the object on which the limit is set.
-.
-.TP
-.B big_op_spacing3
-The bottom of an upper limit is at least this much above the top of
-the object on which the limit is set.
-.
-.TP
-.B big_op_spacing4
-The top of a lower limit is at least this much below the bottom of the
-object on which the limit is set.
-.
-.TP
-.B big_op_spacing5
-This much vertical space is added above and below limits.
-.
-.TP
-.B baseline_sep
-The baselines of the rows in a pile or matrix are normally this far
-apart.
-.
-In most cases this should be equal to the sum of
-.B num1
-and
-.BR denom1 .
-.
-.TP
-.B shift_down
-The midpoint between the top baseline and the bottom baseline in a
-matrix or pile is shifted down by this much from the axis.
-.
-In most cases this should be equal to
-.BR axis_height .
-.
-.TP
-.B column_sep
-This much space is added between columns in a matrix.
-.
-.TP
-.B matrix_side_sep
-This much space is added at each side of a matrix.
-.
-.TP
-.B draw_lines
-If this is non-zero, lines are drawn using the
-.B \eD
-escape sequence, rather than with the
-.B \el
-escape sequence and the
-.B \e(ru
-character.
-.
-.TP
-.B body_height
-The amount by which the height of the equation exceeds this is added
-as extra space before the line containing the equation (using
-.BR \ex ).
-.
-The default value is 85.
-.
-.TP
-.B body_depth
-The amount by which the depth of the equation exceeds this is added as
-extra space after the line containing the equation (using
-.BR \ex ).
-.
-The default value is 35.
-.
-.TP
-.B nroff
-If this is non-zero,
-then
-.B ndefine
-behaves like
-.B define
-and
-.B tdefine
-is ignored, otherwise
-.B tdefine
-behaves like
-.B define
-and
-.B ndefine
-is ignored.
-.
-The default value is\~0 (This is typically changed to\~1 by the
-.B eqnrc
-file for the
-.BR ascii ,
-.BR latin1 ,
-.BR utf8 ,
-and
-.B cp1047
-devices.)
-.
-.
-.LP
-A more precise description of the role of many of these
-parameters can be found in Appendix\~H of
-.IR "The \*(txbook" .
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS Macros
-.\" --------------------------------------------------------------------
-.
-Macros can take arguments.
-.
-In a macro body,
-.BI $ n
-where
-.I n
-is between 1 and\~9, is replaced by the
-.IR n-th
-argument if the macro is called with arguments;
-if there are fewer than
-.I n\~\c
-arguments, it is replaced by nothing.
-.
-A word containing a left parenthesis where the part of the word
-before the left parenthesis has been defined using the
-.B define
-command is recognized as a macro call with arguments; characters
-following the left parenthesis up to a matching right parenthesis are
-treated as comma-separated arguments; commas inside nested parentheses
-do not terminate an argument.
-.
-.TP
-.BI sdefine\  name\ X\ anything\ X
-This is like the
-.B define
-command, but
-.I name
-is not recognized if called with arguments.
-.
-.TP
-.BI include\ \(ts file \(ts
-.TQ
-.BI copy\ \(ts file \(ts
-Include the contents of
-.I file
-.RB ( include
-and
-.B copy
-are synonyms).
-.
-Lines of
-.I file
-beginning with
-.B .EQ
-or
-.B .EN
-are ignored.
-.
-.TP
-.BI ifdef\  name\ X\ anything\ X
-If
-.I name
-has been defined by
-.B define
-(or has been automatically defined because
-.I name
-is the output device) process
-.IR anything ;
-otherwise ignore
-.IR anything .
-.
-.I X
-can be any character not appearing in
-.IR anything .
-.
-.TP
-.BI undef\  name
-Remove definition of
-.IR name ,
-making it undefined.
-.
-.
-.LP
-Besides the macros mentioned above, the following definitions are available:
-.BR Alpha ,
-.BR Beta ,
-\&.\|.\|.,
-.B Omega
-(this is the same as
-.BR ALPHA ,
-.BR BETA ,
-\&.\|.\|.,
-.BR OMEGA ),
-.B ldots
-(three dots on the base line), and
-.BR dollar .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Fonts
-.\" --------------------------------------------------------------------
-.
-.B eqn
-normally uses at least two fonts to set an equation:
-an italic font for letters,
-and a roman font for everything else.
-.
-The existing
-.B gfont
-command
-changes the font that is used as the italic font.
-.
-By default this is\~\c
-.BR I .
-The font that is used as the roman font can be changed using the new
-.B grfont
-command.
-.
-.TP
-.BI grfont\  f
-Set the roman font to\~\c
-.IR f .
-.
-.
-.LP
-The
-.B italic
-primitive uses the current italic font set by
-.BR gfont ;
-the
-.B roman
-primitive uses the current roman font set by
-.BR grfont .
-.
-There is also a new
-.B gbfont
-command, which changes the font used by the
-.B bold
-primitive.
-.
-If you only use the
-.BR roman ,
-.B italic
-and
-.B bold
-primitives to changes fonts within an equation, you can change all the
-fonts used by your equations just by using
-.BR gfont ,
-.B grfont
-and
-.B gbfont
-commands.
-.
-.
-.LP
-You can control which characters are treated as letters
-(and therefore set in italics) by using the
-.B chartype
-command described above.
-.
-A type of
-.B letter
-causes a character to be set in italic type.
-.
-A type of
-.B digit
-causes a character to be set in roman type.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'\fB@MACRODIR@/eqnrc'u+2n
-.B @MACRODIR@/eqnrc
-Initialization file.
-.
-.
-.\" --------------------------------------------------------------------
-.SH MATHML MODE LIMITATIONS
-.\" --------------------------------------------------------------------
-.
-MathML is designed on the assumption that it cannot know the exact
-physical characteristics of the media and devices on which it will
-be rendered.
-.
-It does not support fine control of motions and sizes to the same
-degree troff does.
-.
-Thus:
-.
-.IP *
-.B eqn
-parameters have no effect on the generated MathML.
-.
-.IP *
-The
-.BR special,
-.BR up ,
-.BR down ,
-.BR fwd ,
-and
-.B back
-operations cannot be implemented, and yield a MathML
-\[oq]<merror>\[cq] message instead.
-.
-.IP *
-The
-.B vcenter
-keyword is silently ignored, as centering on the math axis is the
-MathML default.
-.
-.IP *
-Characters that
-.B eqn
-over troff sets extra large \(en notably the integral sign \(en may
-appear too small and need to have their \[oq]<mstyle>\[cq] wrappers
-adjusted by hand.
-.
-.
-.LP
-As in its troff mode,
-.B eqn
-in MathML mode leaves the
-.B .EQ
-and
-.B .EN
-delimiters in place for displayed equations, but emits no explicit
-delimiters around inline equations.
-.
-They can, however, be recognized as strings that begin with
-\[oq]<math>\[cq] and end with \[oq]</math>\[cq] and do not cross line
-boundaries.
-.
-.
-.LP
-See the
-.B BUGS
-section for translation limits specific to
-.BR eqn .
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-Inline equations are set at the point size that is current at the
-beginning of the input line.
-.
-.
-.LP
-In MathML mode, the
-.B mark
-and
-.B lineup
-features don\[aq]t work.
-.
-These could, in theory, be implemented with \[oq]<maligngroup>\[cq]
-elements.
-.
-.
-.LP
-In MathML mode, each digit of a numeric literal gets a separate
-\[oq]<mn>\:</mn>\[cq] pair, and decimal points are tagged with
-\[oq]<mo>\:</mo>\[cq].
-.
-This is allowed by the specification, but inefficient.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR groff_font (@MAN5EXT@),
-.I The\ \*[tx]book
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/src/preproc/eqn/eqn.y b/src/preproc/eqn/eqn.y
deleted file mode 100644 (file)
index 8dde432..0000000
+++ /dev/null
@@ -1,329 +0,0 @@
-/* Copyright (C) 1989-2014  Free Software Foundation, Inc.
-     Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff 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 3 of the License, or
-(at your option) any later version.
-
-groff 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, see <http://www.gnu.org/licenses/>. */
-%{
-#include <stdio.h>
-#include <string.h>
-#include <stdlib.h>
-
-#include "lib.h"
-#include "box.h"
-extern int non_empty_flag;
-int yylex();
-void yyerror(const char *);
-%}
-
-%union {
-       char *str;
-       box *b;
-       pile_box *pb;
-       matrix_box *mb;
-       int n;
-       column *col;
-}
-
-%token OVER
-%token SMALLOVER
-%token SQRT
-%token SUB
-%token SUP
-%token LPILE
-%token RPILE
-%token CPILE
-%token PILE
-%token LEFT
-%token RIGHT
-%token TO
-%token FROM
-%token SIZE
-%token FONT
-%token ROMAN
-%token BOLD
-%token ITALIC
-%token FAT
-%token ACCENT
-%token BAR
-%token UNDER
-%token ABOVE
-%token <str> TEXT
-%token <str> QUOTED_TEXT
-%token FWD
-%token BACK
-%token DOWN
-%token UP
-%token MATRIX
-%token COL
-%token LCOL
-%token RCOL
-%token CCOL
-%token MARK
-%token LINEUP
-%token TYPE
-%token VCENTER
-%token PRIME
-%token SPLIT
-%token NOSPLIT
-%token UACCENT
-%token SPECIAL
-
-/* these are handled in the lexer */
-%token SPACE
-%token GFONT
-%token GSIZE
-%token DEFINE
-%token NDEFINE
-%token TDEFINE
-%token SDEFINE
-%token UNDEF
-%token IFDEF
-%token INCLUDE
-%token DELIM
-%token CHARTYPE
-%token SET
-%token GRFONT
-%token GBFONT
-
-/* The original eqn manual says that `left' is right associative. It's lying.
-Consider `left ( ~ left ( ~ right ) right )'. */
-
-%right LEFT
-%left RIGHT
-%right LPILE RPILE CPILE PILE TEXT QUOTED_TEXT MATRIX MARK LINEUP '^' '~' '\t' '{' SPLIT NOSPLIT
-%right FROM TO
-%left SQRT OVER SMALLOVER
-%right SUB SUP
-%right ROMAN BOLD ITALIC FAT FONT SIZE FWD BACK DOWN UP TYPE VCENTER SPECIAL
-%right BAR UNDER PRIME
-%left ACCENT UACCENT
-
-%type <b> mark from_to sqrt_over script simple equation nonsup
-%type <n> number
-%type <str> text delim
-%type <pb> pile_element_list pile_arg
-%type <mb> column_list
-%type <col> column column_arg column_element_list
-
-%%
-top:
-       /* empty */
-       | equation
-               { $1->top_level(); non_empty_flag = 1; }
-       ;
-
-equation:
-       mark
-               { $$ = $1; }
-       | equation mark
-               {
-                 list_box *lb = $1->to_list_box();
-                 if (!lb)
-                   lb = new list_box($1);
-                 lb->append($2);
-                 $$ = lb;
-               }
-       ;
-
-mark:
-       from_to
-               { $$ = $1; }
-       | MARK mark
-               { $$ = make_mark_box($2); }
-       | LINEUP mark
-               { $$ = make_lineup_box($2); }
-       ;
-
-from_to:
-       sqrt_over  %prec FROM
-               { $$ = $1; }
-       | sqrt_over TO from_to
-               { $$ = make_limit_box($1, 0, $3); }
-       | sqrt_over FROM sqrt_over
-               { $$ = make_limit_box($1, $3, 0); }
-       | sqrt_over FROM sqrt_over TO from_to
-               { $$ = make_limit_box($1, $3, $5); }
-       | sqrt_over FROM sqrt_over FROM from_to
-               { $$ = make_limit_box($1, make_limit_box($3, $5, 0), 0); }
-       ;
-
-sqrt_over:
-       script
-               { $$ = $1; }
-       | SQRT sqrt_over
-               { $$ = make_sqrt_box($2); }
-       | sqrt_over OVER sqrt_over
-               { $$ = make_over_box($1, $3); }
-       | sqrt_over SMALLOVER sqrt_over
-               { $$ = make_small_over_box($1, $3); }
-       ;
-
-script:
-       nonsup
-               { $$ = $1; }
-       | simple SUP script
-               { $$ = make_script_box($1, 0, $3); }
-       ;
-
-nonsup:
-       simple  %prec SUP
-               { $$ = $1; }
-       | simple SUB nonsup
-               { $$ = make_script_box($1, $3, 0); }
-       | simple SUB simple SUP script
-               { $$ = make_script_box($1, $3, $5); }
-       ;
-
-simple:
-       TEXT
-               { $$ = split_text($1); }
-       | QUOTED_TEXT
-               { $$ = new quoted_text_box($1); }
-       | SPLIT QUOTED_TEXT
-               { $$ = split_text($2); }
-       | NOSPLIT TEXT
-               { $$ = new quoted_text_box($2); }
-       | '^'
-               { $$ = new half_space_box; }
-       | '~'
-               { $$ = new space_box; }
-       | '\t'
-               { $$ = new tab_box; }
-       | '{' equation '}'
-               { $$ = $2; }
-       | PILE pile_arg
-               { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
-       | LPILE pile_arg
-               { $2->set_alignment(LEFT_ALIGN); $$ = $2; }
-       | RPILE pile_arg
-               { $2->set_alignment(RIGHT_ALIGN); $$ = $2; }
-       | CPILE pile_arg
-               { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
-       | MATRIX '{' column_list '}'
-               { $$ = $3; }
-       | LEFT delim equation RIGHT delim
-               { $$ = make_delim_box($2, $3, $5); }
-       | LEFT delim equation
-               { $$ = make_delim_box($2, $3, 0); }
-       | simple BAR
-               { $$ = make_overline_box($1); }
-       | simple UNDER
-               { $$ = make_underline_box($1); }
-       | simple PRIME
-               { $$ = make_prime_box($1); }
-       | simple ACCENT simple
-               { $$ = make_accent_box($1, $3); }
-       | simple UACCENT simple
-               { $$ = make_uaccent_box($1, $3); }
-       | ROMAN simple
-               { $$ = new font_box(strsave(get_grfont()), $2); }
-       | BOLD simple
-               { $$ = new font_box(strsave(get_gbfont()), $2); }
-       | ITALIC simple
-               { $$ = new font_box(strsave(get_gfont()), $2); }
-       | FAT simple
-               { $$ = new fat_box($2); }
-       | FONT text simple
-               { $$ = new font_box($2, $3); }
-       | SIZE text simple
-               { $$ = new size_box($2, $3); }
-       | FWD number simple
-               { $$ = new hmotion_box($2, $3); }
-       | BACK number simple
-               { $$ = new hmotion_box(-$2, $3); }
-       | UP number simple
-               { $$ = new vmotion_box($2, $3); }
-       | DOWN number simple
-               { $$ = new vmotion_box(-$2, $3); }
-       | TYPE text simple
-               { $3->set_spacing_type($2); $$ = $3; }
-       | VCENTER simple
-               { $$ = new vcenter_box($2); }
-       | SPECIAL text simple
-               { $$ = make_special_box($2, $3); }
-       ;
-       
-number:
-       text
-               {
-                 int n;
-                 if (sscanf($1, "%d", &n) == 1)
-                   $$ = n;
-                 a_delete $1;
-               }
-       ;
-
-pile_element_list:
-       equation
-               { $$ = new pile_box($1); }
-       | pile_element_list ABOVE equation
-               { $1->append($3); $$ = $1; }
-       ;
-
-pile_arg:
-       '{' pile_element_list '}'
-               { $$ = $2; }
-       | number '{' pile_element_list '}'
-               { $3->set_space($1); $$ = $3; }
-       ;
-
-column_list:
-       column
-               { $$ = new matrix_box($1); }
-       | column_list column
-               { $1->append($2); $$ = $1; }
-       ;
-
-column_element_list:
-       equation
-               { $$ = new column($1); }
-       | column_element_list ABOVE equation
-               { $1->append($3); $$ = $1; }
-       ;
-
-column_arg:
-       '{' column_element_list '}'
-               { $$ = $2; }
-       | number '{' column_element_list '}'
-               { $3->set_space($1); $$ = $3; }
-       ;
-
-column:
-       COL column_arg
-               { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
-       | LCOL column_arg
-               { $2->set_alignment(LEFT_ALIGN); $$ = $2; }
-       | RCOL column_arg
-               { $2->set_alignment(RIGHT_ALIGN); $$ = $2; }
-       | CCOL column_arg
-               { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
-       ;
-
-text:  TEXT
-               { $$ = $1; }
-       | QUOTED_TEXT
-               { $$ = $1; }
-       ;
-
-delim:
-       text
-               { $$ = $1; }
-       | '{'
-               { $$ = strsave("{"); }
-       | '}'
-               { $$ = strsave("}"); }
-       ;
-
-%%
diff --git a/src/preproc/eqn/eqn.ypp b/src/preproc/eqn/eqn.ypp
new file mode 100644 (file)
index 0000000..fb318c3
--- /dev/null
@@ -0,0 +1,329 @@
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
+     Written by James Clark (jjc@jclark.com)
+
+This file is part of groff.
+
+groff 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 3 of the License, or
+(at your option) any later version.
+
+groff 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, see <http://www.gnu.org/licenses/>. */
+%{
+#include <stdio.h>
+#include <string.h>
+#include <stdlib.h>
+
+#include "lib.h"
+#include "box.h"
+extern int non_empty_flag;
+int yylex();
+void yyerror(const char *);
+%}
+
+%union {
+       char *str;
+       box *b;
+       pile_box *pb;
+       matrix_box *mb;
+       int n;
+       column *col;
+}
+
+%token OVER
+%token SMALLOVER
+%token SQRT
+%token SUB
+%token SUP
+%token LPILE
+%token RPILE
+%token CPILE
+%token PILE
+%token LEFT
+%token RIGHT
+%token TO
+%token FROM
+%token SIZE
+%token FONT
+%token ROMAN
+%token BOLD
+%token ITALIC
+%token FAT
+%token ACCENT
+%token BAR
+%token UNDER
+%token ABOVE
+%token <str> TEXT
+%token <str> QUOTED_TEXT
+%token FWD
+%token BACK
+%token DOWN
+%token UP
+%token MATRIX
+%token COL
+%token LCOL
+%token RCOL
+%token CCOL
+%token MARK
+%token LINEUP
+%token TYPE
+%token VCENTER
+%token PRIME
+%token SPLIT
+%token NOSPLIT
+%token UACCENT
+%token SPECIAL
+
+/* these are handled in the lexer */
+%token SPACE
+%token GFONT
+%token GSIZE
+%token DEFINE
+%token NDEFINE
+%token TDEFINE
+%token SDEFINE
+%token UNDEF
+%token IFDEF
+%token INCLUDE
+%token DELIM
+%token CHARTYPE
+%token SET
+%token GRFONT
+%token GBFONT
+
+/* The original eqn manual says that 'left' is right associative. It's lying.
+Consider 'left ( ~ left ( ~ right ) right )'. */
+
+%right LEFT
+%left RIGHT
+%right LPILE RPILE CPILE PILE TEXT QUOTED_TEXT MATRIX MARK LINEUP '^' '~' '\t' '{' SPLIT NOSPLIT
+%right FROM TO
+%left SQRT OVER SMALLOVER
+%right SUB SUP
+%right ROMAN BOLD ITALIC FAT FONT SIZE FWD BACK DOWN UP TYPE VCENTER SPECIAL
+%right BAR UNDER PRIME
+%left ACCENT UACCENT
+
+%type <b> mark from_to sqrt_over script simple equation nonsup
+%type <n> number
+%type <str> text delim
+%type <pb> pile_element_list pile_arg
+%type <mb> column_list
+%type <col> column column_arg column_element_list
+
+%%
+top:
+       /* empty */
+       | equation
+               { $1->top_level(); non_empty_flag = 1; }
+       ;
+
+equation:
+       mark
+               { $$ = $1; }
+       | equation mark
+               {
+                 list_box *lb = $1->to_list_box();
+                 if (!lb)
+                   lb = new list_box($1);
+                 lb->append($2);
+                 $$ = lb;
+               }
+       ;
+
+mark:
+       from_to
+               { $$ = $1; }
+       | MARK mark
+               { $$ = make_mark_box($2); }
+       | LINEUP mark
+               { $$ = make_lineup_box($2); }
+       ;
+
+from_to:
+       sqrt_over  %prec FROM
+               { $$ = $1; }
+       | sqrt_over TO from_to
+               { $$ = make_limit_box($1, 0, $3); }
+       | sqrt_over FROM sqrt_over
+               { $$ = make_limit_box($1, $3, 0); }
+       | sqrt_over FROM sqrt_over TO from_to
+               { $$ = make_limit_box($1, $3, $5); }
+       | sqrt_over FROM sqrt_over FROM from_to
+               { $$ = make_limit_box($1, make_limit_box($3, $5, 0), 0); }
+       ;
+
+sqrt_over:
+       script
+               { $$ = $1; }
+       | SQRT sqrt_over
+               { $$ = make_sqrt_box($2); }
+       | sqrt_over OVER sqrt_over
+               { $$ = make_over_box($1, $3); }
+       | sqrt_over SMALLOVER sqrt_over
+               { $$ = make_small_over_box($1, $3); }
+       ;
+
+script:
+       nonsup
+               { $$ = $1; }
+       | simple SUP script
+               { $$ = make_script_box($1, 0, $3); }
+       ;
+
+nonsup:
+       simple  %prec SUP
+               { $$ = $1; }
+       | simple SUB nonsup
+               { $$ = make_script_box($1, $3, 0); }
+       | simple SUB simple SUP script
+               { $$ = make_script_box($1, $3, $5); }
+       ;
+
+simple:
+       TEXT
+               { $$ = split_text($1); }
+       | QUOTED_TEXT
+               { $$ = new quoted_text_box($1); }
+       | SPLIT QUOTED_TEXT
+               { $$ = split_text($2); }
+       | NOSPLIT TEXT
+               { $$ = new quoted_text_box($2); }
+       | '^'
+               { $$ = new half_space_box; }
+       | '~'
+               { $$ = new space_box; }
+       | '\t'
+               { $$ = new tab_box; }
+       | '{' equation '}'
+               { $$ = $2; }
+       | PILE pile_arg
+               { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
+       | LPILE pile_arg
+               { $2->set_alignment(LEFT_ALIGN); $$ = $2; }
+       | RPILE pile_arg
+               { $2->set_alignment(RIGHT_ALIGN); $$ = $2; }
+       | CPILE pile_arg
+               { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
+       | MATRIX '{' column_list '}'
+               { $$ = $3; }
+       | LEFT delim equation RIGHT delim
+               { $$ = make_delim_box($2, $3, $5); }
+       | LEFT delim equation
+               { $$ = make_delim_box($2, $3, 0); }
+       | simple BAR
+               { $$ = make_overline_box($1); }
+       | simple UNDER
+               { $$ = make_underline_box($1); }
+       | simple PRIME
+               { $$ = make_prime_box($1); }
+       | simple ACCENT simple
+               { $$ = make_accent_box($1, $3); }
+       | simple UACCENT simple
+               { $$ = make_uaccent_box($1, $3); }
+       | ROMAN simple
+               { $$ = new font_box(strsave(get_grfont()), $2); }
+       | BOLD simple
+               { $$ = new font_box(strsave(get_gbfont()), $2); }
+       | ITALIC simple
+               { $$ = new font_box(strsave(get_gfont()), $2); }
+       | FAT simple
+               { $$ = new fat_box($2); }
+       | FONT text simple
+               { $$ = new font_box($2, $3); }
+       | SIZE text simple
+               { $$ = new size_box($2, $3); }
+       | FWD number simple
+               { $$ = new hmotion_box($2, $3); }
+       | BACK number simple
+               { $$ = new hmotion_box(-$2, $3); }
+       | UP number simple
+               { $$ = new vmotion_box($2, $3); }
+       | DOWN number simple
+               { $$ = new vmotion_box(-$2, $3); }
+       | TYPE text simple
+               { $3->set_spacing_type($2); $$ = $3; }
+       | VCENTER simple
+               { $$ = new vcenter_box($2); }
+       | SPECIAL text simple
+               { $$ = make_special_box($2, $3); }
+       ;
+       
+number:
+       text
+               {
+                 int n;
+                 if (sscanf($1, "%d", &n) == 1)
+                   $$ = n;
+                 a_delete $1;
+               }
+       ;
+
+pile_element_list:
+       equation
+               { $$ = new pile_box($1); }
+       | pile_element_list ABOVE equation
+               { $1->append($3); $$ = $1; }
+       ;
+
+pile_arg:
+       '{' pile_element_list '}'
+               { $$ = $2; }
+       | number '{' pile_element_list '}'
+               { $3->set_space($1); $$ = $3; }
+       ;
+
+column_list:
+       column
+               { $$ = new matrix_box($1); }
+       | column_list column
+               { $1->append($2); $$ = $1; }
+       ;
+
+column_element_list:
+       equation
+               { $$ = new column($1); }
+       | column_element_list ABOVE equation
+               { $1->append($3); $$ = $1; }
+       ;
+
+column_arg:
+       '{' column_element_list '}'
+               { $$ = $2; }
+       | number '{' column_element_list '}'
+               { $3->set_space($1); $$ = $3; }
+       ;
+
+column:
+       COL column_arg
+               { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
+       | LCOL column_arg
+               { $2->set_alignment(LEFT_ALIGN); $$ = $2; }
+       | RCOL column_arg
+               { $2->set_alignment(RIGHT_ALIGN); $$ = $2; }
+       | CCOL column_arg
+               { $2->set_alignment(CENTER_ALIGN); $$ = $2; }
+       ;
+
+text:  TEXT
+               { $$ = $1; }
+       | QUOTED_TEXT
+               { $$ = $1; }
+       ;
+
+delim:
+       text
+               { $$ = $1; }
+       | '{'
+               { $$ = strsave("{"); }
+       | '}'
+               { $$ = strsave("}"); }
+       ;
+
+%%
diff --git a/src/preproc/eqn/eqn_tab.h b/src/preproc/eqn/eqn_tab.h
deleted file mode 100644 (file)
index b4413de..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
-
-/* Bison interface for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    OVER = 258,
-    SMALLOVER = 259,
-    SQRT = 260,
-    SUB = 261,
-    SUP = 262,
-    LPILE = 263,
-    RPILE = 264,
-    CPILE = 265,
-    PILE = 266,
-    LEFT = 267,
-    RIGHT = 268,
-    TO = 269,
-    FROM = 270,
-    SIZE = 271,
-    FONT = 272,
-    ROMAN = 273,
-    BOLD = 274,
-    ITALIC = 275,
-    FAT = 276,
-    ACCENT = 277,
-    BAR = 278,
-    UNDER = 279,
-    ABOVE = 280,
-    TEXT = 281,
-    QUOTED_TEXT = 282,
-    FWD = 283,
-    BACK = 284,
-    DOWN = 285,
-    UP = 286,
-    MATRIX = 287,
-    COL = 288,
-    LCOL = 289,
-    RCOL = 290,
-    CCOL = 291,
-    MARK = 292,
-    LINEUP = 293,
-    TYPE = 294,
-    VCENTER = 295,
-    PRIME = 296,
-    SPLIT = 297,
-    NOSPLIT = 298,
-    UACCENT = 299,
-    SPECIAL = 300,
-    SPACE = 301,
-    GFONT = 302,
-    GSIZE = 303,
-    DEFINE = 304,
-    NDEFINE = 305,
-    TDEFINE = 306,
-    SDEFINE = 307,
-    UNDEF = 308,
-    IFDEF = 309,
-    INCLUDE = 310,
-    DELIM = 311,
-    CHARTYPE = 312,
-    SET = 313,
-    GRFONT = 314,
-    GBFONT = 315
-  };
-#endif
-/* Tokens.  */
-#define OVER 258
-#define SMALLOVER 259
-#define SQRT 260
-#define SUB 261
-#define SUP 262
-#define LPILE 263
-#define RPILE 264
-#define CPILE 265
-#define PILE 266
-#define LEFT 267
-#define RIGHT 268
-#define TO 269
-#define FROM 270
-#define SIZE 271
-#define FONT 272
-#define ROMAN 273
-#define BOLD 274
-#define ITALIC 275
-#define FAT 276
-#define ACCENT 277
-#define BAR 278
-#define UNDER 279
-#define ABOVE 280
-#define TEXT 281
-#define QUOTED_TEXT 282
-#define FWD 283
-#define BACK 284
-#define DOWN 285
-#define UP 286
-#define MATRIX 287
-#define COL 288
-#define LCOL 289
-#define RCOL 290
-#define CCOL 291
-#define MARK 292
-#define LINEUP 293
-#define TYPE 294
-#define VCENTER 295
-#define PRIME 296
-#define SPLIT 297
-#define NOSPLIT 298
-#define UACCENT 299
-#define SPECIAL 300
-#define SPACE 301
-#define GFONT 302
-#define GSIZE 303
-#define DEFINE 304
-#define NDEFINE 305
-#define TDEFINE 306
-#define SDEFINE 307
-#define UNDEF 308
-#define IFDEF 309
-#define INCLUDE 310
-#define DELIM 311
-#define CHARTYPE 312
-#define SET 313
-#define GRFONT 314
-#define GBFONT 315
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
-union YYSTYPE
-{
-#line 30 "eqn.y" /* yacc.c:1909  */
-
-       char *str;
-       box *b;
-       pile_box *pb;
-       matrix_box *mb;
-       int n;
-       column *col;
-
-#line 183 "y.tab.h" /* yacc.c:1909  */
-};
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
index b6f15bd2f98adc24c7e22f6e664becb5e71993e9..e855f5d211d297757cfb0e2c4ab53cdbb025f1b6 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,10 +15,10 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
-#include "eqn_tab.h"
+#include "eqn.hpp"
 #include "stringclass.h"
 #include "ptable.h"
 
@@ -47,7 +47,7 @@ definition::definition() : is_macro(1), is_simple(0)
 definition::~definition()
 {
   if (is_macro)
-    a_delete contents;
+    free(contents);
 }
 
 declare_ptable(definition)
@@ -471,7 +471,7 @@ macro_input::macro_input(const char *str, input *x) : input(x)
 
 macro_input::~macro_input()
 {
-  a_delete s;
+  free(s);
 }
 
 int macro_input::get()
@@ -498,7 +498,7 @@ top_input::top_input(const char *str, const char *fn, int ln, input *x)
 
 top_input::~top_input()
 {
-  a_delete filename;
+  free(filename);
 }
 
 int top_input::get()
@@ -757,7 +757,7 @@ void interpolate_macro_with_args(const char *body)
          token_buffer +=  '\0';
          argv[argc] = strsave(token_buffer.contents());
        }
-       // for `foo()', argc = 0
+       // for 'foo()', argc = 0
        if (argc > 0 || c != ')' || i > 0)
          argc++;
        break;
@@ -850,15 +850,15 @@ int get_token(int lookup_flag = 0)
            quoted = 0;
            switch (c) {
            case EOF:
-             lex_error("`\\' ignored at end of equation");
+             lex_error("'\\' ignored at end of equation");
              done = 1;
              break;
            case '\n':
-             lex_error("`\\' ignored because followed by newline");
+             lex_error("'\\' ignored because followed by newline");
              done = 1;
              break;
            case '\t':
-             lex_error("`\\' ignored because followed by tab");
+             lex_error("'\\' ignored because followed by tab");
              done = 1;
              break;
            case '"':
@@ -932,7 +932,7 @@ void do_include()
   errno = 0;
   FILE *fp = fopen(filename, "r");
   if (fp == 0) {
-    lex_error("can't open included file `%1'", filename);
+    lex_error("can't open included file '%1'", filename);
     return;
   }
   current_input = new file_input(fp, filename, current_input);
@@ -963,7 +963,7 @@ void do_definition(int is_simple)
     macro_table.define(name, def);
   }
   else if (def->is_macro) {
-    a_delete def->contents;
+    free(def->contents);
   }
   get_delimited_text();
   token_buffer += '\0';
@@ -992,7 +992,7 @@ void do_gsize()
   }
   token_buffer += '\0';
   if (!set_gsize(token_buffer.contents()))
-    lex_error("invalid size `%1'", token_buffer.contents());
+    lex_error("invalid size '%1'", token_buffer.contents());
 }
 
 void do_gfont()
@@ -1039,7 +1039,7 @@ void do_space()
   char *ptr;
   long n = strtol(token_buffer.contents(), &ptr, 10);
   if (n == 0 && ptr == token_buffer.contents())
-    lex_error("bad argument `%1' to space command", token_buffer.contents());
+    lex_error("bad argument '%1' to space command", token_buffer.contents());
   else
     set_space(int(n));
 }
@@ -1071,7 +1071,7 @@ void do_delim()
     c = get_char();
   int d;
   if (c == EOF || (d = get_char()) == EOF)
-    lex_error("end of file while reading argument to `delim'");
+    lex_error("end of file while reading argument to 'delim'");
   else {
     if (c == 'o' && d == 'f' && peek_char() == 'f') {
       (void)get_char();
@@ -1125,7 +1125,7 @@ void do_set()
   token_buffer += '\0';
   int n;
   if (sscanf(&token_buffer[0], "%d", &n) != 1) {
-    lex_error("bad number `%1'", token_buffer.contents());
+    lex_error("bad number '%1'", token_buffer.contents());
     return;
   }
   set_param(param.contents(), n);
index 7b5ae3a6118f885c75c522fe863eb12bae5e27cd..1efa03d8fb2b5166638d018774f0b2a463d3bd74 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
 #include "pbox.h"
index 9e6e3591de0bbdba4e911c34fda79cebc78b7c35..849e9b808ac39b31dfce19c7f50b0e5ee3364801 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
 #include "pbox.h"
@@ -101,6 +101,7 @@ int list_box::compute_metrics(int style)
          || prevt == OPERATOR_TYPE
          || prevt == RELATION_TYPE
          || prevt == OPENING_TYPE
+         || prevt == SUPPRESS_TYPE
          || prevt == PUNCTUATION_TYPE)
        list.p[i]->spacing_type = ORDINARY_TYPE;
     }
index 57347f1344accc80f5efc54859dee7a40cb2d49d..e3ed28a2c7425573a50340190d66e79e1b077560 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
 #include "stringclass.h"
@@ -25,6 +25,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 #include "htmlhint.h"
 #include "pbox.h"
 #include "ctype.h"
+#include "lf.h"
 
 #define STARTUP_FILE "eqnrc"
 
@@ -54,7 +55,7 @@ int read_line(FILE *fp, string *p)
     if (!invalid_input_char(c))
       *p += char(c);
     else
-      error("invalid input character code `%1'", c);
+      error("invalid input character code '%1'", c);
     if (c == '\n')
       break;
   }
@@ -66,9 +67,12 @@ void do_file(FILE *fp, const char *filename)
 {
   string linebuf;
   string str;
+  string fn(filename);
+  fn += '\0';
+  normalize_for_lf(fn);
+  current_filename = fn.contents();
   if (output_format == troff)
-    printf(".lf 1 %s\n", filename);
-  current_filename = filename;
+    printf(".lf 1 %s\n", current_filename);
   current_lineno = 0;
   while (read_line(fp, &linebuf)) {
     if (linebuf.length() >= 4
@@ -148,7 +152,7 @@ static int inline_equation(FILE *fp, string &linebuf, string &str)
   inline_flag = 1;
   for (;;) {
     if (no_newline_in_delim_flag && strchr(start + 1, end_delim) == 0) {
-      error("missing `%1'", end_delim);
+      error("missing '%1'", end_delim);
       char *nl = strchr(start + 1, '\n');
       if (nl != 0)
        *nl = '\0';
@@ -170,7 +174,7 @@ static int inline_equation(FILE *fp, string &linebuf, string &str)
       }
       str += ptr;
       if (!read_line(fp, &linebuf))
-       fatal("unterminated `%1' at line %2, looking for `%3'",
+       fatal("unterminated '%1' at line %2, looking for '%3'",
              start_delim, start_lineno, end_delim);
       linebuf += '\0';
       ptr = &linebuf[0];
@@ -300,9 +304,9 @@ int main(int argc, char **argv)
       if (optarg[0] == '\0' || optarg[1] == '\0')
        error("-d requires two character argument");
       else if (invalid_input_char(optarg[0]))
-       error("bad delimiter `%1'", optarg[0]);
+       error("bad delimiter '%1'", optarg[0]);
       else if (invalid_input_char(optarg[1]))
-       error("bad delimiter `%1'", optarg[1]);
+       error("bad delimiter '%1'", optarg[1]);
       else {
        start_delim = optarg[0];
        end_delim = optarg[1];
@@ -330,7 +334,7 @@ int main(int argc, char **argv)
       break;
     case 's':
       if (!set_gsize(optarg))
-       error("invalid size `%1'", optarg);
+       error("invalid size '%1'", optarg);
       break;
     case 'p':
       {
@@ -338,7 +342,7 @@ int main(int argc, char **argv)
        if (sscanf(optarg, "%d", &n) == 1)
          set_script_reduction(n);
        else
-         error("bad size `%1'", optarg);
+         error("bad size '%1'", optarg);
       }
       break;
     case 'm':
@@ -347,14 +351,14 @@ int main(int argc, char **argv)
        if (sscanf(optarg, "%d", &n) == 1)
          set_minimum_size(n);
        else
-         error("bad size `%1'", optarg);
+         error("bad size '%1'", optarg);
       }
       break;
     case 'r':
       one_size_reduction_flag = 1;
       break;
     case 'D':
-      warning("-D option is obsolete: use `set draw_lines 1' instead");
+      warning("-D option is obsolete: use 'set draw_lines 1' instead");
       draw_flag = 1;
       break;
     case 'N':
@@ -373,15 +377,17 @@ int main(int argc, char **argv)
     }
   init_table(device);
   init_char_table();
+  printf(".if !dEQ .ds EQ\n"
+        ".if !dEN .ds EN\n");
   if (output_format == troff) {
     printf(".if !'\\*(.T'%s' "
-          ".if !'\\*(.T'html' "        // the html device uses `-Tps' to render
+          ".if !'\\*(.T'html' "        // the html device uses '-Tps' to render
                                  // equations as images
-          ".tm warning: %s should have been given a `-T\\*(.T' option\n",
+          ".tm warning: %s should have been given a '-T\\*(.T' option\n",
           device, program_name);
     printf(".if '\\*(.T'html' "
           ".if !'%s'ps' "
-          ".tm warning: %s should have been given a `-Tps' option\n",
+          ".tm warning: %s should have been given a '-Tps' option\n",
           device, program_name);
     printf(".if '\\*(.T'html' "
           ".if !'%s'ps' "
@@ -394,7 +400,7 @@ int main(int argc, char **argv)
     if (fp) {
       do_file(fp, path);
       fclose(fp);
-      a_delete path;
+      free(path);
     }
   }
   if (optind >= argc)
@@ -407,7 +413,7 @@ int main(int argc, char **argv)
        errno = 0;
        FILE *fp = fopen(argv[i], "r");
        if (!fp)
-         fatal("can't open `%1': %2", argv[i], strerror(errno));
+         fatal("can't open '%1': %2", argv[i], strerror(errno));
        else {
          do_file(fp, argv[i]);
          fclose(fp);
index 5eea1c1710305945edc558aaecc13b21a880bfed..f8ccf7590b4eae2c56b21029e68e0b2964689c6d 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
 #include "pbox.h"
diff --git a/src/preproc/eqn/neqn.1.man b/src/preproc/eqn/neqn.1.man
new file mode 100644 (file)
index 0000000..d11881f
--- /dev/null
@@ -0,0 +1,66 @@
+.TH @G@NEQN @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@neqn \- format equations for ASCII output
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2001-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY @g@neqn
+.RI [ @g@eqn-options ]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I @g@neqn
+invokes the
+.IR @g@eqn (@MAN1EXT@)
+command with the
+.B ascii
+output device.
+.
+.
+.LP
+Note that
+.I @g@eqn
+does not support low-resolution, typewriter-like devices (although it
+may work adequately for very simple input).
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR @g@eqn (@MAN1EXT@)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/preproc/eqn/neqn.man b/src/preproc/eqn/neqn.man
deleted file mode 100644 (file)
index 96b809c..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-.TH @G@NEQN @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@neqn \- format equations for ascii output
-.
-.
-.\" license
-.de co
-Copyright \[co] 2001-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B @g@neqn
-[@g@eqn options]
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.B @g@neqn
-program is actually just a shell script which invokes the
-.BR @g@eqn (@MAN1EXT@)
-command with the
-.B ascii
-output device.
-.
-.
-.LP
-Note that
-.B @g@eqn
-does not support low-resolution, typewriter-like devices (although it
-may work adequately for very simple input).
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR @g@eqn (@MAN1EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index b671ebd67722e649bb17347a15f0755d9705ac49..5ac4fbb63ddebd868f32737c9d122d1d1d6e3fee 100644 (file)
@@ -1,5 +1,5 @@
 #! /bin/sh
-# Copyright (C) 2014 Free Software Foundation, Inc.
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
 #
 # This file is part of groff.
 # 
index 7e00b285f616fdef943caf7805206775b793c64e..8db993fb1b30a84653f6ad6c17f7aa96ecba7278 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,9 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
 
 #include "eqn.h"
 #include "pbox.h"
@@ -464,7 +466,7 @@ void size_box::output()
 
 size_box::~size_box()
 {
-  a_delete size;
+  free(size);
 }
 
 void size_box::debug_print()
@@ -481,7 +483,7 @@ font_box::font_box(char *s, box *pp) : pointer_box(pp), f(s)
 
 font_box::~font_box()
 {
-  a_delete f;
+  free(f);
 }
 
 int font_box::compute_metrics(int style)
index 339e4539ba363feb8d308b8f6fa20241f6c4170a..554ca3e657afdf66cb878cf914ac56f5ab238bb1 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
 #include "pbox.h"
@@ -151,7 +151,7 @@ void over_box::output()
     printf("\\h'\\n[" WIDTH_FORMAT "]u-\\n[" WIDTH_FORMAT "]u/2u'",
           uid, den->uid);
 
-    // print the the denominator
+    // print the denominator
     den->output();
 
   #ifdef USE_Z
index f1a4f0977f710a01b2034d547501f4c7e615601a..c3b249724980a64b17b1b76d16e1b95af727e49c 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 extern int fat_offset;
 
index 07885d05ce5c0e13ca74917db941e9b16fa7ac09..1d3f5925cf081542c8b404afdcbb2c1173a4c01a 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 // piles and matrices
 
 #include "eqn.h"
index 7dee3dfb5b2fb36102281abe0d3f9df202f4af63..acce79089b883c027fef9f8a9f96859aa481637b 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
 #include "pbox.h"
@@ -36,8 +36,8 @@ public:
 };
 
 /* The idea is that the script should attach to the rightmost box
-of a list. For example, given `2x sup 3', the superscript should
-attach to `x' rather than `2x'. */
+of a list. For example, given '2x sup 3', the superscript should
+attach to 'x' rather than '2x'. */
 
 box *make_script_box(box *nuc, box *sub, box *sup)
 {
index 14a8ffb1a14d651bb13dac8f53f198c85ccdafb6..5484eca83259836dbd26967d8022ab7b33c265bd 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
 #include "pbox.h"
index 8a2a304173d3478c33c111a4f8a3cab099a442b5..f64000800a505752631a5e9a591d214467b09415 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "eqn.h"
 #include "pbox.h"
index b1b613ffc178b3e4f96e6586902f25c931b56d15..f3d06f9f7c47475904f54d416214306b704380b2 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,9 +15,10 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <ctype.h>
+#include <stdlib.h>
 #include "eqn.h"
 #include "pbox.h"
 #include "ptable.h"
@@ -51,7 +52,7 @@ struct map entity_table[] = {
   {"*I", "I"},
   {"*k", "&kappa;"},   // ISOgrk3
   {"*K", "K;"},
-  {"*l", "&lamda;"},   // ISOgrk3
+  {"*l", "&lambda;"},  // ISOgrk3
   {"*L", "&Lambda;"},  // ISOgrk3
   {"*m", "&mu;"},      // ISOgrk3
   {"*M", "M"},
@@ -549,10 +550,10 @@ void box::set_spacing_type(char *type)
 {
   int t = lookup_spacing_type(type);
   if (t < 0)
-    error("unrecognised type `%1'", type);
+    error("unrecognised type '%1'", type);
   else
     spacing_type = t;
-  a_delete type;
+  free(type);
 }
 
 char_box::char_box(unsigned char cc)
@@ -647,7 +648,7 @@ special_char_box::special_char_box(const char *t)
 
 special_char_box::~special_char_box()
 {
-  a_delete s;
+  free(s);
 }
 
 void special_char_box::output()
@@ -699,7 +700,7 @@ void set_char_type(const char *type, char *ch)
   int st = lookup_spacing_type(type);
   int ft = lookup_font_type(type);
   if (st < 0 && ft < 0) {
-    error("bad character type `%1'", type);
+    error("bad character type '%1'", type);
     a_delete ch;
     return;
   }
@@ -708,7 +709,7 @@ void set_char_type(const char *type, char *ch)
   delete b;
 }
 
-/* We give primes special treatment so that in ``x' sub 2'', the ``2''
+/* We give primes special treatment so that in "x' sub 2", the "2"
 will be tucked under the prime */
 
 class prime_box : public pointer_box {
@@ -941,7 +942,7 @@ box *split_text(char *text)
        fb = b;
     }
   }
-  a_delete text;
+  free(text);
   if (lb != 0)
     return lb;
   else if (fb != 0)
diff --git a/src/preproc/grn/Makefile.sub b/src/preproc/grn/Makefile.sub
deleted file mode 100644 (file)
index 36734e0..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-# Makefile.sub for `preproc grn
-#
-# File position: <groff-source>/src/preproc/grn/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=grn$(EXEEXT)
-MAN1=grn.n
-MLIB=$(LIBM)
-XLIBS=$(LIBGROFF) $(LIBGNU)
-OBJS=\
-  hdb.$(OBJEXT) \
-  hpoint.$(OBJEXT) \
-  hgraph.$(OBJEXT) \
-  main.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/hdb.cpp \
-  $(srcdir)/hpoint.cpp \
-  $(srcdir)/hgraph.cpp \
-  $(srcdir)/main.cpp
-HDRS=\
-  $(srcdir)/gprint.h
-NAMEPREFIX=$(g)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 124103bacab8179251fae333cfc3d61defb88824..0e486bf66f20bac8ffab2b853faab2410fee0188 100644 (file)
@@ -48,16 +48,16 @@ better into the groff package.
       Using groff's default values instead of DEVDIR, DEFAULTDEV, PRINTER,
       TYPESETTER, and GREMLIB.
 
-      `res' is now an integer.
+      'res' is now an integer.
 
-      Added `-C' command flag (for compatibility mode) as with other
+      Added '-C' command flag (for compatibility mode) as with other
       preprocessors.
 
-      Added `-F' and `-v' option (similar to troff).
+      Added '-F' and '-v' option (similar to troff).
 
-      Renamed `-L' option to `-M' for consistence.
+      Renamed '-L' option to '-M' for consistence.
 
-      Removed `-P' option.
+      Removed '-P' option.
 
       Using font::load_desc() for scanning DESC files.
 
diff --git a/src/preproc/grn/grn.1.man b/src/preproc/grn/grn.1.man
new file mode 100644 (file)
index 0000000..8464711
--- /dev/null
@@ -0,0 +1,783 @@
+'\" t
+.TH @G@GRN @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@grn \- groff preprocessor for gremlin files
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2000-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr grn_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY @g@grn
+.OP \-Cv
+.OP \-T dev
+.OP \-M dir
+.OP \-F dir
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I @g@grn
+is a preprocessor for including
+.I gremlin
+pictures in
+.I groff
+input.
+.
+.I @g@grn
+writes to standard output, processing only input lines between two
+that start with
+.B .GS
+and
+.BR .GE .
+.
+Those lines must contain
+.I @g@grn
+commands (see below).
+.
+These commands request a
+.I gremlin
+file, and the picture in that file is converted and placed in the
+.I @g@troff
+input stream.
+.
+The
+.B .GS
+request may be followed by a C, L, or R to center, left, or right
+justify the whole
+.I gremlin
+picture (default justification is center).
+.
+If no
+.I file
+is mentioned, the standard input is read.
+.
+At the end of the picture, the position on the page is the bottom of the
+.I gremlin
+picture.
+.
+If the
+.I @g@grn
+entry is ended with
+.B .GF
+instead of
+.BR .GE ,
+the position is left at the top of the picture.
+.
+.
+.PP
+Please note that currently only the \-me macro package has support for
+.BR .GS ,
+.BR .GE ,
+and
+.BR .GF .
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.BI \-T dev
+Prepare output for printer
+.IR dev .
+The default device is
+.BR @DEVICE@ .
+See
+.BR groff (@MAN1EXT@)
+for acceptable devices.
+.
+.TP
+.BI \-M dir
+Prepend
+.I dir
+to the default search path for
+.I gremlin
+files.
+.
+The default path is (in that order) the current directory, the home
+directory,
+.IR @SYSTEMMACRODIR@ ,
+.IR @LOCALMACRODIR@ ,
+and
+.IR @MACRODIR@ .
+.
+.TP
+.BI \-F dir
+Search
+.I dir
+for subdirectories
+.IR dev name
+.RI ( name
+is the name of the device) for the
+.I DESC
+file before the default font directories
+.IR @LOCALFONTDIR@ ,
+.IR @FONTDIR@ ,
+and
+.IR @LEGACYFONTDIR@ .
+.
+.TP
+.B \-C
+Recognize
+.B .GS
+and
+.B .GE
+(and
+.BR .GF )
+even when followed by a character other than space or newline.
+.\".TP
+.\".B \-s
+.\"This switch causes the picture to be traversed twice:
+.\"The first time, only the interiors of filled polygons (as borderless
+.\"polygons) are printed.
+.\"The second time, the outline is printed as a series of line segments.
+.\"This way, postprocessors that overwrite rather than merge picture elements
+.\"(such as PostScript) can still have text and graphics on a shaded
+.\"background.
+.
+.TP
+.B \-v
+Print the version number.
+.
+.
+.\" ====================================================================
+.SH "GRN COMMANDS"
+.\" ====================================================================
+.
+Each input line between
+.B .GS
+and
+.B .GE
+may have one
+.I @g@grn
+command.
+.
+Commands consist of one or two strings separated by white space, the first
+string being the command and the second its operand.
+Commands may be upper or lower case and abbreviated down to one character.
+.
+.
+.PP
+Commands that affect a picture's environment (those listed before
+.BR default ,
+see below) are only in effect for the current picture:
+.
+The environment is reinitialized to the defaults at the start of the next
+picture.
+.
+The commands are as follows:
+.TP
+.BI 1\  N
+.TQ
+.BI 2\  N
+.TQ
+.BI 3\  N
+.TQ
+.BI 4\  N
+.
+Set
+.IR gremlin 's
+text size number 1 (2, 3, or 4) to
+.I N
+points.
+.
+The default is 12 (16, 24, and 36, respectively).
+.
+.TP
+.BI roman\  f
+.TQ
+.BI italics\  f
+.TQ
+.BI bold\  f
+.TQ
+.BI special\  f
+Set the roman (italics, bold, or special) font to
+.IR @g@troff 's
+font
+.I f
+(either a name or number).
+.
+The default is R (I, B, and S, respectively).
+.
+.TP
+.BI l\  f
+.TQ
+.BI stipple\  f
+Set the stipple font to
+.IR @g@troff 's
+stipple font
+.I f
+(name or number).
+.
+The command
+.B stipple
+may be abbreviated down as far as \[oq]st\[cq] (to avoid confusion
+with
+.BR special ).
+.
+There is
+.I no
+default for stipples (unless one is set by the default command), and
+it is invalid to include a
+.I gremlin
+picture with polygons without specifying a
+stipple font.
+.
+.TP
+.BI x\  N
+.TQ
+.BI scale\  N
+Magnify the picture (in addition to any default magnification) by
+.IR N ,
+a floating point number larger than zero.
+.
+The command
+.B scale
+may be abbreviated down to \[oq]sc\[cq].
+.
+.TP
+.BI narrow\  N
+.TQ
+.BI medium\  N
+.TQ
+.BI thick\  N
+.
+Set the thickness of
+.IR gremlin 's
+narrow (medium and thick, respectively) lines to
+.I N
+times 0.15pt (this value can be changed at compile time).
+.
+The default is 1.0 (3.0 and 5.0, respectively), which corresponds to 0.15pt
+(0.45pt and 0.75pt, respectively).
+.
+A thickness value of zero selects the smallest available line thickness.
+.
+Negative values cause the line thickness to be proportional to the
+current point size.
+.
+.TP
+.BI pointscale\  <off/on>
+Scale text to match the picture.
+.
+Gremlin text is usually printed in the point size specified with the
+commands
+.BR 1 ,
+.BR 2 ,
+.BR 3 ,
+.RB or\~ 4 ,
+regardless of any scaling factors in the picture.
+.
+Setting
+.B pointscale
+will cause the point sizes to scale with the picture (within
+.IR @g@troff 's
+limitations, of course).
+.
+An operand of anything but
+.I off
+will turn text scaling on.
+.
+.TP
+.B default
+Reset the picture environment defaults to the settings in the current
+picture.
+.
+This is meant to be used as a global parameter setting mechanism at
+the beginning of the
+.I @g@troff
+input file, but can be used at any time to reset the
+default settings.
+.
+.TP
+.BI width\  N
+Forces the picture to be
+.I N
+inches wide.
+.
+This overrides any scaling factors present in the same picture.
+.RB \[oq] width
+.IR 0 \[cq]
+is ignored.
+.
+.TP
+.BI height\  N
+Forces picture to be
+.I N
+inches high, overriding other scaling factors.
+.
+If both \[oq]width\[cq] and \[oq]height\[cq] are specified the tighter
+constraint will determine the scale of the picture.
+.B Height
+and
+.B width
+commands are not saved with a
+.B default
+command.
+.
+They will, however, affect point size scaling if that option is set.
+.
+.TP
+.BI file\  name
+Get picture from
+.I gremlin
+file
+.I name
+located the current directory (or in the library directory; see the
+.B \-M
+option above).
+.
+If two
+.B file
+commands are given, the second one overrides the first.
+.
+If
+.I name
+doesn't exist, an error message is reported and processing
+continues from the
+.B .GE
+line.
+.
+.
+.\" ====================================================================
+.SH "NOTES ABOUT GROFF"
+.\" ====================================================================
+.
+Since
+.I @g@grn
+is a preprocessor, it doesn't know about current indents, point
+sizes, margins, number registers, etc.  Consequently, no
+.I @g@troff
+input can be placed between the
+.B .GS
+and
+.B .GE
+requests.
+.
+However,
+.I gremlin
+text is now processed by
+.IR @g@troff ,
+so anything valid in a single line of
+.I @g@troff
+input is valid in a line of
+.I gremlin
+text (barring \[oq].\[cq] directives at the beginning of a line).
+.
+Thus, it is possible to have equations within a
+.I gremlin
+figure by including in the
+.I gremlin
+file
+.I eqn
+expressions enclosed by previously defined delimiters (e.g.\&
+.IR $$ ).
+.
+.
+.PP
+When using
+.I @g@grn
+along with other preprocessors, it is best to run
+.I tbl
+before
+.IR @g@grn ,
+.IR pic ,
+and/or
+.I ideal
+to avoid overworking
+.IR tbl .
+.
+.I Eqn
+should always be run last.
+.
+.
+.PP
+A picture is considered an entity, but that doesn't stop
+.I @g@troff
+from trying to break it up if it falls off the end of a page.
+.
+Placing the picture between \[oq]keeps\[cq] in \-me macros will ensure
+proper placement.
+.
+.
+.PP
+.I @g@grn
+uses
+.IR @g@troff 's
+number registers
+.B g1
+through
+.B g9
+and sets registers
+.B g1
+and
+.B g2
+to the width and height of the
+.I gremlin
+figure (in device units) before entering the
+.B .GS
+request (this is for those who want to rewrite these macros).
+.
+.
+.\" ====================================================================
+.SH "GREMLIN FILE FORMAT"
+.\" ====================================================================
+.
+There exist two distinct
+.I gremlin
+file formats, the original format from the
+.I AED
+graphic terminal version, and the
+.I SUN
+or
+.I X11
+version.
+.
+An extension to the
+.IR SUN / X11
+version allowing reference points with negative coordinates is
+.B not
+compatible with the
+.I AED
+version.
+.
+As long as a
+.I gremlin
+file does not contain negative coordinates, either format will be read
+correctly by either version of
+.I gremlin
+or
+.IR @g@grn .
+.
+The other difference from
+.IR SUN / X11
+format is the use of names for picture objects (e.g., POLYGON, CURVE)
+instead of numbers.
+.
+Files representing the same picture are shown in Table 1 in each format.
+.sp
+.TS
+center, tab(@);
+l lw(0.1i) l.
+sungremlinfile@@gremlinfile
+0 240.00 128.00@@0 240.00 128.00
+CENTCENT@@2
+240.00 128.00@@240.00 128.00
+185.00 120.00@@185.00 120.00
+240.00 120.00@@240.00 120.00
+296.00 120.00@@296.00 120.00
+*@@\-1.00 \-1.00
+2 3@@2 3
+10 A Triangle@@10 A Triangle
+POLYGON@@6
+224.00 416.00@@224.00 416.00
+96.00 160.00@@96.00 160.00
+384.00 160.00@@384.00 160.00
+*@@\-1.00 \-1.00
+5 1@@5 1
+0@@0
+\-1@@\-1
+.T&
+css.
+.sp
+Table 1.  File examples
+.TE
+.sp
+.IP \(bu
+The first line of each
+.I gremlin
+file contains either the string
+.B gremlinfile
+.RI ( AED
+version) or
+.B sungremlinfile
+.RI ( SUN / X11 )
+.IP \(bu
+The second line of the file contains an orientation, and
+.B x
+and
+.B y
+values for a positioning point, separated by spaces.
+The orientation, either
+.B 0
+or
+.BR 1 ,
+is ignored by the
+.IR SUN / X11
+version.
+.
+.B 0
+means that
+.I gremlin
+will display things in horizontal format (drawing area wider than it is
+tall, with menu across top).
+.
+.B 1
+means that
+.I gremlin
+will display things in vertical format (drawing area taller than it is
+wide, with menu on left side).
+.
+.B x
+and
+.B y
+are floating point values giving a positioning point to be used when
+this file is read into another file.
+.
+The stuff on this line really isn't all that important; a value of
+\[lq]1 0.00 0.00\[rq] is suggested.
+.
+.IP \(bu
+The rest of the file consists of zero or more element specifications.
+.
+After the last element specification is a line containing the string
+\[lq]\-1\[rq].
+.
+.IP \(bu
+Lines longer than 127 characters are chopped to this limit.
+.
+.
+.\" ====================================================================
+.SH "ELEMENT SPECIFICATIONS"
+.\" ====================================================================
+.
+.IP \(bu
+The first line of each element contains a single decimal number giving
+the type of the element
+.RI ( AED
+version) or its ASCII name
+.RI ( SUN / X11
+version).
+.
+See Table 2.
+.sp
+.TS
+center, tab(@);
+css
+ccc
+nll.
+\fIgremlin\fP File Format \(mi Object Type Specification
+.sp
+\fIAED\fP Number@\fISUN\/\fP/\,\fIX11\fP Name@Description
+0@BOTLEFT@bottom-left-justified text
+1@BOTRIGHT@bottom-right-justified text
+2@CENTCENT@center-justified text
+3@VECTOR@vector
+4@ARC@arc
+5@CURVE@curve
+6@POLYGON@polygon
+7@BSPLINE@b-spline
+8@BEZIER@B\['e]zier
+10@TOPLEFT@top-left-justified text
+11@TOPCENT@top-center-justified text
+12@TOPRIGHT@top-right-justified text
+13@CENTLEFT@left-center-justified text
+14@CENTRIGHT@right-center-justified text
+15@BOTCENT@bottom-center-justified text
+.T&
+css.
+.sp
+Table 2.
+Type Specifications in \fIgremlin\fP Files
+.TE
+.sp
+.IP \(bu
+After the object type comes a variable number of lines, each specifying a
+point used to display the element.
+Each line contains an x-coordinate and a y-coordinate in floating point
+format, separated by spaces.
+The list of points is terminated by a line containing the string \[lq]\-1.0
+\-1.0\[rq]
+.RI ( AED
+version) or a single asterisk, \[lq]*\[rq]
+.RI ( SUN / X11
+version).
+.
+.IP \(bu
+After the points comes a line containing two decimal values, giving the
+brush and size for the element.
+.
+The brush determines the style in which things are drawn.
+.
+For vectors, arcs, and curves there are six valid brush values:
+.sp
+.TS
+center, tab(@);
+ncw(0.1i)l.
+1 \(mi@@thin dotted lines
+2 \(mi@@thin dot-dashed lines
+3 \(mi@@thick solid lines
+4 \(mi@@thin dashed lines
+5 \(mi@@thin solid lines
+6 \(mi@@medium solid lines
+.TE
+.sp
+For polygons, one more value, 0, is valid.
+It specifies a polygon with an invisible border.
+For text, the brush selects a font as follows:
+.sp
+.TS
+center, tab(@);
+ncw(0.1i)l.
+1 \(mi@@roman (R font in groff)
+2 \(mi@@italics (I font in groff)
+3 \(mi@@bold (B font in groff)
+4 \(mi@@special (S font in groff)
+.TE
+.sp
+If you're using
+.I @g@grn
+to run your pictures through
+.IR groff ,
+the font is really just a starting font:
+.
+The text string can contain formatting sequences like
+\[lq]\efI\[rq]
+or
+\[lq]\ed\[rq]
+which may change the font (as well as do many other things).
+.
+For text, the size field is a decimal value between 1 and 4.
+.
+It selects the size of the font in which the text will be drawn.
+.
+For polygons, this size field is interpreted as a stipple number to
+fill the polygon with.
+.
+The number is used to index into a stipple font at print time.
+.
+.IP \(bu
+The last line of each element contains a decimal number and a string of
+characters, separated by a single space.
+.
+The number is a count of the number of characters in the string.
+.
+This information is only used for text elements, and contains the text
+string.
+.
+There can be spaces inside the text.
+.
+For arcs, curves, and vectors, this line of the element contains the
+string \[lq]0\[rq].
+.
+.
+.\" ====================================================================
+.SH "NOTES ON COORDINATES"
+.\" ====================================================================
+.
+.I gremlin
+was designed for
+.IR AED s,
+and its coordinates reflect the
+.I AED
+coordinate space.
+.
+For vertical pictures, x-values range 116 to 511, and y-values from 0
+to 483.
+.
+For horizontal pictures, x-values range from 0 to 511 and y-values
+range from 0 to 367.
+.
+Although you needn't absolutely stick to this range, you'll
+get best results if you at least stay in this vicinity.
+.
+Also, point lists are terminated by a point of (\-1, \-1), so you
+shouldn't ever use negative coordinates.
+.
+.I gremlin
+writes out coordinates using format \[lq]%f1.2\[rq]; it's probably
+a good idea to use the same format if you want to modify the
+.I @g@grn
+code.
+.
+.
+.\" ====================================================================
+.SH "NOTES ON SUN/X11 COORDINATES"
+.\" ====================================================================
+.
+There is no longer a restriction on the range of coordinates used to
+create objects in the
+.IR SUN / X11
+version of
+.IR gremlin .
+.
+However, files with negative coordinates
+.B will
+cause problems if displayed on the
+.IR AED .
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.IR @FONTDIR@/dev name /DESC
+Device description file for device
+.IR name .
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+David Slattengren and Barry Roitblat wrote the original Berkeley
+.IR grn .
+.
+Daniel Senderowicz and Werner Lemberg modified it for
+.IR groff .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR gremlin (1),
+.BR groff (@MAN1EXT@),
+.BR @g@pic (@MAN1EXT@),
+.BR ideal (1)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[grn_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/preproc/grn/grn.am b/src/preproc/grn/grn.am
new file mode 100644 (file)
index 0000000..c3449f1
--- /dev/null
@@ -0,0 +1,37 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += grn
+grn_SOURCES = \
+  src/preproc/grn/hdb.cpp \
+  src/preproc/grn/hpoint.cpp \
+  src/preproc/grn/hgraph.cpp \
+  src/preproc/grn/main.cpp \
+  src/preproc/grn/gprint.h
+src/preproc/grn/main.$(OBJEXT): defs.h
+grn_LDADD = libgroff.a lib/libgnu.a $(LIBM)
+PREFIXMAN1 += src/preproc/grn/grn.1
+EXTRA_DIST += src/preproc/grn/README src/preproc/grn/grn.1.man
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/src/preproc/grn/grn.man b/src/preproc/grn/grn.man
deleted file mode 100644 (file)
index f7751c9..0000000
+++ /dev/null
@@ -1,817 +0,0 @@
-'\" t
-.TH @G@GRN @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@grn \- groff preprocessor for gremlin files
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.\" license
-.de co
-Copyright \[co] 2000-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" authors
-.de au
-David Slattengren and Barry Roitblat wrote the original Berkeley
-.IR @g@grn .
-.
-.PP
-Daniel Senderowicz and Werner Lemberg modified it for
-.IR groff .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Definitons
-.\" --------------------------------------------------------------------
-.
-.do nr grn_C \n[.C]
-.cp 0
-.
-.de TQ
-.  br
-.  ns
-.  TP \\$1
-..
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.  ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.  el .TP "\\$1"
-..
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.BR @g@grn
-[
-.B \-Cv
-]
-[
-.BI \-T dev
-]
-[
-.BI \-M dir
-]
-[
-.BI \-F dir
-]
-[
-.IR file\.\.\.\&
-]
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.I @g@grn
-is a preprocessor for including
-.I gremlin
-pictures in
-.I groff
-input.
-.
-.I @g@grn
-writes to standard output, processing only input lines between two
-that start with
-.B .GS
-and
-.BR .GE .
-.
-Those lines must contain
-.I @g@grn
-commands (see below).
-.
-These commands request a
-.I gremlin
-file, and the picture in that file is converted and placed in the
-.I @g@troff
-input stream.
-.
-The
-.B .GS
-request may be followed by a C, L, or R to center, left, or right
-justify the whole
-.I gremlin
-picture (default justification is center).
-.
-If no
-.I file
-is mentioned, the standard input is read.
-.
-At the end of the picture, the position on the page is the bottom of the
-.I gremlin
-picture.
-.
-If the
-.I @g@grn
-entry is ended with
-.B .GF
-instead of
-.BR .GE ,
-the position is left at the top of the picture.
-.
-.
-.PP
-Please note that currently only the \-me macro package has support for
-.BR .GS ,
-.BR .GE ,
-and
-.BR .GF .
-.
-.
-.PP
-The following command-line options are understood:
-.
-.TP
-.BI \-T dev
-Prepare output for printer
-.IR dev .
-The default device is
-.BR @DEVICE@ .
-See
-.BR groff (@MAN1EXT@)
-for acceptable devices.
-.
-.TP
-.BI \-M dir
-Prepend
-.I dir
-to the default search path for
-.I gremlin
-files.
-.
-The default path is (in that order) the current directory, the home
-directory,
-.BR @SYSTEMMACRODIR@ ,
-.BR @LOCALMACRODIR@ ,
-and
-.BR @MACRODIR@ .
-.
-.TP
-.BI \-F dir
-Search
-.I dir
-for subdirectories
-.BI dev name
-.RI ( name
-is the name of the device) for the
-.B DESC
-file before the default font directories
-.BR @LOCALFONTDIR@ ,
-.BR @FONTDIR@ ,
-and
-.BR @LEGACYFONTDIR@ .
-.
-.TP
-.B \-C
-Recognize
-.B .GS
-and
-.B .GE
-(and
-.BR .GF )
-even when followed by a character other than space or newline.
-.\".TP
-.\".B \-s
-.\"This switch causes the picture to be traversed twice:
-.\"The first time, only the interiors of filled polygons (as borderless
-.\"polygons) are printed.
-.\"The second time, the outline is printed as a series of line segments.
-.\"This way, postprocessors that overwrite rather than merge picture elements
-.\"(such as Postscript) can still have text and graphics on a shaded
-.\"background.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.PP
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "GRN COMMANDS"
-.\" --------------------------------------------------------------------
-.
-Each input line between
-.B .GS
-and
-.B .GE
-may have one
-.I @g@grn
-command.
-.
-Commands consist of one or two strings separated by white space, the first
-string being the command and the second its operand.
-Commands may be upper or lower case and abbreviated down to one character.
-.
-.
-.PP
-Commands that affect a picture\[aq]s environment (those listed before
-.BR default ,
-see below) are only in effect for the current picture:
-.
-The environment is reinitialized to the defaults at the start of the next
-picture.
-.
-The commands are as follows:
-.TP
-.BI 1\  N
-.TQ
-.BI 2\  N
-.TQ
-.BI 3\  N
-.TQ
-.BI 4\  N
-.
-Set
-.IR gremlin \[aq]s
-text size number 1 (2, 3, or 4) to
-.I N
-points.
-.
-The default is 12 (16, 24, and 36, respectively).
-.
-.TP
-.BI roman\  f
-.TQ
-.BI italics\  f
-.TQ
-.BI bold\  f
-.TQ
-.BI special\  f
-Set the roman (italics, bold, or special) font to
-.IR @g@troff \[aq]s
-font
-.I f
-(either a name or number).
-.
-The default is R (I, B, and S, respectively).
-.
-.TP
-.BI l\  f
-.TQ
-.BI stipple\  f
-Set the stipple font to
-.IR @g@troff \[aq]s
-stipple font
-.I f
-(name or number).
-.
-The command
-.B stipple
-may be abbreviated down as far as \[oq]st\[cq] (to avoid confusion
-with
-.BR special ).
-.
-There is
-.I no
-default for stipples (unless one is set by the default command), and
-it is invalid to include a
-.I gremlin
-picture with polygons without specifying a
-stipple font.
-.
-.TP
-.BI x\  N
-.TQ
-.BI scale\  N
-Magnify the picture (in addition to any default magnification) by
-.IR N ,
-a floating point number larger than zero.
-.
-The command
-.B scale
-may be abbreviated down to \[oq]sc\[cq].
-.
-.TP
-.BI narrow\  N
-.TQ
-.BI medium\  N
-.TQ
-.BI thick\  N
-.
-Set the thickness of
-.IR gremlin \[aq]s
-narrow (medium and thick, respectively) lines to
-.I N
-times 0.15pt (this value can be changed at compile time).
-.
-The default is 1.0 (3.0 and 5.0, respectively), which corresponds to 0.15pt
-(0.45pt and 0.75pt, respectively).
-.
-A thickness value of zero selects the smallest available line thickness.
-.
-Negative values cause the line thickness to be proportional to the
-current point size.
-.
-.TP
-.BI pointscale\  <off/on>
-Scale text to match the picture.
-.
-Gremlin text is usually printed in the point size specified with the
-commands
-.BR 1 ,
-.BR 2 ,
-.BR 3 ,
-.RB or\~ 4 ,
-regardless of any scaling factors in the picture.
-.
-Setting
-.B pointscale
-will cause the point sizes to scale with the picture (within
-.IR @g@troff \[aq]s
-limitations, of course).
-.
-An operand of anything but
-.I off
-will turn text scaling on.
-.
-.TP
-.B default
-Reset the picture environment defaults to the settings in the current
-picture.
-.
-This is meant to be used as a global parameter setting mechanism at
-the beginning of the
-.I @g@troff
-input file, but can be used at any time to reset the
-default settings.
-.
-.TP
-.BI width\  N
-Forces the picture to be
-.I N
-inches wide.
-.
-This overrides any scaling factors present in the same picture.
-.RB \[oq] width
-.IR 0 \[cq]
-is ignored.
-.
-.TP
-.BI height\  N
-Forces picture to be
-.I N
-inches high, overriding other scaling factors.
-.
-If both \[oq]width\[cq] and \[oq]height\[cq] are specified the tighter
-constraint will determine the scale of the picture.
-.B Height
-and
-.B width
-commands are not saved with a
-.B default
-command.
-.
-They will, however, affect point size scaling if that option is set.
-.
-.TP
-.BI file\  name
-Get picture from
-.I gremlin
-file
-.I name
-located the current directory (or in the library directory; see the
-.B \-M
-option above).
-.
-If two
-.B file
-commands are given, the second one overrides the first.
-.
-If
-.I name
-doesn\[aq]t exist, an error message is reported and processing
-continues from the
-.B .GE
-line.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "NOTES ABOUT GROFF"
-.\" --------------------------------------------------------------------
-.
-Since
-.I @g@grn
-is a preprocessor, it doesn\[aq]t know about current indents, point
-sizes, margins, number registers, etc.  Consequently, no
-.I @g@troff
-input can be placed between the
-.B .GS
-and
-.B .GE
-requests.
-.
-However,
-.I gremlin
-text is now processed by
-.IR @g@troff ,
-so anything valid in a single line of
-.I @g@troff
-input is valid in a line of
-.I gremlin
-text (barring \[oq].\[cq] directives at the beginning of a line).
-.
-Thus, it is possible to have equations within a
-.I gremlin
-figure by including in the
-.I gremlin
-file
-.I eqn
-expressions enclosed by previously defined delimiters (e.g.\&
-.IR $$ ).
-.
-.
-.PP
-When using
-.I @g@grn
-along with other preprocessors, it is best to run
-.I tbl
-before
-.IR @g@grn ,
-.IR pic ,
-and/or
-.I ideal
-to avoid overworking
-.IR tbl .
-.
-.I Eqn
-should always be run last.
-.
-.
-.PP
-A picture is considered an entity, but that doesn\[aq]t stop
-.I @g@troff
-from trying to break it up if it falls off the end of a page.
-.
-Placing the picture between \[oq]keeps\[cq] in \-me macros will ensure
-proper placement.
-.
-.
-.PP
-.I @g@grn
-uses
-.IR @g@troff \[aq]s
-number registers
-.B g1
-through
-.B g9
-and sets registers
-.B g1
-and
-.B g2
-to the width and height of the
-.I gremlin
-figure (in device units) before entering the
-.B .GS
-request (this is for those who want to rewrite these macros).
-.
-.
-.\" --------------------------------------------------------------------
-.SH "GREMLIN FILE FORMAT"
-.\" --------------------------------------------------------------------
-.
-There exist two distinct
-.I gremlin
-file formats, the original format from the
-.I AED
-graphic terminal version, and the
-.I SUN
-or
-.I X11
-version.
-.
-An extension to the
-.IR SUN / X11
-version allowing reference points with negative coordinates is
-.B not
-compatible with the
-.I AED
-version.
-.
-As long as a
-.I gremlin
-file does not contain negative coordinates, either format will be read
-correctly by either version of
-.I gremlin
-or
-.IR @g@grn .
-.
-The other difference to the
-.IR SUN / X11
-format is the use of names for picture objects (e.g., POLYGON, CURVE)
-instead of numbers.
-.
-Files representing the same picture are shown in Table 1 in each format.
-.sp
-.TS
-center, tab(@);
-l lw(0.1i) l.
-sungremlinfile@@gremlinfile
-0 240.00 128.00@@0 240.00 128.00
-CENTCENT@@2
-240.00 128.00@@240.00 128.00
-185.00 120.00@@185.00 120.00
-240.00 120.00@@240.00 120.00
-296.00 120.00@@296.00 120.00
-*@@\-1.00 \-1.00
-2 3@@2 3
-10 A Triangle@@10 A Triangle
-POLYGON@@6
-224.00 416.00@@224.00 416.00
-96.00 160.00@@96.00 160.00
-384.00 160.00@@384.00 160.00
-*@@\-1.00 \-1.00
-5 1@@5 1
-0@@0
-\-1@@\-1
-.T&
-css.
-.sp
-Table 1.  File examples
-.TE
-.sp
-.IP \(bu
-The first line of each
-.I gremlin
-file contains either the string
-.B gremlinfile
-.RI ( AED
-version) or
-.B sungremlinfile
-.RI ( SUN / X11 )
-.IP \(bu
-The second line of the file contains an orientation, and
-.B x
-and
-.B y
-values for a positioning point, separated by spaces.
-The orientation, either
-.B 0
-or
-.BR 1 ,
-is ignored by the
-.IR SUN / X11
-version.
-.
-.B 0
-means that
-.I gremlin
-will display things in horizontal format (drawing area wider than it is
-tall, with menu across top).
-.
-.B 1
-means that
-.I gremlin
-will display things in vertical format (drawing area taller than it is
-wide, with menu on left side).
-.
-.B x
-and
-.B y
-are floating point values giving a positioning point to be used when
-this file is read into another file.
-.
-The stuff on this line really isn\[aq]t all that important; a value of
-\[lq]1 0.00 0.00\[rq] is suggested.
-.
-.IP \(bu
-The rest of the file consists of zero or more element specifications.
-.
-After the last element specification is a line containing the string
-\[lq]\-1\[rq].
-.
-.IP \(bu
-Lines longer than 127 characters are chopped to this limit.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ELEMENT SPECIFICATIONS
-.\" --------------------------------------------------------------------
-.
-.IP \(bu
-The first line of each element contains a single decimal number giving
-the type of the element
-.RI ( AED
-version) or its ASCII name
-.RI ( SUN / X11
-version).
-.
-See Table 2.
-.sp
-.TS
-center, tab(@);
-css
-ccc
-nll.
-\fIgremlin\fP File Format \(mi Object Type Specification
-.sp
-\fIAED\fP Number@\fISUN\/\fP/\,\fIX11\fP Name@Description
-0@BOTLEFT@bottom-left-justified text
-1@BOTRIGHT@bottom-right-justified text
-2@CENTCENT@center-justified text
-3@VECTOR@vector
-4@ARC@arc
-5@CURVE@curve
-6@POLYGON@polygon
-7@BSPLINE@b-spline
-8@BEZIER@B\['e]zier
-10@TOPLEFT@top-left-justified text
-11@TOPCENT@top-center-justified text
-12@TOPRIGHT@top-right-justified text
-13@CENTLEFT@left-center-justified text
-14@CENTRIGHT@right-center-justified text
-15@BOTCENT@bottom-center-justified text
-.T&
-css.
-.sp
-Table 2.
-Type Specifications in \fIgremlin\fP Files
-.TE
-.sp
-.IP \(bu
-After the object type comes a variable number of lines, each specifying a
-point used to display the element.
-Each line contains an x-coordinate and a y-coordinate in floating point
-format, separated by spaces.
-The list of points is terminated by a line containing the string \[lq]\-1.0
-\-1.0\[rq]
-.RI ( AED
-version) or a single asterisk, \[lq]*\[rq]
-.RI ( SUN / X11
-version).
-.
-.IP \(bu
-After the points comes a line containing two decimal values, giving the
-brush and size for the element.
-.
-The brush determines the style in which things are drawn.
-.
-For vectors, arcs, and curves there are six valid brush values:
-.sp
-.TS
-center, tab(@);
-ncw(0.1i)l.
-1 \(mi@@thin dotted lines
-2 \(mi@@thin dot-dashed lines
-3 \(mi@@thick solid lines
-4 \(mi@@thin dashed lines
-5 \(mi@@thin solid lines
-6 \(mi@@medium solid lines
-.TE
-.sp
-For polygons, one more value, 0, is valid.
-It specifies a polygon with an invisible border.
-For text, the brush selects a font as follows:
-.sp
-.TS
-center, tab(@);
-ncw(0.1i)l.
-1 \(mi@@roman (R font in groff)
-2 \(mi@@italics (I font in groff)
-3 \(mi@@bold (B font in groff)
-4 \(mi@@special (S font in groff)
-.TE
-.sp
-If you\[aq]re using
-.I @g@grn
-to run your pictures through
-.IR groff ,
-the font is really just a starting font:
-.
-The text string can contain formatting sequences like
-\[lq]\efI\[rq]
-or
-\[lq]\ed\[rq]
-which may change the font (as well as do many other things).
-.
-For text, the size field is a decimal value between 1 and 4.
-.
-It selects the size of the font in which the text will be drawn.
-.
-For polygons, this size field is interpreted as a stipple number to
-fill the polygon with.
-.
-The number is used to index into a stipple font at print time.
-.
-.IP \(bu
-The last line of each element contains a decimal number and a string of
-characters, separated by a single space.
-.
-The number is a count of the number of characters in the string.
-.
-This information is only used for text elements, and contains the text
-string.
-.
-There can be spaces inside the text.
-.
-For arcs, curves, and vectors, this line of the element contains the
-string \[lq]0\[rq].
-.
-.
-.\" --------------------------------------------------------------------
-.SH "NOTES ON COORDINATES"
-.\" --------------------------------------------------------------------
-.
-.I gremlin
-was designed for
-.IR AED s,
-and its coordinates reflect the
-.I AED
-coordinate space.
-.
-For vertical pictures, x-values range 116 to 511, and y-values from 0
-to 483.
-.
-For horizontal pictures, x-values range from 0 to 511 and y-values
-range from 0 to 367.
-.
-Although you needn\[aq]t absolutely stick to this range, you\[aq]\ll
-get best results if you at least stay in this vicinity.
-.
-Also, point lists are terminated by a point of (\-1, \-1), so you
-shouldn't ever use negative coordinates.
-.
-.I gremlin
-writes out coordinates using format \[lq]%f1.2\[rq]; it\[aq]s probably
-a good idea to use the same format if you want to modify the
-.I @g@grn
-code.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "NOTES ON SUN/X11 COORDINATES"
-.\" --------------------------------------------------------------------
-.
-There is no longer a restriction on the range of coordinates used to
-create objects in the
-.IR SUN / X11
-version of
-.IR gremlin .
-.
-However, files with negative coordinates
-.B will
-cause problems if displayed on the
-.IR AED .
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'@FONTDIR@/devname/DESC'u+3n
-.BI @FONTDIR@/dev name /DESC
-Device description file for device
-.IR name .
-.
-.
-.\" --------------------------------------------------------------------
-.SH SEE ALSO
-.\" --------------------------------------------------------------------
-.
-.BR gremlin (1),
-.BR groff (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR ideal (1)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.cp \n[grn_C]
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 408609a097b9c60a4e854ea9cc6036200220ffa6..c61e099bcb512a173f4d9dea767cd2b1cddb4ad8 100644 (file)
@@ -6,6 +6,10 @@
  * gremlin picture editor.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <stdlib.h>
 #include "gprint.h"
 #include <string.h>
@@ -94,7 +98,7 @@ DBRead(register FILE *file)
   (void) fscanf(file, "%" MAXSTRING_S "s%*[^\n]\n", string);
   if (strcmp(string, "gremlinfile")) {
     if (strcmp(string, "sungremlinfile")) {
-      error("`%1' is not a gremlin file", gremlinfile);
+      error("'%1' is not a gremlin file", gremlinfile);
       return (elist);
     }
     SUNFILE = TRUE;
@@ -109,7 +113,7 @@ DBRead(register FILE *file)
     /* I changed the scanf format because the element */
     /* can have two words (e.g. CURVE SPLINE)         */
     if (fscanf(file, "\n%" MAXSTRING_S "[^\n]%*[^\n]\n", string) == EOF) {
-      error("`%1', error in file format", gremlinfile);
+      error("'%1', error in file format", gremlinfile);
       return (elist);
     }
 
@@ -241,6 +245,7 @@ DBGetType(register char *s)
       return (CENTRIGHT);
     default:
       fatal("unknown element type");
+      // fatal() does not return
     }
   case 'B':
     switch (s[3]) {
@@ -252,6 +257,7 @@ DBGetType(register char *s)
       return (BOTRIGHT);
     default:
       fatal("unknown element type");
+      // fatal() does not return
     }
   case 'T':
     switch (s[3]) {
@@ -263,6 +269,7 @@ DBGetType(register char *s)
       return (TOPRIGHT);
     default:
       fatal("unknown element type");
+      // fatal() does not return
     }
   default:
     fatal("unknown element type");
index 01208951f28fbcdb0126a816d3061204aa7749ff..dbc008606c4e55bcfad9cb1cbf515df821abb2b3 100644 (file)
@@ -381,7 +381,7 @@ HGSetFont(int font,
  |             style of subsequent lines.  Does nothing if no change is
  |              needed.
  |
- | Side Efct:  Sets `linmode' and `linethicknes'.
+ | Side Efct:  Sets 'linmode' and 'linethicknes'.
  *----------------------------------------------------------------------------*/
 
 void
@@ -409,9 +409,9 @@ HGSetBrush(int mode)
  | Routine:    deltax (x_destination)
  |
  | Results:    Scales and outputs a number for delta x (with a leading
- |             space) given `lastx' and x_destination.
+ |             space) given 'lastx' and x_destination.
  |
- | Side Efct:  Resets `lastx' to x_destination.
+ | Side Efct:  Resets 'lastx' to x_destination.
  *----------------------------------------------------------------------------*/
 
 void
@@ -428,10 +428,10 @@ deltax(double x)
  | Routine:    deltay (y_destination)
  |
  | Results:    Scales and outputs a number for delta y (with a leading
- |             space) given `lastyline' and y_destination.
+ |             space) given 'lastyline' and y_destination.
  |
- | Side Efct:  Resets `lastyline' to y_destination.  Since `line' vertical
- |             motions don't affect `page' ones, `lasty' isn't updated.
+ | Side Efct:  Resets 'lastyline' to y_destination.  Since 'line' vertical
+ |             motions don't affect 'page' ones, 'lasty' isn't updated.
  *----------------------------------------------------------------------------*/
 
 void
@@ -502,10 +502,10 @@ tmove(POINT * ptr)
 /*----------------------------------------------------------------------------*
  | Routine:    cr ( )
  |
- | Results:    Ends off an input line.  `.sp -1' is also added to counteract
+ | Results:    Ends off an input line.  '.sp -1' is also added to counteract
  |             the vertical move done at the end of text lines.
  |
- | Side Efct:  Sets `lastx' to `xleft' for troff's return to left margin.
+ | Side Efct:  Sets 'lastx' to 'xleft' for troff's return to left margin.
  *----------------------------------------------------------------------------*/
 
 void
@@ -567,7 +567,7 @@ drawwig(POINT * ptr,
  | Routine:    HGArc (xcenter, ycenter, xstart, ystart, angle)
  |
  | Results:    This routine plots an arc centered about (cx, cy) counter
- |             clockwise starting from the point (px, py) through `angle'
+ |             clockwise starting from the point (px, py) through 'angle'
  |             degrees.  If angle is 0, a full circle is drawn.  It does so
  |             by creating a draw-path around the arc whose density of
  |             points depends on the size of the arc.
@@ -628,7 +628,7 @@ HGArc(register int cx,
  | Routine:    picurve (xpoints, ypoints, num_of_points)
  |
  | Results:    Draws a curve delimited by (not through) the line segments
- |             traced by (xpoints, ypoints) point list.  This is the `Pic'
+ |             traced by (xpoints, ypoints) point list.  This is the 'Pic'
  |             style curve.
  *----------------------------------------------------------------------------*/
 
@@ -668,7 +668,7 @@ picurve(register int *x,
     nseg = (int) groff_hypot((double) xp, (double) yp);
     xp = x[1] - x[2];
     yp = y[1] - y[2];
-                               /* `nseg' is the number of line    */
+                               /* 'nseg' is the number of line    */
                                /* segments that will be drawn for */
                                /* each curve segment.             */
     nseg = (int) ((double) (nseg + (int) groff_hypot((double) xp, (double) yp)) /
@@ -697,7 +697,7 @@ picurve(register int *x,
  |
  | Results:    This routine generates a smooth curve through a set of
  |             points.  The method used is the parametric spline curve on
- |             unit knot mesh described in `Spline Curve Techniques' by
+ |             unit knot mesh described in 'Spline Curve Techniques' by
  |             Patrick Baudelaire, Robert Flegal, and Robert Sproull --
  |             Xerox Parc.
  *----------------------------------------------------------------------------*/
@@ -801,9 +801,9 @@ Paramaterize(int x[],
  | Routine:    PeriodicSpline (h, z, dz, d2z, d3z, npoints)
  |
  | Results:    This routine solves for the cubic polynomial to fit a spline
- |             curve to the the points specified by the list of values. 
+ |             curve to the points specified by the list of values.
  |             The Curve generated is periodic.  The algorithms for this
- |             curve are from the `Spline Curve Techniques' paper cited
+ |             curve are from the 'Spline Curve Techniques' paper cited
  |             above.
  *----------------------------------------------------------------------------*/
 
@@ -874,8 +874,8 @@ PeriodicSpline(double h[],  /* paramaterization  */
  | Routine:    NaturalEndSpline (h, z, dz, d2z, d3z, npoints)
  |
  | Results:    This routine solves for the cubic polynomial to fit a spline
- |             curve the the points specified by the list of values.  The
- |             alogrithms for this curve are from the `Spline Curve
+ |             curve the points specified by the list of values.  The
+ |             algorithms for this curve are from the 'Spline Curve
  |             Techniques' paper cited above.
  *----------------------------------------------------------------------------*/
 
index fa24dca7fd47a30ff08572a6494a2e06c42be48f..b581cb053a88d8aeb308a2ff945d42f0fa6d2b8e 100644 (file)
@@ -5,6 +5,10 @@
  * for the gremlin picture editor.
  */
 
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
 #include <stdlib.h>
 #include "gprint.h"
 
index 55fc27ae889b775870374eb45809bb199962c1be..833fd608287ddafa83703dcf52a63cdf260b5207 100644 (file)
@@ -9,14 +9,14 @@
  * processing gremlin files into troff input.  The program watches input go
  * by to standard output, only interpreting things between .GS and .GE
  * lines.  Default values (font, size, scale, thickness) may be overridden
- * with a `default' command and are further overridden by commands in the
+ * with a 'default' command and are further overridden by commands in the
  * input.
  *
- * Inside the GS and GE, commands are accepted to reconfigure the picture. 
+ * Inside the GS and GE, commands are accepted to reconfigure the picture.
  * At most one command may reside on each line, and each command is followed
  * by a parameter separated by white space.  The commands are as follows,
- * and may be abbreviated down to one character (with exception of `scale'
- * and `stipple' down to "sc" and "st") and may be upper or lower case.
+ * and may be abbreviated down to one character (with exception of 'scale'
+ * and 'stipple' down to "sc" and "st") and may be upper or lower case.
  *
  *                        default  -  Make all settings in the current
  *                                    .GS/.GE the global defaults.  Height,
  *                                    font (one or two characters).
  *                     stipple, l  -  Use a stipple font for polygons.  Arg
  *                                    is troff font name.  No Default.  Can
- *                                    use only one stipple font per picture. 
+ *                                    use only one stipple font per picture.
  *                                    (See below for stipple font index.)
  *                       scale, x  -  Scale is IN ADDITION to the global
  *                                    scale factor from the default.
  *                     pointscale  -  Turn on scaling point sizes to match
- *                                    `scale' commands.  (Optional operand
- *                                    `off' to turn it off.)
+ *                                    'scale' commands.  (Optional operand
+ *                                    'off' to turn it off.)
  *          narrow, medium, thick  -  Set widths of lines.
  *                           file  -  Set the file name to read the gremlin
  *                                    picture from.  If the file isn't in
  *                                    scaling factor that is in effect, and
  *                                    forces the picture to fit into either
  *                                    the height or width specified,
- *                                    whichever makes the picture smaller. 
+ *                                    whichever makes the picture smaller.
  *                                    The operand for these two commands is
  *                                    a floating-point number in units of
  *                                    inches.
  *            l<nn> (integer <nn>) -  Set association between stipple <nn>
- *                                    and a stipple `character'.  <nn> must
+ *                                    and a stipple 'character'.  <nn> must
  *                                    be in the range 0 to NSTIPPLES (16)
  *                                    inclusive.  The integer operand is an
- *                                    index in the stipple font selected. 
+ *                                    index in the stipple font selected.
  *                                    Valid cf (cifplot) indices are 1-32
  *                                    (although 24 is not defined), valid ug
  *                                    (unigrafix) indices are 1-14, and
@@ -100,19 +100,19 @@ extern POINT *PTMakePoint(double x, double y, POINT **pplist);
 /* #define DEFSTIPPLE    "gs" */
 #define DEFSTIPPLE     "cf"
 /*
- * This grn implementation emits `.st' requests to control stipple effects,
+ * This grn implementation emits '.st' requests to control stipple effects,
  * but groff does not (currently) support any such request.
  *
  * This hack disables the emission of such requests, without destroying the
  * infrastructure necessary to support the feature in the future; to enable
- * the emission of `.st' requests, at a future date when groff can support
+ * the emission of '.st' requests, at a future date when groff can support
  * them, simply rewrite the following #define as:
  *
  *   #define USE_ST_REQUEST  stipple
  *
- * with accompanying comment: ``emit `.st' requests as required''.
+ * with accompanying comment: "emit '.st' requests as required".
  */
-#define USE_ST_REQUEST  0      /* never emit `.st' requests */
+#define USE_ST_REQUEST  0      /* never emit '.st' requests */
 
 #define MAXINLINE      100     /* input line length */
 
@@ -138,7 +138,7 @@ int lastyline;                      /* A line's vertical position is NOT the  */
 
 /* These are the default fonts, sizes, line styles, */
 /* and thicknesses.  They can be modified from a    */
-/* `default' command and are reset each time the    */
+/* 'default' command and are reset each time the    */
 /* start of a picture (.GS) is found.               */
 
 const char *deffont[] =
@@ -221,9 +221,9 @@ int linenum = 0;            /* line number of input file */
 char inputline[MAXINLINE];     /* spot to filter through the file */
 char *c1 = inputline;          /* c1, c2, and c3 will be used to */
 char *c2 = inputline + 1;      /* hunt for lines that begin with */
-char *c3 = inputline + 2;      /* `.GS' by looking individually */
+char *c3 = inputline + 2;      /* '.GS' by looking individually */
 char *c4 = inputline + 3;      /* needed for compatibility mode */
-char GScommand[MAXINLINE];     /* put user's `.GS' command line here */
+char GScommand[MAXINLINE];     /* put user's '.GS' command line here */
 char gremlinfile[MAXINLINE];   /* filename to use for a picture */
 int SUNFILE = FALSE;           /* TRUE if SUN gremlin file */
 int compatibility_flag = FALSE;        /* TRUE if in compatibility mode */
@@ -272,8 +272,8 @@ add_file(char **file,
  | Routine:    main (argument_count, argument_pointer)
  |
  | Results:    Parses the command line, accumulating input file names, then
- |             reads the inputs, passing it directly to output until a `.GS'
- |             line is read.  Main then passes control to `conv' to do the
+ |             reads the inputs, passing it directly to output until a '.GS'
+ |             line is read.  Main then passes control to 'conv' to do the
  |             gremlin file conversions.
  *----------------------------------------------------------------------------*/
 
@@ -379,7 +379,7 @@ main(int argc,
  | Routine:    char  * operand (& argc, & argv)
  |
  | Results:    Returns address of the operand given with a command-line
- |             option.  It uses either `-Xoperand' or `-X operand', whichever
+ |             option.  It uses either '-Xoperand' or '-X operand', whichever
  |             is present.  The program is terminated if no option is
  |             present.
  |
@@ -403,7 +403,7 @@ operand(int *argcp,
 /*----------------------------------------------------------------------------*
  | Routine:    getres ()
  |
- | Results:    Sets `res' to the resolution of the output device.
+ | Results:    Sets 'res' to the resolution of the output device.
  *----------------------------------------------------------------------------*/
 
 void
@@ -435,12 +435,12 @@ getres()
 /*----------------------------------------------------------------------------*
  | Routine:    int  doinput (file_pointer)
  |
- | Results:    A line of input is read into `inputline'.
+ | Results:    A line of input is read into 'inputline'.
  |
  | Side Efct:  "linenum" is incremented.
  |
- | Bugs:       Lines longer than MAXINLINE are NOT checked, except for 
- |             updating `linenum'.
+ | Bugs:       Lines longer than MAXINLINE are NOT checked, except for
+ |             updating 'linenum'.
  *----------------------------------------------------------------------------*/
 
 int
@@ -482,12 +482,12 @@ initpic()
   }
   stipple = defstipple;
 
-  gremlinfile[0] = 0;          /* filename is `null' */
+  gremlinfile[0] = 0;          /* filename is 'null' */
   setdefault = 0;              /* this is not the default settings (yet) */
 
   toppoint = BIG;              /* set the picture bounds out */
   bottompoint = -BIG;          /* of range so they'll be set */
-  leftpoint = BIG;             /* by `savebounds' on input */
+  leftpoint = BIG;             /* by 'savebounds' on input */
   rightpoint = -BIG;
 
   pointscale = defpoint;       /* flag for scaling point sizes default */
@@ -503,10 +503,10 @@ initpic()
 /*----------------------------------------------------------------------------*
  | Routine:    conv (file_pointer, starting_line)
  |
- | Results:    At this point, we just passed a `.GS' line in the input
- |             file.  conv reads the input and calls `interpret' to process
- |             commands, gathering up information until a `.GE' line is
- |             found.  It then calls `HGPrint' to do the translation of the
+ | Results:    At this point, we just passed a '.GS' line in the input
+ |             file.  conv reads the input and calls 'interpret' to process
+ |             commands, gathering up information until a '.GE' line is
+ |             found.  It then calls 'HGPrint' to do the translation of the
  |             gremlin file to troff commands.
  *----------------------------------------------------------------------------*/
 
@@ -519,15 +519,15 @@ conv(register FILE *fp,
   register ELT *e;             /* current element pointer */
   ELT *PICTURE;                        /* whole picture data base pointer */
   double temp;                 /* temporary calculating area */
-  /* POINT ptr; */             /* coordinates of a point to pass to `mov' */
+  /* POINT ptr; */             /* coordinates of a point to pass to 'mov' */
                                /* routine                                 */
-  int flyback;                 /* flag `want to end up at the top of the */
+  int flyback;                 /* flag 'want to end up at the top of the */
                                /* picture?'                              */
   int compat;                  /* test character after .GE or .GF */
 
 
   initpic();                   /* set defaults, ranges, etc. */
-  strcpy(GScommand, inputline);        /* save `.GS' line for later */
+  strcpy(GScommand, inputline);        /* save '.GS' line for later */
 
   do {
     done = !doinput(fp);               /* test for EOF */
@@ -552,7 +552,7 @@ conv(register FILE *fp,
        return;
       PICTURE = DBRead(gfp);   /* read picture file */
       fclose(gfp);
-      a_delete path;
+      free(path);
       if (DBNullelt(PICTURE))
        return;                 /* If a request is made to make the  */
                                /* picture fit into a specific area, */
@@ -597,7 +597,7 @@ conv(register FILE *fp,
       /*   set vertical spacing, no fill,   */
       /*   and break (to make sure picture  */
       /*   starts on left), and put out the */
-      /*   user's `.GS' line.               */
+      /*   user's '.GS' line.               */
       printf(".br\n"
             ".nr g1 %du\n"
             ".nr g2 %du\n"
@@ -666,14 +666,14 @@ conv(register FILE *fp,
       /* tmove(&ptr); */       /* restore default line parameters */
 
       /* restore everything to the way it was before the .GS, then put */
-      /* out the `.GE' line from user                                  */
+      /* out the '.GE' line from user                                  */
 
       /* printf("\\D't %du'\\D's %du'\n", DEFTHICK, DEFSTYLE); */
       /* groff doesn't understand the \Ds command */
 
       printf("\\D't %du'\n", DEFTHICK);
       if (flyback)             /* make sure we end up at top of */
-       printf(".sp -1\n");     /* picture if `flying back'      */
+       printf(".sp -1\n");     /* picture if 'flying back'      */
       if (USE_ST_REQUEST)      /* restore stipple to previous */
        printf(".st\n");
       printf(".br\n"
@@ -722,7 +722,7 @@ savestate()
  |
  | Results:    Keeps track of the maximum and minimum extent of a picture
  |             in the global variables: left-, right-, top- and
- |             bottompoint.  `savebounds' assumes that the points have been
+ |             bottompoint.  'savebounds' assumes that the points have been
  |             oriented to the correct direction.  No scaling has taken
  |             place, though.
  *----------------------------------------------------------------------------*/
@@ -842,7 +842,7 @@ interpret(char *line)
   stipplecommand:              /* set stipple name */
     stipple = (char *) malloc(strlen(str2) + 1);
     strcpy(stipple, str2);
-    /* if its a `known' font (currently only `cf'), set indicies    */
+    /* if it's a 'known' font (currently only 'cf'), set indices    */
     if (strcmp(stipple, "cf") == 0)
       defstipple_index = cf_stipple_index;
     else
@@ -922,7 +922,7 @@ interpret(char *line)
     break;
 
   default:
-    error("unknown command `%1' on line %2", str1, linenum);
+    error("unknown command '%1' on line %2", str1, linenum);
     exit(8);
     break;
   };
diff --git a/src/preproc/html/Makefile.sub b/src/preproc/html/Makefile.sub
deleted file mode 100644 (file)
index 89ab989..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# Makefile.sub for `preproc html'
-#
-# File position: <groff-source>/src/preproc/html/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=pre-grohtml$(EXEEXT)
-# MAN1=pre-grohtml.n
-MAN1=
-XLIBS=$(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=pre-html.$(OBJEXT) pushback.$(OBJEXT)
-CCSRCS=$(srcdir)/pre-html.cpp $(srcdir)/pushback.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/preproc/html/html.am b/src/preproc/html/html.am
new file mode 100644 (file)
index 0000000..74bf163
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 13 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += pre-grohtml
+pre_grohtml_LDADD = libgroff.a lib/libgnu.a $(LIBM)
+pre_grohtml_SOURCES = \
+  src/preproc/html/pre-html.cpp \
+  src/preproc/html/pushback.cpp \
+  src/preproc/html/pre-html.h \
+  src/preproc/html/pushback.h
+src/preproc/html/pre-html.$(OBJEXT): defs.h
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index 978721a14b89ad0e401fe534f596bfe9f23c79cd..46defda5cacbc26318ed78d708b65275b62cccf8 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
  * Written by Gaius Mulley (gaius@glam.ac.uk).
  *
  * This file is part of groff.
 
 #if defined(__MSDOS__) || defined(_WIN32)
 
-// Most MS-DOS and Win32 environments will be missing the `fork' capability
+// Most MS-DOS and Win32 environments will be missing the 'fork' capability
 // (some like Cygwin have it, but it is best avoided).
 
 # define MAY_FORK_CHILD_PROCESS 0
 
-// On these systems, we use `spawn...', instead of `fork' ... `exec...'.
-# include <process.h>  // for `spawn...'
+// On these systems, we use 'spawn...', instead of 'fork' ... 'exec...'.
+# include <process.h>  // for 'spawn...'
 # include <fcntl.h>    // for attributes of pipes
 
 # if defined(__CYGWIN__) || defined(_UWIN) || defined(_WIN32)
 
-// These Win32 implementations allow parent and `spawn...'ed child to
+// These Win32 implementations allow parent and 'spawn...'ed child to
 // multitask asynchronously.
 
 #  define MAY_SPAWN_ASYNCHRONOUS_CHILD 1
@@ -86,7 +86,7 @@
 # else
 
 // Others may adopt MS-DOS behaviour where parent must sleep,
-// from `spawn...' until child terminates.
+// from 'spawn...' until child terminates.
 
 #  define MAY_SPAWN_ASYNCHRONOUS_CHILD 0
 
    where to put intermediate files (the DEBUGGING version will preserve
    these on exit).
 
-   On a UNIX host, we might simply use `/tmp', but MS-DOS and Win32 will
+   On a Unix host, we might simply use '/tmp', but MS-DOS and Win32 will
    probably not have this on all disk drives, so default to using
-   `c:/temp' instead.  (Note that user may choose to override this by
+   'c:/temp' instead.  (Note that user may choose to override this by
    supplying a definition such as
 
      -DDEBUG_FILE_DIR=d:/path/to/debug/files
 
-   in the CPPFLAGS to `make'.) */
+   in the CPPFLAGS to 'make'.) */
 
 #  define DEBUG_FILE_DIR c:/temp
 # endif
 
 #else /* not __MSDOS__ or _WIN32 */
 
-// For non-Microsoft environments assume UNIX conventions,
-// so `fork' is required and child processes are asynchronous.
+// For non-Microsoft environments assume Unix conventions,
+// so 'fork' is required and child processes are asynchronous.
 # define MAY_FORK_CHILD_PROCESS 1
 # define MAY_SPAWN_ASYNCHRONOUS_CHILD 1
 
 # if defined(DEBUGGING) && !defined(DEBUG_FILE_DIR)
-/* For a DEBUGGING version, on the UNIX host, we can also usually rely
-   on being able to use `/tmp' for temporary file storage.  (Note that,
+/* For a DEBUGGING version, on the Unix host, we can also usually rely
+   on being able to use '/tmp' for temporary file storage.  (Note that,
    as in the __MSDOS__ or _WIN32 case above, the user may override this
    by defining
 
@@ -153,7 +153,7 @@ extern "C" const char *Version_string;
 #define INLINE_LEADER_CHAR '\\'
 
 // Don't use colour names here!  Otherwise there is a dependency on
-// a file called `rgb.txt' which maps names to colours.
+// a file called 'rgb.txt' which maps names to colours.
 #define TRANSPARENT "-background rgb:f/f/f -transparent rgb:f/f/f"
 #define MIN_ALPHA_BITS 0
 #define MAX_ALPHA_BITS 4
@@ -215,7 +215,7 @@ static int eqn_flag = FALSE;            // must we preprocess via eqn?
 
 static char *linebuf = NULL;           // for scanning devps/DESC
 static int linebufsize = 0;
-static const char *image_gen = NULL;    // the `gs' program
+static const char *image_gen = NULL;    // the 'gs' program
 
 const char *const FONT_ENV_VAR = "GROFF_FONT_PATH";
 static search_path font_path(FONT_ENV_VAR, FONTPATH, 0, 0);
@@ -296,7 +296,7 @@ static unsigned int get_resolution(void)
   FILE *f;
   unsigned int res;
   f = font_path.open_file("devps/DESC", &pathp);
-  a_delete pathp;
+  free(pathp);
   if (f == 0)
     fatal("can't open devps/DESC");
   while (get_line(f)) {
@@ -306,7 +306,7 @@ static unsigned int get_resolution(void)
       return res;
     }
   }
-  fatal("can't find `res' keyword in devps/DESC");
+  fatal("can't find 'res' keyword in devps/DESC");
   return 0;
 }
 
@@ -341,9 +341,9 @@ void html_system(const char *s, int redirect_stdout)
     if (redirect_stdout)
       dup2(save_stdout, 1);
     if (status == -1)
-      fprintf(stderr, "Calling `%s' failed\n", s);
+      fprintf(stderr, "Calling '%s' failed\n", s);
     else if (status)
-      fprintf(stderr, "Calling `%s' returned status %d\n", s, status);
+      fprintf(stderr, "Calling '%s' returned status %d\n", s, status);
     close(save_stderr);
     close(save_stdout);
   }
@@ -519,12 +519,12 @@ static void writeString(const char *s)
 static void makeFileName(void)
 {
   if ((image_dir != NULL) && (strchr(image_dir, '%') != NULL)) {
-    error("cannot use a `%%' within the image directory name");
+    error("cannot use a '%%' within the image directory name");
     exit(1);
   }
 
   if ((image_template != NULL) && (strchr(image_template, '%') != NULL)) {
-    error("cannot use a `%%' within the image template");
+    error("cannot use a '%%' within the image template");
     exit(1);
   }
 
@@ -579,7 +579,7 @@ static void checkImageDir(void)
 {
   if (image_dir != NULL && strcmp(image_dir, "") != 0)
     if (!(mkdir(image_dir, 0777) == 0 || errno == EEXIST)) {
-      error("cannot create directory `%1'", image_dir);
+      error("cannot create directory '%1'", image_dir);
       exit(1);
     }
 }
@@ -661,7 +661,7 @@ void char_buffer::write_upto_newline(char_block **t, int *i, int is_html)
        && (*t)->buffer[j] == '\n')
       j++;
     writeNbytes((*t)->buffer + (*i), j - (*i));
-    if ((*t)->buffer[j] == INLINE_LEADER_CHAR) {
+    if (j < char_block::SIZE && (*t)->buffer[j] == INLINE_LEADER_CHAR) {
       if (can_see(t, &j, HTML_IMAGE_INLINE_BEGIN))
        write_start_image(INLINE, is_html);
       else if (can_see(t, &j, HTML_IMAGE_INLINE_END))
@@ -778,7 +778,7 @@ void char_buffer::skip_until_newline(char_block **t, int *i)
 void char_buffer::emit_troff_output(int device_format_selector)
 {
   // Handle output for BOTH html and image device formats
-  // if `device_format_selector' is passed as
+  // if 'device_format_selector' is passed as
   //
   //   HTML_FORMAT(HTML_OUTPUT_FILTER)
   //     Buffer data is written to the output stream
@@ -1134,7 +1134,7 @@ static void generateImages(char *region_file_name)
 
 static void set_redirection(int was, int willbe)
 {
-  // Nothing to do if `was' and `willbe' already have same handle.
+  // Nothing to do if 'was' and 'willbe' already have same handle.
   if (was != willbe) {
     // Otherwise attempt the specified redirection.
     if (dup2 (willbe, was) < 0) {
@@ -1147,9 +1147,9 @@ static void set_redirection(int was, int willbe)
     }
 
     // When redirection has been successfully completed assume redundant
-    // handle `willbe' is no longer required, so close it.
+    // handle 'willbe' is no longer required, so close it.
     if (close(willbe) < 0)
-      // Issue diagnostic if `close' fails.
+      // Issue diagnostic if 'close' fails.
       sys_fatal("close");
   }
 }
@@ -1166,7 +1166,7 @@ static int save_and_redirect(int was, int willbe)
     return (was);
 
   // Proceeding with redirection so first save and verify our duplicate
-  // handle for `was'.
+  // handle for 'was'.
   int saved = dup(was);
   if (saved < 0) {
     fprintf(stderr, "unable to get duplicate handle for %d\n", was);
@@ -1177,7 +1177,7 @@ static int save_and_redirect(int was, int willbe)
   set_redirection(was, willbe);
 
   // Finally return the saved duplicate descriptor for the
-  // original `was' stream.
+  // original 'was' stream.
   return saved;
 }
 
@@ -1312,14 +1312,14 @@ int char_buffer::run_output_filter(int filter, int argc, char **argv)
     sys_fatal("pipe");
 
 #if MAY_FORK_CHILD_PROCESS
-  // This is the UNIX process model.  To invoke our post-processor,
-  // we must `fork' the current process.
+  // This is the Unix process model.  To invoke our post-processor,
+  // we must 'fork' the current process.
 
   if ((child_pid = fork()) < 0)
     sys_fatal("fork");
 
   else if (child_pid == 0) {
-    // This is the child process fork.  We redirect its `stdin' stream
+    // This is the child process fork.  We redirect its 'stdin' stream
     // to read data emerging from our pipe.  There is no point in saving,
     // since we won't be able to restore later!
 
@@ -1334,7 +1334,7 @@ int char_buffer::run_output_filter(int filter, int argc, char **argv)
     // The IMAGE_OUTPUT_FILTER needs special output redirection...
 
     if (filter == IMAGE_OUTPUT_FILTER) {
-      // with BOTH `stdout' AND `stderr' diverted to files.
+      // with BOTH 'stdout' AND 'stderr' diverted to files.
 
       set_redirection(STDOUT_FILENO, PS_OUTPUT_STREAM);
       set_redirection(STDERR_FILENO, REGION_OUTPUT_STREAM);
@@ -1344,7 +1344,7 @@ int char_buffer::run_output_filter(int filter, int argc, char **argv)
 
     execvp(argv[0], argv);
 
-    // If we get to here then the `exec...' request for the output filter
+    // If we get to here then the 'exec...' request for the output filter
     // failed.  Diagnose it and bail out.
 
     error("couldn't exec %1: %2", argv[0], strerror(errno), ((char *)0));
@@ -1360,7 +1360,7 @@ int char_buffer::run_output_filter(int filter, int argc, char **argv)
     if (close(pipedes[0]) < 0)
       sys_fatal("close");
 
-    // Now we redirect the `stdout' stream to the inlet end of the pipe,
+    // Now we redirect the 'stdout' stream to the inlet end of the pipe,
     // and push out the appropiately formatted data to the filter.
 
     pipedes[1] = save_and_redirect(STDOUT_FILENO, pipedes[1]);
@@ -1379,19 +1379,19 @@ int char_buffer::run_output_filter(int filter, int argc, char **argv)
 
 #elif MAY_SPAWN_ASYNCHRONOUS_CHILD
 
-  // We do not have `fork', (or we prefer not to use it),
+  // We do not have 'fork', (or we prefer not to use it),
   // but asynchronous processes are allowed, passing data through pipes.
-  // This should be ok for most Win32 systems and is preferred to `fork'
+  // This should be ok for most Win32 systems and is preferred to 'fork'
   // for starting child processes under Cygwin.
 
-  // Before we start the post-processor we bind its inherited `stdin'
-  // stream to the readable end of our pipe, saving our own `stdin' stream
-  // in `pipedes[0]'.
+  // Before we start the post-processor we bind its inherited 'stdin'
+  // stream to the readable end of our pipe, saving our own 'stdin' stream
+  // in 'pipedes[0]'.
 
   pipedes[0] = save_and_redirect(STDIN_FILENO, pipedes[0]);
 
   // for the Win32 model,
-  // we need special provision for saving BOTH `stdout' and `stderr'.
+  // we need special provision for saving BOTH 'stdout' and 'stderr'.
 
   int saved_stdout = dup(STDOUT_FILENO);
   int saved_stderr = STDERR_FILENO;
@@ -1399,8 +1399,8 @@ int char_buffer::run_output_filter(int filter, int argc, char **argv)
   // The IMAGE_OUTPUT_FILTER needs special output redirection...
 
   if (filter == IMAGE_OUTPUT_FILTER) {
-    // with BOTH `stdout' AND `stderr' diverted to files while saving a
-    // duplicate handle for `stderr'.
+    // with BOTH 'stdout' AND 'stderr' diverted to files while saving a
+    // duplicate handle for 'stderr'.
 
     set_redirection(STDOUT_FILENO, PS_OUTPUT_STREAM);
     saved_stderr = save_and_redirect(STDERR_FILENO, REGION_OUTPUT_STREAM);
@@ -1415,19 +1415,19 @@ int char_buffer::run_output_filter(int filter, int argc, char **argv)
     exit(1);
   }
 
-  // Once the post-processor has been started we revert our `stdin'
+  // Once the post-processor has been started we revert our 'stdin'
   // to its original saved source, which also closes the readable handle
   // for the pipe.
 
   set_redirection(STDIN_FILENO, pipedes[0]);
 
-  // if we redirected `stderr', for use by the image post-processor,
+  // if we redirected 'stderr', for use by the image post-processor,
   // then we also need to reinstate its original assignment.
 
   if (filter == IMAGE_OUTPUT_FILTER)
     set_redirection(STDERR_FILENO, saved_stderr);
 
-  // Now we redirect the `stdout' stream to the inlet end of the pipe,
+  // Now we redirect the 'stdout' stream to the inlet end of the pipe,
   // and push out the appropiately formatted data to the filter.
 
   set_redirection(STDOUT_FILENO, pipedes[1]);
@@ -1471,7 +1471,7 @@ int char_buffer::do_html(int argc, char *argv[])
   s = (char *)"-dwww-image-template=";
   s += macroset_template;      // do not combine these statements,
                                // otherwise they will not work
-  s += '\0';                   // the trailing `\0' is ignored
+  s += '\0';                   // the trailing '\0' is ignored
   argv = addRegDef(argc, argv, s.contents());
   argc++;
 
@@ -1557,8 +1557,8 @@ static void usage(FILE *stream)
     "it is part of the groff pipeline to produce HTML output.\n"
     "\n"
     "If there is ever the need to call it manually (e.g., for\n"
-    "debugging purposes), add command line option `-V' while calling\n"
-    "the `groff' program to see which arguments are passed to it.\n"
+    "debugging purposes), add command-line option '-V' while calling\n"
+    "the 'groff' program to see which arguments are passed to it.\n"
     "\n");
 }
 
@@ -1818,7 +1818,7 @@ static int do_file(const char *filename)
   else {
     fp = fopen(filename, "r");
     if (fp == 0) {
-      error("can't open `%1': %2", filename, strerror(errno));
+      error("can't open '%1': %2", filename, strerror(errno));
       return 0;
     }
   }
index 1f3365c8e1ff570c18c70ddef97b53e31e600a95..b8b86f453d8a438badbaf072f3226c2623940053 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
  * Written by Gaius Mulley (gaius@glam.ac.uk).
  *
  * This file is part of groff.
index b945a8db73f8f80e378c0cf3595afc081e0c79cc..a05e58dde57c263c0e05872c53308e81e7b0e0b2 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
      Written by Gaius Mulley (gaius@glam.ac.uk).
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
index 3d57d4ed43128cc17ed249139dfab19d939be1cc..ae05d93beeb87cad59485fe938ff374f0c9983bc 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C -*-
-/* Copyright (C) 2000-201 Free Software Foundation, Inc.
+/* Copyright (C) 2000-2018 Free Software Foundation, Inc.
      Written by Gaius Mulley (gaius@glam.ac.uk).
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 #define eof              (char)-1
diff --git a/src/preproc/pic/Makefile.sub b/src/preproc/pic/Makefile.sub
deleted file mode 100644 (file)
index 4bd3dba..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# Makefile.sub for `preproc pic'
-#
-# File position: <groff-source>/src/preproc/pic/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=pic$(EXEEXT)
-MAN1=pic.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
-  pic.$(OBJEXT) \
-  lex.$(OBJEXT) \
-  main.$(OBJEXT) \
-  object.$(OBJEXT) \
-  common.$(OBJEXT) \
-  troff.$(OBJEXT) \
-  tex.$(OBJEXT)
-  # fig.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/lex.cpp \
-  $(srcdir)/main.cpp \
-  $(srcdir)/object.cpp \
-  $(srcdir)/common.cpp \
-  $(srcdir)/troff.cpp \
-  $(srcdir)/tex.cpp
-HDRS=\
-  $(srcdir)/common.h \
-  $(srcdir)/object.h \
-  $(srcdir)/output.h \
-  $(srcdir)/pic.h \
-  $(srcdir)/position.h \
-  $(srcdir)/text.h
-GRAM=$(srcdir)/pic.y
-YTABC=pic.cpp
-YTABH=pic_tab.h
-NAMEPREFIX=$(g)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index a1d7554d45290728b4df7d52f17a1856a7b07456..53ca282e149158a923792274287f14d407b4b3e4 100644 (file)
@@ -25,11 +25,11 @@ apparently is in grap).
 
 Possibly change fillval so that zero is black.
 
-Provide a way of getting text blocks (positioned with `.in' rather
+Provide a way of getting text blocks (positioned with '.in' rather
 than \h), into pic.  Should be possible to use block of diverted text
 in pic.  Possibly something similar to T{ and T} in tbl.
 
 Option to provide macro backtraces.
 
-Have a path that is searched by `copy' statement.  Set by environment
-variable or command line option.
+Have a path that is searched by 'copy' statement.  Set by environment
+variable or command-line option.
index 7365b246d5a2d5161e12107572c524dcb82bd618..32eea6029682bab1061d161a83f31ffb1443e056 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "pic.h"
 #include "common.h"
index 70352b85010379c832f20d148d73f2377b1ddd18..9f4c7de11c669ba18e56d0a5ac955dcf530293a7 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 class common_output : public output {
 private:
index 2ebd28a9c46d22ef159aa2e0151d28909c91b7db..a6327aa0d36e7a51a74099f9987520e6d5dc789f 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,12 +15,12 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "pic.h"
 #include "ptable.h"
 #include "object.h"
-#include "pic_tab.h"
+#include "pic.hpp"
 
 declare_ptable(char)
 implement_ptable(char)
@@ -148,7 +148,7 @@ macro_input::macro_input(const char *str)
 
 macro_input::~macro_input()
 {
-  a_delete s;
+  free(s);
 }
 
 int macro_input::get()
@@ -208,8 +208,8 @@ argument_macro_input::argument_macro_input(const char *body, int ac, char **av)
 argument_macro_input::~argument_macro_input()
 {
   for (int i = 0; i < argc; i++)
-    a_delete argv[i];
-  a_delete s;
+    free(argv[i]);
+  free(s);
 }
 
 int argument_macro_input::get()
@@ -413,7 +413,7 @@ void interpolate_macro_with_args(const char *body)
              argv[argc] = strsave(token_buffer.contents());
          }
        }
-       // for `foo()', argc = 0
+       // for 'foo()', argc = 0
        if (argc > 0 || c != ')' || i > 0)
          if (!ignore)
            argc++;
@@ -929,7 +929,7 @@ int get_token(int lookup_flag)
          break;
        }
        else if (c == EOF) {
-         error("missing `\"'");
+         error("missing '\"'");
          break;
        }
        else if (c == '"') {
@@ -1387,8 +1387,8 @@ for_input::for_input(char *vr, double f, double t,
 
 for_input::~for_input()
 {
-  a_delete var;
-  a_delete body;
+  free(var);
+  free(body);
 }
 
 int for_input::get()
@@ -1404,7 +1404,7 @@ int for_input::get()
     }
     double val;
     if (!lookup_variable(var, &val)) {
-      lex_error("body of `for' terminated enclosing block");
+      lex_error("body of 'for' terminated enclosing block");
       return EOF;
     }
     if (by_is_multiplicative)
@@ -1465,7 +1465,7 @@ void do_copy(const char *filename)
   errno = 0;
   FILE *fp = fopen(filename, "r");
   if (fp == 0) {
-    lex_error("can't open `%1': %2", filename, strerror(errno));
+    lex_error("can't open '%1': %2", filename, strerror(errno));
     return;
   }
   input_stack::push(new file_input(fp, filename));
@@ -1711,7 +1711,7 @@ void copy_file_thru(const char *filename, const char *body, const char *until)
   errno = 0;
   FILE *fp = fopen(filename, "r");
   if (fp == 0) {
-    lex_error("can't open `%1': %2", filename, strerror(errno));
+    lex_error("can't open '%1': %2", filename, strerror(errno));
     return;
   }
   input *in = new copy_file_thru_input(new simple_file_input(fp, filename),
@@ -2019,7 +2019,7 @@ void yyerror(const char *s)
       if (context[0] == '\n' && context[1] == '\0')
        error("%1 before newline", s);
       else
-       error("%1 before `%2'", s, context);
+       error("%1 before '%2'", s, context);
     }
     else
       error("%1 at end of picture", s);
@@ -2029,7 +2029,7 @@ void yyerror(const char *s)
       if (context[0] == '\n' && context[1] == '\0')
        error_with_file_and_line(filename, lineno, "%1 before newline", s);
       else
-       error_with_file_and_line(filename, lineno, "%1 before `%2'",
+       error_with_file_and_line(filename, lineno, "%1 before '%2'",
                                 s, context);
     }
     else
index 19065a6635a8ffd5a3d757ddc6c4686b7d04f98d..08c7fa511221d3d35f3059dd1e97addad37bdcef 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "pic.h"
 
@@ -34,7 +34,7 @@ int safer_flag = 1;
 int command_char = '.';                // the character that introduces lines
                                // that should be passed through transparently
 static int lf_flag = 1;                // non-zero if we should attempt to understand
-                               // lines beginning with `.lf'
+                               // lines beginning with '.lf'
 
 // Non-zero means a parse error was encountered.
 static int had_parse_error = 0;
@@ -220,7 +220,8 @@ void do_picture(FILE *fp)
 {
   flyback_flag = 0;
   int c;
-  a_delete graphname;
+  if (!graphname)
+    free(graphname);
   graphname = strsave("graph");                // default picture name in TeX mode
   while ((c = getc(fp)) == ' ')
     ;
@@ -240,7 +241,7 @@ void do_picture(FILE *fp)
     if (c == '\n') 
       current_lineno++;
     if (filename.length() == 0)
-      error("missing filename after `<'");
+      error("missing filename after '<'");
     else {
       filename += '\0';
       const char *old_filename = current_filename;
@@ -306,11 +307,14 @@ void do_file(const char *filename)
     fp = fopen(filename, "r");
     if (fp == 0) {
       delete out;
-      fatal("can't open `%1': %2", filename, strerror(errno));
+      fatal("can't open '%1': %2", filename, strerror(errno));
     }
   }
-  out->set_location(filename, 1);
-  current_filename = filename;
+  string fn(filename);
+  fn += '\0';
+  normalize_for_lf(fn);
+  current_filename = fn.contents();
+  out->set_location(current_filename, 1);
   current_lineno = 1;
   enum { START, MIDDLE, HAD_DOT, HAD_P, HAD_PS, HAD_l, HAD_lf } state = START;
   for (;;) {
@@ -463,7 +467,7 @@ void do_whole_file(const char *filename)
     errno = 0;
     fp = fopen(filename, "r");
     if (fp == 0)
-      fatal("can't open `%1': %2", filename, strerror(errno));
+      fatal("can't open '%1': %2", filename, strerror(errno));
   }
   lex_init(new file_input(fp, filename));
   if (yyparse())
@@ -615,7 +619,11 @@ int main(int argc, char **argv)
     out = make_fig_output();
   else
 #endif
+  {
     out = make_troff_output();
+    printf(".if !dPS .ds PS\n"
+          ".if !dPE .ds PE\n");
+  }
 #ifdef FIG_SUPPORT
   if (whole_file_flag) {
     if (optind >= argc)
index 282546cf37b5239e9593eeaaef7318b5b0087774..d8ba610372cc945a9c851b5710e0e7483c5d726a 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,9 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
+
+#include <stdlib.h>
 
 #include "pic.h"
 #include "ptable.h"
@@ -540,7 +542,7 @@ text_piece::text_piece()
 
 text_piece::~text_piece()
 {
-  a_delete text;
+  free(text);
 }
 
 class graphic_object : public object {
@@ -1160,7 +1162,7 @@ graphic_object *object_spec::make_move(position *curpos, direction *dirp)
   static position last_move;
   static int have_last_move = 0;
   *dirp = dir;
-  // No need to look at at since `at' attribute sets `from' attribute.
+  // No need to look at at since 'at' attribute sets 'from' attribute.
   position startpos = (flags & HAS_FROM) ? from : *curpos;
   if (!(flags & HAS_SEGMENT)) {
     if ((flags & IS_SAME) && have_last_move)
@@ -1447,8 +1449,8 @@ linear_object *object_spec::make_line(position *curpos, direction *dirp)
   static position last_line;
   static int have_last_line = 0;
   *dirp = dir;
-  // We handle `at' only in conjunction with `with', otherwise it is
-  // the same as the `from' attribute.
+  // We handle 'at' only in conjunction with 'with', otherwise it is
+  // the same as the 'from' attribute.
   position startpos;
   if ((flags & HAS_AT) && (flags & HAS_WITH))
     // handled later -- we need the end position
@@ -1502,7 +1504,7 @@ linear_object *object_spec::make_line(position *curpos, direction *dirp)
       s->is_absolute = 1;      // to avoid confusion
     }
   if ((flags & HAS_AT) && (flags & HAS_WITH)) {
-    // `tmpobj' works for arrows and splines too -- we only need positions
+    // 'tmpobj' works for arrows and splines too -- we only need positions
     line_object tmpobj(startpos, endpos, 0, 0);
     position pos = at;
     place offset;
@@ -1958,15 +1960,15 @@ string_list::string_list(char *s)
 
 string_list::~string_list()
 {
-  a_delete str;
+  free(str);
 }
-  
-/* A path is used to hold the argument to the `with' attribute.  For
-   example, `.nw' or `.A.s' or `.A'.  The major operation on a path is to
+
+/* A path is used to hold the argument to the 'with' attribute.  For
+   example, '.nw' or '.A.s' or '.A'.  The major operation on a path is to
    take a place and follow the path through the place to place within the
-   place.  Note that `.A.B.C.sw' will work.
+   place.  Note that '.A.B.C.sw' will work.
 
-   For compatibility with DWB pic, `with' accepts positions also (this
+   For compatibility with DWB pic, 'with' accepts positions also (this
    is incorrectly documented in CSTR 116). */
 
 path::path(corner c)
@@ -2029,7 +2031,7 @@ int path::follow(const place &pl, place *result) const
   const place *p = &pl;
   for (string_list *lb = label_list; lb; lb = lb->next)
     if (p->obj == 0 || (p = p->obj->find_label(lb->str)) == 0) {
-      lex_error("object does not contain a place `%1'", lb->str);
+      lex_error("object does not contain a place '%1'", lb->str);
       return 0;
     }
   if (crn == 0 || p->obj == 0)
index e1b676d704219bd8cc2015d22fc20321eabbba26..e053f080abf6f7eb419089ba344ea1134177278c 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 struct place;
 
index 5bb5ce217e64625ae40b9f33a8412ae7c78fb2fb..8dd43840ddfaf776fa811efd92f13dcf801ae11c 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 struct line_type {
   enum { invisible, solid, dotted, dashed } type;
diff --git a/src/preproc/pic/pic.1.man b/src/preproc/pic/pic.1.man
new file mode 100644 (file)
index 0000000..847bbe3
--- /dev/null
@@ -0,0 +1,1336 @@
+.TH @G@PIC @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@pic \- compile pictures for troff or TeX
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr pic_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.\" Definitions
+.\" ====================================================================
+.
+.ie t \{\
+.  ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+.  ds lx L\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\*(tx
+.\}
+.el \{\
+.  ds tx TeX
+.  ds lx LaTeX
+.\}
+.
+.ie \n(.g .ds ic \/
+.el       .ds ic \^
+.
+.\" The BSD man macros can't handle " in arguments to font change macros,
+.\" so use \(ts instead of ".
+.tr \(ts"\""
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY @g@pic
+.OP \-nvCSU
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.SY @g@pic
+.B \-t
+.OP \-cvzCSU
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This manual page describes the GNU version of
+.BR pic ,
+which is part of the groff document formatting system.
+.
+.B pic
+compiles descriptions of pictures embedded within
+.B troff
+or \*(tx input files into commands that are understood by \*(tx or
+.BR troff .
+.
+Each picture starts with a line beginning with
+.B .PS
+and ends with a line beginning with
+.BR .PE .
+.
+Anything outside of
+.B .PS
+and
+.B .PE
+is passed through without change.
+.
+.
+.LP
+It is the user's responsibility to provide appropriate definitions
+of the
+.B PS
+and
+.B PE
+macros.
+.
+When the macro package being used does not supply such definitions
+(for example, old versions of \-ms), appropriate definitions can be
+obtained with
+.BR \-mpic :
+.
+These will center each picture.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Options that do not take arguments may be grouped behind a single
+.BR \- .
+.
+The special option
+.B \-\^\-
+can be used to mark the end of the options.
+.
+A filename of
+.B \-
+refers to the standard input.
+.
+.TP
+.B \-C
+Recognize
+.B .PS
+and
+.B .PE
+even when followed by a character other than space or newline.
+.
+.TP
+.B \-S
+Safer mode; do not execute
+.B sh
+commands.
+.
+This can be useful when operating on untrustworthy input (enabled by
+default).
+.
+.TP
+.B \-U
+Unsafe mode; revert the default option
+.BR \-S .
+.
+.TP
+.B \-n
+Don't use the groff extensions to the troff drawing commands.
+.
+You should use this if you are using a postprocessor that doesn't
+support these extensions.
+.
+The extensions are described in
+.BR groff_out (@MAN5EXT@).
+.
+The
+.B \-n
+option also causes
+.B pic
+not to use zero-length lines to draw dots in troff mode.
+.
+.TP
+.B \-t
+\*(tx mode.
+.
+.TP
+.B \-c
+Be more compatible with
+.BR tpic .
+.
+Implies
+.BR \-t .
+Lines beginning with
+.B \e
+are not passed through transparently.
+.
+Lines beginning with
+.B .
+are passed through with the initial
+.B .
+changed to
+.BR \e .
+.
+A line beginning with
+.B .ps
+is given special treatment:
+it takes an optional integer argument specifying
+the line thickness (pen size) in milliinches;
+a missing argument restores the previous line thickness;
+the default line thickness is 8 milliinches.
+.
+The line thickness thus specified takes effect only when a
+non-negative line thickness has not been specified by use of the
+.B thickness
+attribute or by setting the
+.B linethick
+variable.
+.
+.TP
+.B \-v
+Print the version number.
+.
+.TP
+.B \-z
+In \*(tx mode draw dots using zero-length lines.
+.
+.
+.LP
+The following options supported by other versions of
+.B pic
+are ignored:
+.
+.TP
+.B \-D
+Draw all lines using the \eD escape sequence.
+.B pic
+always does this.
+.
+.TP
+.BI \-T \ dev
+Generate output for the
+.B troff
+device
+.IR dev .
+.
+This is unnecessary because the
+.B troff
+output generated by
+.B pic
+is device-independent.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+This section describes only the differences between GNU
+.B pic
+and the original version of
+.BR pic .
+.
+Many of these differences also apply to newer versions of Unix
+.BR pic .
+.
+A complete documentation is available in the file
+.
+.
+.LP
+.RS
+.I @DOCDIR@/pic.ms
+.RE
+.
+.
+.\" ====================================================================
+.SS \*(tx mode
+.\" ====================================================================
+.
+\*(tx mode is enabled by the
+.B \-t
+option.
+.
+In \*(tx mode,
+.B pic
+will define a vbox called
+.B \egraph
+for each picture.
+.
+Use the
+.B figname
+command to change the name of the vbox.
+.
+You must yourself print that vbox using, for example, the command
+.
+.
+.RS
+.LP
+.B
+\ecenterline{\ebox\egraph}
+.RE
+.
+.
+.LP
+Actually, since the vbox has a height of zero (it is defined with
+\evtop) this will produce slightly more vertical space above the
+picture than below it;
+.RS
+.LP
+.B
+\ecenterline{\eraise 1em\ebox\egraph}
+.RE
+.LP
+would avoid this.
+.
+.
+.LP
+To make the vbox having a positive height and a depth of zero
+(as used e.g.\& by \*[lx]'s
+.BR \%graphics.sty ),
+define the following macro in your document:
+.RS
+.LP
+.B \edef\egpicbox#1{%
+.br
+.B "   \evbox{\eunvbox\ecsname #1\eendcsname\ekern 0pt}}"
+.RE
+.LP
+Now you can simply say
+.B \egpicbox{graph}
+instead of \ebox\egraph.
+.
+.
+.LP
+You must use a \*(tx driver that supports the
+.B tpic
+specials, version 2.
+.
+.
+.LP
+Lines beginning with
+.B \e
+are passed through transparently; a
+.B %
+is added to the end of the line to avoid unwanted spaces.
+.
+You can safely use this feature to change fonts or to
+change the value of
+.BR \ebaselineskip .
+.
+Anything else may well produce undesirable results; use at your own risk.
+.
+Lines beginning with a period are not given any special treatment.
+.
+.
+.\" ====================================================================
+.SS Commands
+.\" ====================================================================
+.
+.TP
+\fBfor\fR \fIvariable\fR \fB=\fR \fIexpr1\fR \fBto\fR \fIexpr2\fR \
+[\fBby\fR [\fB*\fR]\,\fIexpr3\/\fR] \fBdo\fR \fIX\fR \fIbody\fR \fIX\fR
+Set
+.I variable
+to
+.IR expr1 .
+.
+While the value of
+.I variable
+is less than or equal to
+.IR expr2 ,
+do
+.I body
+and increment
+.I variable
+by
+.IR expr3 ;
+if
+.B by
+is not given, increment
+.I variable
+by 1.
+.
+If
+.I expr3
+is prefixed by
+.B *
+then
+.I variable
+will instead be multiplied by
+.IR expr3 .
+.
+The value of
+.I expr3
+can be negative for the additive case;
+.I variable
+is then tested whether it is greater than or equal to
+.IR expr2 .
+.
+For the multiplicative case,
+.I expr3
+must be greater than zero.
+.
+If the constraints aren't met, the loop isn't executed.
+.
+.I X
+can be any character not occurring in
+.IR body .
+.
+.TP
+\fBif\fR \fIexpr\fR \fBthen\fR \fIX\fR \fIif-true\fR \fIX\fR \
+[\fBelse\fR \fIY\fR \fIif-false\fR \fIY\fR]
+Evaluate
+.IR expr ;
+if it is non-zero then do
+.IR if-true ,
+otherwise do
+.IR if-false .
+.
+.I X
+can be any character not occurring in
+.IR if-true .
+.
+.I Y
+can be any character not occurring in
+.IR if-false .
+.
+.TP
+\fBprint\fR \fIarg\fR\|.\|.\|.
+Concatenate the arguments and print as a line on stderr.
+.
+Each
+.I arg
+must be an expression, a position, or text.
+.
+This is useful for debugging.
+.
+.TP
+\fBcommand\fR \fIarg\fR\|.\|.\|.
+Concatenate the arguments
+and pass them through as a line to troff or \*(tx.
+.
+Each
+.I arg
+must be an expression, a position, or text.
+.
+This has a similar effect to a line beginning with
+.B .\&
+or
+.BR \e ,
+but allows the values of variables to be passed through.
+.
+For example,
+.RS
+.IP
+.ft B
+.nf
+\&.PS
+x = 14
+command ".ds string x is " x "."
+\&.PE
+\e*[string]
+.ft
+.fi
+.RE
+.IP
+prints
+.RS
+.IP
+.B x is 14.
+.RE
+.
+.TP
+\fBsh\fR \fIX\fR \fIcommand\fR \fIX\fR
+Pass
+.I command
+to a shell.
+.
+.I X
+can be any character not occurring in
+.IR command .
+.
+.TP
+\fBcopy\fR \fB"\,\fIfilename\/\fB"\fR
+Include
+.I filename
+at this point in the file.
+.
+.TP
+\fBcopy\fR [\fB"\,\fIfilename\/\fB"\fR] \fBthru\fR \fIX\fR \fIbody\fR \fIX\fR \
+[\fBuntil\fR \fB"\,\fIword\*(ic\fB"\fR]
+.ns
+.TP
+\fBcopy\fR [\fB"\,\fIfilename\/\fB"\fR] \fBthru\fR \fImacro\fR \
+[\fBuntil\fR \fB"\,\fIword\*(ic\fB"\fR]
+This construct does
+.I body
+once for each line of
+.IR filename ;
+the line is split into blank-delimited words,
+and occurrences of
+.BI $ i
+in
+.IR body ,
+for
+.I i
+between 1 and 9,
+are replaced by the
+.IR i -th
+word of the line.
+.
+If
+.I filename
+is not given, lines are taken from the current input up to
+.BR .PE .
+.
+If an
+.B until
+clause is specified,
+lines will be read only until a line the first word of which is
+.IR word ;
+that line will then be discarded.
+.
+.I X
+can be any character not occurring in
+.IR body .
+.
+For example,
+.RS
+.IP
+.ft B
+.nf
+\&.PS
+copy thru % circle at ($1,$2) % until "END"
+1 2
+3 4
+5 6
+END
+box
+\&.PE
+.ft
+.fi
+.RE
+.IP
+is equivalent to
+.RS
+.IP
+.ft B
+.nf
+\&.PS
+circle at (1,2)
+circle at (3,4)
+circle at (5,6)
+box
+\&.PE
+.ft
+.fi
+.RE
+.
+.IP
+The commands to be performed for each line can also be taken
+from a macro defined earlier by giving the name of the macro
+as the argument to
+.BR thru .
+.
+.
+.LP
+.B reset
+.br
+.ns
+.TP
+\fBreset\fI variable1\/\fR[\fB,\fR]\fI variable2 .\^.\^.
+Reset pre-defined variables
+.IR variable1 ,
+.I variable2
+\&.\^.\^.\& to their default values.
+.
+If no arguments are given, reset all pre-defined variables to their
+default values.
+.
+Note that assigning a value to
+.B scale
+also causes all pre-defined variables that control dimensions to be
+reset to their default values times the new value of scale.
+.
+.TP
+\fBplot\fR \fIexpr\fR [\fB"\,\fItext\*(ic\fB"\fR]
+This is a text object which is constructed by using
+.I text
+as a format string for sprintf
+with an argument of
+.IR expr .
+.
+If
+.I text
+is omitted a format string of
+.B "\(ts%g\(ts"
+is used.
+.
+Attributes can be specified in the same way as for a normal text
+object.
+Be very careful that you specify an appropriate format string;
+.B pic
+does only very limited checking of the string.
+This is deprecated in favour of
+.BR sprintf .
+.
+.TP
+.IB variable\  := \ expr
+This is similar to
+.B =
+except
+.I variable
+must already be defined,
+and
+.I expr
+will be assigned to
+.I variable
+without creating a variable local to the current block.
+.
+(By contrast,
+.B =
+defines the variable in the current block if it is not already defined
+there, and then changes the value in the current block only.)
+.
+For example, the following:
+.RS
+.IP
+.ft B
+.nf
+\&.PS
+x = 3
+y = 3
+[
+  x := 5
+  y = 5
+]
+print x " " y
+\&.PE
+.ft
+.fi
+.RE
+.IP
+prints
+.RS
+.IP
+.B 5 3
+.RE
+.
+.
+.LP
+Arguments of the form
+.IP
+.I X anything X
+.LP
+are also allowed to be of the form
+.IP
+.BI {\  anything\  }
+.
+.
+.LP
+In this case
+.I anything
+can contain balanced occurrences of
+.B {
+and
+.BR } .
+Strings may contain
+.I X
+or imbalanced occurrences of
+.B {
+and
+.BR } .
+.
+.
+.\" ====================================================================
+.SS Expressions
+.\" ====================================================================
+.
+The syntax for expressions has been significantly extended:
+.
+.
+.LP
+.IB  x\  ^\  y
+(exponentiation)
+.br
+.BI sin( x )
+.br
+.BI cos( x )
+.br
+.BI atan2( y , \ x )
+.br
+.BI log( x )
+(base 10)
+.br
+.BI exp( x )
+(base 10, i.e.\&
+.ie t 10\v'-.4m'\fIx\*(ic\fR\v'.4m')
+.el   10^\fIx\fR)
+.br
+.BI sqrt( x )
+.br
+.BI int( x )
+.br
+.B rand()
+(return a random number between 0 and 1)
+.br
+.BI rand( x )
+(return a random number between 1 and
+.IR x ;
+deprecated)
+.br
+.BI srand( x )
+(set the random number seed)
+.br
+.BI max( e1 , \ e2 )
+.br
+.BI min( e1 , \ e2 )
+.br
+.BI ! e
+.br
+\fIe1\fB && \fIe2\fR
+.br
+\fIe1\fB || \fIe2\fR
+.br
+\fIe1\fB == \fIe2\fR
+.br
+\fIe1\fB != \fIe2\fR
+.br
+\fIe1\fB >= \fIe2\fR
+.br
+\fIe1\fB > \fIe2\fR
+.br
+\fIe1\fB <= \fIe2\fR
+.br
+\fIe1\fB < \fIe2\fR
+.br
+\fB"\,\fIstr1\*(ic\fB" == "\,\fIstr2\*(ic\fB"\fR
+.br
+\fB"\,\fIstr1\*(ic\fB" != "\,\fIstr2\*(ic\fB"\fR
+.br
+.
+.
+.LP
+String comparison expressions must be parenthesised in some contexts
+to avoid ambiguity.
+.
+.
+.\" ====================================================================
+.SS Other Changes
+.\" ====================================================================
+.
+A bare expression,
+.IR expr ,
+is acceptable as an attribute;
+it is equivalent to
+.IR dir\ expr ,
+where
+.I dir
+is the current direction.
+.
+For example
+.LP
+.RS
+.B line 2i
+.RE
+.LP
+means draw a line 2\ inches long in the current direction.
+.
+The \[oq]i\[cq] (or \[oq]I\[cq]) character is ignored; to use another
+measurement unit, set the
+.I scale
+variable to an appropriate value.
+.
+.
+.LP
+The maximum width and height of the picture are taken from the variables
+.B maxpswid
+and
+.BR maxpsht .
+.
+Initially these have values 8.5 and 11.
+.
+.
+.LP
+Scientific notation is allowed for numbers.
+For example
+.RS
+.LP
+.B
+x = 5e\-2
+.RE
+.
+.
+.LP
+Text attributes can be compounded.
+.
+For example,
+.RS
+.LP
+.B
+"foo" above ljust
+.RE
+.LP
+is valid.
+.
+.
+.LP
+There is no limit to the depth to which blocks can be examined.
+.
+For example,
+.RS
+.LP
+.B
+[A: [B: [C: box ]]] with .A.B.C.sw at 1,2
+.br
+.B
+circle at last [\^].A.B.C
+.RE
+.LP
+is acceptable.
+.
+.
+.LP
+Arcs now have compass points determined by the circle of which the arc
+is a part.
+.
+.
+.LP
+Circles, ellipses, and arcs can be dotted or dashed.
+.
+In \*(tx mode splines can be dotted or dashed also.
+.
+.
+.LP
+Boxes can have rounded corners.
+.
+The
+.B rad
+attribute specifies the radius of the quarter-circles at each corner.
+If no
+.B rad
+or
+.B diam
+attribute is given, a radius of
+.B boxrad
+is used.
+.
+Initially,
+.B boxrad
+has a value of\ 0.
+.
+A box with rounded corners can be dotted or dashed.
+.
+.
+.LP
+Boxes can have slanted sides.
+.
+This effectively changes the shape of a box from a rectangle to an
+arbitrary parallelogram.
+.
+The
+.B xslanted
+and
+.B yslanted
+attributes specify the x and y\~offset of the box's upper right
+corner from its default position.
+.
+.
+.LP
+The
+.B .PS
+line can have a second argument specifying a maximum height for
+the picture.
+.
+If the width of zero is specified the width will be ignored in computing
+the scaling factor for the picture.
+.
+Note that GNU
+.B pic
+will always scale a picture by the same amount vertically as well as
+horizontally.
+.
+This is different from the DWB
+2.0
+.B pic
+which may scale a picture by a different amount vertically than
+horizontally if a height is specified.
+.
+.
+.LP
+Each text object has an invisible box associated with it.
+.
+The compass points of a text object are determined by this box.
+.
+The implicit motion associated with the object is also determined
+by this box.
+.
+The dimensions of this box are taken from the width and height attributes;
+if the width attribute is not supplied then the width will be taken to be
+.BR textwid ;
+if the height attribute is not supplied then the height will be taken to be
+the number of text strings associated with the object
+times
+.BR textht .
+.
+Initially
+.B textwid
+and
+.B textht
+have a value of 0.
+.
+.
+.LP
+In (almost all) places where a quoted text string can be used,
+an expression of the form
+.IP
+.BI sprintf(\(ts format \(ts,\  arg ,\fR.\|.\|.\fB)
+.LP
+can also be used;
+this will produce the arguments formatted according to
+.IR format ,
+which should be a string as described in
+.BR printf (3)
+appropriate for the number of arguments supplied.
+.
+.
+.LP
+The thickness of the lines used to draw objects is controlled by the
+.B linethick
+variable.
+.
+This gives the thickness of lines in points.
+.
+A negative value means use the default thickness:
+in \*(tx output mode, this means use a thickness of 8 milliinches;
+in \*(tx output mode with the
+.B \-c
+option, this means use the line thickness specified by
+.B .ps
+lines;
+in troff output mode, this means use a thickness proportional
+to the pointsize.
+.
+A zero value means draw the thinnest possible line supported by
+the output device.
+.
+Initially it has a value of \-1.
+.
+There is also a
+.BR thick [ ness ]
+attribute.
+.
+For example,
+.RS
+.LP
+.B circle thickness 1.5
+.RE
+.LP
+would draw a circle using a line with a thickness of 1.5 points.
+.
+The thickness of lines is not affected by the
+value of the
+.B scale
+variable, nor by the width or height given in the
+.B .PS
+line.
+.
+.
+.LP
+Boxes (including boxes with rounded corners or slanted sides),
+circles and ellipses can be filled by giving them an attribute of
+.BR fill [ ed ].
+.
+This takes an optional argument of an expression with a value between
+0 and 1; 0 will fill it with white, 1 with black, values in between
+with a proportionally gray shade.
+.
+A value greater than 1 can also be used:
+this means fill with the
+shade of gray that is currently being used for text and lines.
+.
+Normally this will be black, but output devices may provide
+a mechanism for changing this.
+.
+Without an argument, then the value of the variable
+.B fillval
+will be used.
+.
+Initially this has a value of 0.5.
+.
+The invisible attribute does not affect the filling of objects.
+.
+Any text associated with a filled object will be added after the
+object has been filled, so that the text will not be obscured
+by the filling.
+.
+.
+.LP
+Three additional modifiers are available to specify colored objects:
+.BR outline [ d ]
+sets the color of the outline,
+.B shaded
+the fill color, and
+.B colo\fR[\fPu\fR]\fPr\fR[\fPed\fR]
+sets both.
+.
+All three keywords expect a suffix specifying the color, for example
+.RS
+.LP
+.B circle shaded """green""" outline """black"""
+.RE
+.
+.
+.LP
+Currently, color support isn't available in \*(tx mode.
+.
+Predefined color names for
+.B groff
+are in the device macro files, for example
+.BR ps.tmac ;
+additional colors can be defined with the
+.B .defcolor
+request (see the manual page of
+.BR @g@troff (@MAN1EXT@)
+for more details).
+.
+.
+.LP
+To change the name of the vbox in \*(tx mode, set the pseudo-variable
+.B figname
+(which is actually a specially parsed command) within a picture.
+.
+Example:
+.RS
+.LP
+.B .PS
+.br
+.B figname = foobar;
+.br
+.B ...
+.br
+.B .PE
+.RE
+.
+.
+.LP
+The picture is then available in the box
+.BR \efoobar .
+.
+.
+.LP
+.B pic
+assumes that at the beginning of a picture both glyph and fill color are
+set to the default value.
+.
+.
+.LP
+Arrow heads will be drawn as solid triangles if the variable
+.B arrowhead
+is non-zero and either \*(tx mode is enabled or the
+.B \-n
+option has not been given.
+.
+Initially
+.B arrowhead
+has a value of\ 1.
+.
+Note that solid arrow heads are always filled with the current outline
+color.
+.
+.
+.LP
+The troff output of
+.B pic
+is device-independent.
+.
+The
+.B \-T
+option is therefore redundant.
+.
+All numbers are taken to be in inches; numbers are never interpreted
+to be in troff machine units.
+.
+.
+.LP
+Objects can have an
+.B aligned
+attribute.
+.
+This will only work if the postprocessor is
+.BR grops ,
+or
+.BR gropdf .
+.
+Any text associated with an object having the
+.B aligned
+attribute will be rotated about the center of the object
+so that it is aligned in the direction from the start point
+to the end point of the object.
+.
+Note that this attribute will have no effect for objects whose start
+and end points are coincident.
+.
+.
+.LP
+In places where
+.IB n th
+is allowed
+.BI \[oq] expr \[cq]th
+is also allowed.
+.
+Note that
+.B \[cq]th
+is a single token: no space is allowed between the
+.B \[cq]
+and the
+.BR th .
+.
+For example,
+.IP
+.ft B
+.nf
+for i = 1 to 4 do {
+   line from \[oq]i\[cq]th box.nw to \[oq]i+1\[cq]th box.se
+}
+.ft
+.fi
+.
+.
+.\" ====================================================================
+.SH CONVERSION
+.\" ====================================================================
+.
+To obtain a stand-alone picture from a
+.B pic
+file, enclose your
+.B pic
+code with
+.B .PS
+and
+.B .PE
+requests;
+.B roff
+configuration commands may be added at the beginning of the file, but no
+.B roff
+text.
+.
+.
+.LP
+It is necessary to feed this file into
+.B groff
+without adding any page information, so you must check which
+.B .PS
+and
+.B .PE
+requests are actually called.
+.
+For example, the mm macro package adds a page number, which is very
+annoying.
+.
+At the moment, calling standard
+.B groff
+without any macro package works.
+.
+Alternatively, you can define your own requests, e.g.\& to do nothing:
+.LP
+.RS
+.nf
+.ft B
+\&.de PS
+\&..
+\&.de PE
+\&..
+.ft
+.fi
+.RE
+.
+.
+.LP
+.B groff
+itself does not provide direct conversion into other graphics file
+formats.
+.
+But there are lots of possibilities if you first transform your
+picture into PostScript\*R format using the
+.B groff
+option
+.BR \-Tps .
+.
+Since this
+.IR ps -file
+lacks BoundingBox information it is not very useful by itself, but it
+may be fed into other conversion programs, usually named
+.BI ps2 other
+or
+.BI psto other
+or the like.
+.
+Moreover, the PostScript interpreter
+.B ghostscript
+.RB ( gs )
+has built-in graphics conversion devices that are called with the option
+.LP
+.RS
+.BI "gs \-sDEVICE=" <devname>
+.RE
+.LP
+Call
+.LP
+.RS
+.B gs \-\-help
+.RE
+.LP
+for a list of the available devices.
+.
+.
+.LP
+An alternative may be to use the
+.B \-Tpdf
+option to convert your picture directly into
+.B PDF
+format.
+.
+The MediaBox of the file produced can be controlled by passing a
+.B \-P\-p
+papersize to groff.
+.
+.
+.LP
+As the Encapsulated PostScript File Format
+.B EPS
+is getting more and more important, and the conversion wasn't
+regarded trivial in the past you might be interested to know that
+there is a conversion tool named
+.B ps2eps
+which does the right job.
+.
+It is much better than the tool
+.B ps2epsi
+packaged with
+.BR gs .
+.
+.
+.LP
+For bitmapped graphic formats, you should use
+.BR pstopnm ;
+the resulting (intermediate)
+.B PNM
+file can be then converted to virtually any graphics format using the
+tools of the
+.B netpbm
+package.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @MACRODIR@/pic.tmac
+Example definitions of the
+.B PS
+and
+.B PE
+macros.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR @g@troff (@MAN1EXT@),
+.BR groff_out (@MAN5EXT@),
+.BR tex (1),
+.BR gs (1),
+.BR ps2eps (1),
+.BR pstopnm (1),
+.BR ps2epsi (1),
+.BR pnm (5)
+.
+.
+.LP
+Eric S.\& Raymond,
+.I Making Pictures With GNU PIC.
+.br
+.I @DOCDIR@/pic.ps
+(this file, together with its source file, pic.ms, is part
+of the groff documentation)
+.
+.
+.LP
+Tpic: Pic for \*(tx
+.LP
+Brian W.\& Kernighan,
+.UR http://\:cm.bell\-labs.com/\:cm/\:cs/\:cstr/\:116.ps.gz
+.I PIC \(em A Graphics Language for Typesetting (User Manual)
+.UE .
+AT&T Bell Laboratories, Computing Science Technical Report No.\ 116
+(revised May, 1991).
+.
+.
+.LP
+.B ps2eps
+is available from CTAN mirrors, e.g.\&
+.UR ftp://\:ftp.dante.de/\:tex\-archive/\:support/\:ps2eps/
+.UE
+.
+.
+.LP
+W.\& Richard Stevens,
+.UR http://\:www.kohala.com/\:start/\:troff/\:pic2html.html
+.I Turning PIC into HTML
+.UE
+.
+.
+.LP
+W.\& Richard Stevens,
+.UR http://\:www.kohala.com/\:start/\:troff/\:pic.examples.ps
+.IR "Examples of " pic " Macros"
+.UE
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+.
+Input characters that are invalid for
+.B groff
+(i.e., those with ASCII code 0,
+or 013 octal, or between 015 and 037 octal, or between 0200 and 0237
+octal) are rejected even in \*(tx mode.
+.
+.
+.LP
+The interpretation of
+.B fillval
+is incompatible with the pic in 10th edition Unix,
+which interprets 0 as black and 1 as white.
+.
+.
+.LP
+PostScript\*R is a registered trademark of Adobe Systems Incorporation.
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[pic_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/preproc/pic/pic.am b/src/preproc/pic/pic.am
new file mode 100644 (file)
index 0000000..d37a77b
--- /dev/null
@@ -0,0 +1,56 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += pic
+pic_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+pic_SOURCES = \
+  src/preproc/pic/pic.ypp \
+  src/preproc/pic/lex.cpp \
+  src/preproc/pic/main.cpp \
+  src/preproc/pic/object.cpp \
+  src/preproc/pic/common.cpp \
+  src/preproc/pic/troff.cpp \
+  src/preproc/pic/tex.cpp \
+  src/preproc/pic/pic.h \
+  src/preproc/pic/position.h \
+  src/preproc/pic/text.h \
+  src/preproc/pic/common.h \
+  src/preproc/pic/output.h \
+  src/preproc/pic/object.h
+
+pic_CPPFLAGS = $(AM_CPPFLAGS) \
+  -I $(top_srcdir)/src/preproc/pic \
+  -I $(top_builddir)/src/preproc/pic
+PREFIXMAN1 += src/preproc/pic/pic.1
+
+src/preproc/pic/pic-lex.$(OBJEXT): src/preproc/pic/pic.hpp
+EXTRA_DIST += \
+  src/preproc/pic/pic.1.man \
+  src/preproc/pic/TODO
+CLEANFILES += \
+  src/preproc/pic/pic.cpp \
+  src/preproc/pic/pic.hpp \
+  src/preproc/pic/pic.output
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index 34dada58011c78128366f358e96bbdaceb49660e..25c063d9d3963995495ab76afe7ff89dad8e6ff3 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
+/* A Bison parser, made by GNU Bison 3.2.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
 
    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
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
 /* Identify Bison output.  */
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.0.2"
+#define YYBISON_VERSION "3.2"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -61,8 +64,8 @@
 
 
 
-/* Copy the first part of user declarations.  */
-#line 19 "pic.y" /* yacc.c:339  */
+/* First part of user prologue.  */
+#line 19 "../src/preproc/pic/pic.ypp" /* yacc.c:338  */
 
 #include "pic.h"
 #include "ptable.h"
@@ -106,13 +109,16 @@ char *format_number(const char *form, double n);
 char *do_sprintf(const char *form, const double *v, int nv);
 
 
-#line 110 "pic.cpp" /* yacc.c:339  */
-
+#line 113 "src/preproc/pic/pic.cpp" /* yacc.c:338  */
 # ifndef YY_NULLPTR
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTR nullptr
+#   else
+#    define YY_NULLPTR 0
+#   endif
 #  else
-#   define YY_NULLPTR 0
+#   define YY_NULLPTR ((void*)0)
 #  endif
 # endif
 
@@ -126,8 +132,8 @@ char *do_sprintf(const char *form, const double *v, int nv);
 
 /* In a future release of Bison, this section will be replaced
    by #include "y.tab.h".  */
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
+#ifndef YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED
+# define YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -391,10 +397,10 @@ extern int yydebug;
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
+
 union YYSTYPE
 {
-#line 65 "pic.y" /* yacc.c:355  */
+#line 65 "../src/preproc/pic/pic.ypp" /* yacc.c:353  */
 
        char *str;
        int n;
@@ -413,8 +419,10 @@ union YYSTYPE
        graphics_state state;
        object_type obtype;
 
-#line 417 "pic.cpp" /* yacc.c:355  */
+#line 423 "src/preproc/pic/pic.cpp" /* yacc.c:353  */
 };
+
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
 #endif
@@ -424,11 +432,9 @@ extern YYSTYPE yylval;
 
 int yyparse (void);
 
-#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
+#endif /* !YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED  */
 
-/* Copy the second part of user declarations.  */
 
-#line 432 "pic.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -449,13 +455,13 @@ typedef signed char yytype_int8;
 #ifdef YYTYPE_UINT16
 typedef YYTYPE_UINT16 yytype_uint16;
 #else
-typedef unsigned short int yytype_uint16;
+typedef unsigned short yytype_uint16;
 #endif
 
 #ifdef YYTYPE_INT16
 typedef YYTYPE_INT16 yytype_int16;
 #else
-typedef short int yytype_int16;
+typedef short yytype_int16;
 #endif
 
 #ifndef YYSIZE_T
@@ -467,7 +473,7 @@ typedef short int yytype_int16;
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
@@ -503,15 +509,6 @@ typedef short int yytype_int16;
 # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
 #endif
 
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
-# endif
-#endif
-
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
 # define YYUSE(E) ((void) (E))
@@ -519,7 +516,7 @@ typedef short int yytype_int16;
 # define YYUSE(E) /* empty */
 #endif
 
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
     _Pragma ("GCC diagnostic push") \
@@ -687,7 +684,7 @@ union yyalloc
 #define YYMAXUTOK   379
 
 #define YYTRANSLATE(YYX)                                                \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+  ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
    as returned by yylex, without out-of-bounds checking.  */
@@ -1645,37 +1642,37 @@ do {                                                                      \
 } while (0)
 
 
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
 
 static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
 {
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
 # endif
   YYUSE (yytype);
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
 static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
 {
-  YYFPRINTF (yyoutput, "%s %s (",
+  YYFPRINTF (yyo, "%s %s (",
              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yytype, yyvaluep);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -1709,7 +1706,7 @@ do {                                                            \
 static void
 yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
 {
-  unsigned long int yylno = yyrline[yyrule];
+  unsigned long yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
@@ -1842,7 +1839,7 @@ yytnamerr (char *yyres, const char *yystr)
   if (! yyres)
     return yystrlen (yystr);
 
-  return yystpcpy (yyres, yystr) - yyres;
+  return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres);
 }
 # endif
 
@@ -1935,6 +1932,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
       case N:                               \
         yyformat = S;                       \
       break
+    default: /* Avoid compiler warnings. */
       YYCASE_(0, YY_("syntax error"));
       YYCASE_(1, YY_("syntax error, unexpected %s"));
       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
@@ -2083,12 +2081,12 @@ yyparse (void)
   yyssp++;
 
  yysetstate:
-  *yyssp = yystate;
+  *yyssp = (yytype_int16) yystate;
 
   if (yyss + yystacksize - 1 <= yyssp)
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
 
 #ifdef yyoverflow
       {
@@ -2106,7 +2104,6 @@ yyparse (void)
                     &yyss1, yysize * sizeof (*yyssp),
                     &yyvs1, yysize * sizeof (*yyvsp),
                     &yystacksize);
-
         yyss = yyss1;
         yyvs = yyvs1;
       }
@@ -2140,7 +2137,7 @@ yyparse (void)
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long int) yystacksize));
+                  (unsigned long) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
         YYABORT;
@@ -2251,164 +2248,164 @@ yyreduce:
   switch (yyn)
     {
         case 3:
-#line 277 "pic.y" /* yacc.c:1646  */
+#line 277 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if (olist.head)
                    print_picture(olist.head);
                }
-#line 2260 "pic.cpp" /* yacc.c:1646  */
+#line 2257 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 4:
-#line 286 "pic.y" /* yacc.c:1646  */
+#line 286 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pl) = (yyvsp[-1].pl); }
-#line 2266 "pic.cpp" /* yacc.c:1646  */
+#line 2263 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 5:
-#line 291 "pic.y" /* yacc.c:1646  */
+#line 291 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pl) = (yyvsp[0].pl); }
-#line 2272 "pic.cpp" /* yacc.c:1646  */
+#line 2269 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 6:
-#line 293 "pic.y" /* yacc.c:1646  */
+#line 293 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pl) = (yyvsp[-2].pl); }
-#line 2278 "pic.cpp" /* yacc.c:1646  */
+#line 2275 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 11:
-#line 308 "pic.y" /* yacc.c:1646  */
+#line 308 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  a_delete graphname;
                  graphname = new char[strlen((yyvsp[0].str)) + 1];
                  strcpy(graphname, (yyvsp[0].str));
                  a_delete (yyvsp[0].str);
                }
-#line 2289 "pic.cpp" /* yacc.c:1646  */
+#line 2286 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 12:
-#line 316 "pic.y" /* yacc.c:1646  */
+#line 316 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  define_variable((yyvsp[-2].str), (yyvsp[0].x));
-                 a_delete (yyvsp[-2].str);
+                 free((yyvsp[-2].str));
                }
-#line 2298 "pic.cpp" /* yacc.c:1646  */
+#line 2295 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 13:
-#line 321 "pic.y" /* yacc.c:1646  */
+#line 321 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  place *p = lookup_label((yyvsp[-3].str));
                  if (!p) {
-                   lex_error("variable `%1' not defined", (yyvsp[-3].str));
+                   lex_error("variable '%1' not defined", (yyvsp[-3].str));
                    YYABORT;
                  }
                  p->obj = 0;
                  p->x = (yyvsp[0].x);
                  p->y = 0.0;
-                 a_delete (yyvsp[-3].str);
+                 free((yyvsp[-3].str));
                }
-#line 2314 "pic.cpp" /* yacc.c:1646  */
+#line 2311 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 14:
-#line 333 "pic.y" /* yacc.c:1646  */
+#line 333 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { current_direction = UP_DIRECTION; }
-#line 2320 "pic.cpp" /* yacc.c:1646  */
+#line 2317 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 15:
-#line 335 "pic.y" /* yacc.c:1646  */
+#line 335 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { current_direction = DOWN_DIRECTION; }
-#line 2326 "pic.cpp" /* yacc.c:1646  */
+#line 2323 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 16:
-#line 337 "pic.y" /* yacc.c:1646  */
+#line 337 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { current_direction = LEFT_DIRECTION; }
-#line 2332 "pic.cpp" /* yacc.c:1646  */
+#line 2329 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 17:
-#line 339 "pic.y" /* yacc.c:1646  */
+#line 339 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { current_direction = RIGHT_DIRECTION; }
-#line 2338 "pic.cpp" /* yacc.c:1646  */
+#line 2335 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 18:
-#line 341 "pic.y" /* yacc.c:1646  */
+#line 341 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  olist.append(make_command_object((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename,
                                                   (yyvsp[0].lstr).lineno));
                }
-#line 2347 "pic.cpp" /* yacc.c:1646  */
+#line 2344 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 19:
-#line 346 "pic.y" /* yacc.c:1646  */
+#line 346 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  olist.append(make_command_object((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename,
                                                   (yyvsp[0].lstr).lineno));
                }
-#line 2356 "pic.cpp" /* yacc.c:1646  */
+#line 2353 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 20:
-#line 351 "pic.y" /* yacc.c:1646  */
+#line 351 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  fprintf(stderr, "%s\n", (yyvsp[0].lstr).str);
                  a_delete (yyvsp[0].lstr).str;
                  fflush(stderr);
                }
-#line 2366 "pic.cpp" /* yacc.c:1646  */
+#line 2363 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 21:
-#line 357 "pic.y" /* yacc.c:1646  */
+#line 357 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { delim_flag = 1; }
-#line 2372 "pic.cpp" /* yacc.c:1646  */
+#line 2369 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 22:
-#line 359 "pic.y" /* yacc.c:1646  */
+#line 359 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  delim_flag = 0;
                  if (safer_flag)
-                   lex_error("unsafe to run command `%1'", (yyvsp[0].str));
+                   lex_error("unsafe to run command '%1'", (yyvsp[0].str));
                  else
                    system((yyvsp[0].str));
                  a_delete (yyvsp[0].str);
                }
-#line 2385 "pic.cpp" /* yacc.c:1646  */
+#line 2382 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 23:
-#line 368 "pic.y" /* yacc.c:1646  */
+#line 368 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if (yychar < 0)
                    do_lookahead();
                  do_copy((yyvsp[0].lstr).str);
                  // do not delete the filename
                }
-#line 2396 "pic.cpp" /* yacc.c:1646  */
+#line 2393 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 24:
-#line 375 "pic.y" /* yacc.c:1646  */
+#line 375 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { delim_flag = 2; }
-#line 2402 "pic.cpp" /* yacc.c:1646  */
+#line 2399 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 25:
-#line 377 "pic.y" /* yacc.c:1646  */
+#line 377 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { delim_flag = 0; }
-#line 2408 "pic.cpp" /* yacc.c:1646  */
+#line 2405 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 26:
-#line 379 "pic.y" /* yacc.c:1646  */
+#line 379 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if (yychar < 0)
                    do_lookahead();
@@ -2417,23 +2414,23 @@ yyreduce:
                  a_delete (yyvsp[-2].str);
                  a_delete (yyvsp[0].str);
                }
-#line 2421 "pic.cpp" /* yacc.c:1646  */
+#line 2418 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 27:
-#line 388 "pic.y" /* yacc.c:1646  */
+#line 388 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { delim_flag = 2; }
-#line 2427 "pic.cpp" /* yacc.c:1646  */
+#line 2424 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 28:
-#line 390 "pic.y" /* yacc.c:1646  */
+#line 390 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { delim_flag = 0; }
-#line 2433 "pic.cpp" /* yacc.c:1646  */
+#line 2430 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 29:
-#line 392 "pic.y" /* yacc.c:1646  */
+#line 392 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if (yychar < 0)
                    do_lookahead();
@@ -2441,28 +2438,28 @@ yyreduce:
                  a_delete (yyvsp[-2].str);
                  a_delete (yyvsp[0].str);
                }
-#line 2445 "pic.cpp" /* yacc.c:1646  */
+#line 2442 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 30:
-#line 400 "pic.y" /* yacc.c:1646  */
+#line 400 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { delim_flag = 1; }
-#line 2451 "pic.cpp" /* yacc.c:1646  */
+#line 2448 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 31:
-#line 402 "pic.y" /* yacc.c:1646  */
+#line 402 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  delim_flag = 0;
                  if (yychar < 0)
                    do_lookahead();
                  do_for((yyvsp[-8].str), (yyvsp[-6].x), (yyvsp[-4].x), (yyvsp[-3].by).is_multiplicative, (yyvsp[-3].by).val, (yyvsp[0].str)); 
                }
-#line 2462 "pic.cpp" /* yacc.c:1646  */
+#line 2459 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 32:
-#line 409 "pic.y" /* yacc.c:1646  */
+#line 409 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if (yychar < 0)
                    do_lookahead();
@@ -2470,17 +2467,17 @@ yyreduce:
                    push_body((yyvsp[0].if_data).body);
                  a_delete (yyvsp[0].if_data).body;
                }
-#line 2474 "pic.cpp" /* yacc.c:1646  */
+#line 2471 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 33:
-#line 417 "pic.y" /* yacc.c:1646  */
+#line 417 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { delim_flag = 1; }
-#line 2480 "pic.cpp" /* yacc.c:1646  */
+#line 2477 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 34:
-#line 419 "pic.y" /* yacc.c:1646  */
+#line 419 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  delim_flag = 0;
                  if (yychar < 0)
@@ -2489,53 +2486,53 @@ yyreduce:
                    push_body((yyvsp[-3].if_data).body);
                  else
                    push_body((yyvsp[0].str));
-                 a_delete (yyvsp[-3].if_data).body;
-                 a_delete (yyvsp[0].str);
+                 free((yyvsp[-3].if_data).body);
+                 free((yyvsp[0].str));
                }
-#line 2496 "pic.cpp" /* yacc.c:1646  */
+#line 2493 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 36:
-#line 432 "pic.y" /* yacc.c:1646  */
+#line 432 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { define_variable("scale", 1.0); }
-#line 2502 "pic.cpp" /* yacc.c:1646  */
+#line 2499 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 39:
-#line 442 "pic.y" /* yacc.c:1646  */
+#line 442 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  reset((yyvsp[0].str));
                  a_delete (yyvsp[0].str);
                }
-#line 2511 "pic.cpp" /* yacc.c:1646  */
+#line 2508 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 40:
-#line 447 "pic.y" /* yacc.c:1646  */
+#line 447 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  reset((yyvsp[0].str));
                  a_delete (yyvsp[0].str);
                }
-#line 2520 "pic.cpp" /* yacc.c:1646  */
+#line 2517 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 41:
-#line 452 "pic.y" /* yacc.c:1646  */
+#line 452 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  reset((yyvsp[0].str));
                  a_delete (yyvsp[0].str);
                }
-#line 2529 "pic.cpp" /* yacc.c:1646  */
+#line 2526 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 42:
-#line 460 "pic.y" /* yacc.c:1646  */
+#line 460 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.lstr) = (yyvsp[0].lstr); }
-#line 2535 "pic.cpp" /* yacc.c:1646  */
+#line 2532 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 43:
-#line 462 "pic.y" /* yacc.c:1646  */
+#line 462 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.lstr).str = new char[strlen((yyvsp[-1].lstr).str) + strlen((yyvsp[0].lstr).str) + 1];
                  strcpy((yyval.lstr).str, (yyvsp[-1].lstr).str);
@@ -2551,168 +2548,168 @@ yyreduce:
                    (yyval.lstr).lineno = (yyvsp[0].lstr).lineno;
                  }
                }
-#line 2555 "pic.cpp" /* yacc.c:1646  */
+#line 2552 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 44:
-#line 481 "pic.y" /* yacc.c:1646  */
+#line 481 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.lstr).str = new char[GDIGITS + 1];
                  sprintf((yyval.lstr).str, "%g", (yyvsp[0].x));
                  (yyval.lstr).filename = 0;
                  (yyval.lstr).lineno = 0;
                }
-#line 2566 "pic.cpp" /* yacc.c:1646  */
+#line 2563 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 45:
-#line 488 "pic.y" /* yacc.c:1646  */
+#line 488 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.lstr) = (yyvsp[0].lstr); }
-#line 2572 "pic.cpp" /* yacc.c:1646  */
+#line 2569 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 46:
-#line 490 "pic.y" /* yacc.c:1646  */
+#line 490 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.lstr).str = new char[GDIGITS + 2 + GDIGITS + 1];
                  sprintf((yyval.lstr).str, "%g, %g", (yyvsp[0].pair).x, (yyvsp[0].pair).y);
                  (yyval.lstr).filename = 0;
                  (yyval.lstr).lineno = 0;
                }
-#line 2583 "pic.cpp" /* yacc.c:1646  */
+#line 2580 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 47:
-#line 500 "pic.y" /* yacc.c:1646  */
+#line 500 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { delim_flag = 1; }
-#line 2589 "pic.cpp" /* yacc.c:1646  */
+#line 2586 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 48:
-#line 502 "pic.y" /* yacc.c:1646  */
+#line 502 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  delim_flag = 0;
                  (yyval.if_data).x = (yyvsp[-3].x);
                  (yyval.if_data).body = (yyvsp[0].str);
                }
-#line 2599 "pic.cpp" /* yacc.c:1646  */
+#line 2596 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 49:
-#line 511 "pic.y" /* yacc.c:1646  */
+#line 511 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.str) = 0; }
-#line 2605 "pic.cpp" /* yacc.c:1646  */
+#line 2602 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 50:
-#line 513 "pic.y" /* yacc.c:1646  */
+#line 513 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.str) = (yyvsp[0].lstr).str; }
-#line 2611 "pic.cpp" /* yacc.c:1646  */
+#line 2608 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 51:
-#line 518 "pic.y" /* yacc.c:1646  */
+#line 518 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[0].x); }
-#line 2617 "pic.cpp" /* yacc.c:1646  */
+#line 2614 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 52:
-#line 520 "pic.y" /* yacc.c:1646  */
+#line 520 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[0].x); }
-#line 2623 "pic.cpp" /* yacc.c:1646  */
+#line 2620 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 53:
-#line 525 "pic.y" /* yacc.c:1646  */
+#line 525 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.x) = strcmp((yyvsp[-2].lstr).str, (yyvsp[0].lstr).str) == 0;
                  a_delete (yyvsp[-2].lstr).str;
                  a_delete (yyvsp[0].lstr).str;
                }
-#line 2633 "pic.cpp" /* yacc.c:1646  */
+#line 2630 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 54:
-#line 531 "pic.y" /* yacc.c:1646  */
+#line 531 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.x) = strcmp((yyvsp[-2].lstr).str, (yyvsp[0].lstr).str) != 0;
                  a_delete (yyvsp[-2].lstr).str;
                  a_delete (yyvsp[0].lstr).str;
                }
-#line 2643 "pic.cpp" /* yacc.c:1646  */
+#line 2640 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 55:
-#line 537 "pic.y" /* yacc.c:1646  */
+#line 537 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
-#line 2649 "pic.cpp" /* yacc.c:1646  */
+#line 2646 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 56:
-#line 539 "pic.y" /* yacc.c:1646  */
+#line 539 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
-#line 2655 "pic.cpp" /* yacc.c:1646  */
+#line 2652 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 57:
-#line 541 "pic.y" /* yacc.c:1646  */
+#line 541 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
-#line 2661 "pic.cpp" /* yacc.c:1646  */
+#line 2658 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 58:
-#line 543 "pic.y" /* yacc.c:1646  */
+#line 543 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
-#line 2667 "pic.cpp" /* yacc.c:1646  */
+#line 2664 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 59:
-#line 545 "pic.y" /* yacc.c:1646  */
+#line 545 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
-#line 2673 "pic.cpp" /* yacc.c:1646  */
+#line 2670 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 60:
-#line 547 "pic.y" /* yacc.c:1646  */
+#line 547 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
-#line 2679 "pic.cpp" /* yacc.c:1646  */
+#line 2676 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 61:
-#line 549 "pic.y" /* yacc.c:1646  */
+#line 549 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[0].x) == 0.0); }
-#line 2685 "pic.cpp" /* yacc.c:1646  */
+#line 2682 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 62:
-#line 555 "pic.y" /* yacc.c:1646  */
+#line 555 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.by).val = 1.0;
                  (yyval.by).is_multiplicative = 0;
                }
-#line 2694 "pic.cpp" /* yacc.c:1646  */
+#line 2691 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 63:
-#line 560 "pic.y" /* yacc.c:1646  */
+#line 560 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.by).val = (yyvsp[0].x);
                  (yyval.by).is_multiplicative = 0;
                }
-#line 2703 "pic.cpp" /* yacc.c:1646  */
+#line 2700 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 64:
-#line 565 "pic.y" /* yacc.c:1646  */
+#line 565 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.by).val = (yyvsp[0].x);
                  (yyval.by).is_multiplicative = 1;
                }
-#line 2712 "pic.cpp" /* yacc.c:1646  */
+#line 2709 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 65:
-#line 573 "pic.y" /* yacc.c:1646  */
+#line 573 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pl).obj = (yyvsp[0].spec)->make_object(&current_position,
                                           &current_direction);
@@ -2726,193 +2723,193 @@ yyreduce:
                    (yyval.pl).y = current_position.y;
                  }
                }
-#line 2730 "pic.cpp" /* yacc.c:1646  */
+#line 2727 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 66:
-#line 587 "pic.y" /* yacc.c:1646  */
+#line 587 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pl) = (yyvsp[0].pl);
                  define_label((yyvsp[-3].str), & (yyval.pl));
-                 a_delete (yyvsp[-3].str);
+                 free((yyvsp[-3].str));
                }
-#line 2740 "pic.cpp" /* yacc.c:1646  */
+#line 2737 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 67:
-#line 593 "pic.y" /* yacc.c:1646  */
+#line 593 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pl).obj = 0;
                  (yyval.pl).x = (yyvsp[0].pair).x;
                  (yyval.pl).y = (yyvsp[0].pair).y;
                  define_label((yyvsp[-3].str), & (yyval.pl));
-                 a_delete (yyvsp[-3].str);
+                 free((yyvsp[-3].str));
                }
-#line 2752 "pic.cpp" /* yacc.c:1646  */
+#line 2749 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 68:
-#line 601 "pic.y" /* yacc.c:1646  */
+#line 601 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pl) = (yyvsp[0].pl);
                  define_label((yyvsp[-3].str), & (yyval.pl));
-                 a_delete (yyvsp[-3].str);
+                 free((yyvsp[-3].str));
                }
-#line 2762 "pic.cpp" /* yacc.c:1646  */
+#line 2759 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 69:
-#line 607 "pic.y" /* yacc.c:1646  */
+#line 607 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.state).x = current_position.x;
                  (yyval.state).y = current_position.y;
                  (yyval.state).dir = current_direction;
                }
-#line 2772 "pic.cpp" /* yacc.c:1646  */
+#line 2769 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 70:
-#line 613 "pic.y" /* yacc.c:1646  */
+#line 613 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  current_position.x = (yyvsp[-2].state).x;
                  current_position.y = (yyvsp[-2].state).y;
                  current_direction = (yyvsp[-2].state).dir;
                }
-#line 2782 "pic.cpp" /* yacc.c:1646  */
+#line 2779 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 71:
-#line 619 "pic.y" /* yacc.c:1646  */
+#line 619 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pl) = (yyvsp[-3].pl);
                }
-#line 2790 "pic.cpp" /* yacc.c:1646  */
+#line 2787 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 72:
-#line 623 "pic.y" /* yacc.c:1646  */
+#line 623 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pl).obj = 0;
                  (yyval.pl).x = current_position.x;
                  (yyval.pl).y = current_position.y;
                }
-#line 2800 "pic.cpp" /* yacc.c:1646  */
+#line 2797 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 73:
-#line 632 "pic.y" /* yacc.c:1646  */
+#line 632 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {}
-#line 2806 "pic.cpp" /* yacc.c:1646  */
+#line 2803 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 74:
-#line 634 "pic.y" /* yacc.c:1646  */
+#line 634 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {}
-#line 2812 "pic.cpp" /* yacc.c:1646  */
+#line 2809 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 75:
-#line 639 "pic.y" /* yacc.c:1646  */
+#line 639 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.spec) = new object_spec(BOX_OBJECT); }
-#line 2818 "pic.cpp" /* yacc.c:1646  */
+#line 2815 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 76:
-#line 641 "pic.y" /* yacc.c:1646  */
+#line 641 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.spec) = new object_spec(CIRCLE_OBJECT); }
-#line 2824 "pic.cpp" /* yacc.c:1646  */
+#line 2821 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 77:
-#line 643 "pic.y" /* yacc.c:1646  */
+#line 643 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.spec) = new object_spec(ELLIPSE_OBJECT); }
-#line 2830 "pic.cpp" /* yacc.c:1646  */
+#line 2827 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 78:
-#line 645 "pic.y" /* yacc.c:1646  */
+#line 645 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = new object_spec(ARC_OBJECT);
                  (yyval.spec)->dir = current_direction;
                }
-#line 2839 "pic.cpp" /* yacc.c:1646  */
+#line 2836 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 79:
-#line 650 "pic.y" /* yacc.c:1646  */
+#line 650 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = new object_spec(LINE_OBJECT);
                  lookup_variable("lineht", & (yyval.spec)->segment_height);
                  lookup_variable("linewid", & (yyval.spec)->segment_width);
                  (yyval.spec)->dir = current_direction;
                }
-#line 2850 "pic.cpp" /* yacc.c:1646  */
+#line 2847 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 80:
-#line 657 "pic.y" /* yacc.c:1646  */
+#line 657 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = new object_spec(ARROW_OBJECT);
                  lookup_variable("lineht", & (yyval.spec)->segment_height);
                  lookup_variable("linewid", & (yyval.spec)->segment_width);
                  (yyval.spec)->dir = current_direction;
                }
-#line 2861 "pic.cpp" /* yacc.c:1646  */
+#line 2858 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 81:
-#line 664 "pic.y" /* yacc.c:1646  */
+#line 664 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = new object_spec(MOVE_OBJECT);
                  lookup_variable("moveht", & (yyval.spec)->segment_height);
                  lookup_variable("movewid", & (yyval.spec)->segment_width);
                  (yyval.spec)->dir = current_direction;
                }
-#line 2872 "pic.cpp" /* yacc.c:1646  */
+#line 2869 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 82:
-#line 671 "pic.y" /* yacc.c:1646  */
+#line 671 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = new object_spec(SPLINE_OBJECT);
                  lookup_variable("lineht", & (yyval.spec)->segment_height);
                  lookup_variable("linewid", & (yyval.spec)->segment_width);
                  (yyval.spec)->dir = current_direction;
                }
-#line 2883 "pic.cpp" /* yacc.c:1646  */
+#line 2880 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 83:
-#line 678 "pic.y" /* yacc.c:1646  */
+#line 678 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = new object_spec(TEXT_OBJECT);
                  (yyval.spec)->text = new text_item((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
                }
-#line 2892 "pic.cpp" /* yacc.c:1646  */
+#line 2889 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 84:
-#line 683 "pic.y" /* yacc.c:1646  */
+#line 683 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = new object_spec(TEXT_OBJECT);
                  (yyval.spec)->text = new text_item(format_number(0, (yyvsp[0].x)), 0, -1);
                }
-#line 2901 "pic.cpp" /* yacc.c:1646  */
+#line 2898 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 85:
-#line 688 "pic.y" /* yacc.c:1646  */
+#line 688 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = new object_spec(TEXT_OBJECT);
                  (yyval.spec)->text = new text_item(format_number((yyvsp[0].lstr).str, (yyvsp[-1].x)),
                                           (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
                  a_delete (yyvsp[0].lstr).str;
                }
-#line 2912 "pic.cpp" /* yacc.c:1646  */
+#line 2909 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 86:
-#line 695 "pic.y" /* yacc.c:1646  */
+#line 695 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  saved_state *p = new saved_state;
                  (yyval.pstate) = p;
@@ -2927,11 +2924,11 @@ yyreduce:
                  current_saved_state = p;
                  olist.append(make_mark_object());
                }
-#line 2931 "pic.cpp" /* yacc.c:1646  */
+#line 2928 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 87:
-#line 710 "pic.y" /* yacc.c:1646  */
+#line 710 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  current_position.x = (yyvsp[-2].pstate)->x;
                  current_position.y = (yyvsp[-2].pstate)->y;
@@ -2943,51 +2940,51 @@ yyreduce:
                  current_saved_state = (yyvsp[-2].pstate)->prev;
                  delete (yyvsp[-2].pstate);
                }
-#line 2947 "pic.cpp" /* yacc.c:1646  */
+#line 2944 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 88:
-#line 722 "pic.y" /* yacc.c:1646  */
+#line 722 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->height = (yyvsp[0].x);
                  (yyval.spec)->flags |= HAS_HEIGHT;
                }
-#line 2957 "pic.cpp" /* yacc.c:1646  */
+#line 2954 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 89:
-#line 728 "pic.y" /* yacc.c:1646  */
+#line 728 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->radius = (yyvsp[0].x);
                  (yyval.spec)->flags |= HAS_RADIUS;
                }
-#line 2967 "pic.cpp" /* yacc.c:1646  */
+#line 2964 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 90:
-#line 734 "pic.y" /* yacc.c:1646  */
+#line 734 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->width = (yyvsp[0].x);
                  (yyval.spec)->flags |= HAS_WIDTH;
                }
-#line 2977 "pic.cpp" /* yacc.c:1646  */
+#line 2974 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 91:
-#line 740 "pic.y" /* yacc.c:1646  */
+#line 740 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->radius = (yyvsp[0].x)/2.0;
                  (yyval.spec)->flags |= HAS_RADIUS;
                }
-#line 2987 "pic.cpp" /* yacc.c:1646  */
+#line 2984 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 92:
-#line 746 "pic.y" /* yacc.c:1646  */
+#line 746 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags |= HAS_SEGMENT;
@@ -3006,110 +3003,110 @@ yyreduce:
                    break;
                  }
                }
-#line 3010 "pic.cpp" /* yacc.c:1646  */
+#line 3007 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 93:
-#line 765 "pic.y" /* yacc.c:1646  */
+#line 765 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->dir = UP_DIRECTION;
                  (yyval.spec)->flags |= HAS_SEGMENT;
                  (yyval.spec)->segment_pos.y += (yyval.spec)->segment_height;
                }
-#line 3021 "pic.cpp" /* yacc.c:1646  */
+#line 3018 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 94:
-#line 772 "pic.y" /* yacc.c:1646  */
+#line 772 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->dir = UP_DIRECTION;
                  (yyval.spec)->flags |= HAS_SEGMENT;
                  (yyval.spec)->segment_pos.y += (yyvsp[0].x);
                }
-#line 3032 "pic.cpp" /* yacc.c:1646  */
+#line 3029 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 95:
-#line 779 "pic.y" /* yacc.c:1646  */
+#line 779 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->dir = DOWN_DIRECTION;
                  (yyval.spec)->flags |= HAS_SEGMENT;
                  (yyval.spec)->segment_pos.y -= (yyval.spec)->segment_height;
                }
-#line 3043 "pic.cpp" /* yacc.c:1646  */
+#line 3040 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 96:
-#line 786 "pic.y" /* yacc.c:1646  */
+#line 786 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->dir = DOWN_DIRECTION;
                  (yyval.spec)->flags |= HAS_SEGMENT;
                  (yyval.spec)->segment_pos.y -= (yyvsp[0].x);
                }
-#line 3054 "pic.cpp" /* yacc.c:1646  */
+#line 3051 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 97:
-#line 793 "pic.y" /* yacc.c:1646  */
+#line 793 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->dir = RIGHT_DIRECTION;
                  (yyval.spec)->flags |= HAS_SEGMENT;
                  (yyval.spec)->segment_pos.x += (yyval.spec)->segment_width;
                }
-#line 3065 "pic.cpp" /* yacc.c:1646  */
+#line 3062 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 98:
-#line 800 "pic.y" /* yacc.c:1646  */
+#line 800 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->dir = RIGHT_DIRECTION;
                  (yyval.spec)->flags |= HAS_SEGMENT;
                  (yyval.spec)->segment_pos.x += (yyvsp[0].x);
                }
-#line 3076 "pic.cpp" /* yacc.c:1646  */
+#line 3073 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 99:
-#line 807 "pic.y" /* yacc.c:1646  */
+#line 807 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->dir = LEFT_DIRECTION;
                  (yyval.spec)->flags |= HAS_SEGMENT;
                  (yyval.spec)->segment_pos.x -= (yyval.spec)->segment_width;
                }
-#line 3087 "pic.cpp" /* yacc.c:1646  */
+#line 3084 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 100:
-#line 814 "pic.y" /* yacc.c:1646  */
+#line 814 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->dir = LEFT_DIRECTION;
                  (yyval.spec)->flags |= HAS_SEGMENT;
                  (yyval.spec)->segment_pos.x -= (yyvsp[0].x);
                }
-#line 3098 "pic.cpp" /* yacc.c:1646  */
+#line 3095 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 101:
-#line 821 "pic.y" /* yacc.c:1646  */
+#line 821 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= HAS_FROM;
                  (yyval.spec)->from.x = (yyvsp[0].pair).x;
                  (yyval.spec)->from.y = (yyvsp[0].pair).y;
                }
-#line 3109 "pic.cpp" /* yacc.c:1646  */
+#line 3106 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 102:
-#line 828 "pic.y" /* yacc.c:1646  */
+#line 828 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  if ((yyval.spec)->flags & HAS_SEGMENT)
@@ -3124,11 +3121,11 @@ yyreduce:
                  (yyval.spec)->to.x = (yyvsp[0].pair).x;
                  (yyval.spec)->to.y = (yyvsp[0].pair).y;
                }
-#line 3128 "pic.cpp" /* yacc.c:1646  */
+#line 3125 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 103:
-#line 843 "pic.y" /* yacc.c:1646  */
+#line 843 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= HAS_AT;
@@ -3140,21 +3137,21 @@ yyreduce:
                    (yyval.spec)->from.y = (yyvsp[0].pair).y;
                  }
                }
-#line 3144 "pic.cpp" /* yacc.c:1646  */
+#line 3141 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 104:
-#line 855 "pic.y" /* yacc.c:1646  */
+#line 855 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= HAS_WITH;
                  (yyval.spec)->with = (yyvsp[0].pth);
                }
-#line 3154 "pic.cpp" /* yacc.c:1646  */
+#line 3151 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 105:
-#line 861 "pic.y" /* yacc.c:1646  */
+#line 861 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= HAS_WITH;
@@ -3163,22 +3160,22 @@ yyreduce:
                  pos.y = (yyvsp[0].pair).y;
                  (yyval.spec)->with = new path(pos);
                }
-#line 3167 "pic.cpp" /* yacc.c:1646  */
+#line 3164 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 106:
-#line 870 "pic.y" /* yacc.c:1646  */
+#line 870 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= HAS_SEGMENT;
                  (yyval.spec)->segment_pos.x += (yyvsp[0].pair).x;
                  (yyval.spec)->segment_pos.y += (yyvsp[0].pair).y;
                }
-#line 3178 "pic.cpp" /* yacc.c:1646  */
+#line 3175 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 107:
-#line 877 "pic.y" /* yacc.c:1646  */
+#line 877 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  if (!((yyval.spec)->flags & HAS_SEGMENT))
@@ -3203,109 +3200,109 @@ yyreduce:
                  (yyval.spec)->segment_pos.x = (yyval.spec)->segment_pos.y = 0.0;
                  (yyval.spec)->segment_is_absolute = 0;
                }
-#line 3207 "pic.cpp" /* yacc.c:1646  */
+#line 3204 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 108:
-#line 902 "pic.y" /* yacc.c:1646  */
+#line 902 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);      // nothing
                }
-#line 3215 "pic.cpp" /* yacc.c:1646  */
+#line 3212 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 109:
-#line 906 "pic.y" /* yacc.c:1646  */
+#line 906 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags |= IS_DOTTED;
                  lookup_variable("dashwid", & (yyval.spec)->dash_width);
                }
-#line 3225 "pic.cpp" /* yacc.c:1646  */
+#line 3222 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 110:
-#line 912 "pic.y" /* yacc.c:1646  */
+#line 912 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= IS_DOTTED;
                  (yyval.spec)->dash_width = (yyvsp[0].x);
                }
-#line 3235 "pic.cpp" /* yacc.c:1646  */
+#line 3232 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 111:
-#line 918 "pic.y" /* yacc.c:1646  */
+#line 918 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags |= IS_DASHED;
                  lookup_variable("dashwid", & (yyval.spec)->dash_width);
                }
-#line 3245 "pic.cpp" /* yacc.c:1646  */
+#line 3242 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 112:
-#line 924 "pic.y" /* yacc.c:1646  */
+#line 924 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= IS_DASHED;
                  (yyval.spec)->dash_width = (yyvsp[0].x);
                }
-#line 3255 "pic.cpp" /* yacc.c:1646  */
+#line 3252 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 113:
-#line 930 "pic.y" /* yacc.c:1646  */
+#line 930 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags |= IS_DEFAULT_FILLED;
                }
-#line 3264 "pic.cpp" /* yacc.c:1646  */
+#line 3261 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 114:
-#line 935 "pic.y" /* yacc.c:1646  */
+#line 935 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= IS_FILLED;
                  (yyval.spec)->fill = (yyvsp[0].x);
                }
-#line 3274 "pic.cpp" /* yacc.c:1646  */
+#line 3271 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 115:
-#line 941 "pic.y" /* yacc.c:1646  */
+#line 941 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= IS_XSLANTED;
                  (yyval.spec)->xslanted = (yyvsp[0].x);
                }
-#line 3284 "pic.cpp" /* yacc.c:1646  */
+#line 3281 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 116:
-#line 947 "pic.y" /* yacc.c:1646  */
+#line 947 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= IS_YSLANTED;
                  (yyval.spec)->yslanted = (yyvsp[0].x);
                }
-#line 3294 "pic.cpp" /* yacc.c:1646  */
+#line 3291 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 117:
-#line 953 "pic.y" /* yacc.c:1646  */
+#line 953 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= (IS_SHADED | IS_FILLED);
                  (yyval.spec)->shaded = new char[strlen((yyvsp[0].lstr).str)+1];
                  strcpy((yyval.spec)->shaded, (yyvsp[0].lstr).str);
                }
-#line 3305 "pic.cpp" /* yacc.c:1646  */
+#line 3302 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 118:
-#line 960 "pic.y" /* yacc.c:1646  */
+#line 960 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
@@ -3314,22 +3311,22 @@ yyreduce:
                  (yyval.spec)->outlined = new char[strlen((yyvsp[0].lstr).str)+1];
                  strcpy((yyval.spec)->outlined, (yyvsp[0].lstr).str);
                }
-#line 3318 "pic.cpp" /* yacc.c:1646  */
+#line 3315 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 119:
-#line 969 "pic.y" /* yacc.c:1646  */
+#line 969 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= IS_OUTLINED;
                  (yyval.spec)->outlined = new char[strlen((yyvsp[0].lstr).str)+1];
                  strcpy((yyval.spec)->outlined, (yyvsp[0].lstr).str);
                }
-#line 3329 "pic.cpp" /* yacc.c:1646  */
+#line 3326 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 120:
-#line 976 "pic.y" /* yacc.c:1646  */
+#line 976 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  // line chop chop means line chop 0 chop 0
@@ -3345,11 +3342,11 @@ yyreduce:
                    (yyval.spec)->flags |= IS_DEFAULT_CHOPPED;
                  }
                }
-#line 3349 "pic.cpp" /* yacc.c:1646  */
+#line 3346 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 121:
-#line 992 "pic.y" /* yacc.c:1646  */
+#line 992 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  if ((yyval.spec)->flags & IS_DEFAULT_CHOPPED) {
@@ -3366,74 +3363,74 @@ yyreduce:
                    (yyval.spec)->flags |= IS_CHOPPED;
                  }
                }
-#line 3370 "pic.cpp" /* yacc.c:1646  */
+#line 3367 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 122:
-#line 1009 "pic.y" /* yacc.c:1646  */
+#line 1009 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags |= IS_SAME;
                }
-#line 3379 "pic.cpp" /* yacc.c:1646  */
+#line 3376 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 123:
-#line 1014 "pic.y" /* yacc.c:1646  */
+#line 1014 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags |= IS_INVISIBLE;
                }
-#line 3388 "pic.cpp" /* yacc.c:1646  */
+#line 3385 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 124:
-#line 1019 "pic.y" /* yacc.c:1646  */
+#line 1019 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags |= HAS_LEFT_ARROW_HEAD;
                }
-#line 3397 "pic.cpp" /* yacc.c:1646  */
+#line 3394 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 125:
-#line 1024 "pic.y" /* yacc.c:1646  */
+#line 1024 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags |= HAS_RIGHT_ARROW_HEAD;
                }
-#line 3406 "pic.cpp" /* yacc.c:1646  */
+#line 3403 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 126:
-#line 1029 "pic.y" /* yacc.c:1646  */
+#line 1029 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
                }
-#line 3415 "pic.cpp" /* yacc.c:1646  */
+#line 3412 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 127:
-#line 1034 "pic.y" /* yacc.c:1646  */
+#line 1034 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags |= IS_CLOCKWISE;
                }
-#line 3424 "pic.cpp" /* yacc.c:1646  */
+#line 3421 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 128:
-#line 1039 "pic.y" /* yacc.c:1646  */
+#line 1039 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags &= ~IS_CLOCKWISE;
                }
-#line 3433 "pic.cpp" /* yacc.c:1646  */
+#line 3430 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 129:
-#line 1044 "pic.y" /* yacc.c:1646  */
+#line 1044 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  text_item **p;
@@ -3441,11 +3438,11 @@ yyreduce:
                    ;
                  *p = new text_item((yyvsp[0].lstr).str, (yyvsp[0].lstr).filename, (yyvsp[0].lstr).lineno);
                }
-#line 3445 "pic.cpp" /* yacc.c:1646  */
+#line 3442 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 130:
-#line 1052 "pic.y" /* yacc.c:1646  */
+#line 1052 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  if ((yyval.spec)->text) {
@@ -3455,11 +3452,11 @@ yyreduce:
                    p->adj.h = LEFT_ADJUST;
                  }
                }
-#line 3459 "pic.cpp" /* yacc.c:1646  */
+#line 3456 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 131:
-#line 1062 "pic.y" /* yacc.c:1646  */
+#line 1062 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  if ((yyval.spec)->text) {
@@ -3469,11 +3466,11 @@ yyreduce:
                    p->adj.h = RIGHT_ADJUST;
                  }
                }
-#line 3473 "pic.cpp" /* yacc.c:1646  */
+#line 3470 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 132:
-#line 1072 "pic.y" /* yacc.c:1646  */
+#line 1072 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  if ((yyval.spec)->text) {
@@ -3483,11 +3480,11 @@ yyreduce:
                    p->adj.v = ABOVE_ADJUST;
                  }
                }
-#line 3487 "pic.cpp" /* yacc.c:1646  */
+#line 3484 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 133:
-#line 1082 "pic.y" /* yacc.c:1646  */
+#line 1082 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  if ((yyval.spec)->text) {
@@ -3497,58 +3494,58 @@ yyreduce:
                    p->adj.v = BELOW_ADJUST;
                  }
                }
-#line 3501 "pic.cpp" /* yacc.c:1646  */
+#line 3498 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 134:
-#line 1092 "pic.y" /* yacc.c:1646  */
+#line 1092 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-2].spec);
                  (yyval.spec)->flags |= HAS_THICKNESS;
                  (yyval.spec)->thickness = (yyvsp[0].x);
                }
-#line 3511 "pic.cpp" /* yacc.c:1646  */
+#line 3508 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 135:
-#line 1098 "pic.y" /* yacc.c:1646  */
+#line 1098 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.spec) = (yyvsp[-1].spec);
                  (yyval.spec)->flags |= IS_ALIGNED;
                }
-#line 3520 "pic.cpp" /* yacc.c:1646  */
+#line 3517 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 136:
-#line 1106 "pic.y" /* yacc.c:1646  */
+#line 1106 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.lstr) = (yyvsp[0].lstr); }
-#line 3526 "pic.cpp" /* yacc.c:1646  */
+#line 3523 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 137:
-#line 1108 "pic.y" /* yacc.c:1646  */
+#line 1108 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.lstr).filename = (yyvsp[-2].lstr).filename;
                  (yyval.lstr).lineno = (yyvsp[-2].lstr).lineno;
                  (yyval.lstr).str = do_sprintf((yyvsp[-2].lstr).str, (yyvsp[-1].dv).v, (yyvsp[-1].dv).nv);
                  a_delete (yyvsp[-1].dv).v;
-                 a_delete (yyvsp[-2].lstr).str;
+                 free((yyvsp[-2].lstr).str);
                }
-#line 3538 "pic.cpp" /* yacc.c:1646  */
+#line 3535 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 138:
-#line 1119 "pic.y" /* yacc.c:1646  */
+#line 1119 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.dv).v = 0;
                  (yyval.dv).nv = 0;
                  (yyval.dv).maxv = 0;
                }
-#line 3548 "pic.cpp" /* yacc.c:1646  */
+#line 3545 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 139:
-#line 1125 "pic.y" /* yacc.c:1646  */
+#line 1125 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.dv) = (yyvsp[-2].dv);
                  if ((yyval.dv).nv >= (yyval.dv).maxv) {
@@ -3575,242 +3572,242 @@ yyreduce:
                  (yyval.dv).v[(yyval.dv).nv] = (yyvsp[0].x);
                  (yyval.dv).nv += 1;
                }
-#line 3579 "pic.cpp" /* yacc.c:1646  */
+#line 3576 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 140:
-#line 1155 "pic.y" /* yacc.c:1646  */
+#line 1155 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pair) = (yyvsp[0].pair); }
-#line 3585 "pic.cpp" /* yacc.c:1646  */
+#line 3582 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 141:
-#line 1157 "pic.y" /* yacc.c:1646  */
+#line 1157 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  position pos = (yyvsp[0].pl);
                  (yyval.pair).x = pos.x;
                  (yyval.pair).y = pos.y;
                }
-#line 3595 "pic.cpp" /* yacc.c:1646  */
+#line 3592 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 142:
-#line 1163 "pic.y" /* yacc.c:1646  */
+#line 1163 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  position pos = (yyvsp[-1].pl);
                  (yyval.pair).x = pos.x;
                  (yyval.pair).y = pos.y;
                }
-#line 3605 "pic.cpp" /* yacc.c:1646  */
+#line 3602 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 143:
-#line 1172 "pic.y" /* yacc.c:1646  */
+#line 1172 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pair) = (yyvsp[0].pair); }
-#line 3611 "pic.cpp" /* yacc.c:1646  */
+#line 3608 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 144:
-#line 1174 "pic.y" /* yacc.c:1646  */
+#line 1174 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pair).x = (yyvsp[-2].pair).x + (yyvsp[0].pair).x;
                  (yyval.pair).y = (yyvsp[-2].pair).y + (yyvsp[0].pair).y;
                }
-#line 3620 "pic.cpp" /* yacc.c:1646  */
+#line 3617 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 145:
-#line 1179 "pic.y" /* yacc.c:1646  */
+#line 1179 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pair).x = (yyvsp[-3].pair).x + (yyvsp[-1].pair).x;
                  (yyval.pair).y = (yyvsp[-3].pair).y + (yyvsp[-1].pair).y;
                }
-#line 3629 "pic.cpp" /* yacc.c:1646  */
+#line 3626 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 146:
-#line 1184 "pic.y" /* yacc.c:1646  */
+#line 1184 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pair).x = (yyvsp[-2].pair).x - (yyvsp[0].pair).x;
                  (yyval.pair).y = (yyvsp[-2].pair).y - (yyvsp[0].pair).y;
                }
-#line 3638 "pic.cpp" /* yacc.c:1646  */
+#line 3635 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 147:
-#line 1189 "pic.y" /* yacc.c:1646  */
+#line 1189 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pair).x = (yyvsp[-3].pair).x - (yyvsp[-1].pair).x;
                  (yyval.pair).y = (yyvsp[-3].pair).y - (yyvsp[-1].pair).y;
                }
-#line 3647 "pic.cpp" /* yacc.c:1646  */
+#line 3644 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 148:
-#line 1194 "pic.y" /* yacc.c:1646  */
+#line 1194 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pair).x = (yyvsp[-3].pair).x;
                  (yyval.pair).y = (yyvsp[-1].pair).y;
                }
-#line 3656 "pic.cpp" /* yacc.c:1646  */
+#line 3653 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 149:
-#line 1199 "pic.y" /* yacc.c:1646  */
+#line 1199 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pair).x = (1.0 - (yyvsp[-4].x))*(yyvsp[-2].pair).x + (yyvsp[-4].x)*(yyvsp[0].pair).x;
                  (yyval.pair).y = (1.0 - (yyvsp[-4].x))*(yyvsp[-2].pair).y + (yyvsp[-4].x)*(yyvsp[0].pair).y;
                }
-#line 3665 "pic.cpp" /* yacc.c:1646  */
+#line 3662 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 150:
-#line 1204 "pic.y" /* yacc.c:1646  */
+#line 1204 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pair).x = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).x + (yyvsp[-5].x)*(yyvsp[-1].pair).x;
                  (yyval.pair).y = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).y + (yyvsp[-5].x)*(yyvsp[-1].pair).y;
                }
-#line 3674 "pic.cpp" /* yacc.c:1646  */
+#line 3671 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 151:
-#line 1210 "pic.y" /* yacc.c:1646  */
+#line 1210 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pair).x = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).x + (yyvsp[-5].x)*(yyvsp[-1].pair).x;
                  (yyval.pair).y = (1.0 - (yyvsp[-5].x))*(yyvsp[-3].pair).y + (yyvsp[-5].x)*(yyvsp[-1].pair).y;
                }
-#line 3683 "pic.cpp" /* yacc.c:1646  */
+#line 3680 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 152:
-#line 1215 "pic.y" /* yacc.c:1646  */
+#line 1215 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pair).x = (1.0 - (yyvsp[-6].x))*(yyvsp[-4].pair).x + (yyvsp[-6].x)*(yyvsp[-2].pair).x;
                  (yyval.pair).y = (1.0 - (yyvsp[-6].x))*(yyvsp[-4].pair).y + (yyvsp[-6].x)*(yyvsp[-2].pair).y;
                }
-#line 3692 "pic.cpp" /* yacc.c:1646  */
+#line 3689 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 155:
-#line 1228 "pic.y" /* yacc.c:1646  */
+#line 1228 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pair).x = (yyvsp[-2].x);
                  (yyval.pair).y = (yyvsp[0].x);
                }
-#line 3701 "pic.cpp" /* yacc.c:1646  */
+#line 3698 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 156:
-#line 1233 "pic.y" /* yacc.c:1646  */
+#line 1233 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pair) = (yyvsp[-1].pair); }
-#line 3707 "pic.cpp" /* yacc.c:1646  */
+#line 3704 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 157:
-#line 1239 "pic.y" /* yacc.c:1646  */
+#line 1239 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pl) = (yyvsp[0].pl); }
-#line 3713 "pic.cpp" /* yacc.c:1646  */
+#line 3710 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 158:
-#line 1241 "pic.y" /* yacc.c:1646  */
+#line 1241 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  path pth((yyvsp[0].crn));
                  if (!pth.follow((yyvsp[-1].pl), & (yyval.pl)))
                    YYABORT;
                }
-#line 3723 "pic.cpp" /* yacc.c:1646  */
+#line 3720 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 159:
-#line 1247 "pic.y" /* yacc.c:1646  */
+#line 1247 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  path pth((yyvsp[-1].crn));
                  if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
                    YYABORT;
                }
-#line 3733 "pic.cpp" /* yacc.c:1646  */
+#line 3730 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 160:
-#line 1253 "pic.y" /* yacc.c:1646  */
+#line 1253 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  path pth((yyvsp[-2].crn));
                  if (!pth.follow((yyvsp[0].pl), & (yyval.pl)))
                    YYABORT;
                }
-#line 3743 "pic.cpp" /* yacc.c:1646  */
+#line 3740 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 161:
-#line 1259 "pic.y" /* yacc.c:1646  */
+#line 1259 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pl).x = current_position.x;
                  (yyval.pl).y = current_position.y;
                  (yyval.pl).obj = 0;
                }
-#line 3753 "pic.cpp" /* yacc.c:1646  */
+#line 3750 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 162:
-#line 1268 "pic.y" /* yacc.c:1646  */
+#line 1268 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  place *p = lookup_label((yyvsp[0].str));
                  if (!p) {
-                   lex_error("there is no place `%1'", (yyvsp[0].str));
+                   lex_error("there is no place '%1'", (yyvsp[0].str));
                    YYABORT;
                  }
                  (yyval.pl) = *p;
-                 a_delete (yyvsp[0].str);
+                 free((yyvsp[0].str));
                }
-#line 3767 "pic.cpp" /* yacc.c:1646  */
+#line 3764 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 163:
-#line 1278 "pic.y" /* yacc.c:1646  */
+#line 1278 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pl).obj = (yyvsp[0].obj); }
-#line 3773 "pic.cpp" /* yacc.c:1646  */
+#line 3770 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 164:
-#line 1280 "pic.y" /* yacc.c:1646  */
+#line 1280 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  path pth((yyvsp[0].str));
                  if (!pth.follow((yyvsp[-2].pl), & (yyval.pl)))
                    YYABORT;
                }
-#line 3783 "pic.cpp" /* yacc.c:1646  */
+#line 3780 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 165:
-#line 1289 "pic.y" /* yacc.c:1646  */
+#line 1289 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.n) = (yyvsp[0].n); }
-#line 3789 "pic.cpp" /* yacc.c:1646  */
+#line 3786 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 166:
-#line 1291 "pic.y" /* yacc.c:1646  */
+#line 1291 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  // XXX Check for overflow (and non-integers?).
                  (yyval.n) = (int)(yyvsp[-1].x);
                }
-#line 3798 "pic.cpp" /* yacc.c:1646  */
+#line 3795 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 167:
-#line 1299 "pic.y" /* yacc.c:1646  */
+#line 1299 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.n) = 1; }
-#line 3804 "pic.cpp" /* yacc.c:1646  */
+#line 3801 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 168:
-#line 1301 "pic.y" /* yacc.c:1646  */
+#line 1301 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.n) = (yyvsp[-1].n); }
-#line 3810 "pic.cpp" /* yacc.c:1646  */
+#line 3807 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 169:
-#line 1306 "pic.y" /* yacc.c:1646  */
+#line 1306 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  int count = 0;
                  object *p;
@@ -3825,11 +3822,11 @@ yyreduce:
                    YYABORT;
                  }
                }
-#line 3829 "pic.cpp" /* yacc.c:1646  */
+#line 3826 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 170:
-#line 1321 "pic.y" /* yacc.c:1646  */
+#line 1321 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  int count = 0;
                  object *p;
@@ -3844,457 +3841,457 @@ yyreduce:
                    YYABORT;
                  }
                }
-#line 3848 "pic.cpp" /* yacc.c:1646  */
+#line 3845 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 171:
-#line 1339 "pic.y" /* yacc.c:1646  */
+#line 1339 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.obtype) = BOX_OBJECT; }
-#line 3854 "pic.cpp" /* yacc.c:1646  */
+#line 3851 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 172:
-#line 1341 "pic.y" /* yacc.c:1646  */
+#line 1341 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.obtype) = CIRCLE_OBJECT; }
-#line 3860 "pic.cpp" /* yacc.c:1646  */
+#line 3857 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 173:
-#line 1343 "pic.y" /* yacc.c:1646  */
+#line 1343 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.obtype) = ELLIPSE_OBJECT; }
-#line 3866 "pic.cpp" /* yacc.c:1646  */
+#line 3863 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 174:
-#line 1345 "pic.y" /* yacc.c:1646  */
+#line 1345 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.obtype) = ARC_OBJECT; }
-#line 3872 "pic.cpp" /* yacc.c:1646  */
+#line 3869 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 175:
-#line 1347 "pic.y" /* yacc.c:1646  */
+#line 1347 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.obtype) = LINE_OBJECT; }
-#line 3878 "pic.cpp" /* yacc.c:1646  */
+#line 3875 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 176:
-#line 1349 "pic.y" /* yacc.c:1646  */
+#line 1349 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.obtype) = ARROW_OBJECT; }
-#line 3884 "pic.cpp" /* yacc.c:1646  */
+#line 3881 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 177:
-#line 1351 "pic.y" /* yacc.c:1646  */
+#line 1351 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.obtype) = SPLINE_OBJECT; }
-#line 3890 "pic.cpp" /* yacc.c:1646  */
+#line 3887 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 178:
-#line 1353 "pic.y" /* yacc.c:1646  */
+#line 1353 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.obtype) = BLOCK_OBJECT; }
-#line 3896 "pic.cpp" /* yacc.c:1646  */
+#line 3893 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 179:
-#line 1355 "pic.y" /* yacc.c:1646  */
+#line 1355 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.obtype) = TEXT_OBJECT; }
-#line 3902 "pic.cpp" /* yacc.c:1646  */
+#line 3899 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 180:
-#line 1360 "pic.y" /* yacc.c:1646  */
+#line 1360 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pth) = new path((yyvsp[0].str)); }
-#line 3908 "pic.cpp" /* yacc.c:1646  */
+#line 3905 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 181:
-#line 1362 "pic.y" /* yacc.c:1646  */
+#line 1362 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pth) = (yyvsp[-2].pth);
                  (yyval.pth)->append((yyvsp[0].str));
                }
-#line 3917 "pic.cpp" /* yacc.c:1646  */
+#line 3914 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 182:
-#line 1370 "pic.y" /* yacc.c:1646  */
+#line 1370 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pth) = new path((yyvsp[0].crn)); }
-#line 3923 "pic.cpp" /* yacc.c:1646  */
+#line 3920 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 183:
-#line 1374 "pic.y" /* yacc.c:1646  */
+#line 1374 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pth) = (yyvsp[0].pth); }
-#line 3929 "pic.cpp" /* yacc.c:1646  */
+#line 3926 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 184:
-#line 1376 "pic.y" /* yacc.c:1646  */
+#line 1376 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pth) = (yyvsp[-1].pth);
                  (yyval.pth)->append((yyvsp[0].crn));
                }
-#line 3938 "pic.cpp" /* yacc.c:1646  */
+#line 3935 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 185:
-#line 1384 "pic.y" /* yacc.c:1646  */
+#line 1384 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.pth) = (yyvsp[0].pth); }
-#line 3944 "pic.cpp" /* yacc.c:1646  */
+#line 3941 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 186:
-#line 1386 "pic.y" /* yacc.c:1646  */
+#line 1386 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.pth) = (yyvsp[-3].pth);
                  (yyval.pth)->set_ypath((yyvsp[-1].pth));
                }
-#line 3953 "pic.cpp" /* yacc.c:1646  */
+#line 3950 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 187:
-#line 1392 "pic.y" /* yacc.c:1646  */
+#line 1392 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
-                 lex_warning("`%1%2 last %3' in `with' argument ignored",
+                 lex_warning("'%1%2 last %3' in 'with' argument ignored",
                              (yyvsp[-3].n), ordinal_postfix((yyvsp[-3].n)), object_type_name((yyvsp[-1].obtype)));
                  (yyval.pth) = (yyvsp[0].pth);
                }
-#line 3963 "pic.cpp" /* yacc.c:1646  */
+#line 3960 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 188:
-#line 1398 "pic.y" /* yacc.c:1646  */
+#line 1398 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
-                 lex_warning("`last %1' in `with' argument ignored",
+                 lex_warning("'last %1' in 'with' argument ignored",
                              object_type_name((yyvsp[-1].obtype)));
                  (yyval.pth) = (yyvsp[0].pth);
                }
-#line 3973 "pic.cpp" /* yacc.c:1646  */
+#line 3970 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 189:
-#line 1404 "pic.y" /* yacc.c:1646  */
+#line 1404 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
-                 lex_warning("`%1%2 %3' in `with' argument ignored",
+                 lex_warning("'%1%2 %3' in 'with' argument ignored",
                              (yyvsp[-2].n), ordinal_postfix((yyvsp[-2].n)), object_type_name((yyvsp[-1].obtype)));
                  (yyval.pth) = (yyvsp[0].pth);
                }
-#line 3983 "pic.cpp" /* yacc.c:1646  */
+#line 3980 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 190:
-#line 1410 "pic.y" /* yacc.c:1646  */
+#line 1410 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
-                 lex_warning("initial `%1' in `with' argument ignored", (yyvsp[-1].str));
+                 lex_warning("initial '%1' in 'with' argument ignored", (yyvsp[-1].str));
                  a_delete (yyvsp[-1].str);
                  (yyval.pth) = (yyvsp[0].pth);
                }
-#line 3993 "pic.cpp" /* yacc.c:1646  */
+#line 3990 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 191:
-#line 1419 "pic.y" /* yacc.c:1646  */
+#line 1419 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::north; }
-#line 3999 "pic.cpp" /* yacc.c:1646  */
+#line 3996 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 192:
-#line 1421 "pic.y" /* yacc.c:1646  */
+#line 1421 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::east; }
-#line 4005 "pic.cpp" /* yacc.c:1646  */
+#line 4002 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 193:
-#line 1423 "pic.y" /* yacc.c:1646  */
+#line 1423 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::west; }
-#line 4011 "pic.cpp" /* yacc.c:1646  */
+#line 4008 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 194:
-#line 1425 "pic.y" /* yacc.c:1646  */
+#line 1425 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::south; }
-#line 4017 "pic.cpp" /* yacc.c:1646  */
+#line 4014 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 195:
-#line 1427 "pic.y" /* yacc.c:1646  */
+#line 1427 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::north_east; }
-#line 4023 "pic.cpp" /* yacc.c:1646  */
+#line 4020 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 196:
-#line 1429 "pic.y" /* yacc.c:1646  */
+#line 1429 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object:: south_east; }
-#line 4029 "pic.cpp" /* yacc.c:1646  */
+#line 4026 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 197:
-#line 1431 "pic.y" /* yacc.c:1646  */
+#line 1431 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::north_west; }
-#line 4035 "pic.cpp" /* yacc.c:1646  */
+#line 4032 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 198:
-#line 1433 "pic.y" /* yacc.c:1646  */
+#line 1433 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::south_west; }
-#line 4041 "pic.cpp" /* yacc.c:1646  */
+#line 4038 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 199:
-#line 1435 "pic.y" /* yacc.c:1646  */
+#line 1435 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::center; }
-#line 4047 "pic.cpp" /* yacc.c:1646  */
+#line 4044 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 200:
-#line 1437 "pic.y" /* yacc.c:1646  */
+#line 1437 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::start; }
-#line 4053 "pic.cpp" /* yacc.c:1646  */
+#line 4050 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 201:
-#line 1439 "pic.y" /* yacc.c:1646  */
+#line 1439 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::end; }
-#line 4059 "pic.cpp" /* yacc.c:1646  */
+#line 4056 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 202:
-#line 1441 "pic.y" /* yacc.c:1646  */
+#line 1441 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::north; }
-#line 4065 "pic.cpp" /* yacc.c:1646  */
+#line 4062 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 203:
-#line 1443 "pic.y" /* yacc.c:1646  */
+#line 1443 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::south; }
-#line 4071 "pic.cpp" /* yacc.c:1646  */
+#line 4068 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 204:
-#line 1445 "pic.y" /* yacc.c:1646  */
+#line 1445 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::west; }
-#line 4077 "pic.cpp" /* yacc.c:1646  */
+#line 4074 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 205:
-#line 1447 "pic.y" /* yacc.c:1646  */
+#line 1447 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::east; }
-#line 4083 "pic.cpp" /* yacc.c:1646  */
+#line 4080 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 206:
-#line 1449 "pic.y" /* yacc.c:1646  */
+#line 1449 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::north_west; }
-#line 4089 "pic.cpp" /* yacc.c:1646  */
+#line 4086 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 207:
-#line 1451 "pic.y" /* yacc.c:1646  */
+#line 1451 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::south_west; }
-#line 4095 "pic.cpp" /* yacc.c:1646  */
+#line 4092 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 208:
-#line 1453 "pic.y" /* yacc.c:1646  */
+#line 1453 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::north_east; }
-#line 4101 "pic.cpp" /* yacc.c:1646  */
+#line 4098 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 209:
-#line 1455 "pic.y" /* yacc.c:1646  */
+#line 1455 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::south_east; }
-#line 4107 "pic.cpp" /* yacc.c:1646  */
+#line 4104 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 210:
-#line 1457 "pic.y" /* yacc.c:1646  */
+#line 1457 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::west; }
-#line 4113 "pic.cpp" /* yacc.c:1646  */
+#line 4110 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 211:
-#line 1459 "pic.y" /* yacc.c:1646  */
+#line 1459 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::east; }
-#line 4119 "pic.cpp" /* yacc.c:1646  */
+#line 4116 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 212:
-#line 1461 "pic.y" /* yacc.c:1646  */
+#line 1461 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::north_west; }
-#line 4125 "pic.cpp" /* yacc.c:1646  */
+#line 4122 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 213:
-#line 1463 "pic.y" /* yacc.c:1646  */
+#line 1463 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::south_west; }
-#line 4131 "pic.cpp" /* yacc.c:1646  */
+#line 4128 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 214:
-#line 1465 "pic.y" /* yacc.c:1646  */
+#line 1465 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::north_east; }
-#line 4137 "pic.cpp" /* yacc.c:1646  */
+#line 4134 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 215:
-#line 1467 "pic.y" /* yacc.c:1646  */
+#line 1467 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::south_east; }
-#line 4143 "pic.cpp" /* yacc.c:1646  */
+#line 4140 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 216:
-#line 1469 "pic.y" /* yacc.c:1646  */
+#line 1469 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::north; }
-#line 4149 "pic.cpp" /* yacc.c:1646  */
+#line 4146 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 217:
-#line 1471 "pic.y" /* yacc.c:1646  */
+#line 1471 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::south; }
-#line 4155 "pic.cpp" /* yacc.c:1646  */
+#line 4152 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 218:
-#line 1473 "pic.y" /* yacc.c:1646  */
+#line 1473 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::east; }
-#line 4161 "pic.cpp" /* yacc.c:1646  */
+#line 4158 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 219:
-#line 1475 "pic.y" /* yacc.c:1646  */
+#line 1475 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::west; }
-#line 4167 "pic.cpp" /* yacc.c:1646  */
+#line 4164 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 220:
-#line 1477 "pic.y" /* yacc.c:1646  */
+#line 1477 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::center; }
-#line 4173 "pic.cpp" /* yacc.c:1646  */
+#line 4170 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 221:
-#line 1479 "pic.y" /* yacc.c:1646  */
+#line 1479 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::start; }
-#line 4179 "pic.cpp" /* yacc.c:1646  */
+#line 4176 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 222:
-#line 1481 "pic.y" /* yacc.c:1646  */
+#line 1481 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.crn) = &object::end; }
-#line 4185 "pic.cpp" /* yacc.c:1646  */
+#line 4182 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 223:
-#line 1486 "pic.y" /* yacc.c:1646  */
+#line 1486 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[0].x); }
-#line 4191 "pic.cpp" /* yacc.c:1646  */
+#line 4188 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 224:
-#line 1488 "pic.y" /* yacc.c:1646  */
+#line 1488 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[0].x); }
-#line 4197 "pic.cpp" /* yacc.c:1646  */
+#line 4194 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 225:
-#line 1493 "pic.y" /* yacc.c:1646  */
+#line 1493 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) < (yyvsp[0].x)); }
-#line 4203 "pic.cpp" /* yacc.c:1646  */
+#line 4200 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 226:
-#line 1498 "pic.y" /* yacc.c:1646  */
+#line 1498 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if (!lookup_variable((yyvsp[0].str), & (yyval.x))) {
-                   lex_error("there is no variable `%1'", (yyvsp[0].str));
+                   lex_error("there is no variable '%1'", (yyvsp[0].str));
                    YYABORT;
                  }
-                 a_delete (yyvsp[0].str);
+                 free((yyvsp[0].str));
                }
-#line 4215 "pic.cpp" /* yacc.c:1646  */
+#line 4212 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 227:
-#line 1506 "pic.y" /* yacc.c:1646  */
+#line 1506 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[0].x); }
-#line 4221 "pic.cpp" /* yacc.c:1646  */
+#line 4218 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 228:
-#line 1508 "pic.y" /* yacc.c:1646  */
+#line 1508 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if ((yyvsp[-1].pl).obj != 0)
                    (yyval.x) = (yyvsp[-1].pl).obj->origin().x;
                  else
                    (yyval.x) = (yyvsp[-1].pl).x;
                }
-#line 4232 "pic.cpp" /* yacc.c:1646  */
+#line 4229 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 229:
-#line 1515 "pic.y" /* yacc.c:1646  */
+#line 1515 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if ((yyvsp[-1].pl).obj != 0)
                    (yyval.x) = (yyvsp[-1].pl).obj->origin().y;
                  else
                    (yyval.x) = (yyvsp[-1].pl).y;
                }
-#line 4243 "pic.cpp" /* yacc.c:1646  */
+#line 4240 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 230:
-#line 1522 "pic.y" /* yacc.c:1646  */
+#line 1522 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if ((yyvsp[-1].pl).obj != 0)
                    (yyval.x) = (yyvsp[-1].pl).obj->height();
                  else
                    (yyval.x) = 0.0;
                }
-#line 4254 "pic.cpp" /* yacc.c:1646  */
+#line 4251 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 231:
-#line 1529 "pic.y" /* yacc.c:1646  */
+#line 1529 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if ((yyvsp[-1].pl).obj != 0)
                    (yyval.x) = (yyvsp[-1].pl).obj->width();
                  else
                    (yyval.x) = 0.0;
                }
-#line 4265 "pic.cpp" /* yacc.c:1646  */
+#line 4262 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 232:
-#line 1536 "pic.y" /* yacc.c:1646  */
+#line 1536 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if ((yyvsp[-1].pl).obj != 0)
                    (yyval.x) = (yyvsp[-1].pl).obj->radius();
                  else
                    (yyval.x) = 0.0;
                }
-#line 4276 "pic.cpp" /* yacc.c:1646  */
+#line 4273 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 233:
-#line 1543 "pic.y" /* yacc.c:1646  */
+#line 1543 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[-2].x) + (yyvsp[0].x); }
-#line 4282 "pic.cpp" /* yacc.c:1646  */
+#line 4279 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 234:
-#line 1545 "pic.y" /* yacc.c:1646  */
+#line 1545 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[-2].x) - (yyvsp[0].x); }
-#line 4288 "pic.cpp" /* yacc.c:1646  */
+#line 4285 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 235:
-#line 1547 "pic.y" /* yacc.c:1646  */
+#line 1547 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[-2].x) * (yyvsp[0].x); }
-#line 4294 "pic.cpp" /* yacc.c:1646  */
+#line 4291 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 236:
-#line 1549 "pic.y" /* yacc.c:1646  */
+#line 1549 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if ((yyvsp[0].x) == 0.0) {
                    lex_error("division by zero");
@@ -4302,11 +4299,11 @@ yyreduce:
                  }
                  (yyval.x) = (yyvsp[-2].x)/(yyvsp[0].x);
                }
-#line 4306 "pic.cpp" /* yacc.c:1646  */
+#line 4303 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 237:
-#line 1557 "pic.y" /* yacc.c:1646  */
+#line 1557 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  if ((yyvsp[0].x) == 0.0) {
                    lex_error("modulus by zero");
@@ -4314,40 +4311,40 @@ yyreduce:
                  }
                  (yyval.x) = fmod((yyvsp[-2].x), (yyvsp[0].x));
                }
-#line 4318 "pic.cpp" /* yacc.c:1646  */
+#line 4315 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 238:
-#line 1565 "pic.y" /* yacc.c:1646  */
+#line 1565 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  errno = 0;
                  (yyval.x) = pow((yyvsp[-2].x), (yyvsp[0].x));
                  if (errno == EDOM) {
-                   lex_error("arguments to `^' operator out of domain");
+                   lex_error("arguments to '^' operator out of domain");
                    YYABORT;
                  }
                  if (errno == ERANGE) {
-                   lex_error("result of `^' operator out of range");
+                   lex_error("result of '^' operator out of range");
                    YYABORT;
                  }
                }
-#line 4335 "pic.cpp" /* yacc.c:1646  */
+#line 4332 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 239:
-#line 1578 "pic.y" /* yacc.c:1646  */
+#line 1578 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = -(yyvsp[0].x); }
-#line 4341 "pic.cpp" /* yacc.c:1646  */
+#line 4338 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 240:
-#line 1580 "pic.y" /* yacc.c:1646  */
+#line 1580 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[-1].x); }
-#line 4347 "pic.cpp" /* yacc.c:1646  */
+#line 4344 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 241:
-#line 1582 "pic.y" /* yacc.c:1646  */
+#line 1582 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  errno = 0;
                  (yyval.x) = sin((yyvsp[-1].x));
@@ -4356,11 +4353,11 @@ yyreduce:
                    YYABORT;
                  }
                }
-#line 4360 "pic.cpp" /* yacc.c:1646  */
+#line 4357 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 242:
-#line 1591 "pic.y" /* yacc.c:1646  */
+#line 1591 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  errno = 0;
                  (yyval.x) = cos((yyvsp[-1].x));
@@ -4369,11 +4366,11 @@ yyreduce:
                    YYABORT;
                  }
                }
-#line 4373 "pic.cpp" /* yacc.c:1646  */
+#line 4370 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 243:
-#line 1600 "pic.y" /* yacc.c:1646  */
+#line 1600 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  errno = 0;
                  (yyval.x) = atan2((yyvsp[-3].x), (yyvsp[-1].x));
@@ -4386,11 +4383,11 @@ yyreduce:
                    YYABORT;
                  }
                }
-#line 4390 "pic.cpp" /* yacc.c:1646  */
+#line 4387 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 244:
-#line 1613 "pic.y" /* yacc.c:1646  */
+#line 1613 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  errno = 0;
                  (yyval.x) = log10((yyvsp[-1].x));
@@ -4399,11 +4396,11 @@ yyreduce:
                    YYABORT;
                  }
                }
-#line 4403 "pic.cpp" /* yacc.c:1646  */
+#line 4400 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 245:
-#line 1622 "pic.y" /* yacc.c:1646  */
+#line 1622 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  errno = 0;
                  (yyval.x) = pow(10.0, (yyvsp[-1].x));
@@ -4412,11 +4409,11 @@ yyreduce:
                    YYABORT;
                  }
                }
-#line 4416 "pic.cpp" /* yacc.c:1646  */
+#line 4413 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 246:
-#line 1631 "pic.y" /* yacc.c:1646  */
+#line 1631 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  errno = 0;
                  (yyval.x) = sqrt((yyvsp[-1].x));
@@ -4425,102 +4422,102 @@ yyreduce:
                    YYABORT;
                  }
                }
-#line 4429 "pic.cpp" /* yacc.c:1646  */
+#line 4426 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 247:
-#line 1640 "pic.y" /* yacc.c:1646  */
+#line 1640 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[-3].x) > (yyvsp[-1].x) ? (yyvsp[-3].x) : (yyvsp[-1].x); }
-#line 4435 "pic.cpp" /* yacc.c:1646  */
+#line 4432 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 248:
-#line 1642 "pic.y" /* yacc.c:1646  */
+#line 1642 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[-3].x) < (yyvsp[-1].x) ? (yyvsp[-3].x) : (yyvsp[-1].x); }
-#line 4441 "pic.cpp" /* yacc.c:1646  */
+#line 4438 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 249:
-#line 1644 "pic.y" /* yacc.c:1646  */
+#line 1644 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = (yyvsp[-1].x) < 0 ? -floor(-(yyvsp[-1].x)) : floor((yyvsp[-1].x)); }
-#line 4447 "pic.cpp" /* yacc.c:1646  */
+#line 4444 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 250:
-#line 1646 "pic.y" /* yacc.c:1646  */
+#line 1646 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*(yyvsp[-1].x)); }
-#line 4453 "pic.cpp" /* yacc.c:1646  */
+#line 4450 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 251:
-#line 1648 "pic.y" /* yacc.c:1646  */
+#line 1648 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  /* return a random number in the range [0,1) */
                  /* portable, but not very random */
                  (yyval.x) = (rand() & 0x7fff) / double(0x8000);
                }
-#line 4463 "pic.cpp" /* yacc.c:1646  */
+#line 4460 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 252:
-#line 1654 "pic.y" /* yacc.c:1646  */
+#line 1654 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     {
                  (yyval.x) = 0;
                  srand((unsigned int)(yyvsp[-1].x));
                }
-#line 4472 "pic.cpp" /* yacc.c:1646  */
+#line 4469 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 253:
-#line 1659 "pic.y" /* yacc.c:1646  */
+#line 1659 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) <= (yyvsp[0].x)); }
-#line 4478 "pic.cpp" /* yacc.c:1646  */
+#line 4475 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 254:
-#line 1661 "pic.y" /* yacc.c:1646  */
+#line 1661 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) > (yyvsp[0].x)); }
-#line 4484 "pic.cpp" /* yacc.c:1646  */
+#line 4481 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 255:
-#line 1663 "pic.y" /* yacc.c:1646  */
+#line 1663 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) >= (yyvsp[0].x)); }
-#line 4490 "pic.cpp" /* yacc.c:1646  */
+#line 4487 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 256:
-#line 1665 "pic.y" /* yacc.c:1646  */
+#line 1665 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) == (yyvsp[0].x)); }
-#line 4496 "pic.cpp" /* yacc.c:1646  */
+#line 4493 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 257:
-#line 1667 "pic.y" /* yacc.c:1646  */
+#line 1667 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) != (yyvsp[0].x)); }
-#line 4502 "pic.cpp" /* yacc.c:1646  */
+#line 4499 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 258:
-#line 1669 "pic.y" /* yacc.c:1646  */
+#line 1669 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) != 0.0 && (yyvsp[0].x) != 0.0); }
-#line 4508 "pic.cpp" /* yacc.c:1646  */
+#line 4505 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 259:
-#line 1671 "pic.y" /* yacc.c:1646  */
+#line 1671 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[-2].x) != 0.0 || (yyvsp[0].x) != 0.0); }
-#line 4514 "pic.cpp" /* yacc.c:1646  */
+#line 4511 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
   case 260:
-#line 1673 "pic.y" /* yacc.c:1646  */
+#line 1673 "../src/preproc/pic/pic.ypp" /* yacc.c:1645  */
     { (yyval.x) = ((yyvsp[0].x) == 0.0); }
-#line 4520 "pic.cpp" /* yacc.c:1646  */
+#line 4517 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
     break;
 
 
-#line 4524 "pic.cpp" /* yacc.c:1646  */
+#line 4521 "src/preproc/pic/pic.cpp" /* yacc.c:1645  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -4545,14 +4542,13 @@ yyreduce:
   /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   goto yynewstate;
 
@@ -4748,7 +4744,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 1677 "pic.y" /* yacc.c:1906  */
+#line 1677 "../src/preproc/pic/pic.ypp" /* yacc.c:1903  */
 
 
 /* bison defines const to be empty unless __STDC__ is defined, which it
@@ -4861,14 +4857,14 @@ void reset(const char *nm)
       define_variable(defaults_table[i].name, val);
       return;
     }
-  lex_error("`%1' is not a predefined variable", nm);
+  lex_error("'%1' is not a predefined variable", nm);
 }
 
 void reset_all()
 {
   // We only have to explicitly reset the pre-defined variables that
-  // aren't scaled because `scale' is not scaled, and changing the
-  // value of `scale' will reset all the pre-defined variables that
+  // aren't scaled because 'scale' is not scaled, and changing the
+  // value of 'scale' will reset all the pre-defined variables that
   // are scaled.
   for (unsigned int i = 0;
        i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
index 6e8cf0fc96a5a47ce592ab818a0091829dfc7c23..3623d2a64c39612be5c9bc2e44b77b98e7ec63f1 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -50,6 +50,7 @@ extern "C" {
 #include "assert.h"
 #include "cset.h"
 #include "stringclass.h"
+#include "lf.h"
 #include "errarg.h"
 #include "error.h"
 #include "position.h"
diff --git a/src/preproc/pic/pic.hpp b/src/preproc/pic/pic.hpp
new file mode 100644 (file)
index 0000000..35243fd
--- /dev/null
@@ -0,0 +1,336 @@
+/* A Bison parser, made by GNU Bison 3.2.  */
+
+/* Bison interface for Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
+#ifndef YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED
+# define YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED
+/* Debug traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token type.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+  enum yytokentype
+  {
+    LABEL = 258,
+    VARIABLE = 259,
+    NUMBER = 260,
+    TEXT = 261,
+    COMMAND_LINE = 262,
+    DELIMITED = 263,
+    ORDINAL = 264,
+    TH = 265,
+    LEFT_ARROW_HEAD = 266,
+    RIGHT_ARROW_HEAD = 267,
+    DOUBLE_ARROW_HEAD = 268,
+    LAST = 269,
+    BOX = 270,
+    CIRCLE = 271,
+    ELLIPSE = 272,
+    ARC = 273,
+    LINE = 274,
+    ARROW = 275,
+    MOVE = 276,
+    SPLINE = 277,
+    HEIGHT = 278,
+    RADIUS = 279,
+    FIGNAME = 280,
+    WIDTH = 281,
+    DIAMETER = 282,
+    UP = 283,
+    DOWN = 284,
+    RIGHT = 285,
+    LEFT = 286,
+    FROM = 287,
+    TO = 288,
+    AT = 289,
+    WITH = 290,
+    BY = 291,
+    THEN = 292,
+    SOLID = 293,
+    DOTTED = 294,
+    DASHED = 295,
+    CHOP = 296,
+    SAME = 297,
+    INVISIBLE = 298,
+    LJUST = 299,
+    RJUST = 300,
+    ABOVE = 301,
+    BELOW = 302,
+    OF = 303,
+    THE = 304,
+    WAY = 305,
+    BETWEEN = 306,
+    AND = 307,
+    HERE = 308,
+    DOT_N = 309,
+    DOT_E = 310,
+    DOT_W = 311,
+    DOT_S = 312,
+    DOT_NE = 313,
+    DOT_SE = 314,
+    DOT_NW = 315,
+    DOT_SW = 316,
+    DOT_C = 317,
+    DOT_START = 318,
+    DOT_END = 319,
+    DOT_X = 320,
+    DOT_Y = 321,
+    DOT_HT = 322,
+    DOT_WID = 323,
+    DOT_RAD = 324,
+    SIN = 325,
+    COS = 326,
+    ATAN2 = 327,
+    LOG = 328,
+    EXP = 329,
+    SQRT = 330,
+    K_MAX = 331,
+    K_MIN = 332,
+    INT = 333,
+    RAND = 334,
+    SRAND = 335,
+    COPY = 336,
+    THRU = 337,
+    TOP = 338,
+    BOTTOM = 339,
+    UPPER = 340,
+    LOWER = 341,
+    SH = 342,
+    PRINT = 343,
+    CW = 344,
+    CCW = 345,
+    FOR = 346,
+    DO = 347,
+    IF = 348,
+    ELSE = 349,
+    ANDAND = 350,
+    OROR = 351,
+    NOTEQUAL = 352,
+    EQUALEQUAL = 353,
+    LESSEQUAL = 354,
+    GREATEREQUAL = 355,
+    LEFT_CORNER = 356,
+    RIGHT_CORNER = 357,
+    NORTH = 358,
+    SOUTH = 359,
+    EAST = 360,
+    WEST = 361,
+    CENTER = 362,
+    END = 363,
+    START = 364,
+    RESET = 365,
+    UNTIL = 366,
+    PLOT = 367,
+    THICKNESS = 368,
+    FILL = 369,
+    COLORED = 370,
+    OUTLINED = 371,
+    SHADED = 372,
+    XSLANTED = 373,
+    YSLANTED = 374,
+    ALIGNED = 375,
+    SPRINTF = 376,
+    COMMAND = 377,
+    DEFINE = 378,
+    UNDEF = 379
+  };
+#endif
+/* Tokens.  */
+#define LABEL 258
+#define VARIABLE 259
+#define NUMBER 260
+#define TEXT 261
+#define COMMAND_LINE 262
+#define DELIMITED 263
+#define ORDINAL 264
+#define TH 265
+#define LEFT_ARROW_HEAD 266
+#define RIGHT_ARROW_HEAD 267
+#define DOUBLE_ARROW_HEAD 268
+#define LAST 269
+#define BOX 270
+#define CIRCLE 271
+#define ELLIPSE 272
+#define ARC 273
+#define LINE 274
+#define ARROW 275
+#define MOVE 276
+#define SPLINE 277
+#define HEIGHT 278
+#define RADIUS 279
+#define FIGNAME 280
+#define WIDTH 281
+#define DIAMETER 282
+#define UP 283
+#define DOWN 284
+#define RIGHT 285
+#define LEFT 286
+#define FROM 287
+#define TO 288
+#define AT 289
+#define WITH 290
+#define BY 291
+#define THEN 292
+#define SOLID 293
+#define DOTTED 294
+#define DASHED 295
+#define CHOP 296
+#define SAME 297
+#define INVISIBLE 298
+#define LJUST 299
+#define RJUST 300
+#define ABOVE 301
+#define BELOW 302
+#define OF 303
+#define THE 304
+#define WAY 305
+#define BETWEEN 306
+#define AND 307
+#define HERE 308
+#define DOT_N 309
+#define DOT_E 310
+#define DOT_W 311
+#define DOT_S 312
+#define DOT_NE 313
+#define DOT_SE 314
+#define DOT_NW 315
+#define DOT_SW 316
+#define DOT_C 317
+#define DOT_START 318
+#define DOT_END 319
+#define DOT_X 320
+#define DOT_Y 321
+#define DOT_HT 322
+#define DOT_WID 323
+#define DOT_RAD 324
+#define SIN 325
+#define COS 326
+#define ATAN2 327
+#define LOG 328
+#define EXP 329
+#define SQRT 330
+#define K_MAX 331
+#define K_MIN 332
+#define INT 333
+#define RAND 334
+#define SRAND 335
+#define COPY 336
+#define THRU 337
+#define TOP 338
+#define BOTTOM 339
+#define UPPER 340
+#define LOWER 341
+#define SH 342
+#define PRINT 343
+#define CW 344
+#define CCW 345
+#define FOR 346
+#define DO 347
+#define IF 348
+#define ELSE 349
+#define ANDAND 350
+#define OROR 351
+#define NOTEQUAL 352
+#define EQUALEQUAL 353
+#define LESSEQUAL 354
+#define GREATEREQUAL 355
+#define LEFT_CORNER 356
+#define RIGHT_CORNER 357
+#define NORTH 358
+#define SOUTH 359
+#define EAST 360
+#define WEST 361
+#define CENTER 362
+#define END 363
+#define START 364
+#define RESET 365
+#define UNTIL 366
+#define PLOT 367
+#define THICKNESS 368
+#define FILL 369
+#define COLORED 370
+#define OUTLINED 371
+#define SHADED 372
+#define XSLANTED 373
+#define YSLANTED 374
+#define ALIGNED 375
+#define SPRINTF 376
+#define COMMAND 377
+#define DEFINE 378
+#define UNDEF 379
+
+/* Value type.  */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+
+union YYSTYPE
+{
+#line 65 "../src/preproc/pic/pic.ypp" /* yacc.c:1906  */
+
+       char *str;
+       int n;
+       double x;
+       struct { double x, y; } pair;
+       struct { double x; char *body; } if_data;
+       struct { char *str; const char *filename; int lineno; } lstr;
+       struct { double *v; int nv; int maxv; } dv;
+       struct { double val; int is_multiplicative; } by;
+       place pl;
+       object *obj;
+       corner crn;
+       path *pth;
+       object_spec *spec;
+       saved_state *pstate;
+       graphics_state state;
+       object_type obtype;
+
+#line 324 "src/preproc/pic/pic.hpp" /* yacc.c:1906  */
+};
+
+typedef union YYSTYPE YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+#endif /* !YY_YY_SRC_PREPROC_PIC_PIC_HPP_INCLUDED  */
diff --git a/src/preproc/pic/pic.man b/src/preproc/pic/pic.man
deleted file mode 100644 (file)
index 04ea3e0..0000000
+++ /dev/null
@@ -1,1348 +0,0 @@
-.TH @G@PIC @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@pic \- compile pictures for troff or TeX
-.
-.
-.\" --------------------------------------------------------------------
-.\" License (copying)
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Definitions
-.\" --------------------------------------------------------------------
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.
-.ie t \{\
-.  ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-.  ds lx L\h'-0.36m'\v'-0.22v'\s-2A\s0\h'-0.15m'\v'0.22v'\*(tx
-.\}
-.el \{\
-.  ds tx TeX
-.  ds lx LaTeX
-.\}
-.
-.ie \n(.g .ds ic \/
-.el       .ds ic \^
-.
-.\" The BSD man macros can't handle " in arguments to font change macros,
-.\" so use \(ts instead of ".
-.tr \(ts"\""
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B @g@pic
-[
-.B \-nvCSU
-]
-[
-.I filename
-\&.\|.\|.\&
-]
-.br
-.B @g@pic
-.B \-t
-[
-.B \-cvzCSU
-]
-[
-.I filename
-\&.\|.\|.\&
-]
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the GNU version of
-.BR pic ,
-which is part of the groff document formatting system.
-.
-.B pic
-compiles descriptions of pictures embedded within
-.B troff
-or \*(tx input files into commands that are understood by \*(tx or
-.BR troff .
-.
-Each picture starts with a line beginning with
-.B .PS
-and ends with a line beginning with
-.BR .PE .
-.
-Anything outside of
-.B .PS
-and
-.B .PE
-is passed through without change.
-.
-.
-.LP
-It is the user\[aq]s responsibility to provide appropriate definitions
-of the
-.B PS
-and
-.B PE
-macros.
-.
-When the macro package being used does not supply such definitions
-(for example, old versions of \-ms), appropriate definitions can be
-obtained with
-.BR \-mpic :
-.
-These will center each picture.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-Options that do not take arguments may be grouped behind a single
-.BR \- .
-.
-The special option
-.B \-\^\-
-can be used to mark the end of the options.
-.
-A filename of
-.B \-
-refers to the standard input.
-.
-.TP
-.B \-C
-Recognize
-.B .PS
-and
-.B .PE
-even when followed by a character other than space or newline.
-.
-.TP
-.B \-S
-Safer mode; do not execute
-.B sh
-commands.
-.
-This can be useful when operating on untrustworthy input (enabled by
-default).
-.
-.TP
-.B \-U
-Unsafe mode; revert the default option
-.BR \-S .
-.
-.TP
-.B \-n
-Don\[aq]t use the groff extensions to the troff drawing commands.
-.
-You should use this if you are using a postprocessor that doesn\[aq]t
-support these extensions.
-.
-The extensions are described in
-.BR groff_out (@MAN5EXT@).
-.
-The
-.B \-n
-option also causes
-.B pic
-not to use zero-length lines to draw dots in troff mode.
-.
-.TP
-.B \-t
-\*(tx mode.
-.
-.TP
-.B \-c
-Be more compatible with
-.BR tpic .
-.
-Implies
-.BR \-t .
-Lines beginning with
-.B \e
-are not passed through transparently.
-.
-Lines beginning with
-.B .
-are passed through with the initial
-.B .
-changed to
-.BR \e .
-.
-A line beginning with
-.B .ps
-is given special treatment:
-it takes an optional integer argument specifying
-the line thickness (pen size) in milliinches;
-a missing argument restores the previous line thickness;
-the default line thickness is 8 milliinches.
-.
-The line thickness thus specified takes effect only when a
-non-negative line thickness has not been specified by use of the
-.B thickness
-attribute or by setting the
-.B linethick
-variable.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.B \-z
-In \*(tx mode draw dots using zero-length lines.
-.
-.
-.LP
-The following options supported by other versions of
-.B pic
-are ignored:
-.
-.TP
-.B \-D
-Draw all lines using the \eD escape sequence.
-.B pic
-always does this.
-.
-.TP
-.BI \-T \ dev
-Generate output for the
-.B troff
-device
-.IR dev .
-.
-This is unnecessary because the
-.B troff
-output generated by
-.B pic
-is device-independent.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-This section describes only the differences between GNU
-.B pic
-and the original version of
-.BR pic .
-.
-Many of these differences also apply to newer versions of Unix
-.BR pic .
-.
-A complete documentation is available in the file
-.
-.
-.LP
-.RS
-.B @DOCDIR@/pic.ms
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS \*(tx mode
-.\" --------------------------------------------------------------------
-.
-\*(tx mode is enabled by the
-.B \-t
-option.
-.
-In \*(tx mode,
-.B pic
-will define a vbox called
-.B \egraph
-for each picture.
-.
-Use the
-.B figname
-command to change the name of the vbox.
-.
-You must yourself print that vbox using, for example, the command
-.
-.
-.RS
-.LP
-.B
-\ecenterline{\ebox\egraph}
-.RE
-.
-.
-.LP
-Actually, since the vbox has a height of zero (it is defined with
-\evtop) this will produce slightly more vertical space above the
-picture than below it;
-.RS
-.LP
-.B
-\ecenterline{\eraise 1em\ebox\egraph}
-.RE
-.LP
-would avoid this.
-.
-.
-.LP
-To make the vbox having a positive height and a depth of zero
-(as used e.g.\& by \*[lx]\[aq]s
-.BR \%graphics.sty ),
-define the following macro in your document:
-.RS
-.LP
-.B \edef\egpicbox#1{%
-.br
-.B "   \evbox{\eunvbox\ecsname #1\eendcsname\ekern 0pt}}"
-.RE
-.LP
-Now you can simply say
-.B \egpicbox{graph}
-instead of \ebox\egraph.
-.
-.
-.LP
-You must use a \*(tx driver that supports the
-.B tpic
-specials, version 2.
-.
-.
-.LP
-Lines beginning with
-.B \e
-are passed through transparently; a
-.B %
-is added to the end of the line to avoid unwanted spaces.
-.
-You can safely use this feature to change fonts or to
-change the value of
-.BR \ebaselineskip .
-.
-Anything else may well produce undesirable results; use at your own risk.
-.
-Lines beginning with a period are not given any special treatment.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Commands
-.\" --------------------------------------------------------------------
-.
-.TP
-\fBfor\fR \fIvariable\fR \fB=\fR \fIexpr1\fR \fBto\fR \fIexpr2\fR \
-[\fBby\fR [\fB*\fR]\,\fIexpr3\/\fR] \fBdo\fR \fIX\fR \fIbody\fR \fIX\fR
-Set
-.I variable
-to
-.IR expr1 .
-.
-While the value of
-.I variable
-is less than or equal to
-.IR expr2 ,
-do
-.I body
-and increment
-.I variable
-by
-.IR expr3 ;
-if
-.B by
-is not given, increment
-.I variable
-by 1.
-.
-If
-.I expr3
-is prefixed by
-.B *
-then
-.I variable
-will instead be multiplied by
-.IR expr3 .
-.
-The value of
-.I expr3
-can be negative for the additive case;
-.I variable
-is then tested whether it is greater than or equal to
-.IR expr2 .
-.
-For the multiplicative case,
-.I expr3
-must be greater than zero.
-.
-If the constraints aren\[aq]t met, the loop isn\[aq]t executed.
-.
-.I X
-can be any character not occurring in
-.IR body .
-.
-.TP
-\fBif\fR \fIexpr\fR \fBthen\fR \fIX\fR \fIif-true\fR \fIX\fR \
-[\fBelse\fR \fIY\fR \fIif-false\fR \fIY\fR]
-Evaluate
-.IR expr ;
-if it is non-zero then do
-.IR if-true ,
-otherwise do
-.IR if-false .
-.
-.I X
-can be any character not occurring in
-.IR if-true .
-.
-.I Y
-can be any character not occurring in
-.IR if-false .
-.
-.TP
-\fBprint\fR \fIarg\fR\|.\|.\|.
-Concatenate the arguments and print as a line on stderr.
-.
-Each
-.I arg
-must be an expression, a position, or text.
-.
-This is useful for debugging.
-.
-.TP
-\fBcommand\fR \fIarg\fR\|.\|.\|.
-Concatenate the arguments
-and pass them through as a line to troff or \*(tx.
-.
-Each
-.I arg
-must be an expression, a position, or text.
-.
-This has a similar effect to a line beginning with
-.B .\&
-or
-.BR \e ,
-but allows the values of variables to be passed through.
-.
-For example,
-.RS
-.IP
-.ft B
-.nf
-\&.PS
-x = 14
-command ".ds string x is " x "."
-\&.PE
-\e*[string]
-.ft
-.fi
-.RE
-.IP
-prints
-.RS
-.IP
-.B x is 14.
-.RE
-.
-.TP
-\fBsh\fR \fIX\fR \fIcommand\fR \fIX\fR
-Pass
-.I command
-to a shell.
-.
-.I X
-can be any character not occurring in
-.IR command .
-.
-.TP
-\fBcopy\fR \fB"\,\fIfilename\/\fB"\fR
-Include
-.I filename
-at this point in the file.
-.
-.TP
-\fBcopy\fR [\fB"\,\fIfilename\/\fB"\fR] \fBthru\fR \fIX\fR \fIbody\fR \fIX\fR \
-[\fBuntil\fR \fB"\,\fIword\*(ic\fB"\fR]
-.ns
-.TP
-\fBcopy\fR [\fB"\,\fIfilename\/\fB"\fR] \fBthru\fR \fImacro\fR \
-[\fBuntil\fR \fB"\,\fIword\*(ic\fB"\fR]
-This construct does
-.I body
-once for each line of
-.IR filename ;
-the line is split into blank-delimited words,
-and occurrences of
-.BI $ i
-in
-.IR body ,
-for
-.I i
-between 1 and 9,
-are replaced by the
-.IR i -th
-word of the line.
-.
-If
-.I filename
-is not given, lines are taken from the current input up to
-.BR .PE .
-.
-If an
-.B until
-clause is specified,
-lines will be read only until a line the first word of which is
-.IR word ;
-that line will then be discarded.
-.
-.I X
-can be any character not occurring in
-.IR body .
-.
-For example,
-.RS
-.IP
-.ft B
-.nf
-\&.PS
-copy thru % circle at ($1,$2) % until "END"
-1 2
-3 4
-5 6
-END
-box
-\&.PE
-.ft
-.fi
-.RE
-.IP
-is equivalent to
-.RS
-.IP
-.ft B
-.nf
-\&.PS
-circle at (1,2)
-circle at (3,4)
-circle at (5,6)
-box
-\&.PE
-.ft
-.fi
-.RE
-.
-.IP
-The commands to be performed for each line can also be taken
-from a macro defined earlier by giving the name of the macro
-as the argument to
-.BR thru .
-.
-.
-.LP
-.B reset
-.br
-.ns
-.TP
-\fBreset\fI variable1\/\fR[\fB,\fR]\fI variable2 .\^.\^.
-Reset pre-defined variables
-.IR variable1 ,
-.I variable2
-\&.\^.\^. to their default values.
-.
-If no arguments are given, reset all pre-defined variables to their
-default values.
-.
-Note that assigning a value to
-.B scale
-also causes all pre-defined variables that control dimensions to be
-reset to their default values times the new value of scale.
-.
-.TP
-\fBplot\fR \fIexpr\fR [\fB"\,\fItext\*(ic\fB"\fR]
-This is a text object which is constructed by using
-.I text
-as a format string for sprintf
-with an argument of
-.IR expr .
-.
-If
-.I text
-is omitted a format string of
-.B "\(ts%g\(ts"
-is used.
-.
-Attributes can be specified in the same way as for a normal text
-object.
-Be very careful that you specify an appropriate format string;
-.B pic
-does only very limited checking of the string.
-This is deprecated in favour of
-.BR sprintf .
-.
-.TP
-.IB variable\  := \ expr
-This is similar to
-.B =
-except
-.I variable
-must already be defined,
-and
-.I expr
-will be assigned to
-.I variable
-without creating a variable local to the current block.
-.
-(By contrast,
-.B =
-defines the variable in the current block if it is not already defined
-there, and then changes the value in the current block only.)
-.
-For example, the following:
-.RS
-.IP
-.ft B
-.nf
-\&.PS
-x = 3
-y = 3
-[
-  x := 5
-  y = 5
-]
-print x " " y
-\&.PE
-.ft
-.fi
-.RE
-.IP
-prints
-.RS
-.IP
-.B 5 3
-.RE
-.
-.
-.LP
-Arguments of the form
-.IP
-.I X anything X
-.LP
-are also allowed to be of the form
-.IP
-.BI {\  anything\  }
-.
-.
-.LP
-In this case
-.I anything
-can contain balanced occurrences of
-.B {
-and
-.BR } .
-Strings may contain
-.I X
-or imbalanced occurrences of
-.B {
-and
-.BR } .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Expressions
-.\" --------------------------------------------------------------------
-.
-The syntax for expressions has been significantly extended:
-.
-.
-.LP
-.IB  x\  ^\  y
-(exponentiation)
-.br
-.BI sin( x )
-.br
-.BI cos( x )
-.br
-.BI atan2( y , \ x )
-.br
-.BI log( x )
-(base 10)
-.br
-.BI exp( x )
-(base 10, i.e.\&
-.ie t 10\v'-.4m'\fIx\*(ic\fR\v'.4m')
-.el   10^\fIx\fR)
-.br
-.BI sqrt( x )
-.br
-.BI int( x )
-.br
-.B rand()
-(return a random number between 0 and 1)
-.br
-.BI rand( x )
-(return a random number between 1 and
-.IR x ;
-deprecated)
-.br
-.BI srand( x )
-(set the random number seed)
-.br
-.BI max( e1 , \ e2 )
-.br
-.BI min( e1 , \ e2 )
-.br
-.BI ! e
-.br
-\fIe1\fB && \fIe2\fR
-.br
-\fIe1\fB || \fIe2\fR
-.br
-\fIe1\fB == \fIe2\fR
-.br
-\fIe1\fB != \fIe2\fR
-.br
-\fIe1\fB >= \fIe2\fR
-.br
-\fIe1\fB > \fIe2\fR
-.br
-\fIe1\fB <= \fIe2\fR
-.br
-\fIe1\fB < \fIe2\fR
-.br
-\fB"\,\fIstr1\*(ic\fB" == "\,\fIstr2\*(ic\fB"\fR
-.br
-\fB"\,\fIstr1\*(ic\fB" != "\,\fIstr2\*(ic\fB"\fR
-.br
-.
-.
-.LP
-String comparison expressions must be parenthesised in some contexts
-to avoid ambiguity.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Other Changes
-.\" --------------------------------------------------------------------
-.
-A bare expression,
-.IR expr ,
-is acceptable as an attribute;
-it is equivalent to
-.IR dir\ expr ,
-where
-.I dir
-is the current direction.
-.
-For example
-.LP
-.RS
-.B line 2i
-.RE
-.LP
-means draw a line 2\ inches long in the current direction.
-.
-The \[oq]i\[cq] (or \[oq]I\[cq]) character is ignored; to use another
-measurement unit, set the
-.I scale
-variable to an appropriate value.
-.
-.
-.LP
-The maximum width and height of the picture are taken from the variables
-.B maxpswid
-and
-.BR maxpsht .
-.
-Initially these have values 8.5 and 11.
-.
-.
-.LP
-Scientific notation is allowed for numbers.
-For example
-.RS
-.LP
-.B
-x = 5e\-2
-.RE
-.
-.
-.LP
-Text attributes can be compounded.
-.
-For example,
-.RS
-.LP
-.B
-"foo" above ljust
-.RE
-.LP
-is valid.
-.
-.
-.LP
-There is no limit to the depth to which blocks can be examined.
-.
-For example,
-.RS
-.LP
-.B
-[A: [B: [C: box ]]] with .A.B.C.sw at 1,2
-.br
-.B
-circle at last [\^].A.B.C
-.RE
-.LP
-is acceptable.
-.
-.
-.LP
-Arcs now have compass points determined by the circle of which the arc
-is a part.
-.
-.
-.LP
-Circles, ellipses, and arcs can be dotted or dashed.
-.
-In \*(tx mode splines can be dotted or dashed also.
-.
-.
-.LP
-Boxes can have rounded corners.
-.
-The
-.B rad
-attribute specifies the radius of the quarter-circles at each corner.
-If no
-.B rad
-or
-.B diam
-attribute is given, a radius of
-.B boxrad
-is used.
-.
-Initially,
-.B boxrad
-has a value of\ 0.
-.
-A box with rounded corners can be dotted or dashed.
-.
-.
-.LP
-Boxes can have slanted sides.
-.
-This effectively changes the shape of a box from a rectangle to an
-arbitrary parallelogram.
-.
-The
-.B xslanted
-and
-.B yslanted
-attributes specify the x and y\~offset of the box\[aq]s upper right
-corner from its default position.
-.
-.
-.LP
-The
-.B .PS
-line can have a second argument specifying a maximum height for
-the picture.
-.
-If the width of zero is specified the width will be ignored in computing
-the scaling factor for the picture.
-.
-Note that GNU
-.B pic
-will always scale a picture by the same amount vertically as well as
-horizontally.
-.
-This is different from the
-.SM DWB
-2.0
-.B pic
-which may scale a picture by a different amount vertically than
-horizontally if a height is specified.
-.
-.
-.LP
-Each text object has an invisible box associated with it.
-.
-The compass points of a text object are determined by this box.
-.
-The implicit motion associated with the object is also determined
-by this box.
-.
-The dimensions of this box are taken from the width and height attributes;
-if the width attribute is not supplied then the width will be taken to be
-.BR textwid ;
-if the height attribute is not supplied then the height will be taken to be
-the number of text strings associated with the object
-times
-.BR textht .
-.
-Initially
-.B textwid
-and
-.B textht
-have a value of 0.
-.
-.
-.LP
-In (almost all) places where a quoted text string can be used,
-an expression of the form
-.IP
-.BI sprintf(\(ts format \(ts,\  arg ,\fR.\|.\|.\fB)
-.LP
-can also be used;
-this will produce the arguments formatted according to
-.IR format ,
-which should be a string as described in
-.BR printf (3)
-appropriate for the number of arguments supplied.
-.
-.
-.LP
-The thickness of the lines used to draw objects is controlled by the
-.B linethick
-variable.
-.
-This gives the thickness of lines in points.
-.
-A negative value means use the default thickness:
-in \*(tx output mode, this means use a thickness of 8 milliinches;
-in \*(tx output mode with the
-.B \-c
-option, this means use the line thickness specified by
-.B .ps
-lines;
-in troff output mode, this means use a thickness proportional
-to the pointsize.
-.
-A zero value means draw the thinnest possible line supported by
-the output device.
-.
-Initially it has a value of \-1.
-.
-There is also a
-.BR thick [ ness ]
-attribute.
-.
-For example,
-.RS
-.LP
-.B circle thickness 1.5
-.RE
-.LP
-would draw a circle using a line with a thickness of 1.5 points.
-.
-The thickness of lines is not affected by the
-value of the
-.B scale
-variable, nor by the width or height given in the
-.B .PS
-line.
-.
-.
-.LP
-Boxes (including boxes with rounded corners or slanted sides),
-circles and ellipses can be filled by giving them an attribute of
-.BR fill [ ed ].
-.
-This takes an optional argument of an expression with a value between
-0 and 1; 0 will fill it with white, 1 with black, values in between
-with a proportionally gray shade.
-.
-A value greater than 1 can also be used:
-this means fill with the
-shade of gray that is currently being used for text and lines.
-.
-Normally this will be black, but output devices may provide
-a mechanism for changing this.
-.
-Without an argument, then the value of the variable
-.B fillval
-will be used.
-.
-Initially this has a value of 0.5.
-.
-The invisible attribute does not affect the filling of objects.
-.
-Any text associated with a filled object will be added after the
-object has been filled, so that the text will not be obscured
-by the filling.
-.
-.
-.LP
-Three additional modifiers are available to specify colored objects:
-.BR outline [ d ]
-sets the color of the outline,
-.B shaded
-the fill color, and
-.B colo\fR[\fPu\fR]\fPr\fR[\fPed\fR]
-sets both.
-.
-All three keywords expect a suffix specifying the color, for example
-.RS
-.LP
-.B circle shaded """green""" outline """black"""
-.RE
-.
-.
-.LP
-Currently, color support isn\[aq]t available in \*(tx mode.
-.
-Predefined color names for
-.B groff
-are in the device macro files, for example
-.BR ps.tmac ;
-additional colors can be defined with the
-.B .defcolor
-request (see the manual page of
-.BR @g@troff (@MAN1EXT@)
-for more details).
-.
-.
-.LP
-To change the name of the vbox in \*(tx mode, set the pseudo-variable
-.B figname
-(which is actually a specially parsed command) within a picture.
-.
-Example:
-.RS
-.LP
-.B .PS
-.br
-.B figname = foobar;
-.br
-.B ...
-.br
-.B .PE
-.RE
-.
-.
-.LP
-The picture is then available in the box
-.BR \efoobar .
-.
-.
-.LP
-.B pic
-assumes that at the beginning of a picture both glyph and fill color are
-set to the default value.
-.
-.
-.LP
-Arrow heads will be drawn as solid triangles if the variable
-.B arrowhead
-is non-zero and either \*(tx mode is enabled or the
-.B \-n
-option has not been given.
-.
-Initially
-.B arrowhead
-has a value of\ 1.
-.
-Note that solid arrow heads are always filled with the current outline
-color.
-.
-.
-.LP
-The troff output of
-.B pic
-is device-independent.
-.
-The
-.B \-T
-option is therefore redundant.
-.
-All numbers are taken to be in inches; numbers are never interpreted
-to be in troff machine units.
-.
-.
-.LP
-Objects can have an
-.B aligned
-attribute.
-.
-This will only work if the postprocessor is
-.BR grops ,
-or
-.BR gropdf .
-.
-Any text associated with an object having the
-.B aligned
-attribute will be rotated about the center of the object
-so that it is aligned in the direction from the start point
-to the end point of the object.
-.
-Note that this attribute will have no effect for objects whose start
-and end points are coincident.
-.
-.
-.LP
-In places where
-.IB n th
-is allowed
-.BI \[oq] expr \[cq]th
-is also allowed.
-.
-Note that
-.B \[cq]th
-is a single token: no space is allowed between the
-.B \[cq]
-and the
-.BR th .
-.
-For example,
-.IP
-.ft B
-.nf
-for i = 1 to 4 do {
-   line from \[oq]i\[cq]th box.nw to \[oq]i+1\[cq]th box.se
-}
-.ft
-.fi
-.
-.
-.\" --------------------------------------------------------------------
-.SH CONVERSION
-.\" --------------------------------------------------------------------
-.
-To obtain a stand-alone picture from a
-.B pic
-file, enclose your
-.B pic
-code with
-.B .PS
-and
-.B .PE
-requests;
-.B roff
-configuration commands may be added at the beginning of the file, but no
-.B roff
-text.
-.
-.
-.LP
-It is necessary to feed this file into
-.B groff
-without adding any page information, so you must check which
-.B .PS
-and
-.B .PE
-requests are actually called.
-.
-For example, the mm macro package adds a page number, which is very
-annoying.
-.
-At the moment, calling standard
-.B groff
-without any macro package works.
-.
-Alternatively, you can define your own requests, e.g.\& to do nothing:
-.LP
-.RS
-.nf
-.ft B
-\&.de PS
-\&..
-\&.de PE
-\&..
-.ft
-.fi
-.RE
-.
-.
-.LP
-.B groff
-itself does not provide direct conversion into other graphics file
-formats.
-.
-But there are lots of possibilities if you first transform your
-picture into PostScript\*R format using the
-.B groff
-option
-.BR \-Tps .
-.
-Since this
-.IR ps -file
-lacks BoundingBox information it is not very useful by itself, but it
-may be fed into other conversion programs, usually named
-.BI ps2 other
-or
-.BI psto other
-or the like.
-.
-Moreover, the PostScript interpreter
-.B ghostscript
-.RB ( gs )
-has built-in graphics conversion devices that are called with the option
-.LP
-.RS
-.BI "gs \-sDEVICE=" <devname>
-.RE
-.LP
-Call
-.LP
-.RS
-.B gs \-\-help
-.RE
-.LP
-for a list of the available devices.
-.
-.
-.LP
-An alternative may be to use the
-.B \-Tpdf
-option to convert your picture directly into
-.B PDF
-format.
-.
-The MediaBox of the file produced can be controlled by passing a
-.B \-P\-p
-papersize to groff.
-.
-.
-.LP
-As the Encapsulated PostScript File Format
-.B EPS
-is getting more and more important, and the conversion wasn\[aq]t
-regarded trivial in the past you might be interested to know that
-there is a conversion tool named
-.B ps2eps
-which does the right job.
-.
-It is much better than the tool
-.B ps2epsi
-packaged with
-.BR gs .
-.
-.
-.LP
-For bitmapped graphic formats, you should use
-.BR pstopnm ;
-the resulting (intermediate)
-.B PNM
-file can be then converted to virtually any graphics format using the
-tools of the
-.B netpbm
-package .
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'\fB@MACRODIR@/pic.tmac'u+3n
-.B
-@MACRODIR@/pic.tmac
-Example definitions of the
-.B PS
-and
-.B PE
-macros.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR @g@troff (@MAN1EXT@),
-.BR groff_out (@MAN5EXT@),
-.BR tex (1),
-.BR gs (1),
-.BR ps2eps (1),
-.BR pstopnm (1),
-.BR ps2epsi (1),
-.BR pnm (5)
-.
-.
-.LP
-Eric S.\& Raymond,
-.I Making Pictures With GNU PIC.
-.br
-@DOCDIR@/pic.ps (this file, together with its source file, pic.ms, is part
-of the groff documentation)
-.
-.
-.LP
-Tpic: Pic for \*(tx
-.LP
-Brian W.\& Kernighan,
-.I PIC \(em A Graphics Language for Typesetting (User Manual).
-AT&T Bell Laboratories, Computing Science Technical Report No.\ 116
-.br
-<http://cm.bell-labs.com/cm/cs/cstr/116.ps.gz>
-(revised May, 1991).
-.
-.
-.LP
-.B ps2eps
-is available from CTAN mirrors, e.g.\&
-.br
-<ftp://ftp.dante.de/tex-archive/support/ps2eps/>
-.
-.
-.LP
-W.\& Richard Stevens,
-.I Turning PIC Into HTML
-.br
-<http://www.kohala.com/start/troff/pic2html.html>
-.
-.
-.LP
-W.\& Richard Stevens,
-.I Examples of picMacros
-.br
-<http://www.kohala.com/start/troff/pic.examples.ps>
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-Input characters that are invalid for
-.B groff
-(i.e., those with
-.SM ASCII
-code 0, or 013 octal, or between 015 and 037 octal, or between 0200 and 0237
-octal) are rejected even in \*(tx mode.
-.
-.
-.LP
-The interpretation of
-.B fillval
-is incompatible with the pic in 10th edition Unix,
-which interprets 0 as black and 1 as white.
-.
-.
-.LP
-PostScript\*R is a registered trademark of Adobe Systems Incorporation.
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/src/preproc/pic/pic.y b/src/preproc/pic/pic.y
deleted file mode 100644 (file)
index cf3a0d2..0000000
+++ /dev/null
@@ -1,1933 +0,0 @@
-/* Copyright (C) 1989-2014  Free Software Foundation, Inc.
-     Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff 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 3 of the License, or
-(at your option) any later version.
-
-groff 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, see <http://www.gnu.org/licenses/>. */
-
-%{
-#include "pic.h"
-#include "ptable.h"
-#include "object.h"
-
-extern int delim_flag;
-extern void copy_rest_thru(const char *, const char *);
-extern void copy_file_thru(const char *, const char *, const char *);
-extern void push_body(const char *);
-extern void do_for(char *var, double from, double to,
-                  int by_is_multiplicative, double by, char *body);
-extern void do_lookahead();
-
-/* Maximum number of characters produced by printf("%g") */
-#define GDIGITS 14
-
-int yylex();
-void yyerror(const char *);
-
-void reset(const char *nm);
-void reset_all();
-
-place *lookup_label(const char *);
-void define_label(const char *label, const place *pl);
-
-direction current_direction;
-position current_position;
-
-implement_ptable(place)
-
-PTABLE(place) top_table;
-
-PTABLE(place) *current_table = &top_table;
-saved_state *current_saved_state = 0;
-
-object_list olist;
-
-const char *ordinal_postfix(int n);
-const char *object_type_name(object_type type);
-char *format_number(const char *form, double n);
-char *do_sprintf(const char *form, const double *v, int nv);
-
-%}
-
-%expect 2
-
-%union {
-       char *str;
-       int n;
-       double x;
-       struct { double x, y; } pair;
-       struct { double x; char *body; } if_data;
-       struct { char *str; const char *filename; int lineno; } lstr;
-       struct { double *v; int nv; int maxv; } dv;
-       struct { double val; int is_multiplicative; } by;
-       place pl;
-       object *obj;
-       corner crn;
-       path *pth;
-       object_spec *spec;
-       saved_state *pstate;
-       graphics_state state;
-       object_type obtype;
-}
-
-%token <str> LABEL
-%token <str> VARIABLE
-%token <x> NUMBER
-%token <lstr> TEXT
-%token <lstr> COMMAND_LINE
-%token <str> DELIMITED
-%token <n> ORDINAL
-%token TH
-%token LEFT_ARROW_HEAD
-%token RIGHT_ARROW_HEAD
-%token DOUBLE_ARROW_HEAD
-%token LAST
-%token BOX
-%token CIRCLE
-%token ELLIPSE
-%token ARC
-%token LINE
-%token ARROW
-%token MOVE
-%token SPLINE
-%token HEIGHT
-%token RADIUS
-%token FIGNAME
-%token WIDTH
-%token DIAMETER
-%token UP
-%token DOWN
-%token RIGHT
-%token LEFT
-%token FROM
-%token TO
-%token AT
-%token WITH
-%token BY
-%token THEN
-%token SOLID
-%token DOTTED
-%token DASHED
-%token CHOP
-%token SAME
-%token INVISIBLE
-%token LJUST
-%token RJUST
-%token ABOVE
-%token BELOW
-%token OF
-%token THE
-%token WAY
-%token BETWEEN
-%token AND
-%token HERE
-%token DOT_N
-%token DOT_E   
-%token DOT_W
-%token DOT_S
-%token DOT_NE
-%token DOT_SE
-%token DOT_NW
-%token DOT_SW
-%token DOT_C
-%token DOT_START
-%token DOT_END
-%token DOT_X
-%token DOT_Y
-%token DOT_HT
-%token DOT_WID
-%token DOT_RAD
-%token SIN
-%token COS
-%token ATAN2
-%token LOG
-%token EXP
-%token SQRT
-%token K_MAX
-%token K_MIN
-%token INT
-%token RAND
-%token SRAND
-%token COPY
-%token THRU
-%token TOP
-%token BOTTOM
-%token UPPER
-%token LOWER
-%token SH
-%token PRINT
-%token CW
-%token CCW
-%token FOR
-%token DO
-%token IF
-%token ELSE
-%token ANDAND
-%token OROR
-%token NOTEQUAL
-%token EQUALEQUAL
-%token LESSEQUAL
-%token GREATEREQUAL
-%token LEFT_CORNER
-%token RIGHT_CORNER
-%token NORTH
-%token SOUTH
-%token EAST
-%token WEST
-%token CENTER
-%token END
-%token START
-%token RESET
-%token UNTIL
-%token PLOT
-%token THICKNESS
-%token FILL
-%token COLORED
-%token OUTLINED
-%token SHADED
-%token XSLANTED
-%token YSLANTED
-%token ALIGNED
-%token SPRINTF
-%token COMMAND
-
-%token DEFINE
-%token UNDEF
-
-%left '.'
-
-/* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
-%left PLOT
-%left TEXT SPRINTF
-
-/* give text adjustments higher precedence than TEXT, so that
-box "foo" above ljust == box ("foo" above ljust)
-*/
-
-%left LJUST RJUST ABOVE BELOW
-
-%left LEFT RIGHT
-/* Give attributes that take an optional expression a higher
-precedence than left and right, so that eg `line chop left'
-parses properly. */
-%left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
-%left XSLANTED YSLANTED
-%left LABEL
-
-%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST 
-%left ORDINAL HERE '`'
-
-%left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '['
-
-/* these need to be lower than '-' */
-%left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS
-
-/* these must have higher precedence than CHOP so that `label %prec CHOP'
-works */
-%left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C
-%left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER
-%left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END
-
-%left ','
-%left OROR
-%left ANDAND
-%left EQUALEQUAL NOTEQUAL
-%left '<' '>' LESSEQUAL GREATEREQUAL
-
-%left BETWEEN OF
-%left AND
-
-%left '+' '-'
-%left '*' '/' '%'
-%right '!'
-%right '^'
-
-%type <x> expr expr_lower_than expr_not_lower_than any_expr text_expr
-%type <by> optional_by
-%type <pair> expr_pair position_not_place
-%type <if_data> simple_if
-%type <obj> nth_primitive
-%type <crn> corner
-%type <pth> path label_path relative_path
-%type <pl> place label element element_list middle_element_list
-%type <spec> object_spec
-%type <pair> position
-%type <obtype> object_type
-%type <n> optional_ordinal_last ordinal
-%type <str> macro_name until
-%type <dv> sprintf_args
-%type <lstr> text print_args print_arg
-
-%%
-
-top:
-       optional_separator
-       | element_list
-               {
-                 if (olist.head)
-                   print_picture(olist.head);
-               }
-       ;
-
-
-element_list:
-       optional_separator middle_element_list optional_separator
-               { $$ = $2; }
-       ;
-
-middle_element_list:
-       element
-               { $$ = $1; }
-       | middle_element_list separator element
-               { $$ = $1; }
-       ;
-
-optional_separator:
-       /* empty */
-       | separator
-       ;
-
-separator:
-       ';'
-       | separator ';'
-       ;
-
-placeless_element:
-       FIGNAME '=' macro_name
-               {
-                 a_delete graphname;
-                 graphname = new char[strlen($3) + 1];
-                 strcpy(graphname, $3);
-                 a_delete $3;
-               }
-       |
-       VARIABLE '=' any_expr
-               {
-                 define_variable($1, $3);
-                 a_delete $1;
-               }
-       | VARIABLE ':' '=' any_expr
-               {
-                 place *p = lookup_label($1);
-                 if (!p) {
-                   lex_error("variable `%1' not defined", $1);
-                   YYABORT;
-                 }
-                 p->obj = 0;
-                 p->x = $4;
-                 p->y = 0.0;
-                 a_delete $1;
-               }
-       | UP
-               { current_direction = UP_DIRECTION; }
-       | DOWN
-               { current_direction = DOWN_DIRECTION; }
-       | LEFT
-               { current_direction = LEFT_DIRECTION; }
-       | RIGHT
-               { current_direction = RIGHT_DIRECTION; }
-       | COMMAND_LINE
-               {
-                 olist.append(make_command_object($1.str, $1.filename,
-                                                  $1.lineno));
-               }
-       | COMMAND print_args
-               {
-                 olist.append(make_command_object($2.str, $2.filename,
-                                                  $2.lineno));
-               }
-       | PRINT print_args
-               {
-                 fprintf(stderr, "%s\n", $2.str);
-                 a_delete $2.str;
-                 fflush(stderr);
-               }
-       | SH
-               { delim_flag = 1; }
-         DELIMITED
-               {
-                 delim_flag = 0;
-                 if (safer_flag)
-                   lex_error("unsafe to run command `%1'", $3);
-                 else
-                   system($3);
-                 a_delete $3;
-               }
-       | COPY TEXT
-               {
-                 if (yychar < 0)
-                   do_lookahead();
-                 do_copy($2.str);
-                 // do not delete the filename
-               }
-       | COPY TEXT THRU
-               { delim_flag = 2; }
-         DELIMITED 
-               { delim_flag = 0; }
-         until
-               {
-                 if (yychar < 0)
-                   do_lookahead();
-                 copy_file_thru($2.str, $5, $7);
-                 // do not delete the filename
-                 a_delete $5;
-                 a_delete $7;
-               }
-       | COPY THRU
-               { delim_flag = 2; }
-         DELIMITED
-               { delim_flag = 0; }
-         until
-               {
-                 if (yychar < 0)
-                   do_lookahead();
-                 copy_rest_thru($4, $6);
-                 a_delete $4;
-                 a_delete $6;
-               }
-       | FOR VARIABLE '=' expr TO expr optional_by DO
-               { delim_flag = 1; }
-         DELIMITED
-               {
-                 delim_flag = 0;
-                 if (yychar < 0)
-                   do_lookahead();
-                 do_for($2, $4, $6, $7.is_multiplicative, $7.val, $10); 
-               }
-       | simple_if
-               {
-                 if (yychar < 0)
-                   do_lookahead();
-                 if ($1.x != 0.0)
-                   push_body($1.body);
-                 a_delete $1.body;
-               }
-       | simple_if ELSE
-               { delim_flag = 1; }
-         DELIMITED
-               {
-                 delim_flag = 0;
-                 if (yychar < 0)
-                   do_lookahead();
-                 if ($1.x != 0.0)
-                   push_body($1.body);
-                 else
-                   push_body($4);
-                 a_delete $1.body;
-                 a_delete $4;
-               }
-       | reset_variables
-       | RESET
-               { define_variable("scale", 1.0); }
-       ;
-
-macro_name:
-       VARIABLE
-       | LABEL
-       ;
-
-reset_variables:
-       RESET VARIABLE
-               {
-                 reset($2);
-                 a_delete $2;
-               }
-       | reset_variables VARIABLE
-               {
-                 reset($2);
-                 a_delete $2;
-               }
-       | reset_variables ',' VARIABLE
-               {
-                 reset($3);
-                 a_delete $3;
-               }
-       ;
-
-print_args:
-       print_arg
-               { $$ = $1; }
-       | print_args print_arg
-               {
-                 $$.str = new char[strlen($1.str) + strlen($2.str) + 1];
-                 strcpy($$.str, $1.str);
-                 strcat($$.str, $2.str);
-                 a_delete $1.str;
-                 a_delete $2.str;
-                 if ($1.filename) {
-                   $$.filename = $1.filename;
-                   $$.lineno = $1.lineno;
-                 }
-                 else if ($2.filename) {
-                   $$.filename = $2.filename;
-                   $$.lineno = $2.lineno;
-                 }
-               }
-       ;
-
-print_arg:
-       expr                                                    %prec ','
-               {
-                 $$.str = new char[GDIGITS + 1];
-                 sprintf($$.str, "%g", $1);
-                 $$.filename = 0;
-                 $$.lineno = 0;
-               }
-       | text
-               { $$ = $1; }
-       | position                                              %prec ','
-               {
-                 $$.str = new char[GDIGITS + 2 + GDIGITS + 1];
-                 sprintf($$.str, "%g, %g", $1.x, $1.y);
-                 $$.filename = 0;
-                 $$.lineno = 0;
-               }
-       ;
-
-simple_if:
-       IF any_expr THEN
-               { delim_flag = 1; }
-       DELIMITED
-               {
-                 delim_flag = 0;
-                 $$.x = $2;
-                 $$.body = $5;
-               }
-       ;
-
-until:
-       /* empty */
-               { $$ = 0; }
-       | UNTIL TEXT
-               { $$ = $2.str; }
-       ;
-       
-any_expr:
-       expr
-               { $$ = $1; }
-       | text_expr
-               { $$ = $1; }
-       ;
-       
-text_expr:
-       text EQUALEQUAL text
-               {
-                 $$ = strcmp($1.str, $3.str) == 0;
-                 a_delete $1.str;
-                 a_delete $3.str;
-               }
-       | text NOTEQUAL text
-               {
-                 $$ = strcmp($1.str, $3.str) != 0;
-                 a_delete $1.str;
-                 a_delete $3.str;
-               }
-       | text_expr ANDAND text_expr
-               { $$ = ($1 != 0.0 && $3 != 0.0); }
-       | text_expr ANDAND expr
-               { $$ = ($1 != 0.0 && $3 != 0.0); }
-       | expr ANDAND text_expr
-               { $$ = ($1 != 0.0 && $3 != 0.0); }
-       | text_expr OROR text_expr
-               { $$ = ($1 != 0.0 || $3 != 0.0); }
-       | text_expr OROR expr
-               { $$ = ($1 != 0.0 || $3 != 0.0); }
-       | expr OROR text_expr
-               { $$ = ($1 != 0.0 || $3 != 0.0); }
-       | '!' text_expr
-               { $$ = ($2 == 0.0); }
-       ;
-
-
-optional_by:
-       /* empty */
-               {
-                 $$.val = 1.0;
-                 $$.is_multiplicative = 0;
-               }
-       | BY expr
-               {
-                 $$.val = $2;
-                 $$.is_multiplicative = 0;
-               }
-       | BY '*' expr
-               {
-                 $$.val = $3;
-                 $$.is_multiplicative = 1;
-               }
-       ;
-
-element:
-       object_spec
-               {
-                 $$.obj = $1->make_object(&current_position,
-                                          &current_direction);
-                 if ($$.obj == 0)
-                   YYABORT;
-                 delete $1;
-                 if ($$.obj)
-                   olist.append($$.obj);
-                 else {
-                   $$.x = current_position.x;
-                   $$.y = current_position.y;
-                 }
-               }
-       | LABEL ':' optional_separator element
-               {
-                 $$ = $4;
-                 define_label($1, & $$);
-                 a_delete $1;
-               }
-       | LABEL ':' optional_separator position_not_place
-               {
-                 $$.obj = 0;
-                 $$.x = $4.x;
-                 $$.y = $4.y;
-                 define_label($1, & $$);
-                 a_delete $1;
-               }
-       | LABEL ':' optional_separator place
-               {
-                 $$ = $4;
-                 define_label($1, & $$);
-                 a_delete $1;
-               }
-       | '{'
-               {
-                 $<state>$.x = current_position.x;
-                 $<state>$.y = current_position.y;
-                 $<state>$.dir = current_direction;
-               }
-         element_list '}'
-               {
-                 current_position.x = $<state>2.x;
-                 current_position.y = $<state>2.y;
-                 current_direction = $<state>2.dir;
-               }
-         optional_element
-               {
-                 $$ = $3;
-               }
-       | placeless_element
-               {
-                 $$.obj = 0;
-                 $$.x = current_position.x;
-                 $$.y = current_position.y;
-               }
-       ;
-
-optional_element:
-       /* empty */
-               {}
-       | element
-               {}
-       ;
-
-object_spec:
-       BOX
-               { $$ = new object_spec(BOX_OBJECT); }
-       | CIRCLE
-               { $$ = new object_spec(CIRCLE_OBJECT); }
-       | ELLIPSE
-               { $$ = new object_spec(ELLIPSE_OBJECT); }
-       | ARC
-               {
-                 $$ = new object_spec(ARC_OBJECT);
-                 $$->dir = current_direction;
-               }
-       | LINE
-               {
-                 $$ = new object_spec(LINE_OBJECT);
-                 lookup_variable("lineht", & $$->segment_height);
-                 lookup_variable("linewid", & $$->segment_width);
-                 $$->dir = current_direction;
-               }
-       | ARROW
-               {
-                 $$ = new object_spec(ARROW_OBJECT);
-                 lookup_variable("lineht", & $$->segment_height);
-                 lookup_variable("linewid", & $$->segment_width);
-                 $$->dir = current_direction;
-               }
-       | MOVE
-               {
-                 $$ = new object_spec(MOVE_OBJECT);
-                 lookup_variable("moveht", & $$->segment_height);
-                 lookup_variable("movewid", & $$->segment_width);
-                 $$->dir = current_direction;
-               }
-       | SPLINE
-               {
-                 $$ = new object_spec(SPLINE_OBJECT);
-                 lookup_variable("lineht", & $$->segment_height);
-                 lookup_variable("linewid", & $$->segment_width);
-                 $$->dir = current_direction;
-               }
-       | text                                                  %prec TEXT
-               {
-                 $$ = new object_spec(TEXT_OBJECT);
-                 $$->text = new text_item($1.str, $1.filename, $1.lineno);
-               }
-       | PLOT expr
-               {
-                 $$ = new object_spec(TEXT_OBJECT);
-                 $$->text = new text_item(format_number(0, $2), 0, -1);
-               }
-       | PLOT expr text
-               {
-                 $$ = new object_spec(TEXT_OBJECT);
-                 $$->text = new text_item(format_number($3.str, $2),
-                                          $3.filename, $3.lineno);
-                 a_delete $3.str;
-               }
-       | '[' 
-               {
-                 saved_state *p = new saved_state;
-                 $<pstate>$ = p;
-                 p->x = current_position.x;
-                 p->y = current_position.y;
-                 p->dir = current_direction;
-                 p->tbl = current_table;
-                 p->prev = current_saved_state;
-                 current_position.x = 0.0;
-                 current_position.y = 0.0;
-                 current_table = new PTABLE(place);
-                 current_saved_state = p;
-                 olist.append(make_mark_object());
-               }
-         element_list ']'
-               {
-                 current_position.x = $<pstate>2->x;
-                 current_position.y = $<pstate>2->y;
-                 current_direction = $<pstate>2->dir;
-                 $$ = new object_spec(BLOCK_OBJECT);
-                 olist.wrap_up_block(& $$->oblist);
-                 $$->tbl = current_table;
-                 current_table = $<pstate>2->tbl;
-                 current_saved_state = $<pstate>2->prev;
-                 delete $<pstate>2;
-               }
-       | object_spec HEIGHT expr
-               {
-                 $$ = $1;
-                 $$->height = $3;
-                 $$->flags |= HAS_HEIGHT;
-               }
-       | object_spec RADIUS expr
-               {
-                 $$ = $1;
-                 $$->radius = $3;
-                 $$->flags |= HAS_RADIUS;
-               }
-       | object_spec WIDTH expr
-               {
-                 $$ = $1;
-                 $$->width = $3;
-                 $$->flags |= HAS_WIDTH;
-               }
-       | object_spec DIAMETER expr
-               {
-                 $$ = $1;
-                 $$->radius = $3/2.0;
-                 $$->flags |= HAS_RADIUS;
-               }
-       | object_spec expr                                      %prec HEIGHT
-               {
-                 $$ = $1;
-                 $$->flags |= HAS_SEGMENT;
-                 switch ($$->dir) {
-                 case UP_DIRECTION:
-                   $$->segment_pos.y += $2;
-                   break;
-                 case DOWN_DIRECTION:
-                   $$->segment_pos.y -= $2;
-                   break;
-                 case RIGHT_DIRECTION:
-                   $$->segment_pos.x += $2;
-                   break;
-                 case LEFT_DIRECTION:
-                   $$->segment_pos.x -= $2;
-                   break;
-                 }
-               }
-       | object_spec UP
-               {
-                 $$ = $1;
-                 $$->dir = UP_DIRECTION;
-                 $$->flags |= HAS_SEGMENT;
-                 $$->segment_pos.y += $$->segment_height;
-               }
-       | object_spec UP expr
-               {
-                 $$ = $1;
-                 $$->dir = UP_DIRECTION;
-                 $$->flags |= HAS_SEGMENT;
-                 $$->segment_pos.y += $3;
-               }
-       | object_spec DOWN
-               {
-                 $$ = $1;
-                 $$->dir = DOWN_DIRECTION;
-                 $$->flags |= HAS_SEGMENT;
-                 $$->segment_pos.y -= $$->segment_height;
-               }
-       | object_spec DOWN expr
-               {
-                 $$ = $1;
-                 $$->dir = DOWN_DIRECTION;
-                 $$->flags |= HAS_SEGMENT;
-                 $$->segment_pos.y -= $3;
-               }
-       | object_spec RIGHT
-               {
-                 $$ = $1;
-                 $$->dir = RIGHT_DIRECTION;
-                 $$->flags |= HAS_SEGMENT;
-                 $$->segment_pos.x += $$->segment_width;
-               }
-       | object_spec RIGHT expr
-               {
-                 $$ = $1;
-                 $$->dir = RIGHT_DIRECTION;
-                 $$->flags |= HAS_SEGMENT;
-                 $$->segment_pos.x += $3;
-               }
-       | object_spec LEFT
-               {
-                 $$ = $1;
-                 $$->dir = LEFT_DIRECTION;
-                 $$->flags |= HAS_SEGMENT;
-                 $$->segment_pos.x -= $$->segment_width;
-               }
-       | object_spec LEFT expr
-               {
-                 $$ = $1;
-                 $$->dir = LEFT_DIRECTION;
-                 $$->flags |= HAS_SEGMENT;
-                 $$->segment_pos.x -= $3;
-               }
-       | object_spec FROM position
-               {
-                 $$ = $1;
-                 $$->flags |= HAS_FROM;
-                 $$->from.x = $3.x;
-                 $$->from.y = $3.y;
-               }
-       | object_spec TO position
-               {
-                 $$ = $1;
-                 if ($$->flags & HAS_SEGMENT)
-                   $$->segment_list = new segment($$->segment_pos,
-                                                  $$->segment_is_absolute,
-                                                  $$->segment_list);
-                 $$->flags |= HAS_SEGMENT;
-                 $$->segment_pos.x = $3.x;
-                 $$->segment_pos.y = $3.y;
-                 $$->segment_is_absolute = 1;
-                 $$->flags |= HAS_TO;
-                 $$->to.x = $3.x;
-                 $$->to.y = $3.y;
-               }
-       | object_spec AT position
-               {
-                 $$ = $1;
-                 $$->flags |= HAS_AT;
-                 $$->at.x = $3.x;
-                 $$->at.y = $3.y;
-                 if ($$->type != ARC_OBJECT) {
-                   $$->flags |= HAS_FROM;
-                   $$->from.x = $3.x;
-                   $$->from.y = $3.y;
-                 }
-               }
-       | object_spec WITH path
-               {
-                 $$ = $1;
-                 $$->flags |= HAS_WITH;
-                 $$->with = $3;
-               }
-       | object_spec WITH position                             %prec ','
-               {
-                 $$ = $1;
-                 $$->flags |= HAS_WITH;
-                 position pos;
-                 pos.x = $3.x;
-                 pos.y = $3.y;
-                 $$->with = new path(pos);
-               }
-       | object_spec BY expr_pair
-               {
-                 $$ = $1;
-                 $$->flags |= HAS_SEGMENT;
-                 $$->segment_pos.x += $3.x;
-                 $$->segment_pos.y += $3.y;
-               }
-       | object_spec THEN
-               {
-                 $$ = $1;
-                 if (!($$->flags & HAS_SEGMENT))
-                   switch ($$->dir) {
-                   case UP_DIRECTION:
-                     $$->segment_pos.y += $$->segment_width;
-                     break;
-                   case DOWN_DIRECTION:
-                     $$->segment_pos.y -= $$->segment_width;
-                     break;
-                   case RIGHT_DIRECTION:
-                     $$->segment_pos.x += $$->segment_width;
-                     break;
-                   case LEFT_DIRECTION:
-                     $$->segment_pos.x -= $$->segment_width;
-                     break;
-                   }
-                 $$->segment_list = new segment($$->segment_pos,
-                                                $$->segment_is_absolute,
-                                                $$->segment_list);
-                 $$->flags &= ~HAS_SEGMENT;
-                 $$->segment_pos.x = $$->segment_pos.y = 0.0;
-                 $$->segment_is_absolute = 0;
-               }
-       | object_spec SOLID
-               {
-                 $$ = $1;      // nothing
-               }
-       | object_spec DOTTED
-               {
-                 $$ = $1;
-                 $$->flags |= IS_DOTTED;
-                 lookup_variable("dashwid", & $$->dash_width);
-               }
-       | object_spec DOTTED expr
-               {
-                 $$ = $1;
-                 $$->flags |= IS_DOTTED;
-                 $$->dash_width = $3;
-               }
-       | object_spec DASHED
-               {
-                 $$ = $1;
-                 $$->flags |= IS_DASHED;
-                 lookup_variable("dashwid", & $$->dash_width);
-               }
-       | object_spec DASHED expr
-               {
-                 $$ = $1;
-                 $$->flags |= IS_DASHED;
-                 $$->dash_width = $3;
-               }
-       | object_spec FILL
-               {
-                 $$ = $1;
-                 $$->flags |= IS_DEFAULT_FILLED;
-               }
-       | object_spec FILL expr
-               {
-                 $$ = $1;
-                 $$->flags |= IS_FILLED;
-                 $$->fill = $3;
-               }
-       | object_spec XSLANTED expr
-               {
-                 $$ = $1;
-                 $$->flags |= IS_XSLANTED;
-                 $$->xslanted = $3;
-               }
-       | object_spec YSLANTED expr
-               {
-                 $$ = $1;
-                 $$->flags |= IS_YSLANTED;
-                 $$->yslanted = $3;
-               }
-       | object_spec SHADED text
-               {
-                 $$ = $1;
-                 $$->flags |= (IS_SHADED | IS_FILLED);
-                 $$->shaded = new char[strlen($3.str)+1];
-                 strcpy($$->shaded, $3.str);
-               }
-       | object_spec COLORED text
-               {
-                 $$ = $1;
-                 $$->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
-                 $$->shaded = new char[strlen($3.str)+1];
-                 strcpy($$->shaded, $3.str);
-                 $$->outlined = new char[strlen($3.str)+1];
-                 strcpy($$->outlined, $3.str);
-               }
-       | object_spec OUTLINED text
-               {
-                 $$ = $1;
-                 $$->flags |= IS_OUTLINED;
-                 $$->outlined = new char[strlen($3.str)+1];
-                 strcpy($$->outlined, $3.str);
-               }
-       | object_spec CHOP
-               {
-                 $$ = $1;
-                 // line chop chop means line chop 0 chop 0
-                 if ($$->flags & IS_DEFAULT_CHOPPED) {
-                   $$->flags |= IS_CHOPPED;
-                   $$->flags &= ~IS_DEFAULT_CHOPPED;
-                   $$->start_chop = $$->end_chop = 0.0;
-                 }
-                 else if ($$->flags & IS_CHOPPED) {
-                   $$->end_chop = 0.0;
-                 }
-                 else {
-                   $$->flags |= IS_DEFAULT_CHOPPED;
-                 }
-               }
-       | object_spec CHOP expr
-               {
-                 $$ = $1;
-                 if ($$->flags & IS_DEFAULT_CHOPPED) {
-                   $$->flags |= IS_CHOPPED;
-                   $$->flags &= ~IS_DEFAULT_CHOPPED;
-                   $$->start_chop = 0.0;
-                   $$->end_chop = $3;
-                 }
-                 else if ($$->flags & IS_CHOPPED) {
-                   $$->end_chop = $3;
-                 }
-                 else {
-                   $$->start_chop = $$->end_chop = $3;
-                   $$->flags |= IS_CHOPPED;
-                 }
-               }
-       | object_spec SAME
-               {
-                 $$ = $1;
-                 $$->flags |= IS_SAME;
-               }
-       | object_spec INVISIBLE
-               {
-                 $$ = $1;
-                 $$->flags |= IS_INVISIBLE;
-               }
-       | object_spec LEFT_ARROW_HEAD
-               {
-                 $$ = $1;
-                 $$->flags |= HAS_LEFT_ARROW_HEAD;
-               }
-       | object_spec RIGHT_ARROW_HEAD
-               {
-                 $$ = $1;
-                 $$->flags |= HAS_RIGHT_ARROW_HEAD;
-               }
-       | object_spec DOUBLE_ARROW_HEAD
-               {
-                 $$ = $1;
-                 $$->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
-               }
-       | object_spec CW
-               {
-                 $$ = $1;
-                 $$->flags |= IS_CLOCKWISE;
-               }
-       | object_spec CCW
-               {
-                 $$ = $1;
-                 $$->flags &= ~IS_CLOCKWISE;
-               }
-       | object_spec text                                      %prec TEXT
-               {
-                 $$ = $1;
-                 text_item **p;
-                 for (p = & $$->text; *p; p = &(*p)->next)
-                   ;
-                 *p = new text_item($2.str, $2.filename, $2.lineno);
-               }
-       | object_spec LJUST
-               {
-                 $$ = $1;
-                 if ($$->text) {
-                   text_item *p;
-                   for (p = $$->text; p->next; p = p->next)
-                     ;
-                   p->adj.h = LEFT_ADJUST;
-                 }
-               }
-       | object_spec RJUST
-               {
-                 $$ = $1;
-                 if ($$->text) {
-                   text_item *p;
-                   for (p = $$->text; p->next; p = p->next)
-                     ;
-                   p->adj.h = RIGHT_ADJUST;
-                 }
-               }
-       | object_spec ABOVE
-               {
-                 $$ = $1;
-                 if ($$->text) {
-                   text_item *p;
-                   for (p = $$->text; p->next; p = p->next)
-                     ;
-                   p->adj.v = ABOVE_ADJUST;
-                 }
-               }
-       | object_spec BELOW
-               {
-                 $$ = $1;
-                 if ($$->text) {
-                   text_item *p;
-                   for (p = $$->text; p->next; p = p->next)
-                     ;
-                   p->adj.v = BELOW_ADJUST;
-                 }
-               }
-       | object_spec THICKNESS expr
-               {
-                 $$ = $1;
-                 $$->flags |= HAS_THICKNESS;
-                 $$->thickness = $3;
-               }
-       | object_spec ALIGNED
-               {
-                 $$ = $1;
-                 $$->flags |= IS_ALIGNED;
-               }
-       ;
-
-text:
-       TEXT
-               { $$ = $1; }
-       | SPRINTF '(' TEXT sprintf_args ')'
-               {
-                 $$.filename = $3.filename;
-                 $$.lineno = $3.lineno;
-                 $$.str = do_sprintf($3.str, $4.v, $4.nv);
-                 a_delete $4.v;
-                 a_delete $3.str;
-               }
-       ;
-
-sprintf_args:
-       /* empty */
-               {
-                 $$.v = 0;
-                 $$.nv = 0;
-                 $$.maxv = 0;
-               }
-       | sprintf_args ',' expr
-               {
-                 $$ = $1;
-                 if ($$.nv >= $$.maxv) {
-                   if ($$.nv == 0) {
-                     $$.v = new double[4];
-                     $$.maxv = 4;
-                   }
-                   else {
-                     double *oldv = $$.v;
-                     $$.maxv *= 2;
-#if 0
-                     $$.v = new double[$$.maxv];
-                     memcpy($$.v, oldv, $$.nv*sizeof(double));
-#else
-                     // workaround for bug in Compaq C++ V6.5-033
-                     // for Compaq Tru64 UNIX V5.1A (Rev. 1885)
-                     double *foo = new double[$$.maxv];
-                     memcpy(foo, oldv, $$.nv*sizeof(double));
-                     $$.v = foo;
-#endif
-                     a_delete oldv;
-                   }
-                 }
-                 $$.v[$$.nv] = $3;
-                 $$.nv += 1;
-               }
-       ;
-
-position:
-       position_not_place
-               { $$ = $1; }
-       | place
-               {
-                 position pos = $1;
-                 $$.x = pos.x;
-                 $$.y = pos.y;
-               }
-       | '(' place ')'
-               {
-                 position pos = $2;
-                 $$.x = pos.x;
-                 $$.y = pos.y;
-               }
-       ;
-
-position_not_place:
-       expr_pair
-               { $$ = $1; }
-       | position '+' expr_pair
-               {
-                 $$.x = $1.x + $3.x;
-                 $$.y = $1.y + $3.y;
-               }
-       | '(' position '+' expr_pair ')'
-               {
-                 $$.x = $2.x + $4.x;
-                 $$.y = $2.y + $4.y;
-               }
-       | position '-' expr_pair
-               {
-                 $$.x = $1.x - $3.x;
-                 $$.y = $1.y - $3.y;
-               }
-       | '(' position '-' expr_pair ')'
-               {
-                 $$.x = $2.x - $4.x;
-                 $$.y = $2.y - $4.y;
-               }
-       | '(' position ',' position ')'
-               {
-                 $$.x = $2.x;
-                 $$.y = $4.y;
-               }
-       | expr between position AND position
-               {
-                 $$.x = (1.0 - $1)*$3.x + $1*$5.x;
-                 $$.y = (1.0 - $1)*$3.y + $1*$5.y;
-               }
-       | '(' expr between position AND position ')'
-               {
-                 $$.x = (1.0 - $2)*$4.x + $2*$6.x;
-                 $$.y = (1.0 - $2)*$4.y + $2*$6.y;
-               }
-       /* the next two rules cause harmless shift/reduce warnings */
-       | expr_not_lower_than '<' position ',' position '>'
-               {
-                 $$.x = (1.0 - $1)*$3.x + $1*$5.x;
-                 $$.y = (1.0 - $1)*$3.y + $1*$5.y;
-               }
-       | '(' expr_not_lower_than '<' position ',' position '>' ')'
-               {
-                 $$.x = (1.0 - $2)*$4.x + $2*$6.x;
-                 $$.y = (1.0 - $2)*$4.y + $2*$6.y;
-               }
-       ;
-
-between:
-       BETWEEN
-       | OF THE WAY BETWEEN
-       ;
-
-expr_pair:
-       expr ',' expr
-               {
-                 $$.x = $1;
-                 $$.y = $3;
-               }
-       | '(' expr_pair ')'
-               { $$ = $2; }
-       ;
-
-place:
-       /* line at A left == line (at A) left */
-       label                                                   %prec CHOP
-               { $$ = $1; }
-       | label corner
-               {
-                 path pth($2);
-                 if (!pth.follow($1, & $$))
-                   YYABORT;
-               }
-       | corner label
-               {
-                 path pth($1);
-                 if (!pth.follow($2, & $$))
-                   YYABORT;
-               }
-       | corner OF label
-               {
-                 path pth($1);
-                 if (!pth.follow($3, & $$))
-                   YYABORT;
-               }
-       | HERE
-               {
-                 $$.x = current_position.x;
-                 $$.y = current_position.y;
-                 $$.obj = 0;
-               }
-       ;
-
-label:
-       LABEL
-               {
-                 place *p = lookup_label($1);
-                 if (!p) {
-                   lex_error("there is no place `%1'", $1);
-                   YYABORT;
-                 }
-                 $$ = *p;
-                 a_delete $1;
-               }
-       | nth_primitive
-               { $$.obj = $1; }
-       | label '.' LABEL
-               {
-                 path pth($3);
-                 if (!pth.follow($1, & $$))
-                   YYABORT;
-               }
-       ;
-
-ordinal:
-       ORDINAL
-               { $$ = $1; }
-       | '`' any_expr TH
-               {
-                 // XXX Check for overflow (and non-integers?).
-                 $$ = (int)$2;
-               }
-       ;
-
-optional_ordinal_last:
-       LAST
-               { $$ = 1; }
-       | ordinal LAST
-               { $$ = $1; }
-       ;
-
-nth_primitive:
-       ordinal object_type
-               {
-                 int count = 0;
-                 object *p;
-                 for (p = olist.head; p != 0; p = p->next)
-                   if (p->type() == $2 && ++count == $1) {
-                     $$ = p;
-                     break;
-                   }
-                 if (p == 0) {
-                   lex_error("there is no %1%2 %3", $1, ordinal_postfix($1),
-                             object_type_name($2));
-                   YYABORT;
-                 }
-               }
-       | optional_ordinal_last object_type
-               {
-                 int count = 0;
-                 object *p;
-                 for (p = olist.tail; p != 0; p = p->prev)
-                   if (p->type() == $2 && ++count == $1) {
-                     $$ = p;
-                     break;
-                   }
-                 if (p == 0) {
-                   lex_error("there is no %1%2 last %3", $1,
-                             ordinal_postfix($1), object_type_name($2));
-                   YYABORT;
-                 }
-               }
-       ;
-
-object_type:
-       BOX
-               { $$ = BOX_OBJECT; }
-       | CIRCLE
-               { $$ = CIRCLE_OBJECT; }
-       | ELLIPSE
-               { $$ = ELLIPSE_OBJECT; }
-       | ARC
-               { $$ = ARC_OBJECT; }
-       | LINE
-               { $$ = LINE_OBJECT; }
-       | ARROW
-               { $$ = ARROW_OBJECT; }
-       | SPLINE
-               { $$ = SPLINE_OBJECT; }
-       | '[' ']'
-               { $$ = BLOCK_OBJECT; }
-       | TEXT
-               { $$ = TEXT_OBJECT; }
-       ;
-
-label_path:
-       '.' LABEL
-               { $$ = new path($2); }
-       | label_path '.' LABEL
-               {
-                 $$ = $1;
-                 $$->append($3);
-               }
-       ;
-
-relative_path:
-       corner                                                  %prec CHOP
-               { $$ = new path($1); }
-       /* give this a lower precedence than LEFT and RIGHT so that
-          [A: box] with .A left == [A: box] with (.A left) */
-       | label_path                                            %prec TEXT
-               { $$ = $1; }
-       | label_path corner
-               {
-                 $$ = $1;
-                 $$->append($2);
-               }
-       ;
-
-path:
-       relative_path
-               { $$ = $1; }
-       | '(' relative_path ',' relative_path ')'
-               {
-                 $$ = $2;
-                 $$->set_ypath($4);
-               }
-       /* The rest of these rules are a compatibility sop. */
-       | ORDINAL LAST object_type relative_path
-               {
-                 lex_warning("`%1%2 last %3' in `with' argument ignored",
-                             $1, ordinal_postfix($1), object_type_name($3));
-                 $$ = $4;
-               }
-       | LAST object_type relative_path
-               {
-                 lex_warning("`last %1' in `with' argument ignored",
-                             object_type_name($2));
-                 $$ = $3;
-               }
-       | ORDINAL object_type relative_path
-               {
-                 lex_warning("`%1%2 %3' in `with' argument ignored",
-                             $1, ordinal_postfix($1), object_type_name($2));
-                 $$ = $3;
-               }
-       | LABEL relative_path
-               {
-                 lex_warning("initial `%1' in `with' argument ignored", $1);
-                 a_delete $1;
-                 $$ = $2;
-               }
-       ;
-
-corner:
-       DOT_N
-               { $$ = &object::north; }
-       | DOT_E 
-               { $$ = &object::east; }
-       | DOT_W
-               { $$ = &object::west; }
-       | DOT_S
-               { $$ = &object::south; }
-       | DOT_NE
-               { $$ = &object::north_east; }
-       | DOT_SE
-               { $$ = &object:: south_east; }
-       | DOT_NW
-               { $$ = &object::north_west; }
-       | DOT_SW
-               { $$ = &object::south_west; }
-       | DOT_C
-               { $$ = &object::center; }
-       | DOT_START
-               { $$ = &object::start; }
-       | DOT_END
-               { $$ = &object::end; }
-       | TOP
-               { $$ = &object::north; }
-       | BOTTOM
-               { $$ = &object::south; }
-       | LEFT
-               { $$ = &object::west; }
-       | RIGHT
-               { $$ = &object::east; }
-       | UPPER LEFT
-               { $$ = &object::north_west; }
-       | LOWER LEFT
-               { $$ = &object::south_west; }
-       | UPPER RIGHT
-               { $$ = &object::north_east; }
-       | LOWER RIGHT
-               { $$ = &object::south_east; }
-       | LEFT_CORNER
-               { $$ = &object::west; }
-       | RIGHT_CORNER
-               { $$ = &object::east; }
-       | UPPER LEFT_CORNER
-               { $$ = &object::north_west; }
-       | LOWER LEFT_CORNER
-               { $$ = &object::south_west; }
-       | UPPER RIGHT_CORNER
-               { $$ = &object::north_east; }
-       | LOWER RIGHT_CORNER
-               { $$ = &object::south_east; }
-       | NORTH
-               { $$ = &object::north; }
-       | SOUTH
-               { $$ = &object::south; }
-       | EAST
-               { $$ = &object::east; }
-       | WEST
-               { $$ = &object::west; }
-       | CENTER
-               { $$ = &object::center; }
-       | START
-               { $$ = &object::start; }
-       | END
-               { $$ = &object::end; }
-       ;
-
-expr:
-       expr_lower_than
-               { $$ = $1; }
-       | expr_not_lower_than
-               { $$ = $1; }
-       ;
-
-expr_lower_than:
-       expr '<' expr
-               { $$ = ($1 < $3); }
-       ;
-
-expr_not_lower_than:
-       VARIABLE
-               {
-                 if (!lookup_variable($1, & $$)) {
-                   lex_error("there is no variable `%1'", $1);
-                   YYABORT;
-                 }
-                 a_delete $1;
-               }
-       | NUMBER
-               { $$ = $1; }
-       | place DOT_X
-               {
-                 if ($1.obj != 0)
-                   $$ = $1.obj->origin().x;
-                 else
-                   $$ = $1.x;
-               }                       
-       | place DOT_Y
-               {
-                 if ($1.obj != 0)
-                   $$ = $1.obj->origin().y;
-                 else
-                   $$ = $1.y;
-               }
-       | place DOT_HT
-               {
-                 if ($1.obj != 0)
-                   $$ = $1.obj->height();
-                 else
-                   $$ = 0.0;
-               }
-       | place DOT_WID
-               {
-                 if ($1.obj != 0)
-                   $$ = $1.obj->width();
-                 else
-                   $$ = 0.0;
-               }
-       | place DOT_RAD
-               {
-                 if ($1.obj != 0)
-                   $$ = $1.obj->radius();
-                 else
-                   $$ = 0.0;
-               }
-       | expr '+' expr
-               { $$ = $1 + $3; }
-       | expr '-' expr
-               { $$ = $1 - $3; }
-       | expr '*' expr
-               { $$ = $1 * $3; }
-       | expr '/' expr
-               {
-                 if ($3 == 0.0) {
-                   lex_error("division by zero");
-                   YYABORT;
-                 }
-                 $$ = $1/$3;
-               }
-       | expr '%' expr
-               {
-                 if ($3 == 0.0) {
-                   lex_error("modulus by zero");
-                   YYABORT;
-                 }
-                 $$ = fmod($1, $3);
-               }
-       | expr '^' expr
-               {
-                 errno = 0;
-                 $$ = pow($1, $3);
-                 if (errno == EDOM) {
-                   lex_error("arguments to `^' operator out of domain");
-                   YYABORT;
-                 }
-                 if (errno == ERANGE) {
-                   lex_error("result of `^' operator out of range");
-                   YYABORT;
-                 }
-               }
-       | '-' expr                                              %prec '!'
-               { $$ = -$2; }
-       | '(' any_expr ')'
-               { $$ = $2; }
-       | SIN '(' any_expr ')'
-               {
-                 errno = 0;
-                 $$ = sin($3);
-                 if (errno == ERANGE) {
-                   lex_error("sin result out of range");
-                   YYABORT;
-                 }
-               }
-       | COS '(' any_expr ')'
-               {
-                 errno = 0;
-                 $$ = cos($3);
-                 if (errno == ERANGE) {
-                   lex_error("cos result out of range");
-                   YYABORT;
-                 }
-               }
-       | ATAN2 '(' any_expr ',' any_expr ')'
-               {
-                 errno = 0;
-                 $$ = atan2($3, $5);
-                 if (errno == EDOM) {
-                   lex_error("atan2 argument out of domain");
-                   YYABORT;
-                 }
-                 if (errno == ERANGE) {
-                   lex_error("atan2 result out of range");
-                   YYABORT;
-                 }
-               }
-       | LOG '(' any_expr ')'
-               {
-                 errno = 0;
-                 $$ = log10($3);
-                 if (errno == ERANGE) {
-                   lex_error("log result out of range");
-                   YYABORT;
-                 }
-               }
-       | EXP '(' any_expr ')'
-               {
-                 errno = 0;
-                 $$ = pow(10.0, $3);
-                 if (errno == ERANGE) {
-                   lex_error("exp result out of range");
-                   YYABORT;
-                 }
-               }
-       | SQRT '(' any_expr ')'
-               {
-                 errno = 0;
-                 $$ = sqrt($3);
-                 if (errno == EDOM) {
-                   lex_error("sqrt argument out of domain");
-                   YYABORT;
-                 }
-               }
-       | K_MAX '(' any_expr ',' any_expr ')'
-               { $$ = $3 > $5 ? $3 : $5; }
-       | K_MIN '(' any_expr ',' any_expr ')'
-               { $$ = $3 < $5 ? $3 : $5; }
-       | INT '(' any_expr ')'
-               { $$ = $3 < 0 ? -floor(-$3) : floor($3); }
-       | RAND '(' any_expr ')'
-               { $$ = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*$3); }
-       | RAND '(' ')'
-               {
-                 /* return a random number in the range [0,1) */
-                 /* portable, but not very random */
-                 $$ = (rand() & 0x7fff) / double(0x8000);
-               }
-       | SRAND '(' any_expr ')'
-               {
-                 $$ = 0;
-                 srand((unsigned int)$3);
-               }
-       | expr LESSEQUAL expr
-               { $$ = ($1 <= $3); }
-       | expr '>' expr
-               { $$ = ($1 > $3); }
-       | expr GREATEREQUAL expr
-               { $$ = ($1 >= $3); }
-       | expr EQUALEQUAL expr
-               { $$ = ($1 == $3); }
-       | expr NOTEQUAL expr
-               { $$ = ($1 != $3); }
-       | expr ANDAND expr
-               { $$ = ($1 != 0.0 && $3 != 0.0); }
-       | expr OROR expr
-               { $$ = ($1 != 0.0 || $3 != 0.0); }
-       | '!' expr
-               { $$ = ($2 == 0.0); }
-
-       ;
-
-%%
-
-/* bison defines const to be empty unless __STDC__ is defined, which it
-isn't under cfront */
-
-#ifdef const
-#undef const
-#endif
-
-static struct {
-  const char *name;
-  double val;
-  int scaled;               // non-zero if val should be multiplied by scale
-} defaults_table[] = {
-  { "arcrad", .25, 1 },
-  { "arrowht", .1, 1 },
-  { "arrowwid", .05, 1 },
-  { "circlerad", .25, 1 },
-  { "boxht", .5, 1 },
-  { "boxwid", .75, 1 },
-  { "boxrad", 0.0, 1 },
-  { "dashwid", .05, 1 },
-  { "ellipseht", .5, 1 },
-  { "ellipsewid", .75, 1 },
-  { "moveht", .5, 1 },
-  { "movewid", .5, 1 },
-  { "lineht", .5, 1 },
-  { "linewid", .5, 1 },
-  { "textht", 0.0, 1 },
-  { "textwid", 0.0, 1 },
-  { "scale", 1.0, 0 },
-  { "linethick", -1.0, 0 },            // in points
-  { "fillval", .5, 0 },
-  { "arrowhead", 1.0, 0 },
-  { "maxpswid", 8.5, 0 },
-  { "maxpsht", 11.0, 0 },
-};
-
-place *lookup_label(const char *label)
-{
-  saved_state *state = current_saved_state;
-  PTABLE(place) *tbl = current_table;
-  for (;;) {
-    place *pl = tbl->lookup(label);
-    if (pl)
-      return pl;
-    if (!state)
-      return 0;
-    tbl = state->tbl;
-    state = state->prev;
-  }
-}
-
-void define_label(const char *label, const place *pl)
-{
-  place *p = new place[1];
-  *p = *pl;
-  current_table->define(label, p);
-}
-
-int lookup_variable(const char *name, double *val)
-{
-  place *pl = lookup_label(name);
-  if (pl) {
-    *val = pl->x;
-    return 1;
-  }
-  return 0;
-}
-
-void define_variable(const char *name, double val)
-{
-  place *p = new place[1];
-  p->obj = 0;
-  p->x = val;
-  p->y = 0.0;
-  current_table->define(name, p);
-  if (strcmp(name, "scale") == 0) {
-    // When the scale changes, reset all scaled pre-defined variables to
-    // their default values.
-    for (unsigned int i = 0;
-        i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) 
-      if (defaults_table[i].scaled)
-       define_variable(defaults_table[i].name, val*defaults_table[i].val);
-  }
-}
-
-// called once only (not once per parse)
-
-void parse_init()
-{
-  current_direction = RIGHT_DIRECTION;
-  current_position.x = 0.0;
-  current_position.y = 0.0;
-  // This resets everything to its default value.
-  reset_all();
-}
-
-void reset(const char *nm)
-{
-  for (unsigned int i = 0;
-       i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
-    if (strcmp(nm, defaults_table[i].name) == 0) {
-      double val = defaults_table[i].val;
-      if (defaults_table[i].scaled) {
-       double scale;
-       lookup_variable("scale", &scale);
-       val *= scale;
-      }
-      define_variable(defaults_table[i].name, val);
-      return;
-    }
-  lex_error("`%1' is not a predefined variable", nm);
-}
-
-void reset_all()
-{
-  // We only have to explicitly reset the pre-defined variables that
-  // aren't scaled because `scale' is not scaled, and changing the
-  // value of `scale' will reset all the pre-defined variables that
-  // are scaled.
-  for (unsigned int i = 0;
-       i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
-    if (!defaults_table[i].scaled)
-      define_variable(defaults_table[i].name, defaults_table[i].val);
-}
-
-// called after each parse
-
-void parse_cleanup()
-{
-  while (current_saved_state != 0) {
-    delete current_table;
-    current_table = current_saved_state->tbl;
-    saved_state *tem = current_saved_state;
-    current_saved_state = current_saved_state->prev;
-    delete tem;
-  }
-  assert(current_table == &top_table);
-  PTABLE_ITERATOR(place) iter(current_table);
-  const char *key;
-  place *pl;
-  while (iter.next(&key, &pl))
-    if (pl->obj != 0) {
-      position pos = pl->obj->origin();
-      pl->obj = 0;
-      pl->x = pos.x;
-      pl->y = pos.y;
-    }
-  while (olist.head != 0) {
-    object *tem = olist.head;
-    olist.head = olist.head->next;
-    delete tem;
-  }
-  olist.tail = 0;
-  current_direction = RIGHT_DIRECTION;
-  current_position.x = 0.0;
-  current_position.y = 0.0;
-}
-
-const char *ordinal_postfix(int n)
-{
-  if (n < 10 || n > 20)
-    switch (n % 10) {
-    case 1:
-      return "st";
-    case 2:
-      return "nd";
-    case 3:
-      return "rd";
-    }
-  return "th";
-}
-
-const char *object_type_name(object_type type)
-{
-  switch (type) {
-  case BOX_OBJECT:
-    return "box";
-  case CIRCLE_OBJECT:
-    return "circle";
-  case ELLIPSE_OBJECT:
-    return "ellipse";
-  case ARC_OBJECT:
-    return "arc";
-  case SPLINE_OBJECT:
-    return "spline";
-  case LINE_OBJECT:
-    return "line";
-  case ARROW_OBJECT:
-    return "arrow";
-  case MOVE_OBJECT:
-    return "move";
-  case TEXT_OBJECT:
-    return "\"\"";
-  case BLOCK_OBJECT:
-    return "[]";
-  case OTHER_OBJECT:
-  case MARK_OBJECT:
-  default:
-    break;
-  }
-  return "object";
-}
-
-static char sprintf_buf[1024];
-
-char *format_number(const char *form, double n)
-{
-  if (form == 0)
-    form = "%g";
-  return do_sprintf(form, &n, 1);
-}
-
-char *do_sprintf(const char *form, const double *v, int nv)
-{
-  string result;
-  int i = 0;
-  string one_format;
-  while (*form) {
-    if (*form == '%') {
-      one_format += *form++;
-      for (; *form != '\0' && strchr("#-+ 0123456789.", *form) != 0; form++)
-       one_format += *form;
-      if (*form == '\0' || strchr("eEfgG%", *form) == 0) {
-       lex_error("bad sprintf format");
-       result += one_format;
-       result += form;
-       break;
-      }
-      if (*form == '%') {
-       one_format += *form++;
-       one_format += '\0';
-       snprintf(sprintf_buf, sizeof(sprintf_buf),
-                "%s", one_format.contents());
-      }
-      else {
-       if (i >= nv) {
-         lex_error("too few arguments to snprintf");
-         result += one_format;
-         result += form;
-         break;
-       }
-       one_format += *form++;
-       one_format += '\0';
-       snprintf(sprintf_buf, sizeof(sprintf_buf),
-                one_format.contents(), v[i++]);
-      }
-      one_format.clear();
-      result += sprintf_buf;
-    }
-    else
-      result += *form++;
-  }
-  result += '\0';
-  return strsave(result.contents());
-}
diff --git a/src/preproc/pic/pic.ypp b/src/preproc/pic/pic.ypp
new file mode 100644 (file)
index 0000000..6afa2ab
--- /dev/null
@@ -0,0 +1,1933 @@
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
+     Written by James Clark (jjc@jclark.com)
+
+This file is part of groff.
+
+groff 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 3 of the License, or
+(at your option) any later version.
+
+groff 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, see <http://www.gnu.org/licenses/>. */
+
+%{
+#include "pic.h"
+#include "ptable.h"
+#include "object.h"
+
+extern int delim_flag;
+extern void copy_rest_thru(const char *, const char *);
+extern void copy_file_thru(const char *, const char *, const char *);
+extern void push_body(const char *);
+extern void do_for(char *var, double from, double to,
+                  int by_is_multiplicative, double by, char *body);
+extern void do_lookahead();
+
+/* Maximum number of characters produced by printf("%g") */
+#define GDIGITS 14
+
+int yylex();
+void yyerror(const char *);
+
+void reset(const char *nm);
+void reset_all();
+
+place *lookup_label(const char *);
+void define_label(const char *label, const place *pl);
+
+direction current_direction;
+position current_position;
+
+implement_ptable(place)
+
+PTABLE(place) top_table;
+
+PTABLE(place) *current_table = &top_table;
+saved_state *current_saved_state = 0;
+
+object_list olist;
+
+const char *ordinal_postfix(int n);
+const char *object_type_name(object_type type);
+char *format_number(const char *form, double n);
+char *do_sprintf(const char *form, const double *v, int nv);
+
+%}
+
+%expect 2
+
+%union {
+       char *str;
+       int n;
+       double x;
+       struct { double x, y; } pair;
+       struct { double x; char *body; } if_data;
+       struct { char *str; const char *filename; int lineno; } lstr;
+       struct { double *v; int nv; int maxv; } dv;
+       struct { double val; int is_multiplicative; } by;
+       place pl;
+       object *obj;
+       corner crn;
+       path *pth;
+       object_spec *spec;
+       saved_state *pstate;
+       graphics_state state;
+       object_type obtype;
+}
+
+%token <str> LABEL
+%token <str> VARIABLE
+%token <x> NUMBER
+%token <lstr> TEXT
+%token <lstr> COMMAND_LINE
+%token <str> DELIMITED
+%token <n> ORDINAL
+%token TH
+%token LEFT_ARROW_HEAD
+%token RIGHT_ARROW_HEAD
+%token DOUBLE_ARROW_HEAD
+%token LAST
+%token BOX
+%token CIRCLE
+%token ELLIPSE
+%token ARC
+%token LINE
+%token ARROW
+%token MOVE
+%token SPLINE
+%token HEIGHT
+%token RADIUS
+%token FIGNAME
+%token WIDTH
+%token DIAMETER
+%token UP
+%token DOWN
+%token RIGHT
+%token LEFT
+%token FROM
+%token TO
+%token AT
+%token WITH
+%token BY
+%token THEN
+%token SOLID
+%token DOTTED
+%token DASHED
+%token CHOP
+%token SAME
+%token INVISIBLE
+%token LJUST
+%token RJUST
+%token ABOVE
+%token BELOW
+%token OF
+%token THE
+%token WAY
+%token BETWEEN
+%token AND
+%token HERE
+%token DOT_N
+%token DOT_E   
+%token DOT_W
+%token DOT_S
+%token DOT_NE
+%token DOT_SE
+%token DOT_NW
+%token DOT_SW
+%token DOT_C
+%token DOT_START
+%token DOT_END
+%token DOT_X
+%token DOT_Y
+%token DOT_HT
+%token DOT_WID
+%token DOT_RAD
+%token SIN
+%token COS
+%token ATAN2
+%token LOG
+%token EXP
+%token SQRT
+%token K_MAX
+%token K_MIN
+%token INT
+%token RAND
+%token SRAND
+%token COPY
+%token THRU
+%token TOP
+%token BOTTOM
+%token UPPER
+%token LOWER
+%token SH
+%token PRINT
+%token CW
+%token CCW
+%token FOR
+%token DO
+%token IF
+%token ELSE
+%token ANDAND
+%token OROR
+%token NOTEQUAL
+%token EQUALEQUAL
+%token LESSEQUAL
+%token GREATEREQUAL
+%token LEFT_CORNER
+%token RIGHT_CORNER
+%token NORTH
+%token SOUTH
+%token EAST
+%token WEST
+%token CENTER
+%token END
+%token START
+%token RESET
+%token UNTIL
+%token PLOT
+%token THICKNESS
+%token FILL
+%token COLORED
+%token OUTLINED
+%token SHADED
+%token XSLANTED
+%token YSLANTED
+%token ALIGNED
+%token SPRINTF
+%token COMMAND
+
+%token DEFINE
+%token UNDEF
+
+%left '.'
+
+/* this ensures that plot 17 "%g" parses as (plot 17 "%g") */
+%left PLOT
+%left TEXT SPRINTF
+
+/* give text adjustments higher precedence than TEXT, so that
+box "foo" above ljust == box ("foo" above ljust)
+*/
+
+%left LJUST RJUST ABOVE BELOW
+
+%left LEFT RIGHT
+/* Give attributes that take an optional expression a higher
+precedence than left and right, so that, e.g., 'line chop left'
+parses properly. */
+%left CHOP SOLID DASHED DOTTED UP DOWN FILL COLORED OUTLINED
+%left XSLANTED YSLANTED
+%left LABEL
+
+%left VARIABLE NUMBER '(' SIN COS ATAN2 LOG EXP SQRT K_MAX K_MIN INT RAND SRAND LAST 
+%left ORDINAL HERE '`'
+
+%left BOX CIRCLE ELLIPSE ARC LINE ARROW SPLINE '['
+
+/* these need to be lower than '-' */
+%left HEIGHT RADIUS WIDTH DIAMETER FROM TO AT THICKNESS
+
+/* these must have higher precedence than CHOP so that 'label %prec CHOP'
+works */
+%left DOT_N DOT_E DOT_W DOT_S DOT_NE DOT_SE DOT_NW DOT_SW DOT_C
+%left DOT_START DOT_END TOP BOTTOM LEFT_CORNER RIGHT_CORNER
+%left UPPER LOWER NORTH SOUTH EAST WEST CENTER START END
+
+%left ','
+%left OROR
+%left ANDAND
+%left EQUALEQUAL NOTEQUAL
+%left '<' '>' LESSEQUAL GREATEREQUAL
+
+%left BETWEEN OF
+%left AND
+
+%left '+' '-'
+%left '*' '/' '%'
+%right '!'
+%right '^'
+
+%type <x> expr expr_lower_than expr_not_lower_than any_expr text_expr
+%type <by> optional_by
+%type <pair> expr_pair position_not_place
+%type <if_data> simple_if
+%type <obj> nth_primitive
+%type <crn> corner
+%type <pth> path label_path relative_path
+%type <pl> place label element element_list middle_element_list
+%type <spec> object_spec
+%type <pair> position
+%type <obtype> object_type
+%type <n> optional_ordinal_last ordinal
+%type <str> macro_name until
+%type <dv> sprintf_args
+%type <lstr> text print_args print_arg
+
+%%
+
+top:
+       optional_separator
+       | element_list
+               {
+                 if (olist.head)
+                   print_picture(olist.head);
+               }
+       ;
+
+
+element_list:
+       optional_separator middle_element_list optional_separator
+               { $$ = $2; }
+       ;
+
+middle_element_list:
+       element
+               { $$ = $1; }
+       | middle_element_list separator element
+               { $$ = $1; }
+       ;
+
+optional_separator:
+       /* empty */
+       | separator
+       ;
+
+separator:
+       ';'
+       | separator ';'
+       ;
+
+placeless_element:
+       FIGNAME '=' macro_name
+               {
+                 a_delete graphname;
+                 graphname = new char[strlen($3) + 1];
+                 strcpy(graphname, $3);
+                 a_delete $3;
+               }
+       |
+       VARIABLE '=' any_expr
+               {
+                 define_variable($1, $3);
+                 free($1);
+               }
+       | VARIABLE ':' '=' any_expr
+               {
+                 place *p = lookup_label($1);
+                 if (!p) {
+                   lex_error("variable '%1' not defined", $1);
+                   YYABORT;
+                 }
+                 p->obj = 0;
+                 p->x = $4;
+                 p->y = 0.0;
+                 free($1);
+               }
+       | UP
+               { current_direction = UP_DIRECTION; }
+       | DOWN
+               { current_direction = DOWN_DIRECTION; }
+       | LEFT
+               { current_direction = LEFT_DIRECTION; }
+       | RIGHT
+               { current_direction = RIGHT_DIRECTION; }
+       | COMMAND_LINE
+               {
+                 olist.append(make_command_object($1.str, $1.filename,
+                                                  $1.lineno));
+               }
+       | COMMAND print_args
+               {
+                 olist.append(make_command_object($2.str, $2.filename,
+                                                  $2.lineno));
+               }
+       | PRINT print_args
+               {
+                 fprintf(stderr, "%s\n", $2.str);
+                 a_delete $2.str;
+                 fflush(stderr);
+               }
+       | SH
+               { delim_flag = 1; }
+         DELIMITED
+               {
+                 delim_flag = 0;
+                 if (safer_flag)
+                   lex_error("unsafe to run command '%1'", $3);
+                 else
+                   system($3);
+                 a_delete $3;
+               }
+       | COPY TEXT
+               {
+                 if (yychar < 0)
+                   do_lookahead();
+                 do_copy($2.str);
+                 // do not delete the filename
+               }
+       | COPY TEXT THRU
+               { delim_flag = 2; }
+         DELIMITED 
+               { delim_flag = 0; }
+         until
+               {
+                 if (yychar < 0)
+                   do_lookahead();
+                 copy_file_thru($2.str, $5, $7);
+                 // do not delete the filename
+                 a_delete $5;
+                 a_delete $7;
+               }
+       | COPY THRU
+               { delim_flag = 2; }
+         DELIMITED
+               { delim_flag = 0; }
+         until
+               {
+                 if (yychar < 0)
+                   do_lookahead();
+                 copy_rest_thru($4, $6);
+                 a_delete $4;
+                 a_delete $6;
+               }
+       | FOR VARIABLE '=' expr TO expr optional_by DO
+               { delim_flag = 1; }
+         DELIMITED
+               {
+                 delim_flag = 0;
+                 if (yychar < 0)
+                   do_lookahead();
+                 do_for($2, $4, $6, $7.is_multiplicative, $7.val, $10); 
+               }
+       | simple_if
+               {
+                 if (yychar < 0)
+                   do_lookahead();
+                 if ($1.x != 0.0)
+                   push_body($1.body);
+                 a_delete $1.body;
+               }
+       | simple_if ELSE
+               { delim_flag = 1; }
+         DELIMITED
+               {
+                 delim_flag = 0;
+                 if (yychar < 0)
+                   do_lookahead();
+                 if ($1.x != 0.0)
+                   push_body($1.body);
+                 else
+                   push_body($4);
+                 free($1.body);
+                 free($4);
+               }
+       | reset_variables
+       | RESET
+               { define_variable("scale", 1.0); }
+       ;
+
+macro_name:
+       VARIABLE
+       | LABEL
+       ;
+
+reset_variables:
+       RESET VARIABLE
+               {
+                 reset($2);
+                 a_delete $2;
+               }
+       | reset_variables VARIABLE
+               {
+                 reset($2);
+                 a_delete $2;
+               }
+       | reset_variables ',' VARIABLE
+               {
+                 reset($3);
+                 a_delete $3;
+               }
+       ;
+
+print_args:
+       print_arg
+               { $$ = $1; }
+       | print_args print_arg
+               {
+                 $$.str = new char[strlen($1.str) + strlen($2.str) + 1];
+                 strcpy($$.str, $1.str);
+                 strcat($$.str, $2.str);
+                 a_delete $1.str;
+                 a_delete $2.str;
+                 if ($1.filename) {
+                   $$.filename = $1.filename;
+                   $$.lineno = $1.lineno;
+                 }
+                 else if ($2.filename) {
+                   $$.filename = $2.filename;
+                   $$.lineno = $2.lineno;
+                 }
+               }
+       ;
+
+print_arg:
+       expr                                                    %prec ','
+               {
+                 $$.str = new char[GDIGITS + 1];
+                 sprintf($$.str, "%g", $1);
+                 $$.filename = 0;
+                 $$.lineno = 0;
+               }
+       | text
+               { $$ = $1; }
+       | position                                              %prec ','
+               {
+                 $$.str = new char[GDIGITS + 2 + GDIGITS + 1];
+                 sprintf($$.str, "%g, %g", $1.x, $1.y);
+                 $$.filename = 0;
+                 $$.lineno = 0;
+               }
+       ;
+
+simple_if:
+       IF any_expr THEN
+               { delim_flag = 1; }
+       DELIMITED
+               {
+                 delim_flag = 0;
+                 $$.x = $2;
+                 $$.body = $5;
+               }
+       ;
+
+until:
+       /* empty */
+               { $$ = 0; }
+       | UNTIL TEXT
+               { $$ = $2.str; }
+       ;
+       
+any_expr:
+       expr
+               { $$ = $1; }
+       | text_expr
+               { $$ = $1; }
+       ;
+       
+text_expr:
+       text EQUALEQUAL text
+               {
+                 $$ = strcmp($1.str, $3.str) == 0;
+                 a_delete $1.str;
+                 a_delete $3.str;
+               }
+       | text NOTEQUAL text
+               {
+                 $$ = strcmp($1.str, $3.str) != 0;
+                 a_delete $1.str;
+                 a_delete $3.str;
+               }
+       | text_expr ANDAND text_expr
+               { $$ = ($1 != 0.0 && $3 != 0.0); }
+       | text_expr ANDAND expr
+               { $$ = ($1 != 0.0 && $3 != 0.0); }
+       | expr ANDAND text_expr
+               { $$ = ($1 != 0.0 && $3 != 0.0); }
+       | text_expr OROR text_expr
+               { $$ = ($1 != 0.0 || $3 != 0.0); }
+       | text_expr OROR expr
+               { $$ = ($1 != 0.0 || $3 != 0.0); }
+       | expr OROR text_expr
+               { $$ = ($1 != 0.0 || $3 != 0.0); }
+       | '!' text_expr
+               { $$ = ($2 == 0.0); }
+       ;
+
+
+optional_by:
+       /* empty */
+               {
+                 $$.val = 1.0;
+                 $$.is_multiplicative = 0;
+               }
+       | BY expr
+               {
+                 $$.val = $2;
+                 $$.is_multiplicative = 0;
+               }
+       | BY '*' expr
+               {
+                 $$.val = $3;
+                 $$.is_multiplicative = 1;
+               }
+       ;
+
+element:
+       object_spec
+               {
+                 $$.obj = $1->make_object(&current_position,
+                                          &current_direction);
+                 if ($$.obj == 0)
+                   YYABORT;
+                 delete $1;
+                 if ($$.obj)
+                   olist.append($$.obj);
+                 else {
+                   $$.x = current_position.x;
+                   $$.y = current_position.y;
+                 }
+               }
+       | LABEL ':' optional_separator element
+               {
+                 $$ = $4;
+                 define_label($1, & $$);
+                 free($1);
+               }
+       | LABEL ':' optional_separator position_not_place
+               {
+                 $$.obj = 0;
+                 $$.x = $4.x;
+                 $$.y = $4.y;
+                 define_label($1, & $$);
+                 free($1);
+               }
+       | LABEL ':' optional_separator place
+               {
+                 $$ = $4;
+                 define_label($1, & $$);
+                 free($1);
+               }
+       | '{'
+               {
+                 $<state>$.x = current_position.x;
+                 $<state>$.y = current_position.y;
+                 $<state>$.dir = current_direction;
+               }
+         element_list '}'
+               {
+                 current_position.x = $<state>2.x;
+                 current_position.y = $<state>2.y;
+                 current_direction = $<state>2.dir;
+               }
+         optional_element
+               {
+                 $$ = $3;
+               }
+       | placeless_element
+               {
+                 $$.obj = 0;
+                 $$.x = current_position.x;
+                 $$.y = current_position.y;
+               }
+       ;
+
+optional_element:
+       /* empty */
+               {}
+       | element
+               {}
+       ;
+
+object_spec:
+       BOX
+               { $$ = new object_spec(BOX_OBJECT); }
+       | CIRCLE
+               { $$ = new object_spec(CIRCLE_OBJECT); }
+       | ELLIPSE
+               { $$ = new object_spec(ELLIPSE_OBJECT); }
+       | ARC
+               {
+                 $$ = new object_spec(ARC_OBJECT);
+                 $$->dir = current_direction;
+               }
+       | LINE
+               {
+                 $$ = new object_spec(LINE_OBJECT);
+                 lookup_variable("lineht", & $$->segment_height);
+                 lookup_variable("linewid", & $$->segment_width);
+                 $$->dir = current_direction;
+               }
+       | ARROW
+               {
+                 $$ = new object_spec(ARROW_OBJECT);
+                 lookup_variable("lineht", & $$->segment_height);
+                 lookup_variable("linewid", & $$->segment_width);
+                 $$->dir = current_direction;
+               }
+       | MOVE
+               {
+                 $$ = new object_spec(MOVE_OBJECT);
+                 lookup_variable("moveht", & $$->segment_height);
+                 lookup_variable("movewid", & $$->segment_width);
+                 $$->dir = current_direction;
+               }
+       | SPLINE
+               {
+                 $$ = new object_spec(SPLINE_OBJECT);
+                 lookup_variable("lineht", & $$->segment_height);
+                 lookup_variable("linewid", & $$->segment_width);
+                 $$->dir = current_direction;
+               }
+       | text                                                  %prec TEXT
+               {
+                 $$ = new object_spec(TEXT_OBJECT);
+                 $$->text = new text_item($1.str, $1.filename, $1.lineno);
+               }
+       | PLOT expr
+               {
+                 $$ = new object_spec(TEXT_OBJECT);
+                 $$->text = new text_item(format_number(0, $2), 0, -1);
+               }
+       | PLOT expr text
+               {
+                 $$ = new object_spec(TEXT_OBJECT);
+                 $$->text = new text_item(format_number($3.str, $2),
+                                          $3.filename, $3.lineno);
+                 a_delete $3.str;
+               }
+       | '[' 
+               {
+                 saved_state *p = new saved_state;
+                 $<pstate>$ = p;
+                 p->x = current_position.x;
+                 p->y = current_position.y;
+                 p->dir = current_direction;
+                 p->tbl = current_table;
+                 p->prev = current_saved_state;
+                 current_position.x = 0.0;
+                 current_position.y = 0.0;
+                 current_table = new PTABLE(place);
+                 current_saved_state = p;
+                 olist.append(make_mark_object());
+               }
+         element_list ']'
+               {
+                 current_position.x = $<pstate>2->x;
+                 current_position.y = $<pstate>2->y;
+                 current_direction = $<pstate>2->dir;
+                 $$ = new object_spec(BLOCK_OBJECT);
+                 olist.wrap_up_block(& $$->oblist);
+                 $$->tbl = current_table;
+                 current_table = $<pstate>2->tbl;
+                 current_saved_state = $<pstate>2->prev;
+                 delete $<pstate>2;
+               }
+       | object_spec HEIGHT expr
+               {
+                 $$ = $1;
+                 $$->height = $3;
+                 $$->flags |= HAS_HEIGHT;
+               }
+       | object_spec RADIUS expr
+               {
+                 $$ = $1;
+                 $$->radius = $3;
+                 $$->flags |= HAS_RADIUS;
+               }
+       | object_spec WIDTH expr
+               {
+                 $$ = $1;
+                 $$->width = $3;
+                 $$->flags |= HAS_WIDTH;
+               }
+       | object_spec DIAMETER expr
+               {
+                 $$ = $1;
+                 $$->radius = $3/2.0;
+                 $$->flags |= HAS_RADIUS;
+               }
+       | object_spec expr                                      %prec HEIGHT
+               {
+                 $$ = $1;
+                 $$->flags |= HAS_SEGMENT;
+                 switch ($$->dir) {
+                 case UP_DIRECTION:
+                   $$->segment_pos.y += $2;
+                   break;
+                 case DOWN_DIRECTION:
+                   $$->segment_pos.y -= $2;
+                   break;
+                 case RIGHT_DIRECTION:
+                   $$->segment_pos.x += $2;
+                   break;
+                 case LEFT_DIRECTION:
+                   $$->segment_pos.x -= $2;
+                   break;
+                 }
+               }
+       | object_spec UP
+               {
+                 $$ = $1;
+                 $$->dir = UP_DIRECTION;
+                 $$->flags |= HAS_SEGMENT;
+                 $$->segment_pos.y += $$->segment_height;
+               }
+       | object_spec UP expr
+               {
+                 $$ = $1;
+                 $$->dir = UP_DIRECTION;
+                 $$->flags |= HAS_SEGMENT;
+                 $$->segment_pos.y += $3;
+               }
+       | object_spec DOWN
+               {
+                 $$ = $1;
+                 $$->dir = DOWN_DIRECTION;
+                 $$->flags |= HAS_SEGMENT;
+                 $$->segment_pos.y -= $$->segment_height;
+               }
+       | object_spec DOWN expr
+               {
+                 $$ = $1;
+                 $$->dir = DOWN_DIRECTION;
+                 $$->flags |= HAS_SEGMENT;
+                 $$->segment_pos.y -= $3;
+               }
+       | object_spec RIGHT
+               {
+                 $$ = $1;
+                 $$->dir = RIGHT_DIRECTION;
+                 $$->flags |= HAS_SEGMENT;
+                 $$->segment_pos.x += $$->segment_width;
+               }
+       | object_spec RIGHT expr
+               {
+                 $$ = $1;
+                 $$->dir = RIGHT_DIRECTION;
+                 $$->flags |= HAS_SEGMENT;
+                 $$->segment_pos.x += $3;
+               }
+       | object_spec LEFT
+               {
+                 $$ = $1;
+                 $$->dir = LEFT_DIRECTION;
+                 $$->flags |= HAS_SEGMENT;
+                 $$->segment_pos.x -= $$->segment_width;
+               }
+       | object_spec LEFT expr
+               {
+                 $$ = $1;
+                 $$->dir = LEFT_DIRECTION;
+                 $$->flags |= HAS_SEGMENT;
+                 $$->segment_pos.x -= $3;
+               }
+       | object_spec FROM position
+               {
+                 $$ = $1;
+                 $$->flags |= HAS_FROM;
+                 $$->from.x = $3.x;
+                 $$->from.y = $3.y;
+               }
+       | object_spec TO position
+               {
+                 $$ = $1;
+                 if ($$->flags & HAS_SEGMENT)
+                   $$->segment_list = new segment($$->segment_pos,
+                                                  $$->segment_is_absolute,
+                                                  $$->segment_list);
+                 $$->flags |= HAS_SEGMENT;
+                 $$->segment_pos.x = $3.x;
+                 $$->segment_pos.y = $3.y;
+                 $$->segment_is_absolute = 1;
+                 $$->flags |= HAS_TO;
+                 $$->to.x = $3.x;
+                 $$->to.y = $3.y;
+               }
+       | object_spec AT position
+               {
+                 $$ = $1;
+                 $$->flags |= HAS_AT;
+                 $$->at.x = $3.x;
+                 $$->at.y = $3.y;
+                 if ($$->type != ARC_OBJECT) {
+                   $$->flags |= HAS_FROM;
+                   $$->from.x = $3.x;
+                   $$->from.y = $3.y;
+                 }
+               }
+       | object_spec WITH path
+               {
+                 $$ = $1;
+                 $$->flags |= HAS_WITH;
+                 $$->with = $3;
+               }
+       | object_spec WITH position                             %prec ','
+               {
+                 $$ = $1;
+                 $$->flags |= HAS_WITH;
+                 position pos;
+                 pos.x = $3.x;
+                 pos.y = $3.y;
+                 $$->with = new path(pos);
+               }
+       | object_spec BY expr_pair
+               {
+                 $$ = $1;
+                 $$->flags |= HAS_SEGMENT;
+                 $$->segment_pos.x += $3.x;
+                 $$->segment_pos.y += $3.y;
+               }
+       | object_spec THEN
+               {
+                 $$ = $1;
+                 if (!($$->flags & HAS_SEGMENT))
+                   switch ($$->dir) {
+                   case UP_DIRECTION:
+                     $$->segment_pos.y += $$->segment_width;
+                     break;
+                   case DOWN_DIRECTION:
+                     $$->segment_pos.y -= $$->segment_width;
+                     break;
+                   case RIGHT_DIRECTION:
+                     $$->segment_pos.x += $$->segment_width;
+                     break;
+                   case LEFT_DIRECTION:
+                     $$->segment_pos.x -= $$->segment_width;
+                     break;
+                   }
+                 $$->segment_list = new segment($$->segment_pos,
+                                                $$->segment_is_absolute,
+                                                $$->segment_list);
+                 $$->flags &= ~HAS_SEGMENT;
+                 $$->segment_pos.x = $$->segment_pos.y = 0.0;
+                 $$->segment_is_absolute = 0;
+               }
+       | object_spec SOLID
+               {
+                 $$ = $1;      // nothing
+               }
+       | object_spec DOTTED
+               {
+                 $$ = $1;
+                 $$->flags |= IS_DOTTED;
+                 lookup_variable("dashwid", & $$->dash_width);
+               }
+       | object_spec DOTTED expr
+               {
+                 $$ = $1;
+                 $$->flags |= IS_DOTTED;
+                 $$->dash_width = $3;
+               }
+       | object_spec DASHED
+               {
+                 $$ = $1;
+                 $$->flags |= IS_DASHED;
+                 lookup_variable("dashwid", & $$->dash_width);
+               }
+       | object_spec DASHED expr
+               {
+                 $$ = $1;
+                 $$->flags |= IS_DASHED;
+                 $$->dash_width = $3;
+               }
+       | object_spec FILL
+               {
+                 $$ = $1;
+                 $$->flags |= IS_DEFAULT_FILLED;
+               }
+       | object_spec FILL expr
+               {
+                 $$ = $1;
+                 $$->flags |= IS_FILLED;
+                 $$->fill = $3;
+               }
+       | object_spec XSLANTED expr
+               {
+                 $$ = $1;
+                 $$->flags |= IS_XSLANTED;
+                 $$->xslanted = $3;
+               }
+       | object_spec YSLANTED expr
+               {
+                 $$ = $1;
+                 $$->flags |= IS_YSLANTED;
+                 $$->yslanted = $3;
+               }
+       | object_spec SHADED text
+               {
+                 $$ = $1;
+                 $$->flags |= (IS_SHADED | IS_FILLED);
+                 $$->shaded = new char[strlen($3.str)+1];
+                 strcpy($$->shaded, $3.str);
+               }
+       | object_spec COLORED text
+               {
+                 $$ = $1;
+                 $$->flags |= (IS_SHADED | IS_OUTLINED | IS_FILLED);
+                 $$->shaded = new char[strlen($3.str)+1];
+                 strcpy($$->shaded, $3.str);
+                 $$->outlined = new char[strlen($3.str)+1];
+                 strcpy($$->outlined, $3.str);
+               }
+       | object_spec OUTLINED text
+               {
+                 $$ = $1;
+                 $$->flags |= IS_OUTLINED;
+                 $$->outlined = new char[strlen($3.str)+1];
+                 strcpy($$->outlined, $3.str);
+               }
+       | object_spec CHOP
+               {
+                 $$ = $1;
+                 // line chop chop means line chop 0 chop 0
+                 if ($$->flags & IS_DEFAULT_CHOPPED) {
+                   $$->flags |= IS_CHOPPED;
+                   $$->flags &= ~IS_DEFAULT_CHOPPED;
+                   $$->start_chop = $$->end_chop = 0.0;
+                 }
+                 else if ($$->flags & IS_CHOPPED) {
+                   $$->end_chop = 0.0;
+                 }
+                 else {
+                   $$->flags |= IS_DEFAULT_CHOPPED;
+                 }
+               }
+       | object_spec CHOP expr
+               {
+                 $$ = $1;
+                 if ($$->flags & IS_DEFAULT_CHOPPED) {
+                   $$->flags |= IS_CHOPPED;
+                   $$->flags &= ~IS_DEFAULT_CHOPPED;
+                   $$->start_chop = 0.0;
+                   $$->end_chop = $3;
+                 }
+                 else if ($$->flags & IS_CHOPPED) {
+                   $$->end_chop = $3;
+                 }
+                 else {
+                   $$->start_chop = $$->end_chop = $3;
+                   $$->flags |= IS_CHOPPED;
+                 }
+               }
+       | object_spec SAME
+               {
+                 $$ = $1;
+                 $$->flags |= IS_SAME;
+               }
+       | object_spec INVISIBLE
+               {
+                 $$ = $1;
+                 $$->flags |= IS_INVISIBLE;
+               }
+       | object_spec LEFT_ARROW_HEAD
+               {
+                 $$ = $1;
+                 $$->flags |= HAS_LEFT_ARROW_HEAD;
+               }
+       | object_spec RIGHT_ARROW_HEAD
+               {
+                 $$ = $1;
+                 $$->flags |= HAS_RIGHT_ARROW_HEAD;
+               }
+       | object_spec DOUBLE_ARROW_HEAD
+               {
+                 $$ = $1;
+                 $$->flags |= (HAS_LEFT_ARROW_HEAD|HAS_RIGHT_ARROW_HEAD);
+               }
+       | object_spec CW
+               {
+                 $$ = $1;
+                 $$->flags |= IS_CLOCKWISE;
+               }
+       | object_spec CCW
+               {
+                 $$ = $1;
+                 $$->flags &= ~IS_CLOCKWISE;
+               }
+       | object_spec text                                      %prec TEXT
+               {
+                 $$ = $1;
+                 text_item **p;
+                 for (p = & $$->text; *p; p = &(*p)->next)
+                   ;
+                 *p = new text_item($2.str, $2.filename, $2.lineno);
+               }
+       | object_spec LJUST
+               {
+                 $$ = $1;
+                 if ($$->text) {
+                   text_item *p;
+                   for (p = $$->text; p->next; p = p->next)
+                     ;
+                   p->adj.h = LEFT_ADJUST;
+                 }
+               }
+       | object_spec RJUST
+               {
+                 $$ = $1;
+                 if ($$->text) {
+                   text_item *p;
+                   for (p = $$->text; p->next; p = p->next)
+                     ;
+                   p->adj.h = RIGHT_ADJUST;
+                 }
+               }
+       | object_spec ABOVE
+               {
+                 $$ = $1;
+                 if ($$->text) {
+                   text_item *p;
+                   for (p = $$->text; p->next; p = p->next)
+                     ;
+                   p->adj.v = ABOVE_ADJUST;
+                 }
+               }
+       | object_spec BELOW
+               {
+                 $$ = $1;
+                 if ($$->text) {
+                   text_item *p;
+                   for (p = $$->text; p->next; p = p->next)
+                     ;
+                   p->adj.v = BELOW_ADJUST;
+                 }
+               }
+       | object_spec THICKNESS expr
+               {
+                 $$ = $1;
+                 $$->flags |= HAS_THICKNESS;
+                 $$->thickness = $3;
+               }
+       | object_spec ALIGNED
+               {
+                 $$ = $1;
+                 $$->flags |= IS_ALIGNED;
+               }
+       ;
+
+text:
+       TEXT
+               { $$ = $1; }
+       | SPRINTF '(' TEXT sprintf_args ')'
+               {
+                 $$.filename = $3.filename;
+                 $$.lineno = $3.lineno;
+                 $$.str = do_sprintf($3.str, $4.v, $4.nv);
+                 a_delete $4.v;
+                 free($3.str);
+               }
+       ;
+
+sprintf_args:
+       /* empty */
+               {
+                 $$.v = 0;
+                 $$.nv = 0;
+                 $$.maxv = 0;
+               }
+       | sprintf_args ',' expr
+               {
+                 $$ = $1;
+                 if ($$.nv >= $$.maxv) {
+                   if ($$.nv == 0) {
+                     $$.v = new double[4];
+                     $$.maxv = 4;
+                   }
+                   else {
+                     double *oldv = $$.v;
+                     $$.maxv *= 2;
+#if 0
+                     $$.v = new double[$$.maxv];
+                     memcpy($$.v, oldv, $$.nv*sizeof(double));
+#else
+                     // workaround for bug in Compaq C++ V6.5-033
+                     // for Compaq Tru64 UNIX V5.1A (Rev. 1885)
+                     double *foo = new double[$$.maxv];
+                     memcpy(foo, oldv, $$.nv*sizeof(double));
+                     $$.v = foo;
+#endif
+                     a_delete oldv;
+                   }
+                 }
+                 $$.v[$$.nv] = $3;
+                 $$.nv += 1;
+               }
+       ;
+
+position:
+       position_not_place
+               { $$ = $1; }
+       | place
+               {
+                 position pos = $1;
+                 $$.x = pos.x;
+                 $$.y = pos.y;
+               }
+       | '(' place ')'
+               {
+                 position pos = $2;
+                 $$.x = pos.x;
+                 $$.y = pos.y;
+               }
+       ;
+
+position_not_place:
+       expr_pair
+               { $$ = $1; }
+       | position '+' expr_pair
+               {
+                 $$.x = $1.x + $3.x;
+                 $$.y = $1.y + $3.y;
+               }
+       | '(' position '+' expr_pair ')'
+               {
+                 $$.x = $2.x + $4.x;
+                 $$.y = $2.y + $4.y;
+               }
+       | position '-' expr_pair
+               {
+                 $$.x = $1.x - $3.x;
+                 $$.y = $1.y - $3.y;
+               }
+       | '(' position '-' expr_pair ')'
+               {
+                 $$.x = $2.x - $4.x;
+                 $$.y = $2.y - $4.y;
+               }
+       | '(' position ',' position ')'
+               {
+                 $$.x = $2.x;
+                 $$.y = $4.y;
+               }
+       | expr between position AND position
+               {
+                 $$.x = (1.0 - $1)*$3.x + $1*$5.x;
+                 $$.y = (1.0 - $1)*$3.y + $1*$5.y;
+               }
+       | '(' expr between position AND position ')'
+               {
+                 $$.x = (1.0 - $2)*$4.x + $2*$6.x;
+                 $$.y = (1.0 - $2)*$4.y + $2*$6.y;
+               }
+       /* the next two rules cause harmless shift/reduce warnings */
+       | expr_not_lower_than '<' position ',' position '>'
+               {
+                 $$.x = (1.0 - $1)*$3.x + $1*$5.x;
+                 $$.y = (1.0 - $1)*$3.y + $1*$5.y;
+               }
+       | '(' expr_not_lower_than '<' position ',' position '>' ')'
+               {
+                 $$.x = (1.0 - $2)*$4.x + $2*$6.x;
+                 $$.y = (1.0 - $2)*$4.y + $2*$6.y;
+               }
+       ;
+
+between:
+       BETWEEN
+       | OF THE WAY BETWEEN
+       ;
+
+expr_pair:
+       expr ',' expr
+               {
+                 $$.x = $1;
+                 $$.y = $3;
+               }
+       | '(' expr_pair ')'
+               { $$ = $2; }
+       ;
+
+place:
+       /* line at A left == line (at A) left */
+       label                                                   %prec CHOP
+               { $$ = $1; }
+       | label corner
+               {
+                 path pth($2);
+                 if (!pth.follow($1, & $$))
+                   YYABORT;
+               }
+       | corner label
+               {
+                 path pth($1);
+                 if (!pth.follow($2, & $$))
+                   YYABORT;
+               }
+       | corner OF label
+               {
+                 path pth($1);
+                 if (!pth.follow($3, & $$))
+                   YYABORT;
+               }
+       | HERE
+               {
+                 $$.x = current_position.x;
+                 $$.y = current_position.y;
+                 $$.obj = 0;
+               }
+       ;
+
+label:
+       LABEL
+               {
+                 place *p = lookup_label($1);
+                 if (!p) {
+                   lex_error("there is no place '%1'", $1);
+                   YYABORT;
+                 }
+                 $$ = *p;
+                 free($1);
+               }
+       | nth_primitive
+               { $$.obj = $1; }
+       | label '.' LABEL
+               {
+                 path pth($3);
+                 if (!pth.follow($1, & $$))
+                   YYABORT;
+               }
+       ;
+
+ordinal:
+       ORDINAL
+               { $$ = $1; }
+       | '`' any_expr TH
+               {
+                 // XXX Check for overflow (and non-integers?).
+                 $$ = (int)$2;
+               }
+       ;
+
+optional_ordinal_last:
+       LAST
+               { $$ = 1; }
+       | ordinal LAST
+               { $$ = $1; }
+       ;
+
+nth_primitive:
+       ordinal object_type
+               {
+                 int count = 0;
+                 object *p;
+                 for (p = olist.head; p != 0; p = p->next)
+                   if (p->type() == $2 && ++count == $1) {
+                     $$ = p;
+                     break;
+                   }
+                 if (p == 0) {
+                   lex_error("there is no %1%2 %3", $1, ordinal_postfix($1),
+                             object_type_name($2));
+                   YYABORT;
+                 }
+               }
+       | optional_ordinal_last object_type
+               {
+                 int count = 0;
+                 object *p;
+                 for (p = olist.tail; p != 0; p = p->prev)
+                   if (p->type() == $2 && ++count == $1) {
+                     $$ = p;
+                     break;
+                   }
+                 if (p == 0) {
+                   lex_error("there is no %1%2 last %3", $1,
+                             ordinal_postfix($1), object_type_name($2));
+                   YYABORT;
+                 }
+               }
+       ;
+
+object_type:
+       BOX
+               { $$ = BOX_OBJECT; }
+       | CIRCLE
+               { $$ = CIRCLE_OBJECT; }
+       | ELLIPSE
+               { $$ = ELLIPSE_OBJECT; }
+       | ARC
+               { $$ = ARC_OBJECT; }
+       | LINE
+               { $$ = LINE_OBJECT; }
+       | ARROW
+               { $$ = ARROW_OBJECT; }
+       | SPLINE
+               { $$ = SPLINE_OBJECT; }
+       | '[' ']'
+               { $$ = BLOCK_OBJECT; }
+       | TEXT
+               { $$ = TEXT_OBJECT; }
+       ;
+
+label_path:
+       '.' LABEL
+               { $$ = new path($2); }
+       | label_path '.' LABEL
+               {
+                 $$ = $1;
+                 $$->append($3);
+               }
+       ;
+
+relative_path:
+       corner                                                  %prec CHOP
+               { $$ = new path($1); }
+       /* give this a lower precedence than LEFT and RIGHT so that
+          [A: box] with .A left == [A: box] with (.A left) */
+       | label_path                                            %prec TEXT
+               { $$ = $1; }
+       | label_path corner
+               {
+                 $$ = $1;
+                 $$->append($2);
+               }
+       ;
+
+path:
+       relative_path
+               { $$ = $1; }
+       | '(' relative_path ',' relative_path ')'
+               {
+                 $$ = $2;
+                 $$->set_ypath($4);
+               }
+       /* The rest of these rules are a compatibility sop. */
+       | ORDINAL LAST object_type relative_path
+               {
+                 lex_warning("'%1%2 last %3' in 'with' argument ignored",
+                             $1, ordinal_postfix($1), object_type_name($3));
+                 $$ = $4;
+               }
+       | LAST object_type relative_path
+               {
+                 lex_warning("'last %1' in 'with' argument ignored",
+                             object_type_name($2));
+                 $$ = $3;
+               }
+       | ORDINAL object_type relative_path
+               {
+                 lex_warning("'%1%2 %3' in 'with' argument ignored",
+                             $1, ordinal_postfix($1), object_type_name($2));
+                 $$ = $3;
+               }
+       | LABEL relative_path
+               {
+                 lex_warning("initial '%1' in 'with' argument ignored", $1);
+                 a_delete $1;
+                 $$ = $2;
+               }
+       ;
+
+corner:
+       DOT_N
+               { $$ = &object::north; }
+       | DOT_E 
+               { $$ = &object::east; }
+       | DOT_W
+               { $$ = &object::west; }
+       | DOT_S
+               { $$ = &object::south; }
+       | DOT_NE
+               { $$ = &object::north_east; }
+       | DOT_SE
+               { $$ = &object:: south_east; }
+       | DOT_NW
+               { $$ = &object::north_west; }
+       | DOT_SW
+               { $$ = &object::south_west; }
+       | DOT_C
+               { $$ = &object::center; }
+       | DOT_START
+               { $$ = &object::start; }
+       | DOT_END
+               { $$ = &object::end; }
+       | TOP
+               { $$ = &object::north; }
+       | BOTTOM
+               { $$ = &object::south; }
+       | LEFT
+               { $$ = &object::west; }
+       | RIGHT
+               { $$ = &object::east; }
+       | UPPER LEFT
+               { $$ = &object::north_west; }
+       | LOWER LEFT
+               { $$ = &object::south_west; }
+       | UPPER RIGHT
+               { $$ = &object::north_east; }
+       | LOWER RIGHT
+               { $$ = &object::south_east; }
+       | LEFT_CORNER
+               { $$ = &object::west; }
+       | RIGHT_CORNER
+               { $$ = &object::east; }
+       | UPPER LEFT_CORNER
+               { $$ = &object::north_west; }
+       | LOWER LEFT_CORNER
+               { $$ = &object::south_west; }
+       | UPPER RIGHT_CORNER
+               { $$ = &object::north_east; }
+       | LOWER RIGHT_CORNER
+               { $$ = &object::south_east; }
+       | NORTH
+               { $$ = &object::north; }
+       | SOUTH
+               { $$ = &object::south; }
+       | EAST
+               { $$ = &object::east; }
+       | WEST
+               { $$ = &object::west; }
+       | CENTER
+               { $$ = &object::center; }
+       | START
+               { $$ = &object::start; }
+       | END
+               { $$ = &object::end; }
+       ;
+
+expr:
+       expr_lower_than
+               { $$ = $1; }
+       | expr_not_lower_than
+               { $$ = $1; }
+       ;
+
+expr_lower_than:
+       expr '<' expr
+               { $$ = ($1 < $3); }
+       ;
+
+expr_not_lower_than:
+       VARIABLE
+               {
+                 if (!lookup_variable($1, & $$)) {
+                   lex_error("there is no variable '%1'", $1);
+                   YYABORT;
+                 }
+                 free($1);
+               }
+       | NUMBER
+               { $$ = $1; }
+       | place DOT_X
+               {
+                 if ($1.obj != 0)
+                   $$ = $1.obj->origin().x;
+                 else
+                   $$ = $1.x;
+               }                       
+       | place DOT_Y
+               {
+                 if ($1.obj != 0)
+                   $$ = $1.obj->origin().y;
+                 else
+                   $$ = $1.y;
+               }
+       | place DOT_HT
+               {
+                 if ($1.obj != 0)
+                   $$ = $1.obj->height();
+                 else
+                   $$ = 0.0;
+               }
+       | place DOT_WID
+               {
+                 if ($1.obj != 0)
+                   $$ = $1.obj->width();
+                 else
+                   $$ = 0.0;
+               }
+       | place DOT_RAD
+               {
+                 if ($1.obj != 0)
+                   $$ = $1.obj->radius();
+                 else
+                   $$ = 0.0;
+               }
+       | expr '+' expr
+               { $$ = $1 + $3; }
+       | expr '-' expr
+               { $$ = $1 - $3; }
+       | expr '*' expr
+               { $$ = $1 * $3; }
+       | expr '/' expr
+               {
+                 if ($3 == 0.0) {
+                   lex_error("division by zero");
+                   YYABORT;
+                 }
+                 $$ = $1/$3;
+               }
+       | expr '%' expr
+               {
+                 if ($3 == 0.0) {
+                   lex_error("modulus by zero");
+                   YYABORT;
+                 }
+                 $$ = fmod($1, $3);
+               }
+       | expr '^' expr
+               {
+                 errno = 0;
+                 $$ = pow($1, $3);
+                 if (errno == EDOM) {
+                   lex_error("arguments to '^' operator out of domain");
+                   YYABORT;
+                 }
+                 if (errno == ERANGE) {
+                   lex_error("result of '^' operator out of range");
+                   YYABORT;
+                 }
+               }
+       | '-' expr                                              %prec '!'
+               { $$ = -$2; }
+       | '(' any_expr ')'
+               { $$ = $2; }
+       | SIN '(' any_expr ')'
+               {
+                 errno = 0;
+                 $$ = sin($3);
+                 if (errno == ERANGE) {
+                   lex_error("sin result out of range");
+                   YYABORT;
+                 }
+               }
+       | COS '(' any_expr ')'
+               {
+                 errno = 0;
+                 $$ = cos($3);
+                 if (errno == ERANGE) {
+                   lex_error("cos result out of range");
+                   YYABORT;
+                 }
+               }
+       | ATAN2 '(' any_expr ',' any_expr ')'
+               {
+                 errno = 0;
+                 $$ = atan2($3, $5);
+                 if (errno == EDOM) {
+                   lex_error("atan2 argument out of domain");
+                   YYABORT;
+                 }
+                 if (errno == ERANGE) {
+                   lex_error("atan2 result out of range");
+                   YYABORT;
+                 }
+               }
+       | LOG '(' any_expr ')'
+               {
+                 errno = 0;
+                 $$ = log10($3);
+                 if (errno == ERANGE) {
+                   lex_error("log result out of range");
+                   YYABORT;
+                 }
+               }
+       | EXP '(' any_expr ')'
+               {
+                 errno = 0;
+                 $$ = pow(10.0, $3);
+                 if (errno == ERANGE) {
+                   lex_error("exp result out of range");
+                   YYABORT;
+                 }
+               }
+       | SQRT '(' any_expr ')'
+               {
+                 errno = 0;
+                 $$ = sqrt($3);
+                 if (errno == EDOM) {
+                   lex_error("sqrt argument out of domain");
+                   YYABORT;
+                 }
+               }
+       | K_MAX '(' any_expr ',' any_expr ')'
+               { $$ = $3 > $5 ? $3 : $5; }
+       | K_MIN '(' any_expr ',' any_expr ')'
+               { $$ = $3 < $5 ? $3 : $5; }
+       | INT '(' any_expr ')'
+               { $$ = $3 < 0 ? -floor(-$3) : floor($3); }
+       | RAND '(' any_expr ')'
+               { $$ = 1.0 + floor(((rand()&0x7fff)/double(0x7fff))*$3); }
+       | RAND '(' ')'
+               {
+                 /* return a random number in the range [0,1) */
+                 /* portable, but not very random */
+                 $$ = (rand() & 0x7fff) / double(0x8000);
+               }
+       | SRAND '(' any_expr ')'
+               {
+                 $$ = 0;
+                 srand((unsigned int)$3);
+               }
+       | expr LESSEQUAL expr
+               { $$ = ($1 <= $3); }
+       | expr '>' expr
+               { $$ = ($1 > $3); }
+       | expr GREATEREQUAL expr
+               { $$ = ($1 >= $3); }
+       | expr EQUALEQUAL expr
+               { $$ = ($1 == $3); }
+       | expr NOTEQUAL expr
+               { $$ = ($1 != $3); }
+       | expr ANDAND expr
+               { $$ = ($1 != 0.0 && $3 != 0.0); }
+       | expr OROR expr
+               { $$ = ($1 != 0.0 || $3 != 0.0); }
+       | '!' expr
+               { $$ = ($2 == 0.0); }
+
+       ;
+
+%%
+
+/* bison defines const to be empty unless __STDC__ is defined, which it
+isn't under cfront */
+
+#ifdef const
+#undef const
+#endif
+
+static struct {
+  const char *name;
+  double val;
+  int scaled;               // non-zero if val should be multiplied by scale
+} defaults_table[] = {
+  { "arcrad", .25, 1 },
+  { "arrowht", .1, 1 },
+  { "arrowwid", .05, 1 },
+  { "circlerad", .25, 1 },
+  { "boxht", .5, 1 },
+  { "boxwid", .75, 1 },
+  { "boxrad", 0.0, 1 },
+  { "dashwid", .05, 1 },
+  { "ellipseht", .5, 1 },
+  { "ellipsewid", .75, 1 },
+  { "moveht", .5, 1 },
+  { "movewid", .5, 1 },
+  { "lineht", .5, 1 },
+  { "linewid", .5, 1 },
+  { "textht", 0.0, 1 },
+  { "textwid", 0.0, 1 },
+  { "scale", 1.0, 0 },
+  { "linethick", -1.0, 0 },            // in points
+  { "fillval", .5, 0 },
+  { "arrowhead", 1.0, 0 },
+  { "maxpswid", 8.5, 0 },
+  { "maxpsht", 11.0, 0 },
+};
+
+place *lookup_label(const char *label)
+{
+  saved_state *state = current_saved_state;
+  PTABLE(place) *tbl = current_table;
+  for (;;) {
+    place *pl = tbl->lookup(label);
+    if (pl)
+      return pl;
+    if (!state)
+      return 0;
+    tbl = state->tbl;
+    state = state->prev;
+  }
+}
+
+void define_label(const char *label, const place *pl)
+{
+  place *p = new place[1];
+  *p = *pl;
+  current_table->define(label, p);
+}
+
+int lookup_variable(const char *name, double *val)
+{
+  place *pl = lookup_label(name);
+  if (pl) {
+    *val = pl->x;
+    return 1;
+  }
+  return 0;
+}
+
+void define_variable(const char *name, double val)
+{
+  place *p = new place[1];
+  p->obj = 0;
+  p->x = val;
+  p->y = 0.0;
+  current_table->define(name, p);
+  if (strcmp(name, "scale") == 0) {
+    // When the scale changes, reset all scaled pre-defined variables to
+    // their default values.
+    for (unsigned int i = 0;
+        i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++) 
+      if (defaults_table[i].scaled)
+       define_variable(defaults_table[i].name, val*defaults_table[i].val);
+  }
+}
+
+// called once only (not once per parse)
+
+void parse_init()
+{
+  current_direction = RIGHT_DIRECTION;
+  current_position.x = 0.0;
+  current_position.y = 0.0;
+  // This resets everything to its default value.
+  reset_all();
+}
+
+void reset(const char *nm)
+{
+  for (unsigned int i = 0;
+       i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
+    if (strcmp(nm, defaults_table[i].name) == 0) {
+      double val = defaults_table[i].val;
+      if (defaults_table[i].scaled) {
+       double scale;
+       lookup_variable("scale", &scale);
+       val *= scale;
+      }
+      define_variable(defaults_table[i].name, val);
+      return;
+    }
+  lex_error("'%1' is not a predefined variable", nm);
+}
+
+void reset_all()
+{
+  // We only have to explicitly reset the pre-defined variables that
+  // aren't scaled because 'scale' is not scaled, and changing the
+  // value of 'scale' will reset all the pre-defined variables that
+  // are scaled.
+  for (unsigned int i = 0;
+       i < sizeof(defaults_table)/sizeof(defaults_table[0]); i++)
+    if (!defaults_table[i].scaled)
+      define_variable(defaults_table[i].name, defaults_table[i].val);
+}
+
+// called after each parse
+
+void parse_cleanup()
+{
+  while (current_saved_state != 0) {
+    delete current_table;
+    current_table = current_saved_state->tbl;
+    saved_state *tem = current_saved_state;
+    current_saved_state = current_saved_state->prev;
+    delete tem;
+  }
+  assert(current_table == &top_table);
+  PTABLE_ITERATOR(place) iter(current_table);
+  const char *key;
+  place *pl;
+  while (iter.next(&key, &pl))
+    if (pl->obj != 0) {
+      position pos = pl->obj->origin();
+      pl->obj = 0;
+      pl->x = pos.x;
+      pl->y = pos.y;
+    }
+  while (olist.head != 0) {
+    object *tem = olist.head;
+    olist.head = olist.head->next;
+    delete tem;
+  }
+  olist.tail = 0;
+  current_direction = RIGHT_DIRECTION;
+  current_position.x = 0.0;
+  current_position.y = 0.0;
+}
+
+const char *ordinal_postfix(int n)
+{
+  if (n < 10 || n > 20)
+    switch (n % 10) {
+    case 1:
+      return "st";
+    case 2:
+      return "nd";
+    case 3:
+      return "rd";
+    }
+  return "th";
+}
+
+const char *object_type_name(object_type type)
+{
+  switch (type) {
+  case BOX_OBJECT:
+    return "box";
+  case CIRCLE_OBJECT:
+    return "circle";
+  case ELLIPSE_OBJECT:
+    return "ellipse";
+  case ARC_OBJECT:
+    return "arc";
+  case SPLINE_OBJECT:
+    return "spline";
+  case LINE_OBJECT:
+    return "line";
+  case ARROW_OBJECT:
+    return "arrow";
+  case MOVE_OBJECT:
+    return "move";
+  case TEXT_OBJECT:
+    return "\"\"";
+  case BLOCK_OBJECT:
+    return "[]";
+  case OTHER_OBJECT:
+  case MARK_OBJECT:
+  default:
+    break;
+  }
+  return "object";
+}
+
+static char sprintf_buf[1024];
+
+char *format_number(const char *form, double n)
+{
+  if (form == 0)
+    form = "%g";
+  return do_sprintf(form, &n, 1);
+}
+
+char *do_sprintf(const char *form, const double *v, int nv)
+{
+  string result;
+  int i = 0;
+  string one_format;
+  while (*form) {
+    if (*form == '%') {
+      one_format += *form++;
+      for (; *form != '\0' && strchr("#-+ 0123456789.", *form) != 0; form++)
+       one_format += *form;
+      if (*form == '\0' || strchr("eEfgG%", *form) == 0) {
+       lex_error("bad sprintf format");
+       result += one_format;
+       result += form;
+       break;
+      }
+      if (*form == '%') {
+       one_format += *form++;
+       one_format += '\0';
+       snprintf(sprintf_buf, sizeof(sprintf_buf),
+                "%s", one_format.contents());
+      }
+      else {
+       if (i >= nv) {
+         lex_error("too few arguments to snprintf");
+         result += one_format;
+         result += form;
+         break;
+       }
+       one_format += *form++;
+       one_format += '\0';
+       snprintf(sprintf_buf, sizeof(sprintf_buf),
+                one_format.contents(), v[i++]);
+      }
+      one_format.clear();
+      result += sprintf_buf;
+    }
+    else
+      result += *form++;
+  }
+  result += '\0';
+  return strsave(result.contents());
+}
diff --git a/src/preproc/pic/pic_tab.h b/src/preproc/pic/pic_tab.h
deleted file mode 100644 (file)
index c5c6ac7..0000000
+++ /dev/null
@@ -1,331 +0,0 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
-
-/* Bison interface for Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
-
-   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 3 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, see <http://www.gnu.org/licenses/>.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-#ifndef YY_YY_Y_TAB_H_INCLUDED
-# define YY_YY_Y_TAB_H_INCLUDED
-/* Debug traces.  */
-#ifndef YYDEBUG
-# define YYDEBUG 0
-#endif
-#if YYDEBUG
-extern int yydebug;
-#endif
-
-/* Token type.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-  enum yytokentype
-  {
-    LABEL = 258,
-    VARIABLE = 259,
-    NUMBER = 260,
-    TEXT = 261,
-    COMMAND_LINE = 262,
-    DELIMITED = 263,
-    ORDINAL = 264,
-    TH = 265,
-    LEFT_ARROW_HEAD = 266,
-    RIGHT_ARROW_HEAD = 267,
-    DOUBLE_ARROW_HEAD = 268,
-    LAST = 269,
-    BOX = 270,
-    CIRCLE = 271,
-    ELLIPSE = 272,
-    ARC = 273,
-    LINE = 274,
-    ARROW = 275,
-    MOVE = 276,
-    SPLINE = 277,
-    HEIGHT = 278,
-    RADIUS = 279,
-    FIGNAME = 280,
-    WIDTH = 281,
-    DIAMETER = 282,
-    UP = 283,
-    DOWN = 284,
-    RIGHT = 285,
-    LEFT = 286,
-    FROM = 287,
-    TO = 288,
-    AT = 289,
-    WITH = 290,
-    BY = 291,
-    THEN = 292,
-    SOLID = 293,
-    DOTTED = 294,
-    DASHED = 295,
-    CHOP = 296,
-    SAME = 297,
-    INVISIBLE = 298,
-    LJUST = 299,
-    RJUST = 300,
-    ABOVE = 301,
-    BELOW = 302,
-    OF = 303,
-    THE = 304,
-    WAY = 305,
-    BETWEEN = 306,
-    AND = 307,
-    HERE = 308,
-    DOT_N = 309,
-    DOT_E = 310,
-    DOT_W = 311,
-    DOT_S = 312,
-    DOT_NE = 313,
-    DOT_SE = 314,
-    DOT_NW = 315,
-    DOT_SW = 316,
-    DOT_C = 317,
-    DOT_START = 318,
-    DOT_END = 319,
-    DOT_X = 320,
-    DOT_Y = 321,
-    DOT_HT = 322,
-    DOT_WID = 323,
-    DOT_RAD = 324,
-    SIN = 325,
-    COS = 326,
-    ATAN2 = 327,
-    LOG = 328,
-    EXP = 329,
-    SQRT = 330,
-    K_MAX = 331,
-    K_MIN = 332,
-    INT = 333,
-    RAND = 334,
-    SRAND = 335,
-    COPY = 336,
-    THRU = 337,
-    TOP = 338,
-    BOTTOM = 339,
-    UPPER = 340,
-    LOWER = 341,
-    SH = 342,
-    PRINT = 343,
-    CW = 344,
-    CCW = 345,
-    FOR = 346,
-    DO = 347,
-    IF = 348,
-    ELSE = 349,
-    ANDAND = 350,
-    OROR = 351,
-    NOTEQUAL = 352,
-    EQUALEQUAL = 353,
-    LESSEQUAL = 354,
-    GREATEREQUAL = 355,
-    LEFT_CORNER = 356,
-    RIGHT_CORNER = 357,
-    NORTH = 358,
-    SOUTH = 359,
-    EAST = 360,
-    WEST = 361,
-    CENTER = 362,
-    END = 363,
-    START = 364,
-    RESET = 365,
-    UNTIL = 366,
-    PLOT = 367,
-    THICKNESS = 368,
-    FILL = 369,
-    COLORED = 370,
-    OUTLINED = 371,
-    SHADED = 372,
-    XSLANTED = 373,
-    YSLANTED = 374,
-    ALIGNED = 375,
-    SPRINTF = 376,
-    COMMAND = 377,
-    DEFINE = 378,
-    UNDEF = 379
-  };
-#endif
-/* Tokens.  */
-#define LABEL 258
-#define VARIABLE 259
-#define NUMBER 260
-#define TEXT 261
-#define COMMAND_LINE 262
-#define DELIMITED 263
-#define ORDINAL 264
-#define TH 265
-#define LEFT_ARROW_HEAD 266
-#define RIGHT_ARROW_HEAD 267
-#define DOUBLE_ARROW_HEAD 268
-#define LAST 269
-#define BOX 270
-#define CIRCLE 271
-#define ELLIPSE 272
-#define ARC 273
-#define LINE 274
-#define ARROW 275
-#define MOVE 276
-#define SPLINE 277
-#define HEIGHT 278
-#define RADIUS 279
-#define FIGNAME 280
-#define WIDTH 281
-#define DIAMETER 282
-#define UP 283
-#define DOWN 284
-#define RIGHT 285
-#define LEFT 286
-#define FROM 287
-#define TO 288
-#define AT 289
-#define WITH 290
-#define BY 291
-#define THEN 292
-#define SOLID 293
-#define DOTTED 294
-#define DASHED 295
-#define CHOP 296
-#define SAME 297
-#define INVISIBLE 298
-#define LJUST 299
-#define RJUST 300
-#define ABOVE 301
-#define BELOW 302
-#define OF 303
-#define THE 304
-#define WAY 305
-#define BETWEEN 306
-#define AND 307
-#define HERE 308
-#define DOT_N 309
-#define DOT_E 310
-#define DOT_W 311
-#define DOT_S 312
-#define DOT_NE 313
-#define DOT_SE 314
-#define DOT_NW 315
-#define DOT_SW 316
-#define DOT_C 317
-#define DOT_START 318
-#define DOT_END 319
-#define DOT_X 320
-#define DOT_Y 321
-#define DOT_HT 322
-#define DOT_WID 323
-#define DOT_RAD 324
-#define SIN 325
-#define COS 326
-#define ATAN2 327
-#define LOG 328
-#define EXP 329
-#define SQRT 330
-#define K_MAX 331
-#define K_MIN 332
-#define INT 333
-#define RAND 334
-#define SRAND 335
-#define COPY 336
-#define THRU 337
-#define TOP 338
-#define BOTTOM 339
-#define UPPER 340
-#define LOWER 341
-#define SH 342
-#define PRINT 343
-#define CW 344
-#define CCW 345
-#define FOR 346
-#define DO 347
-#define IF 348
-#define ELSE 349
-#define ANDAND 350
-#define OROR 351
-#define NOTEQUAL 352
-#define EQUALEQUAL 353
-#define LESSEQUAL 354
-#define GREATEREQUAL 355
-#define LEFT_CORNER 356
-#define RIGHT_CORNER 357
-#define NORTH 358
-#define SOUTH 359
-#define EAST 360
-#define WEST 361
-#define CENTER 362
-#define END 363
-#define START 364
-#define RESET 365
-#define UNTIL 366
-#define PLOT 367
-#define THICKNESS 368
-#define FILL 369
-#define COLORED 370
-#define OUTLINED 371
-#define SHADED 372
-#define XSLANTED 373
-#define YSLANTED 374
-#define ALIGNED 375
-#define SPRINTF 376
-#define COMMAND 377
-#define DEFINE 378
-#define UNDEF 379
-
-/* Value type.  */
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
-union YYSTYPE
-{
-#line 65 "pic.y" /* yacc.c:1909  */
-
-       char *str;
-       int n;
-       double x;
-       struct { double x, y; } pair;
-       struct { double x; char *body; } if_data;
-       struct { char *str; const char *filename; int lineno; } lstr;
-       struct { double *v; int nv; int maxv; } dv;
-       struct { double val; int is_multiplicative; } by;
-       place pl;
-       object *obj;
-       corner crn;
-       path *pth;
-       object_spec *spec;
-       saved_state *pstate;
-       graphics_state state;
-       object_type obtype;
-
-#line 321 "y.tab.h" /* yacc.c:1909  */
-};
-# define YYSTYPE_IS_TRIVIAL 1
-# define YYSTYPE_IS_DECLARED 1
-#endif
-
-
-extern YYSTYPE yylval;
-
-int yyparse (void);
-
-#endif /* !YY_YY_Y_TAB_H_INCLUDED  */
index fae24da7159a61fb8989ad64d27373546d02e1d1..2d915da9c101445c1d441b1917171435993a8be9 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 struct place;
 struct position {
index b7f72b66ccbcb0cb7b19866930a6be5af1977476..5dae49e381053cdf5397c27071cde0f39b617203 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "pic.h"
 
@@ -428,7 +428,7 @@ void tpic_output::command(const char *s, const char *filename, int lineno)
       int temp = (int)strtol(p, &ptr, 10);
       if (temp == 0 && ptr == p)
        error_with_file_and_line(filename, lineno,
-                                "argument to `.ps' not an integer");
+                                "argument to '.ps' not an integer");
       else if (temp < 0)
        error_with_file_and_line(filename, lineno,
                                 "negative pen size");
index 60e7643ee7e564aef9c0ddb5395fe2b96fda58c3..ad4caf8869589cf0054adf89d12b203b26e56ea6 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 enum hadjustment {
index 112b94a3deb2de9daa682bf3553876b56dcb1ba6..0e47b57882334d9475b2d0734b8c349089ba2a7e 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "pic.h"
 #include "common.h"
@@ -268,7 +268,7 @@ inline position troff_output::transform(const position &pos)
 // if the aligned attribute is used.
 #define GROPS_REG "0p"
 
-// If this register is defined, geqn won't produce `\x's.
+// If this register is defined, geqn won't produce '\x's.
 #define EQN_NO_EXTRA_SPACE_REG "0x"
 
 void troff_output::start_picture(double sc,
@@ -421,7 +421,7 @@ static const char *choose_delimiter(const char *text)
 void troff_output::text(const position &center, text_piece *v, int n,
                        double ang)
 {
-  line_thickness(BAD_THICKNESS); // the text might use lines (eg in equations)
+  line_thickness(BAD_THICKNESS); // text might use lines (e.g., in equations)
   int rotate_flag = 0;
   if (driver_extension_flag && ang != 0.0) {
     rotate_flag = 1;
@@ -514,12 +514,12 @@ void troff_output::reset_color()
   if (driver_extension_flag) {
     if (last_filled) {
       printf(".fcolor\n");
-      a_delete last_filled;
+      free(last_filled);
       last_filled = 0;
     }
     if (last_outlined) {
       printf(".gcolor\n");
-      a_delete last_outlined;
+      free(last_outlined);
       last_outlined = 0;
     }
   }
diff --git a/src/preproc/preconv/Makefile.sub b/src/preproc/preconv/Makefile.sub
deleted file mode 100644 (file)
index 23f7393..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# Makefile.sub for `preproc preconv'
-#
-# File position: <groff-source>/src/preproc/preconv/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=preconv$(EXEEXT)
-MAN1=preconv.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-EXTRA_LDFLAGS=$(LIBICONV)
-OBJS=preconv.$(OBJEXT)
-CCSRCS=$(srcdir)/preconv.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/preproc/preconv/preconv.1.man b/src/preproc/preconv/preconv.1.man
new file mode 100644 (file)
index 0000000..457981f
--- /dev/null
@@ -0,0 +1,374 @@
+.TH PRECONV @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+preconv \- convert encoding of input files to something GNU troff \
+understands
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr preconv_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2006-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY preconv
+.OP \-dr
+.OP \-D default_encoding
+.OP \-e encoding
+.RI [ file
+\&.\|.\|.\&]
+.
+.SY preconv
+.B \-h
+.SY preconv
+.B \-\-help
+.YS
+.
+.SY preconv
+.B \-v
+.SY preconv
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B preconv
+reads
+.I files
+and converts its encoding(s) to a form GNU
+.BR troff (@MAN1EXT@)
+can process, sending the data to standard output.
+.
+Currently, this means ASCII characters and \[oq]\e[uXXXX]\[cq]
+entities, where \[oq]XXXX\[cq] is a hexadecimal number with four to
+six digits, representing a Unicode input code.
+.
+Normally,
+.B preconv
+should be invoked with the
+.B \-k
+and
+.B \-K
+options of
+.BR groff .
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.B \-d
+Emit debugging messages to standard error (mainly the used encoding).
+.
+.TP
+.BI \-D encoding
+Specify default encoding if everything fails (see below).
+.
+.TP
+.BI \-e encoding
+Specify input encoding explicitly, overriding all other methods.
+.
+This corresponds to
+.BR groff 's
+.BI \-K encoding
+option.
+.
+Without this switch,
+.B preconv
+uses the algorithm described below to select the input encoding.
+.
+.TP
+.B \-\-help
+.TQ
+.B \-h
+Print a help message and exit.
+.
+.TP
+.B \-r
+Do not add \&.lf requests.
+.
+.TP
+.B \-\-version
+.TQ
+.B \-v
+Print the version number and exit.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+.B preconv
+tries to find the input encoding with the following algorithm.
+.
+.IP 1.
+If the input encoding has been explicitly specified with option
+.BR \-e ,
+use it.
+.
+.IP 2.
+Otherwise, check whether the input starts with a
+.I Byte Order Mark
+(BOM, see below).
+.
+If found, use it.
+.
+.IP 3.
+Otherwise, check whether there is a known
+.I coding tag
+(see below) in either the first or second input line.
+.
+If found, use it.
+.
+.IP 4
+Finally, if the
+.B uchardet
+library
+(an encoding detector library available on most major distributions)
+is available on the system, use it to try to detect the encoding of the file.
+.
+.IP 5.
+If everything fails, use a default encoding as given with option
+.BR \-D ,
+by the current locale, or \[oq]latin1\[cq] if the locale is set to
+\[oq]C\[cq], \[oq]POSIX\[cq], or empty (in that order).
+.
+.
+.PP
+Note that the
+.B groff
+program supports a
+.I \%GROFF_ENCODING
+environment variable which is eventually expanded to option
+.BR \-k .
+.
+.
+.\" ====================================================================
+.SS "Byte Order Mark"
+.\" ====================================================================
+.
+The Unicode Standard defines character U+FEFF as the Byte Order Mark
+(BOM).
+.
+On the other hand, value U+FFFE is guaranteed not be a Unicode character at
+all.
+.
+This allows detection of the byte order within the data stream (either
+big-endian or little-endian), and the MIME encodings \%\[oq]UTF-16\[cq]
+and \%\[oq]UTF-32\[cq] mandate that the data stream starts with U+FEFF.
+.
+Similarly, the data stream encoded as \%\[oq]UTF-8\[cq] might start
+with a BOM (to ease the conversion from and to \%UTF-16 and \%UTF-32).
+.
+In all cases, the byte order mark is
+.I not
+part of the data but part of the encoding protocol; in other words,
+.BR preconv 's
+output doesn't contain it.
+.
+.
+.PP
+Note that U+FEFF not at the start of the input data actually is
+emitted; it has then the meaning of a \[oq]zero width no-break
+space\[cq] character \[en] something not needed normally in
+.BR groff .
+.
+.
+.\" ====================================================================
+.SS "Coding Tags"
+.\" ====================================================================
+.
+Editors which support more than a single character encoding need tags
+within the input files to mark the file's encoding.
+.
+While it is possible to guess the right input encoding with the help of
+heuristic algorithms for data which represents a greater amount of a natural
+language, it is still just a guess.
+.
+Additionally, all algorithms fail easily for input which is either too short
+or doesn't represent a natural language.
+.
+.
+.PP
+For these reasons,
+.B preconv
+supports the coding tag convention (with some restrictions) as used by
+.B "GNU Emacs"
+and
+.B XEmacs
+(and probably other programs too).
+.
+.
+.PP
+Coding tags in
+.B "GNU Emacs"
+and
+.B XEmacs
+are stored in so-called
+.IR "File Variables" .
+.
+.B preconv
+recognizes the following syntax form which must be put into a troff comment
+in the first or second line.
+.
+.RS
+.PP
+\-*\-
+.IR tag1 :
+.IR value1 ;
+.IR tag2 :
+.IR value2 ;
+\&.\|.\|.\& \-*\-
+.RE
+.
+.
+.PP
+The only relevant tag for
+.B preconv
+is \[oq]coding\[cq] which can take the values listed below.
+.
+Here an example line which tells
+.B Emacs
+to edit a file in troff mode, and to use \%latin2 as its encoding.
+.
+.RS
+.PP
+.EX
+\&.\[rs]" \-*\- mode: troff; coding: latin-2 \-*\-
+.EE
+.RE
+.
+.
+.PP
+The following list gives all MIME coding tags (either lowercase or
+uppercase) supported by
+.BR preconv ;
+this list is hard-coded in the source.
+.
+.RS
+.PP
+.ad l
+\%big5, \%cp1047, \%euc-jp, \%euc-kr, \%gb2312, \%iso-8859-1,
+\%iso-8859-2, \%iso-8859-5, \%iso-8859-7, \%iso-8859-9, \%iso-8859-13,
+\%iso-8859-15, \%koi8-r, \%us-ascii, \%utf-8, \%utf-16, \%utf-16be,
+\%utf-16le
+.ad
+.RE
+.
+.
+.PP
+In addition, the following hard-coded list of other tags is recognized
+which eventually map to values from the list above.
+.
+.RS
+.PP
+.ad l
+\%ascii, \%chinese-big5, \%chinese-euc, \%chinese-iso-8bit, \%cn-big5,
+\%\%cn-gb, \%cn-gb-2312, \%cp878, \%csascii, \%csisolatin1,
+\%cyrillic-iso-8bit, \%cyrillic-koi8, \%euc-china, \%euc-cn,
+\%euc-japan, \%euc-japan-1990, \%euc-korea, \%greek-iso-8bit,
+\%iso-10646/utf8, \%iso-10646/utf-8, \%iso-latin-1, \%iso-latin-2,
+\%iso-latin-5, \%iso-latin-7, \%iso-latin-9, \%japanese-euc,
+\%japanese-iso-8bit, \%jis8, \%koi8, \%korean-euc, \%korean-iso-8bit,
+\%latin-0, \%latin1, \%latin-1, \%latin-2, \%latin-5, \%latin-7,
+\%latin-9, \%mule-utf-8, \%mule-utf-16, \%mule-utf-16be,
+\%mule-utf-16-be, \%mule-utf-16be-with-signature, \%mule-utf-16le,
+\%mule-utf-16-le, \%mule-utf-16le-with-signature, \%utf8, \%utf-16-be,
+\%utf-16-be-with-signature, \%utf-16be-with-signature, \%utf-16-le,
+\%utf-16-le-with-signature, \%utf-16le-with-signature
+.ad
+.RE
+.
+.
+.PP
+Those tags are taken from
+.B "GNU Emacs"
+and
+.BR XEmacs ,
+together with some aliases.
+.
+Trailing \%\[oq]-dos\[cq], \%\[oq]-unix\[cq], and \%\[oq]-mac\[cq]
+suffixes of coding tags (which give the end-of-line convention used in
+the file) are stripped off before the comparison with the above tags
+happens.
+.
+.SS "Iconv Issues"
+.B preconv
+by itself only supports three encodings: \%latin-1, cp1047, and \%UTF-8;
+all other encodings are passed to the
+.B iconv
+library functions.
+.
+At compile time it is searched and checked for a valid
+.B iconv
+implementation; a call to \[oq]preconv \-\-version\[cq] shows whether
+.B iconv
+is used.
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+.
+.B preconv
+doesn't support
+.I "local variable lists"
+yet.
+.
+This is a different syntax form to specify local variables at the end of a
+file.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR groff (@MAN1EXT@)
+.br
+the
+.B "GNU Emacs"
+and
+.B XEmacs
+info pages
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[preconv_C]
+.
+.
+.\" Emacs setting
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/preproc/preconv/preconv.am b/src/preproc/preconv/preconv.am
new file mode 100644 (file)
index 0000000..d0479cb
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += preconv
+preconv_LDADD = libgroff.a $(LIBM) $(LIBICONV) $(UCHARDET_LIBS) lib/libgnu.a
+preconv_SOURCES = src/preproc/preconv/preconv.cpp
+preconv_CPPFLAGS = $(AM_CPPFLAGS) $(UCHARDET_CFLAGS)
+man1_MANS += src/preproc/preconv/preconv.1
+EXTRA_DIST += src/preproc/preconv/preconv.1.man
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index e965fcad4b1185ceefda8e4d25930f7c3a50e6be..50f1c42d5e561dd5f517d5ca34d6cc694ac6f791 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2005-201 Free Software Foundation, Inc.
+/* Copyright (C) 2005-2018 Free Software Foundation, Inc.
      Written by Werner Lemberg (wl@gnu.org)
 
 This file is part of groff.
@@ -15,18 +15,23 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
 #include <assert.h>
 #include <stdlib.h>
 #include <errno.h>
+#include <sys/stat.h>
+#ifdef HAVE_UCHARDET
+#include <uchardet/uchardet.h>
+#endif
 #include "errarg.h"
 #include "error.h"
 #include "localcharset.h"
 #include "nonposix.h"
 #include "stringclass.h"
+#include "lf.h"
 
 #include <locale.h>
 
@@ -60,22 +65,22 @@ struct conversion {
 //
 // For encodings which don't have a MIME tag we use GNU iconv's encoding
 // names (which also work with the portable GNU libiconv package).  They
-// are marked with `*'.
+// are marked with '*'.
 //
 // Encodings specific to XEmacs and Emacs are marked as such; no mark means
 // that they are used by both Emacs and XEmacs.
 //
-// Encodings marked with `--' are special to Emacs, XEmacs, or other
+// Encodings marked with '--' are special to Emacs, XEmacs, or other
 // applications and shouldn't be used for data exchange.
 //
-// `Not covered' means that the encoding can be handled neither by GNU iconv
+// 'Not covered' means that the encoding can be handled neither by GNU iconv
 // nor by libiconv, or just one of them has support for it.
 //
 // A special case is VIQR encoding: Despite of having a MIME tag it is
 // missing in both libiconv 1.10 and iconv (coming with GNU libc 2.3.6).
 //
-// Finally, we add all aliases of GNU iconv for `ascii', `latin1', and
-// `utf8' to catch those encoding names before iconv is called.
+// Finally, we add all aliases of GNU iconv for 'ascii', 'latin1', and
+// 'utf8' to catch those encoding names before iconv is called.
 //
 // Note that most entries are commented out -- only a small, (rather)
 // reliable and stable subset of encodings is recognized (for coding tags)
@@ -412,7 +417,7 @@ unicode_entity(int u)
 }
 
 // ---------------------------------------------------------
-// Conversion functions.  All functions take `data', which
+// Conversion functions.  All functions take 'data', which
 // normally holds the first two lines, and a file pointer.
 // ---------------------------------------------------------
 
@@ -658,7 +663,7 @@ conversion_iconv(FILE *fp, const string &data, char *enc)
   iconv_t handle = iconv_open(UNICODE, enc);
   if (handle == (iconv_t)-1) {
     if (errno == EINVAL) {
-      error("encoding system `%1' not supported by iconv()", enc);
+      error("encoding system '%1' not supported by iconv()", enc);
       return;
     }
     fatal("iconv_open failed");
@@ -667,7 +672,7 @@ conversion_iconv(FILE *fp, const string &data, char *enc)
   int outbuf[BUFSIZ];
   char *outptr = (char *)outbuf;
   size_t outbytes_left = BUFSIZ * sizeof (int);
-  // Handle `data'.
+  // Handle 'data'.
   char *inptr = (char *)data.contents();
   size_t inbytes_left = data.length();
   char *limit;
@@ -691,13 +696,13 @@ conversion_iconv(FILE *fp, const string &data, char *enc)
        outbytes_left = BUFSIZ * sizeof (int) - outbytes_left;
       }
       else if (errno == EINVAL) {
-       // `data' ends with partial input sequence.
+       // 'data' ends with partial input sequence.
        memcpy(inbuf, inptr, inbytes_left);
        break;
       }
     }
   }
-  // Handle `fp' and switch to `inbuf'.
+  // Handle 'fp' and switch to 'inbuf'.
   size_t read_bytes;
   char *read_start = inbuf + inbytes_left;
   while ((read_bytes = fread(read_start, 1, BUFSIZ - inbytes_left, fp)) > 0) {
@@ -723,7 +728,7 @@ conversion_iconv(FILE *fp, const string &data, char *enc)
          outbytes_left = BUFSIZ * sizeof (int) - outbytes_left;
        }
        else if (errno == EINVAL) {
-         // `inbuf' ends with partial input sequence.
+         // 'inbuf' ends with partial input sequence.
          memmove(inbuf, inptr, inbytes_left);
          break;
        }
@@ -748,7 +753,7 @@ conversion_iconv(FILE *fp, const string &data, char *enc)
 // that any normal text file (regardless of the encoding)
 // starts with the bytes which represent a BOM.
 //
-// Return the BOM in string `BOM'; `data' then starts with
+// Return the BOM in string 'BOM'; 'data' then starts with
 // the byte after the BOM.  This function reads (at most)
 // four bytes from the data stream.
 //
@@ -804,9 +809,9 @@ get_BOM(FILE *fp, string &BOM, string &data)
 // ---------------------------------------------------------
 // Get first two lines from input stream.
 //
-// Return string (allocated with `new') without zero bytes
+// Return string (allocated with 'new') without zero bytes
 // or NULL in case no coding tag can occur in the data
-// (which is stored unmodified in `data').
+// (which is stored unmodified in 'data').
 // ---------------------------------------------------------
 char *
 get_tag_lines(FILE *fp, string &data)
@@ -887,7 +892,7 @@ is_comment_line(char *s)
 //   <variable1>: <value1>; <variable2>: <value2>; ...
 //
 // Leading and trailing blanks are ignored.  There might be
-// more than one blank after `:' and `;'.
+// more than one blank after ':' and ';'.
 //
 // Return position of next value/variable pair or NULL if
 // at end of data.
@@ -905,7 +910,7 @@ get_variable_value_pair(char *d1, char **variable, char **value)
   while (l < MAX_VAR_LEN - 1 && *d1 && !strchr(";: \t", *d1))
     var[l++] = *(d1++);
   var[l] = 0;
-  // Skip everything until `:', `;', or end of data.
+  // Skip everything until ':', ';', or end of data.
   while (*d1 && *d1 != ':' && *d1 != ';')
     d1++;
   val[0] = 0;
@@ -921,7 +926,7 @@ get_variable_value_pair(char *d1, char **variable, char **value)
   while (l < MAX_VAR_LEN - 1 && *d1 && !strchr("; \t", *d1))
     val[l++] = *(d1++);
   val[l] = 0;
-  // Skip everything until `;' or end of data.
+  // Skip everything until ';' or end of data.
   while (*d1 && *d1 != ';')
     d1++;
   if (*d1 == ';')
@@ -936,14 +941,14 @@ get_variable_value_pair(char *d1, char **variable, char **value)
 //
 //   <comment> ... -*-<local variables list>-*-
 //
-// (`...' might be anything).
+// ('...' might be anything).
 //
 // <comment> can be one of the following syntax forms at the
 // beginning of the line:
 //
 //   .\"   .\#   '\"   '\#   \#
 //
-// There can be whitespace after the leading `.' or "'".
+// There can be whitespace after the leading '.' or "'".
 //
 // The local variables list must occur within the first
 // comment block at the very beginning of the data stream.
@@ -986,18 +991,87 @@ check_coding_tag(FILE *fp, string &data)
       d1 = get_variable_value_pair(d1, &variable, &value);
       if (!strcasecmp(variable, "coding")) {
        *d2 = '-';              // restore '-'
-       a_delete inbuf;
+       free(inbuf);
        return value;
       }
     }
     *d2 = '-';                 // restore '-'
   }
-  a_delete inbuf;
+  free(inbuf);
+  return NULL;
+}
+
+char *
+detect_file_encoding(FILE *fp)
+{
+#ifdef HAVE_UCHARDET
+  uchardet_t ud = NULL;
+  struct stat stat_buf;
+  size_t len, read_bytes;
+  char *data = NULL;
+  int res, current_position;
+  const char *charset;
+  char *ret = NULL;
+
+  current_position = ftell(fp);
+  /* due to BOM and tag detection we are not at the begining of the file */
+  rewind(fp);
+  if (fstat(fileno(fp), &stat_buf) != 0) {
+    fprintf(stderr, "fstat: %s\n", strerror(errno));
+    goto end;
+  }
+  len = stat_buf.st_size;
+  if (debug_flag)
+    fprintf(stderr, "  len: %zu\n", len);  
+  if (len == 0)
+    goto end;
+  data = (char *)calloc(len, 1);
+  read_bytes = fread(data, 1, len, fp);
+  if (read_bytes == 0) {
+    fprintf(stderr, "fread: %s\n", strerror(errno));
+    goto end;
+  }
+  /* We rewind back to the original position */
+  if (fseek(fp, current_position, SEEK_SET) != 0) {
+    fprintf(stderr, "Fatal error: fseek: %s\n", strerror(errno));
+    goto end;
+  }
+  ud = uchardet_new();
+  res = uchardet_handle_data(ud, data, len);
+  if (res != 0) {
+    fprintf(stderr, "uchardet_handle_data: %d\n", res);
+    goto end;
+  }
+  if (debug_flag)
+    fprintf(stderr, "  uchardet read: %zu bytes\n", read_bytes);
+  uchardet_data_end(ud);
+  charset = uchardet_get_charset(ud);
+  if (debug_flag) {
+    if (charset)
+       fprintf(stderr, "  charset: %s\n", charset);
+    else
+       fprintf(stderr, "  charset is NULL\n");
+  }
+  /* uchardet 0.0.1 could return an empty string instead of NULL */
+  if (charset && *charset) {
+    ret = (char *)malloc(strlen(charset) + 1);
+    strcpy(ret, charset);
+  }
+
+end:
+  if (ud)
+     uchardet_delete(ud);
+  if (data)
+     free(data);
+
+  return ret;
+#else /* not HAVE_UCHARDET */
   return NULL;
+#endif /* not HAVE_UCHARDET */
 }
 
 // ---------------------------------------------------------
-// Handle an input file.  If filename is `-' handle stdin.
+// Handle an input file.  If filename is '-' handle stdin.
 //
 // Return 1 on success, 0 otherwise.
 // ---------------------------------------------------------
@@ -1008,10 +1082,10 @@ do_file(const char *filename)
   string BOM, data;
   if (strcmp(filename, "-")) {
     if (debug_flag)
-      fprintf(stderr, "file `%s':\n", filename);
+      fprintf(stderr, "file '%s':\n", filename);
     fp = fopen(filename, FOPEN_RB);
     if (!fp) {
-      error("can't open `%1': %2", filename, strerror(errno));
+      error("can't open '%1': %2", filename, strerror(errno));
       return 0;
     }
   }
@@ -1024,13 +1098,14 @@ do_file(const char *filename)
   const char *BOM_encoding = get_BOM(fp, BOM, data);
   // Determine the encoding.
   char *encoding;
+  int must_free_encoding = 0;
   if (user_encoding[0]) {
     if (debug_flag) {
-      fprintf(stderr, "  user-specified encoding `%s', "
+      fprintf(stderr, "  user-specified encoding '%s', "
                      "no search for coding tag\n",
                      user_encoding);
       if (BOM_encoding && strcmp(BOM_encoding, user_encoding))
-       fprintf(stderr, "  but BOM in data stream implies encoding `%s'!\n",
+       fprintf(stderr, "  but BOM in data stream implies encoding '%s'!\n",
                        BOM_encoding);
     }
     encoding = (char *)user_encoding;
@@ -1041,32 +1116,45 @@ do_file(const char *filename)
     encoding = (char *)BOM_encoding;
   }
   else {
-    // `check_coding_tag' returns a pointer to a static array (or NULL).
+    // 'check_coding_tag' returns a pointer to a static array (or NULL).
     char *file_encoding = check_coding_tag(fp, data);
     if (!file_encoding) {
       if (debug_flag)
-       fprintf(stderr, "  no file encoding\n");
-      file_encoding = default_encoding;
+       fprintf(stderr, "  no encoding tag\n");
+      file_encoding = detect_file_encoding(fp);
+      if (!file_encoding) {
+        if (debug_flag)
+          fprintf(stderr, "  could not detect encoding with uchardet\n");
+        file_encoding = default_encoding;
+      }
+      else
+        must_free_encoding = 1;
     }
     else
       if (debug_flag)
-       fprintf(stderr, "  file encoding: `%s'\n", file_encoding);
+       fprintf(stderr, "  file encoding: '%s'\n", file_encoding);
     encoding = file_encoding;
   }
   strncpy(encoding_string, encoding, MAX_VAR_LEN - 1);
   encoding_string[MAX_VAR_LEN - 1] = 0;
+  if (must_free_encoding)
+    free(encoding);
   encoding = encoding_string;
   // Translate from MIME & Emacs encoding names to locale encoding names.
   encoding = emacs2mime(encoding_string);
   if (encoding[0] == '\0') {
-    error("encoding `%1' not supported, not a portable encoding",
+    error("encoding '%1' not supported, not a portable encoding",
          encoding_string);
     return 0;
   }
   if (debug_flag)
-    fprintf(stderr, "  encoding used: `%s'\n", encoding);
-  if (!raw_flag)
-    printf(".lf 1 %s\n", filename);
+    fprintf(stderr, "  encoding used: '%s'\n", encoding);
+  if (!raw_flag) {
+    string fn(filename);
+    fn += '\0';
+    normalize_for_lf(fn);
+    printf(".lf 1 %s\n", fn.contents());
+  }
   int success = 1;
   // Call converter (converters write to stdout).
   if (!strcasecmp(encoding, "ISO-8859-1"))
@@ -1079,7 +1167,7 @@ do_file(const char *filename)
 #if HAVE_ICONV
     conversion_iconv(fp, BOM + data, encoding);
 #else
-    error("encoding system `%1' not supported", encoding);
+    error("encoding system '%1' not supported", encoding);
     success = 0;
 #endif /* HAVE_ICONV */
   }
@@ -1103,7 +1191,7 @@ usage(FILE *stream)
                  "-r           don't add .lf requests\n"
                  "-v           print version number\n"
                  "\n"
-                 "The default encoding is `%s'.\n",
+                 "The default encoding is '%s'.\n",
                  program_name, default_encoding);
 }
 
@@ -1133,18 +1221,23 @@ main(int argc, char **argv)
     { "version", no_argument, 0, 'v' },
     { NULL, 0, 0, 0 }
   };
-  // Parse the command line options.
+  // Parse the command-line options.
   while ((opt = getopt_long(argc, argv,
                            "dD:e:hrv", long_options, NULL)) != EOF)
     switch (opt) {
     case 'v':
-      printf("GNU preconv (groff) version %s %s iconv support\n",
+      printf("GNU preconv (groff) version %s %s iconv support and %s uchardet support\n",
             Version_string,
 #ifdef HAVE_ICONV
-            "with"
+            "with",
 #else
-            "without"
+            "without",
 #endif /* HAVE_ICONV */
+#ifdef HAVE_UCHARDET
+             "with"
+#else
+             "without"
+#endif /* HAVE_UCHARDET */
            );
       exit(0);
       break;
@@ -1181,7 +1274,7 @@ main(int argc, char **argv)
     }
   int nbad = 0;
   if (debug_flag)
-    fprintf(stderr, "default encoding: `%s'\n", default_encoding);
+    fprintf(stderr, "default encoding: '%s'\n", default_encoding);
   if (optind >= argc)
     nbad += !do_file("-");
   else
diff --git a/src/preproc/preconv/preconv.man b/src/preproc/preconv/preconv.man
deleted file mode 100644 (file)
index db2a698..0000000
+++ /dev/null
@@ -1,361 +0,0 @@
-.TH PRECONV @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-preconv \- convert encoding of input files to something GNU troff understands
-.
-.
-.\" license (copying)
-.de co
-Copyright \[co] 2006-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY preconv
-.OP \-dr
-.OP \-e encoding
-.RI [ files
-.IR .\|.\|. ]
-.
-.SY preconv
-.B \-h
-|
-.B \-\-help
-.
-.SY preconv
-.B \-v
-|
-.B \-\-version
-.YS
-.
-.
-.PP
-It is possible to have whitespace between the
-.B \-e
-command line option and its parameter.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B preconv
-reads
-.I files
-and converts its encoding(s) to a form GNU
-.BR troff (@MAN1EXT@)
-can process, sending the data to standard output.
-.
-Currently, this means ASCII characters and \[oq]\e[uXXXX]\[cq]
-entities, where \[oq]XXXX\[cq] is a hexadecimal number with four to
-six digits, representing a Unicode input code.
-.
-Normally,
-.B preconv
-should be invoked with the
-.B \-k
-and
-.B \-K
-options of
-.BR groff .
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.B \-d
-Emit debugging messages to standard error (mainly the used encoding).
-.
-.TP
-.BI \-D encoding
-Specify default encoding if everything fails (see below).
-.
-.TP
-.BI \-e encoding
-Specify input encoding explicitly, overriding all other methods.
-.
-This corresponds to
-.BR groff \[aq]s
-.BI \-K encoding
-option.
-.
-Without this switch,
-.B preconv
-uses the algorithm described below to select the input encoding.
-.
-.TP
-.B \-\-help
-.TQ
-.B \-h
-Print help message.
-.
-.TP
-.B \-r
-Do not add \&.lf requests.
-.
-.TP
-.B \-\-version
-.TQ
-.B \-v
-Print version number.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-.B preconv
-tries to find the input encoding with the following algorithm.
-.
-.IP 1.
-If the input encoding has been explicitly specified with option
-.BR \-e ,
-use it.
-.
-.IP 2.
-Otherwise, check whether the input starts with a
-.I Byte Order Mark
-(BOM, see below).
-.
-If found, use it.
-.
-.IP 3.
-Finally, check whether there is a known
-.I coding tag
-(see below) in either the first or second input line.
-.
-If found, use it.
-.
-.IP 4.
-If everything fails, use a default encoding as given with option
-.BR \-D ,
-by the current locale, or \[oq]latin1\[cq] if the locale is set to
-\[oq]C\[cq], \[oq]POSIX\[cq], or empty (in that order).
-.
-.
-.PP
-Note that the
-.B groff
-program supports a
-.B GROFF_ENCODING
-environment variable which is eventually expanded to option
-.BR \-k .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Byte Order Mark"
-.\" --------------------------------------------------------------------
-.
-The Unicode Standard defines character U+FEFF as the Byte Order Mark
-(BOM).
-.
-On the other hand, value U+FFFE is guaranteed not be a Unicode character at
-all.
-.
-This allows to detect the byte order within the data stream (either
-big-endian or lower-endian), and the MIME encodings \%\[oq]UTF-16\[cq]
-and \%\[oq]UTF-32\[cq] mandate that the data stream starts with U+FEFF.
-.
-Similarly, the data stream encoded as \%\[oq]UTF-8\[cq] might start
-with a BOM (to ease the conversion from and to \%UTF-16 and \%UTF-32).
-.
-In all cases, the byte order mark is
-.I not
-part of the data but part of the encoding protocol; in other words,
-.BR preconv \[aq]s
-output doesn\[aq]t contain it.
-.
-.
-.PP
-Note that U+FEFF not at the start of the input data actually is
-emitted; it has then the meaning of a \[oq]zero width no-break
-space\[cq] character \[en] something not needed normally in
-.BR groff .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Coding Tags"
-.\" --------------------------------------------------------------------
-.
-Editors which support more than a single character encoding need tags
-within the input files to mark the file\[aq]s encoding.
-.
-While it is possible to guess the right input encoding with the help of
-heuristic algorithms for data which represents a greater amount of a natural
-language, it is still just a guess.
-.
-Additionally, all algorithms fail easily for input which is either too short
-or doesn\[aq]t represent a natural language.
-.
-.
-.PP
-For these reasons,
-.B preconv
-supports the coding tag convention (with some restrictions) as used by
-.B "GNU Emacs"
-and
-.B XEmacs
-(and probably other programs too).
-.
-.
-.PP
-Coding tags in
-.B "GNU Emacs"
-and
-.B XEmacs
-are stored in so-called
-.IR "File Variables" .
-.
-.B preconv
-recognizes the following syntax form which must be put into a troff comment
-in the first or second line.
-.
-.RS
-.PP
-\-*\-
-.IR tag1 :
-.IR value1 ;
-.IR tag2 :
-.IR value2 ;
-\&.\|.\|.\& \-*\-
-.RE
-.
-.
-.PP
-The only relevant tag for
-.B preconv
-is \[oq]coding\[cq] which can take the values listed below.
-.
-Here an example line which tells
-.B Emacs
-to edit a file in troff mode, and to use \%latin2 as its encoding.
-.
-.RS
-.PP
-.EX
-\&.\[rs]" \-*\- mode: troff; coding: latin-2 \-*\-\""
-.EE
-.RE
-.
-.
-.PP
-The following list gives all MIME coding tags (either lowercase or
-uppercase) supported by
-.BR preconv ;
-this list is hard-coded in the source.
-.
-.RS
-.PP
-.ad l
-\%big5, \%cp1047, \%euc-jp, \%euc-kr, \%gb2312, \%iso-8859-1,
-\%iso-8859-2, \%iso-8859-5, \%iso-8859-7, \%iso-8859-9, \%iso-8859-13,
-\%iso-8859-15, \%koi8-r, \%us-ascii, \%utf-8, \%utf-16, \%utf-16be,
-\%utf-16le
-.ad
-.RE
-.
-.
-.PP
-In addition, the following hard-coded list of other tags is recognized
-which eventually map to values from the list above.
-.
-.RS
-.PP
-.ad l
-\%ascii, \%chinese-big5, \%chinese-euc, \%chinese-iso-8bit, \%cn-big5,
-\%\%cn-gb, \%cn-gb-2312, \%cp878, \%csascii, \%csisolatin1,
-\%cyrillic-iso-8bit, \%cyrillic-koi8, \%euc-china, \%euc-cn,
-\%euc-japan, \%euc-japan-1990, \%euc-korea, \%greek-iso-8bit,
-\%iso-10646/utf8, \%iso-10646/utf-8, \%iso-latin-1, \%iso-latin-2,
-\%iso-latin-5, \%iso-latin-7, \%iso-latin-9, \%japanese-euc,
-\%japanese-iso-8bit, \%jis8, \%koi8, \%korean-euc, \%korean-iso-8bit,
-\%latin-0, \%latin1, \%latin-1, \%latin-2, \%latin-5, \%latin-7,
-\%latin-9, \%mule-utf-8, \%mule-utf-16, \%mule-utf-16be,
-\%mule-utf-16-be, \%mule-utf-16be-with-signature, \%mule-utf-16le,
-\%mule-utf-16-le, \%mule-utf-16le-with-signature, \%utf8, \%utf-16-be,
-\%utf-16-be-with-signature, \%utf-16be-with-signature, \%utf-16-le,
-\%utf-16-le-with-signature, \%utf-16le-with-signature
-.ad
-.RE
-.
-.
-.PP
-Those tags are taken from
-.B "GNU Emacs"
-and
-.BR XEmacs ,
-together with some aliases.
-.
-Trailing \%\[oq]-dos\[cq], \%\[oq]-unix\[cq], and \%\[oq]-mac\[cq]
-suffixes of coding tags (which give the end-of-line convention used in
-the file) are stripped off before the comparison with the above tags
-happens.
-.
-.SS "Iconv Issues"
-.B preconv
-by itself only supports three encodings: \%latin-1, cp1047, and \%UTF-8;
-all other encodings are passed to the
-.B iconv
-library functions.
-.
-At compile time it is searched and checked for a valid
-.B iconv
-implementation; a call to \[oq]preconv \-\-version\[cq] shows whether
-.B iconv
-is used.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-.B preconv
-doesn\[aq]t support
-.I "local variable lists"
-yet.
-.
-This is a different syntax form to specify local variables at the end of a
-file.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff (@MAN1EXT@)
-.br
-the
-.B "GNU Emacs"
-and
-.B XEmacs
-info pages
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Emacs setting
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/src/preproc/refer/Makefile.sub b/src/preproc/refer/Makefile.sub
deleted file mode 100644 (file)
index b87dcc4..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# Makefile.sub for `preproc refer'
-#
-# File position: <groff-source>/src/preproc/refer/Makefile.sub
-#
-# Copyright (C) 1989-2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=refer$(EXEEXT)
-MAN1=refer.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
-  command.$(OBJEXT) \
-  label.$(OBJEXT) \
-  ref.$(OBJEXT) \
-  refer.$(OBJEXT) \
-  token.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/command.cpp \
-  $(srcdir)/ref.cpp \
-  $(srcdir)/refer.cpp \
-  $(srcdir)/token.cpp
-HDRS=\
-  $(srcdir)/refer.h \
-  $(srcdir)/token.h \
-  $(srcdir)/command.h \
-  $(srcdir)/ref.h
-GRAM=$(srcdir)/label.y
-YTABC=label.cpp
-NAMEPREFIX=$(g)
-
-.PHONY: install_data
-install_data: refer
-       -test -d $(DESTDIR)$(referdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(referdir)
-
-.PHONY: uninstall_data
-uninstall_sub:
-       -test -d $(DESTDIR)$(referdir) && rmdir $(DESTDIR)$(referdir)
-
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 5bbd9bff1e8cb5cee4f68025a8cf160e8f9f0ea1..36f450896f22ef39b2259bd21d48fcdcc9145e87 100644 (file)
@@ -17,7 +17,7 @@ back to filenames.
 Rename join-authors to join-fields.  Have a separate label-join-fields
 command used by @ and #.
 
-Have some sort of quantifier: eg $.n#A means execute `$.n' for each
+Have some sort of quantifier: e.g., $.n#A means execute '$.n' for each
 instance of an A field, setting $ to that field, and then join the
 results using the join-authors command.
 
@@ -31,7 +31,7 @@ Trim eign a bit.
 
 In indexed searching discard all numeric keys except dates.
 
-Allow `\ ' to separate article from first word.
+Allow '\ ' to separate article from first word.
 
 %also
 
@@ -51,7 +51,7 @@ first operand of ~. Or perhaps implement <> using some magic character
 in the string.
 
 Should special treatment be given to lines beginning with . in
-references?  (Unix refer seems to treat them like `%').
+references?  (Unix refer seems to treat them like '%').
 
 Add global flag to control whether all files should be stat-ed after
 loading, and whether they should be stat-ed before each search.
@@ -92,7 +92,7 @@ Provide a way to execute a command using a command-line option.
 
 Option to set the label-spec as a command-line option (-L).
 
-Command to to specify which fields can occur multiple times:
+Command to specify which fields can occur multiple times:
 multiple AE
 
 Command to specify how various fields sort:
index 98527298775af3b7bf57c9ee52ec94e93557a84f..f32ca241cda38b5e5d143033eee08d27792fbb64 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "refer.h"
 #include "refid.h"
@@ -155,7 +155,7 @@ void input_stack::push_file(const char *fn)
     errno = 0;
     fp = fopen(fn, "r");
     if (fp == 0) {
-      error("can't open `%1': %2", fn, strerror(errno));
+      error("can't open '%1': %2", fn, strerror(errno));
       return;
     }
   }
@@ -697,7 +697,7 @@ static int check_args(const char *types, const char *name,
        break;
       }
       else {
-       input_stack::error("missing argument for command `%1'", name);
+       input_stack::error("missing argument for command '%1'", name);
        return 0;
       }
     }
@@ -710,7 +710,7 @@ static int check_args(const char *types, const char *name,
        long n = strtol(argv->s, &ptr, 10);
        if ((n == 0 && ptr == argv->s)
            || *ptr != '\0') {
-         input_stack::error("argument %1 for command `%2' must be an integer",
+         input_stack::error("argument %1 for command '%2' must be an integer",
                             argno + 1, name);
          return 0;
        }
@@ -721,7 +721,7 @@ static int check_args(const char *types, const char *name,
       {
        for (const char *ptr = argv->s; *ptr != '\0'; ptr++)
          if (!cs_field_name(*ptr)) {
-           input_stack::error("argument %1 for command `%2' must be a list of fields",
+           input_stack::error("argument %1 for command '%2' must be a list of fields",
                             argno + 1, name);
            return 0;
          }
@@ -730,7 +730,7 @@ static int check_args(const char *types, const char *name,
     case 'F':
       if (argv->s[0] == '\0' || argv->s[1] != '\0'
          || !cs_field_name(argv->s[0])) {
-       input_stack::error("argument %1 for command `%2' must be a field name",
+       input_stack::error("argument %1 for command '%2' must be a field name",
                           argno + 1, name);
        return 0;
       }
@@ -747,7 +747,7 @@ static int check_args(const char *types, const char *name,
     ++argno;
   }
   if (argc > 0) {
-    input_stack::error("too many arguments for command `%1'", name);
+    input_stack::error("too many arguments for command '%1'", name);
     return 0;
   }
   return 1;
@@ -762,7 +762,7 @@ static void execute_command(const char *name, int argc, argument *argv)
        (*command_table[i].func)(argc, argv);
       return;
     }
-  input_stack::error("unknown command `%1'", name);
+  input_stack::error("unknown command '%1'", name);
 }
 
 static void command_loop()
index 06f422d1f76c5da5ca604ffce6564e433363bdc6..dd143eb85e3b42dc50522c3cf49af2fb5400ff6a 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 void process_commands(const char *file);
 void process_commands(string &s, const char *file, int lineno);
index 12d2dfa348b33c3cc9c0d112eb631d9b87aafd18..c836b8fd0466c0872218a85d4e26d7f45e675005 100644 (file)
@@ -1,8 +1,8 @@
-/* A Bison parser, made by GNU Bison 3.0.2.  */
+/* A Bison parser, made by GNU Bison 3.2.  */
 
 /* Bison implementation for Yacc-like parsers in C
 
-   Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc.
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
 
    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
    define necessary library symbols; they are noted "INFRINGES ON
    USER NAME SPACE" below.  */
 
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
 /* Identify Bison output.  */
 #define YYBISON 1
 
 /* Bison version.  */
-#define YYBISON_VERSION "3.0.2"
+#define YYBISON_VERSION "3.2"
 
 /* Skeleton name.  */
 #define YYSKELETON_NAME "yacc.c"
@@ -61,8 +64,8 @@
 
 
 
-/* Copy the first part of user declarations.  */
-#line 20 "label.y" /* yacc.c:339  */
+/* First part of user prologue.  */
+#line 20 "../src/preproc/refer/label.ypp" /* yacc.c:338  */
 
 
 #include "refer.h"
@@ -262,13 +265,16 @@ static expression *parse_result;
 string literals;
 
 
-#line 266 "label.cpp" /* yacc.c:339  */
-
+#line 269 "src/preproc/refer/label.cpp" /* yacc.c:338  */
 # ifndef YY_NULLPTR
-#  if defined __cplusplus && 201103L <= __cplusplus
-#   define YY_NULLPTR nullptr
+#  if defined __cplusplus
+#   if 201103L <= __cplusplus
+#    define YY_NULLPTR nullptr
+#   else
+#    define YY_NULLPTR 0
+#   endif
 #  else
-#   define YY_NULLPTR 0
+#   define YY_NULLPTR ((void*)0)
 #  endif
 # endif
 
@@ -280,7 +286,10 @@ string literals;
 # define YYERROR_VERBOSE 0
 #endif
 
-
+/* In a future release of Bison, this section will be replaced
+   by #include "y.tab.h".  */
+#ifndef YY_YY_SRC_PREPROC_REFER_LABEL_HPP_INCLUDED
+# define YY_YY_SRC_PREPROC_REFER_LABEL_HPP_INCLUDED
 /* Debug traces.  */
 #ifndef YYDEBUG
 # define YYDEBUG 0
@@ -306,18 +315,20 @@ extern int yydebug;
 
 /* Value type.  */
 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE YYSTYPE;
+
 union YYSTYPE
 {
-#line 220 "label.y" /* yacc.c:355  */
+#line 220 "../src/preproc/refer/label.ypp" /* yacc.c:353  */
 
   int num;
   expression *expr;
   struct { int ndigits; int val; } dig;
   struct { int start; int len; } str;
 
-#line 320 "label.cpp" /* yacc.c:355  */
+#line 329 "src/preproc/refer/label.cpp" /* yacc.c:353  */
 };
+
+typedef union YYSTYPE YYSTYPE;
 # define YYSTYPE_IS_TRIVIAL 1
 # define YYSTYPE_IS_DECLARED 1
 #endif
@@ -327,11 +338,9 @@ extern YYSTYPE yylval;
 
 int yyparse (void);
 
+#endif /* !YY_YY_SRC_PREPROC_REFER_LABEL_HPP_INCLUDED  */
 
 
-/* Copy the second part of user declarations.  */
-
-#line 335 "label.cpp" /* yacc.c:358  */
 
 #ifdef short
 # undef short
@@ -352,13 +361,13 @@ typedef signed char yytype_int8;
 #ifdef YYTYPE_UINT16
 typedef YYTYPE_UINT16 yytype_uint16;
 #else
-typedef unsigned short int yytype_uint16;
+typedef unsigned short yytype_uint16;
 #endif
 
 #ifdef YYTYPE_INT16
 typedef YYTYPE_INT16 yytype_int16;
 #else
-typedef short int yytype_int16;
+typedef short yytype_int16;
 #endif
 
 #ifndef YYSIZE_T
@@ -370,7 +379,7 @@ typedef short int yytype_int16;
 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
 #  define YYSIZE_T size_t
 # else
-#  define YYSIZE_T unsigned int
+#  define YYSIZE_T unsigned
 # endif
 #endif
 
@@ -406,15 +415,6 @@ typedef short int yytype_int16;
 # define YY_ATTRIBUTE_UNUSED YY_ATTRIBUTE ((__unused__))
 #endif
 
-#if !defined _Noreturn \
-     && (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112)
-# if defined _MSC_VER && 1200 <= _MSC_VER
-#  define _Noreturn __declspec (noreturn)
-# else
-#  define _Noreturn YY_ATTRIBUTE ((__noreturn__))
-# endif
-#endif
-
 /* Suppress unused-variable warnings by "using" E.  */
 #if ! defined lint || defined __GNUC__
 # define YYUSE(E) ((void) (E))
@@ -422,7 +422,7 @@ typedef short int yytype_int16;
 # define YYUSE(E) /* empty */
 #endif
 
-#if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
+#if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__
 /* Suppress an incorrect diagnostic about yylval being uninitialized.  */
 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \
     _Pragma ("GCC diagnostic push") \
@@ -590,7 +590,7 @@ union yyalloc
 #define YYMAXUTOK   260
 
 #define YYTRANSLATE(YYX)                                                \
-  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+  ((unsigned) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
 
 /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM
    as returned by yylex, without out-of-bounds checking.  */
@@ -823,37 +823,37 @@ do {                                                                      \
 } while (0)
 
 
-/*----------------------------------------.
-| Print this symbol's value on YYOUTPUT.  |
-`----------------------------------------*/
+/*-----------------------------------.
+| Print this symbol's value on YYO.  |
+`-----------------------------------*/
 
 static void
-yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_value_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
 {
-  FILE *yyo = yyoutput;
-  YYUSE (yyo);
+  FILE *yyoutput = yyo;
+  YYUSE (yyoutput);
   if (!yyvaluep)
     return;
 # ifdef YYPRINT
   if (yytype < YYNTOKENS)
-    YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+    YYPRINT (yyo, yytoknum[yytype], *yyvaluep);
 # endif
   YYUSE (yytype);
 }
 
 
-/*--------------------------------.
-| Print this symbol on YYOUTPUT.  |
-`--------------------------------*/
+/*---------------------------.
+| Print this symbol on YYO.  |
+`---------------------------*/
 
 static void
-yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+yy_symbol_print (FILE *yyo, int yytype, YYSTYPE const * const yyvaluep)
 {
-  YYFPRINTF (yyoutput, "%s %s (",
+  YYFPRINTF (yyo, "%s %s (",
              yytype < YYNTOKENS ? "token" : "nterm", yytname[yytype]);
 
-  yy_symbol_value_print (yyoutput, yytype, yyvaluep);
-  YYFPRINTF (yyoutput, ")");
+  yy_symbol_value_print (yyo, yytype, yyvaluep);
+  YYFPRINTF (yyo, ")");
 }
 
 /*------------------------------------------------------------------.
@@ -887,7 +887,7 @@ do {                                                            \
 static void
 yy_reduce_print (yytype_int16 *yyssp, YYSTYPE *yyvsp, int yyrule)
 {
-  unsigned long int yylno = yyrline[yyrule];
+  unsigned long yylno = yyrline[yyrule];
   int yynrhs = yyr2[yyrule];
   int yyi;
   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
@@ -1020,7 +1020,7 @@ yytnamerr (char *yyres, const char *yystr)
   if (! yyres)
     return yystrlen (yystr);
 
-  return yystpcpy (yyres, yystr) - yyres;
+  return (YYSIZE_T) (yystpcpy (yyres, yystr) - yyres);
 }
 # endif
 
@@ -1113,6 +1113,7 @@ yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
       case N:                               \
         yyformat = S;                       \
       break
+    default: /* Avoid compiler warnings. */
       YYCASE_(0, YY_("syntax error"));
       YYCASE_(1, YY_("syntax error, unexpected %s"));
       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
@@ -1261,12 +1262,12 @@ yyparse (void)
   yyssp++;
 
  yysetstate:
-  *yyssp = yystate;
+  *yyssp = (yytype_int16) yystate;
 
   if (yyss + yystacksize - 1 <= yyssp)
     {
       /* Get the current used size of the three stacks, in elements.  */
-      YYSIZE_T yysize = yyssp - yyss + 1;
+      YYSIZE_T yysize = (YYSIZE_T) (yyssp - yyss + 1);
 
 #ifdef yyoverflow
       {
@@ -1284,7 +1285,6 @@ yyparse (void)
                     &yyss1, yysize * sizeof (*yyssp),
                     &yyvs1, yysize * sizeof (*yyvsp),
                     &yystacksize);
-
         yyss = yyss1;
         yyvs = yyvs1;
       }
@@ -1318,7 +1318,7 @@ yyparse (void)
       yyvsp = yyvs + yysize - 1;
 
       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
-                  (unsigned long int) yystacksize));
+                  (unsigned long) yystacksize));
 
       if (yyss + yystacksize - 1 <= yyssp)
         YYABORT;
@@ -1429,106 +1429,106 @@ yyreduce:
   switch (yyn)
     {
         case 2:
-#line 249 "label.y" /* yacc.c:1646  */
+#line 249 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { parse_result = ((yyvsp[0].expr) ? new analyzed_expr((yyvsp[0].expr)) : 0); }
-#line 1435 "label.cpp" /* yacc.c:1646  */
+#line 1435 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 3:
-#line 254 "label.y" /* yacc.c:1646  */
+#line 254 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 1441 "label.cpp" /* yacc.c:1646  */
+#line 1441 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 4:
-#line 256 "label.y" /* yacc.c:1646  */
+#line 256 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new conditional_expr((yyvsp[-4].expr), (yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 1447 "label.cpp" /* yacc.c:1646  */
+#line 1447 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 5:
-#line 261 "label.y" /* yacc.c:1646  */
+#line 261 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = 0; }
-#line 1453 "label.cpp" /* yacc.c:1646  */
+#line 1453 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 6:
-#line 263 "label.y" /* yacc.c:1646  */
+#line 263 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 1459 "label.cpp" /* yacc.c:1646  */
+#line 1459 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 7:
-#line 268 "label.y" /* yacc.c:1646  */
+#line 268 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 1465 "label.cpp" /* yacc.c:1646  */
+#line 1465 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 8:
-#line 270 "label.y" /* yacc.c:1646  */
+#line 270 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new alternative_expr((yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 1471 "label.cpp" /* yacc.c:1646  */
+#line 1471 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 9:
-#line 272 "label.y" /* yacc.c:1646  */
+#line 272 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new conditional_expr((yyvsp[-2].expr), (yyvsp[0].expr), 0); }
-#line 1477 "label.cpp" /* yacc.c:1646  */
+#line 1477 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 10:
-#line 277 "label.y" /* yacc.c:1646  */
+#line 277 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 1483 "label.cpp" /* yacc.c:1646  */
+#line 1483 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 11:
-#line 279 "label.y" /* yacc.c:1646  */
+#line 279 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new list_expr((yyvsp[-1].expr), (yyvsp[0].expr)); }
-#line 1489 "label.cpp" /* yacc.c:1646  */
+#line 1489 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 12:
-#line 284 "label.y" /* yacc.c:1646  */
+#line 284 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = (yyvsp[0].expr); }
-#line 1495 "label.cpp" /* yacc.c:1646  */
+#line 1495 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 13:
-#line 286 "label.y" /* yacc.c:1646  */
+#line 286 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new substitute_expr((yyvsp[-2].expr), (yyvsp[0].expr)); }
-#line 1501 "label.cpp" /* yacc.c:1646  */
+#line 1501 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 14:
-#line 291 "label.y" /* yacc.c:1646  */
+#line 291 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new at_expr; }
-#line 1507 "label.cpp" /* yacc.c:1646  */
+#line 1507 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 15:
-#line 293 "label.y" /* yacc.c:1646  */
+#line 293 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     {
                  (yyval.expr) = new literal_expr(literals.contents() + (yyvsp[0].str).start,
                                        (yyvsp[0].str).len);
                }
-#line 1516 "label.cpp" /* yacc.c:1646  */
+#line 1516 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 16:
-#line 298 "label.y" /* yacc.c:1646  */
+#line 298 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new field_expr((yyvsp[0].num), 0); }
-#line 1522 "label.cpp" /* yacc.c:1646  */
+#line 1522 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 17:
-#line 300 "label.y" /* yacc.c:1646  */
+#line 300 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new field_expr((yyvsp[-1].num), (yyvsp[0].num) - 1); }
-#line 1528 "label.cpp" /* yacc.c:1646  */
+#line 1528 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 18:
-#line 302 "label.y" /* yacc.c:1646  */
+#line 302 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     {
                  switch ((yyvsp[0].num)) {
                  case 'I':
@@ -1538,24 +1538,24 @@ yyreduce:
                    (yyval.expr) = new format_expr((yyvsp[0].num));
                    break;
                  default:
-                   command_error("unrecognized format `%1'", char((yyvsp[0].num)));
+                   command_error("unrecognized format '%1'", char((yyvsp[0].num)));
                    (yyval.expr) = new format_expr('a');
                    break;
                  }
                }
-#line 1547 "label.cpp" /* yacc.c:1646  */
+#line 1547 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 19:
-#line 318 "label.y" /* yacc.c:1646  */
+#line 318 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     {
                  (yyval.expr) = new format_expr('0', (yyvsp[0].dig).ndigits, (yyvsp[0].dig).val);
                }
-#line 1555 "label.cpp" /* yacc.c:1646  */
+#line 1555 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 20:
-#line 322 "label.y" /* yacc.c:1646  */
+#line 322 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     {
                  switch ((yyvsp[-1].num)) {
                  case 'l':
@@ -1581,99 +1581,99 @@ yyreduce:
                    break;
                  default:
                    (yyval.expr) = (yyvsp[-4].expr);
-                   command_error("unknown function `%1'", char((yyvsp[-1].num)));
+                   command_error("unknown function '%1'", char((yyvsp[-1].num)));
                    break;
                  }
                }
-#line 1589 "label.cpp" /* yacc.c:1646  */
+#line 1589 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 21:
-#line 353 "label.y" /* yacc.c:1646  */
+#line 353 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new truncate_expr((yyvsp[-2].expr), (yyvsp[0].num)); }
-#line 1595 "label.cpp" /* yacc.c:1646  */
+#line 1595 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 22:
-#line 355 "label.y" /* yacc.c:1646  */
+#line 355 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new truncate_expr((yyvsp[-2].expr), -(yyvsp[0].num)); }
-#line 1601 "label.cpp" /* yacc.c:1646  */
+#line 1601 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 23:
-#line 357 "label.y" /* yacc.c:1646  */
+#line 357 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new star_expr((yyvsp[-1].expr)); }
-#line 1607 "label.cpp" /* yacc.c:1646  */
+#line 1607 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 24:
-#line 359 "label.y" /* yacc.c:1646  */
+#line 359 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = (yyvsp[-1].expr); }
-#line 1613 "label.cpp" /* yacc.c:1646  */
+#line 1613 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 25:
-#line 361 "label.y" /* yacc.c:1646  */
+#line 361 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.expr) = new separator_expr((yyvsp[-1].expr)); }
-#line 1619 "label.cpp" /* yacc.c:1646  */
+#line 1619 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 26:
-#line 366 "label.y" /* yacc.c:1646  */
+#line 366 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.num) = -1; }
-#line 1625 "label.cpp" /* yacc.c:1646  */
+#line 1625 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 27:
-#line 368 "label.y" /* yacc.c:1646  */
+#line 368 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.num) = (yyvsp[0].num); }
-#line 1631 "label.cpp" /* yacc.c:1646  */
+#line 1631 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 28:
-#line 373 "label.y" /* yacc.c:1646  */
+#line 373 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.num) = (yyvsp[0].num); }
-#line 1637 "label.cpp" /* yacc.c:1646  */
+#line 1637 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 29:
-#line 375 "label.y" /* yacc.c:1646  */
+#line 375 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.num) = (yyvsp[-1].num)*10 + (yyvsp[0].num); }
-#line 1643 "label.cpp" /* yacc.c:1646  */
+#line 1643 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 30:
-#line 380 "label.y" /* yacc.c:1646  */
+#line 380 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.dig).ndigits = 1; (yyval.dig).val = (yyvsp[0].num); }
-#line 1649 "label.cpp" /* yacc.c:1646  */
+#line 1649 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 31:
-#line 382 "label.y" /* yacc.c:1646  */
+#line 382 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.dig).ndigits = (yyvsp[-1].dig).ndigits + 1; (yyval.dig).val = (yyvsp[-1].dig).val*10 + (yyvsp[0].num); }
-#line 1655 "label.cpp" /* yacc.c:1646  */
+#line 1655 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 32:
-#line 388 "label.y" /* yacc.c:1646  */
+#line 388 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.num) = 0; }
-#line 1661 "label.cpp" /* yacc.c:1646  */
+#line 1661 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 33:
-#line 390 "label.y" /* yacc.c:1646  */
+#line 390 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.num) = 1; }
-#line 1667 "label.cpp" /* yacc.c:1646  */
+#line 1667 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
   case 34:
-#line 392 "label.y" /* yacc.c:1646  */
+#line 392 "../src/preproc/refer/label.ypp" /* yacc.c:1645  */
     { (yyval.num) = -1; }
-#line 1673 "label.cpp" /* yacc.c:1646  */
+#line 1673 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
     break;
 
 
-#line 1677 "label.cpp" /* yacc.c:1646  */
+#line 1677 "src/preproc/refer/label.cpp" /* yacc.c:1645  */
       default: break;
     }
   /* User semantic actions sometimes alter yychar, and that requires
@@ -1698,14 +1698,13 @@ yyreduce:
   /* Now 'shift' the result of the reduction.  Determine what state
      that goes to, based on the state we popped back to and the rule
      number reduced by.  */
-
-  yyn = yyr1[yyn];
-
-  yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
-  if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
-    yystate = yytable[yystate];
-  else
-    yystate = yydefgoto[yyn - YYNTOKENS];
+  {
+    const int yylhs = yyr1[yyn] - YYNTOKENS;
+    const int yyi = yypgoto[yylhs] + *yyssp;
+    yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp
+               ? yytable[yyi]
+               : yydefgoto[yylhs]);
+  }
 
   goto yynewstate;
 
@@ -1901,7 +1900,7 @@ yyreturn:
 #endif
   return yyresult;
 }
-#line 395 "label.y" /* yacc.c:1906  */
+#line 395 "../src/preproc/refer/label.ypp" /* yacc.c:1903  */
 
 
 /* bison defines const to be empty unless __STDC__ is defined, which it
@@ -2004,7 +2003,7 @@ int set_short_label_spec(const char *label_spec)
 void yyerror(const char *message)
 {
   if (spec_cur < spec_end)
-    command_error("label specification %1 before `%2'", message, spec_cur);
+    command_error("label specification %1 before '%2'", message, spec_cur);
   else
     command_error("label specification %1 at end of string",
                  message, spec_cur);
@@ -2538,8 +2537,8 @@ void compute_labels(reference **v, int n)
 /* A reference with a list of authors <A0,A1,...,AN> _needs_ author i
 where 0 <= i <= N if there exists a reference with a list of authors
 <B0,B1,...,BM> such that <A0,A1,...,AN> != <B0,B1,...,BM> and M >= i
-and Aj = Bj for 0 <= j < i. In this case if we can't say ``A0,
-A1,...,A(i-1) et al'' because this would match both <A0,A1,...,AN> and
+and Aj = Bj for 0 <= j < i. In this case if we can't say "A0,
+A1,...,A(i-1) et al" because this would match both <A0,A1,...,AN> and
 <B0,B1,...,BM>.  If a reference needs author i we only have to call
 need_author(j) for some j >= i such that the reference also needs
 author j. */
diff --git a/src/preproc/refer/label.hpp b/src/preproc/refer/label.hpp
new file mode 100644 (file)
index 0000000..3c76087
--- /dev/null
@@ -0,0 +1,86 @@
+/* A Bison parser, made by GNU Bison 3.2.  */
+
+/* Bison interface for Yacc-like parsers in C
+
+   Copyright (C) 1984, 1989-1990, 2000-2015, 2018 Free Software Foundation, Inc.
+
+   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 3 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, see <http://www.gnu.org/licenses/>.  */
+
+/* As a special exception, you may create a larger work that contains
+   part or all of the Bison parser skeleton and distribute that work
+   under terms of your choice, so long as that work isn't itself a
+   parser generator using the skeleton or a modified version thereof
+   as a parser skeleton.  Alternatively, if you modify or redistribute
+   the parser skeleton itself, you may (at your option) remove this
+   special exception, which will cause the skeleton and the resulting
+   Bison output files to be licensed under the GNU General Public
+   License without this special exception.
+
+   This special exception was added by the Free Software Foundation in
+   version 2.2 of Bison.  */
+
+/* Undocumented macros, especially those whose name start with YY_,
+   are private implementation details.  Do not rely on them.  */
+
+#ifndef YY_YY_SRC_PREPROC_REFER_LABEL_HPP_INCLUDED
+# define YY_YY_SRC_PREPROC_REFER_LABEL_HPP_INCLUDED
+/* Debug traces.  */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int yydebug;
+#endif
+
+/* Token type.  */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+  enum yytokentype
+  {
+    TOKEN_LETTER = 258,
+    TOKEN_LITERAL = 259,
+    TOKEN_DIGIT = 260
+  };
+#endif
+/* Tokens.  */
+#define TOKEN_LETTER 258
+#define TOKEN_LITERAL 259
+#define TOKEN_DIGIT 260
+
+/* Value type.  */
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+
+union YYSTYPE
+{
+#line 220 "../src/preproc/refer/label.ypp" /* yacc.c:1906  */
+
+  int num;
+  expression *expr;
+  struct { int ndigits; int val; } dig;
+  struct { int start; int len; } str;
+
+#line 74 "src/preproc/refer/label.hpp" /* yacc.c:1906  */
+};
+
+typedef union YYSTYPE YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+
+extern YYSTYPE yylval;
+
+int yyparse (void);
+
+#endif /* !YY_YY_SRC_PREPROC_REFER_LABEL_HPP_INCLUDED  */
diff --git a/src/preproc/refer/label.y b/src/preproc/refer/label.y
deleted file mode 100644 (file)
index 7d0708a..0000000
+++ /dev/null
@@ -1,1191 +0,0 @@
-/* -*- C++ -*-
-   Copyright (C) 1989-2014  Free Software Foundation, Inc.
-     Written by James Clark (jjc@jclark.com)
-
-This file is part of groff.
-
-groff 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 3 of the License, or
-(at your option) any later version.
-
-groff 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, see <http://www.gnu.org/licenses/>. */
-
-%{
-
-#include "refer.h"
-#include "refid.h"
-#include "ref.h"
-#include "token.h"
-
-int yylex();
-void yyerror(const char *);
-int yyparse();
-
-static const char *format_serial(char c, int n);
-
-struct label_info {
-  int start;
-  int length;
-  int count;
-  int total;
-  label_info(const string &);
-};
-
-label_info *lookup_label(const string &label);
-
-struct expression {
-  enum {
-    // Does the tentative label depend on the reference?
-    CONTAINS_VARIABLE = 01, 
-    CONTAINS_STAR = 02,
-    CONTAINS_FORMAT = 04,
-    CONTAINS_AT = 010
-  };
-  virtual ~expression() { }
-  virtual void evaluate(int, const reference &, string &,
-                       substring_position &) = 0;
-  virtual unsigned analyze() { return 0; }
-};
-
-class at_expr : public expression {
-public:
-  at_expr() { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return CONTAINS_VARIABLE|CONTAINS_AT; }
-};
-
-class format_expr : public expression {
-  char type;
-  int width;
-  int first_number;
-public:
-  format_expr(char c, int w = 0, int f = 1)
-    : type(c), width(w), first_number(f) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return CONTAINS_FORMAT; }
-};
-
-class field_expr : public expression {
-  int number;
-  char name;
-public:
-  field_expr(char nm, int num) : number(num), name(nm) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return CONTAINS_VARIABLE; }
-};
-
-class literal_expr : public expression {
-  string s;
-public:
-  literal_expr(const char *ptr, int len) : s(ptr, len) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class unary_expr : public expression {
-protected:
-  expression *expr;
-public:
-  unary_expr(expression *e) : expr(e) { }
-  ~unary_expr() { delete expr; }
-  void evaluate(int, const reference &, string &, substring_position &) = 0;
-  unsigned analyze() { return expr ? expr->analyze() : 0; }
-};
-
-// This caches the analysis of an expression.
-
-class analyzed_expr : public unary_expr {
-  unsigned flags;
-public:
-  analyzed_expr(expression *);
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() { return flags; }
-};
-
-class star_expr : public unary_expr {
-public:
-  star_expr(expression *e) : unary_expr(e) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-  unsigned analyze() {
-    return ((expr ? (expr->analyze() & ~CONTAINS_VARIABLE) : 0)
-           | CONTAINS_STAR);
-  }
-};
-
-typedef void map_func(const char *, const char *, string &);
-
-class map_expr : public unary_expr {
-  map_func *func;
-public:
-  map_expr(expression *e, map_func *f) : unary_expr(e), func(f) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-  
-typedef const char *extractor_func(const char *, const char *, const char **);
-
-class extractor_expr : public unary_expr {
-  int part;
-  extractor_func *func;
-public:
-  enum { BEFORE = +1, MATCH = 0, AFTER = -1 };
-  extractor_expr(expression *e, extractor_func *f, int pt)
-    : unary_expr(e), part(pt), func(f) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class truncate_expr : public unary_expr {
-  int n;
-public:
-  truncate_expr(expression *e, int i) : unary_expr(e), n(i) { } 
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class separator_expr : public unary_expr {
-public:
-  separator_expr(expression *e) : unary_expr(e) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class binary_expr : public expression {
-protected:
-  expression *expr1;
-  expression *expr2;
-public:
-  binary_expr(expression *e1, expression *e2) : expr1(e1), expr2(e2) { }
-  ~binary_expr() { delete expr1; delete expr2; }
-  void evaluate(int, const reference &, string &, substring_position &) = 0;
-  unsigned analyze() {
-    return (expr1 ? expr1->analyze() : 0) | (expr2 ? expr2->analyze() : 0);
-  }
-};
-
-class alternative_expr : public binary_expr {
-public:
-  alternative_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class list_expr : public binary_expr {
-public:
-  list_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class substitute_expr : public binary_expr {
-public:
-  substitute_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-class ternary_expr : public expression {
-protected:
-  expression *expr1;
-  expression *expr2;
-  expression *expr3;
-public:
-  ternary_expr(expression *e1, expression *e2, expression *e3)
-    : expr1(e1), expr2(e2), expr3(e3) { }
-  ~ternary_expr() { delete expr1; delete expr2; delete expr3; }
-  void evaluate(int, const reference &, string &, substring_position &) = 0;
-  unsigned analyze() {
-    return ((expr1 ? expr1->analyze() : 0)
-           | (expr2 ? expr2->analyze() : 0)
-           | (expr3 ? expr3->analyze() : 0));
-  }
-};
-
-class conditional_expr : public ternary_expr {
-public:
-  conditional_expr(expression *e1, expression *e2, expression *e3)
-    : ternary_expr(e1, e2, e3) { }
-  void evaluate(int, const reference &, string &, substring_position &);
-};
-
-static expression *parsed_label = 0;
-static expression *parsed_date_label = 0;
-static expression *parsed_short_label = 0;
-
-static expression *parse_result;
-
-string literals;
-
-%}
-
-%union {
-  int num;
-  expression *expr;
-  struct { int ndigits; int val; } dig;
-  struct { int start; int len; } str;
-}
-
-/* uppercase or lowercase letter */
-%token <num> TOKEN_LETTER
-/* literal characters */
-%token <str> TOKEN_LITERAL
-/* digit */
-%token <num> TOKEN_DIGIT
-
-%type <expr> conditional
-%type <expr> alternative
-%type <expr> list
-%type <expr> string
-%type <expr> substitute
-%type <expr> optional_conditional
-%type <num> number
-%type <dig> digits
-%type <num> optional_number
-%type <num> flag
-
-%%
-
-expr:
-       optional_conditional
-               { parse_result = ($1 ? new analyzed_expr($1) : 0); }
-       ;
-
-conditional:
-       alternative
-               { $$ = $1; }
-       | alternative '?' optional_conditional ':' conditional
-               { $$ = new conditional_expr($1, $3, $5); }
-       ;
-
-optional_conditional:
-       /* empty */
-               { $$ = 0; }
-       | conditional
-               { $$ = $1; }
-       ;
-
-alternative:
-       list
-               { $$ = $1; }
-       | alternative '|' list
-               { $$ = new alternative_expr($1, $3); }
-       | alternative '&' list
-               { $$ = new conditional_expr($1, $3, 0); }
-       ;       
-
-list:
-       substitute
-               { $$ = $1; }
-       | list substitute
-               { $$ = new list_expr($1, $2); }
-       ;
-
-substitute:
-       string
-               { $$ = $1; }
-       | substitute '~' string
-               { $$ = new substitute_expr($1, $3); }
-       ;
-
-string:
-       '@'
-               { $$ = new at_expr; }
-       | TOKEN_LITERAL
-               {
-                 $$ = new literal_expr(literals.contents() + $1.start,
-                                       $1.len);
-               }
-       | TOKEN_LETTER
-               { $$ = new field_expr($1, 0); }
-       | TOKEN_LETTER number
-               { $$ = new field_expr($1, $2 - 1); }
-       | '%' TOKEN_LETTER
-               {
-                 switch ($2) {
-                 case 'I':
-                 case 'i':
-                 case 'A':
-                 case 'a':
-                   $$ = new format_expr($2);
-                   break;
-                 default:
-                   command_error("unrecognized format `%1'", char($2));
-                   $$ = new format_expr('a');
-                   break;
-                 }
-               }
-       
-       | '%' digits
-               {
-                 $$ = new format_expr('0', $2.ndigits, $2.val);
-               }
-       | string '.' flag TOKEN_LETTER optional_number
-               {
-                 switch ($4) {
-                 case 'l':
-                   $$ = new map_expr($1, lowercase);
-                   break;
-                 case 'u':
-                   $$ = new map_expr($1, uppercase);
-                   break;
-                 case 'c':
-                   $$ = new map_expr($1, capitalize);
-                   break;
-                 case 'r':
-                   $$ = new map_expr($1, reverse_name);
-                   break;
-                 case 'a':
-                   $$ = new map_expr($1, abbreviate_name);
-                   break;
-                 case 'y':
-                   $$ = new extractor_expr($1, find_year, $3);
-                   break;
-                 case 'n':
-                   $$ = new extractor_expr($1, find_last_name, $3);
-                   break;
-                 default:
-                   $$ = $1;
-                   command_error("unknown function `%1'", char($4));
-                   break;
-                 }
-               }
-
-       | string '+' number
-               { $$ = new truncate_expr($1, $3); }
-       | string '-' number
-               { $$ = new truncate_expr($1, -$3); }
-       | string '*'
-               { $$ = new star_expr($1); }
-       | '(' optional_conditional ')'
-               { $$ = $2; }
-       | '<' optional_conditional '>'
-               { $$ = new separator_expr($2); }
-       ;
-
-optional_number:
-       /* empty */
-               { $$ = -1; }
-       | number
-               { $$ = $1; }
-       ;
-
-number:
-       TOKEN_DIGIT
-               { $$ = $1; }
-       | number TOKEN_DIGIT
-               { $$ = $1*10 + $2; }
-       ;
-
-digits:
-       TOKEN_DIGIT
-               { $$.ndigits = 1; $$.val = $1; }
-       | digits TOKEN_DIGIT
-               { $$.ndigits = $1.ndigits + 1; $$.val = $1.val*10 + $2; }
-       ;
-       
-      
-flag:
-       /* empty */
-               { $$ = 0; }
-       | '+'
-               { $$ = 1; }
-       | '-'
-               { $$ = -1; }
-       ;
-
-%%
-
-/* bison defines const to be empty unless __STDC__ is defined, which it
-isn't under cfront */
-
-#ifdef const
-#undef const
-#endif
-
-const char *spec_ptr;
-const char *spec_end;
-const char *spec_cur;
-
-static char uppercase_array[] = {
-  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
-  'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
-  'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
-  'Y', 'Z',
-};
-  
-static char lowercase_array[] = {
-  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
-  'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
-  'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
-  'y', 'z',
-};
-
-int yylex()
-{
-  while (spec_ptr < spec_end && csspace(*spec_ptr))
-    spec_ptr++;
-  spec_cur = spec_ptr;
-  if (spec_ptr >= spec_end)
-    return 0;
-  unsigned char c = *spec_ptr++;
-  if (csalpha(c)) {
-    yylval.num = c;
-    return TOKEN_LETTER;
-  }
-  if (csdigit(c)) {
-    yylval.num = c - '0';
-    return TOKEN_DIGIT;
-  }
-  if (c == '\'') {
-    yylval.str.start = literals.length();
-    for (; spec_ptr < spec_end; spec_ptr++) {
-      if (*spec_ptr == '\'') {
-       if (++spec_ptr < spec_end && *spec_ptr == '\'')
-         literals += '\'';
-       else {
-         yylval.str.len = literals.length() - yylval.str.start;
-         return TOKEN_LITERAL;
-       }
-      }
-      else
-       literals += *spec_ptr;
-    }
-    yylval.str.len = literals.length() - yylval.str.start;
-    return TOKEN_LITERAL;
-  }
-  return c;
-}
-
-int set_label_spec(const char *label_spec)
-{
-  spec_cur = spec_ptr = label_spec;
-  spec_end = strchr(label_spec, '\0');
-  literals.clear();
-  if (yyparse())
-    return 0;
-  delete parsed_label;
-  parsed_label = parse_result;
-  return 1;
-}
-
-int set_date_label_spec(const char *label_spec)
-{
-  spec_cur = spec_ptr = label_spec;
-  spec_end = strchr(label_spec, '\0');
-  literals.clear();
-  if (yyparse())
-    return 0;
-  delete parsed_date_label;
-  parsed_date_label = parse_result;
-  return 1;
-}
-
-int set_short_label_spec(const char *label_spec)
-{
-  spec_cur = spec_ptr = label_spec;
-  spec_end = strchr(label_spec, '\0');
-  literals.clear();
-  if (yyparse())
-    return 0;
-  delete parsed_short_label;
-  parsed_short_label = parse_result;
-  return 1;
-}
-
-void yyerror(const char *message)
-{
-  if (spec_cur < spec_end)
-    command_error("label specification %1 before `%2'", message, spec_cur);
-  else
-    command_error("label specification %1 at end of string",
-                 message, spec_cur);
-}
-
-void at_expr::evaluate(int tentative, const reference &ref,
-                      string &result, substring_position &)
-{
-  if (tentative)
-    ref.canonicalize_authors(result);
-  else {
-    const char *end, *start = ref.get_authors(&end);
-    if (start)
-      result.append(start, end - start);
-  }
-}
-
-void format_expr::evaluate(int tentative, const reference &ref,
-                          string &result, substring_position &)
-{
-  if (tentative)
-    return;
-  const label_info *lp = ref.get_label_ptr();
-  int num = lp == 0 ? ref.get_number() : lp->count;
-  if (type != '0')
-    result += format_serial(type, num + 1);
-  else {
-    const char *ptr = i_to_a(num + first_number);
-    int pad = width - strlen(ptr);
-    while (--pad >= 0)
-      result += '0';
-    result += ptr;
-  }
-}
-
-static const char *format_serial(char c, int n)
-{
-  assert(n > 0);
-  static char buf[128]; // more than enough.
-  switch (c) {
-  case 'i':
-  case 'I':
-    {
-      char *p = buf;
-      // troff uses z and w to represent 10000 and 5000 in Roman
-      // numerals; I can find no historical basis for this usage
-      const char *s = c == 'i' ? "zwmdclxvi" : "ZWMDCLXVI";
-      if (n >= 40000)
-       return i_to_a(n);
-      while (n >= 10000) {
-       *p++ = s[0];
-       n -= 10000;
-      }
-      for (int i = 1000; i > 0; i /= 10, s += 2) {
-       int m = n/i;
-       n -= m*i;
-       switch (m) {
-       case 3:
-         *p++ = s[2];
-         /* falls through */
-       case 2:
-         *p++ = s[2];
-         /* falls through */
-       case 1:
-         *p++ = s[2];
-         break;
-       case 4:
-         *p++ = s[2];
-         *p++ = s[1];
-         break;
-       case 8:
-         *p++ = s[1];
-         *p++ = s[2];
-         *p++ = s[2];
-         *p++ = s[2];
-         break;
-       case 7:
-         *p++ = s[1];
-         *p++ = s[2];
-         *p++ = s[2];
-         break;
-       case 6:
-         *p++ = s[1];
-         *p++ = s[2];
-         break;
-       case 5:
-         *p++ = s[1];
-         break;
-       case 9:
-         *p++ = s[2];
-         *p++ = s[0];
-       }
-      }
-      *p = 0;
-      break;
-    }
-  case 'a':
-  case 'A':
-    {
-      char *p = buf;
-      // this is derived from troff/reg.c
-      while (n > 0) {
-       int d = n % 26;
-       if (d == 0)
-         d = 26;
-       n -= d;
-       n /= 26;
-       *p++ = c == 'a' ? lowercase_array[d - 1] :
-                              uppercase_array[d - 1];
-      }
-      *p-- = 0;
-      // Reverse it.
-      char *q = buf;
-      while (q < p) {
-       char temp = *q;
-       *q = *p;
-       *p = temp;
-       --p;
-       ++q;
-      }
-      break;
-    }
-  default:
-    assert(0);
-  }
-  return buf;
-}
-
-void field_expr::evaluate(int, const reference &ref,
-                         string &result, substring_position &)
-{
-  const char *end;
-  const char *start = ref.get_field(name, &end);
-  if (start) {
-    start = nth_field(number, start, &end);
-    if (start)
-      result.append(start, end - start);
-  }
-}
-
-void literal_expr::evaluate(int, const reference &,
-                           string &result, substring_position &)
-{
-  result += s;
-}
-
-analyzed_expr::analyzed_expr(expression *e)
-: unary_expr(e), flags(e ? e->analyze() : 0)
-{
-}
-
-void analyzed_expr::evaluate(int tentative, const reference &ref,
-                            string &result, substring_position &pos)
-{
-  if (expr)
-    expr->evaluate(tentative, ref, result, pos);
-}
-
-void star_expr::evaluate(int tentative, const reference &ref,
-                        string &result, substring_position &pos)
-{
-  const label_info *lp = ref.get_label_ptr();
-  if (!tentative
-      && (lp == 0 || lp->total > 1)
-      && expr)
-    expr->evaluate(tentative, ref, result, pos);
-}
-
-void separator_expr::evaluate(int tentative, const reference &ref,
-                             string &result, substring_position &pos)
-{
-  int start_length = result.length();
-  int is_first = pos.start < 0;
-  if (expr)
-    expr->evaluate(tentative, ref, result, pos);
-  if (is_first) {
-    pos.start = start_length;
-    pos.length = result.length() - start_length;
-  }
-}
-
-void map_expr::evaluate(int tentative, const reference &ref,
-                       string &result, substring_position &)
-{
-  if (expr) {
-    string temp;
-    substring_position temp_pos;
-    expr->evaluate(tentative, ref, temp, temp_pos);
-    (*func)(temp.contents(), temp.contents() + temp.length(), result);
-  }
-}
-
-void extractor_expr::evaluate(int tentative, const reference &ref,
-                             string &result, substring_position &)
-{
-  if (expr) {
-    string temp;
-    substring_position temp_pos;
-    expr->evaluate(tentative, ref, temp, temp_pos);
-    const char *end, *start = (*func)(temp.contents(),
-                                     temp.contents() + temp.length(),
-                                     &end);
-    switch (part) {
-    case BEFORE:
-      if (start)
-       result.append(temp.contents(), start - temp.contents());
-      else
-       result += temp;
-      break;
-    case MATCH:
-      if (start)
-       result.append(start, end - start);
-      break;
-    case AFTER:
-      if (start)
-       result.append(end, temp.contents() + temp.length() - end);
-      break;
-    default:
-      assert(0);
-    }
-  }
-}
-
-static void first_part(int len, const char *ptr, const char *end,
-                         string &result)
-{
-  for (;;) {
-    const char *token_start = ptr;
-    if (!get_token(&ptr, end))
-      break;
-    const token_info *ti = lookup_token(token_start, ptr);
-    int counts = ti->sortify_non_empty(token_start, ptr);
-    if (counts && --len < 0)
-      break;
-    if (counts || ti->is_accent())
-      result.append(token_start, ptr - token_start);
-  }
-}
-
-static void last_part(int len, const char *ptr, const char *end,
-                     string &result)
-{
-  const char *start = ptr;
-  int count = 0;
-  for (;;) {
-    const char *token_start = ptr;
-    if (!get_token(&ptr, end))
-      break;
-    const token_info *ti = lookup_token(token_start, ptr);
-    if (ti->sortify_non_empty(token_start, ptr))
-      count++;
-  }
-  ptr = start;
-  int skip = count - len;
-  if (skip > 0) {
-    for (;;) {
-      const char *token_start = ptr;
-      if (!get_token(&ptr, end))
-       assert(0);
-      const token_info *ti = lookup_token(token_start, ptr);
-      if (ti->sortify_non_empty(token_start, ptr) && --skip < 0) {
-       ptr = token_start;
-       break;
-      }
-    }
-  }
-  first_part(len, ptr, end, result);
-}
-
-void truncate_expr::evaluate(int tentative, const reference &ref,
-                            string &result, substring_position &)
-{
-  if (expr) {
-    string temp;
-    substring_position temp_pos;
-    expr->evaluate(tentative, ref, temp, temp_pos);
-    const char *start = temp.contents();
-    const char *end = start + temp.length();
-    if (n > 0)
-      first_part(n, start, end, result);
-    else if (n < 0)
-      last_part(-n, start, end, result);
-  }
-}
-
-void alternative_expr::evaluate(int tentative, const reference &ref,
-                               string &result, substring_position &pos)
-{
-  int start_length = result.length();
-  if (expr1)
-    expr1->evaluate(tentative, ref, result, pos);
-  if (result.length() == start_length && expr2)
-    expr2->evaluate(tentative, ref, result, pos);
-}
-
-void list_expr::evaluate(int tentative, const reference &ref,
-                        string &result, substring_position &pos)
-{
-  if (expr1)
-    expr1->evaluate(tentative, ref, result, pos);
-  if (expr2)
-    expr2->evaluate(tentative, ref, result, pos);
-}
-
-void substitute_expr::evaluate(int tentative, const reference &ref,
-                              string &result, substring_position &pos)
-{
-  int start_length = result.length();
-  if (expr1)
-    expr1->evaluate(tentative, ref, result, pos);
-  if (result.length() > start_length && result[result.length() - 1] == '-') {
-    // ought to see if pos covers the -
-    result.set_length(result.length() - 1);
-    if (expr2)
-      expr2->evaluate(tentative, ref, result, pos);
-  }
-}
-
-void conditional_expr::evaluate(int tentative, const reference &ref,
-                               string &result, substring_position &pos)
-{
-  string temp;
-  substring_position temp_pos;
-  if (expr1)
-    expr1->evaluate(tentative, ref, temp, temp_pos);
-  if (temp.length() > 0) {
-    if (expr2)
-      expr2->evaluate(tentative, ref, result, pos);
-  }
-  else {
-    if (expr3)
-      expr3->evaluate(tentative, ref, result, pos);
-  }
-}
-
-void reference::pre_compute_label()
-{
-  if (parsed_label != 0
-      && (parsed_label->analyze() & expression::CONTAINS_VARIABLE)) {
-    label.clear();
-    substring_position temp_pos;
-    parsed_label->evaluate(1, *this, label, temp_pos);
-    label_ptr = lookup_label(label);
-  }
-}
-
-void reference::compute_label()
-{
-  label.clear();
-  if (parsed_label)
-    parsed_label->evaluate(0, *this, label, separator_pos);
-  if (short_label_flag && parsed_short_label)
-    parsed_short_label->evaluate(0, *this, short_label, short_separator_pos);
-  if (date_as_label) {
-    string new_date;
-    if (parsed_date_label) {
-      substring_position temp_pos;
-      parsed_date_label->evaluate(0, *this, new_date, temp_pos);
-    }
-    set_date(new_date);
-  }
-  if (label_ptr)
-    label_ptr->count += 1;
-}
-
-void reference::immediate_compute_label()
-{
-  if (label_ptr)
-    label_ptr->total = 2;      // force use of disambiguator
-  compute_label();
-}
-
-int reference::merge_labels(reference **v, int n, label_type type,
-                           string &result)
-{
-  if (abbreviate_label_ranges)
-    return merge_labels_by_number(v, n, type, result);
-  else
-    return merge_labels_by_parts(v, n, type, result);
-}
-
-int reference::merge_labels_by_number(reference **v, int n, label_type type,
-                                     string &result)
-{
-  if (n <= 1)
-    return 0;
-  int num = get_number();
-  // Only merge three or more labels.
-  if (v[0]->get_number() != num + 1
-      || v[1]->get_number() != num + 2)
-    return 0;
-  int i;
-  for (i = 2; i < n; i++)
-    if (v[i]->get_number() != num + i + 1)
-      break;
-  result = get_label(type);
-  result += label_range_indicator;
-  result += v[i - 1]->get_label(type);
-  return i;
-}
-
-const substring_position &reference::get_separator_pos(label_type type) const
-{
-  if (type == SHORT_LABEL && short_label_flag)
-    return short_separator_pos;
-  else
-    return separator_pos;
-}
-
-const string &reference::get_label(label_type type) const
-{
-  if (type == SHORT_LABEL && short_label_flag)
-    return short_label; 
-  else
-    return label;
-}
-
-int reference::merge_labels_by_parts(reference **v, int n, label_type type,
-                                    string &result)
-{
-  if (n <= 0)
-    return 0;
-  const string &lb = get_label(type);
-  const substring_position &sp = get_separator_pos(type);
-  if (sp.start < 0
-      || sp.start != v[0]->get_separator_pos(type).start 
-      || memcmp(lb.contents(), v[0]->get_label(type).contents(),
-               sp.start) != 0)
-    return 0;
-  result = lb;
-  int i = 0;
-  do {
-    result += separate_label_second_parts;
-    const substring_position &s = v[i]->get_separator_pos(type);
-    int sep_end_pos = s.start + s.length;
-    result.append(v[i]->get_label(type).contents() + sep_end_pos,
-                 v[i]->get_label(type).length() - sep_end_pos);
-  } while (++i < n
-          && sp.start == v[i]->get_separator_pos(type).start
-          && memcmp(lb.contents(), v[i]->get_label(type).contents(),
-                    sp.start) == 0);
-  return i;
-}
-
-string label_pool;
-
-label_info::label_info(const string &s)
-: start(label_pool.length()), length(s.length()), count(0), total(1)
-{
-  label_pool += s;
-}
-
-static label_info **label_table = 0;
-static int label_table_size = 0;
-static int label_table_used = 0;
-
-label_info *lookup_label(const string &label)
-{
-  if (label_table == 0) {
-    label_table = new label_info *[17];
-    label_table_size = 17;
-    for (int i = 0; i < 17; i++)
-      label_table[i] = 0;
-  }
-  unsigned h = hash_string(label.contents(), label.length()) % label_table_size;
-  label_info **ptr;
-  for (ptr = label_table + h;
-       *ptr != 0;
-       (ptr == label_table)
-       ? (ptr = label_table + label_table_size - 1)
-       : ptr--)
-    if ((*ptr)->length == label.length()
-       && memcmp(label_pool.contents() + (*ptr)->start, label.contents(),
-                 label.length()) == 0) {
-      (*ptr)->total += 1;
-      return *ptr;
-    }
-  label_info *result = *ptr = new label_info(label);
-  if (++label_table_used * 2 > label_table_size) {
-    // Rehash the table.
-    label_info **old_table = label_table;
-    int old_size = label_table_size;
-    label_table_size = next_size(label_table_size);
-    label_table = new label_info *[label_table_size];
-    int i;
-    for (i = 0; i < label_table_size; i++)
-      label_table[i] = 0;
-    for (i = 0; i < old_size; i++)
-      if (old_table[i]) {
-       h = hash_string(label_pool.contents() + old_table[i]->start,
-                       old_table[i]->length);
-       label_info **p;
-       for (p = label_table + (h % label_table_size);
-            *p != 0;
-            (p == label_table)
-            ? (p = label_table + label_table_size - 1)
-            : --p)
-           ;
-       *p = old_table[i];
-       }
-    a_delete old_table;
-  }
-  return result;
-}
-
-void clear_labels()
-{
-  for (int i = 0; i < label_table_size; i++) {
-    delete label_table[i];
-    label_table[i] = 0;
-  }
-  label_table_used = 0;
-  label_pool.clear();
-}
-
-static void consider_authors(reference **start, reference **end, int i);
-
-void compute_labels(reference **v, int n)
-{
-  if (parsed_label
-      && (parsed_label->analyze() & expression::CONTAINS_AT)
-      && sort_fields.length() >= 2
-      && sort_fields[0] == 'A'
-      && sort_fields[1] == '+')
-    consider_authors(v, v + n, 0);
-  for (int i = 0; i < n; i++)
-    v[i]->compute_label();
-}
-
-
-/* A reference with a list of authors <A0,A1,...,AN> _needs_ author i
-where 0 <= i <= N if there exists a reference with a list of authors
-<B0,B1,...,BM> such that <A0,A1,...,AN> != <B0,B1,...,BM> and M >= i
-and Aj = Bj for 0 <= j < i. In this case if we can't say ``A0,
-A1,...,A(i-1) et al'' because this would match both <A0,A1,...,AN> and
-<B0,B1,...,BM>.  If a reference needs author i we only have to call
-need_author(j) for some j >= i such that the reference also needs
-author j. */
-
-/* This function handles 2 tasks:
-determine which authors are needed (cannot be elided with et al.);
-determine which authors can have only last names in the labels.
-
-References >= start and < end have the same first i author names.
-Also they're sorted by A+. */
-
-static void consider_authors(reference **start, reference **end, int i)
-{
-  if (start >= end)
-    return;
-  reference **p = start;
-  if (i >= (*p)->get_nauthors()) {
-    for (++p; p < end && i >= (*p)->get_nauthors(); p++)
-      ;
-    if (p < end && i > 0) {
-      // If we have an author list <A B C> and an author list <A B C D>,
-      // then both lists need C.
-      for (reference **q = start; q < end; q++)
-       (*q)->need_author(i - 1);
-    }
-    start = p;
-  }
-  while (p < end) {
-    reference **last_name_start = p;
-    reference **name_start = p;
-    for (++p;
-        p < end && i < (*p)->get_nauthors()
-        && same_author_last_name(**last_name_start, **p, i);
-        p++) {
-      if (!same_author_name(**name_start, **p, i)) {
-       consider_authors(name_start, p, i + 1);
-       name_start = p;
-      }
-    }
-    consider_authors(name_start, p, i + 1);
-    if (last_name_start == name_start) {
-      for (reference **q = last_name_start; q < p; q++)
-       (*q)->set_last_name_unambiguous(i);
-    }
-    // If we have an author list <A B C D> and <A B C E>, then the lists
-    // need author D and E respectively.
-    if (name_start > start || p < end) {
-      for (reference **q = last_name_start; q < p; q++)
-       (*q)->need_author(i);
-    }
-  }
-}
-
-int same_author_last_name(const reference &r1, const reference &r2, int n)
-{
-  const char *ae1;
-  const char *as1 = r1.get_sort_field(0, n, 0, &ae1);
-  const char *ae2;
-  const char *as2 = r2.get_sort_field(0, n, 0, &ae2);
-  if (!as1 && !as2) return 1;  // they are the same
-  if (!as1 || !as2) return 0;
-  return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
-}
-
-int same_author_name(const reference &r1, const reference &r2, int n)
-{
-  const char *ae1;
-  const char *as1 = r1.get_sort_field(0, n, -1, &ae1);
-  const char *ae2;
-  const char *as2 = r2.get_sort_field(0, n, -1, &ae2);
-  if (!as1 && !as2) return 1;  // they are the same
-  if (!as1 || !as2) return 0;
-  return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
-}
-
-
-void int_set::set(int i)
-{
-  assert(i >= 0);
-  int bytei = i >> 3;
-  if (bytei >= v.length()) {
-    int old_length = v.length();
-    v.set_length(bytei + 1);
-    for (int j = old_length; j <= bytei; j++)
-      v[j] = 0;
-  }
-  v[bytei] |= 1 << (i & 7);
-}
-
-int int_set::get(int i) const
-{
-  assert(i >= 0);
-  int bytei = i >> 3;
-  return bytei >= v.length() ? 0 : (v[bytei] & (1 << (i & 7))) != 0;
-}
-
-void reference::set_last_name_unambiguous(int i)
-{
-  last_name_unambiguous.set(i);
-}
-
-void reference::need_author(int n)
-{
-  if (n > last_needed_author)
-    last_needed_author = n;
-}
-
-const char *reference::get_authors(const char **end) const
-{
-  if (!computed_authors) {
-    ((reference *)this)->computed_authors = 1;
-    string &result = ((reference *)this)->authors;
-    int na = get_nauthors();
-    result.clear();
-    for (int i = 0; i < na; i++) {
-      if (last_name_unambiguous.get(i)) {
-       const char *e, *start = get_author_last_name(i, &e);
-       assert(start != 0);
-       result.append(start, e - start);
-      }
-      else {
-       const char *e, *start = get_author(i, &e);
-       assert(start != 0);
-       result.append(start, e - start);
-      }
-      if (i == last_needed_author
-         && et_al.length() > 0
-         && et_al_min_elide > 0
-         && last_needed_author + et_al_min_elide < na
-         && na >= et_al_min_total) {
-       result += et_al;
-       break;
-      }
-      if (i < na - 1) {
-       if (na == 2)
-         result += join_authors_exactly_two;
-       else if (i < na - 2)
-         result += join_authors_default;
-       else
-         result += join_authors_last_two;
-      }
-    }
-  }
-  const char *start = authors.contents();
-  *end = start + authors.length();
-  return start;
-}
-
-int reference::get_nauthors() const
-{
-  if (nauthors < 0) {
-    const char *dummy;
-    int na;
-    for (na = 0; get_author(na, &dummy) != 0; na++)
-      ;
-    ((reference *)this)->nauthors = na;
-  }
-  return nauthors;
-}
diff --git a/src/preproc/refer/label.ypp b/src/preproc/refer/label.ypp
new file mode 100644 (file)
index 0000000..6409990
--- /dev/null
@@ -0,0 +1,1191 @@
+/* -*- C++ -*-
+   Copyright (C) 1989-2018 Free Software Foundation, Inc.
+     Written by James Clark (jjc@jclark.com)
+
+This file is part of groff.
+
+groff 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 3 of the License, or
+(at your option) any later version.
+
+groff 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, see <http://www.gnu.org/licenses/>. */
+
+%{
+
+#include "refer.h"
+#include "refid.h"
+#include "ref.h"
+#include "token.h"
+
+int yylex();
+void yyerror(const char *);
+int yyparse();
+
+static const char *format_serial(char c, int n);
+
+struct label_info {
+  int start;
+  int length;
+  int count;
+  int total;
+  label_info(const string &);
+};
+
+label_info *lookup_label(const string &label);
+
+struct expression {
+  enum {
+    // Does the tentative label depend on the reference?
+    CONTAINS_VARIABLE = 01, 
+    CONTAINS_STAR = 02,
+    CONTAINS_FORMAT = 04,
+    CONTAINS_AT = 010
+  };
+  virtual ~expression() { }
+  virtual void evaluate(int, const reference &, string &,
+                       substring_position &) = 0;
+  virtual unsigned analyze() { return 0; }
+};
+
+class at_expr : public expression {
+public:
+  at_expr() { }
+  void evaluate(int, const reference &, string &, substring_position &);
+  unsigned analyze() { return CONTAINS_VARIABLE|CONTAINS_AT; }
+};
+
+class format_expr : public expression {
+  char type;
+  int width;
+  int first_number;
+public:
+  format_expr(char c, int w = 0, int f = 1)
+    : type(c), width(w), first_number(f) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+  unsigned analyze() { return CONTAINS_FORMAT; }
+};
+
+class field_expr : public expression {
+  int number;
+  char name;
+public:
+  field_expr(char nm, int num) : number(num), name(nm) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+  unsigned analyze() { return CONTAINS_VARIABLE; }
+};
+
+class literal_expr : public expression {
+  string s;
+public:
+  literal_expr(const char *ptr, int len) : s(ptr, len) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class unary_expr : public expression {
+protected:
+  expression *expr;
+public:
+  unary_expr(expression *e) : expr(e) { }
+  ~unary_expr() { delete expr; }
+  void evaluate(int, const reference &, string &, substring_position &) = 0;
+  unsigned analyze() { return expr ? expr->analyze() : 0; }
+};
+
+// This caches the analysis of an expression.
+
+class analyzed_expr : public unary_expr {
+  unsigned flags;
+public:
+  analyzed_expr(expression *);
+  void evaluate(int, const reference &, string &, substring_position &);
+  unsigned analyze() { return flags; }
+};
+
+class star_expr : public unary_expr {
+public:
+  star_expr(expression *e) : unary_expr(e) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+  unsigned analyze() {
+    return ((expr ? (expr->analyze() & ~CONTAINS_VARIABLE) : 0)
+           | CONTAINS_STAR);
+  }
+};
+
+typedef void map_func(const char *, const char *, string &);
+
+class map_expr : public unary_expr {
+  map_func *func;
+public:
+  map_expr(expression *e, map_func *f) : unary_expr(e), func(f) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+  
+typedef const char *extractor_func(const char *, const char *, const char **);
+
+class extractor_expr : public unary_expr {
+  int part;
+  extractor_func *func;
+public:
+  enum { BEFORE = +1, MATCH = 0, AFTER = -1 };
+  extractor_expr(expression *e, extractor_func *f, int pt)
+    : unary_expr(e), part(pt), func(f) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class truncate_expr : public unary_expr {
+  int n;
+public:
+  truncate_expr(expression *e, int i) : unary_expr(e), n(i) { } 
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class separator_expr : public unary_expr {
+public:
+  separator_expr(expression *e) : unary_expr(e) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class binary_expr : public expression {
+protected:
+  expression *expr1;
+  expression *expr2;
+public:
+  binary_expr(expression *e1, expression *e2) : expr1(e1), expr2(e2) { }
+  ~binary_expr() { delete expr1; delete expr2; }
+  void evaluate(int, const reference &, string &, substring_position &) = 0;
+  unsigned analyze() {
+    return (expr1 ? expr1->analyze() : 0) | (expr2 ? expr2->analyze() : 0);
+  }
+};
+
+class alternative_expr : public binary_expr {
+public:
+  alternative_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class list_expr : public binary_expr {
+public:
+  list_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class substitute_expr : public binary_expr {
+public:
+  substitute_expr(expression *e1, expression *e2) : binary_expr(e1, e2) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+class ternary_expr : public expression {
+protected:
+  expression *expr1;
+  expression *expr2;
+  expression *expr3;
+public:
+  ternary_expr(expression *e1, expression *e2, expression *e3)
+    : expr1(e1), expr2(e2), expr3(e3) { }
+  ~ternary_expr() { delete expr1; delete expr2; delete expr3; }
+  void evaluate(int, const reference &, string &, substring_position &) = 0;
+  unsigned analyze() {
+    return ((expr1 ? expr1->analyze() : 0)
+           | (expr2 ? expr2->analyze() : 0)
+           | (expr3 ? expr3->analyze() : 0));
+  }
+};
+
+class conditional_expr : public ternary_expr {
+public:
+  conditional_expr(expression *e1, expression *e2, expression *e3)
+    : ternary_expr(e1, e2, e3) { }
+  void evaluate(int, const reference &, string &, substring_position &);
+};
+
+static expression *parsed_label = 0;
+static expression *parsed_date_label = 0;
+static expression *parsed_short_label = 0;
+
+static expression *parse_result;
+
+string literals;
+
+%}
+
+%union {
+  int num;
+  expression *expr;
+  struct { int ndigits; int val; } dig;
+  struct { int start; int len; } str;
+}
+
+/* uppercase or lowercase letter */
+%token <num> TOKEN_LETTER
+/* literal characters */
+%token <str> TOKEN_LITERAL
+/* digit */
+%token <num> TOKEN_DIGIT
+
+%type <expr> conditional
+%type <expr> alternative
+%type <expr> list
+%type <expr> string
+%type <expr> substitute
+%type <expr> optional_conditional
+%type <num> number
+%type <dig> digits
+%type <num> optional_number
+%type <num> flag
+
+%%
+
+expr:
+       optional_conditional
+               { parse_result = ($1 ? new analyzed_expr($1) : 0); }
+       ;
+
+conditional:
+       alternative
+               { $$ = $1; }
+       | alternative '?' optional_conditional ':' conditional
+               { $$ = new conditional_expr($1, $3, $5); }
+       ;
+
+optional_conditional:
+       /* empty */
+               { $$ = 0; }
+       | conditional
+               { $$ = $1; }
+       ;
+
+alternative:
+       list
+               { $$ = $1; }
+       | alternative '|' list
+               { $$ = new alternative_expr($1, $3); }
+       | alternative '&' list
+               { $$ = new conditional_expr($1, $3, 0); }
+       ;       
+
+list:
+       substitute
+               { $$ = $1; }
+       | list substitute
+               { $$ = new list_expr($1, $2); }
+       ;
+
+substitute:
+       string
+               { $$ = $1; }
+       | substitute '~' string
+               { $$ = new substitute_expr($1, $3); }
+       ;
+
+string:
+       '@'
+               { $$ = new at_expr; }
+       | TOKEN_LITERAL
+               {
+                 $$ = new literal_expr(literals.contents() + $1.start,
+                                       $1.len);
+               }
+       | TOKEN_LETTER
+               { $$ = new field_expr($1, 0); }
+       | TOKEN_LETTER number
+               { $$ = new field_expr($1, $2 - 1); }
+       | '%' TOKEN_LETTER
+               {
+                 switch ($2) {
+                 case 'I':
+                 case 'i':
+                 case 'A':
+                 case 'a':
+                   $$ = new format_expr($2);
+                   break;
+                 default:
+                   command_error("unrecognized format '%1'", char($2));
+                   $$ = new format_expr('a');
+                   break;
+                 }
+               }
+       
+       | '%' digits
+               {
+                 $$ = new format_expr('0', $2.ndigits, $2.val);
+               }
+       | string '.' flag TOKEN_LETTER optional_number
+               {
+                 switch ($4) {
+                 case 'l':
+                   $$ = new map_expr($1, lowercase);
+                   break;
+                 case 'u':
+                   $$ = new map_expr($1, uppercase);
+                   break;
+                 case 'c':
+                   $$ = new map_expr($1, capitalize);
+                   break;
+                 case 'r':
+                   $$ = new map_expr($1, reverse_name);
+                   break;
+                 case 'a':
+                   $$ = new map_expr($1, abbreviate_name);
+                   break;
+                 case 'y':
+                   $$ = new extractor_expr($1, find_year, $3);
+                   break;
+                 case 'n':
+                   $$ = new extractor_expr($1, find_last_name, $3);
+                   break;
+                 default:
+                   $$ = $1;
+                   command_error("unknown function '%1'", char($4));
+                   break;
+                 }
+               }
+
+       | string '+' number
+               { $$ = new truncate_expr($1, $3); }
+       | string '-' number
+               { $$ = new truncate_expr($1, -$3); }
+       | string '*'
+               { $$ = new star_expr($1); }
+       | '(' optional_conditional ')'
+               { $$ = $2; }
+       | '<' optional_conditional '>'
+               { $$ = new separator_expr($2); }
+       ;
+
+optional_number:
+       /* empty */
+               { $$ = -1; }
+       | number
+               { $$ = $1; }
+       ;
+
+number:
+       TOKEN_DIGIT
+               { $$ = $1; }
+       | number TOKEN_DIGIT
+               { $$ = $1*10 + $2; }
+       ;
+
+digits:
+       TOKEN_DIGIT
+               { $$.ndigits = 1; $$.val = $1; }
+       | digits TOKEN_DIGIT
+               { $$.ndigits = $1.ndigits + 1; $$.val = $1.val*10 + $2; }
+       ;
+       
+      
+flag:
+       /* empty */
+               { $$ = 0; }
+       | '+'
+               { $$ = 1; }
+       | '-'
+               { $$ = -1; }
+       ;
+
+%%
+
+/* bison defines const to be empty unless __STDC__ is defined, which it
+isn't under cfront */
+
+#ifdef const
+#undef const
+#endif
+
+const char *spec_ptr;
+const char *spec_end;
+const char *spec_cur;
+
+static char uppercase_array[] = {
+  'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H',
+  'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P',
+  'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X',
+  'Y', 'Z',
+};
+  
+static char lowercase_array[] = {
+  'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h',
+  'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p',
+  'q', 'r', 's', 't', 'u', 'v', 'w', 'x',
+  'y', 'z',
+};
+
+int yylex()
+{
+  while (spec_ptr < spec_end && csspace(*spec_ptr))
+    spec_ptr++;
+  spec_cur = spec_ptr;
+  if (spec_ptr >= spec_end)
+    return 0;
+  unsigned char c = *spec_ptr++;
+  if (csalpha(c)) {
+    yylval.num = c;
+    return TOKEN_LETTER;
+  }
+  if (csdigit(c)) {
+    yylval.num = c - '0';
+    return TOKEN_DIGIT;
+  }
+  if (c == '\'') {
+    yylval.str.start = literals.length();
+    for (; spec_ptr < spec_end; spec_ptr++) {
+      if (*spec_ptr == '\'') {
+       if (++spec_ptr < spec_end && *spec_ptr == '\'')
+         literals += '\'';
+       else {
+         yylval.str.len = literals.length() - yylval.str.start;
+         return TOKEN_LITERAL;
+       }
+      }
+      else
+       literals += *spec_ptr;
+    }
+    yylval.str.len = literals.length() - yylval.str.start;
+    return TOKEN_LITERAL;
+  }
+  return c;
+}
+
+int set_label_spec(const char *label_spec)
+{
+  spec_cur = spec_ptr = label_spec;
+  spec_end = strchr(label_spec, '\0');
+  literals.clear();
+  if (yyparse())
+    return 0;
+  delete parsed_label;
+  parsed_label = parse_result;
+  return 1;
+}
+
+int set_date_label_spec(const char *label_spec)
+{
+  spec_cur = spec_ptr = label_spec;
+  spec_end = strchr(label_spec, '\0');
+  literals.clear();
+  if (yyparse())
+    return 0;
+  delete parsed_date_label;
+  parsed_date_label = parse_result;
+  return 1;
+}
+
+int set_short_label_spec(const char *label_spec)
+{
+  spec_cur = spec_ptr = label_spec;
+  spec_end = strchr(label_spec, '\0');
+  literals.clear();
+  if (yyparse())
+    return 0;
+  delete parsed_short_label;
+  parsed_short_label = parse_result;
+  return 1;
+}
+
+void yyerror(const char *message)
+{
+  if (spec_cur < spec_end)
+    command_error("label specification %1 before '%2'", message, spec_cur);
+  else
+    command_error("label specification %1 at end of string",
+                 message, spec_cur);
+}
+
+void at_expr::evaluate(int tentative, const reference &ref,
+                      string &result, substring_position &)
+{
+  if (tentative)
+    ref.canonicalize_authors(result);
+  else {
+    const char *end, *start = ref.get_authors(&end);
+    if (start)
+      result.append(start, end - start);
+  }
+}
+
+void format_expr::evaluate(int tentative, const reference &ref,
+                          string &result, substring_position &)
+{
+  if (tentative)
+    return;
+  const label_info *lp = ref.get_label_ptr();
+  int num = lp == 0 ? ref.get_number() : lp->count;
+  if (type != '0')
+    result += format_serial(type, num + 1);
+  else {
+    const char *ptr = i_to_a(num + first_number);
+    int pad = width - strlen(ptr);
+    while (--pad >= 0)
+      result += '0';
+    result += ptr;
+  }
+}
+
+static const char *format_serial(char c, int n)
+{
+  assert(n > 0);
+  static char buf[128]; // more than enough.
+  switch (c) {
+  case 'i':
+  case 'I':
+    {
+      char *p = buf;
+      // troff uses z and w to represent 10000 and 5000 in Roman
+      // numerals; I can find no historical basis for this usage
+      const char *s = c == 'i' ? "zwmdclxvi" : "ZWMDCLXVI";
+      if (n >= 40000)
+       return i_to_a(n);
+      while (n >= 10000) {
+       *p++ = s[0];
+       n -= 10000;
+      }
+      for (int i = 1000; i > 0; i /= 10, s += 2) {
+       int m = n/i;
+       n -= m*i;
+       switch (m) {
+       case 3:
+         *p++ = s[2];
+         /* falls through */
+       case 2:
+         *p++ = s[2];
+         /* falls through */
+       case 1:
+         *p++ = s[2];
+         break;
+       case 4:
+         *p++ = s[2];
+         *p++ = s[1];
+         break;
+       case 8:
+         *p++ = s[1];
+         *p++ = s[2];
+         *p++ = s[2];
+         *p++ = s[2];
+         break;
+       case 7:
+         *p++ = s[1];
+         *p++ = s[2];
+         *p++ = s[2];
+         break;
+       case 6:
+         *p++ = s[1];
+         *p++ = s[2];
+         break;
+       case 5:
+         *p++ = s[1];
+         break;
+       case 9:
+         *p++ = s[2];
+         *p++ = s[0];
+       }
+      }
+      *p = 0;
+      break;
+    }
+  case 'a':
+  case 'A':
+    {
+      char *p = buf;
+      // this is derived from troff/reg.c
+      while (n > 0) {
+       int d = n % 26;
+       if (d == 0)
+         d = 26;
+       n -= d;
+       n /= 26;
+       *p++ = c == 'a' ? lowercase_array[d - 1] :
+                              uppercase_array[d - 1];
+      }
+      *p-- = 0;
+      // Reverse it.
+      char *q = buf;
+      while (q < p) {
+       char temp = *q;
+       *q = *p;
+       *p = temp;
+       --p;
+       ++q;
+      }
+      break;
+    }
+  default:
+    assert(0);
+  }
+  return buf;
+}
+
+void field_expr::evaluate(int, const reference &ref,
+                         string &result, substring_position &)
+{
+  const char *end;
+  const char *start = ref.get_field(name, &end);
+  if (start) {
+    start = nth_field(number, start, &end);
+    if (start)
+      result.append(start, end - start);
+  }
+}
+
+void literal_expr::evaluate(int, const reference &,
+                           string &result, substring_position &)
+{
+  result += s;
+}
+
+analyzed_expr::analyzed_expr(expression *e)
+: unary_expr(e), flags(e ? e->analyze() : 0)
+{
+}
+
+void analyzed_expr::evaluate(int tentative, const reference &ref,
+                            string &result, substring_position &pos)
+{
+  if (expr)
+    expr->evaluate(tentative, ref, result, pos);
+}
+
+void star_expr::evaluate(int tentative, const reference &ref,
+                        string &result, substring_position &pos)
+{
+  const label_info *lp = ref.get_label_ptr();
+  if (!tentative
+      && (lp == 0 || lp->total > 1)
+      && expr)
+    expr->evaluate(tentative, ref, result, pos);
+}
+
+void separator_expr::evaluate(int tentative, const reference &ref,
+                             string &result, substring_position &pos)
+{
+  int start_length = result.length();
+  int is_first = pos.start < 0;
+  if (expr)
+    expr->evaluate(tentative, ref, result, pos);
+  if (is_first) {
+    pos.start = start_length;
+    pos.length = result.length() - start_length;
+  }
+}
+
+void map_expr::evaluate(int tentative, const reference &ref,
+                       string &result, substring_position &)
+{
+  if (expr) {
+    string temp;
+    substring_position temp_pos;
+    expr->evaluate(tentative, ref, temp, temp_pos);
+    (*func)(temp.contents(), temp.contents() + temp.length(), result);
+  }
+}
+
+void extractor_expr::evaluate(int tentative, const reference &ref,
+                             string &result, substring_position &)
+{
+  if (expr) {
+    string temp;
+    substring_position temp_pos;
+    expr->evaluate(tentative, ref, temp, temp_pos);
+    const char *end, *start = (*func)(temp.contents(),
+                                     temp.contents() + temp.length(),
+                                     &end);
+    switch (part) {
+    case BEFORE:
+      if (start)
+       result.append(temp.contents(), start - temp.contents());
+      else
+       result += temp;
+      break;
+    case MATCH:
+      if (start)
+       result.append(start, end - start);
+      break;
+    case AFTER:
+      if (start)
+       result.append(end, temp.contents() + temp.length() - end);
+      break;
+    default:
+      assert(0);
+    }
+  }
+}
+
+static void first_part(int len, const char *ptr, const char *end,
+                         string &result)
+{
+  for (;;) {
+    const char *token_start = ptr;
+    if (!get_token(&ptr, end))
+      break;
+    const token_info *ti = lookup_token(token_start, ptr);
+    int counts = ti->sortify_non_empty(token_start, ptr);
+    if (counts && --len < 0)
+      break;
+    if (counts || ti->is_accent())
+      result.append(token_start, ptr - token_start);
+  }
+}
+
+static void last_part(int len, const char *ptr, const char *end,
+                     string &result)
+{
+  const char *start = ptr;
+  int count = 0;
+  for (;;) {
+    const char *token_start = ptr;
+    if (!get_token(&ptr, end))
+      break;
+    const token_info *ti = lookup_token(token_start, ptr);
+    if (ti->sortify_non_empty(token_start, ptr))
+      count++;
+  }
+  ptr = start;
+  int skip = count - len;
+  if (skip > 0) {
+    for (;;) {
+      const char *token_start = ptr;
+      if (!get_token(&ptr, end))
+       assert(0);
+      const token_info *ti = lookup_token(token_start, ptr);
+      if (ti->sortify_non_empty(token_start, ptr) && --skip < 0) {
+       ptr = token_start;
+       break;
+      }
+    }
+  }
+  first_part(len, ptr, end, result);
+}
+
+void truncate_expr::evaluate(int tentative, const reference &ref,
+                            string &result, substring_position &)
+{
+  if (expr) {
+    string temp;
+    substring_position temp_pos;
+    expr->evaluate(tentative, ref, temp, temp_pos);
+    const char *start = temp.contents();
+    const char *end = start + temp.length();
+    if (n > 0)
+      first_part(n, start, end, result);
+    else if (n < 0)
+      last_part(-n, start, end, result);
+  }
+}
+
+void alternative_expr::evaluate(int tentative, const reference &ref,
+                               string &result, substring_position &pos)
+{
+  int start_length = result.length();
+  if (expr1)
+    expr1->evaluate(tentative, ref, result, pos);
+  if (result.length() == start_length && expr2)
+    expr2->evaluate(tentative, ref, result, pos);
+}
+
+void list_expr::evaluate(int tentative, const reference &ref,
+                        string &result, substring_position &pos)
+{
+  if (expr1)
+    expr1->evaluate(tentative, ref, result, pos);
+  if (expr2)
+    expr2->evaluate(tentative, ref, result, pos);
+}
+
+void substitute_expr::evaluate(int tentative, const reference &ref,
+                              string &result, substring_position &pos)
+{
+  int start_length = result.length();
+  if (expr1)
+    expr1->evaluate(tentative, ref, result, pos);
+  if (result.length() > start_length && result[result.length() - 1] == '-') {
+    // ought to see if pos covers the -
+    result.set_length(result.length() - 1);
+    if (expr2)
+      expr2->evaluate(tentative, ref, result, pos);
+  }
+}
+
+void conditional_expr::evaluate(int tentative, const reference &ref,
+                               string &result, substring_position &pos)
+{
+  string temp;
+  substring_position temp_pos;
+  if (expr1)
+    expr1->evaluate(tentative, ref, temp, temp_pos);
+  if (temp.length() > 0) {
+    if (expr2)
+      expr2->evaluate(tentative, ref, result, pos);
+  }
+  else {
+    if (expr3)
+      expr3->evaluate(tentative, ref, result, pos);
+  }
+}
+
+void reference::pre_compute_label()
+{
+  if (parsed_label != 0
+      && (parsed_label->analyze() & expression::CONTAINS_VARIABLE)) {
+    label.clear();
+    substring_position temp_pos;
+    parsed_label->evaluate(1, *this, label, temp_pos);
+    label_ptr = lookup_label(label);
+  }
+}
+
+void reference::compute_label()
+{
+  label.clear();
+  if (parsed_label)
+    parsed_label->evaluate(0, *this, label, separator_pos);
+  if (short_label_flag && parsed_short_label)
+    parsed_short_label->evaluate(0, *this, short_label, short_separator_pos);
+  if (date_as_label) {
+    string new_date;
+    if (parsed_date_label) {
+      substring_position temp_pos;
+      parsed_date_label->evaluate(0, *this, new_date, temp_pos);
+    }
+    set_date(new_date);
+  }
+  if (label_ptr)
+    label_ptr->count += 1;
+}
+
+void reference::immediate_compute_label()
+{
+  if (label_ptr)
+    label_ptr->total = 2;      // force use of disambiguator
+  compute_label();
+}
+
+int reference::merge_labels(reference **v, int n, label_type type,
+                           string &result)
+{
+  if (abbreviate_label_ranges)
+    return merge_labels_by_number(v, n, type, result);
+  else
+    return merge_labels_by_parts(v, n, type, result);
+}
+
+int reference::merge_labels_by_number(reference **v, int n, label_type type,
+                                     string &result)
+{
+  if (n <= 1)
+    return 0;
+  int num = get_number();
+  // Only merge three or more labels.
+  if (v[0]->get_number() != num + 1
+      || v[1]->get_number() != num + 2)
+    return 0;
+  int i;
+  for (i = 2; i < n; i++)
+    if (v[i]->get_number() != num + i + 1)
+      break;
+  result = get_label(type);
+  result += label_range_indicator;
+  result += v[i - 1]->get_label(type);
+  return i;
+}
+
+const substring_position &reference::get_separator_pos(label_type type) const
+{
+  if (type == SHORT_LABEL && short_label_flag)
+    return short_separator_pos;
+  else
+    return separator_pos;
+}
+
+const string &reference::get_label(label_type type) const
+{
+  if (type == SHORT_LABEL && short_label_flag)
+    return short_label; 
+  else
+    return label;
+}
+
+int reference::merge_labels_by_parts(reference **v, int n, label_type type,
+                                    string &result)
+{
+  if (n <= 0)
+    return 0;
+  const string &lb = get_label(type);
+  const substring_position &sp = get_separator_pos(type);
+  if (sp.start < 0
+      || sp.start != v[0]->get_separator_pos(type).start 
+      || memcmp(lb.contents(), v[0]->get_label(type).contents(),
+               sp.start) != 0)
+    return 0;
+  result = lb;
+  int i = 0;
+  do {
+    result += separate_label_second_parts;
+    const substring_position &s = v[i]->get_separator_pos(type);
+    int sep_end_pos = s.start + s.length;
+    result.append(v[i]->get_label(type).contents() + sep_end_pos,
+                 v[i]->get_label(type).length() - sep_end_pos);
+  } while (++i < n
+          && sp.start == v[i]->get_separator_pos(type).start
+          && memcmp(lb.contents(), v[i]->get_label(type).contents(),
+                    sp.start) == 0);
+  return i;
+}
+
+string label_pool;
+
+label_info::label_info(const string &s)
+: start(label_pool.length()), length(s.length()), count(0), total(1)
+{
+  label_pool += s;
+}
+
+static label_info **label_table = 0;
+static int label_table_size = 0;
+static int label_table_used = 0;
+
+label_info *lookup_label(const string &label)
+{
+  if (label_table == 0) {
+    label_table = new label_info *[17];
+    label_table_size = 17;
+    for (int i = 0; i < 17; i++)
+      label_table[i] = 0;
+  }
+  unsigned h = hash_string(label.contents(), label.length()) % label_table_size;
+  label_info **ptr;
+  for (ptr = label_table + h;
+       *ptr != 0;
+       (ptr == label_table)
+       ? (ptr = label_table + label_table_size - 1)
+       : ptr--)
+    if ((*ptr)->length == label.length()
+       && memcmp(label_pool.contents() + (*ptr)->start, label.contents(),
+                 label.length()) == 0) {
+      (*ptr)->total += 1;
+      return *ptr;
+    }
+  label_info *result = *ptr = new label_info(label);
+  if (++label_table_used * 2 > label_table_size) {
+    // Rehash the table.
+    label_info **old_table = label_table;
+    int old_size = label_table_size;
+    label_table_size = next_size(label_table_size);
+    label_table = new label_info *[label_table_size];
+    int i;
+    for (i = 0; i < label_table_size; i++)
+      label_table[i] = 0;
+    for (i = 0; i < old_size; i++)
+      if (old_table[i]) {
+       h = hash_string(label_pool.contents() + old_table[i]->start,
+                       old_table[i]->length);
+       label_info **p;
+       for (p = label_table + (h % label_table_size);
+            *p != 0;
+            (p == label_table)
+            ? (p = label_table + label_table_size - 1)
+            : --p)
+           ;
+       *p = old_table[i];
+       }
+    a_delete old_table;
+  }
+  return result;
+}
+
+void clear_labels()
+{
+  for (int i = 0; i < label_table_size; i++) {
+    delete label_table[i];
+    label_table[i] = 0;
+  }
+  label_table_used = 0;
+  label_pool.clear();
+}
+
+static void consider_authors(reference **start, reference **end, int i);
+
+void compute_labels(reference **v, int n)
+{
+  if (parsed_label
+      && (parsed_label->analyze() & expression::CONTAINS_AT)
+      && sort_fields.length() >= 2
+      && sort_fields[0] == 'A'
+      && sort_fields[1] == '+')
+    consider_authors(v, v + n, 0);
+  for (int i = 0; i < n; i++)
+    v[i]->compute_label();
+}
+
+
+/* A reference with a list of authors <A0,A1,...,AN> _needs_ author i
+where 0 <= i <= N if there exists a reference with a list of authors
+<B0,B1,...,BM> such that <A0,A1,...,AN> != <B0,B1,...,BM> and M >= i
+and Aj = Bj for 0 <= j < i. In this case if we can't say "A0,
+A1,...,A(i-1) et al" because this would match both <A0,A1,...,AN> and
+<B0,B1,...,BM>.  If a reference needs author i we only have to call
+need_author(j) for some j >= i such that the reference also needs
+author j. */
+
+/* This function handles 2 tasks:
+determine which authors are needed (cannot be elided with et al.);
+determine which authors can have only last names in the labels.
+
+References >= start and < end have the same first i author names.
+Also they're sorted by A+. */
+
+static void consider_authors(reference **start, reference **end, int i)
+{
+  if (start >= end)
+    return;
+  reference **p = start;
+  if (i >= (*p)->get_nauthors()) {
+    for (++p; p < end && i >= (*p)->get_nauthors(); p++)
+      ;
+    if (p < end && i > 0) {
+      // If we have an author list <A B C> and an author list <A B C D>,
+      // then both lists need C.
+      for (reference **q = start; q < end; q++)
+       (*q)->need_author(i - 1);
+    }
+    start = p;
+  }
+  while (p < end) {
+    reference **last_name_start = p;
+    reference **name_start = p;
+    for (++p;
+        p < end && i < (*p)->get_nauthors()
+        && same_author_last_name(**last_name_start, **p, i);
+        p++) {
+      if (!same_author_name(**name_start, **p, i)) {
+       consider_authors(name_start, p, i + 1);
+       name_start = p;
+      }
+    }
+    consider_authors(name_start, p, i + 1);
+    if (last_name_start == name_start) {
+      for (reference **q = last_name_start; q < p; q++)
+       (*q)->set_last_name_unambiguous(i);
+    }
+    // If we have an author list <A B C D> and <A B C E>, then the lists
+    // need author D and E respectively.
+    if (name_start > start || p < end) {
+      for (reference **q = last_name_start; q < p; q++)
+       (*q)->need_author(i);
+    }
+  }
+}
+
+int same_author_last_name(const reference &r1, const reference &r2, int n)
+{
+  const char *ae1;
+  const char *as1 = r1.get_sort_field(0, n, 0, &ae1);
+  const char *ae2;
+  const char *as2 = r2.get_sort_field(0, n, 0, &ae2);
+  if (!as1 && !as2) return 1;  // they are the same
+  if (!as1 || !as2) return 0;
+  return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
+}
+
+int same_author_name(const reference &r1, const reference &r2, int n)
+{
+  const char *ae1;
+  const char *as1 = r1.get_sort_field(0, n, -1, &ae1);
+  const char *ae2;
+  const char *as2 = r2.get_sort_field(0, n, -1, &ae2);
+  if (!as1 && !as2) return 1;  // they are the same
+  if (!as1 || !as2) return 0;
+  return ae1 - as1 == ae2 - as2 && memcmp(as1, as2, ae1 - as1) == 0;
+}
+
+
+void int_set::set(int i)
+{
+  assert(i >= 0);
+  int bytei = i >> 3;
+  if (bytei >= v.length()) {
+    int old_length = v.length();
+    v.set_length(bytei + 1);
+    for (int j = old_length; j <= bytei; j++)
+      v[j] = 0;
+  }
+  v[bytei] |= 1 << (i & 7);
+}
+
+int int_set::get(int i) const
+{
+  assert(i >= 0);
+  int bytei = i >> 3;
+  return bytei >= v.length() ? 0 : (v[bytei] & (1 << (i & 7))) != 0;
+}
+
+void reference::set_last_name_unambiguous(int i)
+{
+  last_name_unambiguous.set(i);
+}
+
+void reference::need_author(int n)
+{
+  if (n > last_needed_author)
+    last_needed_author = n;
+}
+
+const char *reference::get_authors(const char **end) const
+{
+  if (!computed_authors) {
+    ((reference *)this)->computed_authors = 1;
+    string &result = ((reference *)this)->authors;
+    int na = get_nauthors();
+    result.clear();
+    for (int i = 0; i < na; i++) {
+      if (last_name_unambiguous.get(i)) {
+       const char *e, *start = get_author_last_name(i, &e);
+       assert(start != 0);
+       result.append(start, e - start);
+      }
+      else {
+       const char *e, *start = get_author(i, &e);
+       assert(start != 0);
+       result.append(start, e - start);
+      }
+      if (i == last_needed_author
+         && et_al.length() > 0
+         && et_al_min_elide > 0
+         && last_needed_author + et_al_min_elide < na
+         && na >= et_al_min_total) {
+       result += et_al;
+       break;
+      }
+      if (i < na - 1) {
+       if (na == 2)
+         result += join_authors_exactly_two;
+       else if (i < na - 2)
+         result += join_authors_default;
+       else
+         result += join_authors_last_two;
+      }
+    }
+  }
+  const char *start = authors.contents();
+  *end = start + authors.length();
+  return start;
+}
+
+int reference::get_nauthors() const
+{
+  if (nauthors < 0) {
+    const char *dummy;
+    int na;
+    for (na = 0; get_author(na, &dummy) != 0; na++)
+      ;
+    ((reference *)this)->nauthors = na;
+  }
+  return nauthors;
+}
index 3ed173df17bb424ef2a088de1dfca6cdbfbfa7a3..3d9e94277bd9d93483eda8704537706d45afda62 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
 Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
      
 #include "refer.h"
 #include "refid.h"
@@ -365,7 +365,7 @@ void sortify_date(const char *s, int len, string &key)
   const char *year_end;
   const char *year_start = find_year(s, s + len, &year_end);
   if (!year_start) {
-    // Things without years are often `forthcoming', so it makes sense
+    // Things without years are often 'forthcoming', so it makes sense
     // that they sort after things with explicit years.
     key += 'A';
     sortify_words(s, s + len, 0, key);
index 1b7e17e0cc235c40b8d3b51313fefc9c6833fbdc..dfc4552f6adf6b9755a82535802bdd5c17bec1f5 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 // declarations to avoid friend name injection problems
 int compare_reference(const reference &, const reference &);
diff --git a/src/preproc/refer/refer.1.man b/src/preproc/refer/refer.1.man
new file mode 100644 (file)
index 0000000..54279e5
--- /dev/null
@@ -0,0 +1,1769 @@
+.TH @G@REFER @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@refer \- preprocess bibliographic references for groff
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY @g@refer
+.OP \-benCPRS
+.OP \-a n
+.OP \-c fields
+.OP \-f n
+.OP \-i fields
+.OP \-k field
+.OP \-l m,n
+.OP \-p filename
+.OP \-s fields
+.OP \-t n
+.BI "\-B " field . macro
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.SY @g@refer
+.B \-\-help
+.YS
+.
+.SY @g@refer
+.B \-v
+.SY @g@refer
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This file documents the GNU version of
+.BR refer ,
+which is part of the groff document formatting system.
+.
+.B refer
+copies the contents of
+.IR filename \|.\|.\|.\&
+to the standard output,
+except that lines between
+.B .[
+and
+.B .]\&
+are interpreted as citations,
+and lines between
+.B .R1
+and
+.B .R2
+are interpreted as commands about how citations are to be processed.
+.
+.
+.LP
+Each citation specifies a reference.
+.
+The citation can specify a reference that is contained in
+a bibliographic database by giving a set of keywords
+that only that reference contains.
+.
+Alternatively it can specify a reference by supplying a database
+record in the citation.
+.
+A combination of these alternatives is also possible.
+.
+.
+.LP
+For each citation,
+.B refer
+can produce a mark in the text.
+.
+This mark consists of some label which can be separated from
+the text and from other labels in various ways.
+.
+For each reference it also outputs
+.B groff
+commands that can be used by a macro package to produce a formatted
+reference for each citation.
+.
+The output of
+.B refer
+must therefore be processed using a suitable macro package.
+.
+The
+.B \-ms
+and
+.B \-me
+macros are both suitable.
+.
+The commands to format a citation's reference can be output immediately after
+the citation,
+or the references may be accumulated,
+and the commands output at some later point.
+.
+If the references are accumulated, then multiple citations of the same
+reference will produce a single formatted reference.
+.
+.
+.LP
+The interpretation of lines between
+.B .R1
+and
+.B .R2
+as commands is a new feature of GNU
+.BR refer .
+.
+Documents making use of this feature can still be processed by
+Unix refer just by adding the lines
+.
+.RS
+.LP
+.nf
+.ft B
+\&.de R1
+\&.ig R2
+\&..
+.ft
+.fi
+.RE
+.
+to the beginning of the document.
+.
+This will cause
+.B troff
+to ignore everything between
+.B .R1
+and
+.BR .R2 .
+.
+The effect of some commands can also be achieved by options.
+.
+These options are supported mainly for compatibility with Unix refer.
+.
+It is usually more convenient to use commands.
+.
+.
+.LP
+.B refer
+generates
+.B .lf
+lines so that filenames and line numbers in messages produced
+by commands that read
+.B refer
+output will be correct;
+it also interprets lines beginning with
+.B .lf
+so that filenames and line numbers in the messages and
+.B .lf
+lines that it produces will be accurate even if the input has been
+preprocessed by a command such as
+.BR @g@soelim (@MAN1EXT@).
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.LP
+Most options are equivalent to commands
+(for a description of these commands,
+see subsection \(lqCommands\(rq below).
+.
+.
+.nr a \n(.j
+.ad l
+.TP
+.B \-b
+.B "no-label-in-text; no-label-in-reference"
+.
+.
+.TP
+.B \-e
+.B accumulate
+.
+.
+.TP
+.B \-n
+.B no-default-database
+.
+.
+.TP
+.B \-C
+.B compatible
+.
+.
+.TP
+.B \-P
+.B move-punctuation
+.
+.
+.TP
+.B \-S
+.B
+label\ "(A.n|Q)\ ',\ '\ (D.y|D)"; \%bracket-label\ "\ ("\ )\ ";\ "
+.
+.
+.TP
+.BI \-a n
+.B reverse
+.BI A n
+.
+.
+.TP
+.BI \-c fields
+.B capitalize
+.I fields
+.
+.
+.TP
+.BI \-f n
+.B label
+.BI % n
+.
+.
+.TP
+.BI \-i fields
+.B search-ignore
+.I fields
+.
+.
+.TP
+.B \-k
+.B label
+.B L\(ti%a
+.
+.
+.TP
+.BI \-k field
+.B label
+.IB field \(ti%a
+.
+.
+.TP
+.B \-l
+.B label
+.B A.nD.y%a
+.
+.
+.TP
+.BI \-l m
+.B label
+.BI A.n+ m D.y%a
+.
+.
+.TP
+.BI \-l, n
+.B label
+.BI A.nD.y\- n %a
+.
+.
+.TP
+.BI \-l m , n
+.B label
+.BI A.n+ m D.y\- n %a
+.
+.
+.TP
+.BI \-p filename
+.B database
+.I filename
+.
+.
+.TP
+.BI \-s spec
+.B sort
+.I spec
+.
+.
+.TP
+.BI \-t n
+.B search-truncate
+.I n
+.ad \na
+.
+.
+.LP
+These options are equivalent to the following commands with the
+addition that the filenames specified on the command line are
+processed as if they were arguments to the
+.B bibliography
+command instead of in the normal way:
+.
+.
+.TP
+.B \-B
+.B "annotate X AP; no-label-in-reference"
+.
+.
+.TP
+.BI \-B field . macro
+.B annotate
+.I field
+.IB macro ;
+.B no-label-in-reference
+.
+.
+.LP
+The following options have no equivalent commands:
+.
+.
+.TP
+.B \-v
+Print the version number.
+.
+.
+.TP
+.B \-R
+Don't recognize lines beginning with
+.BR .R1 / .R2 .
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+.\" ====================================================================
+.SS Bibliographic databases
+.\" ====================================================================
+.
+The bibliographic database is a text file consisting of records
+separated by one or more blank lines.
+.
+Within each record fields start with a
+.B %
+at the beginning of a line.
+.
+Each field has a one character name that immediately follows the
+.BR % .
+It is best to use only upper and lower case letters for the names
+of fields.
+.
+The name of the field should be followed by exactly one space,
+and then by the contents of the field.
+.
+Empty fields are ignored.
+.
+The conventional meaning of each field is as follows:
+.
+.
+.TP
+.B %A
+The name of an author.
+.
+If the name contains a title such as
+.B Jr.\&
+at the end,
+it should be separated from the last name by a comma.
+.
+There can be multiple occurrences of the
+.B %A
+field.
+.
+The order is significant.
+.
+It is a good idea always to supply an
+.B %A
+field or a
+.B %Q
+field.
+.
+.
+.TP
+.B %B
+For an article that is part of a book, the title of the book.
+.
+.
+.TP
+.B %C
+The place (city) of publication.
+.
+.
+.TP
+.B %D
+The date of publication.
+.
+The year should be specified in full.
+.
+If the month is specified, the name rather than the number of the month
+should be used, but only the first three letters are required.
+.
+It is a good idea always to supply a
+.B %D
+field;
+if the date is unknown, a value such as
+.B in press
+or
+.B unknown
+can be used.
+.
+.
+.TP
+.B %E
+For an article that is part of a book, the name of an editor of the book.
+.
+Where the work has editors and no authors,
+the names of the editors should be given as
+.B %A
+fields and
+.B ,\ (ed)
+or
+.B ,\ (eds)
+should be appended to the last author.
+.
+.
+.TP
+.B %G
+US Government ordering number.
+.
+.
+.TP
+.B %I
+The publisher (issuer).
+.
+.
+.TP
+.B %J
+For an article in a journal,
+the name of the journal.
+.
+.
+.TP
+.B %K
+Keywords to be used for searching.
+.
+.
+.TP
+.B %L
+Label.
+.
+.
+.TP
+.B %N
+Journal issue number.
+.
+.
+.TP
+.B %O
+Other information.
+.
+This is usually printed at the end of the reference.
+.
+.
+.TP
+.B %P
+Page number.
+A range of pages can be specified as
+.IB m \- n\fR.
+.
+.
+.TP
+.B %Q
+The name of the author, if the author is not a person.
+.
+This will only be used if there are no
+.B %A
+fields.
+.
+There can only be one
+.B %Q
+field.
+.
+.
+.TP
+.B %R
+Technical report number.
+.
+.
+.TP
+.B %S
+Series name.
+.
+.
+.TP
+.B %T
+Title.
+.
+For an article in a book or journal,
+this should be the title of the article.
+.
+.
+.TP
+.B %V
+Volume number of the journal or book.
+.
+.
+.TP
+.B %X
+Annotation.
+.
+.
+.LP
+For all fields except
+.B %A
+and
+.BR %E ,
+if there is more than one occurrence of a particular field in a record,
+only the last such field will be used.
+.
+.
+.LP
+If accent strings are used, they should follow the character to be accented.
+This means that the
+.B AM
+macro must be used with the
+.B \-ms
+macros.
+.
+Accent strings should not be quoted:
+use one
+.B \e
+rather than two.
+.
+.
+.\" ====================================================================
+.SS Citations
+.\" ====================================================================
+.
+The format of a citation is
+.
+.RS
+.BI .[ opening-text
+.br
+.I "flags keywords"
+.br
+.I fields
+.br
+.BI .] closing-text
+.RE
+.
+.
+.LP
+The
+.IR opening-text ,
+.IR closing-text ,
+and
+.I flags
+components are optional.
+.
+Only one of the
+.I keywords
+and
+.I fields
+components need be specified.
+.
+.
+.LP
+The
+.I keywords
+component says to search the bibliographic databases for a reference
+that contains all the words in
+.IR keywords .
+.
+It is an error if more than one reference if found.
+.
+.
+.LP
+The
+.I fields
+components specifies additional fields to replace or supplement
+those specified in the reference.
+.
+When references are being accumulated and the
+.I keywords
+component is non-empty,
+then additional fields should be specified only on the first
+occasion that a particular reference is cited,
+and will apply to all citations of that reference.
+.
+.
+.LP
+The
+.I opening-text
+and
+.I closing-text
+component specifies strings to be used to bracket the label instead
+of the strings specified in the
+.B bracket-label
+command.
+.
+If either of these components is non-empty,
+the strings specified in the
+.B bracket-label
+command will not be used;
+this behaviour can be altered using the
+.B [
+and
+.B ]
+flags.
+Note that leading and trailing spaces are significant for these components.
+.
+.
+.LP
+The
+.I flags
+component is a list of
+non-alphanumeric characters each of which modifies the treatment
+of this particular citation.
+.
+Unix refer will treat these flags as part of the keywords and
+so will ignore them since they are non-alphanumeric.
+.
+The following flags are currently recognized:
+.
+.
+.TP
+.B #
+This says to use the label specified by the
+.B short-label
+command,
+instead of that specified by the
+.B label
+command.
+.
+If no short label has been specified, the normal label will be used.
+.
+Typically the short label is used with author-date labels
+and consists of only the date and possibly a disambiguating letter;
+the
+.B #
+is supposed to be suggestive of a numeric type of label.
+.
+.
+.TP
+.B [
+Precede
+.I opening-text
+with the first string specified in the
+.B bracket-label
+command.
+.
+.
+.TP
+.B ]
+Follow
+.I closing-text
+with the second string specified in the
+.B bracket-label
+command.
+.
+.
+.LP
+One advantages of using the
+.B [
+and
+.B ]
+flags rather than including the brackets in
+.I opening-text
+and
+.I closing-text
+is that
+you can change the style of bracket used in the document just by changing the
+.B bracket-label
+command.
+.
+Another advantage is that sorting and merging of citations
+will not necessarily be inhibited if the flags are used.
+.
+.
+.LP
+If a label is to be inserted into the text,
+it will be attached to the line preceding the
+.B .[
+line.
+.
+If there is no such line, then an extra line will be inserted before the
+.B .[
+line and a warning will be given.
+.
+.
+.LP
+There is no special notation for making a citation to multiple references.
+Just use a sequence of citations, one for each reference.
+.
+Don't put anything between the citations.
+.
+The labels for all the citations will be attached to the line preceding
+the first citation.
+.
+The labels may also be sorted or merged.
+.
+See the description of the
+.B <>
+label expression, and of the
+.B sort-adjacent-labels
+and
+.B abbreviate-label-ranges
+command.
+A label will not be merged if its citation has a non-empty
+.I opening-text
+or
+.IR closing-text .
+.
+However,
+the labels for a citation using the
+.B ]
+flag and without any
+.I closing-text
+immediately followed by a citation using the
+.B [
+flag and without any
+.I opening-text
+may be sorted and merged
+even though the first citation's
+.I opening-text
+or the second citation's
+.I closing-text
+is non-empty.
+.
+(If you wish to prevent this just make the first citation's
+.I closing-text
+.BR \e& .)
+.
+.
+.\" ====================================================================
+.SS Commands
+.\" ====================================================================
+.
+Commands are contained between lines starting with
+.B .R1
+and
+.BR .R2 .
+.
+Recognition of these lines can be prevented by the
+.B \-R
+option.
+.
+When a
+.B .R1
+line is recognized any accumulated references are flushed out.
+.
+Neither
+.B .R1
+nor
+.B .R2
+lines,
+nor anything between them
+is output.
+.
+.
+.LP
+Commands are separated by newlines or
+.BR ; s.
+.B #
+introduces a comment that extends to the end of the line
+(but does not conceal the newline).
+.
+Each command is broken up into words.
+.
+Words are separated by spaces or tabs.
+.
+A word that begins with
+.B \[dq]
+extends to the next
+.B \[dq]
+that is not followed by another
+.BR \[dq] .
+.
+If there is no such
+.B \[dq]
+the word extends to the end of the line.
+.
+Pairs of
+.B \[dq]
+in a word beginning with
+.B \[dq]
+collapse to a single
+.BR \[dq] .
+.
+Neither
+.B #
+nor
+.B ;
+are recognized inside
+.BR \[dq] s.
+.
+A line can be continued by ending it with
+.BR \e ;
+this works everywhere except after a
+.BR # .
+.
+.
+.LP
+.ds n \fR*
+Each command
+.I name
+that is marked with \*n has an associated negative command
+.BI no- name
+that undoes the effect of
+.IR name .
+.
+For example, the
+.B no-sort
+command specifies that references should not be sorted.
+.
+The negative commands take no arguments.
+.
+.
+.LP
+In the following description each argument must be a single word;
+.I field
+is used for a single upper or lower case letter naming a field;
+.I fields
+is used for a sequence of such letters;
+.I m
+and
+.I n
+are used for a non-negative numbers;
+.I string
+is used for an arbitrary string;
+.I filename
+is used for the name of a file.
+.
+.
+.TP
+.BI abbreviate\*n\  fields\ string1\ string2\ string3\ string4
+Abbreviate the first names of
+.IR fields .
+.
+An initial letter will be separated from another initial letter by
+.IR string1 ,
+from the last name by
+.IR string2 ,
+and from anything else
+(such as a
+.B von
+or
+.BR de )
+by
+.IR string3 .
+.
+These default to a period followed by a space.
+.
+In a hyphenated first name,
+the initial of the first part of the name will be separated from the
+hyphen by
+.IR string4 ;
+this defaults to a period.
+.
+No attempt is made to handle any ambiguities that might
+result from abbreviation.
+.
+Names are abbreviated before sorting and before label construction.
+.
+.
+.TP
+.BI abbreviate-label-ranges\*n\  string
+.
+Three or more adjacent labels that refer to consecutive references
+will be abbreviated to a label consisting of the first label,
+followed by
+.I string
+followed by the last label.
+.
+This is mainly useful with numeric labels.
+.
+If
+.I string
+is omitted it defaults to
+.BR \- .
+.
+.
+.TP
+.B accumulate\*n
+Accumulate references instead of writing out each reference
+as it is encountered.
+.
+Accumulated references will be written out whenever a reference
+of the form
+.
+.RS
+.IP
+.B .[
+.br
+.B $LIST$
+.br
+.B .]
+.
+.
+.LP
+is encountered,
+after all input files have been processed,
+and whenever
+.B .R1
+line is recognized.
+.RE
+.
+.
+.TP
+.BI annotate\*n\  field\ string
+.I field
+is an annotation;
+print it at the end of the reference as a paragraph preceded by the line
+.
+.RS
+.IP
+.BI . string
+.
+.
+.LP
+If
+.I string
+is omitted it will default to
+.BR AP ;
+if
+.I field
+is also omitted it will default to
+.BR X .
+.
+Only one field can be an annotation.
+.RE
+.
+.
+.TP
+.BI articles\  string \fR\|.\|.\|.
+.IR string \|.\|.\|.\&
+are definite or indefinite articles, and should be ignored at the beginning of
+.B T
+fields when sorting.
+.
+Initially,
+.BR the ,
+.B a
+and
+.B an
+are recognized as articles.
+.
+.
+.TP
+.BI bibliography\  filename \fR\|.\|.\|.
+.
+Write out all the references contained in the bibliographic databases
+.IR filename \|.\|.\|.
+.
+This command should come last in a
+.BR .R1 / .R2
+block.
+.
+.
+.TP
+.BI bracket-label\  string1\ string2\ string3
+In the text, bracket each label
+with
+.I string1
+and
+.IR string2 .
+.
+An occurrence of
+.I string2
+immediately followed by
+.I string1
+will be turned into
+.IR string3 .
+.
+The default behaviour is
+.
+.RS
+.IP
+.B
+bracket-label \e*([. \e*(.] ", "
+.RE
+.
+.
+.TP
+.BI capitalize\  fields
+Convert
+.I fields
+to caps and small caps.
+.
+.
+.TP
+.B compatible\*n
+Recognize
+.B .R1
+and
+.B .R2
+even when followed by a character other than space or newline.
+.
+.
+.TP
+.BI database\  filename \fR\|.\|.\|.
+Search the bibliographic databases
+.IR filename \|.\|.\|.
+.
+For each
+.I filename
+if an index
+.IB filename @INDEX_SUFFIX@
+created by
+.BR @g@indxbib (@MAN1EXT@)
+exists, then it will be searched instead;
+each index can cover multiple databases.
+.
+.
+.TP
+.BI date-as-label\*n\  string
+.I string
+is a label expression that specifies a string with which to replace the
+.B D
+field after constructing the label.
+.
+See subsection \(lqLabel expressions\(rq below for a description of
+label expressions.
+.
+This command is useful if you do not want explicit labels in the
+reference list,
+but instead want to handle any necessary disambiguation by qualifying
+the date in some way.
+.
+The label used in the text would typically be some combination of the
+author and date.
+.
+In most cases you should also use the
+.B no-label-in-reference
+command.
+For example,
+.
+.RS
+.IP
+.B "date-as-label D.+yD.y%a*D.-y"
+.
+.
+.LP
+would attach a disambiguating letter to the year part of the
+.B D
+field in the reference.
+.RE
+.
+.
+.TP
+.B default-database\*n
+The default database should be searched.
+.
+This is the default behaviour,
+so the negative version of this command is more useful.
+.
+.B refer
+determines whether the default database should be searched
+on the first occasion that it needs to do a search.
+.
+Thus a
+.B no-default-database
+command must be given before then,
+in order to be effective.
+.
+.
+.TP
+.BI discard\*n\  fields
+When the reference is read,
+.I fields
+should be discarded;
+no string definitions for
+.I fields
+will be output.
+.
+Initially,
+.I fields
+are
+.BR XYZ .
+.
+.
+.TP
+.BI et-al\*n\  string\ m\ n
+Control use of
+.B "et al"
+in the evaluation of
+.B @
+expressions in label expressions.
+.
+If the number of authors needed to make the author sequence
+unambiguous is
+.I u
+and the total number of authors is
+.I t
+then the last
+.IR t \|\-\| u
+authors will be replaced by
+.I string
+provided that
+.IR t \|\-\| u
+is not less than
+.I m
+and
+.I t
+is not less than
+.IR n .
+.
+The default behaviour is
+.
+.RS
+.IP
+.B
+et-al " et al" 2 3
+.RE
+.
+.
+.TP
+.BI include\  filename
+Include
+.I filename
+and interpret the contents as commands.
+.
+.
+.TP
+.BI join-authors\  string1\ string2\ string3
+This says how authors should be joined together.
+.
+When there are exactly two authors, they will be joined with
+.IR string1 .
+.
+When there are more than two authors,
+all but the last two will be joined with
+.IR string2 ,
+and the last two authors will be joined with
+.IR string3 .
+.
+If
+.I string3
+is omitted,
+it will default to
+.IR string1 ;
+if
+.I string2
+is also omitted it will also default to
+.IR string1 .
+.
+For example,
+.
+.RS
+.IP
+.B
+join-authors " and " ", " ", and "
+.
+.
+.LP
+will restore the default method for joining authors.
+.RE
+.
+.
+.TP
+.B label-in-reference\*n
+When outputting the reference,
+define the string
+.B [F
+to be the reference's label.
+.
+This is the default behaviour; so the negative version
+of this command is more useful.
+.
+.
+.TP
+.B label-in-text\*n
+For each reference output a label in the text.
+.
+The label will be separated from the surrounding text as described in the
+.B bracket-label
+command.
+.
+This is the default behaviour; so the negative version
+of this command is more useful.
+.
+.
+.TP
+.BI label\  string
+.I string
+is a label expression describing how to label each reference.
+.
+.
+.TP
+.BI separate-label-second-parts\  string
+When merging two-part labels, separate the second part of the second
+label from the first label with
+.IR string .
+.
+See the description of the
+.B <>
+label expression.
+.
+.
+.TP
+.B move-punctuation\*n
+In the text,
+move any punctuation at the end of line past the label.
+.
+It is usually a good idea to give this command unless you are using
+superscripted numbers as labels.
+.
+.
+.TP
+.BI reverse\*n\  string
+Reverse the fields whose names
+are in
+.IR string .
+.
+Each field name can be followed by a number which says
+how many such fields should be reversed.
+.
+If no number is given for a field, all such fields will be reversed.
+.
+.
+.TP
+.BI search-ignore\*n\  fields
+While searching for keys in databases for which no index exists,
+ignore the contents of
+.IR fields .
+.
+Initially, fields
+.B XYZ
+are ignored.
+.
+.
+.TP
+.BI search-truncate\*n\  n
+Only require the first
+.I n
+characters of keys to be given.
+.
+In effect when searching for a given key words in the database are
+truncated to the maximum of
+.I n
+and the length of the key.
+.
+Initially
+.I n
+is\ 6.
+.
+.
+.TP
+.BI short-label\*n\  string
+.I string
+is a label expression that specifies an alternative (usually shorter)
+style of label.
+.
+This is used when the
+.B #
+flag is given in the citation.
+.
+When using author-date style labels, the identity of the author
+or authors is sometimes clear from the context, and so it
+may be desirable to omit the author or authors from the label.
+.
+The
+.B short-label
+command will typically be used to specify a label containing just
+a date and possibly a disambiguating letter.
+.
+.
+.TP
+.BI sort\*n\  string
+Sort references according to
+.BR string .
+.
+References will automatically be accumulated.
+.
+.I string
+should be a list of field names,
+each followed by a number,
+indicating how many fields with the name should be used for sorting.
+.
+.B +
+can be used to indicate that all the fields with the name should be used.
+.
+Also
+.B .\&
+can be used to indicate the references should be sorted using the
+(tentative) label.
+.
+(Subsection \(lqLabel expressions\(rq below describes the concept of a
+tentative label.)
+.
+.
+.TP
+.B sort-adjacent-labels\*n
+Sort labels that are adjacent in the text according to their position
+in the reference list.
+.
+This command should usually be given if the
+.B abbreviate-label-ranges
+command has been given,
+or if the label expression contains a
+.B <>
+expression.
+.
+This will have no effect unless references are being accumulated.
+.
+.
+.\" ====================================================================
+.SS Label expressions
+.\" ====================================================================
+.
+Label expressions can be evaluated both normally and tentatively.
+.
+The result of normal evaluation is used for output.
+.
+The result of tentative evaluation, called the
+.IR "tentative label" ,
+is used to gather the information that normal evaluation needs to
+disambiguate the label.
+.
+Label expressions specified by the
+.B date-as-label
+and
+.B short-label
+commands are not evaluated tentatively.
+.
+Normal and tentative evaluation are the same for all types of
+expression other than
+.BR @ ,
+.BR * ,
+and
+.B %
+expressions.
+.
+The description below applies to normal evaluation,
+except where otherwise specified.
+.
+.
+.TP
+.I field
+.TQ
+.I field\ n
+The
+.IR n -th
+part of
+.IR field .
+.
+If
+.I n
+is omitted, it defaults to\ 1.
+.
+.
+.TP
+.BI ' string '
+The characters in
+.I string
+literally.
+.
+.
+.TP
+.B @
+All the authors joined as specified by the
+.B join-authors
+command.
+.
+The whole of each author's name will be used.
+.
+However, if the references are sorted by author (that is the sort
+specification starts with
+.BR A+ ),
+then authors last names will be used instead,
+provided that this does not introduce ambiguity,
+and also an initial subsequence of the authors may be used instead of
+all the authors,
+again provided that this does not introduce ambiguity.
+.
+The use of only the last name for the
+.IR i -th
+author of some reference
+is considered to be ambiguous if
+there is some other reference,
+such that the first
+.IR i \|\-\|1
+authors of the references are the same,
+the
+.IR i -th
+authors are not the same,
+but the
+.IR i -th
+authors last names are the same.
+.
+A proper initial subsequence of the sequence of authors for some
+reference is considered to be ambiguous if there is a reference with
+some other sequence of authors which also has that subsequence as a
+proper initial subsequence.
+.
+When an initial subsequence of authors is used, the remaining authors
+are replaced by the string specified by the
+.B et-al
+command;
+this command may also specify additional requirements that must be
+met before an initial subsequence can be used.
+.
+.B @
+tentatively evaluates to a canonical representation of the authors,
+such that authors that compare equally for sorting purpose will have
+the same representation.
+.
+.
+.TP
+.BI % n
+.TQ
+.B %a
+.TQ
+.B %A
+.TQ
+.B %i
+.TQ
+.B %I
+The serial number of the reference formatted according to the
+character following the
+.BR % .
+The serial number of a reference is\ 1 plus the number of earlier
+references with same tentative label as this reference.
+.
+These expressions tentatively evaluate to an empty string.
+.
+.TP
+.IB expr *
+If there is another reference with the same tentative label as this
+reference,
+then
+.IR expr ,
+otherwise an empty string.
+.
+It tentatively evaluates to an empty string.
+.
+.
+.TP
+.IB expr + n
+.TQ
+.IB expr \- n
+The first
+.RB ( + )
+or last
+.RB ( \- )
+.I n
+upper or lower case letters or digits of
+.IR expr .
+.
+Troff special characters (such as
+.BR \e('a )
+count as a single letter.
+.
+Accent strings are retained but do not count towards the total.
+.
+.
+.TP
+.IB expr .l
+.I expr
+converted to lowercase.
+.
+.
+.TP
+.IB expr .u
+.I expr
+converted to uppercase.
+.
+.
+.TP
+.IB expr .c
+.I expr
+converted to caps and small caps.
+.
+.
+.TP
+.IB expr .r
+.I expr
+reversed so that the last name is first.
+.
+.
+.TP
+.IB expr .a
+.I expr
+with first names abbreviated.
+.
+Note that fields specified in the
+.B abbreviate
+command are abbreviated before any labels are evaluated.
+.
+Thus
+.B .a
+is useful only when you want a field to be abbreviated in a label
+but not in a reference.
+.
+.
+.TP
+.IB expr .y
+The year part of
+.IR expr .
+.
+.
+.TP
+.IB expr .+y
+The part of
+.I expr
+before the year,
+or the whole of
+.I expr
+if it does not contain a year.
+.
+.
+.TP
+.IB expr .\-y
+The part of
+.I expr
+after the year,
+or an empty string if
+.I expr
+does not contain a year.
+.
+.
+.TP
+.IB expr .n
+The last name part of
+.IR expr .
+.
+.
+.TP
+.IB expr1 \(ti expr2
+.I expr1
+except that if the last character of
+.I expr1
+is
+.B \-
+then it will be replaced by
+.IR expr2 .
+.
+.
+.TP
+.I expr1\ expr2
+The concatenation of
+.I expr1
+and
+.IR expr2 .
+.
+.
+.TP
+.IB expr1 | expr2
+If
+.I expr1
+is non-empty then
+.I expr1
+otherwise
+.IR expr2 .
+.
+.
+.TP
+.IB expr1 & expr2
+If
+.I expr1
+is non-empty
+then
+.I expr2
+otherwise an empty string.
+.
+.
+.TP
+.IB expr1 ? expr2 : expr3
+If
+.I expr1
+is non-empty
+then
+.I expr2
+otherwise
+.IR expr3 .
+.
+.
+.TP
+.BI < expr >
+The label is in two parts, which are separated by
+.IR expr .
+.
+Two adjacent two-part labels which have the same first part will be
+merged by appending the second part of the second label onto the first
+label separated by the string specified in the
+.B separate-label-second-parts
+command (initially,
+a comma followed by a space);
+the resulting label will also be a two-part label with the same first
+part as before merging,
+and so additional labels can be merged into it.
+.
+Note that it is permissible for the first part to be empty;
+this maybe desirable for expressions used in the
+.B short-label
+command.
+.
+.
+.TP
+.BI ( expr )
+The same as
+.IR expr .
+.
+Used for grouping.
+.
+.
+.LP
+The above expressions are listed in order of precedence
+(highest first);
+.B &
+and
+.B |
+have the same precedence.
+.
+.
+.\" ====================================================================
+.SS Macro interface
+.\" ====================================================================
+.
+Each reference starts with a call to the macro
+.BR ]- .
+.
+The string
+.B [F
+will be defined to be the label for this reference,
+unless the
+.B no-label-in-reference
+command has been given.
+.
+There then follows a series of string definitions,
+one for each field:
+string
+.BI [ X
+corresponds to field
+.IR X .
+.
+The number register
+.B [P
+is set to\ 1 if the
+.B P
+field contains a range of pages.
+.
+The
+.BR [T ,
+.B [A
+and
+.B [O
+number registers are set to\ 1 according as the
+.BR T ,
+.B A
+and
+.B O
+fields end with one of the characters
+.BR .?! .
+.
+The
+.B [E
+number register will be set to\ 1 if the
+.B [E
+string contains more than one name.
+.
+The reference is followed by a call to the
+.B ][
+macro.
+.
+The first argument to this macro gives a number representing
+the type of the reference.
+.
+If a reference contains a
+.B J
+field, it will be classified as type\ 1,
+otherwise if it contains a
+.B B
+field, it will type\ 3,
+otherwise if it contains a
+.B G
+or
+.B R
+field it will be type\ 4,
+otherwise if it contains an
+.B I
+field it will be type\ 2,
+otherwise it will be type\ 0.
+.
+The second argument is a symbolic name for the type:
+.BR other ,
+.BR journal-article ,
+.BR book ,
+.B article-in-book
+or
+.BR tech-report .
+.
+Groups of references that have been accumulated or are produced by the
+.B bibliography
+command are preceded by a call to the
+.B ]<
+macro and followed by a call to the
+.B ]>
+macro.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @DEFAULT_INDEX@
+Default database.
+.
+.
+.TP
+.RI file @INDEX_SUFFIX@
+Index files.
+.
+.
+.LP
+.B refer
+uses temporary files.
+.
+See the
+.BR groff (@MAN1EXT@)
+man page for details where such files are created.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I REFER
+If set, overrides the default database.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR @g@indxbib (@MAN1EXT@),
+.BR @g@lookbib (@MAN1EXT@),
+.BR lkbib (@MAN1EXT@)
+.br
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+.
+In label expressions,
+.B <>
+expressions are ignored inside
+.BI . char
+expressions.
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/preproc/refer/refer.am b/src/preproc/refer/refer.am
new file mode 100644 (file)
index 0000000..61f24ee
--- /dev/null
@@ -0,0 +1,51 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += refer
+refer_CPPFLAGS = $(AM_CPPFLAGS) -I $(top_srcdir)/src/preproc/refer
+refer_LDADD = libbib.a libgroff.a $(LIBM) lib/libgnu.a
+refer_SOURCES =  \
+  src/preproc/refer/command.cpp \
+  src/preproc/refer/ref.cpp \
+  src/preproc/refer/refer.cpp \
+  src/preproc/refer/token.cpp \
+  src/preproc/refer/label.ypp \
+  src/preproc/refer/refer.h \
+  src/preproc/refer/ref.h \
+  src/preproc/refer/token.h \
+  src/preproc/refer/command.h
+PREFIXMAN1 += src/preproc/refer/refer.1
+EXTRA_DIST += src/preproc/refer/TODO src/preproc/refer/refer.1.man
+CLEANFILES += \
+  src/preproc/refer/label.cpp \
+  src/preproc/refer/label.hpp \
+  src/preproc/refer/label.output
+# As refer_CPPFLAGS was set, all the .o have a 'refer-' prefix
+src/preproc/refer/refer-command.$(OBJEXT): defs.h
+src/preproc/refer/refer-ref.$(OBJEXT): defs.h
+src/preproc/refer/refer-refer.$(OBJEXT): defs.h
+src/preproc/refer/refer-token.$(OBJEXT): defs.h
+src/preproc/refer/refer-label.$(OBJEXT): defs.h
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index ec0a4e3154c636977ba311a60640f9a3e3084cf1..fe1e52aeb82fc7ee041f87166359ca05fbd13d8f 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "refer.h"
 #include "refid.h"
@@ -173,7 +173,7 @@ int main(int argc, char **argv)
              --argc;
            }
            else {
-             error("option `f' requires an argument");
+             error("option 'f' requires an argument");
              usage(stderr);
              exit(1);
            }
@@ -185,7 +185,7 @@ int main(int argc, char **argv)
          const char *ptr;
          for (ptr = num; *ptr; ptr++)
            if (!csdigit(*ptr)) {
-             error("bad character `%1' in argument to -f option", *ptr);
+             error("bad character '%1' in argument to -f option", *ptr);
              break;
            }
          if (*ptr == '\0') {
@@ -218,7 +218,7 @@ int main(int argc, char **argv)
            buf[0] = *opt++;
          else {
            if (*opt != '\0')
-             error("bad field name `%1'", *opt++);
+             error("bad field name '%1'", *opt++);
            buf[0] = 'L';
          }
          buf[1] = '~';
@@ -234,7 +234,7 @@ int main(int argc, char **argv)
          const char *ptr;
          for (ptr = ++opt; *ptr; ptr++)
            if (!csdigit(*ptr)) {
-             error("argument to `a' option not a number");
+             error("argument to 'a' option not a number");
              break;
            }
          if (*ptr == '\0') {
@@ -256,7 +256,7 @@ int main(int argc, char **argv)
            char *ptr;
            long n = strtol(opt, &ptr, 10);
            if (n == 0 && ptr == opt) {
-             error("bad integer `%1' in `l' option", opt);
+             error("bad integer '%1' in 'l' option", opt);
              opt = 0;
              break;
            }
@@ -272,7 +272,7 @@ int main(int argc, char **argv)
            char *ptr;
            long n = strtol(opt, &ptr, 10);
            if (n == 0 && ptr == opt) {
-             error("bad integer `%1' in `l' option", opt);
+             error("bad integer '%1' in 'l' option", opt);
              opt = 0;
              break;
            }
@@ -281,7 +281,7 @@ int main(int argc, char **argv)
            sprintf(strchr(buf, '\0'), "-%ld", n);
            opt = ptr;
            if (*opt != '\0')
-             error("argument to `l' option not of form `m,n'");
+             error("argument to 'l' option not of form 'm,n'");
          }
          strcat(buf, "%a");
          if (!set_label_spec(buf))
@@ -302,7 +302,7 @@ int main(int argc, char **argv)
              argc--;
            }
            else {
-             error("option `p' requires an argument");
+             error("option 'p' requires an argument");
              usage(stderr);
              exit(1);
            }
@@ -328,7 +328,7 @@ int main(int argc, char **argv)
          char *ptr;
          long n = strtol(opt, &ptr, 10);
          if (n == 0 && ptr == opt) {
-           error("bad integer `%1' in `t' option", opt);
+           error("bad integer '%1' in 't' option", opt);
            opt = 0;
            break;
          }
@@ -357,7 +357,7 @@ int main(int argc, char **argv)
        }
        // fall through
       default:
-       error("unrecognized option `%1'", *opt);
+       error("unrecognized option '%1'", *opt);
        usage(stderr);
        exit(1);
        break;
@@ -428,12 +428,15 @@ static void do_file(const char *filename)
     errno = 0;
     fp = fopen(filename, "r");
     if (fp == 0) {
-      error("can't open `%1': %2", filename, strerror(errno));
+      error("can't open '%1': %2", filename, strerror(errno));
       return;
     }
   }
-  current_filename = filename;
-  fprintf(outfp, ".lf 1 %s\n", filename);
+  string fn(filename);
+  fn += '\0';
+  normalize_for_lf(fn);
+  current_filename = fn.contents();
+  fprintf(outfp, ".lf 1 %s\n", current_filename);
   string line;
   current_lineno = 0;
   for (;;) {
@@ -467,7 +470,7 @@ static void do_file(const char *filename)
        int c = getc(fp);
        if (c == EOF) {
          error_with_file_and_line(current_filename, start_lineno,
-                                  "missing `.]' line");
+                                  "missing '.]' line");
          break;
        }
        if (start_of_line)
@@ -497,7 +500,7 @@ static void do_file(const char *filename)
        if (accumulate)
          output_references();
        else
-         error("found `$LIST$' but not accumulating references");
+         error("found '$LIST$' but not accumulating references");
       }
       else {
        unsigned flags = (accumulate
@@ -577,7 +580,7 @@ static void do_file(const char *filename)
        }
        if (c == EOF) {
          error_with_file_and_line(current_filename, start_lineno,
-                                  "missing `.R2' line");
+                                  "missing '.R2' line");
          break;
        }
        if (invalid_input_char(c))
@@ -940,7 +943,7 @@ void output_references()
   assert(accumulate);
   if (!hash_table_size) {
     if (have_bibliography)
-      error("nothing to reference (probably `bibliography' before `sort')");
+      error("nothing to reference (probably 'bibliography' before 'sort')");
     accumulate = 0;
     nreferences = 0;
     return;
@@ -1010,7 +1013,7 @@ static reference *find_reference(const char *query, int query_len)
   const char *start;
   int len;
   if (!iter.next(&start, &len, &rid)) {
-    error("no matches for `%1'", str.contents());
+    error("no matches for '%1'", str.contents());
     return 0;
   }
   const char *end = start + len;
@@ -1021,13 +1024,13 @@ static reference *find_reference(const char *query, int query_len)
       ;
   }
   if (start >= end) {
-    error("found a reference for `%1' but it didn't contain any fields",
+    error("found a reference for '%1' but it didn't contain any fields",
          str.contents());
     return 0;
   }
   reference *result = new reference(start, end - start, &rid);
   if (iter.next(&start, &len, &rid))
-    warning("multiple matches for `%1'", str.contents());
+    warning("multiple matches for '%1'", str.contents());
   return result;
 }
 
@@ -1107,7 +1110,7 @@ void do_bib(const char *filename)
     errno = 0;
     fp = fopen(filename, "r");
     if (fp == 0) {
-      error("can't open `%1': %2", filename, strerror(errno));
+      error("can't open '%1': %2", filename, strerror(errno));
       return;
     }
     current_filename = filename;
index 38474e92422cb3f47e5f69ed454f663d322f61b0..a1a791ce8b1204e8c74a1701039c0893fe7e742a 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -28,6 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 #include "stringclass.h"
 #include "cset.h"
 #include "cmap.h"
+#include "lf.h"
 
 #include "defs.h"
 
diff --git a/src/preproc/refer/refer.man b/src/preproc/refer/refer.man
deleted file mode 100644 (file)
index f5bc6c7..0000000
+++ /dev/null
@@ -1,1802 +0,0 @@
-.TH @G@REFER @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@refer \- preprocess bibliographic references for groff
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Macro Definitions
-.\" --------------------------------------------------------------------
-.
-.de TQ
-.  br
-.  ns
-.  TP \\$1
-..
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.  ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.  el .TP "\\$1"
-..
-.
-.\" The BSD man macros can't handle " in arguments to font change macros,
-.\" so use \(ts instead of ".
-.tr \(ts"\""
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fB@g@refer 'u
-.ti \niu
-.B @g@refer
-.
-.de OP
-.  ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.  el .RB "[\ " "\\$1" "\ ]"
-..
-.
-.OP \-benvCPRS
-.OP \-a n
-.OP \-c fields
-.OP \-f n
-.OP \-i fields
-.OP \-k field
-.OP \-l m,n
-.OP \-p \%filename
-.OP \-s fields
-.OP \-t n
-.OP \-B field.macro
-.RI [\  \%filename \|.\|.\|.\ ]
-.br
-.ad \na
-.
-.
-\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This file documents the GNU version of
-.BR refer ,
-which is part of the groff document formatting system.
-.
-.B refer
-copies the contents of
-.IR filename \|.\|.\|.\&
-to the standard output,
-except that lines between
-.B .[
-and
-.B .]\&
-are interpreted as citations,
-and lines between
-.B .R1
-and
-.B .R2
-are interpreted as commands about how citations are to be processed.
-.
-.
-.LP
-Each citation specifies a reference.
-.
-The citation can specify a reference that is contained in
-a bibliographic database by giving a set of keywords
-that only that reference contains.
-.
-Alternatively it can specify a reference by supplying a database
-record in the citation.
-.
-A combination of these alternatives is also possible.
-.
-.
-.LP
-For each citation,
-.B refer
-can produce a mark in the text.
-.
-This mark consists of some label which can be separated from
-the text and from other labels in various ways.
-.
-For each reference it also outputs
-.B groff
-commands that can be used by a macro package to produce a formatted
-reference for each citation.
-.
-The output of
-.B refer
-must therefore be processed using a suitable macro package.
-.
-The
-.B \-ms
-and
-.B \-me
-macros are both suitable.
-.
-The commands to format a citation's reference can be output immediately after
-the citation,
-or the references may be accumulated,
-and the commands output at some later point.
-.
-If the references are accumulated, then multiple citations of the same
-reference will produce a single formatted reference.
-.
-.
-.LP
-The interpretation of lines between
-.B .R1
-and
-.B .R2
-as commands is a new feature of GNU
-.BR refer .
-.
-Documents making use of this feature can still be processed by
-Unix refer just by adding the lines
-.
-.RS
-.LP
-.nf
-.ft B
-\&.de R1
-\&.ig R2
-\&..
-.ft
-.fi
-.RE
-.
-to the beginning of the document.
-.
-This will cause
-.B troff
-to ignore everything between
-.B .R1
-and
-.BR .R2 .
-.
-The effect of some commands can also be achieved by options.
-.
-These options are supported mainly for compatibility with Unix refer.
-.
-It is usually more convenient to use commands.
-.
-.
-.LP
-.B refer
-generates
-.B .lf
-lines so that filenames and line numbers in messages produced
-by commands that read
-.B refer
-output will be correct;
-it also interprets lines beginning with
-.B .lf
-so that filenames and line numbers in the messages and
-.B .lf
-lines that it produces will be accurate even if the input has been
-preprocessed by a command such as
-.BR @g@soelim (@MAN1EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.LP
-Most options are equivalent to commands
-(for a description of these commands see the
-.B Commands
-subsection):
-.
-.
-.nr a \n(.j
-.ad l
-.TP
-.B \-b
-.B "no-label-in-text; no-label-in-reference"
-.
-.
-.TP
-.B \-e
-.B accumulate
-.
-.
-.TP
-.B \-n
-.B no-default-database
-.
-.
-.TP
-.B \-C
-.B compatible
-.
-.
-.TP
-.B \-P
-.B move-punctuation
-.
-.
-.TP
-.B \-S
-.B
-label\ "(A.n|Q)\ ',\ '\ (D.y|D)"; \%bracket-label\ "\ ("\ )\ ";\ "
-.
-.
-.TP
-.BI \-a n
-.B reverse
-.BI A n
-.
-.
-.TP
-.BI \-c fields
-.B capitalize
-.I fields
-.
-.
-.TP
-.BI \-f n
-.B label
-.BI % n
-.
-.
-.TP
-.BI \-i fields
-.B search-ignore
-.I fields
-.
-.
-.TP
-.B \-k
-.B label
-.B L\(ti%a
-.
-.
-.TP
-.BI \-k field
-.B label
-.IB field \(ti%a
-.
-.
-.TP
-.B \-l
-.B label
-.BI A.nD.y%a
-.
-.
-.TP
-.BI \-l m
-.B label
-.BI A.n+ m D.y%a
-.
-.
-.TP
-.BI \-l, n
-.B label
-.BI A.nD.y\- n %a
-.
-.
-.TP
-.BI \-l m , n
-.B label
-.BI A.n+ m D.y\- n %a
-.
-.
-.TP
-.BI \-p filename
-.B database
-.I filename
-.
-.
-.TP
-.BI \-s spec
-.B sort
-.I spec
-.
-.
-.TP
-.BI \-t n
-.B search-truncate
-.I n
-.ad \na
-.
-.
-.LP
-These options are equivalent to the following commands with the
-addition that the filenames specified on the command line are
-processed as if they were arguments to the
-.B bibliography
-command instead of in the normal way:
-.
-.
-.TP
-.B \-B
-.B "annotate X AP; no-label-in-reference"
-.
-.
-.TP
-.BI \-B field . macro
-.B annotate
-.I field
-.IB macro ;
-.B no-label-in-reference
-.
-.
-.LP
-The following options have no equivalent commands:
-.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.TP
-.B \-R
-Don't recognize lines beginning with
-.BR .R1 / .R2 .
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.SS Bibliographic databases
-.\" --------------------------------------------------------------------
-.
-The bibliographic database is a text file consisting of records
-separated by one or more blank lines.
-.
-Within each record fields start with a
-.B %
-at the beginning of a line.
-.
-Each field has a one character name that immediately follows the
-.BR % .
-It is best to use only upper and lower case letters for the names
-of fields.
-.
-The name of the field should be followed by exactly one space,
-and then by the contents of the field.
-.
-Empty fields are ignored.
-.
-The conventional meaning of each field is as follows:
-.
-.
-.TP
-.B %A
-The name of an author.
-.
-If the name contains a title such as
-.B Jr.\&
-at the end,
-it should be separated from the last name by a comma.
-.
-There can be multiple occurrences of the
-.B %A
-field.
-.
-The order is significant.
-.
-It is a good idea always to supply an
-.B %A
-field or a
-.B %Q
-field.
-.
-.
-.TP
-.B %B
-For an article that is part of a book, the title of the book.
-.
-.
-.TP
-.B %C
-The place (city) of publication.
-.
-.
-.TP
-.B %D
-The date of publication.
-.
-The year should be specified in full.
-.
-If the month is specified, the name rather than the number of the month
-should be used, but only the first three letters are required.
-.
-It is a good idea always to supply a
-.B %D
-field;
-if the date is unknown, a value such as
-.B in press
-or
-.B unknown
-can be used.
-.
-.
-.TP
-.B %E
-For an article that is part of a book, the name of an editor of the book.
-.
-Where the work has editors and no authors,
-the names of the editors should be given as
-.B %A
-fields and
-.B ,\ (ed)
-or
-.B ,\ (eds)
-should be appended to the last author.
-.
-.
-.TP
-.B %G
-US Government ordering number.
-.
-.
-.TP
-.B %I
-The publisher (issuer).
-.
-.
-.TP
-.B %J
-For an article in a journal,
-the name of the journal.
-.
-.
-.TP
-.B %K
-Keywords to be used for searching.
-.
-.
-.TP
-.B %L
-Label.
-.
-.
-.TP
-.B %N
-Journal issue number.
-.
-.
-.TP
-.B %O
-Other information.
-.
-This is usually printed at the end of the reference.
-.
-.
-.TP
-.B %P
-Page number.
-A range of pages can be specified as
-.IB m \- n\fR.
-.
-.
-.TP
-.B %Q
-The name of the author, if the author is not a person.
-.
-This will only be used if there are no
-.B %A
-fields.
-.
-There can only be one
-.B %Q
-field.
-.
-.
-.TP
-.B %R
-Technical report number.
-.
-.
-.TP
-.B %S
-Series name.
-.
-.
-.TP
-.B %T
-Title.
-.
-For an article in a book or journal,
-this should be the title of the article.
-.
-.
-.TP
-.B %V
-Volume number of the journal or book.
-.
-.
-.TP
-.B %X
-Annotation.
-.
-.
-.LP
-For all fields except
-.B %A
-and
-.BR %E ,
-if there is more than one occurrence of a particular field in a record,
-only the last such field will be used.
-.
-.
-.LP
-If accent strings are used, they should follow the character to be accented.
-This means that the
-.B AM
-macro must be used with the
-.B \-ms
-macros.
-.
-Accent strings should not be quoted:
-use one
-.B \e
-rather than two.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Citations
-.\" --------------------------------------------------------------------
-.
-The format of a citation is
-.
-.RS
-.BI .[ opening-text
-.br
-.I "flags keywords"
-.br
-.I fields
-.br
-.BI .] closing-text
-.RE
-.
-.
-.LP
-The
-.IR opening-text ,
-.IR closing-text
-and
-.I flags
-components are optional.
-.
-Only one of the
-.I keywords
-and
-.I fields
-components need be specified.
-.
-.
-.LP
-The
-.I keywords
-component says to search the bibliographic databases for a reference
-that contains all the words in
-.IR keywords .
-.
-It is an error if more than one reference if found.
-.
-.
-.LP
-The
-.I fields
-components specifies additional fields to replace or supplement
-those specified in the reference.
-.
-When references are being accumulated and the
-.I keywords
-component is non-empty,
-then additional fields should be specified only on the first
-occasion that a particular reference is cited,
-and will apply to all citations of that reference.
-.
-.
-.LP
-The
-.I opening-text
-and
-.I closing-text
-component specifies strings to be used to bracket the label instead
-of the strings specified in the
-.B bracket-label
-command.
-.
-If either of these components is non-empty,
-the strings specified in the
-.B bracket-label
-command will not be used;
-this behaviour can be altered using the
-.B [
-and
-.B ]
-flags.
-Note that leading and trailing spaces are significant for these components.
-.
-.
-.LP
-The
-.I flags
-component is a list of
-non-alphanumeric characters each of which modifies the treatment
-of this particular citation.
-.
-Unix refer will treat these flags as part of the keywords and
-so will ignore them since they are non-alphanumeric.
-.
-The following flags are currently recognized:
-.
-.
-.TP
-.B #
-This says to use the label specified by the
-.B short-label
-command,
-instead of that specified by the
-.B label
-command.
-.
-If no short label has been specified, the normal label will be used.
-.
-Typically the short label is used with author-date labels
-and consists of only the date and possibly a disambiguating letter;
-the
-.B #
-is supposed to be suggestive of a numeric type of label.
-.
-.
-.TP
-.B [
-Precede
-.I opening-text
-with the first string specified in the
-.B bracket-label
-command.
-.
-.
-.TP
-.B ]
-Follow
-.I closing-text
-with the second string specified in the
-.B bracket-label
-command.
-.
-.
-.LP
-One advantages of using the
-.B [
-and
-.B ]
-flags rather than including the brackets in
-.I opening-text
-and
-.I closing-text
-is that
-you can change the style of bracket used in the document just by changing the
-.B bracket-label
-command.
-.
-Another advantage is that sorting and merging of citations
-will not necessarily be inhibited if the flags are used.
-.
-.
-.LP
-If a label is to be inserted into the text,
-it will be attached to the line preceding the
-.B .[
-line.
-.
-If there is no such line, then an extra line will be inserted before the
-.B .[
-line and a warning will be given.
-.
-.
-.LP
-There is no special notation for making a citation to multiple references.
-Just use a sequence of citations, one for each reference.
-.
-Don't put anything between the citations.
-.
-The labels for all the citations will be attached to the line preceding
-the first citation.
-.
-The labels may also be sorted or merged.
-.
-See the description of the
-.B <>
-label expression, and of the
-.B sort-adjacent-labels
-and
-.B abbreviate-label-ranges
-command.
-A label will not be merged if its citation has a non-empty
-.I opening-text
-or
-.IR closing-text .
-.
-However,
-the labels for a citation using the
-.B ]
-flag and without any
-.I closing-text
-immediately followed by a citation using the
-.B [
-flag and without any
-.I opening-text
-may be sorted and merged
-even though the first citation's
-.I opening-text
-or the second citation's
-.I closing-text
-is non-empty.
-.
-(If you wish to prevent this just make the first citation's
-.I closing-text
-.BR \e& .)
-.
-.
-.\" --------------------------------------------------------------------
-.SS Commands
-.\" --------------------------------------------------------------------
-.
-Commands are contained between lines starting with
-.B .R1
-and
-.BR .R2 .
-.
-Recognition of these lines can be prevented by the
-.B \-R
-option.
-.
-When a
-.B .R1
-line is recognized any accumulated references are flushed out.
-.
-Neither
-.B .R1
-nor
-.B .R2
-lines,
-nor anything between them
-is output.
-.
-.
-.LP
-Commands are separated by newlines or
-.BR ; s.
-.B #
-introduces a comment that extends to the end of the line
-(but does not conceal the newline).
-.
-Each command is broken up into words.
-.
-Words are separated by spaces or tabs.
-.
-A word that begins with
-.B \(ts
-extends to the next
-.B \(ts
-that is not followed by another
-.BR \(ts .
-.
-If there is no such
-.B \(ts
-the word extends to the end of the line.
-.
-Pairs of
-.B \(ts
-in a word beginning with
-.B \(ts
-collapse to a single
-.BR \(ts .
-.
-Neither
-.B #
-nor
-.B ;
-are recognized inside
-.BR \(ts s.
-.
-A line can be continued by ending it with
-.BR \e ;
-this works everywhere except after a
-.BR # .
-.
-.
-.LP
-.ds n \fR*
-Each command
-.I name
-that is marked with \*n has an associated negative command
-.BI no- name
-that undoes the effect of
-.IR name .
-.
-For example, the
-.B no-sort
-command specifies that references should not be sorted.
-.
-The negative commands take no arguments.
-.
-.
-.LP
-In the following description each argument must be a single word;
-.I field
-is used for a single upper or lower case letter naming a field;
-.I fields
-is used for a sequence of such letters;
-.I m
-and
-.I n
-are used for a non-negative numbers;
-.I string
-is used for an arbitrary string;
-.I filename
-is used for the name of a file.
-.
-.
-.Tp \w'\fBabbreviate-label-ranges'u+2n
-.BI abbreviate\*n\  fields\ string1\ string2\ string3\ string4
-Abbreviate the first names of
-.IR fields .
-.
-An initial letter will be separated from another initial letter by
-.IR string1 ,
-from the last name by
-.IR string2 ,
-and from anything else
-(such as a
-.B von
-or
-.BR de )
-by
-.IR string3 .
-.
-These default to a period followed by a space.
-.
-In a hyphenated first name,
-the initial of the first part of the name will be separated from the
-hyphen by
-.IR string4 ;
-this defaults to a period.
-.
-No attempt is made to handle any ambiguities that might
-result from abbreviation.
-.
-Names are abbreviated before sorting and before label construction.
-.
-.
-.TP
-.BI abbreviate-label-ranges\*n\  string
-.
-Three or more adjacent labels that refer to consecutive references
-will be abbreviated to a label consisting of the first label,
-followed by
-.I string
-followed by the last label.
-.
-This is mainly useful with numeric labels.
-.
-If
-.I string
-is omitted it defaults to
-.BR \- .
-.
-.
-.TP
-.B accumulate\*n
-Accumulate references instead of writing out each reference
-as it is encountered.
-.
-Accumulated references will be written out whenever a reference
-of the form
-.
-.RS
-.IP
-.B .[
-.br
-.B $LIST$
-.br
-.B .]
-.
-.
-.LP
-is encountered,
-after all input files have been processed,
-and whenever
-.B .R1
-line is recognized.
-.RE
-.
-.
-.TP
-.BI annotate\*n\  field\ string
-.I field
-is an annotation;
-print it at the end of the reference as a paragraph preceded by the line
-.
-.RS
-.IP
-.BI . string
-.
-.
-.LP
-If
-.I string
-is omitted it will default to
-.BR AP ;
-if
-.I field
-is also omitted it will default to
-.BR X .
-.
-Only one field can be an annotation.
-.RE
-.
-.
-.TP
-.BI articles\  string \fR\|.\|.\|.
-.IR string \|.\|.\|.\&
-are definite or indefinite articles, and should be ignored at the beginning of
-.B T
-fields when sorting.
-.
-Initially,
-.BR the ,
-.B a
-and
-.B an
-are recognized as articles.
-.
-.
-.TP
-.BI bibliography\  filename \fR\|.\|.\|.
-.
-Write out all the references contained in the bibliographic databases
-.IR filename \|.\|.\|.
-.
-This command should come last in a
-.BR .R1 / .R2
-block.
-.
-.
-.TP
-.BI bracket-label\  string1\ string2\ string3
-In the text, bracket each label
-with
-.I string1
-and
-.IR string2 .
-.
-An occurrence of
-.I string2
-immediately followed by
-.I string1
-will be turned into
-.IR string3 .
-.
-The default behaviour is
-.
-.RS
-.IP
-.B
-bracket-label \e*([. \e*(.] ", "
-.RE
-.
-.
-.TP
-.BI capitalize\  fields
-Convert
-.I fields
-to caps and small caps.
-.
-.
-.TP
-.B compatible\*n
-Recognize
-.B .R1
-and
-.B .R2
-even when followed by a character other than space or newline.
-.
-.
-.TP
-.BI database\  filename \fR\|.\|.\|.
-Search the bibliographic databases
-.IR filename \|.\|.\|.
-.
-For each
-.I filename
-if an index
-.IB filename @INDEX_SUFFIX@
-created by
-.BR @g@indxbib (@MAN1EXT@)
-exists, then it will be searched instead;
-each index can cover multiple databases.
-.
-.
-.TP
-.BI date-as-label\*n\  string
-.I string
-is a label expression that specifies a string with which to replace the
-.B D
-field after constructing the label.
-.
-See the
-.B "Label expressions"
-subsection for a description of label expressions.
-.
-This command is useful if you do not want explicit labels in the
-reference list,
-but instead want to handle any necessary disambiguation by qualifying
-the date in some way.
-.
-The label used in the text would typically be some combination of the
-author and date.
-.
-In most cases you should also use the
-.B no-label-in-reference
-command.
-For example,
-.
-.RS
-.IP
-.B "date-as-label D.+yD.y%a*D.-y"
-.
-.
-.LP
-would attach a disambiguating letter to the year part of the
-.B D
-field in the reference.
-.RE
-.
-.
-.TP
-.B default-database\*n
-The default database should be searched.
-.
-This is the default behaviour,
-so the negative version of this command is more useful.
-.
-.B refer
-determines whether the default database should be searched
-on the first occasion that it needs to do a search.
-.
-Thus a
-.B no-default-database
-command must be given before then,
-in order to be effective.
-.
-.
-.TP
-.BI discard\*n\  fields
-When the reference is read,
-.I fields
-should be discarded;
-no string definitions for
-.I fields
-will be output.
-.
-Initially,
-.I fields
-are
-.BR XYZ .
-.
-.
-.TP
-.BI et-al\*n\  string\ m\ n
-Control use of
-.B "et al"
-in the evaluation of
-.B @
-expressions in label expressions.
-.
-If the number of authors needed to make the author sequence
-unambiguous is
-.I u
-and the total number of authors is
-.I t
-then the last
-.IR t \|\-\| u
-authors will be replaced by
-.I string
-provided that
-.IR t \|\-\| u
-is not less than
-.I m
-and
-.I t
-is not less than
-.IR n .
-.
-The default behaviour is
-.
-.RS
-.IP
-.B
-et-al " et al" 2 3
-.RE
-.
-.
-.TP
-.BI include\  filename
-Include
-.I filename
-and interpret the contents as commands.
-.
-.
-.TP
-.BI join-authors\  string1\ string2\ string3
-This says how authors should be joined together.
-.
-When there are exactly two authors, they will be joined with
-.IR string1 .
-.
-When there are more than two authors,
-all but the last two will be joined with
-.IR string2 ,
-and the last two authors will be joined with
-.IR string3 .
-.
-If
-.I string3
-is omitted,
-it will default to
-.IR string1 ;
-if
-.I string2
-is also omitted it will also default to
-.IR string1 .
-.
-For example,
-.
-.RS
-.IP
-.B
-join-authors " and " ", " ", and "
-.
-.
-.LP
-will restore the default method for joining authors.
-.RE
-.
-.
-.TP
-.B label-in-reference\*n
-When outputting the reference,
-define the string
-.B [F
-to be the reference's label.
-.
-This is the default behaviour; so the negative version
-of this command is more useful.
-.
-.
-.TP
-.B label-in-text\*n
-For each reference output a label in the text.
-.
-The label will be separated from the surrounding text as described in the
-.B bracket-label
-command.
-.
-This is the default behaviour; so the negative version
-of this command is more useful.
-.
-.
-.TP
-.BI label\  string
-.I string
-is a label expression describing how to label each reference.
-.
-.
-.TP
-.BI separate-label-second-parts\  string
-When merging two-part labels, separate the second part of the second
-label from the first label with
-.IR string .
-.
-See the description of the
-.B <>
-label expression.
-.
-.
-.TP
-.B move-punctuation\*n
-In the text,
-move any punctuation at the end of line past the label.
-.
-It is usually a good idea to give this command unless you are using
-superscripted numbers as labels.
-.
-.
-.TP
-.BI reverse\*n\  string
-Reverse the fields whose names
-are in
-.IR string .
-.
-Each field name can be followed by a number which says
-how many such fields should be reversed.
-.
-If no number is given for a field, all such fields will be reversed.
-.
-.
-.TP
-.BI search-ignore\*n\  fields
-While searching for keys in databases for which no index exists,
-ignore the contents of
-.IR fields .
-.
-Initially, fields
-.B XYZ
-are ignored.
-.
-.
-.TP
-.BI search-truncate\*n\  n
-Only require the first
-.I n
-characters of keys to be given.
-.
-In effect when searching for a given key words in the database are
-truncated to the maximum of
-.I n
-and the length of the key.
-.
-Initially
-.I n
-is\ 6.
-.
-.
-.TP
-.BI short-label\*n\  string
-.I string
-is a label expression that specifies an alternative (usually shorter)
-style of label.
-.
-This is used when the
-.B #
-flag is given in the citation.
-.
-When using author-date style labels, the identity of the author
-or authors is sometimes clear from the context, and so it
-may be desirable to omit the author or authors from the label.
-.
-The
-.B short-label
-command will typically be used to specify a label containing just
-a date and possibly a disambiguating letter.
-.
-.
-.TP
-.BI sort\*n\  string
-Sort references according to
-.BR string .
-.
-References will automatically be accumulated.
-.
-.I string
-should be a list of field names,
-each followed by a number,
-indicating how many fields with the name should be used for sorting.
-.
-.B +
-can be used to indicate that all the fields with the name should be used.
-.
-Also
-.B .\&
-can be used to indicate the references should be sorted using the
-(tentative) label.
-.
-(The
-.B "Label expressions"
-subsection describes the concept of a tentative label.)
-.
-.
-.TP
-.B sort-adjacent-labels\*n
-Sort labels that are adjacent in the text according to their position
-in the reference list.
-.
-This command should usually be given if the
-.B abbreviate-label-ranges
-command has been given,
-or if the label expression contains a
-.B <>
-expression.
-.
-This will have no effect unless references are being accumulated.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Label expressions
-.\" --------------------------------------------------------------------
-.
-Label expressions can be evaluated both normally and tentatively.
-.
-The result of normal evaluation is used for output.
-.
-The result of tentative evaluation, called the
-.IR "tentative label" ,
-is used to gather the information that normal evaluation needs to
-disambiguate the label.
-.
-Label expressions specified by the
-.B date-as-label
-and
-.B short-label
-commands are not evaluated tentatively.
-.
-Normal and tentative evaluation are the same for all types of
-expression other than
-.BR @ ,
-.BR * ,
-and
-.B %
-expressions.
-.
-The description below applies to normal evaluation,
-except where otherwise specified.
-.
-.
-.TP
-.I field
-.TQ
-.I field\ n
-The
-.IR n -th
-part of
-.IR field .
-.
-If
-.I n
-is omitted, it defaults to\ 1.
-.
-.
-.TP
-.BI ' string '
-The characters in
-.I string
-literally.
-.
-.
-.TP
-.B @
-All the authors joined as specified by the
-.B join-authors
-command.
-.
-The whole of each author's name will be used.
-.
-However, if the references are sorted by author (that is the sort
-specification starts with
-.BR A+ ),
-then authors last names will be used instead,
-provided that this does not introduce ambiguity,
-and also an initial subsequence of the authors may be used instead of
-all the authors,
-again provided that this does not introduce ambiguity.
-.
-The use of only the last name for the
-.IR i -th
-author of some reference
-is considered to be ambiguous if
-there is some other reference,
-such that the first
-.IR i \|\-\|1
-authors of the references are the same,
-the
-.IR i -th
-authors are not the same,
-but the
-.IR i -th
-authors last names are the same.
-.
-A proper initial subsequence of the sequence of authors for some
-reference is considered to be ambiguous if there is a reference with
-some other sequence of authors which also has that subsequence as a
-proper initial subsequence.
-.
-When an initial subsequence of authors is used, the remaining authors
-are replaced by the string specified by the
-.B et-al
-command;
-this command may also specify additional requirements that must be
-met before an initial subsequence can be used.
-.
-.B @
-tentatively evaluates to a canonical representation of the authors,
-such that authors that compare equally for sorting purpose will have
-the same representation.
-.
-.
-.TP
-.BI % n
-.TQ
-.B %a
-.TQ
-.B %A
-.TQ
-.B %i
-.TQ
-.B %I
-The serial number of the reference formatted according to the
-character following the
-.BR % .
-The serial number of a reference is\ 1 plus the number of earlier
-references with same tentative label as this reference.
-.
-These expressions tentatively evaluate to an empty string.
-.
-.TP
-.IB expr *
-If there is another reference with the same tentative label as this
-reference,
-then
-.IR expr ,
-otherwise an empty string.
-.
-It tentatively evaluates to an empty string.
-.
-.
-.TP
-.IB expr + n
-.TQ
-.IB expr \- n
-The first
-.RB ( + )
-or last
-.RB ( \- )
-.I n
-upper or lower case letters or digits of
-.IR expr .
-.
-Troff special characters (such as
-.BR \e('a )
-count as a single letter.
-.
-Accent strings are retained but do not count towards the total.
-.
-.
-.TP
-.IB expr .l
-.I expr
-converted to lowercase.
-.
-.
-.TP
-.IB expr .u
-.I expr
-converted to uppercase.
-.
-.
-.TP
-.IB expr .c
-.I expr
-converted to caps and small caps.
-.
-.
-.TP
-.IB expr .r
-.I expr
-reversed so that the last name is first.
-.
-.
-.TP
-.IB expr .a
-.I expr
-with first names abbreviated.
-.
-Note that fields specified in the
-.B abbreviate
-command are abbreviated before any labels are evaluated.
-.
-Thus
-.B .a
-is useful only when you want a field to be abbreviated in a label
-but not in a reference.
-.
-.
-.TP
-.IB expr .y
-The year part of
-.IR expr .
-.
-.
-.TP
-.IB expr .+y
-The part of
-.I expr
-before the year,
-or the whole of
-.I expr
-if it does not contain a year.
-.
-.
-.TP
-.IB expr .\-y
-The part of
-.I expr
-after the year,
-or an empty string if
-.I expr
-does not contain a year.
-.
-.
-.TP
-.IB expr .n
-The last name part of
-.IR expr .
-.
-.
-.TP
-.IB expr1 \(ti expr2
-.I expr1
-except that if the last character of
-.I expr1
-is
-.B \-
-then it will be replaced by
-.IR expr2 .
-.
-.
-.TP
-.I expr1\ expr2
-The concatenation of
-.I expr1
-and
-.IR expr2 .
-.
-.
-.TP
-.IB expr1 | expr2
-If
-.I expr1
-is non-empty then
-.I expr1
-otherwise
-.IR expr2 .
-.
-.
-.TP
-.IB expr1 & expr2
-If
-.I expr1
-is non-empty
-then
-.I expr2
-otherwise an empty string.
-.
-.
-.TP
-.IB expr1 ? expr2 : expr3
-If
-.I expr1
-is non-empty
-then
-.I expr2
-otherwise
-.IR expr3 .
-.
-.
-.TP
-.BI < expr >
-The label is in two parts, which are separated by
-.IR expr .
-.
-Two adjacent two-part labels which have the same first part will be
-merged by appending the second part of the second label onto the first
-label separated by the string specified in the
-.B separate-label-second-parts
-command (initially,
-a comma followed by a space);
-the resulting label will also be a two-part label with the same first
-part as before merging,
-and so additional labels can be merged into it.
-.
-Note that it is permissible for the first part to be empty;
-this maybe desirable for expressions used in the
-.B short-label
-command.
-.
-.
-.TP
-.BI ( expr )
-The same as
-.IR expr .
-.
-Used for grouping.
-.
-.
-.LP
-The above expressions are listed in order of precedence
-(highest first);
-.B &
-and
-.B |
-have the same precedence.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Macro interface
-.\" --------------------------------------------------------------------
-.
-Each reference starts with a call to the macro
-.BR ]- .
-.
-The string
-.B [F
-will be defined to be the label for this reference,
-unless the
-.B no-label-in-reference
-command has been given.
-.
-There then follows a series of string definitions,
-one for each field:
-string
-.BI [ X
-corresponds to field
-.IR X .
-.
-The number register
-.B [P
-is set to\ 1 if the
-.B P
-field contains a range of pages.
-.
-The
-.BR [T ,
-.B [A
-and
-.B [O
-number registers are set to\ 1 according as the
-.BR T ,
-.B A
-and
-.B O
-fields end with one of the characters
-.BR .?! .
-.
-The
-.B [E
-number register will be set to\ 1 if the
-.B [E
-string contains more than one name.
-.
-The reference is followed by a call to the
-.B ][
-macro.
-.
-The first argument to this macro gives a number representing
-the type of the reference.
-.
-If a reference contains a
-.B J
-field, it will be classified as type\ 1,
-otherwise if it contains a
-.B B
-field, it will type\ 3,
-otherwise if it contains a
-.B G
-or
-.B R
-field it will be type\ 4,
-otherwise if contains a
-.B I
-field it will be type\ 2,
-otherwise it will be type\ 0.
-.
-The second argument is a symbolic name for the type:
-.BR other ,
-.BR journal-article ,
-.BR book ,
-.B article-in-book
-or
-.BR tech-report .
-.
-Groups of references that have been accumulated or are produced by the
-.B bibliography
-command are preceded by a call to the
-.B ]<
-macro and followed by a call to the
-.B ]>
-macro.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'\fB@DEFAULT_INDEX@'u+2n
-.B @DEFAULT_INDEX@
-Default database.
-.
-.
-.TP
-.IB file @INDEX_SUFFIX@
-Index files.
-.
-.
-.LP
-.B refer
-uses temporary files.
-.
-See the
-.BR groff (@MAN1EXT@)
-man page for details where such files are created.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.Tp \w'\fBREFER'u+2n
-.B REFER
-If set, overrides the default database.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR @g@indxbib (@MAN1EXT@),
-.BR @g@lookbib (@MAN1EXT@),
-.BR lkbib (@MAN1EXT@)
-.br
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-In label expressions,
-.B <>
-expressions are ignored inside
-.BI . char
-expressions.
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 710addee8a4b207b6bd8dff51027172f9ed2f743..4aa0d22c9a222fea8fd1f6ca32bb59d2fcea026a 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "refer.h"
 #include "token.h"
index 1b9befbd9150dfda6ff55a9dcb4cad9f5522a9ea..fbff8f60308b6783a9026f722ceb0c6a3e8299c2 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 enum token_type {
   TOKEN_OTHER,
diff --git a/src/preproc/soelim/Makefile.sub b/src/preproc/soelim/Makefile.sub
deleted file mode 100644 (file)
index 187fb8f..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# Makefile.sub for `preproc soelim'
-#
-# File position: <groff-source>/src/preproc/soelim/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=soelim$(EXEEXT)
-MAN1=soelim.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=soelim.$(OBJEXT)
-CCSRCS=$(srcdir)/soelim.cpp
-NAMEPREFIX=$(g)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/preproc/soelim/soelim.1.man b/src/preproc/soelim/soelim.1.man
new file mode 100644 (file)
index 0000000..1bbbe21
--- /dev/null
@@ -0,0 +1,283 @@
+'\" p
+.TH @G@SOELIM @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@soelim \- interpret .so requests in groff input
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr soelim_C \n[.C]
+.cp 0
+.mso pic.tmac
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY @g@soelim
+.OP \-Crtv
+.OP \-I dir
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B @g@soelim
+reads
+.I files
+and replaces lines of the form
+.IP
+.BI .so\~ file
+.LP
+by the contents of
+.IR file .
+.
+It is useful if files included with
+.B .so
+need to be preprocessed.
+.
+Normally,
+.B @g@soelim
+should be invoked with the
+.B \-s
+option of
+.BR groff .
+.
+.
+.PP
+To embed \[oq]\[rs]\[cq] in the file name, write \[oq]\[rs]\[rs]\[cq]
+or \[oq]\[rs]e\[cq].
+.
+To embed a space, write \[oq]\[rs]\ \[cq].
+.
+Any other escape sequence in
+.I file
+makes
+.B soelim
+ignore the whole line.
+.
+.
+.PP
+Note that there must be no whitespace between the leading dot and the two
+characters \[oq]s\[cq] and \[oq]o\[cq].
+.
+Otherwise, only
+.B groff
+interprets the
+.B .so
+request (and
+.B soelim
+ignores it).
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.B \-C
+Recognize
+.B .so
+even when followed by a character other than space or newline.
+.
+.TP
+.BI \-I dir
+This option may be used to add a directory to the search path for
+files (both those on the command line and those named in
+.B .so
+requests).
+.
+The search path is initialized with the current directory.
+.
+This option may be specified more than once; the directories are then
+searched in the order specified (but before the current directory).
+.
+If you want to make the current directory be read before other
+directories, add
+.B \-I.\&
+at the appropriate place.
+.
+.IP
+No directory search is performed for files with an absolute file name.
+.
+.TP
+.B \-r
+Do not add
+.B .lf
+requests (for general use, with non-groff files).
+.
+.TP
+.B \-t
+Don't emit
+.B .lf
+requests but TeX comment lines (starting with \[oq]%\[cq]) giving the
+current file and line number.
+.
+.TP
+.B \-v
+Print the version number.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+The normal processing sequence of groff is this:
+.
+.
+.PP
+.ie t \{\
+.PS
+.ps 10
+.vs 12
+box invisible width 0.5 height 0.4 "input" "file";
+move to last box .bottom;
+down;
+arrow 0.3;
+box invisible width 0.8 height 0.2 "preprocessor";
+move to last box .right
+right;
+arrow 0.3;
+A: box invisible width 0.35 height 0.2 "troff";
+move to last box .top;
+up;
+move 0.3;
+box invisible width 0.6 height 0.4 "sourced" "file";
+line <- up 0.3 from A.top;
+move to A.right;
+right;
+arrow 0.3;
+box invisible width 0.85 height 0.2 "postprocessor";
+move to last box .bottom;
+down;
+arrow 0.3;
+box invisible width 0.5 height 0.4 "output" "file"
+.ps
+.vs
+.PE
+.\}
+.el \{\
+.nf
+          input        sourced
+          file          file
+            |             |
+            v             v
+        preprocessor -> troff -> postprocessor
+                                      |
+                                      v
+                                   output
+                                    file
+.fi
+.\}
+.PP
+.
+That is, files sourced with
+.B .so
+are normally read
+.I only
+by
+.B troff
+(the actual formatter).
+.
+.B soelim
+is
+.I not
+required for
+.B troff
+to source files.
+.
+.
+.PP
+If a file to be sourced should also be preprocessed, it must already be read
+.I before
+the input file passes through the preprocessor.
+.
+This is handled by
+.BR soelim :
+.
+.PP
+.ie t \{\
+.PS
+.ps 10
+.vs 12
+box invisible width 0.5 height 0.4 "input" "file";
+move to last box .bottom;
+down;
+arrow 0.3;
+A: box invisible width 0.5 height 0.2 "soelim";
+line <- 0.3;
+box invisible width 0.5 height 0.4 "sourced" "file";
+move to A.right;
+right;
+arrow 0.3;
+box invisible width 0.8 height 0.2 "preprocessor";
+arrow 0.3;
+box invisible width 0.35 height 0.2 "troff";
+arrow 0.3
+box invisible width 0.85 height 0.2 "postprocessor";
+move to last box .bottom;
+down;
+arrow 0.3;
+box invisible width 0.5 height 0.4 "output" "file"
+.ps
+.vs
+.PE
+.\}
+.el \{\
+.nf
+          input
+          file
+            |
+            v
+          soelim -> preprocessor -> troff -> postprocessor
+            ^                                     |
+            |                                     v
+         sourced                               output
+          file                                  file
+.fi
+.\}
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.BR groff (@MAN1EXT@)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[soelim_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/preproc/soelim/soelim.am b/src/preproc/soelim/soelim.am
new file mode 100644 (file)
index 0000000..b1aa640
--- /dev/null
@@ -0,0 +1,33 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += soelim
+soelim_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+soelim_SOURCES = src/preproc/soelim/soelim.cpp
+PREFIXMAN1 += src/preproc/soelim/soelim.1
+EXTRA_DIST += \
+  src/preproc/soelim/TODO \
+  src/preproc/soelim/soelim.1.man
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index 3e27fde1e2af1b963bb9efc1e169882ebd7c2661..549b5569bc286a15a8f9827875de106a466fae09 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -28,6 +28,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 #include "stringclass.h"
 #include "nonposix.h"
 #include "searchpath.h"
+#include "lf.h"
 
 // The include search path initially contains only the current directory.
 static search_path include_search_path(0, 0, 0, 1);
@@ -156,11 +157,12 @@ int do_file(const char *filename)
   int err = errno;
   string whole_filename(file_name_in_path ? file_name_in_path : filename);
   whole_filename += '\0';
-  a_delete file_name_in_path;
+  free(file_name_in_path);
   if (fp == 0) {
-    error("can't open `%1': %2", whole_filename.contents(), strerror(err));
+    error("can't open '%1': %2", whole_filename.contents(), strerror(err));
     return 0;
   }
+  normalize_for_lf(whole_filename);
   current_filename = whole_filename.contents();
   current_lineno = 1;
   set_location();
diff --git a/src/preproc/soelim/soelim.man b/src/preproc/soelim/soelim.man
deleted file mode 100644 (file)
index 765d36d..0000000
+++ /dev/null
@@ -1,280 +0,0 @@
-'\" p
-.mso pic.tmac
-.TH @G@SOELIM @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@soelim \- interpret .so requests in groff input
-.
-.
-.\" license (copying)
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY @g@soelim
-.OP \-Crtv
-.OP \-I dir
-.RI [ files
-.IR \|.\|.\|. ]
-.YS
-.
-.
-.PP
-It is possible to have whitespace between the
-.B \-I
-command line option and its parameter.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B @g@soelim
-reads
-.I files
-and replaces lines of the form
-.IP
-.BI .so\~ file
-.LP
-by the contents of
-.IR file .
-.
-It is useful if files included with
-.B .so
-need to be preprocessed.
-.
-Normally,
-.B @g@soelim
-should be invoked with the
-.B \-s
-option of
-.BR groff .
-.
-.
-.PP
-To embed \[oq]\[rs]\[cq] in the file name, write \[oq]\[rs]\[rs]\[cq]
-or \[oq]\[rs]e\[cq].
-.
-To embed a space, write \[oq]\[rs]\ \[cq].
-.
-Any other escape sequence in
-.I file
-makes
-.B soelim
-ignore the whole line.
-.
-.
-.PP
-Note that there must be no whitespace between the leading dot and the two
-characters \[oq]s\[cq] and \[oq]o\[cq].
-.
-Otherwise, only
-.B groff
-interprets the
-.B .so
-request (and
-.B soelim
-ignores it).
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.B \-C
-Recognize
-.B .so
-even when followed by a character other than space or newline.
-.
-.TP
-.BI \-I dir
-This option may be used to add a directory to the search path for
-files (both those on the command line and those named in
-.B .so
-requests).
-.
-The search path is initialized with the current directory.
-.
-This option may be specified more than once; the directories are then
-searched in the order specified (but before the current directory).
-.
-If you want to make the current directory be read before other
-directories, add
-.B \-I.\&
-at the appropriate place.
-.
-.IP
-No directory search is performed for files with an absolute file name.
-.
-.TP
-.B \-r
-Do not add
-.B .lf
-requests (for general use, with non-groff files).
-.
-.TP
-.B \-t
-Don\[aq]t emit
-.B .lf
-requests but TeX comment lines (starting with \[oq]%\[cq]) giving the
-current file and line number.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-The normal processing sequence of groff is this:
-.
-.
-.PP
-.ie t \{\
-.PS
-.ps 10
-.vs 12
-box invisible width 0.5 height 0.4 "input" "file";
-move to last box .bottom;
-down;
-arrow 0.3;
-box invisible width 0.8 height 0.2 "preprocessor";
-move to last box .right
-right;
-arrow 0.3;
-A: box invisible width 0.35 height 0.2 "troff";
-move to last box .top;
-up;
-move 0.3;
-box invisible width 0.6 height 0.4 "sourced" "file";
-line <- up 0.3 from A.top;
-move to A.right;
-right;
-arrow 0.3;
-box invisible width 0.85 height 0.2 "postprocessor";
-move to last box .bottom;
-down;
-arrow 0.3;
-box invisible width 0.5 height 0.4 "output" "file"
-.ps
-.vs
-.PE
-.\}
-.el \{\
-.nf
-          input        sourced
-          file          file
-            |             |
-            v             v
-        preprocessor -> troff -> postprocessor
-                                      |
-                                      v
-                                   output
-                                    file
-.fi
-.\}
-.PP
-.
-That is, files sourced with
-.B .so
-are normally read
-.I only
-by
-.B troff
-(the actual formatter).
-.
-.B soelim
-is
-.I not
-required for
-.B troff
-to source files.
-.
-.
-.PP
-If a file to be sourced should also be preprocessed, it must already be read
-.I before
-the input file passes through the preprocessor.
-.
-This is handled by
-.BR soelim :
-.
-.PP
-.ie t \{\
-.PS
-.ps 10
-.vs 12
-box invisible width 0.5 height 0.4 "input" "file";
-move to last box .bottom;
-down;
-arrow 0.3;
-A: box invisible width 0.5 height 0.2 "soelim";
-line <- 0.3;
-box invisible width 0.5 height 0.4 "sourced" "file";
-move to A.right;
-right;
-arrow 0.3;
-box invisible width 0.8 height 0.2 "preprocessor";
-arrow 0.3;
-box invisible width 0.35 height 0.2 "troff";
-arrow 0.3
-box invisible width 0.85 height 0.2 "postprocessor";
-move to last box .bottom;
-down;
-arrow 0.3;
-box invisible width 0.5 height 0.4 "output" "file"
-.ps
-.vs
-.PE
-.\}
-.el \{\
-.nf
-          input
-          file
-            |
-            v
-          soelim -> preprocessor -> troff -> postprocessor
-            ^                                     |
-            |                                     v
-         sourced                               output
-          file                                  file
-.fi
-.\}
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR groff (@MAN1EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/src/preproc/tbl/Makefile.sub b/src/preproc/tbl/Makefile.sub
deleted file mode 100644 (file)
index f93b92a..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Makefile.sub for `preproc tbl'
-#
-# File position: <groff-source>/src/preproc/tbl/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=tbl$(EXEEXT)
-MAN1=tbl.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
-  main.$(OBJEXT) \
-  table.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/main.cpp \
-  $(srcdir)/table.cpp
-HDRS=\
-  $(srcdir)/table.h
-NAMEPREFIX=$(g)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 55cf0e2695f23e15d60fd0146edc0e4d04df9330..cb86a40bed6f03b1788dd5b7d538e756337f8da8 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "table.h"
 
@@ -421,7 +421,7 @@ options *process_options(table_input &in)
       while (*q != ')' && *q != '\0')
        q++;
       if (*q == '\0')
-       error("missing `)'");
+       error("missing ')'");
       else
        *q++ = '\0';
     }
@@ -431,20 +431,20 @@ options *process_options(table_input &in)
     }
     else if (strieq(p, "tab")) {
       if (!arg)
-       error("`tab' option requires argument in parentheses");
+       error("'tab' option requires argument in parentheses");
       else {
        if (arg[0] == '\0' || arg[1] != '\0')
-         error("argument to `tab' option must be a single character");
+         error("argument to 'tab' option must be a single character");
        else
          opt->tab_char = arg[0];
       }
     }
     else if (strieq(p, "linesize")) {
       if (!arg)
-       error("`linesize' option requires argument in parentheses");
+       error("'linesize' option requires argument in parentheses");
       else {
        if (sscanf(arg, "%d", &opt->linesize) != 1)
-         error("bad linesize `%s'", arg);
+         error("bad linesize '%s'", arg);
        else if (opt->linesize <= 0) {
          error("linesize must be positive");
          opt->linesize = 0;
@@ -453,9 +453,9 @@ options *process_options(table_input &in)
     }
     else if (strieq(p, "delim")) {
       if (!arg)
-       error("`delim' option requires argument in parentheses");
+       error("'delim' option requires argument in parentheses");
       else if (arg[0] == '\0' || arg[1] == '\0' || arg[2] != '\0')
-       error("argument to `delim' option must be two characters");
+       error("argument to 'delim' option must be two characters");
       else {
        opt->delim[0] = arg[0];
        opt->delim[1] = arg[1];
@@ -463,50 +463,50 @@ options *process_options(table_input &in)
     }
     else if (strieq(p, "center") || strieq(p, "centre")) {
       if (arg)
-       error("`center' option does not take an argument");
+       error("'center' option does not take an argument");
       opt->flags |= table::CENTER;
     }
     else if (strieq(p, "expand")) {
       if (arg)
-       error("`expand' option does not take an argument");
+       error("'expand' option does not take an argument");
       opt->flags |= table::EXPAND;
     }
     else if (strieq(p, "box") || strieq(p, "frame")) {
       if (arg)
-       error("`box' option does not take an argument");
+       error("'box' option does not take an argument");
       opt->flags |= table::BOX;
     }
     else if (strieq(p, "doublebox") || strieq(p, "doubleframe")) {
       if (arg)
-       error("`doublebox' option does not take an argument");
+       error("'doublebox' option does not take an argument");
       opt->flags |= table::DOUBLEBOX;
     }
     else if (strieq(p, "allbox")) {
       if (arg)
-       error("`allbox' option does not take an argument");
+       error("'allbox' option does not take an argument");
       opt->flags |= table::ALLBOX;
     }
     else if (strieq(p, "nokeep")) {
       if (arg)
-       error("`nokeep' option does not take an argument");
+       error("'nokeep' option does not take an argument");
       opt->flags |= table::NOKEEP;
     }
     else if (strieq(p, "nospaces")) {
       if (arg)
-       error("`nospaces' option does not take an argument");
+       error("'nospaces' option does not take an argument");
       opt->flags |= table::NOSPACES;
     }
     else if (strieq(p, "nowarn")) {
       if (arg)
-       error("`nowarn' option does not take an argument");
+       error("'nowarn' option does not take an argument");
       opt->flags |= table::NOWARN;
     }
     else if (strieq(p, "decimalpoint")) {
       if (!arg)
-       error("`decimalpoint' option requires argument in parentheses");
+       error("'decimalpoint' option requires argument in parentheses");
       else {
        if (arg[0] == '\0' || arg[1] != '\0')
-         error("argument to `decimalpoint' option must be a single character");
+         error("argument to 'decimalpoint' option must be a single character");
        else
          opt->decimal_point_char = arg[0];
       }
@@ -515,7 +515,7 @@ options *process_options(table_input &in)
       opt->flags |= table::EXPERIMENTAL;
     }
     else {
-      error("unrecognised global option `%1'", p);
+      error("unrecognised global option '%1'", p);
       // delete opt;
       // return 0;
     }
@@ -835,7 +835,7 @@ format *process_format(table_input &in, options *opt,
       default:
        if (c == opt->tab_char)
          break;
-       error("unrecognised format `%1'", char(c));
+       error("unrecognised format '%1'", char(c));
        free_input_entry_format_list(list);
        return 0;
       }
@@ -886,7 +886,7 @@ format *process_format(table_input &in, options *opt,
       case 'E':
        c = in.get();
        list->equal = 1;
-       // `e' and `x' are mutually exclusive
+       // 'e' and 'x' are mutually exclusive
        list->expand = 0;
        break;
       case 'f':
@@ -902,7 +902,7 @@ format *process_format(table_input &in, options *opt,
          for (;;) {
            c = in.get();
            if (c == EOF || c == ' ' || c == '\t') {
-             error("missing `)'");
+             error("missing ')'");
              break;
            }
            if (c == ')') {
@@ -941,7 +941,7 @@ format *process_format(table_input &in, options *opt,
          for (;;) {
            c = in.get();
            if (c == EOF || c == ' ' || c == '\t') {
-             error("missing `)'");
+             error("missing ')'");
              break;
            }
            if (c == ')') {
@@ -972,7 +972,7 @@ format *process_format(table_input &in, options *opt,
          c = in.get();
        }
        if (c == EOF || !csdigit(c)) {
-         error("`p' modifier must be followed by number");
+         error("'p' modifier must be followed by number");
          list->point_size.inc = 0;
        }
        else {
@@ -1009,7 +1009,7 @@ format *process_format(table_input &in, options *opt,
          c = in.get();
        }
        if (c == EOF || !csdigit(c)) {
-         error("`v' modifier must be followed by number");
+         error("'v' modifier must be followed by number");
          list->vertical_spacing.inc = 0;
        }
        else {
@@ -1036,7 +1036,7 @@ format *process_format(table_input &in, options *opt,
          c = in.get();
          while (c != ')') {
            if (c == EOF || c == '\n') {
-             error("missing `)'");
+             error("missing ')'");
              free_input_entry_format_list(list);
              return 0;
            }
@@ -1053,7 +1053,7 @@ format *process_format(table_input &in, options *opt,
          else
            list->width = "";
          if (c == EOF || !csdigit(c))
-           error("bad argument for `w' modifier");
+           error("bad argument for 'w' modifier");
          else {
            do {
              list->width += char(c);
@@ -1061,16 +1061,16 @@ format *process_format(table_input &in, options *opt,
            } while (c != EOF && csdigit(c));
          }
        }
-       // `w' and `x' are mutually exclusive
+       // 'w' and 'x' are mutually exclusive
        list->expand = 0;
        break;
       case 'x':
       case 'X':
        c = in.get();
        list->expand = 1;
-       // `x' and `e' are mutually exclusive
+       // 'x' and 'e' are mutually exclusive
        list->equal = 0;
-       // `x' and `w' are mutually exclusive
+       // 'x' and 'w' are mutually exclusive
        list->width = "";
        break;
       case 'z':
@@ -1108,7 +1108,7 @@ format *process_format(table_input &in, options *opt,
       c = in.get();
     } while (c == ' ' || c == '\t');
     if (c != '\n') {
-      error("`.' not last character on line");
+      error("'.' not last character on line");
       free_input_entry_format_list(list);
       return 0;
     }
@@ -1225,7 +1225,7 @@ format *process_format(table_input &in, options *opt,
     return 0;
   }
   if (have_expand && (opt->flags & table::EXPAND)) {
-    error("ignoring global `expand' option because of `x' specifiers");
+    error("ignoring global 'expand' option because of 'x' specifiers");
     opt->flags &= ~table::EXPAND;
   }
   return f;
@@ -1435,7 +1435,7 @@ table *process_data(table_input &in, format *f, options *opt)
                  if (c == '\n')
                    in.unget(c);
                  input_entry += '\0';
-                 error("excess data entry `%1' discarded",
+                 error("excess data entry '%1' discarded",
                        input_entry.contents());
                  if (c == '\n')
                    (void)in.get();
@@ -1612,10 +1612,13 @@ int main(int argc, char **argv)
        errno = 0;
        FILE *fp = fopen(argv[i], "r");
        if (fp == 0)
-         fatal("can't open `%1': %2", argv[i], strerror(errno));
+         fatal("can't open '%1': %2", argv[i], strerror(errno));
        else {
          current_lineno = 1;
-         current_filename = argv[i];
+         string fn(argv[i]);
+         fn += '\0';
+         normalize_for_lf(fn);
+         current_filename = fn.contents();
          printf(".lf 1 %s\n", current_filename);
          process_input_file(fp);
        }
index f43fe7dd9ec23f90a4e9f111bc388991d50aa2da..ce067bed9c1d83f9f9ad36abb1863c924cff0ef4 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "table.h"
 
@@ -458,7 +458,7 @@ text_entry::text_entry(const table *p, const entry_modifier *m, char *s)
 
 text_entry::~text_entry()
 {
-  a_delete contents;
+  free(contents);
 }
 
 repeated_char_entry::repeated_char_entry(const table *p,
@@ -505,7 +505,7 @@ void left_text_entry::simple_print(int)
   print_contents();
 }
 
-// The only point of this is to make `\a' ``work'' as in Unix tbl.  Grrr.
+// The only point of this is to make '\a' "work" as in Unix tbl.  Grrr.
 
 void left_text_entry::add_tab()
 {
@@ -621,7 +621,7 @@ void alphabetic_text_entry::simple_print(int)
   print_contents();
 }
 
-// The only point of this is to make `\a' ``work'' as in Unix tbl.  Grrr.
+// The only point of this is to make '\a' "work" as in Unix tbl.  Grrr.
 
 void alphabetic_text_entry::add_tab()
 {
@@ -1030,7 +1030,7 @@ void restore_inline_modifier(const entry_modifier *m)
 
 struct stuff {
   stuff *next;
-  int row;                     // occurs before row `row'
+  int row;                     // occurs before row 'row'
   char printed;                        // has it been printed?
 
   stuff(int);
@@ -1609,13 +1609,13 @@ void table::add_entry(int r, int c, const string &str, const entry_format *f,
     case FORMAT_HLINE:
       if (str.length() != 0)
        error_with_file_and_line(fn, ln,
-                                "non-empty data entry for `_' format ignored");
+                                "non-empty data entry for '_' format ignored");
       e = new single_line_entry(this, f);
       break;
     case FORMAT_DOUBLE_HLINE:
       if (str.length() != 0)
        error_with_file_and_line(fn, ln,
-                                "non-empty data entry for `=' format ignored");
+                                "non-empty data entry for '=' format ignored");
       e = new double_line_entry(this, f);
       break;
     default:
@@ -2132,7 +2132,7 @@ void table::compute_expand_width()
           "delim off\n"
           ".EN\n"
           "..\n");
-    prints(".tm1 \"warning: file `\\n[.F]', around line \\n[.c]:\n"
+    prints(".tm1 \"warning: file '\\n[.F]', around line \\n[.c]:\n"
           ".tm1 \"  table wider than line width\n");
     prints(".ig\n"
           ".EQ\n"
@@ -2184,7 +2184,7 @@ void table::compute_separation_factor()
           "delim off\n"
           ".EN\n"
           "..\n");
-    prints(".tm1 \"warning: file `\\n[.F]', around line \\n[.c]:\n"
+    prints(".tm1 \"warning: file '\\n[.F]', around line \\n[.c]:\n"
           ".tm1 \"  column separation set to zero\n"
           ".nr " SEPARATION_FACTOR_REG " 0\n");
   }
@@ -2192,7 +2192,7 @@ void table::compute_separation_factor()
         ".el .if \\n[" SEPARATION_FACTOR_REG "]<1n \\{\\\n");
   entry_list->set_location();
   if (!(flags & NOWARN)) {
-    prints(".tm1 \"warning: file `\\n[.F]', around line \\n[.c]:\n"
+    prints(".tm1 \"warning: file '\\n[.F]', around line \\n[.c]:\n"
           ".tm1 \"  table squeezed horizontally to fit line length\n");
     prints(".ig\n"
           ".EQ\n"
@@ -2966,7 +2966,10 @@ void set_troff_location(const char *fn, int ln)
       && strcmp(fn, last_filename) == 0)
     printfs(".lf %1\n", as_string(ln));
   else {
-    printfs(".lf %1 %2\n", as_string(ln), fn);
+    string filename(fn);
+    filename += '\0';
+    normalize_for_lf(filename);
+    printfs(".lf %1 %2\n", as_string(ln), filename.contents());
     last_filename = fn;
     location_force_filename = 0;
   }
index 5892867d84fd8503b2fd59443308fc336e53bedd..3e8d9cb80a03b1824d3fa1db23d8180094e23753 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -29,6 +29,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 #include "stringclass.h"
 #include "errarg.h"
 #include "error.h"
+#include "lf.h"
 
 // PREFIX and PREFIX_CHAR must be the same.
 #define PREFIX "3"
diff --git a/src/preproc/tbl/tbl.1.man b/src/preproc/tbl/tbl.1.man
new file mode 100644 (file)
index 0000000..a57171c
--- /dev/null
@@ -0,0 +1,1233 @@
+'\" t
+.TH @G@TBL @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@tbl \- format tables for troff
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr tbl_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" Bernd Warken <groff-bernd.warken-72@web.de> added simple examples.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY @g@tbl
+.OP \-Cv
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This manual page describes the GNU version of
+.BR tbl ,
+which is part of the groff document formatting system.
+.
+.B tbl
+compiles descriptions of tables embedded within
+.B troff
+input files into commands that are understood by
+.BR troff .
+.
+Normally, it should be invoked using the
+.B \-t
+option of
+.B groff.
+.
+It is highly compatible with Unix
+.BR tbl .
+.
+The output generated by GNU
+.B tbl
+cannot be processed with Unix
+.BR troff ;
+it must be processed with GNU
+.BR troff .
+.
+If no files are given on the command line or a filename of
+.B \-
+is given, the standard input is read.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.TP
+.B \-C
+Enable compatibility mode to
+recognize
+.B .TS
+and
+.B .TE
+even when followed by a character other than space or newline.
+.
+Leader characters (\[rs]a) are handled as interpreted.
+.
+.TP
+.B \-v
+Print the version number.
+.
+.
+.\" ====================================================================
+.SH "LANGUAGE OVERVIEW"
+.\" ====================================================================
+.
+.B tbl
+expects to find table descriptions wrapped in the
+.B .TS
+(table start) and
+.B .TE
+(table end) macros.
+.
+Within each such table sections, another table can be defined by
+using the request
+.B .T&
+before the final command
+.BR .TE .
+.
+Each table definition has the following structure:
+.
+.TP
+.I Global options
+This is optional.
+.
+This table part can use several of these options distributed in 1 or
+more lines.
+.
+The
+.I global option part
+must always be finished by a
+.B "semi-colon ;" .
+.
+.TP
+.I Table format specification
+.
+This part must be given, it is not optional.
+.
+It determines the number of columns (cells) of the table.
+.
+Moreover each cell is classified by being central, left adjusted, or
+numerical, etc.
+.
+This specification can have several lines, but must be finished by a
+.B dot .
+at the end of the last line.
+.
+After each cell definition,
+.I column specifiers
+can be appended, but that's optional.
+.
+.
+.P
+Cells are separated by a tab character by default.
+.
+That can be changed by the
+.I global option
+.BI tab( c )\c
+,
+where
+.I c
+is an arbitrary character.
+.
+.
+.\" ====================================================================
+.SH "SIMPLE EXAMPLES"
+.\" ====================================================================
+.
+The easiest table definition is.
+.RS
+.EX
+\&.TS
+c c c .
+This   is      centered
+Well,  this    also
+\&.TE
+.EE
+.RE
+.
+.
+By using
+.B c c
+.BR c ,
+each cell in the whole table will be centered.
+.
+The separating character is here the default
+.IR tab .
+.
+.
+.P
+The result is
+.RS
+.TS
+c c c .
+This   is      centered
+Well,  this    also
+.TE
+.RE
+.
+.
+.P
+This definition is identical to
+.RS
+.EX
+\&.TS
+tab(@);
+ccc.
+This@is@centered
+Well,@this@also
+\&.TE
+.EE
+.RE
+.
+Here, the separating tab character is changed to the letter
+.BR @ .
+.
+.
+.P
+Moreover a title can be added and the centering directions can be
+changed to many other formats:
+.RS
+.EX
+\&.TS
+tab(@);
+c s s
+l c n .
+Title
+left@centers@123
+another@number@75
+\&.TE
+.EE
+.RE
+.
+The result is
+.RS
+.TS
+tab(@);
+c s s
+l c n .
+Title
+left@centers@123
+another@number@75
+.TE
+.RE
+.
+Here
+.B l
+means
+.IR left\-justified ,
+and
+.B n
+means
+.IR numerical ,
+which is here
+.IR right\-justified .
+.
+.
+.\" ====================================================================
+.SH USAGE
+.
+.\" ====================================================================
+.SS Global options
+.\" ====================================================================
+.
+The line immediately following the
+.B .TS
+macro may contain any of the following global options (ignoring the
+case of characters \[en] Unix tbl only accepts options with all
+characters lowercase or all characters uppercase), separated by
+spaces, tabs, or commas:
+.
+.TP
+.B allbox
+Enclose each item of the table in a box.
+.
+.TP
+.B box
+Enclose the table in a box.
+.
+.TP
+.B center
+Center the table (default is left-justified).
+.
+The alternative keyword name
+.B centre
+is also recognized (this is a GNU tbl extension).
+.
+.TP
+.BI decimalpoint( c )
+Set the character to be recognized as the decimal point in numeric
+columns (GNU tbl only).
+.
+.TP
+.BI delim( xy )
+Use
+.I x
+and\~\c
+.I y
+as start and end delimiters for
+.BR @g@eqn (@MAN1EXT@).
+.
+.TP
+.B doublebox
+Enclose the table in a double box.
+.
+.TP
+.B doubleframe
+Same as doublebox (GNU tbl only).
+.
+.TP
+.B expand
+Make the table as wide as the current line length (providing a column
+separation factor).
+.
+Ignored if one or more \[oq]x\[cq] column specifiers are used (see
+below).
+.
+.IP
+In case the sum of the column widths is larger than the current line length,
+the column separation factor is set to zero; such tables extend into the
+right margin, and there is no column separation at all.
+.
+.TP
+.B frame
+Same as box (GNU tbl only).
+.
+.TP
+.BI linesize( n )
+Set lines or rules (e.g.\& from
+.BR box )
+in
+.IR n -point
+type.
+.
+.TP
+.B nokeep
+Don't use diversions to prevent page breaks (GNU tbl only).
+.
+Normally
+.B tbl
+attempts to prevent undesirable breaks in boxed tables by using diversions.
+.
+This can sometimes interact badly with macro packages' own use of
+diversions\[em]when footnotes, for example, are used.
+.
+.TP
+.B nospaces
+Ignore leading and trailing spaces in data items (GNU tbl only).
+.
+.TP
+.B nowarn
+Turn off warnings related to tables exceeding the current line width
+(GNU tbl only).
+.
+.TP
+.BI tab( x )
+Use the character
+.I x
+instead of a tab to separate items in a line of input data.
+.
+.
+.LP
+The global options must end with a semicolon.
+.
+There might be whitespace between an option and its argument in
+parentheses.
+.
+.
+.\" ====================================================================
+.SS Table format specification
+.\" ====================================================================
+.
+After global options come lines describing the format of each line of
+the table.
+.
+Each such format line describes one line of the table itself, except
+that the last format line (which you must end with a period) describes
+all remaining lines of the table.
+.
+A single-key character describes each column of each line of the table.
+Key characters can be separated by spaces or tabs.
+.
+You may run format specifications for multiple lines together on the
+same line by separating them with commas.
+.
+.
+.LP
+You may follow each key character with specifiers that determine the
+font and point size of the corresponding item, that determine column
+width, inter-column spacing, etc.
+.
+.
+.LP
+The longest format line defines the number of columns in the table;
+missing format descriptors at the end of format lines are assumed to
+be\~\c
+.BR L .
+.
+Extra columns in the data (which have no corresponding format entry)
+are ignored.
+.
+.
+.LP
+The available key characters are:
+.
+.TP
+.BR a , A
+Center longest line in this column and then left-justifies all other
+lines in this column with respect to that centered line.
+.
+The idea is to use such alphabetic subcolumns (hence the name of the
+key character) in combination with\~
+.BR L ;
+they are called subcolumns because
+.BR A \~items
+are indented by\~1n relative to
+.BR L \~entries.
+.
+Example:
+.RS
+.IP
+.EX
+\&.TS
+\&tab(;);
+\&ln,an.
+\&item one;1
+\&subitem two;2
+\&subitem three;3
+\&.T&
+\&ln,an.
+\&item eleven;11
+\&subitem twentytwo;22
+\&subitem thirtythree;33
+\&.TE
+.EE
+.RE
+.
+.IP
+Result:
+.
+.RS
+.IP
+.TS
+tab(;);
+ln,an.
+item one;1
+subitem two;2
+subitem three;3
+.T&
+ln,an.
+item eleven;11
+subitem twentytwo;22
+subitem thirtythree;33
+.TE
+.RE
+.
+.TP
+.BR c , C
+Center item within the column.
+.
+.TP
+.BR l , L
+Left-justify item within the column.
+.
+.TP
+.BR n , N
+Numerically justify item in the column: Units positions of numbers are
+aligned vertically.
+.
+If there is one or more dots adjacent to a digit, use the rightmost one for
+vertical alignment.
+.
+If there is no dot, use the rightmost digit for vertical alignment;
+otherwise, center the item within the column.
+.
+Alignment can be forced to a certain position using \[oq]\[rs]&\[cq];
+if there is one or more instances of this special (non-printing)
+character present within the data, use the leftmost one for alignment.
+.
+Example:
+.RS
+.IP
+.EX
+\&.TS
+\&n.
+\&1
+\&1.5
+\&1.5.3
+\&abcde
+\&a\[rs]&bcde
+\&.TE
+.EE
+.RE
+.
+.IP
+Result:
+.
+.RS
+.IP
+.TS
+n.
+1
+1.5
+1.5.3
+abcde
+a\&bcde
+.TE
+.RE
+.
+.IP
+If numerical entries are combined with
+.B L
+or
+.BR R \~entries
+\[en] this can happen if the table format is changed with
+.B .T&
+\%\[en]
+center the widest
+.I number
+(of the data entered under the
+.BR N \~specifier
+regime) relative to the widest
+.B L
+or
+.BR R \~entry,
+preserving the alignment of all numerical entries.
+.
+Contrary to
+.BR A \~type
+entries, there is no extra indentation.
+.
+.IP
+Using equations (to be processed with
+.BR eqn )
+within columns which use the
+.BR N \~specifier
+is problematic in most cases due to
+.BR tbl 's
+algorithm for finding the vertical alignment, as described above.
+.
+Using the global
+.B delim
+option, however, it is possible to make
+.B tbl
+ignore the data within
+.B eqn
+delimiters for that purpose.
+.
+.
+.TP
+.BR r , R
+Right-justify item within the column.
+.
+.TP
+.BR s , S
+Span previous item on the left into this column.
+.
+Not allowed for the first column.
+.
+.TP
+.B ^
+Span down entry from previous row in this column.
+.
+Not allowed for the first row.
+.
+.TP
+.BR _ , -
+Replace this entry with a horizontal line.
+.
+Note that \[oq]_\[cq] and \[oq]-\[cq] can be used for table fields only,
+not for column separator lines.
+.
+.TP
+.B =
+.
+Replace this entry with a double horizontal line.
+.
+Note that \[oq]=\[cq] can be used for table fields only,
+not for column separator lines.
+.
+.TP
+.B |
+The corresponding column becomes a vertical rule (if two of these are
+adjacent, a double vertical rule).
+.
+.
+.LP
+A vertical bar to the left of the first key letter or to the right of
+the last one produces a line at the edge of the table.
+.
+.
+.LP
+To change the data format within a table, use the
+.B .T&
+command (at the start of a line).
+.
+It is followed by format and data lines (but no global options)
+similar to the
+.B .TS
+request.
+.
+.
+.\" ====================================================================
+.SS Column specifiers
+.\" ====================================================================
+.
+Here are the specifiers that can appear in suffixes to column key
+letters (in any order):
+.
+.TP
+.BR b , B
+Short form of
+.B fB
+(make affected entries bold).
+.
+.TP
+.BR d , D
+Start an item that vertically spans rows,
+using the \[oq]^\[cq] column specifier or \[oq]\[rs]^\[cq] data item,
+at the bottom of its range rather
+than vertically centering it (GNU tbl only).
+.
+Example:
+.RS
+.IP
+.EX
+\&.TS
+\&tab(;) allbox;
+\&l l
+\&l ld
+\&r ^
+\&l rd.
+\&0000;foobar
+\&T{
+\&1111
+\&.br
+\&2222
+\&T};foo
+\&r;
+\&T{
+\&3333
+\&.br
+\&4444
+\&T};bar
+\&\[rs]^;\[rs]^
+\&.TE
+.EE
+.RE
+.
+.IP
+Result:
+.
+.RS
+.IP
+.TS
+tab(;) allbox;
+l l
+l ld
+r ^
+l rd.
+0000;foobar
+T{
+1111
+.br
+2222
+T};foo
+r;
+T{
+3333
+.br
+4444
+T};bar
+\^;\^
+.TE
+.RE
+.
+.TP
+.BR e , E
+Make equally-spaced columns.
+.
+All columns marked with this specifier get the same width; this happens
+after the affected column widths have been computed (this means that the
+largest width value rules).
+.
+.TP
+.BR f , F
+Either of these specifiers may be followed by a font name (either one or two
+characters long), font number (a single digit), or long name in parentheses
+(the last form is a GNU tbl extension).
+.
+A one-letter font name must be separated by one or more blanks from whatever
+follows.
+.
+.TP
+.BR i , I
+Short form of
+.B fI
+(make affected entries italic).
+.
+.TP
+.BR m , M
+This is a GNU tbl extension.
+.
+Either of these specifiers may be followed by a macro name
+(either one or two characters long),
+or long name in parentheses.
+.
+A one-letter macro name must be separated by one or more blanks from
+whatever follows.
+.
+The macro which name can be specified here must be defined before
+creating the table.
+.
+It is called just before the table's cell text is output.
+.
+As implemented currently, this macro is only called if block input is
+used, that is, text between \[oq]T{\[cq] and \[oq]T}\[cq].
+.
+The macro should contain only simple
+.B troff
+requests to change the text block formatting, like text adjustment,
+hyphenation, size, or font.
+.
+The macro is called
+.I after
+other cell modifications like
+.BR b ,
+.B f
+or
+.B v
+are output.
+.
+Thus the macro can overwrite other modification specifiers.
+.
+.TP
+.BR p , P
+Followed by a number, this does a point size change for the affected fields.
+.
+If signed, the current point size is incremented or decremented (using
+a signed number instead of a signed digit is a GNU tbl extension).
+.
+A point size specifier followed by a column separation number must be
+separated by one or more blanks.
+.
+.TP
+.BR t , T
+Start an item vertically spanning rows at the top of its range rather than
+vertically centering it.
+.
+.TP
+.BR u , U
+Move the corresponding column up one half-line.
+.
+.TP
+.BR v , V
+Followed by a number, this indicates the vertical line spacing to be
+used in a multi-line table entry.
+.
+If signed, the current vertical line spacing is incremented or
+decremented (using a signed number instead of a signed digit is a GNU
+tbl extension).
+.
+A vertical line spacing specifier followed by a column separation
+number must be separated by one or more blanks.
+.
+No effect if the corresponding table entry isn't a text block.
+.
+.TP
+.BR w , W
+Minimum column width value.
+Must be followed either by a
+.BR @g@troff (@MAN1EXT@)
+width expression in parentheses or a unitless integer.
+.
+If no unit is given, en units are used.
+.
+Also used as the default line length for included text blocks.
+.
+If used multiple times to specify the width for a particular column,
+the last entry takes effect.
+.
+.TP
+.BR x , X
+An expanded column.
+.
+After computing all column widths without an
+.BR x \~specifier,
+use the remaining line width for this column.
+.
+If there is more than one expanded column, distribute the remaining
+horizontal space evenly among the affected columns (this is a GNU
+extension).
+.
+This feature has the same effect as specifying a minimum column width.
+.
+.TP
+.BR z , Z
+Ignore the corresponding column for width-calculation purposes, this
+is, don't use the fields but only the specifiers of this column to
+compute its width.
+.
+.
+.LP
+A number suffix on a key character is interpreted as a column
+separation in en units (multiplied in proportion if the
+.B expand
+option is on \[en] in case of overfull tables this might be zero).
+.
+Default separation is 3n.
+.
+.
+.LP
+The column
+.RB specifier\~ x
+is mutually exclusive with
+.B e
+.RB and\~ w
+(but
+.B e
+is not mutually exclusive
+.RB with\~ w );
+if specified multiple times for a particular column, the last entry takes
+effect:
+.BR x \~unsets
+both
+.B e
+.RB and\~ w ,
+while either
+.B e
+or
+.B w
+.RB overrides\~ x .
+.
+.
+.\" ====================================================================
+.SS Table data
+.\" ====================================================================
+.
+The format lines are followed by lines containing the actual data for the
+table, followed finally by
+.BR .TE .
+.
+Within such data lines, items are normally separated by tab characters
+(or the character specified with the
+.B tab
+option).
+.
+Long input lines can be broken across multiple lines if the last
+character on the line is \[oq]\[rs]\[cq] (which vanishes after
+concatenation).
+.
+.
+.LP
+Note that
+.B @g@tbl
+computes the column widths line by line, applying \[rs]w on each entry
+which isn't a text block.
+.
+As a consequence, constructions like
+.IP
+.EX
+\&.TS
+\&c,l.
+\&\[rs]s[20]MM
+\&MMMM
+\&.TE
+.EE
+.
+.LP
+fail; you must either say
+.IP
+.EX
+\&.TS
+\&cp20,lp20.
+\&MM
+\&MMMM
+\&.TE
+.EE
+.
+.LP
+or
+.
+.IP
+.EX
+\&.TS
+\&c,l.
+\&\[rs]s[20]MM
+\&\[rs]s[20]MMMM
+\&.TE
+.EE
+.
+.
+.LP
+A dot starting a line, followed by anything but a digit is handled as
+a troff command, passed through without changes.
+.
+The table position is unchanged in this case.
+.
+.
+.LP
+If a data line consists of only \[oq]_\[cq] or \[oq]=\[cq], a single
+or double line, respectively, is drawn across the table at that point;
+if a single item in a data line consists of only \[oq]_\[cq] or
+\[oq]=\[cq], then that item is replaced by a single or double line,
+joining its neighbours.
+.
+If a data item consists only of \[oq]\[rs]_\[cq] or \[oq]\[rs]=\[cq],
+a single or double line, respectively, is drawn across the field at
+that point which does not join its neighbours.
+.
+.
+.LP
+A data item consisting only of \[oq]\[rs]Rx\[cq] (\[oq]x\[cq] any
+character) is replaced by repetitions of character \[oq]x\[cq] as wide
+as the column (not joining its neighbours).
+.
+.
+.LP
+A data item consisting only of \[oq]\[rs]^\[cq] indicates that the
+field immediately above spans downward over this row.
+.
+.
+.\" ====================================================================
+.SS Text blocks
+.\" ====================================================================
+.
+A text block can be used to enter data as a single entry which would
+be too long as a simple string between tabs.
+.
+It is started with \[oq]T{\[cq] and closed with \[oq]T}\[cq].
+.
+The former must end a line, and the latter must start a line, probably
+followed by other data columns (separated with tabs or the character
+given with the
+.B tab
+global option).
+.
+.
+.LP
+By default, the text block is formatted with the settings which were
+active before entering the table, possibly overridden by the
+.BR m ,
+.BR v ,
+and
+.B w
+tbl specifiers.
+.
+For example, to make all text blocks ragged-right, insert
+.B .na
+right before the starting
+.B .TS
+(and
+.B .ad
+after the table).
+.
+.
+.LP
+If either \[oq]w\[cq] or \[oq]x\[cq] specifiers are not given for
+.I all
+columns of a text block span, the default length of the text block (to
+be more precise, the line length used to process the text block
+diversion) is computed as L\[tmu]C/(N+1), where \[oq]L\[cq] is the
+current line length, \[oq]C\[cq] the number of columns spanned by the
+text block, and \[oq]N\[cq] the total number of columns in the table.
+.
+Note, however, that the actual diversion width as returned in register
+.B \[rs]n[dl]
+is used eventually as the text block width.
+.
+If necessary, you can also control the text block width with a direct
+insertion of a
+.B .ll
+request right after \[oq]T{\[cq].
+.
+.
+.\" ====================================================================
+.SS Miscellaneous
+.\" ====================================================================
+.
+The number register
+.B \[rs]n[TW]
+holds the table width; it can't be used within the table itself
+but is defined right before calling
+.B .TE
+so that this macro can make use of it.
+.
+.
+.LP
+.B tbl
+also defines a macro
+.B .T#
+which produces the bottom and side lines of a boxed table.
+.
+While
+.B tbl
+does call this macro itself at the end of the table, it can be used by
+macro packages to create boxes for multi-page tables by calling it within the
+page footer.
+.
+An example of this is shown by the
+.B \-ms
+macros which provide this functionality if a table starts with
+.B .TS\ H
+instead of the standard call to the
+.B .TS
+macro.
+.
+.
+.\" ====================================================================
+.SH "INTERACTION WITH @G@EQN"
+.\" ====================================================================
+.
+.BR @g@tbl (@MAN1EXT@)
+should always be called before
+.BR @g@eqn (@MAN1EXT@)
+.RB ( groff (@MAN1EXT@)
+automatically takes care of the correct order of preprocessors).
+.
+.
+.\" ====================================================================
+.SH "GNU TBL ENHANCEMENTS"
+.\" ====================================================================
+.
+There is no limit on the number of columns in a table, nor any limit on the
+number of text blocks.
+.
+All the lines of a table are considered in deciding column widths, not just
+the first 200.
+.
+Table continuation
+.RB ( .T& )
+lines are not restricted to the first 200 lines.
+.
+.
+.LP
+Numeric and alphabetic items may appear in the same column.
+.
+.
+.LP
+Numeric and alphabetic items may span horizontally.
+.
+.
+.LP
+.B @g@tbl
+uses register, string, macro and diversion names beginning with the digit\~\c
+.BR 3 .
+.
+When using
+.B @g@tbl
+you should avoid using any names beginning with a\~\c
+.BR 3 .
+.
+.
+.\" ====================================================================
+.SH "GNU TBL WITHIN MACROS"
+.\" ====================================================================
+.
+Since
+.B @g@tbl
+defines its own macros (right before each table) it is necessary to use
+an \[oq]end-of-macro\[cq] macro.
+.
+Additionally, the escape character has to be switched off.
+.
+Here an example.
+.IP
+.EX
+\&.eo
+\&.de ATABLE ..
+\&.TS
+\&allbox tab(;);
+\&cl.
+\&\[rs]$1;\[rs]$2
+\&.TE
+\&...
+\&.ec
+\&.ATABLE A table
+\&.ATABLE Another table
+\&.ATABLE And \[dq]another one\[dq]
+.EE
+.
+.
+.LP
+Note, however, that not all features of
+.B @g@tbl
+can be wrapped into a macro because
+.B @g@tbl
+sees the input earlier than
+.BR @g@troff .
+.
+For example, number formatting with vertically aligned decimal points
+fails if those numbers are passed on as macro parameters because
+decimal point alignment is handled by
+.B @g@tbl
+itself: It only sees \[oq]\[rs]$1\[cq], \[oq]\[rs]$2\[cq], etc., and
+therefore can't recognize the decimal point.
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+.
+You should use
+.BR .TS\ H / .TH
+in conjunction with a supporting macro package for
+.I all
+multi-page boxed tables.
+.
+If there is no header that you wish to appear at the top of each page
+of the table, place the
+.B .TH
+line immediately after the format section.
+.
+Do not enclose a multi-page table within keep/release macros,
+or divert it in any other way.
+.
+.
+.LP
+A text block within a table must be able to fit on one page.
+.
+.
+.LP
+The
+.B bp
+request cannot be used to force a page-break in a multi-page table.
+.
+Instead, define
+.B BP
+as follows
+.
+.IP
+.EX
+\&.de BP
+\&.  ie '\[rs]\[rs]n(.z'' .bp \[rs]\[rs]$1
+\&.  el \[rs]!.BP \[rs]\[rs]$1
+\&..
+.EE
+.
+.
+.LP
+and use
+.B BP
+instead of
+.BR bp .
+.
+.
+.LP
+Using \[rs]a directly in a table to get leaders does not work (except in
+compatibility mode).
+.
+This is correct behaviour: \[rs]a is an
+.B uninterpreted
+leader.
+.
+To get leaders use a real leader, either by using a control A or like
+this:
+.
+.IP
+.EX
+\&.ds a \[rs]a
+\&.TS
+\&tab(;);
+\&lw(1i) l.
+\&A\[rs]*a;B
+\&.TE
+.EE
+.
+.
+.LP
+A leading and/or trailing \[oq]|\[cq] in a format line, such as
+.
+.IP
+.EX
+|l r|.
+.EE
+.
+.
+.LP
+gives output which has a 1n\~space between the resulting
+bordering vertical rule and the content of the adjacent column,
+as in
+.
+.IP
+.EX
+\&.TS
+\&tab(#);
+\&|l r|.
+\&left column#right column
+\&.TE
+.EE
+.
+.
+.LP
+If it is desired to have zero space (so that the rule touches
+the content), this can be achieved by introducing extra \[lq]dummy\[rq]
+columns, with no content and zero separation, before and/or after,
+as in
+.
+.IP
+.EX
+\&.TS
+\&tab(#);
+\&r0|l r0|l.
+\&#left column#right column#
+\&.TE
+.EE
+.
+.
+.LP
+The resulting \[lq]dummy\[rq] columns are invisible and have zero width;
+note that such columns usually don't work with TTY devices.
+.
+.
+.\" ====================================================================
+.SH REFERENCE
+.\" ====================================================================
+Lesk, M.E.: "TBL \[en] A Program to Format Tables".
+For copyright reasons it cannot be included in the groff distribution,
+but copies can be found with a title search on the World Wide Web.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[tbl_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/preproc/tbl/tbl.am b/src/preproc/tbl/tbl.am
new file mode 100644 (file)
index 0000000..f787452
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += tbl
+tbl_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+tbl_SOURCES = \
+  src/preproc/tbl/main.cpp \
+  src/preproc/tbl/table.cpp \
+  src/preproc/tbl/table.h
+PREFIXMAN1 += src/preproc/tbl/tbl.1
+EXTRA_DIST += src/preproc/tbl/tbl.1.man
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/src/preproc/tbl/tbl.man b/src/preproc/tbl/tbl.man
deleted file mode 100644 (file)
index 46b79c4..0000000
+++ /dev/null
@@ -1,1230 +0,0 @@
-'\" t
-.TH @G@TBL @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@tbl \- format tables for troff
-.
-.
-.\" license
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Bernd Warken <groff-bernd.warken-72@web.de> added simple examples.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY @g@tbl
-.OP \-Cv
-.RI [ files\~ .\|.\|.]
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the GNU version of
-.BR tbl ,
-which is part of the groff document formatting system.
-.
-.B tbl
-compiles descriptions of tables embedded within
-.B troff
-input files into commands that are understood by
-.BR troff .
-.
-Normally, it should be invoked using the
-.B \-t
-option of
-.B groff.
-.
-It is highly compatible with Unix
-.BR tbl .
-.
-The output generated by GNU
-.B tbl
-cannot be processed with Unix
-.BR troff ;
-it must be processed with GNU
-.BR troff .
-.
-If no files are given on the command line or a filename of
-.B \-
-is given, the standard input is read.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.B \-C
-Enable compatibility mode to
-recognize
-.B .TS
-and
-.B .TE
-even when followed by a character other than space or newline.
-.
-Leader characters (\[rs]a) are handled as interpreted.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "LANGUAGE OVERVIEW"
-.\" --------------------------------------------------------------------
-.
-.B tbl
-expects to find table descriptions wrapped in the
-.B .TS
-(table start) and
-.B .TE
-(table end) macros.
-.
-Within each such table sections, another table can be defined by
-using the request
-.B .T&
-before the final command
-.BR .TE .
-.
-Each table definition has the following structure:
-.
-.TP
-.I Global options
-This is optional.
-.
-This table part can use several of these options distributed in 1 or
-more lines.
-.
-The
-.I global option part
-must always be finished by a
-.B "semi-colon ;" .
-.
-.TP
-.I Table format specification
-.
-This part must be given, it is not optional.
-.
-It determines the number of columns (cells) of the table.
-.
-Moreover each cell is classified by being central, left adjusted, or
-numerical, etc.
-.
-This specification can have several lines, but must be finished by a
-.B dot .
-at the end of the last line.
-.
-After each cell definition,
-.I column specifiers
-can be appended, but that\[aq]s optional.
-.
-.
-.P
-Cells are separated by a tab character by default.
-.
-That can be changed by the
-.I global option
-.BI tbl( c ) \fR,
-where
-.I c
-is an arbitrary character.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SIMPLE EXAMPLES"
-.\" --------------------------------------------------------------------
-.
-The easiest table definition is.
-.RS
-.EX
-\&.TS
-c c c .
-This   is      centered
-Well,  this    also
-\&.TE
-.EE
-.RE
-.
-.
-By using
-.B c c
-.BR c ,
-each cell in the whole table will be centered.
-.
-The separating character is here the default
-.IR tab .
-.
-.
-.P
-The result is
-.RS
-.EX
-.TS
-c c c .
-This   is      centered
-Well,  this    also
-.TE
-.EE
-.RE
-.
-.
-.P
-This definition is identical to
-.RS
-.EX
-\&.TS
-tab(@);
-ccc.
-This@is@centered
-Well,@this@also
-\&.TE
-.EE
-.RE
-.
-Here, the separating tab character is changed to the letter
-.BR @ .
-.
-.
-.P
-Moreover a title can be added and the centering directions can be
-changed to many other formats:
-.RS
-.EX
-\&.TS
-tab(@);
-c s s
-l c n .
-Title
-left@centers@123
-another@number@75
-\&.TE
-.EE
-.RE
-.
-The result is
-.RS
-.EX
-.TS
-tab(@);
-c s s
-l c n .
-Title
-left@centers@123
-another@number@75
-.TE
-.EE
-.RE
-.
-Here
-.B l
-means
-.IR left\-justified ,
-and
-.B n
-means
-.IR numerical ,
-which is here
-.IR right\-justified .
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.
-.\" --------------------------------------------------------------------
-.SS Global options
-.\" --------------------------------------------------------------------
-.
-The line immediately following the
-.B .TS
-macro may contain any of the following global options (ignoring the
-case of characters \[en] Unix tbl only accepts options with all
-characters lowercase or all characters uppercase), separated by
-spaces, tabs, or commas:
-.
-.TP
-.B allbox
-Enclose each item of the table in a box.
-.
-.TP
-.B box
-Enclose the table in a box.
-.
-.TP
-.B center
-Center the table (default is left-justified).
-.
-The alternative keyword name
-.B centre
-is also recognized (this is a GNU tbl extension).
-.
-.TP
-.BI decimalpoint( c )
-Set the character to be recognized as the decimal point in numeric
-columns (GNU tbl only).
-.
-.TP
-.BI delim( xy )
-Use
-.I x
-and\~\c
-.I y
-as start and end delimiters for
-.BR @g@eqn (@MAN1EXT@).
-.
-.TP
-.B doublebox
-Enclose the table in a double box.
-.
-.TP
-.B doubleframe
-Same as doublebox (GNU tbl only).
-.
-.TP
-.B expand
-Make the table as wide as the current line length (providing a column
-separation factor).
-.
-Ignored if one or more \[oq]x\[cq] column specifiers are used (see
-below).
-.
-.IP
-In case the sum of the column widths is larger than the current line length,
-the column separation factor is set to zero; such tables extend into the
-right margin, and there is no column separation at all.
-.
-.TP
-.B frame
-Same as box (GNU tbl only).
-.
-.TP
-.BI linesize( n )
-Set lines or rules (e.g.\& from
-.BR box )
-in
-.IR n -point
-type.
-.
-.TP
-.B nokeep
-Don\[aq]t use diversions to prevent page breaks (GNU tbl only).
-.
-Normally
-.B tbl
-attempts to prevent undesirable breaks in boxed tables by using diversions.
-.
-This can sometimes interact badly with macro packages own use of
-diversions, when footnotes, for example, are used.
-.
-.TP
-.B nospaces
-Ignore leading and trailing spaces in data items (GNU tbl only).
-.
-.TP
-.B nowarn
-Turn off warnings related to tables exceeding the current line width
-(GNU tbl only).
-.
-.TP
-.BI tab( x )
-Use the character
-.I x
-instead of a tab to separate items in a line of input data.
-.
-.
-.LP
-The global options must end with a semicolon.
-.
-There might be whitespace between an option and its argument in
-parentheses.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Table format specification
-.\" --------------------------------------------------------------------
-.
-After global options come lines describing the format of each line of
-the table.
-.
-Each such format line describes one line of the table itself, except
-that the last format line (which you must end with a period) describes
-all remaining lines of the table.
-.
-A single-key character describes each column of each line of the table.
-Key characters can be separated by spaces or tabs.
-.
-You may run format specifications for multiple lines together on the
-same line by separating them with commas.
-.
-.
-.LP
-You may follow each key character with specifiers that determine the
-font and point size of the corresponding item, that determine column
-width, inter-column spacing, etc.
-.
-.
-.LP
-The longest format line defines the number of columns in the table;
-missing format descriptors at the end of format lines are assumed to
-be\~\c
-.BR L .
-.
-Extra columns in the data (which have no corresponding format entry)
-are ignored.
-.
-.
-.LP
-The available key characters are:
-.
-.TP
-.BR a , A
-Center longest line in this column and then left-justifies all other
-lines in this column with respect to that centered line.
-.
-The idea is to use such alphabetic subcolumns (hence the name of the
-key character) in combination with\~
-.BR L ;
-they are called subcolumns because
-.BR A \~items
-are indented by\~1n relative to
-.BR L \~entries.
-.
-Example:
-.RS
-.IP
-.EX
-\&.TS
-\&tab(;);
-\&ln,an.
-\&item one;1
-\&subitem two;2
-\&subitem three;3
-\&.T&
-\&ln,an.
-\&item eleven;11
-\&subitem twentytwo;22
-\&subitem thirtythree;33
-\&.TE
-.EE
-.RE
-.
-.IP
-Result:
-.
-.RS
-.IP
-.TS
-tab(;);
-ln,an.
-item one;1
-subitem two;2
-subitem three;3
-.T&
-ln,an.
-item eleven;11
-subitem twentytwo;22
-subitem thirtythree;33
-.TE
-.RE
-.
-.TP
-.BR c , C
-Center item within the column.
-.
-.TP
-.BR l , L
-Left-justify item within the column.
-.
-.TP
-.BR n , N
-Numerically justify item in the column: Units positions of numbers are
-aligned vertically.
-.
-If there is one or more dots adjacent to a digit, use the rightmost one for
-vertical alignment.
-.
-If there is no dot, use the rightmost digit for vertical alignment;
-otherwise, center the item within the column.
-.
-Alignment can be forced to a certain position using \[oq]\[rs]&\[cq];
-if there is one or more instances of this special (non-printing)
-character present within the data, use the leftmost one for alignment.
-.
-Example:
-.RS
-.IP
-.EX
-\&.TS
-\&n.
-\&1
-\&1.5
-\&1.5.3
-\&abcde
-\&a\[rs]&bcde
-\&.TE
-.EE
-.RE
-.
-.IP
-Result:
-.
-.RS
-.IP
-.TS
-n.
-1
-1.5
-1.5.3
-abcde
-a\&bcde
-.TE
-.RE
-.
-.IP
-If numerical entries are combined with
-.B L
-or
-.BR R \~entries
-\[en] this can happen if the table format is changed with
-.B .T&
-\%\[en]
-center the widest
-.I number
-(of the data entered under the
-.BR N \~specifier
-regime) relative to the widest
-.B L
-or
-.BR R \~entry,
-preserving the alignment of all numerical entries.
-.
-Contrary to
-.BR A \~type
-entries, there is no extra indentation.
-.
-.IP
-Using equations (to be processed with
-.BR eqn )
-within columns which use the
-.BR N \~specifier
-is problematic in most cases due to
-.BR tbl \[aq]s
-algorithm for finding the vertical alignment, as described above.
-.
-Using the global
-.B delim
-option, however, it is possible to make
-.B tbl
-ignore the data within
-.B eqn
-delimiters for that purpose.
-.
-.
-.TP
-.BR r , R
-Right-justify item within the column.
-.
-.TP
-.BR s , S
-Span previous item on the left into this column.
-.
-Not allowed for the first column.
-.
-.TP
-.B ^
-Span down entry from previous row in this column.
-.
-Not allowed for the first row.
-.
-.TP
-.BR _ , -
-Replace this entry with a horizontal line.
-.
-Note that \[oq]_\[cq] and \[oq]-\[cq] can be used for table fields only,
-not for column separator lines.
-.
-.TP
-.B =
-.
-Replace this entry with a double horizontal line.
-.
-Note that \[oq]=\[cq] can be used for table fields only,
-not for column separator lines.
-.
-.TP
-.B |
-The corresponding column becomes a vertical rule (if two of these are
-adjacent, a double vertical rule).
-.
-.
-.LP
-A vertical bar to the left of the first key letter or to the right of
-the last one produces a line at the edge of the table.
-.
-.
-.LP
-To change the data format within a table, use the
-.B .T&
-command (at the start of a line).
-.
-It is followed by format and data lines (but no global options)
-similar to the
-.B .TS
-request.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Column specifiers
-.\" --------------------------------------------------------------------
-.
-Here are the specifiers that can appear in suffixes to column key
-letters (in any order):
-.
-.TP
-.BR b , B
-Short form of
-.B fB
-(make affected entries bold).
-.
-.TP
-.BR d , D
-Start an item that vertically spans rows,
-using the \[oq]^\[cq] column specifier or \[oq]\[rs]^\[cq] data item,
-at the bottom of its range rather
-than vertically centering it (GNU tbl only).
-.
-Example:
-.RS
-.IP
-.EX
-\&.TS
-\&tab(;) allbox;
-\&l l
-\&l ld
-\&r ^
-\&l rd.
-\&0000;foobar
-\&T{
-\&1111
-\&.br
-\&2222
-\&T};foo
-\&r;
-\&T{
-\&3333
-\&.br
-\&4444
-\&T};bar
-\&\[rs]^;\[rs]^
-\&.TE
-.EE
-.RE
-.
-.IP
-Result:
-.
-.RS
-.IP
-.TS
-tab(;) allbox;
-l l
-l ld
-r ^
-l rd.
-0000;foobar
-T{
-1111
-.br
-2222
-T};foo
-r;
-T{
-3333
-.br
-4444
-T};bar
-\^;\^
-.TE
-.RE
-.
-.TP
-.BR e , E
-Make equally-spaced columns.
-.
-All columns marked with this specifier get the same width; this happens
-after the affected column widths have been computed (this means that the
-largest width value rules).
-.
-.TP
-.BR f , F
-Either of these specifiers may be followed by a font name (either one or two
-characters long), font number (a single digit), or long name in parentheses
-(the last form is a GNU tbl extension).
-.
-A one-letter font name must be separated by one or more blanks from whatever
-follows.
-.
-.TP
-.BR i , I
-Short form of
-.B fI
-(make affected entries italic).
-.
-.TP
-.BR m , M
-This is a GNU tbl extension.
-.
-Either of these specifiers may be followed by a macro name
-(either one or two characters long),
-or long name in parentheses.
-.
-A one-letter macro name must be separated by one or more blanks from
-whatever follows.
-.
-The macro which name can be specified here must be defined before
-creating the table.
-.
-It is called just before the table\[aq]s cell text is output.
-.
-As implemented currently, this macro is only called if block input is
-used, that is, text between \[oq]T{\[cq] and \[oq]T}\[cq].
-.
-The macro should contain only simple
-.B troff
-requests to change the text block formatting, like text adjustment,
-hyphenation, size, or font.
-.
-The macro is called
-.I after
-other cell modifications like
-.BR b ,
-.B f
-or
-.B v
-are output.
-.
-Thus the macro can overwrite other modification specifiers.
-.
-.TP
-.BR p , P
-Followed by a number, this does a point size change for the affected fields.
-.
-If signed, the current point size is incremented or decremented (using
-a signed number instead of a signed digit is a GNU tbl extension).
-.
-A point size specifier followed by a column separation number must be
-separated by one or more blanks.
-.
-.TP
-.BR t , T
-Start an item vertically spanning rows at the top of its range rather than
-vertically centering it.
-.
-.TP
-.BR u , U
-Move the corresponding column up one half-line.
-.
-.TP
-.BR v , V
-Followed by a number, this indicates the vertical line spacing to be
-used in a multi-line table entry.
-.
-If signed, the current vertical line spacing is incremented or
-decremented (using a signed number instead of a signed digit is a GNU
-tbl extension).
-.
-A vertical line spacing specifier followed by a column separation
-number must be separated by one or more blanks.
-.
-No effect if the corresponding table entry isn\[aq]t a text block.
-.
-.TP
-.BR w , W
-Minimum column width value.
-Must be followed either by a
-.BR @g@troff (@MAN1EXT@)
-width expression in parentheses or a unitless integer.
-.
-If no unit is given, en units are used.
-.
-Also used as the default line length for included text blocks.
-.
-If used multiple times to specify the width for a particular column,
-the last entry takes effect.
-.
-.TP
-.BR x , X
-An expanded column.
-.
-After computing all column widths without an
-.BR x \~specifier,
-use the remaining line width for this column.
-.
-If there is more than one expanded column, distribute the remaining
-horizontal space evenly among the affected columns (this is a GNU
-extension).
-.
-This feature has the same effect as specifying a minimum column width.
-.
-.TP
-.BR z , Z
-Ignore the corresponding column for width-calculation purposes, this
-is, don\[aq]t use the fields but only the specifiers of this column to
-compute its width.
-.
-.
-.LP
-A number suffix on a key character is interpreted as a column
-separation in en units (multiplied in proportion if the
-.B expand
-option is on \[en] in case of overfull tables this might be zero).
-.
-Default separation is 3n.
-.
-.
-.LP
-The column
-.RB specifier\~ x
-is mutually exclusive with
-.B e
-.RB and\~ w
-(but
-.B e
-is not mutually exclusive
-.RB with\~ w );
-if specified multiple times for a particular column, the last entry takes
-effect:
-.BR x \~unsets
-both
-.B e
-.RB and\~ w ,
-while either
-.B e
-or
-.B w
-.RB overrides\~ x .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Table data
-.\" --------------------------------------------------------------------
-.
-The format lines are followed by lines containing the actual data for the
-table, followed finally by
-.BR .TE .
-.
-Within such data lines, items are normally separated by tab characters
-(or the character specified with the
-.B tab
-option).
-.
-Long input lines can be broken across multiple lines if the last
-character on the line is \[oq]\[rs]\[cq] (which vanishes after
-concatenation).
-.
-.
-.LP
-Note that
-.B @g@tbl
-computes the column widths line by line, applying \[rs]w on each entry
-which isn\[aq]t a text block.
-.
-As a consequence, constructions like
-.IP
-.EX
-\&.TS
-\&c,l.
-\&\[rs]s[20]MM
-\&MMMM
-\&.TE
-.EE
-.
-.LP
-fail; you must either say
-.IP
-.EX
-\&.TS
-\&cp20,lp20.
-\&MM
-\&MMMM
-\&.TE
-.EE
-.
-.LP
-or
-.
-.IP
-.EX
-\&.TS
-\&c,l.
-\&\[rs]s[20]MM
-\&\[rs]s[20]MMMM
-\&.TE
-.EE
-.
-.
-.LP
-A dot starting a line, followed by anything but a digit is handled as
-a troff command, passed through without changes.
-.
-The table position is unchanged in this case.
-.
-.
-.LP
-If a data line consists of only \[oq]_\[cq] or \[oq]=\[cq], a single
-or double line, respectively, is drawn across the table at that point;
-if a single item in a data line consists of only \[oq]_\[cq] or
-\[oq]=\[cq], then that item is replaced by a single or double line,
-joining its neighbours.
-.
-If a data item consists only of \[oq]\[rs]_\[cq] or \[oq]\[rs]=\[cq],
-a single or double line, respectively, is drawn across the field at
-that point which does not join its neighbours.
-.
-.
-.LP
-A data item consisting only of \[oq]\[rs]Rx\[cq] (\[oq]x\[cq] any
-character) is replaced by repetitions of character \[oq]x\[cq] as wide
-as the column (not joining its neighbours).
-.
-.
-.LP
-A data item consisting only of \[oq]\[rs]^\[cq] indicates that the
-field immediately above spans downward over this row.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Text blocks
-.\" --------------------------------------------------------------------
-.
-A text block can be used to enter data as a single entry which would
-be too long as a simple string between tabs.
-.
-It is started with \[oq]T{\[cq] and closed with \[oq]T}\[cq].
-.
-The former must end a line, and the latter must start a line, probably
-followed by other data columns (separated with tabs or the character
-given with the
-.B tab
-global option).
-.
-.
-.LP
-By default, the text block is formatted with the settings which were
-active before entering the table, possibly overridden by the
-.BR m ,
-.BR v ,
-and
-.B w
-tbl specifiers.
-.
-For example, to make all text blocks ragged-right, insert
-.B .na
-right before the starting
-.B .TS
-(and
-.B .ad
-after the table).
-.
-.
-.LP
-If either \[oq]w\[cq] or \[oq]x[cq] specifiers are not given for
-.I all
-columns of a text block span, the default length of the text block (to
-be more precise, the line length used to process the text block
-diversion) is computed as L\[tmu]C/(N+1), where \[oq]L\[cq] is the
-current line length, \[oq]C\[cq] the number of columns spanned by the
-text block, and \[oq]N\[cq] the total number of columns in the table.
-.
-Note, however, that the actual diversion width as returned in register
-.B \[rs]n[dl]
-is used eventually as the text block width.
-.
-If necessary, you can also control the text block width with a direct
-insertion of a
-.B .ll
-request right after \[oq]T{\[cq].
-.
-.
-.\" --------------------------------------------------------------------
-.SS Miscellaneous
-.\" --------------------------------------------------------------------
-.
-The number register
-.B \[rs]n[TW]
-holds the table width; it can\[aq]t be used within the table itself
-but is defined right before calling
-.B .TE
-so that this macro can make use of it.
-.
-.
-.LP
-.B tbl
-also defines a macro
-.B .T#
-which produces the bottom and side lines of a boxed table.
-.
-While
-.B tbl
-does call this macro itself at the end of the table, it can be used by
-macro packages to create boxes for multi-page tables by calling it within the
-page footer.
-.
-An example of this is shown by the
-.B \-ms
-macros which provide this functionality if a table starts with
-.B .TS\ H
-instead of the standard call to the
-.B .TS
-macro.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "INTERACTION WITH @G@EQN"
-.\" --------------------------------------------------------------------
-.
-.BR @g@tbl (@MAN1EXT@)
-should always be called before
-.BR @g@eqn (@MAN1EXT@)
-.RB ( groff (@MAN1EXT@)
-automatically takes care of the correct order of preprocessors).
-.
-.
-.\" --------------------------------------------------------------------
-.SH "GNU TBL ENHANCEMENTS"
-.\" --------------------------------------------------------------------
-.
-There is no limit on the number of columns in a table, nor any limit on the
-number of text blocks.
-.
-All the lines of a table are considered in deciding column widths, not just
-the first 200.
-.
-Table continuation
-.RB ( .T& )
-lines are not restricted to the first 200 lines.
-.
-.
-.LP
-Numeric and alphabetic items may appear in the same column.
-.
-.
-.LP
-Numeric and alphabetic items may span horizontally.
-.
-.
-.LP
-.B @g@tbl
-uses register, string, macro and diversion names beginning with the digit\~\c
-.BR 3 .
-.
-When using
-.B @g@tbl
-you should avoid using any names beginning with a\~\c
-.BR 3 .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "GNU TBL WITHIN MACROS"
-.\" --------------------------------------------------------------------
-.
-Since
-.B @g@tbl
-defines its own macros (right before each table) it is necessary to use
-an \[oq]end-of-macro\[cq] macro.
-.
-Additionally, the escape character has to be switched off.
-.
-Here an example.
-.IP
-.EX
-\&.eo
-\&.de ATABLE ..
-\&.TS
-\&allbox tab(;);
-\&cl.
-\&\[rs]$1;\[rs]$2
-\&.TE
-\&...
-\&.ec
-\&.ATABLE A table
-\&.ATABLE Another table
-\&.ATABLE And \[dq]another one\[dq]
-.EE
-.
-.
-.LP
-Note, however, that not all features of
-.B @g@tbl
-can be wrapped into a macro because
-.B @g@tbl
-sees the input earlier than
-.BR @g@troff .
-.
-For example, number formatting with vertically aligned decimal points
-fails if those numbers are passed on as macro parameters because
-decimal point alignment is handled by
-.B @g@tbl
-itself: It only sees \[oq]\[rs]$1\[cq], \[oq]\[rs]$2\[cq], etc., and
-therefore can\[aq]t recognize the decimal point.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-You should use
-.BR .TS\ H / .TH
-in conjunction with a supporting macro package for
-.I all
-multi-page boxed tables.
-.
-If there is no header that you wish to appear at the top of each page
-of the table, place the
-.B .TH
-line immediately after the format section.
-.
-Do not enclose a multi-page table within keep/release macros,
-or divert it in any other way.
-.
-.
-.LP
-A text block within a table must be able to fit on one page.
-.
-.
-.LP
-The
-.B bp
-request cannot be used to force a page-break in a multi-page table.
-.
-Instead, define
-.B BP
-as follows
-.
-.IP
-.EX
-\&.de BP
-\&.  ie '\[rs]\[rs]n(.z'' .bp \[rs]\[rs]$1
-\&.  el \[rs]!.BP \[rs]\[rs]$1
-\&..
-.EE
-.
-.
-.LP
-and use
-.B BP
-instead of
-.BR bp .
-.
-.
-.LP
-Using \[rs]a directly in a table to get leaders does not work (except in
-compatibility mode).
-.
-This is correct behaviour: \[rs]a is an
-.B uninterpreted
-leader.
-.
-To get leaders use a real leader, either by using a control A or like
-this:
-.
-.IP
-.EX
-\&.ds a \[rs]a
-\&.TS
-\&tab(;);
-\&lw(1i) l.
-\&A\[rs]*a;B
-\&.TE
-.EE
-.
-.
-.LP
-A leading and/or trailing \[oq]|\[cq] in a format line, such as
-.
-.IP
-.EX
-|l r|.
-.EE
-.
-.
-.LP
-gives output which has a 1n\~space between the resulting
-bordering vertical rule and the content of the adjacent column,
-as in
-.
-.IP
-.EX
-\&.TS
-\&tab(#);
-\&|l r|.
-\&left column#right column
-\&.TE
-.EE
-.
-.
-.LP
-If it is desired to have zero space (so that the rule touches
-the content), this can be achieved by introducing extra \[lq]dummy\[rq]
-columns, with no content and zero separation, before and/or after,
-as in
-.
-.IP
-.EX
-\&.TS
-\&tab(#);
-\&r0|l r0|l.
-\&#left column#right column#
-\&.TE
-.EE
-.
-.
-.LP
-The resulting \[lq]dummy\[rq] columns are invisible and have zero width;
-note that such columns usually don\[aq]t work with TTY devices.
-.
-.
-.\" --------------------------------------------------------------------
-.SH REFERENCE
-.\" --------------------------------------------------------------------
-Lesk, M.E.: "TBL \[en] A Program to Format Tables".
-For copyright reasons it cannot be included in the groff distribution,
-but copies can be found with a title search on the World Wide Web.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/src/roff/groff/Makefile.sub b/src/roff/groff/Makefile.sub
deleted file mode 100644 (file)
index fede9b9..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-# Makefile.sub for `src roff groff'
-
-# File position: <groff-source>/src/roff/groff/Makefile.sub
-
-# Copyright (C) 1993-2014  Free Software Foundation, Inc.
-
-#   Rewritten by Bernd Warken <groff-bernd.warken-72@web.de> and
-#   Werner LEMBERG  <wl@gnu.org>
-
-# `groff' 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 3 of the License, or
-# (at your option) any later version.
-
-# `groff' 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, see <http://www.gnu.org/licenses/>.
-
-########################################################################
-
-PROG=groff$(EXEEXT)
-MAN1=groff.n
-XLIBS=$(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=groff.$(OBJEXT) pipeline.$(OBJEXT)
-CCSRCS=$(srcdir)/groff.cpp
-CSRCS=$(srcdir)/pipeline.c
-HDRS=$(srcdir)/pipeline.h
-
-GROFF_OPTS_OUTPUT=\
-  groff_opts_no_arg.txt \
-  groff_opts_with_arg.txt
-
-MOSTLYCLEANADD=groff_opts.tmp $(GROFF_OPTS_OUTPUT)
-
-RM=rm -f
-
-all: $(srcdir)/groff.cpp groff_opts.tmp $(GROFF_OPTS_OUTPUT)
-
-groff_opts.tmp: $(srcdir)/groff.cpp
-       @$(GREP) -e ':.*:.*:' $? | sed -e 's/[ \t",]//g' > $@
-       @echo -n 'groff options: '
-       @cat $@
-
-groff_opts_no_arg.txt: groff_opts.tmp
-       @sed -e 's/[a-zA-Z]://g' $? > $@
-       @echo -n 'no arg: '
-       @cat $@
-
-groff_opts_with_arg.txt: groff_opts_no_arg.txt
-       @sed "s/[`cat $?`:]//g" groff_opts.tmp > $@
-       @echo -n 'with arg: '
-       @cat $@
-
-install_data: $(GROFF_OPTS_OUTPUT)
-       -test -d $(DESTDIR)$(libprogramdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(libprogramdir)
-       for f in  $(GROFF_OPTS_OUTPUT); do \
-         $(RM) $(DESTDIR)$(libprogramdir)/$$f; \
-         $(INSTALL_SCRIPT) $$f $(DESTDIR)$(libprogramdir); \
-       done
-
-uninstall_sub:
-       -for f in $(GROFF_OPTS_OUTPUT); do \
-         $(RM) $(DESTDIR)$(libprogramdir)/$$f;\
-       done
-# XXX This will be removed by `uninstall_dirs' in `$(top_srcdir)/Makefile.in'
-# XXX (And only from there it is successful on an empty directory)
-#      -d=$(DESTDIR)$(libprogramdir);\
-#        if test -d $$d; then rmdir $$d; fi
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/roff/groff/groff.1.man b/src/roff/groff/groff.1.man
new file mode 100644 (file)
index 0000000..165507e
--- /dev/null
@@ -0,0 +1,2055 @@
+.TH GROFF @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff \- front-end for the groff document formatting system
+.
+.\" groff.man -> groff.1
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_1_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this
+.\" document under the terms of the GNU Free Documentation License,
+.\" Version 1.3 or any later version published by the Free Software
+.\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
+.\" and with no Back-Cover Texts.
+.\"
+.\" A copy of the Free Documentation License is included as a file
+.\" called FDL in the main directory of the groff source package.
+.
+.
+.\" ====================================================================
+.\" Definitions
+.\" ====================================================================
+.
+.\" ====================================================================
+.\" 'char or string'
+.de Quoted
+.  ft CR
+\[oq]\\$*\[cq]
+.  ft
+..
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY groff
+.OP \-abcegijklpstzCEGNRSUVXZ
+.OP \-d cs
+.OP \-D arg
+.OP \-f fam
+.OP \-F dir
+.OP \-I dir
+.OP \-K arg
+.OP \-L arg
+.OP \-m name
+.OP \-M dir
+.OP \-n num
+.OP \-o list
+.OP \-P arg
+.OP \-r cn
+.OP \-T dev
+.OP \-w name
+.OP \-W name
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.SY groff
+.B \-h
+.SY groff
+.B \-\-help
+.YS
+.
+.SY groff
+.B \-v
+.RI [ option
+\&.\|.\|.\&]
+.SY groff
+.B \-\-version
+.RI [ option
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This document describes the
+.B groff
+program, the main front-end for the
+.I groff
+document formatting system.
+.
+The
+.I groff
+program and macro suite is the implementation of a
+.BR roff (@MAN7EXT@)
+system within the free software collection
+.UR http://\:www.gnu.org
+GNU
+.UE .
+.
+The
+.I groff
+system has all features of the classical
+.IR roff ,
+but adds many extensions.
+.
+.
+.P
+The
+.B groff
+program allows control of the whole
+.I groff
+system by command-line options.
+.
+This is a great simplification in comparison to the classical case (which
+uses pipes only).
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+The command line is parsed according to the usual \f[CR]GNU\f[]
+convention.
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+Options can be grouped behind a single \[oq]\-\[cq] (minus character).
+.
+A filename of
+.B \-
+(minus character) denotes the standard input.
+.
+.
+.P
+As
+.B groff
+is a wrapper program for
+.B @g@troff
+both programs share a set of options.
+.
+But the
+.B groff
+program has some additional, native options and gives a new meaning to
+some
+.B @g@troff
+options.
+.
+On the other hand, not all
+.B @g@troff
+options can be fed into
+.BR groff .
+.
+.
+.\" ====================================================================
+.SS Native groff Options
+.\" ====================================================================
+.
+The following options either do not exist for
+.B @g@troff
+or are differently interpreted by
+.BR groff .
+.
+.
+.TP
+.BI \-D\  arg
+Set default input encoding used by
+.B preconv
+to
+.IR arg .
+.
+Implies
+.BR \-k .
+.
+.
+.TP
+.B \-e
+Preprocess with
+.BR @g@eqn .
+.
+.
+.TP
+.B \-g
+Preprocess with
+.BR @g@grn .
+.
+.
+.TP
+.B \-G
+Preprocess with
+.BR grap .
+.
+Implies
+.BR \-p .
+.
+.
+.TP
+.B \-h
+.TQ
+.B \-\-help
+Print a help message.
+.
+.
+.TP
+.BI \-I\  dir
+This option may be used to specify a directory to search for
+files (both those on the command line and those named in
+.B .psbb
+and
+.B .so
+requests, and
+.B \eX'ps: import'
+,
+.B \eX'ps: file'
+and
+.B \eX'pdf: pdfpic'
+escapes).
+.
+The current directory is always searched first.
+.
+This option may be specified more than once;
+the directories are searched in the order specified.
+.
+No directory search is performed for files specified using an absolute path.
+.
+This option implies the
+.B \-s
+option.
+.
+.
+.TP
+.B \-j
+Preprocess with
+.BR @g@chem .
+.
+Implies
+.BR \-p .
+.
+.
+.TP
+.B \-k
+Preprocess with
+.BR preconv .
+.
+This is run before any other preprocessor.
+.
+Please refer to
+.BR preconv 's
+manual page for its behaviour if no
+.B \-K
+(or
+.BR \-D )
+option is specified.
+.
+.
+.TP
+.BI \-K\  arg
+Set input encoding used by
+.B preconv
+to
+.IR arg .
+.
+Implies
+.BR \-k .
+.
+.
+.TP
+.B \-l
+Send the output to a spooler program for printing.
+.
+The command that should be used for this is specified by the
+.B print
+command in the device description file, see
+.BR \%groff_font (@MAN5EXT@).
+.
+If this command is not present, the output is piped into the
+.BR lpr (1)
+program by default.
+.
+See options
+.B \-L
+and
+.BR \-X .
+.
+.
+.TP
+.BI \-L\  arg
+Pass
+.I arg
+to the spooler program.
+.
+Several arguments should be passed with a separate
+\-L
+option each.
+.
+Note that
+.B groff
+does not prepend
+\[oq]\-\[cq]
+(a minus sign) to
+.I arg
+before passing it to the spooler program.
+.
+.
+.TP
+.B \-N
+Don't allow newlines within
+.I eqn
+delimiters.
+.
+This is the same as the
+.B \-N
+option in
+.BR @g@eqn .
+.
+.
+.TP
+.B \-p
+Preprocess with
+.BR @g@pic .
+.
+.
+.TP
+.BI \-P\  \-option
+.TQ
+.BI \-P\  \-option \ \-P\  arg
+Pass
+.I \-option
+or
+.I "\-option\~arg"
+to the postprocessor.
+.
+The option must be specified with the necessary preceding minus
+sign(s)
+.Quoted \-
+or
+.Quoted \-\-
+because
+.B groff
+does not prepend any dashes before passing it to the postprocessor.
+.
+For example, to pass a title to the
+.B \%gxditview
+postprocessor, the shell command
+.
+.RS
+.IP
+.EX
+groff \-X \-P \-title \-P 'groff it' \f[I]foo\f[]
+.EE
+.RE
+.
+.IP
+is equivalent to
+.
+.RS
+.IP
+.EX
+groff \-X \-Z \f[I]foo\f[] | \
+gxditview \-title 'groff it' \-
+.EE
+.RE
+.
+.
+.TP
+.B \-R
+Preprocess with
+.BR @g@refer .
+.
+No mechanism is provided for passing arguments to
+.B @g@refer
+because most
+.B @g@refer
+options have equivalent language elements that can be specified within
+the document.
+.
+See
+.BR \%@g@refer (@MAN1EXT@)
+for more details.
+.
+.
+.TP
+.B \-s
+Preprocess with
+.BR @g@soelim .
+.
+.
+.TP
+.B \-S
+Safer mode.
+.
+Pass the
+.B \-S
+option to
+.B @g@pic
+and disable the following
+.B @g@troff
+requests:
+.BR .open ,
+.BR .opena ,
+.BR .pso ,
+.BR .sy ,
+and
+.BR .pi .
+.
+For security reasons, safer mode is enabled by default.
+.
+.
+.TP
+.B \-t
+Preprocess with
+.BR @g@tbl .
+.
+.
+.TP
+.BI \-T\  dev
+Set output device to
+.IR dev .
+.
+For this device,
+.B @g@troff
+generates the
+.I intermediate
+.IR output ;
+see
+.BR \%groff_out (@MAN5EXT@).
+.
+Then
+.B groff
+calls a postprocessor to convert
+.BR @g@troff 's
+.I intermediate output
+to its final format.
+.
+Real devices in
+.B groff
+are
+.
+.RS
+.RS
+.TP
+dvi
+TeX DVI format (postprocessor is
+.BR grodvi ).
+.
+.TP
+html
+.TQ
+xhtml
+HTML and XHTML output (preprocessors are
+.B @g@soelim
+and
+.BR \%pre-grohtml ,
+postprocessor is
+.BR \%post-grohtml ).
+.
+.TP
+lbp
+Canon CAPSL printers (\%LBP-4 and \%LBP-8 series laser printers;
+postprocessor is
+.BR grolbp ).
+.
+.TP
+lj4
+HP LaserJet4 compatible (or other PCL5 compatible) printers (postprocessor
+is
+.BR grolj4 ).
+.
+.TP
+ps
+PostScript output (postprocessor is
+.BR grops ).
+.
+.TP
+pdf
+Portable Document Format (PDF) output (postprocessor is
+.BR gropdf ).
+.RE
+.RE
+.
+.
+.IP
+For the following TTY output devices (postprocessor is always
+.BR grotty ),
+.B \-T
+selects the output encoding:
+.
+.RS
+.RS
+.TP
+ascii
+7bit \f[CR]ASCII\f[].
+.
+.TP
+cp1047
+\%Latin-1 character set for EBCDIC hosts.
+.
+.TP
+latin1
+ISO \%8859-1.
+.
+.TP
+utf8
+Unicode character set in \%UTF-8 encoding.
+.
+This mode has the most useful fonts for TTY mode, so it is the best
+mode for TTY output.
+.RE
+.RE
+.
+.
+.IP
+The following arguments select
+.B \%gxditview
+as the \[oq]postprocessor\[cq] (it is rather a viewing program):
+.
+.RS
+.RS
+.TP
+X75
+75\|dpi resolution, 10\|pt document base font.
+.TP
+X75\-12
+75\|dpi resolution, 12\|pt document base font.
+.TP
+X100
+100\|dpi resolution, 10\|pt document base font.
+.TP
+X100\-12
+100\|dpi resolution, 12\|pt document base font.
+.RE
+.RE
+.
+.IP
+The default device is
+.BR @DEVICE@ .
+.
+.
+.TP
+.B \-U
+Unsafe mode.
+.
+Reverts to the (old) unsafe behaviour; see option
+.BR \-S .
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Output version information of
+.B groff
+and of all programs that are run by it; that is, the given command line
+is parsed in the usual way, passing
+.B \-v
+to all subprograms.
+.
+.
+.TP
+.B \-V
+Output the pipeline that would be run by
+.B groff
+(as a wrapper program) on the standard output, but do not execute it.
+.
+If given more than once,
+the commands are both printed on the standard error and run.
+.
+.
+.TP
+.B \-X
+Use
+.B \%gxditview
+instead of using the usual postprocessor to (pre)view a document.
+.
+The printing spooler behavior as outlined with options
+.B \-l
+and
+.B \-L
+is carried over to
+.BR \%gxditview (@MAN1EXT@)
+by determining an argument for the
+.B \-printCommand
+option of
+.BR \%gxditview (@MAN1EXT@).
+.
+This sets the default
+.B Print
+action and the corresponding menu entry to that value.
+.
+.B \-X
+only produces good results with
+.BR \-Tps ,
+.BR \-TX75 ,
+.BR \-TX75\-12 ,
+.BR \-TX100 ,
+and
+.BR \-TX100\-12 .
+.
+The default resolution for previewing
+.B \-Tps
+output is 75\|dpi; this can be changed by passing the
+.B \-resolution
+option to
+.BR \%gxditview ,
+for example
+.
+.RS
+.IP
+.EX
+groff \-X \-P\-resolution \-P100 \-man foo.1
+.EE
+.RE
+.
+.
+.TP
+.B \-z
+Suppress output generated by
+.BR @g@troff .
+.
+Only error messages are printed.
+.
+.
+.TP
+.B \-Z
+Do not automatically postprocess
+.I groff intermediate output
+in the usual manner.
+.
+This will cause the
+.B @g@troff
+.I output
+to appear on standard output,
+replacing the usual postprocessor output; see
+.BR \%groff_out (@MAN5EXT@).
+.
+.
+.\" ====================================================================
+.SS Transparent Options
+.\" ====================================================================
+.
+The following options are transparently handed over to the formatter
+program
+.B @g@troff
+that is called by
+.B groff
+subsequently.
+.
+These options are described in more detail in
+.BR @g@troff (@MAN1EXT@).
+.
+.TP
+.B \-a
+\f[CR]ASCII\f[] approximation of output.
+.
+.TP
+.B \-b
+Backtrace on error or warning.
+.
+.TP
+.B \-c
+Disable color output.
+.
+Please consult the
+.BR \%grotty (@MAN1EXT@)
+man page for more details.
+.
+.TP
+.B \-C
+Enable compatibility mode.
+.
+.TP
+.BI \-d\  cs
+.TQ
+.BI \-d\  name = s
+Define string.
+.
+.TP
+.B \-E
+Disable
+.B @g@troff
+error messages.
+.
+.TP
+.BI \-f\  fam
+Set default font family.
+.
+.TP
+.BI \-F\  dir
+Set path for device
+.I DESC
+files.
+.
+.TP
+.B \-i
+Process standard input after the specified input files.
+.
+.TP
+.BI \-m\  name
+Include macro file
+.RI name .tmac
+(or
+.IR tmac. name);
+see also
+.BR \%groff_tmac (@MAN5EXT@).
+.
+.TP
+.BI \-M\  dir
+Path for macro files.
+.
+.TP
+.BI \-n\  num
+Number the first page
+.IR num .
+.
+.TP
+.BI \-o\  list
+Output only pages in
+.IR list .
+.
+.TP
+.BI \-r\  cn
+.TQ
+.BI \-r\  name = n
+Set number register.
+.
+.TP
+.BI \-w\  name
+Enable warning
+.IR name .
+.
+See
+.BR @g@troff (@MAN1EXT@)
+for names.
+.
+.TP
+.BI \-W\  name
+disable warning
+.IR name .
+.
+See
+.BR @g@troff (@MAN1EXT@)
+for names.
+.
+.
+.\" ====================================================================
+.SH "USING GROFF"
+.\" ====================================================================
+.
+The
+.I groff system
+implements the infrastructure of classical roff; see
+.BR roff (@MAN7EXT@)
+for a survey on how a
+.I roff
+system works in general.
+.
+Due to the front-end programs available within the
+.I groff
+system, using
+.I groff
+is much easier than
+.IR "classical roff" .
+.
+This section gives an overview of the parts that constitute the
+.I groff
+system.
+.
+It complements
+.BR roff (@MAN7EXT@)
+with
+.IR groff -specific
+features.
+.
+This section can be regarded as a guide to the documentation around
+the
+.I groff
+system.
+.
+.
+.\" ====================================================================
+.SS Paper Size
+.\" ====================================================================
+.
+The
+.I virtual
+paper size used by
+.B troff
+to format the input is controlled globally with the requests
+.BR .po ,
+.BR .pl ,
+and
+.BR .ll .
+.
+See
+.BR groff_tmac (@MAN5EXT@)
+for the \[oq]papersize\[cq] macro package which provides a convenient
+interface.
+.
+.
+.P
+The
+.I physical
+paper size, giving the actual dimensions of the paper sheets, is
+controlled by output devices like
+.B grops
+with the command-line options
+.B \-p
+and
+.BR \-l .
+.
+See
+.BR groff_font (@MAN5EXT@)
+and the man pages of the output devices for more details.
+.
+.B groff
+uses the command-line option
+.B \-P
+to pass options to output devices; for example, the following selects
+A4 paper in landscape orientation for the PS device:
+.
+.IP
+.EX
+groff \-Tps \-P\-pa4 \-P\-l ...
+.EE
+.
+.
+.\" ====================================================================
+.SS Front-ends
+.\" ====================================================================
+.
+The
+.B groff
+program is a wrapper around the
+.BR @g@troff (@MAN1EXT@)
+program.
+.
+It allows one to specify the preprocessors by command-line options and
+automatically runs the postprocessor that is appropriate for the
+selected device.
+.
+Doing so, the sometimes tedious piping mechanism of classical
+.BR roff (@MAN7EXT@)
+can be avoided.
+.
+.
+.P
+The
+.BR grog (@MAN1EXT@)
+program can be used for guessing the correct
+.I groff
+command line to format a file.
+.
+.
+.P
+The
+.BR \%groffer (@MAN1EXT@)
+program is an all-around viewer for
+.I groff
+files and man pages.
+.
+.
+.\" ====================================================================
+.SS Preprocessors
+.\" ====================================================================
+.
+The
+.I groff
+preprocessors are reimplementations of the classical preprocessors
+with moderate extensions.
+.
+The standard preprocessors distributed with the
+.I groff
+package are
+.
+.TP
+.BR @g@eqn (@MAN1EXT@)
+for mathematical formulae,
+.
+.TP
+.BR @g@grn (@MAN1EXT@)
+for including
+.BR gremlin (1)
+pictures,
+.
+.TP
+.BR @g@pic (@MAN1EXT@)
+for drawing diagrams,
+.
+.TP
+.BR @g@chem (@MAN1EXT@)
+for chemical structure diagrams,
+.
+.TP
+.BR \%@g@refer (@MAN1EXT@)
+for bibliographic references,
+.
+.TP
+.BR \%@g@soelim (@MAN1EXT@)
+for including macro files from standard locations,
+.
+.P
+and
+.
+.TP
+.BR @g@tbl (@MAN1EXT@)
+for tables.
+.
+.P
+A new preprocessor not available in classical
+.I troff
+is
+.BR \%preconv (@MAN1EXT@)
+which converts various input encodings to something
+.B groff
+can understand.
+.
+It is always run first before any other preprocessor.
+.
+.P
+Besides these, there are some internal preprocessors that are
+automatically run with some devices.
+.
+These aren't visible to the user.
+.
+.
+.\" ====================================================================
+.SS "Macro Packages"
+.\" ====================================================================
+.
+Macro packages can be included by option
+.BR \-m .
+.
+The
+.I groff
+system implements and extends all classical macro packages in a
+compatible way and adds some packages of its own.
+.
+Actually, the following macro packages come with
+.IR groff :
+.
+.TP
+.B man
+The traditional man page format; see
+.BR \%groff_man (@MAN7EXT@).
+It can be specified on the command line as
+.B \-man
+or
+.BR \-m\~man .
+.
+.TP
+.B mandoc
+The general package for man pages; it automatically recognizes
+whether the documents uses the
+.I man
+or the
+.I mdoc
+format and branches to the corresponding macro package.
+.
+It can be specified on the command line as
+.B \%\-mandoc
+or
+.BR \-m\~\%mandoc .
+.
+.TP
+.B mdoc
+The \f[CR]BSD\f[]-style man page format; see
+.BR \%groff_mdoc (@MAN7EXT@).
+.
+It can be specified on the command line as
+.B \-mdoc
+or
+.BR \-m\~mdoc .
+.
+.TP
+.B me
+The classical
+.I me
+document format; see
+.BR \%groff_me (@MAN7EXT@).
+.
+It can be specified on the command line as
+.B \-me
+or
+.BR \-m\~me .
+.
+.TP
+.B mm
+The classical
+.I mm
+document format; see
+.BR \%groff_mm (@MAN7EXT@).
+.
+It can be specified on the command line as
+.B \-mm
+or
+.BR \-m\~mm .
+.
+.TP
+.B ms
+The classical
+.I ms
+document format; see
+.BR \%groff_ms (@MAN7EXT@).
+It can be specified on the command line as
+.B \-ms
+or
+.BR \-m\~ms .
+.
+.TP
+.B www
+HTML-like macros for inclusion in arbitrary
+.I groff
+documents; see
+.BR \%groff_www (@MAN7EXT@).
+.
+.P
+Details on the naming of macro files and their placement can be found
+in
+.BR \%groff_tmac (@MAN5EXT@);
+this man page also documents some other, minor auxiliary macro packages
+not mentioned here.
+.
+.
+.\" ====================================================================
+.SS "Programming Language"
+.\" ====================================================================
+.
+General concepts common to all
+.I roff
+programming languages are described in
+.BR roff (@MAN7EXT@).
+.
+.
+.P
+The
+.I groff
+extensions to the classical
+.I troff
+language are documented in
+.BR \%groff_diff (@MAN7EXT@).
+.
+.
+.P
+An overview of language features,
+including all supported escapes and requests,
+can be found in
+.BR groff (@MAN7EXT@).
+.
+.
+.\" ====================================================================
+.SS Formatters
+.\" ====================================================================
+.
+The central
+.I roff
+formatter within the
+.I groff
+system is
+.BR @g@troff (@MAN1EXT@).
+.
+It provides the features of both the classical
+.I troff
+and
+.IR nroff ,
+as well as the
+.I groff
+extensions.
+.
+The command-line option
+.B \-C
+switches
+.B @g@troff
+into
+.I "compatibility mode"
+which tries to emulate classical
+.I roff
+as much as possible.
+.
+.
+.P
+There is a shell script
+.BR @g@nroff (@MAN1EXT@)
+that emulates the behavior of classical
+.BR nroff .
+.
+It tries to automatically select the proper output encoding, according to
+the current locale.
+.
+.
+.P
+The formatter program generates
+.IR "intermediate output" ;
+see
+.BR \%groff_out (@MAN7EXT@).
+.
+.
+.\" ====================================================================
+.SS Devices
+.\" ====================================================================
+.
+In
+.IR roff ,
+the output targets are called
+.IR devices .
+A device can be a piece of hardware, e.g., a printer, or a software
+file format.
+.
+A device is specified by the option
+.BR \-T .
+.
+The
+.I groff
+devices are as follows.
+.
+.TP
+.B ascii
+Text output using the
+.BR ascii (7)
+character set.
+.
+.TP
+.B cp1047
+Text output using the EBCDIC code page IBM cp1047 (e.g., OS/390 Unix).
+.
+.TP
+.B dvi
+TeX DVI format.
+.
+.TP
+.B html
+HTML output.
+.
+.TP
+.B latin1
+Text output using the ISO \%Latin-1 (ISO \%8859-1) character set; see
+.BR \%iso_8859_1 (7).
+.
+.TP
+.B lbp
+Output for Canon CAPSL printers (\%LBP-4 and \%LBP-8 series laser
+printers).
+.
+.TP
+.B lj4
+HP LaserJet4-compatible (or other PCL5-compatible) printers.
+.
+.TP
+.B ps
+PostScript output; suitable for printers and previewers like
+.BR gv (1).
+.
+.TP
+.B pdf
+PDF files; suitable for viewing with tools such as
+.BR evince (1)
+and
+.BR okular (1).
+.
+.TP
+.B utf8
+Text output using the Unicode (ISO 10646) character set with \%UTF-8
+encoding; see
+.BR unicode (7).
+.
+.TP
+.B xhtml
+XHTML output.
+.
+.TP
+.B X75
+75dpi X Window System output suitable for the previewers
+.BR \%xditview (1x)
+and
+.BR \%gxditview (@MAN1EXT@).
+.
+A variant for a 12\|pt document base font is
+.BR \%X75-12 .
+.
+.TP
+.B X100
+100dpi X Window System output suitable for the previewers
+.BR \%xditview (1x)
+and
+.BR \%gxditview (@MAN1EXT@).
+.
+A variant for a 12\|pt document base font is
+.BR \%X100-12 .
+.
+.
+.P
+The postprocessor to be used for a device is specified by the
+.B postpro
+command in the device description file; see
+.BR \%groff_font (@MAN5EXT@).
+.
+This can be overridden with the
+.B \-X
+option.
+.
+.P
+The default device is
+.BR @DEVICE@ .
+.
+.
+.\" ====================================================================
+.SS Postprocessors
+.\" ====================================================================
+.
+.I groff
+provides 3\~hardware postprocessors:
+.
+.TP
+.BR \%grolbp (@MAN1EXT@)
+for some Canon printers,
+.
+.TP
+.BR \%grolj4 (@MAN1EXT@)
+for printers compatible to the HP LaserJet\~4 and PCL5,
+.
+.TP
+.BR \%grotty (@MAN1EXT@)
+for text output using various encodings, e.g., on text-oriented
+terminals or line printers.
+.
+.
+.P
+Today, most printing or drawing hardware is handled by the operating
+system, by device drivers, or by software interfaces, usually
+accepting PostScript.
+.
+Consequently, there isn't an urgent need for more hardware device
+postprocessors.
+.
+.
+.P
+The
+.I groff
+software devices for conversion into other document file formats are
+.
+.TP
+.BR \%grodvi (@MAN1EXT@)
+for the DVI format,
+.
+.TP
+.BR \%grohtml (@MAN1EXT@)
+for HTML and XHTML formats,
+.
+.TP
+.BR grops (@MAN1EXT@)
+for PostScript.
+.
+.TP
+.BR gropdf (@MAN1EXT@)
+for PDF.
+.
+.
+.P
+Combined with the many existing free conversion tools this should
+be sufficient to convert a
+.I troff
+document into virtually any existing data format.
+.
+.
+.\" ====================================================================
+.SS Utilities
+.\" ====================================================================
+.
+The following utility programs around
+.I groff
+are available.
+.
+.TP
+.BR \%addftinfo (@MAN1EXT@)
+Add information to
+.I troff
+font description files for use with
+.IR groff .
+.
+.TP
+.BR \%afmtodit (@MAN1EXT@)
+Create font description files for PostScript device.
+.
+.TP
+.BR \%eqn2graph (@MAN1EXT@)
+Convert an
+.B eqn
+image into a cropped image.
+.
+.TP
+.BR \%gdiffmk (@MAN1EXT@)
+Mark differences between
+.IR groff ,
+.IR nroff ,
+or
+.I troff
+files.
+.
+.TP
+.BR \%grap2graph (@MAN1EXT@)
+Convert a
+.B grap
+diagram into a cropped bitmap image.
+.
+.TP
+.BR \%groffer (@MAN1EXT@)
+General viewer program for
+.I groff
+files and man pages.
+.
+.TP
+.BR \%gxditview (@MAN1EXT@)
+The
+.I groff
+X viewer, the \f[CR]GNU\f[] version of
+.BR xditview .
+.
+.TP
+.BR \%hpftodit (@MAN1EXT@)
+Create font description files for lj4 device.
+.
+.TP
+.BR \%@g@indxbib (@MAN1EXT@)
+Make inverted index for bibliographic databases.
+.
+.TP
+.BR lkbib (@MAN1EXT@)
+Search bibliographic databases.
+.
+.TP
+.BR \%@g@lookbib (@MAN1EXT@)
+Interactively search bibliographic databases.
+.
+.TP
+.BR \%pdfroff (@MAN1EXT@)
+Create PDF documents using
+.BR groff .
+.
+.TP
+.BR \%pfbtops (@MAN1EXT@)
+Translate a PostScript font in \&.pfb format to \f[CR]ASCII\f[].
+.
+.TP
+.BR \%pic2graph (@MAN1EXT@)
+Convert a
+.B pic
+diagram into a cropped image.
+.
+.TP
+.BR \%tfmtodit (@MAN1EXT@)
+Create font description files for TeX DVI device.
+.
+.TP
+.BR \%xditview (1x)
+.I roff
+viewer historically distributed with the X Window System.
+.\" Nowadays (2017) it's its own module as X.Org does not do monolithic
+.\" releases anymore (since 2012).  Development on "app/xditview" is
+.\" close to moribund, though.
+.
+.TP
+.BR \%xtotroff (@MAN1EXT@)
+Convert X font metrics into \f[CR]GNU\f[]
+.I troff
+font metrics.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+Normally, the path separator in the following environment variables is
+the colon; this may vary depending on the operating system.
+.
+For example, DOS and Windows use a semicolon instead.
+.
+.
+.TP
+.I GROFF_BIN_PATH
+This search path, followed by
+.IR PATH ,
+is used for commands that are executed by
+.BR groff .
+.
+If it is not set then the directory where the
+.I groff
+binaries were installed is prepended to
+.IR PATH .
+.
+.
+.TP
+.I GROFF_COMMAND_PREFIX
+When there is a need to run different
+.I roff
+implementations at the same time
+.I groff
+provides the facility to prepend a prefix to most of its programs that
+could provoke name clashings at run time (default is to have none).
+.
+Historically, this prefix was the character
+.BR g ,
+but it can be anything.
+.
+For example,
+.B gtroff
+stood for
+.IR groff 's
+.BR troff ,
+.B gtbl
+for the
+.I groff
+version of
+.BR tbl .
+.
+By setting
+.I \%GROFF_COMMAND_PREFIX
+to different values, the different
+.I roff
+installations can be addressed.
+.
+More exactly, if it is set to prefix
+.I xxx
+then
+.B groff
+as a wrapper program internally calls
+.IB xxx troff
+instead of
+.BR troff .
+.
+This also applies to the preprocessors
+.BR eqn ,
+.BR grn ,
+.BR pic ,
+.BR \%refer ,
+.BR tbl ,
+.BR \%soelim ,
+and to the utilities
+.B \%@g@indxbib
+and
+.BR \%@g@lookbib .
+.
+This feature does not apply to any programs different from the ones
+above (most notably
+.B groff
+itself) since they are unique to the
+.I groff
+package.
+.
+.
+.TP
+.I GROFF_ENCODING
+The value of this environment value is passed to the
+.B preconv
+preprocessor to select the encoding of input files.
+.
+Setting this option implies
+.BR groff 's
+command-line option
+.B \-k
+(this is,
+.B groff
+actually always calls
+.BR preconv ).
+.
+If set without a value,
+.B groff
+calls
+.B preconv
+without arguments.
+.
+An explicit
+.B \-K
+command-line option overrides the value of
+.IR \%GROFF_ENCODING .
+.
+See
+.BR preconv (@MAN1EXT@)
+for details.
+.
+.
+.TP
+.I GROFF_FONT_PATH
+A list of directories in which to search for the
+.IR dev name
+directory in addition to the default ones.
+.
+See
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_font (@MAN5EXT@)
+for more details.
+.
+.
+.TP
+.I GROFF_TMAC_PATH
+A list of directories in which to search for macro files in addition
+to the default directories.
+.
+See
+.BR @g@troff (@MAN1EXT@)
+and
+.BR \%groff_tmac (@MAN5EXT@)
+for more details.
+.
+.
+.TP
+.I GROFF_TMPDIR
+The directory in which temporary files are created.
+.
+If this is not set but the environment variable
+.I \%TMPDIR
+instead, temporary files are created in the directory
+.IR \%TMPDIR .
+.
+On MS-DOS and Windows platforms, the environment variables
+.I TMP
+and
+.I TEMP
+(in that order) are searched also, after
+.I \%GROFF_TMPDIR
+and
+.IR \%TMPDIR .
+.
+Otherwise, temporary files are created in
+.IR /tmp .
+.
+The
+.BR \%@g@refer (@MAN1EXT@),
+.BR \%groffer (@MAN1EXT@),
+.BR \%grohtml (@MAN1EXT@),
+and
+.BR grops (@MAN1EXT@)
+commands use temporary files.
+.
+.
+.TP
+.I GROFF_TYPESETTER
+Preset the default device.
+.
+If this is not set the
+.B @DEVICE@
+device is used as default.
+.
+This device name is overwritten by the option
+.BR \-T .
+.
+.
+.\" ====================================================================
+.SH EXAMPLES
+.\" ====================================================================
+.
+The following example illustrates the power of the
+.B groff
+program as a wrapper around
+.BR @g@troff .
+.
+.
+.P
+To process a
+.I roff
+file using the preprocessors
+.B tbl
+and
+.B pic
+and the
+.B me
+macro set, classical
+.I troff
+had to be called by
+.
+.IP
+.EX
+pic foo.me | tbl | troff \-me \-Tlatin1 | grotty
+.EE
+.
+.
+.P
+Using
+.BR groff ,
+this pipe can be shortened to the equivalent command
+.
+.IP
+.EX
+groff \-p \-t \-me \-T latin1 foo.me
+.EE
+.
+.
+.P
+An even easier way to call this is to use
+.BR grog (@MAN1EXT@)
+to guess the preprocessor and macro options and execute the generated
+command (by using backquotes to specify shell command substitution)
+.
+.IP
+.EX
+\[ga]grog \-Tlatin1 foo.me\[ga]
+.EE
+.
+.
+.P
+The simplest way is to view the contents in an automated way by
+calling
+.
+.IP
+.EX
+groffer foo.me
+.EE
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+.
+On \f[CR]EBCDIC\f[] hosts (e.g., \f[CR]OS/390 Unix\f[]), output
+devices
+.B ascii
+and
+.B latin1
+aren't available.
+.
+Similarly, output for \f[CR]EBCDIC\f[] code page
+.B cp1047
+is not available on \f[CR]ASCII\f[] based operating systems.
+.
+.
+.\" ====================================================================
+.SH "INSTALLATION DIRECTORIES"
+.\" ====================================================================
+.
+.I groff
+installs files in varying locations depending on its compile-time
+configuration.
+.
+On this installation, the following locations are used.
+.
+.
+.TP
+.I @APPRESDIR@
+Application defaults directory for
+.IR gxditview (@MAN1EXT@).
+.
+.
+.TP
+.I @BINDIR@
+Directory containing
+.IR groff 's
+executable commands.
+.
+.
+.TP
+.I @COMMON_WORDS_FILE@
+List of common words for
+.IR indxbib (@MAN1EXT@).
+.
+.
+.TP
+.I @DATASUBDIR@
+Directory for data files.
+.
+.
+.TP
+.I @DEFAULT_INDEX@
+Default index for
+.IR lkbib (@MAN1EXT@)
+and
+.IR refer (@MAN1EXT@).
+.
+.
+.TP
+.I @DOCDIR@
+Documentation directory.
+.
+.
+.TP
+.I @EXAMPLEDIR@
+Example directory.
+.
+.
+.TP
+.I @FONTDIR@
+Font directory.
+.
+.
+.TP
+.I @HTMLDOCDIR@
+HTML documentation directory.
+.
+.
+.TP
+.I @LEGACYFONTDIR@
+Legacy font directory.
+.
+.
+.TP
+.I @LOCALFONTDIR@
+Local font directory.
+.
+.
+.TP
+.I @LOCALMACRODIR@
+Local macro package
+.RI ( tmac
+file) directory.
+.
+.
+.TP
+.I @MACRODIR@
+Macro package
+.RI ( tmac
+file) directory.
+.
+.
+.TP
+.I @OLDFONTDIR@
+Font directory for compatibility with old versions of
+.IR groff ;
+see
+.IR grops (@MAN1EXT@).
+.
+.
+.TP
+.I @PDFDOCDIR@
+PDF documentation directory.
+.
+.
+.TP
+.I @SYSTEMMACRODIR@
+System macro package
+.RI ( tmac
+file) directory.
+.
+.
+.\" ====================================================================
+.SS "groff Macro Directory"
+.\" ====================================================================
+.
+This contains all information related to macro packages.
+.
+Note that more than a single directory is searched for those files
+as documented in
+.BR \%groff_tmac (@MAN5EXT@).
+.
+For the
+.I groff
+installation corresponding to this document, it is located at
+.IR @MACRODIR@ .
+.
+The following files contained in the
+.I groff macro directory
+have a special meaning:
+.
+.
+.TP
+.I troffrc
+Initialization file for
+.IR troff .
+.
+This is interpreted by
+.B @g@troff
+before reading the macro sets and any input.
+.
+.
+.TP
+.I troffrc\-end
+Final startup file for
+.IR troff .
+.
+It is parsed after all macro sets have been read.
+.
+.
+.TP
+.RI name .tmac
+.TQ
+.IR tmac. name
+Macro file for macro package
+.IR name .
+.
+.
+.\" ====================================================================
+.SS "groff Font Directory"
+.\" ====================================================================
+.
+This contains all information related to output devices.
+.
+Note that more than a single directory is searched for those files; see
+.BR @g@troff (@MAN1EXT@).
+.
+For the
+.I groff
+installation corresponding to this document, it is located at
+.IR @FONTDIR@ .
+.
+The following files contained in the
+.I "groff font directory"
+have a special meaning:
+.
+.
+.TP
+.IR dev name /DESC
+Device description file for device
+.IR name ,
+see
+.BR \%groff_font (@MAN5EXT@).
+.
+.
+.TP
+.IR dev name / F
+Font file for font
+.I F
+of device
+.IR name .
+.
+.
+.\" ====================================================================
+.SH AVAILABILITY
+.\" ====================================================================
+.
+Information on how to get
+.I groff
+and related information is available at the
+.UR http://\:www.gnu.org/\:software/\:groff
+groff page of the GNU website
+.UE .
+.
+.
+.P
+Three
+.I groff
+mailing lists are available:
+.
+.
+.IP
+.MT bug\-groff@\:gnu.org
+bug tracker activity (read-only)
+.ME ;
+.
+.
+.IP
+.MT groff@\:gnu.org
+general discussion
+.ME ;
+and
+.
+.
+.IP
+.MT groff\-commit@\:gnu.org
+commit activity (read-only)
+.ME ,
+which reports changes to
+.IR groff 's
+source code repository by its developers.
+.
+.
+.P
+Details on repository access and much more can be found in the file
+.I README
+at the top directory of the
+.I groff
+source package.
+.
+.
+.P
+A free implementation of the
+.B grap
+preprocessor, written by
+.MT faber@\:lunabase.org
+Ted Faber
+.ME ,
+can be found at the
+.UR http://\:www.lunabase.org/\:\|\[ti]faber/\:Vault/\:software/\:grap/
+grap website
+.UE .
+.
+This is the only
+.I grap
+supported by
+.IR groff .
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+.B groff
+was written by
+.MT jjc@\:jclark.com
+James Clark
+.ME .
+.
+This document was rewritten, enhanced, and put under the FDL license in
+2002 by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg,
+is the primary
+.I groff
+manual.
+.
+You can browse it interactively with \[lq]info groff\[rq].
+.
+.
+.P
+Due to its complex structure, the
+.I groff
+system has many man pages.
+.
+They can be read with
+.BR man (1)
+or
+.BR \%groffer (@MAN1EXT@).
+.
+.P
+But there are special sections of
+.IR "man pages" .
+.
+.I groff
+has man pages in sections
+.BR 1 , " 5" , and " 7" .
+.
+When there are several
+.I man pages
+with the same name in the same
+.I man
+section, the one with the lowest section is should as first.
+.
+The other man pages can be shown anyway by adding the section number
+as argument before the man page name.
+.
+Reading the man page about the
+.I groff
+language is done by one of
+.RS
+.nf
+.nh
+.EX
+.B man 7 groff
+.B groffer 7 groff
+.EE
+.hy
+.fi
+.RE
+.
+.ad l
+.TP
+Introduction, history and further readings:
+.BR roff (@MAN7EXT@).
+.
+.TP
+Viewer for groff files:
+.BR \%groffer (@MAN1EXT@),
+.BR \%gxditview (@MAN1EXT@),
+.BR \%xditview (1x).
+.
+.TP
+Wrapper programs for formatters:
+.BR \%groff (@MAN1EXT@),
+.BR \%grog (@MAN1EXT@).
+.
+.TP
+Roff preprocessors:
+.BR \%@g@eqn (@MAN1EXT@),
+.BR \%@g@grn (@MAN1EXT@),
+.BR \%@g@pic (@MAN1EXT@),
+.BR \%@g@chem (@MAN1EXT@),
+.BR \%preconv (@MAN1EXT@),
+.BR \%@g@refer (@MAN1EXT@),
+.BR \%@g@soelim (@MAN1EXT@),
+.BR \%@g@tbl (@MAN1EXT@),
+.BR grap (1).
+.
+.TP
+Roff language with the groff extensions:
+.BR \%groff (@MAN7EXT@),
+.BR \%groff_char (@MAN7EXT@),
+.BR \%groff_diff (@MAN7EXT@),
+.BR \%groff_font (@MAN5EXT@).
+.
+.TP
+Roff formatter programs:
+.BR \%@g@nroff (@MAN1EXT@),
+.BR \%@g@troff (@MAN1EXT@),
+.BR ditroff (@MAN7EXT@).
+.
+.TP
+The intermediate output language:
+.BR \%groff_out (@MAN7EXT@).
+.
+.TP
+Postprocessors for the output devices:
+.BR \%grodvi (@MAN1EXT@),
+.BR \%grohtml (@MAN1EXT@),
+.BR \%grolbp (@MAN1EXT@),
+.BR \%grolj4 (@MAN1EXT@),
+.BR \%lj4_font (@MAN5EXT@),
+.BR \%grops (@MAN1EXT@),
+.BR \%gropdf (@MAN1EXT@),
+.BR \%grotty (@MAN1EXT@).
+.
+.TP
+Groff macro packages and macro-specific utilities:
+.BR \%groff_tmac (@MAN5EXT@),
+.BR \%groff_man (@MAN7EXT@),
+.BR \%groff_mdoc (@MAN7EXT@),
+.BR \%groff_me (@MAN7EXT@),
+.BR \%groff_mm (@MAN7EXT@),
+.BR \%groff_mmse (@MAN7EXT@),
+.BR \%groff_mom (@MAN7EXT@),
+.BR \%groff_ms (@MAN7EXT@),
+.BR \%groff_www (@MAN7EXT@),
+.BR \%groff_trace (@MAN7EXT@),
+.BR \%mmroff (@MAN7EXT@).
+.
+.TP
+The following utilities are available:
+.BR \%addftinfo (@MAN1EXT@),
+.BR \%afmtodit (@MAN1EXT@),
+.BR \%eqn2graph (@MAN1EXT@),
+.BR \%gdiffmk (@MAN1EXT@),
+.BR \%grap2graph (@MAN1EXT@),
+.BR \%groffer (@MAN1EXT@),
+.BR \%gxditview (@MAN1EXT@),
+.BR \%hpftodit (@MAN1EXT@),
+.BR \%@g@indxbib (@MAN1EXT@),
+.BR \%lkbib (@MAN1EXT@),
+.BR \%@g@lookbib (@MAN1EXT@),
+.BR \%pdfroff (@MAN1EXT@),
+.BR \%pfbtops (@MAN1EXT@),
+.BR \%pic2graph (@MAN1EXT@),
+.BR \%tfmtodit (@MAN1EXT@),
+.BR \%xtotroff (@MAN1EXT@).
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_1_C]
+.
+.
+.\" ====================================================================
+.\" Emacs setup
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/roff/groff/groff.am b/src/roff/groff/groff.am
new file mode 100644 (file)
index 0000000..0c926b6
--- /dev/null
@@ -0,0 +1,72 @@
+# Copyright (C) 1993-2018 Free Software Foundation, Inc.
+#
+#   Original Makefile.sub rewritten by 
+#   Bernd Warken <groff-bernd.warken-72@web.de>
+#   and Werner LEMBERG <wl@gnu.org>
+#
+#   Automake migration by 
+#   Bertrand Garrigues <bertrand.garrigues@laposte.net>
+#
+# Latest update: 22 Aug 2015
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+########################################################################
+
+bin_PROGRAMS += groff
+groff_LDADD = \
+  libgroff.a \
+  lib/libgnu.a \
+  $(LIBM)
+groff_SOURCES = \
+  src/roff/groff/groff.cpp \
+  src/roff/groff/pipeline.c \
+  src/roff/groff/pipeline.h
+src/roff/groff/groff.$(OBJEXT): defs.h
+man1_MANS += src/roff/groff/groff.1
+EXTRA_DIST += src/roff/groff/groff.1.man
+GROFF_OPTS_OUTPUT = \
+  groff_opts_no_arg.txt \
+  groff_opts_with_arg.txt
+groffoptsdir = $(libprogramdir)
+groffopts_DATA = $(GROFF_OPTS_OUTPUT)
+
+MOSTLYCLEANFILES += groff_opts.tmp $(GROFF_OPTS_OUTPUT)
+
+groff_opts.tmp: src/roff/groff/groff.cpp
+       @$(GREP) -e ':.*:.*:' $? | sed -e 's/[ \t",]//g' > $@
+       @echo -n 'groff options: '
+       @cat $@
+
+groff_opts_no_arg.txt: groff_opts.tmp
+       @sed -e 's/[a-zA-Z]://g' $? > $@
+       @echo -n 'no arg: '
+       @cat $@
+
+groff_opts_with_arg.txt: groff_opts_no_arg.txt
+       @rm -f $@
+       @sed "s/[`cat $?`:]//g" groff_opts.tmp > $@
+       @echo -n 'with arg: '
+       @cat $@
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 9c613b13293fe61a2d692a641082f7086f728c27..a3815bf31c15bbb804495f74e853811cd18dd793 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 // A front end for groff.
 
@@ -34,6 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 #include "device.h"
 #include "pipeline.h"
 #include "nonposix.h"
+#include "relocate.h"
 #include "defs.h"
 
 #define GXDITVIEW "gxditview"
@@ -219,7 +220,7 @@ int main(int argc, char **argv)
       vflag = 1;
       printf("GNU groff version %s\n", Version_string);
       printf(
-       "Copyright (C) 2014 Free Software Foundation, Inc.\n"
+       "Copyright (C) 2018 Free Software Foundation, Inc.\n"
        "GNU groff comes with ABSOLUTELY NO WARRANTY.\n"
        "You may redistribute copies of groff and its subprograms\n"
        "under the terms of the GNU General Public License.\n"
@@ -292,6 +293,7 @@ int main(int argc, char **argv)
       break;
     case 'o':
       oflag = 1;
+      // fall through
     case 'f':
     case 'm':
     case 'r':
@@ -339,9 +341,9 @@ int main(int argc, char **argv)
   }
   font::set_unknown_desc_command_handler(handle_unknown_desc_command);
   if (!font::load_desc())
-    fatal("invalid device `%1'", device);
+    fatal("invalid device '%1'", device);
   if (!postdriver)
-    fatal("no `postpro' command in DESC file for device `%1'", device);
+    fatal("no 'postpro' command in DESC file for device '%1'", device);
   if (predriver && !zflag) {
     commands[TROFF_INDEX].insert_arg(commands[TROFF_INDEX].get_name());
     commands[TROFF_INDEX].set_name(predriver);
@@ -410,7 +412,7 @@ int main(int argc, char **argv)
   if (strcmp(device, "html") == 0) {
     if (is_xhtml) {
       if (oflag)
-       fatal("`-o' option is invalid with device `xhtml'");
+       fatal("'-o' option is invalid with device 'xhtml'");
       if (zflag)
        commands[EQN_INDEX].append_arg("-Tmathml:xhtml");
       else if (eflag)
@@ -418,7 +420,7 @@ int main(int argc, char **argv)
     }
     else {
       if (oflag)
-       fatal("`-o' option is invalid with device `html'");
+       fatal("'-o' option is invalid with device 'html'");
       // html renders equations as images via ps
       commands[EQN_INDEX].append_arg("-Tps:html");
     }
@@ -469,8 +471,10 @@ int main(int argc, char **argv)
     f += '=';
     if (binpath && *binpath)
       f += binpath;
-    else
-      f += BINPATH;
+    else {
+      binpath = relocatep(BINPATH);
+      f += binpath;
+    }
     if (path && *path) {
       f += PATH_SEP_CHAR;
       f += path;
@@ -512,19 +516,19 @@ void handle_unknown_desc_command(const char *command, const char *arg,
   if (strcmp(command, "print") == 0) {
     if (arg == 0)
       error_with_file_and_line(filename, lineno,
-                              "`print' command requires an argument");
+                              "'print' command requires an argument");
     else
       spooler = strsave(arg);
   }
   if (strcmp(command, "prepro") == 0) {
     if (arg == 0)
       error_with_file_and_line(filename, lineno,
-                              "`prepro' command requires an argument");
+                              "'prepro' command requires an argument");
     else {
       for (const char *p = arg; *p; p++)
        if (csspace(*p)) {
          error_with_file_and_line(filename, lineno,
-                                  "invalid `prepro' argument `%1'"
+                                  "invalid 'prepro' argument '%1'"
                                   ": program name required", arg);
          return;
        }
@@ -534,12 +538,12 @@ void handle_unknown_desc_command(const char *command, const char *arg,
   if (strcmp(command, "postpro") == 0) {
     if (arg == 0)
       error_with_file_and_line(filename, lineno,
-                              "`postpro' command requires an argument");
+                              "'postpro' command requires an argument");
     else {
       for (const char *p = arg; *p; p++)
        if (csspace(*p)) {
          error_with_file_and_line(filename, lineno,
-                                  "invalid `postpro' argument `%1'"
+                                  "invalid 'postpro' argument '%1'"
                                   ": program name required", arg);
          return;
        }
@@ -578,13 +582,13 @@ possible_command::possible_command()
 
 possible_command::~possible_command()
 {
-  a_delete name;
+  free(name);
   a_delete argv;
 }
 
 void possible_command::set_name(const char *s)
 {
-  a_delete name;
+  free(name);
   name = strsave(s);
 }
 
@@ -598,8 +602,8 @@ void possible_command::clear_name()
 
 void possible_command::set_name(const char *s1, const char *s2)
 {
-  a_delete name;
-  name = new char[strlen(s1) + strlen(s2) + 1];
+  free(name);
+  name = (char*)malloc(strlen(s1) + strlen(s2) + 1);
   strcpy(name, s1);
   strcat(name, s2);
 }
@@ -701,7 +705,13 @@ void append_arg_to_string(const char *arg, string &str)
 {
   str += ' ';
   int needs_quoting = 0;
+  // Native Windows programs don't support '..' style of quoting, so
+  // always behave as if ARG included the single quote character.
+#if defined(_WIN32) && !defined(__CYGWIN__)
+  int contains_single_quote = 1;
+#else
   int contains_single_quote = 0;
+#endif
   const char*p;
   for (p = arg; *p != '\0'; p++)
     switch (*p) {
@@ -731,10 +741,17 @@ void append_arg_to_string(const char *arg, string &str)
     str += '"';
     for (p = arg; *p != '\0'; p++)
       switch (*p) {
+#if !(defined(_WIN32) && !defined(__CYGWIN__))
       case '"':
       case '\\':
       case '$':
        str += '\\';
+#else
+      case '"':
+      case '\\':
+       if (*p == '"' || (*p == '\\' && p[1] == '"'))
+         str += '\\';
+#endif
        // fall through
       default:
        str += *p;
diff --git a/src/roff/groff/groff.man b/src/roff/groff/groff.man
deleted file mode 100644 (file)
index e30d1b5..0000000
+++ /dev/null
@@ -1,2035 +0,0 @@
-.TH GROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff \- front-end for the groff document formatting system
-.
-.\" groff.man -> groff.1
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.\" License
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Rewritten in 2002 by Bernd Warken <groff-bernd.warken-72@web.de>
-
-This document is part of groff, a free GNU software project.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being the macro definition or .co and .au, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-
-It is also available in the internet at the
-.UR http://\:www.gnu.org/\:copyleft/\:fdl.html
-GNU copyleft site
-.UE .
-..
-.
-.\" Authors
-.de au
-This document is based on the original
-.I groff
-man page written by
-.MT jjc@jclark.com
-James Clark
-.UE .
-.
-It was rewritten, enhanced, and put under the FDL license by
-Bernd Warken <groff-bernd.warken-72@web.de>.
-.
-It is maintained by
-.MT wl@gnu.org
-Werner Lemberg
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Definitons
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.\" Environment variable
-.de EnvVar
-.  SM
-.  BR \%\\$1 \\$2
-..
-.\" --------------------------------------------------------------------
-.\" `char or string'
-.de Quoted
-.  ft CR
-\[oq]\\$*\[cq]
-.  ft
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY groff
-.OP \-abcegijklpstzCEGNRSUVXZ
-.OP \-d cs
-.OP \-D arg
-.OP \-f fam
-.OP \-F dir
-.OP \-I dir
-.OP \-K arg
-.OP \-L arg
-.OP \-m name
-.OP \-M dir
-.OP \-n num
-.OP \-o list
-.OP \-P arg
-.OP \-r cn
-.OP \-T dev
-.OP \-w name
-.OP \-W name
-.RI [ file\~ .\|.\|.]
-.
-.SY groff
-.B \-h
-|
-.B \-\-help
-.
-.SY groff
-.B \-v
-|
-.B \-\-version
-.RI [ option\~ .\|.\|.]
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This document describes the
-.B groff
-program, the main front-end for the
-.I groff
-document formatting system.
-.
-The
-.I groff
-program and macro suite is the implementation of a
-.BR roff (@MAN7EXT@)
-system within the free software collection
-.UR http://\:www.gnu.org
-GNU
-.UE .
-.
-The
-.I groff
-system has all features of the classical
-.IR roff ,
-but adds many extensions.
-.
-.
-.P
-The
-.B groff
-program allows to control the whole
-.I groff
-system by command line options.
-.
-This is a great simplification in comparison to the classical case (which
-uses pipes only).
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-The command line is parsed according to the usual \f[CR]GNU\f[]
-convention.
-.
-The whitespace between a command line option and its argument is
-optional.
-.
-Options can be grouped behind a single \[oq]\-\[cq] (minus character).
-.
-A filename of
-.B \-
-(minus character) denotes the standard input.
-.
-.
-.P
-As
-.B groff
-is a wrapper program for
-.B @g@troff
-both programs share a set of options.
-.
-But the
-.B groff
-program has some additional, native options and gives a new meaning to
-some
-.B @g@troff
-options.
-.
-On the other hand, not all
-.B @g@troff
-options can be fed into
-.BR groff .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Native groff Options
-.\" --------------------------------------------------------------------
-.
-The following options either do not exist for
-.B @g@troff
-or are differently interpreted by
-.BR groff .
-.
-.
-.TP
-.BI \-D\  arg
-Set default input encoding used by
-.B preconv
-to
-.IR arg .
-.
-Implies
-.BR \-k .
-.
-.
-.TP
-.B \-e
-Preprocess with
-.BR @g@eqn .
-.
-.
-.TP
-.B \-g
-Preprocess with
-.BR @g@grn .
-.
-.
-.TP
-.B \-G
-Preprocess with
-.BR grap .
-.
-Implies
-.BR \-p .
-.
-.
-.TP
-.B \-h
-.TQ
-.B \-\-help
-Print a help message.
-.
-.
-.TP
-.BI \-I\  dir
-This option may be used to specify a directory to search for
-files (both those on the command line and those named in
-.B .psbb
-and
-.B .so
-requests, and
-.B \eX'ps: import'
-and
-.B \eX'ps: file'
-escapes).
-.
-The current directory is always searched first.
-.
-This option may be specified more than once;
-the directories are searched in the order specified.
-.
-No directory search is performed for files specified using an absolute path.
-.
-This option implies the
-.B \-s
-option.
-.
-.
-.TP
-.B \-j
-Preprocess with
-.BR @g@chem .
-.
-Implies
-.BR \-p .
-.
-.
-.TP
-.B \-k
-Preprocess with
-.BR preconv .
-.
-This is run before any other preprocessor.
-.
-Please refer to
-.BR preconv \[aq]s
-manual page for its behaviour if no
-.B \-K
-(or
-.BR \-D )
-option is specified.
-.
-.
-.TP
-.BI \-K\  arg
-Set input encoding used by
-.B preconv
-to
-.IR arg .
-.
-Implies
-.BR \-k .
-.
-.
-.TP
-.B \-l
-Send the output to a spooler program for printing.
-.
-The command that should be used for this is specified by the
-.B print
-command in the device description file, see
-.BR \%groff_font (@MAN5EXT@).
-.
-If this command is not present, the output is piped into the
-.BR lpr (1)
-program by default.
-.
-See options
-.B \-L
-and
-.BR \-X .
-.
-.
-.TP
-.BI \-L\  arg
-Pass
-.I arg
-to the spooler program.
-.
-Several arguments should be passed with a separate
-\-L
-option each.
-.
-Note that
-.B groff
-does not prepend
-\[oq]\-\[cq]
-(a minus sign) to
-.I arg
-before passing it to the spooler program.
-.
-.
-.TP
-.B \-N
-Don\[aq]t allow newlines within
-.I eqn
-delimiters.
-.
-This is the same as the
-.B \-N
-option in
-.BR @g@eqn .
-.
-.
-.TP
-.B \-p
-Preprocess with
-.BR @g@pic .
-.
-.
-.TP
-.BI \-P\  \-option
-.TQ
-.BI \-P\  \-option \ \-P\  arg
-Pass
-.I \-option
-or
-.I "\-option\~arg"
-to the postprocessor.
-.
-The option must be specified with the necessary preceding minus
-sign(s)
-.Quoted \-
-or
-.Quoted \-\-
-because
-.B groff
-does not prepend any dashes before passing it to the postprocessor.
-.
-For example, to pass a title to the
-.B \%gxditview
-postprocessor, the shell command
-.
-.RS
-.IP
-.EX
-groff \-X \-P \-title \-P 'groff it' \f[I]foo\f[]
-.EE
-.RE
-.
-.IP
-is equivalent to
-.
-.RS
-.IP
-.EX
-groff \-X \-Z \f[I]foo\f[] | \
-gxditview \-title 'groff it' \-
-.EE
-.RE
-.
-.
-.TP
-.B \-R
-Preprocess with
-.BR @g@refer .
-.
-No mechanism is provided for passing arguments to
-.B @g@refer
-because most
-.B @g@refer
-options have equivalent language elements that can be specified within
-the document.
-.
-See
-.BR \%@g@refer (@MAN1EXT@)
-for more details.
-.
-.
-.TP
-.B \-s
-Preprocess with
-.BR @g@soelim .
-.
-.
-.TP
-.B \-S
-Safer mode.
-.
-Pass the
-.B \-S
-option to
-.B @g@pic
-and disable the following
-.B @g@troff
-requests:
-.BR .open ,
-.BR .opena ,
-.BR .pso ,
-.BR .sy ,
-and
-.BR .pi .
-.
-For security reasons, safer mode is enabled by default.
-.
-.
-.TP
-.B \-t
-Preprocess with
-.BR @g@tbl .
-.
-.
-.TP
-.BI \-T\  dev
-Set output device to
-.IR dev .
-.
-For this device,
-.B @g@troff
-generates the
-.I intermediate
-.IR output ;
-see
-.BR \%groff_out (@MAN5EXT@).
-.
-Then
-.B groff
-calls a postprocessor to convert
-.BR @g@troff \[aq]s
-.I intermediate output
-to its final format.
-.
-Real devices in
-.B groff
-are
-.
-.RS
-.RS
-.TP
-dvi
-TeX DVI format (postprocessor is
-.BR grodvi ).
-.
-.TP
-html
-.TQ
-xhtml
-HTML and XHTML output (preprocessors are
-.B @g@soelim
-and
-.BR \%pre-grohtml ,
-postprocessor is
-.BR \%post-grohtml ).
-.
-.TP
-lbp
-Canon CAPSL printers (\%LBP-4 and \%LBP-8 series laser printers;
-postprocessor is
-.BR grolbp ).
-.
-.TP
-lj4
-HP LaserJet4 compatible (or other PCL5 compatible) printers (postprocessor
-is
-.BR grolj4 ).
-.
-.TP
-ps
-PostScript output (postprocessor is
-.BR grops ).
-.
-.TP
-pdf
-Portable Document Format (PDF) output (postprocessor is
-.BR gropdf ).
-.RE
-.RE
-.
-.
-.IP
-For the following TTY output devices (postprocessor is always
-.BR grotty ),
-.B \-T
-selects the output encoding:
-.
-.RS
-.RS
-.TP
-ascii
-7bit \f[CR]ASCII\f[].
-.
-.TP
-cp1047
-\%Latin-1 character set for EBCDIC hosts.
-.
-.TP
-latin1
-ISO \%8859-1.
-.
-.TP
-utf8
-Unicode character set in \%UTF-8 encoding.
-.
-This mode has the most useful fonts for TTY mode, so it is the best
-mode for TTY output.
-.RE
-.RE
-.
-.
-.IP
-The following arguments select
-.B \%gxditview
-as the \[oq]postprocessor\[cq] (it is rather a viewing program):
-.
-.RS
-.RS
-.TP
-X75
-75\|dpi resolution, 10\|pt document base font.
-.TP
-X75-12
-75\|dpi resolution, 12\|pt document base font.
-.TP
-X100
-100\|dpi resolution, 10\|pt document base font.
-.TP
-X100-12
-100\|dpi resolution, 12\|pt document base font.
-.RE
-.RE
-.
-.IP
-The default device is
-.BR @DEVICE@ .
-.
-.
-.TP
-.B \-U
-Unsafe mode.
-.
-Reverts to the (old) unsafe behaviour; see option
-.BR \-S .
-.
-.
-.TP
-.B \-v
-.TQ
-.B \-\-version
-Output version information of
-.B groff
-and of all programs that are run by it; that is, the given command line
-is parsed in the usual way, passing
-.B \-v
-to all subprograms.
-.
-.
-.TP
-.B \-V
-Output the pipeline that would be run by
-.BR groff
-(as a wrapper program) on the standard output, but do not execute it.
-.
-If given more than once,
-the commands are both printed on the standard error and run.
-.
-.
-.TP
-.B \-X
-Use
-.B \%gxditview
-instead of using the usual postprocessor to (pre)view a document.
-.
-The printing spooler behavior as outlined with options
-.B \-l
-and
-.B \-L
-is carried over to
-.BR \%gxditview (@MAN1EXT@)
-by determining an argument for the
-.B \-printCommand
-option of
-.BR \%gxditview (@MAN1EXT@).
-.
-This sets the default
-.B Print
-action and the corresponding menu entry to that value.
-.
-.B \-X
-only produces good results with
-.BR \-Tps ,
-.BR \-TX75 ,
-.BR \-TX75-12 ,
-.BR \-TX100 ,
-and
-.BR \-TX100-12 .
-.
-The default resolution for previewing
-.B \-Tps
-output is 75\|dpi; this can be changed by passing the
-.B \-resolution
-option to
-.BR \%gxditview ,
-for example
-.
-.RS
-.IP
-.EX
-groff \-X \-P-resolution \-P100 \-man foo.1
-.EE
-.RE
-.
-.
-.TP
-.B \-z
-Suppress output generated by
-.BR @g@troff .
-.
-Only error messages are printed.
-.
-.
-.TP
-.B \-Z
-Do not automatically postprocess
-.I groff intermediate output
-in the usual manner.
-.
-This will cause the
-.B @g@troff
-.I output
-to appear on standard output,
-replacing the usual postprocessor output; see
-.BR \%groff_out (@MAN5EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SS Transparent Options
-.\" --------------------------------------------------------------------
-.
-The following options are transparently handed over to the formatter
-program
-.B @g@troff
-that is called by
-.B groff
-subsequently.
-.
-These options are described in more detail in
-.BR @g@troff (@MAN1EXT@).
-.
-.TP
-.B \-a
-\f[CR]ASCII\f[] approximation of output.
-.
-.TP
-.B \-b
-Backtrace on error or warning.
-.
-.TP
-.B \-c
-Disable color output.
-.
-Please consult the
-.BR \%grotty (@MAN1EXT@)
-man page for more details.
-.
-.TP
-.B \-C
-Enable compatibility mode.
-.
-.TP
-.BI \-d\  cs
-.TQ
-.BI \-d\  name = s
-Define string.
-.
-.TP
-.B \-E
-Disable
-.B @g@troff
-error messages.
-.
-.TP
-.BI \-f\  fam
-Set default font family.
-.
-.TP
-.BI \-F\  dir
-Set path for font DESC files.
-.
-.TP
-.B \-i
-Process standard input after the specified input files.
-.
-.TP
-.BI \-m\  name
-Include macro file
-.IB name .tmac
-(or
-.BI tmac. name\c
-); see also
-.BR \%groff_tmac (@MAN5EXT@).
-.
-.TP
-.BI \-M\  dir
-Path for macro files.
-.
-.TP
-.BI \-n\  num
-Number the first page
-.IR num .
-.
-.TP
-.BI \-o\  list
-Output only pages in
-.IR list .
-.
-.TP
-.BI \-r\  cn
-.TQ
-.BI \-r\  name = n
-Set number register.
-.
-.TP
-.BI \-w\  name
-Enable warning
-.IR name .
-.
-See
-.BR @g@troff (@MAN1EXT@)
-for names.
-.
-.TP
-.BI \-W\  name
-disable warning
-.IR name .
-.
-See
-.BR @g@troff (@MAN1EXT@)
-for names.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "USING GROFF"
-.\" --------------------------------------------------------------------
-.
-The
-.I groff system
-implements the infrastructure of classical roff; see
-.BR roff (@MAN7EXT@)
-for a survey on how a
-.I roff
-system works in general.
-.
-Due to the front-end programs available within the
-.I groff
-system, using
-.I groff
-is much easier than
-.IR "classical roff" .
-.
-This section gives an overview of the parts that constitute the
-.I groff
-system.
-.
-It complements
-.BR roff (@MAN7EXT@)
-with
-.IR groff -specific
-features.
-.
-This section can be regarded as a guide to the documentation around
-the
-.I groff
-system.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Paper Size
-.\" --------------------------------------------------------------------
-.
-The
-.I virtual
-paper size used by
-.B troff
-to format the input is controlled globally with the requests
-.BR .po ,
-.BR .pl ,
-and
-.BR .ll .
-.
-See
-.BR groff_tmac (@MAN5EXT@)
-for the \[oq]papersize\[cq] macro package which provides a convenient
-interface.
-.
-.
-.P
-The
-.I physical
-paper size, giving the actual dimensions of the paper sheets, is
-controlled by output devices like
-.BR grops
-with the command line options
-.B \-p
-and
-.BR \-l .
-.
-See
-.BR groff_font (@MAN5EXT@)
-and the man pages of the output devices for more details.
-.
-.B groff
-uses the command line option
-.B \-P
-to pass options to output devices; for example, the following selects
-A4 paper in landscape orientation for the PS device:
-.
-.IP
-.EX
-groff -Tps -P-pa4 -P-l ...
-.EE
-.
-.
-.\" --------------------------------------------------------------------
-.SS Front-ends
-.\" --------------------------------------------------------------------
-.
-The
-.B groff
-program is a wrapper around the
-.BR @g@troff (@MAN1EXT@)
-program.
-.
-It allows to specify the preprocessors by command line options and
-automatically runs the postprocessor that is appropriate for the
-selected device.
-.
-Doing so, the sometimes tedious piping mechanism of classical
-.BR roff (@MAN7EXT@)
-can be avoided.
-.
-.
-.P
-The
-.BR grog (@MAN1EXT@)
-program can be used for guessing the correct
-.I groff
-command line to format a file.
-.
-.
-.P
-The
-.BR \%groffer (@MAN1EXT@)
-program is an allround-viewer for
-.I groff
-files and man pages.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Preprocessors
-.\" --------------------------------------------------------------------
-.
-The
-.I groff
-preprocessors are reimplementations of the classical preprocessors
-with moderate extensions.
-.
-The standard preprocessors distributed with the
-.I groff
-package are
-.
-.TP
-.BR @g@eqn (@MAN1EXT@)
-for mathematical formulae,
-.
-.TP
-.BR @g@grn (@MAN1EXT@)
-for including
-.BR gremlin (1)
-pictures,
-.
-.TP
-.BR @g@pic (@MAN1EXT@)
-for drawing diagrams,
-.
-.TP
-.BR @g@chem (@MAN1EXT@)
-for chemical structure diagrams,
-.
-.TP
-.BR \%@g@refer (@MAN1EXT@)
-for bibliographic references,
-.
-.TP
-.BR \%@g@soelim (@MAN1EXT@)
-for including macro files from standard locations,
-.
-.P
-and
-.
-.TP
-.BR @g@tbl (@MAN1EXT@)
-for tables.
-.
-.P
-A new preprocessor not available in classical
-.I troff
-is
-.BR \%preconv (@MAN1EXT@)
-which converts various input encodings to something
-.B groff
-can understand.
-.
-It is always run first before any other preprocessor.
-.
-.P
-Besides these, there are some internal preprocessors that are
-automatically run with some devices.
-.
-These aren\[aq]t visible to the user.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Macro Packages"
-.\" --------------------------------------------------------------------
-.
-Macro packages can be included by option
-.BR \-m .
-.
-The
-.I groff
-system implements and extends all classical macro packages in a
-compatible way and adds some packages of its own.
-.
-Actually, the following macro packages come with
-.IR groff :
-.
-.TP
-.B man
-The traditional man page format; see
-.BR \%groff_man (@MAN7EXT@).
-It can be specified on the command line as
-.B \-man
-or
-.BR \-m\~man .
-.
-.TP
-.B mandoc
-The general package for man pages; it automatically recognizes
-whether the documents uses the
-.I man
-or the
-.I mdoc
-format and branches to the corresponding macro package.
-.
-It can be specified on the command line as
-.B \%\-mandoc
-or
-.BR \-m\~\%mandoc .
-.
-.TP
-.B mdoc
-The \f[CR]BSD\f[]-style man page format; see
-.BR \%groff_mdoc (@MAN7EXT@).
-.
-It can be specified on the command line as
-.B \-mdoc
-or
-.BR \-m\~mdoc .
-.
-.TP
-.B me
-The classical
-.I me
-document format; see
-.BR \%groff_me (@MAN7EXT@).
-.
-It can be specified on the command line as
-.B \-me
-or
-.BR \-m\~me .
-.
-.TP
-.B mm
-The classical
-.I mm
-document format; see
-.BR \%groff_mm (@MAN7EXT@).
-.
-It can be specified on the command line as
-.B \-mm
-or
-.BR \-m\~mm .
-.
-.TP
-.B ms
-The classical
-.I ms
-document format; see
-.BR \%groff_ms (@MAN7EXT@).
-It can be specified on the command line as
-.B \-ms
-or
-.BR \-m\~ms .
-.
-.TP
-.B www
-HTML-like macros for inclusion in arbitrary
-.I groff
-documents; see
-.BR \%groff_www (@MAN7EXT@).
-.
-.P
-Details on the naming of macro files and their placement can be found
-in
-.BR \%groff_tmac (@MAN5EXT@);
-this man page also documents some other, minor auxiliary macro packages
-not mentioned here.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Programming Language"
-.\" --------------------------------------------------------------------
-.
-General concepts common to all
-.I roff
-programming languages are described in
-.BR roff (@MAN7EXT@).
-.
-.
-.P
-The
-.I groff
-extensions to the classical
-.I troff
-language are documented in
-.BR \%groff_diff (@MAN7EXT@).
-.
-.
-.P
-The
-.I groff
-language as a whole is described in the (still incomplete)
-.IR "groff info file" ;
-a short (but complete) reference can be found in
-.BR groff (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SS Formatters
-.\" --------------------------------------------------------------------
-.
-The central
-.I roff
-formatter within the
-.I groff
-system is
-.BR @g@troff (@MAN1EXT@).
-.
-It provides the features of both the classical
-.I troff
-and
-.IR nroff ,
-as well as the
-.I groff
-extensions.
-.
-The command line option
-.B \-C
-switches
-.B @g@troff
-into
-.I "compatibility mode"
-which tries to emulate classical
-.I roff
-as much as possible.
-.
-.
-.P
-There is a shell script
-.BR @g@nroff (@MAN1EXT@)
-that emulates the behavior of classical
-.BR nroff .
-.
-It tries to automatically select the proper output encoding, according to
-the current locale.
-.
-.
-.P
-The formatter program generates
-.IR "intermediate output" ;
-see
-.BR \%groff_out (@MAN7EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SS Devices
-.\" --------------------------------------------------------------------
-.
-In
-.IR roff ,
-the output targets are called
-.IR devices .
-A device can be a piece of hardware, e.g., a printer, or a software
-file format.
-.
-A device is specified by the option
-.BR \-T .
-.
-The
-.I groff
-devices are as follows.
-.
-.TP
-.B ascii
-Text output using the
-.BR ascii (7)
-character set.
-.
-.TP
-.B cp1047
-Text output using the EBCDIC code page IBM cp1047 (e.g., OS/390 Unix).
-.
-.TP
-.B dvi
-TeX DVI format.
-.
-.TP
-.B html
-HTML output.
-.
-.TP
-.B latin1
-Text output using the ISO \%Latin-1 (ISO \%8859-1) character set; see
-.BR \%iso_8859_1 (7).
-.
-.TP
-.B lbp
-Output for Canon CAPSL printers (\%LBP-4 and \%LBP-8 series laser
-printers).
-.
-.TP
-.B lj4
-HP LaserJet4-compatible (or other PCL5-compatible) printers.
-.
-.TP
-.B ps
-PostScript output; suitable for printers and previewers like
-.BR gv (1).
-.
-.TP
-.B pdf
-PDF files; suitable for viewing with tools such as
-.BR evince (1)
-and
-.BR okular (1).
-.
-.TP
-.B utf8
-Text output using the Unicode (ISO 10646) character set with \%UTF-8
-encoding; see
-.BR unicode (7).
-.
-.TP
-.B xhtml
-XHTML output.
-.
-.TP
-.B X75
-75dpi X Window System output suitable for the previewers
-.BR \%xditview (1x)
-and
-.BR \%gxditview (@MAN1EXT@).
-.
-A variant for a 12\|pt document base font is
-.BR \%X75-12 .
-.
-.TP
-.B X100
-100dpi X Window System output suitable for the previewers
-.BR \%xditview (1x)
-and
-.BR \%gxditview (@MAN1EXT@).
-.
-A variant for a 12\|pt document base font is
-.BR \%X100-12 .
-.
-.
-.P
-The postprocessor to be used for a device is specified by the
-.B postpro
-command in the device description file; see
-.BR \%groff_font (@MAN5EXT@).
-.
-This can be overridden with the
-.B \-X
-option.
-.
-.P
-The default device is
-.BR @DEVICE@ .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Postprocessors
-.\" --------------------------------------------------------------------
-.
-.I groff
-provides 3\~hardware postprocessors:
-.
-.TP
-.BR \%grolbp (@MAN1EXT@)
-for some Canon printers,
-.
-.TP
-.BR \%grolj4 (@MAN1EXT@)
-for printers compatible to the HP LaserJet\~4 and PCL5,
-.
-.TP
-.BR \%grotty (@MAN1EXT@)
-for text output using various encodings, e.g., on text-oriented
-terminals or line-printers.
-.
-.
-.P
-Today, most printing or drawing hardware is handled by the operating
-system, by device drivers, or by software interfaces, usually
-accepting PostScript.
-.
-Consequently, there isn\[aq]t an urgent need for more hardware device
-postprocessors.
-.
-.
-.P
-The
-.I groff
-software devices for conversion into other document file formats are
-.
-.TP
-.BR \%grodvi (@MAN1EXT@)
-for the DVI format,
-.
-.TP
-.BR \%grohtml (@MAN1EXT@)
-for HTML and XHTML formats,
-.
-.TP
-.BR grops (@MAN1EXT@)
-for PostScript.
-.
-.TP
-.BR gropdf (@MAN1EXT@)
-for PDF.
-.
-.
-.P
-Combined with the many existing free conversion tools this should
-be sufficient to convert a
-.I troff
-document into virtually any existing data format.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Utilities
-.\" --------------------------------------------------------------------
-.
-The following utility programs around
-.I groff
-are available.
-.
-.TP
-.BR \%addftinfo (@MAN1EXT@)
-Add information to
-.I troff
-font description files for use with
-.IR groff .
-.
-.TP
-.BR \%afmtodit (@MAN1EXT@)
-Create font description files for PostScript device.
-.
-.TP
-.BR \%eqn2graph (@MAN1EXT@)
-Convert an
-.B eqn
-image into a cropped image.
-.
-.TP
-.BR \%gdiffmk (@MAN1EXT@)
-Mark differences between
-.IR groff ,
-.IR nroff ,
-or
-.I troff
-files.
-.
-.TP
-.BR \%grap2graph (@MAN1EXT@)
-Convert a
-.B grap
-diagram into a cropped bitmap image.
-.
-.TP
-.BR \%groffer (@MAN1EXT@)
-General viewer program for
-.I groff
-files and man pages.
-.
-.TP
-.BR \%gxditview (@MAN1EXT@)
-The
-.I groff
-X viewer, the \f[CR]GNU\f[] version of
-.BR xditview .
-.
-.TP
-.BR \%hpftodit (@MAN1EXT@)
-Create font description files for lj4 device.
-.
-.TP
-.BR \%@g@indxbib (@MAN1EXT@)
-Make inverted index for bibliographic databases.
-.
-.TP
-.BR lkbib (@MAN1EXT@)
-Search bibliographic databases.
-.
-.TP
-.BR \%@g@lookbib (@MAN1EXT@)
-Interactively search bibliographic databases.
-.
-.TP
-.BR \%pdfroff (@MAN1EXT@)
-Create PDF documents using
-.BR groff .
-.
-.TP
-.BR \%pfbtops (@MAN1EXT@)
-Translate a PostScript font in \&.pfb format to \f[CR]ASCII\f[].
-.
-.TP
-.BR \%pic2graph (@MAN1EXT@)
-Convert a
-.B pic
-diagram into a cropped image.
-.
-.TP
-.BR \%tfmtodit (@MAN1EXT@)
-Create font description files for TeX DVI device.
-.
-.TP
-.BR \%xditview (1x)
-.I roff
-viewer distributed with X window.
-.
-.TP
-.BR \%xtotroff (@MAN1EXT@)
-Convert X font metrics into \f[CR]GNU\f[]
-.I troff
-font metrics.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-Normally, the path separator in the following environment variables is
-the colon; this may vary depending on the operating system.
-.
-For example, DOS and Windows use a semicolon instead.
-.
-.
-.TP
-.EnvVar GROFF_BIN_PATH
-This search path, followed by
-.EnvVar $PATH ,
-is used for commands that are executed by
-.BR groff .
-.
-If it is not set then the directory where the
-.I groff
-binaries were installed is prepended to
-.EnvVar PATH .
-.
-.
-.TP
-.EnvVar GROFF_COMMAND_PREFIX
-When there is a need to run different
-.I roff
-implementations at the same time
-.I groff
-provides the facility to prepend a prefix to most of its programs that
-could provoke name clashings at run time (default is to have none).
-.
-Historically, this prefix was the character
-.BR g ,
-but it can be anything.
-.
-For example,
-.BR gtroff
-stood for
-.IR groff \[aq]s
-.BR troff ,
-.BR gtbl
-for the
-.I groff
-version of
-.BR tbl .
-.
-By setting
-.EnvVar GROFF_COMMAND_PREFIX
-to different values, the different
-.I roff
-installations can be addressed.
-.
-More exactly, if it is set to prefix
-.I xxx
-then
-.B groff
-as a wrapper program internally calls
-.IB xxx troff
-instead of
-.BR troff .
-.
-This also applies to the preprocessors
-.BR eqn ,
-.BR grn ,
-.BR pic ,
-.BR \%refer ,
-.BR tbl ,
-.BR \%soelim ,
-and to the utilities
-.B \%@g@indxbib
-and
-.BR \%@g@lookbib .
-.
-This feature does not apply to any programs different from the ones
-above (most notably
-.B groff
-itself) since they are unique to the
-.I groff
-package.
-.
-.
-.TP
-.EnvVar GROFF_ENCODING
-The value of this environment value is passed to the
-.B preconv
-preprocessor to select the encoding of input files.
-.
-Setting this option implies
-.BR groff \[aq]s
-command line option
-.B \-k
-(this is,
-.B groff
-actually always calls
-.BR preconv ).
-.
-If set without a value,
-.B groff
-calls
-.B preconv
-without arguments.
-.
-An explicit
-.B \-K
-command line option overrides the value of
-.EnvVar GROFF_ENCODING .
-.
-See
-.BR preconv (@MAN1EXT@)
-for details.
-.
-.
-.TP
-.EnvVar GROFF_FONT_PATH
-A list of directories in which to search for the
-.BI dev name
-directory in addition to the default ones.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_font (@MAN5EXT@)
-for more details.
-.
-.
-.TP
-.EnvVar GROFF_TMAC_PATH
-A list of directories in which to search for macro files in addition
-to the default directories.
-.
-See
-.BR @g@troff (@MAN1EXT@)
-and
-.BR \%groff_tmac (@MAN5EXT@)
-for more details.
-.
-.
-.TP
-.EnvVar GROFF_TMPDIR
-The directory in which temporary files are created.
-.
-If this is not set but the environment variable
-.EnvVar TMPDIR
-instead, temporary files are created in the directory
-.EnvVar $TMPDIR .
-.
-On MS-DOS and Windows\~32 platforms, the environment variables
-.EnvVar TMP
-and
-.EnvVar TEMP
-(in that order) are searched also, after
-.EnvVar GROFF_TMPDIR
-and
-.EnvVar TMPDIR .
-.
-Otherwise, temporary files are created in
-.BR /tmp .
-.
-The
-.BR \%@g@refer (@MAN1EXT@),
-.BR \%groffer (@MAN1EXT@),
-.BR \%grohtml (@MAN1EXT@),
-and
-.BR grops (@MAN1EXT@)
-commands use temporary files.
-.
-.
-.TP
-.EnvVar GROFF_TYPESETTER
-Preset the default device.
-.
-If this is not set the
-.B @DEVICE@
-device is used as default.
-.
-This device name is overwritten by the option
-.BR \-T .
-.
-.
-.\" --------------------------------------------------------------------
-.SH EXAMPLES
-.\" --------------------------------------------------------------------
-.
-The following example illustrates the power of the
-.B groff
-program as a wrapper around
-.BR @g@troff .
-.
-.
-.P
-To process a
-.I roff
-file using the preprocessors
-.B tbl
-and
-.B pic
-and the
-.B me
-macro set, classical
-.I troff
-had to be called by
-.
-.IP
-.EX
-pic foo.me | tbl | troff \-me \-Tlatin1 | grotty
-.EE
-.
-.
-.P
-Using
-.BR groff ,
-this pipe can be shortened to the equivalent command
-.
-.IP
-.EX
-groff \-p \-t \-me \-T latin1 foo.me
-.EE
-.
-.
-.P
-An even easier way to call this is to use
-.BR grog (@MAN1EXT@)
-to guess the preprocessor and macro options and execute the generated
-command (by using backquotes to specify shell command substitution)
-.
-.IP
-.EX
-\`grog \-Tlatin1 foo.me\`
-.EE
-.
-.
-.P
-The simplest way is to view the contents in an automated way by
-calling
-.
-.IP
-.EX
-groffer foo.me
-.EE
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-On \f[CR]EBCDIC\f[] hosts (e.g., \f[CR]OS/390 Unix\f[]), output
-devices
-.B ascii
-and
-.B latin1
-aren\[aq]t available.
-.
-Similarly, output for \f[CR]EBCDIC\f[] code page
-.B cp1047
-is not available on \f[CR]ASCII\f[] based operating systems.
-.
-.
-.P
-Report bugs to
-.MT bug-groff@gnu.org
-the groff mailing list
-.ME .
-.
-Include a complete, self-contained example that allows the bug to
-be reproduced, and say which version of
-.I groff
-you are using.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "POSITIONS FROM INSTALLATION"
-.\" --------------------------------------------------------------------
-.
-There are some directories in which
-.I groff
-installs all of its data files.
-.
-Due to different installation habits on different operating systems,
-their locations are not absolutely fixed, but their function is
-clearly defined and coincides on all systems.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Collection of Installation Directories"
-.\" --------------------------------------------------------------------
-.
-This section describes the position of all files of the
-.I groff
-package after the installation \[em] got from
-.B Makefile.comm
-at the top of the
-.I groff
-source package.
-.
-.
-.TP
-.B @DEFAULT_INDEX@
-index directory and index name
-.TP
-.B @LEGACYFONTDIR@
-legacy font directory
-.TP
-.B @BINDIR@
-directory for binary programs
-.TP
-.B @SYSTEMMACRODIR@
-system tmac directory
-.TP
-.B @DOCDIR@
-documentation directory
-.TP
-.B @EXAMPLEDIR@
-directory for examples
-.TP
-.B @HTMLDOCDIR@
-documentation directory for html files
-.TP
-.B @PDFDOCDIR@
-documentation directory for pdf files
-.TP
-.B @DATASUBDIR@
-data subdirectory
-.TP
-.B @COMMON_WORDS_FILE@
-file for common words
-.TP
-.B @FONTDIR@
-directory for fonts
-.TP
-.B @OLDFONTDIR@
-directory for old fonts
-.TP
-.B @MACRODIR@
-tmac directory
-.TP
-.B @TMAC_MDIR@
-mm tmac directory
-.TP
-.B @LOCALFONTDIR@
-local font directory
-.TP
-.B @LOCALMACRODIR@
-local tmac directory
-.
-.
-.\" --------------------------------------------------------------------
-.SS "groff Macro Directory"
-.\" --------------------------------------------------------------------
-.
-This contains all information related to macro packages.
-.
-Note that more than a single directory is searched for those files
-as documented in
-.BR \%groff_tmac (@MAN5EXT@).
-.
-For the
-.I groff
-installation corresponding to this document, it is located at
-.IR @MACRODIR@ .
-.
-The following files contained in the
-.I groff macro directory
-have a special meaning:
-.
-.
-.TP
-.B troffrc
-Initialization file for
-.IR troff .
-.
-This is interpreted by
-.B @g@troff
-before reading the macro sets and any input.
-.
-.
-.TP
-.B troffrc-end
-Final startup file for
-.IR troff .
-.
-It is parsed after all macro sets have been read.
-.
-.
-.TP
-.IB name .tmac
-.TQ
-.BI tmac. name
-Macro file for macro package
-.IR name .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "groff Font Directory"
-.\" --------------------------------------------------------------------
-.
-This contains all information related to output devices.
-.
-Note that more than a single directory is searched for those files; see
-.BR @g@troff (@MAN1EXT@).
-.
-For the
-.I groff
-installation corresponding to this document, it is located at
-.IR @FONTDIR@ .
-.
-The following files contained in the
-.I "groff font directory"
-have a special meaning:
-.
-.
-.TP
-.BI dev name /DESC
-Device description file for device
-.IR name ,
-see
-.BR \%groff_font (@MAN5EXT@).
-.
-.
-.TP
-.BI dev name / F
-Font file for font
-.I F
-of device
-.IR name .
-.
-.
-.\" --------------------------------------------------------------------
-.SH AVAILABILITY
-.\" --------------------------------------------------------------------
-.
-Information on how to get
-.I groff
-and related information is available at the
-.UR http://\:www.gnu.org/\:software/\:groff
-groff GNU website
-.UE .
-.
-.P
-Three
-.I groff
-mailing lists are available:
-.IP
-.MT bug-groff@gnu.org
-for reporting bugs
-.ME .
-.
-.IP
-.MT groff@gnu.org
-for general discussion of
-.IR groff ,
-.ME .
-.IP
-.MT groff-commit@ffii.org
-the groff commit list
-.ME ,
-a read-only list showing logs of commitments to the groff repository.
-.
-.P
-Details on repository access and much more can be found in the file
-.B README
-at the top directory of the
-.I groff
-source package.
-.
-.
-.P
-There is a free implementation of the
-.B grap
-preprocessor, written by
-.MT faber@lunabase.org
-Ted Faber
-.ME .
-.
-The actual version can be found at the
-.
-.UR http://\:www.lunabase.org/\:\|\s+2~\s0faber/\:Vault/\:software/\:grap/
-grap website
-.UE .
-This is the only grap version supported by
-.IR groff .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.ad l
-.
-The
-.I groff info file
-contains all information on the
-.I groff
-system within a single document, providing many examples and
-background information.
-.
-See
-.BR info (1)
-on how to read it.
-.
-.
-.P
-Due to its complex structure, the
-.I groff
-system has many man pages.
-.
-They can be read with
-.BR man (1)
-or
-.BR \%groffer (@MAN1EXT@).
-.
-.P
-But there are special sections of
-.IR man-pages .
-.
-.I groff
-has man\-pages in sections
-.BR 1 , " 5" , and " 7" .
-.
-When there are several
-.I man\-pages
-with the same name in the same
-.I man
-section, the one with the lowest section is should as first.
-.
-The other man\-pages can be shown anyway by adding the section number
-as argument before the man-page name.
-.
-Reading the man-page about the
-.I groff
-language is done by one of
-.RS
-.nf
-.nh
-.EX
-.B man 7 groff
-.B groffer 7 groff
-.EE
-.hy
-.fi
-.RE
-.
-.TP
-Introduction, history and further readings:
-.BR roff (@MAN7EXT@).
-.
-.TP
-Viewer for groff files:
-.BR \%groffer (@MAN1EXT@),
-.BR \%gxditview (@MAN1EXT@),
-.BR \%xditview (1x).
-.
-.TP
-Wrapper programs for formatters:
-.BR \%groff (@MAN1EXT@),
-.BR \%grog (@MAN1EXT@).
-.
-.TP
-Roff preprocessors:
-.BR \%@g@eqn (@MAN1EXT@),
-.BR \%@g@grn (@MAN1EXT@),
-.BR \%@g@pic (@MAN1EXT@),
-.BR \%@g@chem (@MAN1EXT@),
-.BR \%preconv (@MAN1EXT@),
-.BR \%@g@refer (@MAN1EXT@),
-.BR \%@g@soelim (@MAN1EXT@),
-.BR \%@g@tbl (@MAN1EXT@),
-.BR grap (1).
-.
-.TP
-Roff language with the groff extensions:
-.BR \%groff (@MAN7EXT@),
-.BR \%groff_char (@MAN7EXT@),
-.BR \%groff_diff (@MAN7EXT@),
-.BR \%groff_font (@MAN5EXT@).
-.
-.TP
-Roff formatter programs:
-.BR \%@g@nroff (@MAN1EXT@),
-.BR \%@g@troff (@MAN1EXT@),
-.BR ditroff (@MAN7EXT@).
-.
-.TP
-The intermediate output language:
-.BR \%groff_out (@MAN7EXT@).
-.
-.TP
-Postprocessors for the output devices:
-.BR \%grodvi (@MAN1EXT@),
-.BR \%grohtml (@MAN1EXT@),
-.BR \%grolbp (@MAN1EXT@),
-.BR \%grolj4 (@MAN1EXT@),
-.BR \%lj4_font (@MAN5EXT@),
-.BR \%grops (@MAN1EXT@),
-.BR \%gropdf (@MAN1EXT@),
-.BR \%grotty (@MAN1EXT@).
-.
-.TP
-Groff macro packages and macro-specific utilities:
-.BR \%groff_tmac (@MAN5EXT@),
-.BR \%groff_man (@MAN7EXT@),
-.BR \%groff_mdoc (@MAN7EXT@),
-.BR \%groff_me (@MAN7EXT@),
-.BR \%groff_mm (@MAN7EXT@),
-.BR \%groff_mmse (@MAN7EXT@),
-.BR \%groff_mom (@MAN7EXT@),
-.BR \%groff_ms (@MAN7EXT@),
-.BR \%groff_www (@MAN7EXT@),
-.BR \%groff_trace (@MAN7EXT@),
-.BR \%mmroff (@MAN7EXT@).
-.
-.TP
-The following utilities are available:
-.BR \%addftinfo (@MAN1EXT@),
-.BR \%afmtodit (@MAN1EXT@),
-.BR \%eqn2graph (@MAN1EXT@),
-.BR \%gdiffmk (@MAN1EXT@),
-.BR \%grap2graph (@MAN1EXT@),
-.BR \%groffer (@MAN1EXT@),
-.BR \%gxditview (@MAN1EXT@),
-.BR \%hpftodit (@MAN1EXT@),
-.BR \%@g@indxbib (@MAN1EXT@),
-.BR \%lkbib (@MAN1EXT@),
-.BR \%@g@lookbib (@MAN1EXT@),
-.BR \%pdfroff (@MAN1EXT@),
-.BR \%pfbtops (@MAN1EXT@),
-.BR \%pic2graph (@MAN1EXT@),
-.BR \%tfmtodit (@MAN1EXT@),
-.BR \%xtotroff (@MAN1EXT@).
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING (LICENSE)
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs setup
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index d988a8c9a086e2d2fac36cd6b819f7d11d350641..2e3236f37dc5e2efa4a87beadc322774b8b3bc1c 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifdef HAVE_CONFIG_H
 #include <config.h>
@@ -77,6 +77,9 @@ extern char *strerror();
 
 #define error c_error
 
+/* Prototype */
+int run_pipeline(int, char ***, int);
+
 #ifdef __cplusplus
 extern "C" {
 #endif
@@ -166,7 +169,7 @@ const char *system_shell_dash_c(void)
 
   shell_name = system_shell_name();
 
-  /* Assume that if the shell name ends in `sh', it's Unixy */
+  /* Assume that if the shell name ends in 'sh', it's Unixy */
   if (strcasecmp(shell_name + strlen(shell_name) - strlen("sh"), "sh") == 0)
     dash_c = "-c";
   else
@@ -340,7 +343,7 @@ int run_pipeline(int ncommands, char ***commands, int no_pipe)
 
 #else  /* not _WIN32 */
 
-/* MSDOS doesn't have `fork', so we need to simulate the pipe by running
+/* MSDOS doesn't have 'fork', so we need to simulate the pipe by running
    the programs in sequence with standard streams redirected to and
    from temporary files.
 */
@@ -364,16 +367,16 @@ int run_pipeline(int ncommands, char ***commands, int no_pipe)
   int i, f, ret = 0;
 
   /* Choose names for a pair of temporary files to implement the pipeline.
-     Microsoft's `tempnam' uses the directory specified by `getenv("TMP")'
+     Microsoft's 'tempnam' uses the directory specified by 'getenv("TMP")'
      if it exists; in case it doesn't, try the GROFF alternatives, or
-     `getenv("TEMP")' as last resort -- at least one of these had better
+     'getenv("TEMP")' as last resort -- at least one of these had better
      be set, since Microsoft's default has a high probability of failure. */
   char *tmpdir;
   if ((tmpdir = getenv("GROFF_TMPDIR")) == NULL
       && (tmpdir = getenv("TMPDIR")) == NULL)
     tmpdir = getenv("TEMP");
 
-  /* Don't use `tmpnam' here: Microsoft's implementation yields unusable
+  /* Don't use 'tmpnam' here: Microsoft's implementation yields unusable
      file names if current directory is on network share with read-only
      root. */
   tmpfiles[0] = tempnam(tmpdir, NULL);
index b13a06dab01e58a911894c0cbe72613a53830d62..1d44c6acfe348bfba6d7881e560ac6af31a32f65 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifdef __cplusplus
 extern "C" {
diff --git a/src/roff/grog/Makefile.sub b/src/roff/grog/Makefile.sub
deleted file mode 100644 (file)
index 5c7a450..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-# Makefile.sub for `grog'
-
-# File position: <groff-source>/src/roff/grog/Makefile.sub
-
-# Copyright (C) 1993-2014  Free Software Foundation, Inc.
-
-# This file is part of `grog' which is part of `groff'.
-
-# `groff' 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 3 of the License, or
-# (at your option) any later version.
-
-# `groff' 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, see <http://www.gnu.org/licenses/>.
-
-########################################################################
-
-MAN1=grog.n
-MOSTLYCLEANADD=grog $(MAN1)
-
-# not all make programs have $(RM) predefined.
-RM=rm -f
-
-all: grog $(MAN1)
-
-# lib .pl-files
-GROG=$(srcdir)/subs.pl
-GROG_=`echo $(GROG) | sed 's|$(srcdir)/||g'`
-
-
-# Perl version works for all parts of `groff'.
-
-grog: grog.pl $(GROG) $(SH_DEPS_SED_SCRIPT)
-       $(RM) $@
-       sed -f "$(SH_DEPS_SED_SCRIPT)" \
-           -e "1s|^\(#! \).*perl|\\1$(PERL)|" \
-           -e "s|@g@|$(g)|g" \
-           -e "s|@BINDIR@|$(DESTDIR)$(bindir)|g" \
-           -e "s|@grog_dir@|$(DESTDIR)$(grog_dir)|g" \
-           -e "s|@EGREP@|$(EGREP)|g" \
-           -e "s|@VERSION@|$(version)$(revision)|" \
-           -e "$(SH_SCRIPT_SED_CMD)" \
-           $(srcdir)/grog.pl >$@
-       chmod +x $@
-
-.PHONY: install_data
-install_data: grog
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       $(RM) $(DESTDIR)$(bindir)/grog
-       $(INSTALL_SCRIPT) grog $(DESTDIR)$(bindir)/grog
-       -test -d $(DESTDIR)$(grog_dir) || $(mkinstalldirs) $(DESTDIR)$(grog_dir)
-       for f in $(GROG_); do \
-         $(RM) $(DESTDIR)$(grog_dir)/$$f; \
-         $(INSTALL_SCRIPT) $(srcdir)/$$f $(DESTDIR)$(grog_dir)/$$f; \
-       done
-
-.PHONY: uninstall_data
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/grog
-       -for f in $(GROG_); do \
-         $(RM) $(DESTDIR)$(grog_dir)/$$f; \
-       done
-       -d=$(DESTDIR)$(grog_dir);\
-         if test -d $$d; then rmdir $$d; fi
-
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/roff/grog/grog.1.man b/src/roff/grog/grog.1.man
new file mode 100644 (file)
index 0000000..5cfc4c4
--- /dev/null
@@ -0,0 +1,471 @@
+.TH GROG @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+grog \- guess options for a following groff command
+.
+.\" grog.man -> grog.1 - man page for grog (section 1)
+.\" Source file position:  <groff_source_top>/src/roff/grog/grog.man
+.\" Installed position:    <prefix>/share/man/man1/grog.1
+.
+.\" TODO: This page needs a thorough edit by a native English speaker.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of grog, which is part of groff, a free software
+.\" project.  You can redistribute it and/or modify it under the terms
+.\" of the GNU General Public License version 2 (GPL2) as published by
+.\" the Free Software Foundation.
+.\"
+.\" groff 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.
+.\"
+.\" The text for GPL2 is available in the internet at
+.\" <http://www.gnu.org/licenses/gpl2.0.txt>.
+.
+.
+.\" ====================================================================
+.\" Characters
+.\" ====================================================================
+.
+.\" Ellipsis ...
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
+.\" called with \*(EL
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY grog
+.OP \-C
+.OP \-T device
+.OP \-\-run
+.OP \-\-warnings
+.OP \-\-ligatures
+.RI [ groff-option
+\*(EL]
+.OP \-\-
+.RI [ filespec
+\*(EL]
+.YS
+.
+.SY grog
+.B \-h
+.SY grog
+.B \-\-help
+.YS
+.
+.SY grog
+.B \-v
+.SY grog
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B grog
+reads the input (file names or standard input) and guesses which of
+the
+.BR groff (@MAN1EXT@)
+options are needed to perform the input with the
+.B groff
+program.
+.
+A suitable device is now always written as
+.BI \-T device
+including the groff default as
+.BR "\-T ps" .
+.
+.
+.P
+The corresponding
+.B groff
+command is usually displayed in standard output.
+.
+With the option
+.BR \-\-run ,
+the generated line is output into standard error and the generated
+.B groff
+command is run on the
+.IR "standard output" .
+.
+.BR groffer (@MAN1EXT@)
+relies on a perfectly running
+.BR groff (@MAN1EXT@).
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+The option
+.B \-v
+or
+.B \-\-version
+prints information on the version number.
+.
+Also
+.B \-h
+or
+.B \-\-help
+prints usage information.
+.
+Both of these options automatically end the
+.B grog
+program.
+.
+Other options are thenignored, and no
+.B groff
+command line is generated.
+.
+.
+The following 3 options are the only
+.B grog
+options,
+.
+.TP
+.B \-C
+this option means enabling the
+.I groff
+compatibility mode, which is also transfered to the generated
+.B groff
+command line.
+.
+.TP
+.B \-\-ligatures
+this option forces to include the arguments
+.B \-P\-y \-PU
+within the generated
+.B groff
+command line.
+.
+.TP
+.B \-\-run
+with this option, the command line is output at standard error and
+then run on the computer.
+.
+.TP
+.B \-\-warnings
+with this option, some more warnings are output to standard error.
+.
+.
+.P
+All other specified short options (words starting with one minus
+character
+.BR \- )
+are interpreted as
+.B groff
+options or option clusters with or without argument.
+.
+No space is allowed between options and their argument.
+.
+Except from the
+.BI \-m arg
+options, all options will be passed on, i.e.\& they are included
+unchanged in the command for the output without effecting the work of
+.BR grog .
+.
+.
+.P
+A
+.I filespec
+argument can either be the name of an existing file or a single minus
+.B \-
+to mean standard input.
+.
+If no
+.I filespec
+is specified standard input is read automatically.
+.
+.
+.\" ====================================================================
+.SH DETAILS
+.\" ====================================================================
+.
+.B grog
+reads all
+.I filespec
+parameters as a whole.
+.
+It tries to guess which of the following
+.B groff
+options are required for running the input under
+.BR groff :
+.BR \-e ,
+.BR \-g ,
+.BR \-G ,
+.BR \-j ,
+.\" gideal is not implemented yet.
+.\" .BR \-J ,
+.BR \-p ,
+.BR \-R ,
+.BR \-s ,
+.B \-t
+(preprocessors); and
+.BR \-man ,
+.BR \-mdoc ,
+.BR \-mdoc\-old ,
+.BR \-me ,
+.BR \-mm ,
+.BR \-mom ,
+and
+.B \-ms
+(macro packages).
+.
+.
+.P
+The guessed
+.B groff
+command including those options and the found
+.I filespec
+parameters is put on the standard output.
+.
+.
+.P
+It is possible to specify arbitrary
+.B groff
+options on the command line.
+.
+These are passed on the output without change, except for the
+.BI \-m arg
+options.
+.
+.
+.P
+The
+.B groff
+program has trouble when the wrong
+.BI \-m arg
+option or several of these options are specified.
+.
+In these cases,
+.B grog
+will print an error message and exit with an error code.
+.
+It is better to specify no
+.BI \-m arg
+option.
+.
+Because such an option is only accepted and passed when
+.B grog
+does not find any of these options or the same option is found.
+.
+.
+.P
+If several different
+.BI \-m arg
+options are found by
+.B grog
+an error message is produced and the program is terminated with an
+error code.
+.
+But the output is written with the wrong options nevertheless.
+.
+.
+.P
+Remember that it is not necessary to determine a macro package.
+.
+A
+.I roff
+file can also be written in the
+.I groff
+language without any macro package.
+.
+.B grog
+will produce an output without an
+.BI \-m arg
+option.
+.
+.
+.P
+As
+.B groff
+also works with pure text files without any
+.I roff
+requests,
+.B grog
+cannot be used to identify a file to be a
+.I roff
+file.
+.
+.
+.P
+The
+.BR groffer  (@MAN1EXT@)
+program heavily depends on a working
+.BR grog .
+.
+.
+.\" ====================================================================
+.SH EXAMPLES
+.\" ====================================================================
+.
+Calling
+.RS
+.EX
+grog meintro.me
+.EE
+.RE
+results in
+.RS
+.EX
+groff \-me meintro.me
+.EE
+.RE
+.
+So
+.B grog
+recognized that the file
+.B meintro.me
+is written with the
+.B \-me
+macro package.
+.RE
+.
+.
+On the other hand,
+.RS
+.EX
+grog pic.ms
+.EE
+.RE
+.
+outputs
+.
+.RS
+.EX
+groff \-p \-t \-e \-ms pic.ms
+.EE
+.RE
+.
+Besides determining the macro package
+.BR \-ms ,
+.B grog
+recognized that the file
+.B pic.ms
+additionally needs
+.BR \-pte ,
+the combination of
+.B \-p
+for
+.IR pic ,
+.B \-t
+for
+.IR tbl ,
+and
+.B \-e
+for
+.IR eqn .
+.RE
+.
+.
+If both of the former example files are combined by the command
+.
+.RS
+.EX
+grog meintro.me pic.ms
+.EE
+.RE
+.
+an error message is sent to standard error because
+.B groff
+cannot work with two different macro packages:
+.
+.RS
+.ft CR
+grog: error: there are several macro packages: \-me \-ms
+.ft
+.RE
+.
+Additionally the corresponding output with the wrong options is printed
+to standard output:
+.
+.RS
+.EX
+groff \-pte \-me \-ms meintro.me pic.ms
+.EE
+.RE
+.
+But the program is terminated with an error code.
+.
+.
+The call of
+.
+.RS
+.EX
+grog \-ksS \-Tdvi grnexmpl.g
+.EE
+.RE
+.
+contains several
+.B groff
+options that are just passed on the output without any interface to
+.BR grog .
+These are the option cluster
+.B \-ksS
+consisting of
+.BR \-k ,
+.BR \-s ,
+and
+.BR \-S ;
+and the option
+.B \-T
+with argument
+.BR dvi .
+The output is
+.
+.RS
+.EX
+groff \-k \-s \-S \-Tdvi grnexmpl.g
+.EE
+.RE
+.
+so no additional option was added by
+.BR grog .
+As no option
+.BI \-m arg
+was found by
+.B grog
+this file does not use a macro package.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.B grog
+was originally written by James Clark.
+.
+The current Perl implementation was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME
+with contributions from Ralph Corderoy,
+and is maintained by
+.MT wl@\:gnu.org
+Werner Lemberg
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR groff (@MAN1EXT@),
+.BR groffer (@MAN1EXT@)
+.
+.
+.\" ====================================================================
+.\" Emacs settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/roff/grog/grog.am b/src/roff/grog/grog.am
new file mode 100644 (file)
index 0000000..63dae1b
--- /dev/null
@@ -0,0 +1,62 @@
+# grog.am for 'grog'
+#
+# File position: <groff-source>/src/roff/grog/grog.am
+#
+# Copyright (C) 1993-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of 'grog' which is part of 'groff'.
+#
+# 'groff' 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 3 of the License, or
+# (at your option) any later version.
+#
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+
+grog_srcdir = $(top_srcdir)/src/roff/grog
+bin_SCRIPTS += grog
+GROG = src/roff/grog/subs.pl
+
+# grog_dir is defined by a m4 macro
+grogdir = $(grog_dir)
+dist_grog_DATA = $(GROG)
+man1_MANS += src/roff/grog/grog.1
+EXTRA_DIST += \
+  src/roff/grog/grog.1.man \
+  src/roff/grog/grog.pl
+
+# Perl version works for all parts of 'groff'.
+
+grog: $(grog_srcdir)/grog.pl $(GROG) $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)$(RM) $@ \
+       && sed -f "$(SH_DEPS_SED_SCRIPT)" \
+              -e "1s|^\(#! \).*perl|\\1$(PERL)|" \
+              -e "s|[@]g[@]|$(g)|g" \
+              -e "s|[@]BINDIR[@]|$(DESTDIR)$(bindir)|g" \
+              -e "s|[@]libdir[@]|$(DESTDIR)$(libdir)|g" \
+              -e "s|[@]EGREP[@]|$(EGREP)|g" \
+              -e "s|[@]VERSION[@]|$(VERSION)|" \
+              -e "s|[@]grog_dir[@]|$(grog_dir)|" \
+              -e "$(SH_SCRIPT_SED_CMD)" \
+              $(grog_srcdir)/grog.pl \
+              >$@ \
+       && chmod +x $@
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/src/roff/grog/grog.man b/src/roff/grog/grog.man
deleted file mode 100644 (file)
index 0607dcb..0000000
+++ /dev/null
@@ -1,566 +0,0 @@
-.TH GROG @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-grog \(em guess options for a following groff command
-.\" The .SH was moved to this place in order to appease `apropos'.
-.
-.\" grog.man -> grog.1 - man page for grog (section 1)
-.\" Source file position:  <groff_source_top>/src/roff/grog/grog.man
-.\" Installed position:    <prefix>/share/man/man1/grog.1
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-This file is part of grog, which is part of groff, a free software
-project.  You can redistribute it and/or modify it under the terms of
-the GNU General Public License version 2 (GPL2) as published by the
-Free Software Foundation.
-
-groff 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.
-
-The text for GPL2 is available in the internet at
-.UR http://\:www.gnu.org/\:licenses/\:gpl-2.0.txt
-GNU copyleft site
-.UE .
-..
-.
-.de au
-Written by James Clark.
-
-Maintained by
-.MT wl@gnu.org
-Werner Lemberg
-.ME .
-
-Rewritten and put under GPL by
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.\" Characters
-.\" --------------------------------------------------------------------
-.
-.\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
-.\" called with \*(EL
-.
-.\" Bullet
-.ie t .ds BU \[bu]
-.el .ds BU *
-.\" used in `.IP \*(BU 2m' (former .Topic)
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY grog
-.OP \-C
-.OP \-\-run
-.OP \-\-warnings
-.OP \-\-ligatures
-.OP \& "\%groff\-option \*(EL"
-.OP \-\-
-.OP \& "\%filespec \*(EL"
-.YS
-.
-.BR "grog \-h " | " \-\-help"
-.br
-.BR "grog \-v " | " \-\-version"
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B grog
-reads the input (file names or standard input) and guesses which of
-the
-.BR groff (@MAN1EXT@)
-options are needed to perform the input with the
-.B groff
-program.
-.
-.
-.RS
-.P
-The corresponding
-.B groff
-command is usually displayed in standard output.
-.
-With the option
-.BR \-\-run ,
-the generated line is output into standard error and the generated
-.B groff
-command is run on the
-.IR "standard output" .
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-The option
-.B \-v
-or
-.B \-\-version
-prints information on the version number.
-.
-Also
-.B \-h
-or
-.B \-\-help
-prints usage information.
-.
-Both of these options automatically end the
-.B grog
-program.
-.
-Other options are thenignored, and no
-.B groff
-command line is generated.
-.
-.
-The following 3 options are the only
-.B grog
-options,
-.
-.TP
-.B \-C
-this option means enabling the
-.I groff
-compatibility mode, which is also transfered to the generated
-.B groff
-command line.
-.
-.TP
-.B \-\-ligatures
-this option forces to include the arguments
-.B -P-y -PU
-within the generated
-.B groff
-command line.
-.
-.TP
-.B \-\-run
-with this option, the command line is output at standard error and
-then run on the computer.
-.
-.TP
-.B \-\-warnings
-with this option, some more warnings are output to standard error.
-.
-.
-.P
-All other specified short options (words starting with one minus
-character
-.BR \- )
-are interpreted as
-.B groff
-options or option clusters with or without argument.
-.
-No space is allowed between options and their argument.
-.
-Except from the
-.BI \-m arg
-options, all options will be passed on, i.e.\& they are included
-unchanged in the command for the output without effecting the work of
-.BR grog .
-.
-.
-.P
-A
-.I filespec
-argument can either be the name of an existing file or a single minus
-.B \-
-to mean standard input.
-.
-If no
-.I filespec
-is specified standard input is read automatically.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DETAILS
-.\" --------------------------------------------------------------------
-.
-.B grog
-reads all
-.I filespec
-parameters as a whole.
-.
-It tries to guess which of the following
-.B groff
-options are required for running the input under
-.BR groff :
-.BR \-e ,
-.BR \-g ,
-.BR \-G ,
-.BR \-j ,
-.BR \-J ,
-.BR \-p ,
-.BR \-R ,
-.BR \-s ,
-.BR \-t .
-.BR \-man ,
-.BR \-mdoc,
-.BR \-mdoc-old,
-.BR \-me ,
-.BR \-mm ,
-.BR \-mom ,
-and
-.BR \-ms .
-.
-.
-.P
-The guessed
-.B groff
-command including those options and the found
-.I filespec
-parameters is put on the standard output.
-.
-.
-.P
-It is possible to specify arbitrary
-.B groff
-options on the command line.
-.
-These are passed on the output without change, except for the
-.BI \-m arg
-options.
-.
-.
-.P
-The
-.B groff
-program has trouble when the wrong
-.BI \-m arg
-option or several of these options are specified.
-.
-In these cases,
-.B grog
-will print an error message and exit with an error code.
-.
-It is better to specify no
-.BI \-m arg
-option.
-.
-Because such an option is only accepted and passed when
-.B grog
-does not find any of these options or the same option is found.
-.
-.
-.P
-If several different
-.BI \-m arg
-options are found by
-.B grog
-an error message is produced and the program is terminated with an
-error code.
-.
-But the output is written with the wrong options nevertheless.
-.
-.
-.P
-Remember that it is not necessary to determine a macro package.
-.
-A
-.I roff
-file can also be written in the
-.I groff
-language without any macro package.
-.
-.B grog
-will produce an output without an
-.BI \-m arg
-option.
-.
-.
-.P
-As
-.B groff
-also works with pure text files without any
-.I roff
-requests,
-.B grog
-cannot be used to identify a file to be a
-.I roff
-file.
-.
-.
-.P
-The
-.BR groffer  (@MAN1EXT@)
-program heavily depends on a working
-.BR grog .
-.
-.
-.P
-The
-.B grog
-source contains two files written in different programming languages:
-.
-.ft CB
-grog.pl
-.ft R
-is the
-.I Perl
-version, while
-.ft CB
-grog.sh
-.ft R
-is a shell script using
-.BR awk (1).
-During the run of
-.BR make (1),
-it is determined whether the system contains a suitable version of
-.BR perl (1).
-If so,
-.ft CB
-grog.pl
-.ft R
-is transformed into
-.BR grog ;
-otherwise
-.ft CB
-grog.sh
-.ft R
-is used instead.
-.
-.
-.\" --------------------------------------------------------------------
-.SH EXAMPLES
-.\" --------------------------------------------------------------------
-.
-.IP \*(BU 2m
-Calling
-.RS
-.IP
-.EX
-grog meintro.me
-.EE
-.RE
-.IP
-results in
-.RS
-.EX
-.IP
-groff \-me meintro.me
-.EE
-.RE
-.
-.IP
-So
-.B grog
-recognized that the file
-.B meintro.me
-is written with the
-.B \-me
-macro package.
-.RE
-.
-.
-.IP \*(BU 2m
-On the other hand,
-.RS
-.IP
-.EX
-grog pic.ms
-.EE
-.RE
-.
-.IP
-outputs
-.
-.RS
-.IP
-.EX
-groff \-p \-t \-e \-ms pic.ms
-.EE
-.RE
-.
-.IP
-Besides determining the macro package
-.BR \-ms ,
-.B grog
-recognized that the file
-.B pic.ms
-additionally needs
-.BR \-pte ,
-the combination of
-.B \-p
-for
-.IR pic ,
-.B \-t
-for
-.IR tbl ,
-and
-.B \-e
-for
-.IR eqn .
-.RE
-.
-.
-.IP \*(BU 2m
-If both of the former example files are combined by the command
-.
-.RS
-.IP
-.EX
-grog meintro.me pic.ms
-.EE
-.RE
-.
-.IP
-an error message is sent to standard error because
-.B groff
-cannot work with two different macro packages:
-.
-.RS
-.IP
-.ft CR
-grog: error: there are several macro packages: \-me \-ms
-.ft
-.RE
-.
-.IP
-Additionally the corresponding output with the wrong options is printed
-to standard output:
-.
-.RS
-.IP
-.EX
-groff \-pte \-me \-ms meintro.me pic.ms
-.EE
-.RE
-.
-.IP
-But the program is terminated with an error code.
-.
-.
-.IP \*(BU 2m
-The call of
-.
-.RS
-.IP
-.EX
-grog \-ksS \-Tdvi grnexmpl.g
-.EE
-.RE
-.
-.IP
-contains several
-.B groff
-options that are just passed on the output without any interface to
-.BR grog .
-These are the option cluster
-.B \-ksS
-consisting of
-.BR \-k ,
-.BR \-s ,
-and
-.BR \-S ;
-and the option
-.B \-T
-with argument
-.BR dvi .
-The output is
-.
-.RS
-.IP
-.EX
-groff \-k \-s \-S \-Tdvi grnexmpl.g
-.EE
-.RE
-.
-.IP
-so no additional option was added by
-.BR grog .
-As no option
-.BI \-m arg
-was found by
-.B grog
-this file does not use a macro package.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.ad l
-.
-.BR groff (@MAN1EXT@),
-.BR groffer (@MAN1EXT@)
-.BR @g@troff (@MAN1EXT@),
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@chem (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR @g@refer (@MAN1EXT@),
-.BR @g@grn (@MAN1EXT@),
-.BR grap (1),
-.BR @g@soelim (@MAN1EXT@)
-.
-.RS
-Man-pages of section 1 can be viewed with either
-.RS
-\[Do]
-.BI man " name"
-.RE
-for text mode or
-.RS
-\[Do]
-.BI groffer " name"
-.RE
-for graphical mode (default is PDF mode).
-.RE
-.
-.
-.P
-.BR groff_me (@MAN7EXT@),
-.BR groff_ms (@MAN7EXT@),
-.BR groff_mm (@MAN7EXT@),
-.BR groff_mom (@MAN7EXT@),
-.BR groff_man (@MAN7EXT@)
-.
-.RS
-Man-pages of section 7 can be viewed with either with
-.RS
-\[Do]
-.BI "man 7 " name
-.RE
-for text mode or
-.RS
-\[Do]
-.BI "groffer 7 " name
-.RE
-for graphical mode (default is PDF mode).
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH "AUTHORS"
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index fb7b54ce0d3f93a91bfaaf17a8bfd9d5e8e6c373..f7fb8e4bd90fad1aa664b69e62589b64790704b6 100644 (file)
@@ -6,26 +6,28 @@
 # Source file position: <groff-source>/src/roff/grog/grog.pl
 # Installed position: <prefix>/bin/grog
 
-# Copyright (C) 1993-201 Free Software Foundation, Inc.
-# Written by James Clark, maintained by Werner Lemberg.
+# Copyright (C) 1993-2018 Free Software Foundation, Inc.
+# Written by James Clark.
 # Rewritten with Perl by Bernd Warken <groff-bernd.warken-72@web.de>.
 # The macros for identifying the devices were taken from Ralph
-# Corderoy's `grog.sh' from 2006.
+# Corderoy's 'grog.sh' of 2006.
 
-# This file is part of `grog', which is part of `groff'.
+# Last update: 19 Jul 2015
 
-# `groff' is free software; you can redistribute it and/or modify it
+# This file is part of 'grog', which is part of 'groff'.
+
+# 'groff' 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.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see
+# along with this program.  If not, see
 # <http://www.gnu.org/licenses/gpl-2.0.html>.
 
 ########################################################################
@@ -38,7 +40,7 @@ use strict;
 # $Bin is the directory where this script is located
 use FindBin;
 
-my $before_make;       # script before run of `make'
+my $before_make;       # script before run of 'make'
 {
   my $at = '@';
   $before_make = 1 if '@VERSION@' eq "${at}VERSION${at}";
index 2220db76c5d87bec466acf59f95b0ff5bbccef26..966e35454f2e5ddc7a35fcf4ee78639556aee9da 100644 (file)
@@ -6,20 +6,22 @@
 # Source file position: <groff-source>/src/roff/grog/subs.pl
 # Installed position: <prefix>/lib/grog/subs.pl
 
-# Copyright (C) 1993-201 Free Software Foundation, Inc.
+# Copyright (C) 1993-2018 Free Software Foundation, Inc.
 # This file was split from grog.pl and put under GPL2 by
 #               Bernd Warken <groff-bernd.warken-72@web.de>.
 # The macros for identifying the devices were taken from Ralph
-# Corderoy's `grog.sh' of 2006.
+# Corderoy's 'grog.sh' of 2006.
 
-# This file is part of `grog', which is part of `groff'.
+# Last update: 10 Sep 2015
 
-# `groff' is free software; you can redistribute it and/or modify it
+# This file is part of 'grog', which is part of 'groff'.
+
+# 'groff' 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.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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.
@@ -40,6 +42,9 @@ use File::Spec;
 # printing of hashes: my %hash = ...; print Dumper(\%hash);
 use Data::Dumper;
 
+# for running shell based programs within Perl; use `` instead of
+# use IPC::System::Simple qw(capture capturex run runx system systemx);
+
 $\ = "\n";
 
 # my $Sp = "[\\s\\n]";
@@ -47,15 +52,16 @@ $\ = "\n";
 # my $Sp = '' if $arg eq '-C';
 my $Sp = '';
 
-# from `src/roff/groff/groff.cpp' near `getopt_long'
+# from 'src/roff/groff/groff.cpp' near 'getopt_long'
 my $groff_opts =
   'abcCd:D:eEf:F:gGhiI:jJkK:lL:m:M:n:No:pP:r:RsStT:UvVw:W:XzZ';
 
 my @Command = ();              # stores the final output
-my @Mparams = ();              # stores the options `-m*'
-my @devices = ();
-my $do_run = 0;                        # run generated `groff' command
-my $pdf_with_ligatures = 0;    # `-P-y -PU' for `pdf' device
+my @Mparams = ();              # stores the options '-m*'
+my @devices = ();              # stores -T
+
+my $do_run = 0;                        # run generated 'groff' command
+my $pdf_with_ligatures = 0;    # '-P-y -PU' for 'pdf' device
 my $with_warnings = 0;
 
 my $Prog = $0;
@@ -105,6 +111,7 @@ my %Groff =
    'AI' => 0,          # ms
    'AU' => 0,          # ms
    'NH' => 0,          # ms
+   'TH_later' => 0,    # TH not 1st command is ms
    'TL' => 0,          # ms
    'UL' => 0,          # ms
    'XP' => 0,          # ms
@@ -118,7 +125,7 @@ my %Groff =
    'OP' => 0,          # man
    'SS' => 0,          # man
    'SY' => 0,          # man
-   'TH' => 0,          # man
+   'TH_first' => 0,    # TH as 1st command is man
    'TP' => 0,          # man
    'UR' => 0,          # man
    'YS' => 0,          # man
@@ -164,6 +171,16 @@ my @filespec;
 my $tmac_ext = '';
 
 
+########################################################################
+# err()
+########################################################################
+
+sub err {
+  my $text = shift;
+  print STDERR $text;
+}
+
+
 ########################################################################
 # handle_args()
 ########################################################################
@@ -208,7 +225,7 @@ sub handle_args {
       next;
     }
 
-    # now $arg starts with `-'
+    # now $arg starts with '-'
 
     if ($arg eq '-') {
       unless ($was_minus) {
@@ -308,11 +325,11 @@ sub handle_file_ext {
     # test for each file name in the arguments
     unless ( open(FILE, $file eq "-" ? $file : "< $file") ) {
       print STDERR __FILE__ . ' ' .  __LINE__ . ': ' .
-       "$Prog: can't open \`$file\': $!";
+       "$Prog: can't open \'$file\': $!";
       next;
     }
 
-    next unless ( $file =~ /\./ ); # file name has no dot `.'
+    next unless ( $file =~ /\./ ); # file name has no dot '.'
 
 ##### handle_file_ext()
     # get extension
@@ -330,20 +347,20 @@ sub handle_file_ext {
     next if ( $ext =~ /^(
                         chem|
                         eqn|
-                        pic|
-                        tbl|
-                        ref|
-                        t|
-                        tr|
                         g|
-                        groff|
-                        roff|
-                        www|
-                        hdtbl|
                         grap|
                         grn|
+                        groff|
+                        hdtbl|
                         pdfroff|
-                        pinyin
+                        pic|
+                        pinyin|
+                        ref|
+                        roff|
+                        t|
+                        tbl|
+                        tr|
+                        www
                       )$/x );
 
 ##### handle_file_ext()
@@ -354,9 +371,9 @@ sub handle_file_ext {
                      n|
                      1b
                    )$/x ) {
-      # `man|n' from `groff' source
-      # `1b' from `heirloom'
-      # `[1-9lno]' from man-pages
+      # 'man|n' from 'groff' source
+      # '1b' from 'heirloom'
+      # '[1-9lno]' from man-pages
       if ( $tmac_ext && $tmac_ext ne 'man' ) {
        # found tmac is not 'man'
        print STDERR __FILE__ . ' ' .  __LINE__ . ': ' .
@@ -413,7 +430,7 @@ sub handle_whole_files {
   foreach my $file ( @filespec ) {
     unless ( open(FILE, $file eq "-" ? $file : "< $file") ) {
       print STDERR __FILE__ . ' ' .  __LINE__ . ': ' .
-       "$Prog: can't open \`$file\': $!";
+       "$Prog: can't open \'$file\': $!";
       next;
     }
     my $line = <FILE>; # get single line
@@ -430,7 +447,7 @@ sub handle_whole_files {
        # not an option line
        &do_line( $line, $file );
       }
-    } else { # emptry line
+    } else { # empty line
       next;
     }
 
@@ -447,13 +464,13 @@ sub handle_whole_files {
 # do_first_line()
 ########################################################################
 
-# As documented for the `man' program, the first line can be
+# As documented for the 'man' program, the first line can be
 # used as a groff option line.  This is done by:
 # - start the line with '\" (apostrophe, backslash, double quote)
 # - add a space character
-# - a word using the following characters can be appended: `egGjJpRst'.
+# - a word using the following characters can be appended: 'egGjJpRst'.
 #     Each of these characters means an option for the generated
-#     `groff' command line, e.g. `-t'.
+#     'groff' command line, e.g. '-t'.
 
 sub do_first_line {
   my ( $line, $file ) = @_;
@@ -537,6 +554,8 @@ sub do_first_line {
 # do_line()
 ########################################################################
 
+my $before_first_command = 1; # for check of .TH
+
 sub do_line {
   my ( $line, $file ) = @_;
 
@@ -551,6 +570,16 @@ sub do_line {
   return if ( $line =~ /^\.$/ );       # ignore .
   return if ( $line =~ /^\.\.$/ );     # ignore ..
 
+  if ( $before_first_command ) { # so far without 1st command
+    if ( $line =~ /^\.TH/ ) {
+      # check if .TH is 1st command for man
+      $Groff{'TH_first'} = 1 if ( $line =~ /^\.\s*TH/ );
+    }
+    if ( $line =~ /^\./ ) {
+      $before_first_command = 0;
+    }
+  }
+
   # split command
   $line =~ /^(\.\w+)\s*(.*)$/;
   my $command = $1;
@@ -562,12 +591,12 @@ sub do_line {
   ######################################################################
   # soelim
   if ( $line =~ /^\.(do)?\s*(so|mso|PS\s*<|SO_START).*$/ ) {
-    # `.so', `.mso', `.PS<...', `.SO_START'
+    # '.so', '.mso', '.PS<...', '.SO_START'
     $Groff{'soelim'}++;
     return;
   }
   if ( $line =~ /^\.(do)?\s*(so|mso|PS\s*<|SO_START).*$/ ) {
-    # `.do so', `.do mso', `.do PS<...', `.do SO_START'
+    # '.do so', '.do mso', '.do PS<...', '.do SO_START'
     $Groff{'soelim'}++;
     return;
   }
@@ -658,6 +687,12 @@ sub do_line {
     $Groff{'tbl'}++;           # for tbl
     return;
   }
+  if ( $command =~ /^\.TH$/ ) {
+    unless ( $Groff{'TH_first'} ) {
+      $Groff{'TH_later'}++;            # for tbl
+    }
+    return;
+  }
 
 
   ######################################################################
@@ -673,8 +708,8 @@ sub do_line {
   }
 
 ####### do_line()
-  # In the old version of -mdoc `Oo' is a toggle, in the new it's
-  # closed by `Oc'.
+  # In the old version of -mdoc 'Oo' is a toggle, in the new it's
+  # closed by 'Oc'.
   if ( $command =~ /^\.Oc$/ ) {
     $Groff{'Oc'}++;            # only for modern mdoc
     return;
@@ -777,10 +812,6 @@ sub do_line {
     $Groff{'SY'}++;
     return;
   }
-  if ( $command =~ /^\.TH$/ ) {
-    $Groff{'TH'}++;            # for man
-    return;
-  }
   if ( $command =~ /^\.TP$/ ) {        # for man
     $Groff{'TP'}++;
     return;
@@ -871,43 +902,37 @@ my $correct_tmac = '';
 sub make_groff_device {
   # globals: @devices
 
-  # default device is empty, i.e. it is `ps' when without `-T'
-  return '' unless ( @devices );
-
-  for ( @devices ) {
-    print STDERR __FILE__ . ' ' .  __LINE__ . ': ' .
-      $_ . ': not a suitable device'
-      unless (
-             /^(
-                dvi|
-                html|
-                xhtml|
-                lbp|
-                lj4|
-                ps|
-                pdf|
-                ascii|
-                cp1047|
-                latin1|
-                utf8
-              )$/x );
-  }
+  # default device is 'ps' when without '-T'
+  my $device;
+  push @devices, 'ps' unless ( @devices );
 
 ###### make_groff_device()
-  my $device = pop( @devices );
-  if ( @devices ) {
-    for ( @devices ) {
-      next if ( $_ eq $device );
-      print STDERR __FILE__ . ' ' .  __LINE__ . ': ' .
-       'additional device: ' . $_;
+  for my $d ( @devices ) {
+    if ( $d =~ /^(             # suitable devices
+                 dvi|
+                 html|
+                 xhtml|
+                 lbp|
+                 lj4|
+                 ps|
+                 pdf|
+                 ascii|
+                 cp1047|
+                 latin1|
+                 utf8
+               )$/x ) {
+###### make_groff_device()
+      $device = $d;
+    } else {
+      next;
     }
-    print STDERR __FILE__ . ' ' .  __LINE__ . ': ' .
-      'device ' . $device . ' taken instead';
-  }
 
-  return '' unless ( $device );
-  push @Command, '-T';
-  push @Command, $device;
+
+    if ( $device ) {
+      push @Command, '-T';
+      push @Command, $device;
+    }
+  }
 
 ###### make_groff_device()
   if ( $device eq 'pdf' ) {
@@ -917,11 +942,11 @@ sub make_groff_device {
     } else {   # no --ligature argument
       if ( $with_warnings ) {
        print STDERR <<EOF;
-If you have trouble with ligatures like `fi' in the `groff' output, you
+If you have trouble with ligatures like 'fi' in the 'groff' output, you
 can proceed as one of
-- add `grog' option `--with_ligatures' or
-- use the `grog' option combination `-P-y -PU' or
-- try to remove the font named similar to `fonts-texgyre' from your system.
+- add 'grog' option '--with_ligatures' or
+- use the 'grog' option combination '-P-y -PU' or
+- try to remove the font named similar to 'fonts-texgyre' from your system.
 EOF
       }        # end of warning
     }  # end of ligature
@@ -936,7 +961,7 @@ EOF
 sub make_groff_preproc {
   # globals: %Groff, @preprograms, @Command
 
-  # preprocessors without `groff' option
+  # preprocessors without 'groff' option
   if ( $Groff{'lilypond'} ) {
     push @preprograms, 'glilypond';
   }
@@ -947,7 +972,7 @@ sub make_groff_preproc {
     push @preprograms, 'gpinyin';
   }
 
-  # preprocessors with `groff' option
+  # preprocessors with 'groff' option
   if ( ( $Groff{'PS'} ||  $Groff{'PF'} ) &&  $Groff{'PE'} ) {
     $Groff{'pic'} = 1;
   }
@@ -985,9 +1010,9 @@ sub make_groff_preproc {
 sub make_groff_tmac_man_ms {
   # globals: @filespec, $tmac_ext, %Groff
 
-  # `man' requests, not from `ms'
+  # 'man' requests, not from 'ms'
   if ( $Groff{'SS'} || $Groff{'SY'} || $Groff{'OP'} ||
-       $Groff{'TH'} || $Groff{'TP'} || $Groff{'UR'} ) {
+       $Groff{'TH_first'} || $Groff{'TP'} || $Groff{'UR'} ) {
     $Groff{'man'} = 1;
     push(@m, '-man');
 
@@ -999,12 +1024,13 @@ sub make_groff_tmac_man_ms {
   }
 
 ###### make_groff_tmac_man_ms()
-  # `ms' requests, not from `man'
+  # 'ms' requests, not from 'man'
   if (
       $Groff{'1C'} || $Groff{'2C'} ||
       $Groff{'AB'} || $Groff{'AE'} || $Groff{'AI'} || $Groff{'AU'} ||
       $Groff{'BX'} || $Groff{'CD'} || $Groff{'DA'} || $Groff{'DE'} ||
-      $Groff{'DS'} || $Groff{'LD'} || $Groff{'ID'} || $Groff{'NH'} ||
+      $Groff{'DS'} || $Groff{'ID'} || $Groff{'LD'} || $Groff{'NH'} ||
+      $Groff{'TH_later'} ||
       $Groff{'TL'} || $Groff{'UL'} || $Groff{'XP'}
      ) {
     $Groff{'ms'} = 1;
@@ -1019,7 +1045,7 @@ sub make_groff_tmac_man_ms {
 
 ###### make_groff_tmac_man_ms()
 
-  # both `man' and `ms' requests
+  # both 'man' and 'ms' requests
   if ( $Groff{'P'} || $Groff{'IP'}  ||
        $Groff{'LP'} || $Groff{'PP'} || $Groff{'SH'} ) {
     if ( $tmac_ext eq 'man' ) {
@@ -1103,6 +1129,7 @@ sub make_groff_line_rest {
     $file_args_included = 0;
   }
 
+###### make_groff_line_rest()
   foreach (@Command) {
     next unless /\s/;
     # when one argument has several words, use accents
@@ -1110,6 +1137,7 @@ sub make_groff_line_rest {
   }
 
 
+###### make_groff_line_rest()
   ##########
   # -m arguments
   my $nr_m_guessed = scalar @m;
@@ -1118,7 +1146,6 @@ sub make_groff_line_rest {
       'argument for -m found: ' . @m;
   }
 
-###### make_groff_line()
 
   my $nr_m_args = scalar @Mparams;     # m-arguments for grog
   my $last_m_arg = ''; # last provided -m option
@@ -1127,13 +1154,14 @@ sub make_groff_line_rest {
     # ignore other -m arguments and the found ones
     $last_m_arg = $Mparams[-1];        # take the last -m argument
     print STDERR __FILE__ . ' ' .  __LINE__ . ': ' .
-      $Prog . ": more than 1 `-m' argument: @Mparams";
+      $Prog . ": more than 1 '-m' argument: @Mparams";
     print STDERR __FILE__ . ' ' .  __LINE__ . ': ' .
       'We take the last one: ' . $last_m_arg;
   } elsif ( $nr_m_args == 1 ) {
     $last_m_arg = $Mparams[0];
   }
 
+###### make_groff_line_rest()
   my $final_m = '';
   if ( $last_m_arg ) {
     my $is_equal = 0;
@@ -1154,7 +1182,7 @@ sub make_groff_line_rest {
        'The argument is taken.';
       $final_m = $last_m_arg;
     }
-###### make_groff_line()
+###### make_groff_line_rest()
   } else {     # no -m arg provided
     if ( $nr_m_guessed > 1 ) {
       print STDERR __FILE__ . ' ' .  __LINE__ . ': ' .
@@ -1172,7 +1200,7 @@ sub make_groff_line_rest {
   push(@Command, @filespec) unless ( $file_args_included );
 
   #########
-  # execute the `groff' command here with option `--run'
+  # execute the 'groff' command here with option '--run'
   if ( $do_run ) { # with --run
     print STDERR __FILE__ . ' ' .  __LINE__ . ': ' . "@Command";
     my $cmd = join ' ', @Command;
@@ -1182,7 +1210,7 @@ sub make_groff_line_rest {
   }
 
   exit 0;
-} # make_groff_line()
+} # make_groff_line_rest()
 
 
 ########################################################################
@@ -1194,24 +1222,24 @@ sub help {
 usage: grog [option]... [--] [filespec]...
 
 "filespec" is either the name of an existing, readable file or "-" for
-standard input.  If no `filespec' is specified, standard input is
-assumed automatically.  All arguments after a `--' are regarded as file
-names, even if they start with a `-' character.
+standard input.  If no 'filespec' is specified, standard input is
+assumed automatically.  All arguments after a '--' are regarded as file
+names, even if they start with a '-' character.
 
-`option' is either a `groff' option or one of these:
+'option' is either a 'groff' option or one of these:
 
 -h|--help      print this uasge message and exit
 -v|--version   print version information and exit
 
 -C             compatibility mode
---ligatures    include options `-P-y -PU' for internal font, which
-               preserverses the ligatures like `fi'
+--ligatures    include options '-P-y -PU' for internal font, which
+               preserves the ligatures like 'fi'
 --run          run the checked-out groff command
 --warnings     display more warnings to standard error
 
-All other options should be `groff' 1-character options.  These are then
-appended to the generated `groff' command line.  The `-m' options will
-be checked by `grog'.
+All other options should be 'groff' 1-character options.  These are then
+appended to the generated 'groff' command line.  The '-m' options will
+be checked by 'grog'.
 
 EOF
   exit 0;
diff --git a/src/roff/nroff/Makefile.sub b/src/roff/nroff/Makefile.sub
deleted file mode 100644 (file)
index 2768bba..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# Makefile.sub for `src roff nroff'
-#
-# File position: <groff-source>/src/roff/nroff/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-MAN1=nroff.n
-NAMEPREFIX=$(g)
-MOSTLYCLEANADD=nroff
-RM=rm -f
-
-all: nroff
-
-nroff: nroff.sh $(SH_DEPS_SED_SCRIPT)
-       $(RM) $@
-       sed -f $(SH_DEPS_SED_SCRIPT) \
-           -e $(SH_SCRIPT_SED_CMD) \
-           -e "s|@VERSION@|$(version)$(revision)|" $(srcdir)/nroff.sh >$@
-       chmod +x $@
-
-install_data: nroff
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       $(RM) $(DESTDIR)$(bindir)/$(NAMEPREFIX)nroff
-       $(INSTALL_SCRIPT) nroff $(DESTDIR)$(bindir)/$(NAMEPREFIX)nroff
-
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/$(NAMEPREFIX)nroff
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/roff/nroff/nroff.1.man b/src/roff/nroff/nroff.1.man
new file mode 100644 (file)
index 0000000..ebd9f32
--- /dev/null
@@ -0,0 +1,255 @@
+.TH @G@NROFF @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@nroff \- use groff to format documents for TTY devices
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY @g@nroff
+.RB [ \-CchipStUv ]
+[\c
+.BI \-d cs\c
+]
+[\c
+.BI \-M dir\c
+]
+[\c
+.BI \-m name\c
+]
+[\c
+.BI \-n num\c
+]
+[\c
+.BI \-o list\c
+]
+[\c
+.BI \-r cn\c
+]
+[\c
+.BI \-T name\c
+]
+[\c
+.BI \-W warning\c
+]
+[\c
+.BI \-w warning\c
+]
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.SY @g@nroff
+.B \-\-help
+.YS
+.
+.SY @g@nroff
+.B \-v
+.SY @g@nroff
+.B \-\-version
+.YS
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I @g@nroff
+formats documents written in the
+.IR roff (@MAN7EXT@)
+language for typewriter-like devices such as terminal emulators.
+.
+.P
+GNU
+.I @g@nroff
+emulates the traditional Unix
+.I nroff
+command using
+.IR groff (@MAN1EXT@).
+.
+.I @g@nroff
+generates output via
+.IR grotty (@MAN1EXT@),
+.IR groff 's
+TTY output device,
+which needs to know the character encoding scheme used by the terminal.
+.
+Consequently,
+acceptable arguments to the
+.B \-T
+option are
+.BR ascii ,
+.BR latin1 ,
+.BR utf8 ,
+and
+.BR cp1047 ;
+any others are ignored.
+.
+If neither the
+.I \%GROFF_TYPESETTER
+environment variable nor the
+.B \-T
+command-line option (which overrides the environment variable)
+specifies a (valid) device,
+.I @g@nroff
+consults the locale to select an appropriate output device.
+.
+It first tries the
+.IR locale (1)
+program,
+then checks several locale-related environment variables;
+see \(lqENVIRONMENT\(rq, below.
+.
+If all of the foregoing fail,
+.B \-Tascii
+is implied.
+.
+.
+.P
+Whitespace is not permitted between an option and its argument.
+.
+The
+.B \-h
+and
+.B \-c
+options
+are equivalent to
+.IR grotty 's
+options
+.B \-h
+(using tabs in the output) and
+.B \-c
+(using the old output scheme instead of SGR escape sequences).
+.
+The
+.BR \-d ,
+.BR \-C ,
+.BR \-i ,
+.BR \-M ,
+.BR \-m ,
+.BR \-n ,
+.BR \-o ,
+.BR \-r ,
+.BR \-w ,
+and
+.B \-W
+options have the effect described in
+.IR @g@troff (@MAN1EXT@).
+.
+In addition,
+.I @g@nroff
+ignores
+.BR \-e ,
+.BR \-q ,
+and
+.B \-s
+(which are not implemented in
+.IR @g@troff ).
+.
+The options
+.B \-p
+(pic),
+.B \-t
+(tbl),
+.B \-S
+(safer), and
+.B \-U
+(unsafe) are passed to
+.IR groff .
+.
+.B \-v
+and
+.B \-\-version
+show version information,
+while
+.B \-\-help
+displays a usage message;
+all exit afterward.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROFF_TYPESETTER
+specifies the default output device for
+.IR groff .
+.
+.
+.TP
+.I GROFF_BIN_PATH
+is a colon-separated list of directories in which to search for the
+.I groff
+executable before searching in
+.IR PATH .
+.
+If unset,
+.I @BINDIR@
+is used.
+.
+.
+.TP
+.I LC_ALL
+.TQ
+.I LC_CTYPE
+.TQ
+.I LANG
+.TQ
+.I LESSCHARSET
+are pattern-matched in this order for standard character encodings
+supported by
+.I groff
+in the event no
+.B \-T
+option is given and
+.I GROFF_TYPESETTER
+is unset.
+.
+.
+.\" ====================================================================
+.SH NOTES
+.\" ====================================================================
+.
+Character definitions in the file
+.I @MACRODIR@/\:tty\-char.tmac
+are loaded to replace unrepresentable glyphs.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR groff (@MAN1EXT@),
+.IR @g@troff (@MAN1EXT@),
+.IR grotty (@MAN1EXT@),
+.IR locale (1),
+.IR roff (@MAN7EXT@)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/roff/nroff/nroff.am b/src/roff/nroff/nroff.am
new file mode 100644 (file)
index 0000000..8f7a51b
--- /dev/null
@@ -0,0 +1,41 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_SCRIPTS += nroff
+nroff_srcdir = $(top_srcdir)/src/roff/nroff
+PREFIXMAN1 += src/roff/nroff/nroff.1
+EXTRA_DIST += \
+  src/roff/nroff/nroff.1.man \
+  src/roff/nroff/nroff.sh
+
+nroff: $(nroff_srcdir)/nroff.sh $(SH_DEPS_SED_SCRIPT)
+       $(AM_V_GEN)rm -f $@ \
+       && sed -f $(SH_DEPS_SED_SCRIPT) \
+              -e $(SH_SCRIPT_SED_CMD) \
+              -e "s|[@]VERSION[@]|$(VERSION)|" \
+              $(nroff_srcdir)/nroff.sh \
+              >$@ \
+       && chmod +x $@
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
diff --git a/src/roff/nroff/nroff.man b/src/roff/nroff/nroff.man
deleted file mode 100644 (file)
index d746943..0000000
+++ /dev/null
@@ -1,210 +0,0 @@
-.TH @G@NROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@nroff \- emulate nroff command with groff
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.\" Redefine OP because no spaces are allowed after an option's argument.
-.de OP
-.  ie \\n(.$-1 \
-.    RI "[\fB\\$1\fP" "\\$2" "]"
-.  el \
-.    RB "[" "\\$1" "]"
-..
-
-.SY @g@nroff
-.OP \-CchipStUvwW
-.OP \-d cs
-.OP \-M dir
-.OP \-m name
-.OP \-n num
-.OP \-o list
-.OP \-r cn
-.OP \-T name
-.RI [ file\~ .\|.\|.]
-.
-.SY @g@nroff
-.B \-\-help
-.
-.SY @g@nroff
-.B \-v
-|
-.B \-\-version
-.YS
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.B @g@nroff
-script emulates the
-.B nroff
-command using groff.
-.
-Only
-.BR ascii ,
-.BR latin1 ,
-.BR utf8 ,
-and
-.B cp1047
-are devices accepted by
-.BR nroff
-to select the output encoding emitted by
-.BR grotty ,
-groff\[aq]s TTY output device.
-.
-If neither the
-.B GROFF_TYPESETTER
-environment variable nor the
-.B \-T
-command line option (which overrides the environment variable)
-specifies a (valid) device,
-.B @g@nroff
-checks the current locale to select a default output device.
-.
-It first tries the
-.B locale
-program, then the environment variables
-.BR LC_ALL ,
-.BR LC_CTYPE ,
-and
-.BR LANG ,
-and finally the
-.B LESSCHARSET
-environment variable.
-.
-.
-.PP
-The
-.B \-h
-and
-.B \-c
-options
-are equivalent to
-.BR grotty \[aq]s
-options
-.B \-h
-(using tabs in the output) and
-.B \-c
-(using the old output scheme instead of SGR escape sequences).
-.
-The
-.BR \-d ,
-.BR \-C ,
-.BR \-i ,
-.BR \-M ,
-.BR \-m ,
-.BR \-n ,
-.BR \-o ,
-.BR \-r ,
-.BR \-w ,
-and
-.B \-W
-options have the effect described in
-.BR @g@troff (@MAN1EXT@).
-.
-In addition,
-.B @g@nroff
-silently ignores the options
-.BR \-e ,
-.BR \-q ,
-and
-.BR \-s
-(which are not implemented in
-.BR @g@troff ).
-.
-Options
-.B \-p
-(pic),
-.B \-t
-(tbl),
-.B \-S
-(safer), and
-.B \-U
-(unsafe) are passed to
-.BR groff .
-.
-.B \-v
-and
-.B \-\-version
-show the version number,
-.B \-\-help
-prints a help message.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.SM
-.B GROFF_TYPESETTER
-The default device for
-.BR groff .
-If not set (which is the normal case), it defaults to \[oq]ps\[cq].
-.
-.TP
-.SM
-.B GROFF_BIN_PATH
-A colon separated list of directories in which to search for the
-.B groff
-executable before searching in PATH.
-.
-If unset, \[oq]@BINDIR@\[cq] is used.
-.
-.
-.\" --------------------------------------------------------------------
-.SH NOTES
-.\" --------------------------------------------------------------------
-.
-This shell script is basically intended for use with
-.BR man (1).
-nroff-style character definitions (in the file tty-char.tmac) are also
-loaded to emulate unrepresentable glyphs.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR grotty (@MAN1EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index fb227b31a62e778ffcf88e7e9322dbe10f36ee7a..523c453172c8786d1a6905feba813e97ed8d6242 100644 (file)
@@ -1,24 +1,24 @@
 #! /bin/sh
 # Emulate nroff with groff.
 #
-# Copyright (C) 1992-201 Free Software Foundation, Inc.
+# Copyright (C) 1992-2018 Free Software Foundation, Inc.
 #
-# Written by James Clark, maintained by Werner Lemberg.
+# Written by James Clark.
 
-# This file is of `groff'.
+# This file is of 'groff'.
 
-# `groff' is free software; you can redistribute it and/or modify it
+# 'groff' is free software; you can redistribute it and/or modify it
 # under the terms of the GNU General Public License (GPL) as published
 # by the Free Software Foundation, either version 3 of the License, or
 # (at your option) any later version.
 
-# `groff' is distributed in the hope that it will be useful, but
+# 'groff' 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 prog="$0"
 
@@ -27,7 +27,7 @@ prog="$0"
 # Check the GROFF_TYPESETTER environment variable.
 Tenv=$GROFF_TYPESETTER
 
-# Try the `locale charmap' command first because it is most reliable.
+# Try the 'locale charmap' command first because it is most reliable.
 # On systems where it doesn't exist, look at the environment variables.
 case "`exec 2>/dev/null ; locale charmap`" in
   UTF-8)
@@ -59,7 +59,7 @@ case "`exec 2>/dev/null ; locale charmap`" in
     esac ;;
 esac
 
-# `for i; do' doesn't work with some versions of sh
+# 'for i; do' doesn't work with some versions of sh
 
 Topt=
 opts=
@@ -81,10 +81,10 @@ for i
     -T*)
       Topt=$1 ;;
     -u*)
-      # Solaris 2.2 through at least Solaris 9 `man' invokes
-      # `nroff -u0 ... | col -x'.  Ignore the -u0,
-      # since `less' and `more' can use the emboldening info.
-      # However, disable SGR, since Solaris `col' mishandles it.
+      # Solaris 2.2 through at least Solaris 9 'man' invokes
+      # 'nroff -u0 ... | col -x'.  Ignore the -u0,
+      # since 'less' and 'more' can use the emboldening info.
+      # However, disable SGR, since Solaris 'col' mishandles it.
       opts="$opts -P-c" ;;
     -v | --version)
       echo "GNU nroff (groff) version @VERSION@"
@@ -123,8 +123,8 @@ case $T in
     T=-T$Tloc ;;
 esac
 
-# Set up the `GROFF_BIN_PATH' variable
-# to be exported in the current `GROFF_RUNTIME' environment.
+# Set up the 'GROFF_BIN_PATH' variable
+# to be exported in the current 'GROFF_RUNTIME' environment.
 
 @GROFF_BIN_PATH_SETUP@
 export GROFF_BIN_PATH
diff --git a/src/roff/troff/Makefile.sub b/src/roff/troff/Makefile.sub
deleted file mode 100644 (file)
index b8298bf..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-# Makefile.sub for `src roff troff'
-#
-# File position: <groff-source>/src/roff/troff/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=troff$(EXEEXT)
-MAN1=troff.n
-XLIBS=$(LIBGROFF) $(LIBGNU)
-MLIB=$(LIBM)
-OBJS=\
-  dictionary.$(OBJEXT) \
-  div.$(OBJEXT) \
-  env.$(OBJEXT) \
-  input.$(OBJEXT) \
-  majorminor.$(OBJEXT) \
-  mtsm.$(OBJEXT) \
-  node.$(OBJEXT) \
-  number.$(OBJEXT) \
-  reg.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/dictionary.cpp \
-  $(srcdir)/div.cpp \
-  $(srcdir)/env.cpp \
-  $(srcdir)/input.cpp \
-  majorminor.cpp \
-  $(srcdir)/mtsm.cpp \
-  $(srcdir)/node.cpp \
-  $(srcdir)/number.cpp \
-  $(srcdir)/reg.cpp
-HDRS=\
-  $(srcdir)/charinfo.h \
-  $(srcdir)/dictionary.h \
-  $(srcdir)/div.h \
-  $(srcdir)/env.h \
-  $(srcdir)/hvunits.h \
-  $(srcdir)/input.h \
-  $(srcdir)/mtsm.h \
-  $(srcdir)/node.h \
-  $(srcdir)/reg.h \
-  $(srcdir)/request.h \
-  $(srcdir)/token.h \
-  $(srcdir)/troff.h
-GENSRCS=majorminor.cpp
-NAMEPREFIX=$(g)
-RM=rm -f
-
-majorminor.cpp: $(top_srcdir)/VERSION $(top_srcdir)/REVISION
-       @echo Making $@
-       @$(RM) $@
-       @echo const char \*major_version = \
-         \"`sed -e 's/^\([^.]*\)\..*$$/\1/' $(top_srcdir)/VERSION`\"\; >$@
-       @echo const char \*minor_version = \
-          \"`sed -e 's/^[^.]*\.\([0-9]*\).*$$/\1/' $(top_srcdir)/VERSION`\"\; \
-          >>$@
-       @echo const char \*revision = \"`cat $(top_srcdir)/REVISION`\"\; >>$@
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index bc4c829302485cc1a1d266479c0f44cbb1363e0b..630113fcc4911174f2e61c1a7940a78066cacf78 100644 (file)
@@ -73,11 +73,11 @@ Request to set character slant.
 Provide some way to upcase or downcase strings.
 
 Support non-uniformly scalable fonts. Perhaps associate a suffix with
-a particular range of sizes.  eg
+a particular range of sizes.  E.g.,
   sizesuffix .display 14-512
 Then is you ask for R at pointsize 16, groff will first look for
 R.display and then R.  Probably necessary to be able to specify a
-separate unitwidth for each sizesuffix (eg. for X).
+separate unitwidth for each sizesuffix (e.g., uuu for X).
 
 Make it possible to suppress hyphenation on a word-by-word basis.
 (Perhaps store hyphenation flags in tfont.)
@@ -106,7 +106,7 @@ Request to remove an environment. (Maintain a count of the references
 to the environment from the environment table, environment dictionary
 or environment stack.)
 
-Perhaps in the nr request a leading `-' should only be recognized as a
+Perhaps in the nr request a leading '-' should only be recognized as a
 decrement when it's at the same input level as the request.
 
 Don't ever change a charinfo.  Create new variants instead and chain
@@ -121,6 +121,6 @@ More thorough range checking.
 
 Provide syntax for octal and hexadecimal numeric constants.  Perhaps
 o#100 and x#7f as per Scheme.  Or perhaps PostScript 16#7f.  Ambiguity
-between whether `c' is treated as digit or scaling indicator.
+between whether 'c' is treated as digit or scaling indicator.
 
 Local variables.
index f3cc9993202321554e48aabefc7d6f9e91e1318f..38b9d75f5c6f068d1998533827ad8297af332c49 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,12 +15,12 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include <vector>
 #include <utility>
 
-extern int class_flag; // set if there was a call to `.class'
+extern int class_flag; // set if there was a call to '.class'
 extern void get_flags();
 
 class macro;
@@ -45,7 +45,7 @@ class charinfo : glyph {
   std::vector<charinfo *> nested_classes;
 public:
   enum {               // Values for the flags bitmask.  See groff
-                       // manual, description of the `.cflags' request.
+                       // manual, description of the '.cflags' request.
     ENDS_SENTENCE = 0x01,
     BREAK_BEFORE = 0x02,
     BREAK_AFTER = 0x04,
index 20ed3f9456106c3ba85e1cb7c729c1c4eee0fcad..dd658fa666b24e80dd6ffdfc82ec754fb24ac96a 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #ifdef COLUMN
 
index 538531ae7ec59a976d324811a55ebc4ba5584505..d42e2d6cc67cfec7eb46eca89a85da4d0a86da6a 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,13 +15,13 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 #include "troff.h"
 #include "dictionary.h"
-  
-// is `p' a good size for a hash table
+
+// is 'p' a good size for a hash table
 
 static int is_good_size(unsigned int p)
 {
index 422a58ee9a7aebe8d879c0d18e7b471b17fa3949..c5c87949e36a2b24d143d5f0da08c4885e3b5114 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 
index bf62d6283946ff8f01a8b045d2fe78cf26431cda..66382a85fd11575675234931260933b95234327c 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 // diversions
@@ -178,12 +178,12 @@ macro_diversion::macro_diversion(symbol s, int append)
 {
 #if 0
   if (append) {
-    /* We don't allow recursive appends eg:
+    /* We don't allow recursive appends, e.g.:
 
       .da a
       .a
       .di
-      
+
       This causes an infinite loop in troff anyway.
       This is because the user could do
 
@@ -202,9 +202,9 @@ macro_diversion::macro_diversion(symbol s, int append)
       .a
       .di
 
-       will work and will make `a' contain two copies of what it contained
-       before; in troff, `a' would contain nothing. */
-    request_or_macro *rm 
+       will work and will make 'a' contain two copies of what it contained
+       before; in troff, 'a' would contain nothing. */
+    request_or_macro *rm
       = (request_or_macro *)request_dictionary.remove(s);
     if (!rm || (mac = rm->to_macro()) == 0)
       mac = new macro;
@@ -217,7 +217,7 @@ macro_diversion::macro_diversion(symbol s, int append)
   // stored in the macro. When we detect this, we copy the contents.
   mac = new macro(1);
   if (append) {
-    request_or_macro *rm 
+    request_or_macro *rm
       = (request_or_macro *)request_dictionary.lookup(s);
     if (rm) {
       macro *m = rm->to_macro();
@@ -547,7 +547,7 @@ void top_level_diversion::print_traps()
 void end_diversions()
 {
   while (curdiv != topdiv) {
-    error("automatically ending diversion `%1' on exit",
+    error("automatically ending diversion '%1' on exit",
            curdiv->nm.contents());
     diversion *tem = curdiv;
     curdiv = curdiv->prev;
index 58616563fd40df6850a8725dbdfdf6ef07352259..2dca6dd3bd22902815dc0175f965ebd3494ece6e 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 void do_divert(int append, int boxing);
 void end_diversions();
index 9fbd5921e0fcc45e30937a0a186709b706b760aa..c11d2dfc1e08156c105084a9f1fda5faf1a9f81b 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "troff.h"
 #include "dictionary.h"
@@ -38,7 +38,17 @@ symbol default_family("T");
 
 enum { ADJUST_LEFT = 0, ADJUST_BOTH = 1, ADJUST_CENTER = 3, ADJUST_RIGHT = 5 };
 
-enum { HYPHEN_LAST_LINE = 2, HYPHEN_LAST_CHARS = 4, HYPHEN_FIRST_CHARS = 8 };
+enum {
+  // Not all combinations are valid; see hyphenate_request() below.
+  HYPHEN_NONE = 0,
+  HYPHEN_DEFAULT = 1,
+  HYPHEN_NOT_LAST_LINE = 2,
+  HYPHEN_NOT_LAST_CHARS = 4,
+  HYPHEN_NOT_FIRST_CHARS = 8,
+  HYPHEN_LAST_CHAR = 16,
+  HYPHEN_FIRST_CHAR = 32,
+  HYPHEN_MAX = 63,
+};
 
 struct env_list {
   environment *env;
@@ -695,7 +705,7 @@ environment::environment(symbol nm)
   if (!is_good_fontno(1))
     fatal("font number 1 not a valid font");
   if (family->make_definite(1) < 0)
-    fatal("invalid default family `%1'", default_family.contents());
+    fatal("invalid default family '%1'", default_family.contents());
   prev_fontno = fontno;
 }
 
@@ -777,7 +787,7 @@ environment::environment(const environment *e)
   suppress_next_eol(e->suppress_next_eol),
   seen_break(e->seen_break),
   tabs(e->tabs),
-  name(e->name),               // so that eg `.if "\n[.ev]"0"' works
+  name(e->name),               // so that, e.g., '.if "\n[.ev]"0"' works
   control_char(e->control_char),
   no_break_control_char(e->no_break_control_char),
   hyphen_indicator_char(e->hyphen_indicator_char)
@@ -1259,7 +1269,7 @@ void override_sizes()
        break;
       // fall through
     default:
-      warning(WARN_RANGE, "bad size range `%1'", p);
+      warning(WARN_RANGE, "bad size range '%1'", p);
       return;
     }
     if (i + 2 > n) {
@@ -1651,8 +1661,20 @@ void no_hyphenate()
 void hyphenate_request()
 {
   int n;
-  if (has_arg() && get_integer(&n))
-    curenv->hyphenation_flags = n;
+  if (has_arg() && get_integer(&n)) {
+    if (n < HYPHEN_NONE) {
+      warning(WARN_RANGE, "negative hyphenation flags ignored: %1", n);
+    } else if (n > HYPHEN_MAX) {
+      warning(WARN_RANGE, "unknown hyphenation flags ignored (maximum "
+       "%1): %2", HYPHEN_MAX, n);
+    } else if (((n & HYPHEN_DEFAULT) && (n & ~HYPHEN_DEFAULT))
+       || ((n & HYPHEN_FIRST_CHAR) && (n & HYPHEN_NOT_FIRST_CHARS))
+       || ((n & HYPHEN_LAST_CHAR) && (n & HYPHEN_NOT_LAST_CHARS)))
+      warning(WARN_SYNTAX, "contradictory hyphenation flags ignored: "
+       "%1", n);
+    else
+      curenv->hyphenation_flags = n;
+  }
   else
     curenv->hyphenation_flags = 1;
   skip_line();
@@ -1690,8 +1712,8 @@ void environment::newline()
       prev_fontno = fontno;
       fontno = pre_underline_fontno;
       if (underline_spaces) {
-        underline_spaces = 0;
-        add_node(do_underline_special(0));
+       underline_spaces = 0;
+       add_node(do_underline_special(0));
       }
     }
   }
@@ -2020,10 +2042,14 @@ void environment::hyphenate_line(int start_here)
   if (hyphenation_flags != 0
       && !inhibit
       // this may not be right if we have extra space on this line
-      && !((hyphenation_flags & HYPHEN_LAST_LINE)
+      && !((hyphenation_flags & HYPHEN_NOT_LAST_LINE)
           && (curdiv->distance_to_next_trap()
               <= vertical_spacing + total_post_vertical_spacing()))
-      && i >= 4)
+      && i >= (4
+              - (hyphenation_flags & HYPHEN_FIRST_CHAR ? 1 : 0)
+              - (hyphenation_flags & HYPHEN_LAST_CHAR ? 1 : 0)
+              + (hyphenation_flags & HYPHEN_NOT_FIRST_CHARS ? 1 : 0)
+              + (hyphenation_flags & HYPHEN_NOT_LAST_CHARS ? 1 : 0)))
     hyphenate(sl, hyphenation_flags);
   while (forward != 0) {
     node *tem1 = forward;
@@ -2227,15 +2253,15 @@ node *environment::make_tag(const char *nm, int i)
 void environment::dump_troff_state()
 {
 #define SPACES "                                            "
-  fprintf(stderr, SPACES "register `in' = %d\n", curenv->indent.to_units());
+  fprintf(stderr, SPACES "register 'in' = %d\n", curenv->indent.to_units());
   if (curenv->have_temporary_indent)
-    fprintf(stderr, SPACES "register `ti' = %d\n",
+    fprintf(stderr, SPACES "register 'ti' = %d\n",
            curenv->temporary_indent.to_units());
-  fprintf(stderr, SPACES "centered lines `ce' = %d\n", curenv->center_lines);
-  fprintf(stderr, SPACES "register `ll' = %d\n",
+  fprintf(stderr, SPACES "centered lines 'ce' = %d\n", curenv->center_lines);
+  fprintf(stderr, SPACES "register 'll' = %d\n",
          curenv->line_length.to_units());
-  fprintf(stderr, SPACES "fill `fi=1/nf=0' = %d\n", curenv->fill);
-  fprintf(stderr, SPACES "page offset `po' = %d\n",
+  fprintf(stderr, SPACES "fill 'fi=1/nf=0' = %d\n", curenv->fill);
+  fprintf(stderr, SPACES "page offset 'po' = %d\n",
          topdiv->get_page_offset().to_units());
   fprintf(stderr, SPACES "seen_break = %d\n", curenv->seen_break);
   fprintf(stderr, SPACES "seen_space = %d\n", curenv->seen_space);
@@ -2485,7 +2511,7 @@ void adjust()
          warning(WARN_RANGE, "negative adjustment mode");
        else if (n > 5) {
          curenv->adjust_mode = 5;
-         warning(WARN_RANGE, "adjustment mode `%1' out of range", n);
+         warning(WARN_RANGE, "adjustment mode '%1' out of range", n);
        }
        else
          curenv->adjust_mode = n;
@@ -2506,6 +2532,8 @@ void do_input_trap(int continued)
   curenv->input_trap_count = 0;
   if (continued)
     curenv->continued_input_trap = 1;
+  else
+    curenv->continued_input_trap = 0;
   int n;
   if (has_arg() && get_integer(&n)) {
     if (n <= 0)
@@ -2543,40 +2571,8 @@ struct tab {
   tab_type type;
   tab(hunits, tab_type);
   enum { BLOCK = 1024 };
-  static tab *free_list;
-  void *operator new(size_t);
-  void operator delete(void *);
 };
 
-tab *tab::free_list = 0;
-
-void *tab::operator new(size_t n)
-{
-  assert(n == sizeof(tab));
-  if (!free_list) {
-    free_list = (tab *)new char[sizeof(tab)*BLOCK];
-    for (int i = 0; i < BLOCK - 1; i++)
-      free_list[i].next = free_list + i + 1;
-    free_list[BLOCK-1].next = 0;
-  }
-  tab *p = free_list;
-  free_list = (tab *)(free_list->next);
-  p->next = 0;
-  return p;
-}
-
-#ifdef __GNUG__
-/* cfront can't cope with this. */
-inline
-#endif
-void tab::operator delete(void *p)
-{
-  if (p) {
-    ((tab *)p)->next = free_list;
-    free_list = (tab *)p;
-  }
-}
-
 tab::tab(hunits x, tab_type t) : next(0), pos(x), type(t)
 {
 }
@@ -3253,8 +3249,8 @@ void environment::print_env()
   errprint("  requested size: %1s\n", requested_size);
   errprint("  previous font number: %1\n", prev_fontno);
   errprint("  font number: %1\n", fontno);
-  errprint("  previous family: `%1'\n", prev_family->nm.contents());
-  errprint("  family: `%1'\n", family->nm.contents());
+  errprint("  previous family: '%1'\n", prev_family->nm.contents());
+  errprint("  family: '%1'\n", family->nm.contents());
   errprint("  space size: %1/36 em\n", space_size);
   errprint("  sentence space size: %1/36 em\n", sentence_space_size);
   errprint("  previous line interrupted: %1\n",
@@ -3294,7 +3290,7 @@ void environment::print_env()
     errprint("  underline spaces: %1\n", underline_spaces ? "yes" : "no");
   }
   if (input_trap.contents()) {
-    errprint("  input trap macro: `%1'\n", input_trap.contents());
+    errprint("  input trap macro: '%1'\n", input_trap.contents());
     errprint("  input trap line counter: %1\n", input_trap_count);
     errprint("  continued input trap: %1\n",
             continued_input_trap ? "yes" : "no");
@@ -3332,11 +3328,15 @@ void environment::print_env()
     errprint("  lines not to enumerate: %1\n", no_number_count);
   }
   string hf = hyphenation_flags ? "on" : "off";
-  if (hyphenation_flags & HYPHEN_LAST_LINE)
+  if (hyphenation_flags & HYPHEN_NOT_LAST_LINE)
     hf += ", not last line";
-  if (hyphenation_flags & HYPHEN_LAST_CHARS)
+  if (hyphenation_flags & HYPHEN_LAST_CHAR)
+    hf += ", last char";
+  if (hyphenation_flags & HYPHEN_NOT_LAST_CHARS)
     hf += ", not last two chars";
-  if (hyphenation_flags & HYPHEN_FIRST_CHARS)
+  if (hyphenation_flags & HYPHEN_FIRST_CHAR)
+    hf += ", first char";
+  if (hyphenation_flags & HYPHEN_NOT_FIRST_CHARS)
     hf += ", not first two chars";
   hf += '\0';
   errprint("  hyphenation_flags: %1\n", hf.contents());
@@ -3696,7 +3696,7 @@ void hyphen_trie::insert_pattern(const char *pat, int patlen, int *num)
 void hyphen_trie::insert_hyphenation(dictionary *ex, const char *pat,
                                     int patlen)
 {
-  char buf[WORD_MAX + 1];
+  char buf[WORD_MAX + 2];
   unsigned char pos[WORD_MAX + 2];
   int i = 0, j = 0;
   int npos = 0;
@@ -3706,6 +3706,8 @@ void hyphen_trie::insert_hyphenation(dictionary *ex, const char *pat,
       if (i > 0 && (npos == 0 || pos[npos - 1] != i))
        pos[npos++] = i;
     }
+    else if (c == ' ')
+      buf[i++] = ' ';
     else
       buf[i++] = hpf_code_table[c];
   }
@@ -3757,28 +3759,28 @@ void hyphen_trie::do_delete(void *v)
 
 /* We use very simple rules to parse TeX's hyphenation patterns.
 
-   . `%' starts a comment even if preceded by `\'.
+   . '%' starts a comment even if preceded by '\'.
 
-   . No support for digraphs and like `\$'.
+   . No support for digraphs and like '\$'.
 
-   . `^^xx' (`x' is 0-9 or a-f), and `^^x' (character code of `x' in the
-     range 0-127) are recognized; other use of `^' causes an error.
+   . '^^xx' ('x' is 0-9 or a-f), and '^^x' (character code of 'x' in the
+     range 0-127) are recognized; other use of '^' causes an error.
 
    . No macro expansion.
 
-   . We check for the expression `\patterns{...}' (possibly with
+   . We check for the expression '\patterns{...}' (possibly with
      whitespace before and after the braces).  Everything between the
-     braces is taken as hyphenation patterns.  Consequently, `{' and `}'
+     braces is taken as hyphenation patterns.  Consequently, '{' and '}'
      are not allowed in patterns.
 
-   . Similarly, `\hyphenation{...}' gives a list of hyphenation
+   . Similarly, '\hyphenation{...}' gives a list of hyphenation
      exceptions.
 
-   . `\endinput' is recognized also.
+   . '\endinput' is recognized also.
 
-   . For backwards compatibility, if `\patterns' is missing, the
+   . For backwards compatibility, if '\patterns' is missing, the
      whole file is treated as a list of hyphenation patterns (only
-     recognizing `%' as the start of a comment.
+     recognizing '%' as the start of a comment.
 
 */
 
@@ -3826,15 +3828,15 @@ void hyphen_trie::read_patterns_file(const char *name, int append,
 {
   if (!append)
     clear();
-  char buf[WORD_MAX];
-  for (int i = 0; i < WORD_MAX; i++)
+  char buf[WORD_MAX + 1];
+  for (int i = 0; i < WORD_MAX + 1; i++)
     buf[i] = 0;
-  int num[WORD_MAX+1];
+  int num[WORD_MAX + 1];
   errno = 0;
   char *path = 0;
   FILE *fp = mac_path->open_file(name, &path);
   if (fp == 0) {
-    error("can't find hyphenation patterns file `%1'", name);
+    error("can't find hyphenation patterns file '%1'", name);
     return;
   }
   int c = hpf_getc(fp);
@@ -3858,7 +3860,7 @@ void hyphen_trie::read_patterns_file(const char *name, int append,
     if (c == EOF) {
       if (have_keyword || traditional) // we are done
        break;
-      else {                           // rescan file in `traditional' mode
+      else {                           // rescan file in 'traditional' mode
        rewind(fp);
        traditional = 1;
        c = hpf_getc(fp);
@@ -3931,7 +3933,7 @@ void hyphen_trie::read_patterns_file(const char *name, int append,
       }
       else if (c == '{') {
        if (have_patterns || have_hyphenation)
-         error("`{' not allowed within %1 group",
+         error("'{' not allowed within %1 group",
                have_patterns ? "\\patterns" : "\\hyphenation");
        c = hpf_getc(fp);               // skipped if not starting \patterns
                                        // or \hyphenation
@@ -3949,13 +3951,16 @@ void hyphen_trie::read_patterns_file(const char *name, int append,
        final_pattern = 0;
       }
       else if (have_hyphenation || final_hyphenation) {
+       // hyphenation exceptions in a pattern file are subject to `.hy'
+       // restrictions; we mark such entries with a trailing space
+       buf[i++] = ' ';
        insert_hyphenation(ex, buf, i);
        final_hyphenation = 0;
       }
     }
   }
   fclose(fp);
-  a_delete path;
+  free(path);
   return;
 }
 
@@ -3977,7 +3982,8 @@ void hyphenate(hyphen_list *h, unsigned flags)
        break;
     }
     hyphen_list *nexth = tem;
-    if (len > 2) {
+    if (len >= 2) {
+      // check `.hw' entries
       buf[len] = 0;
       unsigned char *pos
        = (unsigned char *)current_language->exceptions.lookup(buf);
@@ -3991,18 +3997,61 @@ void hyphenate(hyphen_list *h, unsigned flags)
          }
       }
       else {
-       hbuf[0] = hbuf[len + 1] = '.';
-       int num[WORD_MAX + 3];
-       current_language->patterns.hyphenate(hbuf, len + 2, num);
-       int i;
-       num[2] = 0;
-       if (flags & HYPHEN_FIRST_CHARS)
-         num[3] = 0;
-       if (flags & HYPHEN_LAST_CHARS)
-         --len;
-       for (i = 2, tem = h; i < len && tem; tem = tem->next, i++)
-         if (num[i] & 1)
-           tem->hyphen = 1;
+       // check `\hyphenation' entries from pattern files;
+       // such entries are marked with a trailing space
+       buf[len] = ' ';
+       buf[len + 1] = 0;
+       pos = (unsigned char *)current_language->exceptions.lookup(buf);
+       if (pos != 0) {
+         int j = 0;
+         int i = 1;
+         tem = h;
+         if (pos[j] == i) {
+           if (flags & HYPHEN_FIRST_CHAR)
+             tem->hyphen = 1;
+           j++;
+         }
+         tem = tem->next;
+         i++;
+         if (pos[j] == i) {
+           if (!(flags & HYPHEN_NOT_FIRST_CHARS))
+             tem->hyphen = 1;
+           j++;
+         }
+         tem = tem->next;
+         i++;
+         if (!(flags & HYPHEN_LAST_CHAR))
+           --len;
+         if (flags & HYPHEN_NOT_LAST_CHARS)
+           --len;
+         for (; i < len && tem; tem = tem->next, i++)
+           if (pos[j] == i) {
+             tem->hyphen = 1;
+             j++;
+           }
+       }
+       else {
+         hbuf[0] = hbuf[len + 1] = '.';
+         int num[WORD_MAX + 3];
+         current_language->patterns.hyphenate(hbuf, len + 2, num);
+         // The position of a hyphenation point gets marked with an odd
+         // number.  Example:
+         //
+         //   hbuf:  . h e l p f u l .
+         //   num:  0 0 0 2 4 3 0 0 0 0
+         if (!(flags & HYPHEN_FIRST_CHAR))
+           num[2] = 0;
+         if (flags & HYPHEN_NOT_FIRST_CHARS)
+           num[3] = 0;
+         if (flags & HYPHEN_LAST_CHAR)
+           ++len;
+         if (flags & HYPHEN_NOT_LAST_CHARS)
+           --len;
+         int i;
+         for (i = 2, tem = h; i < len && tem; tem = tem->next, i++)
+           if (num[i] & 1)
+             tem->hyphen = 1;
+       }
       }
     }
     h = nexth;
index 484be4022decee6fca38626430cd490c050221ed..c62bb86c7236a0333f5f44dfb485a8fe62643572 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 class statem;
 
index 665ea9c23807b532c761dcfe0e2cda6897774821..b2e322b20e723fbd493b9e503336b07b4798f275 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 class vunits {
index 9594f074424d76e5336825c98c86f4d99677d79c..a1bd8eafe66d60f67f822c4f095ca6026b415c5f 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #define DEBUGGING
 
@@ -36,6 +36,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 #include "input.h"
 #include "defs.h"
 #include "unicode.h"
+#include "curtime.h"
 
 // Needed for getpid() and isatty()
 #include "posix.h"
@@ -400,7 +401,7 @@ int file_iterator::get_location(int /*allow_macro*/,
 
 void file_iterator::backtrace()
 {
-  errprint("%1:%2: backtrace: %3 `%1'\n", filename, lineno,
+  errprint("%1:%2: backtrace: %3 '%1'\n", filename, lineno,
           popened ? "process" : "file");
 }
 
@@ -809,7 +810,7 @@ void next_file()
     errno = 0;
     FILE *fp = include_search_path.open_file_cautious(nm.contents());
     if (!fp)
-      error("can't open `%1': %2", nm.contents(), strerror(errno));
+      error("can't open '%1': %2", nm.contents(), strerror(errno));
     else
       input_stack::next_file(fp, nm.contents());
   }
@@ -1217,7 +1218,7 @@ static color *lookup_color(symbol nm)
     return &default_color;
   color *c = (color *)color_dictionary.lookup(nm);
   if (c == 0)
-    warning(WARN_COLOR, "color `%1' not defined", nm.contents());
+    warning(WARN_COLOR, "color '%1' not defined", nm.contents());
   return c;
 }
 
@@ -1282,7 +1283,7 @@ static color *read_rgb(char end = 0)
   color *col = new color;
   if (*s == '#') {
     if (!col->read_rgb(s)) {
-      warning(WARN_COLOR, "expecting rgb color definition not `%1'", s);
+      warning(WARN_COLOR, "expecting rgb color definition not '%1'", s);
       delete col;
       return 0;
     }
@@ -1311,7 +1312,7 @@ static color *read_cmy(char end = 0)
   color *col = new color;
   if (*s == '#') {
     if (!col->read_cmy(s)) {
-      warning(WARN_COLOR, "expecting cmy color definition not `%1'", s);
+      warning(WARN_COLOR, "expecting cmy color definition not '%1'", s);
       delete col;
       return 0;
     }
@@ -1340,7 +1341,7 @@ static color *read_cmyk(char end = 0)
   color *col = new color;
   if (*s == '#') {
     if (!col->read_cmyk(s)) {
-      warning(WARN_COLOR, "`expecting a cmyk color definition not `%1'", s);
+      warning(WARN_COLOR, "expecting a cmyk color definition not '%1'", s);
       delete col;
       return 0;
     }
@@ -1370,7 +1371,7 @@ static color *read_gray(char end = 0)
   color *col = new color;
   if (*s == '#') {
     if (!col->read_gray(s)) {
-      warning(WARN_COLOR, "`expecting a gray definition not `%1'", s);
+      warning(WARN_COLOR, "expecting a gray definition not '%1'", s);
       delete col;
       return 0;
     }
@@ -1426,7 +1427,7 @@ static void define_color()
     col = read_cmy();
   else {
     warning(WARN_COLOR,
-           "unknown color space `%1'; use rgb, cmyk, gray or cmy",
+           "unknown color space '%1'; use rgb, cmyk, gray or cmy",
            style.contents());
     skip_line();
     return;
@@ -2351,7 +2352,7 @@ int token::delimiter(int err)
     case ')':
     case '.':
       if (err)
-       error("cannot use character `%1' as a starting delimiter", char(c));
+        error("cannot use character '%1' as a starting delimiter", char(c));
       return 0;
     default:
       return 1;
@@ -2382,55 +2383,55 @@ const char *token::description()
   case TOKEN_BACKSPACE:
     return "a backspace character";
   case TOKEN_CHAR:
-    buf[0] = '`';
+    buf[0] = '\'';
     buf[1] = c;
     buf[2] = '\'';
     buf[3] = '\0';
     return buf;
   case TOKEN_DUMMY:
-    return "`\\&'";
+    return "'\\&'";
   case TOKEN_ESCAPE:
-    return "`\\e'";
+    return "'\\e'";
   case TOKEN_HYPHEN_INDICATOR:
-    return "`\\%'";
+    return "'\\%'";
   case TOKEN_INTERRUPT:
-    return "`\\c'";
+    return "'\\c'";
   case TOKEN_ITALIC_CORRECTION:
-    return "`\\/'";
+    return "'\\/'";
   case TOKEN_LEADER:
     return "a leader character";
   case TOKEN_LEFT_BRACE:
-    return "`\\{'";
+    return "'\\{'";
   case TOKEN_MARK_INPUT:
-    return "`\\k'";
+    return "'\\k'";
   case TOKEN_NEWLINE:
     return "newline";
   case TOKEN_NODE:
     return "a node";
   case TOKEN_NUMBERED_CHAR:
-    return "`\\N'";
+    return "'\\N'";
   case TOKEN_RIGHT_BRACE:
-    return "`\\}'";
+    return "'\\}'";
   case TOKEN_SPACE:
     return "a space";
   case TOKEN_SPECIAL:
     return "a special character";
   case TOKEN_SPREAD:
-    return "`\\p'";
+    return "'\\p'";
   case TOKEN_STRETCHABLE_SPACE:
-    return "`\\~'";
+    return "'\\~'";
   case TOKEN_UNSTRETCHABLE_SPACE:
-    return "`\\ '";
+    return "'\\ '";
   case TOKEN_HORIZONTAL_SPACE:
     return "a horizontal space";
   case TOKEN_TAB:
     return "a tab character";
   case TOKEN_TRANSPARENT:
-    return "`\\!'";
+    return "'\\!'";
   case TOKEN_TRANSPARENT_DUMMY:
-    return "`\\)'";
+    return "'\\)'";
   case TOKEN_ZERO_WIDTH_BREAK:
-    return "`\\:'";
+    return "'\\:'";
   case TOKEN_EOF:
     return "end of input";
   default:
@@ -2690,7 +2691,7 @@ static int transparent_translate(int cc)
       int c = ci->get_ascii_code();
       if (c != '\0')
        return c;
-      error("can't translate %1 to special character `%2'"
+      error("can't translate %1 to special character '%2'"
            " in transparent throughput",
            input_char_description(cc),
            ci->nm.contents());
@@ -3573,7 +3574,7 @@ void string_iterator::backtrace()
     errprint("%1:%2: backtrace", mac.filename, mac.lineno + lineno - 1);
     if (how_invoked) {
       if (!nm.is_null())
-       errprint(": %1 `%2'\n", how_invoked, nm.contents());
+       errprint(": %1 '%2'\n", how_invoked, nm.contents());
       else
        errprint(": %1\n", how_invoked);
     }
@@ -3596,7 +3597,8 @@ inline
 temp_iterator::temp_iterator(const char *s, int len)
 {
   base = new unsigned char[len];
-  memcpy(base, s, len);
+  if (len > 0)
+    memcpy(base, s, len);
   ptr = base;
   eptr = base + len;
 }
@@ -3606,73 +3608,14 @@ temp_iterator::~temp_iterator()
   a_delete base;
 }
 
-class small_temp_iterator : public input_iterator {
-private:
-  small_temp_iterator(const char *, int);
-  ~small_temp_iterator();
-  enum { BLOCK = 16 };
-  static small_temp_iterator *free_list;
-  void *operator new(size_t);
-  void operator delete(void *);
-  enum { SIZE = 12 };
-  unsigned char buf[SIZE];
-  friend input_iterator *make_temp_iterator(const char *);
-};
-
-small_temp_iterator *small_temp_iterator::free_list = 0;
-
-void *small_temp_iterator::operator new(size_t n)
-{
-  assert(n == sizeof(small_temp_iterator));
-  if (!free_list) {
-    free_list =
-      (small_temp_iterator *)new char[sizeof(small_temp_iterator)*BLOCK];
-    for (int i = 0; i < BLOCK - 1; i++)
-      free_list[i].next = free_list + i + 1;
-    free_list[BLOCK-1].next = 0;
-  }
-  small_temp_iterator *p = free_list;
-  free_list = (small_temp_iterator *)(free_list->next);
-  p->next = 0;
-  return p;
-}
-
-#ifdef __GNUG__
-inline
-#endif
-void small_temp_iterator::operator delete(void *p)
-{
-  if (p) {
-    ((small_temp_iterator *)p)->next = free_list;
-    free_list = (small_temp_iterator *)p;
-  }
-}
-
-small_temp_iterator::~small_temp_iterator()
-{
-}
-
-#ifdef __GNUG__
-inline
-#endif
-small_temp_iterator::small_temp_iterator(const char *s, int len)
-{
-  for (int i = 0; i < len; i++)
-    buf[i] = s[i];
-  ptr = buf;
-  eptr = buf + len;
-}
 
 input_iterator *make_temp_iterator(const char *s)
 {
   if (s == 0)
-    return new small_temp_iterator(s, 0);
+    return new temp_iterator(s, 0);
   else {
     int n = strlen(s);
-    if (n <= small_temp_iterator::SIZE)
-      return new small_temp_iterator(s, n);
-    else
-      return new temp_iterator(s, n);
+    return new temp_iterator(s, n);
   }
 }
 
@@ -3790,7 +3733,7 @@ void macro_iterator::shift(int n)
   }
 }
 
-// This gets used by eg .if '\?xxx\?''.
+// This gets used by, e.g., .if '\?xxx\?''.
 
 int operator==(const macro &m1, const macro &m2)
 {
@@ -3843,13 +3786,13 @@ static void interpolate_macro(symbol nm, int no_next)
        macro *m = r->to_macro();
        if (!m || !m->empty())
          warned = warning(WARN_SPACE,
-                          "macro `%1' not defined "
-                          "(possibly missing space after `%2')",
+                          "macro '%1' not defined "
+                          "(possibly missing space after '%2')",
                           nm.contents(), buf);
       }
     }
     if (!warned) {
-      warning(WARN_MAC, "macro `%1' not defined", nm.contents());
+      warning(WARN_MAC, "macro '%1' not defined", nm.contents());
       p = new macro;
       request_dictionary.define(nm, p);
     }
@@ -3922,7 +3865,7 @@ static void decode_string_args(macro_iterator *mi)
     while (c == ' ')
       c = get_copy(&n);
     if (c == '\n' || c == EOF) {
-      error("missing `]'");
+      error("missing ']'");
       break;
     }
     if (c == ']')
@@ -4021,7 +3964,7 @@ void composite_request()
     if (!from_gn) {
       from_gn = check_unicode_name(from.contents());
       if (!from_gn) {
-       error("invalid composite glyph name `%1'", from.contents());
+       error("invalid composite glyph name '%1'", from.contents());
        skip_line();
        return;
       }
@@ -4037,7 +3980,7 @@ void composite_request()
       if (!to_gn) {
        to_gn = check_unicode_name(to.contents());
        if (!to_gn) {
-         error("invalid composite glyph name `%1'", to.contents());
+         error("invalid composite glyph name '%1'", to.contents());
          skip_line();
          return;
        }
@@ -4063,7 +4006,7 @@ static symbol composite_glyph_name(symbol nm)
   if (!gn) {
     gn = check_unicode_name(nm.contents());
     if (!gn) {
-      error("invalid base glyph `%1' in composite glyph name", nm.contents());
+      error("invalid base glyph '%1' in composite glyph name", nm.contents());
       return EMPTY_SYMBOL;
     }
   }
@@ -4084,7 +4027,7 @@ static symbol composite_glyph_name(symbol nm)
     if (!u) {
       u = check_unicode_name(gl.contents());
       if (!u) {
-       error("invalid component `%1' in composite glyph name",
+       error("invalid component '%1' in composite glyph name",
              gl.contents());
        return EMPTY_SYMBOL;
       }
@@ -4460,7 +4403,7 @@ static void interpolate_arg(symbol nm)
     for (p = s; *p && csdigit(*p); p++)
       ;
     if (*p)
-      copy_mode_error("bad argument name `%1'", s);
+      copy_mode_error("bad argument name '%1'", s);
     else
       input_stack::push(input_stack::get_arg(atoi(s)));
   }
@@ -4622,10 +4565,10 @@ void do_define_macro(define_mode mode, calling_mode calling, comp_mode comp)
       if (mode == DEFINE_NORMAL || mode == DEFINE_APPEND) {
        if (have_start_location)
          error_with_file_and_line(start_filename, start_lineno,
-                                  "end of file while defining macro `%1'",
+                                  "end of file while defining macro '%1'",
                                   nm.contents());
        else
-         error("end of file while defining macro `%1'", nm.contents());
+         error("end of file while defining macro '%1'", nm.contents());
       }
       else {
        if (have_start_location)
@@ -4728,7 +4671,7 @@ void alias_macro()
     symbol s2 = get_name(1);
     if (!s2.is_null()) {
       if (!request_dictionary.alias(s1, s2))
-       warning(WARN_MAC, "macro `%1' not defined", s2.contents());
+       warning(WARN_MAC, "macro '%1' not defined", s2.contents());
     }
   }
   skip_line();
@@ -4782,7 +4725,7 @@ void substring_request()
     request_or_macro *p = lookup_request(s);
     macro *m = p->to_macro();
     if (!m)
-      error("cannot apply `substring' on a request");
+      error("cannot apply 'substring' on a request");
     else {
       int end = -1;
       if (!has_arg() || get_integer(&end)) {
@@ -5106,7 +5049,7 @@ static int read_size(int *x)
       return 0;
     if (!(start.ch() == '[' && tok.ch() == ']') && start != tok) {
       if (start.ch() == '[')
-       error("missing `]'");
+       error("missing ']'");
       else
        error("missing closing delimiter");
       return 0;
@@ -5572,7 +5515,7 @@ static node *do_suppress(symbol nm)
     }
     break;
   default:
-    error("`%1' is an invalid argument to \\O", *s);
+    error("'%1' is an invalid argument to \\O", *s);
   }
   return 0;
 }
@@ -5627,7 +5570,7 @@ static void troff_request()
 static void skip_alternative()
 {
   int level = 0;
-  // ensure that ``.if 0\{'' works as expected
+  // ensure that ".if 0\{" works as expected
   if (tok.left_brace())
     level++;
   int c;
@@ -5652,7 +5595,7 @@ static void skip_alternative()
          ;
       }
     /*
-      Note that the level can properly be < 0, eg
+      Note that the level can properly be < 0, e.g.
        
        .if 1 \{\
        .if 0 \{\
@@ -5944,7 +5887,7 @@ void source()
     if (fp)
       input_stack::push(new file_iterator(fp, nm.contents()));
     else
-      error("can't open `%1': %2", nm.contents(), strerror(errno));
+      error("can't open '%1': %2", nm.contents(), strerror(errno));
     tok.next();
   }
 }
@@ -5991,7 +5934,7 @@ void pipe_source()
       if (fp)
        input_stack::push(new file_iterator(fp, symbol(buf).contents(), 1));
       else
-       error("can't open pipe to process `%1': %2", buf, strerror(errno));
+       error("can't open pipe to process '%1': %2", buf, strerror(errno));
       a_delete buf;
     }
     tok.next();
@@ -6094,7 +6037,7 @@ filename(fname), llx(0), lly(0), urx(0), ury(0), lastc(EOF)
       // ...except in the case of an empty file, which we are
       // unable to process further.
       //
-      error("`%1' is empty", filename);
+      error("'%1' is empty", filename);
 
 # if 0
     else if (context_args("%PDF-")) {
@@ -6136,7 +6079,7 @@ filename(fname), llx(0), lly(0), urx(0), ury(0), lastc(EOF)
                  // ...we must ensure it is not a further attempt to defer
                  // assignment to a trailer, (which we are already parsing).
                  //
-                 error("`(atend)' not allowed in trailer of `%1'", filename);
+                 error("'(atend)' not allowed in trailer of '%1'", filename);
              }
            }
            else
@@ -6151,7 +6094,7 @@ filename(fname), llx(0), lly(0), urx(0), ury(0), lastc(EOF)
            // we were unable to extract a valid set of range values from
            // it; all we can do is diagnose this.
            //
-           error("the arguments to the %%%%BoundingBox comment in `%1' are bad",
+           error("the arguments to the %%%%BoundingBox comment in '%1' are bad",
                  filename);
          }
        }
@@ -6161,13 +6104,13 @@ filename(fname), llx(0), lly(0), urx(0), ury(0), lastc(EOF)
        // Conversely, this arises when no value specifying %%BoundingBox
        // comment has been found, in any appropriate location...
        //
-       error("%%%%BoundingBox comment not found in `%1'", filename);
+       error("%%%%BoundingBox comment not found in '%1'", filename);
     }
     else
       // ...while this indicates that there was no appropriate file format
       // identifier, on the first line of the input file.
       //
-      error("`%1' does not conform to the Document Structuring Conventions",
+      error("'%1' does not conform to the Document Structuring Conventions",
            filename);
 
     // Regardless of success or failure of bounding box property acquisition,
@@ -6178,7 +6121,7 @@ filename(fname), llx(0), lly(0), urx(0), ury(0), lastc(EOF)
   else
     // ...but in this case, we did not successfully open any input file.
     //
-    error("can't open `%1': %2", filename, strerror(errno));
+    error("can't open '%1': %2", filename, strerror(errno));
 
   // Irrespective of whether or not we were able to successfully acquire the
   // bounding box properties, we ALWAYS update the associated gtroff registers.
@@ -6264,7 +6207,7 @@ int psbb_locator::get_line(int dscopt)
        //
        // ...rejecting any which may be designated as invalid.
        //
-       error("invalid input character code %1 in `%2'", int(c), filename);
+       error("invalid input character code %1 in '%2'", int(c), filename);
 
       // On reading a valid input character, and when there is
       // room in caller's buffer...
@@ -6283,7 +6226,7 @@ int psbb_locator::get_line(int dscopt)
        // ...diagnose and truncate.
        //
        dscopt = DSC_LINE_MAX_CHECKED;
-       error("PostScript file `%1' is non-conforming "
+       error("PostScript file '%1' is non-conforming "
              "because length of line exceeds 255", filename);
       }
     }
@@ -6330,16 +6273,16 @@ inline const char *psbb_locator::context_args(const char *tag)
 //
 // Inputs:
 //   tag   literal text to be matched at start of buffer
-//   buf   pointer to text to be checked for "tag" match
+//   p     pointer to text to be checked for "tag" match
 //
 // Returns a pointer to the trailing substring of the specified
 // text buffer, following an initial substring matching the "tag"
 // argument, or NULL if "tag" is not matched.
 //
-inline const char *psbb_locator::context_args(const char *tag, const char *buf)
+inline const char *psbb_locator::context_args(const char *tag, const char *p)
 {
   size_t len = strlen(tag);
-  return (strncmp(tag, buf, len) == 0) ? buf + len : NULL;
+  return (strncmp(tag, p, len) == 0) ? p + len : NULL;
 }
 
 // psbb_locator::bounding_box_args()
@@ -6380,7 +6323,7 @@ inline bool psbb_locator::get_header_comment(void)
     //
     get_line(DSC_LINE_MAX_ENFORCE) != 0
 
-    // In header comments, `%X' (`X' any printable character
+    // In header comments, '%X' ('X' any printable character
     // except whitespace) is also acceptable.
     //
     && (buf[0] == '%') && !white_space(buf[1])
@@ -6572,7 +6515,7 @@ const char *input_char_description(int c)
   if (invalid_input_char(c)) {
     const char *s = asciify(c);
     if (*s) {
-      buf[0] = '`';
+      buf[0] = '\'';
       strcpy(buf + 1, s);
       strcat(buf, "'");
       return buf;
@@ -6581,7 +6524,7 @@ const char *input_char_description(int c)
     return buf;
   }
   if (csprint(c)) {
-    buf[0] = '`';
+    buf[0] = '\'';
     buf[1] = c;
     buf[2] = '\'';
     return buf;
@@ -6686,7 +6629,7 @@ void do_open(int append)
       errno = 0;
       FILE *fp = fopen(filename.contents(), append ? "a" : "w");
       if (!fp) {
-       error("can't open `%1' for %2: %3",
+       error("can't open '%1' for %2: %3",
              filename.contents(),
              append ? "appending" : "writing",
              strerror(errno));
@@ -6727,7 +6670,7 @@ void close_request()
   if (!stream.is_null()) {
     FILE *fp = (FILE *)stream_dictionary.remove(stream);
     if (!fp)
-      error("no stream named `%1'", stream.contents());
+      error("no stream named '%1'", stream.contents());
     else
       fclose(fp);
   }
@@ -6745,7 +6688,7 @@ void do_write_request(int newline)
   }
   FILE *fp = (FILE *)stream_dictionary.lookup(stream);
   if (!fp) {
-    error("no stream named `%1'", stream.contents());
+    error("no stream named '%1'", stream.contents());
     skip_line();
     return;
   }
@@ -6781,7 +6724,7 @@ void write_macro_request()
   }
   FILE *fp = (FILE *)stream_dictionary.lookup(stream);
   if (!fp) {
-    error("no stream named `%1'", stream.contents());
+    error("no stream named '%1'", stream.contents());
     skip_line();
     return;
   }
@@ -6823,7 +6766,7 @@ void warnscale_request()
       warn_scale = (double)units_per_inch / 6.0;
     else {
       warning(WARN_SCALE,
-             "invalid scaling indicator `%1', using `i' instead", c);
+             "invalid scaling indicator '%1', using 'i' instead", c);
       c = 'i';
     }
     warn_scaling_indicator = c;
@@ -7042,7 +6985,7 @@ void define_class()
       child2 = tok.get_char(1);
       if (!child2) {
        warning(WARN_MISSING,
-               "missing end of character range in class `%1'",
+               "missing end of character range in class '%1'",
                nm.contents());
        skip_line();
        return;
@@ -7083,7 +7026,7 @@ void define_class()
        int u1 = child1->get_unicode_code();
        if (u1 < 0) {
          warning(WARN_SYNTAX,
-                 "invalid character value in class `%1'",
+                 "invalid character value in class '%1'",
                  nm.contents());
          skip_line();
          return;
@@ -7113,7 +7056,7 @@ void define_class()
       int u1 = child1->get_unicode_code();
       if (u1 < 0) {
        warning(WARN_SYNTAX,
-               "invalid character value in class `%1'",
+               "invalid character value in class '%1'",
                nm.contents());
        skip_line();
        return;
@@ -7124,7 +7067,7 @@ void define_class()
   }
   if (!ci->is_class()) {
     warning(WARN_SYNTAX,
-           "empty class definition for `%1'",
+           "empty class definition for '%1'",
            nm.contents());
     skip_line();
     return;
@@ -7145,7 +7088,7 @@ charinfo *token::get_char(int required)
     if (escape_char != 0)
       return charset_table[escape_char];
     else {
-      error("`\\e' used while no current escape character");
+      error("'\\e' used while no current escape character");
       return 0;
     }
   }
@@ -7603,7 +7546,7 @@ void transparent_file()
     errno = 0;
     FILE *fp = include_search_path.open_file_cautious(filename.contents());
     if (!fp)
-      error("can't open `%1': %2", filename.contents(), strerror(errno));
+      error("can't open '%1': %2", filename.contents(), strerror(errno));
     else {
       int bol = 1;
       for (;;) {
@@ -7758,19 +7701,20 @@ void macro_source()
     // FOOBAR.tmac and vice versa
     if (!fp) {
       const char *fn = nm.contents();
+      size_t fnlen = strlen(fn);
       if (strncasecmp(fn, MACRO_PREFIX, sizeof(MACRO_PREFIX) - 1) == 0) {
-       char *s = new char[strlen(fn) + sizeof(MACRO_POSTFIX)];
+       char *s = new char[fnlen + sizeof(MACRO_POSTFIX)];
        strcpy(s, fn + sizeof(MACRO_PREFIX) - 1);
        strcat(s, MACRO_POSTFIX);
        fp = mac_path->open_file(s, &path);
        a_delete s;
       }
       if (!fp) {
-       if (strncasecmp(fn + strlen(fn) - sizeof(MACRO_POSTFIX) + 1,
+       if (strncasecmp(fn + fnlen - sizeof(MACRO_POSTFIX) + 1,
                        MACRO_POSTFIX, sizeof(MACRO_POSTFIX) - 1) == 0) {
-         char *s = new char[strlen(fn) + sizeof(MACRO_PREFIX)];
+         char *s = new char[fnlen + sizeof(MACRO_PREFIX)];
          strcpy(s, MACRO_PREFIX);
-         strncat(s, fn, strlen(fn) - sizeof(MACRO_POSTFIX) + 1);
+         strncat(s, fn, fnlen - sizeof(MACRO_POSTFIX) + 1);
          fp = mac_path->open_file(s, &path);
          a_delete s;
        }
@@ -7781,7 +7725,7 @@ void macro_source()
       a_delete path;
     }
     else
-      warning(WARN_FILE, "can't find macro file `%1'", nm.contents());
+      warning(WARN_FILE, "can't find macro file '%1'", nm.contents());
     tok.next();
   }
 }
@@ -7797,7 +7741,7 @@ static void process_input_file(const char *name)
     errno = 0;
     fp = include_search_path.open_file_cautious(name);
     if (!fp)
-      fatal("can't open `%1': %2", name, strerror(errno));
+      fatal("can't open '%1': %2", name, strerror(errno));
   }
   input_stack::push(new file_iterator(fp, name));
   tok.next();
@@ -8005,13 +7949,13 @@ int main(int argc, char **argv)
       break;
     case 'd':
       if (*optarg == '\0')
-       error("`-d' requires non-empty argument");
+       error("'-d' requires non-empty argument");
       else
        add_string(optarg, &string_assignments);
       break;
     case 'r':
       if (*optarg == '\0')
-       error("`-r' requires non-empty argument");
+       error("'-r' requires non-empty argument");
       else
        add_string(optarg, &register_assignments);
       break;
@@ -8138,7 +8082,7 @@ static void init_registers()
 #else /* not LONG_FOR_TIME_T */
   time_t
 #endif /* not LONG_FOR_TIME_T */
-    t = time(0);
+    t = current_time();
   // Use struct here to work around misfeature in old versions of g++.
   struct tm *tt = localtime(&t);
   set_number_reg("seconds", int(tt->tm_sec));
@@ -8342,7 +8286,7 @@ static request_or_macro *lookup_request(symbol nm)
   assert(!nm.is_null());
   request_or_macro *p = (request_or_macro *)request_dictionary.lookup(nm);
   if (p == 0) {
-    warning(WARN_MAC, "macro `%1' not defined", nm.contents());
+    warning(WARN_MAC, "macro '%1' not defined", nm.contents());
     p = new macro;
     request_dictionary.define(nm, p);
   }
@@ -8591,7 +8535,7 @@ static void enable_warning(const char *name)
   if (mask)
     warning_mask |= mask;
   else
-    error("unknown warning `%1'", name);
+    error("unknown warning '%1'", name);
 }
 
 static void disable_warning(const char *name)
@@ -8600,7 +8544,7 @@ static void disable_warning(const char *name)
   if (mask)
     warning_mask &= ~mask;
   else
-    error("unknown warning `%1'", name);
+    error("unknown warning '%1'", name);
 }
 
 static void copy_mode_error(const char *format,
@@ -8637,7 +8581,10 @@ static void do_error(error_type type,
   if (!get_file_line(&filename, &lineno))
     filename = 0;
   if (filename)
-    errprint("%1:%2: ", filename, lineno);
+    if (program_name)
+      errprint("%1: %2:%3: ", program_name, filename, lineno);
+    else
+      errprint("%1:%2: ", filename, lineno);
   else if (program_name)
     fprintf(stderr, "%s: ", program_name);
   switch (type) {
@@ -8656,7 +8603,7 @@ static void do_error(error_type type,
     if (topdiv != curdiv) {
       double fromtop1 = curdiv->get_vertical_position().to_units()
                        / warn_scale;
-      fprintf(stderr, ", div `%s', %.1f%c",
+      fprintf(stderr, ", div '%s', %.1f%c",
              curdiv->get_diversion_name(), fromtop1, warn_scaling_indicator);
     }
     fprintf(stderr, "]: ");
@@ -8956,9 +8903,9 @@ charinfo *get_charinfo_by_number(int n)
 }
 
 // This overrides the same function from libgroff; while reading font
-// definition files it puts single-letter glyph names into `charset_table'
-// and converts glyph names of the form `\x' (`x' a single letter) into `x'. 
-// Consequently, symbol("x") refers to glyph name `\x', not `x'.
+// definition files it puts single-letter glyph names into 'charset_table'
+// and converts glyph names of the form '\x' ('x' a single letter) into 'x'.
+// Consequently, symbol("x") refers to glyph name '\x', not 'x'.
 
 glyph *name_to_glyph(const char *nm)
 {
index 76b2b5669348999a4260d8faf97c729f712ede4e..b74394e1a826675e64c4d0103eb9d7bbb6bd896f 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2001-201 Free Software Foundation, Inc.
+/* Copyright (C) 2001-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 /* special character codes */
index 0fd2d33f8919fbf23ff309532e66cc4e53c79f60..3ac1b16b375dae66d110aebb19e2c89287fb63fb 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2003-201 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2018 Free Software Foundation, Inc.
      Written by Gaius Mulley (gaius@glam.ac.uk)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #define DEBUGGING
 
@@ -366,7 +366,7 @@ mtsm::~mtsm()
 }
 
 /*
- *  push_state - push the current troff state and use `n' as
+ *  push_state - push the current troff state and use 'n' as
  *               the new troff state.
  */
 
@@ -374,8 +374,10 @@ void mtsm::push_state(statem *n)
 {
   if (is_html) {
 #if defined(DEBUGGING)
-    if (debug_state)
-      fprintf(stderr, "--> state %d pushed\n", n->issue_no) ; fflush(stderr);
+    if (debug_state) {
+      fprintf(stderr, "--> state %d pushed\n", n->issue_no);
+      fflush(stderr);
+    }
 #endif
     sp = new stack(n, sp);
   }
@@ -385,8 +387,10 @@ void mtsm::pop_state()
 {
   if (is_html) {
 #if defined(DEBUGGING)
-    if (debug_state)
-      fprintf(stderr, "--> state popped\n") ; fflush(stderr);
+    if (debug_state) {
+      fprintf(stderr, "--> state popped\n");
+      fflush(stderr);
+    }
 #endif
     if (sp == 0)
       fatal("empty state machine stack");
index 11722d3e95d00752e13fbc04467ff90e26d5248d..35200b89e25c898fcf0472849383d3c0e95ba95d 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2003-2014 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2018 Free Software Foundation, Inc.
  *
  *  mtsm.h
  *
@@ -23,7 +23,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 struct int_value {
   int value;
index 3eca5232ec2fc61f8fc746e5c694ef2555cf344e..27311b1ca8598455254a353337470afbef3ed29d 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 extern int debug_state;
 
@@ -1176,7 +1176,7 @@ void troff_output_file::put_char(charinfo *ci, tfont *tf,
   }
 }
 
-// set_font calls `flush_tbuf' if necessary.
+// set_font calls 'flush_tbuf' if necessary.
 
 void troff_output_file::set_font(tfont *tf)
 {
@@ -1241,7 +1241,7 @@ void troff_output_file::set_font(tfont *tf)
   current_tfont = tf;
 }
 
-// fill_color calls `flush_tbuf' and `do_motion' if necessary.
+// fill_color calls 'flush_tbuf' and 'do_motion' if necessary.
 
 void troff_output_file::fill_color(color *col)
 {
@@ -1294,7 +1294,7 @@ void troff_output_file::fill_color(color *col)
   put('\n');
 }
 
-// glyph_color calls `flush_tbuf' and `do_motion' if necessary.
+// glyph_color calls 'flush_tbuf' and 'do_motion' if necessary.
 
 void troff_output_file::glyph_color(color *col)
 {
@@ -1552,7 +1552,7 @@ void troff_output_file::really_copy_file(hunits x, vunits y,
   errno = 0;
   FILE *ifp = include_search_path.open_file_cautious(filename);
   if (ifp == 0)
-    error("can't open `%1': %2", filename, strerror(errno));
+    error("can't open '%1': %2", filename, strerror(errno));
   else {
     int c;
     while ((c = getc(ifp)) != EOF)
@@ -1668,13 +1668,13 @@ real_output_file::~real_output_file()
     if (result < 0)
       fatal("pclose failed");
     if (!WIFEXITED(result))
-      error("output process `%1' got fatal signal %2",
+      error("output process '%1' got fatal signal %2",
            pipe_command,
            WIFSIGNALED(result) ? WTERMSIG(result) : WSTOPSIG(result));
     else {
       int exit_status = WEXITSTATUS(result);
       if (exit_status != 0)
-       error("output process `%1' exited with status %2",
+       error("output process '%1' exited with status %2",
              pipe_command, exit_status);
     }
   }
@@ -1847,7 +1847,6 @@ int charinfo_node::overlaps_vertically()
 }
 
 class glyph_node : public charinfo_node {
-  static glyph_node *free_list;
 protected:
   tfont *tf;
   color *gcol;
@@ -1858,8 +1857,6 @@ protected:
             statem *, int, node * = 0);
 #endif
 public:
-  void *operator new(size_t);
-  void operator delete(void *);
   glyph_node(charinfo *, tfont *, color *, color *,
             statem *, int, node * = 0);
   ~glyph_node() {}
@@ -1892,8 +1889,6 @@ public:
   void debug_node();
 };
 
-glyph_node *glyph_node::free_list = 0;
-
 class ligature_node : public glyph_node {
   node *n1;
   node *n2;
@@ -1975,35 +1970,11 @@ public:
   int is_tag();
 };
 
-void *glyph_node::operator new(size_t n)
-{
-  assert(n == sizeof(glyph_node));
-  if (!free_list) {
-    const int BLOCK = 1024;
-    free_list = (glyph_node *)new char[sizeof(glyph_node)*BLOCK];
-    for (int i = 0; i < BLOCK - 1; i++)
-      free_list[i].next = free_list + i + 1;
-    free_list[BLOCK-1].next = 0;
-  }
-  glyph_node *p = free_list;
-  free_list = (glyph_node *)(free_list->next);
-  p->next = 0;
-  return p;
-}
-
 void *ligature_node::operator new(size_t n)
 {
   return new char[n];
 }
 
-void glyph_node::operator delete(void *p)
-{
-  if (p) {
-    ((glyph_node *)p)->next = free_list;
-    free_list = (glyph_node *)p;
-  }
-}
-
 void ligature_node::operator delete(void *p)
 {
   delete[] (char *)p;
@@ -3195,32 +3166,6 @@ int node::merge_space(hunits, hunits, hunits)
   return 0;
 }
 
-#if 0
-space_node *space_node::free_list = 0;
-
-void *space_node::operator new(size_t n)
-{
-  assert(n == sizeof(space_node));
-  if (!free_list) {
-    free_list = (space_node *)new char[sizeof(space_node)*BLOCK];
-    for (int i = 0; i < BLOCK - 1; i++)
-      free_list[i].next = free_list + i + 1;
-    free_list[BLOCK-1].next = 0;
-  }
-  space_node *p = free_list;
-  free_list = (space_node *)(free_list->next);
-  p->next = 0;
-  return p;
-}
-
-inline void space_node::operator delete(void *p)
-{
-  if (p) {
-    ((space_node *)p)->next = free_list;
-    free_list = (space_node *)p;
-  }
-}
-#endif
 
 space_node::space_node(hunits nn, color *c, node *p)
 : node(p, 0, 0), n(nn), set(0), was_escape_colon(0), col(c)
@@ -4071,7 +4016,7 @@ int get_reg_int(const char *p)
   if (r && (r->get_value(&prev_value)))
     return (int)prev_value;
   else
-    warning(WARN_REG, "number register `%1' not defined", p);
+    warning(WARN_REG, "number register '%1' not defined", p);
   return 0;
 }
 
@@ -4081,7 +4026,7 @@ const char *get_reg_str(const char *p)
   if (r)
     return r->get_string();
   else
-    warning(WARN_REG, "register `%1' not defined", p);
+    warning(WARN_REG, "register '%1' not defined", p);
   return 0;
 }
 
@@ -4135,7 +4080,7 @@ void suppress_node::tprint(troff_output_file *out)
     char *tem = (char *)last_image_filename;
     last_image_filename = strsave(filename.contents());
     if (tem)
-      a_delete tem;
+      free(tem);
     last_image_id = image_id;
     // printf("start of image and page = %d\n", current_page);
   }
@@ -4968,7 +4913,7 @@ node *make_glyph_node(charinfo *s, environment *env, int no_error_message = 0)
        unsigned char input_code = s->get_ascii_code();
        if (input_code != 0) {
          if (csgraph(input_code))
-           warning(WARN_CHAR, "can't find character `%1'", input_code);
+           warning(WARN_CHAR, "can't find character '%1'", input_code);
          else
            warning(WARN_CHAR, "can't find character with input code %1",
                    int(input_code));
@@ -4976,7 +4921,7 @@ node *make_glyph_node(charinfo *s, environment *env, int no_error_message = 0)
        else if (s->nm.contents()) {
          const char *nm = s->nm.contents();
          const char *backslash = (nm[1] == 0) ? "\\" : "";
-         warning(WARN_CHAR, "can't find special character `%1%2'",
+         warning(WARN_CHAR, "can't find special character '%1%2'",
                  backslash, nm);
        }
       }
@@ -5954,7 +5899,7 @@ static int mount_font_no_translate(int n, symbol name, symbol external_name,
       return fm != 0;
     if (!fm) {
       if (not_found)
-       warning(WARN_FONT, "can't find font `%1'", external_name.contents());
+       warning(WARN_FONT, "can't find font '%1'", external_name.contents());
       (void)font_dictionary.lookup(external_name, &a_char);
       return 0;
     }
@@ -5962,7 +5907,7 @@ static int mount_font_no_translate(int n, symbol name, symbol external_name,
   }
   else if (p == &a_char) {
 #if 0
-    error("invalid font `%1'", external_name.contents());
+    error("invalid font '%1'", external_name.contents());
 #endif
     return 0;
   }
index bf3e1541c890a41220ced0b5c866f16434498c0f..15b654de47eb49d9da2cdb5161945a5910d917be 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 struct hyphen_list {
   unsigned char hyphen;
@@ -165,11 +165,6 @@ public:
 
 class space_node : public node {
 private:
-#if 0
-  enum { BLOCK = 1024 };
-  static space_node *free_list;
-  void operator delete(void *);
-#endif
 protected:
   hunits n;
   char set;
@@ -178,10 +173,6 @@ protected:
   space_node(hunits, int, int, color *, statem *, int, node * = 0);
 public:
   space_node(hunits, color *, node * = 0);
-#if 0
-  ~space_node();
-  void *operator new(size_t);
-#endif
   node *copy();
   int nspaces();
   hunits width();
index 268834b28bcf34e96920caffdf66b50531226cff..8fe63f467292210febbb022ed6a3dc60a9be4db2 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 #include "troff.h"
@@ -226,7 +226,7 @@ static int start_number()
     return 0;
   }
   if (tok.right_brace()) {
-    warning(WARN_RIGHT_BRACE, "`\\}' where number expected");
+    warning(WARN_RIGHT_BRACE, "'\\}' where number expected");
     return 0;
   }
   return 1;
@@ -461,7 +461,7 @@ static int parse_term(units *v, int scale_indicator,
        scale_indicator = c;
       }
       else {
-       error("expected `;' after scale-indicator (got %1)",
+       error("expected ';' after scale-indicator (got %1)",
              tok.description());
        return 0;
       }
@@ -476,7 +476,7 @@ static int parse_term(units *v, int scale_indicator,
     if (tok.ch() != ')') {
       if (rigid)
        return 0;
-      warning(WARN_SYNTAX, "missing `)' (got %1)", tok.description());
+      warning(WARN_SYNTAX, "missing ')' (got %1)", tok.description());
     }
     else
       tok.next();
@@ -556,7 +556,7 @@ static int parse_term(units *v, int scale_indicator,
     case 'z':
       if (c != 'u' && c != 'z') {
        warning(WARN_SCALE,
-               "only `z' and `u' scale indicators valid in this context");
+               "only 'z' and 'u' scale indicators valid in this context");
        break;
       }
       si = c;
@@ -569,7 +569,7 @@ static int parse_term(units *v, int scale_indicator,
       break;
     default:
       if (c == 'z') {
-       warning(WARN_SCALE, "`z' scale indicator invalid in this context");
+       warning(WARN_SCALE, "'z' scale indicator invalid in this context");
        break;
       }
       si = c;
@@ -602,7 +602,7 @@ static int parse_term(units *v, int scale_indicator,
     break;
   case 'm':
     {
-      // Convert to hunits so that with -Tascii `m' behaves as in nroff.
+      // Convert to hunits so that with -Tascii 'm' behaves as in nroff.
       hunits em = curenv->get_size();
       *v = scale(*v, em.is_zero() ? hresolution : em.to_units(), divisor);
     }
@@ -615,7 +615,7 @@ static int parse_term(units *v, int scale_indicator,
     break;
   case 'n':
     {
-      // Convert to hunits so that with -Tascii `n' behaves as in nroff.
+      // Convert to hunits so that with -Tascii 'n' behaves as in nroff.
       hunits en = curenv->get_size()/2;
       *v = scale(*v, en.is_zero() ? hresolution : en.to_units(), divisor);
     }
index 9fd5662afcb32c5189e4a8a69b04a00788510530..6ee2acf191b32de0f6db158bf44457b8cc7f3468 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "troff.h"
 #include "dictionary.h"
@@ -99,7 +99,7 @@ static const char *number_value_to_ascii(int value, char format, int width)
       const char *s = format == 'i' ? "zwmdclxvi" : "ZWMDCLXVI";
       int n = int(value);
       if (n >= 40000 || n <= -40000) {
-       error("magnitude of `%1' too big for i or I format", n);
+       error("magnitude of '%1' too big for i or I format", n);
        return i_to_a(n);
       }
       if (n == 0) {
@@ -370,7 +370,7 @@ reg *lookup_number_reg(symbol nm)
 {
   reg *r = (reg *)number_reg_dictionary.lookup(nm);
   if (r == 0) {
-    warning(WARN_REG, "number register `%1' not defined", nm.contents());
+    warning(WARN_REG, "number register '%1' not defined", nm.contents());
     r = new number_reg;
     number_reg_dictionary.define(nm, r);
   }
@@ -426,7 +426,7 @@ void alias_reg()
     symbol s2 = get_name(1);
     if (!s2.is_null()) {
       if (!number_reg_dictionary.alias(s1, s2))
-       warning(WARN_REG, "number register `%1' not defined", s2.contents());
+       warning(WARN_REG, "number register '%1' not defined", s2.contents());
     }
   }
   skip_line();
index 49e4b775e96cc1bcc11ea0ab13647f230c47c560..2937172aee6d790105689df9efea1e763ce9ea59 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 class reg : public object {
index 64599f2295c7b04f88e45ea071393f7135069fe1..efdac171cf06521c1b630fb9ee2ac96fbe7958ae 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 typedef void (*REQUEST_FUNCP)();
 
index 87414bfea8fc3b5dcf25c561884427f94c11dae5..a3c0067ade489ab93669db85a2f3a6ee96986b83 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 class charinfo;
@@ -41,18 +41,18 @@ class token {
     TOKEN_ITALIC_CORRECTION,   // \/
     TOKEN_LEADER,              // ^A
     TOKEN_LEFT_BRACE,
-    TOKEN_MARK_INPUT,          // \k -- `nm' is the name of the register
+    TOKEN_MARK_INPUT,          // \k -- 'nm' is the name of the register
     TOKEN_NEWLINE,             // newline
     TOKEN_NODE,
     TOKEN_NUMBERED_CHAR,
     TOKEN_PAGE_EJECTOR,
     TOKEN_REQUEST,
     TOKEN_RIGHT_BRACE,
-    TOKEN_SPACE,               // ` ' -- ordinary space
+    TOKEN_SPACE,               // ' ' -- ordinary space
     TOKEN_SPECIAL,             // a special character -- \' \` \- \(xx \[xxx]
-    TOKEN_SPREAD,              // \p -- break and spread output line 
+    TOKEN_SPREAD,              // \p -- break and spread output line
     TOKEN_STRETCHABLE_SPACE,   // \~
-    TOKEN_UNSTRETCHABLE_SPACE, // `\ '
+    TOKEN_UNSTRETCHABLE_SPACE, // '\ '
     TOKEN_HORIZONTAL_SPACE,    // \|, \^, \0, \h
     TOKEN_TAB,                 // tab
     TOKEN_TRANSPARENT,         // \!
diff --git a/src/roff/troff/troff.1.man b/src/roff/troff/troff.1.man
new file mode 100644 (file)
index 0000000..e4354d8
--- /dev/null
@@ -0,0 +1,682 @@
+'\" t
+.TH @G@TROFF @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@troff \- the troff processor of the groff text formatting system
+.
+.\" troff.man -> troff.1
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this
+.\" document under the terms of the GNU Free Documentation License,
+.\" Version 1.3 or any later version published by the Free Software
+.\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
+.\" and with no Back-Cover Texts.
+.\"
+.\" A copy of the Free Documentation License is included as a file
+.\" called FDL in the main directory of the groff source package.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY @g@troff
+.OP \-abcivzCERU
+.OP \-d cs
+.OP \-f fam
+.OP \-F dir
+.OP \-I dir
+.OP \-m name
+.OP \-M dir
+.OP \-n num
+.OP \-o list
+.OP \-r cn
+.OP \-T name
+.OP \-w name
+.OP \-W name
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This manual page describes the GNU version of
+.BR troff .
+.
+It is part of the groff document formatting system.
+.
+It is functionally compatible with Unix troff, but has many
+extensions, see
+.BR \%groff_diff (@MAN7EXT@).
+.
+Usually it should be invoked using the
+.BR groff (@MAN1EXT@)
+command which will also run preprocessors and postprocessors in the
+appropriate order and with the appropriate options.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.B \-a
+Generate an ASCII approximation of the typeset output.
+.
+.TP
+.B \-b
+Print a backtrace with each warning or error message.
+.
+This backtrace should help track down the cause of the error.
+.
+The line numbers given in the backtrace may not always be correct, for
+.BR @g@troff 's
+idea of line numbers gets confused by
+.B as
+or
+.B am
+requests.
+.
+.TP
+.B \-c
+Disable color output (always disabled in compatibility mode).
+.
+.TP
+.B \-C
+Enable compatibility mode.
+.
+.TP
+.BI \-d cs
+.TQ
+.BI \-d name = s
+Define
+.I c
+or
+.I name
+to be a string
+.IR s ;
+.I c
+must be a one letter name.
+.
+.TP
+.B \-E
+Inhibit all error messages of
+.BR @g@troff .
+.
+Note that this doesn't affect messages output to standard error by
+macro packages using the
+.B tm
+or
+.B tm1
+requests.
+.
+.TP
+.BI \-f fam
+Use
+.I fam
+as the default font family.
+.
+.TP
+.BI \-F dir
+Search in directory (or directory path)
+.I dir
+for subdirectories
+.IR dev name
+.RI ( name
+is the name of the device) and there for the
+.I DESC
+file and font files.
+.
+.I dir
+is scanned before all other font directories.
+.
+.TP
+.B \-i
+Read the standard input after all the named input files have been
+processed.
+.
+.TP
+.BI \-I dir
+This option may be used to add a directory to the search path for
+files (both those on the command line and those named in
+.B \&.psbb
+requests).
+.
+The search path is initialized with the current directory.
+.
+This option may be specified more than once; the directories are then
+searched in the order specified (but before the current directory).
+.
+If you want to make the current directory be read before other
+directories, add
+.B \-I.\&
+at the appropriate place.
+.
+.IP
+No directory search is performed for files with an absolute file name.
+.
+.TP
+.BI \-m name
+Read in the file
+.RI name .tmac .
+.
+If it isn't found, try
+.IR tmac. name
+instead.
+.
+It will be first searched for in directories given with the
+.B \-M
+command-line option, then in directories given in the
+.I GROFF_TMAC_PATH
+environment variable, then in the current directory (only if in unsafe
+mode), the home directory,
+.IR @SYSTEMMACRODIR@ ,
+.IR @LOCALMACRODIR@ ,
+and
+.IR @MACRODIR@ .
+.
+.TP
+.BI \-M dir
+Search directory (or directory path)
+.I dir
+for macro files.
+.
+This is scanned before all other macro directories.
+.
+.TP
+.BI \-n num
+Number the first page
+.IR num .
+.
+.TP
+.BI \-o list
+Output only pages in
+.IR list ,
+which is a comma-separated list of page ranges;
+.I n
+means print page
+.IR n ,
+.IB m \- n
+means print every page between
+.I m
+and
+.IR n ,
+.BI \- n
+means print every page up to
+.IR n ,
+.IB n \-
+means print every page from
+.IR n .
+.
+.B @g@troff
+will exit after printing the last page in the list.
+.
+.TP
+.BI \-r cn
+.TQ
+.BI \-r name = n
+Set number register
+.I c
+or
+.I name
+to
+.IR n ;
+.I c
+must be a one character name;
+.I n
+can be any troff numeric expression.
+.
+.TP
+.B \-R
+Don't load
+.I troffrc
+and
+.IR troffrc\-end .
+.
+.TP
+.BI \-T name
+Prepare output for device
+.IR name ,
+rather than the default
+.BR @DEVICE@ ;
+see
+.BR groff (@MAN1EXT@)
+for a more detailed description.
+.
+.TP
+.B \-U
+Unsafe mode.
+.
+This will enable the following requests:
+.BR open ,
+.BR opena ,
+.BR pso ,
+.BR sy ,
+and
+.BR pi .
+For security reasons, these potentially dangerous requests are
+disabled otherwise.
+.
+It will also add the current directory to the macro search path.
+.
+.TP
+.B \-v
+Print the version number.
+.
+.TP
+.BI \-w name
+Enable warning
+.IR  name .
+.
+Available warnings are described in section \(lqWarnings\(rq below.
+.
+To enable most useful warnings use
+.B \-w
+.BR all .
+To enable absolutely all warnings use
+.B \-w w
+instead.
+Multiple
+.B \-w
+options are allowed.
+.
+.TP
+.BI \-W name
+Inhibit warning
+.IR name .
+.
+Multiple
+.B \-W
+options are allowed.
+.
+.TP
+.B \-z
+Suppress formatted output.
+.
+.
+.\" ====================================================================
+.SH WARNINGS
+.\" ====================================================================
+.
+The warnings that can be given by
+.B @g@troff
+are divided into the following categories.
+.
+The name associated with each warning is used by the
+.B \-w
+and
+.B \-W
+options; the number is used by the
+.B warn
+request, and by the
+.B .warn
+register; it is always a power of 2 to allow bitwise composition.
+.
+.P
+.TS
+tab(@), center, box;
+c c c | c c c
+r rI lB | r rI lB.
+Bit@Code@Warning@Bit@Code@Warning
+_
+0@1@char@10@1024@reg
+1@2@number@11@2048@tab
+2@4@break@12@4096@right-brace
+3@8@delim@13@8192@missing
+4@16@el@14@16384@input
+5@32@scale@15@32768@escape
+6@64@range@16@65536@space
+7@128@syntax@17@131072@font
+8@256@di@18@262144@ig
+9@512@mac@19@524288@color
+@@@20@1048576@file
+.TE
+.
+.P
+.nr x \w'\fBright-brace'+1n+\w'00000'u
+.ta \nxuR
+.
+.TP \nxu+3n
+.BR break "\t4"
+In fill mode, lines which could not be broken so that their length was
+less than the line length.
+.
+This is enabled by default.
+.
+.TP
+.BR char "\t1"
+Non-existent characters.
+.
+This is enabled by default.
+.
+.TP
+.BR color "\t524288"
+Color-related warnings.
+.
+.TP
+.BR delim "\t8"
+Missing or mismatched closing delimiters.
+.
+.TP
+.BR di "\t256"
+Use of
+.B di
+or
+.B da
+without an argument when there is no current diversion.
+.
+.TP
+.BR el "\t16"
+Use of the
+.B el
+request with no matching
+.B ie
+request.
+.
+.TP
+.BR escape "\t32768"
+Unrecognized escape sequences.
+.
+When an unrecognized escape sequence is encountered, the escape
+character is ignored.
+.
+.TP
+.BR file "\t1048576"
+Indicates a missing file for the
+.B mso
+request.
+.
+Enabled by default.
+.
+.TP
+.BR font "\t131072"
+Non-existent fonts.
+.
+This is enabled by default.
+.
+.TP
+.BR ig "\t262144"
+Invalid escapes in text ignored with the
+.B ig
+request.
+.
+These are conditions that are errors when they do not occur in ignored
+text.
+.
+.TP
+.BR input "\t16384"
+Invalid input characters.
+.
+.TP
+.BR mac "\t512"
+Use of undefined strings, macros and diversions.
+.
+When an undefined string, macro or diversion is used, that string is
+automatically defined as empty.
+.
+So, in most cases, at most one warning will be given for each name.
+.
+.TP
+.BR missing "\t8192"
+Requests that are missing non-optional arguments.
+.
+.TP
+.BR number "\t2"
+Invalid numeric expressions.
+.
+This is enabled by default.
+.
+.TP
+.BR range "\t64"
+Out of range arguments.
+.
+.TP
+.BR reg "\t1024"
+Use of undefined number registers.
+.
+When an undefined number register is used, that register is
+automatically defined to have a value of\~0.
+.
+So, in most cases, at most one warning will be given for use of a
+particular name.
+.
+.TP
+.BR right-brace "\t4096"
+Use of
+.B \(rs}
+where a number was expected.
+.
+.TP
+.BR scale "\t32"
+Meaningless scaling indicators.
+.
+.TP
+.BR space "\t65536"
+Missing space between a request or macro and its argument.
+.
+This warning will be given when an undefined name longer than two
+characters is encountered, and the first two characters of the name
+make a defined name.
+.
+The request or macro will not be invoked.
+.
+When this warning is given, no macro is automatically defined.
+.
+This is enabled by default.
+.
+This warning will never occur in compatibility mode.
+.
+.TP
+.BR syntax "\t128"
+Dubious syntax in numeric expressions.
+.
+.TP
+.BR tab "\t2048"
+Inappropriate use of a tab character.
+.
+Either use of a tab character where a number was expected, or use of tab
+character in an unquoted macro argument.
+.
+.P
+There are also names that can be used to refer to groups of warnings:
+.
+.TP
+.B all
+All warnings except
+.BR di ,
+.BR mac ,
+and
+.BR reg .
+.
+It is intended that this covers all warnings that are useful with
+traditional macro packages.
+.
+.TP
+.B w
+All warnings.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROFF_TMAC_PATH
+A colon separated list of directories in which to search for
+macro files.
+.
+.B @g@troff
+will scan directories given in the
+.B \-M
+option before these, and in standard directories (current directory if
+in unsafe mode, home directory,
+.IR @SYSTEMMACRODIR@ ,
+.IR @LOCALMACRODIR@ ,
+.IR @MACRODIR@ )
+after these.
+.
+.TP
+.I GROFF_TYPESETTER
+Default device.
+.
+.TP
+.I GROFF_FONT_PATH
+A colon separated list of directories in which to search for the
+.IR dev name
+directory.
+.
+.B @g@troff
+will scan directories given in the
+.B \-F
+option before these, and in standard directories
+.RI ( @LOCALFONTDIR@ ,
+.IR @FONTDIR@ ,
+.IR @LEGACYFONTDIR@ )
+after these.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @MACRODIR@/troffrc
+Initialization file (called before any other macro package).
+.
+.TP
+.I @MACRODIR@/troffrc\-end
+Initialization file (called after any other macro package).
+.
+.TP
+.IR @MACRODIR@/ name .tmac
+.TQ
+.IR @MACRODIR@/tmac. name
+Macro files
+.
+.TP
+.IR @FONTDIR@/dev name /DESC
+Device description file for device
+.IR name .
+.
+.TP
+.IR @FONTDIR@/dev name / F
+Font file for font
+.I F
+of device
+.IR name .
+.
+.
+.P
+Note that
+.I troffrc
+and
+.I troffrc\-end
+are searched for neither in the current nor the home directory by
+default for security reasons (even if the
+.B \-U
+option is given).
+.
+Use the
+.B \-M
+command-line option or the
+.I GROFF_TMAC_PATH
+environment variable to add these directories to the search path if
+necessary.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+The GNU version of
+.I troff
+was originally written by James Clark;
+he also wrote the original version of this document,
+which was modified by
+.MT wl@\:gnu.org
+Werner Lemberg
+.ME
+and
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.TP
+.BR groff (@MAN1EXT@)
+The main program of the
+.I groff
+system, a wrapper around
+.IR @g@troff .
+.
+.TP
+.BR groff (@MAN7EXT@)
+A description of the
+.I groff
+language, including a short but complete reference of all predefined
+requests, registers, and escapes of plain
+.IR groff .
+.
+From the command line, this is called by
+.RS
+.IP
+.B man 7 groff
+.RE
+.
+.TP
+.BR \%groff_diff (@MAN7EXT@)
+The differences of the
+.I groff
+language and the
+.I classical troff
+language.
+.
+Currently, this is the most actual document of the
+.I groff
+system.
+.
+.TP
+.BR roff (@MAN7EXT@)
+An overview over
+.I groff
+and other
+.I roff
+systems, including pointers to further related documentation.
+.
+.
+.P
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg,
+is the primary
+.I groff
+manual.
+.
+You can browse it interactively with \(lqinfo groff\(rq.
+.
+.
+.\" ====================================================================
+.\" Emacs variables
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/roff/troff/troff.am b/src/roff/troff/troff.am
new file mode 100644 (file)
index 0000000..5d3073b
--- /dev/null
@@ -0,0 +1,70 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += troff
+PREFIXMAN1 += src/roff/troff/troff.1
+EXTRA_DIST += \
+  src/roff/troff/column.cpp \
+  src/roff/troff/troff.1.man \
+  src/roff/troff/TODO
+troff_LDADD = libgroff.a lib/libgnu.a $(LIBM)
+troff_SOURCES = \
+  src/roff/troff/dictionary.cpp \
+  src/roff/troff/div.cpp \
+  src/roff/troff/env.cpp \
+  src/roff/troff/input.cpp \
+  src/roff/troff/mtsm.cpp \
+  src/roff/troff/node.cpp \
+  src/roff/troff/number.cpp \
+  src/roff/troff/reg.cpp \
+  src/roff/troff/env.h \
+  src/roff/troff/node.h \
+  src/roff/troff/troff.h \
+  src/roff/troff/div.h \
+  src/roff/troff/reg.h \
+  src/roff/troff/dictionary.h \
+  src/roff/troff/input.h \
+  src/roff/troff/mtsm.h \
+  src/roff/troff/token.h \
+  src/roff/troff/charinfo.h \
+  src/roff/troff/request.h \
+  src/roff/troff/hvunits.h
+
+nodist_troff_SOURCES = src/roff/troff/majorminor.cpp
+
+src/roff/troff/input.$(OBJEXT): defs.h
+CLEANFILES += src/roff/troff/majorminor.cpp
+
+src/roff/troff/majorminor.cpp: $(top_srcdir)/.version
+       @echo Making $@
+       @$(RM) $@
+       @echo const char \*major_version = \"$(MAJOR_VERSION)\"\; >$@
+       @echo const char \*minor_version = \"$(MINOR_VERSION)\"\; >>$@
+       @echo const char \*revision = \"$(REVISION)\"\; >>$@
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 6f65d689d0259586d0ddab6c1a18bb6726e96fe9..0f356029ed0ad9f164632e08570b7ded946a02f0 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 
 #include "lib.h"
diff --git a/src/roff/troff/troff.man b/src/roff/troff/troff.man
deleted file mode 100644 (file)
index 684f441..0000000
+++ /dev/null
@@ -1,685 +0,0 @@
-'\" t
-.TH @G@TROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@troff \- the troff processor of the groff text formatting system
-.
-.\" troff.man -> troff.1
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legalese
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-This file is part of groff, the GNU roff type-setting system, which
-is a GNU free software project..
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHOR, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.de au
-This file was originally written by James Clark, it was modified by
-.MT wl@gnu.org
-Werner Lemberg
-.ME
-and
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY @g@troff
-.OP \-abcivzCERU
-.OP \-d cs
-.OP \-f fam
-.OP \-F dir
-.OP \-I dir
-.OP \-m name
-.OP \-M dir
-.OP \-n num
-.OP \-o list
-.OP \-r cn
-.OP \-T name
-.OP \-w name
-.OP \-W name
-.RI [ file\~ .\|.\|.]
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the GNU version of
-.BR troff .
-.
-It is part of the groff document formatting system.
-.
-It is functionally compatible with UNIX troff, but has many
-extensions, see
-.BR \%groff_diff (@MAN7EXT@).
-.
-Usually it should be invoked using the
-.BR groff (@MAN1EXT@)
-command which will also run preprocessors and postprocessors in the
-appropriate order and with the appropriate options.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-It is possible to have whitespace between a command line option and
-its parameter.
-.
-.TP \w'\-dname=s'u+2n
-.B \-a
-Generate an
-.SM ASCII
-approximation of the typeset output.
-.
-.TP
-.B \-b
-Print a backtrace with each warning or error message.
-.
-This backtrace should help track down the cause of the error.
-.
-The line numbers given in the backtrace may not always be correct, for
-.BR @g@troff \[aq]s
-idea of line numbers gets confused by
-.B as
-or
-.B am
-requests.
-.
-.TP
-.B \-c
-Disable color output (always disabled in compatibility mode).
-.
-.TP
-.B \-C
-Enable compatibility mode.
-.
-.TP
-.BI \-d cs
-.TQ
-.BI \-d name = s
-Define
-.I c
-or
-.I name
-to be a string
-.IR s ;
-.I c
-must be a one letter name.
-.
-.TP
-.B \-E
-Inhibit all error messages of
-.BR @g@troff .
-.
-Note that this doesn\[aq]t affect messages output to standard error by
-macro packages using the
-.B tm
-or
-.B tm1
-requests.
-.
-.TP
-.BI \-f fam
-Use
-.I fam
-as the default font family.
-.
-.TP
-.BI \-F dir
-Search in directory (or directory path)
-.I dir
-for subdirectories
-.BI dev name
-.RI ( name
-is the name of the device) and there for the
-.B DESC
-file and font files.
-.
-.I dir
-is scanned before all other font directories.
-.
-.TP
-.B \-i
-Read the standard input after all the named input files have been
-processed.
-.
-.TP
-.BI \-I dir
-This option may be used to add a directory to the search path for
-files (both those on the command line and those named in
-.B \&.psbb
-requests).
-.
-The search path is initialized with the current directory.
-.
-This option may be specified more than once; the directories are then
-searched in the order specified (but before the current directory).
-.
-If you want to make the current directory be read before other
-directories, add
-.B \-I.\&
-at the appropriate place.
-.
-.IP
-No directory search is performed for files with an absolute file name.
-.
-.TP
-.BI \-m name
-Read in the file
-.IB name .tmac\fR.
-.
-If it isn\[aq]t found, try
-.BI tmac. name
-instead.
-.
-It will be first searched for in directories given with the
-.B \-M
-command line option, then in directories given in the
-.B GROFF_TMAC_PATH
-environment variable, then in the current directory (only if in unsafe
-mode), the home directory, @SYSTEMMACRODIR@, @LOCALMACRODIR@, and
-@MACRODIR@.
-.
-.TP
-.BI \-M dir
-Search directory (or directory path)
-.I dir
-for macro files.
-.
-This is scanned before all other macro directories.
-.
-.TP
-.BI \-n num
-Number the first page
-.IR num .
-.
-.TP
-.BI \-o list
-Output only pages in
-.IR list ,
-which is a comma-separated list of page ranges;
-.I n
-means print page
-.IR n ,
-.IB m \- n
-means print every page between
-.I m
-and
-.IR n ,
-.BI \- n
-means print every page up to
-.IR n ,
-.IB n \-
-means print every page from
-.IR n .
-.
-.B @g@troff
-will exit after printing the last page in the list.
-.
-.TP
-.BI \-r cn
-.TQ
-.BI \-r name = n
-Set number register
-.I c
-or
-.I name
-to
-.IR n ;
-.I c
-must be a one character name;
-.I n
-can be any troff numeric expression.
-.
-.TP
-.B \-R
-Don\[aq]t load
-.B troffrc
-and
-.BR troffrc-end .
-.
-.TP
-.BI \-T name
-Prepare output for device
-.IR name ,
-rather than the default
-.BR @DEVICE@ ;
-see
-.BR groff (@MAN1EXT@)
-for a more detailed description.
-.
-.TP
-.B \-U
-Unsafe mode.
-.
-This will enable the following requests:
-.BR open ,
-.BR opena ,
-.BR pso ,
-.BR sy ,
-and
-.BR pi .
-For security reasons, these potentially dangerous requests are
-disabled otherwise.
-.
-It will also add the current directory to the macro search path.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.BI \-w name
-Enable warning
-.IR  name .
-.
-Available warnings are described in the section
-.I WARNINGS
-below.
-.
-For example, to enable all warnings, use
-.B \-w
-.BR all .
-Multiple
-.B \-w
-options are allowed.
-.
-.TP
-.BI \-W name
-Inhibit warning
-.IR name .
-.
-Multiple
-.B \-W
-options are allowed.
-.
-.TP
-.B \-z
-Suppress formatted output.
-.
-.
-.\" --------------------------------------------------------------------
-.SH WARNINGS
-.\" --------------------------------------------------------------------
-.
-The warnings that can be given by
-.B @g@troff
-are divided into the following categories.
-.
-The name associated with each warning is used by the
-.B \-w
-and
-.B \-W
-options; the number is used by the
-.B warn
-request, and by the
-.B .warn
-register; it is always a power of 2 to allow bitwise composition.
-.
-.P
-.TS
-tab(@), center, box;
-c c c | c c c
-r rI lB | r rI lB.
-Bit@Code@Warning@Bit@Code@Warning
-_
-0@1@char@10@1024@reg
-1@2@number@11@2048@tab
-2@4@break@12@4096@right-brace
-3@8@delim@13@8192@missing
-4@16@el@14@16384@input
-5@32@scale@15@32768@escape
-6@64@range@16@65536@space
-7@128@syntax@17@131072@font
-8@256@di@18@262144@ig
-9@512@mac@19@524288@color
-@@@20@1048576@file
-.TE
-.
-.P
-.nr x \w'\fBright-brace'+1n+\w'00000'u
-.ta \nxuR
-.
-.TP \nxu+3n
-.BR break "\t4"
-In fill mode, lines which could not be broken so that their length was
-less than the line length.
-.
-This is enabled by default.
-.
-.TP
-.BR char "\t1"
-Non-existent characters.
-.
-This is enabled by default.
-.
-.TP
-.BR color "\t524288"
-Color related warnings.
-.
-.TP
-.BR delim "\t8"
-Missing or mismatched closing delimiters.
-.
-.TP
-.BR di "\t256"
-Use of
-.B di
-or
-.B da
-without an argument when there is no current diversion.
-.
-.TP
-.BR el "\t16"
-Use of the
-.B el
-request with no matching
-.B ie
-request.
-.
-.TP
-.BR escape "\t32768"
-Unrecognized escape sequences.
-.
-When an unrecognized escape sequence is encountered, the escape
-character is ignored.
-.
-.TP
-.BR file "\t1048576"
-Indicates a missing file for the
-.B mso
-request.
-.
-Enabled by default.
-.
-.TP
-.BR font "\t131072"
-Non-existent fonts.
-.
-This is enabled by default.
-.
-.TP
-.BR ig "\t262144"
-Invalid escapes in text ignored with the
-.B ig
-request.
-.
-These are conditions that are errors when they do not occur in ignored
-text.
-.
-.TP
-.BR input "\t16384"
-Invalid input characters.
-.
-.TP
-.BR mac "\t512"
-Use of undefined strings, macros and diversions.
-.
-When an undefined string, macro or diversion is used, that string is
-automatically defined as empty.
-.
-So, in most cases, at most one warning will be given for each name.
-.
-.TP
-.BR missing "\t8192"
-Requests that are missing non-optional arguments.
-.
-.TP
-.BR number "\t2"
-Invalid numeric expressions.
-.
-This is enabled by default.
-.
-.TP
-.BR range "\t64"
-Out of range arguments.
-.
-.TP
-.BR reg "\t1024"
-Use of undefined number registers.
-.
-When an undefined number register is used, that register is
-automatically defined to have a value of\~0.
-.
-So, in most cases, at most one warning will be given for use of a
-particular name.
-.
-.TP
-.BR right-brace "\t4096"
-Use of
-.B \[rs]}
-where a number was expected.
-.
-.TP
-.BR scale "\t32"
-Meaningless scaling indicators.
-.
-.TP
-.BR space "\t65536"
-Missing space between a request or macro and its argument.
-.
-This warning will be given when an undefined name longer than two
-characters is encountered, and the first two characters of the name
-make a defined name.
-.
-The request or macro will not be invoked.
-.
-When this warning is given, no macro is automatically defined.
-.
-This is enabled by default.
-.
-This warning will never occur in compatibility mode.
-.
-.TP
-.BR syntax "\t128"
-Dubious syntax in numeric expressions.
-.
-.TP
-.BR tab "\t2048"
-Inappropriate use of a tab character.
-.
-Either use of a tab character where a number was expected, or use of tab
-character in an unquoted macro argument.
-.
-.P
-There are also names that can be used to refer to groups of warnings:
-.
-.TP
-.B all
-All warnings except
-.BR di ,
-.BR mac ,
-and
-.BR reg .
-.
-It is intended that this covers all warnings that are useful with
-traditional macro packages.
-.
-.TP
-.B w
-All warnings.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.SM
-.B GROFF_TMAC_PATH
-A colon separated list of directories in which to search for
-macro files.
-.
-.B @g@troff
-will scan directories given in the
-.B \-M
-option before these, and in standard directories (current directory if
-in unsafe mode, home directory,
-.BR @SYSTEMMACRODIR@ ,
-.BR @LOCALMACRODIR@ ,
-.BR @MACRODIR@ )
-after these.
-.
-.TP
-.SM
-.B GROFF_TYPESETTER
-Default device.
-.
-.TP
-.SM
-.B GROFF_FONT_PATH
-A colon separated list of directories in which to search for the
-.BI dev name
-directory.
-.
-.B @g@troff
-will scan directories given in the
-.B \-F
-option before these, and in standard directories
-.RB ( @LOCALFONTDIR@ ,
-.BR @FONTDIR@ ,
-.BR @LEGACYFONTDIR@ )
-after these.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP
-.B @MACRODIR@/troffrc
-Initialization file (called before any other macro package).
-.
-.TP
-.B @MACRODIR@/troffrc-end
-Initialization file (called after any other macro package).
-.
-.TP
-.BI @MACRODIR@/ name .tmac
-.TQ
-.BI @MACRODIR@/tmac. name
-Macro files
-.
-.TP
-.BI @FONTDIR@/dev name /DESC
-Device description file for device
-.IR name .
-.
-.TP
-.BI @FONTDIR@/dev name / F
-Font file for font
-.I F
-of device
-.IR name .
-.
-.
-.P
-Note that
-.B troffrc
-and
-.B troffrc-end
-are neither searched in the current nor in the home directory by
-default for security reasons (even if the
-.B \-U
-option is given).
-.
-Use the
-.B \-M
-command line option or the
-.B GROFF_TMAC_PATH
-environment variable to add these directories to the search path if
-necessary.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BR groff (@MAN1EXT@)
-The main program of the
-.I groff
-system, a wrapper around
-.IR @g@troff .
-.
-.TP
-.BR groff (@MAN7EXT@)
-A description of the
-.I groff
-language, including a short but complete reference of all predefined
-requests, registers, and escapes of plain
-.IR groff .
-.
-From the command line, this is called by
-.RS
-.IP
-.B man 7 groff
-.RE
-.
-.TP
-.BR \%groff_diff (@MAN7EXT@)
-The differences of the
-.I groff
-language and the
-.I classical troff
-language.
-.
-Currently, this is the most actual document of the
-.I groff
-system.
-.
-.TP
-.BR roff (@MAN7EXT@)
-An overview over
-.I groff
-and other
-.I roff
-systems, including pointers to further related documentation.
-.
-.
-.P
-The
-.I groff info
-.IR file ,
-cf.\&
-.BR info (@MAN1EXT@),
-presents all groff documentation within a single document.
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" Emacs variables
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/src/utils/addftinfo/Makefile.sub b/src/utils/addftinfo/Makefile.sub
deleted file mode 100644 (file)
index 6dd230c..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# Makefile.sub for `src utils addftinfo'
-#
-# File position: <groff-source>/src/utils/addftinfo/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=addftinfo$(EXEEXT)
-MAN1=addftinfo.n
-XLIBS=$(LIBGROFF)
-OBJS=\
-  addftinfo.$(OBJEXT) \
-  guess.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/addftinfo.cpp \
-  $(srcdir)/guess.cpp
-HDRS=\
-  $(srcdir)/guess.h
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/utils/addftinfo/addftinfo.1.man b/src/utils/addftinfo/addftinfo.1.man
new file mode 100644 (file)
index 0000000..3ce1fe3
--- /dev/null
@@ -0,0 +1,195 @@
+.TH ADDFTINFO @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+addftinfo \- add information to troff font files for use with groff
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.\" Characters
+.\" ====================================================================
+.
+.\" Ellipsis ...
+.ie t .ds EL \fS\N'188'\fP\"
+.el .ds EL \&.\|.\|.\&\"
+.\" called with \*(EL
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY addftinfo
+.OP \-asc\-height n
+.OP \-body\-depth n
+.OP \-body\-height n
+.OP \-cap\-height n
+.OP \-comma\-depth n
+.OP \-desc\-depth n
+.OP \-fig\-height n
+.OP \-x\-height n
+.I res
+.I unitwidth
+.I font
+.YS
+.
+.SY addftinfo
+.B \-\-help
+.YS
+.
+.SY addftinfo
+.B \-v
+.SY addftinfo
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B addftinfo
+reads a troff font file and adds some additional font-metric
+information that is used by the groff system.
+.
+The font file with the information added is written on the standard
+output.
+.
+The information added is guessed using some parametric information
+about the font and assumptions about the traditional troff names for
+characters.
+.
+The main information added is the heights and depths of characters.
+.
+The
+.I res
+and
+.I unitwidth
+arguments should be the same as the corresponding parameters in the
+DESC file;
+.I font
+is the name of the file describing the font;
+if
+.I font
+ends with
+.B I
+the font will be assumed to be italic.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.B \-v
+prints the version number.
+.
+.
+.LP
+All other options change one of the parameters that are used to derive
+the heights and depths.
+.
+Like the existing quantities in the font file, each
+.I value
+is in
+.RI inches/ res
+for a font whose point size is
+.IR unitwidth .
+.
+.I param-option
+must be one of:
+.
+.TP
+.B \-x\-height
+The height of lowercase letters without ascenders such as x.
+.
+.TP
+.B \-fig\-height
+The height of figures (digits).
+.
+.TP
+.B \-asc\-height
+The height of characters with ascenders, such as b, d or l.
+.
+.TP
+.B \-body\-height
+The height of characters such as parentheses.
+.
+.TP
+.B \-cap\-height
+The height of uppercase letters such as A.
+.
+.TP
+.B \-comma\-depth
+The depth of a comma.
+.
+.TP
+.B \-desc\-depth
+The depth of characters with descenders, such as p, q, or y.
+.
+.TP
+.B \-body\-depth
+The depth of characters such as parentheses.
+.
+.
+.LP
+.B addftinfo
+makes no attempt to use the specified parameters to guess the
+unspecified parameters.
+.
+If a parameter is not specified the default will be used.
+.
+The defaults are chosen to have the reasonable values for a Times
+font.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR groff_font (@MAN5EXT@),
+.BR groff (@MAN1EXT@),
+.BR groff_char (@MAN7EXT@)
+.
+.
+.P
+You can view a man page
+.IB name ( n )
+with
+.RS
+.EX
+.BI "man" " n name"
+.EE
+.RE
+in text mode and with
+.RS
+.EX
+.BI "groffer" " n name"
+.EE
+.RE
+in graphical mode (PDF, etc.).
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/utils/addftinfo/addftinfo.am b/src/utils/addftinfo/addftinfo.am
new file mode 100644 (file)
index 0000000..2280bd9
--- /dev/null
@@ -0,0 +1,43 @@
+# Automake rules for 'src utils addftinfo'
+#
+# File position: <groff-source>/src/utils/addftinfo/addftinfo.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+bin_PROGRAMS += addftinfo
+man1_MANS += src/utils/addftinfo/addftinfo.1
+EXTRA_DIST += src/utils/addftinfo/addftinfo.1.man
+addftinfo_LDADD = libgroff.a lib/libgnu.a
+addftinfo_SOURCES = \
+  src/utils/addftinfo/addftinfo.cpp \
+  src/utils/addftinfo/guess.cpp \
+  src/utils/addftinfo/guess.h
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 88095bfde02f50b063b7b254d1badf1baa36d6dd..4211c59f9f38a54feddcfd6a30bc84ff6463dff6 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -110,12 +110,12 @@ int main(int argc, char **argv)
     size_t j;
     for (j = 0;; j++) {
       if (j >= sizeof(param_table)/sizeof(param_table[0]))
-       fatal("parameter `%1' not recognized", argv[i] + 1);
+       fatal("parameter '%1' not recognized", argv[i] + 1);
       if (strcmp(param_table[j].name, argv[i] + 1) == 0)
        break;
     }
     if (sscanf(argv[i+1], "%d", &(param.*(param_table[j].par))) != 1)
-      fatal("invalid argument `%1'", argv[i+1]);
+      fatal("invalid argument '%1'", argv[i+1]);
     i++;
   }    
   if (argc - i != 3)
@@ -123,7 +123,7 @@ int main(int argc, char **argv)
   errno = 0;
   FILE *infp = fopen(font, "r");
   if (infp == 0)
-    fatal("can't open `%1': %2", font, strerror(errno));
+    fatal("can't open '%1': %2", font, strerror(errno));
   convert_font(param, infp, stdout);
   return 0;
 }
diff --git a/src/utils/addftinfo/addftinfo.man b/src/utils/addftinfo/addftinfo.man
deleted file mode 100644 (file)
index 86479a8..0000000
+++ /dev/null
@@ -1,188 +0,0 @@
-.TH ADDFTINFO @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-addftinfo \- add information to troff font files for use with groff
-.
-.
-.\" --------------------------------------------------------------------
-.\" License
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Characters
-.\" --------------------------------------------------------------------
-.
-.\" Ellipsis ...
-.ie t .ds EL \fS\N'188'\fP
-.el .ds EL \&.\|.\|.\&\
-.\" called with \*(EL
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B addftinfo
-[
-.B \-v
-]
-[
-.IR "param-option value" \*(EL
-]
-.I res
-.I unitwidth
-.I font
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B addftinfo
-reads a troff font file and adds some additional font-metric
-information that is used by the groff system.
-.
-The font file with the information added is written on the standard
-output.
-.
-The information added is guessed using some parametric information
-about the font and assumptions about the traditional troff names for
-characters.
-.
-The main information added is the heights and depths of characters.
-.
-The
-.I res
-and
-.I unitwidth
-arguments should be the same as the corresponding parameters in the
-DESC file;
-.I font
-is the name of the file describing the font;
-if
-.I font
-ends with
-.B I
-the font will be assumed to be italic.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.B \[en]v
-prints the version number.
-.
-.
-.LP
-All other options change one of the parameters that are used to derive
-the heights and depths.
-.
-Like the existing quantities in the font file, each
-.I value
-is in
-.RI inches/ res
-for a font whose point size is
-.IR unitwidth .
-.
-.I param-option
-must be one of:
-.
-.TP
-.B \[en]x\-height
-The height of lowercase letters without ascenders such as x.
-.
-.TP
-.B \[en]fig-height
-The height of figures (digits).
-.
-.TP
-.B \[en]asc-height
-The height of characters with ascenders, such as b, d or l.
-.
-.TP
-.B \[en]body\-height
-The height of characters such as parentheses.
-.
-.TP
-.B \[en]cap-height
-The height of uppercase letters such as A.
-.
-.TP
-.B \[en]comma\-depth
-The depth of a comma.
-.
-.TP
-.B \[en]desc\-depth
-The depth of characters with descenders, such as p, q, or y.
-.
-.TP
-.B \[en]body\-depth
-The depth of characters such as parentheses.
-.
-.
-.LP
-.B addftinfo
-makes no attempt to use the specified parameters to guess the
-unspecified parameters.
-.
-If a parameter is not specified the default will be used.
-.
-The defaults are chosen to have the reasonable values for a Times
-font.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff_font (@MAN5EXT@),
-.BR groff (@MAN1EXT@),
-.BR groff_char (@MAN7EXT@)
-.
-.
-.P
-Watch a man\-page
-.IB name ( n )
-with
-.RS
-.EX
-.BI "man" " n name"
-.EE
-.RE
-in text mode and with
-.RS
-.EX
-.BI "groffer" " n name"
-.EE
-.RE
-in graphical mode (PDF, etc.).
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index a852ed0bc31b37df102561b20a16d0c58623c57b..9715c5602877a5d8f88ec1d217e5bdddac98f0d7 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "guess.h"
 
index 2acd86772b9dddeab1ad69d15bd83989c09ee10f..53e98d1c0cac77a309c70cc48c229777415aad51 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 struct font_params {
   int italic;
diff --git a/src/utils/afmtodit/Makefile.sub b/src/utils/afmtodit/Makefile.sub
deleted file mode 100644 (file)
index ca6c91e..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-# Makefile.sub for `src utils afmtodit'
-#
-# File position: <groff-source>/src/utils/afmtodit/Makefile.sub
-#
-# Copyright (C) 2013-2014  Free Software Foundation, Inc.
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-########################################################################
-
-MAN1=afmtodit.n
-MOSTLYCLEANADD=afmtodit
-RM=rm -f
-
-all: afmtodit
-
-afmtodit: afmtodit.pl afmtodit.tables
-       if test -n "$(PERL)"; then \
-         sed -e "s|/usr/bin/perl|$(PERL)|" \
-             -e "s|@VERSION@|$(version)$(revision)|" \
-             -e "s|@FONTDIR@|$(fontdir)|" \
-             -e "/@afmtodit.tables@/ r $(srcdir)/afmtodit.tables" \
-             -e "/@afmtodit.tables@/ d" \
-             $(srcdir)/afmtodit.pl >afmtodit; \
-       else \
-         sed -e "s|@VERSION@|$(version)$(revision)|" \
-             -e "s|@FONTDIR@|$(fontdir)|" \
-             -e "/@afmtodit.tables@/ r $(srcdir)/afmtodit.tables" \
-             -e "/@afmtodit.tables@/ d" \
-             $(srcdir)/afmtodit.pl >afmtodit; \
-       fi
-       chmod +x afmtodit
-
-install_data: afmtodit
-       -test -d $(DESTDIR)$(bindir) || $(mkinstalldirs) $(DESTDIR)$(bindir)
-       $(RM) $(DESTDIR)$(bindir)/afmtodit
-       $(INSTALL_SCRIPT) afmtodit $(DESTDIR)$(bindir)/afmtodit
-
-uninstall_sub:
-       $(RM) $(DESTDIR)$(bindir)/afmtodit
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/utils/afmtodit/afmtodit.1.man b/src/utils/afmtodit/afmtodit.1.man
new file mode 100644 (file)
index 0000000..a21b146
--- /dev/null
@@ -0,0 +1,448 @@
+.TH AFMTODIT @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+afmtodit \- create font files for use with groff \-Tps and \-Tpdf
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY afmtodit
+.OP \-ckmnsx
+.OP \-a n
+.OP \-d desc-file
+.OP \-e enc-file
+.OP \-f internal-name
+.OP \-i n
+.OP \-o output-file
+.I afm-file
+.I map-file
+.I font
+.YS
+.
+.SY afmtodit
+.B \-v
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I afmtodit
+creates a font file for use with
+.IR groff ,
+.IR grops ,
+and
+.IR gropdf .
+.
+.I afmtodit
+is written in Perl;
+you must have Perl version 5.004 or newer installed in order to run
+.IR afmtodit .
+.
+.
+.LP
+.I afm-file
+is the AFM (Adobe Font Metric) file for the font.
+.
+.
+.LP
+.I map-file
+is a file that says which
+.I groff
+character names map onto each PostScript character name;
+this file should contain a sequence of lines of the form
+.
+.RS
+.I
+ps-char groff-char
+.RE
+.
+where
+.I ps-char
+is the PostScript name of the character and
+.I groff-char
+is the groff name of the character (as used in the
+.I groff
+font file).
+.
+The same
+.I ps-char
+can occur multiple times in the file;
+each
+.I groff-char
+must occur at most once.
+.
+Lines starting with \(oq#\(cq and blank lines are ignored.
+.
+If the file isn't found in the current directory,
+it is searched for in the
+.I devps/generate
+subdirectory of the default font directory.
+.
+.
+.LP
+If a PostScript character is not mentioned in
+.IR map-file ,
+and a generic
+.I groff
+glyph name can't be deduced using the Adobe Glyph List
+(AGL, built into
+.IR afmtodit ),
+then
+.I afmtodit
+puts the PostScript character into the
+.I groff
+font file as an unnamed character which can only be accessed by the
+\(oq\eN\(cq escape sequence in a
+.I roff
+document.
+.
+In particular,
+this is true for glyph variants named in the form \(lqfoo.bar\(rq;
+all glyph names containing one or more periods are mapped to unnamed
+entities.
+.
+If option
+.B \-e
+is not specified, the encoding defined in the AFM file (i.e., entries
+with non-negative character codes) is used.
+.
+Refer to section \(lqUsing Symbols\(rq in
+.IR "Groff: The GNU Implementation of troff" ,
+the
+.I groff
+Texinfo manual,
+which describes how
+.I groff
+glyph names are constructed.
+.
+.
+.LP
+Characters not encoded in the AFM file (i.e., entries which have
+\(oq\-1\(cq as the character code) are still available in
+.IR groff ;
+they get glyph index values greater than 255 (or greater than the
+biggest character code used in the AFM file in the unlikely case that it
+is greater than 255) in the
+.I groff
+font file.
+.
+Glyph indices of unencoded characters don't have a specific order;
+it is best to access them with glyph names only.
+.
+.
+.LP
+The
+.I groff
+font file will be output to a file called
+.IR font ,
+unless the
+.B \-o
+option is used.
+.
+.
+.LP
+If there is a downloadable font file for the font, it may be listed in
+the file
+.IR @FONTDIR@/\:devps/\:download ;
+see
+.IR grops (@MAN1EXT@).
+.
+.
+.LP
+If the
+.B \-i
+option is used,
+.I afmtodit
+will automatically generate an italic correction,
+a left italic correction and a subscript correction
+for each character
+(the significance of these parameters is explained in
+.IR groff_font (@MAN5EXT@));
+these parameters may be specified for individual characters by
+adding to the
+.I afm-file
+lines of the form:
+.
+.RS
+.EX
+.BI italicCorrection \~ps-char\~n
+.BI leftItalicCorrection \~ps-char\~n
+.BI subscriptCorrection \~ps-char\~n
+.EE
+.RE
+.
+where
+.I ps-char
+is the PostScript name of the character,
+and
+.I n
+is the desired value of the corresponding parameter in thousandths of an
+em.
+.
+These parameters are normally needed only for italic (or oblique) fonts.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.BI \-a n
+Use
+.I n
+as the slant parameter in the font file;
+this is used by
+.I groff
+in the positioning of accents.
+.
+By default
+.I afmtodit
+uses the negative of the
+.B ItalicAngle
+specified in the AFM file;
+with true italic fonts it is sometimes desirable to use a slant that is
+less than this.
+.
+If you find that characters from an italic font have accents placed too
+far to the right over them,
+then use the
+.B \-a
+option to give the font a smaller slant.
+.
+.
+.TP
+.B \-c
+Include comments in the font file in order to identify the PostScript
+font.
+.
+.
+.TP
+.BI \-d desc-file
+The device description file is
+.I desc-file
+rather than the default
+.IR DESC .
+.
+If not found in the current directory,
+the
+.I devps
+subdirectory of the default font directory is searched (this is true for
+both the default device description file and a file given with option
+.BR \-d ).
+.
+.
+.TP
+.BI \-e enc-file
+The PostScript font should be reencoded to use the encoding described
+in
+.IR enc-file .
+.
+The format of
+.I enc-file
+is described in
+.IR grops (@MAN1EXT@).
+.
+If not found in the current directory,
+the
+.I devps
+subdirectory of the default font directory is searched.
+.
+.
+.TP
+.BI \-f name
+The internal name of the
+.I groff
+font is set to
+.IR name .
+.
+.
+.TP
+.BI \-i n
+Generate an italic correction for each character so that the
+character's width plus the character's italic correction is equal to
+.I n
+thousandths of an em
+plus the amount by which the right edge of the character's bounding box
+is to the right of the character's origin.
+.
+If this would result in a negative italic correction, use a zero
+italic correction instead.
+.
+.
+.IP
+Also generate a subscript correction equal to the
+product of the tangent of the slant of the font and
+four fifths of the x-height of the font.
+.
+If this would result in a subscript correction greater than the italic
+correction, use a subscript correction equal to the italic correction
+instead.
+.
+.
+.IP
+Also generate a left italic correction for each character
+equal to
+.I n
+thousandths of an em
+plus the amount by which the left edge of the character's bounding box
+is to the left of the character's origin.
+.
+The left italic correction may be negative unless option
+.B \-m
+is given.
+.
+.
+.IP
+This option is normally needed only with italic (or oblique) fonts.
+.
+The font files distributed with
+.I groff
+were created using an option of
+.B \-i50
+for italic fonts.
+.
+.
+.TP
+.BI \-o output-file
+The output file is
+.I output-file
+instead of
+.IR font .
+.
+.
+.TP
+.B \-k
+Omit any kerning data from the
+.I groff
+font;
+use only for monospaced (constant-width) fonts.
+.
+.
+.TP
+.B \-m
+Prevent negative left italic correction values.
+.
+Roman font files distributed with
+.I groff
+were created with
+.B \-i0\ \-m
+to improve spacing with
+.IR @g@eqn (@MAN1EXT@).
+.
+.
+.TP
+.B \-n
+Don't output a
+.B ligatures
+command for this font;
+use with monospaced (constant-width) fonts.
+.
+.
+.TP
+.B \-s
+The font is special.
+.
+The effect of this option is to add the
+.B special
+command to the font file.
+.
+.
+.TP
+.B \-v
+Print version and exit.
+.
+.
+.TP
+.B \-x
+Don't use the built-in Adobe Glyph List.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @FONTDIR@/\:devps/\:DESC
+Device description file.
+.
+.
+.TP
+.IR @FONTDIR@/\:devps/\: F
+Font description file for font
+.IR F .
+.
+.
+.TP
+.I @FONTDIR@/\:devps/\:download
+List of downloadable fonts.
+.
+.
+.TP
+.I @FONTDIR@/\:devps/\:text.enc
+Encoding used for text fonts.
+.
+.
+.TP
+.I @FONTDIR@/\:devps/\:generate/\:textmap
+Standard mapping.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg,
+is the primary
+.I groff
+manual.
+.
+Section \(lqUsing Symbols\(rq may be of particular note.
+.
+You can browse it interactively with \(lqinfo \(aq(groff)Using
+Symbols\(aq\(rq.
+.
+.
+.LP
+.IR groff (@MAN1EXT@),
+.IR gropdf (@MAN1EXT@),
+.IR grops (@MAN1EXT@),
+.IR groff_font (@MAN5EXT@),
+.IR perl (1)
+.
+.
+.\" ====================================================================
+.\" ### Emacs settings:
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/src/utils/afmtodit/afmtodit.am b/src/utils/afmtodit/afmtodit.am
new file mode 100644 (file)
index 0000000..48e3c29
--- /dev/null
@@ -0,0 +1,64 @@
+# Automake rules for 'src utils afmtodit'
+#
+# File position: <groff-source>/src/utils/afmtodit/afmtdodit.am
+#
+# Copyright (C) 2013-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+#
+########################################################################
+
+afmtodit_srcdir = $(top_srcdir)/src/utils/afmtodit
+
+bin_SCRIPTS += afmtodit
+man1_MANS += src/utils/afmtodit/afmtodit.1
+EXTRA_DIST += \
+  src/utils/afmtodit/afmtodit.1.man \
+  src/utils/afmtodit/afmtodit.pl \
+  src/utils/afmtodit/afmtodit.tables \
+  src/utils/afmtodit/make-afmtodit-tables
+
+afmtodit: $(afmtodit_srcdir)/afmtodit.pl $(afmtodit_srcdir)/afmtodit.tables
+       $(AM_V_GEN)if test -n "$(PERL)"; then \
+         sed -e "s|/usr/bin/perl|$(PERL)|" \
+             -e "s|[@]VERSION[@]|$(VERSION)|" \
+             -e "s|[@]FONTDIR[@]|$(fontdir)|" \
+             -e "/[@]afmtodit.tables[@]/ r $(afmtodit_srcdir)/afmtodit.tables" \
+             -e "/[@]afmtodit.tables[@]/ d" \
+             $(afmtodit_srcdir)/afmtodit.pl \
+             >afmtodit; \
+       else \
+         sed -e "s|[@]VERSION[@]|$(VERSION)|" \
+             -e "s|[@]FONTDIR[@]|$(fontdir)|" \
+             -e "/[@]afmtodit.tables[@]/ r $(afmtodit_srcdir)/afmtodit.tables" \
+             -e "/[@]afmtodit.tables[@]/ d" \
+             $(afmtodit_srcdir)/afmtodit.pl \
+             >afmtodit; \
+       fi \
+       && chmod +x afmtodit
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
diff --git a/src/utils/afmtodit/afmtodit.man b/src/utils/afmtodit/afmtodit.man
deleted file mode 100644 (file)
index 21d9b8e..0000000
+++ /dev/null
@@ -1,401 +0,0 @@
-.TH AFMTODIT @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-afmtodit \- create font files for use with groff \-Tps and \-Tpdf
-.
-.
-.\" --------------------------------------------------------------------
-.\" Leagal Terms
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Definitions
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.  ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.  el .TP "\\$1"
-..
-.
-.de OP
-.  ie \\n(.$-1 .RI "[\ \fB\\$1\fP\ " "\\$2" "\ ]"
-.  el .RB "[\ " "\\$1" "\ ]"
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fBafmtodit 'u
-.ti \niu
-.B afmtodit
-.OP \-ckmnsvx
-.OP \-a n
-.OP \-d desc_file
-.OP \-e enc_file
-.OP \-f internal_name
-.OP \-i n
-.OP \-o out_file
-.I afm_file
-.I map_file
-.I font
-.br
-.ad \na
-.
-.
-.LP
-The whitespace between a command line option and its argument is optional.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B afmtodit
-creates a font file for use with groff,
-.BR grops ,
-and
-.BR gropdf .
-.
-.B afmtodit
-is written in perl;
-you must have perl version 5.004 or newer installed in order to run
-.BR afmtodit .
-.
-.
-.LP
-.I afm_file
-is the AFM (Adobe Font Metric) file for the font.
-.
-.
-.LP
-.I map_file
-is a file that says which groff character names map onto
-each PostScript character name;
-this file should contain a sequence of lines of the form
-.IP
-.I
-ps_char groff_char
-.LP
-where
-.I ps_char
-is the PostScript name of the character and
-.I groff_char
-is the groff name of the character (as used in the groff font file).
-.
-The same
-.I ps_char
-can occur multiple times in the file;
-each
-.I groff_char
-must occur at most once.
-.
-Lines starting with
-.B #
-and blank lines are ignored.
-.
-If the file isn\[aq]t found in the current directory, it is searched
-in the \[oq]devps/generate\[cq] subdirectory of the default font
-directory.
-.
-.
-.LP
-If a PostScript character is not mentioned in
-.IR map_file ,
-and a generic groff glyph name can't be deduced using the Adobe Glyph
-List (AGL, built into
-.BR afmtodit ),
-then
-.B afmtodit
-puts the PostScript character into the groff font file as an unnamed
-character which can only be accessed by the
-.B \eN
-escape sequence in
-.BR troff .
-.
-In particular, this is true for glyph variants like \[oq]foo.bar\[cq];
-all glyph names containing one or more periods are mapped to unnamed
-entities.
-.
-If option
-.B \-e
-is not specified, the encoding defined in the AFM file (i.e., entries
-with non-negative character codes) is used.
-.
-Please refer to section \[oq]Using Symbols\[cq] in the groff info file
-which describes how groff glyph names are constructed.
-.
-.
-.LP
-Characters not encoded in the AFM file (i.e., entries which have \-1
-as the character code) are still available in groff; they get glyph
-index values greater than 255 (or greater than the biggest character
-code used in the AFM file in the unlikely case that it is greater than
-255) in the groff font file.
-.
-Glyph indices of unencoded characters don\[aq]t have a specific order;
-it is best to access them with glyph names only.
-.
-.
-.LP
-The groff font file will be output to a file called
-.IR font ,
-unless the
-.B \-o
-option is used.
-.
-.
-.LP
-If there is a downloadable font file for the font, it may be listed in
-the file
-.BR @FONTDIR@/devps/download ;
-see
-.BR grops (@MAN1EXT@).
-.
-.
-.LP
-If the
-.B \-i
-option is used,
-.B afmtodit
-will automatically generate an italic correction,
-a left italic correction and a subscript correction
-for each character
-(the significance of these parameters is explained in
-.BR groff_font (@MAN5EXT@));
-these parameters may be specified for individual characters by
-adding to the
-.I afm_file
-lines of the form:
-.IP
-.BI italicCorrection\  ps_char\ n
-.br
-.BI leftItalicCorrection\  ps_char\ n
-.br
-.BI subscriptCorrection\  ps_char\ n
-.LP
-where
-.I ps_char
-is the PostScript name of the character,
-and
-.I n
-is the desired value of the corresponding parameter in thousandths of an em.
-.
-These parameters are normally needed only for italic (or oblique) fonts.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-.TP
-.BI \-a n
-Use
-.I n
-as the slant parameter in the font file;
-this is used by groff in the positioning of accents.
-.
-By default
-.B afmtodit
-uses the negative of the ItalicAngle specified in the afm file;
-with true italic fonts it is sometimes desirable to use
-a slant that is less than this.
-.
-If you find that characters from an italic font have accents
-placed too far to the right over them,
-then use the
-.B \-a
-option to give the font a smaller slant.
-.
-.TP
-.B \-c
-Include comments in the font file in order to identify the PS font.
-.
-.TP
-.BI \-d desc_file
-The device description file is
-.I desc_file
-rather than the default
-.BR DESC .
-.
-If not found in the current directory, the \[oq]devps\[qc]
-subdirectory of the default font directory is searched (this is true
-for both the default device description file and a file given with
-option
-.BR \-d ).
-.
-.TP
-.BI \-e enc_file
-The PostScript font should be reencoded to use the encoding described
-in enc_file.
-.
-The format of
-.I enc_file
-is described in
-.BR grops (@MAN1EXT@).
-.
-If not found in the current directory, the \[oq]devps\[cq]
-subdirectory of the default font directory is searched.
-.
-.TP
-.BI \-f name
-The internal name of the groff font is set to
-.IR name .
-.
-.TP
-.BI \-i n
-Generate an italic correction for each character so that the
-character's width plus the character's italic correction is equal to
-.I n
-thousandths of an em
-plus the amount by which the right edge of the character's bounding box
-is to the right of the character\[aq]s origin.
-.
-If this would result in a negative italic correction, use a zero
-italic correction instead.
-.
-.IP
-Also generate a subscript correction equal to the
-product of the tangent of the slant of the font and
-four fifths of the x-height of the font.
-.
-If this would result in a subscript correction greater than the italic
-correction, use a subscript correction equal to the italic correction
-instead.
-.
-.IP
-Also generate a left italic correction for each character
-equal to
-.I n
-thousandths of an em
-plus the amount by which the left edge of the character's bounding box
-is to the left of the character\[aq]s origin.
-.
-The left italic correction may be negative unless option
-.B \-m
-is given.
-.
-.IP
-This option is normally needed only with italic (or oblique) fonts.
-.
-The font files distributed with groff were created using an option of
-.B \-i50
-for italic fonts.
-.
-.TP
-.BI \-o out_file
-The output file is
-.I out_file
-instead of
-.IR font .
-.
-.TP
-.B \-k
-Omit any kerning data from the groff font.
-.
-This should be used only for mono-spaced fonts.
-.
-.TP
-.B \-m
-Prevent negative left italic correction values.
-.
-Roman font files distributed with groff were created with
-.B \-i0\ \-m
-to improve spacing with
-.BR @g@eqn (@MAN1EXT@).
-.
-.TP
-.B \-n
-Don't output a
-.B ligatures
-command for this font.
-.
-Use this with constant-width fonts.
-.
-.TP
-.B \-s
-The font is special.
-.
-The effect of this option is to add the
-.B special
-command to the font file.
-.
-.TP
-.B \-v
-Print version.
-.
-.TP
-.B \-x
-Don't use the built-in Adobe Glyph List.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'\fB@FONTDIR@/devps/download'u+2n
-.B @FONTDIR@/devps/DESC
-Device description file.
-.
-.TP
-.BI @FONTDIR@/devps/ F
-Font description file for font
-.IR F .
-.
-.TP
-.B @FONTDIR@/devps/download
-List of downloadable fonts.
-.
-.TP
-.B @FONTDIR@/devps/text.enc
-Encoding used for text fonts.
-.
-.TP
-.B @FONTDIR@/devps/generate/textmap
-Standard mapping.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff (@MAN1EXT@),
-.BR grops (@MAN1EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR perl (1)
-.
-.
-.LP
-The groff info file, section \[oq]Using Symbols\[cq].
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 4f2ce833bc59e7ff001a20885db8a4f7fb531a83..954c58e7f915d75c6a67d513ad27459abed85f46 100644 (file)
@@ -1,6 +1,6 @@
 #! /usr/bin/perl -w
 # -*- Perl -*-
-# Copyright (C) 1989-201 Free Software Foundation, Inc.
+# Copyright (C) 1989-2018 Free Software Foundation, Inc.
 #      Written by James Clark (jjc@jclark.com)
 #
 # This file is part of groff.
@@ -16,7 +16,7 @@
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 use strict;
 
@@ -65,7 +65,7 @@ my (@encoding, %in_encoding);
 my (%width, %height, %depth);
 my (%left_side_bearing, %right_side_bearing);
 
-open(AFM, $afm) || die "$prog: can't open \`$ARGV[0]': $!\n";
+open(AFM, $afm) || die "$prog: can't open '$ARGV[0]': $!\n";
 
 while (<AFM>) {
     chomp;
@@ -179,7 +179,7 @@ my ($sizescale, $resolution, $unitwidth);
 $sizescale = 1;
 
 open(DESC, $desc) || open(DESC, $sys_desc) ||
-    die "$prog: can't open \`$desc' or \`$sys_desc': $!\n";
+    die "$prog: can't open '$desc' or '$sys_desc': $!\n";
 while (<DESC>) {
     next if /^#/;
     chop;
@@ -203,7 +203,7 @@ if ($opt_e) {
 
     my $sys_opt_e = $groff_sys_fontdir . "/devps/" . $opt_e;
     open(ENCODING, $opt_e) || open(ENCODING, $sys_opt_e) ||
-       die "$prog: can't open \`$opt_e' or \`$sys_opt_e': $!\n";
+       die "$prog: can't open '$opt_e' or '$sys_opt_e': $!\n";
     while (<ENCODING>) {
        next if /^#/;
        chop;
@@ -224,7 +224,7 @@ if ($opt_e) {
 my (%nmap, %map);
 
 open(MAP, $map) || open(MAP, $sys_map) ||
-    die "$prog: can't open \`$map' or \`$sys_map': $!\n";
+    die "$prog: can't open '$map' or '$sys_map': $!\n";
 while (<MAP>) {
     next if /^#/;
     chop;
@@ -235,11 +235,11 @@ while (<MAP>) {
            # The PostScript character "space" is automatically mapped
            # to the groff character "space"; this is for grops.
            warn "you are not allowed to map to " .
-                "the groff character \`space'";
+                "the groff character 'space'";
        }
        elsif ($field[0] eq "space") {
            warn "you are not allowed to map " .
-                "the PostScript character \`space'";
+                "the PostScript character 'space'";
        }
        else {
            $nmap{$field[0]} += 0;
@@ -247,7 +247,7 @@ while (<MAP>) {
            $nmap{$field[0]} += 1;
 
            # There is more than one way to make a PS glyph name;
-           # let us try Unicode names with both `uni' and `u' prefixes.
+           # let us try Unicode names with both 'uni' and 'u' prefixes.
            my $utmp = $AGL_to_unicode{$field[0]};
            if (defined $utmp && $utmp =~ /^[0-9A-F]{4}$/) {
                foreach my $unicodepsname ("uni" . $utmp, "u" . $utmp) {
@@ -295,19 +295,19 @@ if (!$opt_x) {
            #   Drop all characters from the glyph name starting with the
            #   first occurrence of a period (U+002E FULL STOP), if any.
            #   ?? We avoid mapping of glyphs with periods, since they are
-           #   likely to be variant glyphs, leading to a `many ps glyphs --
+           #   likely to be variant glyphs, leading to a 'many ps glyphs --
            #   one groff glyph' conflict.
            #
            #   If multiple glyphs in the font represent the same character
-           #   in the Unicode standard, as do `A' and `A.swash', for example,
+           #   in the Unicode standard, as do 'A' and 'A.swash', for example,
            #   they can be differentiated by using the same base name with
            #   different suffixes.  This suffix (the part of glyph name that
            #   follows the first period) does not participate in the
            #   computation of a character sequence.  It can be used by font
            #   designers to indicate some characteristics of the glyph.  The
            #   suffix may contain periods or any other permitted characters.
-           #   Small cap A, for example, could be named `uni0041.sc' or
-           #   `A.sc'.
+           #   Small cap A, for example, could be named 'uni0041.sc' or
+           #   'A.sc'.
 
            next if $ch =~ /\./;
 
@@ -331,7 +331,7 @@ if (!$opt_x) {
                    $utmp = "U+" . $utmp;
                }
 
-               #   * Otherwise, if the component is of the form `uni'
+               #   * Otherwise, if the component is of the form 'uni'
                #     (U+0075 U+006E U+0069) followed by a sequence of
                #     uppercase hexadecimal digits (0 .. 9, A .. F, i.e.,
                #     U+0030 .. U+0039, U+0041 .. U+0046), the length of
@@ -354,7 +354,7 @@ if (!$opt_x) {
                    }
                }
 
-               #   * Otherwise, if the component is of the form `u' (U+0075)
+               #   * Otherwise, if the component is of the form 'u' (U+0075)
                #     followed by a sequence of four to six uppercase
                #     hexadecimal digits {0 .. 9, A .. F} (U+0030 .. U+0039,
                #     U+0041 .. U+0046), and those digits represent a number
@@ -397,7 +397,7 @@ if (!$opt_x) {
 }
 
 # Check explicitly for groff's standard ligatures -- many afm files don't
-# have proper `L' entries.
+# have proper 'L' entries.
 
 my %default_ligatures = (
   "fi", "f i",
@@ -415,7 +415,7 @@ while (my ($lig, $components) = each %default_ligatures) {
 
 # print it all out
 
-open(FONT, ">$outfile") || die "$prog: can't open \`$outfile' for output: $!\n";
+open(FONT, ">$outfile") || die "$prog: can't open '$outfile' for output: $!\n";
 select(FONT);
 
 print("# This file has been generated with " .
index cda121a301061d9cc2caa48ed025dcb21a37f504..57a06576ec317688daa10ceaa2698a7805b4fe75 100644 (file)
@@ -2038,7 +2038,7 @@ my %unicode_decomposed = (
 
 # This table has been algorithmically derived from the file glyphlist.txt,
 # version 2.0, available from partners.adobe.com, on 2005-12-09.  For glyphs
-# `Delta', `Omega', and `mu', the values have been manually changed to the
+# 'Delta', 'Omega', and 'mu', the values have been manually changed to the
 # ones from aglfn.txt, version 1.6.
 my %AGL_to_unicode = (
   "A", "0041",
index c60aeb12ca32c8fda2d6921b5fe8b5375dc3b64f..251a4158620f0a030dbdc91fd1058103f53edf2b 100755 (executable)
@@ -1,9 +1,9 @@
 #! /bin/sh
 #
-# make-afmtodit-tables -- script for creating the `unicode_decomposed'
-#                         and `AGL_to_unicode' tables
+# make-afmtodit-tables -- script for creating the 'unicode_decomposed'
+#                         and 'AGL_to_unicode' tables
 #
-# Copyright (C) 2005-201 Free Software Foundation, Inc.
+# Copyright (C) 2005-2018 Free Software Foundation, Inc.
 #      Written by Werner Lemberg <wl@gnu.org>
 #
 # This file is part of groff.
@@ -19,7 +19,7 @@
 # for more details.
 #
 # You should have received a copy of the GNU General Public License
-# along with this program. If not, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 #
 # usage:
 #   make-afmtodit-tables \
 #     UnicodeData.txt version-string glyphlist.txt > afmtodit.in
 #
-# `UnicodeData.txt' is the central database file from the Unicode standard.
+# 'UnicodeData.txt' is the central database file from the Unicode standard.
 # Unfortunately, it doesn't contain a version number which must be thus
 # provided manually as an additional parameter.
 #
-# `glyphlist.txt' holds the Adobe Glyph List (AGL).
+# 'glyphlist.txt' holds the Adobe Glyph List (AGL).
 #
 # This program needs a C preprocessor.
 #
@@ -50,11 +50,11 @@ version_string="$2"
 glyph_list="$3"
 
 if test ! -f "$1"; then
-  echo "File \`$1' doesn't exist" >&2
+  echo "File '$1' doesn't exist" >&2
   exit 2
 fi
 if test ! -f "$3"; then
-  echo "File \`$3' doesn't exist" >&2
+  echo "File '$3' doesn't exist" >&2
   exit 2
 fi
 
diff --git a/src/utils/hpftodit/Makefile.sub b/src/utils/hpftodit/Makefile.sub
deleted file mode 100644 (file)
index 657e4df..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# Makefile.sub for `src utils hpftodit'
-#
-# File position: <groff-source>/src/utils/hpftodit/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=hpftodit$(EXEEXT)
-MAN1=hpftodit.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=hpftodit.$(OBJEXT) \
-     hpuni.$(OBJEXT)
-CCSRCS=$(srcdir)/hpftodit.cpp \
-       $(srcdir)/hpuni.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/utils/hpftodit/hpftodit.1.man b/src/utils/hpftodit/hpftodit.1.man
new file mode 100644 (file)
index 0000000..566a72f
--- /dev/null
@@ -0,0 +1,428 @@
+.TH HPFTODIT @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+hpftodit \- create font description files for use with groff \-Tlj4
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr hpftodit_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1994-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY hpftodit
+.OP \-aqs
+.OP \-i n
+.I tfm-file
+.I map-file
+.I output-font
+.YS
+.
+.SY hpftodit
+.B \-d
+.I tfm-file
+.RI [ map-file ]
+.YS
+.
+.SY hpftodit
+.B \-\-help
+.YS
+.
+.SY hpftodit
+.B \-v
+.SY hpftodit
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B hpftodit
+creates a font file for use with a Hewlett-Packard LaserJet\~\%4-series
+(or newer) printer with
+.BR "groff \-Tlj4" ,
+using data from an HP tagged font metric (TFM) file.
+.
+.I tfm-file
+is the name of the TFM file for the font;
+Intellifont and TrueType TFM files are supported,
+but symbol set TFM files are not.
+.
+.I map-file
+is a file giving the
+.I groff
+names for characters in the font;
+this file should consist of a sequence of lines of the form:
+.RS
+.EX
+.IR "m u c1 c2 " "\&.\|.\|.\& [#" " comment" "]"
+.EE
+.RE
+where
+.I m
+is a decimal integer giving the MSL (Master Symbol List) number of the
+character,
+.I u
+is a hexadecimal integer giving the Unicode value of the character,
+and
+.IR c1 ,
+.IR c2 ", .\|.\|."
+are the
+.I groff
+names of the character
+(see
+.BR groff_char (7)
+for a list).
+.
+The values can be separated by any whitespace;
+the Unicode value must use uppercase digits A\^\[en]\^F,
+and must be without a leading
+.RB \[oq] 0x \[cq],
+.RB \[oq] u \[cq],
+or
+.RB \[oq] U+ \[cq].
+Unicode values corresponding to composite glyphs are decomposed;
+e.g.,
+.RB \[oq] u00C0 \[cq]
+becomes
+.RB \[oq] u0041_0300 \[cq].
+.
+The name for a glyph without a
+.I groff
+name may be given as
+.BI u XXXX
+if the glyph corresponds to a Unicode value,
+or as an unnamed glyph
+.RB \[oq] \-\-\- \[cq].
+.
+If the given Unicode value is in the Private Use Area
+(0xE000\^\[en]\^0xF8FF),
+the glyph is included as an unnamed glyph.
+.
+Refer to
+.BR groff_diff (@MAN1EXT@)
+for additional information about unnamed glyphs and how to access them.
+.
+.
+.LP
+Blank lines and lines beginning with
+.RB \[oq] # \[cq]
+are ignored.
+.
+A
+.RB \[oq] # \[cq]
+following one or more
+.I groff
+names begins a comment.
+.
+Because
+.RB \[oq] # \[cq]
+is a valid
+.I groff
+name,
+it must appear first in a list of
+.I groff
+names if a comment is included,
+e.g.,
+.
+.RS
+.EX
+.B
+3   0023   #   # number sign
+.EE
+.RE
+.
+or
+.
+.RS
+.EX
+.B
+3   0023   # sh   # number sign
+.EE
+.RE
+.
+rather than
+.
+.RS
+.EX
+.B
+3   0023   sh #   # number sign
+.EE
+.RE
+.
+which will treat the first
+.RB \[oq] # \[cq]
+as the beginning of the comment.
+.
+.
+.LP
+The
+.I groff
+font file is written to the specified
+.IR output-font ;
+if this operand is
+.RB \[oq] \- \[cq],
+the font file is written to the standard output.
+.
+.
+.LP
+The
+.B \-s
+option should be given if the font is special
+(a font is \[lq]special\[rq] if
+.I groff
+should search it whenever a character is not found in the current font).
+.
+If the font is special,
+it should be listed in the
+.B fonts
+command in the DESC file;
+if it is not special,
+there is no need to list it,
+since
+.I groff
+can automatically mount it when it's first used.
+.
+.
+.LP
+If the
+.B \-i
+option is used,
+.B hpftodit
+automatically will generate an italic correction,
+a left italic correction and a subscript correction
+for each character
+(the significance of these parameters is explained in
+.BR groff_font (@MAN5EXT@)).
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.TP
+.B \-a
+Include characters in the TFM file that are not included in
+.IR map-file .
+.
+A glyph with corresponding Unicode value is given the name
+.RI u XXXX ;
+a glyph without a Unicode value is included as an unnamed glyph
+\[oq]\-\^\-\^\-\[cq].
+.
+A glyph with a Unicode value in the Private Use Area
+(0xE000\^\[en]\^0xF8FF) also is included as an unnamed glyph.
+.
+.
+.IP
+This option provides a simple means of adding Unicode-named and
+unnamed glyphs to a font without including them in the map file,
+but it affords little control over which glyphs are placed in a regular
+font and which are placed in a special font.
+.
+The presence or absence of the
+.B \-s
+option has some effect on which glyphs are included:
+without the
+.B \-s
+option,
+only the \[lq]text\[rq] symbol sets are searched for matching glyphs;
+with the
+.B \-s
+option,
+only the \[lq]mathematical\[rq] symbol sets are searched.
+.
+Nonetheless,
+restricting the symbol sets searched isn't very selective\[em]many
+glyphs are placed in both regular and special fonts.
+.
+Normally,
+the
+.B \-a
+option should be used only as a last resort.
+.
+.
+.TP
+.B \-d
+Dump information about the TFM file to the standard output;
+this option can be useful for ensuring that a TFM file is a proper match
+for a font,
+and that the contents of the TFM file are suitable.
+.
+The information includes the values of important TFM tags,
+and a listing (by MSL number for Intellifont TFM files or by Unicode
+value for TrueType TFM files) of the glyphs included in the TFM file.
+.
+The unit of measure \[oq]DU\[cq] for some tags indicates design units;
+there are 8782\~design units per em for Intellifont fonts,
+and 2048\~design units per em for TrueType fonts.
+.
+Note that the accessibility of a glyph depends on its inclusion in a
+symbol set;
+some TFM files list many glyphs but only a few symbol sets.
+.
+.IP
+The glyph listing includes the glyph index within the TFM file,
+the MSL or Unicode value,
+and the symbol set and character code that will be used to print the
+glyph.
+.
+If
+.I map-file
+is given,
+.I groff
+names are given for matching glyphs.
+.
+If only the glyph index and MSL or Unicode value are given,
+the glyph does not appear in any supported symbol set and cannot be
+printed.
+.
+.IP
+With the
+.B \-d
+option,
+.I map-file
+is optional,
+and
+.I output-font
+is ignored if given.
+.
+.TP
+.B \-q
+Suppress warnings about characters in the map file that were not found
+in the TFM file.
+.
+Warnings never are given for unnamed glyphs or by glyphs named by their
+Unicode values.
+.
+This option is useful when sending the output of
+.B hpftodit
+to the standard output.
+.
+.TP
+.B \-v
+Print the
+.B hpftodit
+version number and exit.
+.
+.TP
+.B \-s
+The font is special.
+.
+This option adds the
+.B special
+command to the font file,
+and affects the order in which HP symbol sets are searched for each
+glyph.
+.
+Without the
+.B \-s
+option,
+the \[lq]text\[rq] sets are searched before the \[lq]mathematical\[rq]
+symbol sets.
+With the
+.B \-s
+option,
+the search order is reversed.
+.
+.TP
+.BI \-i n
+Generate an italic correction for each character so that the character's
+width plus the character's italic correction is equal to
+.I n
+thousandths of an em plus the amount by which the right edge of the
+character's bounding is to the right of the character's origin.
+.
+If this would result in a negative italic correction,
+use a zero italic correction instead.
+.
+.IP
+Also generate a subscript correction equal to the product of the tangent
+of the slant of the font and four fifths of the x-height of the font.
+.
+If this would result in a subscript correction greater than the italic
+correction,
+use a subscript correction equal to the italic correction instead.
+.
+.IP
+Also generate a left italic correction for each character equal to
+.I n
+thousandths of an em plus the amount by which the left edge of the
+character's bounding box is to the left of the character's origin.
+.
+The left italic correction may be negative.
+.
+.IP
+This option normally is needed only with italic or oblique fonts;
+a value of 50 (0.05\~em) usually is a reasonable choice.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @FONTDIR@/\:devlj4/\:DESC
+device description file
+.
+.
+.TP
+.IR @FONTDIR@/\:devlj4/\: F
+Font description file for font
+.I F
+.
+.
+.TP
+.IR @FONTDIR@/\:devlj4/\:generate/\: * .map
+symbol mapping files
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.BR groff (@MAN1EXT@),
+.BR groff_diff (@MAN1EXT@),
+.BR grolj4 (@MAN1EXT@),
+.BR groff_font (@MAN5EXT@),
+.BR lj4_font (@MAN5EXT@)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[hpftodit_C]
+.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/src/utils/hpftodit/hpftodit.am b/src/utils/hpftodit/hpftodit.am
new file mode 100644 (file)
index 0000000..a7c3466
--- /dev/null
@@ -0,0 +1,42 @@
+# Automake rules for 'src utils hpftodit'
+#
+# File position: <groff-source>/src/utils/hpftodit/hpftodit.am
+#
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# 'groff' 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.
+#
+# 'groff' 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, see
+# <http://www.gnu.org/licenses/gpl-2.0.html>.
+#
+########################################################################
+
+bin_PROGRAMS += hpftodit
+man1_MANS += src/utils/hpftodit/hpftodit.1
+EXTRA_DIST += src/utils/hpftodit/hpftodit.1.man
+hpftodit_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+hpftodit_SOURCES = \
+  src/utils/hpftodit/hpftodit.cpp \
+  src/utils/hpftodit/hpuni.cpp
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 069608df912ec32bc26142d3eaf77e88ae24abb7..12989552fafd96aaa3e6e6a4a938e267a47b9600 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1994-201 Free Software Foundation, Inc.
+/* Copyright (C) 1994-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /*
 TODO
@@ -344,7 +344,7 @@ main(int argc, char **argv)
   current_lineno = -1;         // no line numbers
   if (!debug_flag && !equal(argv[optind + 2], "-"))
     if (freopen(argv[optind + 2], "w", stdout) == NULL)
-      fatal("cannot open `%1': %2", argv[optind + 2], strerror(errno));
+      fatal("cannot open '%1': %2", argv[optind + 2], strerror(errno));
   current_filename = argv[optind];
 
   check_units(f, tfm_type, &ppi, &upem);
@@ -403,7 +403,7 @@ File::File(const char *s)
   // on byte counts.
   int fd = open(s, O_RDONLY | O_BINARY);
   if (fd < 0)
-    fatal("cannot open `%1': %2", s, strerror(errno));
+    fatal("cannot open '%1': %2", s, strerror(errno));
   current_filename = s;
   struct stat sb;
   if (fstat(fd, &sb) < 0)
@@ -938,7 +938,7 @@ output_charset(const int tfm_type)
             && charcode_name_table[charcode]) {
       char *name = charcode_name_table[charcode]->name;
       // don't warn about Unicode or unnamed glyphs
-      //  that aren't in the the TFM file
+      //  that aren't in the TFM file
       if (tfm_type == UNICODE && !quiet_flag && !equal(name, UNNAMED)
          && !is_uname(name)) {
        fprintf(stderr, "%s: warning: symbol U+%04X (%s",
@@ -1339,7 +1339,7 @@ read_map(const char *file, const int tfm_type)
   errno = 0;
   FILE *fp = fopen(file, "r");
   if (!fp) {
-    error("can't open `%1': %2", file, strerror(errno));
+    error("can't open '%1': %2", file, strerror(errno));
     return 0;
   }
   current_filename = file;
diff --git a/src/utils/hpftodit/hpftodit.man b/src/utils/hpftodit/hpftodit.man
deleted file mode 100644 (file)
index 0f37a7d..0000000
+++ /dev/null
@@ -1,385 +0,0 @@
-.tr ~
-.TH HPFTODIT @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-hpftodit \- create font description files for use with groff \-Tlj4
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1994-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Definitions
-.\" --------------------------------------------------------------------
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.de CW
-.ie \\n(.$>2 \&\\$1\f(CR\\$2\fP\\$3
-.el \&\f(CR\\$1\fP\\$2
-..
-.
-.tr ~
-.
-.\" --------------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------------
-.B hpftodit
-[
-.B \-adqsv
-]
-[
-.BI \-i n
-]
-.I tfm_file
-.I map_file
-.I font
-.PP
-It is possible to have whitespace between the
-.B \-i
-option and its parameter.
-.
-.
-.\" --------------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------------
-.
-.B hpftodit
-creates a font file for use with a Hewlett-Packard LaserJet~4\(enseries
-(or newer) printer with
-.BR "groff \-Tlj4" ,
-using data from an HP tagged font metric (TFM) file.
-.I tfm_file
-is the name of the TFM file for the font; Intellifont and
-TrueType TFM files are supported, but symbol set TFM files are not.
-.I map_file
-is a file giving the groff names for characters in the font; this file
-should consist of a sequence of lines of the form:
-.IP
-.I
-m u c1 c2 \fR.\|.\|. [
-.CW #
-.I comment
-]
-.
-.
-.LP
-where
-.I m
-is a decimal integer giving the MSL number of the character,
-.I u
-is a hexadecimal integer giving the Unicode value of the character,
-and
-.IR c1 ,
-.IR c2 ", .\|.\|."
-are the groff names of the character.
-.
-The values can be separated by any whitespace; the Unicode value must
-use uppercase digits A\^\(en\^F, and must be without a leading
-.CW \[oq] 0x \[cq],
-.CW \[oq] u \[cq],
-or
-.CW \[oq] U+ \[cq].
-Unicode values corresponding to composite glyphs are decomposed; e.g.,
-.CW \[oq] u00C0 \[cq]
-becomes
-.CW \[oq] u0041_0300 \[cq].
-.
-The name for a glyph without a groff name may be given as
-.CW u \fIXXXX\fP
-if the glyph corresponds to a Unicode value, or as an unnamed glyph
-.CW \[oq] --- \[cq].
-.
-If the given Unicode value is in the Private Use Area
-(0xE000\^\(en\^0xF8FF), the glyph is included as an unnamed glyph.
-.
-Refer to
-.BR groff_diff (@MAN1EXT@)
-for additional information about unnamed glyphs and how to access them.
-.
-.
-.LP
-Blank lines and lines beginning with
-.CW \[oq] # \[cq]
-are ignored.
-.
-A
-.CW \[oq] # \[cq]
-following one or more groff names begins a comment.
-.
-Because
-.CW \[oq] # \[cq]
-is a valid groff name, it must appear first in a list of
-groff names if a comment is included, e.g.,
-.IP
-.CW "3   0023   #   # number sign"
-.LP
-or
-.IP
-.CW "3   0023   # sh   # number sign"
-.LP
-rather than
-.IP
-.CW "3   0023   sh #   # number sign"
-.LP
-which will treat the first
-.CW \[oq] # \[cq]
-as the beginning of the comment.
-.
-.
-.LP
-.I font
-is the name of the groff font file.
-.
-The groff font file is written to
-.IR font ;
-if
-.I font
-is specified as
-.CW \[oq] - \[cq],
-the output is written to the standard output.
-.
-.
-.LP
-The
-.B \-s
-option should be given if the font is special
-(a font is
-.I special
-if
-.B troff
-should search it whenever
-a character is not found in the current font).
-.
-If the font is special,
-it should be listed in the
-.B fonts
-command in the DESC file;
-if it is not special, there is no need to list it, since
-.B troff
-can automatically mount it when it\[aq]s first used.
-.
-.
-.LP
-If the
-.B \-i
-option is used,
-.B hpftodit
-automatically will generate an italic correction,
-a left italic correction and a subscript correction
-for each character
-(the significance of these parameters is explained in
-.BR groff_font (@MAN5EXT@)).
-.
-.
-.\" --------------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------------
-.
-.TP
-.B \-a
-Include characters in the TFM file that are not included in the map
-file.
-.
-A glyph with corresponding Unicode value is given the name
-.RI u XXXX ;
-a glyph without a Unicode value is included as an unnamed glyph
-\&\[oq]\-\^\-\^\-\[cq].
-.
-A glyph with a Unicode value in the Private Use Area
-(0xE000\^\(en\^0xF8FF) also is included as an unnamed glyph.
-.
-.IP
-This option provides a simple means of adding Unicode-named and
-unnamed glyphs to a font without including them in the map file, but
-it affords little control over which glyphs are placed in a regular
-font and which are placed in a special font.
-.
-The presence or absence of the
-.B \-s
-option has some effect on which glyphs are included: without the
-.B \-s
-option, only the \(lqtext\(rq symbol sets are searched for matching
-glyphs; with the
-.B \-s
-option, only the \(lqmathematical\(rq symbol sets
-are searched.
-.
-Nonetheless, restricting the symbol sets searched isn\[aq]t very
-selective\(emmany glyphs are placed in both regular and special fonts.
-.
-Normally, the
-.B \-a
-option should be used only as a last resort.
-.
-.
-.TP
-.B \-d
-Dump information about the TFM file to the standard output; this
-option can be useful for ensuring that a TFM file is a proper match
-for a font, and that the contents of the TFM file are suitable.
-.
-The information includes the values of important TFM tags, and a
-listing (by MSL number for Intellifont TFM files or by Unicode value
-for TrueType TFM files) of the glyphs included in the TFM file.
-.
-The unit of measure \[oq]DU\[cq] for some tags indicates design units;
-there are 8782 design units per em for Intellifont fonts, and 2048
-design units per em for TrueType fonts.
-.
-Note that the accessibility of a glyph depends on its inclusion in a
-symbol set; some TFM files list many glyphs but only a few symbol
-sets.
-.
-.IP
-The glyph listing includes the glyph index within the TFM file, the MSL
-or Unicode value, and the symbol set and character code that will be
-used to print the glyph.
-.
-If
-.I map_file
-is given,
-groff names are given for matching glyphs.
-.
-If only the glyph index and MSL or Unicode value are given, the glyph
-does not appear in any supported symbol set and cannot be printed.
-.
-.IP
-With the
-.B \-d
-option,
-.I map_file
-is optional, and
-.I font
-is ignored if given.
-.
-.TP
-.B \-q
-Suppress warnings about characters in the map file that were not found
-in the TFM file.
-.
-Warnings never are given for unnamed glyphs or by glyphs named by their
-Unicode values.
-.
-This option is useful when sending the output of
-.B hpftodit
-to the standard output.
-.
-.TP
-.B \-v
-Print the
-.B hpftodit
-version number.
-.
-.TP
-.B \-s
-The font is special.
-.
-This option adds the
-.B special
-command to the font file, and affects the order in which HP symbol sets
-are searched for each glyph.
-.
-Without the
-.B \-s
-option, the \[lq]text\[rq] sets are searched before
-the \[lq]mathematical\[rq] symbol sets.
-With the
-.B \-s
-option, the search order is reversed.
-.
-.TP
-.BI \-i n
-Generate an italic correction for each character so that the
-character\[aq]s width plus the character\[aq]s italic correction is
-equal to
-.I n
-thousandths of an em plus the amount by which the right edge of the
-character\[aq]s bounding is to the right of the character\[aq]s
-origin.
-.
-If this would result in a negative italic correction, use a zero italic
-correction instead.
-.
-.IP
-Also generate a subscript correction equal to the product of the
-tangent of the slant of the font and four fifths of the x-height of
-the font.
-.
-If this would result in a subscript correction greater than the italic
-correction, use a subscript correction equal to the italic correction
-instead.
-.
-.IP
-Also generate a left italic correction for each character equal to
-.I n
-thousandths of an em plus the amount by which the left edge of the
-character\[aq]s bounding box is to the left of the character\[aq]s
-origin.
-.
-The left italic correction may be negative.
-.
-.IP
-This option normally is needed only with italic or oblique fonts;
-a value of 50 (0.05 em) usually is a reasonable choice.
-.
-.
-.\" --------------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------------
-.
-.ad 0
-.TP \w'\fB@FONTDIR@/devlj4/generate/\fP\,\fI*\/\fP.map'u+2n
-.B @FONTDIR@/devlj4/DESC
-Device description file.
-.TP
-.BI @FONTDIR@/devlj4/ F
-Font description file for font
-.IR F .
-.TP
-.BI @FONTDIR@/devlj4/generate/ * .map
-Symbol mapping files
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR groff (@MAN1EXT@),
-.BR groff_diff (@MAN1EXT@),
-.BR grolj4 (@MAN1EXT@),
-.BR groff_font (@MAN5EXT@),
-.BR lj4_font (@MAN5EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH "COPYING"
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 6622e283a7276bed964e54be775e8e7616637d3f..72f1742f74e5d201dafa6705023eeb139c6017a7 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 2003-201 Free Software Foundation, Inc.
+/* Copyright (C) 2003-2018 Free Software Foundation, Inc.
      Written by Jeff Conrad (jeff_conrad@msn.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 #include "stringclass.h"
diff --git a/src/utils/indxbib/Makefile.sub b/src/utils/indxbib/Makefile.sub
deleted file mode 100644 (file)
index 466f627..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# Makefile.sub for `src utils indxbib'
-#
-# File position: <groff-source>/src/utils/indxbib/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=indxbib$(EXEEXT)
-MAN1=indxbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=\
-  indxbib.$(OBJEXT) \
-  signal.$(OBJEXT)
-CCSRCS=\
-  $(srcdir)/indxbib.cpp
-CSRCS=\
-  $(srcdir)/signal.c
-NAMEPREFIX=$(g)
-RM=rm -f
-
-install_data: $(srcdir)/eign
-       -test -d $(DESTDIR)$(datadir) \
-         || $(mkinstalldirs) $(DESTDIR)$(datadir)
-       -test -d $(DESTDIR)$(dataprogramdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(dataprogramdir)
-       -test -d $(DESTDIR)$(datasubdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(datasubdir)
-       if test -f /usr/lib/eign; then \
-         $(MK) $(DESTDIR)$(common_words_file); \
-         ln -s /usr/lib/eign $(DESTDIR)$(common_words_file) 2>/dev/null \
-           || ln /usr/lib/eign $(DESTDIR)$(common_words_file) 2>/dev/null \
-           || cp /usr/lib/eign $(DESTDIR)$(common_words_file); \
-       else \
-         $(RM) $(DESTDIR)$(common_words_file); \
-         $(INSTALL_DATA) $(srcdir)/eign $(DESTDIR)$(common_words_file); \
-       fi
-
-uninstall_sub:
-       $(RM) $(DESTDIR)$(common_words_file)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/utils/indxbib/indxbib.1.man b/src/utils/indxbib/indxbib.1.man
new file mode 100644 (file)
index 0000000..25a6aab
--- /dev/null
@@ -0,0 +1,276 @@
+.TH @G@INDXBIB @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@indxbib \- make inverted index for bibliographic databases
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY @g@indxbib
+.OP \-w
+.OP \-c file
+.OP \-d dir
+.OP \-f file
+.OP \-h n
+.OP \-i string
+.OP \-k n
+.OP \-l n
+.OP \-n n
+.OP \-o file
+.OP \-t n
+.RI [ filename
+\&.\|.\|.\&]
+.YS
+.
+.SY @g@indxbib
+.B \-\-help
+.YS
+.
+.SY @g@indxbib
+.B \-v
+.SY @g@indxbib
+.B \-\-version
+.YS
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B @g@indxbib
+makes an inverted index for the bibliographic databases in
+.IR filename \|.\|.\|.
+for use with
+.BR @g@refer (@MAN1EXT@),
+.BR @g@lookbib (@MAN1EXT@),
+and
+.BR lkbib (@MAN1EXT@).
+.
+The index will be named
+.RI filename @INDEX_SUFFIX@ ;
+the index is written to a temporary file which is then renamed to
+this.
+.
+If no filenames are given on the command line because the
+.B \-f
+option has been used, and no
+.B \-o
+option is given, the index will be named
+.IR @DEFAULT_INDEX_NAME@@INDEX_SUFFIX@ .
+.
+.
+.LP
+Bibliographic databases are divided into records by blank lines.
+Within a record, each fields starts with a
+.B %
+character at the beginning of a line.
+.
+Fields have a one letter name which follows the
+.B %
+character.
+.
+.
+.LP
+The values set by the
+.BR \-c ,
+.BR \-n ,
+.BR \-l ,
+and
+.B \-t
+options are stored in the index;
+when the index is searched, keys will be discarded and truncated in a
+manner appropriate to these options;
+the original keys will be used for verifying that any record
+found using the index actually contains the keys.
+.
+This means that a user of an index need not know whether these
+options were used in the creation of the index,
+provided that not all the keys to be searched for
+would have been discarded during indexing
+and that the user supplies at least the part of each key
+that would have remained after being truncated during indexing.
+.
+The value set by the
+.B \-i
+option is also stored in the index
+and will be used in verifying records found using the index.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.B \-v
+Print the version number.
+.
+.TP
+.B \-w
+Index whole files.
+.
+Each file is a separate record.
+.
+.TP
+.BI \-c file
+Read the list of common words from
+.I file
+instead of
+.IR @COMMON_WORDS_FILE@ .
+.
+.TP
+.BI \-d dir
+Use
+.I dir
+as the pathname of the current working directory to store in the index,
+instead of the path printed by
+.BR pwd (1).
+.
+Usually
+.I dir
+will be a symbolic link that points to the directory printed by
+.BR pwd (1).
+.
+.TP
+.BI \-f file
+Read the files to be indexed from
+.IR file .
+.
+If
+.I file
+is
+.BR \- ,
+files will be read from the standard input.
+The
+.B \-f
+option can be given at most once.
+.
+.TP
+.BI \-i string
+Don't index the contents of fields whose names are in
+.IR string .
+.
+Initially
+.I string
+is
+.BR XYZ .
+.
+.TP
+.BI \-h n
+Use the first prime greater than or equal to
+.I n
+for the size of the hash table.
+.
+Larger values of
+.I n
+will usually make searching faster,
+but will make the index larger
+and
+.B @g@indxbib
+use more memory.
+.
+Initially
+.I n
+is 997.
+.
+.TP
+.BI \-k n
+Use at most
+.I n
+keys per input record.
+.
+Initially
+.I n
+is 100.
+.
+.TP
+.BI \-l n
+Discard keys that are shorter than
+.IR n .
+.
+Initially
+.I n
+is 3.
+.
+.TP
+.BI \-n n
+Discard the
+.I n
+most common words.
+.
+Initially
+.I n
+is 100.
+.
+.TP
+.BI \-o basename
+The index should be named
+.RI basename @INDEX_SUFFIX@ .
+.
+.TP
+.BI \-t n
+Truncate keys to
+.IR n .
+.
+Initially
+.I n
+is 6.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.RI filename @INDEX_SUFFIX@
+Index.
+.
+.TP
+.I @DEFAULT_INDEX_NAME@@INDEX_SUFFIX@
+Default index name.
+.
+.TP
+.I @COMMON_WORDS_FILE@
+List of common words.
+.
+.TP
+.IR indxbib XXXXXX
+Temporary file.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.BR @g@refer (@MAN1EXT@),
+.BR lkbib (@MAN1EXT@),
+.BR @g@lookbib (@MAN1EXT@)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/utils/indxbib/indxbib.am b/src/utils/indxbib/indxbib.am
new file mode 100644 (file)
index 0000000..221ed58
--- /dev/null
@@ -0,0 +1,59 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+indxbib_srcdir = $(top_srcdir)/src/utils/indxbib
+prefixexecbin_PROGRAMS += indxbib
+indxbib_SOURCES = \
+  src/utils/indxbib/indxbib.cpp \
+  src/utils/indxbib/signal.c
+src/utils/indxbib/indxbib.$(OBJEXT): defs.h
+indxbib_LDADD = libbib.a libgroff.a $(LIBM) lib/libgnu.a
+PREFIXMAN1 += src/utils/indxbib/indxbib.1
+EXTRA_DIST += \
+  src/utils/indxbib/indxbib.1.man \
+  src/utils/indxbib/eign
+
+install-data-local: install_indxbib
+install_indxbib: $(indxbib_srcdir)/eign
+       -test -d $(DESTDIR)$(datadir) \
+         || $(mkinstalldirs) $(DESTDIR)$(datadir)
+       -test -d $(DESTDIR)$(dataprogramdir) \
+         || $(mkinstalldirs) $(DESTDIR)$(dataprogramdir)
+       -test -d $(DESTDIR)$(datasubdir) \
+         || $(mkinstalldirs) $(DESTDIR)$(datasubdir)
+       if test -f /usr/lib/eign; then \
+         rm -f $(DESTDIR)$(common_words_file); \
+         ln -s /usr/lib/eign $(DESTDIR)$(common_words_file) 2>/dev/null \
+           || ln /usr/lib/eign $(DESTDIR)$(common_words_file) 2>/dev/null \
+           || cp /usr/lib/eign $(DESTDIR)$(common_words_file); \
+       else \
+         rm -f $(DESTDIR)$(common_words_file); \
+         $(INSTALL_DATA) $(indxbib_srcdir)/eign $(DESTDIR)$(common_words_file); \
+       fi
+
+uninstall-local: uninstall_indxbib
+uninstall_indxbib:
+       rm -f $(DESTDIR)$(common_words_file)
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index ee568d8aa93d317ae4baed96c6c23454a4b9eb64..018e53e8b340f29cac6de67b3168457408d128a7 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -221,7 +221,7 @@ int main(int argc, char **argv)
     name_max = file_name_max(".");
   const char *filename = p ? p + 1 : base_name;
   if (strlen(filename) + sizeof(INDEX_SUFFIX) - 1 > name_max)
-    fatal("`%1.%2' is too long for a filename", filename, INDEX_SUFFIX);
+    fatal("'%1.%2' is too long for a filename", filename, INDEX_SUFFIX);
   if (p) {
     p++;
     temp_index_file = new char[p - base_name + sizeof(TEMP_INDEX_TEMPLATE)];
@@ -247,7 +247,7 @@ int main(int argc, char **argv)
       errno = 0;
       fp = fopen(foption, "r");
       if (!fp)
-       fatal("can't open `%1': %2", foption, strerror(errno));
+       fatal("can't open '%1': %2", foption, strerror(errno));
     }
     string path;
     int lineno = 1;
@@ -307,7 +307,7 @@ int main(int argc, char **argv)
   ignore_fatal_signals();
   if (unlink(index_file) < 0) {
     if (errno != ENOENT)
-      fatal("can't unlink `%1': %2", index_file, strerror(errno));
+      fatal("can't unlink '%1': %2", index_file, strerror(errno));
   }
   if (link(temp_index_file, index_file) < 0)
     fatal("can't link temporary index file: %1", strerror(errno));
@@ -379,7 +379,7 @@ static void read_common_words_file()
   errno = 0;
   FILE *fp = fopen(common_words_file, "r");
   if (!fp)
-    fatal("can't open `%1': %2", common_words_file, strerror(errno));
+    fatal("can't open '%1': %2", common_words_file, strerror(errno));
   common_words_table = new word_list * [hash_table_size];
   for (int i = 0; i < hash_table_size; i++)
     common_words_table[i] = 0;
@@ -416,7 +416,7 @@ static int do_whole_file(const char *filename)
   errno = 0;
   FILE *fp = fopen(filename, "r");
   if (!fp) {
-    error("can't open `%1': %2", filename, strerror(errno));
+    error("can't open '%1': %2", filename, strerror(errno));
     return 0;
   }
   int count = 0;
@@ -453,7 +453,7 @@ static int do_file(const char *filename)
   // byte counts to be consistent with fseek.
   FILE *fp = fopen(filename, FOPEN_RB);
   if (fp == 0) {
-    error("can't open `%1': %2", filename, strerror(errno));
+    error("can't open '%1': %2", filename, strerror(errno));
     return 0;
   }
   int filename_index = filenames.length();
diff --git a/src/utils/indxbib/indxbib.man b/src/utils/indxbib/indxbib.man
deleted file mode 100644 (file)
index 313e6c0..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-.TH @G@INDXBIB @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@indxbib \- make inverted index for bibliographic databases
-.
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fB@g@indxbib 'u
-.ti \niu
-.B @g@indxbib
-.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.el .RB "[\ " "\\$1" "\ ]"
-..
-.OP \-vw
-.OP \-c file
-.OP \-d dir
-.OP \-f file
-.OP \-h n
-.OP \-i string
-.OP \-k n
-.OP \-l n
-.OP \-n n
-.OP \-o file
-.OP \-t n
-.RI [\  filename \|.\|.\|.\ ]
-.ad \na
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B @g@indxbib
-makes an inverted index for the bibliographic databases in
-.IR filename \|.\|.\|.
-for use with
-.BR @g@refer (@MAN1EXT@),
-.BR @g@lookbib (@MAN1EXT@),
-and
-.BR lkbib (@MAN1EXT@).
-.
-The index will be named
-.IB filename @INDEX_SUFFIX@\fR;
-the index is written to a temporary file which is then renamed to
-this.
-.
-If no filenames are given on the command line because the
-.B \-f
-option has been used, and no
-.B \-o
-option is given, the index will be named
-.BR @DEFAULT_INDEX_NAME@@INDEX_SUFFIX@ .
-.
-.
-.LP
-Bibliographic databases are divided into records by blank lines.
-Within a record, each fields starts with a
-.B %
-character at the beginning of a line.
-.
-Fields have a one letter name which follows the
-.B %
-character.
-.
-.
-.LP
-The values set by the
-.BR \-c ,
-.BR \-n ,
-.BR \-l
-and
-.B \-t
-options are stored in the index;
-when the index is searched, keys will be discarded and truncated in a
-manner appropriate to these options;
-the original keys will be used for verifying that any record
-found using the index actually contains the keys.
-.
-This means that a user of an index need not know whether these
-options were used in the creation of the index,
-provided that not all the keys to be searched for
-would have been discarded during indexing
-and that the user supplies at least the part of each key
-that would have remained after being truncated during indexing.
-.
-The value set by the
-.B \-i
-option is also stored in the index
-and will be used in verifying records found using the index.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.B \-w
-Index whole files.
-.
-Each file is a separate record.
-.
-.TP
-.BI \-c file
-Read the list of common words from
-.I file
-instead of
-.BR @COMMON_WORDS_FILE@ .
-.
-.TP
-.BI \-d dir
-Use
-.I dir
-as the pathname of the current working directory to store in the index,
-instead of the path printed by
-.BR pwd (1).
-.
-Usually
-.I dir
-will be a symbolic link that points to the directory printed by
-.BR pwd (1).
-.
-.TP
-.BI \-f file
-Read the files to be indexed from
-.IR file .
-.
-If
-.I file
-is
-.BR \- ,
-files will be read from the standard input.
-The
-.B \-f
-option can be given at most once.
-.
-.TP
-.BI \-i string
-Don\[aq]t index the contents of fields whose names are in
-.IR string .
-.
-Initially
-.I string
-is
-.BR XYZ .
-.
-.TP
-.BI \-h n
-Use the first prime greater than or equal to
-.I n
-for the size of the hash table.
-.
-Larger values of
-.I n
-will usually make searching faster,
-but will make the index larger
-and
-.B @g@indxbib
-use more memory.
-.
-Initially
-.I n
-is 997.
-.
-.TP
-.BI \-k n
-Use at most
-.I n
-keys per input record.
-.
-Initially
-.I n
-is 100.
-.
-.TP
-.BI \-l n
-Discard keys that are shorter than
-.IR n .
-.
-Initially
-.I n
-is 3.
-.
-.TP
-.BI \-n n
-Discard the
-.I n
-most common words.
-.
-Initially
-.I n
-is 100.
-.
-.TP
-.BI \-o basename
-The index should be named
-.IB basename @INDEX_SUFFIX@\fR.
-.
-.TP
-.BI \-t n
-Truncate keys to
-.IR n .
-.
-Initially
-.I n
-is 6.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP \w'\fBindxbib\fIXXXXXX'u+2n
-.IB filename @INDEX_SUFFIX@
-Index.
-.
-.TP
-.B @DEFAULT_INDEX_NAME@@INDEX_SUFFIX@
-Default index name.
-.
-.TP
-.B @COMMON_WORDS_FILE@
-List of common words.
-.
-.TP
-.BI indxbib XXXXXX
-Temporary file.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR @g@refer (@MAN1EXT@),
-.BR lkbib (@MAN1EXT@),
-.BR @g@lookbib (@MAN1EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index 4ff6fa9b4de53abf3e38647933d28fcffeda5329..aaf42fb4faa5183d335ff05a399aa12ef7cf94d1 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-201 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /* Unfortunately vendors seem to have problems writing a <signal.h>
 that is correct for C++, so we implement all signal handling in C. */
@@ -35,6 +35,9 @@ that is correct for C++, so we implement all signal handling in C. */
 extern "C" {
 #endif
 
+/* Prototype */
+void catch_fatal_signals(void);
+
 extern void cleanup(void);
 
 static RETSIGTYPE handle_fatal_signal(int signum)
diff --git a/src/utils/lkbib/Makefile.sub b/src/utils/lkbib/Makefile.sub
deleted file mode 100644 (file)
index bbd78c8..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-# Makefile.sub for `src utils lkbib'
-#
-# File position: <groff-source>/src/utils/lkbib/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=lkbib$(EXEEXT)
-MAN1=lkbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lkbib.$(OBJEXT)
-CCSRCS=$(srcdir)/lkbib.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/utils/lkbib/lkbib.1.man b/src/utils/lkbib/lkbib.1.man
new file mode 100644 (file)
index 0000000..566900c
--- /dev/null
@@ -0,0 +1,166 @@
+.TH LKBIB @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+lkbib \- search bibliographic databases
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY lkbib
+.OP \-n
+.OP \-i fields
+.OP \-p filename
+.OP \-t n
+.I key
+\&.\|.\|.\&
+.YS
+.
+.SY lkbib
+.B \-\-help
+.YS
+.
+.SY lkbib
+.B \-v
+.SY lkbib
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I lkbib
+searches bibliographic databases for references that contain the keys
+.I key
+\&.\|.\|.\& and prints any references found on the standard output.
+.
+.I lkbib
+will search any databases given by
+.B \-p
+options, and then a default database.
+.
+The default database is taken from the
+.I \%REFER
+environment variable if it is set,
+otherwise it is
+.IR @DEFAULT_INDEX@ .
+.
+For each database
+.I filename
+to be searched,
+if an index
+.RI filename @INDEX_SUFFIX@
+created by
+.IR @g@indxbib (@MAN1EXT@)
+exists, then it will be searched instead;
+each index can cover multiple databases.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.B \-\-help
+Display a usage message and exit.
+.
+.
+.TP
+.BI \-i string
+When searching files for which no index exists,
+ignore the contents of fields whose names are in
+.IR string .
+.
+.
+.TP
+.BI \-p filename
+Search
+.IR filename .
+.
+Multiple
+.B \-p
+options can be used.
+.
+.
+.TP
+.BI \-t n
+Only require the first
+.I n
+characters of keys to be given.
+.
+Initially
+.I n
+is\~6.
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Display version information and exit.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I REFER
+Default database.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @DEFAULT_INDEX@
+Default database to be used if the
+.I \%REFER
+environment variable is not set.
+.
+.
+.TP
+.RI filename @INDEX_SUFFIX@
+Index files.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.IR @g@refer (@MAN1EXT@),
+.IR @g@lookbib (@MAN1EXT@),
+.IR @g@indxbib (@MAN1EXT@)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/utils/lkbib/lkbib.am b/src/utils/lkbib/lkbib.am
new file mode 100644 (file)
index 0000000..2ac97b6
--- /dev/null
@@ -0,0 +1,32 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += lkbib
+man1_MANS += src/utils/lkbib/lkbib.1
+EXTRA_DIST += src/utils/lkbib/lkbib.1.man
+lkbib_LDADD = libbib.a libgroff.a $(LIBM) lib/libgnu.a
+lkbib_SOURCES = src/utils/lkbib/lkbib.cpp
+src/utils/lkbib/lkbib.$(OBJEXT): defs.h
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index b1fa691257c15fa3d57e69ae86fe13915db56701..06f56ded3a09b94a4e694baffab5423229646ba6 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -68,7 +68,7 @@ int main(int argc, char **argv)
        char *ptr;
        long n = strtol(optarg, &ptr, 10);
        if (n == 0 && ptr == optarg) {
-         error("bad integer `%1' in `t' option", optarg);
+         error("bad integer '%1' in 't' option", optarg);
          break;
        }
        if (n < 1)
diff --git a/src/utils/lkbib/lkbib.man b/src/utils/lkbib/lkbib.man
deleted file mode 100644 (file)
index fa7eb2a..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-.TH LKBIB @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-lkbib \- search bibliographic databases
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Definitions
-.\" --------------------------------------------------------------------
-.
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.  ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.  el .TP "\\$1"
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B lkbib
-[
-.B \-v
-]
-[
-.BI \-i fields
-]
-[
-.BI \-p filename
-]
-[
-.BI \-t n
-]
-.IR key \|.\|.\|.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B lkbib
-searches bibliographic databases for references that contain the keys
-.IR key \|.\|.\|.\&
-and prints any references found on the standard output.
-.
-.B lkbib
-will search any databases given by
-.B \-p
-options, and then a default database.
-.
-The default database is taken from the
-.SB REFER
-environment variable if it is set,
-otherwise it is
-.BR @DEFAULT_INDEX@ .
-.
-For each database
-.I filename
-to be searched,
-if an index
-.IB filename @INDEX_SUFFIX@
-created by
-.BR @g@indxbib (@MAN1EXT@)
-exists, then it will be searched instead;
-each index can cover multiple databases.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.BI \-p filename
-Search
-.IR filename .
-.
-Multiple
-.B \-p
-options can be used.
-.
-.TP
-.BI \-i string
-When searching files for which no index exists,
-ignore the contents of fields whose names are in
-.IR string .
-.
-.TP
-.BI \-t n
-Only require the first
-.I n
-characters of keys to be given.
-.
-Initially
-.I n
-is\~6.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP \w'\fBREFER'u+2n
-.SB REFER
-Default database.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'\fB@DEFAULT_INDEX@'u+2n
-.B @DEFAULT_INDEX@
-Default database to be used if the
-.SB REFER
-environment variable is not set.
-.
-.TP
-.IB filename @INDEX_SUFFIX@
-Index files.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR @g@refer (@MAN1EXT@),
-.BR @g@lookbib (@MAN1EXT@),
-.BR @g@indxbib (@MAN1EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/src/utils/lookbib/Makefile.sub b/src/utils/lookbib/Makefile.sub
deleted file mode 100644 (file)
index 8e42cbb..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# Makefile.sub for `src utils lookbib'
-#
-# File position: <groff-source>/src/utils/lookbib/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=lookbib$(EXEEXT)
-MAN1=lookbib.n
-XLIBS=$(LIBBIB) $(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=lookbib.$(OBJEXT)
-CCSRCS=$(srcdir)/lookbib.cpp
-NAMEPREFIX=$(g)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/utils/lookbib/lookbib.1.man b/src/utils/lookbib/lookbib.1.man
new file mode 100644 (file)
index 0000000..b395226
--- /dev/null
@@ -0,0 +1,131 @@
+.TH @G@LOOKBIB @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+@g@lookbib \- search bibliographic databases
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY @g@lookbib
+.OP \-i string
+.OP \-t n
+.I filename
+\&.\|.\|.\&
+.YS
+.
+.SY @g@lookbib
+.B \-\-help
+.YS
+.
+.SY @g@lookbib
+.B \-v
+.SY @g@lookbib
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I @g@lookbib
+prints a prompt on the standard error (unless the standard input is not
+a terminal),
+reads from the standard input a line containing a set of keywords,
+searches the bibliographic databases
+.I filename
+\&.\|.\|.\& for references containing those keywords,
+prints any references found on the standard output,
+and repeats this process until the end of input.
+.
+For each database
+.I filename
+to be searched,
+if an index
+.RI filename @INDEX_SUFFIX@
+created by
+.IR @g@indxbib (@MAN1EXT@)
+exists, then it will be searched instead;
+each index can cover multiple databases.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.B \-\-help
+Display a usage message and exit.
+.
+.
+.TP
+.BI \-i string
+When searching files for which no index exists,
+ignore the contents of fields whose names are in
+.IR string .
+.
+.
+.TP
+.BI \-t n
+Only require the first
+.I n
+characters of keys to be given.
+Initially
+.I n
+is\~6.
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Display version information and exit.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.RI filename @INDEX_SUFFIX@
+Index files.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.IR @g@refer (@MAN1EXT@),
+.IR lkbib (@MAN1EXT@),
+.IR @g@indxbib (@MAN1EXT@)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/utils/lookbib/lookbib.am b/src/utils/lookbib/lookbib.am
new file mode 100644 (file)
index 0000000..2557575
--- /dev/null
@@ -0,0 +1,31 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+prefixexecbin_PROGRAMS += lookbib
+PREFIXMAN1 += src/utils/lookbib/lookbib.1
+EXTRA_DIST += src/utils/lookbib/lookbib.1.man
+lookbib_LDADD = libbib.a libgroff.a $(LIBM) lib/libgnu.a
+lookbib_SOURCES = src/utils/lookbib/lookbib.cpp
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index 6b3faa6d355a4d5498bcdf7ccbd9f73caa9214a3..f3f82e5cc5b16fea4de6c38ab9d10c5443de59ff 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 #include "lib.h"
 
@@ -34,9 +34,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. */
 #include "posix.h"
 #include "nonposix.h"
 
-extern "C" {
-  const char *Version_string;
-}
+extern "C" const char *Version_string;
 
 static void usage(FILE *stream)
 {
@@ -68,7 +66,7 @@ int main(int argc, char **argv)
        char *ptr;
        long n = strtol(optarg, &ptr, 10);
        if (n == 0 && ptr == optarg) {
-         error("bad integer `%1' in `t' option", optarg);
+         error("bad integer '%1' in 't' option", optarg);
          break;
        }
        if (n < 1)
diff --git a/src/utils/lookbib/lookbib.man b/src/utils/lookbib/lookbib.man
deleted file mode 100644 (file)
index 3947046..0000000
+++ /dev/null
@@ -1,123 +0,0 @@
-.TH @G@LOOKBIB @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-@g@lookbib \- search bibliographic databases
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B @g@lookbib
-[
-.B \-v
-]
-[
-.BI \-i string
-]
-[
-.BI \-t n
-]
-.IR filename \|.\|.\|.
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B @g@lookbib
-prints a prompt on the standard error (unless the standard input is not
-a terminal),
-reads from the standard input a line containing a set of keywords,
-searches the bibliographic databases
-.IR filename \|.\|.\|.\&
-for references containing those keywords,
-prints any references found on the standard output,
-and repeats this process until the end of input.
-.
-For each database
-.I filename
-to be searched,
-if an index
-.IB filename @INDEX_SUFFIX@
-created by
-.BR @g@indxbib (@MAN1EXT@)
-exists, then it will be searched instead;
-each index can cover multiple databases.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.BI \-i string
-When searching files for which no index exists,
-ignore the contents of fields whose names are in
-.IR string .
-.
-.TP
-.BI \-t n
-Only require the first
-.I n
-characters of keys to be given.
-Initially
-.I n
-is\~6.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP \w'\fIfilename\fB@INDEX_SUFFIX@'u+2n
-.IB filename @INDEX_SUFFIX@
-Index files.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR @g@refer (@MAN1EXT@),
-.BR lkbib (@MAN1EXT@),
-.BR @g@indxbib (@MAN1EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/src/utils/pfbtops/Makefile.sub b/src/utils/pfbtops/Makefile.sub
deleted file mode 100644 (file)
index 16f192b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# Makefile.sub for `src utils pfbtops'
-#
-# File position: <groff-source>/src/utils/pfbtops/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=pfbtops$(EXEEXT)
-MAN1=pfbtops.n
-OBJS=pfbtops.$(OBJEXT)
-CSRCS=$(srcdir)/pfbtops.c
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-LINK.c=$(CCC) $(CCFLAGS) $(LDFLAGS)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/utils/pfbtops/pfbtops.1.man b/src/utils/pfbtops/pfbtops.1.man
new file mode 100644 (file)
index 0000000..8f90ff6
--- /dev/null
@@ -0,0 +1,98 @@
+.TH PFBTOPS @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+pfbtops \- translate Printer Font Binary files to PostScript ASCII
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY pfbtops
+.RI [ pfb-file ]
+.YS
+.
+.SY pfbtops
+.B \-\-help
+.YS
+.
+.SY pfbtops
+.B \-v
+.SY pfbtops
+.B \-\-version
+.YS
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I pfbtops
+translates a PostScript font in Printer Font Binary (PFB) format to
+ASCII, splitting overlong lines in text packets into smaller chunks.
+.
+If
+.I pfb-file
+is omitted, the PFB file will be read from the standard input.
+.
+The ASCII format PostScript font will be written on the standard output.
+.
+PostScript fonts for MS-DOS are normally supplied in PFB format.
+.
+.
+.LP
+The resulting ASCII format PostScript font can be used with groff,
+if it is first listed in
+.I @FONTDIR@/\:devps/\:download
+and
+.IR @FONTDIR@/\:devpdf/\:download .
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+.TP
+.B \-\-help
+Display a usage message and exit.
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Display version information and exit.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR grops (@MAN1EXT@),
+.IR gropdf (@MAN1EXT@)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/utils/pfbtops/pfbtops.am b/src/utils/pfbtops/pfbtops.am
new file mode 100644 (file)
index 0000000..3390969
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += pfbtops
+man1_MANS += src/utils/pfbtops/pfbtops.1
+EXTRA_DIST += src/utils/pfbtops/pfbtops.1.man
+pfbtops_SOURCES = src/utils/pfbtops/pfbtops.c
+pfbtops_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+# We use the following trick to force the use of C++ compiler
+# See the Automake manual, "Libtool Convenience Libraries"
+nodist_EXTRA_pfbtops_SOURCES = src/utils/pfbtops/dummy.cpp
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index 2caf31804d45107bae2a30cbb2c2403346cbfb87..f3464aa32eb71dc27a427259eb2f365b86443be3 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-201 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /* This translates ps fonts in .pfb format to ASCII ps files. */
 
diff --git a/src/utils/pfbtops/pfbtops.man b/src/utils/pfbtops/pfbtops.man
deleted file mode 100644 (file)
index 4f4bd22..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-.TH PFBTOPS @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-pfbtops \- translate a PostScript font in .pfb format to ASCII
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B pfbtops
-[
-.B \-v
-]
-[
-.I pfb_file
-]
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B pfbtops
-translates a PostScript font in
-.B .pfb
-format to ASCII, splitting overlong lines in text packets into smaller
-chunks.
-.
-If
-.I pfb_file
-is omitted the pfb file will be read from the standard input.
-.
-The ASCII format PostScript font will be written on the standard output.
-.
-PostScript fonts for MS-DOS are normally supplied in
-.B .pfb
-format.
-.
-.
-.LP
-The resulting ASCII format PostScript font can be used with groff.
-.
-It must first be listed in
-.B @FONTDIR@/devps/download
-and
-.BR @FONTDIR@/devpdf/download .
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.TP
-.B \-v
-Print the version number.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR grops (@MAN1EXT@),
-.BR gropdf (@MAN1EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/src/utils/tfmtodit/Makefile.sub b/src/utils/tfmtodit/Makefile.sub
deleted file mode 100644 (file)
index fe85d4b..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-# Makefile.sub for `src utils tfmtodit'
-#
-# File position: <groff-source>/src/utils/tfmtodit/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=tfmtodit$(EXEEXT)
-MAN1=tfmtodit.n
-XLIBS=$(LIBGROFF)
-MLIB=$(LIBM)
-OBJS=tfmtodit.$(OBJEXT)
-CCSRCS=$(srcdir)/tfmtodit.cpp
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/utils/tfmtodit/tfmtodit.1.man b/src/utils/tfmtodit/tfmtodit.1.man
new file mode 100644 (file)
index 0000000..605942d
--- /dev/null
@@ -0,0 +1,251 @@
+.TH TFMTODIT @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+tfmtodit \- create font files for use with groff \-Tdvi
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.\" Definitions
+.\" ====================================================================
+.
+.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
+.el .ds tx TeX
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY tfmtodit
+.OP \-s
+.OP \-g gf_file
+.OP \-k skewchar
+.I tfm_file
+.I map_file
+.I font
+.YS
+.
+.SY tfmtodit
+.B \-\-help
+.YS
+.
+.SY tfmtodit
+.B \-v
+.SY tfmtodit
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.B tfmtodit
+creates a font file for use with
+.B
+groff \-Tdvi\fR.
+.
+.I tfm_file
+is the name of the \*(tx font metric file for the font.
+.
+.I map_file
+is a file giving the groff names for characters in the font;
+this file should consist of a sequence of lines of the form:
+.IP
+.I
+n c1 c2 \fR.\|.\|.
+.
+.
+.LP
+where
+.I n
+is a decimal integer giving the position of the character in the font,
+and
+.IR c1 ,
+.IR c2 ,.\|.\|.
+are the groff names of the character.
+.
+If a character has no groff names but exists in the tfm file,
+then it will be put in the groff font file as an unnamed character.
+.
+.I font
+is the name of the groff font file.
+.
+The groff font file is written to
+.IR font .
+.
+.
+.LP
+The
+.B \-s
+option should be given if the font is special
+(a font is
+.I special
+if
+.B troff
+should search it whenever
+a character is not found in the current font.)
+.
+If the font is special,
+it should be listed in the
+.B fonts
+command in the DESC file;
+if it is not special, there is no need to list it, since
+.B troff
+can automatically mount it when it's first used.
+.
+.
+.LP
+To do a good job of math typesetting, groff requires font metric
+information not present in the tfm file.
+.
+The reason for this is that \*(tx has separate math italic fonts
+whereas groff uses normal italic fonts for math.
+.
+The additional information required by groff is given by the two
+arguments to the
+.B math_fit
+macro in the Metafont programs for the Computer Modern fonts.
+.
+In a text font (a font for which
+.B math_fitting
+is false), Metafont normally ignores these two arguments.
+.
+Metafont can be made to put this information in the gf file by loading
+the following definition after
+.B cmbase
+when creating
+.IR cm.base :
+.IP
+.nf
+.ft B
+def ignore_math_fit(expr left_adjustment,right_adjustment) =
+    special "adjustment";
+    numspecial left_adjustment*16/designsize;
+    numspecial right_adjustment*16/designsize;
+    enddef;
+.fi
+.ft R
+.LP
+For the EC font family, load the following definition after
+.B exbase
+(it is probably easiest to patch
+.I exbase.mf
+locally):
+.IP
+.nf
+.ft B
+def ignore_math_fit(expr left_adjustment,right_adjustment) =
+    ori_special "adjustment";
+    ori_numspecial left_adjustment*16/designsize;
+    ori_numspecial right_adjustment*16/designsize;
+    enddef;
+.fi
+.ft R
+.LP
+The gf file created using this modified
+.I cm.base
+or
+.I exbase
+should be specified with the
+.B \-g
+option.
+.
+The
+.B \-g
+option should not be given for a font for which
+.B math_fitting
+is true.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.B \-v
+Print the version number.
+.
+.TP
+.B \-s
+The font is special.
+.
+The effect of this option is to add the
+.B special
+command to the font file.
+.
+.TP
+.BI \-k n
+The skewchar of this font is at position
+.IR n .
+.
+.I n
+should be an integer;
+it may be given in decimal,
+or with a leading
+.B 0
+in octal,
+or with a leading
+.B 0x
+in hexadecimal.
+.
+The effect of this option is to ignore any kerns whose second
+component is the specified character.
+.
+.TP
+.BI \-g gf_file
+.I gf_file
+is a gf file produced by Metafont containing special and numspecial
+commands giving additional font metric information.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @FONTDIR@/devdvi/DESC
+Device description file.
+.
+.TP
+.IR @FONTDIR@/devdvi/ F
+Font description file for font
+.IR F .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.BR groff (@MAN1EXT@),
+.BR grodvi (@MAN1EXT@),
+.BR groff_font (@MAN5EXT@)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/utils/tfmtodit/tfmtodit.am b/src/utils/tfmtodit/tfmtodit.am
new file mode 100644 (file)
index 0000000..77aba71
--- /dev/null
@@ -0,0 +1,31 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+bin_PROGRAMS += tfmtodit
+man1_MANS += src/utils/tfmtodit/tfmtodit.1
+EXTRA_DIST += src/utils/tfmtodit/tfmtodit.1.man
+tfmtodit_SOURCES = src/utils/tfmtodit/tfmtodit.cpp
+tfmtodit_LDADD = libgroff.a $(LIBM) lib/libgnu.a
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index 6fef2580b740fb3d1ec5dd188ef2ff9fdc741e2f..f83d98dbb6dc41fca4ce3dd6ac7a0f84b5a5e9ce 100644 (file)
@@ -1,5 +1,5 @@
 // -*- C++ -*-
-/* Copyright (C) 1989-201 Free Software Foundation, Inc.
+/* Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -15,7 +15,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /* I have tried to incorporate the changes needed for TeX 3.0 tfm files,
 but I haven't tested them. */
@@ -276,14 +276,14 @@ int tfm::load(const char *file)
   errno = 0;
   FILE *fp = fopen(file, FOPEN_RB);
   if (!fp) {
-    error("can't open `%1': %2", file, strerror(errno));
+    error("can't open '%1': %2", file, strerror(errno));
     return 0;
   }
   int c1 = getc(fp);
   int c2 = getc(fp);
   if (c1 == EOF || c2 == EOF) {
     fclose(fp);
-    error("unexpected end of file on `%1'", file);
+    error("unexpected end of file on '%1'", file);
     return 0;
   }
   int lf = (c1 << 8) + c2;
@@ -291,16 +291,16 @@ int tfm::load(const char *file)
   unsigned char *buf = new unsigned char[toread];
   if (fread(buf, 1, toread, fp) != (size_t)toread) {
     if (feof(fp))
-      error("unexpected end of file on `%1'", file);
+      error("unexpected end of file on '%1'", file);
     else
-      error("error on file `%1'", file);
+      error("error on file '%1'", file);
     a_delete buf;
     fclose(fp);
     return 0;
   }
   fclose(fp);
   if (lf < 6) {
-    error("bad tfm file `%1': impossibly short", file);
+    error("bad tfm file '%1': impossibly short", file);
     a_delete buf;
     return 0;
   }
@@ -317,12 +317,12 @@ int tfm::load(const char *file)
   int ne = read2(ptr);
   np = read2(ptr);
   if (6 + lh + (ec - bc + 1) + nw + nh + nd + ni + nl + nk + ne + np != lf) {
-    error("bad tfm file `%1': lengths do not sum", file);
+    error("bad tfm file '%1': lengths do not sum", file);
     a_delete buf;
     return 0;
   }
   if (lh < 2) {
-    error("bad tfm file `%1': header too short", file);
+    error("bad tfm file '%1': header too short", file);
     a_delete buf;
     return 0;
   }
@@ -416,7 +416,7 @@ int gf::load(const char *file)
   errno = 0;
   FILE *fp = fopen(file, FOPEN_RB);
   if (!fp) {
-    error("can't open `%1': %2", file, strerror(errno));
+    error("can't open '%1': %2", file, strerror(errno));
     return 0;
   }
   if (getc(fp) != pre || getc(fp) != gf_id_byte) {
@@ -533,7 +533,7 @@ int gf::load(const char *file)
        goto eof;
       break;
     default:
-      fatal("unrecognized opcode `%1'", op);
+      fatal("unrecognized opcode '%1'", op);
       break;
     }
   }
@@ -602,7 +602,7 @@ int read_map(const char *file, char_list **table)
   errno = 0;
   FILE *fp = fopen(file, "r");
   if (!fp) {
-    error("can't open `%1': %2", file, strerror(errno));
+    error("can't open '%1': %2", file, strerror(errno));
     return 0;
   }
   for (int i = 0; i < 256; i++)
@@ -645,8 +645,8 @@ int read_map(const char *file, char_list **table)
 
 
 /* Every character that can participate in a ligature appears in the
-lig_chars table. `ch' gives the full-name of the character, `name'
-gives the groff name of the character, `i' gives its index in
+lig_chars table. 'ch' gives the full-name of the character, 'name'
+gives the groff name of the character, 'i' gives its index in
 the encoding, which is filled in later  (-1 if it does not appear). */
 
 struct S {
@@ -752,7 +752,7 @@ int main(int argc, char **argv)
     return 1;
   errno = 0;
   if (!freopen(font_file, "w", stdout)) {
-    error("can't open `%1' for writing: %2", font_file, strerror(errno));
+    error("can't open '%1' for writing: %2", font_file, strerror(errno));
     return 1;
   }
   printf("name %s\n", font_file);
diff --git a/src/utils/tfmtodit/tfmtodit.man b/src/utils/tfmtodit/tfmtodit.man
deleted file mode 100644 (file)
index a6e4073..0000000
+++ /dev/null
@@ -1,263 +0,0 @@
-.TH TFMTODIT @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-tfmtodit \- create font files for use with groff \-Tdvi
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.\" Definitions
-.\" --------------------------------------------------------------------
-.
-.ie t .ds tx T\h'-.1667m'\v'.224m'E\v'-.224m'\h'-.125m'X
-.el .ds tx TeX
-.\" Like TP, but if specified indent is more than half
-.\" the current line-length - indent, use the default indent.
-.de Tp
-.ie \\n(.$=0:((0\\$1)*2u>(\\n(.lu-\\n(.iu)) .TP
-.el .TP "\\$1"
-..
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-nr a \n(.j
-.ad l
-.nr i \n(.i
-.in +\w'\fBtfmtodit 'u
-.ti \niu
-.B tfmtodit
-.de OP
-.ie \\n(.$-1 .RI "[\ \fB\\$1\fP" "\\$2" "\ ]"
-.el .RB "[\ " "\\$1" "\ ]"
-..
-.OP \-sv
-.OP \-g gf_file
-.OP \-k skewchar
-.I tfm_file
-.I map_file
-.I font
-.br
-.ad \na
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B tfmtodit
-creates a font file for use with
-.B
-groff \-Tdvi\fR.
-.
-.I tfm_file
-is the name of the \*(tx font metric file for the font.
-.
-.I map_file
-is a file giving the groff names for characters in the font;
-this file should consist of a sequence of lines of the form:
-.IP
-.I
-n c1 c2 \fR.\|.\|.
-.
-.
-.LP
-where
-.I n
-is a decimal integer giving the position of the character in the font,
-and
-.IR c1 ,
-.IR c2 ,.\|.\|.
-are the groff names of the character.
-.
-If a character has no groff names but exists in the tfm file,
-then it will be put in the groff font file as an unnamed character.
-.
-.I font
-is the name of the groff font file.
-.
-The groff font file is written to
-.IR font .
-.
-.
-.LP
-The
-.B \-s
-option should be given if the font is special
-(a font is
-.I special
-if
-.B troff
-should search it whenever
-a character is not found in the current font.)
-.
-If the font is special,
-it should be listed in the
-.B fonts
-command in the DESC file;
-if it is not special, there is no need to list it, since
-.B troff
-can automatically mount it when it\[aq]s first used.
-.
-.
-.LP
-To do a good job of math typesetting, groff requires font metric
-information not present in the tfm file.
-.
-The reason for this is that \*(tx has separate math italic fonts
-whereas groff uses normal italic fonts for math.
-.
-The additional information required by groff is given by the two
-arguments to the
-.B math_fit
-macro in the Metafont programs for the Computer Modern fonts.
-.
-In a text font (a font for which
-.B math_fitting
-is false), Metafont normally ignores these two arguments.
-.
-Metafont can be made to put this information in the gf file by loading
-the following definition after
-.B cmbase
-when creating
-.BR cm.base :
-.IP
-.nf
-.ft B
-def ignore_math_fit(expr left_adjustment,right_adjustment) =
-    special "adjustment";
-    numspecial left_adjustment*16/designsize;
-    numspecial right_adjustment*16/designsize;
-    enddef;
-.fi
-.ft R
-.LP
-For the EC font family, load the following definition after
-.B exbase
-(it is probably easiest to patch
-.B exbase.mf
-locally):
-.IP
-.nf
-.ft B
-def ignore_math_fit(expr left_adjustment,right_adjustment) =
-    ori_special "adjustment";
-    ori_numspecial left_adjustment*16/designsize;
-    ori_numspecial right_adjustment*16/designsize;
-    enddef;
-.fi
-.ft R
-.LP
-The gf file created using this modified
-.B cm.base
-or
-.B exbase
-should be specified with the
-.B \-g
-option.
-.
-The
-.B \-g
-option should not be given for a font for which
-.B math_fitting
-is true.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.TP
-.B \-s
-The font is special.
-.
-The effect of this option is to add the
-.B special
-command to the font file.
-.
-.TP
-.BI \-k n
-The skewchar of this font is at position
-.IR n .
-.
-.I n
-should be an integer;
-it may be given in decimal,
-or with a leading
-.B 0
-in octal,
-or with a leading
-.B 0x
-in hexadecimal.
-.
-The effect of this option is to ignore any kerns whose second
-component is the specified character.
-.
-.TP
-.BI \-g gf_file
-.I gf_file
-is a gf file produced by Metafont containing special and numspecial
-commands giving additional font metric information.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.Tp \w'\fB@FONTDIR@/devdvi/DESC'u+2n
-.B @FONTDIR@/devdvi/DESC
-Device description file.
-.
-.TP
-.BI @FONTDIR@/devdvi/ F
-Font description file for font
-.IR F .
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR groff (@MAN1EXT@),
-.BR grodvi (@MAN1EXT@),
-.BR groff_font (@MAN5EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/src/utils/xtotroff/Makefile.in b/src/utils/xtotroff/Makefile.in
deleted file mode 100644 (file)
index bcc8229..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright (C) 2004-2014  Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-
-builddir=@abs_builddir@
-top_srcdir=@abs_top_srcdir@
-top_builddir=@abs_top_builddir@
-SHELL=@SHELL@
-
-devdir=$(top_builddir)/font
-driverdir=$(top_srcdir)/src/devices/xditview
-mkinstalldirs=$(SHELL) $(top_srcdir)/mkinstalldirs
-
-xtotroff=$(builddir)/xtotroff
-DPIS=75 100
-
-RM=rm -f
-
-all:
-       @echo "Say \`make fonts' to generate fonts for gxditview."
-
-fonts: $(xtotroff) $(driverdir)/DESC.in $(driverdir)/FontMap
-       fonts=`sed -e 's/[       ].*//' $(driverdir)/FontMap`; \
-       for dpi in $(DPIS); do \
-         echo Making devX$$dpi; \
-         test -d $(devdir)/devX$$dpi \
-           || $(mkinstalldirs) $(devdir)/devX$$dpi; \
-         $(RM) $(devdir)/devX$$dpi/DESC; \
-         sed -e "s/res 75/res $$dpi/" $(driverdir)/DESC.in \
-           >$(devdir)/devX$$dpi/DESC; \
-         (cd $(devdir)/devX$$dpi; \
-          $(RM) Makefile.sub; \
-          echo DEV=X$$dpi >Makefile.sub; \
-          echo DEVFILES=DESC $$fonts >>Makefile.sub; \
-          $(xtotroff) -r $$dpi -s 10 $(driverdir)/FontMap); \
-         echo Making devX$$dpi-12; \
-         test -d $(devdir)/devX$$dpi-12 \
-           || $(mkinstalldirs) $(devdir)/devX$$dpi-12; \
-         $(RM) $(devdir)/devX$$dpi-12/DESC; \
-         sed -e "s/res 75/res $$dpi/" \
-             -e 's/unitwidth 10/unitwidth 12/' $(driverdir)/DESC.in \
-           >$(devdir)/devX$$dpi-12/DESC; \
-         (cd $(devdir)/devX$$dpi-12; \
-          $(RM) Makefile.sub; \
-          echo DEV=X$$dpi-12 >Makefile.sub; \
-          echo DEVFILES=DESC $$fonts >>Makefile.sub; \
-          $(xtotroff) -r $$dpi -s 12 $(driverdir)/FontMap); \
-       done
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/utils/xtotroff/Makefile.sub b/src/utils/xtotroff/Makefile.sub
deleted file mode 100644 (file)
index b4de0de..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# Makefile.sub for `src utils xtotroff'
-#
-# File position: <groff-source>/src/utils/stotroff/Makefile.sub
-#
-# Copyright (C) 2014  Free Software Foundation, Inc.
-#
-# This file is part of `font utf8' which is part of `groff'.
-#
-# `groff' 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.
-#
-# `groff' 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, see
-# <http://www.gnu.org/licenses/gpl-2.0.html>.
-#
-########################################################################
-
-PROG=xtotroff$(EXEEXT)
-MAN1=xtotroff.n
-MLIB=$(LIBM)
-XLIBS=$(LIBXUTIL) $(LIBGROFF)
-EXTRA_CFLAGS=$(X_CFLAGS)
-EXTRA_LDFLAGS=$(X_LIBS) $(X_PRE_LIBS) -lXaw -lXt -lX11 $(X_EXTRA_LIBS)
-OBJS=xtotroff.$(OBJEXT)
-CSRCS=$(srcdir)/xtotroff.c
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
diff --git a/src/utils/xtotroff/xtotroff.1.man b/src/utils/xtotroff/xtotroff.1.man
new file mode 100644 (file)
index 0000000..4833f55
--- /dev/null
@@ -0,0 +1,149 @@
+.TH XTOTROFF @MAN1EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+xtotroff \- convert X font metrics into GNU troff font metrics
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2004-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY xtotroff
+.OP \-r resolution
+.OP \-s point-size
+.I font-map
+.YS
+.
+.SY xtotroff
+.B \-\-help
+.YS
+.
+.SY xtotroff
+.B \-v
+.SY xtotroff
+.B \-\-version
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+.I xtotroff
+takes a
+.IR font-map ,
+which maps
+.IR groff (@MAN1EXT@)
+fonts to X11 fonts,
+creates GNU
+.IR troff (@MAN1EXT@)
+metric files for all fonts listed.
+.
+Each line in
+.I font-map
+consists of a
+.I groff
+font name and an X font name as a X Logical Font Description (XLFD)
+pattern,
+separated by whitespace.
+.
+Example:
+.
+.
+.PP
+.RS
+.EX
+TB \-adobe\-times\-bold\-r\-normal\-\-*\-*\-*\-*\-p\-*\-iso8859\-1
+.EE
+.RE
+.
+.
+.PP
+The wildcards in the patterns are filled with the arguments to the
+.B \-r
+and
+.B \-s
+switches.
+.
+If a font name is still ambiguous,
+.I xtotroff
+aborts.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+Whitespace is permitted between a command-line option and its argument.
+.
+.
+.TP
+.B \-\-help
+Display a usage message and exit.
+.
+.
+.TP
+.BI \-r resolution
+Set the resolution for all font patterns in
+.IR font-map .
+.
+The value is used for both the horizontal and vertical resolution.
+.
+If not specified, a resolution of 75dpi is assumed.
+.
+.
+.TP
+.BI \-s point-size
+Set the point size for all font patterns in
+.IR font-map .
+.
+If not specified, a size of 10pt is assumed.
+.
+.
+.TP
+.B \-v
+.TQ
+.B \-\-version
+Display version information and exit.
+.
+.
+.\" ====================================================================
+.SH BUGS
+.\" ====================================================================
+The only supported font encodings are \(lqiso8859\-1\(rq and
+\(lqadobe\-fontspecific\(rq.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.IR groff (@MAN1EXT@),
+.IR gxditview (@MAN1EXT@),
+.IR troff (@MAN1EXT@)
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/src/utils/xtotroff/xtotroff.am b/src/utils/xtotroff/xtotroff.am
new file mode 100644 (file)
index 0000000..9b2630b
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright (C) 2014-2018 Free Software Foundation, Inc.
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or
+# (at your option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+
+if !WITHOUT_X11
+bin_PROGRAMS += xtotroff
+man1_MANS += src/utils/xtotroff/xtotroff.1
+xtotroff_SOURCES = src/utils/xtotroff/xtotroff.c
+XLIBS=$(LIBXUTIL) $(LIBGROFF)
+xtotroff_LDADD = libxutil.a libgroff.a $(X_LIBS) $(X_PRE_LIBS) \
+  -lXaw -lXt -lX11 $(X_EXTRA_LIBS) $(LIBM) lib/libgnu.a
+xtotroff_CPPFLAGS = $(AM_CPPFLAGS) $(X_CFLAGS)
+endif
+EXTRA_DIST += src/utils/xtotroff/xtotroff.1.man
+
+
+########################################################################
+### Emacs settings
+# Local Variables:
+# mode: makefile-automake
+# End:
index 92e5235c299c8eb13904295e540dab150901f2da..8545a5e8455c60fcd0bc5e4f3021077f09898897 100644 (file)
@@ -1,4 +1,4 @@
-/* Copyright (C) 1992-201 Free Software Foundation, Inc.
+/* Copyright (C) 1992-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -14,7 +14,7 @@ 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, see <http://www.gnu.org/licenses/>. */
+along with this program.  If not, see <http://www.gnu.org/licenses/>. */
 
 /*
  * xtotroff
@@ -60,11 +60,11 @@ Display *dpy;
 unsigned resolution = 75;
 unsigned point_size = 10;
 
-int charExists(XFontStruct * fi, int c)
+static int charExists(XFontStruct * fi, int c)
 {
   XCharStruct *p;
 
-  /* `c' is always >= 0 */
+  /* 'c' is always >= 0 */
   if ((unsigned int) c < fi->min_char_or_byte2
       || (unsigned int) c > fi->max_char_or_byte2)
     return 0;
diff --git a/src/utils/xtotroff/xtotroff.man b/src/utils/xtotroff/xtotroff.man
deleted file mode 100644 (file)
index e8e8f73..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-.TH XTOTROFF @MAN1EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-xtotroff \- convert X font metrics into GNU troff font metrics
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2004-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B xtotroff
-[
-.BI \-r \%resolution
-]
-[
-.BI \-s \%point-size
-]
-[
-.B \-v
-]
-.I FontMap
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-.B xtotroff
-takes a
-.IR FontMap ,
-which maps
-.B groff
-fonts to X11 fonts,
-creates GNU
-.B troff
-metric files for all fonts listed.
-.
-Each line in
-.I FontMap
-consists of GNU
-.B troff
-font name and an X font name (XLFD) pattern, separated by whitespace.
-.
-Example:
-.
-.PP
-.in +2n
-.nf
-TB   -adobe-times-bold-r-normal--*-*-*-*-p-*-iso8859-1
-.fi
-.in
-.
-.
-.PP
-The wildcards in the patterns are filled with the arguments to the
-.B \-r
-and
-.B \-s
-switches.
-.
-If a font name is still ambiguous,
-.B xtotroff
-aborts.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-It is possible to have whitespace between a command line option and its
-parameter.
-.
-.TP
-.BI \-r resolution
-Set the resolution for all font patterns in
-.IR FontMap .
-.
-The value is used for both the horizontal and vertical resolution.
-.
-If not specified, a resolution of 75dpi is assumed.
-.
-.TP
-.BI \-s point-size
-Set the point size for all font patterns in
-.IR FontMap .
-.
-If not specified, a size of 10pt is assumed.
-.
-.TP
-.B \-v
-Print the version number.
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-The only supported font encodings are \[oq]iso8859-1\[cq] and
-\[cq]adobe-fontspecific\[cq].
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR gxditview (@MAN1EXT@)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/stamp-h.in b/stamp-h.in
deleted file mode 100644 (file)
index 9788f70..0000000
+++ /dev/null
@@ -1 +0,0 @@
-timestamp
index bf24c607a874971cd8b1094654c5759c1680a49d..c07063582724609a0b6c4e9c73839d215a714d66 100644 (file)
@@ -1,54 +1,50 @@
 #! /bin/sh
 #
-# Copyright (C) 1989-2014 Free Software Foundation, Inc.
-# 
+# Copyright (C) 1989-2018 Free Software Foundation, Inc.
+#
 # This file is part of groff.
-# 
+#
 # groff 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 3 of the License, or
 # (at your option) any later version.
-# 
+#
 # groff 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, see <http://www.gnu.org/licenses/>.
+# along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #
 # This script runs groff without requiring that it be installed.
 
 SEP='@PATH_SEPARATOR@'
-builddir=@abs_top_builddir@/src
+builddir=@abs_top_builddir@
 srcdir=@abs_top_srcdir@
 
-GROFF_BIN_PATH=\
-$builddir/roff/groff$SEP\
-$builddir/roff/troff$SEP\
-$builddir/preproc/preconv$SEP\
-$builddir/preproc/pic$SEP\
-$builddir/preproc/eqn$SEP\
-$builddir/preproc/tbl$SEP\
-$builddir/preproc/grn$SEP\
-$builddir/preproc/refer$SEP\
-$builddir/preproc/soelim$SEP\
-$builddir/preproc/html$SEP\
-$builddir/devices/grops$SEP\
-$builddir/devices/grodvi$SEP\
-$builddir/devices/grotty$SEP\
-$builddir/devices/grolj4$SEP\
-$builddir/devices/grolbp$SEP\
-$builddir/devices/grohtml$SEP\
-$builddir/devices/gropdf$SEP\
-$builddir/devices/xditview
+GROFF_BIN_PATH=$builddir
 
 XENVIRONMENT=$srcdir/src/devices/xditview/GXditview.ad
 export XENVIRONMENT
 
 GROFF_COMMAND_PREFIX=
-GROFF_FONT_PATH=$builddir/../font$SEP$srcdir/font
-GROFF_TMAC_PATH=$srcdir/tmac
+GROFF_FONT_PATH=$builddir/font\
+$SEP$srcdir/font\
+
+GROFF_TMAC_PATH=$srcdir/tmac\
+$SEP$builddir/tmac\
+$SEP$srcdir/contrib/mom\
+$SEP$builddir/contrib/mom\
+$SEP$srcdir/contrib/hdtbl\
+$SEP$builddir/contrib/hdtbl\
+$SEP$srcdir/contrib/mm\
+$SEP$builddir/contrib/mm\
+$SEP$srcdir/contrib/mm/locale\
+$SEP$builddir/contrib/mm/locale\
+$SEP$srcdir/contrib/pdfmark\
+$SEP$builddir/contrib/pdfmark\
+
 export GROFF_BIN_PATH GROFF_COMMAND_PREFIX GROFF_FONT_PATH GROFF_TMAC_PATH
 
-exec $builddir/roff/groff/groff ${1+"$@"}
+exec $builddir/groff -b -ww ${1+"$@"}
index dc7b8a723be3e70d16e5842765bc4c09abbbeed6..65ec04f95c560a82968276ae1bfd6765cfb160aa 100644 (file)
@@ -1,33 +1,33 @@
-.\" -*- nroff -*-
-.\"
 .\" 62bit.tmac
 .\"
-.\" Copyright (C) 2003-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2003-2018 Free Software Foundation, Inc.
 .\"      Written by Werner Lemberg (wl@gnu.org)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
-.\"
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .\"
-.\" This file provides macros for addition, multiplication, and division of
-.\" 62bit signed integers.  Its main application is to `scale' 31bit values,
-.\" namely, to perform the operation `a * b / c' accurately.
+.\" This file provides macros for addition, multiplication, and division
+.\" of 62-bit signed integers.  Its main application is to 'scale'
+.\" 31-bit values--namely, to perform the operation 'a * b / c'
+.\" accurately.
 .\"
-.\" Note that it is the duty of the user to check whether the input values
-.\" fit within 31 bits (this is the range [-1073741824,1073741823]).
+.\" Note that it is the duty of the user to check whether the input
+.\" values fit within 31 bits (this is the range
+.\" [-1073741824,1073741823]).
 .\"
 .
 .if d add31to62 \
@@ -36,8 +36,8 @@
 .
 .\" .add31to62 <x> <y> <z>
 .\"
-.\" Add a 31bit signed integer to a signed 62bit integer.  Result is a
-.\" signed 62bit integer:
+.\" Add a 31-bit signed integer to a signed 62-bit integer.  Result is a
+.\" signed 62-bit integer:
 .\"
 .\"   <x> + (<y>h * 2^30 + <y>l) = <z>h * 2^30 + <z>l
 .\"
@@ -74,7 +74,7 @@
 .
 .\" .mult31by31 <x> <y> <z>
 .\"
-.\" Multiply two 31bit signed integers.  Result is a 62bit signed
+.\" Multiply two 31-bit signed integers.  Result is a 62-bit signed
 .\" integer:
 .\"
 .\"   <x> * <y> = <z>h * 2^30 + <z>l
 .
 .\" .div62by31 <x> <y> <z>
 .\"
-.\" Divide a signed 62bit integer by a 31bit integer.  Result is a
-.\" 31bit signed integer:
+.\" Divide a signed 62-bit integer by a 31-bit integer.  Result is a
+.\" 31-bit signed integer:
 .\"
 .\"   (<x>h * 2^30 + <x>l) / <y> = <z>
 .\"
 .  nr \\$3 \\n[62bit-3]
 ..
 .
-.\" EOF
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 71f8c7cd1226e8a6a9c97ffb86679ed569869476..cf01a03965e4070b72b81c687ffb4c11d2f8698f 100644 (file)
@@ -10,24 +10,24 @@ The localization process involves two files.
   - A locale independent file (trans.tmac) responsible for activating those
     localized strings.
 
-All you have to do is to create a new file named `LL.tmac' where `LL' is
-your country code (`de' for Germany, `el' for Greece, ...), maybe using
-`fr.tmac' as a template.
+All you have to do is to create a new file named 'LL.tmac' where 'LL' is
+your country code ('de' for Germany, 'el' for Greece, ...), maybe using
+'fr.tmac' as a template.
 
-The first thing to do is to redefine the string `locale' to your language.
+The first thing to do is to redefine the string 'locale' to your language.
 
   .ds locale german\"
 
 Then change all the translations in the predefined strings.  Don't forget
 the \" at the end of each string, preventing spaces from lurking around.
 
-After `trans.tmac' has been called by
+After 'trans.tmac' has been called by
 
   .mso trans.tmac
 
 you must redefine the date strings in order to use the day and month names
 translated earlier.  If you don't feel comfortable with groff maybe you
-should use the definitions used in `fr.tmac'.  Nevertheless, you should take
+should use the definitions used in 'fr.tmac'.  Nevertheless, you should take
 care of the order of the date elements.
 
   - If your date format is MM/DD/YY:
@@ -44,11 +44,11 @@ care of the order of the date elements.
 
 Other date formats can be handled similarly.
 
-NOTE: For the mm package, in the `ISODATE' macro, only the first definition
-      of `cov*new-date' must be changed (see `fr.tmac').
+NOTE: For the mm package, in the 'ISODATE' macro, only the first definition
+      of 'cov*new-date' must be changed (see 'fr.tmac').
 
 Finally, change groff behaviour in order to comply with your locale.  For
-example, `fr.tmac' changes the default encoding, sets the sentence spaces,
+example, 'fr.tmac' changes the default encoding, sets the sentence spaces,
 and final activates hyphenation, provided there are hyphenation patterns
-available (which should be put into files named `hyphen.LL' for
+available (which should be put into files named 'hyphen.LL' for
 consistency).
diff --git a/tmac/Makefile.sub b/tmac/Makefile.sub
deleted file mode 100644 (file)
index 1506232..0000000
+++ /dev/null
@@ -1,184 +0,0 @@
-# Makefile.sub for `tmac'
-#
-# File position: <groff-source>/tmac/Makefile.sub
-#
-# Copyright (C) 1989-2014  Free Software Foundation, Inc.
-#      Written by James Clark (jjc@jclark.com)
-#
-# This file is part of groff.
-#
-# groff 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 3 of the License, or
-# (at your option) any later version.
-#
-# groff 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, see <http://www.gnu.org/licenses/>.
-#
-########################################################################
-
-MAN7=\
-  groff_ms.n \
-  groff_man.n \
-  groff_me.n \
-  groff_mdoc.n \
-  groff_trace.n \
-  groff_www.n
-
-NORMALFILES=\
-  man.tmac mandoc.tmac andoc.tmac an-old.tmac an-ext.tmac \
-  ms.tmac \
-  me.tmac \
-  mdoc.tmac \
-  pic.tmac \
-  a4.tmac papersize.tmac \
-  62bit.tmac \
-  ec.tmac \
-  safer.tmac \
-  trace.tmac \
-  ps.tmac psold.tmac pspic.tmac psatk.tmac \
-  pdf.tmac \
-  dvi.tmac \
-  tty.tmac tty-char.tmac \
-  latin1.tmac latin2.tmac latin5.tmac latin9.tmac cp1047.tmac \
-  unicode.tmac \
-  X.tmac Xps.tmac \
-  lj4.tmac \
-  lbp.tmac \
-  html.tmac html-end.tmac \
-  devtag.tmac \
-  europs.tmac \
-  composite.tmac fallbacks.tmac \
-  eqnrc \
-  refer.tmac refer-me.tmac refer-ms.tmac \
-  troffrc troffrc-end \
-  trans.tmac \
-  hyphen.us hyphenex.us \
-  fr.tmac hyphen.fr \
-  sv.tmac hyphen.sv \
-  de.tmac den.tmac hyphen.det hyphen.den hyphenex.det \
-  cs.tmac hyphen.cs hyphenex.cs \
-  ja.tmac
-
-# These files are handled specially during installation and deinstallation.
-SPECIALFILES=an.tmac s.tmac www.tmac
-
-# These files are processed with `strip.sed'.
-STRIPFILES=e.tmac doc.tmac doc-old.tmac
-MDOCFILES=doc-common doc-ditroff doc-nroff doc-syms
-mdocdir=$(tmacdir)/mdoc
-
-MOSTLYCLEANADD=\
-  stamp-wrap stamp-sed *-wrap www.tmac-sed \
-  stamp-strip e.tmac-s doc.tmac-s doc-old.tmac-s \
-  doc-common-s doc-ditroff-s doc-nroff-s doc-syms-s mdoc.local-s
-tmac_s_prefix=
-tmac_an_prefix=
-tmac_wrap=
-sys_tmac_prefix=
-pnmtops_nosetpage="pnmtops"
-
-RM=rm -f
-
-all: stamp-strip stamp-wrap stamp-sed
-
-install_data: $(NORMALFILES) $(SPECIALFILES) man.local \
-              stamp-strip stamp-wrap stamp-sed
-       -test -d $(DESTDIR)$(tmacdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(tmacdir)
-       -test -d $(DESTDIR)$(systemtmacdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(systemtmacdir)
-       -test -d $(DESTDIR)$(localtmacdir) \
-         || $(mkinstalldirs) $(DESTDIR)$(localtmacdir)
-       if test -n "$(tmac_wrap)"; then \
-         for m in ""$(tmac_wrap); do \
-           $(INSTALL_DATA) $$m-wrap $(DESTDIR)$(systemtmacdir)/$$m.tmac; \
-         done; \
-       fi
-       for f in $(NORMALFILES); do \
-         $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-         $(INSTALL_DATA) $(srcdir)/$$f $(DESTDIR)$(tmacdir)/$$f; \
-       done
-       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac
-       $(INSTALL_DATA) $(srcdir)/s.tmac \
-         $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac
-       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac
-       $(INSTALL_DATA) $(srcdir)/an.tmac \
-         $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac
-       $(RM) $(DESTDIR)$(tmacdir)/www.tmac
-       $(INSTALL_DATA) www.tmac-sed $(DESTDIR)$(tmacdir)/www.tmac
-       for f in $(STRIPFILES); do \
-         $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-         $(INSTALL_DATA) $$f-s $(DESTDIR)$(tmacdir)/$$f; \
-       done
-       -test -d $(DESTDIR)$(mdocdir) || $(mkinstalldirs) $(DESTDIR)$(mdocdir)
-       for f in $(MDOCFILES); do \
-         $(RM) $(DESTDIR)$(mdocdir)/$$f; \
-         $(INSTALL_DATA) $$f-s $(DESTDIR)$(mdocdir)/$$f; \
-       done
-       -test -f $(DESTDIR)$(localtmacdir)/man.local \
-         || $(INSTALL_DATA) $(srcdir)/man.local \
-              $(DESTDIR)$(localtmacdir)/man.local
-       -test -f $(DESTDIR)$(localtmacdir)/mdoc.local \
-         || $(INSTALL_DATA) mdoc.local-s $(DESTDIR)$(localtmacdir)/mdoc.local
-
-stamp-strip: $(STRIPFILES) $(MDOCFILES) mdoc.local
-       for f in $(STRIPFILES) $(MDOCFILES) mdoc.local; do \
-         $(RM) $$f-s; \
-         sed -f $(srcdir)/strip.sed $(srcdir)/$$f >$$f-s; \
-       done
-       touch $@
-
-stamp-wrap:
-       if test -n "$(tmac_wrap)"; then \
-         for m in ""$(tmac_wrap); do \
-           $(RM) $$m-wrap; \
-           if test "$$m" = an; then \
-             echo .do mso andoc.tmac >>$$m-wrap; \
-           fi; \
-           echo .cp 1 >>$$m-wrap; \
-           echo .so $(sys_tmac_prefix)$$m >>$$m-wrap; \
-         done; \
-       fi
-       touch $@
-
-stamp-sed: www.tmac
-       sed -e "s;@PNMTOPS_NOSETPAGE@;$(pnmtops_nosetpage);g" \
-         $(srcdir)/www.tmac > www.tmac-sed
-       touch $@
-
-uninstall_sub:
-       -if test -n "$(tmac_wrap)"; then \
-         for m in ""$(tmac_wrap); do \
-           $(RM) $(DESTDIR)$(systemtmacdir)/$$m.tmac; \
-         done; \
-       fi
-       -for f in $(NORMALFILES) $(STRIPFILES); do \
-         $(RM) $(DESTDIR)$(tmacdir)/$$f; \
-       done
-       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac
-       $(RM) $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac
-       $(RM) $(DESTDIR)$(tmacdir)/www.tmac
-       -if cmp -s $(DESTDIR)$(localtmacdir)/man.local \
-                  $(srcdir)/man.local; then \
-         $(RM) $(DESTDIR)$(localtmacdir)/man.local; \
-       fi
-       -if cmp -s $(DESTDIR)$(localtmacdir)/mdoc.local \
-                  $(srcdir)/mdoc.local; then \
-         $(RM) $(DESTDIR)$(localtmacdir)/mdoc.local; \
-       fi
-       -for f in $(MDOCFILES); do $(RM) $(DESTDIR)$(mdocdir)/$$f; done
-       -test -d $(DESTDIR)$(mdocdir) && rmdir $(DESTDIR)$(mdocdir)
-
-########################################################################
-# Emacs settings
-########################################################################
-#
-# Local Variables:
-# mode: makefile
-# End:
index 818d539a6f09ad7dc0980ea1196e6a54c877f086..6e2156411555a79ea11d8a060b7f6aa1ca4e1a30 100644 (file)
@@ -1,7 +1,7 @@
-Here are some hints about testing modifications to macro packages 
-and manual pages.
+Here are some hints about testing modifications to macro packages and
+manual pages.
 
-1. Use groff's `-ww' option to catch potential problems.
+1. Use groff's '-ww' option to catch potential problems.
    Ideally, there shouldn't be any warnings.
 
 2. For a well-formedness check, run doclifter (http://catb.org/~esr/doclifter)
index f9fd4905cf33c82851f24df9a76a1794007b43d0..89da313886320ecc7e37d927af2725c9cc45fc1b 100644 (file)
--- a/tmac/TODO
+++ b/tmac/TODO
@@ -15,7 +15,7 @@ footnote height.)
 Possibly have a place above which the footnote trap must not be
 placed.
 
-Improved indexing, not using tm, controlled by string variable (eg
+Improved indexing, not using tm, controlled by string variable (e.g.,
 -dIDX=file.idx).
 
 When changing from multi-column to narrower columns, we could avoid
index 9d7f09adab8a75233c72594ed5b2260742fc6c0e..750b66882619282e5bda8c353b0c24ba3f9760b0 100644 (file)
@@ -1,5 +1,3 @@
-.\" -*- nroff -*-
-.\"
 .\" X.tmac
 .\"
 .nr _C \n(.C
 .el \
 .  do mso cp1047.tmac
 .
-.\" make sure that no blank lines creep in at the end of this file.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 54339ec8cdc00542228efde282950797f64cd7ee..d9f884d34a4a801f9e343ce648c490c646e0ed28 100644 (file)
@@ -1,5 +1,3 @@
-.\" -*- nroff -*-
-.\"
 .\" Xps.tmac
 .\"
 .do mso ps.tmac
 .el \
 .  do mso cp1047.tmac
 .
-.\" make sure that no blank lines creep in at the end of this file.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 1abc21ec14968a4ddb034f7ed617d21c7c461d14..51a2d01d79361f7606963a96f1397b0119fa1070 100644 (file)
@@ -1,11 +1,9 @@
-.\" -*- nroff -*-
-.\"
 .\" a4.tmac
 .\"
 .\" Set up groff for A4 paper.  Must be called before any other macro
 .\" package.
 .\"
-.\" Some output drivers need an additional command line switch `-p' to
+.\" Some output drivers need an additional command-line switch '-p' to
 .\" override the default paper length set in the driver specific DESC
 .\" file.
 .\"
 .\" for ms, mdoc, man
 .do if !r LL .nr LL \n[.l]u
 .
-.\" EOF
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 585af208f20fef1b5b944ecb06b19e7c125b54db..b8599e7664e48771d54579eb5cf721addca00f2b 100644 (file)
@@ -1,25 +1,23 @@
-.\" -*- nroff -*-
-.\"
 .\" an-ext.tmac
 .\"
-.\" Copyright (C) 2007-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2007-2018 Free Software Foundation, Inc.
 .\"
 .\" Written by Eric S. Raymond <esr@thyrsus.com>
 .\"            Werner Lemberg <wl@gnu.org>
 .\"
 .\" You may freely use, modify and/or distribute this file.
 .\"
-.\" The code below provides extension macros for the `man' macro package.
-.\" Care has been taken to make the code portable; groff extensions are
-.\" properly hidden so that all troff implementations can use it without
-.\" changes.
+.\" The code below provides extension macros for the 'man' macro
+.\" package.  Care has been taken to make the code portable; groff
+.\" extensions are properly hidden so that all troff implementations can
+.\" use it without changes.
 .\"
-.\" With groff, this file is sourced by the `man' macro package itself.
+.\" With groff, this file is sourced by the 'man' macro package itself.
 .\" Man page authors who are concerned about portability might add the
 .\" used macros directly to the prologue of the man page(s).
 .
 .
-.\" Convention: Auxiliary macros and registers start with `m' followed
+.\" Convention: Auxiliary macros and registers start with 'm' followed
 .\"             by an uppercase letter or digit.
 .
 .
 .  \" XXX to be written
 ..
 .
-.\" EOF
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index b46202a1c191383778a198066332f0d335751994..971d2cd57600a3031034368e37e1aadd5f34e795 100644 (file)
@@ -1,37 +1,37 @@
-.\" -*- nroff -*-
-.\"
 .\" an-old.tmac
 .\"
-.\" Copyright (C) 1989-201 Free Software Foundation, Inc.
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
 .\"      Written by James Clark (jjc@jclark.com)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
-.\"  -rcR=1 => Create a single, very long page instead of multiple pages.
-.\"            Useful for online display.  Default in nroff mode.
-.\"            Desactivate with -rcR=0.
+.\"  -rcR=1 => Create a single, very long page instead of multiple
+.\"            pages.  Useful for online display.  Default in nroff
+.\"            mode.  Deactivate with -rcR=0.
 .\"  -rC1 => Number pages continuously, rather than start each at 1.
-.\"  -rD1 => Double-sided printing, ie different odd and even page footers.
+.\"  -rD1 => Double-sided printing, ie different odd and even page
+.\"          footers.
 .\"  -rPnnn => Number first page nnn.
-.\"  -rSxx => Use size `xx'pt (either 10, 11, or 12) for document rather
+.\"  -rSxx => Use size 'xx'pt (either 10, 11, or 12) for document rather
 .\"           than the default size of 10pt.
 .\"  -rXnnn => Number pages after nnn as nnna, nnnb, nnnc, ...
 .\"
 .\" The file man.local is loaded at the end.  Put local additions there.
-.\" If you need to add things to TH, use `.am1 TH'.
+.\" If you need to add things to TH, use '.am1 TH'.
 .\"
 .
 .if !\n(.g .ab These man macros work only with groff.
 .cp 0
 .
 .if (\n[.x]\n[.y] < 118) \
-.  ab You need GNU troff version 1.18 or higher to run this version of man!
+.  ab You need GNU troff 1.18 or higher to run this version of man!
+.
+.\" Define a string for use in diagnostic messages.
+.ds an-old an-old.tmac
 .
 .if !r D .nr D 0
 .if !r C .nr C 0
 .if !r S .nr S 10
-.\" we must use consecutive page numbers when using postscript to generate
-.\" html images, and we must not reset the page number at the beginning
-.\" (the `ps4html' register is automatically added to the command line by
-.\" the pre-html preprocessor)
+.\" We must use consecutive page numbers when using PostScript to
+.\" generate HTML images, and we must not reset the page number at the
+.\" beginning (the 'ps4html' register is automatically added to the
+.\" command line by the pre-HTML preprocessor).
 .if !r ps4html \
 .  if r P .pn 0\n[P]
 .if !r cR \{\
 .if !r LL \{\
 .
 .  \" but if that isn't predefined...
-.  \" then try to respect any prior `.ll' request.
+.  \" then try to respect any prior '.ll' request.
 .  nr LL \n[.l]
 .
 .  \" For troff, this is sufficient to give us a default line length of
 .  \" 6.5i, but for nroff, we prefer a default of 78n to nroff's default
 .  \" 65n.  This has the unfortunate side effect that we will override a
-.  \" user's `.ll 65n' request, with our preferred 78n default; we can't
-.  \" possibly know that the 65n came from a `.ll' request, and MUST
+.  \" user's '.ll 65n' request, with our preferred 78n default; we can't
+.  \" possibly know that the 65n came from a '.ll' request, and MUST
 .  \" assume that it was set by nroff, as its built-in default!  If the
-.  \" user wants to force this setting, then he MUST use the `-rLL=65n'
-.  \" option, or an equivalent `.nr LL 65n' request.
+.  \" user wants to force this setting, then he MUST use the '-rLL=65n'
+.  \" option, or an equivalent '.nr LL 65n' request.
 .  if n \
 .    if (\n[LL] = 65n) \
 .      nr LL 78n
 .if \n[an-html] .nr C 1
 .if r ps4html .nr C 1
 .
-.\" we redefine .ne to avoid page breaks if cR is set; instead, the page
-.\" length is increased to the necessary amount (this is needed for tables)
+.\" We redefine .ne to avoid page breaks if cR is set; instead, the page
+.\" length is increased to the necessary amount (this is needed for
+.\" tables).
 .\"
-.\" similarly, we redefine .bp if cR is set, adjusting the page length to
-.\" the current position so that no empty lines are inserted
+.\" Similarly, we redefine .bp if cR is set, adjusting the page length
+.\" to the current position so that no empty lines are inserted.
 .if \n[cR] \{\
 .  de1 ne
 .    ie \\n[.$] \
 .    DEVTAG-EO-TL
 .  \}
 .
-.  de an-init \" We have to do it like this to get multiple man pages right.
+.  de an-init \" This approach gets multiple man pages right.
 .    ds an-title "\\$1\"
 .    ds an-section "\\$2\"
 .    ds an-extra1 "\\$3\"
 .  \}
 .  PD
 .  if !r SN \
-.    nr SN 3n \" the indentation of sub-sub-headings relative to sub-headings
+.    nr SN 3n \" indentation of sub-sub-headings relative to sub-heads
 .  set-an-margin
 .  nr an-tag-sep 1n
 .
 .  ti 0
 .  nr need_eo_h 1
 .  DEVTAG-NH \\n[an-level]
-.  it 1 an-trap
+.  itc 1 an-trap
 .  nr an-no-space-flag 1
 .  nr an-break-flag 1
 .  ps \\n[PS-SH]u
 .  fi
 .  in \\n[IN]u
 .  ti \\n[SN]u
-.  it 1 an-trap
+.  itc 1 an-trap
 .  nr an-no-space-flag 1
 .  nr an-break-flag 1
 .  ps \\n[PS-SS]u
 ..
 .
 .de1 B
-.  it 1 an-trap
+.  itc 1 an-trap
 .  ft B
 .  if \\n[.$] \&\\$*
 ..
 .
 .de1 I
-.  it 1 an-trap
+.  itc 1 an-trap
 .  ft I
 .  if \\n[.$] \,\\$*\/
 ..
 .
 .de1 SM
-.  it 1 an-trap
+.  itc 1 an-trap
 .  ps -1
 .  if \\n[.$] \&\\$*
 ..
 .
 .de1 SB
-.  it 1 an-trap
+.  itc 1 an-trap
 .  ps -1
 .  ft B
 .  if \\n[.$] \&\\$*
 .de1 TP
 .  sp \\n[PD]u
 .  if \\n[.$] .nr an-prevailing-indent (n;\\$1)
-.  it 1 an-trap
+.  itc 1 an-trap
 .  in 0
 .  if !\\n[an-div?] \{\
 .    ll -\\n[an-margin]u
 .  di
 .  nr an-div? 0
 .  ll
-.  \" We must emit the diversion in a separate environment to
-.  \" assure that a possible margin character is printed correctly.
+.  \" We must emit the diversion in a separate environment to assure
+.  \" that a possible margin character is printed correctly.
 .  ev an-2
 .  evc 0
 .  mc
 .    in (\\n[an-margin]u + \\n[an-prevailing-indent]u)
 .  \}
 .  el \{\
-.    \" In nroff mode, the indentation value should be an integer multiple
-.    \" of the character cell, to avoid different results compared to the
-.    \" the .ie part above.
+.    \" In nroff mode, the indentation value should be an integer
+.    \" multiple of the character cell, to avoid different results
+.    \" compared to the .ie part above.
 .    ne (1v + 1u)
 .    DEVTAG-COL 1
 .    an-div
 .  ns
 ..
 .
-.ds an-empty \" this is referenced to avoid looping on eg .RB ( \\ )
+.ds an-empty \" this is referenced to avoid looping on, e.g., .RB ( \\ )
 .
 .de1 RI
 .  if \\n[.$] \{\
 .
 .de1 IR
 .  if \\n[.$] \{\
-.    ds an-result \&\f[I]\\$1\f[R]\"
+.    ds an-result \&\f[I]\,\\$1\f[R]\"
 .    shift
 .    while (\\n[.$] >= 2) \{\
 .      as an-result \/\\$1\f[I]\,\\$2\f[R]\"
 .
 .de1 IB
 .  if \\n[.$] \{\
-.    ds an-result \&\f[I]\\$1\"
+.    ds an-result \&\f[I]\,\\$1\"
 .    shift
 .    while (\\n[.$] >= 2) \{\
 .      as an-result \/\f[B]\\$1\f[I]\,\\$2\\*[an-empty]\"
 .de1 R
 \c
 .  ie \\n[.$] \{\
-.    tm `R' is a string (producing the registered sign), not a macro.
+.    tmc \\*[an-old]: \\n[.F]: line \\n[.c]: 'R' is a string
+.    tm1 " (producing the registered sign), not a macro.
 .    nop \\$*
 .  \}
 .  el \{\
 .  \}
 ..
 .
-.\" these strings must work in compatibility mode also
+.\" These strings must work in compatibility mode also.
 .
 .ds S \s'\\n(PSu'\"
 .ie c\[tm] .ds Tm \(tm\"
 .if !\n[an-html] \{\
 .  if !rHY \{\
 .    ie \n[cR] \
-.      nr HY 12
+.      nr HY 4
 .    el \
-.      nr HY 14
+.      nr HY 6
 .  \}
 .  hy \n[HY]
 .\}
 .
 .cp \n[_C]
 .
-.\" end of an-old.tmac
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 89bd747b3fed19818c2ba28c0091c0db04ddf561..79a58b0b99940b61c1183cbd59b177cf76d90b09 100644 (file)
@@ -1,4 +1,13 @@
-.\" -*- nroff -*-
 .\" an.tmac
 .\"
 .do mso andoc.tmac
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 38a59a92bdb3c166d0f571c0e3046a7de2c0378c..7f1f3ca9349c21cf6d04f0dfbed5c63c5772c52c 100644 (file)
@@ -1,28 +1,27 @@
-.\" -*- nroff -*-
-.\"
 .\" andoc.tmac
 .\"
 .\" Load either an-old.tmac or doc.tmac.  Multiple man pages can be
 .\" handled.
 .\"
 .\"
-.\" Copyright (C) 1991-201 Free Software Foundation, Inc.
+.\" Copyright (C) 1991-2018 Free Software Foundation, Inc.
 .\"      Written by James Clark (jjc@jclark.com)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .
 .if !\n(.g \
 .als andoc-em em
 .als andoc-bp bp
 .
-.de1 reload-doc
-.  ch an-header   \" remove trap set by an-old.tmac
-.  ch an-footer   \" remove trap set by an-old.tmac
-.  ch an-p-footer \" remove trap set by an-old.tmac
 .
-.  als em andoc-em
-.  als bp andoc-bp
-.  rm Dd          \" disable load-only-once, see doc.tmac
+.\" We must not use '.de1' for 'reload-doc' or 'reload-man'!  'doc.tmac'
+.\" unconditionally switches compatibility mode off, but '.de1' would
+.\" ignore this, restoring the mode that was active before.  Similarly,
+.\" we have to switch back to the original compatibility mode for man
+.\" documents in case there is a mix of mdoc and man input files.
+.\"
+.\" Due to a bug in GNU troff it necessary to have a no-op line between
+.\" '.do' and '\*'.
+.
+.
+.de reload-doc
+.  do ch an-header   \" remove trap set by an-old.tmac
+.  do ch an-footer   \" remove trap set by an-old.tmac
+.  do ch an-p-footer \" remove trap set by an-old.tmac
+.
+.  do als em andoc-em
+.  do als bp andoc-bp
+.  do rm Dd          \" disable load-only-once, see doc.tmac
 .
-.  mso doc.tmac
+.  do mso doc.tmac
 .
-.  als TH reload-man
-\\*[Dd]\\
+.  do als TH reload-man
+.
+\\*(Dd\\
 ..
 .
-.de1 reload-man
-.  ch header      \" remove trap set by doc.tmac
-.  ch footer      \" remove trap set by doc.tmac
+.de reload-man
+.  do cp \n(.C       \" restore original compatibility mode
+.
+.  do ch header      \" remove trap set by doc.tmac
+.  do ch footer      \" remove trap set by doc.tmac
 .
-.  als em andoc-em
-.  als bp andoc-bp
-.  rm RI          \" disable load-only-once, see an-old.tmac
-.  blm            \" no blank line macro
-.  rm TH
+.  do als em andoc-em
+.  do als bp andoc-bp
+.  do rm RI          \" disable load-only-once, see an-old.tmac
+.  do blm            \" no blank line macro
+.  do rm TH
 .
-.  mso an-old.tmac
+.  do mso an-old.tmac
 .
-.  als Dd reload-doc
-\\*[TH]\\
+.  do als Dd reload-doc
+.
+\\*(TH\\
 ..
 .
 .als TH reload-man
 .
 .cp \n[_C]
 .
-.\" end of andoc.tmac
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 5203585d7b299dd7e194349db98a7b50dd305e4f..529de98259b7e1790413e37435206c8935242ed4 100644 (file)
@@ -1,4 +1,3 @@
-.\" -*- nroff -*-
 .\" composite.tmac
 .
 .do composite ga u0300
 .do composite ,  u0327
 .do composite ho u0328
 .
-.\" EOF
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 759ca9ade2c243823092197998997838c9f09c15..251365d9b3cce3ccdbcad3f32bd1a1accff41329 100644 (file)
@@ -1,5 +1,3 @@
-.\" -*- nroff -*-
-.\"
 .\" cp1047.tmac
 .\"
 .nr _C \n(.C
 .trin \[char253]\[`U]
 .trin \[char254]\['U]
 .cp \n(_C
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index c0efeda999e4f5bd2879691449ed4e9544505d65..4d0706f49f03ab92fca242c3760a2cc64cdcf681 100644 (file)
@@ -1,24 +1,23 @@
-.\" -*- mode: nroff; coding: iso-latin-2; -*-
-.\"
 .\" Czech localization for groff
 .\"
-.\" Copyright (C) 2007-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2007-2018 Free Software Foundation, Inc.
 .\"   Written by Marcela Ma¹láòová (mmaslano@redhat.com)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .\" Please send comments to mmaslano@redhat.com.
 .
 .      \" update the date
 .      ds DY \n[dy] \*[MO] \n[year]
 .      \" set hyphenation flags
-.      nr HY 12
+.      nr HY 1
 .\}
 .
 .
 .mso latin2.tmac
 .
 .
-.\" Czech hyphenation
+.\" Czech hyphenation (\lefthyphenmin=2, \righthyphenmin=2)
 .ss 12 0
-.hy 12
+.hy 1
 .hcode á á  Á á
 .hcode è è  È è
 .hcode ï ï  Ï ï
 .hpfa hyphenex.cs
 .
 .
-.\" man, mdoc and mdoc-old are intentionally left untouched:
-.\" usually these packages are translated in the sources of the documents.
+.\" man, mdoc and mdoc-old are intentionally left untouched: usually
+.\" these packages are translated in the sources of the documents.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
 .
-.\" end of cs.tmac
+.\" Local Variables:
+.\" mode: nroff
+.\" coding: latin-2
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index e1e1cb3f9d387da69b2063baeb9ceb19dd78d59f..0bad3d62d853529f42d4e8883041d8bb7db31936 100644 (file)
@@ -1,24 +1,23 @@
-.\" -*- mode: nroff; coding: iso-latin-1; -*-
-.\"
 .\" German localization for groff
 .\"
-.\" Copyright (C) 2006-201 Free Software Foundation, Inc.
-.\"   Written by Werner Lberg (wl@gnu.org)
+.\" Copyright (C) 2006-2018 Free Software Foundation, Inc.
+.\"   Written by Werner Lemberg (wl@gnu.org)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .\" Please send comments to groff@gnu.org.
 .
 .      \" update the date
 .      ds DY \n[dy].\~\*[MO] \n[year]
 .      \" set hyphenation flags
-.      nr HY 12
+.      nr HY 1
 .\}
 .
 .
 .mso latin1.tmac
 .
 .
-.\" German hyphenation
+.\" German hyphenation (\lefthyphenmin=2, \righthyphenmin=2)
 .ss 12 0
-.hy 12
-.hcode ä ä  Ä ä
-.hcode ö ö  Ö ö
-.hcode ü ü  Ü ü
+.hy 1
+.
+.hcode ä ä  â â  à à  á á  ã ã  å å  æ æ
+.hcode ç ç
+.hcode é é  è è  ë ë  ê ê
+.hcode í í  ì ì  î î  ï ï
+.hcode ñ ñ
+.hcode ó ó  ò ò  ô ô  ö ö  ø ø
+.hcode ú ú  ü ü  û û
+.
+.hcode Ä ä  Â â  À à  Á á  Ã ã  Å å  Æ æ
+.hcode Ç ç
+.hcode É é  È è  Ë ë  Ê ê
+.hcode Í í  Ì ì  Î î  Ï ï
+.hcode Ñ ñ
+.hcode Ó ó  Ò ò  Ô ô  Ö ö  Ø ø
+.hcode Ú ú  Ü ü  Û û
+.
 .hcode ß ß
 .
 .hla de
 .ie r \*[locale]-new-hyphenation-patterns \
 .  hpf hyphen.den
-.el \{\
+.el \
 .  hpf hyphen.det
-.  hpfa hyphenex.det
-.\}
 .
 .
-.\" man, mdoc and mdoc-old are intentionally left untouched:
-.\" usually these packages are translated in the sources of the documents.
+.\" man, mdoc and mdoc-old are intentionally left untouched: usually
+.\" these packages are translated in the sources of the documents.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
 .
-.\" end of de.tmac
+.\" Local Variables:
+.\" mode: nroff
+.\" coding: latin-1
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 4f482b3184ca36f338f842e250955f869cb12551..5c26258a56b5b40eaf03a8e6e1f09f704dc219f4 100644 (file)
@@ -1,28 +1,35 @@
-.\" -*- mode: nroff; coding: iso-latin-1; -*-
-.\"
 .\" German localization for groff (new orthography)
 .\"
-.\" Copyright (C) 2006-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2006-2018 Free Software Foundation, Inc.
 .\"   Written by Werner Lemberg (wl@gnu.org)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .\" Please send comments to groff@gnu.org.
 .
 .nr german-new-hyphenation-patterns 1
 .mso de.tmac
 .
-.\" end of den.tmac
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index fde3ade046296a66c6dcb125013b5ff39f34aae5..54836a048040b257988405f8070bc56b1bc68049 100644 (file)
@@ -1,4 +1,3 @@
-.\" -*- nroff -*-
 .ig
 devtag.tmac - macro package for adding tags to roff documents.
 
@@ -11,7 +10,7 @@ Installed position: groff's main macro directory.
 
 This file is part of groff, the GNU roff type-setting system.
 
-Copyright (C) 2004-2014 Free Software Foundation, Inc.
+Copyright (C) 2004-2018 Free Software Foundation, Inc.
 written by Gaius Mulley <gaius@glam.ac.uk>.
 
 groff is free software; you can redistribute it and/or modify it under
@@ -25,7 +24,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 
 
 ------------------------------------------------------------------------
@@ -120,11 +119,12 @@ reasonably generic and could be applied to other devices.
 .cp \n[_C]
 .
 .
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
 .
 .\" Local Variables:
 .\" mode: nroff
+.\" fill-column: 72
 .\" End:
-.\" EOF
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/doc-common b/tmac/doc-common
deleted file mode 100644 (file)
index e63fdb4..0000000
+++ /dev/null
@@ -1,1376 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1991, 1993
-.\"    The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc-common 8.1 (Berkeley) 06/08/93
-.\"
-.\"     %beginstrip%
-.
-.
-.\" Macro Identifiers.  For each user macro a corresponding register with
-.\" the same name must exist.  Its value must not be zero.
-.
-.nr %A 1
-.nr %B 1
-.nr %C 1
-.nr %D 1
-.nr %I 1
-.nr %J 1
-.nr %N 1
-.nr %O 1
-.nr %P 1
-.nr %Q 1
-.nr %R 1
-.nr %T 1
-.nr %U 1
-.nr %V 1
-.nr Ac 3
-.nr Ad 12n
-.nr An 12n
-.nr Ao 12n
-.nr Ap 2
-.nr Aq 12n
-.nr Ar 12n
-.nr At 1
-.nr Bc 3
-.nr Bf 8n\" ?
-.nr Bk 8n\" ?
-.nr Bl 1
-.nr Bo 12n
-.nr Bq 12n
-.nr Brc 3
-.nr Bro 12n
-.nr Brq 12n
-.nr Bsx 1
-.nr Bt 8n\" ?
-.nr Bx 1
-.nr Cd 12n
-.nr Cm 10n
-.nr D1 8n\" ?
-.nr Dc 3
-.nr Dl 8n\" ?
-.nr Dt 8n\" ?
-.nr Do 12n
-.nr Dq 12n
-.nr Ds 6n\" many manpages still use this as a -width value
-.nr Dv 12n
-.nr Dx 1
-.nr Ec 3
-.nr Ef 8n\" ?
-.nr Ek 8n\" ?
-.nr El 1
-.nr Em 10n
-.nr En 12n
-.nr Eo 12n
-.nr Eq 12n
-.nr Er 17n
-.nr Es 12n
-.nr Ev 15n
-.nr Ex 1
-.nr Fa 12n
-.nr Fc 3
-.nr Fd 12n\" ?
-.nr Fl 10n
-.nr Fn 16n
-.nr Fo 16n
-.nr Fr 12n\" ?
-.nr Ft 8n\" ?
-.nr Fx 1
-.nr Ic 10n
-.nr In 12n
-.nr It 8n\" ?
-.nr Lb 11n
-.nr Li 16n
-.nr Lk 6n\" ?
-.nr Lp 8n\" ?
-.nr Me 6n
-.nr Ms 6n
-.nr Mt 6n\" ?
-.nr Nd 8n\" ?
-.nr Nm 10n
-.nr No 12n
-.nr Ns 2
-.nr Nx 1
-.nr Oc 3
-.nr Oo 10n
-.nr Op 14n
-.nr Os 6n\" ?
-.nr Ox 1
-.nr Pa 32n
-.nr Pc 3
-.nr Pf 12n
-.nr Po 12n
-.nr Pp 8n\" ?
-.nr Pq 12n
-.nr Qc 3
-.nr Ql 16n
-.nr Qo 12n
-.nr Qq 12n
-.nr Rv 1
-.nr Sc 3
-.nr Sh 8n
-.nr Sm 8n\" ?
-.nr So 12n
-.nr Sq 12n
-.nr Ss 8n
-.nr St 8n\" ?
-.nr Sx 16n
-.nr Sy 6n
-.nr Ta 2
-.nr Tn 10n
-.nr Ud 8n\" ?
-.nr Ux 1
-.nr Va 12n
-.nr Vt 8n\" ?
-.nr Xc 3
-.nr Xo 1
-.nr Xr 10n
-.
-.
-.\" macros which must be processed after the closing delimiter of `Op'
-.\" and friends
-.ds doc-after-Ao
-.ds doc-after-Bo
-.ds doc-after-Bro
-.ds doc-after-Do
-.ds doc-after-Eo
-.ds doc-after-Fo
-.ds doc-after-Ns
-.ds doc-after-Oo
-.ds doc-after-Po
-.ds doc-after-Qo
-.ds doc-after-So
-.ds doc-after-Xo
-.
-.
-.nr doc-display-indent 6n
-.
-.
-.\" space strings
-.
-.ds doc-soft-space " \"
-.ds doc-hard-space \~
-.ds doc-tab \t
-.
-.
-.eo
-.
-.
-.\" punctuation values (suffix=3, prefix=4)
-.
-.nr doc-punct. 3
-.nr doc-punct, 3
-.nr doc-punct: 3
-.nr doc-punct; 3
-.nr doc-punct( 4
-.nr doc-punct) 3
-.nr doc-punct[ 4
-.nr doc-punct] 3
-.nr doc-punct? 3
-.nr doc-punct! 3
-.
-.
-.\" header assembly macros
-.
-.\" NS doc-document-title global string
-.\" NS   the title of the manual page
-.
-.ds doc-document-title UNTITLED
-.
-.
-.\" NS doc-volume global string
-.\" NS   the volume where the manual page belongs to
-.
-.ds doc-volume LOCAL
-.
-.
-.\" NS doc-section global string
-.\" NS   the manual section
-.
-.ds doc-section Null
-.
-.
-.\" NS Dt user macro (not parsed, not callable)
-.\" NS   document title
-.\" NS
-.\" NS modifies:
-.\" NS   doc-document-title
-.\" NS   doc-section
-.\" NS   doc-volume
-.\" NS   doc-command-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-volume-as-XXX
-.\" NS   doc-volume-ds-XXX
-.\" NS
-.\" NS width register `Dt' set above
-.
-.\" an alternative, more detailed scheme for naming the manual sections
-.\"
-.ds doc-volume-operating-system BSD
-.nr doc-volume-operating-system-ateol 0
-.ds doc-volume-ds-1 General Commands Manual
-.ds doc-volume-ds-2 System Calls Manual
-.ds doc-volume-ds-3 Library Functions Manual
-.ds doc-volume-ds-4 Kernel Interfaces Manual
-.ds doc-volume-ds-5 File Formats Manual
-.ds doc-volume-ds-6 Games Manual
-.ds doc-volume-ds-7 Miscellaneous Information Manual
-.ds doc-volume-ds-8 System Manager's Manual
-.ds doc-volume-ds-9 Kernel Developer's Manual
-.
-.ds doc-volume-ds-USD   User's Supplementary Documents
-.ds doc-volume-ds-PS1   Programmer's Supplementary Documents
-.ds doc-volume-ds-AMD   Ancestral Manual Documents
-.ds doc-volume-ds-SMM   System Manager's Manual
-.ds doc-volume-ds-URM   User's Reference Manual
-.ds doc-volume-ds-PRM   Programmer's Manual
-.ds doc-volume-ds-KM    Kernel Manual
-.ds doc-volume-ds-IND   Manual Master Index
-.ds doc-volume-ds-LOCAL Local Manual
-.ds doc-volume-ds-CON   Contributed Software Manual
-.
-.als doc-volume-ds-MMI doc-volume-ds-IND
-.als doc-volume-ds-LOC doc-volume-ds-LOCAL
-.
-.ds doc-volume-as-alpha        alpha
-.als doc-volume-as-Alpha doc-volume-as-alpha
-.ds doc-volume-as-acorn26      acorn26
-.ds doc-volume-as-acorn32      acorn32
-.ds doc-volume-as-algor        algor
-.ds doc-volume-as-amd64        amd64
-.ds doc-volume-as-amiga        amiga
-.ds doc-volume-as-amigappc     amigappc
-.ds doc-volume-as-arc          arc
-.ds doc-volume-as-arm          arm
-.ds doc-volume-as-arm26        arm26
-.ds doc-volume-as-arm32        arm32
-.ds doc-volume-as-armish       armish
-.ds doc-volume-as-atari        atari
-.ds doc-volume-as-aviion       aviion
-.ds doc-volume-as-beagle       beagle
-.ds doc-volume-as-bebox        bebox
-.ds doc-volume-as-cats         cats
-.ds doc-volume-as-cesfic       cesfic
-.ds doc-volume-as-cobalt       cobalt
-.ds doc-volume-as-dreamcast    dreamcast
-.ds doc-volume-as-emips        emips
-.ds doc-volume-as-evbarm       evbarm
-.ds doc-volume-as-evbmips      evbmips
-.ds doc-volume-as-evbppc       evbppc
-.ds doc-volume-as-evbsh3       evbsh3
-.ds doc-volume-as-ews4800mips  ews4800mips
-.ds doc-volume-as-hp300        hp300
-.ds doc-volume-as-hp700        hp700
-.ds doc-volume-as-hpcarm       hpcarm
-.ds doc-volume-as-hpcmips      hpcmips
-.ds doc-volume-as-hpcsh        hpcsh
-.ds doc-volume-as-hppa         hppa
-.ds doc-volume-as-hppa64       hppa64
-.ds doc-volume-as-i386         i386
-.ds doc-volume-as-ia64         ia64
-.ds doc-volume-as-ibmnws       ibmnws
-.ds doc-volume-as-iyonix       iyonix
-.ds doc-volume-as-landisk      landisk
-.ds doc-volume-as-loongson     loongson
-.ds doc-volume-as-luna68k      luna68k
-.ds doc-volume-as-luna88k      luna88k
-.ds doc-volume-as-m68k         m68k
-.ds doc-volume-as-mac68k       mac68k
-.ds doc-volume-as-macppc       macppc
-.ds doc-volume-as-mips         mips
-.ds doc-volume-as-mips64       mips64
-.ds doc-volume-as-mipsco       mipsco
-.ds doc-volume-as-mmeye        mmeye
-.ds doc-volume-as-mvme68k      mvme68k
-.ds doc-volume-as-mvme88k      mvme88k
-.ds doc-volume-as-mvmeppc      mvmeppc
-.ds doc-volume-as-netwinder    netwinder
-.ds doc-volume-as-news68k      news68k
-.ds doc-volume-as-newsmips     newsmips
-.ds doc-volume-as-next68k      next68k
-.ds doc-volume-as-ofppc        ofppc
-.ds doc-volume-as-palm         palm
-.ds doc-volume-as-pc532        pc532
-.ds doc-volume-as-playstation2 playstation2
-.ds doc-volume-as-pmax         pmax
-.ds doc-volume-as-pmppc        pmppc
-.ds doc-volume-as-powerpc      powerpc
-.ds doc-volume-as-prep         prep
-.ds doc-volume-as-rs6000       rs6000
-.ds doc-volume-as-sandpoint    sandpoint
-.ds doc-volume-as-sbmips       sbmips
-.ds doc-volume-as-sgi          sgi
-.ds doc-volume-as-sgimips      sgimips
-.ds doc-volume-as-sh3          sh3
-.ds doc-volume-as-shark        shark
-.ds doc-volume-as-socppc       socppc
-.ds doc-volume-as-solbourne    solbourne
-.ds doc-volume-as-sparc        sparc
-.ds doc-volume-as-sparc64      sparc64
-.ds doc-volume-as-sun2         sun2
-.ds doc-volume-as-sun3         sun3
-.ds doc-volume-as-tahoe        tahoe
-.ds doc-volume-as-vax          vax
-.ds doc-volume-as-x68k         x68k
-.ds doc-volume-as-x86_64       x86_64
-.ds doc-volume-as-xen          xen
-.ds doc-volume-as-zaurus       zaurus
-.
-.de Dt
-.  \" reset default arguments
-.  ds doc-document-title UNTITLED
-.  ds doc-volume LOCAL
-.  ds doc-section Null
-.  ds doc-command-name
-.
-.  if !"\$1"" \
-.    ds doc-document-title "\$1
-.
-.  if !"\$2"" \{\
-.    ds doc-section \$2
-.    ie \B\a\$2\a \{\
-.      if ((\$2 >= 1) & (\$2 <= 9)) \{\
-.        ie \n[doc-volume-operating-system-ateol] \{\
-.          ds doc-volume "\*[doc-volume-ds-\$2] \*[doc-volume-operating-system]
-.          if \A\a\$3\a \{\
-.            if d doc-volume-as-\$3 \
-.              as doc-volume "/\*[doc-volume-as-\$3]
-.        \}\}
-.        el \{\
-.          ds doc-volume "\*[doc-volume-operating-system]
-.          if \A\a\$3\a \{\
-.            if d doc-volume-as-\$3 \
-.              as doc-volume "/\*[doc-volume-as-\$3]
-.          \}
-.          as doc-volume " \*[doc-volume-ds-\$2]
-.    \}\}\}
-.    el \{\
-.      ie "\$2"unass" \
-.        ds doc-volume DRAFT
-.      el \{ .ie "\$2"draft" \
-.        ds doc-volume DRAFT
-.      el .if "\$2"paper" \
-.        ds doc-volume UNTITLED
-.      \}\}
-.      if \A\a\$3\a \{\
-.        if d doc-volume-ds-\$3 \
-.          ds doc-volume "\*[doc-volume-ds-\$3]
-.  \}\}\}
-.
-.  if !"\$3"" \
-.    if "\*[doc-volume]"LOCAL" \
-.      ds doc-volume \$3
-.
-.  if !\n[cR] \
-.    if \n[nl] \{\
-  .    doc-setup-header
-.      bp
-.    \}
-..
-.
-.
-.\" NS doc-default-operating-system global string
-.\" NS   the exact (default) version of the operating system
-.\" NS
-.\" NS override this in `mdoc.local', if necessary
-.
-.ds doc-default-operating-system BSD
-.
-.
-.\" NS doc-operating-system global string
-.\" NS   the exact version of the operating system
-.
-.ds doc-operating-system
-.
-.
-.\" NS Os user macro (not parsed, not callable)
-.\" NS   operating system
-.\" NS
-.\" NS modifies:
-.\" NS   doc-operating-system
-.\" NS   doc-command-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-operating-system-XXX-XXX
-.\" NS
-.\" NS width register `Os' set above
-.
-.ds doc-operating-system-ATT-7   7th\~Edition
-.als doc-operating-system-ATT-7th doc-operating-system-ATT-7
-.ds doc-operating-system-ATT-3   System\~III
-.als doc-operating-system-ATT-III doc-operating-system-ATT-3
-.ds doc-operating-system-ATT-V   System\~V
-.ds doc-operating-system-ATT-V.2 System\~V Release\~2
-.ds doc-operating-system-ATT-V.3 System\~V Release\~3
-.ds doc-operating-system-ATT-V.4 System\~V Release\~4
-.
-.ds doc-operating-system-BSD-3    3rd\~Berkeley Distribution
-.ds doc-operating-system-BSD-4    4th\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.1  4.1\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.2  4.2\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.3  4.3\~Berkeley Distribution
-.ds doc-operating-system-BSD-4.3T 4.3-Tahoe Berkeley Distribution
-.ds doc-operating-system-BSD-4.3R 4.3-Reno Berkeley Distribution
-.als doc-operating-system-BSD-4.3t doc-operating-system-BSD-4.3T
-.als doc-operating-system-BSD-4.3r doc-operating-system-BSD-4.3R
-.ds doc-operating-system-BSD-4.4  4.4BSD
-.
-.ds doc-operating-system-NetBSD-0.8   0.8
-.ds doc-operating-system-NetBSD-0.8a  0.8A
-.ds doc-operating-system-NetBSD-0.9   0.9
-.ds doc-operating-system-NetBSD-0.9a  0.9A
-.ds doc-operating-system-NetBSD-1.0   1.0
-.ds doc-operating-system-NetBSD-1.0a  1.0A
-.ds doc-operating-system-NetBSD-1.1   1.1
-.ds doc-operating-system-NetBSD-1.2   1.2
-.ds doc-operating-system-NetBSD-1.2a  1.2A
-.ds doc-operating-system-NetBSD-1.2b  1.2B
-.ds doc-operating-system-NetBSD-1.2c  1.2C
-.ds doc-operating-system-NetBSD-1.2d  1.2D
-.ds doc-operating-system-NetBSD-1.2e  1.2E
-.ds doc-operating-system-NetBSD-1.3   1.3
-.ds doc-operating-system-NetBSD-1.3a  1.3A
-.ds doc-operating-system-NetBSD-1.4   1.4
-.ds doc-operating-system-NetBSD-1.4.1 1.4.1
-.ds doc-operating-system-NetBSD-1.4.2 1.4.2
-.ds doc-operating-system-NetBSD-1.4.3 1.4.3
-.ds doc-operating-system-NetBSD-1.5   1.5
-.ds doc-operating-system-NetBSD-1.5.1 1.5.1
-.ds doc-operating-system-NetBSD-1.5.2 1.5.2
-.ds doc-operating-system-NetBSD-1.5.3 1.5.3
-.ds doc-operating-system-NetBSD-1.6   1.6
-.ds doc-operating-system-NetBSD-1.6.1 1.6.1
-.ds doc-operating-system-NetBSD-1.6.2 1.6.2
-.ds doc-operating-system-NetBSD-1.6.3 1.6.3
-.ds doc-operating-system-NetBSD-2.0   2.0
-.ds doc-operating-system-NetBSD-2.0.1 2.0.1
-.ds doc-operating-system-NetBSD-2.0.2 2.0.2
-.ds doc-operating-system-NetBSD-2.0.3 2.0.3
-.ds doc-operating-system-NetBSD-2.1   2.1
-.ds doc-operating-system-NetBSD-3.0   3.0
-.ds doc-operating-system-NetBSD-3.0.1 3.0.1
-.ds doc-operating-system-NetBSD-3.0.2 3.0.2
-.ds doc-operating-system-NetBSD-3.0.3 3.0.3
-.ds doc-operating-system-NetBSD-3.1   3.1
-.ds doc-operating-system-NetBSD-3.1.1 3.1.1
-.ds doc-operating-system-NetBSD-4.0   4.0
-.ds doc-operating-system-NetBSD-4.0.1 4.0.1
-.ds doc-operating-system-NetBSD-5.0   5.0
-.ds doc-operating-system-NetBSD-5.0.1 5.0.1
-.ds doc-operating-system-NetBSD-5.0.2 5.0.2
-.ds doc-operating-system-NetBSD-5.1   5.1
-.ds doc-operating-system-NetBSD-5.1.2 5.1.2
-.ds doc-operating-system-NetBSD-5.1.3 5.1.3
-.ds doc-operating-system-NetBSD-5.1.4 5.1.4
-.ds doc-operating-system-NetBSD-5.2   5.2
-.ds doc-operating-system-NetBSD-5.2.1 5.2.1
-.ds doc-operating-system-NetBSD-5.2.2 5.2.2
-.ds doc-operating-system-NetBSD-6.0   6.0
-.ds doc-operating-system-NetBSD-6.0.1 6.0.1
-.ds doc-operating-system-NetBSD-6.0.2 6.0.2
-.ds doc-operating-system-NetBSD-6.0.3 6.0.3
-.ds doc-operating-system-NetBSD-6.0.4 6.0.4
-.ds doc-operating-system-NetBSD-6.0.5 6.0.5
-.ds doc-operating-system-NetBSD-6.1   6.1
-.ds doc-operating-system-NetBSD-6.1.1 6.1.1
-.ds doc-operating-system-NetBSD-6.1.2 6.1.2
-.ds doc-operating-system-NetBSD-6.1.3 6.1.3
-.ds doc-operating-system-NetBSD-6.1.4 6.1.4
-.
-.ds doc-operating-system-OpenBSD-2.0  2.0
-.ds doc-operating-system-OpenBSD-2.1  2.1
-.ds doc-operating-system-OpenBSD-2.2  2.2
-.ds doc-operating-system-OpenBSD-2.3  2.3
-.ds doc-operating-system-OpenBSD-2.4  2.4
-.ds doc-operating-system-OpenBSD-2.5  2.5
-.ds doc-operating-system-OpenBSD-2.6  2.6
-.ds doc-operating-system-OpenBSD-2.7  2.7
-.ds doc-operating-system-OpenBSD-2.8  2.8
-.ds doc-operating-system-OpenBSD-2.9  2.9
-.ds doc-operating-system-OpenBSD-3.0  3.0
-.ds doc-operating-system-OpenBSD-3.1  3.1
-.ds doc-operating-system-OpenBSD-3.2  3.2
-.ds doc-operating-system-OpenBSD-3.3  3.3
-.ds doc-operating-system-OpenBSD-3.4  3.4
-.ds doc-operating-system-OpenBSD-3.5  3.5
-.ds doc-operating-system-OpenBSD-3.6  3.6
-.ds doc-operating-system-OpenBSD-3.7  3.7
-.ds doc-operating-system-OpenBSD-3.8  3.8
-.ds doc-operating-system-OpenBSD-3.9  3.9
-.ds doc-operating-system-OpenBSD-4.0  4.0
-.ds doc-operating-system-OpenBSD-4.1  4.1
-.ds doc-operating-system-OpenBSD-4.2  4.2
-.ds doc-operating-system-OpenBSD-4.3  4.3
-.ds doc-operating-system-OpenBSD-4.4  4.4
-.ds doc-operating-system-OpenBSD-4.5  4.5
-.ds doc-operating-system-OpenBSD-4.6  4.6
-.ds doc-operating-system-OpenBSD-4.7  4.7
-.ds doc-operating-system-OpenBSD-4.8  4.8
-.ds doc-operating-system-OpenBSD-4.9  4.9
-.ds doc-operating-system-OpenBSD-5.0  5.0
-.ds doc-operating-system-OpenBSD-5.1  5.1
-.ds doc-operating-system-OpenBSD-5.2  5.2
-.ds doc-operating-system-OpenBSD-5.3  5.3
-.ds doc-operating-system-OpenBSD-5.4  5.4
-.ds doc-operating-system-OpenBSD-5.5  5.5
-.ds doc-operating-system-OpenBSD-5.6  5.6
-.
-.ds doc-operating-system-FreeBSD-1.0     1.0
-.ds doc-operating-system-FreeBSD-1.1     1.1
-.ds doc-operating-system-FreeBSD-1.1.5   1.1.5
-.ds doc-operating-system-FreeBSD-1.1.5.1 1.1.5.1
-.ds doc-operating-system-FreeBSD-2.0     2.0
-.ds doc-operating-system-FreeBSD-2.0.5   2.0.5
-.ds doc-operating-system-FreeBSD-2.1     2.1
-.ds doc-operating-system-FreeBSD-2.1.5   2.1.5
-.ds doc-operating-system-FreeBSD-2.1.6   2.1.6
-.ds doc-operating-system-FreeBSD-2.1.7   2.1.7
-.ds doc-operating-system-FreeBSD-2.2     2.2
-.ds doc-operating-system-FreeBSD-2.2.1   2.2.1
-.ds doc-operating-system-FreeBSD-2.2.2   2.2.2
-.ds doc-operating-system-FreeBSD-2.2.5   2.2.5
-.ds doc-operating-system-FreeBSD-2.2.6   2.2.6
-.ds doc-operating-system-FreeBSD-2.2.7   2.2.7
-.ds doc-operating-system-FreeBSD-2.2.8   2.2.8
-.ds doc-operating-system-FreeBSD-2.2.9   2.2.9
-.ds doc-operating-system-FreeBSD-3.0     3.0
-.ds doc-operating-system-FreeBSD-3.1     3.1
-.ds doc-operating-system-FreeBSD-3.2     3.2
-.ds doc-operating-system-FreeBSD-3.3     3.3
-.ds doc-operating-system-FreeBSD-3.4     3.4
-.ds doc-operating-system-FreeBSD-3.5     3.5
-.ds doc-operating-system-FreeBSD-4.0     4.0
-.ds doc-operating-system-FreeBSD-4.1     4.1
-.ds doc-operating-system-FreeBSD-4.1.1   4.1.1
-.ds doc-operating-system-FreeBSD-4.2     4.2
-.ds doc-operating-system-FreeBSD-4.3     4.3
-.ds doc-operating-system-FreeBSD-4.4     4.4
-.ds doc-operating-system-FreeBSD-4.5     4.5
-.ds doc-operating-system-FreeBSD-4.6     4.6
-.ds doc-operating-system-FreeBSD-4.6.2   4.6.2
-.ds doc-operating-system-FreeBSD-4.7     4.7
-.ds doc-operating-system-FreeBSD-4.8     4.8
-.ds doc-operating-system-FreeBSD-4.9     4.9
-.ds doc-operating-system-FreeBSD-4.10    4.10
-.ds doc-operating-system-FreeBSD-4.11    4.11
-.ds doc-operating-system-FreeBSD-5.0     5.0
-.ds doc-operating-system-FreeBSD-5.1     5.1
-.ds doc-operating-system-FreeBSD-5.2     5.2
-.ds doc-operating-system-FreeBSD-5.2.1   5.2.1
-.ds doc-operating-system-FreeBSD-5.3     5.3
-.ds doc-operating-system-FreeBSD-5.4     5.4
-.ds doc-operating-system-FreeBSD-5.5     5.5
-.ds doc-operating-system-FreeBSD-6.0     6.0
-.ds doc-operating-system-FreeBSD-6.1     6.1
-.ds doc-operating-system-FreeBSD-6.2     6.2
-.ds doc-operating-system-FreeBSD-6.3     6.3
-.ds doc-operating-system-FreeBSD-6.4     6.4
-.ds doc-operating-system-FreeBSD-7.0     7.0
-.ds doc-operating-system-FreeBSD-7.1     7.1
-.ds doc-operating-system-FreeBSD-7.2     7.2
-.ds doc-operating-system-FreeBSD-7.3     7.3
-.ds doc-operating-system-FreeBSD-7.4     7.4
-.ds doc-operating-system-FreeBSD-8.0     8.0
-.ds doc-operating-system-FreeBSD-8.1     8.1
-.ds doc-operating-system-FreeBSD-8.2     8.2
-.ds doc-operating-system-FreeBSD-8.3     8.3
-.ds doc-operating-system-FreeBSD-8.4     8.4
-.ds doc-operating-system-FreeBSD-9.0     9.0
-.ds doc-operating-system-FreeBSD-9.1     9.1
-.ds doc-operating-system-FreeBSD-9.2     9.2
-.ds doc-operating-system-FreeBSD-9.3     9.3
-.ds doc-operating-system-FreeBSD-10.0    10.0
-.
-.ds doc-operating-system-Darwin-8.0.0  8.0.0
-.ds doc-operating-system-Darwin-8.1.0  8.1.0
-.ds doc-operating-system-Darwin-8.2.0  8.2.0
-.ds doc-operating-system-Darwin-8.3.0  8.3.0
-.ds doc-operating-system-Darwin-8.4.0  8.4.0
-.ds doc-operating-system-Darwin-8.5.0  8.5.0
-.ds doc-operating-system-Darwin-8.6.0  8.6.0
-.ds doc-operating-system-Darwin-8.7.0  8.7.0
-.ds doc-operating-system-Darwin-8.8.0  8.8.0
-.ds doc-operating-system-Darwin-8.9.0  8.9.0
-.ds doc-operating-system-Darwin-8.10.0 8.10.0
-.ds doc-operating-system-Darwin-8.11.0 8.11.0
-.ds doc-operating-system-Darwin-9.0.0  9.0.0
-.ds doc-operating-system-Darwin-9.1.0  9.1.0
-.ds doc-operating-system-Darwin-9.2.0  9.2.0
-.ds doc-operating-system-Darwin-9.3.0  9.3.0
-.ds doc-operating-system-Darwin-9.4.0  9.4.0
-.ds doc-operating-system-Darwin-9.5.0  9.5.0
-.ds doc-operating-system-Darwin-9.6.0  9.6.0
-.ds doc-operating-system-Darwin-9.7.0  9.7.0
-.ds doc-operating-system-Darwin-9.8.0  9.8.0
-.ds doc-operating-system-Darwin-10.0.0 10.0.0
-.ds doc-operating-system-Darwin-10.1.0 10.1.0
-.ds doc-operating-system-Darwin-10.2.0 10.2.0
-.ds doc-operating-system-Darwin-10.3.0 10.3.0
-.ds doc-operating-system-Darwin-10.4.0 10.4.0
-.ds doc-operating-system-Darwin-10.5.0 10.5.0
-.ds doc-operating-system-Darwin-10.6.0 10.6.0
-.ds doc-operating-system-Darwin-10.7.0 10.7.0
-.ds doc-operating-system-Darwin-10.8.0 10.8.0
-.ds doc-operating-system-Darwin-11.0.0 11.0.0
-.ds doc-operating-system-Darwin-11.1.0 11.1.0
-.ds doc-operating-system-Darwin-11.2.0 11.2.0
-.ds doc-operating-system-Darwin-11.3.0 11.3.0
-.ds doc-operating-system-Darwin-11.4.0 11.4.0
-.ds doc-operating-system-Darwin-11.5.0 11.5.0
-.ds doc-operating-system-Darwin-12.0.0 12.0.0
-.ds doc-operating-system-Darwin-12.1.0 12.1.0
-.ds doc-operating-system-Darwin-12.2.0 12.2.0
-.ds doc-operating-system-Darwin-13.0.0 13.0.0
-.ds doc-operating-system-Darwin-13.1.0 13.1.0
-.ds doc-operating-system-Darwin-13.2.0 13.2.0
-.ds doc-operating-system-Darwin-13.3.0 13.3.0
-.ds doc-operating-system-Darwin-13.4.0 13.4.0
-.ds doc-operating-system-Darwin-14.0.0 14.0.0
-.
-.ds doc-operating-system-DragonFly-1.0    1.0
-.ds doc-operating-system-DragonFly-1.1    1.1
-.ds doc-operating-system-DragonFly-1.2    1.2
-.ds doc-operating-system-DragonFly-1.3    1.3
-.ds doc-operating-system-DragonFly-1.4    1.4
-.ds doc-operating-system-DragonFly-1.5    1.5
-.ds doc-operating-system-DragonFly-1.6    1.6
-.ds doc-operating-system-DragonFly-1.7    1.7
-.ds doc-operating-system-DragonFly-1.8    1.8
-.ds doc-operating-system-DragonFly-1.8.1  1.8.1
-.ds doc-operating-system-DragonFly-1.9    1.9
-.ds doc-operating-system-DragonFly-1.10   1.10
-.ds doc-operating-system-DragonFly-1.11   1.11
-.ds doc-operating-system-DragonFly-1.12   1.12
-.ds doc-operating-system-DragonFly-1.12.2 1.12.2
-.ds doc-operating-system-DragonFly-1.13   1.13
-.ds doc-operating-system-DragonFly-2.0    2.0
-.ds doc-operating-system-DragonFly-2.1    2.1
-.ds doc-operating-system-DragonFly-2.2    2.2
-.ds doc-operating-system-DragonFly-2.3    2.3
-.ds doc-operating-system-DragonFly-2.4    2.4
-.ds doc-operating-system-DragonFly-2.5    2.5
-.ds doc-operating-system-DragonFly-2.6    2.6
-.ds doc-operating-system-DragonFly-2.7    2.7
-.ds doc-operating-system-DragonFly-2.8    2.8
-.ds doc-operating-system-DragonFly-2.9    2.9
-.ds doc-operating-system-DragonFly-2.9.1  2.9.1
-.ds doc-operating-system-DragonFly-2.10   2.10
-.ds doc-operating-system-DragonFly-2.10.1 2.10.1
-.ds doc-operating-system-DragonFly-2.11   2.11
-.ds doc-operating-system-DragonFly-2.12   2.12
-.ds doc-operating-system-DragonFly-2.13   2.13
-.ds doc-operating-system-DragonFly-3.0    3.0
-.ds doc-operating-system-DragonFly-3.1    3.1
-.ds doc-operating-system-DragonFly-3.2    3.2
-.ds doc-operating-system-DragonFly-3.3    3.3
-.ds doc-operating-system-DragonFly-3.4    3.4
-.ds doc-operating-system-DragonFly-3.5    3.5
-.ds doc-operating-system-DragonFly-3.6    3.6
-.ds doc-operating-system-DragonFly-3.7    3.7
-.ds doc-operating-system-DragonFly-3.8    3.8
-.
-.de Os
-.  ds doc-command-name
-.
-.  ie "\$1"" \
-.    ds doc-operating-system "\*[doc-default-operating-system]
-.  el \{ .ie "\$1"ATT" \{\
-.    ds doc-operating-system AT&T
-.    if \A\a\$2\a \{\
-.      ie d doc-operating-system-ATT-\$2 \
-.        as doc-operating-system " \*[doc-operating-system-ATT-\$2]
-.      el \
-.        as doc-operating-system " UNIX
-.  \}\}
-.  el \{ .ie "\$1"BSD" \{\
-.    if \A\a\$2\a \{\
-.      ie d doc-operating-system-BSD-\$2 \
-.        ds doc-operating-system "\*[doc-operating-system-BSD-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown BSD version `\$2' (#\n[.c])
-.  \}\}
-.  el \{ .ie "\$1"FreeBSD" \{\
-.    ds doc-operating-system FreeBSD
-.    if \A\a\$2\a \{\
-.      ie d doc-operating-system-FreeBSD-\$2 \
-.        as doc-operating-system \~\*[doc-operating-system-FreeBSD-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown FreeBSD version `\$2' (#\n[.c])
-.  \}\}
-.  el \{ .ie "\$1"DragonFly" \{\
-.    ds doc-operating-system DragonFly
-.    if \A\a\$2\a \{\
-.      ie d doc-operating-system-DragonFly-\$2 \
-.        as doc-operating-system \~\*[doc-operating-system-DragonFly-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown DragonFly version `\$2' (#\n[.c])
-.  \}\}
-.  el \{ .ie "\$1"NetBSD" \{\
-.    ds doc-operating-system NetBSD
-.    if \A\a\$2\a \{\
-.      ie d doc-operating-system-NetBSD-\$2 \
-.        as doc-operating-system \~\*[doc-operating-system-NetBSD-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown NetBSD version `\$2' (#\n[.c])
-.  \}\}
-.  el \{ .ie "\$1"OpenBSD" \{\
-.    ds doc-operating-system OpenBSD
-.    if \A\a\$2\a \{\
-.      ie d doc-operating-system-OpenBSD-\$2 \
-.        as doc-operating-system \~\*[doc-operating-system-OpenBSD-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown OpenBSD version `\$2' (#\n[.c])
-.  \}\}
-.  el \{ .ie "\$1"Darwin" \{\
-.    ds doc-operating-system Darwin
-.    if \A\a\$2\a \{\
-.      ie d doc-operating-system-Darwin-\$2 \
-.        as doc-operating-system \~\*[doc-operating-system-Darwin-\$2]
-.      el \
-.        tm mdoc warning: .Os: Unknown Darwin version `\$2' (#\n[.c])
-.  \}\}
-.  el \{\
-.    ds doc-operating-system \$1
-.    if !"\$2"" \
-.      as doc-operating-system " \$2
-.  \}\}\}\}\}\}\}\}
-..
-.
-.
-.\" NS doc-date-string global string
-.\" NS   the manual page date as set by `Dd'
-.
-.ds doc-date-string
-.
-.
-.\" NS Dd user macro (not parsed, not callable)
-.\" NS   set document date
-.\" NS
-.\" NS modifies:
-.\" NS   doc-date-string
-.\" NS   doc-command-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-date-XXX
-.\" NS
-.\" NS width register `Dd' set above
-.
-.ds doc-date-1  January
-.ds doc-date-2  February
-.ds doc-date-3  March
-.ds doc-date-4  April
-.ds doc-date-5  May
-.ds doc-date-6  June
-.ds doc-date-7  July
-.ds doc-date-8  August
-.ds doc-date-9  September
-.ds doc-date-10 October
-.ds doc-date-11 November
-.ds doc-date-12 December
-.
-.de Dd
-.  ds doc-command-name
-.
-.  ie \n[.$] \{\
-.    ie "\$1"$Mdocdate:" \
-.      ds doc-date-string \$2\~\$3, \$4
-.    el .ie (\n[.$] == 3) \
-.      ds doc-date-string \$1\~\$2 \$3
-.    el \{\
-.      ds doc-date-string "\*[doc-date-\n[mo]]
-.      as doc-date-string \~\n[dy], \n[year]
-.    \}
-.  \}
-.  el \
-.    ds doc-date-string Epoch
-..
-.
-.
-.\" NS doc-hyphen-flags global register
-.\" NS   the parameter for the `.hy' request
-.\" NS
-.\" NS override this in `mdoc.local', if necessary.
-.
-.nr doc-hyphen-flags 12
-.
-.
-.\" NS doc-header macro
-.\" NS   print page header
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dh
-.\" NS   doc-reg-dh1
-.
-.de doc-header
-.  ev doc-env-dh
-.  doc-setup-page-layout
-.  if !\n[cR] \
-.    sp \n[doc-header-space]u
-.  nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\f[]'
-.  nr doc-reg-dh1 \w'\*[doc-caption-font2]\*[doc-volume]\f[]'
-.  if (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
-.    while (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
-.      substring doc-header-string 0 -2
-.      nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\|.\|.\|.\f[]'
-.    \}
-.    as doc-header-string "\|.\|.\|.
-.  \}
-.  tl \a\*[doc-caption-font]\*[doc-header-string]\f[]\a\*[doc-caption-font2]\*[doc-volume]\f[]\a\*[doc-caption-font]\*[doc-header-string]\f[]\a
-.  ie !\n[cR] \
-.    sp \n[doc-header-space]u
-.  el \
-.    sp 1v
-.  ev
-.  ns
-..
-.
-.
-.\" NS doc-footer macro
-.\" NS   print page footer
-.
-.de doc-footer
-.  ie \n[cR] \
-.    br
-.  el \{\
-.    ev doc-caption-enviroment
-.    doc-setup-page-layout
-.    sp \n[doc-footer-space]u
-.    ie \n[D] \{\
-.      ie o \
-.        tl \a%\a\*[doc-caption-font2]\*[doc-date-string]\f[]\a\*[doc-caption-font]\*[doc-operating-system]\f[]\a
-.      el \
-.        tl \a\*[doc-caption-font]\*[doc-operating-system]\f[]\a\*[doc-caption-font2]\*[doc-date-string]\f[]\a%\a
-.    \}
-.    el \
-.      tl \a\*[doc-caption-font]\*[doc-operating-system]\f[]\a\*[doc-caption-font2]\*[doc-date-string]\f[]\a%\a
-.    bp
-.    ev
-.  \}
-..
-.
-.
-.\" NS doc-check-depth macro
-.\" NS   check paired macros
-.
-.de doc-check-depth
-.  if \n[doc-list-depth] \{\
-.    tm mdoc warning: A .Bl directive has no matching .El (#\n[.c])
-.    nr doc-list-depth 0
-.  \}
-.  if \n[doc-display-depth] \{\
-.    tm mdoc warning: A .Bd directive has no matching .Ed (#\n[.c])
-.    nr doc-display-depth 0
-.  \}
-.  if \n[doc-fontmode-depth] \{\
-.    tm mdoc warning: A .Bf directive has no matching .Ef (#\n[.c])
-.    nr doc-fontmode-depth 0
-.  \}
-..
-.
-.
-.\" NS doc-end-macro macro
-.\" NS   finish output
-.
-.de doc-end-macro
-.  \" We may still have a partial line in the environment.  If this is the
-.  \" case, and we happen to be on the last line of the page, the `.fl'
-.  \" request will cause the page to be ejected and troff will immediately
-.  \" exit.  If we are in nroff mode, this would be unfortunate, since we
-.  \" would never get a chance to output the footer.  So we fudge the page
-.  \" length to make sure that the last page is never ejected until we want
-.  \" it to be.
-.
-.  if \n[cR] \
-.    pl +3v
-.  fl
-.
-.  doc-check-depth
-.
-.  if \n[cR] \{\
-.    sp
-.    tl \a\*[doc-caption-font]\*[doc-operating-system]\f[]\a\*[doc-caption-font2]\*[doc-date-string]\f[]\a\*[doc-caption-font]\*[doc-operating-system]\f[]\a
-.    \" suppress empty lines after the footer
-.    pl \n[nl]u
-.  \}
-..
-.
-.
-.\" NS doc-paragraph macro
-.\" NS   insert a paragraph
-.
-.de doc-paragraph
-.  sp \n[doc-paragraph-space]u
-.  if !\n[cR] \
-.    ne 2
-.  ns
-..
-.
-.
-.\" NS Pp user macro (not parsed, not callable)
-.\" NS   new paragraph
-.\" NS
-.\" NS width register `Pp' set above
-.
-.als Pp doc-paragraph
-.
-.
-.\" NS Lp user macro (not parsed, not callable)
-.\" NS   same as .Pp
-.\" NS
-.\" NS width register `Lp' set above
-.
-.als Lp doc-paragraph
-.
-.
-.de LP
-.  tm Not a \-mdoc command: .LP (#\n[.c])
-..
-.
-.
-.de PP
-.  tm Not a \-mdoc command: .PP (#\n[.c])
-..
-.
-.
-.de pp
-.  tm Not a \-mdoc command: .pp (#\n[.c])
-..
-.
-.
-.de SH
-.  tm Not a \-mdoc command: .SH (#\n[.c])
-..
-.
-.
-.\" NS Nd user macro (not parsed, not callable)
-.\" NS   print name description
-.\" NS
-.\" NS width register `Nd' set above
-.
-.de Nd
-.  nop \[em] \$*
-..
-.
-.
-.\" NS doc-in-synopsis-section global register (bool)
-.\" NS   whether we are in the `synopsis' section
-.
-.nr doc-in-synopsis-section 0
-.
-.
-.\" NS doc-in-library-section global register (bool)
-.\" NS   whether we are in the `library' section
-.
-.nr doc-in-library-section 0
-.
-.
-.\" NS doc-in-see-also-section global register (bool)
-.\" NS   whether we are in the `see also' section
-.
-.nr doc-in-see-also-section 0
-.
-.
-.\" NS doc-in-files-section global register (bool)
-.\" NS   whether we are in the `files' section
-.
-.nr doc-in-files-section 0
-.
-.
-.\" NS doc-in-authors-section global register (bool)
-.\" NS   whether we are in the `authors' section
-.
-.nr doc-in-authors-section 0
-.
-.
-.\" NS doc-first-parameter macro
-.\" NS   return first parameter
-.\" NS
-.\" NS local variables:
-.\" NS   doc-str-dfp
-.
-.de doc-first-parameter
-.  ds doc-str-dfp "\$1
-..
-.
-.
-.\" NS Sh user macro (not callable)
-.\" NS   section headers
-.\" NS
-.\" NS modifies:
-.\" NS   doc-func-args-processed
-.\" NS   doc-func-count
-.\" NS   doc-in-authors-section
-.\" NS   doc-in-files-section
-.\" NS   doc-in-library-section
-.\" NS   doc-in-see-also-section
-.\" NS   doc-in-synopsis-section
-.\" NS   doc-indent-synopsis
-.\" NS   doc-indent-synopsis-active
-.\" NS   doc-is-func
-.\" NS   doc-num-func-args
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Sh
-.\" NS   doc-reg-Sh1
-.\" NS   doc-section-XXX
-.\" NS
-.\" NS width register `Sh' set in doc-common
-.
-.ds doc-section-name        NAME
-.ds doc-section-synopsis    SYNOPSIS
-.ds doc-section-library     LIBRARY
-.ds doc-section-description DESCRIPTION
-.ds doc-section-see-also    SEE
-.ds doc-section-files       FILES
-.ds doc-section-authors     AUTHORS
-.
-.de Sh
-.  ie \n[doc-arg-limit] \{\
-.    \" we only allow `Sh' within `Sh'; it will change the font back to
-.    \" `doc-Sh-font'
-.    ie "\*[doc-macro-name]"Sh" \{\
-.      nr doc-arg-ptr +1
-.      ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.        nr doc-curr-font \n[.f]
-.        nr doc-curr-size \n[.ps]
-.        nop \*[doc-Sh-font]\c
-.        doc-print-recursive
-.      \}
-.      el \{\
-.        tm Usage: .Sh section_name ... (#\n[.c])
-.        doc-reset-args
-.    \}\}
-.    el \{\
-.      tm Usage: .Sh not callable by other macros (#\n[.c])
-.      doc-reset-args
-.  \}\}
-.  el \{\
-.    if !\n[.$] \{\
-.      tm Usage: .Sh section_name ... (#\n[.c])
-.      return
-.    \}
-.
-.    ds doc-macro-name Sh
-.    doc-parse-args \$@
-.
-.    if t \
-.      ad
-.
-.    \" this resolves e.g. `.Sh "SEE ALSO"'
-.    doc-first-parameter \$*
-.
-.    ie "\*[doc-str-dfp]"\*[doc-section-name]" \{\
-.      doc-setup-header
-.      in 0
-.    \}
-.    el \{\
-.      nr doc-in-synopsis-section 0
-.      nr doc-in-library-section 0
-.      nr doc-in-see-also-section 0
-.      nr doc-in-files-section 0
-.      nr doc-in-authors-section 0
-.
-.      ie        "\*[doc-str-dfp]"\*[doc-section-synopsis]" \{\
-.        if t \
-.          na
-.        nr doc-in-synopsis-section 1
-.        nr doc-indent-synopsis 0
-.        nr doc-indent-synopsis-active 0
-.      \}
-.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-library]" \{\
-.        nr doc-in-library-section 1
-.      \}
-.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-description]" \{\
-.        nr doc-is-func 0
-.        nr doc-func-count 0
-.        nr doc-func-args-processed 0
-.        nr doc-num-func-args 0
-.      \}
-.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-see-also]" \{\
-.        if t \
-.          na
-.        nr doc-in-see-also-section 1
-.      \}
-.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-files]" \
-.        nr doc-in-files-section 1
-.      el .if    "\*[doc-str-dfp]"\*[doc-section-authors]" \
-.        nr doc-in-authors-section 1
-.      \}\}\}\}
-.
-.      in 0
-.      nr doc-have-author 0
-.    \}
-.
-.    doc-setup-page-layout
-.    sp
-.    ns
-.    ta T .5i
-.    if !\n[cR] \
-.      ne 3
-.    fi
-.
-.    if t \{\
-.      nr doc-reg-Sh \n[.ss]
-.      nr doc-reg-Sh1 \n[.sss]
-.      ss (\n[.ss] * 5 / 3) (\n[.sss] * 5 / 3)
-.    \}
-.
-.    nr doc-arg-ptr +1
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    nop \*[doc-Sh-font]\c
-.    doc-print-recursive
-.
-.    if t \
-.      ss \n[doc-reg-Sh] \n[doc-reg-Sh1]
-.
-.    in +\n[doc-subheader-indent]u
-.    ns
-.
-.    doc-check-depth
-.  \}
-..
-.
-.
-.\" NS Ss user macro (not callable)
-.\" NS   subsection
-.\" NS
-.\" NS local variable:
-.\" NS   doc-reg-Ss
-.\" NS   doc-reg-Ss1
-.\" NS
-.\" NS width register `Ss' set above
-.
-.de Ss
-.  ie \n[doc-arg-limit] \{\
-.    \" we only allow `Ss' within `Ss'; it will change the font back to
-.    \" `doc-Sh-font'
-.    ie "\*[doc-macro-name]"Ss" \{\
-.      nr doc-arg-ptr +1
-.      ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.        nr doc-curr-font \n[.f]
-.        nr doc-curr-size \n[.ps]
-.        nop \*[doc-Sh-font]\c
-.        doc-print-recursive
-.      \}
-.      el \{\
-.        tm Usage: .Ss subsection_name ... (#\n[.c])
-.        doc-reset-args
-.    \}\}
-.    el \{\
-.      tm Usage: .Ss not callable by other macros (#\n[.c])
-.      doc-reset-args
-.  \}\}
-.  el \{\
-.    if !\n[.$] \{\
-.      tm Usage: .Ss subsection_name ... (#\n[.c])
-.      return
-.    \}
-.
-.    ds doc-macro-name Ss
-.    doc-parse-args \$@
-.
-.    sp
-.    if !\n[cR] \
-.      ne 3
-.    ti -.25i
-.
-.    nr doc-reg-Ss \n[.ss]
-.    nr doc-reg-Ss1 \n[.sss]
-.    ss (\n[.ss] * 5 / 4) (\n[.sss] * 5 / 4)
-.
-.    nr doc-arg-ptr +1
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    nop \*[doc-Sh-font]\c
-.    doc-print-recursive
-.
-.    ss \n[doc-reg-Ss] \n[doc-reg-Ss1]
-.
-.    ta T .5i
-.    if !\n[cR] \
-.      ne 2
-.    br
-.    ns
-.
-.    doc-check-depth
-.  \}
-..
-.
-.
-.\" NS Rd macro (not parsed, not callable)
-.\" NS   print global register dump to stderr
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Rd
-.
-.de Rd
-.  tm MDOC GLOBAL REGISTER DUMP
-.  tm doc-macro-name == `\*[doc-macro-name]'
-.  tm doc-arg-limit == \n[doc-arg-limit]
-.  tm doc-num-args == \n[doc-num-args]
-.  tm doc-arg-ptr == \n[doc-arg-ptr]
-.
-.  nr doc-reg-Rd 1
-.  while (\n[doc-reg-Rd] <= \n[doc-arg-limit]) \{\
-.    tm doc-arg\n[doc-reg-Rd] == `\*[doc-arg\n[doc-reg-Rd]]'
-.    tm doc-type\n[doc-reg-Rd] == \n[doc-type\n[doc-reg-Rd]]
-.    tm doc-space\n[doc-reg-Rd] == `\*[doc-space\n[doc-reg-Rd]]'
-.    nr doc-reg-Rd +1
-.  \}
-.
-.  tm doc-curr-font == \n[doc-curr-font]
-.  tm doc-curr-size == \n[doc-curr-size]
-.  tm doc-indent-synopsis == \n[doc-indent-synopsis]
-.  tm doc-indent-synopsis-active == \n[doc-indent-synopsis-active]
-.  tm doc-have-decl == \n[doc-have-decl]
-.  tm doc-have-var == \n[doc-have-var]
-.  tm doc-command-name == `\*[doc-command-name]'
-.  tm doc-quote-left == `\*[doc-quote-left]'
-.  tm doc-quote-right == `\*[doc-quote-right]'
-.  tm doc-nesting-level == \n[doc-nesting-level]
-.  tm doc-in-list == \n[doc-in-list]
-.  tm doc-space == `\*[doc-space]'
-.  tm doc-saved-space == `\*[doc-saved-space]'
-.  tm doc-space-mode == \n[doc-space-mode]
-.  tm doc-have-space == \n[doc-have-space]
-.  tm doc-have-slot == \n[doc-have-slot]
-.  tm doc-keep-type == \n[doc-keep-type]
-.  tm doc-display-depth == \n[doc-display-depth]
-.  tm doc-is-compact == \n[doc-is-compact]
-.
-.  nr doc-reg-Rd 0
-.  while (\n[doc-reg-Rd] <= \n[doc-display-depth]) \{\
-.    tm doc-display-type-stack\n[doc-reg-Rd] == `\*[doc-display-type-stack\n[doc-reg-Rd]]'
-.    tm doc-display-indent-stack\n[doc-reg-Rd] == \n[doc-display-indent-stack\n[doc-reg-Rd]]
-.    tm doc-display-ad-stack\n[doc-reg-Rd] == \n[doc-display-ad-stack\n[doc-reg-Rd]]
-.    tm doc-display-fi-stack\n[doc-reg-Rd] == \n[doc-display-fi-stack\n[doc-reg-Rd]]
-.    tm doc-display-ft-stack\n[doc-reg-Rd] == \n[doc-display-ft-stack\n[doc-reg-Rd]]
-.    tm doc-display-ps-stack\n[doc-reg-Rd] == \n[doc-display-ps-stack\n[doc-reg-Rd]]
-.    nr doc-reg-Rd +1
-.  \}
-.
-.  tm doc-fontmode-depth == \n[doc-fontmode-depth]
-.
-.  nr doc-reg-Rd 1
-.  while (\n[doc-reg-Rd] <= \n[doc-fontmode-depth]) \{\
-.    tm doc-fontmode-font-stack\n[doc-reg-Rd] == `\n[doc-fontmode-font-stack\n[doc-reg-Rd]]'
-.    tm doc-fontmode-size-stack\n[doc-reg-Rd] == `\n[doc-fontmode-size-stack\n[doc-reg-Rd]]'
-.    nr doc-reg-Rd +1
-.  \}
-.
-.  tm doc-list-depth == \n[doc-list-depth]
-.
-.  nr doc-reg-Rd 1
-.  while (\n[doc-reg-Rd] <= \n[doc-list-depth]) \{\
-.    tm doc-list-type-stack\n[doc-reg-Rd] == `\*[doc-list-type-stack\n[doc-reg-Rd]]'
-.    tm doc-list-have-indent-stack\n[doc-reg-Rd] == \n[doc-list-have-indent-stack\n[doc-reg-Rd]]
-.    tm doc-list-indent-stack\n[doc-reg-Rd] == \n[doc-list-indent-stack\n[doc-reg-Rd]]
-.    tm doc-compact-list-stack\n[doc-reg-Rd] == \n[doc-compact-list-stack\n[doc-reg-Rd]]
-.    tm doc-tag-prefix-stack\n[doc-reg-Rd] == `\*[doc-tag-prefix-stack\n[doc-reg-Rd]]'
-.    tm doc-tag-width-stack\n[doc-reg-Rd] == `\*[doc-tag-width-stack\n[doc-reg-Rd]]'
-.    tm doc-list-offset-stack\n[doc-reg-Rd] == \n[doc-list-offset-stack\n[doc-reg-Rd]]
-.    tm doc-enum-list-count-stack\n[doc-reg-Rd] == \n[doc-enum-list-count-stack\n[doc-reg-Rd]]
-.    nr doc-reg-Rd +1
-.  \}
-.
-.  tm doc-saved-Pa-font == `\*[doc-saved-Pa-font]'
-.  tm doc-curr-type == \n[doc-curr-type]
-.  tm doc-curr-arg == `\*[doc-curr-arg]'
-.  tm doc-diag-list-input-line-count == \n[doc-diag-list-input-line-count]
-.  tm doc-num-columns == \n[doc-num-columns]
-.  tm doc-column-indent-width == \n[doc-column-indent-width]
-.  tm doc-is-func == \n[doc-is-func]
-.  tm doc-have-old-func == \n[doc-have-old-func]
-.  tm doc-func-arg-count == \n[doc-func-arg-count]
-.  tm doc-func-arg == `\*[doc-func-arg]'
-.  tm doc-num-func-args == \n[doc-num-func-args]
-.  tm doc-func-args-processed == \n[doc-func-args-processed]
-.  tm doc-have-func == \n[doc-have-func]
-.  tm doc-is-reference == \n[doc-is-reference]
-.  tm doc-reference-count == \n[doc-reference-count]
-.  tm doc-author-count == \n[doc-author-count]
-.
-.  nr doc-reg-Rd 0
-.  while (\n[doc-reg-Rd] <= \n[doc-author-count]) \{\
-.    tm doc-author-name\n[doc-reg-Rd] == `\*[doc-author-name\n[doc-reg-Rd]]'
-.    nr doc-reg-Rd +1
-.  \}
-.
-.  tm doc-book-count == \n[doc-book-count]
-.  tm doc-book-name == `\*[doc-book-name]'
-.  tm doc-date-count == \n[doc-date-count]
-.  tm doc-date == `\*[doc-date]'
-.  tm doc-publisher-count == \n[doc-publisher-count]
-.  tm doc-publisher-name == `\*[doc-publisher-name]'
-.  tm doc-journal-count == \n[doc-journal-count]
-.  tm doc-journal-name == `\*[doc-journal-name]'
-.  tm doc-issue-count == \n[doc-issue-count]
-.  tm doc-issue-name == `\*[doc-issue-name]'
-.  tm doc-optional-count == \n[doc-optional-count]
-.  tm doc-optional-string == `\*[doc-optional-string]'
-.  tm doc-page-number-count == \n[doc-page-number-count]
-.  tm doc-page-number-string == `\*[doc-page-number-string]'
-.  tm doc-corporate-count == \n[doc-corporate-count]
-.  tm doc-corporate-name == `\*[doc-corporate-name]'
-.  tm doc-report-count == \n[doc-report-count]
-.  tm doc-report-name == `\*[doc-report-name]'
-.  tm doc-reference-title-count == \n[doc-reference-title-count]
-.  tm doc-reference-title-name == `\*[doc-reference-title-name]'
-.  tm doc-reference-title-name-for-book == `\*[doc-reference-title-name-for-book]'
-.  tm doc-url-count == \n[doc-url-count]
-.  tm doc-url-name == `\*[doc-url-name]'
-.  tm doc-volume-count == \n[doc-volume-count]
-.  tm doc-volume-name == `\*[doc-volume-name]'
-.  tm doc-have-author == \n[doc-have-author]
-.
-.  tm doc-document-title == `\*[doc-document-title]'
-.  tm doc-volume == `\*[doc-volume]'
-.  tm doc-section == `\*[doc-section]'
-.  tm doc-operating-system == `\*[doc-operating-system]'
-.  tm doc-date-string == `\*[doc-date-string]'
-.  tm doc-header-space == \n[doc-header-space]
-.  tm doc-footer-space == \n[doc-footer-space]
-.  tm doc-display-vertical == \n[doc-display-vertical]
-.  tm doc-header-string == `\*[doc-header-string]'
-.  tm doc-in-synopsis-section == \n[doc-in-synopsis-section]
-.  tm doc-in-library-section == \n[doc-in-library-section]
-.  tm doc-in-see-also-section == \n[doc-in-see-also-section]
-.  tm doc-in-files-section == \n[doc-in-files-section]
-.  tm doc-in-authors-section == \n[doc-in-authors-section]
-.
-.  tm END OF GLOBAL REGISTER DUMP
-..
-.
-.
-.ec
-.
-.\" EOF
diff --git a/tmac/doc-common-u b/tmac/doc-common-u
new file mode 100644 (file)
index 0000000..0d2e418
--- /dev/null
@@ -0,0 +1,1384 @@
+.\" Copyright (c) 1991, 1993
+.\"   The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in
+.\"    the documentation and/or other materials provided with the
+.\"    distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its
+.\"    contributors may be used to endorse or promote products derived
+.\"    from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS"
+.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+.\" PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
+.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc-common 8.1 (Berkeley) 06/08/93
+.\"
+.\"     %beginstrip%
+.
+.
+.\" Macro Identifiers.  For each user macro a corresponding register
+.\" with the same name must exist.  Its value must not be zero.
+.
+.nr %A 1
+.nr %B 1
+.nr %C 1
+.nr %D 1
+.nr %I 1
+.nr %J 1
+.nr %N 1
+.nr %O 1
+.nr %P 1
+.nr %Q 1
+.nr %R 1
+.nr %T 1
+.nr %U 1
+.nr %V 1
+.nr Ac 3
+.nr Ad 12n
+.nr An 12n
+.nr Ao 12n
+.nr Ap 2
+.nr Aq 12n
+.nr Ar 12n
+.nr At 1
+.nr Bc 3
+.nr Bf 8n\" ?
+.nr Bk 8n\" ?
+.nr Bl 1
+.nr Bo 12n
+.nr Bq 12n
+.nr Brc 3
+.nr Bro 12n
+.nr Brq 12n
+.nr Bsx 1
+.nr Bt 8n\" ?
+.nr Bx 1
+.nr Cd 12n
+.nr Cm 10n
+.nr D1 8n\" ?
+.nr Dc 3
+.nr Dl 8n\" ?
+.nr Dt 8n\" ?
+.nr Do 12n
+.nr Dq 12n
+.nr Ds 6n\" many manpages still use this as a -width value
+.nr Dv 12n
+.nr Dx 1
+.nr Ec 3
+.nr Ef 8n\" ?
+.nr Ek 8n\" ?
+.nr El 1
+.nr Em 10n
+.nr En 12n
+.nr Eo 12n
+.nr Eq 12n
+.nr Er 17n
+.nr Es 12n
+.nr Ev 15n
+.nr Ex 1
+.nr Fa 12n
+.nr Fc 3
+.nr Fd 12n\" ?
+.nr Fl 10n
+.nr Fn 16n
+.nr Fo 16n
+.nr Fr 12n\" ?
+.nr Ft 8n\" ?
+.nr Fx 1
+.nr Ic 10n
+.nr In 12n
+.nr It 8n\" ?
+.nr Lb 11n
+.nr Li 16n
+.nr Lk 6n\" ?
+.nr Lp 8n\" ?
+.nr Me 6n
+.nr Ms 6n
+.nr Mt 6n\" ?
+.nr Nd 8n\" ?
+.nr Nm 10n
+.nr No 12n
+.nr Ns 2
+.nr Nx 1
+.nr Oc 3
+.nr Oo 10n
+.nr Op 14n
+.nr Os 6n\" ?
+.nr Ox 1
+.nr Pa 32n
+.nr Pc 3
+.nr Pf 12n
+.nr Po 12n
+.nr Pp 8n\" ?
+.nr Pq 12n
+.nr Qc 3
+.nr Ql 16n
+.nr Qo 12n
+.nr Qq 12n
+.nr Rv 1
+.nr Sc 3
+.nr Sh 8n
+.nr Sm 8n\" ?
+.nr So 12n
+.nr Sq 12n
+.nr Ss 8n
+.nr St 8n\" ?
+.nr Sx 16n
+.nr Sy 6n
+.nr Ta 2
+.nr Tn 10n
+.nr Ud 8n\" ?
+.nr Ux 1
+.nr Va 12n
+.nr Vt 8n\" ?
+.nr Xc 3
+.nr Xo 1
+.nr Xr 10n
+.
+.
+.\" macros which must be processed after the closing delimiter of 'Op'
+.\" and friends
+.ds doc-after-Ao
+.ds doc-after-Bo
+.ds doc-after-Bro
+.ds doc-after-Do
+.ds doc-after-Eo
+.ds doc-after-Fo
+.ds doc-after-Ns
+.ds doc-after-Oo
+.ds doc-after-Po
+.ds doc-after-Qo
+.ds doc-after-So
+.ds doc-after-Xo
+.
+.
+.nr doc-display-indent 6n
+.
+.
+.\" space strings
+.
+.ds doc-soft-space " \"
+.ds doc-hard-space \~
+.ds doc-tab \t
+.
+.
+.eo
+.
+.
+.\" punctuation values (suffix=3, prefix=4)
+.
+.nr doc-punct. 3
+.nr doc-punct, 3
+.nr doc-punct: 3
+.nr doc-punct; 3
+.nr doc-punct( 4
+.nr doc-punct) 3
+.nr doc-punct[ 4
+.nr doc-punct] 3
+.nr doc-punct? 3
+.nr doc-punct! 3
+.
+.
+.\" header assembly macros
+.
+.\" NS doc-document-title global string
+.\" NS   the title of the manual page
+.
+.ds doc-document-title UNTITLED
+.
+.
+.\" NS doc-volume global string
+.\" NS   the volume where the manual page belongs to
+.
+.ds doc-volume LOCAL
+.
+.
+.\" NS doc-section global string
+.\" NS   the manual section
+.
+.ds doc-section Null
+.
+.
+.\" NS Dt user macro (not parsed, not callable)
+.\" NS   document title
+.\" NS
+.\" NS modifies:
+.\" NS   doc-document-title
+.\" NS   doc-section
+.\" NS   doc-volume
+.\" NS   doc-command-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-volume-as-XXX
+.\" NS   doc-volume-ds-XXX
+.\" NS
+.\" NS width register 'Dt' set above
+.
+.\" an alternative, more detailed scheme for naming the manual sections
+.\"
+.ds doc-volume-operating-system BSD
+.nr doc-volume-operating-system-ateol 0
+.ds doc-volume-ds-1 General Commands Manual
+.ds doc-volume-ds-2 System Calls Manual
+.ds doc-volume-ds-3 Library Functions Manual
+.ds doc-volume-ds-4 Kernel Interfaces Manual
+.ds doc-volume-ds-5 File Formats Manual
+.ds doc-volume-ds-6 Games Manual
+.ds doc-volume-ds-7 Miscellaneous Information Manual
+.ds doc-volume-ds-8 System Manager's Manual
+.ds doc-volume-ds-9 Kernel Developer's Manual
+.
+.ds doc-volume-ds-USD   User's Supplementary Documents
+.ds doc-volume-ds-PS1   Programmer's Supplementary Documents
+.ds doc-volume-ds-AMD   Ancestral Manual Documents
+.ds doc-volume-ds-SMM   System Manager's Manual
+.ds doc-volume-ds-URM   User's Reference Manual
+.ds doc-volume-ds-PRM   Programmer's Manual
+.ds doc-volume-ds-KM    Kernel Manual
+.ds doc-volume-ds-IND   Manual Master Index
+.ds doc-volume-ds-LOCAL Local Manual
+.ds doc-volume-ds-CON   Contributed Software Manual
+.
+.als doc-volume-ds-MMI doc-volume-ds-IND
+.als doc-volume-ds-LOC doc-volume-ds-LOCAL
+.
+.ds doc-volume-as-alpha        alpha
+.als doc-volume-as-Alpha doc-volume-as-alpha
+.ds doc-volume-as-acorn26      acorn26
+.ds doc-volume-as-acorn32      acorn32
+.ds doc-volume-as-algor        algor
+.ds doc-volume-as-amd64        amd64
+.ds doc-volume-as-amiga        amiga
+.ds doc-volume-as-amigappc     amigappc
+.ds doc-volume-as-arc          arc
+.ds doc-volume-as-arm          arm
+.ds doc-volume-as-arm26        arm26
+.ds doc-volume-as-arm32        arm32
+.ds doc-volume-as-armish       armish
+.ds doc-volume-as-atari        atari
+.ds doc-volume-as-aviion       aviion
+.ds doc-volume-as-beagle       beagle
+.ds doc-volume-as-bebox        bebox
+.ds doc-volume-as-cats         cats
+.ds doc-volume-as-cesfic       cesfic
+.ds doc-volume-as-cobalt       cobalt
+.ds doc-volume-as-dreamcast    dreamcast
+.ds doc-volume-as-emips        emips
+.ds doc-volume-as-evbarm       evbarm
+.ds doc-volume-as-evbmips      evbmips
+.ds doc-volume-as-evbppc       evbppc
+.ds doc-volume-as-evbsh3       evbsh3
+.ds doc-volume-as-ews4800mips  ews4800mips
+.ds doc-volume-as-hp300        hp300
+.ds doc-volume-as-hp700        hp700
+.ds doc-volume-as-hpcarm       hpcarm
+.ds doc-volume-as-hpcmips      hpcmips
+.ds doc-volume-as-hpcsh        hpcsh
+.ds doc-volume-as-hppa         hppa
+.ds doc-volume-as-hppa64       hppa64
+.ds doc-volume-as-i386         i386
+.ds doc-volume-as-ia64         ia64
+.ds doc-volume-as-ibmnws       ibmnws
+.ds doc-volume-as-iyonix       iyonix
+.ds doc-volume-as-landisk      landisk
+.ds doc-volume-as-loongson     loongson
+.ds doc-volume-as-luna68k      luna68k
+.ds doc-volume-as-luna88k      luna88k
+.ds doc-volume-as-m68k         m68k
+.ds doc-volume-as-mac68k       mac68k
+.ds doc-volume-as-macppc       macppc
+.ds doc-volume-as-mips         mips
+.ds doc-volume-as-mips64       mips64
+.ds doc-volume-as-mipsco       mipsco
+.ds doc-volume-as-mmeye        mmeye
+.ds doc-volume-as-mvme68k      mvme68k
+.ds doc-volume-as-mvme88k      mvme88k
+.ds doc-volume-as-mvmeppc      mvmeppc
+.ds doc-volume-as-netwinder    netwinder
+.ds doc-volume-as-news68k      news68k
+.ds doc-volume-as-newsmips     newsmips
+.ds doc-volume-as-next68k      next68k
+.ds doc-volume-as-ofppc        ofppc
+.ds doc-volume-as-palm         palm
+.ds doc-volume-as-pc532        pc532
+.ds doc-volume-as-playstation2 playstation2
+.ds doc-volume-as-pmax         pmax
+.ds doc-volume-as-pmppc        pmppc
+.ds doc-volume-as-powerpc      powerpc
+.ds doc-volume-as-prep         prep
+.ds doc-volume-as-rs6000       rs6000
+.ds doc-volume-as-sandpoint    sandpoint
+.ds doc-volume-as-sbmips       sbmips
+.ds doc-volume-as-sgi          sgi
+.ds doc-volume-as-sgimips      sgimips
+.ds doc-volume-as-sh3          sh3
+.ds doc-volume-as-shark        shark
+.ds doc-volume-as-socppc       socppc
+.ds doc-volume-as-solbourne    solbourne
+.ds doc-volume-as-sparc        sparc
+.ds doc-volume-as-sparc64      sparc64
+.ds doc-volume-as-sun2         sun2
+.ds doc-volume-as-sun3         sun3
+.ds doc-volume-as-tahoe        tahoe
+.ds doc-volume-as-vax          vax
+.ds doc-volume-as-x68k         x68k
+.ds doc-volume-as-x86_64       x86_64
+.ds doc-volume-as-xen          xen
+.ds doc-volume-as-zaurus       zaurus
+.
+.de Dt
+.  \" reset default arguments
+.  ds doc-document-title UNTITLED
+.  ds doc-volume LOCAL
+.  ds doc-section Null
+.  ds doc-command-name
+.
+.  if !"\$1"" \
+.    ds doc-document-title "\$1
+.
+.  if !"\$2"" \{\
+.    ds doc-section \$2
+.    ie \B\a\$2\a \{\
+.      if ((\$2 >= 1) & (\$2 <= 9)) \{\
+.        ie \n[doc-volume-operating-system-ateol] \{\
+.          ds doc-volume "\*[doc-volume-ds-\$2] \*[doc-volume-operating-system]
+.          if \A\a\$3\a \{\
+.            if d doc-volume-as-\$3 \
+.              as doc-volume "/\*[doc-volume-as-\$3]
+.        \}\}
+.        el \{\
+.          ds doc-volume "\*[doc-volume-operating-system]
+.          if \A\a\$3\a \{\
+.            if d doc-volume-as-\$3 \
+.              as doc-volume "/\*[doc-volume-as-\$3]
+.          \}
+.          as doc-volume " \*[doc-volume-ds-\$2]
+.    \}\}\}
+.    el \{\
+.      ie "\$2"unass" \
+.        ds doc-volume DRAFT
+.      el \{ .ie "\$2"draft" \
+.        ds doc-volume DRAFT
+.      el .if "\$2"paper" \
+.        ds doc-volume UNTITLED
+.      \}\}
+.      if \A\a\$3\a \{\
+.        if d doc-volume-ds-\$3 \
+.          ds doc-volume "\*[doc-volume-ds-\$3]
+.  \}\}\}
+.
+.  if !"\$3"" \
+.    if "\*[doc-volume]"LOCAL" \
+.      ds doc-volume \$3
+.
+.  if !\n[cR] \
+.    if \n[nl] \{\
+.      doc-setup-header
+.      bp
+.    \}
+..
+.
+.
+.\" NS doc-default-operating-system global string
+.\" NS   the exact (default) version of the operating system
+.\" NS
+.\" NS override this in 'mdoc.local', if necessary
+.
+.ds doc-default-operating-system BSD
+.
+.
+.\" NS doc-operating-system global string
+.\" NS   the exact version of the operating system
+.
+.ds doc-operating-system
+.
+.
+.\" NS Os user macro (not parsed, not callable)
+.\" NS   operating system
+.\" NS
+.\" NS modifies:
+.\" NS   doc-operating-system
+.\" NS   doc-command-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-operating-system-XXX-XXX
+.\" NS
+.\" NS width register 'Os' set above
+.
+.ds doc-operating-system-ATT-7   7th\~Edition
+.als doc-operating-system-ATT-7th doc-operating-system-ATT-7
+.ds doc-operating-system-ATT-3   System\~III
+.als doc-operating-system-ATT-III doc-operating-system-ATT-3
+.ds doc-operating-system-ATT-V   System\~V
+.ds doc-operating-system-ATT-V.2 System\~V Release\~2
+.ds doc-operating-system-ATT-V.3 System\~V Release\~3
+.ds doc-operating-system-ATT-V.4 System\~V Release\~4
+.
+.ds doc-operating-system-BSD-3    3rd\~Berkeley Distribution
+.ds doc-operating-system-BSD-4    4th\~Berkeley Distribution
+.ds doc-operating-system-BSD-4.1  4.1\~Berkeley Distribution
+.ds doc-operating-system-BSD-4.2  4.2\~Berkeley Distribution
+.ds doc-operating-system-BSD-4.3  4.3\~Berkeley Distribution
+.ds doc-operating-system-BSD-4.3T 4.3-Tahoe Berkeley Distribution
+.ds doc-operating-system-BSD-4.3R 4.3-Reno Berkeley Distribution
+.als doc-operating-system-BSD-4.3t doc-operating-system-BSD-4.3T
+.als doc-operating-system-BSD-4.3r doc-operating-system-BSD-4.3R
+.ds doc-operating-system-BSD-4.4  4.4BSD
+.
+.ds doc-operating-system-NetBSD-0.8   0.8
+.ds doc-operating-system-NetBSD-0.8a  0.8A
+.ds doc-operating-system-NetBSD-0.9   0.9
+.ds doc-operating-system-NetBSD-0.9a  0.9A
+.ds doc-operating-system-NetBSD-1.0   1.0
+.ds doc-operating-system-NetBSD-1.0a  1.0A
+.ds doc-operating-system-NetBSD-1.1   1.1
+.ds doc-operating-system-NetBSD-1.2   1.2
+.ds doc-operating-system-NetBSD-1.2a  1.2A
+.ds doc-operating-system-NetBSD-1.2b  1.2B
+.ds doc-operating-system-NetBSD-1.2c  1.2C
+.ds doc-operating-system-NetBSD-1.2d  1.2D
+.ds doc-operating-system-NetBSD-1.2e  1.2E
+.ds doc-operating-system-NetBSD-1.3   1.3
+.ds doc-operating-system-NetBSD-1.3a  1.3A
+.ds doc-operating-system-NetBSD-1.4   1.4
+.ds doc-operating-system-NetBSD-1.4.1 1.4.1
+.ds doc-operating-system-NetBSD-1.4.2 1.4.2
+.ds doc-operating-system-NetBSD-1.4.3 1.4.3
+.ds doc-operating-system-NetBSD-1.5   1.5
+.ds doc-operating-system-NetBSD-1.5.1 1.5.1
+.ds doc-operating-system-NetBSD-1.5.2 1.5.2
+.ds doc-operating-system-NetBSD-1.5.3 1.5.3
+.ds doc-operating-system-NetBSD-1.6   1.6
+.ds doc-operating-system-NetBSD-1.6.1 1.6.1
+.ds doc-operating-system-NetBSD-1.6.2 1.6.2
+.ds doc-operating-system-NetBSD-1.6.3 1.6.3
+.ds doc-operating-system-NetBSD-2.0   2.0
+.ds doc-operating-system-NetBSD-2.0.1 2.0.1
+.ds doc-operating-system-NetBSD-2.0.2 2.0.2
+.ds doc-operating-system-NetBSD-2.0.3 2.0.3
+.ds doc-operating-system-NetBSD-2.1   2.1
+.ds doc-operating-system-NetBSD-3.0   3.0
+.ds doc-operating-system-NetBSD-3.0.1 3.0.1
+.ds doc-operating-system-NetBSD-3.0.2 3.0.2
+.ds doc-operating-system-NetBSD-3.0.3 3.0.3
+.ds doc-operating-system-NetBSD-3.1   3.1
+.ds doc-operating-system-NetBSD-3.1.1 3.1.1
+.ds doc-operating-system-NetBSD-4.0   4.0
+.ds doc-operating-system-NetBSD-4.0.1 4.0.1
+.ds doc-operating-system-NetBSD-5.0   5.0
+.ds doc-operating-system-NetBSD-5.0.1 5.0.1
+.ds doc-operating-system-NetBSD-5.0.2 5.0.2
+.ds doc-operating-system-NetBSD-5.1   5.1
+.ds doc-operating-system-NetBSD-5.1.2 5.1.2
+.ds doc-operating-system-NetBSD-5.1.3 5.1.3
+.ds doc-operating-system-NetBSD-5.1.4 5.1.4
+.ds doc-operating-system-NetBSD-5.2   5.2
+.ds doc-operating-system-NetBSD-5.2.1 5.2.1
+.ds doc-operating-system-NetBSD-5.2.2 5.2.2
+.ds doc-operating-system-NetBSD-6.0   6.0
+.ds doc-operating-system-NetBSD-6.0.1 6.0.1
+.ds doc-operating-system-NetBSD-6.0.2 6.0.2
+.ds doc-operating-system-NetBSD-6.0.3 6.0.3
+.ds doc-operating-system-NetBSD-6.0.4 6.0.4
+.ds doc-operating-system-NetBSD-6.0.5 6.0.5
+.ds doc-operating-system-NetBSD-6.1   6.1
+.ds doc-operating-system-NetBSD-6.1.1 6.1.1
+.ds doc-operating-system-NetBSD-6.1.2 6.1.2
+.ds doc-operating-system-NetBSD-6.1.3 6.1.3
+.ds doc-operating-system-NetBSD-6.1.4 6.1.4
+.
+.ds doc-operating-system-OpenBSD-2.0  2.0
+.ds doc-operating-system-OpenBSD-2.1  2.1
+.ds doc-operating-system-OpenBSD-2.2  2.2
+.ds doc-operating-system-OpenBSD-2.3  2.3
+.ds doc-operating-system-OpenBSD-2.4  2.4
+.ds doc-operating-system-OpenBSD-2.5  2.5
+.ds doc-operating-system-OpenBSD-2.6  2.6
+.ds doc-operating-system-OpenBSD-2.7  2.7
+.ds doc-operating-system-OpenBSD-2.8  2.8
+.ds doc-operating-system-OpenBSD-2.9  2.9
+.ds doc-operating-system-OpenBSD-3.0  3.0
+.ds doc-operating-system-OpenBSD-3.1  3.1
+.ds doc-operating-system-OpenBSD-3.2  3.2
+.ds doc-operating-system-OpenBSD-3.3  3.3
+.ds doc-operating-system-OpenBSD-3.4  3.4
+.ds doc-operating-system-OpenBSD-3.5  3.5
+.ds doc-operating-system-OpenBSD-3.6  3.6
+.ds doc-operating-system-OpenBSD-3.7  3.7
+.ds doc-operating-system-OpenBSD-3.8  3.8
+.ds doc-operating-system-OpenBSD-3.9  3.9
+.ds doc-operating-system-OpenBSD-4.0  4.0
+.ds doc-operating-system-OpenBSD-4.1  4.1
+.ds doc-operating-system-OpenBSD-4.2  4.2
+.ds doc-operating-system-OpenBSD-4.3  4.3
+.ds doc-operating-system-OpenBSD-4.4  4.4
+.ds doc-operating-system-OpenBSD-4.5  4.5
+.ds doc-operating-system-OpenBSD-4.6  4.6
+.ds doc-operating-system-OpenBSD-4.7  4.7
+.ds doc-operating-system-OpenBSD-4.8  4.8
+.ds doc-operating-system-OpenBSD-4.9  4.9
+.ds doc-operating-system-OpenBSD-5.0  5.0
+.ds doc-operating-system-OpenBSD-5.1  5.1
+.ds doc-operating-system-OpenBSD-5.2  5.2
+.ds doc-operating-system-OpenBSD-5.3  5.3
+.ds doc-operating-system-OpenBSD-5.4  5.4
+.ds doc-operating-system-OpenBSD-5.5  5.5
+.ds doc-operating-system-OpenBSD-5.6  5.6
+.
+.ds doc-operating-system-FreeBSD-1.0     1.0
+.ds doc-operating-system-FreeBSD-1.1     1.1
+.ds doc-operating-system-FreeBSD-1.1.5   1.1.5
+.ds doc-operating-system-FreeBSD-1.1.5.1 1.1.5.1
+.ds doc-operating-system-FreeBSD-2.0     2.0
+.ds doc-operating-system-FreeBSD-2.0.5   2.0.5
+.ds doc-operating-system-FreeBSD-2.1     2.1
+.ds doc-operating-system-FreeBSD-2.1.5   2.1.5
+.ds doc-operating-system-FreeBSD-2.1.6   2.1.6
+.ds doc-operating-system-FreeBSD-2.1.7   2.1.7
+.ds doc-operating-system-FreeBSD-2.2     2.2
+.ds doc-operating-system-FreeBSD-2.2.1   2.2.1
+.ds doc-operating-system-FreeBSD-2.2.2   2.2.2
+.ds doc-operating-system-FreeBSD-2.2.5   2.2.5
+.ds doc-operating-system-FreeBSD-2.2.6   2.2.6
+.ds doc-operating-system-FreeBSD-2.2.7   2.2.7
+.ds doc-operating-system-FreeBSD-2.2.8   2.2.8
+.ds doc-operating-system-FreeBSD-2.2.9   2.2.9
+.ds doc-operating-system-FreeBSD-3.0     3.0
+.ds doc-operating-system-FreeBSD-3.1     3.1
+.ds doc-operating-system-FreeBSD-3.2     3.2
+.ds doc-operating-system-FreeBSD-3.3     3.3
+.ds doc-operating-system-FreeBSD-3.4     3.4
+.ds doc-operating-system-FreeBSD-3.5     3.5
+.ds doc-operating-system-FreeBSD-4.0     4.0
+.ds doc-operating-system-FreeBSD-4.1     4.1
+.ds doc-operating-system-FreeBSD-4.1.1   4.1.1
+.ds doc-operating-system-FreeBSD-4.2     4.2
+.ds doc-operating-system-FreeBSD-4.3     4.3
+.ds doc-operating-system-FreeBSD-4.4     4.4
+.ds doc-operating-system-FreeBSD-4.5     4.5
+.ds doc-operating-system-FreeBSD-4.6     4.6
+.ds doc-operating-system-FreeBSD-4.6.2   4.6.2
+.ds doc-operating-system-FreeBSD-4.7     4.7
+.ds doc-operating-system-FreeBSD-4.8     4.8
+.ds doc-operating-system-FreeBSD-4.9     4.9
+.ds doc-operating-system-FreeBSD-4.10    4.10
+.ds doc-operating-system-FreeBSD-4.11    4.11
+.ds doc-operating-system-FreeBSD-5.0     5.0
+.ds doc-operating-system-FreeBSD-5.1     5.1
+.ds doc-operating-system-FreeBSD-5.2     5.2
+.ds doc-operating-system-FreeBSD-5.2.1   5.2.1
+.ds doc-operating-system-FreeBSD-5.3     5.3
+.ds doc-operating-system-FreeBSD-5.4     5.4
+.ds doc-operating-system-FreeBSD-5.5     5.5
+.ds doc-operating-system-FreeBSD-6.0     6.0
+.ds doc-operating-system-FreeBSD-6.1     6.1
+.ds doc-operating-system-FreeBSD-6.2     6.2
+.ds doc-operating-system-FreeBSD-6.3     6.3
+.ds doc-operating-system-FreeBSD-6.4     6.4
+.ds doc-operating-system-FreeBSD-7.0     7.0
+.ds doc-operating-system-FreeBSD-7.1     7.1
+.ds doc-operating-system-FreeBSD-7.2     7.2
+.ds doc-operating-system-FreeBSD-7.3     7.3
+.ds doc-operating-system-FreeBSD-7.4     7.4
+.ds doc-operating-system-FreeBSD-8.0     8.0
+.ds doc-operating-system-FreeBSD-8.1     8.1
+.ds doc-operating-system-FreeBSD-8.2     8.2
+.ds doc-operating-system-FreeBSD-8.3     8.3
+.ds doc-operating-system-FreeBSD-8.4     8.4
+.ds doc-operating-system-FreeBSD-9.0     9.0
+.ds doc-operating-system-FreeBSD-9.1     9.1
+.ds doc-operating-system-FreeBSD-9.2     9.2
+.ds doc-operating-system-FreeBSD-9.3     9.3
+.ds doc-operating-system-FreeBSD-10.0    10.0
+.
+.ds doc-operating-system-Darwin-8.0.0  8.0.0
+.ds doc-operating-system-Darwin-8.1.0  8.1.0
+.ds doc-operating-system-Darwin-8.2.0  8.2.0
+.ds doc-operating-system-Darwin-8.3.0  8.3.0
+.ds doc-operating-system-Darwin-8.4.0  8.4.0
+.ds doc-operating-system-Darwin-8.5.0  8.5.0
+.ds doc-operating-system-Darwin-8.6.0  8.6.0
+.ds doc-operating-system-Darwin-8.7.0  8.7.0
+.ds doc-operating-system-Darwin-8.8.0  8.8.0
+.ds doc-operating-system-Darwin-8.9.0  8.9.0
+.ds doc-operating-system-Darwin-8.10.0 8.10.0
+.ds doc-operating-system-Darwin-8.11.0 8.11.0
+.ds doc-operating-system-Darwin-9.0.0  9.0.0
+.ds doc-operating-system-Darwin-9.1.0  9.1.0
+.ds doc-operating-system-Darwin-9.2.0  9.2.0
+.ds doc-operating-system-Darwin-9.3.0  9.3.0
+.ds doc-operating-system-Darwin-9.4.0  9.4.0
+.ds doc-operating-system-Darwin-9.5.0  9.5.0
+.ds doc-operating-system-Darwin-9.6.0  9.6.0
+.ds doc-operating-system-Darwin-9.7.0  9.7.0
+.ds doc-operating-system-Darwin-9.8.0  9.8.0
+.ds doc-operating-system-Darwin-10.0.0 10.0.0
+.ds doc-operating-system-Darwin-10.1.0 10.1.0
+.ds doc-operating-system-Darwin-10.2.0 10.2.0
+.ds doc-operating-system-Darwin-10.3.0 10.3.0
+.ds doc-operating-system-Darwin-10.4.0 10.4.0
+.ds doc-operating-system-Darwin-10.5.0 10.5.0
+.ds doc-operating-system-Darwin-10.6.0 10.6.0
+.ds doc-operating-system-Darwin-10.7.0 10.7.0
+.ds doc-operating-system-Darwin-10.8.0 10.8.0
+.ds doc-operating-system-Darwin-11.0.0 11.0.0
+.ds doc-operating-system-Darwin-11.1.0 11.1.0
+.ds doc-operating-system-Darwin-11.2.0 11.2.0
+.ds doc-operating-system-Darwin-11.3.0 11.3.0
+.ds doc-operating-system-Darwin-11.4.0 11.4.0
+.ds doc-operating-system-Darwin-11.5.0 11.5.0
+.ds doc-operating-system-Darwin-12.0.0 12.0.0
+.ds doc-operating-system-Darwin-12.1.0 12.1.0
+.ds doc-operating-system-Darwin-12.2.0 12.2.0
+.ds doc-operating-system-Darwin-13.0.0 13.0.0
+.ds doc-operating-system-Darwin-13.1.0 13.1.0
+.ds doc-operating-system-Darwin-13.2.0 13.2.0
+.ds doc-operating-system-Darwin-13.3.0 13.3.0
+.ds doc-operating-system-Darwin-13.4.0 13.4.0
+.ds doc-operating-system-Darwin-14.0.0 14.0.0
+.
+.ds doc-operating-system-DragonFly-1.0    1.0
+.ds doc-operating-system-DragonFly-1.1    1.1
+.ds doc-operating-system-DragonFly-1.2    1.2
+.ds doc-operating-system-DragonFly-1.3    1.3
+.ds doc-operating-system-DragonFly-1.4    1.4
+.ds doc-operating-system-DragonFly-1.5    1.5
+.ds doc-operating-system-DragonFly-1.6    1.6
+.ds doc-operating-system-DragonFly-1.7    1.7
+.ds doc-operating-system-DragonFly-1.8    1.8
+.ds doc-operating-system-DragonFly-1.8.1  1.8.1
+.ds doc-operating-system-DragonFly-1.9    1.9
+.ds doc-operating-system-DragonFly-1.10   1.10
+.ds doc-operating-system-DragonFly-1.11   1.11
+.ds doc-operating-system-DragonFly-1.12   1.12
+.ds doc-operating-system-DragonFly-1.12.2 1.12.2
+.ds doc-operating-system-DragonFly-1.13   1.13
+.ds doc-operating-system-DragonFly-2.0    2.0
+.ds doc-operating-system-DragonFly-2.1    2.1
+.ds doc-operating-system-DragonFly-2.2    2.2
+.ds doc-operating-system-DragonFly-2.3    2.3
+.ds doc-operating-system-DragonFly-2.4    2.4
+.ds doc-operating-system-DragonFly-2.5    2.5
+.ds doc-operating-system-DragonFly-2.6    2.6
+.ds doc-operating-system-DragonFly-2.7    2.7
+.ds doc-operating-system-DragonFly-2.8    2.8
+.ds doc-operating-system-DragonFly-2.9    2.9
+.ds doc-operating-system-DragonFly-2.9.1  2.9.1
+.ds doc-operating-system-DragonFly-2.10   2.10
+.ds doc-operating-system-DragonFly-2.10.1 2.10.1
+.ds doc-operating-system-DragonFly-2.11   2.11
+.ds doc-operating-system-DragonFly-2.12   2.12
+.ds doc-operating-system-DragonFly-2.13   2.13
+.ds doc-operating-system-DragonFly-3.0    3.0
+.ds doc-operating-system-DragonFly-3.1    3.1
+.ds doc-operating-system-DragonFly-3.2    3.2
+.ds doc-operating-system-DragonFly-3.3    3.3
+.ds doc-operating-system-DragonFly-3.4    3.4
+.ds doc-operating-system-DragonFly-3.5    3.5
+.ds doc-operating-system-DragonFly-3.6    3.6
+.ds doc-operating-system-DragonFly-3.7    3.7
+.ds doc-operating-system-DragonFly-3.8    3.8
+.
+.de Os
+.  ds doc-command-name
+.
+.  ie "\$1"" \
+.    ds doc-operating-system "\*[doc-default-operating-system]
+.  el \{ .ie "\$1"ATT" \{\
+.    ds doc-operating-system AT&T
+.    if \A\a\$2\a \{\
+.      ie d doc-operating-system-ATT-\$2 \
+.        as doc-operating-system " \*[doc-operating-system-ATT-\$2]
+.      el \
+.        as doc-operating-system " UNIX
+.  \}\}
+.  el \{ .ie "\$1"BSD" \{\
+.    if \A\a\$2\a \{\
+.      ie d doc-operating-system-BSD-\$2 \
+.        ds doc-operating-system "\*[doc-operating-system-BSD-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown BSD version '\$2' (#\n[.c])
+.  \}\}
+.  el \{ .ie "\$1"FreeBSD" \{\
+.    ds doc-operating-system FreeBSD
+.    if \A\a\$2\a \{\
+.      ie d doc-operating-system-FreeBSD-\$2 \
+.        as doc-operating-system \~\*[doc-operating-system-FreeBSD-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown FreeBSD version '\$2' (#\n[.c])
+.  \}\}
+.  el \{ .ie "\$1"DragonFly" \{\
+.    ds doc-operating-system DragonFly
+.    if \A\a\$2\a \{\
+.      ie d doc-operating-system-DragonFly-\$2 \
+.        as doc-operating-system \~\*[doc-operating-system-DragonFly-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown DragonFly version '\$2' (#\n[.c])
+.  \}\}
+.  el \{ .ie "\$1"NetBSD" \{\
+.    ds doc-operating-system NetBSD
+.    if \A\a\$2\a \{\
+.      ie d doc-operating-system-NetBSD-\$2 \
+.        as doc-operating-system \~\*[doc-operating-system-NetBSD-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown NetBSD version '\$2' (#\n[.c])
+.  \}\}
+.  el \{ .ie "\$1"OpenBSD" \{\
+.    ds doc-operating-system OpenBSD
+.    if \A\a\$2\a \{\
+.      ie d doc-operating-system-OpenBSD-\$2 \
+.        as doc-operating-system \~\*[doc-operating-system-OpenBSD-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown OpenBSD version '\$2' (#\n[.c])
+.  \}\}
+.  el \{ .ie "\$1"Darwin" \{\
+.    ds doc-operating-system Darwin
+.    if \A\a\$2\a \{\
+.      ie d doc-operating-system-Darwin-\$2 \
+.        as doc-operating-system \~\*[doc-operating-system-Darwin-\$2]
+.      el \
+.        tm mdoc warning: .Os: Unknown Darwin version '\$2' (#\n[.c])
+.  \}\}
+.  el \{\
+.    ds doc-operating-system \$1
+.    if !"\$2"" \
+.      as doc-operating-system " \$2
+.  \}\}\}\}\}\}\}\}
+..
+.
+.
+.\" NS doc-date-string global string
+.\" NS   the manual page date as set by 'Dd'
+.
+.ds doc-date-string
+.
+.
+.\" NS Dd user macro (not parsed, not callable)
+.\" NS   set document date
+.\" NS
+.\" NS modifies:
+.\" NS   doc-date-string
+.\" NS   doc-command-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-date-XXX
+.\" NS
+.\" NS width register 'Dd' set above
+.
+.ds doc-date-1  January
+.ds doc-date-2  February
+.ds doc-date-3  March
+.ds doc-date-4  April
+.ds doc-date-5  May
+.ds doc-date-6  June
+.ds doc-date-7  July
+.ds doc-date-8  August
+.ds doc-date-9  September
+.ds doc-date-10 October
+.ds doc-date-11 November
+.ds doc-date-12 December
+.
+.de Dd
+.  ds doc-command-name
+.
+.  ie \n[.$] \{\
+.    ie "\$1"$Mdocdate:" \
+.      ds doc-date-string \$2\~\$3, \$4
+.    el \{ .ie (\n[.$] == 3) \
+.      ds doc-date-string \$1\~\$2 \$3
+.    el \{\
+.      ds doc-date-string "\*[doc-date-\n[mo]]
+.      as doc-date-string \~\n[dy], \n[year]
+.    \}\}
+.  \}
+.  el \
+.    ds doc-date-string Epoch
+..
+.
+.
+.\" NS doc-hyphen-flags global register
+.\" NS   the parameter for the '.hy' request
+.\" NS
+.\" NS override this in 'mdoc.local', if necessary.
+.
+.nr doc-hyphen-flags 4
+.
+.
+.\" NS doc-header macro
+.\" NS   print page header
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dh
+.\" NS   doc-reg-dh1
+.
+.de doc-header
+.  ev doc-env-dh
+.  doc-setup-page-layout
+.  if !\n[cR] \
+.    sp \n[doc-header-space]u
+.  nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\f[]'
+.  nr doc-reg-dh1 \w'\*[doc-caption-font2]\*[doc-volume]\f[]'
+.  if (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
+.    while (\n[doc-reg-dh] + \n[doc-reg-dh1] + \n[doc-reg-dh] >= \n[.lt]) \{\
+.      substring doc-header-string 0 -2
+.      nr doc-reg-dh \w'\*[doc-caption-font]\*[doc-header-string]\|.\|.\|.\f[]'
+.    \}
+.    as doc-header-string "\|.\|.\|.
+.  \}
+.  tl \a\*[doc-caption-font]\*[doc-header-string]\f[]\a\*[doc-caption-font2]\*[doc-volume]\f[]\a\*[doc-caption-font]\*[doc-header-string]\f[]\a
+.  ie !\n[cR] \
+.    sp \n[doc-header-space]u
+.  el \
+.    sp 1v
+.  ev
+.  ns
+..
+.
+.
+.\" NS doc-footer macro
+.\" NS   print page footer
+.
+.de doc-footer
+.  ie \n[cR] \
+.    br
+.  el \{\
+.    ev doc-caption-enviroment
+.    doc-setup-page-layout
+.    sp \n[doc-footer-space]u
+.    ie \n[D] \{\
+.      ie o \
+.        tl \a%\a\*[doc-caption-font2]\*[doc-date-string]\f[]\a\*[doc-caption-font]\*[doc-operating-system]\f[]\a
+.      el \
+.        tl \a\*[doc-caption-font]\*[doc-operating-system]\f[]\a\*[doc-caption-font2]\*[doc-date-string]\f[]\a%\a
+.    \}
+.    el \
+.      tl \a\*[doc-caption-font]\*[doc-operating-system]\f[]\a\*[doc-caption-font2]\*[doc-date-string]\f[]\a%\a
+.    bp
+.    ev
+.  \}
+..
+.
+.
+.\" NS doc-check-depth macro
+.\" NS   check paired macros
+.
+.de doc-check-depth
+.  if \n[doc-list-depth] \{\
+.    tm mdoc warning: A .Bl directive has no matching .El (#\n[.c])
+.    nr doc-list-depth 0
+.  \}
+.  if \n[doc-display-depth] \{\
+.    tm mdoc warning: A .Bd directive has no matching .Ed (#\n[.c])
+.    nr doc-display-depth 0
+.  \}
+.  if \n[doc-fontmode-depth] \{\
+.    tm mdoc warning: A .Bf directive has no matching .Ef (#\n[.c])
+.    nr doc-fontmode-depth 0
+.  \}
+..
+.
+.
+.\" NS doc-end-macro macro
+.\" NS   finish output
+.
+.de doc-end-macro
+.  \" We may still have a partial line in the environment.  If this is
+.  \" the case, and we happen to be on the last line of the page, the
+.  \" '.fl' request will cause the page to be ejected and troff will
+.  \" immediately exit.  If we are in nroff mode, this would be
+.  \" unfortunate, since we would never get a chance to output the
+.  \" footer.  So we fudge the page length to make sure that the last
+.  \" page is never ejected until we want it to be.
+.
+.  if \n[cR] \
+.    pl +3v
+.  fl
+.
+.  doc-check-depth
+.
+.  if \n[cR] \{\
+.    sp
+.    tl \a\*[doc-caption-font]\*[doc-operating-system]\f[]\a\*[doc-caption-font2]\*[doc-date-string]\f[]\a\*[doc-caption-font]\*[doc-operating-system]\f[]\a
+.    \" suppress empty lines after the footer
+.    pl \n[nl]u
+.  \}
+..
+.
+.
+.\" NS doc-paragraph macro
+.\" NS   insert a paragraph
+.
+.de doc-paragraph
+.  sp \n[doc-paragraph-space]u
+.  if !\n[cR] \
+.    ne 2
+.  ns
+..
+.
+.
+.\" NS Pp user macro (not parsed, not callable)
+.\" NS   new paragraph
+.\" NS
+.\" NS width register 'Pp' set above
+.
+.als Pp doc-paragraph
+.
+.
+.\" NS Lp user macro (not parsed, not callable)
+.\" NS   same as .Pp
+.\" NS
+.\" NS width register 'Lp' set above
+.
+.als Lp doc-paragraph
+.
+.
+.de LP
+.  tm Not a \-mdoc command: .LP (#\n[.c])
+..
+.
+.
+.de PP
+.  tm Not a \-mdoc command: .PP (#\n[.c])
+..
+.
+.
+.de pp
+.  tm Not a \-mdoc command: .pp (#\n[.c])
+..
+.
+.
+.de SH
+.  tm Not a \-mdoc command: .SH (#\n[.c])
+..
+.
+.
+.\" NS Nd user macro (not parsed, not callable)
+.\" NS   print name description
+.\" NS
+.\" NS width register 'Nd' set above
+.
+.de Nd
+.  nop \[em] \$*
+..
+.
+.
+.\" NS doc-in-synopsis-section global register (bool)
+.\" NS   whether we are in the 'synopsis' section
+.
+.nr doc-in-synopsis-section 0
+.
+.
+.\" NS doc-in-library-section global register (bool)
+.\" NS   whether we are in the 'library' section
+.
+.nr doc-in-library-section 0
+.
+.
+.\" NS doc-in-see-also-section global register (bool)
+.\" NS   whether we are in the 'see also' section
+.
+.nr doc-in-see-also-section 0
+.
+.
+.\" NS doc-in-files-section global register (bool)
+.\" NS   whether we are in the 'files' section
+.
+.nr doc-in-files-section 0
+.
+.
+.\" NS doc-in-authors-section global register (bool)
+.\" NS   whether we are in the 'authors' section
+.
+.nr doc-in-authors-section 0
+.
+.
+.\" NS doc-first-parameter macro
+.\" NS   return first parameter
+.\" NS
+.\" NS local variables:
+.\" NS   doc-str-dfp
+.
+.de doc-first-parameter
+.  ds doc-str-dfp "\$1
+..
+.
+.
+.\" NS Sh user macro (not callable)
+.\" NS   section headers
+.\" NS
+.\" NS modifies:
+.\" NS   doc-func-args-processed
+.\" NS   doc-func-count
+.\" NS   doc-in-authors-section
+.\" NS   doc-in-files-section
+.\" NS   doc-in-library-section
+.\" NS   doc-in-see-also-section
+.\" NS   doc-in-synopsis-section
+.\" NS   doc-indent-synopsis
+.\" NS   doc-indent-synopsis-active
+.\" NS   doc-is-func
+.\" NS   doc-num-func-args
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Sh
+.\" NS   doc-reg-Sh1
+.\" NS   doc-section-XXX
+.\" NS
+.\" NS width register 'Sh' set in doc-common
+.
+.ds doc-section-name        NAME
+.ds doc-section-synopsis    SYNOPSIS
+.ds doc-section-library     LIBRARY
+.ds doc-section-description DESCRIPTION
+.ds doc-section-see-also    SEE
+.ds doc-section-files       FILES
+.ds doc-section-authors     AUTHORS
+.
+.de Sh
+.  ie \n[doc-arg-limit] \{\
+.    \" we only allow 'Sh' within 'Sh'; it will change the font back to
+.    \" 'doc-Sh-font'
+.    ie "\*[doc-macro-name]"Sh" \{\
+.      nr doc-arg-ptr +1
+.      ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.        nr doc-curr-font \n[.f]
+.        nr doc-curr-size \n[.ps]
+.        nop \*[doc-Sh-font]\c
+.        doc-print-recursive
+.      \}
+.      el \{\
+.        tm Usage: .Sh section_name ... (#\n[.c])
+.        doc-reset-args
+.    \}\}
+.    el \{\
+.      tm Usage: .Sh not callable by other macros (#\n[.c])
+.      doc-reset-args
+.  \}\}
+.  el \{\
+.    if !\n[.$] \{\
+.      tm Usage: .Sh section_name ... (#\n[.c])
+.      return
+.    \}
+.
+.    ds doc-macro-name Sh
+.    doc-parse-args \$@
+.
+.    if t \
+.      ad
+.
+.    \" this resolves e.g. '.Sh "SEE ALSO"'
+.    doc-first-parameter \$*
+.
+.    ie "\*[doc-str-dfp]"\*[doc-section-name]" \{\
+.      doc-setup-header
+.      in 0
+.    \}
+.    el \{\
+.      nr doc-in-synopsis-section 0
+.      nr doc-in-library-section 0
+.      nr doc-in-see-also-section 0
+.      nr doc-in-files-section 0
+.      nr doc-in-authors-section 0
+.
+.      ie        "\*[doc-str-dfp]"\*[doc-section-synopsis]" \{\
+.        if t \
+.          na
+.        nr doc-in-synopsis-section 1
+.        nr doc-indent-synopsis 0
+.        nr doc-indent-synopsis-active 0
+.      \}
+.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-library]" \{\
+.        nr doc-in-library-section 1
+.      \}
+.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-description]" \{\
+.        nr doc-is-func 0
+.        nr doc-func-count 0
+.        nr doc-func-args-processed 0
+.        nr doc-num-func-args 0
+.      \}
+.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-see-also]" \{\
+.        if t \
+.          na
+.        nr doc-in-see-also-section 1
+.      \}
+.      el \{ .ie "\*[doc-str-dfp]"\*[doc-section-files]" \
+.        nr doc-in-files-section 1
+.      el .if    "\*[doc-str-dfp]"\*[doc-section-authors]" \
+.        nr doc-in-authors-section 1
+.      \}\}\}\}
+.
+.      in 0
+.      nr doc-have-author 0
+.    \}
+.
+.    doc-setup-page-layout
+.    sp
+.    ns
+.    ta T .5i
+.    if !\n[cR] \
+.      ne 3
+.    fi
+.
+.    if t \{\
+.      nr doc-reg-Sh \n[.ss]
+.      nr doc-reg-Sh1 \n[.sss]
+.      ss (\n[.ss] * 5 / 3) (\n[.sss] * 5 / 3)
+.    \}
+.
+.    nr doc-arg-ptr +1
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    nop \*[doc-Sh-font]\c
+.    doc-print-recursive
+.
+.    if t \
+.      ss \n[doc-reg-Sh] \n[doc-reg-Sh1]
+.
+.    in +\n[doc-subheader-indent]u
+.    ns
+.
+.    doc-check-depth
+.  \}
+..
+.
+.
+.\" NS Ss user macro (not callable)
+.\" NS   subsection
+.\" NS
+.\" NS local variable:
+.\" NS   doc-reg-Ss
+.\" NS   doc-reg-Ss1
+.\" NS
+.\" NS width register 'Ss' set above
+.
+.de Ss
+.  ie \n[doc-arg-limit] \{\
+.    \" we only allow 'Ss' within 'Ss'; it will change the font back to
+.    \" 'doc-Sh-font'
+.    ie "\*[doc-macro-name]"Ss" \{\
+.      nr doc-arg-ptr +1
+.      ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.        nr doc-curr-font \n[.f]
+.        nr doc-curr-size \n[.ps]
+.        nop \*[doc-Sh-font]\c
+.        doc-print-recursive
+.      \}
+.      el \{\
+.        tm Usage: .Ss subsection_name ... (#\n[.c])
+.        doc-reset-args
+.    \}\}
+.    el \{\
+.      tm Usage: .Ss not callable by other macros (#\n[.c])
+.      doc-reset-args
+.  \}\}
+.  el \{\
+.    if !\n[.$] \{\
+.      tm Usage: .Ss subsection_name ... (#\n[.c])
+.      return
+.    \}
+.
+.    ds doc-macro-name Ss
+.    doc-parse-args \$@
+.
+.    sp
+.    if !\n[cR] \
+.      ne 3
+.    ti -.25i
+.
+.    nr doc-reg-Ss \n[.ss]
+.    nr doc-reg-Ss1 \n[.sss]
+.    ss (\n[.ss] * 5 / 4) (\n[.sss] * 5 / 4)
+.
+.    nr doc-arg-ptr +1
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    nop \*[doc-Sh-font]\c
+.    doc-print-recursive
+.
+.    ss \n[doc-reg-Ss] \n[doc-reg-Ss1]
+.
+.    ta T .5i
+.    if !\n[cR] \
+.      ne 2
+.    br
+.    ns
+.
+.    doc-check-depth
+.  \}
+..
+.
+.
+.\" NS Rd macro (not parsed, not callable)
+.\" NS   print global register dump to stderr
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Rd
+.
+.de Rd
+.  tm MDOC GLOBAL REGISTER DUMP
+.  tm doc-macro-name == '\*[doc-macro-name]'
+.  tm doc-arg-limit == \n[doc-arg-limit]
+.  tm doc-num-args == \n[doc-num-args]
+.  tm doc-arg-ptr == \n[doc-arg-ptr]
+.
+.  nr doc-reg-Rd 1
+.  while (\n[doc-reg-Rd] <= \n[doc-arg-limit]) \{\
+.    tm doc-arg\n[doc-reg-Rd] == '\*[doc-arg\n[doc-reg-Rd]]'
+.    tm doc-type\n[doc-reg-Rd] == \n[doc-type\n[doc-reg-Rd]]
+.    tm doc-space\n[doc-reg-Rd] == '\*[doc-space\n[doc-reg-Rd]]'
+.    nr doc-reg-Rd +1
+.  \}
+.
+.  tm doc-curr-font == \n[doc-curr-font]
+.  tm doc-curr-size == \n[doc-curr-size]
+.  tm doc-indent-synopsis == \n[doc-indent-synopsis]
+.  tm doc-indent-synopsis-active == \n[doc-indent-synopsis-active]
+.  tm doc-have-decl == \n[doc-have-decl]
+.  tm doc-have-var == \n[doc-have-var]
+.  tm doc-command-name == '\*[doc-command-name]'
+.  tm doc-quote-left == '\*[doc-quote-left]'
+.  tm doc-quote-right == '\*[doc-quote-right]'
+.  tm doc-nesting-level == \n[doc-nesting-level]
+.  tm doc-in-list == \n[doc-in-list]
+.  tm doc-space == '\*[doc-space]'
+.  tm doc-saved-space == '\*[doc-saved-space]'
+.  tm doc-space-mode == \n[doc-space-mode]
+.  tm doc-have-space == \n[doc-have-space]
+.  tm doc-have-slot == \n[doc-have-slot]
+.  tm doc-keep-type == \n[doc-keep-type]
+.  tm doc-display-depth == \n[doc-display-depth]
+.  tm doc-is-compact == \n[doc-is-compact]
+.
+.  nr doc-reg-Rd 0
+.  while (\n[doc-reg-Rd] <= \n[doc-display-depth]) \{\
+.    tm doc-display-type-stack\n[doc-reg-Rd] == '\*[doc-display-type-stack\n[doc-reg-Rd]]'
+.    tm doc-display-indent-stack\n[doc-reg-Rd] == \n[doc-display-indent-stack\n[doc-reg-Rd]]
+.    tm doc-display-ad-stack\n[doc-reg-Rd] == \n[doc-display-ad-stack\n[doc-reg-Rd]]
+.    tm doc-display-fi-stack\n[doc-reg-Rd] == \n[doc-display-fi-stack\n[doc-reg-Rd]]
+.    tm doc-display-ft-stack\n[doc-reg-Rd] == \n[doc-display-ft-stack\n[doc-reg-Rd]]
+.    tm doc-display-ps-stack\n[doc-reg-Rd] == \n[doc-display-ps-stack\n[doc-reg-Rd]]
+.    nr doc-reg-Rd +1
+.  \}
+.
+.  tm doc-fontmode-depth == \n[doc-fontmode-depth]
+.
+.  nr doc-reg-Rd 1
+.  while (\n[doc-reg-Rd] <= \n[doc-fontmode-depth]) \{\
+.    tm doc-fontmode-font-stack\n[doc-reg-Rd] == '\n[doc-fontmode-font-stack\n[doc-reg-Rd]]'
+.    tm doc-fontmode-size-stack\n[doc-reg-Rd] == '\n[doc-fontmode-size-stack\n[doc-reg-Rd]]'
+.    nr doc-reg-Rd +1
+.  \}
+.
+.  tm doc-list-depth == \n[doc-list-depth]
+.
+.  nr doc-reg-Rd 1
+.  while (\n[doc-reg-Rd] <= \n[doc-list-depth]) \{\
+.    tm doc-list-type-stack\n[doc-reg-Rd] == '\*[doc-list-type-stack\n[doc-reg-Rd]]'
+.    tm doc-list-have-indent-stack\n[doc-reg-Rd] == \n[doc-list-have-indent-stack\n[doc-reg-Rd]]
+.    tm doc-list-indent-stack\n[doc-reg-Rd] == \n[doc-list-indent-stack\n[doc-reg-Rd]]
+.    tm doc-compact-list-stack\n[doc-reg-Rd] == \n[doc-compact-list-stack\n[doc-reg-Rd]]
+.    tm doc-tag-prefix-stack\n[doc-reg-Rd] == '\*[doc-tag-prefix-stack\n[doc-reg-Rd]]'
+.    tm doc-tag-width-stack\n[doc-reg-Rd] == '\*[doc-tag-width-stack\n[doc-reg-Rd]]'
+.    tm doc-list-offset-stack\n[doc-reg-Rd] == \n[doc-list-offset-stack\n[doc-reg-Rd]]
+.    tm doc-enum-list-count-stack\n[doc-reg-Rd] == \n[doc-enum-list-count-stack\n[doc-reg-Rd]]
+.    nr doc-reg-Rd +1
+.  \}
+.
+.  tm doc-saved-Pa-font == '\*[doc-saved-Pa-font]'
+.  tm doc-curr-type == \n[doc-curr-type]
+.  tm doc-curr-arg == '\*[doc-curr-arg]'
+.  tm doc-diag-list-input-line-count == \n[doc-diag-list-input-line-count]
+.  tm doc-num-columns == \n[doc-num-columns]
+.  tm doc-column-indent-width == \n[doc-column-indent-width]
+.  tm doc-is-func == \n[doc-is-func]
+.  tm doc-have-old-func == \n[doc-have-old-func]
+.  tm doc-func-arg-count == \n[doc-func-arg-count]
+.  tm doc-func-arg == '\*[doc-func-arg]'
+.  tm doc-num-func-args == \n[doc-num-func-args]
+.  tm doc-func-args-processed == \n[doc-func-args-processed]
+.  tm doc-have-func == \n[doc-have-func]
+.  tm doc-is-reference == \n[doc-is-reference]
+.  tm doc-reference-count == \n[doc-reference-count]
+.  tm doc-author-count == \n[doc-author-count]
+.
+.  nr doc-reg-Rd 0
+.  while (\n[doc-reg-Rd] <= \n[doc-author-count]) \{\
+.    tm doc-author-name\n[doc-reg-Rd] == '\*[doc-author-name\n[doc-reg-Rd]]'
+.    nr doc-reg-Rd +1
+.  \}
+.
+.  tm doc-book-count == \n[doc-book-count]
+.  tm doc-book-name == '\*[doc-book-name]'
+.  tm doc-date-count == \n[doc-date-count]
+.  tm doc-date == '\*[doc-date]'
+.  tm doc-publisher-count == \n[doc-publisher-count]
+.  tm doc-publisher-name == '\*[doc-publisher-name]'
+.  tm doc-journal-count == \n[doc-journal-count]
+.  tm doc-journal-name == '\*[doc-journal-name]'
+.  tm doc-issue-count == \n[doc-issue-count]
+.  tm doc-issue-name == '\*[doc-issue-name]'
+.  tm doc-optional-count == \n[doc-optional-count]
+.  tm doc-optional-string == '\*[doc-optional-string]'
+.  tm doc-page-number-count == \n[doc-page-number-count]
+.  tm doc-page-number-string == '\*[doc-page-number-string]'
+.  tm doc-corporate-count == \n[doc-corporate-count]
+.  tm doc-corporate-name == '\*[doc-corporate-name]'
+.  tm doc-report-count == \n[doc-report-count]
+.  tm doc-report-name == '\*[doc-report-name]'
+.  tm doc-reference-title-count == \n[doc-reference-title-count]
+.  tm doc-reference-title-name == '\*[doc-reference-title-name]'
+.  tm doc-reference-title-name-for-book == '\*[doc-reference-title-name-for-book]'
+.  tm doc-url-count == \n[doc-url-count]
+.  tm doc-url-name == '\*[doc-url-name]'
+.  tm doc-volume-count == \n[doc-volume-count]
+.  tm doc-volume-name == '\*[doc-volume-name]'
+.  tm doc-have-author == \n[doc-have-author]
+.
+.  tm doc-document-title == '\*[doc-document-title]'
+.  tm doc-volume == '\*[doc-volume]'
+.  tm doc-section == '\*[doc-section]'
+.  tm doc-operating-system == '\*[doc-operating-system]'
+.  tm doc-date-string == '\*[doc-date-string]'
+.  tm doc-header-space == \n[doc-header-space]
+.  tm doc-footer-space == \n[doc-footer-space]
+.  tm doc-display-vertical == \n[doc-display-vertical]
+.  tm doc-header-string == '\*[doc-header-string]'
+.  tm doc-in-synopsis-section == \n[doc-in-synopsis-section]
+.  tm doc-in-library-section == \n[doc-in-library-section]
+.  tm doc-in-see-also-section == \n[doc-in-see-also-section]
+.  tm doc-in-files-section == \n[doc-in-files-section]
+.  tm doc-in-authors-section == \n[doc-in-authors-section]
+.
+.  tm END OF GLOBAL REGISTER DUMP
+..
+.
+.
+.ec
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/doc-ditroff b/tmac/doc-ditroff
deleted file mode 100644 (file)
index cb42c68..0000000
+++ /dev/null
@@ -1,334 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1991, 1993
-.\"    The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc-ditroff        8.1 (Berkeley) 06/08/93
-.\"
-.\"     %beginstrip%
-.
-.
-.eo
-.
-.\" use -rD=1 for double-sided printing
-.
-.if !r D .nr D 0
-.
-.\" use -rcR=1 to force the creation of a single, very long page
-.
-.if !r cR .nr cR 0
-.
-.\" use -rS={11,12} to change the font size from 10pt to 11pt or 12pt.
-.
-.if !r S .nr S 10
-.
-.
-.ec
-.
-.
-.ie        (\n[S] == 11) \{\
-.  ps 10.95z
-.  vs 13.6p
-.\}
-.el \{ .ie (\n[S] == 12) \{\
-.  ps 12z
-.  vs 14.5p
-.\}
-.el \{\
-.  ps 10z
-.  vs 12p
-.\}\}
-.
-.
-.\" the `doc-xx-font' strings must not be empty!
-.
-.ds doc-caption-font \f[R]\s[\n[.ps]u]
-.ds doc-caption-font2 \f[R]\s[\n[.ps]u]
-.ds doc-Ad-font \f[I]\s[\n[.ps]u]
-.ds doc-Ar-font \f[CO]\s[\n[.ps]u]
-.ds doc-Cm-font \f[CB]\s[\n[.ps]u]
-.ds doc-Em-font \f[I]\s[\n[.ps]u]
-.ds doc-Er-font \f[C]\s[\n[.ps]u]
-.ds doc-Ev-font \f[C]\s[\n[.ps]u]
-.ds doc-Fa-font \f[CO]\s[\n[.ps]u]
-.ds doc-Fd-font \f[CB]\s[\n[.ps]u]
-.ds doc-Fl-font \f[CB]\s[\n[.ps]u]
-.ds doc-Fn-font \f[CB]\s[\n[.ps]u]
-.ds doc-Ft-font \f[CO]\s[\n[.ps]u]
-.ds doc-Ic-font \f[CB]\s[\n[.ps]u]
-.ds doc-Li-font \f[C]
-.ds doc-Me-font \f[B]\s[\n[.ps]u]
-.ds doc-Nm-font \f[CB]\s[\n[.ps]u]
-.ds doc-No-font \f[R]\s[\n[.ps]u]
-.ds doc-Pa-font \f[C]\s[\n[.ps]u]
-.ds doc-Sh-font \f[B]\s[\n[.ps]u]
-.ds doc-Sy-font \f[B]\s[\n[.ps]u]
-.ds doc-Sx-font \f[B]\s[\n[.ps]u]
-.ds doc-Tn-font-shape \f[R]
-\# XXX: adapt to discrete LaTeX font sizes
-.ds doc-Tn-font-size \s[(\n[.ps]u - 1z)]
-.ds doc-Va-font \f[I]\s[\n[.ps]u]
-.ds doc-Xr-font \f[C]\s[\n[.ps]u]
-.
-.ds doc-left-parenthesis \f[R]\|(\|\f[]\s[\n[.ps]u]
-.ds doc-right-parenthesis \f[R]\|)\|\f[]\s[\n[.ps]u]
-.ds lp \f[R](\f[]\s[\n[.ps]u]
-.ds rp \f[R])\f[]\s[\n[.ps]u]
-.ds doc-left-bracket \f[R]\^[\^\f[]\s[\n[.ps]u]
-.ds doc-right-bracket \f[R]\^]\f[]\s[\n[.ps]u]
-.
-.tr *\[**]
-.
-.\" miscellaneous
-.nr doc-subheader-indent (\w\a\f[C],\au * 5u)
-.nr doc-paragraph-space .5v
-.
-.nr doc-digit-width \w'\0'u
-.nr doc-fixed-width \w\a\f[C]0\a
-.
-.eo
-.
-.
-.\" NS doc-header-space global register
-.\" NS   the space between header and body
-.
-.nr doc-header-space .5i
-.
-.
-.\" NS doc-footer-space global register
-.\" NS   the space between body and footer
-.
-.nr doc-footer-space .5i
-.
-.
-.\" NS doc-display-vertical global register
-.\" NS   vertical space between list elements etc.
-.
-.nr doc-display-vertical 0
-.
-.
-.\" NS doc-setup-page-layout macro
-.\" NS   set up page layout
-.\" NS
-.\" NS modifies:
-.\" NS   doc-display-vertical
-.
-.de doc-setup-page-layout
-.  ie r LL \
-.    ll \n[LL]u
-.  el \
-.    ll 6.5i
-.
-.  ie r LT \
-.    lt \n[LT]u
-.  el \
-.    lt 6.5i
-.
-.  po 1i
-.
-.  nr doc-display-vertical .5v
-..
-.
-.
-.ds doc-left-singlequote \[oq]
-.ds doc-right-singlequote \[cq]
-.
-.\" the following strings are `official'
-.ds <= \[<=]
-.ds >= \[>=]
-.ds Lq \[lq]
-.ds Rq \[rq]
-.ds ua \[ua]
-.ds aa \[aa]
-.ds ga \[ga]
-.ds q \[dq]
-.ds Pi \[*p]
-.ds Ne \[!=]
-.ds Le \[<=]
-.ds Ge \[>=]
-.ds Lt <
-.ds Gt >
-.ds Pm \[+-]
-.ds If \[if]
-.ds Na \f[I]NaN\f[]
-.ds Ba \f[R]|\f[]
-.ds Am &
-.
-.
-.\" NS doc-header-string global string
-.\" NS   the final string used for the manual page header
-.
-.ds doc-header-string
-.
-.
-.\" NS doc-setup-header macro
-.\" NS   install and initialize header and footer support
-.\" NS
-.\" NS modifies:
-.\" NS   doc-header-string
-.
-.de doc-setup-header
-.  ds doc-header-string "\*[doc-document-title]
-.  if !"\*[doc-section]"Null" \
-.    as doc-header-string \|(\*[doc-section])
-.
-.  wh 0 doc-header
-.  wh -1.25i doc-footer
-.
-.  br
-.
-.  e@ doc-end-macro
-..
-.
-.
-.\" NS doc-get-width macro
-.\" NS   computes the width of a string as a multiple of `doc-fixed-width':
-.\" NS   `.doc-get-width string'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-width
-.
-.de doc-get-width
-.  nr doc-width \w\a\f[C]\$1\a
-.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-.    ie (\n[doc-width] % \n[doc-fixed-width]) \
-.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-.    el \
-.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-.  \}
-.  el \{\
-.    ie \n[doc-width] \
-.      nr doc-width 1
-.    el \
-.      nr doc-width 0
-.  \}
-..
-.
-.
-.\" NS doc-get-arg-width macro
-.\" NS   computes the width of an argument as a multiple of
-.\" NS   `doc-fixed-width': `.doc-get-arg-width arg-index'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-width
-.
-.de doc-get-arg-width
-.  nr doc-width \w\a\f[C]\*[doc-arg\$1]\a
-.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-.    ie (\n[doc-width] % \n[doc-fixed-width]) \
-.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-.    el \
-.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-.  \}
-.  el \{\
-.    ie \n[doc-width] \
-.      nr doc-width 1
-.    el \
-.      nr doc-width 0
-.  \}
-..
-.
-.
-.\" NS Ql user macro
-.\" NS   quoted literal define
-.\" NS
-.\" NS modifies:
-.\" NS   doc-argXXX
-.\" NS   doc-arg-limit
-.\" NS   doc-arg-ptr
-.\" NS   doc-macro-name
-.\" NS   doc-spaceXXX
-.\" NS   doc-typeXXX
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Ql
-.\" NS   doc-reg-Ql1
-.\" NS   doc-reg-Ql2
-.\" NS
-.\" NS width register `Ql' set in doc-common
-.
-.de Ql
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Ql
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Ql argument ... (#\n[.c])
-.  \}
-.
-.  nr doc-reg-Ql (\n[doc-arg-ptr] + 1)
-.  doc-get-arg-width \n[doc-reg-Ql]
-.
-.  \" don't use quotes if we have more than two succeeding string arguments
-.  nr doc-reg-Ql +1
-.  if (\n[doc-arg-limit] >= \n[doc-reg-Ql]) \
-.    if (\n[doc-type\n[doc-reg-Ql]] == 2) \
-.      nr doc-width 3
-.
-.  \" make a difference in quotation style for strings longer
-.  \" than two characters
-.  ie (\n[doc-width] > 2) \
-.    Li
-.  el \{\
-.    ie \n[doc-arg-ptr] \{\
-.      \" we replace `Ql' with `Li'
-.      ds doc-arg\n[doc-arg-ptr] Li
-.      nr doc-arg-ptr -1
-.    \}
-.    el \{\
-.      \" if .Ql has been called directly, we must shift all elements in
-.      \" the argument vector to the right so that we can insert `Li'
-.      nr doc-reg-Ql \n[doc-arg-limit]
-.      nr doc-reg-Ql1 (\n[doc-arg-limit] + 1)
-.      while \n[doc-reg-Ql] \{\
-.        rn doc-arg\n[doc-reg-Ql] doc-arg\n[doc-reg-Ql1]
-.        rnn doc-type\n[doc-reg-Ql] doc-type\n[doc-reg-Ql1]
-.        rn doc-space\n[doc-reg-Ql] doc-space\n[doc-reg-Ql1]
-.        nr doc-reg-Ql -1
-.        nr doc-reg-Ql1 -1
-.      \}
-.      ds doc-arg1 Li
-.      nr doc-type1 1
-.      ds doc-space1
-.      nr doc-arg-limit +1
-.    \}
-.
-.    ds doc-quote-left "\*[doc-left-singlequote]
-.    ds doc-quote-right "\*[doc-right-singlequote]
-.    doc-enclose-string
-.  \}
-..
-.
-.
-.ec
-.
-.\" EOF
diff --git a/tmac/doc-ditroff-u b/tmac/doc-ditroff-u
new file mode 100644 (file)
index 0000000..18aa5db
--- /dev/null
@@ -0,0 +1,343 @@
+.\" Copyright (c) 1991, 1993
+.\"   The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in
+.\"    the documentation and/or other materials provided with the
+.\"    distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its
+.\"    contributors may be used to endorse or promote products derived
+.\"    from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS"
+.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+.\" PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
+.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc-ditroff        8.1 (Berkeley) 06/08/93
+.\"
+.\"     %beginstrip%
+.
+.
+.eo
+.
+.\" use -rD=1 for double-sided printing
+.
+.if !r D .nr D 0
+.
+.\" use -rcR=1 to force the creation of a single, very long page
+.
+.if !r cR .nr cR 0
+.
+.\" use -rS={11,12} to change the font size from 10pt to 11pt or 12pt.
+.
+.if !r S .nr S 10
+.
+.
+.ec
+.
+.
+.ie        (\n[S] == 11) \{\
+.  ps 10.95z
+.  vs 13.6p
+.\}
+.el \{ .ie (\n[S] == 12) \{\
+.  ps 12z
+.  vs 14.5p
+.\}
+.el \{\
+.  ps 10z
+.  vs 12p
+.\}\}
+.
+.
+.\" the 'doc-xx-font' strings must not be empty!
+.
+.ds doc-caption-font \f[R]\s[\n[.ps]u]
+.ds doc-caption-font2 \f[R]\s[\n[.ps]u]
+.ds doc-Ad-font \f[I]\s[\n[.ps]u]
+.ds doc-Ar-font \f[CO]\s[\n[.ps]u]
+.ds doc-Cm-font \f[CB]\s[\n[.ps]u]
+.ds doc-Em-font \f[I]\s[\n[.ps]u]
+.ds doc-Er-font \f[C]\s[\n[.ps]u]
+.ds doc-Ev-font \f[C]\s[\n[.ps]u]
+.ds doc-Fa-font \f[CO]\s[\n[.ps]u]
+.ds doc-Fd-font \f[CB]\s[\n[.ps]u]
+.ds doc-Fl-font \f[CB]\s[\n[.ps]u]
+.ds doc-Fn-font \f[CB]\s[\n[.ps]u]
+.ds doc-Ft-font \f[CO]\s[\n[.ps]u]
+.ds doc-Ic-font \f[CB]\s[\n[.ps]u]
+.ds doc-Li-font \f[C]
+.ds doc-Me-font \f[B]\s[\n[.ps]u]
+.ds doc-Nm-font \f[CB]\s[\n[.ps]u]
+.ds doc-No-font \f[R]\s[\n[.ps]u]
+.ds doc-Pa-font \f[C]\s[\n[.ps]u]
+.ds doc-Sh-font \f[B]\s[\n[.ps]u]
+.ds doc-Sy-font \f[B]\s[\n[.ps]u]
+.ds doc-Sx-font \f[B]\s[\n[.ps]u]
+.ds doc-Tn-font-shape \f[R]
+\# XXX: adapt to discrete LaTeX font sizes
+.ds doc-Tn-font-size \s[(\n[.ps]u - 1z)]
+.ds doc-Va-font \f[I]\s[\n[.ps]u]
+.ds doc-Xr-font \f[C]\s[\n[.ps]u]
+.
+.ds doc-left-parenthesis \f[R]\|(\|\f[]\s[\n[.ps]u]
+.ds doc-right-parenthesis \f[R]\|)\|\f[]\s[\n[.ps]u]
+.ds lp \f[R](\f[]\s[\n[.ps]u]
+.ds rp \f[R])\f[]\s[\n[.ps]u]
+.ds doc-left-bracket \f[R]\^[\^\f[]\s[\n[.ps]u]
+.ds doc-right-bracket \f[R]\^]\f[]\s[\n[.ps]u]
+.
+.tr *\[**]
+.
+.\" miscellaneous
+.nr doc-subheader-indent (\w\a\f[C],\au * 5u)
+.nr doc-paragraph-space .5v
+.
+.nr doc-digit-width \w'\0'u
+.nr doc-fixed-width \w\a\f[C]0\a
+.
+.eo
+.
+.
+.\" NS doc-header-space global register
+.\" NS   the space between header and body
+.
+.nr doc-header-space .5i
+.
+.
+.\" NS doc-footer-space global register
+.\" NS   the space between body and footer
+.
+.nr doc-footer-space .5i
+.
+.
+.\" NS doc-display-vertical global register
+.\" NS   vertical space between list elements etc.
+.
+.nr doc-display-vertical 0
+.
+.
+.\" NS doc-setup-page-layout macro
+.\" NS   set up page layout
+.\" NS
+.\" NS modifies:
+.\" NS   doc-display-vertical
+.
+.de doc-setup-page-layout
+.  ie r LL \
+.    ll \n[LL]u
+.  el \
+.    ll 6.5i
+.
+.  ie r LT \
+.    lt \n[LT]u
+.  el \
+.    lt 6.5i
+.
+.  po 1i
+.
+.  nr doc-display-vertical .5v
+..
+.
+.
+.ds doc-left-singlequote \[oq]
+.ds doc-right-singlequote \[cq]
+.
+.\" the following strings are 'official'
+.ds <= \[<=]
+.ds >= \[>=]
+.ds Lq \[lq]
+.ds Rq \[rq]
+.ds ua \[ua]
+.ds aa \[aa]
+.ds ga \[ga]
+.ds q \[dq]
+.ds Pi \[*p]
+.ds Ne \[!=]
+.ds Le \[<=]
+.ds Ge \[>=]
+.ds Lt <
+.ds Gt >
+.ds Pm \[+-]
+.ds If \[if]
+.ds Na \f[I]NaN\f[]
+.ds Ba \f[R]|\f[]
+.ds Am &
+.
+.
+.\" NS doc-header-string global string
+.\" NS   the final string used for the manual page header
+.
+.ds doc-header-string
+.
+.
+.\" NS doc-setup-header macro
+.\" NS   install and initialize header and footer support
+.\" NS
+.\" NS modifies:
+.\" NS   doc-header-string
+.
+.de doc-setup-header
+.  ds doc-header-string "\*[doc-document-title]
+.  if !"\*[doc-section]"Null" \
+.    as doc-header-string \|(\*[doc-section])
+.
+.  wh 0 doc-header
+.  wh -1.25i doc-footer
+.
+.  br
+.
+.  e@ doc-end-macro
+..
+.
+.
+.\" NS doc-get-width macro
+.\" NS   computes the width of a string as a multiple of
+.\" NS   'doc-fixed-width': '.doc-get-width string'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-width
+.
+.de doc-get-width
+.  nr doc-width \w\a\f[C]\$1\a
+.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
+.    ie (\n[doc-width] % \n[doc-fixed-width]) \
+.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
+.    el \
+.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
+.  \}
+.  el \{\
+.    ie \n[doc-width] \
+.      nr doc-width 1
+.    el \
+.      nr doc-width 0
+.  \}
+..
+.
+.
+.\" NS doc-get-arg-width macro
+.\" NS   computes the width of an argument as a multiple of
+.\" NS   'doc-fixed-width': '.doc-get-arg-width arg-index'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-width
+.
+.de doc-get-arg-width
+.  nr doc-width \w\a\f[C]\*[doc-arg\$1]\a
+.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
+.    ie (\n[doc-width] % \n[doc-fixed-width]) \
+.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
+.    el \
+.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
+.  \}
+.  el \{\
+.    ie \n[doc-width] \
+.      nr doc-width 1
+.    el \
+.      nr doc-width 0
+.  \}
+..
+.
+.
+.\" NS Ql user macro
+.\" NS   quoted literal define
+.\" NS
+.\" NS modifies:
+.\" NS   doc-argXXX
+.\" NS   doc-arg-limit
+.\" NS   doc-arg-ptr
+.\" NS   doc-macro-name
+.\" NS   doc-spaceXXX
+.\" NS   doc-typeXXX
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Ql
+.\" NS   doc-reg-Ql1
+.\" NS   doc-reg-Ql2
+.\" NS
+.\" NS width register 'Ql' set in doc-common
+.
+.de Ql
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Ql
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Ql argument ... (#\n[.c])
+.  \}
+.
+.  nr doc-reg-Ql (\n[doc-arg-ptr] + 1)
+.  doc-get-arg-width \n[doc-reg-Ql]
+.
+.  \" don't use quotes if we have more than two succeeding string
+.  \" arguments
+.  nr doc-reg-Ql +1
+.  if (\n[doc-arg-limit] >= \n[doc-reg-Ql]) \
+.    if (\n[doc-type\n[doc-reg-Ql]] == 2) \
+.      nr doc-width 3
+.
+.  \" make a difference in quotation style for strings longer
+.  \" than two characters
+.  ie (\n[doc-width] > 2) \
+.    Li
+.  el \{\
+.    ie \n[doc-arg-ptr] \{\
+.      \" we replace 'Ql' with 'Li'
+.      ds doc-arg\n[doc-arg-ptr] Li
+.      nr doc-arg-ptr -1
+.    \}
+.    el \{\
+.      \" if .Ql has been called directly, we must shift all elements in
+.      \" the argument vector to the right so that we can insert 'Li'
+.      nr doc-reg-Ql \n[doc-arg-limit]
+.      nr doc-reg-Ql1 (\n[doc-arg-limit] + 1)
+.      while \n[doc-reg-Ql] \{\
+.        rn doc-arg\n[doc-reg-Ql] doc-arg\n[doc-reg-Ql1]
+.        rnn doc-type\n[doc-reg-Ql] doc-type\n[doc-reg-Ql1]
+.        rn doc-space\n[doc-reg-Ql] doc-space\n[doc-reg-Ql1]
+.        nr doc-reg-Ql -1
+.        nr doc-reg-Ql1 -1
+.      \}
+.      ds doc-arg1 Li
+.      nr doc-type1 1
+.      ds doc-space1
+.      nr doc-arg-limit +1
+.    \}
+.
+.    ds doc-quote-left "\*[doc-left-singlequote]
+.    ds doc-quote-right "\*[doc-right-singlequote]
+.    doc-enclose-string
+.  \}
+..
+.
+.
+.ec
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/doc-nroff b/tmac/doc-nroff
deleted file mode 100644 (file)
index 8f5e0ca..0000000
+++ /dev/null
@@ -1,277 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1991, 1993
-.\"    The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc-nroff  8.1 (Berkeley) 06/08/93
-.\"
-.\"     %beginstrip%
-.
-.
-.eo
-.
-.\" use -rD=1 for double-sided printing
-.
-.if !r D .nr D 0
-.
-.\" use -rcR=0 to have multiple pages instead of a single, very long page
-.
-.if !r cR .nr cR 1
-.
-.\" the following switch is ignored in nroff mode
-.
-.nr S 10
-.
-.\" the `doc-xx-font' strings must not be empty!
-.
-.ds doc-caption-font \f[R]
-.ds doc-caption-font2 \f[R]
-.ds doc-Ad-font \f[I]
-.ds doc-Ar-font \f[I]
-.ds doc-Cm-font \f[B]
-.ds doc-Em-font \f[I]
-.ds doc-Er-font \f[R]
-.ds doc-Ev-font \f[R]
-.ds doc-Fa-font \f[I]
-.ds doc-Fd-font \f[B]
-.ds doc-Fl-font \f[B]
-.ds doc-Fn-font \f[B]
-.ds doc-Ft-font \f[I]
-.ds doc-Ic-font \f[B]
-.ds doc-Li-font \f[R]
-.ds doc-Me-font \f[B]
-.ds doc-Nm-font \f[B]
-.ds doc-No-font \f[R]
-.ds doc-Pa-font \f[I]
-.ds doc-Sh-font \f[B]
-.ds doc-Sy-font \f[B]
-.ds doc-Sx-font \f[I]
-.ds doc-Tn-font-shape \f[R]
-.ds doc-Tn-font-size
-.ds doc-Va-font \f[I]
-.ds doc-Xr-font \f[R]
-.
-.ds doc-left-parenthesis \f[R](\f[]
-.ds doc-right-parenthesis \f[R])\f[]
-.ds lp \f[R](\f[]
-.ds rp \f[R])\f[]
-.ds doc-left-bracket \f[R][\f[]
-.ds doc-right-bracket \f[R]]\f[]
-.
-.\" miscellaneous
-.nr doc-subheader-indent .5i
-.nr doc-paragraph-space 1v
-.
-.ec
-.nr doc-digit-width \w'\0\0'u
-.nr doc-fixed-width \w'0'
-.eo
-.
-.
-.\" NS doc-header-space global register
-.\" NS   the space between header and body
-.
-.nr doc-header-space 0.5i
-.
-.
-.\" NS doc-footer-space global register
-.\" NS   the space between body and footer
-.
-.nr doc-footer-space 0.5i
-.
-.
-.\" NS doc-display-vertical global register
-.\" NS   vertical space between list elements etc.
-.
-.nr doc-display-vertical 0
-.
-.
-.\" NS doc-setup-page-layout macro
-.\" NS   set up page layout
-.\" NS
-.\" NS modifies:
-.\" NS   doc-display-vertical
-.
-.de doc-setup-page-layout
-.  ie r LL \
-.    ll \n[LL]u
-.  el \
-.    ll 78n
-.
-.  ie r LT \
-.    lt \n[LT]u
-.  el \
-.    lt 78n
-.
-.  po 0i
-.
-.  nr doc-display-vertical 1v
-.  ad l
-.  na
-..
-.
-.
-.ec
-.
-.ds doc-left-singlequote \[oq]
-.ds doc-right-singlequote \[cq]
-.
-.\" the following strings are `official'
-.ds <= \[<=]
-.ds >= \[>=]
-.ds aa \[aa]
-.ds ga \[ga]
-.ds q \[dq]
-.ds Ne \[!=]
-.ds Le \[<=]
-.ds Ge \[>=]
-.ds Lt <
-.ds Gt >
-.ds Pm \[+-]
-.ds Na \f[I]NaN\f[]
-.ds Ba \f[R]|\f[]
-.ds Am &
-.
-.\" Unicode TTYs have all glyph forms; for other TTY character sets we need
-.\" character representations which are different from GNU troff's standard
-.\" forms.
-.ie '\*[.T]'utf8' \{\
-.  ds Rq \[rq]
-.  ds Lq \[lq]
-.  ds ua \[ua]
-.  ds Pi \[*p]
-.  ds If \[if]
-.\}
-.el \{\
-.  ds Rq ''
-.  ds Lq ``
-.  ds ua ^
-.  ds Pi pi
-.  ds If infinity
-.\}
-.
-.eo
-.
-.
-.\" NS doc-header-string global string
-.\" NS   the final string used for the manual page header
-.
-.ds doc-header-string
-.
-.
-.\" NS doc-setup-header macro
-.\" NS   install and initialize header and footer support
-.\" NS
-.\" NS modifies:
-.\" NS   doc-header-string
-.
-.de doc-setup-header
-.  ds doc-header-string "\*[doc-document-title]
-.  if !"\*[doc-section]"Null" \
-.    as doc-header-string (\*[doc-section])
-.
-.  ie \n[cR] \
-.    doc-header
-.  el \{\
-.    wh 0 doc-header
-.    wh -1.167i doc-footer
-.  \}
-.
-.  e@ doc-end-macro
-..
-.
-.
-.\" NS doc-get-width macro
-.\" NS   computes the width of a string as a multiple of `doc-fixed-width':
-.\" NS   `.doc-get-width string'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-width
-.
-.de doc-get-width
-.  nr doc-width \w\a\$1\a
-.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-.    ie (\n[doc-width] % \n[doc-fixed-width]) \
-.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-.    el \
-.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-.  \}
-.  el \
-.    nr doc-width 0
-..
-.
-.
-.\" NS doc-get-arg-width macro
-.\" NS   computes the width of an argument as a multiple of
-.\" NS   `doc-fixed-width': `.doc-get-arg-width arg-index'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-width
-.
-.de doc-get-arg-width
-.  nr doc-width \w\a\*[doc-arg\$1]\a
-.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
-.    ie (\n[doc-width] % \n[doc-fixed-width]) \
-.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
-.    el \
-.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
-.  \}
-.  el \
-.    nr doc-width 0
-..
-.
-.
-.\" NS Ql user macro
-.\" NS   quoted literal define
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Ql' set in doc-common
-.
-.de Ql
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \
-.      ds doc-macro-name Ql
-.    el \
-.      tm Usage: .Ql argument ... (#\n[.c])
-.  \}
-.
-.  ds doc-quote-left "\*[doc-left-singlequote]
-.  ds doc-quote-right "\*[doc-right-singlequote]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.ec
-.
-.\" EOF
diff --git a/tmac/doc-nroff-u b/tmac/doc-nroff-u
new file mode 100644 (file)
index 0000000..bd96f0b
--- /dev/null
@@ -0,0 +1,283 @@
+.\" Copyright (c) 1991, 1993
+.\"   The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in
+.\"    the documentation and/or other materials provided with the
+.\"    distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its
+.\"    contributors may be used to endorse or promote products derived
+.\"    from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS"
+.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+.\" PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
+.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc-nroff  8.1 (Berkeley) 06/08/93
+.\"
+.\"     %beginstrip%
+.
+.
+.eo
+.
+.\" use -rD=1 for double-sided printing
+.
+.if !r D .nr D 0
+.
+.\" use -rcR=0 for multiple pages instead of a single, very long page
+.
+.if !r cR .nr cR 1
+.
+.\" the following switch is ignored in nroff mode
+.
+.nr S 10
+.
+.\" the 'doc-xx-font' strings must not be empty!
+.
+.ds doc-caption-font \f[R]
+.ds doc-caption-font2 \f[R]
+.ds doc-Ad-font \f[I]
+.ds doc-Ar-font \f[I]
+.ds doc-Cm-font \f[B]
+.ds doc-Em-font \f[I]
+.ds doc-Er-font \f[R]
+.ds doc-Ev-font \f[R]
+.ds doc-Fa-font \f[I]
+.ds doc-Fd-font \f[B]
+.ds doc-Fl-font \f[B]
+.ds doc-Fn-font \f[B]
+.ds doc-Ft-font \f[I]
+.ds doc-Ic-font \f[B]
+.ds doc-Li-font \f[R]
+.ds doc-Me-font \f[B]
+.ds doc-Nm-font \f[B]
+.ds doc-No-font \f[R]
+.ds doc-Pa-font \f[I]
+.ds doc-Sh-font \f[B]
+.ds doc-Sy-font \f[B]
+.ds doc-Sx-font \f[I]
+.ds doc-Tn-font-shape \f[R]
+.ds doc-Tn-font-size
+.ds doc-Va-font \f[I]
+.ds doc-Xr-font \f[R]
+.
+.ds doc-left-parenthesis \f[R](\f[]
+.ds doc-right-parenthesis \f[R])\f[]
+.ds lp \f[R](\f[]
+.ds rp \f[R])\f[]
+.ds doc-left-bracket \f[R][\f[]
+.ds doc-right-bracket \f[R]]\f[]
+.
+.\" miscellaneous
+.nr doc-subheader-indent .5i
+.nr doc-paragraph-space 1v
+.
+.ec
+.nr doc-digit-width \w'\0\0'u
+.nr doc-fixed-width \w'0'
+.eo
+.
+.
+.\" NS doc-header-space global register
+.\" NS   the space between header and body
+.
+.nr doc-header-space 0.5i
+.
+.
+.\" NS doc-footer-space global register
+.\" NS   the space between body and footer
+.
+.nr doc-footer-space 0.5i
+.
+.
+.\" NS doc-display-vertical global register
+.\" NS   vertical space between list elements etc.
+.
+.nr doc-display-vertical 0
+.
+.
+.\" NS doc-setup-page-layout macro
+.\" NS   set up page layout
+.\" NS
+.\" NS modifies:
+.\" NS   doc-display-vertical
+.
+.de doc-setup-page-layout
+.  ie r LL \
+.    ll \n[LL]u
+.  el \
+.    ll 78n
+.
+.  ie r LT \
+.    lt \n[LT]u
+.  el \
+.    lt 78n
+.
+.  po 0i
+.
+.  nr doc-display-vertical 1v
+.  ad l
+.  na
+..
+.
+.
+.ec
+.
+.ds doc-left-singlequote \[oq]
+.ds doc-right-singlequote \[cq]
+.
+.\" the following strings are 'official'
+.ds <= \[<=]
+.ds >= \[>=]
+.ds aa \[aa]
+.ds ga \[ga]
+.ds q \[dq]
+.ds Lq \[lq]
+.ds Rq \[rq]
+.ds Ne \[!=]
+.ds Le \[<=]
+.ds Ge \[>=]
+.ds Lt <
+.ds Gt >
+.ds Pm \[+-]
+.ds Na \f[I]NaN\f[]
+.ds Ba \f[R]|\f[]
+.ds Am &
+.
+.\" Unicode TTYs have all glyph forms; for other TTY character sets we
+.\" need character representations which are different from GNU troff's
+.\" standard forms.
+.ie '\*[.T]'utf8' \{\
+.  ds ua \[ua]
+.  ds Pi \[*p]
+.  ds If \[if]
+.\}
+.el \{\
+.  ds ua ^
+.  ds Pi pi
+.  ds If infinity
+.\}
+.
+.eo
+.
+.
+.\" NS doc-header-string global string
+.\" NS   the final string used for the manual page header
+.
+.ds doc-header-string
+.
+.
+.\" NS doc-setup-header macro
+.\" NS   install and initialize header and footer support
+.\" NS
+.\" NS modifies:
+.\" NS   doc-header-string
+.
+.de doc-setup-header
+.  ds doc-header-string "\*[doc-document-title]
+.  if !"\*[doc-section]"Null" \
+.    as doc-header-string (\*[doc-section])
+.
+.  ie \n[cR] \
+.    doc-header
+.  el \{\
+.    wh 0 doc-header
+.    wh -1.167i doc-footer
+.  \}
+.
+.  e@ doc-end-macro
+..
+.
+.
+.\" NS doc-get-width macro
+.\" NS   computes the width of a string as a multiple of
+.\" NS   'doc-fixed-width': '.doc-get-width string'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-width
+.
+.de doc-get-width
+.  nr doc-width \w\a\$1\a
+.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
+.    ie (\n[doc-width] % \n[doc-fixed-width]) \
+.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
+.    el \
+.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
+.  \}
+.  el \
+.    nr doc-width 0
+..
+.
+.
+.\" NS doc-get-arg-width macro
+.\" NS   computes the width of an argument as a multiple of
+.\" NS   'doc-fixed-width': '.doc-get-arg-width arg-index'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-width
+.
+.de doc-get-arg-width
+.  nr doc-width \w\a\*[doc-arg\$1]\a
+.  ie (\n[doc-width] >= \n[doc-fixed-width]) \{\
+.    ie (\n[doc-width] % \n[doc-fixed-width]) \
+.      nr doc-width ((\n[doc-width] / \n[doc-fixed-width]) + 1)
+.    el \
+.      nr doc-width (\n[doc-width] / \n[doc-fixed-width])
+.  \}
+.  el \
+.    nr doc-width 0
+..
+.
+.
+.\" NS Ql user macro
+.\" NS   quoted literal define
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Ql' set in doc-common
+.
+.de Ql
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \
+.      ds doc-macro-name Ql
+.    el \
+.      tm Usage: .Ql argument ... (#\n[.c])
+.  \}
+.
+.  ds doc-quote-left "\*[doc-left-singlequote]
+.  ds doc-quote-right "\*[doc-right-singlequote]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.ec
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/doc-old.tmac b/tmac/doc-old.tmac
deleted file mode 100644 (file)
index 4478f53..0000000
+++ /dev/null
@@ -1,1857 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1990 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc-old.tmac       5.2 (Berkeley) 3/13/91
-.\"     Slightly modified by jjc@jclark.com to work with groff as well.
-.\"
-.\" Assume nroff on crt's only if cR==1
-.if n .nr cR 1
-.\"    STRING CONSTANTS
-.\"    DITROFF
-.if t \{\
-.\"    Address Style
-.ds aD \fI
-.\"    Argument Reference Style
-.ds aR \f(CO
-.\"    Interactive Command Modifier (flag)
-.ds cM \f(CB
-.\"    Emphasis (in the English sense - usually italics)
-.ds eM \fI
-.\"    Errno Style
-.ds eR \fC
-.\"    Environment Variable Style
-.ds eV \fC
-.\"    Command Line Flag Style
-.ds fL \f(CB
-.\"    Header String Style
-.ds Hs \fR
-.\"    Interactive Command Style
-.ds iC \f(CB
-.\"    Literal Style
-.ds lI \fC
-.\"    Left Parenthesis Style
-.ds lP \fR\|(\|\fP
-.\"    Right Parenthesis Style
-.ds rP \fR\|)\|\fP
-.\"    Options Open Bracket Style
-.ds lB \fR\^[\^\fP
-.\"    Options Open Bracket Style
-.ds rB \fR\^]\fP
-.\"    Name (subject of manpage) Style
-.ds nM \f(CB
-.\"    Pathname Style
-.ds pA \fC
-.\"    Accepted punctuation string for -mdoc syntax
-.ds Pu \fR[.,:;(\^)[\^]\fR]
-.\"    Section Header Style
-.ds Sp \s12\fB
-.\" .ds sT \s-2\fR
-.\"    Symbolic Emphasis (boldface)
-.ds sY \f(CB
-.\"    Generic Variable Style
-.ds vA \fI
-.\"    Volume Title Style
-.ds Vs \fR
-.\"    Cross Reference STyle (man page only)
-.ds xR \fC
-.\"    Math *
-.tr *\(**
-.\}
-.\"    NROFF
-.if n \{\
-.\"    Address Style
-.ds aD \fI
-.\"    Argument Reference Style
-.ds aR \fI
-.\"    Interactive Command Modifier (flag)
-.ds cM \fB
-.\"    Emphasis (in the English sense - usually italics)
-.ds eM \fI
-.\"    Errno Style
-.ds eR \fR
-.\"    Environment Variable Style
-.ds eV \fR
-.\"    Command Line Flag Style
-.ds fL \fB
-.\"    Header String Style
-.ds Hs \fR
-.\"    Interactive Command Style
-.ds iC \fB
-.\"    Literal Style
-.ds lI \fR
-.\"    Left Parenthesis Style
-.ds lP \fR\|(\fP
-.\"    Right Parenthesis Style
-.ds rP \fR\|)\fP
-.\"    Options Open Bracket Style
-.ds lB \fR\|[\|\fP
-.\"    Options Open Bracket Style
-.ds rB \fR\|]\fP
-.\"    Name (subject of manpage) Style
-.ds nM \fB
-.\"    Pathname Style
-.ds pA \fI
-.\"    Accepted punctuation string for -mdoc syntax
-.ds Pu [.,;:()[]]
-.\"    Section Header Style
-.ds Sp \s12\fB
-.\"    .ds sT \s-2\fR
-.\" .ds sT \s-2\fR
-.\"    Symbol, Mode or Mask Style
-.ds sY \fB
-.\"    Generic Variable Style
-.ds vA \fI
-.\"    Volume Title Style
-.ds Vs \fR
-.\"    Cross Reference Style (man page only)
-.ds xR \fR
-.\}
-.\"    INDENTS - Subheaders(sI), Text(Ti) between Section Headers and Subsects
-.if t \{\
-.      nr sI \w'\fC,'u*5
-.      nr Ti \n(sIu
-.\}
-.if n \{\
-.      nr sI .5i
-.      nr Ti .5i
-.\}
-.\"    Flags for macros names which are used only for .Ds
-.nr dI 6n
-.nr dC 1
-.nr dL 1
-.nr dR 1
-.\"    INDENT WIDTHS (for Lists)
-.\"    Width Needed for Address Tag (indented amount)
-.nr Ad 12n
-.\"    Angle Quote Width
-.nr Aq 12n
-.\"    Width Needed for Argument
-.nr Ar 12n
-.\"    Width Needed for Column offset
-.nr Cl 15n
-.\"    Width neeeded for Interactive Command Modifier
-.nr Cm 10n
-.\"    Width Needed for Complex Expressions
-.nr Cx 20n
-.\"    Indent Width Needed for Display (right and left margins)
-.nr Ds 6n
-.\"    Double Quote Width
-.nr Dq 12n
-.\"    tI is dependent on Ds and used by .Dp
-.nr tI \n(Dsu
-.\"    Width Needed for Display
-.nr Em 10n
-.\"    Width Needed for Errno Types
-.nr Er 15n
-.\"    Width Needed for Environment Variables
-.nr Ev 15n
-.\"    Width Needed for Example Indent
-.nr Ex 10n
-.\"    Width Needed for Flag
-.nr Fl 10n
-.\"    Width Needed for Function
-.nr Fn 16n
-.\"    Width neeeded for Interactive Command Name
-.nr Ic 10n
-.\"    Width Needed for Constant
-.nr Li 16n
-.\"    Width Needed for Math Symbol ? not sure if needed
-.nr Ms 6n
-.\"    Width Needed for Name
-.nr Nm 10n
-.\"    Width Needed for Option Begin
-.nr Ob 14n
-.\"    Width Needed for Option End
-.nr Oe 14n
-.\"    Width Needed for Option (one line)
-.nr Op 14n
-.\"    Width Needed for Pathname
-.nr Pa 32n
-.\"    Parenthesis Quote Width
-.nr Pq 12n
-.\"    Single Quote Width
-.nr Sq 12n
-.\"    Width Needed for Symbols, Modes or Masks
-.nr Sy 6n
-.\"    Width needed for default or unknown text width
-.nr Tx 22n
-.\"    Width Needed for Generic Variable
-.nr Va 12n
-.\"    Width Needed for Cross Reference, should the cross ref be annotated.
-.nr Xr 10n
-.\" PARAGRAPH SPACE
-.if t \{\
-.      nr Pp .5v
-.\}
-.if n \{\
-.      nr Pp 1v
-.\}
-.\"    PAGE LAYOUT
-.\" .Li Tagged Paragraph Style - zero if break on oversized tag
-.\" one if add em space and continue filling line.
-.nr tP 0
-.\" Page Layout Macro
-.de pL
-.\"    DITROFF
-.ie t \{\
-.\" Header Margin
-.      nr Hm .5i
-.\" Footer Margin
-.      nr Fm .5i
-.\" Line length
-.      nr ll 5.5i
-.\" Line length
-.      ll 5.5i
-.\" Title length
-.      nr lt 5.5i
-.\" Title length
-.      lt 5.5i
-.\" Page offset
-.      nr po 1.56i
-.\" Page offset
-.      po 1.56i
-.\" Vertical space distance (from Section headers/Lists/Subsections)
-.      nr vV .5v
-.\" em space
-.      ds tP \|\|\|\|\|\|
-.\}
-.el \{\
-.\" Line length
-.      nr ll 78n
-.      ll 78n
-.\" Title length
-.      nr lt 78n
-.\" Title length
-.      lt 78n
-.\" Page offset
-.      nr po 0i
-.\" Page offset
-.      po 0i
-.\" Vertical space distance (from Section headers/Lists/Subsections)
-.      nr vV 1v
-.\" em space
-.      ds tP \0\0
-.\" Test for crt
-.      ie \\n(cR .nr Hm 0
-.      el .nr Hm .5i
-.\" Footer Margin
-.      nr Fm .5i
-.\}
-..
-.\" Adjustment mode
-.if n \{\
-.ad l
-.na
-..
-.\}
-.\" PREDEFINED STRINGS
-.if t \{\
-.      ds <= \(<=
-.      ds >= \(>=
-.      ds Lq \&``
-.      ds Rq \&''
-.      ds ua \(ua
-.      ds aa \(aa
-.      ds ga \(ga
-.      ds sR \(aa
-.      ds sL \(ga
-.\}
-.if n \{\
-.      ds <= \&<\&=
-.      ds >= \&>\&=
-.       ds Rq ''
-.       ds Lq ``
-.      ds ua ^
-.      ds aa '
-.      ds ga `
-.      ds sL `
-.      ds sR '
-.\}
-.\" Note: The distances from the bottom or top of the page are set
-.\" in headers (macro .hK): to -1.25 for troff, and -1.167 for nroff
-.\" bottoms, and top is 0.
-.\"
-.\"    .Dt Document/manpage_title section/chapter volume
-.\"            The \{ and \} is necessary as roff doesn't nest if-elses
-.\"            properly, especially with .ds.
-.\"    TODO: separate Dt into Dt, Ch and Vt for supp docs.
-.de Dt
-.ds dT UNTITLED
-.ds vT Local
-.ds cH Null
-.\"    Volume and Section Number or Chapter Number
-.if !"\\$1"" .ds dT \\$1
-.if !"\\$2"" \{\
-.      ds cH \\$2
-.      if "\\$3"" \{\
-.              \" Volume Title if none given
-.              if \\$2>=1 .if \\$2<=8 \{\
-.                      ds vT UNIX Reference Manual
-.                      if \\$2>1 .if \\$2<6 .ds vT UNIX Programmer's Manual
-.                      if "\\$2"8" .ds vT UNIX System Manager's Manual
-.              \}
-.              if "\\$2"unass"  .ds vT DRAFT
-.              if "\\$2"draft"  .ds vT DRAFT
-.              if "\\$2"paper"  .ds vT Null
-.      \}
-.\}
-.if !"\\$3"" \{\
-.      \" Volume Title if given
-.      if "\\$3"USD"   .ds vT UNIX User's Supplementary Documents
-.      if "\\$3"PS1"   .ds vT UNIX Programmers's Supplementary Documents
-.      if "\\$3"AMD"   .ds vT UNIX Ancestral Manual Documents
-.      if "\\$3"SMM"   .ds vT UNIX System Manager's Manual
-.      if "\\$3"URM"   .ds vT UNIX Reference Manual
-.      if "\\$3"PRM"   .ds vT UNIX Programmers's Manual
-.      if "\\$3"IND"   .ds vT UNIX Manual Master Index
-.      if "\\$3"CON"   .ds vT UNIX Contributed Software Manual
-.      if "\\$3"IMP"   .ds vT UNIX Implementation Notes
-.      if "\\$3"HOW"   .ds vT UNIX How Pocket Manual
-.      if "\\$3"LOCAL" .ds vT UNIX Local Manual
-.      if "\\*(vT"Local" .ds vT \\$3
-.\}
-..
-.\"
-.\"    .Os Operating System/Standard and Release or Version Number
-.\"
-.de Os
-.ds oS Null
-.if "\\$1"" \{\
-.      ds oS \fIBSD Experimental\fP
-.\" .  ds oS (\fIBag o' Bits\fP)
-.\}
-.if "\\$2"" \{\
-.      ds o1 Non-Null
-.\}
-.if "\\$1"ATT"   \{\
-.      ds oS AT&T
-.      if "\\$2""    .as oS \0UNIX
-.      if "\\$2"7th" .as oS \07th Edition
-.      if "\\$2"7"   .as oS \07th Edition
-.      if "\\$2"III" .as oS \0System III
-.      if "\\$2"3"   .as oS \0System III
-.      if "\\$2"V"   .as oS \0System V
-.      if "\\$2"V.2" .as oS \0System V Release 2
-.      if "\\$2"V.3" .as oS \0System V Release 3
-.      if "\\$2"V.4" .as oS \0System V Release 4
-.\}
-.if "\\$1"BSD" \{\
-.      if "\\$2"3"    .ds oS 3rd Berkeley Distribution
-.      if "\\$2"4"    .ds oS 4th Berkeley Distribution
-.      if "\\$2"4.1"  .ds oS 4.1 Berkeley Distribution
-.      if "\\$2"4.2"  .ds oS 4.2 Berkeley Distribution
-.      if "\\$2"4.3"  .ds oS 4.3 Berkeley Distribution
-.      if "\\$2"4.3+" .ds oS 4.3+tahoe Berkeley Distribution
-.\}
-.if "\\*(oS"Null" .ds oS \\$1
-.if "\\*(o1"Non-Null" .as oS \0\\$2
-.rm o1
-..
-.\"
-.\" Standards
-.\"
-.\" .de St
-.\" .ds sT Null
-.\" .if "\\$1"POSIX" \{\
-.\" .  ds sT IEEE Standard POSIX
-.\" .  if \\$2 .as sT \0\\$2
-.\" .\}
-.\" .if "\\$1"ANSI" \{\
-.\" .  ds sT ANSI Standard
-.\" .  if \\$2 .as sT \0\\$2
-.\" .\}
-.\" .if "\\$1"ISO" \{\
-.\" .  ds sT ISO Standard
-.\" .  if \\$2 .as sT \0\\$2
-.\" .\}
-.\" .if "\\*(sT"Null" .ds sR \\$3
-.\" ..
-.\"
-.\" .de Gp
-.\" .ie !"\\$1"" .ds gP \&\\$1 \\$2 \\$3 \\$4 \\$5
-.\" .el .ds gP Null
-.\" ..
-.\"
-.\"
-.de Dd
-.nr aa 0
-.ie \\n(.$>0 \{\
-.      ie \\n(.$<4 \{\
-.              ds dD \\$1 \\$2 \\$3
-.      \}
-.      el .tm Usage: .Dd Month Day, Year (e.g July 4, 1977).
-.\}
-.el \{\
-.      ds dD Epoch
-.\}
-..
-.\"
-.\"    House Keeping Macro - Make sense of dT, cH, vT, sT, gP and dS
-.\"    TODO: Try to get else's for efficiency
-.\"    TODO: GET RID OF .wh -1.167i (its in v7)
-.\"
-.\"
-.de hK
-.nr % 1
-.ds hT \\*(dT
-.if !"\\*(cH"Null" \{\
-.      ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|)
-.      el .as hT \\|(\\|\\*(cH\\|)
-.\}
-.if "\\*(cH"Null" .if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|)
-.if t \{\
-.      wh 0 hM
-.      wh -1.25i fM
-.\}
-.if n \{\
-.      ie \\n(cR \{\
-.              hM
-.              wh -0v fM
-.      \}
-.      el \{\
-.              wh 0 hM
-.              wh -1.167i fM
-.      \}
-.\}
-.if n \{\
-.      if \\n(nl==0:\\n(nl==-1 'bp
-.\}
-.if t 'bp
-.em lM
-..
-.\"    Header Macro
-.\"
-.de hM
-.ev 1
-.pL
-.if !\\n(cR 'sp \\n(Hmu
-.tl @\\*(Hs\\*(hT\fP@\\*(Vs\\*(vT\fP@\\*(Hs\\*(hT\fP@
-'sp \\n(Hmu
-.ev
-..
-.\"
-.de fM
-.ev 1
-.pL
-.if !\\n(cR \{\
-'      sp \\n(Fmu
-.      tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@
-'      bp
-.\}
-.if \\n(cR \{\
-.\" .  tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@
-.\" '  bp
-.\}
-.ev
-..
-.de lM
-.fl
-.if \\n(cR \{\
-.       fM
-.       pl \\n(nlu
-.\}
-..
-.de Pp
-.sp \\n(Ppu
-.ne 2
-.ns
-..
-.de Lp
-.Pp
-..
-.de LP
-.tm Not a \-mdoc command: .LP
-..
-.de PP
-.tm Not a \-mdoc command: .PP
-..
-.de pp
-.tm Not a \-mdoc command: .pp
-..
-.de Co
-.tm Not a \-mdoc command: .Co
-..
-.nr z. 1
-.nr z, 1
-.nr z: 1
-.nr z; 1
-.nr z) 1
-.nr z( 1
-.nr z[ 1
-.nr z] 1
-.\" This is disgusting, troff not parse if stmt properly
-.nr z1 0
-.nr z2 0
-.nr z3 0
-.nr z4 0
-.nr z5 0
-.nr z6 0
-.nr z7 0
-.nr z8 0
-.nr z9 0
-.nr z0 0
-.nr z# 0
-.\"
-.de Ad
-.ie \\n(.$==0 \{\
-.       tm Usage: .Ad address [...] \\*(Pu
-.\}
-.el \{\
-.       ds sV \\*(aD
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.\" Command Line Argument Macro
-.\"
-.de Ar
-.ie \\n(.$==0 \{\
-.       ie !"\\*(iM"" .as f1 \&[\|\\*(aRfile\ ...\fP\|]
-.       el \&[\|\\*(aRfile\ ...\fP\|]
-.\}
-.el \{\
-.       ds sV \\*(aR
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Em
-.ie \\n(.$==0 \{\
-.       tm Usage: .Em text ... \\*(Pu
-.\}
-.el \{\
-.       ds sV \\*(eM
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Er
-.ie \\n(.$==0 \{\
-.       tm Usage: .Er ERRNOTYPE ... \\*(Pu
-.       \}
-.el \{\
-.       ds sV \\*(eR
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Ev
-.ie \\n(.$==0 \{\
-.      tm Usage: .Ev ENVIRONMENT_VARIABLE(s) ... \\*(Pu
-.      \}
-.el \{\
-.      ds sV \\*(eV
-.      nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      ft \\n(cF
-.\}
-..
-.\"
-.\" Flag Name Macro
-.\"
-.de Fl
-.ie \\n(.$==0 \{\
-.       ie !"\\*(iM"" .as f1 \&\\*(fL\-\fP
-.       el \&\\*(fL\-\fP
-.\}
-.el \{\
-.       nr rZ 0
-.       sW \\$1
-.       if (\\n(sW==1&\\n(.$==1) .rZ \\$1
-.       ds sV \\*(fL
-.       nr cF \\n(.f
-.       ie \\n(rZ \{\
-.               ie "\\*(iM"" .ds f1 \&\\*(sV\-\f\\n(cF\\$1
-.               el \&\\*(sV\-\f\\n(cF\\$1
-.       \}
-.      el \{\
-.             ie "\\*(iM"" .ds f1 \&\\*(sV
-.             el .as f1 \&\\*(sV
-.             fB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.             ft \\n(cF
-.      \}
-.\}
-..
-.\"    Interactive Commands Macro
-.\"
-.de Ic
-.ie \\n(.$==0 \{\
-.      tm Usage: .Ic Interactive Commands(s) ... \\*(Pu
-.\}
-.el \{\
-.       ds sV \\*(iC
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.\" Interactive Command Modifiers (flags)
-.\"
-.de Cm
-.ie \\n(.$==0 \{\
-.      tm Usage: .Cm Interactive Command Modifier(s) ... \\*(Pu
-.\}
-.el \{\
-.       ds sV \\*(cM
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Li
-.ie \\n(.$==0 \{\
-.       tm Usage: .Li literal ... \\*(Pu
-.       \}
-.el \{\
-.       ds sV \\*(lI
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\" If in nroff or any other case where the default font
-.\" is constant width, and literal means zilch, single quote instead.
-.ie n \{\
-.de Ql
-.      ie \\n(.$==0 \{\
-.             tm Usage: .Ql literal ... \\*(Pu
-.       \}
-.      el \{\
-.              Sq \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      \}
-..
-.\}
-.el \{\
-.de Ql
-.      ie \\n(.$==0 \{\
-.             tm Usage: .Ql literal ... \\*(Pu
-.       \}
-.      el \{\
-.              Li \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      \}
-..
-.\}
-.\"
-.de Nm
-.ie \\n(.$==0 \{\
-.      if "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu
-.      ie !"\\*(iM"" .as f1 \&\\*(nM\\*(n1\\$1\fP
-.      el \&\\*(nM\\*(n1\\$1\fP
-.\}
-.el \{\
-.      ds sV \\*(nM
-.      nr cF \\n(.f
-.      if \\n(nS \{\
-.              rs
-.              in -\\n(iSu
-.              ie \\n(nS>1 .br
-.              el \{\
-.                      sW \\$1
-.                      nr iS ((\\n(sW+1)*\\n(fW)u
-.              \}
-.              in +\\n(iSu
-.              ti -\\n(iSu
-.              nr nS \\n(nS+1
-.      \}
-.      if "\\*(n1"" .ds n1 \\$1
-.      ie "\\*(iM"" .ds f1 \&\\*(sV
-.      el .as f1 \&\\*(sV
-.      nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      ft \\n(cF
-.\}
-..
-.\"
-.de Pa
-.ie \\n(.$==0 \{\
-\&\\*(pA~\fP
-.\}
-.el \{\
-.       ds sV \\*(pA
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Sy
-.ie \\n(.$==0 \{\
-.       tm Usage: .Sy Symbolic Text ... \\*(Pu
-.       \}
-.el \{\
-.       ds sV \\*(sY
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Ms
-.ie \\n(.$==0 \{\
-.       tm Usage: .Ms Math Symbol ... \\*(Pu
-.       \}
-.el \{\
-.       ds sV \\*(sY
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de Va
-.ie \\n(.$==0 \{\
-.       tm Usage: .Va variable_name(s) ... \\*(Pu
-.\}
-.el \{\
-.       ds sV \\*(vA
-.       nr cF \\n(.f
-.       ie "\\*(iM"" .ds f1 \&\\*(sV
-.       el .as f1 \&\\*(sV
-.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ft \\n(cF
-.\}
-..
-.\"
-.de nB
-.hy 0
-.if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)?
-.ie \\n(.$>1 \{\
-.      rZ \\$1
-.      ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP
-.      el .as f1 \&\\$1
-.      rZ \\$2
-.      if !\\n(rZ \{\
-.              ie !"\\*(iM""\{\
-.\"                    I surrender
-.                      if "\\*(iM"Tp" .as f1 \&\ \&
-.                      if "\\*(iM"Dp" .as f1 \&\ \&
-.                      if "\\*(iM"Op" .as f1 \&\ \&
-.                      if "\\*(iM"Cx" .as f1 \&\ \&
-.                      if "\\*(iM"Dq" .as f1 \& \&
-.                      if "\\*(iM"Sq" .as f1 \& \&
-.                      if "\\*(iM"Pq" .as f1 \& \&
-.                      if "\\*(iM"Aq" .as f1 \& \&
-.              \}
-.              el .as f1 \& \&
-.      \}
-.      nB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.\}
-.el \{\
-.      rZ \\$1
-.      ie \\n(rZ .as f1 \&\f\\n(cF\\$1
-.      el .as f1 \&\\$1\f\\n(cF
-.      if "\\*(iM"" \{\&\\*(f1
-.              ds f1
-.      \}
-.      hy
-.\}
-..
-.de fB
-.hy 0
-.if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)?
-.ie \\n(.$>1 \{\
-.      rZ \\$1
-.      ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP
-.      el \{\
-.              ie "\\$1"-" .as f1 \&\-\-
-.              el .as f1 \&\-\\$1
-.      \}
-.      rZ \\$2
-.      if !\\n(rZ \{\
-.              ie !"\\*(iM""\{\
-.\"                    I surrender
-.                      if "\\*(iM"Tp" .as f1 \&\ \&
-.                      if "\\*(iM"Dp" .as f1 \&\ \&
-.                      if "\\*(iM"Op" .as f1 \&\ \&
-.                      if "\\*(iM"Cx" .as f1 \&\ \&
-.                      if "\\*(iM"Dq" .as f1 \& \&
-.                      if "\\*(iM"Sq" .as f1 \& \&
-.                      if "\\*(iM"Pq" .as f1 \& \&
-.                      if "\\*(iM"Aq" .as f1 \& \&
-.              \}
-.              el .as f1 \& \&
-.      \}
-.      fB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.\}
-.el \{\
-.      rZ \\$1
-.      ie \\n(rZ .as f1 \&\f\\n(cF\\$1
-.      el \{\
-.              ie "\\$1"-" .as f1 \&\-\-\f\\n(cF
-.              el .as f1 \&\-\\$1\f\\n(cF
-.      \}
-.      if "\\*(iM"" \{\&\\*(f1
-.              ds f1
-.      \}
-.      hy
-.\}
-..
-.\"
-.\" Single quoted Items
-.\" eF, sB g[0-9] and f2
-.de Sq
-.nr eF 0
-.ie \\n(.$==0 \{\
-.       ie "\\*(iM"" \&\\*(sL\&\\*sR
-.       el .as f1 \&\\*(sL\&\\*(sR
-.\}
-.el \{\
-.       ie "\\*(iM"" \{\
-.              ds f1 \&\\*(sL
-.              ds iM Sq
-.      \}
-.       el .as f1 \&\\*(sL
-.       sB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      ie \\n(eF>0 .\\*(g1 \\*(g2 \\*(g3 \\*(g4 \\*(g5 \\*(g6 \\*(g7 \\*(g8
-.      el .as f1 \\*(g0
-.      as f1 \\*(sR
-.      if !"\\*(f2"" .as f1 \\*(f2
-.      if "\\*(iM"Sq" \{\
-\&\\*(f1
-.              ds f1
-.              ds iM
-.      \}
-.      ds f2
-.      rm  g0 g1 g2 g3 g4 g5 g6 g7 g8 g9
-.      nr eF 0
-.\}
-..
-.\"
-.\" Double quoted Items
-.de Dq
-.nr Ef 0
-.ie \\n(.$==0 \{\
-.       ie "\\*(iM"" \&\\*(Lq\&\\*(Rq
-.       el .as f1 \&\\*(Lq\&\\*(Rq
-.\}
-.el \{\
-.       ie "\\*(iM"" \{\
-.               ds f1 \&\\*(Lq
-.               ds iM Dq
-.       \}
-.       el .as f1 \&\\*(Lq
-.       Sb \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ie \\n(Ef>0 .\\*(k1 \\*(k2 \\*(k3 \\*(k4 \\*(k5 \\*(k6 \\*(k7 \\*(k8
-.       el .as f1 \\*(k0
-.       as f1 \\*(Rq
-.       if !"\\*(f4"" .as f1 \\*(f4
-.       if "\\*(iM"Dq" \{\
-\&\\*(f1
-.               ds f1
-.               ds iM
-.       \}
-.       ds f4
-.       rm  k0 k1 k2 k3 k4 k5 k6 k7 k8 k9
-.       nr Ef 0
-.\}
-..
-.\"
-.\" Parenthesis quoted Items
-.de Pq
-.nr pQ 0
-.ie \\n(.$==0 \{\
-.       ie "\\*(iM"" \&(\&)
-.       el .as f1 \&(\&)
-.\}
-.el \{\
-.       ie "\\*(iM"" \{\
-.               ds f1 \&(
-.               ds iM Pq
-.       \}
-.       el .as f1 \&(
-.       pB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       ie \\n(pQ>0 .\\*(y1 \\*(y2 \\*(y3 \\*(y4 \\*(y5 \\*(y6 \\*(y7 \\*(y8
-.       el .as f1 \\*(y0
-.       as f1 \&)
-.       if !"\\*(f3"" .as f1 \\*(f3
-.       if "\\*(iM"Pq" \{\
-\&\\*(f1
-.               ds f1
-.               ds iM
-.       \}
-.       ds f3
-.       rm  y0 y1 y2 y3 y4 y5 y6 y7 y8 y9
-.       nr pQ 0
-.\}
-..
-.\" eF, sB g[0-9] and f2
-.de sB
-.hy 0
-.ie \\n(.$==0 .tm Sick Logic: macro sB
-.el \{\
-.      ie \\n(eF>=1 .nr eF \\n(eF+1
-.      el \{\
-.              mN \\$1
-.              if \\n(mN .nr eF \\n(eF+1
-.      \}
-.       rZ \\$1
-.       ie \\n(rZ .as f2 \\$1
-.       el \{\
-.              ie \\n(eF<1 .as g\\n(eF \\$1
-.              el .as g\\n(eF \\$1
-.      \}
-.       if \\n(.$>1 \{\
-.              rZ \\$2
-.              if \\n(rZ==0 \{\
-.                      if \\n(eF<1 \{\
-.                              as g\\n(eF \& \&
-.                      \}
-.              \}
-.              sB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      \}
-.\}
-..
-.de Sb
-.hy 0
-.ie \\n(.$==0 .tm Sick Logic: macro Sb
-.el \{\
-.       ie \\n(Ef>=1 .nr Ef \\n(Ef+1
-.      el \{\
-.              mN \\$1
-.              if \\n(mN .nr Ef \\n(Ef+1
-.      \}
-.       rZ \\$1
-.       ie \\n(rZ .as f4 \\$1
-.       el \{\
-.               ie \\n(Ef<1 .as k\\n(Ef \\$1
-.               el .as k\\n(Ef \\$1
-.       \}
-.       if \\n(.$>1 \{\
-.               rZ \\$2
-.               if \\n(rZ==0 \{\
-.                       if \\n(Ef<1 \{\
-.                               as k\\n(Ef \& \&
-.                       \}
-.               \}
-.               Sb \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       \}
-.\}
-..
-.de pB
-.hy 0
-.ie \\n(.$==0 .tm Sick Logic: macro pB
-.el \{\
-.       ie \\n(pQ>=1 .nr pQ \\n(pQ+1
-.       el \{\
-.               mN \\$1
-.               if \\n(mN .nr pQ \\n(pQ+1
-.       \}
-.       rZ \\$1
-.       ie \\n(rZ .as f3 \\$1
-.       el \{\
-.               ie \\n(pQ<1 .as y\\n(pQ \\$1
-.               el .as y\\n(pQ \\$1
-.       \}
-.       if \\n(.$>1 \{\
-.               rZ \\$2
-.               if \\n(rZ==0 \{\
-.                       if \\n(pQ<1 \{\
-.                               as y\\n(pQ \& \&
-.                       \}
-.               \}
-.               pB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       \}
-.\}
-..
-.de aQ
-.hy 0
-.ie \\n(.$==0 .tm Bad Syntax: .Aq
-.el \{\
-.       ie \\n(aQ>=1 .nr aQ \\n(aQ+1
-.       el \{\
-.               mN \\$1
-.               if \\n(mN .nr aQ \\n(aQ+1
-.       \}
-.       rZ \\$1
-.       ie \\n(rZ .as aZ \\$1
-.       el \{\
-.               ie \\n(aQ<1 .as a\\n(aQ \\$1
-.               el .as a\\n(aQ \\$1
-.       \}
-.       if \\n(.$>1 \{\
-.               rZ \\$2
-.               if \\n(rZ==0 \{\
-.                       if \\n(aQ<1 \{\
-.                               as a\\n(aQ \& \&
-.                       \}
-.               \}
-.               aQ \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.       \}
-.\}
-..
-.\" Angle Bracket Quoted Items
-.de Aq
-.nr aQ 0
-.ie \\n(.$==0 \{\
-.       ie "\\*(iM"" \&<\&>
-.       el .as f1 \&<\&>
-.\}
-.el \{\
-.       ie "\\*(iM"" \{\
-.               ds f1 \&<
-.               ds iM Aq
-.       \}
-.       el .as f1 \&<
-.       aQ \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-.       ie \\n(aQ>0 .\\*(a1 \\*(a2 \\*(a3 \\*(a4 \\*(a5 \\*(a6 \\*(a7 \\*(a8
-.       el .as f1 \\*(a0
-.       as f1 \&>
-.       if !"\\*(aZ"" .as f1 \\*(aZ
-.       if "\\*(iM"Aq" \{\
-\&\\*(f1
-.               ds f1
-.               ds iM
-.       \}
-.       ds aZ
-.       rm  a0 a1 a2 a3 a4 a5 a6 a7 a8
-.       nr aQ 0
-.\}
-..
-.\" macro Name test, return macro register value if true
-.if \n(.g .ig
-.de mN
-.nr mN 0
-.sW \\$1
-.if \\n(sW==2 \{\
-.      if \\n(\\$1 .nr mN \\n(\\$1
-.\}
-..
-.if !\n(.g .ig
-.de mN
-.nr mN 0
-.if \A'\\$1' \{\
-.      sW \\$1
-.      if \\n(sW==2 \{\
-.              if \\n(\\$1 .nr mN \\n(\\$1
-.      \}
-.\}
-..
-.\" Punctuation test (using z registers), return 1 if true
-.if \n(.g .ig
-.de rZ
-.nr rZ 0
-.sW \\$1
-.if \\n(sW==1 \{\
-.      if \\n(z\\$1==1 \{\
-.              nr rZ 1
-.      \}
-.\}
-..
-.if !\n(.g .ig
-.de rZ
-.nr rZ 0
-.if \A'\\$1' \{\
-.      sW \\$1
-.      if \\n(sW==1 \{\
-.              if \\n(z\\$1==1 \{\
-.                      nr rZ 1
-.              \}
-.      \}
-.\}
-..
-.\"
-.\" sW returns number of characters in a string
-.if t \{\
-.nr fW \w'\fC,'
-.de sW
-.nr sW \w'\fC\\$1'
-.\}
-.if n \{\
-.nr fW \w'0'
-.de sW
-.nr sW \w'\\$1'
-.\}
-.ie \\n(sW>=\\n(fW \{\
-.      ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1
-.      el .nr sW \\n(sW/\\n(fW
-.\}
-.el .nr sW 0
-..
-.\"    Option Expression -
-.\"    TODO - add line overflow check (right!)
-.nr eP 0
-.ds e1
-.nr oE 0
-.nr hP 0
-.ds hP
-.nr Ep 0
-.de Op
-.hy 0
-.if "\\*(iM"" \{\
-.      ds iM Op
-.       ds f1 \&
-.\}
-.as f1 \&\\*(lB
-.\" .tm Op:  \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.dO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.ie !"\\$1"Cx" .oE
-.el .nr oE \\n(oE+1
-..
-.\"
-.\" just for mike, with every bite of garlic in mind (oops, i mean burp).
-.\" dO: go dOwn an argument vector and test each argument to see if
-.\" a macro name or punctuation. stash in respective place along
-.\" with its arguments.
-.nr oO 0
-.nr oP 0
-.nr aO 0
-.de dO
-.mN \\$1
-.ie \\n(mN \{\
-.       if \\n(oP  \{\
-.               if \\n(hP \{\
-.                       nr oZ 1
-.                       oZ
-.                       Oz
-.               \}
-.               if \\n(e1==1 \{\
-.\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9
-.               \}
-.               uO
-.              if !(\\n(oO:\\n(aO) .as f1 \& \&
-.      \}
-.       ie "\\$1"Op" \{\
-.               as f1 \&\\*(lB
-.               nr aO \\n(aO+1
-.       \}
-.      el \{\
-.               nr eP \\n(eP+1
-.               ds e\\n(eP \\$1
-.               nr e\\n(eP 1
-.       \}
-.\}
-.el \{\
-.\" .tm dO: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE
-.      rZ \\$1
-.      ie \\n(rZ \{\
-.\" .tm dO:rZ: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(eP
-.              nr hP \\n(hP+1
-.              ds h\\n(hP \\$1
-.      \}
-.      el \{\
-.\" .tm dO:word $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE
-.              if \\n(eP==0:\\n(e\\n(eP==1 .nr eP \\n(eP+1
-.              if \\n(eZ .as e\\n(eP \& \&
-.              as e\\n(eP " \&\\$1
-.\" .          ds e\\n(eP \&\\$1
-.              nr eZ \\n(eZ+1
-.      \}
-.\}
-.nr oP 1
-.ie \\n(.$>1 \{\
-.      dO \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.\}
-.el \{\
-.     ie \\n(e1 \{\
-.\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9
-.      \}
-.     el \{\
-.      as f1 \\*(e1
-.      \}
-.\}
-..
-.\" handle old style arguments such as the arg -Idir
-.\" in adb, .Oo is a toggle.
-.de Oo
-.ie \\n(oO .nr oO 0
-.el .nr oO 1
-..
-.\" stash punctuation
-.de oZ
-.if \\n(hP>=\\n(oZ \{\
-.      nr eP \\n(eP+1
-.      ds e\\n(eP \\*(h\\n(oZ
-.      nr oZ \\n(oZ+1
-.      oZ
-.\}
-..
-.\" clean up punctuation vector
-.de Oz
-.if \\n(hP>0 \{\
-.      rm h\\n(hP
-.      nr hP \\n(hP-1
-.      Oz
-.\}
-..
-.\" uO: go back up created vector cleaning it up along the way
-.de uO
-.if \\n(eP>0 \{\
-.      rm e\\n(eP
-.      rr e\\n(eP
-.      nr eP \\n(eP-1
-.      nr oP 0
-.      nr eZ 0
-.      uO
-.\}
-..
-.\" option end
-.de oE
-.uO
-.ie \\n(hP \{\
-.       as f1 \\*(rB\\*(h1\\*(h2\\*(h3
-.      Oz
-.      nr oZ 0
-.\}
-.el \{\
-.      as f1 \\*(rB
-.\}
-.ie "\\*(iM"Op" \{\
-.      if \\n(aO .aO
-.if t \{\
-.      if (\\n(.lu-\\n(.ku-\\n(.ou-(2*\\n(fWu))<\w'\fC\\*(f1'u .br
-.\}
-.if n \{\
-.      nr aa \w'\\*(f1'u
-.\" .  nr qq \\n(.lu-\\n(.ku-\\n(.ou
-.\" \&aa == \\n(aa, f1==\\*(f1, qq==\\n(qq
-.      if (\\n(.lu-\\n(.ku-\\n(.ou-\\n(aau)<=(8*\\n(fWu) .br
-.\}
-\&\\*(f1
-.      ds iM
-.      ds f1
-.      hy
-.\}
-.el .nr oE \\n(oE-1
-..
-.de aO
-.as f1 \\*(rB
-.nr aO \\n(aO-1
-.if \\n(aO >0 .aO
-..
-.\"
-.de Xr
-.if \\n(.$<=1 \{\
-.      ie \\n(.$==1 \{\
-.              if !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP
-.              if "\\*(iM"" \&\\*(xR\\$1\fP
-.      \}
-.      el .tm Xr Usage: .Xr manpage_name [section#] \\*(Pu
-.\}
-.if \\n(.$==2 \{\
-.      rZ \\$2
-.      ie "\\*(iM"" \{\
-.              ie \\n(rZ \&\\*(xR\\$1\fP\\$2
-.              el \&\\*(xR\\$1\fP(\\$2)
-.      \}
-.      el \{\
-.              ie \\n(rZ .as f1 \&\\*(xR\\$1\fP\\$2
-.              el .as f1 \&\\*(xR\\$1\fP(\\$2)
-.      \}
-.\}
-.if \\n(.$>=3 \{\
-.      rZ \\$2
-.      ie \\n(rZ \{\
-.              ie !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8
-.              el \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8
-.      \}
-.      el \{\
-.              rZ \\$3
-.              ie \\n(rZ \{\
-.                      if !"\\*(iM"" \{\
-.                           as f1 \&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8
-.                      \}
-.                      if "\\*(iM"" \{\
-\&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8
-.                      \}
-.              \}
-.              el \{\
-.                      tm rZ = \\n(rZ  the arg is \\$3
-.                      tm Xr-XX Usage: .Xr manpage_name [section#] \\*(Pu
-.              \}
-.      \}
-.\}
-..
-.\"
-.\"
-.de Ex
-.tm Ex defunct, Use .Dl: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.\" Display (one) Line of text.
-.de Dl
-.ie "\\*(iM"" \{\
-'      ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-.      in \\n(.iu+\\n(Dsu
-.      mN \\$1
-.      ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      el \{\
-.              nr cF \\n(.f
-.\"     Literal font is none specified
-\&\\*(lI\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.              ft \\n(cF
-.      \}
-.      in \\n(.iu-\\n(Dsu
-.\}
-.el \{\
-.      mN \\$1
-.      ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-.      el \{\
-.              nr cF \\n(.f
-.              ds f1 \&\\*(lI\\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-.              as f1 \&\f\\n(cF
-.      \}
-.\}
-..
-.\"
-.\"
-.\" user set Tagged Paragraph Width (used in both Dp and Tp)
-.de Tw
-.ie \\n(.$==0 \{\
-.      nr aa 0
-.\}
-.el \{\
-.      mN \\$1
-.      ie \\n(sW>2 \{\
-.              nr tW (\\n(sW+3)*\\n(fWu)
-.      \}
-.      el \{\
-.              ie \\n(mN .nr tW \\n(mN
-.              el .nr tW \\$1
-.      \}
-.      nr tF 1
-.\}
-..
-.\"
-.de Dw
-.Tw \\$1
-..
-.\"
-.de Di
-.ie \\n(.$==0 \{\
-.      nr tI \\n(Dsu
-.\}
-.el \{\
-.      sW \\$1
-.      if \\n(sW>=2 \{\
-.              nr tI \\$1u
-.      \}
-.      if \\n(sW<2 \{\
-.              if "\\$1"L" \{\
-.                      nr tI 0
-.              \}
-.      \}
-.\}
-..
-.\" tagged paragraph
-.\" initialize baby stack variables
-.nr np 0
-.nr p1 0
-.ds s\n(np
-.\"
-.de Tp
-.ie "\\$1"" .pE p s np
-.el \{\
-.      ds iM Tp
-.      mN \\$1
-.      ie \\n(tF \{\
-.              ds tC Tw
-.              nr tC 1
-.              nr tF 0
-.      \}
-.      el \{\
-.              if !"Tw"\\*(s\\n(np" \{\
-.                      ie \\n(mN \{\
-.                              ds tC \\$1
-.                              nr tW \\n(mN
-.                      \}
-.                      el \{\
-.                              ds tC Tx
-.                              nr tW \\n(Tx
-.                      \}
-.                      if !"\\*(tC"\\*(s\\n(np" .nr tC 1
-.              \}
-.      \}
-.      sp \\n(vVu
-.      if !\\n(cR .ne 2
-.      if \\n(tC \{\
-.              nr np \\n(np+1
-.              nr p\\n(np \\n(tW
-.              ds s\\n(np \\*(tC
-.              nr tC 0
-.              ds tC
-.              in \\n(.iu+\\n(p\\n(npu
-.      \}
-.      ie \\n(mN \{\
-.              ds f1
-.              \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.              if !"\\$1"Cx" .pT st p np
-.      \}
-.      el \{\
-.              br
-.              ev 1
-.              fi
-.              di Td
-\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.              br
-.              di
-.              ev
-.              na
-.              ds tD \\*(Td\\
-.              pT di p np
-.      \}
-.\}
-..
-.\"
-.\"
-.\" Complex Expression Macro
-.\"
-.\"     TODO: add length across line boundary check (like Li)
-.de Cx
-.hy 0
-.ie \\n(.$==0 \{\
-.      if "\\*(iM"Cx" \{\
-.              ds iM
-.              if \\n(oE .oE
-\&\\*(f1
-.              ds f1
-.      \}
-.      if "\\*(iM"Tp" .pT st p np
-.      if "\\*(iM"Dp" .pT st q mp
-.\}
-.el \{\
-.      if "\\*(iM"" \{\
-.              ds iM Cx
-.              ds f1 \&
-.      \}
-.      mN \\$1
-.\" Here are the args: `\\$1'  `\\$2'  `\\$3'  `\\$4'
-.      ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      el \{\
-.              as f1 \&\\$1
-.              if \\n(.$>1 .Cx \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      \}
-.\}
-..
-.\" Prefix string in default font to content specified string
-.de Pf
-.Cx \\$1
-.\\$2 \\$3 \\$4 \\$5
-.Cx
-..
-.\" Suffix string in default font to content specified string
-.de Sf
-.Cx \\$1 \\$2
-.Cx \\$3
-.Cx
-..
-.\" Simple Option Begin
-.de Ob
-.hy 0
-.ie "\\*(iM"" \{\
-.      ev 2
-.      fi
-.      di oB
-.\}
-.el \{\
-.tm shouldn't be here
-.      as f1 \&[
-.      mN \\$1
-.      ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      el \{\
-.              as f1 \&\\$1
-.              if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      \}
-.\}
-..
-.de Oc
-.as f1 \&\\$1
-.if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.de Oe
-.hy 0
-.ie "\\*(iM"" \{\
-.      br
-.      di
-.      ev
-.      ds bO \\*(oB\\
-\&[\\*(bO\&]
-.\}
-.el \{\
-.      as f1 \&]
-.\}
-..
-.\" White space for Cx
-.de Ws
-.Cx \&\ \&
-..
-.\" tagged paragraph
-.\" initialize baby stack variables
-.nr mp 0
-.nr q1 0
-.ds r\n(np
-.\"
-.\" Complex Dp tag
-.de Dc
-.Dp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-..
-.\" Complex Tp tag
-.de Tc
-.Tp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-..
-.\" Tag with a flag and an argument with a space
-.de Ta
-.if "\\$2"" \{\
-.      Tp Fl \\$1
-.\}
-.el \{\
-.      Tp Fl \\$1
-.      Cx \&\ \&
-.      Ar \\$2 \\$3
-.      Cx
-.\}
-..
-.de Da
-.Dp Cx Fl \\$1
-.Ws
-.Ar \\$2 \\$3
-.Cx
-..
-.de To
-.Tp Cx Fl \\$1
-.Ar \\$2 \\$3
-.Cx
-..
-.de Do
-.Dp Cx Fl \\$1
-.Ar \\$2 \\$3
-.Cx
-..
-.\" Blended tag toggle
-.de Bt
-.ie \\n(tP==0 .nr tP 1
-.el .nr tP 0
-..
-.\" Bullet paragraph
-.de Bu
-.Tp Sy \&\(bu
-..
-.\" Display tagged paragraph
-.de Dp
-.ie "\\$1"" \{\
-.      pE q r mp
-.      sp \\n(vVu
-.\}
-.el \{\
-.       ds iM Dp
-.       mN \\$1
-.       ie \\n(tF \{\
-.               ds tC Tw
-.               nr tC 1
-.               nr tF 0
-.       \}
-.       el \{\
-.               if !"Tw"\\*(r\\n(mp" \{\
-.                       ie \\n(mN \{\
-.                               ds tC \\$1
-.                               nr tW \\n(mN
-.                       \}
-.                       el \{\
-.                               ds tC Tx
-.                               nr tW \\n(Tx
-.                       \}
-.                       if !"\\*(tC"\\*(r\\n(mp" .nr tC 1
-.               \}
-.       \}
-.       if !\\n(cR .ne 2
-.       if \\n(tC \{\
-.               nr mp \\n(mp+1
-.               nr q\\n(mp \\n(tW
-.               ds r\\n(mp \\*(tC
-.               nr tC 0
-.               ds tC
-.              ie \\n(tIu==\\n(Dsu .nr i\\n(mp \\n(Dsu
-.              el \{\
-.                      nr i\\n(mp \\n(tIu
-.                      nr tI \\n(Dsu
-.              \}
-.                      in \\n(.iu+\\n(i\\n(mpu
-.              sp \\n(vVu
-.              in \\n(.iu+\\n(\\q\\n(mpu
-.       \}
-.       ie \\n(mN \{\
-.               \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.               if !"\\$1"Cx" .pT st q mp
-.       \}
-.       el \{\
-.               br
-.               ev 1
-.               fi
-.               di Td
-\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.               br
-.               di
-.               ev
-.               na
-.               ds tD \\*(Td\\
-.               pT di q mp
-.       \}
-.\}
-..
-.\"
-.\" .pE number_stack string_stack counter
-.de pE
-.ie "\\$3"mp" \{\
-.      in \\n(.iu-(\\n(\\$1\\n(\\$3u)-(\\n(i\\n(mpu)
-.      rr i\\n(mp
-.\}
-.el .in \\n(.iu-\\n(\\$1\\n(\\$3u
-.\" .in \\n(.iu-\\n(\\$1\\n(\\$3u
-.if \\n(\\$3<=0 .tm Extraneous call .Tp or .Dp
-.rr \\$1\\n(\\$3
-.rm \\$2\\n(\\$3
-.nr \\$3 \\n(\\$3-1
-.ds iM
-..
-.\"
-.\" .pT [st or di] number_stack counter
-.de pT
-.ie "\\$1"st" \{\
-.      nr bb \\n(\\$2\\n(\\$3u
-.      ti -\\n(bbu
-.      ie (\\n(\\$2\\n(\\$3u-2n)<=\w'\\*(f1'u \{\&\\*(f1\\*(tP
-.              if \\n(tP==0 .br
-.      \}
-.      el \\*(f1\h'|\\n(\\$2\\n(\\$3u'\c
-.\}
-.el \{\
-.       ti -\\n(\\$2\\n(\\$3u
-.      ie (\\n(\\$2\\n(\\$3u-2n)<=\\n(dlu \{\&\\*(tD\\*(tP
-.             if !\\n(tP .br
-.      \}
-.      el \\*(tD\h'|\\n(\\$2\\n(\\$3u'\c
-.      if t 'ad
-.\}
-.      ds iM
-.      ds f1
-'fi
-..
-.\"
-.\" The new SH
-.\"
-.de Sh
-.\" set Sh state off, check for list state before calling indent (.In)
-.nr nS 0
-.nr sE 0
-.ie "\\$1"NAME" \{\
-.\"    name state on, housekeep (headers & footers)
-.      hK
-'      in 0
-.\}
-.el \{\
-.      if "\\$1"SYNOPSIS" .nr nS 1
-.      in 0
-.\}
-.pL
-'sp
-.ns
-.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-.if !\\n(cR .ne 3
-'fi
-\&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
-\&\fP\&
-.in \\n(.iu+\\n(Tiu
-.if "\\$1"SEE" .nr sE 1
-.ns
-..
-.\"
-.\" Nd minus sign for an en dash used in .Sh Name
-.de Nd
-\&\-\& \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.de Ss
-.sp
-.ti -.25i
-\&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
-\&\fP\&
-.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-.if !\\n(cR .ne 2
-.br
-..
-.\"    .if "\\$1"Ss" .in \\n(.iu+\\n(sIu
-.\"..
-.\"
-.\"
-.\" Column Macro
-.\"
-.hy 0
-.de Cw
-.ie \\n(.$==0 \{\
-.      br
-.      in \\n(.iu-\\n(eWu
-.      ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
-.\}
-.el \{\
-.      Pp
-.      if \\n(.$==1 \{\
-.              ta \w'\\$1    'u
-.              nr eW \w'\\$1    'u
-'              in \\n(.iu+\\n(eWu
-.      \}
-.      if \\n(.$==2 \{\
-.              ta \w'\\$1    'u +\w'\\$2    'u
-.              nr eW \w'\\$1    'u+\w'\\$2    'u
-'              in \\n(.iu+\\n(eWu
-.      \}
-.      if \\n(.$==3 \{\
-.              ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u
-.              nr eW \w'\\$1    'u+\w'\\$2    'u+\w'\\$3    'u
-'              in \\n(.iu+\\n(eWu
-.      \}
-.      if \\n(.$==4 \{\
-.      ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u
-.      nr eW \w'\\$1    'u+\w'\\$2    'u+\w'\\$3    'u +\w'\\$4    'u
-'      in \\n(.iu+\\n(eWu
-.      \}
-.      if \\n(.$==5 \{\
-.ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u +\w'\\$5    'u
-.nr eW \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u +\w'\\$5    'u
-'      in \\n(.iu+\\n(eWu
-.      \}
-.\}
-..
-.de Cl
-.ti -\\n(eWu
-.mN \\$1
-.ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.el \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-..
-.nr dQ 0
-.de Ds
-.ie !"\\$1"" \{\
-.      mN d\\$1
-.      if \\n(mN \{\
-.              nr dQ \\n(dQ+1
-.              d\\$1
-.      \}
-.\}
-.el .br
-.nf
-..
-.de Df
-.ie !"\\$1"" \{\
-.       mN d\\$1
-.       if \\n(mN \{\
-.               nr dQ \\n(dQ+1
-.               d\\$1
-.       \}
-.\}
-.el .br
-..
-.de Dn
-\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.nf
-..
-.de dI
-.nr d\\n(dQ \\n(dIu
-.in \\n(.iu+\\n(dIu
-..
-.de dC
-.nr d\\n(dQ (\\n(.l-\\n(.i)/4u
-.in \\n(.iu+\\n(d\\n(dQu
-..
-.de dR
-.nr d\\n(dQ (\\n(.l/3)u
-.in \\n(.iu+\\n(d\\n(dQu
-..
-.de dL
-.nr aa 0
-..
-.de De
-.br
-.if \\n(d\\n(dQ \{\
-.      in \\n(.iu-\\n(d\\n(dQu
-.      rr d\\n(dQ
-.      nr dQ \\n(dQ-1
-.\}
-.fi
-..
-.\"
-.de Fn
-.ie \\n(.$==0 \{\
-.      tm Usage: .Fn function_name function_arg(s) ... \\*(Pu
-.\}
-.el \{\
-.      nr cF \\n(.f
-.      ie \\n(.$==1 .ds f1 \&\\*(nM\\$1\fP\\*(lP\fP\\*(rP\fP
-.      el \{\
-.              ds f1 \\*(nM\\$1\fP\\*(lP
-.              nr aa 0
-.              rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
-.      \}
-.      if "\\*(iM"" \{\\&\\*(f1
-.              ds f1
-.      \}
-.\}
-..
-.\"
-.de rC
-.rZ \\$1
-.ie \\n(rZ \{\
-.      as f1 \f\\n(cF\\*(rP\f\\n(cF\\$1\\$2\\$3\\$4\\$5\\$6\\$7
-.\}
-.el \{\
-.      ie \\n(aa .as f1 \fP, \\*(aR\\$1
-.      el .as f1 \\*(aR\\$1
-.      nr aa 1
-.      ie \\n(.$>1 .rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7
-.      el .as f1 \fP\\*(rP\fP
-.\}
-..
diff --git a/tmac/doc-old.tmac-u b/tmac/doc-old.tmac-u
new file mode 100644 (file)
index 0000000..ddb782f
--- /dev/null
@@ -0,0 +1,1866 @@
+.\" Copyright (c) 1990 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in
+.\"    the documentation and/or other materials provided with the
+.\"    distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its
+.\"    contributors may be used to endorse or promote products derived
+.\"    from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS"
+.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+.\" PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
+.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc-old.tmac       5.2 (Berkeley) 3/13/91
+.\"     Slightly modified by jjc@jclark.com to work with groff as well.
+.\"
+.\" Assume nroff on crt's only if cR==1
+.if n .nr cR 1
+.\"    STRING CONSTANTS
+.\"    DITROFF
+.if t \{\
+.\"    Address Style
+.ds aD \fI
+.\"    Argument Reference Style
+.ds aR \f(CO
+.\"    Interactive Command Modifier (flag)
+.ds cM \f(CB
+.\"    Emphasis (in the English sense - usually italics)
+.ds eM \fI
+.\"    Errno Style
+.ds eR \fC
+.\"    Environment Variable Style
+.ds eV \fC
+.\"    Command Line Flag Style
+.ds fL \f(CB
+.\"    Header String Style
+.ds Hs \fR
+.\"    Interactive Command Style
+.ds iC \f(CB
+.\"    Literal Style
+.ds lI \fC
+.\"    Left Parenthesis Style
+.ds lP \fR\|(\|\fP
+.\"    Right Parenthesis Style
+.ds rP \fR\|)\|\fP
+.\"    Options Open Bracket Style
+.ds lB \fR\^[\^\fP
+.\"    Options Open Bracket Style
+.ds rB \fR\^]\fP
+.\"    Name (subject of manpage) Style
+.ds nM \f(CB
+.\"    Pathname Style
+.ds pA \fC
+.\"    Accepted punctuation string for -mdoc syntax
+.ds Pu \fR[.,:;(\^)[\^]\fR]
+.\"    Section Header Style
+.ds Sp \s12\fB
+.\" .ds sT \s-2\fR
+.\"    Symbolic Emphasis (boldface)
+.ds sY \f(CB
+.\"    Generic Variable Style
+.ds vA \fI
+.\"    Volume Title Style
+.ds Vs \fR
+.\"    Cross Reference STyle (man page only)
+.ds xR \fC
+.\"    Math *
+.tr *\(**
+.\}
+.\"    NROFF
+.if n \{\
+.\"    Address Style
+.ds aD \fI
+.\"    Argument Reference Style
+.ds aR \fI
+.\"    Interactive Command Modifier (flag)
+.ds cM \fB
+.\"    Emphasis (in the English sense - usually italics)
+.ds eM \fI
+.\"    Errno Style
+.ds eR \fR
+.\"    Environment Variable Style
+.ds eV \fR
+.\"    Command Line Flag Style
+.ds fL \fB
+.\"    Header String Style
+.ds Hs \fR
+.\"    Interactive Command Style
+.ds iC \fB
+.\"    Literal Style
+.ds lI \fR
+.\"    Left Parenthesis Style
+.ds lP \fR\|(\fP
+.\"    Right Parenthesis Style
+.ds rP \fR\|)\fP
+.\"    Options Open Bracket Style
+.ds lB \fR\|[\|\fP
+.\"    Options Open Bracket Style
+.ds rB \fR\|]\fP
+.\"    Name (subject of manpage) Style
+.ds nM \fB
+.\"    Pathname Style
+.ds pA \fI
+.\"    Accepted punctuation string for -mdoc syntax
+.ds Pu [.,;:()[]]
+.\"    Section Header Style
+.ds Sp \s12\fB
+.\"    .ds sT \s-2\fR
+.\" .ds sT \s-2\fR
+.\"    Symbol, Mode or Mask Style
+.ds sY \fB
+.\"    Generic Variable Style
+.ds vA \fI
+.\"    Volume Title Style
+.ds Vs \fR
+.\"    Cross Reference Style (man page only)
+.ds xR \fR
+.\}
+.\"    INDENTS - Subheaders(sI), Text(Ti) between Section Headers and Subsects
+.if t \{\
+.      nr sI \w'\fC,'u*5
+.      nr Ti \n(sIu
+.\}
+.if n \{\
+.      nr sI .5i
+.      nr Ti .5i
+.\}
+.\"    Flags for macros names which are used only for .Ds
+.nr dI 6n
+.nr dC 1
+.nr dL 1
+.nr dR 1
+.\"    INDENT WIDTHS (for Lists)
+.\"    Width Needed for Address Tag (indented amount)
+.nr Ad 12n
+.\"    Angle Quote Width
+.nr Aq 12n
+.\"    Width Needed for Argument
+.nr Ar 12n
+.\"    Width Needed for Column offset
+.nr Cl 15n
+.\"    Width neeeded for Interactive Command Modifier
+.nr Cm 10n
+.\"    Width Needed for Complex Expressions
+.nr Cx 20n
+.\"    Indent Width Needed for Display (right and left margins)
+.nr Ds 6n
+.\"    Double Quote Width
+.nr Dq 12n
+.\"    tI is dependent on Ds and used by .Dp
+.nr tI \n(Dsu
+.\"    Width Needed for Display
+.nr Em 10n
+.\"    Width Needed for Errno Types
+.nr Er 15n
+.\"    Width Needed for Environment Variables
+.nr Ev 15n
+.\"    Width Needed for Example Indent
+.nr Ex 10n
+.\"    Width Needed for Flag
+.nr Fl 10n
+.\"    Width Needed for Function
+.nr Fn 16n
+.\"    Width neeeded for Interactive Command Name
+.nr Ic 10n
+.\"    Width Needed for Constant
+.nr Li 16n
+.\"    Width Needed for Math Symbol ? not sure if needed
+.nr Ms 6n
+.\"    Width Needed for Name
+.nr Nm 10n
+.\"    Width Needed for Option Begin
+.nr Ob 14n
+.\"    Width Needed for Option End
+.nr Oe 14n
+.\"    Width Needed for Option (one line)
+.nr Op 14n
+.\"    Width Needed for Pathname
+.nr Pa 32n
+.\"    Parenthesis Quote Width
+.nr Pq 12n
+.\"    Single Quote Width
+.nr Sq 12n
+.\"    Width Needed for Symbols, Modes or Masks
+.nr Sy 6n
+.\"    Width needed for default or unknown text width
+.nr Tx 22n
+.\"    Width Needed for Generic Variable
+.nr Va 12n
+.\"    Width Needed for Cross Reference, should the cross ref be annotated.
+.nr Xr 10n
+.\" PARAGRAPH SPACE
+.if t \{\
+.      nr Pp .5v
+.\}
+.if n \{\
+.      nr Pp 1v
+.\}
+.\"    PAGE LAYOUT
+.\" .Li Tagged Paragraph Style - zero if break on oversized tag
+.\" one if add em space and continue filling line.
+.nr tP 0
+.\" Page Layout Macro
+.de pL
+.\"    DITROFF
+.ie t \{\
+.\" Header Margin
+.      nr Hm .5i
+.\" Footer Margin
+.      nr Fm .5i
+.\" Line length
+.      nr ll 5.5i
+.\" Line length
+.      ll 5.5i
+.\" Title length
+.      nr lt 5.5i
+.\" Title length
+.      lt 5.5i
+.\" Page offset
+.      nr po 1.56i
+.\" Page offset
+.      po 1.56i
+.\" Vertical space distance (from Section headers/Lists/Subsections)
+.      nr vV .5v
+.\" em space
+.      ds tP \|\|\|\|\|\|
+.\}
+.el \{\
+.\" Line length
+.      nr ll 78n
+.      ll 78n
+.\" Title length
+.      nr lt 78n
+.\" Title length
+.      lt 78n
+.\" Page offset
+.      nr po 0i
+.\" Page offset
+.      po 0i
+.\" Vertical space distance (from Section headers/Lists/Subsections)
+.      nr vV 1v
+.\" em space
+.      ds tP \0\0
+.\" Test for crt
+.      ie \\n(cR .nr Hm 0
+.      el .nr Hm .5i
+.\" Footer Margin
+.      nr Fm .5i
+.\}
+..
+.\" Adjustment mode
+.if n \{\
+.ad l
+.na
+..
+.\}
+.\" PREDEFINED STRINGS
+.if t \{\
+.      ds <= \(<=
+.      ds >= \(>=
+.      ds Lq \&``
+.      ds Rq \&''
+.      ds ua \(ua
+.      ds aa \(aa
+.      ds ga \(ga
+.      ds sR \(aa
+.      ds sL \(ga
+.\}
+.if n \{\
+.      ds <= \&<\&=
+.      ds >= \&>\&=
+.       ds Rq ''
+.       ds Lq ``
+.      ds ua ^
+.      ds aa '
+.      ds ga `
+.      ds sL `
+.      ds sR '
+.\}
+.\" Note: The distances from the bottom or top of the page are set
+.\" in headers (macro .hK): to -1.25 for troff, and -1.167 for nroff
+.\" bottoms, and top is 0.
+.\"
+.\"    .Dt Document/manpage_title section/chapter volume
+.\"            The \{ and \} is necessary as roff doesn't nest if-elses
+.\"            properly, especially with .ds.
+.\"    TODO: separate Dt into Dt, Ch and Vt for supp docs.
+.de Dt
+.ds dT UNTITLED
+.ds vT Local
+.ds cH Null
+.\"    Volume and Section Number or Chapter Number
+.if !"\\$1"" .ds dT \\$1
+.if !"\\$2"" \{\
+.      ds cH \\$2
+.      if "\\$3"" \{\
+.              \" Volume Title if none given
+.              if \\$2>=1 .if \\$2<=8 \{\
+.                      ds vT UNIX Reference Manual
+.                      if \\$2>1 .if \\$2<6 .ds vT UNIX Programmer's Manual
+.                      if "\\$2"8" .ds vT UNIX System Manager's Manual
+.              \}
+.              if "\\$2"unass"  .ds vT DRAFT
+.              if "\\$2"draft"  .ds vT DRAFT
+.              if "\\$2"paper"  .ds vT Null
+.      \}
+.\}
+.if !"\\$3"" \{\
+.      \" Volume Title if given
+.      if "\\$3"USD"   .ds vT UNIX User's Supplementary Documents
+.      if "\\$3"PS1"   .ds vT UNIX Programmers's Supplementary Documents
+.      if "\\$3"AMD"   .ds vT UNIX Ancestral Manual Documents
+.      if "\\$3"SMM"   .ds vT UNIX System Manager's Manual
+.      if "\\$3"URM"   .ds vT UNIX Reference Manual
+.      if "\\$3"PRM"   .ds vT UNIX Programmers's Manual
+.      if "\\$3"IND"   .ds vT UNIX Manual Master Index
+.      if "\\$3"CON"   .ds vT UNIX Contributed Software Manual
+.      if "\\$3"IMP"   .ds vT UNIX Implementation Notes
+.      if "\\$3"HOW"   .ds vT UNIX How Pocket Manual
+.      if "\\$3"LOCAL" .ds vT UNIX Local Manual
+.      if "\\*(vT"Local" .ds vT \\$3
+.\}
+..
+.\"
+.\"    .Os Operating System/Standard and Release or Version Number
+.\"
+.de Os
+.ds oS Null
+.if "\\$1"" \{\
+.      ds oS \fIBSD Experimental\fP
+.\" .  ds oS (\fIBag o' Bits\fP)
+.\}
+.if "\\$2"" \{\
+.      ds o1 Non-Null
+.\}
+.if "\\$1"ATT"   \{\
+.      ds oS AT&T
+.      if "\\$2""    .as oS \0UNIX
+.      if "\\$2"7th" .as oS \07th Edition
+.      if "\\$2"7"   .as oS \07th Edition
+.      if "\\$2"III" .as oS \0System III
+.      if "\\$2"3"   .as oS \0System III
+.      if "\\$2"V"   .as oS \0System V
+.      if "\\$2"V.2" .as oS \0System V Release 2
+.      if "\\$2"V.3" .as oS \0System V Release 3
+.      if "\\$2"V.4" .as oS \0System V Release 4
+.\}
+.if "\\$1"BSD" \{\
+.      if "\\$2"3"    .ds oS 3rd Berkeley Distribution
+.      if "\\$2"4"    .ds oS 4th Berkeley Distribution
+.      if "\\$2"4.1"  .ds oS 4.1 Berkeley Distribution
+.      if "\\$2"4.2"  .ds oS 4.2 Berkeley Distribution
+.      if "\\$2"4.3"  .ds oS 4.3 Berkeley Distribution
+.      if "\\$2"4.3+" .ds oS 4.3+tahoe Berkeley Distribution
+.\}
+.if "\\*(oS"Null" .ds oS \\$1
+.if "\\*(o1"Non-Null" .as oS \0\\$2
+.rm o1
+..
+.\"
+.\" Standards
+.\"
+.\" .de St
+.\" .ds sT Null
+.\" .if "\\$1"POSIX" \{\
+.\" .  ds sT IEEE Standard POSIX
+.\" .  if \\$2 .as sT \0\\$2
+.\" .\}
+.\" .if "\\$1"ANSI" \{\
+.\" .  ds sT ANSI Standard
+.\" .  if \\$2 .as sT \0\\$2
+.\" .\}
+.\" .if "\\$1"ISO" \{\
+.\" .  ds sT ISO Standard
+.\" .  if \\$2 .as sT \0\\$2
+.\" .\}
+.\" .if "\\*(sT"Null" .ds sR \\$3
+.\" ..
+.\"
+.\" .de Gp
+.\" .ie !"\\$1"" .ds gP \&\\$1 \\$2 \\$3 \\$4 \\$5
+.\" .el .ds gP Null
+.\" ..
+.\"
+.\"
+.de Dd
+.nr aa 0
+.ie \\n(.$>0 \{\
+.      ie \\n(.$<4 \{\
+.              ds dD \\$1 \\$2 \\$3
+.      \}
+.      el .tm Usage: .Dd Month Day, Year (e.g July 4, 1977).
+.\}
+.el \{\
+.      ds dD Epoch
+.\}
+..
+.\"
+.\"    House Keeping Macro - Make sense of dT, cH, vT, sT, gP and dS
+.\"    TODO: Try to get else's for efficiency
+.\"    TODO: GET RID OF .wh -1.167i (its in v7)
+.\"
+.\"
+.de hK
+.nr % 1
+.ds hT \\*(dT
+.if !"\\*(cH"Null" \{\
+.      ie !"\\*(gP"Null" .as hT \|(\|\\*(cH\\*(gP\|)
+.      el .as hT \\|(\\|\\*(cH\\|)
+.\}
+.if "\\*(cH"Null" .if !"\\*(gP"Null" .as hT \&\|(\|\\*(gP\|)
+.if t \{\
+.      wh 0 hM
+.      wh -1.25i fM
+.\}
+.if n \{\
+.      ie \\n(cR \{\
+.              hM
+.              wh -0v fM
+.      \}
+.      el \{\
+.              wh 0 hM
+.              wh -1.167i fM
+.      \}
+.\}
+.if n \{\
+.      if \\n(nl==0:\\n(nl==-1 'bp
+.\}
+.if t 'bp
+.em lM
+..
+.\"    Header Macro
+.\"
+.de hM
+.ev 1
+.pL
+.if !\\n(cR 'sp \\n(Hmu
+.tl @\\*(Hs\\*(hT\fP@\\*(Vs\\*(vT\fP@\\*(Hs\\*(hT\fP@
+'sp \\n(Hmu
+.ev
+..
+.\"
+.de fM
+.ev 1
+.pL
+.if !\\n(cR \{\
+'      sp \\n(Fmu
+.      tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@
+'      bp
+.\}
+.if \\n(cR \{\
+.\" .  tl @\\*(Hs\\*(oS\fP@\\*(Vs\\*(dD\fP@%@
+.\" '  bp
+.\}
+.ev
+..
+.de lM
+.fl
+.if \\n(cR \{\
+.       fM
+.       pl \\n(nlu
+.\}
+..
+.de Pp
+.sp \\n(Ppu
+.ne 2
+.ns
+..
+.de Lp
+.Pp
+..
+.de LP
+.tm Not a \-mdoc command: .LP
+..
+.de PP
+.tm Not a \-mdoc command: .PP
+..
+.de pp
+.tm Not a \-mdoc command: .pp
+..
+.de Co
+.tm Not a \-mdoc command: .Co
+..
+.nr z. 1
+.nr z, 1
+.nr z: 1
+.nr z; 1
+.nr z) 1
+.nr z( 1
+.nr z[ 1
+.nr z] 1
+.\" This is disgusting, troff not parse if stmt properly
+.nr z1 0
+.nr z2 0
+.nr z3 0
+.nr z4 0
+.nr z5 0
+.nr z6 0
+.nr z7 0
+.nr z8 0
+.nr z9 0
+.nr z0 0
+.nr z# 0
+.\"
+.de Ad
+.ie \\n(.$==0 \{\
+.       tm Usage: .Ad address [...] \\*(Pu
+.\}
+.el \{\
+.       ds sV \\*(aD
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.\" Command Line Argument Macro
+.\"
+.de Ar
+.ie \\n(.$==0 \{\
+.       ie !"\\*(iM"" .as f1 \&[\|\\*(aRfile\ ...\fP\|]
+.       el \&[\|\\*(aRfile\ ...\fP\|]
+.\}
+.el \{\
+.       ds sV \\*(aR
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Em
+.ie \\n(.$==0 \{\
+.       tm Usage: .Em text ... \\*(Pu
+.\}
+.el \{\
+.       ds sV \\*(eM
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Er
+.ie \\n(.$==0 \{\
+.       tm Usage: .Er ERRNOTYPE ... \\*(Pu
+.       \}
+.el \{\
+.       ds sV \\*(eR
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Ev
+.ie \\n(.$==0 \{\
+.      tm Usage: .Ev ENVIRONMENT_VARIABLE(s) ... \\*(Pu
+.      \}
+.el \{\
+.      ds sV \\*(eV
+.      nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      ft \\n(cF
+.\}
+..
+.\"
+.\" Flag Name Macro
+.\"
+.de Fl
+.ie \\n(.$==0 \{\
+.       ie !"\\*(iM"" .as f1 \&\\*(fL\-\fP
+.       el \&\\*(fL\-\fP
+.\}
+.el \{\
+.       nr rZ 0
+.       sW \\$1
+.       if (\\n(sW==1&\\n(.$==1) .rZ \\$1
+.       ds sV \\*(fL
+.       nr cF \\n(.f
+.       ie \\n(rZ \{\
+.               ie "\\*(iM"" .ds f1 \&\\*(sV\-\f\\n(cF\\$1
+.               el \&\\*(sV\-\f\\n(cF\\$1
+.       \}
+.      el \{\
+.             ie "\\*(iM"" .ds f1 \&\\*(sV
+.             el .as f1 \&\\*(sV
+.             fB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.             ft \\n(cF
+.      \}
+.\}
+..
+.\"    Interactive Commands Macro
+.\"
+.de Ic
+.ie \\n(.$==0 \{\
+.      tm Usage: .Ic Interactive Commands(s) ... \\*(Pu
+.\}
+.el \{\
+.       ds sV \\*(iC
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.\" Interactive Command Modifiers (flags)
+.\"
+.de Cm
+.ie \\n(.$==0 \{\
+.      tm Usage: .Cm Interactive Command Modifier(s) ... \\*(Pu
+.\}
+.el \{\
+.       ds sV \\*(cM
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Li
+.ie \\n(.$==0 \{\
+.       tm Usage: .Li literal ... \\*(Pu
+.       \}
+.el \{\
+.       ds sV \\*(lI
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\" If in nroff or any other case where the default font
+.\" is constant width, and literal means zilch, single quote instead.
+.ie n \{\
+.de Ql
+.      ie \\n(.$==0 \{\
+.             tm Usage: .Ql literal ... \\*(Pu
+.       \}
+.      el \{\
+.              Sq \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      \}
+..
+.\}
+.el \{\
+.de Ql
+.      ie \\n(.$==0 \{\
+.             tm Usage: .Ql literal ... \\*(Pu
+.       \}
+.      el \{\
+.              Li \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      \}
+..
+.\}
+.\"
+.de Nm
+.ie \\n(.$==0 \{\
+.      if "\\*(n1"" .tm Usage: .Nm Name(s) ... \\*(Pu
+.      ie !"\\*(iM"" .as f1 \&\\*(nM\\*(n1\\$1\fP
+.      el \&\\*(nM\\*(n1\\$1\fP
+.\}
+.el \{\
+.      ds sV \\*(nM
+.      nr cF \\n(.f
+.      if \\n(nS \{\
+.              rs
+.              in -\\n(iSu
+.              ie \\n(nS>1 .br
+.              el \{\
+.                      sW \\$1
+.                      nr iS ((\\n(sW+1)*\\n(fW)u
+.              \}
+.              in +\\n(iSu
+.              ti -\\n(iSu
+.              nr nS \\n(nS+1
+.      \}
+.      if "\\*(n1"" .ds n1 \\$1
+.      ie "\\*(iM"" .ds f1 \&\\*(sV
+.      el .as f1 \&\\*(sV
+.      nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      ft \\n(cF
+.\}
+..
+.\"
+.de Pa
+.ie \\n(.$==0 \{\
+\&\\*(pA~\fP
+.\}
+.el \{\
+.       ds sV \\*(pA
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Sy
+.ie \\n(.$==0 \{\
+.       tm Usage: .Sy Symbolic Text ... \\*(Pu
+.       \}
+.el \{\
+.       ds sV \\*(sY
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Ms
+.ie \\n(.$==0 \{\
+.       tm Usage: .Ms Math Symbol ... \\*(Pu
+.       \}
+.el \{\
+.       ds sV \\*(sY
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de Va
+.ie \\n(.$==0 \{\
+.       tm Usage: .Va variable_name(s) ... \\*(Pu
+.\}
+.el \{\
+.       ds sV \\*(vA
+.       nr cF \\n(.f
+.       ie "\\*(iM"" .ds f1 \&\\*(sV
+.       el .as f1 \&\\*(sV
+.       nB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ft \\n(cF
+.\}
+..
+.\"
+.de nB
+.hy 0
+.if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)?
+.ie \\n(.$>1 \{\
+.      rZ \\$1
+.      ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP
+.      el .as f1 \&\\$1
+.      rZ \\$2
+.      if !\\n(rZ \{\
+.              ie !"\\*(iM""\{\
+.\"                    I surrender
+.                      if "\\*(iM"Tp" .as f1 \&\ \&
+.                      if "\\*(iM"Dp" .as f1 \&\ \&
+.                      if "\\*(iM"Op" .as f1 \&\ \&
+.                      if "\\*(iM"Cx" .as f1 \&\ \&
+.                      if "\\*(iM"Dq" .as f1 \& \&
+.                      if "\\*(iM"Sq" .as f1 \& \&
+.                      if "\\*(iM"Pq" .as f1 \& \&
+.                      if "\\*(iM"Aq" .as f1 \& \&
+.              \}
+.              el .as f1 \& \&
+.      \}
+.      nB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.\}
+.el \{\
+.      rZ \\$1
+.      ie \\n(rZ .as f1 \&\f\\n(cF\\$1
+.      el .as f1 \&\\$1\f\\n(cF
+.      if "\\*(iM"" \{\&\\*(f1
+.              ds f1
+.      \}
+.      hy
+.\}
+..
+.de fB
+.hy 0
+.if \\n(.$==0 .tm Usage error: called with empty arguments (empty quotes)?
+.ie \\n(.$>1 \{\
+.      rZ \\$1
+.      ie \\n(rZ .as f1 \&\f\\n(cF\\$1\fP
+.      el \{\
+.              ie "\\$1"-" .as f1 \&\-\-
+.              el .as f1 \&\-\\$1
+.      \}
+.      rZ \\$2
+.      if !\\n(rZ \{\
+.              ie !"\\*(iM""\{\
+.\"                    I surrender
+.                      if "\\*(iM"Tp" .as f1 \&\ \&
+.                      if "\\*(iM"Dp" .as f1 \&\ \&
+.                      if "\\*(iM"Op" .as f1 \&\ \&
+.                      if "\\*(iM"Cx" .as f1 \&\ \&
+.                      if "\\*(iM"Dq" .as f1 \& \&
+.                      if "\\*(iM"Sq" .as f1 \& \&
+.                      if "\\*(iM"Pq" .as f1 \& \&
+.                      if "\\*(iM"Aq" .as f1 \& \&
+.              \}
+.              el .as f1 \& \&
+.      \}
+.      fB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.\}
+.el \{\
+.      rZ \\$1
+.      ie \\n(rZ .as f1 \&\f\\n(cF\\$1
+.      el \{\
+.              ie "\\$1"-" .as f1 \&\-\-\f\\n(cF
+.              el .as f1 \&\-\\$1\f\\n(cF
+.      \}
+.      if "\\*(iM"" \{\&\\*(f1
+.              ds f1
+.      \}
+.      hy
+.\}
+..
+.\"
+.\" Single quoted Items
+.\" eF, sB g[0-9] and f2
+.de Sq
+.nr eF 0
+.ie \\n(.$==0 \{\
+.       ie "\\*(iM"" \&\\*(sL\&\\*sR
+.       el .as f1 \&\\*(sL\&\\*(sR
+.\}
+.el \{\
+.       ie "\\*(iM"" \{\
+.              ds f1 \&\\*(sL
+.              ds iM Sq
+.      \}
+.       el .as f1 \&\\*(sL
+.       sB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      ie \\n(eF>0 .\\*(g1 \\*(g2 \\*(g3 \\*(g4 \\*(g5 \\*(g6 \\*(g7 \\*(g8
+.      el .as f1 \\*(g0
+.      as f1 \\*(sR
+.      if !"\\*(f2"" .as f1 \\*(f2
+.      if "\\*(iM"Sq" \{\
+\&\\*(f1
+.              ds f1
+.              ds iM
+.      \}
+.      ds f2
+.      rm  g0 g1 g2 g3 g4 g5 g6 g7 g8 g9
+.      nr eF 0
+.\}
+..
+.\"
+.\" Double quoted Items
+.de Dq
+.nr Ef 0
+.ie \\n(.$==0 \{\
+.       ie "\\*(iM"" \&\\*(Lq\&\\*(Rq
+.       el .as f1 \&\\*(Lq\&\\*(Rq
+.\}
+.el \{\
+.       ie "\\*(iM"" \{\
+.               ds f1 \&\\*(Lq
+.               ds iM Dq
+.       \}
+.       el .as f1 \&\\*(Lq
+.       Sb \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ie \\n(Ef>0 .\\*(k1 \\*(k2 \\*(k3 \\*(k4 \\*(k5 \\*(k6 \\*(k7 \\*(k8
+.       el .as f1 \\*(k0
+.       as f1 \\*(Rq
+.       if !"\\*(f4"" .as f1 \\*(f4
+.       if "\\*(iM"Dq" \{\
+\&\\*(f1
+.               ds f1
+.               ds iM
+.       \}
+.       ds f4
+.       rm  k0 k1 k2 k3 k4 k5 k6 k7 k8 k9
+.       nr Ef 0
+.\}
+..
+.\"
+.\" Parenthesis quoted Items
+.de Pq
+.nr pQ 0
+.ie \\n(.$==0 \{\
+.       ie "\\*(iM"" \&(\&)
+.       el .as f1 \&(\&)
+.\}
+.el \{\
+.       ie "\\*(iM"" \{\
+.               ds f1 \&(
+.               ds iM Pq
+.       \}
+.       el .as f1 \&(
+.       pB \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       ie \\n(pQ>0 .\\*(y1 \\*(y2 \\*(y3 \\*(y4 \\*(y5 \\*(y6 \\*(y7 \\*(y8
+.       el .as f1 \\*(y0
+.       as f1 \&)
+.       if !"\\*(f3"" .as f1 \\*(f3
+.       if "\\*(iM"Pq" \{\
+\&\\*(f1
+.               ds f1
+.               ds iM
+.       \}
+.       ds f3
+.       rm  y0 y1 y2 y3 y4 y5 y6 y7 y8 y9
+.       nr pQ 0
+.\}
+..
+.\" eF, sB g[0-9] and f2
+.de sB
+.hy 0
+.ie \\n(.$==0 .tm Sick Logic: macro sB
+.el \{\
+.      ie \\n(eF>=1 .nr eF \\n(eF+1
+.      el \{\
+.              mN \\$1
+.              if \\n(mN .nr eF \\n(eF+1
+.      \}
+.       rZ \\$1
+.       ie \\n(rZ .as f2 \\$1
+.       el \{\
+.              ie \\n(eF<1 .as g\\n(eF \\$1
+.              el .as g\\n(eF \\$1
+.      \}
+.       if \\n(.$>1 \{\
+.              rZ \\$2
+.              if \\n(rZ==0 \{\
+.                      if \\n(eF<1 \{\
+.                              as g\\n(eF \& \&
+.                      \}
+.              \}
+.              sB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      \}
+.\}
+..
+.de Sb
+.hy 0
+.ie \\n(.$==0 .tm Sick Logic: macro Sb
+.el \{\
+.       ie \\n(Ef>=1 .nr Ef \\n(Ef+1
+.      el \{\
+.              mN \\$1
+.              if \\n(mN .nr Ef \\n(Ef+1
+.      \}
+.       rZ \\$1
+.       ie \\n(rZ .as f4 \\$1
+.       el \{\
+.               ie \\n(Ef<1 .as k\\n(Ef \\$1
+.               el .as k\\n(Ef \\$1
+.       \}
+.       if \\n(.$>1 \{\
+.               rZ \\$2
+.               if \\n(rZ==0 \{\
+.                       if \\n(Ef<1 \{\
+.                               as k\\n(Ef \& \&
+.                       \}
+.               \}
+.               Sb \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       \}
+.\}
+..
+.de pB
+.hy 0
+.ie \\n(.$==0 .tm Sick Logic: macro pB
+.el \{\
+.       ie \\n(pQ>=1 .nr pQ \\n(pQ+1
+.       el \{\
+.               mN \\$1
+.               if \\n(mN .nr pQ \\n(pQ+1
+.       \}
+.       rZ \\$1
+.       ie \\n(rZ .as f3 \\$1
+.       el \{\
+.               ie \\n(pQ<1 .as y\\n(pQ \\$1
+.               el .as y\\n(pQ \\$1
+.       \}
+.       if \\n(.$>1 \{\
+.               rZ \\$2
+.               if \\n(rZ==0 \{\
+.                       if \\n(pQ<1 \{\
+.                               as y\\n(pQ \& \&
+.                       \}
+.               \}
+.               pB \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       \}
+.\}
+..
+.de aQ
+.hy 0
+.ie \\n(.$==0 .tm Bad Syntax: .Aq
+.el \{\
+.       ie \\n(aQ>=1 .nr aQ \\n(aQ+1
+.       el \{\
+.               mN \\$1
+.               if \\n(mN .nr aQ \\n(aQ+1
+.       \}
+.       rZ \\$1
+.       ie \\n(rZ .as aZ \\$1
+.       el \{\
+.               ie \\n(aQ<1 .as a\\n(aQ \\$1
+.               el .as a\\n(aQ \\$1
+.       \}
+.       if \\n(.$>1 \{\
+.               rZ \\$2
+.               if \\n(rZ==0 \{\
+.                       if \\n(aQ<1 \{\
+.                               as a\\n(aQ \& \&
+.                       \}
+.               \}
+.               aQ \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.       \}
+.\}
+..
+.\" Angle Bracket Quoted Items
+.de Aq
+.nr aQ 0
+.ie \\n(.$==0 \{\
+.       ie "\\*(iM"" \&<\&>
+.       el .as f1 \&<\&>
+.\}
+.el \{\
+.       ie "\\*(iM"" \{\
+.               ds f1 \&<
+.               ds iM Aq
+.       \}
+.       el .as f1 \&<
+.       aQ \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+.       ie \\n(aQ>0 .\\*(a1 \\*(a2 \\*(a3 \\*(a4 \\*(a5 \\*(a6 \\*(a7 \\*(a8
+.       el .as f1 \\*(a0
+.       as f1 \&>
+.       if !"\\*(aZ"" .as f1 \\*(aZ
+.       if "\\*(iM"Aq" \{\
+\&\\*(f1
+.               ds f1
+.               ds iM
+.       \}
+.       ds aZ
+.       rm  a0 a1 a2 a3 a4 a5 a6 a7 a8
+.       nr aQ 0
+.\}
+..
+.\" macro Name test, return macro register value if true
+.if \n(.g .ig
+.de mN
+.nr mN 0
+.sW \\$1
+.if \\n(sW==2 \{\
+.      if \\n(\\$1 .nr mN \\n(\\$1
+.\}
+..
+.if !\n(.g .ig
+.de mN
+.nr mN 0
+.if \A'\\$1' \{\
+.      sW \\$1
+.      if \\n(sW==2 \{\
+.              if \\n(\\$1 .nr mN \\n(\\$1
+.      \}
+.\}
+..
+.\" Punctuation test (using z registers), return 1 if true
+.if \n(.g .ig
+.de rZ
+.nr rZ 0
+.sW \\$1
+.if \\n(sW==1 \{\
+.      if \\n(z\\$1==1 \{\
+.              nr rZ 1
+.      \}
+.\}
+..
+.if !\n(.g .ig
+.de rZ
+.nr rZ 0
+.if \A'\\$1' \{\
+.      sW \\$1
+.      if \\n(sW==1 \{\
+.              if \\n(z\\$1==1 \{\
+.                      nr rZ 1
+.              \}
+.      \}
+.\}
+..
+.\"
+.\" sW returns number of characters in a string
+.if t \{\
+.nr fW \w'\fC,'
+.de sW
+.nr sW \w'\fC\\$1'
+.\}
+.if n \{\
+.nr fW \w'0'
+.de sW
+.nr sW \w'\\$1'
+.\}
+.ie \\n(sW>=\\n(fW \{\
+.      ie \\n(sW%\\n(fW .nr sW (\\n(sW/\\n(fW)+1
+.      el .nr sW \\n(sW/\\n(fW
+.\}
+.el .nr sW 0
+..
+.\"    Option Expression -
+.\"    TODO - add line overflow check (right!)
+.nr eP 0
+.ds e1
+.nr oE 0
+.nr hP 0
+.ds hP
+.nr Ep 0
+.de Op
+.hy 0
+.if "\\*(iM"" \{\
+.      ds iM Op
+.       ds f1 \&
+.\}
+.as f1 \&\\*(lB
+.\" .tm Op:  \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.dO \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.ie !"\\$1"Cx" .oE
+.el .nr oE \\n(oE+1
+..
+.\"
+.\" just for mike, with every bite of garlic in mind (oops, i mean burp).
+.\" dO: go dOwn an argument vector and test each argument to see if
+.\" a macro name or punctuation. stash in respective place along
+.\" with its arguments.
+.nr oO 0
+.nr oP 0
+.nr aO 0
+.de dO
+.mN \\$1
+.ie \\n(mN \{\
+.       if \\n(oP  \{\
+.               if \\n(hP \{\
+.                       nr oZ 1
+.                       oZ
+.                       Oz
+.               \}
+.               if \\n(e1==1 \{\
+.\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9
+.               \}
+.               uO
+.              if !(\\n(oO:\\n(aO) .as f1 \& \&
+.      \}
+.       ie "\\$1"Op" \{\
+.               as f1 \&\\*(lB
+.               nr aO \\n(aO+1
+.       \}
+.      el \{\
+.               nr eP \\n(eP+1
+.               ds e\\n(eP \\$1
+.               nr e\\n(eP 1
+.       \}
+.\}
+.el \{\
+.\" .tm dO: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE
+.      rZ \\$1
+.      ie \\n(rZ \{\
+.\" .tm dO:rZ: $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(eP
+.              nr hP \\n(hP+1
+.              ds h\\n(hP \\$1
+.      \}
+.      el \{\
+.\" .tm dO:word $1: \\$1: eP \\n(eP e[\\n(eP]: \\*(e\\n(ePEE
+.              if \\n(eP==0:\\n(e\\n(eP==1 .nr eP \\n(eP+1
+.              if \\n(eZ .as e\\n(eP \& \&
+.              as e\\n(eP " \&\\$1
+.\" .          ds e\\n(eP \&\\$1
+.              nr eZ \\n(eZ+1
+.      \}
+.\}
+.nr oP 1
+.ie \\n(.$>1 \{\
+.      dO \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.\}
+.el \{\
+.     ie \\n(e1 \{\
+.\\*(e1 \\*(e2 \\*(e3 \\*(e4 \\*(e5 \\*(e6 \\*(e7 \\*(e8 \\*(e9
+.      \}
+.     el \{\
+.      as f1 \\*(e1
+.      \}
+.\}
+..
+.\" handle old style arguments such as the arg -Idir
+.\" in adb, .Oo is a toggle.
+.de Oo
+.ie \\n(oO .nr oO 0
+.el .nr oO 1
+..
+.\" stash punctuation
+.de oZ
+.if \\n(hP>=\\n(oZ \{\
+.      nr eP \\n(eP+1
+.      ds e\\n(eP \\*(h\\n(oZ
+.      nr oZ \\n(oZ+1
+.      oZ
+.\}
+..
+.\" clean up punctuation vector
+.de Oz
+.if \\n(hP>0 \{\
+.      rm h\\n(hP
+.      nr hP \\n(hP-1
+.      Oz
+.\}
+..
+.\" uO: go back up created vector cleaning it up along the way
+.de uO
+.if \\n(eP>0 \{\
+.      rm e\\n(eP
+.      rr e\\n(eP
+.      nr eP \\n(eP-1
+.      nr oP 0
+.      nr eZ 0
+.      uO
+.\}
+..
+.\" option end
+.de oE
+.uO
+.ie \\n(hP \{\
+.       as f1 \\*(rB\\*(h1\\*(h2\\*(h3
+.      Oz
+.      nr oZ 0
+.\}
+.el \{\
+.      as f1 \\*(rB
+.\}
+.ie "\\*(iM"Op" \{\
+.      if \\n(aO .aO
+.if t \{\
+.      if (\\n(.lu-\\n(.ku-\\n(.ou-(2*\\n(fWu))<\w'\fC\\*(f1'u .br
+.\}
+.if n \{\
+.      nr aa \w'\\*(f1'u
+.\" .  nr qq \\n(.lu-\\n(.ku-\\n(.ou
+.\" \&aa == \\n(aa, f1==\\*(f1, qq==\\n(qq
+.      if (\\n(.lu-\\n(.ku-\\n(.ou-\\n(aau)<=(8*\\n(fWu) .br
+.\}
+\&\\*(f1
+.      ds iM
+.      ds f1
+.      hy
+.\}
+.el .nr oE \\n(oE-1
+..
+.de aO
+.as f1 \\*(rB
+.nr aO \\n(aO-1
+.if \\n(aO >0 .aO
+..
+.\"
+.de Xr
+.if \\n(.$<=1 \{\
+.      ie \\n(.$==1 \{\
+.              if !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP
+.              if "\\*(iM"" \&\\*(xR\\$1\fP
+.      \}
+.      el .tm Xr Usage: .Xr manpage_name [section#] \\*(Pu
+.\}
+.if \\n(.$==2 \{\
+.      rZ \\$2
+.      ie "\\*(iM"" \{\
+.              ie \\n(rZ \&\\*(xR\\$1\fP\\$2
+.              el \&\\*(xR\\$1\fP(\\$2)
+.      \}
+.      el \{\
+.              ie \\n(rZ .as f1 \&\\*(xR\\$1\fP\\$2
+.              el .as f1 \&\\*(xR\\$1\fP(\\$2)
+.      \}
+.\}
+.if \\n(.$>=3 \{\
+.      rZ \\$2
+.      ie \\n(rZ \{\
+.              ie !"\\*(iM"" .as f1 \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8
+.              el \&\\*(xR\\$1\fP\\$2\\$3\\$4\\$5\\$6\\$7\\$8
+.      \}
+.      el \{\
+.              rZ \\$3
+.              ie \\n(rZ \{\
+.                      if !"\\*(iM"" \{\
+.                           as f1 \&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8
+.                      \}
+.                      if "\\*(iM"" \{\
+\&\\*(xR\\$1\fP(\\$2)\\$3\\$4\\$5\\$6\\$7\\$8
+.                      \}
+.              \}
+.              el \{\
+.                      tm rZ = \\n(rZ  the arg is \\$3
+.                      tm Xr-XX Usage: .Xr manpage_name [section#] \\*(Pu
+.              \}
+.      \}
+.\}
+..
+.\"
+.\"
+.de Ex
+.tm Ex defunct, Use .Dl: \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+.\" Display (one) Line of text.
+.de Dl
+.ie "\\*(iM"" \{\
+'      ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
+.      in \\n(.iu+\\n(Dsu
+.      mN \\$1
+.      ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      el \{\
+.              nr cF \\n(.f
+.\"     Literal font is none specified
+\&\\*(lI\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.              ft \\n(cF
+.      \}
+.      in \\n(.iu-\\n(Dsu
+.\}
+.el \{\
+.      mN \\$1
+.      ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+.      el \{\
+.              nr cF \\n(.f
+.              ds f1 \&\\*(lI\\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+.              as f1 \&\f\\n(cF
+.      \}
+.\}
+..
+.\"
+.\"
+.\" user set Tagged Paragraph Width (used in both Dp and Tp)
+.de Tw
+.ie \\n(.$==0 \{\
+.      nr aa 0
+.\}
+.el \{\
+.      mN \\$1
+.      ie \\n(sW>2 \{\
+.              nr tW (\\n(sW+3)*\\n(fWu)
+.      \}
+.      el \{\
+.              ie \\n(mN .nr tW \\n(mN
+.              el .nr tW \\$1
+.      \}
+.      nr tF 1
+.\}
+..
+.\"
+.de Dw
+.Tw \\$1
+..
+.\"
+.de Di
+.ie \\n(.$==0 \{\
+.      nr tI \\n(Dsu
+.\}
+.el \{\
+.      sW \\$1
+.      if \\n(sW>=2 \{\
+.              nr tI \\$1u
+.      \}
+.      if \\n(sW<2 \{\
+.              if "\\$1"L" \{\
+.                      nr tI 0
+.              \}
+.      \}
+.\}
+..
+.\" tagged paragraph
+.\" initialize baby stack variables
+.nr np 0
+.nr p1 0
+.ds s\n(np
+.\"
+.de Tp
+.ie "\\$1"" .pE p s np
+.el \{\
+.      ds iM Tp
+.      mN \\$1
+.      ie \\n(tF \{\
+.              ds tC Tw
+.              nr tC 1
+.              nr tF 0
+.      \}
+.      el \{\
+.              if !"Tw"\\*(s\\n(np" \{\
+.                      ie \\n(mN \{\
+.                              ds tC \\$1
+.                              nr tW \\n(mN
+.                      \}
+.                      el \{\
+.                              ds tC Tx
+.                              nr tW \\n(Tx
+.                      \}
+.                      if !"\\*(tC"\\*(s\\n(np" .nr tC 1
+.              \}
+.      \}
+.      sp \\n(vVu
+.      if !\\n(cR .ne 2
+.      if \\n(tC \{\
+.              nr np \\n(np+1
+.              nr p\\n(np \\n(tW
+.              ds s\\n(np \\*(tC
+.              nr tC 0
+.              ds tC
+.              in \\n(.iu+\\n(p\\n(npu
+.      \}
+.      ie \\n(mN \{\
+.              ds f1
+.              \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.              if !"\\$1"Cx" .pT st p np
+.      \}
+.      el \{\
+.              br
+.              ev 1
+.              fi
+.              di Td
+\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.              br
+.              di
+.              ev
+.              na
+.              ds tD \\*(Td\\
+.              pT di p np
+.      \}
+.\}
+..
+.\"
+.\"
+.\" Complex Expression Macro
+.\"
+.\"     TODO: add length across line boundary check (like Li)
+.de Cx
+.hy 0
+.ie \\n(.$==0 \{\
+.      if "\\*(iM"Cx" \{\
+.              ds iM
+.              if \\n(oE .oE
+\&\\*(f1
+.              ds f1
+.      \}
+.      if "\\*(iM"Tp" .pT st p np
+.      if "\\*(iM"Dp" .pT st q mp
+.\}
+.el \{\
+.      if "\\*(iM"" \{\
+.              ds iM Cx
+.              ds f1 \&
+.      \}
+.      mN \\$1
+.\" Here are the args: '\\$1'  '\\$2'  '\\$3'  '\\$4'
+.      ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      el \{\
+.              as f1 \&\\$1
+.              if \\n(.$>1 .Cx \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      \}
+.\}
+..
+.\" Prefix string in default font to content specified string
+.de Pf
+.Cx \\$1
+.\\$2 \\$3 \\$4 \\$5
+.Cx
+..
+.\" Suffix string in default font to content specified string
+.de Sf
+.Cx \\$1 \\$2
+.Cx \\$3
+.Cx
+..
+.\" Simple Option Begin
+.de Ob
+.hy 0
+.ie "\\*(iM"" \{\
+.      ev 2
+.      fi
+.      di oB
+.\}
+.el \{\
+.tm shouldn't be here
+.      as f1 \&[
+.      mN \\$1
+.      ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      el \{\
+.              as f1 \&\\$1
+.              if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      \}
+.\}
+..
+.de Oc
+.as f1 \&\\$1
+.if \\n(.$>1 .Oc \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+.de Oe
+.hy 0
+.ie "\\*(iM"" \{\
+.      br
+.      di
+.      ev
+.      ds bO \\*(oB\\
+\&[\\*(bO\&]
+.\}
+.el \{\
+.      as f1 \&]
+.\}
+..
+.\" White space for Cx
+.de Ws
+.Cx \&\ \&
+..
+.\" tagged paragraph
+.\" initialize baby stack variables
+.nr mp 0
+.nr q1 0
+.ds r\n(np
+.\"
+.\" Complex Dp tag
+.de Dc
+.Dp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+..
+.\" Complex Tp tag
+.de Tc
+.Tp Cx \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+..
+.\" Tag with a flag and an argument with a space
+.de Ta
+.if "\\$2"" \{\
+.      Tp Fl \\$1
+.\}
+.el \{\
+.      Tp Fl \\$1
+.      Cx \&\ \&
+.      Ar \\$2 \\$3
+.      Cx
+.\}
+..
+.de Da
+.Dp Cx Fl \\$1
+.Ws
+.Ar \\$2 \\$3
+.Cx
+..
+.de To
+.Tp Cx Fl \\$1
+.Ar \\$2 \\$3
+.Cx
+..
+.de Do
+.Dp Cx Fl \\$1
+.Ar \\$2 \\$3
+.Cx
+..
+.\" Blended tag toggle
+.de Bt
+.ie \\n(tP==0 .nr tP 1
+.el .nr tP 0
+..
+.\" Bullet paragraph
+.de Bu
+.Tp Sy \&\(bu
+..
+.\" Display tagged paragraph
+.de Dp
+.ie "\\$1"" \{\
+.      pE q r mp
+.      sp \\n(vVu
+.\}
+.el \{\
+.       ds iM Dp
+.       mN \\$1
+.       ie \\n(tF \{\
+.               ds tC Tw
+.               nr tC 1
+.               nr tF 0
+.       \}
+.       el \{\
+.               if !"Tw"\\*(r\\n(mp" \{\
+.                       ie \\n(mN \{\
+.                               ds tC \\$1
+.                               nr tW \\n(mN
+.                       \}
+.                       el \{\
+.                               ds tC Tx
+.                               nr tW \\n(Tx
+.                       \}
+.                       if !"\\*(tC"\\*(r\\n(mp" .nr tC 1
+.               \}
+.       \}
+.       if !\\n(cR .ne 2
+.       if \\n(tC \{\
+.               nr mp \\n(mp+1
+.               nr q\\n(mp \\n(tW
+.               ds r\\n(mp \\*(tC
+.               nr tC 0
+.               ds tC
+.              ie \\n(tIu==\\n(Dsu .nr i\\n(mp \\n(Dsu
+.              el \{\
+.                      nr i\\n(mp \\n(tIu
+.                      nr tI \\n(Dsu
+.              \}
+.                      in \\n(.iu+\\n(i\\n(mpu
+.              sp \\n(vVu
+.              in \\n(.iu+\\n(\\q\\n(mpu
+.       \}
+.       ie \\n(mN \{\
+.               \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.               if !"\\$1"Cx" .pT st q mp
+.       \}
+.       el \{\
+.               br
+.               ev 1
+.               fi
+.               di Td
+\&\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.               br
+.               di
+.               ev
+.               na
+.               ds tD \\*(Td\\
+.               pT di q mp
+.       \}
+.\}
+..
+.\"
+.\" .pE number_stack string_stack counter
+.de pE
+.ie "\\$3"mp" \{\
+.      in \\n(.iu-(\\n(\\$1\\n(\\$3u)-(\\n(i\\n(mpu)
+.      rr i\\n(mp
+.\}
+.el .in \\n(.iu-\\n(\\$1\\n(\\$3u
+.\" .in \\n(.iu-\\n(\\$1\\n(\\$3u
+.if \\n(\\$3<=0 .tm Extraneous call .Tp or .Dp
+.rr \\$1\\n(\\$3
+.rm \\$2\\n(\\$3
+.nr \\$3 \\n(\\$3-1
+.ds iM
+..
+.\"
+.\" .pT [st or di] number_stack counter
+.de pT
+.ie "\\$1"st" \{\
+.      nr bb \\n(\\$2\\n(\\$3u
+.      ti -\\n(bbu
+.      ie (\\n(\\$2\\n(\\$3u-2n)<=\w'\\*(f1'u \{\&\\*(f1\\*(tP
+.              if \\n(tP==0 .br
+.      \}
+.      el \\*(f1\h'|\\n(\\$2\\n(\\$3u'\c
+.\}
+.el \{\
+.       ti -\\n(\\$2\\n(\\$3u
+.      ie (\\n(\\$2\\n(\\$3u-2n)<=\\n(dlu \{\&\\*(tD\\*(tP
+.             if !\\n(tP .br
+.      \}
+.      el \\*(tD\h'|\\n(\\$2\\n(\\$3u'\c
+.      if t 'ad
+.\}
+.      ds iM
+.      ds f1
+'fi
+..
+.\"
+.\" The new SH
+.\"
+.de Sh
+.\" set Sh state off, check for list state before calling indent (.In)
+.nr nS 0
+.nr sE 0
+.ie "\\$1"NAME" \{\
+.\"    name state on, housekeep (headers & footers)
+.      hK
+'      in 0
+.\}
+.el \{\
+.      if "\\$1"SYNOPSIS" .nr nS 1
+.      in 0
+.\}
+.pL
+'sp
+.ns
+.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
+.if !\\n(cR .ne 3
+'fi
+\&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
+\&\fP\&
+.in \\n(.iu+\\n(Tiu
+.if "\\$1"SEE" .nr sE 1
+.ns
+..
+.\"
+.\" Nd minus sign for an en dash used in .Sh Name
+.de Nd
+\&\-\& \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+.de Ss
+.sp
+.ti -.25i
+\&\fB\\$1 \|\\$2 \|\\$3 \|\\$4 \|\\$5 \|\\$6 \|\\$7 \|\\$8 \|\\$9
+\&\fP\&
+.ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
+.if !\\n(cR .ne 2
+.br
+..
+.\"    .if "\\$1"Ss" .in \\n(.iu+\\n(sIu
+.\"..
+.\"
+.\"
+.\" Column Macro
+.\"
+.hy 0
+.de Cw
+.ie \\n(.$==0 \{\
+.      br
+.      in \\n(.iu-\\n(eWu
+.      ta .5i 1i 1.5i 2i 2.5i 3i 3.5i 4i 4.5i 5i 5.5i 6i 6.5i
+.\}
+.el \{\
+.      Pp
+.      if \\n(.$==1 \{\
+.              ta \w'\\$1    'u
+.              nr eW \w'\\$1    'u
+'              in \\n(.iu+\\n(eWu
+.      \}
+.      if \\n(.$==2 \{\
+.              ta \w'\\$1    'u +\w'\\$2    'u
+.              nr eW \w'\\$1    'u+\w'\\$2    'u
+'              in \\n(.iu+\\n(eWu
+.      \}
+.      if \\n(.$==3 \{\
+.              ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u
+.              nr eW \w'\\$1    'u+\w'\\$2    'u+\w'\\$3    'u
+'              in \\n(.iu+\\n(eWu
+.      \}
+.      if \\n(.$==4 \{\
+.      ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u
+.      nr eW \w'\\$1    'u+\w'\\$2    'u+\w'\\$3    'u +\w'\\$4    'u
+'      in \\n(.iu+\\n(eWu
+.      \}
+.      if \\n(.$==5 \{\
+.ta \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u +\w'\\$5    'u
+.nr eW \w'\\$1    'u +\w'\\$2    'u +\w'\\$3    'u +\w'\\$4    'u +\w'\\$5    'u
+'      in \\n(.iu+\\n(eWu
+.      \}
+.\}
+..
+.de Cl
+.ti -\\n(eWu
+.mN \\$1
+.ie \\n(mN .\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.el \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+..
+.nr dQ 0
+.de Ds
+.ie !"\\$1"" \{\
+.      mN d\\$1
+.      if \\n(mN \{\
+.              nr dQ \\n(dQ+1
+.              d\\$1
+.      \}
+.\}
+.el .br
+.nf
+..
+.de Df
+.ie !"\\$1"" \{\
+.       mN d\\$1
+.       if \\n(mN \{\
+.               nr dQ \\n(dQ+1
+.               d\\$1
+.       \}
+.\}
+.el .br
+..
+.de Dn
+\\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.nf
+..
+.de dI
+.nr d\\n(dQ \\n(dIu
+.in \\n(.iu+\\n(dIu
+..
+.de dC
+.nr d\\n(dQ (\\n(.l-\\n(.i)/4u
+.in \\n(.iu+\\n(d\\n(dQu
+..
+.de dR
+.nr d\\n(dQ (\\n(.l/3)u
+.in \\n(.iu+\\n(d\\n(dQu
+..
+.de dL
+.nr aa 0
+..
+.de De
+.br
+.if \\n(d\\n(dQ \{\
+.      in \\n(.iu-\\n(d\\n(dQu
+.      rr d\\n(dQ
+.      nr dQ \\n(dQ-1
+.\}
+.fi
+..
+.\"
+.de Fn
+.ie \\n(.$==0 \{\
+.      tm Usage: .Fn function_name function_arg(s) ... \\*(Pu
+.\}
+.el \{\
+.      nr cF \\n(.f
+.      ie \\n(.$==1 .ds f1 \&\\*(nM\\$1\fP\\*(lP\fP\\*(rP\fP
+.      el \{\
+.              ds f1 \\*(nM\\$1\fP\\*(lP
+.              nr aa 0
+.              rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8 \\$9
+.      \}
+.      if "\\*(iM"" \{\\&\\*(f1
+.              ds f1
+.      \}
+.\}
+..
+.\"
+.de rC
+.rZ \\$1
+.ie \\n(rZ \{\
+.      as f1 \f\\n(cF\\*(rP\f\\n(cF\\$1\\$2\\$3\\$4\\$5\\$6\\$7
+.\}
+.el \{\
+.      ie \\n(aa .as f1 \fP, \\*(aR\\$1
+.      el .as f1 \\*(aR\\$1
+.      nr aa 1
+.      ie \\n(.$>1 .rC \\$2 \\$3 \\$4 \\$5 \\$6 \\$7
+.      el .as f1 \fP\\*(rP\fP
+.\}
+..
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=nroff textwidth=72:
diff --git a/tmac/doc-syms b/tmac/doc-syms
deleted file mode 100644 (file)
index 084dd82..0000000
+++ /dev/null
@@ -1,880 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1991, 1993
-.\"    The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc-syms   8.1 (Berkeley) 06/08/93
-.\"
-.\"     %beginstrip%
-.
-.
-.eo
-.
-.\" NS Ux user macro
-.\" NS   print UNIX
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Ux
-.\" NS
-.\" NS width register `Ux' defined in doc-common
-.
-.de Ux
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Ux \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Ux
-.      doc-parse-args \$@
-.    \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] \*[doc-Tn-font-size]UNIX\*[doc-str-Ux]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Bx user macro
-.\" NS   print BSD (fix smaller nroff version)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Bx
-.\" NS   doc-str-Bx1
-.\" NS   doc-str-Bx-XXX
-.\" NS
-.\" NS width register `Bx' defined in doc-common
-.
-.ds doc-str-Bx-Reno  \-Reno
-.ds doc-str-Bx-reno  \-Reno
-.ds doc-str-Bx-Tahoe \-Tahoe
-.ds doc-str-Bx-tahoe \-Tahoe
-.ds doc-str-Bx-Lite  \-Lite
-.ds doc-str-Bx-lite  \-Lite
-.ds doc-str-Bx-Lite2 \-Lite2
-.ds doc-str-Bx-lite2 \-Lite2
-.
-.de Bx
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Bx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Bx1 \*[doc-Tn-font-size]BSD\*[doc-str-Bx]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Bx
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie        "\*[doc-arg\n[doc-arg-ptr]]"-alpha" \
-.        as doc-str-Bx1 " (currently in alpha test)
-.      el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-beta" \
-.        as doc-str-Bx1 " (currently in beta test)
-.      el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-devel" \
-.        as doc-str-Bx1 " (currently under development)
-.      el \{\
-.        ds doc-str-Bx1 \&\*[doc-arg\n[doc-arg-ptr]]\^\*[doc-Tn-font-size]
-.        as doc-str-Bx1 BSD\*[doc-str-Bx]
-.
-.        if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.          nr doc-arg-ptr +1
-.          ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.            ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.              ie d doc-str-Bx-\*[doc-arg\n[doc-arg-ptr]] \
-.                as doc-str-Bx1 "\*[doc-str-Bx-\*[doc-arg\n[doc-arg-ptr]]]
-.              el \
-.                nr doc-arg-ptr -1
-.            \}
-.            el \
-.              nr doc-arg-ptr -1
-.          \}
-.          el \
-.            nr doc-arg-ptr -1
-.    \}\}\}\}\}
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Bx1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Ud user macro (not parsed, not callable)
-.\" NS   print "currently under development" (HISTORY section)
-.\" NS
-.\" NS width register `Ud' defined in doc-common
-.
-.de Ud
-.  nop \&currently under development.
-..
-.
-.
-.\" NS At user macro
-.\" NS   print AT&T UNIX
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-At
-.\" NS   doc-str-At1
-.\" NS   doc-str-At-XXX
-.\" NS
-.\" NS width register `At' defined in doc-common
-.
-.ds doc-str-At-32v \&Version\~32V
-.as doc-str-At-32v " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v1  \&Version\~1
-.as doc-str-At-v1  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v2  \&Version\~2
-.as doc-str-At-v2  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v3  \&Version\~3
-.as doc-str-At-v3  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v4  \&Version\~4
-.as doc-str-At-v4  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v5  \&Version\~5
-.as doc-str-At-v5  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v6  \&Version\~6
-.as doc-str-At-v6  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-v7  \&Version\~7
-.as doc-str-At-v7  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.ds doc-str-At-III \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~III
-.as doc-str-At-III " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V   \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V
-.as doc-str-At-V   " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.1 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~1
-.as doc-str-At-V.1 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.2 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~2
-.as doc-str-At-V.2 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.3 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~3
-.as doc-str-At-V.3 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.ds doc-str-At-V.4 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~4
-.as doc-str-At-V.4 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
-.
-.de At
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-At \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-At1 \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name At
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie \A\a\*[doc-arg\n[doc-arg-ptr]]\a \{\
-.        ie d doc-str-At-\*[doc-arg\n[doc-arg-ptr]] \
-.          ds doc-str-At1 "\*[doc-str-At-\*[doc-arg\n[doc-arg-ptr]]]
-.        el \{\
-.          tmc mdoc warning: .At: Unknown AT&T UNIX version
-.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-.          nr doc-arg-ptr -1
-.      \}\}
-.      el \
-.        nr doc-arg-ptr -1
-.    \}
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-At1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Dx user macro
-.\" NS   print DragonFly
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Dx
-.\" NS   doc-str-Dx1
-.\" NS
-.\" NS width register `Dx' defined in doc-common
-.
-.\" we use the doc-operating-system-DragonFly-* strings defined in doc-common
-.
-.de Dx
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Dx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Dx1 \*[doc-Tn-font-size]\%DragonFly\*[doc-str-Dx]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Dx
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie \A\a\*[doc-arg\n[doc-arg-ptr]]\a \{\
-.        ie d doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]] \
-.          as doc-str-Dx1 \~\*[doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]]]
-.        el \{\
-.          tmc mdoc warning: .Dx: Unknown DragonFly version
-.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-.          as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.      \}\}
-.      el \
-.        as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.    \}
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Dx1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Fx user macro
-.\" NS   print FreeBSD
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Fx
-.\" NS   doc-str-Fx1
-.\" NS
-.\" NS width register `Fx' defined in doc-common
-.
-.\" we use the doc-operating-system-FreeBSD-* strings defined in doc-common
-.
-.de Fx
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Fx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Fx1 \*[doc-Tn-font-size]\%FreeBSD\*[doc-str-Fx]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Fx
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie \A\a\*[doc-arg\n[doc-arg-ptr]]\a \{\
-.        ie d doc-operating-system-FreeBSD-\*[doc-arg\n[doc-arg-ptr]] \
-.          as doc-str-Fx1 \~\*[doc-operating-system-FreeBSD-\*[doc-arg\n[doc-arg-ptr]]]
-.        el \{\
-.          tmc mdoc warning: .Fx: Unknown FreeBSD version
-.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-.          as doc-str-Fx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.      \}\}
-.      el \
-.        as doc-str-Fx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.    \}
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Fx1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Nx user macro
-.\" NS   print NetBSD
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Nx
-.\" NS   doc-str-Nx1
-.\" NS
-.\" NS width register `Nx' defined in doc-common
-.
-.\" we use the doc-operating-system-NetBSD-* strings defined in doc-common
-.
-.de Nx
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Nx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Nx1 \*[doc-Tn-font-size]\%N\s[\n[doc-curr-size]u]et
-.  as doc-str-Nx1 \*[doc-Tn-font-size]BSD\*[doc-str-Nx]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Nx
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie \A\a\*[doc-arg\n[doc-arg-ptr]]\a \{\
-.        ie d doc-operating-system-NetBSD-\*[doc-arg\n[doc-arg-ptr]] \
-.          as doc-str-Nx1 \~\*[doc-operating-system-NetBSD-\*[doc-arg\n[doc-arg-ptr]]]
-.        el \{\
-.          tmc mdoc warning: .Nx: Unknown NetBSD version
-.          tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-.          as doc-str-Nx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.      \}\}
-.      el \
-.        as doc-str-Nx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.    \}
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Nx1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Ox user macro
-.\" NS   print OpenBSD
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Ox
-.\" NS   doc-str-Ox1
-.\" NS
-.\" NS width register `Ox' defined in doc-common
-.
-.de Ox
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Ox \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Ox1 \*[doc-Tn-font-size]\%OpenBSD\*[doc-str-Ox]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Ox
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \
-.      as doc-str-Ox1 \~\*[doc-arg\n[doc-arg-ptr]]
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ox1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" NS Bsx user macro
-.\" NS   print BSD/OS
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Bsx
-.\" NS   doc-str-Bsx1
-.\" NS
-.\" NS width register `Bsx' defined in doc-common
-.
-.de Bsx
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ds doc-str-Bsx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.  \" default value if no argument
-.  ds doc-str-Bsx1 \*[doc-Tn-font-size]BSD/OS\*[doc-str-Bsx]
-.
-.  if !\n[doc-arg-limit] \
-.    if \n[.$] \{\
-.      ds doc-macro-name Bsx
-.      doc-parse-args \$@
-.    \}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \
-.      as doc-str-Bsx1 \~\*[doc-arg\n[doc-arg-ptr]]
-.    el \
-.      nr doc-arg-ptr -1
-.  \}
-.
-.  \" replace current argument with result
-.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Bsx1]
-.  nr doc-type\n[doc-arg-ptr] 2
-.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.  \" recompute space vector for remaining arguments
-.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.  nr doc-arg-limit \n[doc-arg-ptr]
-.  if \n[doc-num-args] \
-.    doc-parse-space-vector
-.
-.  doc-print-recursive
-..
-.
-.
-.\" The Bt macro should go away now
-.
-.\" NS Bt user macro (not parsed, not callable)
-.\" NS   print "is currently in beta test." (HISTORY section)
-.\" NS
-.\" NS width register `Bt' defined in doc-common
-.
-.de Bt
-.  nop \&is currently in beta test.
-..
-.
-.
-.\" NS Px user macro
-.\" NS   print POSIX
-.
-.ds Px \*[doc-Tn-font-size]\%POSIX
-.
-.
-.\" NS Ai user macro
-.\" NS   print ANSI
-.
-.ds Ai \*[doc-Tn-font-size]\%ANSI
-.
-.
-.\" NS St user macro
-.\" NS   standards (posix, ansi - formal standard names)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-reg-St
-.\" NS   doc-str-St
-.\" NS   doc-str-St1
-.\" NS   doc-str-St-XXX
-.\" NS
-.\" NS width register `St' defined in doc-common
-.
-.\" ANSI/ISO C
-.ds doc-str-St--ansiC-89       \*[Ai] \*[doc-str-St]X\^3.159-1989
-.as doc-str-St--ansiC-89       " (\*[Lq]\)\*[Ai]\~C89\*[doc-str-St]\*[Rq])
-.als doc-str-St--ansiC doc-str-St--ansiC-89
-.ds doc-str-St--isoC           \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:1990
-.as doc-str-St--isoC           " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St]\*[Rq])
-.als doc-str-St--isoC-90 doc-str-St--isoC
-.ds doc-str-St--isoC-2011      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:2011
-.as doc-str-St--isoC-2011      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^11\*[doc-str-St]\*[Rq])
-.ds doc-str-St--isoC-99        \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:1999
-.as doc-str-St--isoC-99        " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^99\*[doc-str-St]\*[Rq])
-.ds doc-str-St--isoC-amd1       \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/AMD1:1995
-.as doc-str-St--isoC-amd1       " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Amendment 1\*[Rq])
-.ds doc-str-St--isoC-tcor1      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR1:1994
-.as doc-str-St--isoC-tcor1      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 1\*[Rq])
-.ds doc-str-St--isoC-tcor2      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR2:1995
-.as doc-str-St--isoC-tcor2      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 2\*[Rq])
-.
-.\" POSIX Part 1: System API
-.ds doc-str-St--p1003.1        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1
-.as doc-str-St--p1003.1        " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1b       \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1b
-.as doc-str-St--p1003.1b       " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-88     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-1988
-.as doc-str-St--p1003.1-88     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-90     \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-1:1990
-.as doc-str-St--p1003.1-90     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.als doc-str-St--iso9945-1-90 doc-str-St--p1003.1-90
-.ds doc-str-St--p1003.1b-93    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1b-1993
-.as doc-str-St--p1003.1b-93    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1c-95    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1c-1995
-.as doc-str-St--p1003.1c-95    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1i-95    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1i-1995
-.as doc-str-St--p1003.1i-95    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-96     \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-1:1996
-.as doc-str-St--p1003.1-96     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.als doc-str-St--iso9945-1-96 doc-str-St--p1003.1-96
-.ds doc-str-St--p1003.1g-2000  \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1g-2000
-.as doc-str-St--p1003.1g-2000  " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-2001   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2001
-.as doc-str-St--p1003.1-2001   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-2004   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2004
-.as doc-str-St--p1003.1-2004   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.ds doc-str-St--p1003.1-2008   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2008
-.as doc-str-St--p1003.1-2008   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
-.
-.\" POSIX Part 2: Shell and Utilities
-.ds doc-str-St--p1003.2        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2
-.as doc-str-St--p1003.2        " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.ds doc-str-St--p1003.2-92     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2-1992
-.as doc-str-St--p1003.2-92     " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.ds doc-str-St--p1003.2a-92    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2a-1992
-.as doc-str-St--p1003.2a-92    " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.ds doc-str-St--iso9945-2-93   \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-2:1993
-.as doc-str-St--iso9945-2-93   " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
-.
-.\" X/Open
-.ds doc-str-St--susv2          Version\~2 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification
-.as doc-str-St--susv2          " (\*[Lq]\*[doc-Tn-font-size]SUSv2\*[doc-str-St]\*[Rq])
-.ds doc-str-St--susv3          Version\~3 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification
-.as doc-str-St--susv3          " (\*[Lq]\*[doc-Tn-font-size]SUSv3\*[doc-str-St]\*[Rq])
-.ds doc-str-St--svid4          System\~V Interface Definition, Fourth Edition
-.as doc-str-St--svid4          " (\*[Lq]\*[doc-Tn-font-size]SVID\*[doc-str-St]\^4\*[Rq])
-.ds doc-str-St--xbd5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Base Definitions Issue\~5
-.as doc-str-St--xbd5           " (\*[Lq]\*[doc-Tn-font-size]XBD\*[doc-str-St]\^5\*[Rq])
-.ds doc-str-St--xcu5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Commands and Utilities Issue\~5
-.as doc-str-St--xcu5           " (\*[Lq]\*[doc-Tn-font-size]XCU\*[doc-str-St]\^5\*[Rq])
-.ds doc-str-St--xcurses4.2     \*[doc-Tn-font-size]X/Open\*[doc-str-St] Curses Issue\~4, Version\~2
-.as doc-str-St--xcurses4.2     " (\*[Lq]\*[doc-Tn-font-size]XCURSES\*[doc-str-St]\^4.2\*[Rq])
-.ds doc-str-St--xns5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Networking Services Issue\~5
-.as doc-str-St--xns5           " (\*[Lq]\*[doc-Tn-font-size]XNS\*[doc-str-St]\^5\*[Rq])
-.ds doc-str-St--xns5.2         \*[doc-Tn-font-size]X/Open\*[doc-str-St] Networking Services Issue\~5.2
-.as doc-str-St--xns5.2         " (\*[Lq]\*[doc-Tn-font-size]XNS\*[doc-str-St]\^5.2\*[Rq])
-.ds doc-str-St--xpg3           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~3
-.as doc-str-St--xpg3           " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^3\*[Rq])
-.ds doc-str-St--xpg4           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~4
-.as doc-str-St--xpg4           " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^4\*[Rq])
-.ds doc-str-St--xpg4.2         \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~4, Version\~2
-.as doc-str-St--xpg4.2         " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^4.2\*[Rq])
-.ds doc-str-St--xsh5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] System Interfaces and Headers Issue\~5
-.as doc-str-St--xsh5           " (\*[Lq]\*[doc-Tn-font-size]XSH\*[doc-str-St]\^5\*[Rq])
-.
-.\" Miscellaneous
-.ds doc-str-St--ieee754        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 754-1985
-.ds doc-str-St--ieee1275-94     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1275-1994
-.as doc-str-St--ieee1275-94     " (\*[Lq]\*[doc-Tn-font-size]Open Firmware\*[doc-str-St]\*[Rq])
-.ds doc-str-St--iso8601        \*[doc-Tn-font-size]ISO\*[doc-str-St] 8601
-.ds doc-str-St--iso8802-3      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 8802-3:1989
-.
-.de St
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name St
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      doc-St-usage
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    ds doc-str-St \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.    ds doc-str-St1
-.    ie \A\a\*[doc-arg\n[doc-arg-ptr]]\a \{\
-.      ie d doc-str-St-\*[doc-arg\n[doc-arg-ptr]] \
-.        ds doc-str-St1 "\*[doc-str-St-\*[doc-arg\n[doc-arg-ptr]]]
-.      el \{\
-.        tmc "mdoc warning: .St: Unknown standard abbreviation
-.        tm1 " `\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
-.        tm1 "              Please refer to the groff_mdoc(7) manpage for a
-.        tm1 "              list of available standard abbreviations.
-.    \}\}
-.    el \
-.      doc-St-usage
-.
-.    \" replacing argument with result
-.    ds doc-arg\n[doc-arg-ptr] "\*[doc-str-St1]
-.
-.    doc-print-recursive
-.  \}
-.  el \{\
-.    doc-St-usage
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS doc-St-usage macro
-.
-.de doc-St-usage
-.  tm1 "Usage: .St standard (#\n[.c])
-.  tm1 "       Please refer to the groff_mdoc(7) manpage for a list of
-.  tm1 "       available standard abbreviations.
-..
-.
-.
-.\" NS Lb user macro
-.\" NS   formal library names for LIBRARY sections
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-reg-Lb
-.\" NS   doc-str-Lb
-.\" NS   doc-str-Lb1
-.\" NS   doc-str-Lb-XXX
-.\" NS
-.\" NS width register `Lb' defined in doc-common
-.
-.ds doc-str-Lb-libarchive  Reading and Writing Streaming Archives Library (libarchive, \-larchive)
-.ds doc-str-Lb-libarm      ARM Architecture Library (libarm, \-larm)
-.ds doc-str-Lb-libarm32    ARM32 Architecture Library (libarm32, \-larm32)
-.ds doc-str-Lb-libbluetooth Bluetooth Library (libbluetooth, \-lbluetooth)
-.ds doc-str-Lb-libbsm      Basic Security Module Library (libbsm, \-lbsm)
-.ds doc-str-Lb-libc        Standard C\~Library (libc, \-lc)
-.ds doc-str-Lb-libc_r      Reentrant C\~Library (libc_r, \-lc_r)
-.ds doc-str-Lb-libcalendar Calendar Arithmetic Library (libcalendar, \-lcalendar)
-.ds doc-str-Lb-libcam      Common Access Method User Library (libcam, \-lcam)
-.ds doc-str-Lb-libcdk      Curses Development Kit Library (libcdk, \-lcdk)
-.ds doc-str-Lb-libcipher   FreeSec Crypt Library (libcipher, \-lcipher)
-.ds doc-str-Lb-libcompat   Compatibility Library (libcompat, \-lcompat)
-.ds doc-str-Lb-libcrypt    Crypt Library (libcrypt, \-lcrypt)
-.ds doc-str-Lb-libcurses   Curses Library (libcurses, \-lcurses)
-.ds doc-str-Lb-libdevinfo  Device and Resource Information Utility Library (libdevinfo, \-ldevinfo)
-.ds doc-str-Lb-libdevstat  Device Statistics Library (libdevstat, \-ldevstat)
-.ds doc-str-Lb-libdisk     Interface to Slice and Partition Labels Library (libdisk, \-ldisk)
-.ds doc-str-Lb-libdwarf    DWARF Access Library (libdwarf, \-ldwarf)
-.ds doc-str-Lb-libedit     Command Line Editor Library (libedit, \-ledit)
-.ds doc-str-Lb-libelf      ELF Access Library (libelf, \-lelf)
-.ds doc-str-Lb-libevent    Event Notification Library (libevent, \-levent)
-.ds doc-str-Lb-libfetch    File Transfer Library for URLs (libfetch, \-lfetch)
-.ds doc-str-Lb-libform     Curses Form Library (libform, \-lform)
-.ds doc-str-Lb-libgeom     Userland API Library for kernel GEOM subsystem (libgeom, \-lgeom)
-.ds doc-str-Lb-libgpib     General-Purpose Instrument Bus (GPIB) library (libgpib, \-lgpib)
-.ds doc-str-Lb-libi386     i386 Architecture Library (libi386, \-li386)
-.ds doc-str-Lb-libintl     Internationalized Message Handling Library (libintl, \-lintl)
-.ds doc-str-Lb-libipsec    IPsec Policy Control Library (libipsec, \-lipsec)
-.ds doc-str-Lb-libipx      IPX Address Conversion Support Library (libipx, \-lipx)
-.ds doc-str-Lb-libiscsi    iSCSI protocol library (libiscsi, \-liscsi)
-.ds doc-str-Lb-libjail     Jail Library (libjail, \-ljail)
-.ds doc-str-Lb-libkiconv   Kernel side iconv library (libkiconv, \-lkiconv)
-.ds doc-str-Lb-libkse      N:M Threading Library (libkse, \-lkse)
-.ds doc-str-Lb-libkvm      Kernel Data Access Library (libkvm, \-lkvm)
-.ds doc-str-Lb-libm        Math Library (libm, \-lm)
-.ds doc-str-Lb-libm68k     m68k Architecture Library (libm68k, \-lm68k)
-.ds doc-str-Lb-libmagic    Magic Number Recognition Library (libmagic, \-lmagic)
-.ds doc-str-Lb-libmd       Message Digest (MD4, MD5, etc.) Support Library (libmd, \-lmd)
-.ds doc-str-Lb-libmemstat  Kernel Memory Allocator Statistics Library (libmemstat, \-lmemstat)
-.ds doc-str-Lb-libmenu     Curses Menu Library (libmenu, \-lmenu)
-.ds doc-str-Lb-libnetgraph Netgraph User Library (libnetgraph, \-lnetgraph)
-.ds doc-str-Lb-libnetpgp   Netpgp signing, verification, encryption and decryption (libnetpgp, \-lnetpgp)
-.ds doc-str-Lb-libossaudio OSS Audio Emulation Library (libossaudio, \-lossaudio)
-.ds doc-str-Lb-libpam      Pluggable Authentication Module Library (libpam, \-lpam)
-.ds doc-str-Lb-libpcap     Packet Capture Library (libpcap, \-lpcap)
-.ds doc-str-Lb-libpci      PCI Bus Access Library (libpci, \-lpci)
-.ds doc-str-Lb-libpmc      Performance Counters Library (libpmc, \-lpmc)
-.ds doc-str-Lb-libposix    \*[Px] \*[doc-str-Lb]Compatibility Library (libposix, \-lposix)
-.ds doc-str-Lb-libprop     Property Container Object Library (libprop, \-lprop)
-.ds doc-str-Lb-libpthread  \*[Px] \*[doc-str-Lb]Threads Library (libpthread, \-lpthread)
-.ds doc-str-Lb-libpuffs    puffs Convenience Library (libpuffs, \-lpuffs)
-.ds doc-str-Lb-librefuse   File System in Userspace Convenience Library (librefuse, \-lrefuse)
-.ds doc-str-Lb-libresolv   DNS Resolver Library (libresolv, \-lresolv)
-.ds doc-str-Lb-librpcsec_gss RPC GSS-API Authentication Library (librpcsec_gss, \-lrpcsec_gss)
-.ds doc-str-Lb-librpcsvc   RPC Service Library (librpcsvc, \-lrpcsvc)
-.ds doc-str-Lb-librt       \*[Px] \*[doc-str-Lb]Real-time Library (librt, \-lrt)
-.ds doc-str-Lb-libsdp      Bluetooth Service Discovery Protocol User Library (libsdp, \-lsdp)
-.ds doc-str-Lb-libssp      Buffer Overflow Protection Library (libssp, \-lssp)
-.ds doc-str-Lb-libSystem   System Library (libSystem, \-lSystem)
-.ds doc-str-Lb-libtermcap  Termcap Access Library (libtermcap, \-ltermcap)
-.ds doc-str-Lb-libterminfo Terminal Information Library (libterminfo, \-lterminfo)
-.ds doc-str-Lb-libthr      1:1 Threading Library (libthr, \-lthr)
-.ds doc-str-Lb-libufs      UFS File System Access Library (libufs, \-lufs)
-.ds doc-str-Lb-libugidfw   File System Firewall Interface Library (libugidfw, \-lugidfw)
-.ds doc-str-Lb-libulog     User Login Record Library (libulog, \-lulog)
-.ds doc-str-Lb-libusbhid   USB Human Interface Devices Library (libusbhid, \-lusbhid)
-.ds doc-str-Lb-libutil     System Utilities Library (libutil, \-lutil)
-.ds doc-str-Lb-libvgl      Video Graphics Library (libvgl, \-lvgl)
-.ds doc-str-Lb-libx86_64   x86_64 Architecture Library (libx86_64, \-lx86_64)
-.ds doc-str-Lb-libz        Compression Library (libz, \-lz)
-.
-.de Lb
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Lb
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Lb library_name ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    ds doc-str-Lb \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
-.
-.    ie d doc-str-Lb-\*[doc-arg\n[doc-arg-ptr]] \
-.      ds doc-str-Lb1 "\*[doc-str-Lb-\*[doc-arg\n[doc-arg-ptr]]]
-.    el \{\
-.      tmc "mdoc warning: .Lb: no description for library
-.      tm1 " `\*[doc-arg\n[doc-arg-ptr]]' available (#\n[.c])
-.      ds doc-str-Lb1 library \*[Lq]\*[doc-arg\n[doc-arg-ptr]]\*[Rq]
-.    \}
-.
-.    \" replacing argument with result
-.    ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Lb1]
-.
-.    if \n[doc-in-library-section] \
-.      br
-.    doc-print-recursive
-.    if \n[doc-in-library-section] \
-.      br
-.  \}
-.  el \{\
-.    tm Usage: .Lb library_name ... (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.ec
-.
-.\" EOF
diff --git a/tmac/doc-syms-u b/tmac/doc-syms-u
new file mode 100644 (file)
index 0000000..3822008
--- /dev/null
@@ -0,0 +1,891 @@
+.\" Copyright (c) 1991, 1993
+.\"   The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in
+.\"    the documentation and/or other materials provided with the
+.\"    distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its
+.\"    contributors may be used to endorse or promote products derived
+.\"    from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS"
+.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+.\" PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
+.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc-syms   8.1 (Berkeley) 06/08/93
+.\"
+.\"     %beginstrip%
+.
+.
+.eo
+.
+.\" NS Ux user macro
+.\" NS   print UNIX
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Ux
+.\" NS
+.\" NS width register 'Ux' defined in doc-common
+.
+.de Ux
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Ux \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Ux
+.      doc-parse-args \$@
+.    \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] \*[doc-Tn-font-size]UNIX\*[doc-str-Ux]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Bx user macro
+.\" NS   print BSD (fix smaller nroff version)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Bx
+.\" NS   doc-str-Bx1
+.\" NS   doc-str-Bx-XXX
+.\" NS
+.\" NS width register 'Bx' defined in doc-common
+.
+.ds doc-str-Bx-Reno  \-Reno
+.ds doc-str-Bx-reno  \-Reno
+.ds doc-str-Bx-Tahoe \-Tahoe
+.ds doc-str-Bx-tahoe \-Tahoe
+.ds doc-str-Bx-Lite  \-Lite
+.ds doc-str-Bx-lite  \-Lite
+.ds doc-str-Bx-Lite2 \-Lite2
+.ds doc-str-Bx-lite2 \-Lite2
+.
+.de Bx
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Bx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Bx1 \*[doc-Tn-font-size]BSD\*[doc-str-Bx]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Bx
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie        "\*[doc-arg\n[doc-arg-ptr]]"-alpha" \
+.        as doc-str-Bx1 " (currently in alpha test)
+.      el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-beta" \
+.        as doc-str-Bx1 " (currently in beta test)
+.      el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-devel" \
+.        as doc-str-Bx1 " (currently under development)
+.      el \{\
+.        ds doc-str-Bx1 \&\*[doc-arg\n[doc-arg-ptr]]\^\*[doc-Tn-font-size]
+.        as doc-str-Bx1 BSD\*[doc-str-Bx]
+.
+.        if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.          nr doc-arg-ptr +1
+.          ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.            ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.              ie d doc-str-Bx-\*[doc-arg\n[doc-arg-ptr]] \
+.                as doc-str-Bx1 "\*[doc-str-Bx-\*[doc-arg\n[doc-arg-ptr]]]
+.              el \
+.                nr doc-arg-ptr -1
+.            \}
+.            el \
+.              nr doc-arg-ptr -1
+.          \}
+.          el \
+.            nr doc-arg-ptr -1
+.    \}\}\}\}\}
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Bx1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Ud user macro (not parsed, not callable)
+.\" NS   print "currently under development" (HISTORY section)
+.\" NS
+.\" NS width register 'Ud' defined in doc-common
+.
+.de Ud
+.  nop \&currently under development.
+..
+.
+.
+.\" NS At user macro
+.\" NS   print AT&T UNIX
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-At
+.\" NS   doc-str-At1
+.\" NS   doc-str-At-XXX
+.\" NS
+.\" NS width register 'At' defined in doc-common
+.
+.ds doc-str-At-32v \&Version\~32V
+.as doc-str-At-32v " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v1  \&Version\~1
+.as doc-str-At-v1  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v2  \&Version\~2
+.as doc-str-At-v2  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v3  \&Version\~3
+.as doc-str-At-v3  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v4  \&Version\~4
+.as doc-str-At-v4  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v5  \&Version\~5
+.as doc-str-At-v5  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v6  \&Version\~6
+.as doc-str-At-v6  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-v7  \&Version\~7
+.as doc-str-At-v7  " \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.ds doc-str-At-III \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~III
+.as doc-str-At-III " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.ds doc-str-At-V   \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V
+.as doc-str-At-V   " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.ds doc-str-At-V.1 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~1
+.as doc-str-At-V.1 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.ds doc-str-At-V.2 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~2
+.as doc-str-At-V.2 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.ds doc-str-At-V.3 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~3
+.as doc-str-At-V.3 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.ds doc-str-At-V.4 \*[doc-Tn-font-size]AT&T\*[doc-str-At] System\~V Release\~4
+.as doc-str-At-V.4 " \*[doc-Tn-font-size]UNIX\*[doc-str-At]
+.
+.de At
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-At \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-At1 \*[doc-Tn-font-size]AT&T UNIX\*[doc-str-At]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name At
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie \A\a\*[doc-arg\n[doc-arg-ptr]]\a \{\
+.        ie d doc-str-At-\*[doc-arg\n[doc-arg-ptr]] \
+.          ds doc-str-At1 "\*[doc-str-At-\*[doc-arg\n[doc-arg-ptr]]]
+.        el \{\
+.          tmc mdoc warning: .At: Unknown AT&T UNIX version
+.          tm1 " '\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
+.          nr doc-arg-ptr -1
+.      \}\}
+.      el \
+.        nr doc-arg-ptr -1
+.    \}
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-At1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Dx user macro
+.\" NS   print DragonFly
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Dx
+.\" NS   doc-str-Dx1
+.\" NS
+.\" NS width register 'Dx' defined in doc-common
+.
+.\" we use the doc-operating-system-DragonFly-* strings defined in
+.\" doc-common
+.
+.de Dx
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Dx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Dx1 \*[doc-Tn-font-size]\%DragonFly\*[doc-str-Dx]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Dx
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie \A\a\*[doc-arg\n[doc-arg-ptr]]\a \{\
+.        ie d doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]] \
+.          as doc-str-Dx1 \~\*[doc-operating-system-DragonFly-\*[doc-arg\n[doc-arg-ptr]]]
+.        el \{\
+.          tmc mdoc warning: .Dx: Unknown DragonFly version
+.          tm1 " '\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
+.          as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.      \}\}
+.      el \
+.        as doc-str-Dx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.    \}
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Dx1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Fx user macro
+.\" NS   print FreeBSD
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Fx
+.\" NS   doc-str-Fx1
+.\" NS
+.\" NS width register 'Fx' defined in doc-common
+.
+.\" we use the doc-operating-system-FreeBSD-* strings defined in
+.\" doc-common
+.
+.de Fx
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Fx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Fx1 \*[doc-Tn-font-size]\%FreeBSD\*[doc-str-Fx]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Fx
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie \A\a\*[doc-arg\n[doc-arg-ptr]]\a \{\
+.        ie d doc-operating-system-FreeBSD-\*[doc-arg\n[doc-arg-ptr]] \
+.          as doc-str-Fx1 \~\*[doc-operating-system-FreeBSD-\*[doc-arg\n[doc-arg-ptr]]]
+.        el \{\
+.          tmc mdoc warning: .Fx: Unknown FreeBSD version
+.          tm1 " '\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
+.          as doc-str-Fx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.      \}\}
+.      el \
+.        as doc-str-Fx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.    \}
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Fx1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Nx user macro
+.\" NS   print NetBSD
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Nx
+.\" NS   doc-str-Nx1
+.\" NS
+.\" NS width register 'Nx' defined in doc-common
+.
+.\" we use the doc-operating-system-NetBSD-* strings defined in
+.\" doc-common
+.
+.de Nx
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Nx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Nx1 \*[doc-Tn-font-size]\%N\s[\n[doc-curr-size]u]et
+.  as doc-str-Nx1 \*[doc-Tn-font-size]BSD\*[doc-str-Nx]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Nx
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie \A\a\*[doc-arg\n[doc-arg-ptr]]\a \{\
+.        ie d doc-operating-system-NetBSD-\*[doc-arg\n[doc-arg-ptr]] \
+.          as doc-str-Nx1 \~\*[doc-operating-system-NetBSD-\*[doc-arg\n[doc-arg-ptr]]]
+.        el \{\
+.          tmc mdoc warning: .Nx: Unknown NetBSD version
+.          tm1 " '\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
+.          as doc-str-Nx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.      \}\}
+.      el \
+.        as doc-str-Nx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.    \}
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Nx1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Ox user macro
+.\" NS   print OpenBSD
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Ox
+.\" NS   doc-str-Ox1
+.\" NS
+.\" NS width register 'Ox' defined in doc-common
+.
+.de Ox
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Ox \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Ox1 \*[doc-Tn-font-size]\%OpenBSD\*[doc-str-Ox]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Ox
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \
+.      as doc-str-Ox1 \~\*[doc-arg\n[doc-arg-ptr]]
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ox1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" NS Bsx user macro
+.\" NS   print BSD/OS
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Bsx
+.\" NS   doc-str-Bsx1
+.\" NS
+.\" NS width register 'Bsx' defined in doc-common
+.
+.de Bsx
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ds doc-str-Bsx \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.  \" default value if no argument
+.  ds doc-str-Bsx1 \*[doc-Tn-font-size]BSD/OS\*[doc-str-Bsx]
+.
+.  if !\n[doc-arg-limit] \
+.    if \n[.$] \{\
+.      ds doc-macro-name Bsx
+.      doc-parse-args \$@
+.    \}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \
+.      as doc-str-Bsx1 \~\*[doc-arg\n[doc-arg-ptr]]
+.    el \
+.      nr doc-arg-ptr -1
+.  \}
+.
+.  \" replace current argument with result
+.  ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Bsx1]
+.  nr doc-type\n[doc-arg-ptr] 2
+.  ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.  \" recompute space vector for remaining arguments
+.  nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.  nr doc-arg-limit \n[doc-arg-ptr]
+.  if \n[doc-num-args] \
+.    doc-parse-space-vector
+.
+.  doc-print-recursive
+..
+.
+.
+.\" The Bt macro should go away now
+.
+.\" NS Bt user macro (not parsed, not callable)
+.\" NS   print "is currently in beta test." (HISTORY section)
+.\" NS
+.\" NS width register 'Bt' defined in doc-common
+.
+.de Bt
+.  nop \&is currently in beta test.
+..
+.
+.
+.\" NS Px user macro
+.\" NS   print POSIX
+.
+.ds Px \*[doc-Tn-font-size]\%POSIX
+.
+.
+.\" NS Ai user macro
+.\" NS   print ANSI
+.
+.ds Ai \*[doc-Tn-font-size]\%ANSI
+.
+.
+.\" NS St user macro
+.\" NS   standards (posix, ansi - formal standard names)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-reg-St
+.\" NS   doc-str-St
+.\" NS   doc-str-St1
+.\" NS   doc-str-St-XXX
+.\" NS
+.\" NS width register 'St' defined in doc-common
+.
+.\" ANSI/ISO C
+.ds doc-str-St--ansiC-89       \*[Ai] \*[doc-str-St]X\^3.159-1989
+.as doc-str-St--ansiC-89       " (\*[Lq]\)\*[Ai]\~C89\*[doc-str-St]\*[Rq])
+.als doc-str-St--ansiC doc-str-St--ansiC-89
+.ds doc-str-St--isoC           \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:1990
+.as doc-str-St--isoC           " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St]\*[Rq])
+.als doc-str-St--isoC-90 doc-str-St--isoC
+.ds doc-str-St--isoC-2011      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:2011
+.as doc-str-St--isoC-2011      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^11\*[doc-str-St]\*[Rq])
+.ds doc-str-St--isoC-99        \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899:1999
+.as doc-str-St--isoC-99        " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^99\*[doc-str-St]\*[Rq])
+.ds doc-str-St--isoC-amd1       \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/AMD1:1995
+.as doc-str-St--isoC-amd1       " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Amendment 1\*[Rq])
+.ds doc-str-St--isoC-tcor1      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR1:1994
+.as doc-str-St--isoC-tcor1      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 1\*[Rq])
+.ds doc-str-St--isoC-tcor2      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9899/TCOR2:1995
+.as doc-str-St--isoC-tcor2      " (\*[Lq]\*[doc-Tn-font-size]ISO\~C\^90\*[doc-str-St], Technical Corrigendum 2\*[Rq])
+.
+.\" POSIX Part 1: System API
+.ds doc-str-St--p1003.1        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1
+.as doc-str-St--p1003.1        " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1b       \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1b
+.as doc-str-St--p1003.1b       " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-88     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-1988
+.as doc-str-St--p1003.1-88     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-90     \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-1:1990
+.as doc-str-St--p1003.1-90     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.als doc-str-St--iso9945-1-90 doc-str-St--p1003.1-90
+.ds doc-str-St--p1003.1b-93    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1b-1993
+.as doc-str-St--p1003.1b-93    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1c-95    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1c-1995
+.as doc-str-St--p1003.1c-95    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1i-95    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1i-1995
+.as doc-str-St--p1003.1i-95    " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-96     \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-1:1996
+.as doc-str-St--p1003.1-96     " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.als doc-str-St--iso9945-1-96 doc-str-St--p1003.1-96
+.ds doc-str-St--p1003.1g-2000  \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1g-2000
+.as doc-str-St--p1003.1g-2000  " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-2001   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2001
+.as doc-str-St--p1003.1-2001   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-2004   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2004
+.as doc-str-St--p1003.1-2004   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.ds doc-str-St--p1003.1-2008   \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.1-2008
+.as doc-str-St--p1003.1-2008   " (\*[Lq]\)\*[Px]\*[doc-str-St].1\*[Rq])
+.
+.\" POSIX Part 2: Shell and Utilities
+.ds doc-str-St--p1003.2        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2
+.as doc-str-St--p1003.2        " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
+.ds doc-str-St--p1003.2-92     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2-1992
+.as doc-str-St--p1003.2-92     " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
+.ds doc-str-St--p1003.2a-92    \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1003.2a-1992
+.as doc-str-St--p1003.2a-92    " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
+.ds doc-str-St--iso9945-2-93   \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 9945-2:1993
+.as doc-str-St--iso9945-2-93   " (\*[Lq]\)\*[Px]\*[doc-str-St].2\*[Rq])
+.
+.\" X/Open
+.ds doc-str-St--susv2          Version\~2 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification
+.as doc-str-St--susv2          " (\*[Lq]\*[doc-Tn-font-size]SUSv2\*[doc-str-St]\*[Rq])
+.ds doc-str-St--susv3          Version\~3 of the Single \*[doc-Tn-font-size]UNIX\*[doc-str-St] Specification
+.as doc-str-St--susv3          " (\*[Lq]\*[doc-Tn-font-size]SUSv3\*[doc-str-St]\*[Rq])
+.ds doc-str-St--svid4          System\~V Interface Definition, Fourth Edition
+.as doc-str-St--svid4          " (\*[Lq]\*[doc-Tn-font-size]SVID\*[doc-str-St]\^4\*[Rq])
+.ds doc-str-St--xbd5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Base Definitions Issue\~5
+.as doc-str-St--xbd5           " (\*[Lq]\*[doc-Tn-font-size]XBD\*[doc-str-St]\^5\*[Rq])
+.ds doc-str-St--xcu5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Commands and Utilities Issue\~5
+.as doc-str-St--xcu5           " (\*[Lq]\*[doc-Tn-font-size]XCU\*[doc-str-St]\^5\*[Rq])
+.ds doc-str-St--xcurses4.2     \*[doc-Tn-font-size]X/Open\*[doc-str-St] Curses Issue\~4, Version\~2
+.as doc-str-St--xcurses4.2     " (\*[Lq]\*[doc-Tn-font-size]XCURSES\*[doc-str-St]\^4.2\*[Rq])
+.ds doc-str-St--xns5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Networking Services Issue\~5
+.as doc-str-St--xns5           " (\*[Lq]\*[doc-Tn-font-size]XNS\*[doc-str-St]\^5\*[Rq])
+.ds doc-str-St--xns5.2         \*[doc-Tn-font-size]X/Open\*[doc-str-St] Networking Services Issue\~5.2
+.as doc-str-St--xns5.2         " (\*[Lq]\*[doc-Tn-font-size]XNS\*[doc-str-St]\^5.2\*[Rq])
+.ds doc-str-St--xpg3           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~3
+.as doc-str-St--xpg3           " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^3\*[Rq])
+.ds doc-str-St--xpg4           \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~4
+.as doc-str-St--xpg4           " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^4\*[Rq])
+.ds doc-str-St--xpg4.2         \*[doc-Tn-font-size]X/Open\*[doc-str-St] Portability Guide Issue\~4, Version\~2
+.as doc-str-St--xpg4.2         " (\*[Lq]\*[doc-Tn-font-size]XPG\*[doc-str-St]\^4.2\*[Rq])
+.ds doc-str-St--xsh5           \*[doc-Tn-font-size]X/Open\*[doc-str-St] System Interfaces and Headers Issue\~5
+.as doc-str-St--xsh5           " (\*[Lq]\*[doc-Tn-font-size]XSH\*[doc-str-St]\^5\*[Rq])
+.
+.\" Miscellaneous
+.ds doc-str-St--ieee754        \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 754-1985
+.ds doc-str-St--ieee1275-94     \*[doc-Tn-font-size]\%IEEE\*[doc-str-St] Std 1275-1994
+.as doc-str-St--ieee1275-94     " (\*[Lq]\*[doc-Tn-font-size]Open Firmware\*[doc-str-St]\*[Rq])
+.ds doc-str-St--iso8601        \*[doc-Tn-font-size]ISO\*[doc-str-St] 8601
+.ds doc-str-St--iso8802-3      \*[doc-Tn-font-size]ISO/IEC\*[doc-str-St] 8802-3:1989
+.
+.de St
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name St
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      doc-St-usage
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    ds doc-str-St \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.    ds doc-str-St1
+.    ie \A\a\*[doc-arg\n[doc-arg-ptr]]\a \{\
+.      ie d doc-str-St-\*[doc-arg\n[doc-arg-ptr]] \
+.        ds doc-str-St1 "\*[doc-str-St-\*[doc-arg\n[doc-arg-ptr]]]
+.      el \{\
+.        tmc "mdoc warning: .St: Unknown standard abbreviation
+.        tm1 " '\*[doc-arg\n[doc-arg-ptr]]' (#\n[.c])
+.        tm1 "              Please refer to the groff_mdoc(7) manpage for a
+.        tm1 "              list of available standard abbreviations.
+.    \}\}
+.    el \
+.      doc-St-usage
+.
+.    \" replacing argument with result
+.    ds doc-arg\n[doc-arg-ptr] "\*[doc-str-St1]
+.
+.    doc-print-recursive
+.  \}
+.  el \{\
+.    doc-St-usage
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS doc-St-usage macro
+.
+.de doc-St-usage
+.  tm1 "Usage: .St standard (#\n[.c])
+.  tm1 "       Please refer to the groff_mdoc(7) manpage for a list of
+.  tm1 "       available standard abbreviations.
+..
+.
+.
+.\" NS Lb user macro
+.\" NS   formal library names for LIBRARY sections
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-reg-Lb
+.\" NS   doc-str-Lb
+.\" NS   doc-str-Lb1
+.\" NS   doc-str-Lb-XXX
+.\" NS
+.\" NS width register 'Lb' defined in doc-common
+.
+.ds doc-str-Lb-libarchive  Reading and Writing Streaming Archives Library (libarchive, \-larchive)
+.ds doc-str-Lb-libarm      ARM Architecture Library (libarm, \-larm)
+.ds doc-str-Lb-libarm32    ARM32 Architecture Library (libarm32, \-larm32)
+.ds doc-str-Lb-libbluetooth Bluetooth Library (libbluetooth, \-lbluetooth)
+.ds doc-str-Lb-libbsm      Basic Security Module Library (libbsm, \-lbsm)
+.ds doc-str-Lb-libc        Standard C\~Library (libc, \-lc)
+.ds doc-str-Lb-libc_r      Reentrant C\~Library (libc_r, \-lc_r)
+.ds doc-str-Lb-libcalendar Calendar Arithmetic Library (libcalendar, \-lcalendar)
+.ds doc-str-Lb-libcam      Common Access Method User Library (libcam, \-lcam)
+.ds doc-str-Lb-libcdk      Curses Development Kit Library (libcdk, \-lcdk)
+.ds doc-str-Lb-libcipher   FreeSec Crypt Library (libcipher, \-lcipher)
+.ds doc-str-Lb-libcompat   Compatibility Library (libcompat, \-lcompat)
+.ds doc-str-Lb-libcrypt    Crypt Library (libcrypt, \-lcrypt)
+.ds doc-str-Lb-libcurses   Curses Library (libcurses, \-lcurses)
+.ds doc-str-Lb-libdevinfo  Device and Resource Information Utility Library (libdevinfo, \-ldevinfo)
+.ds doc-str-Lb-libdevstat  Device Statistics Library (libdevstat, \-ldevstat)
+.ds doc-str-Lb-libdisk     Interface to Slice and Partition Labels Library (libdisk, \-ldisk)
+.ds doc-str-Lb-libdwarf    DWARF Access Library (libdwarf, \-ldwarf)
+.ds doc-str-Lb-libedit     Command Line Editor Library (libedit, \-ledit)
+.ds doc-str-Lb-libelf      ELF Access Library (libelf, \-lelf)
+.ds doc-str-Lb-libevent    Event Notification Library (libevent, \-levent)
+.ds doc-str-Lb-libfetch    File Transfer Library for URLs (libfetch, \-lfetch)
+.ds doc-str-Lb-libform     Curses Form Library (libform, \-lform)
+.ds doc-str-Lb-libgeom     Userland API Library for kernel GEOM subsystem (libgeom, \-lgeom)
+.ds doc-str-Lb-libgpib     General-Purpose Instrument Bus (GPIB) library (libgpib, \-lgpib)
+.ds doc-str-Lb-libi386     i386 Architecture Library (libi386, \-li386)
+.ds doc-str-Lb-libintl     Internationalized Message Handling Library (libintl, \-lintl)
+.ds doc-str-Lb-libipsec    IPsec Policy Control Library (libipsec, \-lipsec)
+.ds doc-str-Lb-libipx      IPX Address Conversion Support Library (libipx, \-lipx)
+.ds doc-str-Lb-libiscsi    iSCSI protocol library (libiscsi, \-liscsi)
+.ds doc-str-Lb-libjail     Jail Library (libjail, \-ljail)
+.ds doc-str-Lb-libkiconv   Kernel side iconv library (libkiconv, \-lkiconv)
+.ds doc-str-Lb-libkse      N:M Threading Library (libkse, \-lkse)
+.ds doc-str-Lb-libkvm      Kernel Data Access Library (libkvm, \-lkvm)
+.ds doc-str-Lb-libm        Math Library (libm, \-lm)
+.ds doc-str-Lb-libm68k     m68k Architecture Library (libm68k, \-lm68k)
+.ds doc-str-Lb-libmagic    Magic Number Recognition Library (libmagic, \-lmagic)
+.ds doc-str-Lb-libmd       Message Digest (MD4, MD5, etc.) Support Library (libmd, \-lmd)
+.ds doc-str-Lb-libmemstat  Kernel Memory Allocator Statistics Library (libmemstat, \-lmemstat)
+.ds doc-str-Lb-libmenu     Curses Menu Library (libmenu, \-lmenu)
+.ds doc-str-Lb-libnetgraph Netgraph User Library (libnetgraph, \-lnetgraph)
+.ds doc-str-Lb-libnetpgp   Netpgp signing, verification, encryption and decryption (libnetpgp, \-lnetpgp)
+.ds doc-str-Lb-libossaudio OSS Audio Emulation Library (libossaudio, \-lossaudio)
+.ds doc-str-Lb-libpam      Pluggable Authentication Module Library (libpam, \-lpam)
+.ds doc-str-Lb-libpcap     Packet Capture Library (libpcap, \-lpcap)
+.ds doc-str-Lb-libpci      PCI Bus Access Library (libpci, \-lpci)
+.ds doc-str-Lb-libpmc      Performance Counters Library (libpmc, \-lpmc)
+.ds doc-str-Lb-libposix    \*[Px] \*[doc-str-Lb]Compatibility Library (libposix, \-lposix)
+.ds doc-str-Lb-libprop     Property Container Object Library (libprop, \-lprop)
+.ds doc-str-Lb-libpthread  \*[Px] \*[doc-str-Lb]Threads Library (libpthread, \-lpthread)
+.ds doc-str-Lb-libpuffs    puffs Convenience Library (libpuffs, \-lpuffs)
+.ds doc-str-Lb-librefuse   File System in Userspace Convenience Library (librefuse, \-lrefuse)
+.ds doc-str-Lb-libresolv   DNS Resolver Library (libresolv, \-lresolv)
+.ds doc-str-Lb-librpcsec_gss RPC GSS-API Authentication Library (librpcsec_gss, \-lrpcsec_gss)
+.ds doc-str-Lb-librpcsvc   RPC Service Library (librpcsvc, \-lrpcsvc)
+.ds doc-str-Lb-librt       \*[Px] \*[doc-str-Lb]Real-time Library (librt, \-lrt)
+.ds doc-str-Lb-libsdp      Bluetooth Service Discovery Protocol User Library (libsdp, \-lsdp)
+.ds doc-str-Lb-libssp      Buffer Overflow Protection Library (libssp, \-lssp)
+.ds doc-str-Lb-libSystem   System Library (libSystem, \-lSystem)
+.ds doc-str-Lb-libtermcap  Termcap Access Library (libtermcap, \-ltermcap)
+.ds doc-str-Lb-libterminfo Terminal Information Library (libterminfo, \-lterminfo)
+.ds doc-str-Lb-libthr      1:1 Threading Library (libthr, \-lthr)
+.ds doc-str-Lb-libufs      UFS File System Access Library (libufs, \-lufs)
+.ds doc-str-Lb-libugidfw   File System Firewall Interface Library (libugidfw, \-lugidfw)
+.ds doc-str-Lb-libulog     User Login Record Library (libulog, \-lulog)
+.ds doc-str-Lb-libusbhid   USB Human Interface Devices Library (libusbhid, \-lusbhid)
+.ds doc-str-Lb-libutil     System Utilities Library (libutil, \-lutil)
+.ds doc-str-Lb-libvgl      Video Graphics Library (libvgl, \-lvgl)
+.ds doc-str-Lb-libx86_64   x86_64 Architecture Library (libx86_64, \-lx86_64)
+.ds doc-str-Lb-libz        Compression Library (libz, \-lz)
+.
+.de Lb
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Lb
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Lb library_name ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    ds doc-str-Lb \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]
+.
+.    ie d doc-str-Lb-\*[doc-arg\n[doc-arg-ptr]] \
+.      ds doc-str-Lb1 "\*[doc-str-Lb-\*[doc-arg\n[doc-arg-ptr]]]
+.    el \{\
+.      tmc "mdoc warning: .Lb: no description for library
+.      tm1 " '\*[doc-arg\n[doc-arg-ptr]]' available (#\n[.c])
+.      ds doc-str-Lb1 library \*[Lq]\*[doc-arg\n[doc-arg-ptr]]\*[Rq]
+.    \}
+.
+.    \" replacing argument with result
+.    ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Lb1]
+.
+.    if \n[doc-in-library-section] \
+.      br
+.    doc-print-recursive
+.    if \n[doc-in-library-section] \
+.      br
+.  \}
+.  el \{\
+.    tm Usage: .Lb library_name ... (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.ec
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/doc.tmac b/tmac/doc.tmac
deleted file mode 100644 (file)
index 80c6b88..0000000
+++ /dev/null
@@ -1,6599 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\" Copyright (c) 1991, 1993
-.\"    The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)doc        8.1 (Berkeley) 06/08/93
-.\"
-.\" Modified by jjc@jclark.com as follows: the doc-* files are assumed to be
-.\" installed as mdoc/doc-* rather than tmac.doc-* (the filename
-.\" `tmac.doc-common' would be too long); when using groff, the doc-* files
-.\" are loaded using the `mso' request.
-.\"
-.\" Modified by
-.\"
-.\"   Werner LEMBERG <wl@gnu.org>      and
-.\"   Ruslan Ermilov <ru@freebsd.org>
-.\"
-.\" to make it more readable: using long names and many groff features,
-.\" updating and extending documentation, etc.
-.\"
-.\" %beginstrip%
-.
-.
-.if !\n(.g \
-.  ab This version of mdoc can be run with GNU troff only!
-.
-.
-.do if d Dd .nx
-.
-.
-.cp 0
-.
-.
-.if (\n[.x]\n[.y] < 118) \
-.  ab You need GNU troff version 1.18 or higher to run this version of mdoc!
-.
-.
-.\" Load start-up files
-.ie t \
-.  mso mdoc/doc-ditroff
-.el \
-.  mso mdoc/doc-nroff
-.
-.mso mdoc/doc-common
-.mso mdoc/doc-syms
-.
-.
-.eo
-.
-.
-.\" NS doc-macro-name global string
-.\" NS   name of calling request (set in each user-requestable macro)
-.
-.ds doc-macro-name
-.als doc-arg0 doc-macro-name
-.
-.
-.\" NS doc-arg-limit global register
-.\" NS   total number of arguments
-.
-.nr doc-arg-limit 0
-.
-.
-.\" NS doc-num-args global register
-.\" NS   number of arguments to handle (must be set to \n[.$] prior to
-.\" NS   `doc-parse-arg-vector' request)
-.
-.nr doc-num-args 0
-.
-.
-.\" NS doc-arg-ptr global register
-.\" NS   argument pointer
-.
-.nr doc-arg-ptr 0
-.
-.
-.\" NS doc-argXXX global string
-.\" NS   argument vector
-.\" NS
-.\" NS limit:
-.\" NS   doc-arg-limit
-.
-.ds doc-arg1
-.
-.
-.\" NS doc-typeXXX global register
-.\" NS   argument type vector (macro=1, string=2, punctuation suffix=3,
-.\" NS   punctuation prefix=4)
-.\" NS
-.\" NS limit:
-.\" NS   doc-arg-limit
-.
-.nr doc-type1 0
-.
-.
-.\" NS doc-spaceXXX global string
-.\" NS   space vector
-.\" NS
-.\" NS limit:
-.\" NS   doc-arg-limit
-.
-.ds doc-space1
-.
-.
-.\" NS doc-parse-args macro
-.\" NS   parse arguments (recursively) (`.doc-parse-args arg ...')
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-spaceXXX
-.\" NS   doc-typeXXX
-.\" NS   doc-arg-ptr
-.\" NS   doc-have-space
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dpa
-.\" NS   doc-reg-dpa1
-.\" NS   doc-str-dpa
-.
-.de doc-parse-args
-.  if !\n[doc-arg-limit] \
-.    doc-set-spacing-1
-.
-.  nr doc-have-space 0
-.
-.  if !\n[.$] \
-.    return
-.
-.  nr doc-arg-limit +1
-.
-.  \" handle `|' and `...' specially
-.  ie        "\$1"|" \
-.    ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
-.  el \{ .ie "\$1"..." \
-.    ds doc-arg\n[doc-arg-limit] \|.\|.\|.
-.  el \
-.    ds doc-arg\n[doc-arg-limit] "\$1
-.  \}
-.
-.  \" get argument type and set spacing
-.  doc-get-arg-type* \n[doc-arg-limit]
-.  nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
-.  doc-set-spacing-\n[doc-arg-type]
-.
-.  \" check whether we have processed the last parameter
-.  ie (\n[.$] == 1) \
-.    nr doc-arg-ptr 0
-.  el \{\
-.    shift
-.    doc-parse-args \$@
-.  \}
-.
-.  nh
-..
-.
-.
-.\" NS doc-parse-arg-vector macro
-.\" NS   parse argument vector (recursive)
-.\" NS
-.\" NS   cf. comments in doc-parse-args
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-num-args
-.\" NS   doc-spaceXXX
-.\" NS   doc-typeXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dpav
-.\" NS   doc-reg-dpav1
-.\" NS   doc-str-dpav
-.
-.de doc-parse-arg-vector
-.  if !\n[doc-arg-limit] \
-.    doc-set-spacing-1
-.
-.  nr doc-arg-limit +1
-.
-.  ie        "\*[doc-arg\n[doc-arg-limit]]"|" \
-.    ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
-.  el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \
-.    ds doc-arg\n[doc-arg-limit] \|.\|.\|.
-.  \}
-.
-.  doc-get-arg-type* \n[doc-arg-limit]
-.  nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
-.  doc-set-spacing-\n[doc-arg-type]
-.
-.  ie (\n[doc-num-args] == 1) \{\
-.    nr doc-arg-ptr 0
-.    nr doc-num-args 0
-.  \}
-.  el \{\
-.    nr doc-num-args -1
-.    doc-parse-arg-vector
-.  \}
-.
-.  nh
-..
-.
-.
-.\" NS doc-parse-space-vector macro
-.\" NS   parse space vector (recursive)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-num-args
-.\" NS   doc-spaceXXX
-.
-.de doc-parse-space-vector
-.  nr doc-arg-limit +1
-.
-.  doc-set-spacing-\n[doc-type\n[doc-arg-limit]]
-.
-.  ie (\n[doc-num-args] == 1) \
-.    nr doc-num-args 0
-.  el \{\
-.    nr doc-num-args -1
-.    doc-parse-space-vector
-.  \}
-..
-.
-.
-.\" NS doc-remaining-args macro
-.\" NS   output remaining arguments as-is, separated by spaces (until
-.\" NS   `doc-num-args' is exhausted)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-num-args
-.
-.de doc-remaining-args
-.  nr doc-arg-ptr +1
-.  nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-.
-.  ie (\n[doc-num-args] == 1) \{\
-.    nr doc-arg-ptr 0
-.    nr doc-num-args 0
-.  \}
-.  el \{\
-.    nop \)\*[doc-space]\c
-.    nr doc-num-args -1
-.    doc-remaining-args
-.  \}
-..
-.
-.
-.\" NS doc-append-arg macro
-.\" NS   append one argument to argument vector:
-.\" NS   `.doc-append-arg [arg] [type]'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-argXXX
-.\" NS   doc-typeXXX
-.
-.de doc-append-arg
-.  nr doc-arg-limit +1
-.  ds doc-arg\n[doc-arg-limit] "\$1
-.  nr doc-type\n[doc-arg-limit] \$2
-.  doc-set-spacing-\$2
-..
-.
-.
-.\" NS doc-print-and-reset macro
-.\" NS   finish input line and clean up argument vectors
-.
-.de doc-print-and-reset
-.  if \n[doc-space-mode] \
-.    nop \)
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-reset-args macro
-.\" NS   reset argument counters
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-arg-ptr
-.\" NS   doc-have-slot
-.
-.de doc-reset-args
-.  nr doc-arg-limit 0
-.  nr doc-arg-ptr 0
-.  nr doc-have-slot 0
-.
-.  hy \n[doc-hyphen-flags]
-..
-.
-.
-.ec
-.
-.\" NS doc-curr-font global register
-.\" NS   saved current font
-.
-.nr doc-curr-font \n[.f]
-.
-.
-.\" NS doc-curr-size global register
-.\" NS   saved current font size
-.
-.nr doc-curr-size \n[.ps]
-.
-.eo
-.
-.
-.\" NS Fl user macro
-.\" NS   handle flags (appends `-' and prints flags): `.Fl [arg ...]'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Fl (for communication with doc-flag-recursion)
-.\" NS
-.\" NS width register `Fl' set in doc-common
-.
-.de Fl
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  nop \*[doc-Fl-font]\c
-.
-.  if !\n[doc-arg-limit] \{\
-.    ds doc-macro-name Fl
-.    doc-parse-args \$@
-.
-.    \" no arguments
-.    if !\n[.$] \
-.      nop \|\-\|\f[]\s[0]
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    \" last argument
-.    nop \|\-\f[]\s[0]\c
-.    doc-print-and-reset
-.  \}
-.  el \{\
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
-.      nop \|\-\f[]\s[0]\c
-.      \*[doc-arg\n[doc-arg-ptr]]
-.    \}
-.    el \{\
-.      if (\n[doc-type\n[doc-arg-ptr]] == 3) \
-.        nop \|\-\|\c
-.
-.      nr doc-reg-Fl 1
-.      doc-flag-recursion
-.  \}\}
-..
-.
-.
-.\" NS doc-flag-recursion macro
-.\" NS   `Fl' flag recursion routine (special handling)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dfr
-.\" NS   doc-reg-dfr1
-.\" NS   doc-str-dfr
-.
-.de doc-flag-recursion
-.  nr doc-reg-dfr1 \n[doc-type\n[doc-arg-ptr]]
-.  ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]]
-.
-.  ie (\n[doc-reg-dfr1] == 1) \{\
-.    nop \f[]\s[0]\c
-.    \*[doc-str-dfr]
-.  \}
-.  el \{\
-.    nr doc-reg-dfr \n[doc-arg-ptr]
-.
-.    ie (\n[doc-reg-dfr1] == 2) \{\
-.      \" handle vertical bar -- doc-reg-Fl is set for the first call of
-.      \" doc-flag-recursion only; we need this to make `.Fl | ...' work
-.      \" correctly
-.      ie "\*[doc-str-dfr]"\*[Ba]" \{\
-.        if \n[doc-reg-Fl] \
-.          nop \|\-\*[doc-space]\c
-.        nop \)\*[Ba]\c
-.      \}
-.      el \{\
-.        ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\
-.          if \n[doc-reg-Fl] \
-.            nop \|\-\*[doc-space]\c
-.          nop \f[R]|\f[]\c
-.        \}
-.        el \{\
-.          \" two consecutive hyphen characters?
-.          ie "\*[doc-str-dfr]"-" \
-.            nop \|\-\^\-\|\c
-.          el \
-.            nop \|\%\-\*[doc-str-dfr]\&\c
-.    \}\}\}
-.    el \{\
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.      nop \)\*[doc-str-dfr]\f[]\s[0]\c
-.    \}
-.
-.    ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
-.      \" last argument
-.      if (\n[doc-reg-dfr1] == 4) \
-.        nop \|\-\c
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.      doc-print-and-reset
-.    \}
-.    el \{\
-.      nr doc-arg-ptr +1
-.      ie (\n[doc-type\n[doc-arg-ptr]] == 3) \{\
-.        ie (\n[doc-type\n[doc-reg-dfr]] == 4) \
-.          nop \|\-\c
-.        el \
-.          nop \)\*[doc-space\n[doc-reg-dfr]]\c
-.      \}
-.      el \
-.        nop \)\*[doc-space\n[doc-reg-dfr]]\c
-.
-.      shift
-.      nr doc-reg-Fl 0
-.      doc-flag-recursion \$@
-.  \}\}
-..
-.
-.
-.\" NS doc-print-recursive macro
-.\" NS   general name recursion routine (print remaining arguments)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dpr
-.\" NS   doc-reg-dpr1
-.\" NS   doc-str-dpr
-.
-.de doc-print-recursive
-.  nr doc-reg-dpr1 \n[doc-type\n[doc-arg-ptr]]
-.  ds doc-str-dpr "\*[doc-arg\n[doc-arg-ptr]]
-.
-.  ie (\n[doc-reg-dpr1] == 1) \{\
-.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.    \*[doc-str-dpr]
-.  \}
-.  el \{\
-.    nr doc-reg-dpr \n[doc-arg-ptr]
-.
-.    \" the `\%' prevents hyphenation on a dash (`-')
-.    ie (\n[doc-reg-dpr1] == 2) \
-.      nop \%\*[doc-str-dpr]\&\c
-.    el \{\
-.      \" punctuation character
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.      nop \)\*[doc-str-dpr]\f[]\s[0]\c
-.    \}
-.
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.      \" last argument
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.      doc-print-and-reset
-.    \}
-.    el \{\
-.      nop \)\*[doc-space\n[doc-reg-dpr]]\c
-.      doc-print-recursive
-.  \}\}
-..
-.
-.
-.\" NS doc-print-prefixes macro
-.\" NS   print leading prefixes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.
-.de doc-print-prefixes
-.  while (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    if !(\n[doc-type\n[doc-arg-ptr]] == 4) \
-.      break
-.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.    nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
-.    nr doc-arg-ptr +1
-.  \}
-..
-.
-.
-.\" NS doc-generic-macro macro
-.\" NS   this is the skeleton for most simple macros
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.
-.de doc-generic-macro
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name \$0
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
-.      tmc mdoc warning: Using a macro as first argument
-.      tm1 " cancels effect of .\$0 (#\n[.c])
-.
-.      \" the right action here would be to reset the argument counters
-.      \" and bail out -- unfortunately, a small number of manual pages
-.      \" (less than 2% for FreeBSD which has been used for testing)
-.      \" relied on the old behaviour (silently ignore this error),
-.      \" so it is commented out
-.
-.\"    doc-reset-args
-.    \}
-.\"  el \{\
-.      nr doc-curr-font \n[.f]
-.      nr doc-curr-size \n[.ps]
-.      nop \*[doc-\$0-font]\c
-.      doc-print-recursive
-.\"  \}
-.  \}
-.  el \{\
-.    tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Ar user macro
-.\" NS   command line `argument' macro: `.Ar [args ...]'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variable:
-.\" NS   doc-str-Ar-default
-.\" NS
-.\" NS width register `Ar' set in doc-common
-.
-.ds doc-str-Ar-default "file\ .\|.\|.
-.
-.de Ar
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  nop \*[doc-Ar-font]\c
-.
-.  if !\n[doc-arg-limit] \{\
-.    ds doc-macro-name Ar
-.    doc-parse-args \$@
-.
-.    \" no argument
-.    if !\n[.$] \
-.      nop \)\*[doc-str-Ar-default]\&\f[]\s[0]
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c
-.    doc-print-and-reset
-.  \}
-.  el \{\
-.    if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      \" replace previous argument (Ar) with default value
-.      nr doc-arg-ptr -1
-.      ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ar-default]
-.      nr doc-type\n[doc-arg-ptr] 2
-.      ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.      \" recompute space vector for remaining arguments
-.      nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.      nr doc-arg-limit \n[doc-arg-ptr]
-.      doc-parse-space-vector
-.    \}
-.    doc-print-recursive
-.  \}
-..
-.
-.
-.\" NS Ad user macro
-.\" NS   Addresses
-.\" NS
-.\" NS width register `Ad' set in doc-common
-.
-.als Ad doc-generic-macro
-.ds doc-Ad-usage address
-.
-.
-.\" NS doc-indent-synopsis global register
-.\" NS   indentation in synopsis
-.
-.nr doc-indent-synopsis 0
-.
-.
-.\" NS doc-indent-synopsis-active global register (bool)
-.\" NS   indentation in synopsis active
-.
-.nr doc-indent-synopsis-active 0
-.
-.
-.\" NS Cd user macro
-.\" NS   config declaration (for section 4 SYNOPSIS)
-.\" NS
-.\" NS   this function causes a break; it uses the `Nm' font
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-indent-synopsis
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Cd' set in doc-common
-.
-.de Cd
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Cd
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.
-.    ie \n[doc-in-synopsis-section] \{\
-.      ie "\*[doc-macro-name]"Cd" \{\
-.        br
-.        if !\n[doc-indent-synopsis] \
-.          nr doc-indent-synopsis \n[doc-display-indent]u
-.        if !\n[doc-indent-synopsis-active] \
-.          in +\n[doc-indent-synopsis]u
-.        ti -\n[doc-indent-synopsis]u
-.        nop \*[doc-Nm-font]\c
-.        doc-print-recursive
-.        if !\n[doc-indent-synopsis-active] \
-.          in -\n[doc-indent-synopsis]u
-.      \}
-.      el \{\
-.        nop \*[doc-Nm-font]\c
-.        doc-print-recursive
-.    \}\}
-.    el \{\
-.      nop \*[doc-Nm-font]\c
-.      doc-print-recursive
-.  \}\}
-.  el \{\
-.    tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Cm user macro
-.\" NS   interactive command modifier (flag)
-.\" NS
-.\" NS width register `Cm' set in doc-common
-.
-.als Cm doc-generic-macro
-.ds doc-Cm-usage interactive_command_modifier
-.
-.
-.\" NS Dv user macro
-.\" NS   defined variable
-.\" NS
-.\" NS   this function uses the `Er' font
-.\" NS
-.\" NS width register `Dv' set in doc-common
-.
-.als Dv doc-generic-macro
-.ds doc-Dv-usage defined_variable
-.als doc-Dv-font doc-Er-font
-.
-.
-.\" NS Em user macro
-.\" NS   emphasis
-.\" NS
-.\" NS width register `Em' set in doc-common
-.
-.als Em doc-generic-macro
-.ds doc-Em-usage text
-.
-.
-.\" NS Er user macro
-.\" NS   errno type
-.\" NS
-.\" NS width register `Er' set in doc-common
-.
-.als Er doc-generic-macro
-.ds doc-Er-usage text
-.
-.
-.\" NS Ev user macro
-.\" NS   environment variable
-.\" NS
-.\" NS width register `Ev' set in doc-common
-.
-.als Ev doc-generic-macro
-.ds doc-Ev-usage text
-.
-.
-.\" NS doc-have-decl global register (bool)
-.\" NS   subroutine test (in synopsis only)
-.
-.nr doc-have-decl 0
-.
-.
-.\" NS doc-have-var global register (bool)
-.\" NS   whether last type is a variable type
-.
-.nr doc-have-var 0
-.
-.
-.\" NS doc-do-func-decl macro
-.\" NS   do something special while in SYNOPSIS
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-have-decl
-.\" NS   doc-have-var
-.
-.de doc-do-func-decl
-.  if \n[doc-in-synopsis-section] \{\
-.    \" if a variable type was the last thing given, want vertical space
-.    if \n[doc-have-var] \{\
-.      doc-paragraph
-.      nr doc-have-var 0
-.    \}
-.    \" if a subroutine was the last thing given, want vertical space
-.    if \n[doc-have-func] \{\
-.      ie \n[doc-have-decl] \
-.        br
-.      el \
-.        doc-paragraph
-.    \}
-.    nr doc-have-decl 1
-.  \}
-.
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-..
-.
-.
-.\" NS Fd user macro
-.\" NS   function declaration -- not callable
-.\" NS
-.\" NS   this function causes a break
-.\" NS
-.\" NS width register `Fd' set in doc-common
-.
-.de Fd
-.  ie ((\n[.$] >= 1) & (\n[doc-arg-limit] == 0)) \{\
-.    doc-do-func-decl
-.    nop \*[doc-Fd-font]\$*
-.    br
-.    ft \n[doc-curr-font]
-.    ps \n[doc-curr-size]u
-.  \}
-.  el \{\
-.    tm Usage: .Fd function_declaration -- Fd is not callable (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS In user macro
-.\" NS   #include statement in SYNOPSIS
-.\" NS   <header.h> if not in SYNOPSIS
-.\" NS
-.\" NS   this function causes a break; it uses the `Fd' font
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-indent-synopsis
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `In' set in doc-common
-.
-.de In
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name In
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .In include_file ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  ie ((\n[doc-arg-limit] >= \n[doc-arg-ptr]) & (\n[doc-type\n[doc-arg-ptr]] == 2)) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.
-.    ie \n[doc-in-synopsis-section] \{\
-.      ie "\*[doc-macro-name]"In" \{\
-.        doc-do-func-decl
-.        nop \*[doc-Fd-font]#include <\*[doc-arg\n[doc-arg-ptr]]>
-.        ft \n[doc-curr-font]
-.        ps \n[doc-curr-size]u
-.        br
-.        nr doc-arg-ptr +1
-.        ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.          doc-print-recursive
-.        el \
-.          doc-reset-args
-.      \}
-.      el \{\
-.        ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
-.        as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
-.        doc-print-recursive
-.    \}\}
-.    el \{\
-.      ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
-.      as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
-.      doc-print-recursive
-.  \}\}
-.  el \{\
-.    tm Usage: .In include_file ... (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Fr user macro
-.\" NS   function return value
-.\" NS
-.\" NS   this function uses the `Ar' font
-.\" NS
-.\" NS width register `Fr' set in doc-common
-.
-.als Fr doc-generic-macro
-.ds doc-Fr-usage function_return_value
-.als doc-Fr-font doc-Ar-font
-.
-.
-.\" NS Ic user macro
-.\" NS   interactive command
-.\" NS
-.\" NS width register `Ic' set in doc-common
-.
-.als Ic doc-generic-macro
-.ds doc-Ic-usage interactive_command
-.
-.
-.\" NS Li user macro
-.\" NS   literals
-.\" NS
-.\" NS width register `Li' set in doc-common
-.
-.als Li doc-generic-macro
-.ds doc-Li-usage argument
-.
-.
-.\" NS Ms user macro
-.\" NS   math symbol
-.\" NS
-.\" NS   this function uses the `Sy' font
-.\" NS
-.\" NS width register `Ms' set in doc-common
-.
-.als Ms doc-generic-macro
-.ds doc-Ms-usage math_symbol
-.als doc-Ms-font doc-Sy-font
-.
-.
-.\" NS doc-command-name global string
-.\" NS   save first invocation of .Nm
-.
-.ds doc-command-name
-.
-.
-.\" NS Nm user macro
-.\" NS   name of command or page topic
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-command-name
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-indent-synopsis
-.\" NS   doc-indent-synopsis-active
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Nm' set in doc-common
-.
-.de Nm
-.  if !\n[doc-arg-limit] \{\
-.    ds doc-macro-name Nm
-.    ie \n[.$] \
-.      doc-parse-args \$@
-.    el \{\
-.      ie "\*[doc-command-name]"" \
-.        tm Usage: .Nm name ... (#\n[.c])
-.      el \
-.        doc-parse-args \*[doc-command-name]
-.  \}\}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    \" last argument
-.    ie "\*[doc-command-name]"" \{\
-.      tm Usage: .Nm name ... (#\n[.c])
-.      doc-reset-args
-.    \}
-.    el \{\
-.      nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c
-.      doc-print-and-reset
-.  \}\}
-.  el \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.
-.    ie !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      ie "\*[doc-command-name]"" \
-.        tm Usage: .Nm name ... (#\n[.c])
-.      el \{\
-.        \" replace previous argument (Nm) with default value
-.        nr doc-arg-ptr -1
-.        ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]
-.        nr doc-type\n[doc-arg-ptr] 2
-.        ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.        \" recompute space vector for remaining arguments
-.        nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.        nr doc-arg-limit \n[doc-arg-ptr]
-.        doc-parse-space-vector
-.    \}\}
-.    el \{\
-.      \" handle `.Nm ...' in SYNOPSIS
-.      if \n[doc-in-synopsis-section] \{\
-.        if "\*[doc-macro-name]"Nm" \{\
-.          br
-.          if !\n[doc-indent-synopsis] \{\
-.            doc-get-width "\*[doc-arg\n[doc-arg-ptr]]"
-.            nr doc-indent-synopsis ((\n[doc-width]u + 1u) * \n[doc-fixed-width]u)
-.          \}
-.          if !\n[doc-indent-synopsis-active] \{\
-.            in +\n[doc-indent-synopsis]u
-.            nr doc-indent-synopsis-active 1
-.          \}
-.          ti -\n[doc-indent-synopsis]u
-.      \}\}
-.      if "\*[doc-command-name]"" \
-.        ds doc-command-name "\*[doc-arg\n[doc-arg-ptr]]
-.
-.      nop \*[doc-Nm-font]\c
-.    \}
-.    doc-print-recursive
-.  \}
-..
-.
-.
-.\" NS Pa user macro
-.\" NS   pathname: `.Pa [arg ...]'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Pa' set in doc-common
-.
-.de Pa
-.  if !\n[doc-arg-limit] \{\
-.    ds doc-macro-name Pa
-.    doc-parse-args \$@
-.
-.    \" default value
-.    if !\n[.$] \
-.      nop \*[doc-Pa-font]~\f[]\s[0]
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    nop \*[doc-Pa-font]\c
-.    if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      \" replace previous argument (Pa) with default value
-.      nr doc-arg-ptr -1
-.      ds doc-arg\n[doc-arg-ptr] ~
-.      nr doc-type\n[doc-arg-ptr] 2
-.      ds doc-space\n[doc-arg-ptr] "\*[doc-space]
-.
-.      \" recompute space vector for remaining arguments
-.      nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.      nr doc-arg-limit \n[doc-arg-ptr]
-.      doc-parse-space-vector
-.    \}
-.    doc-print-recursive
-.  \}
-.  el \{\
-.    nop \*[doc-Pa-font]~\f[]\s[0]\c
-.    doc-print-and-reset
-.  \}
-..
-.
-.
-.\" NS Sy user macro
-.\" NS   symbolics
-.\" NS
-.\" NS width register `Sy' set in doc-common
-.
-.als Sy doc-generic-macro
-.ds doc-Sy-usage symbolic_text
-.
-.
-.\" NS Me user macro
-.\" NS   menu entries
-.\" NS
-.\" NS width register `Me' set in doc-common
-.
-.als Me doc-generic-macro
-.ds doc-Me-usage menu_entry
-.
-.
-.\" NS Tn user macro
-.\" NS   trade name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Tn' set in doc-common
-.
-.de Tn
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Tn
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Tn trade_name ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    nop \)\*[doc-Tn-font-size]\c
-.    ie !\n[doc-is-reference] \{\
-.      nop \)\*[doc-Tn-font-shape]\c
-.      doc-print-recursive
-.    \}
-.    el \
-.      doc-do-references
-.  \}
-.  el \{\
-.    tm Usage: .Tn trade_name ... (#\n[.c])
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Va user macro
-.\" NS   variable name
-.\" NS
-.\" NS width register `Va' set in doc-common
-.
-.als Va doc-generic-macro
-.ds doc-Va-usage variable_name
-.
-.
-.\" NS No user macro
-.\" NS   normal text macro (default text style if mess up)
-.\" NS
-.\" NS width register `No' set in doc-common
-.
-.als No doc-generic-macro
-.ds doc-No-usage normal_text
-.
-.
-.\" NS doc-quote-left global string
-.\" NS   left quotation character for `doc-enclose-string' and
-.\" NS   `doc-enclose-open'
-.
-.ds doc-quote-left
-.
-.
-.\" NS doc-quote-right global string
-.\" NS   right quotation character for `doc-enclose-string' and
-.\" NS   `doc-enclose-close'
-.
-.ds doc-quote-right
-.
-.
-.\" NS Op user macro
-.\" NS   option expression (i.e., enclose string in square brackets)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Op' set in doc-common
-.
-.de Op
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Op
-.
-.  ds doc-quote-left "\*[doc-left-bracket]
-.  ds doc-quote-right "\*[doc-right-bracket]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Aq user macro
-.\" NS   enclose string in angle brackets
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Aq' set in doc-common
-.
-.de Aq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Aq
-.
-.  ie "\*[doc-macro-name]"An" \{\
-.    ds doc-quote-left <
-.    ds doc-quote-right >
-.  \}
-.  el \{\
-.    ds doc-quote-left \[la]
-.    ds doc-quote-right \[ra]
-.  \}
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Bq user macro
-.\" NS   enclose string in square brackets
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Bq' set in doc-common
-.
-.de Bq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Bq
-.
-.  ds doc-quote-left "\*[doc-left-bracket]
-.  ds doc-quote-right "\*[doc-right-bracket]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Brq user macro
-.\" NS   enclose string in braces
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Brq' set in doc-common
-.
-.de Brq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Brq
-.
-.  ds doc-quote-left {
-.  ds doc-quote-right }
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Dq user macro
-.\" NS   enclose string in double quotes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Dq' set in doc-common
-.
-.de Dq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Dq
-.
-.  ds doc-quote-left "\*[Lq]
-.  ds doc-quote-right "\*[Rq]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Eq user macro
-.\" NS   enclose string in user-defined quotes (args 1 and 2)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Eq' set in doc-common
-.
-.de Eq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Eq
-.
-.  ds doc-quote-left "\$1
-.  ds doc-quote-right "\$2
-.
-.  shift 2
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Pq user macro
-.\" NS   enclose string in parentheses
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Pq' set in doc-common
-.
-.de Pq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Pq
-.
-.  ds doc-quote-left "\*[doc-left-parenthesis]
-.  ds doc-quote-right "\*[doc-right-parenthesis]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Ql user macro
-.\" NS   quoted literal
-.\"
-.\"   is in file doc-[dit|n]roff
-.
-.
-.\" NS Qq user macro
-.\" NS   enclose string in straight double quotes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Qq' set in doc-common
-.
-.de Qq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Qq
-.
-.  ds doc-quote-left "\*[q]
-.  ds doc-quote-right "\*[q]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Sq user macro
-.\" NS   enclose string in single quotes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Sq' set in doc-common
-.
-.de Sq
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Sq
-.
-.  ds doc-quote-left "\*[doc-left-singlequote]
-.  ds doc-quote-right "\*[doc-right-singlequote]
-.
-.  doc-enclose-string \$@
-..
-.
-.
-.\" NS Es user macro
-.\" NS   set up arguments (i.e., the left and right quotation character as
-.\" NS   first and second argument) for .En call
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.
-.de Es
-.  if !\n[doc-arg-limit] \{\
-.    ie (\n[.$] > 2) \{\
-.      ds doc-macro-name Es
-.      doc-parse-args \$@
-.    \}
-.    el \{\
-.      ds doc-quote-left "\$1
-.      ds doc-quote-right "\$2
-.  \}\}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  ds doc-quote-left "\*[doc-arg\n[doc-arg-ptr]]
-.  nr doc-arg-ptr +1
-.  ds doc-quote-right "\*[doc-arg\n[doc-arg-ptr]]
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.    doc-do-\n[doc-type\n[doc-arg-ptr]]
-.  el \
-.    doc-print-and-reset
-..
-.
-.
-.\" NS doc-have-slot global register (bool)
-.\" NS   set if `doc-enclose-string' has created a slot for closing
-.\" NS   delimiter
-.
-.nr doc-have-slot 0
-.
-.
-.\" NS doc-enclose-string macro
-.\" NS   enclose string with given args (e.g. [ and ])
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-have-slot
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-des
-.\" NS   doc-reg-des1
-.\" NS   doc-reg-des2
-.\" NS
-.\" NS requires:
-.\" NS   doc-quote-left
-.\" NS   doc-quote-right
-.
-.de doc-enclose-string
-.  if \n[doc-in-synopsis-section] \
-.    doc-set-hard-space
-.
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \
-.      doc-parse-args \$@
-.    el \{\
-.      nop \)\*[doc-quote-left]\*[doc-quote-right]
-.  \}\}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  \" the final `\)' prevents hyphenation in case the next character is `\%'
-.  nop \)\*[doc-quote-left]\)\c
-.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    \" last argument
-.    nop \)\*[doc-quote-right]\)\c
-.    doc-print-and-reset
-.  \}
-.  el \{\
-.    \" test whether last arguments are of type closing punctuation
-.    \" resp. suffix
-.    ie (\n[doc-type\n[doc-arg-limit]] == 3) \{\
-.      nr doc-reg-des (\n[doc-arg-limit] - 1)
-.      while (\n[doc-type\n[doc-reg-des]] == 3) \
-.        nr doc-reg-des -1
-.
-.      \" prepend closing delimiter
-.      nr doc-reg-des +1
-.      ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
-.    \}
-.    el \{\
-.      \" test whether last arguments are macros which continue the line
-.      \" logically
-.      nr doc-reg-des \n[doc-arg-limit]
-.      while (\n[doc-reg-des] >= \n[doc-arg-ptr]) \{\
-.        if !\A\a\*[doc-arg\n[doc-reg-des]]\a \
-.          break
-.        if !d doc-after-\*[doc-arg\n[doc-reg-des]] \
-.          break
-.        nr doc-reg-des -1
-.      \}
-.
-.      \" if there are no trailing macros to be skipped, append argument
-.      ie (\n[doc-reg-des] == \n[doc-arg-limit]) \
-.        doc-append-arg "\)\*[doc-quote-right]\)" 3
-.      el \{\
-.        \" if a previous call to `doc-enclose-string' has already created
-.        \" a slot, prepend argument
-.        ie \n[doc-have-slot] \
-.          ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
-.        el \{\
-.          \" we have to shift all arguments to the right
-.          nr doc-reg-des +1
-.          nr doc-reg-des1 \n[doc-arg-limit]
-.          nr doc-reg-des2 (\n[doc-arg-limit] + 1)
-.          while (\n[doc-reg-des1] >= \n[doc-reg-des]) \{\
-.            rn doc-arg\n[doc-reg-des1] doc-arg\n[doc-reg-des2]
-.            rnn doc-type\n[doc-reg-des1] doc-type\n[doc-reg-des2]
-.            rn doc-space\n[doc-reg-des1] doc-space\n[doc-reg-des2]
-.            nr doc-reg-des1 -1
-.            nr doc-reg-des2 -1
-.          \}
-.          nr doc-arg-limit +1
-.
-.          \" finally, insert closing delimiter into the freed slot and
-.          \" recompute spacing vector
-.          ds doc-arg\n[doc-reg-des] "\)\*[doc-quote-right]\)
-.          nr doc-type\n[doc-reg-des] 3
-.          nr doc-num-args (\n[doc-arg-limit] - \n[doc-reg-des] + 1)
-.          nr doc-arg-limit (\n[doc-reg-des] - 1)
-.          doc-parse-space-vector
-.          nr doc-have-slot 1
-.    \}\}\}
-.
-.    doc-do-\n[doc-type\n[doc-arg-ptr]]
-.  \}
-.
-.  if \n[doc-in-synopsis-section] \
-.    doc-set-soft-space
-..
-.
-.
-.\" NS En user macro
-.\" NS   enclose arguments with quotation characters set up with `.Es'
-.
-.als En doc-enclose-string
-.
-.
-.\" NS Ao user macro
-.\" NS   angle open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Ao' set in doc-common
-.
-.de Ao
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Ao
-.
-.  ie "\*[doc-macro-name]"An" \
-.    ds doc-quote-left <
-.  el \
-.    ds doc-quote-left \[la]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Ac user macro
-.\" NS   angle close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Ac' set in doc-common
-.
-.de Ac
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Ac
-.
-.  ie "\*[doc-macro-name]"An" \
-.    ds doc-quote-right >
-.  el \
-.    ds doc-quote-right \[ra]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Bo user macro
-.\" NS   bracket open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Bo' set in doc-common
-.
-.de Bo
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Bo
-.
-.  ds doc-quote-left "\*[doc-left-bracket]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Bc user macro
-.\" NS   bracket close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Bc' set in doc-common
-.
-.de Bc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Bc
-.
-.  ds doc-quote-right "\*[doc-right-bracket]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Bro user macro
-.\" NS   brace open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Bro' set in doc-common
-.
-.de Bro
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Bo
-.
-.  ds doc-quote-left {
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Brc user macro
-.\" NS   brace close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Brc' set in doc-common
-.
-.de Brc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Bc
-.
-.  ds doc-quote-right }
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Do user macro
-.\" NS   double quote open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Do' set in doc-common
-.
-.de Do
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Do
-.
-.  ds doc-quote-left "\*[Lq]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Dc user macro
-.\" NS   double quote close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Dc' set in doc-common
-.
-.de Dc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Dc
-.
-.  ds doc-quote-right "\*[Rq]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Eo user macro
-.\" NS   enclose open (using first argument as beginning of enclosure)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Eo' set in doc-common
-.
-.de Eo
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Eo
-.
-.  ds doc-quote-left "\$1
-.
-.  shift
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Ec user macro
-.\" NS   enclose close (using first argument as end of enclosure)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Ec' set in doc-common
-.
-.de Ec
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Ec
-.
-.  ds doc-quote-right "\$1
-.
-.  shift
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Oo user macro
-.\" NS   option open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Oo' set in doc-common
-.
-.de Oo
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Oo
-.
-.  ds doc-quote-left [
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Oc user macro
-.\" NS   option close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Oc' set in doc-common
-.
-.de Oc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Oc
-.
-.  ds doc-quote-right ]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Po user macro
-.\" NS   parenthesis open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Po' set in doc-common
-.
-.de Po
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Po
-.
-.  ds doc-quote-left "\*[doc-left-parenthesis]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Pc user macro
-.\" NS   parenthesis close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Pc' set in doc-common
-.
-.de Pc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Pc
-.
-.  ds doc-quote-right "\*[doc-right-parenthesis]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Qo user macro
-.\" NS   straight double quote open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Qo' set in doc-common
-.
-.de Qo
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Qo
-.
-.  ds doc-quote-left "\*[q]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Qc user macro
-.\" NS   straight double quote close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Qc' set in doc-common
-.
-.de Qc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Qc
-.
-.  ds doc-quote-right "\*[q]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS So user macro
-.\" NS   single quote open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `So' set in doc-common
-.
-.de So
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name So
-.
-.  ds doc-quote-left "\*[doc-left-singlequote]
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Sc user macro
-.\" NS   single quote close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Sc' set in doc-common
-.
-.de Sc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Sc
-.
-.  ds doc-quote-right "\*[doc-right-singlequote]
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS Xo user macro
-.\" NS   extend open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Xo' set in doc-common
-.
-.de Xo
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Xo
-.
-.  ds doc-quote-left
-.
-.  doc-enclose-open \$@
-..
-.
-.
-.\" NS Xc user macro
-.\" NS   extend close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS   doc-quote-right
-.\" NS
-.\" NS width register `Xc' set in doc-common
-.
-.de Xc
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Xc
-.
-.  ds doc-quote-right
-.
-.  doc-enclose-close \$@
-..
-.
-.
-.\" NS doc-nesting-level global register
-.\" NS   used by `doc-enclose-open' and `doc-enclose-close'
-.
-.nr doc-nesting-level 0
-.
-.
-.\" NS doc-in-list global register (bool)
-.\" NS   whether we are in (logical) .It
-.
-.nr doc-in-list 0
-.
-.
-.\" NS doc-enclose-open macro
-.\" NS   enclose string open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-nesting-level
-.
-.de doc-enclose-open
-.  if !\n[doc-arg-limit] \
-.    doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  nr doc-arg-ptr -1
-.
-.  nop \)\*[doc-quote-left]\)\c
-.
-.  \" start enclosure box
-.  box doc-enclosure-box\n[doc-nesting-level]
-.  ev doc-enclosure-env\n[doc-nesting-level]
-.  evc 0
-.  in 0
-.  nf
-.  \" we insert something to make .chop always work
-.  nop \&\c
-.
-.  \" increase nesting level *after* parsing of arguments
-.  nr doc-nesting-level +1
-.
-.  if \n[doc-arg-limit] \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.      doc-print-recursive
-.    el \
-.      doc-reset-args
-.  \}
-..
-.
-.
-.\" NS doc-enclose-close macro
-.\" NS   enclose string close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-nesting-level
-.
-.de doc-enclose-close
-.  nr doc-nesting-level -1
-.
-.  \" finish enclosure box
-.  br
-.  ev
-.  box
-.  chop doc-enclosure-box\n[doc-nesting-level]
-.  unformat doc-enclosure-box\n[doc-nesting-level]
-.
-.  nh
-.  nop \*[doc-enclosure-box\n[doc-nesting-level]]\c
-.  nop \)\*[doc-quote-right]\)\c
-.
-.  if !\n[doc-arg-limit] \{\
-.    doc-parse-args \$@
-.
-.    if !\n[.$] \
-.      doc-print-and-reset
-.  \}
-.
-.  if \n[doc-arg-limit] \{\
-.    ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.      nop \)\*[doc-space\n[doc-arg-ptr]]\c
-.      nr doc-arg-ptr +1
-.      doc-print-recursive
-.    \}
-.    el \
-.      doc-print-and-reset
-.  \}
-.
-.  \" shall we finish .It macro?
-.  if !"\*[doc-macro-name]"It" \
-.    if \n[doc-in-list] \
-.      if !\n[doc-nesting-level] \
-.        doc-\*[doc-list-type-stack\n[doc-list-depth]]
-..
-.
-.
-.\" NS Pf user macro
-.\" NS   prefix: `.Pf prefix arg ...'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-macro-name
-.\" NS   doc-quote-left
-.\" NS
-.\" NS width register `Pf' set in doc-common
-.
-.de Pf
-.  if !\n[doc-arg-limit] \
-.    ds doc-macro-name Pf
-.
-.  ie \n[doc-arg-limit] \{\
-.    ie ((\n[doc-arg-limit] - \n[doc-arg-ptr]) > 1) \{\
-.      nr doc-arg-ptr +1
-.      nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-.    \}
-.    el \
-.      tm mdoc warning: .Pf: trailing prefix (#\n[.c])
-.  \}
-.  el \{\
-.    nop \)\$1\)\c
-.    shift
-.    ie \n[.$] \
-.      doc-parse-args \$@
-.    el \{\
-.      tm mdoc warning: .Pf: missing arguments (#\n[.c])
-.      nop \)
-.  \}\}
-.
-.  if \n[doc-arg-limit] \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
-.      doc-print-and-reset
-.    el \
-.      doc-do-\n[doc-type\n[doc-arg-ptr]]
-.  \}
-..
-.
-.
-.\" NS Ns user macro
-.\" NS   remove space (space removal done by `doc-parse-args')
-.\" NS
-.\" NS modifies:
-.\" NS   doc-argXXX
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Ns' set in doc-common
-.
-.de Ns
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Ns
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Ns must be called with arguments (#\n[.c])
-.  \}
-.
-.  if \n[doc-arg-limit] \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.      doc-print-recursive
-.    el \
-.      doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Ap user macro
-.\" NS   append an apostrophe
-.\" NS
-.\" NS width register `Ap' set in doc-common
-.
-.de Ap
-.  ie !\n[doc-arg-limit] \
-.    tm Usage: `Ap' cannot be first macro on a line (no `.Ap') (#\n[.c])
-.  el \{\
-.    nop \)'\)\c
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.      doc-print-recursive
-.    el \
-.      doc-reset-args
-.  \}
-..
-.
-.
-.\" NS doc-space global string
-.\" NS   current inter-argument space
-.
-.ds doc-space "\*[doc-soft-space]
-.
-.
-.\" NS doc-soft-space constant string
-.\" NS   soft (stretchable) space (defined in doc-common)
-.
-.
-.\" NS doc-hard-space constant string
-.\" NS   hard (unpaddable) space (defined in doc-common)
-.
-.
-.\" NS doc-set-hard-space macro
-.\" NS   set current space string to hard (unpaddable) space.
-.\" NS
-.\" NS modifies:
-.\" NS   doc-saved-space
-.\" NS   doc-space
-.
-.de doc-set-hard-space
-.  ie "\*[doc-space]"" \
-.    ds doc-saved-space "\*[doc-hard-space]
-.  el \
-.    ds doc-space "\*[doc-hard-space]
-..
-.
-.
-.\" NS doc-set-soft-space macro
-.\" NS   set current space string to soft space
-.\" NS
-.\" NS modifies:
-.\" NS   doc-saved-space
-.\" NS   doc-space
-.
-.de doc-set-soft-space
-.  ie "\*[doc-space]"" \
-.    ds doc-saved-space "\*[doc-soft-space]
-.  el \
-.    ds doc-space "\*[doc-soft-space]
-..
-.
-.
-.\" NS doc-space-mode global register (bool)
-.\" NS   default is one (space mode on)
-.
-.nr doc-space-mode 1
-.
-.
-.\" NS doc-saved-space global string
-.\" NS   saved value of `doc-space'
-.
-.ds doc-saved-space "\*[doc-space]
-.
-.
-.\" NS doc-have-space global register (bool)
-.\" NS   set if last command was horizontal space
-.
-.nr doc-have-space 0
-.
-.
-.\" NS Sm user macro
-.\" NS   space mode (`.Sm'/`.Sm on'/`.Sm off')
-.\" NS
-.\" NS   without argument, toggle space mode
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-limit
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-macro-name
-.\" NS   doc-num-args
-.\" NS   doc-saved-space
-.\" NS   doc-space
-.\" NS   doc-space-mode
-.\" NS   doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Sm
-.\" NS
-.\" NS width register `Sm' set in doc-common
-.
-.de Sm
-.  ie \n[doc-have-space] \
-.    nr doc-reg-Sm 0
-.  el \
-.    nr doc-reg-Sm 1
-.
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Sm
-.      doc-parse-args \$@
-.    \}
-.    el \{\
-.      ie \n[doc-space-mode] \{\
-.        ds doc-saved-space "\*[doc-space]
-.        ds doc-space
-.        nr doc-space-mode 0
-.      \}
-.      el \{\
-.        ds doc-space "\*[doc-saved-space]
-.        nr doc-space-mode 1
-.
-.        \" finish line only if it is interrupted and `doc-have-space'
-.        \" isn't set
-.        if \n[doc-reg-Sm] \
-.          if \n[.int] \
-.            nop \)
-.      \}
-.  \}\}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.
-.  \" avoid a warning message in case `Sm' is the last parameter
-.  if !d doc-arg\n[doc-arg-ptr] \
-.    ds doc-arg\n[doc-arg-ptr]
-.
-.  ie "\*[doc-arg\n[doc-arg-ptr]]"on" \{\
-.    ds doc-space "\*[doc-saved-space]
-.    nr doc-space-mode 1
-.  \}
-.  el \{\
-.    ie "\*[doc-arg\n[doc-arg-ptr]]"off" \{\
-.      ds doc-saved-space "\*[doc-space]
-.      ds doc-space
-.      nr doc-space-mode 0
-.    \}
-.    el \{\
-.      \" no argument for Sm
-.      nr doc-arg-ptr -1
-.      ie \n[doc-space-mode] \{\
-.        ds doc-saved-space "\*[doc-space]
-.        ds doc-space
-.        nr doc-space-mode 0
-.      \}
-.      el \{\
-.        ds doc-space "\*[doc-saved-space]
-.        nr doc-space-mode 1
-.      \}
-.  \}\}
-.
-.  ie \n[doc-space-mode] \{\
-.    \" recompute space vector for remaining arguments
-.    nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
-.    nr doc-arg-limit \n[doc-arg-ptr]
-.    if \n[doc-num-args] \
-.      doc-parse-space-vector
-.
-.    \" finish line only if it is interrupted and `doc-have-space'
-.    \" isn't set
-.    if \n[doc-reg-Sm] \
-.      if \n[.int] \
-.        nop \)
-.  \}
-.  el \{\
-.    \" reset remaining space vector elements
-.    nr doc-reg-Sm (\n[doc-arg-ptr] + 1)
-.    while (\n[doc-reg-Sm] <= \n[doc-arg-limit]) \{\
-.      ds doc-space\n[doc-reg-Sm]
-.      nr doc-reg-Sm +1
-.      \" the body of a `while' request must end with the fitting `\}'!
-.    \}
-.  \}
-.
-.  \" do we have parameters to print?
-.  ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.    \" skip `Sm' argument
-.    nr doc-arg-ptr +1
-.    doc-print-recursive
-.  \}
-.  el \
-.    doc-reset-args
-..
-.
-.
-.\" NS doc-arg-type immediate register
-.\" NS   argument type (macro=1, string=2, punctuation suffix=3,
-.\" NS   punctuation prefix=4)
-.
-.nr doc-arg-type 0
-.
-.
-.\" NS doc-get-arg-type macro
-.\" NS   get argument type
-.\" NS
-.\" NS   this macro expects the width of the argument in `doc-width'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-type
-.
-.de doc-get-arg-type
-.  nr doc-arg-type 2
-.
-.  if ((\n[doc-width] < 4) & \A\a\$1\a) \{\
-.    ie (\n[doc-width] == 1) \{\
-.      if r doc-punct\$1 \
-.        nr doc-arg-type \n[doc-punct\$1]
-.    \}
-.    el \
-.      if r \$1 \
-.        if d \$1 \
-.          nr doc-arg-type 1
-.  \}
-..
-.
-.
-.\" NS doc-get-arg-type* macro
-.\" NS   similar to as `doc-get-arg-type' but uses doc-argXXX strings
-.\" NS
-.\" NS   this macro sets the `doc-width' register using the `length' request
-.\" NS   to get the number of characters in a string literally
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-type
-.\" NS   doc-width
-.
-.de doc-get-arg-type*
-.  nr doc-arg-type 2
-.  length doc-width "\*[doc-arg\$1]
-.
-.  if ((\n[doc-width] < 4) & \A\a\*[doc-arg\$1]\a) \{\
-.    ie (\n[doc-width] == 1) \{\
-.      if r doc-punct\*[doc-arg\$1] \
-.        nr doc-arg-type \n[doc-punct\*[doc-arg\$1]]
-.    \}
-.    el \
-.      if r \*[doc-arg\$1] \
-.        if d \*[doc-arg\$1] \
-.          nr doc-arg-type 1
-.  \}
-..
-.
-.
-.\" NS doc-set-spacing-1 macro
-.\" NS   set spacing for macros
-.\" NS
-.\" NS modifies:
-.\" NS   doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dssfm
-.\" NS   doc-reg-dssfm1
-.
-.de doc-set-spacing-1
-.  nr doc-reg-dssfm1 \n[\*[doc-arg\n[doc-arg-limit]]]
-.
-.  \" closing macros like .Ac, Bc., etc. have value 3 (remove space before
-.  \" argument)
-.  ie (\n[doc-reg-dssfm1] == 3) \{\
-.    if \n[doc-arg-limit] \{\
-.      nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
-.      ds doc-space\n[doc-reg-dssfm]
-.    \}
-.    ds doc-space\n[doc-arg-limit] "\*[doc-space]
-.  \}
-.  el \{\
-.    \" macros like .Ap and .Ns have value 2 (remove space before and after
-.    \" argument)
-.    ie (\n[doc-reg-dssfm1] == 2) \{\
-.      if \n[doc-arg-limit] \{\
-.        nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
-.        ds doc-space\n[doc-reg-dssfm]
-.      \}
-.      ds doc-space\n[doc-arg-limit]
-.    \}
-.    el \
-.      ds doc-space\n[doc-arg-limit]
-.  \}
-..
-.
-.
-.\" NS doc-set-spacing-2 macro
-.\" NS   set spacing for strings
-.\" NS
-.\" NS modifies:
-.\" NS   doc-spaceXXX
-.
-.de doc-set-spacing-2
-.  ds doc-space\n[doc-arg-limit] "\*[doc-space]
-..
-.
-.
-.\" NS doc-set-spacing-3 macro
-.\" NS   set spacing for punctuation suffixes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dssfps
-.
-.de doc-set-spacing-3
-.  if \n[doc-arg-limit] \{\
-.    nr doc-reg-dssfps (\n[doc-arg-limit] - 1)
-.    ds doc-space\n[doc-reg-dssfps]
-.  \}
-.
-.  ds doc-space\n[doc-arg-limit] "\*[doc-space]
-..
-.
-.
-.\" NS doc-set-spacing-4 macro
-.\" NS   set spacing for punctuation prefixes
-.\" NS
-.\" NS modifies:
-.\" NS   doc-spaceXXX
-.
-.de doc-set-spacing-4
-.  ds doc-space\n[doc-arg-limit]
-..
-.
-.
-.\" type switches (on current argument doc-arg-ptr)
-.
-.
-.\" NS doc-do-1 macro
-.\" NS   call request if macro
-.
-.de doc-do-1
-.  \*[doc-arg\n[doc-arg-ptr]]
-..
-.
-.
-.\" NS doc-do-2 macro
-.\" NS   call .doc-print-recursive if string
-.
-.als doc-do-2 doc-print-recursive
-.
-.
-.\" NS doc-do-3 macro
-.\" NS   call .doc-print-recursive if punctuation suffix
-.
-.als doc-do-3 doc-print-recursive
-.
-.
-.\" NS doc-do-4 macro
-.\" NS   call .doc-print-recursive if punctuation prefix
-.
-.als doc-do-4 doc-print-recursive
-.
-.
-.\" NS doc-fontmode-depth global register
-.\" NS   font mode level
-.
-.nr doc-fontmode-depth 0
-.
-.
-.\" NS doc-fontmode-font-stackXXX global register
-.\" NS   stack of saved current font values from `Bf' macro
-.\" NS
-.\" NS limit:
-.\" NS   doc-fontmode-depth
-.
-.nr doc-fontmode-font-stack0 0
-.
-.
-.\" NS doc-fontmode-size-stackXXX global register
-.\" NS   stack of saved current size values from `Bf' macro
-.\" NS
-.\" NS limit:
-.\" NS   doc-fontmode-depth
-.
-.nr doc-fontmode-size-stack0 0
-.
-.
-.\" NS Bf user macro
-.\" NS   begin font mode (will be begin-mode/end-mode in groff & TeX)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-fontmode-depth
-.\" NS   doc-fontmode-font-stackXXX
-.\" NS   doc-fontmode-size-stackXXX
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Bf' set in doc-common
-.
-.de Bf
-.  ds doc-macro-name Bf
-.
-.  ie \n[.$] \{\
-.    nr doc-fontmode-depth +1
-.
-.    \" save current font and size
-.    nr doc-fontmode-font-stack\n[doc-fontmode-depth] \n[.f]
-.    nr doc-fontmode-size-stack\n[doc-fontmode-depth] \n[.ps]
-.
-.    ie        "\$1"Em" \
-.      nop \*[doc-Em-font]\c
-.    el \{ .ie "\$1"Li" \
-.      nop \*[doc-Li-font]\c
-.    el \{ .ie "\$1"Sy" \
-.      nop \*[doc-Sy-font]\c
-.    el \{ .ie "\$1"-emphasis" \
-.      nop \*[doc-Em-font]\c
-.    el \{ .ie "\$1"-literal" \
-.      nop \*[doc-Li-font]\c
-.    el \{ .ie "\$1"-symbolic" \
-.      nop \*[doc-Sy-font]\c
-.    el \{\
-.      tmc mdoc warning: Unknown keyword `\$1' in .Bf macro
-.      tm1 " (#\n[.c])
-.  \}\}\}\}\}\}\}
-.  el \
-.    tm Usage: .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\n[.c])
-..
-.
-.
-.\" NS Ef user macro
-.\" NS   end font mode
-.\" NS
-.\" NS modifies:
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Ef' set in doc-common
-.
-.de Ef
-.  ds doc-macro-name Ef
-.
-.  ie \n[doc-fontmode-depth] \{\
-.    \" restore saved font and size
-.    nop \)\f[\n[doc-fontmode-font-stack\n[doc-fontmode-depth]]]\c
-.    nop \)\s[\n[doc-fontmode-size-stack\n[doc-fontmode-depth]]u]\c
-.
-.    nr doc-fontmode-font-stack\n[doc-fontmode-depth] 0
-.    nr doc-curr-font \n[.f]
-.    nr doc-fontmode-size-stack\n[doc-fontmode-depth] 0
-.    nr doc-curr-size \n[.ps]
-.    nr doc-fontmode-depth -1
-.  \}
-.  el \
-.    tm mdoc warning: Extraneous .Ef (#\n[.c])
-..
-.
-.
-.\" NS doc-keep-type global register
-.\" NS   current keep type; 1 is `-words', 2 is `-lines', 3 is unknown
-.
-.nr doc-keep-type 0
-.
-.
-.\" NS Bk user macro
-.\" NS   begin keep
-.\" NS
-.\" NS modifies:
-.\" NS   doc-keep-type
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Bk' set in doc-common
-.
-.de Bk
-.  ds doc-macro-name Bk
-.
-.  if \n[doc-keep-type] \
-.    tm .Bk: nesting keeps not implemented yet. (#\n[.c])
-.
-.  ie        "\$1"-lines" \{\
-.    nr doc-keep-type 2
-.    tm .Bk -lines: Not implemented yet. (#\n[.c])
-.  \}
-.  el \{ .ie "\$1"-words" \{\
-.    nr doc-keep-type 1
-.    doc-set-hard-space
-.  \}
-.  el \{ .ie "\$1"" \{\
-.    \" default
-.    nr doc-keep-type 1
-.    doc-set-hard-space
-.  \}
-.  el \{\
-.    tm mdoc warning: Unknown keyword `\$1' in .Bk macro (#\n[.c])
-.    nr doc-keep-type 3
-.  \}\}\}
-.
-\#.  nr doc-nesting-level +1
-..
-.
-.
-.\" NS Ek user macro
-.\" NS   end keep
-.\" NS
-.\" NS modifies:
-.\" NS   doc-keep-type
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Ek' set in doc-common
-.
-.de Ek
-.  ds doc-macro-name Ek
-.
-\#.  nr doc-nesting-level -1
-.
-.  ie \n[.$] \
-.    tm Usage: .Ek (does not take arguments) (#\n[.c])
-.  el \{\
-.    if !\n[doc-keep-type] \
-.      tm mdoc warning: .Ek found without .Bk before (#\n[.c])
-.
-.    ie        (\n[doc-keep-type] == 1) \
-.      doc-set-soft-space
-.    el \{ .if (\n[doc-keep-type] == 2) \
-.      tm .Bk -lines: Not implemented yet. (#\n[.c])
-.  \}\}
-.
-.  nr doc-keep-type 0
-.
-\#.  if !"\*[doc-out-string]"" \
-\#.    doc-print-out-string
-..
-.
-.
-.\" NS doc-display-depth global register
-.\" NS   display level
-.
-.nr doc-display-depth 0
-.
-.
-.\" NS doc-is-compact global register (bool)
-.\" NS   set if the `compact' keyword is given
-.
-.nr doc-is-compact 0
-.
-.
-.\" NS doc-display-type-stackXXX global string
-.\" NS   the display type stack
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.ds doc-display-type-stack0
-.
-.
-.\" NS doc-display-indent-stackXXX global register
-.\" NS   stack of display indentation values
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.nr doc-display-indent-stack0 0
-.
-.
-.\" NS doc-display-ad-stackXXX global register
-.\" NS   stack of saved adjustment modes
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.nr doc-display-ad-stack0 0
-.
-.
-.\" NS doc-display-fi-stackXXX global register
-.\" NS   stack of saved fill modes
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.nr doc-display-fi-stack0 0
-.
-.
-.\" NS doc-display-ft-stackXXX global register
-.\" NS   stack of saved fonts
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.nr doc-display-ft-stack0 0
-.
-.
-.\" NS doc-display-ps-stackXXX global register
-.\" NS   stack of saved font sizes
-.\" NS
-.\" NS limit:
-.\" NS   doc-display-depth
-.
-.nr doc-display-ps-stack0 0
-.
-.
-.\" NS Bd user macro
-.\" NS   begin display
-.\" NS
-.\" NS width register `Bd' set in doc-common
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-display-depth
-.\" NS   doc-display-ad-stackXXX
-.\" NS   doc-display-fi-stackXXX
-.\" NS   doc-display-ft-stackXXX
-.\" NS   doc-display-ps-stackXXX
-.\" NS   doc-display-file
-.\" NS   doc-display-indent-stackXXX
-.\" NS   doc-display-type-stackXXX
-.\" NS   doc-is-compact
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Bd
-.
-.de Bd
-.  ds doc-macro-name Bd
-.
-.  if !\n[.$] \{\
-.    tm1 "Usage: .Bd {-literal | -filled | -ragged | -centered | -unfilled}
-.    tm1 "           [-offset [string]] [-compact] [-file name] (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-is-compact 0
-.  ds doc-display-file
-.  nr doc-reg-Bd 1
-.  nr doc-display-depth +1
-.
-.  \" save current adjustment and fill modes
-.  nr doc-display-ad-stack\n[doc-display-depth] \n[.j]
-.  nr doc-display-fi-stack\n[doc-display-depth] \n[.u]
-.
-.  ie        "\$1"-literal" \{\
-.    ds doc-display-type-stack\n[doc-display-depth] literal
-.    nr doc-display-ft-stack\n[doc-display-depth] \n[.f]
-.    nr doc-display-ps-stack\n[doc-display-depth] \n[.ps]
-.
-.    ie t \
-.      ta T 9n
-.    el \
-.      ta T 8n
-.    nf
-.  \}
-.  el \{ .ie "\$1"-filled" \{\
-.    ds doc-display-type-stack\n[doc-display-depth] filled
-.    ad b
-.    fi
-.  \}
-.  el \{ .ie "\$1"-ragged" \{\
-.    ds doc-display-type-stack\n[doc-display-depth] ragged
-.    na
-.    fi
-.  \}
-.  el \{ .ie "\$1"-centered" \{\
-.    ds doc-display-type-stack\n[doc-display-depth] centered
-.    ad c
-.    fi
-.  \}
-.  el \{ .ie "\$1"-unfilled" \{\
-.    ds doc-display-type-stack\n[doc-display-depth] unfilled
-.    nf
-.  \}
-.  el \{\
-.    tm1 "mdoc warning: Unknown keyword `\$1' (or missing display type)
-.    tm1 "              in .Bd macro (#\n[.c])
-.    nr doc-reg-Bd 0
-.  \}\}\}\}\}
-.
-.  \" have we seen an argument?
-.  if \n[doc-reg-Bd] \{\
-.    shift
-.    \" check other arguments
-.    if \n[.$] \
-.      doc-do-Bd-args \$@
-.  \}
-.
-.  \" avoid warning about non-existent register
-.  if !r doc-display-indent-stack\n[doc-display-depth] \
-.    nr doc-display-indent-stack\n[doc-display-depth] 0
-.
-.  if \n[doc-display-indent-stack\n[doc-display-depth]] \
-.    in +\n[doc-display-indent-stack\n[doc-display-depth]]u
-.
-.  if !\n[doc-is-compact] \
-.    sp \n[doc-display-vertical]u
-.
-.  if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \
-.    if t \
-.      nop \*[doc-Li-font]\c
-.
-.  if !\n[cR] \
-.    ne 2v
-.
-.  if !"\*[doc-display-file]"" \
-.    so \*[doc-display-file]
-.
-.  nr doc-is-compact 0
-.  ds doc-display-file
-..
-.
-.
-.\" NS doc-do-Bd-args macro
-.\" NS   resolve remaining .Bd arguments
-.\" NS
-.\" NS modifies:
-.\" NS   doc-display-file
-.\" NS   doc-display-indent-stackXXX
-.\" NS   doc-is-compact
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-ddBa
-.\" NS   doc-reg-ddBa1
-.\" NS   doc-reg-ddBa2
-.\" NS   doc-reg-ddBa3
-.\" NS   doc-reg-ddBa4
-.\" NS   doc-str-ddBa
-.
-.de doc-do-Bd-args
-.  nr doc-reg-ddBa 1
-.
-.  ie        "\$1"-offset" \{\
-.    nr doc-reg-ddBa 2
-.
-.    ie        "\$2"left" \
-.      nr doc-display-indent-stack\n[doc-display-depth] 0
-.    el \{ .ie "\$2"right" \
-.      nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u)
-.    el \{ .ie "\$2"center" \
-.      nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u)
-.    el \{ .ie "\$2"indent" \
-.      nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u
-.    el \{ .ie "\$2"indent-two" \
-.      nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u)
-.    el \
-.      nr doc-reg-ddBa 1
-.    \}\}\}\}
-.
-.    \" not a known keyword
-.    if (\n[doc-reg-ddBa] == 1) \{\
-.      nr doc-reg-ddBa 2
-.
-.      nr doc-reg-ddBa1 0
-.      if \B\a(\$2)\a \{\
-.        \" disable warnings related to scaling indicators (32)
-.        nr doc-reg-ddBa2 \n[.warn]
-.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
-.
-.        \" values without a scaling indicator are taken as strings;
-.        \" we test whether the parameter string with and without the last
-.        \" character yields identical numerical results (ignoring the
-.        \" scaling indicator)
-.        ds doc-str-ddBa "\$2
-.        substring doc-str-ddBa 0 -2
-.        if \B\a(\*[doc-str-ddBa])\a \{\
-.          nr doc-reg-ddBa3 (;(\$2))
-.          nr doc-reg-ddBa4 (\*[doc-str-ddBa])
-.          if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \
-.            nr doc-reg-ddBa1 1
-.        \}
-.
-.        \" enable all warnings again
-.        warn \n[doc-reg-ddBa2]
-.      \}
-.
-.      ie \n[doc-reg-ddBa1] \
-.        nr doc-display-indent-stack\n[doc-display-depth] \$2
-.      el \{\
-.        doc-get-width "\$2"
-.        ie (\n[doc-width] <= 3) \{\
-.          \" if the offset parameter is a macro, use the macro's
-.          \" width as specified in doc-common
-.          doc-get-arg-type "\$2"
-.          ie (\n[doc-arg-type] == 1) \
-.            nr doc-display-indent-stack\n[doc-display-depth] \n[\$2]
-.          el \
-.            nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.        \}
-.        el \
-.          nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.    \}\}
-.  \}
-.  el \{ .ie "\$1"-compact" \
-.    nr doc-is-compact 1
-.  el \{ .ie "\$1"-file" \{\
-.    ie !"\$2"" \{\
-.      ds doc-display-file "\$2
-.      nr doc-reg-ddBa 2
-.    \}
-.    el \
-.      tm mdoc warning: .Bd `-file' keyword requires argument (#\n[.c])
-.  \}
-.  el \
-.      tm mdoc warning: Unknown keyword `\$1' in .Bd macro (#\n[.c])
-.  \}\}
-.
-.  if (\n[doc-reg-ddBa] < \n[.$]) \{\
-.    shift \n[doc-reg-ddBa]
-.    doc-do-Bd-args \$@
-.  \}
-..
-.
-.
-.\" NS Ed user macro
-.\" NS   end display
-.\" NS
-.\" NS modifies:
-.\" NS   doc-display-depth
-.\" NS   doc-display-indent-stackXXX
-.\" NS   doc-display-type-stackXXX
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Ed' set in doc-common
-.
-.de Ed
-.  ds doc-macro-name Ed
-.
-.  br
-.
-.  if !\n[doc-display-depth] \{\
-.    tm mdoc warning: Extraneous .Ed (#\n[.c])
-.    nr doc-display-depth 1
-.  \}
-.
-.  if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\
-.    ft \n[doc-display-ft-stack\n[doc-display-depth]]
-.    ps \n[doc-display-ps-stack\n[doc-display-depth]]u
-.  \}
-.
-.  in -\n[doc-display-indent-stack\n[doc-display-depth]]u
-.
-.  \" restore saved adjustment and fill modes
-.  ie \n[doc-display-fi-stack\n[doc-display-depth]] \
-.    fi
-.  el \
-.    nf
-.  ad \n[doc-display-ad-stack\n[doc-display-depth]]
-.
-.  nr doc-display-indent-stack\n[doc-display-depth] 0
-.  ds doc-display-type-stack\n[doc-display-depth]
-.  nr doc-display-depth -1
-..
-.
-.
-.\" NS doc-list-type-stackXXX global string
-.\" NS   stack of list types
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.ds doc-list-type-stack1
-.
-.
-.\" NS doc-list-indent-stackXXX global register
-.\" NS   stack of list indentation values
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.nr doc-list-indent-stack1 0
-.
-.
-.\" NS doc-list-have-indent-stackXXX global register (bool)
-.\" NS   an indentation value is active
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.nr doc-list-have-indent-stack1 0
-.
-.
-.\" NS Bl user macro
-.\" NS   begin list
-.\" NS
-.\" NS width register `Bl' set in doc-common
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-list-depth
-.\" NS   doc-list-have-indent-stackXXX
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-list-type-stackXXX
-.\" NS   doc-macro-name
-.\" NS   doc-num-args
-.\" NS   doc-num-columns
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Bl
-.
-.de Bl
-.  if !\n[.$] \{\
-.    doc-Bl-usage
-.    return
-.  \}
-.
-.  ds doc-macro-name Bl
-.  nr doc-list-depth +1
-.  nr doc-arg-ptr 1
-.
-.  ie        "\$1"-hang" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] hang-list
-.    nr doc-list-indent-stack\n[doc-list-depth] 6n
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-tag" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] tag-list
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-item" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] item-list
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-enum" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] enum-list
-.    nr doc-list-indent-stack\n[doc-list-depth] 3n
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-bullet" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] bullet-list
-.    nr doc-list-indent-stack\n[doc-list-depth] 2n
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-dash" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] dash-list
-.    nr doc-list-indent-stack\n[doc-list-depth] 2n
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-hyphen" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] dash-list
-.    nr doc-list-indent-stack\n[doc-list-depth] 2n
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-inset" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] inset-list
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-diag" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] diag-list
-.  \}
-.  el \{ .ie "\$1"-ohang" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] ohang-list
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.  \}
-.  el \{ .ie "\$1"-column" \{\
-.    ds doc-list-type-stack\n[doc-list-depth] column-list
-.    linetabs 1
-.  \}
-.  el \{\
-.    tm1 "mdoc warning: Unknown list type `\$1' (or missing list type)
-.    tm1 "              in .Bl macro
-.    tm
-.    nr doc-arg-ptr 0
-.  \}\}\}\}\}\}\}\}\}\}\}
-.
-.  \" we have seen a list type
-.  if !\n[doc-arg-ptr] \{\
-.    doc-Bl-usage
-.    doc-reset-args
-.    nr doc-list-depth -1
-.    return
-.  \}
-.
-.  shift
-.
-.  \" fill argument vector
-.  nr doc-reg-Bl 1
-.  while (\n[doc-reg-Bl] <= \n[.$]) \{\
-.    ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]]
-.    \" dummy type and space so that doc-save-global-vars() doesn't warn
-.    nr doc-type\n[doc-reg-Bl] 0
-.    ds doc-space\n[doc-reg-Bl]
-.    nr doc-reg-Bl +1
-.  \}
-.
-.  doc-increment-list-stack
-.
-.  if \n[.$] \{\
-.    nr doc-arg-limit \n[.$]
-.    nr doc-arg-ptr 0
-.    doc-do-Bl-args
-.
-.    in +\n[doc-list-offset-stack\n[doc-list-depth]]u
-.
-.    \" initialize column list
-.    if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
-.      doc-set-column-tab \n[doc-num-columns]
-'      in -\n[doc-column-indent-width]u
-.      if !\n[doc-compact-list-stack\n[doc-list-depth]] \
-.        sp \n[doc-display-vertical]u
-.
-.      nf
-.      nr doc-num-columns 0
-.  \}\}
-.
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-Bl-usage macro
-.
-.de doc-Bl-usage
-.  tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset}
-.  tm1 "             [-width <string>]
-.  tm1 "             [-offset <string>] [-compact]
-.  tm1 "       .Bl -column [-offset <string>] <string1> <string2> ...
-.  tm1 "       .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash}
-.  tm1 "             [-offset <string>] [-compact] (#\n[.c])
-..
-.
-.
-.\" NS doc-do-Bl-args macro
-.\" NS   resolve remaining .Bl arguments
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-compact-list-stackXXX
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-list-offset-stackXXX
-.\" NS   doc-num-columns
-.\" NS   doc-tag-prefix-stackXXX
-.\" NS   doc-tag-width-stackXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-box-dBla
-.\" NS   doc-env-dBla
-.\" NS   doc-reg-dBla
-.\" NS   doc-reg-dBla1
-.\" NS   doc-reg-dBla2
-.\" NS   doc-reg-dBla3
-.\" NS   doc-reg-dBla4
-.\" NS   doc-str-dBla
-.\" NS   doc-str-dBla1
-.
-.de doc-do-Bl-args
-.  nr doc-arg-ptr +1
-.
-.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
-.    return
-.
-.  \" avoid a warning message in case e.g. `-offset' has no parameter
-.  nr doc-reg-dBla (\n[doc-arg-ptr] + 1)
-.  if !d doc-arg\n[doc-reg-dBla] \
-.    ds doc-arg\n[doc-reg-dBla]
-.
-.  nr doc-reg-dBla 1
-.
-.  ie        "\*[doc-arg\n[doc-arg-ptr]]"-compact" \
-.    nr doc-compact-list-stack\n[doc-list-depth] 1
-.
-.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\
-.    ie (\n[doc-list-depth] > 1) \{\
-.      nr doc-reg-dBla1 (\n[doc-list-depth] - 1)
-.      ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]]
-.      as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]].
-.      length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]]
-.      nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n
-.    \}
-.    el \
-.      tm mdoc warning: `-nested' allowed with nested .Bl macros only (#\n[.c])
-.  \}
-.
-.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\
-.    nr doc-arg-ptr +1
-.    ds doc-tag-width-stack\n[doc-list-depth] TagwidtH
-.
-.    ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.    substring doc-str-dBla 0 0
-.    ie \a.\a\*[doc-str-dBla]\a \{\
-.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.      substring doc-str-dBla 1
-.      doc-first-parameter \*[doc-str-dBla]
-.      doc-get-width "\*[doc-str-dfp]
-.      doc-get-arg-type "\*[doc-str-dfp]
-.      ie (\n[doc-arg-type] == 1) \
-.        nr doc-reg-dBla1 1
-.      el \
-.        nr doc-reg-dBla1 0
-.    \}
-.    el \
-.      nr doc-reg-dBla1 0
-.    ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.
-.    ie \n[doc-reg-dBla1] \{\
-.      \" execute string in a box to get the width of the diversion
-.      ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
-.      doc-save-global-vars
-.      doc-reset-args
-.      box doc-box-dBla
-.      ev doc-env-dBla
-.      evc 0
-.      in 0
-.      nf
-.      nop \*[doc-str-dBla]
-.      br
-.      ev
-.      box
-.      doc-restore-global-vars
-.      doc-get-width \h'\n[dl]u'
-.      nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.    \}
-.    el \{\
-.      \" test whether argument is a valid numeric expression
-.      nr doc-reg-dBla1 0
-.      if \B\a(\*[doc-str-dBla])\a \{\
-.        \" disable warnings related to scaling indicators (32)
-.        nr doc-reg-dBla2 \n[.warn]
-.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
-.
-.        \" values without a scaling indicator are taken as strings;
-.        \" we test whether the parameter string with and without the last
-.        \" character yields identical numerical results (ignoring the
-.        \" scaling indicator)
-.        ds doc-str-dBla1 "\*[doc-str-dBla]
-.        substring doc-str-dBla1 0 -2
-.        if \B\a(\*[doc-str-dBla1])\a \{\
-.          nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
-.          nr doc-reg-dBla4 (\*[doc-str-dBla1])
-.          if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
-.            nr doc-reg-dBla1 1
-.        \}
-.
-.        \" enable all warnings again
-.        warn \n[doc-reg-dBla2]
-.      \}
-.
-.      ie \n[doc-reg-dBla1] \
-.        nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla])
-.      el \{\
-.        doc-get-arg-width \n[doc-arg-ptr]
-.        ie (\n[doc-width] == 2) \{\
-.          \" if the width parameter is a macro, use the macro's
-.          \" width as specified in doc-common
-.          doc-get-arg-type \*[doc-str-dBla]
-.          ie (\n[doc-arg-type] == 1) \
-.            nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
-.          el \
-.            nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.        \}
-.        el \
-.          nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.  \}\}\}
-.
-.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\
-.    nr doc-arg-ptr +1
-.
-.    ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \
-.      nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u
-.    el \{\
-.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.      nr doc-reg-dBla1 0
-.      if \B\a(\*[doc-str-dBla])\a \{\
-.        nr doc-reg-dBla2 \n[.warn]
-.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
-.
-.        ds doc-str-dBla1 "\*[doc-str-dBla]
-.        substring doc-str-dBla1 0 -2
-.        if \B\a(\*[doc-str-dBla1])\a \{\
-.          nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
-.          nr doc-reg-dBla4 (\*[doc-str-dBla1])
-.          if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
-.            nr doc-reg-dBla1 1
-.        \}
-.
-.        warn \n[doc-reg-dBla2]
-.      \}
-.
-.      ie \n[doc-reg-dBla1] \
-.        nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla]
-.      el \{\
-.        doc-get-arg-width \n[doc-arg-ptr]
-.        ie (\n[doc-width] <= 3) \{\
-.          \" if the offset parameter is a macro, use the macro's
-.          \" width as specified in doc-common
-.          doc-get-arg-type \*[doc-str-dBla]
-.          ie (\n[doc-arg-type] == 1) \
-.            nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
-.          el \
-.            nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.        \}
-.        el \
-.          nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
-.  \}\}\}
-.  el \
-.    nr doc-reg-dBla 0
-.  \}\}\}
-.
-.  \" not a known keyword, so it specifies the width of the next column
-.  \" (if it is a column list)
-.  if !\n[doc-reg-dBla] \{\
-.    ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
-.      nr doc-num-columns +1
-.      ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
-.      substring doc-str-dBla 0 0
-.      ie \a.\a\*[doc-str-dBla]\a \{\
-.        ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.        substring doc-str-dBla 1
-.        doc-first-parameter \*[doc-str-dBla]
-.        doc-get-width "\*[doc-str-dfp]
-.        doc-get-arg-type "\*[doc-str-dfp]
-.        ie (\n[doc-arg-type] == 1) \
-.          nr doc-reg-dBla1 1
-.        el \
-.          nr doc-reg-dBla1 0
-.      \}
-.      el \
-.        nr doc-reg-dBla1 0
-.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
-.
-.      ie \n[doc-reg-dBla1] \{\
-.        \" execute string in a box to get the width of the diversion
-.        ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
-.        doc-save-global-vars
-.        doc-reset-args
-.        box doc-box-dBla
-.        ev doc-env-dBla
-.        evc 0
-.        in 0
-.        nf
-.        nop \*[doc-str-dBla]
-.        br
-.        ev
-.        box
-.        doc-restore-global-vars
-.        ds doc-arg\n[doc-num-columns] "\h'\n[dl]u'
-.      \}
-.      el \
-.        ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]]
-.    \}
-.    el \{\
-.      tmc mdoc warning: Unknown keyword `\*[doc-arg\n[doc-arg-ptr]]'
-.      tm1 " in .Bl macro (#\n[.c])
-.  \}\}
-.
-.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
-.    doc-do-Bl-args
-..
-.
-.
-.\" NS doc-save-global-vars macro
-.\" NS   save all global variables
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dsgv
-.
-.de doc-save-global-vars
-.  ds doc-macro-name-saved "\*[doc-macro-name]
-.  nr doc-arg-limit-saved \n[doc-arg-limit]
-.  nr doc-num-args-saved \n[doc-num-args]
-.  nr doc-arg-ptr-saved \n[doc-arg-ptr]
-.
-.  nr doc-reg-dsgv 1
-.  while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\
-.    ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]]
-.    nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]]
-.    ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]]
-.    nr doc-reg-dsgv +1
-.  \}
-.
-.  nr doc-curr-font-saved \n[doc-curr-font]
-.  nr doc-curr-size-saved \n[doc-curr-size]
-.  nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section]
-.  nr doc-in-library-section-saved \n[doc-in-library-section]
-.  nr doc-indent-synopsis-saved \n[doc-indent-synopsis]
-.  nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active]
-.  nr doc-have-decl-saved \n[doc-have-decl]
-.  nr doc-have-var-saved \n[doc-have-var]
-.  ds doc-command-name-saved "\*[doc-command-name]
-.  ds doc-quote-left-saved "\*[doc-quote-left]
-.  ds doc-quote-right-saved "\*[doc-quote-right]
-.  nr doc-nesting-level-saved \n[doc-nesting-level]
-.  nr doc-in-list-saved \n[doc-in-list]
-.  ds doc-space-saved "\*[doc-space]
-.  ds doc-saved-space-saved "\*[doc-saved-space]
-.  nr doc-space-mode-saved \n[doc-space-mode]
-.  nr doc-have-space-saved \n[doc-have-space]
-.  nr doc-have-slot-saved \n[doc-have-slot]
-.  nr doc-keep-type-saved \n[doc-keep-type]
-.  nr doc-display-depth-saved \n[doc-display-depth]
-.  nr doc-is-compact-saved \n[doc-is-compact]
-.
-.  nr doc-reg-dsgv 0
-.  while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\
-.    ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]]
-.    nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]]
-.    nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]]
-.    nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]]
-.    nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]]
-.    nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]]
-.    nr doc-reg-dsgv +1
-.  \}
-.
-.  nr doc-fontmode-depth-saved \n[doc-fontmode-depth]
-.
-.  nr doc-reg-dsgv 1
-.  while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\
-.    nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]]
-.    nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]]
-.    nr doc-reg-dsgv +1
-.  \}
-.
-.  nr doc-list-depth-saved \n[doc-list-depth]
-.
-.  nr doc-reg-dsgv 1
-.  while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\
-.    ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]]
-.    nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]]
-.    nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]]
-.    nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]]
-.    ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]]
-.    ds doc-tag-width-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-width-stack\n[doc-reg-dsgv]]
-.    nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]]
-.    nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]]
-.    nr doc-reg-dsgv +1
-.  \}
-.
-.  ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font]
-.  nr doc-curr-type-saved \n[doc-curr-type]
-.  ds doc-curr-arg-saved "\*[doc-curr-arg]
-.  nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count]
-.  nr doc-num-columns-saved \n[doc-num-columns]
-.  nr doc-column-indent-width-saved \n[doc-column-indent-width]
-.  nr doc-is-func-saved \n[doc-is-func]
-.  nr doc-have-old-func-saved \n[doc-have-old-func]
-.  nr doc-func-arg-count-saved \n[doc-func-arg-count]
-.  ds doc-func-arg-saved "\*[doc-func-arg]
-.  nr doc-num-func-args-saved \n[doc-num-func-args]
-.  nr doc-func-args-processed-saved \n[doc-func-args-processed]
-.  nr doc-have-func-saved \n[doc-have-func]
-.  nr doc-is-reference-saved \n[doc-is-reference]
-.  nr doc-reference-count-saved \n[doc-reference-count]
-.  nr doc-author-count-saved \n[doc-author-count]
-.
-.  nr doc-reg-dsgv 0
-.  while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\
-.    ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]]
-.    nr doc-reg-dsgv +1
-.  \}
-.
-.  nr doc-book-count-saved \n[doc-book-count]
-.  ds doc-book-name-saved "\*[doc-book-name]
-.  nr doc-city-count-saved \n[doc-city-count]
-.  ds doc-city-name-saved "\*[doc-city-name]
-.  nr doc-date-count-saved \n[doc-date-count]
-.  ds doc-date-saved "\*[doc-date]
-.  nr doc-publisher-count-saved \n[doc-publisher-count]
-.  ds doc-publisher-name-saved "\*[doc-publisher-name]
-.  nr doc-journal-count-saved \n[doc-journal-count]
-.  ds doc-journal-name-saved "\*[doc-journal-name]
-.  nr doc-issue-count-saved \n[doc-issue-count]
-.  ds doc-issue-name-saved "\*[doc-issue-name]
-.  nr doc-optional-count-saved \n[doc-optional-count]
-.  ds doc-optional-string-saved "\*[doc-optional-string]
-.  nr doc-page-number-count-saved \n[doc-page-number-count]
-.  ds doc-page-number-string-saved "\*[doc-page-number-string]
-.  nr doc-corporate-count-saved \n[doc-corporate-count]
-.  ds doc-corporate-name-saved "\*[doc-corporate-name]
-.  nr doc-report-count-saved \n[doc-report-count]
-.  ds doc-report-name-saved "\*[doc-report-name]
-.  nr doc-reference-title-count-saved \n[doc-reference-title-count]
-.  ds doc-reference-title-name-saved "\*[doc-reference-title-name]
-.  ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book]
-.  nr doc-url-count-saved \n[doc-url-count]
-.  ds doc-url-name-saved "\*[doc-url-name]
-.  nr doc-volume-count-saved \n[doc-volume-count]
-.  ds doc-volume-name-saved "\*[doc-volume-name]
-.  nr doc-have-author-saved \n[doc-have-author]
-.
-.  ds doc-document-title-saved "\*[doc-document-title]
-.  ds doc-volume-saved "\*[doc-volume]
-.  ds doc-section-saved "\*[doc-section]
-.  ds doc-operating-system-saved "\*[doc-operating-system]
-.  ds doc-date-string-saved "\*[doc-date-string]
-.  nr doc-header-space-saved \n[doc-header-space]
-.  nr doc-footer-space-saved \n[doc-footer-space]
-.  nr doc-display-vertical-saved \n[doc-display-vertical]
-.  ds doc-header-string-saved "\*[doc-header-string]
-.  nr doc-in-see-also-section-saved \n[doc-in-see-also-section]
-.  nr doc-in-files-section-saved \n[doc-in-files-section]
-.  nr doc-in-authors-section-saved \n[doc-in-authors-section]
-..
-.
-.
-.\" NS doc-restore-global-vars macro
-.\" NS   restore all global variables
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-drgv
-.
-.de doc-restore-global-vars
-.  ds doc-macro-name "\*[doc-macro-name-saved]
-.  nr doc-arg-limit \n[doc-arg-limit-saved]
-.  nr doc-num-args \n[doc-num-args-saved]
-.  nr doc-arg-ptr \n[doc-arg-ptr-saved]
-.
-.  nr doc-reg-drgv 1
-.  while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\
-.    ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved]
-.    nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved]
-.    ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved]
-.    nr doc-reg-drgv +1
-.  \}
-.
-.  nr doc-curr-font \n[doc-curr-font-saved]
-.  nr doc-curr-size \n[doc-curr-size-saved]
-.  nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved]
-.  nr doc-in-library-section \n[doc-in-library-section-saved]
-.  nr doc-indent-synopsis \n[doc-indent-synopsis-saved]
-.  nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved]
-.  nr doc-have-decl \n[doc-have-decl-saved]
-.  nr doc-have-var \n[doc-have-var-saved]
-.  ds doc-command-name "\*[doc-command-name-saved]
-.  ds doc-quote-left "\*[doc-quote-left-saved]
-.  ds doc-quote-right "\*[doc-quote-right-saved]
-.  nr doc-nesting-level \n[doc-nesting-level-saved]
-.  nr doc-in-list \n[doc-in-list-saved]
-.  ds doc-space "\*[doc-space-saved]
-.  ds doc-saved-space "\*[doc-saved-space-saved]
-.  nr doc-space-mode \n[doc-space-mode-saved]
-.  nr doc-have-space \n[doc-have-space-saved]
-.  nr doc-have-slot \n[doc-have-slot-saved]
-.  nr doc-keep-type \n[doc-keep-type-saved]
-.  nr doc-display-depth \n[doc-display-depth-saved]
-.  nr doc-is-compact \n[doc-is-compact-saved]
-.
-.  nr doc-reg-drgv 0
-.  while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\
-.    ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved]
-.    nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved]
-.    nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved]
-.    nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved]
-.    nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved]
-.    nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved]
-.    nr doc-reg-drgv +1
-.  \}
-.
-.  nr doc-fontmode-depth \n[doc-fontmode-depth-saved]
-.
-.  nr doc-reg-drgv 1
-.  while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\
-.    nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved
-.    nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved
-.    nr doc-reg-drgv +1
-.  \}
-.
-.  nr doc-list-depth \n[doc-list-depth-saved]
-.
-.  nr doc-reg-drgv 1
-.  while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\
-.    ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved]
-.    nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved]
-.    nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved]
-.    nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved]
-.    ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved]
-.    ds doc-tag-width-stack\n[doc-reg-drgv] "\*[doc-tag-width-stack\n[doc-reg-drgv]-saved]
-.    nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved]
-.    nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved]
-.    nr doc-reg-drgv +1
-.  \}
-.
-.  ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved]
-.  nr doc-curr-type \n[doc-curr-type-saved]
-.  ds doc-curr-arg "\*[doc-curr-arg-saved]
-.  nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved]
-.  nr doc-num-columns \n[doc-num-columns-saved]
-.  nr doc-column-indent-width \n[doc-column-indent-width-saved]
-.  nr doc-is-func \n[doc-is-func-saved]
-.  nr doc-have-old-func \n[doc-have-old-func-saved]
-.  nr doc-func-arg-count \n[doc-func-arg-count-saved]
-.  ds doc-func-arg "\*[doc-func-arg-saved]
-.  nr doc-num-func-args \n[doc-num-func-args-saved]
-.  nr doc-func-args-processed \n[doc-func-args-processed-saved]
-.  nr doc-have-func \n[doc-have-func-saved]
-.  nr doc-is-reference \n[doc-is-reference-saved]
-.  nr doc-reference-count \n[doc-reference-count-saved]
-.  nr doc-author-count \n[doc-author-count-saved]
-.
-.  nr doc-reg-drgv 0
-.  while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\
-.    ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved]
-.    nr doc-reg-drgv +1
-.  \}
-.
-.  nr doc-book-count \n[doc-book-count-saved]
-.  ds doc-book-name "\*[doc-book-name-saved]
-.  nr doc-city-count \n[doc-city-count-saved]
-.  ds doc-city-name "\*[doc-city-name-saved]
-.  nr doc-date-count \n[doc-date-count-saved]
-.  ds doc-date "\*[doc-date-saved]
-.  nr doc-publisher-count \n[doc-publisher-count-saved]
-.  ds doc-publisher-name "\*[doc-publisher-name-saved]
-.  nr doc-journal-count \n[doc-journal-count-saved]
-.  ds doc-journal-name "\*[doc-journal-name-saved]
-.  nr doc-issue-count \n[doc-issue-count-saved]
-.  ds doc-issue-name "\*[doc-issue-name-saved]
-.  nr doc-optional-count \n[doc-optional-count-saved]
-.  ds doc-optional-string "\*[doc-optional-string-saved]
-.  nr doc-page-number-count \n[doc-page-number-count-saved]
-.  ds doc-page-number-string "\*[doc-page-number-string-saved]
-.  nr doc-corporate-count \n[doc-corporate-count-saved]
-.  ds doc-corporate-name "\*[doc-corporate-name-saved]
-.  nr doc-report-count \n[doc-report-count-saved]
-.  ds doc-report-name "\*[doc-report-name-saved]
-.  nr doc-reference-title-count \n[doc-reference-title-count-saved]
-.  ds doc-reference-title-name "\*[doc-reference-title-name-saved]
-.  ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved]
-.  nr doc-url-count \n[doc-url-count-saved]
-.  ds doc-url-name "\*[doc-url-name-saved]
-.  nr doc-volume-count \n[doc-volume-count-saved]
-.  ds doc-volume-name "\*[doc-volume-name-saved]
-.  nr doc-have-author \n[doc-have-author-saved]
-.
-.  ds doc-document-title "\*[doc-document-title-saved]
-.  ds doc-volume "\*[doc-volume-saved]
-.  ds doc-section "\*[doc-section-saved]
-.  ds doc-operating-system "\*[doc-operating-system-saved]
-.  ds doc-date-string "\*[doc-date-string-saved]
-.  nr doc-header-space \n[doc-header-space-saved]
-.  nr doc-footer-space \n[doc-footer-space-saved]
-.  nr doc-display-vertical \n[doc-display-vertical-saved]
-.  ds doc-header-string "\*[doc-header-string-saved]
-.  nr doc-in-see-also-section \n[doc-in-see-also-section-saved]
-.  nr doc-in-files-section \n[doc-in-files-section-saved]
-.  nr doc-in-authors-section \n[doc-in-authors-section-saved]
-..
-.
-.
-.\" NS El user macro
-.\" NS   end list
-.\" NS
-.\" NS modifies:
-.\" NS   doc-list-depth
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-str-El
-.\" NS
-.\" NS width register `El' set in doc-common
-.
-.de El
-.  if \n[.$] \{\
-.    tm Usage: .El (does not take arguments) (#\n[.c])
-.    return
-.  \}
-.
-.  ds doc-macro-name El
-.  ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]]
-.
-.  ie        "\*[doc-str-El]"diag-list" \
-.    doc-end-list 0
-.  el \{ .ie "\*[doc-str-El]"column-list" \
-.    doc-end-column-list
-.  el \{ .ie "\*[doc-str-El]"item-list" \
-.    doc-end-list 0
-.  el \{ .ie "\*[doc-str-El]"ohang-list" \
-.    doc-end-list 0
-.  el \{ .ie "\*[doc-str-El]"inset-list" \
-.    doc-end-list 0
-.  el \
-.    doc-end-list 1
-.  \}\}\}\}
-.
-.  br
-..
-.
-.
-.\" NS doc-saved-Pa-font global string
-.\" NS   saved doc-Pa-font string for section FILES (no underline if
-.\" NS   nroff)
-.
-.ds doc-saved-Pa-font
-.
-.
-.\" NS doc-curr-type global register
-.\" NS   current argument type
-.
-.nr doc-curr-type 0
-.
-.
-.\" NS doc-curr-arg global string
-.\" NS   current argument
-.
-.ds doc-curr-arg
-.
-.
-.\" NS doc-item-boxXXX global box
-.\" NS   item boxes associated list depth
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.
-.\" NS It user macro
-.\" NS   list item
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-curr-arg
-.\" NS   doc-curr-type
-.\" NS   doc-in-list
-.\" NS   doc-macro-name
-.\" NS   doc-num-args
-.\" NS   doc-saved-Pa-font
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-It
-.\" NS   doc-str-It
-.\" NS   doc-XXX-list-type
-.\" NS
-.\" NS width register `It' set in doc-common
-.
-.nr doc-bullet-list-type 1
-.nr doc-column-list-type 0
-.nr doc-dash-list-type 1
-.nr doc-diag-list-type 0
-.nr doc-enum-list-type 1
-.nr doc-hang-list-type 2
-.nr doc-inset-list-type 2
-.nr doc-item-list-type 1
-.nr doc-ohang-list-type 2
-.nr doc-tag-list-type 2
-.
-.de It
-.  ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]]
-.
-.  if "\*[doc-str-It]"" \
-.    tm mdoc error: .It without preceding .Bl (#\n[.c])
-.
-.  if \n[doc-nesting-level] \{\
-.    tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao)
-.    tm1 " (#\n[.c])
-.  \}
-.
-.  br
-.  if !\n[cR] \
-.    ne 3v
-.
-.  if \n[.$] \{\
-.    ds doc-macro-name It
-.
-.    \" fill argument vector
-.    nr doc-reg-It 1
-.    while (\n[doc-reg-It] <= \n[.$]) \{\
-.      ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]]
-.      nr doc-reg-It +1
-.    \}
-.
-.    nr doc-num-args \n[.$]
-.    nr doc-arg-ptr 0
-.  \}
-.
-.  nr doc-reg-It \n[doc-\*[doc-str-It]-type]
-.
-.  if \n[doc-reg-It] \{\
-.    \" start item box
-.    box doc-item-box\n[doc-list-depth]
-.    ev doc-item-env\n[doc-list-depth]
-.    evc 0
-.    in 0
-.    nf
-.  \}
-.
-.  ie (\n[doc-reg-It] == 1) \{\
-.    if \n[.$] \{\
-.      tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
-.      tm1 "              don't take arguments (#\n[.c])
-.  \}\}
-.  el \{\
-.    ie \n[.$] \{\
-.      if (\n[doc-reg-It] == 2) \{\
-.        \" handle list types with arguments
-.        doc-parse-arg-vector
-.
-.        nr doc-in-list 1
-.        nr doc-arg-ptr 1
-.        nr doc-curr-type \n[doc-type1]
-.        ds doc-curr-arg "\*[doc-arg1]
-.
-.        if \n[doc-in-files-section] \{\
-.          ds doc-saved-Pa-font "\*[doc-Pa-font]
-.          if n \
-.            ds doc-Pa-font "\*[doc-No-font]
-.        \}
-.
-.        ie (\n[doc-type1] == 1) \
-.          \*[doc-arg1]
-.        el \{\
-.          nr doc-arg-ptr 1
-.          doc-print-recursive
-.    \}\}\}
-.    el \{\
-.      tm1 "mdoc warning: .It macros in lists of type `\*[doc-str-It]'
-.      tm1 "              require arguments (#\n[.c])
-.    \}
-.  \}
-.
-.  \" the previous call of `.doc-print-recursive' can contain calls to
-.  \" opening macros like `.Ao'; we then defer the call of `doc-xxx-list'
-.  if !\n[doc-nesting-level] \
-.    doc-\*[doc-str-It]
-..
-.
-.
-.\" NS doc-inset-list macro
-.\" NS   .It item of list-type inset
-.\" NS
-.\" NS modifies:
-.\" NS   doc-in-list
-.
-.de doc-inset-list
-.  \" finish item box
-.  br
-.  ev
-.  box
-.  unformat doc-item-box\n[doc-list-depth]
-.
-.  doc-set-vertical-and-indent 0
-.  br
-.
-.  nh
-.  doc-item-box\n[doc-list-depth]
-.
-.  if \n[doc-in-files-section] \
-.    if n \
-.      ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-.  nr doc-in-list 0
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-hang-list macro
-.\" NS   .It item of list-type hanging tag (as opposed to tagged)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-have-space
-.\" NS   doc-in-list
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dhl
-.\" NS   doc-reg-dhl1
-.
-.de doc-hang-list
-.  \" finish item box
-.  br
-.  ev
-.  box
-.  unformat doc-item-box\n[doc-list-depth]
-.
-.  doc-set-vertical-and-indent 1
-.  nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-.  ti -\n[doc-reg-dhl]u
-.
-.  nh
-.  ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
-.    doc-item-box\n[doc-list-depth]
-.  el \{\
-.    chop doc-item-box\n[doc-list-depth]
-.    nr doc-reg-dhl1 \n[.k]u
-.    nop \*[doc-item-box\n[doc-list-depth]]\c
-.    nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c
-.    nr doc-have-space 1
-.  \}
-.
-.  if \n[doc-in-files-section] \
-.    if n \
-.      ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-.  nr doc-in-list 0
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-ohang-list macro
-.\" NS   .It item of list-type overhanging tag
-.\" NS
-.\" NS modifies:
-.\" NS   doc-in-list
-.
-.de doc-ohang-list
-.  \" finish item box
-.  br
-.  ev
-.  box
-.  unformat doc-item-box\n[doc-list-depth]
-.
-.  doc-set-vertical-and-indent 0
-.  nh
-.  doc-item-box\n[doc-list-depth]
-.  br
-.
-.  if \n[doc-in-files-section] \
-.    if n \
-.      ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-.  nr doc-in-list 0
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-item-list macro
-.\" NS   .It item of list-type [empty tag]
-.
-.de doc-item-list
-.  \" finish (dummy) item box
-.  br
-.  ev
-.  box
-.
-.  doc-set-vertical-and-indent 0
-.  br
-.
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-enum-list-count-stackXXX global register
-.\" NS   stack of current enum count values
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.nr doc-enum-list-count-stack1 0
-.
-.
-.\" NS doc-enum-list macro
-.\" NS   enumerated list
-.\" NS
-.\" NS modifies:
-.\" NS   doc-enum-list-count-stackXXX
-.\" NS   doc-in-list
-.
-.de doc-enum-list
-.  nr doc-in-list 1
-.  nr doc-enum-list-count-stack\n[doc-list-depth] +1
-\# XXX
-\#.ll \n[doc-list-indent-stack\n[doc-list-depth]]u
-\#.rj
-.  nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c
-.  nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\&
-.  doc-do-list
-..
-.
-.
-.\" NS doc-bullet-list macro
-.\" NS   bullet paragraph list
-.\" NS
-.\" NS modifies:
-.\" NS   doc-in-list
-.
-.de doc-bullet-list
-.  nr doc-in-list 1
-.  nop \)\*[doc-Sy-font]\[bu]\f[]
-.  doc-do-list
-..
-.
-.
-.\" NS doc-dash-list macro
-.\" NS   hyphen paragraph list (sub bullet list)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-in-list
-.
-.de doc-dash-list
-.  nr doc-in-list 1
-.  nop \)\*[doc-Sy-font]\-\f[]
-.  doc-do-list
-..
-.
-.
-.\" NS doc-do-list macro
-.\" NS   .It item of list-type enum/bullet/hyphen
-.
-.als doc-do-list doc-hang-list
-.
-.
-.\" NS doc-diag-list-input-line-count global register
-.\" NS   saved line number to be checked in next diag-list item
-.
-.nr doc-diag-list-input-line-count 0
-.
-.
-.\" NS doc-diag-list macro
-.\" NS   .It item of list-type diagnostic-message
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-diag-list-input-line-count
-.
-.de doc-diag-list
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\
-.    ie !\n[doc-compact-list-stack\n[doc-list-depth]] \
-.      doc-paragraph
-.    el \
-.      br
-.  \}
-.  el \
-.    br
-.  nr doc-diag-list-input-line-count \n[.c]
-.
-.  nh
-.  nop \*[doc-Sy-font]\c
-.  if \n[doc-num-args] \
-.    doc-remaining-args
-.  nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c
-.
-.  doc-print-and-reset
-..
-.
-.
-.\" NS doc-tag-list macro
-.\" NS   .It item of list-type `tag'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-have-space
-.\" NS   doc-in-list
-.\" NS
-.\" NS local variables:
-.\" NS   doc-box-dtl
-.\" NS   doc-reg-dtl
-.\" NS   doc-reg-dtl1
-.
-.de doc-tag-list
-.  \" finish item box
-.  br
-.  ev
-.  box
-.  unformat doc-item-box\n[doc-list-depth]
-.
-.  \" we use a box without `.nf' to compute the tag width (via `dl' register)
-.  box doc-box-dtl
-.  ev doc-env-dtl
-.  evc 0
-.  fi
-.  ad 0
-.  in 0
-.  doc-item-box\n[doc-list-depth]
-.  br
-.  ev
-.  box
-.
-.  if !"TagwidtH"\*[doc-tag-width-stack\n[doc-list-depth]]" \{\
-.    if !\n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
-.      in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-.      nr doc-list-have-indent-stack\n[doc-list-depth] 1
-.    \}
-.    doc-get-tag-width
-.  \}
-.  doc-set-vertical-and-indent 1
-.  nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-.  ti -\n[doc-reg-dtl]u
-.
-.  nh
-.  doc-item-box\n[doc-list-depth]
-.  ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
-.    br
-.  el \{\
-.    \" format the tag separately to prevent stretching of spaces
-.    vpt 0
-.    br
-.    sp -1
-.    vpt 1
-.    nop \&\c
-.    nr doc-have-space 1
-.  \}
-.
-.  if \n[doc-in-files-section] \
-.    if n \
-.      ds doc-Pa-font "\*[doc-saved-Pa-font]
-.
-.  nr doc-in-list 0
-.  doc-reset-args
-..
-.
-.
-.\" NS doc-get-tag-width macro
-.\" NS   resolve unknown tag width (`tag' list-type only)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-tag-width-stackXXX
-.\" NS
-.\" NS requires:
-.\" NS   doc-curr-arg
-.\" NS   doc-curr-type
-.
-.de doc-get-tag-width
-.  ie (\n[doc-curr-type] == 1) \{\
-.    ds doc-tag-width-stack\n[doc-list-depth] \*[doc-curr-arg]
-.    nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-curr-arg]]
-.  \}
-.  el \{\
-.    ds doc-tag-width-stack\n[doc-list-depth] No
-.    nr doc-list-indent-stack\n[doc-list-depth] \n[No]
-.  \}
-..
-.
-.
-.\" NS doc-set-vertical-and-indent macro
-.\" NS   set up vertical spacing (if not compact) and indentation (with
-.\" NS   offset if argument is non-zero)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-list-have-indent-stackXXX
-.
-.de doc-set-vertical-and-indent
-.  if !\n[doc-compact-list-stack\n[doc-list-depth]] \
-.    sp \n[doc-display-vertical]u
-.
-.  if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
-.    nr doc-list-have-indent-stack\n[doc-list-depth] 0
-.    if \$1 \
-.      in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-.  \}
-.
-.  if !\n[cR] \
-.    ne 2v
-..
-.
-.
-.\" NS doc-list-depth global register
-.\" NS   list type stack counter
-.
-.nr doc-list-depth 0
-.
-.
-.\" NS doc-num-columns global register
-.\" NS   number of columns
-.
-.nr doc-num-columns 0
-.
-.
-.\" NS doc-compact-list-stackXXX global register (bool)
-.\" NS   stack of flags to indicate whether a particular list is compact
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.nr doc-compact-list-stack1 0
-.
-.
-.\" NS doc-tag-prefix-stackXXX global string
-.\" NS   stack of tag prefixes (currently used for -nested -enum lists)
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.ds doc-tag-prefix-stack1
-.
-.
-.\" NS doc-tag-width-stackXXX global string
-.\" NS   stack of strings indicating how to set up current element of
-.\" NS   doc-list-indent-stackXXX -- if set to TagwidtH, user has set it
-.\" NS   directly; if it is a macro name, use the macro's width value;
-.\" NS   otherwise, `doc-get-tag-width' uses width value of `No'.
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.ds doc-tag-width-stack0
-.ds doc-tag-width-stack1
-.
-.
-.\" NS doc-list-offset-stackXXX global register
-.\" NS   stack of list offsets
-.\" NS
-.\" NS limit:
-.\" NS   doc-list-depth
-.
-.nr doc-list-offset-stack1 0
-.
-.
-.\" NS doc-end-list macro
-.\" NS   list end function; resets indentation (and offset if argument is
-.\" NS   non-zero)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-list-depth
-.\" NS   doc-list-offset-stackXXX
-.
-.de doc-end-list
-.  if \$1 \
-'    in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
-.
-'  in -\n[doc-list-offset-stack\n[doc-list-depth]]u
-.
-.  if (\n[doc-list-depth] <= 0) \
-.    tm mdoc warning: extraneous .El call (#\n[.c])
-.
-.  doc-decrement-list-stack
-.  nr doc-list-depth -1
-..
-.
-.
-.\" NS doc-increment-list-stack macro
-.\" NS   set up next block for list
-.\" NS
-.\" NS modifies:
-.\" NS   doc-compact-list-stackXXX
-.\" NS   doc-list-have-indent-stackXXX
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-list-offset-stackXXX
-.\" NS   doc-list-type-stackXXX
-.\" NS   doc-tag-prefix-stackXXX
-.\" NS   doc-tag-width-stackXXX
-.\" NS   doc-enum-list-count-stackXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dils
-.
-.de doc-increment-list-stack
-.  nr doc-reg-dils (\n[doc-list-depth] + 1)
-.  nr doc-list-have-indent-stack\n[doc-reg-dils] 0
-.  nr doc-list-indent-stack\n[doc-reg-dils] 0
-.  nr doc-list-offset-stack\n[doc-reg-dils] 0
-.  ds doc-tag-prefix-stack\n[doc-reg-dils]
-.  ds doc-tag-width-stack\n[doc-reg-dils] \*[doc-tag-width-stack\n[doc-list-depth]]
-.  ds doc-list-type-stack\n[doc-reg-dils]
-.  nr doc-compact-list-stack\n[doc-reg-dils] 0
-.  nr doc-enum-list-count-stack\n[doc-reg-dils] 0
-..
-.
-.
-.\" NS doc-decrement-list-stack macro
-.\" NS   decrement stack
-.\" NS
-.\" NS modifies:
-.\" NS   doc-compact-list-stackXXX
-.\" NS   doc-list-have-indent-stackXXX
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-list-offset-stackXXX
-.\" NS   doc-list-type-stackXXX
-.\" NS   doc-tag-prefix-stackXXX
-.\" NS   doc-tag-width-stackXXX
-.\" NS   doc-enum-list-count-stackXXX
-.
-.de doc-decrement-list-stack
-.  ds doc-list-type-stack\n[doc-list-depth]
-.  nr doc-list-have-indent-stack\n[doc-list-depth] 0
-.  nr doc-list-indent-stack\n[doc-list-depth] 0
-.  nr doc-list-offset-stack\n[doc-list-depth] 0
-.  ds doc-tag-prefix-stack\n[doc-list-depth]
-.  ds doc-tag-width-stack\n[doc-list-depth]
-.  nr doc-compact-list-stack\n[doc-list-depth] 0
-.  nr doc-enum-list-count-stack\n[doc-list-depth] 0
-..
-.
-.
-.\" NS Xr user macro
-.\" NS   cross reference (for man pages only)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-macro-name
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Xr
-.\" NS
-.\" NS width register `Xr' set in doc-common
-.
-.de Xr
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Xr
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      doc-Xr-usage
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    \" first argument must be a string
-.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      nr doc-curr-font \n[.f]
-.      nr doc-curr-size \n[.ps]
-.      ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
-.
-.      if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
-.        nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
-.        \" modify second argument if it is a string and
-.        \" remove space in between
-.        if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\
-.          ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp]
-.          ds doc-space\n[doc-arg-ptr]
-.        \}
-.      \}
-.      doc-print-recursive
-.    \}
-.    el \
-.      doc-Xr-usage
-.  \}
-.  el \
-.    doc-Xr-usage
-..
-.
-.
-.\" NS doc-Xr-usage macro
-.
-.de doc-Xr-usage
-.  tm Usage: .Xr manpage_name [section#] ... (#\n[.c])
-.  doc-reset-args
-..
-.
-.
-.\" NS Sx user macro
-.\" NS   cross section reference
-.\" NS
-.\" NS width register `Sx' set in doc-common
-.
-.als Sx doc-generic-macro
-.ds doc-Sx-usage section_header
-.
-.
-.\" NS doc-end-column-list macro
-.\" NS   column-list end-list
-.\" NS
-.\" NS modifies:
-.\" NS   doc-list-depth
-.
-.de doc-end-column-list
-.  linetabs 0
-'  in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u)
-.  ta T .5i
-.  fi
-.  doc-decrement-list-stack
-.  nr doc-list-depth -1
-..
-.
-.
-.\" NS doc-column-indent-width global register
-.\" NS   holds the indent width for a column list
-.
-.nr doc-column-indent-width 0
-.
-.
-.\" NS doc-set-column-tab macro
-.\" NS   establish tabs for list-type column: `.doc-set-column-tab num_cols'
-.\" NS
-.\" NS modifies:
-.\" NS   doc-column-indent-width
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dsct
-.\" NS   doc-str-dsct
-.\" NS   doc-str-dsct1
-.
-.de doc-set-column-tab
-.  ds doc-str-dsct
-.  nr doc-reg-dsct 1
-.  nr doc-column-indent-width 0
-.
-.  ie (\$1 < 5) \
-.    ds doc-str-dsct1 "    \"
-.  el \{\
-.    ie (\$1 == 5) \
-.      ds doc-str-dsct1 "   \"
-.    el \{\
-.      \" XXX: this is packed abnormally close -- intercolumn width
-.      \"      should be configurable
-.      ds doc-str-dsct1 " \"
-.  \}\}
-.
-.  while (\n[doc-reg-dsct] <= \$1) \{\
-.    as doc-str-dsct " +\w\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]\au
-.    nr doc-column-indent-width +\w\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]\au
-.    nr doc-reg-dsct +1
-.  \}
-.
-.  ta \*[doc-str-dsct]
-'  in +\n[doc-column-indent-width]u
-..
-.
-.
-.\" NS doc-column-list macro
-.\" NS   column items
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-list-indent-stackXXX
-.\" NS   doc-spaceXXX
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dcl
-.
-.de doc-column-list
-.  if \n[doc-num-args] \
-.    doc-parse-arg-vector
-.  nr doc-arg-ptr +1
-.
-.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c])
-.    return
-.  \}
-.
-.  if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\
-.    nr doc-reg-dcl (\n[doc-arg-ptr] - 1)
-.    ds doc-space\n[doc-reg-dcl]
-.  \}
-.
-.  if !\n[doc-list-indent-stack\n[doc-list-depth]] \
-.    nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u
-.  if !\n[.u] \{\
-.    fi
-.    in +\n[doc-column-indent-width]u
-.  \}
-.  ti -\n[doc-column-indent-width]u
-.
-.  doc-do-\n[doc-type\n[doc-arg-ptr]]
-..
-.
-.
-.\" NS Ta user macro
-.\" NS   append tab (\t)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS
-.\" NS width register `Ta' set in doc-common
-.
-.de Ta
-.  ie \n[doc-arg-limit] \{\
-.    nr doc-arg-ptr +1
-.    nop \*[doc-tab]\c
-.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
-.      doc-do-\n[doc-type\n[doc-arg-ptr]]
-.    el \
-.      doc-reset-args
-.  \}
-.  el \{\
-.    tm1 "Usage: Ta must follow column entry: e.g.
-.    tm1 "         .It column_string [Ta [column_string ...]] (#\n[.c])
-.  \}
-..
-.
-.
-.\" NS Dl user macro
-.\" NS   display (one line) literal
-.\" NS
-.\" NS   this function uses the `Li' font
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Dl' set in doc-common
-.
-.de Dl
-.  ta T .5i
-.  in +\n[doc-display-indent]u
-.
-.  ie \n[doc-arg-limit] \{\
-.    tm Usage: .Dl not callable by other macros (#\n[.c])
-.    doc-reset-args
-.  \}
-.  el \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Dl
-.      doc-parse-args \$@
-.      nr doc-arg-ptr 1
-.      nr doc-curr-font \n[.f]
-.      nr doc-curr-size \n[.ps]
-.      nop \*[doc-Li-font]\c
-.      doc-print-recursive
-.    \}
-.    el \
-.      tm Usage: .Dl argument ... (#\n[.c])
-.  \}
-.
-.  in -\n[doc-display-indent]u
-..
-.
-.
-.\" NS D1 user macro
-.\" NS   display (one line)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `D1' set in doc-common
-.
-.de D1
-.  ta T .5i
-.  in +\n[doc-display-indent]u
-.
-.  ie \n[doc-arg-limit] \{\
-.    tm Usage: .D1 not callable by other macros (#\n[.c])
-.    doc-reset-args
-.  \}
-.  el \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name D1
-.      doc-parse-args \$@
-.      nr doc-arg-ptr 1
-.      doc-print-recursive
-.    \}
-.    el \
-.      tm Usage: .D1 argument ... (#\n[.c])
-.  \}
-.
-.  in -\n[doc-display-indent]u
-..
-.
-.
-.\" NS Vt user macro
-.\" NS   variable type (for forcing old style variable declarations);
-.\" NS   this is not done in the same manner as .Ot for fortrash --
-.\" NS   clean up later
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-have-decl
-.\" NS   doc-have-var
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Vt' set in doc-common
-.
-.de Vt
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Vt
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Vt variable_type ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    tm Usage: .Vt variable_type ... (#\n[.c])
-.    doc-reset-args
-.    return
-.  \}
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    \" if a function declaration was the last thing given,
-.    \" want vertical space
-.    if \n[doc-have-decl] \{\
-.      doc-paragraph
-.      nr doc-have-decl 0
-.    \}
-.
-.    \" if a subroutine was the last thing given, want vertical space
-.    if \n[doc-have-func] \{\
-.      ie \n[doc-have-var] \
-.        br
-.      el \
-.        doc-paragraph
-.    \}
-.
-.    nr doc-have-var 1
-.  \}
-.
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  nop \*[doc-Ft-font]\c
-.  doc-print-recursive
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    ie \n[doc-have-old-func] \
-.      nop \*[doc-soft-space]\c
-.    el \
-.      br
-.  \}
-..
-.
-.
-.\" NS doc-is-func global register (bool)
-.\" NS   set if subroutine (in synopsis only) (fortran only)
-.
-.nr doc-is-func 0
-.
-.
-.\" NS Ft user macro
-.\" NS   function type
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-have-decl
-.\" NS   doc-have-var
-.\" NS   doc-is-func
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Ft' set in doc-common
-.
-.de Ft
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Ft
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Ft function_type ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  nr doc-arg-ptr +1
-.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    tm Usage: .Ft function_type ... (#\n[.c])
-.    doc-reset-args
-.    return
-.  \}
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    if (\n[doc-have-func] : \n[doc-have-decl]) \{\
-.      doc-paragraph
-.      nr doc-have-decl 0
-.      nr doc-have-var 0
-.    \}
-.
-.    if \n[doc-have-var] \{\
-.      doc-paragraph
-.      nr doc-have-var 0
-.    \}
-.
-.    nr doc-is-func 1
-.  \}
-.
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  nop \*[doc-Ft-font]\c
-.  doc-print-recursive
-..
-.
-.
-.\" NS doc-have-old-func global register (bool)
-.\" NS   set if `Ot' has been called
-.
-.nr doc-have-old-func 0
-.
-.
-.\" NS Ot user macro
-.\" NS   old function type (fortran -- no newline)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-have-decl
-.\" NS   doc-have-old-func
-.\" NS   doc-have-var
-.\" NS   doc-is-func
-.\" NS
-.\" NS width register `Ot' set in doc-common
-.
-.de Ot
-.  nr doc-have-old-func 1
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    if (\n[doc-have-func] : \n[doc-have-decl]) \{\
-.      doc-paragraph
-.      nr doc-have-decl 0
-.      nr doc-have-var 0
-.    \}
-.
-.    if \n[doc-have-var] \{\
-.      doc-paragraph
-.      nr doc-have-var 0
-.    \}
-.
-.    nr doc-is-func 1
-.  \}
-.
-.  if \n[.$] \
-.    nop \*[doc-Ft-font]\$*\c
-.  nop \ \f[]\c
-..
-.
-.
-.\" NS Fa user macro
-.\" NS   function arguments
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Fa' set in doc-common
-.
-.de Fa
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Fa
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Fa function_arguments ... (#\n[.c])
-.  \}
-.
-.  ie \n[doc-func-arg-count] \
-.    doc-do-func
-.  el \{\
-.    nr doc-arg-ptr +1
-.    if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.      nr doc-curr-font \n[.f]
-.      nr doc-curr-size \n[.ps]
-.      nop \*[doc-Fa-font]\c
-.      doc-print-recursive
-.
-.      if \n[doc-in-synopsis-section] \
-.        if \n[doc-have-func] \
-.          br
-.  \}\}
-..
-.
-.
-.\" NS doc-func-arg-count global register
-.\" NS   how many function arguments have been processed so far
-.
-.nr doc-func-arg-count 0
-.
-.
-.\" NS doc-func-arg global string
-.\" NS   work buffer for function name strings
-.
-.ds doc-func-arg
-.
-.
-.\" NS doc-num-func-args global register
-.\" NS   number of function arguments
-.
-.nr doc-num-func-args 0
-.
-.
-.\" NS doc-func-args-processed global register
-.\" NS   function arguments processed so far
-.
-.nr doc-func-args-processed 0
-.
-.
-.\" NS doc-do-func macro
-.\" NS   internal .Fa for .Fc
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-func-arg
-.\" NS   doc-func-arg-count
-.\" NS   doc-func-args-processed
-.\" NS   doc-num-func-args
-.
-.de doc-do-func
-.  if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
-.    doc-reset-args
-.    return
-.  \}
-.
-.  nr doc-arg-ptr +1
-.
-.  ds doc-func-arg
-.  nr doc-num-func-args 0
-.  nr doc-func-args-processed 0
-.
-.  doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
-.  if (\n[doc-num-func-args] > 1) \
-.    ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
-.
-.  if (\n[doc-func-arg-count] > 1) \{\
-.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
-.    if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
-.      if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
-.        nop ,\)\c
-.    nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
-.    nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
-.  \}
-.
-.  if (\n[doc-func-arg-count] == 1) \{\
-.    nop \)\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
-.    nop \f[]\s[0]\c
-.  \}
-.  nr doc-func-arg-count +1
-.  doc-do-func
-..
-.
-.
-.\" NS doc-have-func global register (bool)
-.\" NS   whether we have more than one function in synopsis
-.
-.nr doc-have-func 0
-.
-.
-.\" NS Fn user macro
-.\" NS   functions
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-have-decl
-.\" NS   doc-have-func
-.\" NS   doc-have-var
-.\" NS   doc-indent-synopsis
-.\" NS   doc-is-func
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Fn' set in doc-common
-.
-.de Fn
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Fn
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
-.  \}
-.
-.  if !\n[doc-arg-limit] \
-.    return
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    \" if there is/has been more than one subroutine declaration
-.    ie \n[doc-is-func] \{\
-.      br
-.      nr doc-have-var 0
-.      nr doc-have-decl 0
-.      nr doc-is-func 0
-.    \}
-.    el \{\
-.      if \n[doc-have-func] \{\
-.        doc-paragraph
-.        nr doc-have-var 0
-.        nr doc-have-decl 0
-.    \}\}
-.
-.    if \n[doc-have-decl] \{\
-.      doc-paragraph
-.      nr doc-have-var 0
-.    \}
-.
-.    if \n[doc-have-var] \{\
-.      doc-paragraph
-.      nr doc-have-decl 0
-.    \}
-.
-.    nr doc-have-func 1
-.    nr doc-is-func 0
-.
-.    br
-.    if !\n[doc-indent-synopsis] \
-.      nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
-.    if !\n[doc-indent-synopsis-active] \
-.      in +\n[doc-indent-synopsis]u
-.    ti -\n[doc-indent-synopsis]u
-.  \}
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
-.    tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
-.    doc-reset-args
-.    return
-.  \}
-.
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
-.  nop \f[]\s[0]\*[lp]\)\c
-.
-.  nr doc-arg-ptr +1
-.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      nop \*[doc-Fa-font]\c
-.      doc-do-func-args
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.  \}\}
-.
-.  nop \)\*[rp]\)\c
-.  if \n[doc-in-synopsis-section] \
-.    nop \);\)\c
-.
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    \" output the space (if needed)
-.    nr doc-arg-ptr -1
-.    nop \)\*[doc-space\n[doc-arg-ptr]]\c
-.    nr doc-arg-ptr +1
-.
-.    doc-print-recursive
-.  \}
-.  el \
-.    doc-print-and-reset
-.
-.  if \n[doc-in-synopsis-section] \
-.    if !\n[doc-indent-synopsis-active] \
-.      in -\n[doc-indent-synopsis]u
-..
-.
-.
-.\" NS doc-do-func-args macro
-.\" NS   handle function arguments
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-argXXX
-.\" NS   doc-func-arg
-.\" NS   doc-func-args-processed
-.\" NS   doc-num-func-args
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-ddfa
-.
-.de doc-do-func-args
-.  if \n[doc-in-synopsis-section] \{\
-.    ds doc-func-arg
-.    nr doc-num-func-args 0
-.    nr doc-func-args-processed 0
-.
-.    doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
-.    if (\n[doc-num-func-args] > 1) \
-.      ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
-.  \}
-.
-.  nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-.  nr doc-arg-ptr +1
-.
-.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
-.      nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
-.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
-.      if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
-.        if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
-.          nop ,\)\c
-.      nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
-.      doc-do-func-args
-.  \}\}
-..
-.
-.
-.\" NS doc-saved-nesting-level global register
-.
-.nr doc-saved-nesting-level 0
-.
-.
-.\" NS doc-in-func-enclosure global register (bool)
-.
-.nr doc-in-func-enclosure 0
-.
-.
-.\" NS Fo user macro
-.\" NS   function open
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-func-arg-count
-.\" NS   doc-have-decl
-.\" NS   doc-have-func
-.\" NS   doc-have-var
-.\" NS   doc-in-func-enclosure
-.\" NS   doc-indent-synopsis
-.\" NS   doc-is-func
-.\" NS   doc-macro-name
-.\" NS   doc-saved-nesting-level
-.\" NS
-.\" NS width register `Fo' set in doc-common
-.
-.de Fo
-.  if (\n[doc-in-func-enclosure]) \{\
-.    tm mdoc error: .Fo/.Fc can't be nested (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-saved-nesting-level \n[doc-nesting-level]
-.  nr doc-in-func-enclosure 1
-.
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ds doc-macro-name Fo
-.      doc-parse-args \$@
-.    \}
-.    el \
-.      tm Usage: .Fo function_name (#\n[.c])
-.  \}
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    \" if there is/has been more than one subroutine declaration
-.    ie \n[doc-is-func] \{\
-.      br
-.      nr doc-have-var 0
-.      nr doc-have-decl 0
-.      nr doc-is-func 0
-.    \}
-.    el \{\
-.      if \n[doc-have-func] \{\
-.        doc-paragraph
-.        nr doc-have-var 0
-.        nr doc-have-decl 0
-.    \}\}
-.
-.    if \n[doc-have-decl] \{\
-.      doc-paragraph
-.      nr doc-have-var 0
-.    \}
-.
-.    if \n[doc-have-var] \{\
-.      doc-paragraph
-.      nr doc-have-decl 0
-.    \}
-.
-.    nr doc-have-func 1
-.    nr doc-is-func 0
-.
-.    br
-.    if !\n[doc-indent-synopsis] \
-.      nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
-.  \}
-.
-.  \" start function box
-.  box doc-func-box
-.  ev doc-func-env
-.  evc 0
-.  in 0
-.  nf
-.
-.  nr doc-arg-ptr +1
-.  doc-print-prefixes
-.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-func-arg-count 1
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.
-.    nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
-.    nop \f[]\s[0]\*[lp]\)\c
-.    doc-reset-args
-.  \}
-..
-.
-.
-.\" NS Fc user macro
-.\" NS   function close
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-func-arg-count
-.\" NS   doc-in-func-enclosure
-.\" NS   doc-saved-nesting-level
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `Fc' set in doc-common
-.
-.de Fc
-.  if !\n[doc-in-func-enclosure] \{\
-.    tm mdoc warning: Extraneous .Fc (#\n[.c])
-.    return
-.  \}
-.
-.  if \n[.$] \{\
-.    ds doc-macro-name Fc
-.    \" the first (dummy) argument is used to get the correct spacing
-.    doc-parse-args \) \$@
-.  \}
-.
-.  if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \
-.    tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc
-.
-.  nr doc-func-arg-count 0
-.  nr doc-in-func-enclosure 0
-.
-.  ie \n[doc-in-synopsis-section] \
-.    nop \|\*[rp];\)
-.  el \
-.    nop \|\*[rp]\)
-.
-.  \" finish function box
-.  br
-.  ev
-.  box
-.  chop doc-func-box
-.  unformat doc-func-box
-.
-.  if \n[doc-in-synopsis-section] \{\
-.    if !\n[doc-indent-synopsis-active] \
-.      in +\n[doc-indent-synopsis]u
-.    ti -\n[doc-indent-synopsis]u
-.  \}
-.
-.  nh
-.  nop \*[doc-func-box]\c
-.
-.  nr doc-arg-ptr +1
-.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    doc-print-recursive
-.  \}
-.  el \
-.    doc-print-and-reset
-.
-.  if \n[doc-in-synopsis-section] \
-.    if !\n[doc-indent-synopsis-active] \
-.      in -\n[doc-indent-synopsis]u
-..
-.
-.
-.\" NS doc-build-func-string macro
-.\" NS   collect function arguments and set hard spaces in between
-.\" NS
-.\" NS modifies:
-.\" NS   doc-func-arg
-.\" NS   doc-func-args-processed
-.\" NS   doc-num-func-args
-.
-.de doc-build-func-string
-.  if !\n[doc-num-func-args] \{\
-.    nr doc-num-func-args \n[.$]
-.    nr doc-func-args-processed 0
-.    ds doc-func-arg
-.  \}
-.
-.  nr doc-func-args-processed +1
-.  as doc-func-arg "\$1
-.
-.  if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\
-.    as doc-func-arg "\*[doc-hard-space]
-.
-.    shift
-.    doc-build-func-string \$@
-.  \}
-..
-.
-.
-.\" Very crude references: Stash all reference info into boxes, print out
-.\" reference on .Re macro and clean up.  Ordering very limited, no fancy
-.\" citations, but can do articles, journals, and books -- need to add
-.\" several missing options (like city etc).  Should be able to grab a refer
-.\" entry, massage it a wee bit (prefix a `.' to the %[A-Z]) and not worry
-.\" (ha!).
-.
-.
-.\" NS doc-is-reference global register (bool)
-.\" NS   set if in reference
-.
-.nr doc-is-reference 0
-.
-.
-.\" NS doc-reference-count global register
-.\" NS   reference element counter
-.
-.nr doc-reference-count 0
-.
-.
-.\" NS Rs user macro
-.\" NS   reference start
-.\" NS
-.\" NS modifies:
-.\" NS   doc-is-reference
-.\" NS   doc-reference-count
-.\" NS
-.\" NS width register `Rs' set in doc-common
-.
-.de Rs
-.  ie \n[.$] \
-.    tm Usage: .Rs (does not take arguments) (#\n[.c])
-.  el \{\
-.    nr doc-is-reference 1
-.    doc-reset-reference
-.    if \n[doc-in-see-also-section] \
-.      doc-paragraph
-.    nr doc-reference-count 0
-.  \}
-..
-.
-.
-.\" NS Re user macro
-.\" NS   reference end
-.\" NS
-.\" NS modifies:
-.\" NS   doc-is-reference
-.\" NS
-.\" NS width register `Re' set in doc-common
-.
-.de Re
-.  ie \n[.$] \
-.    tm Usage: .Re (does not take arguments) (#\n[.c])
-.  el \{\
-.    if !\n[doc-is-reference] \{\
-.      tm mdoc warning: Extraneous .Re (#\n[.c])
-.      return
-.    \}
-.    doc-print-reference
-.    doc-reset-reference
-.    nr doc-is-reference 0
-.  \}
-..
-.
-.
-.\" NS doc-reset-reference macro
-.\" NS   reference cleanup
-.\" NS
-.\" NS modifies:
-.\" NS   doc-author-count
-.\" NS   doc-author-nameXXX
-.\" NS   doc-book-count
-.\" NS   doc-book-name
-.\" NS   doc-city-count
-.\" NS   doc-city-name
-.\" NS   doc-corporate-count
-.\" NS   doc-corporate-name
-.\" NS   doc-date
-.\" NS   doc-date-count
-.\" NS   doc-issue-count
-.\" NS   doc-issue-name
-.\" NS   doc-journal-count
-.\" NS   doc-journal-name
-.\" NS   doc-optional-count
-.\" NS   doc-optional-string
-.\" NS   doc-page-number-count
-.\" NS   doc-page-number-string
-.\" NS   doc-publisher-count
-.\" NS   doc-publisher-name
-.\" NS   doc-reference-count
-.\" NS   doc-reference-title-count
-.\" NS   doc-reference-title-name
-.\" NS   doc-reference-title-name-for-book
-.\" NS   doc-report-count
-.\" NS   doc-report-name
-.\" NS   doc-url-count
-.\" NS   doc-url-name
-.\" NS   doc-volume-count
-.\" NS   doc-volume-name
-.
-.de doc-reset-reference
-.  while (\n[doc-author-count]) \{\
-.    ds doc-author-name\n[doc-author-count]
-.    nr doc-author-count -1
-.  \}
-.  nr doc-journal-count 0
-.  nr doc-issue-count 0
-.  nr doc-optional-count 0
-.  nr doc-corporate-count 0
-.  nr doc-report-count 0
-.  nr doc-reference-title-count 0
-.  nr doc-url-count 0
-.  nr doc-volume-count 0
-.  nr doc-city-count 0
-.  nr doc-date-count 0
-.  nr doc-page-number-count 0
-.  nr doc-book-count 0
-.  nr doc-publisher-count 0
-.  nr doc-reference-count 0
-.
-.  ds doc-journal-name
-.  ds doc-issue-name
-.  ds doc-optional-string
-.  ds doc-corporate-name
-.  ds doc-report-name
-.  ds doc-reference-title-name
-.  ds doc-reference-title-name-for-book
-.  ds doc-url-name
-.  ds doc-volume-name
-.  ds doc-city-name
-.  ds doc-date
-.  ds doc-page-number-string
-.  ds doc-book-name
-.  ds doc-publisher-name
-..
-.
-.
-.\" NS doc-finish-reference macro
-.\" NS   auxiliary macro for doc-print-reference
-.\" NS
-.\" NS modifies:
-.\" NS   doc-reference-count
-.
-.de doc-finish-reference
-.  nr doc-reference-count -\$1
-.  ie \n[doc-reference-count] \
-.    nop \),
-.  el \
-.    nop \).
-..
-.
-.
-.\" NS doc-print-reference macro
-.\" NS   reference print
-.\" NS
-.\" NS modifies:
-.\" NS   doc-reference-count
-.
-.de doc-print-reference
-.
-.  nh
-.
-.  if \n[doc-author-count] \{\
-.    doc-print-reference-authors
-.    nr doc-reference-count -\n[doc-author-count]
-.  \}
-.
-.  if \n[doc-reference-title-count] \{\
-.    unformat doc-reference-title-name
-.    chop doc-reference-title-name
-.    unformat doc-reference-title-name-for-book
-.    chop doc-reference-title-name-for-book
-.    ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\
-.      nop \)\*[q]\)\*[doc-reference-title-name-for-book]\)\*[q]\c
-.      doc-finish-reference \n[doc-reference-title-count]
-.    \}
-.    el \{\
-.      nop \*[doc-reference-title-name]\c
-.      doc-finish-reference \n[doc-reference-title-count]
-.  \}\}
-.
-.  if \n[doc-book-count] \{\
-.    unformat doc-book-name
-.    chop doc-book-name
-.    nop \*[doc-book-name]\c
-.    doc-finish-reference \n[doc-book-count]
-.  \}
-.
-.  if \n[doc-publisher-count] \{\
-.    unformat doc-publisher-name
-.    chop doc-publisher-name
-.    nop \*[doc-publisher-name]\c
-.    doc-finish-reference \n[doc-publisher-count]
-.  \}
-.
-.  if \n[doc-journal-count] \{\
-.    unformat doc-journal-name
-.    chop doc-journal-name
-.    nop \*[doc-journal-name]\c
-.    doc-finish-reference \n[doc-journal-count]
-.  \}
-.
-.  if \n[doc-report-count] \{\
-.    unformat doc-report-name
-.    chop doc-report-name
-.    nop \*[doc-report-name]\c
-.    doc-finish-reference \n[doc-report-count]
-.  \}
-.
-.  if \n[doc-issue-count] \{\
-.    unformat doc-issue-name
-.    chop doc-issue-name
-.    nop \*[doc-issue-name]\c
-.    doc-finish-reference \n[doc-issue-count]
-.  \}
-.
-.  if \n[doc-volume-count] \{\
-.    unformat doc-volume-name
-.    chop doc-volume-name
-.    nop \*[doc-volume-name]\c
-.    doc-finish-reference \n[doc-volume-count]
-.  \}
-.
-.  if \n[doc-url-count] \{\
-.    unformat doc-url-name
-.    chop doc-url-name
-.    nop \*[doc-url-name]\c
-.    doc-finish-reference \n[doc-url-count]
-.  \}
-.
-.  if \n[doc-page-number-count] \{\
-.    unformat doc-page-number-string
-.    chop doc-page-number-string
-.    nop \*[doc-page-number-string]\c
-.    doc-finish-reference \n[doc-page-number-count]
-.  \}
-.
-.  if \n[doc-corporate-count] \{\
-.    unformat doc-corporate-name
-.    chop doc-corporate-name
-.    nop \*[doc-corporate-name]\c
-.    doc-finish-reference \n[doc-corporate-count]
-.  \}
-.
-.  if \n[doc-city-count] \{\
-.    unformat doc-city-name
-.    chop doc-city-name
-.    nop \*[doc-city-name]\c
-.    doc-finish-reference \n[doc-city-count]
-.  \}
-.
-.  if \n[doc-date-count] \{\
-.    unformat doc-date
-.    chop doc-date
-.    nop \*[doc-date]\c
-.    doc-finish-reference \n[doc-date-count]
-.  \}
-.
-.  if \n[doc-optional-count] \{\
-.    unformat doc-optional-string
-.    chop doc-optional-string
-.    nop \*[doc-optional-string]\c
-.    doc-finish-reference \n[doc-optional-count]
-.  \}
-.
-.  if \n[doc-reference-count] \
-.    tm mdoc warning: unresolved reference problem
-.
-.  hy \n[doc-hyphen-flags]
-..
-.
-.
-.\" NS doc-print-reference-authors macro
-.\" NS   print out reference authors
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-dpra
-.\" NS   doc-str-dpra
-.
-.ds doc-str-dpra "and
-.
-.de doc-print-reference-authors
-.  nr doc-reg-dpra 1
-.
-.  while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\
-.    unformat doc-author-name\n[doc-reg-dpra]
-.    chop doc-author-name\n[doc-reg-dpra]
-.    ie (\n[doc-author-count] > 2) \
-.      nop \)\*[doc-author-name\n[doc-reg-dpra]],
-.    el \
-.      nop \)\*[doc-author-name\n[doc-reg-dpra]]
-.    nr doc-reg-dpra +1
-.  \}
-.
-.  unformat doc-author-name\n[doc-reg-dpra]
-.  chop doc-author-name\n[doc-reg-dpra]
-.  if (\n[doc-author-count] > 1) \
-.    nop \)\*[doc-str-dpra]
-.  nop \)\*[doc-author-name\n[doc-reg-dpra]],
-..
-.
-.
-.\" NS doc-author-count global register
-.\" NS   counter of author references
-.
-.nr doc-author-count 0
-.
-.
-.\" NS doc-author-nameXXX global box
-.\" NS   array of author names
-.\" NS
-.\" NS limit:
-.\" NS   doc-author-count
-.
-.ds doc-author-name0
-.
-.
-.\" NS %A user macro
-.\" NS   reference author(s)
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-author-count
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%A
-.\" NS
-.\" NS width register `%A' set in doc-common
-.
-.de %A
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%A author_name ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-author-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %A
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" save to reference box
-.  box doc-author-name\n[doc-author-count]
-.  ev doc-env-%A
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-book-count global register
-.\" NS   counter of book references
-.
-.nr doc-book-count 0
-.
-.
-.\" NS doc-book-name global box
-.\" NS   string of collected book references
-.
-.ds doc-book-name
-.
-.
-.\" NS %B user macro
-.\" NS   [reference] book name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-book-count
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%B
-.\" NS
-.\" NS width register `%B' set in doc-common
-.
-.de %B
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%B book_name ... (#\n[.c])
-.    return
-.  \}
-.
-.  if \n[doc-is-reference] \{\
-.    nr doc-book-count +1
-.    nr doc-reference-count +1
-.  \}
-.
-.  ds doc-macro-name %B
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  ie \n[doc-is-reference] \{\
-.    \" append to reference box
-.    boxa doc-book-name
-.    ev doc-env-%B
-.    evc 0
-.    in 0
-.    nf
-.    nop \*[doc-Em-font]\c
-.    doc-do-references
-.  \}
-.  el \{\
-.    nop \*[doc-Em-font]\c
-.    doc-print-recursive
-.  \}
-..
-.
-.
-.\" NS doc-city-count global register
-.\" NS   counter of city references
-.
-.nr doc-city-count 0
-.
-.
-.\" NS doc-city-name global box
-.\" NS   string of collected city references
-.
-.ds doc-city-name
-.
-.
-.\" NS %C user macro
-.\" NS   [reference] city
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-city-count
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%C
-.\" NS
-.\" NS width register `%C' set in doc-common
-.
-.de %C
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%C city_name ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-city-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %C
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-city-name
-.  ev doc-env-%C
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-date-count global register
-.\" NS   counter of date references
-.
-.nr doc-date-count 0
-.
-.
-.\" NS doc-date global box
-.\" NS   string of collected date references
-.
-.ds doc-date
-.
-.
-.\" NS %D user macro
-.\" NS   [reference] date
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-date-count
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%D
-.\" NS
-.\" NS width register `%D' set in doc-common
-.
-.de %D
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%D date ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-date-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %D
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-date
-.  ev doc-env-%D
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-publisher-count global register
-.\" NS   counter of publisher references
-.
-.nr doc-publisher-count 0
-.
-.
-.\" NS doc-publisher-name global box
-.\" NS   string of collected publisher references
-.
-.ds doc-publisher-name
-.
-.
-.\" NS %I user macro
-.\" NS   [reference] issuer/publisher name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-publisher-count
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%I
-.\" NS
-.\" NS width register `%I' set in doc-common
-.
-.de %I
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%I issuer/publisher_name ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-publisher-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %I
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-publisher-name
-.  ev doc-env-%I
-.  evc 0
-.  in 0
-.  nf
-.  nop \*[doc-Em-font]\c
-.  doc-do-references
-..
-.
-.
-.\" NS doc-journal-count global register
-.\" NS   counter of journal references
-.
-.nr doc-journal-count 0
-.
-.
-.\" NS doc-journal-name global box
-.\" NS   string of collected journal references
-.
-.ds doc-journal-name
-.
-.
-.\" NS %J user macro
-.\" NS   [reference] Journal Name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-journal-count
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%J
-.\" NS
-.\" NS width register `%J' set in doc-common
-.
-.de %J
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%J journal_name ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-journal-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %J
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-journal-name
-.  ev doc-env-%J
-.  evc 0
-.  in 0
-.  nf
-.  nop \*[doc-Em-font]\c
-.  doc-do-references
-..
-.
-.
-.\" NS doc-issue-count global register
-.\" NS   counter of issue number references
-.
-.nr doc-issue-count 0
-.
-.
-.\" NS doc-issue-name global box
-.\" NS   string of collected issue number references
-.
-.ds doc-issue-name
-.
-.
-.\" NS %N user macro
-.\" NS   [reference] issue number
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-issue-count
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%N
-.\" NS
-.\" NS width register `%N' set in doc-common
-.
-.de %N
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%N issue_number ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-issue-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %N
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-issue-name
-.  ev doc-env-%N
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-optional-count global register
-.\" NS   counter of optional information references
-.
-.nr doc-optional-count 0
-.
-.
-.\" NS doc-optional-string global box
-.\" NS   string of collected optional information references
-.
-.ds doc-optional-string
-.
-.
-.\" NS %O user macro
-.\" NS   [reference] optional information
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-optional-count
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%O
-.\" NS
-.\" NS width register `%O' set in doc-common
-.
-.de %O
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%O optional_information ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-optional-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %O
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-optional-string
-.  ev doc-env-%O
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-page-number-count global register
-.\" NS   counter of page number references
-.
-.nr doc-page-number-count 0
-.
-.
-.\" NS doc-page-number-string global box
-.\" NS   string of collected page number references
-.
-.ds doc-page-number-string
-.
-.
-.\" NS %P user macro
-.\" NS   [reference] page numbers
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-page-number-count
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%P
-.\" NS
-.\" NS width register `%P' set in doc-common
-.
-.de %P
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%P page_number ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-page-number-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %P
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-page-number-string
-.  ev doc-env-%P
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-corporate-count global register
-.\" NS   counter of corporate references
-.
-.nr doc-corporate-count 0
-.
-.
-.\" NS doc-corporate-name global box
-.\" NS   string of collected corporate references
-.
-.ds doc-corporate-name
-.
-.
-.\" NS %Q user macro
-.\" NS   corporate or foreign author
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-corporate-count
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%Q
-.\" NS
-.\" NS width register `%Q' set in doc-common
-.
-.de %Q
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-corporate-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %Q
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-corporate-name
-.  ev doc-env-%Q
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-report-count global register
-.\" NS   counter of report references
-.
-.nr doc-report-count 0
-.
-.
-.\" NS doc-report-name global box
-.\" NS   string of collected report references
-.
-.ds doc-report-name
-.
-.
-.\" NS %R user macro
-.\" NS   [reference] report name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS   doc-report-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%R
-.\" NS
-.\" NS width register `%R' set in doc-common
-.
-.de %R
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%R reference_report ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-report-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %R
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-report-name
-.  ev doc-env-%R
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-reference-title-count global register
-.\" NS   counter of reference title references
-.
-.nr doc-reference-title-count 0
-.
-.
-.\" NS doc-reference-title-name global box
-.\" NS   string of collected reference title references
-.
-.ds doc-reference-title-name
-.
-.
-.\" NS doc-reference-title-name-for-book global box
-.\" NS   string of collected reference title references
-.\" NS   (saved with another font; this is a shortcoming of groff)
-.
-.ds doc-reference-title-name-for-book
-.
-.
-.\" NS %T user macro
-.\" NS   reference title
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-title-count
-.\" NS   doc-report-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%T
-.\" NS
-.\" NS width register `%T' set in doc-common
-.
-.de %T
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%T reference_title ... (#\n[.c])
-.    return
-.  \}
-.
-.  if \n[doc-is-reference] \{\
-.    nr doc-reference-title-count +1
-.    nr doc-reference-count +1
-.  \}
-.
-.  ds doc-macro-name %T
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.  ie \n[doc-is-reference] \{\
-.    \" append to reference box
-.    boxa doc-reference-title-name-for-book
-.    ev doc-env-%T
-.    evc 0
-.    in 0
-.    nf
-.    nop \*[doc-No-font]\c
-.    doc-do-references
-.
-.    \" do it a second time with another font
-.    ds doc-macro-name %T
-.    doc-parse-args \$@
-.
-.    nr doc-arg-ptr +1
-.    nr doc-curr-font \n[.f]
-.    nr doc-curr-size \n[.ps]
-.    boxa doc-reference-title-name
-.    ev doc-env-%T
-.    evc 0
-.    in 0
-.    nf
-.    nop \*[doc-Em-font]\c
-.    doc-do-references
-.  \}
-.  el \{\
-.    nop \*[doc-Em-font]\c
-.    doc-print-recursive
-.  \}
-..
-.
-.
-.\" NS doc-url-count global register
-.\" NS   counter of hypertext references
-.
-.nr doc-url-count 0
-.
-.
-.\" NS doc-url-name global box
-.\" NS   string of collected hypertext references
-.
-.ds doc-url-name
-.
-.
-.\" NS doc-volume-count global register
-.\" NS   counter of reference title references
-.
-.nr doc-volume-count 0
-.
-.
-.\" NS doc-volume-name global box
-.\" NS   string of collected volume references
-.
-.ds doc-volume-name
-.
-.
-.\" NS %U user macro
-.\" NS   hypertext reference
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS   doc-url-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%U
-.\" NS
-.\" NS width register `%U' set in doc-common
-.
-.de %U
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%U URL ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-url-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %U
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-url-name
-.  ev doc-env-%U
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS %V user macro
-.\" NS   reference volume
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-macro-name
-.\" NS   doc-reference-count
-.\" NS   doc-volume-count
-.\" NS
-.\" NS local variables:
-.\" NS   doc-env-%V
-.\" NS
-.\" NS width register `%V' set in doc-common
-.
-.de %V
-.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
-.    tm Usage: .%V volume ... (#\n[.c])
-.    return
-.  \}
-.
-.  nr doc-volume-count +1
-.  nr doc-reference-count +1
-.
-.  ds doc-macro-name %V
-.  doc-parse-args \$@
-.
-.  nr doc-arg-ptr +1
-.  nr doc-curr-font \n[.f]
-.  nr doc-curr-size \n[.ps]
-.
-.  \" append to reference box
-.  boxa doc-volume-name
-.  ev doc-env-%V
-.  evc 0
-.  in 0
-.  nf
-.  doc-do-references
-..
-.
-.
-.\" NS doc-do-references macro
-.\" NS   reference recursion routine
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-ddr
-.\" NS   doc-reg-ddr1
-.
-.de doc-do-references
-.  if !\n[doc-is-reference] \
-.    tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c])
-.
-.  nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]]
-.
-.  ie (\n[doc-reg-ddr1] == 1) \{\
-.    \" .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
-.    doc-append-arg \c 3
-.    \*[doc-arg\n[doc-arg-ptr]]
-.  \}
-.  el \{\
-.    nop \)\*[doc-arg\n[doc-arg-ptr]]\c
-.
-.    ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
-.      \" finish reference box
-.      br
-.      ev
-.      boxa
-.
-.      doc-reset-args
-.    \}
-.    el \{\
-.      nr doc-reg-ddr \n[doc-arg-ptr]
-.      nr doc-arg-ptr +1
-.      nop \)\*[doc-space\n[doc-reg-ddr]]\c
-.      doc-do-references
-.  \}\}
-..
-.
-.
-.\" NS Hf user macro
-.\" NS   source include header files.
-.\" NS
-.\" NS modifies:
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS
-.\" NS width register `Hf' set in doc-common
-.
-.de Hf
-.  ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
-.    doc-paragraph
-.    nop File:
-.    Pa \$1
-.
-.    Bd -literal
-.    so \$1
-.    Ed
-.
-.    doc-paragraph
-.  \}
-.  el \
-.    Usage: .Hf file (#\n[.c])
-..
-.
-.
-.\" NS doc-have-author global register (bool)
-.\" NS   set in `An'
-.
-.nr doc-have-author 0
-.
-.
-.\" NS An user macro
-.\" NS   author name
-.\" NS
-.\" NS modifies:
-.\" NS   doc-arg-ptr
-.\" NS   doc-curr-font
-.\" NS   doc-curr-size
-.\" NS   doc-have-author
-.\" NS   doc-macro-name
-.\" NS
-.\" NS width register `An' set in doc-common
-.
-.de An
-.  if !\n[doc-arg-limit] \{\
-.    ie \n[.$] \{\
-.      ie        "\$1"-nosplit" \
-.        nr doc-in-authors-section 0
-.      el \{ .ie "\$1"-split" \
-.        nr doc-in-authors-section 1
-.      el \{\
-.        ds doc-macro-name An
-.        doc-parse-args \$@
-.    \}\}\}
-.    el \{\
-.      tm1 "Usage: .An {-nosplit | -split}
-.      tm1 "       .An author_name ... (#\n[.c])
-.  \}\}
-.
-.  if \n[doc-in-authors-section] \{\
-.    ie \n[doc-have-author] \
-.      br
-.    el \
-.      nr doc-have-author 1
-.  \}
-.
-.  if \n[doc-arg-limit] \{\
-.    nr doc-arg-ptr +1
-.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
-.      nr doc-curr-font \n[.f]
-.      nr doc-curr-size \n[.ps]
-.      doc-print-recursive
-.    \}
-.    el \{\
-.      tm Usage: .An author_name ... (#\n[.c])
-.      doc-reset-args
-.  \}\}
-..
-.
-.
-.\" NS Rv user macro
-.\" NS   return values
-.\" NS
-.\" NS width register `Rv' set in doc-common
-.\" NS
-.\" NS local variables:
-.\" NS   doc-str-Rv-std-prefix
-.\" NS   doc-str-Rv-std-suffix
-.\" NS   doc-str-Rv-stds-prefix
-.\" NS   doc-str-Rv-stds-and
-.\" NS   doc-str-Rv-stds-suffix
-.\" NS   doc-str-Rv-std0
-.
-.ds doc-str-Rv-std-prefix "The
-.ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
-.as doc-str-Rv-std-suffix " otherwise the value\~\-1 is returned and
-.as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
-.as doc-str-Rv-std-suffix " is set to indicate the error.
-.
-.ds doc-str-Rv-stds-prefix "The
-.ds doc-str-Rv-stds-and    "and
-.ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
-.as doc-str-Rv-stds-suffix " otherwise the value\~\-1 is returned and
-.as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
-.as doc-str-Rv-stds-suffix " is set to indicate the error.
-.
-.ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
-.as doc-str-Rv-std0 " otherwise the value\~\-1 is returned and
-.as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
-.as doc-str-Rv-std0 " is set to indicate the error.
-.
-.de Rv
-.
-.\" XXX: what does this function without `-std'?
-.
-.  if \n[doc-arg-limit] \{\
-.    tm Usage: .Rv not callable by other macros (#\n[.c])
-.    doc-reset-args
-.    return
-.  \}
-.
-.  if !\n[.$] \{\
-.    tm Usage: .Rv [-std] [<function> ...] (#\n[.c])
-.    return
-.  \}
-.
-.  if "\$1"-std" \{\
-.    nr doc-reg-Rv \*[doc-section]
-.    if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \
-.      tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c])
-.    br
-.    shift
-.    ie (\n[.$] > 1) \{\
-.      nop \)\*[doc-str-Rv-stds-prefix]
-.      nr doc-reg-Rv 1
-.      while (\n[doc-reg-Rv] < \n[.$]) \{\
-.        ie (\n[.$] > 2) \
-.          Fn \$\n[doc-reg-Rv] ,
-.        el \
-.          Fn \$\n[doc-reg-Rv]
-.        nr doc-reg-Rv +1
-.      \}
-.      nop \)\*[doc-str-Rv-stds-and]
-.      Fn \$\n[.$]
-.      nop \)\*[doc-str-Rv-stds-suffix]
-.    \}
-.    el \{ .ie (\n[.$] == 1) \{\
-.      nop \)\*[doc-str-Rv-std-prefix]
-.      Fn \$1
-.      nop \)\*[doc-str-Rv-std-suffix]
-.    \}
-.    el \{\
-.      nop \)\*[doc-str-Rv-std0]
-.  \}\}\}
-..
-.
-.
-.\" NS Ex user macro
-.\" NS   exit status
-.\" NS
-.\" NS width register `Ex' set in doc-common
-.\" NS
-.\" NS local variables:
-.\" NS   doc-str-Ex-std-prefix
-.\" NS   doc-str-Ex-std-suffix
-.
-.ds doc-str-Ex-std-prefix "The
-.ds doc-str-Ex-std-suffix "utility exits\~0 on success,
-.as doc-str-Ex-std-suffix " and\~>0 if an error occurs.
-.
-.ds doc-str-Ex-stds-prefix "The
-.als doc-str-Ex-stds-and doc-str-Rv-stds-and
-.ds doc-str-Ex-stds-suffix "utilities exit\~0 on success,
-.as doc-str-Ex-stds-suffix " and\~>0 if an error occurs.
-.
-.de Ex
-.
-.\" XXX: what does this function without `-std'?
-.
-.  if \n[doc-arg-limit] \{\
-.    tm Usage: .Ex not callable by other macros (#\n[.c])
-.    doc-reset-args
-.    return
-.  \}
-.
-.  if !\n[.$] \{\
-.    tm Usage: .Ex [-std] [<utility> ...] (#\n[.c])
-.    return
-.  \}
-.
-.  if "\$1"-std" \{\
-.    nr doc-reg-Ex \*[doc-section]
-.    if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \
-.      tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c])
-.    br
-.    shift
-.    ie (\n[.$] > 1) \{\
-.      nop \)\*[doc-str-Ex-stds-prefix]
-.      nr doc-reg-Ex 1
-.      while (\n[doc-reg-Ex] < \n[.$]) \{\
-.        ie (\n[.$] > 2) \
-.          Nm \$\n[doc-reg-Ex] ,
-.        el \
-.          Nm \$\n[doc-reg-Ex]
-.        nr doc-reg-Ex +1
-.      \}
-.      nop \)\*[doc-str-Ex-stds-and]
-.      Nm \$\n[.$]
-.      nop \)\*[doc-str-Ex-stds-suffix]
-.    \}
-.    el \{\
-.      nop \)\*[doc-str-Ex-std-prefix]
-.      Nm \$1
-.      nop \)\*[doc-str-Ex-std-suffix]
-.  \}\}
-..
-.
-.
-.\" NS Mt user macro
-.\" NS   mailto (for conversion to HTML)
-.
-.de Mt
-.  \" XXX: error handling missing
-.  Pa \$@
-..
-.
-.
-.\" NS Lk user macro
-.\" NS   link (for conversion to HTML)
-.\" NS
-.\" NS local variables:
-.\" NS   doc-reg-Lk
-.\" NS   doc-str-Lk
-.
-.de Lk
-.  ds doc-str-Lk Sy \$@
-.
-.  ie (\n[.$] > 1) \{\
-.    doc-get-arg-type \$2
-.    ie (\n[doc-arg-type] < 3) \{\
-.      Em \)\$2:
-.      ds doc-str-Lk Sy "\$1"
-.      doc-get-width "\$1"
-.      shift 2
-.      if \n[.$] \
-.        as doc-str-Lk " \$@
-.    \}
-.    el \
-.      doc-get-width "\$1"
-.  \}
-.  el \
-.    doc-get-width "\$1"
-.
-.  ie n \
-.    nr doc-reg-Lk 26
-.  el \
-.    nr doc-reg-Lk 38
-.  ie (\n[doc-width] >= \n[doc-reg-Lk]) \
-.    D1 \*[doc-str-Lk]
-.  el \
-.    \*[doc-str-Lk]
-..
-.
-.
-.\" NS doc-defunct-macro macro
-.\" NS   this is the skeleton for defunct macros
-.\" NS
-.
-.de doc-defunct-macro
-.  tmc mdoc error: .\$0 defunct
-.  if d doc-\$0-usage \
-.    tmc , \*[doc-\$0-usage]
-.  tm1 " (#\n[.c])
-..
-.
-.
-.\" obsolete macros
-.
-.als Db doc-defunct-macro
-.
-.als Ds doc-defunct-macro
-.
-.als Or doc-defunct-macro
-.ds doc-Or-usage use `|'
-.
-.als Sf doc-defunct-macro
-.ds doc-Sf-usage use .Pf or .Ns
-.
-.
-.rn em e@
-.
-.de em
-.  tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c])
-.  tm1 "            Should this have been `.Em ...'?
-.  ab
-..
-.
-.
-.\" NS doc-empty-line macro
-.\" NS   emit warning and print empty line
-.
-.de doc-empty-line
-.  if !\n[doc-display-depth] \
-.    tm mdoc warning: Empty input line #\n[.c]
-.  sp
-..
-.
-.blm doc-empty-line
-.
-.
-.ec
-.
-.
-.\" For UTF-8, map some characters conservatively for the sake
-.\" of easy cut and paste.
-.
-.if '\*[.T]'utf8' \{\
-.  rchar \- - ' `
-.
-.  char \- \N'45'
-.  char  - \N'45'
-.  char  ' \N'39'
-.  char  ` \N'96'
-.\}
-.
-.
-.\" load local modifications
-.mso mdoc.local
-.
-.\" EOF
diff --git a/tmac/doc.tmac-u b/tmac/doc.tmac-u
new file mode 100644 (file)
index 0000000..f172fd8
--- /dev/null
@@ -0,0 +1,6582 @@
+.\" Copyright (c) 1991, 1993
+.\"   The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in
+.\"    the documentation and/or other materials provided with the
+.\"    distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its
+.\"    contributors may be used to endorse or promote products derived
+.\"    from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS"
+.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+.\" PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
+.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)doc        8.1 (Berkeley) 06/08/93
+.\"
+.\" Modified by jjc@jclark.com as follows: the doc-* files are assumed
+.\" to be installed as mdoc/doc-* rather than tmac.doc-* (the filename
+.\" 'tmac.doc-common' would be too long); when using groff, the doc-*
+.\" files are loaded using the 'mso' request.
+.\"
+.\" Modified by
+.\"
+.\"   Werner LEMBERG <wl@gnu.org>      and
+.\"   Ruslan Ermilov <ru@freebsd.org>
+.\"
+.\" to make it more readable: using long names and many groff features,
+.\" updating and extending documentation, etc.
+.\"
+.\" %beginstrip%
+.
+.
+.if !\n(.g \
+.  ab This version of mdoc can be run with GNU troff only!
+.
+.
+.do if d Dd .nx
+.
+.
+.cp 0
+.
+.
+.if (\n[.x]\n[.y] < 118) \
+.  ab You need GNU troff version 1.18 or higher to run this version of mdoc!
+.
+.
+.\" Load start-up files
+.ie t \
+.  mso mdoc/doc-ditroff
+.el \
+.  mso mdoc/doc-nroff
+.
+.mso mdoc/doc-common
+.mso mdoc/doc-syms
+.
+.
+.eo
+.
+.
+.\" NS doc-macro-name global string
+.\" NS   name of calling request (set in each user-requestable macro)
+.
+.ds doc-macro-name
+.als doc-arg0 doc-macro-name
+.
+.
+.\" NS doc-arg-limit global register
+.\" NS   total number of arguments
+.
+.nr doc-arg-limit 0
+.
+.
+.\" NS doc-num-args global register
+.\" NS   number of arguments to handle (must be set to \n[.$] prior to
+.\" NS   'doc-parse-arg-vector' request)
+.
+.nr doc-num-args 0
+.
+.
+.\" NS doc-arg-ptr global register
+.\" NS   argument pointer
+.
+.nr doc-arg-ptr 0
+.
+.
+.\" NS doc-argXXX global string
+.\" NS   argument vector
+.\" NS
+.\" NS limit:
+.\" NS   doc-arg-limit
+.
+.ds doc-arg1
+.
+.
+.\" NS doc-typeXXX global register
+.\" NS   argument type vector (macro=1, string=2, punctuation suffix=3,
+.\" NS   punctuation prefix=4)
+.\" NS
+.\" NS limit:
+.\" NS   doc-arg-limit
+.
+.nr doc-type1 0
+.
+.
+.\" NS doc-spaceXXX global string
+.\" NS   space vector
+.\" NS
+.\" NS limit:
+.\" NS   doc-arg-limit
+.
+.ds doc-space1
+.
+.
+.\" NS doc-parse-args macro
+.\" NS   parse arguments (recursively) ('.doc-parse-args arg ...')
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-spaceXXX
+.\" NS   doc-typeXXX
+.\" NS   doc-arg-ptr
+.\" NS   doc-have-space
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dpa
+.\" NS   doc-reg-dpa1
+.\" NS   doc-str-dpa
+.
+.de doc-parse-args
+.  if !\n[doc-arg-limit] \
+.    doc-set-spacing-1
+.
+.  nr doc-have-space 0
+.
+.  if !\n[.$] \
+.    return
+.
+.  nr doc-arg-limit +1
+.
+.  \" handle '|' and '...' specially
+.  ie        "\$1"|" \
+.    ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
+.  el \{ .ie "\$1"..." \
+.    ds doc-arg\n[doc-arg-limit] \|.\|.\|.
+.  el \
+.    ds doc-arg\n[doc-arg-limit] "\$1
+.  \}
+.
+.  \" get argument type and set spacing
+.  doc-get-arg-type* \n[doc-arg-limit]
+.  nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
+.  doc-set-spacing-\n[doc-arg-type]
+.
+.  \" check whether we have processed the last parameter
+.  ie (\n[.$] == 1) \
+.    nr doc-arg-ptr 0
+.  el \{\
+.    shift
+.    doc-parse-args \$@
+.  \}
+.
+.  nh
+..
+.
+.
+.\" NS doc-parse-arg-vector macro
+.\" NS   parse argument vector (recursive)
+.\" NS
+.\" NS   cf. comments in doc-parse-args
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-num-args
+.\" NS   doc-spaceXXX
+.\" NS   doc-typeXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dpav
+.\" NS   doc-reg-dpav1
+.\" NS   doc-str-dpav
+.
+.de doc-parse-arg-vector
+.  if !\n[doc-arg-limit] \
+.    doc-set-spacing-1
+.
+.  nr doc-arg-limit +1
+.
+.  ie        "\*[doc-arg\n[doc-arg-limit]]"|" \
+.    ds doc-arg\n[doc-arg-limit] \f[R]|\f[]
+.  el \{ .if "\*[doc-arg\n[doc-arg-limit]]"..." \
+.    ds doc-arg\n[doc-arg-limit] \|.\|.\|.
+.  \}
+.
+.  doc-get-arg-type* \n[doc-arg-limit]
+.  nr doc-type\n[doc-arg-limit] \n[doc-arg-type]
+.  doc-set-spacing-\n[doc-arg-type]
+.
+.  ie (\n[doc-num-args] == 1) \{\
+.    nr doc-arg-ptr 0
+.    nr doc-num-args 0
+.  \}
+.  el \{\
+.    nr doc-num-args -1
+.    doc-parse-arg-vector
+.  \}
+.
+.  nh
+..
+.
+.
+.\" NS doc-parse-space-vector macro
+.\" NS   parse space vector (recursive)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-num-args
+.\" NS   doc-spaceXXX
+.
+.de doc-parse-space-vector
+.  nr doc-arg-limit +1
+.
+.  doc-set-spacing-\n[doc-type\n[doc-arg-limit]]
+.
+.  ie (\n[doc-num-args] == 1) \
+.    nr doc-num-args 0
+.  el \{\
+.    nr doc-num-args -1
+.    doc-parse-space-vector
+.  \}
+..
+.
+.
+.\" NS doc-remaining-args macro
+.\" NS   output remaining arguments as-is, separated by spaces (until
+.\" NS   'doc-num-args' is exhausted)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-num-args
+.
+.de doc-remaining-args
+.  nr doc-arg-ptr +1
+.  nop \)\*[doc-arg\n[doc-arg-ptr]]\c
+.
+.  ie (\n[doc-num-args] == 1) \{\
+.    nr doc-arg-ptr 0
+.    nr doc-num-args 0
+.  \}
+.  el \{\
+.    nop \)\*[doc-space]\c
+.    nr doc-num-args -1
+.    doc-remaining-args
+.  \}
+..
+.
+.
+.\" NS doc-append-arg macro
+.\" NS   append one argument to argument vector:
+.\" NS   '.doc-append-arg [arg] [type]'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-argXXX
+.\" NS   doc-typeXXX
+.
+.de doc-append-arg
+.  nr doc-arg-limit +1
+.  ds doc-arg\n[doc-arg-limit] "\$1
+.  nr doc-type\n[doc-arg-limit] \$2
+.  doc-set-spacing-\$2
+..
+.
+.
+.\" NS doc-print-and-reset macro
+.\" NS   finish input line and clean up argument vectors
+.
+.de doc-print-and-reset
+.  if \n[doc-space-mode] \
+.    nop \)
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-reset-args macro
+.\" NS   reset argument counters
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-arg-ptr
+.\" NS   doc-have-slot
+.
+.de doc-reset-args
+.  nr doc-arg-limit 0
+.  nr doc-arg-ptr 0
+.  nr doc-have-slot 0
+.
+.  hy \n[doc-hyphen-flags]
+..
+.
+.
+.ec
+.
+.\" NS doc-curr-font global register
+.\" NS   saved current font
+.
+.nr doc-curr-font \n[.f]
+.
+.
+.\" NS doc-curr-size global register
+.\" NS   saved current font size
+.
+.nr doc-curr-size \n[.ps]
+.
+.eo
+.
+.
+.\" NS Fl user macro
+.\" NS   handle flags (appends '-' and prints flags): '.Fl [arg ...]'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Fl (for communication with doc-flag-recursion)
+.\" NS
+.\" NS width register 'Fl' set in doc-common
+.
+.de Fl
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  nop \*[doc-Fl-font]\c
+.
+.  if !\n[doc-arg-limit] \{\
+.    ds doc-macro-name Fl
+.    doc-parse-args \$@
+.
+.    \" no arguments
+.    if !\n[.$] \
+.      nop \|\-\|\f[]\s[0]
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    \" last argument
+.    nop \|\-\f[]\s[0]\c
+.    doc-print-and-reset
+.  \}
+.  el \{\
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
+.      nop \|\-\f[]\s[0]\c
+.      \*[doc-arg\n[doc-arg-ptr]]
+.    \}
+.    el \{\
+.      if (\n[doc-type\n[doc-arg-ptr]] == 3) \
+.        nop \|\-\|\c
+.
+.      nr doc-reg-Fl 1
+.      doc-flag-recursion
+.  \}\}
+..
+.
+.
+.\" NS doc-flag-recursion macro
+.\" NS   'Fl' flag recursion routine (special handling)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dfr
+.\" NS   doc-reg-dfr1
+.\" NS   doc-str-dfr
+.
+.de doc-flag-recursion
+.  nr doc-reg-dfr1 \n[doc-type\n[doc-arg-ptr]]
+.  ds doc-str-dfr "\*[doc-arg\n[doc-arg-ptr]]
+.
+.  ie (\n[doc-reg-dfr1] == 1) \{\
+.    nop \f[]\s[0]\c
+.    \*[doc-str-dfr]
+.  \}
+.  el \{\
+.    nr doc-reg-dfr \n[doc-arg-ptr]
+.
+.    ie (\n[doc-reg-dfr1] == 2) \{\
+.      \" handle vertical bar -- doc-reg-Fl is set for the first call of
+.      \" doc-flag-recursion only; we need this to make '.Fl | ...' work
+.      \" correctly
+.      ie "\*[doc-str-dfr]"\*[Ba]" \{\
+.        if \n[doc-reg-Fl] \
+.          nop \|\-\*[doc-space]\c
+.        nop \)\*[Ba]\c
+.      \}
+.      el \{\
+.        ie "\*[doc-str-dfr]"\f[R]|\f[]" \{\
+.          if \n[doc-reg-Fl] \
+.            nop \|\-\*[doc-space]\c
+.          nop \f[R]|\f[]\c
+.        \}
+.        el \{\
+.          \" two consecutive hyphen characters?
+.          ie "\*[doc-str-dfr]"-" \
+.            nop \|\-\^\-\|\c
+.          el \
+.            nop \|\%\-\*[doc-str-dfr]\&\c
+.    \}\}\}
+.    el \{\
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.      nop \)\*[doc-str-dfr]\f[]\s[0]\c
+.    \}
+.
+.    ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
+.      \" last argument
+.      if (\n[doc-reg-dfr1] == 4) \
+.        nop \|\-\c
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.      doc-print-and-reset
+.    \}
+.    el \{\
+.      nr doc-arg-ptr +1
+.      ie (\n[doc-type\n[doc-arg-ptr]] == 3) \{\
+.        ie (\n[doc-type\n[doc-reg-dfr]] == 4) \
+.          nop \|\-\c
+.        el \
+.          nop \)\*[doc-space\n[doc-reg-dfr]]\c
+.      \}
+.      el \
+.        nop \)\*[doc-space\n[doc-reg-dfr]]\c
+.
+.      shift
+.      nr doc-reg-Fl 0
+.      doc-flag-recursion \$@
+.  \}\}
+..
+.
+.
+.\" NS doc-print-recursive macro
+.\" NS   general name recursion routine (print remaining arguments)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dpr
+.\" NS   doc-reg-dpr1
+.\" NS   doc-str-dpr
+.
+.de doc-print-recursive
+.  nr doc-reg-dpr1 \n[doc-type\n[doc-arg-ptr]]
+.  ds doc-str-dpr "\*[doc-arg\n[doc-arg-ptr]]
+.
+.  ie (\n[doc-reg-dpr1] == 1) \{\
+.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.    \*[doc-str-dpr]
+.  \}
+.  el \{\
+.    nr doc-reg-dpr \n[doc-arg-ptr]
+.
+.    \" the '\%' prevents hyphenation on a dash ('-')
+.    ie (\n[doc-reg-dpr1] == 2) \
+.      nop \%\*[doc-str-dpr]\&\c
+.    el \{\
+.      \" punctuation character
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.      nop \)\*[doc-str-dpr]\f[]\s[0]\c
+.    \}
+.
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.      \" last argument
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.      doc-print-and-reset
+.    \}
+.    el \{\
+.      nop \)\*[doc-space\n[doc-reg-dpr]]\c
+.      doc-print-recursive
+.  \}\}
+..
+.
+.
+.\" NS doc-print-prefixes macro
+.\" NS   print leading prefixes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.
+.de doc-print-prefixes
+.  while (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    if !(\n[doc-type\n[doc-arg-ptr]] == 4) \
+.      break
+.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.    nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
+.    nr doc-arg-ptr +1
+.  \}
+..
+.
+.
+.\" NS doc-generic-macro macro
+.\" NS   this is the skeleton for most simple macros
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.
+.de doc-generic-macro
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name \$0
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    if (\n[doc-type\n[doc-arg-ptr]] == 1) \{\
+.      tmc mdoc warning: Using a macro as first argument
+.      tm1 " cancels effect of .\$0 (#\n[.c])
+.
+.      \" the right action here would be to reset the argument counters
+.      \" and bail out -- unfortunately, a small number of manual pages
+.      \" (less than 2% for FreeBSD which has been used for testing)
+.      \" relied on the old behaviour (silently ignore this error),
+.      \" so it is commented out
+.
+.\"    doc-reset-args
+.    \}
+.\"  el \{\
+.      nr doc-curr-font \n[.f]
+.      nr doc-curr-size \n[.ps]
+.      nop \*[doc-\$0-font]\c
+.      doc-print-recursive
+.\"  \}
+.  \}
+.  el \{\
+.    tm Usage: .\$0 \*[doc-\$0-usage] ... (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Ar user macro
+.\" NS   command-line 'argument' macro: '.Ar [args ...]'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variable:
+.\" NS   doc-str-Ar-default
+.\" NS
+.\" NS width register 'Ar' set in doc-common
+.
+.ds doc-str-Ar-default "file\ .\|.\|.
+.
+.de Ar
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  nop \*[doc-Ar-font]\c
+.
+.  if !\n[doc-arg-limit] \{\
+.    ds doc-macro-name Ar
+.    doc-parse-args \$@
+.
+.    \" no argument
+.    if !\n[.$] \
+.      nop \)\*[doc-str-Ar-default]\&\f[]\s[0]
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    nop \)\*[doc-str-Ar-default]\&\f[]\s[0]\c
+.    doc-print-and-reset
+.  \}
+.  el \{\
+.    if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      \" replace previous argument (Ar) with default value
+.      nr doc-arg-ptr -1
+.      ds doc-arg\n[doc-arg-ptr] "\*[doc-str-Ar-default]
+.      nr doc-type\n[doc-arg-ptr] 2
+.      ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.      \" recompute space vector for remaining arguments
+.      nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.      nr doc-arg-limit \n[doc-arg-ptr]
+.      doc-parse-space-vector
+.    \}
+.    doc-print-recursive
+.  \}
+..
+.
+.
+.\" NS Ad user macro
+.\" NS   Addresses
+.\" NS
+.\" NS width register 'Ad' set in doc-common
+.
+.als Ad doc-generic-macro
+.ds doc-Ad-usage address
+.
+.
+.\" NS doc-indent-synopsis global register
+.\" NS   indentation in synopsis
+.
+.nr doc-indent-synopsis 0
+.
+.
+.\" NS doc-indent-synopsis-active global register (bool)
+.\" NS   indentation in synopsis active
+.
+.nr doc-indent-synopsis-active 0
+.
+.
+.\" NS Cd user macro
+.\" NS   config declaration (for section 4 SYNOPSIS)
+.\" NS
+.\" NS   this function causes a break; it uses the 'Nm' font
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-indent-synopsis
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Cd' set in doc-common
+.
+.de Cd
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Cd
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.
+.    ie \n[doc-in-synopsis-section] \{\
+.      ie "\*[doc-macro-name]"Cd" \{\
+.        br
+.        if !\n[doc-indent-synopsis] \
+.          nr doc-indent-synopsis \n[doc-display-indent]u
+.        if !\n[doc-indent-synopsis-active] \
+.          in +\n[doc-indent-synopsis]u
+.        ti -\n[doc-indent-synopsis]u
+.        nop \*[doc-Nm-font]\c
+.        doc-print-recursive
+.        if !\n[doc-indent-synopsis-active] \
+.          in -\n[doc-indent-synopsis]u
+.      \}
+.      el \{\
+.        nop \*[doc-Nm-font]\c
+.        doc-print-recursive
+.    \}\}
+.    el \{\
+.      nop \*[doc-Nm-font]\c
+.      doc-print-recursive
+.  \}\}
+.  el \{\
+.    tm Usage: .Cd configuration_file_declaration ... (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Cm user macro
+.\" NS   interactive command modifier (flag)
+.\" NS
+.\" NS width register 'Cm' set in doc-common
+.
+.als Cm doc-generic-macro
+.ds doc-Cm-usage interactive_command_modifier
+.
+.
+.\" NS Dv user macro
+.\" NS   defined variable
+.\" NS
+.\" NS   this function uses the 'Er' font
+.\" NS
+.\" NS width register 'Dv' set in doc-common
+.
+.als Dv doc-generic-macro
+.ds doc-Dv-usage defined_variable
+.als doc-Dv-font doc-Er-font
+.
+.
+.\" NS Em user macro
+.\" NS   emphasis
+.\" NS
+.\" NS width register 'Em' set in doc-common
+.
+.als Em doc-generic-macro
+.ds doc-Em-usage text
+.
+.
+.\" NS Er user macro
+.\" NS   errno type
+.\" NS
+.\" NS width register 'Er' set in doc-common
+.
+.als Er doc-generic-macro
+.ds doc-Er-usage text
+.
+.
+.\" NS Ev user macro
+.\" NS   environment variable
+.\" NS
+.\" NS width register 'Ev' set in doc-common
+.
+.als Ev doc-generic-macro
+.ds doc-Ev-usage text
+.
+.
+.\" NS doc-have-decl global register (bool)
+.\" NS   subroutine test (in synopsis only)
+.
+.nr doc-have-decl 0
+.
+.
+.\" NS doc-have-var global register (bool)
+.\" NS   whether last type is a variable type
+.
+.nr doc-have-var 0
+.
+.
+.\" NS doc-do-func-decl macro
+.\" NS   do something special while in SYNOPSIS
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-have-decl
+.\" NS   doc-have-var
+.
+.de doc-do-func-decl
+.  if \n[doc-in-synopsis-section] \{\
+.    \" if a variable type was the last thing given, want vertical space
+.    if \n[doc-have-var] \{\
+.      doc-paragraph
+.      nr doc-have-var 0
+.    \}
+.    \" if a subroutine was the last thing given, want vertical space
+.    if \n[doc-have-func] \{\
+.      ie \n[doc-have-decl] \
+.        br
+.      el \
+.        doc-paragraph
+.    \}
+.    nr doc-have-decl 1
+.  \}
+.
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+..
+.
+.
+.\" NS Fd user macro
+.\" NS   function declaration -- not callable
+.\" NS
+.\" NS   this function causes a break
+.\" NS
+.\" NS width register 'Fd' set in doc-common
+.
+.de Fd
+.  ie ((\n[.$] >= 1) & (\n[doc-arg-limit] == 0)) \{\
+.    doc-do-func-decl
+.    nop \*[doc-Fd-font]\$*
+.    br
+.    ft \n[doc-curr-font]
+.    ps \n[doc-curr-size]u
+.  \}
+.  el \{\
+.    tm Usage: .Fd function_declaration -- Fd is not callable (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS In user macro
+.\" NS   #include statement in SYNOPSIS
+.\" NS   <header.h> if not in SYNOPSIS
+.\" NS
+.\" NS   this function causes a break; it uses the 'Fd' font
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-indent-synopsis
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'In' set in doc-common
+.
+.de In
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name In
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .In include_file ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  ie ((\n[doc-arg-limit] >= \n[doc-arg-ptr]) & (\n[doc-type\n[doc-arg-ptr]] == 2)) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.
+.    ie \n[doc-in-synopsis-section] \{\
+.      ie "\*[doc-macro-name]"In" \{\
+.        doc-do-func-decl
+.        nop \*[doc-Fd-font]#include <\*[doc-arg\n[doc-arg-ptr]]>
+.        ft \n[doc-curr-font]
+.        ps \n[doc-curr-size]u
+.        br
+.        nr doc-arg-ptr +1
+.        ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.          doc-print-recursive
+.        el \
+.          doc-reset-args
+.      \}
+.      el \{\
+.        ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
+.        as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
+.        doc-print-recursive
+.    \}\}
+.    el \{\
+.      ds doc-arg\n[doc-arg-ptr] "<\*[doc-Pa-font]\*[doc-arg\n[doc-arg-ptr]]
+.      as doc-arg\n[doc-arg-ptr] \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]>
+.      doc-print-recursive
+.  \}\}
+.  el \{\
+.    tm Usage: .In include_file ... (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Fr user macro
+.\" NS   function return value
+.\" NS
+.\" NS   this function uses the 'Ar' font
+.\" NS
+.\" NS width register 'Fr' set in doc-common
+.
+.als Fr doc-generic-macro
+.ds doc-Fr-usage function_return_value
+.als doc-Fr-font doc-Ar-font
+.
+.
+.\" NS Ic user macro
+.\" NS   interactive command
+.\" NS
+.\" NS width register 'Ic' set in doc-common
+.
+.als Ic doc-generic-macro
+.ds doc-Ic-usage interactive_command
+.
+.
+.\" NS Li user macro
+.\" NS   literals
+.\" NS
+.\" NS width register 'Li' set in doc-common
+.
+.als Li doc-generic-macro
+.ds doc-Li-usage argument
+.
+.
+.\" NS Ms user macro
+.\" NS   math symbol
+.\" NS
+.\" NS   this function uses the 'Sy' font
+.\" NS
+.\" NS width register 'Ms' set in doc-common
+.
+.als Ms doc-generic-macro
+.ds doc-Ms-usage math_symbol
+.als doc-Ms-font doc-Sy-font
+.
+.
+.\" NS doc-command-name global string
+.\" NS   save first invocation of .Nm
+.
+.ds doc-command-name
+.
+.
+.\" NS Nm user macro
+.\" NS   name of command or page topic
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-command-name
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-indent-synopsis
+.\" NS   doc-indent-synopsis-active
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Nm' set in doc-common
+.
+.de Nm
+.  if !\n[doc-arg-limit] \{\
+.    ds doc-macro-name Nm
+.    ie \n[.$] \
+.      doc-parse-args \$@
+.    el \{\
+.      ie "\*[doc-command-name]"" \
+.        tm Usage: .Nm name ... (#\n[.c])
+.      el \
+.        doc-parse-args \*[doc-command-name]
+.  \}\}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    \" last argument
+.    ie "\*[doc-command-name]"" \{\
+.      tm Usage: .Nm name ... (#\n[.c])
+.      doc-reset-args
+.    \}
+.    el \{\
+.      nop \*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]\c
+.      doc-print-and-reset
+.  \}\}
+.  el \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.
+.    ie !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      ie "\*[doc-command-name]"" \
+.        tm Usage: .Nm name ... (#\n[.c])
+.      el \{\
+.        \" replace previous argument (Nm) with default value
+.        nr doc-arg-ptr -1
+.        ds doc-arg\n[doc-arg-ptr] "\*[doc-Nm-font]\*[doc-command-name]\f[]\s[0]
+.        nr doc-type\n[doc-arg-ptr] 2
+.        ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.        \" recompute space vector for remaining arguments
+.        nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.        nr doc-arg-limit \n[doc-arg-ptr]
+.        doc-parse-space-vector
+.    \}\}
+.    el \{\
+.      \" handle '.Nm ...' in SYNOPSIS
+.      if \n[doc-in-synopsis-section] \{\
+.        if "\*[doc-macro-name]"Nm" \{\
+.          br
+.          if !\n[doc-indent-synopsis] \{\
+.            doc-get-width "\*[doc-arg\n[doc-arg-ptr]]"
+.            nr doc-indent-synopsis ((\n[doc-width]u + 1u) * \n[doc-fixed-width]u)
+.          \}
+.          if !\n[doc-indent-synopsis-active] \{\
+.            in +\n[doc-indent-synopsis]u
+.            nr doc-indent-synopsis-active 1
+.          \}
+.          ti -\n[doc-indent-synopsis]u
+.      \}\}
+.      if "\*[doc-command-name]"" \
+.        ds doc-command-name "\*[doc-arg\n[doc-arg-ptr]]
+.
+.      nop \*[doc-Nm-font]\c
+.    \}
+.    doc-print-recursive
+.  \}
+..
+.
+.
+.\" NS Pa user macro
+.\" NS   pathname: '.Pa [arg ...]'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Pa' set in doc-common
+.
+.de Pa
+.  if !\n[doc-arg-limit] \{\
+.    ds doc-macro-name Pa
+.    doc-parse-args \$@
+.
+.    \" default value
+.    if !\n[.$] \
+.      nop \*[doc-Pa-font]~\f[]\s[0]
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    nop \*[doc-Pa-font]\c
+.    if !(\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      \" replace previous argument (Pa) with default value
+.      nr doc-arg-ptr -1
+.      ds doc-arg\n[doc-arg-ptr] ~
+.      nr doc-type\n[doc-arg-ptr] 2
+.      ds doc-space\n[doc-arg-ptr] "\*[doc-space]
+.
+.      \" recompute space vector for remaining arguments
+.      nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.      nr doc-arg-limit \n[doc-arg-ptr]
+.      doc-parse-space-vector
+.    \}
+.    doc-print-recursive
+.  \}
+.  el \{\
+.    nop \*[doc-Pa-font]~\f[]\s[0]\c
+.    doc-print-and-reset
+.  \}
+..
+.
+.
+.\" NS Sy user macro
+.\" NS   symbolics
+.\" NS
+.\" NS width register 'Sy' set in doc-common
+.
+.als Sy doc-generic-macro
+.ds doc-Sy-usage symbolic_text
+.
+.
+.\" NS Me user macro
+.\" NS   menu entries
+.\" NS
+.\" NS width register 'Me' set in doc-common
+.
+.als Me doc-generic-macro
+.ds doc-Me-usage menu_entry
+.
+.
+.\" NS Tn user macro
+.\" NS   trade name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Tn' set in doc-common
+.
+.de Tn
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Tn
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Tn trade_name ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    nop \)\*[doc-Tn-font-size]\c
+.    ie !\n[doc-is-reference] \{\
+.      nop \)\*[doc-Tn-font-shape]\c
+.      doc-print-recursive
+.    \}
+.    el \
+.      doc-do-references
+.  \}
+.  el \{\
+.    tm Usage: .Tn trade_name ... (#\n[.c])
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Va user macro
+.\" NS   variable name
+.\" NS
+.\" NS width register 'Va' set in doc-common
+.
+.als Va doc-generic-macro
+.ds doc-Va-usage variable_name
+.
+.
+.\" NS No user macro
+.\" NS   normal text macro (default text style if mess up)
+.\" NS
+.\" NS width register 'No' set in doc-common
+.
+.als No doc-generic-macro
+.ds doc-No-usage normal_text
+.
+.
+.\" NS doc-quote-left global string
+.\" NS   left quotation character for 'doc-enclose-string' and
+.\" NS   'doc-enclose-open'
+.
+.ds doc-quote-left
+.
+.
+.\" NS doc-quote-right global string
+.\" NS   right quotation character for 'doc-enclose-string' and
+.\" NS   'doc-enclose-close'
+.
+.ds doc-quote-right
+.
+.
+.\" NS Op user macro
+.\" NS   option expression (i.e., enclose string in square brackets)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Op' set in doc-common
+.
+.de Op
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Op
+.
+.  ds doc-quote-left "\*[doc-left-bracket]
+.  ds doc-quote-right "\*[doc-right-bracket]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Aq user macro
+.\" NS   enclose string in angle brackets
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Aq' set in doc-common
+.
+.de Aq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Aq
+.
+.  ie "\*[doc-macro-name]"An" \{\
+.    ds doc-quote-left <
+.    ds doc-quote-right >
+.  \}
+.  el \{\
+.    ds doc-quote-left \[la]
+.    ds doc-quote-right \[ra]
+.  \}
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Bq user macro
+.\" NS   enclose string in square brackets
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Bq' set in doc-common
+.
+.de Bq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Bq
+.
+.  ds doc-quote-left "\*[doc-left-bracket]
+.  ds doc-quote-right "\*[doc-right-bracket]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Brq user macro
+.\" NS   enclose string in braces
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Brq' set in doc-common
+.
+.de Brq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Brq
+.
+.  ds doc-quote-left {
+.  ds doc-quote-right }
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Dq user macro
+.\" NS   enclose string in double quotes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Dq' set in doc-common
+.
+.de Dq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Dq
+.
+.  ds doc-quote-left "\*[Lq]
+.  ds doc-quote-right "\*[Rq]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Eq user macro
+.\" NS   enclose string in user-defined quotes (args 1 and 2)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Eq' set in doc-common
+.
+.de Eq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Eq
+.
+.  ds doc-quote-left "\$1
+.  ds doc-quote-right "\$2
+.
+.  shift 2
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Pq user macro
+.\" NS   enclose string in parentheses
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Pq' set in doc-common
+.
+.de Pq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Pq
+.
+.  ds doc-quote-left "\*[doc-left-parenthesis]
+.  ds doc-quote-right "\*[doc-right-parenthesis]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Ql user macro
+.\" NS   quoted literal
+.\"
+.\"   is in file doc-[dit|n]roff
+.
+.
+.\" NS Qq user macro
+.\" NS   enclose string in straight double quotes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Qq' set in doc-common
+.
+.de Qq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Qq
+.
+.  ds doc-quote-left "\*[q]
+.  ds doc-quote-right "\*[q]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Sq user macro
+.\" NS   enclose string in single quotes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Sq' set in doc-common
+.
+.de Sq
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Sq
+.
+.  ds doc-quote-left "\*[doc-left-singlequote]
+.  ds doc-quote-right "\*[doc-right-singlequote]
+.
+.  doc-enclose-string \$@
+..
+.
+.
+.\" NS Es user macro
+.\" NS   set up arguments (i.e., the left and right quotation character
+.\" NS   as first and second argument) for .En call
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.
+.de Es
+.  if !\n[doc-arg-limit] \{\
+.    ie (\n[.$] > 2) \{\
+.      ds doc-macro-name Es
+.      doc-parse-args \$@
+.    \}
+.    el \{\
+.      ds doc-quote-left "\$1
+.      ds doc-quote-right "\$2
+.  \}\}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  ds doc-quote-left "\*[doc-arg\n[doc-arg-ptr]]
+.  nr doc-arg-ptr +1
+.  ds doc-quote-right "\*[doc-arg\n[doc-arg-ptr]]
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.    doc-do-\n[doc-type\n[doc-arg-ptr]]
+.  el \
+.    doc-print-and-reset
+..
+.
+.
+.\" NS doc-have-slot global register (bool)
+.\" NS   set if 'doc-enclose-string' has created a slot for closing
+.\" NS   delimiter
+.
+.nr doc-have-slot 0
+.
+.
+.\" NS doc-enclose-string macro
+.\" NS   enclose string with given args (e.g. [ and ])
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-have-slot
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-des
+.\" NS   doc-reg-des1
+.\" NS   doc-reg-des2
+.\" NS
+.\" NS requires:
+.\" NS   doc-quote-left
+.\" NS   doc-quote-right
+.
+.de doc-enclose-string
+.  if \n[doc-in-synopsis-section] \
+.    doc-set-hard-space
+.
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \
+.      doc-parse-args \$@
+.    el \{\
+.      nop \)\*[doc-quote-left]\*[doc-quote-right]
+.  \}\}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  \" the final '\)' prevents hyphenation in case next character is '\%'
+.  nop \)\*[doc-quote-left]\)\c
+.  ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    \" last argument
+.    nop \)\*[doc-quote-right]\)\c
+.    doc-print-and-reset
+.  \}
+.  el \{\
+.    \" test whether last arguments are of type closing punctuation
+.    \" resp. suffix
+.    ie (\n[doc-type\n[doc-arg-limit]] == 3) \{\
+.      nr doc-reg-des (\n[doc-arg-limit] - 1)
+.      while (\n[doc-type\n[doc-reg-des]] == 3) \
+.        nr doc-reg-des -1
+.
+.      \" prepend closing delimiter
+.      nr doc-reg-des +1
+.      ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
+.    \}
+.    el \{\
+.      \" test whether last arguments are macros which continue the line
+.      \" logically
+.      nr doc-reg-des \n[doc-arg-limit]
+.      while (\n[doc-reg-des] >= \n[doc-arg-ptr]) \{\
+.        if !\A\a\*[doc-arg\n[doc-reg-des]]\a \
+.          break
+.        if !d doc-after-\*[doc-arg\n[doc-reg-des]] \
+.          break
+.        nr doc-reg-des -1
+.      \}
+.
+.      \" if there are no trailing macros to be skipped, append argument
+.      ie (\n[doc-reg-des] == \n[doc-arg-limit]) \
+.        doc-append-arg "\)\*[doc-quote-right]\)" 3
+.      el \{\
+.        \" if a previous call to 'doc-enclose-string' has already
+.        \" created a slot, prepend argument
+.        ie \n[doc-have-slot] \
+.          ds doc-arg\n[doc-reg-des] "\*[doc-quote-right]\)\*[doc-arg\n[doc-reg-des]]
+.        el \{\
+.          \" we have to shift all arguments to the right
+.          nr doc-reg-des +1
+.          nr doc-reg-des1 \n[doc-arg-limit]
+.          nr doc-reg-des2 (\n[doc-arg-limit] + 1)
+.          while (\n[doc-reg-des1] >= \n[doc-reg-des]) \{\
+.            rn doc-arg\n[doc-reg-des1] doc-arg\n[doc-reg-des2]
+.            rnn doc-type\n[doc-reg-des1] doc-type\n[doc-reg-des2]
+.            rn doc-space\n[doc-reg-des1] doc-space\n[doc-reg-des2]
+.            nr doc-reg-des1 -1
+.            nr doc-reg-des2 -1
+.          \}
+.          nr doc-arg-limit +1
+.
+.          \" finally, insert closing delimiter into the freed slot and
+.          \" recompute spacing vector
+.          ds doc-arg\n[doc-reg-des] "\)\*[doc-quote-right]\)
+.          nr doc-type\n[doc-reg-des] 3
+.          nr doc-num-args (\n[doc-arg-limit] - \n[doc-reg-des] + 1)
+.          nr doc-arg-limit (\n[doc-reg-des] - 1)
+.          doc-parse-space-vector
+.          nr doc-have-slot 1
+.    \}\}\}
+.
+.    doc-do-\n[doc-type\n[doc-arg-ptr]]
+.  \}
+.
+.  if \n[doc-in-synopsis-section] \
+.    doc-set-soft-space
+..
+.
+.
+.\" NS En user macro
+.\" NS   enclose arguments with quotation characters set up with '.Es'
+.
+.als En doc-enclose-string
+.
+.
+.\" NS Ao user macro
+.\" NS   angle open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register 'Ao' set in doc-common
+.
+.de Ao
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Ao
+.
+.  ie "\*[doc-macro-name]"An" \
+.    ds doc-quote-left <
+.  el \
+.    ds doc-quote-left \[la]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Ac user macro
+.\" NS   angle close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Ac' set in doc-common
+.
+.de Ac
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Ac
+.
+.  ie "\*[doc-macro-name]"An" \
+.    ds doc-quote-right >
+.  el \
+.    ds doc-quote-right \[ra]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Bo user macro
+.\" NS   bracket open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register 'Bo' set in doc-common
+.
+.de Bo
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Bo
+.
+.  ds doc-quote-left "\*[doc-left-bracket]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Bc user macro
+.\" NS   bracket close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Bc' set in doc-common
+.
+.de Bc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Bc
+.
+.  ds doc-quote-right "\*[doc-right-bracket]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Bro user macro
+.\" NS   brace open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register 'Bro' set in doc-common
+.
+.de Bro
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Bo
+.
+.  ds doc-quote-left {
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Brc user macro
+.\" NS   brace close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Brc' set in doc-common
+.
+.de Brc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Bc
+.
+.  ds doc-quote-right }
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Do user macro
+.\" NS   double quote open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register 'Do' set in doc-common
+.
+.de Do
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Do
+.
+.  ds doc-quote-left "\*[Lq]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Dc user macro
+.\" NS   double quote close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Dc' set in doc-common
+.
+.de Dc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Dc
+.
+.  ds doc-quote-right "\*[Rq]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Eo user macro
+.\" NS   enclose open (using first argument as beginning of enclosure)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register 'Eo' set in doc-common
+.
+.de Eo
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Eo
+.
+.  ds doc-quote-left "\$1
+.
+.  shift
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Ec user macro
+.\" NS   enclose close (using first argument as end of enclosure)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Ec' set in doc-common
+.
+.de Ec
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Ec
+.
+.  ds doc-quote-right "\$1
+.
+.  shift
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Oo user macro
+.\" NS   option open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register 'Oo' set in doc-common
+.
+.de Oo
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Oo
+.
+.  ds doc-quote-left [
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Oc user macro
+.\" NS   option close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Oc' set in doc-common
+.
+.de Oc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Oc
+.
+.  ds doc-quote-right ]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Po user macro
+.\" NS   parenthesis open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register 'Po' set in doc-common
+.
+.de Po
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Po
+.
+.  ds doc-quote-left "\*[doc-left-parenthesis]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Pc user macro
+.\" NS   parenthesis close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Pc' set in doc-common
+.
+.de Pc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Pc
+.
+.  ds doc-quote-right "\*[doc-right-parenthesis]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Qo user macro
+.\" NS   straight double quote open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register 'Qo' set in doc-common
+.
+.de Qo
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Qo
+.
+.  ds doc-quote-left "\*[q]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Qc user macro
+.\" NS   straight double quote close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Qc' set in doc-common
+.
+.de Qc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Qc
+.
+.  ds doc-quote-right "\*[q]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS So user macro
+.\" NS   single quote open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register 'So' set in doc-common
+.
+.de So
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name So
+.
+.  ds doc-quote-left "\*[doc-left-singlequote]
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Sc user macro
+.\" NS   single quote close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Sc' set in doc-common
+.
+.de Sc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Sc
+.
+.  ds doc-quote-right "\*[doc-right-singlequote]
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS Xo user macro
+.\" NS   extend open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register 'Xo' set in doc-common
+.
+.de Xo
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Xo
+.
+.  ds doc-quote-left
+.
+.  doc-enclose-open \$@
+..
+.
+.
+.\" NS Xc user macro
+.\" NS   extend close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS   doc-quote-right
+.\" NS
+.\" NS width register 'Xc' set in doc-common
+.
+.de Xc
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Xc
+.
+.  ds doc-quote-right
+.
+.  doc-enclose-close \$@
+..
+.
+.
+.\" NS doc-nesting-level global register
+.\" NS   used by 'doc-enclose-open' and 'doc-enclose-close'
+.
+.nr doc-nesting-level 0
+.
+.
+.\" NS doc-in-list global register (bool)
+.\" NS   whether we are in (logical) .It
+.
+.nr doc-in-list 0
+.
+.
+.\" NS doc-enclose-open macro
+.\" NS   enclose string open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-nesting-level
+.
+.de doc-enclose-open
+.  if !\n[doc-arg-limit] \
+.    doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  nr doc-arg-ptr -1
+.
+.  nop \)\*[doc-quote-left]\)\c
+.
+.  \" start enclosure box
+.  box doc-enclosure-box\n[doc-nesting-level]
+.  ev doc-enclosure-env\n[doc-nesting-level]
+.  evc 0
+.  in 0
+.  nf
+.  \" we insert something to make .chop always work
+.  nop \&\c
+.
+.  \" increase nesting level *after* parsing of arguments
+.  nr doc-nesting-level +1
+.
+.  if \n[doc-arg-limit] \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.      doc-print-recursive
+.    el \
+.      doc-reset-args
+.  \}
+..
+.
+.
+.\" NS doc-enclose-close macro
+.\" NS   enclose string close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-nesting-level
+.
+.de doc-enclose-close
+.  nr doc-nesting-level -1
+.
+.  \" finish enclosure box
+.  br
+.  ev
+.  box
+.  chop doc-enclosure-box\n[doc-nesting-level]
+.  unformat doc-enclosure-box\n[doc-nesting-level]
+.
+.  nh
+.  nop \*[doc-enclosure-box\n[doc-nesting-level]]\c
+.  nop \)\*[doc-quote-right]\)\c
+.
+.  if !\n[doc-arg-limit] \{\
+.    doc-parse-args \$@
+.
+.    if !\n[.$] \
+.      doc-print-and-reset
+.  \}
+.
+.  if \n[doc-arg-limit] \{\
+.    ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.      nop \)\*[doc-space\n[doc-arg-ptr]]\c
+.      nr doc-arg-ptr +1
+.      doc-print-recursive
+.    \}
+.    el \
+.      doc-print-and-reset
+.  \}
+.
+.  \" shall we finish .It macro?
+.  if !"\*[doc-macro-name]"It" \
+.    if \n[doc-in-list] \
+.      if !\n[doc-nesting-level] \
+.        doc-\*[doc-list-type-stack\n[doc-list-depth]]
+..
+.
+.
+.\" NS Pf user macro
+.\" NS   prefix: '.Pf prefix arg ...'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-macro-name
+.\" NS   doc-quote-left
+.\" NS
+.\" NS width register 'Pf' set in doc-common
+.
+.de Pf
+.  if !\n[doc-arg-limit] \
+.    ds doc-macro-name Pf
+.
+.  ie \n[doc-arg-limit] \{\
+.    ie ((\n[doc-arg-limit] - \n[doc-arg-ptr]) > 1) \{\
+.      nr doc-arg-ptr +1
+.      nop \)\*[doc-arg\n[doc-arg-ptr]]\c
+.    \}
+.    el \
+.      tm mdoc warning: .Pf: trailing prefix (#\n[.c])
+.  \}
+.  el \{\
+.    nop \)\$1\)\c
+.    shift
+.    ie \n[.$] \
+.      doc-parse-args \$@
+.    el \{\
+.      tm mdoc warning: .Pf: missing arguments (#\n[.c])
+.      nop \)
+.  \}\}
+.
+.  if \n[doc-arg-limit] \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
+.      doc-print-and-reset
+.    el \
+.      doc-do-\n[doc-type\n[doc-arg-ptr]]
+.  \}
+..
+.
+.
+.\" NS Ns user macro
+.\" NS   remove space (space removal done by 'doc-parse-args')
+.\" NS
+.\" NS modifies:
+.\" NS   doc-argXXX
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Ns' set in doc-common
+.
+.de Ns
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Ns
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Ns must be called with arguments (#\n[.c])
+.  \}
+.
+.  if \n[doc-arg-limit] \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.      doc-print-recursive
+.    el \
+.      doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Ap user macro
+.\" NS   append an apostrophe
+.\" NS
+.\" NS width register 'Ap' set in doc-common
+.
+.de Ap
+.  ie !\n[doc-arg-limit] \
+.    tm Usage: 'Ap' cannot be first macro on a line (no '.Ap') (#\n[.c])
+.  el \{\
+.    nop \)'\)\c
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.      doc-print-recursive
+.    el \
+.      doc-reset-args
+.  \}
+..
+.
+.
+.\" NS doc-space global string
+.\" NS   current inter-argument space
+.
+.ds doc-space "\*[doc-soft-space]
+.
+.
+.\" NS doc-soft-space constant string
+.\" NS   soft (stretchable) space (defined in doc-common)
+.
+.
+.\" NS doc-hard-space constant string
+.\" NS   hard (unpaddable) space (defined in doc-common)
+.
+.
+.\" NS doc-set-hard-space macro
+.\" NS   set current space string to hard (unpaddable) space.
+.\" NS
+.\" NS modifies:
+.\" NS   doc-saved-space
+.\" NS   doc-space
+.
+.de doc-set-hard-space
+.  ie "\*[doc-space]"" \
+.    ds doc-saved-space "\*[doc-hard-space]
+.  el \
+.    ds doc-space "\*[doc-hard-space]
+..
+.
+.
+.\" NS doc-set-soft-space macro
+.\" NS   set current space string to soft space
+.\" NS
+.\" NS modifies:
+.\" NS   doc-saved-space
+.\" NS   doc-space
+.
+.de doc-set-soft-space
+.  ie "\*[doc-space]"" \
+.    ds doc-saved-space "\*[doc-soft-space]
+.  el \
+.    ds doc-space "\*[doc-soft-space]
+..
+.
+.
+.\" NS doc-space-mode global register (bool)
+.\" NS   default is one (space mode on)
+.
+.nr doc-space-mode 1
+.
+.
+.\" NS doc-saved-space global string
+.\" NS   saved value of 'doc-space'
+.
+.ds doc-saved-space "\*[doc-space]
+.
+.
+.\" NS doc-have-space global register (bool)
+.\" NS   set if last command was horizontal space
+.
+.nr doc-have-space 0
+.
+.
+.\" NS Sm user macro
+.\" NS   space mode ('.Sm'/'.Sm on'/'.Sm off')
+.\" NS
+.\" NS   without argument, toggle space mode
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-limit
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-macro-name
+.\" NS   doc-num-args
+.\" NS   doc-saved-space
+.\" NS   doc-space
+.\" NS   doc-space-mode
+.\" NS   doc-spaceXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Sm
+.\" NS
+.\" NS width register 'Sm' set in doc-common
+.
+.de Sm
+.  ie \n[doc-have-space] \
+.    nr doc-reg-Sm 0
+.  el \
+.    nr doc-reg-Sm 1
+.
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Sm
+.      doc-parse-args \$@
+.    \}
+.    el \{\
+.      ie \n[doc-space-mode] \{\
+.        ds doc-saved-space "\*[doc-space]
+.        ds doc-space
+.        nr doc-space-mode 0
+.      \}
+.      el \{\
+.        ds doc-space "\*[doc-saved-space]
+.        nr doc-space-mode 1
+.
+.        \" finish line only if it is interrupted and 'doc-have-space'
+.        \" isn't set
+.        if \n[doc-reg-Sm] \
+.          if \n[.int] \
+.            nop \)
+.      \}
+.  \}\}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.
+.  \" avoid a warning message in case 'Sm' is the last parameter
+.  if !d doc-arg\n[doc-arg-ptr] \
+.    ds doc-arg\n[doc-arg-ptr]
+.
+.  ie "\*[doc-arg\n[doc-arg-ptr]]"on" \{\
+.    ds doc-space "\*[doc-saved-space]
+.    nr doc-space-mode 1
+.  \}
+.  el \{\
+.    ie "\*[doc-arg\n[doc-arg-ptr]]"off" \{\
+.      ds doc-saved-space "\*[doc-space]
+.      ds doc-space
+.      nr doc-space-mode 0
+.    \}
+.    el \{\
+.      \" no argument for Sm
+.      nr doc-arg-ptr -1
+.      ie \n[doc-space-mode] \{\
+.        ds doc-saved-space "\*[doc-space]
+.        ds doc-space
+.        nr doc-space-mode 0
+.      \}
+.      el \{\
+.        ds doc-space "\*[doc-saved-space]
+.        nr doc-space-mode 1
+.      \}
+.  \}\}
+.
+.  ie \n[doc-space-mode] \{\
+.    \" recompute space vector for remaining arguments
+.    nr doc-num-args (\n[doc-arg-limit] - \n[doc-arg-ptr])
+.    nr doc-arg-limit \n[doc-arg-ptr]
+.    if \n[doc-num-args] \
+.      doc-parse-space-vector
+.
+.    \" finish line only if it is interrupted and 'doc-have-space'
+.    \" isn't set
+.    if \n[doc-reg-Sm] \
+.      if \n[.int] \
+.        nop \)
+.  \}
+.  el \{\
+.    \" reset remaining space vector elements
+.    nr doc-reg-Sm (\n[doc-arg-ptr] + 1)
+.    while (\n[doc-reg-Sm] <= \n[doc-arg-limit]) \{\
+.      ds doc-space\n[doc-reg-Sm]
+.      nr doc-reg-Sm +1
+.      \" the body of a 'while' request must end with the fitting '\}'!
+.    \}
+.  \}
+.
+.  \" do we have parameters to print?
+.  ie (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.    \" skip 'Sm' argument
+.    nr doc-arg-ptr +1
+.    doc-print-recursive
+.  \}
+.  el \
+.    doc-reset-args
+..
+.
+.
+.\" NS doc-arg-type immediate register
+.\" NS   argument type (macro=1, string=2, punctuation suffix=3,
+.\" NS   punctuation prefix=4)
+.
+.nr doc-arg-type 0
+.
+.
+.\" NS doc-get-arg-type macro
+.\" NS   get argument type
+.\" NS
+.\" NS   this macro expects the width of the argument in 'doc-width'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-type
+.
+.de doc-get-arg-type
+.  nr doc-arg-type 2
+.
+.  if ((\n[doc-width] < 4) & \A\a\$1\a) \{\
+.    ie (\n[doc-width] == 1) \{\
+.      if r doc-punct\$1 \
+.        nr doc-arg-type \n[doc-punct\$1]
+.    \}
+.    el \
+.      if r \$1 \
+.        if d \$1 \
+.          nr doc-arg-type 1
+.  \}
+..
+.
+.
+.\" NS doc-get-arg-type* macro
+.\" NS   similar to as 'doc-get-arg-type' but uses doc-argXXX strings
+.\" NS
+.\" NS   this macro sets the 'doc-width' register using the 'length'
+.\" NS   request to get the number of characters in a string literally
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-type
+.\" NS   doc-width
+.
+.de doc-get-arg-type*
+.  nr doc-arg-type 2
+.  length doc-width "\*[doc-arg\$1]
+.
+.  if ((\n[doc-width] < 4) & \A\a\*[doc-arg\$1]\a) \{\
+.    ie (\n[doc-width] == 1) \{\
+.      if r doc-punct\*[doc-arg\$1] \
+.        nr doc-arg-type \n[doc-punct\*[doc-arg\$1]]
+.    \}
+.    el \
+.      if r \*[doc-arg\$1] \
+.        if d \*[doc-arg\$1] \
+.          nr doc-arg-type 1
+.  \}
+..
+.
+.
+.\" NS doc-set-spacing-1 macro
+.\" NS   set spacing for macros
+.\" NS
+.\" NS modifies:
+.\" NS   doc-spaceXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dssfm
+.\" NS   doc-reg-dssfm1
+.
+.de doc-set-spacing-1
+.  nr doc-reg-dssfm1 \n[\*[doc-arg\n[doc-arg-limit]]]
+.
+.  \" closing macros like .Ac, Bc., etc. have value 3 (remove space
+.  \" before argument)
+.  ie (\n[doc-reg-dssfm1] == 3) \{\
+.    if \n[doc-arg-limit] \{\
+.      nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
+.      ds doc-space\n[doc-reg-dssfm]
+.    \}
+.    ds doc-space\n[doc-arg-limit] "\*[doc-space]
+.  \}
+.  el \{\
+.    \" macros like .Ap and .Ns have value 2 (remove space before and
+.    \" after argument)
+.    ie (\n[doc-reg-dssfm1] == 2) \{\
+.      if \n[doc-arg-limit] \{\
+.        nr doc-reg-dssfm (\n[doc-arg-limit] - 1)
+.        ds doc-space\n[doc-reg-dssfm]
+.      \}
+.      ds doc-space\n[doc-arg-limit]
+.    \}
+.    el \
+.      ds doc-space\n[doc-arg-limit]
+.  \}
+..
+.
+.
+.\" NS doc-set-spacing-2 macro
+.\" NS   set spacing for strings
+.\" NS
+.\" NS modifies:
+.\" NS   doc-spaceXXX
+.
+.de doc-set-spacing-2
+.  ds doc-space\n[doc-arg-limit] "\*[doc-space]
+..
+.
+.
+.\" NS doc-set-spacing-3 macro
+.\" NS   set spacing for punctuation suffixes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-spaceXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dssfps
+.
+.de doc-set-spacing-3
+.  if \n[doc-arg-limit] \{\
+.    nr doc-reg-dssfps (\n[doc-arg-limit] - 1)
+.    ds doc-space\n[doc-reg-dssfps]
+.  \}
+.
+.  ds doc-space\n[doc-arg-limit] "\*[doc-space]
+..
+.
+.
+.\" NS doc-set-spacing-4 macro
+.\" NS   set spacing for punctuation prefixes
+.\" NS
+.\" NS modifies:
+.\" NS   doc-spaceXXX
+.
+.de doc-set-spacing-4
+.  ds doc-space\n[doc-arg-limit]
+..
+.
+.
+.\" type switches (on current argument doc-arg-ptr)
+.
+.
+.\" NS doc-do-1 macro
+.\" NS   call request if macro
+.
+.de doc-do-1
+.  \*[doc-arg\n[doc-arg-ptr]]
+..
+.
+.
+.\" NS doc-do-2 macro
+.\" NS   call .doc-print-recursive if string
+.
+.als doc-do-2 doc-print-recursive
+.
+.
+.\" NS doc-do-3 macro
+.\" NS   call .doc-print-recursive if punctuation suffix
+.
+.als doc-do-3 doc-print-recursive
+.
+.
+.\" NS doc-do-4 macro
+.\" NS   call .doc-print-recursive if punctuation prefix
+.
+.als doc-do-4 doc-print-recursive
+.
+.
+.\" NS doc-fontmode-depth global register
+.\" NS   font mode level
+.
+.nr doc-fontmode-depth 0
+.
+.
+.\" NS doc-fontmode-font-stackXXX global register
+.\" NS   stack of saved current font values from 'Bf' macro
+.\" NS
+.\" NS limit:
+.\" NS   doc-fontmode-depth
+.
+.nr doc-fontmode-font-stack0 0
+.
+.
+.\" NS doc-fontmode-size-stackXXX global register
+.\" NS   stack of saved current size values from 'Bf' macro
+.\" NS
+.\" NS limit:
+.\" NS   doc-fontmode-depth
+.
+.nr doc-fontmode-size-stack0 0
+.
+.
+.\" NS Bf user macro
+.\" NS   begin font mode (will be begin-mode/end-mode in groff & TeX)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-fontmode-depth
+.\" NS   doc-fontmode-font-stackXXX
+.\" NS   doc-fontmode-size-stackXXX
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Bf' set in doc-common
+.
+.de Bf
+.  ds doc-macro-name Bf
+.
+.  ie \n[.$] \{\
+.    nr doc-fontmode-depth +1
+.
+.    \" save current font and size
+.    nr doc-fontmode-font-stack\n[doc-fontmode-depth] \n[.f]
+.    nr doc-fontmode-size-stack\n[doc-fontmode-depth] \n[.ps]
+.
+.    ie        "\$1"Em" \
+.      nop \*[doc-Em-font]\c
+.    el \{ .ie "\$1"Li" \
+.      nop \*[doc-Li-font]\c
+.    el \{ .ie "\$1"Sy" \
+.      nop \*[doc-Sy-font]\c
+.    el \{ .ie "\$1"-emphasis" \
+.      nop \*[doc-Em-font]\c
+.    el \{ .ie "\$1"-literal" \
+.      nop \*[doc-Li-font]\c
+.    el \{ .ie "\$1"-symbolic" \
+.      nop \*[doc-Sy-font]\c
+.    el \{\
+.      tmc mdoc warning: Unknown keyword '\$1' in .Bf macro
+.      tm1 " (#\n[.c])
+.  \}\}\}\}\}\}\}
+.  el \
+.    tm Usage: .Bf [Em | -emphasis | Li | -literal | Sy | -symbolic] (#\n[.c])
+..
+.
+.
+.\" NS Ef user macro
+.\" NS   end font mode
+.\" NS
+.\" NS modifies:
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Ef' set in doc-common
+.
+.de Ef
+.  ds doc-macro-name Ef
+.
+.  ie \n[doc-fontmode-depth] \{\
+.    \" restore saved font and size
+.    nop \)\f[\n[doc-fontmode-font-stack\n[doc-fontmode-depth]]]\c
+.    nop \)\s[\n[doc-fontmode-size-stack\n[doc-fontmode-depth]]u]\c
+.
+.    nr doc-fontmode-font-stack\n[doc-fontmode-depth] 0
+.    nr doc-curr-font \n[.f]
+.    nr doc-fontmode-size-stack\n[doc-fontmode-depth] 0
+.    nr doc-curr-size \n[.ps]
+.    nr doc-fontmode-depth -1
+.  \}
+.  el \
+.    tm mdoc warning: Extraneous .Ef (#\n[.c])
+..
+.
+.
+.\" NS doc-keep-type global register
+.\" NS   current keep type; 1 is '-words', 2 is '-lines', 3 is unknown
+.
+.nr doc-keep-type 0
+.
+.
+.\" NS Bk user macro
+.\" NS   begin keep
+.\" NS
+.\" NS modifies:
+.\" NS   doc-keep-type
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Bk' set in doc-common
+.
+.de Bk
+.  ds doc-macro-name Bk
+.
+.  if \n[doc-keep-type] \
+.    tm .Bk: nesting keeps not implemented yet. (#\n[.c])
+.
+.  ie        "\$1"-lines" \{\
+.    nr doc-keep-type 2
+.    tm .Bk -lines: Not implemented yet. (#\n[.c])
+.  \}
+.  el \{ .ie "\$1"-words" \{\
+.    nr doc-keep-type 1
+.    doc-set-hard-space
+.  \}
+.  el \{ .ie "\$1"" \{\
+.    \" default
+.    nr doc-keep-type 1
+.    doc-set-hard-space
+.  \}
+.  el \{\
+.    tm mdoc warning: Unknown keyword '\$1' in .Bk macro (#\n[.c])
+.    nr doc-keep-type 3
+.  \}\}\}
+.
+\#.  nr doc-nesting-level +1
+..
+.
+.
+.\" NS Ek user macro
+.\" NS   end keep
+.\" NS
+.\" NS modifies:
+.\" NS   doc-keep-type
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Ek' set in doc-common
+.
+.de Ek
+.  ds doc-macro-name Ek
+.
+\#.  nr doc-nesting-level -1
+.
+.  ie \n[.$] \
+.    tm Usage: .Ek (does not take arguments) (#\n[.c])
+.  el \{\
+.    if !\n[doc-keep-type] \
+.      tm mdoc warning: .Ek found without .Bk before (#\n[.c])
+.
+.    ie        (\n[doc-keep-type] == 1) \
+.      doc-set-soft-space
+.    el \{ .if (\n[doc-keep-type] == 2) \
+.      tm .Bk -lines: Not implemented yet. (#\n[.c])
+.  \}\}
+.
+.  nr doc-keep-type 0
+.
+\#.  if !"\*[doc-out-string]"" \
+\#.    doc-print-out-string
+..
+.
+.
+.\" NS doc-display-depth global register
+.\" NS   display level
+.
+.nr doc-display-depth 0
+.
+.
+.\" NS doc-is-compact global register (bool)
+.\" NS   set if the 'compact' keyword is given
+.
+.nr doc-is-compact 0
+.
+.
+.\" NS doc-display-type-stackXXX global string
+.\" NS   the display type stack
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.ds doc-display-type-stack0
+.
+.
+.\" NS doc-display-indent-stackXXX global register
+.\" NS   stack of display indentation values
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.nr doc-display-indent-stack0 0
+.
+.
+.\" NS doc-display-ad-stackXXX global register
+.\" NS   stack of saved adjustment modes
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.nr doc-display-ad-stack0 0
+.
+.
+.\" NS doc-display-fi-stackXXX global register
+.\" NS   stack of saved fill modes
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.nr doc-display-fi-stack0 0
+.
+.
+.\" NS doc-display-ft-stackXXX global register
+.\" NS   stack of saved fonts
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.nr doc-display-ft-stack0 0
+.
+.
+.\" NS doc-display-ps-stackXXX global register
+.\" NS   stack of saved font sizes
+.\" NS
+.\" NS limit:
+.\" NS   doc-display-depth
+.
+.nr doc-display-ps-stack0 0
+.
+.
+.\" NS Bd user macro
+.\" NS   begin display
+.\" NS
+.\" NS width register 'Bd' set in doc-common
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-display-depth
+.\" NS   doc-display-ad-stackXXX
+.\" NS   doc-display-fi-stackXXX
+.\" NS   doc-display-ft-stackXXX
+.\" NS   doc-display-ps-stackXXX
+.\" NS   doc-display-file
+.\" NS   doc-display-indent-stackXXX
+.\" NS   doc-display-type-stackXXX
+.\" NS   doc-is-compact
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Bd
+.
+.de Bd
+.  ds doc-macro-name Bd
+.
+.  if !\n[.$] \{\
+.    tm1 "Usage: .Bd {-literal | -filled | -ragged | -centered | -unfilled}
+.    tm1 "           [-offset [string]] [-compact] [-file name] (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-is-compact 0
+.  ds doc-display-file
+.  nr doc-reg-Bd 1
+.  nr doc-display-depth +1
+.
+.  \" save current adjustment and fill modes
+.  nr doc-display-ad-stack\n[doc-display-depth] \n[.j]
+.  nr doc-display-fi-stack\n[doc-display-depth] \n[.u]
+.
+.  ie        "\$1"-literal" \{\
+.    ds doc-display-type-stack\n[doc-display-depth] literal
+.    nr doc-display-ft-stack\n[doc-display-depth] \n[.f]
+.    nr doc-display-ps-stack\n[doc-display-depth] \n[.ps]
+.
+.    ie t \
+.      ta T 9n
+.    el \
+.      ta T 8n
+.    nf
+.  \}
+.  el \{ .ie "\$1"-filled" \{\
+.    ds doc-display-type-stack\n[doc-display-depth] filled
+.    ad b
+.    fi
+.  \}
+.  el \{ .ie "\$1"-ragged" \{\
+.    ds doc-display-type-stack\n[doc-display-depth] ragged
+.    na
+.    fi
+.  \}
+.  el \{ .ie "\$1"-centered" \{\
+.    ds doc-display-type-stack\n[doc-display-depth] centered
+.    ad c
+.    fi
+.  \}
+.  el \{ .ie "\$1"-unfilled" \{\
+.    ds doc-display-type-stack\n[doc-display-depth] unfilled
+.    nf
+.  \}
+.  el \{\
+.    tm1 "mdoc warning: Unknown keyword '\$1' (or missing display type)
+.    tm1 "              in .Bd macro (#\n[.c])
+.    nr doc-reg-Bd 0
+.  \}\}\}\}\}
+.
+.  \" have we seen an argument?
+.  if \n[doc-reg-Bd] \{\
+.    shift
+.    \" check other arguments
+.    if \n[.$] \
+.      doc-do-Bd-args \$@
+.  \}
+.
+.  \" avoid warning about non-existent register
+.  if !r doc-display-indent-stack\n[doc-display-depth] \
+.    nr doc-display-indent-stack\n[doc-display-depth] 0
+.
+.  if \n[doc-display-indent-stack\n[doc-display-depth]] \
+.    in +\n[doc-display-indent-stack\n[doc-display-depth]]u
+.
+.  if !\n[doc-is-compact] \
+.    sp \n[doc-display-vertical]u
+.
+.  if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \
+.    if t \
+.      nop \*[doc-Li-font]\c
+.
+.  if !\n[cR] \
+.    ne 2v
+.
+.  if !"\*[doc-display-file]"" \
+.    so \*[doc-display-file]
+.
+.  nr doc-is-compact 0
+.  ds doc-display-file
+..
+.
+.
+.\" NS doc-do-Bd-args macro
+.\" NS   resolve remaining .Bd arguments
+.\" NS
+.\" NS modifies:
+.\" NS   doc-display-file
+.\" NS   doc-display-indent-stackXXX
+.\" NS   doc-is-compact
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-ddBa
+.\" NS   doc-reg-ddBa1
+.\" NS   doc-reg-ddBa2
+.\" NS   doc-reg-ddBa3
+.\" NS   doc-reg-ddBa4
+.\" NS   doc-str-ddBa
+.
+.de doc-do-Bd-args
+.  nr doc-reg-ddBa 1
+.
+.  ie        "\$1"-offset" \{\
+.    nr doc-reg-ddBa 2
+.
+.    ie        "\$2"left" \
+.      nr doc-display-indent-stack\n[doc-display-depth] 0
+.    el \{ .ie "\$2"right" \
+.      nr doc-display-indent-stack\n[doc-display-depth] (\n[.l]u / 3u)
+.    el \{ .ie "\$2"center" \
+.      nr doc-display-indent-stack\n[doc-display-depth] ((\n[.l]u - \n[.i]u) / 4u)
+.    el \{ .ie "\$2"indent" \
+.      nr doc-display-indent-stack\n[doc-display-depth] \n[doc-display-indent]u
+.    el \{ .ie "\$2"indent-two" \
+.      nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-display-indent]u + \n[doc-display-indent]u)
+.    el \
+.      nr doc-reg-ddBa 1
+.    \}\}\}\}
+.
+.    \" not a known keyword
+.    if (\n[doc-reg-ddBa] == 1) \{\
+.      nr doc-reg-ddBa 2
+.
+.      nr doc-reg-ddBa1 0
+.      if \B\a(\$2)\a \{\
+.        \" disable warnings related to scaling indicators (32)
+.        nr doc-reg-ddBa2 \n[.warn]
+.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
+.
+.        \" values without a scaling indicator are taken as strings;
+.        \" we test whether the parameter string with and without the
+.        \" last character yields identical numerical results (ignoring
+.        \" the scaling indicator)
+.        ds doc-str-ddBa "\$2
+.        substring doc-str-ddBa 0 -2
+.        if \B\a(\*[doc-str-ddBa])\a \{\
+.          nr doc-reg-ddBa3 (;(\$2))
+.          nr doc-reg-ddBa4 (\*[doc-str-ddBa])
+.          if (\n[doc-reg-ddBa3] == \n[doc-reg-ddBa4]) \
+.            nr doc-reg-ddBa1 1
+.        \}
+.
+.        \" enable all warnings again
+.        warn \n[doc-reg-ddBa2]
+.      \}
+.
+.      ie \n[doc-reg-ddBa1] \
+.        nr doc-display-indent-stack\n[doc-display-depth] \$2
+.      el \{\
+.        doc-get-width "\$2"
+.        ie (\n[doc-width] <= 3) \{\
+.          \" if the offset parameter is a macro, use the macro's
+.          \" width as specified in doc-common
+.          doc-get-arg-type "\$2"
+.          ie (\n[doc-arg-type] == 1) \
+.            nr doc-display-indent-stack\n[doc-display-depth] \n[\$2]
+.          el \
+.            nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.        \}
+.        el \
+.          nr doc-display-indent-stack\n[doc-display-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.    \}\}
+.  \}
+.  el \{ .ie "\$1"-compact" \
+.    nr doc-is-compact 1
+.  el \{ .ie "\$1"-file" \{\
+.    ie !"\$2"" \{\
+.      ds doc-display-file "\$2
+.      nr doc-reg-ddBa 2
+.    \}
+.    el \
+.      tm mdoc warning: .Bd '-file' keyword requires argument (#\n[.c])
+.  \}
+.  el \
+.      tm mdoc warning: Unknown keyword '\$1' in .Bd macro (#\n[.c])
+.  \}\}
+.
+.  if (\n[doc-reg-ddBa] < \n[.$]) \{\
+.    shift \n[doc-reg-ddBa]
+.    doc-do-Bd-args \$@
+.  \}
+..
+.
+.
+.\" NS Ed user macro
+.\" NS   end display
+.\" NS
+.\" NS modifies:
+.\" NS   doc-display-depth
+.\" NS   doc-display-indent-stackXXX
+.\" NS   doc-display-type-stackXXX
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Ed' set in doc-common
+.
+.de Ed
+.  ds doc-macro-name Ed
+.
+.  br
+.
+.  if !\n[doc-display-depth] \{\
+.    tm mdoc warning: Extraneous .Ed (#\n[.c])
+.    nr doc-display-depth 1
+.  \}
+.
+.  if "\*[doc-display-type-stack\n[doc-display-depth]]"literal" \{\
+.    ft \n[doc-display-ft-stack\n[doc-display-depth]]
+.    ps \n[doc-display-ps-stack\n[doc-display-depth]]u
+.  \}
+.
+.  in -\n[doc-display-indent-stack\n[doc-display-depth]]u
+.
+.  \" restore saved adjustment and fill modes
+.  ie \n[doc-display-fi-stack\n[doc-display-depth]] \
+.    fi
+.  el \
+.    nf
+.  ad \n[doc-display-ad-stack\n[doc-display-depth]]
+.
+.  nr doc-display-indent-stack\n[doc-display-depth] 0
+.  ds doc-display-type-stack\n[doc-display-depth]
+.  nr doc-display-depth -1
+..
+.
+.
+.\" NS doc-list-type-stackXXX global string
+.\" NS   stack of list types
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.ds doc-list-type-stack1
+.
+.
+.\" NS doc-list-indent-stackXXX global register
+.\" NS   stack of list indentation values
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.nr doc-list-indent-stack1 0
+.
+.
+.\" NS doc-list-have-indent-stackXXX global register (bool)
+.\" NS   an indentation value is active
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.nr doc-list-have-indent-stack1 0
+.
+.
+.\" NS Bl user macro
+.\" NS   begin list
+.\" NS
+.\" NS width register 'Bl' set in doc-common
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-list-depth
+.\" NS   doc-list-have-indent-stackXXX
+.\" NS   doc-list-indent-stackXXX
+.\" NS   doc-list-type-stackXXX
+.\" NS   doc-macro-name
+.\" NS   doc-num-args
+.\" NS   doc-num-columns
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Bl
+.
+.de Bl
+.  if !\n[.$] \{\
+.    doc-Bl-usage
+.    return
+.  \}
+.
+.  ds doc-macro-name Bl
+.  nr doc-list-depth +1
+.  nr doc-arg-ptr 1
+.
+.  ie        "\$1"-hang" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] hang-list
+.    nr doc-list-indent-stack\n[doc-list-depth] 6n
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-tag" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] tag-list
+.    nr doc-list-indent-stack\n[doc-list-depth] 6n
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-item" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] item-list
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-enum" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] enum-list
+.    nr doc-list-indent-stack\n[doc-list-depth] 3n
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-bullet" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] bullet-list
+.    nr doc-list-indent-stack\n[doc-list-depth] 2n
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-dash" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] dash-list
+.    nr doc-list-indent-stack\n[doc-list-depth] 2n
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-hyphen" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] dash-list
+.    nr doc-list-indent-stack\n[doc-list-depth] 2n
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-inset" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] inset-list
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-diag" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] diag-list
+.  \}
+.  el \{ .ie "\$1"-ohang" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] ohang-list
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 1
+.  \}
+.  el \{ .ie "\$1"-column" \{\
+.    ds doc-list-type-stack\n[doc-list-depth] column-list
+.    linetabs 1
+.  \}
+.  el \{\
+.    tm1 "mdoc warning: Unknown list type '\$1' (or missing list type)
+.    tm1 "              in .Bl macro
+.    tm
+.    nr doc-arg-ptr 0
+.  \}\}\}\}\}\}\}\}\}\}\}
+.
+.  \" we have seen a list type
+.  if !\n[doc-arg-ptr] \{\
+.    doc-Bl-usage
+.    doc-reset-args
+.    nr doc-list-depth -1
+.    return
+.  \}
+.
+.  shift
+.
+.  \" fill argument vector
+.  nr doc-reg-Bl 1
+.  while (\n[doc-reg-Bl] <= \n[.$]) \{\
+.    ds doc-arg\n[doc-reg-Bl] "\$[\n[doc-reg-Bl]]
+.    \" dummy type and space so that doc-save-global-vars() doesn't warn
+.    nr doc-type\n[doc-reg-Bl] 0
+.    ds doc-space\n[doc-reg-Bl]
+.    nr doc-reg-Bl +1
+.  \}
+.
+.  doc-increment-list-stack
+.
+.  if \n[.$] \{\
+.    nr doc-arg-limit \n[.$]
+.    nr doc-arg-ptr 0
+.    doc-do-Bl-args
+.
+.    in +\n[doc-list-offset-stack\n[doc-list-depth]]u
+.
+.    \" initialize column list
+.    if "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
+.      doc-set-column-tab \n[doc-num-columns]
+'      in -\n[doc-column-indent-width]u
+.      if !\n[doc-compact-list-stack\n[doc-list-depth]] \
+.        sp \n[doc-display-vertical]u
+.
+.      nf
+.      nr doc-num-columns 0
+.  \}\}
+.
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-Bl-usage macro
+.
+.de doc-Bl-usage
+.  tm1 "Usage: .Bl {-hang | -ohang | -tag | -diag | -inset}
+.  tm1 "             [-width <string>]
+.  tm1 "             [-offset <string>] [-compact]
+.  tm1 "       .Bl -column [-offset <string>] <string1> <string2> ...
+.  tm1 "       .Bl {-item | -enum [-nested] | -bullet | -hyphen | -dash}
+.  tm1 "             [-offset <string>] [-compact] (#\n[.c])
+..
+.
+.
+.\" NS doc-do-Bl-args macro
+.\" NS   resolve remaining .Bl arguments
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-compact-list-stackXXX
+.\" NS   doc-list-indent-stackXXX
+.\" NS   doc-list-offset-stackXXX
+.\" NS   doc-num-columns
+.\" NS   doc-tag-prefix-stackXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-box-dBla
+.\" NS   doc-env-dBla
+.\" NS   doc-reg-dBla
+.\" NS   doc-reg-dBla1
+.\" NS   doc-reg-dBla2
+.\" NS   doc-reg-dBla3
+.\" NS   doc-reg-dBla4
+.\" NS   doc-str-dBla
+.\" NS   doc-str-dBla1
+.
+.de doc-do-Bl-args
+.  nr doc-arg-ptr +1
+.
+.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \
+.    return
+.
+.  \" avoid a warning message in case e.g. '-offset' has no parameter
+.  nr doc-reg-dBla (\n[doc-arg-ptr] + 1)
+.  if (\n[doc-arg-limit] < \n[doc-reg-dBla]) \
+.    ds doc-arg\n[doc-reg-dBla]
+.
+.  nr doc-reg-dBla 1
+.
+.  ie        "\*[doc-arg\n[doc-arg-ptr]]"-compact" \
+.    nr doc-compact-list-stack\n[doc-list-depth] 1
+.
+.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-nested" \{\
+.    ie (\n[doc-list-depth] > 1) \{\
+.      nr doc-reg-dBla1 (\n[doc-list-depth] - 1)
+.      ds doc-tag-prefix-stack\n[doc-list-depth] "\*[doc-tag-prefix-stack\n[doc-reg-dBla1]]
+.      as doc-tag-prefix-stack\n[doc-list-depth] \n[doc-enum-list-count-stack\n[doc-reg-dBla1]].
+.      length doc-reg-dBla1 "\*[doc-tag-prefix-stack\n[doc-list-depth]]
+.      nr doc-list-indent-stack\n[doc-list-depth] +\n[doc-reg-dBla1]n
+.    \}
+.    el \
+.      tm mdoc warning: '-nested' allowed with nested .Bl macros only (#\n[.c])
+.  \}
+.
+.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-width" \{\
+.    nr doc-arg-ptr +1
+.    ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.    substring doc-str-dBla 0 0
+.    ie \a.\a\*[doc-str-dBla]\a \{\
+.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.      substring doc-str-dBla 1
+.      doc-first-parameter \*[doc-str-dBla]
+.      doc-get-width "\*[doc-str-dfp]
+.      doc-get-arg-type "\*[doc-str-dfp]
+.      ie (\n[doc-arg-type] == 1) \
+.        nr doc-reg-dBla1 1
+.      el \
+.        nr doc-reg-dBla1 0
+.    \}
+.    el \
+.      nr doc-reg-dBla1 0
+.    ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.
+.    ie \n[doc-reg-dBla1] \{\
+.      \" execute string in a box to get the width of the diversion
+.      ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
+.      doc-save-global-vars
+.      doc-reset-args
+.      box doc-box-dBla
+.      ev doc-env-dBla
+.      evc 0
+.      in 0
+.      nf
+.      nop \*[doc-str-dBla]
+.      br
+.      ev
+.      box
+.      doc-restore-global-vars
+.      doc-get-width \h'\n[dl]u'
+.      nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.    \}
+.    el \{\
+.      \" test whether argument is a valid numeric expression
+.      nr doc-reg-dBla1 0
+.      if \B\a(\*[doc-str-dBla])\a \{\
+.        \" disable warnings related to scaling indicators (32)
+.        nr doc-reg-dBla2 \n[.warn]
+.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
+.
+.        \" values without a scaling indicator are taken as strings;
+.        \" we test whether the parameter string with and without the
+.        \" last character yields identical numerical results (ignoring
+.        \" the scaling indicator)
+.        ds doc-str-dBla1 "\*[doc-str-dBla]
+.        substring doc-str-dBla1 0 -2
+.        if \B\a(\*[doc-str-dBla1])\a \{\
+.          nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
+.          nr doc-reg-dBla4 (\*[doc-str-dBla1])
+.          if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
+.            nr doc-reg-dBla1 1
+.        \}
+.
+.        \" enable all warnings again
+.        warn \n[doc-reg-dBla2]
+.      \}
+.
+.      ie \n[doc-reg-dBla1] \
+.        nr doc-list-indent-stack\n[doc-list-depth] (\*[doc-str-dBla])
+.      el \{\
+.        doc-get-arg-width \n[doc-arg-ptr]
+.        ie (\n[doc-width] == 2) \{\
+.          \" if the width parameter is a macro, use the macro's
+.          \" width as specified in doc-common
+.          doc-get-arg-type \*[doc-str-dBla]
+.          ie (\n[doc-arg-type] == 1) \
+.            nr doc-list-indent-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
+.          el \
+.            nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.        \}
+.        el \
+.          nr doc-list-indent-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.  \}\}\}
+.
+.  el \{ .ie "\*[doc-arg\n[doc-arg-ptr]]"-offset" \{\
+.    nr doc-arg-ptr +1
+.
+.    ie "\*[doc-arg\n[doc-arg-ptr]]"indent" \
+.      nr doc-list-offset-stack\n[doc-list-depth] \n[doc-display-indent]u
+.    el \{\
+.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.      nr doc-reg-dBla1 0
+.      if \B\a(\*[doc-str-dBla])\a \{\
+.        nr doc-reg-dBla2 \n[.warn]
+.        warn (\n[.warn] - (\n[.warn] / 32 % 2 * 32))
+.
+.        ds doc-str-dBla1 "\*[doc-str-dBla]
+.        substring doc-str-dBla1 0 -2
+.        if \B\a(\*[doc-str-dBla1])\a \{\
+.          nr doc-reg-dBla3 (;(\*[doc-str-dBla]))
+.          nr doc-reg-dBla4 (\*[doc-str-dBla1])
+.          if (\n[doc-reg-dBla3] == \n[doc-reg-dBla4]) \
+.            nr doc-reg-dBla1 1
+.        \}
+.
+.        warn \n[doc-reg-dBla2]
+.      \}
+.
+.      ie \n[doc-reg-dBla1] \
+.        nr doc-list-offset-stack\n[doc-list-depth] \*[doc-str-dBla]
+.      el \{\
+.        doc-get-arg-width \n[doc-arg-ptr]
+.        ie (\n[doc-width] <= 3) \{\
+.          \" if the offset parameter is a macro, use the macro's
+.          \" width as specified in doc-common
+.          doc-get-arg-type \*[doc-str-dBla]
+.          ie (\n[doc-arg-type] == 1) \
+.            nr doc-list-offset-stack\n[doc-list-depth] \n[\*[doc-str-dBla]]
+.          el \
+.            nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.        \}
+.        el \
+.          nr doc-list-offset-stack\n[doc-list-depth] (\n[doc-width]u * \n[doc-fixed-width]u)
+.  \}\}\}
+.  el \
+.    nr doc-reg-dBla 0
+.  \}\}\}
+.
+.  \" not a known keyword, so it specifies the width of the next column
+.  \" (if it is a column list)
+.  if !\n[doc-reg-dBla] \{\
+.    ie "\*[doc-list-type-stack\n[doc-list-depth]]"column-list" \{\
+.      nr doc-num-columns +1
+.      ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
+.      substring doc-str-dBla 0 0
+.      ie \a.\a\*[doc-str-dBla]\a \{\
+.        ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.        substring doc-str-dBla 1
+.        doc-first-parameter \*[doc-str-dBla]
+.        doc-get-width "\*[doc-str-dfp]
+.        doc-get-arg-type "\*[doc-str-dfp]
+.        ie (\n[doc-arg-type] == 1) \
+.          nr doc-reg-dBla1 1
+.        el \
+.          nr doc-reg-dBla1 0
+.      \}
+.      el \
+.        nr doc-reg-dBla1 0
+.      ds doc-str-dBla "\*[doc-arg\n[doc-arg-ptr]]
+.
+.      ie \n[doc-reg-dBla1] \{\
+.        \" execute string in a box to get the width of the diversion
+.        ds doc-str-dBla \*[doc-arg\n[doc-arg-ptr]]
+.        doc-save-global-vars
+.        doc-reset-args
+.        box doc-box-dBla
+.        ev doc-env-dBla
+.        evc 0
+.        in 0
+.        nf
+.        nop \*[doc-str-dBla]
+.        br
+.        ev
+.        box
+.        doc-restore-global-vars
+.        ds doc-arg\n[doc-num-columns] "\h'\n[dl]u'
+.      \}
+.      el \
+.        ds doc-arg\n[doc-num-columns] "\*[doc-arg\n[doc-arg-ptr]]
+.    \}
+.    el \{\
+.      tmc mdoc warning: Unknown keyword '\*[doc-arg\n[doc-arg-ptr]]'
+.      tm1 " in .Bl macro (#\n[.c])
+.  \}\}
+.
+.  if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \
+.    doc-do-Bl-args
+..
+.
+.
+.\" NS doc-save-global-vars macro
+.\" NS   save all global variables
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dsgv
+.
+.de doc-save-global-vars
+.  ds doc-macro-name-saved "\*[doc-macro-name]
+.  nr doc-arg-limit-saved \n[doc-arg-limit]
+.  nr doc-num-args-saved \n[doc-num-args]
+.  nr doc-arg-ptr-saved \n[doc-arg-ptr]
+.
+.  nr doc-reg-dsgv 1
+.  while (\n[doc-reg-dsgv] <= \n[doc-arg-limit]) \{\
+.    ds doc-arg\n[doc-reg-dsgv]-saved "\*[doc-arg\n[doc-reg-dsgv]]
+.    nr doc-type\n[doc-reg-dsgv]-saved \n[doc-type\n[doc-reg-dsgv]]
+.    ds doc-space\n[doc-reg-dsgv]-saved "\*[doc-space\n[doc-reg-dsgv]]
+.    nr doc-reg-dsgv +1
+.  \}
+.
+.  nr doc-curr-font-saved \n[doc-curr-font]
+.  nr doc-curr-size-saved \n[doc-curr-size]
+.  nr doc-in-synopsis-section-saved \n[doc-in-synopsis-section]
+.  nr doc-in-library-section-saved \n[doc-in-library-section]
+.  nr doc-indent-synopsis-saved \n[doc-indent-synopsis]
+.  nr doc-indent-synopsis-active-saved \n[doc-indent-synopsis-active]
+.  nr doc-have-decl-saved \n[doc-have-decl]
+.  nr doc-have-var-saved \n[doc-have-var]
+.  ds doc-command-name-saved "\*[doc-command-name]
+.  ds doc-quote-left-saved "\*[doc-quote-left]
+.  ds doc-quote-right-saved "\*[doc-quote-right]
+.  nr doc-nesting-level-saved \n[doc-nesting-level]
+.  nr doc-in-list-saved \n[doc-in-list]
+.  ds doc-space-saved "\*[doc-space]
+.  ds doc-saved-space-saved "\*[doc-saved-space]
+.  nr doc-space-mode-saved \n[doc-space-mode]
+.  nr doc-have-space-saved \n[doc-have-space]
+.  nr doc-have-slot-saved \n[doc-have-slot]
+.  nr doc-keep-type-saved \n[doc-keep-type]
+.  nr doc-display-depth-saved \n[doc-display-depth]
+.  nr doc-is-compact-saved \n[doc-is-compact]
+.
+.  nr doc-reg-dsgv 0
+.  while (\n[doc-reg-dsgv] <= \n[doc-display-depth]) \{\
+.    ds doc-display-type-stack\n[doc-reg-dsgv]-saved "\*[doc-display-type-stack\n[doc-reg-dsgv]]
+.    nr doc-display-indent-stack\n[doc-reg-dsgv]-saved \n[doc-display-indent-stack\n[doc-reg-dsgv]]
+.    nr doc-display-ad-stack\n[doc-reg-dsgv]-saved \n[doc-display-ad-stack\n[doc-reg-dsgv]]
+.    nr doc-display-fi-stack\n[doc-reg-dsgv]-saved \n[doc-display-fi-stack\n[doc-reg-dsgv]]
+.    nr doc-display-ft-stack\n[doc-reg-dsgv]-saved \n[doc-display-ft-stack\n[doc-reg-dsgv]]
+.    nr doc-display-ps-stack\n[doc-reg-dsgv]-saved \n[doc-display-ps-stack\n[doc-reg-dsgv]]
+.    nr doc-reg-dsgv +1
+.  \}
+.
+.  nr doc-fontmode-depth-saved \n[doc-fontmode-depth]
+.
+.  nr doc-reg-dsgv 1
+.  while (\n[doc-reg-dsgv] <= \n[doc-fontmode-depth]) \{\
+.    nr doc-fontmode-font-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-font-stack\n[doc-reg-dsgv]]
+.    nr doc-fontmode-size-stack\n[doc-reg-dsgv]-saved \n[doc-fontmode-size-stack\n[doc-reg-dsgv]]
+.    nr doc-reg-dsgv +1
+.  \}
+.
+.  nr doc-list-depth-saved \n[doc-list-depth]
+.
+.  nr doc-reg-dsgv 1
+.  while (\n[doc-reg-dsgv] <= \n[doc-list-depth]) \{\
+.    ds doc-list-type-stack\n[doc-reg-dsgv]-saved "\*[doc-list-type-stack\n[doc-reg-dsgv]]
+.    nr doc-list-have-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-have-indent-stack\n[doc-reg-dsgv]]
+.    nr doc-list-indent-stack\n[doc-reg-dsgv]-saved \n[doc-list-indent-stack\n[doc-reg-dsgv]]
+.    nr doc-compact-list-stack\n[doc-reg-dsgv]-saved \n[doc-compact-list-stack\n[doc-reg-dsgv]]
+.    ds doc-tag-prefix-stack\n[doc-reg-dsgv]-saved "\*[doc-tag-prefix-stack\n[doc-reg-dsgv]]
+.    nr doc-list-offset-stack\n[doc-reg-dsgv]-saved \n[doc-list-offset-stack\n[doc-reg-dsgv]]
+.    nr doc-enum-list-count-stack\n[doc-reg-dsgv]-saved \n[doc-enum-list-count-stack\n[doc-reg-dsgv]]
+.    nr doc-reg-dsgv +1
+.  \}
+.
+.  ds doc-saved-Pa-font-saved "\*[doc-saved-Pa-font]
+.  nr doc-curr-type-saved \n[doc-curr-type]
+.  ds doc-curr-arg-saved "\*[doc-curr-arg]
+.  nr doc-diag-list-input-line-count-saved \n[doc-diag-list-input-line-count]
+.  nr doc-num-columns-saved \n[doc-num-columns]
+.  nr doc-column-indent-width-saved \n[doc-column-indent-width]
+.  nr doc-is-func-saved \n[doc-is-func]
+.  nr doc-have-old-func-saved \n[doc-have-old-func]
+.  nr doc-func-arg-count-saved \n[doc-func-arg-count]
+.  ds doc-func-arg-saved "\*[doc-func-arg]
+.  nr doc-num-func-args-saved \n[doc-num-func-args]
+.  nr doc-func-args-processed-saved \n[doc-func-args-processed]
+.  nr doc-have-func-saved \n[doc-have-func]
+.  nr doc-is-reference-saved \n[doc-is-reference]
+.  nr doc-reference-count-saved \n[doc-reference-count]
+.  nr doc-author-count-saved \n[doc-author-count]
+.
+.  nr doc-reg-dsgv 0
+.  while (\n[doc-reg-dsgv] <= \n[doc-author-count]) \{\
+.    ds doc-author-name\n[doc-reg-dsgv]-saved "\*[doc-author-name\n[doc-reg-dsgv]]
+.    nr doc-reg-dsgv +1
+.  \}
+.
+.  nr doc-book-count-saved \n[doc-book-count]
+.  ds doc-book-name-saved "\*[doc-book-name]
+.  nr doc-city-count-saved \n[doc-city-count]
+.  ds doc-city-name-saved "\*[doc-city-name]
+.  nr doc-date-count-saved \n[doc-date-count]
+.  ds doc-date-saved "\*[doc-date]
+.  nr doc-publisher-count-saved \n[doc-publisher-count]
+.  ds doc-publisher-name-saved "\*[doc-publisher-name]
+.  nr doc-journal-count-saved \n[doc-journal-count]
+.  ds doc-journal-name-saved "\*[doc-journal-name]
+.  nr doc-issue-count-saved \n[doc-issue-count]
+.  ds doc-issue-name-saved "\*[doc-issue-name]
+.  nr doc-optional-count-saved \n[doc-optional-count]
+.  ds doc-optional-string-saved "\*[doc-optional-string]
+.  nr doc-page-number-count-saved \n[doc-page-number-count]
+.  ds doc-page-number-string-saved "\*[doc-page-number-string]
+.  nr doc-corporate-count-saved \n[doc-corporate-count]
+.  ds doc-corporate-name-saved "\*[doc-corporate-name]
+.  nr doc-report-count-saved \n[doc-report-count]
+.  ds doc-report-name-saved "\*[doc-report-name]
+.  nr doc-reference-title-count-saved \n[doc-reference-title-count]
+.  ds doc-reference-title-name-saved "\*[doc-reference-title-name]
+.  ds doc-reference-title-name-for-book-saved "\*[doc-reference-title-name-for-book]
+.  nr doc-url-count-saved \n[doc-url-count]
+.  ds doc-url-name-saved "\*[doc-url-name]
+.  nr doc-volume-count-saved \n[doc-volume-count]
+.  ds doc-volume-name-saved "\*[doc-volume-name]
+.  nr doc-have-author-saved \n[doc-have-author]
+.
+.  ds doc-document-title-saved "\*[doc-document-title]
+.  ds doc-volume-saved "\*[doc-volume]
+.  ds doc-section-saved "\*[doc-section]
+.  ds doc-operating-system-saved "\*[doc-operating-system]
+.  ds doc-date-string-saved "\*[doc-date-string]
+.  nr doc-header-space-saved \n[doc-header-space]
+.  nr doc-footer-space-saved \n[doc-footer-space]
+.  nr doc-display-vertical-saved \n[doc-display-vertical]
+.  ds doc-header-string-saved "\*[doc-header-string]
+.  nr doc-in-see-also-section-saved \n[doc-in-see-also-section]
+.  nr doc-in-files-section-saved \n[doc-in-files-section]
+.  nr doc-in-authors-section-saved \n[doc-in-authors-section]
+..
+.
+.
+.\" NS doc-restore-global-vars macro
+.\" NS   restore all global variables
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-drgv
+.
+.de doc-restore-global-vars
+.  ds doc-macro-name "\*[doc-macro-name-saved]
+.  nr doc-arg-limit \n[doc-arg-limit-saved]
+.  nr doc-num-args \n[doc-num-args-saved]
+.  nr doc-arg-ptr \n[doc-arg-ptr-saved]
+.
+.  nr doc-reg-drgv 1
+.  while (\n[doc-reg-drgv] <= \n[doc-arg-limit]) \{\
+.    ds doc-arg\n[doc-reg-drgv] "\*[doc-arg\n[doc-reg-drgv]-saved]
+.    nr doc-type\n[doc-reg-drgv] \n[doc-type\n[doc-reg-drgv]-saved]
+.    ds doc-space\n[doc-reg-drgv] "\*[doc-space\n[doc-reg-drgv]-saved]
+.    nr doc-reg-drgv +1
+.  \}
+.
+.  nr doc-curr-font \n[doc-curr-font-saved]
+.  nr doc-curr-size \n[doc-curr-size-saved]
+.  nr doc-in-synopsis-section \n[doc-in-synopsis-section-saved]
+.  nr doc-in-library-section \n[doc-in-library-section-saved]
+.  nr doc-indent-synopsis \n[doc-indent-synopsis-saved]
+.  nr doc-indent-synopsis-active \n[doc-indent-synopsis-active-saved]
+.  nr doc-have-decl \n[doc-have-decl-saved]
+.  nr doc-have-var \n[doc-have-var-saved]
+.  ds doc-command-name "\*[doc-command-name-saved]
+.  ds doc-quote-left "\*[doc-quote-left-saved]
+.  ds doc-quote-right "\*[doc-quote-right-saved]
+.  nr doc-nesting-level \n[doc-nesting-level-saved]
+.  nr doc-in-list \n[doc-in-list-saved]
+.  ds doc-space "\*[doc-space-saved]
+.  ds doc-saved-space "\*[doc-saved-space-saved]
+.  nr doc-space-mode \n[doc-space-mode-saved]
+.  nr doc-have-space \n[doc-have-space-saved]
+.  nr doc-have-slot \n[doc-have-slot-saved]
+.  nr doc-keep-type \n[doc-keep-type-saved]
+.  nr doc-display-depth \n[doc-display-depth-saved]
+.  nr doc-is-compact \n[doc-is-compact-saved]
+.
+.  nr doc-reg-drgv 0
+.  while (\n[doc-reg-drgv] <= \n[doc-display-depth]) \{\
+.    ds doc-display-type-stack\n[doc-reg-drgv] "\*[doc-display-type-stack\n[doc-reg-drgv]-saved]
+.    nr doc-display-indent-stack\n[doc-reg-drgv] \n[doc-display-indent-stack\n[doc-reg-drgv]-saved]
+.    nr doc-display-ad-stack\n[doc-reg-drgv] \n[doc-display-ad-stack\n[doc-reg-drgv]-saved]
+.    nr doc-display-fi-stack\n[doc-reg-drgv] \n[doc-display-fi-stack\n[doc-reg-drgv]-saved]
+.    nr doc-display-ft-stack\n[doc-reg-drgv] \n[doc-display-ft-stack\n[doc-reg-drgv]-saved]
+.    nr doc-display-ps-stack\n[doc-reg-drgv] \n[doc-display-ps-stack\n[doc-reg-drgv]-saved]
+.    nr doc-reg-drgv +1
+.  \}
+.
+.  nr doc-fontmode-depth \n[doc-fontmode-depth-saved]
+.
+.  nr doc-reg-drgv 1
+.  while (\n[doc-reg-drgv] <= \n[doc-fontmode-depth]) \{\
+.    nr doc-fontmode-font-stack\n[doc-reg-drgv] \n[doc-fontmode-font-stack\n[doc-reg-drgv]]-saved
+.    nr doc-fontmode-size-stack\n[doc-reg-drgv] \n[doc-fontmode-size-stack\n[doc-reg-drgv]]-saved
+.    nr doc-reg-drgv +1
+.  \}
+.
+.  nr doc-list-depth \n[doc-list-depth-saved]
+.
+.  nr doc-reg-drgv 1
+.  while (\n[doc-reg-drgv] <= \n[doc-list-depth]) \{\
+.    ds doc-list-type-stack\n[doc-reg-drgv] "\*[doc-list-type-stack\n[doc-reg-drgv]-saved]
+.    nr doc-list-have-indent-stack\n[doc-reg-drgv] \n[doc-list-have-indent-stack\n[doc-reg-drgv]-saved]
+.    nr doc-list-indent-stack\n[doc-reg-drgv] \n[doc-list-indent-stack\n[doc-reg-drgv]-saved]
+.    nr doc-compact-list-stack\n[doc-reg-drgv] \n[doc-compact-list-stack\n[doc-reg-drgv]-saved]
+.    ds doc-tag-prefix-stack\n[doc-reg-drgv] "\*[doc-tag-prefix-stack\n[doc-reg-drgv]-saved]
+.    nr doc-list-offset-stack\n[doc-reg-drgv] \n[doc-list-offset-stack\n[doc-reg-drgv]-saved]
+.    nr doc-enum-list-count-stack\n[doc-reg-drgv] \n[doc-enum-list-count-stack\n[doc-reg-drgv]-saved]
+.    nr doc-reg-drgv +1
+.  \}
+.
+.  ds doc-saved-Pa-font "\*[doc-saved-Pa-font-saved]
+.  nr doc-curr-type \n[doc-curr-type-saved]
+.  ds doc-curr-arg "\*[doc-curr-arg-saved]
+.  nr doc-diag-list-input-line-count \n[doc-diag-list-input-line-count-saved]
+.  nr doc-num-columns \n[doc-num-columns-saved]
+.  nr doc-column-indent-width \n[doc-column-indent-width-saved]
+.  nr doc-is-func \n[doc-is-func-saved]
+.  nr doc-have-old-func \n[doc-have-old-func-saved]
+.  nr doc-func-arg-count \n[doc-func-arg-count-saved]
+.  ds doc-func-arg "\*[doc-func-arg-saved]
+.  nr doc-num-func-args \n[doc-num-func-args-saved]
+.  nr doc-func-args-processed \n[doc-func-args-processed-saved]
+.  nr doc-have-func \n[doc-have-func-saved]
+.  nr doc-is-reference \n[doc-is-reference-saved]
+.  nr doc-reference-count \n[doc-reference-count-saved]
+.  nr doc-author-count \n[doc-author-count-saved]
+.
+.  nr doc-reg-drgv 0
+.  while (\n[doc-reg-drgv] <= \n[doc-author-count]) \{\
+.    ds doc-author-name\n[doc-reg-drgv] "\*[doc-author-name\n[doc-reg-drgv]-saved]
+.    nr doc-reg-drgv +1
+.  \}
+.
+.  nr doc-book-count \n[doc-book-count-saved]
+.  ds doc-book-name "\*[doc-book-name-saved]
+.  nr doc-city-count \n[doc-city-count-saved]
+.  ds doc-city-name "\*[doc-city-name-saved]
+.  nr doc-date-count \n[doc-date-count-saved]
+.  ds doc-date "\*[doc-date-saved]
+.  nr doc-publisher-count \n[doc-publisher-count-saved]
+.  ds doc-publisher-name "\*[doc-publisher-name-saved]
+.  nr doc-journal-count \n[doc-journal-count-saved]
+.  ds doc-journal-name "\*[doc-journal-name-saved]
+.  nr doc-issue-count \n[doc-issue-count-saved]
+.  ds doc-issue-name "\*[doc-issue-name-saved]
+.  nr doc-optional-count \n[doc-optional-count-saved]
+.  ds doc-optional-string "\*[doc-optional-string-saved]
+.  nr doc-page-number-count \n[doc-page-number-count-saved]
+.  ds doc-page-number-string "\*[doc-page-number-string-saved]
+.  nr doc-corporate-count \n[doc-corporate-count-saved]
+.  ds doc-corporate-name "\*[doc-corporate-name-saved]
+.  nr doc-report-count \n[doc-report-count-saved]
+.  ds doc-report-name "\*[doc-report-name-saved]
+.  nr doc-reference-title-count \n[doc-reference-title-count-saved]
+.  ds doc-reference-title-name "\*[doc-reference-title-name-saved]
+.  ds doc-reference-title-name-for-book "\*[doc-reference-title-name-for-book-saved]
+.  nr doc-url-count \n[doc-url-count-saved]
+.  ds doc-url-name "\*[doc-url-name-saved]
+.  nr doc-volume-count \n[doc-volume-count-saved]
+.  ds doc-volume-name "\*[doc-volume-name-saved]
+.  nr doc-have-author \n[doc-have-author-saved]
+.
+.  ds doc-document-title "\*[doc-document-title-saved]
+.  ds doc-volume "\*[doc-volume-saved]
+.  ds doc-section "\*[doc-section-saved]
+.  ds doc-operating-system "\*[doc-operating-system-saved]
+.  ds doc-date-string "\*[doc-date-string-saved]
+.  nr doc-header-space \n[doc-header-space-saved]
+.  nr doc-footer-space \n[doc-footer-space-saved]
+.  nr doc-display-vertical \n[doc-display-vertical-saved]
+.  ds doc-header-string "\*[doc-header-string-saved]
+.  nr doc-in-see-also-section \n[doc-in-see-also-section-saved]
+.  nr doc-in-files-section \n[doc-in-files-section-saved]
+.  nr doc-in-authors-section \n[doc-in-authors-section-saved]
+..
+.
+.
+.\" NS El user macro
+.\" NS   end list
+.\" NS
+.\" NS modifies:
+.\" NS   doc-list-depth
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-str-El
+.\" NS
+.\" NS width register 'El' set in doc-common
+.
+.de El
+.  if \n[.$] \{\
+.    tm Usage: .El (does not take arguments) (#\n[.c])
+.    return
+.  \}
+.
+.  ds doc-macro-name El
+.  ds doc-str-El \*[doc-list-type-stack\n[doc-list-depth]]
+.
+.  ie        "\*[doc-str-El]"diag-list" \
+.    doc-end-list 0
+.  el \{ .ie "\*[doc-str-El]"column-list" \
+.    doc-end-column-list
+.  el \{ .ie "\*[doc-str-El]"item-list" \
+.    doc-end-list 0
+.  el \{ .ie "\*[doc-str-El]"ohang-list" \
+.    doc-end-list 0
+.  el \{ .ie "\*[doc-str-El]"inset-list" \
+.    doc-end-list 0
+.  el \
+.    doc-end-list 1
+.  \}\}\}\}
+.
+.  br
+..
+.
+.
+.\" NS doc-saved-Pa-font global string
+.\" NS   saved doc-Pa-font string for section FILES (no underline if
+.\" NS   nroff)
+.
+.ds doc-saved-Pa-font
+.
+.
+.\" NS doc-curr-type global register
+.\" NS   current argument type
+.
+.nr doc-curr-type 0
+.
+.
+.\" NS doc-curr-arg global string
+.\" NS   current argument
+.
+.ds doc-curr-arg
+.
+.
+.\" NS doc-item-boxXXX global box
+.\" NS   item boxes associated list depth
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.
+.\" NS It user macro
+.\" NS   list item
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-curr-arg
+.\" NS   doc-curr-type
+.\" NS   doc-in-list
+.\" NS   doc-macro-name
+.\" NS   doc-num-args
+.\" NS   doc-saved-Pa-font
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-It
+.\" NS   doc-str-It
+.\" NS   doc-XXX-list-type
+.\" NS
+.\" NS width register 'It' set in doc-common
+.
+.nr doc-bullet-list-type 1
+.nr doc-column-list-type 0
+.nr doc-dash-list-type 1
+.nr doc-diag-list-type 0
+.nr doc-enum-list-type 1
+.nr doc-hang-list-type 2
+.nr doc-inset-list-type 2
+.nr doc-item-list-type 1
+.nr doc-ohang-list-type 2
+.nr doc-tag-list-type 2
+.
+.de It
+.  ds doc-str-It \*[doc-list-type-stack\n[doc-list-depth]]
+.
+.  if "\*[doc-str-It]"" \
+.    tm mdoc error: .It without preceding .Bl (#\n[.c])
+.
+.  if \n[doc-nesting-level] \{\
+.    tmc "mdoc error: .It found in enclosing (e.g. .Ac ... .It ... .Ao)
+.    tm1 " (#\n[.c])
+.  \}
+.
+.  br
+.  if !\n[cR] \
+.    ne 3v
+.
+.  if \n[.$] \{\
+.    ds doc-macro-name It
+.
+.    \" fill argument vector
+.    nr doc-reg-It 1
+.    while (\n[doc-reg-It] <= \n[.$]) \{\
+.      ds doc-arg\n[doc-reg-It] "\$[\n[doc-reg-It]]
+.      nr doc-reg-It +1
+.    \}
+.
+.    nr doc-num-args \n[.$]
+.    nr doc-arg-ptr 0
+.  \}
+.
+.  nr doc-reg-It \n[doc-\*[doc-str-It]-type]
+.
+.  if \n[doc-reg-It] \{\
+.    \" start item box
+.    box doc-item-box\n[doc-list-depth]
+.    ev doc-item-env\n[doc-list-depth]
+.    evc 0
+.    in 0
+.    nf
+.  \}
+.
+.  ie (\n[doc-reg-It] == 1) \{\
+.    if \n[.$] \{\
+.      tm1 "mdoc warning: .It macros in lists of type '\*[doc-str-It]'
+.      tm1 "              don't take arguments (#\n[.c])
+.  \}\}
+.  el \{\
+.    ie \n[.$] \{\
+.      if (\n[doc-reg-It] == 2) \{\
+.        \" handle list types with arguments
+.        doc-parse-arg-vector
+.
+.        nr doc-in-list 1
+.        nr doc-arg-ptr 1
+.        nr doc-curr-type \n[doc-type1]
+.        ds doc-curr-arg "\*[doc-arg1]
+.
+.        if \n[doc-in-files-section] \{\
+.          ds doc-saved-Pa-font "\*[doc-Pa-font]
+.          if n \
+.            ds doc-Pa-font "\*[doc-No-font]
+.        \}
+.
+.        ie (\n[doc-type1] == 1) \
+.          \*[doc-arg1]
+.        el \{\
+.          nr doc-arg-ptr 1
+.          doc-print-recursive
+.    \}\}\}
+.    el \{\
+.      tm1 "mdoc warning: .It macros in lists of type '\*[doc-str-It]'
+.      tm1 "              require arguments (#\n[.c])
+.    \}
+.  \}
+.
+.  \" the previous call of '.doc-print-recursive' can contain calls to
+.  \" opening macros like '.Ao'; we then defer the call of
+.  \" 'doc-xxx-list'
+.  if !\n[doc-nesting-level] \
+.    doc-\*[doc-str-It]
+..
+.
+.
+.\" NS doc-inset-list macro
+.\" NS   .It item of list-type inset
+.\" NS
+.\" NS modifies:
+.\" NS   doc-in-list
+.
+.de doc-inset-list
+.  \" finish item box
+.  br
+.  ev
+.  box
+.  unformat doc-item-box\n[doc-list-depth]
+.
+.  doc-set-vertical-and-indent 0
+.  br
+.
+.  nh
+.  doc-item-box\n[doc-list-depth]
+.
+.  if \n[doc-in-files-section] \
+.    if n \
+.      ds doc-Pa-font "\*[doc-saved-Pa-font]
+.
+.  nr doc-in-list 0
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-hang-list macro
+.\" NS   .It item of list-type hanging tag (as opposed to tagged)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-have-space
+.\" NS   doc-in-list
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dhl
+.\" NS   doc-reg-dhl1
+.
+.de doc-hang-list
+.  \" finish item box
+.  br
+.  ev
+.  box
+.  unformat doc-item-box\n[doc-list-depth]
+.
+.  doc-set-vertical-and-indent 1
+.  nr doc-reg-dhl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
+.  ti -\n[doc-reg-dhl]u
+.
+.  nh
+.  ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
+.    doc-item-box\n[doc-list-depth]
+.  el \{\
+.    chop doc-item-box\n[doc-list-depth]
+.    nr doc-reg-dhl1 \n[.k]u
+.    nop \*[doc-item-box\n[doc-list-depth]]\c
+.    nop \h'|(\n[doc-reg-dhl1]u - \n[.k]u + \n[doc-reg-dhl]u)'\c
+.    nr doc-have-space 1
+.  \}
+.
+.  if \n[doc-in-files-section] \
+.    if n \
+.      ds doc-Pa-font "\*[doc-saved-Pa-font]
+.
+.  nr doc-in-list 0
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-ohang-list macro
+.\" NS   .It item of list-type overhanging tag
+.\" NS
+.\" NS modifies:
+.\" NS   doc-in-list
+.
+.de doc-ohang-list
+.  \" finish item box
+.  br
+.  ev
+.  box
+.  unformat doc-item-box\n[doc-list-depth]
+.
+.  doc-set-vertical-and-indent 0
+.  nh
+.  doc-item-box\n[doc-list-depth]
+.  br
+.
+.  if \n[doc-in-files-section] \
+.    if n \
+.      ds doc-Pa-font "\*[doc-saved-Pa-font]
+.
+.  nr doc-in-list 0
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-item-list macro
+.\" NS   .It item of list-type [empty tag]
+.
+.de doc-item-list
+.  \" finish (dummy) item box
+.  br
+.  ev
+.  box
+.
+.  doc-set-vertical-and-indent 0
+.  br
+.
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-enum-list-count-stackXXX global register
+.\" NS   stack of current enum count values
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.nr doc-enum-list-count-stack1 0
+.
+.
+.\" NS doc-enum-list macro
+.\" NS   enumerated list
+.\" NS
+.\" NS modifies:
+.\" NS   doc-enum-list-count-stackXXX
+.\" NS   doc-in-list
+.
+.de doc-enum-list
+.  nr doc-in-list 1
+.  nr doc-enum-list-count-stack\n[doc-list-depth] +1
+\# XXX
+\#.ll \n[doc-list-indent-stack\n[doc-list-depth]]u
+\#.rj
+.  nop \*[doc-tag-prefix-stack\n[doc-list-depth]]\c
+.  nop \n[doc-enum-list-count-stack\n[doc-list-depth]].\&
+.  doc-do-list
+..
+.
+.
+.\" NS doc-bullet-list macro
+.\" NS   bullet paragraph list
+.\" NS
+.\" NS modifies:
+.\" NS   doc-in-list
+.
+.de doc-bullet-list
+.  nr doc-in-list 1
+.  nop \)\*[doc-Sy-font]\[bu]\f[]
+.  doc-do-list
+..
+.
+.
+.\" NS doc-dash-list macro
+.\" NS   hyphen paragraph list (sub bullet list)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-in-list
+.
+.de doc-dash-list
+.  nr doc-in-list 1
+.  nop \)\*[doc-Sy-font]\-\f[]
+.  doc-do-list
+..
+.
+.
+.\" NS doc-do-list macro
+.\" NS   .It item of list-type enum/bullet/hyphen
+.
+.als doc-do-list doc-hang-list
+.
+.
+.\" NS doc-diag-list-input-line-count global register
+.\" NS   saved line number to be checked in next diag-list item
+.
+.nr doc-diag-list-input-line-count 0
+.
+.
+.\" NS doc-diag-list macro
+.\" NS   .It item of list-type diagnostic-message
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-diag-list-input-line-count
+.
+.de doc-diag-list
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  ie ((\n[.c] - \n[doc-diag-list-input-line-count]) > 1) \{\
+.    ie !\n[doc-compact-list-stack\n[doc-list-depth]] \
+.      doc-paragraph
+.    el \
+.      br
+.  \}
+.  el \
+.    br
+.  nr doc-diag-list-input-line-count \n[.c]
+.
+.  nh
+.  nop \*[doc-Sy-font]\c
+.  if \n[doc-num-args] \
+.    doc-remaining-args
+.  nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\*[doc-hard-space]\c
+.
+.  doc-print-and-reset
+..
+.
+.
+.\" NS doc-tag-list macro
+.\" NS   .It item of list-type 'tag'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-have-space
+.\" NS   doc-in-list
+.\" NS
+.\" NS local variables:
+.\" NS   doc-box-dtl
+.\" NS   doc-reg-dtl
+.\" NS   doc-reg-dtl1
+.
+.de doc-tag-list
+.  \" finish item box
+.  br
+.  ev
+.  box
+.  unformat doc-item-box\n[doc-list-depth]
+.
+.  \" we use a box without '.nf' to compute the tag width (via 'dl' register)
+.  box doc-box-dtl
+.  ev doc-env-dtl
+.  evc 0
+.  fi
+.  ad 0
+.  in 0
+.  doc-item-box\n[doc-list-depth]
+.  br
+.  ev
+.  box
+.
+.  doc-set-vertical-and-indent 1
+.  nr doc-reg-dtl (\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
+.  ti -\n[doc-reg-dtl]u
+.
+.  nh
+.  doc-item-box\n[doc-list-depth]
+.  ie (\n[dl]u > \n[doc-list-indent-stack\n[doc-list-depth]]u) \
+.    br
+.  el \{\
+.    \" format the tag separately to prevent stretching of spaces
+.    vpt 0
+.    br
+.    sp -1
+.    vpt 1
+.    nop \&\c
+.    nr doc-have-space 1
+.  \}
+.
+.  if \n[doc-in-files-section] \
+.    if n \
+.      ds doc-Pa-font "\*[doc-saved-Pa-font]
+.
+.  nr doc-in-list 0
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-set-vertical-and-indent macro
+.\" NS   set up vertical spacing (if not compact) and indentation (with
+.\" NS   offset if argument is non-zero)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-list-have-indent-stackXXX
+.
+.de doc-set-vertical-and-indent
+.  if !\n[doc-compact-list-stack\n[doc-list-depth]] \
+.    sp \n[doc-display-vertical]u
+.
+.  if \n[doc-list-have-indent-stack\n[doc-list-depth]] \{\
+.    nr doc-list-have-indent-stack\n[doc-list-depth] 0
+.    if \$1 \
+.      in +(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
+.  \}
+.
+.  if !\n[cR] \
+.    ne 2v
+..
+.
+.
+.\" NS doc-list-depth global register
+.\" NS   list type stack counter
+.
+.nr doc-list-depth 0
+.
+.
+.\" NS doc-num-columns global register
+.\" NS   number of columns
+.
+.nr doc-num-columns 0
+.
+.
+.\" NS doc-compact-list-stackXXX global register (bool)
+.\" NS   stack of flags to indicate whether a particular list is compact
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.nr doc-compact-list-stack1 0
+.
+.
+.\" NS doc-tag-prefix-stackXXX global string
+.\" NS   stack of tag prefixes (currently used for -nested -enum lists)
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.ds doc-tag-prefix-stack1
+.
+.
+.\" NS doc-list-offset-stackXXX global register
+.\" NS   stack of list offsets
+.\" NS
+.\" NS limit:
+.\" NS   doc-list-depth
+.
+.nr doc-list-offset-stack1 0
+.
+.
+.\" NS doc-end-list macro
+.\" NS   list end function; resets indentation (and offset if argument
+.\" NS   is non-zero)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-list-depth
+.\" NS   doc-list-offset-stackXXX
+.
+.de doc-end-list
+.  if \$1 \
+'    in -(\n[doc-list-indent-stack\n[doc-list-depth]]u + \n[doc-digit-width]u)
+.
+'  in -\n[doc-list-offset-stack\n[doc-list-depth]]u
+.
+.  if (\n[doc-list-depth] <= 0) \
+.    tm mdoc warning: extraneous .El call (#\n[.c])
+.
+.  doc-decrement-list-stack
+.  nr doc-list-depth -1
+..
+.
+.
+.\" NS doc-increment-list-stack macro
+.\" NS   set up next block for list
+.\" NS
+.\" NS modifies:
+.\" NS   doc-compact-list-stackXXX
+.\" NS   doc-list-have-indent-stackXXX
+.\" NS   doc-list-indent-stackXXX
+.\" NS   doc-list-offset-stackXXX
+.\" NS   doc-list-type-stackXXX
+.\" NS   doc-tag-prefix-stackXXX
+.\" NS   doc-enum-list-count-stackXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dils
+.
+.de doc-increment-list-stack
+.  nr doc-reg-dils (\n[doc-list-depth] + 1)
+.  nr doc-list-have-indent-stack\n[doc-reg-dils] 0
+.  nr doc-list-indent-stack\n[doc-reg-dils] 0
+.  nr doc-list-offset-stack\n[doc-reg-dils] 0
+.  ds doc-tag-prefix-stack\n[doc-reg-dils]
+.  ds doc-list-type-stack\n[doc-reg-dils]
+.  nr doc-compact-list-stack\n[doc-reg-dils] 0
+.  nr doc-enum-list-count-stack\n[doc-reg-dils] 0
+..
+.
+.
+.\" NS doc-decrement-list-stack macro
+.\" NS   decrement stack
+.\" NS
+.\" NS modifies:
+.\" NS   doc-compact-list-stackXXX
+.\" NS   doc-list-have-indent-stackXXX
+.\" NS   doc-list-indent-stackXXX
+.\" NS   doc-list-offset-stackXXX
+.\" NS   doc-list-type-stackXXX
+.\" NS   doc-tag-prefix-stackXXX
+.\" NS   doc-enum-list-count-stackXXX
+.
+.de doc-decrement-list-stack
+.  ds doc-list-type-stack\n[doc-list-depth]
+.  nr doc-list-have-indent-stack\n[doc-list-depth] 0
+.  nr doc-list-indent-stack\n[doc-list-depth] 0
+.  nr doc-list-offset-stack\n[doc-list-depth] 0
+.  ds doc-tag-prefix-stack\n[doc-list-depth]
+.  nr doc-compact-list-stack\n[doc-list-depth] 0
+.  nr doc-enum-list-count-stack\n[doc-list-depth] 0
+..
+.
+.
+.\" NS Xr user macro
+.\" NS   cross reference (for man pages only)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-Xr
+.\" NS
+.\" NS width register 'Xr' set in doc-common
+.
+.de Xr
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Xr
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      doc-Xr-usage
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    \" first argument must be a string
+.    ie (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      nr doc-curr-font \n[.f]
+.      nr doc-curr-size \n[.ps]
+.      ds doc-arg\n[doc-arg-ptr] \*[doc-Xr-font]\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]
+.
+.      if (\n[doc-arg-limit] > \n[doc-arg-ptr]) \{\
+.        nr doc-reg-Xr (\n[doc-arg-ptr] + 1)
+.        \" modify second argument if it is a string and
+.        \" remove space in between
+.        if (\n[doc-type\n[doc-reg-Xr]] == 2) \{\
+.          ds doc-arg\n[doc-reg-Xr] \*[lp]\*[doc-arg\n[doc-reg-Xr]]\*[rp]
+.          ds doc-space\n[doc-arg-ptr]
+.        \}
+.      \}
+.      doc-print-recursive
+.    \}
+.    el \
+.      doc-Xr-usage
+.  \}
+.  el \
+.    doc-Xr-usage
+..
+.
+.
+.\" NS doc-Xr-usage macro
+.
+.de doc-Xr-usage
+.  tm Usage: .Xr manpage_name [section#] ... (#\n[.c])
+.  doc-reset-args
+..
+.
+.
+.\" NS Sx user macro
+.\" NS   cross section reference
+.\" NS
+.\" NS width register 'Sx' set in doc-common
+.
+.als Sx doc-generic-macro
+.ds doc-Sx-usage section_header
+.
+.
+.\" NS doc-end-column-list macro
+.\" NS   column-list end-list
+.\" NS
+.\" NS modifies:
+.\" NS   doc-list-depth
+.
+.de doc-end-column-list
+.  linetabs 0
+'  in -(\n[doc-list-offset-stack\n[doc-list-depth]]u + \n[doc-list-indent-stack\n[doc-list-depth]]u)
+.  ta T .5i
+.  fi
+.  doc-decrement-list-stack
+.  nr doc-list-depth -1
+..
+.
+.
+.\" NS doc-column-indent-width global register
+.\" NS   holds the indent width for a column list
+.
+.nr doc-column-indent-width 0
+.
+.
+.\" NS doc-set-column-tab macro
+.\" NS   establish tabs for list-type column: '.doc-set-column-tab num_cols'
+.\" NS
+.\" NS modifies:
+.\" NS   doc-column-indent-width
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dsct
+.\" NS   doc-str-dsct
+.\" NS   doc-str-dsct1
+.
+.de doc-set-column-tab
+.  ds doc-str-dsct
+.  nr doc-reg-dsct 1
+.  nr doc-column-indent-width 0
+.
+.  ie (\$1 < 5) \
+.    ds doc-str-dsct1 "    \"
+.  el \{\
+.    ie (\$1 == 5) \
+.      ds doc-str-dsct1 "   \"
+.    el \{\
+.      \" XXX: this is packed abnormally close -- intercolumn width
+.      \"      should be configurable
+.      ds doc-str-dsct1 " \"
+.  \}\}
+.
+.  while (\n[doc-reg-dsct] <= \$1) \{\
+.    as doc-str-dsct " +\w\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]\au
+.    nr doc-column-indent-width +\w\a\*[doc-arg\n[doc-reg-dsct]]\*[doc-str-dsct1]\au
+.    nr doc-reg-dsct +1
+.  \}
+.
+.  ta \*[doc-str-dsct]
+'  in +\n[doc-column-indent-width]u
+..
+.
+.
+.\" NS doc-column-list macro
+.\" NS   column items
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-list-indent-stackXXX
+.\" NS   doc-spaceXXX
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dcl
+.
+.de doc-column-list
+.  if \n[doc-num-args] \
+.    doc-parse-arg-vector
+.  nr doc-arg-ptr +1
+.
+.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    tm Usage: .It column_string [Ta [column_string ...] ] (#\n[.c])
+.    return
+.  \}
+.
+.  if "\*[doc-arg\n[doc-arg-ptr]]"Ta" \{\
+.    nr doc-reg-dcl (\n[doc-arg-ptr] - 1)
+.    ds doc-space\n[doc-reg-dcl]
+.  \}
+.
+.  if !\n[doc-list-indent-stack\n[doc-list-depth]] \
+.    nr doc-list-indent-stack\n[doc-list-depth] \n[doc-column-indent-width]u
+.  if !\n[.u] \{\
+.    fi
+.    in +\n[doc-column-indent-width]u
+.  \}
+.  ti -\n[doc-column-indent-width]u
+.
+.  doc-do-\n[doc-type\n[doc-arg-ptr]]
+..
+.
+.
+.\" NS Ta user macro
+.\" NS   append tab (\t)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS
+.\" NS width register 'Ta' set in doc-common
+.
+.de Ta
+.  ie \n[doc-arg-limit] \{\
+.    nr doc-arg-ptr +1
+.    nop \*[doc-tab]\c
+.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \
+.      doc-do-\n[doc-type\n[doc-arg-ptr]]
+.    el \
+.      doc-reset-args
+.  \}
+.  el \{\
+.    tm1 "Usage: Ta must follow column entry: e.g.
+.    tm1 "         .It column_string [Ta [column_string ...]] (#\n[.c])
+.  \}
+..
+.
+.
+.\" NS Dl user macro
+.\" NS   display (one line) literal
+.\" NS
+.\" NS   this function uses the 'Li' font
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Dl' set in doc-common
+.
+.de Dl
+.  ta T .5i
+.  in +\n[doc-display-indent]u
+.
+.  ie \n[doc-arg-limit] \{\
+.    tm Usage: .Dl not callable by other macros (#\n[.c])
+.    doc-reset-args
+.  \}
+.  el \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Dl
+.      doc-parse-args \$@
+.      nr doc-arg-ptr 1
+.      nr doc-curr-font \n[.f]
+.      nr doc-curr-size \n[.ps]
+.      nop \*[doc-Li-font]\c
+.      doc-print-recursive
+.    \}
+.    el \
+.      tm Usage: .Dl argument ... (#\n[.c])
+.  \}
+.
+.  in -\n[doc-display-indent]u
+..
+.
+.
+.\" NS D1 user macro
+.\" NS   display (one line)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'D1' set in doc-common
+.
+.de D1
+.  ta T .5i
+.  in +\n[doc-display-indent]u
+.
+.  ie \n[doc-arg-limit] \{\
+.    tm Usage: .D1 not callable by other macros (#\n[.c])
+.    doc-reset-args
+.  \}
+.  el \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name D1
+.      doc-parse-args \$@
+.      nr doc-arg-ptr 1
+.      doc-print-recursive
+.    \}
+.    el \
+.      tm Usage: .D1 argument ... (#\n[.c])
+.  \}
+.
+.  in -\n[doc-display-indent]u
+..
+.
+.
+.\" NS Vt user macro
+.\" NS   variable type (for forcing old style variable declarations);
+.\" NS   this is not done in the same manner as .Ot for fortrash --
+.\" NS   clean up later
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-have-decl
+.\" NS   doc-have-var
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Vt' set in doc-common
+.
+.de Vt
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Vt
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Vt variable_type ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    tm Usage: .Vt variable_type ... (#\n[.c])
+.    doc-reset-args
+.    return
+.  \}
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    \" if a function declaration was the last thing given,
+.    \" want vertical space
+.    if \n[doc-have-decl] \{\
+.      doc-paragraph
+.      nr doc-have-decl 0
+.    \}
+.
+.    \" if a subroutine was the last thing given, want vertical space
+.    if \n[doc-have-func] \{\
+.      ie \n[doc-have-var] \
+.        br
+.      el \
+.        doc-paragraph
+.    \}
+.
+.    nr doc-have-var 1
+.  \}
+.
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  nop \*[doc-Ft-font]\c
+.  doc-print-recursive
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    ie \n[doc-have-old-func] \
+.      nop \*[doc-soft-space]\c
+.    el \
+.      br
+.  \}
+..
+.
+.
+.\" NS doc-is-func global register (bool)
+.\" NS   set if subroutine (in synopsis only) (fortran only)
+.
+.nr doc-is-func 0
+.
+.
+.\" NS Ft user macro
+.\" NS   function type
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-have-decl
+.\" NS   doc-have-var
+.\" NS   doc-is-func
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Ft' set in doc-common
+.
+.de Ft
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Ft
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Ft function_type ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  nr doc-arg-ptr +1
+.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    tm Usage: .Ft function_type ... (#\n[.c])
+.    doc-reset-args
+.    return
+.  \}
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    if (\n[doc-have-func] : \n[doc-have-decl]) \{\
+.      doc-paragraph
+.      nr doc-have-decl 0
+.      nr doc-have-var 0
+.    \}
+.
+.    if \n[doc-have-var] \{\
+.      doc-paragraph
+.      nr doc-have-var 0
+.    \}
+.
+.    nr doc-is-func 1
+.  \}
+.
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  nop \*[doc-Ft-font]\c
+.  doc-print-recursive
+..
+.
+.
+.\" NS doc-have-old-func global register (bool)
+.\" NS   set if 'Ot' has been called
+.
+.nr doc-have-old-func 0
+.
+.
+.\" NS Ot user macro
+.\" NS   old function type (fortran -- no newline)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-have-decl
+.\" NS   doc-have-old-func
+.\" NS   doc-have-var
+.\" NS   doc-is-func
+.\" NS
+.\" NS width register 'Ot' set in doc-common
+.
+.de Ot
+.  nr doc-have-old-func 1
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    if (\n[doc-have-func] : \n[doc-have-decl]) \{\
+.      doc-paragraph
+.      nr doc-have-decl 0
+.      nr doc-have-var 0
+.    \}
+.
+.    if \n[doc-have-var] \{\
+.      doc-paragraph
+.      nr doc-have-var 0
+.    \}
+.
+.    nr doc-is-func 1
+.  \}
+.
+.  if \n[.$] \
+.    nop \*[doc-Ft-font]\$*\c
+.  nop \ \f[]\c
+..
+.
+.
+.\" NS Fa user macro
+.\" NS   function arguments
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Fa' set in doc-common
+.
+.de Fa
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Fa
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Fa function_arguments ... (#\n[.c])
+.  \}
+.
+.  ie \n[doc-func-arg-count] \
+.    doc-do-func
+.  el \{\
+.    nr doc-arg-ptr +1
+.    if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.      nr doc-curr-font \n[.f]
+.      nr doc-curr-size \n[.ps]
+.      nop \*[doc-Fa-font]\c
+.      doc-print-recursive
+.
+.      if \n[doc-in-synopsis-section] \
+.        if \n[doc-have-func] \
+.          br
+.  \}\}
+..
+.
+.
+.\" NS doc-func-arg-count global register
+.\" NS   how many function arguments have been processed so far
+.
+.nr doc-func-arg-count 0
+.
+.
+.\" NS doc-func-arg global string
+.\" NS   work buffer for function name strings
+.
+.ds doc-func-arg
+.
+.
+.\" NS doc-num-func-args global register
+.\" NS   number of function arguments
+.
+.nr doc-num-func-args 0
+.
+.
+.\" NS doc-func-args-processed global register
+.\" NS   function arguments processed so far
+.
+.nr doc-func-args-processed 0
+.
+.
+.\" NS doc-do-func macro
+.\" NS   internal .Fa for .Fc
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-func-arg
+.\" NS   doc-func-arg-count
+.\" NS   doc-func-args-processed
+.\" NS   doc-num-func-args
+.
+.de doc-do-func
+.  if (\n[doc-arg-limit] <= \n[doc-arg-ptr]) \{\
+.    doc-reset-args
+.    return
+.  \}
+.
+.  nr doc-arg-ptr +1
+.
+.  ds doc-func-arg
+.  nr doc-num-func-args 0
+.  nr doc-func-args-processed 0
+.
+.  doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
+.  if (\n[doc-num-func-args] > 1) \
+.    ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
+.
+.  if (\n[doc-func-arg-count] > 1) \{\
+.    nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
+.    if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
+.      if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
+.        nop ,\)\c
+.    nop \)\*[doc-space\n[doc-arg-ptr]]\*[doc-Fa-font]\c
+.    nop \)\*[doc-arg\n[doc-arg-ptr]]\f[]\s[0]\c
+.  \}
+.
+.  if (\n[doc-func-arg-count] == 1) \{\
+.    nop \)\*[doc-Fa-font]\*[doc-arg\n[doc-arg-ptr]]\c
+.    nop \f[]\s[0]\c
+.  \}
+.  nr doc-func-arg-count +1
+.  doc-do-func
+..
+.
+.
+.\" NS doc-have-func global register (bool)
+.\" NS   whether we have more than one function in synopsis
+.
+.nr doc-have-func 0
+.
+.
+.\" NS Fn user macro
+.\" NS   functions
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-have-decl
+.\" NS   doc-have-func
+.\" NS   doc-have-var
+.\" NS   doc-indent-synopsis
+.\" NS   doc-is-func
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Fn' set in doc-common
+.
+.de Fn
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Fn
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    \" if there is/has been more than one subroutine declaration
+.    ie \n[doc-is-func] \{\
+.      br
+.      nr doc-have-var 0
+.      nr doc-have-decl 0
+.      nr doc-is-func 0
+.    \}
+.    el \{\
+.      if \n[doc-have-func] \{\
+.        doc-paragraph
+.        nr doc-have-var 0
+.        nr doc-have-decl 0
+.    \}\}
+.
+.    if \n[doc-have-decl] \{\
+.      doc-paragraph
+.      nr doc-have-var 0
+.    \}
+.
+.    if \n[doc-have-var] \{\
+.      doc-paragraph
+.      nr doc-have-decl 0
+.    \}
+.
+.    nr doc-have-func 1
+.    nr doc-is-func 0
+.
+.    br
+.    if !\n[doc-indent-synopsis] \
+.      nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
+.    if !\n[doc-indent-synopsis-active] \
+.      in +\n[doc-indent-synopsis]u
+.    ti -\n[doc-indent-synopsis]u
+.  \}
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  if (\n[doc-arg-limit] < \n[doc-arg-ptr]) \{\
+.    tm Usage: .Fn function_name [function_arg] ... (#\n[.c])
+.    doc-reset-args
+.    return
+.  \}
+.
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
+.  nop \f[]\s[0]\*[lp]\)\c
+.
+.  nr doc-arg-ptr +1
+.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      nop \*[doc-Fa-font]\c
+.      doc-do-func-args
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.  \}\}
+.
+.  nop \)\*[rp]\)\c
+.  if \n[doc-in-synopsis-section] \
+.    nop \);\)\c
+.
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    \" output the space (if needed)
+.    nr doc-arg-ptr -1
+.    nop \)\*[doc-space\n[doc-arg-ptr]]\c
+.    nr doc-arg-ptr +1
+.
+.    doc-print-recursive
+.  \}
+.  el \
+.    doc-print-and-reset
+.
+.  if \n[doc-in-synopsis-section] \
+.    if !\n[doc-indent-synopsis-active] \
+.      in -\n[doc-indent-synopsis]u
+..
+.
+.
+.\" NS doc-do-func-args macro
+.\" NS   handle function arguments
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-argXXX
+.\" NS   doc-func-arg
+.\" NS   doc-func-args-processed
+.\" NS   doc-num-func-args
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-ddfa
+.
+.de doc-do-func-args
+.  if \n[doc-in-synopsis-section] \{\
+.    ds doc-func-arg
+.    nr doc-num-func-args 0
+.    nr doc-func-args-processed 0
+.
+.    doc-build-func-string \*[doc-arg\n[doc-arg-ptr]]
+.    if (\n[doc-num-func-args] > 1) \
+.      ds doc-arg\n[doc-arg-ptr] "\*[doc-func-arg]
+.  \}
+.
+.  nop \)\*[doc-arg\n[doc-arg-ptr]]\c
+.  nr doc-arg-ptr +1
+.
+.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    if (\n[doc-type\n[doc-arg-ptr]] == 2) \{\
+.      nr doc-reg-ddfa (\n[doc-arg-ptr] - 1)
+.      nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\|\c
+.      if !"\*[doc-arg\n[doc-arg-ptr]]"/*" \
+.        if !"\*[doc-arg\n[doc-arg-ptr]]"*/" \
+.          nop ,\)\c
+.      nop \)\*[doc-space\n[doc-reg-ddfa]]\f[]\s[0]\|\c
+.      doc-do-func-args
+.  \}\}
+..
+.
+.
+.\" NS doc-saved-nesting-level global register
+.
+.nr doc-saved-nesting-level 0
+.
+.
+.\" NS doc-in-func-enclosure global register (bool)
+.
+.nr doc-in-func-enclosure 0
+.
+.
+.\" NS Fo user macro
+.\" NS   function open
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-func-arg-count
+.\" NS   doc-have-decl
+.\" NS   doc-have-func
+.\" NS   doc-have-var
+.\" NS   doc-in-func-enclosure
+.\" NS   doc-indent-synopsis
+.\" NS   doc-is-func
+.\" NS   doc-macro-name
+.\" NS   doc-saved-nesting-level
+.\" NS
+.\" NS width register 'Fo' set in doc-common
+.
+.de Fo
+.  if (\n[doc-in-func-enclosure]) \{\
+.    tm mdoc error: .Fo/.Fc can't be nested (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-saved-nesting-level \n[doc-nesting-level]
+.  nr doc-in-func-enclosure 1
+.
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ds doc-macro-name Fo
+.      doc-parse-args \$@
+.    \}
+.    el \
+.      tm Usage: .Fo function_name (#\n[.c])
+.  \}
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    \" if there is/has been more than one subroutine declaration
+.    ie \n[doc-is-func] \{\
+.      br
+.      nr doc-have-var 0
+.      nr doc-have-decl 0
+.      nr doc-is-func 0
+.    \}
+.    el \{\
+.      if \n[doc-have-func] \{\
+.        doc-paragraph
+.        nr doc-have-var 0
+.        nr doc-have-decl 0
+.    \}\}
+.
+.    if \n[doc-have-decl] \{\
+.      doc-paragraph
+.      nr doc-have-var 0
+.    \}
+.
+.    if \n[doc-have-var] \{\
+.      doc-paragraph
+.      nr doc-have-decl 0
+.    \}
+.
+.    nr doc-have-func 1
+.    nr doc-is-func 0
+.
+.    br
+.    if !\n[doc-indent-synopsis] \
+.      nr doc-indent-synopsis (4u * \n[doc-fixed-width]u)
+.  \}
+.
+.  \" start function box
+.  box doc-func-box
+.  ev doc-func-env
+.  evc 0
+.  in 0
+.  nf
+.
+.  nr doc-arg-ptr +1
+.  doc-print-prefixes
+.  if (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-func-arg-count 1
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.
+.    nop \*[doc-Fn-font]\*[doc-arg\n[doc-arg-ptr]]\c
+.    nop \f[]\s[0]\*[lp]\)\c
+.    doc-reset-args
+.  \}
+..
+.
+.
+.\" NS Fc user macro
+.\" NS   function close
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-func-arg-count
+.\" NS   doc-in-func-enclosure
+.\" NS   doc-saved-nesting-level
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'Fc' set in doc-common
+.
+.de Fc
+.  if !\n[doc-in-func-enclosure] \{\
+.    tm mdoc warning: Extraneous .Fc (#\n[.c])
+.    return
+.  \}
+.
+.  if \n[.$] \{\
+.    ds doc-macro-name Fc
+.    \" the first (dummy) argument is used to get the correct spacing
+.    doc-parse-args \) \$@
+.  \}
+.
+.  if !(\n[doc-saved-nesting-level] == \n[doc-nesting-level]) \
+.    tm mdoc warning: Unbalanced enclosure commands within .Fo/.Fc
+.
+.  nr doc-func-arg-count 0
+.  nr doc-in-func-enclosure 0
+.
+.  ie \n[doc-in-synopsis-section] \
+.    nop \|\*[rp];\)
+.  el \
+.    nop \|\*[rp]\)
+.
+.  \" finish function box
+.  br
+.  ev
+.  box
+.  chop doc-func-box
+.  unformat doc-func-box
+.
+.  if \n[doc-in-synopsis-section] \{\
+.    if !\n[doc-indent-synopsis-active] \
+.      in +\n[doc-indent-synopsis]u
+.    ti -\n[doc-indent-synopsis]u
+.  \}
+.
+.  nh
+.  nop \*[doc-func-box]\c
+.
+.  nr doc-arg-ptr +1
+.  ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    doc-print-recursive
+.  \}
+.  el \
+.    doc-print-and-reset
+.
+.  if \n[doc-in-synopsis-section] \
+.    if !\n[doc-indent-synopsis-active] \
+.      in -\n[doc-indent-synopsis]u
+..
+.
+.
+.\" NS doc-build-func-string macro
+.\" NS   collect function arguments and set hard spaces in between
+.\" NS
+.\" NS modifies:
+.\" NS   doc-func-arg
+.\" NS   doc-func-args-processed
+.\" NS   doc-num-func-args
+.
+.de doc-build-func-string
+.  if !\n[doc-num-func-args] \{\
+.    nr doc-num-func-args \n[.$]
+.    nr doc-func-args-processed 0
+.    ds doc-func-arg
+.  \}
+.
+.  nr doc-func-args-processed +1
+.  as doc-func-arg "\$1
+.
+.  if (\n[doc-func-args-processed] < \n[doc-num-func-args]) \{\
+.    as doc-func-arg "\*[doc-hard-space]
+.
+.    shift
+.    doc-build-func-string \$@
+.  \}
+..
+.
+.
+.\" Very crude references: Stash all reference info into boxes, print
+.\" out reference on .Re macro and clean up.  Ordering very limited, no
+.\" fancy citations, but can do articles, journals, and books -- need to
+.\" add several missing options (like city etc).  Should be able to grab
+.\" a refer entry, massage it a wee bit (prefix a '.' to the %[A-Z]) and
+.\" not worry (ha!).
+.
+.
+.\" NS doc-is-reference global register (bool)
+.\" NS   set if in reference
+.
+.nr doc-is-reference 0
+.
+.
+.\" NS doc-reference-count global register
+.\" NS   reference element counter
+.
+.nr doc-reference-count 0
+.
+.
+.\" NS Rs user macro
+.\" NS   reference start
+.\" NS
+.\" NS modifies:
+.\" NS   doc-is-reference
+.\" NS   doc-reference-count
+.\" NS
+.\" NS width register 'Rs' set in doc-common
+.
+.de Rs
+.  ie \n[.$] \
+.    tm Usage: .Rs (does not take arguments) (#\n[.c])
+.  el \{\
+.    nr doc-is-reference 1
+.    doc-reset-reference
+.    if \n[doc-in-see-also-section] \
+.      doc-paragraph
+.    nr doc-reference-count 0
+.  \}
+..
+.
+.
+.\" NS Re user macro
+.\" NS   reference end
+.\" NS
+.\" NS modifies:
+.\" NS   doc-is-reference
+.\" NS
+.\" NS width register 'Re' set in doc-common
+.
+.de Re
+.  ie \n[.$] \
+.    tm Usage: .Re (does not take arguments) (#\n[.c])
+.  el \{\
+.    if !\n[doc-is-reference] \{\
+.      tm mdoc warning: Extraneous .Re (#\n[.c])
+.      return
+.    \}
+.    doc-print-reference
+.    doc-reset-reference
+.    nr doc-is-reference 0
+.  \}
+..
+.
+.
+.\" NS doc-reset-reference macro
+.\" NS   reference cleanup
+.\" NS
+.\" NS modifies:
+.\" NS   doc-author-count
+.\" NS   doc-author-nameXXX
+.\" NS   doc-book-count
+.\" NS   doc-book-name
+.\" NS   doc-city-count
+.\" NS   doc-city-name
+.\" NS   doc-corporate-count
+.\" NS   doc-corporate-name
+.\" NS   doc-date
+.\" NS   doc-date-count
+.\" NS   doc-issue-count
+.\" NS   doc-issue-name
+.\" NS   doc-journal-count
+.\" NS   doc-journal-name
+.\" NS   doc-optional-count
+.\" NS   doc-optional-string
+.\" NS   doc-page-number-count
+.\" NS   doc-page-number-string
+.\" NS   doc-publisher-count
+.\" NS   doc-publisher-name
+.\" NS   doc-reference-count
+.\" NS   doc-reference-title-count
+.\" NS   doc-reference-title-name
+.\" NS   doc-reference-title-name-for-book
+.\" NS   doc-report-count
+.\" NS   doc-report-name
+.\" NS   doc-url-count
+.\" NS   doc-url-name
+.\" NS   doc-volume-count
+.\" NS   doc-volume-name
+.
+.de doc-reset-reference
+.  while (\n[doc-author-count]) \{\
+.    ds doc-author-name\n[doc-author-count]
+.    nr doc-author-count -1
+.  \}
+.  nr doc-journal-count 0
+.  nr doc-issue-count 0
+.  nr doc-optional-count 0
+.  nr doc-corporate-count 0
+.  nr doc-report-count 0
+.  nr doc-reference-title-count 0
+.  nr doc-url-count 0
+.  nr doc-volume-count 0
+.  nr doc-city-count 0
+.  nr doc-date-count 0
+.  nr doc-page-number-count 0
+.  nr doc-book-count 0
+.  nr doc-publisher-count 0
+.  nr doc-reference-count 0
+.
+.  ds doc-journal-name
+.  ds doc-issue-name
+.  ds doc-optional-string
+.  ds doc-corporate-name
+.  ds doc-report-name
+.  ds doc-reference-title-name
+.  ds doc-reference-title-name-for-book
+.  ds doc-url-name
+.  ds doc-volume-name
+.  ds doc-city-name
+.  ds doc-date
+.  ds doc-page-number-string
+.  ds doc-book-name
+.  ds doc-publisher-name
+..
+.
+.
+.\" NS doc-finish-reference macro
+.\" NS   auxiliary macro for doc-print-reference
+.\" NS
+.\" NS modifies:
+.\" NS   doc-reference-count
+.
+.de doc-finish-reference
+.  nr doc-reference-count -\$1
+.  ie \n[doc-reference-count] \
+.    nop \),
+.  el \
+.    nop \).
+..
+.
+.
+.\" NS doc-print-reference macro
+.\" NS   reference print
+.\" NS
+.\" NS modifies:
+.\" NS   doc-reference-count
+.
+.de doc-print-reference
+.
+.  nh
+.
+.  if \n[doc-author-count] \{\
+.    doc-print-reference-authors
+.    nr doc-reference-count -\n[doc-author-count]
+.  \}
+.
+.  if \n[doc-reference-title-count] \{\
+.    unformat doc-reference-title-name
+.    chop doc-reference-title-name
+.    unformat doc-reference-title-name-for-book
+.    chop doc-reference-title-name-for-book
+.    ie ((\n[doc-journal-count] == 1) : (\n[doc-book-count] == 1)) \{\
+.      nop \)\*[Lq]\)\*[doc-reference-title-name-for-book]\)\*[Rq]\c
+.      doc-finish-reference \n[doc-reference-title-count]
+.    \}
+.    el \{\
+.      nop \*[doc-reference-title-name]\c
+.      doc-finish-reference \n[doc-reference-title-count]
+.  \}\}
+.
+.  if \n[doc-book-count] \{\
+.    unformat doc-book-name
+.    chop doc-book-name
+.    nop \*[doc-book-name]\c
+.    doc-finish-reference \n[doc-book-count]
+.  \}
+.
+.  if \n[doc-publisher-count] \{\
+.    unformat doc-publisher-name
+.    chop doc-publisher-name
+.    nop \*[doc-publisher-name]\c
+.    doc-finish-reference \n[doc-publisher-count]
+.  \}
+.
+.  if \n[doc-journal-count] \{\
+.    unformat doc-journal-name
+.    chop doc-journal-name
+.    nop \*[doc-journal-name]\c
+.    doc-finish-reference \n[doc-journal-count]
+.  \}
+.
+.  if \n[doc-report-count] \{\
+.    unformat doc-report-name
+.    chop doc-report-name
+.    nop \*[doc-report-name]\c
+.    doc-finish-reference \n[doc-report-count]
+.  \}
+.
+.  if \n[doc-issue-count] \{\
+.    unformat doc-issue-name
+.    chop doc-issue-name
+.    nop \*[doc-issue-name]\c
+.    doc-finish-reference \n[doc-issue-count]
+.  \}
+.
+.  if \n[doc-volume-count] \{\
+.    unformat doc-volume-name
+.    chop doc-volume-name
+.    nop \*[doc-volume-name]\c
+.    doc-finish-reference \n[doc-volume-count]
+.  \}
+.
+.  if \n[doc-url-count] \{\
+.    unformat doc-url-name
+.    chop doc-url-name
+.    nop \*[doc-url-name]\c
+.    doc-finish-reference \n[doc-url-count]
+.  \}
+.
+.  if \n[doc-page-number-count] \{\
+.    unformat doc-page-number-string
+.    chop doc-page-number-string
+.    nop \*[doc-page-number-string]\c
+.    doc-finish-reference \n[doc-page-number-count]
+.  \}
+.
+.  if \n[doc-corporate-count] \{\
+.    unformat doc-corporate-name
+.    chop doc-corporate-name
+.    nop \*[doc-corporate-name]\c
+.    doc-finish-reference \n[doc-corporate-count]
+.  \}
+.
+.  if \n[doc-city-count] \{\
+.    unformat doc-city-name
+.    chop doc-city-name
+.    nop \*[doc-city-name]\c
+.    doc-finish-reference \n[doc-city-count]
+.  \}
+.
+.  if \n[doc-date-count] \{\
+.    unformat doc-date
+.    chop doc-date
+.    nop \*[doc-date]\c
+.    doc-finish-reference \n[doc-date-count]
+.  \}
+.
+.  if \n[doc-optional-count] \{\
+.    unformat doc-optional-string
+.    chop doc-optional-string
+.    nop \*[doc-optional-string]\c
+.    doc-finish-reference \n[doc-optional-count]
+.  \}
+.
+.  if \n[doc-reference-count] \
+.    tm mdoc warning: unresolved reference problem
+.
+.  hy \n[doc-hyphen-flags]
+..
+.
+.
+.\" NS doc-print-reference-authors macro
+.\" NS   print out reference authors
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-dpra
+.\" NS   doc-str-dpra
+.
+.ds doc-str-dpra "and
+.
+.de doc-print-reference-authors
+.  nr doc-reg-dpra 1
+.
+.  while (\n[doc-reg-dpra] < \n[doc-author-count]) \{\
+.    unformat doc-author-name\n[doc-reg-dpra]
+.    chop doc-author-name\n[doc-reg-dpra]
+.    ie (\n[doc-author-count] > 2) \
+.      nop \)\*[doc-author-name\n[doc-reg-dpra]],
+.    el \
+.      nop \)\*[doc-author-name\n[doc-reg-dpra]]
+.    nr doc-reg-dpra +1
+.  \}
+.
+.  unformat doc-author-name\n[doc-reg-dpra]
+.  chop doc-author-name\n[doc-reg-dpra]
+.  if (\n[doc-author-count] > 1) \
+.    nop \)\*[doc-str-dpra]
+.  nop \)\*[doc-author-name\n[doc-reg-dpra]],
+..
+.
+.
+.\" NS doc-author-count global register
+.\" NS   counter of author references
+.
+.nr doc-author-count 0
+.
+.
+.\" NS doc-author-nameXXX global box
+.\" NS   array of author names
+.\" NS
+.\" NS limit:
+.\" NS   doc-author-count
+.
+.ds doc-author-name0
+.
+.
+.\" NS %A user macro
+.\" NS   reference author(s)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-author-count
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%A
+.\" NS
+.\" NS width register '%A' set in doc-common
+.
+.de %A
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%A author_name ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-author-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %A
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" save to reference box
+.  box doc-author-name\n[doc-author-count]
+.  ev doc-env-%A
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-book-count global register
+.\" NS   counter of book references
+.
+.nr doc-book-count 0
+.
+.
+.\" NS doc-book-name global box
+.\" NS   string of collected book references
+.
+.ds doc-book-name
+.
+.
+.\" NS %B user macro
+.\" NS   [reference] book name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-book-count
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%B
+.\" NS
+.\" NS width register '%B' set in doc-common
+.
+.de %B
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%B book_name ... (#\n[.c])
+.    return
+.  \}
+.
+.  if \n[doc-is-reference] \{\
+.    nr doc-book-count +1
+.    nr doc-reference-count +1
+.  \}
+.
+.  ds doc-macro-name %B
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  ie \n[doc-is-reference] \{\
+.    \" append to reference box
+.    boxa doc-book-name
+.    ev doc-env-%B
+.    evc 0
+.    in 0
+.    nf
+.    nop \*[doc-Em-font]\c
+.    doc-do-references
+.  \}
+.  el \{\
+.    nop \*[doc-Em-font]\c
+.    doc-print-recursive
+.  \}
+..
+.
+.
+.\" NS doc-city-count global register
+.\" NS   counter of city references
+.
+.nr doc-city-count 0
+.
+.
+.\" NS doc-city-name global box
+.\" NS   string of collected city references
+.
+.ds doc-city-name
+.
+.
+.\" NS %C user macro
+.\" NS   [reference] city
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-city-count
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%C
+.\" NS
+.\" NS width register '%C' set in doc-common
+.
+.de %C
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%C city_name ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-city-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %C
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-city-name
+.  ev doc-env-%C
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-date-count global register
+.\" NS   counter of date references
+.
+.nr doc-date-count 0
+.
+.
+.\" NS doc-date global box
+.\" NS   string of collected date references
+.
+.ds doc-date
+.
+.
+.\" NS %D user macro
+.\" NS   [reference] date
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-date-count
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%D
+.\" NS
+.\" NS width register '%D' set in doc-common
+.
+.de %D
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%D date ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-date-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %D
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-date
+.  ev doc-env-%D
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-publisher-count global register
+.\" NS   counter of publisher references
+.
+.nr doc-publisher-count 0
+.
+.
+.\" NS doc-publisher-name global box
+.\" NS   string of collected publisher references
+.
+.ds doc-publisher-name
+.
+.
+.\" NS %I user macro
+.\" NS   [reference] issuer/publisher name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-publisher-count
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%I
+.\" NS
+.\" NS width register '%I' set in doc-common
+.
+.de %I
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%I issuer/publisher_name ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-publisher-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %I
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-publisher-name
+.  ev doc-env-%I
+.  evc 0
+.  in 0
+.  nf
+.  nop \*[doc-Em-font]\c
+.  doc-do-references
+..
+.
+.
+.\" NS doc-journal-count global register
+.\" NS   counter of journal references
+.
+.nr doc-journal-count 0
+.
+.
+.\" NS doc-journal-name global box
+.\" NS   string of collected journal references
+.
+.ds doc-journal-name
+.
+.
+.\" NS %J user macro
+.\" NS   [reference] Journal Name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-journal-count
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%J
+.\" NS
+.\" NS width register '%J' set in doc-common
+.
+.de %J
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%J journal_name ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-journal-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %J
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-journal-name
+.  ev doc-env-%J
+.  evc 0
+.  in 0
+.  nf
+.  nop \*[doc-Em-font]\c
+.  doc-do-references
+..
+.
+.
+.\" NS doc-issue-count global register
+.\" NS   counter of issue number references
+.
+.nr doc-issue-count 0
+.
+.
+.\" NS doc-issue-name global box
+.\" NS   string of collected issue number references
+.
+.ds doc-issue-name
+.
+.
+.\" NS %N user macro
+.\" NS   [reference] issue number
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-issue-count
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%N
+.\" NS
+.\" NS width register '%N' set in doc-common
+.
+.de %N
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%N issue_number ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-issue-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %N
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-issue-name
+.  ev doc-env-%N
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-optional-count global register
+.\" NS   counter of optional information references
+.
+.nr doc-optional-count 0
+.
+.
+.\" NS doc-optional-string global box
+.\" NS   string of collected optional information references
+.
+.ds doc-optional-string
+.
+.
+.\" NS %O user macro
+.\" NS   [reference] optional information
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-optional-count
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%O
+.\" NS
+.\" NS width register '%O' set in doc-common
+.
+.de %O
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%O optional_information ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-optional-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %O
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-optional-string
+.  ev doc-env-%O
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-page-number-count global register
+.\" NS   counter of page number references
+.
+.nr doc-page-number-count 0
+.
+.
+.\" NS doc-page-number-string global box
+.\" NS   string of collected page number references
+.
+.ds doc-page-number-string
+.
+.
+.\" NS %P user macro
+.\" NS   [reference] page numbers
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-page-number-count
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%P
+.\" NS
+.\" NS width register '%P' set in doc-common
+.
+.de %P
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%P page_number ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-page-number-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %P
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-page-number-string
+.  ev doc-env-%P
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-corporate-count global register
+.\" NS   counter of corporate references
+.
+.nr doc-corporate-count 0
+.
+.
+.\" NS doc-corporate-name global box
+.\" NS   string of collected corporate references
+.
+.ds doc-corporate-name
+.
+.
+.\" NS %Q user macro
+.\" NS   corporate or foreign author
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-corporate-count
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%Q
+.\" NS
+.\" NS width register '%Q' set in doc-common
+.
+.de %Q
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%Q corporate_or_foreign_author ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-corporate-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %Q
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-corporate-name
+.  ev doc-env-%Q
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-report-count global register
+.\" NS   counter of report references
+.
+.nr doc-report-count 0
+.
+.
+.\" NS doc-report-name global box
+.\" NS   string of collected report references
+.
+.ds doc-report-name
+.
+.
+.\" NS %R user macro
+.\" NS   [reference] report name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS   doc-report-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%R
+.\" NS
+.\" NS width register '%R' set in doc-common
+.
+.de %R
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%R reference_report ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-report-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %R
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-report-name
+.  ev doc-env-%R
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-reference-title-count global register
+.\" NS   counter of reference title references
+.
+.nr doc-reference-title-count 0
+.
+.
+.\" NS doc-reference-title-name global box
+.\" NS   string of collected reference title references
+.
+.ds doc-reference-title-name
+.
+.
+.\" NS doc-reference-title-name-for-book global box
+.\" NS   string of collected reference title references
+.\" NS   (saved with another font; this is a shortcoming of groff)
+.
+.ds doc-reference-title-name-for-book
+.
+.
+.\" NS %T user macro
+.\" NS   reference title
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-title-count
+.\" NS   doc-report-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%T
+.\" NS
+.\" NS width register '%T' set in doc-common
+.
+.de %T
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%T reference_title ... (#\n[.c])
+.    return
+.  \}
+.
+.  if \n[doc-is-reference] \{\
+.    nr doc-reference-title-count +1
+.    nr doc-reference-count +1
+.  \}
+.
+.  ds doc-macro-name %T
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  ie \n[doc-is-reference] \{\
+.    \" append to reference box
+.    boxa doc-reference-title-name-for-book
+.    ev doc-env-%T
+.    evc 0
+.    in 0
+.    nf
+.    nop \*[doc-No-font]\c
+.    doc-do-references
+.
+.    \" do it a second time with another font
+.    ds doc-macro-name %T
+.    doc-parse-args \$@
+.
+.    nr doc-arg-ptr +1
+.    nr doc-curr-font \n[.f]
+.    nr doc-curr-size \n[.ps]
+.    boxa doc-reference-title-name
+.    ev doc-env-%T
+.    evc 0
+.    in 0
+.    nf
+.    nop \*[doc-Em-font]\c
+.    doc-do-references
+.  \}
+.  el \{\
+.    nop \*[doc-Em-font]\c
+.    doc-print-recursive
+.  \}
+..
+.
+.
+.\" NS doc-url-count global register
+.\" NS   counter of hypertext references
+.
+.nr doc-url-count 0
+.
+.
+.\" NS doc-url-name global box
+.\" NS   string of collected hypertext references
+.
+.ds doc-url-name
+.
+.
+.\" NS doc-volume-count global register
+.\" NS   counter of reference title references
+.
+.nr doc-volume-count 0
+.
+.
+.\" NS doc-volume-name global box
+.\" NS   string of collected volume references
+.
+.ds doc-volume-name
+.
+.
+.\" NS %U user macro
+.\" NS   hypertext reference
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS   doc-url-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%U
+.\" NS
+.\" NS width register '%U' set in doc-common
+.
+.de %U
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%U URL ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-url-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %U
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-url-name
+.  ev doc-env-%U
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS %V user macro
+.\" NS   reference volume
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS   doc-reference-count
+.\" NS   doc-volume-count
+.\" NS
+.\" NS local variables:
+.\" NS   doc-env-%V
+.\" NS
+.\" NS width register '%V' set in doc-common
+.
+.de %V
+.  if (\n[doc-arg-limit] : (\n[.$] == 0)) \{\
+.    tm Usage: .%V volume ... (#\n[.c])
+.    return
+.  \}
+.
+.  nr doc-volume-count +1
+.  nr doc-reference-count +1
+.
+.  ds doc-macro-name %V
+.  doc-parse-args \$@
+.
+.  nr doc-arg-ptr +1
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.
+.  \" append to reference box
+.  boxa doc-volume-name
+.  ev doc-env-%V
+.  evc 0
+.  in 0
+.  nf
+.  doc-do-references
+..
+.
+.
+.\" NS doc-do-references macro
+.\" NS   reference recursion routine
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS
+.\" NS local variables:
+.\" NS   doc-reg-ddr
+.\" NS   doc-reg-ddr1
+.
+.de doc-do-references
+.  if !\n[doc-is-reference] \
+.    tm mdoc error: .\*[doc-macro-name] found outside of .Rs ... .Re (#\n[.c])
+.
+.  nr doc-reg-ddr1 \n[doc-type\n[doc-arg-ptr]]
+.
+.  ie (\n[doc-reg-ddr1] == 1) \{\
+.    \" .nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.    doc-append-arg \c 3
+.    \*[doc-arg\n[doc-arg-ptr]]
+.  \}
+.  el \{\
+.    nop \)\*[doc-arg\n[doc-arg-ptr]]\c
+.
+.    ie (\n[doc-arg-limit] == \n[doc-arg-ptr]) \{\
+.      \" finish reference box
+.      br
+.      ev
+.      boxa
+.
+.      doc-reset-args
+.    \}
+.    el \{\
+.      nr doc-reg-ddr \n[doc-arg-ptr]
+.      nr doc-arg-ptr +1
+.      nop \)\*[doc-space\n[doc-reg-ddr]]\c
+.      doc-do-references
+.  \}\}
+..
+.
+.
+.\" NS Hf user macro
+.\" NS   source include header files.
+.\" NS
+.\" NS modifies:
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS
+.\" NS width register 'Hf' set in doc-common
+.
+.de Hf
+.  ie ((\n[.$] == 1) & (\n[doc-arg-limit] == 0)) \{\
+.    doc-paragraph
+.    nop File:
+.    Pa \$1
+.
+.    Bd -literal
+.    so \$1
+.    Ed
+.
+.    doc-paragraph
+.  \}
+.  el \
+.    Usage: .Hf file (#\n[.c])
+..
+.
+.
+.\" NS doc-have-author global register (bool)
+.\" NS   set in 'An'
+.
+.nr doc-have-author 0
+.
+.
+.\" NS An user macro
+.\" NS   author name
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-have-author
+.\" NS   doc-macro-name
+.\" NS
+.\" NS width register 'An' set in doc-common
+.
+.de An
+.  if !\n[doc-arg-limit] \{\
+.    ie \n[.$] \{\
+.      ie        "\$1"-nosplit" \
+.        nr doc-in-authors-section 0
+.      el \{ .ie "\$1"-split" \
+.        nr doc-in-authors-section 1
+.      el \{\
+.        ds doc-macro-name An
+.        doc-parse-args \$@
+.    \}\}\}
+.    el \{\
+.      tm1 "Usage: .An {-nosplit | -split}
+.      tm1 "       .An author_name ... (#\n[.c])
+.  \}\}
+.
+.  if \n[doc-in-authors-section] \{\
+.    ie \n[doc-have-author] \
+.      br
+.    el \
+.      nr doc-have-author 1
+.  \}
+.
+.  if \n[doc-arg-limit] \{\
+.    nr doc-arg-ptr +1
+.    ie (\n[doc-arg-limit] >= \n[doc-arg-ptr]) \{\
+.      nr doc-curr-font \n[.f]
+.      nr doc-curr-size \n[.ps]
+.      doc-print-recursive
+.    \}
+.    el \{\
+.      tm Usage: .An author_name ... (#\n[.c])
+.      doc-reset-args
+.  \}\}
+..
+.
+.
+.\" NS Rv user macro
+.\" NS   return values
+.\" NS
+.\" NS width register 'Rv' set in doc-common
+.\" NS
+.\" NS local variables:
+.\" NS   doc-str-Rv-std-prefix
+.\" NS   doc-str-Rv-std-suffix
+.\" NS   doc-str-Rv-stds-prefix
+.\" NS   doc-str-Rv-stds-and
+.\" NS   doc-str-Rv-stds-suffix
+.\" NS   doc-str-Rv-std0
+.
+.ds doc-str-Rv-std-prefix "The
+.ds doc-str-Rv-std-suffix "function returns the value\~0 if successful;
+.as doc-str-Rv-std-suffix " otherwise the value\~\-1 is returned and
+.as doc-str-Rv-std-suffix " the global variable \*[doc-Va-font]errno\f[]
+.as doc-str-Rv-std-suffix " is set to indicate the error.
+.
+.ds doc-str-Rv-stds-prefix "The
+.ds doc-str-Rv-stds-and    "and
+.ds doc-str-Rv-stds-suffix "functions return the value\~0 if successful;
+.as doc-str-Rv-stds-suffix " otherwise the value\~\-1 is returned and
+.as doc-str-Rv-stds-suffix " the global variable \*[doc-Va-font]errno\f[]
+.as doc-str-Rv-stds-suffix " is set to indicate the error.
+.
+.ds doc-str-Rv-std0 "Upon successful completion, the value\~0 is returned;
+.as doc-str-Rv-std0 " otherwise the value\~\-1 is returned and
+.as doc-str-Rv-std0 " the global variable \*[doc-Va-font]errno\f[]
+.as doc-str-Rv-std0 " is set to indicate the error.
+.
+.de Rv
+.
+.\" XXX: what does this function without '-std'?
+.
+.  if \n[doc-arg-limit] \{\
+.    tm Usage: .Rv not callable by other macros (#\n[.c])
+.    doc-reset-args
+.    return
+.  \}
+.
+.  if !\n[.$] \{\
+.    tm Usage: .Rv [-std] [<function> ...] (#\n[.c])
+.    return
+.  \}
+.
+.  if "\$1"-std" \{\
+.    nr doc-reg-Rv \*[doc-section]
+.    if ((\n[doc-reg-Rv] < 2) : (\n[doc-reg-Rv] > 3)) \
+.      tm Usage: .Rv -std in sections 2 and 3 only (#\n[.c])
+.    br
+.    shift
+.    ie (\n[.$] > 1) \{\
+.      nop \)\*[doc-str-Rv-stds-prefix]
+.      nr doc-reg-Rv 1
+.      while (\n[doc-reg-Rv] < \n[.$]) \{\
+.        ie (\n[.$] > 2) \
+.          Fn \$\n[doc-reg-Rv] ,
+.        el \
+.          Fn \$\n[doc-reg-Rv]
+.        nr doc-reg-Rv +1
+.      \}
+.      nop \)\*[doc-str-Rv-stds-and]
+.      Fn \$\n[.$]
+.      nop \)\*[doc-str-Rv-stds-suffix]
+.    \}
+.    el \{ .ie (\n[.$] == 1) \{\
+.      nop \)\*[doc-str-Rv-std-prefix]
+.      Fn \$1
+.      nop \)\*[doc-str-Rv-std-suffix]
+.    \}
+.    el \{\
+.      nop \)\*[doc-str-Rv-std0]
+.  \}\}\}
+..
+.
+.
+.\" NS Ex user macro
+.\" NS   exit status
+.\" NS
+.\" NS width register 'Ex' set in doc-common
+.\" NS
+.\" NS local variables:
+.\" NS   doc-str-Ex-std-prefix
+.\" NS   doc-str-Ex-std-suffix
+.
+.ds doc-str-Ex-std-prefix "The
+.ds doc-str-Ex-std-suffix "utility exits\~0 on success,
+.as doc-str-Ex-std-suffix " and\~>0 if an error occurs.
+.
+.ds doc-str-Ex-stds-prefix "The
+.als doc-str-Ex-stds-and doc-str-Rv-stds-and
+.ds doc-str-Ex-stds-suffix "utilities exit\~0 on success,
+.as doc-str-Ex-stds-suffix " and\~>0 if an error occurs.
+.
+.de Ex
+.
+.\" XXX: what does this function without '-std'?
+.
+.  if \n[doc-arg-limit] \{\
+.    tm Usage: .Ex not callable by other macros (#\n[.c])
+.    doc-reset-args
+.    return
+.  \}
+.
+.  if !\n[.$] \{\
+.    tm Usage: .Ex [-std] [<utility> ...] (#\n[.c])
+.    return
+.  \}
+.
+.  if "\$1"-std" \{\
+.    nr doc-reg-Ex \*[doc-section]
+.    if !((\n[doc-reg-Ex] == 1) : (\n[doc-reg-Ex] == 6) : (\n[doc-reg-Ex] == 8)) \
+.      tm Usage: .Ex -std in sections 1, 6 and 8 only (#\n[.c])
+.    br
+.    shift
+.    ie (\n[.$] > 1) \{\
+.      nop \)\*[doc-str-Ex-stds-prefix]
+.      nr doc-reg-Ex 1
+.      while (\n[doc-reg-Ex] < \n[.$]) \{\
+.        ie (\n[.$] > 2) \
+.          Nm \$\n[doc-reg-Ex] ,
+.        el \
+.          Nm \$\n[doc-reg-Ex]
+.        nr doc-reg-Ex +1
+.      \}
+.      nop \)\*[doc-str-Ex-stds-and]
+.      Nm \$\n[.$]
+.      nop \)\*[doc-str-Ex-stds-suffix]
+.    \}
+.    el \{\
+.      nop \)\*[doc-str-Ex-std-prefix]
+.      Nm \$1
+.      nop \)\*[doc-str-Ex-std-suffix]
+.  \}\}
+..
+.
+.
+.\" NS Mt user macro
+.\" NS   mailto (for conversion to HTML)
+.
+.de Mt
+.  \" XXX: error handling missing
+.  Pa \$@
+..
+.
+.
+.\" NS Lk user macro
+.\" NS   link (for conversion to HTML)
+.\" NS
+.\" NS modifies:
+.\" NS   doc-arg-ptr
+.\" NS   doc-curr-font
+.\" NS   doc-curr-size
+.\" NS   doc-macro-name
+.\" NS
+.\" NS local variables:
+.\" NS   doc-lasttext-Lk
+.\" NS   doc-target-Lk
+.
+.de Lk
+.  if !\n[doc-arg-limit] \{\
+.    ds doc-macro-name Lk
+.    doc-parse-args \$@
+.  \}
+.
+.  if !\n[doc-arg-limit] \
+.    return
+.
+.  \" The first argument is the target URI.
+.  nr doc-arg-ptr +1
+.  ds doc-target-Lk "\*[doc-arg\n[doc-arg-ptr]]
+.  nr doc-arg-ptr +1
+.
+.  \" Search backwards for the first closing punctuation.
+.  nr doc-lasttext-Lk \n[doc-arg-limit]
+.  while (\n[doc-lasttext-Lk] >= \n[doc-arg-ptr]) \{\
+.    if !(\n[doc-type\n[doc-lasttext-Lk]] == 3) \
+.      break
+.    nr doc-lasttext-Lk -1
+.  \}
+.
+.  \" Print the link text, if any.
+.  nr doc-curr-font \n[.f]
+.  nr doc-curr-size \n[.ps]
+.  if (\n[doc-arg-ptr] <= \n[doc-lasttext-Lk]) \{\
+.    nop \*[doc-Em-font]\c
+.    while (\n[doc-arg-ptr] < \n[doc-lasttext-Lk]) \{\
+.      nop \*[doc-arg\n[doc-arg-ptr]]
+.      nr doc-arg-ptr +1
+.    \}
+.    nop \*[doc-arg\n[doc-arg-ptr]]\f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]:
+.    nr doc-arg-ptr +1
+.  \}
+.
+.  \" Print the link target.
+.  nop \*[doc-Sy-font]\*[doc-target-Lk]\c
+.  nop \f[\n[doc-curr-font]]\s[\n[doc-curr-size]u]\c
+.
+.  \" Print the delimiters, if any.
+.  while (\n[doc-arg-ptr] <= \n[doc-arg-limit]) \{\
+.    nop \*[doc-arg\n[doc-arg-ptr]]\c
+.    nr doc-arg-ptr +1
+.  \}
+.  nop \&
+.  doc-reset-args
+..
+.
+.
+.\" NS doc-defunct-macro macro
+.\" NS   this is the skeleton for defunct macros
+.\" NS
+.
+.de doc-defunct-macro
+.  tmc mdoc error: .\$0 defunct
+.  if d doc-\$0-usage \
+.    tmc , \*[doc-\$0-usage]
+.  tm1 " (#\n[.c])
+..
+.
+.
+.\" obsolete macros
+.
+.als Db doc-defunct-macro
+.
+.als Ds doc-defunct-macro
+.
+.als Or doc-defunct-macro
+.ds doc-Or-usage use '|'
+.
+.als Sf doc-defunct-macro
+.ds doc-Sf-usage use .Pf or .Ns
+.
+.
+.rn em e@
+.
+.de em
+.  tm1 "mdoc error: end-macro (.em) respecification is not allowed. (#\n[.c])
+.  tm1 "            Should this have been '.Em ...'?
+.  ab
+..
+.
+.
+.\" NS doc-empty-line macro
+.\" NS   emit warning and print empty line
+.
+.de doc-empty-line
+.  if !\n[doc-display-depth] \
+.    tm mdoc warning: Empty input line #\n[.c]
+.  sp
+..
+.
+.blm doc-empty-line
+.
+.
+.ec
+.
+.
+.\" For UTF-8, map some characters conservatively for the sake of easy
+.\" cut and paste.
+.
+.if '\*[.T]'utf8' \{\
+.  rchar \- - ' `
+.
+.  char \- \N'45'
+.  char  - \N'45'
+.  char  ' \N'39'
+.  char  ` \N'96'
+.\}
+.
+.
+.\" load local modifications
+.mso mdoc.local
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 96cfbb7265ce4e38fca62a7e65fd0a7b01b9f93d..8997ffccc12fa6164305162db89075366022ac05 100644 (file)
@@ -1,5 +1,3 @@
-.\" -*- nroff -*-
-.\"
 .\" dvi.tmac
 .\"
 .nr _C \n(.C
@@ -785,3 +783,13 @@ D\v'-.33m'\s0\v'.33m'
 .  do mso latin1.tmac
 .el \
 .  do mso cp1047.tmac
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/e.tmac b/tmac/e.tmac
deleted file mode 100644 (file)
index 92d3f7a..0000000
+++ /dev/null
@@ -1,2037 +0,0 @@
-.\" -*- nroff -*-
-.\"
-.\"    @(#)e.tmac      2.31 (Berkeley) 5/21/88
-.\"    Modified by James Clark for use with groff.
-.\"
-.\" Copyright (c) 1988 Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that this notice is preserved and that due credit is given
-.\" to the University of California at Berkeley. The name of the University
-.\" may not be used to endorse or promote products derived from this
-.\" software without specific prior written permission. This software
-.\" is provided ``as is'' without express or implied warranty.
-.\"    %beginstrip%
-.\"
-.\"**********************************************************************
-.\"*                                                                   *
-.\"*   ******  - M E   N R O F F / T R O F F   M A C R O S  ******     *
-.\"*                                                                   *
-.\"*   Produced for your edification and enjoyment by:                 *
-.\"*           Eric Allman                                             *
-.\"*           Electronics Research Laboratory                         *
-.\"*           U.C. Berkeley.                                          *
-.\"*   current address:                                                *
-.\"*           Britton-Lee, Inc.                                       *
-.\"*           1919 Addison Street Suite 105                           *
-.\"*           Berkeley, California  94704                             *
-.\"*                                                                   *
-.\"*   VERSION 2.31    First Release: 11 Sept 1978                     *
-.\"*                                                                   *
-.\"*   Documentation is available.                                     *
-.\"*                                                                   *
-.\"**********************************************************************
-.\"
-.\"    Code on .de commands:
-.\"            ***     a user interface macro.
-.\"            &&&     a user interface macro which is redefined
-.\"                    when used to be the real thing.
-.\"            $$$     a macro which may be redefined by the user
-.\"                    to provide variant functions.
-.\"            ---     an internal macro.
-.\"
-.
-.do nr need_eo_h 0
-.do nr need_eo_tl 0
-.do nr need_tl 1
-.
-.do mso devtag.tmac
-.
-.if !\n(.g .ig
-.de @R                 \" --- initialize number register to 0, if undefined
-.if !r\\$1 .nr \\$1 0
-..
-.
-.\" --- check whether grohtml needs end of title/heading
-.de @html_check_need_title
-.do if (\\n[need_eo_tl] == 1) \
-\{\
-.      do nr need_eo_tl 0
-.      do DEVTAG-EO-TL
-.\}
-.do if (\\n[need_tl] == 1) \
-\{\
-.      do DEVTAG-TL
-.      do nr need_tl 0
-.      do nr need_eo_tl 1
-.\}
-.do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
-.do nr need_eo_h 0
-..
-.
-.de @check_need_title
-..
-.
-.ie '\*(.T'html' \
-.      do als check_need_title @html_check_need_title
-.el \
-.      do als check_need_title @check_need_title
-.
-.@R pf
-.if \n(pf .nx
-.
-.if !\n(.g .ig
-.de @S                 \" --- initialize string/macro to empty, if undefined
-.if !d\\$1 .ds \\$1 \" empty
-..
-.
-.@R @\"                        \" debugging level
-.
-.
-.\"            *** INTERNAL GP MACROS ***
-.
-.
-.de @C                 \" --- change ev's, taking info with us
-.nr _S \\n(.s
-.nr _V \\n(.v
-.nr _F \\n(.f
-.nr _J \\n(.j
-.do ds _A \\n[.fam]
-.nr _I \\n(.i
-.ev \\$1
-.ps \\n(_S
-.vs \\n(_Vu
-.ft \\n(_F
-.ad \\n(_J
-.do @fam \\*(_A
-'in \\n(_Iu
-.xl \\n($lu
-.lt \\n($lu
-.rr _S
-.rr _V
-.rr _F
-.rr _I
-.rr _J
-.ls 1
-'ce 0
-..
-.
-.de @D                 \" --- determine display type (Indent, Left, Center)
-.ds |p "\\$3
-.nr _d 0
-.if "\\$2"C" \
-.      nr _d 1
-.if "\\$2"L" \
-.      nr _d 2
-.if "\\$2"I" \
-.      nr _d 3
-.if "\\$2"M" \
-.      nr _d 4
-.if !\\n(_d \
-\{\
-.      nr _d \\$1
-.      ds |p "\\$2
-.\}
-.
-..
-.
-.de @z                 \" --- end macro
-.if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
-.if !"\\n(.z"" \
-\{\
-.      tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
-.      di
-.      ex
-.\}
-.if \\n(?a \
-.      bp                      \" force out final table
-.ds bp
-.ds @b\"                       \" don't start another page
-.br
-.if \n@>1 .tm << @z
-..
-.
-.
-.\"            *** STANDARD HEADERS AND FOOTERS ***
-.
-.
-.ie \n(.g .ds $* \\\\$*
-.el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9
-.
-.de he                 \" *** define header
-.ie !\\n(.$ \
-\{\
-.      rm |4
-.      rm |5
-.\}
-.el \
-\{\
-.      ds |4 "\*($*
-.      ds |5 "\*($*
-.\}
-..
-.
-.de eh                 \" *** define even header
-.ie !\\n(.$ \
-.      rm |4
-.el \
-.      ds |4 "\*($*
-..
-.
-.de oh                 \" *** define odd header
-.ie !\\n(.$ \
-.      rm |5
-.el \
-.      ds |5 "\*($*
-..
-.
-.de fo                 \" *** define footer
-.ie !\\n(.$ \
-\{\
-.      rm |6
-.      rm |7
-.\}
-.el \
-\{\
-.      ds |6 "\*($*
-.      ds |7 "\*($*
-.\}
-..
-.
-.de ef                 \" *** define even foot
-.ie !\\n(.$ \
-.      rm |6
-.el \
-.      ds |6 "\*($*
-..
-.
-.de of                 \" *** define odd footer
-.ie !\\n(.$ \
-.      rm |7
-.el \
-.      ds |7 "\*($*
-..
-.
-.de ep                 \" *** end page (must always be followed by a .bp)
-.if \\n(nl>0 \
-\{\
-.      wh 0
-.      rs
-.      @b
-.\}
-..
-.
-.
-.\"            *** INTERNAL HEADER AND FOOTER MACROS ***
-.
-.
-.de @h                 \" --- header
-.if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
-.if (\\n(.i+\\n(.o)>=\\n(.l \
-.      tm Line \\n(c. -- Offset + indent exceeds line length
-.\" initialize a pile of junk
-.nr ?h \\n(?H                  \" transfer "next page" to "this page"
-.nr ?H 0
-.nr ?c \\n(?C
-.nr ?C 0
-.rn |4 |0
-.rn |5 |1
-.rn |6 |2
-.rn |7 |3
-.nr _w 0                       \" reset max footnote width
-.nr ?W 0                       \" no wide floats this page (yet)
-.nr ?I 1
-.\" begin actual header stuff
-.ev 2
-.rs
-.if \\n(hm>0 \
-.      if !'\*(.T'html' \
-.              sp |\\n(hmu     \" move to header position
-.@t $h\"                       \" output header title
-.if \\n(tm<=0 \
-.      nr tm \n(.Vu
-.if !'\*(.T'html' \
-.      sp |\\n(tmu             \" move to top of text
-.ev
-.mk _k                         \" for columned output
-.if \\n(?n=1 .nm 1             \" restore line numbering if n1 mode
-.nr $c 1                       \" set first column
-.if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
-.ie \\n(?s \
-\{\
-.      nr ?s 0
-.      rs
-'      @b
-.\}
-.el \
-.      @n\"                    \" begin the column
-.if \n@>2 .tm << @h
-..
-.
-.de @n                 \" --- new column or page
-.if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
-.if \\n(bm<=0 \
-.      nr bm \\n(.Vu
-.if (\\n(_w<=\\n($l)&(\\n(?W=0) \
-\{\
-.      nr _b (\\n(ppp*\\n($vu)/200u    \" compute fudge factor (must be < 1P)
-.      if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \
-.              nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu
-.      nr _b +\\n(bmu
-.\}
-.nr _B \\n(_bu
-.ch @f
-.wh -\\n(_bu @f
-.nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case of sweep past
-.if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
-.nr ?f 0                       \" reset footnote flag
-.if \\n(?o \
-\{\
-.      (f _\"                  \" reprocess footnotes which run off page
-.      nf
-.      |o
-.      fi
-.      )f
-.      rm |o
-.\}
-.nr ?o 0
-.if \\n(?T \
-\{\
-.      nr _i \\n(.i
-.      if \\n(?n \
-.              nm \\n(ln
-.      in 0
-.      |h\"                    \" output the table header
-.      in \\n(_iu
-.      if \\n(?n \
-.              nm
-.      rr _i
-.      mk #T                   \" for tbl commands
-.      ns
-.\}
-.if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
-\{\
-.      nr ?a 0                 \" output floating keep
-.      @k |t
-.      if \\n(?w \
-.              mk _k           \" don't overstrike wide keeps
-.      nr ?w 0
-.\}
-.os
-.$H\"                          \" special column header macro
-.ns
-..
-.
-.de @f                 \" --- footer
-.if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
-.if \n@>2 .nr VL \\n(.pu-\\n(nlu
-.if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
-.ec
-.if \\n(?T \
-\{\
-.      nr T. 1                 \" for tbl commands (to output bottom line)
-.      T# 1\"                  \" output the sides and bottom lines
-.      br
-.\}
-.ev 2
-.ce 0
-.if \\n(?b \
-\{\
-.      nr ?b 0
-.      @k |b\"                 \" output bottom of page tables
-.\}
-.if \\n(?f \
-.      @o\"                    \" output footnote if present
-.ie \\n($c<\\n($m \
-.      @c\"                    \" handle new column
-.el \
-.      @e\"                    \" new page
-.ev
-.if \n@>2 .tm << @f
-..
-.
-.de @o                 \" --- output footnote
-.nf
-.ls 1
-.in 0
-.if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
-.wh -\\n(_Bu @r
-.if \\n(?n \
-.      nm \\n(ln
-.|f
-.if \\n(?n \
-.      nm
-.fi
-.if \n@>2 .tm @o triggered @r (?o) = \\n(?o
-.if \\n(?o \
-\{\
-.      di                      \" just in case triggered @r
-.      if \\n(dn=0 \
-\{\
-.              rm |o
-.              nr ?o 0
-.      \}
-.      nr dn \\n(_D
-.      rr _D
-.\}
-.rm |f
-.ch @r
-..
-.
-.de @c                 \" --- new column
-.if \n@>2 .tm  >> @c %=\\n%
-.rs
-.sp |\\n(_ku
-.@O +\\n($lu+\\n($su
-.nr $c +1
-.@n
-..
-.
-.de @e                 \" --- end page
-.if \n@>2 .tm  >> @e
-.@O \\n(_ou
-.rs
-.sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u)  \" move to footer position
-.@t $f\"                       \" output footer title
-.nr ?h 0
-.bp
-..
-.
-.de @t                 \" --- output header or footer title
-.if !\\n(?h \
-\{\
-.      sz \\n(tp\"             \" set header/footer type fonts, etc.
-.      @F \\n(tf
-.      lt \\n(_Lu              \" make title span entire page
-.      if \\n(?n \
-.              nm \\n(ln
-.      nf
-.      \\$1
-.      br
-.      if \\n(?n \
-.              nm
-.\}
-..
-.
-.de $h                 \" $$$ print header
-.ds |z
-.if !\\n(?c \
-\{\
-.      if e .ds |z "\\*(|0
-.      if o .ds |z "\\*(|1
-.\}
-.if !\(ts\\*(|z\(ts\(ts \
-'      tl \\*(|z
-.rm |z
-..
-.
-.de $f                 \" $$$ print footer
-.ds |z
-.if \\n(?c \
-\{\
-.      if e .ds |z "\\*(|0
-.      if o .ds |z "\\*(|1
-.\}
-.if \(ts\\*(|z\(ts\(ts \
-\{\
-.      if e .ds |z "\\*(|2
-.      if o .ds |z "\\*(|3
-.\}
-.if !\(ts\\*(|z\(ts\(ts \
-'      tl \\*(|z
-.rm |z
-..
-.
-.de @r                 \" --- reprocess overflow footnotes
-.if \n@>3 .tm          >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
-.di |o                         \" save overflow footnote
-.nr ?o 1
-.nr _D \\n(dn
-.ns
-..
-.
-.
-.\"            *** COMMANDS WITH VARIANT DEFINITIONS ***
-.
-.
-.if !'\*(.T'html' .rn bp @b    \" --- begin page
-.
-.de bp                 \" *** begin new page (overrides columns)
-.nr $c \\n($m                  \" force new page, not new column
-.ie \\n(nl>0 \
-.      @b \\$1
-.el \
-\{\
-.      if \\n(.$>0 \
-.              pn \\$1
-.      if \\n(?I \
-.              @h\"            \" 'spring' the header trap
-.\}
-.br
-.wh 0 @h                       \" reset header
-..
-.
-.rn ll xl              \" *** special line length (local)
-.de ll                 \" *** line length (global to environments)
-.xl \\$1
-.lt \\$1
-.nr $l \\n(.l
-.if (\\n($m<=1):(\\n($l>\\n(_L) \
-.      nr _L \\n(.l
-..
-.
-.rn po @O              \" --- local page offset
-.
-.de po                 \" *** page offset
-.@O \\$1
-.nr _o \\n(.o
-..
-.
-.\" Redefine the fam request to set the family in
-.\" environment 2 as well as the current environment.
-.if !\n(.g .ig
-.do rn fam @fam                \" --- set family in current environment
-.do de fam             \" *** set font family in ev 2 and current ev
-.do @fam \\$1
-.ev 2
-.do @fam \\$1
-.ev
-..
-.
-.
-.\"            *** MISCELLANEOUS ROFF COMMANDS ***
-.
-.
-.de hx                 \" *** suppress headers and footers next page
-.nr ?H 1
-..
-.
-.de ix                 \" *** indent, no break
-'in \\$1
-..
-.
-.de bl                 \" *** contiguous blank lines
-.br
-.@s \\$1
-.sp \\$1
-..
-.
-.de @s                 \" --- diversion-surviving space test
-.ne \\$1
-.rs
-.if !'\\n(.z'' \!.@s \\$1
-..
-.
-.de n1                 \" *** line numbering 1
-.nm 1
-.ll -\w'0000'u
-.nr ?n 1
-..
-.
-.de n2                 \" *** line numbering 2
-.ie \\n(.$ \
-\{\
-.      ie !`\\$2`c` \
-.              po -\w'0000'u
-.      el \
-.              ll -\w'0000'u
-.      ie \\B`\\$1` \
-\{\
-.              ds |i \\$1
-.              ds |j \\$1
-.              do substring |i 0 0  \" pick off leading char and rest to check
-.              do substring |j 1    \" for +N / -N
-.              ie `\\*(|i`+` \
-.                      nr ln (\\n[_ln])+\\*(|j
-.              el \
-.                      ie `\\*(|i`-` \
-.                              nr ln (\\n[_ln])-\\*(|j
-.                      el \
-.                              nr ln \\$1  \" unsigned N
-.              nm \\n(ln
-.              nr ?n 2
-.              rm |i |j
-.\}
-.      el \
-.              tm Line \\n(.c -- Bad .n2 value
-.\}
-.el \
-\{\
-.      nm
-.      nr _ln \\n(ln
-.      po +\w'0000'u
-.      ll \\n($lu
-.      nr ?n 0
-.      nr ln 0
-.\}
-..
-.
-.de pa                 \" *** new page
-.bp \\$1
-..
-.
-.de ro                 \" *** roman page numbers
-.af % i
-..
-.
-.de ar                 \" *** arabic page numbers
-.af % 1
-..
-.
-.de m1                 \" *** position one space
-.nr _0 \\n(hmu
-.nr hm \\$1v
-.nr tm +\\n(hmu-\\n(_0u
-.rr _0
-..
-.
-.de m2                 \" *** position two space
-.nr tm \\n(hmu+\\n(tpp+\\$1v
-..
-.
-.de m3                 \" *** position three space
-.nr bm \\n(fmu+\\n(tpp+\\$1v
-..
-.
-.de m4                 \" *** position four space
-.nr _0 \\n(fmu
-.nr fm \\$1v
-.nr bm +\\n(fmu-\\n(_0u
-..
-.
-.de sk                 \" *** leave a blank page (next page)
-.if \\n(.$>0 \
-.      tm Line \\n(c. -- I cannot skip multiple pages
-.nr ?s 1
-..
-.
-.
-.\"            *** MISCELLANEOUS USER SUPPORT COMMANDS ***
-.
-.
-.if !\n(.g .ig
-.de re                 \" *** reset tabs (TROFF defines 15 stops default)
-.ta T 0.5i
-..
-.
-.if \n(.g .ig
-.de re
-.ta 0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i
-..
-.
-.de ba                 \" *** set base indent
-.ie \\n(.$ \
-.      nr $i \\$1n
-.el \
-.      nr $i \\n(siu*\\n($0u
-..
-.
-.de hl                 \" *** draw horizontal line
-.br
-.if '\*(.T'html' \
-\{\
-.      HR
-.      do return
-.\}
-.ie \n(.g .do nr _I \\n[.in]
-.el .nr _I \\n(.i
-\l'\\n(.lu-\\n(_Iu'
-.sp
-..
-.
-.
-.\"            *** PARAGRAPHING ***
-.
-.
-.de pp                 \" *** paragraph
-.lp \\n(piu
-..
-.
-.de lp                 \" *** left aligned paragraph
-.@p
-.if \\n(.$ \
-.      ti +\\$1
-.nr $p 0 1
-..
-.
-.de ip                 \" *** indented paragraph w/ optional tag
-.if (\\n(ii>0)&(\\n(ii<1n) \
-.      nr ii \\n(iin
-.nr _0 \\n(ii
-.if \\n(.$>1 \
-.      nr _0 \\$2n
-.@p \\n(_0u
-.nr _I \\n(.iu
-.in 0
-.di |i
-\&\\$1
-.br
-.di
-.in \\n(_Iu
-.ds |j \\*(|i\\
-.ie \\w"\\*(|j" \
-\{\
-.      ti -\\n(_0u
-.      ie \\w"\\*(|j">=\\n(_0 \
-\{\
-.              do DEVTAG-COL 1
-\\*(|j
-.              do DEVTAG-COL-NEXT 2
-.              br
-.      \}
-.      el \
-\{\
-.              do DEVTAG-COL 1
-\\*(|j\h'|\\n(_0u'\c
-.              do DEVTAG-COL 2
-.       \}
-.\}
-.el .do DEVTAG-COL 2
-.rr _0
-.rm |i |j
-..
-.
-.de np                 \" *** numbered paragraph
-.\" use string comparison in case user has changed format of $p
-.if '\\n($p'-1' \
-.      nr $p 0                 \" reset number after .bu
-.nr $p +1                      \" increment paragraph number
-.@p \w'\0(000)\0'u
-.ti -\w'\0(000)\0'u
-\0(\\n($p)\h'|\w'\0(000)\0'u'\c
-..
-.
-.de bu                 \" *** bulleted paragraph
-.br
-.\" use string comparison in case user has changed format of $p
-.if '\\n($p'-1' \
-.      ns                      \" don't space between .bu paragraphs
-.nr $p 0-1                     \" mark "bulleted paragraph" mode
-.@p \w'\0\(bu\0'u
-.ti -\w'\0\(bu\0'u
-\0\(bu\0\c
-..
-.
-.de @p                 \" --- initialize for paragraph
-.do check_need_title
-.if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
-.in \\n($iu+\\n(pou
-.if \\n(.$ \
-.      in +\\$1n
-.ce 0
-.fi
-.@F \\n(pf
-.sz \\n(pp
-.sp \\n(psu
-.ne \\n(.Lv+\\n(.Vu
-.ns
-..
-.
-.
-.\"            *** SECTION HEADINGS ***
-.
-.
-.de sh                 \" *** section heading
-.fi
-.do check_need_title
-.if (\\n(si>0)&(\\n(si<1n) \
-.      nr si \\n(sin
-.if '\*(.T'html' .nr si 0
-.ce 0
-.if '\*(.T'html' \
-\{\
-.      do DEVTAG-SH \\$1
-.      do nr need_eo_h 1
-.\}
-.@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
-.if !"\\$2"_" \
-\{\
-.      ds |n \&\\$2
-.      $p "\\*(|n" "\\*($n" \\n($0
-.      $0 "\\*(|n" "\\*($n" \\n($0
-.      rm |n
-.\}
-.nr $p 0 1                     \" reset .np count
-..
-.
-.de @d                 \" --- change section depth
-.if !""\\$1" \
-.      nr $0 \\$1
-.if \\n($0&(\\n(.$>1) \
-.      nr $\\n($0 \\$2
-.ds $n \&\"
-.ie \\n($0>=1 \
-\{\
-.      if '\\n($1'0' \
-.              nr $1 1
-.      if (\\n(.$>=3) .if !"\\$3"-" \
-.              nr $1 \\$3
-.      as $n \\n($1
-.\}
-.el \
-.      nr $1 0
-.ie \\n($0>=2 \
-\{\
-.      if '\\n($2'0' \
-.              nr $2 1
-.      if (\\n(.$>=4) .if !"\\$4"-" \
-.              nr $2 \\$4
-.      as $n .\\n($2
-.\}
-.el \
-.      nr $2 0
-.ie \\n($0>=3 \
-\{\
-.      if '\\n($3'0' \
-.              nr $3 1
-.      if (\\n(.$>=5) .if !"\\$5"-" \
-.              nr $3 \\$5
-.      as $n .\\n($3
-.\}
-.el \
-.      nr $3 0
-.ie \\n($0>=4 \
-\{\
-.      if '\\n($4'0' \
-.              nr $4 1
-.      if (\\n(.$>=6) .if !"\\$6"-" \
-.              nr $4 \\$6
-.      as $n .\\n($4
-.\}
-.el \
-.      nr $4 0
-.ie \\n($0>=5 \
-\{\
-.      if '\\n($5'0' \
-.              nr $5 1
-.      if (\\n(.$>=7) .if !"\\$7"-" \
-.              nr $5 \\$7
-.      as $n .\\n($5
-.\}
-.el \
-.      nr $5 0
-.ie \\n($0>=6 \
-\{\
-.      if '\\n($6'0' \
-.              nr $6 1
-.      if (\\n(.$>=8) .if !"\\$8"-" \
-.              nr $6 \\$8
-.      as $n .\\n($6
-.\}
-.el \
-.      nr $6 0
-..
-.
-.de sx                 \" *** heading up, no increment (2.1.1 -> 2.1)
-.ce 0
-.ul 0
-.nr _0 \\n($0-1
-.if \\n(.$ .nr _0 +1
-.if \\n(.$ .nr _0 \\$1
-.@d \\n(_0
-.rr _0
-.$p "" "" \\n($0
-.nr $p 0 1                     \" reset .np count
-..
-.
-.de uh                 \" *** unnumbered section heading
-.$p "\\$1"
-.$0 "\\$1"
-..
-.
-.de $p                 \" $$$ print section heading
-.if (\\n(si>0)&(\\n(.$>2) \
-.      nr $i \\$3*\\n(si
-.in \\n($iu
-.ie !"\\$1\\$2"" \
-\{\
-.      sp \\n(ssu              \" one of them is non-null
-.      ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u)
-.      \" exdent if \\$3 > 0
-.      ie 0\\$3 \
-.              ti -(\\n(siu-\\n(sou)
-.      el \
-.              ti +\\n(sou
-.      @F \\n(sf
-.      sz \\n(sp
-.      if 0\\$3 \
-.              $\\$3
-.      if \w"\\$2">0 \\$2.
-.      if \w"\\$1">0 \\$1\f1\ \ \&
-.\}
-.el \
-.      sp \\n(psu
-.@F \\n(pf
-.sz \\n(pp
-..
-.
-.
-.\"            *** COLUMNED OUTPUT ***
-.
-.
-.de 2c                 \" *** double columned output
-.br
-.if \\n($m>1 \
-.      1c\"                    \" revert to 1c if already 2c
-.nr $c 1
-.nr $m 2
-.if \\n(.$>1 \
-.      nr $m \\$2
-.if \\n(.$>0 \
-.      nr $s \\$1n             \" param 1: column separation
-.nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
-.xl \\n($lu
-.mk _k
-.ns
-..
-.
-.de 1c                 \" *** single columned output
-.br
-.nr $c 1
-.nr $m 1
-.ll \\n(_Lu                    \" return to normal output
-.sp |\\n(.hu
-.@O \\n(_ou
-..
-.
-.de bc                 \" *** begin column
-.sp 24i
-..
-.
-.
-.\"            *** FLOATING TABLES AND NONFLOATING BLOCKS ***
-.
-.
-.de (z                 \" *** begin floating keep
-.if \n@>4 .tm >> (z, .z=\n(.z
-.@D 4 \\$1 \\$2
-.@(
-..
-.
-.de )z                 \" *** end floating keep
-.if \n@>4 .tm >> )z, .z=\n(.z
-.sp \\n(zsu
-.@)
-.if \n@>4 .tm -- )z << @), .z=\n(.z
-.rr _0
-.if !\\n(?b \
-.      nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu
-.nr dl -\n(.H                  \" fudge factor necessary to make it work
-.ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
-\{\
-.      nr ?a 1
-.      if (\\n(dl>\\n($l)&(\\n($m>1) \
-.              nr ?w 1         \" mark wider than one column (top)
-.      ds |x |t
-.\}
-.el \
-\{\
-.      nr ?b 1
-.      if (\\n(dl>\\n($l)&(\\n($m>1) \
-.              nr ?W 1         \" mark wider than one column (bottom)
-.      nr _b +\\n(dnu
-.      \" avoid moving @f back past the current position
-.      if \\n(.p-\\n(nl-\n(.V<\\n(_b \
-.              nr _b \\n(.p-\\n(nl-\n(.V
-.      ch @f -\\n(_bu
-.      ds |x |b
-.\}
-.da \\*(|x                     \" copy to save macro
-.nf
-.ls 1
-.nr ?k 1
-.if \n@>4 .tm -- )z >> \\*(|x
-\!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
-.|k\"                          \" and the body
-.ec
-.if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
-.nr ?k 0
-.rm |k\"                       \" remove the temp macro
-.da
-.in 0
-.ls 1
-.xl \\n($lu
-.ev
-.if \n@>4 .tm << )z, .z=\\n(.z
-..
-.
-.de @k                 \" --- output floating keep
-.if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z
-.ev 1
-.nf
-.ls 1
-.in 0
-.sp \\n(zsu
-.if \\n(?n \
-.      nm \\n(ln
-.\\$1
-.if \\n(?n \
-.      nm
-.ec
-.br
-.rm \\$1
-.ev
-..
-.
-.de (t                 \" XXX temp ref to (z
-.(z \\$1 \\$2
-..
-.
-.de )t                 \" XXX temp ref to )t
-.)z \\$1 \\$2
-..
-.
-.de (b                 \" *** begin block
-.br
-.@D 3 \\$1 \\$2
-.sp \\n(bsu
-.@(
-.if '\*(.T'html' .sp \\n(bsu
-..
-.
-.de )b                 \" *** end block
-.br
-.@)
-.if (\\n(bt=0):(\\n(.t<\\n(bt) \
-.      ne \\n(dnu              \" make it all on one page
-.@k |k
-.ev                             \" return from display environment
-.sp \\n(bsu+\\n(.Lv-1v
-..
-.
-.de @(                 \" --- begin keep
-.if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
-.@M
-.di |k
-\!'rs
-..
-.
-.de @M                 \" --- set modes for display
-.nr ?k 1
-.@C 1
-.@F \\n(df
-.if \\n($R .@V
-.vs \\n(.sp*\\n($Vu/100u
-.nf
-.if "\\*(|p"F" \
-.      fi                      \" set fill mode if "F" parameter
-.if \\n(_d=4 \
-.      in 0
-.if \\n(_d=3 \
-\{\
-.      in +\\n(biu
-.      xl -\\n(biu
-.\}
-.if \\n(_d=1 \
-.      ce 10000
-..
-.
-.de @)                 \" --- end keep
-.br
-.if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
-.nr ?k 0
-.di
-.in 0
-.ce 0
-..
-.
-.de (c                 \" *** begin block centered text
-.br
-.if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
-.if \\n(?n .nm
-.di |c
-..
-.
-.de )c                 \" *** end block centered text
-.if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
-.br                            \" force out final line
-.di
-.if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
-.ev 1
-.ls 1
-.in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
-.if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
-.if \\n(?n \
-.      nm \\n(ln
-.nf
-.|c
-.ec
-.in
-.ls
-.if \\n(?n \
-.      nm
-.ev
-.rm |c
-..
-.
-.
-.\"            *** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
-.
-.
-.de (q                 \" *** begin block quote
-.br
-.@C 1
-.fi
-.sp \\n(qsu
-.in +\\n(qiu
-.xl -\\n(qiu
-.sz \\n(qp
-.if \\n(?n \
-.      nm \\n(ln
-..
-.
-.de )q                 \" *** end block quote
-.br
-.if \\n(?n \
-.      nm
-.ev
-.sp \\n(qsu+\\n(.Lv-1v
-.nr ?k 0
-..
-.
-.de (l                 \" *** begin list
-.br
-.sp \\n(bsu
-.@D 3 \\$1 \\$2
-.@M
-.if \\n(?n \
-.      nm \\n(ln
-.if '\*(.T'html' .sp \\n(bsu
-..
-.
-.de )l                 \" *** end list
-.br
-.if \\n(?n \
-.      nm
-.ev
-.sp \\n(bsu+\\n(.Lv-1v
-.nr ?k 0
-..
-.
-.
-.\"            *** PREPROCESSOR SUPPORT ***
-.
-.
-.\"
-.\"    EQN
-.\"
-.de EQ                 \" *** equation start
-.do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
-.do nr need_eo_h 0
-.ec
-.if "\*(.T"html" \
-\{\
-.      do nr e-EQ-ll \\n(.l
-.      ll 1000n
-.\}
-.do HTML-IMAGE
-.if !\\n(?e \
-\{\
-.      if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
-.      @D 1 "\\$1" "\\$2"
-.      @C 2
-.      di |e
-.\}
-.ls 1
-.in 0
-.nf
-..
-.
-.de EN                 \" *** equation end
-.br
-.do HTML-IMAGE-END
-.if "\*(.T"html" \
-.      do ll \\n[e-EQ-ll]u
-.ie "\\$1"C" \
-\{\
-.      nr ?e 1
-.      sp \\n(esu
-.\}
-.el \
-\{\
-.      nr ?e 0
-.      di
-.      if \\n(dn \
-.              @q\"            \" actual equation output
-.      rm |e
-.      ev
-.\}
-..
-.
-.de @q                 \" --- equation output
-.nr _Q \\n(dnu
-.ev
-.sp \\n(esu                    \" output rest of preceding text
-.if !"\\n(.z"" \!.ne \\n(_Qu
-.ne \\n(_Qu+\n(.Vu             \" keep it on one page
-.@C 2\"                                \" .ev 2 may be jumbled from header
-.if \\n(_d=1 \
-.      in (\\n(.lu+\\n($iu-\\n(dlu)/2u
-.if \\n(_d=2 \
-.      in \\n($iu
-.if \\n(_d=3 \
-.      in \\n(biu+\\n($iu
-.if \\n(_d=4 \
-.      in 0
-.mk _q
-.if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
-.if !"\\*(|p"" \
-\{\
-.      rs
-.      sp (\\n(_Qu-\\n(.vu)/2u
-.      tl """\\*(|p"
-.      rt \\n(_qu
-.\}
-.if \\n(?n \
-.      nm \\n(ln
-.|e
-.if \\n(?n \
-.      nm
-.sp |\\n(_qu+\\n(_Qu
-.sp \\n(esu+\\n(.Lv-1v
-.rr _q
-.rr _Q
-..
-.
-.\"
-.\"    TBL
-.\"
-.de TS                 \" *** table start
-.sp \\n(bsu
-.if "\*(.T"html" \
-\{\
-.      do nr e-TS-ll \\n(.l
-.      ll 1000n
-.\}
-.do HTML-IMAGE
-.@C 1
-.fi                            \" drop into fill mode for text boxes
-.if "\\$1"H" \
-\{\
-.      di |h                   \" save header part
-.      nr ?T 1
-.\}
-.ls 1
-.ch @f -(\\n(_bu+1v)           \" set pseudo-trap for bottom line
-.if \\n(.p-\\n(_b-1v<=\\n(nl \
-.      ch @f \\n(nlu+\n(.Vu
-..
-.
-.de TH                 \" *** end header part of table
-.nr T. 0
-.T# 0
-.if \\n(?n \!.nm
-.di
-.nr _T \\n(?T
-.nr ?T 0
-.ne \\n(dnu+1v
-.nr ?T \\n(_T
-.nr _i \\n(.i
-.if \\n(?n .nm \\n(ln
-.in 0
-.|h\"                          \" put in the initial header
-.in \\n(_iu
-.rr _i
-.mk #T
-..
-.
-.de TE                 \" *** table end
-.nr ?T 0
-.ch @f -\\n(_bu                        \" reset pseudo-trap
-.if \\n(.p-\\n(_b<=\\n(nl \
-.      ch @f \\n(nlu+\n(.Vu
-.ev
-.do HTML-IMAGE-END
-.if "\*(.T"html" \
-.      do ll \\n[e-TS-ll]u
-.sp \\n(bsu+\\n(.Lv-1v
-.re
-..
-.
-.de T&
-..
-.
-.\"
-.\"    REFER
-.\"
-.mso refer-me.tmac
-.
-.\"
-.\"    IDEAL
-.\"
-.de IS                 \" *** start ideal picture
-.nr g7 \\n(.u
-.ls 1
-..
-.
-.de IF
-.if \\n(g7 .fi
-.ls
-..
-.
-.de IE                 \" *** end ideal picture
-.if \\n(g7 .fi
-.ls
-..
-.
-.\"
-.\"    PIC
-.\"
-.de PS         \" *** start picture: $1=height, $2=width in units or inches
-.sp 0.3
-.do HTML-IMAGE
-.nr g7 \\$2
-.in (u;\\n(.l-\\n(g7>?0/2)
-.ne \\$1u
-.nr g7 \\n(.u
-.ls 1
-.if \\n(?n \
-\{\
-.      de PS_nm_check &&        \" define macro to emit .nm at top diversion
-.      if \n@>4 .tm -- PS: \\\\$1 \\\\$2 .z=\\\\n(.z PS_nm_cnt=\\\\n[PS_nm_cnt]
-.      \"                       \" multiple .PS/.PE in a keep.
-.      if `\\\\$2`init` \
-.              do nr PS_nm_cnt \\\\n[PS_nm_cnt]+1
-.      ie `\\\\n(.z`` \
-\{\
-.              if `\\\\$1`suspend` \
-.                      nm
-.              if `\\\\$1`resume` \
-\{\
-.                      nm \\\\n(ln
-.                      do nr PS_nm_cnt \\\\n[PS_nm_cnt]-1
-.                      do if !\\\\n[PS_nm_cnt] \
-\{\
-.                              do rm PS_nm_check
-.                              do rr PS_nm_cnt
-.\}
-.\}
-.\}
-.el \!.PS_nm_check \\\\$1
-.&&
-.      mk _q                    \" emit a single numbered line for PS picture
-.      rs
-\&\ 
-.      br
-.      rt \\n(_qu
-.      PS_nm_check suspend init
-.\}
-..
-.
-.de PE                 \" *** end picture
-.if \\n(?n .PS_nm_check resume
-.ls
-.in
-.if \\n(g7 .fi
-.do HTML-IMAGE-END
-.sp .6
-..
-.
-.\"
-.\"    GREMLIN
-.\"
-.de GS                 \" *** start gremlin picture
-.ie '\*(.T'html' \
-\{\
-.      ie "\\$1"L" .do HTML-IMAGE-LEFT
-.      el .ie "\\$1"R" .do HTML-IMAGE-RIGHT
-.      el .do HTML-IMAGE
-.\}
-.el \
-\{\
-.      nr g7 (\\n(.lu-\\n(g1u)/2u
-.      if "\\$1"L" .nr g7 \\n(.iu
-.      if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
-.      in \\n(g7u
-.      nr g7 \\n(.u
-.      ls 1
-.      nf
-.      ne \\n(g2u
-.\}
-..
-.
-.de GE                 \" *** end gremlin picture
-.ie '\*(.T'html' .do HTML-IMAGE-END
-.el \
-\{\
-.      GF
-.      sp .6
-.\}
-..
-.
-.de GF                 \" *** finish gremlin picture; stay at top
-.ls
-.in
-.if \\n(g7 .fi
-..
-.
-.
-.\"            *** FONT AIDS ***
-.
-.
-.de sz                 \" *** set point size and vertical spacing
-.ps \\$1
-.if \\n($r .@v
-.vs \\n(.sp*\\n($vu/100u       \" default vs at pointsize + 20%
-..
-.
-.de @v                 \" --- possibly set $v from $r
-.if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
-..
-.
-.de @V                 \" --- possibly set $V from $R
-.if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
-..
-.
-.de @E                 \" --- store in _F argument to \f for restoring font
-.ie \\n(.f<10 \
-.      ds _F \\n(.f
-.el \
-\{\
-.      ie \\n(.f<100&\n(.g \
-.              ds _F (\\n(.f
-.      el \
-.              ds _F P
-.\}
-..
-.
-.de r                  \" *** enter roman font
-.do check_need_title
-.@E
-.ft 1
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-.do check_need_title
-..
-.
-.de i                  \" *** enter italic
-.do check_need_title
-.@E
-.ft 2
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-.do check_need_title
-..
-.
-.de b                  \" *** enter boldface
-.do check_need_title
-.@E
-.ft 3
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-.do check_need_title
-..
-.
-.de rb                 \" *** enter real boldface
-.do check_need_title
-.@E
-.ft 3
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-.do check_need_title
-..
-.
-.de bi                 \" *** enter bold italic
-.do check_need_title
-.@E
-.ft 4
-.if \\n(.$ \&\\$1\f\\*(_F\\$2
-.do check_need_title
-..
-.
-.de u                  \" *** enter underlined word
-\&\\$1\l'|0\(ul'\\$2
-..
-.
-.\" a better version of u
-.if !\n(.g .ig
-.de u
-\Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
-..
-.
-.de q                  \" *** enter quoted word
-\&\\*(lq\\$1\\*(rq\\$2
-..
-.
-.de bx                 \" *** enter boxed word
-.ie '\*(.T'html' \\$1\\$2
-.el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
-..
-.
-.de sm                 \" *** print in smaller font
-\s-1\\$1\\s0\\$2
-..
-.
-.de @F                 \" --- change font (0 -> no change)
-.nr ~ \\$1
-.if \\n~>0 \
-.      ft \\n~
-.rr ~
-..
-.
-.
-.\"            *** FOOTNOTING ***
-.
-.
-.de (f                 \" *** begin footnote
-.ec
-.if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
-.ie "\\n(.z"" \
-\{\
-.      nr _D \\n(dn
-.      nr _0 1v+\\n(nlu
-.      ev 2
-.      nm
-.      da |f
-.      in 0
-.      xl \\n($lu-\\n(fuu
-.      @F \\n(ff
-.      sz \\n(fp
-.      vs \\n(.sp*\\n($Vu/100u
-.      if !\\n(?f \
-\{\
-.              nr _b +1v       \" allow space for $s
-.              $s
-.      \}
-.      br
-.      if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
-\{\
-.              da\"            \" won't fit on page at all
-.              bc
-.              if !\\n(?f \
-.                      rm |f
-.              da |f
-.\" next five lines could be dropped if headers had their own environment
-.              in 0            \" reset everything from .bc
-.              xl \\n($lu-\\n(fuu
-.              @F \\n(ff
-.              sz \\n(fp
-.              vs \\n(.sp*\\n($Vu/100u
-.              if !\\n(?f \
-.                      $s
-.              br
-.      \}
-.      rr _0
-.      sp \\n(fsu
-.      nr ?f 1
-.      fi
-.      if !"\\$1"_" \
-.              ti \\n(fiu
-.      if \n@>2 .tm    << (f $f=\\n($f
-.\}
-.el \
-\{\
-.      ev 2
-.      nm
-.      in 0
-.      xl \\n($lu-\\n(fuu
-.      @F \\n(ff
-.      sz \\n(fp
-.      vs \\n(.sp*\\n($Vu/100u
-.      fi
-\!.(f \\$1
-\!.@N
-.\}
-..
-.
-.de @N                 \" --- set no fill mode in the top-level diversion
-.ie "\\n(.z"" .nf
-.el \!.@N
-..
-.
-.de )f                 \" *** end footnote
-.ie "\\n(.z"|f" \
-\{\
-.      if \\n* \
-.              nr $f +1
-.      ds * \\*{\\n($f\\*}\k*
-.      nr * 0
-.      in 0
-.      da
-.      ev
-.      if \\n(_w<\\n(dl \
-.              nr _w \\n(dl    \" compute maximum fn width
-.      nr _b +\\n(dn
-.      ch @f -\\n(_bu
-.      if \\n(.p-\\n(_b<=\\n(nl \
-.              ch @f \\n(nlu+\n(.Vu
-.      nr dn \\n(_D
-.      rr _D
-.\}
-.el \
-\{\
-.      br
-\!.)f
-.      ev
-.\}
-..
-.
-.@R ff
-.if \n(ff<=0 \
-.      nr ff 1                 \" footnote font: Times Roman
-.@R fp
-.if \n(fp<=0 \
-.      nr fp 8                 \" footnote pointsize
-.
-.de $s                 \" $$$ footnote separator
-\l'2i'
-..
-.
-.
-.\"            *** DELAYED TEXT ***
-.
-.
-.de (d                 \" *** begin delayed text
-.am |d )d
-.sp \\n(bsu
-..
-.
-.de )d                 \" *** end delayed text
-.if \\n# \
-.      nr $d +1
-.ds # [\\n($d]\k#
-.rr #
-..
-.
-.de pd                 \" *** print delayed text
-.|d
-.rm |d
-.nr $d 1 1
-.ds # [1]\k#
-..
-.
-.
-.\"            *** INDEXES (TABLE OF CONTENTS) ***
-.
-.
-.nr _x 0 1
-.do nr _xn 0
-.af _x a
-.
-.de (x                 \" *** begin index entry
-.if \n@>4 .tm >> (x, .z=\\n(.z
-.ds |X x
-.if \\n(.$>0 \
-.      ds |X \\$1
-.ie "\\n(.z"" \
-.      nr _z 0
-.el \
-.      nr _z 1
-.@\\n(_z
-..
-.
-.de @0                 \" --- finish (x if no current diversion
-.am %\\*(|X )x
-.sp \\n(xsu
-.ti -\\n(piu
-..
-.
-.de @1                 \" --- finish (x if current diversion
-.if "\\n(_x"z" .nr _x 0
-.de =\\n+(_x )x
-..
-.
-.de )x                 \" *** end index entry
-.if \n@>4 .tm >> )x, .z=\\n(.z
-.ie "\\n(.z"" \
-\{\
-.      ds |x \\n%
-.      if \\n(.$>0 \
-.              ds |x \\$1
-.      if "\\*(|x"_" \
-.              ig ..
-.      am %\\*(|X ..
-.      if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
-.              ti +\\n(xuu
-\\\\a\\\\t\\$2\\*(|x
-...
-.      rm |x
-.      rm |X
-.\}
-.el \
-\{\
-\!.(x \\*(|X
-\!\\\\*(=\\n(_x\\\\
-\!.)x \\$1 \\$2
-\!.rm =\\n(_x
-.\}
-..
-.
-.de xp                 \" *** print the index
-.br
-.@C 2
-.ls 1
-.vs \\n(.sp*\\n($Vu/100u
-.fi
-.in +\\n(piu
-.ds |X x
-.if \\n(.$>0 \
-.      ds |X \\$1
-.xl -(\\n(xuu+\w'...'u)
-.di |x
-.%\\*(|X
-.br
-.di
-.rm %\\*(|X
-.xl \\n($lu
-.rm |X
-.ev
-.nf
-.in 0
-.ta \\n(.lu-\\n(xuuR \\n(.luR
-.|x
-.fi
-.in
-.rm |x
-..
-.
-.
-.\"            *** HTML VERSIONS OF .x(, .x), AND .xp ***
-.
-.
-.de (x-html    \" --- create TAG and divert text
-.nr _x +1
-.do nr _xn +1
-.do TAG "_x\\n[_x]
-.br
-.do di |x\\n[_xn]
-.br
-..
-.
-.de )x-html    \" --- end diversion
-.br
-.di
-..
-.
-.de xp-html    \" --- create list of links
-.do nr _xx 1
-.br
-.do ev xp-html-ev
-.sp
-.do ULS
-.do while \\n[_xx]<=\\n[_xn] \
-\{\
-.      br
-.      do unformat |x\\n[_xx]
-.      do di xp-html-div
-.      br
-.      ll 100i
-.      fi
-.      do |x\\n[_xx]
-.      br
-.      di
-.      do asciify xp-html-div
-.      do rm xp-html-as
-.      do as xp-html-as #
-.      do as xp-html-as _x\\n[_xx]
-.      ll
-.      LI
-.      do URL \\*[xp-html-as] "\\*[xp-html-div]
-.      do rm xp-html-as
-.      do nr _xx +1
-.\}
-.do ULE
-.sp
-.ev
-..
-.
-.if '\*(.T'html' \
-\{\
-.      rm (x
-.      do als (x (x-html
-.      rm )x
-.      do als )x )x-html
-.      rm xp
-.      do als xp xp-html
-.\}
-.
-.
-.\"            *** CHAPTERS AND TITLES ***
-.
-.
-.de +c                         \" *** begin chapter
-.ep\"                          \" force out footnotes
-.if \\n(?o:\\n(?a \
-\{\
-.      bp                      \" force out a table or more footnote
-.      rs
-.      ep
-.\}
-.nr ?C 1
-.nr $f 1 1
-.ds * \\*{1\\*}\k*
-.if \\n(?R \
-.      pn 1
-.bp
-.in \\n($iu                    \" reset the indent
-.rs
-.ie \\n(.$ \
-.      $c "\\$1"
-.el \
-.      sp 3
-..
-.
-.de ++                 \" *** declare chapter type
-.nr _0 0
-.if "\\$1"C" \
-.      nr _0 1                 \" chapter
-.if "\\$1"RC" \
-.      nr _0 11                \" renumbered chapter
-.if "\\$1"A" \
-.      nr _0 2                 \" appendix
-.if "\\$1"RA" \
-.      nr _0 12                \" renumbered appendix
-.if "\\$1"P" \
-.      nr _0 3                 \" preliminary material
-.if "\\$1"B" \
-.      nr _0 4                 \" bibliographic material
-.if "\\$1"AB" \
-.      nr _0 5                 \" abstract
-.if \\n(_0=0 \
-.      tm Line \\n(c. -- Bad mode to .++
-.nr ?R 0
-.if \\n(_0>10 \
-.\{
-.      nr ?R 1
-.      nr _0 -10
-.\}
-.nr ch 0 1
-.if (\\n(_0=3):(\\n(_0=5) \
-.      pn 1                    \" must do before .ep
-.if !\\n(_0=\\n(_M .if \\n(_M=3 \
-.      pn 1                    \" must do before .ep
-.ep\"                          \" end page for correct page number types
-.if \\n(_0=1 \
-\{\
-.      af ch 1
-.      af % 1
-.\}
-.if \\n(_0=2 \
-\{\
-.      af ch A
-.      af % 1
-.\}
-.if \\n(_0=3 \
-.      af % i
-.if \\n(_0=4 \
-.      af % 1
-.if \\n(_0=5 \
-.      af % 1
-.if \\n(.$>1 \
-.      he \\$2
-.nr _M \\n(_0
-.rr _0
-..
-.
-.de $c                 \" $$$ print chapter title
-.sz 12
-.ft 3
-.ce 1000
-.if \\n(_M<3 \
-.      nr ch +1
-.ie \\n(_M=1 CHAPTER\ \ \\n(ch
-.el .if \\n(_M=2 APPENDIX\ \ \\n(ch
-.if \w"\\$1" .sp 3-\\n(.L
-.if \w"\\$1" \\$1
-.if (\\n(_M<3):(\w"\\$1") \
-.      sp 4-\\n(.L
-.ce 0
-.ft
-.sz
-.ie \\n(_M=1 \
-.      $C Chapter \\n(ch "\\$1"
-.el .if \\n(_M=2 \
-.      $C Appendix \\n(ch "\\$1"
-..
-.
-.de tp                 \" *** title page
-.hx
-.bp
-.br
-.rs
-.pn \\n%
-..
-.
-.\"            *** DATES ***
-.if \n(mo=1 .ds mo January
-.if \n(mo=2 .ds mo February
-.if \n(mo=3 .ds mo March
-.if \n(mo=4 .ds mo April
-.if \n(mo=5 .ds mo May
-.if \n(mo=6 .ds mo June
-.if \n(mo=7 .ds mo July
-.if \n(mo=8 .ds mo August
-.if \n(mo=9 .ds mo September
-.if \n(mo=10 .ds mo October
-.if \n(mo=11 .ds mo November
-.if \n(mo=12 .ds mo December
-.if \n(dw=1 .ds dw Sunday
-.if \n(dw=2 .ds dw Monday
-.if \n(dw=3 .ds dw Tuesday
-.if \n(dw=4 .ds dw Wednesday
-.if \n(dw=5 .ds dw Thursday
-.if \n(dw=6 .ds dw Friday
-.if \n(dw=7 .ds dw Saturday
-.nr y2 \n(yr%100
-.af y2 00
-.nr y4 \n(yr+1900
-.ds td \*(mo \n(dy, \n(y4
-.
-.
-.\"            *** PARAMETRIC INITIALIZATIONS ***
-.
-.
-.rr x
-.nr $v \n(.v00+\n(.sp-1/\n(.sp \" vs as percentage of ps for .sz request
-.nr $V \n($v                   \" same for displays & footnotes
-.nr hm 4v                      \" header margin
-.nr tm 7v                      \" top margin
-.nr bm 6v                      \" bottom margin
-.nr fm 3v                      \" footer margin
-.nr tf 3                       \" title font: (real) Times Bold
-.nr tp 10                      \" title point size
-.hy 14
-.nr bi 4m                      \" indent for blocks
-.nr pi 5n                      \" indent for paragraphs
-.nr pf 1                       \" normal text font
-.nr pp 10                      \" normal text point size
-.nr qi 4n                      \" indent for quotes
-.nr qp -1                      \" down one point
-.nr ii 5n                      \" indent for .ip's and .np's
-.nr $m 1                       \" max number of columns
-.nr $s 4n                      \" column separation
-.nr sf 3                       \" section font -- Times Bold
-.nr sp 10                      \" section title pointsize
-.nr ss 12p                     \" section prespacing
-.nr si 0                       \" section indent
-.
-.
-.\"            *** OTHER INITIALIZATION ***
-.
-.
-.\" GNU pic sets this register to 1, to indicate that \x should not be used.
-.@R 0x
-.ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
-.ds } \s0\v'0.4m'
-.\" for compatibility with traditional -me
-.\" (the first will work only in compatibility mode)
-.ds [ \*{
-.ds ] \*}
-.ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
-.ds > \s0\v'-0.4m'
-.ds - \(em
-.\" Avoid warnings from groff -ww.
-.@S |0
-.@S |1
-.@S |2
-.@S |3
-.@S $H
-.@S $0
-.@S $1
-.@S $2
-.@S $3
-.@S $4
-.@S $5
-.@S $6
-.@S $7
-.@S $8
-.@S $9
-.@S ..
-.
-.@R po\"                       \" simulated page offset
-.@R $0\"                       \" section depth
-.@R $i\"                       \" paragraph base indent
-.@R $p\"                       \" numbered paragraph number
-.@R $r\"                       \" ratio of vs to ps (may override $v)
-.@R $R\"                       \" same for displays (may override $V)
-.@R df\"                       \" display font: same as surrounding text
-.@R so\"                       \" additional section title offset
-.@R fu\"                       \" footnote undent
-.@R bt\"                       \" block keep threshold
-.@R *\"                                \" has \** been referenced?
-.@R ?a\"                       \" pending floating keep at page top?
-.@R ?b\"                       \" pending floating keep at page bottom?
-.@R ?C\"                       \" at chapter header?
-.@R ?e\"                       \" in equation?
-.@R ?H\"                       \" suppress headers and footers next page?
-.@R ?I\"                       \" has the header trap been sprung?
-.@R ?n\"                       \" n1 mode?
-.@R ?o\"                       \" footnote overflow?
-.@R ?R\"                       \" renumbered chapter?
-.@R ?s\"                       \" skip next page?
-.@R ?T\"                       \" inside .TS H?
-.@R ?W\"                       \" wide floating keep at page bottom?
-.@R ?w\"                       \" wide floating keep at page top?
-.
-.nr fi 0.3i
-.nr _o \n(.o
-.nr $b 3                       \" bold
-.nr ps 0.35v
-.if \n(ps<\n(.V .nr ps \n(.V
-.nr bs \n(ps                   \" block pre/post spacing
-.nr qs \n(ps                   \" quote pre/post spacing
-.nr zs 1v                      \" float-block pre/postspacing
-.nr xs 0.2v                    \" index prespacing
-.nr xu 0.5i                    \" index undent
-.nr fs 0.2v                    \" footnote prespacing
-.nr es 0.5v                    \" equation pre/postspacing
-.if \n(es<\n(.V .nr es \n(.V
-.wh 0 @h                       \" set header
-.nr $l \n(.lu                  \" line length
-.nr _L \n(.lu                  \" line length of page
-.nr $c 1                       \" current column number
-.nr $f 1 1                     \" footnote number
-.ds * \*{1\*}\k*\"             \" footnote "name"
-.nr $d 1 1                     \" delayed text number
-.ds # [1]\k#\"                 \" delayed text "name"
-.nr _M 1                       \" chapter mode is chapter
-.ds lq \(lq\"                  \" left quote
-.ds rq \(rq\"                  \" right quote
-.em @z
-.
-.
-.\"            *** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
-.
-.
-.ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
-.ds #v 0.6m
-.
-.\"                    \" accents
-.ds ' \k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
-.ds ` \k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
-.
-.\"                    \" umlaut
-.ds : \k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
-.
-.\"                    \" circumflex and tilde
-.ds ^ \k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
-.ds ~ \k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
-.
-.\"                    \" cedilla and czech
-.ds , \k_\h'-(\\n(.wu)',\h'|\\n_u'
-.ds v \k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
-.
-.\"                    \" Norwegian A or angstrom
-.ds o \k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
-.
-.\"                    \" there exists, for all
-.ds qe \s-2\v'0.45m'\z\(em\v'-0.625m'\z\(em\v'-0.625m'\(em\v'0.8m'\s0\h'-0.1m'\v'-0.05m'\(br\v'0.05m'\h'0.1m'
-.ds qa \z\e\h'0.35m'\z\(sl\h'-0.33m'\v'-0.3m'\s-4\(em\s0\v'0.3m'\h'0.15m'
-.rm #h #v
-.ll 6.0i
-.lt 6.0i
-.
-.de @U
-.tm The \\$1 macro has been removed from this version of the -me macros.
-..
-.
-.de lo
-.@U lo
-..
-.
-.de th
-.@U th
-..
-.
-.de ac
-.@U ac
-..
-.
-.\" EOF
diff --git a/tmac/e.tmac-u b/tmac/e.tmac-u
new file mode 100644 (file)
index 0000000..96afd99
--- /dev/null
@@ -0,0 +1,2079 @@
+.\"    @(#)e.tmac      2.31 (Berkeley) 5/21/88
+.\"    Modified by James Clark for use with groff.
+.\"
+.\" Copyright (c) 1988 Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms are permitted
+.\" provided that this notice is preserved and that due credit is given
+.\" to the University of California at Berkeley.  The name of the
+.\" University may not be used to endorse or promote products derived
+.\" from this software without specific prior written permission.  This
+.\" software is provided "as is" without express or implied warranty.
+.\"
+.\"    %beginstrip%
+.\"
+.\"**************************************************************
+.\"*                                                           *
+.\"*   ****  - M E   N R O F F / T R O F F   M A C R O S  **** *
+.\"*                                                           *
+.\"*   Produced for your edification and enjoyment by:         *
+.\"*           Eric Allman                                     *
+.\"*           Electronics Research Laboratory                 *
+.\"*           U.C. Berkeley.                                  *
+.\"*   current address:                                        *
+.\"*           Britton-Lee, Inc.                               *
+.\"*           1919 Addison Street Suite 105                   *
+.\"*           Berkeley, California  94704                     *
+.\"*                                                           *
+.\"*   VERSION 2.31    First Release: 11 Sept 1978             *
+.\"*                                                           *
+.\"*   Documentation is available.                             *
+.\"*                                                           *
+.\"**************************************************************
+.\"
+.\"    Code on .de commands:
+.\"            ***     a user interface macro.
+.\"            &&&     a user interface macro which is redefined
+.\"                    when used to be the real thing.
+.\"            $$$     a macro which may be redefined by the user
+.\"                    to provide variant functions.
+.\"            ---     an internal macro.
+.\"
+.
+.do nr need_eo_h 0
+.do nr need_eo_tl 0
+.do nr need_tl 1
+.
+.do mso devtag.tmac
+.
+.if !\n(.g .ig
+.de @R         \" --- initialize number register to 0, if undefined
+.if !r\\$1 .nr \\$1 0
+..
+.
+.\" --- check whether grohtml needs end of title/heading
+.de @html_check_need_title
+.do if (\\n[need_eo_tl] == 1) \
+\{\
+.      do nr need_eo_tl 0
+.      do DEVTAG-EO-TL
+.\}
+.do if (\\n[need_tl] == 1) \
+\{\
+.      do DEVTAG-TL
+.      do nr need_tl 0
+.      do nr need_eo_tl 1
+.\}
+.do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
+.do nr need_eo_h 0
+..
+.
+.de @check_need_title
+..
+.
+.ie '\*(.T'html' \
+.      do als check_need_title @html_check_need_title
+.el \
+.      do als check_need_title @check_need_title
+.
+.@R pf
+.if \n(pf .nx
+.
+.if !\n(.g .ig
+.de @S         \" --- initialize string/macro to empty, if undefined
+.if !d\\$1 .ds \\$1 \" empty
+..
+.
+.@R @\"                        \" debugging level
+.
+.
+.\"            *** INTERNAL GP MACROS ***
+.
+.
+.de @C                 \" --- change ev's, taking info with us
+.nr _S \\n(.s
+.nr _V \\n(.v
+.nr _F \\n(.f
+.nr _J \\n(.j
+.do ds _A \\n[.fam]
+.nr _I \\n(.i
+.ev \\$1
+.ps \\n(_S
+.vs \\n(_Vu
+.ft \\n(_F
+.ad \\n(_J
+.do @fam \\*(_A
+'in \\n(_Iu
+.xl \\n($lu
+.lt \\n($lu
+.rr _S
+.rr _V
+.rr _F
+.rr _I
+.rr _J
+.ls 1
+'ce 0
+..
+.
+.de @D         \" --- determine display type (Indent, Left, Center)
+.ds |p "\\$3
+.nr _d 0
+.if "\\$2"C" \
+.      nr _d 1
+.if "\\$2"L" \
+.      nr _d 2
+.if "\\$2"I" \
+.      nr _d 3
+.if "\\$2"M" \
+.      nr _d 4
+.if !\\n(_d \
+\{\
+.      nr _d \\$1
+.      ds |p "\\$2
+.\}
+.
+..
+.
+.rn nm @#              \" --- rename to original command
+.de nm                 \" --- turn on number mode preserving font info
+.ie \\n(.$ \
+\{\
+.      nr _S \\n(.s
+.      nr _F \\n(.f
+.      ps \\n[_#p]
+.      ft \\n[_#f]
+.      @# \\$1 \\$2 \\$3 \\$4
+.      ft \\n(_F
+.      ps \\n(_S
+.      rr _F
+.      rr _S
+.\}
+.el .@#
+..
+.
+.de @z                 \" --- end macro
+.if \n@>1 .tm >> @z, .z=\\n(.z ?a=\\n(?a
+.if !"\\n(.z"" \
+\{\
+.      tm Line \\n(c. -- Unclosed block, footnote, or other diversion (\\n(.z)
+.      di
+.      ex
+.\}
+.if \\n(?a \
+.      bp                      \" force out final table
+.ds bp
+.ds @b\"                       \" don't start another page
+.br
+.if \n@>1 .tm << @z
+..
+.
+.
+.\"            *** STANDARD HEADERS AND FOOTERS ***
+.
+.
+.ie \n(.g .ds $* \\\\$*
+.el .ds $* \\\\$1 \\\\$2 \\\\$3 \\\\$4 \\\\$5 \\\\$6 \\\\$7 \\\\$8 \\\\$9
+.
+.de he                 \" *** define header
+.ie !\\n(.$ \
+\{\
+.      rm |4
+.      rm |5
+.\}
+.el \
+\{\
+.      ds |4 "\*($*
+.      ds |5 "\*($*
+.\}
+..
+.
+.de eh                 \" *** define even header
+.ie !\\n(.$ \
+.      rm |4
+.el \
+.      ds |4 "\*($*
+..
+.
+.de oh                 \" *** define odd header
+.ie !\\n(.$ \
+.      rm |5
+.el \
+.      ds |5 "\*($*
+..
+.
+.de fo                 \" *** define footer
+.ie !\\n(.$ \
+\{\
+.      rm |6
+.      rm |7
+.\}
+.el \
+\{\
+.      ds |6 "\*($*
+.      ds |7 "\*($*
+.\}
+..
+.
+.de ef                 \" *** define even footer
+.ie !\\n(.$ \
+.      rm |6
+.el \
+.      ds |6 "\*($*
+..
+.
+.de of                 \" *** define odd footer
+.ie !\\n(.$ \
+.      rm |7
+.el \
+.      ds |7 "\*($*
+..
+.
+.de ep                 \" *** end page (must be followed by a .bp)
+.if \\n(nl>0 \
+\{\
+.      wh 0
+.      rs
+.      @b
+.\}
+..
+.
+.
+.\"            *** INTERNAL HEADER AND FOOTER MACROS ***
+.
+.
+.de @h                 \" --- header
+.if \n@>1 .tm >> @h %=\\n% ?a=\\n(?a ?b=\\n(?b ?w=\\n(?w
+.if (\\n(.i+\\n(.o)>=\\n(.l \
+.      tm Line \\n(c. -- Offset + indent exceeds line length
+.\" initialize a pile of junk
+.nr ?h \\n(?H                  \" transfer "next page" to "this page"
+.nr ?H 0
+.nr ?c \\n(?C
+.nr ?C 0
+.rn |4 |0
+.rn |5 |1
+.rn |6 |2
+.rn |7 |3
+.nr _w 0                       \" reset max footnote width
+.nr ?W 0                       \" no wide floats this page (yet)
+.nr ?I 1
+.\" begin actual header stuff
+.ev 2
+.rs
+.if \\n(hm>0 \
+.      if !'\*(.T'html' \
+.              sp |\\n(hmu     \" move to header position
+.@t $h\"                       \" output header title
+.if \\n(tm<=0 \
+.      nr tm \n(.Vu
+.if !'\*(.T'html' \
+.      sp |\\n(tmu             \" move to top of text
+.ev
+.mk _k                         \" for columned output
+.if \\n(?n=1 .nm 1             \" restore line numbering if n1 mode
+.nr $c 1                       \" set first column
+.if \n@>4 .tm -- @h >> .ns nl=\\n(nl %=\\n% _k=\\n(_k tm=\\n(tm
+.ie \\n(?s \
+\{\
+.      nr ?s 0
+.      rs
+'      @b
+.\}
+.el \
+.      @n\"                    \" begin the column
+.if \n@>2 .tm << @h
+..
+.
+.de @n                 \" --- new column or page
+.if \n@>3 .tm >> @n nl=\\n(nl %=\\n% ?f=\\n(?f ?o=\\n(?o
+.if \\n(bm<=0 \
+.      nr bm \\n(.Vu
+.if (\\n(_w<=\\n($l)&(\\n(?W=0) \
+\{\
+.      \" Compute fudge factor (must be < 1P).
+.      nr _b (\\n(ppp*\\n($vu)/200u
+.      if \\n(_bu>((\\n(bmu-\\n(fmu-((\\n(tpp*\\n($vu)/100u))/2u) \
+.              nr _b (\\n(ppp*\\n($vu)/100u-\n(.Vu
+.      nr _b +\\n(bmu
+.\}
+.nr _B \\n(_bu
+.ch @f
+.wh -\\n(_bu @f
+.nr _b +(\\n(ppp*\\n($vu)/100u \" add 1 paragraph v in case sweep past
+.if \n@>2 .tm @n .p=\\n(.p bm=\\n(bm _b=\\n(_b _B=\\n(_B
+.nr ?f 0                       \" reset footnote flag
+.if \\n(?o \
+\{\
+.      (f _\"          \" reprocess footnotes which run off page
+.      nf
+.      |o
+.      fi
+.      )f
+.      rm |o
+.\}
+.nr ?o 0
+.if \\n(?T \
+\{\
+.      nr _i \\n(.i
+.      if \\n(?n \
+.              nm \\n(ln
+.      in 0
+.      |h\"                    \" output the table header
+.      in \\n(_iu
+.      if \\n(?n \
+.              nm
+.      rr _i
+.      mk #T                   \" for tbl commands
+.      ns
+.\}
+.if (\\n(?a)&((\\n($c<2):(\\n(?w=0)) \
+\{\
+.      nr ?a 0                 \" output floating keep
+.      @k |t
+.      if \\n(?w \
+.              mk _k           \" don't overstrike wide keeps
+.      nr ?w 0
+.\}
+.os
+.$H\"                          \" special column header macro
+.ns
+..
+.
+.de @f                 \" --- footer
+.if \n@>1 .tm >> @f %=\\n% nl=\\n(nl ?a=\\n(?a ?b=\\n(?b ?f=\\n(?f
+.if \n@>2 .nr VL \\n(.pu-\\n(nlu
+.if \n@>2 .tm @f bm=\\n(bm _B=\\n(_B _b=\\n(_b .p-nl=\\n(VL
+.ec
+.if \\n(?T \
+\{\
+.      nr T. 1         \" for tbl commands (to output bottom line)
+.      T# 1\"          \" output the sides and bottom lines
+.      br
+.\}
+.ev 2
+.ce 0
+.if \\n(?b \
+\{\
+.      nr ?b 0
+.      @k |b\"                 \" output bottom of page tables
+.\}
+.if \\n(?f \
+.      @o\"                    \" output footnote if present
+.ie \\n($c<\\n($m \
+.      @c\"                    \" handle new column
+.el \
+.      @e\"                    \" new page
+.ev
+.if \n@>2 .tm << @f
+..
+.
+.de @o                 \" --- output footnote
+.nf
+.ls 1
+.in 0
+.if \n@>2 .tm @o last printed text = \\n(nl placing @r trap at -\\n(_B
+.wh -\\n(_Bu @r
+.if \\n(?n \
+.      nm \\n(ln
+.|f
+.if \\n(?n \
+.      nm
+.fi
+.if \n@>2 .tm @o triggered @r (?o) = \\n(?o
+.if \\n(?o \
+\{\
+.      di                      \" just in case triggered @r
+.      if \\n(dn=0 \
+\{\
+.              rm |o
+.              nr ?o 0
+.      \}
+.      nr dn \\n(_D
+.      rr _D
+.\}
+.rm |f
+.ch @r
+..
+.
+.de @c                 \" --- new column
+.if \n@>2 .tm  >> @c %=\\n%
+.rs
+.sp |\\n(_ku
+.@O +\\n($lu+\\n($su
+.nr $c +1
+.@n
+..
+.
+.de @e                 \" --- end page
+.if \n@>2 .tm  >> @e
+.@O \\n(_ou
+.rs
+.\" Move to footer position.
+.sp |\\n(.pu-\\n(fmu-((\\n(tpp*\\n($vu)/100u)
+.@t $f\"                       \" output footer title
+.nr ?h 0
+.bp
+..
+.
+.de @t                 \" --- output header or footer title
+.if !\\n(?h \
+\{\
+.      sz \\n(tp\"             \" set header/footer type fonts, etc.
+.      @F \\n(tf
+.      lt \\n(_Lu              \" make title span entire page
+.      if \\n(?n \
+.              nm \\n(ln
+.      nf
+.      \\$1
+.      br
+.      if \\n(?n \
+.              nm
+.\}
+..
+.
+.de $h                 \" $$$ print header
+.ds |z
+.if !\\n(?c \
+\{\
+.      if e .ds |z "\\*(|0
+.      if o .ds |z "\\*(|1
+.\}
+.if !\(ts\\*(|z\(ts\(ts \
+'      tl \\*(|z
+.rm |z
+..
+.
+.de $f                 \" $$$ print footer
+.ds |z
+.if \\n(?c \
+\{\
+.      if e .ds |z "\\*(|0
+.      if o .ds |z "\\*(|1
+.\}
+.if \(ts\\*(|z\(ts\(ts \
+\{\
+.      if e .ds |z "\\*(|2
+.      if o .ds |z "\\*(|3
+.\}
+.if !\(ts\\*(|z\(ts\(ts \
+'      tl \\*(|z
+.rm |z
+..
+.
+.de @r                 \" --- reprocess overflow footnotes
+.if \n@>3 .tm          >> @r .z=\\n(.z ?f=\\n(?f ?a=\\n(?a ?b=\\n(?b _b=\\n(_b
+.di |o                         \" save overflow footnote
+.nr ?o 1
+.nr _D \\n(dn
+.ns
+..
+.
+.
+.\"            *** COMMANDS WITH VARIANT DEFINITIONS ***
+.
+.
+.if !'\*(.T'html' .rn bp @b    \" --- begin page
+.
+.de bp                 \" *** begin new page (overrides columns)
+.nr $c \\n($m                  \" force new page, not new column
+.ie \\n(nl>0 \
+.      @b \\$1
+.el \
+\{\
+.      if \\n(.$>0 \
+.              pn \\$1
+.      if \\n(?I \
+.              @h\"            \" 'spring' the header trap
+.\}
+.br
+.wh 0 @h                       \" reset header
+..
+.
+.rn ll xl              \" *** special line length (local)
+.de ll                 \" *** line length (global to environments)
+.xl \\$1
+.lt \\$1
+.nr $l \\n(.l
+.if (\\n($m<=1):(\\n($l>\\n(_L) \
+.      nr _L \\n(.l
+..
+.
+.rn po @O              \" --- local page offset
+.
+.de po                 \" *** page offset
+.@O \\$1
+.nr _o \\n(.o
+..
+.
+.\" Redefine the fam request to set the family in
+.\" environment 2 as well as the current environment.
+.if !\n(.g .ig
+.do rn fam @fam                \" --- set family in current environment
+.do de fam             \" *** set font family in ev 2 and current ev
+.do @fam \\$1
+.ev 2
+.do @fam \\$1
+.ev
+..
+.
+.
+.\"            *** MISCELLANEOUS ROFF COMMANDS ***
+.
+.
+.de hx                 \" *** suppress headers and footers next page
+.nr ?H 1
+..
+.
+.de ix                 \" *** indent, no break
+'in \\$1
+..
+.
+.de bl                 \" *** contiguous blank lines
+.br
+.@s \\$1
+.sp \\$1
+..
+.
+.de @s                 \" --- diversion-surviving space test
+.ne \\$1
+.rs
+.if !'\\n(.z'' \!.@s \\$1
+..
+.
+.de n1                 \" *** line numbering 1
+.ll -\w'0000'u
+.nr ?n 1
+.nr _#p \\n(.s
+.nr _#f \\n(.f
+.nm 1
+..
+.
+.de n2                 \" *** line numbering 2
+.ie \\n(.$ \
+\{\
+.      ie !`\\$2`c` \
+.              po -\w'0000'u
+.      el \
+.              ll -\w'0000'u
+.      ie \\B`\\$1` \
+\{\
+.              ds |i \\$1
+.              ds |j \\$1
+.              \" Pick off leading char and rest to check.
+.              do substring |i 0 0  \"
+.              do substring |j 1    \" for +N / -N
+.              ie `\\*(|i`+` \
+.                      nr ln (\\n[_ln])+\\*(|j
+.              el \
+.                      ie `\\*(|i`-` \
+.                              nr ln (\\n[_ln])-\\*(|j
+.                      el \
+.                              nr ln \\$1  \" unsigned N
+.              nr _#p \\n(.s
+.              nr _#f \\n(.f
+.              nm \\n(ln
+.              nr ?n 2
+.              rm |i |j
+.\}
+.      el \
+.              tm Line \\n(.c -- Bad .n2 value
+.\}
+.el \
+\{\
+.      nm
+.      nr _ln \\n(ln
+.      po +\w'0000'u
+.      ll \\n($lu
+.      nr ?n 0
+.      nr ln 0
+.\}
+..
+.
+.de pa                 \" *** new page
+.bp \\$1
+..
+.
+.de ro                 \" *** roman page numbers
+.af % i
+..
+.
+.de ar                 \" *** arabic page numbers
+.af % 1
+..
+.
+.de m1                 \" *** position one space
+.nr _0 \\n(hmu
+.nr hm \\$1v
+.nr tm +\\n(hmu-\\n(_0u
+.rr _0
+..
+.
+.de m2                 \" *** position two space
+.nr tm \\n(hmu+\\n(tpp+\\$1v
+..
+.
+.de m3                 \" *** position three space
+.nr bm \\n(fmu+\\n(tpp+\\$1v
+..
+.
+.de m4                 \" *** position four space
+.nr _0 \\n(fmu
+.nr fm \\$1v
+.nr bm +\\n(fmu-\\n(_0u
+..
+.
+.de sk                 \" *** leave a blank page (next page)
+.if \\n(.$>0 \
+.      tm Line \\n(c. -- I cannot skip multiple pages
+.nr ?s 1
+..
+.
+.
+.\"            *** MISCELLANEOUS USER SUPPORT COMMANDS ***
+.
+.
+.if !\n(.g .ig
+.de re         \" *** reset tabs (TROFF defines 15 stops default)
+.ta T 0.5i
+..
+.
+.if \n(.g .ig
+.de re
+.ta 0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i +0.5i
+..
+.
+.de ba                 \" *** set base indent
+.ie \\n(.$ \
+.      nr $i \\$1n
+.el \
+.      nr $i \\n(siu*\\n($0u
+..
+.
+.de hl                 \" *** draw horizontal line
+.br
+.if '\*(.T'html' \
+\{\
+.      HR
+.      do return
+.\}
+.ie \n(.g .do nr _I \\n[.in]
+.el .nr _I \\n(.i
+\l'\\n(.lu-\\n(_Iu'
+.sp
+..
+.
+.
+.\"            *** PARAGRAPHING ***
+.
+.
+.de pp                 \" *** paragraph
+.lp \\n(piu
+..
+.
+.de lp                 \" *** left aligned paragraph
+.@p
+.if \\n(.$ \
+.      ti +\\$1
+.nr $p 0 1
+..
+.
+.de ip                 \" *** indented paragraph w/ optional tag
+.if (\\n(ii>0)&(\\n(ii<1n) \
+.      nr ii \\n(iin
+.nr _0 \\n(ii
+.if \\n(.$>1 \
+.      nr _0 \\$2n
+.@p \\n(_0u
+.nr _I \\n(.iu
+.in 0
+.nm
+.di |i
+\&\\$1
+.br
+.di
+.if \\n(?n \
+.      nm \\n(ln
+.in \\n(_Iu
+.ds |j \\*(|i\\
+.ie \\w"\\*(|j" \
+\{\
+.      ti -\\n(_0u
+.      ie \\w"\\*(|j">=\\n(_0 \
+\{\
+.              do DEVTAG-COL 1
+\\*(|j
+.              do DEVTAG-COL-NEXT 2
+.              br
+.      \}
+.      el \
+\{\
+.              do DEVTAG-COL 1
+\\*(|j\h'|\\n(_0u'\c
+.              do DEVTAG-COL 2
+.       \}
+.\}
+.el .do DEVTAG-COL 2
+.rr _0
+.rm |i |j
+..
+.
+.de np                 \" *** numbered paragraph
+.\" use string comparison in case user has changed format of $p
+.if '\\n($p'-1' \
+.      nr $p 0                 \" reset number after .bu
+.nr $p +1                      \" increment paragraph number
+.@p \w'\0(000)\0'u
+.ti -\w'\0(000)\0'u
+\0(\\n($p)\h'|\w'\0(000)\0'u'\c
+..
+.
+.de bu                 \" *** bulleted paragraph
+.br
+.\" use string comparison in case user has changed format of $p
+.if '\\n($p'-1' \
+.      ns                      \" don't space between .bu paragraphs
+.nr $p 0-1                     \" mark "bulleted paragraph" mode
+.@p \w'\0\(bu\0'u
+.ti -\w'\0\(bu\0'u
+\0\(bu\0\c
+..
+.
+.de @p                 \" --- initialize for paragraph
+.do check_need_title
+.if "\\n(.z"|e" .tm Line \\n(c. -- Unmatched continued equation
+.in \\n($iu+\\n(pou
+.if \\n(.$ \
+.      in +\\$1n
+.ce 0
+.fi
+.@F \\n(pf
+.sz \\n(pp
+.sp \\n(psu
+.ne \\n(.Lv+\\n(.Vu
+.ns
+..
+.
+.
+.\"            *** SECTION HEADINGS ***
+.
+.
+.de sh                 \" *** section heading
+.fi
+.do check_need_title
+.if (\\n(si>0)&(\\n(si<1n) \
+.      nr si \\n(sin
+.if '\*(.T'html' .nr si 0
+.ce 0
+.if '\*(.T'html' \
+\{\
+.      do DEVTAG-SH \\$1
+.      do nr need_eo_h 1
+.\}
+.@d "\\$1" +1 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+.if !"\\$2"_" \
+\{\
+.      ds |n \&\\$2
+.      $p "\\*(|n" "\\*($n" \\n($0
+.      $0 "\\*(|n" "\\*($n" \\n($0
+.      rm |n
+.\}
+.nr $p 0 1                     \" reset .np count
+..
+.
+.de @d                 \" --- change section depth
+.if !""\\$1" \
+.      nr $0 \\$1
+.if \\n($0&(\\n(.$>1) \
+.      nr $\\n($0 \\$2
+.ds $n \&\"
+.ie \\n($0>=1 \
+\{\
+.      if '\\n($1'0' \
+.              nr $1 1
+.      if (\\n(.$>=3) .if !"\\$3"-" \
+.              nr $1 \\$3
+.      as $n \\n($1
+.\}
+.el \
+.      nr $1 0
+.ie \\n($0>=2 \
+\{\
+.      if '\\n($2'0' \
+.              nr $2 1
+.      if (\\n(.$>=4) .if !"\\$4"-" \
+.              nr $2 \\$4
+.      as $n .\\n($2
+.\}
+.el \
+.      nr $2 0
+.ie \\n($0>=3 \
+\{\
+.      if '\\n($3'0' \
+.              nr $3 1
+.      if (\\n(.$>=5) .if !"\\$5"-" \
+.              nr $3 \\$5
+.      as $n .\\n($3
+.\}
+.el \
+.      nr $3 0
+.ie \\n($0>=4 \
+\{\
+.      if '\\n($4'0' \
+.              nr $4 1
+.      if (\\n(.$>=6) .if !"\\$6"-" \
+.              nr $4 \\$6
+.      as $n .\\n($4
+.\}
+.el \
+.      nr $4 0
+.ie \\n($0>=5 \
+\{\
+.      if '\\n($5'0' \
+.              nr $5 1
+.      if (\\n(.$>=7) .if !"\\$7"-" \
+.              nr $5 \\$7
+.      as $n .\\n($5
+.\}
+.el \
+.      nr $5 0
+.ie \\n($0>=6 \
+\{\
+.      if '\\n($6'0' \
+.              nr $6 1
+.      if (\\n(.$>=8) .if !"\\$8"-" \
+.              nr $6 \\$8
+.      as $n .\\n($6
+.\}
+.el \
+.      nr $6 0
+..
+.
+.de sx                 \" *** heading up, no increment (2.1.1 -> 2.1)
+.ce 0
+.ul 0
+.nr _0 \\n($0-1
+.if \\n(.$ .nr _0 +1
+.if \\n(.$ .nr _0 \\$1
+.@d \\n(_0
+.rr _0
+.$p "" "" \\n($0
+.nr $p 0 1                     \" reset .np count
+..
+.
+.de uh                 \" *** unnumbered section heading
+.$p "\\$1"
+.$0 "\\$1"
+..
+.
+.de $p                 \" $$$ print section heading
+.if (\\n(si>0)&(\\n(.$>2) \
+.      nr $i \\$3*\\n(si
+.in \\n($iu
+.ie !"\\$1\\$2"" \
+\{\
+.      sp \\n(ssu              \" one of them is non-null
+.      ne \\n(.Lv+\\n(.Vu+\\n(psu+((\\n(spp*\\n($vu*\\n(.Lu)/100u)
+.      \" exdent if \\$3 > 0
+.      ie 0\\$3 \
+.              ti -(\\n(siu-\\n(sou)
+.      el \
+.              ti +\\n(sou
+.      @F \\n(sf
+.      sz \\n(sp
+.      if 0\\$3 \
+.              $\\$3
+.      if \w"\\$2">0 \\$2.
+.      if \w"\\$1">0 \\$1\f1\ \ \&
+.\}
+.el \
+.      sp \\n(psu
+.@F \\n(pf
+.sz \\n(pp
+..
+.
+.
+.\"            *** COLUMNED OUTPUT ***
+.
+.
+.de 2c                 \" *** double columned output
+.br
+.if \\n($m>1 \
+.      1c\"                    \" revert to 1c if already 2c
+.nr $c 1
+.nr $m 2
+.if \\n(.$>1 \
+.      nr $m \\$2
+.if \\n(.$>0 \
+.      nr $s \\$1n             \" param 1: column separation
+.nr $l (\\n(.l-((\\n($m-1)*\\n($s))/\\n($m
+.xl \\n($lu
+.mk _k
+.ns
+..
+.
+.de 1c                 \" *** single columned output
+.br
+.nr $c 1
+.nr $m 1
+.ll \\n(_Lu                    \" return to normal output
+.sp |\\n(.hu
+.@O \\n(_ou
+..
+.
+.de bc                 \" *** begin column
+.sp 24i
+..
+.
+.
+.\"            *** FLOATING TABLES AND NONFLOATING BLOCKS ***
+.
+.
+.de (z                 \" *** begin floating keep
+.if \n@>4 .tm >> (z, .z=\n(.z
+.@D 4 \\$1 \\$2
+.@(
+..
+.
+.de )z                 \" *** end floating keep
+.if \n@>4 .tm >> )z, .z=\n(.z
+.sp \\n(zsu
+.@)
+.if \n@>4 .tm -- )z << @), .z=\n(.z
+.rr _0
+.if !\\n(?b \
+.      nr dn +(\\n(ppp*\\n($vu)/200u+\\n(zsu
+.nr dl -\n(.H          \" fudge factor necessary to make it work
+.ie ((\\n(dn+\n(.V)>=\\n(.t):(\\n(?a):((\\n(dl>\\n($l)&(\\n($c>1)) \
+\{\
+.      nr ?a 1
+.      if (\\n(dl>\\n($l)&(\\n($m>1) \
+.              nr ?w 1         \" mark wider than one column (top)
+.      ds |x |t
+.\}
+.el \
+\{\
+.      nr ?b 1
+.      if (\\n(dl>\\n($l)&(\\n($m>1) \
+.              nr ?W 1         \" mark wider than one column (bottom)
+.      nr _b +\\n(dnu
+.      \" avoid moving @f back past the current position
+.      if \\n(.p-\\n(nl-\n(.V<\\n(_b \
+.              nr _b \\n(.p-\\n(nl-\n(.V
+.      ch @f -\\n(_bu
+.      ds |x |b
+.\}
+.da \\*(|x                     \" copy to save macro
+.nf
+.ls 1
+.nr ?k 1
+.if \n@>4 .tm -- )z >> \\*(|x
+\!.if \\\\n(nl>(\\\\n(tm+2v) .ne \\n(dnu-\\n(zsu
+.|k\"                          \" and the body
+.ec
+.if \n@>4 .tm -- )z << \\*(|x, .z=\\n(.z
+.nr ?k 0
+.rm |k\"                       \" remove the temp macro
+.da
+.in 0
+.ls 1
+.xl \\n($lu
+.ev
+.if \n@>4 .tm << )z, .z=\\n(.z
+..
+.
+.de @k                 \" --- output floating keep
+.if \n@>4 .tm >> @k, $1=\\$1, .z=\\n(.z
+.ev 1
+.nf
+.ls 1
+.in 0
+.if !`\\$2`ns` .sp \\n(zsu     \" no pre-spacing if (b .. )b
+.if \\n(?n \
+.      nm \\n(ln
+.\\$1
+.if \\n(?n \
+.      nm
+.ec
+.br
+.rm \\$1
+.ev
+..
+.
+.de (t                 \" XXX temp ref to (z
+.(z \\$1 \\$2
+..
+.
+.de )t                 \" XXX temp ref to )t
+.)z \\$1 \\$2
+..
+.
+.de (b                 \" *** begin block
+.br
+.@D 3 \\$1 \\$2
+.sp \\n(bsu
+.@(
+.if '\*(.T'html' .sp \\n(bsu
+..
+.
+.de )b                 \" *** end block
+.br
+.@)
+.if (\\n(bt=0):(\\n(.t<\\n(bt) \
+.      ne \\n(dnu              \" make it all on one page
+.@k |k ns
+.ev                             \" return from display environment
+.sp \\n(bsu+\\n(.Lv-1v
+..
+.
+.de @(                 \" --- begin keep
+.if !"\\n(.z"" .tm Line \\n(c. -- Invalid nested keep \\n(.z
+.@M
+.di |k
+\!'rs
+..
+.
+.de @M                 \" --- set modes for display
+.nr ?k 1
+.@C 1
+.@F \\n(df
+.if \\n($R .@V
+.vs \\n(.sp*\\n($Vu/100u
+.nf
+.if "\\*(|p"F" \
+.      fi                      \" set fill mode if "F" parameter
+.if \\n(_d=4 \
+.      in 0
+.if \\n(_d=3 \
+\{\
+.      in +\\n(biu
+.      xl -\\n(biu
+.\}
+.if \\n(_d=1 \
+.      ce 10000
+..
+.
+.de @)                 \" --- end keep
+.br
+.if !"\\n(.z"|k" .tm Line \\n(c. -- Close of a keep which has never been opened
+.nr ?k 0
+.di
+.in 0
+.ce 0
+..
+.
+.de (c                 \" *** begin block centered text
+.br
+.if "\\n(.z"|c" .tm Line \\n(c. -- Nested .(c requests
+.if \\n(?n .nm
+.if ``\\n(.z` \
+\{\
+.      @C 1            \" Ensure env. set up for centering in open text
+.      ev
+.\}
+.di |c
+..
+.
+.de )c                 \" *** end block centered text
+.if !"\\n(.z"|c" .tm Line \\n(c. -- Unmatched .)c
+.br                            \" force out final line
+.di
+.if \n@>4 .tm >> .)c .l=\\n(.l .i=\\n(.i $i=\\n($i dl=\\n(dl
+.ev 1
+.ls 1
+.in (\\n(.lu-\\n(.iu-\\n(dlu)/2u
+.if \n@>4 .tm -- .)c << .in .l=\\n(.l .i=\\n(.i dl=\\n(dl
+.if \\n(?n \
+.      nm \\n(ln
+.nf
+.|c
+.ec
+.in
+.ls
+.if \\n(?n \
+.      nm
+.ev
+.rm |c
+.if \\n(?n \
+.      nm \\n(ln
+..
+.
+.
+.\"            *** BLOCK QUOTES (OR WHATEVER) AND LISTS ***
+.
+.
+.de (q                 \" *** begin block quote
+.br
+.@C 1
+.fi
+.sp \\n(qsu
+.in +\\n(qiu
+.xl -\\n(qiu
+.sz \\n(qp
+.if \\n(?n \
+.      nm \\n(ln
+..
+.
+.de )q                 \" *** end block quote
+.br
+.if \\n(?n \
+.      nm
+.ev
+.sp \\n(qsu+\\n(.Lv-1v
+.nr ?k 0
+..
+.
+.de (l                 \" *** begin list
+.br
+.sp \\n(bsu
+.@D 3 \\$1 \\$2
+.@M
+.if \\n(?n \
+.      nm \\n(ln
+.if '\*(.T'html' .sp \\n(bsu
+..
+.
+.de )l                 \" *** end list
+.br
+.ev
+.if \\n(?n \
+.      nm \\n(ln
+.sp \\n(bsu+\\n(.Lv-1v
+.nr ?k 0
+..
+.
+.
+.\"            *** PREPROCESSOR SUPPORT ***
+.
+.
+.\"
+.\"    EQN
+.\"
+.de EQ                 \" *** equation start
+.do if \\n[need_eo_h]>0 .do DEVTAG-EO-H
+.do nr need_eo_h 0
+.ec
+.if "\*(.T"html" \
+\{\
+.      do nr e-EQ-ll \\n(.l
+.      ll 1000n
+.\}
+.do HTML-IMAGE
+.if !\\n(?e \
+\{\
+.      if "\\n(.z"|e" .tm Line \\n(c. -- Nested .EQ request
+.      @D 1 "\\$1" "\\$2"
+.      @C 2
+.      di |e
+.\}
+.ls 1
+.in 0
+.nf
+..
+.
+.de EN                 \" *** equation end
+.br
+.do HTML-IMAGE-END
+.if "\*(.T"html" \
+.      do ll \\n[e-EQ-ll]u
+.ie "\\$1"C" \
+\{\
+.      nr ?e 1
+.      sp \\n(esu
+.\}
+.el \
+\{\
+.      nr ?e 0
+.      di
+.      if \\n(dn \
+.              @q\"            \" actual equation output
+.      rm |e
+.      ev
+.\}
+..
+.
+.de @q                 \" --- equation output
+.nr _Q \\n(dnu
+.ev
+.sp \\n(esu                    \" output rest of preceding text
+.if !"\\n(.z"" \!.ne \\n(_Qu
+.ne \\n(_Qu+\n(.Vu             \" keep it on one page
+.@C 2\"                                \" .ev 2 may be jumbled from header
+.if \\n(_d=1 \
+.      in (\\n(.lu+\\n($iu-\\n(dlu)/2u
+.if \\n(_d=2 \
+.      in \\n($iu
+.if \\n(_d=3 \
+.      in \\n(biu+\\n($iu
+.if \\n(_d=4 \
+.      in 0
+.mk _q
+.if \n@>1 .tm --@e: _Q=\\n(_Q _q=\\n(_q nl=\\n(nl |p=\\*(|p
+.if !"\\*(|p"" \
+\{\
+.      rs
+.      sp (\\n(_Qu-\\n(.vu)/2u
+.      tl """\\*(|p"
+.      rt \\n(_qu
+.\}
+.if \\n(?n \
+.      nm \\n(ln
+.|e
+.if \\n(?n \
+.      nm
+.sp |\\n(_qu+\\n(_Qu
+.sp \\n(esu+\\n(.Lv-1v
+.rr _q
+.rr _Q
+..
+.
+.\"
+.\"    TBL
+.\"
+.de TS                 \" *** table start
+.sp \\n(bsu
+.if "\*(.T"html" \
+\{\
+.      do nr e-TS-ll \\n(.l
+.      ll 1000n
+.\}
+.do HTML-IMAGE
+.@C 1
+.fi                            \" drop into fill mode for text boxes
+.if "\\$1"H" \
+\{\
+.      di |h                   \" save header part
+.      nr ?T 1
+.\}
+.ls 1
+.ch @f -(\\n(_bu+1v)           \" set pseudo-trap for bottom line
+.if \\n(.p-\\n(_b-1v<=\\n(nl \
+.      ch @f \\n(nlu+\n(.Vu
+..
+.
+.de TH                 \" *** end header part of table
+.nr T. 0
+.T# 0
+.if \\n(?n \!.nm
+.di
+.nr _T \\n(?T
+.nr ?T 0
+.ne \\n(dnu+1v
+.nr ?T \\n(_T
+.nr _i \\n(.i
+.if \\n(?n .nm \\n(ln
+.in 0
+.|h\"                          \" put in the initial header
+.in \\n(_iu
+.rr _i
+.mk #T
+..
+.
+.de TE                 \" *** table end
+.nr ?T 0
+.ch @f -\\n(_bu                        \" reset pseudo-trap
+.if \\n(.p-\\n(_b<=\\n(nl \
+.      ch @f \\n(nlu+\n(.Vu
+.ev
+.do HTML-IMAGE-END
+.if "\*(.T"html" \
+.      do ll \\n[e-TS-ll]u
+.sp \\n(bsu+\\n(.Lv-1v
+.re
+..
+.
+.de T&
+..
+.
+.\"
+.\"    REFER
+.\"
+.mso refer-me.tmac
+.
+.\"
+.\"    IDEAL
+.\"
+.de IS                 \" *** start ideal picture
+.nr g7 \\n(.u
+.ls 1
+..
+.
+.de IF
+.if \\n(g7 .fi
+.ls
+..
+.
+.de IE                 \" *** end ideal picture
+.if \\n(g7 .fi
+.ls
+..
+.
+.\"
+.\"    PIC
+.\"
+.de PS \" *** start picture: $1=height, $2=width in units or inches
+.sp 0.3
+.do HTML-IMAGE
+.nr g7 \\$2
+.in (u;\\n(.l-\\n(g7>?0/2)
+.ne \\$1u
+.nr g7 \\n(.u
+.ls 1
+.if \\n(?n \
+\{\
+.      de PS_nm_check && \" define macro to emit .nm at top diversion
+.      if \n@>4 .tm -- PS: \\\\$1 \\\\$2 .z=\\\\n(.z PS_nm_cnt=\\\\n[PS_nm_cnt]
+.      \" Multiple .PS/.PE in a keep.
+.      if `\\\\$2`init` \
+.              do nr PS_nm_cnt \\\\n[PS_nm_cnt]+1
+.      ie `\\\\n(.z`` \
+\{\
+.              if `\\\\$1`suspend` \
+.                      nm
+.              if `\\\\$1`resume` \
+\{\
+.                      nm \\\\n(ln
+.                      do nr PS_nm_cnt \\\\n[PS_nm_cnt]-1
+.                      do if !\\\\n[PS_nm_cnt] \
+\{\
+.                              do rm PS_nm_check
+.                              do rr PS_nm_cnt
+.\}
+.\}
+.\}
+.el \!.PS_nm_check \\\\$1
+.&&
+.      mk _q           \" emit a single numbered line for PS picture
+.      rs
+\&\ 
+.      br
+.      rt \\n(_qu
+.      PS_nm_check suspend init
+.\}
+..
+.
+.de PE                 \" *** end picture
+.if \\n(?n .PS_nm_check resume
+.ls
+.in
+.if \\n(g7 .fi
+.do HTML-IMAGE-END
+.sp .6
+..
+.
+.\"
+.\"    GREMLIN
+.\"
+.de GS                 \" *** start gremlin picture
+.ie '\*(.T'html' \
+\{\
+.      ie "\\$1"L" .do HTML-IMAGE-LEFT
+.      el .ie "\\$1"R" .do HTML-IMAGE-RIGHT
+.      el .do HTML-IMAGE
+.\}
+.el \
+\{\
+.      nr g7 (\\n(.lu-\\n(g1u)/2u
+.      if "\\$1"L" .nr g7 \\n(.iu
+.      if "\\$1"R" .nr g7 \\n(.lu-\\n(g1u
+.      in \\n(g7u
+.      nr g7 \\n(.u
+.      ls 1
+.      nf
+.      ne \\n(g2u
+.\}
+..
+.
+.de GE                 \" *** end gremlin picture
+.ie '\*(.T'html' .do HTML-IMAGE-END
+.el \
+\{\
+.      GF
+.      sp .6
+.\}
+..
+.
+.de GF                 \" *** finish gremlin picture; stay at top
+.ls
+.in
+.if \\n(g7 .fi
+..
+.
+.
+.\"            *** FONT AIDS ***
+.
+.
+.de sz                 \" *** set point size and vertical spacing
+.ps \\$1
+.if \\n($r .@v
+.vs \\n(.sp*\\n($vu/100u       \" default vs at pointsize + 20%
+..
+.
+.de @v                 \" --- possibly set $v from $r
+.if (1i>=240u)&(1p<=\\n($r)&(\\n($r<=4p) .nr $v \\n($r00/1p
+..
+.
+.de @V                 \" --- possibly set $V from $R
+.if (1i>=240u)&(1p<=\\n($R)&(\\n($R<=4p) .nr $V \\n($R00/1p
+..
+.
+.de @E         \" --- store in _F argument to \f for restoring font
+.ie \\n(.f<10 \
+.      ds _F \\n(.f
+.el \
+\{\
+.      ie \\n(.f<100&\n(.g \
+.              ds _F (\\n(.f
+.      el \
+.              ds _F P
+.\}
+..
+.
+.de r                  \" *** enter roman font
+.do check_need_title
+.@E
+.ft 1
+.if \\n(.$ \&\\$1\f\\*(_F\\$2
+.do check_need_title
+..
+.
+.de i                  \" *** enter italic
+.do check_need_title
+.@E
+.ft 2
+.if \\n(.$ \&\\$1\f\\*(_F\\$2
+.do check_need_title
+..
+.
+.de b                  \" *** enter boldface
+.do check_need_title
+.@E
+.ft 3
+.if \\n(.$ \&\\$1\f\\*(_F\\$2
+.do check_need_title
+..
+.
+.de rb                 \" *** enter real boldface
+.do check_need_title
+.@E
+.ft 3
+.if \\n(.$ \&\\$1\f\\*(_F\\$2
+.do check_need_title
+..
+.
+.de bi                 \" *** enter bold italic
+.do check_need_title
+.@E
+.ft 4
+.if \\n(.$ \&\\$1\f\\*(_F\\$2
+.do check_need_title
+..
+.
+.de u                  \" *** enter underlined word
+\&\\$1\l'|0\(ul'\\$2
+..
+.
+.\" a better version of u
+.if !\n(.g .ig
+.de u
+\Z'\\$1'\v'.25m'\D'l \w'\\$1'u 0'\v'-.25m'\\$2
+..
+.
+.de q                  \" *** enter quoted word
+\&\\*(lq\\$1\\*(rq\\$2
+..
+.
+.de bx                 \" *** enter boxed word
+.ie '\*(.T'html' \\$1\\$2
+.el \k~\(br\|\\$1\|\(br\l'|\\n~u\(rn'\l'|\\n~u\(ul'\^\\$2
+..
+.
+.de sm                 \" *** print in smaller font
+\s-1\\$1\\s+1\\$2
+..
+.
+.de @F                 \" --- change font (0 -> no change)
+.nr ~ \\$1
+.if \\n~>0 \
+.      ft \\n~
+.rr ~
+..
+.
+.
+.\"            *** FOOTNOTING ***
+.
+.
+.de (f                 \" *** begin footnote
+.ec
+.if "\\n(.z"|f" .tm Line \\n(c. -- Invalid footnote nesting
+.ie "\\n(.z"" \
+\{\
+.      nr _D \\n(dn
+.      nr _0 1v+\\n(nlu
+.      ev 2
+.      nm
+.      da |f
+.      in 0
+.      xl \\n($lu-\\n(fuu
+.      @F \\n(ff
+.      sz \\n(fp
+.      vs \\n(.sp*\\n($Vu/100u
+.      if !\\n(?f \
+\{\
+.              nr _b +1v       \" allow space for $s
+.              $s
+.      \}
+.      br
+.      if \\n(.p-\\n(_b-\\n(_0-\\n(.h-1v-\\n(fs<0 \
+\{\
+.              da\"            \" won't fit on page at all
+.              bc
+.              if !\\n(?f \
+.                      rm |f
+.              da |f
+.\" Next 5 lines could be dropped if headers had their own environment.
+.              in 0            \" reset everything from .bc
+.              xl \\n($lu-\\n(fuu
+.              @F \\n(ff
+.              sz \\n(fp
+.              vs \\n(.sp*\\n($Vu/100u
+.              if !\\n(?f \
+.                      $s
+.              br
+.      \}
+.      rr _0
+.      sp \\n(fsu
+.      nr ?f 1
+.      fi
+.      if !"\\$1"_" \
+.              ti \\n(fiu
+.      if \n@>2 .tm    << (f $f=\\n($f
+.\}
+.el \
+\{\
+.      ev 2
+.      nm
+.      in 0
+.      xl \\n($lu-\\n(fuu
+.      @F \\n(ff
+.      sz \\n(fp
+.      vs \\n(.sp*\\n($Vu/100u
+.      fi
+\!.(f \\$1
+\!.@N
+.\}
+..
+.
+.de @N         \" --- set no fill mode in the top-level diversion
+.ie "\\n(.z"" .nf
+.el \!.@N
+..
+.
+.de )f                 \" *** end footnote
+.ie "\\n(.z"|f" \
+\{\
+.      if \\n* \
+.              nr $f +1
+.      ds * \\*{\\n($f\\*}\k*
+.      nr * 0
+.      in 0
+.      da
+.      ev
+.      if \\n(_w<\\n(dl \
+.              nr _w \\n(dl    \" compute maximum fn width
+.      nr _b +\\n(dn
+.      ch @f -\\n(_bu
+.      if \\n(.p-\\n(_b<=\\n(nl \
+.              ch @f \\n(nlu+\n(.Vu
+.      nr dn \\n(_D
+.      rr _D
+.\}
+.el \
+\{\
+.      br
+\!.)f
+.      ev
+.\}
+..
+.
+.@R ff
+.if \n(ff<=0 \
+.      nr ff 1                 \" footnote font: Times Roman
+.@R fp
+.if \n(fp<=0 \
+.      nr fp 8                 \" footnote pointsize
+.
+.de $s                 \" $$$ footnote separator
+\l'2i'
+..
+.
+.
+.\"            *** DELAYED TEXT ***
+.
+.
+.de (d                 \" *** begin delayed text
+.am |d )d
+.sp \\n(bsu
+..
+.
+.de )d                 \" *** end delayed text
+.if \\n# \
+.      nr $d +1
+.ds # [\\n($d]\k#
+.rr #
+..
+.
+.de pd                 \" *** print delayed text
+.|d
+.rm |d
+.nr $d 1 1
+.ds # [1]\k#
+..
+.
+.
+.\"            *** INDEXES (TABLE OF CONTENTS) ***
+.
+.
+.nr _x 0 1
+.do nr _xn 0
+.af _x a
+.
+.de (x                 \" *** begin index entry
+.if \n@>4 .tm >> (x, .z=\\n(.z
+.ds |X x
+.if \\n(.$>0 \
+.      ds |X \\$1
+.ie "\\n(.z"" \
+.      nr _z 0
+.el \
+.      nr _z 1
+.@\\n(_z
+..
+.
+.de @0                 \" --- finish (x if no current diversion
+.am %\\*(|X )x
+.sp \\n(xsu
+.ti -\\n(piu
+..
+.
+.de @1                 \" --- finish (x if current diversion
+.if "\\n(_x"z" .nr _x 0
+.de =\\n+(_x )x
+..
+.
+.de )x                 \" *** end index entry
+.if \n@>4 .tm >> )x, .z=\\n(.z
+.ie "\\n(.z"" \
+\{\
+.      ds |x \\n%
+.      if \\n(.$>0 \
+.              ds |x \\$1
+.      if "\\*(|x"_" \
+.              ig ..
+.      am %\\*(|X ..
+.      if \w"\\$2">(\\n(.l-\\n(.i-\\n(.k) \
+.              ti +\\n(xuu
+\\\\a\\\\t\\$2\\*(|x
+...
+.      rm |x
+.      rm |X
+.\}
+.el \
+\{\
+\!.(x \\*(|X
+\!\\\\*(=\\n(_x\\\\
+\!.)x \\$1 \\$2
+\!.rm =\\n(_x
+.\}
+..
+.
+.de xp                 \" *** print the index
+.br
+.@C 2
+.ls 1
+.vs \\n(.sp*\\n($Vu/100u
+.fi
+.in +\\n(piu
+.ds |X x
+.if \\n(.$>0 \
+.      ds |X \\$1
+.xl -(\\n(xuu+\w'...'u)
+.di |x
+.%\\*(|X
+.br
+.di
+.rm %\\*(|X
+.xl \\n($lu
+.rm |X
+.ev
+.nf
+.in 0
+.ta \\n(.lu-\\n(xuuR \\n(.luR
+.|x
+.fi
+.in
+.rm |x
+..
+.
+.
+.\"            *** HTML VERSIONS OF .x(, .x), AND .xp ***
+.
+.
+.de (x-html    \" --- create TAG and divert text
+.nr _x +1
+.do nr _xn +1
+.do TAG "_x\\n[_x]
+.br
+.do di |x\\n[_xn]
+.br
+..
+.
+.de )x-html    \" --- end diversion
+.br
+.di
+..
+.
+.de xp-html    \" --- create list of links
+.do nr _xx 1
+.br
+.do ev xp-html-ev
+.sp
+.do ULS
+.do while \\n[_xx]<=\\n[_xn] \
+\{\
+.      br
+.      do unformat |x\\n[_xx]
+.      do di xp-html-div
+.      br
+.      ll 100i
+.      fi
+.      do |x\\n[_xx]
+.      br
+.      di
+.      do asciify xp-html-div
+.      do rm xp-html-as
+.      do as xp-html-as #
+.      do as xp-html-as _x\\n[_xx]
+.      ll
+.      LI
+.      do URL \\*[xp-html-as] "\\*[xp-html-div]
+.      do rm xp-html-as
+.      do nr _xx +1
+.\}
+.do ULE
+.sp
+.ev
+..
+.
+.if '\*(.T'html' \
+\{\
+.      rm (x
+.      do als (x (x-html
+.      rm )x
+.      do als )x )x-html
+.      rm xp
+.      do als xp xp-html
+.\}
+.
+.
+.\"            *** CHAPTERS AND TITLES ***
+.
+.
+.de +c                         \" *** begin chapter
+.ep\"                          \" force out footnotes
+.if \\n(?o:\\n(?a \
+\{\
+.      bp                      \" force out a table or more footnote
+.      rs
+.      ep
+.\}
+.nr ?C 1
+.nr $f 1 1
+.ds * \\*{1\\*}\k*
+.if \\n(?R \
+.      pn 1
+.bp
+.in \\n($iu                    \" reset the indent
+.rs
+.ie \\n(.$ \
+.      $c "\\$1"
+.el \
+.      sp 3
+..
+.
+.de ++                 \" *** declare chapter type
+.nr _0 0
+.if "\\$1"C" \
+.      nr _0 1                 \" chapter
+.if "\\$1"RC" \
+.      nr _0 11                \" renumbered chapter
+.if "\\$1"A" \
+.      nr _0 2                 \" appendix
+.if "\\$1"RA" \
+.      nr _0 12                \" renumbered appendix
+.if "\\$1"P" \
+.      nr _0 3                 \" preliminary material
+.if "\\$1"B" \
+.      nr _0 4                 \" bibliographic material
+.if "\\$1"AB" \
+.      nr _0 5                 \" abstract
+.if \\n(_0=0 \
+.      tm Line \\n(c. -- Bad mode to .++
+.nr ?R 0
+.if \\n(_0>10 \
+\{\
+.      nr ?R 1
+.      nr _0 -10
+.\}
+.nr ch 0 1
+.if (\\n(_0=3):(\\n(_0=5) \
+.      pn 1                    \" must do before .ep
+.if !\\n(_0=\\n(_M .if \\n(_M=3 \
+.      pn 1                    \" must do before .ep
+.ep\"                  \" end page for correct page number types
+.if \\n(_0=1 \
+\{\
+.      af ch 1
+.      af % 1
+.\}
+.if \\n(_0=2 \
+\{\
+.      af ch A
+.      af % 1
+.\}
+.if \\n(_0=3 \
+.      af % i
+.if \\n(_0=4 \
+.      af % 1
+.if \\n(_0=5 \
+.      af % 1
+.if \\n(.$>1 \
+.      he \\$2
+.nr _M \\n(_0
+.rr _0
+..
+.
+.de $c                 \" $$$ print chapter title
+.sz 12
+.ft 3
+.ce 1000
+.if \\n(_M<3 \
+.      nr ch +1
+.ie \\n(_M=1 CHAPTER\ \ \\n(ch
+.el .if \\n(_M=2 APPENDIX\ \ \\n(ch
+.if \w"\\$1" .sp 3-\\n(.L
+.if \w"\\$1" \\$1
+.if (\\n(_M<3):(\w"\\$1") \
+.      sp 4-\\n(.L
+.ce 0
+.ft
+.sz
+.ie \\n(_M=1 \
+.      $C Chapter \\n(ch "\\$1"
+.el .if \\n(_M=2 \
+.      $C Appendix \\n(ch "\\$1"
+..
+.
+.de tp                 \" *** title page
+.hx
+.bp
+.br
+.rs
+.pn \\n%
+..
+.
+.\"            *** DATES ***
+.if \n(mo=1 .ds mo January
+.if \n(mo=2 .ds mo February
+.if \n(mo=3 .ds mo March
+.if \n(mo=4 .ds mo April
+.if \n(mo=5 .ds mo May
+.if \n(mo=6 .ds mo June
+.if \n(mo=7 .ds mo July
+.if \n(mo=8 .ds mo August
+.if \n(mo=9 .ds mo September
+.if \n(mo=10 .ds mo October
+.if \n(mo=11 .ds mo November
+.if \n(mo=12 .ds mo December
+.if \n(dw=1 .ds dw Sunday
+.if \n(dw=2 .ds dw Monday
+.if \n(dw=3 .ds dw Tuesday
+.if \n(dw=4 .ds dw Wednesday
+.if \n(dw=5 .ds dw Thursday
+.if \n(dw=6 .ds dw Friday
+.if \n(dw=7 .ds dw Saturday
+.nr y2 \n(yr%100
+.af y2 00
+.nr y4 \n(yr+1900
+.ds td \*(mo \n(dy, \n(y4
+.
+.
+.\"            *** PARAMETRIC INITIALIZATIONS ***
+.
+.
+.rr x
+.nr $v \n(.v00+\n(.sp-1/\n(.sp \" vs as % of ps for .sz request
+.nr $V \n($v                   \" same for displays & footnotes
+.nr hm 4v                      \" header margin
+.nr tm 7v                      \" top margin
+.nr bm 6v                      \" bottom margin
+.nr fm 3v                      \" footer margin
+.nr tf 3                       \" title font: (real) Times Bold
+.nr tp 10                      \" title point size
+.hy 6
+.nr bi 4m                      \" indent for blocks
+.nr pi 5n                      \" indent for paragraphs
+.nr pf 1                       \" normal text font
+.nr pp 10                      \" normal text point size
+.nr qi 4n                      \" indent for quotes
+.nr qp -1                      \" down one point
+.nr ii 5n                      \" indent for .ip's and .np's
+.nr $m 1                       \" max number of columns
+.nr $s 4n                      \" column separation
+.nr sf 3                       \" section font -- Times Bold
+.nr sp 10                      \" section title pointsize
+.nr ss 12p                     \" section prespacing
+.nr si 0                       \" section indent
+.
+.
+.\"            *** OTHER INITIALIZATION ***
+.
+.
+.\" GNU pic sets this register to 1 to indicate that \x should not be
+.\" used.
+.@R 0x
+.ds { \v'-0.4m'\x'\\n(0x=0*-0.2m'\s-3
+.ds } \s+3\v'0.4m'
+.\" for compatibility with traditional -me
+.\" (the first will work only in compatibility mode)
+.ds [ \*{
+.ds ] \*}
+.ds < \v'0.4m'\x'\\n(0x=0*0.2m'\s-3
+.ds > \s+3\v'-0.4m'
+.ds - \(em
+.\" Avoid warnings from groff -ww.
+.@S |0
+.@S |1
+.@S |2
+.@S |3
+.@S $H
+.@S $0
+.@S $1
+.@S $2
+.@S $3
+.@S $4
+.@S $5
+.@S $6
+.@S $7
+.@S $8
+.@S $9
+.@S ..
+.
+.@R po\"               \" simulated page offset
+.@R $0\"               \" section depth
+.@R $i\"               \" paragraph base indent
+.@R $p\"               \" numbered paragraph number
+.@R $r\"               \" ratio of vs to ps (may override $v)
+.@R $R\"               \" same for displays (may override $V)
+.@R df\"               \" display font: same as surrounding text
+.@R so\"               \" additional section title offset
+.@R fu\"               \" footnote undent
+.@R bt\"               \" block keep threshold
+.@R *\"                        \" has \** been referenced?
+.@R ?a\"               \" pending floating keep at page top?
+.@R ?b\"               \" pending floating keep at page bottom?
+.@R ?C\"               \" at chapter header?
+.@R ?e\"               \" in equation?
+.@R ?H\"               \" suppress headers and footers next page?
+.@R ?I\"               \" has the header trap been sprung?
+.@R ?n\"               \" n1 mode?
+.@R ?o\"               \" footnote overflow?
+.@R ?R\"               \" renumbered chapter?
+.@R ?s\"               \" skip next page?
+.@R ?T\"               \" inside .TS H?
+.@R ?W\"               \" wide floating keep at page bottom?
+.@R ?w\"               \" wide floating keep at page top?
+.
+.nr fi 0.3i
+.nr _o \n(.o
+.nr $b 3                       \" bold
+.nr ps 0.35v
+.if \n(ps<\n(.V .nr ps \n(.V
+.nr bs \n(ps                   \" block pre/post spacing
+.nr qs \n(ps                   \" quote pre/post spacing
+.nr zs 1v                      \" float-block pre/postspacing
+.nr xs 0.2v                    \" index prespacing
+.nr xu 0.5i                    \" index undent
+.nr fs 0.2v                    \" footnote prespacing
+.nr es 0.5v                    \" equation pre/postspacing
+.if \n(es<\n(.V .nr es \n(.V
+.wh 0 @h                       \" set header
+.nr $l \n(.lu                  \" line length
+.nr _L \n(.lu                  \" line length of page
+.nr $c 1                       \" current column number
+.nr $f 1 1                     \" footnote number
+.ds * \*{1\*}\k*\"             \" footnote "name"
+.nr $d 1 1                     \" delayed text number
+.ds # [1]\k#\"                 \" delayed text "name"
+.nr _M 1                       \" chapter mode is chapter
+.ds lq \(lq\"                  \" left quote
+.ds rq \(rq\"                  \" right quote
+.em @z
+.
+.
+.\"            *** FOREIGN LETTERS AND SPECIAL CHARACTERS ***
+.
+.
+.ds #h ((1u-(\\\\n(.fu%2u))*0.13m)
+.ds #v 0.6m
+.
+.\"                    \" accents
+.ds ' \h'0'\k_\h'-(\\n(.wu*8/10-\*(#h)'\(aa\h'|\\n_u'
+.ds ` \h'0'\k_\h'-(\\n(.wu*7/10-\*(#h)'\(ga\h'|\\n_u'
+.
+.\"                    \" umlaut
+.ds : \h'0'\k_\h'-(\\n(.wu*8/10-\*(#h+0.1m)'\v'-\*(#v'\z.\h'0.2m'.\h'|\\n_u'\v'\*(#v'
+.
+.\"                    \" circumflex and tilde
+.ds ^ \h'0'\k_\h'-(\\n(.wu-\*(#h-0.05m)'^\h'|\\n_u'
+.ds ~ \h'0'\k_\h'-(\\n(.wu-\*(#h-0.05m)'~\h'|\\n_u'
+.
+.\"                    \" cedilla and czech
+.ds , \h'0'\k_\h'-(\\n(.wu)',\h'|\\n_u'
+.ds v \h'0'\k_\h'-(\\n(.wu*9/10-\*(#h)'\v'-\*(#v'\s-4v\s0\v'\*(#v'\h'|\\n_u'
+.
+.\"                    \" Norwegian A or angstrom
+.ds o \h'0'\k_\h'-(\\n(.wu+\w'\(de'u-\*(#h)/2u'\v'-0.4n'\z\(de\v'0.4n'\h'|\\n_u'
+.
+.\"                    \" there exists, for all
+.ds qe \s-2\v'0.45m'\z\(em\v'-0.625m'\z\(em\v'-0.625m'\(em\v'0.8m'\s0\h'-0.1m'\v'-0.05m'\(br\v'0.05m'\h'0.1m'
+.ds qa \z\e\h'0.35m'\z\(sl\h'-0.33m'\v'-0.3m'\s-4\(em\s0\v'0.3m'\h'0.15m'
+.rm #h #v
+.ll 6.0i
+.lt 6.0i
+.
+.de @U
+.tm The \\$1 macro has been removed from this version of the -me macros.
+..
+.
+.de lo
+.@U lo
+..
+.
+.de th
+.@U th
+..
+.
+.de ac
+.@U ac
+..
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=nroff textwidth=72:
index 72208a154a06a954c9957449d3e7b95aa83e22f7..b3af3845c8f18b9c7a758df8f8aac20bb6e68a89 100644 (file)
@@ -1,24 +1,23 @@
-.\" -*- mode: nroff; coding: iso-latin-9; -*-
-.\"
 .\" French localization for groff
 .\"
-.\" Copyright (C) 2006, 2007, 2009 Free Software Foundation, Inc.
+.\" Copyright (C) 2006-2018 Free Software Foundation, Inc.
 .\"   Written by Fabrice Ménard (menard.fabrice@wanadoo.fr)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .\" Please send comments to menard.fabrice@wanadoo.fr.
 .
 .      \" update the date
 .      ds DY \n[dy] \*[MO] \n[year]
 .      \" set hyphenation flags
-.      nr HY 12
+.      nr HY 4
 .\}
 .
 .
 .mso latin9.tmac
 .
 .
-.\" French hyphenation
+.\" French hyphenation (\lefthyphenmin=2, \righthyphenmin=3)
 .ss 12 0
-.hy 12
+.hy 4
 .hcode à à  À à
 .hcode â â  Â â
 .hcode ç ç  Ç ç
 .hpf hyphen.fr
 .
 .
-.\" man, mdoc and mdoc-old are intentionally left untouched:
-.\" usually these packages are translated in the sources of the documents.
+.\" man, mdoc and mdoc-old are intentionally left untouched: usually
+.\" these packages are translated in the sources of the documents.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
 .
-.\" end of fr.tmac
+.\" Local Variables:
+.\" mode: nroff
+.\" coding: latin-9
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/groff_man.7.man b/tmac/groff_man.7.man
new file mode 100644 (file)
index 0000000..ef5f9f5
--- /dev/null
@@ -0,0 +1,2613 @@
+'\" t
+.TH GROFF_MAN @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_man \- GNU roff macro package for formatting man pages
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_man_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1999-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY "groff \-man"
+.RI [ option
+\&.\|.\|.\&]
+.RI [ input-file
+\&.\|.\|.\&]
+.SY "groff \-m man"
+.RI [ option
+\&.\|.\|.\&]
+.RI [ input-file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+The
+.I man
+macro package for
+.I groff
+is used to produce manual pages
+.\" We use an unbreakable space \~ here to keep the phrase intact for
+.\" its introduction; in subsequent discussion, that is not important.
+(\(lqman\~pages\(rq)
+like the one you are reading.
+.
+GNU
+.IR roff 's
+implementation was written by James Clark.
+.
+.
+.PP
+This document presents the macros thematically to aid learners;
+for those needing only a quick reference,
+the following table lists them alphabetically,
+with cross-references to appropriate subsections below.
+.
+.
+.PP
+.TS
+l l l.
+Macro  Meaning Subsection
+.T&
+lB l l.
+_
+\&.B   Bold    Font style macros
+\&.BI  Bold, italic alternating        Font style macros
+\&.BR  Bold, roman alternating Font style macros
+\&.EE  Example end     Document structure macros
+\&.EX  Example begin   Document structure macros
+\&.I   Italic  Font style macros
+\&.IB  Italic, bold alternating        Font style macros
+\&.IP  Indented paragraph      Paragraph macros
+\&.IR  Italic, roman alternating       Font style macros
+\&.LP  (Left) paragraph        Paragraph macros
+\&.ME  Mail-to end     Hyperlink and email macros
+\&.MT  Mail-to start   Hyperlink and email macros
+\&.OP  (Command-line) option   Command synopsis macros
+\&.P   Paragraph       Paragraph macros
+\&.PP  Paragraph       Paragraph macros
+\&.RB  Roman, bold alternating Font style macros
+\&.RE  Relative-indent end     Document structure macros
+\&.RI  Roman, italic alternating       Font style macros
+\&.RS  Relative-indent start   Document structure macros
+\&.SB  Small bold      Font style macros
+\&.SH  Section heading Document structure macros
+\&.SM  Small   Font style macros
+\&.SS  Subection heading       Document structure macros
+\&.SY  Synopsis start  Command synopsis macros
+\&.TH  Title heading   Document structure macros
+\&.TP  Tagged paragraph        Paragraph macros
+\&.TQ  Tagged paragraph continuation   Paragraph macros
+\&.UE  URL end Hyperlink and email macros
+\&.UR  URL start       Hyperlink and email macros
+\&.YS  Synopsis end    Command synopsis macros
+.TE
+.
+.
+.PP
+Macros whose use we discourage
+.RB ( .AT ,
+.BR .BT ,
+.BR .DT ,
+.BR .HP ,
+.BR .PD ,
+.BR .PT ,
+and
+.BR .UC )
+are described in subsection \(lqDeprecated features\(rq, below.
+.
+.
+.\" ====================================================================
+.SS "Macro reference preliminaries"
+.\" ====================================================================
+.
+Each macro is described in a tagged paragraph.
+.
+Closely related macros,
+such as
+.B .EX
+and
+.BR .EE ,
+are grouped together.
+.
+.
+.PP
+Optional macro arguments are indicated by surrounding them with square
+brackets.
+.
+If a macro accepts multiple arguments,
+arguments containing whitespace must be double-quoted ("one two"),
+to be interpreted correctly.
+.
+Most macro arguments are strings that will be output as text;
+exceptions are noted.
+.
+.
+.PP
+Bear in mind that
+.I groff
+is fundamentally a programming system for typesetting.
+.
+Consequently,
+the verb \(lqto set\(rq is frequently used below in the sense \(lqto
+typeset\(rq.
+.
+.
+.\" ====================================================================
+.SS "Document structure macros"
+.\" ====================================================================
+.
+The highest level of organization of a man page is determined by this
+group of macros.
+.
+.B .TH
+(title heading) identifies the document as a man page and defines
+information enabling its indexing by
+.IR mandb (8)
+or a similar tool.
+.
+.
+Sections
+.RB ( .SH ),
+one of which is mandatory and many of which are standardized,
+facilitate quick location of relevant material by the reader and aid
+the man page writer to discuss all essential aspects of the topic.
+.
+Subsections
+.RB ( .SS )
+are optional and permit sections that grow long to develop in a
+controlled way.
+.
+Many technical discussions require examples;
+lengthy ones,
+especially those reflecting multiple lines of input to or output from
+the system,
+are usefully bracketed by
+.B .EX
+and
+.BR .EE .
+.
+When none of the foregoing meets a structural demand,
+a section of the discussion can be manually indented within
+.B .RS
+and
+.B .RE
+macros.
+.
+.
+.TP
+.BI .TH " title section"\c
+.RI " [" footer-middle ]\c
+.RI " [" footer-outside ]\c
+.RI " [" header-middle ]
+Define the title of the man page as
+.I title
+and the section as
+.IR section .
+.
+See
+.IR man (1)
+for details on the section numbers and suffixes applicable to your
+system.
+.
+.I title
+and
+.I section
+are positioned together at the left and right in the header line
+(with
+.I section
+in parentheses immediately appended to
+.IR title ).
+.
+.I footer-middle
+is centered in the footer line.
+.
+.I footer-outside
+is positioned at the left in the footer line (or at the left on
+even pages and at the right on odd pages if double-sided printing is
+active).
+.
+.I header-middle
+is centered in the header line.
+.
+If
+.I section
+is a simple integer between 1 and\~9 (inclusive),
+or is exactly \(lq3p\(rq,
+there is no need to specify
+.IR header-middle ;
+the macro package will supply text for it.
+.
+.
+.IP
+For HTML output, headers and footers are completely suppressed.
+.
+.
+.IP
+Additionally, this macro starts a new page; the page number is reset
+to\~1
+(unless the
+.B \-rC1
+option is given on the command line).
+.
+This feature is intended only for formatting multiple man pages.
+.
+.
+.IP
+A man page should contain exactly one
+.B .TH
+call at or near the beginning of the file,
+prior to any other macro calls.
+.
+.
+.IP
+By convention,
+.I footer-middle
+is the most recent modification date of the man page source document,
+and
+.I footer-outside
+is the name and version or release of the project providing it.
+.
+.
+.TP
+.BR .SH " ["\c
+.IR heading-text ]
+Set
+.I heading-text
+as a section heading flush left.
+.
+The text following
+.B .SH
+up to the end of the line,
+or the text on the next input line if
+.B .SH
+is given no arguments,
+is set in bold
+(or the font specified by the string register
+.BR HF )
+slightly larger than the base font size.
+.
+Additionally,
+the left margin and indentation affecting subsequent text are reset to
+their default values.
+.
+Text on input lines after
+.I heading-text
+is set as a normal paragraph
+.RB ( .PP ).
+.
+.
+.IP
+The content of
+.I heading-text
+and ordering of sections has been standardized by common practice,
+as has much of the layout of material within sections.
+.
+For example,
+a section called \(lqName\(rq or \(lqNAME\(rq must exist,
+must be the first section after the
+.B .TH
+call,
+and must contain only a line of the form
+.RS \" Invisibly move left margin to current .IP indent.
+.RS \" Now indent further, visibly.
+.IR page-topic [\c
+.BR , " \&.\|.\|.\&]"
+.B \e\-\ \c
+.I summary-description
+.RE \" Move left margin back to .IP indentation.
+for a man page to be properly indexed.
+.
+See
+.IR man (7)
+for the conventions prevailing on your system.
+.RE \" Move left margin back to standard position.
+.
+.
+.TP
+.BR .SS " ["\c
+.IR subheading-text ]
+Set
+.I subheading-text
+as a subsection heading indented (by default) partway between a section
+heading and a normally-indented paragraph
+.RB ( .PP ).
+.
+The text following
+.B .SS
+up to the end of the line,
+or the text on the next input line if
+.B .SS
+is given no arguments,
+is set in bold
+(or the font specified by the string register
+.BR HF )
+at the base font size.
+.
+Additionally,
+the left margin and indentation affecting subsequent text are reset to
+their default values.
+.
+Text on input lines after
+.I subheading-text
+is set as a normal paragraph
+.RB ( .PP ).
+.
+.
+.TP
+.B .EX
+.TQ
+.B .EE
+Begin and end example.
+.
+After
+.BR .EX ,
+filling and hyphenation are disabled and a constant-width (monospaced)
+font is selected.
+.
+Calling
+.B .EE
+enables filling and restores the previous hyphenation setting and font.
+.
+.
+.\" BEGIN EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.IP
+Example regions are useful for formatting code,
+shell sessions,
+and text file contents.
+.
+.
+.\" END EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.IP
+These macros are defined on many (but not all) legacy Unix systems
+running classic
+.IR troff .
+.
+To be certain your page will be portable to those systems, copy
+their definitions from the
+.I \%an\-ext.tmac
+file of a
+.I groff
+installation.
+.
+.
+.TP
+.BR .RS " ["\c
+.IR indent ]
+Move the left margin to the right by the value
+.IR indent ,
+if specified,
+and by a default amount otherwise;
+see subsection \(lqHorizontal and vertical spacing\(rq below.
+.
+Calls to
+.B .RS
+can be nested;
+each call increments by\~1 the indentation level used by
+.BR .RE .
+.
+The indentation level prior to any
+.B .RS
+calls is\~1.
+.
+.
+.TP
+.BR .RE " ["\c
+.IR level ]
+Move the left margin back to that corresponding to indentation level
+.IR level .
+.
+If no argument is given, move the left margin one level back.
+.
+.
+.\" ====================================================================
+.SS "Paragraph macros"
+.\" ====================================================================
+.
+A typical paragraph
+.RB ( .PP )
+is set at the current left margin,
+which by default is indented from the left margin of the output device.
+.
+In man pages and other technical literature,
+definition lists are frequently encountered;
+these can be set as \(lqtagged paragraphs\(rq
+.RB ( .TP
+and
+.BR .TQ ),
+which have one or more leading tags followed by a paragraph that has an
+additional left indent.
+.
+The indented paragraph
+.RB ( .IP )
+macro is useful to continue the indented content of a narrative started
+with
+.BR .TP ,
+or to present an itemized or ordered list.
+.
+.
+.TP
+.B .LP
+.TQ
+.B .PP
+.TQ
+.B .P
+Begin a new paragraph;
+these macros are synonymous.
+.
+They break the output line at the current position,
+followed by a vertical space downward by a default amount
+(which can be changed by the deprecated
+.B .PD
+macro).
+.
+The font size and style are reset to defaults;
+see subsection \(lqFont style macros\(rq below.
+.
+Finally, the left margin and indentation are reset to default values.
+.
+.
+.TP
+.BR .TP " ["\c
+.IR indent ]
+Set a tagged, indented paragraph.
+.
+The input line following this macro,
+known as the
+.IR tag ,
+is printed at the current left margin.
+.
+Subsequent text is indented by
+.IR indent ,
+if specified,
+and by a default amount otherwise;
+see subsection \(lqHorizontal and vertical spacing\(rq below.
+.
+.
+.IP
+If the tag is not as wide as the indentation,
+the paragraph starts on the same line as the tag,
+at the applicable indentation,
+and continues on the following lines.
+.
+Otherwise,
+the descriptive part of the paragraph begins on the line following the
+tag,
+entirely indented.
+.
+The line containing the tag can include a macro call,
+for instance to set the tag in bold with
+.BR .B .
+.
+.
+.IP
+.B .TP
+was used to write the first paragraph of this description of
+.BR .TP ,
+and
+.B .IP
+the subsequent ones.
+.
+.
+.TP
+.B .TQ
+Set an additional tag for a paragraph tagged with
+.BR .TP .
+.
+The pending output line is broken.
+.
+The tag on the input line following this macro and subsequent lines are
+handled as with
+.BR .TP .
+.
+.
+.IP
+This macro is not defined on legacy Unix systems running classic
+.IR troff .
+.
+To be certain your page will be portable to those systems,
+copy its definition from the
+.I \%an\-ext.tmac
+file of a
+.I groff
+installation.
+.
+.
+.IP
+The descriptions of
+.BR .LP ,
+.BR .PP ,
+and
+.B .P
+above were written using
+.B .TP
+and
+.BR .TQ .
+.
+.
+.TP
+.BR .IP " ["\c
+.IR tag "] "\c
+.RI [ indent ]
+Set an indented paragraph with an optional tag.
+.
+The
+.I tag
+and
+.I indent
+arguments,
+if present,
+are handled as with
+.BR .TP ,
+with the exception that the
+.I tag
+argument to
+.B .IP
+cannot include a macro call.
+.
+.
+.\" BEGIN EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.IP
+Two convenient use cases for
+.B .IP
+are
+.
+.
+.RS \" Invisibly move left margin to current .IP indent.
+.RS \" Now indent further, visibly.
+.IP (1) 4n
+to start a new paragraph with the same indentation as the previous
+.B .IP
+or
+.B .TP
+paragraph,
+if no
+.I indent
+argument is given;
+and
+.
+.
+.IP (2)
+to set a paragraph with a short
+.I tag
+that is not semantically important,
+such as a bullet (\(bu)\(emobtained with the \(oq\e(bu\(cq character
+escape\(emor list enumerator,
+as seen in this very paragraph.
+.RE \" Move left margin back to .IP indentation.
+.RE \" Move left margin back to standard position.
+.
+.
+.\" END EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.\" ====================================================================
+.SS "Command synopsis macros"
+.\" ====================================================================
+.
+Command synopses are a staple of section\~1 and\~8 man pages.
+.
+These macros aid you to construct one that has the classical Unix
+appearance.
+.
+Furthermore,
+some tools are able to interpret these macros semantically and treat
+them appropriately for localization and/or presentation.
+.
+A command synopsis is wrapped in
+.BR .SY / .YS
+calls,
+with command-line options of some formats indicated by
+.BR .OP .
+.
+.
+.PP
+These macros are not defined on legacy Unix systems running classic
+.IR troff .
+.
+To be certain your page will be portable to those systems, copy
+their definitions from the
+.I \%an\-ext.tmac
+file of a
+.I groff
+installation.
+.
+.
+.TP
+.BI .SY " command"
+Begin synopsis.
+.
+Hyphenation is turned off.
+.
+The
+.I command
+argument is set in bold.
+.
+The output line is filled as normal,
+but if a break is required,
+subsequent output lines are indented by the width of
+.I command
+plus a space.
+.
+.
+.TP
+.BI .OP " option-name"\/\c
+.RI " [" option-argument ]
+Indicate an optional command parameter called
+.IR option-name ,
+which is set in bold.
+.
+If the option takes an argument, specify
+.I option-argument
+using a noun, abbreviation, or hyphenated noun phrase.
+.
+If present,
+.I option-argument
+is preceded by a space and set in italics.
+.
+Square brackets (in roman) surround both arguments.
+.
+.
+.TP
+.B .YS
+End synopsis.
+.
+Restore indentation and hyphenation to previous values.
+.
+.
+.PP
+Multiple
+.B .SY/.YS
+blocks can be specified,
+for instance to distinguish differing modes of operation of a complex
+command like
+.IR tar (1);
+each will be separated by a paragraph space.
+.
+.
+.PP
+.B .SY
+can also be repeated multiple times before a closing
+.BR .YS ,
+which is useful to indicate synonymous ways of invoking a particular
+mode of operation.
+.
+.
+.\" BEGIN EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.PP
+For example,
+.
+.
+.IP
+.\" from src/roff/groff/groff.1.man
+.EX
+\&.SY groff
+\&.OP \e\-abcegiklpstzCEGNRSUVXZ
+\&.OP \e\-d cs
+\&.OP \e\-f fam
+\&.OP \e\-F dir
+\&.OP \e\-I dir
+\&.OP \e\-K arg
+\&.OP \e\-L arg
+\&.OP \e\-m name
+\&.OP \e\-M dir
+\&.OP \e\-n num
+\&.OP \e\-o list
+\&.OP \e\-P arg
+\&.OP \e\-r cn
+\&.OP \e\-T dev
+\&.OP \e\-w name
+\&.OP \e\-W name
+\&.RI [ file
+\e&.\e|.\e|.\e&]
+\&.YS
+\&.
+\&.SY groff
+\&.B \e\-h
+\&.SY groff
+\&.B \e\-\e\-help
+\&.YS
+.
+.
+.IP
+
+.EE
+.
+.
+.PP
+produces the following output.
+.
+.
+.RS
+.PP
+.SY groff
+.OP \-abcegiklpstzCEGNRSUVXZ
+.OP \-d cs
+.OP \-f fam
+.OP \-F dir
+.OP \-I dir
+.OP \-K arg
+.OP \-L arg
+.OP \-m name
+.OP \-M dir
+.OP \-n num
+.OP \-o list
+.OP \-P arg
+.OP \-r cn
+.OP \-T dev
+.OP \-w name
+.OP \-W name
+.RI [ file
+\&.\|.\|.\&]
+.YS
+.
+.SY groff
+.B \-h
+.SY groff
+.B \-\-help
+.YS
+.RE
+.
+.
+.PP
+Several features of the above example are of note.
+.\" END EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.\" TODO: Some of the normative discussion below can go there, too.
+.
+.
+.IP \(bu
+The empty request (.),
+which does nothing,
+is used for vertical spacing in the input file for readability by the
+document maintainer.
+.
+Do not put empty lines in a
+.I roff
+source document.
+.
+.
+.IP \(bu
+The command and option names are presented in
+.B bold
+to cue the user that they should be input literally.
+.
+.
+.IP \(bu
+Option dashes are specified with the \(oq\e\-\(cq escape sequence;
+this is an important practice to make them clearly visible and to
+facilitate cut-and-paste from the rendered man page to a shell prompt or
+text file.
+.
+.
+.IP \(bu
+Option arguments and command operands are presented in
+.I italics
+(underlined on some output devices, such as terminals and emulators),
+to cue the user that they must be replaced with appropriate text.
+.
+.
+.IP \(bu
+Symbols that are neither to be typed literally nor simply replaced
+appear in the roman style;
+brackets surround optional arguments,
+and an ellipsis indicates that the previous syntactical element may be
+repeated arbitrarily.
+.
+.
+.IP
+Some man pages use a brace-and-pipe notation such as
+.RB \(lq{ \-\-diff | \-\-compare }\(rq
+to indicate that one and only one of the \(oq|\(cq-separated items
+within the braces must be input.
+.
+If this braced construct is furthermore surrounded by square brackets,
+it means that at most one of the items is accepted.
+.
+.
+.IP
+Authors of man pages should note the use of the zero-width space
+escape sequence \(oq\e&\(cq on both sides of the ellipsis;
+this is a good practice to avoid surprises in the event the ellipsis
+gets refilled in your text editor.
+.
+See \(lqPortability\(rq, below.
+.
+The morbidly curious may consult
+.IR groff (7)
+regarding the narrow-space escape sequence \(oq\e|\(cq.
+.
+.
+.\" ====================================================================
+.SS "Hyperlink and email macros"
+.\" ====================================================================
+.
+Email addresses are bracketed with
+.BR .MT / .ME
+and URL hyperlinks with
+.BR .UR / .UE .
+.
+.
+.PP
+These macros are not defined on legacy Unix systems running classic
+.IR troff .
+.
+To be certain your page will be portable to those systems, copy
+their definitions from the
+.I \%an\-ext.tmac
+file of a
+.I groff
+installation.
+.
+.
+.TP
+.BI .MT " address"
+.TQ
+.BR .ME " ["\c
+.IR punctuation ]
+Identify
+.I address
+as an RFC 6068
+.I addr-spec
+for a \(lqmailto:\(rq URI with the text between the two macro
+calls as the link text.
+.
+A
+.I punctuation
+argument to
+.B .ME
+is placed at the end of the link text without intervening space.
+.
+Note that
+.I address
+may not be visible in the output text,
+particularly if the man page is being viewed as HTML.
+.
+On a device that is not a browser,
+.I address
+is set in angle brackets after the link text and before
+.IR punctuation .
+.
+.
+.\" BEGIN EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.IP
+When rendered by
+.I groff
+to a TTY or PostScript output device,
+.RS
+.IP
+.EX
+Contact
+\&.MT fred.foonly@\e:fubar.net
+Fred Foonly
+\&.ME
+for more information.
+.EE
+.RE
+.
+.
+.IP
+displays as: \(lqContact Fred Foonly
+\(lafred.foonly@\:fubar.net\(ra for more information.\(rq.
+.
+.
+.IP
+The use of \(oq\e:\(cq to insert hyphenless discretionary breaks is a
+.I groff
+extension and can be omitted.
+.
+.
+.\" END EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.TP
+.BI .UR " URL"
+.TQ
+.BR .UE " ["\c
+.IR punctuation ]
+Identify
+.I URL
+as an RFC 3986 URI hyperlink with the text between the two macro calls
+as the link text.
+.
+A
+.I punctuation
+argument to
+.B .UE
+is placed at the end of the link text without intervening space.
+.
+Note that
+.I URL
+may not be visible in the output text,
+particularly if the man page is being viewed as HTML.
+.
+On a device that is not a browser,
+.I URL
+is set in angle brackets after the link text and before
+.IR punctuation .
+.
+.
+.\" BEGIN EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.IP
+When rendered by
+.I groff
+to a TTY or PostScript output device,
+.RS
+.IP
+.EX
+The GNU Project of the Free Software Foundation hosts the
+\&.UR https://\e:www.gnu.org/\e:software/\e:groff/
+Groff home page
+\&.UE .
+.EE
+.RE
+.
+.
+.IP
+displays as: \(lqThe GNU Project of the Free Software Foundation hosts
+the Groff home page
+\(lahttps://\:www.gnu.org/\:software/\:groff/\(ra.\(rq.
+.
+.
+.IP
+The use of \(oq\e:\(cq to insert hyphenless discretionary breaks is a
+.I groff
+extension and can be omitted.
+.
+.
+.\" END EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.\" ====================================================================
+.SS "Font style macros"
+.\" ====================================================================
+.
+The
+.I man
+macro package is limited in its font styling options,
+offering only
+.BR bold \~( .B ),
+.I italic\c
+.RB \~( .I ),
+and roman (the default).
+.
+Italic text is usually set underscored instead on terminals and other
+classical
+.IR nroff -style
+output devices.
+.
+The
+.B .SM
+and
+.B .SB
+macros set text in roman or bold, respectively, at a smaller point size;
+these differ visually from regular-sized roman or bold text only on
+.IR troff -style
+output devices.
+.
+The foregoing macros cause word breaks before and after their arguments,
+but it is often necessary to set text in different styles without
+intervening whitespace.
+.
+The macros
+.BR .BI ,
+.BR .BR ,
+.BR .IB ,
+.BR .IR ,
+.BR .RB ,
+and
+.BR .RI ,
+where \(oqB\(cq, \(oqI\(cq, and \(oqR\(cq indicate bold, italic, and
+roman, respectively,
+set their odd- and even-numbered arguments in alternating styles,
+with no whitespace separating them.
+.
+.
+.PP
+Because font styles are presentational rather than semantic,
+conflicting traditions have arisen regarding which font styles should be
+used to mark file or path names,
+environment variables,
+in-line literals,
+and even man page cross-references.
+.
+.
+.PP
+The default font size and family (for
+.I troff
+output devices)
+is 10-point Times.
+.
+The default style is roman.
+.
+.
+.TP
+.BR .B \~[\c
+.IR text ]
+Set
+.I text
+in bold.
+.
+If the macro is given no arguments,
+the text of the next input line is set in bold.
+.
+.
+.\" BEGIN USAGE (TODO: move to tutorial/style guide when we have it)
+.IP
+Use bold
+for literal portions of syntax synopses,
+for command-line options in running text,
+and for literals that are major topics of the subject under discussion;
+for example,
+this page uses bold for macro and register names.
+.
+In
+.BR .EX / .EE
+examples of interactive I/O (such as a shell session),
+set only the user-typed input in bold.
+.
+.
+.
+.\" END USAGE (TODO: move to tutorial/style guide when we have it)
+.TP
+.BR .I \~[\c
+.IR text ]
+Set
+.I text
+in italics.
+.
+If the macro is given no arguments,
+the text of the next input line is set in italics.
+.
+.
+.\" BEGIN USAGE (TODO: move to tutorial/style guide when we have it)
+.IP
+Use italics
+for file and path names,
+for environment variables,
+for enumeration or preprocessor constants in C,
+for variable (user-determined) portions of syntax synopses,
+for the first occurrence only of a technical concept being introduced,
+for names of works of software
+(including commands and functions,
+.\" The following is an interesting exception that seems to have arisen
+.\" organically and nearly universally.
+but excluding names of operating systems or their kernels),
+and anywhere a parameter requiring replacement by the user is
+encountered.
+.
+An exception involves variable text in a context that is already marked
+up in italics,
+such as file or path names with variable components;
+in such cases,
+follow the convention of mathematical typography:
+set the file or path name in italics as usual
+(see
+.B .IR
+below),
+but use roman for the variable part,
+and italics again in running roman text when referring to the variable
+material.
+.
+.
+.\" END USAGE (TODO: move to tutorial/style guide when we have it)
+.TP
+.BR .SM \~[\c
+.IR text ]
+Set
+.I text
+one point size smaller than the default size.
+.
+If the macro is given no arguments,
+the text of the next input line is set smaller.
+.
+.
+.IP
+.IR Note :
+.IR nroff -style
+output devices,
+such as terminals,
+will render
+.I text
+at the normal font size instead.
+.
+Do not rely upon
+.B .SM
+to communicate semantic information distinct from using roman style at
+the normal size;
+it will be hidden from readers using such devices.
+.
+.
+.TP
+.BR .SB \~[\c
+.IR text ]
+Set
+.I text
+in bold,
+one point size smaller than the default size.
+.
+If the macro is given no arguments,
+the text of the next input line is set smaller and in bold.
+.
+.
+.IP
+.IR Note :
+.IR nroff -style
+output devices,
+such as terminals,
+will render
+.I text
+in bold at the normal font size instead.
+.
+Do not rely upon
+.B .SB
+to communicate semantic information distinct from using bold style at
+the normal size;
+it will be hidden from readers using such devices.
+.
+.
+.\" BEGIN USAGE (TODO: move to tutorial/style guide when we have it)
+.PP
+Note what is
+.I not
+prescribed for setting in bold or italics above:
+elements of \(lqsynopsis language\(rq such as ellipses and brackets
+around options;
+proper names and adjectives;
+titles of anything other than works of literature or software;
+identifiers for standards documents or technical reports such as
+CSTR\~#54,
+RFC\~1918,
+Unicode\~11.0,
+or
+POSIX.1-2017;
+acronyms;
+and occurrences after the first of a technical term or piece of jargon.
+.
+Again,
+the names of operating systems and their kernels are,
+by practically universal convention,
+set in roman.
+.
+.
+.PP
+Be frugal with the use of italics for emphasis,
+and particularly with the use of bold.
+.
+Brief runs of literal text,
+such as references to individual characters or short strings,
+including section and subsection headings of man pages,
+are suitable objects for quotation;
+see the
+\(oq\e(lq\(cq,
+\(oq\e(rq\(cq,
+\(oq\e(oq\(cq,
+and
+\(oq\e(cq\(cq
+escapes in subsection \(lqPortability\(rq below.
+.
+.
+.\" END USAGE (TODO: move to tutorial/style guide when we have it)
+.PP
+Unlike the above font style macros,
+the font alternation macros below accept only arguments on the same
+line as the macro call.
+.
+If whitespace is required within one of the arguments,
+first consider whether the same result could be achieved with as much
+clarity by using the single-style macros on separate input lines.
+.
+When it cannot,
+double-quote an argument with one or more embedded space characters.
+.
+Setting all three different styles within one whitespace-delimited word
+presents challenges;
+it is possible with the \(oq\ec\(cq and/or \(oq\ef\(cq escapes,
+but see subsection \(lqPortability\(rq below for caveats.
+.
+.
+.TP
+.BI .BI " bold-text italic-text"\c
+\~\&.\|.\|.\&
+Set each argument in bold and italics, alternately.
+.
+.
+.\" BEGIN EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.RS
+.IP
+.\" from src/roff/troff/troff.1.man
+.EX
+\&.BI \e\-r name = n
+.EE
+.RE
+.
+.
+.\" END EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.TP
+.BI .BR " bold-text roman-text"\c
+\~\&.\|.\|.\&
+Set each argument in bold and roman, alternately.
+.
+.
+.\" BEGIN EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.RS
+.IP
+.\" from tmac/groff_ms.7.man
+.EX
+Any such change becomes effective with the first use of
+\&.BR .NH ,
+\&.I after
+the new alias is defined.
+.EE
+.RE
+.
+.
+.\" END EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.TP
+.BI .IB " italic-text bold-text"\c
+\~\&.\|.\|.\&
+Set each argument in italics and bold, alternately.
+.
+.
+.\" BEGIN EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.RS
+.IP
+.\" from man/groff_tmac.5.man
+.EX
+All macro package files must be named
+\&.IB name .tmac
+to fully use the
+\&.I tmac
+mechanism.
+.EE
+.RE
+.
+.
+.\" END EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.TP
+.BI .IR " italic-text roman-text"\c
+\~\&.\|.\|.\&
+Set each argument in italics and roman, alternately.
+.
+.
+.\" BEGIN EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.RS
+.IP
+.\" from man/groff_out.5.man
+.EX
+This is the first command of the
+\&.IR prologue .
+.EE
+.RE
+.
+.
+.\" END EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.TP
+.BI .RB " roman-text bold-text"\c
+\~\&.\|.\|.\&
+Set each argument in roman and bold, alternately.
+.
+.
+.\" BEGIN EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.RS
+.IP
+.\" from src/preproc/eqn/eqn.1.man
+.EX
+Also, the statement
+\&.RB \e(oq "delim on" \e(cq
+is not handled specially.
+.RE
+.EE
+.
+.
+.\" END EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.TP
+.BI .RI " roman-text italic-text"\c
+\~\&.\|.\|.\&
+Set each argument in roman and italics, alternately.
+.
+.
+.\" BEGIN EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.RS
+.IP
+.\" from contrib/mm/groff_mm.7.man
+.EX
+\&.RI [ file
+\e&.\e|.\e|.\e&]
+.EE
+.RE
+.
+.
+.\" END EXAMPLE (TODO: move to tutorial/style guide when we have it)
+.\" ====================================================================
+.SS "Horizontal and vertical spacing"
+.\" ====================================================================
+.
+The
+.I indent
+argument accepted by
+.BR .RS ,
+.BR .IP ,
+.BR .TP ,
+and the deprecated
+.B .HP
+is a number plus an optional scaling indicator.
+.
+If no scaling indicator is given,
+the
+.I man
+package assumes \(oqn\(cq;
+that is,
+the width of a letter \(lqn\(rq in the font current when the macro is
+called.
+.
+See section \(lqNumerical Expressions\(rq in
+.IR groff (7)
+for further details.
+.
+An indent specified in a call to
+.BR .IP ,
+.BR .TP ,
+or the deprecated
+.B .HP
+persists until
+(1) another of these macros is called with an explicit indent
+argument,
+or (2)
+.BR .SH ,
+.BR .SS ,
+or
+.B .PP
+or its synonyms is called;
+these clear the indent entirely.
+.
+.
+.PP
+Indents set by
+.B .RS
+move the left margin and persist until
+.BR .RS ,
+.BR .RE ,
+.BR .SH ,
+or
+.B .SS
+is called.
+.
+.
+The default indentation,
+exhibited by ordinary
+.B .PP
+paragraphs not within an
+.BR .RS / .RE
+relative indent,
+is 7.2n in
+.I troff
+mode and 7n in
+.I nroff
+mode.
+.
+The HTML output device is an exception;
+it ignores indentation completely.
+.
+This same indentation is used again (additively) for the defaults of
+.BR .IP ,
+.BR .TP ,
+.BR .RS ,
+and the deprecated
+.BR .HP .
+.
+Section headings
+.RB ( .SH )
+are set flush with the left margin of the output device,
+and subsection headings
+.RB ( .SS )
+are indented 3n.
+.
+.
+.PP
+Resist the temptation to mock up tabular or multi-column output with
+ASCII tab characters or the indentation arguments to
+.BR .IP ,
+.BR .TP ,
+.BR .RS ,
+or the deprecated
+.BR .HP ;
+the result may not render comprehensibly on an output device you fail to
+check,
+or which is developed in the future.
+.
+The table preprocessor
+.IR @g@tbl (@MAN1EXT@)
+can likely meet your needs.
+.
+.
+.PP
+The following macros cause a line break with the
+insertion of vertical space:
+.BR .SH ,
+.BR .SS ,
+.BR .TP ,
+.BR .TQ ,
+.B .PP
+(and its synonyms),
+.BR .IP ,
+and the deprecated
+.BR .HP .
+.
+The default inter-section and inter-paragraph spacing is 1\~line in
+.I nroff
+mode,
+and 0.4v in
+.I troff
+mode.
+.
+(The deprecated macro
+.B .PD
+can change this vertical spacing,
+but its use is discouraged.)
+.
+The macros
+.BR .RS ,
+.BR .RE ,
+.BR .EX ,
+and
+.B .EE
+also cause a break but no insertion of vertical space.
+.
+.
+.\" ====================================================================
+.SS "Number registers"
+.\" ====================================================================
+.
+Number registers are described in section \(lqOptions\(rq below.
+.
+.
+.\" ====================================================================
+.SS "String registers"
+.\" ====================================================================
+.
+The following strings are defined.
+.
+.
+.TP
+.B \e*R
+expands to the character escape for the \(lqregistered sign\(rq glyph,
+\(oq\e(rg\(cq,
+if available,
+and \(lq(Reg.)\(rq otherwise.
+.
+.
+.
+.TP
+.B \e*S
+expands to an escape setting the font size to the document default.
+.
+.
+.TP
+.B \e*(HF
+expands to the font identifier used to print headings and subheadings.
+.
+The default is \(oqB\(cq.
+.
+.
+.TP
+.B \e*(lq
+.TQ
+.B \e*(rq
+expand to the character escapes for left and right double-quotation
+marks,
+\(oq\e(lq\(cq and \(oq\e(rq\(cq, respectively.
+.
+.
+.TP
+.B \e*(Tm
+expands to the character escape for the \(lqtrade mark sign\(rq glyph,
+\(oq\e(tm\(cq,
+if available,
+and \(lq(TM)\(rq otherwise.
+.
+.
+.\" ====================================================================
+.SS "Interaction with preprocessors"
+.\" ====================================================================
+.
+When a preprocessor like
+.I @g@tbl
+or
+.I @g@eqn
+is needed,
+a hint can be given to the man page formatter by making the first line
+of a man page look like this:
+.
+.
+.PP
+.RS
+.BI "\(aq\e\(dq " word
+.RE
+.
+.
+.PP
+Note that the line starts with an apostrophe (\(aq),
+not a dot,
+and that a single space character follows the double quote.
+The
+.I word
+consists of one letter for each needed preprocessor:
+\(oqe\(cq for
+.IR @g@eqn ,
+\(oqr\(cq for
+.IR @g@refer ,
+and
+\(oqt\(cq for
+.IR @g@tbl .
+.
+Modern implementations of the
+.I man
+program interpret this first line and automatically call the right
+preprocessor(s).
+.
+.
+.PP
+The usual
+.I tbl
+and
+.I eqn
+macros for table and equation inclusion,
+.BR .TS ,
+.BR .T& ,
+.BR .TE ,
+.BR .EQ ,
+and
+.BR .EN ,
+may be used freely.
+.
+Note that
+.I nroff
+output devices are extremely limited in presentation of mathematical
+equations.
+.
+.
+.\" TODO BEGIN: move subsection to tutorial/style guide when we have it
+.\" ====================================================================
+.SS Portability
+.\" ====================================================================
+.
+The two major syntactical categories of
+.I roff
+languages are requests and escapes.
+.
+Since the
+.I man
+macros are implemented in terms of
+.I groff
+requests and escapes,
+one can,
+in principle,
+supplement the functionality of
+.I man
+with these lower-level elements where necessary.
+.
+.
+.PP
+Note,
+however,
+that using raw
+.I groff
+requests is likely to make your page render poorly on the class of
+viewers that transform it to HTML.
+.
+Some requests make implicit assumptions about things like character
+and page sizes that may not hold in an HTML environment;
+also,
+many of these viewers don't interpret the full
+.I groff
+vocabulary,
+a problem that can lead to portions of your text being silently dropped.
+.
+.
+.PP
+For portability to modern viewers,
+it is best to write your page entirely with the macros described in this
+page
+(except for the ones identified as deprecated,
+which should be avoided).
+.
+The macros we have described as extensions
+.RB ( .EX / .EE ,
+.BR .SY / .OP / .YS ,
+.BR .UR / .UE ,
+and
+.BR .MT / .ME )
+should be used with caution, as they may not yet be built in to
+some viewer that is important to your audience.
+.
+If in doubt, copy the implementation into your page\(emafter the
+.B .TH
+call and the \(lqName\(rq section,
+to accommodate timid
+.I mandb
+implementations.
+.
+.
+.PP
+Similar caveats apply to escapes.
+.
+Some escape sequences are however required for correct typesetting
+even in man pages and usually do not cause portability problems:
+.
+.
+.TP
+.B \e\(dq
+Comment.
+.
+Everything after the double-quote to the end of the input line is
+ignored.
+.
+Whole-line comments are frequently placed immediately after the empty
+request \(oq.\(cq.
+.
+.
+.TP
+.BI \e newline
+Join the next input line to the current one.
+.
+Except for the update of the input line counter (used for diagnostic
+messages and related purposes),
+a series of lines ending in backslash-newline is transparent to
+.IR groff .
+.
+Use this escape to break excessively input long lines for document
+maintenance.
+.
+.
+.TP
+.B \e\(ti
+Adjustable, non-breaking space character.
+.
+Use this escape to prevent a break inside a short phrase or between a
+numerical quantity and its corresponding unit(s).
+.
+.
+.RS
+.IP
+.EX
+Before starting the motor, set the output speed to\e\(ti1.
+There are 1,024\e\(tibytes in 1\e\(tikiB.
+CSTR\e\(ti#8 documents the B language.
+.EE
+.RE
+.
+.
+.TP
+.B \e&
+Zero-width space.
+.
+Append to an input line to prevent an end-of-sentence punctuation
+sequence from being recognized as such, or insert at the beginning of an
+input line to prevent a dot or apostrophe from being interpreted as the
+beginning of a
+.I roff
+request.
+.
+.
+.TP
+.B \e(aq
+ASCII apostrophe.
+.
+Use for syntax elements of programming languages because some
+output devices might replace unescaped apostrophes with right single
+quotation marks.
+.
+.
+.TP
+.B \e(oq
+Opening single quotation mark.
+.
+.TQ
+.B \e(cq
+Closing single quotation mark.
+.
+.
+.IP
+Use these for paired directional single quotes, \(oqlike this\(cq.
+.
+.
+.TP
+.B \e(dq
+ASCII double-quote.
+.
+Sometimes needed after macro calls to prevent the interpretation of the
+ASCII quotation mark character \(oq\(dq\(cq as the beginning or end
+of a macro argument.
+.
+.
+.TP
+.B \e(lq
+Left double quotation mark.
+.
+.TQ
+.B \e(rq
+Right double quotation mark.
+.
+.
+.IP
+Use these for paired directional double quotes, \(lqlike this\(rq.
+.
+.
+.TP
+.B \e(em
+Em-dash.
+.
+Use for an interruption in a sentence\(emsuch as this one.
+.
+.
+.TP
+.B \e(en
+En-dash.
+.
+Use to separate the two ends of a range,
+in particular between numbers,
+for example: the digits 1\(en9.
+.
+.
+.TP
+.B \e(ga
+ASCII grave accent.
+.
+Use for syntax elements of programming languages,
+for example shell command substitutions,
+because some output devices might replace unescaped grave accents with
+left single quotation marks.
+.
+.
+.TP
+.B \e(ha
+ASCII circumflex accent.
+.
+Use for syntax elements of programming languages because some output
+devices might replace unescaped circumflex accents with non-ASCII glyphs
+like the Unicode U+02C6 modifier letter circumflex.
+.
+.
+.TP
+.B \e(ti
+ASCII tilde.
+.
+Use for syntax elements of programming languages because some output
+devices might replace unescaped tildes with non-ASCII glyphs like the
+Unicode U+02DC small tilde.
+.
+.
+.TP
+.B \e\-
+Minus sign.
+.
+Also use this to display syntax elements that require the ASCII
+hyphen-minus character,
+for example command-line options and C language operators.
+.
+The unescaped \(oq\-\(cq input character is not appropriate for
+these cases because it may render as a hyphen on some output devices.
+.
+.
+.TP
+.B \ec
+.
+If this escape sequence occurs at the end of an input line, no white
+space is inserted between the last glyph on it and the first glyph
+resulting from the next input line.
+.
+This is occasionally useful when three different fonts are needed
+in a single word.
+.
+.
+.RS
+.IP
+.\" contrib/pdfmark/pdfroff.1.man
+.EX
+Normally, the final output file should be named
+\&.IB file .pdf\ec
+\e&.
+.EE
+.RE
+.
+.
+.IP
+Note that when using this trick with the
+.B .BI
+or
+.B .RI
+macros, you will need to manually add an italic correction escape
+\(oq\e/\(cq before the \(oq\ec\(cq due to way macros expand their
+arguments.
+.
+.
+.RS
+.IP
+.\" from contrib/mom/groff_mom.7.man
+.EX
+Files processed with
+\&.B groff \e\-mom
+(or
+\&.BI "\e\-m " mom\e/\ec
+) produce PostScript output by default.
+.EE
+.RE
+.
+.
+.IP
+Alternatively,
+and perhaps with better portability,
+the \(oq\ef\(cq font escape sequence can be used;
+see below.
+.
+Using \(oq\ec\(cq to include the output from more than one input line
+into the next-line argument of a
+.B .TP
+macro will render incorrectly with
+.I groff
+1.22.3,
+.I mandoc
+1.14.1,
+older versions of these programs,
+and perhaps with some other formatters.
+.
+.
+.TP
+.B \ee
+Widely used in man pages to represent a backslash output glyph.
+.
+It works reliably as long as the
+.B .ec
+request is not used,
+which should never happen in man pages,
+and it is slightly more portable than the more exact \(oq\e(rs\(cq
+(\(lqreverse solidus\(rq) escape sequence.
+.
+.
+.TP
+.BR \efB ,\  \efI ,\  \efR ,\  \efP
+Switch to bold, italic, roman, or back to the previous font,
+respectively.
+.
+Either these or \(oq\ec\(cq is needed when three different fonts are
+required in a single whitespace-delimited word.
+.
+.
+.RS
+.IP
+.\" second example from contrib/pdfmark/pdfroff.1.man
+.EX
+\&.RB [ \e\-\e\-reference\e\-dictionary=\efI\e,name\e/\efP ]
+.IP
+\&.RB [ \e\-\e\-reference\e\-dictionary=\ec
+\&.IR name ]
+.EE
+.RE
+.
+.
+.IP
+Font escapes may be more portable than \(oq\ec\(cq.
+.
+As shown above,
+it is up to you to account for italic corrections with \(oq\e/\(cq and
+\(oq\e,\(cq, which are themselves
+.I groff
+extensions,
+if desired and if supported by your implementation.
+.
+.
+.IP
+Note that
+\(oq\efP\(cq reliably returns to the style in use immediately preceding
+the previous \(oq\ef\(cq escape only if no
+sectioning,
+paragraph,
+or font face macro calls have intervened.
+.
+.
+.IP
+As long as only two fonts are needed in any single whitespace-delimited
+word,
+font alternation macros like
+.B .BI
+usually result in more readable source code than \(oq\ef\(cq escapes do.
+.
+.
+.PP
+For maximum portability, escape sequences and special characters
+not listed above are better avoided in man pages.
+.
+.
+.\" TODO END: move subsection to tutorial/style guide when we have it
+.\" ====================================================================
+.SS "Deprecated features"
+.\" ====================================================================
+.
+Use of the following is discouraged.
+.
+.
+.TP
+.BR .AT " ["\c
+.IR system " [" release ]]
+Alter the footer for use with AT&T man pages,
+overriding any definition of the
+.I footer-outside
+argument to
+.BR .TH .
+.
+This macro exists only for compatibility; don't use it.
+.
+.
+.IP
+The first argument
+.I system
+can be:
+.
+.
+.RS \" Invisibly move left margin to current .IP indent.
+.RS \" Now indent further, visibly.
+.TP
+3
+7th edition
+.I (default)
+.
+.
+.TP
+4
+System III
+.
+.
+.TP
+5
+System V
+.RE \" Move left margin back to .IP indentation.
+.RE \" Move left margin back to standard position.
+.
+.
+.IP
+The optional second argument
+.I release
+specifies the release number,
+such as in \(lqSystem V Release 3\(rq.
+.
+.
+.TP
+.B .BT
+Set the page footer.
+.
+Redefine this macro to get control of the footer.
+.
+.
+.TP
+.B .DT
+Set tabs every 0.5\~inches.
+.
+Since this macro is always called during a
+.B .TH
+macro, it makes sense to call it only if the tab positions have been
+changed.
+.
+.
+.IP
+Use of this presentation-level macro is deprecated.
+.
+It translates poorly to HTML, under which exact whitespace control
+and tabbing are not readily available.
+.
+Thus, information or distinctions that you use
+.B .DT
+to express are likely to be lost.
+.
+If you feel tempted to use it, you should probably be composing a
+table using
+.IR @g@tbl (@MAN1EXT@)
+markup instead.
+.
+.
+.TP
+.BR .HP " ["\c
+.IR indent ]
+Set up a paragraph with a hanging left indentation.
+.
+The
+.I indent
+argument,
+if present,
+is handled as with
+.BR .TP .
+.
+.
+.IP
+Use of this presentation-level macro is deprecated.
+.
+While it is universally portable to legacy Unix systems, a hanging
+indentation cannot be expressed naturally under HTML, and many
+HTML-based manual viewers simply interpret it as a starter for a
+normal paragraph.
+.
+Thus, any information or distinction you tried to express with the
+indentation may be lost.
+.
+.
+.TP
+.BR .PD " ["\c
+.IR vertical-space ]
+Define the vertical space between paragraphs or (sub)sections.
+.
+The optional argument
+.I vertical-space
+specifies the amount of space;
+the default scaling is \(oqv\(cq).
+.
+Without an argument,
+the spacing is reset to its default value;
+see \(lqHorizontal and vertical spacing\(rq above.
+.
+.
+.IP
+Use of this presentation-level macro is deprecated.
+.
+It translates poorly to HTML, under which exact control of
+inter-paragraph spacing is not readily available.
+.
+Thus, information or distinctions that you use
+.B .PD
+to express are likely to be lost.
+.
+.
+.TP
+.B .PT
+Set the page header.
+.
+Redefine this macro to get control of the header.
+.
+.
+.TP
+.BR .UC " ["\c
+.IR version ]
+Alter the footer for use with BSD man pages,
+overriding any definition of the
+.I footer-outside
+argument to
+.BR .TH .
+.
+This macro exists only for compatibility; don't use it.
+.
+.
+.IP
+The argument
+.I version
+can be:
+.
+.
+.RS \" Invisibly move left margin to current .IP indent.
+.RS \" Now indent further, visibly.
+.TP
+3
+3rd Berkeley Distribution
+.I (default)
+.
+.
+.TP
+4
+4th Berkeley Distribution
+.
+.
+.TP
+5
+4.2 Berkeley Distribution
+.
+.
+.TP
+6
+4.3 Berkeley Distribution
+.
+.
+.TP
+7
+4.4 Berkeley Distribution
+.RE \" Move left margin back to .IP indentation.
+.RE \" Move left margin back to standard position.
+.
+.
+.\" ====================================================================
+.SS "History"
+.\" ====================================================================
+.
+According to its own
+.IR man (7)
+page,
+Version 7 Unix (1979) supported all of the macros described in this page
+not listed as GNU extensions,
+except
+.BR .P ,
+.BR .SB ,
+.BR .SS ,
+and the deprecated
+.BR .AT ,
+.BR .BT ,
+.BR .PT ,
+and
+.BR .UC .
+.
+The only string registers defined were
+.B R
+and
+.BR S ;
+no number registers were documented.
+.
+.
+.\" ====================================================================
+.SH OPTIONS
+.\" ====================================================================
+.
+The following
+.I groff
+options set number registers recognized and used by the
+.I man
+macro package.
+.
+.
+.TP
+.B \-rcR=1
+Continuous rendering.
+.
+Create a single,
+very long page instead of multiple pages.
+.
+This is the default in
+.I nroff
+mode.
+.
+Use
+.B \-rcR=0
+to disable it.
+.
+.
+.TP
+.B \-rC1
+Number pages continuously.
+.
+If more than one man page is given on the command line, number the
+pages continuously, rather than starting each at\~1.
+.
+.
+.TP
+.B \-rD1
+Enable double-sided printing.
+.
+Footers for even and odd pages are formatted differently;
+see the description of
+.B .TH
+in \(lqDocument structure macros\(rq,
+above.
+.
+.
+.TP
+.BI \-rFT= footer-distance
+Set distance of the footer,
+relative to the bottom of the page if negative or relative to the top if
+positive,
+to
+.IR footer-distance .
+.
+The default is \-0.5i.
+.
+.
+.TP
+.BI \-rHY= flags
+Set hyphenation flags.
+.
+Permissible values of
+.I flags
+are documented in section \(lqHyphenation\(rq of
+.IR groff (7).
+.
+The default is\~4 if continuous rendering is enabled
+.RB ( \-rcR=1
+above),
+and\~6 otherwise.
+.
+.
+.TP
+.BI \-rIN= indent
+Set the body text indentation (for normal paragraphs) to
+.IR indent .
+.
+See \(lqHorizontal and vertical spacing\(rq above for the default
+indentation value.
+.
+For
+.IR nroff ,
+.I indent
+should always be an integer multiple of unit \(oqn\(cq to get consistent
+indentation.
+.
+.
+.TP
+.BI \-rLL= line-length
+Set line length.
+.
+If this option is not given, the line length is set to respect any
+value set by a prior \(lq.ll\(rq request (which
+.I must
+be in effect when the
+.B .TH
+macro is invoked),
+if this differs from the built-in default for the formatter;
+otherwise it defaults to 78n in
+.I nroff
+mode and 6.5i in
+.I troff
+mode.
+.
+.
+.IP
+Note that the use of a \(lq.ll\(rq request to initialize the line
+length is supported for backward compatibility with some versions of
+the
+.I man
+program;
+direct initialization of the
+.B LL
+register should
+.I always
+be preferred to the use of such a request.
+.
+In particular, note that a \(lq.ll\~65n\(rq request does
+.I not
+preserve the normal
+.I nroff
+default line length
+(the
+.I man
+default initialization to 78n prevails),
+whereas the
+.B \-rLL=65n
+option,
+or an equivalent \(lq.nr\~LL\~65n\(rq request preceding the use of the
+.B .TH
+macro,
+.I does
+set a line length of 65n.
+.
+.
+.TP
+.BI \-rLT= title-length
+Set title length.
+.
+If this option is not given, the title length defaults to the line
+length.
+.
+.
+.TP
+.BI \-rP n
+Start enumeration of pages at
+.I n
+rather than\~1.
+.
+.
+.TP
+.BI \-rS point-size
+Use
+.I point-size
+as the base document font size.
+.
+Acceptable values are 10, 11, or 12.
+.
+See subsection \(lqFont style macros\(rq above for the default.
+.
+.
+.TP
+.BI \-rSN= subsection-indent
+Set subsection indentation to
+.IR subsection-indent .
+.
+See \(lqHorizontal and vertical spacing\(rq above for the default
+indentation value.
+.
+.
+.TP
+.BI \-rX p
+After
+.RI page " p" ,
+number pages as
+.IR p a,
+.IR p b,
+.IR p c,
+and so forth.
+.
+For example, the option
+.B \-rX2
+produces the following page
+numbers: 1, 2, 2a, 2b, 2c, and so on.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.TP
+.I @MACRODIR@/\:man.tmac
+.TQ
+.I @MACRODIR@/\:an.tmac
+These are wrapper files to call
+.IR andoc.tmac .
+.
+.
+.TP
+.I @MACRODIR@/\:andoc.tmac
+This brief
+.I groff
+program detects whether the
+.I man
+or
+.I mdoc
+macro package is being used by a document and loads the correct macro
+definitions,
+taking advantage of the fact that pages using them must call
+.B .TH
+or
+.BR .Dd ,
+respectively,
+as their first macro.
+.
+Because the wrappers above load this file,
+a
+.I man
+program or user typing,
+for example,
+\(lqgroff \-man page.1\(rq,
+need not know which package the file
+.I page.1
+uses.
+.
+Multiple man pages, in either format, can be handled.
+.
+.
+.TP
+.I @MACRODIR@/\:an\-old.tmac
+Most
+.I man
+macros are contained in this file.
+.
+It also loads the GNU extensions from
+.I an\-ext.tmac
+(see below).
+.
+.
+.TP
+.I @MACRODIR@/\:an\-ext.tmac
+The extension macro definitions for
+.BR .SY ,
+.BR .OP ,
+.BR .YS ,
+.BR .TQ ,
+.BR .EX / .EE ,
+.BR .UR / .UE ,
+and
+.BR .MT / .ME
+are contained in this file,
+which is written in classic
+.I troff
+and permissively licensed\(emnot copylefted.
+.
+Man page authors concerned about portability to legacy Unix systems are
+encouraged to copy these definitions into their pages,
+and maintainers of
+.I troff
+implementations or work-alike systems that format man pages are
+encouraged to re-use them.
+.
+.
+.IP
+Note that the definitions for these macros are read after the call of
+.BR .TH ,
+so they will replace any macros of the same names preceding it in your
+file.
+.
+If you use your own implementations of these macros,
+they must be defined after calling
+.B .TH
+to have any effect.
+.
+.
+.TP
+.I @LOCALMACRODIR@/\:man.local
+Local changes and customizations should be put into this file.
+.
+.
+.\" ====================================================================
+.SH NOTES
+.\" ====================================================================
+.
+Some tips on troubleshooting your man pages follow.
+.
+.
+.TP
+.RB \(bu " .RS" " doesn't indent relative to my indented paragraph"
+The
+.B .RS
+macro sets the indentation relative to the amount of a
+.I normal
+paragraph
+.RB ( .PP
+and its synonyms).
+.
+The same default indentation amount is used for
+.BR .RS ,
+.BR .IP ,
+.BR .TP ,
+and the deprecated
+.BR .HP .
+.
+If you need to start an indent relative to an indented paragraph,
+call
+.B .RS
+repeatedly until an acceptable indentation is achieved,
+or give
+.B .RS
+an indentation argument that is at least as much as the paragraph's
+indentation amount relative to an adjacent
+.B .PP
+paragraph.
+.
+See \(lqHorizontal and vertical spacing\(rq above for the values.
+.
+.
+.TP
+.RB \(bu " .RE" " doesn't reset the indent to the expected level"
+.TQ
+\(bu warning: scale indicator invalid in this context
+.TQ
+\(bu warning: number register \(aqan\-saved\-margin\c
+.IR n "\(aq not defined"
+.TQ
+\(bu warning: number register 'an\-saved\-prevailing\-indent\c
+.IR n "\(aq not defined"
+The
+.B .RS
+macro takes an indentation
+.I amount
+as an argument;
+the
+.B .RE
+macro's argument is a specific indentation
+.IR level .
+.B .RE\~1
+goes to the level before any
+.B .RS
+macros were called,
+.B .RE\~2
+goes to the level of the first
+.B .RS
+call you made,
+and so forth.
+.
+If you desire symmetry in your macro calls,
+simply issue one
+.B .RE
+without an argument
+for each
+.B .RS
+that precedes it.
+.
+.
+.IP
+After calls to the
+.B .SH
+and
+.B .SS
+sectioning macros,
+all relative indents are cleared and calls to
+.B .RE
+have no effect.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+The GNU version of the
+.I man
+macro package was written by James Clark and contributors.
+.
+The extension macros were written by
+.MT wl@\:gnu.org
+Werner Lemberg
+.ME
+and
+.MT esr@\:thyrsus.com
+Eric S.\& Raymond
+.ME .
+.
+.
+.PP
+This document was originally written for the Debian GNU/Linux system by
+.MT sgk@\:debian.org
+Susan G.\& Kleinmann
+.ME .
+.
+It was corrected and updated by Werner Lemberg and G.\& Branden
+Robinson.
+.
+The extension macros were documented by Eric S.\& Raymond;
+he also originated the portability section,
+to which Ingo Schwarze contributed most of the material on escape
+sequences.
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg,
+is the main
+.I groff
+documentation.
+.
+You can browse it interactively with \(lqinfo groff\(rq.
+.
+.
+.PP
+.IR @g@tbl (@MAN1EXT@),
+.IR @g@eqn (@MAN1EXT@),
+and
+.IR @g@refer (@MAN1EXT@)
+are preprocessors used with man pages.
+.
+.
+.PP
+.IR man (1)
+describes the man page formatter on your system.
+.
+.
+.PP
+.IR groff_mdoc (@MAN7EXT@)
+describes the
+.I groff
+version of the BSD-originated alternative macro package for man pages.
+.
+.
+.PP
+.IR groff (@MAN7EXT@),
+.IR groff_char (@MAN7EXT@),
+.IR man (7)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_man_C]
+.
+.
+.\" ====================================================================
+.\" ### Emacs settings:
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/groff_man.man b/tmac/groff_man.man
deleted file mode 100644 (file)
index 85b37ba..0000000
+++ /dev/null
@@ -1,1276 +0,0 @@
-.\" -*- nroff -*-
-.TH GROFF_MAN @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_man \- groff man macros to support generation of man pages
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1999-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of this
-manual provided the copyright notice and this permission notice are
-preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.de au
-This manual page was originally written for the Debian GNU/Linux
-system by
-.MT sgk@debian.org
-Susan G.\& Kleinmann
-.ME .
-
-It was corrected and updated by
-.MT wl@gnu.org
-Werner Lemberg
-.ME .
-
-The extension macros were documented (and partly designed) by
-.MT esr@thyrsus.com
-Eric S.\& Raymond
-.ME ;
-he also wrote the portability advice.
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY "groff\ \-man"
-.RI [ options
-.IR .\|.\|.\& ]
-.RI [ files
-.IR .\|.\|.\& ]
-.
-.SY "groff\ \-m\ man"
-.RI [ options
-.IR .\|.\|.\& ]
-.RI [ files
-.IR .\|.\|.\& ]
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.B man
-macros used to generate
-.I man\~pages
-with
-.I groff
-were written by James Clark.
-.
-This document provides a brief summary of the use of each macro in that
-package.
-.
-.
-.\" --------------------------------------------------------------------
-.SH OPTIONS
-.\" --------------------------------------------------------------------
-.
-The
-.B man
-macros understand the following command line options (which define
-various registers).
-.
-.
-.TP
-.B \-rcR=1
-This option (the default if in nroff mode) creates a single, very
-long page instead of multiple pages.
-.
-Say
-.B \-rcR=0
-to disable it.
-.
-.
-.TP
-.B \-rC1
-If more than one manual page is given on the command line, number the
-pages continuously, rather than starting each at\~1.
-.
-.
-.TP
-.B \-rD1
-Double-sided printing.
-.
-Footers for even and odd pages are formatted differently.
-.
-.
-.TP
-.BI \-rFT= dist
-Set distance of the footer relative to the bottom of the page if
-negative or relative to the top if positive.
-.
-The default is \-0.5i.
-.
-.
-.TP
-.BI \-rHY= flags
-Set hyphenation flags.
-.
-Possible values are 1\~to hyphenate without restrictions, 2\~to not
-hyphenate the last word on a page, 4\~to not hyphenate the last two
-characters of a word, and 8\~to not hyphenate the first two characters
-of a word.
-.
-These values are additive; the default is\~14.
-.
-.
-.TP
-.BI \-rIN= width
-Set body text indentation to
-.IR width .
-.
-The default is 7n for
-.IR nroff ,
-7.2n for
-.IR troff .
-.
-For
-.IR nroff ,
-this value should always be an integer multiple of unit \[oq]n\[cq] to
-get consistent indentation.
-.
-.
-.TP
-.BI \-rLL= line-length
-Set line length.
-.
-If this option is not given, the line length is set to respect any
-value set by a prior \[oq].ll\[cq] request (which
-.I must
-be in effect when the \[oq].TH\[cq] macro is invoked),
-if this differs from the built\-in default for the formatter;
-otherwise it defaults to 78n in
-.I nroff
-mode and 6.5i in
-.I troff
-mode.
-.
-.
-.IP
-Note that the use of a \[oq].ll\[cq] request to initialize the line
-length is supported for backward compatibility with some versions of
-the
-.B man
-program;
-direct initialization of the \[oq]LL\[cq] register should
-.I always
-be preferred to the use of such a request.
-.
-In particular, note that a \[oq].ll\ 65n\[cq] request does
-.I not
-preserve the normal
-.I nroff
-default line length,
-(the
-.B man
-default initialization to 78n prevails), whereas, the
-\[oq]\-rLL=65n\[cq] option, or an equivalent \[oq].nr\ LL\ 65n\[cq]
-request preceding the use of the \[oq]TH\[cq] macro,
-.I does
-set a line length of 65n.
-.
-.
-.TP
-.BI \-rLT= title-length
-Set title length.
-.
-If this option is not given, the title length defaults to the line
-length.
-.
-.
-.TP
-.BI \-rP nnn
-Enumeration of pages start with
-.I nnn
-rather than with\~1.
-.
-.
-.TP
-.BI \-rS xx
-Base document font size is
-.I xx
-points
-.RI ( xx
-can be 10, 11, or\~12) rather than 10\~points.
-.
-.
-.TP
-.BI \-rSN= width
-Set sub-subheading indentation to
-.IR width .
-The default is 3n.
-.
-.
-.TP
-.BI \-rX nnn
-After page\~\c
-.IR nnn ,
-number pages as
-.IR nnn a,
-.IR nnn b,
-.IR nnn c,
-etc.
-.
-For example, the option \[oq]\-rX2\[cq] produces the following page
-numbers: 1, 2, 2a, 2b, 2c, etc.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-This section describes the available macros for manual pages.
-.
-For further customization, put additional macros and requests into the
-file
-.BR man.local ,
-which is loaded immediately after the
-.B man
-package.
-.
-.
-.TP
-.B .EX
-.TQ
-.B .EE
-Example/End Example.
-.
-After
-.BR .EX ,
-filling is disabled and the font is set to constant-width.
-.
-This is useful for formatting code, command, and configuration-file
-examples.
-.
-The
-.B EE
-macro restores filling and restores the previous font.
-.
-.
-.IP
-These macros are defined on many (but not all) legacy Unix systems
-running classic troff.
-.
-To be certain your page will be portable to those systems, copy
-their definitions from the
-.B \%an-ext.tmac
-file of a
-.BR groff
-installation.
-.
-.
-.TP
-.BI .HP " \fR[\fPnnn\fR]\fP"
-Set up a paragraph with hanging left indentation.
-.
-The indentation is set to
-.I nnn
-if that argument is supplied (the default unit is \[oq]n\[cq] if
-omitted), otherwise it is set to the previous indentation value
-specified with
-.BR .TP ,
-.BR .IP ,
-or
-.B .HP
-(or to the default value if none of them have been used yet).
-.
-Font size and face are reset to its default values.
-.
-The following paragraph illustrates the effect of this macro with
-hanging indentation set to\~4 (enclosed by
-.B .RS
-and
-.B .RE
-to set the left margin temporarily to the current indentation):
-.
-.
-.RS
-.HP 4
-This is a paragraph following an invocation of the
-.B HP
-macro.
-.
-As you can see, it produces a paragraph where all lines but the first
-are indented.
-.RE
-.
-.
-.IP
-Use of this presentation-level macro is deprecated.
-.
-While it is universally portable to legacy Unix systems, a hanging
-indentation cannot be expressed naturally under HTML, and many
-HTML-based manual viewers simply interpret it as a starter for a
-normal paragraph.
-.
-Thus, any information or distinction you tried to express with the
-indentation may be lost.
-.
-.
-.TP
-.BI .IP " \fR[\fPdesignator\fR]\fP \fR[\fPnnn\fR]\fP"
-Set up an indented paragraph, using
-.I designator
-as a tag to mark its beginning.
-.
-The indentation is set to
-.I nnn
-if that argument is supplied (the default unit is \[oq]n\[cq] if
-omitted), otherwise it is set to the previous indentation value
-specified with
-.BR .TP ,
-.BR .IP ,
-or
-.B .HP
-(or to the default value if none of them have been used yet).
-.
-Font size and face of the paragraph (but not the designator) are reset
-to its default values.
-.
-.
-.IP
-To start an indented paragraph with a particular indentation but
-without a designator, use \[oq]""\[cq] (two doublequotes) as the
-second argument.
-.
-.
-.IP
-For example, the following paragraphs were all set up with bullets as
-the designator, using \[oq].IP\ \\(bu\ 4\[cq].
-.
-The whole block has been enclosed with
-.B .RS
-and
-.B .RE
-to set the left margin temporarily to the current indentation value.
-.
-.
-.RS
-.IP \(bu 4
-.B IP
-is one of the three macros used in the
-.B man
-package to format lists.
-.
-.
-.IP \(bu 4
-.B HP
-is another.
-.
-This macro produces a paragraph with a left hanging indentation.
-.
-.
-.IP \(bu 4
-.B TP
-is another.
-.
-This macro produces an unindented label followed by an indented
-paragraph.
-.RE
-.
-.
-.TP
-.B .LP
-.TQ
-.B .PP
-.TQ
-.B .P
-These macros are mutual aliases.
-.
-Any of them causes a line break at the current position, followed by a
-vertical space downwards by the amount specified by the
-.B PD
-macro.
-.
-The font size and shape are reset to the default value (normally 10pt
-Roman).
-.
-Finally, the current left margin and the indentation is reset to the
-default values.
-.
-.
-.TP
-.BI .RE " \fR[\fPnnn\fR]\fP"
-This macro moves the left margin back to level
-.IR nnn ,
-restoring the previous left margin.
-.
-If no argument is given, it moves one level back.
-.
-The first level (i.e., no call to
-.B .RS
-yet) has number\~1, and each call to
-.B .RS
-increases the level by\~1.
-.
-.
-.TP
-.BI .RS " \fR[\fPnnn\fR]\fP"
-This macro moves the left margin to the right by the value
-.I nnn
-if specified (default unit is \[oq]n\[cq]); otherwise it is set to the
-previous indentation value specified with
-.BR .TP ,
-.BR .IP ,
-or
-.B .HP
-(or to the default value if none of them have been used yet).
-.
-The indentation value is then set to the default.
-.
-.
-.IP
-Calls to the
-.B RS
-macro can be nested.
-.
-.
-.TP
-.BI .SH " \fR[\fPtext for a heading\fR]\fP"
-Set up an unnumbered section heading sticking out to the left.
-.
-Prints out all the text following
-.B .SH
-up to the end of the line (or the text in the next input line if there
-is no argument to
-.BR .SH )
-in bold face
-(or the font specified by the string
-.BR HF ),
-one size larger than the base document size.
-.
-Additionally, the left margin and the indentation for the following
-text is reset to the default values.
-.
-.
-.TP
-.BI .SS " \fR[\fPtext for a heading\fR]\fP"
-Set up a secondary, unnumbered section heading.
-.
-Prints out all the text following
-.B .SS
-up to the end of the line (or the text in the next input line if there
-is no argument to
-.BR .SS )
-in bold face
-(or the font specified by the string
-.BR HF ),
-at the same size as the base document size.
-.
-Additionally, the left margin and the indentation for the following
-text is reset to the default values.
-.
-.
-.TP
-.BI .TH " title section \fR[\fPextra1\fR]\fP \fR[\fPextra2\fR]\fP \fR[\fPextra3\fR]"
-Set the title of the
-.I man\~page
-to
-.I title
-and the section to
-.IR section ,
-which must take on a value between 1 and\~8.
-.
-The value
-.I section
-may also have a string appended, e.g.\& \[oq].pm\[cq], to indicate a
-specific subsection of the
-.IR \%man\~pages .
-.
-Both
-.I title
-and
-.I section
-are positioned at the left and right in the header line (with
-.I section
-in parentheses immediately appended to
-.IR title .
-.
-.I extra1
-is positioned in the middle of the footer line.
-.
-.I extra2
-is positioned at the left in the footer line (or at the left on
-even pages and at the right on odd pages if double-sided printing is
-active).
-.
-.I extra3
-is centered in the header line.
-.
-.
-.IP
-For HTML output, headers and footers are completely suppressed.
-.
-.
-.IP
-Additionally, this macro starts a new page; the new line number is\~1
-again (except if the \[oq]\-rC1\[cq] option is given on the command
-line) -- this feature is intended only for formatting multiple
-.IR \%man\~pages ;
-a single
-.I \%man\~page
-should contain exactly one
-.B TH
-macro at the beginning of the file.
-.
-.
-.TP
-.BI .TP " \fR[\fPnnn\fR]\fP"
-Set up an indented paragraph with label.
-.
-The indentation is set to
-.I nnn
-if that argument is supplied (the default unit is \[oq]n\[cq] if omitted),
-otherwise it is set to the previous indentation value specified with
-.BR .TP ,
-.BR .IP ,
-or
-.B .HP
-(or to the default value if none of them have been used yet).
-.
-.
-.IP
-The first input line of text following this macro is interpreted as a
-string to be printed flush-left, as it is appropriate for a label.
-.
-It is not interpreted as part of a paragraph, so there is no attempt
-to fill the first line with text from the following input lines.
-.
-Nevertheless, if the label is not as wide as the indentation the
-paragraph starts at the same line (but indented), continuing on the
-following lines.
-.
-If the label is wider than the indentation the descriptive part of the
-paragraph begins on the line following the label, entirely indented.
-.
-Note that neither font shape nor font size of the label is set to a
-default value; on the other hand, the rest of the text has default
-font settings.
-.
-.
-.IP
-The
-.B TP
-macro is the macro used for the explanations you are just reading.
-.
-.
-.TP
-.B .TQ
-The
-.B TQ
-macro sets up header continuation for a
-.B TP
-macro.
-.
-With it, you can stack up any number of labels (such as in a
-glossary, or list of commands) before beginning the indented
-paragraph.
-.
-For an example, look up the documentation of the
-.BR LP ,
-.BR PP ,
-and
-.BR P
-macros.
-.
-.
-.IP
-This macro is not defined on legacy Unix systems running classic
-troff.
-.
-To be certain your page will be portable to those systems,
-copy its definition from the
-.B \%an-ext.tmac
-file of a
-.BR groff
-installation.
-.
-.
-.PP
-To summarize, the following macros cause a line break with the
-insertion of vertical space (which amount can be changed with the
-.B PD
-macro):
-.BR SH ,
-.BR SS ,
-.BR TP ,
-.BR TQ ,
-.B LP
-.RB ( PP ,
-.BR P ),
-.BR IP ,
-and
-.BR HP .
-The macros
-.BR RS ,
-.BR RE ,
-.BR EX ,
-and
-.B EE
-also cause a break but no insertion of vertical space.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "MACROS TO SET FONTS"
-.\" --------------------------------------------------------------------
-.
-The standard font is Roman; the default text size is 10\~point.
-.
-.
-.TP
-.BI .B " \fR[\fPtext\fR]\fP"
-Causes
-.I text
-to appear in bold face.
-.
-If no text is present on the line where the macro is called the text
-of the next input line appears in bold face.
-.
-.
-.TP
-.BI ".BI " text
-Causes text on the same line to appear alternately in bold face and
-italic.
-.
-The text must be on the same line as the macro call.
-.
-Thus
-.
-.
-.RS
-.IP
-\&.BI this "word and" that
-.
-.
-.PP
-would cause \[oq]this\[cq] and \[oq]that\[cq] to appear in bold face,
-while \[oq]word and\[cq] appears in italics.
-.RE
-.
-.
-.TP
-.BI ".BR " text
-Causes text on the same line to appear alternately in bold face and
-roman.
-.
-The text must be on the same line as the macro call.
-.
-.
-.TP
-.BI .I " \fR[\fPtext\fR]\fP"
-Causes
-.I text
-to appear in italic.
-.
-If no text is present on the line where the macro is called the text
-of the next input line appears in italic.
-.
-.
-.TP
-.BI ".IB " text
-Causes text to appear alternately in italic and bold face.
-.
-The text must be on the same line as the macro call.
-.
-.
-.TP
-.BI ".IR " text
-Causes text on the same line to appear alternately in italic and
-roman.
-.
-The text must be on the same line as the macro call.
-.
-.
-.TP
-.BI ".RB " text
-Causes text on the same line to appear alternately in roman and bold
-face.
-.
-The text must be on the same line as the macro call.
-.
-.
-.TP
-.BI ".RI " text
-Causes text on the same line to appear alternately in roman and
-italic.
-.
-The text must be on the same line as the macro call.
-.
-.
-.TP
-.BI .SB " \fR[\fPtext\fR]\fP"
-Causes the text on the same line or the text on the next input line to
-appear in boldface font, one point size smaller than the default font.
-.
-.
-.TP
-.BI .SM " \fR[\fPtext\fR]\fP"
-Causes the text on the same line or the text on the next input line to
-appear in a font that is one point size smaller than the default font.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "MACROS TO DESCRIBE HYPERLINKS AND EMAIL ADDRESSES"
-.\" --------------------------------------------------------------------
-.
-The following macros are not defined on legacy Unix systems
-running classic troff.
-.
-To be certain your page will be portable to those systems, copy
-their definitions from the
-.B \%an-ext.tmac
-file of a
-.BR groff
-installation.
-.
-.
-.PP
-Using these macros helps ensure that you get hyperlinks when your
-manual page is rendered in a browser or other program that is
-Web-enabled.
-.
-.
-.TP
-.BI .MT " address"
-.TQ
-.BI .ME " \fR[\fPpunctuation\fR]\fP"
-Wrap an email address.
-.
-The argument of
-.B .MT
-is the address; text following, until
-.BR .ME ,
-is a name to be associated with the address.
-.
-Any argument to the
-.B ME
-macro is pasted to the end of the link text.
-.
-On a device that is not a browser,
-.
-.
-.RS
-.IP
-.EX
-contact
-\&.MT fred.foonly@\e:fubar.net
-Fred Foonly
-\&.ME
-for more information
-.EE
-.RE
-.
-.
-.IP
-usually displays like this: \[lq]contact Fred Foonly
-<fred.foonly@\:fubar.net> for more information\[rq].
-.
-.
-.IP
-The use of
-.B \e:
-to insert hyphenless breakpoints is a groff extension and can
-be omitted.
-.
-.
-.TP
-.BI .UR " URL"
-.TQ
-.BI .UE " \fR[\fPpunctuation\fR]\fP"
-Wrap a World Wide Web hyperlink.
-.
-The argument to
-.B .UR
-is the URL; thereafter, lines until
-.B .UE
-are collected and used as the link text.
-.
-Any argument to the
-.B UE
-macro is pasted to the end of the text.
-.
-On a device that is not a browser,
-.
-.
-.RS
-.IP
-.EX
-this is a link to
-\&.UR http://\e:randomsite.org/\e:fubar
-some random site
-\&.UE ,
-given as an example
-.EE
-.RE
-.
-.
-.IP
-usually displays like this: \[lq]this is a link to some random
-site <http://\:randomsite.org/\:fubar>, given as an example\[rq].
-.
-.
-.IP
-The use of
-.B \e:
-to insert hyphenless breakpoints is a groff extension and can be
-omitted.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "MACROS TO DESCRIBE COMMAND SYNOPSES"
-.\" --------------------------------------------------------------------
-.
-The following macros are not defined on legacy Unix systems
-running classic troff.
-.
-To be certain your page will be portable to those systems, copy their
-definitions from the
-.B \%an-ext.tmac
-file of a
-.BR groff
-installation.
-.
-.
-.PP
-These macros are a convenience for authors.
-.
-They also assist automated translation tools and help browsers in
-recognizing command synopses and treating them differently from
-running text.
-.
-.
-.TP
-.BI .OP " key value"
-Describe an optional command argument.
-.
-The arguments of this macro are set surrounded by option braces
-in the default Roman font; the first argument is printed with
-a bold face, while the second argument is typeset as italic.
-.
-.
-.TP
-.BI .SY " command"
-Begin synopsis.
-.
-Takes a single argument, the name of a command.
-.
-Text following, until closed by
-.BR .YS ,
-is set with a hanging indentation with the width of
-.I command
-plus a space.
-.
-This produces the traditional look of a Unix command synopsis.
-.
-.
-.TP
-.B .YS
-This macro restores normal indentation at the end of a command
-synopsis.
-.
-.
-.PP
-Here is a real example:
-.
-.
-.IP
-.EX
-\&.SY groff
-\&.OP \e-abcegiklpstzCEGNRSUVXZ
-\&.OP \e-d cs
-\&.OP \e-f fam
-\&.OP \e-F dir
-\&.OP \e-I dir
-\&.OP \e-K arg
-\&.OP \e-L arg
-\&.OP \e-m name
-\&.OP \e-M dir
-\&.OP \e-n num
-\&.OP \e-o list
-\&.OP \e-P arg
-\&.OP \e-r cn
-\&.OP \e-T dev
-\&.OP \e-w name
-\&.OP \e-W name
-\&.RI [ file
-\&.IR .\e|.\e|. ]
-\&.YS
-.EE
-.
-.
-.PP
-produces the following output:
-.
-.
-.RS
-.PP
-.SY groff
-.OP \-abcegiklpstzCEGNRSUVXZ
-.OP \-d cs
-.OP \-f fam
-.OP \-F dir
-.OP \-I dir
-.OP \-K arg
-.OP \-L arg
-.OP \-m name
-.OP \-M dir
-.OP \-n num
-.OP \-o list
-.OP \-P arg
-.OP \-r cn
-.OP \-T dev
-.OP \-w name
-.OP \-W name
-.RI [ file
-.IR .\|.\|. ]
-.YS
-.RE
-.
-.
-.PP
-If necessary, you might use
-.B br
-requests to control line breaking.
-.
-You can insert plain text as well; this looks like the traditional
-(unornamented) syntax for a required command argument or filename.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "MISCELLANEOUS"
-.\" --------------------------------------------------------------------
-.
-The default indentation is 7.2n in troff mode and 7n in nroff mode
-except for
-.BR grohtml ,
-which ignores indentation.
-.
-.
-.TP
-.BI .AT " \fR[\fPsystem \fR[\fPrelease\fR]]\fP"
-Alter the footer for use with \f[CR]AT&T\f[]
-.IR \%man\~pages .
-This command exists only for compatibility; don\[aq]t use it.
-.
-See the
-.I groff
-info manual for more.
-.
-.
-.TP
-.B .BT
-Print the footer string.
-.
-Redefine this macro to get control of the footer.
-.
-.
-.TP
-.B .DT
-Set tabs every 0.5\~inches.
-.
-Since this macro is always called during a
-.B TH
-macro, it makes sense to call it only if the tab positions have been
-changed.
-.
-.
-.IP
-Use of this presentation-level macro is deprecated.
-.
-It translates poorly to HTML, under which exact whitespace control
-and tabbing are not readily available.
-.
-Thus, information or distinctions that you use
-.B .DT
-to express are likely to be lost.
-.
-If you feel tempted to use it, you should probably be composing a
-table using
-.BR @g@tbl (@MAN1EXT@)
-markup instead.
-.
-.
-.TP
-.BI .PD " \fR[\fPnnn\fR]\fP"
-Adjust the empty space before a new paragraph or section.
-.
-The optional argument gives the amount of space (default unit is
-\[oq]v\[cq]); without parameter, the value is reset to its default
-value (1\~line in nroff mode, 0.4v\~otherwise).
-.
-This affects the macros
-.BR SH ,
-.BR SS ,
-.BR TP ,
-.B LP
-(resp.\&
-.B PP
-and
-.BR P ),
-.BR IP ,
-and
-.BR HP .
-.
-.
-.IP
-Use of this presentation-level macro is deprecated.
-.
-It translates poorly to HTML, under which exact control of
-inter-paragraph spacing is not readily available.
-.
-Thus, information or distinctions that you use
-.B .PD
-to express are likely to be lost.
-.
-.
-.TP
-.B .PT
-Print the header string.
-.
-Redefine this macro to get control of the header.
-.
-.
-.TP
-.BI .UC " \fR[\fPversion\fR]\fP"
-Alter the footer for use with \f[CR]BSD\f[]
-.IR man\~pages .
-This command exists only for compatibility; don\[aq]t use it.
-.
-See the
-.I groff
-info manual for more.
-.
-.
-.PP
-The following strings are defined:
-.
-.
-.TP
-.B \e*R
-The \[oq]registered\[cq] sign.
-.
-.
-.TP
-.B \e*S
-Switch back to the default font size.
-.
-.
-.TP
-.B \e*(lq
-.TQ
-.B \e*(rq
-Left and right quote.
-.
-This is equal to \[oq]\e(lq\[cq] and \[oq]\e(rq\\[cq], respectively.
-.
-.
-.TP
-.B \e*(HF
-The typeface used to print headings and subheadings.
-.
-The default is \[oq]B\[cq].
-.
-.
-.TP
-.B \e*(Tm
-The \[oq]trademark\[cq] sign.
-.
-.
-.PP
-If a preprocessor like
-.B @g@tbl
-or
-.B @g@eqn
-is needed, it has become common to make the first line of the
-.I \%man\~page
-look like this:
-.
-.
-.PP
-.RS
-.BI '\e"\  word\""
-.RE
-.
-.
-.PP
-Note the single space character after the double quote.
-.I word
-consists of letters for the needed preprocessors: \[oq]e\[cq] for
-.BR @g@eqn ,
-\[oq]r\[cq] for
-.BR @g@refer ,
-and \[oq]t\[cq] for
-.BR @g@tbl .
-.
-Modern implementations of the
-.B man
-program read this first line and automatically call the right
-preprocessor(s).
-.
-.
-.\" --------------------------------------------------------------------
-.SH "PORTABILITY AND TROFF REQUESTS"
-.\" --------------------------------------------------------------------
-.
-Since the
-.B man
-macros consist of groups of
-.I groff
-requests, one can, in principle, supplement the functionality of the
-.B man
-macros with individual
-.I groff
-requests where necessary.
-.
-See the
-.I groff
-info pages for a complete reference of all requests.
-.
-.
-.PP
-Note, however, that using raw troff requests is likely to make your
-page render poorly on the (increasingly common) class of viewers that
-render it to HTML.
-.
-Troff requests make implicit assumptions about things like character
-and page sizes that may break in an HTML environment; also, many of
-these viewers don\[aq]t interpret the full troff vocabulary, a problem
-that can lead to portions of your text being silently dropped.
-.
-.
-.PP
-For portability to modern viewers, it is best to write your page
-entirely in the requests described on this page.
-.
-Further, it is best to completely avoid those we have described as
-\[oq]presentation-level\[cq]
-.RB ( .HP ,
-.BR .PD ,
-and
-.BR .DT ).
-.
-.
-.PP
-The macros we have described as extensions
-.RB ( .EX / .EE ,
-.BR .SY / .OP / .YS ,
-.BR .UR / .UE ,
-and
-.BR .MT / .ME )
-should be used with caution, as they may not yet be built in to
-some viewer that is important to your audience.
-.
-If in doubt, copy the implementation onto your page.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.TP
-.B man.tmac
-.TQ
-.B an.tmac
-These are wrapper files to call
-.BR andoc.tmac .
-.
-.
-.TP
-.B andoc.tmac
-Use this file in case you don\[aq]t know whether the
-.B man
-macros or the
-.B mdoc
-package should be used.
-Multiple man pages (in either format) can be handled.
-.
-.
-.TP
-.B an-old.tmac
-Most
-.B man
-macros are contained in this file.
-.
-.
-.TP
-.B an-ext.tmac
-The extension macro definitions for
-.BR .SY ,
-.BR .OP ,
-.BR .YS ,
-.BR .TQ ,
-.BR .EX/.EE ,
-.BR .UR/.UE ,
-and
-.BR .MT/.ME
-are contained in this file.
-.
-It is written in classic troff, and released for free re-use,
-and not copylefted; manual page authors concerned about
-portability to legacy Unix systems are encouraged to copy these
-definitions into their pages, and maintainers of troff
-or its workalikes are encouraged to re-use them.
-.
-.
-.IP
-Note that the definitions for these macros are read after the call of
-.BR TH ,
-so they will replace macros of the same names given at the beginning of
-your file.
-.
-If you must use your own definitions for these macros, they must be
-given after calling
-.BR TH .
-.
-.
-.TP
-.B man.local
-Local changes and customizations should be put into this file.
-.
-.
-.ad l
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR @g@refer (@MAN1EXT@),
-.BR man (1),
-.BR man (7),
-.BR groff_mdoc (7)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" --------------------------------------------------------------------
-.\" ### Emacs settings:
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/tmac/groff_mdoc.7.man b/tmac/groff_mdoc.7.man
new file mode 100644 (file)
index 0000000..2e9824d
--- /dev/null
@@ -0,0 +1,4301 @@
+'\" t
+.\" groff_mdoc.man
+.\"
+.\"   A complete reference of the mdoc macro package for GNU troff.
+.\"
+.\" Based on NetBSD's mdoc.samples.7, version 1.21.
+.\"
+.\"
+.\"   Warning: You can't format this file with the old mdoc macros!
+.\"
+.\"
+.\" Copyright (C) 1990, 1993
+.\"   The Regents of the University of California.  All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms, with or without
+.\" modification, are permitted provided that the following conditions
+.\" are met:
+.\" 1. Redistributions of source code must retain the above copyright
+.\"    notice, this list of conditions and the following disclaimer.
+.\" 2. Redistributions in binary form must reproduce the above copyright
+.\"    notice, this list of conditions and the following disclaimer in
+.\"    the documentation and/or other materials provided with the
+.\"    distribution.
+.\" 3. [Deleted.  See
+.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
+.\" 4. Neither the name of the University nor the names of its
+.\"    contributors may be used to endorse or promote products derived
+.\"    from this software without specific prior written permission.
+.\"
+.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS"
+.\" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
+.\" PARTICULAR PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR
+.\" CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+.\" SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+.\" LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
+.\" USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
+.\" ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
+.\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
+.\" OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+.\" SUCH DAMAGE.
+.\"
+.\"     @(#)mdoc.samples.7 8.2 (Berkeley) 12/30/93
+.\"
+.\" This reference invokes every macro in the package several times and
+.\" is guaranteed to give a worst case performance for an already
+.\" extremely slow package.
+.\"
+.
+.Dd November 2, 2010
+.Dt GROFF_MDOC 7
+.Os
+.
+.
+.Sh NAME
+.
+.Nm groff_mdoc
+.Nd reference for groff's mdoc implementation
+.
+.
+.Sh SYNOPSIS
+.
+.Nm groff Fl m Ns Cm doc Ar
+.
+.
+.Sh DESCRIPTION
+.
+A complete reference for writing
+.Ux
+manual pages with the
+.Nm \-mdoc
+macro package; a
+.Em content Ns -based
+and
+.Em domain Ns -based
+formatting package for
+.Tn GNU
+.Xr troff 1 .
+Its predecessor, the
+.Xr \-man 7
+package, addressed page layout leaving the manipulation of fonts and other
+typesetting details to the individual author.
+In
+.Nm \-mdoc ,
+page layout macros make up the
+.Em "page structure domain"
+which consists of macros for titles, section headers, displays and lists
+\(en essentially items which affect the physical position of text on a
+formatted page.
+In addition to the page structure domain, there are two more domains, the
+.Em manual
+domain and the
+.Em general
+text domain.
+The general text domain is defined as macros which perform tasks such as
+quoting or emphasizing pieces of text.
+The manual domain is defined as macros that are a subset of the day to day
+informal language used to describe commands, routines and related
+.Ux
+files.
+Macros in the manual domain handle command names, command-line arguments and
+options, function names, function parameters, pathnames, variables, cross
+references to other manual pages, and so on.
+These domain items have value for both the author and the future user of the
+manual page.
+Hopefully, the consistency gained across the manual set will provide easier
+translation to future documentation tools.
+.Pp
+Throughout the
+.Ux
+manual pages, a manual entry is simply referred to as a man page, regardless
+of actual length and without sexist intention.
+.
+.
+.Sh "GETTING STARTED"
+.
+The material presented in the remainder of this document is outlined
+as follows:
+.
+.Bl -enum -width 3n -offset indent
+.  It
+.  Tn "TROFF IDIOSYNCRASIES"
+.
+.  Bl -tag -width 2n -compact
+.    It "Macro Usage"
+.    It "Passing Space Characters in an Argument"
+.    It "Trailing Blank Space Characters"
+.    It "Escaping Special Characters"
+.    It "Other Possible Pitfalls"
+.  El
+.
+.  It
+.  Tn "A MANUAL PAGE TEMPLATE"
+.
+.  It
+.  Tn "CONVENTIONS"
+.
+.  It
+.  Tn "TITLE MACROS"
+.
+.  It
+.  Tn "INTRODUCTION OF MANUAL AND GENERAL TEXT DOMAINS"
+.
+.  Bl -tag -width 2n -compact
+.    It "What's in a Name" Ns ...
+.    It "General Syntax"
+.  El
+.
+.  It
+.  Tn "MANUAL DOMAIN"
+.
+.  Bl -tag -width 2n -compact
+.    It "Addresses"
+.    It "Author Name"
+.    It "Arguments"
+.    It "Configuration Declarations (Section Four Only)"
+.    It "Command Modifiers"
+.    It "Defined Variables"
+.    It "Errno's"
+.    It "Environment Variables"
+.    It "Flags"
+.    It "Function Declarations"
+.    It "Function Types"
+.    It "Functions (Library Routines)"
+.    It "Function Arguments"
+.    It "Return Values"
+.    It "Exit Status"
+.    \" .It "Header File (including source code)"
+.    It "Interactive Commands"
+.    It "Library Names"
+.    It "Literals"
+.    It "Names"
+.    It "Options"
+.    It "Pathnames"
+.    It "Standards"
+.    It "Variable Types"
+.    It "Variables"
+.    It "Manual Page Cross References"
+.  El
+.
+.  It
+.  Tn "GENERAL TEXT DOMAIN"
+.
+.  Bl -tag -width 2n -compact
+.    It "AT&T Macro"
+.    It "BSD Macro"
+.    It "NetBSD Macro"
+.    It "FreeBSD Macro"
+.    It "DragonFly Macro"
+.    It "OpenBSD Macro"
+.    It "BSD/OS Macro"
+.    It "UNIX Macro"
+.    It "Emphasis Macro"
+.    It "Font Mode"
+.    It "Enclosure and Quoting Macros"
+.    It "No-Op or Normal Text Macro"
+.    It "No-Space Macro"
+.    It "Section Cross References"
+.    It "Symbolics"
+.    It "Mathematical Symbols"
+.    It "References and Citations"
+.    It "Trade Names (or Acronyms and Type Names)"
+.    It "Extended Arguments"
+.  El
+.
+.  It
+.  Tn "PAGE STRUCTURE DOMAIN"
+.
+.  Bl -tag -width 2n -compact
+.    It "Section Headers"
+.    It "Subsection Headers"
+.    It "Paragraphs and Line Spacing"
+.    It "Keeps"
+.    It "Examples and Displays"
+.    It "Lists and Columns"
+.  El
+.
+.  It
+.  Tn "MISCELLANEOUS MACROS"
+.
+.  It
+.  Tn "PREDEFINED STRINGS"
+.
+.  It
+.  Tn "DIAGNOSTICS"
+.
+.  It
+.  Tn "FORMATTING WITH GROFF, TROFF, AND NROFF"
+.
+.  It
+.  Tn "FILES"
+.
+.  It
+.  Tn "SEE ALSO"
+.
+.  It
+.  Tn "BUGS"
+.El
+.
+.\" XXX
+.if t \
+.  ne 7
+.
+.
+.Sh "TROFF IDIOSYNCRASIES"
+.
+The
+.Nm \-mdoc
+package attempts to simplify the process of writing a man page.
+Theoretically, one should not have to learn the tricky details of
+.Tn GNU
+.Xr troff 1
+to use
+.Nm \-mdoc ;
+however, there are a few limitations which are unavoidable and best gotten
+out of the way.
+And, too, be forewarned, this package is
+.Em not
+fast.
+.
+.Ss "Macro Usage"
+.
+As in
+.Tn GNU
+.Xr troff 1 ,
+a macro is called by placing a
+.Ql .\&
+(dot character) at the beginning of a line followed by the two-character
+(or three-character) name for the macro.
+There can be space or tab characters between the dot and the macro name.
+Arguments may follow the macro separated by spaces (but
+.Em no
+tabs).
+It is the dot character at the beginning of the line which causes
+.Tn GNU
+.Xr troff 1
+to interpret the next two (or more) characters as a macro name.
+A single starting dot followed by nothing is ignored.
+To place a
+.Ql .\&
+(dot character) at the beginning of an input line in some context other than
+a macro invocation, precede the
+.Ql .\&
+(dot) with the
+.Ql \e&
+escape sequence which translates literally to a zero-width space, and is
+never displayed in the output.
+.Pp
+In general,
+.Tn GNU
+.Xr troff 1
+macros accept an unlimited number of arguments (contrary to other versions
+of troff which can't handle more than nine arguments).
+In limited cases, arguments may be continued or extended on the next
+line (See
+.Sx Extended Arguments
+below).
+Almost all macros handle quoted arguments (see
+.Sx Passing Space Characters in an Argument
+below).
+.Pp
+Most of the
+.Nm \-mdoc
+general text domain and manual domain macros are special in that their
+argument lists are
+.Em parsed
+for callable macro names.
+This means an argument on the argument list which matches a general text or
+manual domain macro name (and which is defined to be callable) will be
+executed or called when it is processed.
+In this case the argument, although the name of a macro, is not preceded by
+a
+.Ql .\&
+(dot).
+This makes it possible to nest macros; for example the option macro,
+.Ql .Op ,
+may
+.Em call
+the flag and argument macros,
+.Ql \&Fl
+and
+.Ql \&Ar ,
+to specify an optional flag with an argument:
+.
+.Bl -tag -width ".Op Fl s Ar bytes" -offset indent
+.It Op Fl s Ar bytes
+is produced by
+.Ql ".Op Fl s Ar bytes"
+.El
+.
+.Pp
+To prevent a string from being interpreted as a macro name, precede the
+string with the escape sequence
+.Ql \e& :
+.
+.Bl -tag -width ".Op \&Fl s \&Ar bytes" -offset indent
+.It Op \&Fl s \&Ar bytes
+is produced by
+.Ql ".Op \e&Fl s \e&Ar bytes"
+.El
+.
+.Pp
+Here the strings
+.Ql \&Fl
+and
+.Ql \&Ar
+are not interpreted as macros.
+Macros whose argument lists are parsed for callable arguments are referred
+to as
+.Em parsed
+and macros which may be called from an argument list are referred to as
+.Em callable
+throughout this document.
+This is a technical
+.Em faux pas
+as almost all of the macros in
+.Nm \-mdoc
+are parsed, but as it was cumbersome to constantly refer to macros as
+being callable and being able to call other macros, the term parsed
+has been used.
+.
+.Pp
+In the following, we call an
+.Nm \-mdoc
+macro which starts a line (with a leading dot) a
+.Em command
+if this distinction is necessary.
+.
+.Ss "Passing Space Characters in an Argument"
+.
+Sometimes it is desirable to give as an argument a string containing one or
+more blank space characters, say, to specify arguments to commands which
+expect particular arrangement of items in the argument list.
+Additionally, it makes
+.Nm \-mdoc
+working faster.
+For example, the function command
+.Ql .Fn
+expects the first argument to be the name of a function and any remaining
+arguments to be function parameters.
+As
+.Tn ANSI\~C
+stipulates the declaration of function parameters in the parenthesized
+parameter list, each parameter is guaranteed to be at minimum a two word
+string.
+For example,
+.Fa int foo .
+.Pp
+There are two possible ways to pass an argument which contains
+an embedded space.
+One way of passing a string containing blank spaces is to use the hard or
+unpaddable space character
+.Ql \e\  ,
+that is, a blank space preceded by the escape character
+.Ql \e .
+This method may be used with any macro but has the side effect of
+interfering with the adjustment of text over the length of a line.
+.Xr Troff
+sees the hard space as if it were any other printable character and cannot
+split the string into blank or newline separated pieces as one would expect.
+This method is useful for strings which are not expected to overlap a line
+boundary.
+An alternative is to use
+.Ql \e\[ti] ,
+a paddable (i.e.\& stretchable), unbreakable space (this is a
+.Tn GNU
+.Xr troff 1
+extension).
+The second method is to enclose the string with double quotes.
+.Pp
+For example:
+.
+.Bl -tag -width ".Fn fetch char\ *str" -offset indent
+.It Fn fetch char\ *str
+is created by
+.Ql ".Fn fetch char\e *str"
+.It Fn fetch "char *str"
+can also be created by
+.Ql ".Fn fetch \*[q]char *str\*[q]"
+.El
+.
+.Pp
+If the
+.Ql \e
+before the space in the first example
+or double quotes in the second example
+were omitted,
+.Ql .Fn
+would see three arguments, and the result would be:
+.Pp
+.Dl Fn fetch char *str
+.Pp
+.\" For an example of what happens when the parameter list overlaps a newline
+.\" boundary, see the
+.\" .Sx BUGS
+.\" section.
+.
+.Ss "Trailing Blank Space Characters"
+.
+.Xr Troff
+can be confused by blank space characters at the end of a line.
+It is a wise preventive measure to globally remove all blank spaces
+from
+.Ao blank-space Ac Ns Ao end-of-line Ac
+character sequences.
+Should the need arise to use a blank character at the end of a line, it
+may be forced with an unpaddable space and the
+.Ql \e&
+escape character.
+For example,
+.Ql string\e\ \e& .
+.
+.Ss "Escaping Special Characters"
+.
+Special characters like the newline character
+.Ql \en
+are handled by replacing the
+.Ql \e
+with
+.Ql \ee
+(e.g.\&
+.Ql \een )
+to preserve the backslash.
+.
+.Ss "Other Possible Pitfalls"
+.
+A warning is emitted when an empty input line is found outside of displays
+(see below).
+Use
+.Ql .sp
+instead.
+(Well, it is even better to use
+.Nm \-mdoc
+macros to avoid the usage of low-level commands.)
+.Pp
+Leading spaces will cause a break and are output directly.
+Avoid this behaviour if possible.
+Similarly, do not use more than one space character between words in an
+ordinary text line; contrary to other text formatters, they are
+.Em not
+replaced with a single space.
+.Pp
+You can't pass
+.Ql \*[q]
+directly as an argument.
+Use
+.Ql \e*[q]
+(or
+.Ql \e*q )
+instead.
+.Pp
+By default,
+.Xr troff 1
+inserts two space characters after a punctuation mark closing a sentence;
+characters like
+.Ql \&)
+or
+.Ql \&'
+are treated transparently, not influencing the sentence-ending behaviour.
+To change this, insert
+.Ql \e&
+before or after the dot:
+.
+.Bd -literal -offset indent
+The
+\&.Ql .
+character.
+\&.Pp
+The
+\&.Ql \e&.
+character.
+\&.Pp
+\&.No test .
+test
+\&.Pp
+\&.No test.
+test
+.Ed
+.Pp
+.
+gives
+.
+.Bd -filled -offset indent
+The
+.Ql .
+character
+.Pp
+The
+.Ql \&.
+character.
+.Pp
+.No test .
+test
+.Pp
+.No test.
+test
+.Ed
+.Pp
+.
+As can be seen in the first and third line,
+.Nm \-mdoc
+handles punctuation characters specially in macro arguments.
+This will be explained in section
+.Sx General Syntax
+below.
+In the same way, you have to protect trailing full stops of abbreviations
+with a trailing zero-width space:
+.Ql e.g.\e& .
+.Pp
+A comment in the source file of a man page can be either started with
+.Ql .\e"
+on a single line,
+.Ql \e"
+after some input, or
+.Ql \e#
+anywhere (the latter is a
+.Tn GNU
+.Xr troff 1
+extension); the rest of such a line is ignored.
+.
+.
+.Sh "A MANUAL PAGE TEMPLATE"
+.
+The body of a man page is easily constructed from a basic template:
+.
+.Bd -literal -offset indent
+\&.\e" The following commands are required for all man pages.
+\&.Dd Month day, year
+\&.Dt DOCUMENT_TITLE [section number] [architecture/volume]
+\&.Os [OPERATING_SYSTEM] [version/release]
+\&.Sh NAME
+\&.Nm name
+\&.Nd one line description of name
+\&.\e" This next command is for sections 2 and 3 only.
+\&.\e" .Sh LIBRARY
+\&.Sh SYNOPSIS
+\&.Sh DESCRIPTION
+\&.\e" The following commands should be uncommented and
+\&.\e" used where appropriate.
+\&.\e" .Sh IMPLEMENTATION NOTES
+\&.\e" This next command is for sections 2, 3, and 9 only
+\&.\e"     (function return values).
+\&.\e" .Sh RETURN VALUES
+\&.\e" This next command is for sections 1, 6, 7, and 8 only.
+\&.\e" .Sh ENVIRONMENT
+\&.\e" .Sh FILES
+\&.\e" This next command is for sections 1, 6, and 8 only
+\&.\e"     (command return values to the shell).
+\&.\e" .Sh EXIT STATUS
+\&.\e" .Sh EXAMPLES
+\&.\e" This next command is for sections 1, 4, 6, 7, 8, and 9 only
+\&.\e"     (fprintf/stderr type diagnostics).
+\&.\e" .Sh DIAGNOSTICS
+\&.\e" .Sh COMPATIBILITY
+\&.\e" This next command is for sections 2, 3, 4, and 9 only
+\&.\e"     (settings of the errno variable).
+\&.\e" .Sh ERRORS
+\&.\e" .Sh SEE ALSO
+\&.\e" .Sh STANDARDS
+\&.\e" .Sh HISTORY
+\&.\e" .Sh AUTHORS
+\&.\e" .Sh CAVEATS
+\&.\e" .Sh BUGS
+.Ed
+.Pp
+.
+The first items in the template are the commands
+.Ql .Dd ,
+.Ql .Dt ,
+and
+.Ql .Os ;
+the document date, the operating system the man page or subject source is
+developed or modified for, and the man page title (in
+.Em upper case )
+along with the section of the manual the page belongs in.
+These commands identify the page and are discussed below in
+.Sx TITLE MACROS .
+.Pp
+The remaining items in the template are section headers
+.Pf ( Li .Sh ) ;
+of which
+.Em NAME ,
+.Em SYNOPSIS ,
+and
+.Em DESCRIPTION
+are mandatory.
+The headers are discussed in
+.Sx "PAGE STRUCTURE DOMAIN" ,
+after presentation of
+.Sx "MANUAL DOMAIN" .
+Several content macros are used to demonstrate page layout macros; reading
+about content macros before page layout macros is recommended.
+.
+.
+.Sh CONVENTIONS
+.
+In the description of all macros below, optional arguments are put into
+brackets.
+An ellipsis
+.Pf ( Sq ... )
+represents zero or more additional arguments.
+Alternative values for a parameter are separated with
+.Ql | .
+If there are alternative values for a mandatory parameter, braces are used
+(together with
+.Ql | )
+to enclose the value set.
+Meta-variables are specified within angles.
+.Pp
+Example:
+.
+.Bl -tag -width 6n -offset indent
+.It Li .Xx Xo
+.Aq foo
+.Brq bar1 | bar2
+.Op \-test1 Op \-test2 | \-test3
+.No ...
+.Xc
+.El
+.
+.Pp
+Except stated explicitly, all macros are parsed and callable.
+.Pp
+Note that a macro takes effect up to the next nested macro.
+For example,
+.Ql ".Ic foo Aq bar"
+doesn't produce
+.Sq Ic "foo <bar>"
+but
+.Sq Ic foo Aq bar .
+Consequently, a warning message is emitted for most commands if the first
+argument is a macro itself since it cancels the effect of the calling
+command completely.
+Another consequence is that quoting macros never insert literal quotes;
+.Sq Ic "foo <bar>"
+has been produced by
+.Ql ".Ic \*[q]foo <bar>\*[q]" .
+.Pp
+Most macros have a default width value which can be used to specify a label
+width
+.Pf ( Fl width )
+or offset
+.Pf ( Fl offset )
+for the
+.Ql .Bl
+and
+.Ql .Bd
+macros.
+It is recommended not to use this rather obscure feature to avoid
+dependencies on local modifications of the
+.Nm \-mdoc
+package.
+.
+.
+.Sh "TITLE MACROS"
+.
+The title macros are part of the page structure domain but are presented
+first and separately for someone who wishes to start writing a man page
+yesterday.
+Three header macros designate the document title or manual page title, the
+operating system, and the date of authorship.
+These macros are called once at the very beginning of the document and are
+used to construct headers and footers only.
+.
+.Bl -tag -width 6n
+.It Li .Dt Xo
+.Op Aq document title
+.Op Aq section number
+.Op Aq volume
+.Xc
+The document title is the subject of the man page and must be in
+.Tn CAPITALS
+due to troff limitations.
+If omitted,
+.Sq Tn UNTITLED
+is used.
+The section number may be a number in the range
+.No 1,\~ Ns ... Ns ,\~9
+or
+.Ql unass ,
+.Ql draft ,
+or
+.Ql paper .
+If it is specified, and no volume name is given, a default volume name is
+used.
+.
+.Pp
+Under
+.Tn \*[doc-operating-system] ,
+the following sections are defined:
+.Pp
+.TS
+l l l.
+1      \*[doc-volume-operating-system] \*[doc-volume-ds-1]
+2      \*[doc-volume-operating-system] \*[doc-volume-ds-2]
+3      \*[doc-volume-operating-system] \*[doc-volume-ds-3]
+4      \*[doc-volume-operating-system] \*[doc-volume-ds-4]
+5      \*[doc-volume-operating-system] \*[doc-volume-ds-5]
+6      \*[doc-volume-operating-system] \*[doc-volume-ds-6]
+7      \*[doc-volume-operating-system] \*[doc-volume-ds-7]
+8      \*[doc-volume-operating-system] \*[doc-volume-ds-8]
+9      \*[doc-volume-operating-system] \*[doc-volume-ds-9]
+.TE
+.Pp
+.
+A volume name may be arbitrary or one of the following:
+.
+.Pp
+.TS
+l l.
+USD    \*[doc-volume-ds-USD]
+PS1    \*[doc-volume-ds-PS1]
+AMD    \*[doc-volume-ds-AMD]
+SMM    \*[doc-volume-ds-SMM]
+URM    \*[doc-volume-ds-URM]
+PRM    \*[doc-volume-ds-PRM]
+KM     \*[doc-volume-ds-KM]
+IND    \*[doc-volume-ds-IND]
+LOCAL  \*[doc-volume-ds-LOCAL]
+CON    \*[doc-volume-ds-CON]
+.TE
+.Pp
+.
+For compatibility,
+.Ql MMI
+can be used for
+.Ql IND ,
+and
+.Ql LOC
+for
+.Ql LOCAL .
+Values from the previous table will specify a new volume name.
+If the third parameter is a keyword designating a computer architecture,
+its value is prepended to the default volume name as specified by the
+second parameter.
+By default, the following architecture keywords are defined:
+.
+\# we use 'No' to avoid hyphenation
+.Bd -ragged -offset indent
+.No acorn26 , acorn32 , algor , alpha , amd64 , amiga , amigappc ,
+.No arc , arm , arm26 , arm32 , armish , atari , aviion ,
+.No beagle , bebox , cats , cesfic , cobalt , dreamcast ,
+.No emips , evbarm , evbmips , evbppc , evbsh3 , ews4800mips ,
+.No hp300 , hp700 , hpcarm , hpcmips , hpcsh , hppa , hppa64 ,
+.No i386 , ia64 , ibmnws , iyonix , landisk , loongson , luna68k , luna88k ,
+.No m68k , mac68k , macppc , mips , mips64 , mipsco , mmeye ,
+.No mvme68k , mvme88k , mvmeppc , netwinder , news68k , newsmips , next68k ,
+.No ofppc , palm , pc532 , playstation2 , pmax , pmppc , powerpc , prep ,
+.No rs6000 , sandpoint , sbmips , sgi , sgimips , sh3 , shark ,
+.No socppc , solbourne , sparc , sparc64 , sun2 , sun3 ,
+.No tahoe , vax , x68k , x86_64 , xen , zaurus
+.Ed
+.Pp
+.
+If the section number is neither a numeric expression in the range 1 to\~9
+nor one of the above described keywords, the third parameter is used
+verbatim as the volume name.
+.Pp
+In the following examples, the left (which is identical to the right) and
+the middle part of the manual page header strings are shown.
+Note how
+.Ql \e&
+prevents the digit\~7 from being a valid numeric expression.
+.
+.Bd -ragged
+.Bl -tag -width ".Li .Dt\ FOO\ 2\ i386" -compact -offset indent
+.It Li ".Dt FOO 7"
+.Ql FOO(7)
+.Ql \*[doc-volume-operating-system] \*[doc-volume-ds-7]
+.It Li ".Dt FOO 7 bar"
+.Ql FOO(7)
+.Ql \*[doc-volume-operating-system] \*[doc-volume-ds-7]
+.It Li ".Dt FOO \e&7 bar"
+.Ql FOO(7)
+.Ql bar
+.It Li ".Dt FOO 2 i386"
+.Ql FOO(2)
+.Ql \*[doc-volume-operating-system]/\*[doc-volume-as-i386] \*[doc-volume-ds-2]
+.It Li ".Dt FOO \*[q]\*[q] bar"
+.Ql FOO
+.Ql bar
+.El
+.Ed
+.Pp
+.
+Local, OS-specific additions might be found in the file
+.Pa mdoc.local ;
+look for strings named
+.Ql volume\-ds\-XXX
+(for the former type) and
+.Ql volume\-as\-XXX
+(for the latter type);
+.Ql XXX
+then denotes the keyword to be used with the
+.Ql .Dt
+macro.
+.Pp
+This macro is neither callable nor parsed.
+.
+.It Li .Os Xo
+.Op Aq operating system
+.Op Aq release
+.Xc
+If the first parameter is empty,
+the default
+.Sq Tn "\*[doc-operating-system]"
+is used.
+This may be overridden in the local configuration file,
+.Pa mdoc.local .
+In general, the name of the operating system should be the common acronym,
+e.g.\&
+.Tn BSD
+or
+.Tn ATT .
+The release should be the standard release nomenclature for the system
+specified.
+In the following table, the possible second arguments for some predefined
+operating systems are listed.
+Similar to
+.Ql .Dt ,
+local additions might be defined in
+.Pa mdoc.local ;
+look for strings named
+.Ql operating\-system\-XXX\-YYY ,
+where
+.Ql XXX
+is the acronym for the operating system and
+.Ql YYY
+the release ID.
+.
+.Bd -ragged -compact
+.Bl -tag -width ".No DragonFly" -offset indent
+.It ATT
+7th, 7, III, 3, V, V.2, V.3, V.4
+.It BSD
+3, 4, 4.1, 4.2, 4.3, 4.3t, 4.3T, 4.3r, 4.3R, 4.4
+.It NetBSD
+0.8, 0.8a, 0.9, 0.9a, 1.0, 1.0a, 1.1, 1.2, 1.2a, 1.2b, 1.2c, 1.2d, 1.2e,
+1.3, 1.3a, 1.4, 1.4.1, 1.4.2, 1.4.3, 1.5, 1.5.1, 1.5.2, 1.5.3, 1.6, 1.6.1,
+1.6.2, 1.6.3, 2.0, 2.0.1, 2.0.2, 2.0.3, 2.1, 3.0, 3.0.1, 3.0.2, 3.0.3,
+3.1, 3.1.1, 4.0, 4.0.1, 5.0, 5.0.1, 5.0.2, 5.1, 5.1.2, 5.1.3, 5.1.4,
+5.2, 5.2.1, 5.2.2, 6.0, 6.0.1, 6.0.2, 6.0.3, 6.0.4, 6.0.5, 6.1, 6.1.1,
+6.1.2, 6.1.3, 6.1.4
+.It FreeBSD
+1.0, 1.1, 1.1.5, 1.1.5.1, 2.0, 2.0.5, 2.1, 2.1.5, 2.1.6, 2.1.7, 2.2, 2.2.1,
+2.2.2, 2.2.5, 2.2.6, 2.2.7, 2.2.8, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 4.0, 4.1,
+4.1.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.6.2, 4.7, 4.8, 4.9, 4.10, 4.11, 5.0, 5.1,
+5.2, 5.2.1, 5.3, 5.4, 5.5, 6.0, 6.1, 6.2, 6.3, 6.4, 7.0, 7.1, 7.2, 7.3, 7.4,
+8.0, 8.1, 8.2, 8.3, 8.4, 9.0, 9.1, 9.2, 9.3, 10.0
+.It OpenBSD
+2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.3, 3.4,
+3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9,
+5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6
+.It DragonFly
+1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.8, 1.8.1, 1.9, 1.10, 1.12, 1.12.2,
+1.13, 2.0, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 2.9.1, 2.10, 2.10.1,
+2.11, 2.12, 2.13, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8
+.It Darwin
+8.0.0, 8.1.0, 8.2.0, 8.3.0, 8.4.0, 8.5.0, 8.6.0, 8.7.0, 8.8.0, 8.9.0,
+8.10.0, 8.11.0, 9.0.0, 9.1.0, 9.2.0, 9.3.0, 9.4.0, 9.5.0, 9.6.0, 9.7.0,
+9.8.0, 10.1.0, 10.2.0, 10.3.0, 10.4.0, 10.5.0, 10.6.0, 10.7.0, 10.8.0,
+11.0.0, 11.1.0, 11.2.0, 11.3.0, 11.4.0, 11.5.0, 12.0.0, 12.1.0, 12.2.0,
+13.0.0, 13.1.0, 13.2.0, 13.3.0, 13.4.0, 14.0.0
+.El
+.Ed
+.Pp
+.
+For
+.Tn ATT ,
+an unknown second parameter will be replaced with the string
+.Tn UNIX ;
+for the other predefined acronyms it will be ignored and a warning message
+emitted.
+Unrecognized arguments are displayed as given in the page footer.
+For instance, a typical footer might be:
+.Pp
+.Dl .Os BSD 4.3
+.Pp
+giving
+.Ql 4.3\~Berkeley Distribution ,
+or for a locally produced set
+.Pp
+.Dl .Os CS Department
+.Pp
+which will produce
+.Ql CS\~Department .
+.Pp
+If the
+.Ql .Os
+macro is not present, the bottom left corner of the manual page will be
+ugly.
+.Pp
+This macro is neither callable nor parsed.
+.
+.It Li .Dd Oo
+.Aq month
+.Aq day ,
+.Aq year
+.Oc
+If
+.Ql Dd
+has no arguments,
+.Ql Epoch
+is used for the date string.
+If it has exactly three arguments, they are concatenated, separated with
+unbreakable space:
+.Pp
+.Dl .Dd January 25, 2001
+.Pp
+The month's name shall not be abbreviated.
+.Pp
+With any other number of arguments, the current date is used, ignoring
+the parameters.
+.Pp
+As a special exception, the format
+.Bd -filled -offset indent
+.Li .Dd $Mdocdate:
+.Aq month
+.Aq day
+.Aq year
+.Li $
+.Ed
+.Pp
+is also recognized.
+It is used in
+.Ox
+manuals to automatically insert the current date when committing.
+.Pp
+This macro is neither callable nor parsed.
+.El
+.
+.
+.Sh "INTRODUCTION OF MANUAL AND GENERAL TEXT DOMAINS"
+.
+.Ss "What's in a Name" Ns ...
+.
+The manual domain macro names are derived from the day to day informal
+language used to describe commands, subroutines and related files.
+Slightly different variations of this language are used to describe the
+three different aspects of writing a man page.
+First, there is the description of
+.Nm \-mdoc
+macro command usage.
+Second is the description of a
+.Ux
+command
+.Em with
+.Nm \-mdoc
+macros, and third, the description of a command to a user in the verbal
+sense; that is, discussion of a command in the text of a man page.
+.Pp
+In the first case,
+.Xr troff 1
+macros are themselves a type of command; the general syntax for a troff
+command is:
+.
+.Bd -filled -offset indent
+.Li ".Xx argument1 argument2" ...
+.Ed
+.Pp
+.
+.Ql .Xx
+is a macro command, and anything following it are arguments to
+be processed.
+In the second case, the description of a
+.Ux
+command using the content macros is a bit more involved; a typical
+.Sx SYNOPSIS
+command line might be displayed as:
+.
+.Bd -filled -offset indent
+.Nm filter
+.Op Fl flag
+.Ao Ar infile Ac Ao Ar outfile Ac
+.Ed
+.Pp
+.
+Here,
+.Nm filter
+is the command name and the
+bracketed string
+.Fl flag
+is a
+.Em flag
+argument designated as optional by the option brackets.
+In
+.Nm \-mdoc
+terms,
+.Ao Ar infile Ac
+and
+.Ao Ar outfile Ac
+are called
+.Em meta arguments ;
+in this example, the user has to replace the meta expressions given in angle
+brackets with real file names.
+Note that in this document meta arguments are used to describe
+.Nm \-mdoc
+commands; in most man pages, meta variables are not specifically written
+with angle brackets.
+The macros which formatted the above example:
+.
+.Bd -literal -offset indent
+\&.Nm filter
+\&.Op Fl flag
+\&.Ao Ar infile Ac Ao Ar outfile Ac
+.Ed
+.Pp
+.
+In the third case, discussion of commands and command syntax includes both
+examples above, but may add more detail.
+The arguments
+.Ao Ar infile Ac
+and
+.Ao Ar outfile Ac
+from the example above might be referred to as
+.Em operands
+or
+.Em file arguments .
+Some command-line argument lists are quite long:
+.
+.Bd -ragged
+.Bl -tag -width ".Nm make" -offset indent -compact
+.It Nm make
+.Op Fl eiknqrstv
+.Op Fl D Ar variable
+.Op Fl d Ar flags
+.Op Fl f Ar makefile
+.Op Fl I Ar directory
+.Op Fl j Ar max_jobs
+.Op Ar variable Ns = Ns Ar value
+.Bk
+.Op Ar target ...
+.Ek
+.El
+.Ed
+.Pp
+.
+Here one might talk about the command
+.Nm make
+and qualify the argument,
+.Ar makefile ,
+as an argument to the flag,
+.Fl f ,
+or discuss the optional file operand
+.Ar target .
+In the verbal context, such detail can prevent confusion, however the
+.Nm \-mdoc
+package does not have a macro for an argument
+.Em to
+a flag.
+Instead the
+.Ql \&Ar
+argument macro is used for an operand or file argument like
+.Ar target
+as well as an argument to a flag like
+.Ar variable .
+The make command line was produced from:
+.
+.Bd -literal -offset indent
+\&.Nm make
+\&.Op Fl eiknqrstv
+\&.Op Fl D Ar variable
+\&.Op Fl d Ar flags
+\&.Op Fl f Ar makefile
+\&.Op Fl I Ar directory
+\&.Op Fl j Ar max_jobs
+\&.Op Ar variable Ns = Ns Ar value
+\&.Bk
+\&.Op Ar target ...
+\&.Ek
+.Ed
+.Pp
+.
+The
+.Ql .Bk
+and
+.Ql .Ek
+macros are explained in
+.Sx Keeps .
+.
+.Ss "General Syntax"
+.
+The manual domain and general text domain macros share a similar syntax with
+a few minor deviations; most notably,
+.Ql .Ar ,
+.Ql .Fl ,
+.Ql .Nm ,
+and
+.Ql .Pa
+differ only when called without arguments; and
+.Ql .Fn
+and
+.Ql .Xr
+impose an order on their argument lists.
+All content macros are capable of recognizing and properly handling
+punctuation, provided each punctuation character is separated by a leading
+space.
+If a command is given:
+.Pp
+.Dl \&.Ar sptr, ptr),
+.Pp
+The result is:
+.Pp
+.Dl Ar sptr, ptr),
+.Pp
+The punctuation is not recognized and all is output in the
+font used by
+.Ql .Ar .
+If the punctuation is separated by a leading white space:
+.Pp
+.Dl \&.Ar "sptr , ptr ) ,"
+.Pp
+The result is:
+.Pp
+.Dl Ar sptr , ptr ) ,
+.Pp
+The punctuation is now recognized and output in the default font
+distinguishing it from the argument strings.
+To remove the special meaning from a punctuation character escape it with
+.Ql \e& .
+.Pp
+The following punctuation characters are recognized by
+.Nm \-mdoc :
+.
+.Bl -column -offset indent-two XXXXXX XXXXXX XXXXXX XXXXXX
+.It Li .\& Ta Li ,\& Ta Li :\& Ta Li ;\& Ta Li (\&
+.It Li )\& Ta Li [\& Ta Li ]\& Ta Li ?\& Ta Li !\&
+.El
+.Pp
+.
+.Xr Troff
+is limited as a macro language, and has difficulty when presented with a
+string containing a member of the mathematical, logical or quotation set:
+.
+.Bd -literal -offset indent-two
+{+,\-,/,*,%,<,>,<=,>=,=,==,&,`,',"}
+.Ed
+.Pp
+.
+The problem is that
+.Xr troff
+may assume it is supposed to actually perform the operation or evaluation
+suggested by the characters.
+To prevent the accidental evaluation of these characters, escape them with
+.Ql \e& .
+Typical syntax is shown in the first content macro displayed below,
+.Ql .Ad .
+.
+.
+.Sh "MANUAL DOMAIN"
+.
+.Ss Addresses
+.
+The address macro identifies an address construct.
+.Pp
+.Dl Usage: .Ad Ao address Ac ...
+.Pp
+.Bl -tag -width ".Li .Ad\ f1\ ,\ f2\ ,\ f3\ :" -compact -offset 15n
+.It Li ".Ad addr1"
+.Ad addr1
+.It Li ".Ad addr1 ."
+.Ad addr1 .
+.It Li ".Ad addr1 , file2"
+.Ad addr1 , file2
+.It Li ".Ad f1 , f2 , f3 :"
+.Ad f1 , f2 , f3 :
+.It Li ".Ad addr ) ) ,"
+.Ad addr ) ) ,
+.El
+.Pp
+.
+The default width is 12n.
+.
+.Ss "Author Name"
+.
+The
+.Ql .An
+macro is used to specify the name of the author of the item being
+documented, or the name of the author of the actual manual page.
+.Pp
+.Dl Usage: .An Ao author name Ac ...
+.Pp
+.Bl -tag -width ".Li .An\ \*[q]Joe\ Author\*[q]\ )\ )\ ," -offset 15n
+.It Li ".An \*[q]Joe Author\*[q]"
+.An "Joe Author"
+.It Li ".An \*[q]Joe Author\*[q] ,"
+.An "Joe Author" ,
+.It Li ".An \*[q]Joe Author\*[q] Aq nobody@FreeBSD.org"
+.An "Joe Author" Aq nobody@FreeBSD.org
+.It Li ".An \*[q]Joe Author\*[q] ) ) ,"
+.An "Joe Author" ) ) ,
+.El
+.Pp
+.
+The default width is 12n.
+.Pp
+In the
+.Em AUTHORS
+section, the
+.Ql .An
+command causes a line break allowing each new name to appear on its own
+line.
+If this is not desirable,
+.
+.Bd -literal -offset indent
+\&.An \-nosplit
+.Ed
+.Pp
+.
+call will turn this off.
+To turn splitting back on, write
+.
+.Bd -literal -offset indent
+\&.An \-split
+.Ed
+.
+.Ss "Arguments"
+.
+The
+.Li .Ar
+argument macro may be used whenever an argument is referenced.
+If called without arguments, the
+.Sq Ar
+string is output.
+.Pp
+.Dl Usage: .Ar Oo Ao argument Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Ar\ file1\ file2" -compact -offset 15n
+.It Li .Ar
+.Ar
+.It Li ".Ar file1"
+.Ar file1
+.It Li ".Ar file1 ."
+.Ar file1 .
+.It Li ".Ar file1 file2"
+.Ar file1 file2
+.It Li ".Ar f1 f2 f3 :"
+.Ar f1 f2 f3 :
+.It Li ".Ar file ) ) ,"
+.Ar file ) ) ,
+.El
+.Pp
+.
+The default width is 12n.
+.
+.Ss "Configuration Declaration (Section Four Only)"
+.
+The
+.Ql .Cd
+macro is used to demonstrate a
+.Xr config 8
+declaration for a device interface in a section four manual.
+.Pp
+.Dl Usage: .Cd Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Cd\ Xdevice\ le0\ at\ scode?X" -offset 15n
+.It Li ".Cd \*[q]device le0 at scode?\*[q]"
+.Cd "device le0 at scode?"
+.El
+.Pp
+In the
+.Sx SYNOPSIS
+section a
+.Ql .Cd
+command causes a line break before and after its arguments are printed.
+.Pp
+.
+The default width is 12n.
+.
+.Ss "Command Modifiers"
+.
+The command modifier is identical to the
+.Ql .Fl
+(flag) command with the exception that the
+.Ql .Cm
+macro does not assert a dash in front of every argument.
+Traditionally flags are marked by the preceding dash, however, some commands
+or subsets of commands do not use them.
+Command modifiers may also be specified in conjunction with interactive
+commands such as editor commands.
+See
+.Sx Flags .
+.Pp
+The default width is 10n.
+.
+.Ss "Defined Variables"
+.
+A variable (or constant) which is defined in an include file
+is specified by the macro
+.Ql .Dv .
+.Pp
+.Dl Usage: .Dv Ao defined variable Ac ...
+.Pp
+.Bl -tag -width ".Li .Dv\ MAXHOSTNAMELEN" -compact -offset 15n
+.It Li ".Dv MAXHOSTNAMELEN"
+.Dv MAXHOSTNAMELEN
+.It Li ".Dv TIOCGPGRP )"
+.Dv TIOCGPGRP )
+.El
+.Pp
+.
+The default width is 12n.
+.
+.Ss Errno's
+.
+The
+.Ql .Er
+errno macro specifies the error return value for section 2, 3, and\~9 library
+routines.
+The second example below shows
+.Ql .Er
+used with the
+.Ql .Bq
+general text domain macro, as it would be used in a section two manual page.
+.Pp
+.Dl Usage: .Er Ao errno type Ac ...
+.Pp
+.Bl -tag -width ".Li .Bq\ Er\ ENOTDIR" -compact -offset 15n
+.It Li ".Er ENOENT"
+.Er ENOENT
+.It Li ".Er ENOENT ) ;"
+.Er ENOENT ) ;
+.It Li ".Bq Er ENOTDIR"
+.Bq Er ENOTDIR
+.El
+.Pp
+.
+The default width is 17n.
+.
+.Ss "Environment Variables"
+.
+The
+.Ql .Ev
+macro specifies an environment variable.
+.Pp
+.Dl Usage: .Ev Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Ev\ PRINTER\ )\ )\ ," -compact -offset 15n
+.It Li ".Ev DISPLAY"
+.Ev DISPLAY
+.It Li ".Ev PATH ."
+.Ev PATH .
+.It Li ".Ev PRINTER ) ) ,"
+.Ev PRINTER ) ) ,
+.El
+.Pp
+.
+The default width is 15n.
+.
+.Ss Flags
+.
+The
+.Ql .Fl
+macro handles command-line flags.
+It prepends a dash,
+.Ql \- ,
+to the flag.
+For interactive command flags, which are not prepended with a dash, the
+.Ql .Cm
+(command modifier)
+macro is identical, but without the dash.
+.Pp
+.Dl Usage: .Fl Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Fl\ xyz\ )\ ," -compact -offset 15n
+.It Li .Fl
+.Fl
+.It Li ".Fl cfv"
+.Fl cfv
+.It Li ".Fl cfv ."
+.Fl cfv .
+.It Li ".Cm cfv ."
+.Cm cfv .
+.It Li ".Fl s v t"
+.Fl s v t
+.It Li ".Fl \- ,"
+.Fl \- ,
+.It Li ".Fl xyz ) ,"
+.Fl xyz ) ,
+.It Li ".Fl |"
+.Fl |
+.El
+.Pp
+The
+.Ql .Fl
+macro without any arguments results in a dash representing stdin/stdout.
+Note that giving
+.Ql .Fl
+a single dash will result in two dashes.
+.Pp
+The default width is 12n.
+.
+.Ss "Function Declarations"
+.
+The
+.Ql .Fd
+macro is used in the
+.Sx SYNOPSIS
+section with section two or three functions.
+It is neither callable nor parsed.
+.Pp
+.Dl Usage: .Fd Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Fd\ X#include\ <sys/types.h>X" -compact -offset 15n
+.It Li ".Fd \*[q]#include <sys/types.h>\*[q]"
+.Fd "#include <sys/types.h>"
+.El
+.Pp
+In the
+.Sx SYNOPSIS
+section a
+.Ql .Fd
+command causes a line break if a function has already been presented and a
+break has not occurred.
+This leaves a nice vertical space in between the previous function call and
+the declaration for the next function.
+.
+.Pp
+The
+.Ql .In
+macro, while in the
+.Sx SYNOPSIS
+section, represents the
+.Li #include
+statement, and is the short form of the above example.
+It specifies the C\~header file as being included in a C\~program.
+It also causes a line break.
+.Pp
+While not in the
+.Sx SYNOPSIS
+section, it represents the header file enclosed in angle brackets.
+.Pp
+.Dl Usage: .In Ao header file Ac
+.Pp
+.Bl -tag -width ".Li .In\ stdio.h" -compact -offset 15n
+.nr in-synopsis-section 1
+.It Li ".In stdio.h"
+.In stdio.h
+.nr in-synopsis-section 0
+.It Li ".In stdio.h"
+.In stdio.h
+.El
+.
+.Ss "Function Types"
+.
+This macro is intended for the
+.Sx SYNOPSIS
+section.
+It may be used anywhere else in the man page without problems, but its main
+purpose is to present the function type in kernel normal form for the
+.Sx SYNOPSIS
+of sections two and three (it causes a line break, allowing the function
+name to appear on the next line).
+.Pp
+.Dl Usage: .Ft Ao type Ac ...
+.Pp
+.Bl -tag -width ".Li .Ft\ struct\ stat" -compact -offset 15n
+.It Li ".Ft struct stat"
+.Ft struct stat
+.El
+.
+.Ss "Functions (Library Routines)"
+.
+The
+.Ql .Fn
+macro is modeled on
+.Tn ANSI\~C
+conventions.
+.Pp
+.Dl Usage: .Fn Ao function Ac Oo Ao parameter Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Fn\ align\ Xchar\ *ptrX\ ," -compact -offset 15n
+.It Li ".Fn getchar"
+.Fn getchar
+.It Li ".Fn strlen ) ,"
+.Fn strlen ) ,
+.It Li ".Fn align \*[q]char *ptr\*[q] ,"
+.Fn align "char *ptr" ,
+.El
+.Pp
+Note that any call to another macro signals the end of the
+.Ql .Fn
+call (it will insert a closing parenthesis at that point).
+.Pp
+For functions with many parameters (which is rare), the macros
+.Ql .Fo
+(function open)
+and
+.Ql .Fc
+(function close)
+may be used with
+.Ql .Fa
+(function argument).
+.Pp
+Example:
+.
+.Bd -literal -offset indent
+\&.Ft int
+\&.Fo res_mkquery
+\&.Fa "int op"
+\&.Fa "char *dname"
+\&.Fa "int class"
+\&.Fa "int type"
+\&.Fa "char *data"
+\&.Fa "int datalen"
+\&.Fa "struct rrec *newrr"
+\&.Fa "char *buf"
+\&.Fa "int buflen"
+\&.Fc
+.Ed
+.Pp
+.
+Produces:
+.
+.Bd -ragged -offset indent
+.Ft int
+.Fo res_mkquery
+.Fa "int op"
+.Fa "char *dname"
+.Fa "int class"
+.Fa "int type"
+.Fa "char *data"
+.Fa "int datalen"
+.Fa "struct rrec *newrr"
+.Fa "char *buf"
+.Fa "int buflen"
+.Fc
+.Ed
+.Pp
+.
+In the
+.Sx SYNOPSIS
+section, the function will always begin at the beginning of line.
+If there is more than one function presented in the
+.Sx SYNOPSIS
+section and a function type has not been given, a line break will occur,
+leaving a nice vertical space between the current function name and the one
+prior.
+.Pp
+The default width values of
+.Ql .Fn
+and
+.Ql .Fo
+are 12n and 16n, respectively.
+.
+.Ss "Function Arguments"
+.
+The
+.Ql .Fa
+macro is used to refer to function arguments (parameters) outside of the
+.Sx SYNOPSIS
+section of the manual or inside the
+.Sx SYNOPSIS
+section if the enclosure macros
+.Ql .Fo
+and
+.Ql .Fc
+instead of
+.Ql .Fn
+are used.
+.Ql .Fa
+may also be used to refer to structure members.
+.Pp
+.Dl Usage: .Fa Ao function argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Fa\ d_namlen\ )\ )\ ," -compact -offset 15n
+.It Li ".Fa d_namlen ) ) ,"
+.Fa d_namlen ) ) ,
+.It Li ".Fa iov_len"
+.Fa iov_len
+.El
+.Pp
+.
+The default width is 12n.
+.
+.Ss "Return Values"
+.
+The
+.Ql .Rv
+macro generates text for use in the
+.Sx RETURN VALUES
+section.
+.Pp
+.Dl Usage: .Rv Oo \-std Oc Op Ao function Ac ...
+.Pp
+For example,
+.Ql ".Rv \-std atexit"
+produces:
+.
+.Bd -ragged -offset indent
+\# a small hack to suppress a warning message
+.ds doc-section-old "\*[doc-section]
+.ds doc-section 3
+.Rv -std atexit
+.ds doc-section "\*[doc-section-old]
+.Ed
+.Pp
+.
+The
+.Fl std
+option is valid only for manual page sections\~2 and\~3.
+Currently, this macro does nothing if used without the
+.Fl std
+flag.
+.
+.Ss "Exit Status"
+.
+The
+.Ql .Ex
+macro generates text for use in the
+.Sx DIAGNOSTICS
+section.
+.Pp
+.Dl Usage: .Ex Oo \-std Oc Op Ao utility Ac ...
+.Pp
+For example,
+.Ql ".Ex \-std cat"
+produces:
+.
+.Bd -ragged -offset indent
+\# a small hack to suppress a warning message
+.ds doc-section-old "\*[doc-section]
+.ds doc-section 1
+.Ex -std cat
+.ds doc-section "\*[doc-section-old]
+.Ed
+.Pp
+.
+The
+.Fl std
+option is valid only for manual page sections 1, 6 and\~8.
+Currently, this macro does nothing if used without the
+.Fl std
+flag.
+.
+.Ss "Interactive Commands"
+.
+The
+.Ql .Ic
+macro designates an interactive or internal command.
+.Pp
+.Dl Usage: .Ic Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Ic\ setenv\ ,\ unsetenv" -compact -offset 15n
+.It Li ".Ic :wq"
+.Ic :wq
+.It Li ".Ic \*[q]do while {...}\*[q]"
+.Ic "do while {...}"
+.It Li ".Ic setenv , unsetenv"
+.Ic setenv , unsetenv
+.El
+.Pp
+.
+The default width is 12n.
+.
+.Ss "Library Names"
+.
+The
+.Ql .Lb
+macro is used to specify the library where a particular function is compiled
+in.
+.Pp
+.Dl Usage: .Lb Ao argument Ac ...
+.Pp
+Available arguments to
+.Ql .Lb
+and their results are:
+.
+.Pp
+.Bl -tag -width ".Li librpcsec_gss" -compact -offset indent
+.It Li libarchive
+.Lb libarchive
+.It Li libarm
+.Lb libarm
+.It Li libarm32
+.Lb libarm32
+.It Li libbluetooth
+.Lb libbluetooth
+.It Li libbsm
+.Lb libbsm
+.It Li libc
+.Lb libc
+.It Li libc_r
+.Lb libc_r
+.It Li libcalendar
+.Lb libcalendar
+.It Li libcam
+.Lb libcam
+.It Li libcdk
+.Lb libcdk
+.It Li libcipher
+.Lb libcipher
+.It Li libcompat
+.Lb libcompat
+.It Li libcrypt
+.Lb libcrypt
+.It Li libcurses
+.Lb libcurses
+.It Li libdevinfo
+.Lb libdevinfo
+.It Li libdevstat
+.Lb libdevstat
+.It Li libdisk
+.Lb libdisk
+.It Li libdwarf
+.Lb libdwarf
+.It Li libedit
+.Lb libedit
+.It Li libelf
+.Lb libelf
+.It Li libevent
+.Lb libevent
+.It Li libfetch
+.Lb libfetch
+.It Li libform
+.Lb libform
+.It Li libgeom
+.Lb libgeom
+.It Li libgpib
+.Lb libgpib
+.It Li libi386
+.Lb libi386
+.It Li libintl
+.Lb libintl
+.It Li libipsec
+.Lb libipsec
+.It Li libipx
+.Lb libipx
+.It Li libiscsi
+.Lb libiscsi
+.It Li libjail
+.Lb libjail
+.It Li libkiconv
+.Lb libkiconv
+.It Li libkse
+.Lb libkse
+.It Li libkvm
+.Lb libkvm
+.It Li libm
+.Lb libm
+.It Li libm68k
+.Lb libm68k
+.It Li libmagic
+.Lb libmagic
+.It Li libmd
+.Lb libmd
+.It Li libmemstat
+.Lb libmemstat
+.It Li libmenu
+.Lb libmenu
+.It Li libnetgraph
+.Lb libnetgraph
+.It Li libnetpgp
+.Lb libnetpgp
+.It Li libossaudio
+.Lb libossaudio
+.It Li libpam
+.Lb libpam
+.It Li libpcap
+.Lb libpcap
+.It Li libpci
+.Lb libpci
+.It Li libpmc
+.Lb libpmc
+.It Li libposix
+.Lb libposix
+.It Li libprop
+.Lb libprop
+.It Li libpthread
+.Lb libpthread
+.It Li libpuffs
+.Lb libpuffs
+.It Li librefuse
+.Lb librefuse
+.It Li libresolv
+.Lb libresolv
+.It Li librpcsec_gss
+.Lb librpcsec_gss
+.It Li librpcsvc
+.Lb librpcsvc
+.It Li librt
+.Lb librt
+.It Li libsdp
+.Lb libsdp
+.It Li libssp
+.Lb libssp
+.It Li libSystem
+.Lb libSystem
+.It Li libtermcap
+.Lb libtermcap
+.It Li libterminfo
+.Lb libterminfo
+.It Li libthr
+.Lb libthr
+.It Li libufs
+.Lb libufs
+.It Li libugidfw
+.Lb libugidfw
+.It Li libulog
+.Lb libulog
+.It Li libusbhid
+.Lb libusbhid
+.It Li libutil
+.Lb libutil
+.It Li libvgl
+.Lb libvgl
+.It Li libx86_64
+.Lb libx86_64
+.It Li libz
+.Lb libz
+.El
+.Pp
+.
+Local, OS-specific additions might be found in the file
+.Pa mdoc.local ;
+look for strings named
+.Ql str\-Lb\-XXX .
+.Ql XXX
+then denotes the keyword to be used with the
+.Ql .Lb
+macro.
+.Pp
+In the
+.Em LIBRARY
+section an
+.Ql .Lb
+command causes a line break before and after its arguments are printed.
+.Pp
+.
+.Ss Literals
+.
+The
+.Ql .Li
+literal macro may be used for special characters, variable constants, etc.\&
+\- anything which should be displayed as it would be typed.
+.Pp
+.Dl Usage: .Li Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Li\ cntrl\-D\ )\ ,"  -compact -offset 15n
+.It Li ".Li \een"
+.Li \en
+.It Li ".Li M1 M2 M3 ;"
+.Li M1 M2 M3 ;
+.It Li ".Li cntrl\-D ) ,"
+.Li cntrl-D ) ,
+.It Li ".Li 1024 ..."
+.Li 1024 ...
+.El
+.Pp
+.
+The default width is 16n.
+.
+.Ss Names
+.
+The
+.Ql .Nm
+macro is used for the document title or subject name.
+It has the peculiarity of remembering the first argument it was called with,
+which should always be the subject name of the page.
+When called without arguments,
+.Ql .Nm
+regurgitates this initial name for the sole purpose of making less work for
+the author.
+.Ql .Nm
+causes a line break within the
+.Sx SYNOPSIS
+section.
+.Pp
+Note: A section two or three document function name is addressed with the
+.Ql .Nm
+in the
+.Em NAME
+section, and with
+.Ql .Fn
+in the
+.Sx SYNOPSIS
+and remaining sections.
+For interactive commands, such as the
+.Ql while
+command keyword in
+.Xr csh 1 ,
+the
+.Ql .Ic
+macro should be used.
+While
+.Ql .Ic
+is nearly identical
+to
+.Ql .Nm ,
+it can not recall the first argument it was invoked with.
+.Pp
+.Dl Usage: .Nm Oo Ao argument Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Nm\ groff_mdoc" -compact -offset 15n
+.It Li ".Nm groff_mdoc"
+.Nm groff_mdoc
+.It Li ".Nm \e\-mdoc"
+.Nm \-mdoc
+.It Li ".Nm foo ) ) ,"
+.Nm foo ) ) ,
+.It Li ".Nm :"
+.Nm :
+.El
+.Pp
+.
+The default width is 10n.
+.
+.Ss Options
+.
+The
+.Ql .Op
+macro places option brackets around any remaining arguments on the
+command line, and places any trailing punctuation outside the brackets.
+The macros
+.Ql .Oo
+and
+.Ql .Oc
+(which produce an opening and a closing option bracket respectively) may be used
+across one or more lines or to specify the exact position of the closing
+parenthesis.
+.Pp
+.Dl Usage: .Op Oo Ao option Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Op\ Fl\ c\ Ar\ objfil\ Op\ Ar\ corfil\ ," -compact -offset 15n
+.It Li .Op
+.Op
+.It Li ".Op Fl k"
+.Op Fl k
+.It Li ".Op Fl k ) ."
+.Op Fl k ) .
+.It Li ".Op Fl k Ar kookfile"
+.Op Fl k Ar kookfile
+.It Li ".Op Fl k Ar kookfile ,"
+.Op Fl k Ar kookfile ,
+.It Li ".Op Ar objfil Op Ar corfil"
+.Op Ar objfil Op Ar corfil
+.It Li ".Op Fl c Ar objfil Op Ar corfil ,"
+.Op Fl c Ar objfil Op Ar corfil ,
+.It Li ".Op word1 word2"
+.Op word1 word2
+.It Li ".Li .Op Oo Ao option Ac Oc ..."
+.Li .Op Oo Ao option Ac Oc ...
+.El
+.Pp
+Here a typical example of the
+.Ql .Oo
+and
+.Ql .Oc
+macros:
+.
+.Bd -literal -offset indent
+\&.Oo
+\&.Op Fl k Ar kilobytes
+\&.Op Fl i Ar interval
+\&.Op Fl c Ar count
+\&.Oc
+.Ed
+.Pp
+.
+Produces:
+.
+.Bd -filled -offset indent
+.Oo
+.Op Fl k Ar kilobytes
+.Op Fl i Ar interval
+.Op Fl c Ar count
+.Oc
+.Ed
+.Pp
+.
+The default width values of
+.Ql .Op
+and
+.Ql .Oo
+are 14n and 10n, respectively.
+.
+.Ss Pathnames
+.
+The
+.Ql .Pa
+macro formats path or file names.
+If called without arguments, the
+.Sq Pa
+string is output, which represents the current user's home directory.
+.Pp
+.Dl Usage: .Pa Oo Ao pathname Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Pa\ /tmp/fooXXXXX\ )\ ." -compact -offset 15n
+.It Li .Pa
+.Pa
+.It Li ".Pa /usr/share"
+.Pa /usr/share
+.It Li ".Pa /tmp/fooXXXXX ) ."
+.Pa /tmp/fooXXXXX ) .
+.El
+.Pp
+.
+The default width is 32n.
+.
+.Ss Standards
+.
+The
+.Ql .St
+macro replaces standard abbreviations with their formal names.
+.Pp
+.Dl Usage: .St Ao abbreviation Ac ...
+.Pp
+Available pairs for
+.Dq Abbreviation/Formal Name
+are:
+.
+.Pp
+.Tn ANSI/ISO C
+.Pp
+.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
+.It Li \-ansiC
+.St -ansiC
+.It Li \-ansiC\-89
+.St -ansiC-89
+.It Li \-isoC
+.St -isoC
+.It Li \-isoC\-90
+.St -isoC-90
+.It Li \-isoC\-99
+.St -isoC-99
+.It Li \-isoC\-2011
+.St -isoC-2011
+.El
+.Pp
+.
+.Tn POSIX
+Part 1: System API
+.Pp
+.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
+.It Li \-iso9945\-1\-90
+.St -iso9945-1-90
+.It Li \-iso9945\-1\-96
+.St -iso9945-1-96
+.It Li \-p1003.1
+.St -p1003.1
+.It Li \-p1003.1\-88
+.St -p1003.1-88
+.It Li \-p1003.1\-90
+.St -p1003.1-90
+.It Li \-p1003.1\-96
+.St -p1003.1-96
+.It Li \-p1003.1b\-93
+.St -p1003.1b-93
+.It Li \-p1003.1c\-95
+.St -p1003.1c-95
+.It Li \-p1003.1g\-2000
+.St -p1003.1g-2000
+.It Li \-p1003.1i\-95
+.St -p1003.1i-95
+.It Li \-p1003.1\-2001
+.St -p1003.1-2001
+.It Li \-p1003.1\-2004
+.St -p1003.1-2004
+.It Li \-p1003.1\-2008
+.St -p1003.1-2008
+.El
+.Pp
+.
+.Tn POSIX
+Part 2: Shell and Utilities
+.Pp
+.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
+.It Li \-iso9945\-2\-93
+.St -iso9945-2-93
+.It Li \-p1003.2
+.St -p1003.2
+.It Li \-p1003.2\-92
+.St -p1003.2-92
+.It Li \-p1003.2a\-92
+.St -p1003.2a-92
+.El
+.Pp
+.
+X/Open
+.Pp
+.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
+.It Li \-susv2
+.St -susv2
+.It Li \-susv3
+.St -susv3
+.It Li \-svid4
+.St -svid4
+.It Li \-xbd5
+.St -xbd5
+.It Li \-xcu5
+.St -xcu5
+.It Li \-xcurses4.2
+.St -xcurses4.2
+.It Li \-xns5
+.St -xns5
+.It Li \-xns5.2
+.St -xns5.2
+.It Li \-xpg3
+.St -xpg3
+.It Li \-xpg4
+.St -xpg4
+.It Li \-xpg4.2
+.St -xpg4.2
+.It Li \-xsh5
+.St -xsh5
+.El
+.Pp
+.
+Miscellaneous
+.Pp
+.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
+.It Li \-ieee754
+.St -ieee754
+.It Li \-iso8601
+.St -iso8601
+.It Li \-iso8802\-3
+.St -iso8802-3
+.El
+.
+.Ss "Variable Types"
+.
+The
+.Ql .Vt
+macro may be used whenever a type is referenced.
+In the
+.Sx SYNOPSIS
+section, it causes a line break (useful for old style variable declarations).
+.Pp
+.Dl Usage: .Vt Ao type Ac ...
+.Pp
+.Bl -tag -width ".Li .Vt\ extern\ char\ *optarg\ ;" -compact -offset 15n
+.It Li ".Vt extern char *optarg ;"
+.Vt extern char *optarg ;
+.It Li ".Vt FILE *"
+.Vt FILE *
+.El
+.
+.Ss Variables
+.
+Generic variable reference.
+.Pp
+.Dl Usage: .Va Ao variable Ac ...
+.Pp
+.Bl -tag -width ".Li .Va\ Xchar\ sX\ ]\ )\ )\ ," -compact -offset 15n
+.It Li ".Va count"
+.Va count
+.It Li ".Va settimer ,"
+.Va settimer ,
+.It Li ".Va \*[q]int *prt\*[q] ) :"
+.Va "int *prt" ) :
+.It Li ".Va \*[q]char s\*[q] ] ) ) ,"
+.Va "char s" ] ) ) ,
+.El
+.Pp
+.
+The default width is 12n.
+.
+.Ss "Manual Page Cross References"
+.
+The
+.Ql .Xr
+macro expects the first argument to be a manual page name.
+The optional second argument, if a string (defining the manual section), is
+put into parentheses.
+.Pp
+.Dl Usage: .Xr Ao man page name Ac Oo Ao section Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Xr\ xinit\ 1x\ ;" -compact -offset 15n
+.It Li ".Xr mdoc"
+.Xr mdoc
+.It Li ".Xr mdoc ,"
+.Xr mdoc ,
+.It Li ".Xr mdoc 7"
+.Xr mdoc 7
+.It Li ".Xr xinit 1x ;"
+.Xr xinit 1x ;
+.El
+.Pp
+.
+The default width is 10n.
+.
+.
+.Sh "GENERAL TEXT DOMAIN"
+.
+.Ss "AT&T Macro"
+.
+.Pp
+.Dl Usage: .At Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .At\ v6\ ." -compact -offset 15n
+.It Li .At
+.At
+.It Li ".At v6 ."
+.At v6 .
+.El
+.Pp
+The following values for
+.Ao version Ac
+are possible:
+.Pp
+.Dl 32v, v1, v2, v3, v4, v5, v6, v7, III, V, V.1, V.2, V.3, V.4
+.
+.Ss "BSD Macro"
+.
+.Pp
+.Dl "Usage: .Bx" Bro \-alpha | \-beta | \-devel Brc ...
+.Dl "       .Bx" Oo Ao version Ac Oo Ao release Ac Oc Oc ...
+.Pp
+.Bl -tag -width ".Li .Bx\ -devel" -compact -offset 15n
+.It Li .Bx
+.Bx
+.It Li ".Bx 4.3 ."
+.Bx 4.3 .
+.It Li ".Bx \-devel"
+.Bx -devel
+.El
+.Pp
+.Ao version Ac
+will be prepended to the string
+.Sq Bx .
+The following values for
+.Ao release Ac
+are possible:
+.Pp
+.Dl Reno, reno, Tahoe, tahoe, Lite, lite, Lite2, lite2
+.
+.Ss "NetBSD Macro"
+.
+.Pp
+.Dl Usage: .Nx Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Nx\ 1.4\ ." -compact -offset 15n
+.It Li .Nx
+.Nx
+.It Li ".Nx 1.4 ."
+.Nx 1.4 .
+.El
+.Pp
+For possible values of
+.Ao version Ac
+see the description of the
+.Ql .Os
+command above in section
+.Sx "TITLE MACROS" .
+.
+.Ss "FreeBSD Macro"
+.
+.Pp
+.Dl Usage: .Fx Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Fx\ 2.2\ ." -compact -offset 15n
+.It Li .Fx
+.Fx
+.It Li ".Fx 2.2 ."
+.Fx 2.2 .
+.El
+.Pp
+For possible values of
+.Ao version Ac
+see the description of the
+.Ql .Os
+command above in section
+.Sx "TITLE MACROS" .
+.
+.Ss "DragonFly Macro"
+.
+.Pp
+.Dl Usage: .Dx Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Dx\ 1.4\ ." -compact -offset 15n
+.It Li .Dx
+.Dx
+.It Li ".Dx 1.4 ."
+.Dx 1.4 .
+.El
+.Pp
+For possible values of
+.Ao version Ac
+see the description of the
+.Ql .Os
+command above in section
+.Sx "TITLE MACROS" .
+.
+.Ss "OpenBSD Macro"
+.
+.Pp
+.Dl Usage: .Ox Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Ox\ 1.0" -compact -offset 15n
+.It Li ".Ox 1.0"
+.Ox 1.0
+.El
+.
+.Ss "BSD/OS Macro"
+.
+.Pp
+.Dl Usage: .Bsx Oo Ao version Ac Oc ...
+.Pp
+.Bl -tag -width ".Li .Bsx\ 1.0" -compact -offset 15n
+.It Li ".Bsx 1.0"
+.Bsx 1.0
+.El
+.
+.Ss "UNIX Macro"
+.
+.Pp
+.Dl Usage: .Ux ...
+.Pp
+.Bl -tag -width ".Li .Ux" -compact -offset 15n
+.It Li .Ux
+.Ux
+.El
+.
+.Ss "Emphasis Macro"
+.
+Text may be stressed or emphasized with the
+.Ql .Em
+macro.
+The usual font for emphasis is italic.
+.Pp
+.Dl Usage: .Em Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Em\ vide\ infra\ )\ )\ ," -compact -offset 15n
+.It Li ".Em does not"
+.Em does not
+.It Li ".Em exceed 1024 ."
+.Em exceed 1024 .
+.It Li ".Em vide infra ) ) ,"
+.Em vide infra ) ) ,
+.El
+.Pp
+.
+The default width is 10n.
+.
+.Ss "Font Mode"
+.
+The
+.Ql .Bf
+font mode must be ended with the
+.Ql .Ef
+macro (the latter takes no arguments).
+Font modes may be nested within other font modes.
+.Pp
+.Ql .Bf
+has the following syntax:
+.Pp
+.Dl .Bf Ao font mode Ac
+.Pp
+.Ao font mode Ac
+must be one of the following three types:
+.Pp
+.Bl -tag -width ".Sy \&Sy | Fl symbolic" -compact -offset indent
+.It Sy \&Em | Fl emphasis
+Same as if the
+.Ql .Em
+macro was used for the entire block of text.
+.It Sy \&Li | Fl literal
+Same as if the
+.Ql .Li
+macro was used for the entire block of text.
+.It Sy \&Sy | Fl symbolic
+Same as if the
+.Ql .Sy
+macro was used for the entire block of text.
+.El
+.Pp
+Both macros are neither callable nor parsed.
+.
+.Ss "Enclosure and Quoting Macros"
+.
+The concept of enclosure is similar to quoting.
+The object being to enclose one or more strings between a pair of characters
+like quotes or parentheses.
+The terms quoting and enclosure are used interchangeably throughout this
+document.
+Most of the one-line enclosure macros end in small letter
+.Ql q
+to give a hint of quoting, but there are a few irregularities.
+For each enclosure macro there is also a pair of open and close macros which
+end in small letters
+.Ql o
+and
+.Ql c
+respectively.
+.Pp
+\# XXX
+.if t \
+.  ne 10
+.
+.TS
+lb lb lb lb lb
+l l l l l.
+Quote  Open    Close   Function        Result
+\&.Aq  .Ao     .Ac     Angle Bracket Enclosure <string>
+\&.Bq  .Bo     .Bc     Bracket Enclosure       [string]
+\&.Brq .Bro    .Brc    Brace Enclosure {string}
+\&.Dq  .Do     .Dc     Double Quote    "string"
+\&.Eq  .Eo     .Ec     Enclose String (in XX)  XXstring
+\&.Pq  .Po     .Pc     Parenthesis Enclosure   (string)
+\&.Ql                  Quoted Literal  \*[Lq]string\*[Rq] or string
+\&.Qq  .Qo     .Qc     Straight Double Quote   "string"
+\&.Sq  .So     .Sc     Single Quote    'string'
+.TE
+.Pp
+All macros ending with
+.Sq q
+and
+.Sq o
+have a default width value of 12n.
+.
+.Bl -tag -width ".Li .Ec , .Eo"
+.It Li .Eo , .Ec
+These macros expect the first argument to be the opening and closing strings
+respectively.
+.It Li .Es , .En
+Due to the nine-argument limit in the original troff program two other
+macros have been implemented which are now rather obsolete:
+.Ql .Es
+takes the first and second parameter as the left and right enclosure string,
+which are then used to enclose the arguments of
+.Ql .En .
+The default width value is 12n for both macros.
+.It Li .Eq
+The first and second arguments of this macro are the opening and
+closing strings respectively, followed by the arguments to be enclosed.
+.It Li .Ql
+The quoted literal macro behaves differently in troff and nroff mode.
+If formatted with
+.Xr nroff ,
+a quoted literal is always quoted.
+If formatted with troff, an item is only quoted if the width of the item is
+less than three constant width characters.
+This is to make short strings more visible where the font change to literal
+(constant width) is less noticeable.
+.Pp
+The default width is 16n.
+.It Li .Pf
+The prefix macro suppresses the whitespace between its first and second
+argument:
+.
+.Bl -tag -width ".Li .Pf\ (\ Fa\ name2" -offset indent
+.It Li ".Pf ( Fa name2"
+.Pf ( Fa name2
+.El
+.Pp
+.
+The default width is 12n.
+.Pp
+The
+.Ql .Ns
+macro (see below) performs the analogous suffix function.
+.It Li .Ap
+The
+.Ql .Ap
+macro inserts an apostrophe and exits any special text modes, continuing in
+.Ql .No
+mode.
+.El
+.Pp
+.
+Examples of quoting:
+.
+.Pp
+.Bl -tag -width ".Li .Bq\ Em\ Greek\ ,\ French\ ." -compact -offset indent
+.It Li .Aq
+.Aq
+.It Li ".Aq Pa ctype.h ) ,"
+.Aq Pa ctype.h ) ,
+.It Li .Bq
+.Bq
+.It Li ".Bq Em Greek , French ."
+.Bq Em Greek , French .
+.It Li .Dq
+.Dq
+.It Li ".Dq string abc ."
+.Dq string abc .
+.It Li ".Dq \'^[A\-Z]\'"
+.Dq \'^[A-Z]\'
+.It Li ".Ql man mdoc"
+.Ql man mdoc
+.It Li .Qq
+.Qq
+.It Li ".Qq string ) ,"
+.Qq string ) ,
+.It Li ".Qq string Ns ),"
+.Qq string Ns ),
+.It Li .Sq
+.Sq
+.It Li ".Sq string"
+.Sq string
+.It Li ".Em or Ap ing"
+.Em or Ap ing
+.El
+.Pp
+.
+For a good example of nested enclosure macros, see the
+.Ql .Op
+option macro.
+It was created from the same underlying enclosure macros as those presented
+in the list above.
+The
+.Ql .Xo
+and
+.Ql .Xc
+extended argument list macros are discussed below.
+.
+.Ss "No-Op or Normal Text Macro"
+.
+The
+.Ql .No
+macro can be used in a macro command line for parameters which should
+.Em not
+be formatted.
+Be careful to add
+.Ql \e&
+to the word
+.Ql \&No
+if you really want that English word (and not the macro) as a parameter.
+.Pp
+.Dl Usage: .No Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .No\ test\ Ta\ with\ Ta\ tabs" -compact -offset 15n
+.It Li ".No test Ta with Ta tabs"
+.No test Ta with Ta tabs
+.El
+.Pp
+.
+The default width is 12n.
+.
+.Ss "No-Space Macro"
+.
+The
+.Ql .Ns
+macro suppresses insertion of a space between the current position and its
+first parameter.
+For example, it is useful for old style argument lists where there is no
+space between the flag and argument:
+.Pp
+.Dl "Usage:" ... Ao argument Ac \&Ns Oo Ao argument Ac Oc ...
+.Dl "      " .Ns Ao argument Ac ...
+.Pp
+.Bl -tag -width ".Li .Op\ Fl\ I\ Ns\ Ar\ directory" -compact -offset 15n
+.It Li ".Op Fl I Ns Ar directory"
+.Op Fl I Ns Ar directory
+.El
+.Pp
+Note: The
+.Ql .Ns
+macro always invokes the
+.Ql .No
+macro after eliminating the space unless another macro name follows it.
+If used as a command (i.e., the second form above in the
+.Sq Usage
+line),
+.Ql .Ns
+is identical to
+.Ql .No .
+.
+.Ss "Section Cross References"
+.
+The
+.Ql .Sx
+macro designates a reference to a section header within the same document.
+.Pp
+.Dl Usage: .Sx Ao section reference Ac ...
+.Pp
+.Bl -tag -width ".Li .Sx\ FILES" -offset 15n
+.It Li ".Sx FILES"
+.Sx FILES
+.El
+.Pp
+.
+The default width is 16n.
+.
+.Ss Symbolics
+.
+The symbolic emphasis macro is generally a boldface macro in either the
+symbolic sense or the traditional English usage.
+.Pp
+.Dl Usage: .Sy Ao symbol Ac ...
+.Pp
+.Bl -tag -width ".Li .Sy\ Important\ Notice" -compact -offset 15n
+.It Li ".Sy Important Notice"
+.Sy Important Notice
+.El
+.Pp
+.
+The default width is 6n.
+.
+.Ss Mathematical Symbols
+.
+Use this macro for mathematical symbols and similar things.
+.Pp
+.Dl Usage: .Ms Ao math symbol Ac ...
+.Pp
+.Bl -tag -width ".Li .Ms\ sigma" -compact -offset 15n
+.It Li ".Ms sigma"
+.Ms sigma
+.El
+.Pp
+.
+The default width is 6n.
+.
+.Ss "References and Citations"
+.
+The following macros make a modest attempt to handle references.
+At best, the macros make it convenient to manually drop in a subset of
+.Xr refer 1
+style references.
+.Pp
+.Bl -tag -width 6n -offset indent -compact
+.It Li .Rs
+Reference start (does not take arguments).
+Causes a line break in the
+.Sx "SEE ALSO"
+section and begins collection of reference information until the reference
+end macro is read.
+.It Li .Re
+Reference end (does not take arguments).
+The reference is printed.
+.It Li .%A
+Reference author name; one name per invocation.
+.It Li .%B
+Book title.
+.It Li .%C
+City/place.
+.It Li .%D
+Date.
+.It Li .%I
+Issuer/publisher name.
+.It Li .%J
+Journal name.
+.It Li .%N
+Issue number.
+.It Li .%O
+Optional information.
+.It Li .%P
+Page number.
+.It Li .%Q
+Corporate or foreign author.
+.It Li .%R
+Report name.
+.It Li .%T
+Title of article.
+.It Li .%U
+Optional hypertext reference.
+.It Li .%V
+Volume.
+.El
+.Pp
+Macros beginning with
+.Ql %
+are not callable but accept multiple arguments in the usual way.
+Only the
+.Ql .Tn
+macro is handled properly as a parameter; other macros will cause strange
+output.
+.Ql .%B
+and
+.Ql .%T
+can be used outside of the
+.Ql .Rs/.Re
+environment.
+.Pp
+Example:
+.
+.Bd -literal -offset indent
+\&.Rs
+\&.%A "Matthew Bar"
+\&.%A "John Foo"
+\&.%T "Implementation Notes on foobar(1)"
+\&.%R "Technical Report ABC\-DE\-12\-345"
+\&.%Q "Drofnats College"
+\&.%C "Nowhere"
+\&.%D "April 1991"
+\&.Re
+.Ed
+.Pp
+produces
+.
+.Bd -ragged -offset indent
+.Rs
+.%A "Matthew Bar"
+.%A "John Foo"
+.%T "Implementation Notes on foobar(1)"
+.%R "Technical Report ABC-DE-12-345"
+.%Q "Drofnats College"
+.%C "Nowhere"
+.%D "April 1991"
+.Re
+.Ed
+.
+.Ss "Trade Names (or Acronyms and Type Names)"
+.
+The trade name macro prints its arguments in a smaller font.
+Its intended use is to imitate a small caps fonts for uppercase acronyms.
+.Pp
+.Dl Usage: .Tn Ao symbol Ac ...
+.Pp
+.Bl -tag -width ".Li .Tn\ ASCII" -compact -offset 15n
+.It Li ".Tn DEC"
+.Tn DEC
+.It Li ".Tn ASCII"
+.Tn ASCII
+.El
+.Pp
+.
+The default width is 10n.
+.
+.Ss "Extended Arguments"
+.
+The
+.Li .Xo
+and
+.Li .Xc
+macros allow one to extend an argument list on a macro boundary for the
+.Ql .It
+macro (see below).
+Note that
+.Li .Xo
+and
+.Li .Xc
+are implemented similarly to all other macros opening and closing an
+enclosure (without inserting characters, of course).
+This means that the following is true for those macros also.
+.Pp
+Here is an example of
+.Ql .Xo
+using the space mode macro to turn spacing off:
+.
+.Bd -literal -offset indent
+\&.Sm off
+\&.It Xo Sy I Ar operation
+\&.No \een Ar count No \een
+\&.Xc
+\&.Sm on
+.Ed
+.Pp
+.
+produces
+.
+.Bd -filled -offset indent
+.Bl -tag -compact
+.Sm off
+.It Xo Sy I Ar operation
+.No \en Ar count No \en
+.Xc
+.Sm on
+.El
+.Ed
+.Pp
+.
+Another one:
+.
+.Bd -literal -offset indent
+\&.Sm off
+\&.It Cm S No / Ar old_pattern Xo
+\&.No / Ar new_pattern
+\&.No / Op Cm g
+\&.Xc
+\&.Sm on
+.Ed
+.Pp
+.
+produces
+.
+.Bd -filled -offset indent
+.Bl -tag -compact
+.Sm off
+.It Cm S No \&/ Ar old_pattern Xo
+.No \&/ Ar new_pattern
+.No \&/ Op Cm g
+.Xc
+.Sm on
+.El
+.Ed
+.Pp
+.
+Another example of
+.Ql .Xo
+and enclosure macros: Test the value of a variable.
+.
+.Bd -literal -offset indent
+\&.It Xo
+\&.Ic .ifndef
+\&.Oo \e&! Oc Ns Ar variable Oo
+\&.Ar operator variable ...
+\&.Oc Xc
+.Ed
+.Pp
+.
+produces
+.
+.Bd -filled -offset indent
+.Bl -tag -width flag -compact
+.It Xo
+.Ic .ifndef
+.Oo \&! Oc Ns Ar variable Oo
+.Ar operator variable ...
+.Oc Xc
+.El
+.Ed
+.Pp
+.
+.
+.Sh "PAGE STRUCTURE DOMAIN"
+.
+.Ss "Section Headers"
+.
+The following
+.Ql .Sh
+section header macros are required in every man page.
+The remaining section headers are recommended at the discretion of the
+author writing the manual page.
+The
+.Ql .Sh
+macro is parsed but not generally callable.
+It can be used as an argument in a call to
+.Ql .Sh
+only; it then reactivates the default font for
+.Ql .Sh .
+.Pp
+The default width is 8n.
+.
+.Bl -tag -width ".Li .Sh\ RETURN\ VALUES"
+.It Li ".Sh NAME"
+The
+.Ql ".Sh NAME"
+macro is mandatory.
+If not specified, headers, footers and page layout defaults will not be set
+and things will be rather unpleasant.
+The
+.Em NAME
+section consists of at least three items.
+The first is the
+.Ql .Nm
+name macro naming the subject of the man page.
+The second is the name description macro,
+.Ql .Nd ,
+which separates the subject name from the third item, which is the
+description.
+The description should be the most terse and lucid possible, as the space
+available is small.
+.Pp
+.Ql .Nd
+first prints
+.Ql \- ,
+then all its arguments.
+.
+.It Li ".Sh LIBRARY"
+This section is for section two and three function calls.
+It should consist of a single
+.Ql .Lb
+macro call;
+see
+.Sx "Library Names" .
+.
+.It Li ".Sh SYNOPSIS"
+The
+.Sx SYNOPSIS
+section describes the typical usage of the subject of a man page.
+The macros required are either
+.Ql .Nm ,
+.Ql .Cd ,
+or
+.Ql .Fn
+(and possibly
+.Ql .Fo ,
+.Ql .Fc ,
+.Ql .Fd ,
+and
+.Ql .Ft ) .
+The function name macro
+.Ql .Fn
+is required for manual page sections\~2 and\~3; the command and general name
+macro
+.Ql .Nm
+is required for sections 1, 5, 6, 7, and\~8.
+Section\~4 manuals require a
+.Ql .Nm ,
+.Ql .Fd
+or a
+.Ql .Cd
+configuration device usage macro.
+Several other macros may be necessary to produce the synopsis line as shown
+below:
+.
+.Bd -filled -offset indent
+.Nm cat
+.Op Fl benstuv
+.Op Fl
+.Ar
+.Ed
+.Pp
+.
+The following macros were used:
+.Pp
+.Dl ".Nm cat"
+.Dl ".Op Fl benstuv"
+.Dl ".Op Fl"
+.Dl .Ar
+.
+.It Li ".Sh DESCRIPTION"
+In most cases the first text in the
+.Sx DESCRIPTION
+section is a brief paragraph on the command, function or file, followed by a
+lexical list of options and respective explanations.
+To create such a list, the
+.Ql .Bl
+(begin list),
+.Ql .It
+(list item) and
+.Ql .El
+(end list)
+macros are used (see
+.Sx Lists and Columns
+below).
+.
+.It Li ".Sh IMPLEMENTATION NOTES"
+Implementation specific information should be placed here.
+.
+.It Li ".Sh RETURN VALUES"
+Sections 2, 3 and\~9 function return values should go here.
+The
+.Ql .Rv
+macro may be used to generate text for use in the
+.Sx RETURN VALUES
+section for most section 2 and 3 library functions;
+see
+.Sx "Return Values" .
+.El
+.Pp
+.
+The following
+.Ql .Sh
+section headers are part of the preferred manual page layout and must be
+used appropriately to maintain consistency.
+They are listed in the order in which they would be used.
+.
+.Bl -tag -width ".Li .Sh\ COMPATIBILITY"
+.It Li ".Sh ENVIRONMENT"
+The
+.Em ENVIRONMENT
+section should reveal any related environment variables and clues to their
+behavior and/or usage.
+.
+.It Li ".Sh FILES"
+Files which are used or created by the man page subject should be listed via
+the
+.Ql .Pa
+macro in the
+.Sx FILES
+section.
+.
+.It Li ".Sh EXAMPLES"
+There are several ways to create examples.
+See the
+.Sx "Examples and Displays"
+section below for details.
+.
+.It Li ".Sh DIAGNOSTICS"
+Diagnostic messages from a command should be placed in this section.
+The
+.Ql .Ex
+macro may be used to generate text for use in the
+.Sx DIAGNOSTICS
+section for most section 1, 6 and\~8 commands;
+see
+.Sx "Exit Status" .
+.
+.It Li ".Sh COMPATIBILITY"
+Known compatibility issues (e.g.\& deprecated options or parameters)
+should be listed here.
+.
+.It Li ".Sh ERRORS"
+Specific error handling, especially from library functions (man page
+sections 2, 3, and\~9) should go here.
+The
+.Ql .Er
+macro is used to specify an error (errno).
+.
+.It Li ".Sh SEE ALSO"
+References to other material on the man page topic and cross references to
+other relevant man pages should be placed in the
+.Sx "SEE ALSO"
+section.
+Cross references are specified using the
+.Ql .Xr
+macro.
+Currently
+.Xr refer 1
+style references are not accommodated.
+.Pp
+It is recommended that the cross references are sorted on the section
+number, then alphabetically on the names within a section, and placed
+in that order and comma separated.
+Example:
+.Pp
+.Xr ls 1 ,
+.Xr ps 1 ,
+.Xr group 5 ,
+.Xr passwd 5
+.
+.It Li ".Sh STANDARDS"
+If the command, library function or file adheres to a specific
+implementation such as
+.St -p1003.2
+or
+.St -ansiC
+this should be noted here.
+If the command does not adhere to any standard, its history should be noted
+in the
+.Em HISTORY
+section.
+.
+.It Li ".Sh HISTORY"
+Any command which does not adhere to any specific standards should be
+outlined historically in this section.
+.
+.It Li ".Sh AUTHORS"
+Credits should be placed here.
+Use the
+.Ql .An
+macro for names and the
+.Ql .Aq
+macro for e-mail addresses within optional contact information.
+Explicitly indicate whether the person authored the initial manual page
+or the software or whatever the person is being credited for.
+.It Li ".Sh BUGS"
+Blatant problems with the topic go here.
+.El
+.Pp
+.
+User-specified
+.Ql .Sh
+sections may be added; for example, this section was set with:
+.
+.Bd -literal -offset 15n
+\&.Sh "PAGE STRUCTURE DOMAIN"
+.Ed
+.
+.Ss "Subsection Headers"
+.
+Subsection headers have exactly the same syntax as section headers:
+.Ql .Ss
+is parsed but not generally callable.
+It can be used as an argument in a call to
+.Ql .Ss
+only; it then reactivates the default font for
+.Ql .Ss .
+.Pp
+The default width is 8n.
+.
+.Ss "Paragraphs and Line Spacing"
+.
+.Bl -tag -width ".Li .Pp"
+.It Li .Pp
+The
+.Ql .Pp
+paragraph command may be used to specify a line space where necessary.
+The macro is not necessary after a
+.Ql .Sh
+or
+.Ql .Ss
+macro or before a
+.Ql .Bl
+or
+.Ql .Bd
+macro (which both assert a vertical distance unless the
+.Fl compact
+flag is given).
+.Pp
+The macro is neither callable nor parsed and takes no arguments; an
+alternative name is
+.Ql .Lp .
+.El
+.
+.\" XXX
+.
+.\" This worked with version one, need to redo for version three
+.\" .Pp
+.\" .Ds I
+.\" .Cw (ax+bx+c) \ is\ produced\ by\ \&
+.\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\&
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx\ (
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Va ax
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Sy \+
+.\" .Cx
+.\" .Cl Cx \&(\&
+.\" .Va ax
+.\" .Cx +
+.\" .Va by
+.\" .Cx +
+.\" .Va c )
+.\" .Cx \t
+.\" .Em is produced by
+.\" .Cx \t
+.\" .Li \&.Va by
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Sy \+
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Va c )
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx
+.\" .Cx
+.\" .Cw
+.\" .De
+.\" .Pp
+.\" This example shows the same equation in a different format.
+.\" The spaces
+.\" around the
+.\" .Li \&+
+.\" signs were forced with
+.\" .Li \e :
+.\" .Pp
+.\" .Ds I
+.\" .Cw (ax\ +\ bx\ +\ c) \ is\ produced\ by\ \&
+.\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\&
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx\ (
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Va a
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Sy x
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx \e\ +\e\ \e&
+.\" .Cx
+.\" .Cl Cx \&(\&
+.\" .Va a
+.\" .Sy x
+.\" .Cx \ +\ \&
+.\" .Va b
+.\" .Sy y
+.\" .Cx \ +\ \&
+.\" .Va c )
+.\" .Cx \t
+.\" .Em is produced by
+.\" .Cl Cx \t\t
+.\" .Li \&.Va b
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Sy y
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx \e\ +\e\ \e&
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Va c )
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx
+.\" .Cx
+.\" .Cw
+.\" .De
+.\" .Pp
+.\" The incantation below was
+.\" lifted from the
+.\" .Xr adb 1
+.\" manual page:
+.\" .Pp
+.\" .Ds I
+.\" .Cw \&[?/]m_b1_e1_f1[?/]\& is\ produced\ by
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx Op Sy ?/
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Nm m
+.\" .Cx
+.\" .Cl Cx Op Sy ?/
+.\" .Nm m
+.\" .Ad \ b1 e1 f1
+.\" .Op Sy ?/
+.\" .Cx \t
+.\" .Em is produced by
+.\" .Cx \t
+.\" .Li \&.Ar \e\ b1 e1 f1
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Op Sy ?/
+.\" .Cx
+.\" .Cl Cx \t\t
+.\" .Li \&.Cx
+.\" .Cx
+.\" .Cw
+.\" .De
+.\" .Pp
+.
+.Ss Keeps
+.
+The only keep that is implemented at this time is for words.
+The macros are
+.Ql .Bk
+(begin keep)
+and
+.Ql .Ek
+(end keep).
+The only option that
+.Ql .Bk
+accepts currently is
+.Fl words
+(this is also the default if no option is given) which is useful for
+preventing line breaks in the middle of options.
+In the example for the make command-line arguments (see
+.Sx What's in a Name ) ,
+the keep prevented
+.Xr nroff
+from placing up the flag and the argument on separate lines.
+.Pp
+Both macros are neither callable nor parsed.
+.Pp
+More work needs to be done with the keep macros; specifically, a
+.Fl line
+option should be added.
+.
+.Ss "Examples and Displays"
+.
+There are seven types of displays.
+.Pp
+.Bl -tag -width ".Li .D1"
+.It Li .D1
+(This is D-one.)
+Display one line of indented text.
+This macro is parsed but not callable.
+.Pp
+.D1 Fl ldghfstru
+.Pp
+The above was produced by:
+.Li ".D1 Fl ldghfstru" .
+.
+.It Li .Dl
+(This is D-ell.)
+Display one line of indented
+.Em literal
+text.
+The
+.Ql .Dl
+example macro has been used throughout this file.
+It allows the indentation (display) of one line of text.
+Its default font is set to constant width (literal).
+.Ql .Dl
+is parsed but not callable.
+.Pp
+.Dl % ls \-ldg /usr/local/bin
+.Pp
+The above was produced by:
+.Li ".Dl % ls \e\-ldg /usr/local/bin" .
+.
+.It Li .Bd
+Begin display.
+The
+.Ql .Bd
+display must be ended with the
+.Ql .Ed
+macro.
+It has the following syntax:
+.Pp
+.Bd -ragged -compact
+.Bl -tag -width ".Li .Bd" -offset indent
+.It Li .Bd Xo
+.Bro \-literal | \-filled | \-unfilled | \-ragged | \-centered Brc
+.Oo \-offset Ao string Ac Oc Oo \-file Ao file name Ac Oc Oo \-compact Oc Xc
+.El
+.Ed
+.Pp
+.
+.Bl -tag -width ".Fl file Ao Ar file name Ac " -compact
+.It Fl ragged
+Fill, but do not adjust the right margin (only left-justify).
+.It Fl centered
+Center lines between the current left and right margin.
+Note that each single line is centered.
+.It Fl unfilled
+Do not fill; display a block of text as typed, using line breaks as
+specified by the user.
+This can produce overlong lines without warning messages.
+.It Fl filled
+Display a filled block.
+The block of text is formatted (i.e., the text is justified on both the left
+and right side).
+.It Fl literal
+Display block with literal font (usually fixed-width).
+Useful for source code or simple tabbed or spaced text.
+.It Fl file Ao Ar file name Ac
+The file whose name follows the
+.Fl file
+flag is read and displayed before any data enclosed with
+.Ql .Bd
+and
+.Ql .Ed ,
+using the selected display type.
+Any
+.Xr troff/ Ns Nm \-mdoc
+commands in the file will be processed.
+.It Fl offset Ao Ar string Ac
+If
+.Fl offset
+is specified with one of the following strings, the string is interpreted to
+indicate the level of indentation for the forthcoming block of text:
+.
+.Pp
+.Bl -tag -width ".Ar indent-two" -compact
+.It Ar left
+Align block on the current left margin; this is the default mode of
+.Ql .Bd .
+.It Ar center
+Supposedly center the block.
+At this time unfortunately, the block merely gets left aligned about an
+imaginary center margin.
+.It Ar indent
+Indent by one default indent value or tab.
+The default indent value is also used for the
+.Ql .D1
+and
+.Ql .Dl
+macros, so one is guaranteed the two types of displays will line up.
+The indentation value is normally set to\~6n or about two thirds of an inch
+(six constant width characters).
+.It Ar indent\-two
+Indent two times the default indent value.
+.It Ar right
+This
+.Em left
+aligns the block about two inches from the right side of the page.
+This macro needs work and perhaps may never do the right thing within
+.Xr troff .
+.El
+.Pp
+.
+If
+.Ao string Ac
+is a valid numeric expression instead
+.Pf ( Em with a scale indicator other than
+.Sq Em u ) ,
+use that value for indentation.
+The most useful scale indicators are
+.Sq m
+and
+.Sq n ,
+specifying the so-called
+.Em \&Em
+and
+.Em "En square" .
+This is approximately the width of the letters
+.Sq m
+and
+.Sq n
+respectively
+of the current font (for nroff output, both scale indicators give the same
+values).
+If
+.Ao string Ac
+isn't a numeric expression, it is tested whether it is an
+.Nm \-mdoc
+macro name, and the default offset value associated with this macro is used.
+Finally, if all tests fail,
+the width of
+.Ao string Ac
+(typeset with a fixed-width font) is taken as the offset.
+.It Fl compact
+Suppress insertion of vertical space before begin of display.
+.El
+.
+.It Li .Ed
+End display (takes no arguments).
+.El
+.
+.Ss "Lists and Columns"
+.
+There are several types of lists which may be initiated with the
+.Ql .Bl
+begin-list macro.
+Items within the list are specified with the
+.Ql .It
+item macro, and each list must end with the
+.Ql .El
+macro.
+Lists may be nested within themselves and within displays.
+The use of columns inside of lists or lists inside of columns is unproven.
+.Pp
+In addition, several list attributes may be specified such as the width of a
+tag, the list offset, and compactness (blank lines between items allowed or
+disallowed).
+Most of this document has been formatted with a tag style list
+.Pf ( Fl tag ) .
+.Pp
+It has the following syntax forms:
+.
+.Pp
+.Bd -ragged -compact
+.Bl -tag -width ".Li .Bl" -offset indent -compact
+.It Li .Bl Xo
+.Bro \-hang | \-ohang | \-tag | \-diag | \-inset Brc
+.Oo \-width Ao string Ac Oc
+.Oo \-offset Ao string Ac Oc Oo \-compact Oc Xc
+.It Li .Bl Xo
+.No \-column Oo \-offset Ao string Ac Oc
+.Ao string1 Ac Ao string2 Ac ... Xc
+.It Li .Bl Xo
+.Bro \-item | \-enum Oo \-nested Oc | \-bullet | \-hyphen | \-dash Brc
+.Oo \-offset Ao string Ac Oc Oo \-compact Oc Xc
+.El
+.Ed
+.Pp
+.
+And now a detailed description of the list types.
+.
+.Pp
+.Bl -tag -width ".Fl column" -compact
+.It Fl bullet
+A bullet list.
+.
+.Bd -literal -offset indent
+\&.Bl \-bullet \-offset indent \-compact
+\&.It
+Bullet one goes here.
+\&.It
+Bullet two here.
+\&.El
+.Ed
+.Pp
+.
+Produces:
+.
+.Pp
+.Bl -bullet -offset indent -compact
+.It
+Bullet one goes here.
+.It
+Bullet two here.
+.El
+.Pp
+.
+.It Fl dash No ( or Fl hyphen )
+A dash list.
+.
+.Bd -literal -offset indent
+\&.Bl \-dash \-offset indent \-compact
+\&.It
+Dash one goes here.
+\&.It
+Dash two here.
+\&.El
+.Ed
+.Pp
+.
+Produces:
+.
+.Pp
+.Bl -dash -offset indent -compact
+.It
+Dash one goes here.
+.It
+Dash two here.
+.El
+.Pp
+.
+.It Fl enum
+An enumerated list.
+.
+.Bd -literal -offset indent
+\&.Bl \-enum \-offset indent \-compact
+\&.It
+Item one goes here.
+\&.It
+And item two here.
+\&.El
+.Ed
+.Pp
+.
+The result:
+.
+.Pp
+.Bl -enum -offset indent -compact
+.It
+Item one goes here.
+.It
+And item two here.
+.El
+.Pp
+.
+If you want to nest enumerated lists, use the
+.Fl nested
+flag (starting with the second-level list):
+.
+.Bd -literal -offset indent
+\&.Bl \-enum \-offset indent \-compact
+\&.It
+Item one goes here
+\&.Bl \-enum \-nested \-compact
+\&.It
+Item two goes here.
+\&.It
+And item three here.
+\&.El
+\&.It
+And item four here.
+\&.El
+.Ed
+.Pp
+.
+Result:
+.
+.Pp
+.Bl -enum -offset indent -compact
+.It
+Item one goes here.
+.Bl -enum -nested -compact
+.It
+Item two goes here.
+.It
+And item three here.
+.El
+.It
+And item four here.
+.El
+.Pp
+.
+.It Fl item
+A list of type
+.Fl item
+without list markers.
+.
+.Bd -literal -offset indent
+\&.Bl \-item \-offset indent
+\&.It
+Item one goes here.
+Item one goes here.
+Item one goes here.
+\&.It
+Item two here.
+Item two here.
+Item two here.
+\&.El
+.Ed
+.Pp
+.
+Produces:
+.
+.Pp
+.Bl -item -offset indent
+.It
+Item one goes here.
+Item one goes here.
+Item one goes here.
+.It
+Item two here.
+Item two here.
+Item two here.
+.El
+.Pp
+.
+.It Fl tag
+A list with tags.
+Use
+.Fl width
+to specify the tag width.
+.
+.Pp
+.Bl -tag -width "PPID" -compact -offset indent
+.It SL
+sleep time of the process (seconds blocked)
+.It PAGEIN
+number of disk
+.Tn I/O Ns 's
+resulting from references by the process
+to pages not loaded in core.
+.It UID
+numerical user-id of process owner
+.It PPID
+numerical id of parent of process priority
+(non-positive when in non-interruptible wait)
+.El
+.Pp
+.
+The raw text:
+.
+.Bd -literal -offset indent
+\&.Bl \-tag \-width "PPID" \-compact \-offset indent
+\&.It SL
+sleep time of the process (seconds blocked)
+\&.It PAGEIN
+number of disk
+\&.Tn I/O Ns 's
+resulting from references by the process
+to pages not loaded in core.
+\&.It UID
+numerical user\-id of process owner
+\&.It PPID
+numerical id of parent of process priority
+(non\-positive when in non\-interruptible wait)
+\&.El
+.Ed
+.Pp
+.
+.It Fl diag
+Diag lists create section four diagnostic lists and are similar to inset
+lists except callable macros are ignored.
+The
+.Fl width
+flag is not meaningful in this context.
+.Pp
+Example:
+.
+.Bd -literal -offset indent
+\&.Bl \-diag
+\&.It You can't use Sy here.
+The message says all.
+\&.El
+.Ed
+.Pp
+.
+produces
+.
+.Bl -diag
+.It You can't use Sy here.
+The message says all.
+.El
+.Pp
+.
+.It Fl hang
+A list with hanging tags.
+.
+.Bl -hang -offset indent
+.It Em Hanged
+labels appear similar to tagged lists when the
+label is smaller than the label width.
+.It Em Longer hanged list labels
+blend into the paragraph unlike
+tagged paragraph labels.
+.El
+.Pp
+And the unformatted text which created it:
+.
+.Bd -literal -offset indent
+\&.Bl \-hang \-offset indent
+\&.It Em Hanged
+labels appear similar to tagged lists when the
+label is smaller than the label width.
+\&.It Em Longer hanged list labels
+blend into the paragraph unlike
+tagged paragraph labels.
+\&.El
+.Ed
+.Pp
+.
+.It Fl ohang
+Lists with overhanging tags do not use indentation for the items; tags are
+written to a separate line.
+.Pp
+.Bl -ohang -offset indent
+.It Sy SL
+sleep time of the process (seconds blocked)
+.It Sy PAGEIN
+number of disk
+.Tn I/O Ns 's
+resulting from references by the process
+to pages not loaded in core.
+.It Sy UID
+numerical user-id of process owner
+.It Sy PPID
+numerical id of parent of process priority
+(non-positive when in non-interruptible wait)
+.El
+.Pp
+.
+The raw text:
+.
+.Bd -literal -offset indent
+\&.Bl \-ohang \-offset indent
+\&.It Sy SL
+sleep time of the process (seconds blocked)
+\&.It Sy PAGEIN
+number of disk
+\&.Tn I/O Ns 's
+resulting from references by the process
+to pages not loaded in core.
+\&.It Sy UID
+numerical user\-id of process owner
+\&.It Sy PPID
+numerical id of parent of process priority
+(non\-positive when in non\-interruptible wait)
+\&.El
+.Ed
+.Pp
+.
+.It Fl inset
+Here is an example of inset labels:
+.Bl -inset -offset indent
+.It Em Tag
+The tagged list (also called a tagged paragraph)
+is the most common type of list used in the
+Berkeley manuals.
+Use a
+.Fl width
+attribute as described below.
+.It Em Diag
+Diag lists create section four diagnostic lists
+and are similar to inset lists except callable
+macros are ignored.
+.It Em Hang
+Hanged labels are a matter of taste.
+.It Em Ohang
+Overhanging labels are nice when space is constrained.
+.It Em Inset
+Inset labels are useful for controlling blocks of
+paragraphs and are valuable for converting
+.Nm \-mdoc
+manuals to other formats.
+.El
+.Pp
+Here is the source text which produced the above example:
+.
+.Bd -literal -offset indent
+\&.Bl \-inset \-offset indent
+\&.It Em Tag
+The tagged list (also called a tagged paragraph)
+is the most common type of list used in the
+Berkeley manuals.
+\&.It Em Diag
+Diag lists create section four diagnostic lists
+and are similar to inset lists except callable
+macros are ignored.
+\&.It Em Hang
+Hanged labels are a matter of taste.
+\&.It Em Ohang
+Overhanging labels are nice when space is constrained.
+\&.It Em Inset
+Inset labels are useful for controlling blocks of
+paragraphs and are valuable for converting
+\&.Nm \-mdoc
+manuals to other formats.
+\&.El
+.Ed
+.Pp
+.
+.It Fl column
+This list type generates multiple columns.
+The number of columns and the width of each column is determined by the
+arguments to the
+.Fl column
+list,
+.Aq Ar string1 ,
+.Aq Ar string2 ,
+etc.
+If
+.Aq Ar stringN
+starts with a
+.Ql .\&
+(dot) immediately followed by a valid
+.Nm \-mdoc
+macro name, interpret
+.Aq Ar stringN
+and use the width of the result.
+Otherwise, the width of
+.Aq Ar stringN
+(typeset with a fixed-width font) is taken as the
+.Ar N Ns th
+column width.
+.Pp
+Each
+.Ql .It
+argument is parsed to make a row, each column within the row is a separate
+argument separated by a tab or the
+.Ql .Ta
+macro.
+.Pp
+The table:
+.
+.Bl -column -offset indent ".Sy String" ".Sy Nroff" ".Sy Troff"
+.It Sy String Ta Sy Nroff Ta Sy Troff
+.It Li <= Ta <= Ta \*(<=
+.It Li >= Ta >= Ta \*(>=
+.El
+.Pp
+.
+was produced by:
+.
+.Bd -literal
+\&.Bl \-column \-offset indent ".Sy String" ".Sy Nroff" ".Sy Troff"
+\&.It Sy String Ta Sy Nroff Ta Sy Troff
+\&.It Li <= Ta <= Ta \e*(<=
+\&.It Li >= Ta >= Ta \e*(>=
+\&.El
+.Ed
+.Pp
+.
+Don't abuse this list type!
+For more complicated cases it might be far better and easier to use
+.Xr tbl 1 ,
+the table preprocessor.
+.El
+.Pp
+.
+Other keywords:
+.
+.Bl -tag -width ".Fl indent Ao Ar string Ac"
+.It Fl width Ao Ar string Ac
+If
+.Aq Ar string
+starts with a
+.Ql .\&
+(dot) immediately followed by a valid
+.Nm \-mdoc
+macro name, interpret
+.Aq Ar string
+and use the width of the result.
+Almost all lists in this document use this option.
+.Pp
+Example:
+.
+.Bd -literal -offset indent
+\&.Bl \-tag \-width ".Fl test Ao Ar string Ac"
+\&.It Fl test Ao Ar string Ac
+This is a longer sentence to show how the
+\&.Fl width
+flag works in combination with a tag list.
+\&.El
+.Ed
+.Pp
+.
+gives:
+.
+.Bl -tag -width ".Fl test Ao Ar string Ac"
+.It Fl test Ao Ar string Ac
+This is a longer sentence to show how the
+.Fl width
+flag works in combination with a tag list.
+.El
+.Pp
+.
+(Note that the current state of
+.Nm \-mdoc
+is saved before
+.Aq Ar string
+is interpreted; afterwards, all variables are restored again.
+However, boxes (used for enclosures) can't be saved in
+.Tn GNU
+.Xr troff 1 ;
+as a consequence, arguments must always be
+.Em balanced
+to avoid nasty errors.
+For example, do not write
+.Ql ".Ao Ar string"
+but
+.Ql ".Ao Ar string Xc"
+instead if you really need only an opening angle bracket.)
+.Pp
+Otherwise, if
+.Aq Ar string
+is a valid numeric expression
+.Em ( with a scale indicator other than
+.Sq Em u ) ,
+use that value for indentation.
+The most useful scale indicators are
+.Sq m
+and
+.Sq n ,
+specifying the so-called
+.Em \&Em
+and
+.Em "En square" .
+This is approximately the width of the letters
+.Sq m
+and
+.Sq n
+respectively
+of the current font (for nroff output, both scale indicators give the same
+values).
+If
+.Aq Ar string
+isn't a numeric expression, it is tested whether it is an
+.Nm \-mdoc
+macro name, and the default width value associated with this macro is used.
+Finally, if all tests fail,
+the width of
+.Aq Ar string
+(typeset with a fixed-width font) is taken as the width.
+.Pp
+If a width is not specified for the tag list type,
+.Sq 6n
+is used.
+.It Fl offset Ao Ar string Ac
+If
+.Aq Ar string
+is
+.Ar indent ,
+a default indent value (normally set to\~6n, similar to the value used in
+.Ql .Dl
+or
+.Ql .Bd )
+is used.
+If
+.Aq Ar string
+is a valid numeric expression instead
+.Pf ( Em with a scale indicator other than
+.Sq Em u ) ,
+use that value for indentation.
+The most useful scale indicators are
+.Sq m
+and
+.Sq n ,
+specifying the so-called
+.Em \&Em
+and
+.Em "En square" .
+This is approximately the width of the letters
+.Sq m
+and
+.Sq n
+respectively
+of the current font (for nroff output, both scale indicators give the same
+values).
+If
+.Aq Ar string
+isn't a numeric expression, it is tested whether it is an
+.Nm \-mdoc
+macro name, and the default offset value associated with this macro is used.
+Finally, if all tests fail,
+the width of
+.Aq Ar string
+(typeset with a fixed-width font) is taken as the offset.
+.It Fl compact
+Suppress insertion of vertical space before the list and between list items.
+.El
+.
+.
+.Sh "MISCELLANEOUS MACROS"
+.
+Here a list of the remaining macros which do not fit well into one of the
+above sections.
+We couldn't find real examples for the following macros:
+.Ql .Me
+and
+.Ql .Ot .
+They are documented here for completeness \- if you know how to use them
+properly please send a mail to
+.Mt groff@gnu.org
+(including an example).
+.
+.Bl -tag -width ".Li .Bt"
+.It Li .Bt
+prints
+.
+.Bd -ragged -offset indent
+.Bt
+.Ed
+.Pp
+It is neither callable nor parsed and takes no arguments.
+.
+.It Li .Fr
+.Pp
+.Dl Usage: .Fr Ao function return value Ac ...
+.Pp
+Don't use this macro.
+It allows a break right before the return value (usually a single digit)
+which is bad typographical behaviour.
+Use
+.Ql \e\[ti]
+to tie the return value to the previous word.
+.
+.It Li .Hf
+Use this macro to include a (header) file literally.
+It first prints
+.Ql File:
+followed by the file name, then the contents of
+.Ao file Ac .
+.Pp
+.Dl Usage: .Hf Ao file Ac
+.Pp
+It is neither callable nor parsed.
+.
+.It Li .Lk
+To be written.
+.
+.It Li .Me
+Exact usage unknown.
+The documentation in the
+.Nm \-mdoc
+source file describes it as a macro for
+.Dq "menu entries" .
+.Pp
+Its default width is 6n.
+.
+.It Li .Mt
+To be written.
+.
+.It Li .Ot
+Exact usage unknown.
+The documentation in the
+.Nm \-mdoc
+source file describes it as
+.Dq old function type (fortran) .
+.
+.It Li .Sm
+Activate (toggle) space mode.
+.Pp
+.Dl Usage: .Sm Oo on | off Oc ...
+.Pp
+If space mode is off, no spaces between macro arguments are inserted.
+If called without a parameter (or if the next parameter is neither
+.Ql on
+nor
+.Ql off ,
+.Ql .Sm
+toggles space mode.
+.
+.It Li .Ud
+prints
+.
+.Bd -ragged -offset indent
+.Ud
+.Ed
+.Pp
+It is neither callable nor parsed and takes no arguments.
+.El
+.
+.
+.Sh "PREDEFINED STRINGS"
+.
+The following strings are predefined:
+.Pp
+.TS
+lb lb lb lb
+l l l l.
+String Nroff   Troff   Meaning
+<=     <=      \*[<=]  less equal
+>=     >=      \*[>=]  greater equal
+Rq     ''      \*[Rq]  right double quote
+Lq     ``      \*[Lq]  left double quote
+ua     ^       \*[ua]  upwards arrow
+aa     \'      \*[aa]  acute accent
+ga     \`      \*[ga]  grave accent
+q      \&"     \*[q]   straight double quote
+Pi     pi      \*[Pi]  greek pi
+Ne     !=      \*[Ne]  not equal
+Le     <=      \*[Le]  less equal
+Ge     >=      \*[Ge]  greater equal
+Lt     <       \*[Lt]  less than
+Gt     >       \*[Gt]  greater than
+Pm     +\-     \*[Pm]  plus minus
+If     infinity        \*[If]  infinity
+Am     \*[Am]  \*[Am]  ampersand
+Na     \*[Na]  \*[Na]  not a number
+Ba     \*[Ba]  \*[Ba]  vertical bar
+.TE
+.Pp
+The names of the columns
+.Sy Nroff
+and
+.Sy Troff
+are a bit misleading;
+.Sy Nroff
+shows the
+.Tn ASCII
+representation, while
+.Sy Troff
+gives the best glyph form available.
+For example, a Unicode enabled
+.Tn TTY Ns - Ns
+device will have proper glyph representations for all strings, whereas the
+enhancement for a Latin1
+.Tn TTY Ns - Ns
+device is only the plus-minus sign.
+.Pp
+String names which consist of two characters can be written as
+.Ql \e*(xx ;
+string names which consist of one character can be written as
+.Ql \e*x .
+A generic syntax for a string name of any length is
+.Ql \e*[xxx]
+(this is a
+.Tn GNU
+.Xr troff 1
+extension).
+.
+.
+\#
+\#=====================================================================
+\#
+.Sh DIAGNOSTICS
+.
+The debugging macro
+.Ql .Db
+available in previous versions of
+.Nm \-mdoc
+has been removed since
+.Tn GNU
+.Xr troff 1
+provides better facilities to check parameters; additionally, many error and
+warning messages have been added to this macro package, making it both more
+robust and verbose.
+.Pp
+The only remaining debugging macro is
+.Ql .Rd
+which yields a register dump of all global registers and strings.
+A normal user will never need it.
+.
+.
+.Sh "FORMATTING WITH GROFF, TROFF, AND NROFF"
+.
+By default, the package inhibits page breaks, headers, and footers if
+displayed with a
+.Tn TTY
+device like
+.Sq latin1
+or
+.Sq unicode ,
+to make the manual more efficient for viewing on-line.
+This behaviour can be changed (e.g.\& to create a hardcopy of the
+.Tn TTY
+output) by setting the register
+.Ql cR
+to zero while calling
+.Xr groff 1 ,
+resulting in multiple pages instead of a single, very long page:
+.Pp
+.Dl groff \-Tlatin1 \-rcR=0 \-mdoc foo.man > foo.txt
+.Pp
+For double-sided printing, set register
+.Ql D
+to\~1:
+.Pp
+.Dl groff \-Tps \-rD1 \-mdoc foo.man > foo.ps
+.Pp
+To change the document font size to 11pt or 12pt, set register
+.Ql S
+accordingly:
+.Pp
+.Dl groff \-Tdvi \-rS11 \-mdoc foo.man > foo.dvi
+.Pp
+Register
+.Ql S
+is ignored for
+.Tn TTY
+devices.
+.Pp
+The line and title length can be changed by setting the registers
+.Ql LL
+and
+.Ql LT ,
+respectively:
+.Pp
+.Dl groff \-Tutf8 \-rLL=100n \-rLT=100n \-mdoc foo.man | less
+.Pp
+If not set, both registers default to 78n for TTY devices and 6.5i
+otherwise.
+.
+.
+.Sh FILES
+.
+.Bl -tag -width mdoc/doc-ditroff -compact
+.It Pa doc.tmac
+The main manual macro package.
+.It Pa mdoc.tmac
+A wrapper file to call
+.Pa doc.tmac .
+.It Pa mdoc/doc-common
+Common strings, definitions, stuff related typographic output.
+.It Pa mdoc/doc-nroff
+Definitions used for a
+.Tn TTY
+output device.
+.It Pa mdoc/doc-ditroff
+Definitions used for all other devices.
+.It Pa mdoc.local
+Local additions and customizations.
+.It Pa andoc.tmac
+Use this file if you don't know whether the
+.Nm \-mdoc
+or the
+.Nm \-man
+package should be used.
+Multiple man pages (in either format) can be handled.
+.El
+.
+.
+.Sh "SEE ALSO"
+.
+.Xr groff 1 ,
+.Xr man 1 ,
+.Xr troff 1 ,
+.Xr groff_man 7
+.
+.
+.Sh BUGS
+.
+Section 3f has not been added to the header routines.
+.Pp
+.Ql \&.Nm
+font should be changed in
+.Em NAME
+section.
+.Pp
+.Ql \&.Fn
+needs to have a check to prevent splitting up
+if the line length is too short.
+Occasionally it
+separates the last parenthesis, and sometimes
+looks ridiculous if a line is in fill mode.
+.Pp
+The list and display macros do not do any keeps
+and certainly should be able to.
+.\" Note what happens if the parameter list overlaps a newline
+.\" boundary.
+.\" to make sure a line boundary is crossed:
+.\" .Bd -literal
+.\" \&.Fn struct\e\ dictionarytable\e\ *dictionarylookup struct\e\ dictionarytable\e\ *tab[]
+.\" .Ed
+.\" .Pp
+.\" produces, nudge nudge,
+.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] ,
+.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] ,
+.\" nudge
+.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] .
+.\" .Pp
+.\" If double quotes are used, for example:
+.\" .Bd -literal
+.\" \&.Fn \*qstruct dictionarytable *dictionarylookup\*q \*qchar *h\*q \*qstruct dictionarytable *tab[]\*q
+.\" .Ed
+.\" .Pp
+.\" produces, nudge nudge,
+.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" ,
+.\" nudge
+.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" ,
+.\" nudge
+.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" .
+.\" .Pp
+.\" Not a pretty sight...
+.\" In a paragraph, a long parameter containing unpaddable spaces as
+.\" in the former example will cause
+.\" .Xr troff
+.\" to break the line and spread
+.\" the remaining words out.
+.\" The latter example will adjust nicely to
+.\" justified margins, but may break in between an argument and its
+.\" declaration.
+.\" In
+.\" .Xr nroff
+.\" the right margin adjustment is normally ragged and the problem is
+.\" not as severe.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/groff_mdoc.man b/tmac/groff_mdoc.man
deleted file mode 100644 (file)
index abba14e..0000000
+++ /dev/null
@@ -1,4299 +0,0 @@
-'\" t
-.\" groff_mdoc.man
-.\"
-.\"   A complete reference of the mdoc macro package for GNU troff.
-.\"
-.\" Based on NetBSD's mdoc.samples.7, version 1.21.
-.\"
-.\"
-.\"   Warning: You can't format this file with the old mdoc macros!
-.\"
-.\"
-.\" Copyright (C) 1990, 1993
-.\"     The Regents of the University of California.  All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms, with or without
-.\" modification, are permitted provided that the following conditions
-.\" are met:
-.\" 1. Redistributions of source code must retain the above copyright
-.\"    notice, this list of conditions and the following disclaimer.
-.\" 2. Redistributions in binary form must reproduce the above copyright
-.\"    notice, this list of conditions and the following disclaimer in the
-.\"    documentation and/or other materials provided with the distribution.
-.\" 3. [Deleted.  See
-.\"     ftp://ftp.cs.berkeley.edu/pub/4bsd/README.Impt.License.Change]
-.\" 4. Neither the name of the University nor the names of its contributors
-.\"    may be used to endorse or promote products derived from this software
-.\"    without specific prior written permission.
-.\"
-.\" THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND
-.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
-.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
-.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE
-.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
-.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
-.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
-.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
-.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
-.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
-.\" SUCH DAMAGE.
-.\"
-.\"     @(#)mdoc.samples.7 8.2 (Berkeley) 12/30/93
-.\"
-.\" This reference invokes every macro in the package several
-.\" times and is guaranteed to give a worst case performance
-.\" for an already extremely slow package.
-.\"
-.
-.Dd November 2, 2010
-.Dt GROFF_MDOC 7
-.Os
-.
-.
-.Sh NAME
-.
-.Nm groff_mdoc
-.Nd reference for groff's mdoc implementation
-.
-.
-.Sh SYNOPSIS
-.
-.Nm groff Fl m Ns Cm doc Ar
-.
-.
-.Sh DESCRIPTION
-.
-A complete reference for writing
-.Ux
-manual pages with the
-.Nm \-mdoc
-macro package; a
-.Em content Ns -based
-and
-.Em domain Ns -based
-formatting package for
-.Tn GNU
-.Xr troff 1 .
-Its predecessor, the
-.Xr \-man 7
-package, addressed page layout leaving the manipulation of fonts and other
-typesetting details to the individual author.
-In
-.Nm \-mdoc ,
-page layout macros make up the
-.Em "page structure domain"
-which consists of macros for titles, section headers, displays and lists
-\(en essentially items which affect the physical position of text on a
-formatted page.
-In addition to the page structure domain, there are two more domains, the
-.Em manual
-domain and the
-.Em general
-text domain.
-The general text domain is defined as macros which perform tasks such as
-quoting or emphasizing pieces of text.
-The manual domain is defined as macros that are a subset of the day to day
-informal language used to describe commands, routines and related
-.Ux
-files.
-Macros in the manual domain handle command names, command line arguments and
-options, function names, function parameters, pathnames, variables, cross
-references to other manual pages, and so on.
-These domain items have value for both the author and the future user of the
-manual page.
-Hopefully, the consistency gained across the manual set will provide easier
-translation to future documentation tools.
-.Pp
-Throughout the
-.Ux
-manual pages, a manual entry is simply referred to as a man page, regardless
-of actual length and without sexist intention.
-.
-.
-.Sh "GETTING STARTED"
-.
-The material presented in the remainder of this document is outlined
-as follows:
-.
-.Bl -enum -width 3n -offset indent
-.  It
-.  Tn "TROFF IDIOSYNCRASIES"
-.
-.  Bl -tag -width 2n -compact
-.    It "Macro Usage"
-.    It "Passing Space Characters in an Argument"
-.    It "Trailing Blank Space Characters"
-.    It "Escaping Special Characters"
-.    It "Other Possible Pitfalls"
-.  El
-.
-.  It
-.  Tn "A MANUAL PAGE TEMPLATE"
-.
-.  It
-.  Tn "CONVENTIONS"
-.
-.  It
-.  Tn "TITLE MACROS"
-.
-.  It
-.  Tn "INTRODUCTION OF MANUAL AND GENERAL TEXT DOMAINS"
-.
-.  Bl -tag -width 2n -compact
-.    It "What's in a Name" Ns ...
-.    It "General Syntax"
-.  El
-.
-.  It
-.  Tn "MANUAL DOMAIN"
-.
-.  Bl -tag -width 2n -compact
-.    It "Addresses"
-.    It "Author Name"
-.    It "Arguments"
-.    It "Configuration Declarations (Section Four Only)"
-.    It "Command Modifiers"
-.    It "Defined Variables"
-.    It "Errno's"
-.    It "Environment Variables"
-.    It "Flags"
-.    It "Function Declarations"
-.    It "Function Types"
-.    It "Functions (Library Routines)"
-.    It "Function Arguments"
-.    It "Return Values"
-.    It "Exit Status"
-.    \" .It "Header File (including source code)"
-.    It "Interactive Commands"
-.    It "Library Names"
-.    It "Literals"
-.    It "Names"
-.    It "Options"
-.    It "Pathnames"
-.    It "Standards"
-.    It "Variable Types"
-.    It "Variables"
-.    It "Manual Page Cross References"
-.  El
-.
-.  It
-.  Tn "GENERAL TEXT DOMAIN"
-.
-.  Bl -tag -width 2n -compact
-.    It "AT&T Macro"
-.    It "BSD Macro"
-.    It "NetBSD Macro"
-.    It "FreeBSD Macro"
-.    It "DragonFly Macro"
-.    It "OpenBSD Macro"
-.    It "BSD/OS Macro"
-.    It "UNIX Macro"
-.    It "Emphasis Macro"
-.    It "Font Mode"
-.    It "Enclosure and Quoting Macros"
-.    It "No-Op or Normal Text Macro"
-.    It "No-Space Macro"
-.    It "Section Cross References"
-.    It "Symbolics"
-.    It "Mathematical Symbols"
-.    It "References and Citations"
-.    It "Trade Names (or Acronyms and Type Names)"
-.    It "Extended Arguments"
-.  El
-.
-.  It
-.  Tn "PAGE STRUCTURE DOMAIN"
-.
-.  Bl -tag -width 2n -compact
-.    It "Section Headers"
-.    It "Subsection Headers"
-.    It "Paragraphs and Line Spacing"
-.    It "Keeps"
-.    It "Examples and Displays"
-.    It "Lists and Columns"
-.  El
-.
-.  It
-.  Tn "MISCELLANEOUS MACROS"
-.
-.  It
-.  Tn "PREDEFINED STRINGS"
-.
-.  It
-.  Tn "DIAGNOSTICS"
-.
-.  It
-.  Tn "FORMATTING WITH GROFF, TROFF, AND NROFF"
-.
-.  It
-.  Tn "FILES"
-.
-.  It
-.  Tn "SEE ALSO"
-.
-.  It
-.  Tn "BUGS"
-.El
-.
-.\" XXX
-.if t \
-.  ne 7
-.
-.
-.Sh "TROFF IDIOSYNCRASIES"
-.
-The
-.Nm \-mdoc
-package attempts to simplify the process of writing a man page.
-Theoretically, one should not have to learn the tricky details of
-.Tn GNU
-.Xr troff 1
-to use
-.Nm \-mdoc ;
-however, there are a few limitations which are unavoidable and best gotten
-out of the way.
-And, too, be forewarned, this package is
-.Em not
-fast.
-.
-.Ss "Macro Usage"
-.
-As in
-.Tn GNU
-.Xr troff 1 ,
-a macro is called by placing a
-.Ql .\&
-(dot character) at the beginning of a line followed by the two-character
-(or three-character) name for the macro.
-There can be space or tab characters between the dot and the macro name.
-Arguments may follow the macro separated by spaces (but
-.Em no
-tabs).
-It is the dot character at the beginning of the line which causes
-.Tn GNU
-.Xr troff 1
-to interpret the next two (or more) characters as a macro name.
-A single starting dot followed by nothing is ignored.
-To place a
-.Ql .\&
-(dot character) at the beginning of an input line in some context other than
-a macro invocation, precede the
-.Ql .\&
-(dot) with the
-.Ql \e&
-escape sequence which translates literally to a zero-width space, and is
-never displayed in the output.
-.Pp
-In general,
-.Tn GNU
-.Xr troff 1
-macros accept an unlimited number of arguments (contrary to other versions
-of troff which can't handle more than nine arguments).
-In limited cases, arguments may be continued or extended on the next
-line (See
-.Sx Extended Arguments
-below).
-Almost all macros handle quoted arguments (see
-.Sx Passing Space Characters in an Argument
-below).
-.Pp
-Most of the
-.Nm \-mdoc
-general text domain and manual domain macros are special in that their
-argument lists are
-.Em parsed
-for callable macro names.
-This means an argument on the argument list which matches a general text or
-manual domain macro name (and which is defined to be callable) will be
-executed or called when it is processed.
-In this case the argument, although the name of a macro, is not preceded by
-a
-.Ql .\&
-(dot).
-This makes it possible to nest macros; for example the option macro,
-.Ql .Op ,
-may
-.Em call
-the flag and argument macros,
-.Ql \&Fl
-and
-.Ql \&Ar ,
-to specify an optional flag with an argument:
-.
-.Bl -tag -width ".Op Fl s Ar bytes" -offset indent
-.It Op Fl s Ar bytes
-is produced by
-.Ql ".Op Fl s Ar bytes"
-.El
-.
-.Pp
-To prevent a string from being interpreted as a macro name, precede the
-string with the escape sequence
-.Ql \e& :
-.
-.Bl -tag -width ".Op \&Fl s \&Ar bytes" -offset indent
-.It Op \&Fl s \&Ar bytes
-is produced by
-.Ql ".Op \e&Fl s \e&Ar bytes"
-.El
-.
-.Pp
-Here the strings
-.Ql \&Fl
-and
-.Ql \&Ar
-are not interpreted as macros.
-Macros whose argument lists are parsed for callable arguments are referred
-to as
-.Em parsed
-and macros which may be called from an argument list are referred to as
-.Em callable
-throughout this document.
-This is a technical
-.Em faux pas
-as almost all of the macros in
-.Nm \-mdoc
-are parsed, but as it was cumbersome to constantly refer to macros as
-being callable and being able to call other macros, the term parsed
-has been used.
-.
-.Pp
-In the following, we call an
-.Nm \-mdoc
-macro which starts a line (with a leading dot) a
-.Em command
-if this distinction is necessary.
-.
-.Ss "Passing Space Characters in an Argument"
-.
-Sometimes it is desirable to give as an argument a string containing one or
-more blank space characters, say, to specify arguments to commands which
-expect particular arrangement of items in the argument list.
-Additionally, it makes
-.Nm \-mdoc
-working faster.
-For example, the function command
-.Ql .Fn
-expects the first argument to be the name of a function and any remaining
-arguments to be function parameters.
-As
-.Tn ANSI\~C
-stipulates the declaration of function parameters in the parenthesized
-parameter list, each parameter is guaranteed to be at minimum a two word
-string.
-For example,
-.Fa int foo .
-.Pp
-There are two possible ways to pass an argument which contains
-an embedded space.
-One way of passing a string containing blank spaces is to use the hard or
-unpaddable space character
-.Ql \e\  ,
-that is, a blank space preceded by the escape character
-.Ql \e .
-This method may be used with any macro but has the side effect of
-interfering with the adjustment of text over the length of a line.
-.Xr Troff
-sees the hard space as if it were any other printable character and cannot
-split the string into blank or newline separated pieces as one would expect.
-This method is useful for strings which are not expected to overlap a line
-boundary.
-An alternative is to use
-.Ql \e\[ti] ,
-a paddable (i.e.\& stretchable), unbreakable space (this is a
-.Tn GNU
-.Xr troff 1
-extension).
-The second method is to enclose the string with double quotes.
-.Pp
-For example:
-.
-.Bl -tag -width ".Fn fetch char\ *str" -offset indent
-.It Fn fetch char\ *str
-is created by
-.Ql ".Fn fetch char\e *str"
-.It Fn fetch "char *str"
-can also be created by
-.Ql ".Fn fetch \*[q]char *str\*[q]"
-.El
-.
-.Pp
-If the
-.Ql \e
-before the space in the first example
-or double quotes in the second example
-were omitted,
-.Ql .Fn
-would see three arguments, and the result would be:
-.Pp
-.Dl Fn fetch char *str
-.Pp
-.\" For an example of what happens when the parameter list overlaps a newline
-.\" boundary, see the
-.\" .Sx BUGS
-.\" section.
-.
-.Ss "Trailing Blank Space Characters"
-.
-.Xr Troff
-can be confused by blank space characters at the end of a line.
-It is a wise preventive measure to globally remove all blank spaces
-from
-.Ao blank-space Ac Ns Ao end-of-line Ac
-character sequences.
-Should the need arise to use a blank character at the end of a line, it
-may be forced with an unpaddable space and the
-.Ql \e&
-escape character.
-For example,
-.Ql string\e\ \e& .
-.
-.Ss "Escaping Special Characters"
-.
-Special characters like the newline character
-.Ql \en
-are handled by replacing the
-.Ql \e
-with
-.Ql \ee
-(e.g.\&
-.Ql \een )
-to preserve the backslash.
-.
-.Ss "Other Possible Pitfalls"
-.
-A warning is emitted when an empty input line is found outside of displays
-(see below).
-Use
-.Ql .sp
-instead.
-(Well, it is even better to use
-.Nm \-mdoc
-macros to avoid the usage of low-level commands.)
-.Pp
-Leading spaces will cause a break and are output directly.
-Avoid this behaviour if possible.
-Similarly, do not use more than one space character between words in an
-ordinary text line; contrary to other text formatters, they are
-.Em not
-replaced with a single space.
-.Pp
-You can't pass
-.Ql \*[q]
-directly as an argument.
-Use
-.Ql \e*[q]
-(or
-.Ql \e*q )
-instead.
-.Pp
-By default,
-.Xr troff 1
-inserts two space characters after a punctuation mark closing a sentence;
-characters like
-.Ql \&)
-or
-.Ql \&'
-are treated transparently, not influencing the sentence-ending behaviour.
-To change this, insert
-.Ql \e&
-before or after the dot:
-.
-.Bd -literal -offset indent
-The
-\&.Ql .
-character.
-\&.Pp
-The
-\&.Ql \e&.
-character.
-\&.Pp
-\&.No test .
-test
-\&.Pp
-\&.No test.
-test
-.Ed
-.Pp
-.
-gives
-.
-.Bd -filled -offset indent
-The
-.Ql .
-character
-.Pp
-The
-.Ql \&.
-character.
-.Pp
-.No test .
-test
-.Pp
-.No test.
-test
-.Ed
-.Pp
-.
-As can be seen in the first and third line,
-.Nm \-mdoc
-handles punctuation characters specially in macro arguments.
-This will be explained in section
-.Sx General Syntax
-below.
-In the same way, you have to protect trailing full stops of abbreviations
-with a trailing zero-width space:
-.Ql e.g.\e& .
-.Pp
-A comment in the source file of a man page can be either started with
-.Ql .\e"
-on a single line,
-.Ql \e"
-after some input, or
-.Ql \e#
-anywhere (the latter is a
-.Tn GNU
-.Xr troff 1
-extension); the rest of such a line is ignored.
-.
-.
-.Sh "A MANUAL PAGE TEMPLATE"
-.
-The body of a man page is easily constructed from a basic template:
-.
-.Bd -literal -offset indent
-\&.\e" The following commands are required for all man pages.
-\&.Dd Month day, year
-\&.Dt DOCUMENT_TITLE [section number] [architecture/volume]
-\&.Os [OPERATING_SYSTEM] [version/release]
-\&.Sh NAME
-\&.Nm name
-\&.Nd one line description of name
-\&.\e" This next command is for sections 2 and 3 only.
-\&.\e" .Sh LIBRARY
-\&.Sh SYNOPSIS
-\&.Sh DESCRIPTION
-\&.\e" The following commands should be uncommented and
-\&.\e" used where appropriate.
-\&.\e" .Sh IMPLEMENTATION NOTES
-\&.\e" This next command is for sections 2, 3, and 9 only
-\&.\e"     (function return values).
-\&.\e" .Sh RETURN VALUES
-\&.\e" This next command is for sections 1, 6, 7, and 8 only.
-\&.\e" .Sh ENVIRONMENT
-\&.\e" .Sh FILES
-\&.\e" This next command is for sections 1, 6, and 8 only
-\&.\e"     (command return values to the shell).
-\&.\e" .Sh EXIT STATUS
-\&.\e" .Sh EXAMPLES
-\&.\e" This next command is for sections 1, 4, 6, 7, 8, and 9 only
-\&.\e"     (fprintf/stderr type diagnostics).
-\&.\e" .Sh DIAGNOSTICS
-\&.\e" .Sh COMPATIBILITY
-\&.\e" This next command is for sections 2, 3, 4, and 9 only
-\&.\e"     (settings of the errno variable).
-\&.\e" .Sh ERRORS
-\&.\e" .Sh SEE ALSO
-\&.\e" .Sh STANDARDS
-\&.\e" .Sh HISTORY
-\&.\e" .Sh AUTHORS
-\&.\e" .Sh CAVEATS
-\&.\e" .Sh BUGS
-.Ed
-.Pp
-.
-The first items in the template are the commands
-.Ql .Dd ,
-.Ql .Dt ,
-and
-.Ql .Os ;
-the document date, the operating system the man page or subject source is
-developed or modified for, and the man page title (in
-.Em upper case )
-along with the section of the manual the page belongs in.
-These commands identify the page and are discussed below in
-.Sx TITLE MACROS .
-.Pp
-The remaining items in the template are section headers
-.Pf ( Li .Sh ) ;
-of which
-.Em NAME ,
-.Em SYNOPSIS ,
-and
-.Em DESCRIPTION
-are mandatory.
-The headers are discussed in
-.Sx "PAGE STRUCTURE DOMAIN" ,
-after presentation of
-.Sx "MANUAL DOMAIN" .
-Several content macros are used to demonstrate page layout macros; reading
-about content macros before page layout macros is recommended.
-.
-.
-.Sh CONVENTIONS
-.
-In the description of all macros below, optional arguments are put into
-brackets.
-An ellipsis
-.Pf ( Sq ... )
-represents zero or more additional arguments.
-Alternative values for a parameter are separated with
-.Ql | .
-If there are alternative values for a mandatory parameter, braces are used
-(together with
-.Ql | )
-to enclose the value set.
-Meta-variables are specified within angles.
-.Pp
-Example:
-.
-.Bl -tag -width 6n -offset indent
-.It Li .Xx Xo
-.Aq foo
-.Brq bar1 | bar2
-.Op \-test1 Op \-test2 | \-test3
-.No ...
-.Xc
-.El
-.
-.Pp
-Except stated explicitly, all macros are parsed and callable.
-.Pp
-Note that a macro takes effect up to the next nested macro.
-For example,
-.Ql ".Ic foo Aq bar"
-doesn't produce
-.Sq Ic "foo <bar>"
-but
-.Sq Ic foo Aq bar .
-Consequently, a warning message is emitted for most commands if the first
-argument is a macro itself since it cancels the effect of the calling
-command completely.
-Another consequence is that quoting macros never insert literal quotes;
-.Sq Ic "foo <bar>"
-has been produced by
-.Ql ".Ic \*[q]foo <bar>\*[q]" .
-.Pp
-Most macros have a default width value which can be used to specify a label
-width
-.Pf ( Fl width )
-or offset
-.Pf ( Fl offset )
-for the
-.Ql .Bl
-and
-.Ql .Bd
-macros.
-It is recommended not to use this rather obscure feature to avoid
-dependencies on local modifications of the
-.Nm \-mdoc
-package.
-.
-.
-.Sh "TITLE MACROS"
-.
-The title macros are part of the page structure domain but are presented
-first and separately for someone who wishes to start writing a man page
-yesterday.
-Three header macros designate the document title or manual page title, the
-operating system, and the date of authorship.
-These macros are called once at the very beginning of the document and are
-used to construct headers and footers only.
-.
-.Bl -tag -width 6n
-.It Li .Dt Xo
-.Op Aq document title
-.Op Aq section number
-.Op Aq volume
-.Xc
-The document title is the subject of the man page and must be in
-.Tn CAPITALS
-due to troff limitations.
-If omitted,
-.Sq Tn UNTITLED
-is used.
-The section number may be a number in the range
-.No 1,\~ Ns ... Ns ,\~9
-or
-.Ql unass ,
-.Ql draft ,
-or
-.Ql paper .
-If it is specified, and no volume name is given, a default volume name is
-used.
-.
-.Pp
-Under
-.Tn \*[operating-system] ,
-the following sections are defined:
-.Pp
-.TS
-l l l.
-1      \*[volume-operating-system] \*[volume-ds-1]
-2      \*[volume-operating-system] \*[volume-ds-2]
-3      \*[volume-operating-system] \*[volume-ds-3]
-4      \*[volume-operating-system] \*[volume-ds-4]
-5      \*[volume-operating-system] \*[volume-ds-5]
-6      \*[volume-operating-system] \*[volume-ds-6]
-7      \*[volume-operating-system] \*[volume-ds-7]
-8      \*[volume-operating-system] \*[volume-ds-8]
-9      \*[volume-operating-system] \*[volume-ds-9]
-.TE
-.Pp
-.
-A volume name may be arbitrary or one of the following:
-.
-.Pp
-.TS
-l l.
-USD    \*[volume-ds-USD]
-PS1    \*[volume-ds-PS1]
-AMD    \*[volume-ds-AMD]
-SMM    \*[volume-ds-SMM]
-URM    \*[volume-ds-URM]
-PRM    \*[volume-ds-PRM]
-KM     \*[volume-ds-KM]
-IND    \*[volume-ds-IND]
-LOCAL  \*[volume-ds-LOCAL]
-CON    \*[volume-ds-CON]
-.TE
-.Pp
-.
-For compatibility,
-.Ql MMI
-can be used for
-.Ql IND ,
-and
-.Ql LOC
-for
-.Ql LOCAL .
-Values from the previous table will specify a new volume name.
-If the third parameter is a keyword designating a computer architecture,
-its value is prepended to the default volume name as specified by the
-second parameter.
-By default, the following architecture keywords are defined:
-.
-\# we use `No' to avoid hyphenation
-.Bd -ragged -offset indent
-.No acorn26 , acorn32 , algor , alpha , amd64 , amiga , amigappc ,
-.No arc , arm , arm26 , arm32 , armish , atari , aviion ,
-.No beagle , bebox , cats , cesfic , cobalt , dreamcast ,
-.No emips , evbarm , evbmips , evbppc , evbsh3 , ews4800mips ,
-.No hp300 , hp700 , hpcarm , hpcmips , hpcsh , hppa , hppa64 ,
-.No i386 , ia64 , ibmnws , iyonix , landisk , loongson , luna68k , luna88k ,
-.No m68k , mac68k , macppc , mips , mips64 , mipsco , mmeye ,
-.No mvme68k , mvme88k , mvmeppc , netwinder , news68k , newsmips , next68k ,
-.No ofppc , palm , pc532 , playstation2 , pmax , pmppc , powerpc , prep ,
-.No rs6000 , sandpoint , sbmips , sgi , sgimips , sh3 , shark ,
-.No socppc , solbourne , sparc , sparc64 , sun2 , sun3 ,
-.No tahoe , vax , x68k , x86_64 , xen , zaurus
-.Ed
-.Pp
-.
-If the section number is neither a numeric expression in the range 1 to\~9
-nor one of the above described keywords, the third parameter is used
-verbatim as the volume name.
-.Pp
-In the following examples, the left (which is identical to the right) and
-the middle part of the manual page header strings are shown.
-Note how
-.Ql \e&
-prevents the digit\~7 from being a valid numeric expression.
-.
-.Bd -ragged
-.Bl -tag -width ".Li .Dt\ FOO\ 2\ i386" -compact -offset indent
-.It Li ".Dt FOO 7"
-.Ql FOO(7)
-.Ql \*[volume-operating-system] \*[volume-ds-7]
-.It Li ".Dt FOO 7 bar"
-.Ql FOO(7)
-.Ql \*[volume-operating-system] \*[volume-ds-7]
-.It Li ".Dt FOO \e&7 bar"
-.Ql FOO(7)
-.Ql bar
-.It Li ".Dt FOO 2 i386"
-.Ql FOO(2)
-.Ql \*[volume-operating-system]/\*[volume-as-i386] \*[volume-ds-2]
-.It Li ".Dt FOO \*[q]\*[q] bar"
-.Ql FOO
-.Ql bar
-.El
-.Ed
-.Pp
-.
-Local, OS-specific additions might be found in the file
-.Pa mdoc.local ;
-look for strings named
-.Ql volume\-ds\-XXX
-(for the former type) and
-.Ql volume\-as\-XXX
-(for the latter type);
-.Ql XXX
-then denotes the keyword to be used with the
-.Ql .Dt
-macro.
-.Pp
-This macro is neither callable nor parsed.
-.
-.It Li .Os Xo
-.Op Aq operating system
-.Op Aq release
-.Xc
-If the first parameter is empty,
-the default
-.Sq Tn "\*[operating-system]"
-is used.
-This may be overridden in the local configuration file,
-.Pa mdoc.local .
-In general, the name of the operating system should be the common acronym,
-e.g.\&
-.Tn BSD
-or
-.Tn ATT .
-The release should be the standard release nomenclature for the system
-specified.
-In the following table, the possible second arguments for some predefined
-operating systems are listed.
-Similar to
-.Ql .Dt ,
-local additions might be defined in
-.Pa mdoc.local ;
-look for strings named
-.Ql operating\-system\-XXX\-YYY ,
-where
-.Ql XXX
-is the acronym for the operating system and
-.Ql YYY
-the release ID.
-.
-.Bd -ragged -compact
-.Bl -tag -width ".No DragonFly" -offset indent
-.It ATT
-7th, 7, III, 3, V, V.2, V.3, V.4
-.It BSD
-3, 4, 4.1, 4.2, 4.3, 4.3t, 4.3T, 4.3r, 4.3R, 4.4
-.It NetBSD
-0.8, 0.8a, 0.9, 0.9a, 1.0, 1.0a, 1.1, 1.2, 1.2a, 1.2b, 1.2c, 1.2d, 1.2e,
-1.3, 1.3a, 1.4, 1.4.1, 1.4.2, 1.4.3, 1.5, 1.5.1, 1.5.2, 1.5.3, 1.6, 1.6.1,
-1.6.2, 1.6.3, 2.0, 2.0.1, 2.0.2, 2.0.3, 2.1, 3.0, 3.0.1, 3.0.2, 3.0.3,
-3.1, 3.1.1, 4.0, 4.0.1, 5.0, 5.0.1, 5.0.2, 5.1, 5.1.2, 5.1.3, 5.1.4,
-5.2, 5.2.1, 5.2.2, 6.0, 6.0.1, 6.0.2, 6.0.3, 6.0.4, 6.0.5, 6.1, 6.1.1,
-6.1.2, 6.1.3, 6.1.4
-.It FreeBSD
-1.0, 1.1, 1.1.5, 1.1.5.1, 2.0, 2.0.5, 2.1, 2.1.5, 2.1.6, 2.1.7, 2.2, 2.2.1,
-2.2.2, 2.2.5, 2.2.6, 2.2.7, 2.2.8, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 4.0, 4.1,
-4.1.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.6.2, 4.7, 4.8, 4.9, 4.10, 4.11, 5.0, 5.1,
-5.2, 5.2.1, 5.3, 5.4, 5.5, 6.0, 6.1, 6.2, 6.3, 6.4, 7.0, 7.1, 7.2, 7.3, 7.4,
-8.0, 8.1, 8.2, 8.3, 8.4, 9.0, 9.1, 9.2, 9.3, 10.0
-.It OpenBSD
-2.0, 2.1, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 3.0, 3.1, 3.2, 3.3, 3.4,
-3.5, 3.6, 3.7, 3.8, 3.9, 4.0, 4.1, 4.2, 4.3, 4.4, 4.5, 4.6, 4.7, 4.8, 4.9,
-5.0, 5.1, 5.2, 5.3, 5.4, 5.5, 5.6
-.It DragonFly
-1.0, 1.1, 1.2, 1.3, 1.4, 1.5, 1.6, 1.8, 1.8.1, 1.9, 1.10, 1.12, 1.12.2,
-1.13, 2.0, 2.2, 2.3, 2.4, 2.5, 2.6, 2.7, 2.8, 2.9, 2.9.1, 2.10, 2.10.1,
-2.11, 2.12, 2.13, 3.0, 3.1, 3.2, 3.3, 3.4, 3.5, 3.6, 3.7, 3.8
-.It Darwin
-8.0.0, 8.1.0, 8.2.0, 8.3.0, 8.4.0, 8.5.0, 8.6.0, 8.7.0, 8.8.0, 8.9.0,
-8.10.0, 8.11.0, 9.0.0, 9.1.0, 9.2.0, 9.3.0, 9.4.0, 9.5.0, 9.6.0, 9.7.0,
-9.8.0, 10.1.0, 10.2.0, 10.3.0, 10.4.0, 10.5.0, 10.6.0, 10.7.0, 10.8.0,
-11.0.0, 11.1.0, 11.2.0, 11.3.0, 11.4.0, 11.5.0, 12.0.0, 12.1.0, 12.2.0,
-13.0.0, 13.1.0, 13.2.0, 13.3.0, 13.4.0, 14.0.0
-.El
-.Ed
-.Pp
-.
-For
-.Tn ATT ,
-an unknown second parameter will be replaced with the string
-.Tn UNIX ;
-for the other predefined acronyms it will be ignored and a warning message
-emitted.
-Unrecognized arguments are displayed as given in the page footer.
-For instance, a typical footer might be:
-.Pp
-.Dl .Os BSD 4.3
-.Pp
-giving
-.Ql 4.3\~Berkeley Distribution ,
-or for a locally produced set
-.Pp
-.Dl .Os CS Department
-.Pp
-which will produce
-.Ql CS\~Department .
-.Pp
-If the
-.Ql .Os
-macro is not present, the bottom left corner of the manual page will be
-ugly.
-.Pp
-This macro is neither callable nor parsed.
-.
-.It Li .Dd Oo
-.Aq month
-.Aq day ,
-.Aq year
-.Oc
-If
-.Ql Dd
-has no arguments,
-.Ql Epoch
-is used for the date string.
-If it has exactly three arguments, they are concatenated, separated with
-unbreakable space:
-.Pp
-.Dl .Dd January 25, 2001
-.Pp
-The month's name shall not be abbreviated.
-.Pp
-With any other number of arguments, the current date is used, ignoring
-the parameters.
-.Pp
-As a special exception, the format
-.Bd -filled -offset indent
-.Li .Dd $Mdocdate:
-.Aq month
-.Aq day
-.Aq year
-.Li $
-.Ed
-.Pp
-is also recognized.
-It is used in
-.Ox
-manuals to automatically insert the current date when committing.
-.Pp
-This macro is neither callable nor parsed.
-.El
-.
-.
-.Sh "INTRODUCTION OF MANUAL AND GENERAL TEXT DOMAINS"
-.
-.Ss "What's in a Name" Ns ...
-.
-The manual domain macro names are derived from the day to day informal
-language used to describe commands, subroutines and related files.
-Slightly different variations of this language are used to describe the
-three different aspects of writing a man page.
-First, there is the description of
-.Nm \-mdoc
-macro command usage.
-Second is the description of a
-.Ux
-command
-.Em with
-.Nm \-mdoc
-macros, and third, the description of a command to a user in the verbal
-sense; that is, discussion of a command in the text of a man page.
-.Pp
-In the first case,
-.Xr troff 1
-macros are themselves a type of command; the general syntax for a troff
-command is:
-.
-.Bd -filled -offset indent
-.Li ".Xx argument1 argument2" ...
-.Ed
-.Pp
-.
-.Ql .Xx
-is a macro command, and anything following it are arguments to
-be processed.
-In the second case, the description of a
-.Ux
-command using the content macros is a bit more involved; a typical
-.Sx SYNOPSIS
-command line might be displayed as:
-.
-.Bd -filled -offset indent
-.Nm filter
-.Op Fl flag
-.Ao Ar infile Ac Ao Ar outfile Ac
-.Ed
-.Pp
-.
-Here,
-.Nm filter
-is the command name and the
-bracketed string
-.Fl flag
-is a
-.Em flag
-argument designated as optional by the option brackets.
-In
-.Nm \-mdoc
-terms,
-.Ao Ar infile Ac
-and
-.Ao Ar outfile Ac
-are called
-.Em meta arguments ;
-in this example, the user has to replace the meta expressions given in angle
-brackets with real file names.
-Note that in this document meta arguments are used to describe
-.Nm \-mdoc
-commands; in most man pages, meta variables are not specifically written
-with angle brackets.
-The macros which formatted the above example:
-.
-.Bd -literal -offset indent
-\&.Nm filter
-\&.Op Fl flag
-\&.Ao Ar infile Ac Ao Ar outfile Ac
-.Ed
-.Pp
-.
-In the third case, discussion of commands and command syntax includes both
-examples above, but may add more detail.
-The arguments
-.Ao Ar infile Ac
-and
-.Ao Ar outfile Ac
-from the example above might be referred to as
-.Em operands
-or
-.Em file arguments .
-Some command line argument lists are quite long:
-.
-.Bd -ragged
-.Bl -tag -width ".Nm make" -offset indent -compact
-.It Nm make
-.Op Fl eiknqrstv
-.Op Fl D Ar variable
-.Op Fl d Ar flags
-.Op Fl f Ar makefile
-.Op Fl I Ar directory
-.Op Fl j Ar max_jobs
-.Op Ar variable Ns = Ns Ar value
-.Bk
-.Op Ar target ...
-.Ek
-.El
-.Ed
-.Pp
-.
-Here one might talk about the command
-.Nm make
-and qualify the argument,
-.Ar makefile ,
-as an argument to the flag,
-.Fl f ,
-or discuss the optional file operand
-.Ar target .
-In the verbal context, such detail can prevent confusion, however the
-.Nm \-mdoc
-package does not have a macro for an argument
-.Em to
-a flag.
-Instead the
-.Ql \&Ar
-argument macro is used for an operand or file argument like
-.Ar target
-as well as an argument to a flag like
-.Ar variable .
-The make command line was produced from:
-.
-.Bd -literal -offset indent
-\&.Nm make
-\&.Op Fl eiknqrstv
-\&.Op Fl D Ar variable
-\&.Op Fl d Ar flags
-\&.Op Fl f Ar makefile
-\&.Op Fl I Ar directory
-\&.Op Fl j Ar max_jobs
-\&.Op Ar variable Ns = Ns Ar value
-\&.Bk
-\&.Op Ar target ...
-\&.Ek
-.Ed
-.Pp
-.
-The
-.Ql .Bk
-and
-.Ql .Ek
-macros are explained in
-.Sx Keeps .
-.
-.Ss "General Syntax"
-.
-The manual domain and general text domain macros share a similar syntax with
-a few minor deviations; most notably,
-.Ql .Ar ,
-.Ql .Fl ,
-.Ql .Nm ,
-and
-.Ql .Pa
-differ only when called without arguments; and
-.Ql .Fn
-and
-.Ql .Xr
-impose an order on their argument lists.
-All content macros are capable of recognizing and properly handling
-punctuation, provided each punctuation character is separated by a leading
-space.
-If a command is given:
-.Pp
-.Dl \&.Ar sptr, ptr),
-.Pp
-The result is:
-.Pp
-.Dl Ar sptr, ptr),
-.Pp
-The punctuation is not recognized and all is output in the
-font used by
-.Ql .Ar .
-If the punctuation is separated by a leading white space:
-.Pp
-.Dl \&.Ar "sptr , ptr ) ,"
-.Pp
-The result is:
-.Pp
-.Dl Ar sptr , ptr ) ,
-.Pp
-The punctuation is now recognized and output in the default font
-distinguishing it from the argument strings.
-To remove the special meaning from a punctuation character escape it with
-.Ql \e& .
-.Pp
-The following punctuation characters are recognized by
-.Nm \-mdoc :
-.
-.Bl -column -offset indent-two XXXXXX XXXXXX XXXXXX XXXXXX
-.It Li .\& Ta Li ,\& Ta Li :\& Ta Li ;\& Ta Li (\&
-.It Li )\& Ta Li [\& Ta Li ]\& Ta Li ?\& Ta Li !\&
-.El
-.Pp
-.
-.Xr Troff
-is limited as a macro language, and has difficulty when presented with a
-string containing a member of the mathematical, logical or quotation set:
-.
-.Bd -literal -offset indent-two
-{+,\-,/,*,%,<,>,<=,>=,=,==,&,`,',"}
-.Ed
-.Pp
-.
-The problem is that
-.Xr troff
-may assume it is supposed to actually perform the operation or evaluation
-suggested by the characters.
-To prevent the accidental evaluation of these characters, escape them with
-.Ql \e& .
-Typical syntax is shown in the first content macro displayed below,
-.Ql .Ad .
-.
-.
-.Sh "MANUAL DOMAIN"
-.
-.Ss Addresses
-.
-The address macro identifies an address construct.
-.Pp
-.Dl Usage: .Ad Ao address Ac ...
-.Pp
-.Bl -tag -width ".Li .Ad\ f1\ ,\ f2\ ,\ f3\ :" -compact -offset 15n
-.It Li ".Ad addr1"
-.Ad addr1
-.It Li ".Ad addr1 ."
-.Ad addr1 .
-.It Li ".Ad addr1 , file2"
-.Ad addr1 , file2
-.It Li ".Ad f1 , f2 , f3 :"
-.Ad f1 , f2 , f3 :
-.It Li ".Ad addr ) ) ,"
-.Ad addr ) ) ,
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Author Name"
-.
-The
-.Ql .An
-macro is used to specify the name of the author of the item being
-documented, or the name of the author of the actual manual page.
-.Pp
-.Dl Usage: .An Ao author name Ac ...
-.Pp
-.Bl -tag -width ".Li .An\ \*[q]Joe\ Author\*[q]\ )\ )\ ," -offset 15n
-.It Li ".An \*[q]Joe Author\*[q]"
-.An "Joe Author"
-.It Li ".An \*[q]Joe Author\*[q] ,"
-.An "Joe Author" ,
-.It Li ".An \*[q]Joe Author\*[q] Aq nobody@FreeBSD.org"
-.An "Joe Author" Aq nobody@FreeBSD.org
-.It Li ".An \*[q]Joe Author\*[q] ) ) ,"
-.An "Joe Author" ) ) ,
-.El
-.Pp
-.
-The default width is 12n.
-.Pp
-In the
-.Em AUTHORS
-section, the
-.Ql .An
-command causes a line break allowing each new name to appear on its own
-line.
-If this is not desirable,
-.
-.Bd -literal -offset indent
-\&.An \-nosplit
-.Ed
-.Pp
-.
-call will turn this off.
-To turn splitting back on, write
-.
-.Bd -literal -offset indent
-\&.An \-split
-.Ed
-.
-.Ss "Arguments"
-.
-The
-.Li .Ar
-argument macro may be used whenever an argument is referenced.
-If called without arguments, the
-.Sq Ar
-string is output.
-.Pp
-.Dl Usage: .Ar Oo Ao argument Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Ar\ file1\ file2" -compact -offset 15n
-.It Li .Ar
-.Ar
-.It Li ".Ar file1"
-.Ar file1
-.It Li ".Ar file1 ."
-.Ar file1 .
-.It Li ".Ar file1 file2"
-.Ar file1 file2
-.It Li ".Ar f1 f2 f3 :"
-.Ar f1 f2 f3 :
-.It Li ".Ar file ) ) ,"
-.Ar file ) ) ,
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Configuration Declaration (Section Four Only)"
-.
-The
-.Ql .Cd
-macro is used to demonstrate a
-.Xr config 8
-declaration for a device interface in a section four manual.
-.Pp
-.Dl Usage: .Cd Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Cd\ Xdevice\ le0\ at\ scode?X" -offset 15n
-.It Li ".Cd \*[q]device le0 at scode?\*[q]"
-.Cd "device le0 at scode?"
-.El
-.Pp
-In the
-.Sx SYNOPSIS
-section a
-.Ql .Cd
-command causes a line break before and after its arguments are printed.
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Command Modifiers"
-.
-The command modifier is identical to the
-.Ql .Fl
-(flag) command with the exception that the
-.Ql .Cm
-macro does not assert a dash in front of every argument.
-Traditionally flags are marked by the preceding dash, however, some commands
-or subsets of commands do not use them.
-Command modifiers may also be specified in conjunction with interactive
-commands such as editor commands.
-See
-.Sx Flags .
-.Pp
-The default width is 10n.
-.
-.Ss "Defined Variables"
-.
-A variable (or constant) which is defined in an include file
-is specified by the macro
-.Ql .Dv .
-.Pp
-.Dl Usage: .Dv Ao defined variable Ac ...
-.Pp
-.Bl -tag -width ".Li .Dv\ MAXHOSTNAMELEN" -compact -offset 15n
-.It Li ".Dv MAXHOSTNAMELEN"
-.Dv MAXHOSTNAMELEN
-.It Li ".Dv TIOCGPGRP )"
-.Dv TIOCGPGRP )
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss Errno's
-.
-The
-.Ql .Er
-errno macro specifies the error return value for section 2, 3, and\~9 library
-routines.
-The second example below shows
-.Ql .Er
-used with the
-.Ql .Bq
-general text domain macro, as it would be used in a section two manual page.
-.Pp
-.Dl Usage: .Er Ao errno type Ac ...
-.Pp
-.Bl -tag -width ".Li .Bq\ Er\ ENOTDIR" -compact -offset 15n
-.It Li ".Er ENOENT"
-.Er ENOENT
-.It Li ".Er ENOENT ) ;"
-.Er ENOENT ) ;
-.It Li ".Bq Er ENOTDIR"
-.Bq Er ENOTDIR
-.El
-.Pp
-.
-The default width is 17n.
-.
-.Ss "Environment Variables"
-.
-The
-.Ql .Ev
-macro specifies an environment variable.
-.Pp
-.Dl Usage: .Ev Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Ev\ PRINTER\ )\ )\ ," -compact -offset 15n
-.It Li ".Ev DISPLAY"
-.Ev DISPLAY
-.It Li ".Ev PATH ."
-.Ev PATH .
-.It Li ".Ev PRINTER ) ) ,"
-.Ev PRINTER ) ) ,
-.El
-.Pp
-.
-The default width is 15n.
-.
-.Ss Flags
-.
-The
-.Ql .Fl
-macro handles command line flags.
-It prepends a dash,
-.Ql \- ,
-to the flag.
-For interactive command flags, which are not prepended with a dash, the
-.Ql .Cm
-(command modifier)
-macro is identical, but without the dash.
-.Pp
-.Dl Usage: .Fl Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Fl\ xyz\ )\ ," -compact -offset 15n
-.It Li .Fl
-.Fl
-.It Li ".Fl cfv"
-.Fl cfv
-.It Li ".Fl cfv ."
-.Fl cfv .
-.It Li ".Cm cfv ."
-.Cm cfv .
-.It Li ".Fl s v t"
-.Fl s v t
-.It Li ".Fl \- ,"
-.Fl \- ,
-.It Li ".Fl xyz ) ,"
-.Fl xyz ) ,
-.It Li ".Fl |"
-.Fl |
-.El
-.Pp
-The
-.Ql .Fl
-macro without any arguments results in a dash representing stdin/stdout.
-Note that giving
-.Ql .Fl
-a single dash will result in two dashes.
-.Pp
-The default width is 12n.
-.
-.Ss "Function Declarations"
-.
-The
-.Ql .Fd
-macro is used in the
-.Sx SYNOPSIS
-section with section two or three functions.
-It is neither callable nor parsed.
-.Pp
-.Dl Usage: .Fd Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Fd\ X#include\ <sys/types.h>X" -compact -offset 15n
-.It Li ".Fd \*[q]#include <sys/types.h>\*[q]"
-.Fd "#include <sys/types.h>"
-.El
-.Pp
-In the
-.Sx SYNOPSIS
-section a
-.Ql .Fd
-command causes a line break if a function has already been presented and a
-break has not occurred.
-This leaves a nice vertical space in between the previous function call and
-the declaration for the next function.
-.
-.Pp
-The
-.Ql .In
-macro, while in the
-.Sx SYNOPSIS
-section, represents the
-.Li #include
-statement, and is the short form of the above example.
-It specifies the C\~header file as being included in a C\~program.
-It also causes a line break.
-.Pp
-While not in the
-.Sx SYNOPSIS
-section, it represents the header file enclosed in angle brackets.
-.Pp
-.Dl Usage: .In Ao header file Ac
-.Pp
-.Bl -tag -width ".Li .In\ stdio.h" -compact -offset 15n
-.nr in-synopsis-section 1
-.It Li ".In stdio.h"
-.In stdio.h
-.nr in-synopsis-section 0
-.It Li ".In stdio.h"
-.In stdio.h
-.El
-.
-.Ss "Function Types"
-.
-This macro is intended for the
-.Sx SYNOPSIS
-section.
-It may be used anywhere else in the man page without problems, but its main
-purpose is to present the function type in kernel normal form for the
-.Sx SYNOPSIS
-of sections two and three (it causes a line break, allowing the function
-name to appear on the next line).
-.Pp
-.Dl Usage: .Ft Ao type Ac ...
-.Pp
-.Bl -tag -width ".Li .Ft\ struct\ stat" -compact -offset 15n
-.It Li ".Ft struct stat"
-.Ft struct stat
-.El
-.
-.Ss "Functions (Library Routines)"
-.
-The
-.Ql .Fn
-macro is modeled on
-.Tn ANSI\~C
-conventions.
-.Pp
-.Dl Usage: .Fn Ao function Ac Oo Ao parameter Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Fn\ align\ Xchar\ *ptrX\ ," -compact -offset 15n
-.It Li ".Fn getchar"
-.Fn getchar
-.It Li ".Fn strlen ) ,"
-.Fn strlen ) ,
-.It Li ".Fn align \*[q]char *ptr\*[q] ,"
-.Fn align "char *ptr" ,
-.El
-.Pp
-Note that any call to another macro signals the end of the
-.Ql .Fn
-call (it will insert a closing parenthesis at that point).
-.Pp
-For functions with many parameters (which is rare), the macros
-.Ql .Fo
-(function open)
-and
-.Ql .Fc
-(function close)
-may be used with
-.Ql .Fa
-(function argument).
-.Pp
-Example:
-.
-.Bd -literal -offset indent
-\&.Ft int
-\&.Fo res_mkquery
-\&.Fa "int op"
-\&.Fa "char *dname"
-\&.Fa "int class"
-\&.Fa "int type"
-\&.Fa "char *data"
-\&.Fa "int datalen"
-\&.Fa "struct rrec *newrr"
-\&.Fa "char *buf"
-\&.Fa "int buflen"
-\&.Fc
-.Ed
-.Pp
-.
-Produces:
-.
-.Bd -ragged -offset indent
-.Ft int
-.Fo res_mkquery
-.Fa "int op"
-.Fa "char *dname"
-.Fa "int class"
-.Fa "int type"
-.Fa "char *data"
-.Fa "int datalen"
-.Fa "struct rrec *newrr"
-.Fa "char *buf"
-.Fa "int buflen"
-.Fc
-.Ed
-.Pp
-.
-In the
-.Sx SYNOPSIS
-section, the function will always begin at the beginning of line.
-If there is more than one function presented in the
-.Sx SYNOPSIS
-section and a function type has not been given, a line break will occur,
-leaving a nice vertical space between the current function name and the one
-prior.
-.Pp
-The default width values of
-.Ql .Fn
-and
-.Ql .Fo
-are 12n and 16n, respectively.
-.
-.Ss "Function Arguments"
-.
-The
-.Ql .Fa
-macro is used to refer to function arguments (parameters) outside of the
-.Sx SYNOPSIS
-section of the manual or inside the
-.Sx SYNOPSIS
-section if the enclosure macros
-.Ql .Fo
-and
-.Ql .Fc
-instead of
-.Ql .Fn
-are used.
-.Ql .Fa
-may also be used to refer to structure members.
-.Pp
-.Dl Usage: .Fa Ao function argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Fa\ d_namlen\ )\ )\ ," -compact -offset 15n
-.It Li ".Fa d_namlen ) ) ,"
-.Fa d_namlen ) ) ,
-.It Li ".Fa iov_len"
-.Fa iov_len
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Return Values"
-.
-The
-.Ql .Rv
-macro generates text for use in the
-.Sx RETURN VALUES
-section.
-.Pp
-.Dl Usage: .Rv Oo \-std Oc Op Ao function Ac ...
-.Pp
-For example,
-.Ql ".Rv \-std atexit"
-produces:
-.
-.Bd -ragged -offset indent
-\# a small hack to suppress a warning message
-.ds section-old "\*[section]
-.ds section 3
-.Rv -std atexit
-.ds section "\*[section-old]
-.Ed
-.Pp
-.
-The
-.Fl std
-option is valid only for manual page sections\~2 and\~3.
-Currently, this macro does nothing if used without the
-.Fl std
-flag.
-.
-.Ss "Exit Status"
-.
-The
-.Ql .Ex
-macro generates text for use in the
-.Sx DIAGNOSTICS
-section.
-.Pp
-.Dl Usage: .Ex Oo \-std Oc Op Ao utility Ac ...
-.Pp
-For example,
-.Ql ".Ex \-std cat"
-produces:
-.
-.Bd -ragged -offset indent
-\# a small hack to suppress a warning message
-.ds section-old "\*[section]
-.ds section 1
-.Ex -std cat
-.ds section "\*[section-old]
-.Ed
-.Pp
-.
-The
-.Fl std
-option is valid only for manual page sections 1, 6 and\~8.
-Currently, this macro does nothing if used without the
-.Fl std
-flag.
-.
-.Ss "Interactive Commands"
-.
-The
-.Ql .Ic
-macro designates an interactive or internal command.
-.Pp
-.Dl Usage: .Ic Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Ic\ setenv\ ,\ unsetenv" -compact -offset 15n
-.It Li ".Ic :wq"
-.Ic :wq
-.It Li ".Ic \*[q]do while {...}\*[q]"
-.Ic "do while {...}"
-.It Li ".Ic setenv , unsetenv"
-.Ic setenv , unsetenv
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Library Names"
-.
-The
-.Ql .Lb
-macro is used to specify the library where a particular function is compiled
-in.
-.Pp
-.Dl Usage: .Lb Ao argument Ac ...
-.Pp
-Available arguments to
-.Ql .Lb
-and their results are:
-.
-.Pp
-.Bl -tag -width ".Li librpcsec_gss" -compact -offset indent
-.It Li libarchive
-.Lb libarchive
-.It Li libarm
-.Lb libarm
-.It Li libarm32
-.Lb libarm32
-.It Li libbluetooth
-.Lb libbluetooth
-.It Li libbsm
-.Lb libbsm
-.It Li libc
-.Lb libc
-.It Li libc_r
-.Lb libc_r
-.It Li libcalendar
-.Lb libcalendar
-.It Li libcam
-.Lb libcam
-.It Li libcdk
-.Lb libcdk
-.It Li libcipher
-.Lb libcipher
-.It Li libcompat
-.Lb libcompat
-.It Li libcrypt
-.Lb libcrypt
-.It Li libcurses
-.Lb libcurses
-.It Li libdevinfo
-.Lb libdevinfo
-.It Li libdevstat
-.Lb libdevstat
-.It Li libdisk
-.Lb libdisk
-.It Li libdwarf
-.Lb libdwarf
-.It Li libedit
-.Lb libedit
-.It Li libelf
-.Lb libelf
-.It Li libevent
-.Lb libevent
-.It Li libfetch
-.Lb libfetch
-.It Li libform
-.Lb libform
-.It Li libgeom
-.Lb libgeom
-.It Li libgpib
-.Lb libgpib
-.It Li libi386
-.Lb libi386
-.It Li libintl
-.Lb libintl
-.It Li libipsec
-.Lb libipsec
-.It Li libipx
-.Lb libipx
-.It Li libiscsi
-.Lb libiscsi
-.It Li libjail
-.Lb libjail
-.It Li libkiconv
-.Lb libkiconv
-.It Li libkse
-.Lb libkse
-.It Li libkvm
-.Lb libkvm
-.It Li libm
-.Lb libm
-.It Li libm68k
-.Lb libm68k
-.It Li libmagic
-.Lb libmagic
-.It Li libmd
-.Lb libmd
-.It Li libmemstat
-.Lb libmemstat
-.It Li libmenu
-.Lb libmenu
-.It Li libnetgraph
-.Lb libnetgraph
-.It Li libnetpgp
-.Lb libnetpgp
-.It Li libossaudio
-.Lb libossaudio
-.It Li libpam
-.Lb libpam
-.It Li libpcap
-.Lb libpcap
-.It Li libpci
-.Lb libpci
-.It Li libpmc
-.Lb libpmc
-.It Li libposix
-.Lb libposix
-.It Li libprop
-.Lb libprop
-.It Li libpthread
-.Lb libpthread
-.It Li libpuffs
-.Lb libpuffs
-.It Li librefuse
-.Lb librefuse
-.It Li libresolv
-.Lb libresolv
-.It Li librpcsec_gss
-.Lb librpcsec_gss
-.It Li librpcsvc
-.Lb librpcsvc
-.It Li librt
-.Lb librt
-.It Li libsdp
-.Lb libsdp
-.It Li libssp
-.Lb libssp
-.It Li libSystem
-.Lb libSystem
-.It Li libtermcap
-.Lb libtermcap
-.It Li libterminfo
-.Lb libterminfo
-.It Li libthr
-.Lb libthr
-.It Li libufs
-.Lb libufs
-.It Li libugidfw
-.Lb libugidfw
-.It Li libulog
-.Lb libulog
-.It Li libusbhid
-.Lb libusbhid
-.It Li libutil
-.Lb libutil
-.It Li libvgl
-.Lb libvgl
-.It Li libx86_64
-.Lb libx86_64
-.It Li libz
-.Lb libz
-.El
-.Pp
-.
-Local, OS-specific additions might be found in the file
-.Pa mdoc.local ;
-look for strings named
-.Ql str\-Lb\-XXX .
-.Ql XXX
-then denotes the keyword to be used with the
-.Ql .Lb
-macro.
-.Pp
-In the
-.Em LIBRARY
-section an
-.Ql .Lb
-command causes a line break before and after its arguments are printed.
-.Pp
-.
-.Ss Literals
-.
-The
-.Ql .Li
-literal macro may be used for special characters, variable constants, etc.\&
-\- anything which should be displayed as it would be typed.
-.Pp
-.Dl Usage: .Li Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Li\ cntrl\-D\ )\ ,"  -compact -offset 15n
-.It Li ".Li \een"
-.Li \en
-.It Li ".Li M1 M2 M3 ;"
-.Li M1 M2 M3 ;
-.It Li ".Li cntrl\-D ) ,"
-.Li cntrl-D ) ,
-.It Li ".Li 1024 ..."
-.Li 1024 ...
-.El
-.Pp
-.
-The default width is 16n.
-.
-.Ss Names
-.
-The
-.Ql .Nm
-macro is used for the document title or subject name.
-It has the peculiarity of remembering the first argument it was called with,
-which should always be the subject name of the page.
-When called without arguments,
-.Ql .Nm
-regurgitates this initial name for the sole purpose of making less work for
-the author.
-.Ql .Nm
-causes a line break within the
-.Sx SYNOPSIS
-section.
-.Pp
-Note: A section two or three document function name is addressed with the
-.Ql .Nm
-in the
-.Em NAME
-section, and with
-.Ql .Fn
-in the
-.Sx SYNOPSIS
-and remaining sections.
-For interactive commands, such as the
-.Ql while
-command keyword in
-.Xr csh 1 ,
-the
-.Ql .Ic
-macro should be used.
-While
-.Ql .Ic
-is nearly identical
-to
-.Ql .Nm ,
-it can not recall the first argument it was invoked with.
-.Pp
-.Dl Usage: .Nm Oo Ao argument Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Nm\ groff_mdoc" -compact -offset 15n
-.It Li ".Nm groff_mdoc"
-.Nm groff_mdoc
-.It Li ".Nm \e\-mdoc"
-.Nm \-mdoc
-.It Li ".Nm foo ) ) ,"
-.Nm foo ) ) ,
-.It Li ".Nm :"
-.Nm :
-.El
-.Pp
-.
-The default width is 10n.
-.
-.Ss Options
-.
-The
-.Ql .Op
-macro places option brackets around any remaining arguments on the
-command line, and places any trailing punctuation outside the brackets.
-The macros
-.Ql .Oo
-and
-.Ql .Oc
-(which produce an opening and a closing option bracket respectively) may be used
-across one or more lines or to specify the exact position of the closing
-parenthesis.
-.Pp
-.Dl Usage: .Op Oo Ao option Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Op\ Fl\ c\ Ar\ objfil\ Op\ Ar\ corfil\ ," -compact -offset 15n
-.It Li .Op
-.Op
-.It Li ".Op Fl k"
-.Op Fl k
-.It Li ".Op Fl k ) ."
-.Op Fl k ) .
-.It Li ".Op Fl k Ar kookfile"
-.Op Fl k Ar kookfile
-.It Li ".Op Fl k Ar kookfile ,"
-.Op Fl k Ar kookfile ,
-.It Li ".Op Ar objfil Op Ar corfil"
-.Op Ar objfil Op Ar corfil
-.It Li ".Op Fl c Ar objfil Op Ar corfil ,"
-.Op Fl c Ar objfil Op Ar corfil ,
-.It Li ".Op word1 word2"
-.Op word1 word2
-.It Li ".Li .Op Oo Ao option Ac Oc ..."
-.Li .Op Oo Ao option Ac Oc ...
-.El
-.Pp
-Here a typical example of the
-.Ql .Oo
-and
-.Ql .Oc
-macros:
-.
-.Bd -literal -offset indent
-\&.Oo
-\&.Op Fl k Ar kilobytes
-\&.Op Fl i Ar interval
-\&.Op Fl c Ar count
-\&.Oc
-.Ed
-.Pp
-.
-Produces:
-.
-.Bd -filled -offset indent
-.Oo
-.Op Fl k Ar kilobytes
-.Op Fl i Ar interval
-.Op Fl c Ar count
-.Oc
-.Ed
-.Pp
-.
-The default width values of
-.Ql .Op
-and
-.Ql .Oo
-are 14n and 10n, respectively.
-.
-.Ss Pathnames
-.
-The
-.Ql .Pa
-macro formats path or file names.
-If called without arguments, the
-.Sq Pa
-string is output, which represents the current user's home directory.
-.Pp
-.Dl Usage: .Pa Oo Ao pathname Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Pa\ /tmp/fooXXXXX\ )\ ." -compact -offset 15n
-.It Li .Pa
-.Pa
-.It Li ".Pa /usr/share"
-.Pa /usr/share
-.It Li ".Pa /tmp/fooXXXXX ) ."
-.Pa /tmp/fooXXXXX ) .
-.El
-.Pp
-.
-The default width is 32n.
-.
-.Ss Standards
-.
-The
-.Ql .St
-macro replaces standard abbreviations with their formal names.
-.Pp
-.Dl Usage: .St Ao abbreviation Ac ...
-.Pp
-Available pairs for
-.Dq Abbreviation/Formal Name
-are:
-.
-.Pp
-.Tn ANSI/ISO C
-.Pp
-.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
-.It Li \-ansiC
-.St -ansiC
-.It Li \-ansiC\-89
-.St -ansiC-89
-.It Li \-isoC
-.St -isoC
-.It Li \-isoC\-90
-.St -isoC-90
-.It Li \-isoC\-99
-.St -isoC-99
-.It Li \-isoC\-2011
-.St -isoC-2011
-.El
-.Pp
-.
-.Tn POSIX
-Part 1: System API
-.Pp
-.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
-.It Li \-iso9945\-1\-90
-.St -iso9945-1-90
-.It Li \-iso9945\-1\-96
-.St -iso9945-1-96
-.It Li \-p1003.1
-.St -p1003.1
-.It Li \-p1003.1\-88
-.St -p1003.1-88
-.It Li \-p1003.1\-90
-.St -p1003.1-90
-.It Li \-p1003.1\-96
-.St -p1003.1-96
-.It Li \-p1003.1b\-93
-.St -p1003.1b-93
-.It Li \-p1003.1c\-95
-.St -p1003.1c-95
-.It Li \-p1003.1g\-2000
-.St -p1003.1g-2000
-.It Li \-p1003.1i\-95
-.St -p1003.1i-95
-.It Li \-p1003.1\-2001
-.St -p1003.1-2001
-.It Li \-p1003.1\-2004
-.St -p1003.1-2004
-.It Li \-p1003.1\-2008
-.St -p1003.1-2008
-.El
-.Pp
-.
-.Tn POSIX
-Part 2: Shell and Utilities
-.Pp
-.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
-.It Li \-iso9945\-2\-93
-.St -iso9945-2-93
-.It Li \-p1003.2
-.St -p1003.2
-.It Li \-p1003.2\-92
-.St -p1003.2-92
-.It Li \-p1003.2a\-92
-.St -p1003.2a-92
-.El
-.Pp
-.
-X/Open
-.Pp
-.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
-.It Li \-susv2
-.St -susv2
-.It Li \-susv3
-.St -susv3
-.It Li \-svid4
-.St -svid4
-.It Li \-xbd5
-.St -xbd5
-.It Li \-xcu5
-.St -xcu5
-.It Li \-xcurses4.2
-.St -xcurses4.2
-.It Li \-xns5
-.St -xns5
-.It Li \-xns5.2
-.St -xns5.2
-.It Li \-xpg3
-.St -xpg3
-.It Li \-xpg4
-.St -xpg4
-.It Li \-xpg4.2
-.St -xpg4.2
-.It Li \-xsh5
-.St -xsh5
-.El
-.Pp
-.
-Miscellaneous
-.Pp
-.Bl -tag -width ".Li \-p1003.1g\-2000" -compact -offset indent
-.It Li \-ieee754
-.St -ieee754
-.It Li \-iso8601
-.St -iso8601
-.It Li \-iso8802\-3
-.St -iso8802-3
-.El
-.
-.Ss "Variable Types"
-.
-The
-.Ql .Vt
-macro may be used whenever a type is referenced.
-In the
-.Sx SYNOPSIS
-section, it causes a line break (useful for old style variable declarations).
-.Pp
-.Dl Usage: .Vt Ao type Ac ...
-.Pp
-.Bl -tag -width ".Li .Vt\ extern\ char\ *optarg\ ;" -compact -offset 15n
-.It Li ".Vt extern char *optarg ;"
-.Vt extern char *optarg ;
-.It Li ".Vt FILE *"
-.Vt FILE *
-.El
-.
-.Ss Variables
-.
-Generic variable reference.
-.Pp
-.Dl Usage: .Va Ao variable Ac ...
-.Pp
-.Bl -tag -width ".Li .Va\ Xchar\ sX\ ]\ )\ )\ ," -compact -offset 15n
-.It Li ".Va count"
-.Va count
-.It Li ".Va settimer ,"
-.Va settimer ,
-.It Li ".Va \*[q]int *prt\*[q] ) :"
-.Va "int *prt" ) :
-.It Li ".Va \*[q]char s\*[q] ] ) ) ,"
-.Va "char s" ] ) ) ,
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "Manual Page Cross References"
-.
-The
-.Ql .Xr
-macro expects the first argument to be a manual page name.
-The optional second argument, if a string (defining the manual section), is
-put into parentheses.
-.Pp
-.Dl Usage: .Xr Ao man page name Ac Oo Ao section Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Xr\ xinit\ 1x\ ;" -compact -offset 15n
-.It Li ".Xr mdoc"
-.Xr mdoc
-.It Li ".Xr mdoc ,"
-.Xr mdoc ,
-.It Li ".Xr mdoc 7"
-.Xr mdoc 7
-.It Li ".Xr xinit 1x ;"
-.Xr xinit 1x ;
-.El
-.Pp
-.
-The default width is 10n.
-.
-.
-.Sh "GENERAL TEXT DOMAIN"
-.
-.Ss "AT&T Macro"
-.
-.Pp
-.Dl Usage: .At Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .At\ v6\ ." -compact -offset 15n
-.It Li .At
-.At
-.It Li ".At v6 ."
-.At v6 .
-.El
-.Pp
-The following values for
-.Ao version Ac
-are possible:
-.Pp
-.Dl 32v, v1, v2, v3, v4, v5, v6, v7, III, V, V.1, V.2, V.3, V.4
-.
-.Ss "BSD Macro"
-.
-.Pp
-.Dl "Usage: .Bx" Bro \-alpha | \-beta | \-devel Brc ...
-.Dl "       .Bx" Oo Ao version Ac Oo Ao release Ac Oc Oc ...
-.Pp
-.Bl -tag -width ".Li .Bx\ -devel" -compact -offset 15n
-.It Li .Bx
-.Bx
-.It Li ".Bx 4.3 ."
-.Bx 4.3 .
-.It Li ".Bx \-devel"
-.Bx -devel
-.El
-.Pp
-.Ao version Ac
-will be prepended to the string
-.Sq Bx .
-The following values for
-.Ao release Ac
-are possible:
-.Pp
-.Dl Reno, reno, Tahoe, tahoe, Lite, lite, Lite2, lite2
-.
-.Ss "NetBSD Macro"
-.
-.Pp
-.Dl Usage: .Nx Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Nx\ 1.4\ ." -compact -offset 15n
-.It Li .Nx
-.Nx
-.It Li ".Nx 1.4 ."
-.Nx 1.4 .
-.El
-.Pp
-For possible values of
-.Ao version Ac
-see the description of the
-.Ql .Os
-command above in section
-.Sx "TITLE MACROS" .
-.
-.Ss "FreeBSD Macro"
-.
-.Pp
-.Dl Usage: .Fx Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Fx\ 2.2\ ." -compact -offset 15n
-.It Li .Fx
-.Fx
-.It Li ".Fx 2.2 ."
-.Fx 2.2 .
-.El
-.Pp
-For possible values of
-.Ao version Ac
-see the description of the
-.Ql .Os
-command above in section
-.Sx "TITLE MACROS" .
-.
-.Ss "DragonFly Macro"
-.
-.Pp
-.Dl Usage: .Dx Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Dx\ 1.4\ ." -compact -offset 15n
-.It Li .Dx
-.Dx
-.It Li ".Dx 1.4 ."
-.Dx 1.4 .
-.El
-.Pp
-For possible values of
-.Ao version Ac
-see the description of the
-.Ql .Os
-command above in section
-.Sx "TITLE MACROS" .
-.
-.Ss "OpenBSD Macro"
-.
-.Pp
-.Dl Usage: .Ox Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Ox\ 1.0" -compact -offset 15n
-.It Li ".Ox 1.0"
-.Ox 1.0
-.El
-.
-.Ss "BSD/OS Macro"
-.
-.Pp
-.Dl Usage: .Bsx Oo Ao version Ac Oc ...
-.Pp
-.Bl -tag -width ".Li .Bsx\ 1.0" -compact -offset 15n
-.It Li ".Bsx 1.0"
-.Bsx 1.0
-.El
-.
-.Ss "UNIX Macro"
-.
-.Pp
-.Dl Usage: .Ux ...
-.Pp
-.Bl -tag -width ".Li .Ux" -compact -offset 15n
-.It Li .Ux
-.Ux
-.El
-.
-.Ss "Emphasis Macro"
-.
-Text may be stressed or emphasized with the
-.Ql .Em
-macro.
-The usual font for emphasis is italic.
-.Pp
-.Dl Usage: .Em Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Em\ vide\ infra\ )\ )\ ," -compact -offset 15n
-.It Li ".Em does not"
-.Em does not
-.It Li ".Em exceed 1024 ."
-.Em exceed 1024 .
-.It Li ".Em vide infra ) ) ,"
-.Em vide infra ) ) ,
-.El
-.Pp
-.
-The default width is 10n.
-.
-.Ss "Font Mode"
-.
-The
-.Ql .Bf
-font mode must be ended with the
-.Ql .Ef
-macro (the latter takes no arguments).
-Font modes may be nested within other font modes.
-.Pp
-.Ql .Bf
-has the following syntax:
-.Pp
-.Dl .Bf Ao font mode Ac
-.Pp
-.Ao font mode Ac
-must be one of the following three types:
-.Pp
-.Bl -tag -width ".Sy \&Sy | Fl symbolic" -compact -offset indent
-.It Sy \&Em | Fl emphasis
-Same as if the
-.Ql .Em
-macro was used for the entire block of text.
-.It Sy \&Li | Fl literal
-Same as if the
-.Ql .Li
-macro was used for the entire block of text.
-.It Sy \&Sy | Fl symbolic
-Same as if the
-.Ql .Sy
-macro was used for the entire block of text.
-.El
-.Pp
-Both macros are neither callable nor parsed.
-.
-.Ss "Enclosure and Quoting Macros"
-.
-The concept of enclosure is similar to quoting.
-The object being to enclose one or more strings between a pair of characters
-like quotes or parentheses.
-The terms quoting and enclosure are used interchangeably throughout this
-document.
-Most of the one-line enclosure macros end in small letter
-.Ql q
-to give a hint of quoting, but there are a few irregularities.
-For each enclosure macro there is also a pair of open and close macros which
-end in small letters
-.Ql o
-and
-.Ql c
-respectively.
-.Pp
-\# XXX
-.if t \
-.  ne 10
-.
-.TS
-lb lb lb lb lb
-l l l l l.
-Quote  Open    Close   Function        Result
-\&.Aq  .Ao     .Ac     Angle Bracket Enclosure <string>
-\&.Bq  .Bo     .Bc     Bracket Enclosure       [string]
-\&.Brq .Bro    .Brc    Brace Enclosure {string}
-\&.Dq  .Do     .Dc     Double Quote    "string"
-\&.Eq  .Eo     .Ec     Enclose String (in XX)  XXstring
-\&.Pq  .Po     .Pc     Parenthesis Enclosure   (string)
-\&.Ql                  Quoted Literal  \*[Lq]string\*[Rq] or string
-\&.Qq  .Qo     .Qc     Straight Double Quote   "string"
-\&.Sq  .So     .Sc     Single Quote    'string'
-.TE
-.Pp
-All macros ending with
-.Sq q
-and
-.Sq o
-have a default width value of 12n.
-.
-.Bl -tag -width ".Li .Ec , .Eo"
-.It Li .Eo , .Ec
-These macros expect the first argument to be the opening and closing strings
-respectively.
-.It Li .Es , .En
-Due to the nine-argument limit in the original troff program two other
-macros have been implemented which are now rather obsolete:
-.Ql .Es
-takes the first and second parameter as the left and right enclosure string,
-which are then used to enclose the arguments of
-.Ql .En .
-The default width value is 12n for both macros.
-.It Li .Eq
-The first and second arguments of this macro are the opening and
-closing strings respectively, followed by the arguments to be enclosed.
-.It Li .Ql
-The quoted literal macro behaves differently in troff and nroff mode.
-If formatted with
-.Xr nroff ,
-a quoted literal is always quoted.
-If formatted with troff, an item is only quoted if the width of the item is
-less than three constant width characters.
-This is to make short strings more visible where the font change to literal
-(constant width) is less noticeable.
-.Pp
-The default width is 16n.
-.It Li .Pf
-The prefix macro suppresses the whitespace between its first and second
-argument:
-.
-.Bl -tag -width ".Li .Pf\ (\ Fa\ name2" -offset indent
-.It Li ".Pf ( Fa name2"
-.Pf ( Fa name2
-.El
-.Pp
-.
-The default width is 12n.
-.Pp
-The
-.Ql .Ns
-macro (see below) performs the analogous suffix function.
-.It Li .Ap
-The
-.Ql .Ap
-macro inserts an apostrophe and exits any special text modes, continuing in
-.Ql .No
-mode.
-.El
-.Pp
-.
-Examples of quoting:
-.
-.Pp
-.Bl -tag -width ".Li .Bq\ Em\ Greek\ ,\ French\ ." -compact -offset indent
-.It Li .Aq
-.Aq
-.It Li ".Aq Pa ctype.h ) ,"
-.Aq Pa ctype.h ) ,
-.It Li .Bq
-.Bq
-.It Li ".Bq Em Greek , French ."
-.Bq Em Greek , French .
-.It Li .Dq
-.Dq
-.It Li ".Dq string abc ."
-.Dq string abc .
-.It Li ".Dq \'^[A\-Z]\'"
-.Dq \'^[A-Z]\'
-.It Li ".Ql man mdoc"
-.Ql man mdoc
-.It Li .Qq
-.Qq
-.It Li ".Qq string ) ,"
-.Qq string ) ,
-.It Li ".Qq string Ns ),"
-.Qq string Ns ),
-.It Li .Sq
-.Sq
-.It Li ".Sq string"
-.Sq string
-.It Li ".Em or Ap ing"
-.Em or Ap ing
-.El
-.Pp
-.
-For a good example of nested enclosure macros, see the
-.Ql .Op
-option macro.
-It was created from the same underlying enclosure macros as those presented
-in the list above.
-The
-.Ql .Xo
-and
-.Ql .Xc
-extended argument list macros are discussed below.
-.
-.Ss "No-Op or Normal Text Macro"
-.
-The
-.Ql .No
-macro can be used in a macro command line for parameters which should
-.Em not
-be formatted.
-Be careful to add
-.Ql \e&
-to the word
-.Ql \&No
-if you really want that English word (and not the macro) as a parameter.
-.Pp
-.Dl Usage: .No Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .No\ test\ Ta\ with\ Ta\ tabs" -compact -offset 15n
-.It Li ".No test Ta with Ta tabs"
-.No test Ta with Ta tabs
-.El
-.Pp
-.
-The default width is 12n.
-.
-.Ss "No-Space Macro"
-.
-The
-.Ql .Ns
-macro suppresses insertion of a space between the current position and its
-first parameter.
-For example, it is useful for old style argument lists where there is no
-space between the flag and argument:
-.Pp
-.Dl "Usage:" ... Ao argument Ac \&Ns Oo Ao argument Ac Oc ...
-.Dl "      " .Ns Ao argument Ac ...
-.Pp
-.Bl -tag -width ".Li .Op\ Fl\ I\ Ns\ Ar\ directory" -compact -offset 15n
-.It Li ".Op Fl I Ns Ar directory"
-.Op Fl I Ns Ar directory
-.El
-.Pp
-Note: The
-.Ql .Ns
-macro always invokes the
-.Ql .No
-macro after eliminating the space unless another macro name follows it.
-If used as a command (i.e., the second form above in the
-.Sq Usage
-line),
-.Ql .Ns
-is identical to
-.Ql .No .
-.
-.Ss "Section Cross References"
-.
-The
-.Ql .Sx
-macro designates a reference to a section header within the same document.
-.Pp
-.Dl Usage: .Sx Ao section reference Ac ...
-.Pp
-.Bl -tag -width ".Li .Sx\ FILES" -offset 15n
-.It Li ".Sx FILES"
-.Sx FILES
-.El
-.Pp
-.
-The default width is 16n.
-.
-.Ss Symbolics
-.
-The symbolic emphasis macro is generally a boldface macro in either the
-symbolic sense or the traditional English usage.
-.Pp
-.Dl Usage: .Sy Ao symbol Ac ...
-.Pp
-.Bl -tag -width ".Li .Sy\ Important\ Notice" -compact -offset 15n
-.It Li ".Sy Important Notice"
-.Sy Important Notice
-.El
-.Pp
-.
-The default width is 6n.
-.
-.Ss Mathematical Symbols
-.
-Use this macro for mathematical symbols and similar things.
-.Pp
-.Dl Usage: .Ms Ao math symbol Ac ...
-.Pp
-.Bl -tag -width ".Li .Ms\ sigma" -compact -offset 15n
-.It Li ".Ms sigma"
-.Ms sigma
-.El
-.Pp
-.
-The default width is 6n.
-.
-.Ss "References and Citations"
-.
-The following macros make a modest attempt to handle references.
-At best, the macros make it convenient to manually drop in a subset of
-.Xr refer 1
-style references.
-.Pp
-.Bl -tag -width 6n -offset indent -compact
-.It Li .Rs
-Reference start (does not take arguments).
-Causes a line break in the
-.Sx "SEE ALSO"
-section and begins collection of reference information until the reference
-end macro is read.
-.It Li .Re
-Reference end (does not take arguments).
-The reference is printed.
-.It Li .%A
-Reference author name; one name per invocation.
-.It Li .%B
-Book title.
-.It Li .%C
-City/place.
-.It Li .%D
-Date.
-.It Li .%I
-Issuer/publisher name.
-.It Li .%J
-Journal name.
-.It Li .%N
-Issue number.
-.It Li .%O
-Optional information.
-.It Li .%P
-Page number.
-.It Li .%Q
-Corporate or foreign author.
-.It Li .%R
-Report name.
-.It Li .%T
-Title of article.
-.It Li .%U
-Optional hypertext reference.
-.It Li .%V
-Volume.
-.El
-.Pp
-Macros beginning with
-.Ql %
-are not callable but accept multiple arguments in the usual way.
-Only the
-.Ql .Tn
-macro is handled properly as a parameter; other macros will cause strange
-output.
-.Ql .%B
-and
-.Ql .%T
-can be used outside of the
-.Ql .Rs/.Re
-environment.
-.Pp
-Example:
-.
-.Bd -literal -offset indent
-\&.Rs
-\&.%A "Matthew Bar"
-\&.%A "John Foo"
-\&.%T "Implementation Notes on foobar(1)"
-\&.%R "Technical Report ABC\-DE\-12\-345"
-\&.%Q "Drofnats College"
-\&.%C "Nowhere"
-\&.%D "April 1991"
-\&.Re
-.Ed
-.Pp
-produces
-.
-.Bd -ragged -offset indent
-.Rs
-.%A "Matthew Bar"
-.%A "John Foo"
-.%T "Implementation Notes on foobar(1)"
-.%R "Technical Report ABC-DE-12-345"
-.%Q "Drofnats College"
-.%C "Nowhere"
-.%D "April 1991"
-.Re
-.Ed
-.
-.Ss "Trade Names (or Acronyms and Type Names)"
-.
-The trade name macro prints its arguments in a smaller font.
-Its intended use is to imitate a small caps fonts for uppercase acronyms.
-.Pp
-.Dl Usage: .Tn Ao symbol Ac ...
-.Pp
-.Bl -tag -width ".Li .Tn\ ASCII" -compact -offset 15n
-.It Li ".Tn DEC"
-.Tn DEC
-.It Li ".Tn ASCII"
-.Tn ASCII
-.El
-.Pp
-.
-The default width is 10n.
-.
-.Ss "Extended Arguments"
-.
-The
-.Li .Xo
-and
-.Li .Xc
-macros allow one to extend an argument list on a macro boundary for the
-.Ql .It
-macro (see below).
-Note that
-.Li .Xo
-and
-.Li .Xc
-are implemented similarly to all other macros opening and closing an
-enclosure (without inserting characters, of course).
-This means that the following is true for those macros also.
-.Pp
-Here is an example of
-.Ql .Xo
-using the space mode macro to turn spacing off:
-.
-.Bd -literal -offset indent
-\&.Sm off
-\&.It Xo Sy I Ar operation
-\&.No \een Ar count No \een
-\&.Xc
-\&.Sm on
-.Ed
-.Pp
-.
-produces
-.
-.Bd -filled -offset indent
-.Bl -tag -compact
-.Sm off
-.It Xo Sy I Ar operation
-.No \en Ar count No \en
-.Xc
-.Sm on
-.El
-.Ed
-.Pp
-.
-Another one:
-.
-.Bd -literal -offset indent
-\&.Sm off
-\&.It Cm S No / Ar old_pattern Xo
-\&.No / Ar new_pattern
-\&.No / Op Cm g
-\&.Xc
-\&.Sm on
-.Ed
-.Pp
-.
-produces
-.
-.Bd -filled -offset indent
-.Bl -tag -compact
-.Sm off
-.It Cm S No \&/ Ar old_pattern Xo
-.No \&/ Ar new_pattern
-.No \&/ Op Cm g
-.Xc
-.Sm on
-.El
-.Ed
-.Pp
-.
-Another example of
-.Ql .Xo
-and enclosure macros: Test the value of a variable.
-.
-.Bd -literal -offset indent
-\&.It Xo
-\&.Ic .ifndef
-\&.Oo \e&! Oc Ns Ar variable Oo
-\&.Ar operator variable ...
-\&.Oc Xc
-.Ed
-.Pp
-.
-produces
-.
-.Bd -filled -offset indent
-.Bl -tag -width flag -compact
-.It Xo
-.Ic .ifndef
-.Oo \&! Oc Ns Ar variable Oo
-.Ar operator variable ...
-.Oc Xc
-.El
-.Ed
-.Pp
-.
-.
-.Sh "PAGE STRUCTURE DOMAIN"
-.
-.Ss "Section Headers"
-.
-The following
-.Ql .Sh
-section header macros are required in every man page.
-The remaining section headers are recommended at the discretion of the
-author writing the manual page.
-The
-.Ql .Sh
-macro is parsed but not generally callable.
-It can be used as an argument in a call to
-.Ql .Sh
-only; it then reactivates the default font for
-.Ql .Sh .
-.Pp
-The default width is 8n.
-.
-.Bl -tag -width ".Li .Sh\ RETURN\ VALUES"
-.It Li ".Sh NAME"
-The
-.Ql ".Sh NAME"
-macro is mandatory.
-If not specified, headers, footers and page layout defaults will not be set
-and things will be rather unpleasant.
-The
-.Em NAME
-section consists of at least three items.
-The first is the
-.Ql .Nm
-name macro naming the subject of the man page.
-The second is the name description macro,
-.Ql .Nd ,
-which separates the subject name from the third item, which is the
-description.
-The description should be the most terse and lucid possible, as the space
-available is small.
-.Pp
-.Ql .Nd
-first prints
-.Ql \- ,
-then all its arguments.
-.
-.It Li ".Sh LIBRARY"
-This section is for section two and three function calls.
-It should consist of a single
-.Ql .Lb
-macro call;
-see
-.Sx "Library Names" .
-.
-.It Li ".Sh SYNOPSIS"
-The
-.Sx SYNOPSIS
-section describes the typical usage of the subject of a man page.
-The macros required are either
-.Ql .Nm ,
-.Ql .Cd ,
-or
-.Ql .Fn
-(and possibly
-.Ql .Fo ,
-.Ql .Fc ,
-.Ql .Fd ,
-and
-.Ql .Ft ) .
-The function name macro
-.Ql .Fn
-is required for manual page sections\~2 and\~3; the command and general name
-macro
-.Ql .Nm
-is required for sections 1, 5, 6, 7, and\~8.
-Section\~4 manuals require a
-.Ql .Nm ,
-.Ql .Fd
-or a
-.Ql .Cd
-configuration device usage macro.
-Several other macros may be necessary to produce the synopsis line as shown
-below:
-.
-.Bd -filled -offset indent
-.Nm cat
-.Op Fl benstuv
-.Op Fl
-.Ar
-.Ed
-.Pp
-.
-The following macros were used:
-.Pp
-.Dl ".Nm cat"
-.Dl ".Op Fl benstuv"
-.Dl ".Op Fl"
-.Dl .Ar
-.
-.It Li ".Sh DESCRIPTION"
-In most cases the first text in the
-.Sx DESCRIPTION
-section is a brief paragraph on the command, function or file, followed by a
-lexical list of options and respective explanations.
-To create such a list, the
-.Ql .Bl
-(begin list),
-.Ql .It
-(list item) and
-.Ql .El
-(end list)
-macros are used (see
-.Sx Lists and Columns
-below).
-.
-.It Li ".Sh IMPLEMENTATION NOTES"
-Implementation specific information should be placed here.
-.
-.It Li ".Sh RETURN VALUES"
-Sections 2, 3 and\~9 function return values should go here.
-The
-.Ql .Rv
-macro may be used to generate text for use in the
-.Sx RETURN VALUES
-section for most section 2 and 3 library functions;
-see
-.Sx "Return Values" .
-.El
-.Pp
-.
-The following
-.Ql .Sh
-section headers are part of the preferred manual page layout and must be
-used appropriately to maintain consistency.
-They are listed in the order in which they would be used.
-.
-.Bl -tag -width ".Li .Sh\ COMPATIBILITY"
-.It Li ".Sh ENVIRONMENT"
-The
-.Em ENVIRONMENT
-section should reveal any related environment variables and clues to their
-behavior and/or usage.
-.
-.It Li ".Sh FILES"
-Files which are used or created by the man page subject should be listed via
-the
-.Ql .Pa
-macro in the
-.Sx FILES
-section.
-.
-.It Li ".Sh EXAMPLES"
-There are several ways to create examples.
-See the
-.Em EXAMPLES
-section below for details.
-.
-.It Li ".Sh DIAGNOSTICS"
-Diagnostic messages from a command should be placed in this section.
-The
-.Ql .Ex
-macro may be used to generate text for use in the
-.Sx DIAGNOSTICS
-section for most section 1, 6 and\~8 commands;
-see
-.Sx "Exit Status" .
-.
-.It Li ".Sh COMPATIBILITY"
-Known compatibility issues (e.g.\& deprecated options or parameters)
-should be listed here.
-.
-.It Li ".Sh ERRORS"
-Specific error handling, especially from library functions (man page
-sections 2, 3, and\~9) should go here.
-The
-.Ql .Er
-macro is used to specify an error (errno).
-.
-.It Li ".Sh SEE ALSO"
-References to other material on the man page topic and cross references to
-other relevant man pages should be placed in the
-.Sx "SEE ALSO"
-section.
-Cross references are specified using the
-.Ql .Xr
-macro.
-Currently
-.Xr refer 1
-style references are not accommodated.
-.Pp
-It is recommended that the cross references are sorted on the section
-number, then alphabetically on the names within a section, and placed
-in that order and comma separated.
-Example:
-.Pp
-.Xr ls 1 ,
-.Xr ps 1 ,
-.Xr group 5 ,
-.Xr passwd 5
-.
-.It Li ".Sh STANDARDS"
-If the command, library function or file adheres to a specific
-implementation such as
-.St -p1003.2
-or
-.St -ansiC
-this should be noted here.
-If the command does not adhere to any standard, its history should be noted
-in the
-.Em HISTORY
-section.
-.
-.It Li ".Sh HISTORY"
-Any command which does not adhere to any specific standards should be
-outlined historically in this section.
-.
-.It Li ".Sh AUTHORS"
-Credits should be placed here.
-Use the
-.Ql .An
-macro for names and the
-.Ql .Aq
-macro for e-mail addresses within optional contact information.
-Explicitly indicate whether the person authored the initial manual page
-or the software or whatever the person is being credited for.
-.It Li ".Sh BUGS"
-Blatant problems with the topic go here.
-.El
-.Pp
-.
-User-specified
-.Ql .Sh
-sections may be added; for example, this section was set with:
-.
-.Bd -literal -offset 15n
-\&.Sh "PAGE STRUCTURE DOMAIN"
-.Ed
-.
-.Ss "Subsection Headers"
-.
-Subsection headers have exactly the same syntax as section headers:
-.Ql .Ss
-is parsed but not generally callable.
-It can be used as an argument in a call to
-.Ql .Ss
-only; it then reactivates the default font for
-.Ql .Ss .
-.Pp
-The default width is 8n.
-.
-.Ss "Paragraphs and Line Spacing"
-.
-.Bl -tag -width ".Li .Pp"
-.It Li .Pp
-The
-.Ql .Pp
-paragraph command may be used to specify a line space where necessary.
-The macro is not necessary after a
-.Ql .Sh
-or
-.Ql .Ss
-macro or before a
-.Ql .Bl
-or
-.Ql .Bd
-macro (which both assert a vertical distance unless the
-.Fl compact
-flag is given).
-.Pp
-The macro is neither callable nor parsed and takes no arguments; an
-alternative name is
-.Ql .Lp .
-.El
-.
-.\" XXX
-.
-.\" This worked with version one, need to redo for version three
-.\" .Pp
-.\" .Ds I
-.\" .Cw (ax+bx+c) \ is\ produced\ by\ \&
-.\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\&
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx\ (
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Va ax
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Sy \+
-.\" .Cx
-.\" .Cl Cx \&(\&
-.\" .Va ax
-.\" .Cx +
-.\" .Va by
-.\" .Cx +
-.\" .Va c )
-.\" .Cx \t
-.\" .Em is produced by
-.\" .Cx \t
-.\" .Li \&.Va by
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Sy \+
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Va c )
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx
-.\" .Cx
-.\" .Cw
-.\" .De
-.\" .Pp
-.\" This example shows the same equation in a different format.
-.\" The spaces
-.\" around the
-.\" .Li \&+
-.\" signs were forced with
-.\" .Li \e :
-.\" .Pp
-.\" .Ds I
-.\" .Cw (ax\ +\ bx\ +\ c) \ is\ produced\ by\ \&
-.\" .\".Cw (ax+bx+c) \&.Va_by_) \&_and_\& \&[?/]m_b1_e1_f1[?/]\&
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx\ (
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Va a
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Sy x
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx \e\ +\e\ \e&
-.\" .Cx
-.\" .Cl Cx \&(\&
-.\" .Va a
-.\" .Sy x
-.\" .Cx \ +\ \&
-.\" .Va b
-.\" .Sy y
-.\" .Cx \ +\ \&
-.\" .Va c )
-.\" .Cx \t
-.\" .Em is produced by
-.\" .Cl Cx \t\t
-.\" .Li \&.Va b
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Sy y
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx \e\ +\e\ \e&
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Va c )
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx
-.\" .Cx
-.\" .Cw
-.\" .De
-.\" .Pp
-.\" The incantation below was
-.\" lifted from the
-.\" .Xr adb 1
-.\" manual page:
-.\" .Pp
-.\" .Ds I
-.\" .Cw \&[?/]m_b1_e1_f1[?/]\& is\ produced\ by
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx Op Sy ?/
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Nm m
-.\" .Cx
-.\" .Cl Cx Op Sy ?/
-.\" .Nm m
-.\" .Ad \ b1 e1 f1
-.\" .Op Sy ?/
-.\" .Cx \t
-.\" .Em is produced by
-.\" .Cx \t
-.\" .Li \&.Ar \e\ b1 e1 f1
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Op Sy ?/
-.\" .Cx
-.\" .Cl Cx \t\t
-.\" .Li \&.Cx
-.\" .Cx
-.\" .Cw
-.\" .De
-.\" .Pp
-.
-.Ss Keeps
-.
-The only keep that is implemented at this time is for words.
-The macros are
-.Ql .Bk
-(begin keep)
-and
-.Ql .Ek
-(end keep).
-The only option that
-.Ql .Bk
-accepts currently is
-.Fl words
-(this is also the default if no option is given) which is useful for
-preventing line breaks in the middle of options.
-In the example for the make command line arguments (see
-.Sx What's in a Name ) ,
-the keep prevented
-.Xr nroff
-from placing up the flag and the argument on separate lines.
-.Pp
-Both macros are neither callable nor parsed.
-.Pp
-More work needs to be done with the keep macros; specifically, a
-.Fl line
-option should be added.
-.
-.Ss "Examples and Displays"
-.
-There are seven types of displays.
-.Pp
-.Bl -tag -width ".Li .D1"
-.It Li .D1
-(This is D-one.)
-Display one line of indented text.
-This macro is parsed but not callable.
-.Pp
-.D1 Fl ldghfstru
-.Pp
-The above was produced by:
-.Li ".D1 Fl ldghfstru" .
-.
-.It Li .Dl
-(This is D-ell.)
-Display one line of indented
-.Em literal
-text.
-The
-.Ql .Dl
-example macro has been used throughout this file.
-It allows the indentation (display) of one line of text.
-Its default font is set to constant width (literal).
-.Ql .Dl
-is parsed but not callable.
-.Pp
-.Dl % ls \-ldg /usr/local/bin
-.Pp
-The above was produced by:
-.Li ".Dl % ls \e\-ldg /usr/local/bin" .
-.
-.It Li .Bd
-Begin display.
-The
-.Ql .Bd
-display must be ended with the
-.Ql .Ed
-macro.
-It has the following syntax:
-.Pp
-.Bd -ragged -compact
-.Bl -tag -width ".Li .Bd" -offset indent
-.It Li .Bd Xo
-.Bro \-literal | \-filled | \-unfilled | \-ragged | \-centered Brc
-.Oo \-offset Ao string Ac Oc Oo \-file Ao file name Ac Oc Oo \-compact Oc Xc
-.El
-.Ed
-.Pp
-.
-.Bl -tag -width ".Fl file Ao Ar file name Ac " -compact
-.It Fl ragged
-Fill, but do not adjust the right margin (only left-justify).
-.It Fl centered
-Center lines between the current left and right margin.
-Note that each single line is centered.
-.It Fl unfilled
-Do not fill; display a block of text as typed, using line breaks as
-specified by the user.
-This can produce overlong lines without warning messages.
-.It Fl filled
-Display a filled block.
-The block of text is formatted (i.e., the text is justified on both the left
-and right side).
-.It Fl literal
-Display block with literal font (usually fixed-width).
-Useful for source code or simple tabbed or spaced text.
-.It Fl file Ao Ar file name Ac
-The file whose name follows the
-.Fl file
-flag is read and displayed before any data enclosed with
-.Ql .Bd
-and
-.Ql .Ed ,
-using the selected display type.
-Any
-.Xr troff/ Ns Nm \-mdoc
-commands in the file will be processed.
-.It Fl offset Ao Ar string Ac
-If
-.Fl offset
-is specified with one of the following strings, the string is interpreted to
-indicate the level of indentation for the forthcoming block of text:
-.
-.Pp
-.Bl -tag -width ".Ar indent-two" -compact
-.It Ar left
-Align block on the current left margin; this is the default mode of
-.Ql .Bd .
-.It Ar center
-Supposedly center the block.
-At this time unfortunately, the block merely gets left aligned about an
-imaginary center margin.
-.It Ar indent
-Indent by one default indent value or tab.
-The default indent value is also used for the
-.Ql .D1
-and
-.Ql .Dl
-macros, so one is guaranteed the two types of displays will line up.
-The indentation value is normally set to\~6n or about two thirds of an inch
-(six constant width characters).
-.It Ar indent\-two
-Indent two times the default indent value.
-.It Ar right
-This
-.Em left
-aligns the block about two inches from the right side of the page.
-This macro needs work and perhaps may never do the right thing within
-.Xr troff .
-.El
-.Pp
-.
-If
-.Ao string Ac
-is a valid numeric expression instead
-.Pf ( Em with a scale indicator other than
-.Sq Em u ) ,
-use that value for indentation.
-The most useful scale indicators are
-.Sq m
-and
-.Sq n ,
-specifying the so-called
-.Em \&Em
-and
-.Em "En square" .
-This is approximately the width of the letters
-.Sq m
-and
-.Sq n
-respectively
-of the current font (for nroff output, both scale indicators give the same
-values).
-If
-.Ao string Ac
-isn't a numeric expression, it is tested whether it is an
-.Nm \-mdoc
-macro name, and the default offset value associated with this macro is used.
-Finally, if all tests fail,
-the width of
-.Ao string Ac
-(typeset with a fixed-width font) is taken as the offset.
-.It Fl compact
-Suppress insertion of vertical space before begin of display.
-.El
-.
-.It Li .Ed
-End display (takes no arguments).
-.El
-.
-.Ss "Lists and Columns"
-.
-There are several types of lists which may be initiated with the
-.Ql .Bl
-begin-list macro.
-Items within the list are specified with the
-.Ql .It
-item macro, and each list must end with the
-.Ql .El
-macro.
-Lists may be nested within themselves and within displays.
-The use of columns inside of lists or lists inside of columns is unproven.
-.Pp
-In addition, several list attributes may be specified such as the width of a
-tag, the list offset, and compactness (blank lines between items allowed or
-disallowed).
-Most of this document has been formatted with a tag style list
-.Pf ( Fl tag ) .
-.Pp
-It has the following syntax forms:
-.
-.Pp
-.Bd -ragged -compact
-.Bl -tag -width ".Li .Bl" -offset indent -compact
-.It Li .Bl Xo
-.Bro \-hang | \-ohang | \-tag | \-diag | \-inset Brc
-.Oo \-width Ao string Ac Oc
-.Oo \-offset Ao string Ac Oc Oo \-compact Oc Xc
-.It Li .Bl Xo
-.No \-column Oo \-offset Ao string Ac Oc
-.Ao string1 Ac Ao string2 Ac ... Xc
-.It Li .Bl Xo
-.Bro \-item | \-enum Oo \-nested Oc | \-bullet | \-hyphen | \-dash Brc
-.Oo \-offset Ao string Ac Oc Oo \-compact Oc Xc
-.El
-.Ed
-.Pp
-.
-And now a detailed description of the list types.
-.
-.Pp
-.Bl -tag -width ".Fl column" -compact
-.It Fl bullet
-A bullet list.
-.
-.Bd -literal -offset indent
-\&.Bl \-bullet \-offset indent \-compact
-\&.It
-Bullet one goes here.
-\&.It
-Bullet two here.
-\&.El
-.Ed
-.Pp
-.
-Produces:
-.
-.Pp
-.Bl -bullet -offset indent -compact
-.It
-Bullet one goes here.
-.It
-Bullet two here.
-.El
-.Pp
-.
-.It Fl dash No ( or Fl hyphen )
-A dash list.
-.
-.Bd -literal -offset indent
-\&.Bl \-dash \-offset indent \-compact
-\&.It
-Dash one goes here.
-\&.It
-Dash two here.
-\&.El
-.Ed
-.Pp
-.
-Produces:
-.
-.Pp
-.Bl -dash -offset indent -compact
-.It
-Dash one goes here.
-.It
-Dash two here.
-.El
-.Pp
-.
-.It Fl enum
-An enumerated list.
-.
-.Bd -literal -offset indent
-\&.Bl \-enum \-offset indent \-compact
-\&.It
-Item one goes here.
-\&.It
-And item two here.
-\&.El
-.Ed
-.Pp
-.
-The result:
-.
-.Pp
-.Bl -enum -offset indent -compact
-.It
-Item one goes here.
-.It
-And item two here.
-.El
-.Pp
-.
-If you want to nest enumerated lists, use the
-.Fl nested
-flag (starting with the second-level list):
-.
-.Bd -literal -offset indent
-\&.Bl \-enum \-offset indent \-compact
-\&.It
-Item one goes here
-\&.Bl \-enum \-nested \-compact
-\&.It
-Item two goes here.
-\&.It
-And item three here.
-\&.El
-\&.It
-And item four here.
-\&.El
-.Ed
-.Pp
-.
-Result:
-.
-.Pp
-.Bl -enum -offset indent -compact
-.It
-Item one goes here.
-.Bl -enum -nested -compact
-.It
-Item two goes here.
-.It
-And item three here.
-.El
-.It
-And item four here.
-.El
-.Pp
-.
-.It Fl item
-A list of type
-.Fl item
-without list markers.
-.
-.Bd -literal -offset indent
-\&.Bl \-item \-offset indent
-\&.It
-Item one goes here.
-Item one goes here.
-Item one goes here.
-\&.It
-Item two here.
-Item two here.
-Item two here.
-\&.El
-.Ed
-.Pp
-.
-Produces:
-.
-.Pp
-.Bl -item -offset indent
-.It
-Item one goes here.
-Item one goes here.
-Item one goes here.
-.It
-Item two here.
-Item two here.
-Item two here.
-.El
-.Pp
-.
-.It Fl tag
-A list with tags.
-Use
-.Fl width
-to specify the tag width.
-.
-.Pp
-.Bl -tag -width "PPID" -compact -offset indent
-.It SL
-sleep time of the process (seconds blocked)
-.It PAGEIN
-number of disk
-.Tn I/O Ns 's
-resulting from references by the process
-to pages not loaded in core.
-.It UID
-numerical user-id of process owner
-.It PPID
-numerical id of parent of process priority
-(non-positive when in non-interruptible wait)
-.El
-.Pp
-.
-The raw text:
-.
-.Bd -literal -offset indent
-\&.Bl \-tag \-width "PPID" \-compact \-offset indent
-\&.It SL
-sleep time of the process (seconds blocked)
-\&.It PAGEIN
-number of disk
-\&.Tn I/O Ns 's
-resulting from references by the process
-to pages not loaded in core.
-\&.It UID
-numerical user\-id of process owner
-\&.It PPID
-numerical id of parent of process priority
-(non\-positive when in non\-interruptible wait)
-\&.El
-.Ed
-.Pp
-.
-.It Fl diag
-Diag lists create section four diagnostic lists and are similar to inset
-lists except callable macros are ignored.
-The
-.Fl width
-flag is not meaningful in this context.
-.Pp
-Example:
-.
-.Bd -literal -offset indent
-\&.Bl \-diag
-\&.It You can't use Sy here.
-The message says all.
-\&.El
-.Ed
-.Pp
-.
-produces
-.
-.Bl -diag
-.It You can't use Sy here.
-The message says all.
-.El
-.Pp
-.
-.It Fl hang
-A list with hanging tags.
-.
-.Bl -hang -offset indent
-.It Em Hanged
-labels appear similar to tagged lists when the
-label is smaller than the label width.
-.It Em Longer hanged list labels
-blend into the paragraph unlike
-tagged paragraph labels.
-.El
-.Pp
-And the unformatted text which created it:
-.
-.Bd -literal -offset indent
-\&.Bl \-hang \-offset indent
-\&.It Em Hanged
-labels appear similar to tagged lists when the
-label is smaller than the label width.
-\&.It Em Longer hanged list labels
-blend into the paragraph unlike
-tagged paragraph labels.
-\&.El
-.Ed
-.Pp
-.
-.It Fl ohang
-Lists with overhanging tags do not use indentation for the items; tags are
-written to a separate line.
-.Pp
-.Bl -ohang -offset indent
-.It Sy SL
-sleep time of the process (seconds blocked)
-.It Sy PAGEIN
-number of disk
-.Tn I/O Ns 's
-resulting from references by the process
-to pages not loaded in core.
-.It Sy UID
-numerical user-id of process owner
-.It Sy PPID
-numerical id of parent of process priority
-(non-positive when in non-interruptible wait)
-.El
-.Pp
-.
-The raw text:
-.
-.Bd -literal -offset indent
-\&.Bl \-ohang \-offset indent
-\&.It Sy SL
-sleep time of the process (seconds blocked)
-\&.It Sy PAGEIN
-number of disk
-\&.Tn I/O Ns 's
-resulting from references by the process
-to pages not loaded in core.
-\&.It Sy UID
-numerical user\-id of process owner
-\&.It Sy PPID
-numerical id of parent of process priority
-(non\-positive when in non\-interruptible wait)
-\&.El
-.Ed
-.Pp
-.
-.It Fl inset
-Here is an example of inset labels:
-.Bl -inset -offset indent
-.It Em Tag
-The tagged list (also called a tagged paragraph)
-is the most common type of list used in the
-Berkeley manuals.
-Use a
-.Fl width
-attribute as described below.
-.It Em Diag
-Diag lists create section four diagnostic lists
-and are similar to inset lists except callable
-macros are ignored.
-.It Em Hang
-Hanged labels are a matter of taste.
-.It Em Ohang
-Overhanging labels are nice when space is constrained.
-.It Em Inset
-Inset labels are useful for controlling blocks of
-paragraphs and are valuable for converting
-.Nm \-mdoc
-manuals to other formats.
-.El
-.Pp
-Here is the source text which produced the above example:
-.
-.Bd -literal -offset indent
-\&.Bl \-inset \-offset indent
-\&.It Em Tag
-The tagged list (also called a tagged paragraph)
-is the most common type of list used in the
-Berkeley manuals.
-\&.It Em Diag
-Diag lists create section four diagnostic lists
-and are similar to inset lists except callable
-macros are ignored.
-\&.It Em Hang
-Hanged labels are a matter of taste.
-\&.It Em Ohang
-Overhanging labels are nice when space is constrained.
-\&.It Em Inset
-Inset labels are useful for controlling blocks of
-paragraphs and are valuable for converting
-\&.Nm \-mdoc
-manuals to other formats.
-\&.El
-.Ed
-.Pp
-.
-.It Fl column
-This list type generates multiple columns.
-The number of columns and the width of each column is determined by the
-arguments to the
-.Fl column
-list,
-.Aq Ar string1 ,
-.Aq Ar string2 ,
-etc.
-If
-.Aq Ar stringN
-starts with a
-.Ql .\&
-(dot) immediately followed by a valid
-.Nm \-mdoc
-macro name, interpret
-.Aq Ar stringN
-and use the width of the result.
-Otherwise, the width of
-.Aq Ar stringN
-(typeset with a fixed-width font) is taken as the
-.Ar N Ns th
-column width.
-.Pp
-Each
-.Ql .It
-argument is parsed to make a row, each column within the row is a separate
-argument separated by a tab or the
-.Ql .Ta
-macro.
-.Pp
-The table:
-.
-.Bl -column -offset indent ".Sy String" ".Sy Nroff" ".Sy Troff"
-.It Sy String Ta Sy Nroff Ta Sy Troff
-.It Li <= Ta <= Ta \*(<=
-.It Li >= Ta >= Ta \*(>=
-.El
-.Pp
-.
-was produced by:
-.
-.Bd -literal
-\&.Bl \-column \-offset indent ".Sy String" ".Sy Nroff" ".Sy Troff"
-\&.It Sy String Ta Sy Nroff Ta Sy Troff
-\&.It Li <= Ta <= Ta \e*(<=
-\&.It Li >= Ta >= Ta \e*(>=
-\&.El
-.Ed
-.Pp
-.
-Don't abuse this list type!
-For more complicated cases it might be far better and easier to use
-.Xr tbl 1 ,
-the table preprocessor.
-.El
-.Pp
-.
-Other keywords:
-.
-.Bl -tag -width ".Fl indent Ao Ar string Ac"
-.It Fl width Ao Ar string Ac
-If
-.Aq Ar string
-starts with a
-.Ql .\&
-(dot) immediately followed by a valid
-.Nm \-mdoc
-macro name, interpret
-.Aq Ar string
-and use the width of the result.
-Almost all lists in this document use this option.
-.Pp
-Example:
-.
-.Bd -literal -offset indent
-\&.Bl \-tag \-width ".Fl test Ao Ar string Ac"
-\&.It Fl test Ao Ar string Ac
-This is a longer sentence to show how the
-\&.Fl width
-flag works in combination with a tag list.
-\&.El
-.Ed
-.Pp
-.
-gives:
-.
-.Bl -tag -width ".Fl test Ao Ar string Ac"
-.It Fl test Ao Ar string Ac
-This is a longer sentence to show how the
-.Fl width
-flag works in combination with a tag list.
-.El
-.Pp
-.
-(Note that the current state of
-.Nm \-mdoc
-is saved before
-.Aq Ar string
-is interpreted; afterwards, all variables are restored again.
-However, boxes (used for enclosures) can't be saved in
-.Tn GNU
-.Xr troff 1 ;
-as a consequence, arguments must always be
-.Em balanced
-to avoid nasty errors.
-For example, do not write
-.Ql ".Ao Ar string"
-but
-.Ql ".Ao Ar string Xc"
-instead if you really need only an opening angle bracket.)
-.Pp
-Otherwise, if
-.Aq Ar string
-is a valid numeric expression
-.Em ( with a scale indicator other than
-.Sq Em u ) ,
-use that value for indentation.
-The most useful scale indicators are
-.Sq m
-and
-.Sq n ,
-specifying the so-called
-.Em \&Em
-and
-.Em "En square" .
-This is approximately the width of the letters
-.Sq m
-and
-.Sq n
-respectively
-of the current font (for nroff output, both scale indicators give the same
-values).
-If
-.Aq Ar string
-isn't a numeric expression, it is tested whether it is an
-.Nm \-mdoc
-macro name, and the default width value associated with this macro is used.
-Finally, if all tests fail,
-the width of
-.Aq Ar string
-(typeset with a fixed-width font) is taken as the width.
-.Pp
-If a width is not specified for the tag list type, every time
-.Ql .It
-is invoked, an attempt is made to determine an appropriate width.
-If the first argument to
-.Ql .It
-is a callable macro, the default width for that macro will be used;
-otherwise, the default width of
-.Ql .No
-is used.
-.It Fl offset Ao Ar string Ac
-If
-.Aq Ar string
-is
-.Ar indent ,
-a default indent value (normally set to\~6n, similar to the value used in
-.Ql .Dl
-or
-.Ql .Bd )
-is used.
-If
-.Aq Ar string
-is a valid numeric expression instead
-.Pf ( Em with a scale indicator other than
-.Sq Em u ) ,
-use that value for indentation.
-The most useful scale indicators are
-.Sq m
-and
-.Sq n ,
-specifying the so-called
-.Em \&Em
-and
-.Em "En square" .
-This is approximately the width of the letters
-.Sq m
-and
-.Sq n
-respectively
-of the current font (for nroff output, both scale indicators give the same
-values).
-If
-.Aq Ar string
-isn't a numeric expression, it is tested whether it is an
-.Nm \-mdoc
-macro name, and the default offset value associated with this macro is used.
-Finally, if all tests fail,
-the width of
-.Aq Ar string
-(typeset with a fixed-width font) is taken as the offset.
-.It Fl compact
-Suppress insertion of vertical space before the list and between list items.
-.El
-.
-.
-.Sh "MISCELLANEOUS MACROS"
-.
-Here a list of the remaining macros which do not fit well into one of the
-above sections.
-We couldn't find real examples for the following macros:
-.Ql .Me
-and
-.Ql .Ot .
-They are documented here for completeness \- if you know how to use them
-properly please send a mail to
-.Mt bug-groff@gnu.org
-(including an example).
-.
-.Bl -tag -width ".Li .Bt"
-.It Li .Bt
-prints
-.
-.Bd -ragged -offset indent
-.Bt
-.Ed
-.Pp
-It is neither callable nor parsed and takes no arguments.
-.
-.It Li .Fr
-.Pp
-.Dl Usage: .Fr Ao function return value Ac ...
-.Pp
-Don't use this macro.
-It allows a break right before the return value (usually a single digit)
-which is bad typographical behaviour.
-Use
-.Ql \e\[ti]
-to tie the return value to the previous word.
-.
-.It Li .Hf
-Use this macro to include a (header) file literally.
-It first prints
-.Ql File:
-followed by the file name, then the contents of
-.Ao file Ac .
-.Pp
-.Dl Usage: .Hf Ao file Ac
-.Pp
-It is neither callable nor parsed.
-.
-.It Li .Lk
-To be written.
-.
-.It Li .Me
-Exact usage unknown.
-The documentation in the
-.Nm \-mdoc
-source file describes it as a macro for
-.Dq "menu entries" .
-.Pp
-Its default width is 6n.
-.
-.It Li .Mt
-To be written.
-.
-.It Li .Ot
-Exact usage unknown.
-The documentation in the
-.Nm \-mdoc
-source file describes it as
-.Dq old function type (fortran) .
-.
-.It Li .Sm
-Activate (toggle) space mode.
-.Pp
-.Dl Usage: .Sm Oo on | off Oc ...
-.Pp
-If space mode is off, no spaces between macro arguments are inserted.
-If called without a parameter (or if the next parameter is neither
-.Ql on
-nor
-.Ql off ,
-.Ql .Sm
-toggles space mode.
-.
-.It Li .Ud
-prints
-.
-.Bd -ragged -offset indent
-.Ud
-.Ed
-.Pp
-It is neither callable nor parsed and takes no arguments.
-.El
-.
-.
-.Sh "PREDEFINED STRINGS"
-.
-The following strings are predefined:
-.Pp
-.TS
-lb lb lb lb
-l l l l.
-String Nroff   Troff   Meaning
-<=     <=      \*[<=]  less equal
->=     >=      \*[>=]  greater equal
-Rq     ''      \*[Rq]  right double quote
-Lq     ``      \*[Lq]  left double quote
-ua     ^       \*[ua]  upwards arrow
-aa     \'      \*[aa]  acute accent
-ga     \`      \*[ga]  grave accent
-q      \&"     \*[q]   straight double quote
-Pi     pi      \*[Pi]  greek pi
-Ne     !=      \*[Ne]  not equal
-Le     <=      \*[Le]  less equal
-Ge     >=      \*[Ge]  greater equal
-Lt     <       \*[Lt]  less than
-Gt     >       \*[Gt]  greater than
-Pm     +\-     \*[Pm]  plus minus
-If     infinity        \*[If]  infinity
-Am     \*[Am]  \*[Am]  ampersand
-Na     \*[Na]  \*[Na]  not a number
-Ba     \*[Ba]  \*[Ba]  vertical bar
-.TE
-.Pp
-The names of the columns
-.Sy Nroff
-and
-.Sy Troff
-are a bit misleading;
-.Sy Nroff
-shows the
-.Tn ASCII
-representation, while
-.Sy Troff
-gives the best glyph form available.
-For example, a Unicode enabled
-.Tn TTY Ns - Ns
-device will have proper glyph representations for all strings, whereas the
-enhancement for a Latin1
-.Tn TTY Ns - Ns
-device is only the plus-minus sign.
-.Pp
-String names which consist of two characters can be written as
-.Ql \e*(xx ;
-string names which consist of one character can be written as
-.Ql \e*x .
-A generic syntax for a string name of any length is
-.Ql \e*[xxx]
-(this is a
-.Tn GNU
-.Xr troff 1
-extension).
-.
-.
-\#
-\#=====================================================================
-\#
-.Sh DIAGNOSTICS
-.
-The debugging macro
-.Ql .Db
-available in previous versions of
-.Nm \-mdoc
-has been removed since
-.Tn GNU
-.Xr troff 1
-provides better facilities to check parameters; additionally, many error and
-warning messages have been added to this macro package, making it both more
-robust and verbose.
-.Pp
-The only remaining debugging macro is
-.Ql .Rd
-which yields a register dump of all global registers and strings.
-A normal user will never need it.
-.
-.
-.Sh "FORMATTING WITH GROFF, TROFF, AND NROFF"
-.
-By default, the package inhibits page breaks, headers, and footers if
-displayed with a
-.Tn TTY
-device like
-.Sq latin1
-or
-.Sq unicode ,
-to make the manual more efficient for viewing on-line.
-This behaviour can be changed (e.g.\& to create a hardcopy of the
-.Tn TTY
-output) by setting the register
-.Ql cR
-to zero while calling
-.Xr groff 1 ,
-resulting in multiple pages instead of a single, very long page:
-.Pp
-.Dl groff \-Tlatin1 \-rcR=0 \-mdoc foo.man > foo.txt
-.Pp
-For double-sided printing, set register
-.Ql D
-to\~1:
-.Pp
-.Dl groff \-Tps \-rD1 \-mdoc foo.man > foo.ps
-.Pp
-To change the document font size to 11pt or 12pt, set register
-.Ql S
-accordingly:
-.Pp
-.Dl groff \-Tdvi \-rS11 \-mdoc foo.man > foo.dvi
-.Pp
-Register
-.Ql S
-is ignored for
-.Tn TTY
-devices.
-.Pp
-The line and title length can be changed by setting the registers
-.Ql LL
-and
-.Ql LT ,
-respectively:
-.Pp
-.Dl groff \-Tutf8 \-rLL=100n \-rLT=100n \-mdoc foo.man | less
-.Pp
-If not set, both registers default to 78n for TTY devices and 6.5i
-otherwise.
-.
-.
-.Sh FILES
-.
-.Bl -tag -width mdoc/doc-ditroff -compact
-.It Pa doc.tmac
-The main manual macro package.
-.It Pa mdoc.tmac
-A wrapper file to call
-.Pa doc.tmac .
-.It Pa mdoc/doc-common
-Common strings, definitions, stuff related typographic output.
-.It Pa mdoc/doc-nroff
-Definitions used for a
-.Tn TTY
-output device.
-.It Pa mdoc/doc-ditroff
-Definitions used for all other devices.
-.It Pa mdoc.local
-Local additions and customizations.
-.It Pa andoc.tmac
-Use this file if you don't know whether the
-.Nm \-mdoc
-or the
-.Nm \-man
-package should be used.
-Multiple man pages (in either format) can be handled.
-.El
-.
-.
-.Sh "SEE ALSO"
-.
-.Xr groff 1 ,
-.Xr man 1 ,
-.Xr troff 1 ,
-.Xr groff_man 7
-.
-.
-.Sh BUGS
-.
-Section 3f has not been added to the header routines.
-.Pp
-.Ql \&.Nm
-font should be changed in
-.Em NAME
-section.
-.Pp
-.Ql \&.Fn
-needs to have a check to prevent splitting up
-if the line length is too short.
-Occasionally it
-separates the last parenthesis, and sometimes
-looks ridiculous if a line is in fill mode.
-.Pp
-The list and display macros do not do any keeps
-and certainly should be able to.
-.\" Note what happens if the parameter list overlaps a newline
-.\" boundary.
-.\" to make sure a line boundary is crossed:
-.\" .Bd -literal
-.\" \&.Fn struct\e\ dictionarytable\e\ *dictionarylookup struct\e\ dictionarytable\e\ *tab[]
-.\" .Ed
-.\" .Pp
-.\" produces, nudge nudge,
-.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] ,
-.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] ,
-.\" nudge
-.\" .Fn struct\ dictionarytable\ *dictionarylookup char\ *h struct\ dictionarytable\ *tab[] .
-.\" .Pp
-.\" If double quotes are used, for example:
-.\" .Bd -literal
-.\" \&.Fn \*qstruct dictionarytable *dictionarylookup\*q \*qchar *h\*q \*qstruct dictionarytable *tab[]\*q
-.\" .Ed
-.\" .Pp
-.\" produces, nudge nudge,
-.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" ,
-.\" nudge
-.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" ,
-.\" nudge
-.\" .Fn "struct dictionarytable *dictionarylookup" "char *h" "struct dictionarytable *tab[]" .
-.\" .Pp
-.\" Not a pretty sight...
-.\" In a paragraph, a long parameter containing unpaddable spaces as
-.\" in the former example will cause
-.\" .Xr troff
-.\" to break the line and spread
-.\" the remaining words out.
-.\" The latter example will adjust nicely to
-.\" justified margins, but may break in between an argument and its
-.\" declaration.
-.\" In
-.\" .Xr nroff
-.\" the right margin adjustment is normally ragged and the problem is
-.\" not as severe.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/tmac/groff_me.7.man b/tmac/groff_me.7.man
new file mode 100644 (file)
index 0000000..ab3f4ae
--- /dev/null
@@ -0,0 +1,527 @@
+'\" t
+.TH GROFF_ME @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_me \- \(lqme\(rq macro package for formatting documents with GNU \
+roff
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1980 The Regents of the University of California.
+.\" All rights reserved.
+.\"
+.\" Redistribution and use in source and binary forms are permitted
+.\" provided that the above copyright notice and this paragraph are
+.\" duplicated in all such forms and that any documentation,
+.\" advertising materials, and other materials related to such
+.\" distribution and use acknowledge that the software was developed
+.\" by the University of California, Berkeley.  The name of the
+.\" University may not be used to endorse or promote products derived
+.\" from this software without specific prior written permission.
+.\" THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
+.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
+.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
+.\"
+.\"    @(#)me.7        6.4 (Berkeley) 4/13/90
+.\"
+.\" Modified for groff by jjc@jclark.com
+.\" Changed to use TBL and eliminate low-level troff hackery by ESR
+.\" (this enables it to be lifted to structural markup).
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY "groff \-me"
+.RI [ option
+\&.\|.\|.\&]
+.RI [ input-file
+\&.\|.\|.\&]
+.YS
+.SY "groff \-m me"
+.RI [ option
+\&.\|.\|.\&]
+.RI [ input-file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+The
+.I me
+package of macro definitions for the
+.I roff
+language provides a convenient facility for preparing technical papers
+in various formats.
+.
+This manual page describes the GNU version of the
+.I me
+macros, which is
+part of the
+.I groff
+document formatting system.
+.
+This version can be used with both GNU
+.I troff
+and Unix
+.IR troff .
+.
+.
+.PP
+Many
+.I roff
+requests are unsafe in conjunction with this package; however, the
+following requests may be used with impunity after the first
+.BR .pp :
+.TS
+l l.
+\fB.bp\fP      begin new page
+\fB.br\fP      break output line here
+\fB.sp\fP \fIn\fP      insert \fIn\fP spacing lines
+\fB.ls\fP \fIn\fP      (line spacing) \fIn\fP=1 single, \fIn\fP=2 double space
+\fB.na\fP      no alignment of right margin
+\fB.ce\fP \fIn\fP      center next \fIn\fP lines
+\fB.ul\fP \fIn\fP      underline next \fIn\fP lines
+.TE
+.PP
+.I Note:
+In contrast to its behavior with other macro packages and \(lqraw\(rq
+.IR roff ,
+when using the
+.I me
+package,
+the
+.B .sp
+request will
+.I not
+put space at the top of a page.
+.
+.
+.PP
+Output of the
+.IR pic ,
+.IR eqn ,
+.IR refer ,
+and
+.I tbl
+preprocessors
+is acceptable as input.
+.
+.
+.\" ====================================================================
+.SS Macro Reference
+.\" ====================================================================
+.
+Numeric arguments to macros are denoted with lowercase letters and
+string arguments with uppercase.
+.
+An optional macro argument such as
+.I x
+appears in brackets,
+.BI [ x \/\c
+.BR ] .
+.
+Note that arguments to macros generally must be quoted if they contain
+whitespace.
+.
+An exception is the argument to header and footer macros, which require
+some explanation.
+They take the form
+.RI \(lq c
+.I left c middle c right
+.IR c \(rq,
+with spaces added here for clarity.
+The strings
+.IR left ,
+.IR middle ,
+and
+.I right
+correspond to their page placement and can contain unprotected
+whitespace, but must not contain the (non-space) character
+.IR c ,
+which delimits them.
+For brevity, the table presents header and footer arguments as
+.IR clcmcrc .
+Popular choices for
+.I c
+are the ASCII apostrophe
+.RB \(lq \(aq \(rq
+and the ASCII double quote
+.RB \(lq \(dq \(rq.
+.
+.
+.PP
+This list is incomplete;
+some requests are too complex to summarize in a table, and some that
+are listed below accept additional arguments not shown.
+See the
+.I \-me Reference Manual
+for interesting details.
+.
+.
+.PP
+.na
+.TS
+l l l lx.
+Request        Initial Causes  Explanation
+       Value   Break
+_
+\&.(c  \-      yes     T{
+Begin centered block.
+T}
+\&.(d  \-      no      T{
+Begin delayed text.
+T}
+\&.(f  \-      no      T{
+Begin footnote.
+T}
+\&.(l  \-      yes     Begin list.
+\&.(q  \-      yes     T{
+Begin major quote.
+T}
+\&.(x [\fIX\fP]        \-      no      T{
+Begin item in index (named
+.IR X ).
+T}
+\&.(z  \-      no      T{
+Begin floating keep.
+T}
+\&.)c  \-      yes     T{
+End centered block.
+T}
+\&.)d  \-      yes     T{
+End delayed text.
+T}
+\&.)f  \-      yes     T{
+End footnote.
+T}
+\&.)l  \-      yes     End list.
+\&.)q  \-      yes     T{
+End major quote.
+T}
+\&.)x  \-      yes     T{
+End index item.
+T}
+\&.)z  \-      yes     T{
+End floating keep.
+T}
+\&.++ \fIM\fP [\fIclcmcrc\fP]  \-      no      T{
+Define paper section as
+.IR M ,
+which must be one of
+.B C
+(chapter),
+.B A
+(appendix),
+.B P
+(preliminary, i.e., front matter or table of contents),
+.B AB
+(abstract),
+.B B
+(bibliography),
+.B RC
+(chapters renumbered from page one each chapter),
+or
+.B RA
+(appendix renumbered from page one)
+(and set page header to
+.IR clcmcrc ).
+T}
+\&.+c [\fIT\fP]        \-      yes     T{
+Begin chapter (or appendix, etc., as set by
+.BR .++ )
+(with title
+.IR T ).
+T}
+\&.1c  1       yes     T{
+One-column format on a new page.
+T}
+\&.2c  1       yes     T{
+Two-column format.
+T}
+\&.EN  \-      yes     T{
+Space after equation
+produced by
+.I eqn
+or
+.IR neqn .
+T}
+\&.EQ [\fIM\fP [\fIT\fP]]      \-      yes     T{
+Begin displayed equation (with indentation
+.IR M ,
+which must be one of
+.B C
+(centered, default),
+.B I
+(indented),
+or
+.B L
+(justified left) (and title
+.I T
+in right margin)).
+T}
+\&.GE  \-      yes     T{
+End \fIgremlin\fP picture.
+T}
+\&.GS  \-      yes     T{
+Begin \fIgremlin\fP picture.
+T}
+\&.PE  \-      yes     T{
+End \fIpic\fP picture.
+T}
+\&.PS  \-      yes     T{
+Begin \fIpic\fP picture.
+T}
+\&.TE  \-      yes     T{
+End
+.I tbl
+table.
+T}
+\&.TH  \-      yes     T{
+End heading of
+.I tbl
+table.
+T}
+\&.TS [\fBH\fP]        \-      yes     T{
+Begin
+.I tbl
+table; if
+.BR H ,
+table repeats heading on each page.
+T}
+\&.b [\fIX\fP [\fIY\fP]]       \-      no      T{
+Print
+.I X
+in bold (appending
+.I Y
+in the previous font); if no arguments, switch to bold.
+T}
+\&.ba \fIn\fP  0       yes     T{
+Augment the base indent (for regular text, like paragraphs)
+by
+.IR n .
+T}
+\&.bc  \-      yes     T{
+Begin new column.
+T}
+\&.bi [\fIX\fP [\fIY\fP]]      \-      no      T{
+Print
+.I X
+in bold italics (appending
+.I Y
+in the previous font); if no arguments, switch to bold italics.
+T}
+\&.bu  \-      yes     T{
+Begin bulleted paragraph.
+T}
+\&.bx [\fIX\fP [\fIY\fP]]      \-      no      T{
+Print \fIX\fP in a box (with Y appended).
+Renders reliably only in no-fill mode.
+T}
+\&.ef \fIclcmcrc\fP    """"    no      T{
+Set even-numbered page footer.
+T}
+\&.eh \fIclcmcrc\fP    """"    no      T{
+Set even-numbered page header.
+T}
+\&.fo \fIclcmcrc\fP    """"    no      T{
+Set page footer.
+T}
+\&.hx  \-      no      T{
+Suppress headers and footers on next page.
+T}
+\&.he \fIclcmcrc\fP    """"    no      T{
+Set page header.
+T}
+\&.hl  \-      yes     T{
+Draw a horizontal line.
+T}
+\&.i [\fIX\fP [\fIY\fP]]       \-      no      T{
+Print
+.I X
+in italics (appending
+.I Y
+in the previous font); if no arguments, switch to italics.
+T}
+\&.ip [\fIX\fP [\fIn\fP]]      \fIn\fP=5n      yes     T{
+Start indented paragraph (with hanging tag
+.I X
+(and indentation
+.IR n )).
+T}
+\&.lp  \-      yes     T{
+Begin paragraph with first line flush left.
+T}
+\&.np  1       yes     T{
+Start numbered paragraph.
+T}
+\&.of \fIclcmcrc\fP    """"    no      T{
+Set odd-numbered page footer.
+T}
+\&.oh \fIclcmcrc\fP    """"    no      T{
+Set odd-numbered page header.
+T}
+\&.pd  \-      yes     T{
+Print delayed text.
+T}
+\&.pp  \-      yes     T{
+Begin paragraph with indented first line.
+T}
+\&.r [\fIX\fP [\fIY\fP]]       \-      no      T{
+Print
+.I X
+in roman (appending
+.I Y
+in the previous font); if no arguments, switch to roman.
+T}
+\&.re  0.5i    no      T{
+Reset tabs to default values.
+T}
+\&.sh [\fIn\fP [\fIT\fP]]      \fIn\fP=1       yes     T{
+Start numbered section; print section number (set to
+.I n
+(and title
+.IR T ))
+in bold.
+T}
+\&.sk  \-      no      T{
+Leave the next page blank.
+Only one page is remembered ahead.
+T}
+\&.sm \fIX\fP [\fIY\fP]        \-      no      T{
+Print
+.I X
+in a smaller point size (appending
+.I Y
+at the previous size).
+T}
+\&.sz \fIn\fP  10p     no      T{
+Augment the point size by
+.I n
+points.
+T}
+\&.tp  \-      yes     T{
+Begin title page.
+T}
+\&.u \fIX\fP [\fIY\fP] \-      no      T{
+Underline
+.I X
+(appending
+.I Y
+without underlining).
+Renders reliably only in no-fill mode.
+T}
+\&.uh [\fIT\fP]        \-      yes     T{
+Start unnumbered section (and print title
+.I T
+in bold).
+T}
+\&.xp [\fIX\fP]        \-      no      T{
+Print index (named
+.IR X ).
+T}
+.TE
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.I @MACRODIR@/me.tmac
+(a wrapper file for
+.IR e.tmac )
+.br
+.I @MACRODIR@/e.tmac
+.
+.
+.\" ====================================================================
+.SH NOTES
+.\" ====================================================================
+.
+Early
+.I roff
+macro packages limited themselves to a single-letter namespace
+.RI ( mm ,
+.IR ms ,
+.IR mv ,
+.IR mn ,
+etc.).
+.
+.\" 'When I started writing the -me macros it began as something in my
+.\" private tree (I don't remember what I called it).  Then some other
+.\" folks on the INGRES project wanted to use it, but our system admin
+.\" at the time didn't want to dicker with the system namespace at the
+.\" behest of a mere undergraduate, so he didn't like anything that was
+.\" actually descriptive lest people think it was "official".  He
+.\" finally consented to "-meric" (which I always hated), since it was
+.\" obviously non-official.  By the time my macros became popular around
+.\" Berkeley it got shortened to "-me", much to my relief.
+.\"
+.\" Of course, if AT&T had been willing to let Berkeley have -ms then
+.\" most likely -me would never have happened at all.  Without a macro
+.\" package, nroff/troff is basically unusable; -me stepped into the
+.\" vacuum.' -- Eric Allman
+.\"
+.\" https://minnie.tuhs.org//pipermail/tuhs/2018-November/015412.html
+.
+The \(lqe\(rq in \(lqme\(rq stands for \(lqEric P.\& Allman\(rq,
+who wrote the macro package and the original technical papers
+documenting it while an undergraduate at the University of California.
+.
+.
+.\" ====================================================================
+.SH SEE ALSO
+.\" ====================================================================
+.
+.BR groff (1),
+.BR troff (1)
+.
+.
+.PP
+Two manuals are available in source and rendered form.
+.
+On your system,
+they may be compressed and/or available in additional formats.
+.
+.
+.TP
+.I @DOCDIR@/meintro.me
+.TQ
+.I @DOCDIR@/meintro.ps
+is
+.IR "Writing Papers with Groff Using \-me" ,
+by Eric P.\& Allman and James Clark.
+.
+.
+.TP
+.I @DOCDIR@/meref.me
+.TQ
+.I @DOCDIR@/meref.ps
+is the
+.IR "\-me Reference Manual" ,
+by Eric P.\& Allman and James Clark.
+.
+.
+.PP
+For preprocessors supported by
+.IR me ,
+see
+.BR eqn (1),
+.BR grn (1),
+.BR pic (1),
+.BR refer (1),
+and
+.BR tbl (1).
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" tab-with: 20
+.\" End:
+.\" vim: set filetype=nroff tabstop=20:
diff --git a/tmac/groff_me.man b/tmac/groff_me.man
deleted file mode 100644 (file)
index 2a54bfd..0000000
+++ /dev/null
@@ -1,354 +0,0 @@
-'\" t
-.hc %
-.TH GROFF_ME @MAN7EXT@ "@MDATE@" "@VERSION@"
-.UC 3
-.SH NAME
-groff_me \- troff macros for formatting papers
-.
-.
-.\" Copyright (C) 1980 The Regents of the University of California.
-.\" All rights reserved.
-.\"
-.\" Redistribution and use in source and binary forms are permitted
-.\" provided that the above copyright notice and this paragraph are
-.\" duplicated in all such forms and that any documentation,
-.\" advertising materials, and other materials related to such
-.\" distribution and use acknowledge that the software was developed
-.\" by the University of California, Berkeley.  The name of the
-.\" University may not be used to endorse or promote products derived
-.\" from this software without specific prior written permission.
-.\" THIS SOFTWARE IS PROVIDED ``AS IS'' AND WITHOUT ANY EXPRESS OR
-.\" IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
-.\" WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
-.\"
-.\"    @(#)me.7        6.4 (Berkeley) 4/13/90
-.\"
-.\" Modified for groff by jjc@jclark.com
-.\" Changed to use TBL and eliminate low-level troff hackery by ESR
-.\" (this enables it to be lifted to structural markup).
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B "groff \-me"
-[ options ]
-file ...
-.br
-.B "groff \-m\ me"
-[ options ]
-file ...
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the GNU version of the \-me macros,
-which is part of the groff document formatting system.
-.
-This version can be used with both GNU troff and Unix troff.
-.
-This package of
-.I troff
-macro definitions provides a canned formatting
-facility for technical papers in various formats.
-.
-.
-.PP
-The macro requests are defined below.
-.
-Many
-.I troff
-requests are unsafe in conjunction with this package, however, these
-requests may be used with impunity after the first \&.pp:
-.TS
-l l.
-\&.bp  begin new page
-\&.br  break output line here
-\&.sp n        insert n spacing lines
-\&.ls n        (line spacing) n=1 single, n=2 double space
-\&.na  no alignment of right margin
-\&.ce n        center next n lines
-\&.ul n        underline next n lines
-.TE
-.PP
-Output of the
-.I pic,
-.I eqn,
-.I refer,
-and
-.I tbl
-preprocessors
-is acceptable as input.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-/usr/share/groff/1.21/tmac/me.tmac (a wrapper file for e.tmac)
-.br
-/usr/share/groff/1.21/tmac/e.tmac
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff (1),
-.BR troff (1)
-.br
-\-me Reference Manual, Eric P.\& Allman
-.br
-Writing Papers with Groff Using \-me
-.
-.
-.\" --------------------------------------------------------------------
-.SH REQUESTS
-.\" --------------------------------------------------------------------
-.
-This list is incomplete;
-see
-.I "The \-me Reference Manual"
-for interesting details.
-.
-.
-.PP
-.na
-.TS
-l l l lx.
-Request        Initial Causes  Explanation
-       Value   Break
-_
-\&.(c  \-      yes     T{
-Begin centered block
-T}
-\&.(d  \-      no      T{
-Begin delayed text
-T}
-\&.(f  \-      no      Begin footnote
-\&.(l  \-      yes     Begin list
-\&.(q  \-      yes     T{
-Begin major quote
-T}
-\&.(x \fIx\fR  \-      no      T{
-Begin indexed item in index
-T}
-\&.(z  \-      no      T{
-Begin floating keep
-T}
-\&.)c  \-      yes     T{
-End centered block
-T}
-\&.)d  \-      yes     T{
-End delayed text
-T}
-\&.)f  \-      yes     End footnote
-\&.)l  \-      yes     End list
-\&.)q  \-      yes     T{
-End major quote
-T}
-\&.)x  \-      yes     T{
-End index item
-T}
-\&.)z  \-      yes     T{
-End floating keep
-T}
-\&.++ \fIm H\fR        \-      no      T{
-Define paper section.
-.I m
-defines the part of the paper, and can be
-.B C
-(chapter),
-.B A
-(appendix),
-.B P
-(preliminary, e.g., abstract, table of contents, etc.),
-.B B
-(bibliography),
-.B RC
-(chapters renumbered from page one each chapter),
-or
-.B RA
-(appendix renumbered from page one).
-T}
-\&.+c \fIT\fR  \-      yes     T{
-Begin chapter (or appendix, etc., as
-set by \&.++).
-.I T
-is the chapter title.
-T}
-\&.1c  1       yes     T{
-One column format on a new page.
-T}
-\&.2c  1       yes     T{
-Two column format.
-T}
-\&.EN  \-      yes     T{
-Space after equation
-produced by
-.I eqn
-or
-.IR neqn .
-T}
-\&.EQ \fIx y\fR        \-      yes     T{
-Precede equation; break out and
-add space.
-Equation number is
-.IR y .
-The optional argument \fIx\fR
-may be
-.I I
-to indent equation (default),
-.I L
-to left-adjust the equation, or
-.I C
-to center the equation.
-T}
-\&.GE  \-      yes     T{
-End \fIgremlin\fP picture.
-T}
-\&.GS  \-      yes     T{
-Begin \fIgremlin\fP picture.
-T}
-\&.PE  \-      yes     T{
-End \fIpic\fP picture.
-T}
-\&.PS  \-      yes     T{
-Begin \fIpic\fP picture.
-T}
-\&.TE  \-      yes     End table.
-\&.TH  \-      yes     T{
-End heading section of table.
-T}
-\&.TS \fIx\fR  \-      yes     T{
-Begin table; if \fIx\fR is
-.I H
-table has repeated heading.
-T}
-\&.b \fIx\fR   no      no      T{
-Print
-.I x
-in boldface; if no argument switch to boldface.
-T}
-\&.ba \fI+n\fR 0       yes     T{
-Augments the base indent by
-.I n.
-This indent is used to set the indent on regular text
-(like paragraphs).
-T}
-\&.bc  no      yes     T{
-Begin new column
-T}
-\&.bi \fIx\fR  no      no      T{
-Print
-.I x
-in bold italics (nofill only)
-T}
-\&.bu  \-      yes     T{
-Begin bulleted paragraph
-T}
-\&.bx \fIx\fR  no      no      T{
-Print \fIx\fR in a box (nofill only).
-T}
-\&.ef \fI\'x\'y\'z\'\fR        \'\'\'\'        no      T{
-Set even footer to x  y  z
-T}
-\&.eh \fI\'x\'y\'z\'\fR        \'\'\'\'        no      T{
-Set even header to x  y  z
-T}
-\&.fo \fI\'x\'y\'z\'\fR        \'\'\'\'        no      T{
-Set footer to x  y  z
-T}
-\&.hx  \-      no      T{
-Suppress headers and footers on next page.
-T}
-\&.he \fI\'x\'y\'z\'\fR        \'\'\'\'        no      T{
-Set header to x  y  z
-T}
-\&.hl  \-      yes     T{
-Draw a horizontal line
-T}
-\&.i \fIx\fR   no      no      T{
-Italicize
-.I x;
-if
-.I x
-missing, italic text follows.
-T}
-\&.ip \fIx y\fR        no      yes     T{
-Start indented paragraph,
-with hanging tag
-.IR x .
-Indentation is
-.I y
-ens (default 5).
-T}
-\&.lp  yes     yes     T{
-Start left-blocked paragraph.
-T}
-\&.np  1       yes     T{
-Start numbered paragraph.
-T}
-\&.of \fI\'x\'y\'z\'\fR        \'\'\'\'        no      T{
-Set odd footer to x  y  z
-T}
-\&.oh \fI\'x\'y\'z\'\fR        \'\'\'\'        no      T{
-Set odd header to x  y  z
-T}
-\&.pd  \-      yes     T{
-Print delayed text.
-T}
-\&.pp  no      yes     T{
-Begin paragraph.
-First line indented.
-T}
-\&.r   yes     no      T{
-Roman text follows.
-T}
-\&.re  \-      no      T{
-Reset tabs to default values.
-T}
-\&.sh \fIn x\fR        \-      yes     T{
-Section head follows,
-font automatically bold.
-.I n
-is level of section,
-.I x
-is title of section.
-T}
-\&.sk  no      no      T{
-Leave the next page blank.
-Only one page is remembered ahead.
-T}
-\&.sm \fIx\fR  \-      no      T{
-Set
-.I x
-in a smaller pointsize.
-T}
-\&.sz \fI+n\fR 10p     no      T{
-Augment the point size by
-.I n
-points.
-T}
-\&.tp  no      yes     T{
-Begin title page.
-T}
-\&.u \fIx\fR   \-      no      T{
-Underline argument (even in \fItroff\fR).
-(Nofill only).
-T}
-\&.uh  \-      yes     T{
-Like .sh but unnumbered.
-T}
-\&.xp \fIx\fR  \-      no      Print index.
-.TE
-.ad
-
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" tab-with: 20
-.\" End:
diff --git a/tmac/groff_ms.7.man b/tmac/groff_ms.7.man
new file mode 100644 (file)
index 0000000..a9f1e94
--- /dev/null
@@ -0,0 +1,1828 @@
+'\" t
+.TH GROFF_MS @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_ms \- GNU roff manuscript macro package for formatting documents
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_ms_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
+.\"
+.\" Permission is granted to make and distribute verbatim copies of this
+.\" manual provided the copyright notice and this permission notice are
+.\" preserved on all copies.
+.\"
+.\" Permission is granted to copy and distribute modified versions of
+.\" this manual under the conditions for verbatim copying, provided that
+.\" the entire resulting derived work is distributed under the terms of
+.\" a permission notice identical to this one.
+.\"
+.\" Permission is granted to copy and distribute translations of this
+.\" manual into another language, under the above conditions for
+.\" modified versions, except that this permission notice may be
+.\" included in translations approved by the Free Software Foundation
+.\" instead of in the original English.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY "groff -ms"
+.RI [ option
+\&.\|.\|.\&]
+.RI [ input-file
+\&.\|.\|.\&]
+.SY "groff -m ms"
+.RI [ option
+\&.\|.\|.\&]
+.RI [ input-file
+\&.\|.\|.\&]
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This manual page describes the GNU version of the
+.I ms
+macros,
+part of the
+.I groff
+typesetting system.
+.
+The
+.I ms
+macros are mostly compatible with the documented behavior of the 4.3
+BSD Unix
+.I ms
+macros (see
+.I Differences from troff ms
+below for details).
+.
+The
+.I ms
+macros are suitable for reports, letters, books, and technical
+documentation.
+.
+.
+.\" ====================================================================
+.SH USAGE
+.\" ====================================================================
+.
+The
+.I ms
+macro package expects files to have a certain amount of structure.
+.
+The simplest documents can begin with a paragraph macro and consist of
+text separated by paragraph macros or even blank lines.
+.
+Longer documents have a structure as follows:
+.
+.TP
+.B "Document type"
+If you use the
+.B RP
+(report) macro at the beginning of the document,
+.I groff
+prints the cover page information on its own page;
+otherwise it prints the information on the
+first page with your document text immediately following.
+.
+Other document formats found in AT&T
+.I troff
+are specific to AT&T or Berkeley, and are not supported in
+.IR "groff ms" .
+.
+.TP
+.B "Format and layout"
+By setting number registers,
+you can change your document's
+margins, spacing, headers and footers, footnotes,
+and the base point size for the text.
+.
+See
+.I "Document control registers"
+below for more details.
+.
+.TP
+.B "Cover page"
+A cover page consists of a title,
+and optionally the author's name and institution,
+an abstract, and the date.
+.
+See
+.I "Cover page macros"
+below for more details.
+.
+.TP
+.B "Body"
+Following the cover page is your document.
+It consists of paragraphs, headings, and lists.
+.
+.TP
+.B "Table of contents"
+Longer documents usually include a table of contents,
+which you can add by placing the
+.B TC
+macro at the end of your document.
+.
+.
+.\" ====================================================================
+.SS "Document control registers"
+.\" ====================================================================
+.
+The following table lists the document control
+number registers.
+.
+For the sake of consistency,
+set registers related to margins at the beginning of your document,
+or just after the
+.B RP
+macro.
+.
+.
+.LP
+.ne 12
+.B Margin settings
+.RS
+.TS
+cb   cb cb cb
+lfCW l  l  l.
+Reg.   Definition      Effective       Default
+_
+PO     Page offset (left margin)       next page       1i
+LL     Line length     next paragraph  6i
+LT     Header/footer length    next paragraph  6i
+HM     Top (header) margin     next page       1i
+FM     Bottom (footer) margin  next page       1i
+_
+.TE
+.RE
+.
+.LP
+.ne 12
+.B Text settings
+.RS
+.TS
+cb   cb cb cb
+lfCW lx l  l.
+Reg.   Definition      Effective       Default
+_
+PS     T{
+Point size
+T}     next paragraph  10p
+VS     T{
+Line spacing (leading)
+T}     next paragraph  12p
+PSINCR T{
+Point size increment
+for section headings of
+increasing importance
+T}     next heading    1p
+GROWPS T{
+Heading level
+beyond which PSINCR
+is ignored
+T}     next heading    0
+_
+.TE
+.RE
+.
+.LP
+.ne 11
+.B Paragraph settings
+.RS
+.TS
+cb   cb cb cb
+lfCW lx l  l.
+Reg.   Definition      Effective       Default
+_
+PI     T{
+Initial indent
+T}     next paragraph  5n
+PD     T{
+Space between paragraphs
+T}     next paragraph  0.3v
+QI     T{
+Quoted paragraph indent
+T}     next paragraph  5n
+PORPHANS       T{
+Number of initial lines
+to be kept together
+T}     next paragraph  1
+HORPHANS       T{
+Number of initial lines
+to be kept with heading
+T}     next heading    1
+_
+.TE
+.RE
+.
+.LP
+.ne 7
+.B Footnote settings
+.RS
+.TS
+cb   cb cb cb
+lfCW l  l  l.
+Reg.   Definition      Effective       Default
+_
+FL     Footnote length next footnote   \[rs]n[LL]*5/6
+FI     Footnote indent next footnote   2n
+FF     Footnote format next footnote   0
+FPS    Point size      next footnote   \[rs]n[PS]\-2
+FVS    Vert.\& spacing next footnote   \[rs]n[FPS]+2
+FPD    Para.\& spacing next footnote   \[rs]n[PD]/2
+_
+.TE
+.RE
+.
+.LP
+.ne 6
+.B Other settings
+.RS
+.TS
+cb   cb cb cb
+lfCW l  l  l.
+Reg.   Definition      Effective       Default
+_
+DD     Display, table, eqn, pic spacing        next para.      0.5v
+MINGW  Minimum width between columns   next page       2n
+_
+.TE
+.RE
+.
+.
+.\" ====================================================================
+.SS "Cover page macros"
+.\" ====================================================================
+.
+Use the following macros to create a cover page for your document
+in the order shown.
+.
+.TP
+.BR ".RP " [ no ]
+Specifies the report format for your document.
+.
+The report format creates a separate cover page.
+.
+With no
+.B RP
+macro,
+.I groff
+prints a subset of the
+cover page on page\~1 of your document.
+.
+.IP
+If you use the optional
+.B no
+argument,
+.I groff
+prints a title page but
+does not repeat any of the title page information
+(title, author, abstract, etc.\&)
+on page\~1 of the document.
+.
+.TP
+.B .P1
+(P-one) Prints the header on page\~1.
+.
+The default is to suppress the header.
+.
+.TP
+.B .DA\c
+.RI " [" xxx ]
+(optional) Print the current date,
+or the arguments to the macro if any,
+on the title page (if specified)
+and in the footers.
+.
+This is the default for
+.IR nroff .
+.
+.TP
+.B .ND\c
+.RI " [" xxx ]
+(optional) Print the current date,
+or the arguments to the macro if any,
+on the title page (if specified)
+but not in the footers.
+.
+This is the default for
+.IR troff .
+.
+.TP
+.B .TL
+Specifies the document title.
+.
+.I Groff
+collects text following the
+.B TL
+macro into the title, until reaching the author name or abstract.
+.
+.TP
+.B .AU
+Specifies the author's name.
+.
+You can specify multiple authors by using an
+.B AU
+macro for each author.
+.
+.TP
+.B .AI
+Specifies the author's institution.
+.
+You can specify multiple institutions.
+.
+.TP
+.BR ".AB " [ no ]
+Begins the abstract.
+.
+The default is to print the word
+.BR ABSTRACT ,
+centered and in italics, above the text of the abstract.
+.
+The option
+.B no
+suppresses this heading.
+.
+.TP
+.B .AE
+End the abstract.
+.
+.
+.\" ====================================================================
+.SS Paragraphs
+.\" ====================================================================
+.
+Use the
+.B PP
+macro to create indented paragraphs,
+and the
+.B LP
+macro to create paragraphs with no initial indent.
+.
+.
+.PP
+The
+.B QP
+macro indents all text at both left and right margins
+by the amount of the register
+.BR QI .
+.
+The effect is reminiscent of the HTML
+.B <BLOCKQUOTE>
+tag.
+.
+The next paragraph or heading returns the margins to normal.
+.
+.B QP
+inserts the vertical space specified in register
+.B PD
+as inter-paragraph spacing.
+.
+.
+.PP
+A paragraph bracketed between the macros
+.B QS
+and
+.B QE
+has the same appearance as a paragraph started with
+.B QP
+and a following paragraph started with
+.BR LP .
+.
+Both
+.B QS
+and
+.B QE
+insert the inter-paragraph spacing specified in
+.B PD
+and the text is indented on both sides by the amount of register
+.BR QI .
+.
+The text between
+.B QS
+and
+.B QE
+can be split into further paragraphs by using
+.B \&.LP
+or
+.BR \&.PP .
+.
+.
+.PP
+The
+.B XP
+macro produces an \(lqexdented\(rq paragraph; that is, one with a
+hanging indent.
+.
+The first line of the paragraph begins at
+the left margin,
+and subsequent lines are indented
+(the opposite of
+.BR PP ).
+.
+.
+.PP
+For each of the above paragraph types,
+and also for any list entry introduced by the
+.B IP
+macro
+(described later),
+the document control register
+.BR PORPHANS ,
+sets the
+.I minimum
+number of lines which must be printed,
+after the start of the paragraph,
+and before any page break occurs.
+.
+If there is insufficient space remaining on the current page
+to accommodate this number of lines,
+then a page break is forced
+.I before
+the first line of the paragraph is printed.
+.
+.
+.PP
+Similarly,
+when a section heading
+(see subsection \[lq]Headings\[rq] below)
+precedes any of these paragraph types,
+the
+.B HORPHANS
+document control register specifies the
+.I minimum
+number of lines of the paragraph
+which must be kept on the same page as the heading.
+.
+If insufficient space remains on the current page
+to accommodate the heading and this number of lines of paragraph text,
+then a page break is forced
+.I before
+the heading is printed.
+.
+.
+.\" ====================================================================
+.SS Headings
+.\" ====================================================================
+.
+Use headings to create a hierarchical structure
+for your document.
+.
+By default,
+the
+.I ms
+macros print headings in
+.B bold
+using the same font family and point size as the body text.
+.
+For output devices which support scalable fonts,
+this behaviour may be modified by defining the document control
+registers
+.B GROWPS
+and
+.BR PSINCR .
+.
+.
+.PP
+The following heading macros are available:
+.
+.TP
+.BI .NH\  xx
+Numbered heading.
+.
+The argument
+.I xx
+is either a numeric argument to indicate the
+level of the heading, or
+.B S\~\c
+.IR "xx\~xx\~" .\|.\|.\&
+to set the section number explicitly.
+.
+If you specify heading levels out of sequence,
+such as invoking
+.B ".NH\ 3"
+after
+.BR ".NH\ 1" ,
+.I groff
+prints a warning on standard error.
+.
+.IP
+If the
+.B GROWPS
+register is set to a value
+greater than the level of the heading,
+then the point size of the heading will be increased by
+.B PSINCR
+units over the text size specified by the
+.B PS
+register,
+for each level by which the heading level is less than
+the value of
+.BR GROWPS .
+.
+For example,
+the sequence:
+.
+.RS
+.ne 12
+.nf
+.IP
+\&.nr PS 10
+\&.nr GROWPS 3
+\&.nr PSINCR 1.5p
+\&.
+\&.NH 1
+Top Level Heading
+\&.
+\&.NH 2
+Second Level Heading
+\&.
+\&.NH 3
+Third Level Heading
+.fi
+.RE
+.
+.IP
+will cause
+.RI \*(lq 1.\ Top\ Level\ Heading \*(rq
+to be printed in 13pt
+.B bold
+text, followed by
+.RI \*(lq 1.1.\ Second\ Level\ Heading \*(rq
+in 11.5pt
+.B bold
+text, while
+.RI \*(lq 1.1.1.\ Third\ Level\ Heading \*(rq,
+and all more deeply nested heading levels,
+will remain in the 10pt
+.B bold
+text which is specified by the
+.B PS
+register.
+.
+.IP
+Note that the value stored in
+.B PSINCR
+is interpreted in
+.I groff
+basic units;
+the
+.I p
+scaling factor should be employed when assigning a value specified in
+points.
+.
+.IP
+The style used to represent the section number,
+within a numbered heading,
+is controlled by the
+.B SN\-STYLE
+string;
+this may be set to either the
+.B SN\-DOT
+or the
+.B SN\-NO\-DOT
+style,
+(described below),
+by aliasing
+.B SN\-STYLE
+accordingly.
+.
+By default,
+.B SN\-STYLE
+is initialised by defining the alias
+.RS
+.nf
+.IP
+\&.als SN\-STYLE SN\-DOT
+.fi
+.RE
+.IP
+it may be changed to the
+.B SN\-NO\-DOT
+style,
+if preferred,
+by defining the alternative alias
+.RS
+.nf
+.IP
+\&.als SN\-STYLE SN\-NO\-DOT
+.fi
+.RE
+.IP
+Any such change becomes effective with the first use of
+.BR .NH ,
+.I after
+the new alias is defined.
+.
+.IP
+After invoking
+.BR .NH ,
+the assigned heading number is available in the strings
+.B SN\-DOT
+(as it appears in the default formatting style for numbered headings,
+with a terminating period following the number),
+and
+.B SN\-NO\-DOT
+(with this terminating period omitted).
+.
+The string
+.B SN
+is also defined,
+as an alias for
+.BR SN\-DOT ;
+if preferred,
+the user may redefine it as an alias for
+.BR SN\-NO\-DOT ,
+'ne 10
+by including the initialisation:
+.
+.RS
+.nf
+.IP
+\&.als SN SN\-NO\-DOT
+.fi
+.RE
+.
+.IP
+at any time;
+the change becomes effective with the next use of
+.BR .NH ,
+.I after
+the new alias is defined.
+.
+.TP
+.B .SH\c
+.RI " [" xx ]
+Unnumbered subheading.
+.
+The use of the optional
+.I xx
+argument is a GNU extension,
+which adjusts the point size of the unnumbered subheading
+to match that of a numbered heading,
+introduced using
+.BI .NH\  xx
+with the same value of
+.IR xx .
+.
+For example,
+given the same settings for
+.BR PS ,
+.B GROWPS
+and
+.BR PSINCR ,
+as used in the preceding
+.B .NH
+example,
+the sequence:
+.
+.RS
+.ne
+.nf
+.IP
+\&.SH 2
+An Unnumbered Subheading
+.fi
+.RE
+.
+.IP
+will print
+.RI \*(lq "An Unnumbered Subheading" \*(rq
+in 11.5pt
+.B bold
+text.
+.
+.
+.\" ====================================================================
+.SS Highlighting
+.\" ====================================================================
+.
+The
+.I ms
+macros provide a variety of methods to highlight
+or emphasize text:
+.
+.TP
+.B .B\c
+.RI " [" txt " [" post " [" pre ]]]
+Sets its first argument in
+.BR "bold type" .
+.
+If you specify a second argument,
+.I groff
+prints it in the previous font after
+the bold text, with no intervening space
+(this allows you to set punctuation after
+the highlighted text without highlighting
+the punctuation).
+.
+Similarly, it prints the third argument (if any)
+in the previous font
+.B before
+the first argument.
+.
+For example,
+.RS
+.
+.IP
+\&.B foo ) (
+.RE
+.
+.IP
+prints
+.RB \(lq( foo )\(rq.
+.
+.IP
+If you give this macro no arguments,
+.I groff
+prints all text following in bold until
+the next highlighting, paragraph, or heading macro.
+.
+.TP
+.B .R\c
+.RI " [" txt " [" post " [" pre ]]]
+Sets its first argument in
+roman (or regular) type.
+.
+It operates similarly to the
+.B B
+macro otherwise.
+.
+.TP
+.B .I\c
+.RI " [" txt " [" post " [" pre ]]]
+Sets its first argument in
+.IR "italic type" .
+It operates similarly to the
+.B B
+macro otherwise.
+.
+.TP
+.B .CW\c
+.RI " [" txt " [" post " [" pre ]]]
+Sets its first argument in a constant-width face.
+.
+It operates similarly to the
+.B B
+macro otherwise.
+.
+.TP
+.B .BI\c
+.RI " [" txt " [" post " [" pre ]]]
+Sets its first argument in bold italic type.
+.
+It operates similarly to the
+.B B
+macro otherwise.
+.
+.TP
+.B .BX\c
+.RI " [" txt ]
+Prints its argument and draws a box around it.
+.
+If you want to box a string that contains spaces,
+use a digit-width space (\[rs]0).
+.
+.TP
+.B .UL\c
+.RI " [" txt " [" post ]]
+Prints its first argument with an underline.
+.
+If you specify a second argument,
+.I groff
+prints it in the previous font after the underlined text, with no
+intervening space.
+.
+.TP
+.B .LG
+Prints all text following in larger type
+(2\~points larger than the current point size) until
+the next font size, highlighting, paragraph, or heading macro.
+.
+You can specify this macro multiple times to enlarge the point size as
+needed.
+.
+.TP
+.B .SM
+Prints all text following in
+smaller type
+(2\~points smaller than the current point size) until
+the next type size, highlighting, paragraph, or heading macro.
+.
+You can specify this macro multiple times to reduce the point size as
+needed.
+.
+.TP
+.B .NL
+Prints all text following in
+the normal point size
+(that is, the value of the
+.B PS
+register).
+.
+.TP
+.BI \[rs]*{ text \[rs]*}
+Print the enclosed
+.I text
+as a superscript.
+.
+.
+.\" ====================================================================
+.SS Indents
+.\" ====================================================================
+.
+You may need to indent sections of text.
+.
+A typical use for indents is to create nested lists and sublists.
+.
+.
+.PP
+Use the
+.B RS
+and
+.B RE
+macros to start and end a section of indented text, respectively.
+.
+The
+.B PI
+register controls the amount of indent.
+.
+.
+.PP
+You can nest indented sections as deeply as needed by using multiple,
+nested pairs of
+.B RS
+and
+.BR RE .
+.
+.
+.\" ====================================================================
+.SS Lists
+.\" ====================================================================
+.
+The
+.B IP
+macro handles duties for all lists.
+.
+Its syntax is as follows:
+.
+.TP
+.B .IP\c
+.RI " [" marker " [" width ]]
+The
+.I marker
+is usually a bullet character
+.B \[rs](bu
+for unordered lists,
+a number (or auto-incrementing number register) for numbered lists,
+or a word or phrase for indented (glossary-style) lists.
+.
+.IP
+The
+.I width
+specifies the indent for the body of each list item.
+.
+Once specified, the indent remains the same for all list items in the
+document until specified again.
+.\" =====
+.br
+.ne 15
+.
+.
+.\" ====================================================================
+.SS "Tab stops"
+.\" ====================================================================
+.
+Use the
+.B ta
+request to set tab stops as needed.
+.
+Use the
+.B TA
+macro to reset tabs to the default (every 5n).
+.
+You can redefine the
+.B TA
+macro to create a different set of default tab stops.
+.
+.
+.\" ====================================================================
+.SS "Displays and keeps"
+.\" ====================================================================
+.
+Use displays to show text-based examples or figures
+(such as code listings).
+.
+Displays turn off filling, so lines of code can be displayed as-is
+without inserting
+.B br
+requests in between each line.
+.
+Displays can be
+.I kept
+on a single page, or allowed to break across pages.
+.
+The following table shows the display types available.
+.RS
+.ne 11
+.na
+.TS
+cb   s    cbt
+cb   cb   ^
+lfCW lfCW lx.
+Display macro  Type of display
+With keep      No keep
+_
+\&.DS L        \&.LD   Left-justified.
+\&.DS I [\,\fIindent\/\fP]     \&.ID   T{
+Indented (default indent in the \fBDI\fP register).
+T}
+\&.DS B        \&.BD   T{
+Block-centered (left-justified, longest line centered).
+T}
+\&.DS C        \&.CD   Centered.
+\&.DS R        \&.RD   Right-justified.
+_
+.TE
+.RE
+.ad
+.
+.LP
+Use the
+.B DE
+macro to end any display type.
+.
+The macros
+.B Ds
+and
+.B De
+were formerly provided as aliases for
+.B DS
+and
+.BR DE ,
+respectively, but they have been removed, and should no longer be used.
+.
+X11 documents which actually use
+.B Ds
+and
+.B De
+always load a specific macro file from the X11 distribution
+.RI ( macros.t )
+which provides proper definitions for the two macros.
+.
+.PP
+To
+.I keep
+text together on a page,
+such as
+a paragraph that refers to a table (or list, or other item)
+immediately following, use the
+.B KS
+and
+.B KE
+macros.
+.
+The
+.B KS
+macro begins a block of text to be kept on a single page,
+and the
+.B KE
+macro ends the block.
+.
+.
+.PP
+You can specify a
+.I "floating keep"
+using the
+.B KF
+and
+.B KE
+macros.
+.
+If the keep cannot fit on the current page,
+.I groff
+holds the contents of the keep and allows text following
+the keep (in the source file) to fill in the remainder of
+the current page.
+.
+When the page breaks,
+whether by an explicit
+.B bp
+request or by reaching the end of the page,
+.I groff
+prints the floating keep at the top of the new page.
+.
+This is useful for printing large graphics or tables
+that do not need to appear exactly where specified.
+.
+.
+.PP
+The macros
+.B B1
+and
+.B B2
+can be used to enclose a text within a box;
+.B .B1
+begins the box, and
+.B .B2
+ends it.
+.
+Text in the box is automatically placed in a diversion
+(keep).
+.
+.
+.\" ====================================================================
+.SS "Tables, figures, equations, and references"
+.\" ====================================================================
+.
+The
+.I ms
+macros support the standard
+.I groff
+preprocessors:
+.IR tbl ,
+.IR pic ,
+.IR eqn ,
+and
+.IR refer .
+.
+Mark text meant for preprocessors by enclosing it
+in pairs of tags as follows:
+.
+.TP
+.BR .TS " [" H "] and " .TE
+Denote a table to be processed by the
+.I tbl
+preprocessor.
+.
+The optional
+.BR H "\~argument"
+instructs
+.I groff
+to create a running header with the information
+up to the
+.B TH
+macro.
+.
+.I Groff
+prints the header at the beginning of the table;
+if the table runs onto another page,
+.I groff
+prints the header on the next page as well.
+.
+.TP
+.BR .PS " and " .PE
+Denote a graphic to be processed by the
+.I pic
+preprocessor.
+.
+You can create a
+.I pic
+file by hand, using the
+AT&T
+.I pic
+manual available on the Web as a reference,
+or by using a graphics program such as
+.IR xfig .
+.
+.TP
+.B .EQ\c
+.RI " [" align "] and "\c
+.B .EN
+Denote an equation to be processed by the
+.I eqn
+preprocessor.
+.
+The optional
+.I align
+argument can be
+.BR C ,
+.BR L ,
+or\~\c
+.B I
+to center (the default), left-justify, or indent
+the equation, respectively.
+.
+.TP
+.BR .[ " and " .]
+Denote a reference to be processed by the
+.I refer
+preprocessor.
+.
+The GNU
+.IR @g@refer (@MAN1EXT@)
+manual page provides a comprehensive reference
+to the preprocessor and the format of the
+bibliographic database.
+.
+.
+.\" ====================================================================
+.SS Footnotes
+.\" ====================================================================
+.
+The
+.I ms
+macros provide a flexible footnote system.
+.
+You can specify a numbered footnote by using the
+.B \[rs]**
+escape, followed by the text of the footnote
+enclosed by
+.B FS
+and
+.B FE
+macros.
+.
+.
+.PP
+You can specify symbolic footnotes
+by placing the mark character (such as
+.B \[rs](dg
+for the dagger character) in the body text,
+followed by the text of the footnote
+enclosed by
+.B FS\ \[rs](dg
+and
+.B FE
+macros.
+.
+.
+.PP
+You can control how
+.I groff
+prints footnote numbers by changing the value of the
+.B FF
+register as follows:
+.RS
+.ne 7
+.
+.TP
+0
+Prints the footnote number as a superscript; indents the footnote
+(default).
+.
+.TP
+1
+Prints the number followed by a period (that is,\~\(lq1.\(rq\&)
+and indents the footnote.
+.
+.TP
+2
+Like\~1, without an indent.
+.
+.TP
+3
+Like\~1, but prints the footnote number as a paragraph with a hanging
+indent.
+.
+.RE
+.LP
+You can use footnotes safely within keeps and displays,
+but avoid using numbered footnotes within floating keeps.
+.
+You can set a second
+.B \[rs]**
+between a
+.B \[rs]**
+and its corresponding
+.BR .FS ;
+as long as each
+.B .FS
+occurs
+.I after
+the corresponding
+.B \[rs]**
+and the occurrences of
+.B .FS
+are in the same order as the corresponding occurrences of
+.BR \[rs]** .
+.
+.
+.\" ====================================================================
+.SS "Headers and footers"
+.\" ====================================================================
+.
+There are three ways to define headers and footers:
+.
+.IP \(bu 3n
+Use the strings
+.BR LH ,
+.BR CH ,
+and
+.B RH
+to set the left, center, and right headers.
+Use
+.BR LF ,
+.BR CF ,
+and
+.B RF
+to set the left, center, and right footers.
+.
+The string-setting approach works best for documents that do not
+distinguish between odd and even pages.
+.
+.IP \(bu
+Use the
+.B OH
+and
+.B EH
+macros to define headers for the odd and even pages,
+and
+.B OF
+and
+.B EF
+macros to define footers for the odd and even pages.
+.
+This is more flexible than defining the individual strings.
+.
+The syntax for these macros is as follows:
+.RS
+.
+.IP
+.BI . XX " \[aq]" left \[aq] center \[aq] right \[aq]
+.RE
+.
+.IP
+where
+.I XX
+is one of the foregoing four macros and each of
+.IR left ,
+.IR center ,
+and
+.I right
+is text of your choice.
+.
+You can replace the quote (\[aq]) marks with any character not
+appearing in the header or footer text.
+.
+.
+.IP \(bu
+You can redefine the
+.B PT
+and
+.B BT
+macros to change the behavior of
+the header and footer, respectively.
+.
+The header process also calls the (undefined)
+.B HD
+macro after
+.BR PT ;
+you can define this macro if you need additional processing
+after printing the header
+(for example, to draw a line below the header).
+.
+.
+.\" ====================================================================
+.SS Margins
+.\" ====================================================================
+.
+You control margins using a set of number registers.
+.
+The following table lists the register names and defaults:
+.RS
+.ne 8
+.na
+.TS
+cb   cb cb cb
+lfCW l  l  l.
+Reg.   Definition      Effective       Default
+_
+PO     Page offset (left margin)       next page       1i
+LL     Line length     next paragraph  6i
+LT     Header/footer length    next paragraph  6i
+HM     Top (header) margin     next page       1i
+FM     Bottom (footer) margin  next page       1i
+_
+.TE
+.RE
+.ad
+.
+.PP
+Note that there is no right margin setting.
+The combination of page offset and line length
+provide the information necessary to
+derive the right margin.
+.
+.
+.\" ====================================================================
+.SS "Multiple columns"
+.\" ====================================================================
+.
+The
+.I ms
+macros can set text in as many columns as will reasonably
+fit on the page.
+.
+The following macros are available.
+.
+All of them force a page break if a multi-column mode is already set.
+.
+However, if the current mode is single-column, starting a multi-column
+mode does
+.I not
+force a page break.
+.
+.TP
+.B .1C
+Single-column mode.
+.
+.TP
+.B .2C
+Two-column mode.
+.
+.TP
+.B .MC\c
+.RI " [" column-width " [" gutter-width ]]
+Multi-column mode.
+.
+If you specify no arguments, it is equivalent to the
+.B 2C
+macro.
+.
+Otherwise,
+.I column-width
+is the width of each column and
+.I gutter-width
+is the space between columns.
+.
+The
+.B MINGW
+number register is the default gutter width.
+.
+.
+.\" ====================================================================
+.SS "Creating a table of contents"
+.\" ====================================================================
+.
+Wrap text that you want to appear in the table of contents in
+.B XS
+and
+.B XE
+macros.
+.
+Use the
+.B TC
+macro to print the table of contents at the end of the document,
+resetting the page number to\~\c
+.B i
+(Roman numeral\~1).
+.
+.
+.PP
+You can manually create a table of contents
+by specifying a page number as the first argument to
+.BR XS .
+.
+Add subsequent entries using the
+.B XA
+macro.
+.
+For example:
+.RS
+.
+.PP
+.ne 8
+.nf
+\&.XS 1
+Introduction
+\&.XA 2
+A Brief History of the Universe
+\&.XA 729
+Details of Galactic Formation
+\&.\|.\|.
+\&.XE
+.fi
+.RE
+.
+.LP
+Use the
+.B PX
+macro to print a manually-generated table of contents
+without resetting the page number.
+.
+.
+.PP
+If you give the argument
+.B no
+to either
+.B PX
+or
+.BR TC ,
+.I groff
+suppresses printing the title
+specified by the
+.B \[rs]*[TOC]
+string.
+.
+.
+.\" ====================================================================
+.SS "Fractional point sizes"
+.\" ====================================================================
+.
+Traditionally, the
+.I ms
+macros only support integer values for the document's font size
+and vertical spacing.
+.
+To overcome this restriction, values larger than or equal to 1000 are
+taken as fractional values, multiplied by 1000.
+.
+For example, \[oq].nr\~PS\~10250\[cq] sets the font size to 10.25
+points.
+.
+.
+.LP
+The following four registers accept fractional point sizes:
+.BR PS ,
+.BR VS ,
+.BR FPS ,
+and
+.BR FVS .
+.
+.
+.LP
+Due to backwards compatibility, the value of
+.B VS
+must be smaller than 40000 (this is 40.0 points).
+.
+.
+.\" ====================================================================
+.SH "DIFFERENCES FROM troff ms"
+.\" ====================================================================
+.
+The
+.I "groff ms"
+macros are a complete re-implementation,
+using no original AT&T code.
+.
+Since they take advantage of the extended features in
+.IR groff ,
+they cannot be used with AT&T
+.IR troff .
+.
+Other differences include:
+.
+.IP \(bu 3n
+The internals of
+.I "groff ms"
+differ from the internals of Unix
+.IR ms .
+.
+Documents that depend upon implementation details of Unix
+.I ms
+may not format properly with
+.IR "groff ms" .
+.
+.IP \(bu
+The error-handling policy of
+.I "groff ms"
+is to detect and report errors,
+rather than silently to ignore them.
+.
+.IP \(bu
+Some Bell Labs localisms are not implemented by default.
+.
+However, if you call the otherwise undocumented
+.B SC
+section-header macro, you will enable implementations of three other
+archaic Bell Labs macros:
+.BR UC ,
+.BR P1 ,
+and
+.BR P2 .
+.
+These are not enabled by default because (a)\~they were not documented,
+in the original
+.IR "ms manual" ,
+and (b)\~the
+.B P1
+and
+.B UC
+macros both collide with different macros in the Berkeley version of
+.IR ms .
+.
+.IP
+These emulations are sufficient to give back the 1976 Kernighan\~&
+Cherry paper
+.I "Typesetting Mathematics \(en User's Guide"
+its section headings, and restore some text that had gone missing as
+arguments of undefined macros.
+.
+No warranty express or implied is given as to how well the typographic
+details these produce match the original Bell Labs macros.
+.
+.IP \(bu
+Berkeley localisms, in particular the
+.B TM
+and
+.B CT
+macros,
+are not implemented.
+.
+.IP \(bu
+.I "Groff ms"
+does not work in compatibility mode (e.g., with the
+.B \-C
+option).
+.
+.IP \(bu
+There is no support for typewriter-like devices.
+.
+.IP \(bu
+.I "Groff ms"
+does not provide cut marks.
+.
+.IP \(bu
+Multiple line spacing is not supported
+(use a larger vertical spacing instead).
+.
+.IP \(bu
+Some Unix
+.I ms
+documentation says that the
+.B CW
+and
+.B GW
+number registers can be used to control the column width and
+gutter width, respectively.
+.
+These number registers are not used in
+.IR "groff ms" .
+.
+.IP \(bu
+Macros that cause a reset
+(paragraphs, headings, etc.\&)
+may change the indent.
+.
+Macros that change the indent do not increment or decrement the
+indent, but rather set it absolutely.
+.
+This can cause problems for documents that define additional macros of
+their own.
+.
+The solution is to use not the
+.B in
+request but instead the
+.B RS
+and
+.B RE
+macros.
+.
+.IP \(bu
+The number register
+.B GS
+is set to\~1 by the
+.I "groff ms"
+macros,
+but is not used by the Unix
+.I ms
+macros.
+.
+Documents that need to determine whether they are being formatted with
+Unix
+.I ms
+or
+.I "groff ms"
+should use this number register.
+.
+.IP \(bu
+To make
+.I "groff ms"
+use the default page offset (which also specifies the left margin),
+the
+.B PO
+number register must stay undefined until the first
+.B ms
+macro is evaluated.
+.
+This implies that
+.B PO
+should not be used early in the document, unless it is changed also:
+remember that accessing an undefined register automatically defines it.
+.br
+.ne 23
+.
+.
+.\" ====================================================================
+.SS Strings
+.\" ====================================================================
+.
+You can redefine the following strings to adapt the
+.I "groff ms"
+macros to languages other than English:
+.RS
+.TS
+cb   cb
+lfCW l.
+String Default Value
+_
+REFERENCES     References
+ABSTRACT       ABSTRACT
+TOC    Table of Contents
+MONTH1 January
+MONTH2 February
+MONTH3 March
+MONTH4 April
+MONTH5 May
+MONTH6 June
+MONTH7 July
+MONTH8 August
+MONTH9 September
+MONTH10        October
+MONTH11        November
+MONTH12        December
+_
+.TE
+.RE
+.
+.
+.PP
+The
+.B \[rs]*\-
+string produces an em dash\[em]like this.
+.
+.
+.PP
+Use
+.B \[rs]*Q
+and
+.B \[rs]*U
+to get a left and right typographer's quote,
+respectively, in
+.I troff
+(and plain quotes in
+.IR nroff ).
+.
+.
+.\" ====================================================================
+.SS Text Settings
+.\" ====================================================================
+.
+The
+.B FAM
+string sets the default font family.
+.
+If this string is undefined at initialization,
+it is set to Times.
+.
+.
+.LP
+The point size, vertical spacing, and inter-paragraph spacing for
+footnotes are controlled by the number registers
+.BR FPS ,
+.BR FVS ,
+and
+.BR FPD ;
+at initialization these are set to
+.BR \[rs]n(PS\-2 ,
+.BR \[rs]n[FPS]+2 ,
+and
+.BR \[rs]n(PD/2 ,
+respectively.
+.
+If any of these registers are defined before initialization,
+the initialization macro does not change them.
+.
+.
+.LP
+The hyphenation flags (as set by the
+.B hy
+request) are set from the
+.B HY
+register;
+the default is\~6.
+.
+.
+.PP
+Improved accent marks
+(as originally defined in Berkeley's
+.I ms
+version)
+are available by specifying the
+.B AM
+macro at the beginning of your document.
+.
+You can place an accent over most characters by specifying the string
+defining the accent directly after the character.
+.
+For example,
+.B n\[rs]*\[ti]
+produces an n with a tilde over it.
+.
+.
+.\" ====================================================================
+.SH "NAMING CONVENTIONS"
+.\" ====================================================================
+.
+The following conventions are used for names of macros, strings, and
+number registers.
+.
+External names available to documents that use the
+.I "groff ms"
+macros contain only uppercase letters and digits.
+.
+.
+.LP
+Internally the macros are divided into modules;
+naming conventions are as follows:
+.
+.IP \(bu 3n
+Names used only within one module are of the form
+.IB \%module * name\fR.
+.
+.IP \(bu
+Names used outside the module in which they are defined are of the form
+.IB \%module @ name\fR.
+.
+.IP \(bu
+Names associated with a particular environment are of the form
+.IB \%environment : name\fR;
+these are used only within the
+.B par
+module.
+.
+.IP \(bu
+.I name
+does not have a module prefix.
+.
+.IP \(bu
+Constructed names used to implement arrays are of the form
+.IB \%array ! index\fR.
+.
+.
+.PP
+Thus the groff ms macros reserve the following names:
+.
+.IP \(bu 3n
+Names containing the characters
+.BR * ,
+.BR @ ,
+and\~\c
+.BR : .
+.
+.IP \(bu
+Names containing only uppercase letters and digits.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.I @MACRODIR@/ms.tmac
+(a wrapper file for
+.IR s.tmac )
+.br
+.I @MACRODIR@/s.tmac
+.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+The GNU version of the
+.I ms
+macro package was written by James Clark and contributors.
+.
+This document was (re-)written by
+.MT lkollar@\:despammed.com
+Larry Kollar
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR @g@tbl (@MAN1EXT@),
+.BR @g@pic (@MAN1EXT@),
+.BR @g@eqn (@MAN1EXT@),
+.BR @g@refer (@MAN1EXT@)
+.
+.
+.PP
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_ms_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/tmac/groff_ms.man b/tmac/groff_ms.man
deleted file mode 100644 (file)
index 9464bab..0000000
+++ /dev/null
@@ -1,1771 +0,0 @@
-'\" t
-.do nr groff_ms_C \n[.C]
-.cp 0
-.TH GROFF_MS @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_ms \- groff ms macros
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 1989-2014 Free Software Foundation, Inc.
-
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided that the
-entire resulting derived work is distributed under the terms of a
-permission notice identical to this one.
-
-Permission is granted to copy and distribute translations of this
-manual into another language, under the above conditions for modified
-versions, except that this permission notice may be included in
-translations approved by the Free Software Foundation instead of in
-the original English.
-..
-.
-.de au
-Original manual page by James Clark et al, rewritten by
-.MT lkollar@despammed.com
-Larry Kollar
-.ME .
-..
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B groff
-.B \-ms
-[
-.IR options .\|.\|.\&
-]
-[
-.IR files .\|.\|.\&
-]
-.br
-.B groff
-.B \-m\ ms
-[
-.IR options .\|.\|.\&
-]
-[
-.IR files .\|.\|.\&
-]
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the GNU version of the
-.I ms
-macros,
-part of the
-.I groff
-typesetting system.
-.
-The
-.I ms
-macros are mostly compatible with the documented behavior of the 4.3
-.SM BSD
-Unix
-.I ms
-macros (see
-.I Differences from troff ms
-below for details).
-.
-The
-.I ms
-macros are suitable for reports, letters, books, and technical
-documentation.
-.
-.
-.\" --------------------------------------------------------------------
-.SH USAGE
-.\" --------------------------------------------------------------------
-.
-The
-.I ms
-macro package expects files to have a certain amount of structure.
-.
-The simplest documents can begin with a paragraph macro and consist of
-text separated by paragraph macros or even blank lines.
-.
-Longer documents have a structure as follows:
-.
-.TP
-.B "Document type"
-If you use the
-.B RP
-(report) macro at the beginning of the document,
-.I groff
-prints the cover page information on its own page;
-otherwise it prints the information on the
-first page with your document text immediately following.
-.
-Other document formats found in AT&T
-.I troff
-are specific to AT&T or Berkeley, and are not supported in
-.IR "groff ms" .
-.
-.TP
-.B "Format and layout"
-By setting number registers,
-you can change your document\[aq]s type (font and size),
-margins, spacing, headers and footers, and footnotes.
-.
-See
-.I "Document control registers"
-below for more details.
-.
-.TP
-.B "Cover page"
-A cover page consists of a title,
-and optionally the author\[aq]s name and institution,
-an abstract, and the date.
-.
-See
-.I "Cover page macros"
-below for more details.
-.
-.TP
-.B "Body"
-Following the cover page is your document.
-It consists of paragraphs, headings, and lists.
-.
-.TP
-.B "Table of contents"
-Longer documents usually include a table of contents,
-which you can add by placing the
-.B TC
-macro at the end of your document.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Document control registers"
-.\" --------------------------------------------------------------------
-.
-The following table lists the document control
-number registers.
-.
-For the sake of consistency,
-set registers related to margins at the beginning of your document,
-or just after the
-.B RP
-macro.
-.
-.
-.LP
-.ne 12
-.B Margin settings
-.RS
-.na
-.TS
-cb   cb cb cb
-lfCW l  l  l.
-Reg.   Definition      Effective       Default
-_
-PO     Page offset (left margin)       next page       1i
-LL     Line length     next paragraph  6i
-LT     Header/footer length    next paragraph  6i
-HM     Top (header) margin     next page       1i
-FM     Bottom (footer) margin  next page       1i
-_
-.TE
-.RE
-.
-.LP
-.ne 12
-.B Text settings
-.RS
-.TS
-cb   cb cb cb
-lfCW lx l  l.
-Reg.   Definition      Effective       Default
-_
-PS     T{
-Point size
-T}     next paragraph  10p
-VS     T{
-Line spacing (leading)
-T}     next paragraph  12p
-PSINCR T{
-Point size increment
-for section headings of
-increasing importance
-T}     next heading    1p
-GROWPS T{
-Heading level
-beyond which PSINCR
-is ignored
-T}     next heading    0
-_
-.TE
-.RE
-.
-.LP
-.ne 11
-.B Paragraph settings
-.RS
-.TS
-cb   cb cb cb
-lfCW lx l  l.
-Reg.   Definition      Effective       Default
-_
-PI     T{
-Initial indent
-T}     next paragraph  5n
-PD     T{
-Space between paragraphs
-T}     next paragraph  0.3v
-QI     T{
-Quoted paragraph indent
-T}     next paragraph  5n
-PORPHANS       T{
-Number of initial lines
-to be kept together
-T}     next paragraph  1
-HORPHANS       T{
-Number of initial lines
-to be kept with heading
-T}     next heading    1
-_
-.TE
-.RE
-.
-.LP
-.ne 7
-.B Footnote settings
-.RS
-.TS
-cb   cb cb cb
-lfCW l  l  l.
-Reg.   Definition      Effective       Default
-_
-FL     Footnote length next footnote   \[rs]n[LL]*5/6
-FI     Footnote indent next footnote   2n
-FF     Footnote format next footnote   0
-FPS    Point size      next footnote   \[rs]n[PS]-2
-FVS    Vert.\& spacing next footnote   \[rs]n[FPS]+2
-FPD    Para.\& spacing next footnote   \[rs]n[PD]/2
-_
-.TE
-.RE
-.
-.LP
-.ne 6
-.B Other settings
-.RS
-.TS
-cb   cb cb cb
-lfCW l  l  l.
-Reg.   Definition      Effective       Default
-_
-DD     Display, table, eqn, pic spacing        next para.      0.5v
-MINGW  Minimum width between columns   next page       2n
-_
-.TE
-.ad
-.RE
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Cover page macros"
-.\" --------------------------------------------------------------------
-.
-Use the following macros to create a cover page for your document
-in the order shown.
-.
-.TP
-.B .RP [no]
-Specifies the report format for your document.
-.
-The report format creates a separate cover page.
-.
-With no
-.B RP
-macro,
-.I groff
-prints a subset of the
-cover page on page\~1 of your document.
-.
-.IP
-If you use the optional
-.B no
-argument,
-.I groff
-prints a title page but
-does not repeat any of the title page information
-(title, author, abstract, etc.\&)
-on page\~1 of the document.
-.
-.TP
-.B .P1
-(P-one) Prints the header on page\~1.
-.
-The default is to suppress the header.
-.
-.TP
-.BI ".DA [" xxx ]
-(optional) Print the current date,
-or the arguments to the macro if any,
-on the title page (if specified)
-and in the footers.
-.
-This is the default for
-.IR nroff .
-.
-.TP
-.BI ".ND [" xxx ]
-(optional) Print the current date,
-or the arguments to the macro if any,
-on the title page (if specified)
-but not in the footers.
-.
-This is the default for
-.IR troff .
-.
-.TP
-.B .TL
-Specifies the document title.
-.
-.I Groff
-collects text following the
-.B TL
-macro into the title, until reaching the author name or abstract.
-.
-.TP
-.B .AU
-Specifies the author\[aq]s name.
-.
-You can specify multiple authors by using an
-.B AU
-macro for each author.
-.
-.TP
-.B .AI
-Specifies the author\[aq]s institution.
-.
-You can specify multiple institutions.
-.
-.TP
-.B .AB [no]
-Begins the abstract.
-.
-The default is to print the word
-.BR ABSTRACT ,
-centered and in italics, above the text of the abstract.
-.
-The option
-.B no
-suppresses this heading.
-.
-.TP
-.B .AE
-End the abstract.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Paragraphs
-.\" --------------------------------------------------------------------
-.
-Use the
-.B PP
-macro to create indented paragraphs,
-and the
-.B LP
-macro to create paragraphs with no initial indent.
-.
-.
-.PP
-The
-.B QP
-macro indents all text at both left and right margins.
-.
-The effect is identical to the HTML
-.B <BLOCKQUOTE>
-.
-The next paragraph or heading returns margins to normal.
-.
-.
-.PP
-The
-.B XP
-macro produces an exdented paragraph.
-.
-The first line of the paragraph begins at
-the left margin,
-and subsequent lines are indented
-(the opposite of
-.BR PP ).
-.
-.
-.PP
-For each of the above paragraph types,
-and also for any list entry introduced by the
-.B IP
-macro
-(described later),
-the document control register
-.BR PORPHANS ,
-sets the
-.I minimum
-number of lines which must be printed,
-after the start of the paragraph,
-and before any page break occurs.
-.
-If there is insufficient space remaining on the current page
-to accommodate this number of lines,
-then a page break is forced
-.I before
-the first line of the paragraph is printed.
-.
-.
-.PP
-Similarly,
-when a section heading
-(see subsection
-.I Headings
-below)
-precedes any of these paragraph types,
-the
-.B HORPHANS
-document control register specifies the
-.I minimum
-number of lines of the paragraph
-which must be kept on the same page as the heading.
-.
-If insufficient space remains on the current page
-to accommodate the heading and this number of lines of paragraph text,
-then a page break is forced
-.I before
-the heading is printed.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Headings
-.\" --------------------------------------------------------------------
-.
-Use headings to create a hierarchical structure
-for your document.
-.
-By default,
-the
-.I ms
-macros print headings in
-.B bold
-using the same font family and point size as the body text.
-.
-For output devices which support scalable fonts,
-this behaviour may be modified,
-by defining the document control registers,
-.B GROWPS
-and
-.BR PSINCR .
-.
-.
-.PP
-The following heading macros are available:
-.
-.TP
-.BI .NH\  xx
-Numbered heading.
-.
-The argument
-.I xx
-is either a numeric argument to indicate the
-level of the heading, or
-.I S\ xx\ xx\ \c
-".\|.\|."
-to set the section number explicitly.
-.
-If you specify heading levels out of sequence,
-such as invoking
-.B ".NH\ 3"
-after
-.BR ".NH\ 1" ,
-.I groff
-prints a warning on standard error.
-.
-.IP
-If the
-.B GROWPS
-register is set to a value
-greater than the level of the heading,
-then the point size of the heading will be increased by
-.B PSINCR
-units over the text size specified by the
-.B PS
-register,
-for each level by which the heading level is less than
-the value of
-.BR GROWPS .
-.
-For example,
-the sequence:
-.
-.RS
-.ne 12
-.nf
-.IP
-\&.nr PS 10
-\&.nr GROWPS 3
-\&.nr PSINCR 1.5p
-\&.
-\&.NH 1
-Top Level Heading
-\&.
-\&.NH 2
-Second Level Heading
-\&.
-\&.NH 3
-Third Level Heading
-.fi
-.RE
-.
-.IP
-will cause
-.RI \*(lq 1.\ Top\ Level\ Heading \*(rq
-to be printed in 13pt
-.B bold
-text, followed by
-.RI \*(lq 1.1.\ Second\ Level\ Heading \*(rq
-in 11.5pt
-.B bold
-text, while
-.RI \*(lq 1.1.1.\ Third\ Level\ Heading \*(rq,
-and all more deeply nested heading levels,
-will remain in the 10pt
-.B bold
-text which is specified by the
-.B PS
-register.
-.
-.IP
-Note that the value stored in
-.B PSINCR
-is interpreted in
-.I groff
-basic units;
-the
-.I p
-scaling factor should be employed,
-when assigning a value specified in points.
-.
-.IP
-The style used to represent the section number,
-within a numbered heading,
-is controlled by the
-.B SN-STYLE
-string;
-this may be set to either the
-.B SN-DOT
-or the
-.B SN-NO-DOT
-style,
-(described below),
-by aliasing
-.B SN-STYLE
-accordingly.
-.
-By default,
-.B SN-STYLE
-is initialised by defining the alias
-.RS
-.nf
-.IP
-\&.als SN-STYLE SN-DOT
-.fi
-.RE
-.IP
-it may be changed to the
-.B SN-NO-DOT
-style,
-if preferred,
-by defining the alternative alias
-.RS
-.nf
-.IP
-\&.als SN-STYLE SN-NO-DOT
-.fi
-.RE
-.IP
-Any such change becomes effective with the first use of
-.BR .NH ,
-.I after
-the new alias is defined.
-.
-.IP
-After invoking
-.BR .NH ,
-the assigned heading number is available in the strings
-.B SN-DOT
-(as it appears in the default formatting style for numbered headings,
-with a terminating period following the number),
-and
-.B SN-NO-DOT
-(with this terminating period omitted).
-.
-The string
-.B SN
-is also defined,
-as an alias for
-.BR SN-DOT ;
-if preferred,
-the user may redefine it as an alias for
-.BR SN-NO-DOT ,
-'ne 10
-by including the initialisation:
-.
-.RS
-.nf
-.IP
-\&.als SN SN-NO-DOT
-.fi
-.RE
-.
-.IP
-at any time;
-the change becomes effective with the next use of
-.BR .NH ,
-.I after
-the new alias is defined.
-.
-.TP
-.BI .SH\ [ xx ]
-Unnumbered subheading.
-The use of the optional
-.I xx
-argument is a GNU extension,
-which adjusts the point size of the unnumbered subheading
-to match that of a numbered heading,
-introduced using
-.BI .NH\  xx
-with the same value of
-.IR xx .
-.
-For example,
-given the same settings for
-.BR PS ,
-.B GROWPS
-and
-.BR PSINCR ,
-as used in the preceding
-.B .NH
-example,
-the sequence:
-.
-.RS
-.ne
-.nf
-.IP
-\&.SH 2
-An Unnumbered Subheading
-.fi
-.RE
-.
-.IP
-will print
-.RI \*(lq "An Unnumbered Subheading" \*(rq
-in 11.5pt
-.B bold
-text.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Highlighting
-.\" --------------------------------------------------------------------
-.
-The
-.I ms
-macros provide a variety of methods to highlight
-or emphasize text:
-.
-.TP
-.B ".B [\fItxt\fP [\fIpost\fP [\fIpre\fP]]]"
-Sets its first argument in
-.BR "bold type" .
-.
-If you specify a second argument,
-.I groff
-prints it in the previous font after
-the bold text, with no intervening space
-(this allows you to set punctuation after
-the highlighted text without highlighting
-the punctuation).
-.
-Similarly, it prints the third argument (if any)
-in the previous font
-.B before
-the first argument.
-.
-For example,
-.RS
-.
-.IP
-\&.B foo ) (
-.RE
-.
-.IP
-prints
-.RB ( foo ).
-.
-.IP
-If you give this macro no arguments,
-.I groff
-prints all text following in bold until
-the next highlighting, paragraph, or heading macro.
-.
-.TP
-.B ".R [\fItxt\fP [\fIpost\fP [\fIpre\fP]]]"
-Sets its first argument in
-roman (or regular) type.
-.
-It operates similarly to the
-.B B
-macro otherwise.
-.
-.TP
-.B ".I [\fItxt\fP [\fIpost\fP [\fIpre\fP]]]"
-Sets its first argument in
-.IR "italic type" .
-It operates similarly to the
-.B B
-macro otherwise.
-.
-.TP
-.B ".CW [\fItxt\fP [\fIpost\fP [\fIpre\fP]]]"
-Sets its first argument in a constant width face.
-.
-It operates similarly to the
-.B B
-macro otherwise.
-.
-.TP
-.B ".BI [\fItxt\fP [\fIpost\fP [\fIpre\fP]]]"
-Sets its first argument in bold italic type.
-.
-It operates similarly to the
-.B B
-macro otherwise.
-.
-.TP
-.BI ".BX [" txt ]
-Prints its argument and draws a box around it.
-.
-If you want to box a string that contains spaces,
-use a digit-width space (\[rs]0).
-.
-.TP
-.BI ".UL [" txt " [" post ]]
-Prints its first argument with an underline.
-.
-If you specify a second argument,
-.I groff
-prints it in the previous font after the underlined text, with no
-intervening space.
-.
-.TP
-.B .LG
-Prints all text following in larger type
-(2\~points larger than the current point size) until
-the next font size, highlighting, paragraph, or heading macro.
-.
-You can specify this macro multiple times to enlarge the point size as
-needed.
-.
-.TP
-.B .SM
-Prints all text following in
-smaller type
-(2\~points smaller than the current point size) until
-the next type size, highlighting, paragraph, or heading macro.
-.
-You can specify this macro multiple times to reduce the point size as
-needed.
-.
-.TP
-.B .NL
-Prints all text following in
-the normal point size
-(that is, the value of the
-.B PS
-register).
-.
-.TP
-.BI \[rs]*{ text \[rs]*}
-Print the enclosed
-.I text
-as a superscript.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Indents
-.\" --------------------------------------------------------------------
-.
-You may need to indent sections of text.
-.
-A typical use for indents is to create nested lists and sublists.
-.
-.
-.PP
-Use the
-.B RS
-and
-.B RE
-macros to start and end a section of indented text, respectively.
-.
-The
-.B PI
-register controls the amount of indent.
-.
-.
-.PP
-You can nest indented sections as deeply as needed by using multiple,
-nested pairs of
-.B RS
-and
-.BR RE .
-.
-.
-.\" --------------------------------------------------------------------
-.SS Lists
-.\" --------------------------------------------------------------------
-.
-The
-.B IP
-macro handles duties for all lists.
-.
-Its syntax is as follows:
-.
-.TP
-.BI ".IP [" marker " [" width ]]
-.
-.IP
-The
-.I marker
-is usually a bullet character
-.B \[rs](bu
-for unordered lists,
-a number (or auto-incrementing number register) for numbered lists,
-or a word or phrase for indented (glossary-style) lists.
-.
-.IP
-The
-.I width
-specifies the indent for the body of each list item.
-.
-Once specified, the indent remains the same for all list items in the
-document until specified again.
-.\" -----
-.br
-.ne 15
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Tab stops"
-.\" --------------------------------------------------------------------
-.
-Use the
-.B ta
-request to set tab stops as needed.
-.
-Use the
-.B TA
-macro to reset tabs to the default (every 5n).
-.
-You can redefine the
-.B TA
-macro to create a different set of default tab stops.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Displays and keeps"
-.\" --------------------------------------------------------------------
-.
-Use displays to show text-based examples or figures
-(such as code listings).
-.
-Displays turn off filling, so lines of code can be displayed as-is
-without inserting
-.B br
-requests in between each line.
-.
-Displays can be
-.I kept
-on a single page, or allowed to break across pages.
-.
-The following table shows the display types available.
-.RS
-.ne 11
-.na
-.TS
-cb   s    cbt
-cb   cb   ^
-lfCW lfCW lx.
-Display macro  Type of display
-With keep      No keep
-_
-\&.DS L        \&.LD   Left-justified.
-\&.DS I [\fIindent\fP] \&.ID   T{
-Indented (default indent in the \fBDI\fP register).
-T}
-\&.DS B        \&.BD   T{
-Block-centered (left-justified, longest line centered).
-T}
-\&.DS C        \&.CD   Centered.
-\&.DS R        \&.RD   Right-justified.
-_
-.TE
-.RE
-.ad
-.
-.LP
-Use the
-.B DE
-macro to end any display type.
-.
-The macros
-.B Ds
-and
-.B De
-were formerly provided as aliases for
-.B DS
-and
-.BR DE ,
-respectively, but they have been removed, and should no longer be used.
-.
-X11 documents which actually use
-.B Ds
-and
-.B De
-always load a specific macro file from the X11 distribution (macros.t)
-which provides proper definitions for the two macros.
-.
-.PP
-To
-.I keep
-text together on a page,
-such as
-a paragraph that refers to a table (or list, or other item)
-immediately following, use the
-.B KS
-and
-.B KE
-macros.
-.
-The
-.B KS
-macro begins a block of text to be kept on a single page,
-and the
-.B KE
-macro ends the block.
-.
-.
-.PP
-You can specify a
-.I "floating keep"
-using the
-.B KF
-and
-.B KE
-macros.
-.
-If the keep cannot fit on the current page,
-.I groff
-holds the contents of the keep and allows text following
-the keep (in the source file) to fill in the remainder of
-the current page.
-.
-When the page breaks,
-whether by an explicit
-.B bp
-request or by reaching the end of the page,
-.I groff
-prints the floating keep at the top of the new page.
-.
-This is useful for printing large graphics or tables
-that do not need to appear exactly where specified.
-.
-.
-.PP
-The macros
-.B B1
-and
-.B B2
-can be used to enclose a text within a box;
-.B .B1
-begins the box, and
-.B .B2
-ends it.
-.
-Text in the box is automatically placed in a diversion
-(keep).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Tables, figures, equations, and references"
-.\" --------------------------------------------------------------------
-.
-The
-.I \-ms
-macros support the standard
-.I groff
-preprocessors:
-.IR tbl ,
-.IR pic ,
-.IR eqn ,
-and
-.IR refer .
-.
-Mark text meant for preprocessors by enclosing it
-in pairs of tags as follows:
-.
-.TP
-.BR ".TS [H]" " and " .TE
-Denotes a table, to be processed by the
-.I tbl
-preprocessor.
-.
-The optional
-.BR H "\~argument"
-instructs
-.I groff
-to create a running header with the information
-up to the
-.B TH
-macro.
-.
-.I Groff
-prints the header at the beginning of the table;
-if the table runs onto another page,
-.I groff
-prints the header on the next page as well.
-.
-.TP
-.BR .PS " and " .PE
-Denotes a graphic, to be processed by the
-.I pic
-preprocessor.
-.
-You can create a
-.I pic
-file by hand, using the
-AT&T
-.I pic
-manual available on the Web as a reference,
-or by using a graphics program such as
-.IR xfig .
-.
-.TP
-.BR ".EQ [\fI\,align\/\fP]" " and " .EN
-Denotes an equation, to be processed by the
-.I eqn
-preprocessor.
-.
-The optional
-.I align
-argument can be
-.BR C ,
-.BR L ,
-or\~\c
-.B I
-to center (the default), left-justify, or indent
-the equation.
-.
-.TP
-.BR .[ " and " .]
-Denotes a reference, to be processed by the
-.I refer
-preprocessor.
-.
-The GNU
-.IR @g@refer (@MAN1EXT@)
-manual page provides a comprehensive reference
-to the preprocessor and the format of the
-bibliographic database.
-.
-.
-.\" --------------------------------------------------------------------
-.SS Footnotes
-.\" --------------------------------------------------------------------
-.
-The
-.I ms
-macros provide a flexible footnote system.
-.
-You can specify a numbered footnote by using the
-.B \[rs]**
-escape, followed by the text of the footnote
-enclosed by
-.B FS
-and
-.B FE
-macros.
-.
-.
-.PP
-You can specify symbolic footnotes
-by placing the mark character (such as
-.B \[rs](dg
-for the dagger character) in the body text,
-followed by the text of the footnote
-enclosed by
-.B FS\ \[rs](dg
-and
-.B FE
-macros.
-.
-.
-.PP
-You can control how
-.I groff
-prints footnote numbers by changing the value of the
-.B FF
-register as follows:
-.RS
-.ne 7
-.
-.TP
-0
-Prints the footnote number as a superscript; indents the footnote (default).
-.
-.TP
-1
-Prints the number followed by a period (like\~1.\&)
-and indents the footnote.
-.
-.TP
-2
-Like\~1, without an indent.
-.
-.TP
-3
-Like\~1, but prints the footnote number as a hanging paragraph.
-.
-.LP
-.RE
-You can use footnotes safely within keeps and displays,
-but avoid using numbered footnotes within floating keeps.
-.
-You can set a second
-.B \[rs]**
-between a
-.B \[rs]**
-and its corresponding
-.BR .FS ;
-as long as each
-.B .FS
-occurs
-.I after
-the corresponding
-.B \[rs]**
-and the occurrences of
-.B .FS
-are in the same order as the corresponding occurrences of
-.BR \[rs]** .
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Headers and footers"
-.\" --------------------------------------------------------------------
-.
-There are three ways to define headers and footers:
-.
-.IP \(bu 3n
-Use the strings
-.BR LH ,
-.BR CH ,
-and
-.B RH
-to set the left, center, and right headers; use
-.BR LF ,
-.BR CF ,
-and
-.B RF
-to set the left, center, and right footers.
-.
-This works best for documents that do not distinguish
-between odd and even pages.
-.
-.IP \(bu
-Use the
-.B OH
-and
-.B EH
-macros to define headers for the odd and even pages; and
-.B OF
-and
-.B EF
-macros to define footers for the odd and even pages.
-.
-This is more flexible than defining the individual strings.
-.
-The syntax for these macros is as follows:
-.RS
-.
-.IP
-.B ".OH '\fIleft\/\fP'\,\fIcenter\/\fP'\,\fIright\/\fP'"
-.RE
-.
-.IP
-You can replace the quote (\[aq]) marks with any character not
-appearing in the header or footer text.
-.
-.
-.PP
-You can also redefine the
-.B PT
-and
-.B BT
-macros to change the behavior of
-the header and footer, respectively.
-.
-The header process also calls the (undefined)
-.B HD
-macro after
-.B PT ;
-you can define this macro if you need additional processing
-after printing the header
-(for example, to draw a line below the header).
-.
-.
-.\" --------------------------------------------------------------------
-.SS Margins
-.\" --------------------------------------------------------------------
-.
-You control margins using a set of number registers.
-.
-The following table lists the register names and defaults:
-.RS
-.ne 8
-.na
-.TS
-cb   cb cb cb
-lfCW l  l  l.
-Reg.   Definition      Effective       Default
-_
-PO     Page offset (left margin)       next page       1i
-LL     Line length     next paragraph  6i
-LT     Header/footer length    next paragraph  6i
-HM     Top (header) margin     next page       1i
-FM     Bottom (footer) margin  next page       1i
-_
-.TE
-.RE
-.ad
-.
-.PP
-Note that there is no right margin setting.
-The combination of page offset and line length
-provide the information necessary to
-derive the right margin.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Multiple columns"
-.\" --------------------------------------------------------------------
-.
-The
-.I ms
-macros can set text in as many columns as will reasonably
-fit on the page.
-.
-The following macros are available.
-.
-All of them force a page break if a multi-column mode is already set.
-.
-However, if the current mode is single-column, starting a multi-column
-mode does
-.I not
-force a page break.
-.
-.TP
-.B .1C
-Single-column mode.
-.
-.TP
-.B .2C
-Two-column mode.
-.
-.TP
-.BI ".MC [" width " [" gutter ]]
-Multi-column mode.
-.
-If you specify no arguments, it is equivalent to the
-.B 2C
-macro.
-.
-Otherwise,
-.I width
-is the width of each column and
-.I gutter
-is the space between columns.
-.
-The
-.B MINGW
-number register is the default gutter width.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Creating a table of contents"
-.\" --------------------------------------------------------------------
-.
-Wrap text that you want to appear in the table of contents in
-.B XS
-and
-.B XE
-macros.
-.
-Use the
-.B TC
-macro to print the table of contents at the end of the document,
-resetting the page number to\~\c
-.B i
-(Roman numeral\~1).
-.
-.
-.PP
-You can manually create a table of contents
-by specifying a page number as the first argument to
-.BR XS .
-.
-Add subsequent entries using the
-.B XA
-macro.
-.
-For example:
-.RS
-.
-.PP
-.ne 8
-.nf
-\&.XS 1
-Introduction
-\&.XA 2
-A Brief History of the Universe
-\&.XA 729
-Details of Galactic Formation
-\&.\|.\|.
-\&.XE
-.fi
-.RE
-.
-.LP
-Use the
-.B PX
-macro to print a manually-generated table of contents
-without resetting the page number.
-.
-.
-.PP
-If you give the argument
-.B no
-to either
-.B PX
-or
-.BR TC ,
-.I groff
-suppresses printing the title
-specified by the
-.B \[rs]*[TOC]
-string.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Fractional point sizes"
-.\" --------------------------------------------------------------------
-.
-Traditionally, the
-.I ms
-macros only support integer values for the document\[aq]s font size
-and vertical spacing.
-.
-To overcome this restriction, values larger than or equal to 1000 are
-taken as fractional values, multiplied by 1000.
-.
-For example, \[oq].nr\~PS\~10250\[cq] sets the font size to 10.25
-points.
-.
-.
-.LP
-The following four registers accept fractional point sizes:
-.BR PS ,
-.BR VS ,
-.BR FPS ,
-and
-.BR FVS .
-.
-.
-.LP
-Due to backwards compatibility, the value of
-.B VS
-must be smaller than 40000 (this is 40.0 points).
-.
-.
-.\" --------------------------------------------------------------------
-.SH "DIFFERENCES FROM troff ms"
-.\" --------------------------------------------------------------------
-.
-The
-.I "groff ms"
-macros are a complete re-implementation,
-using no original AT&T code.
-.
-Since they take advantage of the extended features in
-.IR groff ,
-they cannot be used with AT&T
-.IR troff .
-.
-Other differences include:
-.
-.IP \(bu 3n
-The internals of
-.I "groff ms"
-differ from the internals of Unix
-.IR ms .
-.
-Documents that depend upon implementation details of Unix
-.I ms
-may not format properly with
-.IR "groff ms" .
-.
-.IP \(bu
-The error-handling policy of
-.I "groff ms"
-is to detect and report errors,
-rather than silently to ignore them.
-.
-.IP \(bu
-Some Bell Labs localisms are not implemented by default.
-.
-However, if you call the otherwise undocumented
-.BR SC
-section-header macro, you will enable implementations of three other
-archaic Bell Labs macros:
-.BR UC ,
-.BR P1 ,
-and
-.BR P2 .
-.
-These are not enabled by default because (a)\~they were not documented,
-in the original
-.IR "ms manual" ,
-and (b)\~the
-.B P1
-and
-.B UC
-macros both collide with different macros in the Berkeley version of
-.IR ms .
-.
-.IP
-These emulations are sufficient to give back the 1976 Kernighan\~&
-Cherry paper
-.I "Typesetting Mathematics \(en User\[aq]s Guide"
-its section headings, and restore some text that had gone missing as
-arguments of undefined macros.
-.
-No warranty express or implied is given as to how well the typographic
-details these produce match the original Bell Labs macros.
-.
-.IP \(bu
-Berkeley localisms, in particular the
-.B TM
-and
-.B CT
-macros,
-are not implemented.
-.
-.IP \(bu
-.I "Groff ms"
-does not work in compatibility mode (e.g., with the
-.B \-C
-option).
-.
-.IP \(bu
-There is no support for typewriter-like devices.
-.
-.IP \(bu
-.I "Groff ms"
-does not provide cut marks.
-.
-.IP \(bu
-Multiple line spacing is not supported
-(use a larger vertical spacing instead).
-.
-.IP \(bu
-Some Unix
-.I ms
-documentation says that the
-.B CW
-and
-.B GW
-number registers can be used to control the column width and
-gutter width, respectively.
-.
-These number registers are not used in
-.IR "groff ms" .
-.
-.IP \(bu
-Macros that cause a reset
-(paragraphs, headings, etc.\&)
-may change the indent.
-.
-Macros that change the indent do not increment or decrement the
-indent, but rather set it absolutely.
-.
-This can cause problems for documents that define additional macros of
-their own.
-.
-The solution is to use not the
-.B in
-request but instead the
-.B RS
-and
-.B RE
-macros.
-.
-.IP \(bu
-The number register
-.B GS
-is set to\~1 by the
-.I "groff ms"
-macros,
-but is not used by the Unix
-.I ms
-macros.
-.
-Documents that need to determine whether they are being formatted with
-Unix
-.I ms
-or
-.I "groff ms"
-should use this number register.
-.
-.IP \(bu
-To make
-.I "groff ms"
-use the default page offset (which also specifies the left margin),
-the
-.B PO
-number register must stay undefined until the first
-.B ms
-macro is evaluated.
-.
-This implies that
-.B PO
-should not be used early in the document, unless it is changed also:
-Remember that accessing an undefined register automatically defines it.
-.br
-.ne 23
-.
-.
-.\" --------------------------------------------------------------------
-.SS Strings
-.\" --------------------------------------------------------------------
-.
-You can redefine the following strings to adapt the
-.I "groff ms"
-macros to languages other than English:
-.TS
-center;
-cb   cb
-lfCW l.
-String Default Value
-_
-REFERENCES     References
-ABSTRACT       ABSTRACT
-TOC    Table of Contents
-MONTH1 January
-MONTH2 February
-MONTH3 March
-MONTH4 April
-MONTH5 May
-MONTH6 June
-MONTH7 July
-MONTH8 August
-MONTH9 September
-MONTH10        October
-MONTH11        November
-MONTH12        December
-_
-.TE
-.
-.
-.PP
-The
-.B \[rs]*-
-string produces an em dash \[em] like this.
-.
-.
-.PP
-Use
-.B \[rs]*Q
-and
-.B \[rs]*U
-to get a left and right typographer\[aq]s quote,
-respectively, in
-.I troff
-(and plain quotes in
-.IR nroff ).
-.
-.
-.\" --------------------------------------------------------------------
-.SS Text Settings
-.\" --------------------------------------------------------------------
-.
-The
-.B FAM
-string sets the default font family.
-.
-If this string is undefined at initialization,
-it is set to Times.
-.
-.
-.LP
-The point size, vertical spacing, and inter-paragraph spacing for
-footnotes are controlled by the number registers
-.BR FPS ,
-.BR FVS ,
-and
-.BR FPD ;
-at initialization these are set to
-.BR \[rs]n(PS\-2 ,
-.BR \[rs]n[FPS]+2 ,
-and
-.BR \[rs]n(PD/2 ,
-respectively.
-.
-If any of these registers are defined before initialization,
-the initialization macro does not change them.
-.
-.
-.LP
-The hyphenation flags (as set by the
-.B hy
-request) are set from the
-.B HY
-register;
-the default is\~14.
-.
-.
-.PP
-Improved accent marks
-(as originally defined in Berkeley\[aq]s
-.I ms
-version)
-are available by specifying the
-.B AM
-macro at the beginning of your document.
-.
-You can place an accent over most characters by specifying the string
-defining the accent directly after the character.
-.
-For example,
-.B n\[rs]*\[ti]
-produces an n with a tilde over it.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "NAMING CONVENTIONS"
-.\" --------------------------------------------------------------------
-.
-The following conventions are used for names of macros, strings and
-number registers.
-.
-External names available to documents that use the
-.I "groff ms"
-macros contain only uppercase letters and digits.
-.
-.
-.LP
-Internally the macros are divided into modules;
-naming conventions are as follows:
-.
-.IP \(bu 3n
-Names used only within one module are of the form
-.IB \%module * name\fR.
-.
-.IP \(bu
-Names used outside the module in which they are defined are of the form
-.IB \%module @ name\fR.
-.
-.IP \(bu
-Names associated with a particular environment are of the form
-.IB \%environment : name\fR;
-these are used only within the
-.B par
-module.
-.
-.IP \(bu
-.I name
-does not have a module prefix.
-.
-.IP \(bu
-Constructed names used to implement arrays are of the form
-.IB \%array ! index\fR.
-.
-.
-.PP
-Thus the groff ms macros reserve the following names:
-.
-.IP \(bu 3n
-Names containing the characters
-.BR * ,
-.BR @ ,
-and\~\c
-.BR : .
-.
-.IP \(bu
-Names containing only uppercase letters and digits.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-.B @MACRODIR@/ms.tmac
-(a wrapper file for
-.BR s.tmac )
-.br
-.B @MACRODIR@/s.tmac
-.
-.
-.
-.\" --------------------------------------------------------------------
-.ad l
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@),
-.BR @g@tbl (@MAN1EXT@),
-.BR @g@pic (@MAN1EXT@),
-.BR @g@eqn (@MAN1EXT@),
-.BR @g@refer (@MAN1EXT@),
-.I Groff: The GNU Implementation of troff
-by Trent Fisher and Werner Lemberg.
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.cp \n[groff_ms_C]
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/tmac/groff_trace.7.man b/tmac/groff_trace.7.man
new file mode 100644 (file)
index 0000000..85c2952
--- /dev/null
@@ -0,0 +1,333 @@
+.TH GROFF_TRACE @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_trace \- groff macro package trace.tmac
+.
+.\" groff_trace.7
+.\" File position: <groff-source>/tmac/groff_trace.man
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_trace_C \n[.C]
+.cp 0
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2002-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" Permission is granted to copy, distribute and/or modify this
+.\" document under the terms of the GNU Free Documentation License,
+.\" Version 1.3 or any later version published by the Free Software
+.\" Foundation; with no Invariant Sections, with no Front-Cover Texts,
+.\" and with no Back-Cover Texts.
+.\"
+.\" A copy of the Free Documentation License is included as a file
+.\" called FDL in the main directory of the groff source package.
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY "groff \-m trace"
+.RI [ option
+\&.\|.\|.\&]
+.RI [ input-file
+\&.\|.\|.\&]
+.YS
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+The
+.I trace
+macro package of
+.BR groff (@MAN1EXT@)
+can be a valuable tool for debugging documents written in the roff
+formatting language.
+.
+A call stack trace is protocolled on standard error, this is, a
+diagnostic message is emitted on entering and exiting of a macro call.
+.
+This greatly eases to track down an error in some macro.
+.
+.
+.P
+This tracing process is activated by specifying the groff or troff
+command-line option
+.BR \-m\ trace .
+.
+This works also with the
+.BR groffer (@MAN1EXT@)
+viewer program.
+.
+A finer control can be obtained by including the macro file within the
+document by the groff macro call
+.BR .mso\ trace.tmac .
+.
+Only macros that are defined after this line are traced.
+.
+.
+.P
+If the command-line option
+.B \-r\ trace-full=1
+is given (or if this register is set in the document), number and
+string register assignments together with some other requests are
+traced also.
+.
+.
+.P
+If some other macro package should be traced as well it must be
+specified after
+.B \-m\ trace
+on the command line.
+.
+.
+.P
+The macro file
+.B trace.tmac
+is unusual because it does not contain any macros to be called by a
+user.
+.
+Instead, the existing macro definition and appending facilities are
+modified such that they display diagnostic messages.
+.
+.
+.\" ====================================================================
+.SH EXAMPLES
+.\" ====================================================================
+.
+In the following examples, a roff fragment is fed into groff via
+standard input.
+.
+As we are only interested in the diagnostic messages (standard error)
+on the terminal, the normal formatted output (standard output) is
+redirected to the nirvana device
+.IR /dev/null .
+.
+The resulting diagnostic messages are displayed directly below the
+corresponding example.
+.
+.
+.\" ====================================================================
+.SS "Command line option"
+Example:
+.
+.RS
+.P
+.EX
+\fIsh#\fP echo \[aq].
+> .de test_macro
+> ..
+> .test_macro
+> .test_macro some dummy arguments
+> \[aq] | groff \-m trace > /dev/null
+
+*** .de test_macro
+*** de trace enter: .test_macro
+*** trace exit: .test_macro
+*** de trace enter: .test_macro "some" "dummy" "arguments"
+*** trace exit: .test_macro "some" "dummy" "arguments"
+.EE
+.RE
+.
+.P
+The entry and the exit of each macro call is displayed on the terminal
+(standard output) \[em] together with the arguments (if any).
+.
+.
+.\" ====================================================================
+.SS "Nested macro calls"
+Example:
+.
+.RS
+.P
+.EX
+\fIsh#\fP echo \[aq].
+> .de child
+> ..
+> .de parent
+> .child
+> ..
+> .parent
+> \[aq] | groff \-m trace > /dev/null
+
+*** .de child
+*** .de parent
+*** de trace enter: .parent
+ *** de trace enter: .child
+ *** trace exit: .child
+*** trace exit: .parent
+.EE
+.RE
+.
+.P
+This shows that macro calls can be nested.
+.
+This powerful feature can help to tack down quite complex call stacks.
+.
+.
+.\" ====================================================================
+.SS "Activating with .mso"
+Example:
+.
+.RS
+.P
+.EX
+\fIsh#\fP echo \[aq].
+> .de before
+> ..
+> .mso trace.tmac
+> .de after
+> ..
+> .before
+> .after
+> .before
+> \[aq] | groff > /dev/null
+
+*** de trace enter: .after
+*** trace exit: .after
+.EE
+.RE
+.
+.P
+Here, the tracing is activated within the document, not by a
+command-line option.
+.
+As tracing was not active when macro
+.I before
+was defined, no call of this macro is protocolled; on the other hand,
+the macro
+.I after
+is fully protocolled.
+.
+.
+.\" ====================================================================
+.SH PROBLEMS
+.\" ====================================================================
+.
+Because
+.B trace.tmac
+wraps the
+.B .de
+request (and its cousins), macro arguments are expanded one level more.
+.
+This causes problems if an argument contains four backslashes or more
+to prevent too early expansion of the backslash.
+.
+For example, this macro call
+.
+.IP
+.EX
+\&.foo \e\e\e\en[bar]
+.EE
+.
+.
+.P
+normally passes \[oq]\e\en[bar]\[cq] to macro \[oq].foo\[cq], but with
+the redefined
+.B .de
+request it passes \[oq]\en[bar]\[cq] instead.
+.
+.
+.P
+The solution to this problem is to use groff's
+.B \eE
+escape which is an escape character not interpreted in copy mode, for
+example
+.
+.IP
+.EX
+\&.foo \eEn[bar]
+.EE
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+The
+.I trace
+macros are kept in the file
+.B trace.tmac
+located in the
+.IR "tmac directory" ;
+see
+.BR groff_tmac (@MAN5EXT@)
+for details.
+.
+.
+.\" ====================================================================
+.SH ENVIRONMENT
+.\" ====================================================================
+.
+.TP
+.I GROFF_TMAC_PATH
+A colon-separated list of additional tmac directories in which to
+search for macro files; see
+.BR groff_tmac (@MAN5EXT@)
+for details.
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+.
+The
+.I trace
+macro packages was written by James Clark.
+.
+This document was written by
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.
+.IR "Groff: The GNU Implementation of troff" ,
+by Trent A.\& Fisher and Werner Lemberg,
+is the primary
+.I groff
+manual.
+.
+You can browse it interactively with \[lq]info groff\[rq].
+.
+.
+.TP
+.BR groff (@MAN1EXT@)
+An overview of the groff system.
+.
+.TP
+.BR troff (@MAN1EXT@)
+For details on option
+.BR \-m .
+.
+.TP
+.BR groffer (@MAN1EXT@)
+A viewer program for all kinds of roff documents.
+.
+.TP
+.BR groff_tmac (@MAN5EXT@)
+A general description of groff macro packages.
+.
+.TP
+.BR groff (@MAN7EXT@)
+A short reference for the groff formatting language.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_trace_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/tmac/groff_trace.man b/tmac/groff_trace.man
deleted file mode 100644 (file)
index 7b04373..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-.TH GROFF_TRACE @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_trace \- groff macro package trace.tmac
-.
-.\" groff_trace.7
-.\" File position: <groff-source>/tmac/groff_trace.man
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2002-2014 Free Software Foundation, Inc.
-
-This file is part of groff, the GNU roff type-setting system.
-
-Permission is granted to copy, distribute and/or modify this document
-under the terms of the GNU Free Documentation License, Version 1.3 or
-any later version published by the Free Software Foundation; with the
-Invariant Sections being this .ig-section and AUTHOR, with no
-Front-Cover Texts, and with no Back-Cover Texts.
-
-A copy of the Free Documentation License is included as a file called
-FDL in the main directory of the groff source package.
-..
-.
-.de au
-Written by
-.MT groff-bernd.warken-72@web.de
-Bernd Warken
-.ME .
-..
-.
-.ds Ellipsis .\|.\|.\&\"
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.SY "groff \-m trace"
-.RI [ options
-.IR \*[Ellipsis] ]
-.RI [ files
-.IR \*[Ellipsis] ]
-.YS
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-The
-.I trace
-macro package of
-.BR groff (@MAN1EXT@)
-can be a valuable tool for debugging documents written in the roff
-formatting language.
-.
-A call stack trace is protocolled on standard error, this is, a
-diagnostic message is emitted on entering and exiting of a macro call.
-.
-This greatly eases to track down an error in some macro.
-.
-.
-.P
-This tracing process is activated by specifying the groff or troff
-command line option
-.BR \-m\ trace .
-.
-This works also with the
-.BR groffer (@MAN1EXT@)
-viewer program.
-.
-A finer control can be obtained by including the macro file within the
-document by the groff macro call
-.BR .mso\ trace.tmac .
-.
-Only macros that are defined after this line are traced.
-.
-.
-.P
-If command line option
-.B \-r\ trace-full=1
-is given (or if this register is set in the document), number and
-string register assignments together with some other requests are
-traced also.
-.
-.
-.P
-If some other macro package should be traced as well it must be
-specified after
-.B \-m\ trace
-on the command line.
-.
-.
-.P
-The macro file
-.B trace.tmac
-is unusual because it does not contain any macros to be called by a
-user.
-.
-Instead, the existing macro definition and appending facilities are
-modified such that they display diagnostic messages.
-.
-.
-.\" --------------------------------------------------------------------
-.SH EXAMPLES
-.\" --------------------------------------------------------------------
-.
-In the following examples, a roff fragment is fed into groff via
-standard input.
-.
-As we are only interested in the diagnostic messages (standard error)
-on the terminal, the normal formatted output (standard output) is
-redirected to the nirvana device
-.IR /dev/null .
-.
-The resulting diagnostic messages are displayed directly below the
-corresponding example.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Command line option"
-Example:
-.
-.RS
-.P
-.EX
-\fIsh#\fP echo \[aq].
-> .de test_macro
-> ..
-> .test_macro
-> .test_macro some dummy arguments
-> \[aq] | groff \-m trace > /dev/null
-
-*** .de test_macro
-*** de trace enter: .test_macro
-*** trace exit: .test_macro
-*** de trace enter: .test_macro "some" "dummy" "arguments"
-*** trace exit: .test_macro "some" "dummy" "arguments"
-.EE
-.RE
-.
-.P
-The entry and the exit of each macro call is displayed on the terminal
-(standard output) \[em] together with the arguments (if any).
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Nested macro calls"
-Example:
-.
-.RS
-.P
-.EX
-\fIsh#\fP echo \[aq].
-> .de child
-> ..
-> .de parent
-> .child
-> ..
-> .parent
-> \[aq] | groff \-m trace > /dev/null
-
-*** .de child
-*** .de parent
-*** de trace enter: .parent
- *** de trace enter: .child
- *** trace exit: .child
-*** trace exit: .parent
-.EE
-.RE
-.
-.P
-This shows that macro calls can be nested.
-.
-This powerful feature can help to tack down quite complex call stacks.
-.
-.
-.\" --------------------------------------------------------------------
-.SS "Activating with .mso"
-Example:
-.
-.RS
-.P
-.EX
-\fIsh#\fP echo \[aq].
-> .de before
-> ..
-> .mso trace.tmac
-> .de after
-> ..
-> .before
-> .after
-> .before
-> \[aq] | groff > /dev/null
-
-*** de trace enter: .after
-*** trace exit: .after
-.EE
-.RE
-.
-.P
-Here, the tracing is activated within the document, not by a command
-line option.
-.
-As tracing was not active when macro
-.I before
-was defined, no call of this macro is protocolled; on the other hand,
-the macro
-.I after
-is fully protocolled.
-.
-.
-.\" --------------------------------------------------------------------
-.SH PROBLEMS
-.\" --------------------------------------------------------------------
-.
-Because
-.B trace.tmac
-wraps the
-.B .de
-request (and its cousins), macro arguments are expanded one level more.
-.
-This causes problems if an argument contains four backslashes or more
-to prevent too early expansion of the backslash.
-.
-For example, this macro call
-.
-.IP
-.EX
-\&.foo \e\e\e\en[bar]
-.EE
-.
-.
-.P
-normally passes \[oq]\e\en[bar]\[cq] to macro \[oq].foo\[cq], but with
-the redefined
-.B .de
-request it passes \[oq]\en[bar]\[cq] instead.
-.
-.
-.P
-The solution to this problem is to use groff\[aq]s
-.B \eE
-escape which is an escape character not interpreted in copy mode, for
-example
-.
-.IP
-.EX
-\&.foo \eEn[bar]
-.EE
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-.
-The
-.I trace
-macros are kept in the file
-.B trace.tmac
-located in the
-.IR "tmac directory" ;
-see
-.BR groff_tmac (@MAN5EXT@)
-for details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH ENVIRONMENT
-.\" --------------------------------------------------------------------
-.
-.TP
-.B $GROFF_TMAC_PATH
-A colon-separated list of additional tmac directories in which to
-search for macro files; see
-.BR groff_tmac (@MAN5EXT@)
-for details.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.
-.TP
-.BR groff (@MAN1EXT@)
-An overview of the groff system.
-.
-.TP
-.BR troff (@MAN1EXT@)
-For details on option
-.BR \-m .
-.
-.TP
-.BR groffer (@MAN1EXT@)
-A viewer program for all kinds of roff documents.
-.
-.TP
-.BR groff_tmac (@MAN5EXT@)
-A general description of groff macro packages.
-.
-.TP
-.BR groff (@MAN7EXT@)
-A short reference for the groff formatting language.
-.
-.P
-A complete reference for all parts of the groff system is found in the
-groff
-.BR info (1)
-file.
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
diff --git a/tmac/groff_www.7.man b/tmac/groff_www.7.man
new file mode 100644 (file)
index 0000000..9c2f204
--- /dev/null
@@ -0,0 +1,731 @@
+.TH GROFF_WWW @MAN7EXT@ "@MDATE@" "groff @VERSION@"
+.SH NAME
+groff_www \- groff macros for authoring web pages
+.
+.\" User level guide to using the -mwww macroset
+.
+.
+.\" Save and disable compatibility mode (for, e.g., Solaris 10/11).
+.do nr groff_www_C \n[.C]
+.cp 0
+.do mso www.tmac
+.
+.
+.\" ====================================================================
+.\" Legal Terms
+.\" ====================================================================
+.\"
+.\" Copyright (C) 2000-2018 Free Software Foundation, Inc.
+.\"
+.\" This file is part of groff, the GNU roff type-setting system.
+.\"
+.\" 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 3 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, see
+.\" <http://www.gnu.org/licenses/>.
+.
+.
+.\" we need the .LK here as we use it in the middle as an example --
+.\" once the user requests .LK then the automatic generation of links
+.\" at the top of the document is suppressed.
+.LK
+.
+.HR
+.
+.
+.\" ====================================================================
+.SH SYNOPSIS
+.\" ====================================================================
+.
+.SY "groff \-m www"
+.RI [ option
+\&.\|.\|.\&]
+.RI [ input-file
+\&.\|.\|.\&]
+.
+.
+.\" ====================================================================
+.SH DESCRIPTION
+.\" ====================================================================
+.
+This manual page describes the GNU \-mwww macro package, which is part of
+the groff document formatting system.
+.
+The manual page is very a basic guide, and the HTML device driver
+.RB ( \%grohtml )
+has been completely rewritten but still remains as in an alpha state.
+.
+It has been included into the distribution so that a lot of people have a
+chance to test it.
+.
+Note that this macro file is automatically called (via the
+.I troffrc
+file) if you use
+.B \-Thtml
+or
+.BR \-Txhtml .
+.
+.
+.PP
+To see the hyperlinks in action, please format this man page with the
+.B \%grohtml
+device.
+.
+.
+.PP
+Here is a summary of the functions found in this macro set.
+.TS
+tab(@);
+l l.
+\&.JOBNAME@split output into multiple files
+\&.HX@automatic heading level cut off
+\&.BCL@specify colours on a web page
+\&.BGIMG@specify background image
+\&.URL@create a URL using two parameters
+\&.FTP@create an FTP reference
+\&.MTO@create an HTML email address
+\&.TAG@generate an HTML name
+\&.IMG@include an image file
+\&.PIMG@include PNG image
+\&.MPIMG@place PNG on the margin and wrap text around it
+\&.HnS@begin heading
+\&.HnE@end heading
+\&.LK@emit automatically collected links.
+\&.HR@produce a horizontal rule
+\&.NHR@suppress automatic generation of rules.
+\&.HTL@only generate HTML title
+\&.HEAD@add data to <head> block
+\&.ULS@unorder list begin
+\&.ULE@unorder list end
+\&.OLS@ordered list begin
+\&.OLE@ordered list end
+\&.DLS@definition list begin
+\&.DLE@definition list end
+\&.LI@insert a list item
+\&.DC@generate a drop capital
+\&.HTML@pass an HTML raw request to the device driver
+\&.CDS@code example begin
+\&.CDE@code example end
+\&.ALN@place links on left of main text.
+\&.LNS@start a new two-column table with links in the left.
+\&.LNE@end the two-column table.
+\&.LINKSTYLE@initialize default URL attributes.
+.TE
+.
+.
+.PP
+Output of the
+.BR pic ,
+.BR eqn ,
+.BR refer ,
+and
+.B tbl
+preprocessors is acceptable as input.
+.
+.
+.\" ====================================================================
+.SH REQUESTS
+.\" ====================================================================
+.
+.TP
+.B .JOBNAME filename
+Split output into multiple HTML files.
+.
+A file is split whenever a \&.SH or \&.NH\ 1 is encountered.
+.
+Its argument is the file stem name for future output files.
+.
+This option is equivalent to
+.BR \%grohtml 's
+.B \-j
+option.
+.
+.TP
+.B .HX n
+Specify the cut off depth when generating links from section headings.
+.
+For example, a parameter of\~2 would cause
+.B \%grohtml
+to generate a list of links for
+.B .NH\ 1
+and
+.B .NH\ 2
+but not for
+.BR .NH\ 3 .
+.
+Whereas
+.RS
+.IP
+.nf
+.B .HX 0
+.fi
+.RE
+.IP
+tells
+.B \%grohtml
+that no heading links should be created at all.
+.
+Another method for turning automatic headings off is by issuing the
+command-line switch
+.B \-P\-l
+to
+.BR groff .
+.
+.TP
+.B .BCL foreground background active not-visited visited
+This macro takes five parameters: foreground, background, active hypertext
+link, hypertext link not yet visited, and visited hypertext link colour.
+.
+.TP
+.B .BGIMG imagefile
+the only parameter to this macro is the background image file.
+.
+.TP
+.B .URL url [description] [after]
+generates
+.TAG URL
+a URL using either one, two or three arguments.
+.
+The first parameter is the actual URL, the second is the name of the
+link, and the third is optional stuff to be printed immediately
+afterwards.
+.
+If
+.B description
+and
+.B after
+are absent then the
+.B URL
+becomes the anchor text.
+.
+Hyphenation is disabled while printing the actual URL;
+explicit breakpoints should be inserted with the
+.B \[rs]:
+escape.
+.
+Here is how to encode
+.UR http://\:foo.\:org/
+foo
+.UE :
+.RS
+.IP
+.B .URL http://\[rs]:foo.\[rs]:org/ "foo" :
+.RE
+.
+.IP
+If this is processed by a device other than
+.B \-Thtml
+or
+.B \-Txhtml
+it appears as:
+.RS
+.IP
+foo \[la]\f[CR]http://foo.org\f[]\[ra]:
+.RE
+.
+.IP
+The URL macro can be of any type; for example we can reference
+.UR pic.html
+Eric Raymond's pic guide
+.UE
+by:
+.RS
+.IP
+.B .URL pic.html \[dq]Eric Raymond's pic guide\[dq]
+.RE
+.
+.TP
+.B .MTO address [description] [after]
+Generate an email HTML reference.
+.
+The first argument is mandatory as the email address.
+.
+The optional second argument is the text you see in your browser.
+.
+If an empty argument is given,
+.B address
+is used instead.
+.
+An optional third argument is stuff printed immediately afterwards.
+.
+Hyphenation is disabled while printing the actual email address.
+.
+For example,
+.MT joe@user.org
+Joe User
+.ME
+can be achieved by the following macro:
+.RS
+.IP
+.B .MTO joe@user.org \[dq]Joe User\[dq]
+.RE
+.
+.IP
+Note that all the URLs actually are treated as consuming no textual
+space in groff.
+.
+This could be considered as a bug since it causes some problems.
+.
+To circumvent this,
+.B www.tmac
+inserts a zero-width character which expands to a harmless space (only
+if run with
+.B \-Thtml
+or
+.BR \-Txhtml ).
+.
+.TP
+.B .FTP url [description] [after]
+indicates that data can be obtained via FTP.
+.
+The first argument is the URL and the second is the browser text.
+.
+A third argument, similar to the macros above, is intended for stuff
+printed immediately afterwards.
+.
+The second and the third parameter are optional.
+.
+Hyphenation is disabled while printing the actual URL.
+.
+As an example, here is the location of the
+.UR ftp://\:ftp.gnu.org/
+GNU FTP server
+.UE .
+.
+The macro example above can be specified as:
+.RS
+.IP
+.B .FTP ftp://\[rs]:ftp.gnu.org/ \[dq]GNU FTP server\[dq] .
+.RE
+.
+.TP
+.B .TAG name
+Generates an HTML name tag from its argument.
+.
+This can then be referenced using the
+.UR #URL
+URL
+.UE
+macro.
+.
+As you can see, you must precede the tag name with
+.B #
+since it is a local reference.
+.
+This link was achieved via placing a TAG in the URL description above;
+the source looks like this:
+.RS
+.IP
+.nf
+.ft B
+\&.TP
+\&.B URL
+generates
+\&.TAG URL
+a URL using either two or three arguments.
+\&.\|.\|.
+.fi
+.ft P
+.RE
+.
+.TP
+.B .IMG [\-R|\-L|\-C] filename [width] [height]
+Include a picture into the document.
+.
+The first argument is the horizontal location: right, left, or center
+.RB ( \-R ,
+.BR \-L ,
+or
+.BR \-C ).
+.
+Alignment is centered by default
+.RB ( \-C ).
+.
+The second argument is the filename.
+.
+The optional third and fourth arguments are the width and height.
+.
+If the width is absent it defaults to 1\~inch.
+.
+If the height is absent it defaults to the width.
+.
+This maps onto an HTML img tag.
+.
+If you are including a PNG image then it is advisable to use the
+.B PIMG
+macro.
+.
+.TP
+.B .PIMG [\-R|\-L|\-C] filename [width [height]]
+Include an image in PNG format.
+.
+This macro takes exactly the same parameters as the
+.B IMG
+macro; it has the advantage of working with PostScript and HTML devices
+also since it can automatically convert the image into the EPS format,
+using the following programs of the
+.B netpbm
+package:
+.BR pngtopnm ,
+.BR pnmcrop ,
+and
+.BR pnmtops .
+.
+If the document isn't processed with
+.B \-Thtml
+or
+.B \-Txhtml
+it is necessary to use the
+.B \-U
+option of groff.
+.
+.TP
+.B .MPIMG [\-R|\-L] [\-G gap] filename [width [height]]
+Place a PNG image on the margin and wrap text around it.
+.
+The first parameters are optional.
+.
+The alignment: left or right
+.RB ( \-L
+or
+.BR \-R )
+specifies the margin where the picture is placed at.
+.
+The default alignment is left
+.RB ( \-L ).
+.
+Optionally,
+.BI \-G \~gap
+can be used to arrange a gap between the picture and the text that
+wraps around it.
+.
+The default gap width is zero.
+.
+.br
+The first non-optional argument is the filename.
+.
+The optional following arguments are the width and height.
+.
+If the width is absent it defaults to 1\~inch.
+.
+If the height is absent it defaults to the width.
+.
+Example:
+.RS
+.IP
+.nf
+.ft B
+\&.MPIMG \-L \-G 2c foo.png 3c 1.5c
+.ft P
+.fi
+.RE
+.
+.IP
+The height and width may also be given as percentages.
+.
+The PostScript device calculates the width from the
+.B .l
+register and the height from the
+.B .p
+register.
+.
+For example:
+.RS
+.IP
+.nf
+.ft B
+\&.MPIMG \-L \-G 2c foo.png 15%
+.ft P
+.fi
+.RE
+.
+.TP
+.B .HnS n
+Begin heading.
+.
+The numeric heading level
+.I n
+is specified by the first parameter.
+.
+Use this macro if your headings contain URL, FTP or MTO macros.
+.
+Example:
+.RS
+.IP
+.nf
+.ft B
+\&.HnS 1
+\&.HR
+GNU Troff
+\&.URL http://groff.ffii.org (Groff)
+\&\(em a
+\&.URL http://www.gnu.org/ GNU
+\&project.
+\&Hosted by
+\&.URL http://ffii.org/ FFII .
+\&.HR
+\&.HnE
+.ft P
+.fi
+.RE
+.
+.IP
+In this case you might wish to disable automatic links to headings.
+.
+This can be done via
+.B \-P\-l
+from the command line.
+.\" or by using a call to \[lq].HX 0\[rq].
+.
+.
+.TP
+.B .HnE
+End heading.
+.
+.
+.TP
+.B .LK
+.TAG LK
+Force \%grohtml to place the automatically generated links at this
+position.
+.
+If this manual page has been processed with
+.B \-Thtml
+or
+.B \-Txhtml
+those links can be seen right here.
+.
+.LK
+.
+.TP
+.B .HR
+Generate a full-width horizontal rule for
+.B \-Thtml
+and
+.BR \-Txhtml .
+.
+No effect for all other devices.
+.
+.TP
+.B .NHR
+Suppress generation of the top and bottom rules which \%grohtml emits
+by default.
+.
+.TP
+.B .HTL
+Generate an HTML title only.
+.
+This differs from the
+.B TL
+macro of the
+.B ms
+macro package which generates both an HTML title and an <H1> heading.
+.
+Use it to provide an HTML title as search engine fodder but a graphic
+title in the document.
+.
+The macro terminates when a space or break is seen (.sp, \&.br).
+.
+.TP
+.B .HEAD
+Add arbitrary HTML data to the <head> block.
+.
+Ignored if not processed with
+.B \-Thtml
+or
+.BR \-Txhtml .
+.
+Example:
+.RS
+.IP
+.nf
+.B ".HEAD" "\[dq]<link \[rs]"
+.B "  rel=\[dq]\[dq]icon\[dq]\[dq] \[rs]"
+.B "  type=\[dq]\[dq]image/png\[dq]\[dq] \[rs]"
+.B "  href=\[dq]\[dq]http://foo.org//bar.png\[dq]\[dq]/>\[dq]"
+.fi
+.ft P
+.RE
+.
+.TP
+.B .HTML
+All text after this macro is treated as raw HTML.
+.
+If the document is processed without
+.B \-Thtml
+or
+.B \-Txhtml
+then the macro is ignored.
+.
+Internally, this macro is used as a building block for other
+higher-level macros.
+.
+.IP
+For example, the
+.B BGIMG
+macro is defined as
+.RS
+.IP
+.nf
+.ft B
+\&.de BGIMG
+\&.   HTML <body background=\[rs]\[rs]$1>
+\&..
+.ft P
+.fi
+.RE
+.
+.
+.TP
+.B .DC l text [color]
+Produce a drop capital.
+.
+The first parameter is the letter to be dropped and enlarged, the second
+parameter
+.B text
+is the adjoining text whose height the first letter should not exceed.
+.
+The optional third parameter is the color of the dropped letter.
+.
+It defaults to black.
+.
+.TP
+.B ".CDS"
+Start displaying a code section in constant width font.
+.
+.TP
+.B ".CDE"
+End code display
+.
+.TP
+.B ".ALN [color] [percentage]"
+Place section heading links automatically to the left of the main text.
+.
+The color argument is optional and if present indicates which HTML
+background color is to be used under the links.
+.
+The optional percentage indicates the amount of width to devote to
+displaying the links.
+.
+The default values are #eeeeee and 30 for color and percentage width,
+respectively.
+.
+This macro should only be called once at the beginning of the document.
+.
+After calling this macro each section heading emits an HTML table
+consisting of the links in the left and the section text on the right.
+.
+.TP
+.B ".LNS"
+Start a new two-column table with links in the left column.
+.
+This can be called if the document has text before the first \&.SH and
+if \&.ALN is used.
+.
+Typically this is called just before the first paragraph and after the
+main title as it indicates that text after this point should be
+positioned to the right of the left-hand navigational links.
+.
+.TP
+.B ".LNE"
+End a two-column table.
+.
+This should be called at the end of the document if \&.ALN was used.
+.
+.TP
+.B ".LINKSTYLE color [ fontstyle [ openglyph closeglyph ] ]"
+Initialize default URL attributes to be used if this macro set is not
+used with the HTML device.
+.
+The macro set initializes itself with the following call
+.RS
+.IP
+.nf
+.ft B
+\&.LINKSTYLE blue CR \e[la] \e[ra]
+.ft P
+.fi
+.RE
+.
+.IP
+but these values will be superseded by a user call to LINKSTYLE.
+.
+.
+.\" ====================================================================
+.SH SECTION HEADING LINKS
+.\" ====================================================================
+.
+By default
+.B \%grohtml
+generates links to all section headings and places these at the top of the
+HTML document.
+.
+(See
+.UR #LK
+LINKS
+.UE
+for details of how to switch this off or alter the position).
+.
+.
+.\" ====================================================================
+.SH LIMITATIONS OF GROHTML
+.\" ====================================================================
+.
+.LP
+.B tbl
+information is currently rendered as a PNG image.
+.
+.
+.\" ====================================================================
+.SH FILES
+.\" ====================================================================
+.
+.I @MACRODIR@/www.tmac
+.
+.
+.\" ====================================================================
+.SH AUTHORS
+.\" ====================================================================
+The
+.I www
+macro package
+was written by
+.MT gaius@\:glam.ac.uk
+Gaius Mulley
+.ME ,
+with additions by
+.MT wl@\:gnu.org
+Werner Lemberg
+.ME
+and
+.MT groff\-bernd.warken\-72@\:web.de
+Bernd Warken
+.ME .
+.
+.
+.\" ====================================================================
+.SH "SEE ALSO"
+.\" ====================================================================
+.BR groff (@MAN1EXT@),
+.BR @g@troff (@MAN1EXT@),
+.BR \%grohtml (@MAN1EXT@),
+.BR netpbm (1)
+.
+.
+.\" Restore compatibility mode (for, e.g., Solaris 10/11).
+.cp \n[groff_www_C]
+.
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: set filetype=groff:
diff --git a/tmac/groff_www.man b/tmac/groff_www.man
deleted file mode 100644 (file)
index c4d5761..0000000
+++ /dev/null
@@ -1,721 +0,0 @@
-.TH GROFF_WWW @MAN7EXT@ "@MDATE@" "Groff Version @VERSION@"
-.SH NAME
-groff_www \- groff macros for authoring web pages
-.
-.\" User level guide to using the -mwww macroset
-.
-.do nr groff_www_C \n[.C]
-.cp 0
-.do mso www.tmac
-.
-.
-.\" --------------------------------------------------------------------
-.\" Legal Terms
-.\" --------------------------------------------------------------------
-.
-.de co
-Copyright \[co] 2000-2014 Free Software Foundation, Inc.
-
-This file is part of groff.
-
-groff 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 3 of the License, or
-(at your option) any later version.
-
-groff 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, see
-.UR http://www.gnu.org/licenses/
-GPLs
-.UE .
-..
-.
-.de au
-.B \%grohtml
-was written by
-.MTO gaius@glam.ac.uk "Gaius Mulley"
-..
-.
-.\" we need the .LK here as we use it in the middle as an example --
-.\" once the user requests .LK then the automatic generation of links
-.\" at the top of the document is suppressed.
-.LK
-.
-.HR
-.
-.
-.\" --------------------------------------------------------------------
-.SH SYNOPSIS
-.\" --------------------------------------------------------------------
-.
-.B "groff \-mwww"
-[ options ]
-file ...
-.
-.
-.\" --------------------------------------------------------------------
-.SH DESCRIPTION
-.\" --------------------------------------------------------------------
-.
-This manual page describes the GNU \-mwww macro package, which is part of
-the groff document formatting system.
-.
-The manual page is very a basic guide, and the html device driver
-.RB ( \%grohtml )
-has been completely rewritten but still remains as in an alpha state.
-.
-It has been included into the distribution so that a lot of people have a
-chance to test it.
-.
-Note that this macro file is automatically called (via the
-.B troffrc
-file) if you use
-.B \-Thtml
-or
-.BR \-Txhtml .
-.
-.
-.PP
-To see the hyperlinks in action, please format this man page with the
-.B \%grohtml
-device.
-.
-.
-.PP
-Here is a summary of the functions found in this macro set.
-.TS
-tab(@);
-l l.
-\&.JOBNAME@split output into multiple files
-\&.HX@automatic heading level cut off
-\&.BCL@specify colours on a web page
-\&.BGIMG@specify background image
-\&.URL@create a url using two parameters
-\&.FTP@create an ftp reference
-\&.MTO@create a html email address
-\&.FTP@create an ftp reference
-\&.TAG@generate an html name
-\&.IMG@include an image file
-\&.PIMG@include png image
-\&.MPIMG@place png on the margin and wrap text around it
-\&.HnS@begin heading
-\&.HnE@end heading
-\&.LK@emit automatically collected links.
-\&.HR@produce a horizontal rule
-\&.NHR@suppress automatic generation of rules.
-\&.HTL@only generate HTML title
-\&.HEAD@add data to <head> block
-\&.ULS@unorder list begin
-\&.ULE@unorder list end
-\&.OLS@ordered list begin
-\&.OLE@ordered list end
-\&.DLS@definition list begin
-\&.DLE@definition list end
-\&.LI@insert a list item
-\&.DC@generate a drop capital
-\&.HTML@pass an html raw request to the device driver
-\&.CDS@code example begin
-\&.CDE@code example end
-\&.ALN@place links on left of main text.
-\&.LNS@start a new two-column table with links in the left.
-\&.LNE@end the two-column table.
-\&.LINKSTYLE@initialize default url attributes.
-.TE
-.
-.
-.PP
-Output of the
-.BR pic ,
-.BR eqn ,
-.BR refer ,
-and
-.B tbl
-preprocessors is acceptable as input.
-.
-.
-.\" --------------------------------------------------------------------
-.SH REQUESTS
-.\" --------------------------------------------------------------------
-.
-.TP
-.B .JOBNAME filename
-Split output into multiple HTML files.
-.
-A file is split whenever a \&.SH or \&.NH\ 1 is encountered.
-.
-Its argument is the file stem name for future output files.
-.
-This option is equivalent to
-.BR \%grohtml \[aq]s
-.B \-j
-option.
-.
-.TP
-.B .HX n
-Specify the cut off depth when generating links from section headings.
-.
-For example, a parameter of\~2 would cause
-.B \%grohtml
-to generate a list of links for
-.B .NH\ 1
-and
-.B .NH\ 2
-but not for
-.BR .NH\ 3 .
-.
-Whereas
-.RS
-.IP
-.nf
-.B .HX 0
-.fi
-.RE
-.IP
-tells
-.B \%grohtml
-that no heading links should be created at all.
-.
-Another method for turning automatic headings off is by issuing the
-the command line switch
-.B \-P\-l
-to
-.BR groff .
-.
-.TP
-.B .BCL foreground background active not-visited visited
-This macro takes five parameters: foreground, background, active hypertext
-link, hypertext link not yet visited, and visited hypertext link colour.
-.
-.TP
-.B .BGIMG imagefile
-the only parameter to this macro is the background image file.
-.
-.TP
-.B .URL url [description] [after]
-generates
-.TAG URL
-a URL using either one, two or three arguments.
-.
-The first parameter is the actual URL, the second is the name of the
-link, and the third is optional stuff to be printed immediately
-afterwards.
-.
-If
-.B description
-and
-.B after
-are absent then the
-.B url
-becomes the anchor text.
-.
-Hyphenation is disabled while printing the actual URL;
-explicit breakpoints should be inserted with the
-.B \[rs]:
-escape.
-.
-Here is how to encode
-.URL http://\:foo.\:org/ "foo" :
-.RS
-.IP
-.B .URL http://\[rs]:foo.\[rs]:org/ "foo" :
-.RE
-.
-.IP
-If this is processed by a device other than
-.B \-Thtml
-or
-.B \-Txhtml
-it appears as:
-.RS
-.IP
-foo \[la]\f[C]http://foo.org\f[]\[ra]:
-.RE
-.
-.IP
-The URL macro can be of any type; for example we can reference
-.URL pic.html "Eric Raymond\[aq]s pic guide"
-by:
-.RS
-.IP
-.B .URL pic.html \[dq]Eric Raymond\[aq]s pic guide\[dq]
-.RE
-.
-.TP
-.B .MTO address [description] [after]
-Generate an email html reference.
-.
-The first argument is mandatory as the email address.
-.
-The optional second argument is the text you see in your browser.
-.
-If an empty argument is given,
-.B address
-is used instead.
-.
-An optional third argument is stuff printed immediately afterwards.
-.
-Hyphenation is disabled while printing the actual email address.
-.
-For example,
-.MTO joe@user.org "Joe User"
-was achieved by the following macro:
-.RS
-.IP
-.B .MTO joe@user.org \[dq]Joe User\[dq]
-.RE
-.
-.IP
-Note that all the URLs actually are treated as consuming no textual
-space in groff.
-.
-This could be considered as a bug since it causes some problems.
-.
-To circumvent this,
-.B www.tmac
-inserts a zero-width character which expands to a harmless space (only
-if run with
-.B \-Thtml
-or
-.BR \-Txhtml ).
-.
-.TP
-.B .FTP url [description] [after]
-indicates that data can be obtained via ftp.
-.
-The first argument is the url and the second is the browser text.
-.
-A third argument, similar to the macros above, is intended for stuff
-printed immediately afterwards.
-.
-The second and the third parameter are optional.
-.
-Hyphenation is disabled while printing the actual URL.
-.
-As an example, here the location of the
-.FTP ftp://\:ftp.gnu.org/ "GNU ftp server" .
-.
-The macro example above was specified by:
-.RS
-.IP
-.B .FTP ftp://\[rs]:ftp.gnu.org/ \[dq]GNU ftp server\[dq] .
-.RE
-.
-.TP
-.B .TAG name
-Generates an html name tag from its argument.
-.
-This can then be referenced using the
-.URL #URL URL
-macro.
-.
-As you can see, you must precede the tag name with
-.B #
-since it is a local reference.
-.
-This link was achieved via placing a TAG in the URL description above;
-the source looks like this:
-.RS
-.IP
-.nf
-.ft B
-\&.TP
-\&.B URL
-generates
-\&.TAG URL
-a URL using either two or three arguments.
-\&.\|.\|.
-.fi
-.ft P
-.RE
-.
-.TP
-.B .IMG [\-R|\-L|\-C] filename [width] [height]
-Include a picture into the document.
-.
-The first argument is the horizontal location: right, left, or center
-.RB ( \-R ,
-.BR \-L ,
-or
-.BR \-C ).
-.
-Alignment is centered by default (\-C).
-.
-The second argument is the filename.
-.
-The optional third and fourth arguments are the width and height.
-.
-If the width is absent it defaults to 1\~inch.
-.
-If the height is absent it defaults to the width.
-.
-This maps onto an html img tag.
-.
-If you are including a png image then it is advisable to use the
-.B PIMG
-macro.
-.
-.TP
-.B .PIMG [\-R|\-L|\-C] filename [width [height]]
-Include an image in PNG format.
-.
-This macro takes exactly the same parameters as the
-.B IMG
-macro; it has the advantage of working with postscript and html devices
-also since it can automatically convert the image into the EPS format,
-using the following programs of the
-.B netpbm
-package:
-.BR pngtopnm ,
-.BR pnmcrop ,
-and
-.BR pnmtops .
-.
-If the document isn\[aq]t processed with
-.B \-Thtml
-or
-.B \-Txhtml
-it is necessary to use the
-.B \-U
-option of groff.
-.
-.TP
-.B .MPIMG [\-R|\-L] [\-G gap] filename [width [height]]
-Place a PNG image on the margin and wrap text around it.
-.
-The first parameters are optional.
-.
-The alignment: left or right
-.RB ( \-L
-or
-.BR \-R )
-specifies the margin where the picture is placed at.
-.
-The default alignment is left
-.RB ( \-L ).
-.
-Optionally,
-.BI \-G \~gap
-can be used to arrange a gap between the picture and the text that
-wraps around it.
-.
-The default gap width is zero.
-.
-.br
-The first non-optional argument is the filename.
-.
-The optional following arguments are the width and height.
-.
-If the width is absent it defaults to 1\~inch.
-.
-If the height is absent it defaults to the width.
-.
-Example:
-.RS
-.IP
-.nf
-.ft B
-\&.MPIMG \-L \-G 2c foo.png 3c 1.5c
-.ft P
-.fi
-.RE
-.
-.IP
-The height and width may also be given as percentages.
-.
-The PostScript device calculates the width from the
-.B .l
-register and the height from the
-.B .p
-register.
-.
-For example:
-.RS
-.IP
-.nf
-.ft B
-\&.MPIMG \-L \-G 2c foo.png 15%
-.ft P
-.fi
-.RE
-.
-.TP
-.B .HnS n
-Begin heading.
-.
-The numeric heading level
-.I n
-is specified by the first parameter.
-.
-Use this macro if your headings contain URL, FTP or MTO macros.
-.
-Example:
-.RS
-.IP
-.nf
-.ft B
-\&.HnS 1
-\&.HR
-GNU Troff
-\&.URL http://groff.ffii.org (Groff)
-\&\(em a
-\&.URL http://www.gnu.org/ GNU
-\&project.
-\&Hosted by
-\&.URL http://ffii.org/ FFII .
-\&.HR
-\&.HnE
-.ft P
-.fi
-.RE
-.
-.IP
-In this case you might wish to disable automatic links to headings.
-.
-This can be done via
-.B \-P\-l
-from the command line.
-.\" or by using a call to `.HX 0'.
-.
-.
-.TP
-.B .HnE
-End heading.
-.
-.
-.TP
-.B .LK
-.TAG LK
-Force \%grohtml to place the automatically generated links at this
-position.
-.
-If this manual page has been processed with
-.B \-Thtml
-or
-.B \-Txhtml
-those links can be seen right here.
-.
-.LK
-.
-.TP
-.B .HR
-Generate a full-width horizontal rule for
-.B \-Thtml
-and
-.BR \-Txhtml .
-.
-No effect for all other devices.
-.
-.TP
-.B .NHR
-Suppress generation of the top and bottom rules which \%grohtml emits
-by default.
-.
-.TP
-.B .HTL
-Generate an HTML title only.
-.
-This differs from the
-.B TL
-macro of the
-.B ms
-macro package which generates both an HTML title and an <H1> heading.
-.
-Use it to provide an HTML title as search engine fodder but a graphic
-title in the document.
-.
-The macro terminates when a space or break is seen (.sp, \&.br).
-.
-.TP
-.B .HEAD
-Add arbitrary HTML data to the <head> block.
-.
-Ignored if not processed with
-.B \-Thtml
-or
-.BR \-Txhtml .
-.
-Example:
-.RS
-.IP
-.nf
-.B ".HEAD" "\[dq]<link \[rs]"
-.B "  rel=\[dq]\[dq]icon\[dq]\[dq] \[rs]"
-.B "  type=\[dq]\[dq]image/png\[dq]\[dq] \[rs]"
-.B "  href=\[dq]\[dq]http://foo.org//bar.png\[dq]\[dq]/>\[dq]"
-.fi
-.ft P
-.RE
-.
-.TP
-.B .HTML
-All text after this macro is treated as raw html.
-.
-If the document is processed without
-.B \-Thtml
-or
-.B \-Txhtml
-then the macro is ignored.
-.
-Internally, this macro is used as a building block for other
-higher-level macros.
-.
-.IP
-For example, the
-.B BGIMG
-macro is defined as
-.RS
-.IP
-.nf
-.ft B
-\&.de BGIMG
-\&.   HTML <body background=\[rs]\[rs]$1>
-\&..
-.ft P
-.fi
-.RE
-.
-.
-.TP
-.B .DC l text [color]
-Produce a drop capital.
-.
-The first parameter is the letter to be dropped and enlarged, the second
-parameter
-.B text
-is the adjoining text whose height the first letter should not exceed.
-.
-The optional third parameter is the color of the dropped letter.
-.
-It defaults to black.
-.
-.TP
-.B ".CDS"
-Start displaying a code section in constant width font.
-.
-.TP
-.B ".CDE"
-End code display
-.
-.TP
-.B ".ALN [color] [percentage]"
-Place section heading links automatically to the left of the main text.
-.
-The color argument is optional and if present indicates which HTML
-background color is to be used under the links.
-.
-The optional percentage indicates the amount of width to devote to
-displaying the links.
-.
-The default values are #eeeeee and 30 for color and percentage width,
-respectively.
-.
-This macro should only be called once at the beginning of the document.
-.
-After calling this macro each section heading emits an HTML table
-consisting of the links in the left and the section text on the right.
-.
-.TP
-.B ".LNS"
-Start a new two-column table with links in the left column.
-.
-This can be called if the document has text before the first \&.SH and
-if \&.ALN is used.
-.
-Typically this is called just before the first paragraph and after the
-main title as it indicates that text after this point should be
-positioned to the right of the left-hand navigational links.
-.
-.TP
-.B ".LNE"
-End a two-column table.
-.
-This should be called at the end of the document if \&.ALN was used.
-.
-.TP
-.B ".LINKSTYLE color [ fontstyle [ openglyph closeglyph ] ]"
-Initialize default url attributes to be used if this macro set is not
-used with the HTML device.
-.
-The macro set initializes itself with the following call
-.RS
-.IP
-.nf
-.ft B
-\&.LINKSTYLE blue C \e[la] \e[ra]
-.ft P
-.fi
-.RE
-.
-.IP
-but these values will be superseded by a user call to LINKSTYLE.
-.
-.
-.\" --------------------------------------------------------------------
-.SH SECTION HEADING LINKS
-.\" --------------------------------------------------------------------
-.
-By default
-.B \%grohtml
-generates links to all section headings and places these at the top of the
-html document.
-.
-(See
-.URL #LK LINKS
-for details of how to switch this off or alter the position).
-.
-.
-.\" --------------------------------------------------------------------
-.SH LIMITATIONS OF GROHTML
-.\" --------------------------------------------------------------------
-.
-.LP
-.B tbl
-information is currently rendered as a PNG image.
-.
-.
-.\" --------------------------------------------------------------------
-.SH FILES
-.\" --------------------------------------------------------------------
-@MACRODIR@/www.tmac
-.
-.
-.\" --------------------------------------------------------------------
-.SH BUGS
-.\" --------------------------------------------------------------------
-.
-Report bugs to the
-.MTO bug-groff@\:gnu.org "Groff Bug Mailing List" .
-.
-Include a complete, self-contained example that will allow the bug to
-be reproduced, and say which version of groff you are using.
-.
-.
-.\" --------------------------------------------------------------------
-.SH "SEE ALSO"
-.\" --------------------------------------------------------------------
-.BR groff (@MAN1EXT@),
-.BR @g@troff (@MAN1EXT@)
-.BR \%grohtml (@MAN1EXT@),
-.BR netpbm (1)
-.
-.
-.\" --------------------------------------------------------------------
-.SH COPYING
-.\" --------------------------------------------------------------------
-.co
-.\" --------------------------------------------------------------------
-.SH AUTHORS
-.\" --------------------------------------------------------------------
-.au
-.
-.
-.cp \n[groff_www_C]
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
index ef0f09f3d1e462c3b798a35e2180ae5f517f7ee4..93e80436cca6708abd4275ba624c19b2d5be91b7 100644 (file)
@@ -1,23 +1,24 @@
-% This is the groff hyphenation pattern file `hyphen.cs' for Czech.
+% This is the groff hyphenation pattern file 'hyphen.cs' for Czech.
 %
-% It is based on the TeX pattern file `czhyphen.tex', version 3 (1995),
+% It is based on the TeX pattern file 'czhyphen.tex', version 3 (1995),
 % prepared by Pavel ©eveèek <pavel@lingea.cz>.
 %
 % Here is the copyright message:
 %
-%   This is free software; you can redistribute it and/or modify
-%   it under the terms of the GNU General Public License as published by
+%   This 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 file 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.
+%   This file 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
+%   Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
+%   02110-1301 USA.
 %
 % Please check the original file for more details.
 %
@@ -3663,8 +3664,13 @@ z
 ¾¹4tì
 }
 
+% ======================================================================
+% Editor settings
+% ======================================================================
+%
 % Local Variables:
+% mode: tex
 % coding: latin-2
+% fill-column: 72
 % End:
-%
-% End of file `hyphen.cs'.
+% vim: set filetype=tex textwidth=72:
index 1fb55dc04f8ee2931ca9e05be19b03c32d24f9e5..0c63672bb7a2f6425bf11d3bfe7a32aa550e2cec 100644 (file)
-% This is the groff hyphenation pattern file `hyphen.den' for German with
-% hyphenation rules for the new orthography.
+% This is the groff hyphenation pattern file 'hyphen.den' for German
+% with hyphenation rules for the new orthography.
 %
-% It is based on the TeX pattern file `dehyphn.tex', revision level 31
-% (2001-05-07).
+% It is based on the file 'dehyphn-x-2017-03-31.pat' taken from the
+% 'dehyph-exptl-0.41' package, converted to latin-1 encoding.
 %
-% Here is the copyright message:
+% Below is the original copyright message.
 %
-%   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%   dehyphn   --  TeX-Trennmuster fuer die
-%                 neue deutsche Rechtschreibung
+% -------------------------------------------------------------------------
 %
-%                 TeX hyphenation patterns for the
-%                 new German orthography
-%   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% TeX-Trennmuster für die reformierte (2006) deutsche Rechtschreibung
 %
+% Copyright (c) 2013-2017
+% Stephan Hennig, Werner Lemberg, Guenter Milde, Sander van Geloven,
+% Georg Pfeiffer, Gisbert W. Selke, Tobias Wendorf
 %
-%   Copyright (C) 1988,1991 Rechenzentrum der Ruhr-Universitaet Bochum
-%                 [german hyphen patterns]
-%   Copyright (C) 1993,1994,1999 Bernd Raichle/DANTE e.V.
-%                 [macros, adaption for TeX 2]
-%   Copyright (C) 1998--2001 Walter Schmidt
-%                 [adaption to new German orthography]
+% Licensed under the MIT license. Full license text available from
 %
-%   -----------------------------------------------------------------
-%   IMPORTANT NOTICE:
+%   http://opensource.org/licenses/mit-license.php
 %
-%   This program can be redistributed and/or modified under the terms
-%   of the LaTeX Project Public License Distributed from CTAN
-%   archives in directory macros/latex/base/lppl.txt; either
-%   version 1 of the License, or any later version.
-%   -----------------------------------------------------------------
 %
-% Please check the original file for more details.
+% The word list is available from
 %
-% It has been made suitable for groff by expanding all macros to real
-% characters in latin-1 encoding.
+%   http://repo.or.cz/w/wortliste.git?a=commit;h=5fd786fcb1ed48448e058672f1f58d185653d8c6
 %
+% The used patgen parameters are
+%
+%   1 1 | 2 5 | 1 1 1
+%   2 2 | 2 5 | 1 2 1
+%   3 3 | 2 6 | 1 1 1
+%   4 4 | 2 6 | 1 4 1
+%   5 5 | 2 7 | 1 1 1
+%   6 6 | 2 7 | 1 6 1
+%   7 7 | 2 13 | 1 4 1
+%   8 8 | 2 13 | 1 8 1
+
 \patterns{%
-.aa6l .ab3a4s .ab3ei .abi2 .ab3it .ab1l .ab1r .ab3u .ad3o4r .alti6
-.ana3c .an5alg .an1e
-.ang8s2t1
-.an1s .ap1p .ar6sc .ar6ta .ar6tei .as2z
-.au2f1 .au2s3 .be5erb .be3na .ber6t5r .bie6r5 .bim6s5t .brot3 .bru6s
-.ch6 .che6f5 .da8c .da2r .dar5in .dar5u .den6ka .de5r6en .des6pe
-.de8spo .de3sz .dia3s4 .dien4 .dy2s1 .ehren5 .eine6 .ei6n5eh .ei8nen
-.ein5sa .en6der .en6d5r .en3k4 .en8ta8 .en8tei .en4t3r .epo1 .er6ban
-.er6b5ei .er6bla .er6d5um .er3ei .er5er .er3in .er3o4b .erwi5s .es1p
-.es8t1l .es8t1n
-.ex1a2 .ex3em .fal6sc .fe6st5a .flu4g3 .furch8 .ga6ner .ge3n4a
-.ge5rö
-.ges6
-.halb5 .halbe6 .hal6br .haup4 .hau4t .heima6 .he4r3e
-.her6za .he5x .hin3 .hir8sc .ho4c .hu3sa .hy5o .ibe5 .ima6ge .in1
-.ini6 .is5chi .jagd5 .kal6k5o .ka6ph .ki4e .kop6f3 .kraf6 .kü5ra
-.lab6br .liie6 .lo6s5k .lö4s3t .ma5d .mi2t1 .no6th .no6top
-.obe8ri .ob1l .obs2 .ob6st5e .or3c .ort6s5e .ost3a .oste8r .pe4re
-.pe3ts .ph6 .po8str .rau4m3 .re5an .ro8q .ru5the .rü5be
-.sch8 .se6e .se5n6h .se5ra .si2e .spi6ke .st4 .sy2n
-.tages5 .tan6kl .ta8th .te6e .te8str .to6der .to8nin .to6we .um1
-.umpf4 .un1 .une6 .unge5n .ur1c .ur5en .ve6rin .vora8 .wah6l5 .we8ges
-.we8s2t .wes3te
-.wo6r .wor3a .wun4s .zi4e .zuch8 .ände8re .öch8 aa1c aa2gr
-aal5e aa6r5a a5arti aa2s1t aat2s 6aba ab3art 1abdr 6abel aben6dr
-ab5erk ab5err ab5esse 1abf 1abg 1abhä ab1ir 1abko a1bl ab1la
-5ablag a6blaß ab4ler ab1lu a8blä 5a6blö abma5c
-1abn ab1ra ab1re 5a6brec ab1ro
-ab1s
-ab8sk abs2z 3abtei ab1ur 1abw
-5abze 5abzu ab1än abäu8 a4ce. a5chal ach5art ach5au a1che
-a8chent ach6er. a6ch5erf a1chi ach1l ach3m ach5n a1cho ach3re a1chu
-ach1w a1chy ach5äf ack1o acks6t ack5sta a1d 8ad. a6d5ac ad3ant
-ad8ar 5addi a8dein ade5o8 adi5en 1adj 1adle ad1op a2dre 3adres adt1
-1adv a6dä a1e2d ae1r a1er. 1aero 8afa a3fal af1an a5far a5fat
-af1au a6fentl a2f1ex af1fr af5rau af1re 1afri af6tent af6tra aft5re
-a6f5um 8afä ag5abe 5a4gent ag8er ages5e 1aggr ag5las ag1lo a1gn
-ag2ne 1agog a6g5und a1ha a1he ah5ein a4h3erh a1hi ahl1a ah1le ah4m3ar
-ahn1a a5ho ahra6 ahr5ab ah1re ah8rei ahren8s ahre4s3 ahr8ti ah1ru a1hu
-ah8ö ai3d2s ai1e aif6 a3inse ai4re. a5isch. ais8e a3ismu ais6n
-aiso6 a1j 1akad a4kade a1ke a1ki 1akko 5akro1 a5lal al5ans 3al8arm
-al8beb al8berw alb5la 3album al1c a1le a6l5e6be a4l3ein a8lel a8lerb
-a8lerh a6lert 5a6l5eth 1algi al4gli al3int al4lab al8lan al4l3ar
-alle3g a1lo a4l5ob al6schm al4the
-al4t3re 8a1lu alu5i a6lur
-alu3ta a1lä a6mate 8ame. 5a6meise am6m5ei am6mum am2n ampf3a
-am6schw am2ta a1mu a1mä a3nac a1nad anadi5e an3ako an3alp 3analy
-an3ame an3ara a1nas an5asti a1nat anat5s an8dent ande4s3 an1ec an5eis
-an1e2k 4aner. a6n5erd a8nerf a6n5erke 1anfa 5anfert 1anfä 3angab
-5angebo an3gli ang6lis an2gn 3angri ang5t6 5anhä ani5g ani4ka
-an5i8on an1kl an6kno an4kro 1anl anma5c anmar4 3annah anne4s3 a1no
-5a6n1o2d 5a6n3oma 5a6nord 1anr an1sa 5anschl an4soz an1st 5anstal
-an1s2z 5antenn an1th 5anwä a5ny an4z3ed 5anzeig 5anzieh 3anzug
-an1ä 5anäs a1nö anö8d a1os a1pa 3apfel a2ph1t
-aph5ä6 a1pi 8apl apo1c apo1s
-a6pos2t
-a6poth 1appa ap1pr a1pr
-a5pä a3pü a1ra a4r3af ar3all 3arbei 2arbt ar1c 2a1re ar3ein
-ar2gl 2a1ri ari5es ar8kers ar6les ar4nan ar5o6ch ar1o2d a1rol ar3ony
-a8ror a3ros ar5ox ar6schl 8artei ar6t5ri a1ru a1ry 1arzt arz1w
-ar8zä arä8m arö6 ar5öm ar1ü2 a1sa a6schec
-asch5l asch3m a6schn a3s4hi as1pa asp5l
-as5tev 1asth
-a1str ast3re 8a1ta ata5c ata3la a6tapf ata5pl a1te a6teli aten5a
-ate5ran 6atf 6atg a1th at3hal 1athl 2a1ti 5atlant 3atlas 8atmus 6atn
-a1to a6t5ops ato6ra a6t5ort. 4a1tr a6t5ru at2t1h at5t6hä 6a1tu
-atz1w a1tä a1tü au1a au6bre auch3a au1e aue4l 5aufent
-3auffü 3aufga 1aufn auf1t 3auftr 1aufw 3auge. au4kle aule8s 6aum
-au8mar aum5p 1ausb 3ausd 1ausf 1ausg au8sin
-au4sta 1ausw 1ausz
-aut5eng au1th 1auto auße8 a1v ave5r6a aver6i a1w a6wes a1x
-a2xia a6xio a1ya a1z azi5er. 8aß 1ba 8ba8del ba1la ba1na
-ban6k5r ba5ot bardi6n ba1ro basten6 bau3sp 2b1b bb6le b2bli 2b1c 2b1d
-1be be1a be8at. be1ch 8becht 8becke. be5el be1en bee8rei be5eta bef2
-8beff be1g2 behö8 bei1s 6b5eisen bei3tr b8el bel8o belu3t be3nac
-bend6o be6ners be6nerw be4nor ben4se6 bens5el be1nä be1nü
-be1o2 b8er. be1ra be8rac ber8gab. ber1r be1rü bes8c bes5erh
-bes2p be5tha bet5sc be1un be1ur 8bex be6zwec 2b1f8
-2b1g2
-bga2s5 bge1 2b1h bhole6 1bi bi1bl b6ie bi1el bi1la bilä5 bi1na
-bi4nok
-bi6stu bi5tr bit4t5r b1j 2b1k2 bkü6 bl8 b6la.
-6b1lad 6blag 8blam 1blat b8latt 3blau. b6lav 3ble. b1leb b1led
-8b1leg 8b1leh 8bleid 8bleih 6b3lein
-ble4m3o 4blich b4lind
-8bling b2lio 5blit b4litz b1loh 8b1los 1blu 5blum 2blun blut3a blut5sc
-3blä bläs5c 5blö 3blü blü8sc 2b1m 2b1n 1bo
-bo1ch bo5d6s boe5 8boff 8bonk bo1ra b1ort 2b1p2 b1q 1br brail6 brast8
-bre4a b5red 8bref 8b5riem b6riga bro1s b1rup b2ruz 8bröh
-brös5c 8bs b1sa b8sang b2s1ar b1sc bs3erl bs3erz b8sof b1s2p
-bst1h b3stru b5stä b6sun 2b1t b2t1h 1bu bu1ie bul6k b8ure bu6sin
-6b1v 2b1w 1by1 by6te. 8b1z
-1bä b5ä6s5 1bü
-b6ü5bere büge6 bügel5e bür6sc 1ca cag6 ca5la ca6re
-ca5y c1c 1ce celi4c celich5 ce1ro c8h 2ch. 1chae ch1ah ch3akt cha6mer
-8chanz 5chara 3chari 5chato 6chb 1chef 6chei ch3eil ch3eis 6cherkl
-6chf 4chh 5chiad 5chias 6chins 8chj chl6 5chlor 6ch2m 2chn6 ch8nie
-5cho. 8chob choi8d 6chp ch3ren ch6res ch3rü 2chs 2cht cht5ha
-cht3hi 5chthon ch6tin 6chuh chu4la 6ch3unt chut6t 8chw 1ci ci5tr c2k
-2ck. ck1ei 4ckh ck3l ck3n ck5o8f ck1r 2cks ck5stra ck6s5u c2l 1c8o
-con6ne 8corb cos6t c3q 1c6r 8c1t 1cu 1cy 5cä1 cö5 1da.
-8daas 2dabg 8dabr 6dabt 6dabw 1dac da2gr 6d5alk 8d5amt dan6ce.
-dani5er dan8ker 2danl danla6 6dans 8danzi 6danzu d1ap da2r1a8 2d1arb
-d3arc dar6men 4d3art 8darz 1dat 8datm 2d1auf 2d1aus 2d1b 2d1c 2d1d
-d5de d3d2h ddämme8 1de 2deal de5an de3cha de1e defe6 6deff 2d1ehr
-5d4eic de5isc de8lar del6s5e del6spr de4mag de8mun de8nep dene6r
-8denge. 8dengen de5o6d 2deol de5ram 8derdb der5ein de1ro der1r d8ers
-der5um de4s3am de4s3an de4sau de6sil de4sin de8sor de4spr de2su 8deul
-de5us. 2d1f df2l 2d1g 2d1h 1di dia5c di5ara dice5 di3chr di5ena di1gn
-di1la dil8s di1na 8dind 6dinf 4d3inh 2d1ins di5o6d di3p4t di8sen dis1p
-di5s8per di6s5to
-dis3tr
-di8tan di8tin d1j 6dje 2dju 2d1k 2d1l 2d1m
-2d1n6 dni6 dnje6 1do 6d5obe do6berf 6d5ony do3ran 6dord 2d1org dor4t3h
-6doth dott8e 2d1p d5q dr4 1drah 8drak d5rand 6dre. 4drech
-d6reck 4d3reg 8d3reic d5reife 8drem 8d1ren 2drer 8dres. 6d5rh 1dria
-d1ric 8drind droi6 dro5x 1dru 8drut drös5c 1drü drü5b
-drü8sc 2ds d1sa d6san dsat6 d1sc 5d6scha. 5dschik dse8e d8serg
-8dsl d1sp d4spak ds2po d8spä d1st d1sü 2dt d1ta d1te d1ti
-d1to dt1s6 d1tu d5tä 1du du5als du1b6 du1e duf4t3r 4d3uh du5ie
-8duml 8dumw 2d1und du8ni 6d5unt dur2c durch3 6durl 6dursa 8durt
-dus1t
-du8schr 2d1v 2d1w dwa8l 2d1z 1dä 6däh 8dänd dä6r
-dö8bl d5öl dör6fl dö8sc d5ö4st
-1dü ea4ben e1ac e1ah e1akt e1al. e5alf e1alg e5a8lin e1alk e1all
-e5alp e1alt e5alw e1am e1and ea6nim e1ar. e5arf e1ark e5arm e3art
-e5at. e6ate e6a5t6l e8ats e5att e6au. e1aus e1b e6b5am ebens5e
-eb4lie eb4ser eb4s3in e1che e8cherz e1chi ech3m 8ech3n ech1r ech8send
-ech4su e1chu eck5an e5cl e1d ee5a ee3e ee5g e1ei ee5isc eei4s3t
-ee6lend e1ell ee5lö e1erd ee3r4e ee8reng eere6s5 ee5rä
-ee6tat e1ex e1f e6fau e8fe8b 3effek ef3rom ege6ra eglo6si 1egy e1ha
-e6h5ach eh5ans e6hap eh5auf e1he e1hi ehl3a eh1le ehl5ein eh1mu ehn5ec
-e1ho ehr1a eh1re ehre6n eh1ri eh1ru ehr5um e1hu eh1w e1hy e1hä
-e1hö e3hüt ei1a eia6s ei6bar eich3a eich5r ei4dar ei6d5ei
-ei8derf ei3d4sc ei1e 8eifen 3eifri 1eign eil1d ei6mab ei8mag ein1a4
-ei8nat ei8nerh ei8ness ei6nete ein1g e8ini ein1k ei6n5od ei8nok ei4nor
-e3insä ei1o e1irr ei5ru ei8sab ei5schn ei6s5ent ei8sol ei4t3al
-eit3ar eit1h ei6thi ei8tho eit8samt ei6t5um e1j 1ekd e1ke e1ki e1k2l
-e1kn ekni4 e1la e2l1al 6elan e6lanf e8lanl e6l5ans el3arb el3arm
-e6l3art 5e6lasti e6lauge elbst5a e1le 6elef ele6h e6l5ehe e8leif
-e6l5einh 1elek e8lel 3eleme e6lemen e6lente el5epi e4l3err e6l5ersc
-elf2l elg2 e6l5ins ell8er 4e1lo e4l3ofe el8soh el8tent 5eltern e1lu
-elut2 e1lä e1lü em8dei em8meis 4emo emo5s 1emp1f 1empt 1emto
-e1mu emurk4 emurks5 e1mä en5a6ben en5achs en5ack e1nad en5af
-en5all en3alt en1am en3an. en3ant en3anz en1a6p en1ar en1a6s 6e1nat
-en3auf en3aus en2ce enda6l end5erf end5erg en8dess 4ene. en5eck
-e8neff e6n5ehr e6n5eim en3eis 6enem. 6enen e4nent 4ener. e8nerd
-e6n3erf e4nerg 5energi e6n5erla en5ers e6nerst en5erw 6enes e6n5ess
-e2nex en3glo 2eni enni6s5 ennos4 enns8 e1no e6nober eno8f en5opf
-e4n3ord en8sers ens8kl en1sp ens6por en5t6ag enta5go en8terbu en6tid
-3entla ent5ric 5entwic 5entwu 1entz enu5i e3ny en8zan en1öf
-e1nös e1nüg eo1c e5o6fe e5okk e1on. e3onf e5onk e5onl e5onr
-e5opf e5ops e5or. e1ord e1org eo5r6h eo1t e1pa e8pee e6p5e6g ep5ent
-e1p2f e1pi 5epid e6pidem e1pl 5epos e6pos. ep4p3a e1pr e1pä e1q
-e1ra. er5aal 8eraba e5rabel er5a6ben e5rabi er3abs er3ach era5e
-era5k6l er3all er3amt e3rand e3rane er3ans e5ranz. e1rap er3arc
-e3rari er3a6si e1rat erat3s er3auf e3raum 3erbse er1c e1re 4e5re.
-er3eck er5egg er5e2h 2erei e3rei. e8reine er5einr 6eren. e4r3enm
-4erer. e6r5erm er5ero er5erst e4r3erz er3ess 5erfül er8gan.
-5ergebn er2g5h 5ergänz 5erhöhu 2e1ri eri5ak e6r5iat e4r3ind
-e6r5i6n5i6 er5ins e6r5int er5itio er1kl 3erklä 5erlös.
-ermen6s er6nab 3ernst 6e1ro. e1rod er1o2f e1rog 6e3roi ero8ide e3rol
-e1rom e1ron e3rop8 e2r1or e1ros e1rot er5ox ersch4 5erstat er6t5ein
-er2t1h er5t6her 2e1ru eruf4s3 e4r3uhr er3ums e5rus 5erwerb e1ry er5zwa
-er3zwu erä8m er5äs erö8 e3rös. e6r1ü2b e1sa
-esa8b e8sap e6s5a6v e1sc esch4l ese1a es5ebe eserve5 e8sh es5ill
-es3int es4kop e2sl eso8b e1sp espei6s5 es2po es2pu 5essenz e6stabs
-e6staf e6st5ak est3ar e8stob e1str est5res es3ur e2sz e1sü e1ta
-et8ag etari5e eta8ta e1te eten6te et5hal e5thel e1ti 1etn e1to e1tr
-et3rec e8tscha et8se et6tei et2th et2t1r e1tu etu1s et8zent et8zw
-e1tä e1tö e1tü eu1a2 eu1e eue8rei eu5fe euin5 euk2
-e1um. eu6nio e5unter eu1o6 eu5p 3europ eu1sp eu5str eu8zo e1v eval6s
-eve5r6en ever4i e1w e2wig ex1or 1exp 1extr ey3er. e1z e1ä2
-e5ö8 e1ü e8ßes fa6ch5i fade8 fa6del fa5el.
-fal6lo falt8e fa1na fan4gr 6fanl 6fap far6ba far4bl far6r5a 2f1art
-fa1sc fau8str fa3y 2f1b2 6f1c 2f1d 1fe 2f1eck fe6dr feh6lei f6eim
-8feins f5eis fel5en 8feltern 8femp fe5rant 4ferd. ferri8 fe8stof
-fe6str fe6stum fe8tag fet6ta fex1 2ff f1fa f6f5arm f5fe ffe5in ffe6la
-ffe8ler ff1f f1fla ff3lei ff4lie ff8sa ff6s5ta 2f1g2 fgewen6 4f1h 1fi
-fid4 fi3ds fieb4 fi1la fi8lei fil4m5a f8in. fi1na 8finf fi8scho fi6u
-6f1j 2f1k2 f8lanz fl8e 4f3lein 8flib 4fling f2lix 6f3lon 5flop 1flor
-5f8läc 3flöt 2f1m 2f1n 1fo foh1 f2on fo6na 2f1op fo5ra
-for8mei for8str for8th for6t5r fo5ru 6f5otte 2f1p8 f1q fr6 f5ram
-1f8ran f8raß f8re. frei1 5frei. f3reic f3rest f1rib
-8f1ric 6frig 1fris fro8na fräs5t 2fs f1sc f2s1er f5str
-fs3tät 2ft f1tak f1te ft5e6h ftere6 ft1h f1ti f5to f1tr ft5rad
-ft1sc ft2so f1tu ftwi3d4 ft1z 1fu 6f5ums 6funf fun4ka fu8ßend
-6f1v 2f1w 2f1z 1fä fä1c 8färm 6fäug
-fä8ß föde3 8föf 3för 1fü
-fün4f3u 1ga ga6bl 6gabw 8gabz g3a4der ga8ho ga5isc 4gak ga1la
-6g5amt ga1na gan5erb gan6g5a ga5nj 6ganl 8gansc 6garb 2g1arc 2g1arm
-ga5ro 6g3arti ga8sa ga8sc ga6stre 2g1atm 6g5auf gau5fr g5aus 2g1b g5c
-6gd g1da 1ge ge1a2 ge6an ge8at. ge1e2 ge6es gef2 8geff ge1g2l ge1im
-4g3eise geist5r gel8bra gelt8s ge5lö ge8nin gen3k 6g5entf
-ge3nä ge1or ge1ra ge6rab ger8au 8gerhö ger8ins ge1ro 6g5erz.
-ge1rä ge1rü ge1s ges2p
-ge2s7te. ge2s7ten ge2s7ter ge2s7tik
-ge5unt 4g3ex3 2g1f8 2g1g g1ha 6g1hei
-5ghel. g5henn 6g1hi g1ho 1ghr g1hö 1gi gi5la gi8me. gi1na
-4g3ins
-gis1tr
-g1j 2g1k 8gl. 1glad g5lag glan4z3 1glas 6glass 5glaub
-g3lauf 1gle. g5leb 3gleic g3lein 5gleis 1glem 2gler 8g3leu gli8a
-g2lie 3glied 1g2lik 1g2lim g6lio 1gloa 5glom 1glon 1glop g1los g4loss
-g5luf 1g2ly 1glü 2g1m gn8 6gn. 1gna 8gnach 2gnah g1nas g8neu
-g2nie g3nis 1gno 8gnot 1go goe1 8gof 2gog 5gogr 6g5oh goni5e 6gonist
-go1ra 8gord 2g1p2 g1q 1gr4 g5rahm gra8m gra4s3t 6g1rec gre6ge 4g3reic
-g5reit 8grenn gri4e g5riem 5grif 2grig g5ring 6groh 2grot gro6ß
-4grut 2gs gs1ab g5sah gs1ak gs1an gs8and gs1ar gs1au g1sc
-gs1ef g5seil gs5ein g2s1er gs1in g2s1o gso2r gs1pr g2s1u 2g1t g3te
-g2t1h 1gu gu5as gu2e 2gue. 6gued 4g3uh 8gums 6g5unt
-gut3h gu2tu
-4g1v 2g1w gy1n g1z 1gä 8gä8m 6gärm 1gö 1gü
-6güb 1haa hab8r ha8del hade4n 8hae ha5el. haf6tr 2hal. ha1la
-hal4b5a 6hale 8han. ha1na han6dr han6ge. 2hani h5anth 6hanz 6harb
-h3arbe h3arme ha5ro ha2t1h h1atm hau6san ha8ß h1b2 h1c h1d
-he2bl he3cho h3echt he5d6s 5heft h5e6he. hei8ds h1eif 2hein he3ism
-he5ist. heit8s3 hek6ta hel8lau 8helt he6mer 1hemm 6h1emp hen5end
-hen5klo hen6tri he2nu 8heo he8q her3ab he5rak her3an 4herap her3au
-h3erbi he1ro he8ro8b he4r3um her6z5er he4spe he1st heta6 het5am he5th
-heu3sc he1xa hey5e h1f2 h1g hgol8 h1h h1iat hie6r5i hi5kt hil1a2
-hil4fr hi5nak hin4ta hi2nu hi5ob hirn5e hir6ner hi1sp hi1th hi5tr
-5hitz h1j h6jo h1k2 hlabb4 hla4ga hla6gr h5lai hl8am h1las h1laß
-hl1c h1led h3lein h5ler. h2lif h2lim h8linf hl5int h2lip
-h2lit h4lor h3lose h1läs hme5e h2nee h2nei hn3eig h2nel hne8n
-hne4p3f hn8erz h6netz h2nip h2nit h1nol hn5sp h2nuc h2nud h2nul hoch1
-1hoh hoh8lei 2hoi ho4l3ar 1holz h2on ho1ra 6horg 5horn. ho3sl hos1p
-ho4spi h1p hpi6 h1q 6hr h1rai h8rank h5raum hr1c hrcre8 h1red h3reg
-h8rei. h4r3erb h8rert hrg2 h1ric hr5ins h2rom hr6t5erl hr2t1h hr6t5ra
-hr8tri h6rum hr1z hs3ach h6s5amt h1sc h6s5ec h6s5erl hs8erle h4sob
-h1sp h8spaß h8spel hs6po h4spun h1str h4s3tum hs3und
-h1sü h5ta. h5tab ht3ac ht1ak ht3ang h5tanz ht1ar ht1at h5taub
-h1te h2t1ec ht3eff ht3ehe h4t3eif h8teim h4t3ein ht3eis h6temp h8tentf
-hte8ren h6terfü h8tergr h4t3erh h6t5ersc h8terst h8tese h8tess
-h2t1eu h4t3ex ht1he ht5hu h1ti ht5rak hts3ah ht1sc ht6sex ht8sk ht8so
-h1tu htz8 h5tüm hub5l hu6b5r huh1l h5uhr. huld5a6 hu8lent
-hu8lä h5up. h1v h5weib h3weis h1z hä8kl häl8s
-häma8tu8 hä8sche. hät1s häu4s3c 2hö.
-2höe 8höi hö6s hös5c hühne6 hül4s3t
-hütte8re i5adn i1af i5ak. i1al. i1al1a i1alb i1ald i5alei i1alf
-i1alg i3alh i1alk i1all i1alp i1alr i1als i1alt i1alv i5alw i3alz
-i1an. ia5na i3and ian8e ia8ne8b i1ang i3ank i5ann i1ant i1anz i6apo
-i1ar. ia6rab i5arr i1as. i1asm i1ass i5ast. i1at. i5ats i1au i5azz
-i6b5eig i6b5eis ib2le i4blis i6brig i6b5unt i6büb i1che ich5ei
-i6cherb i1chi ich5ins ich1l ich3m ich1n i1cho icht5an icht3r i1chu
-ich1w ick6s5te ic5l i1d id3arm 3ideal ide8na 3ideol ide5rö i6diot
-id5rec id1t ie1a ie6b5ar iebe4s3 ie2bl ieb1r ie8bra ie4bre ie8bä
-ie2dr ie1e8 ie6f5ad ief5f ie2f1l ie4fro ief1t i1ei ie4l3ec ie8lei
-ie4lek i3ell i1en. i1end ien6e i3enf i5enn ien6ne. i1enp i1enr
-i5ensa ien8stal i5env i1enz ie5o ier3a4b ie4rap i2ere ie4rec ie6r5ein
-ie6r5eis ier8er i3ern. ie8rum ie8rund ie6s5che ie6tau ie8tert ie5the
-ie6t5ri i1ett ie5un iex5 2if i1fa if5ang i6fau if1fr if5lac i5f6lie
-i1fre ift5a if6t5r ig3art 2ige i8gess ig5he i5gla ig2ni i5go ig3rot
-ig3s2p i1ha i8ham i8hans i1he i1hi ih1n ih1r i1hu i8hum ih1w 8i1i ii2s
-ii2t i1j i1k i6kak i8kerz i6kes ik4ler i6k5unt 2il i5lac i1lag il3ans
-i5las i1lau il6auf i1le ile8h i8lel il2fl il3ipp il6l5enn i1lo ilt8e
-i1lu i1lä i8mart imb2 i8mele i8mid imme6l5a i1mu i1mä
-i5mö ina5he i1nat in1au inau8s 8ind. in4d3an 5index ind2r 3indus
-i5nec i2n1ei i8nerw 3infek 1info 5ingeni ing5s6o 5inhab ini5er. 5inj
-in8kät in8nan i1no inoi8d in3o4ku in5sau in1sp 5inspe 5instit
-5instru ins4ze 5intere 5interv in3the in5t2r i5ny inä2 i1när
-in1äs inö8 in5öd i1nös 2io io1a8 io1c iode4 io2di
-ioi8 i1ol. i1om. i1on. i5onb ion2s1 i1ont i5ops i5o8pt i1or.
-i3oral io3rat i5orc i1os. i1ot. i1o8x 2ip i1pa i1pi i1p2l i1pr i1q
-i1ra ir6bl i1re i1ri ir8me8d ir2m1o2 ir8nak i1ro ir5rho ir6schl
-ir6sch5r i5rus i5ry i5rä i1sa i8samt i6sar i2s1au i8scheh i8schei
-isch5m isch3r ischä8 is8ele ise3ra i4s3erh is3err isi6de i8sind
-is4kop ison5e is6por i8s5tum i5sty i5sö i1ta it5ab. i2t1a2m
-i8tax i1te i8tersc i1thi i1tho i5thr it8hä i1ti i8ti8d iti6kl
-itmen4 i1to i8tof it3ran it3rau i1tri itri5o it1sc it2se it5spa it8tru
-i1tu it6z5erg it6z1w i1tä itä6r5e ität2 itäts5
-i1tü i1u iu6r 2i1v i6vad iva8tin i8vei i6v5ene i8verh i2vob i8vur
-i1w iwi2 i5xa i1xe i1z ize8n i8zir i6z5w iä8m i1ä6r
-i5ät. i5äv i1ö8 iü8 i6ß5ers ja5la
-je2t3r 6jm 5jo jo5as jo1ra jou6l ju5cha jugen4 jugend5 jung5s6
-3jä 1ka 8kachs 8kakz ka1la kal5d kam5t ka1na 2kanl 8kapf ka6pl
-ka5r6a 6k3arbe ka1ro kar6p5f 4k3arti 8karz ka1rä kasi5e ka6teb
-kat8ta kauf6s kau3t2 2k1b 2k1c 4k1d kehr6s kehrs5a 8keic 2k1eig 6k5ein
-6k5eis ke6lar ke8leis ke8lo 8kemp k5ente. k3entf 8k5ents 6kentz ke1ra
-k5erlau 2k1f8 2k1g 2k1h ki5fl 8kik king6s5 6kinh ki5os ki5sp ki5th
-8ki8ö 2k1k2 kl8 1kla 8klac k5lager kle4br k3leib 3kleid kle5isc
-4k3leit k3lek 6k5ler. 5klet 2klic 8klig k2lim k2lin 5klip 5klop k3lor
-1klä 2k1m kmani5e kn8 6kner k2ni knä8 1k2o ko1a2 ko6de.
-ko1i koi8t ko6min ko1op ko1or ko6pht ko3ra kor6d5er ko5ru ko5t6sc k3ou
-3kow 6k5ox 2k1p2 k1q 1kr8 4k3rad 2k1rec 4k3reic kre5ie 2krib 6krig
-2krip 6kroba 2ks k1sa k6sab ksal8s k8samt k6san k1sc k2s1ex k5spat
-k5spe k8spil ks6por k1spr kst8 k2s1uf 2k1t kta8l kt5a6re k8tein kte8re
-k2t1h k8tinf kt3rec kt1s 1ku ku1ch kuck8 k3uhr ku5ie kum2s1 kunfts5
-kun2s kunst3 ku8rau ku4ro kurz1
-4kusti ku1ta ku8ß
-6k1v 2k1w ky5n 2k1z 1kä kä4m 4k3ämi käse5 1kö
-kö1c kö1s 1kü kü1c kür6sc
-1la.
-8labf 8labh lab2r 2l1abs lach3r la8dr 5ladu 8ladv 6laff laf5t la2gn
-5laken 8lamb la6mer 5lampe. 2l1amt la1na 1land lan4d3a lan4d3r lan4gr
-8lanme 6lann 8lanw 6lanä 8lappa lap8pl lap6pr l8ar. la5ra lar4af
-la8rag la8ran la6r5a6s l3arbe la8rei 6larm. la8sa la1sc la8sta lat8i
-6l5atm 4lauss 4lauto 1law 2lb l8bab l8bauf l8bede l4b3ins l5blo
-lbst5an lbst3e 8lc l1che l8chert l1chi lch3m l5cho lch5w 6ld l4d3ei
-ld1re l6düb le2bl le8bre lecht6s5 led2r 6leff le4gas 1lehr lei6br
-le8inf 8leinn 5leistu 4lektr le6l5ers lemo2 8lemp l8en. 8lends
-6lendun le8nend len8erw 6l5ents 4l3entw 4lentz 8lenzy 8leoz 6lepi
-le6pip 8lepo 1ler l6er. 8lerbs 6l5erde le8reis le8rend le4r3er 4l3erg
-l8ergr 6lerkl 6l5erzie 8lerö 8lesel lesi5e le3sko le3tha let1s
-5leuc 4leuro leu4s3t le5xe 6lexp l1f 2l1g lgend8 l8gh lglie3 lglied6
-6l1h 1li li1ar li1as 2lick li8dr li1en lien6n li8ers li8ert 2ließ
-3lig li8ga8b li1g6n li1l8a 8limb li1na 4l3indu lings5
-4l3inh 6linj link4s3 4linkt 2lint 8linv
-4lipp 5lipt 4lisam
-livi5e 6l1j 6l1k l8keim l8kj lk2l lko8f lkor8 lk2sa lk2se 6ll l1la
-ll3a4be l8labt ll8anl ll1b ll1c ll1d6 l1le l4l3eim l6l5eise ller3a
-l4leti l5lip l1lo ll3ort ll5ov ll6spr llte8 l1lu ll3urg l1lä
-l5lü l6lüb 2l1m l6m5o6d 6ln l1na l1no 8lobl lo6br 3loch.
-l5o4fen 5loge. 5lohn 4l3ohr 1lok l2on 4l3o4per lo1ra 2l1ord 6lorg
-4lort lo1ru 1los. lo8sei 3losig lo6ve lowi5 6l1p lp2f l8pho l8pn
-lp4s3te l2pt l1q 8l1r 2ls l1sa l6sarm l1sc l8sec l6s5erg l4s3ers l8sh
-l5s6la l1sp ls4por ls2pu l1str l8suni l1sü 2l1t lt5amp l4t3ein
-l5ten l6t5eng l6t5erp l4t3hei lt3her l2t1ho l6t5i6b lti1l l8trö
-lt1sc lt6ser lt4s3o lt5ums lu8br lu2dr lu1en8 8lu8fe luft3a luf8tr
-lu6g5r 2luh l1uhr lu5it 5luk 2l1umf 2l1umw 1lun 6l5u6nio 4l3unte lu5ol
-4lurg 6lurs l3urt lu4sto
-lus1tr
-lu6st5re lu8su lu6tal lu6t5e6g lu8terg
-lu3the lu6t5or lu2t1r lu6ß5 l1v lve5r6u 2l1w 1ly lya6
-6lymp ly1no l8zess l8zo8f l3zwei lz5wu 3länd lä5on
-lä6sc lät1s 5läuf 2läug läu6s5c lä5v
-l1öl 1lös lö1ß6t 6l1übe 1ma
-8mabg ma5chan mad2 ma5el 4magg mag8n ma1la ma8lau mal5d 8malde mali5e
-malu8 ma8lut 2m1amp 3man mand2 man3ds 8mangr mani5o 8m5anst 6mappa
-4m3arbe mar8kr ma1r4o mar8schm 3mas ma1sc ma1tö 4m5auf ma5yo 2m1b
-mb6r 2m1c 2m1d md6sä 1me me1ch me5isc 5meld mel8sa 8memp me5nal
-men4dr men8schl men8schw 8mentsp me1ra mer4gl me1ro 3mes me6s5ei 
-meta3s2
-me1th
-me8ß 2m1f6 2m1g 2m1h 1mi mi1a mi6ale mi1la 2m1imm mi1na
-mi5nü mi4s3an mit1h mi5t6ra 3mitt mitta8 mi6ß5 6mj
-2m1k8 2m1l 2m1m m6mad m6m5ak m8menth m8mentw mme6ra m2mn mm5sp mm5ums
-mmut5s m8män m1n8 m5ni 1mo mo5ar mo4dr 8mof mo8gal mo4kla mol5d
-m2on mon8do mo4n3od
-mon2s1tr
-mont8a 6m5ony mopa6 mo1ra mor8d5a mo1sc mo1sp 5mot
-moy5 2mp m1pa mpfa6 mpf3l mphe6 m1pi mpin6 m1pl mp2li m2plu mpo8ste
-m1pr mprä5 mp8th mput6 mpu5ts m1pö 8m1q 2m1r 2ms ms5au m1sc
-msch4l ms6po m3spri m1str 2m1t mt1ar m8tein m2t1h mt6se mt8sä
-mu5e 6m5uh mumi1 1mun mun6dr muse5e mu1ta 2m1v mvol2 mvoll3 2m1w 1my
-2m1z mä6kl 1män mä1s mä5tr mäu4s3c 3mäß
-möb2 6möl 1mü 5mün 3müt 1na.
-n5ab. 8nabn n1abs n1abz na6bä na2c nach3e 3nacht 1nae na5el
-n1afr 1nag 1n2ah na8ha na8ho 1nai 6nair na4kol n1akt nal1a 8naly 1nama
-na4mer na1mn n1amp 8n1amt 5nanc nan6ce n1and n6and. 2n1ang 1nani
-1nann n1ans 8nanw 5napf. 1n2ar. na2ra 2n1arc n8ard 1nari n8ark
-6n1arm 5n6ars 2n1art n8arv 6natm nat6s5e 1naue 4nauf n3aug 5naui n5auk
-na5um 6nausb 6nauto 1nav 2nax 3naz 1naß n1b2 nbau5s n1c
-nche5e nch5m 2n1d nda8d n2d1ak nd5ans n2d1ei nde8lac ndel6sa n8derhi
-nde4se nde8stal n2dj ndnis5 n6d5or6t nd3rec nd3rot nd8samt nd6sau
-ndt1h n8dumd 1ne ne5as ne2bl 6n5ebn 2nec 5neei ne5en ne1g4l 2negy
-4n1ein 8neis 4n3e4lem 8nemb 2n1emp nen1a 6n5energ nen3k 8nentb
-4n3en3th 8nentl 8n5entn 8n5ents ne1ra ne5r8al ne8ras 8nerbi 6n5erde.
-nere5i6d nerfor6 6n5erhö 8nerlö 2n1err n8ers. 6n5ertra
-2n1erz nesi3e net1h neu4ra neu5sc 8neuß n1f nf5f nf2l
-nflei8 nf5lin nft8st n8g5ac ng5d ng8en nge8ram ngg2 ng1h n6glic ng3rip
-ng8ru ng2se4 ng2si n2g1um n1gy n8gäl n1h nhe6r5e 1ni ni1bl
-ni5chä ni8dee n6ie ni1en nie6s5te niet5h ni8etn 4n3i6gel n6ik
-ni1la 2n1imp ni5na 2n1ind 8ninf 6n5inh ni8nit 6n5inn 2n1ins 4n1int
-n6is
-nis1tr
-ni1th ni1tr n1j n6ji n8kad nk5ans n1ke n8kerla n1ki nk5inh
-n5klö n1k2n n8k5not nk3rot n8krü nk5spo nk6t5r n8kuh
-n6küb n5l6 nli4mi n1m nmen4s n1na n8nerg nni5o n1no nn4t3ak nnt1h
-nnu1e n1ny n1nä n1nö n1nü no5a no4b3la 4n3obs 2nobt
-noche8 no6die no4dis no8ia no5isc 6n5o6leu no4mal noni6er 2n1onk n1ony
-4n3o4per 6nopf 6nopti no3ra no4ram nor6da 4n1org 2n1ort n6os no1st
-8nost. no8tan no8ter noty6pe 6n5ox n1p2 n1q n1r nrös3 6ns n1sac
-ns3ang n1sc n8self n8s5erf n8serg n6serk ns5erw n8sint n1s2pe n1spr
-n6s5tat.
-n6stob n1str n1ta n4t3a4go nt5anh nt3ark nt3art
-n1te nt3eis nte5n6ar nte8nei nter3a nte6rei nt1ha nt6har n3ther nt5hie
-n3thus n1ti nti1c n8tinh nti1t ntlo6b ntmen8 n1to nt3o4ti n1tr ntra5f
-ntra5ut nt8rea nt3rec nt8rep n4t3rin nt8rop n4t3rot n4trü nt1s
-nts6an nt2sk n1tu nt1z n1tä n1tö n8töl n1tü 1nu
-nu1a nu5el nu5en 4n1uhr nu5ie 8numl 6n5ums 6n5umw 2n1und 6nuni 6n5unr
-2n1unt 2nup 2nu6r n5uri nu3skr nu5ta n1v 8n1w 1nys n1za n6zab n2z1ar
-n6zaus nzi4ga n8zof n6z5unt n1zw n6zwir 1näc 5näe 5näi
-n8äl nä6m nä6re n5ärz 5näus n1öl
-1nöt n5öz 5nü. 6n1ü2b 5nüß
-o5ab. oa2l o8ala o1a2m o1an ob1ac obe4ra o6berh 5o4bers o4beru
-obe6ser 1obj o1bl o2bli ob5sk 3obst. ob8sta obst5re ob5sz o1che
-oche8b o8chec o3chi och1l och3m ocho8f o3chro och3to o3chu och1w o1d
-o2d1ag od2dr ode5i ode6n5e od1tr o5e6b o5e6der. oe8du o1ef o1e2l
-o1e2p o1er. o5e8x o1fa of8fan 1offi of8fin of6f5la o5fla o1fr 8o1g
-og2n o1ha o1he o6h5eis o1hi ohl1a oh1le oh4l3er 5ohm. oh2ni o1ho
-oh1re oh1ru o1hu oh1w o1hy o1hä o5ia o1id. o8idi oi8dr o5ids
-o5isch. oiset6 o1ism o3ist. o5i6tu o1j o1k ok2l ok3lau o8klä
-1okta o1la old5am old5r o1le ole5in ole1r ole3u ol6gl ol2kl olk4s1
-ol8lak ol8lauf. ol6lel ol8less o1lo
-ol1s ol2ster
-ol6sk o1lu oly1e2 5olym
-o2mab om6an o8mau ombe4 o8merz om5sp o1mu o8munt o1mä o1mö
-o1na ona8m on1ax on8ent o6n5erb 8oni oni5er. on1k on6n5a6b o1no ono1c
-o4nokt 1ons onts8 o1nä oo8f 1oog oo2pe oo2sa o1pa 3o4pera o3pfli
-opf3lo opf3r o1pi o1pl o2pli o5p6n op8pa op6pl o1pr o3p4ter 1opti
-o1pä o5pö o1q o1ra. o3rad o8radd 1oram o6rang o5ras o8rauf
-or5cha or4d3a4m or8dei or8deu 1ordn or4dos o1re o5re. ore2h o8r5ein
-ore5isc or6enn or8fla or8fli 1orga 5orgel. or2gl o1ri 5o6rient or8nan
-or8nä o1ro or1r2h or6t5an or8tau or8tere o1rus o1ry o1rä
-or1ü2 o1sa osa3i 6ose o8serk o1sk o6ske o6ski os2kl os2ko os2kr
-osni5e o2s1o2d o3s4per o4stam o6stau o3stra ost3re osu6 o6s5ur o5s6ze
-o1ta ot3auf o6taus o1te o6terw o1th othe5u o2th1r o1ti o1to oto1a
-ot1re o1tri o1tro ot1sc o3tsu ot6t5erg ot2t3h ot2t5r ot8tö o1tu
-ou3e ouf1 ou5f6l o5u6gr ou5ie ou6rar ou1t6a o1v o1wa o1we o6wer. o1wi
-owid6 o1wo o5wu o1xe oy5al. oy1e oy1i o5yo o1z oza2r 1o2zea ozo3is
-oö8 oß5elt oß1t 3paa pa6ce 5pad pag2 1pak
-pa1la pa8na8t pani5el pa4nor pan1s2 1pap pap8s pa8rei par8kr paro8n
-par5o6ti part8e 5partei 3partn pas6sep pa4tha 1pau 6paug pau3sc p1b
-8p5c 4p1d 1pe 4peic pe5isc 2pek pen3k pen8to8 p8er pe1ra pere6 per5ea
-per5eb pe4rem 2perr per8ran 3pers 4persi pe3rü pe4sta pet2s
-p2f1ec p4fei pf1f pf2l 5pflanz pf8leg pf3lei 2pft pf3ta p1g 1ph 2ph.
-2p1haf 6phb 8phd 6p5heit ph5eme 6phg phi6e 8phk 6phn p5holl pht2
-ph3tha 4ph3the phu6 6phz pi1en pi5err pi1la pi1na 5pinse pioni8e 1pis
-pi1s2k pi1th p1k pl8 5pla p2lau 4plei p3lein 2pler 6p5les 2plig p6lik
-6p5ling p2liz plo8min 6p1m p1n 1p2o 8poh 5pol po8lan poly1 po3ny po1ra
-2porn por4t3h po5rö 5poti p1pa p6p5ei ppe6la pp5f p2p1h p1pi pp1l
-ppp6 pp5ren
-pp1s pp2ste
-p5pö pr6 3preis 1pres 2p3rig 5prinz 1prob 1prod
-5prog pro8pt pro6t5a prote5i 8proß prä3l 1präs
-präte4 1prüf p5schl 2pst 1p2sy p1t p8to8d pt1s 5p6ty 1pu
-pu1b2 2puc pu2dr puf8fr 6p5uh pun8s pu8rei pu5s6h pu1ta p1v p3w 5py
-py5l p1z pä6der p5ä6m pä8nu 8pär pät5h
-pät1s qu6 1qui 8rabk ra6bla 3rable ra2br r1abt 6rabz ra4dan ra2dr
-5rafal ra4f3er ra5gla ra2g3n 6raha ral5am 5rald 4ralg ra8lins 2rall
-ral5t 8ramei r3anal r6and ran8der ran4dr 8ranf 6ranga 5rangi ran8gli
-r3angr rans5pa 8ranw r8anz. ra5or 6rapf ra5pl rap6s5er 2r1arb 1rarh
-r1arm ra5ro 2r1art 6r1arz ra8tei ra6t5he 6ratl ra4t3ro r5atta raue4n
-6raus. r5austa rau8tel raut5s ray1 r1b rb5lass r6bler rb4lie rbon6n
-r8brecht rb6s5tä r8ces r1che rch1l rch3m rch3re rch3tr rch1w 8rd
-r1da r8dachs r8dap rda5ro rde5ins rdio5 r8dir rd3ost r1dr r8drau 1re.
-re1ak 3reakt re3als re6am. re1as 4reben re6bl rech5a r8edi re3er
-8reff 3refl 2reh 5reha r4ei. reich6s5 8reier 6reign re5imp 4r3eina
-6r3einb 6reing 6r5einn 6reinr 4r3eins r3eint reli3e 8r5elt 6rempf
-2remt ren5a6b ren8gl r3enni 1reno 5rente 4r3enth 8rentl 4r3entw 8rentz
-ren4zw re1on requi5 1rer rer4bl 6rerbs 4r3erd 8rerhö 8rerkl
-4r3erla 8rerlö 4r3erns 6r5ernä rer5o 6r5erreg r5ertr r5erwec
-r5erö re2sa re8schm 2ress re5u8ni 6rewo 2r1ex r1f r8ferd rf4lie
-8r1g r8gah rge4bl rge5na rgest4 rg6ne r2gni2 r8gob r4g3ret rg8sel r1h8
-r2hy 5rhyt ri1ar ri5cha rid2g r2ie rieg4s5 ri8ei ri1el ri6ele ri1en
-ri3er. ri5ers. ri6fan ri8fer ri8fr 1r2ig ri8kn ri5la rimä8
-ri1na r8inde rin4ga rin6gr 1rinn 6rinner rino1 r8insp 4rinst
-ri1nä ri5o6ch ri1o2d ri3o6st 2r1ir r2is ri3sko ri8spr
-ri5sv r2it 6r5i6tal ri5tr ri6ve. 8r1j 6rk r1ke rkehrs5 r1ki r3klin
-r1k2n rk3str rk4t3an rk6to r6kuh rkä4s3t r1l r5li rline5a 6r1m
-r6manl rma4p r4m3aph r8minf r8mob rm5sa 2rn r1na rna8be r5ne rn2ei
-r6neif r6nex r6nh rn1k r1no r6n5oc rn1sp r1nä r1nü ro6bern
-6robs ro1ch 3rock. ro5de ro1e 4rofe ro8hert 1rohr ro5id ro1in ro5isc
-6rolym r2on 6roog ro6phan r3ort ro1s2p ro5s6w ro4tau ro1tr ro6ts 5rout
-r1p rpe8re rp2f r2ps r2pt r1q 2rr r1ra r1re rrer6
-rr6hos r5rhö
-r1ri r1ro rro8f rr8or rror5a r1ru r3ry r1rä r1rö r1rü
-2r1s
-r2ste r2sti
-r6sab r4sanf rse6e rse5na r2sh r6ska r6ski rs2kl r8sko r2sl rs2p
-r6stauf r8sterw r8stran rswi3d4 r2sz 2r1t rt3art r8taut r5tei rt5eige
-r8tepe r4t3erh r8terla r4t3hei r5t6hu r4t3int rt5reif rt1sc rt6ser
-rt6s5o rt6s5u rt5und r8turt rube6 ru1en 1r4uf ruf4st ru1ie 2r1umg
-2r1uml 2rums run8der run4d5r 6rundz 6runf 8runs 2r1unt 2r1ur r6us
-ru6sta
-rus1tr
-ru6tr 1ruts r1v rven1 rvi2c r1w r1x r1za rz5ac r6z5al
-r8z1ar r8zerd r6z5erf rz8erh rz4t3h r8zum rä4ste räu8sc
-r1öf 5röhr rö5le 3röll 5römis r1ör
-rö2sc 3rümp 1sa. 1saa s3a4ben sa2bl 2s1abs 6s1abt 6sabw
-3sack. 6s3a4der 1saf sa1fa 4s1aff sa5fr 1sag 1sai sa1i2k1 4s1akt 1sal
-sa1la 4s3alpi 6salter salz3a 1sam s5anb san2c 1sand s5angeh 6sanl
-2s1ans 6s3antr 8s1anw s1ap s6aph 8sapo sap5p6 s8ar. 2s1arb 3sarg
-s1arm sa5ro 2s1art 6s1arz 1sas 1sat sat8a 2s1atl sa8tom 3s8aue s5auff
-sau5i s6aur 2s1aus 5s6ause 2s1b2 2sca s4ce 8sch. 3scha. 5schade
-3schaf 3schal sch5ame 8schanc 8schb 1sche 6schef 8schex 2schf 2schg
-2schh 1schi 2schk 5schlag 5schlu 6schmäß
-6schnaß 1scho 6schord 6schp 3schri 8schric 8schrig
-8schrou 6schs 2scht sch3ta sch3tr 1schu 8schunt 6schv 2schz 5schö
-5schü 2sco scre6 6scu 2s1d 1se se5an se1ap se6ben se5ec see5i6g
-se3erl 8seff se6han se8hi se8hö 6s5eid. 2s1eig s8eil 5sein.
-sei5n6e 6s5einh 3s8eit 3sel. se4lar selb4 6s3e4lem se8lerl 2s1emp
-sen3ac se5nec 6s5ents 4sentz s8er. se8reim ser5inn 8sermä
-8s5erzi 6seröf se1um 8sexa 6sexp 2s1f2 sfal8ler 2s3g2 sge5b2 s1h
-s8hew 5s6hip 5s4hop 1si 2siat si1b sicht6s 6s5i6dee siege6s5 si1en
-si5err si1f2 si1g2n si6g5r si8kau sik1i si4kin si2kl si8kü si1la
-sil6br si1na 2s1inf sin5gh 2s1inh sinne6s5 2s1ins si5ru si5str 4s1j
-s1k2 6sk. 2skau skel6c skelch5 s6kele 1s2ki. 3s4kin. s6kiz s8kj
-6skn 2skow 3skrib 3skrip 2sku 8skü s1l s8lal slei3t s4low 2s1m
-s1n 6sna 6snot 1so so1ch 2s1odo so4dor 6s5o4fen solo3 s2on so5of 4sope
-so1ra 2s1ord 4sorga sou5c so3un 4s3ox sp2 8spaa 5spal 1span 2spap
-s2pec s4peis 1spek s6perg 4spers s6pes 2s1pf 8sphi 1s2phä 1spi
-spi4e 6s5pig 6spinse 2spis 2spla 2spol 5s6pom 6s5pos 6spoti 1spra
-3s8prec 6spreis 5spring 6sprob 1spru s2pul 1s2pur 6spy 5spän
-1spü s1q 2s1r
-2ssa 2sse 2ssi 2sso 2ssä 2ssö 2ssü 2s1sch
-sse8nu ssini6s ssoi6r 2st.
-1sta 4stafe 2stag
-sta3la 6stale
-4s2talg
-8stalk 8stamt 6st5anf 4stans 6stanw 6starb sta4te
-6staus 2stb 6stc 6std
-s1te
-4steil
-6steppi
-8stesse 6stf 2stg 2sth st1ha st3hei s8t1hi st1ho st5hu
-s1ti
-s2ti4el
-4s2tigm
-6s2tind
-4s2tinf
-s2ti8r
-2stk 2stl 2stm
-1sto 6stoll. 4st3ope
-6stopf. 6stord 6stp
+.ab1a
+.abi4t
+.ab3l
+.abo2
+.ab3ol
+.ab1or
+.ab3s2
+.ab3u
+.ade3n
+.ae3
+.aft2
+.ag4n
+.ag4r
+.ag2u
+.ai2s
+.akt2a
+.al2e
+.al3k
+.al3lei
+.al5len
+.al3se
+.al4tan
+.al4tei
+.alter6s5
+.alt3s4
+.al2tu
+.ampe4
+.amt2s1
+.amt4sc
+.ana1c
+.an3d2
+.anden6k
+.and4ri
+.an1er
+.ang2
+.an3g4li
+.angs4
+.angst3
+.ani2s
+.an3k4
+.an3na
+.an3s2
+.an4si.
+.an3z2
+.ap5p6le.
+.aps2
+.ari1e
+.ar3k2a
+.ar4m3ac
+.ar4mun
+.ar2sc
+.ar4tan
+.ar4t3ei
+.arter4
+.ar6t5erh
+.ar2tr
+.arz2
+.asbe2
+.as4ta
+.as3tr
+.ata1
+.ate2
+.at4h
+.at4r
+.au3d
+.aue2
+.au4f3
+.aufs4
+.au2s3
+.auss2
+.auß2
+.ax2
+.äm3
+.är6schl
+.ät2h
+.ät2s
+.bahn3
+.bah6ner
+.baus4
+.be3erb
+.bel2a
+.be3r4a
+.be3r2e
+.ber4g3a
+.ber6g5e6b
+.ber4g3r
+.ber4tr
+.bi4os
+.bi2t
+.bit1a
+.boge2
+.bogen3
+.bogens6
+.bo4s3k
+.bu4ser
+.by4t
+.ca2s3t
+.ch4
+.char8mes
+.chi3er
+.dab4
+.da2r1
+.dar3in
+.darm1
+.da4te.
+.da4tes
+.de2al
+.de1i
+.dein2
+.de3lo
+.de8ments
+.den4ka
+.den4kl
+.den4ko
+.de1o2
+.de3r4en
+.de1s
+.de3sk
+.des2t
+.di3el
+.di4en
+.dien4e
+.dien6st
+.dienst7a8d
+.do3b
+.do2mo
+.don4a
+.do1pe
+.dor2f1
+.dy2s3
+.ebe2r1
+.edu3s
+.eg2o
+.eh2e
+.ehe1i
+.ei3e2
+.ei3f2e
+.ei3k
+.ein3d
+.eine2
+.ei4neb
+.ein6erl
+.eise4
+.ei2sp
+.eis3s4
+.ei2s3t
+.ei4tr
+.eke2
+.ek3li
+.el2a
+.el2bi
+.el2bl
+.elb3s
+.el4fei
+.el2fl
+.el2i
+.el6st
+.em3m2
+.en1
+.en4da
+.en4d3er4
+.en2d3r
+.end3s
+.en4dü
+.en2gl
+.enn2
+.ent3
+.en2ta
+.en4tei
+.en4tio
+.en4t1r
+.en5trop
+.ents4
+.er4bei
+.er8brecht
+.er2bu
+.er4dan
+.er4dei
+.erden6k
+.er4dep
+.er4d3er
+.er1e
+.ere3c
+.erf4
+.er1i
+.ers2
+.er8stein
+.erster6
+.er8stritt.
+.er8stritten.
+.er4z3el
+.er4zen4
+.ese3le
+.es3p
+.es3ta
+.est6e
+.es3th
+.es3t3r
+.et2s
+.eu1
+.eu3g4
+.eu3r4
+.eu3t
+.ext4
+.fe3la
+.fer4no
+.fi3est
+.fi4le.
+.fi4len
+.fi2s
+.flug1
+.for2t
+.fs4
+.fu2sc
+.ga2me
+.ga4s1
+.gas3e
+.ga4t
+.gd2
+.gebe4a
+.geb2l
+.gee4
+.gel4b3r
+.gel2d1
+.ge3lu
+.ge5nar
+.ge3n4e
+.gene7cke
+.ge3n2o
+.ge3r4a
+.ge3r2e
+.ge3ro
+.ger4s
+.ge3s4a
+.ge3u
+.glan2
+.gol6der
+.gs4
+.halt4e
+.hau2t1
+.he2
+.he4bei
+.he3fe
+.he3le
+.her3an
+.he3rat
+.her6b5ra
+.he3rer
+.he3ri
+.he6r5inn
+.hin3u
+.hips4
+.hi4s
+.hof1e
+.ho4fen
+.ho4met
+.ho4st
+.ia4
+.im2a
+.ima4ge
+.im5m2
+.in1
+.ind4
+.in3gl
+.ink2
+.in3n2e
+.in3sk
+.inu1
+.ioni1
+.ire3
+.is2a
+.is3t
+.it2h
+.iv2
+.ivo3
+.joni1
+.jor3
+.ka2b3l
+.ka2i
+.ka3le
+.ka3ta
+.ka4t3io
+.ki4e
+.klang3
+.ko3b
+.kopf1
+.kor4da
+.kraf2
+.ks4
+.kus2
+.la3be
+.la3ho
+.lase2
+.le4ar
+.le4gas
+.le3n2i
+.len3z
+.lich8t7er8s
+.li2f
+.li4ve.
+.lo4g3in
+.lo2sc
+.los3s4
+.lo3ver
+.luster6
+.lus4tr
+.lut4h
+.ma3d
+.ma3ge
+.mal4e
+.ma2st
+.mat4c
+.matu3
+.md2
+.me3l2a
+.me3ne
+.me3no
+.men8schl
+.men8schw
+.ment4
+.mes4sp
+.mi2f
+.mik4
+.mil2z
+.mi2st
+.mi4t1
+.mm2
+.mutter5
+.na3no
+.na3t
+.nat2h
+.näs1c
+.nebe4n
+.ner2f
+.ne1ro
+.ne2s
+.nich2
+.nicht5e
+.ni4e
+.ni3k4l
+.no4th
+.nus4
+.oa3s
+.ob1a
+.obe2
+.ober5ei
+.of2e
+.oper4
+.or2a
+.ord4e
+.ort2
+.ort4h
+.orts3e
+.os3s
+.os4tal
+.os5t6alg
+.oste2
+.os4t3el
+.ost5end
+.os8ten8de
+.oste6re
+.os8terwe
+.os4t3r
+.os2tu
+.ot1
+.ozo4
+.öd2
+.öl3l
+.pab4
+.pa2r1e
+.par3t4h
+.pe2c
+.pe3la
+.pe3le
+.pf4
+.ph4
+.poka2
+.po4st
+.pro1
+.ps2
+.rabe4
+.ra3ch4e
+.ra3me
+.ra3sa
+.rau2m
+.rau8schl
+.räu3sc
+.re3ale
+.reb3s2
+.re3cha
+.re5insz
+.reis6e5i
+.rei4st
+.reli1
+.res6tr
+.ri4as
+.richt6e
+.ro4a
+.ro3be
+.ro2h
+.ro3m4a
+.ro2tr
+.rö2s
+.ruf3s
+.ruh2r1
+.runder6
+.rü1b
+.rü6cker6
+.sa3br
+.sali3e
+.sami1
+.sau1c
+.sau5er.
+.sch4
+.schaf8t7end
+.scheiner8
+.se3ck
+.se2ei
+.se2ha
+.sen4f
+.sen3s
+.se3re
+.se1ro
+.se2t1
+.sha2
+.si3gn
+.si4te
+.ski1e
+.skis2
+.sour2
+.spani7er.
+.spiege8lei
+.st4
+.ste2i
+.steiner8k
+.sto4re
+.sucher6
+.tage4s
+.tan4k3a
+.tan4k3l
+.ta3ra
+.tar3t
+.ta2t3h
+.ta2to
+.ta4tor
+.ta2t1u
+.te2e
+.te2f
+.tehe3
+.teiler8s
+.tei8l7ersc
+.te3l
+.te3no
+.ten3s
+.te1ra
+.te2s
+.te4st
+.tester8g
+.tester8h
+.test3r
+.th4
+.ti2e
+.ti2me
+.ti4mes
+.ti2s
+.ti8sch7end
+.tite4
+.tode4
+.to4der
+.todes5
+.to2n
+.to4nat
+.to4nin
+.to4pl
+.to2pr
+.to2w
+.tri3es
+.tro2s
+.ts4
+.tsa3
+.tse3
+.tu3ra
+.tu3ri
+.turm1
+.tur4ma
+.ub2
+.ufe2
+.ufer1
+.ul2b3
+.um3
+.uma2
+.ume2
+.umo2
+.un3a2
+.un3d
+.une2
+.un3g
+.uni4t
+.un3s
+.uns4t
+.ur3a2d
+.uran6fa
+.ur1c
+.ur1e
+.ur4inf
+.ur3o4m
+.ur1o2p
+.ur3s2
+.ut2a
+.ut3r
+.übe4
+.ve5n2e
+.voll1
+.vo4r
+.wah4l
+.wa2s
+.weg5s
+.wei4ta
+.welter8e
+.welter8kl
+.wer6ker
+.wer4kr
+.wer4tr
+.wetterer8s
+.wi4e
+.wor2
+.wort5en6
+.wor8tend
+.wor4tu
+.wur2f1
+.xe3
+.ya4l
+.zahn3
+.zel4la
+.zelle4
+.zel6leb
+.zeug4i
+.zi2e
+.zie4l3u
+.zin4ka
+.zin4s3c
+.zin4st
+.zuch2
+.zucht3
+.zug3l
+.zu4gra
+.zu2pf
+.zwe2
+.zweigen8
+.zwei8g7end
+a1ab
+aa2be
+aa1c
+a1a2ce
+aa2gr
+a1akt
+aals2t
+a1a2n
+a2ans
+a1aq
+2a2ar
+aa2r3a
+aar3b
+aar3d
+aa3rea
+aa2rei
+aarf4
+aar3g2
+aar3k4
+aar3t4
+1aas
+aata2
+aa2th
+aa4t3r
+aat4s3
+2a3au
+a1ä
+a1b
+2aba
+ab1alt
+ab2am
+ab2ant
+ab1au
+ab1ä
+ab2är
+ab2äu
+2abbat
+2abbin
+1abd
+4a3be.
+4a3bec
+abe1e
+ab1eic
+abe3i4d
+ab1eil
+ab1ein
+4ab2el
+abe2la2
+abe4l3in
+1abent
+2aber
+a2berd
+a3beri
+ab1er2k
+ab1er2r
+ab1er2z
+4abes
+abe2s1e
+ab3esse
+2ab2et
+2abew
+1abf
+1abg
+3abga
+1abh
+2abi
+4abil
+ab1ins
+ab1ir
+abi3s4t
+3ab1it
+1abk
+ab1l
+1a2bla
+a4blag
+a3blat
+a4blau
+1a2blä
+3ab3lei
+2ablet
+ab3li
+a2blin
+ab4lit
+2ablo
+1a2blö
+2ablu
+1abn
+2abo
+3a2bo.
+ab2of
+3a2bon
+4abot
+2abö
+ab3r
+a4brä
+a2bre
+2abro
+ab4ros
+2abrö
+1ab5sc
+1ab3s2p
+abst2
+ab3sz
+1abtei
+abte2s
+3abtr
+2abu
+a2bum
+ab1ur
+2abü
+1abw
+2aby
+aby4t
+3abz
+2a3ca
+ac1c
+a1cem
+a1cen
+a2ceo
+ach1a
+a1chal
+a3chari
+ach3as
+ach3au
+2achb
+a1che
+a2ch1e4c
+ach1ei
+ach4ei.
+a2chep
+a4cherf
+ach5erfa
+a4ch3erh
+a4ch3erl
+a4cherö
+a4ch3erw
+2achf
+2a1chi
+a2chim
+ach3l
+2ach3m
+ach3n
+a1cho
+a3cho.
+ach1ob
+a2cho2r
+ach3ö
+2ach3r
+2achsc
+achs4el
+ach3s4i
+ach3skr
+achs4or
+ach3su
+a4cht
+ach4tak
+ach8tersp
+ach6t5erw
+ach4t1o
+ach8traum
+ach8träume.
+ach8träumen.
+ach6trit
+acht6sal
+ach4tum
+a1chu
+ach1u2f
+ach3ü
+2achv
+4ach1w
+a2chy
+2a1ci
+4ack.
+a1ckar
+a3ckel
+a2ckin
+ack2sp
+acksta4
+2a1cl
+acon4n
+2acu
+a1ç
+a1d
+2ad.
+2ada.
+4adab
+a2dac
+a2dad
+ad2ag
+ad1ama
+a2d1an
+3adap
+4a3d2a2r3
+2adat
+a2d1au
+a3dau.
+1a2dä
+ad1c
+1add
+2ade.
+ade2al
+a3dec
+a3dee
+adefi2
+2adeg
+4aden
+ade1ra
+4ade1s
+ade3s2p
+ades4s
+2adf
+4adh
+4adi
+adi3en
+adi3er.
+adie4sc
+adi4st
+3adj
+2adli
+3admi
+4admu
+ad2ob
+1a2dop
+2adp
+2adq
+2ad3rec
+ad3rei
+ad3run
+2ads2
+ad3st
+ad3sz
+2ad2t1
+ad4te2
+adt3h
+1adv
+2a1e1
+ae2b
+a2ec
+ae2ck
+ae2d
+ae2i
+a2ek
+a3el.
+a2ela
+a2ele
+a2eli
+a3els
+ae2m
+ae2o3
+ae2p
+a3er.
+3a2er2o1
+aes2a
+ae2sc
+aes5t
+a2ew
+ae2x
+2afa
+af1ab
+a2f1a2n
+a3far
+a2f1au
+2afä
+a2f1än
+2afe
+a2f1ec
+a4fentl
+a4f1ep
+aff4a
+af2f3l
+af4flu
+aff2s
+2afi
+afi2e1i
+afi6kanz
+afi4kat
+afi2t
+2af3l
+a1flu
+2afo
+a2f3oc
+a2ford
+afo1s
+2afra
+af3rau
+af3rä
+af3re
+2afro
+af3rö
+af4rü
+af3s2a
+af3s2h
+af2si
+af2sp
+afs4t
+af2t1a
+af2tei
+af2te2l
+aft4erk
+af2t1o
+af2tö
+aft3r
+af2tra
+af4t5re
+aft4stä
+af2tur
+a2f3ur
+2afü
+afür3
+a1g
+2ag.
+2aga
+ag1a2b
+ag1a2d
+ag1ar
+a2g1au
+agd1
+ag2del
+ag2di
+ag2dr
+ag2du
+4age.
+age1i
+agein4s
+age4ler
+ag2em
+4a3gen.
+age4neb
+a2gent
+2ages
+age4sam
+age4s3i
+age2s3p
+ages6sen
+age4s3ti
+3aggr
+a2g1id
+a2gim
+2a2g1l
+ag4lan
+ag4las
+ag3le
+a4glö
+2agm
+ag2n
+ag4nat
+a4gnä
+ag4ne.
+ag4nu
+ag3rat
+a2g3re
+a2g3ri
+ag4ro
+2ags
+ag3s2ah
+ag4sam
+ag3s4eid
+ags8porta
+ags4tan
+ag1ste
+ag3stö
+2agt
+ag2th
+2agu
+a2gund
+2ah.
+a1ha
+ah2an
+ah4at
+a1hä
+2a1he
+ahe1in
+a2h1er2h
+ahe1s
+ahe1u
+a1h2i
+ahin3
+ah2l3a2
+ah2l1ä
+ah4l1ei
+ahle4na
+ah4l3erd
+ah4l3erh
+ahl1o2
+ah2lö
+ahl3sz
+ahme1i
+ahme3s
+ah3mu
+ah4n3a
+ah3nee
+ahn3el
+ah4nerd
+ahner4e
+ahner6le
+ahner4n
+ah2nin
+ah2no
+1a2hor
+ah1os
+a2h3ö
+4ahr
+ahr1a
+ah3r2e
+ahren6sc
+ahre4s
+ah3ri
+ahr6tage
+ahr6teng
+ahr2ti
+ahr4tri
+ahr4tro
+ahr4tun
+ah2ta
+ah2te2l
+ah2t1ex
+ah4t5r
+aht3s6
+a1hu
+ah1w
+a1hy
+2ai.
+ai3a4
+a1ia.
+2aib
+ai2bl
+aid2s
+ai1e4
+ai3en3
+aif4
+ai1fr
+ai3g4
+a3ik.
+ai3ke
+ai2lar
+ail3d4
+ai2lei
+ail3g
+ai2lo
+4ain
+ain2a
+a1ind
+ai5n4e
+ain3s
+ains2p
+3airb
+ai2sa
+a3isch.
+ai5schw
+ai3s2e
+ait4
+a3iv.
+a3ivl
+a3ivs
+a1j
+a2jat
+aje2
+ajekt4o
+2ak.
+a3ka.
+2aka3b4
+a2ka3d2
+2akal
+2a3kam
+2akar
+ak4at
+aka4tak
+1akaz
+4akä
+2akb
+2akc
+2akd
+2a1ke
+a2kef
+a2k1em
+a2k1ent
+a2kes
+a2keu
+4a1ki
+ak1ins
+aki1s
+1akku
+2ak3l
+ak4li
+a1kna
+2ako
+2a1kr
+4akra
+ak4ri
+2aks
+ak3sh
+ak2t1a2b
+2aktb
+ak2tel
+akt2er
+2aktik
+2aktis
+2aktm
+ak2tö
+ak2t3r
+akt4ri
+2aktsi
+2aktsp
+2aktst
+2aktw
+a1ku
+2akun
+a2kup
+2akur
+aku2s
+4a3kü
+1akz
+3akze
+a1la
+2ala.
+4alabo
+al2abr
+al1af
+al1age
+2alai
+al3akr
+al1am
+al1ana
+4aland
+a2lang
+al1anz
+al1app
+a3lar.
+al3arc
+a3lare
+al2arm
+2al3arr
+a2lart
+ala2s
+al1asi
+al1ass
+ala2t1a
+al4atm
+alat3z
+al1au
+al3aug
+a1lä
+a2l1äm
+al1än
+al1äu
+3albat
+al2bär
+alber4e
+al4berh
+al4b3er4w
+al2b1l
+al2boh
+alb3ru
+alb3s
+al2dä
+al4d3erl
+al4d3ern
+alde2s
+ald3inn
+al2dr
+alds2
+2ale
+4a3le.
+ale4ar
+al1eb
+ale2be
+al1ec
+a4l3ef
+a2l1ei
+a3l2eic
+a4l3ein
+a2l1el
+3a2lema
+alen1
+4a3len.
+3alenc
+alende4
+al3endr
+a4l3ends
+a2leng
+al2enn
+a3lentf
+ale2p
+al1epo
+4aler.
+a2l1erb
+a2l1erf
+a2l1erh
+aler4kl
+a2l3erl
+al1erm
+aler4mi
+a2l1er4r
+a2l1ert
+3a4l3erwä
+4ales
+a2l1e4sk
+a2less
+a2l1eu
+al3exi
+alf4r
+2alg.
+3algi
+al2gli
+al3glo
+1algo
+3algor
+2ali
+al2imb
+al1imm
+ali4nal
+al1ind
+a2l1inq
+al1ins
+alken1
+al2klö
+al2kne
+1alkoh
+alk3s
+alks4t
+al2lab
+al2l1an
+al2l1ap
+al2l1a2r
+al2l1au
+al3le.
+al4lec
+3allee
+al3lend
+all3erk
+al3les
+al2lid
+alli5er.
+alli7ers.
+al2lob
+al2lop
+al2löf
+al2map
+al4m3ast
+almo6de.
+a2l1ob
+3aloe
+a2lof
+4alog
+alo2ga
+alo2gr
+al1ont
+al1ort
+a2l1ö
+al2ös
+3alp.
+3alpe.
+1alph
+al2pho
+alrat4
+al3sak
+al6schei
+alsch3s
+al3ska
+al5s6terb
+al2stu
+al2sum
+al2t1ak
+al3tam
+alt1an
+1altä
+al4temu
+al4t3er5f
+al2teu
+al2tin
+alt1op
+al2tö
+al4t3rat
+al2tre
+al4t3ri
+al2t3ro
+alt4stü
+2altu
+a1lu
+alu3b4
+al2u3f
+alu3g
+al1u2k
+a2lum
+al1umb
+al1ur
+a3lus
+4aly
+al2zar
+al2zau
+alz4erk
+al2zw
+2am.
+am2a
+ama3d2
+ama3g
+a2malg
+2a3m4an
+a2m3ap
+3a2maz
+2amä
+4ame.
+a2meb
+2amel
+am4e4n1
+amen6spr
+ame3r2a
+a2m1erf
+a2meri
+ame5r2u
+ame1s
+a4mesh
+a3met
+2amf
+am4ing
+2amir
+2amis
+2amit
+2amk
+2aml
+2amm.
+2ammal
+am4mant
+am2mar
+am2mei
+am2mid
+ammi2e
+am2min
+am2mor
+am2mö
+ammu2
+amni1
+a2mö
+2ampe.
+2ampen
+am4pf
+amp2f1a2
+ampf1o
+2am2ple
+2ampo
+am3pr
+2am2s
+am3sa
+4amsc
+am4schl
+3amse
+am3s2h
+am3so
+am3sp
+am3su
+1amt.
+am2t1a2
+am4tau
+am2t1ä
+am2tei
+amt3eig
+am4tel
+am4t3ern
+am2t1ex
+am4tis
+am2tit
+am2to4
+am6tou
+am2tö
+am2t3r
+am6tre
+am4tri
+am2t1u
+2amu
+3a2mul
+2ana.
+2anab
+ana3c
+4anad
+anadi1
+an2ag
+2a3nak
+an1alg
+ana4lin
+an4a3ma
+2anan
+an4and
+2ana1s
+a5nat.
+ana4th
+a5n4atm
+ana4tr
+an3aug
+1an1äs
+1anb
+2anbas
+2anbu
+an3ch
+2and.
+3an3d2ac
+and3arm
+and3ei
+anden6ga
+an4d3ent
+and5erob
+ande2s
+an2d1ex
+and4sas
+and2so
+and6spar
+and6spas
+and2su
+4andu2
+an2d1ur
+andy1
+2ane
+4ane.
+an3e2c
+a3nee
+an2ei.
+an3eif
+3aneig
+a4neis
+3a2n1e4k
+ane2mi
+4anen
+aner4fa
+an2erh
+a4nerke
+4anern
+a4nerz.
+an4erze
+an1eth
+1anf
+2anf.
+2anfab
+3anfä
+an3fe
+2anfi
+an4fj
+anf3le
+4anfors
+anf5rau
+2anfs
+an3f2u
+2ang.
+1angab
+an2gan
+an2g1ar
+2ange.
+1angeb
+1angeh
+an2g1ei
+an4g3erf
+an4g3er4w
+an4g3erz
+2angh
+2angie
+ang1l
+an2gla
+ang3n
+ang1r
+ang3ra
+1an3gri
+2angs.
+angt4
+1anh
+2a3n2i
+ani3d
+ani3els
+ani5ers.
+ani3g2
+ani3ke
+3a4nim
+a4n3ind
+a4n3ins
+ani2o
+an3i4on
+a4niso
+2anj
+2ank.
+an2kab
+an2k1ak
+an2kan
+an2kei
+2anken
+ank5erfa
+2anki
+an2klö
+an2klu
+ank3no
+an4k3opf
+an2ko4r
+ank1r
+ank3ra
+an4kras
+ank3rä
+an2kro
+2anks
+ank3se
+anks2p
+2ankt
+1anl
+2anlad
+3anlag
+2anmo
+1anmu
+2ann.
+1annah
+an2nar
+an3ne
+an4nef
+annen3s4
+2anns
+ann4s3p
+2annt
+2ano.
+ano3b
+an1od
+2anof
+2anog
+anoi3
+a3nol
+ano2la
+1a2nom
+a3nom.
+a2n1or
+2a3nos
+2a1nö
+2anpu
+1anr
+2anrö
+an3sar
+1an3s2ä
+3anschr
+an3skr
+ans1pa
+ans3pon
+1anspr
+1anst
+ans4tr
+an3s2z
+2ant.
+an2t3ar
+anta4re
+an3t2ä
+1antá
+3antei
+an3tha
+2antie
+3antise
+2anto
+anton2
+1antr
+ant3rin
+1antw
+2anu
+an4ut
+a1nü
+1anw
+2anwi
+an2zä
+2anzb
+2anzd
+1anzei
+anze4n
+2anzg
+2anzh
+an2zid
+an2z1i4n
+2anzk
+2anzm
+2anzr
+2anzs
+2anzt
+1anzü
+3anzün
+2anzv
+2anzw
+an2zwa
+an2zwi
+2anzy
+2ao
+aof4
+ao3i
+a1op
+aopf4
+a1or
+a1os5
+aost2
+a3ot.
+aot4r
+ao3t2s
+2a1ö2
+a1p
+4ap.
+2apa
+a2pe.
+a3pel
+a2pé
+a2pf
+ap2fa
+1apfel
+2apfes
+a3pfl
+a2pht
+2api
+2ap3l
+ap4la
+ap4lä
+ap4lo
+ap2n
+a2pot
+ap3pu
+2apr
+4apro
+aps4ter
+ap5t2
+2a3pu
+2ar.
+a1ra
+a3ra.
+ar2ab
+2ar3abb
+ar3abf
+ar3abt
+ara3d2
+ar3adr
+ara3ge
+a2r3al
+a3r4ale
+a3rali
+a3ralo
+2aran
+a2r1ang
+a2r1anz
+2arap
+a2r3app
+2arar
+a3ras
+ara2st
+a2r1au
+a1rä
+1arb
+2arb.
+2arba
+ar2bak
+ar2b3at
+ar2bau
+4arbef
+ar4b3ein
+2arbek
+2arben
+2arber
+arb3erl
+4arbi
+2ar2bl
+2arbo
+2arb1r
+ar2b3re
+2arbs2
+arb3sk
+arb3so
+2arb3t4
+2arbu
+1ar1c
+2archl
+2archr
+ar2dau
+arde2l
+ar2dob
+ar2dop
+ar2d3r
+ar2du
+a2rea
+are5aler
+a2reb4
+aree2
+ar1eff
+ar1ehr
+ar1eid
+a3reih
+areim3
+a2rein
+arein4b
+arein4s
+arein4t
+a2rele
+4arem
+4a5ren.
+a5reni
+aren6sem
+are3r2a
+arer2e
+a4r3erei
+a2rerg
+a2r1er3h
+a2reri
+a2rerk
+a2rerl
+ar2erw
+are3u
+arf1r
+arf3ra
+arf2sp
+4arg.
+ar3gan
+ar2gl
+ar2gn
+2arg4o
+ar3g4r
+2arh
+2ari
+ar2ia
+a2rid
+ari3e2n
+ari3erd
+ari3erg
+ar3inf
+arin3it
+arin3s4
+ar1int
+a3rio
+ar2ir
+ar4is
+ari2su
+a3riu
+ar2kal
+ar2k1ar
+ark3aue
+ar2kil
+2ark3l
+ar4klag
+ar2kle
+ar2klo
+ark4lö
+ar2kor
+ark3s4a
+ark2se
+ark3she
+ark6tre
+ar2les
+ar3mad
+ar2m1au
+ar3m2ä
+3armee
+ar2m1eg
+ar2m1ei
+ar4merk
+arm2or
+ar2mum
+4armü
+ar2nan
+arn2el
+ar3ni
+ar4nin
+a1ro
+4aroc
+aro8ckeng
+ar1o2d
+ar1of
+aro2fe
+a3rol
+aro3m
+aron2
+a2r1o2p
+a2ror
+aros3
+a2r1ö
+2arp
+arp3fe
+2arr
+ar2r1ad
+ar2r3as
+arre4n1
+ar2r3or
+2arsa
+ar3se
+ar3s2h
+2ar3s2i
+ar2tau
+2artb
+ar3t2e
+2artei
+arter6la
+ar2the
+art3ho
+ar3t2i
+2arto
+art3r
+art4res
+2arts
+art3ske
+2artuc
+2aru
+a2r1uh
+ar1um
+a3rumm
+a2rü
+2arv
+arwa2
+2ary
+ar2zau
+ar2zä
+2arze
+2arzi
+ar2zö
+1arzt
+arz4tei
+arz4tem
+arz2t3r
+2arzu
+ar2z1w
+2asa
+a4s3aa
+a2s3af
+a3sag
+as2al
+as1am
+as3art
+asa2s
+as3at
+asau4f
+a2s3aug
+a2sä
+as3ät
+a6sca
+a4schec
+a4schef
+a4sch3ei
+a6scherg
+a3s4chi
+a2schm
+2ascht
+a3schu
+a4schum
+4a3se
+a4seb
+a4sec
+a4s1ef
+as1eie
+as1emi
+a5sen.
+ase4na
+ase4n3o
+as2er
+a4s3erke
+as4es
+ase4t
+a4sex
+a3s2hi
+as3hir
+a2s3i2k
+2asim
+asin2g
+as1inn
+2asis
+aska3s
+as3ob
+as1of
+a5sol
+a5som
+as1o2p
+as1or
+a4soz
+a2sö
+a2s1p
+aspek6to
+as2ph
+a3s2pi
+as3pio
+a4spir
+as2pra
+2as3sa
+ass2ab
+ass6aus.
+ass2e
+ass3ein
+asse3le
+as3s2i
+as3ski
+as3so
+as2spo
+as2spr
+as2st
+as3sta
+as3stei
+as3sti
+as3str
+as3stu
+2as3ta
+a1stas
+as4tati
+as4tau
+a3stä
+as3te
+ast2el
+ast2er
+as4t3ese
+as4tex
+a4s2th
+as3tie
+as3til
+as3to
+as4tof
+ast3orc
+a1str
+ast3re
+as3t4ren
+ast5roll
+as3tub
+2asu
+as2ur
+a3sus
+a2sü
+aswa2s
+2asy.
+3asyl
+a1ß
+aße4
+aßen3
+2a1t
+4ata
+at1abe
+at1abr
+at2a1f
+a5t2a3g
+at1akt
+ata3l
+a3tam
+at1apf
+at2asc
+at3att
+a2t1au
+a3tau.
+at2ax
+at1än
+4atb
+at2c
+a2teb
+a3tec
+ateien6d
+at1eig
+3a2teli
+3a2temg
+at2en
+ate4na
+atens4e
+a2tep
+ate3r4al
+ate3ran
+atern2
+ater3st
+ate2ru
+4ates
+ates4sa
+a3tet
+at2eu
+a2tew
+at2ex
+at3hag
+a3t4heb
+a2th3in
+3athl
+a4thr
+at2hu
+4a3ti
+ati3ka
+ati4kab
+ati6k5erw
+a4tinf
+ation4
+at2is
+ati2sa
+ati2se
+atis3s
+3atla
+4atli
+3atm
+4atma
+4atmä
+4atmus
+ato4man
+ato4men
+3atomk
+ato2mo
+at1ort
+ato3s
+atra4t
+a2trau
+a2t3rä
+at3re
+4atri
+at3rin
+a2t3rom
+at4ron
+at3rot
+at3rü
+at2sa
+at4schn
+at2se
+at2si
+at2s1o
+at2s1p
+ats3tät
+at3ta
+3attac
+at4tad
+at4t1ak
+at4tang
+at4tar
+at4tau
+at2tä
+4atte.
+at2t3ec
+at2tei
+att2el
+at5ter
+at3thä
+4atto
+at2t3rä
+att3s4
+at3t2u
+a3tub
+atu2n
+a3tü
+atze4l
+atz3ela
+atz3elt
+at2z1er
+a3tzere
+at2z1in
+at2zo
+atz3t4
+at2z1w
+a2u
+2au.
+2au3a2
+2aub
+au2bab
+au2ban
+au2bau
+aube4n
+au2beu
+au2blä
+au2bli
+au2blo
+au2blu
+aub2si
+4auc
+aude4r3i
+au2dr
+2aue
+aue2b
+au2ere
+aue3rei
+au5erein
+auer3ö
+au5erst.
+au3ert
+aue2s
+au2fa
+auf1an
+2aufe.
+2aufeh
+4aufen.
+3aufent
+auf1er
+au4ferk
+au2feu
+auff4
+auf3ind
+1aufla
+1aufn
+2aufo
+auf3ski
+auf3t4
+2auft.
+2aug
+aug2ar
+4augeb
+4augeh
+4augel
+aug2er
+4augl
+4augr
+au3gu
+au3h
+2au1i
+au3in
+au2is
+2auj
+auk3t
+aule2s
+aul4les
+au3lü
+4aum
+au2mal
+au4m3ent
+au2m1e2r1
+aum3eri
+au2mid
+au2mil
+aum1o
+au2mor
+aum3p2
+aum3s6
+au4mun
+4aun
+au3n2a
+aun2e
+au4nei
+au2nio
+au2no
+au3nu
+a4unz
+au1o
+2aup2
+aup4ter
+2aur2
+au3ra
+au1rh
+aurü3
+au2s1ah
+ausan8ne.
+au2sau
+2ausc
+au6schmi
+1ausd
+2ause.
+au4s1eh
+2ausen
+au4s3erb
+au4s3erf
+au4s3erk
+aus3erp
+au4serw
+1ausf
+1ausg
+au2sin
+au2sis
+1ausl
+au2so
+aus1or
+au2spr
+1ausr
+3aussag
+aus4se.
+aus3s4t
+aust2a
+2auste
+au5stein
+aust2o
+3ausü
+1ausw
+1ausz
+auße2
+2aut.
+au2t1äu
+2autb
+2aute
+au4t1e2l
+au4ten4g
+au4t3erh
+2autg
+1auto
+au4trö
+2auts2
+2auu
+2auv
+auve4
+2auw
+2aux
+2auz
+au3ze
+auz2w
+2a1ü
+a1v
+av2a
+a3vang
+avas4
+ava3t2
+avener4
+2avi
+a2vr
+2a1w
+awi3e
+a1x
+ax2am
+a2xans
+ax2e
+a3xid
+a2xio
+ay1
+2a1ya
+ay2al
+ay2as
+a1yeu
+ayma4
+ays2
+aysi1
+ay3t
+ay2u
+2a1z
+a3z4a
+aza3d
+3a4zal
+az2i
+az2o3
+a3z2u
+az2zen
+az2z1in
+az2zw
+ä1a
+1ää
+ä1b
+ä2b3l
+äb2s
+ä1ce
+ä1che
+äche1e
+äche4n
+ä1chi
+äch3l
+ä2chr
+äch4s3a
+äch2s1o
+äch2sp
+äch2st
+ächt4e
+ä1chu
+ä1ck
+ä1d
+ä2da
+äde1s2
+ä2d1ia
+ä2dr
+äd2s
+2ä1e
+äe2x
+äfe4n
+äf2fl
+äfig3
+äfigs4
+äf3l
+äf3r
+äf4ro
+äf2s
+äf3t2e
+äft4s3
+ä1g
+ä2g1a
+1ä2gä
+ägd2
+äge1i
+äge2r3a
+äge3s
+ä2g3l
+äg2n
+ä2g3r
+äg4ra
+äg3s4ta
+äg3s4tr
+1ä2gy
+äh1a
+2ä3he
+ä4h1ei
+äher8gebn
+äher5t
+ä1hi
+äh1in
+ähl1a
+äh3l2e
+äh4l3e4be
+äh5ler
+2ähm
+äh3na
+äh3ne
+1ähnl
+2ähr
+äh2rel
+äh3ri
+2ähs
+2äht
+ä1hu
+äh1w
+2äi
+ä1im
+ä1is.
+ä3isch.
+ä1isk
+ä1j
+ä1k
+äka2la
+äk3l
+ä2kle
+äk4li
+ä2k3r
+ä1la
+älbe2
+äl2bl
+älk3
+älks4
+äl2l1a
+äl2p3
+äl4schl
+äl2st
+äl3te
+ä1lu
+2äma
+ä3me
+ämer2s
+ämi3en
+2äml
+ämoni3e
+2ämp
+ämp7f4e
+äm2s
+ämt2e
+2än.
+änd2e
+än2dr
+2än2e
+äne2n1
+äne1s
+2än2f5
+änft2
+2än3g2e
+änge4ra
+2än2g3l
+än2gr
+äng3se
+2ä3n2i
+än3k2e
+än2k3l
+än2kr
+änk2s
+än3n4e4
+2äns
+än4s1a
+än2s1c
+äns2e
+änte3le
+2änz
+ä1on
+äo3s2
+ä1pa
+1äpfel
+äp2pl
+äp2pr
+äp2s1c
+äp4st
+1äq
+ä2r3a4
+är4af
+är1ä
+är2b3le
+är1c
+2ärd
+ärde4s
+2äre
+ä2r1ei
+ä2r1e2l
+är2em
+äre2n
+ä2rene
+är2er
+är2es
+ärf2s
+är3ge
+ä2rind
+är1int
+är3ke
+ärk2s
+ärm3arm
+ärme1e
+ärm3ent
+ärm2s
+är1ob
+är1of
+äro2p
+ä1rö
+är3re
+ärse2
+är2seb
+är4seh
+ärs1er
+är2si
+är3spu
+är2st
+är3str
+2ärt
+ärt4e
+är2th
+ärt2s3
+ä2rü
+1ärz
+är3ze
+är2zu
+är2zw
+2ä3s2e
+äse3g
+äse1i4
+äse5ref
+äser4ei
+äse4ren
+äser2i
+äse3t
+ä3s2kr
+ä2s1p
+2äs2s1c
+äss2e
+äss5erkr
+äss5ersa
+äss3erw
+äs2sp
+äs2s3t
+ä4s3t
+äst2e
+1ästh
+äs4tr
+ä3su
+ä1ß
+äß1erk
+äß1ers
+ä2t3a2
+2ä3te
+äte3a
+äte1e
+äte1i
+äte3l2
+äte2n
+äteo2
+ät1ob
+ä2t3r
+ät2s3a
+ät2sä
+ät4schl
+ät4schr
+ät2s1i2
+äts3l
+äts1or
+ät2s1p
+ät2s3t
+ät2tei
+ätte4n
+ät4tr
+ätze3l
+ät2zw
+2äub
+äu2b3l
+äu2br
+äu1c
+äu3d
+äude3
+äuder2
+äu3el
+2ä2uf
+1äug
+äug3l
+2äul
+2äum
+äu2ma
+äum3p
+äumpf4
+äum4s5
+2ä2un
+äun2e
+äu3nu
+2äu3r2
+äure1
+2ä3us.
+2äusc
+äu4schi
+äu4schm
+äu3s2e
+äuse1i
+ä3usg
+ä3usk
+ä3usn
+äu2sp
+äus2s1c
+1äuß
+äut2e
+äu2tr
+ä1v
+1äx
+ä1z
+â1t
+á1n
+3ba.
+b3a2ba
+2babf
+2babg
+ba2bl
+ba2br
+2b1abs
+bach7t4e
+ba4ck3er
+back3s4
+ba3d2e
+bade1i
+2b1adel
+2b1adl
+2b1adm
+b1a2dr
+ba2du
+2b1af
+bah6nene
+bais2
+b2ak
+ba2ka
+ba2k1er
+ba2k1i
+bak1l
+bak3r
+ba2kra
+ba2kre
+ba2lab
+ba2l1ak
+ba3lal
+ba2lau
+ba4l3erk
+balk4a
+balke4
+bal4l3eh
+bal4l3ei
+baller6e
+bal6ler6g
+ball6erk
+bal3ti
+2b1am
+b2ama
+ba2me
+ban2a
+3b2and
+band1a
+ban4dal
+ban4dan
+ban4dar
+ban6deng
+ban2dr
+ba3n2e
+2banf
+b1ang
+ban3gl
+ban4k1a
+banker4
+ban2kl
+ban2kn
+ban2kr
+ban2ku
+2banl
+b1anna
+ban2o
+2b1ans4
+b1an3t
+2banw
+b1anz
+ba2r3ab
+ba2rad
+bar3ast
+ba2r3at
+bar3de
+ba2rei
+ba3r2en
+barer5ei
+bar3n
+b2aro
+3bar2s
+bar3sc
+b1arz
+bar3zw
+3bas
+ba3sa
+ba2sc
+bas2i
+bas4sa
+bas4sei
+bas4st
+ba2st
+ba4t3ent
+bat2o
+3bau.
+bau3b
+bauer4l
+bauer4s
+bau1fl
+bau1fr
+bau3g2
+b2auk
+bau3r
+bau1s
+bau3s2k
+baus4t
+b1a2x
+ba1yo
+3b2ä1c
+3b2äd
+2b1äh
+b2äl
+2bärz
+b2äs
+2bäug
+4b1b
+b3be
+bbe4n3
+bbens2
+bbe4p
+bb3le.
+bb3ler
+bb2lö
+b3brec
+b3bru
+bbru2c
+bb2s
+bbu1
+2b1c
+2b5d4
+bde1s
+bdome4
+1be.
+3bea
+be3an
+be3ar
+3beb
+b1ebb
+1be1c
+2becht
+2b1e2del
+bedi4
+be1e2h
+bee2l
+be1ela
+bee4rei
+be1erl
+be1ert
+be1eta
+bef4
+2b1eff
+be3g2
+begas1
+be2he.
+beh5ri
+bei3b
+2b1eier
+bei1f4
+bei4ge.
+bei3k4
+bei3l2a
+2b1eime
+be1ind
+be1inh
+bein6hal
+bein4hi
+bei3sc
+beis2e
+bei1s4t
+beit2s
+3bek
+3bel
+be3lag
+be3las
+be3lec
+4be2lek
+be2l1en
+bel3ere
+be2let
+bel3f
+be3l2i
+beli4e
+bel3la
+belle4n3
+bel3li
+be2l3om
+be2löf
+bel3sz
+bel3t
+bel4un
+1bem
+2b1emp
+2bemul
+1ben
+be5nabe
+ben3ar
+be4nas
+be4nat
+b2ene
+be3nei
+be4n3end
+be4ners
+be4ness
+ben2eu
+3beng
+be4nis
+ben3n
+5benp
+b2ens
+ben4s3pa
+ben4spr
+benst4
+3bensz
+2b1entb
+2bentd
+4benteu
+2bentf
+ben3th
+ben6thei
+bent4r
+2b1ents
+2b3entw
+ben3un
+ben3z2
+be1o
+2b1epi
+be1ra
+be2r3am
+be2ran
+ber3a2s
+berb2
+ber3d
+b4ere
+be2re2b
+ber2ec
+bere3ck
+ber4ei.
+be4r3eiw
+be4rene
+ber4erg
+ber4erw
+bere4sc
+berf4
+3berg.
+ber4g3af
+ber4gal
+berg3as
+ber4hab
+ber4in.
+be5r6inne
+berin4s
+ber3iss
+ber3kr
+ber3n2a
+b1ernt
+be2rö
+3bers.
+ber3st4a
+bert2a
+bert2e
+bert2i
+b4eru
+ber3ze
+ber2zö
+3b2e1s
+be3s2a
+bes4abb
+be4sap
+be4sar
+be2s1er
+be2s1id
+be3s4lo
+bes2po
+bes3sa
+bess4e
+b3esst.
+bes3sz
+be4stab
+beste2
+be6stein
+bester4
+bes6terh
+best2i
+bes3tin
+be4stol
+bes4to4r
+bes3tos
+best4r
+be4s5trä
+be4s3tur
+be3s4ze
+3bet
+be3tam
+bet2sp
+be1un
+be1ur
+3bev
+3b2ew
+2b3e2x
+3b2ez
+2b5f4
+bfal2
+bfal3t
+2b1g4
+b5ga
+bge3
+bgel2e
+bge5n
+bges4
+2b1h2
+b5hä
+1bi
+3bib2
+bibe2
+biber1
+bi2c
+bien3s
+bieres4
+bie2s
+biet2s
+3bietu
+bik2a
+bi2ke.
+bi2kes
+bi2k3re
+3bil
+bi3la
+bil2an
+bi4l3ans
+bi4lau
+bil4deb
+bi2lei
+4billu
+bi2lu
+2bimp
+2b1inb
+bin2e
+b1inf
+2b1inh
+bi2nok
+2b1int
+2b1inv
+bi2o3
+biri1
+3bis
+b1iso
+bi2sp
+bis2s1c
+bi2st4
+bi3sta
+3b2it.
+b2ita
+bit2an
+b2ite
+bi3ti
+bi2tu
+bi3z2
+4b1j
+bjek4to
+2b5k4
+bl4
+2bl.
+bla3b4
+2b1lac
+b3lad
+b2lanc
+b3late
+b2latt
+b2lau.
+b3laus4
+2b3law
+2b1län
+b2läse
+3blät
+b2le
+3ble2a
+b3leb
+3blec
+b3leg
+2bleh
+b4lei.
+2b3leid
+2bleih
+b3lein
+blei3sc
+2bleit
+ble3l
+2b3lenk
+b3lese
+2blesu
+ble3s4z
+b4let
+b3leu
+2blich
+3blick
+b2lie
+2blief
+2blig
+bling4
+b2lis
+2blis.
+b2lit
+b3lite
+3blitz
+b2lo
+3b4loc
+b3los
+3b4lum
+2blun
+b2lus
+3blut
+blu4tem
+blut1o
+3blü
+2b1m
+4b5n2
+bnas4
+bni2
+bnis1
+bo4a
+bo5as
+b1o2b
+bo3ben
+bob3r
+bo2c
+bo3ch2
+bo3d2
+boe1
+bo2e3i
+2b1of
+bo3fe
+boh3re
+boh4rei
+boh2u
+bo1is
+bo2lan
+bo2lau
+bol5le
+3bon.
+bon2an
+bon2da
+bon2d1e
+bo2ne
+2b1onk
+3bons
+boo2l
+boo2ti
+b1op
+3bor.
+bo1r2an
+bo2r3as
+bo4rä
+bor2da
+bor2d3r
+bo2rei
+bo4rig
+bor2s
+b1ort
+bor4ter
+bor6t5rat
+bo4ruh
+bo2sc
+bo3se
+bo4s3p
+3bot
+bote3n4e
+bo3th
+bot2st
+bot3t
+3b2ox
+bo2xo
+bö2b3
+2böf
+2b1öl
+bölk3
+2b1p4
+bpa2g
+2b1q
+b2r4
+2br.
+b4ra.
+2b3rad
+2b4rah
+b4ra3k
+brast4
+2b3rat.
+bra4t3er4
+2b3ratg
+3brä
+4bräd
+brä4u
+2bre.
+6b5rechte
+2b3red
+2b3ref
+2breg
+b3reif
+2brek
+breli1
+3b4rem
+2b3rent
+2breo
+2b3rep
+b4rer
+bret6t5en
+bri2da
+brie4fa
+2b3riem
+b4rien
+bri2er
+b3ries
+2brigk
+b4rina
+2b3rind
+b4rio
+b4risc
+b3ritt
+2b3roh
+2b3rol
+b4ron
+2b3rost
+bro4tr
+brot3t4
+2b3rou
+3b4rö
+b4ruc
+2bruf
+b4rum
+2b3rund
+brus4
+brust3
+bru2th
+3brü
+4b3rüb
+2b1s
+b2s1ad
+bs2am
+bs3amb
+b4s3amt
+bsat2
+bsau2r
+b4s3är
+b3s2äu
+b3sc
+bsch2
+b4schan
+b6schef
+bs2chi
+b4sco
+bs2cu
+b3se.
+bse2b
+b3sel.
+bse2n1
+b3sen.
+b2s1ent
+bs1erf
+bs1erg
+bs3e4r3in
+bs1erk
+bs1ers
+b3s2es
+b3set
+b2sim
+bsi4t
+b4ski
+bs2ku
+b4sl
+b2s1of
+b3s2oh
+b4sop
+bso2r
+b2sö
+b3s2pi
+bs2pl
+bs2pu
+bss2
+bs2t
+bst1a2b
+bst1ak
+bst3ank
+bs4t1as
+b3stä
+bs3tät
+bst1er
+bst3h
+b3stic
+bst3ink
+b2stip
+b3sto
+b4stob
+b4stod
+bs4tol
+b4stor
+b3stö
+b4strac
+b2s3trä
+b4s3treu
+bs4tri
+bst3ro
+b3stü
+b4stüb
+b2s1un
+bs2zep
+bs2zi
+4b1t
+bta2s
+btast3r
+b5te
+b2t3h
+b3ti
+bti2s
+bt4r
+btran2
+bts2
+b3tü1
+buche4
+bu4chec
+bucher4
+bu6ch5ers
+bu2chi
+buch3sp
+bu2e3
+bu2f
+bul2l3a
+2bumf
+2b3umk
+2buml
+2b3umr
+bun4d3er
+bunde4s
+b1une
+bung4
+b3un3gn
+2b1unh
+bur1c
+b2urg
+burg1a
+bur4gan
+bur4gar
+bur4gin
+bur2gr
+bu3r2i
+2burn
+b3ursa
+burts3
+bu2sa
+bu2sc
+bus3cha
+bu3sche
+bu6schei
+busch3w
+bu2sin
+bu2s1p
+bu2su
+bus1un
+2büb
+bü1c
+bügel3e
+2b1v
+4b5w
+3b2y1
+by3p2
+bys4
+2b1z4
+b5ze
+bzeit1
+1c2a
+cab4
+ca3bl
+ca2c
+ca2e3
+ca3g2
+ca1h
+cal2a
+cal2f3
+cal3t
+3cam
+2can
+cana3
+ca2pe
+car3b
+car5n
+carri1
+car2s
+ca3s2a3
+cas5to
+ca3t2h
+ca1y2
+cä3
+cäs2
+c1b
+2cc
+c1ce
+c1ch2
+cchi1
+c2d2
+c3do
+2cec
+1ced
+ce2dr
+ce1er
+2cef
+ce1i
+ce3in
+2cek
+3cels
+cen3a
+ce3nu
+ceo2
+1ce1r
+cere1
+cere3u
+ce3r2i
+ce3s4h
+1cet
+ceta2
+cet1am
+ce1u
+1cé
+c1f
+c1g
+c2h
+4ch.
+2chab
+ch3a2b3i
+cha2ck
+2chaf
+2ch1a2g
+2ch1ak
+chal6l5ei
+3chanc
+chan3f
+ch1ang
+4chanl
+4chanz
+3chao
+4char.
+3chara
+3chard
+3charta
+cha2sc
+chasi1
+1chato
+2chatt
+ch5austr
+chau3t
+ch1äh
+ch1ärm
+ch1äs
+1châ
+2chb
+2chc
+2chd
+che3b4
+ch3e4ben
+ch3echt
+ch1edi
+1chef
+3chef.
+che4fer
+3chefs
+2cheh
+2chei
+ch1eim
+4chelem
+che4ler
+3chemi
+2chemp
+che4neb
+che2no
+4chents
+4chentw
+cher3a
+4ch3erbs
+6chergeb
+4cherke
+cher6zie
+ch3es4s
+ches5t
+2ch1e4ta
+2ch3e4x
+1ché
+2chf
+2chg
+2chh
+1chia
+4chic
+chi3na
+4chind
+3chines
+2chinf
+2chinh
+2ch1ins
+2ch1int
+2ch1inv
+1chip.
+1chiru
+2chiso
+2chj
+2chk
+2chl4
+ch2le
+chle2i
+ch2lu
+4ch2m
+2chn4
+chner8ei.
+c4ho
+2chob
+cho2f
+ch1off
+chof4s
+ch1oh
+cho3l2a
+ch1orc
+ch1ori
+ch2os
+ch3öl
+3chör
+2chp
+ch2r4
+2chra
+ch3rad
+2chre
+ch3rh
+4chrit
+3chromo
+3chron
+4chs
+ch2spo
+ch4stal
+2cht
+ch2tru
+2chuf
+2chuh
+2chum
+2ch1unf
+2chunm
+2chunt
+2chur
+ch1urs
+2chut
+chut4t
+4chü
+2chv
+4chw
+1chy
+2chz
+ci2ak
+ci1c
+ci1es
+cill2
+ci2na2
+c1int
+ci2s1
+1cit
+c1j
+c2k
+4ck.
+ck1a
+1cka.
+2cka2b
+2cka2c
+ck2ad
+1ck2ag
+2ckal
+cka2m
+2ckan
+2ckap
+cka4r1
+1ckat
+ck1ä
+2ckb
+2ckc
+2ckd
+1cke
+2ckef
+4ckeff
+2ck1eh
+4ck1ei
+2ckemp
+cke4na
+6cken6sem
+4ckentf
+4ckentw
+cke2ra
+ck2ere
+6ckergeb
+4ck3er4hö
+ckerk4
+ck2ern
+2cke2ro
+ck1err
+6ckerzeu
+4ckese
+4ckex
+2ckf
+2ckg
+2ckh
+1cki
+2ck1id
+ck1in
+3ck4is
+2ckk
+2ck3l
+2ckm
+2ck3n
+2ck1o2
+ck3ot
+ck3ö2
+2ckp
+2ck3r
+4cks
+cks2al
+ck3sc
+ck4spen
+cks4tri
+2ckt
+ck3te
+ckt2i
+1cku
+2ck1uh
+2ck1um3
+2ckunt
+2ck1up
+2ckü
+2ckv
+2ckw
+1cky
+2ckz
+c2l2
+cle4a
+clet4
+clin2g
+cli2p1
+clip3a
+clo1
+clo2ck
+1clu
+clu4b
+c2m2
+c3me
+c3mu
+1c2o
+3coa
+co2c
+co3ch
+3co2d2
+co4de.
+co3di
+cof3f2
+coi4
+co1it
+co2ke
+co3la3
+co2leu
+co5l2o
+3com
+com4te.
+comtes4
+con2ne
+co2pe
+co1ra
+cor2da
+co4re
+cor3t
+cos3t
+co4te
+coti2
+cô4
+2cp
+2c1q
+1c2r2
+c3rä
+3cre2
+4cree
+cre4mes
+cros4
+cry2
+2cs
+cs2a
+cs4f
+c2si
+c1s2ti
+c1s4tr
+4c1t
+c3ti4
+ctio2
+ctur6
+1c2u
+2cua
+cu2e
+cu2p3
+cussi4
+c1w
+1cy
+c1z
+3da.
+da1a
+2d1ab
+d3a2bak
+d2abä
+d2abe
+d3a2ben
+d3a2bi
+d3a2bo
+dab4ra
+da2bri
+da3brie
+d2ab4rü
+d1ac
+d2ac.
+dach3a
+da2cho
+4d3achse
+d1ad
+da2de
+dad4r
+d1af
+2daff
+dafo4n
+d1ag
+dagi4
+dag2o
+dah3l
+da1h2o
+dail5
+da1in
+2d1air
+da1is
+da2kro
+dal2a
+2d1a2lar
+dal3b2
+4d1all
+da3lö
+2d1alp
+d1alt2
+2dalte
+da1lü
+3dam
+d1amma
+4d1ammä
+damo3
+d2amp
+damp7f8erf
+4d1amt
+3d2an.
+d1ana
+da2nan
+da4nat
+2danb
+dan4ce.
+d1and2
+2danda
+d2andy
+3dane
+4d3anei
+2danf
+d1ang
+2danh
+d2ank
+dan2kl
+dan2k1o
+dan2kr
+2danna
+d1a2no
+2d1ans
+2danw
+d2anz.
+2danzi
+2danzü
+2d1ap
+d2aph
+da2por
+4dapp
+4daq
+da2r1a
+2darb2
+2d3arc
+dar2da
+dar2d1e
+dare2
+daren1
+dar3g
+3darl
+dar2m1a
+dar2m1i
+dar4mu
+da2r3o
+3dars
+2d1art
+dar2th
+dar2tr
+da2ru
+d1arz
+da1s2
+da3sh
+d1as3p
+das4t
+d1asy
+da3t2e2
+date4n
+4d3atl
+4datm
+da2tom
+dat2st
+2d3atta
+3daub
+2daud
+dau3e2
+dauer3e
+2d3au2f
+2d3aug
+2dauk
+da3unt
+2d1aus3
+3daw
+d1ax
+3däc
+2d1äg
+2d1äh
+2d1ämt
+2d1änd
+2d1äng
+2d1äp
+2däq
+2därz
+2d1ä2u
+dä3us
+2däx
+2d1b4
+dbe2e
+dbu2c
+2dc
+d3ch
+4d1d2
+d3da
+d3dä
+d3de
+d3dh
+d5do
+1de
+dea2d
+de3alo
+de3ar
+de3a2t
+d2eb4
+3debü
+de1c
+de4ca.
+de2cka
+deco3
+de2del
+de2dit
+2de3e4
+de2fa.
+2d1eff
+def4l
+deg2
+de3gl
+deh2a
+dehe2
+3dehn
+2d1ehr
+d1ei
+3d2eic
+2deid
+de3i4den
+4deie
+2deig
+de3il
+3d2eim
+4deime
+4deinb
+dein2d
+de3inse
+dein6sta
+4deinw
+2deise
+d4e1ism
+dei2sp
+2dekz
+de2l1ac
+del4ade
+de3lak
+de4l3aug
+del3änd
+del3b2
+del1ec
+delei4g
+de3lein
+2delek
+2delem
+de2len
+deler2
+deler4r
+2delf.
+2delfm
+3delik
+del2la
+dell3au
+del2l1ä
+delle2
+del4l3eb
+del4lei
+del4l3er
+de2l1ob
+del2se
+del2so
+del2s1p
+del3t4
+dem2ar
+2d1emb
+dement4
+de6mentg
+dem5ents
+de3min
+2d1emot
+2d1emp
+d2en.
+den2am
+dend2
+de2n1e2d
+de4n3end
+4denerg
+den2es
+4d3en4ge.
+de2ni
+denk3li
+denko4
+de2nos
+dens4am
+den6scho
+4den4sem
+den6sere
+den6s5tau
+2dentd
+4dentf
+2d1entg
+den3th
+2dentn
+2dentw
+2dentz
+de3nu
+den6zers
+de2ob
+2deol
+de1on
+depi2
+dep4l
+2depoc
+dep5t
+d4er.
+dera2b
+der3af
+dera2n
+de3rand
+de2r3ap
+de1ra4s
+de4r3asi
+der2bl
+4d1erbs
+2derdb
+de2re2b
+de4reck
+de4r3ei4s
+d4eren
+de4r3end
+de3r4erb
+de3r4erf
+derer3n
+der3ero
+derer4t
+derer6ze
+de2r1eu
+derf4
+d4erfl
+d2erhü
+derin4f
+de6rinnu
+derin8teg
+der3k2
+4derklä
+d2erm
+de1ro
+de2rop
+derö2
+der3r
+derst2
+der3sta
+dert7ende.
+dert4ra
+6dertrag
+der8trage
+3de3ru
+de4ruh
+de4rum
+2d1erz.
+2d1erzv
+d2es.
+de2sa
+des1ah
+de4sam
+de2s1än
+de2seb
+de4se2h
+de2sei
+2d1esel
+des3elt
+de3sem
+des4end
+desen3e
+de2set
+de4sin
+des1o
+de2sor
+de2s1p
+de3spe
+dess2
+dess4t
+dest5alt
+de3stel
+des6temp
+de5stern
+des4tex
+de1sto
+dest5rat
+de3stri
+des4tum
+de2su
+des1un
+3desw
+det2
+de3ta
+deten4t
+de2thi
+2d3etw
+2d1eul
+de1un
+de1url
+de3us
+2d1e2vid
+devil2
+de2xer
+de2xis
+2d1f6
+2d1g2
+dgas3tr
+d2ge.
+dge3r
+dger2e
+dge3s
+d2gesh
+dge2t3a
+dge4t1e
+2d1h2
+dha1s4
+4dho
+d3hu
+1di
+di2a
+di3ar
+dia3s4
+diat4
+di4ath
+3dic
+di1ce
+di3chl
+dicht6er
+4d3i2co
+d2ida
+2d1ide
+2didy
+di2e
+di3e4d
+di3enb
+die4neb
+diener6l
+di3e2ni
+dienst5r
+dien3z
+di3ers.
+dies1c
+di3e2th
+3dif
+3dig
+dige2s
+dig4n
+dik2a
+dil2s3
+2d1imb
+2dimp
+din4a
+2d1ind
+di3n2e
+2d1inf
+3ding
+2d1inh
+2d1in1it
+2d1inj
+2d1ins
+2d3int
+2d1inv
+di2o3b
+dio4n3i
+dion3s4
+di3ora
+dio5s2
+di2osk
+di1p4
+di3pt
+d1i2ra
+di4re.
+di2ren
+di2rin
+di2ris
+2d1irl
+2d1irr
+di2s1a2
+2diso
+di2sp
+di3s4per
+2d1isr
+dist2
+di1s4ta
+di2s3te
+di4stra
+di4sz
+di2ta
+dite1c
+di4t3erl
+di4t3erm
+di4t3ers
+di1the
+di2tin
+di2tob
+di4t3r
+dit3s
+di2t1u
+di5v2
+di3z2
+2d1j
+2d1k4
+4d1l2
+d3la
+dla3g
+dlap4
+d3le
+dle2ra
+dli4f
+dl3m
+dl3s
+2d3m2
+4d3n2
+d5ne
+dni2
+dnis1
+do5a
+d1ob
+3d2oba
+d1of
+do2fe
+2d1oh
+doll2
+d3o2ly
+do2mal
+do2mar
+dom2e
+domen1
+do4ming
+do2mu
+do5n2a
+do3nan
+donau1
+doni1e
+2dope
+2d1opf
+do1r4a
+2d1orc
+2d1ord
+dor2f1a
+dor2fä
+dor2f1i
+dor2fl
+dor2fo
+dor2fr
+dor2f3u
+2d1org
+dori1
+d2orn
+2dort
+dor4ter
+dor4tr
+d2os.
+dose4
+do5s2k
+2dosm
+dos3s
+dost1
+dos4t3a
+doste4c
+dos4tel
+dos6teng
+dos4tes
+dos4ti
+dos4tr
+do4s2tu
+do3ta
+do2t3o
+do2tre
+do3un
+dow2s
+dox2
+d1ö
+dö2d
+dö2f
+4döl1
+döll2
+d2ön
+3d2ör
+dö2s1c
+2d3p2
+dpass3
+dpo2st
+2d1q
+d2r4
+3d4ra.
+3d4rab
+2d3rad
+2drahm
+2d3rak
+3d4ral
+d3ramp
+d3rand
+dran3k
+2d3rast
+2draub
+2d3rauc
+d4rauf
+2draum
+2draup
+2dräd
+d4räh
+2d3rät
+2d3räu
+4dre.
+2d3rea
+d4rea.
+d4reas
+3d4reck
+2d3ref
+2dreg
+3d4reh
+dre2ha
+2d3reic
+3d4reie
+d4reiv
+d4rej
+2drek
+dreli1
+4drem
+4d3ren
+4d3rep
+4d3rer
+4dres.
+d4resc
+2drese
+dres6sei
+d4rew
+2d3rez
+2d3rh
+d3ri
+d4ri.
+3d4ria
+d4rib
+2d5ric
+d4rid
+d4rie
+d5rieg
+3drif
+4driff
+d4rift
+d4rik
+d4ril
+d4rin.
+2d5rind
+2drip
+3d4risc
+2drisi
+2driss
+3d4rit
+4dritu
+2d3rob
+d3roc
+d3rod
+d4rog
+2drohr
+3d4rohu
+d4roi
+2d3roll
+2d3rose
+d4ross
+2d3rost
+2d3rot
+2d3rou
+2d3rov
+d3row
+drö2sc
+d5rub
+3d4ruc
+2d3rud
+2d3ruh
+4d5rut
+drü1b
+drü5cke
+3d4rüs
+2d1s
+ds3ab
+d2s1alk
+d4s1amt
+d2san
+ds3ane
+ds3assi
+dsau2
+d2saut
+ds1än
+ds2äu
+4dsb
+d4schef
+d4schin
+dsch4r
+d3s2co
+d2scr
+d2s1e2b
+dse2e
+d2s1ef
+ds1eh
+d4sehe
+ds4eign
+d2sein
+d2s1emb
+dsen3er
+d2s1eng
+d2s1ent
+d2s1erf
+d2serh
+d2s1erk
+ds1err
+d2s1ers
+d2s1ert
+d2serz
+dse4t
+d2s1eta
+d2s1ev
+d2sex
+d3sha2
+ds2hak
+d4shal
+d3sho
+d4shor
+d2sid
+d2s1im
+d3s2inf
+d3s2kal
+d3s2kel
+4dsl
+d4sli
+d3soh
+d2sop
+dso2r
+ds1ori
+d2sö
+ds3part
+ds1pas
+d2s1pat
+d2spä
+d2s1pec
+d4speri
+d2s3ph
+d3s2pi
+ds2por
+d6sporto
+d3spri
+d2spro
+ds2pu
+dss4
+dst2
+d4stag
+d2stas
+ds3tauf
+d4s3täti
+d2ste
+d3stec
+d3stei
+d4steil
+d5stell
+d4stem
+d4sten
+d3s4tern
+ds2ti
+ds4til
+ds4tip
+d4stoch
+ds4tol
+d5strei
+ds4tri
+d3s4tro
+ds2tur
+ds1ums
+d2sun
+ds2zen
+2d1t
+dta2be
+d3t2ac
+dtach3
+dta2d
+dt2ag
+dta2n
+d3t2as
+dt2ax
+d5tea
+d2th
+d4thei
+dt3hi
+dt3ho
+dt4hy
+d3to2
+d4to4b
+dt2op
+d3tö
+dt3r
+dtran2
+dts2
+dt3sa
+dt5st
+dtt4
+dt2un
+d3t2ur
+d3tü
+d3ty
+1du
+du1alv
+du1ar
+dub3l
+du2bli
+du1ce
+du2f
+2d1ufe
+duf4ter
+duf4to
+duf2tr
+2d1uh
+du1i
+du2kr
+du4l3art
+2d1umb
+2dumd
+2d1u2m1e
+2dumf
+2dumg
+4d3umk
+2duml
+d2ump
+2dumr
+2d1ums
+d2ums.
+2d1umv
+du2n
+2d3un3d
+dund2a
+dun4de
+2d1unf
+dung4
+2d1ungl
+2d1uni
+dun3ke
+dun2kl
+2dunr
+dun2s
+2dunsi
+dunst3r
+2dunt
+2dunw
+2d3unz
+du1os
+dur2
+dur3au
+durch3
+2d1urk
+2d1url
+2d1urn
+2d1ursa
+2d1ur3t
+du4schn
+du4schr
+du4sch3w
+2düb
+d3über
+düns3
+2d1v2
+4d1w
+dwa2
+dwa4r
+dwes2
+dwest1
+1d2y
+4dyl
+3dyn
+dy2sp
+4d3z2
+2e1a
+e3ab
+ea2be
+e4abi
+ea2b3l
+ea2bo
+ea4br
+ea2c
+eadli4
+ea2dr
+ea2g
+ea3ga4
+ea3g4l
+eakt2
+e2akta
+e3akto
+ea2la
+e3alei
+e4alem
+ea4l3ent
+ealer2
+e3a4lerg
+ealer4t
+e3alex
+e3a2lin
+e2alo
+e2alti2
+eal3tr
+ea2l3u2
+eam3
+e2am4e
+eam1o
+eamt2
+ea4na
+ean3a2r
+ea4nä
+e3anf
+e2ano
+e3ar.
+ea2ra
+e2are
+e4are.
+ea2r1ei
+ea4rene
+e4arer
+e4ares
+ea2ro
+e3arz
+e3a2sc
+easin4
+ea4sp
+eas3s
+eate2
+eater1
+e3ath
+eat3s2
+e3at5t4
+eatu3
+e3aue
+e3auf
+eau2fe
+e4aufo
+eau3g
+eau3n
+e2av
+e3ä2
+e1b
+2eba
+e3bak
+eba2p
+e3bän
+2ebea
+2ebec
+2ebed
+ebe1er
+2ebeg
+eb2el
+ebe4ler
+ebe2lo
+ebenen3
+2eber
+ebe4ras
+ebert4
+4ebes
+ebese2
+ebe4s3eh
+2ebet
+ebet4s
+2ebew
+2ebh
+2ebi
+2ebl
+e3blä
+eb3le.
+eb3ler
+eb4leu
+e3blie
+eb3lo
+eb2lö
+2ebo
+e2bob
+ebot2
+ebö2s
+2ebr
+eb4rea
+2eb2s1
+eb4sche
+ebse2
+ebs3in
+ebs3pa
+ebs3tau
+eb4stät
+ebs3tem
+ebs3t4h
+ebs3ti
+eb3str
+2ebu
+e2bunt
+ebu2t1
+eby4t
+2e3ca
+2e3ce
+ech1am
+ech1ä
+2e1che
+ech1ei
+ech2en1
+e6ch5erzi
+e1chi
+ech3l
+ech3m
+ech3n
+e2cho.
+ech1ob
+ech3ö2
+ech3r
+ech4ri
+ech5sel
+ech3ser
+echst5re
+ech3t4ei
+ech6terh
+echter8ha
+e1chu
+ech1w
+e1ci
+eci4a
+ec4k
+ecke4n1
+e4ckerr
+eck4sta
+2eckt
+3eckty
+2e1cl
+2eco
+e3cr
+ec1s
+2ect
+e1d
+ed2a
+ed2dr
+ed2e
+ede2al
+ede3n4er
+edens1
+eden4se
+eden4sp
+edeo2
+ede2r
+eder3a
+ede4ran
+eder3t2
+edes2t
+ed2i
+e3di.
+edi3an
+2edip
+edi6teng
+e3d2o
+ed2ö
+e3drei
+ed2sal
+ed4seh
+ed2s1es
+ed2si
+ed2s1o
+ed2s1p
+ed2s3tr
+ed2s1u
+edu2s
+e3dy1
+edys4
+2ee
+ee3a4
+eeb2l
+ee1c
+ee4ce
+ee2cho
+e1e2ck
+e2ed
+eede3
+eede1s
+eed3s2
+ee3e2
+e1eff
+eef4l
+eeg4
+e1ei
+ee3ing
+eein4se
+eeis3s
+eel2e
+e3e2lek
+eele4n
+eel2ö
+e2e3m2a
+ee3mä
+e1emb
+e1emp
+e1en
+eena2g
+e2e3nä
+e2enc
+e2e3ne
+een1er
+e2eno
+een3s
+een2z
+ee3o
+e2ep
+ee3po
+eer3as
+e1erbt
+e1erd
+ee3re
+eer1ei
+ee4r3en4g
+eer2e2s
+eer3k
+ee1ro
+ee1rö2
+eer2ös
+eerst4
+eert2
+ee3r2un
+e1erz
+e2e1s2
+ee3sh
+ees3k
+ee3sp
+ee3s4t
+e2et.
+eet2a
+ee2tat
+ee2th
+eet2i
+eet4r
+ee2tu
+ee1u2
+e2ew
+eewa4r
+e1e2x
+e1f
+e2f1ad
+ef1ana
+ef1ar
+e2farc
+e2fat
+2efä
+e2fäu
+2efe
+e2f1e2b
+e3fef
+efe4l3ei
+ef1em
+e2femi
+efe2n1
+3e2f1ene
+e2fent
+efer5f
+efeuil4
+3effek
+1effi
+ef2fl
+2efi
+ef1id
+e2f1ins
+efi2s
+2efl
+ef4le
+e3f4lu
+e3flü
+2e3f2o
+2efr
+ef4reih
+ef3rol
+ef3rom
+ef4ru
+ef4rü
+efs2
+ef3so
+ef3sp
+ef2tan
+ef2tei
+2efu
+e2fum
+2efü
+e1g
+eg1a2m
+eg2anz
+egd4
+e3ge
+ege4l3au
+ege8l7ei8er
+ege4ler
+ege2lo
+eg2en
+ege4n1a
+ege6nero
+ege2ra
+ege4s5tr
+ege1u
+2egi
+2egl
+e2glo
+e2glu
+e2gn
+eg3nä
+eg3ni
+ego1p
+eg4rö
+eg4run
+egs2ag
+eg4sal
+eg4s3an
+egsau3g
+eg3se
+eg4sei
+egs2e3l
+eg4sin
+eg4sk
+eg4so
+egs2pe
+egst2
+eg4sto
+eg2th
+egung4
+egus3
+2e1ha
+eh1ach
+e3h2ah
+eh2al
+ehalt4s
+e3hand
+eh1arm
+e2harz
+e3haut
+e1hä
+e1he
+eh1eff
+eh1ein
+e3helf
+eh1elt
+e4hense
+e4h3ente
+ehen4tr
+1e2hep
+2eher
+ehe1ra
+e2h1erf
+e2h1er2l
+ehe3str
+2e1hi
+eh3im
+eh1lam
+eh2l3au
+eh1lä
+ehl3ein
+eh4lent
+eh5l2er
+ehlo2
+ehl1or
+ehl2se
+ehls2t
+2ehm
+eh2mab
+eh4mant
+eh3mu
+2ehn
+eh3na
+eh3no
+2e1ho
+eho2f
+eho2l
+eh3oly
+ehö4rer
+eh2r1a2
+ehr1ä
+ehr1e2c
+eh2rei
+eh2rel
+ehr6erle
+ehr4ern
+ehre3s
+eh4rin
+ehr1ob
+eh1roc
+ehr1of
+eh1rö
+ehs2
+eh3sh
+ehst2
+eh1ste
+2eht2
+eh3ta
+eht4r
+2e1hu
+eh1unf
+e2huni
+e3hur
+e1hü
+eh3üb
+eh1w
+e1hy
+2ei3a2
+ei2bar
+ei2bli
+ei4blu
+eibu4t
+ei4b3ute
+e4ic
+ei1ce
+ei2cho
+e2id
+ei2d1a
+ei3de
+eid4ein
+ei4deis
+eid5erre
+2eidn
+ei3do
+ei4ds
+ei1e
+eie2b
+ei3e2l
+eie2m
+4ei3e2n
+eienge4
+eien3s
+eie2t
+4eif.
+ei1flo
+1eifr
+2eig.
+2eiga
+eig2ar
+2eigä
+2eigeb
+2eigeh
+4eigeno
+5eigensc
+2eig2er
+2eiges
+2eigew
+2eigi
+ei3gl
+ei4glo
+1ei2g3n
+ei4g3rat
+2eigre
+2eigrö
+2eigru
+2eigrü
+2eigs
+2eigt
+2eigu
+4eih
+ei2hum
+ei2kak
+eik4am
+eik2ar
+eik2i
+eik2l
+ei3k4la
+ei3klä
+e2il
+2eil.
+ei2lam
+eila2n
+eil3ane
+ei4lant
+ei4lanz
+ei2lar
+2eilb
+eil3d4
+ei4lein
+eile2n1
+ei2let
+eil3f4
+eilm2
+ei2lob
+eil2ö
+2eim.
+ei2mab
+ei2m1ag
+eim3all
+eim3alp
+ei2m1or
+2eimp
+eim2p4l
+eim3sa
+ei2mur
+e4i2n1a
+ei4nac
+eina2d
+ei4n3an
+ei4na4s
+ei4n3at
+ei4n3ä
+ein6derk
+ein3ebe
+ei2nel
+ei4n3en4g
+ei6nen6se
+ein5erbe
+ei4nerf
+ei4nerk
+einer6sc
+ei2neu
+ein4fiz
+2einfo
+ein4fo.
+ein4fos
+ein3g2
+3einger
+e4ingr
+e2inhä
+ei2n3ie
+e1init
+ein3k4
+ein6karn
+3einkä
+e2inl
+ein3n2
+ein4nen
+ei2n1o2
+3einric
+e4insa
+3einsat
+e2insc
+5einschä
+ein6stal
+ein6terv
+ein4tol
+3eintö
+1einu
+ei3o2
+ei1p
+eip2f
+2eir
+eir2c
+ei3re
+e1irr
+e4is.
+ei2sa
+ei3sas
+ei6schwu
+ei4serg
+ei4s3erl
+ei6s5erst
+ei4s3erw
+1eisho
+ei3s2ky
+eis2pe
+e2iss
+eisser6s
+ei1sto
+eis4tol
+ei2sum
+ei2sur
+1eiswo
+e2it
+ei2t1a2b
+ei2tal
+ei2tan
+ei2tap
+ei2tar
+ei4tat
+2eitä
+ei2tän
+eite4ra
+ei4tess
+ei2t3h
+ei2tin
+ei2tor
+ei4trau
+ei4tro
+eitsa4g
+eitt4
+4eitu
+ei4t1um
+ei2t1ur
+eit3z2
+eiv2
+eive4
+ei2zar
+eiz1in
+2e3j
+e1k
+e3k2a
+2ekä
+1ekd
+ek2e
+e3ke.
+e3ke4n
+e3kes
+e3key
+e3k2l
+ek4n
+e3k2o
+ekor4da
+2e3kr
+ek4s1p
+2ekt
+ek2tan
+ek5t6ante
+ek2t3at
+ek2tä
+ek2te2l
+ekt3erf
+ekt3erk
+ek4t3er4z
+ekt2o
+ek2t3o4b
+2e3ku
+ekur2a
+e3k2w
+1ekz
+e1la
+ela2br
+el2abt
+el3abu
+ela2ck
+el3ader
+el1af
+2elai
+e2l1ak
+el1a2m
+el2a3mi
+e3lamp
+el1ana
+e4landa
+e2l3a2ne
+e2lanm
+e4l1ans
+e2l1ant
+e4lanw
+e2l1anz
+2elao
+e2l1ap
+e2l1ar
+ela2re
+el3a2ri
+el3arr
+ela2s
+el1a4si
+el1asp
+ela3su
+2elat
+el3aufw
+2e1lä
+2eld
+el4d3erf
+elder4p
+elder4s
+eld5erst
+el3des
+el3dri
+eld3s2
+4e3le.
+e3lea
+elea2r
+ele2c
+el3echt
+4eleh
+el3ehe.
+2elei
+e6l5ei6ern
+e2l1ein
+e3leine
+1elek
+e2l1el
+1e2lem
+2e3lem.
+e3lema
+ele2mi
+2el1emp
+2e3len.
+elen1e
+elen4k3l
+e4lense
+e2l1ent
+e3lep
+2eler
+e3ler.
+eler2a
+el1erd
+e6lereig
+el1erf
+e4ler4fa
+e4lerfi
+e2lerg
+el1erh
+el1erk
+e2l1erl
+e4l3ernä
+eler2ö
+e2l1err
+el1eru
+el1erw
+eles2
+e2l1ess
+e2l1e4ta
+ele2ti
+elet4ta
+el1evo
+el1ex
+e3lex.
+1elf.
+elf2er
+1elfm
+1elft
+elgi5er.
+elgi5ers
+el3g2l
+eli4are
+e2l1id
+2e3lie
+eli3ef.
+2elig
+e2lim
+elin3a
+eli3no
+el1ita
+2elk
+elk3s2c
+el4larb
+el4lart
+el3lär
+el5le.
+ell3ein
+ell3eis
+el4lel
+el5lend
+ellenen5
+ellen5s
+ell2er
+el3les
+el2lim
+1ellip
+el2lor
+ell2ö
+ell3sp
+elm2e
+elm3ein
+2eln
+2elo
+e2l3oa
+el1obe
+e2lof
+e2lol
+e2lonk
+e2l1or
+e3lore
+elo2ri
+e3lot
+e3l2ov
+2elö
+elö2s
+el3p4
+el4s5ein
+els2ph
+el5stern
+el2sum
+el4tans
+elte4m
+el5ten.
+el4t3ent
+elter4b
+elter4f
+elter6le
+3elter4n
+elter6sc
+elte2s
+el4tesc
+el3the
+2e1lu
+el1uf
+e2l1um
+el1ur
+el3use
+elu2t
+el3uto
+e1lü
+2ely
+e2lya
+el3z2ac
+el2zar
+el4zene
+el2zwa
+2elzy
+e1m
+e2m3a2b
+em1alk
+e2manf
+e2m1ano
+e2m1ans
+em1app
+e4m1a4s3p
+em1aus
+2emä
+em2äh
+e3mäs
+1emba
+1embo
+3embry
+em2dä
+emd1r
+em2dra
+2eme
+e2m1e2b
+e2mef
+e2mele
+e3m2en
+emen6gel
+emen3ta
+emen4t3h
+e2m1erl
+em1erw
+e4mesu
+3e2meti
+e2m1i2d
+2emie
+emi2ei
+e2mig
+emi3k2
+em1im
+2emin
+emi3n2a
+e3mind
+em1int
+1e2mir
+e3misc
+1emiss
+emi3tr
+emma3u
+em2m1ei
+e2moa
+e2mof
+e2mop
+emo3s
+1empf4
+em3pfl
+em3po
+empo1s
+em2sa
+em4scha
+em2sim
+em2spr
+em2st
+em3t4
+1e2mul
+e3mur
+2emü
+e2na
+4ena.
+e4n3a2b
+4ena2c
+e4n3ack
+2e3nad
+enadi4
+e4naf
+4enah
+en3ak
+en1al
+e4nalb
+e3nale
+en2alg
+ena3l2i
+e4nalk
+e4nalm
+e4nalo
+enal3p
+4en1am
+ena4n
+e4nand
+en3ane
+e4nant
+e4nanz
+e4n3a2p
+en3a2re
+en3ark
+en3aro
+en1as
+ena2sc
+e4nast
+2enat
+4e5nati
+e4natl
+enat4s
+e4n3att
+4enatu
+enau2f
+en3aug
+e4n3aur
+e4naut
+en1a2x
+en3a2z
+e2n1ä
+e4när
+en2ce.
+1ency
+end2ac
+en2dal
+en4dang
+2endel
+ende4lä
+en4d3es4s
+en2dex
+en3d4ort
+end3rom
+end3s4au
+end3s2l
+end3s2p
+end3sz
+en3d2um
+en3d2ü
+2ene.
+ene4ben
+en1e2c
+e2neff
+en2eid
+e3neien
+e4neige
+4eneigu
+e4nein
+e4neis
+en1e4kl
+e2n1el
+ene4le
+2ene2m
+e2nemi
+2enen
+e4nense
+e4n1ent
+en4entr
+e2n1ep
+4e3ner.
+en2era
+e2n1erd
+e4n3erei
+e2nerf
+en4erfr
+1energ
+e2nerh
+e2nerk
+e2n1erl
+e4nermi
+e4n3ermo
+4enern
+e4n3erne
+ene2ro
+e2n1err
+en1ers
+4eners.
+e2n1ert
+en4ert.
+e2n1eru
+e2n1erw
+2enes
+e4n1e2sc
+e2n1ess
+en1eta
+e2neth
+en1eul
+e2n1ev
+e4ne2x
+en3f
+enf2a
+enf2u
+1engad
+1engag
+en3g2al
+enge3r4a
+en3g2i
+en3gn
+eng2o
+1engp
+eng4ra
+eng3se
+2eni
+e3ni.
+e3nic
+e2nid
+4e3nie
+eni3er.
+eni3erp
+eni5ers.
+en3i2ko
+en3ill
+eni4m
+en1ima
+en1imi
+e2nin
+e3nio
+eni2ö
+e2nir
+e4n3iso
+e3nit2
+e3niv
+enk3aus
+enk3erg
+en4k3erk
+en3k2ü
+en2nef
+en2nel
+en4ner4f
+enn3erg
+en4n3erl
+enni6ger
+2enniv
+enns2
+enn3ste
+e2n3oa
+e2n1ob
+e3nobel
+eno2br
+e2n3oc
+e2nof
+en3ol
+eno2ma
+e2n1op
+e2n1o2r
+en2ora
+eno4ri
+4enorm
+en1ost
+4e3not
+eno2w
+2e1nö
+en1ö2d
+en3sabb
+en3sac
+en2san
+en5sche
+en2seb
+1ensem
+ensen3e
+ens3ere
+en2sid
+en3spo
+ens4por
+enst5alt
+en4s3tät
+ens4tel
+ens6temp
+ens2th
+2ens4to
+enst2ü
+ens3umf
+en5t2ag
+en4tanm
+en4tanw
+ent4ark
+1entd
+en3t2el
+ente2n
+en4terb
+1entf
+2entfo
+2entfö
+1entga
+3entgeg
+en2thi
+1enthu
+1enthü
+en4tid
+1entla
+1entn
+en2t1os
+2entö
+en4t3rol
+1entsc
+1entso
+ent4sto
+1entw
+4entwet
+3entwic
+1entz
+e2n1u
+e3nu.
+e4nur
+2enu4t
+e4nuto
+e1nü
+enü1st
+4enwü
+2e1ny2
+enz2äp
+1enzep
+enz3erg
+en4z3erk
+en4zerl
+en4z3erm
+enz5ersc
+enzlan4
+enzo2l
+e1ñ
+4eo
+e1o2b1
+eo3ben
+eo3bl
+eo3br
+eo1c
+eoch2
+eo3dr
+e1of
+eo3g2
+e1oh
+eo3la
+e3o2ly
+eom2
+e1on.
+e1ond
+e1onf
+e1onh
+e1onl
+e1onp
+e1onr
+e1ons
+eo1o
+e1opf
+e1or
+e3or.
+eo1ra
+e3orb
+e3ord
+e3ors
+eort2
+e3orw
+eo1s2
+e3os.
+eo3se
+e1oste
+eot2e
+eo1ul
+e1ö2
+e1p
+2ep2a
+epa2g
+epas6ser
+2eper
+e3p2f4
+1e2pid
+e2pig
+e2pik
+1e2pile
+e3pio
+1epis
+2epist
+1e2pit
+ep3le
+1e2poc
+eport4
+1e2pos.
+ep2p1a
+ep2pei
+eppe3l
+ep4pl
+ep2pr
+2epr
+ep3sh
+ep2tal
+ept2an
+ep2tau
+e3pu
+epu2s
+4e3q
+er1a
+e3ra.
+e2rach
+e3rad.
+e3radi
+e2radj
+e2radm
+e4radmi
+e4r3adr
+eraf4a
+era2g
+e1rah
+e1rai
+er3aic
+e2rak
+e3rake
+e1rald
+eral4eb
+er3alke
+e2r3all
+er2an.
+era4na
+eran3d4
+e3rand.
+e4rangr
+e2ranh
+e2rano
+e1rap
+er3apf
+er3apr
+e2rar
+er3are
+e3rari
+er3arr
+e3ras.
+er3asc
+e1rast
+era2ß
+e3rati
+e2ratl
+er3att
+e1raub
+e1rauc
+er3aue
+erau2f
+er3aug
+e2ra2v
+e1raw
+e2r3ax
+e1raz
+e1rä
+er1äf
+er1äh
+er1ä2m
+er1äp
+e2r1äs
+er1ätz
+3erbarm
+erb2au
+erb2e
+erb2sp
+er1c
+er3chl
+erch2o
+erda3me
+1erdb
+er3de
+2erdec
+2erdel
+er4d3en4g
+erd3erw
+erdes4t
+erdeu2
+1erdg
+er2dob
+erd3st
+2erdy
+4ere.
+er1eb
+ere4ben
+e3r2ech
+er3echs
+er1e2ck
+er1edi
+ere4dit
+er1eff
+er1e2h
+ere4i
+6e3rei.
+6e3reib
+er1eig
+4ereih
+e4r3eime
+e2rein
+er3eis.
+er5eisar
+er3eisb
+er3eisf
+er3eisr
+erei5str
+er1e2l
+e2rele
+ere3lev
+ereli1
+2e3rem
+e4r1ema
+er1emb
+e2remp
+e4remu
+2eren
+e3ren.
+e3rena
+eren1e
+e4rense
+e4rentn
+e4rents
+e3renz
+eren8z7en8d
+er1epe
+2erer.
+2ererb
+er3erf
+erer3fa
+e4rerfo
+e2r1erh
+e2rerk
+erer4kl
+e2rerl
+4erern.
+e4rerne
+e2rer2o
+erer4ri
+er1ers
+4erers.
+e8rersche
+e2rert
+2ererv
+2ererw
+2eres
+er1ess
+eres3sk
+er1e4ta
+ere2th
+e4r1e2ti
+3er1eul
+ere4vid
+erf2e
+er3for
+erf4r
+4erfür
+er4g3are
+4ergebi
+3ergebn
+4ergebü
+4ergeha
+4ergehä
+ergel6s3
+erg5elst
+4ergeni
+3ergiee
+er2gop
+4ergrem
+erg3s
+ergs2o
+ergs2p
+ergs4t
+e4rh
+1erhab
+2erhai
+4erhals
+2erham
+2erhas
+3erhebu
+er3hei
+2erher
+er3hu
+2eri
+e2riat
+e3rib
+4e3ric
+e4r3ico
+e2r1id
+eri2de
+4e3rie
+eri3e2n1
+e3ri3k
+erik4l
+4e3rin.
+er1inb
+e2rind
+e2r1ini
+er1ink
+er1inl
+er1int
+e3rio
+4eris
+e2risr
+3eritr
+e3riv
+2erk.
+2erkaj
+er3ker
+1erklä
+2erkm
+2erkre
+erk5t4
+2erl.
+2erlag
+3erlaub
+3erlebn
+4erleh
+erm2
+er3mag
+er3me
+ermen4s
+er4m3ers
+er3mi
+er4n3alt
+er3ne
+er4nene
+er4nerf
+er4nerk
+3erneue
+ern1os
+2e1ro.
+e1roa
+er1ob
+ero2bl
+ero2br
+e2r1o2f
+e1rog
+e1roh
+4e1rok
+e1rol
+er3oly
+e1rom
+er3omb
+2e3ron
+er3onk
+e2roo
+er1o2p
+e4ro4r
+eror2a
+e1ros
+1erosi
+e3rosit
+e1rou
+e1row
+er1ox
+e1roz
+erö2d
+2eröh
+erö4l
+er1ös
+er3p
+er3rä
+2erren
+er3ror
+2errü
+er3s2a
+ers4ana
+ersch4
+erse4h3u
+ers2el
+er3sen
+er5s2i
+er3sk
+er3sp
+4ersted
+er3stel
+erst5ers
+4erstil
+ers4tod
+ers6tr
+er3swi
+er3sz
+ert1ab
+erta2d
+er3tat
+4erteig
+er4t3erf
+er4t3er4g
+er4ter4h
+er4terk
+er4ters
+er2tho
+4ertö
+4ertru
+erts2e
+ert3s2p
+2eru
+eruf4s3
+e4r3uhr
+er1u2m1
+er1und
+e4rundu
+erung4
+3erup
+er3use
+e2r3uz
+erü4b
+3erweck
+er4zerk
+er4z3ers
+es3ab
+e4sabe
+e3sac
+es2ach
+e2s1a2d
+e3saf
+es3ak
+e2s3all
+es3ampl
+es2ank
+es2anm
+es2anr
+es3anz
+e3sap
+es3apf
+es3a2ra
+e3sarg
+e3sa2s
+es2ast
+es3ato
+es3aus
+esa2v
+es1ax
+2esb
+esbi5er.
+e3s2ce
+esch2
+es4chem
+es4chi
+e2s3ec
+es1ehr
+e2s3ein
+ese3in4s
+es2el
+ese4nal
+ese4neu
+esen3o
+es2ens
+esen3sk
+eser4at
+ese4r1u2
+eses2k
+e2s3e2x
+2esf
+2esh
+es2har
+es3he
+2esi
+esi3er.
+e2s1il
+esi2st
+es2kat
+e4s3ke
+e4s3kl
+es3ku
+e4sky
+es3l
+2esm
+es3ob
+es2oh
+eso2r
+eso3re
+es2ort
+e3s2ö
+e3spal
+e3s4pan
+es4park
+es2pek
+e2spel
+e4spers
+e2sph
+e3s2pi
+e3s2por
+e3spra
+e3spu
+2esr
+2ess.
+es2s1ag
+essali3
+essau4s
+1essay
+2essä
+2es3sc
+es3se
+ess4erf
+ess3erg
+es4serh
+2essk
+2esso
+es2sof
+2essp
+es2s1pa
+es2spu
+es4stab
+es3str
+es3stu
+estab4b
+esta3ge
+est1ak
+es4tanb
+es4tang
+e4stant
+e1stap
+e1star
+e4starb
+e2st1a4s
+e1stat
+e4staum
+e4staus
+es2tec
+est5eing
+est5eink
+est5einl
+e1stel
+e4sten
+es4t3eng
+est5erha
+ester6ke
+es4ter4ö
+es4t3erz
+es4t3ess
+es2th
+es2tid
+e4stig
+e1stil
+e2stip
+estmo6de
+1estni
+est1ob
+e2s3tom
+est3ori
+es4tr
+es5trac
+e3strec
+e1stu
+est3ums
+es2tur
+e1s6tü
+e3sty
+e3suh
+es1um
+e2s3ums
+es3unt
+es1ur
+2es3w
+e3sy
+es3z
+es4zene
+2e1ß
+e2ß1el
+e2ßent
+eße3re
+e2ß1er2g
+e1t
+etab4
+et2abl
+eta2c
+2e3taf
+2etal
+et1a2mi
+et4an.
+et1ant
+et4at
+etat3r
+et2ax
+et1äh
+2etb
+2e3te
+ete2e
+e4t1ein
+ete3ke
+et2en
+eten3d2
+ete2o
+eter4hö
+eter4tr
+ete2s
+2etg
+et2h
+2eth.
+e3tha
+e4t3hal
+et3hä
+1et4hi
+e2thik
+1ethn
+e4thot
+et3hü
+e2tid
+eti2m
+etin1
+e4tinf
+e2tinh
+et1ini
+eti2ta
+eti2th
+2eto
+e2t1o2f
+et2on
+eto4n3al
+etons4
+e4torg
+2etr
+e4traum
+et3rec
+e2t3res
+et4ros
+ets2c
+etscher7e
+etsch3w
+et4sh
+ets1p
+et2spe
+et2ste
+et3su
+et4sum
+ett1a
+et2ta2b
+et2tad
+et2t3ak
+etta2m
+et4tang
+et4tans
+ett2as
+et2tau
+et2tei
+ette4n1
+et2t3h
+et4tim
+et2t3r
+et2t1um
+3e2tui
+e3tur
+e3tü
+2etw
+etwa4r
+1etym
+2etz
+et2zw
+eu1a2
+eu3b4
+2euc
+euch4ta
+2eud
+eude1s
+eudi4e
+eu2eb
+euer3ei
+eue6reif
+eue6reis
+eueren4
+euerer6s
+euerer6t
+eu3eri
+eu3erk
+eu3err
+eu2esc
+4euf
+euf2a
+eu2fer
+eu2g1a
+eu6gense
+eu3g2er
+eu4g3ing
+eu2gre
+eu2gri
+eugs4
+eug3sp
+eu3h
+eu1id
+eu1in1
+1e4uk
+eu2kä
+eulan2
+euland3
+eu3l2e
+eul2i
+2e1um
+e3um.
+eu3ma
+e3umb
+e3umf
+e3uml
+e3um2s
+eum4se
+eum4s1p
+e3umw
+2euna
+eun2e
+eu4nei
+e3un2g
+eu2nio
+eu4nis
+eunk2
+eun3ka
+eu1o2
+eu1p
+eu3p2f
+eu2ral
+eu4r1an
+eu4r3ast
+e2ure
+euren2
+eu4rens
+eur4er
+eur3f4
+1euro
+e3usar
+eu2sis
+eu3sp
+eust4
+eu1sta
+eu1sto
+eu1s4tr
+eut2e
+eut2h
+1eu3tha
+eu5t2o
+eut6scha
+eut6schn
+eut6schr
+2eux
+eu2za
+eu2zo
+eu2z1w
+e3ü
+e1v
+e2vak
+e3var
+eva2s
+2ev2e
+eve5ri
+evie3le
+2evor
+e1w
+ewä2s
+e2we.
+ewei4sc
+ewert4
+e3wir
+ewi2s
+e3wit
+2ex.
+e2xam
+2exas
+ex3at
+2exc
+2exd
+e2xel
+e2xem
+ex1er
+2exes
+e1xi
+2exik
+e2xil
+e2x1in
+1exis
+ex3l
+3exp
+2exs
+2ext.
+2ex2ta
+ex2tin
+1extr
+2extu
+2extv
+2exu
+e2xum
+2e3xy
+2ey1
+ey2n
+ey4ne
+eys2
+e1z
+e3z2a
+ez2ä
+e2z1enn
+e3zi
+ezi2s
+ez2o
+e3zoh
+ez2w
+é1b
+é1c
+é1g
+égi2
+é1h
+é1l
+élu2
+é1o
+é1p
+é1r
+é1s
+é1t2
+é1u2
+é1v
+é1z2
+è1c
+è1m
+è1n
+è1r
+1ën
+ê1p
+ê4t
+1fa
+fab4
+2f1ab5b
+fa2ben
+2fabf
+2fabg
+2f1a2b5l
+2fabn
+3f2abr
+2f1ab5s
+2fabw
+fa4cheb
+fa4chel
+fa2ch3i
+fa2cho
+fach3s4p
+fa2del
+f1ader
+fa2di
+fa2dr
+fa3ec
+fah6l5ent
+5fahrt
+fai3b
+f1a2ka
+fa2ke
+f3aktio
+f2akto
+3f2aku
+fa3la
+fa3le
+fal2kl
+fal4l3ei
+fall5ent
+fal6lerk
+faller6s
+fal6scha
+fal6schl
+fal6schm
+fal2tr
+f1amt
+3f2an.
+fa2nar
+2fanb
+fand2a
+fan2gr
+2f1an3k
+2fanl
+4fann
+f1anp
+2fanr
+2fanw
+2f1an3z
+2f1a2p
+f2ar
+far2b1a
+far4bel
+far4b3er
+far4bin
+farb1l
+far2bo
+far2b3r
+far2b3u
+f3arc
+3fa5ri
+far2r1a
+far2rh
+farr3s
+2f3art
+2f3arz
+fa3s4a
+fa3sh
+fa2st
+2f1astr
+fa2ß
+f3at
+f4at.
+fa2to
+f4ats
+2f1auf
+f3aug
+f1ausb
+faus4t3r
+3f4av
+fa2xa
+1fä
+fä1c
+fäh4rin
+fäh2r1u
+f1älte
+2fäq
+2f1ärm
+2färz
+fässer4
+fäs6serk
+fäs6serw
+fä2ßer
+2f1ätz
+2fäug
+2fäx
+4f1b2
+fbau1
+fber2
+2f1c
+f3ch
+2f3d4
+fdien2
+1fe
+3fe.
+featu4
+fe2c
+f2ech
+fe3che
+fe2dr
+fe2e1i
+feein5
+fe1em
+2f1e2he
+feh4lei
+f2eie
+f2eind
+2f1eing
+fe3ins.
+2f1einw
+f1eis
+5fek
+fe2l1a
+fel3au
+fe2l1ä
+fel2da
+felde4m
+feld6erh
+fel2dr
+fel4d5ri
+2fe2lek
+2felem
+fe2l1er
+fe2les
+fe2l1o
+fel4s3oh
+fels2t
+felt2
+6fel6tern
+f2em.
+fem4m
+2f1emp
+fen1a
+fen3au
+4fenerg
+fe2ni
+fe2no
+fen3s2a
+fen5s2c
+fenst2
+f1ent
+2f3entf
+f2enti
+4f3entla
+f2ento
+2f3entw
+2f3entz
+3fep
+fe2pi
+f2er.
+fe1ra
+fe2rab
+fe2ral
+fe4rang
+fer4ant
+fe4ranz
+fe2rau
+fe2r1ä
+2ferd.
+fer3da
+ferd2e3
+f2ere
+fe2re2b
+fe2rec
+3ferei
+4f3ereig
+fe4r3eis
+f4erel
+fer3ell
+fe4rer4g
+fer4fah
+ferg4
+f4ergr
+ferie4n3
+4fer4leb
+f2ern.
+fer4nei
+fe2rö
+f4erpa
+f4erpf
+f4erpl
+f4erra
+fer4reg
+ferri2
+f2ers.
+f2ert
+fert4r
+f2erz
+fess2e
+fe2st
+fest3a4b
+fest3an
+fest3ei
+fes4t1o
+fest3r
+2f1e2ta
+fe4tag
+3fete
+fet4t3a
+fetti3s
+2feu.
+feuer3ö
+3few
+2f1ex
+3fez
+1fé
+4f1f
+ffab6s
+ff1a2d
+f3f2ak
+ff3ar
+f3fas
+ff1au
+f2f1e2b
+ffe2e
+f2f1ef
+f2f1ei
+ffe3in.
+ffe5inha
+ffe2m
+f2f1emi
+ff2en
+ff3erle
+fff4
+ffi3k
+f2fim
+ffin3s
+ff1lag
+ff3le
+ff3li
+f3flu
+f3flü
+ff1ox
+ff1rak
+f3f4rä
+ff3ro
+ffs2am
+ff2s1p
+ffs3tan
+ffs3ti
+ff3stü
+fft2
+ffus3s
+4f3g2
+fgeb2
+fge3s
+4f3h2
+1fi
+3fi.
+fi2ar
+fi3at
+fid2
+fi2do
+fien3
+fi1er2f
+fi2k1as
+fi2kel
+fi2kin
+fi2kn
+fi2k1o4
+fi2k3r
+f2il
+fi2l1an
+fil3d
+fi2les
+fi3li
+fi4lin
+fil2ip
+fil2ma
+fil2mä
+fil4med
+fil4mei
+fi2lo
+2fimp
+3f2ina
+2f1inf
+fing2
+fing4e
+fing4s4
+fi3ni
+f2ink
+fin2s
+fin3sc
+fin3sti
+2f1int
+fi2o
+fi3ol
+fi2r
+fi3ra
+fi4re
+fir3me
+fi3s2a
+fi4sch3a
+fi6schei
+fisch3l
+fisch3o
+fi4schr
+fi4sch3w
+fi3s2h
+2f1i2so
+fis2p
+fi2s3t
+fite2
+fi2tin
+fit1o2
+fi4tor
+five4
+fi2xel
+2f1j
+3f2jo
+4f1k4
+fka4t3
+f2l2
+2fl.
+f3lad
+f5land
+f4lans
+f3lap
+f4lasc
+f3lats
+flauma4
+3f4läc
+4fläd
+f3län
+f3läu
+fl4e
+f5le.
+2f3leb
+f4lee
+2f5lein
+flek3
+flekt2
+f3ler
+f4lex
+f3li.
+3f4lim
+fli4ne
+f3ling
+2flins
+2f5lon
+1f4lop
+f4lor
+1floß
+1f4lot
+flo2w
+f3lö
+4flöf
+f4lög
+1f4luc
+1f4lug
+flu4gen
+flu4ger
+1f4luss
+f4lut
+flut1o
+f4lü
+f5lüm
+4f3m2
+fma5che
+fma2d
+2f3n2
+fni2s
+1fo
+f1ob
+fo2be
+2fober
+fob2l
+2f1o2f
+3foli3
+fol2k3
+fo2na
+fo4nan
+fon3au
+fon3dr
+fo3n2er
+fo4nin
+fo2nop
+fons4
+fo2nu
+2f1op
+4f3org
+fo3rin
+3form
+for4m3a4g
+for4mas
+for4m3ei
+forni7er.
+for6schl
+for4st
+for4t3ei
+for4ter
+for2th
+for2t3r
+fort3s2
+for3tu
+for2u
+fot4r
+fo2x
+1fö
+2fö2f
+2f1ök
+4f1öl
+för4s5
+4f3p4
+2f1q
+f2r2
+f3ra.
+frach6tr
+2f3rad
+2f3rah
+fra4m
+f3rand
+f5rap
+f3rat
+1frau.
+f3rauc
+2fräd
+1f4rän
+2fre.
+f3rec
+f3red
+2fref
+2freg
+f4rei.
+f3reic
+f4reie
+frei1f
+f4reig
+frei3k2
+2freim
+2frein
+2frek
+2f3rep
+2frest
+3f4reu
+2f3ric
+fricht6e
+fri3d
+fri2e
+2frig
+f4ri3k
+f3rip
+1fris
+f4risc
+f4rist
+2f3roc
+2frol
+1f4ro2n
+fro4n1a
+f4rop
+fro2s
+f3rot
+frös2
+f3ru
+f4ruc
+f3rü
+4f1s
+f2s1al
+f2sa2n
+fs3ane
+fs3ar
+f2s1a2s
+f2saut
+fs2än
+f3sc
+f4sca
+f4sce
+f4schan
+f4schef
+f4schro
+f4scr
+f2s1e2b
+f4s1ehr
+fse2n
+fs1en1e
+f2s1ent
+f2s1er
+fse4t
+f2s1eta
+f2s1i2d
+f3s2ky
+f2s1o2
+f3soh
+f3sol
+fs2on
+f3spann
+f2s1pas
+f2sph
+f3s2pl
+f3s2por
+f2spre
+f2spro
+fs2pul
+fs3s4
+fs2t
+fs3tak
+f2stas
+f3stat
+fs3tät
+f4stäti
+f3stel
+f3stern
+fs3th
+f2stip
+fs4tol
+fst4r
+f4s3tres
+fs3trü
+fs3tut
+f4stüte
+fs1ums
+f2s1un
+f3sy
+4f1t
+f4ta.
+ft1a2be
+ft1abl
+ft1af
+ft2ag
+ft1ala
+ft1an
+ft1a2r
+f3tat
+ft3att
+f2t1äu
+fte2c
+ft1eck
+ft1edi
+ft1eh
+fte2he
+ft1eig
+ft1ein
+ft1eis
+ft1eli
+ft1emi
+f4t1ent
+ft3erfü
+ft1erk
+f2t1erl
+f2t1erz
+f2t1e2ti
+f2t1ex
+f2t3h
+f4t5hei
+f3ti
+f4tid
+ft1in
+f4tinf
+f4tins
+fto2
+f2t1of
+ft3om
+f2t3ot
+f3t4ran
+ft3res
+f4tric
+ft3ro
+ft3ruh
+ft2s1
+ft4sam
+ft3s2c
+ft4sche
+ftse2
+ft4seh
+ftsen1
+fts3i
+ft3st
+ft4staf
+fts3tät
+ft4stei
+ft4stem
+ft6stier
+ft6s5treu
+ftstro4
+ft4stru
+f2tum
+ft1urk
+ft1url
+f3tü
+ftwa4
+ft3z2
+ftze3d
+1fu
+3fuc
+3fug
+f2uh
+fuku3
+f1um
+fun6derg
+2f1unf
+fung4
+2f1ungl
+2f1u2ni
+fun2kl
+fun2ko
+fun2k3r
+fun2ku
+2f1unm
+2funr
+2funt
+f2ur
+furch2
+fu4re.
+2f3url
+fus2sa
+fus2s1p
+fus2st
+fu2ß1er
+3fut
+1fü
+2füb
+fühl4sc
+fün2
+fü2r
+2f1v
+4f1w
+f1ya
+4f1z
+fz2a
+fzeiten6
+fzei8t7end
+fz2ö
+fzu2ga
+fz2w
+3ga.
+2gabf
+2gabg
+g4abi
+ga2b3l
+gab2o
+g1abr
+gab4ri
+2gabsc
+2gabtr
+ga3bu
+2gabw
+2gabz
+ga1c
+gade2r
+ga3di
+gadi4e
+2gadl
+2ga2dr
+gae2
+ga1fl
+5gag.
+ga1k
+ga2ka
+ga2ku
+gal2a
+ga3laf
+ga2lar
+2g1alau
+2g1alg
+gal3lo
+2g1alp
+2g1alta
+2g1altd
+g1a2lu
+ga2mec
+ga3mel
+gam3ma
+5g4amo
+2g1amt
+g1ana
+2ganb
+gan3d2
+2ganf
+gan2g1a
+4gangeb
+gan2gr
+gang4sp
+gan2g1u
+2g1ank
+2ganl
+2ganmu
+3g2ano
+2ganr
+gans2
+g2ans.
+2g1ansi
+2ganst
+2ganw
+ga1ny
+g1anz
+ga3pe
+2g1app
+ga1q
+3gar.
+g2ara
+2garc
+3g2ard
+ga3r2i
+2g1arm
+ga3r2o
+gar2s
+2g1arti
+ga3ru
+2g1arz
+ga2s
+g2as.
+gas3al
+ga5schu
+gase2
+ga5se.
+ga4sei
+ga4sel
+ga4se4m
+ga4sent
+gas3s2
+5g4asse.
+g4assen
+6gassess
+gas4t3el
+gast3rä
+ga3t2a
+gat2h
+2gatm
+gat4r
+gau1c
+2g1auf
+2g3aug
+g2auk
+gau5ne
+2g1aus
+2g1aut
+2g1äp
+gär3th
+2gärz
+gä4u
+2g1b4
+gber2
+gbi2
+gbon2
+gby4t
+2g1c
+2gd
+g1da
+gd2ad
+gda3de
+g2dak
+g2dan
+g2dar
+g2dau
+g1dä1
+g2dei4
+gdel6s
+gd2en
+g2d3ent
+g2der
+gd2es
+g1do
+g2dop
+gd2or
+g1dö
+g1d3r
+gd3s2
+gdt4
+ge3a2
+geb2a
+ge3ble
+geb4lin
+gebot4
+3gebü
+ge1c
+ge3ck
+ged4
+ge1e2
+ge3ec
+geest3
+3gefä
+4g1eff
+gef4l
+gef4r
+ge3fu
+gegen1
+gegen3s4
+ge3g2l
+ge3hei
+2g1eid
+ge4ie2
+2g1eif
+ge4ig
+g2eil
+gein1
+ge1ini
+ge1inn
+2g1einr
+gein5sti
+gein2v
+ge1ir
+ge2is
+2g1eise
+gei3sh
+geis4sc
+gei2st
+2gek.
+gelb1r
+gel4b3ra
+gelb3s
+gelder4
+gel6derh
+gel6ders
+ge3lec
+gele5cke
+2ge2lek
+2gelem
+ge4lene
+gel3ere
+ge4lerk
+geler3ö
+ge4l3ers
+ge2lev
+gel3f
+gel1i4m
+gel3la
+gell2i
+gel2ö
+gel3sa
+gels2p
+gels2t
+gel3ste
+gel3sz
+gel3ta
+gelt4r
+gel3z2
+gem2
+ge4ma.
+gem6e
+4g1emp
+ge3mu
+g4en.
+ge3na
+ge4n1ac
+ge4nak
+ge4n3al
+ge4nam
+ge4nar
+ge4nat
+gen4aug
+ge3nä
+ge4näu
+g2enc
+4genda.
+4g3endmo
+gen2dr
+gen3eid
+gener4f
+4generg
+ge4n3ern
+gen6erwe
+gener4z
+ge4ness
+ge3nid
+ge2nim
+gen3k4
+gen3n
+gen4sam
+gen3sk
+gen3sz
+gen3tä
+2gentf
+gen3t4h
+gen5tr
+2gentw
+geo2ri
+ge1ou
+g2e3p4
+ge1ra
+ge2ra2b
+ge2r3al
+ge3rann
+ge4rant
+ge4r3a2r
+2gerdg
+ge4rene
+ge4reng
+ge4ren4s
+ge4r3ent
+ger2er
+gerin4f
+ger4inn
+gerin4t
+4ger4klä
+g3erlas
+ger5me
+ger3no
+2g1ernt
+ge1ro
+ge2rob
+ge2rop
+ge1r2ö
+ger4sat
+4ger4seh
+ge3r2u
+g1erzä
+ge1s2
+g2es.
+ges3auf
+3gesc
+gesch4
+ge6sche.
+ge2s3eb
+4g3e4sel.
+ge4s3elt
+ge2s3er
+ge3sha
+ge3si
+ges4pi
+ges3s4t
+gest2
+gest4a
+ge3stak
+ge3st6e
+ge4s3ter
+ges3th
+ge4s3tur
+ge3t2a
+ge4tang
+ge4tant
+g1etap
+ge3ti
+get4ri
+get3s
+ge5t4u
+2g1e1ul
+ge3u4t
+ge3wa
+4g1e2x
+2g5f4
+gfi2l
+4g1g
+gga4t
+g5ge
+gge2ne
+gg2l
+g3gla
+g3glo
+g2g3n
+gg4r
+ggs2
+2g1h
+4gh.
+gh2a
+3ghale
+gh2e
+3g2het
+3g2hie
+gh1l
+3gh2r
+ghs2
+gh3sc
+g2hu
+gh1w
+gich2
+gicht1
+gi2eb
+gie3g
+gi2e1i
+gi2e3l
+giel2a
+gie3n
+gien2e
+gi4eno
+gie3re
+gie1st
+giet2
+gif2tr
+gift5s
+gi2gu
+gi2kel
+2g1ill
+gi2me.
+gi4mes
+gi2met
+2gimp
+2gind
+gi3ne
+2g1inf
+gin2ga
+2ginh
+2g1ins
+2g1int
+2ginv
+gi2ob
+2giok
+2g3isel
+git2a
+gi3tu
+gi4us
+2g1j
+4g5k4
+gl2
+4gl.
+4g1lab
+2g1lac
+2gladu
+2g1lag
+2g1lam
+2gland
+3glanz1
+gla2s1c
+glas3t4
+3g2laub
+2g1lauf
+2gläuf
+gl3b
+g2l4e
+2g3le.
+3glea
+2g3leb
+g3lec
+4g3led
+g3lee
+2g3leg
+2gleh
+g4leic
+4g3lein
+gleiter8s
+glei4t5r
+g3len
+4glenk
+4g3ler
+glerei4
+2gles
+3gles.
+g3lese
+g3lev
+g2lia
+2glib
+3g2lid
+g2lie
+2g3lieb
+2glif
+g2lik
+4glil
+g2lim
+4glin
+g2lio
+2glis
+3g2lit
+g3lite
+g2liz
+g3lize
+g2loa
+g2lob
+g2loc
+2g3loch
+g2lok
+g2lom
+g2lop
+g2lor
+2glos
+g2lot
+2glöch
+2glös
+2glöw
+2gls
+g1lu
+2g3luf
+2gluk
+4g3lun
+g2lut
+3glü
+g1lüg
+2glw
+3g2ly
+2g1m2
+g1n
+2gn.
+g2n2a
+g4na.
+2gnac
+2g5nah
+gn4al
+gna4l3er
+2gnanl
+3g2nä
+2gnb
+2gnc
+2gnd
+gn2e
+g3neh
+2gn3ent
+gne2tr
+2gnf
+2gng
+2gnh
+g2nie
+g2nif
+g4nin
+2gnint
+2gni4s3
+gnise2
+2gnk
+2gnl
+2gnm
+g2no
+g4non
+gno1r
+g3not
+2gnp
+2gnr
+2gns
+2gnt
+2gnu
+3g2num.
+g2nü
+2gnv
+2gnw
+g2ny
+2gnz
+go4a
+goa3li
+g1ob
+go3be
+2gobj
+gob2l
+2g1o2f
+2gog
+2g1oh2
+goh3ren
+go1i
+go3in
+gol2a
+gol2fr
+3gon.
+gon2e
+3gons
+goo2
+2gope
+gopf4
+go4pos
+2gopt
+gor2a
+2gord
+2g1org
+go2s1
+gos3p
+gost2
+2g1osz
+go3t2h
+got6terb
+got6t5erg
+3gou
+go1y
+gö2f
+g1öl
+3göt
+2g3p4
+2g1q
+g2r4
+g4rab
+gra2ba
+gra2bi
+gra4bl
+2g3radl
+2g3rah
+2g3rak
+gram1
+gram8m7en8d
+gram6mer
+g3rand.
+2gra2r
+grar1e
+gra2s3a
+gra4sh
+gra4sp
+gra2st
+2g3raub
+grau3f
+2graum
+grau3sk
+2gräd
+gräs1c
+g3räu
+2g5re.
+g4reb
+2g3rec
+g3rede
+g4re2e
+2g3ref
+2grege
+2g3reic
+grei4fr
+2g3reih
+g3rein
+g3reit
+g4rem
+2g3renn
+gre3no
+gren6z5ei
+grenz3w
+g4rer
+gres6ser6
+g3ret
+g3rev
+2g3ric
+gri2e
+2g3riem
+g3riese
+g4rif
+2grig
+gril4la
+4g3ring
+4g3rinn
+g4rip
+gro2ba
+gro3ber
+gro2bl
+gro2b3r
+2groc
+2groh
+2g3rol
+gron4
+2g3rose
+g4ross
+gros6sel
+2g3rost
+g4rot
+2gröh
+2gruf.
+g4ruft
+2g3ruh
+g3rui
+2g3rum
+grun2g
+3g4rup
+3grus
+3gruß
+2g3rut
+2g3rüc
+g4rün
+4g2s1
+g4s3a2b
+g3sack
+g4sa2d
+g4s3a2k
+g3sal
+g4salb
+g4sall
+g4salm
+g4salt
+gs2am
+g4s3ama
+gs3amb
+g4s3amp
+g4sant
+gsa4p
+gs3a2r
+g3sat
+gsau2g
+g3sau4r
+gsa2v
+g3säu
+g3s2c
+g4sca
+g4s3ce
+gsch4
+g4schef
+g4s3co
+gse2
+gs2e3h
+g3s2eil
+g3s2eis
+gse4kl
+g3sel.
+g4sela
+g3seln
+gs3em
+gsen1
+g4sent
+g4ser
+g3sere
+gs3er1i
+g4se4s
+gse4t
+g4seu
+gsfi2l
+gsh4
+gs3ha
+gsi2d
+gs3i2k
+g3sil
+gs3in
+g4s3ita
+gs2ki1e
+g4sm
+g4sn
+gso2
+gso4b
+g3sol
+g4s3op
+g5s4orge
+gs2pac
+gs4pant
+g4spas
+g3s2pek
+g3s2pi
+g5s4pie
+g4s3pl
+g3spor
+gs6port.
+g6sporto
+g4s3pru
+gsrat4
+gsrü2c
+gs3s4
+gs3ta
+g3stan
+g4stanz
+g3star
+gs4tati
+gs3tä
+g3steh
+g3stein
+g3stel
+gs4tell
+gste2r
+gst3err
+g1steu
+gs2thy
+g3stif
+g3stil
+g3stim
+g3stir
+g3sto
+g4stoch
+g4stod
+g4stor
+gs3tö
+gs4tör
+gs3tr
+gst4ra
+g3s4tras
+gs4trat
+gst5reit
+gst4res
+g4streu
+gst3rit
+gst3ros
+g3stun
+gs3tü
+g4sw
+g3sy
+2g1t
+g3te
+gtei3s
+gt3h
+gt4hy
+g3t2i
+gti2m
+g3to
+gt4r
+gt2s
+g3tü
+gu4ale
+gu3am
+gu1an.
+gu1ant
+gu1as
+gu1c
+gu4d3r
+gu2e
+2gued
+guet4
+2g1u2f
+2g1uh
+gu1ins
+gu1is
+gum2e
+3gumm
+gummi1
+gun2e
+2g1unf
+g2ung.
+gunge2
+4gungew
+2g1ungl
+2g1u2ni
+2g3unk
+2gunr
+gun2s
+2gunt
+gure4
+2g1url
+gur2th
+gur2tr
+gurt3s
+guru1
+gu2s
+gus3a
+gu3sc
+guschi5
+gu3se
+gus4ser
+gus2s1o
+gus2sp
+gus4st
+gu4st
+gust3a4b
+gus3te
+gust3en
+gus6tend
+gus6terl
+gus4tr
+gu2t
+gut1a
+gut3er4h
+gut3h
+gut4sa
+gut2sp
+2güb
+3gür3
+güs3
+2g1v
+2g1w
+gy3n
+gyp2a
+2g3z2
+gzeu4gi
+hab2a
+hab2e
+h3abf
+hab2i
+2habn
+h1a2br
+h1abs
+2habw
+ha4ch3en
+ha2cho
+hacks4
+ha2del
+hade2n
+h1adle
+hado2
+h1a2dr
+2hae
+ha4far
+haf2e
+h1affä
+haf3f4l
+h2aft
+haf4to
+haf2tr
+haft4s3p
+h2agg
+h1ah
+h2ahs
+h2ai
+3hai.
+h2aj
+2haka
+ha1k4l
+2h2al.
+halan4c
+h1a2lar
+ha2lau
+hal2ba
+hal4bel
+hal4bin
+hal2b3r
+hal2bu
+2hale
+hal6lere
+hal6lerf
+hal6lerg
+ha3lo
+4halp
+hal4sei
+hal4sk
+hal2sp
+hal2st
+hal4tal
+hal4tei
+hal6t3r
+h2ame
+2h1amt
+h2an.
+2hana
+ha2nal
+ha2nan
+2hanb
+h2anbe
+h2and
+han2da
+han2d3r
+hand3s
+ha2nem
+han2f1
+han6g5end
+2hani
+han2kr
+2hanl
+2hano
+2hanr
+h1ansc
+2hanz
+2h1ap
+3h2ape
+ha2pl
+ha2po
+ha2pr
+h2a3ra
+ha4rab
+2harb
+h2ard
+har2fr
+h1arm.
+har3ma
+h2arme
+har4me.
+har4ne
+ha2rom
+hart4e
+har2th
+h1arti
+har2tr
+har4tri
+har2za
+h2as
+4ha3sa
+has4c
+has2h3
+has4sa
+hasser4
+has4s3t
+has3t
+ha2str
+h1a2ß
+ha2ta
+h3atl
+ha2t3r
+2hats
+hatt2
+h3attr
+h1audi
+h1aufb
+hau5f6lie
+hau3f4lo
+2h1aufm
+h1aufs
+h3au3g
+h1aukt
+hau2sa
+hau4san
+hau2sc
+h2ause
+hau4sel
+hau6s5ent
+hau4spa
+hau4spe
+haussen6
+hau4sur
+hau2ta
+4hauto
+hau4t3r
+ha2ve.
+häde2
+h1äff
+hä2kl
+2härz
+hä6s5chen
+2häug
+häu2s1c
+hä3usp
+2h3b4
+hba4ras
+hbe3r2e
+2h1c
+2h3d4
+hdan2
+4hea
+he3be
+heb3eis
+he2b3l
+he3br
+he3bu
+he3ch2e
+he3chi
+he1cho
+h3echs
+he3cke
+hed2g
+he2dit
+he2el
+hee3le
+he1e4m
+hee2s
+he1e2t
+h2ef.
+he2fan
+he2fau
+he2f1ei
+he3f2em
+hef3erm
+2heff
+he2fid
+he4f3ing
+he2f5l
+2hefr
+hef4ra
+he2fre
+3heft
+he2fu
+he3gu
+he2hel
+h4eib
+h1eie
+h1eif
+h1eig
+he2im
+hei4mal
+hei4man
+hei4mar
+hei4mei
+heim3p
+hei4mu
+2hein
+heine2
+hei4neb
+hei6nene
+hei4n3er
+h3eintr
+4heio
+he1ism
+he1ist
+heit4s3
+h1eiw
+hekt3a
+he2l1an
+he2l3au
+hel1ec
+he2lek
+h3elem
+he2len
+h2elf
+he3li
+hel4l3au
+hel4mei
+he3lo
+he4lof
+hel2or
+he2lö
+2helt
+2h1emb
+3hemd
+he3mi
+he4mia
+h3e4miss
+3hemm
+2h3emp
+h2en.
+hen3a2
+he4nas
+he4nat
+hen3ebe
+henen1
+hen3end
+he4nene
+he4nens
+hen3erg
+he4nerm
+he2n1e4t
+henfal4
+2henga
+hen4gag
+hen4kan
+hen4kau
+henst2
+hen3str
+hent2a
+hen3te
+hen3tr
+h1ents
+2h3entw
+h3entz
+he4n3u
+hen3z2
+4he2o
+he3on
+he3op
+he3pa
+he3ph
+h1e2pi
+hept2
+h2er.
+her3a2b
+he2rad
+4herap
+he4r3a2r
+he2rat
+herb2
+h2ere
+he2re2b
+he4reck
+her4eif
+4he3reig
+he6reis.
+her7eises
+he2rel
+he4rene
+he6rersc
+he4rerw
+h1er2fo
+6hergebn
+2herif
+herin4d
+herin4f
+he6rin6nu
+herin4s
+h1erke
+her4klä
+h5erkran
+her3la
+h2ern
+he3ro
+he4r3o2b
+he4rof
+he4rop
+he4rot
+h1erör
+hert4
+her3th
+her3tr
+her3um
+her4zap
+h3erzeu
+her2z1w
+he3s4a
+4hese
+he3si
+he3s2p
+hes6tä
+he3stro
+he2tap
+he3tä
+heter2
+he3th
+het2i
+he3t4s
+h2eu
+heu3g
+he2um
+3heusc
+he3x
+he1x2a
+2hexp
+he1y2
+1hè
+2h3f4
+hfaller6
+hfan2
+hfel2l3
+hfi2s
+hflei2
+2h3g4
+hgas1
+hget4
+2h1h2
+hhoh2
+4hi.
+4hia
+hi2ac
+hi2ang
+h1iat
+4hic
+hi1ce
+hich6t5er
+hicht6sp
+2hid
+hi3d2e
+hi2e
+hi3ens
+hier3i
+hie4rin
+hiers2
+hif3f4r
+hi2k3r
+hi2l3a4
+hile3n2
+hil2fr
+h2im
+2hima
+h3i4mit
+h4imm
+h3impe
+hi2n
+hi3nak
+hi3nam
+hi3nap
+hi5nas
+h2inde
+hi3nel
+hin2en1
+h1inf
+h1inh
+2hi3n2i
+hin3n2
+hi3no
+hin3s2
+hin2t1a
+2hio
+hi3ob
+hi4on
+hi3or
+hi2p3
+hi4pl
+hips2
+hi4pu
+hi2r
+hi3ra
+2hi3re
+hi3ri
+hir2m1a
+hir2mi
+hirn1
+hir4ner
+hir2s
+1hirt
+2his.
+his2a
+hi2se
+h1i2so
+hi3tac
+hi2tan
+hi2tel
+hi1th
+hit2i
+hit3z2e
+hi2v1o
+2h1j
+2h1k4
+hkamp2
+h2keu
+h3kö
+4hl
+hl2ag
+hla2gr
+hla2l
+hlan4d3a
+hl1ans
+hl1anz
+h1las
+h1lat
+h1laut
+h1lay
+h3läche
+h1läs
+h1läu
+hlb4
+hl3d4
+h3le.
+hle3a
+h3leb
+h3led
+hle3e4
+h3lein
+h2leis
+h3leist
+h5len.
+hle4nas
+hlenen3
+hl2enn
+h4l3entr
+h4lents
+hl2enz
+h3ler
+hle2r3a
+hl4ere
+h2lerg
+hl2erk
+h6l3er4nä
+hle3run
+hl1erw
+h4lerz
+h3les
+h4lesi
+hles4t
+hlf4
+h2lie
+h3lied
+h2lif
+h2lim
+hl1ind
+h2lip
+h2lis
+h2lit1
+hl3l2
+hlm2
+h2lo
+hl1ob
+h3loc
+h3log
+hlo2re
+h4lorm
+h3los.
+h3losi
+hlos4st
+hl2ö
+h2lös
+hl4sar
+hl2ser
+hls3ka
+hl3s2lo
+hl5s6tern
+hls3tie
+hl5str
+hl2su
+hl3t2
+h3luf
+h3luk
+h3lumpe
+h1lüf
+hlz2
+2h1m
+h3mad
+h3mag
+h3mak
+h3man
+h2mant
+h3mar
+h4marc
+h3mä
+h4mäc
+h4mäh
+h4mäl
+hm2e
+h3me.
+h3med
+hme1e4
+hmeer4s
+h3mein
+h3meld
+hme3le
+h3men
+hmen2s
+hme2ra
+hme1s2t
+h3mex
+hmi2e
+h3mil
+h3mind
+h3mini
+h3minz
+h3mirr
+h2mo
+h3mop
+h3mot
+h3m2ö
+h4möl
+hm3p2
+hm2s
+hm3sa
+hms1p
+h2mu
+h3mul
+2hn
+h2na
+hna2c
+h3nag
+h3nam
+h4nar
+h4natt
+h3nau.
+h2nä
+hn1äh
+hn3d4
+hn2e
+hne3b
+hne2e3
+h2n3ef
+hn3eig
+hn3ein
+h2nel
+hne4n1
+hn4eng
+hne4pf
+h3ner
+hner4de
+hner3ei
+h4n3e2ro
+h4n3ersa
+hn4es
+hn3ex
+hn3f4
+hnflei4
+hnhof8stras
+h2nic
+h2nid
+h2nie
+hn1im
+h2nip
+hnk4
+h2nor
+hn3sa
+hn3s2p
+hns4to
+hnsuch4
+hnts2
+h2nul
+h2n1unf
+hn3z2
+ho4ar
+ho3bern
+ho2b3l
+ho2ch3
+ho4cha
+hoche2
+ho2cka
+hocker4
+ho6ckerl
+hock3t
+4hocy
+2hod
+2ho2e
+ho2f1a2
+ho2fä
+ho2feu
+hof3f4a
+ho2f3l
+ho2f1o
+ho2f3r
+ho2fu
+2hoi
+ho2l1a2
+hol3ar
+4holdy
+3hole
+ho2l1ei
+hol3g4
+hol3k
+holl2
+ho2l1op
+hol3s
+2holy
+h3olym
+3holz
+hol6zene
+hom2e
+ho2me.
+ho2mec
+ho2med
+h2on
+4hon.
+hond4
+4hone
+hon2er
+4hong
+4honh
+4honk
+4hons
+4hony
+ho1on
+hoo2r
+2hope
+ho1ra
+ho2rak
+h1o2r2an
+ho2rar
+ho2rau
+h1or3d
+2hore
+ho4rens
+ho3ret
+2h1org
+horo2
+ho2rop
+hor3ta
+hor4ter
+h1ortu
+hose2
+ho2sei
+ho3sl
+ho4sla
+4hosö
+ho2sp
+ho3spr
+ho4ßene
+2hot.
+ho3th
+4hotr
+2hot3s2
+2ho2w1
+h1o2x
+ho1y2
+4hoz
+1h2ö
+2hö.
+hö2c
+hö3ck
+h4öh
+5höhe
+hö2s1
+h3öst
+2h3p4
+h1q
+4hr
+hra2b
+hr3a2c
+hr3ad
+hr1a2g
+h1r4ah
+h1rai
+h1rane
+hr3ap
+hr3ass
+h3rat
+h3räu
+hrb4
+hr1c
+hr3d
+h2rec
+h3r2ech
+h3red
+h3ref
+hr1eh
+h4rei.
+hrei4ba
+hrei4br
+h3reic
+h3reif
+h4r3eig
+hr4eini
+h4reinl
+h4reins
+hrei3th
+hreli1
+h3rep
+hrer6geb
+hr2erk
+h4rerla
+h6rer6leb
+hr2erm
+hrer3s
+hrer4sa
+hrer6tüc
+hr2erw
+hr2erz
+h3re2s3
+hress2
+hrest2
+hre4t
+h2r1eta
+h2r1eu
+h2rev
+h3rez
+hrg2
+h2ri
+h3ric
+h4rick
+hri4e
+h3riesl
+h3rin
+hr1int
+h4rist
+hrit6tel
+hrk4
+hr3l
+hrm2
+h3rog
+h3roh
+h1ro2l
+h4romat
+h4rome
+h4romi
+h4romo
+h4ron
+h1ropa
+hro4r
+h3rou
+h3rö2s
+hrr4
+hr2s1ac
+hr4s3and
+hr3schl
+hr2sen
+hr2s1er
+hr2set
+hr4sh
+hr2sin
+hrs3k
+hrs3l
+hr4s1of
+hr3spa
+hrst2
+hr2su
+hr2tab
+hr2tan
+hr2te2l
+hr2th
+hr2top
+hrt3ric
+hrt2sa
+hrt2se
+hrt4sin
+hrt2sp
+h3ruh
+hr1ums
+h3rut
+h3rü
+h4rüb
+h4ry
+hrz2
+4hs
+h4s3acht
+h2s1a2d
+h2s1alk
+h2sall
+h4samt
+h2san
+h2s1as
+h2sath
+h2saud
+h2s3aur
+h2saut
+h2säh
+h2säug
+h4schan
+hs4cr
+h2s3ec
+hse2e
+h4s1ehr
+h2s1eie
+h4seind
+h6seinst
+h3sele
+hse4lin
+hse4mis
+h4s3endw
+h2s1erf
+h2s1erg
+h2serh
+h2s1erk
+h2s1erl
+hs1ern
+h4sernä
+hs4erne
+h2serö
+h2s1erw
+h2serz
+h2seth
+h2sex
+h3s2ext
+hsha2k
+h2s1i2d
+hs2im
+h2s3ing
+h3s4inni
+h4s3ita
+hs2kal
+h3skand
+hs1of
+h2sofe
+h2sop
+hs1org
+h2spac
+h4s3pani
+h2s1par
+h2s1pat
+h3spec
+h3spei
+h3sperb
+h2sph
+hs4pie
+h3spoi
+h2sprä
+h2spro
+hss4
+h1sta
+hs3tabl
+h2staf
+hst3alt
+h3st2an
+h2s3tau
+h2s3täu
+h1stec
+h1stei
+h1stel
+h4stele
+h3s4terb
+h3s4tern
+h1s2ti
+hs3tie
+hs4tief
+h2stit
+h1sto
+h2stol
+h2stor
+h1str
+hst3ran
+h4s3treu
+hs4tri
+hstro2
+hs3tum
+h1stun
+h1stü
+h2s1u
+hs2ung
+4h1t
+ht1a
+h2ta2d
+ht2ag
+ht4akt.
+ht4akte
+h2tall
+h4talo
+h2talt
+h4ta2m
+h2ta2n
+ht3ane
+h3t2ank
+h3tanz
+h2tap
+h2ta2r
+ht3arr
+ht2a2s
+h2t3asi
+h2tasy
+h2t3a2t
+h3tat.
+h3tate
+h2tau
+h4tax
+ht1ä
+h2tär
+ht3e4ber
+ht1e2c
+hte3cha
+h2t1e2d
+ht1eff
+ht1e2he
+h2teif
+h2t1eig
+h4t3eilz
+h2t1eim
+ht1ein
+h2t1eis
+h2t1eke
+h4t3elas
+hte6l5ei.
+h4telek
+h4t3elfe
+h4t3elit
+hte4m
+h2t1emi
+h2temp
+h4tenga
+h4t3engl
+h4t3enta
+h4tentf
+h4tents
+hter6de.
+hterer6s
+ht3erfü
+h6terfül
+h6tergeb
+ht3ergr
+hter6gri
+ht1erh
+hter6häl
+hter8höhu
+h6terleb
+h6t5erleu
+h6terneu
+ht5erspa
+hter8spar
+ht3erst
+h6tersta
+ht3erwä
+ht3erze
+h4t1e2se
+h4t1ess
+h3tet
+h4t1e2th
+h2t1eu
+h4textr
+h2t3h2
+h4thei
+h3thera
+h3thes
+ht4heu
+h4tho
+h2ti2d
+h2t1im
+h2t1i6n3
+ht3ine
+h4tisr
+htni2
+hto2
+h2t1ob
+htod1
+h2t1of
+h4t3oly
+h2tope
+ht1or
+h4tord
+ht3rak
+h3tran
+ht3rand
+h4t3ras
+ht3rat
+ht6rates
+ht3rau
+h4traub
+ht6raume
+ht3rec
+h5treck
+h4tref
+ht3rei
+h2trek
+h2t3res
+ht4ri
+h4t5ric
+h4t5rieg
+h4t5rin
+h2t3rol
+h2t3ros
+ht3röm
+ht3ru
+h2t3rü
+h4ts
+ht2sah
+ht2sal
+ht4s3a4n
+ht2scr
+ht4sein
+ht2sel
+ht4s3end
+ht4seng
+htse2r1
+ht4s3eri
+htsha2
+ht3s4hak
+hts3k
+ht3skal
+ht2s1o
+ht2sp
+hts3tät
+hts2ti
+hts5trau
+ht4s3tur
+ht4s3tür
+htt4
+htti2
+h3tub
+htu2e
+h2t1urs
+h3tü
+ht3z2
+hu2b1a
+hu2b1ei
+hu4bel
+hu2b1en2
+hu2bi
+hu2b3l
+hu4b5r
+hu2bu
+hu1c
+hu2fa
+hu2h3a
+hu2h1i
+h1uhr
+h1uhu
+hu2kä
+hu2k1i
+huko1
+huk3t4
+hu2l3a2
+hu2lä
+hule2
+hu2l1eb
+hu2l1ei
+hu2lem
+hu4l3eng
+hu4lent
+hu2l1er
+hu2let
+hu2lid
+hu2l3in
+hull2
+hu2lo
+hu2lö
+hul3s4
+hu3m2a
+h1umh
+2h1ums
+hu2n
+h1una
+hun3d2e
+hunde3i
+hunde3s
+2hunf
+hung2
+hun3ge
+hung4s
+hungsa4
+h1uni
+h1unm
+2hunt
+h1ups
+2hur
+hur3g2
+hur2th
+hu3sa
+hu2so
+hus2s3a
+hus4ser4
+hus2s1o
+hus2sp
+hus2st
+hu2tab
+hu2ti
+hu2t1o4
+hu2t3r
+hut2t
+hut4zen
+hut4z3er
+hut2zu
+h2ü
+hübe4
+h3über
+h4übs
+h3übu
+hüf2
+hühne4
+hüs3
+2h1v
+hvil2
+2hw2
+h2wall
+hwe1c
+h1weib
+h1weih
+hwein6sa
+h2wirr
+hy2lor
+3hym
+h1yo
+3hyp
+hy2pe.
+2hy2t
+2h1z
+hz2a
+h3z2o
+hzug4
+h3z2w
+i1a
+i2aa
+i2ab
+i2ache
+i3ad.
+ia3do
+i2af
+iaf4l
+i2ag
+i4ago
+i2a1h2
+i2aj
+ia2kei
+ia2kr
+i2aku
+i3al.
+i3a2l1a2
+ial3ar
+ial3as
+ia2lä
+i3al3b4
+i3alc
+i3al3d4
+i3a2leb
+i3alef
+i3alei
+ia3lek
+i3alel
+i3aleng
+i3alent
+i3alerb
+i3alerf
+i3alerh
+i3a4lerm
+i3a2l1et
+i3alex
+i3alf
+i3alg
+i3a2lia
+i3alim
+i3a2lin
+i3alj
+i3alk
+i5al3l
+iall2a
+ial4ler
+iall2i
+i3alm
+i3aln
+ia2lon
+ia2l1o2r
+ial3p
+i3alr
+i3als
+i3al3t4
+ia2l3u4
+i3alv
+i3al3z2
+i2am
+i3am.
+i3amp
+iampe4
+i3an.
+ian2a
+ia2nal
+ian3alt
+ia2nau
+i3and2
+ia2n1e2b
+ian2er
+i3anl
+i3ans
+ian2s1p
+i3ant
+i3anw
+i3anz
+ia1o
+i2ap
+ia3pf
+i2a1q
+i3ar.
+i2a2ra
+i4ari
+i3as.
+ia3sh
+i2asi
+ia3s2p
+ias3s
+iast4
+i3at.
+i4ate
+i3at2h
+i4athe
+1iatr
+i3ats
+i3au
+ia3un
+i2av
+2iä
+i1ä2m
+i1äp
+iär2
+i1är.
+iär3m
+i1ärs
+i1ät
+i3ä4tem
+iä2ti
+iä4tr
+iät3s4
+2i1b
+ib1art
+i2b1auf
+i2b1aus
+i2baut
+ib2bli
+i2b1eig
+i2b1eis
+ibe4n1
+i2b1ep
+i6ber6geb
+ibe1ro
+i2bim
+i2b1in
+i2blad
+i2bleu
+i3blu
+ib2o
+i2bö
+i2b3rau
+i2b3ren
+ib3ric
+i2b3roc
+ib2ser
+ib4ste
+ib2un
+i2b3unk
+i2b3unt
+ibus1
+2ic
+i3ca
+ic1c
+ice1s
+ich1a
+ich6art.
+ich1ä
+i1che
+ich1ei
+ich2er
+icherin5
+i1chi
+ich1l
+ich3le
+ich3li
+i3ch4lo
+ich5m
+ich3n
+i1cho
+ich3ort
+i2ch3r
+ich6sele
+ichsen3
+ich2s1i
+ich4spe
+ich6stie
+ich4tab
+ich4tan
+ich2tr
+i1chu
+ich1w
+i1ci
+ic1in
+i3cke
+ick1s
+ickt2
+i1cl
+ic3la
+i5cu
+i1d
+id2ab
+i3d2ac
+id1a2n
+i3d2ans
+i3dat
+id1au
+id2ax
+idä1
+i2dea
+1idee
+2idel
+idel4ä
+i4demu
+ide4n1o
+iden4se
+ide2on
+i3der
+4ider.
+iderin8nu
+ide1rö
+ider6reg
+ide3so
+ides2p
+2idia
+1i2dio
+idi1s
+idni3
+id2o
+i2dol
+2idoo
+i2dö
+2i2d3r
+id4ru
+i3dsc
+id2set
+id2s1p
+idt4
+2idu
+1i2dy
+ie3a2
+ie2bä
+ie2bl
+ie2b3re
+ie2bri
+ie4b3rü
+ieb4sto
+ie1c
+ie2cho
+iech3t
+ie2ck
+ie2d3an
+ie3de
+ie2dr
+ie1e2
+ie2f1an
+ie2fau
+ie2fäh
+ief1ei
+iefe2m
+ief3f4
+ief2i
+ie2f3l
+ie4fonk
+ief1r
+ie2fro
+ie2gl
+ie4g5li
+ie3g4n
+ieg3r
+ieg4ra
+ie2gre
+ieg4s3c
+ieg4se
+ieg4st
+ie2h1in
+ieh3r4
+i1ei
+ie1ind
+i2e2l1a
+iel3d4
+i2ele
+ie2l1e2b
+iel1ec
+iel3eid
+ie2lek
+i4elen
+ie4lene
+ie4leng
+ieler4e
+ieler6fi
+ieler8geb
+ieler6ke
+ieler6la
+ieler8lebn
+iel4erw
+ieles4
+ielf4
+ieli2d
+i1ell2
+ie2lo2b
+ie4lor
+i2els2
+iel3sz
+ielt2
+iel3ta
+iem2e
+2i1en
+i3en.
+i3ena
+ien1ag
+ien4am
+ie4nas
+i3enä
+i3end
+i2ene
+ien1eb
+i3enec
+i3e2nek
+iener6fo
+ien3er4g
+iener6la
+i3enex
+i3enf
+i3eng4
+ienge4f
+ienge4z
+i3enh
+ie2nim
+ie4n3in
+i3enj
+i3enk
+i3enla
+i3enle
+i3enm
+i3enn
+i3e2no
+i3enö
+i3enp
+i3enr
+ien2s
+i3ens.
+i3en3sa
+i3en3sc
+i3en3s2e
+ien3si
+ien3s2k
+i3en3s2p
+iens6t5er
+ienst5rä
+i3en3sz
+ien4tar
+i3enth
+i3enty
+ie3nu
+ie4num
+i3env
+i3enw
+i3enz
+ie1o4
+ier3a2
+ie2rad
+ie2rap
+i3erbun
+i2ere
+ie4reck
+ie4r3eis
+ie3r2er
+ierer3k
+ie4r3erz
+ie2ret
+ierf4
+ierg4
+i1ergi
+ierk2
+i1ern
+i3ern.
+i2erni
+ie1ro
+ie2rö
+ier4re.
+ier4s3eh
+ier3sei
+iers2t
+ier3sta
+ier3ste
+ier3te
+ierts4
+ier3z2
+ie2san
+i2esc
+i2ese
+iesen3s4
+ie3s4pa
+ie4spu
+ies6ser6g
+ies2st
+iess3ti
+iest6e
+ie1str
+iet1a
+ie4tag
+ie2tan
+ie2tap
+ie2tat
+ie2tau
+ie4t3ent
+ie4t3erh
+ie4t3ert
+ie4tha
+i4ethe
+iet3her
+ie2t3ho
+ie2thy
+ie2t1o4b
+ie2t1ö2s
+ie4t3ri
+ie2t3ru
+iet2se
+i1ett
+iet3zw
+ieu2e
+i2e1un
+ie2w1u
+i1e2x
+2if
+if1ar
+i2f3arm
+if4at
+i2f1au
+if1än
+i2fec
+i2f1ef
+if1ein
+if2e4n
+i2f1erg
+if1erh
+if2far
+if2f3l
+if2fro
+iff2s
+iff4ste
+if3l
+if1lac
+i1f4lä
+iflo4
+if4los
+i1flü
+if3r
+i1fre
+if4rev
+if2s
+if3sa
+if3se
+if3sp
+if3sta
+if4t3a
+if2ted
+if2t3ef
+if4t1ei
+if2te2l
+if2tep
+if4terk
+ifte2s
+if4t3esc
+if2t1op
+ift1r
+if2tra
+if4t3ri
+if2tro
+ift3sp
+ifts2t
+ift3sz
+if2tur
+i1fy
+2i1g
+iga1i
+i2garb
+ig1art
+iga3s4
+i2g3att
+igd4
+i6gebrau
+i4gefar
+ig1ein
+ige4na
+ige6nene
+ige4nid
+ige2ra
+ig5erwer
+ig1erz
+iger4ze
+i2g1ess
+i2gim
+i2gl
+i4glag
+i4g3lim
+ig4na
+i4gnä
+i3g4neu
+ig4no
+i3g2o
+igo1p
+ig3rad
+ig3re
+ig4ren
+i2grou
+ig3sa
+igs2ag
+ig4sal
+ig3sä
+ig4schr
+ig3s2o
+ig3sp
+ig4spa
+ig3stei
+ig4sti
+ig4s3to
+ig3str
+ig6stras
+ig3s4tü
+igung4
+2i1h
+i2har
+i5hea
+ihe1e
+ih1elt
+ihe4n
+ihe1u
+ih3m
+ih3n
+ih3r
+ihs2
+ih1um.
+ih1w
+ii2
+ii3a4
+i1ie
+i3ig
+ii3h
+i1im
+i3in
+i1i4s
+i2is.
+ii3t
+i1it.
+i1j
+1i2js
+2i1k
+ika2ge
+ik1ak
+ikaken3
+i2kakt
+ik3amt
+i4k1ang
+i6kantei
+ikanten8n
+ik1art
+ik3att
+i2k1au
+i3kaz
+ik1äh
+i2kär
+4ike
+i2keb
+ik1ebe
+ike2c
+i2k1ed
+i2kef
+i2k1ei
+ike4l1
+ike2n1
+i2k1ens
+ike2ra
+i2k1e4r2e
+i2k1er2f
+i5kerfam
+i2k1er2h
+i2ker2l
+i2kero
+i2ke3ru
+i2k1eta
+i3ki.
+i3kie
+ik1in
+i2kins
+iki1s
+i2k3l
+ik4län
+i3k4leri
+i3k4let
+ik4lim
+i3klu
+i2kne
+i2k1off
+iko1p2
+ik1o4ri
+iko1s
+i2köl
+ik3rä
+i2kres
+ik4ris
+i2krö
+iks2
+ik3sa
+ik3ste
+ik3sz
+ikt3erk
+ik4t3esk
+ik2t3re
+ikt2u
+i2k1uh
+i2kup
+i3kus
+i2kü
+i1la
+i2lab
+ila2br
+i4labs
+i2l1ac
+i2l1ak
+il3a2ma
+il1anm
+il1ans
+ilan6zer
+i2larb
+il1asp
+i2l1au
+i3laub
+i3l4aufb
+i1lä1
+i2lär
+2ilb
+ilb4l
+il2c
+il5chen
+il2da
+ild3ebe
+il4d3en4t
+il3der
+ild4erp
+ilde2s
+ildi2
+ild1o
+il2dor
+il2dr
+2ile
+il1e2c
+il1ein
+il1el
+i2lemb
+il1ent
+i4lentl
+i4lents
+i2l1erd
+iler4ei
+i6lereig
+il1erf
+iler4fo
+i2ler2g
+i2l1er2h
+i4lerkl
+il1err
+i4lerri
+il2erz
+ile4th
+il1ex
+ilf2
+ilfe3s
+il2f3l
+il2f3re
+ilf4s3
+il2gl
+2ilh
+2ili
+ili3e4n3
+iliga2
+ili4g3ab
+ilik4
+i2l1ind
+i4l3init
+il1ins
+i2l1ip
+i3lip.
+i3lips
+ill2an
+il4lenn
+il3l2er
+1illu
+il2mak
+il2m1ap
+il2m1au
+ilm1ei
+il2min
+il2mor
+2ilo
+il1ob
+il2of
+il2oh
+il2op
+i2l1or
+i3lou
+il1ox
+il4sein
+ils4to
+ilt2
+il3t4h
+i1lu
+i2lum
+ilung4
+il1ur
+i3lus
+ilü4
+2ilv4
+il2zar
+il2zau
+ilz1er
+il2zwa
+imad2
+ima3i
+im2al
+i2m3anh
+im1ans
+i2marc
+im3aren
+i2m1arm
+i2m1art
+im4at
+imat5sc
+ima4tur
+i2m1aus
+i2maut
+1imbi
+i2meg
+im1ein
+i2mej
+i2mek
+i2mele
+i2melf
+im2en
+i2m1erf
+i2m1erl
+i2m1erz
+i4me3sh
+i2meti
+i2mew
+i2m1i2d
+i2mim
+i2m1ind
+i2minf
+i2m1ins
+im2mä
+im2mei
+immen1
+imm3ent
+im6menth
+1immo
+2imo
+i2m1ob
+i2mo2p
+i2mö
+1imp
+imp2fa
+im3pfo
+imp2s
+im3pse
+im3sph
+2imt
+imt2e
+im3t2i
+imt3s2
+imtu2
+2imu
+im2um
+im1urk
+2in.
+in3ab
+ina2be
+in1a2c
+in1ad
+i4n3ae
+i3nald
+inaler4
+ina6lere
+in2alp
+in1am
+in2an
+in3ana
+in3ann
+i2narb
+i2narm
+in2ars
+in3att
+i2n3au
+2inä
+i2n1äh
+in2är
+in1äs
+2ind.
+inda2
+ind2ac
+in2dal
+in2dan
+2indä
+in3de
+2inde.
+ind4eid
+2inden
+ind5erke
+inde3sp
+1index
+ind2i
+1indik
+in3dö
+2indr
+ind4ri
+ind3se
+1indus
+in3d2ü
+2ine
+i4ne4ben
+in1e2c
+i3nee
+i2neff
+in4elen
+in2em
+ine3nä
+i2neng
+i4n3enzy
+i5ner.
+i4n3erbi
+in2erh
+in3erle
+i6ner6leb
+iner4lö
+i4n3er4tr
+i4nesk
+in2et
+in1eu
+ine3un
+ine2x
+in3f4
+1infiz
+1info
+2ing
+4inga
+in2g1af
+in2g1ag
+in2g1al
+in2gam
+ing1ar
+in2g3at
+3ingeni
+in3g2er
+in4g3erw
+in2gl
+in3gla
+in3glä
+in2gor
+ing4s3am
+ings6por
+ing4s3pr
+1inhab
+2inhar
+2inhau
+2inhe
+in2i3d
+2inie
+2inig
+ini3k4r
+2inis
+ini3se
+init2
+i3nitz
+3inkarn
+1inkas
+in4k3ent
+ink4er
+in3k2ü
+inma4le
+4inn.
+inne4n
+in4ner4m
+4innl
+in2nor
+1innta
+2ino
+in1od
+in3ols
+in1or
+ino1s
+inost2
+i3no3t
+i2n1ou
+i1nö
+in1ö2d
+2inri
+ins2am
+in6samt.
+insch2
+2inse.
+in2seb
+2insed
+2insen
+ins2i
+2insk
+in4sm
+3instal
+in4s3tät
+2inst2e
+ins4tip
+3instit
+ins4to
+4instra
+ins4tri
+in4strü
+1insuf
+ins3umz
+in2sur
+in3s2z
+2inta
+in3te
+2inte.
+1integ
+2inth
+inthi1
+int2o
+2intö
+2in3t4r
+4inträ
+3intrig
+int3s
+i2n1u
+i4nuh
+in3unz
+4inverm
+invil2
+i1ny2
+in3z2e
+inz2i
+inz2u
+in3zwä
+i1ñ
+2i1o
+io1c
+io2d
+io3e4
+i2of
+iof4l
+i2oh
+io3k6r
+i3ol.
+i3om.
+io3me
+i3oms
+ion2
+i3on.
+ion3an
+io2n3au
+ion3d2
+io4nee
+i3ong
+i3onn
+io2nor
+i3ons3
+i2ony
+i2oo
+i2o1p
+i3o4pf
+i3opt
+i2or
+i3or.
+i3orc
+ior2e
+iore4n
+io1r2h
+i3orp
+i3ors
+i3ort
+i3os.
+io3sh
+io5ska
+ios2p
+i2o1st
+ios2u
+i2o3sz
+io3t
+i3ot.
+iot4r
+i3ots
+i2ou
+i2ov
+i3o2x
+i3oz.
+i1ö2k
+i1ön
+i1ös.
+i1öst
+2ip.
+i1pa
+ip2an
+i1pe
+i3per
+2ipf2
+i3pfan
+iph2
+2i1pi
+ipi3el
+ipi3en
+ip2pan
+ip3pe
+ipp1f
+ip4pl
+ip3pu
+i1pr
+2ips
+ip2sa
+ip2sei
+ip2sp
+ips3t
+ip4sta
+ip4stü
+ipt2a
+ipt2u
+2ipu
+2i1q
+i1r4a
+i3ra.
+2i3rad
+i3ras
+irat2
+i1rä
+ir1äh
+ir2b3l
+ir1c
+ir2ch1o
+ir4e
+i3ree
+2irek
+ire4na
+i3ré
+irg4s
+ir2he
+ir2i
+iri3a
+2i5rig
+2irk
+irke4n
+ir4kene
+ir2k3l
+irli4n
+ir2m1ag
+ir2mak
+ir2mau
+ir2mä
+ir2m1ei
+irme4n1
+ir2m1o2
+irm4th
+ir2mum
+ir4munt
+2irn
+ir2n3a
+ir4nat
+ir2no
+i3ro
+1iron
+i1rö
+irpla4
+irre4l
+ir2rh
+ir3sche
+ir4schl
+ir4schm
+ir4sch3r
+ir4sch3w
+ir3se3
+ir3s2h
+ir2st
+irt2s3t
+2iru
+ir1u2m
+iru2s1
+i3r2ü
+i3sac
+i4samp
+i4s1amt
+is2ap
+isa2r
+is3are
+i3sat
+i2sau
+is3auf
+isau2g
+i2säh
+i2s1än
+2isb
+i2sca
+i4schar
+i3s2che
+i4schef
+i4sch3e4h
+isch3ei
+i6schemi
+i6scher6z
+i4schin
+i5sching
+i2schl
+i2schm
+isch3ma
+i4schna
+i4sch3re
+isch3ru
+i4schüb
+i4schwa
+i6schwir
+i4schwo
+isch3wu
+i4schwü
+i2scr
+2ise
+ise3a
+ise1e
+iseh2a
+ise3hi
+is4eind
+i4seint
+is4e3li
+i6sel6ter
+ise2n1
+ise4n3a2
+is2end
+isen3s
+ise4r3ei
+is1erg
+i2serh
+i2s1erm
+i2s1es4s
+is2et
+i4s3etat
+i3s2eu
+2isf
+4ish
+isi2a
+i2s1i2d
+isin3g4
+isi1s
+i4ski
+i4sku
+is3la
+3islam
+2isma
+2ismi
+i2s1of
+1i2sol
+3isom
+is2o2n3
+isonen4
+iso6nend
+i2sop
+is1org
+is1ort
+3i2sot
+2isp
+is1pa
+i2spar
+is1pe
+is1pic
+is2por
+i2spro
+is3sa
+is4s1ac
+is4sau
+iss3che
+is6schen
+iss3erf
+iss2po
+is2st
+is3sta
+iss3tr
+is3stu
+is2sum
+is4tab
+ist3a2c
+ist2an
+is3tang
+i1stat
+is3täu
+ist4e
+i1stel
+iste4n
+istes3
+i1steu
+ist2id
+i1stil
+is3t6o
+is4toc
+is3tör
+is3tr
+ist4ra
+ist3rei
+i1stro
+is4tru
+i1stü
+i3suf
+isum3p
+i2sü
+i1ß
+iß1er2s
+it1ab.
+it1abs
+ital3a
+it1alt
+it1a2m
+it1an
+ita3ne
+it3anr
+ita2po
+it1app
+it1a2re
+it1art
+i3tat
+it1au
+i3tauc
+i2taut
+4itä
+it1änd
+i2t1äs
+ität2
+it1eff
+i2t1ei
+it2eic
+2itel
+ite4l1a
+i4telek
+i2temp
+ite2n
+iten3s2
+i4tents
+i2tepo
+i6tereig
+it2erö
+i8t7ersche
+i4t1esk
+i2t1ex
+i3text
+i5thr
+i2thy
+i5tic
+i2tid
+i5tig
+1itii
+iti3ker
+it1in1
+i4tiso
+iti3sp
+iti2v5a
+itmen2
+4ito
+it1ob
+ito4be
+i5toc
+i2t1of
+it1o2p
+it2os
+2itr
+it3raf
+it3ras
+it3rau
+it3räu
+it3re
+i4tref
+it4ret
+it3rob
+it3rom
+i2t3run
+it2sa
+its1ag
+it2s1e
+it4se2h
+it4s3e2r1
+it2s1o
+2itt
+it2teb
+itt3hä
+it2t1o4b
+it2top
+it4tri
+itt3rol
+itt6schi
+itt4seh
+itt4sei
+itt4sor
+itt2sp
+itt4sti
+it1uh
+it1ums
+it2ung
+i2tuns
+ituran4
+it1urg
+itut4
+i3tü
+it2ze2c
+itz2er
+itz3erg
+it6zergr
+it4z3erl
+it2z1w
+2i3u2
+iu4m1
+iuma2
+ium4se
+iun2
+ius3t
+i1ü4
+2i1v
+i2v1ad
+i2v1ak
+i2v1am
+iv1an
+i2v1ä
+i2veb
+i2v1ef
+iv1ei
+iv1elt
+ive4n
+iv1ene
+i2v1ent
+ive3re
+iver8folge
+iv1erh
+iver4kl
+iv1erl
+iver3s
+ive3s
+i2v1e4x
+iv1ins
+i3vol
+i2vr
+i2vun
+i2v1ur
+2i1w
+2i1x
+i2xa
+ix2em
+i3xi
+ixt2
+4i1z
+i2z1ag
+i2zan
+i2z1ap
+i3z2as
+iz1au
+i2zaus
+i2zän
+izei3c
+izeits4
+i2zele
+ize2n
+i4zener
+i2z1erl
+iz1ir
+i2zo2f
+i2zö
+i2zuna
+i2z1w
+i3z2wi
+izz4a
+í1l
+j2a
+jab4
+ja1c
+jah4r3ei
+jahr2s
+ja3l2a
+ja3ne
+jani1
+jani3t4
+ja5ru
+jas2o
+ja1st
+jat2
+je2a
+jean2s
+je2g
+jek2ta
+jek4ter
+jek4tin
+jekt3o2
+jektor4
+jek4t3r
+je2p
+jes3t
+je2t1a
+je4t3h
+je2tin
+je4tor
+je2t3r
+jet3s2
+jet3t
+je2t1u2
+je3v
+je3w
+ji2a
+jit3
+ji2v
+joa3
+jo2b1
+job3r
+jo4da
+jo2i
+jong2
+jo1r2a
+jord2
+jo2sc
+3jou
+jou2l
+j2u
+ju2b3l
+jugen6
+jugend3
+ju1i
+ju2k
+ju3l2
+jung3s4
+ju3ni
+ju3r4a
+jur2o
+jus3t
+ju3t2e1
+2j1v
+1ka
+ka3ar
+2k1abb
+kab2bl
+2kabd
+2k1a2ben
+2kabf
+2kabg
+2kabh
+2kabn
+2k3a2bo
+2k1abs
+2k1abt
+2kabw
+2kabz
+ka1c
+kade2r
+2k1adm
+2k3a2dr
+3kadu
+2kadv
+ka1f4l
+ka1fr
+kaf3t2
+kag2
+kaga3
+2k1age
+3kah
+ka1ho
+ka1in
+kaken2
+ka1k4l
+2k1akt.
+4kala.
+kala3b4
+ka2lan
+kal3d
+ka2leb
+ka4l1eh
+ka4lens
+kal3eri
+3k2alk
+kal2k1a
+kal4kan
+kal2k3l
+kall2i
+2k1allt
+ka2lop
+ka2l1os
+kal4tex
+kal4th
+ka2lu
+k2amt
+kan4al
+ka4n1a2s
+ka2nau
+3kanä
+2kanb
+kan3d4
+2kanda
+2kandä
+kan2e
+2kanf
+2kanim
+kank4
+2kanl
+2kanom
+2k1anor
+2k1ans
+k2ans.
+kan4tar
+6k5antenn
+2k1anth
+ka3nu
+4kanw
+2k1anzu
+2kanzü
+ka2o1
+3kara
+2karbe
+2karc
+k2ard
+kar3d2a
+k1area
+k2arg
+ka3r2i
+kari3es
+k2ark
+2k1arm
+kar2pf
+k2ars
+k2ar3ta
+k2arte
+k1arti
+4kartik
+karu2
+k2arw
+3k2asc
+kasi1
+kas2o
+ka4sp
+ka2s3t
+2k1ast.
+ka4ste
+kas6tras
+3kasu
+ka3sz
+ka2tan
+3kateg
+ka3t2h
+ka4t3r
+2katt4
+kau4fer
+kau2f1o
+kauf4s3a
+kauf4sp
+kaufs7tem
+k2aus.
+2k1auss
+2kausw
+kau3t2
+2kauto
+2kaz
+1kä
+k1ämi
+2k1änd
+kär2
+2k1ärg
+kä2s1c
+käse3
+4k3b4
+kbo4n
+kbu2s
+kby4
+2k3c
+2k3d4
+ke2ben
+2k1e1c
+ke2di
+k1ef
+2keff
+kefi2
+kege2
+ke2gl
+ke2he.
+ke2hen
+kehr2s
+kehr4s3o
+2k1eic
+2k1eig
+kei2li
+ke2im
+2k1ein
+ke1in2d
+kein4e
+k1ei1s
+2keise
+keit2
+ke2la
+kel1ac
+ke3lag
+ke4l3am
+kel1au
+ke2lä
+kel3b4
+keld4
+kel3eis
+2ke2lek
+ke2l1en
+ke2l1er
+kel7l4e
+kell2i
+ke2l1o2
+ke2lö
+kel3sk
+k4elt
+ke2mi
+2k1emp
+k2en.
+ken1a
+ken3au
+kend4
+ken3dr
+ke2n1e2b
+kenen1
+ke4nene
+ke4nens
+kener4n
+4ken4gag
+k5en6gel.
+ke2nim
+ken3in
+4kenlad
+4kenläd
+kenn2a
+kenn2e
+ke2no
+4kensem
+ken3si
+ken3s2k
+ken5s6tei
+ken3sz
+k3en4te.
+ken6ten.
+2kentf
+2k1entg
+ken3th
+2k1entl
+2k1ents
+2kentw
+2kentz
+ken3z2
+2ke1o2
+2kep
+ke2pl
+k2er.
+ke1ra
+ke2ran
+ke2rau
+ke2r1ä
+ker4ble
+k2erc
+2kerd
+ke2re2b
+ke3reig
+ker3ein
+4kerfah
+k4erfam
+ker2fo
+ker5g
+k3ergeb
+2kergu
+ke6rin6nu
+kerin6st
+kerin4t
+k3erken
+k2erko
+k2erl
+k3er4lau
+k3erleb
+k6erlebe
+ker2na
+ker4nei
+4k3erneu
+ker6n5eur
+k1ero
+ker8oberung.
+ke1rod
+2k3eros
+ker4reg
+k2ers.
+2kersa
+kerz2
+k1erz.
+ker4zeu
+2k1er2zi
+k6es.
+ke2sa
+k1ese
+ke2sel
+kes2sa
+ke4t1a
+ket2ag
+kete4
+ke4t1eb
+ke4tel
+ke4th
+ket3ha
+ke2tu
+ke1up
+keu6schl
+2k1e2va
+2k1e2x
+key3
+4k3f4
+2k3g2
+kga4s1
+kge3s4
+2k1h4
+kho3m
+k3hu
+ki3a
+ki4ad
+kia2r
+ki1c
+2ki2de
+ki3d4r
+k2ids
+2kidy
+ki2el
+kie4lei
+kiel3o
+2kiern
+kier2s
+kier4st
+kie2z
+ki1f4l
+ki1f4r
+ki3k4
+2ki3l2a
+2kilä
+ki3lo
+3kin.
+4kindex
+2k1indi
+2k1indu
+2k1inf
+king3s
+2kinh
+k2ini
+kini3k2
+k2inn
+ki3n4o3
+kinos2
+kin3s
+2k1inse
+2k1inst
+2k1int
+ki3or
+kio4s
+3kir
+2k1i2so
+kis2p
+kis3s
+kist2
+kis4to
+kiv2
+kive4
+2kiz
+2k3j
+2k1k4
+kkab4
+kl4
+4kl.
+4kla.
+2k1lac
+klan2
+2kland
+klan3du
+k4lar
+k1last
+k1lauf
+k3laug
+2kläd
+k2lär
+k2le
+4k3le.
+kle2br
+k3leg
+2kleh
+k3leit
+k3lem.
+2k3ler
+kle2ra
+2k3leu
+kle3us
+2klic
+k2lien
+k2lif
+2klig
+3k2lim
+k2lin
+k3lin.
+3k4lina
+k4link
+k2lip
+k2lir
+k2lisc
+2klist
+klit2s
+2k3liz
+2k3loc
+klo2i3
+2klok
+3k4lop
+k3lor
+2klose
+klost6
+2klöc
+2klöf
+k2löst
+k4löt
+k1lu
+klu4b
+k2lud
+k2lug
+k2lum
+klung4
+2klux
+2k1lüc
+2kly
+2k1m
+4kma
+kma2la
+k2n2
+2k5nach
+2k3nad
+2knah
+2k5nam
+2k3näp
+k3ne
+k4nec
+kne1e
+2knes
+2knetz
+2k5neu
+2kney
+2k5niv
+kno2b3l
+k4nol
+2knorm
+2knov
+k3nu
+2knum
+k6nur
+1ko
+ko5ad
+ko2al
+2k3oas
+kobal2
+2kobj
+kob4s
+2k1o2fe
+kof3f2
+koh4a
+kohl2e
+kohle3i
+koh3lu
+koka3
+ko3l2a
+ko3le
+kol2k3
+3kom
+4k3omn
+ko4mu
+k2on
+ko2nem
+kon2i
+kon3s4
+kont6e
+ko2nu
+2kop.
+2ko1pe
+kopfa2
+kop4fen
+kop6f5err
+2kop3s
+ko3pte
+2kopz
+ko3r2a
+kor2ba
+kor2bl
+kor2br
+2k1orc
+korden3
+korder4
+kor6derg
+ko2rel
+2k1org
+ko3ri
+kor3m
+kor4nac
+kor2n3ä
+kor4no2
+2korpi
+k2os
+ko4sk
+ko2sp
+3kost
+ko2stü
+k3osz
+ko2ter
+ko3ti
+kot4r
+kot3s2
+kot4tak
+k1ou
+ko3un
+3kow
+ko2we
+2k1o2x
+1kö
+k2öf
+k1öl
+2k1p2
+2k3q
+k2r2
+2k3rad
+2k3rah
+k4ral
+k3rats
+2kraum
+k4raw
+k4raz
+k4räc
+2kräd
+k4rän
+2k3räum
+2k5re.
+2k3reak
+2k3real
+2k3rec
+2kred.
+2k3rede
+2kredn
+2kredu
+2k3ref
+4kreg
+2k3reic
+kre1i2e4
+kreier4
+k3reif
+2k3reih
+2kreim
+krei6sei
+krei4st
+kreli1
+k3ren
+k3res
+2kresu
+k3rev
+2k3rh
+2krib
+2k3ric
+2k3ries
+2krip
+k3risi
+krob4
+k4roch
+4k3roh
+k4roi
+k4rok
+k4ron
+k4rop
+2krot
+3kroth
+k3rou
+2kröh
+2kruf
+2k3run
+4ks
+ks3a2b
+k3sac
+ksa2k
+k4s1amt
+k2san
+ks3a2r
+k2sau
+k2sav
+k2säh
+ksch4
+ks2chi
+k2s1e2b
+k2s1ec
+ks1ei
+ks2eid
+ks2eif
+k4seind
+ks2end
+k2s1eng
+k2s1ent
+ks1er
+ks2ere
+k2serf
+k2serg
+k2serk
+k2serl
+k2sers
+k2serw
+k2s1e2v
+k2sex
+ks3ha
+k2s1i2d
+k2s1in
+k2s1is
+ks3kl
+k4sm
+ks1o
+ks2on
+k2sop
+k2so2r
+k2sö
+ks1pa
+k2spal
+k3s2pat
+k2spä
+k3spe
+ks2pel
+k2sph
+ks2por
+ks2pul
+ks3s4
+k1st2
+k2stal
+k4s3tanz
+k3stat4
+k3stäl
+ks4tel
+ks2tep
+k4stier
+k2stit
+ks4tol
+k2stor
+k4strop
+k2stuc
+k2stum
+k2stur
+k2stüt
+k2s1u
+k3sul
+ks2zen
+4k1t
+kt1abr
+kt1abs
+k2t1ad
+kt1akt
+k3tal
+kt1am
+kt1an
+kt2and
+k2t1a2r
+kta4re
+kta3ri
+k2t1au
+kt3aug
+ktä3s
+kt1äu
+kt1ein
+k4t1ela
+kte4n1
+kten3s2
+k2tent
+k4tentf
+k4tents
+kten3z
+kte1ra
+kt4ere
+k4t3erfo
+kt1erg
+k2t1erh
+k2terö
+kte3ru
+kt1eta
+k2tex
+k2t3h
+k2ti2d
+kti2me
+kt3ing
+kt1ini
+kt3inn
+k2tins
+ktion4
+kt2is
+kti2s1e
+kti4ter
+k2t1of
+k3t4ran
+kt3ras
+k2t3rau
+k4tref
+kt4ro
+ktro1s
+kt3run
+kt3rü
+kt3s
+kts4a
+kts2el
+ktsen1
+kts1o
+kt4sor
+kts2pa
+kts4t
+kts2ti
+kt1s2z
+ktt2
+k3tub
+kt1ums
+k2tuns
+kturen4
+k3tü
+kt3z
+ku2al
+ku1c
+kud4r
+3kug
+ku2h
+2k1uhr
+ku3la
+ku3l2e
+ku3l2i
+4kulp
+kul4to
+kul2tr
+kum2e
+2kumg
+2k3uml
+kum2s1
+k2u3n2a
+kun3da
+kunden3
+kung4
+kun4s4
+kunst3
+2kunt
+2kunw
+2k1up.
+kur2bl
+ku2rei
+kuri2e
+kuri4er
+2k1urk
+ku2ro
+kurs1c
+kur2sp
+kur4ste
+kur4str
+2k1urt
+kus3a2r
+ku4schl
+ku2sp
+ku2s3t
+ku2su
+2kut.
+1kü
+kü1c
+3küne
+3kür
+kür4s
+2k3v
+2k1w
+k3wa
+2k3z2
+kze3l
+3la.
+la3ar
+l1ab
+3l2ab.
+la3b2a
+l2abä
+2labb
+lab2br
+2labd
+2la2ben
+4labf
+4labg
+2labh
+3labil
+la2bit
+2la2b3l
+2labn
+3lab2o
+4labo.
+la3b4ra
+2labs
+la2bus
+2labw
+2labz
+la1ce
+la2ce.
+l2ache
+lacks2
+1lad
+2l1ada
+2ladd
+3laden
+la3d2i
+2ladj
+2l1adl
+2ladm
+2l1a2dr
+3l2adu
+2laf
+la2fa
+la2f1ei
+laf1r
+laf3s
+laf3t4
+la2fu
+3lafü
+la2g1a
+lag3d
+l2ager
+4lagg
+la2gio
+lag3l
+la4g3n
+lago4
+la2gob
+2la1ho
+3lai
+lake2
+la2kin
+l2akk
+la1k4l
+la2kro
+lak3t
+2l1al
+3lala.
+la2lar
+3lali
+4lalt
+l2ama
+lami3t
+lam2m1a
+1lammf
+2lamn
+la2mor
+l2amp
+2l1amt
+lamt4s
+la4mun
+la2na
+la3nad
+la3nan
+la4nat
+la4nau
+2la4nä
+3l2and
+lan2da
+lan4dam
+land3au
+lan6d5erw
+lan6d5erz
+lan6d5inn
+lan2d3r
+la2nem
+lan3erd
+laner4f
+2lanf
+lan6g5esc
+lang3s4
+2lanha
+l2anhe
+2lanl
+2l1ann
+l1ano
+la2nof
+2l1anp
+2lans2
+l1ansi
+2lantw
+2lanw
+lan2z1w
+3lao
+2l1apf
+la2ph
+l1a2po
+lap2pl
+la2r1an
+2larc
+lar1e2b
+la2r1ei
+la2rel
+la4rene
+larf4
+lar3g
+lar3ini
+2larm.
+la2ro
+2l1arom
+l1ar3t
+lart4h
+l3arti
+3laru
+l2as.
+la4sam
+la4sä
+4lasd
+la5seb
+la4sei
+la4s1e2l
+l2asg
+2lash
+la2sin
+la2sis
+2lask
+la2so
+2la4sp
+3lasser
+lass4tr
+l2a2st
+las4t3an
+la4ste
+las4t3ri
+la4stu
+lat2ak
+la3t2e
+la4tel
+la5t4i
+2l3atl
+2latm
+lat2o
+la2tö
+la2t3ra
+lat4ri
+lat2s
+lat3st
+2lat2t1a
+lat4tan
+lat4tex
+lat2th
+lat4t3in
+lat2t3r
+latzer4
+1laub.
+lauben6s5
+lau2b3r
+laubs1
+laub4se
+lau4fin
+lau2fo
+lau4fri
+1laug
+lau3gl
+2laun.
+la4us
+3l2aus.
+2l1ausb
+lau6scha
+2lausd
+2lausf
+2lausg
+2lausl
+2lausr
+2l1auss
+2lausw
+2lausz
+2lauto
+lau2tr
+la3va
+lave4n
+1law
+lawa4
+l2ay
+lä1c
+3läd
+2l1ähn
+2lämt
+1länd
+2l1äpf
+2läq
+lär4mar
+l1ärme
+2lärz
+lä2s1c
+2lät
+2läub
+2läuc
+2läue
+1läuf
+2läug
+2läx
+1là
+4l1b
+l3bac
+l2bant
+lb3a2ri
+lbau1c
+lb1ärm
+lbb4
+lbby4
+l4b3eink
+l4b3eise
+lbe4ral
+lbe3rei
+lberin5
+lbe7s
+l4b1e4ta
+l2b1id
+l2b1ins
+l3b2lat
+l3blä
+lb3le
+l2bled
+l2bli
+l3blo
+l3b2lö
+l3b2lu
+l2b1o2ra
+lb3rea
+lb2s
+lb3sa
+lb3se
+lb4sh
+lb3si
+lb4sk
+lb3so
+lb3sp
+lbs4t
+lbst3ac
+lbst3ei
+lbst1u
+l2b1uf
+l3bum
+lbu4n
+lbzei2
+2l1c
+l3ca
+l3che
+l4chei
+l4chent
+l3chi
+lch3le
+lch3li
+l3chlo
+lch3n
+lch1ob
+lch3r
+lch3s2
+lch3ü
+lch1w
+l2ck
+l3cl
+l3co
+4l1d
+ld3a2b1
+ld2ac
+ld3a2ck
+l2dad
+l2daf
+lda2g
+l2d1ah
+l2d1ak
+l2d1al
+l2d1a4n
+ld3ane
+lda2r
+l2d3ari
+ld1arm
+ld1ass
+l3dat
+l4d3ato
+l2d1au
+ld3aus
+l3däm
+ld1är
+ld1ät
+l3de.
+lde4ben
+l2dein7
+l2deis
+l2d1elf
+l2d1e2mi
+l2d1ems
+lde4na
+lden5erg
+l4dentl
+l3der.
+l4d3erfa
+l6der6geb
+ld1erh
+l4der4he
+l3d2erl
+l6d5erlas
+l3d2ern
+l2d1er2p
+lder4tr
+lde3sa
+l2d1es2s
+lde3str
+l2dex
+ld1id
+ld1i4mi
+l2dob
+l2dop
+ldo2r
+l2d1ori
+ld2os
+ld2ö2
+ld3r
+ld4ram
+l2dran
+l2drec
+ld5rie
+ld4ris
+l3d4ru
+l2drüc
+ld3sa
+lds4an
+ld3st
+ldt4
+ld3th
+ldt5s
+ld3tu
+l2d1ul
+l2d1um
+ldwes4
+1le
+le2ad
+le3ar
+le2as
+leben4s3
+le2bl
+le2b3re
+2lec
+lech1a
+le2chi
+lech7t6e
+le2er
+le3f2a
+2l1eff
+le2g1ab
+leg1as
+le2gä
+lege1i
+le2gl
+lego3
+leg4r
+3leh
+4lehe.
+leh3r2e
+4lehs
+4leht
+lei4ble
+l2eid
+leif1a
+lei4fan
+lei4fei
+leifer6g
+leif3s
+2l1eig
+3leih
+lei3l2
+leim3p
+l2ein.
+l2eind
+lein4du
+l4eine
+lei6nerb
+le2inf
+le2ini
+4leink
+4l3einsa
+2leint
+l2einu
+le4is
+leisch5a
+lei8schei
+lei6scho
+lei6sern
+l1eisf
+leis6s5er
+l4eist
+lei4str
+lei4ßer
+l2eit
+lei2ta
+lei4to
+leit3sk
+leit3s4t
+3leko
+2lektr
+2lekz
+3l2ela
+le2le
+le3lei
+2lelek
+4leleme
+le3len
+le3les
+2lelf.
+l2eli
+l2em.
+le2mau
+le2m1ei
+3lemes
+3lemet
+lem1o2
+le2mor
+2lemp
+lem3s
+le2mu
+le4mun
+l4en.
+len1a
+le4na2d
+le4n3an
+le4n3a4t
+2lency
+4lendet
+l1endp
+4lendun
+le2n1ed
+4lenerg
+le4neur
+4leneuv
+len4gag
+len4kau
+len4k3lo
+len4klu
+l1enni
+len6sein
+4len4sem
+len3ska
+len3sz
+2lentf
+2l1entk
+4lentla
+2lentn
+4l3en4tro
+4l3entw
+lent4wä
+5lentwet
+2lentz
+2l1enzy
+leo2f
+le1os
+2lep
+3lepa
+3lepf
+4l1e2pi
+3lepr
+lep5t
+l2er.
+l2e1ra
+le2rag
+le2rap
+le2ra2s
+le2rau
+le2r1ä
+le2re2b
+ler2e3c
+l3ereig
+le4r3ei4m
+le4r3eis
+le2rel
+le4reng
+le4rerg
+lerer5k
+le4rers
+l3erfas
+2l1erfo
+l2erfr
+l2erfü
+l1erg
+l2erga
+l4ergef
+3lergeh
+6lergen.
+l4erger
+l4erges
+3l4ergew
+2lergi
+l2ergl
+l2ergr
+4l3erhol
+lerin4s
+lerk2
+l2erka
+2lerke
+l1erkl
+4lerklä
+l4erkle
+l2erko
+ler3kr
+ler3l
+5l6erlebe
+3l4erlei
+2lermä
+ler4nal
+3l4erne
+ler4nei
+2l1erö
+3l2erra
+ler4ric
+l4ers.
+l1ersa
+lers2t
+ler4sto
+le2rup
+l4erwa
+ler4wer
+2ler2wo
+2l1erz
+ler2zä
+l3erzeu
+ler2zo
+l4es.
+les2am
+les4e
+le3sei
+2l1esel
+le3s4h
+lesi1
+le3sk
+les4ki
+les2ko
+le2spo
+lest6
+le1sta
+leste3r
+lester6i
+les2ti
+le1sto
+le1str
+3lesu
+4lesw
+2lesy
+2le2tap
+2le2tat
+le2thi
+let2i
+letsche6
+let4tel
+let4top
+lett1r
+letts2
+le2u
+4leue
+3le3u2f
+l2euk
+2l1eul
+le3unt
+2leuro
+3l2eut
+le2vol
+2lex
+3lexik
+le2xis
+4l1f
+l3fah
+l2f1ec
+lfe1e
+lf3einh
+l2feis
+lf2en
+l4ferei
+lfe4rel
+lf1erl
+l3fi
+l3f4lä
+lf3led
+lf3lo
+l3f4lu
+lf3ram
+lf3res
+lf4ru
+lf4rü
+lf2spe
+lf2s3ti
+lf2su
+lfun2
+lfur1
+2l1g
+l3gas
+lga3t
+lgd4
+lgen2a
+lgens4
+lgeräu3
+l2geti
+l3g2i
+lg2lö
+l3go
+lg4p
+l3g4ra
+l3g4ro
+lgung4
+2l3h2
+4lhe
+3lhi.
+1li
+li2ad
+li4am.
+lian2g
+li2ast
+3lib4
+libi1
+li1c
+lich4ta
+lich4to
+4lick
+li2cka
+li2cl
+li3d2a
+2l1ido
+li4ds
+3lie.
+liebe4s5
+li1efa
+3liefer
+li1efk
+li3efl
+lie4n1a2
+li3ene
+lien3s
+lie4rei
+lier4sp
+lie2s1c
+3lig
+li4g3ers
+lig4n
+lig4ra
+li2gre
+li3ker
+lik2o
+likop4
+lik2sp
+lik4ter
+lik4t1o2
+lik2u
+li3l
+lil2a
+li3m2a1
+limas4
+limat4
+2limm
+3limo
+2limp
+lin2a
+li3nar
+2l1indu
+li2nef
+li2neh
+li2nep
+li2nes
+2l1inf
+2l1inh
+li5nie
+lin1it
+2l1inj
+lin4kan
+lin4kar
+link2s
+li2nol
+l2ins.
+l2insa
+4linsel
+2linsp
+2linst
+2l1insu
+2linsz
+2l1int
+li3nu
+2l1inv
+2linz
+li2o
+li4om
+3li1pf
+3lipt
+3lis.
+li3s2a
+li3schm
+li4schu
+4lis2h
+li3shi
+2l1isl
+2lisol
+2lisot
+li2sp
+liss4
+3list
+lit4a
+li2tal
+li3t2ä
+l2i3t2e
+li4t3r
+lit1s2
+lit3se
+lit3sz
+li3tu
+li6tun
+li4tur
+litz4er
+3liu
+liv2e
+li2vea
+li2ves
+livi3e
+li3vr
+4lixi
+li2zau
+li2z3ä
+lizei3
+4l3j
+2l1k
+l3kale
+lk1alp
+l3k2an
+l3kap
+l3kar.
+lk1erd
+lke3r2e
+lk2l
+lk3lad
+l3k4las
+lk3lic
+l3k4lu
+lk2men
+lk4ne
+lk5ner
+lkor2b1
+l2k3ru
+lk2s1
+lkse2
+lk4spe
+lks3t
+lkt2
+lk2ü
+4l1l
+l2labk
+ll2abr
+l2labt
+l3labu
+l3lage
+lla3gl
+l2l1am
+ll3a2ma
+l3lame
+ll2anb
+lla4ner
+l3lans.
+ll4anwa
+ll1anz
+ll1arm
+l4latm
+ll3att
+ll3aufg
+ll1aus
+ll1äm
+l2lär
+llb4
+llch4
+lld4
+ll5ebene
+l3lec
+ll1ech
+lle3er
+l2l1ef
+ll1eic
+ll1eim
+ll2eis
+l4leise
+lle2la
+l3len.
+lle4na
+llen3dr
+ll5en6dun
+l4lentf
+l4lents
+l3lep
+l3ler.
+lle2ra
+ll2ere
+l6lereig
+ller4fo
+l8lergene
+l4lergo
+l4l3ermi
+l4l3ernt
+ll3ertr
+ll2es
+ll1exe
+llf4
+llg2
+lli4gan
+l2limb
+l2l1ind
+l4linf
+ll1ins
+ll3k4
+ll3l2
+ll5m2
+ll3n2
+ll1ob
+l2lobe
+l2lof
+ll3ol
+ll1opf
+ll1or
+l4lorb
+l2lo2ri
+l2l1ou
+l3low
+ll2säu
+ll2s1es
+ll3ska
+ll2spr
+ll3t
+llt2e
+llt2i
+llti2m
+llts2
+ll1ur
+llus5t6
+l3ly
+ll3z2
+2l1m
+l2m3a2b
+l2m1ad
+lm1a2ge
+lm1aka
+l2m1a2m
+l3mana
+lm1apf
+lm1art
+lm3att
+lm1äst
+lmbu2
+lm1c
+lmd2
+lm3e4dit
+l2m1ef
+l2m1e2p
+lmer2
+l2m1erf
+l2m1erl
+l2m1erz
+l4messa
+l2m1id
+lm1ind
+lm1ins
+l2mof
+lm1orc
+lm3p2
+lmpf4
+lm3s2k
+lms6t
+lm3ste
+lm3s2z
+lm3t4
+l2mum
+l4munt
+4ln
+lna2r
+ln3are
+lnd2
+l3n2e
+lnes2s
+l2nin
+lnus2
+l1nü
+l1ny
+1lo
+lo4ak
+3lob.
+l2oba
+3lobb
+lobe2s
+2lobj
+l1o2bl
+l2obr
+lob4ri
+lo4chel
+2loe
+l1of
+lo2fe
+lo4gh
+lo2gl
+lo2gor
+lo2gre
+loh2e
+4l1ohr
+loi4r
+3lok
+4l3okk
+lo2k3r
+5loks
+l4ole
+2l3o2ly
+lomä3
+lo2min
+lo4nin
+lo2n1o
+lo2o
+2lope
+lop2p1a
+2lopt
+lor3am
+lor2an
+lo4rä
+3lorb
+2l1orc
+2l1ord
+lo3r2en
+4l1or3g2
+4lork
+4lorp
+2lort2
+lo4sa
+3lose
+lo4ske
+lo2spe
+lo2spr
+lo4ste
+los3to
+los3t4r
+4loß
+lo2ta
+lot4e
+lot2h
+lo3tha
+loti4o
+2l1ov
+lo2ve
+2lox
+1lö
+lö2b3
+2löck
+2löd
+lö2f
+2l3öfe
+2l1öhr
+2lök
+2l1öl3
+2löp
+3lösc
+3lösu
+4löß
+4löz
+2l1p
+lp2ar
+l4p1är
+lp2f
+lph4
+l3phä
+l2phir
+lp1ho
+l3phr
+lpt4
+l3pu
+2l1q
+2l3r2
+lrau2s
+lrebs2
+lre1s
+lrö2
+lrut4
+4l1s
+ls3a2b
+l3sac
+l2s1a2d
+ls2al
+l4s1amb
+l4samp
+ls2amt
+l2san
+ls3ane
+l3sare
+l3sarg
+l3sark
+lsau2
+lsau4m
+lsau4r
+l3s2äm
+ls2äug
+ls1äus
+l4schin
+l4schmü
+lschs2
+l2s1e2b
+l3seil
+ls2ele
+ls1eli
+ls1er
+l2serf
+l2serg
+l2serh
+l2serk
+l2serl
+l2sers
+l2serw
+lse2t
+ls1eta
+ls2ext
+ls3ha
+l2s1id
+l2simp
+ls2kal
+l3s4kele
+ls2ky
+l2sop
+l4s3ort.
+l3s2öl
+l2spac
+l2s3ph
+l2s1pir
+l3s2pit
+ls2po
+l3spri
+ls2pu
+l3spul
+ls3s4
+lst2a
+lstab6
+ls3tabl
+ls4taf
+lstahl3
+l2stas
+l4stat.
+l4state
+l4s3täti
+l2ste
+l3stea
+l3stec
+l3steh
+l3stei
+l4steil
+l3stel
+l3stemp
+l4sten
+ls4t3erk
+ls6terne
+ls6terns
+ls2tie
+ls4tip
+l2stit
+l4stoch
+ls4tol
+ls4tri
+ls6tru
+l2s3trü
+ls2tu
+ls4tüm
+l3suf
+ls1um
+l2s1un
+ls2und
+ls3unk
+4l1t
+l2tab
+lt1abs
+ltag4
+lt1alg
+lt1am
+l4tame
+ltampe4
+l5t2an.
+ltan3d
+l2t1ap
+lt1ara
+lt1art
+l3tarta
+l3tartu
+l2t3ato
+l2t1au
+lt3aut
+lt1äh
+ltbau1
+lte2c
+lt1eh
+l3tehu
+lt1eig
+lt1ein
+l2t1eis
+l4t1elt
+lte3mi
+lt2en
+lten6gel
+lten4sp
+lt3ents
+lte4ral
+lter4fa
+l3t2erg
+lter6ken
+lter4nä
+lt2erö
+lter4se
+l4t1esk
+lt2est
+lte3str
+l2t3h
+l3thas
+l4thei
+lt4hem
+l3t4hu
+l3tic
+l2ti2d
+ltimo4
+l3tine
+lti3t
+l2t1o4b
+l2t1o2f
+l4tord
+l4torg
+l4t1o2ri
+lto2w
+lt1öl
+lt1ös
+l4t1öt
+ltra3l
+lt3räu
+lt3rec
+lt3rei
+lt3ris
+lt3rol
+l2t3rö
+l4ts
+lts2eh
+lt2se2l
+lt4s3ort
+lt2s1pe
+lt3s2ph
+lt2sti
+lt3t
+l3tub
+lt1uh
+l2t1um
+lturan4
+ltu2r1i
+l3tü
+lu1an
+4lu2b3
+luba2
+lubs2
+lu2dr
+lu2es
+1lu2f2
+2l1ufe
+2luff
+lu3fo
+luf4t1a
+luft3e
+luf4tei
+luft3r
+lu2g1a
+lu2g1e2b
+lu2gei
+lugen1
+lu2g3i
+lug3l
+lu2go
+lu2g3r
+lug3sp
+lu2gu
+2l1uh
+lu1id
+lu1is.
+lul2ö
+lumbi1
+2lumd
+lume4
+2lumf
+2lumg
+2l1umh
+2lumk
+2luml
+l2ump
+1lumpe
+lum2ph
+2lumr
+2l1ums
+lu3mu
+2l1umw
+2lumz
+1lu2n
+2l1una
+2l1unf
+lung4sc
+2l1uni
+2lunr
+2l1uns
+2lunt
+2lunw
+4luo
+2lur
+l2ura
+lu2r1an
+lu2rei
+lu2ri
+l1urn
+lu2ro
+l1urt
+lu4ru
+2luse
+lu2sp
+lus4s3a
+lus2s1c
+lus4sei
+lus4s3er4
+lus2s1o
+lus4s1p
+lus2s3t
+lus4stä
+1lu2st
+lus6terl
+lus4t1o2
+lust3re
+lu2s1u
+lu2t3a
+lu4tas
+lu4tau
+lu2tä
+lu2t1e4g
+lu2tel
+luter2
+lu4t3erg
+luter4s
+lu6t5ersa
+2luto
+lu2t1o4f
+lu2top
+lu4t1or
+lu4t3r
+lut5schl
+3lux
+2lüb
+3lübd
+lück4e2
+lücker3
+5lüd
+2lüh
+lü2hel
+lüh1l
+2l1v2
+lva3
+l3vl
+lv3r
+4l3w
+2lx
+1ly
+ly1a
+ly3c
+2lymp
+3lyn
+ly3no
+ly1o
+ly3onn
+3lys
+ly3t
+2l1z
+l2z1ac
+l2z1ag
+l2zan
+l2z1ap
+l2zat
+lz1aus
+l2zäp
+l2zär
+lze2l
+l2zele
+l4z3enth
+l2z1er2h
+l2z1id
+lzi4m
+lz1imi
+lz3l
+l2zo2f
+l2zö
+lz3t2
+l2z1u4fe
+l2z1ur
+lzvol2
+lz1w
+lz2wec
+l2zwu
+1ma
+3ma.
+maa2
+m1ab
+m3a2bar
+m2abä
+2mabb
+m2abe
+2m3abf
+2mabg
+2mabk
+m2abli
+2mabm
+m2ab4ra
+ma2bri
+2mabs
+2mabt
+ma3chan
+mach2e
+mach8terh
+mach8t7ers
+mach4tr
+ma2ci
+mack2s
+ma3dac
+mada2m
+m2adä
+ma2del
+2m1adm
+2m1a2d4r
+ma4d2s
+mae4
+ma1f4
+mag2a
+ma2ge.
+ma2geb
+ma2gef
+ma2geg
+ma2gek
+ma2gep
+ma4ges.
+ma2get
+ma2gev
+ma2gew
+2m1agg
+magi5er.
+magi5ers
+ma3gl
+ma3g4n
+2m1ago
+mahl4st
+ma1ho
+mai4s3e
+ma2ke.
+2m1akt
+mal2ag
+mal1ak
+ma4lakt
+ma2lan
+ma2l3at
+ma2lau
+2mal2de
+m2aldi
+ma3l2e
+ma4lex
+mali1e
+mal3lo
+2mallt
+m2alp
+mal3t
+malu4
+ma2l3ut
+3malv
+ma2mid
+mam3m
+2m1a2nal
+ma2nar
+2m1a4nat
+ma2nau
+2m1anä
+2manb
+man2ce
+man3d4
+man3ers
+ma2net
+m2anfr
+man3g2
+m4angel
+man4gl
+2m1angr
+m2anh
+3manip
+2manl
+m2anle
+5m2ann
+2m1ansa
+2mansä
+man2th
+mant3he
+2mantw
+manu3
+2manw
+2manz
+m1anza
+ma2or
+ma1q
+4marag
+mar2an
+2marb
+mar3g2
+3ma1rh
+ma3r2i
+m2ark
+mar2kr
+4mar2o
+maro3d
+4marr
+mar6schl
+mar6schm
+mar6schr
+mar2sp
+mar2su
+2m1arti
+ma3r2u
+m1arz
+3mas
+ma3s4a
+mas2e
+ma3s2p
+massen3
+mas4st
+mas4ta
+mas4tel
+mas4ti
+mas4to
+mas4tr
+ma4s3z
+3maß
+ma2ta2b
+ma2tan
+ma2tä
+m3a2tel
+ma4t3erd
+ma4t3erz
+m4atme
+2matmo
+ma4tort
+mat3se
+mat3sp
+matt4r
+mat3url
+2m1au2f
+3maul
+3ma3un
+mau3r
+2mausd
+mau2ta
+m4ay
+ma1yo
+1mä
+2m1ähn
+mäh1r
+2m1änd
+2mäo
+2m1äp
+2mäq
+mär1
+mär2kl
+mär2z
+mär4zer
+3mäß
+mä3t4r
+mäu2s1c
+2m1b2
+mbe2e
+mbera2
+mbe3r2e
+mbert4
+mb4l
+mble1i
+m3b4r
+mbu3sc
+mbut2
+mby4t
+2mc
+m3ch
+2m1d
+m2dan
+m2d1a2s
+md3ato
+md1är
+mde2a
+m2dei
+mder2
+m2d1erl
+md3ras
+md3s2e
+mdt4
+m2d1um
+1me
+me3a
+meb4
+me2ben
+3mebr
+me1c
+medi3e4
+me1ef
+me3e4n1
+mee4rei
+2m1eff
+meg4
+mega3
+me4gel
+3meh
+meh6l3er
+meh6rert
+2m1eif
+2m1eig
+m2ei3l2
+mein4da
+meinde3
+meiner6k
+3m2einu
+3m2eist
+me3l4ant
+me2l1au
+melb2
+mel3d2
+melde3i
+me2lek
+2melem
+me2ler
+melet4
+2melf.
+3melk
+mel4k3ei
+mell2
+3melo
+me2lob
+mel2se
+mel3t4
+6mel6tern
+2m1e2mis
+2m1emp
+2m1e2mu
+me3nage
+me4n3an
+men3ar
+me4nas
+men3au
+2m1endl
+menen1
+4men4gag
+men3ge
+me2nim
+men3k4
+men2on
+men4se.
+6mensemb
+men4sen
+men4ser
+men6ses
+men2so
+menst4
+m4enta
+men4t3ak
+ment5eig
+men6t5ers
+2mentn
+ment4sp
+me1o
+2meou
+2meö
+2mepa
+2m1e2pi
+3m4er.
+me1ra
+me3rak
+mer4a3s4
+mera3um
+me2re2b
+me4rens
+mer4err
+mer4erw
+mer3f
+4m3ergän
+me3rid
+merin4d
+merin4t
+4merklä
+mern3s2
+m4ersh
+mer3sm
+mer4sto
+mert4r
+merz6eng
+3mes
+me2sal
+me4sä
+4meser
+mes2po
+mes1pr
+2mes2sa
+mess3an
+mes6ser6g
+mes4s1o
+mes2sp
+mes2st
+me1sto
+me3sze
+me3ta
+meta1s
+me3th
+me4trig
+met6t5en6d
+me3tu
+meu1
+2m1ex
+me2xe
+1mé
+2m1f4
+mfi2le
+2m1g2
+2m1h4
+1mi
+mi3a2b
+mia2n
+mi1ä
+mibi1
+mic1e
+mi1ch
+mi2ci
+mi3da
+mi2di.
+mi3dr
+2midy
+mie3dr
+mi3ele
+mi4e3no
+mien3s
+mierer4
+mie4rob
+mie1s
+mie2ti
+mie4to
+mie2tr
+mi1f4
+3mige
+mi3h
+mi2k1an
+mi2kar
+mi2kel
+mi2kin
+mi3k4l
+mi3kr
+mi2ku
+mi3l2a
+milch1
+mil4che
+mild4s
+mi3l2i
+4milz
+m2im2a
+2m1imm
+2mimp
+min2ac
+min5anze
+m2inde
+minde4s
+2m1indu
+mi2nef
+miner1
+mi4n3e4ri
+min2eu
+2minfo
+min2ga
+ming3s
+2minh
+mi3ni
+mini3k4
+mi3n2o
+mi4n3of
+2m1inse
+mi3nu
+mioni1
+mi1p
+3mir.
+3miri
+3mirs
+3mirw
+3mirz
+3mis.
+mi2sa
+mi3sau
+mi4scha
+mi4schr
+mi4sch3w
+mise1
+mis2p
+mis5sar
+mis4ser
+mi2ste
+mi1sto
+mi1s4tr
+3mit
+mi2ta
+mite2
+mi2t3h
+mi2to
+mi2tr
+mit3s2
+mit5sa
+mitt2e
+mi2t1u
+4mitz
+mi3v2
+2m1j
+4m1k4
+m3kn
+4m1l2
+ml3c
+m3le
+ml3f
+ml3k
+m3lo
+ml3p
+ml3s
+2m1m
+mma3a
+m2mab
+m2m1ak
+m2m1al
+m2m1ans
+mm1anz
+mm1art
+mma1st
+m2m1au
+mm1äu
+m2m1e2b
+m2m1ef
+mm1ein
+mme4lin
+mme4na
+mm2ene
+m4mentl
+m4mentw
+mme4r3a2
+mme4rec
+mme2s
+mme3sc
+mmes5t
+mme4sz
+m2m1eu
+mmgas4
+mmi3el
+mmi3k
+mm1inb
+mm1inh
+m2m1ins
+mm1int
+mmi3sc
+mmi1s4t
+mmi5tw
+mm3p2
+mmpf4
+mm2s
+mm3sa
+mm3s2i
+mm3so
+mm3s2p
+mm3sta
+mm3sti
+mmt2
+mm3te
+m2mum
+mm2un
+mmu3r
+mmül2
+mmüll1
+2m3n2
+m4nesi
+1mo
+mo2be
+2mobj
+2m1obs
+3m2od
+mo3de
+mode3s
+mo2dr
+m1of
+mo2fe
+3mog
+2mog.
+mo2g1al
+3m2oh
+moh2a
+moi3r
+mo2k1l
+mol3d
+3mom
+mom2e
+3m2on
+mo2nä
+mon4dac
+mon4del
+mon2do
+mo2ner
+mon2i
+mon2s3
+mon3sa
+mons4e
+mon3s4u
+mont2a
+mon3th
+mo1ny
+3m2o2o
+2mo1pe
+mo2per
+2m1opf
+2mopt
+mo1ra
+mo2rak
+mor2an
+mo2rar
+mor2d3a
+mor2dr
+morf4
+mor3g
+morgen5s6
+mor3t2
+3mos
+moster4
+mos2ti
+mo3ti
+mo5to
+mot4r
+mous2
+2m1o2x
+mo1y
+1mö
+möbe2
+mö2c
+2mö2f
+4mök
+2m1öl
+m1ört
+4m1p
+mpa3ne
+mpe4lin
+mpe2n1
+m2p1ene
+m2pf
+mpf1ef
+mp4f3erf
+mpf3erg
+mp6fer6ge
+mpf3erp
+mp6ferpr
+mp4f3err
+mp4f3er4z
+mpf3l
+mp2fr
+mp1haf
+mp1hos
+mp3lei
+m4p3lem.
+m2p3len
+m2p3les
+mp4lis
+m3pon
+mpor6tag
+mpor6ter6
+mp3sh
+mp3str
+m3pu
+2m1q
+2m3r2
+4m1s
+m2sam
+m2san
+m4sap
+ms1as
+m3sat
+m2sau
+msau3e
+m3sä
+m4s1än
+m3sc
+msch2
+m4sco
+m3se
+m4s1e2d
+m4s1ef
+m4sein
+m4se2le
+mse2n
+m4s1ene
+m4sent
+ms2erh
+m4s1eu
+m4sex
+mso2r
+ms1ori
+m2spä
+m2sped
+ms2po
+m2spot
+m2spro
+ms2pu
+ms3s4
+m3stä
+m3steh
+m3stei
+m3stel
+ms2ti
+m2stit
+m3s4to
+m3s4tr
+ms5trä
+m3s2tu
+ms4tü
+ms1ums
+m2sü
+m3sy
+2m1t
+mt1ab
+mt1ak
+mta2m
+mt1ar
+mt3arr
+mt3aug
+m2t1e2d
+mt1ein
+mt1eis
+mt1elt
+m4tenga
+m4t3engl
+mt1ent
+m4tentf
+m4tentg
+m4tentr
+m4tents
+m2t1erb
+m4t3erei
+m2t1erf
+m2t1erg
+m2t3e2r1i
+m2t1erk
+m2t1erl
+m2t1ers
+m2t1ert
+m2t1eta
+m2t1eu
+m2t1ev
+m2t3h
+m2ti2d
+m2tim
+m2t1in
+m2t1i2r
+mti2s
+mt1ita
+mtmen2
+mt1ob
+mt1op
+m2t1öl
+mt1ös
+m2t3ro
+m2trö
+m4ts
+mt2sa
+mt3sco
+mt2s1e
+mt3send
+mt3s2ka
+mt3s4kel
+mts3tät
+mt3stu
+mt1um
+mtu3re
+m3tü
+mt3z
+1mu
+mu1a
+mu3cke
+mu4ckel
+2m1uh
+mu3la
+3muld
+mul4lau
+3mult
+m4umb
+3mumi
+m1ums
+mum2s1p
+3mun
+mun6derf
+mu2ner2
+4m1unf
+4m3ungeb
+mu3ni
+mu4nin
+4mu4niv
+4munw
+4munz
+muru2
+mu4r1uf
+3m4us
+mu4s1a
+mu2s1o
+mu2sp
+mu2s3t
+4must.
+must4e
+mu2su
+mut1au
+mut4str
+1mü
+2müb
+3müh
+mü2her
+mühl1a
+mül4len
+3mün
+3müt
+mütter3
+2m1v
+mvoll1
+2m1w2
+mwa2
+mwa4r
+mweg4s
+mwel4
+mwelt3
+mwu1
+3my
+my1al
+my3l2
+my2s3
+2m1z2
+1na
+3na.
+2n1ab
+na2bä
+naben3s4
+n3abh
+3nabi
+na2b3l
+na2bor
+na2br
+nab4rü
+4n3abs2
+na2b3u
+3nac
+na2ch1
+nachen4
+na5chen.
+n3achse
+nach3sp
+nach8t7ersc
+nacht8raum
+5nachw
+na3dab
+4nadd
+nade4l1
+na2der
+4n1adl
+4n1adm
+4n1a2dr
+4nadv
+3nae
+2n1af
+na1fra
+nag2a
+na2gem
+4n1agg
+n1a2gi
+na3gin
+na3g4r
+3n2ah
+na2h1a
+4n3ahn
+4n3aho
+3nai
+nai2e
+n1aig
+4n1air
+nai4re
+n2ais
+2n1ak
+na2ka
+3nakä
+3nako
+na2kro
+4nakt
+n4al.
+na2l1a2
+nal3am
+na4lar
+na2lä
+2n1albk
+n2ald
+nal3da
+n4ale
+na2leb
+nal3ei
+na4l3ent
+na6lerei
+na4ler4g
+na4lerm
+na4l3erw
+nales2
+nal1et
+nal1ex
+nalf4
+nalg2
+nal3gl
+na2lid
+nal3l2a
+nal2ph
+n2als.
+nal3t2
+nal5tr
+n2alty
+na2lu
+2naly
+na2mat
+3name
+na3me.
+4na2mei
+n4a3men
+namens3
+4n1a2mer
+na2mid
+na3m4n
+3n2amo
+n1amp
+nam4sp
+2n1amt
+namt4s
+n1an
+2n3an.
+4na2na
+na4nat
+n3a4nä
+4n3anb
+n3and2
+nan1eu
+4n3anf
+4n3ang
+4nanh
+2nani
+4n3ank
+4n3anl
+3n2ann
+4n3anna
+4nano
+4n3anp
+2nanr
+4n3ans4
+2nantr
+2nanw
+n2anz.
+nanzen4
+nan6zene
+nan6zeng
+na3ot
+na2per
+n1apfe
+4napfel
+na2pos
+na2pr
+nap2si
+n1aq
+n1ar
+3nar.
+na2r1a
+2narc
+n2ard
+n2are
+3nar2i
+n2ark
+n2arle
+n2aro
+na2rom
+nar2rh
+2nart
+n2arta
+n2arth
+na3r2u
+3nas
+n4as.
+na3sä
+na4schw
+n2asf
+4n1a4sp
+nas2s1c
+4n1assi
+nas4ta
+na2str
+4nasy
+nasyl2
+na2sym
+3nat
+na4t3au
+nat1ei
+na2tem
+na2th
+4natm
+nat2o
+4natom
+5nats1
+nat4sa
+n1au
+4nauf
+nauf4fr
+nau2fr
+5naui
+3n2aul
+4nausb
+4nausd
+4nausf
+4nausg
+4nausl
+n2auso
+4nausr
+4n3auss
+4nausw
+4nausz
+3nav
+nave4
+navi5er.
+navi5ers
+1nä
+4näb
+3n4äc
+3näe
+n1äf
+3näg
+3nähe
+nä2hi
+3nähm
+4n1ähn
+nä2hu
+3näi
+2n1ä2m
+4n1än
+4näpfel
+2näq
+när4s5t
+3näs
+nä2sc
+n2äss
+4näst
+2näu
+3nä1um
+4näuß
+4n3b4
+nbe2in
+nbe3r2e
+nbes2
+nby4
+2n1c
+n2c3ab
+n3can
+n3ce4n3
+n3ces.
+n3chl
+nch3m
+n2ck
+ncor2
+n5cu
+4n1d
+n2da2d
+nda1f
+nd2ag
+n3dai
+n2d1ak
+n4dakt
+n2dana
+n2dani
+n2danl
+nd1ann
+n2d1anz
+n3dap
+nd3arr
+n3dat
+nd3att
+nd1au
+n2daut
+n2dax
+nd1c
+nde4al.
+n2d1ede
+n3dee
+n2dei
+n4dei.
+nd3elfe
+ndel3l
+ndel4s3a
+ndels5en
+nde4mot
+nden3sk
+n4dentl
+n4dents
+nde3o
+n5der.
+n5deren
+nderer3
+nd2erh
+n5deri
+nder6läs
+nde4rob
+n4de4ros
+n6der6sat
+nder5ste
+n3d2es1
+nde2se
+ndes3s
+n2deth
+ndia3
+nd1imm
+n2dob
+ndo1c
+n2dof
+ndo6na
+n2dopt
+nd1or
+n2do2ri
+ndo1st
+n2d3ott
+n2dö
+nd2ös
+nd4ram
+n2d3rat
+nd3rau
+n2d3re
+n2drif
+n2droc
+n2drod
+n2d3rö
+n2drui
+n2d3run
+nd4sene
+nd2spr
+nd3th
+nd3ti
+ndt4r
+n2duns
+ndwa5re
+ndy3
+1ne
+3ne.
+ne2ap
+3neas
+ne3at
+ne3au
+ne2bl
+2n1ebn
+neb4r
+2nec
+3neca
+3nece
+ne1ck
+neck2a
+ne2dit
+2nee
+neei2
+ne3e4in
+ne3eis
+neen2
+nee1r2
+nee3t
+n1ef
+n2ef.
+n2e3f2a
+2nefr
+2n1egg
+neg4l
+n1e2go
+neg4r
+n1e2he
+2nehe.
+2nehem
+2nehen2
+ne3her
+3nehm
+4n3ehr
+2n1ei
+3neia
+4neic
+nei4dei
+4neier
+3neigt
+3neigu
+4neing
+4neinh
+4neinl
+4neinz
+4neip
+neiss4
+ne2ke
+2n1eks
+nek3t2
+ne2l
+3ne3lä
+nel3b
+n1ele
+4nelek
+4nelem
+ne3len
+ne3l2i
+ne4lim
+ne4lit
+3nelk
+n2ell
+nel2l1a
+nel4lei
+3ne3l2o
+3nelu
+n2em.
+4n1emb
+n1emi
+4n3emp
+2n1ems
+4nemu
+3nen
+n4en.
+n2e4n3a
+ne5nac
+n2enb
+n2enc
+nen4dar
+4n1endb
+4n1endd
+4n1endf
+n1endg
+4n1endh
+4n1endk
+n1endl
+4n1endp
+4n1endt
+4n1endw
+ne2n1e2b
+nen3ei
+nene4m
+nenen1
+ne4nene
+ne2neu
+n2enf
+4n1engb
+nen4gen
+4n1engs
+4n1engt
+n1engu
+n2enh
+ne4n3i
+n2enj
+n2enk4
+n2enm
+nen4nar
+ne2no4
+nen3s2e
+nen3sk
+nen3s2p
+5n2en3t2a
+4n1entb
+4nentd
+4nentf
+5n2enti
+4n1entl
+4nentn
+5nentr
+4n1ents
+4n3entw
+4nentz
+ne4n3u
+n2env
+n2enw
+nen5z2e
+ne2o3b
+ne2oh
+ne2or
+neos4
+3nepa
+ne2pen
+2nepf
+ne2pi
+ne2pos
+nept4
+n4er.
+ne1ra
+ne2ra2b
+ne2rac
+ne2r3af
+ne2rag
+ne3r4al
+ne2ram
+ne2ran
+ne2r3ap
+n2erat
+ne2rau
+nerb2a
+4n3erbe.
+4n3erben
+2nerdb
+nere2
+ne2reb
+ne2rec
+5nerei.
+n1erf
+4nerfas
+3nerfr
+2nerfü
+2ner3g4
+3nergr
+n1erh
+4n3erhö
+3neri
+n2erj
+n1erk4
+5nerka
+n2erkö
+n2erli
+2n1erlö
+n1ermi
+n2ern.
+2n1ernä
+4n3erneu
+2n1ernt
+n1eros
+n1eröf
+ne1rös
+n2ers.
+2n1ersa
+4n3ersts
+nert4
+3nert.
+ne2rup
+n2erv
+4nerwar
+2n1erz
+nerz2a
+3nes
+n2es.
+ne2sal
+nes2an
+ne2sei
+ne2s1ev
+2ne3sh
+nesi1
+ne3ska
+ne2s1of
+ne2s1or
+ne2s1pa
+4n1es2si
+nes4sig
+ne1sta
+ne2ste
+nes3ti
+4n1est3r
+4nesyn
+3neß
+ne2tab
+2ne4tag
+net1ak
+ne2t1an
+2ne2tap
+2n1e2tat
+ne4te2l
+ne2th
+ne4t3ha
+ne3the
+ne3ti
+ne4tin
+n4ett
+net3ta
+net3te
+net3tr
+2n1e2tu
+net4zer
+net2z1i
+ne2u
+neu1c
+neu4ere
+neuer4f
+neuer4k
+neuer4r
+neuer4s
+neuer4w
+neu3g4
+n2eun
+2n1eup
+neur2
+3n2evi
+ne2vol
+n2ew
+2n1ex
+5ney
+3nez
+3né
+2n1f
+n3f2al
+nfalt4
+n3f2ang
+nf4ar
+n3f2ä
+n3f2en
+n3f2er
+nf2es
+n4fex
+nff4
+n3fi
+nfi4le.
+nf4le
+nf2o
+nfo1s
+nf4r
+nf3s2
+nf2tan
+nf2t3r
+nft4st
+nfts3tr
+nf3tu
+n2f1u
+4n1g
+n2g1a2c
+ng1ad
+n2g1ak
+ng1a2me
+ng1ams
+nga2n
+ng1and
+n2g1ans
+ng1ant
+n3g2ars
+n2g1a2v
+n2g1äl
+ng3d4
+n2g1ein
+ngelb4
+nge3l4ei
+n3g4en
+n5gene
+nge5nerw
+ngen3sa
+nge4ram
+n2g1erg
+ng3erse
+nger4zä
+n3g4es
+nge3s4a
+nge3sp
+ngg3s
+ng3hu
+n2g1id
+ng2lad
+ng2läs
+n2glic
+ng4lok
+n3glot
+n2gn
+ng3ne
+n4g3ni
+ng4nom
+ng2nu
+ng2ob
+ng1opf
+ng1or
+n2gö
+n2g3rai
+ng4ran
+n2g3rat
+ng3roc
+ngs3au
+ng4scr
+ng4s3e4h
+ng4sek
+ng4sens
+n4gt
+ng3ts
+n2gum
+ngung4
+ngzei4t
+4n3h2
+n7halts
+n5he
+nhe2r
+1ni
+3n2ia
+ni3ak
+nibb4
+ni1ce
+n1id
+3n2id.
+ni2de
+3n2i3de.
+4nidee
+n2idi
+ni3d4r
+2n3idy
+n2ie
+nie3b
+ni1el
+nie3l2a
+nie4n3
+ni3ene
+ni3eni
+nie4rei
+ni4erna
+nie2sa
+ni2eu
+nife4s3
+ni1fl
+ni2g1a2
+2n3i2gel
+2niget
+nig3li
+ni2gn
+ni2gre
+nig4san
+nig4sp
+nihi3
+ni2kar
+3nike
+ni2kel
+ni3k4erh
+ni2ki
+nik3ing
+ni2kor
+ni2k3r
+nik3t4
+3n2il
+ni3l2a
+ni3l2i
+4n3imp
+n1in1
+3nin.
+n2ina
+nin2ac
+ni2nal
+3n2inb
+2nind
+2ninf
+3ning
+ning4s
+2ninh
+4nink2
+3nino
+ni2nor
+3n2inp
+2nins
+n2ins.
+4n3int
+n2i3nu
+4n3inv
+3n2inw
+ni2ob
+ni3ok
+ni3ol
+ni3ora
+n2ip
+ni4ron
+n1irr
+3n2is
+ni4sam
+ni2san
+ni2sä
+nis3cha
+ni4schw
+ni2s1e
+ni3se.
+ni2som
+4nisot
+ni2sp
+ni3spi
+nis3s4
+ni2s1u
+2nit
+3nita
+ni2ti
+nit2o
+3nitr
+nit3s4
+nit2ta
+nit6tele
+nit6ter6g
+nit6t5er6k
+nit4tra
+nitt3ri
+nitt4sa
+ni3v2
+3nix
+2n1j
+4n1k
+nk1abr
+n2k1ac
+nka2ge
+n3kal
+n4kalg
+nk1ang
+nk1apf
+nk3art.
+nka3sc
+n2katm
+nk1aus
+n2kaut
+n2k1äh
+n2k1äp
+nke2c
+nk1ei.
+nke4lei
+n4kelem
+nke4na
+nken4te
+nk2er
+n4k3erle
+nke4ros
+nk3ersa
+nke2t
+nk1eti
+n2ketu
+nk1id
+n2kim
+nk1inh
+n2k1ins
+n4klade
+n3klag
+nk3leis
+n2k3len
+nk3les
+n3klin
+nk2lo
+nk4nac
+nk4neb
+n2knis
+n2knit
+n2k1o4be
+n2kopt
+nko2r
+nkord2
+nk1ori
+n2k1ort
+n2köl
+nk4rab
+nk3rät
+n4kre.
+n2k3rel
+n2kren
+nk3rep
+n2k3rez
+nk3ro
+n2krol
+nk2sal
+nk2se
+nk3sen
+nk2so
+nks2ti
+nk3s2z
+nk2tak
+nk2tan
+nk4tau
+nk4tent
+nk4terg
+nk4t3ern
+nkte3sk
+nkt2et
+nk2tin
+nkt1it
+nk2top
+nkt1r
+nkt3ric
+nk2tro
+nk2tru
+nkt4sen
+n2kum
+nk1ums
+nku2n
+nk1urh
+n2küb
+2n3l2
+nla3ge
+nle2ga
+nle3x
+2n1m2
+n3ma
+n3mä
+nmen2s
+n5mi
+4n1n
+nna2be
+n2nada
+n2nalg
+n2n1all
+n2nan
+nna3st
+n2nau
+n3nec
+nn2ei.
+n4nein
+n3nelb
+nne4le
+nne3lu
+nn2ens
+nner4ei
+n6n5ereig
+nner4fü
+nner6geb
+nn4ergr
+nn2erh
+nn2erk
+nner4la
+nn2ero
+nne2rö
+nn3erwa
+nner6war
+nner2z
+nne4s1e
+nn2eu
+nn2ex
+nn3f
+nng4
+n3n2i
+n4n3iso
+nnis3t
+nno2b
+nno3be
+n2nof
+n2nop
+nno2r
+nn1ori
+nn4sam
+nn3se
+nn3s2p
+nnst4
+nn4stoc
+nn2stö
+nn5t2a
+nn2th
+n2n1uf
+n2n1unf
+nn1ur
+nnvoll4
+nnvol5le
+1no
+3no.
+no5at
+n2obel
+2nobj
+no2bla
+n2oble
+3noblo
+3noblö
+2n1ob2s
+no1c
+noche4
+noch4r
+2no2d
+no3dr
+no2ed
+n1of
+no2fe
+2noff
+2n1oh
+n2ohe
+no3id.
+2n3okk
+nok2l
+n4ol.
+n3ole
+no2leu
+no4lig
+no2liv
+2no2ly
+3nom2e3
+3nomp
+non2e
+n1onk
+nons4
+n1ont
+2nony
+3n2opa
+no2per
+no2pi
+n1ops
+3nor.
+nor2a
+no2rad
+n2o1rak
+no3ral
+no3r4ar
+2norc
+nor4da
+3nordb
+nor4des
+nor2d5r
+no3r2e
+2n1org
+3norh
+3n2orl
+5norm
+norm2a
+nor3mal
+3norö
+3nors
+2n1ort
+3n2os.
+nos2e1
+no3sh
+no5sk
+no2s3p
+2no2sti
+nost1r
+2nostv
+nos2u
+no2tan
+no3tart
+no2tä
+not1e4i
+no6tentr
+no2ter2
+noterb3
+no2tex
+not3h
+no2tho
+no2t3in
+no2t3op
+no2tr
+3nov
+2n1o2x
+3noz
+2nöd
+4nö2f
+4n1ök
+4n1öl
+n2ör
+1n2öt
+4n3p4
+npa2ge
+npa2s
+npf4
+npro1
+npsy3
+2n1q
+6n3r2
+nran2
+nräu3s
+nrebe2
+nreli1
+nre3s4z
+nrö2s
+nrücker6
+4n1s
+n3sabo
+n2s1a2d
+n2s1agi
+ns3a2k
+n2sall
+ns4alp
+n2salt
+ns4anat
+n2sanm
+nsa2r
+n3s2arg
+n3sark
+nsa2s
+ns4ath
+nsau4r
+nsau2s
+n2saut
+ns2av
+ns2ax
+n2s1än
+ns2äug
+n2s1äus
+n3sche.
+n4schef
+nsch5eul
+n4schl.
+nscht4
+n3schu
+nsch7werd
+ns4cr
+ns1eb
+ns2eh
+nse2ha2
+nseh5ere
+nsei4n3
+n4seinf
+n4seint
+ns2ele
+ns3elem
+n2sem.
+n2sene
+nsen4sp
+n2sepo
+n2s1erf
+ns1erg
+n2serh
+n2s1erk
+ns4erko
+ns3erle
+n4s3erne
+n2serö
+ns1ers
+n4sersc
+ns3ertr
+n2s1erw
+n2serz
+n2seth
+n2sety
+n2s1eu
+ns2ext
+nsfi2l
+ns1id
+nsi4den
+n3sil
+n2simp
+ns2inf
+n2sini
+nsinn2
+nsinns3
+ns3int
+n3sis
+n4siso
+nsi4te
+nsi2tr
+n3s2kal
+n3s2kel
+ns2kis
+n3skle
+n3s2ky
+n3smara
+n2s1o2d
+ns1of
+n2soff
+ns4om
+n4s1ont
+n2s1op
+ns2orc
+n4s3ort.
+ns2pac
+nspa2g
+n3spe
+ns4pek
+ns2pel
+n5s4pen
+n4speri
+n4spers
+n2sph
+n3s2pi
+ns4pie
+ns4pir
+n2spo
+n2sprä
+n4s3prie
+n2spro
+nsrü2
+ns3s4
+ns3tabl
+ns8tagent
+nst1ak
+n4stale
+nsta2n1
+n3stand
+nst3ane
+n3star
+n2stas
+n4stat.
+n6staten
+ns4tati
+n4stats
+n3stäm
+n3s4tän
+nst5eife
+nst7einhe
+ns4tent
+ns2tep
+nst5erge
+n3steri
+n5s6terne
+n5s6terns
+ns4teu
+ns2ti
+n3s4tic
+n3stif
+n4stilg
+n3stim
+n2stob
+nst5opfe
+ns4tor
+ns4tric
+n4strie
+n4strik
+ns4trip
+ns6trun
+ns2tu
+nst3u4t
+ns4tüm
+n3suf
+ns2um
+ns1un
+ns2ung
+ns4unk
+ns2unw
+ns4unz
+n2s1urs
+n2sut
+n3sy
+ns4zene
+4n1t
+n3t2a3c
+ntak4ta
+nta4lin
+n4t1all
+nta2lo
+nt2alp
+nta3ne
+n4tansp
+nt1ant
+n4tanza
+n3t2arb
+nt1ark
+n3t2arm
+n3taro
+nt1ar3t
+n4tarti
+nt3artu
+n3t2arz
+n2tath
+nt1äm
+n2t1äu
+nte3au
+nte1e
+nte3g6
+nt1eh
+n3tehe
+n2teig
+n4t1ein
+n2t1eis
+nte4lin
+n2t1e2mo
+nt4en
+nte4na
+nten6te.
+ntera2
+nte6r5eis
+nt4erh
+nt4erk
+nt4erm
+nt4ern
+nt4ers
+nt4ert
+nte3sa
+n4t1es4s
+nte2st
+n6testri
+n2t1e4ta
+nteu3
+nteu6eri
+nte3v
+ntge4n
+nt3hel
+nt3ho
+nt4hos
+n3thr
+nt4hu
+n2t5hum
+nt4hy
+n3t2i
+nti3c
+ntim3p
+ntine4
+n4t3inf
+n4t3inh
+ntini1
+n5t4lem
+ntmen2
+ntmo4
+ntni2
+ntnis1
+ntopf3e
+n4torg
+n4t3o4rie
+nto1s
+nt4ral
+nt1rau
+nt4raum
+nt3rea
+nt3rec
+n5t4ree
+nt3reif
+n5trep
+nt4repr
+nt3rich
+n4t3rieg
+nt4rig
+n2troh
+n3trop
+n2t3rü
+n4ts
+nts2ah
+nt3sp
+nt4spar
+nt5spe
+nts2t
+ntt2
+n3tub
+ntu4re.
+ntu1s
+n3tü
+nt3z
+1nu
+3nu1a
+nu4ale
+nu3a2r3
+nubi1
+2nu1c
+3nud
+nude2
+3nue
+nu2es
+nuf2
+nu2fe
+3nug
+2n1uh
+3nuhi
+4nuhr
+3nui
+nuk4
+nu3kl
+nu2kr
+nul2l1a
+nulle2
+nul4l3eb
+nul4lei
+n2um.
+nu2ma
+2n3umb
+4numf
+4numg
+2numl
+3numm
+2numr
+2n1ums
+2n1umv
+4numw
+2n3umz
+nu4n
+4nuna
+4n1une
+3n2ung4
+4n3ungl
+4n1uni
+n3unk
+2nunr
+nun3s
+4nunt
+4nunv
+4nunw
+3nuo
+2nup
+2nur
+nu2ra
+nu4r2i
+nur3s
+nur2z
+3nu2s
+nu3sc
+nu3se
+nu3spo
+nuss3er4
+nus6serl
+3nut
+nu2t1a
+n3uto
+nu4t3r
+3nuu
+3nux
+3nuz
+3nü.
+2nü4b
+nür1c
+3nüs
+1nüt
+2n1v2
+n3ver
+n3vl
+nvoran4
+2n3w
+1ny.
+1nyh
+n1yo
+1nyr
+1nys
+1nyw
+4n1z
+n2z1ach
+n2z1a2g
+nza2k
+n2zan
+nz3a4ne
+n3zani
+n2zar
+nza2s
+n2zat
+n2z1au
+n2zän
+n2zär
+nze4l3a
+n6zenerg
+n4zen4se
+n4zentl
+nz3erem
+n2z1erh
+nz1erl
+nzer4lö
+nz5erste
+nzer6tra
+n4zerwe
+n3z2es
+nze3sk
+nze2t
+nz1eta
+nze3u4t
+nz1id
+nzi2ga
+nzig4s
+n2zinh
+n2z1ini
+nz1int
+nz3le
+n2zof
+n2z1op
+n2zöl
+nz3s
+nz1wa
+n2z1wä
+n2zwet
+n2zwir
+n2zwö
+n2z1wu
+ño1
+2o3a2
+o4a3bi
+o4ac
+oa3che
+oa3chi
+o4ad
+oa3de
+oad4st
+oa3in
+oa3k2e
+oak1l
+o4a3la
+o4a3mi
+oa4n
+o2a4r
+o2as
+o5ass
+o4at
+o5au
+o1ä
+o1b
+2ob.
+o3b2al
+ob2am
+ob2as
+ob1auf
+2o3b2ä
+2obb
+ob2e
+2obe.
+2obea
+2o3bec
+2obef
+o2b3ein
+2oben
+obe4na
+oben3d4
+o2ber
+o3ber.
+o4berb
+ober5eis
+1oberf
+ober3in
+oberin6g
+obe4ris
+7oberungs
+2obev
+2obez
+2o3b2i
+obi4t
+ob3ite
+3obj
+ob1la
+ob3lei
+1ob3li
+2oblo2
+2ob2lö
+ob2lu
+2obo
+ob1or
+2obö
+ob3rei
+2obrü
+ob3s2h
+ob3sk
+obs2p
+ob3sz
+2o3bu
+o4bunt
+obu2s
+obu2t3
+2o3bü
+o4büb
+2oby
+oby4t
+2oc
+o3ca
+oc1c
+o1ce
+och1a
+ocha2b
+ocha2r
+o1che
+oche4b
+o2ch1e4c
+och1eh
+och1ei
+oche2l
+ocher4k
+ochi4d
+och3l
+och3m
+och1o
+och3ö2
+och3r
+och1s
+ocht4
+o1chu
+ochu2f
+och3u4t
+och1w
+o1ci
+o1ck
+o2ckar
+o2ckau
+o3cke
+o6ck5ersc
+o3cki
+o4ckin
+ock3sz
+ock3ta
+o1cl
+o3cu
+o1ç
+o1d
+2o3d2a
+od3ak
+od2dr
+o3dec
+o3d2e3i
+odein3
+ode4l3ag
+ode2n1
+ode2s1e
+ode3sp
+o3dex
+2o3dia
+odi3c
+2odif
+2o3dir
+odium4
+2odn
+o2don
+odo4s
+2odr
+o2dre
+odt4
+2o3du
+o3dy
+2o1e2
+oe3di
+oe4m
+oen1e
+o3er
+o4e3s
+oe4sc
+o2e3t
+o3et.
+oet4h
+o3ets
+2ofa
+ofa2c
+of1a2d
+of1a2g
+of2ang
+of1au
+2ofä
+o2f1e2b
+o2f1ec
+o2f1e2d
+o2f1ei
+o2fent
+2o3fer
+o4f1erb
+2o3f2es
+o2f1e2t
+of1eun
+of2f1a
+off3erz
+of2f1in
+1offiz
+of2f3l
+of2fo
+of2f3r
+offs2
+off3sh
+off3si
+off3sp
+off3t4
+of2fu
+2ofi
+ofi3k4l
+ofi3s4
+2o1fl
+of3le
+of3li
+of4lö
+2ofo
+2ofö
+2o1fr
+of3rä
+of4rü
+of2s1
+of4sam
+of3sä
+ofs2ch
+of4sen
+of3sta
+of4staf
+of3str
+2oft
+oft2a
+of2tei
+of3th
+2ofu
+of3ur
+2o1g
+o2g1ab
+o2g1ac
+oga3d
+og1ang
+og1ans
+o2g1ei
+ogeld2
+oge2l1i
+ogener4
+ogeni3
+ogen4id
+ogerätein8
+og2gl
+o3gh
+ogi2er
+ogin1
+o2g1ini
+og1l
+og3le
+og2lo
+o3g4n
+ogo4i
+og1o2ri
+og3s2p
+og1ste
+og3sti
+2o1ha
+oh1alk
+o1hä
+o1he
+o3he.
+oh1eis
+o3hem
+o3hen.
+ohen3s
+o3her.
+o3here
+oh1er4t
+oh1er2z
+o3hes
+2o1hi
+2ohl
+ohl1a
+oh2la2d
+oh2lä
+oh3lec
+ohl1ei
+oh3lep
+ohler2
+oh4lerg
+oh4l3erh
+oh4lerw
+oh3lo
+oh4l1o2r
+ohls2e
+oh2lu
+ohm2
+1ohmi
+oh4n1ac
+ohn1ap
+oh3nee
+oh2ni
+1ohnm
+oh2n1o
+ohn3sk
+2o1ho
+ohol1e
+oho4len
+o2h1o2p
+2ohö
+oh3öl
+ohr3a2
+oh4rat
+oh2rel
+oh2rem
+ohren3s
+ohrer2
+oh4rerg
+oh3rie
+oh4rin
+oh2rol
+ohrt4r
+oh1s
+o1hu
+oh1w
+2o1hy
+2oi
+o1i2d
+oi4da
+o3ie
+o1im
+o1in
+o4ine
+oi2r
+o2isc
+o3isch.
+o1ism
+oiss2
+oi1th
+o1i4tu
+2o1j
+ojek8tori
+2o1k
+ok2a
+oka3b2
+ok3ac
+oka3i
+oka2la
+okale2
+oka6lere
+okas4t
+ok2e
+3o2kel
+oki4o
+ok1lä
+ok2li
+ok2o
+oko4pt
+ok2so
+ok2s1p
+ok5t2
+3okw
+2ol
+o1la
+ol3abu
+olaf4
+ol1ant
+ol2ar
+ol4arm
+olar3s2
+o3l2as
+olast4
+ol1a2v
+4o1lä
+ol1ät
+4olc
+ol2chr
+ol4d1am
+ol2dä
+ol2d1ed
+ol2dei
+ol4d3eng
+old5ersa
+olde2s
+ol2deu
+ol2dim
+ol2d3o
+ol4dr
+4ole.
+o2l1ef
+ol1eie
+o2l1eis
+oler2
+o2l1ert
+ole1s
+ole3s2t
+ol2e3u2
+ol1exz
+o1lé
+ol2fa
+ol2fem
+olf3ere
+ol2f3l
+olf1r
+ol2f3ra
+olft4
+olge4ne
+ol2gl
+ol2g3r
+ol2i
+olie4n1
+oli2er
+oli3k4
+oli5tu
+3oliv
+oli3ze
+ol3ke
+ol2kl
+ol2k3re
+ol2l1ac
+ol2lad
+ol2l1ak
+oll3am
+ol2l1au
+ol2l1e2b
+ol4l1e2c
+ol2l1ei
+ol2lel
+oller6ge
+ol4ler4k
+ol4l3erw
+ol4l3ess
+oll3s2a
+oll3sp
+4olo
+ol2of
+olo1p
+ol1ort
+ol3s2k
+ol4ster
+ol3t4h
+o1lu
+olu2th
+ol2y
+ol2z1a2
+ol3zan
+ol4z3ern
+ol2zim
+ol2zo
+ol2zw
+2om
+o2mab
+oma2bl
+o2m1a2ge
+om1alg
+om1all
+oma4ner
+om3ansc
+o4mante
+o2m1ap
+o2m1ars
+o2m1art
+omar4te
+o4m1a2sy
+o3mat
+o2m1au
+o2meb
+om1ebe
+o2m1ef
+o2m1ei
+o2mel
+o3meld
+o5men.
+om1ene
+o4mep
+om1er2h
+omer4s
+o2meru
+om1er2z
+omi2c3
+omiet1
+o3mig
+om1ind
+om3ing
+om1ins
+o2m1int
+om3ma
+omm2e
+o4mn
+3omni
+4omo
+o2m3oa
+o2m1org
+om1o2ri
+om3pf
+oms2
+om3sk
+om3t4
+o2mum
+o4munt
+2ona
+on3a2b
+ona3g
+o3nal
+onaler6e
+on3ann
+onan6z5ei
+on1ap
+o2narb
+ona3th
+onat2s
+on2au
+on3auf
+2onä
+on1äh
+2onc
+on2dan
+onderer5
+onde8rers
+ond1r
+on2dra
+on4drin
+ond3sk
+2one
+on1e2c
+o3nee
+o2nef
+one3h
+on3ein
+one2m
+on1ema
+one2n1
+o4n3ends
+on2eng
+onen3s2
+o3ner.
+o2n1erb
+on1erd
+oner4fa
+on1erg
+o2nerh
+on4erka
+on1erö
+on1ers
+o3nett
+on2eu
+on3f2
+2ong
+on3gla
+ong4r
+ong3s2
+on2gue
+2o3ni
+on2i3d
+onie3g
+o4nikr
+o4nim
+o4nind
+on3ing
+o4ninh
+on2inn
+o4nins
+on3k2
+1onke
+3onkel
+onli4
+onlo2c
+2onn
+on3n2an
+on3n2e
+ono1
+o3nod
+o2nof
+o2noke
+on1orc
+on3ord
+ono3s
+onot4
+ons1a
+on4sam
+on2seb
+onsen1
+onse4t
+onsi2d
+ons3ing
+on4s3l
+ons1p
+onst2a
+onst4r
+ons5tri
+on3ta
+on2t1eb
+on2te2l
+ont5end
+on4t3erl
+on2th
+on4t3rat
+2onuk
+o3nur
+2onut
+on3v
+1ony
+on3z2
+onze3in
+o1ñ
+1oog
+oo2ka
+oo2k3l
+oo2kn
+oo2mo
+o1op
+o1or
+oor3d
+oo4sk
+oos3s4
+oo2su
+oo2t1a
+oot1ei
+oo4t3h
+oo2tr
+oot2st
+oo2tur
+2o1ö2
+2op.
+o1pa
+opab4
+op1akt
+opa2le
+o3pa5s
+opa3s4t
+1ope
+2ope.
+o1pec
+2o1ped
+op1ef
+2o1pei
+o1pek
+2opel
+ope3l4a3
+2o1pen
+o2pera
+op1erh
+2opf.
+op2f3a
+op3fah
+op2fä
+o2pfe
+op2fin
+opf3la
+op1flü
+op2fo
+4oph2
+o3phe
+o1p2i
+opi5a4
+opi3er.
+opi5ers.
+opie4r3u
+opin2
+2opl
+op3lag
+o2p3le
+op3li
+o3p2n
+2o3po
+opo2la
+op2pan
+op4pl
+1oppo
+op2p3r
+2oppt
+2o1pr
+3o4psi
+op3sz
+1op3t4
+o2pum
+2opy
+2o1q
+2or.
+or1a
+2ora.
+o1raa
+2or3a2b
+o2rabb
+o2r3add
+or3adr
+o1r2ag
+1orake
+o1ral
+oral3l
+o4r3alm
+or4alt
+or2am
+or3a2mi
+o1ran3d4
+oran2f
+o4rang
+oran2m
+oran4ze
+or3ap
+2orar
+or3arr
+o1ras
+o2r3att
+2orau
+oraus6wa
+2o1raw
+o3rä
+or1änd
+or1ät
+orb2l
+or1c
+2orca
+or2ce
+2ord.
+4orda
+ord1am
+or2dar
+or2dau
+2ordb
+ord3eng
+orde4s
+or2deu
+or4d3ing
+or2d1ir
+or2dit
+1ordn
+or2do2
+2ordr
+ord3s2t
+ord3t
+2ordu
+2ordw
+2ore
+ore2a
+o2r1e2b
+o2r1e2ck
+o5ree
+or1eff
+ore2h
+or1eig
+oreli1
+orems2
+o2r1er
+o3r2ere
+orer1i
+o3r2ero
+or1e2th
+o2r1eu
+2orf
+or2far
+orf3li
+or3g4a
+2orget
+or3ghi
+2orgia
+orgi1e
+or2gl
+or3gla
+or3gle
+or2gn
+2orgr
+2orh
+2oria
+2oric
+4o3rie.
+o3rien.
+o6rienti
+o3rier
+4oril
+or1ima
+ori4mi
+4orin1
+o2rind
+2oris
+2oriu
+2ork
+or3k2a
+or4k3ar
+ork4r
+ork2s
+2orm
+or2mam
+or4mans
+orm3asp
+or2m1eb
+or4m3erf
+or4m3er4g
+or2mor
+orm3ord
+or2mum
+ormu4n
+or4muni
+or4munt
+ormwa5
+or2n1a2c
+or2nal
+or2nar
+or5ne.
+or3ni
+or4nin
+or3no1
+2o1ro
+o2r1ob
+or3oly
+oro3n2a
+oro2pe
+or1opf
+o2ro2r
+o3rou
+o2r1ox
+2o1rö
+2orp
+2orq
+2orr
+orr4a
+or3r2e
+or3rh
+2ors2
+or3s4a
+or3sh
+or3si
+or3sk
+or3sz
+or2t1ak
+or2t1an
+orta2r
+or2t1au
+or2tef
+orte4n
+or4ten5g
+ort3erb
+or4t3ere
+ort3erf
+orter6fa
+ort3erg
+or4terk
+or4t3erl
+orter6sc
+or2t3e2v
+or2the
+or2tin
+or4t3off
+or4to2r
+or2tö
+or4trau
+or4t3räu
+ort3re
+or2t1um
+2o3ru
+or2uf
+or1uh
+orum4s
+o4r3un
+o5rus
+o2rü
+o2rya
+or3z2e
+2o3s2a
+os3ad
+osal2
+osa1s
+2osc
+o2s3ca
+osch3ar
+o3sche
+osch3le
+os2co
+2ose
+ose1e
+ose1in2
+os2el
+ose2n
+o2s1er4k
+os2ex
+2osh
+o3s2hi
+os2ho
+os4hu
+2osi
+o3sk
+o4ska
+os2kal
+o4ski
+2os2kl
+2os2ko
+o4skr
+os2lo
+1osm
+os4mog
+2oso
+osol1
+o2sö
+2os1p
+os2pac
+os2pe
+os3pec
+o3sphä
+o3s2po
+os4pot
+os2pra
+2oss
+os6s3a2c
+oss3ala
+os2san
+oss3and
+os4sä
+os2sei
+os4s3en4k
+os4s3enz
+os2s1ep
+oss2er
+os4s3er4b
+osser4e
+oss5erei
+os4s3er4f
+os2sik
+os2sim
+os2s1o2
+os4son
+os2sp
+oss1pa
+os2s3t
+os4sto
+ost1a
+os4tam
+os3tarr
+osta4s
+os4tat
+ost1ei
+oste2n
+oster3e
+ost5erwe
+oster8wei
+ostes5s
+ost3eur
+os2t3h
+os2tid
+os3til
+os2tit
+ost1o4b
+os3toc
+os4t1or
+o2stö
+ost3ran
+ost3rä
+ost3re
+ost3rot
+ost3uf
+os2tug
+2osu4
+os1um
+2o3sy
+o3s4ze
+2oß
+o2ß1el
+o2ß1en2k
+o2ß1enz
+oßer2
+o2ß1erb
+o2ß1ere
+o2ß1erf
+oß1is
+2o1t
+o3tabe
+o2t1abi
+o2t1ah
+o2t1ak
+o3tal
+o3tam
+ot1ant
+ota2s
+ot1ast
+o2t1au
+o3tau.
+ot1ä
+o2teb
+ote1i
+o4t1eib
+o4t1eic
+ote3i4n
+o4t1eis
+ote4l1a
+ote4lin
+o3tem
+o4t1emi
+ot2em3p2
+ote4na
+o4tentb
+ot3entr
+ot1erb
+o4t1er2l
+o4t1erw
+ote2s
+o3the
+o4them
+o2t3hi
+o2thr
+4oti
+ot2id
+o2til
+o2t1i2m
+ot2in
+ot3inh
+otli4
+ot2o
+otob4
+ot3opf
+oto4rei
+oto1s
+o2t1ö
+o3tran
+ot3rat
+ot4rau
+ot3re
+ot3rin
+ot3roc
+ot3rus
+ot2s3at
+ot3sch
+ots2en
+ots1o
+ots1p
+ots2pe
+ot2spr
+ots3tau
+ot3sti
+ot3stra
+ott1a
+ot2tan
+ot4ta2s
+ot2teb
+ot4terh
+ot4terk
+otte2s5
+ot2t3h
+ot4tim
+ott2o
+ot2t3r
+ot3t4ra
+ot4tri
+ot3t4ru
+ot1url
+o3tü
+ouff6
+ou1f4l
+ou4ge
+ou3gl
+o1uh
+ou1is.
+ou2le.
+ou2les
+2o1um
+2o2u2n
+oun4ge.
+4o4ur
+oure2
+ou2ret
+ouri4
+ourie4
+ourme4
+our4ne.
+ou3s2i
+3outp
+out3s2
+ou3tu4
+2o1ü
+o1v
+ov2a
+2ovel
+o3ven
+ove3s4
+2ovi
+oviso3
+2ovo
+2o1w
+o3wec
+owe2r1
+o2wh
+o3wi
+o2wu
+o1x
+2ox.
+ox2a
+2oxk
+ox3l
+o2xu
+1oxy
+o1yo
+oy1s2
+2o3z2
+3o4zea
+ozen4ta
+ozes4sc
+4ozi
+ozir3
+ozon1a
+oz3z
+órd2
+ö1b
+öbe4l3i
+öb2l
+ö2b3le
+ö2b3r
+öb2s3
+ö1c
+öch1l
+ö2chr
+öch2s
+öch4ste
+öchst5ei
+öchst3r
+öchs4tu
+ö3cke
+ö1d
+ödel3l
+öde1r
+ödi3
+ödien3
+ödin3
+öd2st
+1ödu
+ö1e
+1öf
+öf2fl
+öf3l
+ö1g
+öge3le
+ögen2s1
+ö2g3l
+ö2g3r
+ö1he
+öhe4n1
+öhl2e4
+öhre4
+öh3ri
+ö1hu
+ö3ig.
+ö3isch.
+ö1ke
+1ö2ko3
+ök3r
+ök2s
+ö2l
+3öl.
+öl1a2
+öl1ei
+öl1em
+öl4en
+öl2f1ei
+ölf2er
+öl1in
+ölk4e
+öl2k3l
+ölks4
+öll1a
+öl3le
+3ölm
+öl2nar
+ölo2
+öls2
+öl3sa
+öl3sz
+öl3tu
+1ölu
+ölz2w
+ö1m
+öm2s
+ön2e
+ö3ni
+önizi1
+önn2e
+ön2s
+ön3sc
+ön3sp
+öo1
+öo2ta
+öoti1
+2öp
+ö1pe
+öpf3l
+öp4s3t
+ör3a2
+ör2b3l
+ör1c
+ör2dr
+ör3dra
+ö2r1ec
+ö2r1ei
+ö2r1e2l
+ö2r1em
+öre2n1
+ö2r1ene
+ö2rent
+ö3r2erb
+ö2r1er2e
+örer2f
+ö2rer2g
+ö2rer2l
+ör2err
+ör2erw
+ö3r2erz
+ör1ess
+ör2f3l
+ör2gl
+ö2rim
+ör2kl
+örn2e
+örner4v
+ör1o2
+örpe2
+örs2e
+ör3sk
+ört2e
+öru4
+ö2r1une
+ö2sa
+2ösc
+ö2sch3a
+ösche2
+ö4sch3ei
+öscher3
+ö6sch5erf
+ö6sch5eri
+ö2schi
+ö2sch1l
+ö2sch3m
+ö2schn
+ö2schw
+ös1ei
+ö2sein
+öse3str
+ö3set
+2ösl
+ö2sp
+ös2s1c
+ös2st
+ö2st
+öst1a2
+ös3te
+ös2th
+ös3tr
+ö3su
+ö1ß
+ößen3
+öß2ti
+ö1t
+ö4t3a
+öte4n1
+ö2t3r
+öts2
+öt2sc
+öt2tr
+ö1v2
+ö1w
+ö1z
+öze3
+özes4
+1pa.
+1paa
+1pac
+p2ad
+pa3da
+2p3a2dr
+pa1fr
+1pag4
+pa3gh
+pa1ho
+1pak
+pa1k4l
+pak4to
+3pala
+pala3t
+3palä
+3pal2e
+pa3l2i
+1palm
+pal2ma
+pal2mä
+pal2m1o
+2palt
+pal2ta
+pal4tei
+pal2tr
+pa2m3a
+pa2nar
+pa4n3at
+pan3d
+pan4ds
+pa2neu
+panf4
+pang4
+pa4nisl
+pank4
+2panl
+2pann
+panne2
+pan4n3eb
+1pa2no
+pan3sl
+pan3t4h
+1panto
+2pantr
+panz2
+pan5ze
+1pap
+papi2
+papieren8
+papie8r7end
+pap2pr
+pap4s
+pa1q
+1para
+pa4r3aff
+par3akt
+pa4rant
+2parb
+1p2arc
+par3d
+2parer
+parer8geb
+1parf
+2parfö
+2parg
+pargel6d
+1park.
+par4k3am
+par4kau
+par4kr
+1park1s
+par3m2
+par3ne
+1pa2ro
+2parp4
+2parr
+4parta
+1parti
+1partn
+3party
+par3z
+pas2e
+pa3s2p
+pas6sein
+passer4
+pas6serg
+pas2s1p
+pa4st
+2paß
+pat1a
+pat4c
+pa5t4e2
+2patel
+1pat4h
+1pati
+1pat4r
+1pau
+2p1auf
+pa3uni
+2pausz
+1pav
+pay2
+1pä
+3pä2c
+pä3cke
+pä4ck3er
+3päd
+päde2
+pä2d1er
+3pär
+3päs
+pä4t1e2h
+pä4tent
+pä4tep
+pä4t3erb
+pä2t3h
+pä2to
+pä4tr
+pät3s4
+2p1b
+2p3c
+2p1d2
+pda4
+1pe.
+pe2a2
+pea4r
+pea4s
+p1e2b
+pech1
+1peda
+1peel
+pe2en
+2pef
+4p1eff
+1peg
+pei1
+2peic
+1peil
+p2eim
+2peis
+pekt4i
+pekt4sp
+2peku
+1p4el
+3pel.
+pe2l1a2
+pe4lai
+pe2l1ä
+peld4
+3pele
+pe4l1e2h
+pe2l1er
+pe2let
+pe2leu
+peli2d
+peli4n
+pe4l3ink
+pel3inn
+pel3k
+pel3l2a
+pell4e
+pell2i
+pe2lob
+3pels
+pel3sp
+1pem
+pe3nal
+pe4nas
+pen3d2a
+pe4nen1
+pe4ni2t
+pe2n1o
+pens2a
+3pen3si
+pen3s2o3
+pens2p
+pen6ster
+1pensu
+pen3sz
+pent2a
+2pentw
+penty2
+1pep
+pe3pi
+pept2
+pe1ra
+per2am
+per3as
+pe2rau
+pe2r1ä
+pere2b
+perer2
+perer3z
+pere1s
+pe3r2i3d
+3perio
+1perle
+3pero
+per4r3an
+1pers
+2perse
+2persi
+3persp
+peru2
+pe3run
+1perü
+perwa4r
+pe3s2a
+pese2n
+1pes5s2
+pe2st
+pes4ter
+pest1o
+3pet
+pet4r
+2pex
+1pé
+2pf.
+p2f1ab
+p2fad
+p2faf
+pf1ai
+p2f1ak
+pf1am
+pf1ans
+p2fa2r
+pf3are
+p2f1au
+1pfä
+p2fär
+p2f1äu
+4pfe.
+p2fef
+p2fei
+pf1eim
+pf1ein
+pfe2l
+p3fen.
+p4fener
+p2fent
+p4f1ep
+pfe2r5a
+p4ferde
+pfer6pro
+pf4es
+pf3f4
+p2f1i2d
+pf1inn
+p2f1in3s
+pfi2s
+pf1lam
+pf4lan
+pf3lä
+pf4leg
+pf3lei
+pf3lo
+p2f3om
+p2for
+pf3r
+pf1ra
+pf4rü
+2pfs2
+pf3sa
+pf3se
+pf3sl
+pf3sz
+2pf3t4
+p2fum
+2p3g2
+pgra2
+1ph
+2ph.
+ph2a
+phal4te4
+p1hand
+3pha1s
+p1hau
+phä1
+3phän
+4phär
+2phb
+2phd
+2p1hei
+phen3d2
+phe4n1e
+phen3s2
+2ph1ers
+2phf
+2phg
+phien3
+phik1a
+phi4kan
+2phk
+ph2l
+2phm
+2phn
+p2ho.
+p2hob
+2phö
+ph4r
+2phro
+2phs
+ph3t4
+2phthe
+phu4s
+phu3t
+2p1hü
+3phy
+2phz
+pi2a1
+piab4
+pia3k4
+pi4ali
+pia3n
+piap2
+pias4
+pi1ce
+pid2
+pi2el
+piel3a
+3pier
+pie2ra
+pie4reb
+pi3gl
+1pil
+pi3le
+3pilo
+pil4zer
+pil2zw
+p2im
+3pin.
+pi2nad
+3ping
+pingen4
+ping3s
+3pins.
+3pinse
+pin3s2p
+pi2o
+pi3o2i3
+pi3onu
+pi3os
+3pip
+pi2pe
+3pirate
+pi3ri
+3pirin
+1pis
+2piso
+pit2a
+pi3t2h
+pit2s
+pitz2e
+pi2z1in
+2p1j
+2p1k2
+pku2
+1p2l2
+2pl.
+3pla
+4p3lad
+p1lah
+pla3na
+p4lau
+pla2y
+3plä
+2p3le.
+ple1c
+ple2e
+p4leg
+ple3n2
+2p3ler
+2plig
+3p4lik
+p4liz
+2p3lu
+plu2s
+2p3m2
+2p1n2
+1p2o
+pob2
+po1c
+3pock
+3pod
+3poe
+po2el
+2poh
+po2i
+po3id
+3poin
+3pol
+po2lan
+po2l1au
+pold2e
+po3li
+polo3p
+pol3z2
+pom2ph
+2pond
+pont2
+po1ob
+po2p1ak
+po2p1ar
+po1pe
+po2pl
+po3pt
+po1rau
+porf4
+por3s
+3portal
+por2th
+3porti
+3porto.
+3portos
+3portr
+por4tre
+por6tric
+poss2
+po4sta
+pos4tag
+po2stä
+pos4tei
+pos3tel
+pos4tem
+po1s4tr
+post3ra
+po2ta
+pot1ar
+3potä
+3pote
+pot2h
+po2t3in
+pott1r
+po2t1u
+po3un
+po2w4
+po3x
+pö2bl
+pö2c
+2p1p
+p2p1ab
+pp1ans
+p2pat
+pp1au
+ppe3e
+pp1ei
+ppeli5ne
+ppels2
+ppel5ste
+pp2e2n1
+ppe4na
+p2p1erz
+p2pf4
+pp1fr
+p2p1h
+p4p1i4a
+pp3l
+p4p1lac
+p4plan
+pp1lä
+p2ple
+pp3oh
+p2p1ö2
+pp3p4
+p2p3ra
+p2p5rä
+p2pri
+pp3rol
+pp3rot
+p2p3ru
+p4ps
+pp3s4a
+pps2p
+pp3sy
+ppt4
+pp5te
+p4p1um
+p2r2
+1prak
+1prax
+p4rä
+1präd
+1präf
+1präg
+1präl
+3präm
+1präp
+3präs
+1präv
+2pre.
+2prec
+3pred
+2pree1
+pre2ei
+2preg
+1prei
+3preis
+prei4s3c
+prei6sei
+2preiz
+1prem
+pren4ga
+2p3rer
+1pres
+press4e
+pri4e
+2prig
+pri2l1
+2pring
+prings4
+1prinz
+pri2t1
+prit3a
+priter4
+prit5t
+1priv
+1pro
+3prob
+pro3be
+2proc
+7p4rod
+3p4rog
+3proj
+4pross
+pro1st
+prot2e
+3proto
+2prott
+2prö
+1prüf
+1prüg
+2prüh
+2prün
+2p1s
+4ps.
+ps1ad
+ps2hi
+ps1id
+p2sö
+ps4pi
+pss4
+p2st
+p3sta
+pst1au
+p3stä
+p3stea
+p3stel
+pst3erh
+ps2th
+p3s2ti
+ps4to
+p3stö
+ps2tu
+p3stü
+3p2sy
+4psys
+ps2ze
+2p1t
+pt1a
+pt2ab
+pta2g
+pt3a4t
+p3te
+p4t1e2b
+p4t3ec
+p4t1ei
+p4tele
+p4temp
+4pten
+p4t1en2g
+p4t1ent
+p4t1ep
+pt3erei
+p4t1erw
+p4t1erz
+p4t1e2ti
+p2t3h
+p3ti
+p4t1in1
+pt3ing
+pto2mo
+pto2p
+p4tos
+pto2w
+pt3r
+pt3s2
+pt4sl
+pts4t
+pt1uh
+pt1um
+p3tung
+pt1urs
+ptü4
+3p2ty
+pt3z2
+1pu
+pu1a
+pub4
+2puc
+pu2dr
+2p1uh
+2puk
+pu2kl
+pu2k1o
+pu2lin
+pul2sp
+pul2s5t
+2pulw
+pum2pl
+3pun
+4pund
+pun2e
+pun2s
+4punt
+2pur
+pu2ra
+pu2rei
+pus2h
+pu3she
+pu2s3t
+3put
+pu5t2e
+put2s
+puzi3
+1püf
+2pül
+pül3l2
+2p1v
+2p1w
+pwa4r
+3py1
+py3t
+2p1z2
+qu4
+que3rel
+quer5n
+que4te.
+1queu
+1ra.
+r1aa
+ra2ab
+2raac
+2raal
+ra3ar
+r2a1as
+r1ab
+ra2b1ar
+r2abä
+1rabbi
+rab2bl
+2rabd
+rabdru4
+ra2bei
+rab2er
+rab3erd
+2rabf
+2rabg
+2rabh
+1r4abi
+2rabk
+r2able
+ra2bli
+ra4b5lo
+2ra2br
+2rabs4
+2rabt
+2r3abw
+1raby
+2rabz
+r2ac.
+ra2ce
+2r1acet
+ra4cheb
+ra2cho
+rach6t5rä
+ra2chu
+r2ack
+1r2ad
+r4ad.
+rada2
+ra4dam
+2radap
+3radar
+ra2dei
+3radf
+3radh
+3radio
+3rado
+3radp
+ra4d1r
+rad5ri
+rad5t4
+ra2el
+r2af
+raf3ahn
+raf3ar
+rafe2
+ra2f1er
+raf3r
+raft5s
+rages4
+2ragg
+ra3g4le
+4ragm
+ra2gn
+r2ago
+1rah.
+rahle4n
+5r4ahm
+r1ahn
+2ra1ho
+ra3hö
+4raht
+r2ai
+2raic
+rail2l
+2r3air
+ra3ke
+2rakk
+3ra1k4l
+ra2kre
+r3a2kro
+2rakti
+ra2kus
+3rakü
+2rakz
+r2al
+r4al.
+ra2la2
+ra4l3ab
+ral1ak
+ra3lamp
+rala4s
+ra2lä
+ral3b4
+3r4ald
+ra4l3end
+ra4lent
+ra4l5ern
+ra3lex
+r4ali
+ra2lid
+rali1e
+ra4lind
+ra4l3ing
+2r3alk.
+2r3alm.
+2ralp.
+4ralpe
+r4als
+ral3sk
+ral3su
+r3alt
+3r4al5t4h
+ra2l3u
+3raly
+rama3s
+ra2mei
+ra2mer
+r2ami
+r2amm
+ram4man
+ram6mens
+ram6m5ers
+ram4m3u
+2ramn
+3ramsc
+2r1amt
+ramt4s
+ran3ade
+r1a2nal
+ra2nan
+ra2nar
+ra2nau
+2ranb
+r2anbe
+r4anda
+r4ande
+ran4dep
+ran4d3er
+3r2andi
+rand3s
+rand5se
+3raner
+2ranf
+2ranga
+ran6g5e6be
+1rangi
+r2angl
+rangs2
+rang5ste
+rani1e
+r3a4nil
+ran3ka
+ran2kr
+ran2kü
+4ranl
+2r1anm
+r2anmi
+r2anmu
+2ranna
+rano2i
+2r1anp
+2ranr
+2rans
+r2ans.
+r1ansc
+ran4spa
+4r5antei
+r1anth
+2rantr
+1ranu
+2ranw
+r2anz.
+r2ap
+2rapf
+2rapo
+ra2pok
+ra2pos
+rap2pr
+2ra2pri
+2r1aq
+r1ar
+r2ar1a
+2rarc
+r2are
+3r4arei
+raren1
+r2arf4
+ra3rie
+rar3in
+ra3ris
+r3a4rist
+4r3arit
+r2ark
+raro2
+ra2rom
+2rart
+2rarz
+rar3zw
+r2as
+r4as.
+ras2a
+ra4schl
+ra3spr
+ra2sta
+r4aste
+ras4t3ei
+r3asth
+ras4to
+2rasyl
+2raß
+1rat
+r4at.
+rat1a
+rat2ak
+ra2tan
+ra2t1ei
+r3atel
+ra4tid
+2ratm
+rat2o
+2r3a2tom
+ra5tor
+rat4r
+2ratta
+2rattr
+4ratz
+rat3ze
+4rau.
+3raub.
+rau3e4n
+2rauf
+rau3fä
+2rau3g2
+3raum
+rau4m3ag
+rau4man
+rau2m1i
+3raup
+4raur
+2rausb
+3raus2c
+2rausd
+2rausf
+2rausg
+raus8gewä
+2raush
+2rausl
+rau2sp
+2rauss
+raus8scheidu
+raus5se
+2rausv
+2rausw
+2rauto
+raut1r
+rau4tra
+rau4tro
+raut5s
+1raü
+r2ax
+raxe3
+r3axt
+4räb
+3r2äd
+4räf
+rä1fr
+4räg
+2räh
+4räm
+3rän.
+3räni
+3räns
+2räp
+2räq
+2r1är
+r2är.
+rä3ra
+rä1ro
+rä2sc
+räse2
+räte1s
+3rätse
+4rätz
+rä2u
+4räue
+räu2s
+räus4c
+räu7schen.
+2räuss
+2räuß
+4räut
+2räx
+4r1b
+r2b1ab
+r3bac
+rba4del
+rb2al
+r2bang
+r2bant
+rba3re
+rb1art
+r2barz
+rb1auf
+rbb2
+rb1ech
+rbe3erf
+rbei5d2
+rbe3inf
+rb3einh
+rbe3int
+r4belä
+rbel2o
+r3ben.
+rbe3r2e
+rber6gin
+rbe3rum
+r2bim
+r2binf
+rbit2a
+rbi3tu
+rb4la2d
+r2blan
+r8blasser
+r4b3last
+r3blat
+r3blau
+r2b3le.
+r3blen
+rb3ler
+r2bleu
+rb2lin
+rb2lö
+rb2ob
+rb3ras
+rb3rea
+r8b7rechts
+rb4sam
+rb2sei
+rb2ser
+rb2s1o
+rb4stä
+rb2su
+rb2u
+rbü4b
+rby4t
+4rc
+r1ce
+rce4n
+r1che.
+r1chen
+r1ch2i
+rch3l
+r3ch4lo
+rch3m
+rch3r
+rch1s4
+rch3sp
+rch3t2a
+rchter6r
+rch1w
+r1ci
+r2ck
+r1cl
+r1ç
+4r1d
+rd2ac
+r2daf
+r2d1ak
+r2d1a2l
+rd2amm
+rd1an
+rdani1
+rd1ara
+rd1ark
+r2darz
+rdär2
+r3de.
+r2dei
+rd2ei.
+r4deis
+r2d1elb
+r2delf
+rdem6
+rden3d
+r4dengl
+rde4nu
+rde3ob
+rde3r4er
+rderin6s
+r4d3ernt
+r3des
+rde3sp
+r4d1ex
+r2d1inn
+rd1iri
+rd1ita
+r2dof
+r3don
+rd1os
+rd3oss
+rdo4st
+r2dö
+rd3rat
+r2drau
+rd4ri
+rd5ris
+rd4rö
+r3d4rü
+rd2sän
+rd3s2k
+rd3s2z
+rdt4
+rd3th
+rdt2s
+r2d1uk
+1re
+3re.
+rea2d
+rea6l5erw
+4re2am
+re3at.
+re3ats
+2reä
+re2b1a
+re2b1l
+reb1r
+reb3ra
+reb3so
+rech3ar
+4rechs
+2reck.
+2recki
+3red.
+re3da
+4redd
+2redi
+re2dik
+3redn
+3redu
+re1e
+3refe
+4reff
+r2eff.
+3refl
+3refo
+3reg
+rege4l3ä
+4r1egg
+re3gi
+2reh
+re2hac
+re2har
+rehen1
+re4hene
+re4h3ent
+re2hi
+reh1l4
+re2h1o
+re3hol
+re2hü
+r2ei.
+r2eib
+rei4bel
+rei4ble
+2reid
+r2eie
+4reier.
+rei4fei
+4reifel
+2reig
+3reigä
+3reigeh
+r4eigel
+6reigens
+3reigi
+4reign
+3reigru
+rei3l2a
+rei3l2i
+2r1eilt
+3reim
+reim2p
+r1ein
+rein2a
+rei5nac
+rei3nal
+2reinb
+rein4du
+rei3n4e3c
+reinen5
+2reinf
+re4info
+4reinn
+4r3einr
+rein8s7tre
+rein4sz
+rein6teg
+re1in2v
+4reisar
+4reisb
+reises4
+2reisf
+2reish
+2reisr
+reister6
+2reisw
+4reiti
+reit3s2
+3rek
+4re2ke
+4rekk
+r2el.
+re3lat
+2relb
+rel2e
+relea4
+re5lei
+re2lek
+4relem
+r2elev
+2relf
+2relit
+2relix
+r2ell
+rel4lar
+rel4lei
+re3lo
+r2els
+2relt
+relu2
+r4em.
+4remb
+rem2da
+re2m1ei
+r2emi
+re3mig
+2remis
+4remit
+4rempf
+rems1c
+rem4str
+2rem2u
+r4en.
+r2ena
+2rena.
+re4nac
+re3nal
+re4n3an
+2r1endg
+3rendi
+ren3dr
+ren2eu
+5renf
+4rengag
+2rengp
+3renh
+re2ni
+3renl
+3renm
+ren4nar
+ren6nene
+renns4
+renrü2
+ren6sein
+ren6serg
+rens2p
+2rentd
+2rentf
+3rentfo
+2r1entg
+r3enthä
+2r1entl
+2r1ents
+2rentw
+2rentz
+r2enz
+ren6z5er6f
+renzer6l
+ren6z5er6s
+renzer6w
+ren4z3in
+ren2zw
+re2ob
+re1on
+re3or
+3repe
+4re2pen
+2repi
+re2pis
+2repoc
+2r1e2pos
+4repp
+3repu
+3r4er.
+rera2
+2r1erb
+rer2bi
+3r2erbr
+2r1erd
+rere2
+4r3ereig
+r1e4rek
+re2r1ep
+r2erer
+2r1erf
+4rerfah
+r4erfe
+3r2erfr
+rer2fü
+r1erg
+4r3ergeb
+5rergebü
+r4ergen
+3r4erges
+2rergo
+rer2gr
+r4ergru
+rer2hö
+r1erk
+rer4kan
+rer2ke
+4r3erken
+3r2erki
+3r2erko
+r1erl
+2r3er2la
+5r4erlag
+r3erleb
+r2erli
+2rerlö
+2r1erm
+rer2n
+2r1ernä
+r1erne
+2r1erni
+4r3erns
+4r1ernt
+re1ro
+re2rob
+re4rosi
+2r1er2ö
+r1erre
+rer4reg
+rer4rei
+r1erri
+5r2ers.
+2r1ersa
+rer3sc
+r6erschi
+r2erse
+2rersp
+rer2st
+r6erstad
+r1ert4
+r2erte
+4rerträ
+r1erw
+2rerwa
+rer4wac
+rer4wec
+r4erwes
+2r1erz
+rer2zä
+3r2erzy
+3r4es.
+re2sa
+re4sam
+re3sar
+re4schw
+3rese
+re4se2h
+3resol
+3reson
+res2po
+2ress
+4resse
+res6s5erw
+4ressu
+re1sta
+res4tas
+res4tex
+2res2tu
+3resu
+re2t1ak
+re2tau
+re2thy
+re4trol
+re2u
+reu4eri
+reu3g2
+2reul
+re3uni
+2r1eur
+4reuu
+2reü
+4r3eva
+2r1evid
+rewa4r
+re2wi
+2rewo
+2r1e2x1
+2rezi
+1ré
+4r1f
+r3fam
+r2fent
+r3f2es
+rff2
+rf3fe
+rfi4le.
+r4fland
+r3f4lä
+rf3lic
+rf4lö
+r3flü
+r2fo2b
+rfolg4s
+r3fot
+r4frauc
+rf4ru
+rf4rü
+rf4sam
+rf2s1ä
+rf2su
+rf2ta
+rft4r
+rf2u
+rfzu3
+4r1g
+r2g1a2d
+r2g1ah
+r2g1ak
+rga4ner
+r2g1ap
+r2garb
+rg3art.
+r2g1ask
+rgas4ta
+rga3su
+rgd2
+rge4an
+rge2bl
+r2g1e2c
+r3g2el
+rge4l3er
+rgen6sem
+rgen4z3w
+r4ge4tap
+r2geto
+r7gie
+rgi4sel
+r2glan
+r2gleu
+r2glig
+rg2log
+rg2lu
+r2g3na
+r2gne
+r2g3ni
+r2g3no
+r2g3oa
+r2go4b
+r3gog
+rg3op
+r2g1or
+rgö2
+r2g1öd
+r2g3ral
+rg4rau
+r2greg
+r2g3res
+r2gret
+rg3rin
+r3grun
+rg3rüs
+rg3sä
+rg3se
+rgs2ei
+rg4sel
+rg3s4i
+rg3sp
+rgs2pe
+rgs2po
+rgs2ti
+rgs4tr
+rgs2tu
+rg3su
+r1h4
+2rh.
+2rha
+r2ha.
+r4haltb
+r3han
+2rhä
+r2he.
+r5hea
+2rheb
+2rhef
+2rheit
+2rher
+2rhi
+2rhof
+rho2i3
+2rhol
+2rhot
+2rhöl
+2rhs
+rhu2s
+2rhü
+1ri
+ria3ne
+ri2ano
+ria1s
+ri2ast
+ri3at
+ri4atr
+rib2bl
+ri1ce
+ri1cha
+richt8spo
+3richtu
+ri2con
+ri2dau
+ri3de.
+4ridee
+ri2de2l
+ri4ds
+r2ie
+rief1a
+4riefm
+rie2f3r
+ri2e1i
+riein1
+ri1el
+rie3l2a
+ri3els
+ri4enä
+riene2
+ri3eni
+rien3s
+rie4nu
+ri1er.
+rie3re
+riere4n
+ri3ers.
+rie3sa
+ri1eu
+ri2f1a
+ri2fä
+ri2fei
+ri2fer
+rif6f5end
+rif4fer
+ri2f1o
+ri2fr
+rif3s
+rif4ter
+3rig
+4riga
+4r3i2gel
+ri4gene
+5rigj
+rig1l
+4rigr
+4rij
+ri2kar
+ri2kä
+ri2kin
+ri2kn
+ri4kone
+ri2kor
+2rima
+ri2mag
+ri2mau
+ri2me.
+2rimm
+2rimp
+rim2s
+rim4sc
+rim4st
+rin2c
+r1ind
+rin4dex
+rin6dize
+2rindu
+ri3n2e
+rine1i
+2r1inf
+rin2fo
+3r2infr
+rin2ga
+ring3le
+rin2gr
+2r1inh
+2rinit
+4rinj
+4rink
+rin2kl
+rin2ko
+rin2kr
+2rinl
+6r5innenm
+4r3inner
+2r1innr
+r1innu
+2r1inq
+2r1ins
+3r2ins.
+rin4sek
+rin2so
+r4inspi
+3r2insy
+2rint
+4rinte
+rin4t5re
+2r1inv
+ri2ob
+4r1ir
+r2is
+ris2a
+ri3san
+ri4sch3o
+ri4schw
+3risik
+ri3s2ko
+rismu2
+r3iso
+2risol
+ri4s3p
+r3isr
+3riss
+ri4s3t
+ris6t5ers
+ris4t3r
+r2it
+rit2a
+r3i2tal
+rit3ant
+2ri3t4r
+rits2
+rit2t3a
+3ritter
+rit4to
+rit2t1r
+5ritu
+rix1
+1rí
+2r1j
+4r1k
+rka2b3l
+r2k1ak
+rk1all
+rk2am
+rk1are
+rk1asp
+rkauf4s
+r2k1äh
+r2kef
+r3kel
+r4kelem
+rke2n1
+rken3s4t
+rk5ersta
+r2k1erw
+r3ket
+r2k1im
+rk4las
+rk4lau
+rk4lim
+r2klis
+rk2lo
+rk2lu
+rk4n
+rk5nu
+r2kob
+r3kol
+r3kon
+rk1o4ri
+r2kou
+rk2ö
+rk3räu
+r3kri
+rk3rin
+r2k3rom
+r2krou
+rk2sei
+rk2sel
+rk2ser
+rk3shi
+rk2so
+rk2sp
+rkstati6
+rk4stec
+rk4stoc
+rk2ta
+rk2tel
+rk4t3eng
+rk4tent
+rk4t3erf
+rk4terg
+rk4t3erl
+rkt3ers
+rk6tersc
+rk4t3erw
+rk4t3erz
+rk4teta
+rk2tin
+rk4t1o2
+rkto4b
+rk2t3r
+rk4tri
+rk2tum
+rk2um
+rku2n
+rku2sa
+r2küb
+2r1l
+rl2ab
+r3lag
+r5land
+rlan4d3i
+r2l1ar
+r2l1a2sc
+r2l3aug
+rle2a
+r3lec
+r3lep
+r3lex
+rlg4
+r3l2i
+rli4ne.
+rli2s
+r3l2o
+rlou1
+rl2ö
+rlös3s
+rls2a
+rl2spr
+rl3ste
+rl2s5to
+rl3t
+r3l2u
+r3ly
+rlz2
+4r1m
+r2mab
+r2m1ad
+rma2la
+rm1ald
+rm1ami
+r2m1ank
+r4mantr
+rm1anz
+r2m3aph
+r2marc
+r2marz
+rma4s3pe
+rmat2o
+rm2är
+rm3d2
+rm1ef
+r4m3einh
+rme4na
+rm2ene
+r2ment
+r2meo
+r2m1erh
+r2m1erl
+r2m1erp
+rm2es
+rme1st
+rmes4z
+rmeta2
+r2mide
+rmi6nanz
+rminen4
+rmi6neng
+rmon3s4
+rm1o2ri
+rmo1s
+rm3p2
+rm3sa
+rm3s2k
+rm3t2
+rmu2n
+r4muna
+r2muni
+4rn
+rna2b
+r3nad
+rn4ade
+r3nage
+r2n1all
+rna4n
+rn4and
+rn3ani
+r2nanz
+rna2r
+rn3are
+r4n3ari
+r4n1ast
+r4n3att
+r2nau
+rn3aug
+rnd4
+rn3de
+rn3dr
+r4nef
+rn2eid
+r4neif
+r4neis
+rn1ema
+rne2n
+rn1ene
+rn2eng
+r2n1ep
+r4n1erg
+rn4erhi
+r4n1erl
+r4n1ert
+r4n1erw
+r4nerz
+r5nes
+rn2e2t
+rne4tem
+rne4to
+rn2eu
+rne3uf
+r4nex
+rn3f
+rn3g2
+r2nid
+r2nin
+r3nit
+rnk2
+rnn2
+r3nod
+rn2oh
+rn3oly
+r2n1op
+r2n1or
+rn1ö
+rnö2d
+rn3s2a
+rn3s2ä
+rn3s4p
+rns2u
+rn3s2z
+rn3t2a
+rn3t2e
+rn1ur
+r1nü
+r1ny
+rnz2
+2robj
+rob2l
+1robo
+ro2bo2r
+ro2bre
+2robs
+ro1c
+roch2a
+3rock.
+r2o3de
+ro3e4
+2roff
+ro3fl
+4rog.
+rog2a
+3rogg
+roh1l
+4rohn
+ro2hö
+3rohr
+3roi
+ro3in
+ro1ir
+rok2l
+ro3le
+ro2liv
+rol4lan
+rolle4
+rol6lerg
+rolls2
+rol3s
+2roly
+4rom.
+ro2mad
+ro2mal
+3roman.
+2romb
+romen3e
+ro2m1er2
+2romn
+rom3s
+4romt
+r2on
+ro3n4ab
+ro2nan
+3rond
+4ronk
+3ronn
+rons2
+ron4tan
+ron6tend
+ron4t3r
+ron2t1u
+ro1ny
+ro1o2f
+ro1pe
+2ropf
+1ropl
+2ropt
+r1or
+ro2r3al
+ro2rat
+2rorc
+ro2rel
+ro2ro
+ror3th
+rort2s
+ror2ü
+ro3sh
+ro3s2i
+ro5s2k
+ros4sal
+ros4san
+ros2s1c
+ros4st
+ro1sta
+ros6t1r
+ro2sum
+4r3osz
+4roß
+ro2ßi
+ro2tan
+ro4tas
+ro4t3au
+ro2tä
+ro3te
+ro2tei
+ro2t3ho
+ro2tru
+rot3s
+rots2o
+rot2ta
+ro3tu
+3roul
+ro3unt
+5rout
+4roy
+rö2b3l
+rö2du
+2rö2f
+3röh
+2r1ök
+1röl
+2röl.
+rö3le
+röl2l
+r1ölp
+3römi
+r1ör
+r2ös.
+rös1c
+r2öse
+1rösl
+4röß
+3rötu
+4r1p2
+r3pa
+r3pe
+rper3in
+rpf4
+r2pli
+rp4lu
+rpo2st
+rpro1
+rp3se
+rps3t
+r4pt
+r3pu
+2r1q
+2r1r
+rr2ab
+rrat2s
+rr1auf
+rr1äm
+rrb2
+rr1c
+r5rega
+r5regi
+rr2ei
+rre2le
+rre2pa
+rr2er
+rrer4s
+r3res
+rre2ve
+rr2hen
+rr2hos
+rr2i
+rri3k2
+rrm2
+rrn3au
+rr2o
+rr3obs
+rro3m
+rro2re
+rrr2
+rr2st
+rr3str
+rr3stu
+rr2th
+r3r2u
+r3r2ü
+rrz2
+4r1s
+r3sabo
+r2s1a2d
+rs2al
+r4samp
+r4s1amt
+rs2an
+r4sanf
+r4s3ang
+rs3anm
+r4sanp
+rs3ant
+rs3anz
+rs3ar
+rs4ark
+r4sarm
+r4sch3e4b
+r6scherl
+r3schu
+r2s1ebe
+rse2e
+r2s1ef
+r2sein
+rse2n
+rs2end
+rse4ne
+r2sepi
+rs1ere
+r2serh
+rs1ers
+r2serz
+rse2t
+rs1eta
+rs2ext
+r3s2hav
+r3shir
+r3sho
+rs2hor
+r4shu
+rs2il
+rs2ka
+rs2kel
+rs2ki
+rs2kl
+r4skor
+r3s4kri
+r4sky
+rs4mog
+r3s4no
+r3so
+r4sob
+r4s1op
+r4sord
+r4sorie
+r4s3ort.
+rs2p
+r4spara
+r3spe
+r4s3ph
+rs4por
+r4sput
+rss2
+rst3abl
+rst3ala
+r4stale
+r4stans
+r4stant
+r2stas
+r7stati
+r7statu
+r3stä
+rst5eing
+r6st5eint
+rs4temp
+rster2
+rs4t4erb
+rst3erl
+r3s4tern
+rst3erw
+rs2tev
+rs2t3h
+rs2ti
+r3stie
+r2stin
+rst3ing
+r3stink
+r2stip
+r2stit
+r3sto
+rs4tol
+rs4tor
+r4stot
+rs4tr
+r3stra
+rst3ran
+r6strang
+rs2tu
+rs4tuc
+r3s4tü
+rsuch4s
+r3suf
+r3sy
+r1ß
+4r1t
+r2tabo
+rt1abs
+rta2ck
+r2t1ad
+r2t3ae
+r3taf
+rt3akr
+r4t3albe
+rta3l2e
+r2t1all
+rt1am
+rt2ame
+r3t2anb
+r2t1ang
+rt1ann
+rt1ant
+r2t1ar
+rt3att
+r3taufe
+rt3äh
+rt1änd
+rt1ärm
+rte1e2
+r3teh
+rt1ein
+rt4eind
+r4t3einh
+rtei1s4
+r2telf
+rtels4t
+r2temo
+rte2n1
+rte4na
+rten3s4
+r4t3ents
+rten3z
+rteo2
+rt3erei
+r6tereig
+r4terfa
+r4ter4fo
+rt1erh
+rt1erk
+r4t3erla
+rter8löse
+rter6mit
+r4t3ernä
+r2terö
+rter4re
+rt1ers
+rt4ersp
+rt1erz
+rte3s2k
+r2texa
+rt3he
+r2t3hi
+rt3hol
+rt2hum
+r3tic
+r2tid
+rtik2
+r2t1ima
+r4t3inf
+rt2is
+r2t1o4b
+r5top.
+rto1pf
+rt1or
+r4torg
+r4trak
+rt3rams
+rt3rand
+rt3rati
+rt3rec
+r3tre1s
+r4t3ris
+rt3rol
+rt3roma
+r3trop
+r2trou
+rtrü2c
+r4ts
+rt4seh
+rts2el
+rt3sex
+rts3ing
+rt2s1o
+rt2spa
+rt2spr
+rt4s3tan
+rts4tie
+rt3t4
+rt1umb
+rt2u3na
+r2t1up
+r2t1urt
+rtu4t
+r2t3ute
+r3tü
+rt3z2
+1ru
+ru1a
+ru4ale
+ru3a2r3
+rube4
+ruben3
+rubens4
+rub2i
+ru6ckerl
+ru2cku
+rude2a
+ru2dr
+3ruf
+ru2fa
+ruff4
+ruf2s
+rufs1p
+ruf4ter
+ru2g3r
+3ruhm
+2r1uhr
+3ruin
+ru1ins
+ru1is
+2rum
+4r3umd
+4r3umf
+4r3umg
+ru2mi
+4r3uml
+4r3umsa
+4r3umw
+4rumz
+2r1una
+2rund
+run4d1a
+runden5e
+run4d3er
+runds2
+run2e
+runei2
+4r1unf
+run2ga
+2rungl
+4r1u2ni
+r3unio
+ru4nis.
+run2kr
+4r1unl
+2r1unm
+4runn
+4runr
+r1unse
+4r3unt
+4runw
+2rupd
+ru3pr
+4r3u2r
+rur1e
+5ru3ro
+ru2si
+rus2p
+rus2s1p
+rus4st
+ru2st
+ru2tab
+rute4
+ru4tei
+ru4t1el
+rut3h
+ru4t1o4
+ru2t3r
+rut6scha
+4ruz
+ru2z1w
+1rü
+2rüb
+4rübu
+rü1ch
+rü4ckel
+rücks4
+rü2hel
+rüher2
+rüh1l
+4rümm
+rün3z
+2r1v
+rv2el
+rve4n1e
+rvenen4
+r4ventz
+rve3s
+r3v2o
+2r1w
+rwe4gel
+r3wei
+rwelt4s
+r5werk
+r5wert
+r2wo.
+r3woh
+r3wort
+rwun3s
+4r1x
+1ry
+ry2c
+ry3sth
+rysti1
+2r1z
+rz2ans
+r2zant
+r2zar
+r2zat
+r3zähn
+rz2än
+r5zene
+rz1eng
+r4z3ents
+rze2p
+rze2ra
+r2z1erd
+r2z1erf
+r2z1erg
+rz1erk
+r2z1erl
+r2z1erw
+r2z1ess
+rz1id
+rz1int
+rzir3
+rz2of
+r2z3ot
+rz2tan
+rz3te
+rz2th
+rzu4g3l
+r2zwä
+r3z2wec
+r2zwir
+1sa
+3sa.
+3s2aa
+2s1ab
+sab2ä
+4sabd
+sa2be
+3sabet
+s3abi
+sa2bit
+sa2bl
+4sabm
+sa2bor
+sa2br
+4s3abs
+4s1acc
+5s2ache
+sa2cho
+sach3t
+s2ack
+2s1ada
+2s1adm
+2s1a2dr
+3safa
+sa4fe
+4s3aff
+sa1f4r
+s2aft
+saf4tr
+3saga
+sag2e
+5sagen.
+4s3agent
+2s1agg
+sa2gio
+sa2git
+sag4n
+s1a2gr
+s2ahs
+3s2ai
+sa3i2k1
+sail2
+sai4r
+2s1ak
+sa2ka
+sak2e
+3saki
+4sakk
+4sakt
+3s2al.
+s2al2a
+sa2l3an
+sa2lar
+sa3lat
+3salb
+sal3bl
+3sald
+sa4lerk
+3sali
+sa2l1id
+s1all
+sal4le.
+3salo
+sal2se
+s1alt
+s2al3t4h
+3salz
+3sam
+4s1a2mat
+4s1a2mei
+s3ameri
+5samm
+6s1amma
+4s1amn
+s1am3p4
+4samph
+sam4ta
+sam4to
+samt3st
+s1an
+s2an.
+2s3a2na
+sa4nä
+2s3anb
+s2an2c
+3s2and
+san4dan
+san4dri
+sand3s
+sa2ner
+3sang.
+2s3anh
+3sani
+3sanken
+2s3anl
+2sa2no
+2s3anp
+2s3ans
+s4anse
+san4sk
+san3sp
+4santei
+4s3antr
+4s3anw
+2sanz
+2s1ap
+sa2pe
+sa2po
+sap3p
+3sapr
+2s1aq
+2s1ar
+3s4ar.
+3sara
+4s3arb
+3s2ard
+s2are
+s3area
+sar2ga
+sa3rin
+s2ark
+4sarm.
+sa2rom
+s3arr
+s2ars
+4sart
+sa4r1u2
+sas2a
+2s1asc
+2s1a4si
+2s1a4sp
+sas2tu
+4s1asy
+sat2a
+sa4t3ant
+sat1ei
+2s3a4tem
+s3ath
+3sat2i
+2s3atl
+2satm
+sat2o
+sa4tol
+sa2tom
+sa2tr
+s3atta
+4s3attr
+3satz
+5satza
+sat4zel
+sat4z3en
+s1au
+3sau.
+3sauc
+3sau2e
+2sauf
+4s3aufb
+saug3le
+sau2gr
+3saum
+sauri1
+2saus
+3saus.
+4s3ausb
+4sausf
+4sausg
+sau2sp
+4sauss
+3sauste
+4s3ausw
+2sauß
+s1av
+sa2ve
+sa2xi
+sa2y
+1sä
+3s2äb
+3s2äc
+3s2äg
+s1äh
+4s3ähn
+3säl
+4s1ält
+2s1äm
+4s3änd
+4s3äp
+2säq
+2s1är
+3s2ärg
+3s2ät
+3säul
+4säuß
+4s3b4
+sba4ne
+sbau6men
+sbe3r2e
+1sc
+2sc.
+2scab
+2scac
+2scal
+2scam
+2scar
+2s1ce
+4s3cei
+sc4h
+4sch.
+3schaf
+3s2chal
+sch3ana
+4schanc
+4schang
+4schao
+4schara
+4sch3ar5m
+s2chä
+2schäq
+4schb
+4schc
+2schd
+sch2e
+4schech
+6schef.
+6schefi
+6schefs
+s4chei
+4sch3ei.
+sch6ein.
+4schemp
+s4cher
+sch5erfü
+3sches
+4schess
+s2cheu
+4schex
+2schf
+2schg
+2schh
+schi4d
+schi4e
+s4chif
+4schiru
+3schis
+2schk
+s4chl
+sch4lac
+4schle.
+6schlein
+4schloc
+4schlöc
+4schmas
+4schmed
+2schmö
+4schmüh
+2schmy
+2schn.
+4schneb
+4schnut
+4schobj
+4schorc
+2schox
+4schör
+4schp
+2schq
+4schrad
+4schre.
+4schrin
+4s3chris
+sch3rom
+4schron
+4schrou
+4schs
+schs2e
+sch3s2k
+schs4ti
+4sch3t
+scht2a
+scht2i
+scht2o
+s4chu
+4schunt
+2schv
+sch4web
+4schweg
+6schwerk
+4schwet
+4schwid
+3schwu
+2schz
+2scj
+4s3cl
+2sco
+3s2cop
+s2cr
+2scs
+2scu
+4s3d2
+sda3me
+sde1s2
+sdien4e
+sdi1st
+sd4r
+1se
+se3ar
+se3at.
+seb2
+5sebä
+2s1e2ben
+2s1echo
+sech4st
+2s1echt
+4s1e2ck
+se2dik
+3see
+see1i4
+se2e3ig
+se2el
+see3len
+se3en.
+seen2e
+se3er.
+see1ra
+seer2e
+se3e2r1i
+se1ers
+see3s4
+see3t
+4s3eff
+sef4l
+3s2eg
+4s3e2gal
+se2gl
+seg4r
+3seh
+seh1a
+se2hag
+se2hel
+seher4e
+se4herk
+se2h1in
+seh3l
+se2h3ö
+seh3re
+seh5r2i
+seh1s
+seh3t
+se2hüb
+2sei.
+2s1eic
+2s1eid.
+sei3da
+4s3eifer
+4s1eig
+sei3le
+s2eim
+s1ein
+5s4ein.
+2seinb
+sein4du
+2sei3n2e
+seine3i
+4seinfl
+sein4fo
+4seing
+2s3einh
+2seini
+2seink
+2seinl
+2seinn
+4seinr
+s4eins.
+4seinsc
+4seinsp
+sein8stit
+sein6str
+4seintr
+2seinw
+2s3einz
+2s1eis
+3s2eit
+seit2s
+3sek
+4s1e2kel
+4sekz
+s2el.
+se2l1a
+se3lad
+3s2elb
+sel1ec
+se2lef
+2s3e2leg
+4selem
+se2ler
+sel3ers
+2self.
+s3e2lit
+2s1elix
+s2ell
+se2lob
+s2els
+sel3sz
+selz2
+sem2a
+sem2e
+2s1emis
+4s3emp
+s4en.
+3sena
+se4nad
+se3nal
+se4nas
+sen3au
+s2enb
+2s1endl
+sen3d4r
+senen1
+se4nene
+4senerg
+se4ners
+se4ness
+s2enf
+3s4eni
+se2n1im
+3s2enk
+se2no
+se4nott
+se4noz
+3sens
+s2ensa
+sen4s3e4h
+4sensem
+s4ensi
+s2enso
+senst2
+sen8s7turm
+sent2a
+sen3tä
+2sentd
+4sentf
+4s1entg
+4sentla
+4sentn
+sen3tr
+4s1ents
+2sentw
+4sentwu
+4sentwü
+2sentz
+se4n3u
+sen4zer
+sen3zw
+seo2r
+se2pen
+3seq
+s4er.
+se2r3a2d
+ser3al
+ser3ass
+ser3äus
+serb2
+s3erbe.
+se2re2b
+6sereign
+se4r3eim
+5s4eren
+se4r3enk
+s4erfe
+s2erfr
+s1erfü
+4serfül
+ser3g2
+s2ergr
+s1erh
+2serhö
+3seri
+5serie
+ser3k4
+4s3ermit
+s2ern.
+s3erneu
+4s3ernt
+2s1e2ros
+s1erot
+s1erö
+4seröf
+3s2ers.
+2sersa
+4serseh
+ser6sehn
+4ser4set
+se3ru
+se4ruh
+ser2um
+se4rup
+5s4er3v
+s1erz
+5s4es.
+se3s4a
+se2sel
+se3sk
+2s1essa
+se1sta
+se3stec
+se3stei
+se5stemp
+sest3ri
+set2a
+2s3e4tap
+se2tat
+s1e2th
+4s1e2tik
+se3tun
+se2ty
+3setz
+3seuc
+4s1eul
+seum4sc
+se1u2n
+s1ex
+5sex.
+2sexa
+se2x3en
+s2exi
+s2exo
+4sexp
+sex3t4r
+4sexz
+1sé
+4s3f4
+sfal6l5er
+4s3g4
+sgang4
+sga3su
+sge3s4a
+2s1h
+4sh.
+sh2a
+3s2ha.
+shal4li
+shalt2
+shalt4s
+4shan
+s2has.
+s3hä
+sh2e
+3shi.
+3shid
+s2hip
+shi4r
+sh3n
+4s3hoc
+4s3hof
+4shom
+3s2hop
+sho4re
+3s4how
+4s3hö
+sh4r2
+4shs
+s3hu
+1si
+si2ad
+2siat
+5s4i1c
+si2cha
+sid2
+s2ide.
+s2i3do
+2sidy
+3s4ie
+sie2bu
+sieh1e
+sie4hes
+si3e2n3
+si1err
+si1f4
+3s4ig
+si2g1a2
+si2gei
+sig4n
+si2g3r
+sig4st
+si2k1ab
+si2kak
+si2kar
+si2k1ä
+si2k1el
+siken2
+sik3erl
+si2ket
+si2k3i
+sikin1
+si2k3n
+siko3
+si2k3r
+sik3s
+sik3t4
+si2ku
+sil2br
+sil2e
+3sili
+s1ill
+3silo
+2s1imm
+sim4st
+3simu
+si3n4a
+2s1ind
+2s1inf
+s3infor
+sing1a
+sin3g4le
+sin2g3r
+sings2
+sing3sa
+sing3so
+2s1inh
+s1in1i
+sini1e
+sinner4
+2s1inno
+2s1inq
+2s1ins
+s2ins.
+2s1int
+2s1inv
+3sio
+sion4
+sirn4
+2sirr
+3siru
+si2sa
+si4sam
+3s2isc
+si4schu
+si2s1e2
+si2sis
+s1i2so
+si2s3p
+sis3s4
+3s4ist
+si2su
+3s2it
+si2tal
+si2tau
+si2tra
+sit2u
+si2va
+sive3
+si4v3erf
+siv1o4
+si2vor
+siz2
+1sí
+2s3j
+2s1k2
+4sk.
+sk4a
+4s3kab
+s3kad
+4skalk
+4s3kam
+4s3kana
+4skanä
+3skanda
+4s3kap
+4s3kar
+4s3kas
+ska4te.
+4skateg
+ska4tes
+ska4to
+4skä
+4skb
+ske2li
+4sken
+3skep
+4sker
+s3kh
+3s2ki.
+3s2kif
+3s2kik
+s3kin
+4skir
+ski1s
+s2kis.
+3skiz
+sk4l
+4s3klas
+3s2klav
+4s3klu
+4sk4n
+4skoh
+4skol
+4skom
+4s3kon
+3skop.
+sko2pr
+4skos
+4skow
+4skö
+4s3kra
+s3kre
+4s3kro
+4sk3s
+4sk3t2
+skto2
+3skulp
+4skun
+sku2s1
+4skü
+4skv
+2s1l2
+sl4a
+s3lab
+3slal
+sla2ve
+s2law
+s3lä
+sl3b
+4s3le
+sler3s
+s3li
+3s4lip
+s3lo.
+slo3be
+s3loc
+s3loe
+s3lof
+3s2low
+s3ly
+2s3m2
+sma3b4
+sma3sc
+sme3na
+smi2t
+2s3n2
+snab4
+sni4a
+sni3er.
+sni3ers
+4s5not
+1so
+3so.
+2s3oas
+2s1o2b
+3s2o3ba
+4sobj
+4s3obo
+so1c
+so3et
+s1o2fe
+3soft
+3sog
+sog4l
+s1o2he
+3sohl
+sohle2
+2s3ohng
+2s1ohr
+3soi
+2s3ok
+3sol.
+so3la
+so4lau
+3sold
+3sole
+so2l1ei
+so3li
+sol2la
+sol4ler
+so3l2o
+4s3o2ly
+som2e
+3son
+son2a
+sone4
+son3sä
+son4s1o
+so3o
+2sope
+2s1opf
+3sopr
+sop3s
+s1orc
+2s3ord
+sore2
+so2rei
+so2rel
+4s1orga
+so1rh
+2s1o2rie
+so2ro
+3sorp
+3s2orti
+so4ru
+3sos
+s2os.
+4so4sk
+4sosm
+4s1ost
+4s1osz
+3so3ß
+soth1o
+3sott
+soun2
+sound1
+so3unds
+so3unt
+s1out
+3sov
+3sow
+2s1ox
+3soz
+s3o4ze
+1sö
+sö2c
+s1ö2d
+2sö2f
+2s1ök
+2s1öl
+2s1ös
+1sp2
+2sp.
+4spaa
+s2pace
+2spack
+2spag
+2spak
+2spala
+2spalä
+3spalt
+spa2m
+s2pan.
+3spannu
+3spant
+2spanz
+2spap
+2s3para
+s4parka
+2sparo
+5s6parten
+4spartn
+4sparty
+3spaß
+3spat.
+2spati
+4spatr
+2spau
+3s2paz
+s2pä
+2späd
+3späh
+2spär
+2späs
+2s3pe.
+2speg
+3speic
+4spein
+4spensi
+spe3p4
+s2pera
+3s2perg
+s1peri
+4sperle
+2spero
+s2perr
+2spers
+2sperü
+4spet
+3s4pez
+4s3pf4
+2spha
+s2phä
+3sphär
+s3phe
+s4phin
+3s2pi4e
+4spier
+spier4r
+s3pi2k
+4s3pil
+3spio
+2spip
+4s3pis
+2sp4l
+4spla
+4splä
+4sple
+sp5le.
+3s2pli
+4s3plu
+2s3pn
+2spod
+4spoe
+2spog
+s2poi
+4s3pok
+4spol
+s2pons
+2spop
+s2pore
+s2porn
+spor6tag
+4s3pos
+4spote
+4spr.
+3s2prac
+2sprak
+s2pran
+2sprax
+3spräc
+2spräm
+s2prän
+4spräs
+3s4prec
+4spred
+4spreis
+5s2pren
+2s3pres
+s2pric
+3spring
+4sprinz
+s2prit
+2sprob
+4sprog
+4sproj
+4sprop
+3spross
+2sproz
+3sprö
+3s2pru
+3sprüc
+2sprüf
+3sprün
+4s3ps
+2s4pt
+2spub
+2spud
+3spuk
+3s2pule
+2spun
+4spunk
+2spup
+3s4pur
+spu4rer
+2sput
+4spy
+2s1q
+4s3r4
+srat2s
+sre3cha
+sreli1
+sre4th
+srö2s
+srücker6
+6s1s
+ssa3bl
+ssa3bo
+s5sack
+ss4agi
+s2s1aj
+ss3alba
+s2sall
+s4samt
+s2sanf
+s4sang
+ss2ann
+s4sano
+s4sans
+ss2ant
+s4sanz
+ss2ara
+s3sars
+ssa1s
+ss3att
+ssau3e
+ssau4r
+s3s2ä
+s4sce
+ssch2
+s3schw
+s4sco
+s2scr
+s4seben
+ss1ec
+sse1e
+sseh2a
+ss4eind
+sse3int
+s4seis
+s3sel
+sse2lö
+s3sen.
+ssen6sem
+ss1epe
+sse6ratt
+ss2erf
+ss3erfü
+ss4ergr
+sser4hö
+sser6mit
+sser4öf
+ss3erse
+ss4eru
+sser6wei
+sses4sa
+s4s3estr
+sse3ta
+ss3i2ko
+s2sill
+s2simp
+ssing3s
+s2s1isr
+s3skala
+ss3l
+ss1off
+ssoi4
+s3sol
+s4sop
+ss2orc
+ss2phi
+s3spi
+ss2pot
+s3sprä
+s3spri
+s2spro
+ssquet4
+ss3s4
+sssau4
+sst2a
+s4stag
+ss3tak
+s3stä
+sst2e
+s3stel
+s3s2tep
+s3s4tern
+ss4teu
+ss2ti
+s3sto
+ss4tör
+s3stran
+s3s4tras
+s3s4trat
+s3strä
+s3strec
+s3strom
+s3strö
+ss2tur
+s3stü
+s2sumg
+s2sumr
+ss1ums
+ss2ur
+s3sy
+s1t
+4st.
+s2ta
+2sta.
+3staa
+3stab.
+2stabb
+4stabel
+4stabit
+2stabl
+st2ac
+3s4tad
+4stadm
+3staff
+2stag
+3stagl
+3s4tagr
+3s4tah
+2stak
+3staks
+2stala
+sta3lak
+2s3talb
+s4talg
+s3ta3l2i
+2stalk
+st1alp
+st1alr
+st1a2mi
+1stamm
+1stan
+2stanb
+s4tand
+2stanf
+s4tanh
+2stanl
+s4tanm
+4st1ann
+st3ansp
+2stanw
+stapo1
+4stapol
+4s3tapos4
+4s3tapot
+st1app
+s4tar.
+s4tarb
+sta6rens
+4stari
+s4tark
+s4tarm
+s4t2ars
+s4tart
+s4tase
+s4tasi
+stast4
+s3tat.
+2statb
+3stati
+7statth
+s4tau.
+2stauf
+2staug
+3s4taur
+4stausb
+4stausg
+4stausr
+4stauss
+s4taut
+s4t1a2ve
+4stax
+1s2tä
+3stäb
+3städ
+4stäg
+4stäp
+5s4tär
+3stätt
+2s3täus
+2stb
+2st3c
+2std
+4ste.
+4steam
+4stechn
+s2te2d
+st1edi
+2stee
+3s2teg
+ste2g3r
+1steh
+s2tei
+2steic
+st1eid
+3steig
+stei4gr
+2steil
+6steinga
+s4teins
+stein6sp
+s2tel
+2stel.
+s3tele
+s3telf
+st2ell
+stel6l5än
+2steln
+2stels
+2stem
+ste4mar
+ste6ment
+3stemm
+2sten
+s5ten.
+ste4na
+s4t3ends
+st2ens4
+s4tentf
+s4tents
+st1e2po
+2ster
+4s5ter.
+ste2r3a
+s6terben
+3sterbo
+3s4tereo
+st3erfü
+6sterinf
+6sterinh
+4sterm
+3s4ternb
+4ste2s1
+ste3sc
+stes4se
+s4testn
+stes5tr
+2s3tet
+ste4tag
+3s4teti
+3s4tett
+3s2teu
+1steue
+4steuf
+st1eun
+st1ev
+s2tew
+4stex
+s2texa
+2stf
+2stg
+2sth
+st4hen
+s2t3hi
+st3ho
+s2thu
+2stia
+2stib
+1stich
+2stie.
+4stief.
+4stiefl
+s2tieg
+s2tiel
+2stien
+1s2tif
+2stig
+3s4tigm
+2s3tik
+s2t2il
+1s2tim
+4stimma
+2stimp
+st1inb
+s4tinf
+s3tinn
+s2tins
+2s2tint
+2stio
+2stip.
+s4tipe
+4stipp.
+s2ti2r
+st1ira
+st1iri
+4stis
+s4tisl
+st1ita
+2stite
+1stitu
+2stiv
+2stj
+2stk
+4stl
+2stm
+2stn
+s2to
+2sto.
+sto2bl
+4stocht
+2stod
+4stod.
+1stof
+s4toff
+2stok
+4s5tole
+sto3mi
+4ston
+s4to4ne
+4stoo
+2stopo
+4stor.
+s4torb
+2store
+2s4torg
+2stori
+2storp
+2stors
+2stort
+s4tory
+sto3s2t
+1stoß
+4stote
+2stotr
+4stou
+2stow
+2stoz
+1s2tö
+4stöch
+2s3töl
+2stön
+3stör
+2stöt
+2stp
+2stq
+s2tr
+2strac
+4s3trad
+st4rade
+stra4fa
+4s5trag
+3strah
+4strahi
 4strai
-s3tral
-6s5traum 3straß
-3strec 6s3tref 8streib 5streif 6streno 6stres 6strev
-2st5rig
-8s2t1ris
-s8troma st5rose 
-2s1trua
-4struf 3strum
-6sträg 2st1s6 2stt
-1stu stu5a 4stuc 2stue 8stun. 2stv 2stw s2tyl
-6stz 1stä 8stäg
-1stö
-1stü 8stüch 4stür.
-1su su2b1 3suc su1e su2fe su8mar 6sumfa 8sumk 2s1unt sup1p2 6s5u6ran
-6surte 2s1v 2s1w 1sy 8syl. sy5la syn1 sy2na syne4 s1z s4zend 5s6zene.
-8szu 1sä 6s5änd 6säugi 6säuß
-5söm 2s1ü2b 1süc sü8di 1sün 5süß
-taats3 4tab. taba6k ta8ban tab2l ta6bre 4tabs t3absc
-8tabz 6t3acht ta6der 6tadr tad6s tad2t 1tafe4 1tag ta6ga6 ta8gei
-tage4s tag6s5t tah8 tahl3 tai6ne. ta5ir. tak8ta tal3au 1tale ta8leng
-tal5ert 6t5a6mer 6tamp tampe6 2t1amt tan5d6a tan8dr tands5a tani5e
-6tanl 2tanr t3ans 8t5antr tanu6 t5anw 8tanwa tan8zw ta8rau 6tarbe
-1tari 2tark 2t1arm ta1ro 2tart t3arti 6tarz ta1sc ta6sien ta8stem
-ta8sto t5aufb 4taufn 8taus. 5tause 8tausf 6tausg t5ausl 2t1b2 2t1c
-t6chu 2t1d te2am tea4s te8ben 5techn 4teff te4g3re te6hau 2tehe te4hel
-2t1ehr te5id. teig5l 6teign tei8gr 1teil 4teinh t5einhe 4teis t5eisen
-8teiw te8lam te4lar 4telek 8telem te6man te6n5ag ten8erw ten5k tens4p
-ten8tro 4t3entw 8tentz te6pli 5teppi ter5a6b te3ral ter5au 8terbar
-t5erbe. 6terben 8terbs 4t3erbt t5erde. ter5ebe ter5ein te8rers terf4
-8terhö 6terklä ter8nor ter6re. t8erscha t5e6sel te8stau
-t3euro te1xa tex3e 8texp tex6ta 2t1f2 2t1g2 2th. th6a 5tha. 2thaa
-6t1hab 6t5haf t5hah 8thak 3thal. 6thals 6t3hand 2t1hau 1the. 3t4hea
-t1heb t5heil t3heit t3helf 1theo 5therap 5therf 6t5herz 1thes 1thet
-5thi. 2t1hil t3him 8thir 3this t5hj 2th1l 2th1m th1n t5hob t5hof
-4tholz 6thopti 1thr6 4ths t1hum 1thy 4t1hä 2t1hö t1hü
-ti1a2m ti1b tie6fer ti1en ti8gerz tig3l ti8kin ti5lat 1tilg t1ind
-tin4k3l ti3spa ti5str 5tite ti5tr ti8vel ti8vr 2t1j 2t1k2 2t1l tl8a
-2t1m8 2t1n 3tobe 8tobj to3cha 5tocht 8tock tode4 to8del to8du to1e
-6t5o6fen to1in toi6r 5toll. to8mene t2ons 2t1ony to4per 5topf. 6topt
-to1ra
-to1s to2ste
-to6ska tos2l 2toti to1tr t8ou 2t1p2 6t1q tr6 tra5cha
-tra8far traf5t 1trag tra6gl tra6gr t3rahm 1trai t6rans tra3sc tra6st
-3traue t4re. 2trec t3rech t8reck 6t1red t8ree 4t1reg 3treib 4treif
-8t3reis 8trepo tre6t5r t3rev 4t3rez 1trib t6rick tri6er 2trig t8rink
-tri6o5d trizi5 tro1a 3troc trocke6 troi8d tro8man. tro3ny 5tropf
-6t5rosa t5roß 5trub 5trup trut5 1träg 6t1röh
-5trüb trü3bu t1rüc t1rüs 2ts ts1ab t1sac tsa8d
-ts1ak t6s5alt ts1an ts1ar ts3auf t3schr t5schä tse6e tsee5i
-tsein6s ts3ent ts1er t8serf t4serk t8sh 5t6sik t4s3int ts5ort.
-t5s6por t6sprei
-t1st t2ste
-t6s5tanz ts1th t6stit t4s3tor 1t2sua t2s1uf
-t8sum. t2s1u8n t2s1ur 2t1t tt5eif tte6sa tt1ha tt8ret tt1sc tt8ser
-tt5s6z 1tuc tuch5a 1tu1e 6tuh t5uhr tu1i tu6it 1tumh 6t5umr 1tums
-8tumt 6tund 6tunf 2t1unt tu5ra tu6rau tu6re. tu4r3er 2t1v 2t1w 1ty1
-ty6a ty8la 8tym 6ty6o 2tz tz5al tz1an tz1ar t8zec tzeh6 tzehn5 t6z5ei.
-t6zor t4z3um t6zäu 5täg 6täh t5ält t8än
-täre8 8tä8st 6täuß t5öffen
-8tö8k 1tön 4tüb t6ü5ber. 5tüch 1tür.
-u3al. u5alb u5alf u3alh u5alk u3alp u3an. ua5na u3and u5ans u5ar.
-ua6th u1au ua1y u2bab ubi5er. u6b5rit ubs2k u5bö u8büb 2uc
-u1che u6ch5ec u1chi uch1l uch3m uch5n uch1r uch5to ucht5re u1chu uch1w
-uck1a uck5in u1d ud4a u1ei u6ela uene8 u6ep u1er uer1a ue8rerl uer5o
-u8esc u2est u8ev u1fa u2f1ei u4f3ent u8ferh uf1fr uf1l uf1ra uf1re
-uf1rä uf1rü uf1s2p uf1st uft1s u8gabt u8gad u6gap ugeb8 u8gn
-ugo3s4 u1ha u1he u1hi uh1le u1ho uh1re u1hu uh1w u1hä u1hö
-6ui ui5en u1ig u3ins uin8tes u5isch. u1j 6uk u1ke u1ki u1kl u8klu
-u1k6n u5ky u1la uld8se u1le ul8lac ul6lau ul6le6l ul6lo ulni8 u1lo
-ulo6i ult6a ult8e u1lu ul2vr u1lä u1lö 3umfan 5umlau umo8f
-um8pho u1mu umu8s u5mö u1n1a un2al un6at unau2 6und. 5undein
-un4d3um 3undzw undü8 un8düb une2b un1ec une2h un3eis 3unfal
-1unfä 5ungea 3unglü ung2s1 un8gä 1u2nif un4it un8kro
-unk5s u1no unpa2 uns2p unvol4 unvoll5 u5os. u1pa u1pi u1p2l u1pr
-up4s3t up2t1a u1q u1ra ur5abs ura8d ur5ah u6rak ur3alt u6rana u6r5ans
-u8rap ur5a6ri u8ratt u1re ur3eig ur8gri u1ri ur5ins 3urlau urmen6
-ur8nan u1ro 3ursac ur8sau ur8sei ur4sk 3urtei u1ru uru5i6 uru6r u1ry
-ur2za ur6zä ur5ä6m u5rö u1rü urück3 u1sa
-usa4gi u2s1ar u2s1au u8schec usch5wi u2s1ei use8kel u8sl u4st3a4b
+4strak
+2stral
+s5trank
+4strans
+1strap
+1stras
+3straß
+4straum
+4sträc
+4s5träg
+4sträne
+2stre.
+s4trea
+4stref
+4streib
+3st6reif
+2strep
+2stret
+4streuh
+2strib
+strie3s4
+2s4trig
+1s4trik
+2s5tris
+2striu
+s3troc
+s3trog
+3s4troh
+3strom.
+s4trome
+4stropf
+2stros
+st4ross
+1strö
+2ströp
+1stru
+2strua
+2strub
+s4trud
+2strug
+3struk
+2strun
+4strup
+1strü
+4s4t3s2
+sts4t
+2st3t4
+st2u
+1stub
+4stuch
+3s4tud
+2stue
+3stuf
+2stug
+st3uga
+3stuh
+s2t3uk
+2stumo
+2stum2s
+stum4sc
+2stumt
+2stun.
+st3una
+1stund
+2stune
+2stung
+s2t3uni
+4stunn
+2stuns
+2stunt
+2stuö
+stu3ra
+stu5re
+2st3url
+4sturn
+2st3urt
+3s2turz
+2stus
+1s2tut
+1stüc
+4stüch
+3s4tück
+3stüh
+4stür.
+4stüre
+3stürz
+1stüt
+2stütc
+2stv
+2stw
+stwor2
+2sty
+4sty.
+1s2tyl
+4styp
+4stys
+2st3z2
+1su
+su1an
+3su2b3
+su4ba2
+4subi
+su4br
+3su1c
+su2cha
+su2cho
+suchs3p
+3sud
+su2eb
+2s1u2f
+su3fi
+2s1uh
+3sui
+su1is
+su1it.
+su2k
+su3l2i
+sul3t
+3sulta
+su2m1a
+s2ume
+su2mei
+su2mel
+sument4
+su6ments
+2sumf
+s3umfa
+s3umfe
+su2min
+3summ
+sum1o2
+su2mor
+3s2ump
+s3umsa
+2sumse
+s2umsp
+2s3umst
+2s3umwa
+su2n
+3sun.
+2s1una
+sunder4
+sun6d5erh
+sunds4
+su4ne
+4s1unf
+6sungena
+s1ungl
+sung4s
+4s1uni
+2s1unm
+2s1uns
+s4uns.
+s4unst
+2sunt
+2sunw
+s4unwa
+3s2up
+sup3p4
+su2ra
+sure4
+su2rer
+3surf
+2s1urk
+s1url
+su2r1o
+s1urt
+su2s1
+su3s2a
+s3u2t
+su4te
+su3tr
+3suv
+1sü
+2sü4b
+3süc
+sü2d1
+süden4
+3sün
+3s2üs
+3süß
+4s3v2
+svoran4
+2s1w
+4s3we
+swe6gers
+sweh2
+4swie
+4swil
+4swis
+4swit
+1s4y
+2sy2l1
+sym3
+sy2n3
+sy4nä
+3sy4s3
+2s1z2
+4s3za
+4szä
+4s3zei
+4szel
+3s2zena
+3s2ze3n2e
+4s3zent
+4s3zer
+s2zes
+4szet
+4szeu
+3s2zew
+4s3zie
+4s3zo
+4s3zu
+4s3zü
+4s3zw
+2ß3a4
+2ß1ä
+2ß1b4
+2ß1c
+2ß1d2
+1ße
+2ß1e2b
+2ß1ec
+2ß1ef
+2ß1e2g
+2ß1ei
+ße2la
+ße2le
+2ßelek
+2ß1emp
+ße4n3a2
+4ßenerg
+ße2ni
+ße2no
+ßens4t
+2ß1entl
+2ßentz
+2ß1e2p
+ßer3b
+ßer2ei
+ß2ers.
+2ßer4se
+ßer3t
+ß1erw
+2ß1es2s
+2ß1est3r
+2ß1ex
+2ß1f4
+2ß3g2
+ßge2bl
+2ß1h
+1ßi
+ßi2g1a2
+ßig4s
+2ß3i2k
+2ß1il
+2ß1im
+2ß1in
+2ß1j
+2ß3k4
+2ß1l
+ßler3
+2ß1m
+2ß1n2
+2ß3o2
+ßos2
+2ß1ö2
+2ß1p2
+ß1q
+2ß3r2
+ßrö2
+2ß3s4
+ßsau4
+ßsch2
+2ß1t
+ßt1in
+ß3tü
+2ß1um
+ß1unf
+2ßunt
+2ß1ü4
+2ß1v
+2ß1w
+2ß1z2
+1ta
+3ta.
+4taa
+5taan
+4tab.
+ta2b3an
+2t1abb
+2tabd
+3tabel
+2taben
+4tabf
+2tabg
+4tabh
+2t1a2bit
+2tabk
+2tabla
+4tabm
+2t3abn
+2ta4br
+4tabs
+t1abst
+2t3abt
+4tabw
+4tabz
+2t1ac
+4tachs
+3tacu
+t1ada
+2tadd
+ta2der
+tadi3
+t1adm
+ta2dol
+t1a2dr
+ta3d2s
+tad6t3
+ta2er
+3taf.
+3tafe
+4tafet
+4taff
+t1afg
+t1afr
+3tag
+ta2ga
+ta2g1e2i
+tagen1
+t3agent
+4t1agg
+4ta3gl
+4t1a2go
+tag4san
+tags3c
+tag4st
+tah2
+tahls4t
+ta3i2k
+tai2l1
+ta1ins
+tai4r
+ta1ir.
+ta1i2s
+2t1a2ka
+ta3kes
+2t1akk
+ta2kro
+tak4t1o2
+t2aktu
+2takz
+3t2al.
+ta2la
+ta3lag
+tal1an
+ta3lat
+tal3au
+4talb.
+4talbk
+tal3d4
+3tale
+ta4l3end
+tal3eng
+ta4lens
+tal6ents
+ta4lerg
+ta2let
+tal2ga
+tali6ene
+tal4l3ac
+tall3ei
+tal2l1ö2
+tall3s2
+2t1alm.
+3talo
+ta2lop
+ta2l1o2r
+tal2se
+tals3en
+t1alta
+tal3th
+talt4r
+ta2lu
+2tam
+3tam.
+3tame
+5t2amen
+t1a2mer
+tamm1a
+tam4m3er
+t1ampl
+3tams
+t1amt
+2t1a2na
+tan3ab
+4tanal
+ta4nat
+2t1a4nä
+2tanb
+3tanc
+tan3da
+tand4ar
+tan2dr
+tand4st
+ta4nerf
+4tanf
+4tangeb
+tan4gra
+2tanh
+t2anho
+t4ani
+3tanj
+tan2kl
+4t3anl
+t1anm
+4t1anna
+3t2anne
+t1ano
+2tanp
+t1ans
+t2ans.
+4tansi
+tan4tan
+t4ante.
+4tantei
+2tantr
+2tanwa
+2tanwä
+t2anz.
+t1anza
+4tanzei
+2t1anzu
+4tanzü
+tan2z1w
+tao2
+ta3or
+t4ape
+ta2pes
+2tapf
+ta2pl
+ta4poka
+3tapol
+t2appe
+ta2ra
+2tarab
+3tarabb
+ta3rak
+2taram
+tar3ap
+t2arau
+2tarb
+3tarba
+3tarbek
+3tarber
+3tarbi
+3tar3bl
+2tarc
+3tarchr
+t2ard
+t2arei
+ta2rel
+ta2r1er
+tar3g
+ta1r2h
+3tari
+tark4l
+t2arko
+4tarkt
+t2arl
+2t1arm
+t2armä
+ta2rom
+2tart
+t2ar2ta
+tar6ter6e
+3t2arth
+t1arti
+3t4artis
+tar4to
+tar2tr
+ta2ru
+2t1arz
+3tarzu
+3t2as.
+ta3sa
+3tasc
+ta5se
+4t1asp
+2t3assi
+3tast
+tas4tem
+tas4to
+t4at.
+ta2ta2b
+ta2tan
+3tatb
+t4ate
+tat1ei
+t5a2tel
+ta2tem
+3taten
+ta2t1er
+t3atl
+ta2tom
+ta2tr
+3tatsa
+2tatt
+tau2b1a
+3taubh
+tau2bl
+tau2br
+tauchs4
+tauch5sp
+4taud
+2t1auf
+3taufe.
+4taufg
+4taufl
+tau3f4li
+t3aufo
+taufs4
+3taug
+4t3auge
+t1auk
+3taum
+2t1ausb
+3tausc
+tau6scha
+tau6schm
+tau6schr
+tau6schw
+2tausd
+t2ause
+4tausf
+4t3ausg
+t1ausk
+4tausl
+2tausr
+4t3auss
+2t5ausw
+4tausz
+4tauu
+3tav
+4tava
+ta2van
+3tax
+4t1axt
+3taz
+1tä
+2tää
+4täb
+tä1c
+4täd
+t2äf
+3täg
+4tägä
+4tägy
+2täh
+4täll
+2t1ält
+4tä2m
+t1ämt
+t1ängs
+3tänz
+4t1äp
+2täq
+tä4reng
+tä2ru
+2tärz
+tä2s
+t2ät
+3tätigk
+4tätt
+2täug
+2täuß
+2täx
+1tà
+4t3b4
+tbauer4
+tbe3r2e
+tblock5e
+tblocken8
+tby4t
+4t1c
+t3cha
+t3che
+tch2i
+tch3l
+t3chr
+t2ch1u
+tch1w
+t4ck
+t3cl
+tcor2
+t3cr
+4t5d4
+tdar2m1
+tdun2
+1te
+3te.
+te2a2
+tea3c
+te3ad
+te3ag
+2teak
+te3al
+3team
+te3an
+te3ar
+tea4s
+3teba
+t4ebb
+2t1e2ben
+t2ech
+2teche
+3techn
+te2chu
+2teck
+te2cki
+tecks4
+2t1ecu
+te2dit
+te1em
+teen1
+te2er.
+te1erw
+tee3t
+3tefa
+2teff
+2t1egg
+2teh
+3teha
+te2hac
+3tehä
+3tehi
+te2him
+3tehö
+t1ehr
+3tei.
+3teic
+tei1fl
+teik2
+3t2eil
+tei2la
+tei6lent
+teim2
+2tein
+t2ein.
+t2eine
+teinen4
+tei6nens
+tein6hab
+t3einkü
+te2is
+t1eis.
+t1eisb
+te5isch.
+t1eiw
+tei3z
+te2kel
+tekt4
+3tel.
+3te2la
+tel3ab
+tel1ac
+te3lan
+te4lant
+tel1au
+te2lä
+3telb4
+3teld4
+tel1ec
+tel3ehr
+2telem
+tel3eng
+te2ler
+tele3s
+te2leu
+4t3elf.
+3telg
+tel1in
+te2lit
+3telk
+tel6lant
+tel3le
+tel6lein
+tel3li
+4tellu
+3teln
+te2lob
+te4lost
+te2l1ö
+3telp
+3tels
+tel3s2k
+3telt4
+tel3ta
+3tem.
+3tema
+te2map
+te2mau
+t2emb
+te2m1ei
+te2m1er
+te2mi
+tem3i2m
+tem3ing
+2temm
+te2m1o2r
+3temper
+2tempf
+4tempfi
+tem3s
+te2mu
+te4mun
+3ten
+t6en.
+ten1a2
+te4nad
+te4n3an
+te4nas
+te4nat
+ten3au
+ten3ä
+ten3da
+4t3endal
+tend4an
+4tendap
+4t5endf
+4t1endl
+t6endo
+4t5endp
+ten3d4r
+te2n1e2b
+te2nef
+te2neh
+ten3ei
+te3n4ei.
+tene4m
+tenen1
+te4n3end
+te4nene
+te4neng
+te4nens
+4t3energ
+te4n3ern
+te4ness
+tenf4
+4t1eng.
+teng2a
+ten4gag
+4t3engla
+te2ni
+te4nil
+ten1im
+te4n3in
+tenk4
+ten3n2
+te2nol
+te3nö
+ten3se
+4t3ensem
+ten6serg
+tens2p
+tens3th
+t1entb
+4tentd
+ten3te
+4t3entl
+4t3entn
+ten6tric
+4t3en4tro
+2t1ents
+4t5entw
+4tentz
+te2ny
+teo2f
+2tep.
+2t1e2pi
+2teppu
+tept2
+3t4er.
+t4era
+tera2b
+ter3a2c
+te2rad
+te1ral
+tera2m
+ter4ane
+te2r3ap
+ter3a2s
+4terbos
+2t1erbs
+2t1erbt
+3terc
+ter3d
+4t3erde.
+terd2s
+3tere.
+te2re2b
+te2rec
+t3ereig
+3tere2m
+te4r3emi
+3teren
+te4r3end
+te4rene
+te4reng
+te4r3ent
+3terer
+terer3k
+terer3l
+te4r3erp
+te4rers
+te4rerw
+3teres
+te2ret
+t4erfr
+terg2
+ter3ga
+6tergebn
+t6ergem
+t6erges
+t6ergew
+ter3gl
+6tergrei
+t4ergru
+t6erhall
+t4erhan
+t4erhau
+t4erhäu
+t4erhei
+7t2erhi
+t2erho
+6terhöhu
+t2erhu
+te3ria
+ter3iko
+2teril
+terin5d
+3terinf
+3terinh
+ter3k
+4terklä
+t4erlä
+t4erli
+3term
+t2ern.
+ter4nar
+2t6ernc
+ter4obe
+2teros
+t1e2r1ö
+t4erp
+t4erra
+ter4re.
+t4erro
+t4ers.
+t2erse
+terst4
+t4erst.
+t6erstad
+ter6stat
+t4erstä
+t4ersti
+t4erstr
+t4erstu
+t4erstü
+tert4
+ter3ta
+t4eru2
+te4r1uf
+t4erv
+4t3erwäh
+4tery
+ter3z2a
+2t1erzb
+t4erzei
+4terzeu
+ter5zo
+ter3zw
+3tes
+tes3a2c
+tesa2k
+tes2c
+tes4pen
+te2spr
+2t1essa
+tes3si
+tes3tan
+tes4tel
+tes6terg
+tes6terh
+tes6terk
+t3est3ri
+te2su
+tet2
+3t2et.
+te4tabl
+2te2tap
+te2tat
+4tetl
+3teuf
+3teum
+3te1u2n
+4teunu
+2t1eup
+3teur.
+te2va
+te2vi
+tewa2s
+3tewo
+t1e1xa
+2t1e2xe
+te3xel
+2t1e2xi
+4texp
+tex4ta
+2t1exz
+6t3f6
+4t1g2
+tga4s3er
+t3ge
+tgenen3
+tger2a
+tger2i
+tg4r
+t1h
+4th.
+2th2a
+3t4ha.
+3t2hag
+4thak
+3thal.
+t2hali
+3thalp
+t2han.
+t3hand
+t3hap
+4t3hau
+2thä
+4thäl
+2thb
+t2h2e
+1the.
+3thea
+2t3heb
+2t3hef
+2t3hei
+t4he1in
+t4hek
+3t4hema
+2themd
+t4heme
+2themm
+1then
+t4hene
+t4heni
+3theo
+t3herd
+t4herm
+thero3
+t3herr
+2t3herz
+4t3hess
+2thf
+1t2hi
+3thi.
+thic3k4
+t3hiel
+thi3er.
+2t3hil
+2t3him
+t3hin
+thi3nu
+2t3hir
+2thk
+2th3l
+4th3m2
+thmu2
+2th3n
+1t2ho
+2t3hob
+t3hoc
+tho3chr
+t3hof
+2t3hoh
+t4hol.
+t4holo
+2tholz
+tho1s
+2t3hot
+3thotr
+2thou4
+t3hov
+4t3hö
+2thp
+1th2r2
+2ths
+2tht2
+2thub
+2thuh
+4t5hun
+2thut
+2thü
+2thv
+t2hy
+1ti
+ti2ad
+ti3ag
+tial2l
+ti3a2m
+ti2are
+3tib
+2tic
+3ticc
+ti1ce
+t1id
+t2id.
+4tidee
+ti4d3en4d
+tie3br
+3tief.
+4tiefel
+3tiefl
+tie2fr
+tieg4
+2tieh
+ti2e1i
+ti1el
+ti2el.
+tiel3a
+ti3e4n1
+tien3s
+3tiera
+tie4rei
+tie4reu
+ti2ern
+tie3s2t
+4tieß
+ti1eu
+3tif.
+ti3fe
+ti1f4r
+3tig
+ti2gan
+4t3i2gel
+ti4gerz
+ti2git
+tih2
+ti2kam
+ti2kar
+ti4kau
+ti3k2en
+tik4ere
+ti2kin
+ti4klu
+ti2kn
+tik1r
+ti2kra
+ti2krä
+ti4k3rei
+ti4lant
+ti2lar
+ti2lei
+ti2lel
+3tilg
+2tillu
+ti3lo
+ti2lö
+tilt4
+ti2lu
+ti2ma2g
+4timm
+timm1a
+tim4man
+t3immat
+timmer4
+tim6merg
+3timo
+2timp
+tim2s
+3tin.
+ti3naf
+ti3nak
+ti2nam
+ti2n3an
+4t3ind
+ti5n2e
+tine1i
+2t1inf
+tin2g1a
+tin4g3l
+ting3s
+t1inh
+3tinis
+t1in1it
+4tinj
+2t1inka
+tin2k1l
+tin2kn
+tin2kr
+2t1inku
+t2inn
+ti2nor
+t1ins
+3t2ins.
+t3insa
+t2insä
+4t3inse
+tin4spa
+tin4sum
+t1int
+ti3nu
+tin2um
+4t1inv
+3tio
+ti2osk
+tioxi3
+3tip
+ti3p4l
+ti4que.
+3tirad
+ti1rh
+ti4ron
+3tis
+ti6schei
+tisch3l
+tisch3w
+ti2sei
+tis2el
+ti3sk
+2t1isl
+ti2sp
+2t1isr
+tiss4
+ti3s2th
+tis3ti
+ti1s4tr
+ti2su
+tit2a
+ti2tal
+3ti3te
+ti1th
+ti3ti
+2ti3tu
+tium4s
+3tiv
+ti2van
+ti2vel
+ti4vene
+tiver2
+ti4verh
+ti4verk
+ti4verl
+ti2v1o
+ti4v3r
+ti2za
+ti2zir
+2t1j
+4t3k4
+4t3l2
+6tla
+tlan2g
+tl4e
+t2lef
+tlei6der
+tle2ra
+6tli
+tlings5
+tlit1
+t5lö
+tlung4
+4t3m4
+tma2st
+tmen8schl
+tmen6t5
+tmo4des
+4t3n4
+t5na
+tnes2
+tnes4s
+1to
+3to.
+to4as
+to5at
+t2oba
+to3be
+2tobj
+tob2l
+t1obs
+3tobt
+to1c
+t3ochs
+3tocht
+to6ck5ent
+3t4od
+tod1er2
+to4d1un
+tof4fa
+tof6f5ent
+tof4f3er
+2toffi
+toff3s
+3tog
+2t3ohr
+3toi
+toi4r
+4toiz
+3toj
+3tok4
+3tol
+to3le
+4tolp
+4tolz
+tomar4b
+2tomg
+to2min
+2tomk
+3tomo
+to2m1u
+to4mun
+3ton
+to2nan
+tond2
+to2n2eh
+toner6ke
+to4n3ig
+to3ny
+3too
+3top.
+to2pak
+to2pan
+to2pat
+to4pfe
+top1hi
+3topo
+2to4pt
+3tor
+t4or.
+to4rän
+4torc
+t1ord
+t2ordi
+4t3ordn
+t4ore
+to4rein
+to2rel
+to2rem
+to3ren
+tor4fan
+t1or3g
+4torga
+t5orient
+tor3int
+5tork
+to2rop
+to2rö
+t4ors
+4t1ort.
+tor3ta
+t1orth
+4tortn
+4tort2s
+to4ru
+t2orw
+tos2e
+to3s2h
+tos2p
+4toss
+3tost
+4toß
+to1ßu
+to2tä
+3tote
+to2tho
+3totr
+tots2
+5t2ou
+touil2
+to3un
+3tow
+3toz
+1tö
+3töch
+4töck
+2t1ö2d
+2tö2f
+4t1ök
+2töl.
+3tön
+t1öst
+3töt
+2t3p4
+tpf4
+tpi2n
+2t1q
+1t2r4
+2tr.
+5tra.
+3trac
+tra3cha
+tra3chl
+2t3rad.
+5trade
+tra4dem
+t3radie
+2tradp
+tra4fah
+tra4far
+3t4rag
+3trahi
+6trahl
+2trahm
+5t4rai
+3trak
+4t3rake
+5t4rakt
+5tral
+tra4leb
+tral3l
+3t4ran.
+4trand
+4trang
+t3rann
+5t4rans
+tra2st
+6traß
+4traub.
+4trauc
+t4raue
+t4rauf
+2traup
+5träc
+2träd
+3träg
+5träne
+4träng
+4träs
+4träß
+t1räts
+2träuc
+4träus
+4träuß
+4t5re.
+2trea
+t3reak
+4treb
+tre2br
+4trec
+t3rech
+t4reck
+5treck.
+tre5cke
+2t3red
+3tref
+4trefe
+5treff
+4trefl
+4trefo
+4treg
+2t3reh
+t4rei.
+3t4reib
+4treic
+4treif
+2t3reig
+2t3reih
+t4reik
+4t3rein
+2t3reis
+tre7isch.
+4treit
+t3reiz
+4t3rel
+t4rem
+t4ren.
+5trend
+6trendi
+5trennu
+t3rent
+2trepe
+2t3repo
+3trepp
+t3repr
+t4rer
+t4res.
+tre2ta
+t4rete
+tret3r
+tre4tri
+2t3rett
+3treuh
+4t3rev
+2t3rez
+5t4ré
+2t3rh
+3tri
+t4rib
+t4rick
+t4rid2
+5trieb
+trie3fr
+tri4ena
+tri2er
+tri4ers
+4trig.
+2trige
+5t4rigg
+tri3gl
+t4rik
+tri4ke.
+tri4kes
+5triko
+t3rind
+4tring
+tri3ni
+4t3rinn
+t4rip
+4tript
+4t5riv
+tri2x
+trizi1
+3tro.
+tro3b4
+4trock.
+3troe
+t4roi
+tro4kes
+trol4la
+6trom.
+tro6mans
+4tromb
+tro4men
+tro2mi
+4tromk
+4troml
+4troms
+4tromt
+3tron
+tro3na
+t4rop
+3tropf
+tro3sm
+3trost
+2trout
+5troy
+4t3röc
+2tröh
+6tröm
+3tröp
+3trös
+4t3röss
+3tröt
+3trua
+3trub
+2t3ruc
+4truf
+4truk
+trum2
+t3rumä
+trums1
+t3rund
+5trunk
+5t4rup
+t3russ
+2t3rut
+tru2th
+4truw
+trü1be
+trü1bu
+2t3rüc
+trücker6
+t4rüg
+3trümm
+try1
+2ts
+4ts.
+ts3ab
+t3sac
+t4sachs
+t2s1a2d
+ts1ahn
+ts5alben
+t2sall
+ts2ame
+t4samp
+t4s1amt
+t2san
+ts3ane
+ts3a2r
+t2s1a2s3
+t2sau
+ts2av
+t2säh
+ts1än
+ts1äus
+t4sch3am
+t6schart
+t3sche
+t4schef
+t3schl
+tsch4li
+t4schro
+t3schü
+ts2cor
+t2s1e2b
+tse2e
+t2sef
+ts1eh
+tse4he.
+t3seil
+t3seme
+ts1eng
+ts2ens
+t2s1ent
+t2s1ep
+t2s1er
+t6s5essen
+tse2t
+ts1eta
+t2seth
+t2s1eti
+t2s1e2v
+t2sex
+t3sexi
+t2s1i2d
+t2si2k
+ts3iko
+tsing4
+t2sini
+ts1ir
+4tsk
+t3skala
+ts4kele
+t4s3ko
+ts1off
+t3sol
+t3som
+t2s1op
+tso2r
+t2s1ori
+ts3ort.
+t3s2ouv
+t2sö
+t2spac
+t2spal
+ts1par
+ts4pare
+ts1pas
+t2spat
+ts3pate
+t2spä
+t3sped
+t3spei
+t3s2pek
+t2sph
+t3s2pi
+t4s3pic
+t4spins
+t2spo
+t3s2pon
+t3s2por
+t2spro
+ts2pul
+ts4put
+ts5s4
+t1st4
+t4stabe
+t2staf
+t4stag
+ts3tak
+t4stale
+t4s3tanz
+t4stas
+t4stat.
+t4s3täti
+t2stea
+t3stein
+ts4terb
+t3s4tern
+t3s4tero
+t4s5th
+t3stif
+t3stim
+t4stit
+t4stoch
+t4stoi
+ts4tol
+t4stren
+ts4tric
+t4strie
+ts2tu
+t5stub
+ts4tüm
+t4sty
+t2s1u
+5tsubi
+ts3un
+t4sw
+tswa2s
+t3sy
+4t1t
+tt1ab
+tt2ac
+tt3achs
+tt1ad
+tt2ag
+tta6g5ess
+t4t1ah
+tta2ke
+tt2al
+tta4n
+t4tana
+t2tanm
+tt2ant
+t4t1ap
+tt1art
+tt1äh
+tt1ebe
+tt1eif
+tt1ein
+t2t1eis
+t3tel
+tte4la
+tte4l3e4b
+tte4len
+tte4lin
+ttel1o
+t2temu
+tte4na
+t4tentb
+t4tentf
+t4tents
+t2teo
+tt4ere
+tte4rik
+tte2ro
+tt2erö
+tt2es1
+tte4sa
+tte4s3ä2
+tte2so
+tt2häu
+tt3hi
+t2t3ho
+t3ti
+t4tid
+t4t3igi
+t4tinf
+t4tins
+tt2int
+tt4lef
+t4torg
+tto1s
+t2trou
+tt3rü
+tt2sal
+tt2sen
+tts1p
+tt2spe
+tt2spr
+tt4s3tät
+tt3s2z
+tt1u2f
+t3tü
+tt3z2
+1tu
+3tua
+tu4ale
+tu1alm
+tu1alv
+tu3an
+2tub2
+tuba3b
+3tuc
+tu2chi
+tu1cho
+2tud
+tudie4n3
+3tue
+tu2ere
+2tuf
+tuf2e
+tu3fen
+t3u2fer
+3tuff
+tu2gan
+4tuh
+tuh4ler
+tu1ist
+tu2kr
+tul2i
+3tum.
+tum2b5l
+3tume
+4t3umf
+2t3umg
+2t1umh
+2t3umk
+2tuml
+3t2umo
+2t3umr
+4t3umsat
+2t1umsc
+tum2si
+tum2so
+tum4s5tr
+2t3umt
+2t1umw
+2t3umz
+3tun.
+2t1una
+2t1und
+tund2e
+3tune
+tun2en
+2t3unf
+3tung.
+t3unga
+3tunge
+tung4s
+2tunif
+2tu2nio
+2tuniv
+2t1unm
+3tunn
+t1u2no
+t3uns
+3tuns.
+4t3unt
+2t1unv
+2t1up.
+tu2r1ag
+tu2ran
+turan4l
+tu2ras
+tu2rä
+tur1c
+tu2r1e2b
+tu2rei
+tur3eis
+tu4rene
+tu2r1er
+tu4res
+tu2re4t
+tu2r3e2v
+tur3f4
+turg2
+tu2rid
+turin1
+tur4mun
+3turn
+tu2r3o
+turo2p
+tu4ru
+3tus
+tu2sa
+tu4schl
+tu2se
+tu2so
+tu3ta
+2tü
+4tüb
+tü3ber.
+3tüch
+tück2s
+3tüf
+4tüh
+3tüm
+3tür.
+tür1c
+3türe
+3türg
+3tür3s
+3türw
+4türz
+3tütc
+3tüte
+4tütz
+4t1v2
+t3vo
+tvoran4
+4t3w
+t5wa2
+twi4e
+t4wist
+1ty1
+2t1y2a
+3typ
+ty2pa
+tys2
+2t1z
+t2za2
+tz1ag
+tz3ar
+tz1au
+t2z1ä
+t3zäh
+tz1ec
+t2z1e2d
+tz1ehr
+t2z1eie
+t4z1eis
+tze4n1
+tz2ene
+tzen5s4t
+t4z3entg
+t4zentl
+t4z3ents
+tz2ere
+tzer6gre
+tz1erw
+t3zer3z
+t3ze2s3
+tze2t
+tz1eti
+t2z1i2d
+tzig4s
+tz1int
+t2z3om
+tz2th
+tz2tin
+tzu2gu
+t2zuni
+tzwan4d3
+tz1wä
+tz1wi
+t3zwie
+tz1wu
+2ua
+u3a2b
+u1a2c
+uad4r
+ua2g
+u1al.
+u1a2l1a
+u1a2l1ä
+u1alb
+u1ald
+uale2
+u3a2leb
+u3a4lent
+u3aler2
+ua4lerg
+ual3erk
+u3a2let
+u1alf
+u1alg
+u1alh
+u3a2lid
+u1aln
+ua2lo
+u1alp
+u1alr
+u1als
+u1al5t4
+ua2lu
+u1alw
+u1alz
+u1am
+uan2a
+u1ans
+uant2
+uan3ta
+u3ar.
+uara2b
+u1ars
+uar4t3an
+ua3sa
+uasi1
+ua2th
+uat2i
+uat2o
+u3au
+u1ay
+u1äm
+uä2s
+u1äu
+2u1b
+ubb2l
+ube2be
+u8be8cken.
+ube2e
+u2b1ehe
+u4b3eins
+ube4n1a
+uben3o
+ub2er
+u4b3erde
+ubert4
+ub4es
+ub1eul
+u3bit
+ub2l
+ub3läu
+ub3lic
+ub3lu
+ub4lut
+u2bob
+u2bop
+u2b3oz
+ub3ric
+u2b3rit
+ub4rü
+ub2san
+ubsau2
+ub4sche
+ub2s1o
+ub2sp
+ubst2
+ub3t4h
+4uc
+uc1c
+uch1a
+u1cha.
+uch1ä
+u1che
+uch1ec
+u2ched
+uch1ei
+ucherin8t
+u3ches
+u1chi
+uch3im
+uch1in
+uch3l
+uch3m
+uch3n
+uch1op
+u2ch3r
+uch4sel
+uch2so
+uch2sp
+uchst2
+uch6t5erf
+uch6t5ert
+ucht3re
+u1chu
+uch3ü
+uch1w
+u1ci
+uck3elf
+u2ckem
+u4ckent
+uck2er
+ucker8geb
+u2ck3i
+uck4sti
+u1cl
+2u1d
+u3d2a
+ud2e
+ude3i4
+udein7
+udel3se
+ude2n1
+uden3e
+uden3s2
+udert4
+udes2
+udi3en
+uditi4
+ud2ob
+u2don
+ud3ra
+u3dru
+2u1e
+ue2ck
+u2ed
+ue2en4
+u2eg
+u2eh
+ue2k
+u4ela
+ue2le
+ueli4
+uel4lau
+ue2mi
+uen1
+u3en.
+ue4n3a2
+u3end
+uene2
+ue2ner
+uen4gag
+uenge2
+uen2gl
+u3e2ni
+uenk4
+ue2no
+uen6zene
+uen2zu
+uen2zw
+u2ep
+ue2r3a2
+uera4t
+ue2r1ä
+uerb2
+uer6baut
+uer3d2
+uere2
+ue2rec
+uer4ei.
+ue4rein
+ue4r3emi
+u3eremp
+u3e4r3ent
+ue3r4erb
+u3ererf
+ue4rer4g
+uerer4h
+uerer4l
+uerer4m
+ue6rersc
+uerer6sp
+ue6rerst
+uer3esk
+ue2ret
+u3erex
+uer3g2
+u3erin4t
+u3erl.
+u3ern
+uer4nan
+uer4ne
+uern3s4t
+ue2r3o4
+uer2ö
+u3errü
+uer3sc
+uerst6
+uer3t4
+u3eruh
+u3erum
+u3erunf
+u3erunt
+u3erwi
+uer3z2
+ue2ta
+ue4tek
+ue2ti
+u2ev
+ue2x1
+uf1ab
+u3fac
+ufa2ck
+u3fah
+uf1ak
+u3fal
+ufall4
+u3fam
+ufa2n
+uf3ane
+u2f3a2r
+u3fas
+uf1aß
+ufa2t
+uf1au
+u2f1än
+u2f1äs
+u2f1ä2ß
+u2f1ei
+ufel4s3a
+u2f1em
+u3fen.
+u2fent
+u2ferf
+u2f1erh
+u4ferla
+u4ferle
+u4ferne
+u2f1et
+2uff
+uf3fe
+uff4l
+uf2fro
+u2f1id
+u2fim
+u2f1ins
+uf3l
+u2fob
+ufo2r
+uf1ori
+uf3r
+uf5sä
+uf2spo
+uf4stab
+uf4s3tic
+2uft
+ufta2b
+uft1eb
+uft3erd
+uft3er4g
+ufter4l
+uf4tin
+uft3s2
+u2fum
+2u1g
+ug2abe
+u4gabte
+u2g1a2d
+u2g1ak
+u2gani
+u2g1ans
+u2ganz
+u2g1ap
+ug1ar
+ug1au
+ug3d4
+u3ge.
+ug1ei
+u2geig
+u2gein
+uge4lob
+ugen3s2
+u2g1erf
+u2g1erl
+u2gerr
+u2gerv
+u2g1esk
+ug2et
+ugg2
+ugge4st
+ug2gl
+ug3g4t
+ug3hu
+u2g1i2d
+u2gim
+ug1in
+u2gl
+u4g1lä
+u6gleitb
+u6gleitu
+u4glic
+u4glis
+ug3liz
+u4g3lo
+u4glu
+u4g3n
+ugo3
+ugo4b
+ug3oc
+ug3om
+u3gon
+ugo4p
+ug1or
+u3gos
+u2gö
+u2g3rä
+u2greg
+u4g3reis
+u2gres
+ug3rie
+ug3ro
+u2grou
+ug3rüs
+ug3sei
+ug3span
+ugs4por
+ug4spr
+ug4spu
+ugs4tan
+ug3stä
+ugs4to
+ug3s4tr
+ug3stu
+ug4stur
+ug3s4tü
+u2gum
+ug4unge
+ug2uns
+ugu3te
+u2gü
+u1h
+uh2a
+2u5he
+uhe3a2
+uhe1s
+2uhi
+2uhl
+uh1la
+uh2lar
+uh1lä
+uh4l3ent
+uhl3erb
+uh2li
+2uhm
+uhr1a
+uhrei4s
+uh2r3er3
+2uh3ri
+uh4rin
+uh2r3o
+uh2ru
+uh4rü
+uhs4
+u2hu
+2uhü
+uh1w
+2ui
+ui1ch
+ui2che
+ui4cker
+u1ie
+ui1em
+u3ig
+u4ige
+uil4les
+u1im
+u3in.
+u3isch.
+u3ischs
+uis2e
+uisi4n
+ui4s5t
+uit3s
+u1j
+uk2a
+ukä2
+uk1äh
+u3käu
+u1k2e
+uke2n1
+u1ki
+2u1k2l
+ukle1i
+uk4n
+uko2m1
+uk2ö
+u1kr
+uk2ta
+uk2t1el
+uk4tent
+uk2t1er
+uk2tin
+uk4t3o4ri
+uk4t3r
+ukts2
+uk2tum
+u1ku
+uku2s
+uk2ü
+u1l
+ul1am
+ulan2e
+ul2ar
+ula2s
+ul1äm
+ulb4l
+ul4dan
+ul2dei
+ul2dr
+uld2se
+2ule
+u2l1el
+ul1emb
+ule4n
+ul1er2h
+ule2t
+ul1eta
+2ul3f4
+ul1id
+uli2k
+ul1ins
+ul3ka
+ul2kn
+ull1au
+ul3le
+ul4lerk
+ul3l2i
+ul2lo
+ull3s2
+ulm2e
+ulni2
+ulo2i
+u2lop
+u2l1or
+ulp1h
+ul2pha
+ul2sa
+ul4sam
+ul2s1ec
+ul2sei
+ul2ser
+uls2th
+ul2sum
+4ult2a
+ult3ar
+ul4tri
+ult3s
+u2lü
+ul2vr
+ulz2w
+u2mab
+u2m1ad
+u2m1a2k
+um1all
+um1ang
+um1anz
+u2m1ap
+um1a2r
+u2marc
+u2marm
+u2mart
+u3mat
+u4matl
+u4matm
+u2m1aus
+u2maut
+u2m1äh
+1umd2
+u3me.
+u2m1ef
+u2m1ein
+umen1e
+um5engel
+umer2a
+u2m1erf
+um1erg
+u3merk
+u2m1erl
+um1erw
+umes2t
+1umf
+1umg
+um1ide
+um1ind
+um1inh
+um1ir
+1umk
+1uml
+2umm
+um2mei
+u2m3ot
+ump2fa
+ump4fin
+umpf4li
+um2pho
+1umr
+um4sam
+um4s3an
+1umsat
+um4s1er
+um2sim
+um2s1pe
+um2sum
+um3t4
+u2m3um
+u2m1u2r
+1umz
+un1
+4un.
+2una.
+1unab
+un2a3br
+un2ag
+un2al
+u3n2am
+u2n3an
+u2nap
+u2narb
+2un2a1s4
+un3at
+un2är
+2und.
+un2da
+unda2b
+und3ak
+un4dap
+1undd
+2unde
+un3de.
+underer6
+und3erf
+und3erö
+underten8
+under8tend
+und3erz
+un2dex
+1undf
+2undg
+un2dim
+1undn
+undo2b
+un2dop
+un2dor
+4un2d3r
+4unds.
+2undsc
+und3sp
+und3st
+un2d1um
+undü4
+1undv
+1undz
+u3ne
+une2b
+une2d
+un3eid
+un3ein
+un3eis
+un2emi
+une4n1
+unen2t
+u4nerk
+u4n3erz.
+un2es4
+unf2
+un3fa
+unft4s
+un2gam
+un2gat
+3ungena
+unge3r4e
+1unget
+1ungew
+ung5h
+un2glu
+1unglü
+un2go
+un2gr
+ung3ri
+ungs3
+ung4sa
+ungs5tr
+u3nic
+3u2nif
+uni3k4
+un2im
+1unio
+un2ir
+un3iro
+un3isl
+u3n2it
+1u2niv
+2unk
+un2k1a2
+un3ker
+un2k1es
+un2ket
+un2kne
+unko2p
+un2kro
+unk3s2
+unk4tit
+unk2tr
+unk4tri
+unlö2
+unna2
+un2n1ad
+unn2e2
+unne4n
+u2nob
+uno4r
+un2os
+1unr
+uns2
+2uns.
+unsch5el
+un3se
+1un3si
+un3sk
+un3sp
+unsta4g
+unste4c
+uns4t1r
+4unsy
+4unsz
+1unt
+un3ta
+un3te
+unte4ri
+4unti
+un3tr
+unt3s
+2untu
+3unty
+2u2nu
+u3nuc
+unvol2
+unvoll3
+1unw
+4unwä
+3unwe
+u2ny
+2unz
+un3z2a
+unz2e
+2uo
+u1o2b
+u3of
+u3or.
+u1or3c
+uore4
+u3o2ret
+u3ors
+u1ort
+u1orw
+uos2
+u1os.
+uote2
+u1o2x
+uö2d
+u1ök
+u1pa
+3upd
+u1pe2
+uper1
+upe4re
+uperer4
+up2fa
+u2pfe
+u2pf1i
+up2fu
+3upg
+u3p4i
+up4lu
+up2pl
+u1pr
+upra3
+u2p3ras
+up4t3a2
+upten1
+up4tene
+upt3erf
+upt3erg
+upt3erk
+upt3ers
+up4tid
+up4tim
+up4t1o
+up4tr
+u1q
+4ur.
+u1ra
+u2rab
+u3raba
+ura2be
+u2r1akt
+u2ral4t
+u2r1a2m
+ura4na
+uran3a4t
+u3rand
+ur1ang
+uran4ge
+ur2anh
+uran5s
+ur1anz
+ur3ap
+u2r3ar
+ura4ri
+u3rasc
+ur3asp
+ura4str
+ur4ate
+ura3to
+u2r3att
+u2r1au
+2u1rä
+ur1äl
+ur1ä2m
+ur1än
+ur3b2a
+2urc
+urch1
+urcht3e
+urd2
+ur3da
+ur3di
+ur1eff
+ur1eig
+u2rele
+ure2n
+ure4na
+uren6gag
+u4rense
+u4rentn
+u2r1ep
+ur1er3h
+urer3k
+ur2ert
+u2rerw
+ur1eta
+ur2eth
+ure3u
+2urf
+ur2f3l
+ur2fro
+urf4spr
+urf3t
+ur6gense
+urg3inn
+urg1l
+ur2gla
+ur2gri
+urgros4
+urg3s4
+uri2c
+ur1ide
+uri3en
+u2rind
+urin8stin
+ur3ku
+ur3l
+ur4mant
+ur4matt
+ur2mau
+urm2ei
+ur4mern
+urmet1
+ur2mum
+ur2mun
+ur3n2e
+4u1ro
+ur1off
+uro1s4
+urost2
+2u1rö
+ur3p4
+2urr
+ur3re
+3ur3sac
+ur2san
+ursau4
+ur2s1er
+ur4s1of
+ur2spa
+urst4r
+ur3sze
+urt2
+2urta
+ur2tai
+urt3ein
+ur3ti
+ur2tro
+urt3sc
+u3ru
+uruf4
+urü2
+ur2z1a2
+ur2zä
+ur2z1ec
+ur2zep
+ur2zi
+ur2z1op
+urzt4
+ur2z1w
+2us
+us3a2b
+u4s3af
+usa2gi
+u4s1amb
+u4samt
+u2sang
+us2ann
+us3ark
+u2s1a2s3
+u2säh
+u4schab
+u4schak
+u3sche.
+u4schef
+usch5eic
+u4sch3eu
+u3schi
+usch3mü
+u3schu
+usch5wer
+u3se.
+u3s2e3b
+u2s1ec
+u2s1ei
+u3seid
+u4sense
+u4sentl
+u3sep
+use3ran
+use4rec
+u2s1erl
+u2serp
+us1erw
+u2s1ese
+u2sex
+u3si.
+u2sid
+usi3er.
+usi5ers.
+us1inn
+us1is.
+us3kl
+us3oc
+us1oh
+u3sol
+u2sop
+us1ou
+u2spac
+us3part
+u2s1pas
+us1pe
+u3s2pec
+u3s2pek
+u2sph
+us1pic
+u3spit
+u3s4piz
+u2spo
+us2por
+u2spu
+usrich7
+us2s1eb
+usse4g
+uss2el
+usse4n
+us2sep
+us5ser.
+uss3erf
+usser4z
+us4sesp
+us2sez
+us2sof
+us2sum
+u1stal
 us3tau
-u2s1uf u8surn ut1ac u1tal uta8m u1tan ut1ar u1tas ut1au
-u1te u8teic u4tent u8terf u6terin u4t3hei ut5ho ut1hu u1ti utine5
-uti6q u1to uto5c u1tr ut1sa ut1s6p ut6stro u1tu utz5w u1u u1v uve5n
-uve3r4ä u1w u1xe u5ya uy5e6 u1yi u2z1eh u8zerh u5ö uße6n
-ußen5e 8vanb 6vang 6varb var8d va6t5a va8tei
-va2t1r 2v1b 6v5c 6vd 1ve 6ve5g6 ver1 ver5b verb8l ve2re2 verg8 ve2ru8
-ve1s ve2s3p ve3xe 2v1f 2v1g 6v5h vi6el vie6w5 vi1g4 vi8leh vil6le.
-8vint vi1ru vi1tr 2v1k 2v1l 2v1m 4v5n 8vo8f voi6le vol8lend vol8li
-v2or1 vo2re vo8rin vo2ro 2v1p 8vra v6re
-2v2s
-2v1t 2v1v 4v3w 2v1z
-waffe8 wa6g5n 1wah wah8n wa5la wal8din wal6ta wan4dr 5ware wa8ru
-war4za 1was w5c w1d 5wech we6fl 1weg we8geng weg5h weg3l we2g1r
-weh6r5er 5weise weit3r wel2t welt3r we6rat 8werc 5werdu wer4fl 5werk.
-wer4ka wer8ku wer4ta wer8term we2sp
-we8s4tend
-we8str
-we8stö wet8ta wich6s5t 1wid wi2dr wiede4 wieder5 wik6 wim6ma
-win4d3r 5wirt wisch5l 1wj 6wk 2w1l 8w1n wo1c woche6 wol6f wor6t5r 6ws2
-w1sk 6w5t 5wunde. wun6gr wu1sc wu2t1 6w5w wy5a wärme5 wä1sc
-1xag x1ak x3a4men 8xamt x1an 8x1b x1c 1xe. x3e4g 1xen xe1ro x1erz
-1xes 8xf x1g 8x1h 1xi 8xid xi8so 4xiste x1k 6x1l x1m 8xn 1xo 8x5o6d
-8x3p2 x1r x1s6 8x1t x6tak x8terf x2t1h 1xu xu1e x5ul 6x3w x1z 5ya.
-y5an. y5ank y1b y1c y6cha y4chia y1d yen6n y5ern y1g y5h y5in y1j
-y1k2 y1lak yl1al yla8m y5lax y1le y1lo y5lu y8mn ym1p2 y3mu y1na yno2d
-yn1t y1on. y1o4p y5ou ypo1 y1pr y8ps y1r yri3e yr1r2
-ys5iat ys8ty
-y1t y3w y1z yä8m z5a6b zab5l 8za6d 1zah za5is 4z3ak 6z1am 5zange.
-8zanl 2z1ara 6z5as z5auf 3zaun 2z1b 6z1c 6z1d 1ze ze4dik 4z3eff 8zein
-zei4ta zei8ters ze6la ze8lec zel8th 4zemp 6z5engel zen8zin 8zergä
-zer8i ze1ro zers8 zerta8 zer8tab zer8tag 8zerz ze8ste zeu6gr 2z1ex
-2z1f8 z1g 4z1h 1zi zi1en zi5es. 4z3imp zi1na 6z5inf 6z5inni zin6s5er
-8zinsuf zist5r zi5th zi1tr 6z1j 2z1k 2z1l 2z1m 6z1n 1zo zo6gl 4z3oh
-zo1on zor6na8 4z1p z5q 6z1r 2z1s8 2z1t z4t3end z4t3hei z8thi 1zu zu3al
-zu1b4 zu1f2 6z5uhr zun2a 8zunem zunf8 8zungl zu1o zup8fi zu1s8 zu1z
-2z1v zw8 z1wal 5zweck zwei3s z1wel z1wer z6werg 8z5wes 1zwi zwi1s
-6z1wo 1zy 2z1z zz8a zzi1s 1zä 1zö 6zöl. zö1le
-1zü 2z1ü2b ä1a6 äb1l ä1che ä3chi
-äch8sc äch8sp ä5chu äck5a äd1a äd5era
-ä6d5ia ä1e ä5fa äf1l äft6s äg1h
-äg3le ä6g5nan äg5str ä1he ä1hi äh1le
-äh5ne 1ähnl äh1re äh5ri äh1ru ä1hu
-äh1w 6äi ä1isc ä6ische ä5ism ä5j
-ä1k äl1c ä1le ä8lei äl6schl ämi1e
-äm8n äm8s ä5na 5änderu äne5i8 äng3l
-änk5l ä1no än6s5c ä1pa äp6s5c 3äq
-är1c ä1re äre8m 5ärgern är6gl ä1ri
-3ärmel ä1ro ärt6s5 ä1ru 3ärztl ä5rö
-ä6s5chen äsen8s äs1th äta8b ä1te äteri4
-äter5it ä6thy ä1ti 3ätk ä1to ät8schl
-äts1p ä5tu äub1l äu1e 1äug äu8ga
-äu5i ä1um. ä1us. 1äuß ä1z
-ö1b ö1che ö5chi
-öch8s2tei
-öch8str öcht6
-5ö6dem 5öffn ö1he öh1l8 öh1re ö1hu
-ö1is ö1ke 1ö2ko 1öl. öl6k5l öl8pl
-ö1mu ö5na önig6s3 ö1no ö5o6t öpf3l
-öp6s5c ö1re ör8gli ö1ri ör8tr ö1ru
-5österr ö1te ö5th ö1ti ö1tu ö1v ö1w
-öwe8 ö2z üb6e2 3ü4ber1 üb1l üb1r
-5ü2bu ü1che ü1chi ü8ch3l üch6s5c ü8ck
-ück1a ück5ers üd1a2 ü6deu üdi8t ü2d1o4
-üd5s6 üge4l5a üg1l üh5a ü1he ü8heh
-ü6h5erk üh1le üh1re üh1ru ü1hu üh1w
-ü3k ü1le ül4l5a ül8lo ül4ps ül6s5c
-ü1lu ün8da ün8fei ünk5l ün8za ün6zw
-ü5pi ü1re ü8rei ür8fl ür8fr ür8geng
-ü1ri ü1ro ür8sta
-ü1ru üse8n
-ü8sta ü8stes
-ü3ta ü1te ü1ti
-üt8tr ü1tu üt8zei ü1v ß1a8 5ßa.
-ß8as ß1b8 ß1c ß1d
-1ße ß5ec 8ße8g 8ße8h
-2ß1ei 8ßem ß1f8 ß1g ß1h
-1ßi ß1k ß1l ß1m
-ß1n ß1o ß1p8 ß5q
-ß1r ß1s2 ßst8 ß1ta
-ß1te ßt3hei ß1ti ß5to
-ß1tr 1ßu8 6ß5um ß1v ß1w
-ß1z
-2s1ta.
-i2s1tal
-2s1tani 2s1tan.
-fe2s1ta
-ta2s1ta
-te2s1ta
-nd2ste
-ve2ste
-3s2tec
-4s3techn
-3s2teg
-3s2teh
-3s2tein 3s2teig 3s2teif
-3s2tell 3s2telz
-a4s3tel
-3s2temm
-3s2temp
-3s2tep
-s3s2ter t3s2tern
-3s2teue
-6s4teuro
-bs2ti
-te2s3ti
-ve2sti
-3s2tic
-3s2tieb
-3s2tieg
-3s2tif
-3s2til
-3s2tim
-3s2tink
-3s2titu
-a2s1to
-gu2s1to
-ku2s1to
-i2s1tol i2s1tor
-ve2s1to
-2s1tung
-2s7tus
-o2s1tul
-aus3s4
-ens3s4
-gs3s4
-.mis2s1
-s2s1b8
-s2s3chen
-s2s3d
-s2s5ec
-2s2s1ei
-s2s3f
-s2s1g
-s2s3h
-s2s3k
-s2s3l
-s2s3m
-s2s3n
-s2s3p8
-s2s5q
-s2s3r
-s2s3s2
-sss2t8
-as2s3te
-is2s3te
-us2s3te
-üs2s3te
-s2st3hei
-s2s3ti
-s2s1to
-s2s1tr
-6ss5um
-s2s3v
-s2s3w
-s2s3z
-1cker.
-1ckert
-1ckad
-1cke.
-1ckel
-1cken
-4ck1ent
-1ckere
-1ckern
-1ckeru
-1ckie
-1ckig
-1ckun
+us4tein
+u1stel
+ust3erl
+us2th
+us3ther
+us3t2in
+us3tr
+u3s4tras
+us6tris
+u1stu
+u2stun
+u2stur
+u2sumd
+u2sumg
+u2sumz
+3usus
+u2sü
+2u1ß
+u2ß1u
+2u1t
+u3taf
+u2t1alt
+u4t1a2m
+ut2ans
+u2t1ap
+u2t1ar
+uta2s
+u2taut
+ut1äh
+u2tär
+ut3c
+ut1e2d
+u3teh
+ut1ei.
+ut1eie
+ut1ein
+u3tek
+ut1ela
+u3tem
+ute2n1
+uten2a
+u2tent
+u4tentf
+uter3a
+ute4ral
+ute5r4er
+ute6ring
+ute4ros
+ut2es
+u3t2et
+u2t2ev
+u2t1ex
+utfi2
+ut3hel
+u2t3hi
+u2t3ho
+u2thu
+u2thy
+u2tid
+uti2vi
+utli4n
+uto3
+uto4ber
+u3tom
+u2tops
+utor2a
+u4tord
+utos4
+u2töl
+4utr
+ut3rea
+u2trou
+ut3rü
+4uts
+ut3sau2
+ut2säu
+ut4schl
+ut4schm
+ut4scho
+ut4schö
+ut3ser
+ut3s2k
+ut3te
+ut5t2l
+utt4le
+utts2
+utu2b
+u2tum
+utu4n
+u4t1une
+utu4re
+utu3ro
+utu5ru
+u3tü
+u4tz
+ut2zeh
+utz3eng
+utz2er
+ut2zet
+ut2z1in
+ut2z1w
+2u3u4
+uufe2
+uum1
+uuma4
+u1ü2
+2u1v4
+u2ve.
+uve3rä
+u1w
+2u1x
+ux2e
+ux2o
+ux3t2
+u1ya
+2u1z
+u2z1ec
+uz2er
+uzo2f
+uz3ot
+uz1we
+uz3z2
+1üb
+üb1ä
+2übc
+2übd
+üb4e2
+übe3c
+übe3le
+übe4na
+übe3ne
+über3
+ü4bet
+üb3l
+üb3r
+üb2s3t
+2üc
+ü1che
+üch3l
+üch2s1c
+ücht4e
+ü3cke4n
+ück1er
+ück3eri
+ücker6ke
+ü4ckers
+ü2ckin
+ü4d3a4
+üde2c
+üde2l
+ü3den.
+üden2g
+ü3d2ens
+üd3o4
+üd3r
+üd3s2
+üd3t4
+üdu2
+üe2
+üeb3
+ü1ei
+ü2f1a
+ü2f1ä
+ü2f1ei
+ü2fent
+üfer2
+ü2f1erg
+üf2fl
+ü2f3i
+üf3l
+ü2fo
+üf3ter
+ü2fum
+ü1g
+üg2e
+üge2l1a2
+üge2lä
+üge4lec
+üge6lei6s
+üge2lo
+ügen3s
+ü2g3l
+ü2gn
+üg3s2
+üg4s3t
+üh3a2
+ü1he
+ü2h1ei
+ü2h1eng
+ü2h1ent
+üh1er
+ü2herf
+ü2her2k
+ü2her2z
+ü2hex
+üh1i4
+ühla2
+üh1lä
+ühl2er
+ühl4sta
+ühl4sti
+üh3mo
+üh3ne
+ühn2s
+üh1o2
+üh3r2e
+ühr3ei.
+ühre2n1
+ühren3s4
+üh1ro
+ühr3ta
+üh1s
+ühs2p
+üh3t2
+üht4r
+ü1hu
+üh1w
+ü1k2
+ül1a
+ül2c
+ü3l2e
+ü4l3ef
+üle2ra
+ül2l1a2
+ül2l1ei
+üll2er
+ül2lid
+ül2lo
+ül2lö
+ülls2
+ü2lö
+ü1lu
+ü2ma
+ü2ment
+üme2ra
+ü2m1id
+ü2m1in
+ü2m1u
+2ün
+ü4n3a2
+ün2da
+ün2dr
+ünd3s
+ü2n1erd
+ünf1
+ünf3li
+ün2g3l
+ün2s
+ün3sc
+ün3se
+ün3sp
+ünster3
+ün3str
+ün2za
+ünzu2
+ün2zun
+ün2zw
+ü1pe
+üpf3l
+ü1pi
+üp2pl
+ür1a
+ü2r1ei
+ü2r1e2l
+ür2fl
+ür2fr
+ür4g3en4g
+ürge4ra
+ürk2e
+ü1r2o3
+ürom2
+üror2
+ürr2
+ür2s
+ür3sc
+ür3se
+ür3si
+ür3sp
+ürte2l3
+ürt4h
+ürz2a
+ür2z1in
+ür2zö
+ür2z1w
+üs2a
+ü2schl
+üs2e
+üse1e2
+üse3l2
+üse4n
+üse1r4
+üse1s
+üse3t
+üs2s3a
+üs2s1c
+üss2e
+üs4s1o
+üs2st
+üst3a2
+üste2n
+2ü1ß
+2üt
+ü2t1al
+üte3m
+üte4n
+üten3s
+ütent4
+üten3z2
+üte2ra
+üte2r1e
+üterich6
+üter3n
+ü2t3h
+ü2t3r
+üt2s1
+ütte4n
+üt2tr
+üt3z2e
+üt2zw
+ü1v
+ü1z
+3va.
+2v1ab
+vab4r
+va1c
+va1f4
+vag2a
+va2la
+2valu
+2vanb
+2vang
+2varb
+v1arm
+va1s2
+2v1ass
+v4at
+va2t1a2
+va2tei
+va4t3eng
+va4tess
+va2t3h
+va4tid
+vatik2
+va4tim
+va4t1in
+vati8ons.
+va4tord
+va4t3r
+vat3s4
+va2t1u
+2v1au
+2v1b
+2v1c
+2v1d2
+1ve2
+ve3an
+ve3ar
+veau1s
+ve3b4
+ve3d
+ve3fa
+ve3g
+ve3h2
+2veig
+v2eil
+2vein
+veit2
+veits3
+ve3la
+2velan
+ve4l1au
+v1ele
+ve3lei
+ve3li
+ve3lo
+ve3ma
+ve3me
+2vemu
+ve3nal
+ve4nas
+ven2c
+ve3ne
+ve3ni
+ve4nin
+ve3nö
+ven6t3ag
+ve3of
+ver1
+ver3a
+ve3rad
+2veral
+ve3rand
+ver4ane
+vera4s
+ver6bart
+ver3b2l
+ver3d2
+vere2
+ve4rek
+verf4
+ver3fa
+ver3g4
+ve3ri
+ve4rin
+ver3k
+vern2
+ver4sep
+vert4
+ver5te
+ver3u4
+ves1
+ve3sa
+2ve3s2c
+2ve3s2e
+ves3ti
+ve3t
+vete1
+vete3r
+2veü
+ve3v
+ve3w
+ve3x
+2v1f4
+2v1g
+2v1h
+vi2ad
+vi3ar
+vi4a3t
+vi2ä
+vi2c
+vi3de
+vid3s2t
+vie2h1a
+vi2el
+viela2
+viele2
+vi2er
+vie4rec
+vie2w1
+vig2
+2vii
+v2il
+vi2l1a
+vi2lä
+vi4l1e2h
+vi2lei
+vi4lers
+vi2l3in
+2v1i2m
+vima2
+vi4na
+2v1in3d
+ving5
+2v1int
+vi3sa
+vise4
+vi3s2i
+vi3s2o
+vi2sp
+vis2u
+viv2
+vi3z
+vize1
+2v1k
+2v1l2
+v3le3
+v2lie
+2v1m
+vm2e
+2v1n2
+1vo
+2v1ob
+vo2be
+vob4l
+vo3ga
+voge2l1
+vo2gu
+vol2a
+vol2l1a
+vollen6
+vol6lend
+vol6lert
+vol2li
+2v1op
+vo2r1
+vor3a
+voran8schl
+vore2
+vor3g
+vo3ri
+vo4rie
+vo5rig
+vorm2
+vormen4
+vor3o
+vort4
+vot2a
+voy1
+vö2c
+2v1p
+vr2
+v1ra
+v2ree
+3v2ri
+v1ro
+2vs
+vs2c
+vs2e
+vs2p
+v1sta
+v1steu
+v3s2z
+2v1t
+vue3
+vu2enu
+vu2et
+2vumf
+2vumg
+2vumk
+2v1ü
+2v1v
+2v1w
+2v1z
+w2a
+1waa
+wab2bl
+wa3che
+wach8stub
+wach4t4r
+1wack
+waffe2
+waffel3
+1wag
+wa5ge
+3wage4n
+wa2g3n
+wa3go
+1wah
+wahl5ent
+wah4ler
+wah2l1i
+1wal
+wala3c
+wa2lar
+2walb
+wal2d3a
+wal4din
+wa2les
+wa3li
+wal2m1
+wals2
+wal2t1a
+wal6tere
+wal6terl
+wal4to
+wal4tur
+3walz
+wa3na
+wan2d1a2
+wandels6
+wan2dr
+w3anf
+2wang
+wan3g2e
+wang4s
+1wann
+wan6z5en6d
+wan4zer
+wa2p
+1war2e
+ware1i
+wa3ren
+1warn
+wart4e
+war2th
+1was
+wa3sa
+was2c
+wa4scha
+wa3sche
+wa4sch3l
+wa4schw
+wa3sh
+was3s
+wass4e2
+wa3su
+w2ä
+1wäh
+1wäl
+2wäng
+1wäs
+wäs2c
+wäss4e
+2w3äu
+2w1b2
+wbu2
+2w1c
+2w1d
+we2a
+we2b1a
+webe1i
+we2b3l
+we2bo
+we2b3r
+webs2c
+we3cke.
+we5cken.
+we3ckes
+we2e2
+weed3
+we2fl
+1weg
+we2g1a
+we4g1ei
+weg5ersc
+we4g3l
+we4gn
+we2g1o2
+we2g3r
+weg3s
+wegs2a
+wegs4t
+1weh
+weh4r3er
+wei2bl
+weib4r
+wei3dr
+2weie
+weifel6d
+wei2gr
+weigs4
+wei3k4
+3weil
+wei3nel
+weins3a
+weinsau6
+wei3sc
+weis6sel
+weis6spi
+wei2t3r
+wei5ze
+wel5le4
+wel6schl
+wel6schr
+wel2t1
+wel4t3a2
+welte2
+wel6t5en6d
+wel4th
+welt3i
+wel4to
+wel4t3r
+wen3a2
+wendes4
+wen2gl
+we3n2i
+wen2ka
+wen4kla
+wen4k3ri
+we2r3a2
+wer5be
+werbe3i
+wer2bl
+werb2s
+1werbu
+werd2
+werde3i
+5werdens
+1werdu
+werer2
+wer2fl
+2werg
+wer6gels
+wer2g3o
+wer2gr
+werin2
+we4r3io
+1werk.
+wer2k1a
+1werke
+wer2ki
+wer2k3l
+wer2kn
+wer2ko
+wer4kre
+wer2ku
+we2rö
+wer2s
+wer2t1a
+wer2tä
+wer3t3ei
+wer6teig
+werter6k
+wer6t5erm
+wer2th
+wer4t1o2
+wer4tre
+wer4t3ri
+wer4tum
+1wes2e
+we2s1p
+we4st
+wes4t1a
+weste2
+west3ei
+wes6ten6d
+wes4tex
+wes4ti
+wes4t1o4
+west3r
+wes2tu
+1wet
+2wets
+wett3s
+2w3ey
+2w1g
+whi4
+w3ho
+w2i
+wicht4s
+wi1cka
+1wid
+wi2e
+2wieb
+1wied
+wie3l
+wie3n2e
+1wild
+wim2ma
+wim4m3u
+win2a
+win4d3e4c
+win4dei
+win6d5erz
+1win2d5r
+2wing
+win2g3r
+win2kl
+win8n7er8sc
+win2no
+win3s
+wint2
+1wi4r
+wire3
+wisch3l
+wi5s2e
+wi2sp
+1wiss
+wiss4z
+wi3th
+1witz.
+1witzl
+wiz2
+2w1k
+2w1l
+2w1m
+2wn
+wns2a
+wn3sh
+1wo1c
+wo2cha
+woch2e4
+1woh
+woh4lei
+1wolf
+wolf2s3
+wol2la
+wol4ler
+wor3a
+wor3d
+wo2r3i
+worn2
+wort1a
+wor4tel
+wor6terh
+wor4t3r
+wort3s2
+wo4r3u
+wor3ü
+wot2
+1wöc
+wöl2fo
+wört4h
+2w1p
+w2r
+w3ro
+4w1s
+ws2e
+w3s2h
+w3s2k
+ws2t
+2w1t
+wti2
+1wuc
+wuch4sc
+wuch4st
+w1u2f
+wul2
+wul3se
+wund4e
+wung3r
+wungs4
+wun2s
+wunsch5l
+4wur.
+wur2fa
+wur2f1o
+wur2fr
+wur2s
+1wurst
+wus2
+wus3te
+1wu4t1
+1wüh
+wül2
+wün3
+1würf
+1würst
+2w1w
+2w1z
+x1a
+1xa.
+2xa2b
+1x2ad
+1xae
+xa1fl
+1x2a3g2
+2xal
+xal2l
+xa2m
+xand4
+x2an3t2
+x2anz
+1x2as
+2x1b4
+2xc
+x1ce
+x1ch
+x1cl
+4x1d
+xda4
+1xe
+2x1e4g
+2xek
+xe2l
+x1ele
+x1em
+3x2em.
+x2ems
+x2en
+xen3s2
+x2er.
+x2ere
+2xerl
+xers2
+2x1eu
+2x1ex
+4x1f
+2x1g
+2x1h
+xi1c
+xich2
+2xid
+xi2dan
+xide2
+xi2dei
+xi2d1em
+x1i2do
+xi4ds
+3x2ie
+xie3l
+xi3g
+xi2ler
+xi2lo
+xi2l1u
+xim2
+xin3s2
+x2is1
+xi2sa
+xis2c
+xi2se
+xi2so2
+xi2sp
+xis3s2
+xis3t
+xis4tä
+xi2su
+x1i4tu
+xive4
+2x1j
+2x1k2
+xkal2
+4x2l2
+x3lä
+x3le
+2x1m
+2x1n
+2xod
+2x3oe4
+x1or
+2x1ö2
+4x1p
+xpor6ter
+xpor4t3r
+x1q
+2x1r
+4x3s2
+4x1t
+xt1a
+x3tan
+xt2ant
+x3tas
+x2t1ä
+x3tät
+xtblo4
+x2t1e2d
+xt1ein
+x2t1el
+x4tent
+x2t1er2f
+x2t1ev
+xtfi2
+x2t3h
+x2tid
+xti2la
+x2til2l
+xt1o2
+x4tor
+xtra3b4
+x2t3ran
+x2trau
+xt3rec
+xt3s2
+x2t1um
+x2t1un
+1xu
+xu1a
+2x1u2n
+xu2s3
+xuss4
+2xv
+2x1w
+2xy
+3xy.
+3xys
+2x1z
+2yab
+1ya2c
+y2ach
+y2ag
+ya1h
+y1al.
+y1a2m
+y2ana
+yan2g
+y1ank
+y2a3ra
+ya2s3
+yat2
+ya3z
+y1ät
+y1b
+y1c
+y2chi
+y3chis
+ych3n
+y1d4
+y3dr
+ydri4
+ydrid1
+y1e
+y2ec
+ye2d
+y2ef
+y2el
+yen4n
+y2ere
+yer2n1
+y2es
+yes2p
+y3est
+ye2th
+y1f2
+y1g
+ygi2
+ygie5
+yg2l
+y1h
+yhr2
+y3i4
+y1j
+y1k2
+yke3n
+yk4l
+yk3s2
+y1l
+yl1a2c
+y2l1a2m
+yla2n
+yl3ane
+y3lant
+yl4ante
+yl4anti
+y4lantr
+y3lat
+ylau2
+yl3c
+yle2
+y2le.
+yl1em
+y2l1es
+y2l1et
+yli4n
+yloi4
+yloid1
+yloni1
+yl1ora
+yl3s2
+ym4a
+ym4e
+ymp4
+ym2pha
+ympi1
+yn2eu
+yn3k2
+y2n1o
+yno4d
+yno4t
+yob2
+yoga3
+yom4
+yon2a
+yon4i
+y1ont
+y1o1s2
+y2ost
+y1ou
+2y1p
+ypa2
+yp1ab3
+yp1an
+yp2e2
+y2pf
+y2p1i2d
+y2p1in
+y2p3l
+ypo3
+y4p3s
+yp3t
+ypu2
+y2p1um
+y1q
+y1r
+yra3k
+y3r2e
+y3ri
+yri2a
+yri1e
+yri3en
+y3ro
+yros3t
+yrr2
+ys2an
+ys2c
+ys2e1
+ysein2
+y3s2h
+y4s3l
+ysme3
+ys4po
+ys1pr
+yst2e
+yst4h
+ys2the
+ys3to
+ys3tr
+ys4tra
+y4stro
+y3s2ty
+ysu2
+y2s1ur
+y3s2z
+y1t2
+y2te.
+y2tes
+yt4h
+ythe1
+y3to1
+ytos2
+y4t3r
+yt3t
+y1u2r
+y1v
+y1w
+y1y
+y1z2
+yze3r2
+2z1a2b
+zab3l
+za1c
+2z1a2d
+2z1af
+za3gr
+3z2ah
+zah3le
+zah4ner4
+2z3ak
+4zakk
+2z1al
+3zali
+2z1a2m
+z1a2n
+z2an.
+4za4na
+2zanb
+za3ne
+2zanf
+2zangs
+3z2ank
+zan2ka
+2zanr
+zans4
+zanti1
+za4pf
+z1aq
+z1ar
+3zar.
+2zarb
+2zarm
+3z2aro
+zar2tr
+2z1as
+za2sc
+zast4
+z3at
+zat2e
+za2to
+3zaub
+z1au2f
+2z3aug
+3zaun
+z3aur
+2z1aut
+zä2
+2z1äc
+z2äh
+zä3hi
+2z1äm
+z1än
+z1äp
+z1är
+2z1äus
+2zäuß
+4z3b4
+zbe3r2e
+zbü1b
+zbübe3
+2z3c
+2z3d2
+zdan2
+zdä1
+zdi1st
+3ze.
+2z1e2ben
+ze1c
+2z1e2cho
+ze1e2
+zeeu3
+2z1eff
+z1e2ga
+zehe4
+zehen1
+zeh2l
+ze3ho
+z2ei1f4
+zeil2
+zei3la
+zeile4
+2z1ein
+ze3in.
+z2e1ind
+zei4ne
+z2eino
+ze3inse
+ze2i1s4
+zei3sk
+zeist4
+3zeit
+zei2t1a
+zei4t3er
+zei4to
+zei2tr
+zei4t3ri
+ze2l1a
+zela2d
+ze2l1ä
+zel3d
+2ze2lek
+2zelem
+ze2len
+ze2l1er
+ze2l1in
+2z1e2lit
+zel3la
+zel4l3ac
+zel6lein
+zel6ler6t
+zell3s2
+zelm4
+ze2l1o
+zels2
+zel3sa
+zel3sz
+zelu2
+zembe2
+2z1emp
+5zen.
+ze4n1ac
+ze4nas
+zen3au
+ze3n2em
+zenen1
+4zenge.
+z4engl
+2zengp
+zen3n
+ze2n3o
+ze4not
+4zensem
+zens2p
+zen4tha
+z2entn
+zent3s
+2zentw
+2zentz
+zen4z3er
+zen2zw
+zeo4r
+3z2er.
+ze2rad
+ze1ral
+ze2re2b
+z2erfe
+2z1ergä
+4z3ergeb
+z4erges
+z4ergl
+zer4gon
+2z1ergu
+z2erhe
+2z3erhö
+zerin6te
+z2erko
+3zerl.
+zer4lau
+zer4le.
+4zerleb
+zer4len
+2zerlö
+3z2ern
+zer4nan
+zer4n3e4b
+zer4nei
+2z1erö
+zer2öf
+2z1erq
+4z3erreg
+zers2
+z2ers.
+2z1er4sa
+zerta2
+zer4t3ag
+zert4an
+zer6teng
+zer6tere
+zer6terl
+zer4tin
+zer4to
+6z5ertrag
+zer6trau
+z1erwe
+2z1erz
+zer2ze
+4z3erzi
+ze2sä
+ze3sch
+zes1e
+ze2sp
+ze4spo
+ze4spr
+zes2sa
+zes4seb
+zes4sei
+zessen4
+zes6s5end
+zes6sent
+zes4ser4
+zes2sp
+zes2st
+ze1sta
+ze3stau
+zes5tr
+zes6tra
+2zeta
+2z1e2th
+ze2tr
+2zetts
+zeu2g3r
+2z1eul
+ze1ur
+2z1e2x1
+4z3f4
+zfeue2
+2z3g4
+zger2a
+zger4s3
+2z1h2
+z2hen
+zhir3
+zi3ar
+zich2o
+zi2dei
+zie4ler
+zie2l1i
+zien3s
+zi1erh
+zi1es
+zi3ess
+z2il
+zil2e
+zill2
+2zimp
+zim4t3
+2z1ind
+zin2e
+zin3ei
+2z1inf
+z1inh
+zi4n3in
+zin1it
+2z1inj
+zin2na
+zin4o
+zin2sa
+zin4ser
+4zinsuf
+2zint
+2z1inv
+zi2o3
+zirk2
+zirk6s
+2z1i2so
+zisse4
+zi3s2z
+zi2tan
+zite4
+zi1th
+zithe2
+zi4t1o4
+ziv2
+2z1j
+4z1k4
+2z1l2
+zlei3ti
+zle1s
+z3ly
+2z1m2
+zme2e
+2z3n2
+z3oas
+2z1ob
+z1of
+zo2gl
+zog4s3
+2z1oh
+zol2la
+zoller4
+zol6lert
+zon3s4
+zon4t3er
+zo2o
+2zope
+2z1o2r
+zo3re
+3z2orn
+zor4ne
+2z1osz
+2z1ou
+2zö2f
+2z1ök
+z1öl
+3z2öll
+2zöls
+2zön
+4z3p4
+2z1q
+4z3r2
+4z1s4
+z3sa
+zsau2
+z3sh
+z3sk
+zspor2
+z3sz
+2z1t
+zta2n
+zt3ane
+z2t1au
+z4tehe
+ztein1
+zt3eins
+zt2el
+z4t1ent
+z4t1erz
+zte3str
+zt3he
+z3t4hem
+z3t4her
+zt3hi
+zt3ho
+z3thr
+z3thy
+z3tic
+zt3rec
+zt3s2
+z3tü
+zu1
+zu3a
+zub4
+3zuc
+zuch2e
+zud4
+zudi4
+zu2el
+zu3e2r1
+zu3f4
+zu2gar
+zu4gent
+zu3g1l
+zu4gla
+zu4glö
+zu2go
+zug1un
+2z1uhr
+zu3hu
+zui2
+zu3k
+zul2
+2z1um.
+zum2a
+2z1umb
+zumen2
+2zumf
+2zumg
+zum2i
+2zuml
+2zumr
+2z1ums
+zum2u
+2zunab
+zun2e
+2z1unem
+zunf4
+zung4
+4zunget
+2z1ungl
+z1uni
+2zu2nio
+2zuniv
+2zunr
+2z1uns
+2zunt
+zuo2
+zup2fi
+zu3pl
+zu3r4a
+2z1urk
+2z1url
+2z1urn
+2z1urs
+2z1urt
+zu3s4
+zusch4
+zu3t2
+zut4r
+zut4u
+zut3z
+zuz2
+2zü4b
+3züc
+zür1c
+2z1v
+zw2
+z1wac
+2zwag
+2zwah
+2zwal
+2zwap
+z1war
+2zwa2s
+2zwäs
+2z1wed
+2zweg
+2zweh
+z2weig
+2zweil
+zweiter6
+2z1wel
+2z1wen
+2z1wer
+2z1wes
+z2wic
+zwi4e
+3zwing
+2zwirt
+z2wisc
+2zwiss
+z2wit
+2z1wo
+z1wör
+z1wur
+2z1wü
+zy1an.
+zy2le
+4z1z
+z3z2a
+zza3b4
+z4z3al
+zz4at
+z2z1id
+zzin1
+zz1ini
+zzi1s4
+zz2ö
+zzug4s
 }
 
+\endinput
+
+% ======================================================================
+% Editor settings
+% ======================================================================
+%
 % Local Variables:
+% mode: tex
 % coding: latin-1
+% fill-column: 72
 % End:
-%
-% End of file `hyphen.den'.
+% vim: set filetype=tex textwidth=72:
index bbcedc572a5d0d1892a6e76beadf2e44b156f75d..e24030e4183220175f5da0825f372f6ad0258b65 100644 (file)
-% This is the groff hyphenation pattern file `hyphen.det' for German with
-% traditional hyphenation rules.
+% This is the groff hyphenation pattern file 'hyphen.det' for German
+% with hyphenation rules for the traditional orthography.
 %
-% It is based on the TeX pattern file `dehypht.tex' as of 03 March 1999.
+% It is based on the file 'dehypht-x-2017-03-31.pat' taken from the
+% 'dehyph-exptl-0.41' package, converted to latin-1 encoding.
 %
-% Here is the copyright message:
+% Below is the original copyright message.
 %
-%   Copyright (C) 1988,1991 Rechenzentrum der Ruhr-Universitaet Bochum
-%                 [german hyphen patterns]
-%   Copyright (C) 1993,1994,1999 Bernd Raichle/DANTE e.V.
-%                 [macros, adaption for TeX 2]
+% -------------------------------------------------------------------------
 %
-%   -----------------------------------------------------------------
-%   IMPORTANT NOTICE:
+% TeX-Trennmuster für die traditionelle deutsche Rechtschreibung
 %
-%   This program can be redistributed and/or modified under the terms
-%   of the LaTeX Project Public License Distributed from CTAN
-%   archives in directory macros/latex/base/lppl.txt; either
-%   version 1 of the License, or any later version.
-%   -----------------------------------------------------------------
+% Copyright (c) 2013-2017
+% Stephan Hennig, Werner Lemberg, Guenter Milde, Sander van Geloven,
+% Georg Pfeiffer, Gisbert W. Selke, Tobias Wendorf
 %
-% Please check the original file for more details.
+% Licensed under the MIT license. Full license text available from
 %
-% It has been made suitable for groff by expanding all macros to real
-% characters in latin-1 encoding.
+%   http://opensource.org/licenses/mit-license.php
 %
+%
+% The word list is available from
+%
+%   http://repo.or.cz/w/wortliste.git?a=commit;h=5fd786fcb1ed48448e058672f1f58d185653d8c6
+%
+% The used patgen parameters are
+%
+%   1 1 | 2 5 | 1 1 1
+%   2 2 | 2 5 | 1 2 1
+%   3 3 | 2 6 | 1 1 1
+%   4 4 | 2 6 | 1 4 1
+%   5 5 | 2 7 | 1 1 1
+%   6 6 | 2 7 | 1 6 1
+%   7 7 | 2 13 | 1 4 1
+%   8 8 | 2 13 | 1 8 1
+
 \patterns{%
-.aa6l .ab3a4s .ab3ei .abi2 .ab3it .ab1l .ab1r .ab3u .ad3o4r .alti6
-.ana3c .an5alg .an1e .ang8s .an1s .ap1p .ar6sc .ar6ta .ar6tei .as2z
-.au2f1 .au2s3 .be5erb .be3na .ber6t5r .bie6r5 .bim6s5t .brot3 .bru6s
-.ch6 .che6f5 .da8c .da2r .dar5in .dar5u .den6ka .de5r6en .des6pe
-.de8spo .de3sz .dia3s4 .dien4 .dy2s1 .ehren5 .eine6 .ei6n5eh .ei8nen
-.ein5sa .en6der .en6d5r .en3k4 .en8ta8 .en8tei .en4t3r .epo1 .er6ban
-.er6b5ei .er6bla .er6d5um .er3ei .er5er .er3in .er3o4b .erwi5s .es1p
-.es8t .ex1a2 .ex3em .fal6sc .fe6st5a .flu4g3 .furch8 .ga6ner .ge3n4a
-.ge5rö .ges6 .halb5 .halbe6 .hal6br .haup4 .hau4t .heima6 .he4r3e
-.her6za .he5x .hin3 .hir8sc .ho4c .hu3sa .hy5o .ibe5 .ima6ge .in1
-.ini6 .is5chi .jagd5 .kal6k5o .ka6ph .ki4e .kop6f3 .kraf6 .kü5ra
-.lab6br .liie6 .lo6s5k .lö4s3t .ma5d .mi2t1 .no6th .no6top
-.obe8ri .ob1l .obs2 .ob6st5e .or3c .ort6s5e .ost3a .oste8r .pe4re
-.pe3ts .ph6 .po8str .rau4m3 .re5an .ro8q .ru5the .rü5be
-.rü8stet .sch8 .se6e .se5n6h .se5ra .si2e .spi6ke .st4 .sy2n
-.tages5 .tan6kl .ta8th .te6e .te8str .to6der .to8nin .to6we .um1
-.umpf4 .un1 .une6 .unge5n .ur1c .ur5en .ve6rin .vora8 .wah6l5 .we8ges
-.wo6r .wor3a .wun4s .zi4e .zuch8 .ände8re .öch8 aa1c aa2gr
-aal5e aa6r5a a5arti aa2s1t aat2s 6aba ab3art 1abdr 6abel aben6dr
-ab5erk ab5err ab5esse 1abf 1abg 1abhä ab1ir 1abko a1bl ab1la
-5ablag a6blaß ab4ler ab1lu a8blä 5a6blö abma5c
-1abn ab1ra ab1re 5a6brec ab1ro ab1s ab8sk abs2z 3abtei ab1ur 1abw
-5abze 5abzu ab1än abäu8 a4ce. a5chal ach5art ach5au a1che
-a8chent ach6er. a6ch5erf a1chi ach1l ach3m ach5n a1cho ach3re a1chu
-ach1w a1chy ach5äf ack1o acks6t ack5sta a1d 8ad. a6d5ac ad3ant
-ad8ar 5addi a8dein ade5o8 adi5en 1adj 1adle ad1op a2dre 3adres adt1
-1adv a6dä a1e2d ae1r a1er. 1aero 8afa a3fal af1an a5far a5fat
-af1au a6fentl a2f1ex af1fr af5rau af1re 1afri af6tent af6tra aft5re
-a6f5um 8afä ag5abe 5a4gent ag8er ages5e 1aggr ag5las ag1lo a1gn
-ag2ne 1agog a6g5und a1ha a1he ah5ein a4h3erh a1hi ahl1a ah1le ah4m3ar
-ahn1a a5ho ahra6 ahr5ab ah1re ah8rei ahren8s ahre4s3 ahr8ti ah1ru a1hu
-ah8ö ai3d2s ai1e aif6 a3inse ai4re. a5isch. ais8e a3ismu ais6n
-aiso6 a1j 1akad a4kade a1ke a1ki 1akko 5akro1 a5lal al5ans 3al8arm
-al8beb al8berw alb5la 3album al1c a1le a6l5e6be a4l3ein a8lel a8lerb
-a8lerh a6lert 5a6l5eth 1algi al4gli al3int al4lab al8lan al4l3ar
-alle3g a1lo a4l5ob al6schm al4the altist5 al4t3re 8a1lu alu5i a6lur
-alu3ta a1lä a6mate 8ame. 5a6meise am6m5ei am6mum am2n ampf3a
-am6schw am2ta a1mu a1mä a3nac a1nad anadi5e an3ako an3alp 3analy
-an3ame an3ara a1nas an5asti a1nat anat5s an8dent ande4s3 an1ec an5eis
-an1e2k 4aner. a6n5erd a8nerf a6n5erke 1anfa 5anfert 1anfä 3angab
-5angebo an3gli ang6lis an2gn 3angri ang5t6 5anhä ani5g ani4ka
-an5i8on an1kl an6kno an4kro 1anl anma5c anmar4 3annah anne4s3 a1no
-5a6n1o2d 5a6n3oma 5a6nord 1anr an1sa 5anschl an4soz an1st 5anstal
-an1s2z 5antenn an1th 5anwä a5ny an4z3ed 5anzeig 5anzieh 3anzug
-an1ä 5anäs a1nö anö8d a1os a1pa 3apfel a2ph1t
-aph5ä6 a1pi 8apl apo1c apo1s a6poste a6poth 1appa ap1pr a1pr
-a5pä a3pü a1ra a4r3af ar3all 3arbei 2arbt ar1c 2a1re ar3ein
-ar2gl 2a1ri ari5es ar8kers ar6les ar4nan ar5o6ch ar1o2d a1rol ar3ony
-a8ror a3ros ar5ox ar6schl 8artei ar6t5ri a1ru a1ry 1arzt arz1w
-ar8zä arä8m arö6 ar5öm ar1ü2 a1sa a6schec
-asch5l asch3m a6schn a3s4hi as1pa asp5l a8steb as5tev 1asth a6stoc
-a1str ast3re 8a1ta ata5c ata3la a6tapf ata5pl a1te a6teli aten5a
-ate5ran 6atf 6atg a1th at3hal 1athl 2a1ti 5atlant 3atlas 8atmus 6atn
-a1to a6t5ops ato6ra a6t5ort. 4a1tr a6t5ru at2t1h at5t6hä 6a1tu
-atz1w a1tä a1tü au1a au6bre auch3a au1e aue4l 5aufent
-3auffü 3aufga 1aufn auf1t 3auftr 1aufw 3auge. au4kle aule8s 6aum
-au8mar aum5p 1ausb 3ausd 1ausf 1ausg au8sin 3auss au4sta 1ausw 1ausz
-aut5eng au1th 1auto auße8 a1v ave5r6a aver6i a1w a6wes a1x
-a2xia a6xio a1ya a1z azi5er. 8aß 1ba 8ba8del ba1la ba1na
-ban6k5r ba5ot bardi6n ba1ro basten6 bau3sp 2b1b bb6le b2bli 2b1c 2b1d
-1be be1a be8at. be1ch 8becht 8becke. be5el be1en bee8rei be5eta bef2
-8beff be1g2 behö8 bei1s 6b5eisen bei3tr b8el bel8o belu3t be3nac
-bend6o be6ners be6nerw be4nor ben4se6 bens5el be1nä be1nü
-be1o2 b8er. be1ra be8rac ber8gab. ber1r be1rü bes8c bes5erh
-bes2p be5tha bet5sc be1un be1ur 8bex be6zwec 2b1f8 bfe6st5e 2b1g2
-bga2s5 bge1 2b1h bhole6 1bi bi1bl b6ie bi1el bi1la bilä5 bi1na
-bi4nok bi5str bi6stu bi5tr bit4t5r b1j 2b1k2 bkü6 bl8 b6la.
-6b1lad 6blag 8blam 1blat b8latt 3blau. b6lav 3ble. b1leb b1led
-8b1leg 8b1leh 8bleid 8bleih 6b3lein blei3s ble4m3o 4blich b4lind
-8bling b2lio 5blit b4litz b1loh 8b1los 1blu 5blum 2blun blut3a blut5sc
-3blä bläs5c 5blö 3blü blü8sc 2b1m 2b1n 1bo
-bo1ch bo5d6s boe5 8boff 8bonk bo1ra b1ort 2b1p2 b1q 1br brail6 brast8
-bre4a b5red 8bref 8b5riem b6riga bro1s b1rup b2ruz 8bröh
-brös5c 8bs b1sa b8sang b2s1ar b1sc bs3erl bs3erz b8sof b1s2p
-bst1h b3stru b5stä b6sun 2b1t b2t1h 1bu bu1ie bul6k b8ure bu6sin
-6b1v 2b1w 1by1 by6te. 8b1z bzi1s 1bä b5ä6s5 1bü
-b6ü5bere büge6 bügel5e bür6sc 1ca cag6 ca5la ca6re
-ca5y c1c 1ce celi4c celich5 ce1ro c8h 2ch. 1chae ch1ah ch3akt cha6mer
-8chanz 5chara 3chari 5chato 6chb 1chef 6chei ch3eil ch3eis 6cherkl
-6chf 4chh 5chiad 5chias 6chins 8chj chl6 5chlor 6ch2m 2chn6 ch8nie
-5cho. 8chob choi8d 6chp ch3ren ch6res ch3rü 2chs 2cht cht5ha
-cht3hi 5chthon ch6tin 6chuh chu4la 6ch3unt chut6t 8chw 1ci ci5tr c2k
-2ck. ck1ei 4ckh ck3l ck3n ck5o8f ck1r 2cks ck5stra ck6s5u c2l 1c8o
-con6ne 8corb cos6t c3q 1c6r 8c1t 1cu 1cy 5cä1 cö5 1da.
-8daas 2dabg 8dabr 6dabt 6dabw 1dac da2gr 6d5alk 8d5amt dan6ce.
-dani5er dan8ker 2danl danla6 6dans 8danzi 6danzu d1ap da2r1a8 2d1arb
-d3arc dar6men 4d3art 8darz 1dat 8datm 2d1auf 2d1aus 2d1b 2d1c 2d1d
-d5de d3d2h ddämme8 1de 2deal de5an de3cha de1e defe6 6deff 2d1ehr
-5d4eic de5isc de8lar del6s5e del6spr de4mag de8mun de8nep dene6r
-8denge. 8dengen de5o6d 2deol de5ram 8derdb der5ein de1ro der1r d8ers
-der5um de4s3am de4s3an de4sau de6sil de4sin de8sor de4spr de2su 8deul
-de5us. 2d1f df2l 2d1g 2d1h 1di dia5c di5ara dice5 di3chr di5ena di1gn
-di1la dil8s di1na 8dind 6dinf 4d3inh 2d1ins di5o6d di3p4t di8sen dis1p
-di5s8per di6s5to dis5tra di8tan di8tin d1j 6dje 2dju 2d1k 2d1l 2d1m
-2d1n6 dni6 dnje6 1do 6d5obe do6berf 6d5ony do3ran 6dord 2d1org dor4t3h
-do6ste 6doth dott8e 2d1p d5q dr4 1drah 8drak d5rand 6dre. 4drech
-d6reck 4d3reg 8d3reic d5reife 8drem 8d1ren 2drer 8dres. 6d5rh 1dria
-d1ric 8drind droi6 dro5x 1dru 8drut drös5c 1drü drü5b
-drü8sc 2ds d1sa d6san dsat6 d1sc 5d6scha. 5dschik dse8e d8serg
-8dsl d1sp d4spak ds2po d8spä d1st d1sü 2dt d1ta d1te d1ti
-d1to dt1s6 d1tu d5tä 1du du5als du1b6 du1e duf4t3r 4d3uh du5ie
-8duml 8dumw 2d1und du8ni 6d5unt dur2c durch3 6durl 6dursa 8durt du1s
-du8schr 2d1v 2d1w dwa8l 2d1z 1dä 6däh 8dänd dä6r
-dö8bl d5öl dör6fl dö8sc d5ö4st dös3te
-1dü ea4ben e1ac e1ah e1akt e1al. e5alf e1alg e5a8lin e1alk e1all
-e5alp e1alt e5alw e1am e1and ea6nim e1ar. e5arf e1ark e5arm e3art
-e5at. e6ate e6a5t6l e8ats e5att e6au. e1aus e1b e6b5am ebens5e
-eb4lie eb4ser eb4s3in e1che e8cherz e1chi ech3m 8ech3n ech1r ech8send
-ech4su e1chu eck5an e5cl e1d ee5a ee3e ee5g e1ei ee5isc eei4s3t
-ee6lend e1ell ee5lö e1erd ee3r4e ee8reng eere6s5 ee5rä
-ee6tat e1ex e1f e6fau e8fe8b 3effek ef3rom ege6ra eglo6si 1egy e1ha
-e6h5ach eh5ans e6hap eh5auf e1he e1hi ehl3a eh1le ehl5ein eh1mu ehn5ec
-e1ho ehr1a eh1re ehre6n eh1ri eh1ru ehr5um e1hu eh1w e1hy e1hä
-e1hö e3hüt ei1a eia6s ei6bar eich3a eich5r ei4dar ei6d5ei
-ei8derf ei3d4sc ei1e 8eifen 3eifri 1eign eil1d ei6mab ei8mag ein1a4
-ei8nat ei8nerh ei8ness ei6nete ein1g e8ini ein1k ei6n5od ei8nok ei4nor
-e3insä ei1o e1irr ei5ru ei8sab ei5schn ei6s5ent ei8sol ei4t3al
-eit3ar eit1h ei6thi ei8tho eit8samt ei6t5um e1j 1ekd e1ke e1ki e1k2l
-e1kn ekni4 e1la e2l1al 6elan e6lanf e8lanl e6l5ans el3arb el3arm
-e6l3art 5e6lasti e6lauge elbst5a e1le 6elef ele6h e6l5ehe e8leif
-e6l5einh 1elek e8lel 3eleme e6lemen e6lente el5epi e4l3err e6l5ersc
-elf2l elg2 e6l5ins ell8er 4e1lo e4l3ofe el8soh el8tent 5eltern e1lu
-elut2 e1lä e1lü em8dei em8meis 4emo emo5s 1emp1f 1empt 1emto
-e1mu emurk4 emurks5 e1mä en5a6ben en5achs en5ack e1nad en5af
-en5all en3alt en1am en3an. en3ant en3anz en1a6p en1ar en1a6s 6e1nat
-en3auf en3aus en2ce enda6l end5erf end5erg en8dess 4ene. en5eck
-e8neff e6n5ehr e6n5eim en3eis 6enem. 6enen e4nent 4ener. e8nerd
-e6n3erf e4nerg 5energi e6n5erla en5ers e6nerst en5erw 6enes e6n5ess
-e2nex en3glo 2eni enni6s5 ennos4 enns8 e1no e6nober eno8f en5opf
-e4n3ord en8sers ens8kl en1sp ens6por en5t6ag enta5go en8terbu en6tid
-3entla ent5ric 5entwic 5entwu 1entz enu5i e3ny en8zan en1öf
-e1nös e1nüg eo1c e5o6fe e5okk e1on. e3onf e5onk e5onl e5onr
-e5opf e5ops e5or. e1ord e1org eo5r6h eo1t e1pa e8pee e6p5e6g ep5ent
-e1p2f e1pi 5epid e6pidem e1pl 5epos e6pos. ep4p3a e1pr e1pä e1q
-e1ra. er5aal 8eraba e5rabel er5a6ben e5rabi er3abs er3ach era5e
-era5k6l er3all er3amt e3rand e3rane er3ans e5ranz. e1rap er3arc
-e3rari er3a6si e1rat erat3s er3auf e3raum 3erbse er1c e1re 4e5re.
-er3eck er5egg er5e2h 2erei e3rei. e8reine er5einr 6eren. e4r3enm
-4erer. e6r5erm er5ero er5erst e4r3erz er3ess 5erfül er8gan.
-5ergebn er2g5h 5ergänz 5erhöhu 2e1ri eri5ak e6r5iat e4r3ind
-e6r5i6n5i6 er5ins e6r5int er5itio er1kl 3erklä 5erlös.
-ermen6s er6nab 3ernst 6e1ro. e1rod er1o2f e1rog 6e3roi ero8ide e3rol
-e1rom e1ron e3rop8 e2r1or e1ros e1rot er5ox ersch4 5erstat er6t5ein
-er2t1h er5t6her 2e1ru eruf4s3 e4r3uhr er3ums e5rus 5erwerb e1ry er5zwa
-er3zwu erä8m er5äs erö8 e3rös. e6r1ü2b e1sa
-esa8b e8sap e6s5a6v e1sc esch4l ese1a es5ebe eserve5 e8sh es5ill
-es3int es4kop e2sl eso8b e1sp espei6s5 es2po es2pu 5essenz e6stabs
-e6staf e6st5ak est3ar e8stob e1str est5res es3ur e2sz e1sü e1ta
-et8ag etari5e eta8ta e1te eten6te et5hal e5thel e1ti 1etn e1to e1tr
-et3rec e8tscha et8se et6tei et2th et2t1r e1tu etu1s et8zent et8zw
-e1tä e1tö e1tü eu1a2 eu1e eue8rei eu5fe euin5 euk2
-e1um. eu6nio e5unter eu1o6 eu5p 3europ eu1sp eu5str eu8zo e1v eval6s
-eve5r6en ever4i e1w e2wig ex1or 1exp 1extr ey3er. e1z e1ä2
-e5ö8 e1ü e8ßes fa6ch5i fade8 fa6del fa5el.
-fal6lo falt8e fa1na fan4gr 6fanl 6fap far6ba far4bl far6r5a 2f1art
-fa1sc fau8str fa3y 2f1b2 6f1c 2f1d 1fe 2f1eck fe6dr feh6lei f6eim
-8feins f5eis fel5en 8feltern 8femp fe5rant 4ferd. ferri8 fe8stof
-fe6str fe6stum fe8tag fet6ta fex1 2ff f1fa f6f5arm f5fe ffe5in ffe6la
-ffe8ler ff1f f1fla ff3lei ff4lie ff8sa ff6s5ta 2f1g2 fgewen6 4f1h 1fi
-fid4 fi3ds fieb4 fi1la fi8lei fil4m5a f8in. fi1na 8finf fi8scho fi6u
-6f1j 2f1k2 f8lanz fl8e 4f3lein 8flib 4fling f2lix 6f3lon 5flop 1flor
-5f8läc 3flöt 2f1m 2f1n 1fo foh1 f2on fo6na 2f1op fo5ra
-for8mei for8str for8th for6t5r fo5ru 6f5otte 2f1p8 f1q fr6 f5ram
-1f8ran f8raß f8re. frei1 5frei. f3reic f3rest f1rib
-8f1ric 6frig 1fris fro8na fräs5t 2fs f1sc f2s1er f5str
-fs3tät 2ft f1tak f1te ft5e6h ftere6 ft1h f1ti f5to f1tr ft5rad
-ft1sc ft2so f1tu ftwi3d4 ft1z 1fu 6f5ums 6funf fun4ka fu8ßend
-6f1v 2f1w 2f1z 1fä fä1c 8färm 6fäug
-fä8ß föde3 8föf 3för 1fü
-fün4f3u 1ga ga6bl 6gabw 8gabz g3a4der ga8ho ga5isc 4gak ga1la
-6g5amt ga1na gan5erb gan6g5a ga5nj 6ganl 8gansc 6garb 2g1arc 2g1arm
-ga5ro 6g3arti ga8sa ga8sc ga6stre 2g1atm 6g5auf gau5fr g5aus 2g1b g5c
-6gd g1da 1ge ge1a2 ge6an ge8at. ge1e2 ge6es gef2 8geff ge1g2l ge1im
-4g3eise geist5r gel8bra gelt8s ge5lö ge8nin gen3k 6g5entf
-ge3nä ge1or ge1ra ge6rab ger8au 8gerhö ger8ins ge1ro 6g5erz.
-ge1rä ge1rü ge1s ges2p ge5unt 4g3ex3 2g1f8 2g1g g1ha 6g1hei
-5ghel. g5henn 6g1hi g1ho 1ghr g1hö 1gi gi5la gi8me. gi1na
-4g3ins gi3str g1j 2g1k 8gl. 1glad g5lag glan4z3 1glas 6glass 5glaub
-g3lauf 1gle. g5leb 3gleic g3lein 5gleis 1glem 2gler 8g3leu gli8a
-g2lie 3glied 1g2lik 1g2lim g6lio 1gloa 5glom 1glon 1glop g1los g4loss
-g5luf 1g2ly 1glü 2g1m gn8 6gn. 1gna 8gnach 2gnah g1nas g8neu
-g2nie g3nis 1gno 8gnot 1go goe1 8gof 2gog 5gogr 6g5oh goni5e 6gonist
-go1ra 8gord 2g1p2 g1q 1gr4 g5rahm gra8m gra4s3t 6g1rec gre6ge 4g3reic
-g5reit 8grenn gri4e g5riem 5grif 2grig g5ring 6groh 2grot gro6ß
-4grut 2gs gs1ab g5sah gs1ak gs1an gs8and gs1ar gs1au g1sc
-gs1ef g5seil gs5ein g2s1er gs1in g2s1o gso2r gs1pr g2s1u 2g1t g3te
-g2t1h 1gu gu5as gu2e 2gue. 6gued 4g3uh 8gums 6g5unt gu1s gut3h gu2tu
-4g1v 2g1w gy1n g1z 1gä 8gä8m 6gärm 1gö 1gü
-6güb 1haa hab8r ha8del hade4n 8hae ha5el. haf6tr 2hal. ha1la
-hal4b5a 6hale 8han. ha1na han6dr han6ge. 2hani h5anth 6hanz 6harb
-h3arbe h3arme ha5ro ha2t1h h1atm hau6san ha8ß h1b2 h1c h1d
-he2bl he3cho h3echt he5d6s 5heft h5e6he. hei8ds h1eif 2hein he3ism
-he5ist. heit8s3 hek6ta hel8lau 8helt he6mer 1hemm 6h1emp hen5end
-hen5klo hen6tri he2nu 8heo he8q her3ab he5rak her3an 4herap her3au
-h3erbi he1ro he8ro8b he4r3um her6z5er he4spe he1st heta6 het5am he5th
-heu3sc he1xa hey5e h1f2 h1g hgol8 h1h h1iat hie6r5i hi5kt hil1a2
-hil4fr hi5nak hin4ta hi2nu hi5ob hirn5e hir6ner hi1sp hi1th hi5tr
-5hitz h1j h6jo h1k2 hlabb4 hla4ga hla6gr h5lai hl8am h1las h1laß
-hl1c h1led h3lein h5ler. h2lif h2lim h8linf hl5int h2lip
-h2lit h4lor h3lose h1läs hme5e h2nee h2nei hn3eig h2nel hne8n
-hne4p3f hn8erz h6netz h2nip h2nit h1nol hn5sp h2nuc h2nud h2nul hoch1
-1hoh hoh8lei 2hoi ho4l3ar 1holz h2on ho1ra 6horg 5horn. ho3sl hos1p
-ho4spi h1p hpi6 h1q 6hr h1rai h8rank h5raum hr1c hrcre8 h1red h3reg
-h8rei. h4r3erb h8rert hrg2 h1ric hr5ins h2rom hr6t5erl hr2t1h hr6t5ra
-hr8tri h6rum hr1z hs3ach h6s5amt h1sc h6s5ec h6s5erl hs8erle h4sob
-h1sp h8spaß h8spel hs6po h4spun h1str h4s3tum hs3und
-h1sü h5ta. h5tab ht3ac ht1ak ht3ang h5tanz ht1ar ht1at h5taub
-h1te h2t1ec ht3eff ht3ehe h4t3eif h8teim h4t3ein ht3eis h6temp h8tentf
-hte8ren h6terfü h8tergr h4t3erh h6t5ersc h8terst h8tese h8tess
-h2t1eu h4t3ex ht1he ht5hu h1ti ht5rak hts3ah ht1sc ht6sex ht8sk ht8so
-h1tu htz8 h5tüm hub5l hu6b5r huh1l h5uhr. huld5a6 hu8lent
-hu8lä h5up. h1v h5weib h3weis h1z hä8kl häl8s
-häma8tu8 hä8sche. hät1s häu4s3c 2hö.
-2höe 8höi hö6s hös5c hühne6 hül4s3t
-hütte8re i5adn i1af i5ak. i1al. i1al1a i1alb i1ald i5alei i1alf
-i1alg i3alh i1alk i1all i1alp i1alr i1als i1alt i1alv i5alw i3alz
-i1an. ia5na i3and ian8e ia8ne8b i1ang i3ank i5ann i1ant i1anz i6apo
-i1ar. ia6rab i5arr i1as. i1asm i1ass i5ast. i1at. i5ats i1au i5azz
-i6b5eig i6b5eis ib2le i4blis i6brig i6b5unt i6büb i1che ich5ei
-i6cherb i1chi ich5ins ich1l ich3m ich1n i1cho icht5an icht3r i1chu
-ich1w ick6s5te ic5l i1d id3arm 3ideal ide8na 3ideol ide5rö i6diot
-id5rec id1t ie1a ie6b5ar iebe4s3 ie2bl ieb1r ie8bra ie4bre ie8bä
-ie2dr ie1e8 ie6f5ad ief5f ie2f1l ie4fro ief1t i1ei ie4l3ec ie8lei
-ie4lek i3ell i1en. i1end ien6e i3enf i5enn ien6ne. i1enp i1enr
-i5ensa ien8stal i5env i1enz ie5o ier3a4b ie4rap i2ere ie4rec ie6r5ein
-ie6r5eis ier8er i3ern. ie8rum ie8rund ie6s5che ie6tau ie8tert ie5the
-ie6t5ri i1ett ie5un iex5 2if i1fa if5ang i6fau if1fr if5lac i5f6lie
-i1fre ift5a if6t5r ig3art 2ige i8gess ig5he i5gla ig2ni i5go ig3rot
-ig3s2p i1ha i8ham i8hans i1he i1hi ih1n ih1r i1hu i8hum ih1w 8i1i ii2s
-ii2t i1j i1k i6kak i8kerz i6kes ik4ler i6k5unt 2il i5lac i1lag il3ans
-i5las i1lau il6auf i1le ile8h i8lel il2fl il3ipp il6l5enn i1lo ilt8e
-i1lu i1lä i8mart imb2 i8mele i8mid imme6l5a i1mu i1mä
-i5mö ina5he i1nat in1au inau8s 8ind. in4d3an 5index ind2r 3indus
-i5nec i2n1ei i8nerw 3infek 1info 5ingeni ing5s6o 5inhab ini5er. 5inj
-in8kät in8nan i1no inoi8d in3o4ku in5sau in1sp 5inspe 5instit
-5instru ins4ze 5intere 5interv in3the in5t2r i5ny inä2 i1när
-in1äs inö8 in5öd i1nös 2io io1a8 io1c iode4 io2di
-ioi8 i1ol. i1om. i1on. i5onb ion2s1 i1ont i5ops i5o8pt i1or.
-i3oral io3rat i5orc i1os. i1ot. i1o8x 2ip i1pa i1pi i1p2l i1pr i1q
-i1ra ir6bl i1re i1ri ir8me8d ir2m1o2 ir8nak i1ro ir5rho ir6schl
-ir6sch5r i5rus i5ry i5rä i1sa i8samt i6sar i2s1au i8scheh i8schei
-isch5m isch3r ischä8 is8ele ise3ra i4s3erh is3err isi6de i8sind
-is4kop ison5e is6por i8s5tum i5sty i5sö i1ta it5ab. i2t1a2m
-i8tax i1te i8tersc i1thi i1tho i5thr it8hä i1ti i8ti8d iti6kl
-itmen4 i1to i8tof it3ran it3rau i1tri itri5o it1sc it2se it5spa it8tru
-i1tu it6z5erg it6z1w i1tä itä6r5e ität2 itäts5
-i1tü i1u iu6r 2i1v i6vad iva8tin i8vei i6v5ene i8verh i2vob i8vur
-i1w iwi2 i5xa i1xe i1z ize8n i8zir i6z5w iä8m i1ä6r
-i5ät. i5äv i1ö8 iü8 i6ß5ers ja5la
-je2t3r 6jm 5jo jo5as jo1ra jou6l ju5cha jugen4 jugend5 jung5s6 ju1s
-3jä 1ka 8kachs 8kakz ka1la kal5d kam5t ka1na 2kanl 8kapf ka6pl
-ka5r6a 6k3arbe ka1ro kar6p5f 4k3arti 8karz ka1rä kasi5e ka6teb
-kat8ta kauf6s kau3t2 2k1b 2k1c 4k1d kehr6s kehrs5a 8keic 2k1eig 6k5ein
-6k5eis ke6lar ke8leis ke8lo 8kemp k5ente. k3entf 8k5ents 6kentz ke1ra
-k5erlau 2k1f8 2k1g 2k1h ki5fl 8kik king6s5 6kinh ki5os ki5sp ki5th
-8ki8ö 2k1k2 kl8 1kla 8klac k5lager kle4br k3leib 3kleid kle5isc
-4k3leit k3lek 6k5ler. 5klet 2klic 8klig k2lim k2lin 5klip 5klop k3lor
-1klä 2k1m kmani5e kn8 6kner k2ni knä8 1k2o ko1a2 ko6de.
-ko1i koi8t ko6min ko1op ko1or ko6pht ko3ra kor6d5er ko5ru ko5t6sc k3ou
-3kow 6k5ox 2k1p2 k1q 1kr8 4k3rad 2k1rec 4k3reic kre5ie 2krib 6krig
-2krip 6kroba 2ks k1sa k6sab ksal8s k8samt k6san k1sc k2s1ex k5spat
-k5spe k8spil ks6por k1spr kst8 k2s1uf 2k1t kta8l kt5a6re k8tein kte8re
-k2t1h k8tinf kt3rec kt1s 1ku ku1ch kuck8 k3uhr ku5ie kum2s1 kunfts5
-kun2s kunst3 ku8rau ku4ro kurz1 ku1st 4kusti ku1ta ku8ß
-6k1v 2k1w ky5n 2k1z 1kä kä4m 4k3ämi käse5 1kö
-kö1c kö1s 1kü kü1c kür6sc kü1s 1la.
-8labf 8labh lab2r 2l1abs lach3r la8dr 5ladu 8ladv 6laff laf5t la2gn
-5laken 8lamb la6mer 5lampe. 2l1amt la1na 1land lan4d3a lan4d3r lan4gr
-8lanme 6lann 8lanw 6lanä 8lappa lap8pl lap6pr l8ar. la5ra lar4af
-la8rag la8ran la6r5a6s l3arbe la8rei 6larm. la8sa la1sc la8sta lat8i
-6l5atm 4lauss 4lauto 1law 2lb l8bab l8bauf l8bede l4b3ins l5blo
-lbst5an lbst3e 8lc l1che l8chert l1chi lch3m l5cho lch5w 6ld l4d3ei
-ld1re l6düb le2bl le8bre lecht6s5 led2r 6leff le4gas 1lehr lei6br
-le8inf 8leinn 5leistu 4lektr le6l5ers lemo2 8lemp l8en. 8lends
-6lendun le8nend len8erw 6l5ents 4l3entw 4lentz 8lenzy 8leoz 6lepi
-le6pip 8lepo 1ler l6er. 8lerbs 6l5erde le8reis le8rend le4r3er 4l3erg
-l8ergr 6lerkl 6l5erzie 8lerö 8lesel lesi5e le3sko le3tha let1s
-5leuc 4leuro leu4s3t le5xe 6lexp l1f 2l1g lgend8 l8gh lglie3 lglied6
-6l1h 1li li1ar li1as 2lick li8dr li1en lien6n li8ers li8ert 2ließ
-3lig li8ga8b li1g6n li1l8a 8limb li1na 4l3indu lings5
-4l3inh 6linj link4s3 4linkt 2lint 8linv lion5s6t 4lipp 5lipt 4lisam
-livi5e 6l1j 6l1k l8keim l8kj lk2l lko8f lkor8 lk2sa lk2se 6ll l1la
-ll3a4be l8labt ll8anl ll1b ll1c ll1d6 l1le l4l3eim l6l5eise ller3a
-l4leti l5lip l1lo ll3ort ll5ov ll6spr llte8 l1lu ll3urg l1lä
-l5lü l6lüb 2l1m l6m5o6d 6ln l1na l1no 8lobl lo6br 3loch.
-l5o4fen 5loge. 5lohn 4l3ohr 1lok l2on 4l3o4per lo1ra 2l1ord 6lorg
-4lort lo1ru 1los. lo8sei 3losig lo6ve lowi5 6l1p lp2f l8pho l8pn
-lp4s3te l2pt l1q 8l1r 2ls l1sa l6sarm l1sc l8sec l6s5erg l4s3ers l8sh
-l5s6la l1sp ls4por ls2pu l1str l8suni l1sü 2l1t lt5amp l4t3ein
-l5ten l6t5eng l6t5erp l4t3hei lt3her l2t1ho l6t5i6b lti1l l8trö
-lt1sc lt6ser lt4s3o lt5ums lu8br lu2dr lu1en8 8lu8fe luft3a luf8tr
-lu6g5r 2luh l1uhr lu5it 5luk 2l1umf 2l1umw 1lun 6l5u6nio 4l3unte lu5ol
-4lurg 6lurs l3urt lu4sto lu3str lu6st5re lu8su lu6tal lu6t5e6g lu8terg
-lu3the lu6t5or lu2t1r lu6ß5 l1v lve5r6u 2l1w 1ly lya6
-6lymp ly1no l8zess l8zo8f l3zwei lz5wu 3länd lä5on
-lä6sc lät1s 5läuf 2läug läu6s5c lä5v
-l1öl 1lös lö1ß6t 6l1übe 1ma
-8mabg ma5chan mad2 ma5el 4magg mag8n ma1la ma8lau mal5d 8malde mali5e
-malu8 ma8lut 2m1amp 3man mand2 man3ds 8mangr mani5o 8m5anst 6mappa
-4m3arbe mar8kr ma1r4o mar8schm 3mas ma1sc ma1tö 4m5auf ma5yo 2m1b
-mb6r 2m1c 2m1d md6sä 1me me1ch me5isc 5meld mel8sa 8memp me5nal
-men4dr men8schl men8schw 8mentsp me1ra mer4gl me1ro 3mes me6s5ei me1th
-me8ß 2m1f6 2m1g 2m1h 1mi mi1a mi6ale mi1la 2m1imm mi1na
-mi5nü mi4s3an mit1h mi5t6ra 3mitt mitta8 mi6ß5 6mj
-2m1k8 2m1l 2m1m m6mad m6m5ak m8menth m8mentw mme6ra m2mn mm5sp mm5ums
-mmut5s m8män m1n8 m5ni 1mo mo5ar mo4dr 8mof mo8gal mo4kla mol5d
-m2on mon8do mo4n3od mont8a 6m5ony mopa6 mo1ra mor8d5a mo1sc mo1sp 5mot
-moy5 2mp m1pa mpfa6 mpf3l mphe6 m1pi mpin6 m1pl mp2li m2plu mpo8ste
-m1pr mprä5 mp8th mput6 mpu5ts m1pö 8m1q 2m1r 2ms ms5au m1sc
-msch4l ms6po m3spri m1str 2m1t mt1ar m8tein m2t1h mt6se mt8sä
-mu5e 6m5uh mumi1 1mun mun6dr muse5e mu1ta 2m1v mvol2 mvoll3 2m1w 1my
-2m1z mä6kl 1män mä1s mä5tr mäu4s3c 3mäß
-möb2 6möl 1mü 5mün 3müt 1na.
-n5ab. 8nabn n1abs n1abz na6bä na2c nach3e 3nacht 1nae na5el
-n1afr 1nag 1n2ah na8ha na8ho 1nai 6nair na4kol n1akt nal1a 8naly 1nama
-na4mer na1mn n1amp 8n1amt 5nanc nan6ce n1and n6and. 2n1ang 1nani
-1nann n1ans 8nanw 5napf. 1n2ar. na2ra 2n1arc n8ard 1nari n8ark
-6n1arm 5n6ars 2n1art n8arv 6natm nat6s5e 1naue 4nauf n3aug 5naui n5auk
-na5um 6nausb 6nauto 1nav 2nax 3naz 1naß n1b2 nbau5s n1c
-nche5e nch5m 2n1d nda8d n2d1ak nd5ans n2d1ei nde8lac ndel6sa n8derhi
-nde4se nde8stal n2dj ndnis5 n6d5or6t nd3rec nd3rot nd8samt nd6sau
-ndt1h n8dumd 1ne ne5as ne2bl 6n5ebn 2nec 5neei ne5en ne1g4l 2negy
-4n1ein 8neis 4n3e4lem 8nemb 2n1emp nen1a 6n5energ nen3k 8nentb
-4n3en3th 8nentl 8n5entn 8n5ents ne1ra ne5r8al ne8ras 8nerbi 6n5erde.
-nere5i6d nerfor6 6n5erhö 8nerlö 2n1err n8ers. 6n5ertra
-2n1erz nesi3e net1h neu4ra neu5sc 8neuß n1f nf5f nf2l
-nflei8 nf5lin nft8st n8g5ac ng5d ng8en nge8ram ngg2 ng1h n6glic ng3rip
-ng8ru ng2se4 ng2si n2g1um n1gy n8gäl n1h nhe6r5e 1ni ni1bl
-ni5chä ni8dee n6ie ni1en nie6s5te niet5h ni8etn 4n3i6gel n6ik
-ni1la 2n1imp ni5na 2n1ind 8ninf 6n5inh ni8nit 6n5inn 2n1ins 4n1int
-n6is ni3str ni1th ni1tr n1j n6ji n8kad nk5ans n1ke n8kerla n1ki nk5inh
-n5klö n1k2n n8k5not nk3rot n8krü nk5spo nk6t5r n8kuh
-n6küb n5l6 nli4mi n1m nmen4s n1na n8nerg nni5o n1no nn4t3ak nnt1h
-nnu1e n1ny n1nä n1nö n1nü no5a no4b3la 4n3obs 2nobt
-noche8 no6die no4dis no8ia no5isc 6n5o6leu no4mal noni6er 2n1onk n1ony
-4n3o4per 6nopf 6nopti no3ra no4ram nor6da 4n1org 2n1ort n6os no1st
-8nost. no8tan no8ter noty6pe 6n5ox n1p2 n1q n1r nrös3 6ns n1sac
-ns3ang n1sc n8self n8s5erf n8serg n6serk ns5erw n8sint n1s2pe n1spr
-n6s5tat. n5s6te. n6stob n1str n1ta n4t3a4go nt5anh nt3ark nt3art
-n1te nt3eis nte5n6ar nte8nei nter3a nte6rei nt1ha nt6har n3ther nt5hie
-n3thus n1ti nti1c n8tinh nti1t ntlo6b ntmen8 n1to nt3o4ti n1tr ntra5f
-ntra5ut nt8rea nt3rec nt8rep n4t3rin nt8rop n4t3rot n4trü nt1s
-nts6an nt2sk n1tu nt1z n1tä n1tö n8töl n1tü 1nu
-nu1a nu5el nu5en 4n1uhr nu5ie 8numl 6n5ums 6n5umw 2n1und 6nuni 6n5unr
-2n1unt 2nup 2nu6r n5uri nu3skr nu5ta n1v 8n1w 1nys n1za n6zab n2z1ar
-n6zaus nzi4ga n8zof n6z5unt n1zw n6zwir 1näc 5näe 5näi
-n8äl nä6m nä6re n5ärz 5näus n1öl
-1nöt n5öz 5nü. 6n1ü2b 5nüß
-o5ab. oa2l o8ala o1a2m o1an ob1ac obe4ra o6berh 5o4bers o4beru
-obe6ser 1obj o1bl o2bli ob5sk 3obst. ob8sta obst5re ob5sz o1che
-oche8b o8chec o3chi och1l och3m ocho8f o3chro och3to o3chu och1w o1d
-o2d1ag od2dr ode5i ode6n5e od1tr o5e6b o5e6der. oe8du o1ef o1e2l
-o1e2p o1er. o5e8x o1fa of8fan 1offi of8fin of6f5la o5fla o1fr 8o1g
-og2n o1ha o1he o6h5eis o1hi ohl1a oh1le oh4l3er 5ohm. oh2ni o1ho
-oh1re oh1ru o1hu oh1w o1hy o1hä o5ia o1id. o8idi oi8dr o5ids
-o5isch. oiset6 o1ism o3ist. o5i6tu o1j o1k ok2l ok3lau o8klä
-1okta o1la old5am old5r o1le ole5in ole1r ole3u ol6gl ol2kl olk4s1
-ol8lak ol8lauf. ol6lel ol8less o1lo ol1s ol6sk o1lu oly1e2 5olym
-o2mab om6an o8mau ombe4 o8merz om5sp o1mu o8munt o1mä o1mö
-o1na ona8m on1ax on8ent o6n5erb 8oni oni5er. on1k on6n5a6b o1no ono1c
-o4nokt 1ons onts8 o1nä oo8f 1oog oo2pe oo2sa o1pa 3o4pera o3pfli
-opf3lo opf3r o1pi o1pl o2pli o5p6n op8pa op6pl o1pr o3p4ter 1opti
-o1pä o5pö o1q o1ra. o3rad o8radd 1oram o6rang o5ras o8rauf
-or5cha or4d3a4m or8dei or8deu 1ordn or4dos o1re o5re. ore2h o8r5ein
-ore5isc or6enn or8fla or8fli 1orga 5orgel. or2gl o1ri 5o6rient or8nan
-or8nä o1ro or1r2h or6t5an or8tau or8tere o1rus o1ry o1rä
-or1ü2 o1sa osa3i 6ose o8serk o1sk o6ske o6ski os2kl os2ko os2kr
-osni5e o2s1o2d o3s4per o4stam o6stau o3stra ost3re osu6 o6s5ur o5s6ze
-o1ta ot3auf o6taus o1te o6terw o1th othe5u o2th1r o1ti o1to oto1a
-ot1re o1tri o1tro ot1sc o3tsu ot6t5erg ot2t3h ot2t5r ot8tö o1tu
-ou3e ouf1 ou5f6l o5u6gr ou5ie ou6rar ou1t6a o1v o1wa o1we o6wer. o1wi
-owid6 o1wo o5wu o1xe oy5al. oy1e oy1i o5yo o1z oza2r 1o2zea ozo3is
-oö8 oß5elt oß1t 3paa pa6ce 5pad pag2 1pak
-pa1la pa8na8t pani5el pa4nor pan1s2 1pap pap8s pa8rei par8kr paro8n
-par5o6ti part8e 5partei 3partn pas6sep pa4tha 1pau 6paug pau3sc p1b
-8p5c 4p1d 1pe 4peic pe5isc 2pek pen3k pen8to8 p8er pe1ra pere6 per5ea
-per5eb pe4rem 2perr per8ran 3pers 4persi pe3rü pe4sta pet2s
-p2f1ec p4fei pf1f pf2l 5pflanz pf8leg pf3lei 2pft pf3ta p1g 1ph 2ph.
-2p1haf 6phb 8phd 6p5heit ph5eme 6phg phi6e 8phk 6phn p5holl pht2
-ph3tha 4ph3the phu6 6phz pi1en pi5err pi1la pi1na 5pinse pioni8e 1pis
-pi1s2k pi1th p1k pl8 5pla p2lau 4plei p3lein 2pler 6p5les 2plig p6lik
-6p5ling p2liz plo8min 6p1m p1n 1p2o 8poh 5pol po8lan poly1 po3ny po1ra
-2porn por4t3h po5rö 5poti p1pa p6p5ei ppe6la pp5f p2p1h p1pi pp1l
-ppp6 pp5ren pp1s p5pö pr6 3preis 1pres 2p3rig 5prinz 1prob 1prod
-5prog pro8pt pro6t5a prote5i 8proß prä3l 1präs
-präte4 1prüf p5schl 2pst 1p2sy p1t p8to8d pt1s 5p6ty 1pu
-pu1b2 2puc pu2dr puf8fr 6p5uh pun8s pu8rei pu5s6h pu1ta p1v p3w 5py
-py5l p1z pä6der p5ä6m pä8nu 8pär pät5h
-pät1s qu6 1qui 8rabk ra6bla 3rable ra2br r1abt 6rabz ra4dan ra2dr
-5rafal ra4f3er ra5gla ra2g3n 6raha ral5am 5rald 4ralg ra8lins 2rall
-ral5t 8ramei r3anal r6and ran8der ran4dr 8ranf 6ranga 5rangi ran8gli
-r3angr rans5pa 8ranw r8anz. ra5or 6rapf ra5pl rap6s5er 2r1arb 1rarh
-r1arm ra5ro 2r1art 6r1arz ra8tei ra6t5he 6ratl ra4t3ro r5atta raue4n
-6raus. r5austa rau8tel raut5s ray1 r1b rb5lass r6bler rb4lie rbon6n
-r8brecht rb6s5tä r8ces r1che rch1l rch3m rch3re rch3tr rch1w 8rd
-r1da r8dachs r8dap rda5ro rde5ins rdio5 r8dir rd3ost r1dr r8drau 1re.
-re1ak 3reakt re3als re6am. re1as 4reben re6bl rech5a r8edi re3er
-8reff 3refl 2reh 5reha r4ei. reich6s5 8reier 6reign re5imp 4r3eina
-6r3einb 6reing 6r5einn 6reinr 4r3eins r3eint reli3e 8r5elt 6rempf
-2remt ren5a6b ren8gl r3enni 1reno 5rente 4r3enth 8rentl 4r3entw 8rentz
-ren4zw re1on requi5 1rer rer4bl 6rerbs 4r3erd 8rerhö 8rerkl
-4r3erla 8rerlö 4r3erns 6r5ernä rer5o 6r5erreg r5ertr r5erwec
-r5erö re2sa re8schm 2ress re5u8ni 6rewo 2r1ex r1f r8ferd rf4lie
-8r1g r8gah rge4bl rge5na rgest4 rg6ne r2gni2 r8gob r4g3ret rg8sel r1h8
-r2hy 5rhyt ri1ar ri5cha rid2g r2ie rieg4s5 ri8ei ri1el ri6ele ri1en
-ri3er. ri5ers. ri6fan ri8fer ri8fr 1r2ig ri8kn ri5la rimä8
-ri1na r8inde rin4ga rin6gr 1rinn 6rinner rino1 r8insp 4rinst
-ri1nä ri5o6ch ri1o2d ri3o6st 2r1ir r2is ri3sko ri8spr ri8stü
-ri5sv r2it 6r5i6tal ri5tr ri6ve. 8r1j 6rk r1ke rkehrs5 r1ki r3klin
-r1k2n rk3str rk4t3an rk6to r6kuh rkä4s3t r1l r5li rline5a 6r1m
-r6manl rma4p r4m3aph r8minf r8mob rm5sa 2rn r1na rna8be r5ne rn2ei
-r6neif r6nex r6nh rn1k r1no r6n5oc rn1sp r1nä r1nü ro6bern
-6robs ro1ch 3rock. ro5de ro1e 4rofe ro8hert 1rohr ro5id ro1in ro5isc
-6rolym r2on 6roog ro6phan r3ort ro1s2p ro5s6w ro4tau ro1tr ro6ts 5rout
-r1p rpe8re rp2f r2ps r2pt r1q 2rr r1ra r1re rrer6 rr6hos r5rhö
-r1ri r1ro rro8f rr8or rror5a r1ru r3ry r1rä r1rö r1rü
-2r1s r6sab r4sanf rse6e rse5na r2sh r6ska r6ski rs2kl r8sko r2sl rs2p
-r6stauf r8sterw r8stran rswi3d4 r2sz 2r1t rt3art r8taut r5tei rt5eige
-r8tepe r4t3erh r8terla r4t3hei r5t6hu r4t3int rt5reif rt1sc rt6ser
-rt6s5o rt6s5u rt5und r8turt rube6 ru1en 1r4uf ruf4st ru1ie 2r1umg
-2r1uml 2rums run8der run4d5r 6rundz 6runf 8runs 2r1unt 2r1ur r6us
-ru6sta ru3str ru6tr 1ruts r1v rven1 rvi2c r1w r1x r1za rz5ac r6z5al
-r8z1ar r8zerd r6z5erf rz8erh rz4t3h r8zum rä4ste räu8sc
-r1öf 5röhr rö5le 3röll 5römis r1ör
-rö2sc 3rümp 1sa. 1saa s3a4ben sa2bl 2s1abs 6s1abt 6sabw
-3sack. 6s3a4der 1saf sa1fa 4s1aff sa5fr 1sag 1sai sa1i2k1 4s1akt 1sal
-sa1la 4s3alpi 6salter salz3a 1sam s5anb san2c 1sand s5angeh 6sanl
-2s1ans 6s3antr 8s1anw s1ap s6aph 8sapo sap5p6 s8ar. 2s1arb 3sarg
-s1arm sa5ro 2s1art 6s1arz 1sas 1sat sat8a 2s1atl sa8tom 3s8aue s5auff
-sau5i s6aur 2s1aus 5s6ause 2s1b2 2sca s4ce 8sch. 3scha. 5schade
-3schaf 3schal sch5ame 8schanc 8schb 1sche 6schef 8schex 2schf 2schg
-2schh 1schi 2schk 5schlag 5schlu 6schmäß
-6schnaß 1scho 6schord 6schp 3schri 8schric 8schrig
-8schrou 6schs 2scht sch3ta sch3tr 1schu 8schunt 6schv 2schz 5schö
-5schü 2sco scre6 6scu 2s1d 1se se5an se1ap se6ben se5ec see5i6g
-se3erl 8seff se6han se8hi se8hö 6s5eid. 2s1eig s8eil 5sein.
-sei5n6e 6s5einh 3s8eit 3sel. se4lar selb4 6s3e4lem se8lerl 2s1emp
-sen3ac se5nec 6s5ents 4sentz s8er. se8reim ser5inn 8sermä
-8s5erzi 6seröf se1um 8sexa 6sexp 2s1f2 sfal8ler 2s3g2 sge5b2 s1h
-s8hew 5s6hip 5s4hop 1si 2siat si1b sicht6s 6s5i6dee siege6s5 si1en
-si5err si1f2 si1g2n si6g5r si8kau sik1i si4kin si2kl si8kü si1la
-sil6br si1na 2s1inf sin5gh 2s1inh sinne6s5 2s1ins si5ru si5str 4s1j
-s1k2 6sk. 2skau skel6c skelch5 s6kele 1s2ki. 3s4kin. s6kiz s8kj
-6skn 2skow 3skrib 3skrip 2sku 8skü s1l s8lal slei3t s4low 2s1m
-s1n 6sna 6snot 1so so1ch 2s1odo so4dor 6s5o4fen solo3 s2on so5of 4sope
-so1ra 2s1ord 4sorga sou5c so3un 4s3ox sp2 8spaa 5spal 1span 2spap
-s2pec s4peis 1spek s6perg 4spers s6pes 2s1pf 8sphi 1s2phä 1spi
-spi4e 6s5pig 6spinse 2spis 2spla 2spol 5s6pom 6s5pos 6spoti 1spra
-3s8prec 6spreis 5spring 6sprob 1spru s2pul 1s2pur 6spy 5spän
-1spü s1q 2s1r 2s1s2 sse8nu ssini6s ssoi6r 2st. 1sta 4stafe 2stag
-sta3la 6stale 4stalg 8stalk 8stamt 6st5anf 4stans 6stanw 6starb sta4te
-6staus 2stb 6stc 6std 1ste 4steil 3s2tel st3elb 8stemb 6steppi 8stese
-8stesse 6stf 2stg 2sth st1ha st3hei s8t1hi st1ho st5hu 1sti sti4el
-4stigm sti3na 6stind 4stinf sti8r 2stk 2stl 2stm 1sto 6stoll. 4st3ope
-6stopf. 6stord 6stp 5stra. 4strai 3s4tral 6s5traum 3straß
-3strec 6s3tref 8streib 5streif 6streno 6stres 6strev
-5s6tria 6strig 5strik 8strisi 3s4troa s8troma st5rose 4struf 3strum
-6sträg 2st1s6 2stt 1stu stu5a 4stuc 2stue 8stun. 2stv 2stw s2tyl
-6stz 1stä 8stäg 1stö 1stü 8stüch 4stür.
-1su su2b1 3suc su1e su2fe su8mar 6sumfa 8sumk 2s1unt sup1p2 6s5u6ran
-6surte 2s1v 2s1w 1sy 8syl. sy5la syn1 sy2na syne4 s1z s4zend 5s6zene.
-8szu 1sä 6s5änd 6säugi 6säuß
-5söm 2s1ü2b 1süc sü8di 1sün 5süß
-taats3 4tab. taba6k ta8ban tab2l ta6bre 4tabs t3absc
-8tabz 6t3acht ta6der 6tadr tad6s tad2t 1tafe4 1tag ta6ga6 ta8gei
-tage4s tag6s5t tah8 tahl3 tai6ne. ta5ir. tak8ta tal3au 1tale ta8leng
-tal5ert 6t5a6mer 6tamp tampe6 2t1amt tan5d6a tan8dr tands5a tani5e
-6tanl 2tanr t3ans 8t5antr tanu6 t5anw 8tanwa tan8zw ta8rau 6tarbe
-1tari 2tark 2t1arm ta1ro 2tart t3arti 6tarz ta1sc ta6sien ta8stem
-ta8sto t5aufb 4taufn 8taus. 5tause 8tausf 6tausg t5ausl 2t1b2 2t1c
-t6chu 2t1d te2am tea4s te8ben 5techn 4teff te4g3re te6hau 2tehe te4hel
-2t1ehr te5id. teig5l 6teign tei8gr 1teil 4teinh t5einhe 4teis t5eisen
-8teiw te8lam te4lar 4telek 8telem te6man te6n5ag ten8erw ten5k tens4p
-ten8tro 4t3entw 8tentz te6pli 5teppi ter5a6b te3ral ter5au 8terbar
-t5erbe. 6terben 8terbs 4t3erbt t5erde. ter5ebe ter5ein te8rers terf4
-8terhö 6terklä ter8nor ter6re. t8erscha t5e6sel te8stau
-t3euro te1xa tex3e 8texp tex6ta 2t1f2 2t1g2 2th. th6a 5tha. 2thaa
-6t1hab 6t5haf t5hah 8thak 3thal. 6thals 6t3hand 2t1hau 1the. 3t4hea
-t1heb t5heil t3heit t3helf 1theo 5therap 5therf 6t5herz 1thes 1thet
-5thi. 2t1hil t3him 8thir 3this t5hj 2th1l 2th1m th1n t5hob t5hof
-4tholz 6thopti 1thr6 4ths t1hum 1thy 4t1hä 2t1hö t1hü
-ti1a2m ti1b tie6fer ti1en ti8gerz tig3l ti8kin ti5lat 1tilg t1ind
-tin4k3l ti3spa ti5str 5tite ti5tr ti8vel ti8vr 2t1j 2t1k2 2t1l tl8a
-2t1m8 2t1n 3tobe 8tobj to3cha 5tocht 8tock tode4 to8del to8du to1e
-6t5o6fen to1in toi6r 5toll. to8mene t2ons 2t1ony to4per 5topf. 6topt
-to1ra to1s to6ska tos2l 2toti to1tr t8ou 2t1p2 6t1q tr6 tra5cha
-tra8far traf5t 1trag tra6gl tra6gr t3rahm 1trai t6rans tra3sc tra6st
-3traue t4re. 2trec t3rech t8reck 6t1red t8ree 4t1reg 3treib 4treif
-8t3reis 8trepo tre6t5r t3rev 4t3rez 1trib t6rick tri6er 2trig t8rink
-tri6o5d trizi5 tro1a 3troc trocke6 troi8d tro8man. tro3ny 5tropf
-6t5rosa t5roß 5trub 5trup trut5 1träg 6t1röh
-5trüb trü3bu t1rüc t1rüs 2ts ts1ab t1sac tsa8d
-ts1ak t6s5alt ts1an ts1ar ts3auf t3schr t5schä tse6e tsee5i
-tsein6s ts3ent ts1er t8serf t4serk t8sh 5t6sik t4s3int ts5ort.
-t5s6por t6sprei t1st t6s5tanz ts1th t6stit t4s3tor 1t2sua t2s1uf
-t8sum. t2s1u8n t2s1ur 2t1t tt5eif tte6sa tt1ha tt8ret tt1sc tt8ser
-tt5s6z 1tuc tuch5a 1tu1e 6tuh t5uhr tu1i tu6it 1tumh 6t5umr 1tums
-8tumt 6tund 6tunf 2t1unt tu5ra tu6rau tu6re. tu4r3er 2t1v 2t1w 1ty1
-ty6a ty8la 8tym 6ty6o 2tz tz5al tz1an tz1ar t8zec tzeh6 tzehn5 t6z5ei.
-t6zor t4z3um t6zäu 5täg 6täh t5ält t8än
-täre8 8tä8st 6täuß t5öffen
-8tö8k 1tön 4tüb t6ü5ber. 5tüch 1tür.
-u3al. u5alb u5alf u3alh u5alk u3alp u3an. ua5na u3and u5ans u5ar.
-ua6th u1au ua1y u2bab ubi5er. u6b5rit ubs2k u5bö u8büb 2uc
-u1che u6ch5ec u1chi uch1l uch3m uch5n uch1r uch5to ucht5re u1chu uch1w
-uck1a uck5in u1d ud4a u1ei u6ela uene8 u6ep u1er uer1a ue8rerl uer5o
-u8esc u2est u8ev u1fa u2f1ei u4f3ent u8ferh uf1fr uf1l uf1ra uf1re
-uf1rä uf1rü uf1s2p uf1st uft1s u8gabt u8gad u6gap ugeb8 u8gn
-ugo3s4 u1ha u1he u1hi uh1le u1ho uh1re u1hu uh1w u1hä u1hö
-6ui ui5en u1ig u3ins uin8tes u5isch. u1j 6uk u1ke u1ki u1kl u8klu
-u1k6n u5ky u1la uld8se u1le ul8lac ul6lau ul6le6l ul6lo ulni8 u1lo
-ulo6i ult6a ult8e u1lu ul2vr u1lä u1lö 3umfan 5umlau umo8f
-um8pho u1mu umu8s u5mö u1n1a un2al un6at unau2 6und. 5undein
-un4d3um 3undzw undü8 un8düb une2b un1ec une2h un3eis 3unfal
-1unfä 5ungea 3unglü ung2s1 un8gä 1u2nif un4it un8kro
-unk5s u1no unpa2 uns2p unvol4 unvoll5 u5os. u1pa u1pi u1p2l u1pr
-up4s3t up2t1a u1q u1ra ur5abs ura8d ur5ah u6rak ur3alt u6rana u6r5ans
-u8rap ur5a6ri u8ratt u1re ur3eig ur8gri u1ri ur5ins 3urlau urmen6
-ur8nan u1ro 3ursac ur8sau ur8sei ur4sk 3urtei u1ru uru5i6 uru6r u1ry
-ur2za ur6zä ur5ä6m u5rö u1rü urück3 u1sa
-usa4gi u2s1ar u2s1au u8schec usch5wi u2s1ei use8kel u8sl u4st3a4b
-us3tau u3s4ter u2s1uf u8surn ut1ac u1tal uta8m u1tan ut1ar u1tas ut1au
-u1te u8teic u4tent u8terf u6terin u4t3hei ut5ho ut1hu u1ti utine5
-uti6q u1to uto5c u1tr ut1sa ut1s6p ut6stro u1tu utz5w u1u u1v uve5n
-uve3r4ä u1w u1xe u5ya uy5e6 u1yi u2z1eh u8zerh u5ö uße6n
-ußen5e 8vanb 6vang 6varb var8d va6t5a va8tei
-va2t1r 2v1b 6v5c 6vd 1ve 6ve5g6 ver1 ver5b verb8l ve2re2 verg8 ve2ru8
-ve1s ve2s3p ve3xe 2v1f 2v1g 6v5h vi6el vie6w5 vi1g4 vi8leh vil6le.
-8vint vi1ru vi1tr 2v1k 2v1l 2v1m 4v5n 8vo8f voi6le vol8lend vol8li
-v2or1 vo2re vo8rin vo2ro 2v1p 8vra v6re 2v1s 2v1t 2v1v 4v3w 2v1z
-waffe8 wa6g5n 1wah wah8n wa5la wal8din wal6ta wan4dr 5ware wa8ru
-war4za 1was w5c w1d 5wech we6fl 1weg we8geng weg5h weg3l we2g1r
-weh6r5er 5weise weit3r wel2t welt3r we6rat 8werc 5werdu wer4fl 5werk.
-wer4ka wer8ku wer4ta wer8term we2sp we8stend we6steu we8str
-we8stö wet8ta wich6s5t 1wid wi2dr wiede4 wieder5 wik6 wim6ma
-win4d3r 5wirt wisch5l 1wj 6wk 2w1l 8w1n wo1c woche6 wol6f wor6t5r 6ws2
-w1sk 6w5t 5wunde. wun6gr wu1sc wu2t1 6w5w wy5a wärme5 wä1sc
-1xag x1ak x3a4men 8xamt x1an 8x1b x1c 1xe. x3e4g 1xen xe1ro x1erz
-1xes 8xf x1g 8x1h 1xi 8xid xi8so 4xiste x1k 6x1l x1m 8xn 1xo 8x5o6d
-8x3p2 x1r x1s6 8x1t x6tak x8terf x2t1h 1xu xu1e x5ul 6x3w x1z 5ya.
-y5an. y5ank y1b y1c y6cha y4chia y1d yen6n y5ern y1g y5h y5in y1j
-y1k2 y1lak yl1al yla8m y5lax y1le y1lo y5lu y8mn ym1p2 y3mu y1na yno2d
-yn1t y1on. y1o4p y5ou ypo1 y1pr y8ps y1r yri3e yr1r2 y1s ys5iat ys8ty
-y1t y3w y1z yä8m z5a6b zab5l 8za6d 1zah za5is 4z3ak 6z1am 5zange.
-8zanl 2z1ara 6z5as z5auf 3zaun 2z1b 6z1c 6z1d 1ze ze4dik 4z3eff 8zein
-zei4ta zei8ters ze6la ze8lec zel8th 4zemp 6z5engel zen8zin 8zergä
-zer8i ze1ro zers8 zerta8 zer8tab zer8tag 8zerz ze8ste zeu6gr 2z1ex
-2z1f8 z1g 4z1h 1zi zi1en zi5es. 4z3imp zi1na 6z5inf 6z5inni zin6s5er
-8zinsuf zist5r zi5th zi1tr 6z1j 2z1k 2z1l 2z1m 6z1n 1zo zo6gl 4z3oh
-zo1on zor6na8 4z1p z5q 6z1r 2z1s8 2z1t z4t3end z4t3hei z8thi 1zu zu3al
-zu1b4 zu1f2 6z5uhr zun2a 8zunem zunf8 8zungl zu1o zup8fi zu1s8 zu1z
-2z1v zw8 z1wal 5zweck zwei3s z1wel z1wer z6werg 8z5wes 1zwi zwi1s
-6z1wo 1zy 2z1z zz8a zzi1s 1zä 1zö 6zöl. zö1le
-1zü 2z1ü2b ä1a6 äb1l ä1che ä3chi
-äch8sc äch8sp ä5chu äck5a äd1a äd5era
-ä6d5ia ä1e ä5fa äf1l äft6s äg1h
-äg3le ä6g5nan äg5str ä1he ä1hi äh1le
-äh5ne 1ähnl äh1re äh5ri äh1ru ä1hu
-äh1w 6äi ä1isc ä6ische ä5ism ä5j
-ä1k äl1c ä1le ä8lei äl6schl ämi1e
-äm8n äm8s ä5na 5änderu äne5i8 äng3l
-änk5l ä1no än6s5c ä1pa äp6s5c 3äq
-är1c ä1re äre8m 5ärgern är6gl ä1ri
-3ärmel ä1ro ärt6s5 ä1ru 3ärztl ä5rö
-ä6s5chen äsen8s äs1th äta8b ä1te äteri4
-äter5it ä6thy ä1ti 3ätk ä1to ät8schl
-äts1p ä5tu äub1l äu1e 1äug äu8ga
-äu5i ä1um. ä1us. 1äuß ä1z
-ö1b ö1che ö5chi öch8stei öch8str öcht6
-5ö6dem 5öffn ö1he öh1l8 öh1re ö1hu
-ö1is ö1ke 1ö2ko 1öl. öl6k5l öl8pl
-ö1mu ö5na önig6s3 ö1no ö5o6t öpf3l
-öp6s5c ö1re ör8gli ö1ri ör8tr ö1ru
-5österr ö1te ö5th ö1ti ö1tu ö1v ö1w
-öwe8 ö2z üb6e2 3ü4ber1 üb1l üb1r
-5ü2bu ü1che ü1chi ü8ch3l üch6s5c ü8ck
-ück1a ück5ers üd1a2 ü6deu üdi8t ü2d1o4
-üd5s6 üge4l5a üg1l üh5a ü1he ü8heh
-ü6h5erk üh1le üh1re üh1ru ü1hu üh1w
-ü3k ü1le ül4l5a ül8lo ül4ps ül6s5c
-ü1lu ün8da ün8fei ünk5l ün8za ün6zw
-ü5pi ü1re ü8rei ür8fl ür8fr ür8geng
-ü1ri ü1ro ür8sta ür8ster ü1ru üse8n
-ü8sta ü8stes ü6s5tete ü3ta ü1te ü1ti
-üt8tr ü1tu üt8zei ü1v ß1a8 5ßa.
-ß8as ß1b8 ß1c ß1d
-1ße ß5ec 8ße8g 8ße8h
-2ß1ei 8ßem ß1f8 ß1g ß1h
-1ßi ß1k ß1l ß1m
-ßmana8 ß1n ß1o ß1p8 ß5q
-ß1r ß1s2 ßst8 ß1ta
-ß1te ßt3hei ß1ti ß5to
-ß1tr 1ßu8 6ß5um ß1v ß1w
-ß1z
+.ab1a
+.ab3l
+.abo2
+.ab3ol
+.ab1or
+.ab3s2
+.ab3u
+.ade3n
+.ae3
+.aft2
+.ag2a
+.ag4r
+.ag2u
+.ai2s
+.akt2a
+.al2e
+.al3k
+.al3lei
+.al5len
+.al3se
+.al4tei
+.alter6s5
+.alt1s
+.al2tu
+.ampe4
+.amt2s
+.ana1c
+.an3d2
+.anden6k
+.and4ri
+.an1er
+.ang2
+.an3gli
+.ang4s2
+.angst3
+.ani2s
+.an3k4
+.an3na
+.an3s2
+.an4si.
+.an3z2
+.aos4
+.ap5p6le.
+.aps2
+.ari1e
+.ar3k2a
+.ar4m3ac
+.ar4mun
+.ar2sc
+.ar4tan
+.ar4t3ei
+.arter4
+.ar6t5erh
+.ar2tr
+.arz2
+.as6sest
+.as2t
+.ata1
+.ate2
+.at4h
+.au3d
+.aue2
+.au4f3
+.aufs2
+.au2s1
+.au6stes
+.auß2
+.ax2
+.äm3
+.är6schl
+.ät2h
+.ät2s
+.äu3
+.bahn3
+.bah6ner
+.baus4
+.be3erb
+.bel2a
+.be3r4a
+.be3r2e
+.ber4g3a
+.ber6g5e6b
+.ber4g3r
+.ber4tr
+.bi4os
+.bi2t
+.bit1a
+.boge2
+.bo4s3k
+.bu4ser
+.bus3se
+.bu7s8ser.
+.bussy8stem.
+.ch4
+.char8mes
+.chi3er
+.dab4
+.da2r1
+.dar3in
+.darm1
+.da4te.
+.da4tes
+.de2al
+.de1i
+.dein2
+.de3lo
+.de8ments
+.den4ka
+.den4kl
+.den4ko
+.de1o2
+.de3r4en
+.derma3
+.dermas6
+.de3sk
+.di3el
+.di4en2
+.dien8sta
+.dienst7a8d
+.do3b
+.do2mo
+.do1pe
+.dor2f1
+.dy2s3
+.ebe2r1
+.edu3s
+.eg2o
+.eh2e
+.ehe1i
+.ei3e2
+.ei3f2e
+.ei3k
+.einbus6
+.ein3d
+.eine2
+.ei4neb
+.ein6erl
+.eise4
+.ei2sp
+.eis3s2
+.ei4s1t
+.ei2tr
+.eke2
+.ek3li
+.el2bi
+.el2bl
+.el4fei
+.el2fl
+.el2i
+.em3m2
+.en1
+.en4da
+.en4d3er4
+.en2d3r
+.en4dü
+.en2gl
+.enn2
+.ent3
+.en2ta
+.en4tei
+.en4tio
+.en2t1r
+.ents2
+.epi1
+.ep3p
+.er4bei
+.er8brecht
+.er2bu
+.er4dan
+.er4dei
+.erden6k
+.er4dep
+.er4d3er
+.er1e
+.ere3c
+.erf4
+.er1i
+.ers2
+.er8stein
+.erster6
+.er8sterb
+.er8stritt.
+.er8stritten.
+.ert2
+.er4z3el
+.er4zen4
+.ese3le
+.es3p
+.es2st
+.es2t
+.est6e
+.est3r
+.et2s
+.eu1
+.eu3g4
+.eu3r4
+.eu3t
+.eve4r
+.ext4
+.fe3la
+.fer4no
+.fe4sta
+.fid2
+.fi4le.
+.fi4len
+.fi2s
+.flö8s7se.
+.flö8s7sen.
+.flö8s7ses
+.flug1
+.fs4
+.fu2sc
+.ga2me
+.gangs4
+.ga4s3e
+.ga6sten
+.ga2t
+.gd2
+.gebe4a
+.geb2l
+.gel4b3r
+.gel2d1
+.ge3lu
+.ge5nar
+.ge3n4e
+.ge3n2o
+.gente4
+.ge3r4a
+.ge3r2e
+.ge3ro
+.ge3s2
+.get4
+.ge3u
+.glan2
+.gla4s3t
+.gol6der
+.grif8fes
+.gus2
+.haft3s
+.hal5le
+.hal2s
+.halt4e
+.hau4sa
+.hau2t1
+.he2
+.he4bei
+.he3fe
+.he3le
+.her3an
+.he3rat
+.her6b5ra
+.he3rer
+.he3ri
+.he6r5inn
+.hin3u
+.hof1e
+.ho4fen
+.ho4met
+.höch2
+.ia2
+.il3
+.im2a
+.ima4ge
+.im5m2
+.in1
+.ind4
+.in3gl
+.ink2
+.in3n2e
+.in3sk
+.inu1
+.ioni1
+.ire3
+.is2a
+.it2h
+.iv2
+.ivo3
+.joni1
+.jor3
+.ka2b5l
+.ka2i
+.ka3le
+.ka3ta
+.ka4t3io
+.ken6num
+.ker3s
+.ki4e
+.klang3
+.ko3b
+.kopf1
+.kor4da
+.kraf2
+.ks4
+.kus2
+.la3be
+.la3ho
+.lase2
+.le4ar
+.le4gas
+.le3n2i
+.len3z
+.lich8t7er8s
+.li2f
+.li3po
+.li4ve.
+.lo4g3in
+.lo2sc
+.los3s2
+.lo3ver
+.lö4ss
+.lus2
+.luster6
+.lu4str
+.lut4h
+.ma3d
+.mal4e
+.mas8sen.
+.ma4str
+.mat4c
+.matu3
+.md2
+.me3l2a
+.me3ne
+.me3no
+.men8schl
+.men8schw
+.ment4
+.mes4sp
+.mi2f
+.mik4
+.mil2z
+.mi2t1
+.mm2
+.na3no
+.na3t
+.nat2h
+.näs5c
+.nebe4n
+.ner2f
+.ne1ro
+.nich2
+.nicht5e
+.ni2e
+.ni3k4l
+.nob4
+.no2c
+.no2s
+.no4th
+.nul2
+.nus4
+.oa5s
+.ob1a
+.obe2
+.ober5ei
+.of2e
+.ohr5s
+.oper4
+.or2a
+.ord4e
+.ort2
+.ort4h
+.orts3e
+.os3s
+.os5t6alg
+.oste2
+.ost3el
+.ost5end
+.osten8de
+.oste6re
+.ost3r
+.ot1
+.ozo4
+.öl3l
+.pab4
+.pa2r1e
+.par3t4h
+.pe2c
+.pe3la
+.pe3le
+.pe4ste
+.pf4
+.ph4
+.poka2
+.po6stei
+.po4str
+.ps2
+.rabe4
+.ra3ch4e
+.ra3me
+.ra4sp
+.ra4s3s
+.rau2m
+.rau8schl
+.re3ale
+.rebs2
+.re3cha
+.re5insz
+.reis6e5i
+.reli1
+.res2t
+.re4stu
+.ri4as
+.richt6e
+.ro4a
+.ro3be
+.ro2ha
+.ro3m4a
+.ro2tr
+.ro3tu
+.rö2sc
+.rö4ss
+.rös3se
+.ruf3s
+.ruh2r1
+.runder6
+.ru5s6ses
+.rü1b
+.rücker6
+.rü4ss
+.sa3br
+.sali1
+.sami1
+.sas2
+.sa3sse
+.sau1c
+.sau5er.
+.sä5s4
+.sch4
+.schaf8t7end
+.scheiner8
+.scho7s8se.
+.scho7s8ses.
+.se2ei
+.se2ha
+.sein2
+.sen4f
+.sen3s
+.se3re
+.se1ro
+.se2t1
+.sha2
+.si3gn
+.si2te
+.ski1e
+.sour2
+.spani7er.
+.spä5s4
+.spiege8lei
+.st4
+.ste2i
+.steiner8k
+.sto4re
+.stras4
+.sucher6
+.tage4s
+.tan4k3a
+.tan4k3l
+.ta3ra
+.tar3t
+.ta2t3h
+.ta2to
+.ta2t1u
+.te2e
+.te2f
+.tehe3
+.teiler8s
+.tei8l7ersc
+.te3l
+.te3no
+.ten3s
+.te1ra
+.te6stei
+.te6stel
+.tester8g
+.tester8h
+.th4
+.ti2e
+.ti2me
+.ti4mes
+.ti2s
+.ti8sch7end
+.tite4
+.tode2
+.to4der
+.to2n
+.to4nat
+.to3nes
+.to4nin
+.to4pl
+.to2pr
+.to2w
+.tras3
+.tra4ss
+.tri3e4s
+.trockenmas8
+.ts4
+.tsa3
+.tse3
+.tu3ra
+.tu3ri
+.turm1
+.tur4ma
+.ub2
+.ufe2
+.ufer1
+.ul2b3
+.um3
+.ume2
+.umo2
+.ums2
+.un3a2
+.un3d
+.une4
+.un3g
+.uni2t
+.ur3a2d
+.ural4
+.uran6fa
+.ur1c
+.ur1e
+.ur4inf
+.ur3o4m
+.ur1o2p
+.ur3s2
+.ut2a
+.ut3r
+.übe4
+.ve5n2e
+.vol2
+.vo4r
+.wah4l
+.wa2s
+.weg5s
+.wei4ta
+.welter8e
+.welter8kl
+.wer6ker
+.wer4kr
+.wer4tr
+.wetterer8s
+.wi4e
+.wor2
+.wort5en6
+.wur2f1
+.xe3
+.ya4l
+.zahn3
+.zeit3s
+.zel4la4
+.zelle4
+.zel6lei
+.zel4li
+.zeug4i
+.zi2e
+.zie4l3u
+.zin4ka
+.zin4s3c
+.zin4st
+.zol2
+.zuch2
+.zucht3
+.zug3l
+.zu4gra
+.zu2pf
+.zweigen8
+.zwei8g7end
+a1ab
+aa2be
+aa1c
+a1a2ce
+aa2gr
+a1akt
+a1a2n
+a2ans
+a1aq
+2a2ar
+aa2r3a
+aar3b
+aar3d
+aa3rea
+aa2rei
+aarf4
+aar3g2
+aar3k4
+aar3t4
+1aas
+aas1t
+aa2th
+aa2t3r
+aat4s1
+2a3au
+a1ä
+a1b
+2aba
+ab1alt
+ab2am
+ab2ant
+ab1au
+ab2aut
+ab1ä
+ab2är
+ab2äu
+2abbat
+2abbin
+1abd
+4a3be.
+4a3bec
+abe1e
+ab1eic
+abe3i4d
+ab1eil
+ab1ein
+4ab2el
+abe2la
+abela4d
+abe2le
+abe4l3in
+1abent
+2aber
+a2berd
+a3beri
+ab1er2k
+ab1er2r
+ab1er2z
+4abes
+abe2s1e
+ab3esse
+abes2t
+ab1eß
+2ab2et
+2abew
+1abf
+1abg
+3abga
+1abh
+2abi
+4abil
+ab1ins
+ab1ir
+3ab1it
+1abk
+ab1l
+1a2bla
+a4blag
+a3blat
+a4blau
+1a2blä
+ab4le.
+3ab3lei
+2ablet
+ab3li
+a2blin
+ab4lit
+2ablo
+1a2blö
+2ablu
+abma3s
+1abn
+2a3bo
+3a4bo.
+ab2of
+3a4bon
+4abot
+2abö
+ab3r
+a4brä
+a2bre
+2abro
+ab4ros
+2abrö
+1absc
+1ab3s2p
+abs2t2
+1abtei
+3abtr
+2abu
+a2bum
+ab1ur
+2abü
+1abw
+2aby
+3abz
+2a3ca
+ac1c
+a1cem
+a1cen
+a1cet
+ach1a
+a1chal
+a3chari
+ach3as
+ach3au
+2achb
+a1che
+a2ch1e2c
+ach1ei
+ach4ei.
+a2chep
+a4cherf
+ach5erfa
+a4ch3erh
+a4ch3erl
+a4cherö
+a4ch3erw
+2achf
+2a1chi
+a2chim
+ach3l
+2ach3m
+ach3n
+a1cho
+a3cho.
+ach1ob
+a2cho2r
+ach3ö
+2ach3r
+2achsc
+achs4el
+ach3s4i
+ach3skr
+achs4or
+ach3su
+a4cht
+ach4tak
+ach8tersp
+ach6t5erw
+ach4tin
+ach2t1o
+ach8traum
+ach8träume.
+ach8träumen.
+ach6trit
+ach4tum
+a1chu
+ach1u2f
+ach3ü
+2achv
+4ach1w
+a2chy
+2a1ci
+4ack.
+ackmu4
+ackmus3
+ack2sp
+acksta4
+2a1cl
+a3co
+acon4n
+2acu
+a1ç
+a1d
+2ad.
+2ada.
+4adab
+a2dac
+a2dad
+ad2ag
+adai4
+ad1ama
+a2d1an
+3adap
+4a3d2a2r3
+2adat
+a2d1au
+a3dau.
+1a2dä
+ad1c
+1add
+2ade.
+ade2al
+a3dec
+a3dee
+adefi4
+2adeg
+4aden
+a3dena
+ade1ra
+4ades2
+ade3sp
+ades4s
+2adf
+4adh
+4adi
+adi3en
+adi3er.
+adie4sc
+3adj
+2adli
+4admu
+ad2ob
+1a2dop
+2adp
+2adq
+2ad3rec
+ad3rei
+ad3run
+2ads2
+ad3sz
+2ad2t1
+adte2
+adt3h
+1adv
+2a1e1
+ae2b
+a2ec
+ae2d
+ae2i
+a2ek
+a3el.
+a2ela
+a2ele
+a2eli
+a3els
+ae2m
+ae2o3
+ae2p
+a3er.
+3a2er2o
+aes2a
+ae4sc
+ae2ta
+a2ew
+ae2x
+2afa
+af1ab
+a2f1a2n
+a3far
+a2f1au4
+2afä
+a2f1än
+2afe
+a2f1ec
+a4fentl
+a4f1ep
+aff4a
+af2f3l
+af4flu
+2afi
+afi2e1i
+afi6kanz
+afi4kat
+afi2t
+2af3l
+af1la
+a1flu
+2afo
+a2f3oc
+a2ford
+2afra
+af3rau
+af3rä
+af3re
+2afro
+af3rö
+af4rü
+af3s2a
+af3sh
+af2si
+af2sp
+af2t1a
+af2tei
+af2te2l
+aft4erk
+af2t1o
+af2tö
+aft3r
+af2tra
+af2t5re
+af2tur
+a2f3ur
+2afü
+a1g
+2ag.
+2aga
+ag1a2b
+ag1a2d
+ag1am
+ag1ar
+a2g1au
+agd1
+ag2del
+ag2di
+ag2dr
+ag2du
+4age.
+age1i
+agein4s
+age4ler
+ag2em
+2agen.
+age4neb
+a4gentu
+2ages
+age4sam
+age4s3i
+age2s3p
+ages5s
+ages6sen
+age4s3ti
+3aggr
+a2g1id
+a2gim
+2a2g1l
+ag4lan
+ag4las
+a4glö
+2agm
+ag2n
+ag4nat
+a4gnä
+ag4ne.
+ag4nu
+ag3rat
+a2g3re
+a2g3ri
+ag4ro
+2ags
+ag3sah
+ag4sam
+ag3s4eid
+ags8porta
+ag2s1tr
+2agt
+ag2th
+2agu
+a2gund
+2ah.
+a1ha
+ah2an
+ah4at
+a1hä
+2a1he
+ahe1in
+a2h1er2h
+ahe1u
+a1h2i
+ahin3
+ah2l3a2
+ah2l1ä
+ah4l1ei
+ah2lel
+ahle4na
+ah4l3erd
+ah4l3erh
+ahl1o2
+ah2lö
+ahl3sz
+ahme1i
+ah3mu
+ah4n3a
+ah2nä
+ah3nee
+ahn3el
+ah4nerd
+ahner4e
+ahner6le
+ahner4n
+ah2nin
+ah2no
+1a2hor
+ah1os
+a2h3ö
+4ahr
+ahr1a
+ah3r2e
+ahren6sc
+ahre4s3
+ah3ri
+ahrta2
+ahr2ti
+ahr4tri
+ahr4tro
+ahr4tun
+ah2ta
+ah2te2l
+ah2t1ex
+ah2t5r
+aht1s2
+a1hu
+ah1w
+a1hy
+2ai.
+ai3a4
+a1ia.
+2aib
+ai2bl
+aid4s
+aids1t
+ai1e4
+ai3en1
+aif4
+ai1fr
+ai3g4
+a3ik.
+ai3ke
+ai2lar
+ail3d4
+ai2lei
+ail3g
+ai2lo
+4ain
+ain2a
+a1ind
+ai5n4e
+ain3s
+ains2p
+3airb
+ai2sa
+a3isch.
+ai5schw
+ai3s2e
+ais3sen
+ais5st
+ait4
+a3iv.
+a3ivl
+a3ivs
+a1j
+a2jat
+ajekt4o
+2ak.
+2aka3b4
+a2ka3d2
+2akal
+2a3kam
+2akar
+ak4at
+aka4tak
+1akaz
+4akä
+2akb
+2akc
+2akd
+2a1ke
+a2kef
+a2k1em
+a2k1ent
+a2kes
+a2keu
+4a1ki
+ak1ins
+1akku
+2ak3l
+ak4li
+a1kna
+2ako
+2a1kr
+ak4ri
+3akro3
+2aks
+ak3sh
+ak2t1a2b
+ak4tag
+ak3tan
+2aktb
+ak2tel
+ak3ten
+akt2er
+2aktik
+2aktis
+2aktm
+ak2tö
+ak2t3r
+ak3t4ri
+2aktsi
+2aktsp
+2aktst
+2aktw
+a1ku
+2akun
+a2kup
+2akur
+4a3kü
+1akz
+3akze
+a1la
+2ala.
+4alabo
+al2abr
+al1af
+al1age
+2alai
+al1akr
+al1am
+al1ana
+4aland
+a2lang
+al1anz
+al1app
+a3lar.
+al3arc
+a3lare
+al2arm
+2al3arr
+a2lart
+ala2s
+al1asi
+al1ass
+ala2t1a
+al4atm
+alat3z
+al1au
+al3aug
+a1lä
+a2l1äm
+al1än
+al1äu
+3albat
+al2bär
+alber4e
+al4berh
+al4b3er4w
+al2b3l
+al2boh
+alb3ru
+alb5st
+al2dä
+al4d3erl
+al4d3ern
+alde2s
+ald3inn
+al2dr
+alds2
+2ale
+4ale.
+ale4ar
+al1eb
+ale2be
+al1ec
+a4l3ef
+a2l1ei
+a3l2eic
+a4l3ein
+a2l1el
+5a2lema
+alen1
+4a3len.
+3alenc
+alende4
+al3endr
+a4l3ends
+a2leng
+al2enn
+ale2p
+al1epo
+4aler.
+a2l1erb
+a2l1erf
+a2l1erh
+aler4kl
+a2l3erl
+al1erm
+aler4mi
+a2l1er4r
+a2l1ert
+3a4l3erwä
+4ales
+a2l1e4sk
+a2less
+a2l1eu
+al3exi
+alf4r
+2alg.
+3algi
+al2gli
+al3glo
+1algo
+3algor
+2ali
+al2imb
+al1imm
+ali4nal
+al1ind
+a2l1inq
+al1ins
+alken1
+al2klö
+al2kne
+1alkoh
+alk3s
+al2lab
+alla3d
+alla2m
+al2lan
+al2l1ap
+al2l1a2r
+al6later
+al2lä
+al3läu
+al4lec
+3allee
+alle4gi
+al4leh
+al3lend
+all3erk
+al3les
+alle3se
+al2leu
+al2lid
+alli5er.
+alli7ers.
+al2lob
+al2lo2c
+al2lop
+al2lo2s
+al2lö2
+all3öse
+al2luf
+allu4s
+al2lü4s
+al2map
+al3mas
+al4m3ast
+almo6de.
+a2l1ob
+3aloe
+a2lof
+4alog
+alo2ga
+alo2gr
+al1ont
+al1ort
+a2l1ö
+al2ös
+3alp.
+3alpe.
+1alph
+al2pho
+alp4r
+alrat2
+al3sak
+al6schei
+al3ses
+al4sh
+al3skl
+al2stu
+al2sum
+al2t1ak
+al2t1an
+1altä
+al4temu
+al4t3er5f
+al2teu
+al2tin
+alt1op
+al2tö
+al4t3rat
+al2tre
+al2t3ri
+al2t3ro
+alt4stü
+2altu
+a1lu
+alu3b4
+al2u3f
+alu3g
+al1u2k
+a2lum
+al1umb
+al1ur
+a3lus
+4aly
+al2zar
+al2zau
+alz4erk
+al2zw
+2am.
+am2a
+ama3d2
+ama3g
+2amah
+a2malg
+2a3m4an
+a2m3ap
+2amar
+ama4sta
+a2maz
+2amä
+4ame.
+a2meb
+2amel
+am4e4n1
+amen6s5pr
+ame3r2a
+a2m1erf
+a2meri
+ame5r2u
+a4mesh
+a3met
+2amf
+am4ing
+2amir
+2amis
+2amit
+2amk
+2aml
+2amm.
+am2ma2c
+2ammal
+amma2n
+am2mar
+am2mas
+amma4sc
+am2maß
+am4ma4te
+ammen8ge.
+ammes3
+am2mid
+ammi2e
+am2min
+am2mit
+am4mo2d
+am2mö
+ammu2
+amm3unt
+am4mus
+am4mü
+amni1
+a2mö
+2ampe.
+2ampen
+am4pf
+amp2f1a2
+ampf1o
+2am2ple
+2ampo
+am3pr
+4amsc
+am4schl
+am3sh
+1amt.
+am2t1a2
+am2t1ä
+am2tei
+amt3eig
+am2tel
+2amtem
+am4t3ern
+am2t1ex
+am2tis
+am2tit
+am2to4
+am2tö
+am2t3r
+am2t1u
+2amu
+3a2mul
+2ana.
+2anab
+ana3c
+anadi1
+an2ag
+2a3nak
+an1alg
+ana4lin
+ana3ma
+2anan
+an4and
+2anas
+a5nat.
+ana4th
+a5n4atm
+ana2tr
+an3aug
+1an1äs
+1anb
+2anbas
+2anbu
+an3ch
+2and.
+3an3d2ac
+and3arm
+and3ei
+anden6ga
+an4d3ent
+and5erob
+ande2s
+an2d1ex
+and4sas
+and2so
+and6spar
+and6spas
+and6s5paß
+and2su
+4andu2
+an2d1ur
+2ane
+4ane.
+an3ec
+a3nee
+an2ei.
+an3eif
+3aneig
+a4neis
+3a2n1e4k
+ane2mi
+4anen
+aner4fa
+an2erh
+a4nerke
+4anern
+a4nerz.
+an4erze
+an1eth
+1anf
+2anf.
+2anfab
+3anfä
+an3fe
+2anfi
+an4fj
+anf3le
+4anfors
+anf5rau
+2anfs
+an3f2u
+4ang.
+1angab
+an2gan
+an2g1ar
+2ange.
+1angeb
+1angeh
+an2g1ei
+an4g3erf
+an4g3er4w
+an4g3erz
+2angh
+2angie
+ang1l
+an2gla
+ang3n
+ang1r
+ang3ra
+1an3gri
+4angs.
+angt4
+1anh
+2a3n2i
+ani3d
+4anie
+ani3els
+ani5ers.
+ani3g2
+ani3ke
+3a4nim
+a4n3ind
+a4n3ins
+ani2o
+an3i4on
+a4niso
+anis2t
+2anj
+2ank.
+an2kab
+an2k1ak
+an2kan
+an2kei
+2anken
+ank5erfa
+2anki
+an2klö
+an2klu
+ank3no
+an4k3opf
+an2ko4r
+ank1r
+ank3ra
+an4kras
+ank3rä
+an2kro
+2anks2
+ank3se
+2ankt
+3ankü
+1anl
+2anlad
+3anlag
+anma3s2
+2anmo
+1anmu
+2ann.
+1annah
+an2nar
+an3ne
+an4nef
+2anns
+ann4s3p
+2annt
+2ano.
+ano3b
+an1od
+2anof
+2anog
+anoi3
+a3nol
+ano2la
+1a2nom
+a3nom.
+a2n1or
+2a3nos
+2a1nö
+2anpu
+1anr
+2anrö
+an3s4ar
+1an3s2ä
+1ansc
+an3skr
+ans1pa
+ans3pon
+1anspr
+1anst
+an3s2z
+2ant.
+an2t3ar
+anta4re
+an3t2ä
+1antá
+3antei
+an3tha
+2antie
+3antise
+2anto
+anton2
+3antr
+ant3rin
+1antw
+2anu
+anus3s
+an4ut
+a1nü
+1anw
+2anwi
+an2zä
+2anzb
+2anzd
+1anzei
+anze2n
+2anzes
+2anzg
+2anzh
+an2zid
+an2z1i4n
+2anzk
+2anzm
+2anzr
+2anzs
+2anzt
+1anzü
+3anzün
+2anzv
+2anzw
+an2zwa
+an2zwi
+2anzy
+2ao
+aof4
+ao3i4
+a1op
+aopf4
+a1or
+a1os3
+aost2
+a3ot.
+aot4r
+ao3t2s
+2a1ö4
+a1p
+4ap.
+2apa
+a2pe.
+a3pel
+a2pé
+a2pf
+ap2fa
+1apfel
+2apfes
+a3pfl
+a2pht
+2api
+2ap3l
+ap4la
+ap4lä
+ap4lo
+ap2n
+a2pot
+2apr
+4apro
+ap4ster
+ap2sto
+ap2str
+ap3t2
+2a3pu
+2ar.
+a1ra
+a3ra.
+ar2ab
+2ar3abb
+ar3abf
+ar3abt
+ara3d2
+ar3adr
+a2r3al
+a3rale
+a3ra3li
+a3ralo
+2aran
+a2r1ang
+a2r1anz
+2arap
+a2r3app
+2arar
+a3ras
+a2r1au
+a1rä
+1arb
+2arb.
+2arba
+ar2bak
+ar2b3at
+ar2bau
+2arbef
+ar4b3ein
+2arbek
+2arben
+2arber
+4arbi
+2ar2bl
+2arbo
+2arb1r
+ar2bre
+2arbs2
+arb3se
+arb3sk
+arb3so
+2arb3t4
+2arbu
+1ar1c
+2archl
+2archr
+ar2dau
+arde2l
+ar2dob
+ar2dop
+ar2d3r
+ar2du
+a2rea
+are5aler
+a2reb4
+aree2
+ar1eff
+ar1ehr
+ar1eid
+a3reih
+areim3
+a2rein
+arein4b
+arein4s
+arein4t
+a2rele
+4arem
+4a5ren.
+a5reni
+aren6sem
+are3r2a
+arer2e
+a4r3erei
+a2rerg
+a2r1er3h
+a2reri
+a2rerk
+a2rerl
+ar2erw
+are3u
+arf1r
+arf3ra
+arf2sp
+4arg.
+ar3gan
+ar2gl
+ar2gn
+2arg4o
+ar3g4r
+2arh
+2ari
+ar2ia
+a2rid
+ari3e2n
+ari3erd
+ari3erg
+ari5ers.
+ar3inf
+arin3it
+ar1int
+a3rio
+ar2ir
+ar4is
+ari2su
+a3riu
+ar2kal
+ar2k1ar
+ark3aue
+ar2kil
+2ark3l
+ar4klag
+ar2kle
+ar2klo
+ark4lö
+ar2kor
+ark3s2a
+ark2se
+ark3she
+arku2
+ar2les
+ar3mad
+ar2mau
+ar3m2ä
+3armee
+ar2m1eg
+ar2m1ei
+ar4merk
+arm2or
+ar2mum
+4armü
+ar2nan
+arn2el
+ar3ni
+ar4nin
+a1ro
+4aroc
+ar1o2d
+ar1of
+aro2fe
+a3rol
+aro3m
+aron2
+a2r1op
+a2ror
+a2r1ö
+2arp
+arp3fe
+2arr
+ar2r3ad
+ar2r3as
+ar2rek
+arre4n1
+ar2r3or
+2arsa
+ar3s2h
+2ar3s2i
+ar3sse
+ar2tau
+2artb
+ar3t2e
+2artei
+artel6li6
+arter6la
+ar2the
+art3ho
+art2i
+2arto
+art3r
+art4res
+2arts
+art3ske
+2artuc
+2aru
+a2r1uh
+ar1um
+a3rumm
+a2rü
+2arv
+arwa2
+2ary
+ar2zau
+ar2zä
+2arze
+2arzi
+ar2zö
+1arzt
+arz2t3r
+2arzu
+ar2z1w
+2asa
+a4s3aa
+as2ad
+a4s3af
+as2al
+as1am
+as3art
+asa2s2
+asa3sse
+as3at
+asau4f
+a2s3aug
+asau2s1
+as3ät
+a2sca
+a4schec
+a4schef
+a4sch3ei
+a6scherg
+as4chi
+a2schm
+2ascht
+a3schu
+a4schum
+4a3se
+a4seb
+a4sec
+a4s1ef
+as1eie
+as1emi
+a5sen.
+ase4na
+ase4n3o
+asens2
+as1ent
+as2er
+a4s3erke
+as4es
+ase2t
+as1eta
+a4sex
+a4s3ha
+as2hi
+as3hir
+a2s3i2k
+2asim
+asin2g
+as1inn
+2asis
+a4s3l
+a4sm
+a4sn
+a1so
+as3ob
+as1o2f
+a3sol
+a3som
+aso2p
+as1or
+a4soz
+as1p
+as3pe
+aspek6to
+a4spel
+as4pen
+a4s2ph
+as2pi
+as4pin
+as3pio
+a4spir
+a4spl
+as3sa
+ass2ab
+ass6aus.
+ass2e
+ass3ein
+as3sel
+asse3le
+as3ser
+asserma6
+a4ss2i
+as3sin
+as3ski
+as3so
+as2spo
+as2spr
+as4st
+as5sta
+as5stei
+as5sti
+as5str
+as5stu
+2asta
+a4stab
+a3stä
+a4s1tec
+as2tee
+ast2el
+a4stemp
+a4s3tep
+ast2er
+a4st3ese
+as2tex
+a4s2th
+a2stoc
+ast3orc
+as4trau
+a2st3re
+ast4ren
+a3stro
+a4strol
+ast5roll
+a4s1tub
+a4stuf
+a2stum
+2a1su
+as2ur
+a3sus
+a4sw
+aswa2s
+2asy.
+3a4syl
+as3z
+aße4
+aß2en3
+a2ß1er
+aß2th
+2a1t
+4ata
+at1abe
+at1abr
+at2a1f
+a3t2a3g
+a3tah
+at1akt
+ata3l
+a3tam
+at3ank
+at1apf
+at2asc
+at3att
+a2t1au
+a3tau.
+at1än
+4atb
+at2c
+4ate.
+a2teb
+ateien6d
+at1eig
+3a2teli
+a3tell
+3atemg
+at2en
+ate4na
+atens4
+a2tep
+ate3r4al
+ate3ran
+atern2
+ate2ru
+4ates
+at2eu
+a2tew
+at2ex
+at3hag
+a3t4heb
+a2th3in
+3athl
+a4thr
+at2hu
+4a3ti
+ati3ka
+ati4kab
+ati6k5erw
+a4tinf
+at2is
+ati2sa
+ati2se
+atis3s
+3atla
+4atli
+4atlo
+3atm
+4atma
+4atmä
+4atmus
+ato4man
+ato4men
+3atomk
+ato2mo
+at1ort
+a3tra.
+atra2t
+a2trau
+a2t3rä
+at3re
+4atri
+at3rin
+a2t3rom
+a3t4ron
+at3rot
+at3rü
+at2sa
+at4schn
+at2se
+at2si
+ats1o
+ats1p
+ats3tät
+at3ta
+3attac
+at4tad
+at2ta2g
+at4t1ak
+at2ta2l
+at4tang
+at4tar
+at4tau
+at2tä
+4atte.
+at2tec
+at2tei
+at3t2el
+at4temp
+at5ter
+attes2
+at3thä
+4atto
+at2t3rä
+att3s2
+at3t2u
+at2ty2
+atu2n
+atze4l
+atz3ela
+atz3elt
+at2z1er
+a3tzere
+at2z1i
+at2zo
+atz3t4
+at2z1w
+a2u
+2au.
+2au1a2
+2aub
+au2bab
+au2ban
+au2bau
+au2bei
+aube4n
+au2beu
+au2blä
+au2bli
+au2blo
+au2blu
+aub2si
+aubu4s
+4auc
+aude4r3i
+au2dr
+2aue
+aue2b
+au2ere
+aue3rei
+au5erein
+auer3ö
+au5erst.
+au3ert
+au2fa
+auf1an
+aufas2
+3aufber
+2aufe.
+2aufeh
+4aufen.
+3aufent
+auf1er
+au4ferk
+au2feu
+auff4
+auf3ind
+1aufla
+1aufn
+2aufo
+auf3ski
+auf3t4
+2auft.
+5aufzeic
+3aufzug
+1aufzü
+2aug
+aug2ar
+4augeb
+4augeh
+4augel
+aug2er
+4augl
+4augr
+au3gu
+2auh
+au3ha
+auh1u
+2au1i
+au3in
+au2is
+2auj
+auk3t
+aule2s
+aul4les
+au3lü
+4aum
+au2mal
+au4m3ent
+au2m1e2r1
+aum3eri
+au2mid
+au2mil
+aum1o
+au2mor
+aum3p2
+aum3s2
+au4mun
+4aun
+au3n2a
+aun2e
+au4nei
+au2nio
+au2no
+au3nu
+a4unz
+2aup2
+aup4ter
+2aur2
+au3ra
+au1rh
+au4sag
+au2s1ah
+ausan8ne.
+au2sau
+2ausc
+au6schmi
+1ausd
+2ause.
+au4s1eh
+2ausen
+au4s3erb
+au4s3erf
+aus3erk
+aus3erp
+au4serw
+1ausf
+1ausg
+au2sin
+au4sis
+1ausl
+au2so
+aus1or
+au2spr
+1ausr
+1auss2
+au3sse
+aus4se.
+au8ssende
+aus4ser
+aus4ses
+au2st2a
+aus3tau
+2auste
+au4stec
+aus3tie
+aust2o
+au2stö
+aus3tri
+3ausü
+1ausw
+1ausz
+auße2
+au3ßen
+a4ut
+au2t1äu
+2autb
+au2t1e2l
+auten4g
+au4t3erh
+2autg
+1auto
+au2trö
+2auts2
+2auu
+2auv
+auve4
+2auw
+2aux
+2auz
+au3ze
+auz2w
+2a1ü
+a1v
+av2a
+a3vang
+ava3t2
+avener4
+2avi
+a2vr
+av2s
+2a1w
+awi3e
+a1x
+ax2am
+a2xans
+ax2e
+a3xid
+a2xio
+axi2s
+ay1
+2a1ya
+ay2al
+ay2as
+a1yeu
+ayma2
+aysi1
+ay3t
+ay2u
+2a1z
+a3z4a
+aza3d
+3a4zal
+az2i
+az2o3
+a3z2u
+az2zen
+az2z1in
+az2zw
+ä1a
+1ää
+ä1b
+ä2b3l
+äb2s
+ä1ce
+ä1che
+äche1e
+äche4n
+ächenma5
+ächenmas8
+ä1chi
+äch3l
+ä2chr
+äch4s3a
+äch2s1o
+äch2sp
+ächt4e
+ä1chu
+ä1d
+ä2da
+ä2d1ia
+ä2dr
+äd2s
+äd3te
+2ä1e
+äe2x
+äfe4n
+äf2f3l
+äf3l
+äf3r
+äf4ro
+äf2s
+äft2
+äft4s
+ä1g
+ä2g1a
+1ä2gä
+ägd2
+ä5ge
+äge1i
+äge2r3a
+ä2g3l
+äg2n
+ä2g3r
+äg4ra
+äg2s
+äg3sc
+äg3sta
+äg3str
+1ä2gy
+äh1a
+2ä1he
+äh1ein
+äher8gebn
+äher3t
+ä1hi
+äh1in
+ähl1a
+äh3l2e
+äh4l3e4be
+äh5ler
+4ähm
+äh3na
+äh3ne
+1ähnl
+2ähr
+äh2rel
+äh3ri
+2äh2s
+2äht
+ä1hu
+äh1w
+2äi
+ä1im
+ä1is.
+ä3isch.
+ä1isk
+ä1j
+ä1k
+äka2la
+äk3l
+ä2kle
+äk4li
+ä2k3r
+ä1la
+älbe2
+äl2bl
+älk3
+älks2
+äl2l1a
+äl2p3
+äl4schl
+ä1lu
+2äma
+ämer2s
+ämi3en
+2äml
+äm2ma4
+ämmas2
+ämoni3e
+2ämp
+ämp7f4e
+äm2s
+ämt2e
+2än.
+änd2e
+än2dr
+2än2e
+äne2n1
+2än2f3
+änft2
+2än3g2e
+änge4ra
+2än2g3l
+än2gr
+ängs2
+äng3se
+2ä3n2i
+än3k2e
+än2k3l
+än2kr
+än3n4e4
+2äns
+än4s1a
+än2s1c
+äns2e
+änte3le
+2änz
+ä1on
+äo3s2
+ä1pa
+1äpfel
+äp2pl
+äp2pr
+äp2s1c
+1äq
+ä2r3a4
+är4af
+är1ä
+är2b3le
+är1c
+2ärd
+ärde4s
+2äre
+ä2r1ei
+ä2r1e2l
+är2em
+äre2n
+ä2rene
+är2er
+är2es
+är3ge
+ä2rind
+är1int
+är3ke
+ärm3arm
+ärme1e
+ärm3ent
+är1ob
+är1of
+ä1rö
+är3re
+ärse2
+är2seb
+är4seh
+ärs1er
+är2si
+är3spu
+2ärt
+ärt4e
+är2th
+ärt4s1
+ä2rü
+1ärz
+ärz3te
+är2zu
+är2zw
+ä1s
+äs4c
+2ä3s2e
+äse3g
+äse1i4
+äse5ref
+äser4ei
+äse4ren
+äser2i
+äse3t
+ä5si
+ä3s2kr
+ä2s1p
+ä3s2s
+2äs4s1c
+äss2e
+äss5erkr
+äss5ersa
+äss3erw
+ä5sses
+äs4sh
+äs4s1t
+äs4t2e
+1ästh
+ä2str
+ä1ß
+2äßc
+äß1erk
+äß1ers
+ä2t3a4
+2ä3te
+äte3a
+äte1e
+äte1i
+äte3l2
+äte2n
+äteo2
+äte3se
+ä2th
+ä1ti
+ä1to
+ät1ob
+ät3r
+ät2sa
+äts3au
+ät2sä
+ät4schl
+ät4schr
+ät2s1i2
+äts3l
+äts1or
+äts1p
+ät4s1t
+äts3te
+ät2tei
+ätte4n
+ät2tr
+ä1tu
+ätze3l
+ät2zw
+äu2b3l
+äu2br
+äu1c
+äu3d
+äude3
+äuder2
+äu3el
+2ä2uf
+1äug
+äu4g3l
+2äul
+2äum
+äu2ma
+äum3p
+äumpf4
+äum2s1
+2ä2un
+äun2e
+äu3nu
+2äu3r2
+äure1
+äu1s
+2ä3us.
+2äusc
+äu4schi
+äu4schm
+äu6schü
+äu3s2e
+äuse1i
+ä3usg
+ä3usk
+ä3usn
+äu2s1p
+äu3s2s
+äuss1c
+1äuß
+äut2e
+äu2tr
+ä1v
+1äx
+ä1z
+â1t
+á1n
+5ba.
+b3a2ba
+2babf
+2babg
+ba2bl
+ba2br
+2b1abs
+bach7t4e
+back3er
+back3s2
+ba3d2e
+bade1i
+2b1adel
+2b1adl
+2b1adm
+b1a2dr
+ba2du
+2b1af
+bah6nene
+bais2
+b2ak
+ba2ka
+ba2k1er
+ba2k1i
+bak1l
+bak3r
+ba2kra
+ba2kre
+ba2lab
+ba2l1ak
+ba3lal
+ba2lau
+ba4l3erk
+balk4a
+balke4
+bal4lan
+balle4b
+bal4l3ei
+baller6e
+bal6ler6g
+ball6erk
+bal4li4g
+bal4lo4k
+ballö3s
+bal3ti
+2b1am
+b2ama
+ba2me
+ban2a
+3b2and
+band1a
+ban4dal
+ban4dan
+ban4dar
+ban6deng
+ban2dr
+ba3n2e
+2banf
+b1ang
+ban3gl
+ban4k1a
+banker4
+ban2kl
+ban2kn
+ban2kr
+ban2ku
+2banl
+b1anna
+ban2o
+2b1ans
+b1an3t
+2banw
+b1anz
+ba2r3ab
+ba2rad
+bar3ast
+ba2r3at
+bar3de
+ba2rei
+ba3r2en
+barer5ei
+bar3n
+b2aro
+3bars
+b1arz
+bar3zw
+3bas
+ba3sa
+ba2sc
+bas2i
+bas4sa
+bas4sei
+bas6st
+bas4t
+ba2str
+ba2ß1
+ba4t3ent
+bat2o
+3bau.
+bau3b
+bauer4l
+bauer4s
+bau3fa
+bau1fl
+bau1fr
+bau3g2
+b2auk
+bau3r
+bau3s2k
+bau3sta
+b1a2x
+ba1yo
+3b2äc
+bä1ch
+3b2äd
+2b1äh
+b2äl
+2bärz
+b2ä4s3
+2bäug
+4b1b
+bbe4n
+bbe4p
+b4be2se
+bb3ler
+bb2lö
+b3brec
+b3bru
+bbru2c
+bb2s
+bbu1
+2b1c
+bch2
+2b5d4
+bdome4
+1be.
+3bea
+be3an
+be3ar
+3beb
+b1ebb
+1bec
+be1ch
+2becht
+2b1e2del
+bedi4
+be1e2h
+bee2l
+be1ela
+bee4rei
+be1erl
+be1ert
+be1eta
+bef4
+2b1eff
+be3g2
+begas1
+be2he.
+beh5ri
+bei3b
+2b1eier
+bei1f4
+bei4ge.
+bei3k4
+bei3l2a
+2b1eime
+be1ind
+be1inh
+bein6hal
+bein4hi
+bei3s2
+bei5st
+beit2s
+3bek
+3bel
+be3lag
+be3las
+be3lec
+4be2lek
+be2l1en
+bel3ere
+be2let
+bel3f
+be3l2i
+beli4e
+bel3la
+belle4n3
+bel3li
+be2l3om
+be2löf
+bel3sz
+bel3t
+bel4un
+1bem4
+2b1emp
+2bemul
+1ben
+3ben.
+be5nabe
+ben3ar
+be4nas
+be4nat
+benä4
+bend3s2
+b2ene
+be3nei
+be4n3end
+be4ners
+ben2eu
+3beng
+be4nis
+ben3n
+5benp
+b2ens
+ben4s3pa
+ben4spr
+benst4
+3bensv
+3bensz
+2b1entb
+2bentd
+4benteu
+2bentf
+ben3th
+ben6thei
+bent4r
+2b1ents
+2b3entw
+be2nu
+ben3un
+ben3z2
+be1o
+2b1epi
+be1ra
+be2r3am
+be2ran
+ber3a4s
+berb2
+ber3d
+b4ere
+be2re2b
+ber2ec
+ber4ei.
+be4r3eiw
+be4rene
+ber4erg
+ber4erw
+bere4sc
+berf4
+3berg.
+ber4g3af
+ber4gal
+berg3a4s
+ber4hab
+ber4in.
+be5r6inne
+berin4s
+ber3iss
+ber3kr
+bermas4
+berma7sse
+ber3n2a
+b1ernt
+be2rö4
+3bers.
+ber5se
+ber3st4a
+ber3t2a
+bert2e
+bert2i
+b4eru
+ber3ze
+ber2zö
+3b2es
+be3sa
+bes4abb
+bes2am
+be4sap
+be4sar
+bes2au
+be2s1er
+be2s1id
+be5s4lo
+bes2po
+bes3sa
+bess4e
+b3esst.
+bes3sz
+beste2
+be6stein
+bester4
+be6sterh
+best2i
+bes3tin
+be4s3tol
+be4sto4r
+best4r
+be4strä
+be4s3tur
+be3s2ze
+3bet
+be3tam
+bet2to
+be1un
+be1ur
+3bev
+3b2ew
+2b3e2x
+3b2ez
+2b5f4
+bfal2
+bflö4
+bflös3
+2b1g4
+b5ga
+bgas1
+bga4st
+bge3
+bgel2e
+bge5n
+bges2
+2b1h2
+b5hä
+1bi
+3bib2
+bibe2
+biber1
+bi2c
+bieres4
+bie4str
+biet4s
+3bietu
+bik2a
+bi2ke.
+bi2kes
+bi2k3re
+3bil
+bi3la
+bi4lans
+bi4lau
+bil4deb
+bi2lei
+4billu
+bi2lu
+2bimp
+2b1inb
+3bin2e
+b1inf
+2b1inh
+bi2nok
+2b1int
+2b1inv
+bi2o3
+biri1
+3bis
+bis2a
+b1iso
+bi2sp
+bis4s1c
+bist4
+bi3sta
+bi2s1to
+bi2stu
+bi2stü
+3b2it.
+b2ita
+bit2an
+b2ite
+bit2ta2
+bi2tu
+bi3tum
+bi3tus
+bi3z2
+4b1j
+bjek4to
+2b5k4
+bl4
+2bl.
+bla3b4
+2b3lac
+b3lad
+b5lag
+b2lanc
+b3late
+b2latt
+b4lau.
+b3laus
+2b3law
+2b1län
+b2läse
+3blät
+b2le
+3ble2a
+b3leb
+3blec
+b3lee
+b3leg
+2bleh
+2b3leid
+2bleih
+b3lein
+blei3s
+2bleit
+ble3l
+2b3lenk
+b3lese
+2blesu
+ble3sz
+b4let
+b3leu
+2blich
+3blick
+b2lie
+2blief
+2blig
+bling4
+b2lis
+2blis.
+b2lit
+3blitz
+b2lo
+3b4loc
+b3los2
+blo3sse
+3b4lum
+2blun
+b2lus
+3blut
+blut1o
+3blü
+2b1m
+bmas2
+4b5n2
+bnas4
+bni2
+bnis1
+bo4a
+bo5as
+b1o2b
+bo3ben
+bob3r
+bo1ch2
+bo3d2
+boe1
+bo2e3i
+2b1of
+bo3fe
+boh3re
+boh4rei
+boh2u
+bo1is
+bo2lan
+bo2lau
+bol3le
+5bon.
+bon2an
+bon2da
+bon2d1e
+bo2ne
+2b1onk
+5bons
+boo4l
+boo2ti
+b1op
+bo1r2an
+bo2r3as
+bo4rä
+bor2da
+bor2d3r
+bo2rei
+bo4rig
+b1ort
+bor4ter
+bor6t5rat
+bo4ruh
+bo2sc
+bo3se
+bo4s3p
+3bot
+bote3n4e
+bo3th
+bot2st
+bot3t
+3b2ox
+bo2xo
+bö2b3
+2böf
+2b1ö4l
+2b1p4
+bpa2g
+2b1q
+b2r4
+2br.
+b4ra.
+2b3rad
+2b4rah
+b4ra3k
+bra4ss
+brast4
+2b3rat.
+bra4t3er4
+2b3ratg
+3brä
+4bräd
+brä4u
+2bre.
+6b5rechte
+2b3red
+2b3ref
+2breg
+b3reif
+2b3rek
+breli1
+3b4rem
+2b3rent
+2breo
+2b3rep
+b4rer
+bret6t5en
+bri2da
+brie4fa
+2b3riem
+b4rien
+bri2er
+b3ries
+2brigk
+b4rina
+2b3rind
+b4rio
+b4risc
+2briß
+b3ritt
+2b3roh
+2b3rol
+b4ron
+2b3rost
+bro2tr
+brot3t4
+2b3rou
+3b4rö
+b4ruc
+2bruf
+b4rum
+2b3rund
+bru4s
+brust3
+bru2th
+3brü
+4b3rüb
+brü4ss
+2b1s
+b2sad
+bs1amb
+b4samt
+bsas2
+bsa3sse
+bsau2r
+bs1än
+b4s3är
+b3säu
+b5sc
+bsch2a
+b6schan
+b6schef
+b6sco
+bs2cu
+b3se.
+bs1e2b
+b3sel.
+bse2n1
+b3sen.
+b2s1ent
+bs1er
+bs3e4r3in
+b3ses
+b3set
+b2sim
+bsi2t
+b4ski
+bs3ko
+bs2ku
+b2s1of
+b3s2oh
+b4sop
+bso2r
+b2sö
+b3s2pi
+bs2pl
+bs2pu
+bs3s2
+bst1a2b
+bs2t1ak
+bst3ank
+bs2t1a4s
+bs2tau
+b3stä
+bs1tät
+bst1er
+b4stern
+bst3h
+b3stic
+bst3ink
+b2stip
+b3sto
+b4stob
+b4stod
+b4stor
+b3stö
+b3stra
+b2s1trä
+b4s3treu
+bst3ro
+bs2tu
+b3stü
+b4stüb
+bs1ums
+b2s1un
+b3sz
+bs2zep
+bs2zi
+4b1t
+bta4st3r
+b5te
+b2t3h
+bti2s
+bt4r
+btran2
+bts2
+btü1
+bu4chec
+bucher6
+bu6ch5ers
+bu3ches
+bu2chi
+buch3s4p
+bu2e3
+bu2f
+bull3a
+2bumf
+2b3umk
+2buml
+2b3umr
+bun4d3er
+bunde4s
+b1une
+b3un3gn
+2b1unh
+bur1c
+b2urg
+burg1a
+bur4gan
+bur4gar
+bur4gin
+bur2gr
+bu3r2i
+2burn
+b3ursa
+burt4s
+bu2sa
+bu2sc
+bus3cha
+bu3sche
+bu6schei
+busch3w
+bu2si
+bu2s1p
+bu4sses
+bu6s5term
+bu2s1tr
+bu2su
+bus1un
+2büb
+bü1c
+bügel3e
+bü3s4
+2b1v
+4b5w
+3b2y1
+by3p2
+bys2
+2b1z4
+b5ze
+bzeit1
+bzu1
+1c2a
+cab4
+ca3bl
+ca2c
+ca2e3
+ca3g2
+ca1h
+cal2a
+cal2f3
+cal3t
+2can
+cana3
+ca2pe
+car3b
+car3n
+carri1
+ca3s2a3
+ca3t2h
+ca1y2
+cä3
+cäs2
+c1b
+2cc
+c1ce
+c1ch2
+cchi1
+c2d2
+c3do
+2cec
+1ced
+ce2dr
+ce1e
+2cef
+ce1i
+ce3in
+2cek
+3cels
+cen3a
+ce3nu
+ceo2
+1ce1r
+cere1
+cere3u
+ce3r2i
+ce3s4h
+cet1am
+ce1u
+1cé
+c1f
+c1g
+c2h
+4ch.
+2chab
+ch3a2b3i
+2chac
+2ch1a2g
+2ch1ak
+3chanc
+chan3f
+ch1ang
+4chanl
+2chanz
+1chao
+2char.
+1chara
+3chard
+3charta
+cha2sc
+chasi1
+1chato
+2chatt
+2chatu
+ch5austr
+chau3t
+ch1äh
+ch1ärm
+ch1äs
+1châ
+2chb
+6chc
+2chd
+che3b
+ch3e4ben
+ch3echt
+ch1edi
+1chef
+3chef.
+che4fer
+3chefs
+2chei
+ch1eim
+4chelem
+che4ler
+1chemi
+3chemik
+2chemp
+che4neb
+che2no
+4chents
+4chentw
+cher3a
+4ch3erbs
+6chergeb
+4cherke
+cher6zie
+ch3es2s
+2ch1e2ta
+2ch3e4x
+1ché
+2chf
+2chg
+2chh
+1chia
+2chic
+chi3na
+4chind
+3chines
+2chinf
+2chinh
+2ch1ins
+2ch1int
+2ch1inv
+1chip.
+1chiru
+2chiso
+2chj
+2chk
+2chl4
+ch2le
+chle2i
+ch2lu
+4ch2m4
+2chn4
+chner8ei.
+ch2neu
+c4ho
+2chob
+cho2f
+ch1off
+chof2s
+ch1oh
+cho3l2a
+ch1orc
+ch1ori
+ch2os
+ch3öl
+2chön
+3chör
+2chp
+ch2r4
+2chra
+ch3rad
+chra3g
+2chre
+chre3s
+ch3rh
+2chrit
+3chromo
+3chron
+4chs
+ch4stal
+2cht
+ch2tru
+2chuf
+2chuh
+2ch1unf
+2chunm
+2chunt
+2chur
+ch1urs
+2chut
+2chü
+2chv
+2chw
+1chy
+2chz
+ci2ak
+ci1c
+ci1es
+cill2
+ci2na2
+c1int
+ci2s1
+cisch2
+1cit
+c1j
+4c2k
+c4k1a
+cka2b
+ck2ad
+ck2ag
+cka2m
+cka4r1
+ck1ä
+ck1eh
+ck1ei
+cke4na
+cken6sem
+cke2ra
+ck2ere
+ck3er4hö
+ckerk4
+ck2ern
+cke2ro
+ck1err
+cket2t
+ck1id
+ck1in
+ck4is
+ck3l
+ck3n
+ck1o2
+ck3ot
+ck3ö2
+ck3r
+cks2al
+ck3sc
+ck4spen
+ck3te
+ckt2i
+ck1uh
+ck1um3
+ck1up
+c2l2
+c4le
+cle4a
+clet2
+clin2g
+cli2p1
+clip3a
+clo1c
+1clu
+clu4b
+c2m2
+c3me
+c3mu
+1c2o
+co1ch
+co2d2
+co4de.
+co3di
+cof3f2
+coi2
+co1it
+co2ke
+co3la1
+co2leu
+co5l2o
+com4te.
+comtes4
+con2ne
+co2pe
+co1ra
+cor2da
+co4re
+cor3t
+cos4
+co2te
+coti2
+2cp
+c1q
+1c2r2
+cra4s
+c3rä
+3cre2
+4cree
+cre4mes
+cros4
+cry2
+2c1s2
+cs4f
+c2si
+cs3so
+4c1t
+cti4
+ctio2
+ction5
+ctur6
+1c2u
+2cua
+cu2e
+cu2p3
+cussi4
+c1w
+3cy
+c1z
+3da.
+da1a
+2d1ab
+d3a2bak
+d2abä
+d2abe
+d3a2ben
+d3a2bi
+d3a4bo
+dab4ra
+da2bri
+da3brie
+d2ab4rü
+d1ac
+d2ac.
+dach3a
+da2cho
+4d3achse
+d1ad
+da2de
+dad4r
+d1af
+2daff
+dafo4n
+d1ag
+dagi4o
+dag2o
+dah3l
+da1h2o
+dai2
+dail5
+da1in
+2d1air
+da1is
+da2kro
+dal2a
+2d1a2lar
+dal3b4
+4d1all
+da3lö
+2d1alp
+d1al3t2
+2dalte
+da1lü
+3dam
+d1amma
+4d1ammä
+damo3
+d2amp
+damp7f8erf
+4d1amt
+3d2an.
+d1ana
+da2nan
+da4nat
+2danb
+dan4ce.
+d1and2
+2danda
+d2andy
+3dane
+4d3anei
+2danf
+d1ang
+2danh
+d2ank
+dan2kl
+dan2k1o
+dan2kr
+2danna
+d1a2no
+2d1ans
+2danw
+d2anz.
+2danzi
+2danzü
+2d1ap
+d2aph
+da2por
+4dapp
+2daq
+da2r1a
+2darb2
+2d3arc
+dar2da
+dar2d1e
+dare2
+daren1
+dar3g
+3darl
+dar2m1a
+dar2m1i
+dar4mu
+da2r3o
+3dars4
+2d1art
+dar2th
+dar2tr
+da2ru
+d1arz
+das2
+da3sh
+d1asp
+das3s
+d1asy
+dat2e2
+da3tei
+date4n
+4d3atl
+4datm
+da2tom
+dat2st
+2d3atta
+3daub
+2daud
+dau3e2
+dauer3e
+2d3au2f
+2d3aug
+2dauk
+da3unt
+2d1aus
+3daw
+d1ax
+3däc
+2d1äg
+2d1äh
+2d1ämt
+2d1änd
+2d1äng
+2d1äp
+2däq
+2därz
+2d1ä2u
+dä3us
+2däx
+2d1b4
+dbe2e
+dbu2c
+dbu3s
+2dc
+d3ch
+4d1d2
+d3da
+d3dä
+d3de
+d3dh
+d5do
+1de
+dea2d
+de3alo
+de3ar
+de3a2t
+d2eb4
+3debü
+de1ch
+deco3
+de2del
+de2dit
+2de3e4
+de2fa.
+2d1eff
+def4l
+deg2
+de3gl
+deh2a
+dehe2
+3dehn
+2d1ehr
+d1ei
+3d2eic
+2deid
+de3i4den
+4deie
+2deig
+de3il
+3d2eim
+4deime
+4deinb
+dein2d
+de3inse
+dein6sta
+4deinw
+2deise
+d4e1ism
+dei2sp
+2dekz
+de2l1ac
+del4ade
+de3lak
+de4l3aug
+del3änd
+del3b2
+del1ec
+delei4g
+de3lein
+2delek
+2delem
+de2len
+deler2
+deler4r
+2delf.
+2delfm
+3delik
+del4lan
+del4lar
+dell3au
+del2l1ä
+dell3eb
+del4lei
+del4ler
+del2lö2
+de2l1ob
+del2se
+del2so
+del2s1p
+del3t
+dem2ar
+2d1emb
+dement4
+de6mentg
+dem5ents
+de3min
+2d1emot
+2d1emp
+d2en.
+den2am
+de2n1e2d
+de4n3end
+4denerg
+de3n2es
+4d3en4ge.
+de2ni
+denk3li
+de2nos
+dens4am
+den6s5cho
+4den4sem
+den6sere
+den6s5tau
+2dentd
+den3te
+4dentf
+2d1entg
+den3th
+2dentn
+2dentw
+2dentz
+den6zers
+de2ob
+2deol
+de1on
+depi4so
+dep4l
+2depoc
+dep5t
+d4er.
+dera2b
+der3af
+dera2n
+de3rand
+de2r3ap
+de1ras
+de4r3asi
+der2bl
+4d1erbs
+2derdb
+de2re2b
+de4reck
+de3reie
+de4r3ei4s
+d4eren
+de4r3end
+de3r4erb
+de3r4erf
+derer3n
+der3ero
+derer4t
+de2r1eu
+derf4
+d4erfl
+d2erhü
+derin4f
+de6rinnu
+derin8teg
+der3k2
+4derklä
+d4erlan
+d2erm
+de1ro
+de2rop
+derö4
+der3r
+derst2
+der3sta
+dert7ende.
+dert4ra
+6dertrag
+der8trage
+3de3ru
+de4ruh
+de4rum
+2d1erz.
+2d1erzv
+d2es.
+de2sa
+de4s1a2g
+des1ah
+de4s1am
+des3an
+de2s1än
+de2seb
+de4s1e2h
+de2sei
+des3eil
+2d1esel
+des3elt
+de3sem
+des4end
+desen3e
+de3sens
+des3erm
+de2set
+de4s1in
+3desk
+des1o
+de2sor
+de2s1p
+de3spe
+dess2
+des3se
+des5st
+de6st5alt
+de6stant
+de8steige
+de8steins
+des4tex
+de4stit
+de6st5rat
+de4stre
+de2su
+des1un
+3desw
+de3ta
+deten4t
+de2thi
+2d3etw
+2d1eul
+deum3
+de1un
+de1url
+de3us
+2d1e2vid
+devil4
+de2xer
+de2xis
+2d1f6
+2d1g2
+dgas3tr
+d2ge.
+dge3r
+dger2e
+dge3s
+d2gesh
+dge2t3a
+dge4t1e
+2d1h2
+4dho
+d3hu
+1di
+di2a
+di3ar
+dia3s
+diat4
+di4ath
+dib4
+3dic
+di1ce
+di3chl
+dicht6er
+4d3i2co
+d2ida
+2d1ide
+2didy
+di2e
+di3e4d
+di3enb
+di3end
+die4neb
+diener6l
+di3e2ni
+dienst5r
+dien3z
+di3ers.
+dies3c
+di3e2th
+3dif
+3dig
+dige4s
+dig4n
+dik2a
+dil2s1
+2d1imb
+2dimp
+din4a
+2d1ind
+di3n2e
+2d1inf
+3ding
+2d1inh
+2d1in1it
+2d1inj
+2d1ins
+2d3int
+2d1inv
+di2o3b
+dio4n3i
+dion5s2
+di3ora
+dio5s2
+di2osk
+di1p4
+di3pt
+d1i2ra
+di4re.
+di2ren
+di2rin
+di2ris
+2d1irl
+2d1irr
+di4s1a2
+2diso
+di2sp
+di3s4per
+2d1isr
+dist2
+distel3
+di2s1to
+di4s3tra
+di4sz
+di2ta
+dite1c
+di4t3erl
+di4t3erm
+di4t3ers
+di2tin
+di2tob
+di2t3r
+dit3s
+di2t1u
+di5v2
+diz2
+2d1j
+2d1k4
+4d1l2
+dlap4
+d3le
+dle2ra
+dli4f
+dl3m
+dl3s
+2d3m2
+4d3n2
+d5ne
+dni2
+dnis1
+dni3v
+do5a
+d1ob
+3d2oba
+dob4l
+do1chi
+d1of
+do2fe
+2d1oh
+doll2
+d3o2ly
+do2mal
+do2mar
+domen1
+do4ming
+do2mu
+don2a
+do5nan
+doni1
+2dope
+2d1opf
+do1r4a
+2d1orc
+2d1ord
+dor2f1a
+dor2fä
+dor2f1i
+dor2fl
+dor2fo
+dor2fr
+dor2f3u
+2d1org
+dori1
+d2orn
+2dort
+dor4ter
+dor2tr
+d2os.
+dose4
+do5s2k
+2dosm
+do2st1
+dost3a
+do3ta
+do2t3o
+do2tre
+do3un
+dow2s
+dox2
+d1ö
+dö2d
+dö2f
+4dö4l3
+dölla3
+d2ön
+3d2ör
+dö2s1c
+2d3p2
+dpass3
+dpo4st
+2d1q
+d2r4
+3d4ra.
+3d4rab
+2d3rad
+2drahm
+2d3rak
+3d4ral
+d3ramp
+d3rand
+dran3k
+dra4s3s
+2d3rast
+2draub
+2d3rauc
+d4rauf
+2draum
+2draup
+2dräd
+d4räh
+2d3rät
+2d3räu
+4dre.
+2d3rea
+d4rea.
+d4reas
+3d4reck
+2d3ref
+2dreg
+3d4reh
+dre2ha
+2d3reic
+3d4reie
+d4reiv
+d4rej
+2drek
+dreli1
+4drem
+4d3ren
+4d3rep
+4d3rer
+4dres.
+d4resc
+2drese
+dres6sei
+d4rew
+2d3rez
+2d3rh
+d3ri
+3d4ri.
+3d4ria
+d4rib
+2d5ric
+d4rid
+d4rie
+d5rieg
+3drif
+4driff
+d4rift
+d4rik
+d4ril
+d4rin.
+2d5rind
+2drip
+3d4risc
+2drisi
+2driss
+2driß
+3d4rit
+4dritu
+2d3rob
+d3roc
+d3rod
+d4rog
+2drohr
+3d4rohu
+d4roi
+2d3roll
+2d3rose
+d4ross
+2d3rost
+2d3rot
+2d3rou
+2d3rov
+d3row
+drö2sc
+d5rub
+3d4ruc
+2d3rud
+2d3ruh
+4d5rut
+drü1b
+3d4rüs
+2d1s
+ds3ab
+d2s1alk
+d4s1amt
+d2san
+ds3ane
+ds3assi
+dsau2
+d2saut
+ds1än
+ds2äu
+4dsb
+d4schef
+d4schin
+dsch4r
+d3s2co
+d2scr
+d2s1e2b
+dse2e
+d2s1ef
+ds1eh
+d4sehe
+ds4eign
+d2sein
+d2s1emb
+dsen3er
+d2s1eng
+d2s1ent
+d2s1erf
+d2serh
+d2s1erk
+ds1err
+d2s1ers
+d2s1ert
+d2serz
+dse2t
+d2s1eta
+d2s1ev
+d2sex
+d3sha2
+ds2hak
+d4shal
+d3sho
+d4shor
+d2sid
+d2s1im
+d3s2inf
+d3s2kal
+d3s2kel
+4dsl
+d4sli
+d3soh
+d2sop
+dso2r
+ds1ori
+d2sö
+ds3part
+ds1pa4s3
+d2s1pat
+d2spä
+d2s1pec
+ds2pen
+d4speri
+d2s3ph
+d3s2pi
+ds2por
+d6sporto
+d3spri
+d2spro
+ds2pu
+dss2
+dst2
+d4stabe
+d2stas
+ds3tauf
+d4s3täti
+d4stea
+d4stele
+ds2til
+d2s1tis
+d4stoch
+d2stod
+dstras4
+d4stren
+d3s2tro
+ds1ums
+d2sun
+ds2zen
+2d1t
+dta2be
+d3t2ac
+dtach3
+dta2d
+d3t2ag
+dtam3m
+dta2n
+d3t2as
+d3tea
+d2th
+d4thei
+dt3hi
+dt3ho
+dt4hy
+d3to2
+d4to4b
+dt2op
+d3tö
+dt3r
+dtran2
+dt1s2
+dt3sa
+dt5st
+dtt4
+dt2un
+d3t2ur
+d3ty
+1du
+du1alv
+du1ar
+dub3l
+du2bli
+du1ce
+du2f
+2d1ufe
+duf4ter
+duf2to
+duf2tr
+2d1uh
+du1i
+du2kr
+du4l3art
+dult4
+2d1umb
+2dumd
+2d1u2m1e
+2dumf
+2dumg
+4d3umk
+2duml
+d2ump
+2dumr
+2d1ums
+d2ums.
+2d1umv
+du2n
+2d3un3d
+dund2a
+dun4de
+2d1unf
+2d1ungl
+2d1uni
+dun3ke
+dun2kl
+2dunr
+2dunsi
+dun4st3r
+2dunt
+2dunw
+2d3unz
+du1os
+dur2c
+durch3
+2d1urk
+2d1url
+2d1urn
+2d1ursa
+2d1urt
+du4schn
+du4schr
+du4sch3w
+dus2t
+2düb
+d3über
+2d1v2
+4d1w
+dwa2
+dwa4r
+dwe2s
+dwest1
+1d2y
+4dyl
+3dyn
+dys1
+dy2sp
+4d3z2
+2e1a
+e3ab
+ea2be
+e4abi
+ea2b3l
+ea4bo
+ea4br
+eadli4
+ea2dr
+ea2g
+ea3ga2
+ea3g4l
+eakt2
+e2akta
+e3akto
+ea2la
+e3alei
+e4alem
+ea4l3ent
+ealer2
+e3a4lerg
+e3alex
+e3a2lin
+eal5le
+eal3lö
+eallö3s
+e2alo
+e2alti2
+eal3tr
+ea2l3u2
+eam3
+e2am4e
+eam1o
+eams2
+eamt2
+ea4na
+ean3a2r
+e3anf
+e2ano
+e3ar.
+ea2ra
+e2are
+e4are.
+ea2r1ei
+ea4rene
+e4arer
+e4ares
+ea2ro
+e3arz
+e3a4sc
+easin4
+ea2sp
+eas5s
+eate2
+eater1
+e3ath
+eat3s
+e3at3t4
+eatu3
+e3aue
+e3auf
+eau2fe
+e4aufo
+eau3g
+eau3n
+eaus3s
+e2av
+e3ä4
+e1b
+2eba
+e3bak
+eba2p
+e3bän
+2ebea
+2ebec
+2ebed
+ebe1er
+2ebeg
+eb2el
+ebe4ler
+ebe2lo
+ebenen3
+2e3ber
+ebe4ras
+ebert4
+4ebes
+ebese2
+ebe4s3eh
+2ebet
+ebet4s
+2ebew
+2ebh
+2ebi
+2ebl
+eb2laß
+e3blä
+eb3ler
+eb4leu
+e3blie
+eb3lo
+eb2lö
+2ebo
+e2bob
+ebö2s
+2ebr
+eb4rea
+2eb2s
+eb6sche
+ebse2
+ebs3in
+ebs1o
+ebs1p
+ebs3pa
+ebs3tau
+eb4stät
+ebst4h
+ebs1ti
+eb4stot
+eb3str
+eb4sz
+2ebu
+e2bunt
+ebus3s
+ebu2t1
+2eca
+2e1ce
+ech1am
+ech1ä
+2e1che
+ech1ei
+ech2en1
+e6ch5erzi
+e1chi
+ech3l
+ech3m
+ech3n
+e2cho.
+ech1ob
+ech3ö2
+ech3r
+ech4ri
+ech3ser
+echst5re
+ech3t4ei
+ech6terh
+echter8ha
+e1chu
+ech1w
+e1ci
+eci4a
+ec4k
+ecke4n1
+eck3ser
+eck4sta
+2eckt
+3eckty
+2e1cl
+2eco
+2ect
+e1d
+ed2a
+ed2dr
+ed2e
+ede2al
+ede3n4er
+eden4s3e
+eden4s3p
+edeo2
+ede2r
+eder3a
+ede4ran
+ederer4
+edert2
+ed2i
+e3di.
+edi3an
+2edip
+edma3
+edmas2
+e3d2o
+ed2ö
+e3drei
+ed4seh
+ed2s1es
+ed2si
+ed2s1o
+ed2s1p
+ed2s1tr
+ed2s1u
+edu2s
+e3dy
+edys2
+2ee
+ee3a2
+eeb2l
+ee1c
+ee2ce
+ee2cho
+e1eck
+e2ed
+eed3s2
+ee3e2
+e1eff
+eef4l
+eeg4
+e1ei
+ee3ing
+eein4se
+eei5se
+eeis3s
+eel2e
+e3e2lek
+eele4n
+eel2ö
+e2e3m2a
+eemas3s
+ee3mä
+e1emb
+e1emp
+e1en
+eena2g
+e2e3nä
+e2enc
+e2e3ne
+een1er
+e2eno
+een3s
+een2z
+ee3o
+e2ep
+ee3po
+eer3as
+e1erbt
+e1erd
+ee3re
+eer1ei
+ee4r3en4g
+eer2e4s1
+eer3k
+ee1ro
+ee1rö
+eer2ös
+eers2
+eerst4
+eert2
+ee3r2un
+e1erz
+e2es
+ee3sh
+ee3sp
+ees2t
+e2et.
+eet2a
+ee2tat
+ee2th
+eet2i
+eet4r
+ee2tu
+ee1u2
+e2ew
+eewa4r
+eeweis4
+e1e2x
+e1f
+e2f1ad
+ef1ana
+ef1ar
+e2farc
+e2fat
+2efä
+efäs4
+efä5sse
+e2fäu
+2efe
+e2f1e2b
+e3fef
+efe4l3ei
+ef1em
+e2femi
+efe2n1
+3e2f1ene
+e2fent
+efer5f
+efer5r
+efeuil4
+ef2fä2
+3effek
+1effi
+ef2fl
+2efi
+ef1id
+e2f1ins
+efi2s
+2efl
+ef4le
+e3f4lu
+e3flü
+2e3f2o
+2efr
+ef4reih
+ef3rol
+ef3rom
+ef4ru
+ef4rü
+efs2
+ef3sc
+ef3so
+ef3sp
+ef2tan
+ef2tei
+2efu
+e2fum
+2efü
+e1g
+eg1a2m
+eg2anz
+egd4
+e3ge
+ege4l3au
+ege8l7ei8er
+ege4ler
+ege2lo
+eg2en
+ege4n1a2
+ege6nero
+ege2ra
+ege4s3to
+ege4s3tr
+ege1u
+2egi
+2egl
+e2glo
+e2glu
+e2gn
+eg3nä
+eg3ni
+ego1p
+egro5sse
+eg4rö
+eg4run
+eg4sal
+eg4s3an
+eg3sau
+egsau3g
+eg3se
+eg4sei
+egs2e3l
+egs2pe
+egst2
+eg2th
+2e1ha
+eh1ach
+e3h2ah
+eh2al
+ehalt4s
+e3hand
+eh1arm
+e2harz
+e3haut
+e1hä
+ehäs3
+e1he
+eh1eff
+eh1ein
+e3helf
+eh1elt
+e4hense
+e4h3ente
+ehen4tr
+1e2hep
+2eher
+ehe1ra
+e2h1erf
+e2h1er2l
+2e1hi
+eh3im
+ehis4
+ehl1a
+eh1lam
+eh2l3au
+eh1lä
+ehl3ein
+eh4lent
+eh5l2er
+ehlo2
+ehl1or
+ehl2se
+2ehm
+eh2mab
+eh4mant
+eh3mu
+2ehn
+eh3na
+eh3no
+2e1ho
+eho2f
+eho2l
+eh3oly
+ehö4rer
+eh2r1a4
+ehr1ä
+ehr1ec
+eh2rei
+eh2rel
+ehr6erle
+ehr4ern
+ehre3s
+eh4rin
+ehr1ob
+eh1roc
+ehr1of
+eh1rö
+eh2s2
+eh3sa
+eh3se
+eh3sh
+eh3si
+eh3so
+eh3sp
+ehst2
+eh3sta
+eh3sto
+eh3str
+2eht2
+eh3ta3
+eht4r
+2e1hu
+eh1unf
+e2huni
+e3hur
+e1hü
+eh3üb
+eh1w
+e1hy
+2ei3a4
+ei2bar
+ei2bli
+ei4blu
+eibu2t
+ei4b3ute
+ei1ce
+ei2cho
+e2id
+ei2d1a
+ei3de
+eid4ein
+ei4deis
+eid5erre
+2eidn
+ei3do
+ei4ds
+ei1e
+eie2b
+ei3e2l
+eie2m
+4ei3e2n
+eienge4
+eie4s
+eie2t
+4eif.
+ei1flo
+1eifr
+2eig.
+2eiga
+eig2ar
+2eigä
+2eigeb
+2eigeh
+4eigeno
+5eigensc
+2eig2er
+2eiges
+2eigew
+2eigi
+ei3gl
+ei4glo
+1ei2g3n
+ei4g3rat
+2eigre
+2eigrö
+2eigru
+2eigrü
+2eigs
+2eigt
+2eigu
+4eih
+ei2hum
+ei2kak
+eik4am
+eik2ar
+eik2i
+eik2l
+ei3k4la
+ei3klä
+e2il
+2eil.
+ei2lam
+eila2n
+eil3ane
+ei4lant
+ei4l3anz
+ei2lar
+2eilb
+eil3d4
+ei4lein
+eile2n1
+ei2let
+eil3f4
+eilm2
+ei2lob
+eil2ö
+2eim.
+ei2mab
+ei2m1a2g
+eim3all
+eim3alp
+ei2m1or
+2eimp
+eim2p4l
+eim3sa
+ei2mur
+e4i2n1a
+ei4nac
+eina2d
+ei4n3an
+ei4na4s
+ei4n3at
+ei2n3ä
+ein6derk
+ein3ebe
+ei2nel
+ei4n3en4g
+ei6nen6se
+ein5erbe
+ei4nerf
+ei4nerk
+einer6sc
+ei2neu
+ein4fiz
+5einflus
+5einfluß
+2einfo
+ein4fo.
+ein4fos
+ein3g2
+3einger
+e4ingr
+e2inhä
+ei2n3ie
+e1init
+ein3k4
+ein6karn
+3einkä
+e2inl
+ein3n2
+ein4nen
+ei2n1o4
+1einri
+e4insa
+einsas6s
+einsa7sse
+3einsat
+e2insc
+5einschä
+ein6stal
+ein6terv
+3eintö
+3einträ
+1einu
+ei3o2
+ei1p
+eip2f
+2eir
+eir2c
+ei3re
+e1irr
+e4is.
+ei2sa
+ei3sas
+ei6schwu
+ei4serg
+ei4s3erl
+ei6s5erst
+ei4s3erw
+1eisho
+ei3s2ky
+eis2pe
+e2i3s2s
+eisser6s
+ei2str
+eistra6s
+ei2sum
+ei2sur
+1eiswo
+e2it
+ei2t1a2b
+ei2tal
+ei2tan
+ei2tap
+ei2tar
+ei4tat
+2eitä
+ei2tän
+ei3tei
+eite4ra
+ei2t3h
+ei2tin
+ei2tor
+ei4trau
+ei2tro
+eit4sag
+eit3t4
+ei2t1um
+ei2t1ur
+eit3z2
+eiv2
+eive4
+ei2zar
+ei2z1in
+2e3j
+e1k
+e3k2a
+2ekä
+1ekd
+ek2e
+e3ke.
+e3ke4n
+e3kes
+e3key
+e3k2l
+ek4n
+e3k2o
+ekor4da
+e3kr
+ek4s1p
+2ekt
+ek5t6ante
+ek2t3at
+ek2tä
+ek2te2l
+ekt3erf
+ekt3erk
+ek4t3er4z
+ekt2o
+ek2t3o4b
+2e3ku
+ekur2a
+e3k2w
+1ekz
+e1la
+ela2br
+el2abt
+el3abu
+el3ader
+el1af
+2elai
+e2l1ak
+el1a2m
+el2a3mi
+e3lamp
+el1ana
+e4landa
+e2l3a2ne
+e2lanm
+e4lans
+e2l1ant
+e4lanw
+e2l1anz
+2elao
+e2l1ap
+e2l1ar
+ela2re
+el3a2ri
+el3arr
+el1a4si
+el1asp
+2elat
+el3aufw
+2e1lä
+e3läd
+2eld
+el4d3erf
+eld3erl
+elder4p
+elder4s
+eld5erst
+el3des
+el3dri
+eld3s2
+4ele.
+e3lea
+elea2r
+el3echt
+4eleh
+el3ehe.
+2elei
+e6l5ei6ern
+e2l1ein
+e3leine
+1elek
+e2l1el
+1e2lem
+2e3lem.
+e3lema
+ele2mi
+2el1emp
+2e3len.
+elen1e
+elen4k3l
+e4lense
+e2l1ent
+e3lep
+2eler
+e3ler.
+eler2a
+el1erd
+e6lereig
+el1erf
+e4ler4fa
+e4lerfi
+e2lerg
+el1erh
+el1erk
+e2l1erl
+e4l3ernä
+eler2ö
+e2l1err
+el1eru
+el1erw
+eles2
+e2l1ess
+e2l1e2ta
+ele2ti
+elet4ta
+el1evo
+el1ex
+e3lex.
+1elf.
+elf2er
+1elfm
+1elft
+elgi5er.
+elgi5ers
+el3g2l
+eli4are
+e2l1id
+2e3lie
+eli3ef.
+2elig
+e2lim
+elin3a
+eli3no
+el1ita
+2elk
+elks2
+elk3sc
+ella3d
+el2lap
+el4larb
+el4lart
+ella2s
+ell2ei
+ell3ein
+el4lel
+ellenen5
+ell2er
+el3lie
+el2lil
+1ellip
+el2lo2g
+el2lor
+el2lot
+ell2ö
+ell3sp
+el2lu2m
+el2lü
+elm2a
+elm2e
+elm3ein
+2eln
+2elo
+e2l3oa
+el1obe
+e2lof
+e2lol
+e2lonk
+e2l1or
+e3lore
+elo2ri
+e3lot
+e3l2ov
+2elö
+el3p4
+el4s5ein
+el2sum
+el4tans
+el3te.
+elte4m
+el5ten.
+el4t3ent
+elter4b
+elter4f
+elter6le
+3elter4n
+elter6sc
+el3the
+elt3se
+2e1lu
+el1uf
+e2l1um
+el1ur
+el3use
+elu2t
+el3uto
+e1lü
+2ely
+e2lya
+el3z2ac
+el2zar
+el4zene
+el2zwa
+2elzy
+e1m
+e2m3a2b
+em1alk
+e2manf
+e2m1ano
+e2m1ans
+em1app
+e4m1a2sp
+emas2s
+ema3sse
+e3maß
+2emä
+em2äh
+emb6
+1emba
+1embo
+3embry
+em2dä
+emd1r
+em2dra
+2eme
+e2m1e2b
+e2mef
+e2mele
+e3m2en
+emen6gel
+emen3ta
+emen4t3h
+e2m1erl
+em1erw
+e4mesu
+3e2meti
+e2m1i2d
+2emie
+emi2ei
+e2mig
+emi3k2
+em1im
+2emin
+emi3n2a
+e3mind
+em1int
+1e2mir
+e3misc
+1emiss
+em2map
+emma3u
+em2mec
+e2moa
+e2mof
+e2mop
+emo3s
+1empf4
+em3pfl
+em3po
+empo5s
+em2sa
+em4scha
+em2sim
+em2spr
+em3t4
+1e2mul
+e3mur
+e3mus
+2emü
+emü3s2
+e2na
+4ena.
+e4n3a2b
+4enac
+e4n3ack
+2e3nad
+enadi4
+e4naf
+4enah
+en3ak
+en1al
+e4nalb
+e3nale
+en2alg
+ena3l2i
+e4nalk
+e4nalm
+e4nalo
+enal3p
+4en1am
+ena4n
+e4nand
+en3ane
+e4nant
+e4nanz
+e4n3a2p
+en3a2re
+en3ark
+en3aro
+en1a2s
+ena4sc
+e4na4st
+2enat
+4e5nati
+e4natl
+enat2s
+e4n3att
+4enatu
+e4nau2f
+en3aug
+e4n3aur
+e4naut
+en1a2x
+en3a2z
+e2n1ä
+e4när
+enbu4s3
+en2ce.
+1ency
+end2ac
+en2dal
+en4dang
+2endel
+ende4lä
+endermas8
+en4d3es4s
+en2dex
+en3d4ort
+end3rom
+end3s2l
+end3s2p
+end3sz
+en3d2um
+en3d2ü
+2ene.
+ene4ben
+en1ec
+e2neff
+en2eid
+e3neien
+e4neige
+4eneigu
+e4nein
+e4neis
+en1e4kl
+e2n1el
+ene4le
+2ene2m
+e2nemi
+2enen
+e4nense
+e4n1ent
+en4entr
+e2n1ep
+4e3ner.
+en2era
+e2n1erd
+e4n3erei
+e2nerf
+en4erfr
+1energ
+e2nerh
+e2nerk
+e2n1erl
+e4nermi
+e4n3ermo
+4enern
+e4n3erne
+ene2ro
+e2n1err
+en1ers
+4eners.
+e2n1ert
+en4ert.
+e2n1eru
+e2n1erw
+2enes
+e2n1e4sc
+e2n1ess
+en1eta
+e2neth
+en1eul
+e2n1ev
+e4ne2x
+en3f
+enf2a
+enf2u
+1engad
+1engag
+en3g2al
+enge3r4a
+en3g2i
+en3gn
+eng2o
+1engp
+eng4ra
+eng3s2
+2eni
+e3ni.
+e3nic
+e2nid
+4e3nie
+eni3er.
+eni3erp
+eni5ers.
+en3i2ko
+en3ill
+eni4m
+en1ima
+en1imi
+e2nin
+e3nio
+eni2ö
+e2nir
+e4n3iso
+e3nit2
+e3niv
+enk3aus
+enk3erg
+en4k3erk
+en3k2ü
+en2nef
+en2nel
+en4ner4f
+enn3erg
+en4n3erl
+enni6ger
+2enniv
+e2n3oa
+e2n1ob
+e3nobel
+enob4le
+eno2br
+e2n3oc
+e2nof
+en3ol
+eno2ma
+e2n1op
+e2n1o2r
+en2ora
+eno4ri
+4enorm
+eno4s
+en1ost
+4e3not
+eno2w
+2e1nö
+en1ö2d
+en3sabb
+en2san
+ensas4s
+ensa5sse
+en5sche
+en2seb
+1ensem
+en4sen3e
+ens3ere
+en2sid
+en3spo
+ens4por
+ens4tak
+enst5alt
+en4s3tät
+ens4tel
+en6stele
+en6s5test
+2ensto
+enst2ü
+ens3umf
+en2sun
+en3t2ag
+2entan
+en4tanm
+en4tanw
+ent4ark
+1entd
+en3t2el
+ente2n
+en4terb
+1entf
+2entfo
+2entfö
+1entga
+3entgeg
+en2thi
+1enthu
+1enthü
+en2tid
+1entla
+1entn
+en2t1os
+2entö
+en4t3rol
+1entsc
+1entso
+ent4sto
+1entw
+4entwet
+3entwic
+1entz
+en1u
+e2nuf
+e2num
+2enu2t
+e4nuto
+e1nü
+4enwü
+2e1ny2
+enz2äp
+1enzep
+enz3erg
+en4z3erk
+en4zerl
+en4z3erm
+enz5ersc
+enzlan4
+enzo2l
+e1ñ
+4eo
+e1o2b1
+eo3ben
+eo3bl
+eo3br
+eo1c
+eoch2
+eo3dr
+e1of
+eo3g2
+e1oh
+eo3la
+e3o2ly
+e1on.
+e1ond
+e1onf
+e1onh
+e1onl
+e1onp
+e1onr
+e1ons
+eo1o
+e1opf
+e1or
+e3or.
+eo1ra
+e3orb
+e3ord
+e3ors
+eort4
+e3orw
+eos2
+e3os.
+eo3se
+e1o4ste
+eot2e
+eo1ul
+e1ö4
+e1p
+2ep2a
+epa2g
+epas6ser
+2eper
+e3p2f4
+eph2
+1e2pid
+e2pig
+e2pik
+1e2pile
+e3pio
+1epis
+2epist
+1e2pit
+ep3le
+1e2poc
+eport4
+1e2pos.
+ep2pa
+ep2pei
+eppe3l
+ep2pin
+ep4p3l
+ep2pr
+2epr
+ep3sh
+ep2tal
+ept2an
+ep2tau
+e3pu
+epu2s
+2e3q
+er1a
+e3ra.
+e2rach
+e3rad.
+e3radi
+e2radj
+e2r3adm
+e4radmi
+e4r3adr
+eraf4a
+era2g
+e1rah
+e1rai
+er3aic
+e2rak
+e3rake
+e1rald
+eral4eb
+er3alke
+e2r3all
+er2an.
+era4na
+eran3d4
+e3rand.
+e4rangr
+e2ranh
+e2rano
+e1rap
+er3apf
+er3apr
+e2rar
+er3are
+e3rari
+er3arr
+e3ras.
+er3asc
+era4sie
+era2sp
+era4s3s
+e1rast
+era2ß
+era3te.
+e3rati
+er3att
+e1raub
+e1rauc
+er3aue
+erau2f
+er3aug
+e2ra2v
+e1raw
+e2r3ax
+e1raz
+e1rä
+er1äf
+er1äh
+er1ä2m
+er1äp
+e2r1ä4s
+er1ätz
+3erbarm
+erb2au
+erb2e
+erb2sp
+er1c
+er3chl
+erch2o
+erda3me
+1erdb
+er3de
+2erdec
+2erdel
+er4d3en4g
+erd3erw
+erdeu2
+1erdg
+er2dob
+2erdy
+4ere.
+er1eb
+ere4ben
+e3r2ech
+er3echs
+er1eck
+er1edi
+ere4dit
+er1eff
+er1e2h
+ere4i
+6e3rei.
+6e3reib
+er1eig
+4ereih
+e3reik
+e4r3eime
+e2rein
+er3eis.
+er5eisar
+er3eisb
+er3eisf
+er3eisr
+erei5str
+er1e2l
+e2rele
+ere3lev
+ereli1
+2e3rem
+e4r1ema
+er1emb
+e2remp
+e4remu
+2eren
+e3ren.
+e3rena
+eren1e
+e4rense
+e4rentn
+e4rents
+e3renz
+eren8z7en8d
+er1epe
+2erer.
+2ererb
+er3erf
+e4rerfo
+e2r1erh
+e2rerk
+erer4kl
+e2rerl
+4erern.
+e4rerne
+e2rer2o
+erer4ri
+er1ers
+4erers.
+e8rersche
+e2rert
+2ererv
+2ererw
+2eres
+er1ess
+eres3sk
+er1eß
+er1eta
+ere2th
+e4r1e2ti
+3er1eul
+ere4vid
+erf2e
+er3for
+erf4r
+4erfür
+er4g3are
+4ergebi
+3ergebn
+4ergebü
+4ergeha
+4ergehä
+erg5elst
+4ergeni
+3ergiee
+er2gop
+4ergrem
+erg1s2o
+ergs2p
+e4rh
+1erhab
+2erhai
+4erhals
+2erham
+2erhas
+3erhebu
+er3hei
+2erher
+er3hu
+2eri
+e2riat
+e3rib
+4e3ric
+e4r3ico
+e2r1id
+eri2de
+4e3rie
+eri3e2n1
+eri5ers.
+e3ri3k
+erik4l
+4e3rin.
+er1inb
+e2rind
+e2r1ini
+er1ink
+er1inl
+er1int
+e3rio
+4eris
+e2risr
+3eritr
+e3riv
+2erk.
+2erkaj
+er3ker
+1erklä
+2erkm
+2erkre
+erk3t4
+2erl.
+2erlag
+3erlaub
+3erlebn
+4erleh
+erm2
+er3mag
+er3me
+ermen4s
+er4m3ers
+er3mi
+er4n3alt
+er3ne
+er4nene
+er4nerf
+er4nerk
+3erneue
+ern1os
+2e1ro.
+e1roa
+er1ob
+ero2bl
+ero2br
+e2r1o2f
+e1rog
+e1roh
+4e1rok
+e1rol
+er3oly
+e1rom
+er3omb
+2e3ron
+er3onk
+e2roo
+er1op
+e4ro4r
+eror2a
+e1ros
+1erosi
+e3rosit
+e1rou
+e1row
+er1ox
+e1roz
+erö2d
+2eröh
+erö4l
+er1ö2s
+er3p
+er4rade
+er3rä
+2erren
+erri3er
+er3ror
+2errü
+er3s2a
+ers4ana
+ersch4
+erse4h3u
+ers2el
+er5s2i
+er3sk
+ersma3s4
+4ersted
+er6st5ers
+4erstil
+er3swi
+er3sz
+er2t1ab
+erta2d
+er3tat
+4erteig
+er4t3erf
+er4t3er4g
+er4ter4h
+er4terk
+er4ters
+er2tho
+4ertö
+4ertru
+ert3s2e
+ert1s2p
+2eru
+eruf4s
+e4r3uhr
+er1u2m1
+er1und
+e4rundu
+3erup
+er3use
+e2r3uz
+erü4b
+3erweck
+er4zerk
+er4z3ers
+e1s
+es3ab
+es2abb
+e4sabe
+e3sac
+esa2d
+e3saf
+e2sall
+es2an
+es4and
+es3anf
+es3ant
+esa2ra
+e3sarg
+e3sa1s2
+esa3ss
+es3ato
+esa2v
+es1ax
+esäs4
+es2äu
+2esb
+esbi5er.
+e3s2ce
+es2chi
+esch2l
+esch2n
+e4sco
+e3se.
+es1ebe
+e2s1ec
+es1ehr
+e2sein
+ese3in4s
+es2el
+ese4nal
+ese4neu
+e3senk
+esen3o
+esen3sk
+eser4at
+ese4r1u2
+eses2k
+es1eta
+es3e2x
+2esf
+2esh
+es3ha
+es4ham
+es4har
+es3he
+2esi
+esi3er.
+e2s1il
+e4s3ins
+e4siso
+es2kat
+e4s3ke
+e4skl
+e4sky
+e4s3l
+2e4sm
+e4sn
+es2oh
+es2opa
+eso2r
+eso3re
+es2ort
+e3s2ö
+e3spal
+e3s4pan
+es4park
+es2pek
+e2spel
+e4spers
+e4sph
+e3s2pi
+e3s2por
+e3spra
+e3s2pu
+2esr
+2ess.
+es4s1a2g
+essali3
+essau4s
+1essay
+2essä
+2essc
+e4ssel
+e4ssent
+ess4erf
+e4ss3erg
+es4serh
+2essk
+2esso
+es2sof
+2essp
+es2s1pa
+es2spu
+es4stab
+es4ste
+estab4b
+e4stabs
+esta5ge
+est1ak
+e3s2tan
+e4starb
+es2t1a4s
+e3stat
+es2tau
+e4staum
+es2te.
+este2c
+est5eing
+e6st5eink
+e6st5einl
+e4st3eng
+est5erha
+ester6ke
+e4ster4ö
+e4st3erz
+estes2
+e4st3ess
+e3sti
+e4stid
+e4stip
+estmo6de
+1estni
+es2t1ob
+e2stod
+est3ori
+e4strad
+e5strec
+e5strick
+es2tu
+est3ums
+e3s2tü
+e3s2ty
+e3suh
+es1um
+e2sums
+es1ur
+2e4sw
+e3sy
+e2ß1el
+e2ßent
+eße3re
+e2ß1erg
+e1t
+e3ta.
+etab4
+et2abl
+et2a2c
+2e3taf
+2etal
+etal4la4
+etal6li6n
+et1a2mi
+e3t4an.
+et1ant
+etari1
+et4at
+etat3r
+et1äh
+2etb
+2e3te
+ete2e
+e4t1ein
+ete3ke
+et2en
+eten3d2
+ete2o
+eter4hö
+eter4tr
+ete4sp
+2etg
+et2h
+2eth.
+e3tha
+e4t3hal
+et3hä
+1et4hi
+e2thik
+1ethn
+e4thot
+et3hü
+e2tid
+eti2m
+etin1
+e2tinh
+et1ini
+eti2ta
+eti2th
+e4tl
+2eto
+e2t1o2f
+et2on
+eto4n3al
+etons4
+e2torg
+2etr
+e4traum
+et3rec
+e2t3res
+et4ros
+ets2c
+etscher7e
+etsch3w
+et4sh
+et1so
+ets1p
+et1su
+ett1a
+et2ta2b
+et2tad
+et2tak
+etta2m
+ett2as
+et2tau
+et2tä
+et2tei
+ette4n1
+et4th
+et2tö4
+et2t3r
+et2t1um
+et2tur
+et2tü4
+3e2tui
+e3tur
+2e4tw
+etwa4r
+1etym
+e3typ
+2etz
+etze4s
+et2zw
+eu1a2
+eu3b4
+2euc
+euch4ta
+2eud
+eudi4e
+eu2eb
+euer3ei
+eue6reif
+eue6reis
+eueren4
+euerer6s
+euerer6t
+eu3eri
+eu3erk
+eu3err
+eue3s
+eu2e5sc
+4euf
+euf2a
+eu2fer
+eu2g1a
+eu6gense
+eu3g2er
+eu4g3ing
+eu2gre
+eu2gri
+eug1s2
+eu3h
+eu1id
+eu1in1
+1e4uk
+eu2kä
+eulan2
+euland3
+eu3l2e
+eul2i
+2e1um
+e3um.
+eu3ma
+euma3s2
+e3umb
+e3umf
+e3uml
+e3um2s
+eums1p
+eum3st
+e3umw
+2euna
+eun2e
+eu4nei
+e3un2g
+eu2nio
+eu4nis
+eunk2
+eun3ka
+eu1o2
+eu1p
+eup2f
+eu2ral
+eu4r1an
+eu4r3ast
+e2ure
+euren2
+eu4rens
+eur4er
+eur3f4
+1euro
+eu1s4
+e3usar
+eu4sis
+eus5k
+eu3sp
+eu3ss
+eust4
+eut2e
+eu5ted
+eut2h
+1eu3tha
+eu3t2o
+eut6scha
+eut6schn
+eut6schr
+2eux
+eu2za
+eu2zo
+eu2z1w
+e3ü
+e1v
+e2vak
+e3var
+eva2s3
+2ev2e
+eve5ri
+evie3le
+2evor
+ev2s
+e1w
+ewä4
+ewä6s
+e2we.
+ewei4sc
+ewert4
+e3wir
+ewi2s
+e3wit
+2ex.
+e2xam
+2exas
+ex3at
+2exc
+2exd
+e2xel
+e2xem
+ex1er
+2exes
+e1xi
+e3xie
+2exik
+e2xil
+e2x1in
+1exis
+ex3l
+3exp
+2exs
+2ext.
+2ex2ta
+ex2tin
+1extr
+2extu
+2extv
+2exu
+e2xum
+2e3xy
+ey2n
+ey3no
+eys2
+e1z
+e3z2a
+ez2ä
+e2z1enn
+e3zi
+ezi2s
+ez2o
+e3zoh
+ez2w
+é1b
+é1c
+é1g
+égi2
+é1h
+é1l
+élu2
+é1o
+é1p
+é1r
+é1s
+é1t2
+é1u2
+é1v
+é1z2
+è1c4
+è1m
+è1n
+è1r
+1ën
+ê1p
+1fa
+fab4
+2f1ab5b
+fa2ben
+2fabf
+2f1a2bl
+2fabn
+f2abr
+2f1ab5s
+fa4cheb
+fa4chel
+fa2ch3i
+fa2cho
+fachs2
+fach3sp
+fa2ci
+fa2del
+f1ader
+fa2di
+fa2dr
+fa3ec
+fah6l5ent
+fai3b4
+f1a2ka
+fa2ke
+f3aktio
+f2akto
+3f2aku
+fa3la
+fa3le
+fal2kl
+falla2
+fal4lei
+fal6lenk
+fall5ent
+fal6lerk
+faller6s
+fal2li4
+fal6scha
+fal6schl
+fal6schm
+fal3te
+fal2tr
+3fam
+4famp
+f1amt
+3f2an.
+fa2nar
+2fanb
+fand2a
+fan2gr
+2f1an3k
+2fanl
+4fann
+f1anp
+2fanr
+2fanw
+2f1an3z
+2f1a2p
+f2ar
+far2b1a
+far4bel
+far4b3er
+far4bin
+farb3l
+far2bo
+far2b3r
+far2b3u
+f3arc
+3fa5ri
+far2r1a
+farre2
+far4rec
+far4reg
+far2rh
+2f3art
+2f3arz
+3fas.
+fa3s4a
+fa3sh
+f1assi
+fas2t
+2f1a4str
+fa2ß
+f1aße
+f3at
+f4at.
+fa2to
+f4ats
+2f1auf
+f3aug
+fau2s
+f1ausb
+faust3r
+3f4av
+fa2xa
+1fä
+fä1c
+fäh4rin
+fäh2r1u
+f1älte
+2fäq
+2f1ärm
+2färz
+fä4s
+fä6s3ser4
+3fäßc
+fä2ßer
+2f1ätz
+2fäug
+2fäx
+4f1b2
+fbau1
+fber2
+2f1c
+f3ch
+2f3d4
+fdien4e
+1fe
+3fe.
+featu4
+f2ech
+fe2dr
+fe2e1i
+feein5
+fe1em
+2f1e2he
+feh4lei
+f2eie
+f2eind
+2f1eing
+fe3ins.
+2f1einw
+f1ei3s
+5fek
+fe2l1a
+fel3au
+fe2l1ä
+fel2da
+felde4m
+feld6erh
+fel2dr
+fel4d5ri
+2fe2lek
+2felem
+fe2l1er
+fe2les
+fel3la
+fel4lan
+fel2lä
+fe2l1o
+fel4s3oh
+6fel6tern
+felt4r
+fel3tu
+f2em.
+fem4m
+2f1emp
+fen1a
+fena2g
+fen3au
+4fenerg
+fe2ni
+fe2no
+fen3s2a
+fen5s2c
+fenst2
+fen6stri
+f1ent
+2f3entf
+f2enti
+4f3entla
+f2ento
+2f3entw
+2f3entz
+fe2nu
+3fep
+fe2pi
+f2er.
+fe1ra
+fe2rab
+fe2ral
+fe4rang
+fer4ant
+fe4ranz
+fe2rau
+fe2r1ä
+2ferd.
+fer3da
+ferd2e3
+f2ere
+fe2re2b
+fe2rec
+3ferei
+4f3ereig
+fe4r3eis
+f4erel
+fer3ell
+fe4rer4g
+fer4fah
+ferg4
+f4ergr
+ferie4n3
+4fer4leb
+f2ern.
+fer4nei
+fe2rö
+f4erpa
+f4erpf
+f4erpl
+f4erra
+fer4reg
+ferri2
+f2ers.
+f2ert
+fert4r
+f2erz
+fess2e
+fes2t
+fe2sta
+fest3a4b
+fest3an
+fe4st3ei
+fe4stin
+fe2st1o
+fe2st3r
+2f1e2ta
+3fete
+fet4t3a
+fetti3s
+2feu.
+feuer3ö
+3few
+2f1ex
+3fez
+1fé
+4f1f
+f3fa.
+f2fa2b
+ffa2ce
+ff1a2d
+f3fak
+f3fal
+ff1alt
+ff1ans
+ff3ar
+ff4arb
+ffa4s
+ff1au
+ffa2z
+f2f1e2b
+ffe2e
+f2f1ef
+f2f1ei
+ffe3in.
+ffe5inha
+ffel3l
+ffe2m
+f2f1emi
+ff2en
+ff3erle
+f2fetz
+fff4
+ffi3k
+f2fil
+f2fim
+ffi2xi
+ff1lag
+ff3li
+f3flu
+f3flü
+ffo2
+ff1ox
+f2fö
+ff1rak
+f3f4rä
+ff3ro
+ffs2am
+ff3sch
+ff2s1p
+ffs4tau
+ffs1ti
+ff3stü
+fft2
+ffus3s
+4f3g2
+fgeb2
+fge3s2
+4f3h2
+1fi
+3fi.
+fi2ar
+fi3at
+fiden2
+fi2do
+fi1er2f
+fi2k1as
+fi2kel
+fi2kin
+fi2kn
+fi2k1o4
+fi2k3r
+f2il
+fi2l3an
+fil3d
+fi2les
+fi3li
+fi4lin
+fil2ip
+fil2ma
+fil2mä
+fil4med
+fil4mei
+fi2lo
+2fimp
+3f2ina
+2f1inf
+fing2
+fing4e
+fings2
+fi3ni
+f2ink
+2f1int
+fi2o
+fi3ol
+fi2r
+fi3ra
+fi4re
+fir3me
+fi3s4a
+fi4sch3a
+fi6schei
+fisch3l
+fisch3o
+fi4schr
+fi4sch3w
+fi3s2h
+2f1i2so
+fis2p
+fite2
+fi2tin
+fit1o2
+fi2tor
+five4
+fi2xel
+2f1j
+3f2jo
+4f1k4
+fka4t3
+f2l2
+2fl.
+f3lad
+f5land
+f4lans
+f3lap
+f4lasc
+f3lats
+flauma4
+3f4läc
+4f3läd
+f3län
+f3läu
+fl4e
+f5le.
+2f3leb
+2f5lein
+flek3
+flekt2
+f3ler
+f4lex
+f3li.
+3f4lim
+fli4ne
+f3ling
+2flins
+2f5lon
+1f4lop
+f4lor
+flo7s8ses.
+1f4loß
+1f4lot
+flo2w
+f3lö
+4flöf
+1f4luc
+1f4lug
+flu4gen
+flu4ger
+1f4luss
+1fluß
+f4lut
+flut1o
+f4lü
+f5lüd
+f5lüm
+4f3m2
+fma5che
+fma2d
+fmas2s
+fma3sse
+2f3n2
+fni2s
+1fo
+f1ob
+fo2be
+2fober
+fob2l
+2f1o2f
+foli3
+fol2k3
+fo2na
+fo4nan
+fon3au
+fon3dr
+fo3n2er
+fo4nin
+fo2nop
+fons2
+fo2nu
+2f1op
+4f3org
+fo3rin
+for4m3a4g
+for4mas
+for4m3ei
+forni7er.
+for6schl
+for4sta
+for4sti
+for4t3ei
+for4ter
+for2th
+for2t3r
+fort3s2
+for3tu
+for2u
+fot4r
+fo2x
+1fö
+2fö2f
+2f1ök
+4f1ö4l
+4f3p4
+2f1q
+f2r2
+f3ra.
+frach6tr
+2f3rad
+2f3rah
+fra4m
+f3rand
+f5rap
+f3rat
+1frau.
+f3rauc
+2fräd
+1f4rän
+2fre.
+f3rec
+f3red
+2fref
+2freg
+f4rei.
+f3reic
+f4reie
+frei1f
+f4reig
+frei3k2
+2freim
+2frein
+2f3rek
+2f3rep
+2frest
+3f4reu
+2f3ric
+fricht6e
+fri3d
+fri2e
+2frig
+f4ri3k
+f3rip
+1fris
+f4risc
+f4rist
+fri6ster
+2f3roc
+2frol
+1f4ro2n
+fro4n1a
+f4rop
+fro2sc
+f3rot
+frös2
+f3ru
+f4ruc
+f3rü
+4f1s
+f2s1al
+f2sa2n
+fs3ane
+fs3ar
+f2s1a4s
+f2saut
+fs2än
+f2sca
+f4sce
+f4schan
+f4schef
+f4schro
+f2scr
+f2s1e2b
+f4sehr
+fse2n
+fs1en1e
+f2s1ent
+f2s1er
+fse2t
+f2s1eta
+f2s1i2d
+f3s2ky
+f2s1o2
+f3soh
+f3sol
+f3s2on
+fsp4
+f3spann
+f2s1pas
+f2sph
+fs2pie
+f3s2pl
+f3s2por
+f2spre
+f2spro
+fs2pul
+fs3s2
+fs2tal
+f2stas
+f3s2tat
+f4s3täti
+f2stip
+f2s1tis
+fst4r
+f4s3tres
+fs1trü
+fs1tut
+f4stüte
+fs1ums
+f2s1un
+f3sy
+4f1t
+f2ta.
+ft1a2be
+ft1abl
+ft1af
+f3t2ag
+ft1ala
+ft1an
+ft1a2r
+f3tat
+ft3att
+f2t1äu
+ft1eck
+ft1edi
+ft1eh
+fte2he
+ft1eig
+ft1ein
+ft1eis
+ft1eli
+ft1emi
+f2t1ent
+ft3erfü
+ft1erk
+f2t1erl
+f2t1erz
+f2t1e2ti
+f2t1ex
+f2t3h
+f4t5hei
+f3ti
+f4tid
+ft1in
+f4tinf
+f4tins
+fto2
+f2t1of
+ft3om
+f3tor.
+f2t3ot
+f3t4ran
+ft3ro
+ft3ruh
+fts1
+ft2sa
+ft4sa2g
+ft4sam
+fts2c
+ft2se2
+ft4seh
+ftsen1
+ft2s3i
+ft4stem
+ft4ster
+ft4stes
+ft3stie
+ft6stier
+ft3stri
+fttra4
+f2tum
+ft1urk
+ft1url
+ftwa4
+ft3z2
+ftze3d
+1fu
+3fuc
+3fug
+f2uh
+fuku3
+f1um
+fun6derg
+2f1unf
+2f1ungl
+2f1u2ni
+fun2kl
+fun2ko
+fun2k3r
+fun2ku
+2f1unm
+2funr
+2funt
+f2ur
+furch2
+fu4re.
+2f3url
+fus2
+fu3sse
+fus6sen
+fu4sser
+fuss1p
+fuss1t
+fus4ste
+fu2ß1er
+3fut
+1fü
+2füb
+fühl4sc
+fün2
+fü2r
+fü3s2
+2f1v
+4f1w
+f1ya
+4f1z
+fz2a
+fzeiten6
+fzei8t7end
+fz2ö
+fzu2ga
+fz2w
+3ga.
+2gabf
+2gabg
+g4abi
+ga2b5l
+gab2o
+g1abr
+gab4ri
+2gabsc
+2gabtr
+ga3bu
+2gabw
+2gabz
+gade2r
+ga3di
+gadi4e
+2gadl
+2ga2dr
+gae2
+ga1fl
+5gag.
+ga1k
+ga2ka
+ga2ku
+gal2a
+ga3laf
+ga2lar
+2g1alau
+2g1alg
+gall4e
+gal3lo
+2g1alp
+2g1alta
+2g1altd
+g1a2lu
+ga2mec
+ga3mel
+gam3ma
+5g4amo
+2g1amt
+g1ana
+2ganb
+gan3d2
+2ganf
+gan2g1a
+4gangeb
+gan2gr
+gang4sp
+gan2g1u
+2g1ank
+2ganl
+2ganmu
+3g2ano
+2ganr
+gans2
+2g1ansi
+2ganst
+2ganw
+ga1ny
+g1anz
+ga3pe
+2g1app
+ga1q
+3gar.
+g2ara
+2garc
+3g2ard
+ga3r2i
+2g1arm
+ga3r2o
+2g1arti
+ga3ru
+2g1arz
+ga2s
+g2as.
+gas3al
+ga4sam
+gase2
+ga5se.
+ga4sei
+ga4sel
+ga4se4m
+ga5ses
+ga4set
+gas5s2
+5g4asse.
+g4assen
+6gassess
+ga5ssest
+ga4st3el
+ga3sti
+ga4stin
+gastra4
+gastras5
+gas4t3rä
+ga3stri
+ga6strom
+gas1tu
+ga3t2a
+gat2h
+2gatm
+gat4r
+gau1c
+2g1auf
+2g3aug
+g2auk
+gau5ne
+2g1au4s
+2g1aut
+2g1äp
+gär3th
+2gärz
+gäs2
+gä4u
+2g3b4
+gbau5s
+gber2
+gbi2
+gbon2
+2g1c
+2gd
+g1da
+gd2ad
+gda3de
+g2dak
+g2dan
+g2dar
+g2dau
+g1dä1
+g2dei4
+gd2en
+g2d3ent
+g2der
+gd2es
+g1do
+g2dop
+gd2or
+g1dö
+g1d3r
+gd3s2
+gdt4
+1ge
+ge3a2
+geb2a
+ge3ble
+geb4lin
+gebot2
+3gebü
+ge1c
+ged4
+ge1e2
+ge3ec
+geest3
+3gefä
+4g1eff
+gef4l
+gef4r
+ge3fu
+gegen1
+ge3g2l
+ge3hei
+2g1eid
+ge4ie2
+2g1eif
+ge4ig
+g2eil
+gein1
+ge1ini
+ge1inn
+2g1einr
+gein5sti
+gein2v
+ge1ir
+ge2is4
+2g1eise
+gei3sh
+gei4sta
+2gek.
+gelb1r
+gel4b3ra
+gelb5s
+gelder4
+gel6derh
+gel6ders
+ge3lec
+2ge2lek
+2gelem
+ge4lene
+gel3ere
+ge4lerk
+geler3ö
+ge4l3ers
+ge2lev
+gel3f
+gel1i4m
+gel3l2a
+gel3le
+gell2i
+gel2ö
+gel3s2a
+gels2p
+gel3sz
+gel3ta
+gelt4r
+gel3z2
+gem2
+ge4ma.
+gem6e
+4g1emp
+gem3s
+ge3mu
+ge3na
+ge4n1ac
+ge4nak
+ge4n3al
+ge4nam
+ge4nar
+ge4nat
+gen4aug
+ge3nä
+ge4näu
+g2enc
+4genda.
+4g3endmo
+gen2dr
+gen3eid
+gener4f
+4generg
+ge4n3ern
+gen6erwe
+gener4z
+ge3nid
+ge2nim
+gen3k4
+genma7sse.
+gen3n
+gen3sk
+gen3sz
+gen3tä
+2gentf
+gen3t4h
+gen3tr
+2gentw
+ge2nun
+genzma3
+genzmas6
+geo2ri
+ge1ou
+g2e3p4
+ge1ra
+ge2ra2b
+ge2r3al
+ge3rann
+ge4rant
+ge4r3a2r
+2gerdg
+ge4rene
+ge4reng
+ge4ren4s
+ge4r3ent
+ger2er
+gerin4f
+ger4inn
+gerin4t
+4ger4klä
+g3erlas
+germas6s
+ger5me
+ger3no
+2g1ernt
+ge1ro
+ge2rob
+ge2rop
+ge1r2ö
+ger4sat
+4ger4seh
+ge3r2u
+g1erzä
+g6es.
+3ges2c
+ge6sche.
+ge2seb
+4g3e4sel.
+ge4s3elt
+ge2s1er
+ge3sha
+ge3s2i
+ges2p
+ges4pi
+gess2t
+gest2
+gest4a
+gest6e
+ge4s3tur
+get2a
+g1etap
+get3s
+ge3t4u
+2g1e1ul
+ge3u2t
+ge3wa
+4g1e2x
+2g3f4
+gfi4l
+2g1g
+gga2t
+g5ge
+gge2ne
+gg2l
+g3gla
+g3glo
+g2g3n
+gg4r
+2g1h
+4gh.
+gh2a
+3ghale
+gh2e
+3g2het
+3g2hie
+gh1l
+3gh2r
+ghs2
+g2hu
+gh1w
+gia2s
+gich2
+gicht1
+gi2eb
+gie3g
+gi2e1i
+gi2e3l
+giel2a
+gie3n
+gien2e
+gi4eno
+gie3re
+gies4
+giet2
+gif2tr
+gift5s
+gi2gu
+gi2kel
+2g1ill
+3gime
+gi2me.
+gi4mes
+gi2met
+2gimp
+2gind
+gi3ne
+2g1inf
+gin2ga
+2ginh
+2g1ins
+2g1int
+2ginv
+gi2ob
+2giok
+2g3isel
+git2a
+gi4us
+2g1j
+4g3k4
+gl2
+4gl.
+4g1lab
+2g1lac
+2gladu
+2g1lag
+2g1lam
+2gland
+3glanz1
+gla2s1c
+glast4
+gla4str
+gla4stu
+3g2laub
+2g1lauf
+g1läd
+g1läß
+2gläuf
+gl3b
+g2l4e
+2gle.
+3glea
+2g3leb
+g3lec
+4g3led
+g3lee
+2g3leg
+2gleh
+g4leic
+4g3lein
+gleiter8s
+glei4t5r
+g3len
+4glenk
+4g3ler
+glerei4
+2gles
+3gles.
+g3lese
+g3lev
+g2lia
+2glib
+3g2lid
+g2lie
+2g3lieb
+2glif
+g2lik
+4glil
+g2lim
+4glin
+g2lio
+2glis
+3g2lit
+g3lite
+g2liz
+g3lize
+g2loa
+g2lob
+g2loc
+2g3loch
+g2lok
+g2lom
+g2lop
+g2lor
+2glos
+g2lot
+2glöch
+2glös
+2glöw
+2gls
+g1lu
+2g3luf
+2gluk
+4g3lun
+g2lut
+3glü
+g1lüg
+2glw
+3g2ly
+2g1m2
+g1n
+2gn.
+g2n2a
+g4na.
+2gnac
+2g5nah
+gn4al
+gna4l3er
+2gnanl
+3g2nä
+2gnb
+2gnc
+2gnd
+gn2e
+g3neh
+2gn3ent
+gne2tr
+2gnf
+2gng
+2gnh
+g2nie
+g2nif
+g4nin
+2gnint
+2gni2s3
+gnise2
+2gnk
+2gnl
+2gnm
+g2no1
+g4non
+g3not
+2gnp
+2gnr
+2gns
+2gnt
+2gnu
+3g2num.
+g2nü
+2gnv
+2gnw
+g2ny
+2gnz
+go4a
+goa3li
+g1ob
+go3be
+2gobj
+gob2l
+go4c
+2g1o2f
+2gog
+2g1oh2
+goh3ren
+go1i2
+go3in
+gol2a
+gol2fr
+3gon.
+gon2e
+3gons
+goo2
+2gope
+gopf4
+go2pos
+2gopt
+gor2a
+2gord
+2g1org
+go2si
+go2sp
+gost2
+2g1osz
+go3t2h
+got6terb
+got6t5erg
+3gou
+go1y
+gö2f
+g1ö4l
+3göt
+2g3p4
+2g1q
+g2r4
+g4rab
+gra2ba
+gra2bi
+gra4bl
+2g3radl
+2g3rah
+2g3rak
+gram1
+gram8m7en8d
+gram6mer
+g3rand.
+2gra2r
+grar1e
+gra4s3a
+gra4sh
+gra4sp
+gra4str
+2g3raub
+grau3f
+2graum
+grau3sk
+2gräd
+gräs5c
+g3räu
+2g5re.
+g4reb
+2g3rec
+g3rede
+g4re2e
+2g3ref
+2grege
+2g3reic
+grei4fr
+2g3reih
+g3rein
+g3reit
+g3rek
+g4rem
+2g3renn
+gre3no
+gren6z5ei
+grenz3w
+g4rer
+gres6ser6
+g3ret
+g3rev
+2g3ric
+gri2e
+2g3riem
+g3riese
+g4rif
+2grig
+gril4la
+4g3ring
+4g3rinn
+g4rip
+gro2ba
+gro3ber
+gro2bl
+gro2b3r
+2groc
+2groh
+2g3rol
+gron4
+gros2
+2g3rose
+g4ross
+gro5sse.
+gro7ssen.
+gro7sser.
+gro7sses.
+2g3rost
+g4roß
+g4rot
+2gröh
+2gruf.
+g4ruft
+2g3ruh
+g3rui
+2g3rum
+grun2g
+3g4rup
+3grus
+grus2s
+gru3sse
+3gruß
+2g3rut
+2g3rüc
+g4rün
+grüs2
+4gs
+g2sa
+g4s3ab
+gs3ach
+g3sack
+g4sa2d
+g4s3a2k
+g3s1al
+g4salb
+g4sall
+g4salm
+g4salt
+g4sama
+gs1amb
+g4samp
+gs3ane
+g4sant
+gsa4p
+gs3a2r
+gs1as
+g3sat
+gs3ato
+gsau2g
+g3sau4r
+gsa2v
+gs1ä
+g3sch4
+g4schef
+gs2chi
+gs3d
+g2s1e2
+gs2e3h
+g3s2eil
+g3s2eis
+gse4kl
+g3sel.
+g4s3ela
+g3seln
+gs3em
+gsen1
+gs2enk
+g4sent
+g4ser
+g3sere
+gs3er1i
+g4se4s
+g4seu
+gsfi4l
+gsh4
+gs3ha
+g2s1i
+gsi2d
+g3sig
+gs3i2k
+g3sil
+gs3in
+g4sis
+g4sita
+gs2ki1e
+gsmas8sen
+gs1o2
+gso4b
+g3son
+g2s3op
+g5s4orge
+g5soz
+gs1p4
+gs2pac
+gs4pant
+g3s2pek
+g3s2pi
+g5spie
+gs3pl
+g3spor
+gs6port.
+g6sporto
+g4s3pru
+gs3s2
+g2s1tab
+g2s1tät
+gs2te.
+gs4tem.
+g4stemp
+gs4ten.
+gste2r
+gs4ter.
+gs4tere
+g6sterei
+g4sterm
+gst3err
+gs4tes.
+g4stest
+gs2thy
+g3s2ti
+gs3tie
+gs3tis
+gs1tot
+gst4ra
+g3stras
+gst5reit
+gst4res
+g4s3treu
+gst3rit
+gst3ros
+g2stru
+gs1trü
+gs1tur
+gs1u
+gsü3s
+g3sy
+4g1t
+g3te
+gt3h
+gt4hy
+gt2i
+gti2m
+g3to
+gt4r
+1gu
+gu4ale
+gu3am
+gu1an.
+gu1ant
+gu1as
+gu4d3r
+gu2e
+2gued
+guet2
+2g1u2f
+2g1uh
+guil3
+gu1ins
+gu1i4s
+gum2e
+3gumm
+gummi1
+gun2e
+2g1unf
+g2ung.
+gunge2
+4gungew
+2g1ungl
+2g1u2ni
+2g3unk
+2gunr
+2gunt
+3gur
+gure4
+4g1url
+gur2th
+gur2tr
+gurt3s
+gu2s3a
+gu2sä
+guschi5
+gus3se.
+gus3ses
+guss1o
+gus2sp
+gus4st
+gust3a4b
+gu4stap
+gu6stein
+gust3en
+gu3sti
+gu2str
+gu2ß1
+gußt4
+gu2t
+gut1a
+gu3te
+gu4t3er4h
+gut3h
+gut4sa
+gut2s3p
+2güb
+3gür3
+gü3st
+2g3v
+2g1w
+gy3n
+gyp2a
+2g3z2
+gzeu4gi
+hab2a
+hab2e
+hab2i
+2habn
+h1a2br
+h1abs
+2habw
+ha4ch3en
+ha2cho
+ha2del
+hade2n
+h1adle
+hado2
+h1a2dr
+2hae
+ha4far
+haf2e
+h1affä
+haf3f4l
+h2aft
+haf2tr
+haft2s
+hafts3p
+h2agg
+h1ah
+h2ahs
+h2ai
+3hai.
+h2aj
+2haka
+ha1k4l
+2h2al.
+halan4c
+h1a2lar
+ha2lau
+hal2ba
+hal4bel
+hal4bin
+hal2b3r
+hal2bu
+2hale
+2halk
+hal4lei
+hal6lere
+hal6lerf
+hal6lerg
+hal4leu
+hal4lo4k
+ha3lo
+4halp
+hal2sp
+hal4tal
+hal4tei
+hal2t5r
+h2ame
+2h1amt
+ham3te
+h2an.
+2hana
+ha2nal
+ha2nan
+2hanb
+h2anbe
+h2and
+han2da
+han2d3r
+ha2nem
+han2f1
+han6g5end
+hang3s
+2hani
+han2kr
+2hanl
+2hano
+2hanr
+2hanz
+hao2s
+2h1ap
+3h2ape
+ha2pl
+ha2po
+ha2pr
+h2a3ra
+ha4rab
+2harb
+h2ard
+har2fr
+h1arm.
+har3ma
+h2arme
+har4me.
+har4ne
+ha2rom
+hart4e
+har2th
+h1arti
+har2tr
+har2za
+h2as
+4ha3sa
+has2c
+has4h3
+has4sa
+hasser4
+has6s1t
+ha4str
+ha2ß1
+h1aße
+ha2ta
+h3atl
+ha2t3r
+2hats
+hatt2
+h3attr
+h1audi
+h1aufb
+hau5f6lie
+hau3f4lo
+2h1aufm
+h1aufs
+h3au3g
+h1aukt
+hau2sa
+hau4san
+hau2sc
+h2ause
+hau4sel
+hau6s5ent
+hau4spa
+hau4spe
+hau4ss
+haus5sen6
+hau4s3ti
+hau4sto
+hau4sur
+h2aut.
+hau2ta
+4hauto
+hau2t3r
+ha2ve.
+3hax
+häde2
+h1äff
+hä2kl
+2härz
+hä4s
+hä5sc
+hä6s5chen
+2häug
+häu2s1c
+hä3usp
+2h1b4
+hba4ras
+hbe3r2e
+2h1c
+2h3d4
+hdan2
+4hea
+he3be
+heb3eis
+he2bl
+he3br
+he3bu
+he3ch2e
+he3chi
+he1cho
+h3echs
+hed2g
+he2dit
+he2el
+hee3le
+he1e4m
+hee2s
+he1e2t
+h2ef.
+he2fan
+he2fau
+he2f1ei
+he3f2em
+hef3erm
+2heff
+he2fid
+he4f3ing
+he2f5l
+2hefr
+hef4ra
+he2fre
+3heft
+he2fu
+he3gu
+he2hel
+h4eib
+h1eie
+h1eif
+h1eig
+he2im
+hei4mal
+hei4mar
+hei4mei
+heim3p
+hei4mu
+2hein
+heine2
+hei4neb
+hei6nene
+hei4n3er
+h3eintr
+4heio
+he1ism
+heis4s
+he1i4st
+heit4s1
+h1eiw
+hekt3a
+he2l1an
+he2l3au
+hel1ec
+he2lek
+h3elem
+he2len
+h2elf
+he3li
+hell3au
+hel4lic
+hel4mei
+he3lo
+he4lof
+hel2or
+he2lö
+2helt
+hema4s3
+2h1emb
+3hemd
+he3mi
+he4mia
+h3e4miss
+3hemm
+2h3emp
+h2en.
+hen3a2
+he4nas
+he4nat
+hen3ebe
+henen1
+hen3end
+he4nene
+he4nens
+hen3erg
+he4nerm
+he2n1e4t
+henfal4
+2henga
+hen4gag
+hen4kan
+hen4kau
+hen3st2
+hent2a
+hen3te
+hen3tr
+h1ents
+2h3entw
+h3entz
+he4n3u
+hen3z2
+4he2o
+he3on
+he3op
+he3pa
+he3ph
+h1e2pi
+hept2
+h2er.
+her3a2b
+he2rad
+4herap
+he4r3a2r
+he2rat
+herau2
+herb2
+h2ere
+he2re2b
+he4reck
+her4eif
+4he3reig
+he6reis.
+her7eises
+he2rel
+he4rene
+he6rersc
+he4rerw
+h1er2fo
+6hergebn
+2herif
+herin4d
+herin4f
+he6rin6nu
+herin4s
+h1erke
+her4klä
+h5erkran
+her3la
+herma3s
+h2ern
+he3ro
+he4r3o4b
+he4rof
+he4rop
+he4rot
+h1erör
+her3sta
+hert4
+her3th
+her3um
+her4zap
+h3erzeu
+her2z1w
+he3sa
+4hese
+he3si
+he3s2p
+hes2t
+he2tap
+he3tä
+heter2
+he3th
+het2i
+he3t2s
+h2eu
+heu3g
+he2um
+3heusc
+he3x
+he1x2a
+2hexp
+he1y2
+1hè
+4h1f4
+hfaller6
+hfan2
+hfel2l3
+hfi2s
+hflei2
+2h3g4
+hgas1
+hga4sen
+hget4
+2h1h2
+hhoh2
+4hi.
+4hia
+hi2ac
+hi2ang
+h1iat
+4hic
+hi1ce
+hich6t5er
+hicht6sp
+2hid
+hi3d2e
+hi2e
+hi3ens
+hier3i
+hie4rin
+hiers2
+hif3f4r
+hi2k3r
+hi2l3a4
+hile3n2
+hil2fr
+h2im
+2hima
+h1imb
+h3i4mit
+h4imm
+h3impe
+hi2n
+hi3nak
+hi3nam
+hi3nap
+hi5nas
+h2inde
+hi3nel
+hin2en1
+h1inf
+h1inh
+2hi3n2i
+hin3n2
+hi3no
+hin2t1a
+2hio
+hi3ob
+hi4on
+hi3or
+hi2p1
+hip3f
+hi4pl
+hip3o
+hi2r
+hi3ra
+hi3re
+hi3ri
+hir2m1a
+hir2mi
+hirn1
+hir4ner
+hir2s
+1hirt
+2his.
+his2a
+hi2se
+h1i2so
+hi2spa
+hi3tac
+hi2tan
+hi2tel
+hit2i
+hit3z2e
+hi2v1o
+2h1j
+2h1k4
+hkamp2
+h2keu
+hklo3s
+4hl
+hl2ag
+hla2gr
+hla2l
+hlam8meng
+hlan4d3a
+h1las
+h1lat
+h3laus.
+h1laut
+h1lay
+h3läche
+h3läd
+h1läs
+h1läß
+h1läu
+hl3d4
+hle3a
+h3leb
+h3led
+hle3e4
+h3lein
+h2leis
+h3leist
+h5len.
+hle4nas
+hlenen3
+hl2enn
+h4l3entr
+h4lents
+hl2enz
+h3ler
+hle2r3a
+hl4ere
+h2lerg
+hl2erk
+h6l3er4nä
+hle3run
+hl1erw
+h4lerz
+h3les
+h4lesi
+hlf4
+h2lie
+h3lied
+h2lif
+h2lim
+hl1ind
+h2lip
+h2lis
+h3list
+h2lit1
+hl3l2
+hlle3b
+hlm2
+hlma3s2
+h2lo
+hl1ob
+h3loc
+h3log
+hlo2re
+h4lorm
+h3los.
+h3losi
+hlos4st
+hlo2ß1
+hl2ö
+h2lös3
+hlö4ss
+hl4sar
+hl2ser
+hls3ka
+hl3s2lo
+hls3tie
+hl3str
+hl2su
+hl3t4
+h3luf
+h3luk
+h3lumpe
+h1lüf
+hlz2
+2h1m
+h3mad
+h3mag
+h3mak
+h3man
+h2mant
+h3mar
+h4marc
+h3mas
+hma3sse
+h3maß
+h3mä
+h4mäc
+h4mäh
+h4mäl
+hm2e
+h3me.
+h3med
+hme1e4
+hmeer4s
+h3mein
+h3meist
+h3meld
+hme3le
+h3men
+hmen2s
+hme2ra
+h3mex
+hmi2e
+h3mil
+h3mind
+h3mini
+h3minz
+h3mirr
+h2mo
+h3mop
+h3mot
+h3m2ö
+h4möl
+hm3p2
+hm2s1p
+h2mu
+h3mul
+h3musi
+2hn
+h2na
+h3nag
+h3nam
+h4nar
+h4natt
+h3nau.
+hn1äh
+hn3d4
+hn2e
+hne3b
+hne2e3
+h2n3ef
+hn3eig
+hn3ein
+h2nel
+hne4n1
+hn4eng
+hne4pf
+h3ner
+hner4de
+hner3ei
+h4n3e2ro
+h4n3ersa
+hn4es
+hn3ex
+hn3f4
+hnflei4
+hnhof8stra8s
+h2nic
+h2nid
+h2nie
+hn1im
+h2nip
+hnk4
+h2nor
+hn3sa
+hn3s2p
+hns2t
+hnsuch4
+hntra4
+hnts2
+h2nul
+h2n1unf
+hn3z2
+ho4ar
+ho3bern
+ho2bl
+ho2c
+hoch3
+hoche2
+hocker4
+hock3t
+4hocy
+2hod
+2ho2e
+hoe3n
+ho4f1a4
+ho2fä
+ho2feu
+hof3f4a
+ho2f3l
+ho2f1o
+ho2f3r
+ho2fu
+2hoi
+ho2l1a
+hol3ar
+4holdy
+3hole
+ho2l1ei
+hol3g4
+hol3k
+holl2
+ho2l1op
+holt4
+2holy
+h3olym
+3holz
+hol6zene
+hom2e
+ho2me.
+ho2mec
+ho2med
+h2on
+4hon.
+hond4
+4hone
+hon2er
+4hong
+4honh
+4honk
+4hons
+4hony
+ho1on
+hoo2r
+2hope
+ho1ra
+ho2rak
+h1o2r2an
+ho2rar
+ho2rau
+h1or3d
+2hore
+ho4rens
+ho3ret
+2h1org
+ho2rop
+hor3ta
+hor4ter
+hort3s
+h1ortu
+hos3a
+ho3se2
+ho4sei
+ho3sl
+ho4sla
+4hosö
+ho2str
+ho4ßene
+2hot.
+ho3th
+4hotr
+2hot1s2
+2ho2w1
+h1o2x
+ho1y2
+4hoz
+hô1
+1h2ö
+2hö.
+hö2c
+h4öh
+5höhe
+hö4l
+hö4s
+hös1c
+hös3se
+h3öst
+2h3p2
+h1q
+4hr
+hra2b
+hr3ac
+hr3ad
+hr1a2g
+h1r4ah
+h1rai
+h1rane
+hr3ap
+hr3as3s
+h3rat
+h3räu
+hrb4
+hr1c
+hr3d
+h2rec
+h3r2ech
+h3red
+h3ref
+hr1eh
+h4rei.
+hrei4ba
+hrei4br
+h3reic
+h3reif
+h4r3eig
+hr4eini
+h4reinl
+h4reins
+hrei3th
+hreli1
+h3rep
+hrer6geb
+hr2erk
+h4rerla
+h6rer6leb
+hr2erm
+hrer4sa
+hrer5st
+hrer6tüc
+hr2erw
+hr2erz
+h3re2s1
+hres5s2
+hrest2
+hre4t
+h2r1eta
+h2r1eu
+h2rev
+h3rez
+hrg2
+hrga4
+hrgu4
+h2ri
+h3ric
+h4rick
+hri4e
+h3riesl
+h3rin
+hr1int
+h4rist
+hrk4
+hr3l
+hrm2
+h3rog
+h3roh
+h1ro2l
+h4romat
+h4rome
+h4romi
+h4romo
+h4ron
+h1ropa
+hro4r
+h3rou
+h3rö2s
+hr2s1ac
+hr4s3and
+hr3sch
+hr2sen
+hr2s1er
+hr2set
+hr4sh
+hr2sin
+hrs3k
+hrs3l
+hr2s1of
+hr3spa
+hrst2
+hr4stec
+hr6stele
+hr2su
+hr2tab
+hr2tan
+hr2te2l
+hr2th
+hr2top
+hrt3ric
+hrt2sa
+hrt2se
+hrt4sin
+hrt2sp
+hrt4ste
+h3ruh
+hr1ums
+h3rut
+h3rü
+h4rüb
+h4ry
+hrz2
+4h1s
+h4s3acht
+h2sa2d
+h2s1alk
+h2sall
+h4samt
+h2san
+h2s1as
+h2sath
+h2saud
+h2s3aur
+h2saut
+h2säh
+h2säug
+h3sc
+h4schan
+hs4cr
+h2s3ec
+hse2e
+h4s1ehr
+h2s1eie
+h4seind
+h6seinst
+hsela2
+h3sele
+hse4lin
+hse4mis
+h4s3endw
+h2s1erf
+h2s1erg
+h2serh
+h2s1erk
+h2s1erl
+hs1ern
+hs4erne
+h2serö
+h2s1erw
+h2serz
+h2seth
+h2sex
+h3s2ext
+hsha2k
+h2s1i2d
+hs2im
+h2s3ing
+h3s4inni
+h4s1ita
+hs2kal
+h3skand
+hs1of
+h2sofe
+h2sop
+hs1org
+h2spac
+h4s3pani
+h2s1par
+h2s1pat
+h3spec
+h3spei
+h2sper
+h2sph
+h2spo
+h3spoi
+h2sprä
+h2spro
+hss2
+h2staf
+hst3alt
+hst2an
+h2stau
+h2stäl
+h2stäu
+h4stea
+h4stele
+h4sterm
+hs1tie
+h2stin
+h2stit
+h2s1tol
+h2s1tor
+h3stö
+hst3ran
+h4s3treu
+hstro2
+h2stu
+h3stun
+h3stü
+h2s1u
+hs2ung
+h3sy
+4h1t
+ht1a
+h2ta2d
+ht2ag
+ht4akt.
+ht4akte
+h2tall
+h2talo
+h2talt
+hta2m
+h2ta2n
+ht3ane
+h3tank
+h3tanz
+h2tap
+h2ta2r
+ht3arr
+ht2as
+h2t3asi
+h2tasy
+h2t3a2t
+h3tat.
+h3ta3te
+h2tau
+h3taug
+h4t3ax
+ht1ä
+h2tär
+h3te.
+ht3e4ber
+ht1ec
+hte3cha
+h2t1e2d
+ht1eff
+ht1e2he
+h2teif
+h2t1eig
+h4t3eilz
+h2t1eim
+ht1ein
+h2t1eis
+h2t1eke
+ht3elas
+hte6l5ei.
+h4telek
+h4t3elfe
+h4t3elit
+hte4m
+h2t1emi
+h2temp
+h3ten.
+ht3engl
+ht3enta
+h4tentf
+hter6de.
+hterer6s
+ht3erfü
+h6terfül
+h6tergeb
+ht3ergr
+hter6gri
+ht1erh
+hter6häl
+hter8höhu
+h6terleb
+h6t5erleu
+h6terneu
+ht5erspa
+hter8spar
+ht3erst
+h6tersta
+ht3erwä
+ht3erze
+h2t1ese
+h2t1ess
+h2t1e2th
+h2t1eu
+h3teum
+h3teun
+h4textr
+h2t3h2
+h4thei
+h3thera
+h3thes
+ht4heu
+h4tho
+h2ti2d
+h3tig
+h2t1im
+ht1i6n3
+h2t3ine
+h2tins
+h2tisr
+htni2
+hto2
+h2t1ob
+htod1
+h2t1of
+h2t3oly
+h2tope
+ht1or
+h2tord
+ht3rak
+h3tran
+ht3rand
+h2t3ras
+ht3rat
+ht6rates
+ht3rau
+h4traub
+ht6raume
+ht3rec
+h3treck
+ht3rei
+h2trek
+h2t3res
+ht4ri
+ht5ric
+h4t5rieg
+h2t5rin
+h3trit
+h2t3rol
+h2t3ros
+h2t3roß
+ht3röm
+ht3ru
+h2t3rü
+ht2sah
+ht2sal
+ht4s3a4n
+ht2scr
+ht4sein
+ht2sel
+ht4s3end
+ht4seng
+htse2r1
+hts3eri
+htsha2
+ht3s4hak
+hts3k
+ht3skal
+hts1o
+hts3tät
+ht4s3tem
+hts2ti
+ht4s3tur
+ht4s3tür
+htt4
+htti2
+htu2e
+h2t1urs
+ht3z2
+hu2a
+hu2b1a
+hu2bei
+hu4bel
+hu2b1en2
+hu2bi
+hu2b3l
+hu4b5r
+hu2bu
+hu2fa
+hu2h3a
+hu2h1i
+h1uhr
+h1uhu
+hu2kä
+hu2k1i
+huk3t2
+hu2l3a2
+hu2lä
+hule2
+hu2l1eb
+hu2l1ei
+hu2lem
+hu4l3eng
+hu4lent
+hu2l1er
+hu2let
+hu2lid
+hu2l3in
+hul3l2
+hu2lo
+hu2lö
+hul3s
+hu3m2a
+h1umh
+2h1ums
+hu2n
+h1una
+h2und
+hun3d2e
+hunde3i
+2hunf
+hung2
+hun3ge
+h1uni
+h1unm
+2hunt
+h1ups
+2hur
+hur3g2
+hur2th
+hu3sa
+hus3h
+hu2so
+hus2s3a
+hus3sen
+husser4
+hus2s1o
+hus2sp
+hus4st
+hu2ß1
+hu2tab
+hu2ti
+hu2t1o4
+hu2t3r
+hut2t
+hut4zen
+hut4z3er
+hut2zu
+h2ü
+hübe4
+h3über
+h4übs
+h3übu
+hüf2
+hühne4
+2h1v
+hvil4
+2hw2
+h2wall
+hwe1c
+h1weib
+h1weih
+hwein6sa
+hweis4s
+h2wirr
+hyle4
+hyl4l
+hy2lor
+3hym
+h1yo
+3hyp
+hy2pe.
+2hy2t
+2h1z
+hz2a
+h3z2o
+hzug4
+h3z2w
+i1a
+i2aa
+i2ab
+iab4l
+i2ache
+i3ad.
+ia3do
+i2af
+iaf4l
+i2ag
+i4ago
+i2a1h2
+i2aj
+ia2kei
+ia2kr
+i2aku
+i3al.
+i3a2l1a2
+ial3ar
+ial3as
+ia2lä
+i3al3b4
+i3alc
+i3al3d4
+i3a2leb
+i3alef
+i3alei
+ia3lek
+i3alel
+i3aleng
+i3alent
+i3alerb
+i3alerf
+i3alerh
+i3a4lerm
+i3a2l1et
+i3alex
+i3alf
+i3alg
+i3a2lia
+i3alim
+i3a2lin
+i3alj
+i3alk
+i5al3l
+ial4ler
+iall2i
+i3alm
+i3aln
+ia2lon
+ia2l1o2r
+ial3p
+i3alr
+i3al3s
+i3al3t4
+ia2l3u2
+i3alv
+i3al3z2
+i2am
+i3am.
+i3amp
+iampe4
+i3an.
+ian2a
+ia2nal
+ian3alt
+ia2nau
+i3and2
+ia2n1e2b
+ian2er
+i3anl
+i3ans
+ian2s1p
+i3ant
+i3anw
+i3anz
+ia1o
+i2ap
+ia3pf
+i2a1q
+i3ar.
+i2a2ra
+i4ari
+i3as.
+ia3sh
+i2asi
+ia1s2p
+ias5s
+iast4
+i3at.
+i4ate
+i3at2h
+i4athe
+1iatr
+i3ats
+i3au
+ia3un
+iau2s1
+i2av
+2iä
+i1ä2m
+i1äp
+i1är.
+i1ärs
+i1ät
+i3ä4tem
+iä2ti
+iät3s2
+2i1b
+ib1art
+i2b1auf
+i2b1aus
+i2baut
+ib3be
+ib2bli
+i2b1eig
+i2b1eis
+ibe4n1
+i2b1ep
+i6ber6geb
+ibe1ro
+i2bim
+i2b1in
+i2blad
+i2bleu
+i3blu
+ib2o
+i2bö
+i2b3rau
+i2b3ren
+ib3ric
+i2b3roc
+ib2ser
+ib4ste
+ib2un
+i2b3unk
+i2b3unt
+ibus1c
+ibus3s
+2ic
+i3ca
+ic1c
+ich1a
+ich6art.
+ich1ä
+i1che
+ich1ei
+ich2er
+icherin5
+ichermas8
+ichgro3
+i1chi
+ich1l
+ich3le
+ich3li
+i3ch4lo
+ich5m
+ichmas4
+ich3n
+i1cho
+ich3ort
+i2ch3r
+ich6sele
+ichsen3
+ich2s1i
+ich6stie
+ich4tab
+ich4tan
+ich4tin
+ich2tr
+i1chu
+ich1w
+i1ci
+ic1in
+ickt2
+i1cl
+ic3la
+i5cu
+i1d
+id2ab4
+i3d2ac
+id1a2n
+i3d2ans
+i3dat
+id1au
+id2ax
+idä1
+idbu4
+i2dea
+1idee
+2idel
+idel4ä
+i4demu
+ide4n1o
+iden4se
+ide2on
+i3der
+4ider.
+iderin8nu
+ide1rö
+ider6reg
+ide3so
+ides2p
+2idia
+1i2dio
+idni3
+id2o
+i2dol
+2idoo
+i2dö
+2i2dr
+i3dsc
+id2set
+id2s1p
+idt4
+2idu
+1i2dy
+ie3a2
+ie2bä
+ie2bl
+ie2b3re
+ie2bri
+ie4b3rü
+ieb4sto
+ie1c
+ie2cho
+iech3t
+ie2d3an
+ie3de
+ie2dr
+ie1e2
+ie2f1an
+ie2fau
+ie2fäh
+ief1ei
+iefe2m
+ief3f4
+ief2i
+ie2f3l
+ie4fonk
+ief1r
+ie2fro
+ie2gl
+ie4g5li
+ie3g4n
+ieg3r
+ieg4ra
+ie2gre
+ieg2s
+ieg4s3c
+ieg4se
+ieg4s1t
+ie2h1in
+ieh3r4
+i1ei
+ie1ind
+i2e2l1a
+iel3d4
+i2ele
+ie2l1e2b
+iel1ec
+iel3eid
+ie2lek
+i4elen
+ie4lene
+ie4leng
+ieler4e
+ieler6fi
+ieler8geb
+ieler6ke
+ieler6la
+ieler8lebn
+iel4erw
+ieles4
+ielf4
+ieli2d
+i1ell
+ie2lo4b
+ie4lor
+i2els2
+iel3sz
+ielt2
+iel3ta
+iem2e
+2i1en
+i3en.
+i3ena
+ien1a2g
+ien2am
+ie4nas
+i3enä
+i2ene
+ien1eb
+i3enec
+i3e2nek
+iener6fo
+ien3er4g
+iener6la
+i3enex
+i3enf
+i3eng4
+ienge4f
+ienge4z
+i3enh
+ie2nim
+ie4n3in
+i3enj
+i3enk
+i3enla
+i3enle
+i3enm
+ienma3s4
+i3enn
+i3e2no
+i3enö
+i3enp
+i3enr
+i3ens.
+i3ensa
+i3ensc
+i3ens2e
+ien3s2k
+i3ens2p
+ien6st5er
+ien6stop
+iens4tr
+ienst5rä
+i3en3sz
+ien4tar
+i3enth
+i3enty
+i3env
+i3enw
+i3enz
+ie1o4
+ier3a2
+ie2rad
+ie2rap
+i2ere
+ie4reck
+ie4r3eis
+ie3r2er
+ierer3k
+ie4r3erz
+ie2ret
+ierf4
+ierg4
+i1ergi
+ierk4
+ierken4
+ierma6ss
+i1ern
+i3ern.
+i2erni
+ie1ro
+ie2rö
+ier4re.
+ier4s3eh
+ier3sei
+ier3sta
+ier3te
+ier3z2
+ie3s2
+ie4san
+i2esc
+i2ese
+ie4sh
+ie4s3k
+ie4spu
+iesser6g
+iess3ti
+iest6e
+ie4stin
+ießer4g
+iet1a
+ie2ta2g
+ie2tan
+ie2tap
+ie2tat
+ie2tau
+ie4t3ent
+ie4t3erh
+ie4t3ert
+ie4tha
+i4ethe
+iet3her
+ie2t3ho
+ie2thy
+ie2t1o4b
+ie2t1ö2s
+ie2t3ri
+ie2t3ru
+iet2se
+i1ett
+iet3zw
+ieu2e
+i2e1un
+ie2w1u
+i1e2x
+2if
+if1ab
+if1ar
+i2f3arm
+if4at
+i2f1au
+if1än
+i2fec
+i2f1ef
+if1ein
+if2e4n
+i2f1erg
+if1erh
+if2fa
+iffe4s
+if6feste
+if2f3l
+if4form
+if2fro
+iff2s
+iff4ste
+if3l
+if1lac
+i1f4lä
+iflo4
+if4los
+i1flü
+if3r
+i1fre
+if4rev
+ifrü4
+if3sa
+if4t3a
+if2ted
+if2t3ef
+if2t1ei
+if2te2l
+if2tep
+if4terk
+ifte4s
+if4t3esc
+if2t1op
+ift1r
+if2tra
+if2t3ri
+if2tro
+ift1sp
+ifts2t
+ift3sz
+if2tur
+i1fy
+2i1g
+iga1i
+i2garb
+ig1art
+iga3s
+i2g3att
+igd4
+i6gebrau
+i4gefar
+ig1ein
+ige4na
+ige6nene
+ige4nid
+igen5s
+ige2ra
+igerma3
+ig5erwer
+ig1erz
+iger4ze
+i2g1ess
+i2gim
+i2gl
+i4glag
+i4g3lim
+ig4na
+i4gnä
+i3g4neu
+ig4no
+i3g2o
+igo1p
+ig3rad
+ig3re
+ig4ren
+igro3
+i2grou
+ig3sa
+ig4sal
+ig3sä
+ig4schr
+ig1s2o
+ig1sp
+ig2spa
+ig4sti
+ig2s1to
+ig2stö
+ig6stra6s
+ig4stur
+2i1h
+i2har
+i5hea
+ihe1e
+ih1elt
+ihe4n
+ihe1u
+ih3m
+ih3n
+ih3r
+ih2s
+ih3sp
+ih3sti
+ih1um.
+ih1w
+ii2
+ii3a4
+i1ie
+i3ig
+ii3h
+i1im
+i3in
+i1i4s
+i2is.
+ii3t
+i1it.
+i1j
+1i2js
+2i1k
+ika2ge
+ik1ak
+ikaken3
+i2kakt
+ik3amt
+i4k1ang
+i6kantei
+ikanten8n
+ik1art
+ik3att
+i2k1au
+i3kaz
+ik1äh
+i2k1än
+i2kär
+4ike
+i2keb
+ik1ebe
+i2k1ed
+i2kef
+i2k1ei
+ike4l1
+ike2n1
+i2k1ens
+ike2ra
+i2k1e4r2e
+i2k1er2f
+i5kerfam
+i2k1er2h
+i2ker2l
+i2kero
+i2ke3ru
+i2k1eta
+i3ki.
+i3kie
+ik1in
+i2kins
+i2k3l
+ik4län
+i3k4leri
+i3k4let
+ik4lim
+i3klu
+i2kne
+i2k1off
+iko1p2
+ik1o4ri
+ikot3t
+i2köl
+ik3rä
+i2kres
+ik4ris
+i2krö
+ik3sa
+ik3s2z
+ik3ta
+ikt3erk
+ik4t3esk
+ik2t3re
+ikt2u
+i2k1uh
+i2kup
+i3kus
+i2kü
+i1la
+i2lab
+ila2br
+i4labs
+i2l1ac
+i2l1ak
+il3a2ma
+il1anm
+il2anz
+ilan6zer
+i2larb
+il1asp
+i2l1au
+i3laub
+i3l4aufb
+ilau2s1
+i1lä1
+i2lär
+2ilb
+il2c
+il5chen
+il2da
+ild3ebe
+il4d3en4t
+il3der
+ild4erp
+ildi2
+ild1o
+il2dor
+il2dr
+ildwe4
+2ile
+il1ec
+ileid4
+il1ein
+il1el
+i2lemb
+il1ent
+i4lentl
+i4lents
+i2l1erd
+iler4ei
+i6lereig
+il1erf
+iler4fo
+i2ler2g
+i2l1er2h
+i4lerkl
+il1err
+i4lerri
+il2erz
+ile4th
+il1ex
+ilf2
+il2f3l
+il2f3re
+ilf4s1
+il2gl
+2ilh
+2ili
+ili3e4n3
+iliga2
+ili4g3ab
+ilik4
+i2l1ind
+i4l3init
+il1ins
+i2l1ip
+i3lip.
+i3lips
+il2lad
+ill2an
+ill4ant
+il2lä2
+il2leg
+ille4ge
+il4lenn
+il3l2er
+1illu
+il2mak
+il2m1ap
+il2mau
+ilm1ei
+il2min
+il2mor
+2ilo
+il1ob
+il2of
+il2oh
+il4on
+il2op
+i2l1or
+i3lou
+il1ox
+il4sein
+ils2to
+ilt2
+il3t4h
+i1lu
+i2lum
+il1ur
+i3lus
+ilü4
+2ilv4
+il2zar
+il2zau
+ilz1er
+il2zwa
+imad2
+ima3i
+im2al
+i2m3anh
+i2mans
+i2marc
+im3aren
+i2m1arm
+i2m1art
+im4at
+imat5sc
+ima4tur
+i2maus
+i2maut
+i2meg
+im1ein
+i2mej
+i2mek
+i2mele
+i2melf
+im2en
+i2m1erf
+i2m1erl
+i2m1erz
+i4me3sh
+imes3s
+i2meti
+i2mew
+i2m1i2d
+i2mim
+i2m1ind
+i2minf
+i2m1ins
+3immatr
+immen1
+imm3ent
+im6menth
+im2mit
+1immo
+im4mo2d
+im2mö
+imni2
+2imo
+i2m1ob
+i2mo2p
+i2mö
+1imp
+imp2fa
+im3pfo
+imp2s
+im3pse
+2imt
+imt2e
+im3t2i
+imts2
+imtu2
+2imu
+im2um
+im1urk
+2in.
+in3ab
+ina2be
+in1ac
+in1ad
+i4n3ae
+i3nald
+inaler4
+ina6lere
+in2alp
+in1am
+in2an
+in3ana
+in3ann
+i2narb
+i2narm
+in2ars
+in3att
+i2n3au2
+inaus1
+2inä
+i2n1äh
+in2är
+in1äs
+2ind.
+inda2
+ind2ac
+in2dal
+in2dan
+2indä
+in3de
+2inde.
+ind4eid
+2inden
+ind5erke
+inde3sp
+indes4t
+1index
+ind2i
+1indik
+in3dö
+2indr
+ind4ri
+ind3se
+1indus
+in3d2ü
+2ine
+i4ne4ben
+in1ec
+i3nee
+i2neff
+in4elen
+in2em
+ine3nä
+i2neng
+i4n3enzy
+i5ner.
+i4n3erbi
+in2erh
+in3erle
+i6ner6leb
+iner4lö
+i4n3er4tr
+i3nes
+in2et
+in1eu
+ine3un
+ine2x
+in3f4
+1infiz
+1info
+2ing
+4inga
+in2g1af
+in2g1a2g
+in2g1al
+in2gam
+ing1ar
+in2g3at
+3ingeni
+in3g2er
+in4g3erw
+in2gl
+in3gla
+in3glä
+ingmas4
+in2gor
+ing4sam
+ings6por
+ing4s3pr
+1inhab
+2inhar
+2inhau
+2inhe
+in2i3d
+2inie
+2inig
+ini3k4r
+2inis
+ini3se
+init2
+i3nitz
+3inkarn
+1inkas
+in4k3ent
+ink4er
+inks1t
+ink4ste
+in3k2ü
+inma4le
+4inn.
+inne4n
+in4ner4m
+in2neu
+in4ni2v
+4innl
+in2nor
+1innta
+2ino
+in1od
+in3ols
+in1or
+inost2
+i3no3t
+i2n1ou
+i1nö
+in1ö2d
+2inri
+ins2am
+in6samt.
+insch2
+2inse.
+in2seb
+2insed
+2insen
+ins2i
+2insk
+in4sm
+3instal
+in4s3tät
+2inst2e
+3instit
+4instra
+in4strü
+1insuf
+ins3umz
+in2sur
+in3s2z
+2inta
+in3te
+2inte.
+1integ
+2inth
+inthi1
+in3ti
+int2o
+2intö
+2in3t4r
+4inträ
+3intrig
+int3s
+i2n1u
+i4nuh
+in3unz
+inu3t
+4inverm
+invil4
+i1ny2
+in3z2e
+inz2i
+inz2u
+in3zwä
+i1ñ
+2i1o
+ioa4
+io1c
+io2d
+io3du
+io3e4
+i2of
+iof4l
+i2oh
+io3k6r
+i3ol.
+i3om.
+io3me
+i3oms
+ion2
+i3on.
+ion3an
+io2n3au
+ion3d2
+io4nee
+i3onn
+io2nor
+i3on4s1
+ions3a
+ions3el
+i2ony
+i2oo
+i2o1p
+i3o4pf
+i3opt
+i2or
+i3or.
+i3orc
+ior2e
+iore4n
+io1r2h
+i3orp
+i3ors
+i3ort
+i3os.
+io3sh
+io5ska
+i2ost
+ios2u
+i2o3sz
+io3t
+i3ot.
+iot4r
+i3ots
+i2ou
+i2ov
+i3o2x
+i3oz.
+i1ö2k
+i1ön
+i1ös.
+i1ö4st
+2ip.
+i1pa
+ip2an
+i1pe
+i3per
+2ipf2
+i3pfan
+iph2
+2i1pi
+ipi3el
+ipi3en
+i2poi
+ip2pan
+ip3pe
+ipp1f
+ip4pl
+i1pr
+2ips
+ip2sa
+ip2sei
+ip2sp
+ip2sta
+ip2stü
+ipt2a
+ipt2u
+2ipu
+2i1q
+i1r4a
+i3ra.
+2i3rad
+i3ras
+irat2
+i1rä
+ir1äh
+ir2bl
+ir1c
+ir2ch1o
+ir4e
+i3ree
+2irek
+ire4na
+i3ré
+irg2
+irg4s
+ir2he
+ir2i
+iri3a
+2i5rig
+2irk
+irke4n
+ir4kene
+ir2k3l
+irli4n
+ir2m1a2g
+ir2mak
+ir2mau
+ir2mä
+ir2m1ei
+irme4n1
+ir2m1o2
+irm4th
+ir2mum
+ir4munt
+2irn
+ir2n3a
+ir4nat
+ir2no
+i3ro
+1iron
+i1rö
+irpla2
+ir2rei
+irre4l
+ir4reli
+ir2rh
+irs2
+ir4schl
+ir4schm
+ir4sch3r
+ir4sch3w
+ir3se3
+ir3sh
+irt2s1t
+2iru
+ir1u2m
+iru2s1
+i3r2ü
+i1s
+i3sac
+i4samp
+i4s1amt
+is2ap
+isa2r
+is3are
+i3sat
+i2sau
+is3auf
+isau2g
+i2säh
+i2s1än
+2isb
+i2sca
+i2sce
+i4schar
+i3s2che
+i4schef
+i4sch3e4h
+isch3ei
+i6schemi
+i6scher6z
+i4schin
+i5sching
+i2schl
+i2schm
+isch3ma
+i4schna
+i4sch3re
+isch3ru
+i6schüb
+i4schwa
+i6schwir
+i4schwo
+isch3wu
+i4schwü
+i2scr
+2ise
+ise3a
+ise1e
+iseh2a
+ise3hi
+is4eind
+i4seint
+is2el
+ise3li
+i6sel6ter
+ise2n1
+ise4n3a2
+is2end
+isen3s
+ise4r3ei
+is1erg
+i2serh
+i2s1erm
+i2s1es2s
+is2et
+i4s3etat
+i3s2eu
+2isf
+4ish
+isi2a
+i2s1i2d
+i3sin3g4
+i4ski
+i4sku
+is3la
+3islam
+2isma
+2ismi
+i2s1of
+1i2sol
+3isom
+is2o2n3
+isonen4
+iso6nend
+i2sop
+is1org
+is1ort
+3i2sot
+2isp
+is1pa
+i2spar
+is1pe
+is1pic
+is2por
+i2spro
+is3sa
+is4s1ac
+is4sau
+is3sc
+iss3che
+is3senk
+iss3erf
+issermas8
+is3so
+is3sp
+iss2po
+is2st
+is3sta
+is4ste
+is3strä
+is3stu
+is2su
+i2stab
+ist3ac
+is4tal
+i4stam
+ist2an
+i4s3tang
+ist4e
+i4stea
+i4s1tec
+iste4n
+ist2id
+ist6o
+ist4ra
+is3tras3
+ist3rei
+i3stro
+i2stur
+is1tüm
+i3suf
+isum3p
+i2sü
+i1ß
+iß1er4s
+i1ta
+it1ab.
+it1abs
+i3tag
+ital3a
+ital5l
+it1alt
+it1a2m
+it1an
+ita3ne
+it3anr
+ita2po
+it1app
+it1a2re
+it1art
+i3tat
+it1au
+i3tauc
+i2tauf
+i2taut
+4i1tä
+it1änd
+i2t1äs
+ität2
+i1te
+it1eff
+i2t1ei
+it2eic
+i4teig
+i4tein
+i4teis
+2itel
+ite4l1a
+i4telek
+i2temp
+ite2n
+i3ten.
+i2tepo
+i6tereig
+it2erö
+i8t7ersche
+i2t1esk
+i2t1ex
+i3text
+i3thr
+i1ti
+i3tic
+i2tid
+i3tig
+1itii
+iti3ker
+it1in1
+i3tis
+i4tiso
+iti3sp
+i4tiss
+i3tiv
+iti2v5a
+itmen2
+4i1to
+i3to.
+it1ob
+ito4be
+i3toc
+i2t1of
+it1o2p
+it2os
+i1tö
+2i1tr
+it3raf
+it3ras
+it3rau
+it3räu
+it3re
+i2tref
+it4ret
+it3rob
+it3rom
+i2t3run
+it2sa
+its1a2g
+it2s1e
+it4se2h
+its3e2r1
+its1o
+it4stec
+it4s3tem
+it4sten
+it4s3tes
+itstra6s
+2itt
+it2teb
+it4temp
+itt3hä
+it2t1o4b
+it2top
+it2tri
+itt3rol
+itt6schi
+itt4seh
+itt4sei
+itt4sti
+i1tu
+it1uh
+it1ums
+it2ung
+i2tuns
+ituran4
+it1urg
+itut4
+i1tü
+2itz
+it2zec
+itz2er
+itz3erg
+it6zergr
+it4z3erl
+it2z1w
+2i3u2
+ium1
+iuma4
+ium2se
+iun2
+iungs3
+ius1t
+i1ü4
+2i1v
+i2v1ad
+i2v1ak
+i2v1am
+iv1an
+i2v1ä
+i2veb
+i2v1ef
+iv1ei
+iv1elt
+ive4n
+iv1ene
+i2v1ent
+ive3re
+iver8folge
+iv1erh
+iver4kl
+iv1erl
+iver3s
+i2v1e4x
+iv1ins
+i3vol
+i2vr
+i2vun
+i2v1ur
+2i1w
+2i1x
+i2xa
+ix2em
+ixt2
+4i1z
+i2z1ag
+i2zan
+i2z1ap
+i3z2as
+iz1au
+i2zaus
+i2zän
+izei3c
+izeit3s4
+i2zele
+ize2n
+i4zener
+iz1erg
+i2z1erl
+iz1ir
+i2zo2f
+i2zö
+i2zuna
+i2z1w
+i3z2wi
+izz4a
+í1l
+j2a
+jab4
+jah4r3ei
+jahr4s
+ja3l2a
+ja3ne
+jani1
+jani3t4
+ja5ru
+jas2o
+jat2
+je2a
+jean2s
+je2g
+jek2t3a
+jek4ter
+jek4tin
+jekt3o2
+jektor4
+jek2t3r
+je2p
+je2t1a
+je4t3h
+je2tin
+je2tor
+je2t3r
+jet3t
+je2t1u2
+ji2a
+ji2v
+joa3
+jo2b1
+job3r
+jo4da
+jo2i
+jong2
+jo1r2a
+jord2
+jo2sc
+3jou
+jou4l
+j2u
+ju2bl
+jude2
+jugen6
+jugend3
+ju1i
+ju2k
+ju3l2
+jung5s2
+ju3ni
+ju3r4a
+jur2o
+ju3t2e1
+2j1v
+1ka
+3ka.
+ka3ar
+2k1abb
+kab2bl
+2kabd
+2k1a2ben
+2kabf
+2kabg
+2kabh
+2kabn
+2k3a4bo
+2k1abs
+2k1abt
+2kabw
+2kabz
+ka1c
+kade2r
+2k1adm
+2k3a2dr
+3kadu
+2kadv
+ka1f4l
+ka1fr
+kaf3t2
+kag2
+2k1age
+3kah
+ka1ho
+ka1in
+kaken2
+ka1k4l
+2k1akt.
+4kala.
+kala3b4
+ka2lan
+kal3d
+ka2leb
+ka4l1eh
+ka4lens
+kal3eri
+3k2alk
+kal2k1a
+kal4kan
+kal2k3l
+kal3l
+kall2i
+kallö3
+2k1allt
+ka2lop
+ka2l1os
+kals2
+kal4tex
+kal4th
+ka2lu
+k2amt
+3kana
+kan4al
+ka4n1a4s
+ka2nau
+3kanä
+2kanb
+kan3d4
+2kanda
+2kandä
+kan2e
+2kanf
+3kani
+4kanim
+kank4
+2kanl
+2kanom
+2k1anor
+2k1ans
+k2ans.
+kan4tar
+6k5antenn
+2k1anth
+ka3nu
+4kanw
+2k1anzu
+2kanzü
+ka2o1
+3kara
+2karbe
+2karc
+k2ard
+kar3d2a
+k1area
+k2arg
+ka3r2i
+kari3es
+k2ark
+2k1arm
+kar2pf
+k2ars
+k2ar3ta
+k2arte
+k1arti
+4kartik
+karu2
+k2arw
+3k2asc
+kasi1
+kas2o
+ka2sp
+kas2t
+2k1ast.
+ka3sta
+ka4ster
+3kasu
+ka3sz
+ka2tan
+3kateg
+ka3t2h
+ka2t3r
+kat3se
+2katt4
+kau4fer
+kau2f1o
+kauf4s3a
+kauf4sp
+kauf8s7tem
+k2aus.
+2kauss
+2kausw
+kau3t2
+2kauto
+2kaz
+1kä
+k1ä2mi
+kär2
+2k1ärg
+kä2s5c
+käse3
+kä3th
+4k3b4
+kbe1
+kbo4n
+kby2
+2k3c
+2k3d4
+ke2ben
+2k1ec
+ke2di
+k1ef
+2keff
+kefi4
+kege2
+ke2gl
+ke2he.
+ke2hen
+kehr2s
+kehrs3o
+2k1eic
+2k1eig
+kei2li
+2k1ein
+ke1in2d
+kein4e
+k1eis
+2keise
+keit2s
+ke2la
+kel1ac
+ke3lade
+ke3lag
+ke4l3am
+kel1au
+ke2lä
+kel3b
+keld4
+kel3eis
+2ke2lek
+ke2l1en
+ke2l1er
+kel3la
+kel7l4e
+kell2i
+ke2l1o2
+ke2lö
+kel3sk
+k4elt
+ke2mi
+2k1emp
+k2en.
+ken1a
+ken3au
+kenbu5s4
+ken3dr
+ke2n1e2b
+kenen1
+ke4nene
+ke4nens
+kener4n
+4ken4gag
+k5en6gel.
+ke2nim
+ken3in
+4kenlad
+4kenläd
+kenmas8sen
+kenn2a
+kenn2e
+ke2no
+4kensem
+ken3s2i
+ken3s2k
+ken5s4te
+ken3sz
+k3en4te.
+ken6ten.
+4kentf
+2k1entg
+ken3th
+2k1entl
+2k1ents
+2kentw
+2kentz
+ken3z2
+2ke1o2
+2kep
+ke2pl
+k2er.
+ke1ra
+ke2ran
+ke2rau
+ke2r1ä
+ker4ble
+k2erc
+4kerd
+ke2re2b
+ke3reig
+ker3ein
+4kerfah
+k4erfam
+ker2fo
+ker5g
+k3ergeb
+2kergu
+ke6rin6nu
+kerin6st
+kerin4t
+k3erken
+k2erko
+k2erl
+k3er4lau
+k3erleb
+k6erlebe
+ker2na
+ker4nei
+4k3erneu
+ker6n5eur
+k1ero
+ker8oberung.
+ke1rod
+2k3eros
+ker4reg
+k2ers.
+2kersa
+kerz2
+k1erz.
+ker4zeu
+2k1er2zi
+k6es.
+ke2s3a
+k1ese
+ke2sel
+kes2sa
+ke2t1a
+ket2ag
+kete4
+ke4t1eb
+ke4tel
+ke4th
+ket3ha
+ket3s
+ketta4s
+kett3h
+ke2tu
+ke1up
+keu6schl
+2k1e2va
+2k1e2x
+4k3f4
+2k3g2
+kga4s1
+kge3s2
+2k1h4
+kho3m
+k3hu
+ki3a
+ki4ad
+kia2r
+ki1ch
+2ki2de
+ki3dr
+k2ids
+2kidy
+ki2el
+kie4lei
+kiel3o
+2kiern
+kier2s
+kie4sa
+kie2z
+ki1f4l
+ki1f4r
+ki3k4
+2ki3l2a
+2kilä
+ki3lo
+3kin.
+4kindex
+2k1indi
+2k1indu
+2k1inf
+king3s
+2kinh
+k2ini
+kini3k2
+k2inn
+ki3n4o
+kin3s
+2k1inse
+2k1inst
+2k1int
+ki3or
+kio4s
+3kir
+2k1i2so
+kis2p
+kis5s
+kist2
+kiv2
+kive4
+2kiz
+2k3j
+2k1k4
+kkab4
+kl4
+4kl.
+4kla.
+2k1lac
+klan2
+2kland
+klan3du
+k4lar
+k1last
+k1lauf
+k3laug
+2k1läd
+k2lär
+k2le
+4kle.
+kle2br
+k3leg
+2kleh
+k3leit
+k3lem.
+2k3ler
+kle2ra
+2k3leu
+kle3us
+2klic
+k2lien
+k2lif
+2klig
+3k2lim
+k2lin
+k3lin.
+3k4lina
+k4link
+k2lip
+k2lir
+k2lisc
+2klist
+klit2s
+2k3liz
+2k3loc
+klo2i3
+2klok
+3k4lop
+k3lor
+klos2
+2klose
+klo3sse
+klost6
+2klöc
+2klöf
+k2löst
+k4löt
+k1lu
+klu4b
+k2lud
+k2lug
+k2lum
+2klux
+2k1lüc
+2kly
+2k1m2
+4kma
+kma2la
+kmas2
+kma3sse
+k2n2
+2k5nach
+2k3nad
+2knah
+2k5nam
+2k3näp
+k3ne
+k4nec
+kne1e
+2knes
+2knetz
+2k5neu
+2kney
+kni4e
+2k5niv
+kno2bl
+k4nol
+2knorm
+2knov
+k3nu
+2knum
+k6nur
+1ko
+ko5ad
+ko2al
+2k3oas
+kobal2
+2kobj
+kob4s
+2k1o2fe
+kof3f2
+koh4a
+kohl2e
+kohle3i
+koh3lu
+ko3l2a
+ko3le
+kol2k3
+3kom
+4k3omn
+ko4mu
+k2on
+ko2nem
+kon2i
+kon3s4
+kont6e
+ko2nu
+2kop.
+2ko1pe
+kopfa2
+kop4fen
+kop6f5err
+2kops
+ko3pte
+2kopz
+ko3r2a
+kor2ba
+kor2bl
+kor2br
+2k1orc
+korden3
+korder4
+kor6derg
+ko2rel
+2k1org
+ko3ri
+kor3m
+kor4nac
+kor2n3ä
+kor4no2
+2korpi
+k2os
+ko4sk
+ko2s1p
+3kost
+k3osz
+ko2ter
+ko3ti
+kot4r
+kot1s2
+kot4tak
+k1ou
+ko3un
+3kow
+ko2we
+2k1o2x
+1kö
+k2öf
+k1ö4l
+2k1p2
+2k3q
+k2r2
+2k3rad
+2k3rah
+k4ral
+kras3
+kra4ss
+k3rats
+2kraum
+k4raw
+k4raz
+k4räc
+2kräd
+k4rän
+2k3räum
+2k5re.
+2k3reak
+2k3real
+2k3rec
+2kred.
+2k3rede
+2kredn
+2kredu
+2k3ref
+4kreg
+2k3reic
+kre1i2e4
+kreier4
+k3reif
+2k3reih
+2kreim
+krei6sei
+kreli1
+k3ren
+k3res
+2kresu
+k3rev
+2k3rh
+2krib
+2k3ric
+2k3ries
+2krip
+k3risi
+krob4
+k4roch
+4k3roh
+k4roi
+k4rok
+k4ron
+k4rop
+kro4ss
+kro3st
+2krot
+3kroth
+k3rou
+2kröh
+2kruf
+2k3run
+4k1s
+ks3ab
+k3sac
+ksa2k
+k4s1amt
+k2san
+ks3a2r
+k2sau
+k2sav
+k2säh
+ksch4
+ks2chi
+k2s1e2b
+k2s1ec
+ks1ei
+ks2eid
+ks2eif
+k4seind
+ks2end
+k2s1eng
+k2s1ent
+ks1er
+ks2ere
+k2serf
+k2serg
+k2serk
+k2serl
+k2sers
+k2serw
+k2s1e2v
+k2sex
+k2s1i2d
+k2s1in
+k4s1is
+ks3kl
+k4sm
+kso2
+k3s2on
+k2sop
+k2s1or
+k2sö
+ks1pa
+k2spal
+k3s2pat
+k2spä
+k3spe
+ks2pel
+ks2pen
+k2sph
+ks2por
+ks2pul
+ks5s2
+kst2
+k2stal
+k4s3tanz
+kstat4
+ks3tat.
+k3stäl
+ks4tel
+ks1tie
+k4stier
+k2s1tis
+k2stit
+k2s1tor
+k4strop
+k2stuc
+k2stum
+k2s1tur
+k2stüt
+k2s1u
+k3sul
+ks2zen
+4k1t
+kt1abr
+kt1abs
+k2t1ad
+k3tag
+kt1akt
+k3tal
+kt1am
+k2t1an
+kt2and
+k2t1a2r
+kta4re
+kta3ri
+k2t1au
+kt3aug
+ktau2s
+ktä3s
+kt1äu
+kt1ein
+k2t1ela
+kte3li
+kte4n1
+k2t1ent
+k4tentl
+kten3z
+kte1ra
+kt4ere
+k4t3erfo
+kt1erg
+k2t1erh
+k2terö
+kte3ru
+kt1eta
+k2tex
+k2t3h
+k2ti2d
+kti2me
+kt3ing
+kt1ini
+kt3inn
+k2tins
+kt2is
+kti2s1e
+kti2st
+kti4ter
+k2t1of
+k3t4ran
+kt3ras
+k2t3rau
+kt4ro
+ktro3me
+kt3run
+kt3rü
+kt1s
+kt3s4a
+kt3sä
+kt3se
+kts2el
+ktsen1
+kts1o
+kt2sor
+kts2pa
+kt3s2z
+ktt2
+kt1ums
+k2tuns
+kturen4
+kt3z
+ku2al
+ku1c
+kud4r
+3kug
+ku2h
+2k1uhr
+kuh3s
+ku3la
+ku3l2e2
+ku3l2i
+2kulp
+kul2to
+kul2tr
+kum2e
+2kumg
+2k3uml
+kum2s
+k2u3n2a
+kun3da
+kun4s
+kunst3
+2kunt
+2kunw
+2k1up.
+kur2bl
+ku2rei
+kuri2e
+2k1urk
+ku2ro
+kurs1c
+kur2sp
+kur4ste
+kur4str
+2k1urt
+kus3a2r
+ku4schl
+ku2sp
+kus3ses
+kus1ta
+ku2su
+ku2ß
+2kut.
+1kü
+kü1c
+3küne
+3kür
+kür2s
+2k3v
+2k1w
+k3wa
+2k3z2
+kze3l
+3la.
+la3ar
+l1ab
+3l2ab.
+la3b2a
+l2abä
+2labb
+lab2br
+2labd
+2la2ben
+4labf
+4labg
+2labh
+3labil
+la2bit
+2la2b3l
+2labn
+3lab2o
+4labo.
+la3b4ra
+2labs
+la2bus
+2labw
+2labz
+la1ceb
+l2ache
+lacks2
+1lad
+2l1ada
+2ladd
+la3de.
+la3d2i
+2ladj
+2l1adl
+2ladm
+2l1a4dr
+3l2adu
+2laf
+la2fa
+la2f1ei
+laf1r
+laf3t4
+la2fu
+3lafü
+la2ga
+lag3d
+l2ager
+4lagg
+la2gio
+lag3l
+la4g3n
+lago4
+la2gob
+2la1ho
+3lai
+lai4s1t
+lake2
+la2kin
+l2akk
+la1k4l
+la2kro
+lak3t
+2l1al
+3lala.
+la2lar
+3lali
+4lalt
+l2ama
+lami3t
+lam2m1a
+lammen8ge
+1lammf
+2lamn
+la2mor
+l2amp
+l3ampu
+2l1amt
+lamt2s
+la4mun
+la2na
+la3nad
+l1anal
+la3nan
+la4nat
+la4nau
+2la2nä
+3l2and
+lan2da
+lan4dam
+land3au
+lan6d5erw
+lan6d5erz
+lan6d5inn
+lan2d3r
+la2nem
+lan3erd
+laner4f
+2lanf
+lan6g5esc
+lang3s2
+2lanha
+l2anhe
+2lanl
+2l1ann
+l1ano
+la2nof
+2l1anp
+2lans2
+l1ansi
+l4ant.
+2lantw
+2lanw
+lan2z1w
+3lao
+2l1apf
+la2ph
+l1a2po
+lap2pl
+la2r1an
+2larc
+lar1e2b
+la2r1ei
+la2rel
+la4rene
+larf4
+lar3g
+lar3ini
+la2ro
+2l1arom
+l1ar3t
+lart4h
+l3arti
+3laru
+l2as.
+la4sam
+la4sä
+4lasd
+la5seb
+la4sei
+la4s1e2l
+l2asg
+2lash
+la2sin
+la4sis
+2lask
+la2so
+2la2sp
+3lasser
+l2ast
+la2sta
+last3an
+la4steu
+las2to
+la2str
+last3ri
+las3tro
+las3tur
+la2stü
+1la2ß3
+lat2ak
+la3t2e
+la4tel
+la5t4i
+2l3atl
+2latm
+lat2o
+la2tö
+la2t3ra
+lat4ri
+lat6schm
+2lat4ta
+lat4tex
+lat2th
+lat4t3in
+lat2t3r
+latzer4
+1laub.
+lauben6s5
+lau2b3r
+laub4se
+laub4st
+lau4fin
+lau2fo
+lau4fri
+1laug
+lau3gl
+3laun
+4laun.
+la4us
+2l1ausb
+lau6scha
+2lausd
+2lausf
+2lausg
+2lausl
+2lausr
+2lauss
+2lausz
+2lauto
+lau2tr
+la3va
+lave4n
+1law
+lawa4
+l2ay
+lä1c
+2l1ähn
+1länd
+l1äpf
+2läq
+lär4mar
+l1ärme
+2lärz
+lä2s5c
+lä4s3s
+2lät
+2läub
+2läuc
+2läue
+1läuf
+2läug
+2läx
+1là
+4l1b
+l3bac
+l2bant
+lb3a2ri
+lbau1c
+lb1ärm
+lbb4
+l4b3eink
+l4b3eise
+lbe4ral
+lbe3rei
+lberin5
+lbe7s
+l4b1e2ta
+l2b1id
+l2b1ins
+l3b4lat
+l3b4lä
+l2b3led
+l2bli
+l3b4lo
+l3b4lö
+l3b4lu
+l2b1o2ra
+lb3rea
+lb2s2
+lb3sa
+lb3se
+lb3si
+lb3so
+lb3sp
+lbst3ac
+lb4ste
+lbst3ei
+lbst1u
+l2b1uf
+l3bum
+lbu4n
+lbus3s
+lbzei2
+2l1c
+l3ca
+lch2au
+l3che
+l4chei
+l4chent
+lchermas8
+l3chi
+lch3le
+lch3li
+l3chlo
+lch3n
+lch1ob
+lch3r
+lch3s2
+lch3ü
+lch1w
+l3cl
+l3co
+4l1d
+ld3a2b1
+ld2ac
+ld3ack
+l2dad
+l2daf
+lda2g
+l2d1ah
+l2d1ak
+l2d1al
+l2d1a4n
+ld3ane
+lda2r
+l2d3ari
+ld1arm
+ld1ass
+l3dat
+l4d3ato
+l2d1au
+ld3au4s
+l3däm
+ld1är
+ld1ät
+ldbus2
+l3de.
+lde4ben
+l2dein7
+l2deis
+l2d1elf
+l2d1e2mi
+l2d1ems
+lde4na
+lden5erg
+l4dentl
+l3der.
+l4d3erfa
+l6der6geb
+ld1erh
+l4der4he
+l3d2erl
+l6derlas
+l6derlaß
+l3d2ern
+l2d1er2p
+lder4tr
+lde3sa
+lde4sel
+l2d1es2s
+l2dex
+ldi2c
+ld1id
+ld1i4mi
+l2dob
+l2dop
+ldo2r
+l2d1ori
+ld2os
+ld2ö2
+ld3r
+ld4ram
+l2dran
+l2drec
+ld5rie
+ld4ris
+l3d4ru
+l2drüc
+ld3sa
+ldt4
+ld3th
+ldt5s
+ld3tu
+l2d1ul
+l2d1um
+ldy2
+1le
+3le.
+le2ad
+le3ar
+le2as
+3le3ba
+leben4s3
+le2bl
+le2b3re
+2lec
+lech1a
+le2chi
+lech7t6e
+le2er
+le3f2a
+2l1eff
+le2g1ab
+leg1as
+le2gä
+lege1i
+le2gl
+3leg4r
+3leh
+4lehe.
+leh3r2e
+4lehs
+4leht
+lei4ble
+l2eid
+leif1a
+lei4fan
+lei4fei
+leifer6g
+2l1eig
+3leih
+lei3l2
+leim3p
+l2ein.
+leinbu4
+leinbus5
+l2eind
+lein4du
+l4eine
+lei6nerb
+le2inf
+le2ini
+4leink
+4l1einn
+l3einsa
+2leint
+l2einu
+le4is
+leisch5a
+lei8schei
+lei6scho
+lei6sern
+l1eisf
+lei6ss5er
+leis3st
+lei4ßer
+l2eit
+lei2ta
+leit3sk
+leits4t
+3leko
+2lektr
+2lekz
+3l2ela
+le2le
+le3lei
+2lelek
+6leleme
+le3len
+le3les
+2lelf.
+l2eli
+lel3s
+l2em.
+le2m1au
+le2m1ei
+3lemes
+3lemet
+lem1o2
+le2mor
+2lemp
+le2mu
+le4mun
+l4en.
+len1a
+le4na2d
+le4n3an
+le4n3a2t
+2lency
+l1endp
+4lendun
+l4endur
+le2n1ed
+4lenerg
+le4neur
+4leneuv
+len4gag
+len4kau
+len4k3lo
+len4klu
+l1enni
+len6sein
+4len4sem
+len6serk
+len3ska
+len3sz
+2l1entk
+4lentla
+2lentn
+4l3en4tro
+4l3entw
+lent4wä
+5lentwet
+2lentz
+2l1enzy
+leo2f
+le1os
+2lep
+3lepa
+3lepf
+4l1e2pi
+lep4pi
+3lepr
+lep5t
+l2er.
+l2e1ra
+le2rag
+le2rap
+le2ra4s
+le2rau
+le2r1ä
+le2re2b
+ler2ec
+l3ereig
+le4r3ei4m
+le4r3eis
+le2rel
+le4reng
+le4rerg
+lerer5k
+le4rers
+l3erfas
+2l1erfo
+l2erfr
+l2erfü
+l1erg
+l2erga
+l4ergef
+3lergeh
+6lergen.
+l4erger
+l4erges
+3l4ergew
+2lergi
+l2ergl
+l2ergr
+lergro3
+4l3erhol
+lerin4s
+lerk2
+l2erka
+2lerke
+l1erkl
+4lerklä
+l4erkle
+l2erko
+ler3kr
+ler3l
+5l6erlebe
+3l4erlei
+2lermä
+ler4nal
+3l4erne
+ler4nei
+2l1erö
+3l2erra
+ler4ric
+l4ers.
+l1ersa
+ler4sto
+le2rup
+l4erwa
+ler4wer
+2ler2wo
+2l1erz
+ler2zä
+l3erzeu
+ler2zo
+l4es.
+les2am
+les2e
+le3seb
+le3sei
+2l1esel
+le3s4h
+lesi1
+le3sk
+les4ki
+les2ko
+le2spo
+les3se
+les3si
+lest6
+leste3r
+lester6i
+3lesu
+4lesw
+2lesy
+2le2tap
+2le2tat
+le2thi
+let2i
+letsche6
+let2to2
+lett1r
+lett1s2
+le2u
+4leue
+3le3u2f
+l2euk
+2l1eul
+le3unt
+3l2eut
+le2vol
+2lex
+3lexik
+le2xis
+3ley
+4l1f
+l3fah
+lfäs3
+l2f1ec
+lfe1e
+lf3einh
+l2feis
+lf2en
+l4ferei
+lfe4rel
+lf1erl
+l3fi
+l3f4lä
+lf3led
+lf3lo
+l3f4lu
+lf3ram
+lf3res
+lf4ru
+lf4rü
+lf2spe
+lf2s1ti
+lf2su
+lfun2
+lfur1
+2l1g
+l3gas
+lga3t
+lgd4
+lgen2a
+lgeräu3
+l2geti
+l3g2i
+lg2lö
+l3go
+lgoa3
+lg4p
+l3g4ra
+l3g4ro
+lgro3s
+lg2s
+lg4s3t
+2l3h2
+4lhe
+3lhi.
+1li
+l4ia
+li2ad
+li4am.
+lian2g
+li2ast
+3lib4
+libi3
+li1c
+lich4ta
+lich4to
+4lick
+li2cl
+li3d2a
+2l1ido
+li4ds
+liebe4s3
+li1efa
+3liefer
+li1efk
+li3efl
+lie4n1a2
+li3ene
+lie4rei
+lie4s3c
+lie4sta
+lif4fes
+lif2fo
+3lig
+li4g3ers
+lig4n
+lig4ra
+li2gre
+ligs2
+li3ker
+li3k2o
+likop4
+lik2sp
+lik4tau
+lik4ter
+lik2t1o2
+lik2u
+li3l
+lil2a
+li3m2a
+lima1c
+limat4
+2l1imb
+2limm
+3limo
+2limp
+lin2a
+li3nar
+2l1indu
+li2nef
+li2neh
+li2nep
+li5ner
+li2nes
+2l1inf
+2l1inh
+lin1it
+2l1inj
+lin4kan
+lin4kar
+link2s
+li2nol
+l2ins.
+l2insa
+4linsel
+2linsp
+2linst
+2l1insu
+2linsz
+2l1int
+li3nu
+2l1inv
+2linz
+li2o
+li4om
+lion5s
+3li1pf
+3lipt
+3lis.
+li3s2a
+li3schm
+li4schu
+4lis2h
+li3shi
+2l1isl
+2lisol
+2lisot
+li2sp
+liss4
+2liß
+lit4a
+li2tal
+li3t2ä
+l2i3t2e
+li1th
+li2t3r
+lit1s2
+lit3se
+lit3sz
+li4tun
+li2tur
+litz4er
+3liu
+liv2e
+li2vea
+li2ves
+livi3e
+li3vr
+4lixi
+li2zau
+li2z3ä
+lizei3
+4l3j
+2l1k
+l3kale
+lk1alp
+l3k2an
+l3kap
+l3kar.
+l3ke
+lk1erd
+lke3r2e
+lk2l
+lk3lad
+l3k4las
+lk3lic
+l3k4lu
+lk2men
+lk4ne
+lk5ner
+lkor2b
+l2k3ru
+lk2s1
+lkse2
+lk4spe
+lkt2
+lk2ü
+4l1l
+lla2be
+l2labk
+ll2abr
+l2labt
+l3labu
+ll3acht
+lla2de
+ll1aff
+lla3gl
+l2l1am
+ll3a2ma
+ll2anb
+lla4ner
+l2lani
+l3lans.
+ll4anwa
+ll1anz
+ll3appr
+ll1arm
+lla6tern
+l2lath
+l4latm
+l2l3att
+l2lau
+ll3aufg
+ll3aufk
+llau2s1
+l4lausf
+ll3aust
+l2la2w
+l2l1äm
+l3läs
+l2läu
+llb2
+llch4
+lld4
+l2le2b
+ll5ebene
+l3lec
+ll1ech
+lle3er
+l2l1ef
+lle2gu
+lle2he
+l2leib
+ll1eic
+ll1eim
+l4l3eise
+lle2la
+l3len.
+lle4na
+ll3endl
+llen3dr
+ll3endu
+llen6dun
+llen5se
+l4lentf
+l4lents
+l3lep
+l3ler.
+lle2ra
+l3lere
+l6lereig
+ller4fo
+l8lergene
+l4lergo
+l4l3ermi
+l4l3ernt
+ll3ertr
+ll6erwei
+ll2es
+l3les.
+l2le2se
+l2leuc
+l3leur.
+ll1exe
+llf4
+llg2
+l2lieb
+l2lieg
+lli4gan
+l3lik
+lli4la
+l2l1ind
+l4linf
+ll1ins
+llin6sen
+l2lipo
+ll3k4
+ll5m2
+ll3n2
+ll1ob
+l2lobe
+l2lo2d
+l2lof
+llo2ge
+ll3ol
+ll1opf
+ll1or
+l4lorb
+l2lo2ri
+llo2te
+l2l1ou
+l3low
+llö2g
+l3löh
+ll2säu
+ll2s1es
+ll3ska
+ll2spr
+ll4stor
+ll3t
+llt2e
+llt2i
+llti2m
+llt4r
+llts2
+llu2d
+llu2me
+l3lung
+l2lu2p
+ll1ur
+llust6
+l3lut
+l2lüc
+llü2d
+l2lü2g
+l3ly
+ll3z2
+4l1m
+l2m3a2b
+l2m1ad
+lm1a2ge
+lm1aka
+l2m1a2m
+l3mana
+lm1apf
+lm1art
+lm3att
+lmä2s
+lm1ä4st
+lm1c
+lmd2
+lm3e4dit
+l2m1ef
+l2m1e2p
+lmer2
+l2m1erf
+l2m1erl
+l2m1erz
+l4messa
+l2m1id
+lm1ind
+lm1ins
+lm3m
+l2mof
+lm1orc
+lm3p2
+lmpf4
+lm3s2k
+lms2t
+lm3str
+lm3s2z
+lm3t4
+l2mum
+l4munt
+4ln
+lna2r
+ln3are
+l3n2e
+lnes2
+l2nin
+lnus2
+l1nü
+l1ny
+1lo
+lo4ak
+3lob.
+l2oba
+3lobb
+lobe4s
+2lobj
+l1o2bl
+l2obr
+lob4ri
+lo4chel
+3lodr
+2loe
+l1of
+lo2fe
+lo4gh
+lo2gl
+lo2gor
+lo2gre
+lo3h2e
+4l1ohr
+loi4r
+3lok
+4l3okk
+lo2k3r
+5loks
+l4ole
+2l3o2ly
+lomä3
+lo2min
+lo4nin
+lo2n1o
+lo2o
+2lope
+lop2p1a
+lop2pr
+2lopt
+lor3am
+lor2an
+lo4rä
+3lorb
+2l1orc
+2l1ord
+lo3r2en
+4l1or3g2
+4lork
+4lorp
+2lort4
+lo4sa
+3lose
+lo4ske
+lo2spe
+lo2s1pr
+los3ta
+lo4stel
+lo4steu
+lo2s3to
+lo2s3t4r
+lo2ßu
+lo2t1a
+lot4e
+lot2h
+lo3tha
+loti4o
+lots2
+2l1ov
+lo2ve
+2lox
+1lö
+lö2b3
+2löck
+2löd
+lö2f
+2l3öfe
+4lög
+2l1öhr
+2lök
+2l1ö4l
+2löp
+3lösc
+4löß
+4löz
+2l1p
+lp2ar
+l4p1är
+lp2f
+lph4
+l3phä
+l2phir
+lp1ho
+l3phr
+lpt4
+l3pu
+2l1q
+2l3r2
+lra4ss
+lrau2s
+lrebs2
+lrö4
+lrös3
+lrut4
+4l1s
+ls3a4b
+l3sac
+l2sa2d
+l3s2al
+l4s1amb
+l4samp
+l2san
+ls3ane
+l3sare
+l3sarg
+l3sark
+lsau2
+lsau4m
+lsau4r
+l3s2äm
+lsä6s
+ls2äug
+ls1äus
+l4schin
+l4schmü
+l3se.
+l2s1e2b
+l3seil
+ls2ele
+ls1eli
+ls1er
+l2serf
+l2serg
+l2serh
+l2serk
+l2serl
+l2sers
+l2serw
+lse2t
+ls1eta
+ls3ha
+l2s1id
+l2simp
+ls2kal
+l3s4kele
+l4skla
+l4sko
+ls2ky
+l2sop
+l4s3ort.
+l3sos
+l3s2öl
+l2spac
+ls2pe
+l2s3ph
+l2s1pir
+ls2po
+l3spri
+ls2pu
+l3spul
+l2spun
+l4s3s2
+lst2a
+lstab6
+ls2taf
+l2stas
+l4s3tat.
+l4state
+l3stau
+l4s3täti
+l4st3erk
+l4s3terr
+l2s1tis
+l2stit
+l4stoch
+ls1tor
+l4stor.
+l4store
+l4stors
+ls2tra
+l2s1trü
+l3suf
+ls1um
+l2s1un
+ls2und
+ls3unk
+4l1t
+l3ta.
+l2tab
+lt1abs
+ltag4
+lt1alg
+lt1am
+l3tami
+ltampe4
+l3t2an.
+ltan3d
+l2t1ap
+lt1ara
+lt1art
+l3tarta
+l3tartu
+l2t3ato
+l2t1au
+lt3aut
+lt1äh
+ltbau1
+lt1eh
+lt1eig
+l4t1ein
+l2t1eis
+l2t1elt
+lte3mi
+l3t2en
+lten6gel
+lten4sp
+l4tentl
+lt3ents
+lte4ral
+lter4fa
+l3t2erg
+lter6ken
+lter4nä
+lt2erö
+lter4se
+l2t1esk
+l3t2est
+l3tet.
+l2t3h
+l3thas
+l4thei
+lt4hem
+l3t4hu
+l2ti2d
+ltimo4
+l3tine
+lti3t
+l2t1o4b
+l2t1o2f
+l2tord
+l2torg
+l2t1o2ri
+lto2w
+lt1öl
+l3tön
+lt1ös
+lt1öt
+ltra3l
+lt3räu
+lt3re
+lt3ris
+lt3rol
+l2t3rö
+l4ts
+lts2eh
+lt2se2l
+lts3ort
+lts1pe
+lt1s2ph
+lt4stec
+lt2sti
+lt3t
+lt1uh
+l2t1um
+lt2um.
+lturan4
+ltu2r1i
+lu1an
+4lu2b3
+luba2
+lub5s2
+lu2dr
+lu2es
+1lu2f2
+2l1ufe
+2luff
+lu3fo
+luf4t1a
+luft3e
+luft3r
+lu2g1a
+lu2g1e2b
+lu2gei
+lugen1
+lu2g3i
+lug3l
+lu2go
+lu2g3r
+lug3se
+lu2gu
+2l1uh
+lu1id
+lu1is.
+lul2ö
+lumbi1
+lume4
+2lumf
+2lumg
+l1umh
+2lumk
+2luml
+l2ump
+1lumpe
+lum2ph
+2lumr
+2l1ums
+lu3mu
+2l1umw
+2lumz
+1lu2n
+2l1una
+2l1unf
+2l1uni
+2lunr
+2l1uns
+2lunt
+2lunw
+4lu2o
+lu2pf
+2lur
+l2ura
+lu2r1an
+lu2rei
+lu2ri
+l1urn
+lu2ro
+l1urt
+lu4ru
+lu2san
+2luse
+lu2sp
+lus4s3a
+lus2s1c
+lus4sei
+lus3sen
+luss3er6
+lus2s1o
+lus2s1p
+lus4s1t
+1lust
+lu2sta
+lu2stä
+lu6sterl
+lu2st1o2
+lu3str
+lust3re
+lu2s1u
+4lu2ß1
+lu2t3a4
+lu2tä
+lu2t1e4g
+lu2tel
+luter2
+lut3erg
+luter4s
+lu6t5ersa
+2luto
+lu2t1o2f
+lu2top
+lu2t1or
+lu2t3r
+lut5schl
+3lux
+2lüb
+3lübd
+lück4e2
+lücker3
+2lüd
+2lüh
+lü2hel
+lüh1l
+2l1v2
+lva3
+l3vl
+l3vo
+lv3r
+4l3w
+lweis4s
+2lx
+1ly
+ly1a
+ly3c
+2lymp
+3lyn
+ly3no
+ly1o
+ly3onn
+3lys4
+ly3t
+2l1z
+lza2
+l2z1ac
+l2z1ag
+l2zan
+l2z1ap
+l2zat
+lz1aus
+l2zäp
+l2zär
+lze2l
+l2zele
+l4z3enth
+l2z1er2h
+l2z1id
+lzi4m
+lz1imi
+lz3l
+l2zo2f
+l2zö
+lz3t2
+l2z1u4fe
+lzug4s
+l2z1ur
+lzvol2
+lz1w
+lz2wec
+l2zwu
+1ma
+3ma.
+maa2
+m1ab
+m3a2bar
+m2abä
+2mabb
+m2abe
+2m3abf
+2mabg
+2mabk
+m2abli
+2mabm
+m2ab4ra
+ma2bri
+2mabs
+2mabt
+ma3chan
+mach2e
+mach8terh
+mach8t7ers
+mach4tr
+ma2ci
+mack2s
+ma3dac
+mada2m
+m2adä
+ma2del
+2m1adm
+2m1a2d4r
+ma4d2s
+ma2es
+ma1f4
+mag2a
+ma2ge.
+ma2geb
+ma2gef
+ma2geg
+ma2gek
+ma2gep
+ma4ges.
+ma2get
+ma2gev
+ma2gew
+2m1agg
+magi5er.
+magi5ers
+ma3gl
+2magm
+ma3g4n
+2m1ago
+mahl2s
+ma1ho
+mai4s3e
+ma2ke.
+2m1akt
+mal2ag
+mal1ak
+ma4lakt
+ma2lan
+ma2l3at
+ma2lau
+2mal2de
+m2aldi
+ma3l2e
+ma4lex
+mali1
+mal3lo
+mal3lö3
+2mallt
+m2alp
+mal3t4
+malu2
+ma2l3ut
+3malv
+ma2mid
+mam3m
+2m1a2nal
+ma2nar
+2m1a4nat
+ma2nau
+2m1anä
+2manb
+man2ce
+man3d4
+man3ers
+ma2net
+m2anfr
+man3g2
+m4angel
+man4gl
+2m1angr
+m2anh
+3manip
+2manl
+m2anle
+man3s
+2m1ansa
+2mansä
+man4sh
+man2th
+mant3he
+2mantw
+manu3
+2manw
+2manz
+m1anza
+ma2or
+ma1q
+4marag
+mar2an
+2marb
+mar3g2
+3ma1rh
+ma3r2i
+m2ark
+mar2kr
+4mar2o
+maro3d
+4marr
+mar6schl
+mar6schm
+mar6schr
+mar2sp
+mar2su
+2m1arti
+ma3r2u
+m1arz
+ma3s4a
+mas2e
+3ma1s2p
+ma3sses
+mas6ses.
+mas6sest
+mass1t
+ma3s2su
+3mas2t
+ma2sti
+ma4sz
+ma2ta2b
+ma2tan
+ma2tä
+m3a2tel
+ma4t3erd
+ma4t3erz
+m4atme
+2matmo
+ma4tort
+3matr
+mat3se
+mat1sp
+matta3g
+matt4r
+mat3url
+2m1au2f
+3maul
+3ma3un
+mau3r
+2mausd
+mau4ss
+mau2ta
+m4ay
+ma1yo
+1mä
+3mäc
+2m1ähn
+mäh1r
+4m1änd
+3männ
+2mäo
+2m1äp
+mär1
+mär2kl
+mär2z
+mä1t4r
+mäu2s1c
+2m1b4
+mbe2e
+mbera2
+mbe3r2e
+mbert4
+mble1i
+m3br
+mbu3sc
+mbut2
+2mc
+m3ch
+2m1d
+m2dan
+m2d1a4s
+md3ato
+md1är
+mde2a
+m2dei
+mder2
+m2d1erl
+md3ras
+md3s2e
+mdt4
+m2d1um
+1me
+me3a
+meau2
+meb4
+me2ben
+3mebr
+me1c
+medi3e4
+me1ef
+me3e4n1
+mee4rei
+2m1eff
+meg4
+mega3
+me4gel
+3meh
+meh6l3er
+meh6rert
+2m1eif
+2m1eig
+m2ei3l2
+mein4da
+meiner6k
+3m2einu
+m2eist
+me3l4ant
+me2l1au
+melb2
+mel3d2
+melde3i
+me2lek
+2melem
+me2ler
+melet2
+2melf.
+3melk
+mel4k3ei
+mell2i
+3melo
+me2lob
+mel2se
+mel3t4
+6mel6tern
+2m1e2mis
+2m1emp
+2m1e2mu
+m2en.
+me3nage
+me4n3an
+men3ar
+me4nas
+men3au
+2mendl
+menen1
+4men4gag
+men3ge
+me2nim
+men3k4
+men2on
+men4se.
+6mensemb
+men4sen
+men4ser
+men4ses
+men2so
+menst4
+m4enta
+men4t3ak
+ment5eig
+men6t5ers
+2mentn
+ment4sp
+me1o
+2meou
+2meö
+2mepa
+2m1e2pi
+3m4er.
+me1ra
+me3rak
+mer4as
+mera3um
+me2re2b
+me4rens
+mer4err
+mer4erw
+mer3f
+4m3ergän
+me3rid
+merin4d
+merin4t
+4merklä
+m4ersh
+mer3sm
+mert4r
+merz6eng
+3mes
+me2sal
+me2sä
+mes2e
+4meser
+mes2po
+2mes2sa
+mess3an
+mes6ser6g
+mes2s1o
+mes2sp
+mes2st
+me2str
+me3sze
+3me2ß3
+me3ta
+me3th
+met6t5en6d
+meu1
+2m1ex
+me2xe
+1mé
+2m1f4
+mfi4le
+2m1g2
+2m1h4
+1mi
+mi3a2b
+mia2n
+mi1ä
+mibi1
+mic1e
+mi1ch
+mi2ci
+mi3da
+mi2di.
+mi3dr
+2midy
+mie3dr
+mi3ele
+mi4e3no
+mierer4
+mie4rob
+mie2ti
+mie2to
+mie2tr
+mi1f4
+3mige
+mi3h
+mi2k1an
+mi2kar
+mi2kel
+mi2kin
+mi3k4l
+mi3kr
+mi2ku
+mi3la
+milch1
+mil4che
+mi3l2i
+mil3le
+4milz
+m2im2a
+2m1imm
+2mimp
+min2ac
+min5anze
+m2inde
+2m1indu
+mi2nef
+miner1
+mi4n3e4ri
+min2eu
+2minfo
+min2ga
+mings2
+2minh
+mi3ni
+mini3k4
+mi3n2o
+mi4n3of
+2m1inse
+mi3nu
+mioni1
+mi1p
+3mir.
+3miri
+3mirs
+3mirw
+3mirz
+3mis.
+mi2sa
+mi3sau
+mi4scha
+mi4schr
+mi4sch3w
+mise1
+mis2p
+mis5sar
+mis4ser
+mis4s1t
+mi2sta
+mi2ß1
+3mit
+mi2ta
+mite2
+mi2t3h
+mi2to
+mi2tr
+mi3tra
+mit3s2
+mit5sa
+mit3ta
+mit3t2e
+mi2t1u
+4mitz
+mi3v2
+2m1j
+2m1k4
+m3kn
+2m1l2
+ml3c
+m3le
+ml3f
+ml3k
+m3lo
+ml3p
+ml3s
+2m1m
+mma3a
+m2mab
+m2m1ak
+m2m1al
+m2mans
+mm1anz
+mm1art
+mm2as
+mmas4p
+mma2ß
+m2m1au
+m2mä4
+mm1äu
+m2m1e2b
+mme2c
+m2m1ef
+m4meh
+m2mei
+mm1ein
+mm3eise
+mme4lin
+mme4na
+mm2ene
+m4mentl
+m4mentw
+m2me2nü
+mme4r3a2
+mme4rec
+mme2s1
+mmes3a
+mme3sc
+mme4sz
+m2me4te
+m2m1eu
+mmi3el
+mmi3k
+mmi3m
+mm1inb
+mm1inh
+m2m1ins
+mm1int
+mmi3sc
+m4mita
+mmi3tw
+m2mo2l
+m2mor
+mm3p2
+mmpf4
+mms2
+mm3sa
+mm3si
+mmt2
+mm3te
+m2mum
+mm2un
+mmu3r
+m2mus
+mmül2
+2m3n2
+m4nesi
+1mo
+mo2be
+2mobj
+2m1obs
+3m2od
+mo3de
+mode3s
+mo2dr
+m1of
+mo2fe
+3mog
+2mog.
+mo2g1al
+3m2oh
+moh2a
+moi3r
+mo2k1l
+2mol.
+mol3d
+3mom
+mom2e
+3m2on
+mo2nä
+mon4dac
+mon4del
+mon2do
+mo2ner
+mon2i
+mon3s2
+mont2a
+mon3th
+mo1ny
+3m2o2o
+2mo1pe
+mo2per
+2m1opf
+2mopt
+mo1ra
+mo2rak
+mor2an
+mo2rar
+mor2d3a
+mor2dr
+morf4
+mor3g
+mor3t2
+3mos
+moster4
+mo2sto
+mot4r
+mous2
+2m1o2x
+mo1y
+1mö
+möbe2
+mö2c
+2mö2f
+4mök
+2m1ö4l
+m1ört
+4m1p
+mpa3ne
+mpe4lin
+mpe2n1
+m2p1ene
+m2pf
+mpf1ef
+mp4f3erf
+mpf3erg
+mp6fer6ge
+mpf3erp
+mp6ferpr
+mp4f3err
+mp4f3er4z
+mpf3l
+mp2fr
+mp1haf
+mp1hos
+mp3lei
+m4p3lem.
+m2p3len
+m2ples
+m3pon
+mpor6ter6
+mpot2
+mps2
+mp3sh
+m3pu
+2m1q
+2m3r2
+4m1s
+m2san
+ms1as
+m3sat
+msau3e
+m2s1än
+msch2
+m3se.
+m2s1e2d
+m2s1ef
+m2sein
+m2se2le
+mse2n
+m2s1ene
+m2sent
+ms1erf
+ms2erh
+m3set
+m2s1eu
+m2sex
+mso2r
+ms1ori
+m2spä
+m2sped
+ms2por
+m2spot
+m2spro
+ms2pu
+ms3s4
+m4stag
+m2stal
+m2stit
+ms1ums
+m2sü
+2m1t
+mt1ab
+mt1ak
+mta2m
+mt1ar
+mt3arr
+mt3aug
+m2t1e2d
+m3tei.
+mt1ein
+mt1eis
+mt1elt
+m4tenga
+m4t3engl
+mt1ent
+m4tentf
+m4tentg
+m4tentr
+m2t1erb
+m4t3erei
+m2t1erf
+m2t1erg
+m2t3e2r1i
+m2t1erk
+m2t1erl
+m2t1ers
+m2t1ert
+m2t1eta
+m2t1eu
+m2t1ev
+m2t3h
+m2ti2d
+m2tim
+m2t1in
+m2t1i2r
+mti2s
+mt1ita
+mtmen2
+mt1ob
+mt1op
+m2t1öl
+mt1ös
+mtra4s3
+m2t3ro
+m2trö
+m4ts
+mt2sa
+mts3chi
+mt3sco
+mt2s1e
+mt3send
+mt3s2ka
+mt3s4kel
+mt1sor
+mts3tät
+mt1um
+mtu3re
+mt3z
+1mu
+mu1a
+2m1uh
+mu3la
+3muld
+3mult
+m4umb
+3mumi
+m1ums
+mum2s1p
+3mun
+mun6derf
+mu2ner2
+4m1unf
+4m3ungeb
+mu3ni
+mu4nin
+4mu4niv
+4munw
+4munz
+muru2
+mu4r1uf
+m4us
+3mus.
+mu4s1a
+3musc
+mu2s1o
+mu2sp
+mu3s4se.
+mu3s4ses
+mus4ste
+must4e
+mu2s1to
+mu2str
+mu2su
+muße3
+mut4str
+1mü
+2müb
+3müh
+mü2her
+mühl1a
+mül4len
+3mün
+mü3s2si
+3müt
+2m1v
+mvoll1
+2m1w2
+mwa2
+mwa4r
+mweg2
+mwel4t3
+mwu1
+3my
+my1al
+my3l2
+2m1z2
+mzel4li
+mzu1
+mzug4
+1na
+3na.
+2n1ab
+na2bä
+n3abh
+3nabi
+na2b3l
+na4bor
+na4bos
+na2br
+nab4rü
+4n3abs2
+na2b3u
+3na2c
+nach1
+nachen4
+na5chen.
+n3achse
+nach3sp
+nach8t7ersc
+nacht8raum
+5nachw
+na3dab
+4nadd
+nade4l1
+na2der
+4n1adl
+4n1adm
+4n1a2dr
+4nadv
+3nae
+2n1af
+na1fra
+nag2a
+na2gem
+4n1agg
+n1a2gi
+na3gin
+na3g4r
+3n2ah
+na2h1a
+4n3ahn
+4n3aho2
+3nai
+nai2e
+n1aig
+4n1air
+nai4re
+n2ais
+2n1ak
+na2ka
+3nakä
+3nako
+na2kro
+4nakt
+n4al.
+na2l1a2
+nal3am
+na4lar
+na2lä
+2n1albk
+n2ald
+nal3da
+n4ale
+na2leb
+nal3ei
+na4l3ent
+na6lerei
+na4ler4g
+na4lerm
+na4l3erw
+nales2
+nal1et
+nal1ex
+nalf4
+nalg2
+nal3gl
+na2lid
+nal3la
+nal2ph
+nal3s
+n2als.
+nal3t2
+n2alty
+na2lu
+2naly
+na2mat
+3name
+na3me.
+4na2mei
+n4a3men
+4n1a2mer
+na2mid
+na3m4n
+3n2amo
+n1amp
+nam2sp
+2n1amt
+namt2s
+n1an
+2n3an.
+4na2na
+na4nat
+n3a2nä
+4n3anb
+n3and2
+nan1eu
+4n3anf
+4n3ang
+4nanh
+2nani
+4n3ank
+4n3anl
+3n2ann
+4n3anna
+4nano
+4n3anp
+2nanr
+4n3ans
+2nantr
+2nanw
+n2anz.
+nanzen4
+nan6zene
+nan6zeng
+na3ot
+na2per
+n1apfe
+4napfel
+na2pos
+na2pr
+nap2si
+n1aq
+n1ar
+3nar.
+na2r1a
+2narc
+n2ard
+n2are
+3nar2i
+n2ark
+n2arle
+n2aro
+na2rom
+nar2rh
+2nart
+n2arta
+n2arth
+na3r2u
+3nas
+n4as.
+na4schw
+n2asf
+4n1a2sp
+nas2s1c
+4n1assi
+4nasy
+nasyl4
+3naß
+3nat
+nat3au
+nat1ei
+na2th
+4natm
+nat2o
+4natom
+5nats1
+nat4sa
+n1au
+nauf4fr
+nau2fr
+5naui
+3n2aul
+4nausb
+4nausd
+4nausf
+4nausg
+4nausl
+n2auso
+4nausr
+4n3auss
+4nausw
+4nausz
+nau3te
+3nav
+nave4
+navi5er.
+navi5ers
+1nä
+4näb
+3n4äc
+3näe
+n1äf
+3näg
+3nähe
+nä2hi
+3nähm
+4n1ähn
+nä2hu
+3näi
+2n1ä2m
+4n1än
+2näp
+2näq
+nä2sc
+n2ä6s3s
+2näu
+3nä1um
+4näuß
+2n3b4
+nbe2in
+nbe3r2e
+nbu3s
+nby2
+2n1c
+n2c3ab
+n3can
+n3ce4n3
+n3ces.
+nch2a
+n3chl
+nch3m
+ncor2
+n3cu
+4n1d
+n2da2d
+nda1f
+nd2ag
+n3dai
+n2d1ak
+n4dakt
+n2dana
+n2dani
+n2danl
+nd1ann
+n2d1anz
+n3dap
+nd3arr
+n3dat
+nd3att
+nd1au
+n2daut
+n2dax
+nd1c
+nde4al.
+n2d1ede
+n3dee
+n2dei
+n4dei.
+nd3elfe
+ndel3l
+ndel4sa
+ndels5en
+nde4mot
+nden3sk
+n4dentl
+n4dents
+nde3o
+n5der.
+n5deren
+nderer3
+nd2erh
+n5deri
+nder6läs
+nde4rob
+n4de4ros
+n6der6sat
+n3d2es
+nde2se
+ndes3s
+n2deth
+ndia3
+nd1imm
+n2dob
+n2dof
+ndo2n3a
+n2dopt
+nd1or
+n2do2ri
+ndo3st
+n2d3ott
+n2dö
+nd2ös
+nd4ram
+n2d3rat
+nd3rau
+n2d3re
+n2drif
+n2droc
+n2drod
+n2d3rö
+n2drui
+n2d3run
+nd4sene
+nd2spr
+nd3th
+ndt4r
+n2duns
+ndwa5re
+ndy3
+1ne
+3ne.
+ne2ap
+3nea4s
+ne3at
+ne3au
+ne2bl
+2n1ebn
+neb4r
+2nec
+3neca
+3nece
+neck2a
+ne2dit
+2nee
+neei2
+ne3e4in
+ne3eis
+neema4
+neen2
+nee1r2
+nee3t
+n1ef
+n2ef.
+n2e3f2a
+2nefr
+2n1egg
+neg4l
+n1e2go
+neg4r
+n1e2he
+2nehe.
+2nehem
+2nehen2
+ne3her
+3nehm
+4n3ehr
+2n1ei
+3neia
+4neic
+nei4dei
+4neier
+3neigt
+3neigu
+4neing
+4neinh
+4neinl
+4neinz
+4neip
+neiss4
+ne2ke
+2n1eks
+nek3t2
+ne2l
+3ne3lä
+nel3b
+n1ele
+4nelek
+4nelem
+ne3len
+ne3l2i
+ne4lim
+ne4lit
+3nelk
+n2ell
+nel2la4
+nel4lei
+nel4lif
+3ne3l2o
+3nelu
+n2em.
+ne3mas
+4n1emb
+n1emi
+4n3emp
+2n1ems
+4nemu
+3nen
+n4en.
+n2e4n3a4
+ne5nac
+n2enb
+n2enc
+nen4dar
+4n1endb
+4n1endd
+4n1endf
+n1endg
+4n1endh
+4n1endk
+n1endl
+4n1endp
+4n1endt
+4n1endw
+ne2n1e2b
+nen3ei
+nene4m
+nenen1
+ne4nene
+ne2neu
+n2enf
+4n1engb
+nen4gen
+4n1engs
+4n1engt
+n1engu
+nen4gun
+n2enh
+ne4n3i
+n2enj
+n2enk4
+n2enm
+nen4nar
+ne2no4
+nen3s2e
+nen3sk
+nen3s2p
+5n2en3t2a
+4n1entb
+4nentd
+4nentf
+5n2enti
+4n1entl
+4nentn
+nen3to
+5nentr
+4n1ents
+4n3entw
+4nentz
+ne4n3u
+n2env
+n2enw
+nen5z2e
+ne2o3b
+ne2oh
+ne2or
+3nepa
+ne2pen
+2nepf
+ne2pi
+ne2pos
+nept4
+n4er.
+ne1ra
+ne2ra2b
+ne2rac
+ne2r3af
+ne2rag
+ne3r4al
+ne2ram
+ne2ran
+ne2r3ap
+n2erat
+ne2rau
+nerb2a
+4n3erbe.
+4n3erben
+2nerdb
+ne2re2b
+ne2rec
+5nerei.
+n1erf
+4nerfas
+3nerfr
+2nerfü
+2ner3g4
+3nergr
+n1erh
+4n3erhö
+3neri
+n2erj
+n1erk4
+5nerka
+n2erkö
+n2erli
+2n1erlö
+nerma3
+nermas4
+n1ermi
+n2ern.
+2n1ernä
+4n3erneu
+2n1ernt
+n1eros
+n1eröf
+ne1rös
+n2ers.
+2n1ersa
+4n3ersts
+nert4
+3nert.
+ne2rup
+n2erv
+4nerwar
+2n1erz
+nerz2a
+n2es.
+ne2sei
+ne2s1ev
+2ne3sh
+nesi1
+ne3ska
+ne2s1of
+ne2s1or
+ne2s1pa
+4n1es2si
+2n1e2st3r
+4nesyn
+3n2eß
+ne2tab
+2ne2tag
+net1ak
+ne2t1an
+2ne2tap
+2n1e2tat
+ne2tau
+ne4te2l
+ne2th
+ne4t3ha
+ne3the
+ne3ti
+ne4tin
+net1s2
+n4ett
+net3ta
+net3te
+net3tr
+2n1e2tu
+net4zer
+net2z1i
+ne2u
+neu1c
+neu4ere
+neuer4f
+neuer4k
+neuer4r
+neuer4s
+neuer4w
+neu3g4
+n2eun
+2n1eup
+neur2
+3n2evi
+ne2vol
+n2ew
+2n1ex
+5ney
+3nez
+3né
+2n1f
+n3f2al
+nfalt2
+n3f2ang
+nf4ar
+n3f2ä
+n3f2en
+n3f2er
+nf2es
+n4fex
+nff4
+n3fi
+nfi4le.
+nf4le
+nf2o
+nf4r
+nf3s2
+nf2tan
+nf3tei
+nf2t3r
+nft2st
+nft4ste
+n2f1u
+4n1g
+n2g1ac
+ng1ad
+n2g1ak
+ng1a2me
+ng1ams
+nga2n
+ng1and
+ngang6st
+n2gans
+ng1ant
+n3g2ars
+n2g1a2v
+n2g1äl
+ng3d4
+n2g1ein
+nge3l4ei
+n3g4en
+n5gene
+nge5nerw
+ngenmas6
+ngen3s2
+nge4ram
+n2g1erg
+ng3erse
+nger4zä
+n3g4es
+nge3s2a
+nge3sp
+ng3hu
+n2g1id
+ng2lad
+ng2läs
+n2glic
+ng4lok
+n3glot
+ngma7sse.
+n2gn
+ng3ne
+n4g3ni
+ng4nom
+ng2nu
+ng2ob
+ng1opf
+ng1or
+n2gö
+n2g3rai
+ng4ran
+n2g3rat
+ng3roc
+ngro3s
+ng2s1
+ngsa2g
+ngs3an
+ngs3au
+ng5schr
+ng4s3e4h
+ngs3pa
+ng4stec
+ngt2
+ng3ts
+n2gum
+ngzei4t
+4n3h2
+n7halts
+n5he
+nhe2r
+1ni
+3n2ia
+ni3ak
+nibb4
+nib4l
+ni1ce
+n1id
+3n2id.
+ni2de
+3n2i3de.
+4nidee
+n2idi
+ni3dr
+2n3idy
+n2ie
+nie3b
+ni1el
+nie3l2a
+nie4n
+ni3ene
+ni3eni
+nie4rei
+ni4erna
+nie4sa
+ni2eu
+ni1fl
+ni2g1a2
+2n3i2gel
+2niget
+nig3li
+ni2gn
+ni2gre
+nig4san
+nig4sp
+nihi3
+ni2kar
+3nike
+ni2kel
+ni3k4erh
+ni2ki
+nik3ing
+ni2kor
+ni2k3r
+nik3t4
+3n2il
+ni3l2a
+ni3l2i
+nil3l
+4n3imp
+n1in1
+3nin.
+n2ina
+nin2ac
+ni2nal
+3n2inb
+2nind
+2ninf
+3ning
+2ninh
+4nink2
+3nino
+ni2nor
+3n2inp
+2nins
+n2ins.
+4n3int
+n2i3nu
+4n3inv
+3n2inw
+ni2ob
+ni3ok
+ni3ol
+ni3ora
+n2ip
+ni4ron
+n1irr
+3n2is
+ni4sam
+ni2san
+ni2sä
+nis3cha
+ni4schw
+ni2s1e
+ni3se.
+nis3el
+ni2som
+4nisot
+ni2sp
+ni3spi
+nis5s4
+ni2stu
+ni3stun
+ni2s1u
+2nit
+3nita
+ni1th
+ni2ti
+nit2o
+3nitr
+nit3s4
+nit4tec
+nit6tell
+nit6ter6g
+nit6t5er6k
+nit4tie
+nit4tra
+nitt3ri
+nitt4sa
+niv2
+3nix
+2n1j
+4n1k
+nk1abr
+n2k1ac
+nka2ge
+n3kal
+n4kalg
+nk1ang
+nk1apf
+nk3art.
+nka3sc
+n2katm
+nk1aus
+n2kaut
+n2k1äh
+n2k1äp
+nk1ei.
+nke4lei
+n4kelem
+nkelma3
+nkelmas6
+nke4na
+nken4te
+nk2er
+n4k3erle
+nke4ros
+nk3ersa
+nke2t
+nk1eti
+n2ketu
+nk1id
+n2kim
+nk1inh
+n2k1ins
+n4klade
+n3klag
+nk3leis
+n2k3len
+nk3les
+n3klin
+nk2lo
+nk4nac
+nk4neb
+n2knis
+n2knit
+n2k1o4be
+n2kopt
+nko2r
+nkord2
+nk1ori
+nko4rie
+n2k1ort
+n2köl
+nk4rab
+nk3rät
+n4kre.
+n2k3rel
+n2kren
+nk3rep
+n2k3rez
+nk3ro
+n2krol
+nk2sal
+nk2se
+nk3sen
+nk2so
+nks2ti
+nk3s2z
+nk2tak
+nk4terg
+nk4t3ern
+nkte3sk
+nkt2et
+nk2tin
+nkt1it
+nk2top
+nkt1r
+nkt3ric
+nk2tro
+nk2tru
+nkt4sen
+n2kum
+nk1ums
+nku2n
+nk1urh
+n2küb
+2n3l2
+nle2ga
+nle3x
+nli4ne
+2n1m2
+n3ma
+n3mä
+nmen2s
+n5mi
+4n1n
+nna2be
+n2nada
+n2nalg
+n2n1all
+n2nan
+n2nau
+n3nä
+n3nec
+nn2ei.
+n4nein
+n3nelb
+nne4le
+nne3lu
+nn2ens
+nner4ei
+n6n5ereig
+nner4fü
+nner6geb
+nn4ergr
+nn2erh
+nn2erk
+nner4la
+nn2ero
+nne2rö4
+nn3erwa
+nner6war
+nner2z
+nne4s1e
+n2ness
+nn2eu
+nn2ex
+nn3f
+nng4
+n3n2i
+n4n3iso
+nno2b
+nno3be
+n2nof
+n2nop
+nno2r
+nn1ori
+nn4sam
+nn3se
+nn3s2p
+nnst4
+nns3tat
+nn4stoc
+nn2stö
+nn3t2a
+nn2th
+n2n1uf
+n2n1unf
+nn1ur
+1no
+3no.
+no5at
+n2obel
+2nobj
+no2bla
+n2oble
+3noblo
+3noblö
+2n1obs
+no1c
+noche4
+noch4r
+2no2d
+no3dr
+no2ed
+n1of
+no2fe
+2noff
+2n1oh
+n2ohe
+no3id.
+2n3okk
+nok2l
+n4ol.
+n3ole
+no2leu
+no4lig
+no2liv
+2no2ly
+3nome3
+3nomp
+non2e
+n1onk
+n1ont
+2nony
+3n2opa
+no2per
+no2pi
+n1ops
+3nor.
+nor2a
+no2rad
+n2o1rak
+no3ral
+no3r4ar
+2norc
+nor4da
+3nordb
+nor4des
+nor2d5r
+no3r2e
+2n1org
+3norh
+3n2orl
+5norm
+norm2a
+nor3mal
+3norö
+3nors
+2n1ort
+3n2os.
+nos2e1
+no3sh
+no5sk
+no2sp
+2nosti
+nost1r
+2nostv
+nos2u
+no2tan
+no3tart
+no2tä
+not1e4i
+no6tentr
+no2ter2
+noterb3
+no2tex
+not3h
+no2tho
+no2t3in
+no2t3op
+no2tr
+3nov
+2n1o2x
+3noz
+2nöd
+4nö2f
+4n1ök
+4n1ö4l
+n2ör
+nö4s3s
+1n2öt
+4n3p4
+npa2ge
+npf4
+npsy3
+2n1q
+6n3r2
+nran2
+nra4s3s
+nräu3s
+nrebe2
+nreli1
+nre3sz
+nrö2s
+nrücker6
+4n1s
+n3sabo
+n2sa2d
+n4s1agi
+ns3a2k
+n2sall
+nsa2r
+ns3are
+n3s2arg
+ns3ari
+n3sark
+nsa4s
+ns4ath
+nsau4r
+nsau4se
+n2saut
+ns2av
+ns2ax
+n2s1än
+ns2äug
+n2s1äus
+n4schef
+nsch5eul
+n4schl.
+nscht4
+n3schu
+nsch7werd
+ns4cr
+ns1eb
+ns2eh
+nse2ha2
+nseh5ere
+nsei4n
+n4seinf
+n4seint
+ns2ele
+ns3elem
+n2sem.
+nsen4sp
+n2sepo
+n2s1erf
+ns1erg
+n2serh
+n3seri
+ns1erk
+ns3erle
+n4s3erne
+n2serö
+ns1ers
+n4sersc
+ns3ertr
+n2s1erw
+n2serz
+n2seth
+n2s1eu
+nsfi4l
+ns3hor
+ns1id
+nsi4den
+n2simp
+n2sini
+nsinn2
+ns3int
+nsi2te
+nsi2tr
+n3s2kal
+n3s2kel
+ns2kis
+n3skle
+n3s2ky
+n3smara
+n2s1o2d
+ns1of
+n2soff
+ns4om
+n2s1ont
+n2sop
+ns2orc
+n4s3ort.
+nsp4
+ns2pac
+n3s2pek
+ns2pel
+n5s4pen
+n4speri
+n2sph
+ns2pi
+n5spie
+n2spo
+n2sprä
+n4s3prie
+n2spro
+n4s3s2
+nst1ak
+n4stale
+nsta2n1
+nst3ane
+n2stas
+n4s3tat.
+n6staten
+n4stats
+ns2tau
+n5s2te.
+n4steif
+nst5eife
+nst7einhe
+ns4tem.
+ns4ten.
+n4stent
+ns4ter.
+nst5erge
+n7stern
+ns4tes.
+n5steu
+n5s2tic
+n4stilg
+n2stob
+n4stole
+nst5opfe
+n4strac
+n4strad
+n6strieb
+n4strik
+ns4trun
+ns2tum
+nst3u2t
+n3suf
+ns2um
+ns1un
+ns2ung
+n2s1urs
+n2sut
+n3sy
+ns2zin
+4n1t
+n3t2a3c
+ntak4ta
+nta4lin
+n4t1all
+nta2lo
+nt2alp
+nta3ne
+n4tansp
+nt1ant
+n4tanza
+n3t2arb
+nt1ark
+n3t2arm
+n3taro
+nt1art
+n4tarti
+nt3artu
+n3t2arz
+n2tath
+n2tauf
+nt1äm
+n2t1äu
+n3te.
+nte3au
+nte1e
+nte3g6
+n2t1eh
+n3tehe
+n2teig
+n4t1ein
+n2t1eis
+nt1e2mo
+nt4en
+n3ten.
+nte4na
+nten6te.
+ntera4
+nte6r5eis
+nt4erh
+nt4erk
+nt4erm
+nt4ern
+nt4ers
+nt4ert
+n3tes2
+nte3sa
+n4t1ess
+n6testri
+n3tet.
+n2t1e2ta
+nteu3
+nteu6eri
+nte3v
+ntge4n
+nt3hel
+nt3ho
+nt4hos
+n3thr
+nt4hu
+n2t5hum
+nt4hy
+nt2i
+ntim3p
+nt3inf
+n2t3inh
+ntini1
+n3t4lem
+ntmen2
+ntmo4
+ntni2
+ntnis1
+ntopf3e
+n2torg
+n4t3o4rie
+nt4ral
+ntras3s
+nt1rau
+nt4raum
+nt3rea
+nt3rec
+n3t4ree
+nt3reif
+n3trep
+nt4repr
+nt3rich
+n4t3rieg
+nt4rig
+n2troh
+n3trop
+n2t3rü
+n4t1s
+nts2ah
+nts2p
+nt4s3par
+nt5spe
+nts2ti
+nt2sur
+ntt2
+nttü3
+ntu4re.
+n4tw
+nt3z
+1nu
+3nu1a
+nu4ale
+nu3a2r3
+nubi1
+2nuc
+nude2
+3nue
+nu2es
+nuf2
+nu2fe
+2n1uh
+3nuhi
+3nui
+nuk4
+nu3kl
+nu2kr
+null3eb
+nul4lin
+n2um.
+nu2ma
+2n3umb
+2numf
+2numg
+2numl
+3numm
+2numr
+2n1ums
+2n1umv
+2n3umz
+nu4n
+2nuna
+2n1une
+3n2ung
+4n3ungl
+4n1uni
+n3unk
+2nunr
+2nunt
+2nunv
+2nunw
+3nuo
+2nup
+2nur
+nu2ra
+nu4r2i
+nurs2
+nur2z
+3nu2s
+nu3sc
+nu3se
+nus1p
+nu3spo
+nuss3er4
+nu4s1t
+nu2ß1
+3nut
+nu2t1a
+n3uto
+nu2t3r
+3nuu
+3nux
+3nuz
+2nü4b
+nür1c
+1nüt
+2n1v2
+n3ver
+n3vl
+nvoran4
+2n3w
+nwei4st
+1ny.
+1nyh
+nyle4
+n1yo
+1nyr
+1nys
+1nyw
+4n1z
+n2z1ach
+n2z1a2g
+nza2k
+n2zan
+nz3a4ne
+n3zani
+n2zar
+nza4s
+n2zat
+n2z1au
+n2zän
+n2zär
+nze4l3a
+nzel3l
+n6zenerg
+n4zen4se
+n4zentl
+nz3erem
+n2z1erh
+nz1erl
+nzer4lö
+nz5erste
+nzer6tra
+n4zerwe
+n3z2es
+nze3sk
+nze3str
+nze2t
+nz1eta
+nze3u2t
+nz1id
+nzi2ga
+n2zinh
+n2z1ini
+nz1int
+nz3le
+nzlei3
+n2zof
+n2z1op
+n2zöl
+nzug2s
+nz1wa
+n2z1wä
+n2zwet
+n2zwir
+n2zwö
+n2z1wu
+ño1
+2o3a2
+o4a3bi
+o4ac
+oa3che
+oa3chi
+o4ad
+oa3de
+oa3in
+oa3k2e
+oak1l
+o4a3la
+o4a3mi
+oa4n
+o2a4r
+o2a3s
+oa4si
+o5ass
+o4at
+oa3te
+o5au
+o1ä
+o1b
+2ob.
+o3b2al
+obal3l
+ob2am
+ob2as
+ob1auf
+2o3b2ä
+2obb
+ob2e
+2obe.
+2obea
+2o3bec
+2obef
+o2b3ein
+2oben
+obe4na
+oben3d4
+o2ber
+o3ber.
+o4berb
+ober5eis
+1oberf
+ober3in
+oberin6g
+obe4ris
+7oberungs
+2obev
+2obez
+2o3b2i
+obi2t
+ob3ite
+3obj
+ob1la
+ob3lei
+1ob3li
+2oblo
+2ob2lö
+ob2lu
+2obo
+ob1or
+2obö
+ob3rei
+2obrü
+ob3s2h
+ob3sk
+obs2p
+2o3bu
+o4bunt
+obus3s
+obu2t3
+2o3bü
+o4büb
+2oby
+2oc
+o3ca
+oc1c
+o1ce
+och1a
+ocha2b
+ocha2r
+o1che
+oche4b
+o2ch1ec
+och1eh
+och1ei
+oche2l
+ocher4k
+ochi4d
+och3l
+och3m
+och1o
+och3ö2
+och3r
+ocht4
+o1chu
+ochu2f
+och3u2t
+och1w
+o3ci
+ock5ersc
+ock3sz
+ock3ta
+o1cl
+o3co
+o1ç
+o1d
+2o3d2a
+od3ak
+od2dr
+o3de2c
+o3d2e3i
+odein3
+ode4l3ag
+ode2n1
+ode2s1e
+ode3sp
+o3dex
+2o3dia
+odi3c
+2odif
+2o3dir
+2odn
+o2don
+odo4s
+2odr
+o2dre
+odt4
+2odu
+o3dy
+2o1e2
+oe4b
+oe3di
+oe4m
+oen1e
+o3er
+o4e3s
+oe4sc
+o2e3t
+o3et.
+oet4h
+o3ets
+2ofa
+of1a2d
+of1a2g
+of2ang
+of1au
+2ofä
+o2f1e2b
+o2f1ec
+o2f1e2d
+o2f1ei
+o2fent
+2o3fer
+o4f1erb
+2o3f2es
+o2f1e2t
+of1eun
+of2fa2
+of4fal
+of4fam
+off1an
+off3erz
+of2f1in
+of2fir
+of2fix
+1offiz
+of2f3l
+of2fo
+of2f3r
+offs2
+off3sh
+off3si
+off3sp
+off3t4
+of2fu
+of2fü
+2ofi
+ofi3k4l
+2o1fl
+of3le
+of3li
+of4lö
+2ofo
+2ofö
+2o1fr
+of3rä
+of4rü
+ofs1
+of2sa
+of4sam
+ofs2ch
+of2se
+of2si
+of2sp
+of4staf
+of2sto
+ofs2tr
+ofstra8ssen
+of2su
+2oft
+oft2a
+of2tei
+of3th
+2ofu
+of3ur
+2o1g
+o2g1ab
+o2g1ac
+oga3d
+og1ang
+o2g1ei
+ogeld2
+oge2l1i
+ogener4
+ogeni3
+ogen4id
+ogenmas6
+ogerätein8
+og2gl
+o3gh
+ogi2er
+ogin1
+o2g1ini
+o3gis
+og1l
+og2lo
+o3g4n
+ogo4i3
+og1o2ri
+og2s
+og3sc
+og3si
+og3s2p
+ogs1t
+2o1ha
+oh1alk
+o1hä
+o1he
+o2h1eis
+o2h1er2t
+o2h1er2z
+2o1hi
+2ohl
+ohl1a
+oh2la2d
+oh2lä
+oh3lec
+ohl1ei
+oh3lep
+ohler2
+oh4lerg
+oh4l3erh
+oh4lerw
+oh3lo2
+oh4l1or
+ohls2
+oh2lu
+ohm2a
+1ohmi
+oh3mu
+oh4n1ac
+ohn1ap
+oh3nee
+oh2ni
+1ohnm
+oh2n1o
+ohn3sk
+2o1ho
+ohol1e
+oho4len
+o2h1o2p
+2ohö
+oh3öl
+ohr3a2
+oh4rat
+oh2rel
+oh2rem
+ohren3s
+ohrer2
+oh4rerg
+oh3rie
+oh4rin
+oh2rol
+ohrt4r
+o1hu
+oh1w
+2o1hy
+2oi
+o1i2d
+oi4da
+o3ie
+o1im
+o1in
+o4ine
+oi2r
+o2isc
+o3isch.
+oi3se
+o1ism
+oiss2
+oi4st
+o1i2tu
+2o1j
+2o1k
+ok2a
+oka3b2
+ok3ac
+oka3i
+oka2la
+okale2
+oka6lere
+ok2e
+3o2kel
+oki4o
+ok1lä
+ok2li
+ok2o
+oko4pt
+ok2so
+ok2s1p
+oks2t
+ok3t2
+3okw
+2ol
+o1la
+ol3abu
+olaf4
+ol1ant
+ol2ar
+ol4arm
+o3l2a3s
+olast4
+ol1a2v
+4o1lä
+ol1ät
+4olc
+ol2chr
+ol4d1am
+ol2dä
+ol2d1ed
+ol2dei
+ol4d3eng
+old5ersa
+ol2deu
+ol2dim
+ol2d3o
+ol4dr
+4ole.
+o2l1ef
+ol1eie
+o2l1eis
+oler2
+o2l1er3t
+ol2e3u2
+ol1exz
+o1lé
+ol2fa
+ol2fem
+olf3ere
+ol2f3l
+olf1r
+ol2f3ra
+olft4
+olge4ne
+ol2gl
+ol2g3r
+ol2i
+olie4n1
+oli2er
+oli3k4
+oli3tu
+3oliv
+oli3ze
+ol2kl
+olk3re
+oll1ac
+ol4la4d
+ol2l1ak
+ollä2
+ol2läd
+oll1eb
+ol4l1ec
+ol2lei
+oll3ein
+ol3lem
+oller6ge
+ol4ler4k
+oll3erw
+oll3ess
+ol2lic
+ol4li4st
+ol2lo2c
+ol2lo2g
+ol2lö2
+olls2
+oll3sa
+oll3sp
+ol2lu
+ol3lus
+4olo
+ol2of
+olo1p
+ol1ort
+ol3s2k
+ol3te
+ol3t4h
+ol3ti
+o1lu
+olu2th
+ol2y
+ol2z1a
+ol3zan
+ol4z3ern
+ol2zim
+ol2zo
+ol2zw
+2om
+o2mab
+oma2bl
+o2m1a2ge
+om1alg
+om1all
+oma4ner
+o4mante
+o2m1ap
+o2m1ars
+o2m1art
+omar4te
+o2m1a2sy
+o3mat
+o2m1au
+o2meb
+om1ebe
+o2m1ef
+o2m1ei
+o2mel
+o3meld
+o5men.
+o4mep
+om1er2h
+omer2s
+o2meru
+om1er2z
+omi2c3
+omiet1
+o3mig
+om1ind
+om3ing
+om1ins
+o2m1int
+om3ma
+om3mä
+om3m2e
+om3mu
+o4mn
+3omni
+4omo
+o2m3oa
+o2m1org
+om1o2ri
+om3pf
+omp4l
+oms2
+om3sk
+om3t4
+o2mum
+o4munt
+o3mus
+2ona
+on3a2b
+ona3g
+o3nal
+onaler6e
+on3ann
+onan6z5ei
+on1ap
+o2narb
+ona3th
+onat2s
+on2au
+2onä
+on1äh
+2onc
+on2dan
+onderer5
+onde8rers
+ond1r
+on2dra
+on4drin
+ond3sk
+2one
+on1ec
+o3nee
+o2nef
+one3h
+on3ein
+one2m
+on1ema
+one2n1
+o4n3ends
+on2eng
+o3ner.
+o2n1erb
+on1erd
+oner4fa
+on1erg
+o2nerh
+on4erka
+on1erö
+on1ers
+o3nett
+on2eu
+on3f2
+on3gla
+ong4r
+ong3s
+on2gue
+2o3ni
+on2i3d
+onie3g
+o4nikr
+o4nim
+o4nind
+on3ing
+o4ninh
+on2inn
+o4nins
+on3k2
+1onke
+3onkel
+onli2
+onli6n
+onlo2c
+2onn
+on3n2an
+on3n2e
+ono1
+o3nod
+o2nof
+o2noke
+on1orc
+on3ord
+ono3s
+onot4
+ons1a2
+on2seb
+onsen1
+onse2t
+on4sho
+onsi2d
+ons3ing
+on4s3l
+ons1p
+onst2a
+ons3tie
+onst4r
+on3ta
+on2t1eb
+on2te2l
+ont5end
+on4t3erl
+on2th
+on4t3rat
+2onuk
+o3nur
+2onut
+on3v
+1ony
+on3z2
+onze3in
+o1ñ
+oofs2
+1oog
+oo2ka
+oo2k3l
+oo2kn
+oo2mo
+o1op
+o1or
+oor3d
+oo4sk
+oo2su
+oo2t1a
+oot1ei
+oo4t3h
+oo2tr
+oot2s1t
+oo2tur
+2o1ö4
+2op.
+o1pa
+opab4
+op1akt
+opa2le
+o3pas
+1ope
+2ope.
+o1pec
+2o1ped
+op1ef
+2o1pei
+o1pek
+2opel
+ope3l4a3
+2open
+o2pera
+op1erh
+o1pes
+2opf.
+op2f3a
+op3fah
+op2fä
+o2pfe
+op2fin
+opf3la
+op1flü
+op2fo
+op3for
+4oph2
+o3phe
+o1p2i
+opi5a2
+opi3er.
+opi5ers.
+opie4r3u
+opin2
+2opl
+op3lag
+o2p3le
+op3li
+o3p2n
+2opo
+opo2la
+op2pan
+op4pl
+1oppo
+2oppt
+2o1pr
+3o4psi
+ops2t
+op3sz
+1op3t4
+o2pum
+2opy
+2o1q
+2or.
+or1a
+2ora.
+o1raa
+2or3a2b
+o2rabb
+o2r3add
+or3adr
+o1r2ag
+1orake
+o1ral
+oral5l
+o4r3alm
+or4alt
+or2am
+or3a2mi
+o1ran3d4
+oran2f
+oran2m
+oran4ze
+or3ap
+2orar
+or3arr
+o1ras
+o2r3att
+2orau4
+orau2s
+oraus6wa
+2o1raw
+o3rä
+or1änd
+or1ät
+orb2l
+or1c
+2orca
+or2ce
+2ord.
+2orda
+ord1am
+or2dar
+or2dau
+2ordb
+ord3eng
+orde4s
+or2deu
+or4d3ing
+or2d1ir
+or2dit
+1ordn
+or2do4
+2ordr
+ord3t
+2ordu
+2ordw
+2ore
+ore2a
+o2r1e2b
+o2r1eck
+o5ree
+or1eff
+ore2h
+or1eig
+oreli1
+orems2
+o2r1er
+o3r2ere
+orer1i
+o3r2ero
+or1e2th
+o2r1eu
+2orf
+or2far
+orf3li
+or3g4a
+2orget
+or3ghi
+2orgia
+orgi1e
+or2gl
+or3gla
+or3gle
+or2gn
+2orgr
+2orh
+2oria
+2oric
+4o3rie.
+o3rien.
+o6rienti
+o3rier
+4oril
+or1ima
+ori4mi
+4orin1
+o2rind
+2oris
+2oriu
+2ork
+or3k2a
+or4k3ar
+ork4r
+ork3s
+2orm
+or2mam
+or4mans
+orm3asp
+or2m1eb
+or4m3erf
+or4m3er4g
+or2mor
+orm3ord
+or2mum
+ormu4n
+or4muni
+or4munt
+ormvol4
+ormwa5
+or2n1ac
+or2nal
+or2nar
+or5ne.
+or3ni
+or4nin
+or3no
+2o1ro
+o2r1ob
+or3oly
+oro3n2a
+or1opf
+o2ro2r
+o3rou
+o2r1ox
+2o1rö
+2orp
+2orq
+2orr
+orr4a
+or3r2e
+or3rh
+2ors2
+or3s4a
+or3sh
+or3si
+or3sk
+or3sz
+or2t1ak
+or2tan
+orta2r
+or2tau
+or2tef
+orte4n
+or4ten5g
+ort3erb
+or4t3ere
+ort3erf
+orter6fa
+ort3erg
+or4terk
+or4t3erl
+orter6sc
+or2t3e2v
+or2the
+or2tin
+or4t3off
+or2to2r
+or2tö
+or4trau
+or4t3räu
+ort3re
+or2t1um
+2o3ru
+or2uf
+or1uh
+orum4s
+o4r3un
+o5rus3
+o2rü
+o2rya
+or3z2e
+o1s
+2o3s2a
+osa3b
+os3ad
+osal2
+2osc
+o4s3ca
+osch3ar
+o3sche
+osch3le
+2ose
+ose1e
+ose1in2
+os2el
+ose2n
+osens2
+o2s1er4k
+os2ex
+2osh
+o3s2hi
+os4hu
+2osi
+o3sk
+o4ska
+os2kal
+o4ski
+2os2kl
+2os2ko
+o4skr
+os2lo
+1osm
+os4mog
+2os2o
+osol1
+o2sö
+2osp
+os1pec
+o3s2po
+2oss
+os6s3ac
+oss3ala
+oss3and
+os4sä
+o6ssel
+o3ssem.
+oss3en4k
+o3ssent
+oss3enz
+oss1ep
+oss2er
+oss3er4b
+osser4e
+oss5erei
+oss3er4f
+o4ssi
+os2s1o2
+os2sp
+oss1pa
+os2s1t
+os2su
+os2t
+ost1a
+o2stab
+o3stal.
+osta4s
+ost1ei
+oste2n
+o4s3tep
+o4sterd
+oster3e
+ost5erwe
+oster8wei
+ost3eur
+ost3h
+o2stid
+o2stin
+ost1o4b
+os3ton
+o2st1or
+ost3ran
+o2st3rä
+ost3re
+ost3rot
+ost3uf
+2osu4
+os1um
+2osy
+o3s4ze
+2oß
+o2ß1el
+o2ß1en2k
+o2ß1enz
+oßer2
+o2ß1erb
+o2ß1ere
+o2ß1erf
+oß1is
+oß1u
+2o1t
+o2t1abi
+ot1ah
+o2t1ak
+o3tal
+o3tam
+ot1ant
+ota4s
+ot1ast
+o2t1au
+o3tau.
+ot1ä
+o2teb
+ote1i
+o4t1eib
+o4t1eic
+ote3i4n
+o4t1eis
+ote4l1a
+o3tem
+o4t1emi
+ot2em3p2
+ote4na
+o4tentb
+ot3entr
+ot1erb
+o4t1er4l
+o4t1erw
+o3the
+o4them
+o2t3hi
+o2thr
+4oti
+ot2id
+o2til
+o2t1i2m
+ot2in
+ot3inh
+o4tl
+otli4
+ot2o
+otob4
+ot3opf
+oto4rei
+o2t1ö
+o3tran
+otra4s3
+ot3rat
+ot4rau
+ot3re
+ot3rin
+ot3roc
+ot3ru
+ot2s3at
+ots1o
+ots1p
+ots2pe
+ot3s4tra
+ott3akt
+ott3an
+ot2t1a4s
+ot2tau
+ot2teb
+ot4terh
+ot4terk
+ot3te4s3
+ot2t3h
+ott2o
+ot2t3r
+ot3t4ra
+ot3t4ru
+ot1url
+oub4
+ouff6
+ou1f4l
+ou4ge
+ou3gl
+o1uh
+ou1is.
+ou4le.
+ou2les
+2o1um
+2o2u2n
+oung5
+oun4ge.
+oungs2
+o4up
+4our
+oure2
+ou2ret
+ouri2e4
+ourme4
+our4ne.
+ou3s2i
+ou3s2t
+o4ut
+3outp
+out3s2
+outu4
+2o1ü
+o1v
+ov2a
+2ovel
+o3ven
+2ovi
+oviso3
+2ovo
+2o1w
+o3wec
+owe2r1
+o2wh
+o3wi
+o2wu
+o1x
+2ox.
+ox2a
+2oxk
+ox3l
+o2xu
+1oxy
+o1yo
+2o3z2
+3o4zea
+ozen4ta
+ozes4sc
+ozir3
+ozon1a
+oz3z
+órd2
+ö1b
+öbe4l3i
+öb2l
+ö2ble
+ö2b3r
+ö1ch
+öch3l
+ö2chr
+öchs2t
+öch6st5ei
+öchst3r
+ö1d
+öde1r
+ödi3
+ödin3
+1ödu
+ö1e
+1öf
+öf2fa
+öf2fl
+öf3l
+öge3le
+ögen4s1
+ög3l
+ög3r
+ög2s
+ö1he
+öhe4n1
+öhl2e4
+öhre4
+öh3ri
+öh2s
+ö1hu
+ö3ig.
+ö3isch.
+ö1ke
+1ö2ko3
+ök3r
+ök2s
+ö2l
+3öl.
+öl1a2
+öl1ei
+öl1em
+öl2f1ei
+ölf2er
+öl1in
+ölk4e
+öl2k3l
+öl2la2
+öll1an
+3ölm
+öl2nar
+ölo2
+öls2
+öl3sa
+öl3sz
+öl3tu
+1ölu
+ölz2w
+ö1m
+öm2s
+ön2e
+ö3ni
+önizi1
+önn2e
+öo1
+öo2ta
+öoti1
+2öp
+ö1pe
+öpf3l
+ör3a2
+örb2e
+ör2b3l
+ör1c
+ör2dr
+ör3dra
+ö2r1ec
+ö2r1ei
+ö2r1e2l
+ö2r1em
+öre2n1
+ö2r1ene
+ö2rent
+ö3r2erb
+ö2r1er2e
+örer2f
+ö2rer2g
+ö2rer2l
+ör2err
+ör2erw
+ö3r2erz
+ör1ess
+ör2f3l
+ör2gl
+ö2rim
+ör2kl
+örn2e
+örner4v
+ör1o
+örpe2
+örs2e
+ör3sk
+ört2e
+öru4
+ö2r1une
+ö1s
+ö2sa
+2ösc
+ö2sch3a
+ösche2
+ö4sch3ei
+öscher3
+ö6sch5erf
+ö6sch5eri
+ö2schi
+ö2sch1l
+ö2sch3m
+ö2schn
+ö2schw
+ös1ei
+ö2sein
+ös4en
+ös4es
+2ösl
+ös2o
+ö2sp
+ö3s2s
+ös4s1c
+ö4s3set
+ös4st
+ös4t
+ö2st1a2
+ös4u
+ö1ß
+ößen3
+öß2ti
+ö1t
+ö2t3a
+öte4n1
+ö2t3r
+öt2sc
+öt2tr
+ö1v2
+ö1w
+ö1z
+öze3
+özes4
+1pa.
+1paa
+1pac
+p2ad
+pa3da
+2p3a2dr
+pa1fr
+1pag4
+pa3gh
+pa1ho
+1pak
+pa1k4l
+pak2to
+3pala
+pala3t2
+3palä
+3pal2e
+pa3l2i
+1palm
+pal2ma
+pal2mä
+pal2m1o
+2palt
+pal2ta
+pal4tei
+pal2tr
+pa2m3a
+pa2nar
+pa4n3at
+pan3d
+pan4ds
+pa2neu
+panf4
+pang4
+pa4nisl
+pank4
+2panl
+2pann
+panne2
+pan4n3eb
+4pannu
+1pa2no
+pan3sl
+pan3t4h
+1panto
+2pantr
+panz2
+pan5ze
+1pap
+papi2
+papieren8
+papie8r7end
+pap2pr
+pa1q
+1para
+pa4r3aff
+par3akt
+pa4rant
+2parb
+1p2arc
+par3d
+2parer
+parer8geb
+1parf
+2parfö
+2parg
+pargel6d
+1park.
+par4k3am
+par4kau
+par4kr
+1parks
+par3m2
+par3ne
+1pa2ro
+2parp4
+2parr
+4parta
+1parti
+1partn
+3party
+par3z
+pas2e
+pa1s2p
+pas6sein
+passer4
+pas6serg
+pas2s1p
+pas2t
+pa2ßu
+pat1a
+pat4c
+pa3t4e2
+2patel
+1pat4h
+1pati
+1pat4r
+1pau
+2p1auf
+pa3uni
+2pausz
+1pav
+pay2
+1pä
+3päc
+päck3er
+3päd
+päde2
+pä2d1er
+3pär
+3pä4s3
+pä4t1e2h
+pä4tent
+pä4tep
+pä4t3erb
+pät3h
+pä2to
+pä2tr
+pät5s
+2p1b
+pbe1
+2p3c
+2p1d2
+pda2
+1pe.
+pe2a2
+pea4r
+pea4s
+p1e2b
+pech1
+1peda
+1peel
+pe2en
+2pef
+4p1eff
+1peg
+pei1
+2peic
+1peil
+p2eim
+2peis
+1peit
+pekt4i
+1p2el
+3pel.
+pe2l1a2
+pe4lai
+pe2l1ä
+peld4
+3pele
+pe4l1e2h
+pe2l1er
+pe2let
+pe2leu
+peli2d
+peli4n
+pe4l3ink
+pel3inn
+pel3k
+pel3l2a
+pel3lä
+pel3l4e
+pell2i
+pe2lob
+3pels4
+pel3sp
+1pem
+1pen
+pe3nal
+pe4nas
+pen3d2a
+pe4nen1
+pe4ni2t
+pe2n1o
+pens2
+3pen3si
+pen3so3
+pen3sz
+pent2a
+2pentw
+penty2
+pe2nu
+1pep
+pe3pi
+pept2
+pe1ra
+per2am
+per3as
+pe2r1ä
+pere2b
+perer4f
+pe3r2i3d
+3perio
+1perle
+1perlh
+3pero
+perra2
+per4r3an
+per4rä2
+per4ric
+per6rieg
+1pers
+2perse
+2persi
+3perso
+3persp
+peru2
+pe3run
+1perü
+perwa4r
+pe3s2a
+pes2e
+pese2n
+1pes5s2
+pes2t
+pest1o
+pe4stop
+3pet
+pet4r
+1pé
+2pf.
+p2f1ab
+p2fad
+p2faf
+pf1ai
+p2f1ak
+pf1am
+pf1ans
+p2fa2r
+pf3are
+p2f1au
+1pfä
+p2fär
+p2f1äu
+4pfe.
+p2fef
+p2fei
+pf1eim
+pf1ein
+pfe2l
+p3fen.
+p4fener
+p2fent
+p4f1ep
+pfe2r5a
+p4ferde
+pfer6pro
+pf4es
+pf3f4
+pffa3
+p2f1i2d
+pf1inn
+p2f1ins
+pf1lam
+pf4lan
+pf3lä
+pf4leg
+pf3lei
+pf3lo
+p2f3om
+p2for
+pf3r
+pf1ra
+pf4rü
+pfs2
+pf3sa
+pf3se
+pf3sl
+pf3so
+pf3sz
+pf3t4
+p2fum
+2p3g2
+pgra2
+1ph
+2ph.
+phal4te
+p1hand
+3phas
+p1hau
+phä1
+3phän
+2phb
+2phd
+2p1hei
+phen3d2
+phe4n1e
+phen3s
+2ph1ers
+2phf
+2phg
+phik1a
+phi4kan
+2phk
+ph2l
+2phm
+2phn
+p2ho.
+p2hob
+pho2s
+2phö
+ph4r
+2phro
+2phs
+ph3t4
+2phthe
+phu4s
+phu3t
+2p1hü
+3phy
+2phz
+pi2a1
+piab4
+pia3k4
+pi4ali
+pia3n
+piap2
+pia3s
+pi1ce
+pi2el
+piel3a2
+1pier
+pie2ra
+pie4reb
+pies4
+1pig
+pi3gl
+1pil
+pi3le
+3pilo
+pil4zer
+pil2zw
+p2im
+3pin.
+pi2nad
+3ping
+pingen4
+ping3s
+3pins.
+3pinse
+pin3s2p
+pi2o
+pi3o2i3
+pi3onu
+pi3os
+3pip
+pi2pe
+3pirate
+pi3ri
+3pirin
+1pis
+2piso
+pis2t
+pi3sto
+pit2a
+pi3t2h
+pit2s
+pitz2e
+pi2z1in
+2p1j
+2p1k2
+pku2
+1p2l2
+2pl.
+3pla
+p3lab
+4p3lad
+p3lah
+pla3na
+pla2y
+3plä
+2ple.
+ple1c
+ple2e
+p4leg
+ple3n2
+2p3ler
+p3les
+p3lic
+2plig
+3plik
+2p3lu
+2p3m2
+2p1n2
+1p2o
+pob2
+po1c
+3pock
+3pod
+3poe
+po2el
+2poh
+po2i
+po3id
+3poin
+3pol
+po2lan
+po2l1au
+pold2e
+po3li
+pol3lo
+polo3p
+pol3z2
+pom2ph
+2pond
+pont2
+po1ob
+po2p1ak
+po2p1ar
+po2pl
+po3pt
+po1rau
+porf4
+3portal
+por2th
+3porti
+3porto.
+3portos
+3portr
+por4tre
+por6tric
+pos3s2
+pos4t
+po2sta
+po4stad
+po2stä
+po4stei
+po4stem
+post3ra
+po2ta
+pot1ar
+3potä
+3pote
+pot2h
+po2t3in
+pott1r
+po2t1u
+po3un
+po2w4
+po3x
+pö2bl
+pö2c
+2p1p
+p2p1ab
+pp1ang
+pp1ans
+ppa2p
+p2pat
+pp1au
+ppe3e
+pp1ei
+ppeli5ne
+pp2e2n1
+ppe4na
+p2p1erz
+p2pf4
+pp1fr
+p2p1h2
+p2p1i4a
+p4p3lac
+p4plan
+pp3lä
+p2p3le
+pp3lis
+pp3oh
+p2p1ö2
+pp3p2
+p2p3ra
+p2p5rä
+pp3ren
+p2pri
+pp3rol
+pp3rot
+p2p3ru
+p4ps2
+pp3sa
+pp3sy
+ppt4
+pp5te
+p3puc
+p2pul
+p2p1um
+p2punk
+p3pur
+p2r2
+1prak
+pra4s3
+pra5sp
+1prax
+p4rä
+1präd
+1präf
+1präg
+1präl
+3präm
+1präp
+3präs
+1präv
+2pre.
+2prec
+3pred
+2pree1
+pre2ei
+2preg
+1prei
+3preis
+prei4s3c
+prei6sei
+prei4ss
+2preiz
+1prem
+pren4ga
+2p3rer
+1pres
+press4e
+1preß
+pri4e
+2prig
+pri2l1
+2pring
+prings4
+1prinz
+pri2t1
+prit3a
+priter4
+prit3t
+1priv
+1pro1
+3prob
+pro3be
+2proc
+7prod
+3prog
+3proj
+2pross
+2proß
+prot2e
+3proto
+2prott
+2prö
+1prüf
+1prüg
+2prüh
+2prün
+2p1s
+4ps.
+p3sat
+ps1id
+ps3k
+p2sö
+ps4pi
+pss2
+p2st1au
+pst3erh
+p2stu
+3p2sy
+4psys
+ps2ze
+2p1t
+pt1a
+pt2ab
+pta2g
+pt3a2t
+pt3ax
+p3te
+p4t1e2b
+p4t3ec
+p4t1ei
+p4tele
+p4temp
+4pten
+p4t1en2g
+p4t1ent
+p4t1ep
+pt3erei
+p4t1erw
+p4t1erz
+p4t1e2ti
+p2t3h
+p3ti
+p4t1in1
+pt3ing
+pto2mo
+pto2p
+p4tos
+pto2w
+ptpo4
+pt3r
+pt1s2
+pts4t
+pt1uh
+pt1um
+p3tung
+pt1urs
+p2tü4
+3p2ty
+pt3z2
+1pu
+pu1a
+pub4
+2puc
+pu2dr
+2p1uh
+2puk
+pu2kl
+pu2k1o
+pu2lin
+pul2sp
+pul2s1t
+3pulv
+2pulw
+pum2pl
+4pund
+pun2e
+pun2s
+2punt
+2pur
+pu2ra
+pu2rei
+pus2h
+pu3she
+3put
+pu5t2e
+put2s
+puzi3
+1püf
+pül3l
+2p1v
+2p1w
+pwa4r
+3py1
+py3t
+2p1z2
+qu4
+quel4la
+que3rel
+quer5n
+que4te.
+1queu
+1ra.
+r1aa
+ra2ab
+2raac
+2raal
+ra3ar
+r2a1as
+r1ab
+ra2b1ar
+r2abä
+1rabbi
+rab2bl
+2rabd
+ra2bei
+rab2er
+rab3erd
+2rabf
+2rabg
+2rabh
+1r4abi
+2rabk
+r2able
+ra2bli
+ra4b5lo
+2ra2br
+2rabs2
+2rabt
+2r3abw
+1raby
+2rabz
+r2ac.
+ra2ce
+2r1acet
+ra4cheb
+ra2cho
+4racht
+rach6t5rä
+ra2chu
+r2ack
+1r2ad
+r4ad.
+rada2
+ra4dam
+2radap
+3radar
+ra2dei
+rade5s
+3radf
+3radh
+3radio
+4radit
+3rado
+3radp
+ra4d1r
+rad5ri
+rad3t4
+ra2el
+r2af
+raf3ahn
+raf3ar
+rafe2
+ra2f1er
+raf3r
+rages4
+2ragg
+ra3gle
+4ragm
+ra2gn
+r2ago
+rag4sta
+1rah.
+rahle4n
+5r4ahm
+r1ahn
+2ra1ho
+ra3hö
+4raht
+r2ai
+2raic
+rail4l
+2r3air
+ra3ke
+2rakk
+3ra1k4l
+ra2kre
+ra2kro
+2rakti
+ra2kus
+3rakü
+2rakz
+r2al
+r4al.
+ra2la2
+ra4l3ab
+ral1ak
+ra3lamp
+rala4s
+ra2lä
+ral3b4
+3r4ald
+r4ale
+ra4l3end
+ra4lent
+ra4l5ern
+ra3lex
+r4ali
+ra2lid
+rali1e
+ra4lind
+ra4l3ing
+2r3alk.
+2r3alm.
+2ralp.
+4ralpe
+r4als
+ral3su
+r3alt
+3r4al3t4h
+ra2l3u
+3raly
+ra2mei
+ra2mer
+r2ami
+r2amm
+ram4man
+ram6mens
+ram6m5ers
+ram4mit
+ram4mu
+2ramn
+3ramsc
+2r1amt
+ramt2s
+ran3ade
+r1a2nal
+ra2nan
+ra2nar
+ra2nau
+2ranb
+r2anbe
+r4anda
+r4ande
+ran4dep
+ran4d3er
+3r2andi
+rand3s
+3raner
+2ranf
+2ranga
+ran6g5e6be
+1rangi
+r2angl
+rangs2
+rani1e
+r3a4nil
+ran2kr
+ran2kü
+4ranl
+2r1anm
+r2anmi
+r2anmu
+2ranna
+rano2i
+2r1anp
+2ranr
+2rans
+r2ans.
+ran4spa
+4r5antei
+r1anth
+2rantr
+1ranu
+2ranw
+r2anz.
+r2ap
+2rapf
+2rapo
+ra2pok
+ra2pos
+rap2pr
+2ra2pri
+2r1aq
+r1ar
+r2ar1a
+2rarc
+r2are
+3r4arei
+raren1
+r2arf4
+ra3rie
+rar3in
+ra3ris
+r3a4rist
+4r3arit
+r2ark
+raro2
+ra2rom
+2rart
+2rarz
+rar3zw
+r2a3s2
+r4as.
+ra4schl
+ra4sk
+ras3si
+ras3sp
+r4aste
+ra4st3ei
+r3asth
+ra4sto
+ras3tri
+2rasyl
+2raß
+1rat
+r4at.
+rat1a
+rat2ak
+ra2tan
+ra2t1ei
+r3atel
+ra3tes
+ra4tid
+2ratla
+2ratm
+rat2o
+2r3a2tom
+ra3tor
+rat4r
+r4ats
+2ratta
+2rattr
+4ratz
+rat3ze
+4rau.
+3raub.
+4raue
+rau3e4n
+2rauf
+rau3fä
+2rau3g
+3raum
+rau4m3ag
+rau4man
+rau5mes
+rau2m1i
+3raup
+4raur
+2rausb
+3raus2c
+2rausd
+2rausf
+2rausg
+raus8gewä
+2raush
+2rausl
+rau2sp
+2rauss
+raus8scheidu
+raus3tr
+2rausv
+2rausw
+2raut
+raut1r
+rau4tra
+rau4tro
+raut5s
+1raü
+r2ax
+raxe3
+raxi4s1
+r3axt
+4räb
+räch4s
+3r2äd
+4räf
+rä1fr
+4räg
+2räh
+4räm
+3rän.
+3räni
+3räns
+2räp
+2räq
+2r1är
+r2är.
+rä3ra
+rä1ro
+rä4sc
+räse2
+rä2st
+3rätse
+4rätz
+rä2u
+4räue
+räu2s
+räus2c
+räu7schen.
+2räuss
+2räuß
+4räut
+2räx
+4r1b
+r2b1ab
+r3bac
+rba4del
+rb2al
+r2bang
+r2bant
+rba3re
+rb1art
+r2barz
+rb1auf
+rbb2
+rb1ech
+rbe3erf
+rbei5d2
+rbe3inf
+rb3einh
+rbe3int
+r4belä
+rbel2o
+rbe3r2e
+rber6gin
+rb1erl
+rbe3rum
+r2bim
+r2binf
+rbit2a
+rbi3tu
+rb2la
+rb4la2d
+r2blan
+r8blasser
+r4b3last
+r3blat
+r3blau
+r2ble.
+r3blen
+rb3ler
+r2bleu
+rb2lin
+rb2lö
+rb3lös
+rbmas3
+rb2ob
+rb3ras
+rb3rea
+r8b7rechts
+rb4sam
+rb2sei
+rb2ser
+rb2s1o
+rb4stä
+rb2su
+rb4sz
+rb2u
+rbü4b
+4rc
+r1ce
+rce4n
+r1che.
+r1chen
+r1ch2i
+rch3l
+r3ch4lo
+rch3m
+rch3r
+rchs2
+rch3sp
+rch3t2a
+rchter6r
+rch1w
+r1ci
+r1cl
+r1ç
+4r1d
+rd2ac
+r2daf
+r2d1ak
+r2d1a2l
+rd2amm
+rd1an
+rdani1
+rd1ara
+rd1ark
+r2darz
+rdär2
+r3de.
+r2dei
+rd2ei.
+r4deis
+r2d1elb
+r2delf
+rdels2
+rdem6
+rden3d2
+r4dengl
+rde3ob
+rde3r4er
+rderin6s
+r4d3ernt
+r3des
+rde3sp
+r4d1ex
+r2d1inn
+rd1iri
+rd1ita
+r2dof
+r3don
+rd1os
+rd3oss
+r2dö
+rd3rat
+r2drau
+rd4ri
+rd5ris
+rd4rö
+r3d4rü
+rd2sän
+rd3s2k
+rd3s2z
+rd3th
+rdt4r
+rdt2s
+r2d1uk
+1re
+3re.
+rea2d
+rea6l5erw
+4re2am
+re3at.
+re3ats
+2reä
+re2b1a
+re2b1l
+reb1r
+reb3ra
+reb3so
+rech3ar
+4rechs
+2reck.
+2recki
+3red.
+4redd
+2redi
+re2dik
+3redn
+3redu
+re1e
+3refe
+4reff
+r2eff.
+3refl
+3refo
+3reg
+rege4l3ä
+4r1egg
+2reh
+re2hac
+re2har
+rehen1
+re4hene
+re4h3ent
+re2hi
+reh1l4
+re2h1o
+re3hol
+re2hü
+r2ei.
+r2eib
+rei4bel
+rei4ble
+2reid
+r2eie
+4reier.
+rei4fei
+4reifel
+2reig
+3reigä
+3reigeh
+r4eigel
+6reigens
+3reigi
+4reign
+3reigru
+rei3l2a
+rei3l2i
+2r1eilt
+3reim
+reim2p
+r1ein
+rein2a
+rei5nac
+rei3nal
+2reinb
+rein4du
+rei3n4ec
+reinen5
+2reinf
+re4info
+4reinn
+4r3einr
+rein8s7tre
+rein4sz
+rein6teg
+re1in2v
+4reisar
+4reisb
+2reisf
+2reish
+2reisr
+reister6
+rei6s5tro
+2reisw
+4reiti
+reit3s2
+re2ke
+4rekk
+r2el.
+re3lat
+2relb
+rel2e
+relea4
+re5lei
+re2lek
+4relem
+r2elev
+2relf
+2relit
+2relix
+r2ell
+rel4lar
+rel4lei
+re3lo
+r2els
+2relt
+relu2
+r4em.
+4remb
+rem2da
+re2m1ei
+r2emi
+re3mig
+2remis
+4remit
+4rempf
+rems1c
+rem4str
+2rem2u
+r4en.
+r2ena
+2rena.
+re4nac
+re3nal
+re4n3an
+r1endg
+3rendi
+ren3dr
+ren2eu
+5renf
+4rengag
+2rengp
+3renh
+re2ni
+3renl
+3renm
+ren4nar
+ren6nene
+ren6sein
+ren6serg
+rens2p
+2rentd
+2rentf
+3rentfo
+2r1entg
+r3enthä
+2r1entl
+2r1ents
+2rentw
+2rentz
+r2enz
+ren6z5er6f
+renzer6l
+ren6z5er6s
+renzer6w
+ren4z3in
+ren2zw
+re2ob
+re1on
+re3or
+3repe
+4re2pen
+2repi
+re2pis
+2repoc
+2r1e2pos
+4repp
+3repu
+3r4er.
+rera2
+2r1erb
+rer2bi
+3r2erbr
+2r1erd
+rere2
+4r3ereig
+r1erek
+re2r1ep
+r2erer
+2r1erf
+4rerfah
+r4erfe
+3r2erfr
+rer2fü
+r1erg
+4r3ergeb
+5rergebü
+r4ergen
+3r4erges
+2rergo
+rer2gr
+r4ergru
+rer2hö
+re3rin
+r1erk
+rer4kan
+rer2ke
+4r3erken
+3r2erki
+3r2erko
+r1erl
+2r3er2la
+5r4erlag
+r3erleb
+r2erli
+2rerlö
+2r1erm
+rer2n
+2r1ernä
+r1erne
+2r1erni
+4r3erns
+4r1ernt
+re1ro
+re2rob
+re4rosi
+2r1er2ö
+r1erre
+rer4reg
+rer4rei
+r1erri
+5r2ers.
+2r1ersa
+rer5sc
+r6erschi
+r2erse
+2rersp
+rer4sta
+r6erstad
+r1ert4
+r2erte
+4rerträ
+r1erw
+rer4wac
+rer4wec
+r4erwes
+2r1erz
+rer2zä
+3r2erzy
+3r4es.
+re2sa
+re4sam
+re3sar
+re4schw
+3rese
+re4se2h
+3reson
+res2po
+2ress
+4resse
+res6s5erw
+res4sto
+4ressu
+3rest
+re6stent
+re4stra
+4restu
+3resu
+2re2ß1
+re2t1ak
+re2tau
+re2thy
+re4trol
+re2u
+reu4eri
+reu3g2
+2reul
+re3uni
+2r1eur
+2reü
+4r3eva
+2r1evid
+rewa4r
+re2wi
+2rewo
+2r1e2x1
+2rezi
+1ré
+4r1f
+r5fahrt
+rfall4s
+rfäs3
+r2fent
+r3f2es
+rff2
+rf3fe
+rfi4le.
+r4fland
+r3f4lä
+rf3lic
+rf4lö
+r3flü
+r2fo2b
+rfolg4s
+r3foli
+r3fot
+r4frauc
+rf4ru
+rf4rü
+rf4sam
+rf2s1ä
+rf2su
+rf2ta
+rf4tin
+rft4r
+rf2u
+rfzu3
+2r1g
+r2g1a2d
+r2g1ah
+r2g1ak
+rga4ner
+r2g1ap
+r2garb
+rg3art.
+r2g1ask
+rgas2t
+rga5stes
+rga3su
+rgd2
+rge4an
+rge2bl
+r2g1e2c
+r3g2el
+rge4l3er
+rgen6sem
+rgen4z3w
+r4ge4tap
+r2geto
+r7gie
+rgi4sel
+r2glan
+rgleich8s7
+r2gleu
+r2glig
+rg2log
+rg2lu
+r2g3na
+r2gne
+r2g3ni
+r2g3no
+r2g3oa
+r2go4b
+r3gog
+rg3op
+r2g1or
+rgö2
+r2g1öd
+r2g3ral
+rg4rau
+r2greg
+r2gres
+r2gret
+rg3rin
+rgro5sse
+r3grun
+rg3rüs
+rg3se
+rgs2ei
+rg4sel
+rg3s4i
+rg1sp
+rgs2pe
+rgs2po
+rgs4ti
+rgs2tu
+rg1su
+r1h4
+2rh.
+2rha
+r2ha.
+r4haltb
+r3han
+2rhä
+r2he.
+r5hea
+2rheb
+2rhef
+2rheit
+2rher
+2rhi
+2rhof
+rho2i3
+2rhol
+2rhot
+2rhöl
+2rhs
+2rhü
+1ri
+ria3ne
+ri2ano
+ri2ast
+ri3at
+ri4atr
+rib2bl
+ri1ce
+ri1cha
+richt8spo
+3richtu
+ri2con
+ri2dau
+ri3de.
+4ridee
+ri2de2l
+rid3r
+ri4ds
+r2ie
+rieb6ste
+rief1a
+4riefm
+rie2f3r
+rieg4s
+ri2e1i
+riein1
+ri1el
+rie3l2a
+ri3els
+ri4enä
+riene2
+ri3eni
+rie2nu
+ri1er.
+rie3re
+riere4n
+ri1eu
+ri2f1a
+ri2fä
+ri2fei
+ri2fer
+rif6f5end
+rif4fer
+ri2f1o
+ri2fr
+rif4ter
+3rig
+4riga
+4r3i2gel
+ri4gene
+5rigj
+rig1l
+4rigr
+4rij
+ri2kar
+ri2kä
+ri2kin
+ri2kn
+ri4kone
+ri2kor
+2rima
+ri2mag
+ri2mau
+ri2me.
+2rimm
+2rimp
+rim2s
+rin2c
+r1ind
+rin4dex
+rin6dize
+2rindu
+ri3n2e
+rine1i
+2r1inf
+rin2fo
+3r2infr
+rin2ga
+ring3le
+rin2gr
+2r1inh
+2rinit
+4rinj
+4rink
+rin2kl
+rin2ko
+rin2kr
+2rinl
+6r5innenm
+4r3inner
+2r1innr
+r1innu
+4r1inq
+2r1ins2
+3r2ins.
+rin4sek
+rin2so
+r4inspi
+3r2insy
+2rint
+4rinte
+rin4t5re
+2r1inv
+ri2ob
+4r1ir
+r2is
+ris2a
+ri3s4an
+ri4sch3o
+ri4schw
+3risik
+ri3s2ko
+rismu2
+r3iso
+2risol
+ri4s3p
+r3isr
+3riss
+rist5ers
+ristes4
+ri6stess
+ri4st3r
+3ri2ß1
+r2it
+rit2a
+r3i2tal
+rit3ant
+2ri3t4r
+rit1s2
+rit4t3au
+rit4tei
+3ritter
+rit2to
+rit2t1r
+5ritu
+rix1
+ri3xi
+1rí
+2r1j
+4r1k
+rka2b5l
+r2k1ak
+rk1all
+rk2am
+rk1are
+rk1asp
+rkauf4s
+r2k1äh
+r2kef
+r3kel
+r4kelem
+rke2n1
+rk5ersta
+r2k1erw
+r3ket
+r2k1im
+rk4las
+rk4lau
+rk4lim
+r2klis
+rk2lo
+rk2lu
+rk4n
+rk5nu
+r2kob
+r3kol
+r3kon
+rk1o4ri
+r2kou
+rk2ö
+rk3räu
+r3kri
+rk3rin
+r2k3rom
+r2krou
+rk2sei
+rk2sel
+rk2ser
+rk2so
+rk2sp
+rk3spi
+rkstati6
+rk4stec
+rk4stoc
+rk2ta
+rk2tel
+rk4t3eng
+rk4t3erf
+rk4terg
+rk4t3erl
+rkt3ers
+rk6tersc
+rk4t3erw
+rk4t3erz
+rk4teta
+rk2tin
+rk2t1o2
+rkto4b
+rk2t3r
+rk2tum
+rk2um
+rku2n
+rku2sa
+rkus3s
+rku2s1t
+r2küb
+2r1l
+rl2ab
+r3lag
+r5land
+rlan4d3i
+r2l1ar
+r2l1a4sc
+rlas2t
+r2l3aug
+rle2a
+r3lec
+r3lep
+r3lex
+rlg4
+r3l2i
+rli4ne.
+r3l2o
+rlou1
+rl2ö
+rlös5s
+rls2a
+rl2spr
+rl2sto
+rl3t
+r3l2u
+rlus2t
+rlu6ster
+rlu4str
+r3ly
+rlz2
+4r1m
+r2mab
+r2m1ad
+rma2la
+rm1ald
+rm1ami
+r2m1ank
+r4mantr
+rm1anz
+r2m3aph
+r2marc
+r2marz
+rma4spe
+rma5ssen
+rmas8sens
+rmat2o
+rm2är
+rm3d2
+r4m3einh
+rme4na
+rm2ene
+r2ment
+r2meo
+r2m1erh
+r2m1erl
+r2m1erp
+rm2es
+rme3sa
+rme3st
+rmeta2
+r2mide
+rmi6nanz
+rminen4
+rmi6neng
+rm3m
+rm1o2ri
+rm3p2
+rms2
+rm3sa
+rm3sk
+rm3sta
+rm3t2
+rmu2n
+r4muna
+r2muni
+2rn
+rna2b
+r3nad
+rn4ade
+r3nage
+r2n1all
+rna4n
+rn4and
+rn3ani
+r2nanz
+rna2r
+rn3are
+r4n3ari
+r4n1a4st
+r4n3att
+r2nau
+rn3aug
+rn3de
+rn3d4r
+r4nef
+rn2eid
+r4neif
+r4neis
+rn1ema
+rne2n
+rn1ene
+rn2eng
+r2n1ep
+r4n1erg
+rn4erhi
+r4n1erl
+r4n1ert
+r4n1erw
+r4nerz
+r5nes
+rn2e2t
+rne4tem
+rn2eu
+rne3uf
+r4nex
+rn3f
+rn3g2
+r2nid
+r2nin
+r3nit
+rnk2
+rnn2
+r3nod
+rn2oh
+rn3oly
+r2n1op
+r2n1or
+rn1ö
+rnö2d
+rn3s2a
+rn3s2ä
+rn3s4p
+rns2u
+rn3s2z
+rn3t2a
+rn3t2e
+rn1ur
+r1nü
+r1ny
+rnz2
+2robj
+rob2l
+1robo
+ro2bo2r
+ro2bre
+2robs
+ro1ch
+roch2a
+3rock.
+r2o3de
+ro3e4
+2roff
+ro3fl
+4rog.
+rog2a
+3rogg
+roh1l
+4rohn
+ro2hö
+3rohr
+3roi
+ro3in
+rok2l
+ro3le
+ro2liv
+rol4lan
+rolle4
+roll4en
+rol6lerg
+rol6lerw
+rolli4n
+rol6lini
+2roly
+4rom.
+ro2mad
+ro2mal
+3roman.
+2romb
+romen3e
+ro2m1er2
+2romn
+4romt
+r2on
+ro3n4ab
+ro2nan
+3rond
+4ronk
+3ronn
+rons2
+ron4tan
+ron6tend
+ron2t3r
+ron2t1u
+ro1ny
+ro1o2f
+2ro2pf
+1ropl
+2ropt
+r1or
+ro2r3al
+ro2rat
+2rorc
+ro2rel
+ro2ro
+ror3th
+rort4s
+ror2ü
+ro3sh
+ro3s2i
+ro5s2k
+ros2p
+ros4san
+ross1c
+ros4st
+ro3sta
+ros3tel
+ro2st1r
+ro2sum
+4r3osz
+ro2ßi
+ro2ßu
+ro2tan
+rot3au
+ro2tä
+ro3te
+ro2tei
+ro2t3ho
+ro2tru
+rot1s
+rots2o
+3roul
+ro3unt
+5rout
+4roy
+rö2b3l
+rö2du
+2rö2f
+3röh
+2r1ök
+1röl
+2röl.
+rö3le
+r1ölp
+3römi
+r1ör
+r2ös.
+rös1c
+r2ö3se
+1rösl
+4röß
+3rötu
+2r1p2
+r3pa
+r3pe
+rperer5
+rper3in
+rpf4
+r2pli
+rp4lu
+rpo4str
+rp3se
+rps1t
+r4pt
+r3pu
+2r1q
+2r1r
+rr2ab
+rra4s3s
+rrat2s
+rr1auf
+rr1äm
+rrb2
+rr1c
+r5rega
+rr2ei
+rre2le
+rre2pa
+rr2er
+rrer2s
+r3res
+rres2t
+rre2ve
+rr2hen
+rr2hos
+rr2i
+rri3k2
+rrm2
+rrn3au
+rr2o
+rr3obs
+rro3m
+rro2re
+rr2th
+r3r2u
+r3r2ü
+rrz2
+4r1s
+r3sabo
+r2sa2d
+rs2al
+r4samp
+r4s1amt
+rs2an
+rs3ana
+r4sanf
+r4s3ang
+rs3anm
+r4sanp
+rs3ar
+rs4ark
+r4sarm
+rsch3e4b
+r3schen
+r6scherl
+r3schu
+r2s1ebe
+rse2e
+r2s1ef
+r2sein
+rse2n
+r3sena
+rs2end
+rse4ne
+r2sepi
+rs1ere
+r2serh
+rs1ers
+r2serz
+rse2t
+rs1eta
+rs2ext
+r3s2hav
+r3shir
+r3sho
+rs2hor
+r4shu
+rs2il
+rs2ka
+rs2kel
+rs2ki
+rs2kl
+r4skor
+r3s4kri
+r4sky
+rs4mog
+r3s4no
+r2sop
+r4s3ort.
+rs2p4
+rspa3s
+r2s3ph
+r3spi
+r3spl
+rs4por
+r2spun
+rs3s2
+rst3abl
+r5stad
+rst3ala
+r4stale
+r4stans
+r4stant
+r2stas
+rs2tau
+rs2tea
+rs2tee
+rst5eing
+r6st5eint
+rster2
+rst4erb
+r6sterbt
+r4st3erl
+r4sterö
+r4st3erw
+rs2t3h
+rst3ing
+r2stip
+r2stit
+rs2tob
+r2s1tot
+rs2tra
+rst3ran
+r6strang
+r4stris
+rs2tu
+rsuch4s
+r3suf
+rsü3s
+r3sy
+rs2zin
+r1ß
+4r1t
+rt1abs
+r2t1ad
+r2t3ae
+rt1akr
+r4t3albe
+rta3l2e
+r2t1all
+rt1am
+r3t2ame
+rt1an
+rt2anb
+r2tang
+r2tanw
+r2t1ar
+rt3att
+r4tauft
+rt3äh
+rt1änd
+rt1ärm
+r3te.
+rte1e2
+rt1ein
+rt4eind
+r4t3einh
+r2telf
+rte3li
+rtel6lei
+rte2n1
+r3ten.
+rte4na
+rten3s2
+r4t3ents
+rten3z
+rteo2
+rt3erei
+r6tereig
+r4terfa
+r4ter4fo
+rt1erh
+rt1erk
+r4t3erla
+rter8löse
+rter6mit
+r4t3ernä
+r2terö
+rter4re
+rt1ers
+rt4ersp
+rt1erz
+r3tes2
+rte3sk
+r2texa
+rt3he
+r2t3hi
+rt3hol
+rt2hum
+r2tid
+rtik2
+r2t1ima
+rt3inf
+rt2is
+r2t1o4b
+r3top.
+rto1pf
+rt1or
+r2torg
+r3tork
+rt3rams
+rt3rand
+rtra4s3
+rt3rati
+rt3rec
+r3tres
+rt3ris
+rt3rol
+rt3roma
+r3trop
+r2trou
+r4ts
+rt3sän
+rt3sch
+rt4seh
+rts2el
+rt3sex
+rts3ing
+rts1o
+rt1spe
+rt4s3tan
+rts4tie
+rt3t4
+rt1umb
+rt2u3na
+r4tunt
+r2t1up
+r2t1urt
+rtu2t
+r2t3ute
+rt3z2
+1ru
+ru1a
+ru4ale
+ru3a2r3
+rube4
+rub2i
+ru3ches
+rucht3s
+rude2a
+ru2dr
+3ruf
+ru2fa
+ruff4
+ruf2s1
+ruf4ter
+ru2g3r
+3ruhm
+2r1uhr
+3ruin
+ru1ins
+ru1is
+2rum
+4r3umd
+4r3umf
+4r3umg
+ru2mi
+4r3uml
+4r3umsa
+4r3umw
+4rumz
+2r1una
+2rund
+run4d1a
+runden5e
+run4d3er
+run2e
+runei2
+4r1unf
+run2ga
+2rungl
+4r1u2ni
+r3unio
+ru4nis.
+run2kr
+4r1unl
+2r1unm
+4runn
+4runr
+r1unse
+4r3unt
+4runw
+2rupd
+ru3pr
+4r3u2r
+rur1e
+5ru3ro
+ru2si
+rus2p
+rus3sen
+rus2s1p
+rus6st
+rus2t
+ru2tab
+rute4
+ru2tei
+ru2t1el
+rut3h
+ru2t1o2
+ru2t3r
+rut6scha
+4ruz
+ru2z1w
+1rü
+2rüb
+4rübu
+rü1ch
+rücks2
+rück5sta
+rü2hel
+rüher2
+rüh1l
+4rümm
+rün3z
+rü3ss
+rü4ssi
+2r1v
+rv2el
+rve4n1e
+rvenen4
+r4ventz
+rve5s
+r3v2o
+rv2s
+2r1w
+rwe4gel
+r3wei
+rwelt4s
+r5werk
+r5wert
+r2wo.
+r3woh
+r3wort
+rwun3s
+4r1x
+1ry
+ry2c
+ry3s2t
+rysti1
+2r1z
+rz2ans
+r2zant
+r2zar
+r2zat
+r3zähn
+rz2än
+rzell4a
+r5zene
+rz1eng
+r4z3ents
+rze2p
+rze2ra
+r2z1erd
+r2z1erf
+r2z1erg
+rz1erk
+r2z1erl
+r2z1erw
+rzes2
+r2z1ess
+rz1id
+rz1int
+rzir3
+rz2of
+r2z3ot
+rz2tan
+rz2th
+rzu4g3l
+r2zwä
+r3z2wec
+r2zwir
+1sa
+3sa.
+3s2aa
+2s1a2b
+sa3b2ä
+4sabd
+3sabet
+s3abi
+4sabm
+sa4bor
+4s3abs
+4s1acc
+5s2ache
+sa2cho
+sachs2
+sach3t
+s2ack
+s1ad
+2s3ada
+2s3adm
+2s3a2dr
+sa4fe
+4s1aff
+sa1f4r
+3saft
+saf2tr
+3sag
+sag2e
+sa3ge.
+5sa3gen.
+4s3a4gent
+4s1agg
+sa2git
+sag4n
+4s1a2gr
+3sahs
+3s2ai
+sa3i2k1
+sail4
+sai4r
+2s1ak
+sa2ka
+sak2e
+3saki
+4sakk
+4sakt
+3s2al.
+s2al2a
+sa2l3an
+sa2lar
+sa3lat
+sal3bl
+3sald
+sa4lerk
+3sali
+sa2l1id
+s1all
+sal4le.
+sallo3
+3salo
+sal2se
+2s1alt
+s2al3t4h
+3salz
+3sam
+s1ama
+4sa2mat
+s2ame
+4s3a2mei
+s3ameri
+5s2amm
+6s3amma
+4s1amn
+s1am3p4
+4samph
+s2ams
+s1an
+s2an.
+2sa2na
+sa2nä
+2s3anb
+s2an2c
+3s2and
+san4dan
+san4dri
+sand3s
+sa2ner
+3sang.
+2s3anh
+3sani
+3sanken
+2s3anl
+2sanm
+2sa2no
+2s3anp
+2s3ans
+s4anse
+san4sk
+san3sp
+4santei
+4santr
+4s3anw
+2s3anz
+s4anz.
+2s1ap
+sa2pe
+sa2po
+sap3p
+3sapr
+2s1aq
+2s1ar
+3s4ar.
+3sara
+4sarb
+3s2ard
+s2are
+s3area
+sar2ga
+sa3rin
+s2ark
+sa2rom
+s3arr
+s2ars
+4sart
+sa4r1u2
+2s1asc
+2s1a4si
+2s1a2sp
+4s1asy
+3saß
+sat2a
+sa4t3ant
+sat1ei
+2s3a2tem
+s3ath
+3sat2i
+2s3atl
+2satm
+sat2o
+sa2tol
+sa2tom
+sa2tr
+s3atta
+4s3attr
+3satz
+5satza
+sat4zel
+sat4z3en
+s1au
+3sau.
+3sauc
+3sau2e
+2sauf
+4s3aufb
+saug3le
+sau2gr
+sau3h
+3saum
+sauri1
+2saus
+3saus.
+4s3ausb
+4sausf
+4sausg
+sau2sp
+4sauss
+3sauste
+4s3ausw
+2sauß
+s1av
+sa2ve
+sa2xi
+sa3xo
+sa2y
+1s2äb
+3s2äc
+3s2äg
+s1äh
+4s3ähn
+2s1ält
+2s1äm
+4s3änd
+3sänf
+4s3äp
+2säq
+2s1är
+3s2ärg
+sä4s3
+sä5sse
+3s2ät
+1säu
+2säuß
+4s3b4
+sba4ne
+sbau6men
+sbe3r2e
+sbus3
+1sc
+2sc.
+2scab
+2scac
+2scaf
+2scal
+2scam
+2scar
+s1ce
+4s3cei
+sc4h
+6sch.
+s2chal
+sch3ana
+4schanc
+4schang
+5schanz
+4schao
+4s3chara
+4sch3ar5m
+s2chä
+2schäq
+2schb
+2schc
+2schd
+sch2e
+3sche.
+4schech
+6schef.
+6schefi
+6schefs
+4sch3ei.
+sch6ein.
+4schemp
+s4cher
+sch5erfü
+3sches
+4schess
+s2cheu
+4schex
+2schf
+2schg
+2schh
+schi4d
+schi4e
+5schif
+4schiru
+3schis
+2schk
+sch4lac
+4schle.
+6schlein
+4schloc
+4schlöc
+4schmas
+4schmed
+4schmoh
+2schmö
+4schmüh
+2schmy
+2schn.
+4schneb
+4schnut
+4schobj
+4schorc
+2schox
+4schör
+4schp
+2schq
+4schrad
+4schre.
+4schrep
+4schrin
+s3chris
+sch3rom
+4schron
+4schrou
+6schs2
+sch3sk
+6scht
+sch3t2a
+sch3te
+scht2i
+scht2o
+scht1s
+s4chu
+4schunt
+5schü
+2schv
+sch4web
+4schweg
+6schwerk
+4schwet
+4schwid
+s5chy
+2schz
+2scj
+6s1cl
+2sco
+3s2cop
+s2cr
+2scs
+2scu
+4s1d2
+sda3me
+sdien4e
+s3do
+sd4r
+1se
+se3ar
+se3at.
+seau4
+seb2
+5sebä
+2s1e2ben
+2s1echo
+sech6str
+2s1echt
+2s1eck
+se2dik
+3see
+see1i4
+se2e3ig
+se2el
+see3len
+se3en.
+seen2e
+se3er.
+see1ra
+seer2e
+se3e2r1i
+se1ers
+see5s2
+see3t
+2s3eff
+sef4l
+3s2eg
+s3e2gal
+se2gl
+seg4r
+3seh
+seh1a
+se2ha2g
+se2hel
+seher4e
+se4herk
+se2h1in
+seh3l
+se2h3ö
+seh3re
+seh5r2i
+seh3s
+seh3t
+se2hüb
+2sei.
+2s1eic
+2s1eid.
+sei3da
+4s3eifer
+2s1eig
+sei3le
+s2eim
+s1ein
+5s2ein.
+2seinb
+seinbus6
+sein4du
+2sei3ne
+seine3i
+4seinfl
+sein4fo
+2seing
+2s3einh
+2seini
+2seink
+2seinl
+2seinn
+2seinr
+s4eins.
+4seinsc
+4seinsp
+sein8stit
+sein6str
+4seintr
+2seinw
+2s3einz
+2s1eis
+3s2eit
+seits1
+3sek
+4s1e2kel
+4sekz
+s2el.
+se2l1a
+se3lad
+3s2elb
+sel1ec
+se2lef
+2s3e2leg
+2selem
+se2ler
+sel3ers
+2self.
+s1e2lit
+2s1elix
+s2ell
+sel3le
+se2lob
+s2els
+sel3sz
+selz2
+sem2a
+sem2e
+2s1emis
+2s3emp
+s4en.
+se4nad
+se3nal
+se4nas
+sen3au
+s2enb
+3sendet
+4s1endl
+sen3d4r
+senen1
+se4nene
+4senerg
+se4ners
+s2enf
+5seni
+se2n1im
+3senku
+se2no
+se4nott
+se4noz
+s2ensa
+sen4s3e4h
+4sensem
+s2enso
+senst2
+sen8s7turm
+sent2a
+sen3tä
+2sentd
+2sentf
+4sentg
+4sentn
+sen3tr
+2s1ents
+2sentw
+2sentz
+se4n3u
+3senva
+sen4zer
+sen3zw
+seo2r
+se2pen
+5seq
+s4er.
+se2r3a2d
+ser3al
+ser3ass
+ser3äus
+serb2
+s3erbe.
+se2re2b
+se4r3eim
+s4eren
+se4r3enk
+s4erfe
+s2erfr
+s1erfü
+4serfül
+ser3g2
+s1ergä
+s2ergr
+s1erh
+5serie
+ser3k4
+3serl.
+4s3ermit
+s2ern.
+2s1ernä
+s3erneu
+4s3ernt
+s1e2ros
+s1erot
+s1erö
+s2ers.
+2sersa
+ser6sehn
+4ser4set
+se3ru
+se4ruh
+ser2um
+s1e4rup
+3s4er3v
+s1erz
+s4es.
+se3s2a
+se2sel
+2sesh
+se3sk
+s1essa
+sest3ri
+set2a
+2s1e4tap
+se2tat
+s1e2th
+2s1e2tik
+set1s
+se3tun
+2se2ty
+3setz
+3seuc
+4s3eul
+se1u2n
+s1ex
+5sex.
+2sexa
+se2x3en
+s2exi
+s2exo
+4sexp
+sex3t4r
+2sexz
+6s3f4
+sfal6l5er
+4s3g4
+sgang4
+sga3su
+sge3s2
+sgro3
+2s1h
+4sh.
+sh2a
+3s2ha.
+s3hac
+shal4li
+shalt2
+4shan
+4shc
+sh2e
+1shen
+4shf
+3shi.
+3shid
+s4hig
+s2hip
+s2hi4r
+4shk
+sh3n
+4shoc
+4shof
+4shom
+3s2hop
+sho4re
+5show
+4shö
+sh4r2
+4shs
+4sht
+s3hu
+4s3hü
+1si
+si2ad
+sial5l
+sia4s
+2siat
+sib4
+5s4i1c
+si2cha
+sid2
+s2ide.
+s2i3do
+2sidy
+3s4ie
+sie2bu
+sieh1
+sie4hes
+si3e2n
+si1err
+si1f4
+si2g1a
+si2gei
+sig4n
+si2g3r
+sigs2
+si2k1ab
+si2kak
+si2kar
+si2k1ä
+si2k1el
+siken2
+sik3erl
+si2ket
+si2k3i
+sikin1
+si2k3n
+siko3
+si2k3r
+sik3s2
+sik3t4
+si2ku
+sil2br
+sil2e
+3sili
+s1ill
+3silo
+3sim.
+2s1imm
+sim2st
+3simu
+si3n4a
+2s1ind
+2s1inf
+sing1a
+sin3g4le
+sin2g3r
+sing3s2
+2s1inh
+s1in1i1
+sinner4
+2s1inno
+2s1inq
+2s1ins
+s2ins.
+2s1int
+2s1inv
+3sio
+sirn4
+2sirr
+3siru
+3sis
+si2sa
+si4sam
+si4schu
+si2s1e2
+si4sis
+s1i2so
+si2s3p
+sis3s
+s2ist
+si4star
+si3sto
+si2stu
+si2su
+3sit
+si2tal
+si2tau
+si2tra
+s2it2u
+3siu
+si2va
+sive3
+si4v3erf
+siv1o4
+si2vor
+siz2
+1sí
+4s3j
+2s1k2
+4sk.
+sk4a
+4s3kab
+s3kad
+1skala
+4skalk
+4s3kam
+4skana
+4skanä
+3skanda
+4s3kap
+4s3kar
+4s3kas
+ska4te.
+4skateg
+ska4tes
+ska2to
+4skä
+4skb
+ske2li
+4sken
+3skep
+4sker
+s3kh
+3s2ki.
+3s2kif
+3s2kik
+s3kin
+4skir
+s2kis.
+3skiz
+sk4l
+4s3klas
+3s2klav
+4s3klu
+4sk4n
+4skoh
+4skol
+4skom
+4skon
+3skop.
+sko2pr
+4skos
+4skow
+4skö
+4skra
+4skro
+4sk3s
+4sk3t2
+skto2
+3skulp
+4skun
+sku2s3
+4skü
+4skv
+2s1l2
+4sl.
+s3lab
+3slal
+sla2ve
+s2law
+sl3b
+4s5le
+s3li
+3s4lip
+4sln
+s3lo.
+slo3be
+s3loc
+s3loe
+s3lof
+3s2low
+s3lu
+s3ly
+2s3m4
+sma3b4
+sma3sc
+sme3na
+smi2t3
+2s3n2
+snab4
+sni4a
+sni3er.
+sni3ers
+4s5not
+3so.
+2s3oas
+2s1o2b
+3s2o3ba
+4sobj
+4s3obo
+so1ch
+so3et
+s1ofe
+so2fen
+3soft
+3sog
+s1o2he
+3sohl
+sohle2
+2s3ohng
+2s1ohr
+3soi
+2s3ok
+1sol
+3sol.
+so3la
+so4lau
+3sold
+3sole
+so2l1ei
+so3li
+sol2la2
+sol4ler
+so3l2o
+4s3o2ly
+1som
+1son
+son2a
+sone4
+son3sä
+son4s1o
+so3o
+s1op
+2sope
+2sopf
+3sopr
+1sorb
+s1orc
+2s1ord
+sore2
+so2rei
+so2rel
+2s1orga
+so1rh
+2s1o2rie
+so2ro
+3sorp
+3s2orti
+so4ru
+1so3s2
+3s2os.
+3sosc
+so4sk
+2so4sm
+2s1o4st
+s1o4sz
+3so3ß
+soth1o
+3sott
+soun2
+sound1
+so3unds
+so3unt
+s1out
+3sov
+3sow
+2s1ox
+3soz
+s3o4ze
+s1ö2d
+2sö2f
+2s1ök
+2s1ö4l
+2s1ö4s
+sp2
+2sp.
+2spaa
+s2pace
+2spack
+2spag
+spa2ge
+2spak
+2spala
+2spalä
+3spalt
+spa2m
+1span
+s2pan.
+3spannu
+2spano
+3spant
+2spanz
+4spap
+2s3para
+1spare
+s4parka
+2sparo
+1sparr
+5s6parten
+4spartn
+4sparty
+spas2
+spa3sse
+spa5ssi
+1spat.
+2spati
+2spatr
+2spau
+3s2paz
+s2pä
+2späd
+3späh
+2spär
+2späs
+2spe.
+2speg
+1spei
+3speic
+4spein
+1spend
+4spensi
+spe3p4
+s2pera
+3sperb
+3s2perg
+s1peri
+4sperle
+2spero
+s2perr
+sper4ra
+2spers
+4spet
+3s4pez
+2s3pf4
+4spha
+s2phä
+3sphär
+s3phe
+1spi
+3spi4e
+4s3pier
+spier4r
+s3pi2k
+4s3pil
+2spip
+4s3pis
+3s2pit
+3s2piz
+2spl
+4spla
+4splä
+3s2pli
+4s3p4lu
+2s3pn
+2spod
+4spoe
+s2poi
+2s3pok
+4spol
+1spon
+s2pons
+2spop
+1spor
+s2pore
+s2porn
+4s3pos
+4spote
+4spr.
+3s2prac
+s2pran
+2sprax
+3spräc
+2spräm
+s2prän
+2spräs
+3sprec
+2spred
+4spreis
+5s2pren
+2s3pres
+3spring
+4sprinz
+s2prit
+4sprob
+4sprod
+2sprog
+4sproj
+2sprop
+5spross
+2sproz
+3sprö
+3s2pru
+3sprüc
+2sprüf
+1sprün
+2s3ps
+2spt
+2spub
+2spud
+1spuk
+3s2pule
+s3pun
+2spup
+3spur
+spu4rer
+2sput
+1spü
+2spy
+2s1q
+4s3r4
+sra4s3s
+srat2s
+sre3cha
+sreli1
+sre4th
+sro3tu
+srö2s
+srücker6
+2s1s
+6ss.
+4ssa
+s3sa3ba
+ssa3bl
+ssa5bo
+s5sack
+ss2ad
+ss4agi
+s2s1aj
+ss3alba
+s2sall
+s4samt
+s2sanf
+s4sang
+s4sano
+s4sans
+ss2ant
+s4sanz
+ss2ara
+s3sars
+ss3att
+ssau3e
+ssau4r
+4s3s2ä
+4ssb
+6ssc
+s2sce
+ssch2
+s2scr
+4ssd
+4ss1ec
+4sse1e
+4ssef
+4sseg
+4sseh
+sseh2a
+4ssei
+ss4eind
+sse3int
+4ssek
+4sselek
+sse2lö
+4ssemp
+6ssendet
+4s3sendu
+6ssenerg
+ssenmas6
+ssen6sem
+4ssentl
+4ssentz
+ss1epe
+sse6ratt
+ss2erf
+ss3erfü
+ss4ergr
+sser4hö
+sser6mit
+s2serö
+sser4öf
+4ss3erse
+ss4eru
+sser6wei
+4ssesc
+3ssesh
+sses4sa
+4ss3e4str
+sse3ta
+s3sety
+4ssez
+4ssf
+4ssg
+4ssh
+ss3hi
+4ssic
+ss3i2ko
+s2simp
+6ssio
+s4s1isr
+4ssit
+4ssj
+4ssk
+s3skala
+4s4s3l
+4ssm
+4ssn
+4sso
+sso2f
+ss1off
+ssoi4
+s3sol
+s4sop
+ss2orc
+4ssö
+4ssp
+ss2pen
+ss2phi
+s3sprä
+s3spri
+ssquet4
+4ssr
+4s4s3s4
+sssau4
+4sst
+sst2a
+s5stad
+s6stag
+s3stä
+ss1t2e
+s4ste.
+s5stel
+s5s2tep
+s5stern
+s4stes
+s4stet
+s5steu
+ss1tis
+s3sto
+s5stop
+ss1tor
+s3stras
+s3strat
+s3strö
+s3stü
+4ssum
+s2sumg
+s2sumr
+ss1ums
+4ssunt
+4ssup
+ss2ur
+s3sus
+4ssü
+4ssv
+4ssw
+4s3sy
+4ssz
+1st
+6st.
+3s4ta.
+5staa
+5stab.
+2stabb
+4stabel
+2stabg
+2stabh
+4stabit
+2stabl
+2stabn
+2stabt
+2stabz
+st2ac
+3s2tad
+4stada
+4stadm
+4stadr
+2stag
+3s2tagr
+3stah
+2stak
+2stala
+sta3lak
+2stalb
+2stalg
+3sta3l2i
+2stalk
+st1alp
+st1alr
+3stam
+st1a2mi
+4stampl
+4stamt
+4stanb
+s2tand
+4stanf
+6stangeh
+4stanh
+4stanl
+4stanm
+4st1ann
+st3ansp
+4stanst
+2stanw
+4stanza
+2st1app
+s2tar.
+sta6rens
+s2t2ars
+2stasc
+stast4
+2statb
+7s2tati
+7statth
+7statu
+2stauf
+2staug
+5staur
+2staus
+st1a2ve
+2stax
+3stäb
+3städ
+2stäg
+2stält
+2stämt
+3ständ
+4stäp
+5s2tär
+3stätt
+2stäus
+4stb
+2st3c
+4std
+3ste
+4steam
+s2tean
+4stechn
+4stecu
+ste2d
+st1edi
+ste2g3r
+s2teh
+4stehr
+4steic
+4st1eid
+5s2teig
+stei4gr
+4steil
+6steinga
+6steinhe
+stein6sp
+s2tel
+s3tele
+5st2ell
+stel6l5än
+ste4mar
+ste6ment
+6stemper
+4stempf
+ste4na
+4st3ends
+st2ens
+4stentf
+4stentl
+4stents
+4stentw
+4stepi
+st1e2po
+ste2r3a
+s2terb
+4sterbs
+6stereig
+s2terf
+st3erfü
+st2erg
+s2terh
+s2terj
+s2terk
+sterma7sse
+s2tern
+6sterras
+s2ters
+ste4s1e
+stes3ta
+4stestb
+4stestn
+stes3tr
+4stests
+ste4tag
+s2teu
+4steuf
+st1eun
+st1ev
+4stex
+s2texa
+4stf
+2stg
+2sth
+st4hen
+st3hi
+st3ho
+4stief.
+4stiefl
+3s4tiel
+3stif
+st2il
+4stimma
+2stimp
+2st1inb
+2stinf
+3sting
+2stins
+4stint
+s4tio
+2stip.
+sti2r
+st1ira
+st1iri
+st1ita
+2stite
+2stj
+2stk
+4stl
+4stm
+stma3s2
+2stn
+sto2bl
+4stocht
+s2tode
+3s2tof
+stof8fens
+6stoffiz
+3stoj
+sto3mi
+2stomn
+2ston
+s2to4ne
+2stope
+2stopo
+2stord
+2storg
+s2tory
+3stos
+4stou
+4stöch
+2stöl
+5s2tör
+2stöst
+2stöt
+4stp
+2stq
+st4rade
+3straf
+stra4fa
+2strag
+3s2trah
+2strai
+3s2tral
+4strans
+s2tras
+3straß
+4straum
+2sträc
+2s3träg
+4sträne
+2stre.
+4strech
+2stref
+2streg
+4streib
+5st6reif
+2strep
+2stret
+2strev
+3s4tria
+2strib
+4strig
+4strisi
+2striu
+4stroc
+3s2trof
+3stroh
+3s2trok
+4stropf
+3s4tropo
+st4ross
+4strost
+3stroy
+2ströp
+2strub
+3struk
+s2trum
+2strun
+4strup
+4st3s2
+stsas2
+2st3t4
+st2u
+3stub
+4stuch
+3stud
+2stue
+3stuf
+2stug
+st3uga
+3stuh
+2stuk
+2stumo
+2stumr
+2stum2s
+s3tumsc
+2stumt
+2stumz
+2stun.
+2st3una
+2stune
+2stunf
+2st3uni
+2stuns
+2stunt
+3stuö
+stu3ra
+stu5re
+2st3url
+2s3turn
+2st3urt
+3s2turz
+4stüch
+3s2tück
+3stüh
+2stür.
+2stüre
+2stürg
+2stürs
+2stürw
+2stütc
+2stv
+2stw
+stwor2
+2sty
+4sty.
+4s3typ
+4stys
+2st3z2
+1su.
+su1an
+3su2b3
+su4ba2
+4subi
+su4br
+5su1c
+su2cha
+su2cho
+3sud
+su2eb
+2s1u2f
+su3fi
+2s1uh
+1sui
+su1is
+su1it.
+su2k
+su3l2i
+su2m1a
+s2ume
+su2mei
+su2mel
+sument4
+su6ments
+2sumf
+s3umfa
+s3umfe
+su2min
+3summ
+sum1o2
+su2mor
+s2ump
+s3umsa
+2sumse
+s2umsp
+2s3umst
+2s3umwa
+su2n
+2s1una
+sunder4
+sun6d5erh
+sunds4
+su4ne
+4s1unf
+6sungena
+s3ungl
+4s1uni
+2s1unm
+s1uns
+2sunt
+3s2up
+sup3p4
+su2ra
+sure4
+su2rer
+3surf
+2s1urk
+s1url
+su2r1o
+s1urt
+su2s
+su3s2a
+sus1e
+sus1i
+s3u2t
+su3tr
+2sü4b
+3süc
+sü2d1
+süden4
+sü3den.
+3sün
+1süs4
+sü3sse
+sü3ssi
+1süß
+4s3v2
+svoran4
+2s1w
+s3we
+swe6gers
+sweh2
+4swie
+4swil
+4swis
+4swit
+s3wö
+s3wu
+1s2y
+2sy2l3
+sym3
+sy2n3
+3sy5s
+2s1z2
+4s3za
+4szä
+4s3zei
+4szel
+3s2zena
+3s2ze3n2e
+4s3zent
+4s3zer
+s2zes
+s2zeß
+s4zew
+4s3zie
+s3zins
+4s3zo
+sz3ta
+4s3zu
+4s3zü
+4s3zw
+4szy
+2ß3a4
+ßan1
+ßat3
+2ß1ä
+2ß1b4
+ßbus3
+2ß1c
+2ß1d4
+1ße
+2ß1e2b
+2ß1ec
+2ß1ef
+2ß1e2g
+2ß1ei
+ße2l
+2ßelek
+ße3lu
+2ß1emp
+ße4n3a4
+4ßenerg
+ße2ni
+ße2no
+2ß1entl
+2ßentz
+ße2nu
+2ß1e2p
+3ß2er.
+ßer3b
+ßer2ei
+ße2ro
+ß2ers.
+2ßerse
+ßer3t
+ß1erw
+ße2s
+2ß1es2s
+2ß1est3r
+ße2t
+2ß1ex
+2ß1f4
+2ß3g2
+ßge2bl
+2ß1h2
+1ßi
+ßi2g1a
+2ß3i2k
+2ß1il
+2ß1im
+2ß1in
+ß1j
+2ß3k4
+2ß1l2
+2ß1m2
+2ß3n2
+2ß3o2
+ß1ö4
+2ß1p2
+2ß1q
+ßquet2
+4ß3r2
+ßreli1
+ßrö2
+ßrus3
+2ß3s4
+ßsau4
+ßsch2
+2ß1t
+ßt3h
+ßt1in
+ßts2
+1ßu2
+ß1uf
+2ß1uh
+2ß1um
+ß2ung
+ß1uni
+2ßunt
+ß1ü4
+2ß1v
+2ß1w
+2ß1z2
+2taa
+2tab.
+ta2b3an
+2t1abb
+2tabd
+1tabel
+2tabf
+2tabg
+2tabh
+2t1a2bit
+2tabk
+2tabla
+1table
+4tabm
+2t3abn
+2ta4br
+4tabs
+t1abst
+2t3abt
+4tabw
+4tabz
+2t1ac
+3tacu
+t1ada
+2tadd
+ta2der
+tadi3
+tadi4s
+t1adm
+ta2dol
+t1a2dr
+ta3d2s
+tad4t3
+ta2er
+1tafe
+2tafet
+t1afg
+t1afr
+1tag
+ta2ga
+ta2g1e2i
+tagen1
+4t3a4gent
+2t1agg
+ta3gl
+2t1a2go
+tag2s1
+tag4san
+tag4st
+2tah
+tah2li
+3tai
+ta3i2k
+tai2l1
+ta1ins
+tai4r
+ta1ir.
+ta1i2s
+1tak
+2t1a2ka
+ta3kes
+2t1akk
+ta2kro
+2taks
+tak2t1o2
+t2aktu
+2takz
+3t2al.
+ta2la
+ta3lag
+tal1an
+ta3lat
+tal3au
+1talb
+tal3d4
+1tale
+ta4l3end
+tal3eng
+ta4lens
+tal6ents
+ta4lerg
+ta2let
+tal2ga
+tali6ene
+tal4l3ac
+tal4leg
+tal4lei
+tal4let
+tal6leut
+tal6lin6s
+tal4los
+tall2ö
+tall3s
+tal4lus
+2t1alm.
+ta2lop
+ta2l1o2r
+tal2se
+tals3en
+t1al3ta
+tal3th
+talt4r
+ta2lu
+2tam
+3tam.
+t2amen
+t1a2mer
+tam2ma2
+tam4m3er
+tam4mi
+tam4mut
+t1ampl
+3t2ams
+t1amt
+t1a2na
+tan3ab
+4tanal
+ta4nat
+2t1a2nä
+tan3da
+tand4ar
+tan2dr
+ta4nerf
+4tanf
+4tangeb
+tan4gra
+2tanh
+t2anho
+t4ani
+3tanj
+1t2ank
+tan2kl
+2t3anl
+t1anm
+4t1anna
+3t2anne
+t1ano
+t1ans
+t2ans.
+4tansi
+tan4tan
+t4ante.
+4tantei
+2tantr
+2tanwa
+2tanwä
+t2anz.
+t1anza
+4tanzei
+t1anzu
+4tanzü
+tan2z1w
+tao2
+ta3or
+t4ape
+ta2pes
+2tapf
+ta2pl
+ta4poka
+t2appe
+ta2ra
+2tarab
+3tarabb
+ta3rak
+2taram
+tar3ap
+t2arau
+2tarb
+3tarba
+3tarbek
+3tarber
+3tarbi
+3tar3bl
+2tarc
+3tarchr
+t2ard
+t2arei
+ta2rel
+ta2r1er
+tar3g
+ta1r2h
+3tari
+tark4l
+t2arko
+4tarkt
+t2arl
+2t1arm
+t2armä
+ta2rom
+2tart
+t2arta
+tar6ter6e
+3t2arth
+t1arti
+3t4artis
+tar2to
+tar2tr
+ta2ru
+2t1arz
+3tarzu
+t2as.
+ta3sa
+1tasc
+ta5se
+4t1asp
+2t3assi
+1tast
+ta4stem
+ta2sto
+ta3str
+t4at.
+ta2ta2b
+ta2tan
+3tatb
+t4ate
+tat1ei
+t5a2tel
+ta2tem
+1taten
+ta2t1er
+t3atl
+ta2tom
+ta2tr
+1tatsa
+2tatt
+tau2b1a
+1taubh
+tau2bl
+tau2br
+tauchs4
+tauch5sp
+2taud
+t1auf
+3taufe.
+4taufg
+tau3f4li
+2taufn
+t3aufo
+taufs2
+2taufw
+1taug
+4t3auge
+t1auk
+3taum
+1taume
+1taus
+2t1ausb
+tau6scha
+tau6schm
+tau6schr
+tau6schw
+2tausd
+t2ause
+2tausf
+t3ausg
+t1ausk
+2tausl
+2tausr
+2t3auss
+2t5ausw
+2tausz
+ta2van
+3t2ax
+taxi3s
+4t3axt
+2tää
+2täb
+tä1c
+2täd
+t2äf
+1täg
+2tägy
+2täh
+3täle
+2täll
+2t1ält
+4tä2m
+t1ämt
+t1ängs
+1tänz
+2t1äp
+2täq
+tä4reng
+tä2ru
+2tärz
+tä2s
+t2ät
+3tätigk
+4tätt
+2täug
+1täus
+2täuß
+2täx
+1tà
+4t3b4
+tbauer4
+tbe3r2e
+tblock5e
+tblocken8
+tbus3
+2t1c
+t3cha
+t3che
+tch2i
+tch3l
+t3chr
+t2ch1u
+tch1w
+t3cl
+tcor2
+t3cr
+4t5d4
+tdar2m1
+tdun2
+1te2a2
+tea3c
+te3ad
+te3ag
+2teak
+te3al
+teamma3
+te3an
+te3ar
+tea4s
+3teba
+t4ebb
+2t1e2ben
+t2ech
+1techn
+te2chu
+2teck
+t1ecu
+te2dit
+1tee
+te1em
+teen1
+te2er.
+te1erw
+tee3t
+3tefa
+2teff
+2t1egg
+te2hac
+2tehe
+te2him
+2t1ehr
+1teic
+tei1fl
+teik2
+1t2eil
+tei2la
+tei6lent
+teim2
+2tein
+t2ein.
+teinbus6
+t2eine
+teinen4
+tei6nens
+tein6hab
+t3einkü
+te2i3s
+t1eis.
+t1eisb
+te5isch.
+tei3t
+t1eiw
+tei3z
+te2kel
+tek3t4
+te2la
+tel3ab
+tel1ac
+te3lan
+te4lant
+tel1au
+te2lä
+teld4
+tel1ec
+1telef
+1teleg
+tel3ehr
+2telem
+tel3eng
+te2ler
+te2leu
+4t3elf.
+te4lim
+te2l1in
+te2lit
+tel6lant
+tel3le
+tel6lein
+tel3li
+tel6li6st
+te2lob
+te4lost
+te2l1ö
+tel3s2k
+tel3ta
+telt4r
+te2map
+te2m1au
+te3mä
+t2emb
+te2m1ei
+te2m1er
+2temg
+te2mi
+tem3i2m
+tem3ing
+2teml
+2temn
+2temo
+te2m1o2r
+3temper
+2tempf
+1tempo
+te2mu
+te4mun
+t6en.
+ten1a2
+te4nad
+te4n3an
+te4nas
+te4nat
+ten3au
+ten3ä4
+ten3da
+t3endal
+tend4an
+4tendap
+2t5endf
+2t1endl
+t6endo
+2t5endp
+ten3d4r
+te2n1e2b
+te2nef
+te2neh
+ten3ei
+te3n4ei.
+tene4m
+tenen1
+te4n3end
+te4nene
+te4neng
+te4nens
+4t3energ
+te4n3ern
+tenf4
+t1eng.
+teng2a
+4ten4gag
+t3engla
+te2ni
+te4nil
+ten1im
+te4n3in
+tenk4
+ten3n2
+te2nol
+te3nö
+4t3ensem
+ten6serg
+1tenso
+tens2p
+t2enta
+t1entb
+2tentd
+ten3te
+2t3entl
+2t3entn
+ten6tric
+t3en4tro
+2t1ents
+4t5entw
+2tentz
+te2nu
+te2ny
+teo2f
+2t1e2pi
+tept2
+t4er.
+t4era
+tera2b
+ter3ac
+te2rad
+te1ral
+tera2m
+ter4ane
+te2r3ap
+ter3as
+2t1erbs
+2t1erbt
+ter3d
+4t3erde.
+terd2s
+te2re2b
+te2rec
+t3ereig
+tere2m
+te4r3emi
+te4r3end
+te4rene
+te4reng
+te4r3ent
+terer3k
+terer3l
+te4r3erp
+te4rers
+te4rerw
+te2ret
+t4erfr
+terg2
+ter3ga
+6tergebn
+t6ergem
+t6erges
+t6ergew
+ter3gl
+6tergrei
+t4ergru
+2t1ergu
+2tergü
+t6erhall
+t4erhan
+t4erhau
+t4erhäu
+t4erhei
+t2erhi
+t2erho
+6terhöhu
+t2erhu
+te3ria
+ter3iko
+terin5d
+ter3k
+4terklä
+t4erlä
+t4erli
+termas4
+1termi
+t2ern.
+ter4nar
+t6ernc
+ter4obe
+2teros
+t1e2r1ö
+t4erp
+t4erra
+3terras
+ter4re.
+t4erro
+t4ers.
+t2erse
+terst4
+t4erst.
+t6erstad
+ter6stat
+t4erstä
+t4ersti
+t4erstr
+t4erstu
+t4erstü
+ter3t4a
+tert2o
+t4eru2
+te4r1uf
+t4erv
+4t3erwäh
+4tery
+ter3z2a
+2t1erzb
+t4erzei
+4terzeu
+ter5zo
+ter3zw
+te2s
+tes3ac
+tesa2k
+te3sä
+te3sc
+tes3eli
+te3ser
+te3si
+te3so
+te3sp
+tes1pe
+te4spr
+2t1essa
+3tesse.
+tes3si
+tes2t
+tes3tät
+1testb
+te6sterg
+te6sterh
+te6sterk
+test3r
+t3estri
+1tests
+t2et.
+te4tabl
+2te2tap
+te2tat
+4tetl
+3teuf
+te1u2n
+2t1eup
+te2va
+te2vi
+tewa2s
+3tewo
+1tex
+t1e1xa
+2t1e2xe
+te3xel
+2t1e2xi
+4texp
+tex4ta
+2t1exz
+2t3f6
+tfäs3
+2t1g2
+tga4s3er
+t3ge
+tgenen3
+tger2a
+tger2i
+tg4r
+tgro3
+t1h
+4th.
+2th2a
+3t4ha.
+3t2hag
+4thak
+3thal.
+t2hali
+3thalp
+t2han.
+t3hand
+t3hap
+4t3hau
+2thä
+4thäl
+2thb
+4thc
+1t2h2e
+3thea
+2t3heb
+2t3hef
+2t3hei
+t4he1in
+3t4hek
+t4hema
+2themd
+t4heme
+2themm
+t4hene
+t4heni
+3theo
+t3herd
+t4herm
+thero3
+2t3herr
+2t3herz
+4t3hess
+2thf
+t2hi
+3thi.
+thic3k4
+t3hiel
+thi3er.
+2t3hil
+2t3him
+t3hin
+thi3nu
+2t3hir
+2thk
+2th3l
+4th3m2
+thmu2
+2th3n
+t2ho
+2t3hob
+t3hoc
+tho3chr
+t3hof
+2t3hoh
+t4hol.
+t4holo
+2tholz
+2t3hot
+3thotr
+2thou4
+t3hov
+2t3hö
+2thp
+1th2r2
+2ths
+2tht2
+2thub
+2thuh
+4t5hun
+2thut
+2thü
+2thv
+t2hy
+ti2ad
+ti3ag
+tial2l
+ti3a2m
+ti2are
+tib4
+ti1ce
+ti3chr
+t1id
+t2id.
+4tidee
+ti4d3en4d
+tie3br
+1tief.
+4tiefel
+1tiefl
+tie2fr
+tieg4
+ti2e1i
+ti1el
+ti2el.
+tiel3a
+ti3e2n1
+tie4rei
+tie4reu
+tiermas6
+ti2ern
+1tierr
+2tieß
+ti1eu
+1tif.
+ti3fe
+tif3f
+ti1f4r
+ti2gan
+2t3i2gel
+ti4gerz
+ti2git
+tih2
+tihi4
+ti2kam
+ti2kar
+ti4kau
+ti3k2en
+tik4ere
+ti2kin
+ti4klu
+ti2kn
+tik1r
+ti2kra
+ti2krä
+ti4k3rei
+tiks2
+ti4lant
+ti2lar
+ti2lei
+ti2lel
+1tilg
+3tilgu
+tille4b
+2tillu
+ti3lo
+ti2lö
+tilt4
+ti2lu
+ti2ma2g
+2timm
+tim2ma
+timma6te
+timmer4
+tim6merg
+tim4mit
+2timp
+ti3naf
+ti3nak
+ti2nam
+ti2n3an
+2t3ind
+ti5n2e
+tine1i
+2t1inf
+tin2g1a
+tin4g3l
+ting3s2
+t1inh
+3tinis
+t1in1it
+4tinj
+t1inka
+tin2k1l
+tin2kn
+tin2kr
+t1inku
+t2inn
+ti2nor
+t1ins
+t2ins.
+t3insa
+t2insä
+4t3inse
+tin4spa
+tin4sum
+t1int
+ti3nu
+tin2um
+4t1inv
+3tio
+ti2osk
+tioxi3
+1tip.
+ti3p4l
+3tips
+ti4que.
+1tirad
+ti1rh
+ti4ron
+ti6schei
+tisch3l
+tisch3w
+ti2sei
+ti3sk
+t1isl
+ti2sp
+t1isr
+ti3s2th
+ti4s3tic
+ti2su
+2t1iß
+tit2a
+ti2tal
+3ti3te
+tium2s
+ti2van
+ti2vel
+ti4vene
+tiver2
+ti4verh
+ti4verk
+ti4verl
+ti2v1o
+ti4v3r
+ti2za
+ti2zir
+2t1j
+4t3k4
+2t3l2
+4tla
+tlan2g
+tl4e
+tlei6der
+tle2ra
+4tli
+tlings3
+tli5ni
+tlit1
+t5lö
+2t1m2
+tmen8schl
+tmen4t5
+tmo4des
+t3mu
+4t3n4
+t5na
+tnes4
+tni3v
+to4as
+to5a4t
+t2oba
+1to3be
+2tobj
+tob2l
+t1obs
+1tobt
+to1ch
+2t3ochs
+1tocht
+2tock
+tock5ent
+1t4od
+tod1er2
+todes3t
+to2d1un
+toffen8st
+tof6f5ent
+tof4f3er
+2toffi
+2t3ohr
+toi4r
+tok4
+to3le
+1toler
+tomar4b
+tom1en
+2tomg
+to2min
+2tomk
+1tomo
+to2m1u
+to4mun
+1ton
+to2nan
+ton3au
+tond2
+to2n2eh
+toner6ke
+to4n3ig
+to3ny
+3too
+to3om
+to2pak
+to2pan
+to2pat
+top1hi
+1topo
+2to4pt
+t4or.
+to4rän
+t1ord
+t2ordi
+2t3ordn
+t4ore
+to4rein
+to2rel
+to2rem
+to3ren
+tor4fan
+t1or3g
+2torga
+6t5orient
+tor3int
+to2rop
+to2rö
+1torp
+t4ors
+2t1ort.
+tor3ta
+1torte
+t1orth
+tort4s
+to4ru
+to3rü
+to4rüb
+t2orw
+to3s2
+tos4s
+to2tä
+1toten
+to2tho
+1t2ou
+touil4
+to3un
+tö2c
+1töch
+2töck
+2t1ö2d
+2tö2f
+4t1ök
+1tö4l
+2töl.
+1tön
+t1ö4st
+1töt
+2t3p4
+tpf4
+tpi2n
+2t1q
+t2r4
+2tr.
+t4rab
+1trac
+tra3cha
+tra3chl
+2t3rad.
+tra4dem
+1tradi
+t3radie
+2tradp
+tra4fah
+tra4far
+1t4rag
+tra5gen
+2trahm
+3t4rai
+2t3rake
+t4rakt
+tra4leb
+tral3l
+1tram
+3t4ran.
+4trand
+1trank
+t3rann
+5t4rans
+1trapp
+tra4sta
+tra4str
+2traß
+1trau
+4traub.
+4trauc
+t4rauf
+2traup
+traus2
+2trauß
+1träc
+2träd
+1träg
+1träne
+t1räts
+2träuc
+1träum
+4t5re.
+2trea
+t3reak
+2treb
+tre2br
+2trec
+t3rech
+t4reck
+3treck.
+2t3red
+1tref
+2trefe
+2trefl
+2trefo
+2treg
+2t3reh
+t4rei.
+1t4reib
+2treif
+2t3reig
+2t3reih
+t4reik
+2t3rein
+2t3reis
+tre7isch.
+2treit
+t3reiz
+t3rek
+2t3rel
+t4rem
+t4ren.
+1trend
+1trenn
+t3rent
+2trepe
+2t3repo
+1trepp
+t3repr
+t4rer
+t4res.
+1tret
+tre2ta
+t4rete
+tret3r
+tre4tri
+2t3rett
+t4reu
+2t3rev
+2t3rez
+3t4ré
+2t3rh
+3t4rib
+t4rick
+t4rid2
+1trieb
+1trief
+trie3fr
+tri4ena
+tri2er
+2trig.
+2trige
+t4rigg
+tri3gl
+t4rik
+tri4ke.
+tri4kes
+1triko
+1tril
+1trin
+t3rind
+2tring
+tri3ni
+t3rinn
+3trio
+t4rip
+2triß
+1triu
+2t5riv
+tri2x
+trizi1
+tro3b4
+1troc
+4trock.
+t4roi
+tro4kes
+trol4la
+2trom.
+tro6mans
+tro4men
+tro2mi
+1tromp
+tro3na
+t4rop
+tro1pe
+3tropf
+tro3sm
+1trost
+2trout
+4t3röc
+2tröh
+2tröm
+1tröp
+2t3rö4s3s
+1tröt
+1trub
+2t3ruc
+4truf
+1trug
+4t4ruk
+trum2
+t3rumä
+trums1
+t3rund
+1trunk
+3t4rup
+t3russ
+2t3ruß
+2t3rut
+tru2th
+trü1be
+trü1bu
+2t3rüc
+trücker6
+t4rüg
+3trümm
+try1
+2ts
+4ts.
+ts3ab
+t3sac
+t4sachs
+t2sa2d
+ts1ahn
+ts5alben
+t2sall
+t4samp
+t4s1amt
+t2san
+ts3ane
+ts3a2r
+t2s1a4s
+tsa5ssen
+t2sau
+ts2av
+t1sä
+t2säh
+t2s1än
+ts1äus
+t2sce
+t4sch3am
+t6schart
+t4schef
+t3schl
+tsch4li
+t3schra
+t4schro
+ts2cor
+t2s1e2b
+tse2e
+t2sef
+ts1eh
+tse4he.
+t3seil
+t3seme
+ts1eng
+t3s2ens
+t2s1ent
+t2s1ep
+t2s1er
+t6s5essen
+tse2t
+ts1eta
+t2seth
+t2s1eti
+t2s1e2v
+t2sex
+t3sexi
+t2s1i2d
+t2si2k
+ts3iko
+tsing4
+t2sini
+ts1ir
+4tsk
+t1skal
+t3skala
+ts4kele
+t4s3ko
+tsmas4s
+tsma5sse
+ts1off
+tso2r
+ts1ori
+ts3ort.
+t3sos
+t1s2ouv
+ts1par
+ts4pare
+ts1pas
+ts3pate
+t1sped
+t1s2pek
+ts4pend
+ts2pi
+t2s3pic
+t4spins
+ts3ple
+ts2pon
+ts2por
+ts4put
+ts5s4
+tst4
+t4stabe
+t2staf
+t4stale
+ts3tanz
+t2stas
+t4s3tat.
+t4s3täti
+t2stea
+t4stee
+t4s1tep
+t4sterm
+t4s3terr
+ts1tie
+t3s2til
+t3stim
+t2s1tis
+t2stit
+t4stoch
+t2stoi
+t2stor
+t4strac
+t4strad
+ts4traf
+t4stren
+ts4tric
+t4strie
+ts2tro2
+ts2tub
+ts2tüm
+ts1u
+3tsubi
+t2sumz
+ts3un
+t1sü
+tsü3s
+tswa2s
+4t1t
+tt1ab
+tt2ac
+tt3achs
+t5tack
+tt1ad
+tt2ag
+tta6g5ess
+t4t1ah
+tta2ke
+tt2al
+t2ta4n
+tt4anke
+t3t2ant
+t4t1ap
+tt1art
+tt1äh
+t2tän
+tt1ebe
+tt3echs
+tt1eif
+tt1ein
+t2t1eis
+tte4la
+tte4l3e4b
+t4te4leg
+tte4len
+ttel3l
+ttel1o
+t2temu
+tte4na
+ttens2
+t4tentb
+t4tentf
+t2teo
+t3ter
+tt4ere
+tt2erg
+tte4rik
+ttermas7s
+tter3nä
+tte2ro
+tt2erö
+tt2es
+tte4sa
+tte4s3ä
+tte4s1o
+t4teuf
+tt2häu
+tt3hi
+t2t3ho
+t2tid
+t2t3igi
+t2tins
+tt2int
+tt4lef
+t3to.
+t2torg
+t3tos
+ttras3s
+t2trou
+tt3rü1
+tt2sen
+tts1p
+tt4s3tät
+tt4s3tem
+tt4ster
+tt3s2z
+ttu2
+ttu3b
+t2tuc
+tt1uf
+t4tunt
+t2tu4s
+ttü2
+tt3z2
+3tua
+tu4ale
+tu1alm
+tu1alv
+tu3an
+tub2
+tuba3b
+1tuc
+tu2chi
+tu1cho
+tudie4n3
+3tue
+tu3en
+tu2ere
+2tuf
+tuf2e
+tu3fen
+t3u2fer
+3tuff
+tuf4fel
+tu2gan
+3tuge
+2tuh
+tuh4ler
+tu1ist
+t3u2kr
+tul2i
+1tum
+tum2b5l
+4t3umf
+2t3umg
+2t1umh
+2t3umk
+2tuml
+3t2umo
+2tump
+2t3umr
+4t3umsat
+2t1umsc
+tum2si
+tum2so
+2t3umt
+2t1umw
+t3umz
+1tun.
+2t1una
+2t1und
+tund2e
+1tune
+tun2en
+2t3unf
+t3unga
+2tunif
+2tu2nio
+2tuniv
+2t1unm
+3tunn
+t1u2no
+t3uns
+1tuns.
+2t3unt
+2t1unv
+2t1up.
+tu2r1a2g
+tu2ran
+turan4l
+tu2ras
+tu2rä
+tur1c
+tu2r1e2b
+tu2rei
+tur3eis
+tu4rene
+tu2r1er
+tu4res
+tu2re2t
+tu2r3e2v
+tur3f4
+turg2
+tu2rid
+turin1
+tur4mun
+1turn
+tu2r3o
+tur3s2
+tu4ru
+tu2sa
+tu4schl
+tu2se
+tu2so
+tu3ta
+2tüb
+tü3ber.
+1tüch
+tück2s
+1tüf
+2tüh
+1tür.
+tür1c
+1türe
+1türg
+1türs
+1türw
+2türz
+1tütc
+1tüte
+2tütz
+2t1v2
+t3vo
+tvoran4
+2t3w
+twa2
+twä4
+twi4e
+t4wist
+1ty
+3ty.
+2t1ya
+ty2pa
+3tys
+2t1z
+t2za2
+tz1ag
+tz3ar
+tz1au
+t2z1ä
+t3zäh
+tz1ec
+t2z1e2d
+tz1ehr
+t2z1eie
+t4z1eis
+tze4n1
+tz2ene
+t4z3entg
+t4zentl
+t4z3ents
+tz2ere
+tzer6gre
+tz1erw
+t3zer3z
+tzes1
+tze2t
+tz1eti
+tz1i2d
+tz1int
+t2z3om
+tz2th
+tz2tin
+tzu2gu
+t2zuni
+tzwan4d3
+tz1wä
+tz1wi
+t3zwie
+tz1wu
+2ua
+u3a4b
+u1a2c
+uad4r
+u1a2g
+u1ah
+u1al.
+u1a2l1a
+u1a2l1ä
+u1alb
+u1ald
+uale2
+u3a2leb
+u3a4lent
+u3aler2
+ua4lerg
+ual3erk
+u3a2let
+u1alf
+u1alg
+u1alh
+u3a2lid
+ual3l
+ualle2
+u1aln
+ua2lo
+u1alp
+u1alr
+u1als
+u1al3t4
+ua2lu
+u1alw
+u1alz
+u1am
+uan2a
+u1ans
+uant2
+u3ar.
+uara2b
+u1ars
+uar4t3an
+ua3sa
+ua2th
+uat2i
+uat2o
+u3au
+uau2s
+u1ay
+u1äm
+u1än
+uäs4
+u1äu
+2u1b
+ubb2l
+ube2be
+u8becken.
+ube2e
+u2b1ehe
+ub1ein
+ube4n1a
+uben3o
+ub2er
+u4b3erde
+ubert4
+ub4es
+ub1eul
+u3bit
+ub2l
+ub3läu
+ub3lic
+ub3lu
+ub4lut
+u2bob
+u2bop
+u2b3oz
+ub3ric
+u2b3rit
+ub4rü
+ub2san
+ubsau2
+ub6s3che
+ub2s1o
+ub2sp
+ubst2
+ub4sz
+ub3t4h
+ubu3s
+2uc
+uc1c
+uch1a
+u1cha.
+uch1ä
+u1che
+uch1ec
+u2ched
+uch1ei
+ucherin8t
+ucherma8s
+u1chi
+uch3im
+uch1in
+uch3l
+uch3m
+uchma6ss
+uch3n
+uch1op
+u2ch3r
+uch4sel
+uch2so
+uch2sp
+uchst2
+uch6t5erf
+uch6t5ert
+ucht3re
+u1chu
+u2chum
+uch3ü
+uch1w
+u1ci
+uck3elf
+uck2er
+ucker8geb
+uck3i
+uck4sti
+uck3t
+u1cl
+2u1d
+u3d2a
+ud2e
+ude3i4
+udein7
+udel3se
+uden1
+uden3e
+udert4
+udi3en
+uditi4
+ud2ob
+u2don
+ud3ra
+u3dru
+2u1e
+u2ed
+ue2en4
+u2eg
+u2eh
+ue2k
+u4ela
+ue2le
+ueli4
+uel2la
+uel3lan
+uel2lä
+ue2mi
+uen1
+u3en.
+ue4n3a2
+u3end
+uene2
+ue2ner
+uen4gag
+uenge2
+uenge4m
+uen2gl
+u3e2ni
+uenk4
+ue2no
+ue2nu
+uen6zene
+uen2zu
+uen2zw
+u2ep
+ue2r3a2
+ue2r1ä
+uerb2
+uer6baut
+uer3d2
+uere2
+ue2rec
+uer4ei.
+ue4rein
+ue4r3emi
+u3eremp
+u3e4r3ent
+ue3r4erb
+u3ererf
+ue4rer4g
+uerer4h
+uerer4l
+uerer4m
+ue6rersc
+uerer6sp
+ue6rerst
+uer3esk
+ue2ret
+u3erex
+uer3g2
+u3erin4t
+u3erl.
+uerma6s
+u3ern
+uer4nan
+uer4ne
+ue2r3o4
+uer2ö
+uer3r
+u3errü
+uer3sc
+uerst6
+uer3t4
+u3eruh
+u3erum
+u3erunf
+u3erunt
+u3erwi
+uer3z2
+ue4s
+ue5se
+ue5sp
+ue2ta
+ue4tek
+ue2ti
+u2ev
+ue2x1
+uf1ab
+u3fac
+u3fah
+uf1ak
+u3fal
+ufall4
+ufa2n
+uf3ane
+u2f3a2r
+ufa2t
+uf1au
+u2f1än
+u2f1ä6s
+u2f1ä2ß
+u2f1ei
+ufel4s3a
+u2f1em
+u3fen.
+u2fent
+u2ferf
+u2f1erh
+u4ferla
+u4ferle
+u4ferne
+u2f1eß
+u2f1et
+2uff
+uf3fe
+uffel2
+uff4l
+uf2fro
+u2f1id
+u2fim
+u2f1ins
+uf3l
+u2fob
+ufo2r
+uf1ori
+uf3r
+uf5sä
+uf3sc
+uf2spo
+uf4stab
+uf4ster
+uf4s3tic
+2uft
+ufta2b
+uft1eb
+uf3ten
+uft3erd
+uft3er4g
+ufter4l
+uf4tin
+uft3s2
+u2fum
+2u1g
+ug2abe
+u4gabte
+u2g1a2d
+u2g1ak
+ugang4
+u2gani
+u2gans
+u2ganz
+u2g1ap
+ug1ar
+uga4s
+ug1au
+ug3d4
+u3ge.
+ug1ei
+u2geig
+u2gein
+uge4lob
+ugenma3
+ugenmas6
+u2g1erf
+u2g1erl
+u2gerr
+u2gerv
+u2g1esk
+ug2et
+ugg2
+ug2gl
+ug5g4t
+ug3hu
+u2g1i2d
+u2gim
+ug1in
+u2gl
+u4g1lä
+u6gleitb
+u6gleitu
+u4glic
+u4glis
+ug3liz
+u4g3lo
+u4glu
+u4g3n
+ugo3
+u2go4b
+u2g3oc
+u2g3om
+ugo4p
+u2g1or
+u2gö
+u2g3rä
+u2greg
+u4g3reis
+u2gres
+ug3rie
+ug3ro
+ugro3s
+u2grou
+ug3rüs
+ug3sei
+ugsma3
+ugsmas4
+ug2spe
+ugs4por
+ug3stä
+ugs1te
+ug4stur
+u2gum
+ug4unge
+ug2uns
+ugu6sten
+ugu6ster
+u2gü
+u1h
+uh2a
+2u5he
+uhe3a
+2uhi
+2uhl
+uh1la
+uh2lar
+uh1lä
+uh4l3ent
+uhl3erb
+uh2li
+2uhm
+uhr1a
+uhrei4s
+uh2r3er5
+2uh3ri
+uh4rin
+uh2r3o
+uh2ru
+uh4rü
+uhs4
+u2hu
+2uhü
+uh1w
+2ui
+ui1ch
+ui2che
+u1ie
+ui1em
+u3ig
+u4ige
+uil4les
+u1im
+u3in.
+uin3n
+u3isch.
+u3ischs
+uis2e
+uisi4n
+ui2st
+uit3s
+u1j
+uk2a
+uk1äh
+u3käu
+u1k2e
+uke2n1
+u1ki
+2u1k2l
+ukle1i
+u1k4n
+uko2m1
+uk2ö
+u1kr
+uk2ta
+uk2t1el
+uk2t1er
+uk2tin
+uk4t3o4ri
+uk2t3r
+ukts2
+uk2tum
+u1ku
+uku2s
+uk2ü
+u1l
+ul1am
+ulan2e
+ul2ar
+ula2sc
+ul1äm
+ul4dan
+ul2dei
+ul2dr
+uld2se
+2ule
+u2l1el
+ul1emb
+ule4n
+ul1er2h
+ule4s1t
+ule2t
+ul1eta
+2ulf4
+ul1id
+uli2k
+ul1ins
+ul3ka
+ul2kn
+ulla2g
+ull1au
+ul2lä
+ul3len
+ul3l2i
+ulli2n
+ul2lo
+ul2lö2
+ull3s2
+ulm2e
+ulni2
+ulo2i
+u2lop
+u2l1or
+ulp1h
+ul2pha
+ul2sa
+ul4sam
+ul2s1ec
+ul2sei
+ul2ser
+ul2sum
+2ult2a
+ult3ar
+ul2tri
+ult3s
+u2lü
+ul2vr
+ulz2w
+u2mab
+u2m1ad
+u2m1a2k
+um1all
+um1ang
+u5mann
+um1anz
+u2m1ap
+um1a2r
+u2marc
+u2marm
+u2mart
+u3mat
+u4matl
+u4matm
+u2maus
+u2maut
+u2m1äh
+1umd2
+u3me.
+u2m1ef
+u2m1ein
+umen1e
+um5engel
+umens2
+umer2a
+u2m1erf
+um1erg
+u3merk
+u2m1erl
+um1erw
+ume4s
+1umf
+1umg
+um1ide
+um1ind
+um1inh
+um1ir
+1umk
+1uml
+2umm
+um3mä
+um4mess
+u2m3ot
+ump2fa
+ump4fin
+umpf4li
+um2pho
+1umr
+um4sam
+um4s3an
+1umsat
+um2s1er
+um2sim
+um2s1pe
+um4stem
+um2sum
+um3t4
+u2m3um
+u2m1u2r
+1umz
+un1
+2un.
+2una.
+1unab
+3unabh
+un2a3br
+un2ag
+un2al
+u3n2am
+u2n3an
+u2nap
+u2narb
+2un2as
+un3at
+unau2s
+un2är
+2und.
+un2da
+unda2b
+un4dap
+1undd
+2unde
+un3de.
+underer6
+und3erf
+und3erö
+underten8
+under8tend
+und3erz
+un2dex
+1undf
+2undg
+un2dim
+1undn
+undo2b
+un2dop
+un2dor
+2un2d3r
+4unds.
+2undsc
+und3sp
+un2d1um
+undü4
+1undv
+1undz
+u3ne
+une2b
+une2d
+un3eid
+un3ein
+un3eis
+un2emi
+une4n1
+unen2t
+u4nerk
+u4n3erz.
+un2es2
+unf2
+un3fa
+unft2s
+un2gam
+un2gat
+3ungena
+unge3r4e
+1unget
+1ungew
+un2glu
+1unglü
+un2go
+un2gr
+ung3ri
+ung4s
+ungs3tr
+ungstra8s7
+u3nic
+3u2nif
+uni3k4
+un2im
+1unio
+un2ir
+un3iro
+un3isl
+u3n2it
+1u2niv
+2unk
+un2k1a2
+un3ker
+un2k1es
+un2ket
+un2kne
+unko2p
+un2kro
+unk3s2
+unk4tit
+unk2tr
+unlö2
+un2n1ad
+unn2e2
+unne4n
+u2nob
+uno4r
+un2os
+1unr
+uns2
+2uns.
+unsch5el
+1unsi
+un3sk
+un3sp
+uns4t
+unsta4g
+unst1r
+2unsy
+2unsz
+1unt
+un3ta
+un3te
+unte4ri
+2unti
+un3tr
+unt3s
+2untu
+3unty
+2u2nu
+u3nuc
+u1nü
+unvol2
+unvoll3
+1unw
+2unwä
+u2ny
+2unz
+un3z2a
+unz2e
+2uo
+u1o2b
+u3of
+u1op
+u1or
+u3or.
+u3or3c
+uore4
+u3o2ret
+u3ors
+u3ort
+u3orw
+u1os.
+uote2
+u3o2x
+u1ö2d
+u1ök
+u1pa
+3upd
+u1pe2
+uper1
+upe4re
+uperer4
+up2fa
+upf1i
+u1pfl
+u1p2fu
+3upg
+u3p4i
+up4lu
+up2pl
+u1pr
+upra3
+u2p3ras
+up4t3a2
+upten1
+up4tene
+upt3erf
+upt3erg
+upt3erk
+upt3ers
+up4tid
+up4tim
+upt1o
+u1q
+4ur.
+u1ra
+u2rab
+u3raba
+ura2be
+u2r1akt
+u2ral2t
+u2r1a2m
+ura4na
+uran3a4t
+u3rand
+ur1ang
+uran4ge
+ur2anh
+uran5s
+ur1anz
+ur3ap
+u2r3ar
+ura4ri
+u3rasc
+ur3a4sp
+ura4str
+ur4ate
+ura3to
+u2r3att
+u2r1au
+2u1rä
+ur1äl
+ur1ä2m
+ur1än
+ur3b2a
+2urc
+urch1
+urchas4
+urcht3e
+ur3d2a
+ur3d2i
+ur1eff
+ur1eig
+u2rele
+ure2n
+ure4na
+uren6gag
+u4rense
+u4rentn
+u2r1ep
+ur1er3h
+urer3k
+ur2ert
+u2rerw
+ur1eta
+ur2eth
+ure3u
+2urf
+ur2f3l
+ur2fro
+urf4spr
+urf3t
+ur6gense
+urg3inn
+urg1l
+ur2gla
+ur2gri
+uri2c
+ur1ide
+uri3en
+u2rind
+urin8stin
+ur4mant
+ur4matt
+ur2mau
+urm2ei
+ur4mern
+urmet1
+ur2mum
+ur2mun
+ur3n2e
+4u1ro
+ur1off
+urost2
+2u1rö
+ur3p4
+2urr
+ur3re
+3ursac
+ur2san
+ursau4
+ur2s1er
+ur2s1of
+ur2spa
+urst4r
+ur2sun
+urt2
+2urta
+ur4tai
+urt3ein
+ur2tro
+u3ru
+ur2z1a
+ur2zä
+ur2z1ec
+ur2zep
+ur2zi
+ur2z1op
+urzt4
+ur2z1w
+2us
+us3a4b
+u4s3af
+usa2gi
+u3sal
+u4sall
+u4s1amb
+u4samt
+u2sang
+us2ann
+us3ark
+us5art
+u2s1a4s
+us3ate
+u1sä
+u2säh
+u2sce
+u4schab
+u4schak
+u4schef
+usch5eic
+u4sch3eu
+u3schi
+usch3mü
+u3schu
+usch5wer
+u3se.
+u3s2e3b
+u2s1ec
+u2s1ei
+u3seid
+u4sense
+u4sentl
+u3sep
+use3ran
+use4rec
+u2s1erl
+u2serp
+us1erw
+u2s1ese
+u2sex
+u3si.
+u2sid
+usi3er.
+usi5ers.
+u3sig
+us1inn
+us5is.
+us3kl
+usmas2
+usma5sse
+u1so
+us3oc
+us1oh
+u3sol
+u2sop
+us1ou
+u1sö
+u1sp
+u2spac
+us3part
+u2s1pas
+u3spec
+u3spek
+u2sph
+us1pic
+u2spo
+us2por
+u2spu
+usrich7
+us2s3eb
+usse4g
+u4s3sel
+us2se4n
+us5sende
+us6seni
+us2sep
+us2ser
+us3ser.
+uss3erf
+usser4z
+u4sset
+us2sez
+u3s2sig
+uss3k
+us2sof
+us2sum
+u2stab
+u3stal
+us2ten
+us2ter
+ust3erl
+ust2in
+u3stis
+u2s1tor
+u3stras
+u2s3trä
+u4strit
+u2s1tur
+us3ty
+u1su
+u2sumd
+u2sumg
+u2sumz
+3usus
+2uß
+u2ß1u
+2u1t
+u3ta.
+u3taf
+u2t1alt
+ut1a2m
+ut2ans
+u2t1ap
+u2t1ar
+u2taut
+ut1äh
+u2tär
+ut3c
+u3te.
+u4t1e2d
+ut1ei.
+ut1eie
+ut1ein
+ut1ela
+ute2n1
+u3ten.
+uten2a
+u2tent
+uter3a
+ute4ral
+ute5r4er
+ute6ring
+ute4ros
+u3t2es
+u3t2et
+u2t2ev
+u2t1ex
+utfi4
+ut3hel
+u2t3hi
+u2t3ho
+u2thu
+u2thy
+u2tid
+uti2vi
+utli4n
+utmas2
+utma5sse
+u3to.
+uto4ber
+uto3c
+u5to3m
+uto1p
+uto3pa
+u2tops
+utor2a
+u2tord
+u2töl
+4utr
+ut3rea
+u2trou
+ut3rü
+ut3sau2
+ut2säu
+ut3sche
+ut4schl
+ut4schm
+ut4scho
+ut4schö
+ut3ser
+ut3s2k
+ut1so
+ut1s2p
+ut3sto
+ut3tan
+ut3t2l
+utt4le
+utt1s2
+utu2b
+u2tum
+utu4n
+u2t1une
+utu4re
+utu3ro
+utu5ru
+u4tz
+utze2
+ut2zeh
+utz3eng
+utz2er
+ut2zet
+ut2z1in
+ut2z1w
+2u3u4
+uum1
+uuma2
+uungsma5
+uungsmas8
+u1ü4
+u1v4
+u2ve.
+uve3rä
+u1w
+2u1x
+ux2e
+ux2o
+uxt2
+u1ya
+2u1z
+u2z1ec
+uz2er
+uzo2f
+uz3ot
+uz1we
+uz3z2
+uzz4l
+1üb
+üb1ä
+2übc
+2übd
+üb4e2
+übe3le
+übe4na
+übe3ne
+über3
+überas4
+ü4bet
+üb3l
+üb3r
+2üc
+ü1che
+üch3l
+üch4s1c
+ücht4e
+ücke4n
+ück1er
+ück3eri
+ücker6ke
+ü4d3a4
+üde2l
+üden2g
+ü3d2ens
+üd3o4
+üdö4
+üd3r
+üd3s2
+üd3t4
+üdu2
+üdwe4
+üe2
+üeb3
+ü1ei
+ü4f1a
+ü2f1ä
+ü2f1ei
+ü2fent
+üfer2
+ü2f1erg
+üf2fl
+ü2f3i
+üf3l
+ü2fo
+üf3te
+üf4tei
+ü2fum
+ü1g
+üg2e
+üge2l1a2
+üge2lä
+üge4lec
+üge6lei6s
+üge2lo
+ügen3s
+ü2g3l
+ü2gn
+üg3s
+üh3a4
+ü1he
+ü2h1ei
+ü2h1eng
+ü2h1ent
+üh1er
+ü2herf
+ü2her2k
+ü2her2z
+ü2hex
+üh1i4
+üh1lä
+ühl2er
+ühl4sta
+ühl4sti
+üh3mo
+üh3ne
+üh1o2
+üh3r2e
+ühr3ei.
+ühre2n1
+üh1ro
+ühr3ta
+ühs2
+üh3sp
+üh3stu
+üh3t2
+üht4r
+ü1hu
+üh1w
+ü1k2
+ül1a
+ül2c
+ü3l2e
+ü4l3ef
+üle2ra
+ül2la4
+üll1ad
+üll1au
+ül2lei
+üll2er
+ül4leu
+ül2lic
+ül2lid
+ül2li2n
+ül2lo
+ül2lö
+ülls2
+ü2lö
+ü1lu
+ü2ma
+ü2ment
+üme2ra
+ü2m1id
+ü2m1in
+ü2m1u
+2ün
+ü4n3a
+ün2da
+ün2dr
+ü2n1erd
+ünf1
+ünf3li
+ün2g3l
+üngs2
+ünster3
+ün2za
+ünzu2
+ün2zun
+ün2zw
+ü1pe
+üpf3l
+ü1pi
+üp2p3l
+ür1a
+ü2r1ei
+ü2r1e2l
+ür2fl
+ür2fr
+ür4g3en4g
+ürge4ra
+ürk2e
+ü1r2o3
+ürom2
+üror2
+ür4ster
+ürte2l1
+ürt4h
+ürz2a
+ür2z1in
+ür2zö
+ür2z1w
+üs2a
+ü2schl
+üs2e
+üse1e2
+üse3l2
+üse4n
+üse1r4
+üse3t
+ü1sp
+üs2s3a
+üs2s1c
+üss2e
+ü4s3sel
+üs2s1o
+üs4st
+üs2su
+üs4t
+ü2st3a2
+ü4stei
+üste2n
+ü2str
+ü1su
+ü1ß
+2üt
+ü1ta
+ü2t1al
+ü1te
+üte3m
+üte4n
+üten3s
+ütent4
+üten3z2
+üte2ra
+üte2r1e
+üterich6
+üter3n
+ü2t3h
+ü1ti
+üt3r
+üt2s1
+ütte4n
+üt2tr
+ü1tu
+üt3z2e
+üt2zw
+ü1v
+ü1z
+3va.
+2v1ab
+vab4r
+va1c
+va1f4
+vag2a
+va2la
+2valu
+2vanb
+2vang
+2varb
+v1arm
+vas2
+2v1ass
+v4at
+va2t1a2
+va2tei
+va4t3eng
+vates2
+va2t3h
+va4tid
+vatik2
+va4tim
+va4t1in
+vati8ons.
+va4tord
+va2t3r
+vat3s2
+va2t1u
+vat3z
+2v1au
+vä1
+2v1b
+2v1c
+2v1d2
+1ve2
+ve3an
+ve3ar
+veau3s
+ve3b4
+ve3c
+ve3d
+ve3fa
+ve3g
+ve3h2
+2veig
+v2eil
+2vein
+veit2
+veits1
+ve3la
+2velan
+ve4l1au
+v1ele
+ve3lei
+ve3li
+ve3lo
+ve3ma
+ve3me
+2ve3mu
+ve3nal
+ve4nas
+ven2c
+ve3ne
+ve3ni
+ve4nin
+ve3nö
+ven5st
+ven4t3ag
+ve3nü
+ve3of
+ver1
+ver3a
+ve3rad
+2veral
+ve3rand
+ver4ane
+vera4s
+ver6bart
+ver3b2l
+ver3d2
+vere2
+verf4
+ver3fa
+ver3g4
+vergas6
+verga7sse
+ve3ri
+ve4rin
+ver3k
+vermas8sen
+vern2
+ver4sep
+ver3sta
+vert4
+ver5te
+ver3u4
+ve3s
+2vesc
+2vese
+ve4sh
+ve4s1p
+ves4t
+ve3t
+vete1
+vete3r
+2veü
+ve3v
+ve3w
+ve3x
+2v1f4
+2v1g
+2v1h
+vi2ad
+vi3ar
+vi4a3t
+vi2ä
+vi3de
+vie2ha
+vi2el
+viela2
+viele2
+vi2er
+vie4rec
+vie2w1
+vig2
+2vii
+v2il
+vi2l1a
+vi2lä
+vi4l1e2h
+vi2lei
+vi4lers
+vi2l3in
+vil3l
+2v1i2m
+vima2
+vi4na
+2v1in3d
+ving3
+2v1int
+vi3sa
+vise4
+vi3s2i
+vi3s2o
+vi2sp
+vis2u
+viv2
+vi3z
+vize3
+2v1k
+2v1l2
+v3le3
+v2lie
+2v1m
+vm2e
+2v1n2
+1vo
+2v1ob
+vo2be
+vob4l
+vo3ga
+voge2l1
+vo2gu
+vol2a
+voll3ar
+voll7auf.
+vollen6
+voll5end
+2v1op
+vo2r1
+vor3a
+voran8schl
+vore4
+vor3g
+vo3ri
+vo4rie
+vo5rig
+vorm2
+vormen4
+vor3o
+vorö4
+vort4
+vot2a
+voy1
+2v1p
+vr2
+v1ra
+v2ree
+3v2ri
+v1ro
+2v1s2
+v3sz
+2v1t
+vue3
+vu2enu
+vu2et
+2vumf
+2vumg
+2vumk
+2v1ü
+2v1v
+2v1w
+2v1z
+w2a
+1waa
+wab2bl
+wa3che
+wach8stub
+wach4t4r
+1wack
+waffe2
+waffel3
+1wag
+wa5ge
+wage4n
+wa2g3n
+wa3go
+1wah
+wahl5ent
+wah4ler
+wah2l1i
+1wal
+wala3c
+wa2lar
+2walb
+wal2d3a
+wal4din
+wa2les
+wa3li
+wal4li4n
+wal2m1
+wals2
+walt1a
+wal6tere
+wal6terl
+wal2to
+wal4tur
+wa3na
+wan2d1a2
+wan2dr
+w3anf
+2wang
+wan3g2e
+wang4s
+1wann
+wan6z5en6d
+wan4zer
+wa2p
+1war2e
+ware1i
+wa3ren
+1warn
+wart4e
+war2th
+1was
+wa3sa
+was2c
+wa4scha
+wa3sche
+wa3schi
+wa4sch3l
+wa4schw
+wa3sh
+wass4e2
+wa3su
+w2ä
+1wäh
+1wäl
+wäm3
+2wäng
+1wäs3
+wä5sc
+wä4ss
+wäss4e
+2w3äu3
+2w1b2
+wbu2
+2w1c
+2w1d
+we2a
+we2b1a
+webe1i
+we2b3l
+we2bo
+we2b3r
+we2e2
+weed3
+we2fl
+1weg
+we2g1a
+we4g1ei
+weg5ersc
+we4g3l
+we4gn
+we2g1o2
+we2g3r
+weg1s
+wegs2a
+1weh
+weh4r3er
+wei2bl
+weib4r
+wei3dr
+2weie
+weifel6d
+wei2gr
+wei3k4
+1weil
+wei3nel
+weins3a
+weinsau6
+wei3sc
+wei2t3r
+weit1s
+wei5ze
+welle4
+wel6schl
+wel6schr
+wel2t1
+welt3a2
+welte4
+wel6t5en6d
+wel4th
+welt3i
+welt3r
+wem2ma2
+wen3a2
+wen2gl
+we3n2i
+wen2ka
+wen4kla
+wen4k3ri
+we2r3a2
+wer5be
+werbe3i
+wer2bl
+werb2s
+1werbu
+werd2
+werde3i
+5werdens
+1werdu
+werer2
+wer2fl
+2werg
+wer6gels
+wer2g3o
+wer2gr
+werin2
+we4r3io
+1werk.
+wer4k1a
+1werke
+wer2ki
+wer2k3l
+wer2kn
+wer2ko
+wer4kre
+wer2ku
+we2rö
+wer4sta
+wer2ta
+wer2tä
+wer3t3ei
+wer6teig
+werter6k
+wer6t5erm
+wer2th
+wer2t1o2
+wer4tre
+wer4t3ri
+wer4tum
+1we3s2e
+wesen4s3
+we2sp
+wes4t
+we4st1a
+we4stec
+we4st3ei
+we5sten.
+we6sten6d
+we5stens
+we4steu
+we4sti
+we4st1o4
+we2st3r
+we4stu
+1wet
+2wets
+wett3s
+2w1ey
+2w1g
+whi2
+w3ho
+w2i
+wicht4s
+1wid
+wi2e
+2wieb
+1wied
+wie3l2
+wie3n2e
+wie4st
+1wild
+wim2ma
+wim4m3u
+win2a
+win4d3ec
+win4dei
+win6d5erz
+1win2d5r
+2wing
+win2g3r
+win2kl
+win8n7er8sc
+win2no
+win4num
+win3s
+wint2
+1wi4r
+wire3
+wisch3l
+wi3s2e
+wi2sp
+1wiss
+wiss4z
+wi3st
+wi3th
+1witz.
+1witzl
+wiz2
+2w1k
+2w1l
+2w1m
+2wn
+wns2a
+wn3sh
+1wo1c
+wo2cha
+woch2e4
+1woh
+woh4lei
+1wolf
+wolf2s
+wol4la
+wol2lä
+wol4ler
+wor3a
+wor3d
+wo2r3i
+worn2
+wort1a
+wor4tel
+wor6terh
+wor2t3r
+worts2
+wo4r3u
+wor3ü
+wot2
+1wöc
+wöl2fo
+wört4h
+2w1p
+w2r
+w3ro
+2w1s
+ws2e
+w3s2h
+w3s2k
+2w1t
+wti2
+1wuc
+wuch4sc
+wuch4st
+w1u2f
+wuls2
+wul3se
+wund4e
+wung3r
+wung5s2
+wun2s
+wunsch5l
+4wur.
+wur2fa
+wur2f1o
+wur2fr
+wurs4
+1wurst
+wus4
+1wu2t1
+1wüh
+1würf
+1würst
+wüs4
+2w1w
+2w1z
+x1a
+1xa.
+2xa2b
+1x2ad
+1xae
+xa1fl
+1x2a3g2
+2xal
+xal2l
+xa2m
+xand4
+x2an3t2
+x2anz
+1x2as
+xau3
+xaus2
+2x1b4
+2xc
+x1ce
+x1ch
+x1cl
+4x1d
+xda2
+xdy2
+1xe
+2x1e4g
+2xek
+xe2l
+x1ele
+x1em
+3x2em.
+x2ems
+x2en
+xen3s2
+x2er.
+x2ere
+2xerl
+xers2
+2x1eu
+2x1ex
+4x1f
+2x1g
+2x1h
+xib4
+xi1c
+xich2
+2xid
+xi2dan
+xide2
+xi2dei
+xi2d1em
+x1i2do
+xi4ds
+x2ie
+xie3l
+xi3g
+xi2ler
+xi2lo
+xi2l1u
+xim2
+xin3s2
+x2is
+xi2sa
+xi2s1e
+xi2s1o2
+xi2sp
+xis5s2
+xi3stä
+xi2su
+x1i2tu
+xive4
+2x1j
+2x1k2
+xkal2
+4x2l2
+x3lä
+x3le
+2x1m
+2x1n
+2xod
+2x3oe4
+x1or
+2x1ö2
+4x1p
+xpor6ter
+xpor4t3r
+x1q
+2x1r
+4x3s2
+4x1t
+xt1a
+x3ta.
+x3tan
+xt2ant
+x3tas
+x2t1ä
+x3tät
+x2t1e2d
+xt1ein
+x2t1el
+x2tent
+x2t1er2f
+x2t1ev
+xtfi4
+x2t3h
+x2tid
+xti2la
+x2til2l
+xt1o2
+x2tor
+xtra3b4
+x2t3ran
+x2trau
+xt3rec
+xt3s2
+x2t1um
+x2t1un
+1xu
+xu1a
+2x1u2n
+xu2s3
+xuss2
+2xv
+2x1w
+2xy
+3xy.
+3xys
+2x1z
+2yab
+1ya2c
+y2ach
+y2ag
+ya1h
+y1al.
+y1a2m
+y2ana
+yan2g
+y1ank
+y2a3ra
+ya4s
+yat2
+y1ät
+y1b
+y1c4
+y2chi
+y3chis
+ych3n
+y1d4
+y3dr
+ydri4
+ydrid1
+y1e
+y2ec
+ye2d
+y2ef
+y2el
+yen4n
+y2ere
+yer2n1
+y2es
+yes2p
+y3e4st
+ye2th
+y1f2
+y1g
+ygi2
+ygie5
+yg2l
+y1h
+yhr2
+y3i4
+y1j
+y1k2
+yke3n
+yk3s
+y1l
+yl1a2c
+y2l1a2m
+yla2n
+y3lant
+yl4ante
+yl4anti
+y4lantr
+y3lat
+ylau2
+yl3c
+yle2
+y4le.
+yl1em
+y2l1es
+y2l1et
+yli4n
+yl2lo2
+yl2lö2
+yloi4
+yloid1
+yloni1
+yl1ora
+ym4a
+ym4e
+ymp2
+ym2pha
+ympi1
+yn2eu
+yn3k2
+y2n1o
+yno4d
+yno2t
+yob2
+yoga3
+yom4
+yon2a
+yon4i
+y1ont
+y1os
+y2ost
+y1ou
+2y1p
+ypa2
+yp1ab3
+yp1an
+yp2e2
+y2pf
+y2p1i2d
+y2p1in
+y2p3l
+ypo3
+y4p3s
+yp3t
+ypu2
+y2p1um
+y1q
+y1r
+yra3k
+y3r2e
+y3ri
+yri2a
+yri1e
+yri3en
+y3ro
+yro6ste
+yrr2
+y1s
+ys2an
+ys2c
+ys2e1
+ysein2
+y3s2h
+y4s3l
+ysme3
+ys2o
+ys2pa
+ys2pi
+yst2e
+yst4h
+ys2tra
+y4stro
+y3s2ty
+ysu2
+y2sur
+y3s2z
+y1t2
+y2te.
+y2tes
+yt4h
+ythe1
+y3to
+y4t3r
+yt3t
+y1u2r
+y1v
+y1w
+y1y
+y1z2
+yzer2
+2z1a2b
+zab3l
+za1cha
+za1chä
+2z1a2d
+2z1af
+za3gr
+3z2ah
+zah3le
+zah4ner4
+2z3ak
+4zakk
+2z1al
+3zali
+2z1a2m
+z1a2n
+z2an.
+4za4na
+2zanb
+za3ne
+2zanf
+2zangs
+3z2ank
+zan2ka
+2zanr
+zanti1
+za4pf
+z1aq
+z1ar
+3zar.
+2zarb
+2zarm
+3z2aro
+zar2tr
+2z1as
+za4sc
+za3st4
+2z1aß
+z3at
+zat2e
+za2to
+3zaub
+z1au2f
+2z3aug
+3zaun
+z3aur
+2z1aut
+2z1äc
+z2äh
+2z1äm
+z1än
+z1äp
+z1är
+2z1äus
+2zäuß
+4z3b4
+zbe3r2e
+zbü1b
+zbübe3
+2z3c
+2z3d2
+zdan2
+zdä1
+3ze.
+zeau3
+zeaus4
+2z1e2ben
+2z1echo
+ze1e2
+zeeu3
+2z1eff
+z1e2ga
+zehe4
+zehen1
+zeh2l
+ze3ho
+z2ei1f4
+zeil2
+zei3la
+zeile4
+2z1ein
+ze3in.
+zeinbus6
+z2e1ind
+zei4ne
+z2eino
+ze3inse
+ze2i3s2
+zeist4
+3zeit
+zei2t1a
+zei4t3er
+zei2tr
+zeit3ri
+ze2l1a
+zela2d
+zelau2
+ze2l1ä
+zel3d
+2ze2lek
+2zelem
+ze2len
+ze2l1er
+ze2l1in
+2z1e2lit
+zel3la
+zel4l3ac
+zel2lä
+zel4leh
+zel6lein
+zel6ler6t
+zelli4n
+zelm4
+ze2l1o
+zels2
+zel3sa
+zel3sz
+zelu2
+zembe2
+2z1emp
+5zen.
+ze4n1ac
+ze4nas
+zen3au
+ze3n2em
+zenen1
+4zenge.
+z4engl
+2zengp
+zen3n
+ze2n3o
+ze4not
+4zensem
+zens2p
+zen4tha
+z2entn
+zent3s
+2zentw
+2zentz
+ze2nu
+zen4z3er
+zen2zw
+zeo4r
+3z2er.
+zer3a
+ze1ral
+zere2b
+z2erfe
+z2erga
+2z1ergä
+4z3ergeb
+z4erges
+z4ergl
+zer4gon
+2zergu
+z2erhe
+2z3erhö
+ze3ri
+zerin6te
+z2erko
+3zerl.
+zer4lau
+zer4le.
+4zerleb
+zer4len
+2zerlö
+3z2ern
+zer4nan
+zer4n3e4b
+zer4nei
+2z1erö
+zer2öf
+2z1erq
+4z3erreg
+z2ers.
+2z1er4sa
+zerta2
+zer4t3ag
+zert4an
+zer6tere
+zer6terl
+zer4tin
+zer2to
+6z5ertrag
+zer6trau
+z1erwe
+2z1erz
+zer2ze
+4z3erzi
+ze2s
+3zes.
+ze3sc
+zes1e
+zes3er
+ze4s3po
+ze4spr
+zes2sa
+zes4sei
+zessen4
+zes6s5end
+zes4ser4
+zes2sp
+ze3sta
+zes2th
+ze2ß1
+2zeta
+2z1e2th
+ze2tr
+2zetts
+zeu2g3r
+2z1eul
+ze1ur
+2z1e2x1
+2z3f4
+zfäs3
+zfeue2
+2z3g4
+zgang5
+zger2a
+zger2s1
+2z1h2
+z2hen
+zhir3
+3zi.
+zial5l
+zi3ar
+zich2o
+zi2dei
+zid3r
+zie4ler
+zie2l1i
+zi1erh
+zi1es
+zi3ess
+3zig
+3z2il
+zil2e
+zill2
+z2imm
+2zimp
+zim2t3
+2z1ind
+zin2e
+zin3ei
+2z1inf
+z1inh
+zi4n3in
+zin1it
+2z1inj
+zin2na
+zin4o
+zin2sa
+zin4ser
+4zinsuf
+z1inv
+zi2o3
+zirk2
+zirk6s
+2z1i2so
+zisse4
+zis4t
+zistras6
+zi3s2z
+zi2tan
+zite4
+zithe2
+zi2t1o4
+ziv2
+2z1j
+4z1k4
+2z1l2
+z3ly
+2z1m2
+zmas6sen
+zme2e
+2z3n2
+z3oas
+2z1ob
+z1of
+zo2gl
+2z1oh
+zolla2
+zol3le
+zol4lei
+zoller4
+zol6lert
+zol2li2
+zon3au
+zon3s4
+zon4t3er
+zo2o
+2zope
+2z1o2r
+zo3re
+3z2orn
+zor4ne
+2z1osz
+2z1ou
+2zö2f
+2z1ök
+z1öl
+zö4le
+3z2öll
+2zöls
+2zön
+2z3p4
+2z1q
+2z3r2
+4z1s2
+z3sa
+zsau2
+z3sh
+z3sk
+zspor2
+z3str
+z3sz
+2z1t
+zta2n
+zt3ane
+z2t1au
+ztein1
+zt3eins
+zt2el
+z2t1ent
+z2t1erz
+z3tes
+zte3str
+zt3he
+z3t4hem
+z3t4her
+zt3hi
+zt3ho
+z3thr
+z3thy
+zt3rec
+zt3s
+zu3a
+zu1ä2
+zub4
+zubus2
+3zuc
+zuch2e
+zud4
+zudi4
+zu2el
+zu3e2r1
+zu3f4
+zu2gar
+zu4gent
+zu3g1l
+zu4gla
+zu4glö
+zug4ste
+zug1un
+2z1uhr
+zu3hu
+zu1i2
+zu3k
+zul2
+2z1um.
+zum2a
+2z1umb
+zumen2
+2zumf
+2zumg
+zum2i
+2zuml
+2zumr
+2z1ums
+zum2u
+2zunab
+zun2e
+2z1unem
+4zunget
+2z1ungl
+z1uni
+2zu2nio
+2zuniv
+2zunr
+2z1uns
+2zunt
+zuo2
+zup2fi
+zu3pl
+zu3r4a
+2z1urk
+2z1url
+2z1urn
+2z1urs
+2z1urt
+zu3s2
+zusch4
+zu3t2
+zut4r
+zut4u
+zut3z
+zuz2
+2zü4b
+3züc
+zür1c
+2z1v
+zw2
+z1wac
+2zwag
+2zwah
+2zwal
+2zwap
+z1war
+2zwa2s
+2zwäs
+2z1wed
+2zweg
+2zweh
+z2weig
+2zweil
+zwei3s
+zweiter6
+2z1wel
+2z1wen
+2z1wer
+2z1wes
+z2wic
+zwi4e
+3zwing
+2zwirt
+z2wisc
+2zwiss
+z2wit
+2z1wo
+z1wör
+z1wur
+2z1wü
+zy1an.
+zy2le4
+4z1z
+z3z2a
+zza3b4
+z4z3al
+zz4at
+zze3s
+z2z1id
+zzin1
+zz1ini
+zz2ö
+zzug4s
 }
 
+\endinput
+
+% ======================================================================
+% Editor settings
+% ======================================================================
+%
 % Local Variables:
+% mode: tex
 % coding: latin-1
+% fill-column: 72
 % End:
-%
-% End of file `hyphen.det'.
+% vim: set filetype=tex textwidth=72:
index 97c75f81b379c92c842fea4537b4ecbbb884a46e..163d7fa8ad6511a077813e9d062a9c88b066f78e 100644 (file)
@@ -1,7 +1,7 @@
-% This is the file `hyphen.fr'.
+% This is the file 'hyphen.fr'.
 %
-% It contains the same hyphenation patterns as `frhyph.tex'.  Here the
-% copyright message:
+% It contains the same hyphenation patterns as 'frhyph.tex'.  Here is
+% the copyright message:
 %
 %    frhyph.tex % French hyphenation patterns
 %   %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -14,7 +14,7 @@
 %
 % To make the patterns workable with groff, all accent macros in the
 % patterns have been converted to use latin-9 characters directly
-% (this is, the oe ligature `½' is used), and everything except the
+% (this is, the oe ligature '½' is used), and everything except the
 % \patterns command has been discarded since it isn't needed (and groff
 % doesn't understand this stuff anyway).
 %
@@ -1317,8 +1317,13 @@ privatdo3zent.
 
 \endinput
 
+% ======================================================================
+% Editor settings
+% ======================================================================
+%
 % Local Variables:
+% mode: tex
 % coding: latin-9
+% fill-column: 72
 % End:
-%
-% End of file `hyphen.fr'.
+% vim: set filetype=tex textwidth=72:
index 407e156a3c2bfcaad154531bdc6f1cdc7e3aa425..67de5cf4a5cf904a1a441f91e3420709f8856a18 100644 (file)
@@ -1,12 +1,14 @@
-% --------------------------------------------------------------------------
-% Swedish hyphenation patterns. 
+% ----------------------------------------------------------------------
+% Swedish hyphenation patterns.
 %
 % Copyright 1994 by Jan Michael Rynning. All rights reserved.
-% This program may be distributed and/or modified under the conditions of
-% the LaTeX Project Public License, either version 1.2 of this license or
-% (at your option) any later version.  The latest version of this license
-% is in http://www.latex-project.org/lppl.txt and version 1.2 or later is
-% part of all distributions of LaTeX version 1999/12/01 or later.
+%
+% This program may be distributed and/or modified under the conditions
+% of the LaTeX Project Public License, either version 1.2 of this
+% license or (at your option) any later version.  The latest version of
+% this license is in http://www.latex-project.org/lppl.txt and version
+% 1.2 or later is part of all distributions of LaTeX version 1999/12/01
+% or later.
 %
 % Last update: 1994-03-03 (March 3, 1994).
 % Revision history:
 % 1991-11-13: Added another some 6500 compound words, all of which were
 %             incorrectly hyphenated by the old patterns.
 % 1992-01-30: Changed macros to ^^, for use with LaTeX and dc fonts.
-% 1994-03-03: The hyphenated dictionary now contains about 118,000 words.
-%             The hyphenation now works much better for compound words.
-%             Patgen parameters: 1 2 20, 2 1 8, 1 4 7, 3 2 1, 1 10000 4.
-%             
+% 1994-03-03: The hyphenated dictionary now contains about 118,000
+%             words.  The hyphenation now works much better for compound
+%             words.  Patgen parameters: 1 2 20, 2 1 8, 1 4 7, 3 2 1, 1
+%             10000 4.
+%
 % This file contains Swedish hyphenation patterns for TeX.  It assumes
 % that you have fonts with the Swedish letters in the positions where
 % they occur in ISO Latin 1 (ISO 8859/1):
 % correctly if \lefthyphenmin>=1 and \righthyphenmin>=2.
 %
 % These hyphenation patterns work quite well for simple words, but not
-% quite as well for compound words.  I'm working on improving the quality,
-% by adding more words.  If you know any Swedish words which are not
-% correctly hypheneted using these patterns, or if you have questions or
-% comments, please contact me:
+% quite as well for compound words.  I'm working on improving the
+% quality, by adding more words.  If you know any Swedish words which
+% are not correctly hypheneted using these patterns, or if you have
+% questions or comments, please contact me:
 %
 % Jan Michael Rynning <jmr@incolumitas.se>
-% --------------------------------------------------------------------------
+% ----------------------------------------------------------------------
 \message{Swedish hyphenation patterns, Jan Michael Rynning, 1994-03-03.}
 {
 % Set \catcode, \uccode, and \lccode for the Swedish letters.
@@ -4755,3 +4758,12 @@ z4zin
 }
 }
 
+% ======================================================================
+% Editor settings
+% ======================================================================
+%
+% Local Variables:
+% mode: tex
+% fill-column: 72
+% End:
+% vim: set filetype=tex textwidth=72:
index 86e113cf4c2a7ec6b643799b10f04dcaf0c24126..770c171b0abf4eec26a5fd130c65d859a9616c79 100644 (file)
@@ -1,7 +1,7 @@
 % The Plain TeX hyphenation tables [NOT TO BE CHANGED IN ANY WAY!]
-% Unlimited copying and redistribution of this file are permitted as long
-% as this file is not modified. Modifications are permitted, but only if
-% the resulting file is not named hyphen.tex.
+% Unlimited copying and redistribution of this file are permitted as
+% long as this file is not modified.  Modifications are permitted, but
+% only if the resulting file is not named hyphen.tex.
 \patterns{ % just type <return> if you're not using INITEX
 .ach4
 .ad4der
@@ -4467,3 +4467,12 @@ ref-or-ma-tion
 ret-ri-bu-tion
 ta-ble
 }
+% ======================================================================
+% Editor settings
+% ======================================================================
+%
+% Local Variables:
+% mode: tex
+% fill-column: 72
+% End:
+% vim: set filetype=tex textwidth=72:
index dc8a711a872959ab41d30edd5cea3cec82229fdd..ed3223927487b39a4c70a1df892afc89a2be6126 100644 (file)
   úhlo-pøíè-ky
 }
 
-%%% Local Variables:
-%%% mode: tex
-%%% coding: latin-2
-%%% End:
+% ======================================================================
+% Editor settings
+% ======================================================================
+%
+% Local Variables:
+% mode: tex
+% coding: latin-2
+% fill-column: 72
+% End:
+% vim: set filetype=tex textwidth=72:
diff --git a/tmac/hyphenex.det b/tmac/hyphenex.det
deleted file mode 100644 (file)
index c74eeba..0000000
+++ /dev/null
@@ -1,3838 +0,0 @@
-% dehyphtex.tex
-%
-% Errata für dehypht.tex 1999-03-03
-%
-% kompiliert 2006-01-28
-%
-% Copyright (C) 2005, 2006 Werner Lemberg <wl@gnu.org>
-%
-% This program can be redistributed and/or modified under the terms
-% of the LaTeX Project Public License Distributed from CTAN
-% archives in directory macros/latex/base/lppl.txt; either
-% version 1 of the License, or any later version.
-%
-%
-% Achtung: Diese Datei muß *nach* german.sty geladen werden!
-% Attention: This file must be loaded *after* german.sty!
-%
-% In web2c-basierten TeX-Implementationen ist es notwendig, die
-% Variable `hyph_size' (in texmf.cnf) auf einen größeren Wert wie
-% z.B. 5000 zu setzen, um einen Kapazitätsüberlauf der
-% Trennstellenausnahmen zu vermeiden.
-% Web2c based TeX implementations need to increase the value of
-% `hyph_size' (in texmf.cnf) to, say, 5000 to avoid an overflow
-% of TeX's exception dictionary.
-%
-
-\begingroup
-
-\catcode `\ä=11 \catcode `\Ä=11
-\catcode `\ö=11 \catcode `\Ö=11
-\catcode `\ü=11 \catcode `\Ü=11
-\catcode `\^^ff=11 \catcode `\^^Y=11 % ß
-
-\lccode `\Ä=`\ä \lccode `\ä=`\ä
-\lccode `\Ö=`\ö \lccode `\ö=`\ö
-\lccode `\Ü=`\ü \lccode `\ü=`\ü
-\lccode `\^^ff=`\^^ff \lccode `\^^Y=`\^^Y
-
-\hyphenation{
-%
-%
-% falsche Trennungen einfacher Wörter
-%
-  Aa-les % Aal-es
-  Af-gha-nin-nen % Af-ghan-in-nen
-  ag-gres-si-ve-rem % ag-gres-si-ver-em
-  ag-gres-si-ve-ren % ag-gres-si-ver-en
-  ag-gres-si-ve-rer % ag-gres-si-ver-er
-  ag-gres-si-ve-res % ag-gres-si-ver-es
-  AIDS % AI-DS
-  ak-ti-ve-rem % ak-ti-ver-em
-  ak-ti-ve-ren % ak-ti-ver-en
-  ak-ti-ve-rer % ak-ti-ver-er
-  ak-ti-ve-res % ak-ti-ver-es
-  ak-tu-el-le-rer % ak-tu-el-ler-er
-  ak-zep-ta-ble-rer % ak-zep-ta-bler-er
-  Ale-man-nin-nen % Ale-mann-in-nen
-  Al-ler-gie % All-er-gie
-  Al-ler-gi-en % All-er-gi-en
-  al-ler-gisch % all-er-gisch
-  al-ler-gi-sche % all-er-gi-sche
-  al-ler-gi-schem % all-er-gi-schem
-  al-ler-gi-schen % all-er-gi-schen
-  al-ler-gi-scher % all-er-gi-scher
-  al-ler-gi-sches % all-er-gi-sches
-  Al-ma-na-chen % Al-ma-nach-en
-  am-bi-tiö-se % am-bi-ti-öse
-  am-bi-tiö-sem % am-bi-ti-ösem
-  am-bi-tiö-sen % am-bi-ti-ösen
-  am-bi-tiö-ser % am-bi-ti-öser
-  am-bi-tiö-ses % am-bi-ti-öses
-  Ana-lo-gons % Ana-lo-g-ons
-  ang-le % an-gle
-  An-gli-zis-men % An-g-li-zis-men
-  An-gli-zis-mus % An-g-li-zis-mus
-  ano-mal % an-omal
-  ano-ma-le % an-oma-le
-  ano-ma-lem % an-oma-lem
-  ano-ma-len % an-oma-len
-  ano-ma-ler % an-oma-ler
-  ano-ma-le-re % an-oma-le-re
-  ano-ma-le-rem % an-oma-le-rem
-  ano-ma-le-ren % an-oma-le-ren
-  ano-ma-le-rer % an-oma-ler-er
-  ano-ma-le-res % an-oma-le-res
-  ano-ma-les % an-oma-les
-  Ano-ma-lie % An-oma-lie
-  Ano-ma-li-en % An-oma-li-en
-  ano-mal-ste % an-omal-ste
-  ano-mal-stem % an-omal-stem
-  ano-mal-sten % an-omal-sten
-  ano-mal-ster % an-omal-ster
-  ano-mal-stes % an-omal-stes
-  An-thro-po-ide % An-thro-poi-de
-  An-thro-po-iden % An-thro-poi-den
-  Ar-gons % Ar-g-ons
-  ASCII % AS-CII
-  As-sem-bler % As-sem-b-ler
-  As-sem-blern % As-sem-b-lern
-  As-sem-blers % As-sem-b-lers
-  as-sem-blie-re % as-sem-b-lie-re
-  as-sem-blie-ren % as-sem-b-lie-ren
-  as-sem-blie-rend % as-sem-b-lie-rend
-  as-sem-blie-ren-de % as-sem-b-lie-ren-de
-  as-sem-blie-ren-dem % as-sem-b-lie-ren-dem
-  as-sem-blie-ren-den % as-sem-b-lie-ren-den
-  as-sem-blie-ren-der % as-sem-b-lie-ren-der
-  as-sem-blie-ren-des % as-sem-b-lie-ren-des
-  as-sem-blierst % as-sem-b-lierst
-  as-sem-bliert % as-sem-b-liert
-  as-sem-blier-te % as-sem-b-lier-te
-  as-sem-blier-tem % as-sem-b-lier-tem
-  as-sem-blier-ten % as-sem-b-lier-ten
-  as-sem-blier-ter % as-sem-b-lier-ter
-  as-sem-blier-tes % as-sem-b-lier-tes
-  as-sem-blier-test % as-sem-b-lier-test
-  as-sem-blier-tet % as-sem-b-lier-tet
-  Aste-ro-iden % Aste-roi-den
-  at-trak-ti-ve-rem % at-trak-ti-ver-em
-  at-trak-ti-ve-ren % at-trak-ti-ver-en
-  at-trak-ti-ve-rer % at-trak-ti-ver-er
-  at-trak-ti-ve-res % at-trak-ti-ver-es
-  auf-kremp-le % auf-krem-ple
-  auf-munt-re % auf-mun-tre
-  auf-wieg-le % auf-wie-gle
-  Aut-op-sie % Au-top-sie
-  Aut-op-si-en % Au-top-si-en
-  au-to-ri-tä-rem % au-to-ri-tär-em
-  au-to-ri-tä-ren % au-to-ri-tär-en
-  au-to-ri-tä-rer % au-to-ri-tär-er
-  au-to-ri-tä-res % au-to-ri-tär-es
-  Ba-ro-nin-nen % Ba-ron-in-nen
-  Base-ball % Ba-se-ball
-  Bea-mer % Be-a-mer
-  Bea-mern % Be-a-mern
-  Bea-mers % Be-a-mers
-  bech-re % be-ch-re
-  Bie-ren % Bier-en
-  Bie-res % Bier-es
-  Bis-tü-mer % Bi-stü-mer
-  Bis-tü-mern % Bi-stü-mern
-  bla-ma-ble-rer % bla-ma-bler-er
-  blätt-re % blät-tre
-  brei-ige % breii-ge
-  brei-igem % breii-gem
-  brei-igen % breii-gen
-  brei-iger % breii-ger
-  brei-iges % breii-ges
-  Bro-ten % Bro-t-en
-  Bro-tes % Bro-t-es
-  brü-ste-te % brüs-te-te
-  brü-ste-ten % brüs-te-ten
-  brü-ste-test % brüs-te-test
-  brü-ste-tet % brüs-te-tet
-  bru-ta-le-rer % bru-ta-ler-er
-  büg-le % bü-g-le
-  bükst % bü-kst
-  bükt % bü-kt
-  butt-re % but-tre
-  Bytes % By-tes
-  chart-re % char-tre
-  Che-fin-nen % Chef-in-nen
-  chif-frier % chif-fri-er
-  Chi-nins % Chin-ins
-  Cho-le-ste-rins % Cho-le-ste-r-ins
-  Ci-nea-sten % Ci-ne-a-sten
-  ci-nea-stisch % ci-ne-a-stisch
-  ci-nea-sti-sche % ci-ne-a-sti-sche
-  ci-nea-sti-schem % ci-ne-a-sti-schem
-  ci-nea-sti-schen % ci-ne-a-sti-schen
-  ci-nea-sti-scher % ci-ne-a-sti-scher
-  ci-nea-sti-sches % ci-ne-a-sti-sches
-  cle-ve-rem % cle-ver-em
-  cle-ve-rer % cle-ver-er
-  cle-ve-res % cle-ver-es
-  Code % Co-de
-  Codes % Co-des
-  Cou-sins % Cous-ins
-  Deal % De-al
-  dealt % de-alt
-  deal-te % de-al-te
-  deal-ten % de-al-ten
-  deal-test % de-al-test
-  deal-tet % de-al-tet
-  de-fi-zi-tä-rem % de-fi-zi-tär-em
-  de-fi-zi-tä-ren % de-fi-zi-tär-en
-  de-fi-zi-tä-rer % de-fi-zi-tär-er
-  de-fi-zi-tä-res % de-fi-zi-tär-es
-  De-ka-nin-nen % De-kan-in-nen
-  De-sign-er % De-si-gner
-  De-sign-erin % De-si-gne-rin
-  De-sign-erin-nen % De-si-gne-rin-nen
-  De-sign-ern % De-si-gnern
-  De-sign-ers % De-si-gners
-  De-signs % De-si-gns
-  des-il-lu-sio-nier % des-il-lu-sio-ni-er
-  de-struk-ti-ve-rem % de-struk-ti-ver-em
-  de-struk-ti-ve-ren % de-struk-ti-ver-en
-  de-struk-ti-ve-rer % de-struk-ti-ver-er
-  de-struk-ti-ve-res % de-struk-ti-ver-es
-  De-vons % De-v-ons
-  dick-ste % dicks-te
-  dick-stem % dicks-tem
-  dick-sten % dicks-ten
-  dick-ster % dicks-ter
-  dick-stes % dicks-tes
-  Diö-ze-san % Di-öze-san
-  Diö-ze-sa-ne % Di-öze-sa-ne
-  Diö-ze-sa-nen % Di-öze-sa-nen
-  Diö-ze-sans % Di-özes-ans
-  Diö-ze-se % Di-öze-se
-  Diö-ze-sen % Di-öze-sen
-  dö-ste % dös-te
-  dö-sten % dös-ten
-  dö-stest % dös-test
-  dö-stet % dös-tet
-  dräng-le % drän-g-le
-  dribb-le % drib-ble
-  Drückers % Drück-ers
-  dunk-le-rer % dunk-ler-er
-  ed-le-rer % ed-ler-er
-  ef-fek-ti-ve-rem % ef-fek-ti-ver-em
-  ef-fek-ti-ve-ren % ef-fek-ti-ver-en
-  ef-fek-ti-ve-rer % ef-fek-ti-ver-er
-  ef-fek-ti-ve-res % ef-fek-ti-ver-es
-  ega-li-tä-rem % ega-li-tär-em
-  ega-li-tä-ren % ega-li-tär-en
-  ega-li-tä-rer % ega-li-tär-er
-  ega-li-tä-res % ega-li-tär-es
-  Ego-isten % Egoi-sten
-  Ego-istin % Egoi-stin
-  Ego-istin-nen % Egoi-stin-nen
-  ego-istisch % egoi-stisch
-  ego-isti-sche % egoi-sti-sche
-  ego-isti-schem % egoi-sti-schem
-  ego-isti-schen % egoi-sti-schen
-  ego-isti-scher % egoi-sti-scher
-  ego-isti-sches % egoi-sti-sches
-  eif-re % ei-fre
-  ein-bürg-re % ein-bür-g-re
-  ein-ei-ige % ein-eii-ge
-  ein-ei-igem % ein-eii-gem
-  ein-ei-igen % ein-eii-gen
-  ein-ei-iger % ein-eii-ger
-  ein-ei-iges % ein-eii-ges
-  eit-le-rer % eit-ler-er
-  eli-tä-rem % eli-tär-em
-  eli-tä-ren % eli-tär-en
-  eli-tä-rer % eli-tär-er
-  eli-tä-res % eli-tär-es
-  emo-tio-na-le-rer % emo-tio-na-ler-er
-  emo-tio-nel-le-rer % emo-tio-nel-ler-er
-  er-lernst % er-l-ernst
-  ex-klu-si-ve-rem % ex-klu-si-ver-em
-  ex-klu-si-ve-ren % ex-klu-si-ver-en
-  ex-klu-si-ve-rer % ex-klu-si-ver-er
-  ex-klu-si-ve-res % ex-klu-si-ver-es
-  ex-pan-si-ve-rem % ex-pan-si-ver-em
-  ex-pan-si-ve-ren % ex-pan-si-ver-en
-  ex-pan-si-ve-rer % ex-pan-si-ver-er
-  ex-pan-si-ve-res % ex-pan-si-ver-es
-  ex-plo-si-ve-rem % ex-plo-si-ver-em
-  ex-plo-si-ve-ren % ex-plo-si-ver-en
-  ex-plo-si-ve-rer % ex-plo-si-ver-er
-  ex-plo-si-ve-res % ex-plo-si-ver-es
-  ex-zes-si-ve-rem % ex-zes-si-ver-em
-  ex-zes-si-ve-ren % ex-zes-si-ver-en
-  ex-zes-si-ve-rer % ex-zes-si-ver-er
-  ex-zes-si-ve-res % ex-zes-si-ver-es
-  fäch-le % fä-chle
-  fäch-re % fä-ch-re
-  fah-le-rer % fah-ler-er
-  fa-mi-liä-re % fa-mi-li-äre
-  fa-mi-liä-rem % fa-mi-li-ärem
-  fa-mi-liä-ren % fa-mi-li-ären
-  fa-mi-liä-rer % fa-mi-li-ärer
-  fa-mi-liä-re-re % fa-mi-li-äre-re
-  fa-mi-liä-re-rem % fa-mi-li-äre-rem
-  fa-mi-liä-re-ren % fa-mi-li-äre-ren
-  fa-mi-liä-re-rer % fa-mi-li-äre-rer
-  fa-mi-liä-re-res % fa-mi-li-äre-res
-  fa-mi-liä-res % fa-mi-li-äres
-  Fa-sans % Fas-ans
-  fau-le-rer % fau-ler-er
-  Fea-tures % Fea-tu-res
-  Fer-nan-do % Fer-n-an-do
-  Fer-nan-dos % Fer-n-an-dos
-  feu-da-le-rer % feu-da-ler-er
-  Feuille-ton % Feuil-le-ton
-  Feuille-tons % Feuil-le-tons
-  fi-de-le-rer % fi-de-ler-er
-  fieb-rig % fie-brig
-  fieb-ri-ge % fie-bri-ge
-  fieb-ri-gem % fie-bri-gem
-  fieb-ri-gen % fie-bri-gen
-  fieb-ri-ger % fie-bri-ger
-  fieb-ri-ges % fie-bri-ges
-  File % Fi-le
-  Files % Fi-les
-  filt-re % fil-tre
-  finst-re % fin-stre
-  flatt-re % flat-tre
-  flaue-rem % flau-e-rem
-  flaue-res % flau-e-res
-  fle-xi-ble-rer % fle-xibler-er
-  flö^^fft % flö-^^fft
-  flö^^ff-ten % flö-^^fften
-  flö^^ff-test % flö-^^fftest
-  flö^^ff-tet % flö-^^fftet
-  Flu-ges % Flug-es
-  flunk-re % flun-k-re
-  folg-re % fol-g-re
-  folt-re % fol-tre
-  for-ma-le-rer % for-ma-ler-er
-  for-mel-ler-er % for-mel-ler-er
-  Fou-rier % Fou-ri-er
-  Fou-riers % Fou-ri-ers
-  frä-ste % fräs-te
-  frä-sten % fräs-ten
-  frä-stest % fräs-test
-  frä-stet % fräs-tet
-  Freak % Fre-ak
-  Freaks % Fre-aks
-  freie-ste % frei-e-ste
-  funkst % funk-st
-  futt-re % fut-tre
-  Gan-dhi % Gand-hi
-  Gan-dhis % Gand-his
-  gäng-le % gän-g-le
-  Gar-ni-so-nen % Gar-ni-so-n-en
-  Gate-way % Ga-te-way
-  Gate-ways % Ga-te-ways
-  Gaulles % Gaul-les
-  ge-dop-ter % ge-do-pter
-  ge-döst % ge-d-öst
-  ge-eggt % ge-e-ggt
-  ge-egg-ten % ge-e-gg-ten
-  ge-frä-ste % ge-fräs-te
-  ge-frä-stem % ge-fräs-tem
-  ge-frä-sten % ge-fräs-ten
-  ge-frä-ster % ge-fräs-ter
-  ge-frä-stes % ge-fräs-tes
-  Ge-hir-nen % Ge-hir-n-en
-  gei-le-rer % gei-ler-er
-  ge-kne-belt % ge-k-ne-belt
-  ge-kne-bel-te % ge-k-ne-bel-te
-  ge-kne-bel-tem % ge-k-ne-bel-tem
-  ge-kne-bel-ten % ge-k-ne-bel-ten
-  ge-kne-bel-ter % ge-k-ne-bel-ter
-  ge-kne-bel-tes % ge-k-ne-bel-tes
-  ge-kneift % ge-k-neift
-  ge-kne-tet % ge-k-ne-tet
-  ge-kne-te-te % ge-k-ne-te-te
-  ge-kne-te-tem % ge-k-ne-te-tem
-  ge-kne-te-ten % ge-k-ne-te-ten
-  ge-kne-te-ter % ge-k-ne-te-ter
-  ge-kne-te-tes % ge-k-ne-te-tes
-  ge-lobst % ge-l-obst
-  ge-lü-ste-te % ge-lüs-te-te
-  ge-lü-ste-ten % ge-lüs-te-ten
-  ge-lü-ste-test % ge-lüs-te-test
-  ge-lü-ste-tet % ge-lüs-te-tet
-  ge-naue-rem % ge-nau-e-rem
-  ge-naue-res % ge-nau-e-res
-  ge-neckt % gen-eckt
-  ge-neck-te % gen-eck-te
-  ge-neck-tem % gen-eck-tem
-  ge-neck-ten % gen-eck-ten
-  ge-neck-ter % gen-eck-ter
-  ge-neck-tes % gen-eck-tes
-  ge-ne-rel-le-rer % ge-ne-rel-ler-er
-  ge-nia-le-rer % ge-nia-ler-er
-  ge-nui-ne % ge-nu-i-ne
-  ge-reckt % ge-r-eckt
-  ge-rü-ste-te % ge-rüs-te-te
-  ge-rü-ste-tem % ge-rüs-te-tem
-  ge-rü-ste-ten % ge-rüs-te-ten
-  ge-rü-ste-ter % ge-rüs-te-ter
-  ge-rü-ste-tes % ge-rüs-te-tes
-  ge-schah % ge-sch-ah
-  ge-scha-hen % ge-sch-a-hen
-  ge-sche-he % ge-sch-ehe
-  ge-schneuzt % ge-sch-neuzt
-  ge-schrien % ge-schri-en
-  ge-spei-set % ge-speis-et
-  ge-spei-ste % ge-speis-te
-  ge-spei-stem % ge-speis-tem
-  ge-spei-sten % ge-speis-ten
-  ge-spei-ster % ge-speis-ter
-  ge-spei-stes % ge-speis-tes
-  ge-starrt % ge-st-arrt
-  ge-star-tet % ge-st-ar-tet
-  ge-star-te-te % ge-st-ar-te-te
-  ge-star-te-tem % ge-st-ar-te-tem
-  ge-star-te-ten % ge-st-ar-te-ten
-  ge-star-te-ter % ge-st-ar-te-ter
-  ge-star-te-tes % ge-st-ar-te-tes
-  ge-streun-ter % ge-stre-un-ter
-  ge-trig-gert % get-rig-gert
-  ge-wich-ste % ge-wichs-te
-  ge-wich-stem % ge-wichs-tem
-  ge-wich-sten % ge-wichs-ten
-  ge-wich-ster % ge-wichs-ter
-  ge-wich-stes % ge-wichs-tes
-  Glan-zes % Glanz-es
-  gra-ste % gras-te
-  gra-sten % gras-ten
-  gra-stest % gras-test
-  gra-stet % gras-tet
-  gra-ziö-se % gra-zi-öse
-  gra-ziö-sem % gra-zi-ösem
-  gra-ziö-sen % gra-zi-ösen
-  gra-ziö-ser % gra-zi-öser
-  gra-ziö-ses % gra-zi-öses
-  grüb-le % grü-b-le
-  gurg-le % gur-gle
-  hag-le % ha-gle
-  hal-bem % hal-b-em
-  hal-ben % hal-b-en
-  hal-bes % hal-b-es
-  halft-re % half-tre
-  hap-re % ha-p-re
-  Hard-ware % Hard-wa-re
-  heb-le % he-ble
-  heik-le % hei-kle
-  heik-lem % hei-klem
-  heik-le-re % hei-kle-re
-  heik-le-rem % hei-kle-rem
-  heik-le-ren % hei-kle-ren
-  heik-le-rer % hei-kler-er
-  heik-le-res % hei-kle-res
-  heik-les % hei-kles
-  hei-le-rer % hei-ler-er
-  hel-le-rer % hel-ler-er
-  her-in-nen % he-rin-nen
-  Her-me-lins % Her-mel-ins
-  he-ro-ische % he-ro-i-sche
-  he-ro-ischem % he-ro-i-schem
-  he-ro-ischen % he-ro-i-schen
-  he-ro-ischer % he-ro-i-scher
-  he-ro-isches % he-ro-i-sches
-  High-tech % Hight-ech
-  hingst % hin-gst
-  hingt % hin-gt
-  hinkst % hin-kst
-  hinkt % hin-kt
-  hink-te % hin-k-te
-  hink-ten % hin-k-ten
-  hink-test % hin-k-test
-  hink-tet % hin-k-tet
-  Hir-nen % Hir-n-en
-  Hitch-cock % Hit-ch-cock
-  Hitch-cocks % Hit-ch-cocks
-  hob-le % ho-ble
-  hoh-le-rem % hohl-e-rem
-  hoh-le-rer % hohler-er
-  hoh-le-res % hohl-e-res
-  holp-re % hol-p-re
-  Hom-mage % Hom-ma-ge
-  Hot-line % Hot-li-ne
-  Hot-lines % Hot-li-nes
-  hu-ma-ni-tä-rem % hu-ma-ni-tär-em
-  hu-ma-ni-tä-ren % hu-ma-ni-tär-en
-  hu-ma-ni-tä-rer % hu-ma-ni-tär-er
-  hu-ma-ni-tä-res % hu-ma-ni-tär-es
-  hu-man-ste % hum-an-ste
-  hu-man-stem % hum-an-stem
-  hu-man-sten % hum-an-sten
-  hu-man-ster % hum-an-ster
-  hu-man-stes % hum-an-stes
-  hump-le % hum-ple
-  hung-re % hun-g-re
-  idea-le-rer % idea-ler-er
-  ide-el-le-rer % ide-el-ler-er
-  il-lu-stre % il-lust-re
-  il-lu-strem % il-lust-rem
-  il-lu-stren % il-lust-ren
-  il-lu-strer % il-lust-rer
-  il-lu-stres % il-lust-res
-  imk-re % im-kre
-  im-pul-si-ve-rem % im-pul-si-ver-em
-  im-pul-si-ve-ren % im-pul-si-ver-en
-  im-pul-si-ve-rer % im-pul-si-ver-er
-  im-pul-si-ve-res % im-pul-si-ver-es
-  in-di-vi-du-el-le-rer % in-di-vi-du-el-ler-er
-  In-do-ne-sie-rin % In-do-ne-si-e-rin
-  In-do-ne-sie-rin-nen % In-do-ne-si-e-rin-nen
-  in-ten-si-ve-rem % in-ten-si-ver-em
-  in-ten-si-ve-ren % in-ten-si-ver-en
-  in-ten-si-ve-rer % in-ten-si-ver-er
-  in-ten-si-ve-res % in-ten-si-ver-es
-  Isaacs % Isaa-cs
-  Ita-lie-ne-rin % Ita-li-e-ne-rin
-  Ita-lie-ne-rin-nen % Ita-li-e-ne-rin-nen
-  Ita-lie-nern % Ita-li-e-nern
-  Ita-lie-ners % Ita-li-e-ners
-  Jag-den % Jag-d-en
-  Jar-gons % Jar-g-ons
-  Je-re-mia-de % Je-re-mi-a-de
-  Je-re-mia-den % Je-re-mi-a-den
-  Jon-gleur % Jong-leur
-  Jo-sephs % Jo-se-phs
-  jub-le % ju-ble
-  kabb-le % kab-ble
-  kab-le % ka-ble
-  Ka-na-die-rin % Ka-na-di-e-rin
-  Ka-na-die-rin-nen % Ka-na-di-e-rin-nen
-  Ka-nons % Ka-n-ons
-  Ka-pi-tä-nin-nen % Ka-pi-tän-in-nen
-  ka-pri-ziö-se % ka-pri-zi-öse
-  ka-pri-ziö-sem % ka-pri-zi-ösem
-  ka-pri-ziö-sen % ka-pri-zi-ösen
-  ka-pri-ziö-ser % ka-pri-zi-öser
-  ka-pri-ziö-se-re % ka-pri-zi-öse-re
-  ka-pri-ziö-se-rem % ka-pri-zi-öse-rem
-  ka-pri-ziö-se-ren % ka-pri-zi-öse-ren
-  ka-pri-ziö-se-rer % ka-pri-zi-öse-rer
-  ka-pri-ziö-se-res % ka-pri-zi-öse-res
-  ka-pri-ziö-ses % ka-pri-zi-öses
-  ka-pri-ziö-se-ste % ka-pri-zi-öse-ste
-  ka-pri-ziö-se-stem % ka-pri-zi-öse-stem
-  ka-pri-ziö-se-sten % ka-pri-zi-öse-sten
-  ka-pri-ziö-se-ster % ka-pri-zi-öse-ster
-  ka-pri-ziö-se-stes % ka-pri-zi-öse-stes
-  ka-ri-ka-ti-ve-rem % ka-ri-ka-ti-ver-em
-  ka-ri-ka-ti-ve-ren % ka-ri-ka-ti-ver-en
-  ka-ri-ka-ti-ve-res % ka-ri-ka-ti-ver-es
-  ka-riö-se % ka-ri-öse
-  ka-riö-sem % ka-ri-ösem
-  ka-riö-sen % ka-ri-ösen
-  ka-riö-ser % ka-ri-öser
-  ka-riö-ses % ka-ri-öses
-  ka-ri-ta-ti-ve-rem % ka-ri-ta-ti-ver-em
-  ka-ri-ta-ti-ve-ren % ka-ri-ta-ti-ver-en
-  ka-ri-ta-ti-ve-rer % ka-ri-ta-ti-ver-er
-  ka-ri-ta-ti-ve-res % ka-ri-ta-ti-ver-es
-  Ka-tar-rhe % Ka-tarr-he
-  Ka-tar-rhen % Ka-tarr-hen
-  Ka-tarrhs % Ka-tarr-hs
-  ka-ta-stro-pha-le-rer % ka-ta-stro-pha-ler-er
-  Kath-rin % Ka-thrin
-  Kath-rins % Ka-thrins
-  Kat-rin % Ka-trin
-  Kat-rins % Ka-trins
-  keg-le % ke-gle
-  kelt-re % kel-tre
-  kent-re % ken-tre
-  Khmer % Kh-mer
-  Ki-osks % Ki-o-sks
-  klimp-re % klim-p-re
-  kling-le % klin-gle
-  knabb-re % knab-b-re
-  knatt-re % knat-tre
-  kneb-le % kne-ble
-  knien % kni-en
-  knist-re % kni-stre
-  knob-le % kno-ble
-  kol-le-gia-le-rer % kol-le-gia-ler-er
-  kom-for-ta-ble-rer % kom-for-ta-bler-er
-  kom-mer-zi-el-le-rer % kom-mer-zi-el-ler-er
-  Kom-mi-li-to-nin-nen % Kom-mi-li-ton-in-nen
-  kon-ser-va-ti-ve-rem % kon-ser-va-ti-ver-em
-  kon-ser-va-ti-ve-ren % kon-ser-va-ti-ver-en
-  kon-ser-va-ti-ve-rer % kon-ser-va-ti-ver-er
-  kon-ser-va-ti-ve-res % kon-ser-va-ti-ver-es
-  kon-struk-ti-ve-rem % kon-struk-ti-ver-em
-  kon-struk-ti-ve-ren % kon-struk-ti-ver-en
-  kon-struk-ti-ve-rer % kon-struk-ti-ver-er
-  kon-struk-ti-ve-res % kon-struk-ti-ver-es
-  Kon-ter-feis % Kon-ter-f-eis
-  Kon-ti-nents % Kon-tin-ents
-  kont-re % kon-tre
-  Kop-fes % Kopf-es
-  Ko-reas % Ko-re-as
-  kor-re-lie-rend % kor-re-li-e-rend
-  kor-re-lie-ren-de % kor-re-li-e-ren-de
-  kor-re-lie-ren-dem % kor-re-li-e-ren-dem
-  kor-re-lie-ren-den % kor-re-li-e-ren-den
-  kor-re-lie-ren-der % kor-re-li-e-ren-der
-  kor-re-lie-ren-des % kor-re-li-e-ren-des
-  krabb-le % krab-ble
-  krea-ti-ve-rem % krea-ti-ver-em
-  krea-ti-ve-ren % krea-ti-ver-en
-  krea-ti-ve-rer % krea-ti-ver-er
-  krea-ti-ve-res % krea-ti-ver-es
-  kre-ierst % kre-i-erst
-  kre-iert % kre-i-ert
-  kre-ier-te % kre-i-er-te
-  kre-ier-tem % kre-i-er-tem
-  kre-ier-ten % kre-i-er-ten
-  kre-ier-ter % kre-i-er-ter
-  kre-ier-tes % kre-i-er-tes
-  kre-ier-test % kre-i-er-test
-  kre-ier-tet % kre-i-er-tet
-  kribb-le % krib-ble
-  kri-mi-nel-le-rer % kri-mi-nel-ler-er
-  Krish-na % Kris-h-na
-  Krish-nas % Kris-hnas
-  ku-bier % ku-bi-er
-  kug-le % ku-gle
-  küh-le-rer % küh-ler-er
-  kul-tu-rel-le-rer % kul-tu-rel-ler-er
-  Kum-pa-nin-nen % Kum-pan-in-nen
-  kurb-le % kur-ble
-  Ku-rier % Ku-ri-er
-  Ku-riers % Ku-ri-ers
-  kur-zem % kur-z-em
-  kur-zen % kur-z-en
-  kur-zer % kur-z-er
-  kur-zes % kur-z-es
-  la-bi-le-rer % la-bi-ler-er
-  lag-re % la-g-re
-  laue-rem % lau-e-rem
-  laue-res % lau-e-res
-  läut-re % läu-tre
-  le-ga-le-rer % le-ga-ler-er
-  Le-nins % Len-ins
-  Len-nons % Len-n-ons
-  Le-se-rin-nen % Le-se-r-in-nen
-  li-be-ra-le-rer % li-be-ra-ler-er
-  lief-re % lie-fre
-  Lis-sa-bons % Lis-sa-b-ons
-  Lob-by-isten % Lob-by-i-sten
-  Log-in % Lo-gin
-  Lon-dons % Lon-d-ons
-  lö-ste % lös-te
-  lö-sten % lös-ten
-  lö-stest % lös-test
-  lö-stet % lös-tet
-  loy-ale % loya-le
-  loy-alem % loya-lem
-  loy-alen % loya-len
-  loy-aler % loya-ler
-  loy-ales % loya-les
-  lu-kra-ti-ve-rem % lu-kra-ti-ver-em
-  lu-kra-ti-ve-ren % lu-kra-ti-ver-en
-  lu-kra-ti-ve-rer % lu-kra-ti-ver-er
-  lu-kra-ti-ve-res % lu-kra-ti-ver-es
-  Lu-nas % Lu-n-as
-  lung-re % lun-g-re
-  lu-xu-riö-se % lu-xu-ri-öse
-  lu-xu-riö-sem % lu-xu-ri-ösem
-  lu-xu-riö-sen % lu-xu-ri-ösen
-  lu-xu-riö-ser % lu-xu-ri-öser
-  lu-xu-riö-se-re % lu-xu-ri-öse-re
-  lu-xu-riö-se-rem % lu-xu-ri-öse-rem
-  lu-xu-riö-se-ren % lu-xu-ri-öse-ren
-  lu-xu-riö-se-rer % lu-xu-ri-öse-rer
-  lu-xu-riö-se-res % lu-xu-ri-öse-res
-  lu-xu-riö-ses % lu-xu-ri-öses
-  lu-xu-riö-se-ste % lu-xu-ri-öse-ste
-  lu-xu-riö-se-stem % lu-xu-ri-öse-stem
-  lu-xu-riö-se-sten % lu-xu-ri-öse-sten
-  lu-xu-riö-se-ster % lu-xu-ri-öse-ster
-  lu-xu-riö-se-stes % lu-xu-ri-öse-stes
-  ma-li-ziö-se % ma-li-zi-öse
-  ma-li-ziö-sem % ma-li-zi-ösem
-  ma-li-ziö-sen % ma-li-zi-ösen
-  ma-li-ziö-ser % ma-li-zi-öser
-  ma-li-ziö-ses % ma-li-zi-öses
-  Ma-nage-ment % Ma-na-ge-ment
-  Ma-nage-ments % Ma-na-ge-ments
-  mang-le % man-gle
-  ma-nua-le % ma-nu-a-le
-  Ma-nua-len % Ma-nu-a-len
-  Ma-ries % Ma-ri-es
-  mart-re % mar-tre
-  mas-si-ve-rem % mas-si-ver-em
-  mas-si-ve-ren % mas-si-ver-en
-  mas-si-ve-rer % mas-si-ver-er
-  mas-si-ve-res % mas-si-ver-es
-  Mat-thi-as % Matt-hi-as
-  me-lo-diö-se % me-lo-di-öse
-  me-lo-diö-sem % me-lo-di-ösem
-  me-lo-diö-sen % me-lo-di-ösen
-  me-lo-diö-ser % me-lo-di-öser
-  me-lo-diö-ses % me-lo-di-öses
-  meut-re % meu-tre
-  Mi-lans % Mi-l-ans
-  mi-no-ische % mi-no-i-sche
-  mi-no-ischem % mi-no-i-schem
-  mi-no-ischen % mi-no-i-schen
-  mi-no-ischer % mi-no-i-scher
-  mi-no-isches % mi-no-i-sches
-  mi-nu-tiö-se % mi-nu-ti-öse
-  mi-nu-tiö-sem % mi-nu-ti-ösem
-  mi-nu-tiö-sen % mi-nu-ti-ösen
-  mi-nu-tiö-ser % mi-nu-ti-öser
-  mi-nu-tiö-ses % mi-nu-ti-öses
-  mi-se-ra-ble-rer % mi-se-ra-bler-er
-  mitt-le-rer % mitt-ler-er
-  mo-bi-le-rer % mo-bi-ler-er
-  mo-dern-ste % mo-d-ern-ste
-  mo-dern-stem % mo-d-ern-stem
-  mo-dern-sten % mo-d-ern-sten
-  mo-dern-ster % mo-d-ern-ster
-  mo-dern-stes % mo-d-ern-stes
-  mog-le % mo-gle
-  mo-nu-men-ta-le-rer % mo-nu-men-ta-ler-er
-  Mor-phe-me % Mor-ph-e-me
-  Mor-phe-men % Mor-ph-e-men
-  Mo-sai-ke % Mo-sa-ike
-  Mo-sai-ken % Mo-sa-ik-en
-  mul-ti-ples % mul-tip-les
-  Mus-se-lins % Mus-sel-ins
-  my-ste-riö-se % my-ste-ri-öse
-  my-ste-riö-sem % my-ste-ri-ösem
-  my-ste-riö-sen % my-ste-ri-ösen
-  my-ste-riö-ser % my-ste-ri-öser
-  my-ste-riö-ses % my-ste-ri-öses
-  nag-le % na-gle
-  nai-ve-rem % nai-ver-em
-  nai-ve-ren % nai-ver-en
-  nai-ve-rer % nai-ver-er
-  nai-ve-res % nai-ver-es
-  ne-ga-ti-ve-rem % ne-ga-ti-ver-em
-  ne-ga-ti-ve-ren % ne-ga-ti-ver-en
-  ne-ga-ti-ve-rer % ne-ga-ti-ver-er
-  ne-ga-ti-ve-res % ne-ga-ti-ver-es
-  neue-rem % neu-e-rem
-  neue-res % neu-e-res
-  neun-ter % ne-un-ter
-  neu-tra-le-rer % neu-tra-ler-er
-  nie-ste % nies-te
-  nie-sten % nies-ten
-  nie-stest % nies-test
-  nie-stet % nies-tet
-  Ni-veaus % Ni-ve-aus
-  no-bler % no-b-ler
-  nörg-le % nör-gle
-  nor-ma-le-rer % nor-ma-ler-er
-  nüch-tern-ste % nüch-t-ern-ste
-  nüch-tern-stem % nüch-t-ern-stem
-  nüch-tern-sten % nüch-t-ern-sten
-  nüch-tern-ster % nüch-t-ern-ster
-  nüch-tern-stes % nüch-t-ern-stes
-  ob-jek-ti-ve-rem % ob-jek-ti-ver-em
-  ob-jek-ti-ve-ren % ob-jek-ti-ver-en
-  ob-jek-ti-ve-rer % ob-jek-ti-ver-er
-  ob-jek-ti-ve-res % ob-jek-ti-ver-es
-  Ob-stes % Obst-es
-  of-fi-zi-el-le-rer % of-fi-zi-el-ler-er
-  of-fi-ziö-se % of-fi-zi-öse
-  of-fi-ziö-sem % of-fi-zi-ösem
-  of-fi-ziö-sen % of-fi-zi-ösen
-  of-fi-ziö-ser % of-fi-zi-öser
-  of-fi-ziö-ses % of-fi-zi-öses
-  Ok-to-bers % Ok-t-obers
-  On-line % On-li-ne
-  Ozons % Oz-ons
-  Pa-blos % Pab-los
-  Pa-lä-sti-nen-se-rin-nen % Pa-lä-sti-nen-se-r-in-nen
-  Pa-lä-sti-nen-sers % Pa-lä-sti-nensers
-  pa-lav-re % pa-la-vre
-  pa-na-me-si-sche % pan-a-me-si-sche
-  pa-na-me-si-schen % pan-a-me-si-schen
-  Pa-ra-bo-lo-ide % Pa-ra-bo-loi-de
-  Pa-ra-bo-lo-iden % Pa-ra-bo-loi-den
-  Pa-ra-bo-lo-ides % Pa-ra-bo-loi-des
-  Pa-ra-do-xons % Pa-ra-do-x-ons
-  Pa-raf-fin % Par-af-fin
-  pa-ra-si-tä-rem % pa-ra-si-tär-em
-  pa-ra-si-tä-ren % pa-ra-si-tär-en
-  pa-ra-si-tä-rer % pa-ra-si-tär-er
-  pa-ra-si-tä-res % pa-ra-si-tär-es
-  Par-fums % Parf-ums
-  Par-terres % Par-ter-res
-  par-ti-el-le-rer % par-ti-el-ler-er
-  pas-si-ve-rem % pas-si-ver-em
-  pas-si-ve-ren % pas-si-ver-en
-  pas-si-ve-rer % pas-si-ver-er
-  pas-si-ve-res % pas-si-ver-es
-  Pen-ta-gons % Pen-ta-g-ons
-  Pent-house % Penthou-se
-  per-fid-ste % per-fi-dste
-  per-fid-stem % per-fi-dstem
-  per-fid-sten % per-fi-dsten
-  per-fid-ster % per-fi-dster
-  per-fid-stes % per-fi-dstes
-  Per-for-mance % Per-for-man-ce
-  Pe-rio-de % Pe-ri-ode
-  Pe-rio-den % Pe-ri-oden
-  pe-rio-disch % pe-ri-odisch
-  pe-rio-di-sche % pe-ri-odi-sche
-  pe-rio-di-schem % pe-ri-odi-schem
-  pe-rio-di-schen % pe-ri-odi-schen
-  pe-rio-di-scher % pe-ri-odi-scher
-  pe-rio-di-sches % pe-ri-odi-sches
-  Pe-rio-di-zi-tät % Pe-ri-odi-zi-tät
-  Per-se-rin-nen % Per-se-r-in-nen
-  pflast-re % pfla-stre
-  pilg-re % pil-g-re
-  Pipe-line % Pi-pe-li-ne
-  Pipe-lines % Pi-pe-li-nes
-  Plä-doyer % Plä-doy-er
-  Pla-ne-to-iden % Pla-ne-toi-den
-  Pla-teaus % Pla-te-aus
-  plätsch-re % plät-sch-re
-  plau-si-ble-rer % plau-si-bler-er
-  pok-re % po-k-re
-  polst-re % pol-stre
-  polt-re % pol-tre
-  Po-ly-gons % Po-ly-g-ons
-  Po-pe-line % Po-pe-li-ne
-  Porte-feuille % Por-te-feuil-le
-  Porte-feuilles % Por-te-feuil-les
-  Porte-mon-naie % Por-te-mon-naie
-  Porte-mon-naies % Por-te-mon-nai-es
-  po-si-ti-ve-rem % po-si-ti-ver-em
-  po-si-ti-ve-ren % po-si-ti-ver-en
-  po-si-ti-ve-rer % po-si-ti-ver-er
-  po-si-ti-ve-res % po-si-ti-ver-es
-  pos-ses-si-ve-rem % pos-ses-si-ver-em
-  pos-ses-si-ve-ren % pos-ses-si-ver-en
-  pos-ses-si-ve-rer % pos-ses-si-ver-er
-  pos-ses-si-ve-res % pos-ses-si-ver-es
-  prak-ti-ka-ble-rer % prak-ti-ka-bler-er
-  pral-le-rer % pral-ler-er
-  prä-mierst % prä-mi-erst
-  prä-miert % prä-mi-ert
-  prä-mier-te % prä-mi-er-te
-  prä-mier-tem % prä-mi-er-tem
-  prä-mier-ten % prä-mi-er-ten
-  prä-mier-ter % prä-mi-er-ter
-  prä-mier-tes % prä-mi-er-tes
-  prä-mier-test % prä-mi-er-test
-  prä-mier-tet % prä-mi-er-tet
-  prä-ten-tiö-se % prä-ten-ti-öse
-  prä-ten-tiö-sem % prä-ten-ti-ösem
-  prä-ten-tiö-sen % prä-ten-ti-ösen
-  prä-ten-tiö-ser % prä-ten-ti-öser
-  prä-ten-tiö-ses % prä-ten-ti-öses
-  pri-mi-ti-ve-rem % pri-mi-ti-ver-em
-  pri-mi-ti-ve-ren % pri-mi-ti-ver-en
-  pri-mi-ti-ve-rer % pri-mi-ti-ver-er
-  pri-mi-ti-ve-res % pri-mi-ti-ver-es
-  pro-duk-ti-ve-rem % pro-duk-ti-ver-em
-  pro-duk-ti-ve-ren % pro-duk-ti-ver-en
-  pro-duk-ti-ve-rer % pro-duk-ti-ver-er
-  pro-duk-ti-ve-res % pro-duk-ti-ver-es
-  pro-fi-ta-ble-rer % pro-fi-ta-bler-er
-  pro-gres-si-ve-rem % pro-gres-si-ver-em
-  pro-gres-si-ve-ren % pro-gres-si-ver-en
-  pro-gres-si-ve-rer % pro-gres-si-ver-er
-  pro-gres-si-ve-res % pro-gres-si-ver-es
-  pro-sai-sche % pro-sa-i-sche
-  pro-sai-schem % pro-sa-i-schem
-  pro-sai-schen % pro-sa-i-schen
-  pro-sai-scher % pro-sa-i-scher
-  pro-sai-sches % pro-sa-i-sches
-  Pro-tei-ne % Pro-te-i-ne
-  Pro-tei-nen % Pro-te-i-nen
-  pro-vo-ka-ti-ve-rem % pro-vo-ka-ti-ver-em
-  pro-vo-ka-ti-ve-ren % pro-vo-ka-ti-ver-en
-  pro-vo-ka-ti-ve-rer % pro-vo-ka-ti-ver-er
-  pro-vo-ka-ti-ve-res % pro-vo-ka-ti-ver-es
-  prüg-le % prü-g-le
-  Puz-zle % Puzz-le
-  Puz-zles % Puzz-les
-  ra-di-ka-le-rer % ra-di-ka-ler-er
-  Ra-dons % Ra-d-ons
-  räk-le % rä-kle
-  Ralphs % Ral-phs
-  ra-tio-nel-le-rer % ra-tio-nel-ler-er
-  ratt-re % rat-tre
-  Rau-mes % Raum-es
-  re-dun-dant % red-un-dant
-  re-dun-dan-te % red-un-dan-te
-  re-dun-dan-tem % red-un-dan-tem
-  re-dun-dan-ten % red-un-dan-ten
-  re-dun-dan-ter % red-un-dan-ter
-  re-dun-dan-tes % red-un-dan-tes
-  Re-dun-danz % Red-un-danz
-  Re-dun-dan-zen % Red-un-dan-zen
-  re-el-le-rer % re-el-ler-er
-  Re-gimes % Re-gi-mes
-  reg-le % re-gle
-  reich-ste % reichs-te
-  reich-stem % reichs-tem
-  reich-sten % reichs-ten
-  reich-ster % reichs-ter
-  reich-stes % reichs-tes
-  Re-kruts % Re-k-ruts
-  re-la-ti-ve-rem % re-la-ti-ver-em
-  re-la-ti-ve-ren % re-la-ti-ver-en
-  re-la-ti-ve-rer % re-la-ti-ver-er
-  re-la-ti-ve-res % re-la-ti-ver-es
-  re-li-giö-se % re-li-gi-öse
-  re-li-giö-sem % re-li-gi-ösem
-  re-li-giö-sen % re-li-gi-ösen
-  re-li-giö-ser % re-li-gi-öser
-  re-li-giö-ses % re-li-gi-öses
-  remp-le % rem-ple
-  ren-ta-ble-rer % ren-ta-bler-er
-  re-pres-si-ve-rem % re-pres-si-ver-em
-  re-pres-si-ve-ren % re-pres-si-ver-en
-  re-pres-si-ve-rer % re-pres-si-ver-er
-  re-pres-si-ve-res % re-pres-si-ver-es
-  re-spek-ta-ble-rer % re-spek-ta-bler-er
-  re-vo-lu-tio-nier % re-vo-lu-tio-ni-er
-  rülp-ste % rülps-te
-  rülp-sten % rülps-ten
-  rülp-stest % rülps-test
-  rülp-stet % rülps-tet
-  Ru-mä-nin-nen % Ru-män-in-nen
-  rü-ste-te % rüs-te-te
-  rü-ste-ten % rüs-te-ten
-  rü-ste-test % rüs-te-test
-  rü-ste-tet % rüs-te-tet
-  Saa-les % Saa-l-es
-  sabb-re % sab-b-re
-  sa-ni-tä-rem % sa-ni-tär-em
-  sa-ni-tä-ren % sa-ni-tär-en
-  sa-ni-tä-rer % sa-ni-tär-er
-  sa-ni-tä-res % sa-ni-tär-es
-  säub-re % säu-b-re
-  saue-res % sau-e-res
-  Sau-nas % Sau-n-as
-  Scha-fot-te % Schaf-ot-te
-  Scha-fot-ten % Schaf-ot-ten
-  schäk-re % schä-k-re
-  scha-le-rer % scha-ler-er
-  Schar-la-tans % Schar-la-t-ans
-  scheue-rem % scheu-e-rem
-  scheue-res % scheu-e-res
-  scheue-rest % scheu-e-rest
-  schien % schi-en
-  schlabb-re % schlab-bre
-  schlabb-rig % schlab-brig
-  schlabb-ri-ge % schlab-bri-ge
-  schlabb-ri-gem % schlab-bri-gem
-  schlabb-ri-gen % schlab-bri-gen
-  schlabb-ri-ger % schlab-bri-ger
-  schlabb-ri-ges % schlab-bri-ges
-  schläng-le % schlän-g-le
-  schlaue-rem % schlau-e-rem
-  schlaue-res % schlau-e-res
-  schlenk-re % schlen-k-re
-  schleu-ste % schleus-te
-  schleu-sten % schleus-ten
-  schleu-stest % schleus-test
-  schleu-stet % schleus-tet
-  schlitt-re % schlit-tre
-  Schlos-se-rin-nen % Schlos-se-r-in-nen
-  schmirg-le % schmir-gle
-  schmugg-le % schmug-gle
-  schnatt-re % schnat-tre
-  schnee-ig % schne-eig
-  schnee-ige % schne-ei-ge
-  schnee-igem % schne-ei-gem
-  schnee-igen % schne-ei-gen
-  schnee-iger % schne-ei-ger
-  schnee-iges % schne-ei-ges
-  schnel-le-rer % schnel-ler-er
-  schnieg-le % schnie-gle
-  Schreins % Schr-eins
-  schrien % schri-en
-  schril-le-rer % schril-ler-er
-  schüch-tern-ste % schüch-t-ern-ste
-  schüch-tern-stem % schüch-t-ern-stem
-  schüch-tern-sten % schüch-t-ern-sten
-  schüch-tern-ster % schüch-t-ern-ster
-  schüch-tern-stes % schüch-t-ern-stes
-  schwabb-le % schwab-ble
-  schwäng-re % schwän-g-re
-  schwär-mend % schwär-me-nd
-  schwär-men-de % schwär-me-n-de
-  schwär-men-dem % schwär-me-n-dem
-  schwär-men-den % schwär-me-n-den
-  schwär-men-der % schwär-me-n-der
-  schwär-men-des % schwär-me-n-des
-  Schwär-mern % Schwär-me-rn
-  Schwär-mers % Schwär-me-rs
-  Schwei-^^ffers % Schwei^^ff-ers
-  schwu-le-rer % schwu-ler-er
-  schwü-le-rer % schwü-ler-er
-  seg-le % se-gle
-  se-ni-le-rer % se-ni-ler-er
-  sen-si-ble-rer % sen-si-bler-er
-  sen-ten-ziö-se % sen-ten-zi-öse
-  sen-ten-ziö-sem % sen-ten-zi-ösem
-  sen-ten-ziö-sen % sen-ten-zi-ösen
-  sen-ten-ziö-ser % sen-ten-zi-öser
-  sen-ten-ziö-se-re % sen-ten-zi-öse-re
-  sen-ten-ziö-se-rem % sen-ten-zi-öse-rem
-  sen-ten-ziö-se-ren % sen-ten-zi-öse-ren
-  sen-ten-ziö-se-rer % sen-ten-zi-öse-rer
-  sen-ten-ziö-se-res % sen-ten-zi-öse-res
-  sen-ten-ziö-ses % sen-ten-zi-öses
-  sen-ten-ziö-se-ste % sen-ten-zi-öse-ste
-  sen-ten-ziö-se-stem % sen-ten-zi-öse-stem
-  sen-ten-ziö-se-sten % sen-ten-zi-öse-sten
-  sen-ten-ziö-se-ster % sen-ten-zi-öse-ster
-  sen-ten-ziö-se-stes % sen-ten-zi-öse-stes
-  sen-ti-men-ta-le-rer % sen-ti-men-ta-ler-er
-  se-riö-se % se-ri-öse
-  se-riö-sem % se-ri-ösem
-  se-riö-sen % se-ri-ösen
-  se-riö-ser % se-ri-öser
-  se-riö-se-re % se-ri-öse-re
-  se-riö-se-rem % se-ri-öse-rem
-  se-riö-se-ren % se-ri-öse-ren
-  se-riö-se-rer % se-ri-öse-rer
-  se-riö-se-res % se-ri-öse-res
-  se-riö-ses % se-ri-öses
-  se-riö-se-ste % se-ri-öse-ste
-  se-riö-se-stem % se-ri-öse-stem
-  se-riö-se-sten % se-ri-öse-sten
-  se-riö-se-ster % se-ri-öse-ster
-  se-riö-se-stes % se-ri-öse-stes
-  Se-riö-si-tät % Se-ri-ösi-tät
-  Se-rums % Ser-ums
-  ser-vi-le-rer % ser-vi-ler-er
-  sieg-le % sie-gle
-  sim-pler % simp-ler
-  sim-ple-re % simp-le-re
-  sim-ple-rem % simp-le-rem
-  sim-ple-ren % simp-le-ren
-  sim-ple-rer % simp-ler-er
-  sim-ple-res % simp-le-res
-  sim-ples % simp-les
-  sint-re % sin-tre
-  Skalps % Skal-ps
-  Skla-ve-rei-en % Skla-ver-ei-en
-  skur-ri-le-rer % skur-ri-ler-er
-  Soft-ware % Soft-wa-re
-  So-li-tä-ren % So-li-tär-en
-  so-zia-le-rer % so-zia-ler-er
-  spe-zia-le-rer % spe-zia-ler-er
-  spe-zi-el-le-rer % spe-zi-el-ler-er
-  spieg-le % spie-gle
-  Spio-nin-nen % Spion-in-nen
-  splitt-re % split-tre
-  spon-tan-ste % spon-t-an-ste
-  spon-tan-stem % spon-t-an-stem
-  spon-tan-sten % spon-t-an-sten
-  spon-tan-ster % spon-t-an-ster
-  spon-tan-stes % spon-t-an-stes
-  sta-bi-le-rer % sta-bi-ler-er
-  stahlst % stahl-st
-  stänk-re % stän-k-re
-  stei-le-rer % stei-ler-er
-  stemp-le % stem-ple
-  ster-be % st-er-be
-  ste-ri-le-rer % ste-ri-ler-er
-  Ste-ro-ide % Ste-roi-de
-  stil-le-rer % stil-ler-er
-  stöb-re % stö-b-re
-  stolp-re % stol-p-re
-  stramp-le % stram-ple
-  stra-pa-ziö-se % stra-pa-zi-öse
-  stra-pa-ziö-sem % stra-pa-zi-ösem
-  stra-pa-ziö-sen % stra-pa-zi-ösen
-  stra-pa-ziö-ser % stra-pa-zi-öser
-  stra-pa-ziö-ses % stra-pa-zi-öses
-  stup-ste % stups-te
-  stup-sten % stups-ten
-  stup-stest % stups-test
-  stup-stet % stups-tet
-  stu-rer % stur-er
-  stu-re-rem % stur-e-rem
-  stu-re-res % stur-e-res
-  sub-stan-ti-el-le-rer % sub-stan-ti-el-ler-er
-  sub-stan-zi-el-le-rer % sub-stan-zi-el-ler-er
-  sub-ti-le-rer % sub-ti-ler-er
-  Sul-fids % Sul-fi-ds
-  Sy-rie-rin % Sy-ri-e-rin
-  Sy-rie-rin-nen % Sy-ri-e-rin-nen
-  Ta-lents % Tal-ents
-  Tam-bu-rins % Tam-bu-r-ins
-  te-le-fo-nier % te-le-fo-ni-er
-  ten-den-ziö-se % ten-den-zi-öse
-  ten-den-ziö-sem % ten-den-zi-ösem
-  ten-den-ziö-sen % ten-den-zi-ösen
-  ten-den-ziö-ser % ten-den-zi-öser
-  ten-den-ziö-se-re % ten-den-zi-öse-re
-  ten-den-ziö-se-rem % ten-den-zi-öse-rem
-  ten-den-ziö-se-ren % ten-den-zi-öse-ren
-  ten-den-ziö-se-rer % ten-den-zi-öse-rer
-  ten-den-ziö-se-res % ten-den-zi-öse-res
-  ten-den-ziö-ses % ten-den-zi-öses
-  ten-den-ziö-se-ste % ten-den-zi-öse-ste
-  ten-den-ziö-se-stem % ten-den-zi-öse-stem
-  ten-den-ziö-se-sten % ten-den-zi-öse-sten
-  ten-den-ziö-se-ster % ten-den-zi-öse-ster
-  ten-den-ziö-se-stes % ten-den-zi-öse-stes
-  ter-tiä-re % ter-ti-äre
-  ter-tiä-rem % ter-ti-ärem
-  ter-tiä-ren % ter-ti-ären
-  ter-tiä-rer % ter-ti-ärer
-  ter-tiä-res % ter-ti-äres
-  te-xa-nisch % te-x-a-nisch
-  te-xa-ni-sche % te-x-a-ni-sche
-  te-xa-ni-schem % te-x-a-ni-schem
-  te-xa-ni-schen % te-x-a-ni-schen
-  te-xa-ni-scher % te-x-a-ni-scher
-  te-xa-ni-sches % te-x-a-ni-sches
-  Ti-ta-nin-nen % Ti-tan-in-nen
-  Ti-tans % Ti-t-ans
-  tol-le-rer % tol-ler-er
-  To-re-ros % To-re-r-os
-  to-ta-li-tä-rem % to-ta-li-tär-em
-  to-ta-li-tä-ren % to-ta-li-tär-en
-  to-ta-li-tä-rer % to-ta-li-tär-er
-  to-ta-li-tä-re-re % to-ta-li-tär-ere
-  to-ta-li-tä-re-rem % to-ta-li-tär-erem
-  to-ta-li-tä-re-rer % to-ta-li-tär-erer
-  to-ta-li-tä-re-res % to-ta-li-tär-eres
-  to-ta-li-tä-res % to-ta-li-tär-es
-  tra-di-tio-nel-le-rer % tra-di-tio-nel-ler-er
-  tramp-le % tram-ple
-  trans-por-ta-ble-rer % trans-por-ta-bler-er
-  treue-rem % treu-e-rem
-  treue-res % treu-e-res
-  trick-ste % tricks-te
-  trick-sten % tricks-ten
-  trick-stest % tricks-test
-  trick-stet % tricks-tet
-  Tris-tesse % Tristes-se
-  tri-um-pha-le-rer % tri-um-pha-ler-er
-  Tri-umphs % Tri-um-phs
-  tri-via-le-rer % tri-via-ler-er
-  Tsche-tsche-ni-en % Tschet-sche-ni-en
-  Tsche-tsche-ni-ens % Tschet-sche-ni-ens
-  tsche-tsche-nisch % tschet-sche-nisch
-  tsche-tsche-ni-sche % tschet-sche-ni-sche
-  tsche-tsche-ni-schem % tschet-sche-ni-schem
-  tsche-tsche-ni-schen % tschet-sche-ni-schen
-  tsche-tsche-ni-scher % tschet-sche-ni-scher
-  tsche-tsche-ni-sches % tschet-sche-ni-sches
-  tunkst % tunk-st
-  Ty-ran-nin-nen % Ty-rann-in-nen
-  ubi-qui-tä-rem % ubi-qui-tär-em
-  ubi-qui-tä-ren % ubi-qui-tär-en
-  ubi-qui-tä-rer % ubi-qui-tär-er
-  ubi-qui-tä-res % ubi-qui-tär-es
-  üb-le-rer % üb-ler-er
-  uni-ver-sel-le-rer % uni-ver-sel-ler-er
-  uni-ver-si-tä-rem % uni-ver-si-tär-em
-  uni-ver-si-tä-ren % uni-ver-si-tär-en
-  uni-ver-si-tä-rer % uni-ver-si-tär-er
-  uni-ver-si-tä-res % uni-ver-si-tär-es
-  Urans % Ur-ans
-  Urins % Ur-ins
-  va-ria-ble-rer % va-ria-bler-er
-  ver-ba-le-rer % ver-ba-ler-er
-  Ver-fas-se-rin-nen % Ver-fas-se-r-in-nen
-  ver-finst-re % ver-fin-stre
-  ver-hök-re % ver-hö-k-re
-  ver-körp-re % ver-kör-p-re
-  ver-läng-re % ver-län-g-re
-  ver-rieg-le % ver-rie-gle
-  ver-scherb-le % ver-scher-ble
-  ver-üb-le % ver-ü-b-le
-  ver-witt-re % ver-wit-tre
-  ver-wü-ste-tem % ver-wüs-te-tem
-  ver-wü-ste-ten % ver-wüs-te-ten
-  ver-wü-ste-ter % ver-wüs-te-ter
-  ver-wü-ste-tes % ver-wüs-te-tes
-  ver-wü-ste-test % ver-wüs-te-test
-  ver-wü-ste-tet % ver-wüs-te-tet
-  Viet-nam % Vi-et-nam
-  Viet-na-me-se % Vi-et-na-me-se
-  Viet-na-me-sen % Vi-et-na-me-sen
-  Viet-na-me-sin % Vi-et-na-me-sin
-  Viet-na-me-sin-nen % Vi-et-na-me-sin-nen
-  Viet-nams % Vi-et-nams
-  vi-ta-le-rer % vi-ta-ler-er
-  vög-le % vö-gle
-  vo-la-ti-le-rer % vo-la-ti-ler-er
-  vol-le-rer % vol-ler-er
-  Wag-gons % Wag-g-ons
-  wär-mend % wär-me-nd
-  wär-men-de % wär-me-n-de
-  wär-men-dem % wär-me-n-dem
-  wär-men-den % wär-me-n-den
-  wär-men-der % wär-me-n-der
-  wär-men-des % wär-me-n-des
-  weig-re % wei-g-re
-  werk-le % wer-kle
-  wich-ste % wichs-te
-  wich-sten % wichs-ten
-  wich-stest % wichs-test
-  wich-stet % wichs-tet
-  Wien % Wi-en
-  witt-re % wit-tre
-  woh-le-rem % wohl-e-rem
-  woh-le-rer % wohler-er
-  woh-le-res % wohl-e-res
-  wü-ste-te % wüs-te-te
-  wü-ste-ten % wüs-te-ten
-  wü-ste-test % wüs-te-test
-  wü-ste-tet % wüs-te-tet
-  ze-le-brier % ze-le-bri-er
-  zen-tra-le-rer % zen-tra-ler-er
-  Zen-tri-gramm % Zent-ri-gramm
-  Zen-tri-gram-me % Zent-ri-gram-me
-  Zen-tri-gram-men % Zent-ri-gram-men
-  Zen-tri-gramms % Zent-ri-gramms
-  ze-re-mo-niö-se % ze-re-mo-ni-öse
-  ze-re-mo-niö-sem % ze-re-mo-ni-ösem
-  ze-re-mo-niö-sen % ze-re-mo-ni-ösen
-  ze-re-mo-niö-ser % ze-re-mo-ni-öser
-  ze-re-mo-niö-se-re % ze-re-mo-ni-öse-re
-  ze-re-mo-niö-se-rem % ze-re-mo-ni-öse-rem
-  ze-re-mo-niö-se-ren % ze-re-mo-ni-öse-ren
-  ze-re-mo-niö-se-rer % ze-re-mo-ni-öse-rer
-  ze-re-mo-niö-se-res % ze-re-mo-ni-öse-res
-  ze-re-mo-niö-ses % ze-re-mo-ni-öses
-  ze-re-mo-niö-se-ste % ze-re-mo-ni-öse-ste
-  ze-re-mo-niö-se-stem % ze-re-mo-ni-öse-stem
-  ze-re-mo-niö-se-sten % ze-re-mo-ni-öse-sten
-  ze-re-mo-niö-se-ster % ze-re-mo-ni-öse-ster
-  ze-re-mo-niö-se-stes % ze-re-mo-ni-öse-stes
-  zet-re % ze-tre
-  Zin-no-bers % Zin-n-obers
-  zitt-re % zit-tre
-  zög-re % zö-g-re
-  züg-le % zü-g-le
-  züng-le % zün-gle
-  zwink-re % zwin-k-re
-%
-%
-% falsche Trennungen von zusammengesetzten Wörtern
-%
-  ab-gehst % ab-ge-hst
-  ab-geht % ab-ge-ht
-  ab-hob-le % ab-ho-ble
-  ab-hobst % ab-h-obst
-  ab-machst % ab-ma-chst
-  ab-macht % ab-ma-cht
-  ab-mach-te % ab-ma-ch-te
-  ab-mach-ten % ab-ma-ch-ten
-  ab-mach-test % ab-ma-ch-test
-  ab-mach-tet % ab-ma-ch-tet
-  ab-rieg-le % ab-rie-gle
-  ab-sau-ge % ab-s-au-ge
-  ab-schobst % ab-sch-obst
-  ab-seg-le % ab-se-gle
-  ab-spieg-le % ab-spie-gle
-  ab-stemp-le % ab-stem-ple
-  ab-ster-be % ab-st-er-be
-  ab-sterbt % ab-st-erbt
-  an-baust % an-bau-st
-  an-ge-schrien % an-ge-schri-en
-  an-ge-starrt % an-ge-st-arrt
-  an-ge-starr-tem % an-ge-st-arr-tem
-  an-ge-starr-ten % an-ge-st-arr-ten
-  an-ge-starr-ter % an-ge-st-arr-ter
-  an-ge-starr-tes % an-ge-st-arr-tes
-  an-hobst % an-h-obst
-  an-iso-trop % ani-so-trop
-  an-iso-tro-pe % ani-so-tro-pe
-  an-iso-tro-pem % ani-so-tro-pem
-  an-iso-tro-pen % ani-so-tro-pen
-  an-iso-tro-per % ani-so-tro-per
-  an-iso-tro-pes % ani-so-tro-pes
-  an-kling-le % an-klin-gle
-  an-kurb-le % an-kur-ble
-  an-machst % an-ma-chst
-  an-macht % an-ma-cht
-  an-mach-te % an-ma-ch-te
-  an-mach-ten % an-ma-ch-ten
-  an-mach-test % an-ma-ch-test
-  an-mach-tet % an-ma-ch-tet
-  an-nag-le % an-na-gle
-  an-pöb-le % an-pö-ble
-  an-sau-ge % an-s-au-ge
-  an-schien % an-schi-en
-  an-trafst % an-tra-fst
-  an-traft % an-tra-ft
-  ape-rio-disch % ape-ri-odisch
-  ape-rio-di-sche % ape-ri-odi-sche
-  ape-rio-di-schem % ape-ri-odi-schem
-  ape-rio-di-schen % ape-ri-odi-schen
-  ape-rio-di-scher % ape-ri-odi-scher
-  ape-rio-di-sches % ape-ri-odi-sches
-  are-li-giö-se % are-li-gi-öse
-  are-li-giö-sem % are-li-gi-ösem
-  are-li-giö-sen % are-li-gi-ösen
-  are-li-giö-ser % are-li-gi-öser
-  are-li-giö-ses % are-li-gi-öses
-  auf-fäch-re % auf-fä-ch-re
-  auf-ge-schrien % auf-ge-schri-en
-  auf-hobst % auf-h-obst
-  auf-möb-le % auf-mö-ble
-  Auf-pas-se-rin-nen % Auf-pas-se-r-in-nen
-  auf-reihst % auf-rei-hst
-  auf-reiht % auf-rei-ht
-  auf-reih-te % auf-rei-h-te
-  auf-reih-ten % auf-rei-h-ten
-  auf-reih-test % auf-rei-h-test
-  auf-reih-tet % auf-rei-h-tet
-  auf-rei^^fft % auf-rei-^^fft
-  auf-rü-ste-ten % auf-rüs-te-ten
-  auf-rü-ste-test % auf-rüs-te-test
-  auf-rü-ste-tet % auf-rüs-te-tet
-  auf-sau-ge % auf-s-au-ge
-  auf-schrien % auf-schri-en
-  auf-wär-mend % auf-wär-me-nd
-  auf-wär-men-de % auf-wär-me-n-de
-  auf-wär-men-dem % auf-wär-me-n-dem
-  auf-wär-men-den % auf-wär-me-n-den
-  auf-wär-men-der % auf-wär-me-n-der
-  auf-wär-men-des % auf-wär-me-n-des
-  aus-gebt % aus-ge-bt
-  aus-ge-rü-ste-te % aus-ge-rüs-te-te
-  aus-ge-rü-ste-tem % aus-ge-rüs-te-tem
-  aus-ge-rü-ste-ten % aus-ge-rüs-te-ten
-  aus-ge-rü-ste-ter % aus-ge-rüs-te-ter
-  aus-ge-rü-ste-tes % aus-ge-rüs-te-tes
-  aus-lobst % aus-l-obst
-  aus-sau-ge % aus-s-au-ge
-  aus-ster-be % aus-st-er-be
-  aus-sterbt % aus-st-erbt
-  aus-tobst % aus-t-obst
-  aus-zu-tau-schen % aus-zut-au-schen
-  aus-zu-tau-schend % aus-zut-au-schend
-  aus-zu-tau-schen-de % aus-zut-au-schen-de
-  aus-zu-tau-schen-dem % aus-zut-au-schen-dem
-  aus-zu-tau-schen-den % aus-zut-au-schen-den
-  aus-zu-tau-schen-der % aus-zut-au-schen-der
-  aus-zu-tau-schen-des % aus-zut-au-schen-des
-  be-dien % be-di-en
-  be-flüg-le % be-flü-g-le
-  be-hobst % be-h-obst
-  be-jub-le % be-ju-ble
-  be-lag-re % be-la-g-re
-  be-lief-re % be-lie-fre
-  be-mäng-le % be-män-g-le
-  be-mutt-re % be-mut-tre
-  be-neb-le % be-ne-ble
-  be-schien % be-schi-en
-  be-sieg-le % be-sie-gle
-  be-stacht % be-st-acht
-  be-stahlst % be-stahl-st
-  be-völk-re % be-völ-k-re
-  be-ziff-re % be-zif-fre
-  da-blieb % da-b-lieb
-  da-hin-glitt % da-hing-litt
-  da-hin-glit-te % da-hing-lit-te
-  da-hin-glit-ten % da-hing-lit-ten
-  da-hin-glit-test % da-hing-lit-test
-  da-hin-glit-tet % da-hing-lit-tet
-  da-hin-glittst % da-hing-littst
-  da-hin-ster-be % da-hin-st-er-be
-  da-hin-sterbt % da-hin-st-erbt
-  da-von-schlei-che % da-v-on-schlei-che
-  da-von-schlei-chen % da-v-on-schlei-chen
-  da-von-schlei-chend % da-v-on-schlei-chend
-  da-von-schlei-chen-de % da-v-on-schlei-chen-de
-  da-von-schlei-chen-dem % da-v-on-schlei-chen-dem
-  da-von-schlei-chen-den % da-v-on-schlei-chen-den
-  da-von-schlei-chen-der % da-v-on-schlei-chen-der
-  da-von-schlei-chen-des % da-v-on-schlei-chen-des
-  da-von-schleichst % da-v-on-schleichst
-  da-von-schleicht % da-v-on-schleicht
-  da-von-spa-zier-te % da-v-onspa-zier-te
-  da-zu-lernst % da-zu-l-ernst
-  ein-baust % ein-bau-st
-  ein-flö^^fft % ein-flö-^^fft
-  ein-flö^^ff-te % ein-flö-^^ffte
-  ein-flö^^ff-ten % ein-flö-^^fften
-  ein-flö^^ff-test % ein-flö-^^fftest
-  ein-flö^^ff-tet % ein-flö-^^fftet
-  ein-ge-flö^^fft % ein-ge-flö-^^fft
-  ein-ge-flö^^ff-te % ein-ge-flö-^^ffte
-  ein-ge-flö^^ff-tem % ein-ge-flö-^^fftem
-  ein-ge-flö^^ff-ten % ein-ge-flö-^^fften
-  ein-ge-flö^^ff-ter % ein-ge-flö-^^ffter
-  ein-ge-flö^^ff-tes % ein-ge-flö-^^fftes
-  ein-ge-schleu-ste % ein-ge-schleus-te
-  ein-ge-schleu-stem % ein-ge-schleus-tem
-  ein-ge-schleu-sten % ein-ge-schleus-ten
-  ein-ge-schleu-stes % ein-ge-schleus-tes
-  ein-la-gre % ein-la-g-re
-  ein-lief-re % ein-lie-fre
-  ein-schlich % ein-sch-lich
-  ein-schli-che % ein-sch-li-che
-  ein-schli-chen % ein-sch-li-chen
-  ein-schli-chest % ein-sch-li-chest
-  ein-schlichst % ein-sch-lichst
-  ein-schlicht % ein-sch-licht
-  ein-schlief % ein-sch-lief
-  ein-trafst % ein-tra-fst
-  ein-traft % ein-tra-ft
-  ein-zu-tau-chen % ein-zut-au-chen
-  ein-zu-tau-chend % ein-zut-au-chend
-  ein-zu-tau-chen-de % ein-zut-au-chen-de
-  ein-zu-tau-chen-dem % ein-zut-au-chen-dem
-  ein-zu-tau-chen-den % ein-zut-au-chen-den
-  ein-zu-tau-chen-der % ein-zut-au-chen-der
-  ein-zu-tau-chen-des % ein-zut-au-chen-des
-  ein-zu-tau-schen % ein-zut-au-schen
-  ein-zu-tau-schend % ein-zut-au-schend
-  ein-zu-tau-schen-de % ein-zut-au-schen-de
-  ein-zu-tau-schen-dem % ein-zut-au-schen-dem
-  ein-zu-tau-schen-den % ein-zut-au-schen-den
-  ein-zu-tau-schen-der % ein-zut-au-schen-der
-  ein-zu-tau-schen-des % ein-zut-au-schen-des
-  ein-zu-üben % ein-zuü-ben
-  ein-zu-übend % ein-zuü-bend
-  ein-zu-üben-de % ein-zuü-ben-de
-  ein-zu-üben-dem % ein-zuü-ben-dem
-  ein-zu-üben-den % ein-zuü-ben-den
-  ein-zu-üben-der % ein-zuü-ben-der
-  ein-zu-üben-des % ein-zuü-ben-des
-  ent-blö^^fft % ent-blö-^^fft
-  ent-blö^^ff-te % ent-blö-^^ffte
-  ent-blö^^ff-tem % ent-blö-^^fftem
-  ent-blö^^ff-ten % ent-blö-^^fften
-  ent-blö^^ff-ter % ent-blö-^^ffter
-  ent-blö^^ff-tes % ent-blö-^^fftes
-  ent-blö^^ff-test % ent-blö-^^fftest
-  ent-blö^^ff-tet % ent-blö-^^fftet
-  ent-er-be % en-t-er-be
-  ent-fernst % ent-f-ernst
-  ent-hobst % ent-h-obst
-  ent-rieg-le % ent-rie-gle
-  ent-rü-ste-te % ent-rüs-te-te
-  ent-rü-ste-tem % ent-rüs-te-tem
-  ent-rü-ste-ten % ent-rüs-te-ten
-  ent-rü-ste-ter % ent-rüs-te-ter
-  ent-rü-ste-tes % ent-rüs-te-tes
-  ent-rü-ste-test % ent-rüs-te-test
-  ent-rü-ste-tet % ent-rüs-te-tet
-  ent-schlief % ent-sch-lief
-  ent-schlie-fen % ent-sch-lie-fen
-  ent-schlie-fest % ent-sch-lie-fest
-  ent-schliefst % ent-sch-liefst
-  ent-schlieft % ent-sch-lieft
-  ent-schlös-se % ent-sch-lös-se
-  ent-schlös-sen % ent-sch-lös-sen
-  ent-schlös-sest % ent-sch-lös-sest
-  ent-schlö^^fft % ent-schlö-^^fft
-  ent-ziff-re % ent-zif-fre
-  ent-zweist % ent-zwei-st
-  er-blas-se % erb-las-se
-  er-blas-sen % erb-las-sen
-  er-blas-send % erb-las-send
-  er-blas-sen-de % erb-las-sen-de
-  er-blas-sen-dem % erb-las-sen-dem
-  er-blas-sen-den % erb-las-sen-den
-  er-blas-sen-der % erb-las-sen-der
-  er-blas-sen-des % erb-las-sen-des
-  Erb-las-se-rin-nen % Erb-las-se-r-in-nen
-  er-blas-sest % erb-las-sest
-  er-eif-re % er-ei-fre
-  er-folg-reich-ste % er-folg-reichs-te
-  er-folg-reich-stem % er-folg-reichs-tem
-  er-folg-reich-sten % er-folg-reichs-ten
-  er-folg-reich-ster % er-folg-reichs-ter
-  er-folg-reich-stes % er-folg-reichs-tes
-  er-hal-ten-ge-blie-ben % er-halt-en-ge-blie-ben
-  er-hal-ten-ge-blie-be-ne % er-halt-en-ge-blie-be-ne
-  er-hal-ten-ge-blie-be-nem % er-halt-en-ge-blie-be-nem
-  er-hal-ten-ge-blie-be-nen % er-halt-en-ge-blie-be-nen
-  er-hal-ten-ge-blie-be-ner % er-halt-en-ge-blie-be-ner
-  er-hal-ten-ge-blie-be-nes % er-halt-en-ge-blie-be-nes
-  er-klirr-te % er-k-lirr-te
-  er-klun-ge-nen % er-k-lun-ge-nen
-  er-läut-re % er-läu-tre
-  er-munt-re % er-mun-tre
-  er-schien % er-schi-en
-  er-stacht % er-st-acht
-  erster-be % er-st-er-be
-  er-sterbt % er-st-erbt
-  er-wär-mend % er-wär-me-nd
-  er-wär-men-de % er-wär-me-n-de
-  er-wär-men-dem % er-wär-me-n-dem
-  er-wär-men-den % er-wär-me-n-den
-  er-wär-men-der % er-wär-me-n-der
-  er-wär-men-des % er-wär-me-n-des
-  er-wischt % er-wi-scht
-  er-wisch-te % er-wi-sch-te
-  er-wisch-tem % er-wi-sch-tem
-  er-wisch-ten % er-wi-sch-ten
-  er-wisch-ter % er-wi-sch-ter
-  er-wisch-tes % er-wi-sch-tes
-  er-wisch-test % er-wi-sch-test
-  er-wisch-tet % er-wi-sch-tet
-  er-zitt-re % er-zit-tre
-  fa-ta-le-rer % fa-ta-ler-er
-  fest-nag-le % fest-na-gle
-  fest-zu-ma-chen % festz-u-ma-chen
-  fest-zu-ma-chend % festz-u-ma-chend
-  fest-zu-ma-chen-de % festz-u-ma-chen-de
-  fest-zu-ma-chen-dem % festz-u-ma-chen-dem
-  fest-zu-ma-chen-den % festz-u-ma-chen-den
-  fest-zu-ma-chen-der % festz-u-ma-chen-der
-  fest-zu-ma-chen-des % festz-u-ma-chen-des
-  flott-zu-ma-chen % flottz-u-ma-chen
-  flott-zu-ma-chend % flottz-u-ma-chend
-  flott-zu-ma-chen-de % flottz-u-ma-chen-de
-  flott-zu-ma-chen-dem % flottz-u-ma-chen-dem
-  flott-zu-ma-chen-den % flottz-u-ma-chen-den
-  flott-zu-ma-chen-der % flottz-u-ma-chen-der
-  flott-zu-ma-chen-des % flottz-u-ma-chen-des
-  ganz-wö-chig % gan-zwö-chig
-  ganz-wö-chi-ge % gan-zwö-chi-ge
-  ganz-wö-chi-gem % gan-zwö-chi-gem
-  ganz-wö-chi-gen % gan-zwö-chi-gen
-  ganz-wö-chi-ger % gan-zwö-chi-ger
-  ganz-wö-chi-ges % gan-zwö-chi-ges
-  glor-reich-ste % glor-reichs-te
-  glor-reich-stem % glor-reichs-tem
-  glor-reich-sten % glor-reichs-ten
-  glor-reich-ster % glor-reichs-ter
-  glor-reich-stes % glor-reichs-tes
-  gut-zu-ma-chen % gutz-u-ma-chen
-  gut-zu-ma-chend % gutz-u-ma-chend
-  gut-zu-ma-chen-de % gutz-u-ma-chen-de
-  gut-zu-ma-chen-dem % gutz-u-ma-chen-dem
-  gut-zu-ma-chen-den % gutz-u-ma-chen-den
-  gut-zu-ma-chen-der % gutz-u-ma-chen-der
-  gut-zu-ma-chen-des % gutz-u-ma-chen-des
-  halt-zu-ma-chen % haltz-u-ma-chen
-  Hard-rock % Har-d-rock
-  her-an-ging % he-r-an-ging
-  her-an-gin-ge % he-r-an-gin-ge
-  her-an-gin-gen % he-r-an-gin-gen
-  her-an-gingst % he-r-an-gingst
-  her-an-gingt % he-r-an-gingt
-  her-aus-gebt % her-aus-ge-bt
-  her-um-lung-re % her-um-lun-g-re
-  her-um-nörg-le % her-um-nör-gle
-  hoch-ge-reckt % hoch-ge-r-eckt
-  hoch-ge-reck-te % hoch-ge-r-eck-te
-  hoch-ge-reck-tem % hoch-ge-r-eck-tem
-  hoch-ge-reck-ten % hoch-ge-r-eck-ten
-  hoch-ge-reck-ter % hoch-ge-r-eck-ter
-  hoch-ge-reck-tes % hoch-ge-r-eck-tes
-  ho-mo-ero-tisch % ho-moe-ro-tisch
-  ho-mo-ero-ti-sche % ho-moe-ro-ti-sche
-  ho-mo-ero-ti-schem % ho-moe-ro-ti-schem
-  ho-mo-ero-ti-schen % ho-moe-ro-ti-schen
-  ho-mo-ero-ti-scher % ho-moe-ro-ti-scher
-  ho-mo-ero-ti-sches % ho-moe-ro-ti-sches
-  hy-per-ak-tiv % hy-pe-rak-tiv
-  hy-per-ak-ti-ve % hy-pe-rak-ti-ve
-  hy-per-ak-ti-vem % hy-pe-rak-ti-vem
-  hy-per-ak-ti-ven % hy-pe-rak-ti-ven
-  hy-per-ak-ti-ver % hy-pe-rak-ti-ver
-  hy-per-ak-ti-ves % hy-pe-rak-ti-ves
-  il-loy-ale % il-loya-le
-  il-loy-alem % il-loya-lem
-  il-loy-alen % il-loya-len
-  il-loy-aler % il-loya-ler
-  il-loy-ales % il-loya-les
-  In-kauf-nah-me % In-k-auf-nah-me
-  in-ter-agie-re % in-ter-a-gie-re
-  in-ter-agie-ren % in-ter-a-gie-ren
-  in-ter-agie-rend % in-ter-a-gie-rend
-  in-ter-agie-ren-de % in-ter-a-gie-ren-de
-  in-ter-agie-ren-dem % in-ter-a-gie-ren-dem
-  in-ter-agie-ren-den % in-ter-a-gie-ren-den
-  in-ter-agie-ren-der % in-ter-a-gie-ren-der
-  in-ter-agie-ren-des % in-ter-a-gie-ren-des
-  in-ter-agierst % in-ter-a-gierst
-  in-ter-agiert % in-ter-a-giert
-  in-ter-agier-te % in-ter-a-gier-te
-  in-ter-agier-tem % in-ter-a-gier-tem
-  in-ter-agier-ten % in-ter-a-gier-ten
-  in-ter-agier-ter % in-ter-a-gier-ter
-  in-ter-agier-tes % in-ter-a-gier-tes
-  in-ter-agier-test % in-ter-a-gier-test
-  in-ter-agier-tet % in-ter-a-gier-tet
-  in-ter-me-diä-re % in-ter-me-di-äre
-  in-ter-me-diä-rem % in-ter-me-di-ärem
-  in-ter-me-diä-ren % in-ter-me-di-ären
-  in-ter-me-diä-rer % in-ter-me-di-ärer
-  in-ter-me-diä-res % in-ter-me-di-äres
-  in-ter-viewst % in-ter-view-st
-  ir-gend-et-was % ir-gen-det-was
-  Kon-ka-te-na-ti-on % Kon-ka-te-n-a-ti-on
-  Kon-tra-bäs-se % Kon-tra-b-äs-se
-  Kon-tra-bäs-sen % Kon-tra-b-äs-sen
-  lang-an-hal-ten-de % lan-gan-hal-ten-de
-  lang-an-hal-ten-den % lan-gan-hal-ten-den
-  los-ge-saust % los-ges-aust
-  mit-jub-le % mit-ju-ble
-  mit-lief-re % mit-lie-fre
-  mit-zu-ma-chen % mitz-u-ma-chen
-  mit-zu-ma-chend % mitz-u-ma-chend
-  mit-zu-ma-chen-de % mitz-u-ma-chen-de
-  mit-zu-ma-chen-dem % mitz-u-ma-chen-dem
-  mit-zu-ma-chen-den % mitz-u-ma-chen-den
-  mit-zu-ma-chen-der % mitz-u-ma-chen-der
-  mit-zu-ma-chen-des % mitz-u-ma-chen-des
-  nach-eif-re % nach-ei-fre
-  nach-lief-re % nach-lie-fre
-  nach-rü-ste-te % nach-rüs-te-te
-  nach-rü-ste-ten % nach-rüs-te-ten
-  nach-rü-ste-test % nach-rüs-te-test
-  nach-rü-ste-tet % nach-rüs-te-tet
-  nie-der-knien % nie-der-kni-en
-  nie-der-saust % nie-ders-aust
-  nie-der-sau-ste % nie-ders-au-ste
-  nie-der-sau-sten % nie-ders-au-sten
-  nie-der-sau-stest % nie-ders-au-stest
-  nie-der-sau-stet % nie-ders-au-stet
-  preis-gebt % preis-ge-bt
-  schlu^^ff-folg-re % schlu^^ff-fol-g-re
-  sit-zen-ge-las-sen % sitz-en-ge-las-sen
-  sit-zen-ge-las-se-nen % sitz-en-ge-las-se-nen
-  sit-zen-ge-las-se-ner % sitz-en-ge-las-se-ner
-  sit-zen-ge-las-se-nes % sitz-en-ge-las-se-nes
-  über-a^^ffen % übera-^^ffen
-  über-a^^ffest % übera-^^ffest
-  über-blätt-re % über-blät-tre
-  über-flüg-le % über-flü-g-le
-  über-lag-re % über-la-g-re
-  über-lief-re % über-lie-fre
-  über-rump-le % über-rum-ple
-  über-win-te-re % über-w-in-te-re
-  über-wint-re % über-win-tre
-  um-blätt-re % um-blät-tre
-  um-ge-rü-ste-te % um-ge-rüs-te-te
-  um-ge-rü-ste-tem % um-ge-rüs-te-tem
-  um-ge-rü-ste-ten % um-ge-rüs-te-ten
-  um-ge-rü-ste-ter % um-ge-rüs-te-ter
-  um-ge-rü-ste-tes % um-ge-rüs-te-tes
-  um-kremp-le % um-krem-ple
-  um-lag-re % um-la-g-re
-  um-lernst % um-l-ernst
-  um-neb-le % um-ne-ble
-  um-rü-ste-te % um-rüs-te-te
-  um-rü-ste-ten % um-rüs-te-ten
-  um-rü-ste-test % um-rüs-te-test
-  um-rü-ste-tet % um-rüs-te-tet
-  um-schwär-mend % um-schwär-me-nd
-  um-schwär-men-de % um-schwär-me-n-de
-  um-schwär-men-dem % um-schwär-me-n-dem
-  um-schwär-men-den % um-schwär-me-n-den
-  um-schwär-men-der % um-schwär-me-n-der
-  um-schwär-men-des % um-schwär-me-n-des
-  um-seg-le % um-se-gle
-  um-zing-le % um-zin-gle
-  un-ak-zep-ta-ble-rer % un-ak-zep-ta-bler-er
-  un-at-trak-ti-ve-rem % unat-trak-ti-ver-em
-  un-at-trak-ti-ve-ren % unat-trak-ti-ver-en
-  un-at-trak-ti-ve-rer % unat-trak-ti-ver-er
-  un-at-trak-ti-ve-res % unat-trak-ti-ver-es
-  un-bru-ta-le-rer % un-bru-ta-ler-er
-  un-ed-le-rer % un-ed-ler-er
-  un-ent-halt-sam % un-en-t-halt-sam
-  un-ent-halt-sa-me % un-en-t-halt-sa-me
-  un-ent-halt-sa-mem % un-en-t-halt-sa-mem
-  un-ent-halt-sa-men % un-en-t-halt-sa-men
-  un-ent-halt-sa-mer % un-en-t-halt-sa-mer
-  un-ent-halt-sa-me-re % un-en-t-halt-sa-me-re
-  un-ent-halt-sa-me-rem % un-en-t-halt-sa-me-rem
-  un-ent-halt-sa-me-ren % un-en-t-halt-sa-me-ren
-  un-ent-halt-sa-me-rer % un-en-t-halt-sa-me-rer
-  un-ent-halt-sa-me-res % un-en-t-halt-sa-me-res
-  un-ent-halt-sa-mes % un-en-t-halt-sa-mes
-  Un-ent-halt-sam-keit % Un-en-t-halt-sam-keit
-  un-ent-halt-sam-ste % un-en-t-halt-sam-ste
-  un-ent-halt-sam-stem % un-en-t-halt-sam-stem
-  un-ent-halt-sam-sten % un-en-t-halt-sam-sten
-  un-ent-halt-sam-ster % un-en-t-halt-sam-ster
-  un-ent-halt-sam-stes % un-en-t-halt-sam-stes
-  un-fle-xi-ble-rer % un-fle-xibler-er
-  un-ge-naue-rem % un-ge-nau-e-rem
-  un-ge-naue-res % un-ge-nau-e-res
-  un-ge-nau-ste % un-ge-n-au-ste
-  un-ge-nau-stem % un-ge-n-au-stem
-  un-ge-nau-sten % un-ge-n-au-sten
-  un-ge-nau-ster % un-ge-n-au-ster
-  un-ge-nau-stes % un-ge-n-au-stes
-  un-kol-le-gia-le-rer % un-kol-le-gia-ler-er
-  un-kom-for-ta-ble-rer % un-kom-for-ta-bler-er
-  un-prak-ti-ka-ble-rer % un-prak-ti-ka-bler-er
-  un-pro-duk-ti-ve-rem % un-pro-duk-ti-ver-em
-  un-pro-duk-ti-ve-ren % un-pro-duk-ti-ver-en
-  un-pro-duk-ti-ve-rer % un-pro-duk-ti-ver-er
-  un-pro-duk-ti-ve-res % un-pro-duk-ti-ver-es
-  un-ra-tio-nel-le-rer % un-ra-tio-nel-ler-er
-  un-re-el-le-rer % un-re-el-ler-er
-  un-rein-ste % unr-ein-ste
-  un-rein-stem % unr-ein-stem
-  un-rein-sten % unr-ein-sten
-  un-rein-ster % unr-ein-ster
-  un-rein-stes % unr-ein-stes
-  un-ren-ta-ble-rer % un-ren-ta-bler-er
-  un-ska-liert % un-s-ka-liert
-  un-ska-lier-te % un-s-ka-lier-te
-  un-ska-lier-tem % un-s-ka-lier-tem
-  un-ska-lier-ten % un-s-ka-lier-ten
-  un-ska-lier-ter % un-s-ka-lier-ter
-  un-ska-lier-tes % un-s-ka-lier-tes
-  un-ter-heb-le % un-ter-he-ble
-  un-ter-zu-tau-chen % un-ter-zut-au-chen
-  un-treue-rem % un-treu-e-rem
-  un-treue-res % un-treu-e-res
-  ver-ank-re % ver-an-k-re
-  ver-ärg-re % ver-är-g-re
-  ver-arz-tend % ver-arzt-end
-  ver-arz-ten-de % ver-arzt-en-de
-  ver-arz-ten-dem % ver-arzt-en-dem
-  ver-arz-ten-den % ver-arzt-en-den
-  ver-arz-ten-der % ver-arzt-en-der
-  ver-arz-ten-des % ver-arzt-en-des
-  ver-biest-re % ver-bie-stre
-  ver-darb % verd-arb
-  ver-dar-ben % verd-ar-ben
-  ver-darbst % verd-arbst
-  ver-daust % verd-aust
-  ver-flicht % ver-f-licht
-  ver-flichtst % ver-f-lichtst
-  ver-gitt-re % ver-git-tre
-  ver-gött-re % ver-göt-tre
-  ver-hung-re % ver-hun-g-re
-  ver-jub-le % ver-ju-ble
-  ver-klun-gen % ver-k-lun-gen
-  ver-klun-ge-ne % ver-k-lun-ge-ne
-  ver-klun-ge-nem % ver-k-lun-ge-nem
-  ver-klun-ge-nen % ver-k-lun-ge-nen
-  ver-klun-ge-ner % ver-k-lun-ge-ner
-  ver-klun-ge-nes % ver-k-lun-ge-nes
-  ver-lag-re % ver-la-g-re
-  ver-lernst % ver-l-ernst
-  ver-lobst % ver-l-obst
-  ver-nag-le % ver-na-gle
-  ver-neb-le % ver-ne-ble
-  ver-plemp-re % ver-plem-p-re
-  ver-prüg-le % ver-prü-g-le
-  ver-saust % vers-aust
-  ver-schlam-pe % ver-sch-lam-pe
-  ver-schrien % ver-schri-en
-  ver-schrump-le % ver-schrum-ple
-  ver-sieg-le % ver-sie-gle
-  ver-te-le-fo-nier % ver-te-le-fo-ni-er
-  ver-weig-re % ver-wei-g-re
-  ver-zög-re % ver-zö-g-re
-  vor-bei-flim-mernd % vor-beif-lim-mernd
-  vor-bei-flim-mern-de % vor-beif-lim-mern-de
-  vor-bei-flim-mern-dem % vor-beif-lim-mern-dem
-  vor-bei-flim-mern-den % vor-beif-lim-mern-den
-  vor-bei-flim-mern-der % vor-beif-lim-mern-der
-  vor-bei-flim-mern-des % vor-beif-lim-mern-des
-  vor-spieg-le % vor-spie-gle
-  vor-wär-mend % vor-wär-me-nd
-  vor-wär-men-de % vor-wär-me-n-de
-  vor-wär-men-dem % vor-wär-me-n-dem
-  vor-wär-men-den % vor-wär-me-n-den
-  vor-wär-men-der % vor-wär-me-n-der
-  vor-wär-men-des % vor-wär-me-n-des
-  weg-sch-lich % weg-sch-lich
-  weg-sch-li-chen % weg-sch-li-chen
-  weg-sch-li-chest % weg-sch-li-chest
-  weg-sch-lichst % weg-sch-lichst
-  weg-sch-licht % weg-sch-licht
-  weg-sein % weg-s-ein
-  weg-ster-be % weg-st-er-be
-  weg-sterbt % weg-st-erbt
-  wei-ter-blätt-re % wei-ter-blät-tre
-  wert-vol-le-rer % wert-vol-ler-er
-  wett-eif-re % wett-ei-fre
-  wett-rü-ste-te % wett-rüs-te-te
-  wett-rü-ste-ten % wett-rüs-te-ten
-  wett-rü-ste-test % wett-rüs-te-test
-  wett-rü-ste-tet % wett-rüs-te-tet
-  wi-der-spieg-le % wi-der-spie-gle
-  wun-der-vol-le-rer % wun-der-vol-ler-er
-  wund-rei-ben % wun-drei-ben
-  zer-flatt-re % zer-flat-tre
-  zer-knitt-re % zer-knit-tre
-  zer-mart-re % zer-mar-tre
-  zer-splitt-re % zer-split-tre
-  zer-stacht % zer-st-acht
-  zer-tramp-le % zer-tram-ple
-  zu-ge-rü-ste-te % zu-ge-rüs-te-te
-  zu-ge-rü-ste-tem % zu-ge-rüs-te-tem
-  zu-ge-rü-ste-ten % zu-ge-rüs-te-ten
-  zu-ge-rü-ste-ter % zu-ge-rüs-te-ter
-  zu-ge-rü-ste-tes % zu-ge-rüs-te-tes
-  zu-jub-le % zu-ju-ble
-  zu-rück-blätt-re % zu-rück-blät-tre
-  zu-rück-blieb % zu-rück-b-lieb
-  zu-rück-blie-be % zu-rück-b-lie-be
-  zu-rück-blie-ben % zu-rück-b-lie-ben
-  zu-rück-bliebst % zu-rück-b-liebst
-  zu-rück-bliebt % zu-rück-b-liebt
-  zu-rück-reg-le % zu-rück-re-gle
-  zu-rü-ste-te % zu-rüs-te-te
-  zu-rü-ste-ten % zu-rüs-te-ten
-  zu-rü-ste-test % zu-rüs-te-test
-  zu-rü-ste-tet % zu-rüs-te-tet
-  zu-sam-men-baust % zu-sam-men-bau-st
-  zu-zwink-re % zu-zwin-k-re
-%
-%
-% falsche Trennungen ausgewählter Komposita
-%
-  Eber-esche % Ebe-re-sche
-  Erz-diö-ze-se % Erz-di-öze-se
-  Fi-nanz-äm-ter % Fi-nan-zäm-ter
-  Fi-nanz-äm-tern % Fi-nan-zäm-tern
-  Frisch-obst % Fri-sch-obst
-  fuchs-teu-fels-wild % fuch-steu-fels-wild
-  fuchs-teu-fels-wil-de % fuch-steu-fels-wil-de
-  fuchs-teu-fels-wil-dem % fuch-steu-fels-wil-dem
-  fuchs-teu-fels-wil-den % fuch-steu-fels-wil-den
-  fuchs-teu-fels-wil-der % fuch-steu-fels-wil-der
-  fuchs-teu-fels-wil-des % fuch-steu-fels-wil-des
-  fünf-ak-tig % fün-fak-tig
-  fünf-ak-ti-ge % fün-fak-ti-ge
-  fünf-ak-ti-gem % fün-fak-ti-gem
-  fünf-ak-ti-gen % fün-fak-ti-gen
-  fünf-ak-ti-ger % fün-fak-ti-ger
-  fünf-ak-ti-ges % fün-fak-ti-ges
-  Gas-öfen % Gasö-fen
-  Grund-ein-heit % Gr-und-ein-heit
-  Grund-ein-hei-ten % Gr-und-ein-hei-ten
-  Heiz-öls % Hei-zöls
-  Hof-rat % Ho-frat
-  kampf-er-fah-ren % kamp-fer-fah-ren
-  kampf-er-fah-re-ne % kamp-fer-fah-re-ne
-  kampf-er-fah-re-nem % kamp-fer-fah-re-nem
-  kampf-er-fah-re-nen % kamp-fer-fah-re-nen
-  kampf-er-fah-re-ner % kamp-fer-fah-re-ner
-  kampf-er-fah-re-nes % kamp-fer-fah-re-nes
-  Kampf-er-fah-rung % Kamp-fer-fah-rung
-  Kampf-er-fah-run-gen % Kamp-fer-fah-run-gen
-  kampf-er-probt % kamp-fer-probt
-  kampf-er-prob-te % kamp-fer-prob-te
-  kampf-er-prob-tem % kamp-fer-prob-tem
-  kampf-er-prob-ten % kamp-fer-prob-ten
-  kampf-er-prob-ter % kamp-fer-prob-ter
-  kampf-er-prob-tes % kamp-fer-prob-tes
-  Mu-sik-no-ten % Mu-si-kno-ten
-  Post-äm-ter % Po-stäm-ter
-  Pro-zent-zahl % Pro-z-ent-zahl
-  So-wjet-uni-on % So-wje-tu-ni-on
-  Tat-or-te % Ta-tor-te
-  Tat-or-ten % Ta-tor-ten
-  Tat-or-tes % Ta-tor-tes
-  Tat-orts % Ta-torts
-%
-%
-% fehlende Trennstellen einfacher Wörter
-%
-  Aa-le % Aale
-  Aa-len % Aalen
-  Ab-itu-re % Ab-iture
-  ab-strak-te-re % ab-strak-tere
-  ab-strak-te-rem % ab-strak-terem
-  ab-strak-te-ren % ab-strak-teren
-  ab-strak-te-rer % ab-strak-terer
-  ab-strak-te-res % ab-strak-teres
-  Ad-re-na-lin % Ad-rena-lin
-  Ad-re-na-lins % Ad-rena-lins
-  Ak-tio-nä-re % Ak-tio-näre
-  Ak-tio-nä-ren % Ak-tio-nären
-  Ak-tu-ars % Ak-tuars
-  Al-ma-na-che % Al-ma-nache
-  Am-ne-stie % Amne-stie
-  Am-ne-sti-en % Amne-sti-en
-  am-ne-stie-re % amne-stie-re
-  am-ne-stie-ren % amne-stie-ren
-  am-ne-stie-rend % amne-stie-rend
-  am-ne-stie-ren-de % amne-stie-ren-de
-  am-ne-stie-ren-dem % amne-stie-ren-dem
-  am-ne-stie-ren-den % amne-stie-ren-den
-  am-ne-stie-ren-der % amne-stie-ren-der
-  am-ne-stie-ren-des % amne-stie-ren-des
-  am-ne-stierst % amne-stierst
-  am-ne-stiert % amne-stiert
-  am-ne-stier-te % amne-stier-te
-  am-ne-stier-tem % amne-stier-tem
-  am-ne-stier-ten % amne-stier-ten
-  am-ne-stier-ter % amne-stier-ter
-  am-ne-stier-tes % amne-stier-tes
-  am-ne-stier-test % amne-stier-test
-  am-ne-stier-tet % amne-stier-tet
-  Am-ne-stie-rung % Amne-stie-rung
-  amü-sant % amüsant
-  amü-san-te % amüsan-te
-  amü-san-tem % amüsan-tem
-  amü-san-ten % amüsan-ten
-  amü-san-ter % amüsan-ter
-  amü-san-tes % amüsan-tes
-  An-da-lu-si-er % An-da-lu-sier
-  An-da-lu-si-ers % An-da-lu-siers
-  än-de-re % än-dere
-  and-rem % andrem
-  and-res % andres
-  An-häng-seln % An-hängseln
-  An-häng-sels % An-hängsels
-  Ar-me-ni-er % Ar-me-nier
-  Ar-me-ni-ers % Ar-me-niers
-  As-pekt % Aspekt
-  As-pek-te % Aspek-te
-  As-pek-ten % Aspek-ten
-  As-pek-tes % Aspek-tes
-  As-pekts % Aspekts
-  As-pik % Aspik
-  As-pi-rant % Aspi-rant
-  As-pi-ran-ten % Aspi-ran-ten
-  As-pi-ra-ti-on % Aspi-ra-ti-on
-  As-pi-ra-tio-nen % Aspi-ra-tio-nen
-  aus-zu-ar-ten % aus-zuar-ten
-  au-to-ri-tä-re % au-to-ri-täre
-  Axi-oms % Axioms
-  Bas-sins % Bassins
-  Bay-er % Bayer
-  be-dach-te-ren % be-dach-teren
-  Bi-blio-gra-phi-en % Bi-blio-gra-phien
-  Bie-re % Biere
-  bi-nä-re % bi-näre
-  bi-nä-rem % bi-närem
-  bi-nä-ren % bi-nären
-  bi-nä-rer % bi-närer
-  bi-nä-res % bi-näres
-  Bio-gra-phi-en % Bio-gra-phien
-  blö-dem % blödem
-  blo-^^ffem % blo^^ffem
-  Bö-en % Böen
-  brü-stest % brüstest
-  büff-le % büffle
-  bü-ge-le % bü-gele
-  Bul-le-tin % Bulle-tin
-  Cha-ot % Chaot
-  Cha-rak-te-re % Cha-rak-tere
-  Cha-rak-te-ren % Cha-rak-teren
-  Che-fin % Chefin
-  Chi-nas % Chinas
-  Clo-chard % Clochard
-  Clo-chards % Clochards
-  Da-che % Dache
-  Da-ches % Daches
-  Da-chung % Dachung
-  de-fi-zi-tä-re % de-fi-zi-täre
-  de-fla-tio-nä-re % de-fla-tio-näre
-  de-fla-tio-nä-rem % de-fla-tio-närem
-  de-fla-tio-nä-ren % de-fla-tio-nären
-  de-fla-tio-nä-rer % de-fla-tio-närer
-  de-fla-tio-nä-res % de-fla-tio-näres
-  Desk-top % Desktop
-  Desk-tops % Desktops
-  Des-pot % Despot
-  Des-po-ten % Despo-ten
-  dich-te-ren % dich-teren
-  Dien-sten % Diensten
-  Dien-stes % Dienstes
-  dien-te % diente
-  dien-ten % dienten
-  dien-test % dientest
-  dien-tet % dientet
-  doo-fe % doofe
-  doo-fem % doofem
-  doo-fen % doofen
-  doo-fer % doofer
-  doo-fe-re % doofe-re
-  doo-fe-rem % doofe-rem
-  doo-fe-ren % doofe-ren
-  doo-fe-rer % doofe-rer
-  doo-fe-res % doofe-res
-  doo-fes % doofes
-  Dou-bles % Doubles
-  Dou-blet-te % Doublet-te
-  Dra-gée % Dragée
-  Dra-gées % Dragées
-  dunk-le % dunkle
-  dunk-lem % dunklem
-  dunk-len % dunklen
-  dunk-les % dunkles
-  düst-re % düstre
-  ech-te-ren % ech-teren
-  ega-li-tä-re % ega-li-täre
-  ei-lends % eilends
-  ei-nen % einen
-  ei-nend % einend
-  ei-nen-de % einen-de
-  ei-nen-dem % einen-dem
-  ei-nen-den % einen-den
-  ei-nen-der % einen-der
-  ei-nen-des % einen-des
-  eit-re % eitre
-  ek-le % ekle
-  Ek-lip-sen % Eklip-sen
-  eli-tä-re % eli-täre
-  en-do-therm % endo-therm
-  en-do-ther-me % endo-ther-me
-  en-do-ther-mem % endo-ther-mem
-  en-do-ther-men % endo-ther-men
-  en-do-ther-mer % endo-ther-mer
-  en-do-ther-mes % endo-ther-mes
-  ent-re % entre
-  En-tre-pre-neur % Entre-pre-neur
-  En-tre-pre-neu-ren % Entre-pre-neu-ren
-  En-tre-pre-neurs % Entre-pre-neurs
-  En-tro-pie % Entro-pie
-  En-zi-ans % En-zians
-  Eu-tha-na-sie % Eutha-na-sie
-  evo-lu-tio-nä-re % evo-lu-tio-näre
-  evo-lu-tio-nä-rem % evo-lu-tio-närem
-  evo-lu-tio-nä-ren % evo-lu-tio-nären
-  evo-lu-tio-nä-rer % evo-lu-tio-närer
-  evo-lu-tio-nä-res % evo-lu-tio-näres
-  ex-ak-te-re % ex-ak-tere
-  fa-de-re % fa-dere
-  fa-de-rem % fa-derem
-  fa-de-ren % fa-deren
-  fa-de-rer % fa-derer
-  fa-de-res % fa-deres
-  fa-de-ste % fa-deste
-  fa-de-stem % fa-destem
-  fa-de-sten % fa-desten
-  fa-de-ster % fa-dester
-  fa-de-stes % fa-destes
-  fai-re % faire
-  fal-sche % falsche
-  fal-schem % falschem
-  fal-schen % falschen
-  fal-scher % falscher
-  fal-sche-re % falsche-re
-  fal-sche-rem % falsche-rem
-  fal-sche-ren % falsche-ren
-  fal-sche-rer % falsche-rer
-  fal-sche-res % falsche-res
-  fal-sches % falsches
-  fal-sche-ste % falsche-ste
-  fal-sche-stem % falsche-stem
-  fal-sche-sten % falsche-sten
-  fal-sche-ster % falsche-ster
-  fal-sche-stes % falsche-stes
-  Fan-ta-si-en % Fan-tasi-en
-  Fe-bru-ars % Fe-bruars
-  feuch-te-ren % feuch-teren
-  Fi-as-ko % Fias-ko
-  Fi-as-kos % Fias-kos
-  fieb-re % fiebre
-  fle-xi-blem % fle-xiblem
-  fle-xi-blen % fle-xiblen
-  fle-xi-bler % fle-xibler
-  fle-xi-ble-re % fle-xible-re
-  fle-xi-ble-rem % fle-xible-rem
-  fle-xi-ble-ren % fle-xible-ren
-  fle-xi-ble-res % fle-xible-res
-  fle-xi-bles % fle-xibles
-  flie-^^ffest % flie^^ffest
-  Flo-ri-ans % Flo-rians
-  Flu-ge % Fluge
-  Flu-or % Fluor
-  flüst-re % flüstre
-  frak-ta-le % frak-tale
-  frak-ta-lem % frak-talem
-  frak-ta-len % frak-talen
-  frak-ta-ler % frak-taler
-  frak-ta-les % frak-tales
-  Frö-sche % Frösche
-  Frö-schen % Fröschen
-  Ful-das % Fuldas
-  funk-le % funkle
-  Funk-tio-nä-re % Funk-tio-näre
-  Funk-tio-nä-ren % Funk-tio-nären
-  furch-te % furchte
-  furch-ten % furchten
-  fu-^^ffend % fu^^ffend
-  fu-^^ffen-dem % fu^^ffen-dem
-  fu-^^ffen-der % fu^^ffen-der
-  fütt-re % füttre
-  gab-le % gable
-  Gab-ler % Gabler
-  Gab-lern % Gablern
-  Gab-lers % Gablers
-  Gal-li-er % Gal-lier
-  Gal-li-ers % Gal-liers
-  Gau-chos % Gauchos
-  gauk-le % gaukle
-  ge-an-gelt % gean-gelt
-  ge-an-gel-te % gean-gel-te
-  ge-an-gel-tem % gean-gel-tem
-  ge-an-gel-ten % gean-gel-ten
-  ge-an-gel-ter % gean-gel-ter
-  ge-an-gel-tes % gean-gel-tes
-  ge-an-kert % gean-kert
-  ge-an-ker-te % gean-ker-te
-  ge-an-ker-tem % gean-ker-tem
-  ge-an-ker-ten % gean-ker-ten
-  ge-an-ker-ter % gean-ker-ter
-  ge-an-ker-tes % gean-ker-tes
-  ge-ant-wor-tet % geant-wor-tet
-  ge-char-tert % gechar-tert
-  ge-char-ter-te % gechar-ter-te
-  ge-char-ter-tem % gechar-ter-tem
-  ge-char-ter-ten % gechar-ter-ten
-  ge-char-ter-ter % gechar-ter-ter
-  ge-char-ter-tes % gechar-ter-tes
-  Ge-fä-^^ffe % Ge-fä^^ffe
-  Ge-fä-^^ffen % Ge-fä^^ffen
-  Ge-fä-^^ffes % Ge-fä^^ffes
-  ge-fau-lenzt % gefau-lenzt
-  ge-fault % gefault
-  ge-faul-te % gefaul-te
-  ge-faul-tem % gefaul-tem
-  ge-faul-ten % gefaul-ten
-  ge-faul-ter % gefaul-ter
-  ge-faul-tes % gefaul-tes
-  gefoppt % gefoppt
-  ge-fopp-te % gefopp-te
-  ge-fopp-tem % gefopp-tem
-  ge-fopp-ten % gefopp-ten
-  ge-fopp-ter % gefopp-ter
-  ge-fopp-tes % gefopp-tes
-  ge-hüllt % gehüllt
-  ge-hüll-te % gehüll-te
-  ge-hüll-tem % gehüll-tem
-  ge-hüll-ten % gehüll-ten
-  ge-hüll-ter % gehüll-ter
-  ge-hüll-tes % gehüll-tes
-  ge-hüpft % gehüpft
-  ge-klickt % geklickt
-  Ge-kni-ster % Ge-knister
-  Ge-kni-sters % Ge-knisters
-  ge-kni-stert % ge-knistert
-  ge-linkt % gelinkt
-  ge-link-te % gelink-te
-  ge-link-tem % gelink-tem
-  ge-link-ten % gelink-ten
-  ge-link-ter % gelink-ter
-  ge-link-tes % gelink-tes
-  ge-lü-stest % ge-lüstest
-  ge-mä-^^ffem % ge-mä^^ffem
-  ge-misch-te-ren % ge-misch-teren
-  ge-na-sest % ge-nasest
-  ge-na-set % ge-naset
-  Gen-dar-men % Gen-darmen
-  Ge-ne-rä-le % Ge-nerä-le
-  Ge-ne-rä-len % Ge-nerä-len
-  ge-nie-^^ffest % ge-nie^^ffest
-  ge-nö^^fft % genö^^fft
-  Ge-nüs-se % Genüs-se
-  Ge-nüs-sen % Genüs-sen
-  ge-ohr-feigt % geohr-feigt
-  ge-ohr-feig-te % geohr-feig-te
-  ge-ohr-feig-tem % geohr-feig-tem
-  ge-ohr-feig-ten % geohr-feig-ten
-  ge-ohr-feig-ter % geohr-feig-ter
-  ge-ohr-feig-tes % geohr-feig-tes
-  Ge-räu-sche % Ge-räusche
-  Ge-räu-schen % Ge-räuschen
-  Ge-räu-sches % Ge-räusches
-  ge-rech-te-ren % ge-rech-teren
-  ge-rö-chelt % ge-röchelt
-  ge-rö-chel-te % ge-röchel-te
-  ge-rö-chel-tem % ge-röchel-tem
-  ge-rö-chel-ten % ge-röchel-ten
-  ge-rö-chel-ter % ge-röchel-ter
-  ge-rö-chel-tes % ge-röchel-tes
-  ge-rö-stet % ge-röstet
-  ge-rö-ste-te % ge-röste-te
-  ge-rö-ste-tem % ge-röste-tem
-  ge-rö-ste-ten % ge-röste-ten
-  ge-rö-ste-ter % ge-röste-ter
-  ge-rö-ste-tes % ge-röste-tes
-  ge-rö-tet % ge-rötet
-  ge-rö-te-te % ge-röte-te
-  ge-rö-te-tem % ge-röte-tem
-  ge-rö-te-ten % ge-röte-ten
-  ge-rö-te-ter % ge-röte-ter
-  ge-rö-te-tes % ge-röte-tes
-  Ge-rü-stes % Ge-rüstes
-  ge-saust % gesaust
-  ge-sau-ste % gesau-ste
-  ge-sau-stem % gesau-stem
-  ge-sau-sten % gesau-sten
-  ge-sau-ster % gesau-ster
-  ge-sau-stes % gesau-stes
-  ge-schef-felt % geschef-felt
-  ge-schef-fel-te % geschef-fel-te
-  ge-schef-fel-tem % geschef-fel-tem
-  ge-schef-fel-ten % geschef-fel-ten
-  ge-schef-fel-ter % geschef-fel-ter
-  ge-schef-fel-tes % geschef-fel-tes
-  ge-schick-te-re % ge-schick-tere
-  ge-schick-te-rem % ge-schick-terem
-  ge-schick-te-ren % ge-schick-teren
-  ge-schick-te-rer % ge-schick-terer
-  ge-schick-te-res % ge-schick-teres
-  ge-staf-felt % gestaf-felt
-  ge-staf-fel-te % gestaf-fel-te
-  ge-staf-fel-tem % gestaf-fel-tem
-  ge-staf-fel-ten % gestaf-fel-ten
-  ge-staf-fel-ter % gestaf-fel-ter
-  ge-staf-fel-tes % gestaf-fel-tes
-  ge-such-te-ren % ge-such-teren
-  ge-ulkt % geulkt
-  ge-ulk-te % geulk-te
-  ge-ulk-tem % geulk-tem
-  ge-ulk-ten % geulk-ten
-  ge-ulk-ter % geulk-ter
-  ge-ulk-tes % geulk-tes
-  ge-woll-te-re % ge-woll-tere
-  ge-woll-te-rem % ge-woll-terem
-  ge-woll-te-ren % ge-woll-teren
-  ge-woll-te-rer % ge-woll-terer
-  ge-woll-te-res % ge-woll-teres
-  ge-woll-te-ste % ge-woll-teste
-  ge-woll-te-stem % ge-woll-testem
-  ge-woll-te-sten % ge-woll-testen
-  ge-woll-te-ster % ge-woll-tester
-  ge-woll-te-stes % ge-woll-testes
-  ge-wünsch-te-ren % ge-wünsch-teren
-  gie-^^ffest % gie^^ffest
-  gipf-le % gipfle
-  Glan-ze % Glanze
-  Go-yas % Goyas
-  Grie-^^ffes % Grie^^ffes
-  Gro-bi-ans % Gro-bians
-  gro-^^ffe % gro^^ffe
-  gro-^^ffem % gro^^ffem
-  gro-^^ffen % gro^^ffen
-  gro-^^ffer % gro^^ffer
-  gro-^^ffes % gro^^ffes
-  grü-be-le % grü-bele
-  Grü-be-lei % Grü-belei
-  Grü-be-lei-en % Grü-belei-en
-  häk-le % häkle
-  Häl-se % Hälse
-  Häl-sen % Hälsen
-  han-ge % hange
-  hätsch-le % hätschle
-  hau-te % haute
-  hau-ten % hauten
-  hau-test % hautest
-  hau-tet % hautet
-  hech-le % hechle
-  heid-ni-sche % heid-nische
-  heid-ni-schem % heid-nischem
-  heid-ni-schen % heid-nischen
-  heid-ni-scher % heid-nischer
-  heid-ni-sches % heid-nisches
-  hei-^^ffem % hei^^ffem
-  Hekt-ar % Hektar
-  Hekt-ars % Hektars
-  He-ras % Heras
-  hier-an % hieran
-  hier-aus % hieraus
-  hie-^^ffest % hie^^ffest
-  hind-re % hindre
-  Hin-du-is-mus % Hin-duis-mus
-  hint-an % hintan
-  Hir-sche % Hirsche
-  Hir-schen % Hirschen
-  Hir-sches % Hirsches
-  hoh-le-re % hohle-re
-  hoh-le-ren % hohle-ren
-  Ho-lo-gra-phi-en % Ho-lo-gra-phien
-  Ho-stes-sen % Hostes-sen
-  hu-ma-ni-tä-re % hu-ma-ni-täre
-  Ide-als % Ideals
-  ide-al-ste % ideal-ste
-  ide-al-stem % ideal-stem
-  ide-al-sten % ideal-sten
-  ide-al-ster % ideal-ster
-  ide-al-stes % ideal-stes
-  Idi-ots % Idiots
-  ima-gi-nä-re % ima-gi-näre
-  ima-gi-nä-rem % ima-gi-närem
-  ima-gi-nä-ren % ima-gi-nären
-  ima-gi-nä-rer % ima-gi-närer
-  ima-gi-nä-res % ima-gi-näres
-  Im-pre-sa-rio % Im-presa-rio
-  Im-pre-sa-ri-os % Im-presa-ri-os
-  in-fla-tio-nä-re % in-fla-tio-näre
-  in-fla-tio-nä-rem % in-fla-tio-närem
-  in-fla-tio-nä-ren % in-fla-tio-nären
-  in-fla-tio-nä-rer % in-fla-tio-närer
-  In-fla-tio-nä-res % In-fla-tio-näres
-  in-ji-zie-re % inji-zie-re
-  in-ji-zie-ren % inji-zie-ren
-  in-ji-zie-rend % inji-zie-rend
-  in-ji-zie-ren-de % inji-zie-ren-de
-  in-ji-zie-ren-dem % inji-zie-ren-dem
-  in-ji-zie-ren-den % inji-zie-ren-den
-  in-ji-zie-ren-der % inji-zie-ren-der
-  in-ji-zie-ren-des % inji-zie-ren-des
-  in-ji-zierst % inji-zierst
-  in-ji-ziert % inji-ziert
-  in-ji-zier-te % inji-zier-te
-  in-ji-zier-tem % inji-zier-tem
-  in-ji-zier-ten % inji-zier-ten
-  in-ji-zier-ter % inji-zier-ter
-  in-ji-zier-tes % inji-zier-tes
-  in-ji-zier-test % inji-zier-test
-  in-ji-zier-tet % inji-zier-tet
-  in-tak-te-re % in-tak-tere
-  in-tak-te-rem % in-tak-terem
-  in-tak-te-ren % in-tak-teren
-  in-tak-te-rer % in-tak-terer
-  in-tak-te-res % in-tak-teres
-  Ja-gu-ars % Ja-guars
-  Jah-we % Jahwe
-  Jah-wes % Jahwes
-  Je-su-it % Je-suit
-  jon-glie-re % jonglie-re
-  jon-glie-ren % jonglie-ren
-  jon-glie-rend % jonglie-rend
-  jon-glie-ren-de % jonglie-ren-de
-  jon-glie-ren-dem % jonglie-ren-dem
-  jon-glie-ren-den % jonglie-ren-den
-  jon-glie-ren-der % jonglie-ren-der
-  jon-glie-ren-des % jonglie-ren-des
-  jon-glierst % jonglierst
-  jon-gliert % jongliert
-  jon-glier-te % jonglier-te
-  jon-glier-ten % jonglier-ten
-  jon-glier-test % jonglier-test
-  jon-glier-tet % jonglier-tet
-  Ju-ni-ors % Ju-niors
-  Ju-ris-pru-denz % Ju-rispru-denz
-  Ju-sti-ti-ars % Ju-sti-tiars
-  Ka-li-for-ni-er % Ka-li-for-nier
-  Kal-li-gra-phi-en % Kal-li-gra-phien
-  kä-me % käme
-  kä-men % kämen
-  Ka-nä-le % Kanä-le
-  Ka-nä-len % Kanä-len
-  Ka-plan % Kaplan
-  Kar-di-nä-le % Kar-dinäle
-  Kar-di-nä-len % Kar-dinälen
-  kasp-re % kaspre
-  Ka-vi-ars % Ka-viars
-  ka-vi-tös % ka-vitös
-  ka-vi-tö-se % ka-vitö-se
-  ka-vi-tö-sem % ka-vitö-sem
-  ka-vi-tö-sen % ka-vitö-sen
-  ka-vi-tö-ser % ka-vitö-ser
-  ka-vi-tö-ses % ka-vitö-ses
-  Ketch-ups % Ketchups
-  klett-re % klettre
-  knap-pe-rem % knap-perem
-  Knä-ste % Knäste
-  Knä-sten % Knästen
-  knosp-ten % knospten
-  Koa-la % Koala
-  Kof-fe-ins % Koffe-ins
-  Ko-ka-in % Ko-kain
-  Ko-lum-bi-ens % Ko-lum-biens
-  Kom-in-tern % Komin-tern
-  Kom-mis-sio-nä-re % Kom-mis-sio-näre
-  Kom-mis-sio-nä-ren % Kom-mis-sio-nären
-  kom-pak-te-re % kom-pak-tere
-  kom-pak-te-rem % kom-pak-terem
-  kom-pak-te-ren % kom-pak-teren
-  kom-pak-te-rer % kom-pak-terer
-  kom-pak-te-res % kom-pak-teres
-  kom-pe-ten-te % kom-pe-tente
-  kom-pe-ten-tem % kom-pe-tentem
-  kom-pe-ten-ten % kom-pe-tenten
-  kom-pe-ten-ter % kom-pe-tenter
-  kom-pe-ten-te-re % kom-pe-tente-re
-  kom-pe-ten-te-rem % kom-pe-tente-rem
-  kom-pe-ten-te-ren % kom-pe-tente-ren
-  kom-pe-ten-te-rer % kom-pe-tente-rer
-  kom-pe-ten-te-res % kom-pe-tente-res
-  kom-pe-ten-tes % kom-pe-tentes
-  kom-pe-ten-te-ste % kom-pe-tente-ste
-  kom-pe-ten-te-stem % kom-pe-tente-stem
-  kom-pe-ten-te-sten % kom-pe-tente-sten
-  kom-pe-ten-te-ster % kom-pe-tente-ster
-  kom-pe-ten-te-stes % kom-pe-tente-stes
-  Kom-po-ste % Kom-poste
-  Kom-po-sten % Kom-posten
-  Kom-po-stes % Kom-postes
-  Kon-cho-ide % Kon-choide
-  Kon-cho-iden % Kon-choiden
-  Kon-fek-tio-nä-re % Kon-fek-tio-näre
-  Kon-fek-tio-nä-ren % Kon-fek-tio-nären
-  kon-flu-en-te % kon-flu-ente
-  kon-flu-en-tem % kon-flu-entem
-  kon-flu-en-ten % kon-flu-enten
-  kon-flu-en-ter % kon-flu-enter
-  kon-flu-en-tes % kon-flu-entes
-  Kon-tra-ste % Kon-traste
-  Kon-tra-sten % Kon-trasten
-  Kon-tra-stes % Kon-trastes
-  kon-tra-stier % kon-trastier
-  kon-tra-stie-re % kon-trastie-re
-  kon-tra-stie-ren % kon-trastie-ren
-  kon-tra-stie-rend % kon-trastie-rend
-  kon-tra-stie-ren-de % kon-trastie-ren-de
-  kon-tra-stie-ren-dem % kon-trastie-ren-dem
-  kon-tra-stie-ren-den % kon-trastie-ren-den
-  kon-tra-stie-ren-der % kon-trastie-ren-der
-  kon-tra-stie-ren-des % kon-trastie-ren-des
-  kon-tra-stierst % kon-trastierst
-  kon-tra-stiert % kon-trastiert
-  kon-tra-stier-te % kon-trastier-te
-  kon-tra-stier-ten % kon-trastier-ten
-  kon-tra-stier-test % kon-trastier-test
-  kon-tra-stier-tet % kon-trastier-tet
-  Kop-fe % Kopfe
-  kor-rek-te-re % kor-rek-tere
-  kor-rek-te-rem % kor-rek-terem
-  kor-rek-te-ren % kor-rek-teren
-  kor-rek-te-rer % kor-rek-terer
-  kor-rek-te-res % kor-rek-teres
-  kra-kee-lend % kra-keelend
-  kra-kee-len-de % kra-keelen-de
-  kra-kee-len-dem % kra-keelen-dem
-  kra-kee-len-den % kra-keelen-den
-  kra-kee-len-der % kra-keelen-der
-  kra-kee-len-des % kra-keelen-des
-  kri-tik-lo-se % kri-tiklo-se
-  kri-tik-lo-sem % kri-tiklo-sem
-  kri-tik-lo-sen % kri-tiklo-sen
-  kri-tik-lo-ser % kri-tiklo-ser
-  kri-tik-lo-ses % kri-tiklo-ses
-  kür-ze-ste % kür-zeste
-  kür-ze-stem % kür-zestem
-  kür-ze-sten % kür-zesten
-  kür-ze-ster % kür-zester
-  kür-ze-stes % kür-zestes
-  kusch-le % kuschle
-  läch-le % lächle
-  La-mé % Lamé
-  La-més % Lamés
-  La-sa-gne % Lasa-gne
-  La-sa-gnen % Lasa-gnen
-  läst-re % lästre
-  Leg-as-the-nie % Leg-asthe-nie
-  Leg-as-the-ni-ker % Leg-asthe-ni-ker
-  Leg-as-the-ni-ke-rin % Leg-asthe-ni-ke-rin
-  Leg-as-the-ni-ke-rin-nen % Leg-asthe-ni-ke-rin-nen
-  Leg-as-the-ni-kern % Leg-asthe-ni-kern
-  Leg-as-the-ni-kers % Leg-asthe-ni-kers
-  le-gen-dä-re % le-gen-däre
-  le-gen-dä-rem % le-gen-därem
-  le-gen-dä-ren % le-gen-dären
-  le-gen-dä-rer % le-gen-därer
-  le-gen-dä-res % le-gen-däres
-  Le-gio-nä-re % Le-gio-näre
-  Le-gio-nä-ren % Le-gio-nären
-  leich-te-ren % leich-teren
-  lie-^^ffest % lie^^ffest
-  lind-re % lindre
-  Li-ne-als % Li-neals
-  lisp-le % lisple
-  Li-tho-gra-phi-en % Li-tho-gra-phien
-  löff-le % löffle
-  Ly-ze-ums % Ly-zeums
-  Ma-gen-ta % Magen-ta
-  Ma-gi-er % Ma-gier
-  Ma-gi-ers % Ma-giers
-  Mam-mo-gra-phi-en % Mam-mo-gra-phien
-  Mar-ti-nas % Mar-tinas
-  Mar-xi-sten % Marxi-sten
-  Ma-xi-mi-li-ans % Ma-xi-mi-lians
-  Me-ga-li-then % Me-ga-lithen
-  meist-re % meistre
-  Men-thol % Menthol
-  Men-thols % Menthols
-  Me-nüs % Menüs
-  Mi-cha-els % Mi-chaels
-  mi-li-zio-nä-re % mi-li-zio-näre
-  Mi-li-zio-nä-ren % Mi-li-zio-nären
-  Mil-li-ar-dä-re % Mil-li-ar-däre
-  Mil-li-ar-dä-ren % Mil-li-ar-dären
-  Mil-li-ar-dä-rin % Mil-li-ar-därin
-  Mil-li-ar-dä-rin-nen % Mil-li-ar-därin-nen
-  Mil-lio-nä-re % Mil-lio-näre
-  Mil-lio-nä-ren % Mil-lio-nären
-  mind-re % mindre
-  Mi-ri-am % Mi-riam
-  Mi-ri-ams % Mi-riams
-  mi^^ff-trau-isch-ste % mi^^ff-trauisch-ste
-  mi^^ff-trau-isch-stem % mi^^ff-trauisch-stem
-  mi^^ff-trau-isch-sten % mi^^ff-trauisch-sten
-  mi^^ff-trau-isch-ster % mi^^ff-trauisch-ster
-  mi^^ff-trau-isch-stes % mi^^ff-trauisch-stes
-  Mit-ta-ge % Mit-tage
-  Mit-ta-gen % Mit-tagen
-  Moi-ré % Moiré
-  Mo-no-gra-phi-en % Mo-no-gra-phien
-  mul-ti-pler % mul-tipler
-  munk-le % munkle
-  must-re % mustre
-  Ne-gli-gé % Ne-gligé
-  Ne-gli-gés % Ne-gligés
-  Obo-en % Oboen
-  omi-nö-se % omi-nöse
-  omi-nö-sem % omi-nösem
-  omi-nö-sen % omi-nösen
-  omi-nö-ser % omi-nöser
-  omi-nö-ses % omi-nöses
-  opf-re % opfre
-  or-di-nä-re % or-di-näre
-  or-di-nä-rem % or-di-närem
-  or-di-nä-ren % or-di-nären
-  or-di-nä-rer % or-di-närer
-  or-di-nä-re-re % or-di-näre-re
-  or-di-nä-re-rem % or-di-näre-rem
-  or-di-nä-re-ren % or-di-näre-ren
-  or-di-nä-re-rer % or-di-näre-rer
-  or-di-nä-re-res % or-di-näre-res
-  or-di-nä-res % or-di-näres
-  ori-gi-nä-re % ori-gi-näre
-  ori-gi-nä-rem % ori-gi-närem
-  ori-gi-nä-ren % ori-gi-nären
-  ori-gi-nä-rer % ori-gi-närer
-  ori-gi-nä-res % ori-gi-näres
-  Or-tho-gra-phi-en % Or-tho-gra-phien
-  Oze-an % Ozean
-  Oze-ans % Ozeans
-  Pap-stes % Papstes
-  pa-ra-si-tä-re % pa-ra-si-täre
-  pas-sa-blem % pas-sablem
-  pas-sa-blen % pas-sablen
-  pas-sa-bler % pas-sabler
-  pas-sa-bles % pas-sables
-  Pa-vi-ans % Pa-vians
-  Pen-sio-nä-re % Pen-sio-näre
-  Pen-sio-nä-ren % Pen-sio-nären
-  per-fek-te-re % per-fek-tere
-  per-fek-te-rem % per-fek-terem
-  per-fek-te-ren % per-fek-teren
-  per-fek-te-rer % per-fek-terer
-  per-fek-te-res % per-fek-teres
-  pfeff-re % pfeffre
-  Phan-ta-si-en % Phan-tasi-en
-  Phi-lo-so-phi-en % Phi-lo-so-phien
-  Pho-to-gra-phi-en % Pho-to-gra-phien
-  Pin-gu-in % Pin-guin
-  plum-pe-rem % plum-perem
-  Po-et % Poet
-  Por-no-gra-phi-en % Por-no-gra-phien
-  Prä-va-lenz % Präva-lenz
-  pri-mä-re % pri-märe
-  pri-mä-rem % pri-märem
-  pri-mä-ren % pri-mären
-  pri-mä-rer % pri-märer
-  pri-mä-res % pri-märes
-  pu-bli-kes % pu-blikes
-  puff-re % puffre
-  pulv-re % pulvre
-  quä-lend-ste % quälend-ste
-  quä-lend-stem % quälend-stem
-  quä-lend-sten % quälend-sten
-  quä-lend-ster % quälend-ster
-  quä-lend-stes % quälend-stes
-  Ra-fa-el % Rafa-el
-  Ra-fa-els % Rafaels
-  Ra-pha-els % Ra-phaels
-  Rau-me % Raume
-  Räu-sche % Räusche
-  räusp-re % räuspre
-  re-vo-lu-tio-nä-re % re-vo-lu-tio-näre
-  re-vo-lu-tio-nä-rem % re-vo-lu-tio-närem
-  re-vo-lu-tio-nä-ren % re-vo-lu-tio-nären
-  re-vo-lu-tio-nä-rer % re-vo-lu-tio-närer
-  re-vo-lu-tio-nä-res % re-vo-lu-tio-näres
-  röch-le % röchle
-  Rös-chen % Röschen
-  Ru-in % Ruin
-  rui-nö-se % rui-nöse
-  rui-nö-sem % rui-nösem
-  rui-nö-sen % rui-nösen
-  rui-nö-ser % rui-nöser
-  rui-nö-ses % rui-nöses
-  run-der % runder
-  rü-stest % rüstest
-  rü-stet % rüstet
-  sai-so-nal % sai-sonal
-  sai-so-na-le % sai-sona-le
-  sai-so-na-lem % sai-sona-lem
-  sai-so-na-len % sai-sona-len
-  sai-so-na-ler % sai-sona-ler
-  sai-so-na-les % sai-sona-les
-  sa-lop-pe-rem % sa-lop-perem
-  sa-ni-tä-re % sa-ni-täre
-  schauk-le % schaukle
-  scheff-le % scheffle
-  scheit-re % scheitre
-  schie-^^ffest % schie^^ffest
-  schlap-pe-rem % schlap-perem
-  schlech-te-ren % schlech-teren
-  Schlen-dri-ans % Schlen-drians
-  schlich-te-ren % schlich-teren
-  schlie-^^ffest % schlie^^ffest
-  schmett-re % schmettre
-  schnö-dem % schnödem
-  schnörk-le % schnörkle
-  schnüff-le % schnüffle
-  Scho-bers % Schobers
-  schust-re % schustre
-  schwaf-le % schwafle
-  schwef-le % schwefle
-  schwel-te % schwelte
-  schwel-test % schweltest
-  schwel-tet % schweltet
-  se-kun-dä-re % se-kun-däre
-  se-kun-dä-rem % se-kun-därem
-  se-kun-dä-ren % se-kun-dären
-  se-kun-dä-rer % se-kun-därer
-  se-kun-dä-res % se-kun-däres
-  Se-ni-ors % Se-niors
-  Skan-di-na-vi-ens % Skan-di-na-viens
-  Skan-di-na-vi-er % Skan-di-na-vier
-  Skan-di-na-vi-ers % Skan-di-na-viers
-  Ski-er % Skier
-  So-li-tä-re % So-li-täre
-  Spa-ghet-ti % Spaghet-ti
-  Spa-ni-er % Spa-nier
-  Spa-ni-ers % Spa-niers
-  Spie-^^ffes % Spie^^ffes
-  spie-^^ffest % spie^^ffest
-  sprenk-le % sprenkle
-  sprie-^^ffest % sprie^^ffest
-  sprö-dem % sprödem
-  staff-le % staffle
-  stah-len % stahlen
-  stap-le % staple
-  sta-tio-nä-re % sta-tio-näre
-  sta-tio-nä-rem % sta-tio-närem
-  sta-tio-nä-ren % sta-tio-nären
-  sta-tio-nä-rer % sta-tio-närer
-  sta-tio-nä-res % sta-tio-näres
-  Ste-no-gra-phi-en % Ste-no-gra-phien
-  Ste-tho-skop % Stetho-skop
-  Ste-tho-sko-pe % Stetho-sko-pe
-  Ste-tho-sko-pen % Stetho-sko-pen
-  Ste-tho-skops % Stetho-skops
-  stie-^^ffest % stie^^ffest
-  Stot-te-rers % Stot-terers
-  stu-re % sture
-  stu-re-re % sture-re
-  stu-re-ren % sture-ren
-  stu-re-rer % sture-rer
-  sü-^^ffem % sü^^ffem
-  Ta-ba-ke % Ta-bake
-  ta-fe-le % ta-fele
-  taf-le % tafle
-  tag-ein % tagein
-  tak-le % takle
-  Tam-tam % Tamtam
-  Tam-tams % Tamtams
-  tätsch-le % tätschle
-  Te-le-fo-nat % Te-le-fonat
-  Te-le-fo-na-te % Te-le-fona-te
-  Te-le-fo-na-ten % Te-le-fona-ten
-  Te-le-fo-nats % Te-le-fonats
-  Te-nö-re % Tenö-re
-  Te-nö-ren % Tenö-ren
-  Ther-mo-sta-ten % Ther-mo-staten
-  tie-fer % tiefer
-  tie-fe-re % tiefe-re
-  tie-fe-rem % tiefe-rem
-  tie-fe-ren % tiefe-ren
-  tie-fe-rer % tiefe-rer
-  tie-fe-res % tiefe-res
-  töpf-re % töpfre
-  To-po-gra-phi-en % To-po-gra-phien
-  tö-rich-te-ren % tö-rich-teren
-  tork-le % torkle
-  to-ta-li-tä-re % to-ta-li-täre
-  to-ta-li-tä-re-ren % to-ta-li-täreren
-  trocke-ne % trockene
-  trocke-nem % trockenem
-  trocke-nen % trockenen
-  trocke-ner % trockener
-  trocke-ne-re % trockene-re
-  trocke-ne-rem % trockene-rem
-  trocke-ne-ren % trockene-ren
-  trocke-ne-rer % trockene-rer
-  trocke-ne-res % trockene-res
-  trocke-nes % trockenes
-  trü-ber % trüber
-  trü-be-re % trübe-re
-  trü-be-rem % trüber-em
-  trü-be-ren % trüber-en
-  trü-be-rer % trüber-er
-  trü-be-res % trüber-es
-  Tsche-chi-ens % Tsche-chiens
-  tusch-le % tuschle
-  Ty-po-gra-phi-en % Ty-po-gra-phien
-  ubi-qui-tä-re % ubi-qui-täre
-  uni-ver-si-tä-re % uni-ver-si-täre
-  Va-rie-té % Va-rieté
-  Va-rie-tés % Va-rietés
-  ver-dirbst % verdirbst
-  ver-dirbt % verdirbt
-  ver-drie-^^ffest % ver-drie^^ffest
-  ver-düst-re % ver-düstre
-  ver-ek-le % ver-ekle
-  ver-kupf-re % ver-kupfre
-  ver-pulv-re % ver-pulvre
-  ver-rä-te-ri-sche % ver-rä-te-rische
-  ver-rä-te-ri-schem % ver-rä-te-rischem
-  ver-rä-te-ri-schen % ver-rä-te-rischen
-  ver-rä-te-ri-scher % ver-rä-te-rischer
-  ver-rä-te-ri-sches % ver-rä-te-risches
-  ver-schie-de-ne-re % ver-schie-de-nere
-  ver-schie-de-ne-rem % ver-schie-de-nerem
-  ver-schie-de-ne-ren % ver-schie-de-neren
-  ver-schie-de-ne-rer % ver-schie-de-nerer
-  ver-schie-de-ne-res % ver-schie-de-neres
-  ver-schlech-terst % ver-schlechterst
-  ver-schlecht-re % ver-schlechtre
-  ver-übe-le % ver-übele
-  ver-wü-stest % ver-wüstest
-  Ve-te-ri-nä-re % Ve-te-ri-näre
-  Ve-te-ri-nä-ren % Ve-te-ri-nären
-  Vi-sio-nä-re % Vi-sio-näre
-  Vi-sio-nä-ren % Vi-sio-nären
-  voll-ends % vollends
-  Wah-len % Wahlen
-  Wäm-ser % Wämser
-  Wäm-sern % Wämsern
-  wa-rum % warum
-  watsch-le % watschle
-  We-ges % Weges
-  wei-^^ffem % wei^^ffem
-  weit-aus % weitaus
-  wett-re % wettre
-  Wie-de-hopf % Wie-dehopf
-  Wie-de-hop-fe % Wie-dehop-fe
-  Wie-de-hop-fen % Wie-dehop-fen
-  Wie-de-hopfs % Wie-dehopfs
-  wirb-le % wirble
-  wisp-re % wispre
-  woh-le-re % wohle-re
-  woh-le-ren % wohle-ren
-  wor-in % worin
-  wor-um % worum
-  wüh-lend-ste % wühlend-ste
-  wüh-lend-sten % wühlend-sten
-  wüh-lend-stes % wühlend-stes
-  Wun-sche % Wunsche
-  Wun-sches % Wunsches
-  würf-le % würfle
-  wü-stes % wüstes
-  wü-stest % wüstest
-  wü-ste-ste % wüste-ste
-  wü-ste-stem % wüste-stem
-  wü-ste-sten % wüste-sten
-  wü-ste-ster % wüste-ster
-  wü-ste-stes % wüste-stes
-  Zai-re % Zaire
-  zirk-le % zirkle
-  zisch-le % zischle
-  Zu-be-hö-re % Zu-be-höre
-  Zu-be-hö-ren % Zu-be-hören
-  Zuch-ten % Zuchten
-  zu-frie-de-ne-re % zu-frie-de-nere
-  zu-frie-de-ne-rem % zu-frie-de-nerem
-  zu-frie-de-ne-ren % zu-frie-de-neren
-  zu-frie-de-ne-rer % zu-frie-de-nerer
-  zu-frie-de-ne-res % zu-frie-de-neres
-  Zu-tat % Zutat
-  Zu-ta-ten % Zuta-ten
-  zweif-le % zweifle
-%
-%
-% fehlende Trennungen von zusammengesetzten Wörtern
-%
-  ab-dunk-le % ab-dunkle
-  ab-flie-^^ffest % ab-flie^^ffest
-  ab-ge-brüh-te-ren % ab-ge-brüh-teren
-  ab-gie-^^ffest % ab-gie^^ffest
-  ab-lie^^ff % ablie^^ff
-  ab-rü-stest % ab-rüstest
-  ab-schie-^^ffest % ab-schie^^ffest
-  ab-schlie-^^ffest % ab-schlie^^ffest
-  an-ek-le % an-ekle
-  an-ge-fault % an-gefault
-  an-ge-faul-te % an-gefaul-te
-  an-ge-faul-tem % an-gefaul-tem
-  an-ge-faul-ten % an-gefaul-ten
-  an-ge-faul-ter % an-gefaul-ter
-  an-ge-faul-tes % an-gefaul-tes
-  an-ge-klickt % an-geklickt
-  an-ge-klick-te % an-geklick-te
-  an-ge-klick-tem % an-geklick-tem
-  an-ge-klick-ten % an-geklick-ten
-  an-ge-klick-ter % an-geklick-ter
-  an-ge-klick-tes % an-geklick-tes
-  an-ge-pö-belt % an-gepö-belt
-  an-ge-pö-bel-te % an-gepö-bel-te
-  an-ge-pö-bel-tem % an-gepö-bel-tem
-  an-ge-pö-bel-ten % an-gepö-bel-ten
-  an-ge-pö-bel-ter % an-gepö-bel-ter
-  an-ge-pö-bel-tes % an-gepö-bel-tes
-  an-glot-ze % anglot-ze
-  an-glot-zen % anglot-zen
-  an-glot-zend % anglot-zend
-  an-glot-zen-de % anglot-zen-de
-  an-glot-zen-dem % anglot-zen-dem
-  an-glot-zen-den % anglot-zen-den
-  an-glot-zen-der % anglot-zen-der
-  an-glot-zen-des % anglot-zen-des
-  an-glot-zest % anglot-zest
-  an-glotzt % anglotzt
-  an-glotz-te % anglotz-te
-  an-glotz-ten % anglotz-ten
-  an-glotz-test % anglotz-test
-  an-glotz-tet % anglotz-tet
-  an-kä-me % an-käme
-  an-kä-men % an-kämen
-  an-klick-bar % anklick-bar
-  an-klick-ba-re % anklick-ba-re
-  an-klick-ba-rem % anklick-ba-rem
-  an-klick-ba-ren % anklick-ba-ren
-  an-klick-ba-rer % anklick-ba-rer
-  an-klick-ba-res % anklick-ba-res
-  an-klicke % anklicke
-  an-klicken % anklicken
-  an-klickend % anklickend
-  an-klicken-de % anklicken-de
-  an-klicken-dem % anklicken-dem
-  an-klicken-den % anklicken-den
-  an-klicken-der % anklicken-der
-  an-klicken-des % anklicken-des
-  an-klickst % anklickst
-  an-klickt % anklickt
-  an-klick-te % anklick-te
-  an-klick-ten % anklick-ten
-  an-klick-test % anklick-test
-  an-klick-tet % anklick-tet
-  an-läch-le % an-lächle
-  an-schie-^^ffest % an-schie^^ffest
-  an-schlie-^^ffest % an-schlie^^ffest
-  an-ti-kes % an-tikes
-  an-wink-le % an-winkle
-  an-zu-klicken % an-zuklicken
-  an-zu-klickend % an-zuklickend
-  an-zu-klicken-de % an-zuklicken-de
-  an-zu-klicken-dem % an-zuklicken-dem
-  an-zu-klicken-den % an-zuklicken-den
-  an-zu-klicken-der % an-zuklicken-der
-  an-zu-klicken-des % an-zuklicken-des
-  an-zu-nä-hern % an-zunä-hern
-  an-zu-nä-hernd % an-zunä-hernd
-  an-zu-nä-hern-de % an-zunä-hern-de
-  an-zu-nä-hern-dem % an-zunä-hern-dem
-  an-zu-nä-hern-den % an-zunä-hern-den
-  an-zu-nä-hern-der % an-zunä-hern-der
-  an-zu-nä-hern-des % an-zunä-hern-des
-  an-zweif-le % an-zweifle
-  Ar-bei-ter-schaft % Ar-beiter-schaft
-  Arsch-lö-cher % Arschlö-cher
-  Arsch-lö-chern % Arschlö-chern
-  Arsch-lochs % Arschlochs
-  auf-fal-lend-ste % auf-fallend-ste
-  auf-fal-lend-stem % auf-fallend-stem
-  auf-fal-lend-sten % auf-fallend-sten
-  auf-fal-lend-ster % auf-fallend-ster
-  auf-fal-lend-stes % auf-fallend-stes
-  auf-ge-bläh-te-ren % auf-ge-bläh-teren
-  auf-ge-weck-te-re % auf-ge-weck-tere
-  auf-ge-weck-te-rem % auf-ge-weck-terem
-  auf-ge-weck-te-ren % auf-ge-weck-teren
-  auf-ge-weck-te-rer % auf-ge-weck-terer
-  auf-ge-weck-te-res % auf-ge-weck-teres
-  auf-ge-wen-det % auf-ge-wendet
-  auf-ge-wen-de-te % auf-ge-wende-te
-  auf-ge-wen-de-tem % auf-ge-wende-tem
-  auf-ge-wen-de-ten % auf-ge-wende-ten
-  auf-ge-wen-de-ter % auf-ge-wende-ter
-  auf-ge-wen-de-tes % auf-ge-wende-tes
-  auf-gie-^^ffest % auf-gie^^ffest
-  auf-lie-^^ffe % auflie-^^ffe
-  auf-lie-^^ffen % auflie-^^ffen
-  auf-lie-^^ffest % auflie^^ffest
-  auf-lie-^^ffet % auflie-^^ffet
-  auf-rü-stest % auf-rüstest
-  auf-schie-^^ffest % auf-schie^^ffest
-  auf-schlie-^^ffest % auf-schlie^^ffest
-  auf-spie-^^ffest % auf-spie^^ffest
-  auf-stap-le % auf-staple
-  auf-staust % aufstaust
-  aus-flie-^^ffest % aus-flie^^ffest
-  aus-ge-koch-te-ren % aus-ge-koch-teren
-  aus-ge-nüch-tert % aus-genüch-tert
-  aus-ge-nüch-ter-te % aus-genüch-ter-te
-  aus-ge-nüch-ter-tem % aus-genüch-ter-tem
-  aus-ge-nüch-ter-ten % aus-genüch-ter-ten
-  aus-ge-nüch-ter-ter % aus-genüch-ter-ter
-  aus-ge-nüch-ter-tes % aus-genüch-ter-tes
-  aus-ge-nützt % aus-genützt
-  aus-ge-nütz-te % aus-genütz-te
-  aus-ge-nütz-tem % aus-genütz-tem
-  aus-ge-nütz-ten % aus-genütz-ten
-  aus-ge-nütz-ter % aus-genütz-ter
-  aus-ge-nütz-tes % aus-genütz-tes
-  aus-ge-schmück-te-re % aus-ge-schmück-tere
-  aus-ge-schmück-te-rem % aus-ge-schmück-terem
-  aus-ge-schmück-te-ren % aus-ge-schmück-teren
-  aus-ge-schmück-te-rer % aus-ge-schmück-terer
-  aus-ge-schmück-te-res % aus-ge-schmück-teres
-  aus-ge-such-te-ren % aus-ge-such-teren
-  aus-gie-^^ffest % aus-gie^^ffest
-  aus-höhl-te % aus-höhlte
-  aus-höhl-ten % aus-höhlten
-  aus-höhl-test % aus-höhltest
-  aus-höhl-tet % aus-höhltet
-  aus-lie-^^ffest % aus-lie^^ffest
-  aus-löff-le % aus-löffle
-  aus-rü-stest % aus-rüstest
-  aus-schlie-^^ffest % aus-schlie^^ffest
-  aus-stie-^^ffest % aus-stie^^ffest
-  aus-würf-le % aus-würfle
-  be-eh-re % beeh-re
-  be-eh-ren % beeh-ren
-  be-eh-rend % beeh-rend
-  be-eh-ren-de % beeh-ren-de
-  be-eh-ren-dem % beeh-ren-dem
-  be-eh-ren-den % beeh-ren-den
-  be-eh-ren-der % beeh-ren-der
-  be-eh-ren-des % beeh-ren-des
-  be-ehrst % beehrst
-  be-ehrt % beehrt
-  be-ehr-te % beehr-te
-  be-ehr-tem % beehr-tem
-  be-ehr-ten % beehr-ten
-  be-ehr-ter % beehr-ter
-  be-ehr-tes % beehr-tes
-  be-ehr-test % beehr-test
-  be-ehr-tet % beehr-tet
-  be-gie-^^ffest % be-gie^^ffest
-  be-hind-re % be-hindre
-  bei-pflich-te % beipflich-te
-  bei-pflich-ten % beipflich-ten
-  bei-pflich-tend % beipflich-tend
-  bei-pflich-ten-de % beipflich-ten-de
-  bei-pflich-ten-dem % beipflich-ten-dem
-  bei-pflich-ten-den % beipflich-ten-den
-  bei-pflich-ten-der % beipflich-ten-der
-  bei-pflich-ten-des % beipflich-ten-des
-  Bei-pflich-tens % Beipflich-tens
-  bei-pflich-test % beipflich-test
-  bei-pflich-tet % beipflich-tet
-  bei-pflich-te-te % beipflich-te-te
-  bei-pflich-te-ten % beipflich-te-ten
-  bei-pflich-te-test % beipflich-te-test
-  bei-pflich-te-tet % beipflich-te-tet
-  Bei-pflich-tung % Beipflich-tung
-  Bei-pflich-tun-gen % Beipflich-tun-gen
-  bei-zu-pflich-ten % bei-zupflich-ten
-  be-kä-me % be-käme
-  be-kä-men % be-kämen
-  be-läch-le % be-lächle
-  be-lie^^ff % belie^^ff
-  be-lie-^^ffe % belie-^^ffe
-  be-lie-^^ffen % belie-^^ffen
-  be-lie^^ffest % belie^^ffest
-  be-lie^^fft % belie^^fft
-  be-must-re % be-mustre
-  be-rät % berät
-  be-rätst % berätst
-  berg-ab % bergab
-  berg-an % bergan
-  be-schei-de-ne-re % be-schei-de-nere
-  be-schei-de-ne-rem % be-schei-de-nerem
-  be-schei-de-ne-ren % be-schei-de-neren
-  be-schei-de-ne-rer % be-schei-de-nerer
-  be-schei-de-ne-res % be-schei-de-neres
-  be-schie-^^ffest % be-schie^^ffest
-  be-schlie-^^ffest % be-schlie^^ffest
-  be-schränk-te-re % be-schränk-tere
-  be-schränk-te-rem % be-schränk-terem
-  be-schränk-te-ren % be-schränk-teren
-  be-schränk-te-rer % be-schränk-terer
-  be-schränk-te-res % be-schränk-teres
-  be-see-lend % be-seelend
-  be-see-len-de % be-seelen-de
-  be-see-len-dem % be-seelen-dem
-  be-see-len-den % be-seelen-den
-  be-see-len-der % be-seelen-der
-  be-see-len-des % be-seelen-des
-  be-stah-len % be-stahlen
-  be-zweif-le % be-zweifle
-  da-bei-blei-be % da-beiblei-be
-  da-bei-blei-ben % da-beiblei-ben
-  da-bei-blei-bend % da-beiblei-bend
-  da-bei-blei-ben-de % da-beiblei-ben-de
-  da-bei-blei-ben-dem % da-beiblei-ben-dem
-  da-bei-blei-ben-den % da-beiblei-ben-den
-  da-bei-blei-ben-der % da-beiblei-ben-der
-  da-bei-blei-ben-des % da-beiblei-ben-des
-  da-bei-bleibst % da-beibleibst
-  da-bei-bleibt % da-beibleibt
-  da-hin-glei-te % da-hinglei-te
-  da-hin-glei-ten % da-hinglei-ten
-  da-hin-glei-tend % da-hinglei-tend
-  da-hin-glei-ten-de % da-hinglei-ten-de
-  da-hin-glei-ten-dem % da-hinglei-ten-dem
-  da-hin-glei-ten-den % da-hinglei-ten-den
-  da-hin-glei-ten-der % da-hinglei-ten-der
-  da-hin-glei-ten-des % da-hinglei-ten-des
-  da-hin-glei-test % da-hinglei-test
-  da-hin-glei-tet % da-hinglei-tet
-  da-hin-ve-ge-tie-re % da-hinve-ge-tie-re
-  da-hin-ve-ge-tie-ren % da-hinve-ge-tie-ren
-  da-hin-ve-ge-tie-rend % da-hinve-ge-tie-rend
-  da-hin-ve-ge-tie-ren-de % da-hinve-ge-tie-ren-de
-  da-hin-ve-ge-tie-ren-dem % da-hinve-ge-tie-ren-dem
-  da-hin-ve-ge-tie-ren-den % da-hinve-ge-tie-ren-den
-  da-hin-ve-ge-tie-ren-der % da-hinve-ge-tie-ren-der
-  da-hin-ve-ge-tie-ren-des % da-hinve-ge-tie-ren-des
-  da-hin-ve-ge-tierst % da-hinve-ge-tierst
-  da-hin-ve-ge-tiert % da-hinve-ge-tiert
-  da-hin-ve-ge-tier-te % da-hinve-ge-tier-te
-  da-hin-ve-ge-tier-ten % da-hinve-ge-tier-ten
-  da-hin-ve-ge-tier-test % da-hinve-ge-tier-test
-  da-hin-ve-ge-tier-tet % da-hinve-ge-tier-tet
-  da-lag % dalag
-  da-la-gen % dala-gen
-  dem-ent-spre-chend % dement-spre-chend
-  dem-ent-spre-chen-de % dement-spre-chen-de
-  dem-ent-spre-chen-dem % dement-spre-chen-dem
-  dem-ent-spre-chen-den % dement-spre-chen-den
-  dem-ent-spre-chen-der % dement-spre-chen-der
-  dem-ent-spre-chen-des % dement-spre-chen-des
-  dem-je-ni-gen % demje-ni-gen
-  Dom-pfaff % Dompfaff
-  durch-flie-^^ffest % durch-flie^^ffest
-  durch-zu-at-men % durch-zuat-men
-  eben-er-dig % ebener-dig
-  eben-er-di-ge % ebener-di-ge
-  eben-er-di-gem % ebener-di-gem
-  eben-er-di-gen % ebener-di-gen
-  eben-er-di-ger % ebener-di-ger
-  eben-er-di-ges % ebener-di-ges
-  ein-eng-bar % eineng-bar
-  ein-eng-ba-re % eineng-ba-re
-  ein-eng-ba-rem % eineng-ba-rem
-  ein-eng-ba-ren % eineng-ba-ren
-  ein-eng-ba-rer % eineng-ba-rer
-  ein-eng-ba-res % eineng-ba-res
-  ein-en-ge % einen-ge
-  ein-en-gen % einen-gen
-  ein-en-gend % einen-gend
-  ein-en-gen-de % einen-gen-de
-  ein-en-gen-dem % einen-gen-dem
-  ein-en-gen-den % einen-gen-den
-  ein-en-gen-der % einen-gen-der
-  ein-en-gen-des % einen-gen-des
-  Ein-en-gens % Einen-gens
-  ein-engst % einengst
-  ein-engt % einengt
-  ein-eng-te % eineng-te
-  ein-eng-ten % eineng-ten
-  ein-eng-test % eineng-test
-  ein-eng-tet % eineng-tet
-  Ein-en-gung % Einen-gung
-  Ein-en-gun-gen % Einen-gun-gen
-  ein-flie-^^ffest % ein-flie^^ffest
-  ein-ge-hüllt % ein-gehüllt
-  ein-ge-hüll-te % ein-gehüll-te
-  ein-ge-hüll-tem % ein-gehüll-tem
-  ein-ge-hüll-ten % ein-gehüll-ten
-  ein-ge-hüll-ter % ein-gehüll-ter
-  ein-ge-hüll-tes % ein-gehüll-tes
-  ein-ge-schleu-ster % ein-ge-schleuster
-  ein-gie-^^ffest % ein-gie^^ffest
-  ein-lie-^^ffest % ein-lie^^ffest
-  ein-schie-^^ffest % ein-schie^^ffest
-  ein-schläf-re % ein-schläfre
-  ein-schlie-^^ffest % ein-schlie^^ffest
-  ein-schüch-terst % ein-schüchterst
-  ein-schücht-re % ein-schüchtre
-  ein-zu-eb-nen % ein-zueb-nen
-  ein-zu-eb-nend % ein-zueb-nend
-  ein-zu-eb-nen-de % ein-zueb-nen-de
-  ein-zu-eb-nen-dem % ein-zueb-nen-dem
-  ein-zu-eb-nen-den % ein-zueb-nen-den
-  ein-zu-eb-nen-der % ein-zueb-nen-der
-  ein-zu-eb-nen-des % ein-zueb-nen-des
-  ein-zu-en-gen % ein-zuen-gen
-  ein-zu-en-gend % ein-zuen-gend
-  ein-zu-en-gen-de % ein-zuen-gen-de
-  ein-zu-en-gen-dem % ein-zuen-gen-dem
-  ein-zu-en-gen-den % ein-zuen-gen-den
-  ein-zu-en-gen-der % ein-zuen-gen-der
-  ein-zu-en-gen-des % ein-zuen-gen-des
-  ein-zu-hül-len % ein-zuhül-len
-  ein-zu-hül-lend % ein-zuhül-lend
-  ein-zu-hül-len-de % ein-zuhül-len-de
-  ein-zu-hül-len-dem % ein-zuhül-len-dem
-  ein-zu-hül-len-den % ein-zuhül-len-den
-  ein-zu-hül-len-der % ein-zuhül-len-der
-  ein-zu-hül-len-des % ein-zuhül-len-des
-  ein-zu-räu-men % ein-zuräu-men
-  ein-zu-räu-mend % ein-zuräu-mend
-  ein-zu-räu-men-de % ein-zuräu-men-de
-  ein-zu-räu-men-dem % ein-zuräu-men-dem
-  ein-zu-räu-men-den % ein-zuräu-men-den
-  ein-zu-räu-men-der % ein-zuräu-men-der
-  ein-zu-räu-men-des % ein-zuräu-men-des
-  ein-zu-sau-gen % ein-zusau-gen
-  ein-zu-sau-gend % ein-zusau-gend
-  ein-zu-sau-gen-de % ein-zusau-gen-de
-  ein-zu-sau-gen-dem % ein-zusau-gen-dem
-  ein-zu-sau-gen-den % ein-zusau-gen-den
-  ein-zu-sau-gen-der % ein-zusau-gen-der
-  ein-zu-sau-gen-des % ein-zusau-gen-des
-  em-por-ge-blickt % em-por-geblickt
-  em-por-ge-blick-te % em-por-geblick-te
-  em-por-ge-blick-tem % em-por-geblick-tem
-  em-por-ge-blick-ten % em-por-geblick-ten
-  em-por-ge-blick-ter % em-por-geblick-ter
-  em-por-ge-blick-tes % em-por-geblick-tes
-  em-por-schie-^^ffest % em-por-schie^^ffest
-  ent-ei-le % entei-le
-  ent-ei-len % entei-len
-  ent-ei-lend % entei-lend
-  ent-ei-len-de % entei-len-de
-  ent-ei-len-dem % entei-len-dem
-  ent-ei-len-den % entei-len-den
-  ent-ei-len-der % entei-len-der
-  ent-ei-len-des % entei-len-des
-  ent-eilst % enteilst
-  ent-eilt % enteilt
-  ent-eil-te % enteil-te
-  ent-eil-tem % enteil-tem
-  ent-eil-ten % enteil-ten
-  ent-eil-ter % enteil-ter
-  ent-eil-tes % enteil-tes
-  ent-eil-test % enteil-test
-  ent-eil-tet % enteil-tet
-  ent-er-ben % enter-ben
-  ent-er-bend % enter-bend
-  ent-er-ben-de % enter-ben-de
-  ent-er-ben-dem % enter-ben-dem
-  ent-er-ben-den % enter-ben-den
-  ent-er-ben-der % enter-ben-der
-  ent-er-ben-des % enter-ben-des
-  ent-erbst % enterbst
-  ent-kä-me % ent-käme
-  ent-kä-men % ent-kämen
-  ent-lie^^ff % entlie^^ff
-  ent-lie-^^ffe % entlie-^^ffe
-  ent-lie-^^ffen % entlie-^^ffen
-  ent-lie-^^ffest % entlie^^ffest
-  ent-lie-^^ffet % entlie-^^ffet
-  ent-lie^^fft % entlie^^fft
-  ent-rü-stest % ent-rüstest
-  ent-schie-de-ne-re % ent-schie-de-nere
-  ent-schie-de-ne-rem % ent-schie-de-nerem
-  ent-schie-de-ne-ren % ent-schie-de-neren
-  ent-schie-de-ne-rer % ent-schie-de-nerer
-  ent-schie-de-ne-res % ent-schie-de-neres
-  ent-schlie-^^ffest % ent-schlie^^ffest
-  ent-sprie-^^ffest % ent-sprie^^ffest
-  er-ah-ne % erah-ne
-  er-ah-nen % erah-nen
-  er-ah-nend % erah-nend
-  er-ah-nen-de % erah-nen-de
-  er-ah-nen-dem % erah-nen-dem
-  er-ah-nen-den % erah-nen-den
-  er-ah-nen-der % erah-nen-der
-  er-ah-nen-des % erah-nen-des
-  er-ahnst % erahnst
-  er-ahnt % erahnt
-  er-ahn-te % erahn-te
-  er-ahn-tem % erahn-tem
-  er-ahn-ten % erahn-ten
-  er-ahn-ter % erahn-ter
-  er-ahn-tes % erahn-tes
-  er-ahn-test % erahn-test
-  er-ahn-tet % erahn-tet
-  er-bla^^fft % erbla^^fft
-  er-bla^^ff-te % erbla^^ff-te
-  er-bla^^ff-tem % erbla^^ff-tem
-  er-bla^^ff-ten % erbla^^ff-ten
-  er-bla^^ff-ter % erbla^^ff-ter
-  er-bla^^ff-tes % erbla^^ff-tes
-  er-bla^^ff-test % erbla^^ff-test
-  er-bla^^ff-tet % erbla^^ff-tet
-  er-fah-ren-ste % er-fah-renste
-  er-fah-ren-stem % er-fah-renstem
-  er-fah-ren-sten % er-fah-rensten
-  er-fah-ren-ster % er-fah-renster
-  er-fah-ren-stes % er-fah-renstes
-  er-fah-rungs-ge-mä-^^ffem % er-fah-rungs-ge-mä^^ffem
-  er-gie-^^ffest % er-gie^^ffest
-  er-heit-re % er-heitre
-  er-klett-re % er-klettre
-  er-leich-terst % er-leichterst
-  er-leicht-re % er-leichtre
-  er-lie-^^ffest % er-lie^^ffest
-  er-nüch-terst % er-nüchterst
-  er-nücht-re % er-nüchtre
-  er-ört-re % er-örtre
-  er-schie-^^ffest % er-schie^^ffest
-  er-schlie-^^ffest % er-schlie^^ffest
-  er-schrick % erschrick
-  er-schrickst % erschrickst
-  er-schrickt % erschrickt
-  er-schüt-te-re % er-schüt-tere
-  er-schütt-re % er-schüttre
-  er-wei-ter-bar % er-weiter-bar
-  er-wei-ter-ba-re % er-weiter-ba-re
-  er-wei-ter-ba-rem % er-weiter-ba-rem
-  er-wei-ter-ba-ren % er-weiter-ba-ren
-  er-wei-ter-ba-rer % er-weiter-ba-rer
-  er-wei-ter-ba-res % er-weiter-ba-res
-  Er-wei-ter-bar-keit % Er-weiter-bar-keit
-  er-weit-re % er-weitre
-  er-wünsch-te-ren % er-wünsch-teren
-  Fern-ost % Fernost
-  fern-öst-lich % fernöst-lich
-  fern-öst-li-che % fernöst-li-che
-  fern-öst-li-chem % fernöst-li-chem
-  fern-öst-li-chen % fernöst-li-chen
-  fern-öst-li-cher % fernöst-li-cher
-  fern-öst-li-ches % fernöst-li-ches
-  fort-ho-le % fortho-le
-  fort-ho-len % fortho-len
-  fort-ho-lend % fortho-lend
-  fort-ho-len-de % fortho-len-de
-  fort-ho-len-dem % fortho-len-dem
-  fort-ho-len-den % fortho-len-den
-  fort-ho-len-der % fortho-len-der
-  fort-ho-len-des % fortho-len-des
-  fort-holst % fortholst
-  fort-holt % fortholt
-  fort-hol-te % forthol-te
-  fort-hol-ten % forthol-ten
-  fort-hol-test % forthol-test
-  fort-hol-tet % forthol-tet
-  froh-locke % frohlocke
-  froh-locken % frohlocken
-  froh-lockend % frohlockend
-  froh-locken-de % frohlocken-de
-  froh-locken-dem % frohlocken-dem
-  froh-locken-den % frohlocken-den
-  froh-locken-der % frohlocken-der
-  froh-locken-des % frohlocken-des
-  froh-lockst % frohlockst
-  froh-lockt % frohlockt
-  froh-lock-te % frohlock-te
-  froh-lock-ten % frohlock-ten
-  froh-lock-test % frohlock-test
-  froh-lock-tet % frohlock-tet
-  furcht-er-re-gend % furchter-re-gend
-  furcht-er-re-gen-dem % furchter-re-gen-dem
-  furcht-er-re-gen-den % furchter-re-gen-den
-  furcht-er-re-gen-der % furchter-re-gen-der
-  ge-mei-ner-wei-se % ge-meiner-wei-se
-  ge-nau-so-schnell % ge-nau-soschnell
-  gleich-kä-me % gleich-käme
-  gleich-kä-men % gleich-kämen
-  gro-^^ffen-teils % gro^^ffen-teils
-  halb-dunk-le % halb-dunkle
-  halb-dunk-lem % halb-dunklem
-  halb-dunk-len % halb-dunklen
-  halb-dunk-les % halb-dunkles
-  Hand-um-dre-hen % Handum-dre-hen
-  her-aus-lie^^ff % her-auslie^^ff
-  her-aus-lie-^^ffe % her-auslie-^^ffe
-  her-aus-lie-^^ffen % her-auslie-^^ffen
-  her-aus-lie-^^ffest % her-auslie^^ffest
-  her-aus-lie^^fft % her-auslie^^fft
-  her-aus-schie-^^ffest % her-aus-schie^^ffest
-  her-aus-trat % her-austrat
-  her-aus-tra-ten % her-austra-ten
-  her-aus-tra-test % her-austra-test
-  her-aus-tra-tet % her-austra-tet
-  her-aus-tratst % her-austratst
-  her-aus-tre-te % her-austre-te
-  her-aus-tre-ten % her-austre-ten
-  her-aus-tre-tend % her-austre-tend
-  her-aus-tre-ten-de % her-austre-ten-de
-  her-aus-tre-ten-dem % her-austre-ten-dem
-  her-aus-tre-ten-den % her-austre-ten-den
-  her-aus-tre-ten-der % her-austre-ten-der
-  her-aus-tre-ten-des % her-austre-ten-des
-  her-aus-tre-tet % her-austre-tet
-  her-aus-tritt % her-austritt
-  her-aus-trittst % her-austrittst
-  her-vor-stie-^^ffest % her-vor-stie^^ffest
-  hilf-lo-se % hilflo-se
-  hilflo-sem % hilflo-sem
-  hilf-lo-sen % hilflo-sen
-  hilflo-ser % hilflo-ser
-  hilf-lo-se-re % hilflo-se-re
-  hilflo-se-rem % hilflo-se-rem
-  hilf-lo-se-ren % hilflo-se-ren
-  hilf-lo-se-rer % hilflo-se-rer
-  hilflo-se-res % hilflo-se-res
-  hilf-lo-ses % hilflo-ses
-  hilf-lo-se-ste % hilflo-se-ste
-  hilflo-se-stem % hilflo-se-stem
-  hilf-lo-se-sten % hilflo-se-sten
-  hilflo-se-ster % hilflo-se-ster
-  hilf-lo-se-stes % hilflo-se-stes
-  hin-aus-schie-^^ffest % hin-aus-schie^^ffest
-  hin-aus-trat % hin-austrat
-  hin-aus-tra-ten % hin-austra-ten
-  hin-aus-tra-test % hin-austra-test
-  hin-aus-tra-tet % hin-austra-tet
-  hin-aus-tratst % hin-austratst
-  hin-aus-tre-te % hin-austre-te
-  hin-aus-tre-ten % hin-austre-ten
-  hin-aus-tre-tend % hin-austre-tend
-  hin-aus-tre-ten-de % hin-austre-ten-de
-  hin-aus-tre-ten-dem % hin-austre-ten-dem
-  hin-aus-tre-ten-den % hin-austre-ten-den
-  hin-aus-tre-ten-der % hin-austre-ten-der
-  hin-aus-tre-ten-des % hin-austre-ten-des
-  hin-aus-tre-tet % hin-austre-tet
-  hin-aus-tru-gen % hin-austru-gen
-  hin-ein-sah % hin-einsah
-  hin-ein-sa-hen % hin-einsa-hen
-  hin-ein-sahst % hin-einsahst
-  hin-ein-saht % hin-einsaht
-  hin-ter-lie-^^ffest % hin-ter-lie^^ffest
-  hin-weg-dreht % hin-wegdreht
-  hoch-schie-^^ffest % hoch-schie^^ffest
-  hun-dert-zwan-zig % hun-dertzwan-zig
-  In-gang-set-zung % In-gangset-zung
-  In-gang-set-zun-gen % In-gangset-zun-gen
-  in-ji-zier-bar % inji-zier-bar
-  in-ji-zier-ba-re % inji-zier-ba-re
-  in-ji-zier-ba-rem % inji-zier-ba-rem
-  in-ji-zier-ba-ren % inji-zier-ba-ren
-  in-ji-zier-ba-rer % inji-zier-ba-rer
-  in-ji-zier-ba-res % inji-zier-ba-res
-  in-kom-pe-ten-te % in-kom-pe-tente
-  in-kom-pe-ten-tem % in-kom-pe-tentem
-  in-kom-pe-ten-ten % in-kom-pe-tenten
-  in-kom-pe-ten-ter % in-kom-pe-tenter
-  in-kom-pe-ten-tes % in-kom-pe-tentes
-  in-kor-rek-te-re % in-kor-rek-tere
-  in-kor-rek-te-rem % in-kor-rek-terem
-  in-kor-rek-te-ren % in-kor-rek-teren
-  in-kor-rek-te-rer % in-kor-rek-terer
-  in-kor-rek-te-res % in-kor-rek-teres
-  jahr-aus % jahraus
-  jahr-ein % jahrein
-  kurz-schlie-^^ffest % kurz-schlie^^ffest
-  laut-hals % lauthals
-  letzt-hin % letzthin
-  los-ei-se % losei-se
-  los-ei-sen % losei-sen
-  los-ei-send % losei-send
-  los-ei-sen-de % losei-sen-de
-  los-ei-sen-dem % losei-sen-dem
-  los-ei-sen-den % losei-sen-den
-  los-ei-sen-der % losei-sen-der
-  los-ei-sen-des % losei-sen-des
-  los-ei-sest % losei-sest
-  los-eist % loseist
-  los-ei-ste % losei-ste
-  los-ei-sten % losei-sten
-  los-ei-stest % losei-stest
-  los-ei-stet % losei-stet
-  los-lie^^ff % loslie^^ff
-  los-lie-^^ffe % loslie-^^ffe
-  los-lie-^^ffen % loslie-^^ffen
-  los-lie-^^ffest % loslie^^ffest
-  los-lie^^fft % loslie^^fft
-  mit-hält % mithält
-  mit-hältst % mithältst
-  mit-kä-me % mit-käme
-  mit-kä-men % mit-kämen
-  mit-sen-de % mitsen-de
-  mit-sen-den % mitsen-den
-  mit-sen-dend % mitsen-dend
-  mit-sen-den-de % mitsen-den-de
-  mit-sen-den-dem % mitsen-den-dem
-  mit-sen-den-den % mitsen-den-den
-  mit-sen-den-der % mitsen-den-der
-  mit-sen-den-des % mitsen-den-des
-  mit-sen-dest % mitsen-dest
-  mit-sen-det % mitsen-det
-  nach-kä-me % nach-käme
-  nach-kä-men % nach-kämen
-  nach-kä-mest % nach-kämest
-  nach-kä-met % nach-kämet
-  nach-lie^^ff % nachlie^^ff
-  nach-lie-^^ffe % nachlie-^^ffe
-  nach-lie-^^ffen % nachlie-^^ffen
-  nach-lie-^^ffest % nachlie^^ffest
-  nach-lie^^fft % nachlie^^fft
-  Nach-mit-ta-ge % Nach-mit-tage
-  Nach-mit-ta-gen % Nach-mit-tagen
-  Nach-ruhm % Nachruhm
-  Nach-ruhms % Nachruhms
-  nach-rü-stest % nach-rüstest
-  nach-träu-mend % nachträu-mend
-  nach-träu-men-de % nachträu-men-de
-  nach-träu-men-dem % nachträu-men-dem
-  nach-träu-men-den % nachträu-men-den
-  nach-träu-men-der % nachträu-men-der
-  nach-träu-men-des % nachträu-men-des
-  nach-träumst % nachträumst
-  nach-träumt % nachträumt
-  nach-träum-te % nachträum-te
-  nach-träum-ten % nachträum-ten
-  nach-träum-test % nachträum-test
-  nach-träum-tet % nachträum-tet
-  nach-trau-re % nachtrau-re
-  nach-zu-ah-men % nach-zuah-men
-  nach-zu-ah-mend % nach-zuah-mend
-  nach-zu-ah-men-de % nach-zuah-men-de
-  nach-zu-ah-men-dem % nach-zuah-men-dem
-  nach-zu-ah-men-den % nach-zuah-men-den
-  nach-zu-ah-men-der % nach-zuah-men-der
-  nach-zu-ah-men-des % nach-zuah-men-des
-  Nah-ost % Nahost
-  Nichts-tun % Nichtstun
-  nie-der-ge-drück-te-re % nie-der-ge-drück-tere
-  nie-der-ge-drück-te-rem % nie-der-ge-drück-terem
-  nie-der-ge-drück-te-ren % nie-der-ge-drück-teren
-  nie-der-ge-drück-te-rer % nie-der-ge-drück-terer
-  nie-der-ge-drück-te-res % nie-der-ge-drück-teres
-  nie-der-lie-^^ffest % nie-der-lie^^ffest
-  nie-der-schie-^^ffest % nie-der-schie^^ffest
-  nie-der-schmett-re % nie-der-schmettre
-  non-plus-ul-tra % non-plusul-tra
-  Rat-schlä-ge % Ratschlä-ge
-  Rat-schlä-gen % Ratschlä-gen
-  re-ak-tio-nä-re % re-ak-tio-näre
-  re-ak-tio-nä-rem % re-ak-tio-närem
-  re-ak-tio-nä-ren % re-ak-tio-nären
-  re-ak-tio-nä-rer % re-ak-tio-närer
-  re-ak-tio-nä-re-re % re-ak-tio-näre-re
-  re-ak-tio-nä-re-rem % re-ak-tio-näre-rem
-  re-ak-tio-nä-re-ren % re-ak-tio-näre-ren
-  re-ak-tio-nä-re-rer % re-ak-tio-näre-rer
-  re-ak-tio-nä-re-res % re-ak-tio-näre-res
-  re-ak-tio-nä-res % re-ak-tio-näres
-  rechts-um % rechtsum
-  re-in-ve-stiert % rein-ve-stiert
-  schlaf-lo-se % schlaflo-se
-  schlaf-lo-sem % schlaflo-sem
-  schlaf-lo-sen % schlaflo-sen
-  schlaf-lo-ser % schlaflo-ser
-  schlaf-lo-ses % schlaflo-ses
-  über-a^^ff % übera^^ff
-  über-a^^fft % übera^^fft
-  über-dachst % überdachst
-  über-flie-^^ffest % über-flie^^ffest
-  über-fütt-re % über-füttre
-  über-gab % übergab
-  über-ge-blie-be-nen % über-geblie-be-nen
-  über-gie-^^ffest % über-gie^^ffest
-  über-klett-re % über-klettre
-  über-lie-^^ffest % über-lie^^ffest
-  über-schie-^^ffest % über-schie^^ffest
-  über-tölp-le % über-tölple
-  um-gie-^^ffest % um-gie^^ffest
-  um-rü-stest % um-rüstest
-  um-schlie-^^ffest % um-schlie^^ffest
-  un-ab-läs-sig % un-abläs-sig
-  un-ab-läs-si-ge % un-abläs-si-ge
-  un-ab-läs-si-gem % un-abläs-si-gem
-  un-ab-läs-si-gen % un-abläs-si-gen
-  un-ab-läs-si-ger % un-abläs-si-ger
-  un-ab-läs-si-ges % un-abläs-si-ges
-  un-an-ge-brach-te-ren % un-an-ge-brach-teren
-  un-at-trak-tiv % unat-trak-tiv
-  un-at-trak-ti-ve % unat-trak-ti-ve
-  un-at-trak-ti-vem % unat-trak-ti-vem
-  un-at-trak-ti-ven % unat-trak-ti-ven
-  un-at-trak-ti-ver % unat-trak-ti-ver
-  un-at-trak-ti-ve-re % unat-trak-ti-ve-re
-  un-at-trak-ti-ves % unat-trak-ti-ves
-  un-at-trak-tiv-ste % unat-trak-tiv-ste
-  un-at-trak-tiv-stem % unat-trak-tiv-stem
-  un-at-trak-tiv-sten % unat-trak-tiv-sten
-  un-at-trak-tiv-ster % unat-trak-tiv-ster
-  un-at-trak-tiv-stes % unat-trak-tiv-stes
-  un-be-dach-te-ren % un-be-dach-teren
-  un-be-herrsch-te-ren % un-be-herrsch-teren
-  un-be-schei-de-ne-re % un-be-schei-de-nere
-  un-be-schei-de-ne-rem % un-be-schei-de-nerem
-  un-be-schei-de-ne-ren % un-be-schei-de-neren
-  un-be-schei-de-ne-rer % un-be-schei-de-nerer
-  un-be-schei-de-ne-res % un-be-schei-de-neres
-  un-be-schränk-te-re % un-be-schränk-tere
-  un-be-schränk-te-rem % un-be-schränk-terem
-  un-be-schränk-te-ren % un-be-schränk-teren
-  un-be-schränk-te-rer % un-be-schränk-terer
-  un-be-schränk-te-res % un-be-schränk-teres
-  un-be-wach-te-ren % un-be-wach-teren
-  un-dich-te-ren % un-dich-teren
-  un-ech-te-ren % un-ech-teren
-  un-ent-schie-de-ne-re % un-ent-schie-de-nere
-  un-ent-schie-de-ne-rem % un-ent-schie-de-nerem
-  un-ent-schie-de-ne-ren % un-ent-schie-de-neren
-  un-ent-schie-de-ne-rer % un-ent-schie-de-nerer
-  un-ent-schie-de-ne-res % un-ent-schie-de-neres
-  un-er-fah-ren-ste % un-er-fah-renste
-  un-er-fah-ren-stem % un-er-fah-renstem
-  un-er-fah-ren-sten % un-er-fah-rensten
-  un-er-fah-ren-ster % un-er-fah-renster
-  un-er-fah-ren-stes % un-er-fah-renstes
-  un-er-reich-te-ren % un-er-reich-teren
-  un-er-wünsch-te-ren % un-er-wünsch-teren
-  un-fai-re % un-faire
-  un-fein-ste % unfein-ste
-  un-fein-stem % unfein-stem
-  un-fein-sten % unfein-sten
-  un-fein-ster % unfein-ster
-  un-fein-stes % unfein-stes
-  un-fle-xi-blem % un-fle-xiblem
-  un-fle-xi-blen % un-fle-xiblen
-  un-fle-xi-bler % un-fle-xibler
-  un-fle-xi-ble-re % un-fle-xible-re
-  un-fle-xi-ble-rem % un-fle-xible-rem
-  un-fle-xi-ble-ren % un-fle-xible-ren
-  un-fle-xi-ble-res % un-fle-xible-res
-  un-fle-xi-bles % un-fle-xibles
-  un-ge-rech-te-ren % un-ge-rech-teren
-  un-ge-schick-te-re % un-ge-schick-tere
-  un-ge-schick-te-rem % un-ge-schick-terem
-  un-ge-schick-te-ren % un-ge-schick-teren
-  un-ge-schick-te-rer % un-ge-schick-terer
-  un-ge-schick-te-res % un-ge-schick-teres
-  un-ge-woll-te-re % un-ge-woll-tere
-  un-ge-woll-te-rem % un-ge-woll-terem
-  un-ge-woll-te-ren % un-ge-woll-teren
-  un-ge-woll-te-rer % un-ge-woll-terer
-  un-ge-woll-te-res % un-ge-woll-teres
-  un-ge-woll-te-ste % un-ge-woll-teste
-  un-ge-woll-te-stem % un-ge-woll-testem
-  un-ge-woll-te-sten % un-ge-woll-testen
-  un-ge-woll-te-ster % un-ge-woll-tester
-  un-ge-woll-te-stes % un-ge-woll-testes
-  un-li-mi-tiert % un-limi-tiert
-  un-li-mi-tier-te % un-limi-tier-te
-  un-li-mi-tier-tem % un-limi-tier-tem
-  un-li-mi-tier-ten % un-limi-tier-ten
-  un-li-mi-tier-ter % un-limi-tier-ter
-  un-li-mi-tier-tes % un-limi-tier-tes
-  Un-men-schen % Un-menschen
-  un-pa-trio-tisch % un-patrio-tisch
-  un-pa-trio-ti-sche % un-patrio-ti-sche
-  un-pa-trio-ti-schem % un-patrio-ti-schem
-  un-pa-trio-ti-schen % un-patrio-ti-schen
-  un-pa-trio-ti-scher % un-patrio-ti-scher
-  un-pa-trio-ti-sche-re % un-patrio-ti-sche-re
-  un-pa-trio-ti-sche-rem % un-patrio-ti-sche-rem
-  un-pa-trio-ti-sche-ren % un-patrio-ti-sche-ren
-  un-pa-trio-ti-sche-rer % un-patrio-ti-sche-rer
-  un-pa-trio-ti-sche-res % un-patrio-ti-sche-res
-  un-pa-trio-ti-sches % un-patrio-ti-sches
-  un-pa-trio-tisch-ste % un-patrio-tisch-ste
-  un-pa-trio-tisch-stem % un-patrio-tisch-stem
-  un-pa-trio-tisch-sten % un-patrio-tisch-sten
-  un-pa-trio-tisch-ster % un-patrio-tisch-ster
-  un-pa-trio-tisch-stes % un-patrio-tisch-stes
-  un-ser-ei-ner % un-serei-ner
-  un-ter-brecht % un-terbrecht
-  un-ter-höh-le % unter-höh-le
-  un-ter-höh-len % unter-höh-len
-  un-ter-höh-lend % unter-höh-lend
-  un-ter-höh-len-de % unter-höh-len-de
-  un-ter-höh-len-dem % unter-höh-len-dem
-  un-ter-höh-len-den % unter-höh-len-den
-  un-ter-höh-len-der % unter-höh-len-der
-  un-ter-höh-len-des % unter-höh-len-des
-  un-ter-höhlst % unter-höhlst
-  un-ter-höhlt % unter-höhlt
-  un-ter-höhl-te % unter-höhlte
-  un-ter-höhl-tem % unter-höhltem
-  un-ter-höhl-ten % unter-höhlten
-  un-ter-höhl-ter % unter-höhlter
-  un-ter-höhl-tes % unter-höhltes
-  un-ter-höhl-test % unter-höhltest
-  un-ter-höhl-tet % unter-höhltet
-  un-ter-lie-^^ffest % un-ter-lie^^ffest
-  un-tie-fer % un-tiefer
-  un-tie-fe-re % un-tiefe-re
-  un-tie-fe-rem % un-tiefe-rem
-  un-tie-fe-ren % un-tiefe-ren
-  un-tie-fe-rer % un-tiefe-rer
-  un-tie-fe-res % un-tiefe-res
-  un-trink-bar % untrink-bar
-  un-trink-ba-re % untrink-ba-re
-  un-trink-ba-rem % untrink-ba-rem
-  un-trink-ba-ren % untrink-ba-ren
-  un-trink-ba-rer % untrink-ba-rer
-  un-trink-ba-res % untrink-ba-res
-  un-trüg-lich % untrüg-lich
-  un-trüg-li-che % untrüg-li-che
-  un-trüg-li-chem % untrüg-li-chem
-  un-trüg-li-chen % untrüg-li-chen
-  un-trüg-li-cher % untrüg-li-cher
-  un-trüg-li-ches % untrüg-li-ches
-  un-ver-fälsch-te-ren % un-ver-fälsch-teren
-  un-zu-frie-de-ne-re % un-zu-frie-de-nere
-  un-zu-frie-de-ne-rem % un-zu-frie-de-nerem
-  un-zu-frie-de-ne-ren % un-zu-frie-de-neren
-  un-zu-frie-de-ne-rer % un-zu-frie-de-nerer
-  un-zu-frie-de-ne-res % un-zu-frie-de-neres
-  ur-äl-te-ste % uräl-te-ste
-  ur-äl-te-stem % uräl-te-stem
-  ur-äl-te-sten % uräl-te-sten
-  ur-äl-te-ster % uräl-te-ster
-  ur-äl-te-stes % uräl-te-stes
-  ur-auf-ge-führt % urauf-ge-führt
-  ur-auf-ge-führ-te % urauf-ge-führ-te
-  ur-auf-ge-führ-tem % urauf-ge-führ-tem
-  ur-auf-ge-führ-ten % urauf-ge-führ-ten
-  ur-auf-ge-führ-ter % urauf-ge-führ-ter
-  ur-auf-ge-führ-tes % urauf-ge-führ-tes
-  ver-brecht % verbrecht
-  ver-breit-re % ver-breitre
-  ver-darbt % verdarbt
-  ver-dunk-le % ver-dunkle
-  ver-fälsch-te-ren % ver-fälsch-teren
-  ver-flie-^^ffest % ver-flie^^ffest
-  ver-fluch-te-ren % ver-fluch-teren
-  ver-fütt-re % ver-füttre
-  ver-gie-^^ffest % ver-gie^^ffest
-  ver-hätsch-le % ver-hätschle
-  ver-hie-^^ffest % ver-hie^^ffest
-  ver-hind-re % ver-hindre
-  ver-kör-pe-re % ver-kör-pere
-  ver-lie-^^ffest % ver-lie^^ffest
-  ver-lort % verlort
-  ver-mind-re % ver-mindre
-  ver-schauk-le % ver-schaukle
-  ver-schie-^^ffest % ver-schie^^ffest
-  ver-schlie-^^ffest % ver-schlie^^ffest
-  ver-starb % verstarb
-  ver-star-ben % verstar-ben
-  ver-starbst % verstarbst
-  ver-starbt % verstarbt
-  ver-staust % verstaust
-  ver-steck-te-re % ver-steck-tere
-  ver-steck-te-rem % ver-steck-terem
-  ver-steck-te-ren % ver-steck-teren
-  ver-steck-te-rer % ver-steck-terer
-  ver-steck-te-res % ver-steck-teres
-  ver-stie-^^ffest % ver-stie^^ffest
-  ver-strick-te-re % ver-strick-tere
-  ver-strick-te-rem % ver-strick-terem
-  ver-strick-te-ren % ver-strick-teren
-  ver-strick-te-rer % ver-strick-terer
-  ver-strick-te-res % ver-strick-teres
-  ver-zweif-le % ver-zweifle
-  Ve-te-ran % Ve-teran
-  voll-auf % vollauf
-  voll-en-de % vollen-de
-  voll-en-den % vollen-den
-  voll-en-dend % vollen-dend
-  voll-en-den-de % vollen-den-de
-  voll-en-den-dem % vollen-den-dem
-  voll-en-den-den % vollen-den-den
-  voll-en-den-der % vollen-den-der
-  voll-en-den-des % vollen-den-des
-  Voll-en-dens % Vollen-dens
-  voll-en-dest % vollen-dest
-  voll-en-det % vollen-det
-  voll-en-de-te % vollen-de-te
-  voll-en-de-tem % vollen-de-tem
-  voll-en-de-ten % vollen-de-ten
-  voll-en-de-ter % vollen-de-ter
-  voll-en-de-tes % vollen-de-tes
-  voll-en-de-test % vollen-de-test
-  voll-en-de-tet % vollen-de-tet
-  voll-en-det-sten % vollen-det-sten
-  Voll-en-dung % Vollen-dung
-  Voll-en-dun-gen % Vollen-dun-gen
-  vor-aus-ei-le % vor-ausei-le
-  vor-aus-ei-len % vor-ausei-len
-  vor-aus-ei-lend % vor-ausei-lend
-  vor-aus-ei-len-de % vor-ausei-len-de
-  vor-aus-ei-len-dem % vor-ausei-len-dem
-  vor-aus-ei-len-den % vor-ausei-len-den
-  vor-aus-ei-len-der % vor-ausei-len-der
-  vor-aus-ei-len-des % vor-ausei-len-des
-  vor-aus-eilst % vor-auseilst
-  vor-aus-eilt % vor-auseilt
-  vor-aus-eil-te % vor-auseil-te
-  vor-aus-eil-ten % vor-auseil-ten
-  vor-aus-eil-test % vor-auseil-test
-  vor-aus-eil-tet % vor-auseil-tet
-  vor-aus-zu-ah-nen % vor-aus-zuah-nen
-  vor-bei-la^^fft % vor-beila^^fft
-  vor-bei-schie-^^ffest % vor-bei-schie^^ffest
-  vor-gauk-le % vor-gaukle
-  vor-ge-rück-te-ren % vor-ge-rück-teren
-  vor-ge-strig % vor-gestrig
-  vor-ge-stri-ge % vor-gestri-ge
-  vor-ge-stri-gem % vor-gestri-gem
-  vor-ge-stri-gen % vor-gestri-gen
-  vor-ge-stri-ger % vor-gestri-ger
-  vor-ge-stri-ges % vor-gestri-ges
-  vor-kä-me % vor-käme
-  Vor-mit-ta-ge % Vor-mit-tage
-  Vor-mit-ta-gen % Vor-mit-tagen
-  Vor-mit-ta-ges % Vor-mit-tages
-  vor-schie-^^ffest % vor-schie^^ffest
-  vor-zu-mer-ken % vorzu-mer-ken
-  vor-zu-mer-kend % vorzu-mer-kend
-  vor-zu-mer-ken-de % vorzu-mer-ken-de
-  vor-zu-mer-ken-dem % vorzu-mer-ken-dem
-  vor-zu-mer-ken-den % vorzu-mer-ken-den
-  vor-zu-mer-ken-der % vorzu-mer-ken-der
-  vor-zu-mer-ken-des % vorzu-mer-ken-des
-  vor-zu-täu-schen % vor-zutäu-schen
-  vor-zu-täu-schend % vor-zutäu-schend
-  vor-zu-täu-schen-de % vor-zutäu-schen-de
-  vor-zu-täu-schen-dem % vor-zutäu-schen-dem
-  vor-zu-täu-schen-den % vor-zutäu-schen-den
-  vor-zu-täu-schen-der % vor-zutäu-schen-der
-  vor-zu-täu-schen-des % vor-zutäu-schen-des
-  weg-schlie-^^ffest % weg-schlie^^ffest
-  weg-strei-che % wegstrei-che
-  weg-strei-chen % wegstrei-chen
-  weg-strei-chend % wegstrei-chend
-  weg-strei-chen-de % wegstrei-chen-de
-  weg-strei-chen-dem % wegstrei-chen-dem
-  weg-strei-chen-den % wegstrei-chen-den
-  weg-strei-chen-der % wegstrei-chen-der
-  weg-strei-chen-des % wegstrei-chen-des
-  weg-streichst % wegstreichst
-  weg-streicht % wegstreicht
-  wei-ter-flie-^^ffest % wei-ter-flie^^ffest
-  wei-ter-zu-ma-chen % wei-terzu-ma-chen
-  wei-ter-zu-ma-chend % wei-terzu-ma-chend
-  wei-ter-zu-ma-chen-de % wei-terzu-ma-chen-de
-  wei-ter-zu-ma-chen-dem % wei-terzu-ma-chen-dem
-  wei-ter-zu-ma-chen-den % wei-terzu-ma-chen-den
-  wei-ter-zu-ma-chen-der % wei-terzu-ma-chen-der
-  wei-ter-zu-ma-chen-des % wei-terzu-ma-chen-des
-  Welt-all % Weltall
-  Welt-alls % Weltalls
-  wett-rü-stest % wett-rüstest
-  wohl-be-dach-te-ren % wohl-be-dach-teren
-  zer-brecht % zerbrecht
-  zer-drück-te-re % zer-drück-tere
-  zer-drück-te-rem % zer-drück-terem
-  zer-drück-te-ren % zer-drück-teren
-  zer-drück-te-rer % zer-drück-terer
-  zer-drück-te-res % zer-drück-teres
-  zer-fah-ren-ste % zer-fah-renste
-  zer-fah-ren-stem % zer-fah-renstem
-  zer-fah-ren-sten % zer-fah-rensten
-  zer-fah-ren-ster % zer-fah-renster
-  zer-fah-ren-stes % zer-fah-renstes
-  zer-flie-^^ffest % zer-flie^^ffest
-  zer-knick-te-re % zer-knick-tere
-  zer-knick-te-rem % zer-knick-terem
-  zer-knick-te-ren % zer-knick-teren
-  zer-knick-te-rer % zer-knick-terer
-  zer-knick-te-res % zer-knick-teres
-  zer-lie-^^ffest % zer-lie^^ffest
-  zer-schie-^^ffest % zer-schie^^ffest
-  zer-schmett-re % zer-schmettre
-  zer-stie-^^ffest % zer-stie^^ffest
-  zu-flie-^^ffest % zu-flie^^ffest
-  zu-flüst-re % zu-flüstre
-  zu-gabt % zugabt
-  zu-gie-^^ffest % zu-gie^^ffest
-  zu-in-nerst % zuin-nerst
-  zu-läch-le % zu-lächle
-  zu-lie^^ff % zulie^^ff
-  zu-lie-^^ffe % zulie-^^ffe
-  zu-lie-^^ffen % zulie-^^ffen
-  zu-lie-^^ffest % zulie^^ffest
-  zu-lie^^fft % zulie^^fft
-  zu-nä-he % zunä-he
-  zu-nä-hen % zunä-hen
-  zu-nä-hend % zunä-hend
-  zu-nä-hen-de % zunä-hen-de
-  zu-nä-hen-dem % zunä-hen-dem
-  zu-nä-hen-den % zunä-hen-den
-  zu-nä-hen-der % zunä-hen-der
-  zu-nä-hen-des % zunä-hen-des
-  zu-nähst % zunähst
-  zu-näht % zunäht
-  zu-näh-te % zunäh-te
-  zu-näh-ten % zunäh-ten
-  zu-näh-test % zunäh-test
-  zu-näh-tet % zunäh-tet
-  zu-rü-stest % zu-rüstest
-  zu-sam-men-flie-^^ffest % zu-sam-men-flie^^ffest
-  zu-schie-^^ffest % zu-schie^^ffest
-  zu-schlie-^^ffest % zu-schlie^^ffest
-  zwei-fels-oh-ne % zwei-felsoh-ne
-  zwei-hän-dig % zweihän-dig
-  zwei-hän-di-ge % zweihän-di-ge
-  zwei-hän-di-gem % zweihän-di-gem
-  zwei-hän-di-gen % zweihän-di-gen
-  zwei-hän-di-ger % zweihän-di-ger
-  zwei-hän-di-ges % zweihän-di-ges
-%
-%
-% fehlende Trennungen ausgewählter Komposita
-%
-  Arz-nei-schrank % Arzneischrank
-  Ei-er-uhr % Eier-uhr
-  Ei-er-uh-ren % Eier-uh-ren
-  Fach-ärz-te % Fachärz-te
-  Fach-ärz-ten % Fachärz-ten
-  Fach-ärz-tin % Fachärz-tin
-  Fach-ärz-tin-nen % Fachärz-tin-nen
-  Fern-glä-ser % Fernglä-ser
-  Fleisch-wolf % Fleischwolf
-  Froh-na-tur % Frohna-tur
-  Froh-na-tu-ren % Frohna-tu-ren
-  fünf-ein-halb % fünfein-halb
-  Glatt-eis % Glatteis
-  Glatt-ei-ses % Glattei-ses
-  Ha-sel-nüs-se % Ha-selnüs-se
-  Ha-sel-nüs-sen % Ha-selnüs-sen
-  Haupt-ein-gang % Hauptein-gang
-  Haupt-ein-gän-ge % Hauptein-gän-ge
-  Haupt-ein-gän-gen % Hauptein-gän-gen
-  Haupt-ein-gangs % Hauptein-gangs
-  him-mel-blaue % him-melblaue
-  him-mel-blau-em % him-melblau-em
-  him-mel-blau-en % him-melblau-en
-  him-mel-blau-er % him-melblau-er
-  him-mel-blau-es % him-melblau-es
-  Kehr-sei-te % Kehrsei-te
-  Kehr-sei-ten % Kehrsei-ten
-  Kraft-akt % Kraftakt
-  Lehr-äm-ter % Lehräm-ter
-  Mai-glöck-chen % Maiglöck-chen
-  Mai-glöck-chens % Maiglöck-chens
-  Maul-esel % Maulesel
-  Maul-eseln % Mauleseln
-  Maul-esels % Maulesels
-  Meer-en-gen % Meeren-gen
-  Wal-nüs-se % Walnüs-se
-  Wal-nüs-sen % Walnüs-sen
-}
-
-\endgroup
-
-\endinput
-
-%%% Local Variables:
-%%% mode: tex
-%%% coding: latin-1
-%%% End:
index 7cc546634f7ddafa6800a68466b7488318a9359f..fba3e8d618b746fe0d51ba78a659cea1b4338796 100644 (file)
@@ -40,13 +40,13 @@ while (<>) {
   s/\\[^123456\s{]+//g;
   # remove all paired { ... }
   1 while s/{(.*?)}/\1/g;
-  # skip lines which now have only whitespace before `&'
+  # skip lines which now have only whitespace before '&'
   next if m/^\s*&/;
   # remove comments
   s/%.*//;
   # remove trailing whitespace
   s/\s*$//;
-  # remove trailing `*' (used as a marker in the document)
+  # remove trailing '*' (used as a marker in the document)
   s/\*$//;
   # split at whitespace
   @field = split(' ');
@@ -69,7 +69,7 @@ while (<>) {
     }
   }
   else {
-    # for `&', split at `&' with trailing whitespace
+    # for '&', split at '&' with trailing whitespace
     @field = split(/&\s*/);
     print "  $field[1]\n";
   }
index 1996317e367ac1a282e5922a3cbb773df9f7729f..3f3075cbe9944d38cc6c1355cfdc1e18dbb07ed5 100644 (file)
@@ -1,21 +1,25 @@
-% Hyphenation exceptions for US English, based on the hyphenation exception
-% log article in TUGBoat.
+% Hyphenation exceptions for US English,
+% based on hyphenation exception log articles in TUGboat.
 %
-% Copyright 2007 TeX Users Group.
+% Copyright 2008 TeX Users Group.
 % You may freely use, modify and/or distribute this file.
 %
 % This is an automatically generated file.  Do not edit!
 %
-% Please contact Barbara Beeton <bnb@ams.org> for corrections and omissions.
+% Please contact the TUGboat editorial staff <tugboat@tug.org>
+% for corrections and omissions.
 
 \hyphenation{
   acad-e-my
   acad-e-mies
   ac-cu-sa-tive
   acro-nym
+  acro-nyms
   acryl-amide
   acryl-amides
   acryl-alde-hyde
+  acu-punc-ture
+  acu-punc-tur-ist
   add-a-ble
   add-i-ble
   adren-a-line
   al-ge-bra-i-cal-ly
   am-phet-a-mine
   am-phet-a-mines
+  anach-ro-nism
+  anach-ro-nis-tic
   an-a-lyse
   an-a-lysed
   analy-ses
+  analy-sis
+  an-eu-rysm
+  an-eu-rysms
+  an-eu-rys-mal
   an-iso-trop-ic
   an-iso-trop-i-cal-ly
   an-isot-ro-pism
   an-isot-ropy
-  anom-aly
-  anom-alies
+  an-ni-ver-sary
+  an-ni-ver-saries
+  anom-a-ly
+  anom-a-lies
   anti-deriv-a-tive
   anti-deriv-a-tives
   anti-holo-mor-phic
   an-tin-o-my
   an-tin-o-mies
-  an-ti-nu-clear
-  an-ti-nu-cle-on
-  an-ti-rev-o-lu-tion-ary
+  anti-nu-clear
+  anti-nu-cle-on
+  anti-rev-o-lu-tion-ary
+  a-peri-odic
   apoth-e-o-ses
   apoth-e-o-sis
+  ap-pen-di-ces
   ap-pen-dix
+  ap-pen-dixes
   ar-chi-me-dean
   ar-chi-pel-ago
   ar-chi-pel-a-gos
   ar-chiv-ist
   ar-chiv-ists
   ar-che-typ-al
+  ar-che-type
+  ar-che-types
   ar-che-typ-i-cal
   arc-tan-gent
   arc-tan-gents
+  a-spher-ic
+  a-spher-i-cal
   as-sign-a-ble
   as-sign-or
   as-sign-ors
+  as-sist-ant
+  as-sist-ance
   as-sist-ant-ship
   as-sist-ant-ships
+  as-trol-o-ger
+  as-trol-o-gers
+  as-tron-o-mer
+  as-tron-o-mers
   asymp-to-matic
   as-ymp-tot-ic
   asyn-chro-nous
   ath-er-o-scle-ro-sis
   at-mos-phere
   at-mos-pheres
+  at-tri-bute
   at-trib-uted
   at-trib-ut-able
   au-to-ma-tion
   au-tom-a-ton
   au-tom-a-ta
-  au-to-num-ber-ing
+  auto-num-ber-ing
   au-ton-o-mous
+  auto-re-gres-sion
+  auto-re-gres-sive
   auto-round-ing
   av-oir-du-pois
-  band-leader
-  band-leaders
+  back-scratcher
+  back-scratch-ing
+  band-lead-er
+  band-lead-ers
   bank-rupt
+  bank-rupts
   bank-rupt-cy
   bank-rupt-cies
   bar-onies
   ba-thym-e-try
   bathy-scaphe
   bean-ies
+  be-drag-gle
+  be-drag-gled
+  bed-rid-den
+  bed-rock
+  be-dwarf
+  be-dwarfs
   be-hav-iour
   be-hav-iours
   bevies
+  bib-lio-graph-i-cal
   bib-li-og-ra-phy-style
+  bib-units
   bi-dif-fer-en-tial
   big-gest
+  big-shot
+  big-shots
   bill-able
   bio-math-e-mat-ics
   bio-med-i-cal
   bio-med-i-cine
   bio-rhythms
+  bio-weap-ons
+  bio-weap-on-ry
   bit-map
   bit-maps
   bland-er
   bland-est
   blind-er
+  blind-est
   blondes
   blue-print
   blue-prints
   bo-lom-e-ter
+  bo-lom-e-ters
   book-sell-er
   book-sell-ers
   bool-ean
   brusquer
   buf-fer
   buf-fers
+  bun-gee
+  bun-gees
   busier
-  busiest
+  busi-est
   bussing
   butted
   buzz-word
   buzz-words
+  cache-abil-ity
+  cache-able
   ca-coph-o-ny
   ca-coph-o-nies
   call-er
   cam-era-men
   cart-wheel
   cart-wheels
+  ca-tarrh
   ca-tarrhs
+  ca-tas-tro-phe
+  ca-tas-tro-phes
   cat-a-stroph-ic
   cat-a-stroph-i-cally
+  ca-tas-tro-phism
   cat-e-noid
   cat-e-noids
   cau-li-flow-er
+  chan-cery
   chap-ar-ral
   char-treuse
+  chemo-kine
+  chemo-kines
   chemo-ther-apy
   chemo-ther-a-pies
   chloro-meth-ane
   cig-a-rettes
   cinque-foil
   co-asso-cia-tive
+  coch-leas
+  coch-lear
+  co-designer
+  co-designers
   co-gnac
   co-gnacs
   co-ker-nel
   com-po-nent-wise
   comp-trol-ler
   comp-trol-lers
+  com-put-able
+  com-put-abil-ity
   con-form-able
   con-form-ist
   con-form-ists
   con-form-ity
+  con-ge-ries
   con-gress
   con-gresses
+  con-struc-ted
+  con-struc-ti-ble
+  con-struc-ti-bil-ity
   con-trib-ute
   con-trib-utes
   con-trib-uted
+  copy-right-able
   co-re-la-tion
   co-re-la-tions
   co-re-li-gion-ist
   co-re-spon-dent
   co-re-spon-dents
   co-se-cant
+  co-semi-sim-ple
   co-tan-gent
   cour-ses
   co-work-er
   croc-o-diles
   cross-hatch
   cross-hatched
+  cross-hatch-ing
   cross-over
   cryp-to-gram
   cryp-to-grams
   cus-tom-ize
   cus-tom-izes
   cus-tom-ized
+  cy-ber-virus
+  cy-ber-viruses
+  cy-ber-wea-pon
+  cy-ber-wea-pons
+  cy-to-kine
+  cy-to-kines
   dachs-hund
   dam-sel-fly
   dam-sel-flies
-  ca-coph-o-ny
-  ca-coph-o-nies
   dactyl-o-gram
   dactyl-o-graph
   data-base
   data-paths
   date-stamp
   date-stamps
+  de-allo-cate
+  de-allo-cates
+  de-allo-cated
+  de-allo-ca-tion
+  de-allo-ca-tions
   de-clar-able
   de-fin-i-tive
   de-lec-ta-ble
   demi-semi-qua-vers
   de-moc-ra-tism
   demos
+  der-i-va-tion
+  der-i-va-tions
+  der-i-va-tion-al
   de-riv-a-tive
   de-riv-a-tives
   dia-lec-tic
   dis-par-and
   dis-par-ands
   dis-traught-ly
+  dis-trib-ut-able
   dis-trib-ute
   dis-trib-utes
   dis-trib-uted
+  dis-trib-u-tive
   dou-ble-space
+  dou-ble-spaced
   dou-ble-spac-ing
+  dou-ble-talk
   doll-ish
   drift-age
   driv-ers
   drom-e-dary
   drom-e-daries
+  drop-let
+  drop-lets
   du-op-o-list
   du-op-o-lists
-  du-op-oly
+  du-op-o-ly
+  du-op-o-lies
   dys-lexia
   dys-lec-tic
+  dys-topia
   east-end-ers
+  eco-sys-tem
+  eco-sys-tems
   eco-nom-ics
+  econ-o-mies
   econ-o-mist
   econ-o-mists
   ei-gen-class
   ei-gen-val-ues
   electro-mechan-i-cal
   electro-mechano-acoustic
+  elec-tro-pho-re-sis
+  elec-tro-pho-ret-ic
   elit-ist
   elit-ists
+  en-dos-copy
+  en-dos-copies
   en-tre-pre-neur
+  en-tre-pre-neurs
   en-tre-pre-neur-ial
   ep-i-neph-rine
+  eps-to-pdf
   equi-vari-ant
   equi-vari-ance
+  er-go-nom-ic
+  er-go-nom-ics
+  er-go-nom-i-cally
+  es-sence
+  es-sences
   eth-ane
+  eth-yl-am-ine
+  eth-yl-ate
+  eth-yl-ated
   eth-yl-ene
+  ethy-nyl
+  ethy-nyl-a-tion
+  eu-sta-chian
   ever-si-ble
   evert
   everts
   evert-ed
   evert-ing
+  ex-plan-a-tory
   ex-quis-ite
   ex-tra-or-di-nary
+  face-lifts
+  face-lift-ing
   fall-ing
   fermi-ons
+  figu-rine
+  figu-rines
   fi-nite-ly
   fla-gel-lum
   fla-gel-la
   flow-chart
   flow-charts
   fluoro-car-bon
+  fluor-os-copies
+  fluor-os-copy
   for-mi-da-ble
   for-mi-da-bly
   for-syth-ia
   free-loader
   free-loaders
   friend-lier
+  friend-li-est
   fri-vol-ity
   fri-vol-i-ties
   friv-o-lous
+  front-end
+  front-ends
   ga-lac-tic
   gal-axy
   gal-ax-ies
+  gaz-et-teer
+  gaz-et-teers
   gas-om-e-ter
   ge-o-des-ic
   ge-o-det-ic
+  ge-om-eter
+  ge-om-eters
   geo-met-ric
   geo-met-rics
   ge-o-strophic
   geo-ther-mal
   ge-ot-ro-pism
+  giga-nodes
   gno-mon
   gno-mons
+  gran-di-ose
   grand-uncle
   grand-uncles
   griev-ance
   griev-ances
   griev-ous
   griev-ous-ly
+  group-like
   hair-style
   hair-styles
   hair-styl-ist
   hair-styl-ists
+  half-life
+  half-lives
   half-space
   half-spaces
+  half-tone
+  half-tones
   half-way
   har-bin-ger
   har-bin-gers
   har-le-quin
   har-le-quins
   hatch-eries
+  hei-nous
+  he-lio-pause
+  he-lio-trope
   hemi-demi-semi-qua-ver
   hemi-demi-semi-qua-vers
   he-mo-glo-bin
   he-mo-phil-iacs
   hemo-rhe-ol-ogy
   he-pat-ic
+  he-pat-ica
   her-maph-ro-dite
   her-maph-ro-dit-ic
   he-roes
   hexa-dec-i-mal
+  hip-po-po-ta-mus
+  holo-deck
+  holo-decks
   ho-lo-no-my
   ho-meo-mor-phic
   ho-meo-mor-phism
+  ho-meo-stat-ic
+  ho-meo-stat-ics
+  ho-meo-sta-sis
   ho-mo-thetic
   horse-rad-ish
   hot-bed
   hot-beds
+  hounds-teeth
+  hounds-tooth
   hy-dro-ther-mal
+  hy-per-elas-tic-ity
+  hy-phen-a-tion
+  hy-phen-a-tions
+  hy-po-elas-tic-ity
   hy-po-thal-a-mus
+  ico-nog-ra-pher
+  ico-nog-ra-phers
+  icon-o-graph-ic
+  ico-nog-ra-phy
   ideals
   ideo-graphs
   idio-syn-crasy
   ig-nit-ers
   ig-ni-tor
   ignore-spaces
+  il-li-quid
+  il-li-quid-ity
+  im-mu-ni-za-tion
+  im-mu-no-mod-u-la-to-ry
   im-ped-ance
   im-ped-ances
   in-du-bi-ta-ble
   in-fin-i-tes-i-mal
   in-fra-struc-ture
   in-fra-struc-tures
+  input-enc
   in-stall-er
   in-stall-ers
+  in-teg-rity
   in-ter-dis-ci-pli-nary
   in-ter-ga-lac-tic
+  in-ter-view-ee
+  in-ter-view-ees
   in-utile
   in-util-i-ty
+  ir-ra-tio-nal
   ir-re-duc-ible
   ir-re-duc-ibly
   ir-rev-o-ca-ble
+  iso-geo-met-ric
+  iso-geo-met-rics
+  iso-ther-mal
   isot-ropy
   iso-trop-ic
   itin-er-ary
   key-notes
   key-stroke
   key-strokes
+  kilo-nodes
   kiln-ing
   lac-i-est
   lam-en-ta-ble
   land-scap-er
   land-scap-ers
+  lar-ce-n
   lar-ce-ny
-  lar-ce-n-ist
+  lar-ce-nies
+  lar-ce-nist
   leaf-hop-per
   leaf-hop-pers
+  leaf-let
+  leaf-lets
+  let-ter-spaces
+  let-ter-spaced
   let-ter-spac-ing
+  leu-ko-cyte
+  leu-ko-cytes
+  leu-ko-triene
+  leu-ko-trienes
   life-span
   life-spans
   life-style
   life-styles
+  lift-off
   light-weight
   lim-ou-sines
   line-backer
   line-spacing
   li-on-ess
+  li-quid-ity
   lith-o-graphed
   lith-o-graphs
   lo-bot-omy
   lo-bot-om-ize
   loges
   long-est
+  look-ahead
   lo-quac-ity
   love-struck
+  macro-eco-nomic
   macro-eco-nomics
+  macro-econ-omy
+  make-in-dex
   mal-a-prop-ism
   mal-a-prop-isms
   man-slaugh-ter
   man-u-script
+  man-u-scripts
   mar-gin-al
   math-e-ma-ti-cian
   math-e-ma-ti-cians
   med-ic-aid
   medi-ocre
   medi-oc-ri-ties
+  mega-fau-na
+  mega-fau-nal
   mega-lith
   mega-liths
+  mega-nodes
   meta-bol-ic
   me-tab-o-lism
   me-tab-o-lisms
   me-tab-o-lite
   me-tab-o-lites
+  meta-form
+  meta-forms
   meta-lan-guage
   meta-lan-guages
-  meta-phor-ic
+  meta-phor
+  meta-phors
+  meta-phor-i-cal
+  meta-phor-i-cal-ly
+  meta-sta-bil-ity
+  meta-stable
+  meta-table
+  meta-tables
+  metem-psy-cho-sis
+  meth-am-phet-a-mine
   meth-ane
+  meth-od
+  meth-yl-am-mo-nium
+  meth-yl-ate
+  meth-yl-ated
+  meth-yl-a-tion
+  meth-yl-ene
   me-trop-o-lis
   me-trop-o-lises
   met-ro-pol-i-tan
   met-ro-pol-i-tans
+  micro-eco-nomic
   micro-eco-nomics
+  micro-econ-omy
+  micro-en-ter-prise
+  micro-en-ter-prises
   mi-cro-fiche
   mi-cro-fiches
   micro-organ-ism
   micro-organ-isms
+  mi-cro-struc-ture
+  mid-after-noon
   mill-age
   mil-li-liter
   mimeo-graphed
   mimeo-graphs
   mim-ic-ries
+  mine-sweeper
+  mine-sweepers
   min-is
   mini-sym-po-sium
   mini-sym-po-sia
   mis-chie-vous-ly
   mi-sers
   mi-sog-a-my
+  mne-mon-ic
+  mne-mon-ics
   mod-el-ling
+  mo-lec-u-lar
   mol-e-cule
   mol-e-cules
   mon-archs
   mono-chrome
   mono-en-er-getic
   mon-oid
+  mon-oph-thong
+  mon-oph-thongs
   mono-pole
   mono-poles
   mo-nop-oly
+  mono-space
+  mono-spaced
+  mono-spacing
   mono-spline
   mono-splines
   mono-strofic
   mud-rooms
   mul-ti-fac-eted
   mul-ti-plic-able
+  mul-ti-plic-ably
   multi-user
+  name-space
+  name-spaces
   neo-fields
   neo-nazi
   neo-nazis
   new-est
   news-let-ter
   news-let-ters
+  nil-po-tent
   nitro-meth-ane
+  node-list
+  node-lists
   no-name
   non-ar-ith-met-ic
   non-emer-gency
   non-smooth
   non-uni-form
   non-uni-form-ly
+  non-zero
   nor-ep-i-neph-rine
   not-with-stand-ing
   nu-cleo-tide
   oli-gop-o-lists
   oli-gop-oly
   oli-gop-ol-ies
+  om-ni-pres-ent
+  om-ni-pres-ence
+  ono-mat-o-poe-ia
+  ono-mat-o-po-et-ic
   op-er-and
   op-er-ands
   orang-utan
   over-views
   ox-id-ic
   pad-ding
+  page-rank
   pain-less-ly
   pal-ette
   pal-ettes
-  par-a-bola
+  pa-rab-ola
   par-a-bol-ic
   pa-rab-o-loid
   par-a-digm
   para-mag-net-ism
   para-medic
   para-methyl-anisole
+  pa-ram-e-tri-za-tion
   pa-ram-e-trize
   para-mil-i-tary
   para-mount
   path-o-gen-ic
   peev-ish
   peev-ish-ness
+  pen-al-ty
+  pen-al-ties
   pen-ta-gon
   pen-ta-gons
   pe-tro-le-um
+  phe-nol-phthalein
   phe-nom-e-non
   phenyl-ala-nine
   phi-lat-e-list
   phos-phor-ic
   pho-to-graphs
   pho-to-off-set
+  phtha-lam-ic
+  phthal-ate
+  phthi-sis
   pic-a-dor
   pic-a-dors
   pipe-line
   placa-ble
   plant-hop-per
   plant-hop-pers
+  pla-teau
+  pla-teaus
   pleas-ance
   plug-in
   plug-ins
   pol-ter-geist
+  poly-an-dr
+  poly-an-dry
+  poly-an-drous
+  poly-dac-tyl
+  poly-dac-tyl-lic
   poly-ene
   poly-eth-yl-ene
   po-lyg-a-mist
   po-lyg-a-mists
   polyg-on-i-za-tion
+  po-lyg-y-n
+  po-lyg-y-ny
+  po-lyg-y-nous
+  pol-yp
+  pol-yps
+  po-lyph-o-n
+  po-lyph-o-ny
   po-lyph-o-nous
+  poly-phon-ic
   poly-styrene
   pome-gran-ate
   poro-elas-tic
   pos-tur-al
   pre-am-ble
   pre-am-bles
+  pre-dict-able
+  pre-fers
   pre-loaded
   pre-par-ing
   pre-print
   pre-prints
   pre-proces-sor
   pre-proces-sors
+  pres-ent-ly
   pre-split-ting
   pre-wrap
   pre-wrapped
   prog-e-nies
   prog-e-ny
   pro-gram-mable
+  pro-kary-ote
+  pro-kary-otes
+  pro-kary-ot-ic
   prom-i-nent
   pro-mis-cu-ous
   prom-is-sory
   pro-hib-i-tive
   pro-hib-i-tive-ly
   pro-sciut-to
+  pros-ta-glan-din
+  pros-ta-glan-dins
+  pro-style
+  pro-styles
   pro-test-er
   pro-test-ers
   pro-tes-tor
   prov-ince
   prov-inces
   pro-vin-cial
+  pro-virus
+  pro-viruses
   prow-ess
   pseu-do-dif-fer-en-tial
   pseu-do-fi-nite
   psy-che-del-ic
   psychs
   pu-bes-cence
+  pur-ges
   quad-ding
   qua-drat-ic
   qua-drat-ics
   quad-ra-ture
+  quad-ri-lat-er-al
+  quad-ri-lat-er-als
   quad-ri-pleg-ic
+  quad-ru-ped
+  quad-ru-peds
+  quad-ru-pole
+  quad-ru-poles
   quaint-er
   quaint-est
   qua-si-equiv-a-lence
   raff-ish-ly
   ram-shackle
   rav-en-ous
+  re-allo-cate
+  re-allo-cates
+  re-allo-cated
+  re-arrange
+  re-arranges
+  re-arranged
   re-arrange-ment
   re-arrange-ments
   rec-i-proc-i-ties
   re-di-rect-ion
   re-duc-ible
   re-echo
+  re-edu-cate
+  ref-u-gee
+  ref-u-gees
+  re-imple-ment
+  re-imple-ments
+  re-imple-mented
+  re-imple-men-ta-tion
+  ren-ais-sance
   re-phrase
   re-phrases
   re-phrased
   re-po-si-tions
   re-print
   re-prints
+  re-print-ed
   re-stor-able
   retro-fit
   retro-fit-ted
   ro-bots
   ro-botic
   ro-bot-ics
+  roof-top
+  roof-tops
   round-table
   round-tables
   sales-clerk
   sales-clerks
   sales-woman
   sales-women
+  sa-lient
   sal-mo-nel-la
   sal-ta-tion
   sar-sa-par-il-la
+  sat-el-lite
+  sat-el-lites
   sauer-kraut
   scat-o-log-i-cal
+  scene-shift-er
+  scene-shift-ing
   sched-ul-ing
   schiz-o-phrenic
   schnau-zer
   semi-rings
   semi-sim-ple
   semi-skilled
+  sem-itic
+  ser-geant
+  ser-geants
   sero-epi-de-mi-o-log-i-cal
-  ser-vo-mech-anism
-  ser-vo-mech-anisms
+  ser-vo-me-chan-i-cal
+  ser-vo-mech-a-nism
+  ser-vo-mech-a-nisms
   ses-qui-pe-da-lian
   set-up
   set-ups
   se-vere-ly
+  shap-able
   shape-able
   shoe-string
   shoe-strings
+  shop-lift-er
+  shop-lift-ing
+  show-hy-phens
   side-step
   side-steps
   side-swipe
+  sign-age
+  single-space
+  single-spaced
+  single-spacing
   sky-scraper
   sky-scrapers
+  sln-uni-code
   smoke-stack
   smoke-stacks
   snor-kel-ing
   spe-lunk-er
   spend-thrift
   spher-oid
+  spher-oids
   spher-oid-al
   sphin-ges
   spic-i-ly
+  spin-or
   spin-ors
+  spokes-man
+  spokes-per-son
+  spokes-per-sons
   spokes-woman
   spokes-women
   sports-cast
   strat-a-gems
   stretch-i-er
   strip-tease
-  strong-hold
   strong-est
+  strong-hold
   stu-pid-er
   stu-pid-est
   sub-dif-fer-en-tial
   sub-ex-pres-sion
   sub-ex-pres-sions
+  sub-node
+  sub-nodes
+  sub-scrib-er
+  sub-scrib-ers
+  sub-tables
   sum-ma-ble
+  super-deri-va-tion
+  super-deri-va-tions
   super-ego
   super-egos
   su-prem-a-cist
   su-prem-a-cists
+  sur-gery
+  sur-ge-ries
+  sur-ges
   sur-veil-lance
   swim-ming-ly
   symp-to-matic
   syn-chro-nous
   syn-chro-tron
   taff-rail
+  take-over
+  take-overs
   talk-a-tive
   ta-pes-try
   ta-pes-tries
   tem-po-rar-ily
   ten-ure
   test-bed
+  tera-nodes
+  tetra-butyl-ammo-nium
+  text-height
+  text-length
   text-width
   thal-a-mus
   ther-mo-elas-tic
   tool-kit
   tool-kits
   topo-graph-i-cal
+  topo-iso-mer-ase
+  topo-iso-mer-ases
   toques
   trai-tor-ous
   trans-ceiver
   trans-ceivers
+  trans-par-en-cy
+  trans-par-en-cies
   trans-gress
   trans-ver-sal
   trans-ver-sals
   tra-ver-sals
   tri-ethyl-amine
   treach-eries
+  tribes-man
+  trip-let
+  trip-lets
+  tri-plex
+  tri-plex-es
   trou-ba-dour
   tur-key
   tur-keys
   un-err-ing-ly
   un-friend-ly
   un-friend-li-er
+  un-in-stan-ti-at-ed
   vaguer
   vaude-ville
   vic-ars
   wad-ding
   wall-flower
   wall-flow-ers
+  warm-er
   warm-est
   waste-water
   wave-guide
   wave-guides
   wave-let
   wave-lets
+  weap-ons
+  weap-on-ry
   web-like
+  web-log
+  web-logs
   week-night
   week-nights
+  weight-lift-er
+  weight-lift-ing
   wheel-chair
   wheel-chairs
   which-ever
   work-horse
   work-horses
   wrap-around
+  wrap-arounds
   wretch-ed
   wretch-ed-ly
   yes-ter-year
+  Alex-an-der
+  Alex-an-drine
   al-ge-brai-sche
+  Al-gon-quian
+  Al-gon-quin
   Al-le-ghe-ny
+  Apol-lo-dorus
   Ar-kan-sas
   ATP-ase
   ATP-ases
+  Auf-lage
   Aus-tral-asian
-  auto-mati-sier-ter
+  auto-ma-ti-sier-ter
+  Beb-chuk
   Be-die-nung
   Bembo
-  bib-li-o-gra-phi-sche
+  bi-blio-gra-phi-sche
   Bos-ton
   Brown-ian
   Bruns-wick
   Bu-da-pest
+  Burck-hardt
+  Cara-theo-dory
   Car-ib-bean
   Charles-ton
   Char-lottes-ville
+  Ches-ter
+  Chiang
+  Chich-es-ter
+  Cohen
   Co-lum-bia
   Czecho-slo-va-kia
   Del-a-ware
   Dijk-stra
+  Dor-ches-ter
+  Dorf-leit-ner
+  Drechs-ler
   Duane
   dy-na-mi-sche
+  Eijk-hout
+  Engle
+  Engel
   Eng-lish
   Euler-ian
   Evan-ston
   Free-BSD
   funk-tsional
   Gauss-ian
+  Ge-sell-schaft
   Ghost-script
   Ghost-View
+  Gott-fried
+  Gott-lieb
   Grass-mann-ian
   Greifs-wald
   Grothen-dieck
   Hel-sinki
   Her-mit-ian
   Hibbs
+  Hoef-ler
+  Hoek-water
   Hok-kai-do
+  Huber
+  Image-Magick
   Jac-kow-ski
   Jan-u-ary
   Ja-pa-nese
+  Java-Script
+  Jung-ian
   Kad-om-tsev
   Kan-sas
   Karls-ruhe
+  Keynes-ian
   Kor-te-weg
   Krishna
   Krish-na-ism
   Krish-nan
+  Kron-ecker
   Lan-cas-ter
   Le-gendre
   Leices-ter
   Lip-schitz-ian
   Loj-ban
   Lou-i-si-ana
+  Lucas
+  MacBeth
   Mac-OS
+  Ma-gel-lan
+  Ma-la-ya-lam
   Man-ches-ter
   Mar-kov-ian
   Markt-ober-dorf
   Mass-a-chu-setts
   Max-well
+  Meth-od-ist
+  Meth-od-ism
   Mi-cro-soft
+  Min-kow-ski
   Min-ne-ap-o-lis
   Min-ne-sota
+  Mont-real
   Mos-cow
-  Nach-richten
+  Nach-rich-ten
   Nash-ville
   Net-BSD
   Net-scape
+  Nietz-sche
   Nij-me-gen
   Noe-ther-ian
   Noord-wijker-hout
+  Noto-wi-digdo
   No-vem-ber
+  Obst-feld
   Open-BSD
   Open-Office
+  Oreo-pou-los
   Pala-tino
   Pa-ler-mo
   Pe-trov-ski
   Pfaff-ian
   Phil-a-del-phia
-  phil-o-soph-i-sche
+  phi-lo-so-phi-sche
   Poin-care
   Po-ten-tial-glei-chung
+  Po-to-mac
+  Pres-by-terian
+  Pres-by-terians
+  Pyong-yang
+  Py-thag-o-ras
+  Py-thag-o-re-an
   Ra-dha-krish-nan
   raths-kel-ler
+  Ravi-kumar
+  Reich-lin
   Rie-mann-ian
   Ryd-berg
-  schot-tische
-  Schro-ding-er
+  Schim-mel-pfen-nig
+  schot-ti-sche
+  Schro-din-ger
   Schwa-ba-cher
   Schwarz-schild
+  Schweid-nitz
+  Schwert
   Sep-tem-ber
+  Shore-ditch
+  Skoup
   Stokes-sche
   Stutt-gart
   Sus-que-han-na
   Tau-ber-ian
   tech-ni-sche
   Ten-nes-see
+  Thiruv-ananda-puram
+  Tol-ches-ter
   To-ma-szew-ski
+  Toyo-ta
   ty-po-graphique
   Ukrain-ian
-  ver-all-ge-mein-erte
-  Ver-ein-i-gung
+  ver-all-ge-mei-nerte
+  Ver-ei-ni-gung
   Ver-tei-lun-gen
+  Vid-ias-sov
+  Vieth
   viiith
   viith
   Wahr-schein-lich-keits-theo-rie
+  Wein-stein
+  Werk-zeuge
   Wer-ner
   Wer-ther-ian
+  Will-iam
+  Will-iams
   Win-ches-ter
   Wirt-schaft
   wis-sen-schaft-lich
+  Wolff-ian
   xviiith
   xviith
   xxiiird
index ca3db037a411e8b7d84a9e2f2e69f958a9127c08..90faf71bda6610370be607686a90a55799083352 100644 (file)
@@ -1,25 +1,24 @@
-.\" -*- mode: nroff; coding: utf-8; -*-
-.\"
 .\" Japanese localization for groff
 .\"
-.\" Copyright (C) 2009-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2009-2018 Free Software Foundation, Inc.
 .\"   Written by Fumitoshi UKAI <ukai@debian.or.jp> and
 .\"   Colin Watson <cjwatson@debian.org>
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .\" Please send comments to groff@gnu.org.
 .
 .cflags 128 \C'[CJKprepunct]'
 .cflags 266 \C'[CJKpostpunct]'
 .cflags 512 \C'[CJKnormal]'
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index ea2ba057e4c4e0c2e09d38b694fd2e09048981bc..8f4a2f0d70ede2259d26528d3d931f8ea600d005 100644 (file)
@@ -1,5 +1,3 @@
-.\" -*- nroff -*-
-.\"
 .\" papersize.tmac
 .\"
 .\" Set up groff for various paper sizes.
@@ -8,17 +6,17 @@
 .\"
 .\"   groff ... -dpaper=<format> ...
 .\"
-.\" Possible values for `format' are the same as the predefined `papersize'
-.\" values (see the groff_font man page) except a7-d7.  An appended `l'
-.\" (ell) character denotes landscape orientation.  Examples: `a4', `c3l',
-.\" `letterl'.
+.\" Possible values for 'format' are the same as the predefined
+.\" 'papersize' values (see the groff_font man page) except a7-d7.  An
+.\" appended 'l' (ell) character denotes landscape orientation.
+.\" Examples: 'a4', 'c3l', 'letterl'.
 .\"
-.\" Most output drivers need additional command line switches `-p' and
-.\" `-l' to override the default paper length and orientation as set in
+.\" Most output drivers need additional command-line switches '-p' and
+.\" '-l' to override the default paper length and orientation as set in
 .\" the driver specific DESC file.
 .\"
-.\" For example, use the following for PS output on A4 paper in landscape
-.\" orientation::
+.\" For example, use the following for PS output on A4 paper in
+.\" landscape orientation:
 .\"
 .\"   groff -Tps -dpaper=a4l -P-pa4 -P-l -ms foo.ms > foo.ps
 .
@@ -96,8 +94,8 @@
 .  ds paper-ledger-width 17i
 .  ds paper-statement-length 8.5i
 .  ds paper-statement-width 5.5i
-.  \" These dimensions for executive paper format is what all
-.  \" printer manufacturers use.
+.  \" These dimensions for executive paper format are what all printer
+.  \" manufacturers use.
 .  ds paper-executive-length 10.5i
 .  ds paper-executive-width 7.25i
 .
 .    nr paper-w 1
 .
 .  ie \n[paper-w] \
-.    tm warning: Unknown paper size `\*[paper]'
+.    tm warning: Unknown paper size '\*[paper]'
 .  el \
 .    if !r LL \
 .      nr LL \n[.l]u  \" for ms, mdoc, man
 .
 .cp \n[_C]
 .
-.\" EOF
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index cae880a89a2403d4557dfc1f4112525a9b3f9556..d2827553d01570967cba651d3f06d0e8838f762a 100644 (file)
@@ -1,10 +1,8 @@
-.\" -*- nroff -*-
-.
 .ig
 
 pdf.tmac
 
- Copyright (C) 2011-2014 Free Software Foundation, Inc.
+ Copyright (C) 2011-2018 Free Software Foundation, Inc.
       Written by Deri James <deri@chuzzlewit.myzen.co.uk>
 
 This file is part of groff.
@@ -801,5 +799,14 @@ am solely responsible for any bugs I may have introduced into this file.
 .de pdfswitchtopage
 .nop \!x X pdf: switchtopage \\$*
 ..
-.\"
-.\" pdf.tmac: end of file / vim: ft=groff
+.de pdfpause
+.nop \!x X ps: exec %%%%PAUSE
+..
+.de pdftransition
+.nop \!x X pdf: transition \\$1 \\$2 \\$3 \\$4 \\$5 \\$6 \\$7 \\$8
+..
+.\" Local Variables:
+.\" mode: nroff
+.\" End:
+.\" vim: filetype=groff:
+.\" pdf.tmac: end of file
diff --git a/tmac/pdfpic.tmac b/tmac/pdfpic.tmac
new file mode 100644 (file)
index 0000000..0400c1c
--- /dev/null
@@ -0,0 +1,148 @@
+.\" pdfpic.tmac
+.\"
+.\" Define the PDFPIC macro.
+.\"
+.\" When used other than with gropdf, the image is converted to .eps
+.\" and processing passed over to PSPIC.
+.\"
+.\" Usage:
+.\"
+.\"   .PDFPIC [-L|-R|-C|-I <indent>] <file> [<width> [<height>]]
+.\"
+.\" Requires the poppler-utils package (for pdfinfo and pdftops).
+.\" Requires running groff in unsafe mode.
+.
+.do if d PDFPIC .nx
+.
+.nr _C \n(.C
+.cp 0
+.
+.de @abort
+.  ab [PDFPIC]: \\$* Aborting.
+..
+.de PDFPIC
+.  if !\\n[.U] \
+.    @abort Use of \\$0 requires giving groff the -U option.
+.
+.  nr convert-pdf 0
+.  if !'\\*[.T]'pdf' .nr convert-pdf 1
+.
+.  nr pdf-offset-mode 0
+.
+.  \" left-aligned?
+.  ie '\\$1'-L' \{\
+.    nr pdf-offset-mode 1
+.    if \\n[convert-pdf] .ds pspic-args \\$1 \"
+.    shift
+.  \}
+.  el \{\
+.    \" right-aligned?
+.    ie '\\$1'-R' \{\
+.      nr pdf-offset-mode 2
+.      if \\n[convert-pdf] .ds pspic-args \\$1 \"
+.      shift
+.    \}
+.    el \{\
+.      \" indented?
+.      ie '\\$1'-I' \{\
+.        nr pdf-offset-mode 3
+.        nr pdf-offset (m;\\$2)
+.        if \\n[convert-pdf] .ds pspic-args \\$1 \\$2 \"
+.        shift 2
+.      \}
+.      el \{\
+.        \" centered is the default
+.        ie '\\$1'-C' \{\
+.          if \\n[convert-pdf] .ds pspic-args \\$1 \"
+.          shift
+.        \}
+.        el .nr pdf-offset-mode 0
+.      \}
+.    \}
+.  \}
+.  br
+.
+.  ds is-pdf \\$1
+.  substring is-pdf -3
+.  if !'\\*[is-pdf]'pdf' \
+.    @abort \\$1 at line \\n[.c] is not a PDF file, or lacks a .pdf extension.
+.
+.\" if driver is not gropdf, convert image to .eps
+.  if \\n[convert-pdf] \{\
+.    ds img-file \\$1
+.    substring img-file 0 -5
+.
+.    sy pdftops -eps \\$1
+.    shift
+.
+.    as pspic-args \\*[img-file].eps \\$*
+.
+.    PSPIC \\*[pspic-args]
+.    return
+.  \}
+.
+.\" get image dimensions
+.  ec @
+.  sy pdfinfo @$1 | \
+grep "Page *size" | \
+sed -e 's/Page *size: *\\([[:digit:].]*\\) *x *\\([[:digit:].]*\\).*$/\
+.nr pdf-wid (p;\\1)\\n\
+.nr pdf-ht  (p;\\2)/' \
+> /tmp/pdfpic\n[$$]
+.  so /tmp/pdfpic\n[$$]
+.  sy rm /tmp/pdfpic\n[$$]
+.  ec
+.
+.  \" if we have a <width> parameter, use it as the final
+.  \" image width; otherwise we use the image's natural width
+.  \" or the current line length, whatever is smaller
+.  ie (\\n[.$] >= 2) \
+.    nr pdf-deswid (i;\\$2)
+.  el \
+.    nr pdf-deswid ((\\n[.l] - \\n[.i]) <? \\n[pdf-wid])
+.
+.  \" compute the final image height (with proper rounding),
+.  \" based on the image's aspect
+.  nr pdf-desht (\\n[pdf-deswid] * 1000 + (\\n[pdf-wid] / 2) \
+                / \\n[pdf-wid] * \\n[pdf-ht] \
+                + 500 / 1000)
+.
+.  \" if we have a <height> parameter, use it as the final
+.  \" image height in case it is smaller than the height
+.  \" value we have just computed
+.  if ((\\n[.$] >= 3) & (\\n[pdf-desht] > (i;0\\$3))) \{\
+.    nr pdf-desht (i;\\$3)
+.    \" recompute the final image width since we always
+.    \" keep the correct image aspect
+.    nr pdf-deswid (\\n[pdf-desht] * 1000 + (\\n[pdf-ht] / 2) \
+                   / \\n[pdf-ht] * \\n[pdf-wid] \
+                   + 500 / 1000)
+.  \}
+.
+.  \" reserve vertical space for image
+.  ne (\\n[pdf-desht]u + 1v)
+.
+.  \" compute image offset w.r.t. the current left margin
+.  if (\\n[pdf-offset-mode] == 0) \
+.    nr pdf-offset (\\n[.l] - \\n[.i] - \\n[pdf-deswid] / 2)
+.  if (\\n[pdf-offset-mode] == 1) \
+.    nr pdf-offset 0
+.  if (\\n[pdf-offset-mode] == 2) \
+.    nr pdf-offset (\\n[.l] - \\n[.i] - \\n[pdf-deswid])
+.
+\h'\\n[pdf-offset]u'\
+\X'pdf: pdfpic \\$1 -L \\n[pdf-deswid]z \\n[pdf-desht]z'
+.  if !r PDFPIC_NOSPACE \{\
+.    sy echo ".nr PDFPIC_NOSPACE 0$GROFF_PDFPIC_NOSPACE" > /tmp/x\n[$$]
+.    so /tmp/x\n[$$]
+.    sy rm /tmp/x\n[$$]
+.  \}
+.  if \\n[PDFPIC_NOSPACE]==0 \{\
+.    br
+.    sp \\n[pdf-desht]u
+.  \}
+..
+.
+.cp \n[_C]
+.
+.\" end of pdfpic.tmac
index 8a8cdd2caa98929a236c808a4090a3bfb08e4d1f..948754f4e087a0b637961b07b768ebe0a461785f 100644 (file)
@@ -1,11 +1,9 @@
-.\" -*- nroff -*-
-.\"
 .\" pspic.tmac
 .\"
 .\" Define the PSPIC macro.
 .\"
-.\" When used other than with -Tps, -Tdvi, -Thtml, or -Txhtml it draws a box
-.\" around where the picture would go.
+.\" When used other than with -Tps, -Tdvi, -Thtml, or -Txhtml it draws a
+.\" box around where the picture would go.
 .\"
 .\" Usage:
 .\"
 .    \}
 .    el \{\
 .      ie '\*[.T]'ps' \{\
-.        \" prepare values for grops; the `ps-invis' and `ps-endinvis' escapes
-.        \" are for groff's -X switch to provide a PS preview with xditview:
-.        \" it uses -Tps for formatting but xditview can't handle EPS files,
-.        \" thus alternative code is enclosed between those two escapes
+.        \" prepare values for grops; the 'ps-invis' and 'ps-endinvis'
+.        \" escapes are for groff's -X switch to provide a PS preview
+.        \" with xditview: it uses -Tps for formatting but xditview
+.        \" can't handle EPS files, thus alternative code is enclosed
+.        \" between those two escapes
 .        ds ps-invis \X'ps: invis'
 .        ds ps-endinvis \X'ps: endinvis'
 .        ds ps-import \X'ps: import \E$1 \En[llx] \En[lly] \En[urx] \En[ury] \
 \Z'\D'p 0 \\n[ps-desht]u \
         (\\n[ps-deswid]u - \\n[.H]u) 0 \
         0 -\\n[ps-desht]u''\
-\# for convenience we also display the image file name (centered vertically);
+\# for convenience we also display the image file name (centered
+\# vertically);
 \Z'\v'((\\n[ps-desht]u / 2u) \
        + (\w'\\$1'u * 0) \
        + ((\\n[rst]u + \\n[rsb]u) / 2u))'\h'1m'\\$1'\
 .
 .cp \n[_C]
 .
-.\" end of pspic.tmac
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 05283bc9ed58dc6912ac0b0face9d0c48d13688e..f8b0c03b86837bf7933a7859c489ef938d2e1df6 100644 (file)
@@ -1,8 +1,6 @@
-.\" -*- nroff -*-
-.\"
 .\" ptx.tmac
 .\"
-.\"   Provide `.xx' macro to format permuted index entries as created
+.\"   Provide '.xx' macro to format permuted index entries as created
 .\"   by GNU ptx.
 .\"
 .\" Written 2008 by Werner Lemberg (wl@gnu.org)
 .
 .nf
 .
-.\" eof
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index e681bcc2606b1c72f02ea52e88e84e13401273c2..10a90c64bc694ff4f71fada9349c2b2d877442e8 100644 (file)
@@ -1,26 +1,25 @@
-.\" -*- mode: nroff; coding: iso-latin-1; -*-
-.\"
 .\" refer-me.tmac
 .\"
 .\" Refer support for me macros.
 .\"
-.\" Copyright (C) 2011-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2011-2018 Free Software Foundation, Inc.
 .\"   Written by Werner Lemberg (wl@gnu.org)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .\" Please send comments to groff@gnu.org.
 .
 .
 .mso refer.tmac
 .
-.\" EOF
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 4f37dc016e9adba60a6c07d7e484d3a9f6ee0aec..4453ecfa1e9ef595157c5c974606f75fc51b07dc 100644 (file)
@@ -1,26 +1,25 @@
-.\" -*- mode: nroff; coding: iso-latin-1; -*-
-.\"
 .\" refer-ms.tmac
 .\"
 .\" Refer support for ms macros.
 .\"
-.\" Copyright (C) 2011-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2011-2018 Free Software Foundation, Inc.
 .\"   Written by Werner Lemberg (wl@gnu.org)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .\" Please send comments to groff@gnu.org.
 .
 .
 .mso refer.tmac
 .
-.\" EOF
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 3448f91b93ea9ec03886e7723d2502694e827433..4727643fe00b94e5017930410459ffbaf2f9323f 100644 (file)
@@ -1,42 +1,41 @@
-.\" -*- mode: nroff; coding: iso-latin-1; -*-
-.\"
 .\" refer.tmac
 .\"
-.\" This is an interface to `refer', originally part of `s.tmac'.
+.\" This is an interface to 'refer', originally part of 's.tmac'.
 .\"
-.\" Copyright (C) 2011-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2011-2018 Free Software Foundation, Inc.
 .\"   Written by Werner Lemberg (wl@gnu.org)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .\" Please send comments to groff@gnu.org.
 .
 .
 .\" The following macros must be defined:
 .\"
-.\"   ref*error                     -- print an error message (in arg1)
+.\"   ref*error                     -- print an error message (in $1)
 .\"
-.\"   ref*text-label-start          -- start a reference in text (formatted
-.\"                                    reference number in arg1)
+.\"   ref*text-label-start          -- start a reference in text
+.\"                                    (formatted reference # in $1)
 .\"   ref*text-label-end            -- end a reference in text
 .\"
-.\"   ref*biblio-item-start         -- a reference item with label (in arg1)
-.\"                                    in the bibliography block
-.\"   ref*biblio-item-start-nolabel -- a reference item without label in the
-.\"                                    bibliography block
+.\"   ref*biblio-item-start         -- a reference item with label
+.\"                                    (in $1) in the bibliography block
+.\"   ref*biblio-item-start-nolabel -- a reference item without label in
+.\"                                    the bibliography block
 .\"   ref*biblio-item-end           -- end a reference item in the
 .\"                                    bibliography block
 .\"
 .\"
 .\" The following strings must be defined:
 .\"
-.\"   ref*refnum-start              -- start reference number formatting in
-.\"                                    footnote
-.\"   ref*refnum-end                -- end reference number formatting in
-.\"                                    footnote
+.\"   ref*refnum-start              -- start reference number formatting
+.\"                                    in footnote
+.\"   ref*refnum-end                -- end reference number formatting
+.\"                                    in footnote
 .\"
 .\"   [.                            -- start reference number in text
-.\"                                    (directly inserted by `refer')
-.\"   .]                            -- end reference number in text (directly
-.\"                                    inserted by `refer')
+.\"                                    (directly inserted by 'refer')
+.\"   .]                            -- end reference number in text
+.\"                                    (directly inserted by 'refer')
 .\"
 .\" Here is the specification of the five possible reference styles
-.\" provided by `refer'.  The example entries are taken from the ms
-.\" macro package
+.\" provided by 'refer'.  The example entries are taken from the ms
+.\" macro package.
 .\"
 .\"   ref*spec!0  Q A T S V N P I C D O      -- other
 .\"   ref*spec!1  Q A T J S V N P I C D O    -- journal article
 .\"   ref*spec!3  Q A T B E S V P I C D O    -- article within book
 .\"   ref*spec!4  Q A T R G P I C D O        -- technical report
 .\"
-.\" Now the setup for the formatting of reference entries.  The given example
-.\" entries for the various strings are taken from the ms macro package.
+.\" Now the setup for the formatting of reference entries.  The given
+.\" example entries for the various strings are taken from the ms macro
+.\" package.
 .\"
-.\" Each string defines five arguments which are passed to a macro, with the
-.\" meaning as below.  Please refer to the man page of `refer' for more
-.\" details on the fields.  To allow fine-tuning, two levels are implemented:
-.\" For the refer field X and style Y the string `ref*spec!X:Y' is looked up.
-.\" If it doesn't exist, the string `ref*spec!X' is used instead.
+.\" Each string defines five arguments which are passed to a macro, with
+.\" the meaning as below.  Please refer to the man page of 'refer' for
+.\" more details on the fields.  To allow fine-tuning, two levels are
+.\" implemented: For the refer field X and style Y the string
+.\" 'ref*spec!X:Y' is looked up.  If it doesn't exist, the string
+.\" 'ref*spec!X' is used instead.
 .\"
-.\"   arg 1  the punctuation character to use to separate this field from the
-.\"          previous field
+.\"   arg 1  the punctuation character to use to separate this field
+.\"          from the previous field
 .\"   arg 2  a string to insert after the punctuation character of the
 .\"          previous field (normally a space)
 .\"   arg 3  a string with which to prefix this field
 .\"   arg 4  a string with which to postfix this field
-.\"   arg 5  a string to add after the punctuation character supplied by the
-.\"          next field
+.\"   arg 5  a string to add after the punctuation character supplied
+.\"          by the next field
 .\"
 .\"                  1  2   3        4     5
-.\"   ----------------------------------------------------------------------
+.\"   ------------------------------------------------------------------
 .\"   ref*spec!A     ,  " "                       -- author name
-.\"   ref*spec!B     "" " " "in \fI" ""    "\fP"  -- book title of article
+.\"   ref*spec!B     "" " " "in \fI" ""    "\fP"  -- bk title of article
 .\"   ref*spec!D     "" " " "("      ")"          -- date of publication
 .\"   ref*spec!E     ,  " " "ed. "                -- editor
-.\"   ref*spec!G     "" " " "("      ")"          -- US Gov. ordering number
+.\"   ref*spec!G     "" " " "("      ")"          -- US Gov. ordering #
 .\"   ref*spec!J     ,  " " "\fI"    ""    "\fP"  -- journal name
 .\"   ref*spec!N     "" "(" ""       ")"          -- issue number
 .\"   ref*spec!O     .  " "                       -- other information
 .      ie d ref*spec!\\$1 \
 .              ref*build \\$1 \\*[ref*spec!\\$1]
 .      el \{\
-.              ref*error "unknown reference type `\\$1'"
+.              ref*error "unknown reference type '\\$1'"
 .              ref*build 0 \\*[ref*spec!0]
 .      \}
 .      ref*print
 .\" First argument is the field letter.
 .\" Second argument is the punctuation character to use to separate this
 .\" field from the previous field.
-.\" Third argument is a string to insert after the punctuation character of
-.\" the previous field (normally a space).
+.\" Third argument is a string to insert after the punctuation character
+.\" of the previous field (normally a space).
 .\" Fourth argument is a string with which to prefix this field.
 .\" Fifth argument is a string with which to postfix this field.
 .\" Sixth argument is a string to add after the punctuation character
 ..
 .
 .
-.\" EOF
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index cf0eca802932ea0a3a8dc82cf3c729c7ff751d0c..1d0b0aeddada405d70c55aa52be3ec96579a3079 100644 (file)
@@ -1,9 +1,8 @@
-.\" -*- nroff -*-
 .ig
 
 s.tmac
 
-Copyright (C) 1989-201 Free Software Foundation, Inc.
+Copyright (C) 1989-2018 Free Software Foundation, Inc.
      Written by James Clark (jjc@jclark.com)
 
 This file is part of groff.
@@ -19,7 +18,7 @@ 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, see <http://www.gnu.org/licenses/>.
+along with this program.  If not, see <http://www.gnu.org/licenses/>.
 ..
 .if !\n(.g .ab These ms macros require groff.
 .if \n(.C \
@@ -132,13 +131,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .als AI cov*err-not-before-tl
 .als AB cov*err-not-before-tl
 .de cov*first-page-init
-.\" Invoked by `.wh 0' trap on first page.
+.\" Invoked by '.wh 0' trap on first page.
 .\" We should not come here again, but at short page length,
 .\" recursion may occur; remove trap and macro to avoid it.
 .ch cov*first-page-init
 .rm cov*first-page-init
 .if !'\\n[.ev]'0' \{\
-.      @error must be in top-level environment, not `\\n[.ev]',
+.      @error must be in top-level environment, not '\\n[.ev]',
 .      @error when first page is started
 .\}
 .par@init
@@ -367,8 +366,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .als FS @FS
 .als FE @FE
 .CHECK-FOOTER-AND-KEEP
-.\" If anything was printed below where the footer line is normally printed,
-.\" then that's an overflow.
+.\" If anything was printed below where the footer line is normally
+.\" printed, then that's an overflow.
 .if -\\n[FM]/2+1v+\\n[cov*page-length]<\\n[nl] .@error cover sheet overflow
 .pl \\n[cov*page-length]u
 .bp 1
@@ -576,7 +575,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 ..
 .de pg*end-page
 .po \\n[PO]u
-.\" Make sure we don't exit if there are still floats or footnotes left-over.
+.\" Make sure we don't exit if there are still floats or footnotes
+.\" left-over.
 .ie \\n[kp@head]<\\n[kp@tail]:\\n[fn@have-overflow] \{\
 .      \" Switching environments ensures that we don't get an unnecessary
 .      \" blank line at the top of the page.
@@ -585,7 +585,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .      ev
 .\}
 .el \{\
-.      \" If the text has ended and there are no more footnotes or keeps, exit.
+.      \" If the text has ended and there are no more footnotes or
+.      \" keeps, exit.
 .      if \\n[pg@text-ended] .ex
 .      if r pg*next-number \{\
 .              pn \\n[pg*next-number]
@@ -619,8 +620,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .de pg@super-eject
 .br
 .if !'\\n(.z'' .@error-recover diversion open while ejecting page
-.\" Make sure we stay in the end macro while there is still footnote overflow
-.\" left, or floating keeps.
+.\" Make sure we stay in the end macro while there is still footnote
+.\" overflow left, or floating keeps.
 .while \\n[kp@tail]>\\n[kp@head]:\\n[pg@fn-flag] \{\
 .      rs
 .      bp
@@ -656,7 +657,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .      el .fn*do-FS
 .\}
 ..
-.\" Second argument of `no' means don't embellish the first argument.
+.\" Second argument of 'no' means don't embellish the first argument.
 .de fn*do-FS
 .if \\n[fn*open] .@error-recover nested FS
 .nr fn*open 1
@@ -796,7 +797,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .\}
 .el \!.fn*embed-end
 ..
-.\" It's important that fn@print-sep use up exactly fn@sep-dist vertical space.
+.\" It's important that fn@print-sep use up exactly fn@sep-dist vertical
+.\" space.
 .de fn@print-sep
 .ev fn
 .in 0
@@ -878,8 +880,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .\}
 ..
 .de kp*do-top
-.\" If the first keep won't fit, only force it out if we haven't had a footnote
-.\" and we're at the top of the page.
+.\" If the first keep won't fit, only force it out if we haven't had a
+.\" footnote and we're at the top of the page.
 .nr kp*force \\n[pg@fn-flag]=0&(\\n[nl]<=\\n[pg@header-bottom])
 .nr kp*fits 1
 .while \\n[kp@tail]>\\n[kp@head]&\\n[kp*fits] \{\
@@ -1024,7 +1026,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .\" Paragraph-level formatting.
 .\" Load time initialization.
 .de par@load-init
-.\" PS and VS might have been set on the command-line
+.\" PS and VS might have been set on the command line
 .if !rPS .nr PS 10
 .if !rLL .nr LL 6i
 .ll \\n[LL]u
@@ -1049,7 +1051,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .              par*vs "(\\n[PS] + 2)"
 .\}
 .if dFAM .fam \\*[FAM]
-.if !rHY .nr HY 14
+.if !rHY .nr HY 6
 .hy \\n[HY]
 .TA
 .CHECK-FOOTER-AND-KEEP
@@ -1297,7 +1299,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .      nr \\n[.ev]:pri \\n[\\n[.ev]:pri!\\n[\\n[.ev]:il]]
 .\}
 .el .@error unbalanced \\$0
-.par@reset
+.ie '\\$0'QE' .par*start 0 0
+.el .par@reset
 ..
 .de @QS
 .br
@@ -1310,7 +1313,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .nr \\n[.ev]:li +\\n[QI]
 .nr \\n[.ev]:ri +\\n[QI]
 .nr \\n[.ev]:ai \\n[\\n[.ev]:PI]
-.par@reset
+.par*start 0 0
 ..
 .als @QE @RE
 .\" start boxed text
@@ -1332,8 +1335,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .B2
 ..
 .\" end boxed text
-.\" Postpone the drawing of the box until we're in the top-level diversion,
-.\" in case there's a footnote inside the box.
+.\" Postpone the drawing of the box until we're in the top-level
+.\" diversion, in case there's a footnote inside the box.
 .de B2
 .ie '\\n(.z'par*box-div' \{\
 .      br
@@ -1392,20 +1395,23 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .if !rHORPHANS .nr HORPHANS 1
 .
 .\" \n[GROWPS] and \n[PSINCR] cause auto-increment of header point size.
-.\" Initialise them, so they have no effect, unless explicitly set by the user.
+.\" Initialise them, so they have no effect, unless explicitly set by
+.\" the user.
 .if !rGROWPS .nr GROWPS 0
 .if !rPSINCR .nr PSINCR 1p
 .
 .de SH-NO-TAG
 .par@finish
-.\" Keep the heading and the first few lines of the next paragraph together.
-.\" (\n[HORPHANS] defines "first few" -- default = 1; user may redefine it).
+.\" Keep the heading and the first few lines of the next paragraph
+.\" together.  (\n[HORPHANS] defines "first few" -- default = 1; user
+.\" may redefine it).
 .nr sh*minvs \\n[HORPHANS]v
 .if \\n[sh*psincr]<0 .nr sh*psincr 0
 .ie \\n(VS<1000 .par*vs \\n(VSp+\\n[sh*psincr]u
 .el .par*vs \\n(VSp/1000u+\\n[sh*psincr]u
 .ne 2v+\\n[sh*minvs]u+\\n[\\n[.ev]:PD]u+\\n(.Vu
-.\" Adjust point size for heading text, as specified by \n[GROWPS] and \n[PSINCR].
+.\" Adjust point size for heading text, as specified by \n[GROWPS] and
+.\" \n[PSINCR].
 .ie \\n(PS<1000 .ps \\n(PS+\\n[sh*psincr]u
 .el .ps \\n(PSz/1000u+\\n[sh*psincr]u
 .sp 1
@@ -1497,12 +1503,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .\" footnote paragraphs
 .\" FF is the footnote format
 .nr FF 0
-.\" This can be redefined. It gets a second argument of `no' if the first
-.\" argument was supplied by the user, rather than automatically.
+.\" This can be redefined. It gets a second argument of 'no' if the
+.\" first argument was supplied by the user, rather than automatically.
 .de FP
 .br
 .if !d par*fp!\\n[FF] \{\
-.      @error unknown footnote format `\\n[FF]'
+.      @error unknown footnote format '\\n[FF]'
 .      nr FF 0
 .\}
 .ie '\\$2'no' .par*fp!\\n[FF]-no "\\$1"
@@ -1723,8 +1729,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .              nf
 .              ie \\n[dl] \{\
 .\"                     --fixme-- this really should not be necessary
-.\"                     and indicates that there is extra space creeping into
-.\"                     an equation when ps4html is enabled..
+.\"                     and indicates that there is extra space creeping
+.\"                     into an equation when ps4html is enabled..
 .                      ie r ps4html .ds@need \\n[dn]u-1v+\n[.V]u+1i
 .                      el .ds@need \\n[dn]u-1v+\n[.V]u
 .                      chop eqn*div
@@ -1748,7 +1754,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .              sp \\n[DD]u
 .              ta \\*[eqn*tabs]
 .      \}
-.      el \{
+.      el \{\
 .\" must terminate empty equations in html and ps4html as they contain
 .\" the EQN-HTML-IMAGE-END suppression nodes
 .              if \\n[dl] .chop eqn*div
@@ -1876,7 +1882,8 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .ds U \(rq
 .ds - \(em
 .\" Characters
-.\" The idea of this definition is for the top of the 3 to be at the x-height.
+.\" The idea of this definition is for the top of the 3 to be at the
+.\" x-height.
 .if !c\[yogh] .char \[yogh] \Z'\v'\w'x'*0-\En[rst]u'\s[\En[.s]*8u/10u]\
 \v'\w'3'*0+\En[rst]u'3\s0'\h'\w'\s[\En[.s]*8u/10u]3'u'
 .\" Accents
@@ -1951,15 +1958,17 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .\" ******** module bell ********
 .\" ****************************
 .\" Emulate Bell Labs localisms. Note, (a) they're not documented, and
-.\" (b) the .P1 and .UC macros collide with different ones in Berkeley ms.
-.\" We hack around this by conditionalizing the behavior of P1; UC was
-.\" not defined by groff and will be a no-op if called Berkeley style
-.\" with no arguments, so there is no problem with hijacking it here.
+.\" (b) the .P1 and .UC macros collide with different ones in Berkeley
+.\" ms.  We hack around this by conditionalizing the behavior of P1; UC
+.\" was not defined by groff and will be a no-op if called Berkeley
+.\" style with no arguments, so there is no problem with hijacking it
+.\" here.
 .\"
-.\" What's done here is sufficient to give back the Guide to EQN (1976) its
-.\" section headings and restore some text that had gone missing as macro
-.\" arguments; no warranty express or implied is given as to how well the
-.\" typographic details these produce match the original Bell Labs macros.
+.\" What's done here is sufficient to give back the Guide to EQN (1976)
+.\" its section headings and restore some text that had gone missing as
+.\" macro arguments; no warranty express or implied is given as to how
+.\" well the typographic details these produce match the original Bell
+.\" Labs macros.
 .\"
 .\" P1 is now defined in module pg.
 .de SC
@@ -1976,4 +1985,12 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
 .      DE
 .\}
 ..
-.\" Make sure that no blank lines creep in at the end of this file.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 0bb59f8f0480e112dec1fccf7d88f897211bb246..71756373465c7735a16f3bafe31fca84aa5bdd8c 100644 (file)
@@ -1,12 +1,13 @@
-# strip comments, spaces, etc., after a line containing `%beginstrip%'
 /%beginstrip%/,$ {
+  /%beginstrip%/c\
+.\\" This is a generated file, created by 'tmac/strip.sed' in groff's\
+.\\" source distribution from a file having '-u' appended to its name.
   s/^\.[        ]*/./
   s/^\.\\".*/./
   s/^\\#.*/./
   s/\\".*/\\"/
   s/\\#.*/\\/
-  /\(.[ad]s\)/!s/[      ]*\\"//
-  /\(.[ad]s\)/s/\([^    ]*\)\\"/\1/
-  s/\([^/]\)doc-/\1/g
+  /.[ad]s/!s/[  ]*\\"//
+  /.[ad]s/s/\([^        ]*\)\\"/\1/
+  /^\.$/d
 }
-/^\.$/d
index df2519fe5a4d2e37bc0eb3d1c8772e8fde03883b..22e82ad53268fe329bc991221dd1f1d3e0378aad 100644 (file)
@@ -1,24 +1,23 @@
-.\" -*- mode: nroff; coding: iso-latin-1; -*-
-.\"
 .\" Swedish localization for groff
 .\"
-.\" Copyright (C) 2006-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2006-2018 Free Software Foundation, Inc.
 .\"   Written by Werner Lemberg (wl@gnu.org)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .\" Please send comments to groff@gnu.org.
 .
 .      \" update the date
 .      ds DY \n[dy] \*[MO] \n[year]
 .      \" set hyphenation flags
-.      nr HY 8
+.      nr HY 4
 .\}
 .
 .
 .mso latin1.tmac
 .
 .
-.\" Swedish hyphenation
+.\" Swedish hyphenation (\lefthyphenmin=1, \righthyphenmin=2)
 .ss 12 0
-.hy 8
+.hy 32
 .hcode å å  Å å
 .hcode ä ä  Ä ä
 .hcode ö ö  Ö ö
 .hpf hyphen.sv
 .
 .
-.\" man, mdoc and mdoc-old are intentionally left untouched:
-.\" usually these packages are translated in the sources of the documents.
+.\" man, mdoc and mdoc-old are intentionally left untouched: usually
+.\" these packages are translated in the sources of the documents.
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
 .
-.\" end of sv.tmac
+.\" Local Variables:
+.\" mode: nroff
+.\" coding: latin-1
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/tmac.am b/tmac/tmac.am
new file mode 100644 (file)
index 0000000..bee6229
--- /dev/null
@@ -0,0 +1,270 @@
+# Copyright (C) 1989-2018 Free Software Foundation, Inc.
+#      Written by James Clark (jjc@jclark.com)
+#      Automake migration by Bertrand Garrigues
+#
+# Latest update: 22 Aug 2015
+#
+# This file is part of groff.
+#
+# groff 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 3 of the License, or (at your
+# option) any later version.
+#
+# groff 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, see <http://www.gnu.org/licenses/>.
+tmac_srcdir = $(top_srcdir)/tmac
+tmac_builddir = $(top_builddir)/tmac
+
+man7_MANS += \
+  tmac/groff_ms.7 \
+  tmac/groff_man.7 \
+  tmac/groff_me.7 \
+  tmac/groff_mdoc.7 \
+  tmac/groff_trace.7 \
+  tmac/groff_www.7
+
+TMACNORMALFILES = \
+  tmac/man.tmac \
+  tmac/mandoc.tmac \
+  tmac/andoc.tmac \
+  tmac/an-old.tmac \
+  tmac/an-ext.tmac \
+  tmac/ms.tmac \
+  tmac/me.tmac \
+  tmac/mdoc.tmac \
+  tmac/pic.tmac \
+  tmac/a4.tmac \
+  tmac/papersize.tmac \
+  tmac/62bit.tmac \
+  tmac/ec.tmac \
+  tmac/safer.tmac \
+  tmac/trace.tmac \
+  tmac/ps.tmac \
+  tmac/psold.tmac \
+  tmac/pdfpic.tmac \
+  tmac/pspic.tmac \
+  tmac/psatk.tmac \
+  tmac/pdf.tmac \
+  tmac/dvi.tmac \
+  tmac/tty.tmac \
+  tmac/tty-char.tmac \
+  tmac/latin1.tmac \
+  tmac/latin2.tmac \
+  tmac/latin5.tmac \
+  tmac/latin9.tmac \
+  tmac/cp1047.tmac \
+  tmac/unicode.tmac \
+  tmac/X.tmac \
+  tmac/Xps.tmac \
+  tmac/lj4.tmac \
+  tmac/lbp.tmac \
+  tmac/html.tmac \
+  tmac/html-end.tmac \
+  tmac/devtag.tmac \
+  tmac/europs.tmac \
+  tmac/composite.tmac \
+  tmac/fallbacks.tmac \
+  tmac/eqnrc \
+  tmac/refer.tmac \
+  tmac/refer-me.tmac \
+  tmac/refer-ms.tmac \
+  tmac/troffrc \
+  tmac/troffrc-end \
+  tmac/trans.tmac \
+  tmac/hyphen.us \
+  tmac/hyphenex.us \
+  tmac/fr.tmac \
+  tmac/hyphen.fr \
+  tmac/sv.tmac \
+  tmac/hyphen.sv \
+  tmac/de.tmac \
+  tmac/den.tmac \
+  tmac/hyphen.det \
+  tmac/hyphen.den \
+  tmac/cs.tmac \
+  tmac/hyphen.cs \
+  tmac/hyphenex.cs \
+  tmac/ja.tmac \
+  tmac/zh.tmac
+NORMALFILES = `echo $(TMACNORMALFILES) | sed -e "s|tmac/||g"`
+
+# TMACSTRIPFILES are built from their unstripped version (-u)
+TMACSTRIPFILES = tmac/e.tmac tmac/doc.tmac tmac/doc-old.tmac
+
+# Files installed in tmacdir
+dist_tmac_DATA = $(TMACNORMALFILES) tmac/an.tmac tmac/s.tmac
+nodist_tmac_DATA = $(TMACSTRIPFILES) tmac/www.tmac
+
+TMACMDOCFILES = \
+  tmac/doc-common \
+  tmac/doc-ditroff \
+  tmac/doc-nroff \
+  tmac/doc-syms
+MDOCFILES = `echo $(TMACMDOCFILES) | sed -e "s|tmac/||g"`
+mdocdir=$(tmacdir)/mdoc
+# Files installed in mdocdir
+nodist_mdoc_DATA = $(TMACMDOCFILES)
+
+# Installed in localtmacdir
+dist_localtmac_DATA = tmac/man.local tmac/mdoc.local
+
+MOSTLYCLEANFILES += $(TMACMDOCFILES) tmac/www.tmac $(TMACSTRIPFILES) \
+   tmac/stamp-wrap \
+   tmac/*-wrap
+
+EXTRA_DIST += \
+  tmac/fixmacros.sed \
+  tmac/groff_ms.7.man \
+  tmac/groff_man.7.man \
+  tmac/groff_me.7.man \
+  tmac/groff_mdoc.7.man \
+  tmac/groff_trace.7.man \
+  tmac/groff_www.7.man \
+  tmac/hyphenex.pl \
+  tmac/LOCALIZATION \
+  tmac/man.ultrix \
+  tmac/psfig.tmac \
+  tmac/ptx.tmac \
+  tmac/strip.sed \
+  tmac/TESTING-HINTS \
+  tmac/TODO \
+  tmac/www.tmac.in
+
+dist-hook: tmac-dist-hook
+tmac-dist-hook:
+       chmod u+w $(distdir)/tmac
+       for f in $(TMACMDOCFILES) $(TMACSTRIPFILES); do \
+         cp -f $(top_srcdir)/$$f-u $(distdir)/tmac; \
+       done
+
+$(TMACMDOCFILES) $(TMACSTRIPFILES): 
+       $(MKDIR_P) $(top_builddir)/tmac
+       for f in $(TMACMDOCFILES) $(TMACSTRIPFILES); do \
+          sed -f $(tmac_srcdir)/strip.sed $(top_srcdir)/$$f-u > $(top_builddir)/$$f; \
+       done
+
+tmac/www.tmac: tmac/www.tmac.in
+       $(MKDIR_P) $(top_builddir)/tmac
+       sed -e "s;[@]PNMTOPS_NOSETPAGE[@];$(pnmtops_nosetpage);g" \
+         $(tmac_srcdir)/www.tmac.in > $(top_builddir)/tmac/www.tmac
+
+# The installation of groff compatibility wrappers for vendor-provided
+# non-GNU macro sets is controlled by 'compatibility_wrappers' (see the
+# commentary surrounding m4/groff.m4's
+# GROFF_WITH_COMPATIBILITY_WRAPPERS).  Collision detection variables of
+# the form 'tmac_<macro>_prefix' are defined in Makefile.am, to assist
+# in the installation of groff-provided macro sets.
+#
+# When 'compatibility_wrappers' is 'no', one step is performed:
+#   - the groff-provided macro set implementations are installed in
+#     <prefix>/share/groff/<version>/tmac/ with the original macro set
+#     name
+#
+# When 'compatibility_wrappers' is 'yes', two steps are performed:
+#   - the groff-provided macro set implementations are installed in
+#     <prefix>/share/groff/<version>/tmac/ with a prefix of
+#     $(tmac_prefix) (which is usually 'g', via the appropriate
+#     collision detection variable)
+#   - the generated compatibility wrappers are installed in
+#     <prefix>/lib/groff/site-tmac, with the original macro set name
+#
+# When 'compatibility_wrappers' is 'manual', two steps are performed:
+#   - the groff-provided macro set implementations are installed in
+#     <prefix>/share/groff/<version>/tmac/ with the original macro set
+#     name
+#   - the generated compatibility wrappers are installed in
+#     <prefix>/lib/groff/site-tmac, with a name of
+#     <macro><wrapper_suffix>, (which is usually '-os', see
+#     'wrapper_suffix_default' in Makefile.am)
+
+
+all: tmac/stamp-wrap
+
+# Generate groff compatibility wrappers for all non-GNU OS provided
+# macro sets.
+tmac/stamp-wrap:
+       $(MKDIR_P) $(top_builddir)/tmac;
+       if test -n "$(tmac_wrap)"; then \
+         for m in ""$(tmac_wrap); do \
+           $(RM) $(top_builddir)/tmac/$$m-wrap; \
+           if test "$$m" = an; then \
+             echo .do mso andoc.tmac >>$(top_builddir)/tmac/$$m-wrap; \
+           fi; \
+           echo .cp 1 >>$(top_builddir)/tmac/$$m-wrap; \
+           echo .so $(sys_tmac_prefix)$$m >>$(top_builddir)/tmac/$$m-wrap; \
+         done; \
+       fi
+       touch $@
+
+# Install groff compatibility wrappers into
+# <prefix>/lib/groff/site-tmac.
+install-data-local: install_tmac_wrap
+install_tmac_wrap:
+       $(MKDIR_P) $(DESTDIR)$(systemtmacdir);
+       if test "$(compatibility_wrappers)" != "no"; then \
+         if test -n "$(tmac_wrap)"; then \
+           for m in ""$(tmac_wrap); do \
+             $(INSTALL_DATA) $(tmac_builddir)/$$m-wrap \
+                $(DESTDIR)$(systemtmacdir)/$$m$(wrapper_suffix).tmac; \
+           done; \
+         fi; \
+       fi
+
+# Rename the groff implementations of colliding macro sets to have a
+# prefix.
+install-data-hook: install_tmac_wrap_hook
+install_tmac_wrap_hook:
+       if test "$(compatibility_wrappers)" = "yes"; then \
+         if test -n "$(tmac_wrap)"; then \
+           if test -f $(DESTDIR)$(tmacdir)/s.tmac -a -n "$(tmac_s_prefix)"; \
+           then \
+             mv $(DESTDIR)$(tmacdir)/s.tmac \
+                $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac; \
+           fi; \
+           if test -f $(DESTDIR)$(tmacdir)/an.tmac -a -n "$(tmac_an_prefix)"; \
+           then \
+             mv $(DESTDIR)$(tmacdir)/an.tmac \
+                $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac; \
+           fi; \
+         fi; \
+       fi
+
+# Uninstall groff compatibility wrappers & renamed groff implementation
+# macro sets.
+uninstall_groffdirs: uninstall_tmac_hook
+uninstall_tmac_hook:
+       if test -n "$(tmac_wrap)"; then \
+         if test "$(compatibility_wrappers)" != "no"; then \
+           for m in ""$(tmac_wrap); do \
+             $(RM) $(DESTDIR)$(systemtmacdir)/$$m$(wrapper_suffix).tmac; \
+           done; \
+         fi; \
+         $(RM) -f $(DESTDIR)$(tmacdir)/$(tmac_an_prefix)an.tmac; \
+         $(RM) -f $(DESTDIR)$(tmacdir)/$(tmac_s_prefix)s.tmac; \
+       fi
+       if test -d $(DESTDIR)$(mdocdir); then \
+         rmdir $(DESTDIR)$(mdocdir); \
+       fi
+       if test -d $(DESTDIR)$(tmacdir); then \
+         rmdir $(DESTDIR)$(tmacdir); \
+       fi
+       if test -d $(DESTDIR)$(localtmacdir); then \
+         rmdir $(DESTDIR)$(localtmacdir); \
+       fi
+
+
+########################################################################
+# Editor settings
+########################################################################
+#
+# Local Variables:
+# mode: makefile-automake
+# fill-column: 72
+# End:
+# vim: set filetype=automake textwidth=72:
index 63885bd5e0c15a507289e46a0a6cd6f9bdfb587e..aea231ae268e6ebe52943bb20e6edb10741f023f 100644 (file)
@@ -1,47 +1,45 @@
-.\" -*- nroff -*-
-.\"
 .\" trace.tmac
 .\"
 .\" Load this before a macro package that you want to trace.
 .\"
 .\"
-.\" Copyright (C) 1989-201 Free Software Foundation, Inc.
+.\" Copyright (C) 1989-2018 Free Software Foundation, Inc.
 .\"      Written by James Clark (jjc@jclark.com)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .
 .
 .\" Tracing within groff means replacing the original macros or requests
-.\" with special versions which act as wrappers to emit tracing information.
-.\" A natural consequence of creating such wrappers is that arguments must
-.\" be expanded once more.  In most cases it doesn't matter, however,
-.\" sometimes it makes a difference.
+.\" with special versions which act as wrappers to emit tracing
+.\" information.  A natural consequence of creating such wrappers is
+.\" that arguments must be expanded once more.  In most cases it doesn't
+.\" matter, however, sometimes it makes a difference.
 .\"
 .\" To limit side effects, only macros are traced by default, together
-.\" with some requests like `.return' which don't take (user) arguments.
+.\" with some requests like '.return' which don't take (user) arguments.
 .\" If you want more tracing, especially of number and string register
-.\" assignments, add the `-r trace-full=1' command line option.
+.\" assignments, add the '-r trace-full=1' command-line option.
 .
 .
-.\" Regarding the usage of `.do': All lines of macros which should
-.\" work in compatibility mode must be protected if they contain
-.\" GNU troff extensions and are defined with `.de'.  Example: `.ds',
-.\" but not `.ds1', since the latter can't be called in compatibility
-.\" mode.
+.\" Regarding the usage of '.do': All lines of macros which should work
+.\" in compatibility mode must be protected if they contain GNU troff
+.\" extensions and are defined with '.de'.  Example: '.ds', but not
+.\" '.ds1', since the latter can't be called in compatibility mode.
 .
 .
 .do if d !!!sp \
 .    ecs
 .    ec
 .    !!substring \$*
-.    tm1 "\*[!!!sp]*** .substring \$* (-> `\*[\$1]')
+.    tm1 "\*[!!!sp]*** .substring \$* (-> '\*[\$1]')
 .    ecr
 .  .
 .
 .    do ecr
 .  .
 .
-.  !!c We must use `.de' for the redefinition of .mso to avoid
+.  !!c We must use '.de' for the redefinition of .mso to avoid
 .  !!c side effects; for example, it might be called with
-.  !!c `.do mso ...'.
+.  !!c '.do mso ...'.
 .
 .  rn mso !!mso
 .
 .  do ecr
 ..
 .
-.!!c Now the central tracing macros.  The redefined `de' macros
-.!!c create wrapper macros `foo' which emit tracing messages
-.!!c before and after the call to the traced macro `!!foo'.
+.!!c Now the central tracing macros.  The redefined 'de' macros
+.!!c create wrapper macros 'foo' which emit tracing messages
+.!!c before and after the call to the traced macro '!!foo'.
 .!!c
-.!!c Note that we define `!!foo' in advance so that an alias to
-.!!c `!!!!foo' is possible.  The latter occurs if `foo' is
+.!!c Note that we define '!!foo' in advance so that an alias to
+.!!c '!!!!foo' is possible.  The latter occurs if 'foo' is
 .!!c called as \\[foo].
 .!!c
-.!!c The call to `dei' must be the last instruction in the macro
+.!!c The call to 'dei' must be the last instruction in the macro
 .!!c (since it continues the definition of the macro to trace).
 .
 .!!rn de !!de
 .
 .cp \n(_C
 .
-.\" EOF
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 0025065f3ee857afa2277d512ab5292b56d32128..f380f707bfe4452043f85a4762f3fcae37ce03a9 100644 (file)
@@ -1,32 +1,32 @@
-.\" -*- mode: nroff; -*-
-.\"
 .\" Localization for groff
 .\"
-.\" Copyright (C) 2006-201 Free Software Foundation, Inc.
+.\" Copyright (C) 2006-2018 Free Software Foundation, Inc.
 .\"   Written by Fabrice Ménard (menard.fabrice@wanadoo.fr)
 .\"
 .\" This file is part of groff.
 .\"
-.\" groff 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 3 of the License, or
+.\" groff 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 3 of the License, or
 .\" (at your option) any later version.
 .\"
-.\" groff 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.
+.\" groff 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, see <http://www.gnu.org/licenses/>.
+.\" along with this program.  If not, see
+.\" <http://www.gnu.org/licenses/>.
 .\"
 .\" Please send comments to menard.fabrice@wanadoo.fr.
 .
 .
 .\" This file translates some predefined strings used in the packages
-.\" distributed with groff.  The translations are actually done in locale
-.\" specific files (for example, fr.tmac for French) which are also
-.\" responsible for defining the string locale (`.ds locale french').
+.\" distributed with groff.  The translations are actually done in
+.\" locale specific files (for example, fr.tmac for French) which are
+.\" also responsible for defining the string locale ('.ds locale
+.\" french').
 .\"
 .\" trans.tmac should stay locale-independent.
 .
 .      TOC_HEADER_STRING "\*[\*[locale]-toc_header_string]"
 .\}
 .
-.\" end of trans.tmac
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" coding: latin-1
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 759b870b509ce3d9ac23faa617f8494414f586a3..6dca1dbd61206a13d8606c796301ebf1f5ca9085 100644 (file)
@@ -1,5 +1,3 @@
-.\" -*- nroff -*-
-.\"
 .\" Startup file for troff.
 .
 .\" This is tested by pic.
@@ -40,7 +38,7 @@ troffrc!X100 troffrc!X100-12 troffrc!lj4 troff!lbp troffrc!html troffrc!pdf
 .el \
 .      do tr \[char65]\~
 .
-.\" Set the hyphenation language to `us'.
+.\" Set the hyphenation language to 'us'.
 .do hla us
 .
 .\" Load hyphenation patterns and exceptions.
@@ -52,5 +50,14 @@ troffrc!X100 troffrc!X100-12 troffrc!lj4 troff!lbp troffrc!html troffrc!pdf
 .
 .\" Handle PS images.
 .do mso pspic.tmac
+.do mso pdfpic.tmac
 .
-.\" Don't let blank lines creep in here.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
index 93ca2b7cac0cc57f7dea1983e2f41b5b8b7185fb..d24d38d5692c4d2e1aa51372deeeb12bf9ae097a 100644 (file)
@@ -9,7 +9,8 @@
 .\" - work with all of -Tascii, -Tlatin1, -Tutf8, and -Tcp1047.
 .\" - work on devices that display only the last overstruck character
 .\"   as well as on devices that support overstriking
-.\" - represent the character's graphical shape (not its meaning)
+.\" - help understanding the character's meaning, only aiming to imitate
+.\"   a particular graphical shape when that doesn't hinder understanding
 .\"
 .\" Note that the optical appearance of the definitions contained in this
 .\" file is inferior compared to that of the replacement characters defined
 .tty-char \[rn] \*[tty-rn]
 .tty-char \[ua] \z|^
 .tty-char \[da] \z|v
-.tty-char \[sc] S
+.tty-char \[sc] <section>
 .tty-char \[ct] \z/c
-.tty-char \[dg] \z|-
-.tty-char \[dd] \z|=
-.tty-char \[ib] (\z=_
-.tty-char \[ip] \z=_)
-.tty-char \[sb] (=
-.tty-char \[sp] =)
-.tty-char \[if] oo
-.tty-char \[pt] oc
+.tty-char \[dg] <*>
+.tty-char \[dd] <**>
+.tty-char \[ib] <subset\~or\~equal>
+.tty-char \[ip] <superset\~or\~equal>
+.tty-char \[sb] <proper\~subset>
+.tty-char \[sp] <proper\~superset>
+.tty-char \[nb] <not\~subset>
+.tty-char \[nc] <not\~superset>
+.tty-char \[if] <infinity>
+.tty-char \[pt] <proportional\~to>
 .tty-char \[es] {}
-.tty-char \[ca] (^)
-.tty-char \[cu] U
-.tty-char \[de] o
-.tty-char \[di] -:-
-.tty-char \[tdi] -:-
+.tty-char \[ca] <intersection>
+.tty-char \[cu] <union>
+.tty-char \[de] <degree>
+.tty-char \[di] /
+.tty-char \[tdi] /
 .tty-char \[no] ~
 .tty-char \[tno] ~
-.tty-char \[gr] \Z'\*[tty-rn]'V
-.tty-char \[is] \z'\z,I
-.tty-char \[mo] E
-.tty-char \[pd] a
-.tty-char \[sr] \e/
-.tty-char \[*C] \z_H
-.tty-char \[*D] \z_/\z_\e
-.tty-char \[*F] \zIO
-.tty-char \[*G] |\*[tty-rn]
-.tty-char \[*H] \z-O
-.tty-char \[*L] /\e
-.tty-char \[*P] TT
-.tty-char \[*Q] \zIY
-.tty-char \[*S] \z_\Z'\*[tty-rn]'>
-.tty-char \[*W] \z_O
-.if c\[ss] .tty-char \[*b] \[ss]
-.tty-char \[*b] B
-.tty-char \[*a] a
-.tty-char \[*c] \z,E
-.tty-char \[*d] d
-.tty-char \[*e] e
-.tty-char \[+e] e
-.tty-char \[*f] \z|o
-.tty-char \[+f] \z|o
-.tty-char \[*g] y
-.tty-char \[*h] \z-0
-.tty-char \[+h] \z-0
-.tty-char \[*i] i
-.tty-char \[*k] k
-.tty-char \[*l] \z>\e
-.tty-char \[*m] \z,u
-.tty-char \[*n] v
-.tty-char \[*p] \z-n
-.tty-char \[+p] \z-w
-.tty-char \[*q] \z|u
-.tty-char \[*r] p
-.tty-char \[*s] \z-o
-.tty-char \[*t] \z~t
-.tty-char \[*u] u
-.tty-char \[*w] w
-.tty-char \[*x] x
-.tty-char \[*y] n
-.tty-char \[*z] \z,C
-.tty-char \[ts] s
-.\" Definition of \[ss] should follow that of \[*b].
-.tty-char \[ss] B
+.tty-char \[gr] <nabla>
+.tty-char \[is] <integral>
+.tty-char \[integral] <integral>
+.tty-char \[sum] <sum>
+.tty-char \[product] <product>
+.tty-char \[coproduct] <coproduct>
+.tty-char \[mo] <element\~of>
+.tty-char \[pd] <del>
+.tty-char \[sr] <sqrt>
+.tty-char \[sqrt] <sqrt>
+.tty-char \[*C] <Xi>
+.tty-char \[*D] <Delta>
+.tty-char \[*F] <Phi>
+.tty-char \[*G] <Gamma>
+.tty-char \[*H] <Theta>
+.tty-char \[*L] <Lambda>
+.tty-char \[*P] <Pi>
+.tty-char \[*Q] <Psi>
+.tty-char \[*S] <Sigma>
+.tty-char \[*W] <Omega>
+.tty-char \[*b] <beta>
+.tty-char \[*a] <alpha>
+.tty-char \[*c] <xi>
+.tty-char \[*d] <delta>
+.tty-char \[*e] <epsilon>
+.tty-char \[+e] <epsilon>
+.tty-char \[*f] <phi>
+.tty-char \[+f] <phi>
+.tty-char \[*g] <gamma>
+.tty-char \[*h] <theta>
+.tty-char \[+h] <theta>
+.tty-char \[*i] <iota>
+.tty-char \[*k] <kappa>
+.tty-char \[*l] <lambda>
+.tty-char \[*m] <mu>
+.tty-char \[*n] <nu>
+.tty-char \[*p] <pi>
+.tty-char \[+p] <pi>
+.tty-char \[*q] <psi>
+.tty-char \[*r] <rho>
+.tty-char \[*s] <sigma>
+.tty-char \[*t] <tau>
+.tty-char \[*u] <upsilon>
+.tty-char \[*w] <omega>
+.tty-char \[*x] <chi>
+.tty-char \[*y] <eta>
+.tty-char \[*z] <zeta>
+.tty-char \[ts] <sigma>
+.tty-char \[ss] ss
 .tty-char \[c*] \zO\[mu]
 .tty-char \[c+] \zO+
 .tty-char \[AN] ^
 .tty-char \[dA] \z=v
 .if c\[md] .tty-char \[pc] \[md]
 .if c\[pc] .tty-char \[md] \[pc]
-.if c\[pc] .tty-char \[a.] \[pc]
-.tty-char \[Im] I
-.tty-char \[Re] R
+.ie c\[pc] .tty-char \[a.] \[pc]
+.el .tty-char \[a.] .
+.tty-char \[Im] <Im>
+.tty-char \[Re] <Re>
 .tty-char \[/L] \z/L
 .tty-char \[/l] \z/l
-.tty-char \[%0] %o
+.tty-char \[%0] <permille>
 .tty-char \[ao] o
 .tty-char \[a"] """"
 .tty-char \[ab] \z'`
 .tty-char \[ah] v
 .tty-char \[ho] \[ac]
-.tty-char \[/_] \z_/
+.tty-char \[/_] <angle>
 .tty-char \[=~] =~
 .tty-char \[|=] -~
-.tty-char \[Ah] N
-.tty-char \[CR] _|
-.tty-char \[fa] \z-V
-.tty-char \[nm] \z/E
-.tty-char \[pp] \z_|
+.tty-char \[Ah] <Aleph>
+.tty-char \[CR] <cr>
+.tty-char \[fa] <for\~all>
+.tty-char \[nm] <not\~element\~of>
+.tty-char \[pp] <perpendicular>
 .tty-char \[sd] ''
-.tty-char \[st] -)
-.tty-char \[te] 3
+.tty-char \[st] <such\~that>
+.tty-char \[te] <there\~exists>
 .if c\[md] .tty-char \[tf] .\[md].
-.tty-char \[tf] .:.
+.tty-char \[tf] <therefore>
 .if c\[md] .tty-char \[3d] .\[md].
-.tty-char \[3d] .:.
+.tty-char \[3d] <therefore>
 .tty-char \[wp] p
 .tty-char \[~~] ~~
 .tty-char \[Fn] \z,f
 .tty-char \[rk] }
 .tty-char \[lt] ,-
 .tty-char \[rt] -.
+.tty-char \[CL] C
+.tty-char \[SP] S
+.tty-char \[HE] H
+.tty-char \[DI] D
 .\" Latin characters
-.tty-char \[r!] \z,i
+.tty-char \[r!] !
 .tty-char \[Po] \z-L
 .tty-char \[Cs] \zox
 .tty-char \[Ye] \z=Y
 .tty-char \[Of] \z_a
 .tty-char \[Fo] <<
 .tty-char \[a-] \*[tty-rn]
-.tty-char \[S2] 2
-.tty-char \[S3] 3
-.tty-char \[ps] 9|
+.tty-char \[S2] ^2
+.tty-char \[S3] ^3
+.tty-char \[ps] <paragraph>
 .tty-char \[md] .
 .tty-char \[pc] .
 .tty-char \[ac] ,
-.tty-char \[S1] 1
+.tty-char \[S1] ^1
 .tty-char \[Om] \z_o
 .tty-char \[Fc] >>
-.tty-char \[r?] \z'c
+.tty-char \[r?] ?
 .tty-char \[`A] \z`A
 .tty-char \['A] \z'A
 .tty-char \[^A] \z^A
 .tty-char \['I] \z'I
 .tty-char \[^I] \z^I
 .tty-char \[:I] \z"I
-.tty-char \[-D] \z-D
+.tty-char \[-D] Dh
 .tty-char \[~N] \z~N
 .tty-char \[`O] \z`O
 .tty-char \['O] \z'O
 .tty-char \[^U] \z^U
 .tty-char \[:U] \z"U
 .tty-char \['Y] \z'Y
-.tty-char \[TP] \zIb
+.tty-char \[TP] Th
 .tty-char \[`a] \z`a
 .tty-char \['a] \z'a
 .tty-char \[^a] \z^a
 .tty-char \['i] \z'i
 .tty-char \[^i] \z^i
 .tty-char \[:i] \z"i
-.tty-char \[Sd] \z`\z'o
+.tty-char \[Sd] dh
 .tty-char \[~n] \z~n
 .tty-char \[`o] \z`o
 .tty-char \['o] \z'o
 .tty-char \[^u] \z^u
 .tty-char \[:u] \z"u
 .tty-char \['y] \z'y
-.tty-char \[Tp] \zpb
+.tty-char \[Tp] th
 .tty-char \[:y] \z"y
 .\" for Turkish
 .tty-char "\[G ab]" G
 .tty-char "\[I .]" I
 .\"tty-char \[:y] \ij
 .tty-char \[arrowvertex] |
-.tty-char \[mc] \z,u
+.tty-char \[mc] <micro>
 .cp \n[_C]
 .
 .ie '\*(.T'cp1047' \
index 1bf72047324569d3c83233ab990d51cac8912395..471fb8bcfbb77a220bea68a5297c3d75e3876e33 100644 (file)
@@ -1,5 +1,3 @@
-.\" -*- nroff -*-
-.\"
 .\" tty.tmac
 .\"
 .nr _C \n(.C
 .
 .po 0
 .
-.ie c\[pc] \
-.  tr \[bu]\[pc]
-.el \
-.  if c\[md] \
-.    tr \[bu]\[md]
+.if !'\*[.T]'utf8' \{\
+.  ie c\[pc] \
+.    tr \[bu]\[pc]
+.  el \
+.    if c\[md] \
+.      tr \[bu]\[md]
+.\}
 .
 .fchar \[bu] \z+o
 .fchar \[14] 1/4
@@ -65,6 +65,7 @@
 .fchar \[eu] EUR
 .fchar \[Eu] EUR
 .fchar \[.i] i
+.fchar \[.j] j
 .fchar \[bq] ,
 .
 .if '\*[.T]'utf8' \
 .    do mso latin1.tmac
 .
 .\" If you want the character definitions in tty-char.tmac to be loaded
-.\" automatically, remove the `\"' from the next line.
+.\" automatically, remove the '\"' from the next line.
 .\"do mso tty-char.tmac
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/www.tmac b/tmac/www.tmac
deleted file mode 100644 (file)
index ccc2399..0000000
+++ /dev/null
@@ -1,1625 +0,0 @@
-.ig
-www.tmac - macro package for adding HTML elements to roff documents.
-
-File position: <groff_source_top>/tmac/www.tmac
-Installed position: groff's main macro directory.
-
-------------------------------------------------------------------------
-    Legalese
-------------------------------------------------------------------------
-
-This file is part of groff, the GNU roff type-setting system.
-
-Copyright (C) 2001-2014  Free Software Foundation, Inc.
-written by Gaius Mulley <gaius@glam.ac.uk>, with additions by
-Werner Lemberg <wl@gnu.org> and
-Bernd Warken <groff-bernd.warken-72@web.de>.
-
-groff 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 3 of the License, or
-(at your option) any later version.
-
-groff 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, see <http://www.gnu.org/licenses/>.
-
-
-------------------------------------------------------------------------
-    Description
-------------------------------------------------------------------------
-
-A simple set of macros to provide HTML (or XHTML) documents with basic
-www functionality.  It should work with any macro set.  In the following,
-HTML always denotes XHTML also.
-..
-.
-.
-.\" --------------------------------------------------------------------
-.\" Setup
-.\" --------------------------------------------------------------------
-.
-.do if d www:lenstr .nx
-.
-.do mso devtag.tmac
-.
-.nr _C \n(.C
-.cp 0
-.
-.
-.ie r xhtml \
-.  ds www-> />\"
-.el \
-.  ds www-> >\"
-.
-.nr www-html 0
-.if '\*[.T]'html' \
-.  nr www-html 1
-.
-.\" set up www-image-template
-.
-.if !d www-image-template \
-.  ds www-image-template
-.
-.if r ps4html \{\
-.  \" remove the title command when we are generating images for HTML
-.  \" (stops a title accidentally appearing inside an image)
-.  di www-notitle
-.  tl ''''
-.  di
-.  rm tl
-.  de tl
-.  .
-.\}
-.
-.
-.\" --------------------------------------------------------------------
-.\" Test for `.substring'; result in register `www.substring_ok'.
-.\" The automated break points in .URL addresses are only added if
-.\" this register is non-zero.
-.\"
-.nr www:substring_ok 0
-.de www:@test_substring
-.  if !d substring \
-.    return
-.  ds \\$0:s abcdefg\"
-.  substring \\$0:s 1 1
-.  if !'\\*[\\$0:s]'b' \{\
-.    rm \\$0:s
-.    return
-.  \}
-.  ds \\$0:s abcdefg\"
-.  substring \\$0:s 0 0
-.  if !'\\*[\\$0:s]'a' \{\
-.    rm \\$0:s
-.    return
-.  \}
-.  ds \\$0:s abcdefg\"
-.  substring \\$0:s 1 -1
-.  if !'\\*[\\$0:s]'bcdefg' \{\
-.    rm \\$0:s
-.    return
-.  \}
-.  nr www:substring_ok 1
-.  rm \\$0:s
-..
-.www:@test_substring
-.rm www:@test_substring
-.
-.
-.\" --------------------------------------------------------------------
-.\" Local Macros
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.\" www:paraspace
-.\"
-.\" Space before paragraph. Use \n[PD] if it exists.
-.\"
-.nr www:pd 0.5v
-.
-.de www:paraspace
-.  ie r PD \
-.    sp \\n[PD]u
-.  el \
-.    sp \\n[www:pd]u
-..
-.
-.\" --------------------------------------------------------------------
-.\" www:error (<test>...)
-.\"
-.\" Print error message.
-.\"
-.de www-error
-.  tm \\n[.F]:\\n[.c]: macro error: \\$*
-..
-.
-.als www:error www-error
-.
-.\" --------------------------------------------------------------------
-.\" www:lenstr (<register_name> <string_name>)
-.\"
-.\" Store length of string named <string_name> into register named
-.\" <register_name>.
-.\"
-.de www:lenstr
-.  if !(\\n[.$] == 2) \{\
-.    tm .\\$0 expects 2 arguments.
-.    ab
-.  \}
-.  length \\$0:n x\\*[\\$2]
-.  nr \\$1 (\\n[\\$0:n] - 1)
-.  rr \\$0:n
-..
-.
-.\" --------------------------------------------------------------------
-.\" www:splitstr (<name>)
-.\"
-.\" Add a space character between any two adjacent characters in string
-.\" <name> and restore result into the string variable <name>; space
-.\" characters are first replaced by the word `space'.
-.\"
-.de www:splitstr
-.  if !(\\n[.$] == 1) \
-.    www:error .\\$0 expects 1 argument.
-.  if '\\*[\\$1]'' \
-.    return
-.  ds \\$0:r "\\*[\\$1]\"
-.  ds \\$0:s
-.  while 1 \{\
-.    ds \\$0:c "\\*[\\$0:r]\"
-.    substring \\$0:c 0 0
-.    ie '\\*[\\$0:c]' ' \
-.      as \\$0:s " space\"
-.    el \
-.      as \\$0:s " \\*[\\$0:c]\"
-.    www:lenstr \\$0:n \\$0:r
-.    if (\\n[\\$0:n] <= 1) \
-.      break
-.    substring \\$0:r 1 -1
-.  \}
-.  if !'\\*[\\$0:s]'' \
-.    substring \\$0:s 1 -1 
-.  ds \\$1 \\*[\\$0:s]\"
-.  rm \\$0:c
-.  rr \\$0:n
-.  rm \\$0:r
-.  rm \\$0:s
-..
-.
-.\" --------------------------------------------------------------------
-.\" www:url_breaks (<string_name>)
-.\"
-.\" Add `\:' (possible break point) within URL strings after `/'.
-.\"
-.\" Smart about multiple `/', existing `\:', and space characters;
-.\" does not set a break point if less than 5 characters would go to
-.\" the next line.
-.\"
-.de www:url_breaks
-.  if !(\\n[.$] == 1) \
-.    www:error .\\$0 expects 1 argument.
-.  if !\n[www:substring_ok] \
-.    return
-.  ds \\$0:s "\\*[\\$1]\"
-.  www:splitstr \\$0:s
-.  www:url_breaks_split \\$0:s \\*[\\$0:s]
-.  ds \\$1 "\\*[\\$0:s]\"
-.  rm \\$0:s
-..
-.
-.\" --------------------------------------------------------------------
-.\" www:url_breaks_split (<result> <char> [<char>...])
-.\"
-.\" Add `\:' within URL strings, but arguments are a split string.
-.\"
-.\" Arguments: >=2: <result> <char> [<char>...]
-.\"
-.de www:url_breaks_split
-.  nr \\$0:min 5             \" minimal number of characters for next line
-.  if (\\n[.$] < 2) \
-.    www:error .\\$0 expects at least 2 arguments.
-.  ds \\$0:res \\$1\"
-.  shift
-.  ds \\$0:s
-.  nr \\$0:done 0
-.  while !\\n[\\$0:done] \{\
-.    if (\\n[.$] <= 0) \
-.      break
-.    if '\\$1'space' \{\
-.      as \\$0:s " \"
-.      shift
-.      continue
-.    \}
-.    if (\\n[.$] < \\n[\\$0:min]) \{\
-.      as \\$0:s "\\$1\"
-.      shift
-.      continue
-.    \}
-.    if !'\\$1'/' \{\
-.      as \\$0:s "\\$1\"
-.      shift
-.      continue
-.    \}
-.    \" we are at a `/' character
-.    while '\\$1'/' \{\
-.      as \\$0:s /\"
-.      if (\\n[.$] == 0) \{\
-.        nr \\$0:done 1
-.        break
-.      \}
-.      shift
-.    \}
-.    if \\n[\\$0:done] \
-.      break
-.    if (\\n[.$] < \\n[\\$0:min]) \
-.      continue
-.    if '\\$1'\:' \
-.      shift
-.    as \\$0:s \:\"
-.  \}
-.  ds \\*[\\$0:res] \\*[\\$0:s]\"
-.  rm \\$0:res
-.  rm \\$0:s
-..
-.
-.
-.\" --------------------------------------------------------------------
-.\" User Interface
-.\" --------------------------------------------------------------------
-.
-.\" --------------------------------------------------------------------
-.\" HTML
-.\"
-.\" The main auxiliary macro for the HTML interface.
-.\"
-.de HTML
-.  if \\n[www-html] \{\
-.    \" was implemented via .nop \&\X^html:\\$*^ but
-.    \" is now implemented using HTML-NS to utilize code factoring.
-.    \"
-.    \" the `\&' makes the vertical mode leave, so to say
-.    \"
-.    nop \&\c
-.    HTML-NS \\$*
-.    nop \&
-.  \}
-..
-.
-.\"
-.\" An auxiliary macro for HTML (without following space).
-.\"
-.de HTML-NS
-.  nop \X^html:\\$*^\c
-..
-.
-.\"
-.\" Emit an HTML tag after shutting down a (possibly open) paragraph.
-.\"
-.de HTML</p>
-.  ie \\n[www-html] \{\
-.    \" the `\&' makes the vertical mode leave, so to say
-.    nop \&\X^html</p>:\\$*^
-.  \}
-.  el \
-.    www:paraspace
-..
-.
-.\"
-.\" Emit an HTML tag.  If text has been written in the paragraph
-.\"                    then do not shut the paragraph down.
-.\"                    If text was not written, remove the empty
-.\"                    paragraph tag and emit the desired HTML tag.
-.\"
-.de HTML<?p>
-.  if \\n[www-html] \
-.    nop \&\X^html<?p>:\\$*^
-..
-.
-.\"
-.\" Emit a MATH tag.  If text has been written in the paragraph
-.\"                   then do not shut the paragraph down.
-.\"                   If text was not written, remove the empty
-.\"                   paragraph tag and emit the desired math tag.
-.\"
-.de MATH<?p>
-.  if \\n[www-html] \
-.    nop \&\X^math<?p>:\\$*^
-..
-.
-.\" --------------------------------------------------------------------
-.\" HX n
-.\"
-.\"   Automatic heading level cut off.
-.\"
-.\"   N is the depth limit of automatically linked headings.  So a depth
-.\"   of 2 would cause grohtml to generate a list of links for `.NH 1'
-.\"   and `.NH 2' but not for `.NH 3'.
-.\"
-.de HX
-.  if \\n[www-html] \
-.    nop \X^index:\\$*^
-..
-.
-.\" --------------------------------------------------------------------
-.\" BCL foreground background active not-visited visited
-.\"
-.de BCL
-.  HTML <body "text=""\\$1""" \
-              "bgcolor=""\\$2""" \
-              "link=""\\$3""" \
-              "alink=""\\$4""" \
-              "vlink=""\\$5"">"
-..
-.
-.\" --------------------------------------------------------------------
-.\" BGIMG imagefile
-.\"
-.de BGIMG
-.  HTML <body "background=""\\$1"">"
-..
-.
-.\" www:url_check_tag str
-.\"    If url named by \*[str] is internal (starts with #), 
-.\"    redefine \*[str] to be the value of the string TAG_url.
-.
-.de www:url_check_tag
-.  ds \\$0:tmp \\*[\\$1]\"
-.  substring \\$0:tmp 0 0
-.  if '\\*[\\$0:tmp]'#' \{\
-.    ds \\$0:tmp \\*[\\$1]\"
-.    substring \\$0:tmp 1
-.    ds \\$0:tmp TAG_\\*[\\$0:tmp]\"
-.
-.    ie d \\*[\\$0:tmp] \
-.      ds \\$1 \\*[\\*[\\$0:tmp]]\"
-.    el \
-.      ds \\$1 see below\"
-.  \} 
-.  rm \\$0:tmp
-..
-.
-.\" --------------------------------------------------------------------
-.\" URL url [description] [after]
-.\"
-.\"   If description is absent then the url becomes the anchor text.
-.\"
-.de URL
-.  if !'\\$1'' \{\
-.    ds \\$0:adr \\$1\"
-.    www:url_check_tag \\$0:adr
-.    if !\\n[www-html] \
-.      www:url_breaks \\$0:adr
-.  \}
-.  ie \\n[www-html] \{\
-.    ie '\\$3'' \
-.      ds \\$0:after \&\"
-.    el \
-.      ds \\$0:after \&\\$3\"
-.
-.    ie '\\$2'' \
-.       HTML-NS <a "href=""\\$1"">\\*[\\$0:adr]</a>"
-.    el \
-.       HTML-NS <a "href=""\\$1"">\\$2</a>"
-.
-.    nop \\*[\\$0:after]
-.    rm \\$0:after
-.  \}
-.  el \{\
-.    if !r ps4html \
-.      ad l
-.
-.    ie '\\$2'' \{\
-.      ie '\\$1'' \{\
-.        if !'\\$3'' \
-.          nop \\$3
-.      \}
-.      el \{\
-.        ie \\n[.color] \
-.          nop \%\\*[www:open]\m[\\*[www:color]]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\m[]\\*[www:close]\\$3
-.        el \
-.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
-.      \}
-.    \}
-.    el \{\
-.      ie '\\$1'' \{\
-.        ie \\n[.color] \
-.          nop \m[\\*[www:color]]\\$2\m[]\\$3
-.        el \
-.          nop \f[\\*[www:fontstyle]]\\$2\f[]\\$3
-.      \}
-.      el \{\
-.        ie \\n[.color] \{\
-.          nop \m[\\*[www:color]]\\$2\m[]
-.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
-.        \}
-.        el \{\
-.          nop \f[\\*[www:fontstyle]]\\$2\f[]
-.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
-.        \}
-.      \}
-.    \}
-.
-.    if !r ps4html \
-.      ad
-.  \}
-.  rm \\$0:adr
-..
-.
-.\" --------------------------------------------------------------------
-.\" FTP url description [after]
-.\"
-.\"   Same as URL.
-.\"
-.als FTP URL
-.
-.\" --------------------------------------------------------------------
-.\" MTO address description [after]
-.\"
-.\"   ADDRESS is the email address (without the `mailto:' prefix).
-.\"
-.\"   DESCRIPTION is the optional name.  If an empty argument is given,
-.\"   ADDRESS is used instead.
-.\"
-.\"   AFTER is optional stuff printed immediately after ADDRESS
-.\"   (resp. DESCRIPTION).
-.\"
-.\"     Example:
-.\"
-.\"       Foobar has been written by
-.\"       .MTO fred@foo.bar "Fredrick Bloggs" .
-.\"
-.de MTO
-.  ie \\n[www-html] \{\
-.    ie '\\$2'' \
-.      URL mailto:\\$1 \\$1 "\\$3"
-.    el \
-.      URL mailto:\\$1 "\\$2" "\\$3"
-.  \}
-.  el \{\
-.    ie '\\$2'' \{\
-.      ie '\\$1'' \{\
-.        ie !'\\$3'' \
-.          nop \\$3
-.      \}
-.      el \{\
-.        ie \\n[.color] \
-.          nop \%\m[\\*[www:color]]\f[\\*[www:fontstyle]]\\$1\f[]\m[]\\$3
-.        el \
-.          nop \%\f[\\*[www:fontstyle]]\\$1\f[]\\$3
-.      \}
-.    \}
-.    el \{\
-.      ie '\\$1'' \{\
-.        ie \\n[.color] \
-.          nop \m[\\*[www:color]]\\$2\m[]\\$3
-.        el \
-.          nop \f[\\*[www:fontstyle]]\\$2\f[]\\$3
-.      \}
-.      el \{\
-.        ie \\n[.color] \{\
-.          nop \m[\\*[www:color]]\\$2\m[]
-.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]\\$3
-.        \}
-.        el \{\
-.          nop \f[\\*[www:fontstyle]]\\$2\f[]
-.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]\\$3
-.        \}
-.      \}
-.    \}
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" TAG name [text]
-.\"
-.\"   Generate an HTML name NAME.
-.\"   Define string TAG_NAME to TEXT, if present, otherwise to \n[PN].
-.\"   Register PN is the current page number.
-.\"
-.de TAG
-.  HTML <a "name=""\\$1""></a>"
-.  ie '\\$2'' \
-.    if !rPN \
-.      nr PN \\n%
-.    ds TAG_\\$1 \\n[PN]\"
-.  el \
-.    ds TAG_\\$1 \\$2\"
-..
-.
-.\" --------------------------------------------------------------------
-.\" IMG [-R|-L|-C] filename [width] [height]
-.\"
-.\"   Include an image of any type (only works for -Thtml).
-.\"
-.\"   Alignment is centered by default (-C).
-.\"   Default value for WIDTH is 1i.
-.\"   If HEIGHT is not given, WIDTH is used as the height.
-.\"
-.de IMG
-.  ie \\n[www-html] \{\
-.    ie '\\$2'-R' \
-.      DEVTAG .right-image
-.    el \{\
-.      ie '\\$2'-L' \
-.        DEVTAG .left-image
-.      el \
-.        DEVTAG .centered-image
-.    \}
-.    nr www-width 100
-.    if !'\\$3'' \
-.      nr www-width \\$3
-.    nr www-height \\n[www-width]
-.    if !'\\$4'' \
-.      nr www-height \\$4
-.    HTML <img "src=""\\$1""" \
-               "alt=""Image \\$1""" \
-               "width=""\\n[www-width]""" \
-               "height=""\\n[www-height]""\\*[www->]"
-.  \}
-.  el \
-.    nop \\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]
-..
-.
-.\" --------------------------------------------------------------------
-.\" PIMG  [-R|-L|-C] filename [width] [height]
-.\"
-.\"   Include a PNG image.  It works for -Tps and -Thtml.
-.\"   The default value for WIDTH and HEIGHT is zero; the default
-.\"   alignment is centering (-C).
-.\"
-.\" Note: This macro can only be used with the `-U' option of groff,
-.\"       activating unsafe mode, if not used with -Thtml; the PNG image
-.\"       is then converted to the EPS format using netpbm utilities.
-.\"
-.de PIMG
-.  ds www-pic-align -C\"
-.  ie '\\$1'-R' \{\
-.    ds www-pic-align -R\"
-.    shift
-.  \}
-.  el \{\
-.    if '\\$1'-L' \{\
-.      ds www-pic-align -L\"
-.      shift
-.    \}
-.  \}
-.  if '\\$1'-C' \
-.    shift
-.
-.  ie \\n[www-html] \{\
-.    ds www-htmlalign align="center"\"
-.    if '\\*[www-pic-align]'-R' \
-.      ds www-htmlalign align="right"\"
-.    if '\\*[www-pic-align]'-L' \
-.      ds www-htmlalign align="left"\"
-.
-.    nr www-width 0
-.    nr www-height 0
-.    if !'\\$2'' \
-.      nr www-width (\\$3 * 100 / 240)
-.    if !'\\$3'' \
-.      nr www-height (\\$4 * 100 / 240)
-.    ie (\\n[www-width] == 0) \{\
-.      ie (\\n[www-height] == 0) \
-.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
-                                             "alt=""Image \\$1""\\*[www->]</p>"
-.      el \
-.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
-                                             "alt=""Image \\$1""" \
-                                             "height=""\\n[www-height]""\\*[www->]</p>"
-.    \}
-.    el \{\
-.      ie (\\n[www-height] == 0) \
-.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
-                                             "alt=""Image \\$1""" \
-                                             "width=""\\n[www-width]""\\*[www->]</p>"
-.      el \
-.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
-                                             "alt=""Image \\$1""" \
-                                             "width=""\\n[www-width]""" \
-                                             "height=""\\n[www-height]""\\*[www->]</p>"
-.    \}
-.  \}
-.  el \{\
-.    if !r ps4html \{\
-.      www-make-unique-name
-.      sy pngtopnm \\$1 \
-          | pnmcrop -white \
-          | @PNMTOPS_NOSETPAGE@ -noturn \
-          > \\*[www-unique-name].eps
-.      shift
-.      PSPIC \\*[www-pic-align] \\*[www-unique-name].eps \\$*
-.    \}
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" auxiliary definitions for MPIMG
-.\"
-.nr www-left-ll-trap 0
-.nr www-left-po-trap 0
-.nr www-right-ll-trap 0
-.
-.de www-finish-left-po
-.  po -(\\n[www-left-indent]u + \\n[www-image-gap]u)
-.  wh \\n[www-left-po-trap]u
-.  nr www-left-indent 0
-..
-.
-.\" called when the -R picture is finished
-.de www-finish-right-ll
-.  ll +(\\n[www-right-indent]u + \\n[www-image-gap]u)
-.
-.  \" now check whether we need to inline www-finish-left-ll
-.  if (\\n[www-left-ll-trap]u > 0) \
-.    if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-ll-trap]u) \{\
-.      mk www-left-po-trap
-.      nr www-left-po-trap +1v
-.      wh \\n[www-left-po-trap]u www-finish-left-po
-.      ll +\\n[www-left-indent]u
-.      wh \\n[www-left-ll-trap]u
-.      nr www-left-ll-trap 0
-.    \}
-.
-.  \" and check whether we need to inline www-finish-left-po
-.  if (\\n[www-left-po-trap]u > 0) \
-.    if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-po-trap]u) \{\
-.      po -\\n[www-left-indent]u
-.      wh \\n[www-left-po-trap]u
-.      nr www-left-indent 0
-.    \}
-.
-.  wh \\n[www-right-ll-trap]u
-.  nr www-right-ll-trap 0
-..
-.
-.de www-finish-left-ll
-.  if (\\n[www-right-ll-trap] > 0) \
-.    if ((\\n[www-left-ll-trap] + 1v) >= \\n[www-right-ll-trap]) \{\
-.      ll +\\n[www-right-indent]u
-.      nr www-right-ll-trap 0
-.    \}
-.
-.  mk www-left-po-trap
-.  nr www-left-po-trap +1v
-.  wh \\n[www-left-po-trap]u www-finish-left-po
-.  ll +(\\n[www-left-indent]u + \\n[www-image-gap]u)
-.  wh \\n[www-left-ll-trap]u
-.  nr www-left-ll-trap 0
-..
-.
-.\" www-handle-percent arg N1 N2 S1
-.\"                    arg - input string (number or number%)
-.\"                    output parameters:
-.\"                    N1 - name of number register 1=absolute 0=percentage
-.\"                    N2 - number register name for absolute value
-.\"                    S1 - string register name for percentage value
-.\"
-.de www-handle-percent 
-.  ds www-percent \\$1\"
-.  substring www-percent -1 -1
-.
-.  ie '\\*[www-percent]'%' \{\
-.    ds www-abs \\$1\"
-.    substring www-abs 0 -2
-.    nr \\$2 0
-.    nr \\$3 \\*[www-abs]
-.    ds \\$4 \\$1\"
-.  \}
-.  el \{\
-.    nr \\$2 1
-.    nr \\$3 \\$1
-.    ds \\$4 none\"
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" MPIMG [-R|-L] [-G gap] filename [width [height]]
-.\"
-.\"   Include a PNG image and wrap text around it.  It works for
-.\"   -Tps and -Thtml.  The default value for WIDTH is 1i; default value
-.\"   for HEIGHT is WIDTH; the default alignment is left (-L).
-.\"   -G is used to insert a gap between the text and the image.
-.\"   The height and width can also be given as a percentage.
-.\"   The PostScript device converts the percentage width into an
-.\"   absolute value by using \\n[.l], and the height by using \\n[.p].
-.\"   
-.\"
-.\" Note: This macro can only be used with the `-U' option of groff,
-.\"       activating unsafe mode, if not used with -Thtml; the PNG image
-.\"       is then converted to the EPS format using netpbm utilities.
-.\"
-.nr www-htmlimage-gap 0
-.
-.de MPIMG
-.  nr www-image-just 1
-.  nr www-image-gap 0
-.  while (\\n[.$] > 0) \{\
-.    if '-L'\\$1' \{\
-.      nr www-image-just 1
-.      shift
-.      continue
-.    \}
-.    if '-R'\\$1' \{\
-.      nr www-image-just 0
-.      shift
-.      continue
-.    \}
-.    if '-G'\\$1' \{\
-.      nr www-image-gap \\$2
-.      nr www-htmlimage-gap (\\$2 * 100 / 240)
-.      shift 2
-.      continue
-.    \}
-.    break
-.  \}
-.
-.  nr www-width 1i
-.  nr www-height 1i
-.  ds www-size-specs width="\\n[www-width]" height="\\n[www-height]"\"
-.  ie !'\\$2'' \{\
-.    nr www-is-absolute 0
-.    nr www-absolute 0
-.    ds www-percentage none\"
-.    www-handle-percent \\$2 www-is-absolute www-absolute www-percentage
-.    ie !\\n[www-is-absolute] \{\
-.      \" percentage of linelength requested
-.      nr www-width (\\n[www-absolute] * \\n[.l] / 100)
-.      if \\n[www-html] \
-.        nr www-width (\\n[www-width] * 100 / 240)
-.      ds www-size-specs width="\\*[www-percentage]"\"
-.    \}
-.    el \{\
-.      nr www-width \\n[www-absolute]
-.      if \\n[www-html] \
-.        nr www-width (\\n[www-width] * 100 / 240)
-.      ds www-size-specs width="\\n[www-width]"\"
-.    \}
-.
-.    nr www-height \\n[www-width]
-.    ie !'\\$3'' \{\
-.      nr www-is-absolute 0
-.      nr www-absolute 0
-.      ds www-percentage none\"
-.      www-handle-percent \\$3 www-is-absolute www-absolute www-percentage
-.      ie !\\n[www-is-absolute] \{\
-.        \" percentage of pagelength requested
-.        nr www-height (\\n[www-absolute] * \\n[.p] / 100)
-.        if \\n[www-html] \
-.           nr www-height (\\n[www-height] * 100 / 240)
-.        ds www-size-specs "\\*[www-size-specs] height="\\*[www-percentage]"\"
-.      \}
-.      el \{\
-.        nr www-height \\n[www-absolute]
-.        if \\n[www-html] \
-.           nr www-height (\\n[www-height] * 100 / 240)
-.        ds www-size-specs "\\*[www-size-specs] height="\\*[www-height]"\"
-.      \}
-.    \}
-.  \}
-.  el \{\
-.    \" height not specified; use width value
-.    ie !\\n[www-is-absolute] \{\
-.       \" percentage value
-.       ds www-size-specs "\\*[www-size-specs] height="\\*[www-percentage]"\"
-.       nr www-height \\n[www-width]
-.    \}
-.    el \{\
-.       ds www-size-specs "\\*[www-size-specs] height="\\*[www-width]"\"
-.       nr www-height \\n[www-width]
-.    \}
-.  \}
-.
-.  ie \\n[www-html] \{\
-.    ie !\\n[www-image-just] \
-.      HTML <img "src=""\\$1""" \
-                 "alt=""Image \\$1""" \
-                 "hspace=""\\n[www-htmlimage-gap]""" \
-                 "align=""right""" \
-                 "\\*[www-size-specs]\\*[www->]"
-.    el \
-.      HTML <img "src=""\\$1""" \
-                 "alt=""Image \\$1""" \
-                 "hspace=""\\n[www-htmlimage-gap]""" \
-                 "align=""left""" \
-                 "\\*[www-size-specs]\\*[www->]"
-.  \}
-.  el \{\
-.    tm www-width is \\n[www-width]
-.    tm www-height is \\n[www-height]
-.    if !r ps4html \{\
-.      www-make-unique-name
-.      sy pngtopnm \\$1 \
-          | pnmcrop -white \
-          | @PNMTOPS_NOSETPAGE@ -noturn \
-          > \\*[www-unique-name].eps
-.      ie !\\n[www-image-just] \{\
-.        \" we must now disable a possible left image trap
-.        sp -1
-.        if (\\n[www-left-ll-trap] > 0) \
-.          wh \\n[www-left-ll-trap]u
-.        if (\\n[www-left-po-trap] > 0) \
-.          wh \\n[www-left-po-trap]u
-.        PSPIC -R \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u
-.        sp -\\n[ps-desht]u
-.
-.        nr www-right-indent \\n[ps-deswid]u
-.        \" we want to have some space between text and image,
-.        \" so the line length must be shorter
-.        ll -(\\n[www-right-indent]u + \\n[www-image-gap]u)
-.        mk www-right-ll-trap
-.        nr www-right-ll-trap +(\\n[ps-desht]u - 1v)
-.        wh \\n[www-right-ll-trap]u www-finish-right-ll
-.
-.        \" now restore possible left trap
-.        if (\\n[www-left-ll-trap] > 0) \
-.          wh \\n[www-left-ll-trap]u www-finish-left-ll
-.        if (\\n[www-left-po-trap] > 0) \
-.          wh \\n[www-left-po-trap]u
-.      \}
-.      el \{\
-.        \" we must now disable a possible right image trap
-.        if (\\n[www-right-ll-trap] > 0) \
-.          wh \\n[www-right-ll-trap]u
-.        PSPIC -L \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u
-.        sp -\\n[ps-desht]u
-.
-.        nr www-left-indent \\n[ps-deswid]u
-.        \" increase offset by gap
-.        po +(\\n[www-left-indent]u + \\n[www-image-gap]u)
-.        \" decrease line length by gap
-.        ll -(\\n[www-left-indent]u + \\n[www-image-gap]u)
-.        mk www-left-ll-trap
-.        nr www-left-ll-trap +(\\n[ps-desht]u - 1v)
-.        wh \\n[www-left-ll-trap]u www-finish-left-ll
-.
-.        \" now restore possible right trap
-.        if (\\n[www-right-ll-trap] > 0) \
-.          wh \\n[www-right-ll-trap]u www-finish-right-ll
-.      \}
-.    \}
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" HnS n
-.\"
-.\"   Begin heading.  Heading level is N.
-.\"
-.\" HnE
-.\"
-.\"   End heading.
-.\"
-.\" If your heading contains URL, FTP, MTO macros you might wish to
-.\" disable automatic links to headings.  This can be done via `-P-l'
-.\" from the command line or by using a cakk to `.HX 0'.
-.\"
-.nr www-heading-no -1
-.
-.de HnS
-.  ie '\\$1'' \
-.    nr www-heading-no 1
-.  el \
-.    nr www-heading-no \\$1
-.  DEVTAG-NH \\n[www-heading-no]
-..
-.
-.de HnE
-.  if (\\n[www-heading-no] == -1) \
-.    www-error HnE found without a corresponding HnS
-.  DEVTAG-EO-H
-..
-.
-.\" --------------------------------------------------------------------
-.\" LK
-.\"
-.\"   Emit the automatically collected links derived from
-.\"   section/numbered headings at this position.
-.\"
-.de LK
-.  DEVTAG .links
-..
-.
-.\" --------------------------------------------------------------------
-.\" HR
-.\"
-.\"   Produce a horizontal line.
-.\"
-.de HR
-.  HTML</p> <hr\\*[www->]
-..
-.
-.\" --------------------------------------------------------------------
-.\" NHR
-.\"
-.\"  Suppress the generation of the top and bottom rules which grohtml
-.\"  emits by default.
-.\"
-.de NHR
-.  DEVTAG .no-auto-rule
-..
-.
-.\"
-.\" www-end-nowhere - end of input trap called to finish diversion.
-.\"
-.de www-end-nowhere
-.  if !\\n[www-html] \
-.    di
-.  DEVTAG-EO-TL
-..
-.
-.\" --------------------------------------------------------------------
-.\" HTL
-.\"
-.\"   Generate an HTML title only.  This differs from the -ms .TL macro
-.\"   which generates both an HTML title and an H1 heading.
-.\"
-.\"   This is useful when an author wishes to use an HTML title as search
-.\"   engine fodder but a graphic title in the document.
-.\"
-.\"   The macro terminates when a space or break is seen (.sp, .br).
-.\"
-.de HTL
-.  DEVTAG .html-tl
-.  if !\\n[www-html] \
-.    di www-nowhere
-.  it 2 www-end-nowhere
-..
-.
-.\" --------------------------------------------------------------------
-.\" auxiliary definitions for lists
-.\"
-.ds www-ul-level1 \[bu]\ \ \"
-.ds www-ul-level2 \[sq]\ \ \"
-.ds www-ul-level3 \[ci]\ \ \"
-.nr www-ul-level 0
-.
-.ds www-ol-level1 decimal\"
-.ds www-ol-level2 lower-alpha\"
-.ds www-ol-level3 lower-roman\"
-.ds www-ol-tmp 00\ \ \"
-.nr www-ol-ctr1 0 1
-.nr www-ol-ctr2 0 1
-.nr www-ol-ctr3 0 1
-.af www-ol-ctr2 a
-.af www-ol-ctr3 i
-.nr www-ol-level 0
-.
-.nr www-dl-level 0
-.nr www-dl-shift 5n
-.
-.\"
-.\" allow nested lists
-.\"
-.nr www-depth 0
-.nr www-li-indent \n[.i]
-.ds www-level0 nop\"
-.ds www-level1
-.ds www-level2
-.ds www-level3
-.ds www-level4
-.ds www-level5
-.ds www-level6
-.ds www-level7
-.ds www-level8
-.ds www-level9
-.
-.\" which macro to use for LI
-.de www-push-li
-.  nr www-li-indent \\n[.i]
-.  nr www-depth +1
-.  ds www-level\\n[www-depth] \\$1\"
-.  ds www-ltag\\n[www-depth]
-.  als LI \\$1
-..
-.
-.de www-pop-li
-.  nr www-depth -1
-.  als LI \\*[www-level\\n[www-depth]]
-..
-.
-.\" www-emit-ltag - shut down a previous open list tag
-.\"                 before issuing a new tag \\$1.
-.\"                 It then records tag \\$1 is open.
-.
-.de www-emit-ltag
-.  if !'\\*[www-ltag\\n[www-depth]]'' \
-.    HTML-NS </\\*[www-ltag\\n[www-depth]]>
-.  if !'\\$1'' \
-.    HTML-NS <\\$1>
-.  ds www-ltag\\n[www-depth] \\$1\"
-..
-.
-.\"
-.\" Auxiliary macro for ULS.
-.\"
-.de www-push-ul-level
-.  nr www-ul-level +1
-.  if (\\n[www-ul-level] > 3) \
-.    www-error ULS: too many levels of indentation (\\n[www-ul-level])
-..
-.\"
-.\" Auxiliary macro for ULE.
-.\"
-.de www-pop-ul-level
-.  if !\\n[www-ul-level] \
-.    www-error ULE: trying to terminate a list which does not exist
-.  nr www-ul-level -1
-..
-.
-.\"
-.\" Auxiliary macro for OLS.
-.\"
-.de www-push-ol-level
-.  nr www-ol-level +1
-.  if (\\n[www-ol-level] > 3) \
-.    www-error OLS: too many levels of indentation (\\n[www-ol-level])
-..
-.
-.\"
-.\" Auxiliary macro for OLE.
-.\"
-.de www-pop-ol-level
-.  if !\\n[www-ol-level] \
-.    www-error OLE: trying to terminate a list which does not exist
-.  nr www-ol-level -1
-..
-.
-.\" --------------------------------------------------------------------
-.\" ULS
-.\"
-.\"   Start an unordered list.
-.\"
-.de ULS
-.  www-push-li www-li-ul
-.  www-push-ul-level
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML</p> <ul>
-.  \}
-.  el \
-.    nr www-li-indent +\w'\\*[www-ul-level\\n[www-ul-level]]'u
-..
-.
-.\" --------------------------------------------------------------------
-.\" ULE
-.\"
-.\"   End an unordered list.
-.\"
-.de ULE
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML</p> </ul>
-.  \}
-.  el \{\
-.    nr www-li-indent -\w'\\*[www-ul-level\\n[www-ul-level]]'u
-.    in \\n[www-li-indent]u
-.  \}
-.  www-pop-ul-level
-.  www-pop-li
-..
-.
-.\" --------------------------------------------------------------------
-.\" OLS
-.\"
-.\"   Start an ordered list.
-.\"
-.de OLS
-.  www-push-li www-li-ol
-.  www-push-ol-level
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML</p> <ol "style=""list-style-type:" \
-                           "\\*[www-ol-level\\n[www-ol-level]]"">"
-.  \}
-.  el \
-.    nr www-li-indent +\w'\\*[www-ol-tmp]'u
-..
-.
-.\" --------------------------------------------------------------------
-.\" OLE
-.\"
-.\"   End an ordered list.
-.\"
-.de OLE
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML </ol>
-.  \}
-.  el \{\
-.    nr www-li-indent -\w'\\*[www-ol-tmp]'u
-.    in \\n[www-li-indent]u
-.    nr www-ol-ctr\\n[www-ol-level] 0 1
-.  \}
-.  www-pop-ol-level
-.  www-pop-li
-..
-.
-.\" --------------------------------------------------------------------
-.\" DLS
-.\"
-.\"   Start a definition list.
-.\"
-.de DLS
-.  www-push-li www-li-dl
-.  nr www-dl-level +1
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML</p> <dl>
-.  \}
-.  el \{\
-.    nr www-li-indent +\\n[www-dl-shift]u
-.    in \\n[www-li-indent]u
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" DLE
-.\"
-.\"   End a definition list.
-.\"
-.de DLE
-.  ie \\n[www-html] \{\
-.    www-emit-ltag
-.    HTML </dl>
-.  \}
-.  el \{\
-.    nr www-li-indent -\\n[www-dl-shift]u
-.    in \\n[www-li-indent]u
-.  \}
-.  nr www-dl-level -1
-.  www-pop-li
-..
-.
-.\" --------------------------------------------------------------------
-.\" LI
-.\"
-.\"   Insert a list item.
-.\"
-.
-.\" ********
-.\" www-li-ul - bulleted list item
-.\"
-.de www-li-ul
-.  ie \\n[www-html] \
-.    www-emit-ltag li
-.  el \{\
-.    www:paraspace
-.    if rPORPHANS \
-.      ne \\n[PORPHANS]v
-.    in \\n[www-li-indent]u
-.    ti -\w'\\*[www-ul-level\\n[www-ul-level]]'u
-.    nop \\*[www-ul-level\\n[www-ul-level]]\c
-.  \}
-..
-.
-.\" ********
-.\" www-li-ol - numbered list item
-.\"
-.de www-li-ol
-.  ie \\n[www-html] \
-.    www-emit-ltag li
-.  el \{\
-.    www:paraspace
-.    if rPORPHANS \
-.      ne \\n[PORPHANS]v
-.    in \\n[www-li-indent]u
-.    ti -\w'\\n+[www-ol-ctr\\n[www-ol-level]]\ \ 'u
-.    nop \\n[www-ol-ctr\\n[www-ol-level]]\ \ \c
-.  \}
-..
-.
-.\" ********
-.\" www-li-dl - definition list item
-.\"
-.de www-li-dl
-.  ie \\n[www-html] \{\
-.    HTML <dt>\\$1</dt>
-.    www-emit-ltag dd
-.  \}
-.  el \{\
-.    www:paraspace
-.    if rPORPHANS \
-.      ne \\n[PORPHANS]v
-.    in \\n[www-li-indent]u
-.    ti -\\n[www-dl-shift]u
-.    nop \&\\$1
-.    br
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" DC l text [color]
-.\"
-.\"   L is the letter to be dropped and enlarged.
-.\"
-.\"   TEXT is the following text whose height the first letter should not
-.\"   exceed.
-.\"
-.\"   COLOR is the optional color of the dropped letter (default black).
-.\"
-.de DC
-.  ds www-dropcolor black\"
-.  if !'\\$3'' \
-.    ds www-dropcolor \\$3\"
-.  ie '\*[.T]'html' \{\
-.    www-make-unique-name
-.    nr www-drop-width (100u * \\n[.v]u * 3u / \\n[.l]u)
-.    MPIMG -L \\*[www-unique-name].png \\n[www-drop-width]%
-.  \}
-.  el \{\
-.    ie r ps4html \{\
-.      www-make-unique-name
-.      \" To avoid interferences with another DC macro call which is located
-.      \" very near to the current one, we draw the glyph on a separate page.
-.      \" Otherwise it could theoretically happen that the dropped capital
-.      \" glyphs overlap.
-.      bp
-.      ev www-DC
-.      vs 320p
-.      nop \O[5i\\*[www-unique-name].png]\O[1]
-.      nop \m[\\*[www-dropcolor]]\s[160]\O[3]\\$1\O[4]
-.      nop \O[2]\O[0]
-.      br
-.      ev
-.      bp
-.    \}
-.    el \{\
-.      ie n \
-.        nop \\$1\c
-.      el \{\
-.        nr dummy \w'\\$1'u
-.        nr dcht ((\\n[.v] + \\n[rst]) * \\n[.ps] / \\n[rst])
-.        char \[dcap] \m[\\*[www-dropcolor]]\s'\\n[dcht]u'\\$1
-.        nop \v'\\n[.v]u'\\[dcap]\v'-\\n[.v]u'\c
-'        ti \w'\\[dcap]'u
-.      \}
-.    \}
-.  \}
-.  nop \\$2
-..
-.
-.\"
-.\" supplementary macros used by other macro sets
-.\"
-.\" here are some tags specially for -Tps or -Thtml when invoked by
-.\" pre-html to generate PNG images from postscript.
-.
-.\" --------------------------------------------------------------------
-.\" HTML-DO-IMAGE - tell troff to issue an image marker which can be
-.\"                 read back by pre-html
-.\"
-.de HTML-DO-IMAGE
-.  if r ps4html \
-.    nop \O[5\\$2\\$1.png]\O[1]\O[3]
-.  if \\n[www-html] \
-.    nop \O[5\\$2\\$1.png]\O[0]\O[3]
-..
-.
-.\" --------------------------------------------------------------------
-.\" HTML-IMAGE-END - terminate an image for HTML
-.\"
-.de HTML-IMAGE-END
-.  if r ps4html \
-.    nop \O[4]\O[2]\O[0]
-.  if \\n[www-html] \
-.    nop \O[4]\O[2]\O[1]
-..
-.
-.nr www-png-no 0
-.
-.\" --------------------------------------------------------------------
-.\" www-make-unique-name - generate another unique name in string
-.\"                        `www-unique-name'
-.\"
-.de www-make-unique-name
-.  nr www-png-no +1
-.  ds www-unique-name \\*[www-image-template]\\n[www-png-no]\"
-..
-.
-.\" --------------------------------------------------------------------
-.\" HTML-IMAGE and friends tell grohtml that this region of text needs
-.\"            to be rendered as an image.
-.\"
-.de HTML-IMAGE
-.  \" generates a centered image
-.  www-make-unique-name
-.  HTML-DO-IMAGE \\*[www-unique-name] c
-..
-.
-.de HTML-IMAGE-RIGHT
-.  www-make-unique-name
-.  HTML-DO-IMAGE \\*[www-unique-name] r
-..
-.
-.de HTML-IMAGE-LEFT
-.  www-make-unique-name
-.  HTML-DO-IMAGE \\*[www-unique-name] l
-..
-.
-.de HTML-IMAGE-INLINE
-.  www-make-unique-name
-.  HTML-DO-IMAGE \\*[www-unique-name] i
-..
-.
-.\"  EQN-HTML-IMAGE and friends check to see whether the equation is
-.\"                 not in an image, in which case it allows HTML
-.\"                 (mathml) to be generated (if -Txhtml was specified).
-.
-.de EQN-HTML-IMAGE
-.  \" generates a centered image
-.  www-make-unique-name
-.  EQN-HTML-DO-IMAGE \\*[www-unique-name] c
-..
-.
-.de EQN-HTML-IMAGE-RIGHT
-.  www-make-unique-name
-.  EQN-HTML-DO-IMAGE \\*[www-unique-name] r
-..
-.
-.de EQN-HTML-IMAGE-LEFT
-.  www-make-unique-name
-.  EQN-HTML-DO-IMAGE \\*[www-unique-name] l
-..
-.
-.de EQN-HTML-IMAGE-INLINE
-.  www-make-unique-name
-.  EQN-HTML-DO-IMAGE \\*[www-unique-name] i
-..
-.
-.\" --------------------------------------------------------------------
-.\" EQN-HTML-DO-IMAGE - tell troff to issue an image marker which can be
-.\"                     read back by pre-html
-.\"
-.de EQN-HTML-DO-IMAGE
-.  ie r xhtml \{\
-.    if !(\\n[.O] == 0) \{\
-.      if r ps4html \
-.        nop \O[5\\$2\\$1.png]\O[1]\O[3]
-.      if \\n[www-html] \
-.        nop \O[5\\$2\\$1.png]\O[0]\O[3]
-.    \}
-.  \}
-.  el \
-.    HTML-DO-IMAGE \\$*
-..
-.
-.\" --------------------------------------------------------------------
-.\" EQN-HTML-IMAGE-END - terminate an image for HTML
-.\"
-.de EQN-HTML-IMAGE-END
-.  ie r xhtml \{\
-.    if !(\\n[.O] == 0) \{\
-.      if r ps4html \
-.        nop \O[4]\O[2]\O[0]
-.      if \\n[www-html] \
-.        nop \O[4]\O[2]\O[1]
-.    \}
-.  \}
-.  el \
-.    HTML-IMAGE-END
-..
-.
-.\" --------------------------------------------------------------------
-.\" Setup around HTML-IMAGE and friends
-.\"
-.\" now set up TS, TE, EQ, EN default macros
-.\"
-.\" we must not use `.als': the definition of .TE in s.tmac, for example,
-.\" calls .HTML-IMAGE-END, which would refer to itself due to the alias,
-.\" causing an endless loop
-.\"
-.if !d TS \{\
-.  de TS
-.    HTML-IMAGE \\$@
-.    if \\n[www-html] \{\
-.      nr www-TS-ll \\n[.l]
-.      ll 1000n
-.    \}
-.  .
-.\}
-.if !d TE \{\
-.  de TE
-.    if \\n[www-html] \
-.      ll \\n[www-TS-ll]u
-.    HTML-IMAGE-END \\$@
-.  .
-.\}
-.if !d EQ \{\
-.  de EQ
-.    EQN-HTML-IMAGE \\$@
-.    if \\n[www-html] \{\
-.      nr www-EQ-ll \\n[.l]
-.      ll 1000n
-.    \}
-.  .
-.\}
-.if !d EN \{\
-.  de EN
-.    if \\n[www-html] \
-.      ll \\n[www-EQ-ll]u
-.    EQN-HTML-IMAGE-END \\$@
-.  .
-.\}
-.
-.\" --------------------------------------------------------------------
-.\" JOBNAME
-.\"
-.\"   Generate multiple output files containing the HTML.
-.\"   A file is split whenever a .SH or .NH 1 is encountered.
-.\"   The argument to JOBNAME is the file stem for future output files.
-.\"
-.de JOBNAME
-.  DEVTAG .job-name \\$1
-..
-.
-.\" --------------------------------------------------------------------
-.\" HEAD
-.\"
-.\"   Add information to the <head> </head> section of the HTML
-.\"   document
-.\"
-.de HEAD
-.  DEVTAG .head "\\$*"
-..
-.
-.\" --------------------------------------------------------------------
-.\" start of some code
-.\"
-.de CDS
-.  ft C
-.  nf
-..
-.
-.\" --------------------------------------------------------------------
-.\" end of some code
-.\"
-.de CDE
-.  fi
-.  ft P
-..
-.
-.ds www-nav-colour #eeeeee\"
-.nr www-nav-width-left 30
-.nr www-nav-width-right 70
-.
-.\" --------------------------------------------------------------------
-.\" LNS - left navigation start
-.\"
-.de LNS
-.  HTML</p> <table><tr><td "valign=""top""" \
-                           "width=""\\n[www-nav-width-left]%""" \
-                           "bgcolor=""\\*[www-nav-colour]"">"
-.  LK
-.  HTML</p> </td><td "valign=""top""" \
-                     "width=""\\n[www-nav-width-right]%"">"
-.  nr SH-open 1
-..
-.
-.\" --------------------------------------------------------------------
-.\" LNE - left navigation end
-.\"
-.de LNE
-.  HTML</p> </td></tr></table>
-.  HR
-..
-.
-.nr SH-open 0
-.nr needs-begin 0
-.
-.\"
-.\" some auxiliary macros for left navigation lists
-.\"
-.de www-SH
-.  if (0\\$1 == 0) \{\
-.    if (\\n[SH-open] == 1) \
-.      LNE
-.    nr needs-begin 1
-.    @SH-old
-.  \}
-..
-.
-.de www-NH
-.  if (0\\$1 <= 1) \{\
-.    if (\\n[SH-open] == 1) \
-.      LNE
-.    nr needs-begin 1
-.    @NH-old
-.  \}
-..
-.
-.de www-LP
-.  @LP-old
-.  if (\\n[needs-begin] == 1) \{\
-.    HR
-.    LNS
-.  \}
-.  nr needs-begin 0
-..
-.
-.\" --------------------------------------------------------------------
-.\" ALN [colour] [left width percentage]
-.\"
-.\"   Turn on automatic left navigation.  This macro should only be
-.\"   called once (normally at the start of the document) as it
-.\"   indicates that all top-level section headings form a navigation
-.\"   list on the left of the main text.
-.\"
-.de ALN
-.  if '\*[.T]'html' \{\
-.    if !'\\$1'' \
-.      ds www-nav-colour \\$1\"
-.    if (0\\$2 > 0) \{\
-.      nr www-nav-width-left \\$2
-.      nr www-nav-width-right (100 - \\$2)
-.    \}
-.    rn @SH @SH-old
-.    rn www-SH @SH
-.    rn @NH @NH-old
-.    rn www-NH @NH
-.    rn @LP @LP-old
-.    rn www-LP @LP
-.  \}
-..
-.
-.\" --------------------------------------------------------------------
-.\" LINKSTYLE color [fontstyle [openglyph closeglyph]]
-.\"
-.\"   Initialize www.tmac so that when this macro set is used with
-.\"   non-HTML devices the urls are rendered the user defined attributes.
-.\"   For example:
-.\"
-.\"   LINKSTYLE blue CR < >
-.\"
-.de LINKSTYLE
-.  if (\\n[.$] < 1) \
-.    www:error .\\$0 expects at least 1 argument.
-.  ds www:color \\$1\"
-.  shift
-.  if (\\n[.$] < 1) \
-.    return
-.  ds www:fontstyle \\$1\"
-.  shift
-.  if (\\n[.$] < 1) \
-.    www:error .\\$0 expects that both the open and close glyph is specified
-.  ds www:open \\$1\"
-.  ds www:close \\$2\"
-..
-.
-.\" MATHML - enable eqn mathml output to pass through to the device
-.\"          driver
-.
-.de MATHML
-.  if (\\n[.O] == 0) \
-.    MATH<?p> \\$*
-..
-.
-.\" --------------------------------------------------------------------
-.\" final setup
-.\" --------------------------------------------------------------------
-.
-.LINKSTYLE blue C \[la] \[ra]
-.
-.if \n[www-html] \{\
-.  nh
-.  nr HY 0
-.\}
-.
-.if r ps4html .nop \O[0]
-.cp \n(_C
-.
-.\" now set
-.
-.\" --------------------------------------------------------------------
-.\" Emacs settings
-.\" --------------------------------------------------------------------
-.
-.\" Local Variables:
-.\" mode: nroff
-.\" End:
-.\" EOF
diff --git a/tmac/www.tmac.in b/tmac/www.tmac.in
new file mode 100644 (file)
index 0000000..0ccadf9
--- /dev/null
@@ -0,0 +1,1635 @@
+.ig
+www.tmac - macro package for adding HTML elements to roff documents.
+
+File position: <groff_source_top>/tmac/www.tmac
+Installed position: groff's main macro directory.
+
+------------------------------------------------------------------------
+    Legalese
+------------------------------------------------------------------------
+
+This file is part of groff, the GNU roff type-setting system.
+
+Copyright (C) 2001-2018 Free Software Foundation, Inc.
+written by Gaius Mulley <gaius@glam.ac.uk>, with additions by
+Werner Lemberg <wl@gnu.org> and
+Bernd Warken <groff-bernd.warken-72@web.de>.
+
+groff 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 3 of the License, or (at your
+option) any later version.
+
+groff 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, see <http://www.gnu.org/licenses/>.
+
+
+------------------------------------------------------------------------
+    Description
+------------------------------------------------------------------------
+
+A simple set of macros to provide HTML (or XHTML) documents with basic
+www functionality.  It should work with any macro set.  In the
+following, HTML always denotes XHTML also.
+..
+.
+.
+.\" --------------------------------------------------------------------
+.\" Setup
+.\" --------------------------------------------------------------------
+.
+.do if d www:lenstr .nx
+.
+.do mso devtag.tmac
+.
+.nr _C \n(.C
+.cp 0
+.
+.
+.\" Taken from tmac/an-ext.tmac
+.\" Map mono-width fonts to standard fonts for groff's TTY device.
+.if n \{\
+.  do ftr CR R
+.  do ftr CW R
+.  do ftr CI I
+.  do ftr CB B
+.\}
+.
+.ie r xhtml \
+.  ds www-> />\"
+.el \
+.  ds www-> >\"
+.
+.nr www-html 0
+.if '\*[.T]'html' \
+.  nr www-html 1
+.
+.\" set up www-image-template
+.
+.if !d www-image-template \
+.  ds www-image-template
+.
+.if r ps4html \{\
+.  \" remove the title command when we are generating images for HTML
+.  \" (stops a title accidentally appearing inside an image)
+.  di www-notitle
+.  tl ''''
+.  di
+.  rm tl
+.  de tl
+.  .
+.\}
+.
+.
+.\" --------------------------------------------------------------------
+.\" Test for '.substring'; result in register 'www.substring_ok'.
+.\" The automated break points in .URL addresses are only added if
+.\" this register is non-zero.
+.\"
+.nr www:substring_ok 0
+.de www:@test_substring
+.  if !d substring \
+.    return
+.  ds \\$0:s abcdefg\"
+.  substring \\$0:s 1 1
+.  if !'\\*[\\$0:s]'b' \{\
+.    rm \\$0:s
+.    return
+.  \}
+.  ds \\$0:s abcdefg\"
+.  substring \\$0:s 0 0
+.  if !'\\*[\\$0:s]'a' \{\
+.    rm \\$0:s
+.    return
+.  \}
+.  ds \\$0:s abcdefg\"
+.  substring \\$0:s 1 -1
+.  if !'\\*[\\$0:s]'bcdefg' \{\
+.    rm \\$0:s
+.    return
+.  \}
+.  nr www:substring_ok 1
+.  rm \\$0:s
+..
+.www:@test_substring
+.rm www:@test_substring
+.
+.
+.\" --------------------------------------------------------------------
+.\" Local Macros
+.\" --------------------------------------------------------------------
+.
+.\" --------------------------------------------------------------------
+.\" www:paraspace
+.\"
+.\" Space before paragraph. Use \n[PD] if it exists.
+.\"
+.nr www:pd 0.5v
+.
+.de www:paraspace
+.  ie r PD \
+.    sp \\n[PD]u
+.  el \
+.    sp \\n[www:pd]u
+..
+.
+.\" --------------------------------------------------------------------
+.\" www:error (<test>...)
+.\"
+.\" Print error message.
+.\"
+.de www-error
+.  tm \\n[.F]:\\n[.c]: macro error: \\$*
+..
+.
+.als www:error www-error
+.
+.\" --------------------------------------------------------------------
+.\" www:lenstr (<register_name> <string_name>)
+.\"
+.\" Store length of string named <string_name> into register named
+.\" <register_name>.
+.\"
+.de www:lenstr
+.  if !(\\n[.$] == 2) \{\
+.    tm .\\$0 expects 2 arguments.
+.    ab
+.  \}
+.  length \\$0:n x\\*[\\$2]
+.  nr \\$1 (\\n[\\$0:n] - 1)
+.  rr \\$0:n
+..
+.
+.\" --------------------------------------------------------------------
+.\" www:splitstr (<name>)
+.\"
+.\" Add a space character between any two adjacent characters in string
+.\" <name> and restore result into the string variable <name>; space
+.\" characters are first replaced by the word 'space'.
+.\"
+.de www:splitstr
+.  if !(\\n[.$] == 1) \
+.    www:error .\\$0 expects 1 argument.
+.  if '\\*[\\$1]'' \
+.    return
+.  ds \\$0:r "\\*[\\$1]\"
+.  ds \\$0:s
+.  while 1 \{\
+.    ds \\$0:c "\\*[\\$0:r]\"
+.    substring \\$0:c 0 0
+.    ie '\\*[\\$0:c]' ' \
+.      as \\$0:s " space\"
+.    el \
+.      as \\$0:s " \\*[\\$0:c]\"
+.    www:lenstr \\$0:n \\$0:r
+.    if (\\n[\\$0:n] <= 1) \
+.      break
+.    substring \\$0:r 1 -1
+.  \}
+.  if !'\\*[\\$0:s]'' \
+.    substring \\$0:s 1 -1 
+.  ds \\$1 \\*[\\$0:s]\"
+.  rm \\$0:c
+.  rr \\$0:n
+.  rm \\$0:r
+.  rm \\$0:s
+..
+.
+.\" --------------------------------------------------------------------
+.\" www:url_breaks (<string_name>)
+.\"
+.\" Add '\:' (possible break point) within URL strings after '/'.
+.\"
+.\" Smart about multiple '/', existing '\:', and space characters;
+.\" does not set a break point if less than 5 characters would go to
+.\" the next line.
+.\"
+.de www:url_breaks
+.  if !(\\n[.$] == 1) \
+.    www:error .\\$0 expects 1 argument.
+.  if !\n[www:substring_ok] \
+.    return
+.  ds \\$0:s "\\*[\\$1]\"
+.  www:splitstr \\$0:s
+.  www:url_breaks_split \\$0:s \\*[\\$0:s]
+.  ds \\$1 "\\*[\\$0:s]\"
+.  rm \\$0:s
+..
+.
+.\" --------------------------------------------------------------------
+.\" www:url_breaks_split (<result> <char> [<char>...])
+.\"
+.\" Add '\:' within URL strings, but arguments are a split string.
+.\"
+.\" Arguments: >=2: <result> <char> [<char>...]
+.\"
+.de www:url_breaks_split
+.  nr \\$0:min 5        \" minimal number of characters for next line
+.  if (\\n[.$] < 2) \
+.    www:error .\\$0 expects at least 2 arguments.
+.  ds \\$0:res \\$1\"
+.  shift
+.  ds \\$0:s
+.  nr \\$0:done 0
+.  while !\\n[\\$0:done] \{\
+.    if (\\n[.$] <= 0) \
+.      break
+.    if '\\$1'space' \{\
+.      as \\$0:s " \"
+.      shift
+.      continue
+.    \}
+.    if (\\n[.$] < \\n[\\$0:min]) \{\
+.      as \\$0:s "\\$1\"
+.      shift
+.      continue
+.    \}
+.    if !'\\$1'/' \{\
+.      as \\$0:s "\\$1\"
+.      shift
+.      continue
+.    \}
+.    \" we are at a '/' character
+.    while '\\$1'/' \{\
+.      as \\$0:s /\"
+.      if (\\n[.$] == 0) \{\
+.        nr \\$0:done 1
+.        break
+.      \}
+.      shift
+.    \}
+.    if \\n[\\$0:done] \
+.      break
+.    if (\\n[.$] < \\n[\\$0:min]) \
+.      continue
+.    if '\\$1'\:' \
+.      shift
+.    as \\$0:s \:\"
+.  \}
+.  ds \\*[\\$0:res] \\*[\\$0:s]\"
+.  rm \\$0:res
+.  rm \\$0:s
+..
+.
+.
+.\" --------------------------------------------------------------------
+.\" User Interface
+.\" --------------------------------------------------------------------
+.
+.\" --------------------------------------------------------------------
+.\" HTML
+.\"
+.\" The main auxiliary macro for the HTML interface.
+.\"
+.de HTML
+.  if \\n[www-html] \{\
+.    \" was implemented via .nop \&\X^html:\\$*^ but
+.    \" is now implemented using HTML-NS to utilize code factoring.
+.    \"
+.    \" the '\&' makes the vertical mode leave, so to say
+.    \"
+.    nop \&\c
+.    HTML-NS \\$*
+.    nop \&
+.  \}
+..
+.
+.\"
+.\" An auxiliary macro for HTML (without following space).
+.\"
+.de HTML-NS
+.  nop \X^html:\\$*^\c
+..
+.
+.\"
+.\" Emit an HTML tag after shutting down a (possibly open) paragraph.
+.\"
+.de HTML</p>
+.  ie \\n[www-html] \{\
+.    \" the '\&' makes the vertical mode leave, so to say
+.    nop \&\X^html</p>:\\$*^
+.  \}
+.  el \
+.    www:paraspace
+..
+.
+.\"
+.\" Emit an HTML tag.  If text has been written in the paragraph
+.\"                    then do not shut the paragraph down.
+.\"                    If text was not written, remove the empty
+.\"                    paragraph tag and emit the desired HTML tag.
+.\"
+.de HTML<?p>
+.  if \\n[www-html] \
+.    nop \&\X^html<?p>:\\$*^
+..
+.
+.\"
+.\" Emit a MATH tag.  If text has been written in the paragraph
+.\"                   then do not shut the paragraph down.
+.\"                   If text was not written, remove the empty
+.\"                   paragraph tag and emit the desired math tag.
+.\"
+.de MATH<?p>
+.  if \\n[www-html] \
+.    nop \&\X^math<?p>:\\$*^
+..
+.
+.\" --------------------------------------------------------------------
+.\" HX n
+.\"
+.\"   Automatic heading level cut off.
+.\"
+.\"   N is the depth limit of automatically linked headings.  So a depth
+.\"   of 2 would cause grohtml to generate a list of links for '.NH 1'
+.\"   and '.NH 2' but not for '.NH 3'.
+.\"
+.de HX
+.  if \\n[www-html] \
+.    nop \X^index:\\$*^
+..
+.
+.\" --------------------------------------------------------------------
+.\" BCL foreground background active not-visited visited
+.\"
+.de BCL
+.  HTML <body "text=""\\$1""" \
+              "bgcolor=""\\$2""" \
+              "link=""\\$3""" \
+              "alink=""\\$4""" \
+              "vlink=""\\$5"">"
+..
+.
+.\" --------------------------------------------------------------------
+.\" BGIMG imagefile
+.\"
+.de BGIMG
+.  HTML <body "background=""\\$1"">"
+..
+.
+.\" www:url_check_tag str
+.\"    If url named by \*[str] is internal (starts with #), 
+.\"    redefine \*[str] to be the value of the string TAG_url.
+.
+.de www:url_check_tag
+.  ds \\$0:tmp \\*[\\$1]\"
+.  substring \\$0:tmp 0 0
+.  if '\\*[\\$0:tmp]'#' \{\
+.    ds \\$0:tmp \\*[\\$1]\"
+.    substring \\$0:tmp 1
+.    ds \\$0:tmp TAG_\\*[\\$0:tmp]\"
+.
+.    ie d \\*[\\$0:tmp] \
+.      ds \\$1 \\*[\\*[\\$0:tmp]]\"
+.    el \
+.      ds \\$1 see below\"
+.  \} 
+.  rm \\$0:tmp
+..
+.
+.\" --------------------------------------------------------------------
+.\" URL url [description] [after]
+.\"
+.\"   If description is absent then the url becomes the anchor text.
+.\"
+.de URL
+.  if !'\\$1'' \{\
+.    ds \\$0:adr \\$1\"
+.    www:url_check_tag \\$0:adr
+.    if !\\n[www-html] \
+.      www:url_breaks \\$0:adr
+.  \}
+.  ie \\n[www-html] \{\
+.    ie '\\$3'' \
+.      ds \\$0:after \&\"
+.    el \
+.      ds \\$0:after \&\\$3\"
+.
+.    ie '\\$2'' \
+.       HTML-NS <a "href=""\\$1"">\\*[\\$0:adr]</a>"
+.    el \
+.       HTML-NS <a "href=""\\$1"">\\$2</a>"
+.
+.    nop \\*[\\$0:after]
+.    rm \\$0:after
+.  \}
+.  el \{\
+.    if !r ps4html \
+.      ad l
+.
+.    ie '\\$2'' \{\
+.      ie '\\$1'' \{\
+.        if !'\\$3'' \
+.          nop \\$3
+.      \}
+.      el \{\
+.        ie \\n[.color] \
+.          nop \%\\*[www:open]\m[\\*[www:color]]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\m[]\\*[www:close]\\$3
+.        el \
+.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
+.      \}
+.    \}
+.    el \{\
+.      ie '\\$1'' \{\
+.        ie \\n[.color] \
+.          nop \m[\\*[www:color]]\\$2\m[]\\$3
+.        el \
+.          nop \f[\\*[www:fontstyle]]\\$2\f[]\\$3
+.      \}
+.      el \{\
+.        ie \\n[.color] \{\
+.          nop \m[\\*[www:color]]\\$2\m[]
+.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
+.        \}
+.        el \{\
+.          nop \f[\\*[www:fontstyle]]\\$2\f[]
+.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\*[\\$0:adr]\f[]\\*[www:close]\\$3
+.        \}
+.      \}
+.    \}
+.
+.    if !r ps4html \
+.      ad
+.  \}
+.  rm \\$0:adr
+..
+.
+.\" --------------------------------------------------------------------
+.\" FTP url description [after]
+.\"
+.\"   Same as URL.
+.\"
+.als FTP URL
+.
+.\" --------------------------------------------------------------------
+.\" MTO address description [after]
+.\"
+.\"   ADDRESS is the email address (without the 'mailto:' prefix).
+.\"
+.\"   DESCRIPTION is the optional name.  If an empty argument is given,
+.\"   ADDRESS is used instead.
+.\"
+.\"   AFTER is optional stuff printed immediately after ADDRESS
+.\"   (resp. DESCRIPTION).
+.\"
+.\"     Example:
+.\"
+.\"       Foobar has been written by
+.\"       .MTO fred@foo.bar "Fredrick Bloggs" .
+.\"
+.de MTO
+.  ie \\n[www-html] \{\
+.    ie '\\$2'' \
+.      URL mailto:\\$1 \\$1 "\\$3"
+.    el \
+.      URL mailto:\\$1 "\\$2" "\\$3"
+.  \}
+.  el \{\
+.    ie '\\$2'' \{\
+.      ie '\\$1'' \{\
+.        ie !'\\$3'' \
+.          nop \\$3
+.      \}
+.      el \{\
+.        ie \\n[.color] \
+.          nop \%\m[\\*[www:color]]\f[\\*[www:fontstyle]]\\$1\f[]\m[]\\$3
+.        el \
+.          nop \%\f[\\*[www:fontstyle]]\\$1\f[]\\$3
+.      \}
+.    \}
+.    el \{\
+.      ie '\\$1'' \{\
+.        ie \\n[.color] \
+.          nop \m[\\*[www:color]]\\$2\m[]\\$3
+.        el \
+.          nop \f[\\*[www:fontstyle]]\\$2\f[]\\$3
+.      \}
+.      el \{\
+.        ie \\n[.color] \{\
+.          nop \m[\\*[www:color]]\\$2\m[]
+.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]\\$3
+.        \}
+.        el \{\
+.          nop \f[\\*[www:fontstyle]]\\$2\f[]
+.          nop \%\\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]\\$3
+.        \}
+.      \}
+.    \}
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" TAG name [text]
+.\"
+.\"   Generate an HTML name NAME.
+.\"   Define string TAG_NAME to TEXT, if present, otherwise to \n[PN].
+.\"   Register PN is the current page number.
+.\"
+.de TAG
+.  HTML <a "name=""\\$1""></a>"
+.  ie '\\$2'' \
+.    if !rPN \
+.      nr PN \\n%
+.    ds TAG_\\$1 \\n[PN]\"
+.  el \
+.    ds TAG_\\$1 \\$2\"
+..
+.
+.\" --------------------------------------------------------------------
+.\" IMG [-R|-L|-C] filename [width] [height]
+.\"
+.\"   Include an image of any type (only works for -Thtml).
+.\"
+.\"   Alignment is centered by default (-C).
+.\"   Default value for WIDTH is 1i.
+.\"   If HEIGHT is not given, WIDTH is used as the height.
+.\"
+.de IMG
+.  ie \\n[www-html] \{\
+.    ie '\\$2'-R' \
+.      DEVTAG .right-image
+.    el \{\
+.      ie '\\$2'-L' \
+.        DEVTAG .left-image
+.      el \
+.        DEVTAG .centered-image
+.    \}
+.    nr www-width 100
+.    if !'\\$3'' \
+.      nr www-width \\$3
+.    nr www-height \\n[www-width]
+.    if !'\\$4'' \
+.      nr www-height \\$4
+.    HTML <img "src=""\\$1""" \
+               "alt=""Image \\$1""" \
+               "width=""\\n[www-width]""" \
+               "height=""\\n[www-height]""\\*[www->]"
+.  \}
+.  el \
+.    nop \\*[www:open]\f[\\*[www:fontstyle]]\\$1\f[]\\*[www:close]
+..
+.
+.\" --------------------------------------------------------------------
+.\" PIMG  [-R|-L|-C] filename [width] [height]
+.\"
+.\"   Include a PNG image.  It works for -Tps and -Thtml.
+.\"   The default value for WIDTH and HEIGHT is zero; the default
+.\"   alignment is centering (-C).
+.\"
+.\" Note: This macro can only be used with the '-U' option of groff,
+.\"       activating unsafe mode, if not used with -Thtml; the PNG image
+.\"       is then converted to the EPS format using netpbm utilities.
+.\"
+.de PIMG
+.  ds www-pic-align -C\"
+.  ie '\\$1'-R' \{\
+.    ds www-pic-align -R\"
+.    shift
+.  \}
+.  el \{\
+.    if '\\$1'-L' \{\
+.      ds www-pic-align -L\"
+.      shift
+.    \}
+.  \}
+.  if '\\$1'-C' \
+.    shift
+.
+.  ie \\n[www-html] \{\
+.    ds www-htmlalign align="center"\"
+.    if '\\*[www-pic-align]'-R' \
+.      ds www-htmlalign align="right"\"
+.    if '\\*[www-pic-align]'-L' \
+.      ds www-htmlalign align="left"\"
+.
+.    nr www-width 0
+.    nr www-height 0
+.    if !'\\$2'' \
+.      nr www-width (\\$3 * 100 / 240)
+.    if !'\\$3'' \
+.      nr www-height (\\$4 * 100 / 240)
+.    ie (\\n[www-width] == 0) \{\
+.      ie (\\n[www-height] == 0) \
+.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
+                                             "alt=""Image \\$1""\\*[www->]</p>"
+.      el \
+.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
+                                             "alt=""Image \\$1""" \
+                                             "height=""\\n[www-height]""\\*[www->]</p>"
+.    \}
+.    el \{\
+.      ie (\\n[www-height] == 0) \
+.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
+                                             "alt=""Image \\$1""" \
+                                             "width=""\\n[www-width]""\\*[www->]</p>"
+.      el \
+.        HTML</p> <p \\*[www-htmlalign]><img "src=""\\$1""" \
+                                             "alt=""Image \\$1""" \
+                                             "width=""\\n[www-width]""" \
+                                             "height=""\\n[www-height]""\\*[www->]</p>"
+.    \}
+.  \}
+.  el \{\
+.    if !r ps4html \{\
+.      www-make-unique-name
+.      sy pngtopnm \\$1 \
+          | pnmcrop -white \
+          | @PNMTOPS_NOSETPAGE@ -noturn \
+          > \\*[www-unique-name].eps
+.      shift
+.      PSPIC \\*[www-pic-align] \\*[www-unique-name].eps \\$*
+.    \}
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" auxiliary definitions for MPIMG
+.\"
+.nr www-left-ll-trap 0
+.nr www-left-po-trap 0
+.nr www-right-ll-trap 0
+.
+.de www-finish-left-po
+.  po -(\\n[www-left-indent]u + \\n[www-image-gap]u)
+.  wh \\n[www-left-po-trap]u
+.  nr www-left-indent 0
+..
+.
+.\" called when the -R picture is finished
+.de www-finish-right-ll
+.  ll +(\\n[www-right-indent]u + \\n[www-image-gap]u)
+.
+.  \" now check whether we need to inline www-finish-left-ll
+.  if (\\n[www-left-ll-trap]u > 0) \
+.    if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-ll-trap]u) \{\
+.      mk www-left-po-trap
+.      nr www-left-po-trap +1v
+.      wh \\n[www-left-po-trap]u www-finish-left-po
+.      ll +\\n[www-left-indent]u
+.      wh \\n[www-left-ll-trap]u
+.      nr www-left-ll-trap 0
+.    \}
+.
+.  \" and check whether we need to inline www-finish-left-po
+.  if (\\n[www-left-po-trap]u > 0) \
+.    if ((\\n[www-right-ll-trap]u + 1v) >= \\n[www-left-po-trap]u) \{\
+.      po -\\n[www-left-indent]u
+.      wh \\n[www-left-po-trap]u
+.      nr www-left-indent 0
+.    \}
+.
+.  wh \\n[www-right-ll-trap]u
+.  nr www-right-ll-trap 0
+..
+.
+.de www-finish-left-ll
+.  if (\\n[www-right-ll-trap] > 0) \
+.    if ((\\n[www-left-ll-trap] + 1v) >= \\n[www-right-ll-trap]) \{\
+.      ll +\\n[www-right-indent]u
+.      nr www-right-ll-trap 0
+.    \}
+.
+.  mk www-left-po-trap
+.  nr www-left-po-trap +1v
+.  wh \\n[www-left-po-trap]u www-finish-left-po
+.  ll +(\\n[www-left-indent]u + \\n[www-image-gap]u)
+.  wh \\n[www-left-ll-trap]u
+.  nr www-left-ll-trap 0
+..
+.
+.\" www-handle-percent arg N1 N2 S1
+.\"     arg - input string (number or number%)
+.\"     output parameters:
+.\"         N1 - name of number register 1=absolute 0=percentage
+.\"         N2 - number register name for absolute value
+.\"         S1 - string register name for percentage value
+.\"
+.de www-handle-percent
+.  ds www-percent \\$1\"
+.  substring www-percent -1 -1
+.
+.  ie '\\*[www-percent]'%' \{\
+.    ds www-abs \\$1\"
+.    substring www-abs 0 -2
+.    nr \\$2 0
+.    nr \\$3 \\*[www-abs]
+.    ds \\$4 \\$1\"
+.  \}
+.  el \{\
+.    nr \\$2 1
+.    nr \\$3 \\$1
+.    ds \\$4 none\"
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" MPIMG [-R|-L] [-G gap] filename [width [height]]
+.\"
+.\"   Include a PNG image and wrap text around it.  It works for
+.\"   -Tps and -Thtml.  The default value for WIDTH is 1i; default value
+.\"   for HEIGHT is WIDTH; the default alignment is left (-L).
+.\"   -G is used to insert a gap between the text and the image.
+.\"   The height and width can also be given as a percentage.
+.\"   The PostScript device converts the percentage width into an
+.\"   absolute value by using \\n[.l], and the height by using \\n[.p].
+.\"
+.\"
+.\" Note: This macro can only be used with the '-U' option of groff,
+.\"       activating unsafe mode, if not used with -Thtml; the PNG image
+.\"       is then converted to the EPS format using netpbm utilities.
+.\"
+.nr www-htmlimage-gap 0
+.
+.de MPIMG
+.  nr www-image-just 1
+.  nr www-image-gap 0
+.  while (\\n[.$] > 0) \{\
+.    if '-L'\\$1' \{\
+.      nr www-image-just 1
+.      shift
+.      continue
+.    \}
+.    if '-R'\\$1' \{\
+.      nr www-image-just 0
+.      shift
+.      continue
+.    \}
+.    if '-G'\\$1' \{\
+.      nr www-image-gap \\$2
+.      nr www-htmlimage-gap (\\$2 * 100 / 240)
+.      shift 2
+.      continue
+.    \}
+.    break
+.  \}
+.
+.  nr www-width 1i
+.  nr www-height 1i
+.  ds www-size-specs width="\\n[www-width]" height="\\n[www-height]"\"
+.  ie !'\\$2'' \{\
+.    nr www-is-absolute 0
+.    nr www-absolute 0
+.    ds www-percentage none\"
+.    www-handle-percent \\$2 www-is-absolute www-absolute www-percentage
+.    ie !\\n[www-is-absolute] \{\
+.      \" percentage of linelength requested
+.      nr www-width (\\n[www-absolute] * \\n[.l] / 100)
+.      if \\n[www-html] \
+.        nr www-width (\\n[www-width] * 100 / 240)
+.      ds www-size-specs width="\\*[www-percentage]"\"
+.    \}
+.    el \{\
+.      nr www-width \\n[www-absolute]
+.      if \\n[www-html] \
+.        nr www-width (\\n[www-width] * 100 / 240)
+.      ds www-size-specs width="\\n[www-width]"\"
+.    \}
+.
+.    nr www-height \\n[www-width]
+.    ie !'\\$3'' \{\
+.      nr www-is-absolute 0
+.      nr www-absolute 0
+.      ds www-percentage none\"
+.      www-handle-percent \\$3 www-is-absolute www-absolute www-percentage
+.      ie !\\n[www-is-absolute] \{\
+.        \" percentage of pagelength requested
+.        nr www-height (\\n[www-absolute] * \\n[.p] / 100)
+.        if \\n[www-html] \
+.           nr www-height (\\n[www-height] * 100 / 240)
+.        ds www-size-specs "\\*[www-size-specs] height="\\*[www-percentage]"\"
+.      \}
+.      el \{\
+.        nr www-height \\n[www-absolute]
+.        if \\n[www-html] \
+.           nr www-height (\\n[www-height] * 100 / 240)
+.        ds www-size-specs "\\*[www-size-specs] height="\\*[www-height]"\"
+.      \}
+.    \}
+.  \}
+.  el \{\
+.    \" height not specified; use width value
+.    ie !\\n[www-is-absolute] \{\
+.       \" percentage value
+.       ds www-size-specs "\\*[www-size-specs] height="\\*[www-percentage]"\"
+.       nr www-height \\n[www-width]
+.    \}
+.    el \{\
+.       ds www-size-specs "\\*[www-size-specs] height="\\*[www-width]"\"
+.       nr www-height \\n[www-width]
+.    \}
+.  \}
+.
+.  ie \\n[www-html] \{\
+.    ie !\\n[www-image-just] \
+.      HTML <img "src=""\\$1""" \
+                 "alt=""Image \\$1""" \
+                 "hspace=""\\n[www-htmlimage-gap]""" \
+                 "align=""right""" \
+                 "\\*[www-size-specs]\\*[www->]"
+.    el \
+.      HTML <img "src=""\\$1""" \
+                 "alt=""Image \\$1""" \
+                 "hspace=""\\n[www-htmlimage-gap]""" \
+                 "align=""left""" \
+                 "\\*[www-size-specs]\\*[www->]"
+.  \}
+.  el \{\
+.    tm www-width is \\n[www-width]
+.    tm www-height is \\n[www-height]
+.    if !r ps4html \{\
+.      www-make-unique-name
+.      sy pngtopnm \\$1 \
+          | pnmcrop -white \
+          | @PNMTOPS_NOSETPAGE@ -noturn \
+          > \\*[www-unique-name].eps
+.      ie !\\n[www-image-just] \{\
+.        \" we must now disable a possible left image trap
+.        sp -1
+.        if (\\n[www-left-ll-trap] > 0) \
+.          wh \\n[www-left-ll-trap]u
+.        if (\\n[www-left-po-trap] > 0) \
+.          wh \\n[www-left-po-trap]u
+.        PSPIC -R \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u
+.        sp -\\n[ps-desht]u
+.
+.        nr www-right-indent \\n[ps-deswid]u
+.        \" we want to have some space between text and image,
+.        \" so the line length must be shorter
+.        ll -(\\n[www-right-indent]u + \\n[www-image-gap]u)
+.        mk www-right-ll-trap
+.        nr www-right-ll-trap +(\\n[ps-desht]u - 1v)
+.        wh \\n[www-right-ll-trap]u www-finish-right-ll
+.
+.        \" now restore possible left trap
+.        if (\\n[www-left-ll-trap] > 0) \
+.          wh \\n[www-left-ll-trap]u www-finish-left-ll
+.        if (\\n[www-left-po-trap] > 0) \
+.          wh \\n[www-left-po-trap]u
+.      \}
+.      el \{\
+.        \" we must now disable a possible right image trap
+.        if (\\n[www-right-ll-trap] > 0) \
+.          wh \\n[www-right-ll-trap]u
+.        PSPIC -L \\*[www-unique-name].eps \\n[www-width]u \\n[www-height]u
+.        sp -\\n[ps-desht]u
+.
+.        nr www-left-indent \\n[ps-deswid]u
+.        \" increase offset by gap
+.        po +(\\n[www-left-indent]u + \\n[www-image-gap]u)
+.        \" decrease line length by gap
+.        ll -(\\n[www-left-indent]u + \\n[www-image-gap]u)
+.        mk www-left-ll-trap
+.        nr www-left-ll-trap +(\\n[ps-desht]u - 1v)
+.        wh \\n[www-left-ll-trap]u www-finish-left-ll
+.
+.        \" now restore possible right trap
+.        if (\\n[www-right-ll-trap] > 0) \
+.          wh \\n[www-right-ll-trap]u www-finish-right-ll
+.      \}
+.    \}
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" HnS n
+.\"
+.\"   Begin heading.  Heading level is N.
+.\"
+.\" HnE
+.\"
+.\"   End heading.
+.\"
+.\" If your heading contains URL, FTP, MTO macros you might wish to
+.\" disable automatic links to headings.  This can be done via '-P-l'
+.\" from the command line or by using a cakk to '.HX 0'.
+.\"
+.nr www-heading-no -1
+.
+.de HnS
+.  ie '\\$1'' \
+.    nr www-heading-no 1
+.  el \
+.    nr www-heading-no \\$1
+.  DEVTAG-NH \\n[www-heading-no]
+..
+.
+.de HnE
+.  if (\\n[www-heading-no] == -1) \
+.    www-error HnE found without a corresponding HnS
+.  DEVTAG-EO-H
+..
+.
+.\" --------------------------------------------------------------------
+.\" LK
+.\"
+.\"   Emit the automatically collected links derived from
+.\"   section/numbered headings at this position.
+.\"
+.de LK
+.  DEVTAG .links
+..
+.
+.\" --------------------------------------------------------------------
+.\" HR
+.\"
+.\"   Produce a horizontal line.
+.\"
+.de HR
+.  HTML</p> <hr\\*[www->]
+..
+.
+.\" --------------------------------------------------------------------
+.\" NHR
+.\"
+.\"  Suppress the generation of the top and bottom rules which grohtml
+.\"  emits by default.
+.\"
+.de NHR
+.  DEVTAG .no-auto-rule
+..
+.
+.\"
+.\" www-end-nowhere - end of input trap called to finish diversion.
+.\"
+.de www-end-nowhere
+.  if !\\n[www-html] \
+.    di
+.  DEVTAG-EO-TL
+..
+.
+.\" --------------------------------------------------------------------
+.\" HTL
+.\"
+.\"   Generate an HTML title only.  This differs from the -ms .TL macro
+.\"   which generates both an HTML title and an H1 heading.
+.\"
+.\"   This is useful when an author wishes to use an HTML title as
+.\"   search engine fodder but a graphic title in the document.
+.\"
+.\"   The macro terminates when a space or break is seen (.sp, .br).
+.\"
+.de HTL
+.  DEVTAG .html-tl
+.  if !\\n[www-html] \
+.    di www-nowhere
+.  it 2 www-end-nowhere
+..
+.
+.\" --------------------------------------------------------------------
+.\" auxiliary definitions for lists
+.\"
+.ds www-ul-level1 \[bu]\ \ \"
+.ds www-ul-level2 \[sq]\ \ \"
+.ds www-ul-level3 \[ci]\ \ \"
+.nr www-ul-level 0
+.
+.ds www-ol-level1 decimal\"
+.ds www-ol-level2 lower-alpha\"
+.ds www-ol-level3 lower-roman\"
+.ds www-ol-tmp 00\ \ \"
+.nr www-ol-ctr1 0 1
+.nr www-ol-ctr2 0 1
+.nr www-ol-ctr3 0 1
+.af www-ol-ctr2 a
+.af www-ol-ctr3 i
+.nr www-ol-level 0
+.
+.nr www-dl-level 0
+.nr www-dl-shift 5n
+.
+.\"
+.\" allow nested lists
+.\"
+.nr www-depth 0
+.nr www-li-indent \n[.i]
+.ds www-level0 nop\"
+.ds www-level1
+.ds www-level2
+.ds www-level3
+.ds www-level4
+.ds www-level5
+.ds www-level6
+.ds www-level7
+.ds www-level8
+.ds www-level9
+.
+.\" which macro to use for LI
+.de www-push-li
+.  nr www-li-indent \\n[.i]
+.  nr www-depth +1
+.  ds www-level\\n[www-depth] \\$1\"
+.  ds www-ltag\\n[www-depth]
+.  als LI \\$1
+..
+.
+.de www-pop-li
+.  nr www-depth -1
+.  als LI \\*[www-level\\n[www-depth]]
+..
+.
+.\" www-emit-ltag - shut down a previous open list tag
+.\"                 before issuing a new tag \\$1.
+.\"                 It then records tag \\$1 is open.
+.
+.de www-emit-ltag
+.  if !'\\*[www-ltag\\n[www-depth]]'' \
+.    HTML-NS </\\*[www-ltag\\n[www-depth]]>
+.  if !'\\$1'' \
+.    HTML-NS <\\$1>
+.  ds www-ltag\\n[www-depth] \\$1\"
+..
+.
+.\"
+.\" Auxiliary macro for ULS.
+.\"
+.de www-push-ul-level
+.  nr www-ul-level +1
+.  if (\\n[www-ul-level] > 3) \
+.    www-error ULS: too many levels of indentation (\\n[www-ul-level])
+..
+.\"
+.\" Auxiliary macro for ULE.
+.\"
+.de www-pop-ul-level
+.  if !\\n[www-ul-level] \
+.    www-error ULE: trying to terminate a list which does not exist
+.  nr www-ul-level -1
+..
+.
+.\"
+.\" Auxiliary macro for OLS.
+.\"
+.de www-push-ol-level
+.  nr www-ol-level +1
+.  if (\\n[www-ol-level] > 3) \
+.    www-error OLS: too many levels of indentation (\\n[www-ol-level])
+..
+.
+.\"
+.\" Auxiliary macro for OLE.
+.\"
+.de www-pop-ol-level
+.  if !\\n[www-ol-level] \
+.    www-error OLE: trying to terminate a list which does not exist
+.  nr www-ol-level -1
+..
+.
+.\" --------------------------------------------------------------------
+.\" ULS
+.\"
+.\"   Start an unordered list.
+.\"
+.de ULS
+.  www-push-li www-li-ul
+.  www-push-ul-level
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML</p> <ul>
+.  \}
+.  el \
+.    nr www-li-indent +\w'\\*[www-ul-level\\n[www-ul-level]]'u
+..
+.
+.\" --------------------------------------------------------------------
+.\" ULE
+.\"
+.\"   End an unordered list.
+.\"
+.de ULE
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML</p> </ul>
+.  \}
+.  el \{\
+.    nr www-li-indent -\w'\\*[www-ul-level\\n[www-ul-level]]'u
+.    in \\n[www-li-indent]u
+.  \}
+.  www-pop-ul-level
+.  www-pop-li
+..
+.
+.\" --------------------------------------------------------------------
+.\" OLS
+.\"
+.\"   Start an ordered list.
+.\"
+.de OLS
+.  www-push-li www-li-ol
+.  www-push-ol-level
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML</p> <ol "style=""list-style-type:" \
+                           "\\*[www-ol-level\\n[www-ol-level]]"">"
+.  \}
+.  el \
+.    nr www-li-indent +\w'\\*[www-ol-tmp]'u
+..
+.
+.\" --------------------------------------------------------------------
+.\" OLE
+.\"
+.\"   End an ordered list.
+.\"
+.de OLE
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML </ol>
+.  \}
+.  el \{\
+.    nr www-li-indent -\w'\\*[www-ol-tmp]'u
+.    in \\n[www-li-indent]u
+.    nr www-ol-ctr\\n[www-ol-level] 0 1
+.  \}
+.  www-pop-ol-level
+.  www-pop-li
+..
+.
+.\" --------------------------------------------------------------------
+.\" DLS
+.\"
+.\"   Start a definition list.
+.\"
+.de DLS
+.  www-push-li www-li-dl
+.  nr www-dl-level +1
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML</p> <dl>
+.  \}
+.  el \{\
+.    nr www-li-indent +\\n[www-dl-shift]u
+.    in \\n[www-li-indent]u
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" DLE
+.\"
+.\"   End a definition list.
+.\"
+.de DLE
+.  ie \\n[www-html] \{\
+.    www-emit-ltag
+.    HTML </dl>
+.  \}
+.  el \{\
+.    nr www-li-indent -\\n[www-dl-shift]u
+.    in \\n[www-li-indent]u
+.  \}
+.  nr www-dl-level -1
+.  www-pop-li
+..
+.
+.\" --------------------------------------------------------------------
+.\" LI
+.\"
+.\"   Insert a list item.
+.\"
+.
+.\" ********
+.\" www-li-ul - bulleted list item
+.\"
+.de www-li-ul
+.  ie \\n[www-html] \
+.    www-emit-ltag li
+.  el \{\
+.    www:paraspace
+.    if rPORPHANS \
+.      ne \\n[PORPHANS]v
+.    in \\n[www-li-indent]u
+.    ti -\w'\\*[www-ul-level\\n[www-ul-level]]'u
+.    nop \\*[www-ul-level\\n[www-ul-level]]\c
+.  \}
+..
+.
+.\" ********
+.\" www-li-ol - numbered list item
+.\"
+.de www-li-ol
+.  ie \\n[www-html] \
+.    www-emit-ltag li
+.  el \{\
+.    www:paraspace
+.    if rPORPHANS \
+.      ne \\n[PORPHANS]v
+.    in \\n[www-li-indent]u
+.    ti -\w'\\n+[www-ol-ctr\\n[www-ol-level]]\ \ 'u
+.    nop \\n[www-ol-ctr\\n[www-ol-level]]\ \ \c
+.  \}
+..
+.
+.\" ********
+.\" www-li-dl - definition list item
+.\"
+.de www-li-dl
+.  ie \\n[www-html] \{\
+.    HTML <dt>\\$1</dt>
+.    www-emit-ltag dd
+.  \}
+.  el \{\
+.    www:paraspace
+.    if rPORPHANS \
+.      ne \\n[PORPHANS]v
+.    in \\n[www-li-indent]u
+.    ti -\\n[www-dl-shift]u
+.    nop \&\\$1
+.    br
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" DC l text [color]
+.\"
+.\"   L is the letter to be dropped and enlarged.
+.\"
+.\"   TEXT is the following text whose height the first letter should
+.\"   not exceed.
+.\"
+.\"   COLOR is the optional color of the dropped letter (default black).
+.\"
+.de DC
+.  ds www-dropcolor black\"
+.  if !'\\$3'' \
+.    ds www-dropcolor \\$3\"
+.  ie '\*[.T]'html' \{\
+.    www-make-unique-name
+.    nr www-drop-width (100u * \\n[.v]u * 3u / \\n[.l]u)
+.    MPIMG -L \\*[www-unique-name].png \\n[www-drop-width]%
+.  \}
+.  el \{\
+.    ie r ps4html \{\
+.      www-make-unique-name
+.      \" To avoid interferences with another DC macro call which is
+.      \" located very near to the current one, we draw the glyph on a
+.      \" separate page.  Otherwise it could theoretically happen that
+.      \" the dropped capital glyphs overlap.
+.      bp
+.      ev www-DC
+.      vs 320p
+.      nop \O[5i\\*[www-unique-name].png]\O[1]
+.      nop \m[\\*[www-dropcolor]]\s[160]\O[3]\\$1\O[4]
+.      nop \O[2]\O[0]
+.      br
+.      ev
+.      bp
+.    \}
+.    el \{\
+.      ie n \
+.        nop \\$1\c
+.      el \{\
+.        nr dummy \w'\\$1'u
+.        nr dcht ((\\n[.v] + \\n[rst]) * \\n[.ps] / \\n[rst])
+.        char \[dcap] \m[\\*[www-dropcolor]]\s'\\n[dcht]u'\\$1
+.        nop \v'\\n[.v]u'\\[dcap]\v'-\\n[.v]u'\c
+'        ti \w'\\[dcap]'u
+.      \}
+.    \}
+.  \}
+.  nop \\$2
+..
+.
+.\"
+.\" supplementary macros used by other macro sets
+.\"
+.\" here are some tags specially for -Tps or -Thtml when invoked by
+.\" pre-html to generate PNG images from postscript.
+.
+.\" --------------------------------------------------------------------
+.\" HTML-DO-IMAGE - tell troff to issue an image marker which can be
+.\"                 read back by pre-html
+.\"
+.de HTML-DO-IMAGE
+.  if r ps4html \
+.    nop \O[5\\$2\\$1.png]\O[1]\O[3]
+.  if \\n[www-html] \
+.    nop \O[5\\$2\\$1.png]\O[0]\O[3]
+..
+.
+.\" --------------------------------------------------------------------
+.\" HTML-IMAGE-END - terminate an image for HTML
+.\"
+.de HTML-IMAGE-END
+.  if r ps4html \
+.    nop \O[4]\O[2]\O[0]
+.  if \\n[www-html] \
+.    nop \O[4]\O[2]\O[1]
+..
+.
+.nr www-png-no 0
+.
+.\" --------------------------------------------------------------------
+.\" www-make-unique-name - generate another unique name in string
+.\"                        'www-unique-name'
+.\"
+.de www-make-unique-name
+.  nr www-png-no +1
+.  ds www-unique-name \\*[www-image-template]\\n[www-png-no]\"
+..
+.
+.\" --------------------------------------------------------------------
+.\" HTML-IMAGE and friends tell grohtml that this region of text needs
+.\"            to be rendered as an image.
+.\"
+.de HTML-IMAGE
+.  \" generates a centered image
+.  www-make-unique-name
+.  HTML-DO-IMAGE \\*[www-unique-name] c
+..
+.
+.de HTML-IMAGE-RIGHT
+.  www-make-unique-name
+.  HTML-DO-IMAGE \\*[www-unique-name] r
+..
+.
+.de HTML-IMAGE-LEFT
+.  www-make-unique-name
+.  HTML-DO-IMAGE \\*[www-unique-name] l
+..
+.
+.de HTML-IMAGE-INLINE
+.  www-make-unique-name
+.  HTML-DO-IMAGE \\*[www-unique-name] i
+..
+.
+.\"  EQN-HTML-IMAGE and friends check to see whether the equation is
+.\"                 not in an image, in which case it allows HTML
+.\"                 (mathml) to be generated (if -Txhtml was specified).
+.
+.de EQN-HTML-IMAGE
+.  \" generates a centered image
+.  www-make-unique-name
+.  EQN-HTML-DO-IMAGE \\*[www-unique-name] c
+..
+.
+.de EQN-HTML-IMAGE-RIGHT
+.  www-make-unique-name
+.  EQN-HTML-DO-IMAGE \\*[www-unique-name] r
+..
+.
+.de EQN-HTML-IMAGE-LEFT
+.  www-make-unique-name
+.  EQN-HTML-DO-IMAGE \\*[www-unique-name] l
+..
+.
+.de EQN-HTML-IMAGE-INLINE
+.  www-make-unique-name
+.  EQN-HTML-DO-IMAGE \\*[www-unique-name] i
+..
+.
+.\" --------------------------------------------------------------------
+.\" EQN-HTML-DO-IMAGE - tell troff to issue an image marker which can be
+.\"                     read back by pre-html
+.\"
+.de EQN-HTML-DO-IMAGE
+.  ie r xhtml \{\
+.    if !(\\n[.O] == 0) \{\
+.      if r ps4html \
+.        nop \O[5\\$2\\$1.png]\O[1]\O[3]
+.      if \\n[www-html] \
+.        nop \O[5\\$2\\$1.png]\O[0]\O[3]
+.    \}
+.  \}
+.  el \
+.    HTML-DO-IMAGE \\$*
+..
+.
+.\" --------------------------------------------------------------------
+.\" EQN-HTML-IMAGE-END - terminate an image for HTML
+.\"
+.de EQN-HTML-IMAGE-END
+.  ie r xhtml \{\
+.    if !(\\n[.O] == 0) \{\
+.      if r ps4html \
+.        nop \O[4]\O[2]\O[0]
+.      if \\n[www-html] \
+.        nop \O[4]\O[2]\O[1]
+.    \}
+.  \}
+.  el \
+.    HTML-IMAGE-END
+..
+.
+.\" --------------------------------------------------------------------
+.\" Setup around HTML-IMAGE and friends
+.\"
+.\" now set up TS, TE, EQ, EN default macros
+.\"
+.\" we must not use '.als': the definition of .TE in s.tmac, for
+.\" example, calls .HTML-IMAGE-END, which would refer to itself due to
+.\" the alias, causing an endless loop
+.\"
+.if !d TS \{\
+.  de TS
+.    HTML-IMAGE \\$@
+.    if \\n[www-html] \{\
+.      nr www-TS-ll \\n[.l]
+.      ll 1000n
+.    \}
+.  .
+.\}
+.if !d TE \{\
+.  de TE
+.    if \\n[www-html] \
+.      ll \\n[www-TS-ll]u
+.    HTML-IMAGE-END \\$@
+.  .
+.\}
+.if !d EQ \{\
+.  de EQ
+.    EQN-HTML-IMAGE \\$@
+.    if \\n[www-html] \{\
+.      nr www-EQ-ll \\n[.l]
+.      ll 1000n
+.    \}
+.  .
+.\}
+.if !d EN \{\
+.  de EN
+.    if \\n[www-html] \
+.      ll \\n[www-EQ-ll]u
+.    EQN-HTML-IMAGE-END \\$@
+.  .
+.\}
+.
+.\" --------------------------------------------------------------------
+.\" JOBNAME
+.\"
+.\"   Generate multiple output files containing the HTML.
+.\"   A file is split whenever a .SH or .NH 1 is encountered.
+.\"   The argument to JOBNAME is the file stem for future output files.
+.\"
+.de JOBNAME
+.  DEVTAG .job-name \\$1
+..
+.
+.\" --------------------------------------------------------------------
+.\" HEAD
+.\"
+.\"   Add information to the <head> </head> section of the HTML
+.\"   document
+.\"
+.de HEAD
+.  DEVTAG .head "\\$*"
+..
+.
+.\" --------------------------------------------------------------------
+.\" start of some code
+.\"
+.de CDS
+.  ft CR
+.  nf
+..
+.
+.\" --------------------------------------------------------------------
+.\" end of some code
+.\"
+.de CDE
+.  fi
+.  ft P
+..
+.
+.ds www-nav-colour #eeeeee\"
+.nr www-nav-width-left 30
+.nr www-nav-width-right 70
+.
+.\" --------------------------------------------------------------------
+.\" LNS - left navigation start
+.\"
+.de LNS
+.  HTML</p> <table><tr><td "valign=""top""" \
+                           "width=""\\n[www-nav-width-left]%""" \
+                           "bgcolor=""\\*[www-nav-colour]"">"
+.  LK
+.  HTML</p> </td><td "valign=""top""" \
+                     "width=""\\n[www-nav-width-right]%"">"
+.  nr SH-open 1
+..
+.
+.\" --------------------------------------------------------------------
+.\" LNE - left navigation end
+.\"
+.de LNE
+.  HTML</p> </td></tr></table>
+.  HR
+..
+.
+.nr SH-open 0
+.nr needs-begin 0
+.
+.\"
+.\" some auxiliary macros for left navigation lists
+.\"
+.de www-SH
+.  if (0\\$1 == 0) \{\
+.    if (\\n[SH-open] == 1) \
+.      LNE
+.    nr needs-begin 1
+.    @SH-old
+.  \}
+..
+.
+.de www-NH
+.  if (0\\$1 <= 1) \{\
+.    if (\\n[SH-open] == 1) \
+.      LNE
+.    nr needs-begin 1
+.    @NH-old
+.  \}
+..
+.
+.de www-LP
+.  @LP-old
+.  if (\\n[needs-begin] == 1) \{\
+.    HR
+.    LNS
+.  \}
+.  nr needs-begin 0
+..
+.
+.\" --------------------------------------------------------------------
+.\" ALN [colour] [left width percentage]
+.\"
+.\"   Turn on automatic left navigation.  This macro should only be
+.\"   called once (normally at the start of the document) as it
+.\"   indicates that all top-level section headings form a navigation
+.\"   list on the left of the main text.
+.\"
+.de ALN
+.  if '\*[.T]'html' \{\
+.    if !'\\$1'' \
+.      ds www-nav-colour \\$1\"
+.    if (0\\$2 > 0) \{\
+.      nr www-nav-width-left \\$2
+.      nr www-nav-width-right (100 - \\$2)
+.    \}
+.    rn @SH @SH-old
+.    rn www-SH @SH
+.    rn @NH @NH-old
+.    rn www-NH @NH
+.    rn @LP @LP-old
+.    rn www-LP @LP
+.  \}
+..
+.
+.\" --------------------------------------------------------------------
+.\" LINKSTYLE color [fontstyle [openglyph closeglyph]]
+.\"
+.\"   Initialize www.tmac so that when this macro set is used with
+.\"   non-HTML devices the urls are rendered the user defined
+.\"   attributes.  For example:
+.\"
+.\"   LINKSTYLE blue CR < >
+.\"
+.de LINKSTYLE
+.  if (\\n[.$] < 1) \
+.    www:error .\\$0 expects at least 1 argument.
+.  ds www:color \\$1\"
+.  shift
+.  if (\\n[.$] < 1) \
+.    return
+.  ds www:fontstyle \\$1\"
+.  shift
+.  if (\\n[.$] < 1) \
+.    www:error .\\$0 expects that both the open and close glyph is specified
+.  ds www:open \\$1\"
+.  ds www:close \\$2\"
+..
+.
+.\" MATHML - enable eqn mathml output to pass through to the device
+.\"          driver
+.
+.de MATHML
+.  if (\\n[.O] == 0) \
+.    MATH<?p> \\$*
+..
+.
+.\" --------------------------------------------------------------------
+.\" final setup
+.\" --------------------------------------------------------------------
+.
+.LINKSTYLE blue CR \[la] \[ra]
+.
+.if \n[www-html] \{\
+.  nh
+.  nr HY 0
+.\}
+.
+.if r ps4html .nop \O[0]
+.cp \n(_C
+.
+.\" now set
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72:
diff --git a/tmac/zh.tmac b/tmac/zh.tmac
new file mode 100644 (file)
index 0000000..131fabc
--- /dev/null
@@ -0,0 +1,57 @@
+.\" Chinese localization for groff
+.\"
+.\" Copyright (C) 2015-2018 Free Software Foundation, Inc.
+.\"   Written by Darcy SHEN <sadhen1992@gmail.com>
+.\"   using 'ja.tmac' as a template
+.\"
+.\" This file is part of groff.
+.\"
+.\" groff 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 3 of the License, or
+.\" (at your option) any later version.
+.\"
+.\" groff 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, see
+.\" <http://www.gnu.org/licenses/>.
+.\"
+.\" Please send comments to groff@gnu.org.
+.
+.
+.\" The following rules work for both zh_CN and zh_TW.
+.
+.\" Locale string
+.
+.ds locale chinese\"
+.
+.
+.class [CJKprepunct] \
+  , : ; > } \
+  \[u2026] \[u201D] \
+  \[u3001] \[u3002] \[u3009] \[u300B] \[u300D] \[u300F] \[u3011] \
+  \[uFF01] \[uFF09] \[uFF0C] \[uFF1A] \[uFF1B] \[uFF1F]
+.class [CJKpostpunct] \
+  \[u201C] \[u3008] \[u300A] \[u300C] \[u300E] \[u3010] \[uFF08]
+.
+.\" Chinese glyphs.
+.class [CJKnormal] \
+  \[u4E00]-\[u9FFF]
+.
+.cflags 128 \C'[CJKprepunct]'
+.cflags 266 \C'[CJKpostpunct]'
+.cflags 512 \C'[CJKnormal]'
+.
+.\" ====================================================================
+.\" Editor settings
+.\" ====================================================================
+.
+.\" Local Variables:
+.\" mode: nroff
+.\" fill-column: 72
+.\" End:
+.\" vim: set filetype=groff textwidth=72: